[
  {
    "path": ".gitignore",
    "content": "\r\n## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n\r\n# Visual Studio User-specific files\n*.suo\r\n*.user\r\n*.sln.docstates\r\n*.vspscc\r\n# Visual Studio 2015 User-specific files\n.vs\n\n# nuget-specifics\npackages\n*.nupkg\nTools/nuget.exe\n\r\n# Build results\r\n*_i.c\r\n*_p.c\r\n*.ilk\r\n*.meta\r\n*.obj\r\n*.pch\r\n*.pdb\r\n*.pgc\r\n*.pgd\r\n*.rsp\r\n*.sbr\r\n*.tlb\r\n*.tli\r\n*.tlh\r\n*.tmp\r\n*.vspscc\r\n.builds\r\n**/*.dotCover\r\n*.dynamic.cs\r\n[Dd]ebug*/\r\nobj/\r\n[Rr]elease*/\r\n\r\n# Visual C++ cache files\r\nipch/\r\n*.aps\r\n*.ncb\r\n*.opensdf\r\n*.sdf\r\n\r\n# Visual Studio profiler\r\n*.psess\r\n*.vsp\r\n\r\n# ReSharper is a .NET coding add-in\r\n_ReSharper*\r\n\r\n# Installshield output folder\r\n[Ee]xpress\r\n\r\n# Backup & report files from converting an old project file to a newer\r\n# Visual Studio version. Backup files are not needed, because we have git ;-)\r\n_UpgradeReport_Files/\r\nBackup*/\r\nUpgradeLog*.XML\r\n~temp.log\r\n\r\n############\r\n## Windows\r\n############\r\n\r\n# Windows image file caches\r\nThumbs.db\r\n\r\n# Folder config file\r\nDesktop.ini\r\n\r\n# Output binaries\r\nDeployment/Bin/extutil.exe\r\nDeployment/Bin/MkDynamic.exe\r\nDeployment/Bin/phpc.exe\r\nDeployment/Bin/phpconfig.exe\r\nDeployment/Bin/PhpNetClassLibrary.dll\r\nDeployment/Bin/PhpNetCore.dll\r\nDeployment/Bin/PhpNetCore.Utils.dll\r\nDeployment/Bin/PhpNetCore.xml\r\nDeployment/Bin/PhpNetMsSql.dll\r\nDeployment/Bin/PhpNetMsSql.xml\r\nDeployment/Bin/PhpNetPDO.dll\r\nDeployment/Bin/PhpNetPDOSQLite.dll\r\nDeployment/Bin/PhpNetPDOSQLServer.dll\r\nDeployment/Bin/PhpNetSQLite.dll\r\nDeployment/Bin/PhpNetXmlDom.dll\r\nDeployment/Bin/PhpNetXmlDom.xml\r\nDeployment/Bin/PhpNetZip.dll\r\nDeployment/Bin/System.Data.SQLite.dll\r\nDeployment/Release*\nDeployment/Debug*\n"
  },
  {
    "path": "Deployment/Bin/gacall.cmd",
    "content": "cd %~dp0\r\nPATH = %PATH%;\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\NETFX 4.0 Tools\"\r\n\r\ngacutil -f -i PhpNetCore.dll\r\ngacutil -f -i PhpNetClassLibrary.dll\r\n\r\ngacutil -f -i php4ts.dll\r\ngacutil -f -i php5ts.dll\r\n\r\ngacutil -f -i PhpNetXmlDom.dll\r\ngacutil -f -i PhpNetCurl.dll\r\ngacutil -f -i PhpNetGd2.dll\r\ngacutil -f -i PhpNetMbString.dll\r\ngacutil -f -i PhpNetIconv.dll\r\ngacutil -f -i PhpNetSoap.dll\r\ngacutil -f -i PhpNetMsSql.dll\r\ngacutil -f -i PhpNetPDO.dll\r\ngacutil -f -i PhpNetPDOSQLite.dll\r\ngacutil -f -i PhpNetPDOSQLServer.dll\r\ngacutil -f -i PhpNetSQLite.dll\r\ngacutil -f -i PhpNetXml.dll\r\ngacutil -f -i PhpNetZlib.dll\r\ngacutil -f -i PhpNetZip.dll\r\n\r\ngacutil -f -i MySql.Data.dll\r\ngacutil -f -i PhpNetMySql.dll\r\ngacutil -f -i PhpNetPDOMySql.dll\r\n"
  },
  {
    "path": "Deployment/Dynamic/verify.bat",
    "content": "for %%i in (*.dll) do @\"../../Tools/peverify\" %%i\r\npause\r\n\r\n"
  },
  {
    "path": "Deployment/License.rtf",
    "content": "{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fdbmajor\\f31501\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\flominor\\f31504\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\fdbminor\\f31505\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;\r\n\\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 \r\n\\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\r\n\\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;}{\r\n\\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 \r\n\\b\\fs32\\lang1033\\langfe1033\\kerning32\\loch\\f31502\\hich\\af31502\\dbch\\af31501\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext0 \\slink15 \\sqformat \\spriority9 \\styrsid8403656 heading 1;}{\r\n\\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 \r\n\\b\\fs27\\lang1033\\langfe1033\\loch\\f0\\hich\\af0\\dbch\\af31505\\cgrid\\langnp1033\\langfenp1033 \\sbasedon0 \\snext3 \\slink16 \\sqformat \\spriority9 \\styrsid11359213 heading 3;}{\r\n\\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 \r\n\\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;}{\\*\r\n\\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\r\n\\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 \r\nNormal 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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\sbasedon10 \\sunhideused \\styrsid11359213 Hyperlink;}{\\*\\cs21 \\additive \\spriority0 \\styrsid11359213 apple-converted-space;}{\\s22\\ql \\li0\\ri0\\widctlpar\r\n\\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 \r\n\\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 \r\n\\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\r\n\\'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;}\r\n\\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\r\n\\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 }\r\n{\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\'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\r\n\\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\r\n\\'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;}\r\n\\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\r\n\\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 }\r\n{\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n{\\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\r\n\\'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;}\r\n\\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\r\n\\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 }\r\n{\\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\r\n\\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\r\n\\levelstartat1\\lvltentative\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fs20\\fbias0 \\fi-360\\li6480\\jclisttab\\tx6480\\lin6480 }{\\listname ;}\\listid1984693594}}{\\*\\listoverridetable{\\listoverride\\listid1984693594\r\n\\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}\r\n{\\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\r\n\\jclisttab\\tx720\\lin720 }}\\ls2}{\\listoverride\\listid645281266\\listoverridecount1{\\lfolevel\\listoverrideformat{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat0\\levelspace0\\levelindent0{\\leveltext\\'01\\u-3913 ?;}{\\levelnumbers\r\n;}\\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}\r\n{\\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\r\n\\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\r\n\\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\r\n\\rsid11359213\\rsid16405121\\rsid16602525}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\operator Jakub}{\\creatim\\yr2011\\mo9\\dy5\\hr18\\min14}\r\n{\\revtim\\yr2011\\mo12\\dy2\\hr12\\min54}{\\version9}{\\edmins2}{\\nofpages5}{\\nofwords1366}{\\nofchars7787}{\\nofcharsws9135}{\\vern49273}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\r\n\\paperw12240\\paperh15840\\margl1417\\margr1417\\margt1417\\margb1417\\gutter0\\ltrsect \r\n\\widowctrl\\ftnbj\\aenddoc\\trackmoves0\\trackformatting1\\donotembedsysfont0\\relyonvml0\\donotembedlingdata1\\grfdocevents0\\validatexml0\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\\showxmlerrors0\\horzdoc\\dghspace120\\dgvspace120\\dghorigin1701\r\n\\dgvorigin1984\\dghshow0\\dgvshow3\\jcompress\\viewkind1\\viewscale120\\rsidroot16405121 \\fet0{\\*\\wgrffmtfilter 2450}\\ilfomacatclnup0\\ltrpar \\sectd \\ltrsect\\linex0\\sectdefaultcl\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl2\r\n\\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\r\n\\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 \r\n{\\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 \r\n\\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)\r\n\\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 \r\n\\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 \r\n\\insrsid8403656\\charrsid7945933 \\hich\\af31506\\dbch\\af31505\\loch\\f31506 http://www.apache.org/licenses/}{\\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\insrsid8403656 \r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 1. Definitions.\r\n\\par \r\n\\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.\r\n\\par \r\n\\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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \"Legal Entity\" shall mean the union of\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\n 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\r\n\\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.\r\n\\par \r\n\\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.\r\n\\par \r\n\\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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \"Object\" form shall mean any form resulting from mechanical transformati\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\non or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\r\n\\par \r\n\\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 \r\nnse, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\r\n\\par \r\n\\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 \r\nor 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\r\n\\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.\r\n\\par \r\n\\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 \r\nis 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 c\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\n, 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 s\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nor 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.\"\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \"Contributor\" shall mean Licensor and any individual or Le\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\ngal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 2. Grant of Copyright License.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 Subject to the terms and conditions of this License, each Contri\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nbutor 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506  \\hich\\af31506\\dbch\\af31505\\loch\\f31506 Works in Source or Object form.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 3. Grant of Patent License.\r\n\\par \r\n\\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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nection) 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\ne 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\ncorporated 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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 4. Redistribution.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 You may reproduce and \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\ndistribute 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:\r\n\\par \r\n\\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\r\n\\par \r\n\\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\r\n\\par \r\n\\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 \r\ntribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\r\n\\par \r\n\\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 \r\ne 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506  \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\npart 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 E\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\n 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 i\\hich\\af31506\\dbch\\af31505\\loch\\f31506 bution notices cannot be construed as modifying the License.\r\n\\par \r\n\\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, \r\n\\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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 5. Submission of Contributions.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 Unless You explicitly state otherwise, any Contribut\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nion 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\r\n\\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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 6. Trademarks.\r\n\\par \r\n\\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 \r\nred for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 7. Disclaimer of Warranty.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 Unless required by applicable law\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\n 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 s\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\n 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 h\\hich\\af31506\\dbch\\af31505\\loch\\f31506 is License.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 8. Limitation of Liability.\r\n\\par \r\n\\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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nl 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506  \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\ndamages 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.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 9. Accepting Warranty or Additional Liability.\r\n\\par \r\n\\par \\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nWhile 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\r\n\\hich\\af31506\\dbch\\af31505\\loch\\f31506 \r\nigations, 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\r\n,\\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 \r\n\\par }{\\*\\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a\r\n9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad\r\n5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6\r\nb01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0\r\n0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6\r\na7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f\r\nc7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512\r\n0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462\r\na1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865\r\n6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b\r\n4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b\r\n4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100dd01bcf7be060000b91b0000160000007468656d652f7468656d652f\r\n7468656d65312e786d6cec594f6f1c3514bf23f11dacb997ec26bb6936eaa6ca6e761b48d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e\r\n0821a0522b7129a78a4f12288222f52bf06ccfcc8eb393366923a8a07b4866ec9fdffff7fcecb970f156ccd03e1192f2a4edd5dfa97988243e0f6812b6bd6bc3\r\nfeb9150f49859300339e90b63725d2bbb8f6f65b17f0aa8a484c10ac4fe42a6e7b9152e9eac282f46118cb77784a12981b73116305af225c08043e00ba315b58\r\nacd59617624c130f253806b2db5cd17d24a7523dfe369ea0abe331f589b79673e931609528a9077c26069a07c9966ee1c427ecf1d7bf7c61f0c15e5da3805497\r\n09b48f59db03a6013f18925bca430c4b05136daf667edec2da8505bc9a2d62ea98b5a5757df3cbd6650b82bd45c35384a38269bddf689ddf28e81b0053f3b85e\r\nafd7edd50b7a06807d1fb4b5b2946936fa2bf54e4eb304b28ff3b4bbb566ade1e24bf497e6646e753a9d662b93c5123520fbd898c3afd4961beb8b0ede802cbe\r\n39876f74d6bbdd65076f4016bf3c87ef9f6f2d375cbc01458c267b7368edd07e3fa35e40c69c6d56c25700be52cbe03314444311619ac59827ea79f116e39b5c\r\nf401a4c10c2b9a20354dc918fb10d65d1c8f04c59a095e25b83463877c3937a4f921e90b9aaab6f75e8a214566f49e3dfafed9a307e8f0f6c3c3db3f1ddeb973\r\n78fb474bc859b58993b0bceae9371fff75ef03f4e783af9edefdb41a2fcbf8df7ef8f0d79f3fa906420acdc479f2d9fddf1fde7ff2f9477f7c77b702be2ef0a8\r\n0c1fd2984874851ca05d1e8362c62aaee464244eb76218615a5eb19e8412275873a9a0df539183be32c52cf38e234787b816bc2ea08454012f4d6e3a020f2231\r\n51b482f356143bc06dce59878b4a2b6c695e25330f274958cd5c4ccab85d8cf7ab787771e2f8b73749a17ee661e928de8d8823e60ec389c2214988427a8eef11\r\n52a1dd0d4a1dbb6e535f70c9c70adda0a88369a5498674e444d36cd1268dc12fd32a9dc1df8e6db6afa30e67555a6f907d170959815985f043c21c335ec21385\r\ne32a92431cb3b2c12f6315550939980abf8ceb49059e0e09e3a8171029abd65c15a06fc9e95b18aa56a5dbb7d934769142d1bd2a9a9731e765e406dfeb46384e\r\nabb0039a4465ecbb720f4214a31daeaae0dbdccd10fd0e7ec0c9b1eebe4e89e3ee1757836b3474449a05889e99880a5f5e22dc89dfc1948d3131a5060abb53ab\r\n639a3caf70330a95db7238bbc20da5f2c997f72ae47e5d4bf63aec5e5539b379a4501f873b5a9ebb5c04f4f5afce1b7892ec104888f92dea4d717e539cbdff7c\r\n713e2e9fcfbe24cfaa301468dd8bd866dbb4def1733bef31656ca0a68c5c96a6f996b0ff047d18d46bcd319414a7b13482479dcdc0c4c185029b354870f53e55\r\nd120c22934ee754f130965463a9428e5120e8d66b892b6c643f3afec91b3a90f23b67a48acb679608797f4707ee628c818a94273b8cd192d69022765b6743e23\r\n0ababd0cb3ba16eac4dcea463453181d6e85cadac4e6800e262f5483c1c29ad0d8206887c0cacb7011a059c38107331268bb5b1fe56e315e384b17c9080724f3\r\n91d67bde4775e3a43c56e614d17ad860d007c81758adc4ada5c9be02b79338a9ccae710cbbdc7bafe2a53c82675e026a47d39125e5e464093a687bade662d343\r\n3e4edbde18cecaf018a7e075a97b49cc42b881f295b061ffc26436593ef3662b57cc4d823a5c8158bbcf29ecd4815448b581656443c34c6521c012cdc9cabfd8\r\n04b39e950215d5e864522cad4030fc6b52801d5dd792f198f8aaececd288b69d7dcd4a299f282206517080466c227631b85f872ae8135009571ea622e817b8a3\r\nd3d636536e71ce92ae7c336670761cb334c259b9d5299a67b2859b8254c860de4ae2816e95b21be54eaf8a49f93352a51cc6ff3355f47e0237104b81f6800ff7\r\nc502239d296d8f0b1571a8426944fdbe80e6c1d40e8816b8e78569082ab8b536ff05d9d7ff6dce591a26ade120a97669880485fd484582901d284b26fa5e40ac\r\n9eed5d9624cb0899882a892b532bf688ec1336d4357059efed1e8a20d44d35c9ca80c11d8d3ff73dcba051a89b9c72be3995acd87b6d0efcd39d8f4d6650caad\r\nc3a6a1c9ed5f8858b407b35dd5ae37cbf3bdb7ac889e98b5598d3c2b8059692b686569ff92229c72abb5156b4ee3c5662e1c78715e63182c1aa214ee9190fe03\r\nfb1f153eb35f3ef4863ae4bb505b117cc4d0c4206c20aacfd9c603e902690747d038d9411b4c9a94356dd63a69abe59bf51977ba05df23c6d6929dc4dfa73476\r\nd19cb9ec9c5c3c4b636716766c6dc78e353578f6688ac2d0383fcc18c7986f67e5af5a7c74131cbd01df0d264c49134cf0bd4a60e8a107260f20f92d47b374ed\r\n6f000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e\r\n616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc91363\r\n32de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3\r\na641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ff\r\nff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d\r\n2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01\r\n022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e61\r\n6765722e786d6c504b01022d0014000600080000002100dd01bcf7be060000b91b00001600000000000000000000000000d60200007468656d652f7468656d65\r\n2f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000c80900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000c30a00000000}\r\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\r\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\r\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\r\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\r\n{\\*\\latentstyles\\lsdstimax267\\lsdlockeddef0\\lsdsemihiddendef1\\lsdunhideuseddef1\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\r\n\\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;\r\n\\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;\r\n\\lsdpriority39 \\lsdlocked0 toc 8;\\lsdpriority39 \\lsdlocked0 toc 9;\\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority59 \\lsdlocked0 Table Grid;\\lsdunhideused0 \\lsdlocked0 Placeholder Text;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdunhideused0 \\lsdlocked0 Revision;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 3;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 6;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdpriority37 \\lsdlocked0 Bibliography;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;}}{\\*\\datastore 010500000200000018000000\r\n4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000\r\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000b06a\r\n9820e9b0cc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\r\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\r\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\r\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Deployment/License.txt",
    "content": "SOURCE CODE LICENSE\r\n\r\nLicense: Apache License 2.0 (Apache)\r\nApache License\r\nVersion 2.0, January 2004\r\nhttp://www.apache.org/licenses/\r\n\r\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n1. Definitions.\r\n\r\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\r\n\r\n\"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.\r\n\r\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\r\n\r\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\r\n\r\n\"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.\r\n\r\n\"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).\r\n\r\n\"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.\r\n\r\n\"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.\"\r\n\r\n\"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.\r\n\r\n2. Grant of Copyright License.\r\n\r\nSubject 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.\r\n\r\n3. Grant of Patent License.\r\n\r\nSubject 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.\r\n\r\n4. Redistribution.\r\n\r\nYou 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:\r\n\r\n1. You must give any other recipients of the Work or Derivative Works a copy of this License; and\r\n\r\n2. You must cause any modified files to carry prominent notices stating that You changed the files; and\r\n\r\n3. 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\r\n\r\n4. 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.\r\n\r\nYou 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.\r\n\r\n5. Submission of Contributions.\r\n\r\nUnless 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.\r\n\r\n6. Trademarks.\r\n\r\nThis 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.\r\n\r\n7. Disclaimer of Warranty.\r\n\r\nUnless 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.\r\n\r\n8. Limitation of Liability.\r\n\r\nIn 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.\r\n\r\n9. Accepting Warranty or Additional Liability.\r\n\r\nWhile 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.\r\n"
  },
  {
    "path": "Deployment/Machine.config",
    "content": "<!-- Phalanger configuration iutf-8hine.config file. --> \r\n\r\n<configuration>\r\n\r\n  <configSections>\r\n    <!-- Add the following line to <configSections> element --> \r\n    <section name=\"phpNet\" type=\"PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" />\r\n  </configSections>\r\n\r\n  <!-- Adds a HttpHandler to process PHP files by Phalanger -->\r\n  \r\n  <system.web>\r\n    <httpHandlers>\r\n      <add verb=\"*\" path=\"*.php\" type=\"PHP.Core.PageFactory, PhpNetCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" />\r\n    </httpHandlers>\r\n    </system.web>\r\n\r\n  <!-- Adds a CodeDomProvider to use PHP as a language for ASP.NET code-behind -->\r\n  \r\n  <system.codedom>\r\n    <compilers>\r\n      <compiler \r\n         language=\"PHP\" \r\n         extension=\".php\"\r\n         type=\"PHP.Core.CodeDom.PhpCodeProvider, PhpNetCore.CodeDom, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\"\r\n         compilerOptions=\"\" />\r\n    </compilers>\r\n  </system.codedom>\r\n\r\n  <!-- Add the following element somewhere after the <configSections> element.\r\n       Change the paths if necessary. -->\r\n\r\n  <phpNet>\r\n    \r\n    <paths>\r\n\t\t\t<set name=\"DynamicWrappers\" value=\"C:\\Development\\Phalanger\\4.0\\Deployment\\Dynamic\"/>\r\n\t\t\t<set name=\"Libraries\" value=\"C:\\Development\\Phalanger\\4.0\\Deployment\\Bin\"/>\t\t\t\r\n    </paths>\r\n    \r\n    <classLibrary>\r\n      <add assembly=\"PhpNetClassLibrary, Version=4.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\" section=\"bcl\" />\r\n      <add assembly=\"PhpNetXmlDom, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"dom\"/>\r\n    </classLibrary>\r\n    \r\n  </phpNet>   \r\n\r\n</configuration>\t"
  },
  {
    "path": "Deployment/Samples/ClassLibraryExt/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"Sample Extension\")]\r\n[assembly: AssemblyDescription(\"The Phalanger Class Library Sample Extension\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n\r\n//\r\n// The attribute telling the Phalanger this is PHP extension written in managed code.\r\n//\r\n[assembly: PHP.Core.PhpLibrary(\r\n    null,\r\n    \"ClassLibraryExt\",/*human readable name of this extension*/\r\n    new string[]{/*names of legacy extensions implemented by this assembly*/})]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n///*moved to project properties*/[assembly: AssemblyDelaySign(false)]\r\n///*moved to project properties*/[assembly: AssemblyKeyFile(\"../../Key.snk\")]\r\n///*moved to project properties*/[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Deployment/Samples/ClassLibraryExt/Class.cs",
    "content": "using System;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\n//\r\n// PHP.Library is the root namespace for PHalanger Extension functions, constants and classes.\r\n//\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// Define global PHP type \"MyPhpClass\".\r\n    /// \r\n    /// Currently, dynamic (argless) stubs must be created manually.\r\n    /// Argless stubs have a signature of \"object ????(object instance, PhpStack stack)\" and\r\n    /// they must be registered manually within __PopulateTypeDesc method.\r\n    /// </summary>\r\n\t[Serializable]\r\n    [ImplementsType]\r\n\tpublic partial class MyPhpClass : PhpObject\r\n    {\r\n        #region class & PHP class constants\r\n\r\n        /// <summary>Class constant \"MyPhpClass::e\"</summary>\r\n\t\tpublic static readonly object e = 2.71;\r\n\r\n        #endregion\r\n\r\n        #region properties\r\n\r\n        /// <summary>Public instance field.</summary>\r\n\t\tpublic PhpReference x;\r\n\r\n\t\t/// <summary>Public static field.\r\n        /// The field should be marked as [ThreadStatic] to get initialized every time the web request starts.</summary>\r\n        [PhpHasInitValue, ThreadStatic, System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\r\n\t\tpublic static PhpReference y;\r\n\r\n        #endregion\r\n\r\n        #region class method\r\n\r\n        /// <summary>Public instance method.</summary>\r\n        [ImplementsMethod]\r\n\t\tpublic object Foo(string value)\r\n\t\t{\r\n\t\t\t// echo the value:\r\n\t\t\tScriptContext.CurrentContext.Echo(value);\r\n\r\n\t\t\treturn null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        public MyPhpClass()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n            __construct();\r\n\t\t}\r\n\r\n        [PhpVisible, PhpFinal, ImplementsMethod]\r\n        public void __construct()\r\n        {\r\n            // class instance initialization\r\n        }\r\n\r\n        #endregion\r\n\r\n\t}  \r\n}  \r\n"
  },
  {
    "path": "Deployment/Samples/ClassLibraryExt/ClassLibraryExt.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" ToolsVersion=\"3.5\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{C0890912-84B0-48BE-B187-1DF97EE7C2B8}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>\r\n    </ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>ClassLibraryExt</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>ClassLibraryExt</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PhpNetCore\">\r\n      <Name>PhpNetCore</Name>\r\n      <HintPath>..\\..\\..\\Source\\Core\\Bin\\Debug\\PhpNetCore.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Class.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Class.dynamic.cs\" />\r\n    <Compile Include=\"Globals.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Key.snk\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/ClassLibraryExt/ClassLibraryExt.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\r\n# Visual Studio 2008\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ClassLibraryExt\", \"ClassLibraryExt.csproj\", \"{C0890912-84B0-48BE-B187-1DF97EE7C2B8}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C0890912-84B0-48BE-B187-1DF97EE7C2B8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Deployment/Samples/ClassLibraryExt/Globals.cs",
    "content": "using System;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\n//\r\n// PHP.Library is the root namespace for PHalanger Extension functions, constants and classes.\r\n//\r\nnamespace PHP.Library\r\n{\r\n    // The class without [ImplementsType] attribute is just a wrapper\r\n    // holding PHP global functions and constants.\r\n\tpublic sealed class MyClass\r\n\t{\r\n        /// <summary>\r\n        /// Define global constant \"MY_NEW_CONSTANT\".\r\n        /// </summary>\r\n\t\t[ImplementsConstant(\"MY_NEW_CONSTANT\")]\r\n\t\tpublic const string MyConstant = \"Hello World!\";\r\n    \r\n        /// <summary>\r\n        /// Define global function \"foo\".\r\n        /// </summary>\r\n        /// <returns></returns>\r\n\t\t[ImplementsFunction(\"foo\")]\r\n\t\tpublic static PhpArray Foo(int number)\r\n\t\t{\r\n            return PhpArray.New(1, 2, 3, number);\r\n\t\t}\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/ConsoleApplication.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"disks\", \"disks\\disks.phpproj\", \"{862F0609-B853-4314-A783-26F1579F3035}\"\r\nEndProject\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"netmodules\", \"netmodules\\netmodules.phpproj\", \"{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}\"\r\nEndProject\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"quadratic\", \"quadratic\\quadratic.phpproj\", \"{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}\"\r\nEndProject\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"Phalanger greeting\", \"Phalanger greeting\\Phalanger greeting.phpproj\", \"{451F18CD-836D-4B10-825E-F06A002F3E7B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{862F0609-B853-4314-A783-26F1579F3035}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{862F0609-B853-4314-A783-26F1579F3035}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{862F0609-B853-4314-A783-26F1579F3035}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{862F0609-B853-4314-A783-26F1579F3035}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CFDCE4DB-7273-4D4E-879C-4B4ED2EAB558}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1CFC1AAE-CAD2-4A96-972B-1CB272DE518D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{451F18CD-836D-4B10-825E-F06A002F3E7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{451F18CD-836D-4B10-825E-F06A002F3E7B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{451F18CD-836D-4B10-825E-F06A002F3E7B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{451F18CD-836D-4B10-825E-F06A002F3E7B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/MultiScriptAssembly/build.cmd",
    "content": "phpc /target:dll /static+ /root:. /recurse:ext/ /out:bin/ext.dll\r\nphpc /target:exe /static+ main.php /r:bin/ext.dll /out:bin/main.exe\r\n\r\npause"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/defs.php",
    "content": "<?php\r\n\r\ninclude \"fncs.php\";\r\ninclude \"types.php\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/fncs.php",
    "content": "<?php\r\n\r\nfunction printer($x)\r\n{\r\n    echo \"\\n$x\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/MultiScriptAssembly/ext/types.php",
    "content": "<?php\r\n\r\nclass X\r\n{\r\n    var $a, $b;\r\n    \r\n    function X($a, $b)\r\n    {\r\n        $this->a = $a;\r\n        $this->b = $b;\r\n    }\r\n    \r\n    function __toString()\r\n    {\r\n        return \"X(){ a = $this->a, b = $this->b };\";\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/MultiScriptAssembly/main.php",
    "content": "<?php\r\n\r\ninclude \"ext/defs.php\";\r\n\r\n$x = new X(1, 2);\r\n\r\nprinter( (string)$x );\r\n\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/Phalanger greeting/Phalanger greeting.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>Phalanger_greeting</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{451f18cd-836d-4b10-825e-f06a002f3e7b}</ProjectGuid>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>Phalanger_greeting</AssemblyName>\r\n    <StartupObject>Program.php</StartupObject>\r\n    <RootNamespace>Phalanger greeting</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>mscorlib</Name>\r\n      <AssemblyName>mscorlib.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>System</Name>\r\n      <AssemblyName>System.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <AssemblyName>PhpNetClassLibrary.dll</AssemblyName>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.php\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/Phalanger greeting/Program.php",
    "content": "<?php\r\n\r\n\t// Reading user input from console\r\n\r\n\techo \"                                                                         \\n\";\r\n\techo \"                                                                         \\n\";\r\n\techo \"  $$$$$$$    $$$     $$$  $$$$$$$       $$$     $$$  $$$$$$$$$  $$$$$$$$$\\n\";\r\n\techo \"  $$$$$$$$$  $$$     $$$  $$$$$$$$$     $$$$    $$$  $$$$$$$$$  $$$$$$$$$\\n\";\r\n\techo \"  $$     $$  $$$     $$$  $$     $$     $$$$$   $$$  $$$           $$$   \\n\";\r\n\techo \"  $$     $$  $$$     $$$  $$     $$     $$$ $$  $$$  $$$           $$$   \\n\";\r\n\techo \"  $$$$$$$$$  $$$$$$$$$$$  $$$$$$$$$     $$$  $$ $$$  $$$$$$        $$$   \\n\";\r\n\techo \"  $$$$$$$$   $$$$$$$$$$$  $$$$$$$$      $$$   $$$$$  $$$$$$        $$$   \\n\";\r\n\techo \"  $$$        $$$     $$$  $$$           $$$    $$$$  $$$           $$$   \\n\";\r\n\techo \"  $$$        $$$     $$$  $$$           $$$     $$$  $$$           $$$   \\n\";\r\n\techo \"  $$$        $$$     $$$  $$$      $$$  $$$     $$$  $$$$$$$$$     $$$   \\n\";\r\n\techo \"  $$$        $$$     $$$  $$$      $$$  $$$     $$$  $$$$$$$$$     $$$   \\n\";\r\n\techo \"                                                                         \\n\";\r\n\techo \"                                                                         \\n\";\r\n\t\r\n\techo \"                    Do you like Phalanger? (yes, no)  \";\r\n\t$answer = fgets(STDIN);\r\n\r\n\twhile (trim($answer) != \"yes\")\r\n\t{\r\n\t\techo \"\\n\";\r\n\t\techo \"         I'm asking you once again: DO YOU LIKE Phalanger????? (yes)  \";\r\n\t\t$answer = fgets(STDIN);\r\n\t}\r\n\t\r\n\techo \"\\n\";\r\n\techo \"              OK. I know that you are an intelligent guy :)\\n\";\r\n\techo \"\\n\";\r\n\techo \"                                Enjoy it!\\n\";\r\n\techo \"\\n\";\r\n\r\n\tfgets(STDIN);\t\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/Phalanger greeting/build.cmd",
    "content": "phpc /target:exe Program.php\r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/disks/Program.php",
    "content": "<?php\r\n\t\r\n\t// calling library file system function example\r\n\t\r\n\t// write out size in MB\r\n\t$MB = 1048576;\r\n\r\n\techo \"Disk free space example.\\n\\n\";\r\n\t\r\n\tforeach (range('C','F') as $drive)\r\n\t{\r\n\t\techo \"Drive $drive: \";\r\n\t\t$sp = disk_free_space(\"$drive:\");\r\n\t\t\r\n\t\tif ($sp === false)\r\n\t\t\techo \"not present\\n\";\r\n\t\telse\r\n\t\t\techo ((int)($sp/$MB)).\" MB free\\n\";\r\n\t}\r\n\r\n\tfgets(STDIN);\r\n\t\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/disks/build.cmd",
    "content": "phpc /target:exe Program.php\r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/disks/disks.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>disks</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{862f0609-b853-4314-a783-26f1579f3035}</ProjectGuid>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>disks</AssemblyName>\r\n    <StartupObject>Program.php</StartupObject>\r\n    <RootNamespace>disks</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>mscorlib</Name>\r\n      <AssemblyName>mscorlib.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>System</Name>\r\n      <AssemblyName>System.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <AssemblyName>PhpNetClassLibrary.dll</AssemblyName>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.php\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/netmodules/Program.php",
    "content": "<?php\r\n\r\n\t// including scripts example\r\n\t\r\n\tinclude \"a.php\";\r\n\trequire_once \"b.php\";\r\n\t\r\n\tf(12345);\r\n\t\r\n\t$a = new A(\"AAA\");\r\n\t$a->write();\r\n\t$a->foo(\"hello\");\r\n\t$a->write();\r\n\t\r\n\t$b = new B(\"BBB\");\r\n\t$b->write();\r\n\t$b->foo(\"bye\");\r\n\t$b->write();\r\n\t\r\n\tfgets(STDIN);\r\n\t\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/netmodules/a.php",
    "content": "<?php\r\n\r\n\tfunction f($x)\r\n\t{\r\n\t\techo \"Hello! I am a function f() and you call me with $x as my first \\$x parameter.\\n\";\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/netmodules/b.php",
    "content": "<?php\r\n\r\n\tclass A\r\n\t{\r\n\t\tprotected $x;\r\n\t\t\r\n\t\tfunction __construct($a)\r\n\t\t{\r\n\t\t\t$this->x = $a;\r\n\t\t\techo \"Hello! I'm a class A and I am constructed just now.\\n\";\r\n\t\t}\r\n\t\t\r\n\t\tfunction foo($x)\r\n\t\t{\r\n\t\t\t$this->x = $x;\r\n\t\t\t\r\n\t\t\techo \"Class A: I have just stored $x passed as parameter to my protected field \\$x.\\n\";\r\n\t\t}\r\n\t\t\r\n\t\tfunction write()\r\n\t\t{\r\n\t\t\techo \"Protected \\$x field: {$this->x}\\n\";\r\n\t\t}\r\n\t}\r\n\t\r\n\r\n\tclass B extends A\r\n\t{\r\n\t\tfunction foo($x)\r\n\t\t{\r\n\t\t\t$this->x = \"bar\";\r\n\t\t\t\r\n\t\t\techo \"Class B: My overridden method foo has been called. I have stored what I like to \\$x private field.\\n\";\r\n\t\t}\r\n\t}\r\n\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/netmodules/build.cmd",
    "content": "phpc /target:exe Program.php a.php b.php\r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/netmodules/netmodules.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>netmodules</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{cfdce4db-7273-4d4e-879c-4b4ed2eab558}</ProjectGuid>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>netmodules</AssemblyName>\r\n    <StartupObject>Program.php</StartupObject>\r\n    <RootNamespace>netmodules</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>mscorlib</Name>\r\n      <AssemblyName>mscorlib.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>System</Name>\r\n      <AssemblyName>System.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <AssemblyName>PhpNetClassLibrary.dll</AssemblyName>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"a.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"b.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Program.php\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/quadratic/Program.php",
    "content": "<?php\r\n\r\n\t// Example using command line parameters\r\n\t\r\n\tfunction usage()\r\n\t{\r\n\t\techo \"\\n\";\r\n\t\techo \"Usage: quadratic a=<a> b=<b> c=<c>\\n\";\r\n\t\techo \"\\n\";\r\n\t\techo \"Consider a*x^2 + b*x + c = 0 equalisation.\\n\";\r\n\t\techo \"       <a> absolute term by x^2\\n\";\r\n\t\techo \"       <b> absolute term by x\\n\";\r\n\t\techo \"       <c> absolute term of the equation\\n\";\r\n\t\techo \"\\n\";\r\n\t\r\n\t\tsleep(2);\t\r\n\t\texit;\r\n\t}\r\n\t\r\n\tfunction process_parameters(&$a, &$b, &$c)\r\n\t{\r\n\t\tglobal $argc, $argv;\r\n\t\t\r\n\t\t$a = null;\r\n\t\t$b = null;\r\n\t\t$c = null;\r\n\r\n\t\tif ($argc != 4) // first is executable file\r\n\t\t\tusage();\r\n\t\t\r\n\t\tfor ($i = 1; $i < $argc; $i++)\r\n\t\t{\r\n\t\t\tif (strpos($argv[$i], \"a=\") === 0)\r\n\t\t\t\t$la = substr($argv[$i], 2);\r\n\t\t\telse if (strpos($argv[$i], \"b=\") === 0)\r\n\t\t\t\t$lb = substr($argv[$i], 2);\r\n\t\t\telse if (strpos($argv[$i], \"c=\") === 0)\r\n\t\t\t\t$lc = substr($argv[$i], 2);\r\n\t\t}\r\n\t\t\r\n\t\tif (!isset($la) || !isset($lb) || !isset($lc))\r\n\t\t\tusage();\r\n\r\n\t\t$a = $la;\r\n\t\t$b = $lb;\r\n\t\t$c = $lc;\r\n\t}\r\n\t\r\n\techo \"Quadratic calculator sample\\n\";\r\n\t\r\n\t$a = null; $b = null; $c = null;\r\n\tprocess_parameters($a, $b, $c);\r\n\t\r\n\tif ($a == 0) // linear equation\r\n\t{\r\n\t\tif ($b == 0)\r\n\t\t{\r\n\t\t\tif ($c == 0)\r\n\t\t\t\techo \"Any x is suitable.\\n\";\r\n\t\t\telse\r\n\t\t\t\techo \"No x is solution.\\n\";\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\techo \"x = \".(-$c/$b).\"\\n\";\r\n\t\t}\r\n\t}\r\n\telse // quadratic\r\n\t{\r\n\t\t$D = $b*$b - 4*$a*$c;\r\n\t\t\r\n\t\tif ($D < 0)\r\n\t\t\techo \"No x is solution.\\n\";\r\n\t\telse if ($D == 0)\r\n\t\t\techo \"x = \".(-$b/(2*$a)).\"\\n\";\r\n\t\telse\r\n\t\t{\r\n\t\t\t$x1 = (-$b + sqrt($D))/(2*$a);\r\n\t\t\t$x2 = (-$b - sqrt($D))/(2*$a);\r\n\t\t\t\r\n\t\t\techo \"x1 = $x1\\n\";\r\n\t\t\techo \"x2 = $x2\\n\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tfgets(STDIN);\r\n?>"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/quadratic/build.cmd",
    "content": "phpc /target:exe Program.php\r\n"
  },
  {
    "path": "Deployment/Samples/ConsoleApplication/quadratic/quadratic.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>quadratic</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{1cfc1aae-cad2-4a96-972b-1cb272de518d}</ProjectGuid>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>quadratic</AssemblyName>\r\n    <StartupObject>Program.php</StartupObject>\r\n    <RootNamespace>quadratic</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>mscorlib</Name>\r\n      <AssemblyName>mscorlib.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>System</Name>\r\n      <AssemblyName>System.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <AssemblyName>PhpNetClassLibrary.dll</AssemblyName>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.php\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/Extensions/Exif/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"php_exif.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"exif\" />\r\n\t\t</classLibrary>\r\n    </phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Exif/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Exif/Class.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing PHP.Library;\r\n\r\nnamespace ExtensionSamples\r\n{\r\n    /// <summary>\r\n\t/// Uses the php_exif extension to extract EXIF headers from an image file.\r\n\t/// </summary>\r\n\tclass ExifSample\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Enter path to a JPEG or TIFF file:\");\r\n\t\t\t\r\n\t\t\tPhpArray exif = Exif.read_exif_data(new PhpBytes(Console.ReadLine()));\r\n\r\n\t\t\tif (exif != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<PHP.Core.IntStringKey, object> section in exif)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArray array = section.Value as PhpArray;\r\n\t\t\t\t\tif (array != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (KeyValuePair<PHP.Core.IntStringKey, object> entry in array)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.WriteLine(\"{0}.{1}: {2}\", section.Key.Object, entry.Key.Object, entry.Value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse Console.WriteLine(\"{0}: {1}\", section.Key.Object, section.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse Console.WriteLine(\"Error reading EXIF headers from the file.\");\r\n\r\n\t\t\tConsole.ReadLine();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Exif/Exif.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{C466FDE8-0F6C-4AF4-9C27-91BB14930968}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>Exif</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>Exif</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <OldToolsVersion>2.0</OldToolsVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PhpNetCore\">\r\n      <Name>PhpNetCore</Name>\r\n      <HintPath>..\\..\\..\\..\\Source\\Core\\Bin\\Release\\PhpNetCore.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"php_exif.mng\">\r\n      <Name>php_exif.mng</Name>\r\n      <HintPath>..\\..\\..\\Wrappers\\php_exif.mng.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Class.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/Extensions/Extensions.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\r\n# Visual Studio 2008\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Ming\", \"Ming\\Ming.csproj\", \"{93AE8286-59AA-4B47-B33C-7BA783E032D1}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Zlib\", \"Zlib\\Zlib.csproj\", \"{F12A4670-4A54-4348-A6A8-BC00CD221789}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Exif\", \"Exif\\Exif.csproj\", \"{C466FDE8-0F6C-4AF4-9C27-91BB14930968}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{93AE8286-59AA-4B47-B33C-7BA783E032D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{93AE8286-59AA-4B47-B33C-7BA783E032D1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{93AE8286-59AA-4B47-B33C-7BA783E032D1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{93AE8286-59AA-4B47-B33C-7BA783E032D1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F12A4670-4A54-4348-A6A8-BC00CD221789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F12A4670-4A54-4348-A6A8-BC00CD221789}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F12A4670-4A54-4348-A6A8-BC00CD221789}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F12A4670-4A54-4348-A6A8-BC00CD221789}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C466FDE8-0F6C-4AF4-9C27-91BB14930968}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Ming/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"php_ming.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"ming\" />\r\n\t\t</classLibrary>\r\n    </phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Ming/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Ming/Class.cs",
    "content": "using System;\r\nusing PHP.Core;\r\nusing PHP.Library;\r\n\r\nnamespace ExtensionSamples\r\n{\r\n\t/// <summary>\r\n\t/// Uses the php_ming extension to create a Flash movie with rotating red square.\r\n\t/// The movie is saved as \"ming_test.swf\" in current directory.\r\n\t/// </summary>\r\n\tclass MingSample\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tSWFShape s = new SWFShape();\r\n\t\t\tPhpObject obj = s.addFill(0xff, 0, 0);\r\n\t\t\ts.setRightFill(obj);\r\n\t\t\ts.movePenTo(-50,-50);\r\n\t\t\ts.drawLineTo(50,-50);\r\n\t\t\ts.drawLineTo(50,50);\r\n\t\t\ts.drawLineTo(-50,50);\r\n\t\t\ts.drawLineTo(-50,-50);\r\n\r\n\t\t\tSWFSprite p = new SWFSprite();\r\n\t\t\tSWFDisplayItem i = p.add(s) as SWFDisplayItem;\r\n\r\n\t\t\tfor(int j = 0; j < 17; j++)\r\n\t\t\t{\r\n\t\t\t\tp.nextFrame();\r\n\t\t\t\ti.rotate(5);\r\n\t\t\t}\r\n\t\t\tp.nextFrame();\r\n\r\n\t\t\tSWFMovie m = new SWFMovie();\r\n\t\t\ti = m.add(p) as SWFDisplayItem;\r\n\t\t\ti.moveTo(160,120);\r\n\t\t\ti.setName(new PhpBytes(\"item\"));\r\n\r\n\t\t\tm.setBackground(0xff, 0xff, 0xff);\r\n\t\t\tm.setDimension(320,240);\r\n\r\n\t\t\tm.save(new PhpBytes(\"ming_test.swf\"));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Ming/Ming.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{93AE8286-59AA-4B47-B33C-7BA783E032D1}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>Ming</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>Ming</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <OldToolsVersion>2.0</OldToolsVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PhpNetCore\">\r\n      <Name>PhpNetCore</Name>\r\n      <HintPath>..\\..\\..\\..\\Source\\Core\\Bin\\Release\\PhpNetCore.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"php_ming.mng\">\r\n      <Name>php_ming.mng</Name>\r\n      <HintPath>..\\..\\..\\Wrappers\\php_ming.mng.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Class.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/Extensions/Zlib/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"php_zlib.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"zlib\" />\r\n\t\t</classLibrary>\r\n    </phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Zlib/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Zlib/Class.cs",
    "content": "using System;\r\nusing PHP.Core;\r\nusing PHP.Library;\r\n\r\nnamespace ExtensionSamples\r\n{\r\n\t/// <summary>\r\n\t/// Uses the php_zlib extension to create a .gz file in current directory and\r\n\t/// compress a string.\r\n\t/// </summary>\r\n\tclass ZlibSample\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tstring filename = \"zlibtest.gz\";\r\n\t\t\tstring s = \"Only a test, test, test, test, test, test, test, test!\\n\";\r\n\r\n\t\t\t// open file for writing with maximum compression\r\n\t\t\tPhpResource zp = Zlib.gzopen(new PhpBytes(filename), new PhpBytes(\"w9\"));\r\n\r\n\t\t\t// write string to file\r\n\t\t\tZlib.gzwrite(zp, new PhpBytes(s));\r\n\r\n\t\t\t// close file\r\n\t\t\tZlib.gzclose(zp);\r\n\r\n\t\t\t// open file for reading\r\n\t\t\tzp = Zlib.gzopen(new PhpBytes(filename), new PhpBytes(\"r\"));\r\n\r\n\t\t\t// output contents of the file and close it\r\n\t\t\tConsole.WriteLine(Zlib.gzread(zp, 128));\r\n\t\t\tZlib.gzclose(zp);\r\n\r\n\t\t\tConsole.ReadLine();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Deployment/Samples/Extensions/Zlib/Zlib.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{F12A4670-4A54-4348-A6A8-BC00CD221789}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>Zlib</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>Zlib</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <OldToolsVersion>2.0</OldToolsVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PhpNetClassLibrary\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <HintPath>..\\..\\..\\..\\Source\\ClassLibrary\\Bin\\Release\\PhpNetClassLibrary.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetCore\">\r\n      <Name>PhpNetCore</Name>\r\n      <HintPath>..\\..\\..\\..\\Source\\Core\\Bin\\Release\\PhpNetCore.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"php_zlib.mng\">\r\n      <Name>php_zlib.mng</Name>\r\n      <HintPath>..\\..\\..\\Wrappers\\php_zlib.mng.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Class.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <configSections>\r\n    <section name=\"phpNet\" type=\"PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" />\r\n  </configSections>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib\" />\r\n\t\t\t<add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/Demo.php",
    "content": "<?\r\n\tnamespace Phalanger\r\n\t{\r\n\t\tclass Demo\r\n\t\t{\r\n\t\t\tstatic function Main()\r\n\t\t\t{\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\techo \"Welcome to Phalanger 2.0 Milestone 3 Demo\\n\";\r\n\t\t\t\techo \"=========================================\\n\";\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\t\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\techo \"1. .NET Interoperability\\n\";\r\n\t\t\t\t\techo \"2. Generics support\\n\";\r\n\t\t\t\t\techo \"3. LINQ support\\n\";\r\n\t\t\t\t\techo \"\\n\";\r\n\t\t\t\t\techo \"0. Exit\\n\";\r\n\t\t\t\t\techo \"\\n\";\r\n\t\t\t\t\techo \"Enter your choice: \";\r\n\t\t\t\t\t\r\n\t\t\t\t\t$line = \\System\\Console::ReadLine();\r\n\t\t\t\t\techo \"\\n\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tswitch ($line)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"0\": exit;\r\n\t\t\t\t\t\tcase \"1\": Interop::Run();  break;\r\n\t\t\t\t\t\tcase \"2\": Generics::Run(); break;\r\n\t\t\t\t\t\tcase \"3\": Linq::Run();     break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/Generics.php",
    "content": "<?\r\n\t// This script demonstrates the generics support in Phalanger.\r\n\r\n\tnamespace Phalanger\r\n\t{\r\n        use System\\Collections\\Generic\\IComparer;\r\n\r\n        use System as S;\r\n        use System\\Collections\\Generic as G;\r\n\r\n        class Displayer<:T:>\r\n\t\t{\r\n\t\t\tprivate static function Action($element)\r\n\t\t\t{\r\n\t\t\t\techo \"element: $element\\n\";\r\n\t\t\t}\r\n\t\t\r\n\t\t\tstatic function Display(i'G\\List'<:T:> $list)\r\n\t\t\t{\r\n\t\t\t\t// creating an instance of a generic delegate\r\n\t\t\t\t$action = new S\\Action<:T:>(array(\"self\", \"Action\"));\r\n\t\t\t\t$list->ForEach($action);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// Generic class with two generic parameters:\r\n\t\tclass C1<:T, U:>\r\n\t\t{ }\r\n\t\t\r\n\t\t// Generic class with one generic parameter:\r\n\t\tclass C2<:T:> extends C1<:T, bool:>\r\n\t\t{ }\r\n\t\t\r\n\t\t// Non-generic class:\r\n\t\tclass C3 extends C1<:string, double:>\r\n\t\t{ }\r\n\r\n\t\t// Generic class implementing BCL generic interface. The generic parameter has a default\r\n\t\t// value, which means that in PHP the generic parameter can be ommitted.\r\n\t\tclass MyGenericComparer<:T = array:> implements IComparer<:T:>\r\n\t\t{\r\n\t\t\tfunction Compare($x, $y)\r\n\t\t\t{\r\n\t\t\t\tif ($x < $y) return -1;\r\n\t\t\t\tif ($x > $y) return 1;\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tclass Generics\r\n\t\t{\r\n\t\t\t// The following generic method has a default generic parameter. If it is called without\r\n\t\t\t// generic argument, string will be used.\r\n\t\t\t// \r\n\t\t\t// Two export overloads are generated (C# syntax):\r\n\t\t\t// object GenericMethod(string arg1);\r\n\t\t\t// object GenericMethod<T>(T arg1);\r\n\t\t\r\n\t\t\t[\\Export]\r\n\t\t\tstatic function GenericMethod<:T = string:>(T $arg1)\r\n\t\t\t{\r\n\t\t\t\t$dict = new G\\Dictionary<:string, T:>;\r\n\t\t\t\t$dict->Add(\"test\", $arg1);\r\n\t\t\t\t\r\n\t\t\t\treturn $dict;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tstatic function Run()\r\n\t\t\t{\r\n\t\t\t\techo \"Creating an instance of a generic type instantiation:\\n\";\r\n\t\t\t\t\r\n\t\t\t\t// list is a keyword so we need to escape it using i''\r\n\t\t\t\t$x = new i'G\\List'<:int:>;\r\n\t\t\t\techo $x->GetType()->FullName . \"\\n\";\r\n\t\t\t\t\r\n\t\t\t\t$x->Add(2);\r\n\t\t\t\t$x->Add(3);\r\n\t\t\t\t$x->Add(5);\r\n\t\t\t\t$x->Add(7);\r\n\t\t\t\t$x->Add(11);\r\n\t\t\t\t\r\n\t\t\t\techo \"\\nEnumerating via generic delegate:\\n\";\t\t\t\r\n\t\t\t\tDisplayer<:int:>::Display($x);\r\n\t\t\t\t\r\n\t\t\t\techo \"\\nEnumerating via foreach:\\n\";\r\n\t\t\t\tforeach ($x as $element)\r\n\t\t\t\t{\r\n\t\t\t\t\techo \"element: $element\\n\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\techo \"\\nCalling BCL generic method:\\n\";\r\n\t\t\t\t\r\n\t\t\t\t// no need to explicitly create the delegate, just pass the target designation\r\n\t\t\t\t$all_primes = i'S\\Array'::TrueForAll<:int:>($x->ToArray(), array(\"self\", \"IsPrime\"));\r\n\t\t\t\techo ($all_primes ? \"All elements are primes\" : \"Nope\");\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\t\r\n\t\t\t\techo \"\\nCalling generic method with default generic argument:\\n\";\r\n\t\t\t\t\r\n\t\t\t\t$y = self::GenericMethod(\"hello\");\r\n\t\t\t\techo $y->GetType()->FullName . \"\\n\";\r\n\t\t\t\t\r\n\t\t\t\techo \"\\nCalling generic method with generic argument supplied at run-time:\\n\";\r\n\t\t\t\t\r\n\t\t\t\t$args = array(\r\n\t\t\t\t\tarray(\"@int\", -10),\r\n\t\t\t\t\tarray(\"@bool\", true),\r\n\t\t\t\t\tarray(\"@string\", \"xyz\"),\r\n\t\t\t\t\tarray(\"System\\EventArgs\", S\\EventArgs::$Empty)\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\tforeach ($args as $arg)\r\n\t\t\t\t{\r\n\t\t\t\t\t// we are dynamic!\r\n\t\t\t\t\t$dict = self::GenericMethod<:$arg[0]:>($arg[1]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tforeach ($dict as $element)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\techo S\\Convert::ToString($element) . \"\\n\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\techo \"\\n\\n\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Called by Array::TrueForAll\r\n\t\t\tprivate static function IsPrime($n)\r\n\t\t\t{\r\n\t\t\t\techo \"checking element: $n\\n\";\r\n\t\t\t\r\n\t\t\t\tif ($n < 2) return false;\r\n\t\t\t\tfor ($i = 2; ($i * $i) < $n; $i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (($n % $i) == 0) return false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/Interop.php",
    "content": "<?\r\n\t// This script demonstrates interoperating with other .NET languages.\r\n\t// PHP is now a fully-fledged extender, producer, and consumer.\r\n\r\n\tnamespace Phalanger\r\n\t{\r\n\r\n        use System as S;\r\n\r\n\t\t// the class is decorated with a custom attribute\r\n\t\t[\\System\\Runtime\\InteropServices\\ComVisible(false)]\r\n\t\tclass MyComparer implements \\System\\Collections\\IEqualityComparer\r\n\t\t{\r\n\t\t\t// The two methods in this class implement the IEqualityComparer interface. Overloads that match\r\n\t\t\t// the interface signatures are automatically generated. If there were more overloads of e.g. the\r\n\t\t\t// Equals method in the interface, corresponding stubs would be generated automatically and they\r\n\t\t\t// would all delegate to the one PHP method below.\r\n\t\t\r\n\t\t\tfunction Equals($x, $y)\r\n\t\t\t{\r\n\t\t\t\treturn ($x == $y);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfunction GetHashCode($x)\r\n\t\t\t{\r\n\t\t\t\treturn $x->GetHashCode();\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tclass Interop\r\n\t\t{\r\n\t\t\t// The following method is \"exported\" which means that overloads callable from other .NET languages\r\n\t\t\t// will be generated. The signatures are also determined by PHP type hints if they are present.\r\n\t\t\t// \r\n\t\t\t// Two overloads will be generated in this case (C# syntax):\r\n\t\t\t// object f(object a, ref object b, int c, ref string d, out double e);\r\n\t\t\t// object f(object a, ref object b, int c, ref string d, out double e, ICollection f);\r\n\t\t\t\r\n\t\t\t[\\Export]\r\n\t\t\tfunction f($a, &$b, int $c, string &$d, [\\Out]double &$e, \\System\\Collections\\ICollection $f = NULL)\r\n\t\t\t{\r\n\t\t\t\techo \"f invoked with arguments:\";\r\n\t\t\t\techo \"$a, $b, $c, $d, $e, $f\";\r\n\t\t\t\t\r\n\t\t\t\t// change the arguments passed by ref\r\n\t\t\t\t$b = 123;\r\n\t\t\t\t$d = \"abc\";\r\n\t\t\t\t$e = 3.14;\r\n\t\t\t\t\r\n\t\t\t\treturn \"OK\";\r\n\t\t\t}\r\n\t\t\r\n\t\t\t// The following field is also exported. It will be exposed as a property of the respective name.\r\n\t\t\t// The generated accessors will do all the necessary conversions from CLR to PHP and vice versa.\r\n\t\t\r\n\t\t\t[\\Export]\r\n\t\t\tpublic $x;\r\n\t\t\r\n\t\t\tstatic function Run()\r\n\t\t\t{\r\n\t\t\t\techo \"Calling a BCL method with out parameter:\\n\";\r\n\t\t\t\t\r\n\t\t\t\t$x = 0;\r\n\r\n\t\t\t\techo \"before: x = $x\\n\";\r\n\t\t\t\tS\\Int32::TryParse(\"1\", $x);\r\n\t\t\t\techo \"after: x = $x\\n\";\r\n\t\t\t\t\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\techo \"Calling a BCL method with 'params' variable number of arguments:\\n\";\r\n\t\t\t\t\r\n\t\t\t\techo i'S\\String'::Format(\"{0} {1} {2} {3} {4} {5} {6}\\n\\n\",\r\n\t\t\t\t\t1,\r\n\t\t\t\t\t1.1,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\t\"test\",\r\n\t\t\t\t\tS\\DateTime::$Now,\r\n\t\t\t\t\tS\\Environment::$TickCount,\r\n\t\t\t\t\tS\\AppDomain::$CurrentDomain->FriendlyName);\r\n\t\t\t\r\n\t\t\t\techo \"Calling an exported field accessor:\\n\";\r\n\t\t\t\r\n\t\t\t\t// let's find and invoke the exported field accessor via Reflection\r\n\t\t\t\t$property = S\\Reflection\\Assembly::GetEntryAssembly()->GetType(\"Phalanger.Interop\")->GetProperty(\"x\");\r\n\r\n\t\t\t\t$a = new Interop();\r\n\t\t\t\t$a->x = 123;\r\n\t\t\t\t\r\n\t\t\t\techo \"before: a.x = $a->x\\n\";\r\n\t\t\t\t$property->SetValue($a, 987, array());\r\n\t\t\t\techo \"after: a.x = $a->x\\n\";\r\n\t\t\t\t\r\n\t\t\t\techo \"\\n\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/Linq.php",
    "content": "<?\r\n\t// This script demonstrates the LINQ support in Phalanger.\r\n\r\n\tnamespace Phalanger\r\n\t{\r\n        use System\\Collections\\Generic as G;\r\n        use System as S;\r\n\r\n\t\tclass Product\r\n\t\t{\r\n\t\t\tpublic function Product($productID, $name, $category, $unitPrice, $unitsInStock)\r\n\t\t\t{\r\n\t\t\t\t$this->ProductID = $productID;\r\n\t\t\t\t$this->Name = $name;\r\n\t\t\t\t$this->Category = $category;\r\n\t\t\t\t$this->UnitPrice = $unitPrice;\r\n\t\t\t\t$this->UnitsInStock = $unitsInStock;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tpublic $ProductID; \r\n\t\t\tpublic $Name;\r\n\t\t\tpublic $Category;\r\n\t\t\tpublic $UnitPrice;\r\n\t\t\tpublic $UnitsInStock;\r\n\t\t}\r\n\t\t\r\n\t\tclass Order\r\n\t\t{\r\n\t\t\tpublic function Order($orderID, $productID, $quantity, $customerName)\r\n\t\t\t{\r\n\t\t\t\t$this->OrderID = $orderID;\r\n\t\t\t\t$this->ProductID = $productID;\r\n\t\t\t\t$this->Quantity = $quantity;\r\n\t\t\t\t$this->CustomerName = $customerName;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tpublic $OrderID;\r\n\t\t\tpublic $ProductID;\r\n\t\t\tpublic $Quantity;\r\n\t\t\tpublic $CustomerName;\r\n\t\t}\r\n\t\r\n\t\tclass Linq\r\n\t\t{\r\n\t\t\tprivate static function Display($label, $data)\r\n\t\t\t{\r\n\t\t\t\techo \"$label\\n\";\r\n\t\t\t\t\r\n\t\t\t\t$first = true;\r\n\t\t\t\tforeach ($data as $item)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ($first) $first = false;\r\n\t\t\t\t\telse echo \", \";\r\n\t\t\t\t\t\r\n\t\t\t\t\t\\print_r( $item );\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\techo \"\\n\\n\";\r\n\t\t\t}\r\n\t\t\r\n\t\t\tstatic function Run()\r\n\t\t\t{\r\n\t\t\t\t$random = new S\\Random;\r\n\r\n\t\t\t\tfor ($i = 0; $i < 20; $i++)\r\n\t\t\t\t{\r\n\t\t\t\t\t$numbers[] = $random->Next(100);\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\t// simple LINQ queries on an integer array\r\n\t\t\t\tself::Display(\"All numbers:\",\r\n\t\t\t\t\tfrom $numbers as $n\r\n\t\t\t\t\tselect $n\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\tself::Display(\"Numbers >50:\",\r\n\t\t\t\t\tfrom $numbers as $n\r\n\t\t\t\t\twhere $n > 50\r\n\t\t\t\t\tselect $n\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\t$products = self::GetProductList();\r\n\t\t\t\t$orders = self::GetOrderList();\r\n\r\n\t\t\t\tself::Display(\"Sold out products:\",\r\n\t\t\t\t\tfrom $products as $p\r\n\t\t\t\t\twhere $p->UnitsInStock == 0\r\n\t\t\t\t\tselect $p->Name\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\tself::Display(\"In-stock products that cost more than 3.00:\",\r\n\t\t\t\t\tfrom $products as $p\r\n\t\t\t\t\twhere $p->UnitsInStock > 0 && $p->UnitPrice > 3.00\r\n\t\t\t\t\tselect $p->Name\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\tself::Display(\"Products with pending orders:\",\r\n\t\t\t\t\tfrom $products as $p, $orders as $o\r\n\t\t\t\t\twhere $p->ProductID == $o->ProductID\r\n\t\t\t\t\tselect \"$p->Name ordered by $o->CustomerName\"\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\tself::Display(\"Ordered products that do not have sufficient in-stock count:\",\r\n\t\t\t\t\tfrom $products as $p, $orders as $o\r\n\t\t\t\t\twhere $p->ProductID == $o->ProductID && $p->UnitsInStock < $o->Quantity\r\n\t\t\t\t\tselect \"$o->Quantity of $p->Name ordered by $o->CustomerName\"\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tprivate static function GetProductList()\r\n\t\t\t{\r\n\t\t\t\t$list = new i'G\\List'<:Product:>;\r\n\t\t\t\t\r\n\t\t\t\t$list->Add(new Product(1, \"Chai\", \"Beverages\", 18.0, 39));\r\n\t\t\t\t$list->Add(new Product(2, \"Chang\", \"Beverages\",\t19.0, 17));\r\n\t\t\t\t$list->Add(new Product(3, \"Aniseed Syrup\", \"Condiments\", 10.0, 13));\r\n\t\t\t\t$list->Add(new Product(4, \"Chef Anton's Cajun Seasoning\", \"Condiments\", 22.0, 53));\r\n\t\t\t\t$list->Add(new Product(5, \"Chef Anton's Gumbo Mix\", \"Condiments\", 21.35, 0));\r\n\t\t\t\t$list->Add(new Product(6, \"Grandma's Boysenberry Spread\", \"Condiments\", 25.0, 120));\r\n\t\t\t\t$list->Add(new Product(7, \"Uncle Bob's Organic Dried Pears\", \"Produce\", 30.0, 15));\r\n\t\t\t\t$list->Add(new Product(8, \"Northwoods Cranberry Sauce\", \"Condiments\", 40.0, 6));\r\n\t\t\t\t$list->Add(new Product(9, \"Mishi Kobe Niku\", \"Meat/Poultry\", 97.0, 29));\r\n\t\t\t\t$list->Add(new Product(10, \"Ikura\", \"Seafood\", 31.0, 31));\r\n\t\t\t\t$list->Add(new Product(11, \"Queso Cabrales\", \"Dairy Products\", 21.0, 22));\r\n\t\t\t\t$list->Add(new Product(12, \"Queso Manchego La Pastora\", \"Dairy Products\", 38.0, 86));\r\n\t\t\t\t$list->Add(new Product(13, \"Konbu\", \"Seafood\", 6.0, 24));\r\n\t\t\t\t$list->Add(new Product(14, \"Tofu\", \"Produce\", 23.25, 35));\r\n\t\t\t\t$list->Add(new Product(15, \"Genen Shouyu\", \"Condiments\", 15.5, 39));\r\n\t\t\t\t$list->Add(new Product(16, \"Pavlova\", \"Confections\", 17.45, 29));\r\n\t\t\t\t$list->Add(new Product(17, \"Alice Mutton\", \"Meat/Poultry\", 39.0, 0));\r\n\t\t\t\t$list->Add(new Product(18, \"Carnarvon Tigers\", \"Seafood\", 62.5, 42));\r\n\t\t\t\t$list->Add(new Product(19, \"Teatime Chocolate Biscuits\", \"Confections\", 9.2, 25));\r\n\t\t\t\t$list->Add(new Product(20, \"Sir Rodney's Marmalade\", \"Confections\", 81.0, 40));\r\n\t\t\t\t$list->Add(new Product(21, \"Sir Rodney's Scones\", \"Confections\", 10.0, 3));\r\n\t\t\t\t$list->Add(new Product(22, \"Gustaf's Knckebrd\", \"Grains/Cereals\", 21.0, 104));\r\n\t\t\t\t$list->Add(new Product(23, \"Tunnbrd\", \"Grains/Cereals\", 9.0, 61));\r\n\t\t\t\t$list->Add(new Product(24, \"Guaran Fantstica\", \"Beverages\", 4.5, 20));\r\n\t\t\t\t$list->Add(new Product(25, \"NuNuCa Nu-Nougat-Creme\", \"Confections\", 14.0, 76));\r\n\t\t\t\t$list->Add(new Product(26, \"Gumbr Gummibrchen\", \"Confections\", 31.23, 15));\r\n\t\t\t\t$list->Add(new Product(27, \"Schoggi Schokolade\", \"Confections\", 43.9, 49));\r\n\t\t\t\t$list->Add(new Product(28, \"Rssle Sauerkraut\", \"Produce\", 45.6, 26));\r\n\t\t\t\t$list->Add(new Product(29, \"Thringer Rostbratwurst\", \"Meat/Poultry\", 123.79, 0));\r\n\t\t\t\t$list->Add(new Product(30, \"Nord-Ost Matjeshering\", \"Seafood\", 25.89, 10));\r\n\t\t\t\t$list->Add(new Product(31, \"Gorgonzola Telino\", \"Dairy Products\", 12.5, 0));\r\n\t\t\t\t$list->Add(new Product(32, \"Mascarpone Fabioli\", \"Dairy Products\", 32.0, 9));\r\n\t\t\t\t$list->Add(new Product(33, \"Geitost\", \"Dairy Products\", 2.5, 112));\r\n\t\t\t\t$list->Add(new Product(34, \"Sasquatch Ale\", \"Beverages\", 14.0, 111));\r\n\t\t\t\t$list->Add(new Product(35, \"Steeleye Stout\", \"Beverages\", 18.0, 20));\r\n\t\t\t\t$list->Add(new Product(36, \"Inlagd Sill\", \"Seafood\", 19.0, 112));\r\n\t\t\t\t$list->Add(new Product(37, \"Gravad lax\", \"Seafood\", 26.0, 11));\r\n\t\t\t\t$list->Add(new Product(38, \"Cte de Blaye\", \"Beverages\", 263.5, 17));\r\n\t\t\t\t$list->Add(new Product(39, \"Chartreuse verte\", \"Beverages\", 18.0, 69));\r\n\t\t\t\t$list->Add(new Product(40, \"Boston Crab Meat\", \"Seafood\", 18.4, 123));\r\n\t\t\t\t$list->Add(new Product(41, \"Jack's New England Clam Chowder\", \"Seafood\", 9.65, 85));\r\n\t\t\t\t$list->Add(new Product(42, \"Singaporean Hokkien Fried Mee\", \"Grains/Cereals\", 14.0, 26));\r\n\t\t\t\t$list->Add(new Product(43, \"Ipoh Coffee\", \"Beverages\", 46.0, 17));\r\n\t\t\t\t$list->Add(new Product(44, \"Gula Malacca\", \"Condiments\", 19.45, 27));\r\n\t\t\t\t$list->Add(new Product(45, \"Rogede sild\", \"Seafood\", 9.5, 5));\r\n\t\t\t\t$list->Add(new Product(46, \"Spegesild\", \"Seafood\", 12.0, 95));\r\n\t\t\t\t$list->Add(new Product(47, \"Zaanse koeken\", \"Confections\", 9.5, 36));\r\n\t\t\t\t$list->Add(new Product(48, \"Chocolade\", \"Confections\", 12.75, 15));\r\n\t\t\t\t$list->Add(new Product(49, \"Maxilaku\", \"Confections\", 20.0, 10));\r\n\t\t\t\t$list->Add(new Product(50, \"Valkoinen suklaa\", \"Confections\", 16.25, 65));\r\n\t\t\t\t$list->Add(new Product(51, \"Manjimup Dried Apples\", \"Produce\", 53.0, 20));\r\n\t\t\t\t$list->Add(new Product(52, \"Filo Mix\", \"Grains/Cereals\", 7.0, 38));\r\n\t\t\t\t$list->Add(new Product(53, \"Perth Pasties\", \"Meat/Poultry\", 32.8, 0));\r\n\t\t\t\t$list->Add(new Product(54, \"Tourtiere\", \"Meat/Poultry\", 7.45, 21));\r\n\t\t\t\t$list->Add(new Product(55, \"Pt chinois\", \"Meat/Poultry\", 24.0, 115));\r\n\t\t\t\t$list->Add(new Product(56, \"Gnocchi di nonna Alice\", \"Grains/Cereals\", 38.0, 21));\r\n\t\t\t\t$list->Add(new Product(57, \"Ravioli Angelo\", \"Grains/Cereals\", 19.5, 36));\r\n\t\t\t\t$list->Add(new Product(58, \"Escargots de Bourgogne\", \"Seafood\", 13.25, 62));\r\n\t\t\t\t$list->Add(new Product(59, \"Raclette Courdavault\", \"Dairy Products\", 55.0, 79));\r\n\t\t\t\t$list->Add(new Product(60, \"Camembert Pierrot\", \"Dairy Products\", 34.0, 19));\r\n\t\t\t\t$list->Add(new Product(61, \"Sirop d'rable\", \"Condiments\", 28.5, 113));\r\n\t\t\t\t$list->Add(new Product(62, \"Tarte au sucre\", \"Confections\", 49.3, 17));\r\n\t\t\t\t$list->Add(new Product(63, \"Vegie-spread\", \"Condiments\", 43.9, 24));\r\n\t\t\t\t$list->Add(new Product(64, \"Wimmers gute Semmelkndel\", \"Grains/Cereals\", 33.25, 22));\r\n\t\t\t\t$list->Add(new Product(65, \"Louisiana Fiery Hot Pepper Sauce\", \"Condiments\", 21.05, 76));\r\n\t\t\t\t$list->Add(new Product(66, \"Louisiana Hot Spiced Okra\", \"Condiments\", 17.0, 4));\r\n\t\t\t\t$list->Add(new Product(67, \"Laughing Lumberjack Lager\", \"Beverages\", 14.0, 52));\r\n\t\t\t\t$list->Add(new Product(68, \"Scottish Longbreads\", \"Confections\", 12.5, 6));\r\n\t\t\t\t$list->Add(new Product(69, \"Gudbrandsdalsost\", \"Dairy Products\", 36.0, 26));\r\n\t\t\t\t$list->Add(new Product(70, \"Outback Lager\", \"Beverages\", 15.0, 15));\r\n\t\t\t\t$list->Add(new Product(71, \"Flotemysost\", \"Dairy Products\", 21.5, 26));\r\n\t\t\t\t$list->Add(new Product(72, \"Mozzarella di Giovanni\", \"Dairy Products\", 34.8, 14));\r\n\t\t\t\t$list->Add(new Product(73, \"Rd Kaviar\", \"Seafood\", 15.0, 101));\r\n\t\t\t\t$list->Add(new Product(74, \"Longlife Tofu\", \"Produce\", 10.0, 4));\r\n\t\t\t\t$list->Add(new Product(75, \"Rhnbru Klosterbier\", \"Beverages\", 7.75, 125));\r\n\t\t\t\t$list->Add(new Product(76, \"Lakkalikri\", \"Beverages\", 18.0, 57));\r\n\t\t\t\t$list->Add(new Product(77, \"Original Frankfurter grne Soe\", \"Condiments\", 13.0, 32));\r\n\t\t\t\t\r\n\t\t\t\treturn $list;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tprivate static function GetOrderList()\r\n\t\t\t{\r\n\t\t\t\t$list = new i'G\\List'<:Order:>;\r\n\t\t\t\r\n\t\t\t\t$list->Add(new Order(1, 30, 3, \"Jan Benda\"));\r\n\t\t\t\t$list->Add(new Order(2, 12, 4, \"Martin Maly\"));\r\n\t\t\t\t$list->Add(new Order(3, 11, 99, \"Tomas Matousek\"));\r\n\t\t\t\t$list->Add(new Order(4, 64, 1, \"Pavel Novak\"));\r\n\t\t\t\t$list->Add(new Order(5, 45, 2, \"Vaclav Novak\"));\r\n\t\t\t\t$list->Add(new Order(6, 73, 102, \"Ladislav Prosek\"));\r\n\t\t\t\t\r\n\t\t\t\treturn $list;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/LinqAndGenerics.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>LinqAndGenerics</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{dcacb7ea-dafc-47a3-ba17-869831fc66e5}</ProjectGuid>\r\n    <CompilationMode>Pure</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>LinqAndGenerics</RootNamespace>\r\n    <AssemblyName>LinqAndGenerics</AssemblyName>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <TargetPlatform>v2</TargetPlatform>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>mscorlib</Name>\r\n      <AssemblyName>mscorlib.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Name>System</Name>\r\n      <AssemblyName>System.dll</AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Name>PhpNetClassLibrary</Name>\r\n      <AssemblyName>PhpNetClassLibrary.dll</AssemblyName>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Demo.php\" />\r\n    <Compile Include=\"Generics.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Interop.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Linq.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.config\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/LinqAndGenerics.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"LinqAndGenerics\", \"LinqAndGenerics.phpproj\", \"{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{DCACB7EA-DAFC-47A3-BA17-869831FC66E5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Deployment/Samples/LinqAndGenerics/build.cmd",
    "content": "phpc /target:exe /pure Demo.php Interop.php Generics.php Linq.php\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib\" />\r\n\t\t\t<add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/Form1.php",
    "content": "<?\r\n    namespace WinForms {\r\n        \r\n        [\\Export]\r\n        partial class Form1 extends \\System\\Windows\\Forms\\Form {\r\n            \r\n            private $timer;\r\n            \r\n            private $Button;\r\n            \r\n            private $ToolTip;\r\n            \r\n            private $components;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n            }\r\n            \r\n            public function InitializeComponent() {\r\n                $this->components = new \\System\\ComponentModel\\Container();\r\n                $this->timer = new \\System\\Windows\\Forms\\Timer($this->components);\r\n                $this->Button = new \\System\\Windows\\Forms\\Button();\r\n                $this->ToolTip = new \\System\\Windows\\Forms\\ToolTip($this->components);\r\n                $this->SuspendLayout();\r\n                // \r\n                // timer\r\n                // \r\n                $this->timer->Interval = 10;\r\n                $this->timer->Tick->Add(new \\System\\EventHandler(array($this, \"timer_Tick\")));\r\n                // \r\n                // Button\r\n                // \r\n                $this->Button->Location = new \\System\\Drawing\\Point(99, 194);\r\n                $this->Button->Name = \"Button\";\r\n                $this->Button->Size = new \\System\\Drawing\\Size(75, 23);\r\n                $this->Button->TabIndex = 0;\r\n                $this->Button->Text = \"Phalanger!\";\r\n                $this->Button->UseVisualStyleBackColor = true;\r\n                $this->Button->Click->Add(new \\System\\EventHandler(array($this, \"Button_Click\")));\r\n                // \r\n                // ToolTip\r\n                // \r\n                $this->ToolTip->AutoPopDelay = 5000;\r\n                $this->ToolTip->InitialDelay = 200;\r\n                $this->ToolTip->IsBalloon = true;\r\n                $this->ToolTip->ReshowDelay = 100;\r\n                $this->ToolTip->ToolTipIcon = \\System\\Windows\\Forms\\ToolTipIcon::Info;\r\n                $this->ToolTip->ToolTipTitle = \"Click the image to zoom in and out\";\r\n                // \r\n                // Form1\r\n                // \r\n                $this->AutoScaleDimensions = new \\System\\Drawing\\SizeF(6, 13);\r\n                $this->AutoScaleMode = \\System\\Windows\\Forms\\AutoScaleMode::Font;\r\n                $this->ClientSize = new \\System\\Drawing\\Size(292, 266);\r\n                $this->Controls->Add($this->Button);\r\n                $this->Name = \"Form1\";\r\n                $this->Text = \"Form1\";\r\n                $this->ToolTip->SetToolTip($this, \"Left button zooms in, right button zooms out.\");\r\n                $this->Load->Add(new \\System\\EventHandler(array($this, \"Form1_Load\")));\r\n                $this->Click->Add(new \\System\\EventHandler(array($this, \"Form1_Click\")));\r\n                $this->Move->Add(new \\System\\EventHandler(array($this, \"Form1_Move\")));\r\n                $this->Resize->Add(new \\System\\EventHandler(array($this, \"Form1_Resize\")));\r\n                $this->ResumeLayout(false);\r\n            }\r\n            \r\n            private function Button_Click(\\System\\Object $sender, \\System\\EventArgs $e) {\r\n            }\r\n            \r\n            private function button1_Click(\\System\\Object $sender, \\System\\EventArgs $e) {\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/Form1.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <metadata name=\"timer.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>17, 17</value>\r\n  </metadata>\r\n  <metadata name=\"ToolTip.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>97, 17</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Deployment/Samples/WinForms/Form1.user.php",
    "content": "<?\r\n\r\nnamespace WinForms{\r\n    \r\n    use System;\r\n    use System\\Windows\\Forms;\r\n    use System\\Windows\\Forms\\MouseButtons;\r\n    use System\\Windows\\Forms\\FormWindowState;\r\n\r\n    use System\\Drawing\\Bitmap;\r\n    use System\\Drawing\\Point;\r\n    use System\\Drawing\\Imaging\\PixelFormat;\r\n\r\n    use System\\IDisposable;\r\n    use System\\Environment;\r\n\r\n    use Phalanger\\MandelbrotSet;\r\n\t\r\n    partial class Form1 extends Forms\\Form\r\n\t{\r\n        private $bitmap;\r\n\t\tprivate $mandelbrot;\r\n\r\n        private $row;\r\n\t\tprivate $resolution;\r\n\t\t\r\n\t\tprivate function CreateBitmap()\r\n\t\t{\r\n\t\t\t$width = $this->ClientSize->Width;\r\n\t\t\t$height = $this->ClientSize->Height;\r\n\r\n\t\t\t$bitmap = new Bitmap($width, $height, PixelFormat::Format24bppRgb);\r\n\r\n\t\t\t$old_bitmap = $this->BackgroundImage;\r\n\t\t\t$this->BackgroundImage = $bitmap;\r\n\r\n\t\t\tif ($old_bitmap instanceof IDisposable) $old_bitmap->Dispose();\r\n\t\t\t\r\n\t\t\t$this->timer->Enabled = true;\r\n\t\t\t\r\n\t\t\t$this->row = 0;\r\n\t\t\t$this->resolution = 8;\r\n\t\t}\r\n\t\t\r\n\t\tprivate function Form1_Load(System\\Object $sender, System\\EventArgs $e)\r\n\t\t{\r\n            $this->mandelbrot = new MandelbrotSet($this->ClientSize->Width, $this->ClientSize->Height);\r\n            \r\n            $this->Resize();\r\n        }\r\n        \r\n        private function Resize()\r\n        {\r\n            // update the button's center location\r\n\t\t\t$this->button->CenterLocation = new Point(\r\n\t\t\t\t($this->ClientSize->Width - $this->button->Size->Width) / 2,\r\n\t\t\t\t($this->ClientSize->Height - $this->button->Size->Height) / 2);\r\n\r\n\t\t\t// recreate background image and initiate computation of a new Mandelbrot set\r\n\t\t\t$this->CreateBitmap();\r\n\t\t\t$this->mandelbrot->SetSize($this->ClientSize->Width, $this->ClientSize->Height);\r\n        }\r\n        \r\n        private function Form1_Resize(System\\Object $sender, System\\EventArgs $e)\r\n        {\r\n            if ($this->WindowState != FormWindowState::Minimized)\r\n\t\t\t{\r\n\t\t\t\t$this->Resize();\r\n\t\t\t}\r\n        }\r\n        \r\n        private function Form1_Move(System\\Object $sender, System\\EventArgs $e)\r\n        {\r\n            static $last_x, $last_y;\r\n\t\t\t\t\r\n\t\t\t$dx = $last_x - $this->Location->X;\r\n\t\t\t$dy = $last_y - $this->Location->Y;\r\n\t\t\t\r\n\t\t\t// update the button's position to give a \"inertia\" feel\r\n\t\t\t$this->button->Location = new Point(\r\n\t\t\t\t$this->button->Location->X + $dx,\r\n\t\t\t\t$this->button->Location->Y + $dy);\r\n\t\t\t\t\r\n\t\t\t$last_x = $this->Location->X;\r\n\t\t\t$last_y = $this->Location->Y;\r\n        }\r\n        \r\n         private function Form1_Click(System\\Object $sender, System\\EventArgs $e)\r\n         {\r\n        \t// set a new center point of the Mandelbrot set and zoom in/out\r\n\t\t\t$this->mandelbrot->SetCenter($e->X, $e->Y);\r\n\t\t\t\r\n\t\t\tif ($e->Button == MouseButtons::Left) $this->mandelbrot->ZoomIn();\r\n\t\t\telse $this->mandelbrot->ZoomOut();\r\n\t\t\t\r\n\t\t\t$this->CreateBitmap();\r\n         }\r\n         \r\n         private function timer_Tick(System\\Object $sender, System\\EventArgs $e)\r\n         {\r\n            $bitmap = $this->BackgroundImage;\r\n\t\t\t\r\n\t\t\t$ticks = Environment::$TickCount + 2;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\t$y = $this->row;\r\n\t\t\t\t$res = $this->resolution;\r\n\t\t\t\t\r\n\t\t\t\tif ($y >= $bitmap->Height)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ($this->resolution == 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// this Mandelbrot set is fully rendered\r\n\t\t\t\t\t\tif (isset($this->timer))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t$this->timer->Enabled = 0;\r\n\t\t\t\t\t\t\tunset($this->timer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// improve the resolution\r\n\t\t\t\t\t\t$this->resolution = ($res >>= 1);\r\n\t\t\t\t\t\t$this->row = $y = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t$y1 = $y + $res - 1;\r\n\t\t\t\tif ($y1 >= $bitmap->Height) $y1 = $bitmap->Height - 1;\r\n\t\t\t\t\r\n\t\t\t\t// draw a single line\r\n\t\t\t\tfor ($x = 0; $x < $bitmap->Width; $x++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (($x % $res) == 0) $color = $this->mandelbrot->GetColor($x, $y);\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor ($ry = $y; $ry <= $y1; $ry++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t$bitmap->SetPixel($x, $ry, $color);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t$this->row += $res;\r\n\t\t\t}\r\n\t\t\twhile (Environment::$TickCount < $ticks);\r\n\t\t\t\r\n\t\t\t$this->Refresh();\r\n         }\r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Deployment/Samples/WinForms/Mandelbrot.php",
    "content": "<?\r\n\tnamespace Phalanger\r\n\t{\r\n        use System\\Random;\r\n        use System\\Drawing\\Color;\r\n\r\n\t\t// Computes the Mandelbrot set\r\n\t\tclass MandelbrotSet\r\n\t\t{\r\n\t\t\tconst PRECISION = 64;\r\n\t\t\tconst TRESHOLD = 4;\r\n\t\t\r\n\t\t\tprivate $width;\r\n\t\t\tprivate $height;\r\n\t\t\r\n\t\t\t// initial values:;\r\n\t\t\tprivate $cx = -0.6;\r\n\t\t\tprivate $cy = 0;\r\n\t\t\tprivate $zoom = 0.0075;\r\n\t\t\t\r\n\t\t\tprivate $colorTable;\r\n\t\t\t\r\n\t\t\tpublic function __construct($width, $height)\r\n\t\t\t{\r\n\t\t\t\t$this->width = $width;\r\n\t\t\t\t$this->height = $height;\r\n\t\t\t\t\r\n\t\t\t\t// initialize color table with random values\r\n\t\t\t\t$random = new Random;\r\n\t\t\t\t\r\n\t\t\t\tfor ($i = 0; $i < self::PRECISION; $i++)\r\n\t\t\t\t{\r\n\t\t\t\t\t$this->colorTable[$i][0] = $random->Next(256);\r\n\t\t\t\t\t$this->colorTable[$i][1] = $random->Next(256);\r\n\t\t\t\t\t$this->colorTable[$i][2] = $random->Next(256);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic function SetSize($width, $height)\r\n\t\t\t{\r\n\t\t\t\t$this->width = $width;\r\n\t\t\t\t$this->height = $height;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tpublic function SetCenter($x, $y)\r\n\t\t\t{\r\n\t\t\t\t$this->cx = $this->cx + ($x - $this->width / 2) * $this->zoom;\r\n\t\t\t\t$this->cy = $this->cy + ($y - $this->height / 2) * $this->zoom;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tpublic function ZoomIn()\r\n\t\t\t{\r\n\t\t\t\t$this->zoom /= 1.5;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tpublic function ZoomOut()\r\n\t\t\t{\r\n\t\t\t\t$this->zoom *= 1.5;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Returns the color that should be drawn at the specified pixel coordinates\r\n\t\t\tpublic function GetColor($x, $y)\r\n\t\t\t{\r\n\t\t\t\t$mx = $this->cx + ($x - $this->width / 2) * $this->zoom;\r\n\t\t\t\t$my = $this->cy + ($y - $this->height / 2) * $this->zoom;\r\n\t\t\t\t\r\n\t\t\t\t$zx = 0;\r\n\t\t\t\t$zy = 0;\r\n\t\t\t\tfor ($i = 0; $i < self::PRECISION; $i++)\r\n\t\t\t\t{\r\n\t\t\t\t\t$zx2 = $zx * $zx;\r\n\t\t\t\t\t$zy2 = $zy * $zy;\r\n\r\n\t\t\t\t\t$zy = 2 * $zx * $zy + $my;\r\n\t\t\t\t\t$zx = $zx2 - $zy2 + $mx;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// how many iteretations did it take to reach the treshold?\r\n\t\t\t\t\tif ($zx2 + $zy2 > self::TRESHOLD)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Color::FromArgb(\r\n\t\t\t\t\t\t\t$this->colorTable[$i][0],\r\n\t\t\t\t\t\t\t$this->colorTable[$i][1],\r\n\t\t\t\t\t\t\t$this->colorTable[$i][2]);\r\n\t\t\t\t\t}\r\n   \t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn Color::$Blue;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/Program.php",
    "content": "<?\r\n\r\nuse System\\Windows\\Forms;\r\nuse WinForms\\Form1;\r\n\r\nclass Program\r\n{\r\n\tstatic function Main()\r\n\t{\r\n\t\tForms\\Application::EnableVisualStyles();\r\n\t\tForms\\Application::Run(new Form1());\r\n\t}\r\n}\r\n?>"
  },
  {
    "path": "Deployment/Samples/WinForms/TrickyButton.php",
    "content": "<?\r\n\tnamespace Phalanger\r\n\t{\r\n\t    use System;\r\n\t    \r\n        use System\\Windows\\Forms;\r\n        use System\\Windows\\Forms\\Timer;\r\n        use System\\Windows\\Forms\\Button;\r\n        use System\\Windows\\Forms\\Cursor;\r\n        \r\n        use System\\Windows\\Forms\\MessageBox;\r\n        use System\\Windows\\Forms\\MessageBoxButtons;\r\n        use System\\Windows\\Forms\\MessageBoxIcon;\r\n        \r\n        use System\\Drawing\\Point;\r\n\r\n    \t// A button that performs sophisticated evasive maneuvers ;) \r\n\t\tclass TrickyButton extends Button\r\n\t\t{\r\n\t\t\tconst IDLE_TICK_COUNT = 10;\r\n\t\t\r\n\t\t\tprivate $timer;\r\n\t\t\tprivate $counter;\r\n\t\t\r\n\t\t\tpublic function __construct()\r\n\t\t\t{\r\n\t\t\t\t$timer = new Timer;\r\n\t\t\t\t$timer->Tick->Add(new System\\EventHandler(array($this, \"Timer_OnTick\")));\r\n\t\t\t\t$timer->Interval = 50;\r\n\t\t\t\t$timer->Enabled = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tprotected function OnClick($eventArgs)\r\n\t\t\t{\r\n\t\t\t\tMessageBox::Show(\r\n\t\t\t\t\t$this,\r\n\t\t\t\t\t\"Hello from Phalanger 2.0 !\",\r\n\t\t\t\t\t$this->Parent->Text,\r\n\t\t\t\t\tMessageBoxButtons::OK,\r\n\t\t\t\t\tMessageBoxIcon::Information);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tprotected function OnMouseMove($e)\r\n\t\t\t{\r\n\t\t\t\tstatic $last_pos;\r\n\t\t\t\r\n\t\t\t\t// do not evade if this method was not called as a result of cursor movement\r\n\t\t\t\t$cursor = Cursor::$Position;\r\n\t\t\t\tif (isset($last_pos) && $last_pos->X == $cursor->X && $last_pos->Y == $cursor->Y)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t$last_pos = $cursor;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$width = $this->Size->Width;\r\n\t\t\t\t$height = $this->Size->Height;\r\n\t\t\t\t\r\n\t\t\t\t$dx = ($e->X > ($width / 2) ? $e->X - $width - 2 : $e->X + 2);\r\n\t\t\t\t$dy = ($e->Y > ($height / 2) ? $e->Y - $height - 2 : $e->Y + 2);\r\n\t\t\t\t\r\n\t\t\t\tif (($dy < 0 && $dx < $dy) || ($dy >= 0 && $dx > $dy))\r\n\t\t\t\t{\r\n\t\t\t\t\t$dx = ($width / 2) - $e->X;\r\n\t\t\t\t}\r\n\t\t\t\telse $dy = ($height / 2) - $e->Y;\r\n\t\t\t\t\r\n\t\t\t\t$this->EvasiveLocation = new Point(\r\n\t\t\t\t\t$this->Location->X + $dx,\r\n\t\t\t\t\t$this->Location->Y + $dy);\r\n\t\t\t\t\t\r\n\t\t\t\t$this->counter = 0;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tpublic function Timer_OnTick()\r\n\t\t\t{\r\n\t\t\t\t$this->counter++;\r\n\r\n\t\t\t\tif ($this->counter < self::IDLE_TICK_COUNT && isset($this->EvasiveLocation))\r\n\t\t\t\t{\r\n\t\t\t\t\t// the cursor seems to be still hunting us\r\n\t\t\t\t\t$this->MoveTo($this->EvasiveLocation);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the cursor probably gave it up\r\n\t\t\t\t\tif (isset($this->CenterLocation))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// check whether the center location is safe for us\r\n\t\t\t\t\t\t$cursor = Cursor::$Position;\r\n\t\t\t\t\t\t$cursor = $this->Parent->PointToClient($cursor);\r\n\t\t\t\t\t\t\r\n     \t\t\t\t\tif (!$this->IsLocationSafe($this->CenterLocation, $cursor)) return;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t$this->MoveTo($this->CenterLocation);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Smoothly moves to the given location\r\n\t\t\tprivate function MoveTo($location)\r\n\t\t\t{\r\n\t\t\t\t$dx = $location->X - $this->Location->X;\r\n\t\t\t\t$dy = $location->Y - $this->Location->Y;\r\n\t\t\t\t\r\n\t\t\t\tif ($dx < -1 || $dx > 1) $dx /= 3;\r\n\t\t\t\tif ($dy < -1 || $dy > 1) $dy /= 3;\r\n\t\t\t\t\r\n\t\t\t\t$location = new Point(\r\n\t\t\t\t\t$this->Location->X + $dx,\r\n\t\t\t\t\t$this->Location->Y + $dy);\r\n\r\n\t\t\t\t$this->Location = $location;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tprivate function IsLocationSafe($offset, $point)\r\n\t\t\t{\r\n\t\t\t\treturn\r\n\t\t\t\t\t($point->X < $offset->X || $point->X > $offset->X + $this->Size->Width ||\r\n\t\t\t\t\t$point->Y < $offset->Y || $point->Y > $offset->Y + $this->Size->Height);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/WinForms.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>WinForms</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{84458198-3670-40e8-ad15-c862ad4bf88c}</ProjectGuid>\r\n    <CompilationMode>Pure</CompilationMode>\r\n    <OutputType>WinExe</OutputType>\r\n    <AssemblyName>WinForms</AssemblyName>\r\n    <RootNamespace>WinForms</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Mandelbrot.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Program.php\" />\r\n    <Compile Include=\"Form1.user.php\" />\r\n    <Compile Include=\"Form1.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"TrickyButton.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Form1.resx\">\r\n      <DependentUpon>Form1.php</DependentUpon>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.config\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Deployment/Samples/WinForms/WinForms.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"WinForms\", \"WinForms.phpproj\", \"{84458198-3670-40E8-AD15-C862AD4BF88C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{84458198-3670-40E8-AD15-C862AD4BF88C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{84458198-3670-40E8-AD15-C862AD4BF88C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{84458198-3670-40E8-AD15-C862AD4BF88C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{84458198-3670-40E8-AD15-C862AD4BF88C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Deployment/Samples/WinForms/build.cmd",
    "content": "phpc /pure /target:winexe Program.php Form1.php Form1.user.php TrickyButton.php Mandelbrot.php\r\n"
  },
  {
    "path": "Deployment/Web.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<!-- \r\n\r\nThis file contains all possible configuration options processed by Phalanger and PHP native extensions.\r\nThe values stated here are the default ones. If you are creating a configuration for your application,\r\nstate only those options which differ from the default values.\r\n\r\nNotes:\r\nSome option nodes can have specified a \"scope\" attribute. This is a string having one of the values \r\n\"Any\", \"Runtime\", \"Build\". The default value is \"Any\" if the attribute is omitted.\r\nA node with \"Runtime\" and \"Build\" scope is ignored if the configuration file is loaded by the command line \r\ncompiler and PHP application, respectively. \"Any\" value makes the node valid in both cases. \r\nAll nodes on which the scope attribute is applicable has this attribute stated in this prototypical file.\r\n\r\n-->\r\n\r\n<configuration>\r\n\r\n  <system.webServer>\r\n    <handlers>\r\n      <!-- Process .php files with Phalanger -->\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n  </system.webServer>\r\n  \r\n\t<!-- ASP.NET configuration -->\r\n\t<system.web>\r\n\t\t<!-- \r\n\t\t\tEncoding of data sent from/to the client and encoding of the source files (.php, .aspx, .asax, .asmx). \r\n\t\t\t\r\n\t\t\tThe value should be one of the identifiers of the code-page supported by the system.\r\n\t\t\tThese include e.g. values \"Latin1\", \"Latin2\", \"Windows-1250\" etc. Empty value means default system encoding. \r\n\t\t\t\r\n\t\t\tOption has an application scope and cannot be changed in application sub-directories. \r\n\t\t\tThis setting is also recognized by the command line compiler (phpc) when precompiling a web application.\r\n\t\t-->\r\n\t\t<globalization requestEncoding=\"UTF-8\" responseEncoding=\"UTF-8\" fileEncoding=\"\" />\r\n\t</system.web>\r\n\r\n\t<!-- Phalanger configuration -->\r\n\t<phpNet>\r\n\t\t<!-- \r\n\t\t\tA list of libraries to load. Uncomment those which your application is using. \r\n\r\n\t\t\tUse the following attribute to specify the library to add:\r\n\t\t\t  assembly=\"[name, version, culture, public key token]\"\r\n          \r\n\t\t\tOptional attribute (applicable only to Phalanger Class Library and Extensions):\r\n\t\t\t  section=\"[name of the configuration section for the library]\"\r\n\r\n\t\t\tRecognized by the command line compiler (phpc).\r\n\t\t-->\r\n\t\t<classLibrary>\r\n\r\n      <!-- Base Class Library -->\r\n      <!-- add assembly=\"PhpNetClassLibrary, Version=4.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\" section=\"bcl\" /-->\r\n\r\n      <!-- optional CLR libraries -->\r\n\t\t\t<!--add assembly=\"mscorlib\" /-->\r\n\t\t\t<!--add assembly=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" /-->\r\n\t\t\t<!--add assembly=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" /-->\r\n\t\t\t<!-- ... -->\r\n\r\n\t\t\t<!-- Bundled managed extensions -->\r\n      <!--add assembly=\"PhpNetXmlDom, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"xmldom\"/-->\r\n      <!--add assembly=\"PhpNetMsSql, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"mssql\"/-->\r\n      <!--add assembly=\"PhpNetSQLite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"sqlite\"/-->\r\n      <!--add assembly=\"PhpNetZip, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"zip\"/-->\r\n      <!--add assembly=\"PhpNetGd2, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"gd2\" /-->\r\n      <!--add assembly=\"PhpNetZlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"zlib\" /-->\r\n      <!--add assembly=\"PhpNetCurl, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"curl\" /-->\r\n      <!--add assembly=\"PhpNetXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"xml\" /-->\r\n      <!--add assembly=\"PhpNetIconv, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"iconv\" /-->\r\n      \r\n      <!--add assembly=\"PhpNetPDO, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"pdo\" /-->\r\n      <!--add assembly=\"PhpNetPDOSQLite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"pdosqlite\" /-->\r\n      <!--add assembly=\"PhpNetPDOSQLServer, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"pdosqlsrv\" /-->\r\n\r\n      <!-- Separately distributed or 3rd party managed extensions (see http://www.devsense.com/products/phalanger) -->\r\n      <!--add assembly=\"PhpNetMySql, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"mysql\"/-->\r\n      <!--add assembly=\"PhpNetPDOMySQL, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"pdomysql\" /-->\r\n      <!--add assembly=\"PhpNetMemcached, Version=4.0.0.0, Culture=neutral, PublicKeyToken=d4cd94916abb991b\" section=\"memcached\" /-->\r\n\t\t</classLibrary>\r\n\r\n    <!--\r\n      A list of script libraries that will be referenced.\r\n      Scripts from these assemblies behave as they would be on file system.\r\n      Even static inclusions targetting scripts inside these DLLs work.\r\n      \r\n      Script libraries are created by compiling PHP scripts with target:dll in legacy mode. (phpc /target:dll recurse:ext out:bin/ext.dll)\r\n      \r\n      Use following XML tag to add script library reference:\r\n        <add url=\"file.dll\" />\r\n        <add assembly=\"ext, Version=1.0.0.0\" />\r\n    -->\r\n    <scriptLibrary>\r\n      <!-- <add url=\"bin/ext.dll\" /> -->\r\n      <!-- <add assembly=\"ext, Version=1.0.0.0\" /> -->\r\n    </scriptLibrary>\r\n\r\n    <!-- \r\n\t\t\tCompiler options. All options have application scope and cannot be changed in application sub-directories. \r\n\t\t\tRecognized by the command line compiler (phpc).\r\n\t\t-->\r\n\t\t<compiler>\r\n\t\t\t<!-- \r\n\t\t\tEnables or disables language features. Makes it possible to adjust compatibility with various versions of PHP. \r\n\t        \r\n\t\t\t  - ShortOpenTags:    Allows the <? tag. Otherwise, only <?php and <script> tags are recognized.\r\n\t\t\t  - AspTags:          Allows ASP-style <% %> tags.\r\n\t\t\t  - V5Keywords:       Enables PHP5 new keywords (such as public, private, protected, clone, etc.)\r\n\t\t\t  - TypeKeywords:     Upgrades bool, int, int64, string, double, resource and object identifiers to keywords so that they can be used for type hints etc.\r\n\t\t\t  - UnicodeSemantics: Switches on the Unicode semantics as defined by PHP6.\r\n\t\t\t  - ClrSemantics:     Allows to treat values of PHP types as CLR objects (e.g. $s = \"string\"; $s->GetHashCode()).\r\n        - CSharpTypeNames:  Enables PHP keywords that may be used in C# as class or namespace name, to be used in PHP code too. E.g. \"List\", \"Array\", \"Abstract\", ...\r\n\t\t\t  - Linq:             Enables Language Integrated Query (LINQ)\r\n\t        \r\n\t\t\tAggregate features:\r\n\t\t\t  - Php4:             ShortOpenTags, AspTags\r\n\t\t\t  - Php5:             Php4, V5Keywords\r\n\t\t\t  - PhpClr:           Php5, UnicodeSemantics, TypeKeywords, Linq, ClrSemantics         \r\n\t          \r\n\t\t\tThe default setting is Php5.\r\n\t        \r\n\t\t\tThe feature can be added/removed from the list as indicated below by comments.\r\n\t\t\t-->\r\n\t\t\t<set name=\"LanguageFeatures\">\r\n\t\t\t\t<!-- add value=\"ShortOpenTags\" /-->\r\n\t\t\t\t<!-- add value=\"AspTags\" /-->\r\n\t\t\t\t<!-- add value=\"UnicodeSemantics\" /-->\r\n\t\t\t\t<!-- add value=\"V5Keywords\" /-->\r\n\t\t\t\t<!-- add value=\"V6Keywords\" /-->\r\n\t\t\t\t<!-- add value=\"TypeKeywords\" /-->\r\n\t\t\t\t<!-- add value=\"ClrSemantics\" /-->\r\n        <!-- add value=\"CSharpTypeNames\" /-->\r\n\t\t\t\t<!-- add value=\"Linq\" /-->\r\n\t\t\t</set>\r\n\r\n\t\t\t<!-- Whether to compile scripts in debug mode. Per-application configuration. -->\r\n\t\t\t<set name=\"Debug\" value=\"true\" />\r\n\r\n\t\t\t<!-- Enables or disables compiler to make inclusions static. -->\r\n\t\t\t<set name=\"EnableStaticInclusions\" value=\"false\" scope=\"Any\" />\r\n\r\n      <!-- Force dynamic inclusion of specified paths. Directories or single files can be specified. -->\r\n      <set name=\"ForcedDynamicInclusionPaths\">\r\n        <!-- add value=\"path\" / -->\r\n        <!-- remove value=\"path\" / -->\r\n        <!-- clear / -->\r\n      </set>\r\n      \r\n      <!-- \r\n\t\t\t\tList of semicolon-separated directory paths where the compiler searches for statically evaluated inclusion \r\n\t\t\t\ttargets. Applied also on results of inclusion mappings. Note, paths are relative to the application source root \r\n\t\t\t\tin contrast to dynamic inclusion paths defined by <file-system>/IncludePaths configuration option.\r\n\t\t\t-->\r\n\t\t\t<set name=\"StaticIncludePaths\" value=\".\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tList of regular expression patterns and replacements used for evaluation of static inclusions. \r\n\t\t          \r\n\t\t\t\t  <add pattern=\"\" value=\"\" name=\"\" /> - adds named mapping, names needn't to be unique \r\n\t\t\t\t  <add pattern=\"\" value=\"\" />         - adds anonymous mapping \r\n\t\t\t\t  <remove name=\"\"/>                   - removes previously added named pattern \r\n\t\t\t\t  <clear/>                            - clears the list\r\n\t\t        \r\n\t\t\t\tPatterns are .NET regular expressions, values are .NET replacement strings (see Regex.Match method).\r\n\t\t\t\tMappings are evaluated one by one as stated in the list.\r\n        \r\n        Use ${SourceRoot} in value attribute as a variable representing current application root (can be overriden by /root:).\r\n\t\t\t-->\r\n\t\t\t<set name=\"InclusionMappings\" >\r\n\t\t\t</set>\r\n\r\n      <!--\r\n        Allows disabling of watching for file system changes.\r\n        By disabling this option, modified scripts won't be recompiled.\r\n      -->\r\n      <set name=\"WatchSourceChanges\" value=\"true\" />\r\n\r\n      <!--\r\n        When included or requested file is not found in any precompiled assembly, the file is located\r\n        on file system and compiled lazily (if this option is set to false).\r\n        By enabling this option, script files won't be loaded from file system. Only scripts compiled\r\n        into DLLs would be loaded, Phalanger won't look at file system and won't recompile any script\r\n        when physical file is changed.\r\n        Enabling this option also implies WatchSourceChanges to be disabled.\r\n      -->\r\n      <set name=\"OnlyPrecompiledCode\" value=\"false\" />\r\n\r\n      <!-- \r\n\t\t\t\tPrepends a specified file before each compiled script. The included script is executed once at \r\n\t\t\t\tthe beginning of request or application execution. File is searched on paths specified by \r\n\t\t\t\tStaticIncludePaths option if a relative path is specified. \r\n\t\t\t-->\r\n\t\t\t<set name=\"PrependFile\" value=\"\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tAppends a specified file after each compiled script. The included script is executed once at \r\n\t\t\t\tthe end of request or application execution. File is searched on paths specified by \r\n\t\t\t\tStaticIncludePaths option if a relative path is specified. \r\n\t\t\t-->\r\n\t\t\t<set name=\"AppendFile\" value=\"\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tSpecifies warnings that the compiler suppresses from reporting.\r\n\t\t        \r\n\t\t\t\tA list of comma separated disabled warning numbers can be specified by the optional attribute \"numbers\".\r\n\t\t        \r\n\t\t\t\tAdditionally, multiple warnings belonging to a distinguished group can be disabled by \r\n\t\t\t\tadding the following tags:\r\n\t\t        \r\n\t\t\t\t  <add value=\"\"/>    - disables warnings of a specified group\r\n\t\t\t\t  <remove value=\"\"/> - enables warnings of a specified group\r\n\t\t\t\t  <clear/>           - enables all warnings\r\n\t\t        \r\n\t\t\t\tYou can list following groups and subgroups. \r\n\t\t        \r\n\t\t\t\t- DeferredToRuntime:   warnings related to the fact that some script was not included at runtime. \r\n\t\t\t\t  - InclusionsMapping: warnings reported when inclusion mapping (option IncludedFilesMapping) fails\r\n\t\t\t\t- CompilerStrict:      unreachable code detected warning etc. \r\n\t\t\t\t  - AmpModifiers:      issues regarding ampersand modifiers (references) - Phalanger doesn't support \r\n\t\t\t\t\t\t\t\t\t   ampersands in function calls; it ignors them and reports warnings \r\n\t\t      \r\n\t\t\t-->\r\n\t\t\t<set name=\"DisabledWarnings\" numbers=\"\" scope=\"Any\" >\r\n\t\t\t\t<add value=\"DeferredToRuntime\"/>\r\n\t\t\t\t<add value=\"CompilerStrict\"/>\r\n\t\t\t</set>\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tConsole and Windows applications only.\r\n\t\t\t\tA path to the directory presented as a root of source files compiled to the application assembly. \r\n\t\t\t\tWeb application's source root is always its virtual directory. \r\n\t\t\t-->\r\n\t\t\t<!-- set name=\"SourceRoot\" value=\"\" /-->\r\n\r\n\t\t</compiler>\r\n\r\n\t\t<globalization>\r\n\t\t\t<!-- \r\n\t\t\t\tEncoding used for converting source files to Unicode and for run-time binary data conversions.\r\n\t\t\t\tWhen compiling or running a web application, defaults to the value specified by \r\n\t\t\t\tsystem.web/globalization/@fileEncoding attribute.\r\n\t\t\t-->\r\n\t\t\t<set name=\"PageEncoding\" value=\"\" />\r\n\t\t</globalization>\r\n\r\n\t\t<variables>\r\n\t\t\t<!-- Whether to emulate Zend Engine 1 behavior. Not supported anymore. -->\r\n      <!-- set name=\"ZendEngineV1Compatible\" value=\"false\" / -->\r\n\r\n\t\t\t<!-- Whether or not to register the EGPCS variables as global variables. -->\r\n\t\t\t<set name=\"RegisterGlobals\" value=\"false\" />\r\n\r\n\t\t\t<!-- Whether or not to register the \"argc\" and \"argv\" variables as global variables. -->\r\n\t\t\t<set name=\"RegisterArgcArgv\" value=\"false\" />\r\n\r\n\t\t\t<!-- Whether or not to register the \"HTTP_*_VARS\" arrays as global variables. -->\r\n\t\t\t<set name=\"RegisterLongArrays\" value=\"false\" />\r\n\r\n\t\t\t<!-- User callback called on failed serialization. Can be empty. -->\r\n\t\t\t<set name=\"DeserializationCallback\" value=\"\" />\r\n\r\n      <!--\r\n        Always populate the $HTTP_RAW_POST_DATA containing the raw POST data (value=\"true\").\r\n        However, the preferred method for accessing the raw POST data is php://input.\r\n        $HTTP_RAW_POST_DATA is not available with enctype=\"multipart/form-data\".\r\n      -->\r\n      <set name=\"AlwaysPopulateRawPostData\" value=\"true\" />\r\n      \r\n\t\t\t<!-- \r\n\t\t\t\tThis directive describes the order in which PHP.NET registers EGPCS variables.\r\n\t\t\t\tRegistration is done from left to right. The value should be a permutation of the \"EGPCS\" string. \r\n\t\t\t-->\r\n\t\t\t<set name=\"RegisteringOrder\" value=\"EGPCS\"/>\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tFor backwards compatibility only. Do not use if you can quote variables in code.\r\n\t\t\t\tWhether to quote GET/POST/Cookie variables' values when they are added to respective global arrays. \r\n\t\t\t-->\r\n\t\t\t<set name=\"QuoteGpcVariables\" value=\"false\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tFor backwards compatibility only. Do not use if you can quote variables in code.\r\n\t\t\t\tWhether to quote values returned from some PHP functions. \r\n\t\t\t-->\r\n\t\t\t<set name=\"QuoteRuntimeVariables\" value=\"false\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tFor backwards compatibility only. Do not use if you can quote variables in code.\r\n\t\t\t\tWhether to quote values in Sybase DB manner, i.e. using '' instead of \\'. \r\n\t\t\t-->\r\n\t\t\t<set name=\"QuoteInDbManner\" value=\"false\" />\r\n\t\t</variables>\r\n\r\n\t\t<output-control>\r\n\t\t\t<!-- Whether to start output buffering on the beginning of each script execution. -->\r\n\t\t\t<set name=\"OutputBuffering\" value=\"false\" />\r\n\r\n\t\t\t<!-- A user function which will filter buffered output. -->\r\n\t\t\t<set name=\"OutputHandler\" value=\"\" />\r\n\r\n\t\t\t<!-- Whether to send output to a client after a call of any function which generates output. -->\r\n\t\t\t<set name=\"ImplicitFlush\" value=\"false\" />\r\n\r\n\t\t\t<!-- If the following values are non-empty the Content-Type header with that values will be added to each response -->\r\n\t\t\t<set name=\"ContentType\" value=\"text/html\" />\r\n\t\t\t<set name=\"Charset\" value=\"iso-8859-1\" />\r\n\t\t</output-control>\r\n\r\n\t\t<request-control>\r\n\t\t\t<!-- Timeout in seconds for each phase of user code execution. -->\r\n\t\t\t<set name=\"ExecutionTimeout\" value=\"30\" />\r\n\r\n\t\t\t<!-- Whether not to terminate request on client disconnection. -->\r\n\t\t\t<set name=\"IgnoreUserAbort\" value=\"true\" />\r\n\t\t</request-control>\r\n\r\n\t\t<error-control>\r\n\t\t\t<!-- \r\n\t\t\t\tA set of error types that should be reported.\r\n\t\t\t\tSubtags are processes in the order they are stated in the list. Valid subtags are: \r\n\t\t        \r\n\t\t\t\t  <add value=\"\"/>    - enables reporting of the specified type\r\n\t\t\t\t  <remove value=\"\"/> - disables reporting of the specified type\r\n\t\t\t\t  <clear/>           - disables all errors\r\n\t\t        \r\n\t\t\t\tValid names include \r\n\t\t\t\t  Error,Warning,Notice,Strict,UserError,UserWarning,UserNotice,ParseError,CompileError,CompileWarning\r\n\t\t\t-->\r\n\t\t\t<set name=\"ReportErrors\">\r\n\t\t\t\t<add value=\"Error\"/>\r\n\t\t\t\t<add value=\"Warning\"/>\r\n\t\t\t\t<add value=\"Notice\"/>\r\n\t\t\t\t<add value=\"Strict\"/>\r\n\t\t\t\t<add value=\"UserError\"/>\r\n\t\t\t\t<add value=\"UserWarning\"/>\r\n\t\t\t\t<add value=\"UserNotice\"/>\r\n\t\t\t\t<add value=\"ParseError\"/>\r\n\t\t\t\t<add value=\"CompileError\"/>\r\n\t\t\t\t<add value=\"CompileWarning\"/>\r\n\t\t\t</set>\r\n\r\n\t\t\t<!-- User handler called on error. -->\r\n\t\t\t<set name=\"UserHandler\" value=\"\" />\r\n\r\n\t\t\t<!-- User exception handler called on exception. -->\r\n\t\t\t<set name=\"UserExceptionHandler\" value=\"\" />\r\n\r\n\t\t\t<!-- Print out errors as a part of the output. -->\r\n\t\t\t<set name=\"DisplayErrors\" value=\"true\" />\r\n\r\n\t\t\t<!-- Whether error messages are reported in HTML format or plain text. -->\r\n\t\t\t<set name=\"HtmlMessages\" value=\"true\" />\r\n\r\n\t\t\t<!-- URI specifying the root of PHP manual used in error messages. -->\r\n\t\t\t<set name=\"DocRefRoot\" value=\"http://www.php.net/manual\" />\r\n\r\n\t\t\t<!-- An extension of PHP manual documents (should start with a dot character '.'). -->\r\n\t\t\t<set name=\"DocRefExtension\" value=\".php\" />\r\n\r\n\t\t\t<!-- A file where to log errors if logging is enabled. Empty value disables error logging into a file. -->\r\n\t\t\t<set name=\"LogFile\" value=\"\" />\r\n\r\n\t\t\t<!-- Whether to log errors to the system event log if logging is enabled. -->\r\n\t\t\t<set name=\"SysLog\" value=\"false\" />\r\n\r\n\t\t\t<!-- Whether to log errors. -->\r\n\t\t\t<set name=\"EnableLogging\" value=\"false\" />\r\n\r\n\t\t\t<!-- A string to be output before an error message. -->\r\n\t\t\t<set name=\"ErrorPrependString\" value=\"\" />\r\n\r\n\t\t\t<!-- A string to be output after an error message. -->\r\n\t\t\t<set name=\"ErrorAppendString\" value=\"\" />\r\n\r\n\t\t\t<!-- Whether to report errors regardless of the operator @. For debugging purposes. -->\r\n\t\t\t<set name=\"IgnoreAtOperator\" value=\"false\" />\r\n\t\t</error-control>\r\n\r\n\t\t<session-control>\r\n\t\t\t<!-- Sessions are only available for web applications. -->\r\n\r\n\t\t\t<!-- Initialize session on request startup. -->\r\n\t\t\t<set name=\"AutoStart\" value=\"false\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tSession handler. Each library can register own handler. \r\n\t\t\t\tThe default one, \"aspnet\", is implemented in Phalanger Core. \r\n\t\t\t\tThe \"files\" handler is registered by the Phalanger Base Class Library and implements \r\n\t\t\t\tstandard PHP files backed sessions. \r\n\t\t\t-->\r\n\t\t\t<set name=\"Handler\" value=\"aspnet\" />\r\n\r\n      <!--\r\n        url_rewriter.tags specifies which HTML tags are rewritten to include session id\r\n        if transparent sid support is enabled.\r\n        Defaults to a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=\r\n      -->\r\n      <set name=\"UrlRewriterTags\" value=\"a=href,area=href,frame=src,input=src,form=,fieldset=\" />\r\n      \r\n\t\t</session-control>\r\n\r\n\t\t<assertion>\r\n\t\t\t<!-- Whether to evaluate assertions. -->\r\n\t\t\t<set name=\"Active\" value=\"true\"/>\r\n\r\n\t\t\t<!-- Whether a warning should be reported on failed assertion. -->\r\n\t\t\t<set name=\"ReportWarning\" value=\"true\" />\r\n\r\n\t\t\t<!-- Whether to terminate script execution on failed assertion. -->\r\n\t\t\t<set name=\"Terminate\" value=\"false\" />\r\n\r\n\t\t\t<!-- Whether assertion evaluation should report errors (including parse errors). -->\r\n\t\t\t<set name=\"Quiet\" value=\"\"/>\r\n\r\n\t\t\t<!-- User callback called on failed assertion. Can be empty. -->\r\n\t\t\t<set name=\"Callback\" value=\"\" />\r\n\t\t</assertion>\r\n\r\n\t\t<safe-mode>\r\n\t\t\t<!-- Whether safe mode restrictions are enabled. -->\r\n\t\t\t<set name=\"Enabled\" value=\"false\" />\r\n\r\n\t\t\t<!-- A semicolon separated list of file path prefixes which can be accessed via file system functions. \r\n           An empty value means no restrictions are applied. -->\r\n\t\t\t<set name=\"AllowedPathPrefixes\" value=\"\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tRestricts programs execution on those which image is contained in the specified directory.\r\n\t\t\t\tAn empty value means no restrictions are applied. \r\n\t\t\t-->\r\n\t\t\t<set name=\"ExecutionDirectory\" value=\"\" />\r\n\t\t</safe-mode>\r\n\r\n\t\t<posted-files>\r\n\t\t\t<!-- Whether to allow HTTP file uploads. -->\r\n\t\t\t<set name=\"Accept\" value=\"true\"/>\r\n\r\n\t\t\t<!-- Temporary directory where posted files will be stored. Empty value means system temp directory. -->\r\n\t\t\t<set name=\"TempPath\" value=\"C:\\Temp\\PHP.NET\\PostedFiles\" />\r\n\t\t</posted-files>\r\n\r\n\t\t<file-system>\r\n\t\t\t<!-- Whether file names can be specified as URL (and thus allows to use streams). -->\r\n\t\t\t<set name=\"AllowUrlFopen\" value=\"true\"/>\r\n\r\n\t\t\t<!-- Default timeout for socket based streams. -->\r\n\t\t\t<set name=\"DefaultSocketTimeout\" value=\"60\" />\r\n\r\n\t\t\t<!-- A user agent to send when communicating as client over HTTP. -->\r\n\t\t\t<set name=\"UserAgent\" value=\"\" />\r\n\r\n\t\t\t<!-- A password used when logging to FTP server as an anonymous client. -->\r\n\t\t\t<set name=\"AnonymousFtpPassword\" value=\"\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tA default file open mode used when it is not specified in fopen() function explicitly. \r\n\t\t\t\tYou can specify either \"b\" for binary mode, \"t\" for text mode or empty value for no default value. \r\n\t\t\t-->\r\n\t\t\t<set name=\"DefaultFileOpenMode\" value=\"b\" />\r\n\r\n\t\t\t<!-- A list of semicolon-separated directory paths where file system functions and dynamic inclusion \r\n           constructs will search for files. -->\r\n\t\t\t<set name=\"IncludePaths\" value=\".\" />\r\n\t\t</file-system>\r\n\r\n\t\t<bcl>\r\n\t\t\t<session>\r\n\t\t\t\t<!-- Sessions are only available for web applications. -->\r\n\r\n\t\t\t\t<!-- Set to \"no-cache\", \"private\" or \"public\" to determine HTTP caching aspects. -->\r\n\t\t\t\t<set name=\"CacheLimiter\" value=\"no-cache\" />\r\n\r\n\t\t\t\t<!-- Document expires after n minutes. -->\r\n\t\t\t\t<set name=\"CacheExpire\" value=\"180\" />\r\n\r\n\t\t\t\t<!-- \r\n\t\t\t\t  A name of serializer used for serializing session data when persisting them to files.\r\n\t\t\t\t  Each library can register new serializer(s). The Phalanger Base Class Library registers\r\n\t\t\t\t  \"php\" (the same serialization as in original PHP) and \"dotnet\" (.NET binary serialization) \r\n\t\t\t\t  serializers. The default is \"php\" to ensure backwards compatibility. \r\n\t\t\t\t-->\r\n\t\t\t\t<set name=\"Serializer\" value=\"php\" />\r\n\r\n\t\t\t\t<!-- \r\n\t\t\t\t\tA probability factor of invocation of old sessions collection. The probability of \r\n\t\t\t\t\tcollection is got by dividing the value with GcDivisor option value. \r\n\t\t\t\t-->\r\n\t\t\t\t<set name=\"GcProbability\" value=\"1\" />\r\n\r\n\t\t\t\t<!-- A divisor for computing collection probability. -->\r\n\t\t\t\t<set name=\"GcDivisor\" value=\"100\" />\r\n\r\n\t\t\t\t<!-- A maximal session lifetime in seconds. -->\r\n\t\t\t\t<set name=\"GcMaxLifetime\" value=\"1440\" />\r\n\r\n\t\t\t\t<!-- \r\n\t\t\t\t\tA path to directory where session files are stored. The path is considered relativelly\r\n\t\t\t\t\tto the current working directory in the time when the file is opened. Empty value means\r\n\t\t\t\t\tthe system temporary directory. Directory levels described in PHP manual are not supported. \r\n\t\t\t\t-->\r\n\t\t\t\t<set name=\"SavePath\" value=\"\" />\r\n\r\n\t\t\t\t<!-- Session cookie properties. -->\r\n\t\t\t\t<set name=\"CookieLifetime\" value=\"0\" />\r\n\t\t\t\t<set name=\"CookiePath\" value=\"/\" />\r\n\t\t\t\t<set name=\"CookieDomain\" value=\"\" />\r\n\t\t\t\t<set name=\"CookieSecure\" value=\"false\"/>\r\n\t\t\t</session>\r\n\r\n\t\t\t<mailer>\r\n\t\t\t\t<!-- SMTP server name used for sending e-mails. -->\r\n\t\t\t\t<set name=\"SmtpServer\" value=\"localhost\" />\r\n\r\n\t\t\t\t<!-- SMTP server port used for sending e-mails. -->\r\n\t\t\t\t<set name=\"SmtpPort\" value=\"25\" />\r\n\r\n\t\t\t\t<!-- The default value of \"From\" header. -->\r\n\t\t\t\t<set name=\"DefaultFromHeader\" value=\"phalanger@localhost.cz\" />\r\n\r\n        <!-- Whether to add 'X-PHP-Originating-Script' header to the sent e-mails. -->\r\n        <set name=\"AddXHeader\" value=\"false\" />\r\n\t\t\t</mailer>\r\n\r\n\t\t\t<date>\r\n\t\t\t\t<!-- Default latitude (used for calculating sunrise and sunset times). -->\r\n\t\t\t\t<set name=\"Latitude\" value=\"31.7667\" />\r\n\r\n\t\t\t\t<!-- Default longitude (used for calculating sunrise and sunset times). -->\r\n\t\t\t\t<set name=\"Longitude\" value=\"35.2333\" />\r\n\r\n\t\t\t\t<!-- Default longitude (used for calculating sunrise and sunset times). -->\r\n\t\t\t\t<set name=\"SunsetZenith\" value=\"90.83\" />\r\n\r\n\t\t\t\t<!-- Default longitude (used for calculating sunrise and sunset times). -->\r\n\t\t\t\t<set name=\"SunriseZenith\" value=\"90.83\" />\r\n\r\n\t\t\t\t<!-- Default timezone used by time-zone functions. -->\r\n\t\t\t\t<set name=\"TimeZone\" value=\"\" />\r\n\t\t\t</date>\r\n\r\n\t\t\t<highlighting>\r\n\t\t\t\t<!-- Background color. -->\r\n\t\t\t\t<set name=\"Background\" value=\"white\" />\r\n\r\n\t\t\t\t<!-- String color. -->\r\n\t\t\t\t<set name=\"String\" value=\"navy\" />\r\n\r\n\t\t\t\t<!-- Comment color. -->\r\n\t\t\t\t<set name=\"Comment\" value=\"green\" />\r\n\r\n\t\t\t\t<!-- Keyword color. -->\r\n\t\t\t\t<set name=\"Keyword\" value=\"blue\" />\r\n\r\n\t\t\t\t<!-- Outer html code color. -->\r\n\t\t\t\t<set name=\"Html\" value=\"gray\" />\r\n\r\n\t\t\t\t<!-- Default text color. -->\r\n\t\t\t\t<set name=\"Default\" value=\"black\" />\r\n\r\n\t\t\t\t<!-- Color of script tags. -->\r\n\t\t\t\t<set name=\"ScriptTags\" value=\"red\" />\r\n\t\t\t</highlighting>\r\n\t\t</bcl>\r\n\r\n\t\t<mssql>\r\n\t\t\t<!-- Use NT authentication when connecting to the server. -->\r\n\t\t\t<set name=\"NTAuthentication\" value=\"false\" />\r\n\r\n\t\t\t<!-- Time in seconds to wait for connection to the server. -->\r\n\t\t\t<set name=\"ConnectTimeout\" value=\"5\" />\r\n\r\n\t\t\t<!-- Timeout in seconds for commands. Negative value or zero means no timeout. -->\r\n\t\t\t<set name=\"Timeout\" value=\"60\" />\r\n\r\n\t\t\t<!-- \r\n\t\t\t\tLimit for the number of simoultaneous connections that the application can establish.\r\n\t\t\t\tNegative value means no limit.\r\n\t\t\t-->\r\n\t\t\t<set name=\"MaxConnections\" value=\"-1\" />\r\n\t\t</mssql>\r\n\r\n    <iconv>\r\n      <set name=\"InputEncoding\" value=\"Windows-1250\" />\r\n      <set name=\"OutputEncoding\" value=\"Windows-1250\" />\r\n      <set name=\"InternalEncoding\" value=\"UTF-8\" />\r\n    </iconv>\r\n\r\n\t</phpNet>\r\n\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/WebSamples/ASP.NET/FormsAuth/Default.aspx",
    "content": "<%@ Page Language=\"PHP\" AutoEventWireup=\"false\" CodeFile=\"Default.aspx.php\" Inherits=\"_Default\" Title=\"Secret page\" %>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head runat=\"server\">\r\n    <title>Secret page</title>\r\n</head>\r\n<body style=\"font-family: Arial, Helvetica, sans-serif\">\r\n    <form id=\"form1\" runat=\"server\">\r\n        <center>\r\n            <table border=\"0\" cellpadding=\"0\" cellspacing=\"5\">\r\n                <tr>\r\n                    <td style=\"text-align: center\">\r\n                \t    You are currently logged in as <b><%= \\System\\Web\\HttpContext::$Current->User->Identity->Name %></b>.\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td>\r\n                        This page is protected by \r\n                        <a href=\"http://msdn.microsoft.com/library/en-us/dnpag2/html/PAGExplained0002.asp?frame=true\">Forms Authentication</a>.\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td style=\"text-align: center\">\r\n                        <asp:Button ID=\"ButtonLogout\" runat=\"server\" Text=\"Logout\" OnClick=\"ButtonLogout_Click\" />\r\n                    </td>\r\n                </tr>\r\n            </table>\r\n        </center>\r\n    </form>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Deployment/WebSamples/ASP.NET/FormsAuth/Default.aspx.php",
    "content": "<?\r\n\tuse System\\Web\\Security\\FormsAuthentication;\r\n\t\r\n\tpartial class _Default extends \\System\\Web\\UI\\Page\r\n\t{\r\n\t\tprotected function ButtonLogout_Click($sender, $e)\r\n\t\t{\r\n\t\t\tFormsAuthentication::SignOut();\r\n\t\t\tFormsAuthentication::RedirectToLoginPage();\r\n\t\t}\t\t\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/WebSamples/ASP.NET/FormsAuth/Login.aspx",
    "content": "<%@ Page Language=\"PHP\" AutoEventWireup=\"false\" CodeFile=\"Login.aspx.php\" Inherits=\"Login\" Title=\"Login page\" %>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head runat=\"server\">\r\n    <title>Login page</title>\r\n</head>\r\n<body style=\"font-family: Arial, Helvetica, sans-serif\">\r\n    <form id=\"form1\" runat=\"server\">\r\n        <center>\r\n            <table border=\"0\" cellpadding=\"0\" cellspacing=\"5\">\r\n                <tr>\r\n                    <td colspan=\"2\" style=\"text-align: center\">\r\n                \t    <b>Please enter your login name and password:</b>\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td style=\"text-align: right\">\r\n                        Login:\r\n                    </td>\r\n                    <td>\r\n                        <asp:TextBox ID=\"TextBoxLogin\" runat=\"server\" Width=\"200px\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td style=\"text-align: right\">\r\n                        Password:\r\n                    </td>\r\n                    <td>\r\n                        <asp:TextBox ID=\"TextBoxPassword\" runat=\"server\" Width=\"200px\" TextMode=\"Password\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td colspan=\"2\" style=\"text-align: center\">\r\n                        <asp:Button ID=\"ButtonSubmit\" runat=\"server\" Text=\"Submit\" OnClick=\"ButtonSubmit_Click\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td colspan=\"2\">\r\n                        <asp:CustomValidator ID=\"CustomLoginValidator\" runat=\"server\" Display=\"Dynamic\"\r\n                        ErrorMessage=\"Invalid login or password! Please try again.\" Font-Bold=\"True\" />\r\n                    </td>\r\n                </tr>\r\n            </table>\r\n        </center>\r\n    </form>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Deployment/WebSamples/ASP.NET/FormsAuth/Login.aspx.php",
    "content": "<?\r\n\tuse System\\Web\\Security\\FormsAuthentication;\r\n\t\r\n\tpartial class Login extends \\System\\Web\\UI\\Page\r\n\t{\r\n\t\tprotected function ButtonSubmit_Click($sender, $e)\r\n\t\t{\r\n\t\t\t$login = $this->TextBoxLogin->Text;\r\n\t\t\t$passw = $this->TextBoxPassword->Text;\r\n\t\t\r\n\t\t\tif (FormsAuthentication::Authenticate($login, $passw))\r\n\t\t\t{\r\n\t\t\t\tFormsAuthentication::RedirectFromLoginPage($login, false);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t$this->CustomLoginValidator->IsValid = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Deployment/WebSamples/ASP.NET/FormsAuth/Web.config",
    "content": "<configuration>\r\n\r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n  </system.webServer>\r\n  \r\n  <system.web>\r\n    <!-- Go to APPROOT/Trace.axd to see the trace results -->\r\n    <trace enabled=\"true\" requestLimit=\"40\" pageOutput=\"false\" />\r\n\r\n    <authentication mode=\"Forms\">\r\n      <forms name=\"PHALANGERDEMO\" loginUrl=\"Login.aspx\" defaultUrl=\"Default.aspx\">\r\n        <credentials passwordFormat=\"Clear\">\r\n          <user name=\"admin\" password=\"admin\" />\r\n          <user name=\"user\" password=\"secret\" />\r\n        </credentials>\r\n      </forms>\r\n    </authentication>\r\n    \r\n    <authorization>\r\n      <deny users=\"?\" />\r\n      <allow users=\"*\" />\r\n    </authorization>\r\n    \r\n    <customErrors mode=\"Off\" />\r\n    <compilation debug=\"true\" />\r\n  </system.web>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/WebSamples/Extensions/Index.html",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Extension Samples</title>\r\n</head>\r\n<body>\r\n<h1>Samples that use PHP native extensions</h1>\r\n<p>\r\n  This virtual directory contains several sample scripts that use the power of PHP extensions.\r\n  Phalanger comes with a few dozens of useful PHP extensions along with their managed wrappers\r\n  that make it possible to use them from managed environment (Phalanger, C#, VB.NET, ...)\r\n</p> \r\n<ul>\r\n  <li><a href=\"clock.php\">clock.php</a> - generates a PDF file on the web server and allows to view it (uses php_pdf.dll)</li>\r\n  <li><a href=\"graphics.php\">graphics.php</a> - modifies an image loaded from the file and shows it (uses php_gd2.dll)</li>\r\n</ul>\r\n</body>\r\n</html>"
  },
  {
    "path": "Deployment/WebSamples/Extensions/Web.config",
    "content": "<configuration>\r\n  \r\n  \r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n  </system.webServer>\r\n  \r\n  \r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"php_pdf.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"pdf\" />\r\n\t\t\t<add assembly=\"php_gd2.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"gd2\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/WebSamples/Extensions/clock.php",
    "content": "<?php\r\n\r\n/*\r\n  \r\n  This sample was borrowed from the PHP manual. It's author is Uwe Steinmann.\r\n  It was slightly modified by Jan Benda.\r\n  \r\n*/\r\n\r\nif (!extension_loaded('pdf'))\r\n{\r\n\tdie(\"PDF not installed!\");\r\n}\r\n?>\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n  <head>\r\n    <title>Phalanger Samples - PDF Clock</title>\r\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />\r\n    <meta name=\"Generator\" content=\"Microsoft Visual Studio .NET 7.1\">\r\n    <meta name=\"vs_targetSchema\" content=\"http://schemas.microsoft.com/intellisense/ie5\">\r\n    <meta name=\"Description\" content=\"Phalanger Sample - Analog Clock Generated to PDF\">\r\n    <meta name=\"Keywords\" content=\"\">\r\n    <meta name=\"Authors\" content=\"Uwe Steinman, Jan Benda\">\r\n    <meta name=\"Status\" content=\"Sample\">\r\n  </head>\r\n  <body>\r\n    <h1>Phalanger Samples - PDF Clock</h1>\r\n<?    \r\necho \"<DIV id='loading'>Generating PDF file, please wait a moment ...</div><br/>\";\r\nflush(); \r\n\r\nerror_reporting(E_ALL);\r\n\r\n$time = time();\r\n$ltime = getdate($time);\r\n$stime = Date(\"H:i:s\", $time);\r\n$texttime = ($ltime['hours']+0) . \" hour\" . ($ltime['hours'] ? \"s\":\"\");\r\nif ($ltime['minutes']) $texttime .= \" and \" . ($ltime['minutes']+0) . \" minute\" . ($ltime['minutes'] ? \"s\":\"\");\r\n  else $texttime = \"exactly $texttime\";\r\n\r\n// A4 page: 595 x 842 points\r\n\r\n$radius = 177;\r\n$margin = 120;\r\n$ring = 40;\r\n$header = 20;\r\n$footer = 228;\r\n$file = tempnam(\"\", \"tests\") . '.pdf';\r\n\r\n$width = 2 * ($radius + $margin);\r\n$height = 2 * ($radius + $margin) + $header + $footer;\r\n\r\n$pdf = pdf_new();\r\nif (!pdf_open_file($pdf, $file)) {\r\n    echo \"error\";\r\n    exit;\r\n};\r\n\r\npdf_set_parameter($pdf, \"warning\", \"true\");\r\n\r\npdf_set_info($pdf, \"Creator\", \"Phalanger\");\r\npdf_set_info($pdf, \"Author\", \"Uwe Steinmann\");\r\npdf_set_info($pdf, \"Title\", \"Analog Clock\");\r\n\r\npdf_begin_page($pdf, $width, $height);\r\n\r\nfunction center($s, $y, $size, $fontname = \"Times-Roman\", $outline = 0)\r\n{\r\n  global $pdf, $font, $width;\r\n  pdf_set_value($pdf, \"textrendering\", $outline);\r\n  $font = pdf_findfont($pdf, $fontname, \"iso8859-2\");\r\n  pdf_setfont($pdf, $font, $size);\r\n  $w = pdf_stringwidth($pdf, $s);\r\n  pdf_show_xy($pdf, $s, ($width - $w) / 2, $y); \r\n}\r\n\r\n/* outlined */\r\ncenter(\"It is $texttime.\", $height - 60, 42, \"Times-Roman\", 1);\r\ncenter(\"It is time for\", 200, 100, \"Times-Roman\", 1);\r\n\r\n/* filled */\r\ncenter(\"Phalanger!\", 70, 110, \"Times-Bold\", 0);\r\n\r\npdf_translate($pdf, $radius + $margin, $radius + $margin + $footer);\r\npdf_save($pdf);\r\npdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);\r\n\r\n/* minute strokes */\r\npdf_setlinewidth($pdf, 2.0);\r\nfor ($alpha = 0; $alpha < 360; $alpha += 6) {\r\n    pdf_rotate($pdf, 6.0);\r\n    pdf_moveto($pdf, $radius, 0.0);\r\n    pdf_lineto($pdf, $radius-$ring/3, 0.0);\r\n    pdf_stroke($pdf);\r\n}\r\n\r\npdf_restore($pdf);\r\npdf_save($pdf);\r\n\r\n/* 5 minute strokes */\r\npdf_setlinewidth($pdf, 3.0);\r\nfor ($alpha = 0; $alpha < 360; $alpha += 30) { \r\n    pdf_rotate($pdf, 30.0);\r\n    pdf_moveto($pdf, $radius, 0.0);\r\n    pdf_lineto($pdf, $radius-$ring, 0.0);\r\n    pdf_stroke($pdf);\r\n}\r\n\r\n/* draw hour hand */\r\npdf_save($pdf);\r\npdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0);\r\npdf_moveto($pdf, -$radius/10, -$radius/20);\r\npdf_lineto($pdf, $radius/2, 0.0);\r\npdf_lineto($pdf, -$radius/10, $radius/20);\r\npdf_closepath($pdf);\r\npdf_fill($pdf);\r\npdf_restore($pdf);\r\n\r\n/* draw minute hand */\r\npdf_save($pdf);\r\npdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0);\r\npdf_moveto($pdf, -$radius/10, -$radius/20);\r\npdf_lineto($pdf, $radius * 0.8, 0.0);\r\npdf_lineto($pdf, -$radius/10, $radius/20);\r\npdf_closepath($pdf);\r\npdf_fill($pdf);\r\npdf_restore($pdf);\r\n\r\n/* draw second hand */\r\npdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);\r\npdf_setlinewidth($pdf, 2);\r\npdf_save($pdf);\r\npdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));\r\npdf_moveto($pdf, -$radius/5, 0.0);\r\npdf_lineto($pdf, $radius, 0.0);\r\npdf_stroke($pdf);\r\npdf_restore($pdf);\r\n\r\n/* draw little circle at center */\r\npdf_circle($pdf, 0, 0, $radius/30);\r\npdf_fill($pdf);\r\n\r\npdf_restore($pdf);\r\n\r\n/* DONE */\r\npdf_end_page($pdf);\r\npdf_close($pdf);\r\npdf_delete($pdf);\r\n\r\n// hides \"Generating ...\" message:\r\necho \"<script language='JavaScript'>document.getElementById('loading').style.display = 'none';</script>\";\r\n?>\r\n<?if (!file_exists($file)):?>\r\n    <h2 style=\"color: red\">Error occured: file <?=$file?> does not exist!</h2>\r\n<?endif;?>\r\n    It is exactly <?=$stime?>.\r\n    A PDF file containing an image of clocks with the current time has been generated.</br>\r\n    <p>\r\n    <form method=\"get\" action=\"getpdf.php\">\r\n       <input style=\"font-weight: bold\" type=\"submit\" value=\"Get it in PDF!\">\r\n       <input type=\"hidden\" name=\"filename\" value=\"<?=$file?>\">\r\n    </form>\r\n    <form method=\"get\" action=\"\">\r\n       <input type=\"submit\" value=\"Refresh\">\r\n    </form>\r\n    </p>\r\n\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "Deployment/WebSamples/Extensions/getpdf.php",
    "content": "<?php\r\n$len = filesize($_GET['filename']);\r\nheader(\"Content-Type: application/pdf\");\r\nheader(\"Content-Length: $len\");\r\nheader(\"Accept-Ranges: bytes\");\r\nheader(\"Content-Disposition: inline; filename=Samples.Clock.pdf\");\r\nreadfile($_GET['filename']);\r\n?> "
  },
  {
    "path": "Deployment/WebSamples/Extensions/graphics.php",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Samples - GD Extension</title>\r\n</head>\r\n<body>\r\n<h1>Phalanger Samples - GD Extension</h1>\r\n<p>\r\n  The sample shows how to load a .png image and to draw to it.\r\n</p>\r\n<? \r\n$title = empty($_GET[\"Title\"]) ? \"Class diagram\" : addcslashes($_GET[\"Title\"],'\"');\r\n?>\r\n<p align=\"center\">\r\n  <img src=\"image.php?Title=<? echo $title; ?>\" alt=\"<? echo $title; ?>\"/> \r\n</p>\r\n<form method=\"get\">\r\n  A title:\r\n  <input type=\"text\" name=\"Title\" value=\"<? echo $title; ?>\" />\r\n  <input type=\"submit\" value=\"Set the title of the image\">\r\n</form>  \r\n</body>\r\n</html>"
  },
  {
    "path": "Deployment/WebSamples/Extensions/image.php",
    "content": "<?\r\n   header(\"Content-type: image/png\"); \r\n   $string = $_GET[\"Title\"]; \r\n   $im     = imagecreatefrompng(getcwd() . \"\\\\diagram.png\"); \r\n   $orange = imagecolorallocate($im, 0, 0, 255); \r\n   imagestring($im, 3, 25, 9, $string, $orange);\r\n   imagepng($im); \r\n   imagedestroy($im);\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/Web.config",
    "content": "<configuration>\r\n  \r\n  \r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n    <defaultDocument>\r\n      <files>\r\n        <add value=\"index.php\" />\r\n      </files>\r\n    </defaultDocument>\r\n  </system.webServer>\r\n  \r\n  \r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t</classLibrary>\r\n    <!--\r\n    Following section specifies which script libraries are referenced.\r\n    Scripts from these assemblies behave as they would be on file system.\r\n    Even static inclusions targetting scripts inside these DLLs work.\r\n    -->\r\n    <scriptLibrary>\r\n      <add url=\"bin/ext.dll\" />\r\n      <!-- <add assembly=\"ext, Version=1.0.0.0\" /> -->\r\n    </scriptLibrary>\r\n    \r\n    <compiler>\r\n      <!-- Enables or disables compiler to make inclusions static. -->\r\n      <set name=\"EnableStaticInclusions\" value=\"true\" scope=\"Any\" />\r\n    </compiler>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/build_ext.cmd",
    "content": "..\\..\\bin\\phpc /target:dll /static+ /root:. /recurse:ext/ /out:bin/ext.dll\r\n\r\npause"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/ext/defs.php",
    "content": "<?php\r\n\r\ninclude \"fncs.php\";\r\ninclude \"types.php\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/ext/fncs.php",
    "content": "<?php\r\n\r\nfunction printer($x)\r\n{\r\n    echo \"\\n$x\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/ext/types.php",
    "content": "<?php\r\n\r\nclass X\r\n{\r\n    var $a, $b;\r\n    \r\n    function X($a, $b)\r\n    {\r\n        $this->a = $a;\r\n        $this->b = $b;\r\n    }\r\n    \r\n    function __toString()\r\n    {\r\n        return \"X(){ a = $this->a, b = $this->b };\";\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/MultiScriptAssembly/index.php",
    "content": "<?php\r\n\r\ninclude \"ext/defs.php\";\r\n\r\n$x = new X(1, 2);\r\n\r\nprinter( (string)$x );\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/SimpleScripts/Config.php",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Samples - Configuration</title>\r\n</head>\r\n<body>\r\n<h1>Phalanger Samples - Configuration</h1>\r\n<p>\r\n  This sample shows the current Phalanger configuration and content of the prototypic Web.config configuration \r\n  file located in the current directory (<? getcwd(); ?>). There are all supported configuration options\r\n  stated in this file along with default values and their respective PHP names if applicable.\r\n  If you are configuring your own application, you don't need to define all options but only those\r\n  that differ from the defaults.\r\n</p> \r\n<?\r\n  phpinfo(INFO_CONFIGURATION);\r\n?>\r\n<h2>Prototypic Web.config File</h2>\r\n<pre>\r\n<?\r\n// reads a content of file Web.config in the current working directory and applies filter function htmlspecialchars\r\n// which converts HTML special charaters like <, &, etc. to entities:\r\nob_start(\"htmlspecialchars\");\r\nreadfile(\"Web.config\");\r\nob_end_flush();  \r\n?>\r\n</pre>\r\n</body>\r\n</html>"
  },
  {
    "path": "Deployment/WebSamples/SimpleScripts/Forms.php",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Samples - Request Variables, Uploaded Files</title>\r\n</head>\r\n<body>\r\n<h1>Phalanger Samples - Request Variables, Uploaded Files</h1>\r\n<p>\r\n  This sample shows how request variables are passed to PHP scripts and how files can be uploaded.\r\n</p> \r\n<h2>Current values of request variables and uploaded files information</h2>\r\n\r\n$_GET auto-global array content:\r\n<pre>\r\n<? print_r($_GET); ?>\r\n</pre>\r\n\r\n$_POST auto-global array content:\r\n<pre>\r\n<? print_r($_POST); ?>\r\n</pre>\r\n\r\n$_FILES auto-global array content:\r\n<pre>\r\n<? print_r($_FILES); ?>\r\n</pre>\r\n\r\n<h2>Forms sending data</h2>\r\n<p>\r\nA form that sends post data back to this script.\r\nVariable called \"post_var\" will appear in $_POST array.</br>\r\n<form method=\"post\">\r\n  <input name=\"post_var\" value=\"<? echo isset($_POST[\"post_var\"]) ? addslashes($_POST[\"post_var\"]) : \"This is post datum\" ?>\"/>\r\n  <input type=\"submit\"/>\r\n</form>\r\n</hr>\r\nA form that sends get data back to this script.\r\nAn array \"get_var\" containing two values will appear in $_GET array.</br> \r\n<form method=\"get\">\r\n  <input name=\"get_var[]\" value=\"<? echo isset($_GET[\"get_var\"][0]) ? addslashes($_GET[\"get_var\"][0]) : \"get #1\" ?>\"/>\r\n  <input name=\"get_var[]\" value=\"<? echo isset($_GET[\"get_var\"][1]) ? addslashes($_GET[\"get_var\"][1]) : \"get #2\" ?>\"/>\r\n  <input type=\"submit\"/>\r\n</form>\r\n</hr>\r\n<h2>A form uploading files</h2>\r\nInformation about uploaded file will appear in the $_FILES array.</br>\r\n<form enctype=\"multipart/form-data\" method=\"POST\"> \r\n  <p>\r\n  Choose a file to sent (note, its size should be less than a limit set in ASP.NET configuration option\r\n  <i>maxRequestLength</i> in section <i>system.web/httpRuntime</i>):\r\n  </p>\r\n  <input name=\"userfile\" type=\"file\"><br> \r\n  <input type=\"submit\" value=\"Send File\"> \r\n</form>\r\n</body>\r\n</html>"
  },
  {
    "path": "Deployment/WebSamples/SimpleScripts/Index.html",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Simple Scripts Samples</title>\r\n</head>\r\n<body>\r\n<h1>Simple Scripts Samples</h1>\r\n<p>\r\n  This virtual directory contains several simple scripts demonstrating some of the many Phalanger features.\r\n  You can start with the samples to see what Phalanger can do.\r\n  The following samples are available:\r\n</p> \r\n<ul>\r\n  <li><a href=\"Forms.php\">Forms.php</a> - HTML forms, working with get and post variables, uploading files</li>\r\n  <li><a href=\"Session.php\">Session.php</a> - working with session variables</li>\r\n  <li><a href=\"Config.php\">Config.php</a> - configuration</li>\r\n</ul>\r\n</body>\r\n</html>"
  },
  {
    "path": "Deployment/WebSamples/SimpleScripts/Session.php",
    "content": "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title>Phalanger Samples - Session Variables</title>\r\n</head>\r\n<body>\r\n<h1>Phalanger Samples - Session Variables via ASP.NET</h1>\r\n<p>\r\n  This sample shows how session variables are handled.\r\n  Phalanger uses ASP.NET session management and doesn't support some specific PHP features.\r\n  However, common functions working with session variables are implemented.\r\n  Note that session management is configured in ASP.NET configuration, section <i>system.web/sessionState</i>.\r\n</p> \r\n<h3>Current values loaded from session store</h3>\r\n\r\n$_SESSION auto-global array content:\r\n<pre>\r\n<?\r\n  session_start();\r\n  var_dump($_SESSION); \r\n?>\r\n</pre>\r\n\r\n<?\r\nclass A \r\n{ \r\n  public $value;\r\n}\r\n?>\r\n\r\n<h3>Storing an instance of a class to the session</h3>\r\nA class <code>A</code> having an instance field <code>$value</code> is declared in this script\r\nand it is added to the session. You can reload this page by submitting of the following form.\r\nThe object will then appear into the $_SESSION array dumped above.\r\nIts field will contain an array of declared classes.\r\n\r\n<form method=\"get\">\r\n  <input type=\"submit\">\r\n</form>\r\n\r\n<?\r\n  // create an object:\r\n  $a = new A;\r\n  \r\n  // set field falue:\r\n  $a->value = get_declared_classes();\r\n  \r\n  // add to session:\r\n  $_SESSION[\"instance_of_A\"] = $a;\r\n?>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Deployment/WebSamples/Tests/Arrays/array_map.php",
    "content": "[expect]\r\narray\r\n(\r\n  [0] => array\r\n  (\r\n    [0] => 1\r\n    [1] => A\r\n    [2] => 0\r\n  )\r\n  [1] => array\r\n  (\r\n    [0] => 2\r\n    [1] => B\r\n    [2] => 0\r\n  )\r\n  [2] => array\r\n  (\r\n    [0] => 3\r\n    [1] => C\r\n    [2] => \r\n  )\r\n)\r\narray\r\n(\r\n  [0] => 1 A 0\r\n  [1] => 2 B 0\r\n  [2] => 3 C \r\n)\r\narray\r\n(\r\n  [0] => 1\r\n  [1] => 2\r\n  [2] => 3\r\n)\r\narray\r\n(\r\n  [0] => A\r\n  [1] => B\r\n  [2] => C\r\n)\r\narray\r\n(\r\n  [0] => x\r\n  [1] => x\r\n)\r\n[file]\r\n<?\r\n  function f($x,$y,&$z)\r\n  {\r\n    $result = \"$x $y $z\";\r\n    $z = 'x';\r\n    return $result;\r\n  }\r\n  \r\n  $a = array(1,2,3);\r\n  $b = array('A','B','C');\r\n  $c = array(0,0);\r\n  \r\n  print_r(array_map(null,$a,$b,$c));\r\n  print_r(array_map(\"f\",$a,$b,$c));\r\n\r\n  print_r($a);\r\n  print_r($b);\r\n  print_r($c);\r\n?>  "
  },
  {
    "path": "Deployment/WebSamples/Tests/Arrays/array_multisort.php",
    "content": "[expect]\r\nbool(true)\r\narray\r\n(\r\n  [0] => array\r\n  (\r\n    [0] => 2\r\n    [1] => 8\r\n    [2] => 2\r\n    [3] => 2\r\n    [4] => 8\r\n    [5] => 8\r\n  )\r\n  [1] => array\r\n  (\r\n    [0] => 7\r\n    [1] => 2\r\n    [2] => 7\r\n    [3] => 4\r\n    [4] => 8\r\n    [5] => 1\r\n  )\r\n  [2] => array\r\n  (\r\n    [0] => 1\r\n    [1] => 4\r\n    [2] => 8\r\n    [3] => 0\r\n    [4] => 6\r\n    [5] => 2\r\n  )\r\n  [3] => array\r\n  (\r\n    [0] => 8\r\n    [1] => 4\r\n    [2] => 1\r\n    [3] => 0\r\n    [4] => 7\r\n    [5] => 1\r\n  )\r\n  [4] => array\r\n  (\r\n    [0] => 20\r\n    [1] => 2\r\n    [2] => 12\r\n    [3] => 11\r\n    [4] => 10\r\n    [5] => 1\r\n  )\r\n)\r\narray\r\n(\r\n  [0] => array\r\n  (\r\n    [0] => 10\r\n    [1] => 100\r\n    [2] => 100\r\n    [3] => a\r\n  )\r\n  [1] => array\r\n  (\r\n    [0] => 1\r\n    [1] => 3\r\n    [2] => 2\r\n    [3] => 1\r\n  )\r\n)\r\narray\r\n(\r\n  [0] => 10\r\n  [1] => a\r\n  [2] => 100\r\n  [3] => 100\r\n)\r\narray\r\n(\r\n  [0] => 1\r\n  [1] => 1\r\n  [2] => 2\r\n  [3] => 3\r\n)\r\n\r\n\r\n[file]\r\n<?\r\n$a = array(\r\n  array(8,8,8,2,2,2),\r\n  array(1,2,8,7,7,4),\r\n  array(2,4,6,1,8,0),\r\n  array(1,4,7,8,1,0),\r\n  array(1,2,10,20,12,11));\r\n\r\nvar_dump(array_multisort($a[4],SORT_STRING,SORT_DESC,$a[0],SORT_DESC,$a[1],SORT_DESC,$a[2],$a[3],SORT_DESC));\r\nprint_r($a);\r\n\r\n$a = array(array(\"10\", 100, 100, \"a\"), array(1, 3, \"2\", 1)); \r\narray_multisort($a[0], SORT_ASC, SORT_STRING, \r\n               $a[1], SORT_NUMERIC, SORT_DESC); \r\nprint_r($a);               \r\n               \r\n$a1 = array(\"10\", 100, 100, \"a\"); \r\n$a2 = array(1, 3, \"2\", 1); \r\narray_multisort($a1, $a2);                \r\n\r\nprint_r($a1);\r\nprint_r($a2);  \r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Arrays/array_reduce1.php",
    "content": "[expect]\r\narray\r\n(\r\n  [a] => 1\r\n  [b] => 2\r\n  [c] => 3\r\n  [d] => 4\r\n  [e] => 5\r\n)\r\narray\r\n(\r\n  [0] => 1\r\n  [1] => 2\r\n  [2] => 3\r\n  [3] => 4\r\n  [4] => 5\r\n)\r\narray [empty]\r\n[file]\r\n<?\r\nfunction &t(&$a, &$b)\r\n{\r\n  static $o = 1;\r\n  \r\n  $a[$b] = $o;\r\n  $b = $o;\r\n  \r\n  $o++;\r\n  \r\n  return $a;\r\n}\r\n\r\n$array0 = array(\"a\", \"b\", \"c\", \"d\", \"e\"); \r\n$array1 = array();\r\nprint_r(array_reduce($array0,\"t\",$array1)); \r\nprint_r($array0);\r\nprint_r($array1);\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Arrays/array_reduce2.php",
    "content": "[expect]\r\narray\r\n{\r\n  [0] => integer(1)\r\n  [1] => integer(2)\r\n  [2] => integer(3)\r\n  [3] => integer(4)\r\n  [4] => integer(5)\r\n}\r\ninteger(15)\r\ninteger(1200)\r\ninteger(1)\r\n[file]\r\n<?\r\nfunction rsum($v, $w) { \r\n   $v += $w; \r\n   return $v; \r\n} \r\n\r\nfunction rmul($v, $w) { \r\n   $v *= $w; \r\n   return $v; \r\n} \r\n\r\n$a = array(1, 2, 3, 4, 5); \r\n$x = array(); \r\n$b = array_reduce($a, \"rsum\"); \r\n$c = array_reduce($a, \"rmul\", 10); \r\n$d = array_reduce($x, \"rsum\", 1); \r\nvar_dump($a,$b,$c,$d);\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Arrays/usort.php",
    "content": "[expect]\r\n0\r\n1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\narray\r\n(\r\n  [0] => 10\r\n  [1] => 9\r\n  [2] => 8\r\n  [3] => 7\r\n  [4] => 6\r\n  [5] => 5\r\n  [6] => 4\r\n  [7] => 3\r\n  [8] => 2\r\n  [9] => 1\r\n)\r\n[file]\r\n<?\r\nfunction my_cmp($a,$b)\r\n{\r\n  static $i = 0;\r\n  \r\n  echo \"$i\\n\";\r\n  $i++;\r\n  return $a==$b ? 0 : ($a < $b ? +1 : -1);\r\n}\r\n\r\n$array = array(1,2,3,4,5,6,7,8,9,10);\r\n\r\nusort($array,\"my_cmp\");\r\n\r\nprint_r($array);\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Functions/global.php",
    "content": "[expect]Set in global code\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n\tglobal $z;\r\n\r\n\techo $z;\r\n}\r\n\r\n$z = \"Set in global code\";\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Functions/indirect.php",
    "content": "[expect]This is f\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n\techo \"This is f\";\r\n}\r\n\r\n$x = \"f\";\r\n$x();\r\n\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Functions/references.php",
    "content": "[expect exact]\r\nstring(19) \"Set in f() function\"\r\nobject(A)(1)\r\n{\r\n  [\"a\"] => object(B)(0)\r\n  {\r\n  }\r\n}\r\nNULL\r\nstring(20) \"Set in B->f() method\"\r\n\r\n[file]\r\n<?\r\nfunction f(&$par)\r\n{\r\n\t$par = \"Set in f() function\";\r\n}\r\n\r\nf($a);\r\nvar_dump($a);\r\n\r\nclass A\r\n{\r\n\tpublic $a;\r\n}\t\r\n\r\nclass B\r\n{\r\n\tfunction f(&$par)\r\n\t{\r\n\t\t$par = \"Set in B->f() method\";\t\r\n\t}\t\r\n}\r\n\r\n$o = new A();\r\n$o->a = new B();\r\n$r =& $o->a->f($a);\r\nvar_dump($o, $r, $a);\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/MSDN.css",
    "content": "body /* This body tag requires the use of one of the sets of banner and/or text div ids */\r\n\t{\r\n\tmargin: 0px 0px 0px 0px;\r\n\tpadding: 0px 0px 0px 0px;\r\n\tbackground: #ffffff; \r\n\tcolor: #000000;\r\n\tfont-family: Verdana, Arial, Helvetica, sans-serif;\r\n\tfont-size: 70%;\r\n\twidth: 100%;\r\n\t/*overflow: expression('hidden');*/\r\n\t}\r\ndiv#scrollyes /* Allows topic to scroll with correct margins. Cannot be used with running head banner */\r\n\t{     /* Must immediately follow <body>. */\r\n\tpadding: 2px 15px 2px 22px;\r\n\twidth: 100%;\r\n\t}\r\ndiv#nsbanner /* Creates Nonscrolling banner region */\r\n\t{\r\n\tposition: relative;\r\n\tleft: 0px;\r\n\tpadding: 0px 0px 0px 0px;\r\n\tborder-bottom: 1px solid #999999;\r\n\t/*width: expression(document.body.clientWidth);*/\r\n\tbackground-color: #99ccff;\r\n\t}\r\ndiv#nstext /* Creates the scrolling text area for Nonscrolling region topic */\r\n\t{\r\n\ttop: 0px;\r\n\tpadding: 5px 20px 0px 22px;\r\n\t/*overflow: expression('auto');\r\n\twidth: expression(document.body.clientWidth);\r\n\theight: expression(document.body.clientHeight - nsbanner.offsetHeight);*/\r\n\t}\r\ndiv#scrbanner /* Creates the running head bar in a full-scroll topic */\r\n\t{     /* Allows topic to scroll. */\r\n\tmargin: 0px 0px 0px 0px;\r\n\tpadding: 0px 0px 0px 0px;\r\n\tborder-bottom: 1px solid #999999;\r\n\t}\r\ndiv#scrtext /* Creates the text area in a full-scroll topic */\r\n\t{   /* Allows topic to scroll. */\r\n\tpadding: 0px 10px 0px 22px; \r\n\t}\r\ndiv#bannerrow1 /* provides full-width color to top row in running head (requires script) */\r\n\t{\r\n\t}\r\ndiv#titlerow /* provides non-scroll topic title area (requires script) */\r\n\t{\r\n\tpadding: 0px 10px 0px 22px; \r\n\t}\r\n\r\nh1, h2, h3, h4\r\n\t{\r\n\tfont-family: Verdana, Arial, Helvetica, sans-serif;\r\n\tmargin-bottom: .4em; \r\n\tmargin-top: 1em;\r\n\tfont-weight: bold;\r\n\t}\r\nh1\r\n\t{\r\n\tfont-size: 120%;\r\n\tmargin-top: 0em;\r\n\t}\r\ndiv#scrollyes h1 /* Changes font size for full-scrolling topic */\r\n\t{\r\n\tfont-size: 150%;\r\n\t}\r\nh2\r\n\t{\r\n\tfont-size: 130%;\r\n\t}\r\nh3\r\n\t{\r\n\tfont-size: 115%;\r\n\t}\r\nh4\r\n\t{\r\n\tfont-size: 100%;\r\n\t}\r\n.dtH1, .dtH2, .dtH3, .dtH4\r\n\t{\r\n\tmargin-left: -18px;\r\n\t}\r\ndiv#titlerow h1\r\n\t{\r\n\tmargin-bottom: .2em\r\n\t}\r\n\r\ntable.bannerparthead, table.bannertitle /* General values for the Running Head tables */\r\n\t{\r\n\tposition: relative;\r\n\tleft: 0px;\r\n\ttop: 0px;\r\n\tpadding: 0px 0px 0px 0px;\r\n\tmargin: 0px 0px 0px 0px;\r\n\twidth: 100%;\r\n\theight: 21px; \r\n\tborder-collapse: collapse;\r\n\tborder-style: solid;\r\n\tborder-width: 0px;\r\n\tbackground-color: #99ccff; \r\n\tfont-size: 100%;\r\n\t}\r\ntable.bannerparthead td /* General Values for cells in the top row of running head */\r\n\t{\r\n\tmargin: 0px 0px 0px 0px;\r\n\tpadding: 2px 0px 0px 4px;\r\n\tvertical-align: middle;\r\n\tborder-width: 0px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tbackground: transparent; \r\n\tfont-style: italic;\r\n\tfont-weight: normal;\r\n\t}\r\ntable.bannerparthead td.product /* Values for top right cell in running head */\r\n\t{                       /* Allows for a second text block in the running head */\r\n\ttext-align: right;\r\n\tpadding: 2px 5px 0px 5px;\r\n\t}\r\ntable.bannertitle td /* General Values for cells in the bottom row of running head */\r\n\t{\r\n\tmargin: 0px 0px 0px 0px;\r\n\tpadding: 0px 0px 0px 3px;\r\n\tvertical-align: middle;\r\n\tborder-width: 0px 0px 1px 0px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tbackground: transparent;\r\n\tfont-weight: bold;\r\n\t}\r\ntd.button1 /* Values for button cells */\r\n\t{\r\n\twidth: 14px;\r\n\tcursor: hand;\r\n\t}\r\n\r\np\r\n\t{\r\n\tmargin: .5em 0em .5em 0em;\r\n\t}\r\nblockquote.dtBlock\r\n\t{\r\n\tmargin: .5em 1.5em .5em 1.5em;\r\n\t}\r\ndiv#dtHoverText\r\n\t{\r\n\tcolor: #000066;\r\n\t}\r\n.normal\r\n\t{\r\n\tmargin: .5em 0em .5em 0em;\r\n\t}\r\n.fineprint\r\n\t{\r\n\tfont-size: 90%; /* 90% of 70% */\r\n\t}\r\n.indent\r\n\t{\r\n\tmargin: .5em 1.5em .5em 1.5em;\r\n\t}\r\n.topicstatus /* Topic Status Boilerplate class */\r\n\t{\r\n\tdisplay: block;\r\n\tcolor: red;\r\n\t}\r\np.label\r\n\t{\r\n\tmargin-top: 1em;\r\n\t}\r\np.labelproc\r\n\t{\r\n\tmargin-top: 1em;\r\n\tcolor: #000066;\r\n\t}\r\n\r\ndiv.tablediv\r\n\t{\r\n\twidth: 100%; /* Forces tables to have correct right margins and top spacing */\r\n\tmargin-top: -.4em;\r\n\t}\r\nol div.tablediv, ul div.tablediv, ol div.HxLinkTable, ul div.HxLinkTable\r\n\t{\r\n\tmargin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n\t}\r\ntable.dtTABLE\r\n\t{\r\n\twidth: 100%; /* Forces tables to have correct right margin */\r\n\tmargin-top: .6em;\r\n\tmargin-bottom: .3em;\r\n\tborder-width: 1px 1px 0px 0px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tbackground-color: #999999; \r\n\tfont-size: 100%; /* Text in Table is same size as text outside table */\r\n\t}\r\ntable.dtTABLE th, table.dtTABLE td\r\n\t{ \r\n\tborder-style: solid; /* Creates the cell border and color */\r\n\tborder-width: 0px 0px 1px 1px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tpadding: 4px 6px;\r\n\ttext-align: left;\r\n\t}\r\ntable.dtTABLE th\t\r\n\t{ \r\n\tbackground: #cccccc; /* Creates the shaded table header row */\r\n\tvertical-align: bottom;\r\n\t}\r\ntable.dtTABLE td\t\r\n\t{\r\n\tbackground: #ffffff;\r\n\tvertical-align: top;\r\n\t}\r\n\r\nMSHelp\\:ktable\r\n\t{\r\n\tdisambiguator: span;\r\n\tseparator: &nbsp|&#32;\r\n\tprefix: |&#32;\r\n\tpostfix: &nbsp;\r\n\tfilterString: ;\r\n\t}\r\ndiv.HxLinkTable\r\n\t{\r\n\twidth: auto; /* Forces tables to have correct right margins and top spacing */\r\n\tmargin-top: -.4em;\r\n\tvisibility: visible;\r\n\t}\r\nol div.HxLinkTable, ul div.HxLinkTable\r\n\t{\r\n\tmargin-top: 0em; /* Forces tables to have correct right margins and top spacing */\r\n\t}\r\ntable.HxLinkTable /* Keep in sync with general table settings below */\r\n\t{\r\n\twidth: auto;\r\n\tmargin-top: 1.5em;\r\n\tmargin-bottom: .3em;\r\n\tmargin-left: -1em;\r\n\tborder-width: 1px 1px 0px 0px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tbackground-color: #999999; \r\n\tfont-size: 100%; /* Text in Table is same size as text outside table */\r\n\tbehavior:url(hxlinktable.htc); /* Attach the behavior to link elements. */\r\n\t}\r\ntable.HxLinkTable th, table.HxLinkTable td /* Keep in sync with general table settings below */\r\n\t{ \r\n\tborder-style: solid; /* Creates the cell border and color */\r\n\tborder-width: 0px 0px 1px 1px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n\tpadding: 4px 6px;\r\n\ttext-align: left;\r\n\t}\r\ntable.HxLinkTable th /* Keep in sync with general table settings below */\r\n\t{ \r\n\tbackground: #cccccc; /* Creates the shaded table header row */\r\n\tvertical-align: bottom;\r\n\t}\r\ntable.HxLinkTable td /* Keep in sync with general table settings below */\r\n\t{\r\n\tbackground: #ffffff;\r\n\tvertical-align: top;\r\n\t}\r\npre.code\r\n\t{\r\n\tbackground-color: #eeeeee;\r\n\tpadding: 4px 6px 4px 6px;\r\n\t}\r\npre, div.syntax\r\n\t{\r\n\tmargin-top: .5em;\r\n\tmargin-bottom: .5em; \r\n\t}\r\npre, code, .code, div.syntax\r\n\t{\r\n\tfont: 100% Monospace, Courier New, Courier; /* This is 100% of 70% */\r\n\tcolor: #000066;\r\n\t}\r\npre b, code b\r\n\t{\r\n\tletter-spacing: .1em; /* opens kerning on bold in Syntax/Code */\r\n\t}\r\npre.syntax, div.syntax\r\n\t{\r\n\tbackground: #cccccc;\r\n\tpadding: 4px 8px;\r\n\tcursor: text;\r\n\tmargin-top: 1em;\r\n\tmargin-bottom: 1em; \r\n\tcolor: #000000;\r\n\tborder-width: 1px;\r\n\tborder-style: solid;\r\n\tborder-color: #999999;\r\n/* ------------------------------------- */\r\n/* BEGIN changes to dtue.css conventions */\r\n\tfont-weight: bolder;\r\n\tletter-spacing: .1em;\r\n\t}\r\n.syntax span.lang\r\n\t{\r\n\tmargin: 0;\r\n\tfont-weight: normal;\r\n\t}\r\n.syntax span.meta\r\n\t{\r\n\tmargin: 0;\r\n\tfont-weight: normal;\r\n\tfont-style: italic;\r\n\t}\r\n.syntax a\r\n\t{\r\n\tmargin: 0;\r\n\tfont-weight: normal;\r\n\t}\r\n/* END changes to dtue.css conventions */\r\n/* ----------------------------------- */\r\n\r\n.syntax div\r\n\t{\r\n\tpadding-left: 24px;\r\n\ttext-indent: -24px;\r\n\t}\r\n\r\n.syntax .attribute\r\n\t{\r\n\t\tfont-weight: normal;\r\n\t}\r\ndiv.footer\r\n\t{\r\n\tfont-style: italic;\r\n\t}\r\ndiv.footer hr\r\n\t{\r\n\tcolor: #999999;\r\n\theight: 1px;\r\n\t}\r\n\r\nol, ul\r\n\t{\r\n\tmargin: .5em 0em 0em 4em; \r\n\t}\r\nli\r\n\t{\r\n\tmargin-bottom: .5em;\r\n\t}\r\nul p, ol p, dl p\r\n\t{\r\n\tmargin-left: 0em;\r\n\t}\r\nul p.label, ol p.label\r\n\t{\r\n\tmargin-top: .5em;\r\n\t}\r\n\r\ndl\r\n\t{\r\n\tmargin-top: 0em; \r\n\tpadding-left: 1px; /* Prevents italic-letter descenders from being cut off */\r\n\t}\r\ndd\r\n\t{\r\n\tmargin-bottom: 0em;  \r\n\tmargin-left: 1.5em; \r\n\t}\r\ndt\r\n\t{\r\n\tmargin-top: .5em; \r\n\t}\r\n\r\na:link\r\n\t{\r\n\tcolor: #0000ff;\r\n\t}\r\na:visited\r\n\t{\r\n\tcolor: #0000ff;\r\n\t}\r\na:hover\r\n\t{\r\n\tcolor: #3366ff;\r\n\t}\r\n\r\nimg\r\n\t{\r\n\tborder: none; \r\n\t}\r\n\r\n/* Not in dtue.css. Used by NDoc's \"ShowMissing...\" options. */\r\n.missing\r\n\t{\r\n\tcolor: Red;\r\n\tfont-weight: bold;\r\n\t}\r\n"
  },
  {
    "path": "Deployment/WebSamples/Tests/Objects/object_creation.php",
    "content": "[expect] 2141\r\n\r\n[file]\r\n<?\r\n\tclass Class1\r\n\t{\r\n\t\tpublic function __construct()\r\n\t\t{\r\n\t\t\techo 2;\r\n\t\t}\r\n\t\t\r\n\t\tpublic function Class1()\r\n\t\t{\r\n\t\t\techo 3;\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tpublic function Class2()\r\n\t\t{\r\n\t\t\techo 4;\r\n\t\t}\r\n\r\n\t\tpublic function Class1()\r\n\t\t{\r\n\t\t\techo 5;\r\n\t\t}\r\n\t};\r\n\t\t\r\n\techo (new Class1() instanceof Class1);\r\n\techo (new Class2() instanceof Class1);\r\n?>\r\n"
  },
  {
    "path": "Deployment/WebSamples/Tests/Objects/static_fields.php",
    "content": "[expect exact] 1312\r\n\r\n[file]\r\n<?\r\n\tclass Class1\r\n\t{\r\n\t\tpublic static $x = 1;\r\n\t\tprotected static $y = 2;\r\n\t\tprivate static $z = 3;\r\n\t\t\t\t\r\n\t\tpublic static function Foo1()\r\n\t\t{\r\n\t\t\techo self::$z;\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tpublic static $y;\r\n\t\tprivate static $z;\r\n\t};\r\n\t\t\r\n\techo Class2::$x;\r\n\tClass1::Foo1();\r\n\techo Class1::${\"x\"};\r\n\techo Class2::$y;\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/Objects/static_methods.php",
    "content": "[expect exact] 1A2BA2BAC\r\n\r\n[file]\r\n<?\r\n\tinterface IFace\r\n\t{\r\n\t\tstatic function StaticFun();\r\n\t};\r\n\r\n\tclass Class1 implements IFace\r\n\t{\r\n\t\tprotected static function f()\r\n\t\t{\r\n\t\t\techo 'A';\r\n\t\t}\r\n\t\r\n\t\tpublic static function StaticFun()\r\n\t\t{\r\n\t\t\techo 1;\r\n\t\t\tself::f();\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tprotected static function f()\r\n\t\t{\r\n\t\t\techo 'B';\r\n\t\t}\r\n\t\r\n\t\tpublic static function StaticFun()\r\n\t\t{\r\n\t\t\techo 2;\r\n\t\t\tself::f();\r\n\t\t\tparent::f();\r\n\t\t}\r\n\t};\r\n\r\n\tif (true)\r\n\t{\t\r\n\t\tclass Class3 extends Class2\r\n\t\t{\r\n\t\t\tpublic static function f()\r\n\t\t\t{\r\n\t\t\t\techo 'C';\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\t\r\n\tClass1::StaticFun();\r\n\tClass2::StaticFun();\r\n\tClass3::StaticFun();\r\n\tClass3::f();\r\n?>"
  },
  {
    "path": "Deployment/WebSamples/Tests/index.php",
    "content": "<?php\r\n\r\n$default_root = \".\";\r\n$path_to_tests = (isset($_GET['testroot'])) ? $_GET['testroot'] : $default_root;\r\n\r\n?>\r\n\r\n\r\n<html>\r\n<head>\r\n<title>Phalanger Tests Home</title>\r\n<link rel=\"stylesheet\" href=\"MSDN.css\"/>\r\n</head>\r\n<body id=\"bodyID\" class=\"dtBODY\">\r\n\r\n<div id=\"nsbanner\">\r\n  <div id=\"bannerrow1\">\r\n    <table class=\"bannerparthead\" cellspacing=\"0\">\r\n      <tr id=\"hdr\">\r\n         <td class=\"runninghead\">Phalanger Testing</td>\r\n         <td class=\"product\"><?echo $_SERVER['SERVER_NAME']?></td>\r\n      </tr>\r\n    </table>\r\n  </div>\r\n  <div id=\"TitleRow\">\r\n  <h1 class=\"dtH1\">Phalanger Tests Home</h1>\r\n  </div>\r\n</div>\r\n<div id=\"nstext\">\r\n\r\n  <p>Welcome to the <b>Phalanger</b> testing homepage.</p>\r\n  <h4 class=\"dtH4\">Available Test Sets</h4>\r\n  <p>Please set the tests directory:</p>\r\n  <p><form method=\"get\">\r\n  <input type=\"text\" name=\"testroot\" value=\"<?=$path_to_tests?>\" />\r\n  <input type=\"submit\" value=\"Set\" />\r\n  </form></p>\r\n\r\n  <h4 class=\"dtH4\">Available Test Sets</h4>\r\n  <p>\r\n\r\n<?php\r\n\r\nfunction scriptdir($path)\r\n{\r\n  $dh = opendir($path);\r\n  while (($file = readdir($dh)) !== false)\r\n  {\t\r\n\tif (strpos($file, \".php\") !== false) \r\n\t{\r\n\t\treturn true;\r\n\t}\r\n  }\r\n  return false;\r\n}\r\n\r\nfunction readtree($path, &$dirs)\r\n{\r\n  $dh = opendir($path);\r\n  while (($dir = readdir($dh)) !== false)\r\n  {\t\r\n\tif ($dir{0} == '.') continue;\r\n        if (is_file(\"$path/$dir/__skip\")) return;\r\n \t$newpath = \"$path/$dir\";\r\n\tif (!is_dir($newpath)) continue;\r\n \tif (scriptdir($newpath)) $dirs[] = $newpath;\r\n\treadtree($newpath, $dirs);\r\n  }\r\n}\r\n\r\nif (is_dir($path_to_tests))\r\n{\r\n  echo \"The following test directories are available:</p>\";\r\n  echo \"  <ul>\";\r\n  $dirs = array();\r\n  $root_length = strlen($path_to_tests);\r\n  if (($path_to_tests{$root_length-1} != '/') && ($path_to_tests{$root_length-1} != '\\\\'))\r\n    $root_length++;\r\n  readtree($path_to_tests, $dirs);\r\n\r\n  foreach ($dirs as $dir)\r\n  {\t\r\n\tif (!is_dir($dir)) continue;\r\n\tif (($dir == '.') || ($dir == '..')) continue;\r\n \t$Dir = substr($dir, $root_length);\r\n\t$Dir{0} = strtoupper($Dir{0});\r\n\techo \"    <li><a href=\\\"test_includer.php?testdir=$dir\\\">$Dir</a></li>\\n\";\r\n  }\r\n  echo \"  </ul><p>\";\r\n}\r\nelse\r\n{\r\n  echo \"Sorry, the path '<code>$path_to_tests</code>' is invalid.\";\r\n}\r\n?>\r\n  </p>\r\n  <hr>\r\n  <div id=\"footer\"><p><a>The Phalanger Project Team</a></p>\r\n    <p></p>\r\n  </div>\r\n</div>\r\n</body>"
  },
  {
    "path": "Deployment/WebSamples/Tests/test_includer.php",
    "content": "<?\r\n//set_time_limit(10);\r\n//putenv('TEST_PHP_EXECUTABLE=C:\\Program Files\\PHP\\php.exe');\r\n\r\nif (!isset($_GET['testdir'])) die('The testdir GET parameter has to be supported!');\r\n$_path = $_GET['testdir'];\r\n\r\n$_dirname = substr(strrchr($_path, '/'), 1);\r\n$_dirname{0} = strtoupper($_dirname{0});\r\n\r\n$_title = $_dirname;\r\n$_source = isset($_GET['source']) && $_GET['source'] ? 1:0;\r\n$_res = isset($_GET['result']) && $_GET['result'] ? 1:0;\r\n$_xmp = isset($_GET['xmp']) && $_GET['xmp'] ? 1:0;\r\n$_file = $_filename = isset($_GET['file']) ? $_GET['file']:'';\r\n$_index = \"<a href=\\\"index.php\\\">Tests Homepage</a>\";\r\n\r\nif ($_file)\r\n{\r\n  $_name = explode('.', basename($_file));\r\n  $_function = $_name[0];\r\n  $_title .= \" ($_function)\";\r\n  $_file = $_path .'/'. $_file;\r\n}\r\n\r\nfunction _index_href($f, $s, $r, $x)\r\n{\r\n  global $_path;\r\n  $script = $_SERVER['SCRIPT_NAME'];\r\n  return \"$script?testdir=$_path&file=$f&source=$s&result=$r&xmp=$x\";\r\n}\r\n\r\n?>\r\n<html>\r\n<head>\r\n<title>Test: <?=$_title?></title>\r\n<link rel=\"stylesheet\" href=\"MSDN.css\"/>\r\n</head>\r\n<body id=\"bodyID\" class=\"dtBODY\">\r\n\r\n<div id=\"nsbanner\">\r\n  <div id=\"bannerrow1\">\r\n    <table class=\"bannerparthead\" cellspacing=\"0\">\r\n      <tr id=\"hdr\">\r\n         <td class=\"runninghead\">Phalanger Testing</td>\r\n         <td class=\"product\"><?echo $_SERVER['SERVER_NAME']?></td>\r\n      </tr>\r\n    </table>\r\n  </div>\r\n  <div id=\"TitleRow\">\r\n  <h1 class=\"dtH1\"><?=\"$_dirname Functions\"?></h1>\r\n  </div>\r\n</div>\r\n<div id=\"nstext\">\r\n\r\n<p>\r\nUse these links to toggle the display \r\nof <a href=\"<?echo _index_href($_filename, !$_source, $_res, $_xmp)?>\">script source</a>\r\n(<b><?echo $_source?'ON':'OFF'?></b>)\r\n\r\n, <a href=\"<?echo _index_href($_filename, $_source, !$_res, $_xmp)?>\">result</a>\r\n(<b><?echo $_res?'ON':'OFF'?></b>)\r\n\r\nand <a href=\"<?echo _index_href($_filename, $_source, $_res, !$_xmp)?>\">result source</a>\r\n(<b><?echo $_xmp?'ON':'OFF'?></b>).\r\n</p>\r\n<p>\r\nSelect another test group at the <?echo $_index?>.\r\n</p>\r\n\r\n<?\r\n//echo \"<pre>\";var_dump($_GET);echo \"</pre>\";\r\n\r\nfunction _index_showfile($filename, $text, $source, $res, $xmp, $output)\r\n{\r\n  if ($source || $res || $xmp)\r\n    echo \"  <h4 class=\\\"dtH4\\\">Script \\\"\" . basename($filename) . \"\\\"</h4>\\n\";\r\n//    echo \"  <h4 class=\\\"dtH4\\\">Script \\\"<a href=\\\"file://\" . realpath($filename) . \"\\\">\" . basename($filename) . \"</a>\\\"</h4>\\n\";\r\n\r\n  echo $text;\r\n\r\n  if ($source)\r\n  {\r\n    echo \"  <h4 class=\\\"dtH4\\\">Script source</h4><p>\\n\";\r\n    echo \"  <pre class=\\\"code\\\">\\n\";\r\n//    highlight_file($filename); // UNSUPPORTED\r\n    echo htmlspecialchars(file_get_contents($filename));\r\n    echo \"  </pre></p>\\n\";\r\n  }\r\n\r\n  if ($res)\r\n  {\r\n    echo \"  <h4 class=\\\"dtH4\\\">Result</h4><p>\\n\";\r\n    echo $output;\r\n    echo \"  </p>\\n\";\r\n  }\r\n\r\n  if ($xmp)\r\n  {\r\n    echo \"  <h4 class=\\\"dtH4\\\">Result source</h4><p>\\n\";\r\n    echo \"  <pre class=\\\"code\\\">\\n\";\r\n    echo strtr($output, array(\r\n      '<' => '&lt;',\r\n      '>' => '&gt;',\r\n      \"\\r\\n\" => \"<b>\\\\r\\\\n</b>\\r\\n\",\r\n      \"\\n\" => \"<b>\\\\n</b>\\n\",\r\n      \"\\r\" => \"<b>\\\\r</b>\\r\"\r\n    ));\r\n    echo \"  </pre></p>\\n\";\r\n  }\r\n}\r\n\r\nif ($_file)\r\n{\r\n  $man = \"<a href=\\\"http://www.php.net/manual/en/function.$_function.php\\\">$_function</a>\";\r\n  $home = \"<a href=\\\"\"._index_href('', 0, 0, 0).\"\\\">$_dirname Functions</a>\";\r\n  \r\n  $text = \"\";\r\n  if ($_name[1] == 'php')\r\n    $text = \"  <p>The function $man is a part of $home.</p>\\n\";\r\n  else if ($_name[1] == 'phpt')\r\n    $text = \"  <p>The file <b>$_file</b> is an original test script of $home.</p>\\n\";\r\n\r\n\r\n  $output = \"\";\r\n  if ($_res || $_xmp)\r\n  {\r\n    // include the file at global level (not in a function)\r\n\r\n    ob_start();\r\nvar_dump($_file);\r\n    include($_file);\r\n    $output = ob_get_contents();\r\n    ob_end_clean();\r\n/**/\r\n  }\r\n\r\n\r\n  // one file with source and xmp\r\n  _index_showfile($_file, $text, $_source, $_res, $_xmp, $output);\r\n  echo \"  <h4 class=\\\"dtH4\\\">See also</h4>\\n\";\r\n  echo \"  <p>$home, $_index</p>\\n\";\r\n}\r\nelse\r\n{\r\n  // list all files in the directory\r\n  $_dh = opendir($_path);\r\n  $_first = 1;\r\n  $_letter = '';\r\n  $_display = $_source || $_res || $_xmp;\r\n  while (($_scriptfile = readdir($_dh)) !== false) \r\n  {\r\n    if ($_scriptfile{0} == '.') continue;\r\n    if ($_scriptfile == 'index.php') continue;\r\n    if (false === strstr($_scriptfile, '.php')) continue;\r\n    \r\n    // Show the index letter\r\n    if (!$_display)\r\n    {\r\n      if ($_letter != strtoupper($_scriptfile{0}))\r\n      {\r\n        $_letter = strtoupper($_scriptfile{0});\r\n        echo \"  <h4 class=\\\"dtH4\\\">$_letter</h4>\\n\";\r\n      }\r\n    }\r\n    else\r\n    {\r\n      if (!$_first) echo \"  \\n\\n<hr>\\n\\n\";\r\n      $_first = 0;\r\n\t}\r\n    \r\n    $_scriptpath = $_path . '/' . $_scriptfile;\r\n    $output = \"\";\r\n    if ($_res || $_xmp)\r\n    {\r\n      // include the file at global level (not in a function)\r\n      ob_start();\r\n      include $_scriptpath;\r\n      $output = ob_get_contents();\r\n      ob_end_clean();\r\n    }\r\n\r\n\r\n    $text = \"  <p>Open the <a href=\\\"\"._index_href($_scriptfile, 1, 1, 1).\"\\\">$_scriptfile</a> tester.</p>\\n\";\r\n    _index_showfile($_scriptpath, $text, $_source, $_res, $_xmp, $output);\r\n  }\r\n  closedir($_dh);\r\n\r\n//  echo \"  <h4 class=\\\"dtH4\\\">Done</h4>\\n\";\r\n  echo \"  <h4 class=\\\"dtH4\\\">See also</h4>\\n\";\r\n  echo \"  <p>$_index</p>\\n\";\r\n}\r\n\r\n?>\r\n\r\n  <hr>\r\n  <div id=\"footer\"><p><a>The Phalanger Team</a></p>\r\n    <p></p>\r\n  </div>\r\n</div>\r\n</body>"
  },
  {
    "path": "Deployment/WebSamples/Tests/web.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<configuration>\r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n        <defaultDocument>\r\n            <files>\r\n                <add value=\"default.php\" />\r\n                <add value=\"index.php\" />\r\n            </files>\r\n        </defaultDocument>\r\n  </system.webServer>\r\n</configuration>\r\n"
  },
  {
    "path": "Deployment/setpath.bat",
    "content": "@echo Setting environment for using Phalanger tools.\r\n@echo.\r\n@SET PATH=%PATH%;%*\r\n@%comspec%\r\n"
  },
  {
    "path": "Documentation/HowTo/Phalanger manual installation.txt",
    "content": ".NET configuration: (actually done by installer)\r\n\r\n0. Phalanger DLLs must be present in GAC\r\n\tcopy PhpNetCore.dll, PhpNetClassLibrary.dll, PhpNetCoreIL.dll, PhpNetXmlDom.dll and required extensions and wrappers\r\n\tinto %WinDir%\\assemblies\\\r\n\t\r\n1. open directory %WinDir%\\Microsoft.NET\\Framework\\v4.0.30319\\CONFIG\\\r\n   (open %WinDir%\\Microsoft.NET\\Framework64\\v4.0.30319\\CONFIG\\ for 64bit configurations too)\r\n2. edit web.config: (if you are using old IIS6)\r\n\twithin <HttpHandlers> add following line\r\n\t<add path=\"*.php\" verb=\"*\" type=\"PHP.Core.PageFactory, PhpNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" validate=\"false\" />\r\n3. edit machine.config:\r\n\twithin <configuration> add (merge) following ( replace {phalanger path} with your path )\r\n\t<system.codedom>\r\n\t\t<compilers>\r\n\t\t\t<compiler language=\"PHP\" extension=\".php\" type=\"PHP.Core.CodeDom.PhpCodeProvider, PhpNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" compilerOptions=\"\" warningLevel=\"1\"/>\r\n\t\t</compilers>\r\n\t</system.codedom>\r\n\r\n\t<phpNet>\r\n\t\t<paths>\r\n\t\t\t<set name=\"DynamicWrappers\" value=\"{phalanger path}\\Dynamic\"/>\r\n\t\t\t<set name=\"Libraries\" value=\"{phalanger path}\\Bin\"/>\r\n\t\t\t<set name=\"ExtManager\" value=\"{phalanger path}\\Bin\"/>\r\n\t\t\t<set name=\"ExtWrappers\" value=\"{phalanger path}\\Wrappers\"/>\r\n\t\t\t<set name=\"ExtTypeDefs\" value=\"{phalanger path}\\TypeDefs\"/>\r\n\t\t\t<set name=\"ExtNatives\" value=\"{phalanger path}\\Extensions\"/>\r\n\t\t</paths>\r\n\t\t<classLibrary>\r\n\t\t\t<!-- if you want to use .NET objects from mscorlib in PHP; it slows startup a little: --> <add assembly=\"mscorlib\"/>\r\n\t\t\t<!-- if you want to use .NET objects from System in PHP; it slows startup a little: --> <add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"/>\r\n\t\t\t<add assembly=\"PhpNetClassLibrary, Version=2.2.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\" section=\"bcl\"/>\r\n\t\t\t<add assembly=\"PhpNetXmlDom, Version=2.2.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"dom\"/>\r\n\t\t\t<!--<add assembly=\"php_mysql.mng, Version=2.2.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"mysql\" />-->\r\n\t\t</classLibrary>\r\n\t</phpNet>\""
  },
  {
    "path": "Documentation/HowTo/debug PHP website.txt",
    "content": "to debug PHP website using VisualStudio\r\n\r\noption 1 - using Phalanger VS2008 integration\r\n1. just create PHP WebSite, hit F5\r\n\r\noption 2 - Using any VisualStudio without our integration (best for debugging Phalanger internals)\r\n1. open your solution\r\n2. right click, add, Existing Web Site\r\n3. select e.g. Local IIS, and your website (in case of IIS7, 7.5, see \"website in IIS7.txt\")\r\n4. run the website, when asked - allow to modify web.config to enable debugging"
  },
  {
    "path": "Documentation/HowTo/force x86 execution.txt",
    "content": "/target:exe, /target:winform\r\n\r\nYou can force WoW64 mode for scripts compiled by phalanger (or any other AnyCPU assemblies) by using corflags.exe tool.\r\nThe tool is a part of .NET Framework SDK.\r\n\r\nsample usage:\r\n\r\n\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\corflags.exe\" /32BIT+ test.exe\r\n\r\n\r\n\r\n/target:web\r\n\r\nConfigure your IIS AppPool to Enable 32-bit support (IIS Manager -> Application Pools -> select the pool running your website -> Advanced Settings)."
  },
  {
    "path": "Documentation/HowTo/website in IIS7.txt",
    "content": "to run PHP website using Phalanger on IIS (6, 7, 7.5)\r\n\r\nIIS configuration:\r\n\r\n0. IIS, ASP.NET must be installed (Windows Features)\r\n\r\n:: (Integrated Pipeline) (IIS 7)\r\n\r\n1. open IIS console\r\n2. add new application (or map an application to an existing directory)\r\n3. Manage the app, Advanced Settings - Set Default AppPool (or your own, Integrated mode)\r\n4. (if you need native extensions) within the Application Pools (top of the left tree), ensure your pool runs in 32bit\r\n   a. right click on the pool, Advanced Settings\r\n   b. Enable 32-Bit Applications = true\r\n5. in your web.config, add following into <configuration> section\r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"Phalanger\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\"/>\r\n    </handlers>\r\n  </system.webServer>\r\n6. go to your application, open Default Document, add \"index.php\", \"default.php\"\r\n\r\n:: (Classic .NET AppPool) (IIS 6)\r\n\r\n1. open IIS console\r\n2. add new application (or map an application to an existing directory)\r\n3. Manage the app, Advanced Settings - Set Classic .NET AppPool (or your own pool, must not be Integrated mode)\r\n4. (if you need native extensions) within the Application Pools (top of the left tree), ensure your pool (Classic .NET AppPool) runs in 32bit\r\n   a. right click on the pool, Advanced Settings\r\n   b. Enable 32-Bit Applications = true\r\n5. go to your application, open Handler Mappings\r\n   a. Add Script\r\n   b. Request Path = *.php\r\n   c. Executable = C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\r\n   d. Name = (anything)\r\n6. go to your application, open Default Document, add \"index.php\", \"default.php\""
  },
  {
    "path": "Documentation/Logo/Credits.txt",
    "content": "Phalanger logo was created by Jan Benda in 2004."
  },
  {
    "path": "LICENSE.txt",
    "content": "Apache License\r\nVersion 2.0, January 2004\r\nhttp://www.apache.org/licenses/\r\n\r\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n1. Definitions.\r\n\r\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\r\n\r\n\"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.\r\n\r\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\r\n\r\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\r\n\r\n\"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.\r\n\r\n\"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).\r\n\r\n\"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.\r\n\r\n\"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.\"\r\n\r\n\"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.\r\n\r\n2. Grant of Copyright License.\r\n\r\nSubject 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.\r\n\r\n3. Grant of Patent License.\r\n\r\nSubject 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.\r\n\r\n4. Redistribution.\r\n\r\nYou 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:\r\n\r\n1. You must give any other recipients of the Work or Derivative Works a copy of this License; and\r\n\r\n2. You must cause any modified files to carry prominent notices stating that You changed the files; and\r\n\r\n3. 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\r\n\r\n4. 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.\r\n\r\nYou 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.\r\n\r\n5. Submission of Contributions.\r\n\r\nUnless 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.\r\n\r\n6. Trademarks.\r\n\r\nThis 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.\r\n\r\n7. Disclaimer of Warranty.\r\n\r\nUnless 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.\r\n\r\n8. Limitation of Liability.\r\n\r\nIn 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.\r\n\r\n9. Accepting Warranty or Additional Liability.\r\n\r\nWhile 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."
  },
  {
    "path": "README.md",
    "content": "## Phalanger - the PHP language compiler for .NET Framework\n\nIntroducing 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.\n\n## Status\n\nPhalanger is a predecessor of Peachpie compiler (https://github.com/peachpiecompiler/peachpie) - PHP 7.1 compiler for .NET and .NET Core frameworks.\n\n## Visual Studio Integration\n\nPhalanger is integrated into Visual Studio so it gives code colorization, debugging and IntelliSense capabilities.\n - Syntax highlighting\n - Compilation & Debugging\n - Installs Phalanger binaries\n\nDownload on https://visualstudiogallery.msdn.microsoft.com/419916fb-ec89-4f18-ba97-75cf66037797\n"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Albums.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Admin\"\r\n\tCodeFile=\"Albums.aspx.php\" Inherits=\"Admin_Albums_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n\t<div class=\"shim column\"></div>\r\n\r\n\t<div class=\"page\" id=\"admin-albums\">\r\n\r\n\t\t<div id=\"sidebar\">\r\n\t\t\t<h3>Add New Album</h3>\r\n\t\t\t<p>Before uploading your pictures, create an album to organize your pictures.</p>\r\n\t\t\t<asp:FormView ID=\"FormView1\" Runat=\"server\"\r\n\t\t\t\tDataSourceID=\"ObjectDataSource1\" DefaultMode=\"Insert\"\r\n\t\t\t\tBorderWidth=\"0\" CellPadding=\"0\">\r\n\t\t\t\t<InsertItemTemplate>\r\n\t\t\t\t\t<asp:RequiredFieldValidator\tID=\"RequiredFieldValidator1\" Runat=\"server\" ErrorMessage=\"You must choose a\ttitle.\" ControlToValidate=\"TextBox1\" Display=\"Dynamic\" Enabled=\"false\" />\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\tTitle<br />\r\n\t\t\t\t\t\t<asp:TextBox ID=\"TextBox1\" Runat=\"server\" Width=\"200\" Text='<%# Bind(\"Caption\") %>' CssClass=\"textfield\" />\r\n\t\t\t\t\t\t<asp:CheckBox ID=\"CheckBox2\" Runat=\"server\" checked='<%# Bind(\"IsPublic\") %>' text=\"Make this album public\" />\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t<p style=\"text-align:right;\">\r\n\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton1\" Runat=\"server\" CommandName=\"Insert\" skinid=\"add\"/>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</InsertItemTemplate>\r\n\t\t\t</asp:FormView>\r\n\t\t</div>\r\n\r\n\t\t<div id=\"content\">\r\n\t\t\t<h3>Your Albums</h3>\r\n\t\t\t\r\n\t\t\t<p>The following are the albums\tcurrently on your site. Click <b>Edit</b> to modify the pictures in each \r\n\t\t\talbum. Click <b>Delete</b> to permanently remove the album and all of its pictures</p>\r\n\t\t\t\r\n\t\t\t<asp:gridview id=\"GridView1\" runat=\"server\"\r\n\t\t\t\tdatasourceid=\"ObjectDataSource1\" datakeynames=\"AlbumID\" cellpadding=\"6\"\r\n\t\t\t\tautogeneratecolumns=\"False\" BorderStyle=\"None\" BorderWidth=\"0px\" width=\"420px\" showheader=\"false\">\r\n\t\t\t\t<EmptyDataTemplate>\r\n\t\t\t\tYou currently have no albums.\r\n\t\t\t\t</EmptyDataTemplate>\r\n\t\t\t\t<EmptyDataRowStyle CssClass=\"emptydata\"></EmptyDataRowStyle>\r\n\t\t\t\t<columns>\r\n\t\t\t\t\t<asp:TemplateField>\r\n\t\t\t\t\t\t<ItemStyle Width=\"116\" />\r\n\t\t\t\t\t\t<ItemTemplate>\r\n\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td><a href='Photos.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>'>\r\n\t\t\t\t\t\t\t\t\t\t<img src=\"../Handler.ashx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Size=S\" class=\"photo_198\" style=\"border:4px solid white\" alt=\"Sample Photo from Album Number <%# $this->Eval(\"AlbumID\") %>\" /></a></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t</ItemTemplate>\r\n\t\t\t\t\t</asp:TemplateField>\r\n\t\t\t\t\t<asp:TemplateField>\r\n\t\t\t\t\t\t<ItemStyle Width=\"280\" />\r\n\t\t\t\t\t\t<ItemTemplate>\r\n\t\t\t\t\t\t\t<div style=\"padding:8px 0;\">\r\n\t\t\t\t\t\t\t\t<b><%# $this->Server->HtmlEncode($this->Eval(\"Caption\")) %></b><br />\r\n\t\t\t\t\t\t\t\t<%# $this->Eval(\"Count\") %> Photo(s)<asp:Label ID=\"Label1\" Runat=\"server\" Text=\" Public\" Visible='<%# $this->Eval(\"IsPublic\") %>'></asp:Label>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div style=\"width:100%;text-align:right;\">\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton2\" Runat=\"server\" CommandName=\"Edit\" SkinID=\"rename\" />\r\n\t\t\t\t\t\t\t\t<a href='<%# \"Photos.aspx?AlbumID=\" . $this->Eval(\"AlbumID\") %>'><asp:image ID=\"Image1\" runat=\"Server\"  skinid=\"edit\" /></a>\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton3\" Runat=\"server\" CommandName=\"Delete\" SkinID=\"delete\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ItemTemplate>\r\n\t\t\t\t\t\t<EditItemTemplate>\r\n\t\t\t\t\t\t\t<div style=\"padding:8px 0;\">\r\n\t\t\t\t\t\t\t\t<asp:TextBox ID=\"TextBox2\" Runat=\"server\" Width=\"160\" Text='<%# Bind(\"Caption\") %>' CssClass=\"textfield\" />\r\n\t\t\t\t\t\t\t\t<asp:CheckBox ID=\"CheckBox1\" Runat=\"server\" checked='<%# Bind(\"IsPublic\") %>' text=\"Public\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div style=\"width:100%;text-align:right;\">\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton4\" Runat=\"server\" CommandName=\"Update\" SkinID=\"save\" />\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton5\" Runat=\"server\" CommandName=\"Cancel\" SkinID=\"cancel\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</EditItemTemplate>\r\n\t\t\t\t\t</asp:TemplateField>\r\n\t\t\t\t</columns>\r\n\t\t\t</asp:gridview>\r\n\t\t</div>\r\n\r\n\t</div>\r\n\t\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetAlbums\"\r\n\t\tInsertMethod=\"AddAlbum\" \r\n\t\tDeleteMethod=\"RemoveAlbum\" \r\n\t\tUpdateMethod=\"EditAlbum\" >\r\n\t</asp:ObjectDataSource>\r\n\r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Albums.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Admin_Albums_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Details.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Admin\"\r\n    CodeFile=\"Details.aspx.php\" Inherits=\"Admin_Details_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n    <div class=\"shim gradient\"></div>\r\n\r\n\t<div class=\"page\" id=\"admin-details\">\r\n\t\t<asp:formview id=\"FormView1\" runat=\"server\" datasourceid=\"ObjectDataSource1\" cssclass=\"view\"\r\n\t\t\tborderstyle=\"none\" borderwidth=\"0\" CellPadding=\"0\" cellspacing=\"0\" EnableViewState=\"false\">\r\n\t\t\t<itemtemplate>\r\n\t\t\t\t<p><%# $this->Server->HtmlEncode($this->Eval(\"Caption\")) %></p>\r\n\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t<td><img src=\"../Handler.ashx?PhotoID=<%# $this->Eval(\"PhotoID\") %>&Size=L\" class=\"photo_198\" style=\"border:4px solid white\" alt='Photo Number <%# $this->Eval(\"PhotoID\") %>' /></a></td>\r\n\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</table>\r\n\t\t\t\t<p>&nbsp;</p>\r\n\t\t\t</itemtemplate>\r\n\t\t</asp:formview>\r\n\t</div>\r\n\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetPhotos\">\r\n\t\t<SelectParameters>\r\n\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" DefaultValue=\"0\"/>\r\n\t\t</SelectParameters>\r\n\t</asp:ObjectDataSource>\r\n\r\n</asp:content>"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Details.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Admin_Details_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tfunction __construct() {\r\n\t\t\t$this->Load->Add(new EventHandler(array($this, \"Page_Load\")));\r\n\t\t}\r\n\r\n\t\tfunction Page_Load($sender, $e) {\r\n\t\t\t$this->MaintainScrollPositionOnPostBack = true;\r\n\t\t\tif ($this->IsPostBack) return;\r\n\t\t\t\r\n\t\t\t$page = Convert::ToInt32($this->Request->QueryString->get_Item(\"Page\"));\r\n\t\t\tif ($page >= 0) $this->FormView1->PageIndex = $page;\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Photos.aspx",
    "content": "<%@\tPage Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Admin\"\r\n\tCodeFile=\"Photos.aspx.php\" Inherits=\"Admin_Photos_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n\t<div class=\"shim column\"></div>\r\n\t\r\n\t<div class=\"page\" id=\"admin-photos\">\r\n\t\t<div id=\"sidebar\">\r\n\t\t\t<h4>Bulk Upload\tPhotos</h4>\r\n\t\t\t<p>The following files were found in your <b>Upload</b>\tfolder. Click on <b>Import</b>\tto import these\tpictures to your photo album. This operation may take a\tfew moments.</p>\r\n\t\t\t<asp:ImageButton ID=\"ImageButton1\" Runat=\"server\" onclick=\"Button1_Click\" SkinID=\"import\" />\r\n\t\t\t<br />\r\n\t\t\t<br />\r\n\t\t\t<asp:datalist runat=\"server\" id=\"UploadList\" repeatcolumns=\"1\" repeatlayout=\"table\" repeatdirection=\"horizontal\" DataSourceID=\"ObjectDataSource2\">\r\n\t\t\t\t<itemtemplate>\r\n\t\t\t\t\t<%#\t$Container->DataItem %>\r\n\t\t\t\t</itemtemplate>\r\n\t\t\t</asp:datalist>\r\n\t\t</div>\r\n\r\n\t\t<div id=\"content\">\r\n\t\t\t<h4>Add\tPhotos</h4>\r\n\t\t\t<p>To add single photos\tover HTTP, select a file and caption, then click <b>Add</b>.</p>\r\n\t\t\t<asp:FormView ID=\"FormView1\" Runat=\"server\" \r\n\t\t\t\tDataSourceID=\"ObjectDataSource1\" DefaultMode=\"insert\"\r\n\t\t\t\tBorderWidth=\"0px\" CellPadding=\"0\" OnItemInserting=\"FormView1_ItemInserting\">\r\n\t\t\t\t<InsertItemTemplate>\r\n\t\t\t\t\t<asp:RequiredFieldValidator\tID=\"RequiredFieldValidator1\" Runat=\"server\" ErrorMessage=\"You must choose a caption.\" ControlToValidate=\"PhotoFile\" Display=\"Dynamic\" Enabled=\"false\" />\r\n\t\t\t\t\t<p>\r\n\t\t\t\t\t\tPhoto<br />\r\n\t\t\t\t\t\t<asp:FileUpload ID=\"PhotoFile\" Runat=\"server\" Width=\"416\" FileBytes='<%# Bind(\"BytesOriginal\") %>' CssClass=\"textfield\" /><br />\r\n\t\t\t\t\t\tCaption<br />\r\n\t\t\t\t\t\t<asp:TextBox ID=\"PhotoCaption\" Runat=\"server\" Width=\"326\" Text='<%# Bind(\"Caption\") %>' CssClass=\"textfield\" />\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t<p style=\"text-align:right;\">\r\n\t\t\t\t\t\t<asp:ImageButton ID=\"AddNewPhotoButton\" Runat=\"server\" CommandName=\"Insert\" skinid=\"add\"/>\r\n\t\t\t\t\t</p>\r\n\t\t\t\t</InsertItemTemplate>\r\n\t\t\t</asp:FormView>\r\n\t\t\t<hr />\r\n\t\t\t<h4>Photos in This Album</h4>\r\n\t\t\t<p>The following are the photos\tcurrently in this album.</p>\r\n\t\t\t<asp:gridview id=\"GridView1\" runat=\"server\" datasourceid=\"ObjectDataSource1\" \r\n\t\t\t\tdatakeynames=\"PhotoID\" cellpadding=\"6\" EnableViewState=\"false\"\r\n\t\t\t\tautogeneratecolumns=\"False\" BorderStyle=\"None\" BorderWidth=\"0px\" width=\"420px\" showheader=\"false\" >\r\n\t\t\t\t<EmptyDataRowStyle CssClass=\"emptydata\"></EmptyDataRowStyle>\r\n\t\t\t\t<EmptyDataTemplate>\r\n\t\t\t\t\tYou currently have no photos.\r\n\t\t\t\t</EmptyDataTemplate>\r\n\t\t\t\t<columns>\r\n\t\t\t\t\t<asp:TemplateField>\r\n\t\t\t\t\t\t<ItemStyle Width=\"50\" />\r\n\t\t\t\t\t\t<ItemTemplate>\r\n\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td><a href='Details.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Page=<%# $Container->RowIndex %>'>\r\n\t\t\t\t\t\t\t\t\t\t<img src='../Handler.ashx?Size=S&PhotoID=<%# $this->Eval(\"PhotoID\") %>' class=\"photo_198\" style=\"border:2px solid white;width:50px;\" alt='Thumbnail of Photo Number <%# $this->Eval(\"PhotoID\") %>' /></a></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t</ItemTemplate>\r\n\t\t\t\t\t</asp:TemplateField>\r\n\t\t\t\t\t<asp:boundfield headertext=\"Caption\" datafield=\"Caption\" />\r\n\t\t\t\t\t<asp:TemplateField>\r\n\t\t\t\t\t\t<ItemStyle Width=\"150\" />\r\n\t\t\t\t\t\t<ItemTemplate>\r\n\t\t\t\t\t\t\t<div style=\"width:100%;text-align:right;\">\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton2\" Runat=\"server\" CommandName=\"Edit\" SkinID=\"rename\" />\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton3\" Runat=\"server\" CommandName=\"Delete\"  SkinID=\"delete\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ItemTemplate>\r\n\t\t\t\t\t\t<EditItemTemplate>\r\n\t\t\t\t\t\t\t<div style=\"width:100%;text-align:right;\">\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton4\" Runat=\"server\" CommandName=\"Update\" SkinID=\"save\" />\r\n\t\t\t\t\t\t\t\t<asp:ImageButton ID=\"ImageButton5\" Runat=\"server\" CommandName=\"Cancel\"  SkinID=\"cancel\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</EditItemTemplate>\r\n\t\t\t\t\t</asp:TemplateField>\r\n\t\t\t\t</columns>\r\n\t\t\t</asp:gridview>\r\n\t\t</div>\r\n\r\n\t </div>\r\n\t\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetPhotos\"\r\n\t\tInsertMethod=\"AddPhoto\" \r\n\t\tDeleteMethod=\"RemovePhoto\" \r\n\t\tUpdateMethod=\"EditPhoto\" >\r\n\t\t<SelectParameters>\r\n\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" />\r\n\t\t</SelectParameters>\r\n\t\t<InsertParameters>\r\n\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" />\r\n\t\t</InsertParameters>\r\n\t</asp:ObjectDataSource>\r\n\t\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource2\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"ListUploadDirectory\" >\r\n\t</asp:ObjectDataSource>\r\n\t \r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Admin/Photos.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Data:::OleDb;\r\n\timport namespace System:::IO;\r\n\r\n\tpartial class Admin_Photos_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tprotected function FormView1_ItemInserting($sender, $e) {\r\n\t\t\tif ($e->Values->get_Item(\"BytesOriginal\")->Length == 0) $e->Cancel = true;\r\n\t\t}\r\n\r\n\t\tprotected function Button1_Click($sender, $e) {\r\n\t\t\t$d = new System:::IO:::DirectoryInfo($this->Server->MapPath(\"~/Upload\"));\r\n\t\t\t$files = $d->GetFiles(\"*.jpg\");\r\n\t\t\t\r\n\t\t\tfor ($i = 0; $i < $files->Length; $i++) {\r\n\t\t\t\t$f = $files->GetValue($i);\r\n\t\t\t\r\n\t\t\t\t$len = Convert::ToInt32($f->OpenRead()->Length);\r\n\t\t\t\r\n\t\t\t\t$buffer = System:::Array::CreateInstance(Type::GetType(\"System.Byte\"), $len);\r\n\t\t\t\t$f->OpenRead()->Read($buffer, 0, $len);\r\n\t\t\t\tPhotoManager::AddPhoto(Convert::ToInt32($this->Request->QueryString->get_Item(\"AlbumID\")), $f->Name, $buffer);\r\n\t\t\t}\r\n\t\t\t$this->GridView1->DataBind();\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Albums.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Albums\"\r\n    CodeFile=\"Albums.aspx.php\" Inherits=\"Albums_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n    <div class=\"shim gradient\"></div>\r\n\r\n    <div class=\"page\" id=\"albums\">\r\n\r\n        <h3>Welcome to My Photo Galleries</h3>\r\n        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod \r\n        tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis \r\n        nostrud exercitation consequat. esse molestie consequat, vel willum.</p>\r\n        <hr />\r\n        <asp:DataList ID=\"DataList1\" runat=\"Server\"  dataSourceID=\"ObjectDataSource1\" cssclass=\"view\"\r\n            repeatColumns=\"2\" repeatdirection=\"Horizontal\" borderwidth=\"0\" cellpadding=\"0\" cellspacing=\"0\">\r\n            <ItemStyle cssClass=\"item\" />\r\n            <ItemTemplate>\r\n                <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"album-frame\">\r\n                    <tr>\r\n                        <td class=\"topx----\"><asp:image runat=\"Server\" id=\"b01\" skinid=\"b01\" /></td>\r\n                        <td class=\"top-x---\"><asp:image runat=\"Server\" id=\"b02\" skinid=\"b02\" /></td>\r\n                        <td class=\"top--x--\"></td>\r\n                        <td class=\"top---x-\"><asp:image runat=\"Server\" id=\"b03\" skinid=\"b03\" /></td>\r\n                        <td class=\"top----x\"><asp:image runat=\"Server\" id=\"b04\" skinid=\"b04\" /></td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td class=\"mtpx----\"><asp:image runat=\"Server\" id=\"b05\" skinid=\"b05\" /></td>\r\n                        <td colspan=\"3\" rowspan=\"3\"><a href='Photos.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>' ><img src=\"Handler.ashx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Size=M\" class=\"photo_198\" style=\"border:4px solid white\" alt='Sample Photo from Album Number <%# $this->Eval(\"AlbumID\") %>' /></a></td>\r\n                        <td class=\"mtp----x\"><asp:image runat=\"Server\" id=\"b06\" skinid=\"b06\" /></td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td class=\"midx----\"></td>\r\n                        <td class=\"mid----x\"></td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td class=\"mbtx----\"><asp:image runat=\"Server\" id=\"b07\" skinid=\"b07\" /></td>\r\n                        <td class=\"mbt----x\"><asp:image runat=\"Server\" id=\"b08\" skinid=\"b08\" /></td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td class=\"botx----\"><asp:image runat=\"Server\" id=\"b09\" skinid=\"b09\" /></td>\r\n                        <td class=\"bot-x---\"><asp:image runat=\"Server\" id=\"b10\" skinid=\"b10\" /></td>\r\n                        <td class=\"bot--x--\"></td>\r\n                        <td class=\"bot---x-\"><asp:image runat=\"Server\" id=\"b11\" skinid=\"b11\" /></td>\r\n                        <td class=\"bot----x\"><asp:image runat=\"Server\" id=\"b12\" skinid=\"b12\" /></td>\r\n                    </tr>\r\n                </table>\r\n\t\t\t\t<h4><a href=\"Photos.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>\"><%# $this->Server->HtmlEncode($this->Eval(\"Caption\")) %></a></h4>\r\n\t\t\t\t<%# $this->Eval(\"Count\") %> Photo(s)\r\n            </ItemTemplate>\r\n        </asp:DataList>\r\n    \r\n    </div>\r\n\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetAlbums\">\r\n\t</asp:ObjectDataSource>\r\n    \r\n\r\n</asp:content>"
  },
  {
    "path": "Samples/PersonalWebSite/Albums.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Albums_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Code/Album.php",
    "content": "<?\r\n\tclass Album {\r\n\r\n\t\t[Export]\r\n\t\tpublic $AlbumID;\r\n\t\t\r\n\t\t[Export]\r\n\t\tpublic $Count;\r\n\r\n\t\t[Export]\r\n\t\tpublic $Caption;\r\n\r\n\t\t[Export]\r\n\t\tpublic $IsPublic;\r\n\r\n\t\tpublic function __construct($id, $count, $caption, $ispublic) {\r\n\t\t\t$this->AlbumID = $id;\r\n\t\t\t$this->Count = $count;\r\n\t\t\t$this->Caption = $caption;\r\n\t\t\t$this->IsPublic = $ispublic;\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Code/Photo.php",
    "content": "<?\r\n\tclass Photo {\r\n\r\n\t\t[Export]\r\n\t\tpublic $PhotoID;\r\n\t\t\t\r\n\t\t[Export]\r\n\t\tpublic $AlbumID;\r\n\t\t\t\r\n\t\t[Export]\r\n\t\tpublic $Caption;\r\n\r\n\t\tpublic function __construct($id, $albumid, $caption) {\r\n\t\t\t$this->PhotoID = $id;\r\n\t\t\t$this->AlbumID = $albumid;\r\n\t\t\t$this->Caption = $caption;\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Code/PhotoManager.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Collections;\r\n\timport namespace System:::Collections:::Generic;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Data:::SqlClient;\r\n\timport namespace System:::Drawing;\r\n\timport namespace System:::Drawing:::Drawing2D;\r\n\timport namespace System:::Drawing:::Imaging;\r\n\timport namespace System:::IO;\r\n\timport namespace System:::Web;\r\n\r\n\t[Export]\r\n\tclass PhotoManager {\r\n\r\n\t\t// Photo-Related Methods\r\n\r\n\t\tpublic static function GetPhoto($photoid, $size) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"GetPhoto\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@PhotoID\", SqlDbType::i'Int')->Value = $photoid;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Size\", SqlDbType::i'Int')->Value = $size;\r\n\t\t\t\t\t$filter = !(HttpContext::$Current->User->IsInRole(\"Friends\") || HttpContext::$Current->User->IsInRole(\"Administrators\"));\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $filter;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$result = $command->ExecuteScalar();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t\t\r\n\t\t\tif ($result == NULL) return NULL;\r\n\t\t\ttry {\r\n\t\t\t\treturn new MemoryStream($result);\r\n\t\t\t} catch(System:::Exception $e) {\r\n\t\t\t\treturn NULL;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static function GetPhotoPlaceholder($size) {\r\n\t\t\t$path = HttpContext::$Current->Server->MapPath(\"~/Images/\");\r\n\t\t\tswitch ($size) {\r\n\t\t\t\tcase PhotoSize::Small:\r\n\t\t\t\t\t$path .= \"placeholder-100.jpg\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase PhotoSize::Medium:\r\n\t\t\t\t\t$path .= \"placeholder-200.jpg\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase PhotoSize::Large:\r\n\t\t\t\t\t$path .= \"placeholder-600.jpg\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t$path .= \"placeholder-600.jpg\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn new FileStream($path, FileMode::Open, FileAccess::Read, FileShare::Read);\r\n\t\t}\r\n\r\n\t\tpublic static function GetFirstPhoto($albumid, $size) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"GetFirstPhoto\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@AlbumID\", SqlDbType::i'Int')->Value = $albumid;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Size\", SqlDbType::i'Int')->Value = $size;\r\n\t\t\t\t\t$filter = !(HttpContext::$Current->User->IsInRole(\"Friends\") || HttpContext::$Current->User->IsInRole(\"Administrators\"));\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $filter;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$result = $command->ExecuteScalar();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t\t\r\n\t\t\tif ($result == NULL) return NULL;\r\n\t\t\ttry {\r\n\t\t\t\treturn new MemoryStream($result);\r\n\t\t\t} catch(System:::Exception $e) {\r\n\t\t\t\treturn NULL;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static function GetPhotos($AlbumID = NULL) {\r\n\t\t\tif ($AlbumID == NULL)\r\n\t\t\t\t$AlbumID = self::GetRandomAlbumID();\r\n\t\t\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"GetPhotos\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@AlbumID\", SqlDbType::i'Int')->Value = $AlbumID;\r\n\t\t\t\t\t$filter = !(HttpContext::$Current->User->IsInRole(\"Friends\") || HttpContext::$Current->User->IsInRole(\"Administrators\"));\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $filter;\r\n\t\t\t\t\t\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$list = new i'List'<:Photo:>;\r\n\t\t\t\t\t$reader = $command->ExecuteReader(); {\r\n\t\t\t\t\t\twhile ($reader->Read()) {\r\n\t\t\t\t\t\t\t$temp = new Photo(\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"PhotoID\"),\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"AlbumID\"),\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"Caption\"));\r\n\t\t\t\t\t\t\t$list->Add($temp);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$reader->Dispose();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t\treturn $list;\r\n\t\t}\r\n\r\n\t\tpublic static function AddPhoto($AlbumID, $Caption, $BytesOriginal) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"AddPhoto\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@AlbumID\", SqlDbType::i'Int')->Value = $AlbumID;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Caption\", SqlDbType::NVarChar)->Value = $Caption;\r\n\t\t\t\t\t$command->Parameters->Add(\"@BytesOriginal\", SqlDbType::Image)->Value = $BytesOriginal;\r\n\t\t\t\t\t$command->Parameters->Add(\"@BytesFull\", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 600);\r\n\t\t\t\t\t$command->Parameters->Add(\"@BytesPoster\", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 198);\r\n\t\t\t\t\t$command->Parameters->Add(\"@BytesThumb\", SqlDbType::Image)->Value = self::ResizeImageFile($BytesOriginal, 100);\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\tpublic static function RemovePhoto($PhotoID) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"RemovePhoto\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@PhotoID\", SqlDbType::i'Int')->Value = $PhotoID;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\tpublic static function EditPhoto($Caption, $PhotoID) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"EditPhoto\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Caption\", SqlDbType::NVarChar)->Value = $Caption;\r\n\t\t\t\t\t$command->Parameters->Add(\"@PhotoID\", SqlDbType::i'Int')->Value = $PhotoID;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\t// Album-Related Methods\r\n\r\n\t\tpublic static function GetAlbums() {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"GetAlbums\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$filter = !(HttpContext::$Current->User->IsInRole(\"Friends\") || HttpContext::$Current->User->IsInRole(\"Administrators\"));\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $filter;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$list = new i'List'<:Album:>;\r\n\t\t\t\t\t$reader = $command->ExecuteReader(); {\r\n\t\t\t\t\t\twhile ($reader->Read()) {\r\n\t\t\t\t\t\t\t$temp = new Album(\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"AlbumID\"),\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"NumberOfPhotos\"),\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"Caption\"),\r\n\t\t\t\t\t\t\t\t$reader->get_Item(\"IsPublic\"));\r\n\t\t\t\t\t\t\t$list->Add($temp);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$reader->Dispose();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t\treturn $list;\r\n\t\t}\r\n\r\n\t\tpublic static function AddAlbum($Caption, $IsPublic) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"AddAlbum\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Caption\", SqlDbType::NVarChar)->Value = $Caption;\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $IsPublic;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\tpublic static function RemoveAlbum($AlbumID) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"RemoveAlbum\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@AlbumID\", SqlDbType::i'Int')->Value = $AlbumID;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\tpublic static function EditAlbum($Caption, $IsPublic, $AlbumID) {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"EditAlbum\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$command->Parameters->Add(\"@Caption\", SqlDbType::NVarChar)->Value = $Caption;\r\n\t\t\t\t\t$command->Parameters->Add(\"@IsPublic\", SqlDbType::Bit)->Value = $IsPublic;\r\n\t\t\t\t\t$command->Parameters->Add(\"@AlbumID\", SqlDbType::i'Int')->Value = $AlbumID;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$command->ExecuteNonQuery();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t}\r\n\r\n\t\tpublic static function GetRandomAlbumID() {\r\n\t\t\t$connection = new SqlConnection(ConfigurationManager::$ConnectionStrings->get_Item(\"Personal\")->ConnectionString); {\r\n\t\t\t\t$command = new SqlCommand(\"GetNonEmptyAlbums\", $connection); {\r\n\t\t\t\t\t$command->CommandType = CommandType::StoredProcedure;\r\n\t\t\t\t\t$connection->Open();\r\n\t\t\t\t\t$list = new i'List'<:Album:>;\r\n\t\t\t\t\t$reader = $command->ExecuteReader(); {\r\n\t\t\t\t\t\twhile ($reader->Read()) {\r\n\t\t\t\t\t\t\t$temp = new Album(Convert::ToInt32($reader->get_Item(\"AlbumID\")), 0, \"\", false);\r\n\t\t\t\t\t\t\t$list->Add($temp);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$reader->Dispose();\r\n\t\t\t\t}\r\n\t\t\t\t$command->Dispose();\r\n\t\t\t}\r\n\t\t\t$connection->Dispose();\r\n\t\t\ttry {\r\n\t\t\t    $r = new Random;\r\n\t\t\t\treturn $list->get_Item($r->Next($list->Count))->AlbumID;\r\n\t\t\t} catch(System:::Exception $e) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Helper Functions\r\n\r\n\t\tprivate static function ResizeImageFile($imageFile, $targetSize) {\r\n\t\t\t$oldImage = Image::FromStream(new MemoryStream($imageFile)); {\r\n\t\t\t\t$newSize = self::CalculateDimensions($oldImage->Size, $targetSize);\r\n\t\t\t\t$newImage = new Bitmap($newSize->Width, $newSize->Height, PixelFormat::Format24bppRgb); {\r\n\t\t\t\t\t$canvas = Graphics::FromImage($newImage); {\r\n\t\t\t\t\t\t$canvas->SmoothingMode = SmoothingMode::AntiAlias;\r\n\t\t\t\t\t\t$canvas->InterpolationMode = InterpolationMode::HighQualityBicubic;\r\n\t\t\t\t\t\t$canvas->PixelOffsetMode = PixelOffsetMode::HighQuality;\r\n\t\t\t\t\t\t$canvas->DrawImage($oldImage, 0, 0, $newSize->Width, $newSize->Height);\r\n\t\t\t\t\t\t$m = new MemoryStream();\r\n\t\t\t\t\t\t$newImage->Save($m, ImageFormat::$Jpeg);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$canvas->Dispose();\r\n\t\t\t\t}\r\n\t\t\t\t$newImage->Dispose();\r\n\t\t\t}\r\n\t\t\t$oldImage->Dispose();\r\n\t\t\treturn $m->GetBuffer();\r\n\t\t}\r\n\r\n\t\tprivate static function CalculateDimensions($oldSize, $targetSize) {\r\n\t\t\t$newSize = new Size(0, 0);\r\n\t\t\tif ($oldSize->Height > $oldSize->Width) {\r\n\t\t\t\t$newSize->Width = (int)($oldSize->Width * ($targetSize / $oldSize->Height));\r\n\t\t\t\t$newSize->Height = $targetSize;\r\n\t\t\t} else {\r\n\t\t\t\t$newSize->Width = $targetSize;\r\n\t\t\t\t$newSize->Height = (int)($oldSize->Height * ($targetSize / $oldSize->Width));\r\n\t\t\t}\r\n\t\t\treturn $newSize;\r\n\t\t}\r\n\r\n\t\tpublic static function ListUploadDirectory() {\r\n\t\t\t$d = new DirectoryInfo(System:::Web:::HttpContext::$Current->Server->MapPath(\"~/Upload\"));\r\n\t\t\treturn $d->GetFileSystemInfos(\"*.jpg\");\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Code/PhotoSize.php",
    "content": "<?\r\n\tfinal class PhotoSize {\r\n\t\r\n\t\tprivate function __construct() {\r\n\t\t}\r\n\t\t\r\n\t\tconst Small = 1;    // 100px\r\n\t\tconst Medium = 2;   // 198px\r\n\t\tconst Large = 3;    // 600px\r\n\t\tconst Original = 4; // Original Size\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Data/personal-add.sql",
    "content": "CREATE TABLE [Albums] (\r\n\t[AlbumID] [int] IDENTITY (1, 1) NOT NULL ,\r\n\t[Caption] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,\r\n\t[IsPublic] [bit] NOT NULL \r\n) ON [PRIMARY]\r\nGO\r\n\r\nCREATE TABLE [Photos] (\r\n\t[PhotoID] [int] IDENTITY (1, 1) NOT NULL ,\r\n\t[AlbumID] [int] NOT NULL ,\r\n\t[Caption] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,\r\n\t[BytesOriginal] [image] NOT NULL ,\r\n\t[BytesFull] [image] NOT NULL ,\r\n\t[BytesPoster] [image] NOT NULL ,\r\n\t[BytesThumb] [image] NOT NULL \r\n) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r\nGO\r\n\r\nALTER TABLE [Albums]\r\n\tADD CONSTRAINT [PK_Albums] PRIMARY KEY\r\n\t\tCLUSTERED ([AlbumID])ON [PRIMARY]\r\nGO\r\n\r\nALTER TABLE [Photos]\r\n\tADD CONSTRAINT [PK_Photos] PRIMARY KEY\r\n\t\tCLUSTERED ([PhotoID]) ON [PRIMARY]\r\nGO\r\n\r\nALTER TABLE [Photos]\r\n\tADD CONSTRAINT [FK_Photos_Albums] FOREIGN KEY ([AlbumID])\r\n\tREFERENCES [Albums] ([AlbumID])\r\n\t\tON DELETE CASCADE\r\n\t\tON UPDATE CASCADE\r\nGO\r\n\r\n\r\nSET QUOTED_IDENTIFIER ON \r\nGO\r\nSET ANSI_NULLS ON \r\nGO\r\n\r\n\r\nCREATE PROCEDURE AddAlbum\r\n\t@Caption nvarchar(50),\r\n\t@IsPublic bit\r\nAS\r\n\tINSERT INTO [Albums] ([Caption],[IsPublic]) VALUES (@Caption, @IsPublic)\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE AddPhoto\r\n\t\t@AlbumID int,\r\n\t\t@Caption nvarchar(50),\r\n\t\t@BytesOriginal image,\r\n\t\t@BytesFull image,\r\n\t\t@BytesPoster image,\r\n\t\t@BytesThumb image\r\nAS\r\n\tINSERT INTO [Photos] (\r\n\t\t[AlbumID],\r\n\t\t[BytesOriginal],\r\n\t\t[Caption],\r\n\t\t[BytesFull],\r\n\t\t[BytesPoster],\r\n\t\t[BytesThumb] )\r\n\tVALUES (\r\n\t\t@AlbumID,\r\n\t\t@BytesOriginal,\r\n\t\t@Caption,\r\n\t\t@BytesFull,\r\n\t\t@BytesPoster,\r\n\t\t@BytesThumb )\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE EditAlbum\r\n\t@Caption nvarchar(50),\r\n\t@IsPublic bit,\r\n\t@AlbumID int\r\nAS\r\n\tUPDATE [Albums] \r\n\tSET \r\n\t\t[Caption] = @Caption, \r\n\t\t[IsPublic] = @IsPublic \r\n\tWHERE \r\n\t\t[AlbumID] = @AlbumID\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE EditPhoto\r\n\t@Caption nvarchar(50),\r\n\t@PhotoID int\r\nAS\r\n\tUPDATE [Photos]\r\n\tSET [Caption] = @Caption\r\n\tWHERE [PhotoID]\t= @PhotoID\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE GetAlbums\r\n\t@IsPublic bit\r\nAS\r\n\tSELECT \r\n\t\t[Albums].[AlbumID], \r\n\t\t[Albums].[Caption], \r\n\t\t[Albums].[IsPublic], \r\n\t\tCount([Photos].[PhotoID]) AS NumberOfPhotos \r\n\tFROM [Albums] LEFT JOIN [Photos] \r\n\t\tON [Albums].[AlbumID] = [Photos].[AlbumID] \r\n\tWHERE\r\n\t\t([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\n\tGROUP BY \r\n\t\t[Albums].[AlbumID], \r\n\t\t[Albums].[Caption], \r\n\t\t[Albums].[IsPublic]\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE GetFirstPhoto\r\n\t@AlbumID int,\r\n\t@Size int,\r\n\t@IsPublic bit\r\nAS\r\n\tIF @Size = 1\r\n\t\tSELECT 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)\r\n\tELSE IF @Size = 2\r\n\t\tSELECT 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)\r\n\tELSE IF @Size = 3\r\n\t\tSELECT 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)\r\n\tELSE IF @Size = 4\r\n\t\tSELECT 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)\r\n\tELSE\r\n\t\tSELECT 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)\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE GetNonEmptyAlbums\r\nAS\r\n\tSELECT \r\n\t\t[Albums].[AlbumID]\r\n\tFROM [Albums] LEFT JOIN [Photos] \r\n\t\tON [Albums].[AlbumID] = [Photos].[AlbumID] \r\n\tWHERE\r\n\t\t[Albums].[IsPublic] = 1\r\n\tGROUP BY \r\n\t\t[Albums].[AlbumID], \r\n\t\t[Albums].[Caption], \r\n\t\t[Albums].[IsPublic]\r\n\tHAVING\r\n\t\tCount([Photos].[PhotoID]) > 0\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE GetPhoto\r\n\t@PhotoID int,\r\n\t@Size int,\r\n\t@IsPublic bit\r\nAS\r\n\tIF @Size = 1\r\n\t\tSELECT TOP 1 [BytesThumb] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\n\tELSE IF @Size = 2\r\n\t\tSELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\n\tELSE IF @Size = 3\r\n\t\tSELECT TOP 1 [BytesFull] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\n\tELSE IF @Size = 4\r\n\t\tSELECT TOP 1 [BytesOriginal] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\n\tELSE\r\n\t\tSELECT TOP 1 [BytesPoster] FROM [Photos] LEFT JOIN [Albums] ON [Albums].[AlbumID] = [Photos].[AlbumID] WHERE [PhotoID] = @PhotoID AND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE GetPhotos\r\n\t@AlbumID int,\r\n\t@IsPublic bit\r\nAS\r\n\tSELECT *\r\n\tFROM [Photos] LEFT JOIN [Albums]\r\n\t\tON [Albums].[AlbumID] = [Photos].[AlbumID] \r\n\tWHERE [Photos].[AlbumID] = @AlbumID\r\n\t\tAND ([Albums].[IsPublic] = @IsPublic OR [Albums].[IsPublic] = 1)\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE RemoveAlbum\r\n\t@AlbumID int\r\nAS\r\n\tDELETE FROM [Albums] WHERE [AlbumID] = @AlbumID\r\nRETURN\r\nGO\r\n\r\nCREATE PROCEDURE RemovePhoto\r\n\t@PhotoID int\r\nAS\r\n\tDELETE FROM [Photos]\r\n\tWHERE [PhotoID]\t= @PhotoID\r\nRETURN\r\nGO\r\n\r\n\r\nSET QUOTED_IDENTIFIER OFF \r\nGO\r\nSET ANSI_NULLS ON \r\nGO\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Data/personal-remove.sql",
    "content": "if exists (select * from dbo.sysobjects where id = object_id(N'[FK_Photos_Albums]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)\r\nALTER TABLE [Photos] DROP CONSTRAINT FK_Photos_Albums\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[AddAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [AddAlbum]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[AddPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [AddPhoto]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[EditAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [EditAlbum]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[EditPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [EditPhoto]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[GetAlbums]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [GetAlbums]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[GetFirstPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [GetFirstPhoto]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[GetNonEmptyAlbums]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [GetNonEmptyAlbums]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[GetPhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [GetPhoto]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[GetPhotos]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [GetPhotos]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[RemoveAlbum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [RemoveAlbum]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[RemovePhoto]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)\r\ndrop procedure [RemovePhoto]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[Albums]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)\r\ndrop table [Albums]\r\nGO\r\n\r\nif exists (select * from dbo.sysobjects where id = object_id(N'[Photos]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)\r\ndrop table [Photos]\r\nGO"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/Black/Default.css",
    "content": "﻿/* 0 BASIC TAGS */\r\n\r\ntable {\r\n\tfont-size: 1em;\r\n}\r\n\r\nh1, h2, h3, h4 {\r\n\tmargin: 0;\r\n\tfont-family: Tahoma, Arial, Helvetica, sans-serif;\r\n}\r\n\r\np {\r\n\tline-height: 1.4em;\r\n}\r\n\r\nhr {\r\n\tborder: 0;\r\n\tborder-top: 1px solid #505050;\r\n\theight: 1px;\r\n}\r\n\r\na {\r\n\ttext-decoration: none;\r\n\tcolor: #DBB94F;\r\n}\r\n\r\na:visited {\r\n\tcolor: #C19B28;\r\n}\r\n\r\na:hover {\r\n\ttext-decoration: underline;\r\n\tcolor: #E6CD84;\r\n}\r\n\r\na:active {\r\n\tcolor: #C19B28;\r\n}\r\n\r\nbody {\r\n\tbackground-color: #656565;\r\n\tbackground-image: url(Images/background.gif);\r\n\tbackground-repeat: repeat;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\ttext-align: center;\r\n\tfont-family: Verdana, Arial, Helvetica, sans-serif;\r\n\tfont-size: 0.7em;\r\n\tcolor: #FFFFFF;\r\n}\r\n\r\nimg {\r\n\tborder-width: 0;\r\n}\r\n\r\n/* 1 HEADER */\r\n\r\n.header {\r\n\tbackground-image: url(Images/header.gif);\r\n\tbackground-repeat: no-repeat;\r\n\tposition: relative;\r\n\twidth: 789px;\r\n\theight: 76px;\r\n\tmargin: 0 auto 5px auto;\r\n}\r\n\r\n\r\nh1 {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 12px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 18px;\r\n}\r\n\r\nh2 {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 45px;\r\n\tfont-size: 11px;\r\n}\r\n\r\n.menua {\r\n\tposition: absolute;\r\n\tright: 37px;\r\n\ttop: 13px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.nav {\r\n\tposition: absolute;\r\n\tright: 37px;\r\n\ttop: 51px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.menua a:visited, .nav a:visited {\r\n\tcolor: #DBB94F;\r\n}\r\n\r\n/* 1.1 SHIM */\r\n\r\n.shim {\r\n\tdisplay: none;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* 2 PAGE */\r\n\r\n.page {\r\n\tbackground-repeat: repeat-y;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\ttext-align: left;\r\n}\r\n\r\nh3 {\r\n\tmargin-top: 1.0em;\r\n\tmargin-bottom: 1.12em;\r\n\tfont-size: 1.5em;\r\n\tfont-weight: bold;\r\n}\r\nh4 {\r\n\tmargin-top: 1.0em;\r\n\tmargin-bottom: 1.12em;\r\n\tfont-size: 1.3em;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 2.1 ALL PAGES */\r\n\r\n#home, #resume, #links, #albums, #photos, #details, #register, #admin-albums, #admin-photos, #admin-details {\r\n\t\r\n\tposition: relative;\r\n\twidth: 686px;\r\n\tpadding: 0px 37px;\r\n\tpadding-top: 1px; /* Weird Mozilla Bug */\r\n\tpadding-bottom: 40px; /* Weird Mozilla Bug */\r\n}\r\n\r\n#sidebar {\r\n\tfloat: left;\r\n\twidth: 214px;\r\n\theight: 100%;\r\n}\r\n\r\n#content {\r\n\tmargin-left: 256px;\r\n}\r\n\r\n#whatsnew {\r\n\tfloat: left;\r\n\twidth: 200px;\r\n\theight: 100%;\r\n}\r\n\r\n#coollinks {\r\n\tmargin-left: 220px;\r\n}\r\n\r\n#resume h4, #links h4 {\r\n\tmargin-top: 0;\r\n\tborder-top: 1px solid #505050;\r\n\tpadding-top: 1.0em;\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\twidth: 214px;\r\n}\r\n\r\n#resume #photo {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 20px;\r\n\twidth: 214px;\r\n}\r\n\r\n#resume .first {\r\n\tmargin-top: 0;\r\n\tborder-top: 1px solid #505050;\r\n\tpadding-top: 1.5em;\r\n}\r\n\r\ndl {\r\n\tmargin-top: 0;\r\n\tmargin-bottom: 0;\r\n\tborder-top: 1px solid #505050;\r\n\tpadding-top: 1.5em;\r\n\tpadding-bottom: 1.5em;\r\n\tposition: relative;\r\n}\r\n\r\ndt {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n}\r\n\r\ndd {\r\n\tmargin-left: 150px;\r\n\theight: 2.0em;\r\n}\r\n\r\n.emptydata td {\r\n\tpadding: 50px;\r\n\tcolor: #aeaeae;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n.view {\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\twidth: 686px;\r\n\ttext-align: center;\r\n}\r\n\r\n.view .photo-frame {\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n}\r\n\r\n.item {\r\n\tpadding: 20px 50px;\r\n\tcolor: #B2B2B2;\r\n}\r\n\r\n.item h4 {\r\n\tmargin-bottom: 0.4em;\r\n}\r\n\r\n.nullpanel {\r\n\tpadding: 150px;\r\n\twidth: auto;\r\n\ttext-align: center;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n.buttonbar, .buttonbar-top {\r\n\twidth: 686px;\r\n\theight: 36px;\r\n\tbackground-image: url(Images/photonav.gif);\r\n\tbackground-repeat: no-repeat;\r\n\tmargin-bottom: 5px;\r\n\ttext-align: center;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* 3 FOOTER */\r\n\r\n.footerbg {\r\n\twidth: auto;\r\n\theight: 50px;\r\n\ttext-align: center;\r\n}\r\n\r\n.footer {\r\n\tbackground-image: url(images/footer.gif);\r\n\tbackground-repeat: no-repeat;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\tpadding-bottom: 20px;\r\n\twidth: 770px;\r\n\theight: 50px;\r\n\ttext-align: center;\r\n\tfont-size: 10px;\r\n\tcolor: #ffffff;\r\n}\r\n\r\n.menub {\r\n\tmargin: 8px auto 2px auto;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.menub a:visited {\r\n\tcolor: #DBB94F;\r\n}\r\n\r\n\r\n\r\n/* Inline styles are used because image controls hard code a border property */\r\n\r\n.photo_198 {\r\n\tborder: 4px solid #FFFFFF;\r\n}\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/Black/Default.skin",
    "content": "<asp:imagebutton runat=\"server\" Imageurl=\"Images/button-login.gif\" skinid=\"login\" />\r\n\r\n<asp:image runat=\"server\" Imageurl=\"Images/button-create.gif\" skinid=\"create\" />\r\n<asp:image runat=\"server\" ImageUrl=\"Images/button-download.gif\" skinid=\"download\"/>\r\n<asp:image runat=\"Server\" ImageUrl=\"images/button-dwn_res.gif\" skinid=\"dwn_res\" />\r\n\r\n<asp:image runat=\"Server\" ImageUrl=\"images/button-gallery.jpg\" skinid=\"gallery\" />\r\n<asp:imagebutton runat=\"server\" imageurl=\"Images/button-tog8.jpg\" skinid=\"tog8\"/>\r\n<asp:imagebutton runat=\"server\" imageurl=\"Images/button-tog24.jpg\" skinid=\"tog24\"/>\r\n\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"Images/button-first.jpg\" skinid=\"first\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"images/button-prev.jpg\" skinid=\"prev\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"images/button-next.jpg\" skinid=\"next\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"Images/button-last.jpg\" skinid=\"last\"/>\r\n\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l1.gif\" skinid=\"b01\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mtl.gif\" skinid=\"b02\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mtr.gif\" skinid=\"b03\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r1.gif\" skinid=\"b04\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l2.gif\" skinid=\"b05\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r2.gif\" skinid=\"b06\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l3.gif\" skinid=\"b07\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r3.gif\" skinid=\"b08\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l4.gif\" skinid=\"b09\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mbl.gif\" skinid=\"b10\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mbr.gif\" skinid=\"b11\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r4.gif\" skinid=\"b12\" />\r\n\r\n\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"images/button-add.gif\" skinid=\"add\"/>\r\n\r\n<asp:gridview runat=\"server\" backcolor=\"#606060\">\r\n    <AlternatingRowStyle backcolor=\"#656565\" />\r\n</asp:gridview>\r\n<asp:image runat=\"Server\" ImageUrl=\"Images/button-edit.gif\" skinid=\"edit\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-rename.gif\" SkinID=\"rename\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-delete.gif\" SkinID=\"delete\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-save.gif\" SkinID=\"save\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-cancel.gif\" SkinID=\"cancel\" />\r\n\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-import.gif\" SkinID=\"import\" />"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/Black/frame.css",
    "content": "﻿/* Photo Border for All Pages Except the Albums Page */\r\n\r\n.photo-frame .topx-- {\r\n\tbackground-image: url(Images/frame-topx--.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: auto;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n.photo-frame .top-x- {\r\n\tbackground-image: url(Images/frame-top-x-.gif);\r\n\tbackground-repeat: repeat-x;\r\n\twidth: auto;\r\n\theight: 4px;\r\n}\r\n.photo-frame .top--x {\r\n\tbackground-image: url(Images/frame-top--x.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: auto;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n\r\n.photo-frame .midx-- {\r\n\tbackground-image: url(Images/frame-midx--.gif);\r\n\tbackground-repeat: repeat-y;\r\n\twidth: 4px;\r\n\theight: 100%;\r\n}\r\n.photo-frame .mid--x {\r\n\tbackground-image: url(Images/frame-mid--x.gif);\r\n\tbackground-repeat: repeat-y;\r\n\twidth: 4px;\r\n\theight: 100%;\r\n}\r\n\r\n.photo-frame .botx-- {\r\n\tbackground-image: url(Images/frame-botx--.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: 4px;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n.photo-frame .bot-x- {\r\n\tbackground-image: url(Images/frame-bot-x-.gif);\r\n\tbackground-repeat: repeat-x;\r\n\twidth: auto;\r\n\theight: 4px;\r\n}\r\n.photo-frame .bot--x {\r\n\tbackground-image: url(Images/frame-bot--x.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: 4px;\r\n\theight: 4px;\r\n\tvertical-align: bottom;\r\n}\r\n\r\n/* Photo Border for the Album Page */\r\n\r\n.album-frame .topx----,\r\n.album-frame .top----x,\r\n.album-frame .botx----,\r\n.album-frame .bot----x {\r\n\theight: 14px;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .top-x--- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: left;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .top--x-- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .top---x- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: right;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n\r\n.album-frame .mtpx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: top;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mtp----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: top;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .midx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mid----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .mbtx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: bottom;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mbt----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: bottom;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .bot-x--- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: right;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .bot--x-- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .bot---x- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: left;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n\r\n/* Form Items */\r\n\r\n.textfield {\r\n\tborder: 1px solid #000000;\r\n\tvertical-align: middle;\r\n\tpadding: 3px;\r\n\tmargin: 2px 0 5px 0;\r\n}\r\n\r\n/* Login View */\r\n\r\n.login .label {\r\n    display:block;\r\n}\r\n\r\n.login .textbox {\r\n\tborder: 1px solid #000000;\r\n\twidth: 140px;\r\n\tvertical-align: middle;\r\n\tpadding: 3px;\r\n\tmargin: 2px 0 5px 0;\r\n}\r\n\r\n.login .button {\r\n    display:block;\r\n    margin-top:8px;\r\n    margin-bottom:8px;\r\n}\r\n\r\n\r\n/* LIST */\r\n\r\nul {\r\n\tlist-style-type: none;\r\n\tlist-style-image:  url(images/bullet-2.gif);\r\n\tlist-style-position: outside;\r\n\tline-height: 2.1em;\r\n\tvertical-align: middle;\r\n\tmargin-left: 1.25em;\r\n}\r\n\r\n.list_link{\r\n\tlist-style-image:  url(images/bullet-1.gif);\r\n}\r\n\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/White/Default.css",
    "content": "﻿/* 0 BASIC TAGS */\r\n\r\ntable {\r\n\tfont-size: 1em;\r\n}\r\n\r\nh1, h2, h3, h4 {\r\n\tmargin: 0;\r\n\tfont-family: tahoma, arial, helvetica, sans-serif;\r\n}\r\n\r\np {\r\n\tline-height: 1.4em;\r\n}\r\n\r\nhr {\r\n\tborder: 0;\r\n\tborder-top: 1px solid #bababa;\r\n\theight: 1px;\r\n}\r\n\r\na {\r\n\ttext-decoration: none;\r\n\tcolor: #d32525;\r\n}\r\n\r\na:visited {\r\n\tcolor: #980000;\r\n}\r\n\r\na:hover {\r\n\ttext-decoration: underline;\r\n\tcolor: #e05252;\r\n}\r\n\r\na:active {\r\n\tcolor: #980000;\r\n}\r\n\r\nbody {\r\n\tbackground-color: #ffffff;\r\n\tbackground-image: url(images/background.gif);\r\n\tbackground-repeat: repeat-x;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\ttext-align: center;\r\n\tfont-family: verdana, arial, helvetica, sans-serif;\r\n\tfont-size: 0.7em;\r\n\tcolor: #666666;\r\n}\r\n\r\nimg {\r\n\tborder-width: 0;\r\n}\r\n\r\n/* 1 HEADER */\r\n\r\n.header {\r\n\tbackground-image: url(Images/header.gif);\r\n\tbackground-repeat: no-repeat;\r\n\tposition: relative;\r\n\twidth: 760px;\r\n\theight: 81px;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n}\r\n\r\nh1 {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 12px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 18px;\r\n}\r\n\r\nh2 {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 60px;\r\n\tfont-size: 11px;\r\n}\r\n\r\n.menua {\r\n\tposition: absolute;\r\n\tright: 37px;\r\n\ttop: 17px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.nav {\r\n\tposition: absolute;\r\n\tright: 37px;\r\n\ttop: 60px;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.menua a:visited, .nav a:visited {\r\n\tcolor: #d32525;\r\n}\r\n\r\n/* 1.1 SHIM */\r\n\r\n.shim {\r\n\tbackground-repeat: no-repeat;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\twidth: 760px;\r\n\theight: 8px;\r\n\tfont-size: 0;\r\n}\r\n\r\n.column {\r\n\tbackground-image: url(images/content-shim.gif);\r\n}\r\n\r\n.gradient {\r\n\tbackground-image: url(images/content-shim-photo.gif);\r\n}\r\n\r\n.solid {\r\n\tbackground-image: url(images/content-shim-none.gif);\r\n}\r\n\r\n/* 2 PAGE */\r\n\r\n.page {\r\n\tbackground-repeat: repeat-y;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\ttext-align: left;\r\n}\r\n\r\nh3 {\r\n\tmargin-top: 1.0em;\r\n\tmargin-bottom: 1.12em;\r\n\tfont-size: 1.5em;\r\n\tfont-weight: bold;\r\n}\r\nh4 {\r\n\tmargin-top: 1.0em;\r\n\tmargin-bottom: 1.12em;\r\n\tfont-size: 1.3em;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 2.1 HOME, RESUME, LINKS, REGISTER, ADMIN/ALBUMS, ADMIN/PHOTOS PAGES */\r\n\r\n#home, #resume, #links, #register, #admin-albums, #admin-photos {\r\n\tbackground-image: url(images/body-repeat.gif);\r\n\tposition: relative;\r\n\twidth: 686px;\r\n\tpadding: 0px 37px;\r\n\tpadding-top: 1px; /* Weird Mozilla Bug */\r\n\tpadding-bottom: 40px; /* Weird Mozilla Bug */\r\n}\r\n\r\n#sidebar {\r\n\tfloat: left;\r\n\twidth: 214px;\r\n\theight: 100%;\r\n}\r\n\r\n#content {\r\n\tmargin-left: 256px;\r\n}\r\n\r\n#whatsnew {\r\n\tfloat: left;\r\n\twidth: 200px;\r\n\theight: 100%;\r\n}\r\n\r\n#coollinks {\r\n\tmargin-left: 220px;\r\n}\r\n\r\n#resume h4, #links h4 {\r\n\tmargin-top: 0;\r\n\tborder-top: 1px solid #bababa;\r\n\tpadding-top: 1.0em;\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\twidth: 214px;\r\n}\r\n\r\n#resume #photo {\r\n\tposition: absolute;\r\n\tleft: 37px;\r\n\ttop: 20px;\r\n\twidth: 214px;\r\n}\r\n\r\n#resume .first {\r\n\tmargin-top: 0;\r\n\tborder-top: 1px solid #bababa;\r\n\tpadding-top: 1.5em;\r\n}\r\n\r\ndl {\r\n\tmargin-top: 0;\r\n\tmargin-bottom: 0;\r\n\tborder-top: 1px solid #bababa;\r\n\tpadding-top: 1.5em;\r\n\tpadding-bottom: 1.5em;\r\n\tposition: relative;\r\n}\r\n\r\ndt {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n}\r\n\r\ndd {\r\n\tmargin-left: 150px;\r\n\theight: 2.0em;\r\n}\r\n\r\n.emptydata td {\r\n\tpadding: 50px;\r\n\tcolor: #aeaeae;\r\n}\r\n\r\n/* 2.2 ALBUMS PAGE */\r\n\r\n#albums {\r\n\tbackground-image: url(images/body-repeat-photo.gif);\r\n\tpadding: 0px 37px;\r\n\tpadding-bottom: 40px;\r\n\twidth: 686px;\r\n}\r\n\r\n.view {\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\twidth: 686px;\r\n\ttext-align: center;\r\n}\r\n\r\n.view .photo-frame {\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n}\r\n\r\n.item {\r\n\tpadding: 20px 50px;\r\n\tcolor: #B2B2B2;\r\n}\r\n\r\n.item h4 {\r\n\tmargin-bottom: 0.4em;\r\n}\r\n\r\n.nullpanel {\r\n\tpadding: 150px;\r\n\twidth: auto;\r\n\ttext-align: center;\r\n}\r\n\r\n/* 2.3 PHOTOS, DETAILS, ADMIN/DETAILS PAGE */\r\n\r\n#photos, #details, #admin-details {\r\n\tbackground-image: url(images/body-repeat-photo.gif);\r\n\tpadding: 0;\r\n\twidth: 760px;\r\n}\r\n\r\n.buttonbar {\r\n\tbackground-image: url(images/photonav-bg.gif);\r\n\tbackground-repeat: repeat-x;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\tpadding-top: 4px;\r\n\twidth: 744px;\r\n\theight: 33px;\r\n\ttext-align: center;\r\n}\r\n\r\n.buttonbar-top {\r\n\tbackground-image: url(images/photonav-top-bg.gif);\r\n}\r\n\r\n#photos .view, #admin-details .view {\r\n\tmargin-top: 20px;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n/* 3 FOOTER */\r\n\r\n.footerbg {\r\n\tbackground-image: url(images/footer-side.gif);\r\n\tbackground-repeat: repeat-x;\r\n\twidth: auto;\r\n\theight: 75px;\r\n\ttext-align: center;\r\n}\r\n.footer {\r\n\tbackground-image: url(images/footer.gif);\r\n\tbackground-repeat: no-repeat;\r\n\tmargin-left: auto;\r\n\tmargin-right: auto;\r\n\twidth: 760px;\r\n\theight: 75px;\r\n\ttext-align: center;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.menub {\r\n\tmargin: 12px auto 5px auto;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 10px;\r\n}\r\n\r\n.menub a:visited {\r\n\tcolor: #d32525;\r\n}\r\n\r\n\r\n\r\n/* Inline styles are used because image controls hard code a border property */\r\n\r\n.photo_198 {\r\n\tborder: 4px solid #FFFFFF;\r\n}\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/White/Default.skin",
    "content": "<asp:imagebutton runat=\"server\" Imageurl=\"Images/button-login.gif\" skinid=\"login\" />\r\n\r\n<asp:image runat=\"server\" Imageurl=\"Images/button-create.gif\" skinid=\"create\" />\r\n<asp:image runat=\"server\" ImageUrl=\"Images/button-download.gif\" skinid=\"download\"/>\r\n<asp:image runat=\"Server\" ImageUrl=\"images/button-dwn_res.gif\" skinid=\"dwn_res\" />\r\n\r\n<asp:image runat=\"Server\" ImageUrl=\"images/button-gallery.gif\" skinid=\"gallery\" />\r\n<asp:imagebutton runat=\"server\" imageurl=\"Images/button-tog8.gif\" skinid=\"tog8\"/>\r\n<asp:imagebutton runat=\"server\" imageurl=\"Images/button-tog24.gif\" skinid=\"tog24\"/>\r\n\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"Images/button-first.gif\" skinid=\"first\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"images/button-prev.gif\" skinid=\"prev\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"images/button-next.gif\" skinid=\"next\"/>\r\n<asp:ImageButton runat=\"server\" ImageUrl=\"Images/button-last.gif\" skinid=\"last\"/>\r\n\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l1.gif\" skinid=\"b01\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mtl.gif\" skinid=\"b02\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mtr.gif\" skinid=\"b03\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r1.gif\" skinid=\"b04\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l2.gif\" skinid=\"b05\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r2.gif\" skinid=\"b06\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l3.gif\" skinid=\"b07\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r3.gif\" skinid=\"b08\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-l4.gif\" skinid=\"b09\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mbl.gif\" skinid=\"b10\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-mbr.gif\" skinid=\"b11\" />\r\n<asp:image runat=\"Server\" ImageUrl=\"images/album-r4.gif\" skinid=\"b12\" />\r\n\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"images/button-add.gif\" skinid=\"add\"/>\r\n\r\n<asp:gridview runat=\"server\" backcolor=\"#ececec\">\r\n    <AlternatingRowStyle backcolor=\"white\" />\r\n</asp:gridview>\r\n<asp:image runat=\"Server\" ImageUrl=\"Images/button-edit.gif\" skinid=\"edit\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-rename.gif\" SkinID=\"rename\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-delete.gif\" SkinID=\"delete\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-save.gif\" SkinID=\"save\" />\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-cancel.gif\" SkinID=\"cancel\" />\r\n\r\n<asp:ImageButton Runat=\"server\" ImageUrl=\"Images/button-import.gif\" SkinID=\"import\" />"
  },
  {
    "path": "Samples/PersonalWebSite/App_Themes/White/Frame.css",
    "content": "﻿/* Photo Border for All Pages Except the Albums Page */\r\n\r\n.photo-frame .topx-- {\r\n\tbackground-image: url(Images/frame-topx--.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: auto;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n.photo-frame .top-x- {\r\n\tbackground-image: url(Images/frame-top-x-.gif);\r\n\tbackground-repeat: repeat-x;\r\n\twidth: auto;\r\n\theight: 4px;\r\n}\r\n.photo-frame .top--x {\r\n\tbackground-image: url(Images/frame-top--x.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: auto;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n\r\n.photo-frame .midx-- {\r\n\tbackground-image: url(Images/frame-midx--.gif);\r\n\tbackground-repeat: repeat-y;\r\n\twidth: 4px;\r\n\theight: auto;\r\n}\r\n.photo-frame .mid--x {\r\n\tbackground-image: url(Images/frame-mid--x.gif);\r\n\tbackground-repeat: repeat-y;\r\n\twidth: 4px;\r\n\theight: auto;\r\n}\r\n\r\n.photo-frame .botx-- {\r\n\tbackground-image: url(Images/frame-botx--.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: 4px;\r\n\theight: 4px;\r\n\tvertical-align: top;\r\n}\r\n.photo-frame .bot-x- {\r\n\tbackground-image: url(Images/frame-bot-x-.gif);\r\n\tbackground-repeat: repeat-x;\r\n\twidth: auto;\r\n\theight: 4px;\r\n}\r\n.photo-frame .bot--x {\r\n\tbackground-image: url(Images/frame-bot--x.gif);\r\n\tbackground-repeat: no-repeat;\r\n\twidth: 4px;\r\n\theight: 4px;\r\n\tvertical-align: bottom;\r\n}\r\n\r\n/* Photo Border for the Album Page */\r\n\r\n.album-frame .topx----,\r\n.album-frame .top----x,\r\n.album-frame .botx----,\r\n.album-frame .bot----x {\r\n\theight: 14px;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .top-x--- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: left;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .top--x-- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .top---x- {\r\n\tbackground-image: url(images/album-tstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: right;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n\r\n.album-frame .mtpx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: top;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mtp----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: top;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .midx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mid----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .mbtx---- {\r\n\tbackground-image: url(images/album-lstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: bottom;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n.album-frame .mbt----x {\r\n\tbackground-image: url(images/album-rstretch.gif);\r\n\tbackground-repeat: repeat-y;\r\n\tvertical-align: bottom;\r\n\theight: auto;\r\n\twidth: 14px;\r\n}\r\n\r\n.album-frame .bot-x--- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: right;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .bot--x-- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n.album-frame .bot---x- {\r\n\tbackground-image: url(images/album-bstretch.gif);\r\n\tbackground-repeat: repeat-x;\r\n\ttext-align: left;\r\n\theight: 14px;\r\n\twidth: auto;\r\n}\r\n\r\n/* Form Items */\r\n\r\n.textfield {\r\n\tborder: 1px solid #929292;\r\n\tvertical-align: middle;\r\n\tpadding: 3px;\r\n\tmargin: 2px 0 5px 0;\r\n}\r\n\r\n/* Login View */\r\n\r\n.login .label {\r\n\tdisplay:block;\r\n}\r\n\r\n.login .textbox {\r\n\tborder: 1px solid #929292;\r\n\twidth: 140px;\r\n\tvertical-align: middle;\r\n\tpadding: 3px;\r\n\tmargin: 2px 0 5px 0;\r\n}\r\n\r\n.login .button {\r\n\tdisplay:block;\r\n\tmargin-top:8px;\r\n\tmargin-bottom:8px;\r\n}\r\n\r\n/* LIST */\r\n\r\nul {\r\n\tlist-style-type: none;\r\n\tlist-style-image: url(images/bullet-2.gif);\r\n\tlist-style-position: outside;\r\n\tline-height: 2.1em;\r\n\tvertical-align: middle;\r\n\tmargin-left: 1.25em;\r\n}\r\n.link {\r\n\tlist-style-image: url(images/bullet-1.gif);\r\n}\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Default.aspx",
    "content": "<%@\tPage Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Home\"\r\n\tCodeFile=\"Default.aspx.php\" Inherits=\"Default_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n\t<div class=\"shim column\"></div>\r\n\t\r\n\t<div class=\"page\" id=\"home\">\r\n\t\t<div id=\"sidebar\">\r\n\t\t\t<asp:loginview id=\"LoginArea\" runat=\"server\">\r\n\t\t\t\t<AnonymousTemplate>\r\n\t\t\t\t\t<asp:login id=\"Login1\" runat=\"server\">\r\n\t\t\t\t\t\t<layouttemplate>\r\n\t\t\t\t\t\t\t<div class=\"login\">\r\n\t\t\t\t\t\t\t\t<h4>Login to Site</h4>\r\n\t\t\t\t\t\t\t\t<asp:label runat=\"server\" id=\"UserNameLabel\" CssClass=\"label\" associatedcontrolid=\"UserName\">User Name</asp:label>\r\n\t\t\t\t\t\t\t\t<asp:textbox runat=\"server\"\tid=\"UserName\" cssclass=\"textbox\" accesskey=\"u\" />\r\n\t\t\t\t\t\t\t\t<asp:requiredfieldvalidator\trunat=\"server\" id=\"UserNameRequired\" controltovalidate=\"UserName\" validationgroup=\"Login1\" errormessage=\"User Name is required.\" tooltip=\"User Name\tis required.\" >*</asp:requiredfieldvalidator>\r\n\t\t\t\t\t\t\t\t<asp:label runat=\"server\" id=\"PasswordLabel\" CssClass=\"label\" associatedcontrolid=\"Password\">Password</asp:label>\r\n\t\t\t\t\t\t\t\t<asp:textbox runat=\"server\"\tid=\"Password\" textmode=\"Password\" cssclass=\"textbox\" accesskey=\"p\" />\r\n\t\t\t\t\t\t\t\t<asp:requiredfieldvalidator\trunat=\"server\" id=\"PasswordRequired\" controltovalidate=\"Password\" validationgroup=\"Login1\" tooltip=\"Password is\trequired.\" >*</asp:requiredfieldvalidator>\r\n\t\t\t\t\t\t\t\t<div><asp:checkbox runat=\"server\" id=\"RememberMe\" text=\"Remember me\tnext time\"/></div>\r\n\t\t\t\t\t\t\t\t<asp:imagebutton runat=\"server\"\tid=\"LoginButton\" CommandName=\"Login\" AlternateText=\"login\" skinid=\"login\" CssClass=\"button\"/>\r\n\t\t\t\t\t\t\t\tor\r\n\t\t\t\t\t\t\t\t<a href=\"register.aspx\"\tclass=\"button\"><asp:image id=\"Image1\" runat=\"server\"  AlternateText=\"create\ta new account\" skinid=\"create\"/></a>\r\n\t\t\t\t\t\t\t\t<p><asp:literal\trunat=\"server\" id=\"FailureText\"\tenableviewstate=\"False\"></asp:literal></p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</layouttemplate>\r\n\t\t\t\t\t</asp:login>\r\n\t\t\t\t</anonymoustemplate>\r\n\t\t\t\t<LoggedInTemplate>\r\n\t\t\t\t\t<h4><asp:loginname id=\"LoginName1\" runat=\"server\" formatstring=\"Welcome\t{0}!\" /></h4>\r\n\t\t\t\t</LoggedInTemplate>\r\n\t\t\t</asp:loginview>\r\n\t\t\t<hr />\r\n\t\t\t<asp:formview id=\"FormView1\" runat=\"server\" datasourceid=\"ObjectDataSource1\" ondatabound=\"Randomize\" cellpadding=\"0\" borderwidth=\"0\" enableviewstate=\"false\">\r\n\t\t\t\t<ItemTemplate>\r\n\t\t\t\t\t<h4>Photo of the Day</h4>\r\n\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t\t<td><a href='Details.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Page=<%# $Container->DataItemIndex %>'>\r\n\t\t\t\t\t\t\t\t<img src=\"Handler.ashx?PhotoID=<%# $this->Eval(\"PhotoID\") %>&Size=M\" class=\"photo_198\" style=\"border:4px solid white\" alt='Photo Number <%# $this->Eval(\"PhotoID\") %>' /></a></td>\r\n\t\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod </p>\r\n\t\t\t\t\t<p><a href='Download.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Page=<%# $Container->DataItemIndex %>'>\r\n\t\t\t\t\t\t<asp:image runat=\"Server\" id=\"DownloadButton\" AlternateText=\"download photo\" skinid=\"download\"/></a></p>\r\n\t\t\t\t\t<p>See <a href=\"Albums.aspx\">more photos </a></p>\r\n\t\t\t\t\t<hr />\r\n\t\t\t\t</ItemTemplate>\r\n\t\t\t</asp:formview>\r\n\t\t\t<h4>My Latest Piece of Work</h4>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut\tlaoreet\tdolore magna aliquam erat volutpat.</p>\r\n\t\t</div>\r\n\t\t<div id=\"content\">\r\n\t\t\t<h3>Welcome\tto My Site</h3>\r\n\t\t\t<p>This\tis my personal site. In\tit you will find lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam\tnonummy\tnibh euismod tincidunt ut laoreet dolore magna aliquam erat\tvolutpat. Ut wisi enim ad minim\tveniam.\t</p>\r\n\t\t\t<hr\t/>\r\n\t\t\t<div id=\"whatsnew\">\r\n\t\t\t\t<h4>What's New</h4>\r\n\t\t\t\t<p>Lorem <a href=\"#\">ipsum</a> dolor sit amet, consectetuer\tadipiscing elit, sed diam nonummy nibh euismod.</p>\r\n\t\t\t\t<p>Lorem <a href=\"#\">ipsum</a> dolor sit amet, consectetuer\tadipiscing elit, sed diam nonummy nibh euismod.</p>\r\n\t\t\t</div>\r\n\t\t\t<div id=\"coollinks\">\r\n\t\t\t\t<h4>Cool Links</h4>\r\n\t\t\t\t<ul\tclass=\"link\">\r\n\t\t\t\t\t<li><a href=\"#\">Lorem ipsum dolositionr</a></li>\r\n\t\t\t\t\t<li><a href=\"#\">Lorem ipsum dolositionr</a></li>\r\n\t\t\t\t\t<li><a href=\"#\">Lorem ipsum dolositionr</a></li>\r\n\t\t\t\t\t<li><a href=\"#\">Lorem ipsum dolositionr</a></li>\r\n\t\t\t\t\t<li><a href=\"#\">Lorem ipsum dolositionr</a></li>\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t\t<hr\t/>\r\n\t\t\t<h4>What's Up Lately </h4>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, <a href=\"#\">consectetuer</a>\tadipiscing elit, sed diam nonummy nibh euismod tincidunt ut\tlaoreet\tdolore magna aliquam erat volutpat.\tUt wisi\tenim ad\tminim veniam, quis nostrud exercitation\tconsequat. Duis\tautem veleum iriure\tdolor in hendrerit in vulputate\tvelit esse molestie\tconsequat, vel willum.</p>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer\tadipiscing elit, sed diam nonummy nibh <a href=\"#\">euismod tincidunt ut</a>\tlaoreet\tdolore magna aliquam erat volutpat.\tUt wisi\tenim ad\tminim veniam, quis nostrud exercitation\tconsequat. Duis\tautem veleum iriure\tdolor in hendrerit in vulputate\tvelit esse molestie\tconsequat, vel willum.</p>\r\n\t\t\t<p>Lorem<a href=\"#\"> ipsum dolor sit amet</a>, consectetuer\tadipiscing elit, sed diam nonummy nibh euismod tincidunt ut\tlaoreet\tdolore magna aliquam erat volutpat.\tUt wisi\tenim ad\tminim veniam, quis nostrud exercitation\tconsequat. Duis\tautem veleum iriure\tdolor in hendrerit in vulputate\tvelit esse molestie\tconsequat, vel willum.</p>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer\tadipiscing elit, sed diam nonummy nibh euismod tincidunt ut\tlaoreet\tdolore magna aliquam erat volutpat.\tUt wisi\tenim ad\tminim veniam, quis nostrud exercitation\tconsequat. <a href=\"#\">Duis\tautem veleum</a> iriure\tdolor in hendrerit in vulputate\tvelit esse molestie\tconsequat, vel willum.</p>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer\tadipiscing elit, sed diam nonummy nibh euismod tincidunt ut\tlaoreet\tdolore magna aliquam erat volutpat.\tUt wisi\tenim ad\tminim veniam, quis nostrud exercitation\tconsequat. <a href=\"#\">Duis\tautem veleum</a> iriure\tdolor in hendrerit in vulputate\tvelit esse molestie\tconsequat, vel willum.</p>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetPhotos\">\r\n\t</asp:ObjectDataSource>\r\n\r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Default.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Default_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tpublic function Randomize($sender, $e) {\r\n\t\t\t$r = new Random;\r\n\t\t\t$this->FormView1->PageIndex = $r->Next($this->FormView1->PageCount);\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Default.master",
    "content": "<%@\tMaster Language=\"PHP\" CodeFile=\"Default.master.php\" Inherits=\"Default_master\"\t%>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" >\r\n<head runat=\"server\">\r\n\t<title></title>\r\n</head>\r\n<body>\r\n\r\n\t<form id=\"form1\" runat=\"server\">\r\n\r\n\t\t<div class=\"header\">\r\n\t\t\t<h1>Your Name Here</h1>\r\n\t\t\t<h2>My Personal Site</h2>\r\n\t\t\t<asp:menu id=\"menua\" runat=\"server\" \r\n\t\t\t\tdatasourceid=\"SiteMapDataSource1\" \r\n\t\t\t\tcssclass=\"menua\" \r\n\t\t\t\torientation=\"Horizontal\" \r\n\t\t\t\tmaximumdynamicdisplaylevels=\"0\" \r\n\t\t\t\tskiplinktext=\"\" \r\n\t\t\t\tstaticdisplaylevels=\"2\" />\r\n\t\t\t<div class=\"nav\">\r\n\t\t\t\t<asp:SiteMapPath id=\"SiteMapPath1\" runat=\"Server\" PathSeparator=\" > \" RenderCurrentNodeAsLink=\"true\" />\r\n\t\t\t\t&nbsp; | &nbsp;\r\n\t\t\t\t<asp:LoginStatus ID=\"LoginStatus1\" Runat=\"server\" />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<asp:contentplaceholder id=\"Main\" runat=\"server\" />\r\n\r\n\t\t<div class=\"footerbg\">\r\n\t\t\t<div class=\"footer\">\r\n\t\t\t\t<asp:menu id=\"menub\" runat=\"server\" \r\n\t\t\t\t\tdatasourceid=\"SiteMapDataSource1\" \r\n\t\t\t\t\tcssclass=\"menub\"\r\n\t\t\t\t\torientation=\"Horizontal\" \r\n\t\t\t\t\tmaximumdynamicdisplaylevels=\"0\" \r\n\t\t\t\t\tskiplinktext=\"\" \r\n\t\t\t\t\tstaticdisplaylevels=\"2\" />\r\n\t\t\t\tCopyright &copy; 2005 Your Name here.\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<asp:sitemapdatasource id=\"SiteMapDataSource1\" runat=\"server\" startingnodeoffset=\"0\" />\r\n\t\r\n\t</form>\r\n\t\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Default.master.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Default_master extends System:::Web:::UI:::MasterPage {\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Details.aspx",
    "content": "<%@\tPage Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Picture Details\"\r\n\tCodeFile=\"Details.aspx.php\" Inherits=\"Details_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n\t<div class=\"shim solid\"></div>\r\n\t\r\n\t<div class=\"page\" id=\"details\">\r\n\t\t<asp:formview id=\"FormView1\" runat=\"server\"\tdatasourceid=\"ObjectDataSource1\" cssclass=\"view\"\r\n\t\t\tborderstyle=\"none\" borderwidth=\"0\" CellPadding=\"0\" cellspacing=\"0\" EnableViewState=\"false\" AllowPaging=\"true\">\r\n\t\t\t<itemtemplate>\r\n\t\t\t\r\n\t\t\t\t<div class=\"buttonbar buttonbar-top\">\r\n\t\t\t\t\t<a href=\"Albums.aspx\"><asp:image ID=\"Image1\" runat=\"Server\"\t skinid=\"gallery\" /></a>\r\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton9\" Runat=\"server\" CommandName=\"Page\" CommandArgument=\"First\" skinid=\"first\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton10\"\tRunat=\"server\" CommandName=\"Page\" CommandArgument=\"Prev\" skinid=\"prev\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton11\"\tRunat=\"server\" CommandName=\"Page\" CommandArgument=\"Next\" skinid=\"next\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton12\"\tRunat=\"server\" CommandName=\"Page\" CommandArgument=\"Last\" skinid=\"last\"/>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p><%# $this->Server->HtmlEncode($this->Eval(\"Caption\")) %></p>\r\n\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t<td><img src=\"Handler.ashx?PhotoID=<%# $this->Eval(\"PhotoID\") %>&Size=L\" class=\"photo_198\" style=\"border:4px solid white\" alt='Photo Number <%# $this->Eval(\"PhotoID\") %>' /></a></td>\r\n\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</table>\r\n\t\t\t\t<p><a href='Download.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Page=<%# $Container->DataItemIndex %>'>\r\n\t\t\t\t\t<asp:image runat=\"Server\" id=\"DownloadButton\" AlternateText=\"download this photo\" skinid=\"download\" /></a></p>\r\n\t\t\t\t<div class=\"buttonbar\">\r\n\t\t\t\t\t<a href=\"Albums.aspx\"><asp:image ID=\"Image2\" runat=\"Server\"\t skinid=\"gallery\" /></a>\r\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton1\" Runat=\"server\" CommandName=\"Page\" CommandArgument=\"First\" skinid=\"first\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton2\" Runat=\"server\" CommandName=\"Page\" CommandArgument=\"Prev\" skinid=\"prev\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton3\" Runat=\"server\" CommandName=\"Page\" CommandArgument=\"Next\" skinid=\"next\"/>\r\n\t\t\t\t\t<asp:ImageButton ID=\"ImageButton4\" Runat=\"server\" CommandName=\"Page\" CommandArgument=\"Last\" skinid=\"last\"/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t</itemtemplate>\r\n\t\t</asp:formview>\r\n\t</div>\r\n\t\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetPhotos\">\r\n\t\t<SelectParameters>\r\n\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" DefaultValue=\"0\"/>\r\n\t\t</SelectParameters>\r\n\t</asp:ObjectDataSource>\r\n\t\r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Details.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Details_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tfunction __construct() {\r\n\t\t\t$this->Load->Add(new EventHandler(array($this, \"Page_Load\")));\r\n\t\t}\r\n\r\n\t\tfunction Page_Load($sender, $e) {\r\n\t\t\t$this->MaintainScrollPositionOnPostBack = true;\r\n\t\t\tif ($this->IsPostBack) return;\r\n\r\n\t\t\t$page = Convert::ToInt32($this->Request->QueryString->get_Item(\"Page\"));\r\n\t\t\tif ($page >= 0) $this->FormView1->PageIndex = $page;\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Download.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"\" Title=\"Your Name Here | Download\" \r\n    CodeFile=\"Download.aspx.php\" Inherits=\"Download_aspx\" %>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head runat=\"server\">\r\n    <title>Untitled Page</title>\r\n    <style type=\"text/css\">\r\n    body {\r\n        margin:0;\r\n        padding:0;\r\n        }\r\n    p {\r\n        font:11px verdana;\r\n        padding:15px 0 0 6px;\r\n        }\r\n    </style>\r\n</head>\r\n<body>\r\n    <form id=\"form1\" runat=\"server\">\r\n    <div>\r\n\r\n\t\t<p>Right-click and select \"Save Picture As..\" to download the picture.</p>\r\n\t\t<asp:formview id=\"FormView1\" runat=\"server\" datasourceid=\"ObjectDataSource1\" borderstyle=\"none\" borderwidth=\"0\" CellPadding=\"0\" cellspacing=\"0\">\r\n\t\t\t<itemtemplate>\r\n\t\t\t\t<img src=\"Handler.ashx?PhotoID=<%# $this->Eval(\"PhotoID\") %>\" alt='Photo Number <%# $this->Eval(\"PhotoID\") %>' /></itemtemplate>\r\n\t\t</asp:formview>\r\n\r\n\t\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\t\tSelectMethod=\"GetPhotos\">\r\n\t\t\t<SelectParameters>\r\n\t\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" DefaultValue=\"0\"/>\r\n\t\t\t</SelectParameters>\r\n\t\t</asp:ObjectDataSource>\r\n\r\n    </div>\r\n    </form>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Download.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Download_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tfunction __construct() {\r\n\t\t\t$this->Load->Add(new EventHandler(array($this, \"Page_Load\")));\r\n\t\t}\r\n\r\n\t\tfunction Page_Load($sender, $e) {\r\n\t\t\t$this->MaintainScrollPositionOnPostBack = true;\r\n\t\t\tif ($this->IsPostBack) return;\r\n\r\n\t\t\t$page = Convert::ToInt32($this->Request->QueryString->get_Item(\"Page\"));\r\n\t\t\tif ($page >= 0) $this->FormView1->PageIndex = $page;\r\n\t\t}\r\n\r\n\t}\r\n?>"
  },
  {
    "path": "Samples/PersonalWebSite/Global.asax",
    "content": "<%@ Application Language=\"PHP\" %>\r\n\r\n<script runat=\"server\">\r\n\r\n\t[Export]\r\n\tprivate static function Application_Start($sender, System:::EventArgs $e) {\r\n\t\tSiteMap::$SiteMapResolve->Add(new SiteMapResolveEventHandler(array(\"self\", \"AppendQueryString\")));\r\n\t\tif (!Roles::RoleExists(\"Administrators\")) Roles::CreateRole(\"Administrators\");\r\n\t\tif (!Roles::RoleExists(\"Friends\")) Roles::CreateRole(\"Friends\");\r\n\t}\r\n\r\n\tprivate static function AppendQueryString($o, $e) {\r\n\t\tif (SiteMap::$CurrentNode != NULL) {\r\n\t\t\t$temp = SiteMap::$CurrentNode->Clone(true);\r\n\t\t\t$u = new Uri($e->Context->Request->Url->ToString());\r\n\t\t\t$temp->Url .= $u->Query;\r\n\t\t\tif ($temp->ParentNode != NULL) {\r\n\t\t\t\t$temp->ParentNode->Url .= $u->Query;\r\n\t\t\t}\r\n\t\t\treturn $temp;\r\n\t\t} else {\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t}\r\n\t\r\n</script>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Handler.ashx",
    "content": "<%@ WebHandler Language=\"PHP\" Class=\"Handler\" %><?\r\n    import namespace System;\r\n    import namespace System:::IO;\r\n    import namespace System:::Web;\r\n\r\n\t// The class won't expose the needed parameterless constructor if it's not exported.\r\n\t[Export]\r\n    class Handler implements IHttpHandler {\r\n\r\n\t    public $IsReusable = true;\r\n    \t\r\n\t    function ProcessRequest ($context) {\r\n\t\t    // Set up the response settings\r\n\t\t    $context->Response->ContentType = \"image/jpeg\";\r\n\t\t    $context->Response->Cache->SetCacheability(HttpCacheability::i'Public');\r\n\t\t    $context->Response->BufferOutput = false;\r\n\t\t    \r\n\t\t    $query = $context->Request->QueryString;\r\n\t\t    $photo_id = $context->Request->QueryString->get_Item(\"PhotoID\");\r\n\t\t    $album_id = $context->Request->QueryString->get_Item(\"AlbumID\");\r\n\t\t    $qs_size = $context->Request->QueryString->get_Item(\"Size\");\r\n\t\t    \r\n\t\t    // Setup the Size Parameter\r\n\t\t    switch ($qs_size) {\r\n\t\t\t    case \"S\":\r\n\t\t\t\t    $size = PhotoSize::Small;\r\n\t\t\t\t    break;\r\n\t\t\t    case \"M\":\r\n\t\t\t\t    $size = PhotoSize::Medium;\r\n\t\t\t\t    break;\r\n\t\t\t    case \"L\":\r\n\t\t\t\t    $size = PhotoSize::Large;\r\n\t\t\t\t    break;\r\n\t\t\t    default:\r\n\t\t\t\t    $size = PhotoSize::Original;\r\n\t\t\t\t    break;\r\n\t\t    } \r\n\t\t    // Setup the PhotoID Parameter\r\n\t\t    $id = -1;\r\n\t\t    if (isset($photo_id)) {\r\n\t\t\t    $id = Convert::ToInt32($photo_id);\r\n\t\t\t    $stream = PhotoManager::GetPhoto($id, $size);\r\n\t\t    } else {\r\n\t\t\t    $id = Convert::ToInt32($album_id);\r\n\t\t\t    $stream = PhotoManager::GetFirstPhoto($id, $size);\r\n\t\t    }\r\n\t\t    // Get the photo from the database, if nothing is returned, get the default \"placeholder\" photo\r\n\t\t    if ($stream == NULL) $stream = PhotoManager::GetPhotoPlaceholder($size);\r\n\t\t    // Write image stream to the response stream\r\n\t\t    $buffersize = 1024 * 16;\r\n\t\t    $buffer = System:::Array::CreateInstance(Type::GetType(\"System.Byte\"), $buffersize);\r\n\t\t    $count = $stream->Read($buffer, 0, $buffersize);\r\n\t\t    while ($count > 0) {\r\n\t\t\t    $context->Response->OutputStream->Write($buffer, 0, $count);\r\n\t\t\t    $count = $stream->Read($buffer, 0, $buffersize);\r\n\t\t    }\r\n\t    }\r\n\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Links.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Links\"\r\n    CodeFile=\"Links.aspx.php\" Inherits=\"Links_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n    <div class=\"shim column\"></div>\r\n    \r\n    <div class=\"page\" id=\"links\">\r\n        <div id=\"content\">\r\n            <h3>About the Links</h3>\r\n            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod \r\n            tincidunt ut laoreet dolore magna erat volutpat.</p>\r\n            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod \r\n            tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis \r\n            nostrud exercitation consequat. esse molestie consequat, vel willum.</p>\r\n            <h4>Top 5</h4>\r\n            <dl>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n\t\t\t\t<dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n            </dl>\r\n            <h4>Cool Site Designs</h4>\r\n            <dl>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n\t\t\t\t<dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n            </dl>\r\n            <h4>Photo Sites</h4>\r\n            <dl>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n\t\t\t\t<dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n            </dl>\r\n            <h4>Resources</h4>\r\n            <dl>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n                <dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n\t\t\t\t<dt><a href=\"#\">Linked site name</a></dt>\r\n                <dd>A description of the web site goes here.</dd>\r\n            </dl>\r\n        </div>\r\n    </div>\r\n      \r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Links.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Links_aspx extends System:::Web:::UI:::Page  {\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/MyTemplate.vstemplate",
    "content": "<VSTemplate Version=\"2.0.0\" xmlns=\"http://schemas.microsoft.com/developer/vstemplate/2005\" Type=\"Project\">\r\n  <TemplateData>\r\n    <Name>Personal Web Site Starter Kit</Name>\r\n    <Description>Starter kit for creating a personal Web site</Description>\r\n    <ProjectType>Web</ProjectType>\r\n    <ProjectSubType>Phalanger</ProjectSubType>\r\n    <SortOrder>1000</SortOrder>\r\n    <CreateNewFolder>true</CreateNewFolder>\r\n    <DefaultName>Personal Web Site Starter Kit</DefaultName>\r\n    <ProvideDefaultName>true</ProvideDefaultName>\r\n    <LocationField>Enabled</LocationField>\r\n    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>\r\n    <Icon>__TemplateIcon.ico</Icon>\r\n  </TemplateData>\r\n  <TemplateContent>\r\n    <Project TargetFileName=\"ProjectName.webproj\" File=\"ProjectName.webproj\" ReplaceParameters=\"true\">\r\n      <Folder Name=\"Admin\" TargetFolderName=\"Admin\">\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Albums.aspx\">Albums.aspx</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Albums.aspx.php\">Albums.aspx.php</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Details.aspx\">Details.aspx</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Details.aspx.php\">Details.aspx.php</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Photos.aspx\">Photos.aspx</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Photos.aspx.php\">Photos.aspx.php</ProjectItem>\r\n      </Folder>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Albums.aspx\">Albums.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Albums.aspx.php\">Albums.aspx.php</ProjectItem>\r\n      <Folder Name=\"App_Code\" TargetFolderName=\"App_Code\">\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Album.php\">Album.php</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Photo.php\">Photo.php</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"PhotoManager.php\">PhotoManager.php</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"PhotoSize.php\">PhotoSize.php</ProjectItem>\r\n      </Folder>\r\n      <Folder Name=\"App_Data\" TargetFolderName=\"App_Data\">\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"personal-add.sql\">personal-add.sql</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"personal-remove.sql\">personal-remove.sql</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Personal.mdf\">Personal.mdf</ProjectItem>\r\n      </Folder>\r\n      <Folder Name=\"App_Themes\" TargetFolderName=\"App_Themes\">\r\n        <Folder Name=\"Black\" TargetFolderName=\"Black\">\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.css\">Default.css</ProjectItem>\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.skin\">Default.skin</ProjectItem>\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"frame.css\">frame.css</ProjectItem>\r\n          <Folder Name=\"Images\" TargetFolderName=\"Images\">\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-bstretch.gif\">album-bstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l1.gif\">album-l1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l2.gif\">album-l2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l3.gif\">album-l3.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l4.gif\">album-l4.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-lstretch.gif\">album-lstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mbl.gif\">album-mbl.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mbr.gif\">album-mbr.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mtl.gif\">album-mtl.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mtr.gif\">album-mtr.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r1.gif\">album-r1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r2.gif\">album-r2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r3.gif\">album-r3.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r4.gif\">album-r4.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-rstretch.gif\">album-rstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-tstretch.gif\">album-tstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"background.gif\">background.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bullet-1.gif\">bullet-1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bullet-2.gif\">bullet-2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-add.gif\">button-add.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-cancel.gif\">button-cancel.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-create.gif\">button-create.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-delete.gif\">button-delete.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-download.gif\">button-download.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-dwn_res.gif\">button-dwn_res.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-edit.gif\">button-edit.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-first.jpg\">button-first.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-gallery.jpg\">button-gallery.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-import.gif\">button-import.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-insert.gif\">button-insert.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-last.jpg\">button-last.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-login.gif\">button-login.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-next.jpg\">button-next.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-play.jpg\">button-play.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-prev.jpg\">button-prev.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-rename.gif\">button-rename.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-save.gif\">button-save.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-tog24.jpg\">button-tog24.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-tog8.jpg\">button-tog8.jpg</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"footer.gif\">footer.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-bot--x.gif\">frame-bot--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-bot-x-.gif\">frame-bot-x-.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-botx--.gif\">frame-botx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-mid--x.gif\">frame-mid--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-midx--.gif\">frame-midx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-top--x.gif\">frame-top--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-top-x-.gif\">frame-top-x-.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-topx--.gif\">frame-topx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"header.gif\">header.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"photonav.gif\">photonav.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"spacer.gif\">spacer.gif</ProjectItem>\r\n          </Folder>\r\n        </Folder>\r\n        <Folder Name=\"White\" TargetFolderName=\"White\">\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.css\">Default.css</ProjectItem>\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.skin\">Default.skin</ProjectItem>\r\n          <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Frame.css\">Frame.css</ProjectItem>\r\n          <Folder Name=\"Images\" TargetFolderName=\"Images\">\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-bstretch.gif\">album-bstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l1.gif\">album-l1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l2.gif\">album-l2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l3.gif\">album-l3.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-l4.gif\">album-l4.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-lstretch.gif\">album-lstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mbl.gif\">album-mbl.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mbr.gif\">album-mbr.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mtl.gif\">album-mtl.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-mtr.gif\">album-mtr.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r1.gif\">album-r1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r2.gif\">album-r2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r3.gif\">album-r3.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-r4.gif\">album-r4.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-rstretch.gif\">album-rstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"album-tstretch.gif\">album-tstretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"background.gif\">background.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"body-repeat-photo.gif\">body-repeat-photo.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"body-repeat.gif\">body-repeat.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bullet-1.gif\">bullet-1.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"bullet-2.gif\">bullet-2.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-add.gif\">button-add.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-cancel.gif\">button-cancel.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-create.gif\">button-create.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-delete.gif\">button-delete.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-download.gif\">button-download.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-dwn_res.gif\">button-dwn_res.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-edit.gif\">button-edit.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-first.gif\">button-first.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-gallery.gif\">button-gallery.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-import.gif\">button-import.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-insert.gif\">button-insert.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-last.gif\">button-last.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-login.gif\">button-login.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-next.gif\">button-next.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-play.gif\">button-play.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-prev.gif\">button-prev.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-rename.gif\">button-rename.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-save.gif\">button-save.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-tog24.gif\">button-tog24.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"button-tog8.gif\">button-tog8.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"content-shim-none.gif\">content-shim-none.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"content-shim-photo.gif\">content-shim-photo.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"content-shim-stretch.gif\">content-shim-stretch.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"content-shim.gif\">content-shim.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"footer-side.gif\">footer-side.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"footer.gif\">footer.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-bot--x.gif\">frame-bot--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-bot-x-.gif\">frame-bot-x-.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-botx--.gif\">frame-botx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-mid--x.gif\">frame-mid--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-midx--.gif\">frame-midx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-top--x.gif\">frame-top--x.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-top-x-.gif\">frame-top-x-.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"frame-topx--.gif\">frame-topx--.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"header.gif\">header.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"photonav-bg.gif\">photonav-bg.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"photonav-top-bg.gif\">photonav-top-bg.gif</ProjectItem>\r\n            <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"spacer.gif\">spacer.gif</ProjectItem>\r\n          </Folder>\r\n        </Folder>\r\n      </Folder>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.aspx\">Default.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.aspx.php\">Default.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.master\">Default.master</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Default.master.php\">Default.master.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Details.aspx\">Details.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Details.aspx.php\">Details.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Download.aspx\">Download.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Download.aspx.php\">Download.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Global.asax\">Global.asax</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Handler.ashx\">Handler.ashx</ProjectItem>\r\n      <Folder Name=\"Images\" TargetFolderName=\"Images\">\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"placeholder-100.jpg\">placeholder-100.jpg</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"placeholder-200.jpg\">placeholder-200.jpg</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"placeholder-600.jpg\">placeholder-600.jpg</ProjectItem>\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"resume-photo.jpg\">resume-photo.jpg</ProjectItem>\r\n      </Folder>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Links.aspx\">Links.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Links.aspx.php\">Links.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Photos.aspx\">Photos.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Photos.aspx.php\">Photos.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Register.aspx\">Register.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Register.aspx.php\">Register.aspx.php</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resume.aspx\">Resume.aspx</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Resume.aspx.php\">Resume.aspx.php</ProjectItem>\r\n      <Folder Name=\"Upload\" TargetFolderName=\"Upload\">\r\n        <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"_dummy\">_dummy</ProjectItem>\r\n      </Folder>\r\n      <ProjectItem ReplaceParameters=\"true\" TargetFileName=\"Web.config\">Web.config</ProjectItem>\r\n      <ProjectItem ReplaceParameters=\"false\" TargetFileName=\"Web.sitemap\">Web.sitemap</ProjectItem>\r\n      <ProjectItem OpenInWebBrowser=\"true\" ReplaceParameters=\"true\" TargetFileName=\"Welcome.html\">Welcome.html</ProjectItem>\r\n    </Project>\r\n  </TemplateContent>\r\n</VSTemplate>"
  },
  {
    "path": "Samples/PersonalWebSite/Photos.aspx",
    "content": "<%@\tPage Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Photos\"\r\n\tCodeFile=\"Photos.aspx.php\" Inherits=\"Photos_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\t\r\n\t<div class=\"shim solid\"></div> \r\n\t  \r\n\t<div class=\"page\" id=\"photos\">\r\n\t\t<div class=\"buttonbar buttonbar-top\">\r\n\t\t\t<a href=\"Albums.aspx\"><asp:image ID=\"Image1\" runat=\"Server\" skinid=\"gallery\" /></a>\r\n\t\t</div>\r\n\t\t<asp:DataList ID=\"DataList1\" runat=\"Server\"\tcssclass=\"view\"\tdataSourceID=\"ObjectDataSource1\" \r\n\t\t\trepeatColumns=\"4\" repeatdirection=\"Horizontal\" onitemdatabound=\"DataList1_ItemDataBound\" EnableViewState=\"false\">\r\n\t\t\t<ItemTemplate>\r\n\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t\t<td><a href='Details.aspx?AlbumID=<%# $this->Eval(\"AlbumID\") %>&Page=<%# $Container->ItemIndex %>'>\r\n\t\t\t\t\t\t\t<img src=\"Handler.ashx?PhotoID=<%# $this->Eval(\"PhotoID\") %>&Size=S\" class=\"photo_198\" style=\"border:4px solid white\" alt='Thumbnail of Photo Number <%# $this->Eval(\"PhotoID\") %>' /></a></td>\r\n\t\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</table>\r\n\t\t\t\t<p><%# $this->Server->HtmlEncode($this->Eval(\"Caption\")) %></p>\r\n\t\t\t</ItemTemplate>\r\n\t\t\t<FooterTemplate>\r\n\t\t\t</FooterTemplate>\r\n\t\t</asp:DataList>\r\n\t\t<asp:panel id=\"Panel1\" runat=\"server\" visible=\"false\" CssClass=\"nullpanel\">There are currently no pictures in this album.</asp:panel>\r\n\t\t<div class=\"buttonbar\">\r\n\t\t\t<a href=\"Albums.aspx\"><asp:image id=\"gallery\" runat=\"Server\" skinid=\"gallery\" /></a>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n\t<asp:ObjectDataSource ID=\"ObjectDataSource1\" Runat=\"server\" TypeName=\"PhotoManager\" \r\n\t\tSelectMethod=\"GetPhotos\">\r\n\t\t<SelectParameters>\r\n\t\t\t<asp:QueryStringParameter Name=\"AlbumID\" Type=\"Int32\" QueryStringField=\"AlbumID\" DefaultValue=\"0\"/>\r\n\t\t</SelectParameters>\r\n\t</asp:ObjectDataSource>\r\n\t\r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Photos.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Photos_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t\tprotected function DataList1_ItemDataBound($sender, $e) {\r\n\t\t\tif ($e->Item->ItemType == ListItemType::Footer) {\r\n\t\t\t\tif ($this->DataList1->Items->Count == 0) $this->Panel1->Visible = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Register.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Register\"\r\n    CodeFile=\"Register.aspx.php\" Inherits=\"Register_aspx\" %>\r\n\r\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"Main\" Runat=\"server\">\r\n\r\n    <div class=\"shim column\"></div>\r\n\r\n    <div class=\"page\" id=\"register\">\r\n\t\t<div id=\"content\">\r\n            <h3>Request an Account</h3>\r\n            <p>Accounts will be activated pending the approval of the Administrator.</p>\r\n            <asp:CreateUserWizard ID=\"CreateUserWizard1\" Runat=\"server\" \r\n\t\t\t\tContinueDestinationPageUrl=\"default.aspx\"\r\n                DisableCreatedUser=\"True\"\r\n                EmailRegularExpression=\"\\S+@\\S+\\.\\S+\"\r\n                EmailRegularExpressionErrorMessage=\"The email format is invalid.\">\r\n            </asp:CreateUserWizard>\r\n        </div>\r\n    </div>\r\n\r\n</asp:Content>"
  },
  {
    "path": "Samples/PersonalWebSite/Register.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Register_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Resume.aspx",
    "content": "<%@ Page Language=\"PHP\" MasterPageFile=\"~/Default.master\" Title=\"Your Name Here | Resume\"\r\n    CodeFile=\"Resume.aspx.php\" Inherits=\"Resume_aspx\" %>\r\n\r\n<asp:content id=\"Content1\" contentplaceholderid=\"Main\" runat=\"server\">\r\n\r\n    <div class=\"shim column\"></div>\r\n    \r\n    <div class=\"page\" id=\"resume\">\r\n        <div id=\"content\" class=\"resume\">\r\n\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"photo-frame\" id=\"photo\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td class=\"topx--\"></td>\r\n\t\t\t\t\t<td class=\"top-x-\"></td>\r\n\t\t\t\t\t<td class=\"top--x\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td class=\"midx--\"></td>\r\n\t\t\t\t\t<td><img src=\"images/resume-photo.jpg\" class=\"photo_198\" style=\"border:4px solid white\" alt=\"Resume Photo\"/></td>\r\n\t\t\t\t\t<td class=\"mid--x\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td class=\"botx--\"></td>\r\n\t\t\t\t\t<td class=\"bot-x-\"></td>\r\n\t\t\t\t\t<td class=\"bot--x\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t<h3>Your Name Here </h3>\r\n\t\t\t<p>resume 1/23/04</p>\r\n\t\t\t<p>555-555-1212 fax<br />\r\n\t\t\t555-555-1212 voice<br />\r\n\t\t\tsomeone@example.com<br />\r\n\t\t\twww.example.com<br />\r\n\t\t\tCity, State &nbsp;Country</p>\r\n\t\t\t<p><a href=\"#\"><asp:image id=\"downloadresume\" runat=\"Server\" AlternateText=\"download resume in word format\" skinid=\"dwn_res\" /></a></p>\r\n\t\t\t<h4>Objective</h4>\r\n\t\t\t<p class=\"first\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\r\n\t\t\t<h4>Experience</h4>\r\n\t\t\t<p class=\"first\">1999 - 2004&nbsp; Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />\r\n\t\t\t\tSed diam nonummy nibh euismod </p>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Ttincidunt ut laoreet dolore magna aliquam erat volutpat. </li>\r\n\t\t\t\t<li>Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. </li>\r\n\t\t\t\t<li>Duis autem veleum iriure dolor in hendrerit in vel willum.</li>\r\n\t\t\t</ul>\r\n\t\t\t<p>1995 - 1999 &nbsp; Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />\r\n\t\t\t\tSed diam nonummy nibh euismod </p>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Ttincidunt ut laoreet dolore magna aliquam erat volutpat. </li>\r\n\t\t\t\t<li>Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. </li>\r\n\t\t\t\t<li>Duis autem veleum iriure dolor in hendrerit in vel willum.</li>\r\n\t\t\t</ul>\r\n\t\t\t<p>1993 - 1995 &nbsp; Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />\r\n\t\t\t\tSed diam nonummy nibh euismod </p>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Ttincidunt ut laoreet dolore magna aliquam erat volutpat. </li>\r\n\t\t\t\t<li>Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. </li>\r\n\t\t\t\t<li>Duis autem veleum iriure dolor in hendrerit in vel willum.</li>\r\n\t\t\t</ul>\r\n\t\t\t<p>1987 - 1993 &nbsp; Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />\r\n\t\t\t\tSed diam nonummy nibh euismod </p>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Ttincidunt ut laoreet dolore magna aliquam erat volutpat. </li>\r\n\t\t\t\t<li>Ut wisi enim ad minim veniam, quis nostrud exercitation consequat. </li>\r\n\t\t\t\t<li>Duis autem veleum iriure dolor in hendrerit in vel willum.</li>\r\n\t\t\t</ul>\r\n\t\t\t<h4>Education</h4>\r\n\t\t\t<p class=\"first\">1984 - 1987 &nbsp; Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />\r\n\t\t\tSed diam nonummy nibh euismod </p>\r\n\t\t\t<ul>\r\n\t\t\t\t<li>Ttincidunt ut laoreet dolore magna aliquam erat volutpat. </li>\r\n\t\t\t\t<li>Ut wisi enim ad minim veniam, quis nostrud exercitation consequat.</li>\r\n\t\t\t</ul>\r\n\t\t\t<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\r\n\t        \r\n\t\t\t</div>\r\n        \r\n    </div>\r\n      \r\n</asp:content>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Resume.aspx.php",
    "content": "<?\r\n\timport namespace System;\r\n\timport namespace System:::Data;\r\n\timport namespace System:::Configuration;\r\n\timport namespace System:::Web;\r\n\timport namespace System:::Web:::Security;\r\n\timport namespace System:::Web:::UI;\r\n\timport namespace System:::Web:::UI:::WebControls;\r\n\timport namespace System:::Web:::UI:::WebControls:::WebParts;\r\n\timport namespace System:::Web:::UI:::HtmlControls;\r\n\r\n\tpartial class Resume_aspx extends System:::Web:::UI:::Page {\r\n\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Upload/_dummy",
    "content": ""
  },
  {
    "path": "Samples/PersonalWebSite/Web.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns=\"http://schemas.microsoft.com/.NetConfiguration/v2.0\">\r\n\t<connectionStrings>\r\n\t\t<add name=\"Personal\" connectionString=\"Data Source=.;Integrated Security=True;User Instance=False;AttachDBFilename=|DataDirectory|Personal.mdf\" providerName=\"System.Data.SqlClient\" />\r\n\t\t<remove name=\"LocalSqlServer\"/>\r\n\t\t<add name=\"LocalSqlServer\" connectionString=\"Data Source=.;Integrated Security=True;User Instance=False;AttachDBFilename=|DataDirectory|aspnetdb.mdf\" />\r\n\t</connectionStrings>\r\n\t<system.web>\r\n\t\t<pages styleSheetTheme=\"White\"/>\r\n\t\t<customErrors mode=\"RemoteOnly\"/>\r\n    <compilation debug=\"true\">\r\n      <assemblies>\r\n        <add assembly=\"PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\"/>\r\n      </assemblies>\r\n    </compilation>\r\n\t\t<authentication mode=\"Forms\">\r\n\t\t\t<forms loginUrl=\"Default.aspx\" protection=\"Validation\" timeout=\"300\" />\r\n\t\t</authentication>\r\n\t\t<authorization>\r\n\t\t\t<allow users=\"*\"/>\r\n\t\t</authorization>\r\n\t\t<globalization requestEncoding=\"utf-8\" responseEncoding=\"utf-8\"/>\r\n        <roleManager enabled=\"true\"/>\r\n\t\t<siteMap defaultProvider=\"XmlSiteMapProvider\" enabled=\"true\">\r\n\t\t\t<providers>\r\n\t\t\t\t<add name=\"XmlSiteMapProvider\"\r\n            description=\"SiteMap provider which reads in .sitemap XML files.\"\r\n            type=\"System.Web.XmlSiteMapProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"\r\n            siteMapFile=\"web.sitemap\"\r\n            securityTrimmingEnabled=\"true\"/>\r\n\t\t\t</providers>\r\n\t\t</siteMap>\r\n\t</system.web>\r\n\t<location path=\"Admin\">\r\n\t\t<system.web>\r\n\t\t\t<authorization>\r\n\t\t\t\t<allow roles=\"Administrators\"/>\r\n\t\t\t\t<deny users=\"*\"/>\r\n\t\t\t</authorization>\r\n\t\t</system.web>\r\n\t</location>\r\n</configuration>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite/Web.sitemap",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<siteMap>\r\n\t<siteMapNode title=\"Home\" url=\"Default.aspx\">\r\n\t\t<siteMapNode title=\"Resume\" url=\"Resume.aspx\" />\r\n\t\t<siteMapNode title=\"Links\" url=\"Links.aspx\" />\r\n\t\t<siteMapNode title=\"Albums\" url=\"Albums.aspx\" >\r\n\t\t\t<siteMapNode title=\"Photos\" url=\"Photos.aspx\" >\r\n\t\t\t\t<siteMapNode title=\"Details\" url=\"Details.aspx\" />\r\n\t\t\t</siteMapNode>\r\n\t\t</siteMapNode>\r\n\t\t<siteMapNode title=\"Register\" url=\"Register.aspx\" />\r\n\t\t<siteMapNode title=\"Manage\" url=\"Admin/Albums.aspx\" >\r\n\t\t\t<siteMapNode title=\"Photos\" url=\"Admin/Photos.aspx\" >\r\n\t\t\t\t<siteMapNode title=\"Details\" url=\"Admin/Details.aspx\" />\r\n\t\t\t</siteMapNode>\r\n\t\t</siteMapNode>\r\n\t</siteMapNode>\r\n</siteMap>"
  },
  {
    "path": "Samples/PersonalWebSite/Welcome.html",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head>\r\n    <title>Welcome</title>\r\n    <style type=\"text/css\">\r\n\r\nbody {\r\n    font-family: verdana;\r\n    font-size:9pt;\r\n    line-height:16pt;\r\n    margin:50px;\r\n    }\r\n    \r\nh1 {\r\n    font-family: verdana;\r\n    font-size:16pt;\r\n    font-weight:bold;\r\n    }\r\n    \r\nh2 {\r\n    font-family: verdana;\r\n    font-size:12pt;\r\n    font-weight:bold;\r\n    color: #666;\r\n    }\r\n\r\nh3 {\r\n    font-family: verdana;\r\n    font-size:12pt;\r\n    font-weight:bold;\r\n    color: #999;\r\n    }\r\n\r\n</style>\r\n</head>\r\n<body>\r\n    <h1>Personal Web Site Starter Kit</h1>\r\n    <h2>Introduction</h2>\r\n    <p>\r\n        Congratulations! You have created your own Personal Web Site, which includes a home\r\n        page, resume, and photo album. You can press CTRL+F5 to run your site right now.</p>\r\n    <p>\r\n        You can use the site as-is with some small customizations, such as adding your own\r\n        content. In addition, you can add pages to the site. The following sections explain\r\n        how to use the Personal Web Site.</p>\r\n    <ul>\r\n        <li>Creating an Administrative User</li>\r\n        <li>Managing the Personal Web Site</li>\r\n        <li>Working with Photo Albums</li>\r\n        <li>Publishing Your Web Site</li>\r\n        <li>Further Resources</li>\r\n    </ul>\r\n    <h2>Creating an Administrative User</h2>\r\n    <p>\r\n        The first step you must take is to create an administrative user. The administrative\r\n        user has permission to upload photos and create albums.</p>\r\n    <p>\r\n        <b>To create an administrative user</b></p>\r\n    <ol>\r\n        <li>Run the site at least once before proceeding. This ensures the initialization of the Membership\r\n        and Roles databases.</li>\r\n        <li>In the <b>Website</b> menu, click <b>ASP.NET Configuration</b>.</li><li>Click the\r\n        <b>Security</b> tab.</li><li>Click <b>Create user</b>.</li><li>In the <b>Create User</b>\r\n        box, type a user name, password, and e-mail address for the administrator user. You\r\n        must also provide a security question and answer that is used to help you recover your\r\n        password, if necessary.</li><li>In the <b>Roles</b> box, select both the <b>Administrators</b>\r\n        and <b>Friends</b> check boxes to make the user into an administrator and a member of\r\n        the Friends role.</li><li>Click <b>Create User</b>.</li><li>Close the Web Site Administration\r\n        Tool window.</li>\r\n    </ol>\r\n    <h2>Managing the Personal Web Site</h2>\r\n    <p>\r\n        The following sections provide basic information about how to administer the site.</p>\r\n    <h3>Designating Guest Users as Friends</h3>\r\n    <p>\r\n        Visitors to your site can register themselves on your site. You can make registered\r\n        users into Friends, which gives them permission to view private photo albums.</p>\r\n    <p>\r\n        <b>To give users permission to view private photo albums</b></p>\r\n    <ol>\r\n        <li>In the <b>Website</b> menu, click <b>ASP.NET Configuration</b>.</li><li>Click the\r\n        <b>Security</b> tab.</li>\r\n        <li>Under <b>Users,</b> click <b>Manage users.</b> </li>\r\n        <li>In the user list, click <b>Edit roles</b> for the guest. (If you do not see the\r\n        user's name, use the search box.)</li>\r\n        <li>Under <b>Roles</b>, select <b>Friends</b>. </li>\r\n        <li>Close the Web Administration Tool window.</li>\r\n    </ol>\r\n    <h3>Working with Photo Albums</h3>\r\n    <p>\r\n        The photo album feature allows you to:</p>\r\n    <ul>\r\n        <li>Create albums that act as collections of photos.</li>\r\n        <li>Upload photos individually into an album.</li>\r\n        <li>Bulk upload a collection of photos into an album. This feature is useful for creating\r\n        an album from a collection of photos, such as your vacation pictures.</li>\r\n    </ul>\r\n    <p>\r\n        <b>To create an album and add photos</b></p>\r\n    <ol>\r\n        <li>Login to the site as an administrator.</li>\r\n        <li>In the menu, click <b>Manage</b>. </li>\r\n        <li>Under <b>Add New Album</b>, type a name.</li>\r\n        <li>If you want everyone to be able to see your photos, select <b>Make this album public</b>.\r\n        If you leave this check box unselected, only users who are registered as friends can\r\n        view the album.</li>\r\n        <li>Click <b>Add</b> to create the album.&nbsp;</li>\r\n        <li>Under <b>Your Albums</b>, click the blank photo for the new album.</li>\r\n        <li>Under <b>Add Photos</b>, type or select the photo file name, type a caption, and\r\n        click <b>Insert</b>. </li>\r\n        <li>Repeat Step 4 for each photo you want to add to the album.</li>\r\n    </ol>\r\n    <p>\r\n        <b>To bulk upload photos into an album</b></p>\r\n    <ol>\r\n        <li>Copy your photos to the Upload folder in the Web site.</li>\r\n        <li>In the menu, click <b>Manage</b>. </li>\r\n        <li>In the album list, click the photo of the album to use. (Create a new album first,\r\n        if necessary.)</li>\r\n        <li>Click <b>Import</b>. All the photos in the Upload folder are added to the album.</li>\r\n    </ol>\r\n    <h2>Publishing your Site</h2>\r\n    <p>\r\n        When you are ready to share your Web site with others, you can copy it to your Web\r\n        server. You need to know the File Transfer Protocol (FTP) address of your server,\r\n        and if required, the user name and password you use.</p>\r\n    <ol>\r\n        <li>In the <b>Website</b> menu, click <b>Copy Web Site</b>. The Copy Web Site tool displays\r\n        the files from your Web site under <b>Source Web Site</b>. </li>\r\n        <li>In the <b>Connect to</b> box, click <b>Connect to</b> ....</li>\r\n        <li>In the <b>Open Web Site</b> dialog box, click the <b>FTP Sites</b> tab.</li>\r\n        <li>Type the FTP address of your server, and if required, the user name and password\r\n        that your hosting site has provided. The FTP URL usually has a format like this:\r\n        <pre>ftp://ftp.servername/foldername</pre></li>\r\n        <li>Click <b>Open</b>. The files on the Web server are displayed under <b>Remote Web\r\n        Site</b>.<br />\r\n        <b>Note:</b> If you have trouble connecting to the server, contact the server administrator.</li>\r\n        <li>In the <b>Move Files</b> list, click <b>All source files to remote Web site</b>.\r\n        </li>\r\n        <li>Click the <b>Copy Web Site</b> button. The files from your Personal Web Site are\r\n        copied to the server.</li>\r\n    </ol>\r\n    <h2>Further Resources</h2>\r\n    <p>\r\n        The information in this page is only an overview of the Personal Web site. For more\r\n        information, see the topic <b>Personal Web Site Starter Kit</b> in the documentation.\r\n    </p>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Samples/PersonalWebSite.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{E24C65DC-7377-472B-9ABA-BC803B73C61A}\") = \"PersonalWebSite\", \"PersonalWebSite\", \"{97E6C0D3-CE09-4300-8725-35BF117EB152}\"\r\n\tProjectSection(WebsiteProperties) = preProject\r\n\t\tSccProjectName = \"SAK\"\r\n\t\tSccAuxPath = \"SAK\"\r\n\t\tSccLocalPath = \"SAK\"\r\n\t\tSccProvider = \"SAK\"\r\n\t\tTargetFrameworkMoniker = \".NETFramework,Version%3Dv2.0\"\r\n\t\tDebug.AspNetCompiler.VirtualPath = \"/PersonalWebSite\"\r\n\t\tDebug.AspNetCompiler.PhysicalPath = \"PersonalWebSite\\\"\r\n\t\tDebug.AspNetCompiler.TargetPath = \"PrecompiledWeb\\PersonalWebSite\\\"\r\n\t\tDebug.AspNetCompiler.Updateable = \"true\"\r\n\t\tDebug.AspNetCompiler.ForceOverwrite = \"true\"\r\n\t\tDebug.AspNetCompiler.FixedNames = \"false\"\r\n\t\tDebug.AspNetCompiler.Debug = \"True\"\r\n\t\tRelease.AspNetCompiler.VirtualPath = \"/PersonalWebSite\"\r\n\t\tRelease.AspNetCompiler.PhysicalPath = \"PersonalWebSite\\\"\r\n\t\tRelease.AspNetCompiler.TargetPath = \"PrecompiledWeb\\PersonalWebSite\\\"\r\n\t\tRelease.AspNetCompiler.Updateable = \"true\"\r\n\t\tRelease.AspNetCompiler.ForceOverwrite = \"true\"\r\n\t\tRelease.AspNetCompiler.FixedNames = \"false\"\r\n\t\tRelease.AspNetCompiler.Debug = \"False\"\r\n\t\tVWDPort = \"12199\"\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(TeamFoundationVersionControl) = preSolution\r\n\t\tSccNumberOfProjects = 2\r\n\t\tSccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}\r\n\t\tSccTeamFoundationServer = https://tfs.codeplex.com/tfs/tfs01\r\n\t\tSccLocalPath0 = .\r\n\t\tSccWebProject1 = true\r\n\t\tSccProjectUniqueName1 = PersonalWebSite\r\n\t\tSccProjectName1 = PersonalWebSite\r\n\t\tSccLocalPath1 = PersonalWebSite\r\n\t\tSccProjectEnlistmentChoice1 = 2\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|.NET = Debug|.NET\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{97E6C0D3-CE09-4300-8725-35BF117EB152}.Debug|.NET.ActiveCfg = Debug|.NET\r\n\t\t{97E6C0D3-CE09-4300-8725-35BF117EB152}.Debug|.NET.Build.0 = Debug|.NET\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Samples/PersonalWebSite.vssscc",
    "content": "﻿\"\"\r\n{\r\n\"FILE_VERSION\" = \"9237\"\r\n\"ENLISTMENT_CHOICE\" = \"NEVER\"\r\n\"PROJECT_FILE_RELATIVE_PATH\" = \"\"\r\n\"NUMBER_OF_EXCLUDED_FILES\" = \"0\"\r\n\"ORIGINAL_PROJECT_FILE_PATH\" = \"\"\r\n\"NUMBER_OF_NESTED_PROJECTS\" = \"0\"\r\n\"SOURCE_CONTROL_SETTINGS_PROVIDER\" = \"PROJECT\"\r\n}\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/CLRException.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n    namespace RegEditPHP{\r\n        //PHPBUG:\r\n        ///<summary>Wraps any <see cref=\"System:::Exception\"/> as Phalanger <see cref=\"Exception\"/></summary>\r\n        ///<remarks>Purpose of having such class is actual inability of Phalanger to throw Clr exceptions (though they can be caught)</remarks>\r\n        final class CLRException extends Exception{\r\n            ///<summary><see cref=\"System:::Exception\"/> being encapsulated</summary>\r\n            private $ex;\r\n            ///<summary>Creates new instance of the <see cref=\"CLRExceprion\"/> class</summary>\r\n            ///<param name=\"ex\">The <see cref=\"System:::Exception\"/> to wrap</param>\r\n\t        function __construct(System:::Exception $ex){\r\n\t            parent::__construct();\r\n\t            $this->ex = $ex;\r\n                $this->message = $ex->Message;\r\n\t        }\r\n\t        ///<summary>Gets exception wrapped by this instance</summary>\r\n\t        ///<returns type=\"System:::Exception\">Exception wrapped by this instance</returns>\r\n\t        public function GetException(){\r\n\t            return $this->ex;\r\n\t        }\r\n\t        ///<summary>PHP magic method to get dynamic property</summary>\r\n\t        ///<remarks>Defined properties<list type=\"bullet\"><item><b>Exception</b> (<see cref=\"System:::Exception\"/>)</item></list></remarks>\r\n\t        public function __get(string $name){\r\n\t            //Note this implementation is not very correct because there is no __set (and even __isset and __unset) method.\r\n\t            //So, you are allowed set/unset $Exception byt it does not get set/unset.\r\n\t            //isset return false (unless you've set $Exception) but __get returns non-null.\r\n\t            if($name==\"Exception\") return $this->ex;\r\n\t            return null;\r\n\t        }\r\n        }\r\n    }\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/InputBox.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"lblPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>63, 13</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Text\" xml:space=\"preserve\">\r\n    <value>Zadejte text</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Storno</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Zadávač</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/InputBox.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"lblPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>69, 13</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Text\" xml:space=\"preserve\">\r\n    <value>Unosite tekst</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;U redu</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Odustani</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>UnosOkvir</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/InputBox.php",
    "content": "﻿<?\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Windows:::Forms;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class InputBox extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $tlpMain;\r\n            \r\n            private $lblPrompt;\r\n            \r\n            private $txtText;\r\n            \r\n            private $cmdOK;\r\n            \r\n            private $cmdCancel;\r\n            \r\n            private $components = NULL;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n                $this->Init();\r\n            }\r\n            \r\n            private function InitializeComponent() {\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf InputBox );\r\n                $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->lblPrompt = new System:::Windows:::Forms:::Label();\r\n                $this->txtText = new System:::Windows:::Forms:::TextBox();\r\n                $this->cmdOK = new System:::Windows:::Forms:::Button();\r\n                $this->cmdCancel = new System:::Windows:::Forms:::Button();\r\n                $this->tlpMain->SuspendLayout();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tlpMain\r\n                // \r\n                $this->tlpMain->AccessibleDescription = NULL;\r\n                $this->tlpMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpMain, \"tlpMain\");\r\n                $this->tlpMain->BackgroundImage = NULL;\r\n                $this->tlpMain->Controls->Add($this->lblPrompt, 0, 0);\r\n                $this->tlpMain->Controls->Add($this->txtText, 0, 1);\r\n                $this->tlpMain->Controls->Add($this->cmdOK, 0, 2);\r\n                $this->tlpMain->Controls->Add($this->cmdCancel, 1, 2);\r\n                $this->tlpMain->Font = NULL;\r\n                $this->tlpMain->Name = \"tlpMain\";\r\n                // \r\n                // lblPrompt\r\n                // \r\n                $this->lblPrompt->AccessibleDescription = NULL;\r\n                $this->lblPrompt->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblPrompt, \"lblPrompt\");\r\n                $this->tlpMain->SetColumnSpan($this->lblPrompt, 2);\r\n                $this->lblPrompt->Font = NULL;\r\n                $this->lblPrompt->Name = \"lblPrompt\";\r\n                // \r\n                // txtText\r\n                // \r\n                $this->txtText->AccessibleDescription = NULL;\r\n                $this->txtText->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->txtText, \"txtText\");\r\n                $this->txtText->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->txtText, 2);\r\n                $this->txtText->Font = NULL;\r\n                $this->txtText->Name = \"txtText\";\r\n                // \r\n                // cmdOK\r\n                // \r\n                $this->cmdOK->AccessibleDescription = NULL;\r\n                $this->cmdOK->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdOK, \"cmdOK\");\r\n                $this->cmdOK->BackgroundImage = NULL;\r\n                $this->cmdOK->Font = NULL;\r\n                $this->cmdOK->Name = \"cmdOK\";\r\n                $this->cmdOK->UseVisualStyleBackColor = true;\r\n                $this->cmdOK->Click->Add(new System:::EventHandler(array($this, \"cmdOK_Click\")));\r\n                // \r\n                // cmdCancel\r\n                // \r\n                $this->cmdCancel->AccessibleDescription = NULL;\r\n                $this->cmdCancel->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdCancel, \"cmdCancel\");\r\n                $this->cmdCancel->BackgroundImage = NULL;\r\n                $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel;\r\n                $this->cmdCancel->Font = NULL;\r\n                $this->cmdCancel->Name = \"cmdCancel\";\r\n                $this->cmdCancel->UseVisualStyleBackColor = true;\r\n                $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, \"cmdCancel_Click\")));\r\n                // \r\n                // InputBox\r\n                // \r\n                $this->AcceptButton = $this->cmdOK;\r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font;\r\n                $this->BackgroundImage = NULL;\r\n                $this->CancelButton = $this->cmdCancel;\r\n                $this->Controls->Add($this->tlpMain);\r\n                $this->Font = NULL;\r\n                $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog;\r\n                $this->Icon = NULL;\r\n                $this->MaximizeBox = false;\r\n                $this->MinimizeBox = false;\r\n                $this->Name = \"InputBox\";\r\n                $this->ShowIcon = false;\r\n                $this->ShowInTaskbar = false;\r\n                $this->tlpMain->ResumeLayout(false);\r\n                $this->tlpMain->PerformLayout();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/InputBox.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Cancel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPrompt.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtText.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>75, 23</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtText.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tlpMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Text\" xml:space=\"preserve\">\r\n    <value>Enter text</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>InputBox</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>65, 89</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>411, 122</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtText.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"txtText.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>405, 20</value>\r\n  </data>\r\n  <data name=\"tlpMain.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"lblPrompt\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"txtText\" Row=\"1\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"cmdOK\" Row=\"2\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"cmdCancel\" Row=\"2\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"Percent,50,Percent,50\" /&gt;&lt;Rows Styles=\"Percent,33,33333,Percent,33,33333,Percent,33,33333\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtText.Name\" xml:space=\"preserve\">\r\n    <value>txtText</value>\r\n  </data>\r\n  <data name=\"txtText.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPrompt.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>52, 13</value>\r\n  </data>\r\n  <data name=\"txtText.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 50</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPrompt.Name\" xml:space=\"preserve\">\r\n    <value>lblPrompt</value>\r\n  </data>\r\n  <data name=\"cmdOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Name\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>411, 122</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Name\" xml:space=\"preserve\">\r\n    <value>cmdCancel</value>\r\n  </data>\r\n  <data name=\"lblPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"lblPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 13</value>\r\n  </data>\r\n  <data name=\"cmdOK.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"txtText.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left, Right</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>75, 23</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPrompt.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>270, 89</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;OK</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tlpMain.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.ZOrder\" xml:space=\"preserve\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\r\n    <value>6, 13</value>\r\n  </data>\r\n  <data name=\"lblPrompt.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>InputBox</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Name\" xml:space=\"preserve\">\r\n    <value>cmdOK</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tlpMain.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/InputBox.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\nimport namespace System:::Windows:::Forms;\r\nimport namespace RegEditPHP;\r\n\r\nnamespace RegEditPHP{\r\n    ///<summary>This is simple string input box</summary>\r\n\tpartial class InputBox extends System:::Windows:::Forms:::Form{\r\n            //Called by __construct (I've written the call there)\r\n            private function Init(){\r\n                $this->DialogResult=DialogResult::Cancel;\r\n            }\r\n            //OK\r\n            private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult = DialogResult::OK;\r\n            }\r\n            //Cancel\r\n            private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult = DialogResult::Cancel;\r\n            }\r\n            public static function GetInput(string $Promtp, string $Title, string $DefaultValue=\"\"){\r\n                $form=new InputBox();//Create instance\r\n                //Initialize it\r\n                $form->Text = $Title;\r\n                $form->lblPrompt->Text=$Promtp;\r\n                $form->txtText->Text=$DefaultValue;\r\n                $form->txtText->SelectAll();\r\n                $form->ShowDialog();//Show it\r\n                //Depending on result\r\n                if($form->DialogResult == DialogResult::OK)\r\n                    return $form->Value;//Return value\r\n                else\r\n                    return null;//Or null\r\n            }\r\n            //PHP magic method for properties follows:\r\n            public function __get(string $name){\r\n                switch($name):\r\n                    case \"Prompt\": return $this->lblPrompt->Text;\r\n                    case \"Value\": return $this->txtText->Text;\r\n                    default: return $vars[$name];\r\n                endswitch;\r\n            } \r\n            public function __set(string $name,$value){\r\n                switch($name):\r\n                    case \"Prompt\": return $this->lblPrompt->Text=$value;\r\n                    case \"Value\": return $this->txtText->Text=$value;\r\n                    default: return $vars[$name]=$value;\r\n                endswitch;\r\n            }\r\n            public function __isset(string $name){\r\n                switch($name):\r\n                    case \"Prompt\":\r\n                    case \"Value\": return true;\r\n                    default: isset($vars[$name]);\r\n                endswitch;\r\n            }\r\n            public function __unset(string $name){\r\n                switch($name):\r\n                    case \"Prompt\":\r\n                    case \"Value\": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name)));\r\n                    default: unset($vars[$name]);\r\n                endswitch;\r\n            }\r\n            private $vars;\r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/LanguageSelector.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>192, 3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>48, 23</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Storno</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>17, 7</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>34, 13</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Text\" xml:space=\"preserve\">\r\n    <value>Jazyk</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 3</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>229, 21</value>\r\n  </data>\r\n  <data name=\"picWarning.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY\r\n        VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB\r\n        dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi\r\n        Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9\r\n        H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM\r\n        X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S\r\n        /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3\r\n        S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy\r\n        /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT\r\n        Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl\r\n        /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO\r\n        nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9\r\n        1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD\r\n        YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO\r\n        HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU\r\n        /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b\r\n        QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf\r\n        MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD\r\n        i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa\r\n        a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao\r\n        k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv\r\n        wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ\r\n        MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn\r\n        g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt\r\n        SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8\r\n        y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh\r\n        2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6\r\n        1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq\r\n        CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju\r\n        1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP\r\n        tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI\r\n        KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3\r\n        WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V\r\n        A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo\r\n        syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH\r\n        ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT\r\n        si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX\r\n        X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ\r\n        c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He\r\n        oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI\r\n        n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ\r\n        6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ\r\n        cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU\r\n        vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4\r\n        dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA\r\n        hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y\r\n        Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI\r\n        acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ\r\n        Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN\r\n        cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH\r\n        /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk\r\n        zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG\r\n        4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO\r\n        FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU\r\n        TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG\r\n        hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3\r\n        E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9\r\n        iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/\r\n        Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc\r\n        nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW\r\n        Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq\r\n        KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8\r\n        F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+\r\n        /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD\r\n        2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"picWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 43</value>\r\n  </data>\r\n  <data name=\"lblWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 40</value>\r\n  </data>\r\n  <data name=\"lblWarning.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>201, 26</value>\r\n  </data>\r\n  <data name=\"lblWarning.Text\" xml:space=\"preserve\">\r\n    <value>Varování: Po potvrzení změny jazyka se aplikace restartuje.</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Výběr jazyka</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/LanguageSelector.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>47, 3</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>49, 23</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;U redu</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>187, 3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>59, 23</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Odustani</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>20, 7</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>31, 13</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Text\" xml:space=\"preserve\">\r\n    <value>Jezik</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 3</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>229, 21</value>\r\n  </data>\r\n  <data name=\"picWarning.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY\r\n        VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB\r\n        dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi\r\n        Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9\r\n        H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM\r\n        X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S\r\n        /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3\r\n        S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy\r\n        /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT\r\n        Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl\r\n        /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO\r\n        nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9\r\n        1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD\r\n        YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO\r\n        HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU\r\n        /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b\r\n        QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf\r\n        MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD\r\n        i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa\r\n        a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao\r\n        k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv\r\n        wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ\r\n        MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn\r\n        g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt\r\n        SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8\r\n        y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh\r\n        2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6\r\n        1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq\r\n        CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju\r\n        1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP\r\n        tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI\r\n        KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3\r\n        WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V\r\n        A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo\r\n        syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH\r\n        ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT\r\n        si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX\r\n        X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ\r\n        c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He\r\n        oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI\r\n        n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ\r\n        6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ\r\n        cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU\r\n        vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4\r\n        dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA\r\n        hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y\r\n        Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI\r\n        acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ\r\n        Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN\r\n        cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH\r\n        /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk\r\n        zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG\r\n        4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO\r\n        FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU\r\n        TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG\r\n        hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3\r\n        E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9\r\n        iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/\r\n        Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc\r\n        nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW\r\n        Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq\r\n        KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8\r\n        F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+\r\n        /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD\r\n        2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"picWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 43</value>\r\n  </data>\r\n  <data name=\"lblWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 40</value>\r\n  </data>\r\n  <data name=\"lblWarning.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>210, 26</value>\r\n  </data>\r\n  <data name=\"lblWarning.Text\" xml:space=\"preserve\">\r\n    <value>Upozorenje: Ukoliko promijena jezika je potvrđena, aplikacije je ponovo pokrenuta.</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Odabir jezika</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/LanguageSelector.php",
    "content": "﻿<?\r\n    import namespace RegEditPHP;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class LanguageSelector extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $tlpMain;\r\n            \r\n            private $tlpButtons;\r\n            \r\n            private $cmdOK;\r\n            \r\n            private $cmdCancel;\r\n            \r\n            private $lblLanguage;\r\n            \r\n            private $cmbLanguage;\r\n            \r\n            private $picWarning;\r\n            \r\n            private $lblWarning;\r\n            \r\n            private $lblCulture;\r\n            \r\n            private $components = NULL;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n                $this->Init();\r\n            }\r\n            \r\n            private function InitializeComponent() {\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf LanguageSelector );\r\n                $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->tlpButtons = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->cmdOK = new System:::Windows:::Forms:::Button();\r\n                $this->cmdCancel = new System:::Windows:::Forms:::Button();\r\n                $this->lblLanguage = new System:::Windows:::Forms:::Label();\r\n                $this->cmbLanguage = new System:::Windows:::Forms:::ComboBox();\r\n                $this->picWarning = new System:::Windows:::Forms:::PictureBox();\r\n                $this->lblWarning = new System:::Windows:::Forms:::Label();\r\n                $this->lblCulture = new System:::Windows:::Forms:::Label();\r\n                $this->tlpMain->SuspendLayout();\r\n                $this->tlpButtons->SuspendLayout();\r\n                $this->picWarning->BeginInit();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tlpMain\r\n                // \r\n                $this->tlpMain->AccessibleDescription = NULL;\r\n                $this->tlpMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpMain, \"tlpMain\");\r\n                $this->tlpMain->BackgroundImage = NULL;\r\n                $this->tlpMain->Controls->Add($this->tlpButtons, 0, 3);\r\n                $this->tlpMain->Controls->Add($this->lblLanguage, 0, 0);\r\n                $this->tlpMain->Controls->Add($this->cmbLanguage, 1, 0);\r\n                $this->tlpMain->Controls->Add($this->picWarning, 0, 2);\r\n                $this->tlpMain->Controls->Add($this->lblWarning, 1, 2);\r\n                $this->tlpMain->Controls->Add($this->lblCulture, 0, 1);\r\n                $this->tlpMain->Font = NULL;\r\n                $this->tlpMain->Name = \"tlpMain\";\r\n                // \r\n                // tlpButtons\r\n                // \r\n                $this->tlpButtons->AccessibleDescription = NULL;\r\n                $this->tlpButtons->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpButtons, \"tlpButtons\");\r\n                $this->tlpButtons->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->tlpButtons, 2);\r\n                $this->tlpButtons->Controls->Add($this->cmdOK, 0, 0);\r\n                $this->tlpButtons->Controls->Add($this->cmdCancel, 1, 0);\r\n                $this->tlpButtons->Font = NULL;\r\n                $this->tlpButtons->Name = \"tlpButtons\";\r\n                // \r\n                // cmdOK\r\n                // \r\n                $this->cmdOK->AccessibleDescription = NULL;\r\n                $this->cmdOK->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdOK, \"cmdOK\");\r\n                $this->cmdOK->BackgroundImage = NULL;\r\n                $this->cmdOK->Font = NULL;\r\n                $this->cmdOK->Name = \"cmdOK\";\r\n                $this->cmdOK->UseVisualStyleBackColor = true;\r\n                $this->cmdOK->Click->Add(new System:::EventHandler(array($this, \"cmdOK_Click\")));\r\n                // \r\n                // cmdCancel\r\n                // \r\n                $this->cmdCancel->AccessibleDescription = NULL;\r\n                $this->cmdCancel->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdCancel, \"cmdCancel\");\r\n                $this->cmdCancel->BackgroundImage = NULL;\r\n                $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel;\r\n                $this->cmdCancel->Font = NULL;\r\n                $this->cmdCancel->Name = \"cmdCancel\";\r\n                $this->cmdCancel->UseVisualStyleBackColor = true;\r\n                $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, \"cmdCancel_Click\")));\r\n                // \r\n                // lblLanguage\r\n                // \r\n                $this->lblLanguage->AccessibleDescription = NULL;\r\n                $this->lblLanguage->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblLanguage, \"lblLanguage\");\r\n                $this->lblLanguage->Font = NULL;\r\n                $this->lblLanguage->Name = \"lblLanguage\";\r\n                // \r\n                // cmbLanguage\r\n                // \r\n                $this->cmbLanguage->AccessibleDescription = NULL;\r\n                $this->cmbLanguage->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmbLanguage, \"cmbLanguage\");\r\n                $this->cmbLanguage->BackgroundImage = NULL;\r\n                $this->cmbLanguage->DropDownStyle = System:::Windows:::Forms:::ComboBoxStyle::DropDownList;\r\n                $this->cmbLanguage->Font = NULL;\r\n                $this->cmbLanguage->FormattingEnabled = true;\r\n                $this->cmbLanguage->Name = \"cmbLanguage\";\r\n                $this->cmbLanguage->SelectedIndexChanged->Add(new System:::EventHandler(array($this, \"cmbLanguage_SelectedIndexChanged\")));\r\n                // \r\n                // picWarning\r\n                // \r\n                $this->picWarning->AccessibleDescription = NULL;\r\n                $this->picWarning->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->picWarning, \"picWarning\");\r\n                $this->picWarning->BackgroundImage = NULL;\r\n                $this->picWarning->Font = NULL;\r\n                $this->picWarning->ImageLocation = NULL;\r\n                $this->picWarning->Name = \"picWarning\";\r\n                $this->picWarning->TabStop = false;\r\n                // \r\n                // lblWarning\r\n                // \r\n                $this->lblWarning->AccessibleDescription = NULL;\r\n                $this->lblWarning->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblWarning, \"lblWarning\");\r\n                $this->lblWarning->Font = NULL;\r\n                $this->lblWarning->Name = \"lblWarning\";\r\n                // \r\n                // lblCulture\r\n                // \r\n                $this->lblCulture->AccessibleDescription = NULL;\r\n                $this->lblCulture->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblCulture, \"lblCulture\");\r\n                $this->tlpMain->SetColumnSpan($this->lblCulture, 2);\r\n                $this->lblCulture->Font = NULL;\r\n                $this->lblCulture->Name = \"lblCulture\";\r\n                // \r\n                // LanguageSelector\r\n                // \r\n                $this->AcceptButton = $this->cmdOK;\r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font;\r\n                $this->BackgroundImage = NULL;\r\n                $this->CancelButton = $this->cmdCancel;\r\n                $this->Controls->Add($this->tlpMain);\r\n                $this->Font = NULL;\r\n                $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog;\r\n                $this->Icon = NULL;\r\n                $this->MaximizeBox = false;\r\n                $this->MinimizeBox = false;\r\n                $this->Name = \"LanguageSelector\";\r\n                $this->ShowIcon = false;\r\n                $this->ShowInTaskbar = false;\r\n                $this->tlpMain->ResumeLayout(false);\r\n                $this->tlpMain->PerformLayout();\r\n                $this->tlpButtons->ResumeLayout(false);\r\n                $this->tlpButtons->PerformLayout();\r\n                $this->picWarning->EndInit();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/LanguageSelector.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"&gt;&gt;lblLanguage.Name\" xml:space=\"preserve\">\r\n    <value>lblLanguage</value>\r\n  </data>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpButtons.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblCulture.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCulture.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>191, 3</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>289, 185</value>\r\n  </data>\r\n  <data name=\"lblCulture.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"cmdCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblWarning.ZOrder\" xml:space=\"preserve\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"tlpMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 156</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblWarning.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmdOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblLanguage.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>50, 23</value>\r\n  </data>\r\n  <data name=\"lblCulture.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>144, 27</value>\r\n  </data>\r\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>289, 185</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblWarning.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"picWarning.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>48, 48</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picWarning.ZOrder\" xml:space=\"preserve\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"lblLanguage.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"picWarning.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"lblCulture.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>0, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"picWarning.SizeMode\" type=\"System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms\">\r\n    <value>AutoSize</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Select language</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\r\n    <value>0, 0, 0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Name\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"lblWarning.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>193, 26</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Name\" xml:space=\"preserve\">\r\n    <value>cmdOK</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>32, 23</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Name\" xml:space=\"preserve\">\r\n    <value>cmdCancel</value>\r\n  </data>\r\n  <data name=\"picWarning.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Top, Right</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>64, 3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdCancel.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Name\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"picWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>10, 43</value>\r\n  </data>\r\n  <data name=\"tlpMain.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"tlpButtons\" Row=\"3\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"lblLanguage\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"cmbLanguage\" Row=\"0\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"picWarning\" Row=\"2\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblWarning\" Row=\"2\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblCulture\" Row=\"1\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"AutoSize,0,Percent,100\" /&gt;&lt;Rows Styles=\"AutoSize,0,AutoSize,0,Percent,100,AutoSize,0\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"tlpButtons.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Cancel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblLanguage.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblLanguage.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Parent\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCulture.Name\" xml:space=\"preserve\">\r\n    <value>lblCulture</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>LanguageSelector</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picWarning.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"tlpMain.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"tlpMain.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>289, 29</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmbLanguage.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"tlpMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tlpButtons.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>56, 3</value>\r\n  </data>\r\n  <data name=\"tlpMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"cmdOK.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;OK</value>\r\n  </data>\r\n  <data name=\"tlpButtons.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"cmdOK\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"cmdCancel\" Row=\"0\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"Percent,50,Percent,50\" /&gt;&lt;Rows Styles=\"AutoSize,0\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"lblWarning.Text\" xml:space=\"preserve\">\r\n    <value>Warning: When change of language is confirmed application is restarted.</value>\r\n  </data>\r\n  <data name=\"picWarning.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAADuFJREFUaEPtWXlY\r\n        VFeeLXcRN9pdI4gLMWISx7XTMaRFJ+ooGQ2tYmMyY/IxrRGVuCZoFjVxzzJREVA2BUoUEAoEigKkoChB\r\n        dlxwwchaZRVVQDVbsejp8x6YTuabHjtKO/1H6vvO9x5UvXvP79z7O/d375NIfv38qsCvCnS5Al6nfWwi\r\n        Ii8GxMTEFPj4+Ppu3bptJjvpQ3Tr8s66ukF/P//eodLQQ3Fx8UhKSkZk5MVHO3d+/D37GUv07ur+urw9\r\n        H59TbufOnWtVKlUMQI20NBX8/QNaXF3XbGdnQ4nuXd5pVzXo5eX1gp+fX4tKpUZcXAxSUg5CqUyBQpEM\r\n        X99TTTY2495gXwO6qr8ub8fX1zeO8/5hcko2oqO24UGlBFEXt0ClKsKZM2fN7u4bQ9jpeKJnl3f+rA1S\r\n        /dlU33z1ai58fIJQWvIaAAkaaqYjJCSYI6GCn59/68yZM53Zl9U/XUKfPn36rlKpRFR0MuTxW4DWXmg3\r\n        S/CISIxzQ1b2XdCZ2vfvP3Cd5KcQfZ9VtC573sfHZ3NISEhLbm4RAgK8UFs9lQFI0NbUA+1NEpjrhiMy\r\n        /ASuZl/n94Fty5cv/4Sdj/ynSOhTp071p/p/zs3Ng0yWgqtX1gDtHeRbG3ujtd4C7Q0SpMQvR0FhKZKT\r\n        Lz86duy4nuRnEJZdpuLTNsTE9Y2IiDTnF9xCSPC3MJtGi6q3NliQfD+0mvqLaK4eDVnUcRQWlSAwMKjl\r\n        /fc/OMk+rYkeT9v3Mz938uTJSYJt3rx5CzExChTk/DvJ90F7I1VvtCT6d2IAHtZb4nKsA27fLkVWVjZO\r\n        nTrdNHbs2PkkMeiZiTxtAxRfnZSU9DA/nwl64VOgeQjqdP2gK+9PDPgJBqK+eiBa9SMQF/0p7tzVQCo9\r\n        1+Lp6Sln35OIXk/L4amfo/rOAQEBzffulSP8QghqNHPRVGuB775xwqpVroQLVq5cJeK999bB38cRjZXD\r\n        YCpzgCw6Ateu3xJW6NY5c+a4kMSQ52qrTNweTNyqwsIipKsKkZm+jepbosEwCB4ebvD03EPsxscf78KO\r\n        HZ7YsnUPDn65BNV3xsJcYQ35xW0oq6hBQkJi+4EDB2+QvP1ztVVOnU/Dw8NbNBojV9wA1Oun4VH9QDRU\r\n        /wbbtr5H0ruJHdi+fTu2bNmCTZt24eC+BdAX28BcOQnG4mlIkAVBozUgKOhM+7Jlyz0ZwKjnYqvHjh0b\r\n        QvUbtdoHyMm5gaKc90l+MNpqR6Kxeih2bnel4lSdxD08PLBx40a4/dcWHPnKEcbb49FYao/6O9ZIuvCf\r\n        MBhbQPt9dOKEl8HCwmL2c7FVqh+mUCiajcZmJMT6oNkwCa3GEWgz2qBRPwyeO1fC3X2rSHzdunVwc3OD\r\n        i+ufcPQrB5huT0RDyRQGYAd9nj2SZH6ob2xDaKi05cMPN5xhADbEP65OOnHixHTaZmt9g5nq56M4dyXa\r\n        a0bArB+HlurxaKLL7PpkOT74gKqT+Nq1a7FmzRo4LVuDI3t+S+ITGcQU1BVPRm3RaMQHLYDJZEZlpVao\r\n        k5pfeOGFtxjA4Kd2lic9yKlzKy8v/9Fd2uBV9fdoNYyHWWeDZu1EtOjsGMBIfO65GK6ubiJxFxcXODuv\r\n        wPy3nHHos5lo4AjU3ZyMmqKJqC2cAK16JOLP7YW5FYiNvdS2a9fuVHKwI7p+4+Pt7b02ODjY3NLyCCnJ\r\n        MairXIAW/ViSt0OzZjLMmilo0I3EF7v+Fc4r3sU777wDJycnLFmyBPMcnXD0i2kw3bBFTeFEGPPHw5hn\r\n        g5rcYUgPsccPd2+jztQo1klvvOHwHgMQNj5dt/0U6h2irqysHDdulqIgaycXJSqvoepVL6GpYgqaiUbt\r\n        SOz1fBOLF6/AwoULRSxatAiO851wbP801BWRdME4GHOtYcweDWPWSOiU/RATtAFNZnDfkNF+9OjXP5D8\r\n        y4TFk2bE3/09E9dbJpO11Ne3Ii72LOorfkfFJ6CpkqTLiTJ70V0aqxjAx7/F3DcWw8HBAfPmzRODeGvh\r\n        2/A99DJMBaOp+hgYskbBcGUEqjOGEQNQEm2FRFkIGpsfChuftmXLlu0mudFdYqvCNlGwTYOhBlevFuD6\r\n        1ffRqp1A4i+ROKfNfdriPXu6iz0TdAL2bp+GWbMdMXfuXDg6OmLR4sVYstQZ/kemwJQ/AsbMkahWk7hq\r\n        CPTpg6BXDoA2kTu34wtRW2dmsXftkZfXya6zVaqfkJqq5KJVC7nsIJqrXiF5OzRQ9Yb7L6O+ZCpMd0ju\r\n        1kuov2WLzzwmYOiICbC2tsbkyZMxY8YsvD7XEb5f2kCf1Bu61P7QpvaDNtkCWgWR2Ae6xF4oDZdAFrIP\r\n        tfVtQp3UShsWtp/jnslWqb4D6x2qb8KlWBmqS5w51yei/n6Hl9fesIGxYBSqmYzV2VbQqSyx23042KkI\r\n        KysrTLJ7EXNec4DvF8OhjeuGKnl3VCXwKtzHEjIimoiSIOnkv6C4+AfcLflBsNUWOzu7pZ22+ssTWqh3\r\n        WPKWZmfnPMzMuoa0xM9JmnP42jAY8gZDn00lM6lkBkHi2nRWoSoL7N86TCTft29fcRSEEVjqtAxn9w8V\r\n        A9DEdxKPEYhLfiRfdVGCeyESRHpvRpXOxPI8ts3Tc1ca23rxqWyVtvlRaGhoc3m5FpEXAqEtmApDTnfo\r\n        syygI3HdFQaQQaiINEto6CZ6BvD9riEMoBsGDhwIKshccMBq1zU4d8AK2ksCeZKWCcQJqi4Qr4joRnRH\r\n        ZQT3z0eHIydLzVEoFWy1nbm0lgEM+0W2KtQ7HIGG69dvQJGSCVWcK2ryepC8ZQdxdQdxTZqADvIapQWT\r\n        si8C9g1iAN0xYOBgvPjiZLqRI2uhdQyAoyQE8Jg8iVdGEiL5bigP74GK8z1QGixB2LeuuFeqR2Ki4uHX\r\n        X39zn+Rf+UW2ysQNoW2ab968B2nwYWizx6A6kwnYqbrmMXklyTMhNakW0KT0wQNlXyR69SH54bC2nYDZ\r\n        c17nYuaMd99djYuHukMrzHlBeYE81X6svEC8PIw414vojpun++NCkBfulJQJ2882ruoHGcAY4snbT6He\r\n        oW2S/B1ER8ci69Kb9O1e4nT5kfhj1UXiRHJvaOgwWkVPlDMhi6VE6GN0F+/LSLgyktPkMflwQfXuKBfI\r\n        n+uBMimdSNobpaF9UHpWAulXr3PRvIv0dDVOnvQ2MadeYwBPPtXj1LlG24RcoUJ8+GYq35Go4nRRCviJ\r\n        6kkkT+IaRS9oEnugKr4HdAlUWt4TBcE9EfOtJYqCu0HPxNVS+Y4pQ+VpmeVhJC+q3pPkBZB8CMkH90FZ\r\n        cG/cOSVBiNdOXCsuFarVdnd3dykDsP0/bZXnO0sDAwP/XFB4E0GBPrifNpmJSXIieYF4J3l6uCapD6oU\r\n        vWmLvWiLPWmLDIAuUy2X4PiOfnjZfjxeeXUm3l7qiJB9Q6HpnPMV5zvJU/UO8lQ+5K/khQBKgy1QxlG4\r\n        dHQaUi+rkJGRSVv1e2yr//upHpXvTejV6iu4GCVHnHQNDBl96DCPlec1hQEkEwqOiIIBJDKAeAYQ3xGA\r\n        hsrLv++JwYMHo/+AobC3n4rfOy7C6tUuSPMaQOWFKcNpFibMdSotteCUIUL6EZY/Q3loP5T4SRB8dC1y\r\n        Cu4gPCKyfc+evdkcgcmE8K7h5x+qv0cqlTZmXMmHn/cX0GSMhz5jEHRp9O+0IdAqhzAAWmHSYGIQAxjI\r\n        acMyIIGOFE+HiedU44p62GMoXagfxowZA27Ywe0i3v0PN0gP2KEqsienkBDIQAYyiIEMZiBWfxMVYZaQ\r\n        Hx6DhCgp1Fl5wiFAm4PDm25kPvxntirUO1S/SX0liwexoVCGz0MNq0W92pZBEOm20KWPgz7NhtUjkWrN\r\n        cmAsdMljoEsaA71ilAhdEivL70bBasgw2NpOxIIFC0h+LTZu9kDU0YnQx46mjVqjMtqGyTyOsEXF/0DH\r\n        /zsRZYOqCCsE75sPlTqXpiJ7yGq1lORf/Zmt0jZl0dHR5qSUKwjy3oTa/FdZr8+CMWc2DNlEFpE5ixXk\r\n        zA5kzCCmwyhANQ2G9A7UpPO5tFfxyZ/sMX36LBZxy7DBfSOO7FqEIulLMCTPZN0zCzr5bCb634ZOLvyG\r\n        4G8NSTOQ5j0FsWHeSM/IFvcMfFly+Edb9TrpZcsEac7IyIK/nw9y5MvReOvfUHfjbdRdE+DEOt4JpsJO\r\n        FPCav5SlMcFrfd4SmATkdqCB97WZi5HgNx9eX85HxLF5KJZxRDOWokb9NoPuhGoZDJ0w8iqi87saXmvU\r\n        TqjthClzEUIPL0YyX5TEx8uFlyUNzLOOlyV+p/0SuOIhXq5EfMQe1N905q5pFeHCzQev+S4cDd7nreJG\r\n        hH/n/BQrOdUErBBhzFrBEeJ95krU8b5a9Q6nnzNHayXvV/FegIsInYC0zmv6av5PgAv3By78/WoY1Oy3\r\n        E7WZLqxenRDlvxcpSjXOng1u27Rp80UGMF7ClS6GOyHxNVBaagLO+x+A9MSnCGMiCzjvswfhp/bh4ul9\r\n        iPL7CtEBByALPIhLZ44gPvhrJIR+g8Rz30Jx/jselRxDyoXjxAlcjjgBZaQXUgnh/jKP14Xvkvkbxfn/\r\n        Fp+R81mhjRi2JQs8xLYPkuR+9vWl2OcF9n1e4OH1OaRen0GZFM/T7VTI5Yk8ttmqZgC/k/DwKYwjUJmc\r\n        nILkFCVSUjOQmnZFhDI9U5x3ggNk8+w/n+vDNa7Qt+7cR8n9Sp6uaVGlNUJvqENNXSNMDS3cVbWJm/TW\r\n        Rzxl5zsaAW28b2kDt43tMDW2oNbUxGdM0OiMKK/Usa0K3L5bykXrLvsoFvvKzM5n4uaIHB7zSU1NQ2pq\r\n        KsLCzjfy6FLBAN6S8Chj6oYN7kl8f1VJ6Inqn4Ibi+qNGzdVb9q0Sc9h02/e7KH38PhI/9FHW0RQCRF8\r\n        F6zftk3Adj1F6cQOXneI/xO+5+90fEbH50WwLR3bfMC2H7CfB+z3Abk84BmRiPXrP9SuX79eu25dBzr+\r\n        /lC7evUfC4cPH36AAcwVFgNhURAOlN4klhMriJX/AAjt/j34A3/3JAg854k50LkgCEH8hhDOJ4Wq73lD\r\n        2MD/Egg8hRPtrju5EJT4//j8BRF/EKYjOWqaAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"lblCulture.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\r\n    <value>MiddleCenter</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Parent\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"tlpButtons.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmbLanguage.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmbLanguage.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCulture.ZOrder\" xml:space=\"preserve\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left, Right</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"lblCulture.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"lblWarning.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\r\n    <value>6, 13</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 7</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Text\" xml:space=\"preserve\">\r\n    <value>Language</value>\r\n  </data>\r\n  <data name=\"lblWarning.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"tlpButtons.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"cmbLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>222, 21</value>\r\n  </data>\r\n  <data name=\"lblLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>55, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picWarning.Name\" xml:space=\"preserve\">\r\n    <value>picWarning</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picWarning.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblWarning.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>64, 40</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmbLanguage.Name\" xml:space=\"preserve\">\r\n    <value>cmbLanguage</value>\r\n  </data>\r\n  <data name=\"cmdCancel.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblWarning.Name\" xml:space=\"preserve\">\r\n    <value>lblWarning</value>\r\n  </data>\r\n  <data name=\"lblLanguage.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCulture.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/LanguageSelector.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace System:::ComponentModel;\r\n    import namespace System:::Drawing;\r\n    import namespace RegEditPHP;\r\n\r\n    namespace RegEditPHP{\r\n        ///<summary>Allows user to select application languiage</summary>\r\n\t    partial class LanguageSelector extends System:::Windows:::Forms:::Form{\r\n\t        //Called by __construct\r\n\t        private function Init(){\r\n\t            //To do not have to react on Closing event and detect if it is via X button or command button\r\n\t            $this->DialogResult = DialogResult::Cancel;\r\n\t            //We must show available languages\r\n\t            // Languages are stored in the culture-named subdireactories of directory where assembly resides\r\n\t            $MyType = CLRTypeOf LanguageSelector;\r\n\t            $MyAsm = $MyType->Assembly;//Get the assembly\r\n\t            $AsmPath = $MyAsm->Location;\r\n\t            //get assembly directory\r\n\t            $AsmDir = System:::IO:::Path::GetDirectoryName($AsmPath);\r\n\t            //Then there is defaut laguage chosen by .NET itself depending on available languages and system locale\r\n\t            $this->cmbLanguage->Items->Add(Program::$Resources->DefaultLanguage);\r\n\t            //And there is language stored in current assebly instead of in satellite one\r\n\t            // it is indicated by AssemblyCultureAttribute\r\n                $this->cmbLanguage->Items->Add(new System:::Globalization:::CultureInfo($MyAsm->GetCustomAttributes(CLRTypeOf System:::Reflection:::AssemblyCultureAttribute,false)->GetValue(0)->Culture));\r\n\t            $this->cmbLanguage->SelectedIndex=0;\r\n\t            $this->cmbLanguage->DisplayMember=\"NativeName\";//Combobox will show NativeName of items to user\r\n\t            try{//Languages in subdirs\r\n\t                foreach(System:::IO:::Directory::GetDirectories($AsmDir) as $SubDir):\r\n    \t                try{\r\n    \t                    //Check if it is correct culture name\r\n    \t                    $ci=new System:::Globalization:::CultureInfo(System:::IO:::Path::GetFileName($SubDir));\r\n    \t                    $sta=$MyAsm->GetSatelliteAssembly($ci);\r\n    \t                    $this->cmbLanguage->Items->Add($ci);\r\n    \t                    //And if it really is satellite assembly\r\n    \t                    if(System:::Globalization:::CultureInfo::$CurrentUICulture->Equals($ci))\r\n    \t                        $this->cmbLanguage->SelectedIndex = $this->cmbLanguage->Items->Count - 1;\r\n    \t                }catch(System:::Exception $ex){}\r\n\t                endforeach;\r\n\t             }catch(System:::Exception $ex){}\r\n\t        }\r\n\t        //OK\r\n            private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult  =DialogResult::OK;\r\n                //Save in setting\r\n                Program::$Settings->Culture = ($this->cmbLanguage->SelectedItem instanceof System:::Globalization:::CultureInfo) ? $this->cmbLanguage->SelectedItem->Name : \"\";\r\n                $this->Close();\r\n            }\r\n            //Cancel\r\n            private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult  =DialogResult::Cancel;\r\n                $this->Close();\r\n            }\r\n            //Change of selected language\r\n            private function cmbLanguage_SelectedIndexChanged(System:::Object $sender, System:::EventArgs $e) {\r\n                $item = $sender->SelectedItem;\r\n                //Show some info\r\n                if($item instanceof System:::Globalization:::CultureInfo):\r\n                    $this->lblCulture->Text = \"$item->Name: $item->EnglishName, $item->NativeName, $item->DisplayName\";\r\n                else:\r\n                    $this->lblCluture->Text = \"\";\r\n                endif;\r\n            }            \r\n\t       \r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/NumericEditor.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"nudValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>143, 20</value>\r\n  </data>\r\n  <data name=\"optDec.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 29</value>\r\n  </data>\r\n  <data name=\"optDec.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>68, 17</value>\r\n  </data>\r\n  <data name=\"optDec.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Desítkově</value>\r\n  </data>\r\n  <data name=\"optHex.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>77, 29</value>\r\n  </data>\r\n  <data name=\"optHex.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>69, 17</value>\r\n  </data>\r\n  <data name=\"optHex.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Šestnáctkově</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>149, 50</value>\r\n  </data>\r\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>149, 50</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/NumericEditor.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"optHex.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>83, 29</value>\r\n  </data>\r\n  <data name=\"optHex.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>56, 17</value>\r\n  </data>\r\n  <data name=\"optHex.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Heksa</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/NumericEditor.php",
    "content": "<?\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Windows:::Forms;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class NumericEditor extends System:::Windows:::Forms:::UserControl {\r\n            \r\n            private $tlpMain;\r\n            \r\n            private $nudValue;\r\n            \r\n            private $optDec;\r\n            \r\n            private $optHex;\r\n            \r\n            private $components = NULL;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n                $this->Init();\r\n            }\r\n            \r\n            public function InitializeComponent() {\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf NumericEditor );\r\n                $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->nudValue = new System:::Windows:::Forms:::NumericUpDown();\r\n                $this->optDec = new System:::Windows:::Forms:::RadioButton();\r\n                $this->optHex = new System:::Windows:::Forms:::RadioButton();\r\n                $this->tlpMain->SuspendLayout();\r\n                $this->nudValue->BeginInit();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tlpMain\r\n                // \r\n                $this->tlpMain->AccessibleDescription = NULL;\r\n                $this->tlpMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpMain, \"tlpMain\");\r\n                $this->tlpMain->BackgroundImage = NULL;\r\n                $this->tlpMain->Controls->Add($this->nudValue, 0, 0);\r\n                $this->tlpMain->Controls->Add($this->optDec, 0, 1);\r\n                $this->tlpMain->Controls->Add($this->optHex, 1, 1);\r\n                $this->tlpMain->Font = NULL;\r\n                $this->tlpMain->Name = \"tlpMain\";\r\n                // \r\n                // nudValue\r\n                // \r\n                $this->nudValue->AccessibleDescription = NULL;\r\n                $this->nudValue->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->nudValue, \"nudValue\");\r\n                $this->tlpMain->SetColumnSpan($this->nudValue, 2);\r\n                $this->nudValue->Font = NULL;\r\n                $this->nudValue->Name = \"nudValue\";\r\n                // \r\n                // optDec\r\n                // \r\n                $this->optDec->AccessibleDescription = NULL;\r\n                $this->optDec->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->optDec, \"optDec\");\r\n                $this->optDec->BackgroundImage = NULL;\r\n                $this->optDec->Checked = true;\r\n                $this->optDec->Font = NULL;\r\n                $this->optDec->Name = \"optDec\";\r\n                $this->optDec->TabStop = true;\r\n                $this->optDec->UseVisualStyleBackColor = true;\r\n                $this->optDec->CheckedChanged->Add(new System:::EventHandler(array($this, \"opt_CheckedChanged\")));\r\n                // \r\n                // optHex\r\n                // \r\n                $this->optHex->AccessibleDescription = NULL;\r\n                $this->optHex->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->optHex, \"optHex\");\r\n                $this->optHex->BackgroundImage = NULL;\r\n                $this->optHex->Font = NULL;\r\n                $this->optHex->Name = \"optHex\";\r\n                $this->optHex->UseVisualStyleBackColor = true;\r\n                $this->optHex->CheckedChanged->Add(new System:::EventHandler(array($this, \"opt_CheckedChanged\")));\r\n                // \r\n                // NumericEditor\r\n                // \r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->BackgroundImage = NULL;\r\n                $this->Controls->Add($this->tlpMain);\r\n                $this->Font = NULL;\r\n                $this->MaximumSize = new System:::Drawing:::Size(0, 50);\r\n                $this->MinimumSize = new System:::Drawing:::Size(149, 50);\r\n                $this->Name = \"NumericEditor\";\r\n                $this->tlpMain->ResumeLayout(false);\r\n                $this->tlpMain->PerformLayout();\r\n                $this->nudValue->EndInit();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/NumericEditor.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"&gt;&gt;optDec.Name\" xml:space=\"preserve\">\r\n    <value>optDec</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>NumericEditor</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tlpMain.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"optHex.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"tlpMain.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\r\n    <value>0, 0, 0, 0</value>\r\n  </data>\r\n  <data name=\"optDec.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"nudValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>143, 20</value>\r\n  </data>\r\n  <data name=\"tlpMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;nudValue.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optDec.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"nudValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 3</value>\r\n  </data>\r\n  <data name=\"optHex.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>86, 29</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>149, 50</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optHex.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"nudValue.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left, Right</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"optHex.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>50, 17</value>\r\n  </data>\r\n  <data name=\"optHex.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"optHex.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Top</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optDec.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"optHex.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Hexa</value>\r\n  </data>\r\n  <data name=\"nudValue.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;nudValue.Name\" xml:space=\"preserve\">\r\n    <value>nudValue</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optHex.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"optDec.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Top</value>\r\n  </data>\r\n  <data name=\"optDec.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>5, 29</value>\r\n  </data>\r\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>149, 50</value>\r\n  </data>\r\n  <data name=\"tlpMain.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"nudValue\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"optDec\" Row=\"1\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"optHex\" Row=\"1\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"Percent,50,Percent,50\" /&gt;&lt;Rows Styles=\"AutoSize,0,Percent,100\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optHex.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Name\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"tlpMain.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"optDec.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"optDec.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Decimal</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optDec.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"optDec.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>63, 17</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;optHex.Name\" xml:space=\"preserve\">\r\n    <value>optHex</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;nudValue.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;nudValue.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/NumericEditor.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\nimport namespace System:::Windows:::Forms;\r\nimport namespace RegEditPHP;\r\n\r\nnamespace RegEditPHP{\r\n    ///<summary>Custom control for number editing</summary>\r\n\tpartial class NumericEditor extends System:::Windows:::Forms:::UserControl{\r\n        //CHnage dex/hex view\r\n        private function opt_CheckedChanged(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->nudValue->Hexadecimal = $this->optHex->Checked;\r\n            }\r\n            //Called by __construct\r\n            private function Init(){\r\n                $this->__set(\"Type\",32);\r\n            }\r\n            //Magic method for properties\r\n            public function __set(string $name,$value){\r\n                switch($name):\r\n                    case \"Value\": return $this->nudValue->Value = $value;\r\n                    case \"Type\":\r\n                        switch($value):\r\n                            case 32:\r\n                                $this->nudValue->Maximum=System:::UInt32::MaxValue;\r\n                            break;\r\n                            case 64:\r\n                                //PHPBUG:\r\n                                //The problem is that Phalanger cannot handle UInt64 (and decimal) values\r\n                                $this->nudValue->Maximum= 18446744073709551615.0;//this will be rounded to double\r\n                            break;\r\n                            default: throw new CLRException(new System:::ArgumentNullException(Program::$Resources->e_3264($name)));\r\n                        endswitch;\r\n                        return $value;\r\n                    default: return $this->$values[$name]=$value;\r\n                endswitch;\r\n            }\r\n            private $values;            \r\n            public function __get(string $name){\r\n                switch($name):\r\n                    case \"Value\":\r\n                        /*$ToInt=\"ToInt\".$this->__get(\"Type\");\r\n                        return System:::Decimal::$ToInt($this->nudValue->Value);*/\r\n                        return $this->nudValue->Value;\r\n                    case \"Type\": return $this->nudValue->Maximum == System:::Int32::MaxValue ? 32 : 64;\r\n                    default: return $this->values[$name];\r\n                endswitch;\r\n            }\r\n            public function __isset(string $name){\r\n                switch($name):\r\n                    case \"Value\": case \"Type\": return true;\r\n                    default: return isset($this->values[$name]);\r\n                endswitch;\r\n            }\r\n            public function __unset(string $name){\r\n                switch($name):\r\n                    case \"Value\": case \"Type\": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name)));\r\n                    default: unset($this->values[$name]);\r\n                endswitch;\r\n            }\t    \r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Program.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\nimport namespace System;\r\nimport namespace System:::Windows:::Forms;\r\nimport namespace System:::Reflection;\r\n\r\nimport namespace RegEditPHP;\r\n\r\nnamespace RegEditPHP{\r\n    //Apply some attributes onto assembly to have some extended info\r\n    [assembly: AssemblyCompanyAttribute(\"The Phalanger Project Team\")]\r\n    [assembly: AssemblyProduct(\"Phalanger\")]\r\n    [assembly: AssemblyTitle(\"RegEditPHP\")]\r\n    [assembly: AssemblyDescription(\"Sample Windows Forms application written in Phalanger - A registry editor\")]\r\n    [assembly: AssemblyVersion(\"2.0.0.1\")]\r\n    [assembly: AssemblyCopyright(\" onny 2009\")]\r\n    [assembly: AssemblyCulture(\"en\")]\r\n    ///<summary>Main class of program</summary>\r\n    class Program{\r\n        ///<summary>Settings</summary>\r\n        static $Settings;\r\n        ///<summary>Version info</summary>\r\n        public static $Version;\r\n        ///<summary>Localized resources</summary>\r\n        public static $Resources;\r\n        ///<summary>Runs program</summary>\r\n\t    static function Main(){\r\n\t        $Type=CLRTypeOf Program;\r\n\t        //get version\r\n\t        self::$Version=new Version($Type->Assembly->GetCustomAttributes(CLRTypeOf AssemblyVersionAttribute,false)->GetValue(0)->Version->ToString());\r\n\t        //Init resources\r\n\t        self::$Resources = new ResourceAccessor(\"RegEditPHP.Resources\");\r\n\t        //Init settings\r\n\t        self::$Settings = new SettingsProvider();\r\n\t        self::$Settings->Load();//Load settings from file\r\n\t        //Set language\r\n\t        if(self::$Settings->Culture)\r\n\t            System:::Threading:::Thread::$CurrentThread->CurrentUICulture = new System:::Globalization:::CultureInfo(self::$Settings->Culture);\r\n\t\t    Application::EnableVisualStyles();//To be nice\r\n\t\t    Application::Run(new frmMain());//Show and wait to close\r\n\t    }\r\n    }\r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/RegEditPHP.exe.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!--Note: This file is embdeded to resulting exe using post-build command writtent at the end of phpproj file.-->\r\n<!--mt.exe is requited to be in PATH system variable-->\r\n<asmv1:assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv1=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv2=\"urn:schemas-microsoft-com:asm.v2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n  <assemblyIdentity version=\"2.0.0.1\" name=\"RegEditPHP\"/>\r\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\r\n    <security>\r\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\r\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\r\n      </requestedPrivileges>\r\n    </security>\r\n  </trustInfo>\r\n</asmv1:assembly>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/RegEditPHP.phpproj",
    "content": "﻿<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>RegEditPHP</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{d5a73f0b-7dea-4f46-879c-14913395db11}</ProjectGuid>\r\n    <CompilationMode>Pure</CompilationMode>\r\n    <OutputType>WinExe</OutputType>\r\n    <AssemblyName>RegEditPHP</AssemblyName>\r\n    <RootNamespace>RegEditPHP</RootNamespace>\r\n    <ApplicationIcon>Resources\\Regedit.ico</ApplicationIcon>\r\n    <TargetPlatform>v4</TargetPlatform>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccProvider>SAK</SccProvider>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n   \r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Drawing\">\r\n      <Name>System.Drawing</Name>\r\n      <AssemblyName>\r\n      </AssemblyName>\r\n    </Reference>\r\n    <Reference Include=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n      <Private>False</Private>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"CLRException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"dlgAbout.user.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"dlgAbout.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"InputBox.user.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"InputBox.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LanguageSelector.user.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LanguageSelector.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"NumericEditor.user.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"NumericEditor.php\">\r\n      <SubType>UserControl</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Program.php\" />\r\n    <Compile Include=\"frmMain.user.php\" />\r\n    <Compile Include=\"frmMain.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ResourceAccessor.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SettingsProvider.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Sorter.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ValueEditor.user.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ValueEditor.php\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"dlgAbout.cs.resx\">\r\n      <DependentUpon>dlgAbout.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"dlgAbout.hr.resx\">\r\n      <DependentUpon>dlgAbout.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"dlgAbout.resx\">\r\n      <DependentUpon>dlgAbout.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"frmMain.cs.resx\">\r\n      <DependentUpon>frmMain.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"frmMain.hr.resx\">\r\n      <DependentUpon>frmMain.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"frmMain.resx\">\r\n      <DependentUpon>frmMain.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"InputBox.cs.resx\">\r\n      <DependentUpon>InputBox.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"InputBox.hr.resx\">\r\n      <DependentUpon>InputBox.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"InputBox.resx\">\r\n      <DependentUpon>InputBox.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"LanguageSelector.cs.resx\">\r\n      <DependentUpon>LanguageSelector.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"LanguageSelector.hr.resx\">\r\n      <DependentUpon>LanguageSelector.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"LanguageSelector.resx\">\r\n      <DependentUpon>LanguageSelector.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"NumericEditor.cs.resx\">\r\n      <DependentUpon>NumericEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"NumericEditor.hr.resx\">\r\n      <DependentUpon>NumericEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"NumericEditor.resx\">\r\n      <DependentUpon>NumericEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"Resources.cs.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"Resources.hr.resx\" />\r\n    <EmbeddedResource Include=\"Resources.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"ValueEditor.cs.resx\">\r\n      <DependentUpon>ValueEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"ValueEditor.hr.resx\">\r\n      <DependentUpon>ValueEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"ValueEditor.resx\">\r\n      <DependentUpon>ValueEditor.php</DependentUpon>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"RegEditPHP.exe.manifest\">\r\n      <SubType>Content</SubType>\r\n    </None>\r\n    <Content Include=\"readme.cs.rtf\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"readme.hr.rtf\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"readme.rtf\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\asc.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\binary.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\copy.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\delete.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\desc.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\edit.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\folder_close.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\folder_open.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\new.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\numeric.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\Phalanger.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\readme.txt\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\refresh.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\Regedit.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\rename.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\save.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\string.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\unknown.ico\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <Content Include=\"Resources\\warning.png\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n    <None Include=\"Resources\\Regedit.ico\">\r\n      <SubType>Content</SubType>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Resources\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n  <PropertyGroup>\r\n    <PostBuildEvent>mt.exe -nologo -manifest \"$(ProjectDir)$(TargetName).exe.manifest\" -outputresource:\"$(TargetDir)$(TargetName).exe;#1\"</PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ResourceAccessor.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace System;\r\n    import namespace RegEditPHP;\r\n\r\n    namespace RegEditPHP{\r\n        ///<summary>Gives easy access to localized resources</summary>\r\n\t    class ResourceAccessor{\r\n\t        //Resource manager\r\n\t        private $manager;\r\n\t        //Culture (not used, null) when null; CurrentUICulture is used by manager\r\n\t        public $Culture;\r\n\t        ///<summary>CTor</summary>\r\n\t        ///<param name=\"ResourceName\">Name of resx file under which it is embdeded</param>\r\n            public function __construct(string $ResourceName){\r\n                $MyType = CLRTypeOf ResourceAccessor;\r\n                $this->manager = new System:::Resources:::ResourceManager($ResourceName,$MyType->Assembly);\r\n             }\r\n             //gets resource\r\n             public function __get(string $name){\r\n                $rs = $this->manager->GetObject($name,$this->Culture);\r\n                return $rs;\r\n             }\r\n             public function __set(string $name, $value){\r\n                throw new CLRException(new InvalidOperationException(Program::$Resources->e_SetResourceValue));\r\n             }\r\n             public function __call(string $name, array $arguments  ){\r\n                return System:::String::Format($this->$name,$arguments);\r\n             }\r\n\t    }    \r\n    }\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Resources/readme.txt",
    "content": "This directory contains resources (images) referenced by resx files."
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Resources.cs.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"Number_d\" xml:space=\"preserve\">\r\n    <value>Zvolte číselnou hodnotu bez znaménka. Můžete použít dekadický nebo šestnáctkový vstup.</value>\r\n  </data>\r\n  <data name=\"Multistring_d\" xml:space=\"preserve\">\r\n    <value>Zadejte řetězcové hodnoty. Na každý řádek jednu.</value>\r\n  </data>\r\n  <data name=\"e_ListViewItem\" xml:space=\"preserve\">\r\n    <value>Hiodnota musí být ListViewItem</value>\r\n  </data>\r\n  <data name=\"e_BinaryNotEven\" xml:space=\"preserve\">\r\n    <value>Počet číslic reprezentujících poly bytů musí být sudý.</value>\r\n  </data>\r\n  <data name=\"KeepBoth\" xml:space=\"preserve\">\r\n    <value>Chcete zachovat oba klíče?</value>\r\n  </data>\r\n  <data name=\"NameOfNewKey\" xml:space=\"preserve\">\r\n    <value>Zadejte název nového klíče.</value>\r\n  </data>\r\n  <data name=\"DeleteValue\" xml:space=\"preserve\">\r\n    <value>Opravdu chcete smazat hodnotu {0}?</value>\r\n  </data>\r\n  <data name=\"e_CreateSubKey\" xml:space=\"preserve\">\r\n    <value>Chyba při vytváření podklíče {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_EnlistSubKeys\" xml:space=\"preserve\">\r\n    <value>Chyba při zjišťování podklíčů {0}:</value>\r\n  </data>\r\n  <data name=\"String_d\" xml:space=\"preserve\">\r\n    <value>Zadejte řetězec.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR_t\" xml:space=\"preserve\">\r\n    <value>Obnovit HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"e_DeleteDuplicated\" xml:space=\"preserve\">\r\n    <value>Chyba při mazání duplikovaného klíče. Oba klíče zůstaávají.</value>\r\n  </data>\r\n  <data name=\"DeleteValues_t\" xml:space=\"preserve\">\r\n    <value>Smazat hodnoty</value>\r\n  </data>\r\n  <data name=\"Error_t\" xml:space=\"preserve\">\r\n    <value>Chyba</value>\r\n  </data>\r\n  <data name=\"e_OpenSubKey\" xml:space=\"preserve\">\r\n    <value>Chyba při otvírání klíče {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_3264\" xml:space=\"preserve\">\r\n    <value>Hodnota vlastnosti {0} může být jen 32 nebo 64.</value>\r\n  </data>\r\n  <data name=\"e_Restart\" xml:space=\"preserve\">\r\n    <value>Aplikaci se nepodařilo restartovat:</value>\r\n  </data>\r\n  <data name=\"UnknownValueAlt\" xml:space=\"preserve\">\r\n    <value>Nemohu interpretovat neznámý typ</value>\r\n  </data>\r\n  <data name=\"e_UnknownRoot\" xml:space=\"preserve\">\r\n    <value>Neznámý kořen registru</value>\r\n  </data>\r\n  <data name=\"e_Rename\" xml:space=\"preserve\">\r\n    <value>Nemohu přejmenovat {0} na {1} protože {1} již existuje.</value>\r\n  </data>\r\n  <data name=\"CreateKey_t\" xml:space=\"preserve\">\r\n    <value>Vytvořit klíč</value>\r\n  </data>\r\n  <data name=\"DeleteValues\" xml:space=\"preserve\">\r\n    <value>Opravdu chcete smazat vybrané hodnoty?</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR\" xml:space=\"preserve\">\r\n    <value>Opravdu chcete rozbalit klíč HKEY_CLASSES_ROOT?. Tato operace může nějakou chvíli trvat.</value>\r\n  </data>\r\n  <data name=\"e_SetResourceValue\" xml:space=\"preserve\">\r\n    <value>Namohu nastavit hodnotu zdroje.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR\" xml:space=\"preserve\">\r\n    <value>Opravdu chcete obnovit klíč HKEY_CLASSES_ROOT? Může to chvíli trvat.</value>\r\n  </data>\r\n  <data name=\"UnknownValue\" xml:space=\"preserve\">\r\n    <value>&lt;???&gt;</value>\r\n  </data>\r\n  <data name=\"e_Set\" xml:space=\"preserve\">\r\n    <value>Hodnota vlastnosti {0} nemůže být nastavena.</value>\r\n  </data>\r\n  <data name=\"DeleteKey_t\" xml:space=\"preserve\">\r\n    <value>Odstranit klíč</value>\r\n  </data>\r\n  <data name=\"KeepBoth_note\" xml:space=\"preserve\">\r\n    <value>(Pokud vyberete Ne, zůstane původní klíč zachován.)</value>\r\n  </data>\r\n  <data name=\"Binary_d\" xml:space=\"preserve\">\r\n    <value>Zadejte binární hodnotu jako hexačíslice. Počet číslic musí být sudý. Mezery jsou ignorovány.</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR_t\" xml:space=\"preserve\">\r\n    <value>Rozbalit HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"DeleteKey\" xml:space=\"preserve\">\r\n    <value>Opravdu chcete odstranit klíč {0}?</value>\r\n  </data>\r\n  <data name=\"e_editUnknown\" xml:space=\"preserve\">\r\n    <value>Hodnota neznámého typu nemůže být editována.</value>\r\n  </data>\r\n  <data name=\"e_Unset\" xml:space=\"preserve\">\r\n    <value>Nemohu odnastavit vlastnost {0}.</value>\r\n  </data>\r\n  <data name=\"e_DeleteValue\" xml:space=\"preserve\">\r\n    <value>Hodnoty {0} se nepodařilo smazat:</value>\r\n  </data>\r\n  <data name=\"e_KeyExists\" xml:space=\"preserve\">\r\n    <value>Klíč {0} již existuje.</value>\r\n  </data>\r\n  <data name=\"e_EnlistValues\" xml:space=\"preserve\">\r\n    <value>Chyba při zjišťování hodnot v klíči {0}:</value>\r\n  </data>\r\n  <data name=\"e_DeleteOriginalKey\" xml:space=\"preserve\">\r\n    <value>Klíč byl zduplikován, ale při mazaání původního klíče došlo k chybě.</value>\r\n  </data>\r\n  <data name=\"e_ValueExists\" xml:space=\"preserve\">\r\n    <value>Hodnota zvaná {0} již existuje.</value>\r\n  </data>\r\n  <data name=\"e_CopyValue\" xml:space=\"preserve\">\r\n    <value>Chyba při kopírování hodnoty \"{0}\" z klíče {1} do {2}:</value>\r\n  </data>\r\n  <data name=\"e_InvalidName\" xml:space=\"preserve\">\r\n    <value>Název \"{0}\" je neplatný. Název nesmí obsahovat \\.</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"rename\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X\r\n        t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW\r\n        AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD\r\n        Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV\r\n        q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj\r\n        H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"DefaultLanguage\" xml:space=\"preserve\">\r\n    <value>(výchozí)</value>\r\n  </data>\r\n  <data name=\"e_KeyDoesNotExist\" xml:space=\"preserve\">\r\n    <value>Klíč {0} neexistuje.</value>\r\n  </data>\r\n  <data name=\"JumpToKey\" xml:space=\"preserve\">\r\n    <value>Zadejte celou cestu ke klíči</value>\r\n  </data>\r\n  <data name=\"JumpToKey_t\" xml:space=\"preserve\">\r\n    <value>Jít na klíč</value>\r\n  </data>\r\n  <data name=\"JumToSameKey\" xml:space=\"preserve\">\r\n    <value>Jít na &amp;stejný klíč pod {0}</value>\r\n  </data>\r\n  <data name=\"e_GetValue\" xml:space=\"preserve\">\r\n    <value>Z klíče {1} se nepodařilo přrčíst hodnotu {0}:</value>\r\n  </data>\r\n  <data name=\"ExportKey_t\" xml:space=\"preserve\">\r\n    <value>Exportovat klíč</value>\r\n  </data>\r\n  <data name=\"ExportSuccessful\" xml:space=\"preserve\">\r\n    <value>Export úspěšný</value>\r\n  </data>\r\n  <data name=\"e_UnknownregistryFileType\" xml:space=\"preserve\">\r\n    <value>Neznámý typ souboru registru</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"readme\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>readme.cs.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Resources.hr.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DeleteKey\" xml:space=\"preserve\">\r\n    <value>Želite li ista izbridati kluč {0}?</value>\r\n  </data>\r\n  <data name=\"DeleteKey_t\" xml:space=\"preserve\">\r\n    <value>Izbrisati ključ</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR\" xml:space=\"preserve\">\r\n    <value>Želite li ista proširiti ključ HKEY_CLASSES_ROOT? Ova operacija može trajati dugo.</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR_t\" xml:space=\"preserve\">\r\n    <value>Proširiti HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"e_UnknownRoot\" xml:space=\"preserve\">\r\n    <value>Ne poznat korijen registara</value>\r\n  </data>\r\n  <data name=\"UnknownValue\" xml:space=\"preserve\">\r\n    <value>&lt;???&gt;</value>\r\n  </data>\r\n  <data name=\"UnknownValueAlt\" xml:space=\"preserve\">\r\n    <value>Ne mogu protumačiti nepoznat oblik</value>\r\n  </data>\r\n  <data name=\"Binary_d\" xml:space=\"preserve\">\r\n    <value>Unosite binarnu vrihjednost kao heksadecimalna znamenka. Broj znamenka mora biti paran. Razmake su zanemarene.</value>\r\n  </data>\r\n  <data name=\"CreateKey_t\" xml:space=\"preserve\">\r\n    <value>Napraviti ključ</value>\r\n  </data>\r\n  <data name=\"DeleteValue\" xml:space=\"preserve\">\r\n    <value>Želite li za ista izbrisati vrijednost {0}?</value>\r\n  </data>\r\n  <data name=\"DeleteValues\" xml:space=\"preserve\">\r\n    <value>Želite li ista izbrisati odabrane vrijednosti?</value>\r\n  </data>\r\n  <data name=\"DeleteValues_t\" xml:space=\"preserve\">\r\n    <value>Izbrisati vrijednosti</value>\r\n  </data>\r\n  <data name=\"Error_t\" xml:space=\"preserve\">\r\n    <value>Greška</value>\r\n  </data>\r\n  <data name=\"e_3264\" xml:space=\"preserve\">\r\n    <value>Vrijednost svojstva {0} može biti samo 32 ili 64.</value>\r\n  </data>\r\n  <data name=\"e_BinaryNotEven\" xml:space=\"preserve\">\r\n    <value>Broj znamenka za reprezentiranje polje bytova mora biti paran.</value>\r\n  </data>\r\n  <data name=\"e_CopyValue\" xml:space=\"preserve\">\r\n    <value>Greška kopiranja vrijednosti \"{0}\" iz ključa {1} za {2}:</value>\r\n  </data>\r\n  <data name=\"e_CreateSubKey\" xml:space=\"preserve\">\r\n    <value>Greška napravljanja podključa {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_DeleteDuplicated\" xml:space=\"preserve\">\r\n    <value>Greška izbrisanja dupliciranog ključa. Oba ključevi postaju.</value>\r\n  </data>\r\n  <data name=\"e_DeleteOriginalKey\" xml:space=\"preserve\">\r\n    <value>Ključ bio je dupliciran, ali dogodila se greška dlja izbrisanja izvornog ključa</value>\r\n  </data>\r\n  <data name=\"e_DeleteValue\" xml:space=\"preserve\">\r\n    <value>Neuspjeh izbrisanja vriejdnosti {0}:</value>\r\n  </data>\r\n  <data name=\"e_editUnknown\" xml:space=\"preserve\">\r\n    <value>Vrijednost nepoznatog oblika ne može biti promjenjena.</value>\r\n  </data>\r\n  <data name=\"e_EnlistSubKeys\" xml:space=\"preserve\">\r\n    <value>Greška postičanja lista podključeva {0}:</value>\r\n  </data>\r\n  <data name=\"e_EnlistValues\" xml:space=\"preserve\">\r\n    <value>Greška púostičanja lista vrijednosti u ključu {0}:</value>\r\n  </data>\r\n  <data name=\"e_InvalidName\" xml:space=\"preserve\">\r\n    <value>Naziv \"{0}\" nije valjan. Naziv ne može sadržati \\.</value>\r\n  </data>\r\n  <data name=\"e_KeyExists\" xml:space=\"preserve\">\r\n    <value>Ključ još postoja{0}.</value>\r\n  </data>\r\n  <data name=\"e_ListViewItem\" xml:space=\"preserve\">\r\n    <value>Vriejdnost mora biti ListViewItem</value>\r\n  </data>\r\n  <data name=\"e_OpenSubKey\" xml:space=\"preserve\">\r\n    <value>Greška otvaranja podključa {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_Rename\" xml:space=\"preserve\">\r\n    <value>Ne mogu peimenovati {0} za {1} jer {1} još postoja.</value>\r\n  </data>\r\n  <data name=\"e_Set\" xml:space=\"preserve\">\r\n    <value>Vrijednost svojstva {0} ne može biti unosena.</value>\r\n  </data>\r\n  <data name=\"e_SetResourceValue\" xml:space=\"preserve\">\r\n    <value>Ne mogu unositi vrijednost resursa</value>\r\n  </data>\r\n  <data name=\"e_Unset\" xml:space=\"preserve\">\r\n    <value>Ne mogu od-unositi svojstvo {0}.</value>\r\n  </data>\r\n  <data name=\"e_ValueExists\" xml:space=\"preserve\">\r\n    <value>Vrijednost sa imenom {0} još postoja.</value>\r\n  </data>\r\n  <data name=\"KeepBoth\" xml:space=\"preserve\">\r\n    <value>Želite li ostaviti oba ključeva?</value>\r\n  </data>\r\n  <data name=\"KeepBoth_note\" xml:space=\"preserve\">\r\n    <value>(U koliko izaberite Ne, izvoran ključ ostane.)</value>\r\n  </data>\r\n  <data name=\"Multistring_d\" xml:space=\"preserve\">\r\n    <value>Unosite nizne vrijednosti. Svaku za jed redak.</value>\r\n  </data>\r\n  <data name=\"NameOfNewKey\" xml:space=\"preserve\">\r\n    <value>Unosize naziv novog ključa</value>\r\n  </data>\r\n  <data name=\"Number_d\" xml:space=\"preserve\">\r\n    <value>Odaberize brojčanu vrijednost bez predznaka. Možete uporabiti decimalan ili heksadecimalan unos.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR\" xml:space=\"preserve\">\r\n    <value>Želite li ista ponoviti ključ HKEY_CLASSES_ROOT? To može trajati dugo.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR_t\" xml:space=\"preserve\">\r\n    <value>Ponovoti HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"String_d\" xml:space=\"preserve\">\r\n    <value>Unosite niz</value>\r\n  </data>\r\n  <data name=\"e_Restart\" xml:space=\"preserve\">\r\n    <value>Greška ponovopokrenutja aplikacije:</value>\r\n  </data>\r\n  <data name=\"DefaultLanguage\" xml:space=\"preserve\">\r\n    <value>(zadani)</value>\r\n  </data>\r\n  <data name=\"e_KeyDoesNotExist\" xml:space=\"preserve\">\r\n    <value>Ključ {0} ne postoje.</value>\r\n  </data>\r\n  <data name=\"JumpToKey\" xml:space=\"preserve\">\r\n    <value>Unosite cijelu cestu ključa</value>\r\n  </data>\r\n  <data name=\"JumpToKey_t\" xml:space=\"preserve\">\r\n    <value>Idi za ključ</value>\r\n  </data>\r\n  <data name=\"JumToSameKey\" xml:space=\"preserve\">\r\n    <value>&amp;Idi za isti ključ ispod {0}</value>\r\n  </data>\r\n  <data name=\"ExportKey_t\" xml:space=\"preserve\">\r\n    <value>Izvozi ključ</value>\r\n  </data>\r\n  <data name=\"ExportSuccessful\" xml:space=\"preserve\">\r\n    <value>Izvoz uspjel</value>\r\n  </data>\r\n  <data name=\"e_GetValue\" xml:space=\"preserve\">\r\n    <value>Neuspjeh postičanja vrijednosti {0} zljuča {1}:</value>\r\n  </data>\r\n  <data name=\"e_UnknownregistryFileType\" xml:space=\"preserve\">\r\n    <value>Nepoznatoblik datoteke registra</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"readme\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>readme.hr.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"binary\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\binary.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"delete\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"DeleteKey\" xml:space=\"preserve\">\r\n    <value>Do you really want to delete key {0}?</value>\r\n  </data>\r\n  <data name=\"DeleteKey_t\" xml:space=\"preserve\">\r\n    <value>Delete key</value>\r\n  </data>\r\n  <data name=\"edit\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR\" xml:space=\"preserve\">\r\n    <value>Dou you really want to expand key HKEY_CLASSES_ROOT?. This operation may take same time.</value>\r\n  </data>\r\n  <data name=\"ExpandHKCR_t\" xml:space=\"preserve\">\r\n    <value>Expand HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"e_UnknownRoot\" xml:space=\"preserve\">\r\n    <value>Unknown registry root</value>\r\n  </data>\r\n  <data name=\"folder\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\folder_close.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"new\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"numeric\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\numeric.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"refresh\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"rename\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\rename.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"string\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\string.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"UnknownValue\" xml:space=\"preserve\">\r\n    <value>&lt;???&gt;</value>\r\n  </data>\r\n  <data name=\"UnknownValueAlt\" xml:space=\"preserve\">\r\n    <value>Cannot interpret unknown type</value>\r\n  </data>\r\n  <data name=\"Binary_d\" xml:space=\"preserve\">\r\n    <value>Enter binary value as hexadecimal numerals. Number of numerals must be even. Spaces are ignored.</value>\r\n  </data>\r\n  <data name=\"CreateKey_t\" xml:space=\"preserve\">\r\n    <value>Create key</value>\r\n  </data>\r\n  <data name=\"DeleteValue\" xml:space=\"preserve\">\r\n    <value>Dou you really want to delete value {0}?</value>\r\n  </data>\r\n  <data name=\"DeleteValues\" xml:space=\"preserve\">\r\n    <value>Do you really want to delete selected values?</value>\r\n  </data>\r\n  <data name=\"DeleteValues_t\" xml:space=\"preserve\">\r\n    <value>Delete values</value>\r\n  </data>\r\n  <data name=\"Error_t\" xml:space=\"preserve\">\r\n    <value>Error</value>\r\n  </data>\r\n  <data name=\"e_3264\" xml:space=\"preserve\">\r\n    <value>Value of property {0} can be only 32 or 64.</value>\r\n  </data>\r\n  <data name=\"e_BinaryNotEven\" xml:space=\"preserve\">\r\n    <value>The number of numbers to represent byte array must be even.</value>\r\n  </data>\r\n  <data name=\"e_CopyValue\" xml:space=\"preserve\">\r\n    <value>Error while copying value \"{0}\" from key {1} to {2}:</value>\r\n  </data>\r\n  <data name=\"e_CreateSubKey\" xml:space=\"preserve\">\r\n    <value>Error while creating subkey {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_DeleteDuplicated\" xml:space=\"preserve\">\r\n    <value>Error while deleting doplicated key. Both keys remain.</value>\r\n  </data>\r\n  <data name=\"e_DeleteOriginalKey\" xml:space=\"preserve\">\r\n    <value>The key was duplicated, but an error occured while deleting original key</value>\r\n  </data>\r\n  <data name=\"e_DeleteValue\" xml:space=\"preserve\">\r\n    <value>Failed to delete value {0}:</value>\r\n  </data>\r\n  <data name=\"e_editUnknown\" xml:space=\"preserve\">\r\n    <value>Value of unknown type cannot be edited.</value>\r\n  </data>\r\n  <data name=\"e_EnlistSubKeys\" xml:space=\"preserve\">\r\n    <value>Error while getting list of subkeys of {0}:</value>\r\n  </data>\r\n  <data name=\"e_EnlistValues\" xml:space=\"preserve\">\r\n    <value>Error while getting list of values in key{0}:</value>\r\n  </data>\r\n  <data name=\"e_InvalidName\" xml:space=\"preserve\">\r\n    <value>Name \"{0}\" is invalid. Name cannot contain \\.</value>\r\n  </data>\r\n  <data name=\"e_KeyExists\" xml:space=\"preserve\">\r\n    <value>The key {0} already exists.</value>\r\n  </data>\r\n  <data name=\"e_ListViewItem\" xml:space=\"preserve\">\r\n    <value>Value must be ListViewItem</value>\r\n  </data>\r\n  <data name=\"e_OpenSubKey\" xml:space=\"preserve\">\r\n    <value>Error while openning subkey {0}\\{1}:</value>\r\n  </data>\r\n  <data name=\"e_Rename\" xml:space=\"preserve\">\r\n    <value>Cannot rename {0} to {1} because {1} already exists.</value>\r\n  </data>\r\n  <data name=\"e_Set\" xml:space=\"preserve\">\r\n    <value>Value of the {0} property cannot be set.</value>\r\n  </data>\r\n  <data name=\"e_SetResourceValue\" xml:space=\"preserve\">\r\n    <value>Cannot set value of resource</value>\r\n  </data>\r\n  <data name=\"e_Unset\" xml:space=\"preserve\">\r\n    <value>Cannot unset property {0}.</value>\r\n  </data>\r\n  <data name=\"e_ValueExists\" xml:space=\"preserve\">\r\n    <value>Value named {0} already exists.</value>\r\n  </data>\r\n  <data name=\"KeepBoth\" xml:space=\"preserve\">\r\n    <value>Do you wish to keep both key?</value>\r\n  </data>\r\n  <data name=\"KeepBoth_note\" xml:space=\"preserve\">\r\n    <value>(If you select No, original key will remain.)</value>\r\n  </data>\r\n  <data name=\"Multistring_d\" xml:space=\"preserve\">\r\n    <value>Enter string values. Each at one line.</value>\r\n  </data>\r\n  <data name=\"NameOfNewKey\" xml:space=\"preserve\">\r\n    <value>Enter name of new key</value>\r\n  </data>\r\n  <data name=\"Number_d\" xml:space=\"preserve\">\r\n    <value>Chose unsigned numeric value. You can use decimal or hexadecimal input.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR\" xml:space=\"preserve\">\r\n    <value>Do you really wan to referesh key HKEY_CLASSES_ROOT? I may take some time.</value>\r\n  </data>\r\n  <data name=\"RefreshHKCR_t\" xml:space=\"preserve\">\r\n    <value>Refresh HKEY_CLASSES_ROOT</value>\r\n  </data>\r\n  <data name=\"String_d\" xml:space=\"preserve\">\r\n    <value>Enter string.</value>\r\n  </data>\r\n  <data name=\"warning\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r\n  </data>\r\n  <data name=\"e_Restart\" xml:space=\"preserve\">\r\n    <value>Failed to restart application:</value>\r\n  </data>\r\n  <data name=\"DefaultLanguage\" xml:space=\"preserve\">\r\n    <value>(default)</value>\r\n  </data>\r\n  <data name=\"e_KeyDoesNotExist\" xml:space=\"preserve\">\r\n    <value>The key {0} does not exist.</value>\r\n  </data>\r\n  <data name=\"JumpToKey\" xml:space=\"preserve\">\r\n    <value>Enter full path of key</value>\r\n  </data>\r\n  <data name=\"JumpToKey_t\" xml:space=\"preserve\">\r\n    <value>Jump to key</value>\r\n  </data>\r\n  <data name=\"JumToSameKey\" xml:space=\"preserve\">\r\n    <value>Jump to &amp;same key under {0}</value>\r\n  </data>\r\n  <data name=\"ExportKey_t\" xml:space=\"preserve\">\r\n    <value>Export key</value>\r\n  </data>\r\n  <data name=\"ExportSuccessful\" xml:space=\"preserve\">\r\n    <value>Export successful</value>\r\n  </data>\r\n  <data name=\"e_GetValue\" xml:space=\"preserve\">\r\n    <value>Failed to get value {0} from key {1}:</value>\r\n  </data>\r\n  <data name=\"e_UnknownregistryFileType\" xml:space=\"preserve\">\r\n    <value>Unknown registry file type</value>\r\n  </data>\r\n  <data name=\"readme\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>readme.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/SettingsProvider.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Configuration;    \r\n    import namespace System:::Drawing;\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace System:::Xml;\r\n    \r\n    namespace RegEditPHP{\r\n        ///<summary>Privides access to settings in XML</summary>\r\n \t    class SettingsProvider{\r\n \t        //This class is aesy to extend\r\n \t        //By now it is not possible to use .NEt settings fronm Phalanger\r\n \t        //XML documant stroing settings\r\n \t        private $doc;\r\n \t        //Load from file\r\n\t        public function Load(){\r\n\t            $path = self::GetPath();    \r\n\t            if(System:::IO:::File::Exists($path))://Load\r\n\t                $doc = new XmlDocument();\r\n\t                $doc->Load($path);\r\n\t            else://Create\r\n\t                $doc = new XmlDocument();\r\n\t                $doc->LoadXml(<<<xmlstring\r\n<?xml version=\"1.0\"?>\r\n<settings/>\r\nxmlstring\r\n);\t                \r\n\t            endif;\r\n\t            $this->doc=$doc;\r\n\t        } \r\n\t        public function Save(){//Save to file\r\n\t            if(!System:::IO:::Directory::Exists(self::GetFolder()))\r\n\t                System:::IO:::Directory::CreateDirectory(self::GetFolder());\r\n\t            $docn=\"doc\";\r\n\t            $xdoc7=$this->$docn;\r\n\t            $xdoc7->Save(self::GetPath());\r\n\t        }\r\n\t        //get fath of XML file\r\n\t        private static function GetPath(){\r\n\t            return System:::IO:::Path::Combine(\r\n\t                self::GetFolder(),\"settings.xml\");\r\n\t        }\r\n\t        //Get folder of assembly\r\n\t        private static function GetFolder(){\r\n\t            return System:::IO:::Path::Combine(\r\n\t                System:::Environment::GetFolderPath(System:::Environment:::SpecialFolder::ApplicationData),\r\n\t                \"RegEditPHP\");\r\n\t        }\r\n\t        //Get node for setting\r\n\t        private function getNode(string $name){\r\n\t            $xdoc=$this->doc;\r\n\t            return $xdoc->SelectSingleNode(\"//settings/setting[@id='$name']\");    \r\n\t        }\r\n\t        //Set node value\r\n\t        private function setNode(string $name,string $innerText,bool $raw=false){\r\n\t            $node=$this->getNode($name);\r\n\t            if(is_null($node)):\r\n\t                $xdoc=$this->doc;\r\n\t                $node=$xdoc->CreateElement(\"setting\");\r\n\t                $node->SetAttribute(\"id\",$name);\r\n\t                $xdoc->DocumentElement->AppendChild($node);\r\n\t            endif;\r\n\t            if($raw)\r\n\t                $node->InnerText=$innerXml;\r\n\t            else\r\n\t                $node->InnerText=$innerText;\r\n\t        }\r\n\t       \r\n\t        //Get setting value\r\n\t        public function __get(string $name){\r\n\t            $el=$this->getNode($name);\r\n\t            if(is_null($el)) return null;\r\n\t            switch($name):\r\n\t                 case \"MainSize\": \r\n\t                    $parts = explode(\",\",$el->InnerText->Trim());\r\n\t                    return new Size((int)$parts[0],(int)$parts[1]);\r\n                     case \"ColumnWidths\":\r\n                        foreach(explode(\",\",$el->InnerText->Trim()) as $w)\r\n                            $ret[]=(int)$w;\r\n                        return $ret;\r\n                     case \"SplitterDistance\":\r\n                     case \"MainState\":\r\n                        return (int)$el->InnerText->Trim();\r\n                     case \"Culture\":\r\n                     default:\r\n                        return $el->InnerText->Trim();\r\n                endswitch;\r\n\t        }\r\n\t        //Set setting value\r\n\t        public function __set(string $name, $value){\r\n\t            $raw=false;\r\n\t            switch($name):\r\n\t                 case \"MainSize\": \r\n\t                    $text=\"$value->Width,$value->Height\";\r\n\t                 break;\r\n                     case \"ColumnWidths\":\r\n                        $text=System:::String::Join(\",\",$value);\r\n                     break;\r\n                     case \"SplitterDistance\":\r\n                     case \"MainState\":\r\n                     case \"Culture\":\r\n                     default:\r\n                        $text=(string)$value;\r\n                endswitch;\r\n                $this->setNode($name,$text,$raw);\r\n\t        }\r\n\t        public function __isset(string $name){\r\n\t            if (is_null($this->getNode($name)))\r\n\t                return false;\r\n\t            return true;\r\n\t        }\r\n\t        public function __unset($name){\r\n\t            if($node=$this->getNode($name))\r\n\t                $node->Parent->RemoveChild($node);\r\n\t        }\r\n\t    }\r\n    }\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/Sorter.php",
    "content": "<?\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace System;\r\n    \r\n    namespace RegEditPHP {\r\n\r\n        class Sorter implements System:::Collections:::IComparer{\r\n            private $ListView;\r\n            public $Column;\r\n            public $Order = SortOrder::Ascending;\r\n            private $Comparer;\r\n            public function __construct(ListView $ListView, int $column=0){\r\n                $this->ListView = $ListView;\r\n                $this->Column=$column;\r\n                $this->Comparer=System:::StringComparer::Create(System:::Globalization:::CultureInfo::$CurrentCulture,true);\r\n                $this->ListView->ListViewItemSorter=$this;\r\n                $this->ListView->Sort();                                \r\n            }\r\n            public function Compare($a,$b){\r\n                if(! $a instanceof ListViewItem) throw new CLRException(new ArgumentException(Program::$Resources->e_ListViewItem,\"a\"));\r\n                if(! $b instanceof ListViewItem) throw new CLRException(new ArgumentException(Program::$Resources->e_ListViewItem,\"b\"));\r\n                if($this->Column==0):\r\n                    $va=$a->Text;\r\n                    $vb=$b->Text;\r\n                else:\r\n                    $va=self::Iterate($a->SubItems->GetEnumerator(),$this->Column)->Text;\r\n                    $vb=self::Iterate($b->SubItems->GetEnumerator(),$this->Column)->Text;\r\n                endif;\r\n                switch($this->Order):\r\n                    case SortOrder::Ascending:\r\n                        $mul=1;\r\n                    break;\r\n                    case SortOrder::Descending:\r\n                        $mul=-1;\r\n                    break;\r\n                    default: $mul=0;\r\n                endswitch;\r\n                return $mul * (int)$this->Comparer->Compare($va,$vb);\r\n            }\r\n            public static function Iterate(System:::Collections:::IEnumerator $e, int $n){\r\n                $n++;\r\n                for($i=0;$i<$n;$i++):\r\n                    if(!$e->MoveNext()) throw new CLRException(new ArgumentOutOfRangeException(\"n\"));\r\n                endfor;\r\n                return $e->Current;    \r\n            }\r\n        } \r\n    }\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ValueEditor.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"lblName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>13, 6</value>\r\n  </data>\r\n  <data name=\"lblName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>38, 13</value>\r\n  </data>\r\n  <data name=\"lblName.Text\" xml:space=\"preserve\">\r\n    <value>Název</value>\r\n  </data>\r\n  <data name=\"txtName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 3</value>\r\n  </data>\r\n  <data name=\"txtName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>286, 20</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>26, 26</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>25, 13</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Text\" xml:space=\"preserve\">\r\n    <value>Typ</value>\r\n  </data>\r\n  <data name=\"lblType.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 26</value>\r\n  </data>\r\n  <data name=\"lblValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 39</value>\r\n  </data>\r\n  <data name=\"lblValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>48, 13</value>\r\n  </data>\r\n  <data name=\"lblValue.Text\" xml:space=\"preserve\">\r\n    <value>Hodnota</value>\r\n  </data>\r\n  <data name=\"panValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>54, 39</value>\r\n  </data>\r\n  <data name=\"panValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>292, 98</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>235, 3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>48, 23</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Storno</value>\r\n  </data>\r\n  <data name=\"lblHelp.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>57, 137</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Upravit hodnotu</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ValueEditor.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"lblName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>22, 6</value>\r\n  </data>\r\n  <data name=\"lblName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>34, 13</value>\r\n  </data>\r\n  <data name=\"lblName.Text\" xml:space=\"preserve\">\r\n    <value>Naziv</value>\r\n  </data>\r\n  <data name=\"txtName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>62, 3</value>\r\n  </data>\r\n  <data name=\"txtName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>281, 20</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>25, 26</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Text\" xml:space=\"preserve\">\r\n    <value>Oblik</value>\r\n  </data>\r\n  <data name=\"lblType.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>62, 26</value>\r\n  </data>\r\n  <data name=\"lblValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 39</value>\r\n  </data>\r\n  <data name=\"lblValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>53, 13</value>\r\n  </data>\r\n  <data name=\"lblValue.Text\" xml:space=\"preserve\">\r\n    <value>Vrijednost</value>\r\n  </data>\r\n  <data name=\"panValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>59, 39</value>\r\n  </data>\r\n  <data name=\"panValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>287, 98</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>62, 3</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>49, 23</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;U redu</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>230, 3</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>59, 23</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Odustani</value>\r\n  </data>\r\n  <data name=\"lblHelp.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>62, 137</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Uređivanje vrijednosti</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ValueEditor.php",
    "content": "﻿<?\r\n    import namespace RegEditPHP;\r\n    import namespace Microsoft:::Win32;\r\n    import namespace System:::Windows:::Forms;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class ValueEditor extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $tlpMain;\r\n            \r\n            private $lblName;\r\n            \r\n            private $txtName;\r\n            \r\n            private $lblTypeI;\r\n            \r\n            private $lblType;\r\n            \r\n            private $lblValue;\r\n            \r\n            private $panValue;\r\n            \r\n            private $tlpButtons;\r\n            \r\n            private $cmdOK;\r\n            \r\n            private $cmdCancel;\r\n            \r\n            private $lblHelp;\r\n            \r\n            private $components = NULL;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n                $this->Init();\r\n            }\r\n            \r\n            private function InitializeComponent() {\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf ValueEditor );\r\n                $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->lblName = new System:::Windows:::Forms:::Label();\r\n                $this->txtName = new System:::Windows:::Forms:::TextBox();\r\n                $this->lblTypeI = new System:::Windows:::Forms:::Label();\r\n                $this->lblType = new System:::Windows:::Forms:::Label();\r\n                $this->lblValue = new System:::Windows:::Forms:::Label();\r\n                $this->panValue = new System:::Windows:::Forms:::Panel();\r\n                $this->tlpButtons = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->cmdOK = new System:::Windows:::Forms:::Button();\r\n                $this->cmdCancel = new System:::Windows:::Forms:::Button();\r\n                $this->lblHelp = new System:::Windows:::Forms:::Label();\r\n                $this->tlpMain->SuspendLayout();\r\n                $this->tlpButtons->SuspendLayout();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tlpMain\r\n                // \r\n                $this->tlpMain->AccessibleDescription = NULL;\r\n                $this->tlpMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpMain, \"tlpMain\");\r\n                $this->tlpMain->BackgroundImage = NULL;\r\n                $this->tlpMain->Controls->Add($this->lblName, 0, 0);\r\n                $this->tlpMain->Controls->Add($this->txtName, 1, 0);\r\n                $this->tlpMain->Controls->Add($this->lblTypeI, 0, 1);\r\n                $this->tlpMain->Controls->Add($this->lblType, 1, 1);\r\n                $this->tlpMain->Controls->Add($this->lblValue, 0, 2);\r\n                $this->tlpMain->Controls->Add($this->panValue, 1, 2);\r\n                $this->tlpMain->Controls->Add($this->tlpButtons, 0, 4);\r\n                $this->tlpMain->Controls->Add($this->lblHelp, 1, 3);\r\n                $this->tlpMain->Font = NULL;\r\n                $this->tlpMain->Name = \"tlpMain\";\r\n                // \r\n                // lblName\r\n                // \r\n                $this->lblName->AccessibleDescription = NULL;\r\n                $this->lblName->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblName, \"lblName\");\r\n                $this->lblName->Font = NULL;\r\n                $this->lblName->Name = \"lblName\";\r\n                // \r\n                // txtName\r\n                // \r\n                $this->txtName->AccessibleDescription = NULL;\r\n                $this->txtName->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->txtName, \"txtName\");\r\n                $this->txtName->BackgroundImage = NULL;\r\n                $this->txtName->Font = NULL;\r\n                $this->txtName->Name = \"txtName\";\r\n                $this->txtName->ReadOnly = true;\r\n                // \r\n                // lblTypeI\r\n                // \r\n                $this->lblTypeI->AccessibleDescription = NULL;\r\n                $this->lblTypeI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblTypeI, \"lblTypeI\");\r\n                $this->lblTypeI->Font = NULL;\r\n                $this->lblTypeI->Name = \"lblTypeI\";\r\n                // \r\n                // lblType\r\n                // \r\n                $this->lblType->AccessibleDescription = NULL;\r\n                $this->lblType->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblType, \"lblType\");\r\n                $this->lblType->Font = NULL;\r\n                $this->lblType->Name = \"lblType\";\r\n                // \r\n                // lblValue\r\n                // \r\n                $this->lblValue->AccessibleDescription = NULL;\r\n                $this->lblValue->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblValue, \"lblValue\");\r\n                $this->lblValue->Font = NULL;\r\n                $this->lblValue->Name = \"lblValue\";\r\n                // \r\n                // panValue\r\n                // \r\n                $this->panValue->AccessibleDescription = NULL;\r\n                $this->panValue->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->panValue, \"panValue\");\r\n                $this->panValue->BackgroundImage = NULL;\r\n                $this->panValue->Font = NULL;\r\n                $this->panValue->Name = \"panValue\";\r\n                // \r\n                // tlpButtons\r\n                // \r\n                $this->tlpButtons->AccessibleDescription = NULL;\r\n                $this->tlpButtons->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpButtons, \"tlpButtons\");\r\n                $this->tlpButtons->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->tlpButtons, 2);\r\n                $this->tlpButtons->Controls->Add($this->cmdOK, 0, 0);\r\n                $this->tlpButtons->Controls->Add($this->cmdCancel, 1, 0);\r\n                $this->tlpButtons->Font = NULL;\r\n                $this->tlpButtons->Name = \"tlpButtons\";\r\n                // \r\n                // cmdOK\r\n                // \r\n                $this->cmdOK->AccessibleDescription = NULL;\r\n                $this->cmdOK->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdOK, \"cmdOK\");\r\n                $this->cmdOK->BackgroundImage = NULL;\r\n                $this->cmdOK->Font = NULL;\r\n                $this->cmdOK->Name = \"cmdOK\";\r\n                $this->cmdOK->UseVisualStyleBackColor = true;\r\n                $this->cmdOK->Click->Add(new System:::EventHandler(array($this, \"cmdOK_Click\")));\r\n                // \r\n                // cmdCancel\r\n                // \r\n                $this->cmdCancel->AccessibleDescription = NULL;\r\n                $this->cmdCancel->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdCancel, \"cmdCancel\");\r\n                $this->cmdCancel->BackgroundImage = NULL;\r\n                $this->cmdCancel->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel;\r\n                $this->cmdCancel->Font = NULL;\r\n                $this->cmdCancel->Name = \"cmdCancel\";\r\n                $this->cmdCancel->UseVisualStyleBackColor = true;\r\n                $this->cmdCancel->Click->Add(new System:::EventHandler(array($this, \"cmdCancel_Click\")));\r\n                // \r\n                // lblHelp\r\n                // \r\n                $this->lblHelp->AccessibleDescription = NULL;\r\n                $this->lblHelp->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblHelp, \"lblHelp\");\r\n                $this->lblHelp->Font = NULL;\r\n                $this->lblHelp->Name = \"lblHelp\";\r\n                // \r\n                // ValueEditor\r\n                // \r\n                $this->AcceptButton = $this->cmdOK;\r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font;\r\n                $this->BackgroundImage = NULL;\r\n                $this->CancelButton = $this->cmdCancel;\r\n                $this->Controls->Add($this->tlpMain);\r\n                $this->Font = NULL;\r\n                $this->FormBorderStyle = System:::Windows:::Forms:::FormBorderStyle::FixedDialog;\r\n                $this->Icon = NULL;\r\n                $this->MaximizeBox = false;\r\n                $this->MinimizeBox = false;\r\n                $this->Name = \"ValueEditor\";\r\n                $this->ShowIcon = false;\r\n                $this->ShowInTaskbar = false;\r\n                $this->tlpMain->ResumeLayout(false);\r\n                $this->tlpMain->PerformLayout();\r\n                $this->tlpButtons->ResumeLayout(false);\r\n                $this->tlpButtons->PerformLayout();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ValueEditor.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpButtons.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;panValue.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTypeI.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"lblHelp.Text\" xml:space=\"preserve\">\r\n    <value>Help</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"cmdCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>234, 3</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>346, 179</value>\r\n  </data>\r\n  <data name=\"lblType.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>3</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"panValue.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>346, 29</value>\r\n  </data>\r\n  <data name=\"tlpMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblType.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmdOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"lblType.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>44, 26</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>50, 23</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>346, 179</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblValue.ZOrder\" xml:space=\"preserve\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblValue.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblValue.Name\" xml:space=\"preserve\">\r\n    <value>lblValue</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;panValue.Name\" xml:space=\"preserve\">\r\n    <value>panValue</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtName.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblValue.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Top, Right</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblType.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblType.ZOrder\" xml:space=\"preserve\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"lblValue.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>Edit value</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\r\n    <value>0, 0, 0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Name\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Name\" xml:space=\"preserve\">\r\n    <value>cmdOK</value>\r\n  </data>\r\n  <data name=\"lblName.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>32, 23</value>\r\n  </data>\r\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\r\n    <value>6, 13</value>\r\n  </data>\r\n  <data name=\"lblHelp.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>44, 137</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmdCancel.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"txtName.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tlpMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtName.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tlpMain.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblName.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdCancel.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblHelp.Name\" xml:space=\"preserve\">\r\n    <value>lblHelp</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtName.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;panValue.ZOrder\" xml:space=\"preserve\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;panValue.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>4, 39</value>\r\n  </data>\r\n  <data name=\"tlpMain.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"lblName\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"txtName\" Row=\"0\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblTypeI\" Row=\"1\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblType\" Row=\"1\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblValue\" Row=\"2\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"panValue\" Row=\"2\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"tlpButtons\" Row=\"4\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"lblHelp\" Row=\"3\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"AutoSize,0,Percent,100\" /&gt;&lt;Rows Styles=\"AutoSize,0,AutoSize,0,Percent,100,AutoSize,0,AutoSize,0\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"tlpButtons.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>6</value>\r\n  </data>\r\n  <data name=\"cmdCancel.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Cancel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Name\" xml:space=\"preserve\">\r\n    <value>cmdCancel</value>\r\n  </data>\r\n  <data name=\"txtName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>44, 3</value>\r\n  </data>\r\n  <data name=\"lblName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>35, 13</value>\r\n  </data>\r\n  <data name=\"lblValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>34, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Parent\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTypeI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>ValueEditor</value>\r\n  </data>\r\n  <data name=\"panValue.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"lblTypeI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblHelp.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"tlpMain.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblName.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"lblType.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>36, 13</value>\r\n  </data>\r\n  <data name=\"lblHelp.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>29, 13</value>\r\n  </data>\r\n  <data name=\"lblType.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblName.Name\" xml:space=\"preserve\">\r\n    <value>lblName</value>\r\n  </data>\r\n  <data name=\"lblName.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 6</value>\r\n  </data>\r\n  <data name=\"txtName.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left, Right</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>31, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblHelp.ZOrder\" xml:space=\"preserve\">\r\n    <value>7</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblType.Name\" xml:space=\"preserve\">\r\n    <value>lblType</value>\r\n  </data>\r\n  <data name=\"txtName.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>299, 20</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.ZOrder\" xml:space=\"preserve\">\r\n    <value>6</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>70, 3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cmdOK.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;OK</value>\r\n  </data>\r\n  <data name=\"lblType.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"tlpButtons.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"cmdOK\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"cmdCancel\" Row=\"0\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"Percent,50,Percent,50\" /&gt;&lt;Rows Styles=\"Percent,50,Percent,50\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"lblValue.Text\" xml:space=\"preserve\">\r\n    <value>Value</value>\r\n  </data>\r\n  <data name=\"tlpButtons.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTypeI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblName.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Name\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"panValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>41, 39</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblValue.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTypeI.Name\" xml:space=\"preserve\">\r\n    <value>lblTypeI</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblHelp.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdCancel.Parent\" xml:space=\"preserve\">\r\n    <value>tlpButtons</value>\r\n  </data>\r\n  <data name=\"lblHelp.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"tlpButtons.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"lblValue.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>7, 26</value>\r\n  </data>\r\n  <data name=\"lblType.Text\" xml:space=\"preserve\">\r\n    <value>REG_</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblHelp.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"tlpButtons.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 150</value>\r\n  </data>\r\n  <data name=\"lblTypeI.Text\" xml:space=\"preserve\">\r\n    <value>Type</value>\r\n  </data>\r\n  <data name=\"lblName.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"lblTypeI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"panValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>305, 98</value>\r\n  </data>\r\n  <data name=\"tlpMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tlpButtons.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"lblHelp.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>7</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpButtons.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"panValue.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\r\n    <value>0, 0, 0, 0</value>\r\n  </data>\r\n  <data name=\"lblName.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"cmdCancel.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"lblName.Text\" xml:space=\"preserve\">\r\n    <value>Name</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;txtName.Name\" xml:space=\"preserve\">\r\n    <value>txtName</value>\r\n  </data>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/ValueEditor.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n  import namespace System:::Windows:::Forms;\r\n\r\n    import namespace RegEditPHP;\r\n    import namespace Microsoft:::Win32;\r\n   \r\n    namespace RegEditPHP{\r\n        ///<summary>Generic value edeitor</summary>\r\n\t    partial class ValueEditor extends System:::Windows:::Forms:::Form{\r\n            //Actual editor control\r\n            private $editor;\r\n            //Type of value being edited\r\n            private $type;\r\n            //Caled by __construct\r\n            private function Init(){$this->DialogResult=DialogResult::Cancel;}\r\n            //Initializes editro\r\n            public function SetValue($value, int $type ){\r\n                $this->type=$type;\r\n                switch($type)://Byt type\r\n                    case RegistryValueKind::Binary://Use text box\r\n                        $this->editor=new TextBox();\r\n                        $this->editor->Multiline=true;\r\n                        $this->editor->WordWrap=true;\r\n                        $this->editor->ScrollBars=ScrollBars::Both;\r\n                        $sb = new System:::Text:::StringBuilder(count($value)*2);\r\n                        foreach($value as $b):\r\n                            if($sb->Length > 0) $sb->Append(\" \");\r\n                            $sb->Append($b->ToString(\"X2\"));\r\n                        endforeach;\r\n                        $this->editor->Text = $sb->ToString();\r\n                        $this->lblType->Text=REG_BINARY;\r\n                        $this->lblHelp->Text=Program::$Resources->Binary_d;\r\n                    break;\r\n                    case RegistryValueKind::DWord://Use special control\r\n                        $this->lblType->Text=REG_DWORD;\r\n                    case RegistryValueKind::QWord:\r\n                        $this->editor=new NumericEditor();\r\n                        $this->editor->Type= $type==RegistryValueKind::DWord ? 32 : 64;\r\n                        if(!is_null($value))\r\n                            $this->editor->Value = $value;\r\n                        if($this->lblType<>REG_)\r\n                            $this->lblType->Text=REG_QWORD;\r\n                        $this->editor->Value = $value;\r\n                        $this->lblHelp->Text=Program::$Resources->Number_d;\r\n                    break;\r\n                    case RegistryValueKind::ExpandString://Textbox (single line)\r\n                        $this->lblType->Text=REG_EXPAND_SZ;\r\n                    case RegistryValueKind::i'String':\r\n                        $this->editor=new TextBox();\r\n                        $this->editor->Text = $value;\r\n                        if($this->lblType<>REG_)\r\n                            $this->lblType->Text=REG_SZ;\r\n                        $this->lblHelp->Text=Program::$Resources->String_d;\r\n                    break;\r\n                    case RegistryValueKind::MultiString://Textbox (multi line)\r\n                        $this->editor=new TextBox();\r\n                        $this->editor->Multiline=true;\r\n                        $this->editor->WordWrap=false;\r\n                        $this->editor->ScrollBars=ScrollBars::Both;\r\n                        $this->editor->AcceptsReturn=true;\r\n                        if(!is_null($value))\r\n                            $this->editor->Text=System:::String::Join(\"\\r\\n\",$value);\r\n                        $this->lblType->Text=REG_MULTI_SZ;\r\n                        $this->lblHelp->Text=Program::$Resources->Multistring_d;\r\n                    break;\r\n                    default: throw new CLRException(new System:::ComponentModel:::InvalidEnumArgumentException(\"type\",(int)$type,CLRTypeOf RegistryValueKind));\r\n                endswitch;\r\n                $this->editor->Dock=DockStyle::Fill;\r\n                $this->panValue->Controls->Add($this->editor);\r\n            }\r\n            //Magic properties:\r\n            public function __set(string $name,$value){\r\n                switch($name):\r\n                    case \"Value\": case \"Type\": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Set($name)));\r\n                    case \"NameReadOnly\": return $this->txtName->ReadOnly = $value;\r\n                    case \"ValueName\":return $this->txtName->Text=$value;\r\n                    default: return $this->$values[$name]=$value;\r\n                endswitch;\r\n            }\r\n            private $values;     \r\n            public function __get(string $name){\r\n                switch($name):\r\n                    case \"Value\": \r\n                        switch($this->type):\r\n                            case RegistryValueKind::Binary:\r\n                                $value = $this->editor->Text->Replace(\"\\r\",\"\")->Replace(\"\\n\",\"\")->Replace(\"\\t\",\"\")->Replace(\" \",\"\");\r\n                                if(strlen($value) % 2 <> 0) throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_BinaryNotEven)); \r\n                                $ret = new System:::IO:::MemoryStream();\r\n                                for($i=0;$i<strlen($value);$i+=2):\r\n                                    $bytestring = $value{$i}.$value{$i+1};\r\n                                    $ret->WriteByte(\r\n                                        System:::Byte::Parse($bytestring,System:::Globalization:::NumberStyles::HexNumber));\r\n                                endfor;\r\n                                $ret2=System:::Array::CreateInstance(CLRTypeOf System:::Byte,$ret->Length);\r\n                                System:::Array::ConstrainedCopy($ret->GetBuffer(),0,$ret2,0,$ret->Length);\r\n                                return $ret2;\r\n                            case RegistryValueKind::DWord:\r\n                            case RegistryValueKind::QWord:\r\n                                return $this->editor->Value;\r\n                            case RegistryValueKind::ExpandString:\r\n                            case RegistryValueKind::i'String':\r\n                                return $this->editor->Text;\r\n                            case RegistryValueKind::MultiString:\r\n                                return $this->editor->Text->Split(array(\"\\r\\n\"),System:::StringSplitOptions::None);\r\n                        endswitch;\r\n                    case \"Type\": return $this->type;\r\n                    case \"NameReadOnly\": return $this->txtName->ReadOnly;\r\n                    case \"ValueName\": return $this->txtName->Text;\r\n                    default: return $this->values[$name];\r\n                endswitch;\r\n            }\r\n            public function __isset(string $name){\r\n                switch($name):\r\n                    case \"Value\": case \"NameReadOnly\": case \"ValueName\": case \"Type\": return true;\r\n                    default: return isset($this->values[$name]);\r\n                endswitch;\r\n            }\r\n            public function __unset(string $name){\r\n                switch($name):\r\n                    case \"Value\": case \"NameReadOnly\": case \"ValueName\": case \"Type\": throw new CLRException(new System:::InvalidOperationException(Program::$Resources->e_Unset($name)));\r\n                    default: unset($this->values[$name]);\r\n                endswitch;\r\n            }\r\n            \r\n            private function cmdCancel_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult=DialogResult::Cancel;\r\n                $this->Close();\r\n            }\r\n            \r\n            private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                unset($errmsg);\r\n                try{\r\n                    $value = $this->Value;\r\n                }catch(System:::Exception $ex){\r\n                    $errmsg=$ex->Message;\r\n                }catch(Exception $ex){\r\n                    $errmsg=(string)$ex;\r\n                }\r\n                if(isset($errmsg)):\r\n                    frmMain::OnError($errmsg);\r\n                else:\r\n                    $this->DialogResult=DialogResult::OK;\r\n                    $this->Close();\r\n                endif;    \r\n            }\t    \r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/dlgAbout.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"picRegEditPHP.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS\r\n        gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE\r\n        gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg\r\n        GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8\r\n        UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika\r\n        kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD\r\n        6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy\r\n        4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ\r\n        6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"lblProductI.Text\" xml:space=\"preserve\">\r\n    <value>Produkt</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>28, 51</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>38, 13</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Text\" xml:space=\"preserve\">\r\n    <value>Název</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>32, 64</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>34, 13</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Text\" xml:space=\"preserve\">\r\n    <value>Verze</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>33, 77</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>33, 13</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Text\" xml:space=\"preserve\">\r\n    <value>Popis</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>34, 90</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>32, 13</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Text\" xml:space=\"preserve\">\r\n    <value>Firma</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu\r\n        MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5\r\n        xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t\r\n        sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT\r\n        /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j\r\n        fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x\r\n        GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+\r\n        hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk\r\n        vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg\r\n        ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY\r\n        vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9\r\n        J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8\r\n        zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D\r\n        gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3\r\n        6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv\r\n        w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3\r\n        HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu\r\n        a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00\r\n        PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv\r\n        fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA\r\n        VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC\r\n        kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px\r\n        9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn\r\n        LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64\r\n        YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59\r\n        LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c\r\n        dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC\r\n        2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl\r\n        Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu\r\n        sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB\r\n        cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5\r\n        ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT\r\n        eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV\r\n        nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2\r\n        93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj\r\n        Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D\r\n        L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV\r\n        11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n\r\n        L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b\r\n        uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud\r\n        Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v\r\n        pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH\r\n        ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J\r\n        giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve\r\n        OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB\r\n        6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+\r\n        zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw\r\n        Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p\r\n        Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad\r\n        RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd\r\n        vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv\r\n        v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf\r\n        woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT\r\n        lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN\r\n        oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT\r\n        0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW\r\n        jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy\r\n        Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR\r\n        OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx\r\n        0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m\r\n        oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc\r\n        /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT\r\n        fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD\r\n        6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5\r\n        33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv\r\n        W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q\r\n        oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn\r\n        Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e\r\n        gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess\r\n        dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0\r\n        3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X\r\n        iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/\r\n        4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH\r\n        525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7\r\n        NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV\r\n        u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP\r\n        be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW\r\n        zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE\r\n        /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g\r\n        eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a\r\n        dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv\r\n        i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3\r\n        UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ\r\n        ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ\r\n        ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH\r\n        AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP\r\n        GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv\r\n        WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD\r\n        Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y\r\n        BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh\r\n        gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+\r\n        IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV\r\n        75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H\r\n        jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k\r\n        Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki\r\n        EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc\r\n        9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3\r\n        s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd\r\n        587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn\r\n        xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J\r\n        SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh\r\n        a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn\r\n        iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO\r\n        ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz\r\n        s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1\r\n        +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB\r\n        PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt\r\n        8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ\r\n        4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA\r\n        MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR\r\n        M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e\r\n        PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL\r\n        mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n\r\n        z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn\r\n        TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV\r\n        1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK\r\n        BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde\r\n        ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2\r\n        z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7\r\n        gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P\r\n        p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1\r\n        XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY\r\n        2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj\r\n        h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/\r\n        dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N\r\n        smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU\r\n        zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv\r\n        W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE\r\n        AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4\r\n        znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7\r\n        4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M\r\n        p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH\r\n        NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U\r\n        kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l\r\n        nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A\r\n        5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi\r\n        CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg\r\n        jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+\r\n        sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT\r\n        1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H\r\n        EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5\r\n        RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq\r\n        +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ\r\n        FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE\r\n        g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY\r\n        cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06\r\n        WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2\r\n        IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx\r\n        NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS\r\n        kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx\r\n        iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ\r\n        hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7\r\n        E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1\r\n        nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl\r\n        bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt\r\n        BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1\r\n        ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ\r\n        sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9\r\n        gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR\r\n        bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD\r\n        YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+\r\n        LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC\r\n        7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX\r\n        aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB\r\n        QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk\r\n        jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST\r\n        VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV\r\n        mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68\r\n        QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw\r\n        qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y\r\n        6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+\r\n        VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP\r\n        fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV\r\n        O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS\r\n        mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K\r\n        Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz\r\n        H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn\r\n        m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD\r\n        smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju\r\n        4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3\r\n        xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f\r\n        ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl\r\n        2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L\r\n        paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o\r\n        jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y\r\n        zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe\r\n        vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq\r\n        JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN\r\n        jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH\r\n        EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB\r\n        lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK\r\n        AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB\r\n        rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+\r\n        qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP\r\n        W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz\r\n        H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS\r\n        QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A\r\n        fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO\r\n        XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh\r\n        W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95\r\n        ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk\r\n        4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU\r\n        nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw\r\n        ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC\r\n        yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP\r\n        2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0\r\n        AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY\r\n        u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep\r\n        5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu\r\n        GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv\r\n        PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0\r\n        xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH\r\n        R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM\r\n        E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4\r\n        BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt\r\n        YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi\r\n        IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx\r\n        avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug\r\n        wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm\r\n        1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU\r\n        pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q\r\n        4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO\r\n        nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE\r\n        OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo\r\n        KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8\r\n        3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer\r\n        AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/\r\n        qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T\r\n        9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u\r\n        q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G\r\n        Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw\r\n        8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ\r\n        i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ\r\n        mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS\r\n        SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0\r\n        AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi\r\n        TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR\r\n        f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is\r\n        DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC\r\n        BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF\r\n        MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV\r\n        ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy\r\n        weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s\r\n        B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ\r\n        kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe\r\n        CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371\r\n        VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb\r\n        o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF\r\n        EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb\r\n        QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE\r\n        KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT\r\n        RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib\r\n        kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg\r\n        q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal\r\n        3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of\r\n        EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA\r\n        KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK\r\n        z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh\r\n        KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH\r\n        M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64\r\n        oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE\r\n        m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt\r\n        3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf\r\n        zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W\r\n        01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK\r\n        dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx\r\n        P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx\r\n        hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI\r\n        AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP\r\n        CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n\r\n        SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs\r\n        1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd\r\n        GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4\r\n        dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2\r\n        jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597\r\n        ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ\r\n        qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk\r\n        EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj\r\n        ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT\r\n        pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir\r\n        bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ\r\n        rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j\r\n        GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH\r\n        D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J\r\n        Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk\r\n        HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09\r\n        AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7\r\n        rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB\r\n        uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9\r\n        fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b\r\n        cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD\r\n        RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0\r\n        Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM\r\n        ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ\r\n        //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L\r\n        72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk\r\n        hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM\r\n        yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE\r\n        DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE\r\n        AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt\r\n        JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5\r\n        Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC\r\n        lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO\r\n        XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ\r\n        0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v\r\n        EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP\r\n        SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF\r\n        2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo\r\n        a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv\r\n        ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz\r\n        ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK\r\n        yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg\r\n        o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU\r\n        LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf\r\n        ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r\r\n        8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R\r\n        lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j\r\n        tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC\r\n        AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg\r\n        EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE\r\n        AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA\r\n        4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G\r\n        hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c\r\n        x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb\r\n        rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv\r\n        7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN\r\n        U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC\r\n        CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu\r\n        LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6\r\n        28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym\r\n        ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK\r\n        gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv\r\n        hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J\r\n        PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA\r\n        qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL\r\n        OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm\r\n        09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV\r\n        zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW\r\n        dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR\r\n        y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA\r\n        JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI\r\n        B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs\r\n        XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS\r\n        qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe\r\n        fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG\r\n        Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim\r\n        vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5\r\n        Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY\r\n        DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr\r\n        tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1\r\n        bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb\r\n        UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc\r\n        CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN\r\n        GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R\r\n        GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP\r\n        KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT\r\n        yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM\r\n        JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u\r\n        TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk\r\n        2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq\r\n        X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX\r\n        qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY\r\n        btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE\r\n        oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me\r\n        IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg\r\n        xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo\r\n        F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI\r\n        LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg\r\n        UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs\r\n        g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp\r\n        8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H\r\n        bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb\r\n        sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG\r\n        nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV\r\n        mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3\r\n        PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW\r\n        9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4\r\n        ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K\r\n        rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY\r\n        W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA\r\n        0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K\r\n        tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i\r\n        6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y\r\n        TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN\r\n        8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH\r\n        hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn\r\n        wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe\r\n        qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia\r\n        NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN\r\n        haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/\r\n        U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x\r\n        y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf\r\n        6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+\r\n        ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v\r\n        ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW\r\n        r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg\r\n        19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l\r\n        i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa\r\n        PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI\r\n        yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS\r\n        IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh\r\n        XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc\r\n        /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8\r\n        imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0\r\n        cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV\r\n        CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/\r\n        EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl\r\n        zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU\r\n        vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT\r\n        O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD\r\n        5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI\r\n        7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ\r\n        SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S\r\n        wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR\r\n        Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29\r\n        D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS\r\n        QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+\r\n        KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI\r\n        /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr\r\n        bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02\r\n        YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0\r\n        cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P\r\n        JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ\r\n        Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7\r\n        Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY\r\n        vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P\r\n        kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z\r\n        tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu\r\n        l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz\r\n        pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C\r\n        gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt\r\n        3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB\r\n        YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq\r\n        En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L\r\n        HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN\r\n        HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS\r\n        jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59\r\n        WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc\r\n        Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz\r\n        LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5\r\n        d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS\r\n        bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm\r\n        nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S\r\n        JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ\r\n        6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA\r\n        R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO\r\n        KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8\r\n        aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx\r\n        eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm\r\n        dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT\r\n        IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+\r\n        3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q\r\n        BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3\r\n        7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE\r\n        SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP\r\n        P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj\r\n        NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+\r\n        UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT\r\n        LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq\r\n        8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE\r\n        CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh\r\n        CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc\r\n        cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW\r\n        AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC\r\n        wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9\r\n        SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K\r\n        HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP\r\n        aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL\r\n        rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj\r\n        B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf\r\n        NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem\r\n        fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz\r\n        lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh\r\n        XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs\r\n        gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6\r\n        ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz\r\n        5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m\r\n        Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw\r\n        Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG\r\n        xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm\r\n        vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3\r\n        5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E\r\n        gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J\r\n        TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ\r\n        qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc\r\n        GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B\r\n        OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33\r\n        fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG\r\n        J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY\r\n        gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O\r\n        asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2\r\n        2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD\r\n        YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf\r\n        E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf\r\n        MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi\r\n        V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF\r\n        30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR\r\n        j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37\r\n        XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f\r\n        Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy\r\n        KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7\r\n        ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW\r\n        GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+\r\n        CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko\r\n        YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4\r\n        LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1\r\n        nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo\r\n        DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u\r\n        bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY\r\n        FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n\r\n        H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb\r\n        4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl\r\n        PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre\r\n        ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB\r\n        UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk\r\n        YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX\r\n        8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN\r\n        +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ\r\n        9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz\r\n        YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE\r\n        mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1\r\n        JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN\r\n        7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn\r\n        LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE\r\n        CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps\r\n        sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU\r\n        jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4\r\n        zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I\r\n        tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD\r\n        iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD\r\n        4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc\r\n        r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW\r\n        YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE\r\n        ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c\r\n        QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi\r\n        CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ\r\n        kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT\r\n        0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9\r\n        IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+\r\n        /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+\r\n        RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1\r\n        xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk\r\n        NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1\r\n        m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2\r\n        k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH\r\n        QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv\r\n        bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE\r\n        2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda\r\n        JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC\r\n        80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe\r\n        4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk\r\n        qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84\r\n        77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w\r\n        D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz\r\n        0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC\r\n        wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ\r\n        f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq\r\n        HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL\r\n        URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH\r\n        dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr\r\n        VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z\r\n        WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ\r\n        BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX\r\n        x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5\r\n        yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI\r\n        55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33\r\n        VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F\r\n        RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe\r\n        QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0\r\n        XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2\r\n        ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT\r\n        oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY\r\n        73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We\r\n        fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI\r\n        B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ\r\n        2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd\r\n        GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7\r\n        j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt\r\n        wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh\r\n        fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL\r\n        REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX\r\n        vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD\r\n        IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra\r\n        YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes\r\n        xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn\r\n        22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea\r\n        XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV\r\n        AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv\r\n        kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat\r\n        7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde\r\n        xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV\r\n        MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy\r\n        eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39\r\n        uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr\r\n        /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh\r\n        Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg\r\n        Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No\r\n        q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+\r\n        fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5\r\n        YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7\r\n        KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP\r\n        Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP\r\n        2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7\r\n        30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD\r\n        Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn\r\n        PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx\r\n        0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M\r\n        rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q\r\n        yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA\r\n        n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g\r\n        o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt\r\n        e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p\r\n        EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO\r\n        Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx\r\n        6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK\r\n        t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+\r\n        w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8\r\n        eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq\r\n        KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h\r\n        jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL\r\n        x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h\r\n        Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3\r\n        nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1\r\n        A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe\r\n        BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy\r\n        DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK\r\n        pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5\r\n        SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk\r\n        5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE\r\n        CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G\r\n        ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD\r\n        menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG\r\n        xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl\r\n        6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd\r\n        pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9\r\n        EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL\r\n        W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX\r\n        E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy\r\n        SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx\r\n        WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp\r\n        ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ\r\n        W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB\r\n        KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW\r\n        /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY\r\n        UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT\r\n        Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD\r\n        WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo\r\n        lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM\r\n        DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA\r\n        QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q\r\n        GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc\r\n        iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq\r\n        m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ\r\n        KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef\r\n        tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy\r\n        ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE\r\n        pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq\r\n        cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y\r\n        YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3\r\n        qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH\r\n        UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf\r\n        XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU\r\n        RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu\r\n        gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot\r\n        wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb\r\n        9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3\r\n        tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU\r\n        c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc\r\n        LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es\r\n        ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY\r\n        d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU\r\n        pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v\r\n        MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T\r\n        Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN\r\n        2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b\r\n        +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2\r\n        ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7\r\n        vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q\r\n        ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN\r\n        CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG\r\n        L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9\r\n        nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui\r\n        bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS\r\n        l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK\r\n        DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G\r\n        IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+\r\n        P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK\r\n        oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0\r\n        2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV\r\n        nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3\r\n        yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3\r\n        CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ\r\n        O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe\r\n        Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/\r\n        y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK\r\n        2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX\r\n        MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh\r\n        alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK\r\n        FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY\r\n        HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p\r\n        vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P\r\n        nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G\r\n        XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY\r\n        2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk\r\n        cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5\r\n        1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr\r\n        448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha\r\n        GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS\r\n        D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO\r\n        MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM\r\n        GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz\r\n        wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu\r\n        m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1\r\n        6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT\r\n        Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK\r\n        rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ\r\n        G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H\r\n        2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze\r\n        h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H\r\n        qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY\r\n        CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT\r\n        8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo\r\n        KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k\r\n        oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH\r\n        KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p\r\n        AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa\r\n        7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy\r\n        Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq\r\n        w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t\r\n        WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a\r\n        JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk\r\n        vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg\r\n        PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps\r\n        sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek\r\n        JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD\r\n        qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE\r\n        n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb\r\n        n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK\r\n        ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6\r\n        EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt\r\n        /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a\r\n        Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK\r\n        FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW\r\n        AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb\r\n        8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU\r\n        46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7\r\n        c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/\r\n        sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly\r\n        iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G\r\n        D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru\r\n        IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5\r\n        9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C\r\n        M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA\r\n        82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/\r\n        SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W\r\n        aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf\r\n        3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN\r\n        AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA\r\n        AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o\r\n        GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94\r\n        RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz\r\n        C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw\r\n        7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ\r\n        sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A\r\n        J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d\r\n        da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+\r\n        OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy\r\n        F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+\r\n        fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA\r\n        EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av\r\n        F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P\r\n        k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC\r\n        vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT\r\n        oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W\r\n        p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs\r\n        gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud\r\n        ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h\r\n        VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt\r\n        kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG\r\n        JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD\r\n        CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN\r\n        o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU\r\n        vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2\r\n        0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC\r\n        Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc\r\n        e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH\r\n        cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP\r\n        UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV\r\n        jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO\r\n        TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp\r\n        JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af\r\n        ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi\r\n        Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP\r\n        ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv\r\n        J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw\r\n        DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1\r\n        EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb\r\n        AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5\r\n        ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj\r\n        XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn\r\n        /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2\r\n        UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ\r\n        Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1\r\n        doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW\r\n        ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4\r\n        OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H\r\n        SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo\r\n        UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF\r\n        pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw\r\n        yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M\r\n        lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z\r\n        Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN\r\n        f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh\r\n        S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6\r\n        UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa\r\n        TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK\r\n        nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z\r\n        tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy\r\n        jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p\r\n        tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX\r\n        77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu\r\n        QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC\r\n        obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J\r\n        vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42\r\n        aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p\r\n        z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl\r\n        0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3\r\n        6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7\r\n        qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl\r\n        e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM\r\n        COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD\r\n        /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ\r\n        G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24\r\n        Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9\r\n        Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN\r\n        pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk\r\n        QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP\r\n        SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo\r\n        gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG\r\n        OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm\r\n        AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7\r\n        ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC\r\n        DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC\r\n        QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H\r\n        g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n\r\n        TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko\r\n        iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7\r\n        EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8\r\n        FZYAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/dlgAbout.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"picRegEditPHP.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS\r\n        gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE\r\n        gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg\r\n        GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8\r\n        UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika\r\n        kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD\r\n        6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy\r\n        4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ\r\n        6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"lblProductI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>34, 38</value>\r\n  </data>\r\n  <data name=\"lblProductI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>48, 13</value>\r\n  </data>\r\n  <data name=\"lblProductI.Text\" xml:space=\"preserve\">\r\n    <value>Proizvod</value>\r\n  </data>\r\n  <data name=\"lblProduct.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 38</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>48, 51</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>34, 13</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Text\" xml:space=\"preserve\">\r\n    <value>Naziv</value>\r\n  </data>\r\n  <data name=\"lblTitle.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 51</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>44, 64</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>38, 13</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Text\" xml:space=\"preserve\">\r\n    <value>Verzija</value>\r\n  </data>\r\n  <data name=\"lblVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 64</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>54, 77</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>28, 13</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Text\" xml:space=\"preserve\">\r\n    <value>Opis</value>\r\n  </data>\r\n  <data name=\"lblDescription.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 77</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>44, 90</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>38, 13</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Text\" xml:space=\"preserve\">\r\n    <value>Tvrtka</value>\r\n  </data>\r\n  <data name=\"lblCompany.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 90</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 103</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>79, 13</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Text\" xml:space=\"preserve\">\r\n    <value>Autorska prava</value>\r\n  </data>\r\n  <data name=\"lblCopyright.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 103</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>21, 116</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>61, 13</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Text\" xml:space=\"preserve\">\r\n    <value>Omogućuje</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>88, 116</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu\r\n        MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5\r\n        xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t\r\n        sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT\r\n        /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j\r\n        fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x\r\n        GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+\r\n        hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk\r\n        vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg\r\n        ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY\r\n        vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9\r\n        J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8\r\n        zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D\r\n        gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3\r\n        6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv\r\n        w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3\r\n        HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu\r\n        a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00\r\n        PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv\r\n        fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA\r\n        VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC\r\n        kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px\r\n        9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn\r\n        LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64\r\n        YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59\r\n        LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c\r\n        dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC\r\n        2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl\r\n        Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu\r\n        sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB\r\n        cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5\r\n        ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT\r\n        eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV\r\n        nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2\r\n        93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj\r\n        Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D\r\n        L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV\r\n        11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n\r\n        L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b\r\n        uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud\r\n        Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v\r\n        pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH\r\n        ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J\r\n        giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve\r\n        OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB\r\n        6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+\r\n        zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw\r\n        Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p\r\n        Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad\r\n        RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd\r\n        vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv\r\n        v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf\r\n        woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT\r\n        lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN\r\n        oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT\r\n        0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW\r\n        jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy\r\n        Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR\r\n        OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx\r\n        0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m\r\n        oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc\r\n        /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT\r\n        fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD\r\n        6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5\r\n        33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv\r\n        W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q\r\n        oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn\r\n        Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e\r\n        gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess\r\n        dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0\r\n        3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X\r\n        iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/\r\n        4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH\r\n        525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7\r\n        NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV\r\n        u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP\r\n        be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW\r\n        zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE\r\n        /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g\r\n        eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a\r\n        dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv\r\n        i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3\r\n        UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ\r\n        ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ\r\n        ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH\r\n        AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP\r\n        GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv\r\n        WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD\r\n        Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y\r\n        BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh\r\n        gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+\r\n        IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV\r\n        75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H\r\n        jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k\r\n        Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki\r\n        EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc\r\n        9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3\r\n        s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd\r\n        587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn\r\n        xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J\r\n        SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh\r\n        a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn\r\n        iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO\r\n        ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz\r\n        s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1\r\n        +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB\r\n        PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt\r\n        8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ\r\n        4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA\r\n        MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR\r\n        M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e\r\n        PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL\r\n        mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n\r\n        z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn\r\n        TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV\r\n        1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK\r\n        BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde\r\n        ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2\r\n        z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7\r\n        gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P\r\n        p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1\r\n        XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY\r\n        2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj\r\n        h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/\r\n        dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N\r\n        smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU\r\n        zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv\r\n        W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE\r\n        AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4\r\n        znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7\r\n        4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M\r\n        p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH\r\n        NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U\r\n        kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l\r\n        nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A\r\n        5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi\r\n        CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg\r\n        jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+\r\n        sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT\r\n        1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H\r\n        EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5\r\n        RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq\r\n        +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ\r\n        FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE\r\n        g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY\r\n        cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06\r\n        WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2\r\n        IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx\r\n        NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS\r\n        kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx\r\n        iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ\r\n        hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7\r\n        E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1\r\n        nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl\r\n        bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt\r\n        BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1\r\n        ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ\r\n        sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9\r\n        gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR\r\n        bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD\r\n        YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+\r\n        LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC\r\n        7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX\r\n        aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB\r\n        QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk\r\n        jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST\r\n        VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV\r\n        mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68\r\n        QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw\r\n        qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y\r\n        6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+\r\n        VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP\r\n        fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV\r\n        O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS\r\n        mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K\r\n        Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz\r\n        H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn\r\n        m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD\r\n        smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju\r\n        4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3\r\n        xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f\r\n        ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl\r\n        2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L\r\n        paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o\r\n        jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y\r\n        zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe\r\n        vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq\r\n        JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN\r\n        jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH\r\n        EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB\r\n        lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK\r\n        AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB\r\n        rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+\r\n        qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP\r\n        W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz\r\n        H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS\r\n        QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A\r\n        fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO\r\n        XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh\r\n        W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95\r\n        ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk\r\n        4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU\r\n        nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw\r\n        ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC\r\n        yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP\r\n        2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0\r\n        AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY\r\n        u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep\r\n        5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu\r\n        GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv\r\n        PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0\r\n        xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH\r\n        R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM\r\n        E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4\r\n        BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt\r\n        YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi\r\n        IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx\r\n        avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug\r\n        wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm\r\n        1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU\r\n        pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q\r\n        4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO\r\n        nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE\r\n        OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo\r\n        KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8\r\n        3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer\r\n        AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/\r\n        qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T\r\n        9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u\r\n        q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G\r\n        Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw\r\n        8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ\r\n        i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ\r\n        mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS\r\n        SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0\r\n        AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi\r\n        TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR\r\n        f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is\r\n        DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC\r\n        BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF\r\n        MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV\r\n        ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy\r\n        weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s\r\n        B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ\r\n        kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe\r\n        CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371\r\n        VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb\r\n        o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF\r\n        EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb\r\n        QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE\r\n        KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT\r\n        RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib\r\n        kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg\r\n        q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal\r\n        3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of\r\n        EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA\r\n        KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK\r\n        z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh\r\n        KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH\r\n        M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64\r\n        oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE\r\n        m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt\r\n        3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf\r\n        zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W\r\n        01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK\r\n        dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx\r\n        P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx\r\n        hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI\r\n        AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP\r\n        CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n\r\n        SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs\r\n        1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd\r\n        GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4\r\n        dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2\r\n        jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597\r\n        ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ\r\n        qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk\r\n        EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj\r\n        ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT\r\n        pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir\r\n        bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ\r\n        rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j\r\n        GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH\r\n        D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J\r\n        Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk\r\n        HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09\r\n        AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7\r\n        rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB\r\n        uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9\r\n        fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b\r\n        cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD\r\n        RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0\r\n        Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM\r\n        ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ\r\n        //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L\r\n        72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk\r\n        hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM\r\n        yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE\r\n        DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE\r\n        AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt\r\n        JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5\r\n        Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC\r\n        lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO\r\n        XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ\r\n        0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v\r\n        EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP\r\n        SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF\r\n        2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo\r\n        a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv\r\n        ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz\r\n        ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK\r\n        yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg\r\n        o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU\r\n        LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf\r\n        ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r\r\n        8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R\r\n        lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j\r\n        tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC\r\n        AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg\r\n        EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE\r\n        AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA\r\n        4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G\r\n        hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c\r\n        x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb\r\n        rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv\r\n        7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN\r\n        U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC\r\n        CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu\r\n        LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6\r\n        28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym\r\n        ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK\r\n        gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv\r\n        hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J\r\n        PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA\r\n        qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL\r\n        OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm\r\n        09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV\r\n        zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW\r\n        dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR\r\n        y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA\r\n        JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI\r\n        B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs\r\n        XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS\r\n        qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe\r\n        fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG\r\n        Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim\r\n        vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5\r\n        Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY\r\n        DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr\r\n        tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1\r\n        bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb\r\n        UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc\r\n        CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN\r\n        GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R\r\n        GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP\r\n        KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT\r\n        yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM\r\n        JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u\r\n        TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk\r\n        2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq\r\n        X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX\r\n        qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY\r\n        btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE\r\n        oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me\r\n        IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg\r\n        xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo\r\n        F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI\r\n        LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg\r\n        UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs\r\n        g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp\r\n        8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H\r\n        bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb\r\n        sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG\r\n        nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV\r\n        mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3\r\n        PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW\r\n        9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4\r\n        ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K\r\n        rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY\r\n        W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA\r\n        0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K\r\n        tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i\r\n        6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y\r\n        TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN\r\n        8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH\r\n        hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn\r\n        wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe\r\n        qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia\r\n        NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN\r\n        haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/\r\n        U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x\r\n        y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf\r\n        6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+\r\n        ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v\r\n        ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW\r\n        r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg\r\n        19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l\r\n        i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa\r\n        PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI\r\n        yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS\r\n        IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh\r\n        XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc\r\n        /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8\r\n        imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0\r\n        cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV\r\n        CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/\r\n        EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl\r\n        zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU\r\n        vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT\r\n        O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD\r\n        5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI\r\n        7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ\r\n        SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S\r\n        wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR\r\n        Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29\r\n        D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS\r\n        QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+\r\n        KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI\r\n        /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr\r\n        bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02\r\n        YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0\r\n        cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P\r\n        JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ\r\n        Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7\r\n        Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY\r\n        vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P\r\n        kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z\r\n        tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu\r\n        l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz\r\n        pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C\r\n        gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt\r\n        3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB\r\n        YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq\r\n        En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L\r\n        HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN\r\n        HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS\r\n        jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59\r\n        WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc\r\n        Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz\r\n        LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5\r\n        d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS\r\n        bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm\r\n        nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S\r\n        JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ\r\n        6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA\r\n        R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO\r\n        KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8\r\n        aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx\r\n        eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm\r\n        dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT\r\n        IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+\r\n        3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q\r\n        BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3\r\n        7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE\r\n        SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP\r\n        P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj\r\n        NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+\r\n        UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT\r\n        LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq\r\n        8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE\r\n        CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh\r\n        CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc\r\n        cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW\r\n        AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC\r\n        wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9\r\n        SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K\r\n        HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP\r\n        aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL\r\n        rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj\r\n        B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf\r\n        NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem\r\n        fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz\r\n        lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh\r\n        XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs\r\n        gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6\r\n        ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz\r\n        5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m\r\n        Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw\r\n        Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG\r\n        xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm\r\n        vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3\r\n        5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E\r\n        gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J\r\n        TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ\r\n        qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc\r\n        GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B\r\n        OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33\r\n        fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG\r\n        J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY\r\n        gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O\r\n        asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2\r\n        2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD\r\n        YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf\r\n        E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf\r\n        MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi\r\n        V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF\r\n        30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR\r\n        j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37\r\n        XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f\r\n        Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy\r\n        KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7\r\n        ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW\r\n        GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+\r\n        CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko\r\n        YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4\r\n        LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1\r\n        nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo\r\n        DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u\r\n        bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY\r\n        FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n\r\n        H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb\r\n        4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl\r\n        PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre\r\n        ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB\r\n        UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk\r\n        YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX\r\n        8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN\r\n        +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ\r\n        9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz\r\n        YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE\r\n        mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1\r\n        JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN\r\n        7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn\r\n        LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE\r\n        CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps\r\n        sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU\r\n        jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4\r\n        zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I\r\n        tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD\r\n        iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD\r\n        4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc\r\n        r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW\r\n        YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE\r\n        ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c\r\n        QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi\r\n        CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ\r\n        kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT\r\n        0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9\r\n        IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+\r\n        /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+\r\n        RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1\r\n        xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk\r\n        NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1\r\n        m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2\r\n        k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH\r\n        QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv\r\n        bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE\r\n        2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda\r\n        JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC\r\n        80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe\r\n        4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk\r\n        qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84\r\n        77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w\r\n        D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz\r\n        0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC\r\n        wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ\r\n        f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq\r\n        HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL\r\n        URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH\r\n        dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr\r\n        VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z\r\n        WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ\r\n        BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX\r\n        x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5\r\n        yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI\r\n        55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33\r\n        VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F\r\n        RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe\r\n        QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0\r\n        XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2\r\n        ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT\r\n        oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY\r\n        73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We\r\n        fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI\r\n        B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ\r\n        2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd\r\n        GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7\r\n        j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt\r\n        wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh\r\n        fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL\r\n        REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX\r\n        vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD\r\n        IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra\r\n        YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes\r\n        xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn\r\n        22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea\r\n        XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV\r\n        AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv\r\n        kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat\r\n        7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde\r\n        xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV\r\n        MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy\r\n        eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39\r\n        uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr\r\n        /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh\r\n        Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg\r\n        Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No\r\n        q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+\r\n        fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5\r\n        YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7\r\n        KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP\r\n        Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP\r\n        2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7\r\n        30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD\r\n        Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn\r\n        PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx\r\n        0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M\r\n        rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q\r\n        yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA\r\n        n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g\r\n        o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt\r\n        e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p\r\n        EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO\r\n        Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx\r\n        6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK\r\n        t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+\r\n        w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8\r\n        eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq\r\n        KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h\r\n        jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL\r\n        x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h\r\n        Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3\r\n        nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1\r\n        A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe\r\n        BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy\r\n        DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK\r\n        pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5\r\n        SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk\r\n        5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE\r\n        CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G\r\n        ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD\r\n        menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG\r\n        xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl\r\n        6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd\r\n        pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9\r\n        EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL\r\n        W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX\r\n        E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy\r\n        SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx\r\n        WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp\r\n        ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ\r\n        W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB\r\n        KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW\r\n        /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY\r\n        UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT\r\n        Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD\r\n        WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo\r\n        lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM\r\n        DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA\r\n        QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q\r\n        GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc\r\n        iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq\r\n        m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ\r\n        KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef\r\n        tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy\r\n        ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE\r\n        pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq\r\n        cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y\r\n        YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3\r\n        qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH\r\n        UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf\r\n        XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU\r\n        RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu\r\n        gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot\r\n        wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb\r\n        9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3\r\n        tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU\r\n        c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc\r\n        LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es\r\n        ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY\r\n        d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU\r\n        pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v\r\n        MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T\r\n        Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN\r\n        2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b\r\n        +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2\r\n        ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7\r\n        vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q\r\n        ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN\r\n        CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG\r\n        L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9\r\n        nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui\r\n        bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS\r\n        l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK\r\n        DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G\r\n        IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+\r\n        P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK\r\n        oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0\r\n        2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV\r\n        nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3\r\n        yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3\r\n        CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ\r\n        O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe\r\n        Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/\r\n        y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK\r\n        2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX\r\n        MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh\r\n        alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK\r\n        FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY\r\n        HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p\r\n        vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P\r\n        nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G\r\n        XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY\r\n        2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk\r\n        cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5\r\n        1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr\r\n        448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha\r\n        GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS\r\n        D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO\r\n        MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM\r\n        GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz\r\n        wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu\r\n        m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1\r\n        6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT\r\n        Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK\r\n        rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ\r\n        G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H\r\n        2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze\r\n        h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H\r\n        qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY\r\n        CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT\r\n        8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo\r\n        KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k\r\n        oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH\r\n        KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p\r\n        AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa\r\n        7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy\r\n        Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq\r\n        w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t\r\n        WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a\r\n        JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk\r\n        vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg\r\n        PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps\r\n        sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek\r\n        JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD\r\n        qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE\r\n        n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb\r\n        n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK\r\n        ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6\r\n        EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt\r\n        /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a\r\n        Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK\r\n        FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW\r\n        AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb\r\n        8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU\r\n        46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7\r\n        c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/\r\n        sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly\r\n        iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G\r\n        D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru\r\n        IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5\r\n        9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C\r\n        M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA\r\n        82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/\r\n        SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W\r\n        aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf\r\n        3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN\r\n        AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA\r\n        AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o\r\n        GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94\r\n        RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz\r\n        C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw\r\n        7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ\r\n        sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A\r\n        J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d\r\n        da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+\r\n        OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy\r\n        F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+\r\n        fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA\r\n        EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av\r\n        F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P\r\n        k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC\r\n        vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT\r\n        oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W\r\n        p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs\r\n        gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud\r\n        ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h\r\n        VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt\r\n        kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG\r\n        JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD\r\n        CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN\r\n        o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU\r\n        vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2\r\n        0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC\r\n        Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc\r\n        e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH\r\n        cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP\r\n        UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV\r\n        jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO\r\n        TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp\r\n        JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af\r\n        ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi\r\n        Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP\r\n        ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv\r\n        J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw\r\n        DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1\r\n        EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb\r\n        AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5\r\n        ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj\r\n        XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn\r\n        /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2\r\n        UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ\r\n        Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1\r\n        doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW\r\n        ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4\r\n        OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H\r\n        SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo\r\n        UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF\r\n        pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw\r\n        yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M\r\n        lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z\r\n        Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN\r\n        f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh\r\n        S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6\r\n        UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa\r\n        TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK\r\n        nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z\r\n        tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy\r\n        jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p\r\n        tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX\r\n        77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu\r\n        QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC\r\n        obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J\r\n        vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42\r\n        aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p\r\n        z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl\r\n        0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3\r\n        6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7\r\n        qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl\r\n        e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM\r\n        COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD\r\n        /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ\r\n        G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24\r\n        Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9\r\n        Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN\r\n        pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk\r\n        QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP\r\n        SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo\r\n        gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG\r\n        OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm\r\n        AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7\r\n        ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC\r\n        DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC\r\n        QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H\r\n        g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n\r\n        TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko\r\n        iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7\r\n        EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8\r\n        FZYAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>158, 443</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>49, 23</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;U redu</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>O</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/dlgAbout.php",
    "content": "﻿<?\r\n    import namespace RegEditPHP;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class dlgAbout extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $tlpMain;\r\n            \r\n            private $llbPhalanger;\r\n            \r\n            private $picRegEditPHP;\r\n            \r\n            private $lblProductI;\r\n            \r\n            private $lblProduct;\r\n            \r\n            private $lblTitleI;\r\n            \r\n            private $lblTitle;\r\n            \r\n            private $lblVersionI;\r\n            \r\n            private $lblVersion;\r\n            \r\n            private $lblDescriptionI;\r\n            \r\n            private $lblDescription;\r\n            \r\n            private $lblCompanyI;\r\n            \r\n            private $lblCompany;\r\n            \r\n            private $lblCopyryghtI;\r\n            \r\n            private $lblCopyright;\r\n            \r\n            private $lblPoweredByI;\r\n            \r\n            private $picPhalanger;\r\n            \r\n            private $rtbReadMe;\r\n            \r\n            private $cmdOK;\r\n            \r\n            private $components = NULL;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n            }\r\n            \r\n            private function InitializeComponent() {\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf dlgAbout );\r\n                $this->tlpMain = new System:::Windows:::Forms:::TableLayoutPanel();\r\n                $this->picRegEditPHP = new System:::Windows:::Forms:::PictureBox();\r\n                $this->lblProductI = new System:::Windows:::Forms:::Label();\r\n                $this->lblProduct = new System:::Windows:::Forms:::Label();\r\n                $this->lblTitleI = new System:::Windows:::Forms:::Label();\r\n                $this->lblTitle = new System:::Windows:::Forms:::Label();\r\n                $this->lblVersionI = new System:::Windows:::Forms:::Label();\r\n                $this->lblVersion = new System:::Windows:::Forms:::Label();\r\n                $this->lblDescriptionI = new System:::Windows:::Forms:::Label();\r\n                $this->lblDescription = new System:::Windows:::Forms:::Label();\r\n                $this->lblCompanyI = new System:::Windows:::Forms:::Label();\r\n                $this->lblCompany = new System:::Windows:::Forms:::Label();\r\n                $this->lblCopyryghtI = new System:::Windows:::Forms:::Label();\r\n                $this->lblCopyright = new System:::Windows:::Forms:::Label();\r\n                $this->lblPoweredByI = new System:::Windows:::Forms:::Label();\r\n                $this->llbPhalanger = new System:::Windows:::Forms:::LinkLabel();\r\n                $this->picPhalanger = new System:::Windows:::Forms:::PictureBox();\r\n                $this->rtbReadMe = new System:::Windows:::Forms:::RichTextBox();\r\n                $this->cmdOK = new System:::Windows:::Forms:::Button();\r\n                $this->tlpMain->SuspendLayout();\r\n                $this->picRegEditPHP->BeginInit();\r\n                $this->picPhalanger->BeginInit();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tlpMain\r\n                // \r\n                $this->tlpMain->AccessibleDescription = NULL;\r\n                $this->tlpMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tlpMain, \"tlpMain\");\r\n                $this->tlpMain->BackgroundImage = NULL;\r\n                $this->tlpMain->Controls->Add($this->picRegEditPHP, 0, 0);\r\n                $this->tlpMain->Controls->Add($this->lblProductI, 0, 1);\r\n                $this->tlpMain->Controls->Add($this->lblProduct, 1, 1);\r\n                $this->tlpMain->Controls->Add($this->lblTitleI, 0, 2);\r\n                $this->tlpMain->Controls->Add($this->lblTitle, 1, 2);\r\n                $this->tlpMain->Controls->Add($this->lblVersionI, 0, 3);\r\n                $this->tlpMain->Controls->Add($this->lblVersion, 1, 3);\r\n                $this->tlpMain->Controls->Add($this->lblDescriptionI, 0, 4);\r\n                $this->tlpMain->Controls->Add($this->lblDescription, 1, 4);\r\n                $this->tlpMain->Controls->Add($this->lblCompanyI, 0, 5);\r\n                $this->tlpMain->Controls->Add($this->lblCompany, 1, 5);\r\n                $this->tlpMain->Controls->Add($this->lblCopyryghtI, 0, 6);\r\n                $this->tlpMain->Controls->Add($this->lblCopyright, 1, 6);\r\n                $this->tlpMain->Controls->Add($this->lblPoweredByI, 0, 7);\r\n                $this->tlpMain->Controls->Add($this->llbPhalanger, 1, 7);\r\n                $this->tlpMain->Controls->Add($this->picPhalanger, 0, 8);\r\n                $this->tlpMain->Controls->Add($this->rtbReadMe, 0, 9);\r\n                $this->tlpMain->Controls->Add($this->cmdOK, 0, 10);\r\n                $this->tlpMain->Font = NULL;\r\n                $this->tlpMain->Name = \"tlpMain\";\r\n                // \r\n                // picRegEditPHP\r\n                // \r\n                $this->picRegEditPHP->AccessibleDescription = NULL;\r\n                $this->picRegEditPHP->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->picRegEditPHP, \"picRegEditPHP\");\r\n                $this->picRegEditPHP->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->picRegEditPHP, 2);\r\n                $this->picRegEditPHP->Font = NULL;\r\n                $this->picRegEditPHP->ImageLocation = NULL;\r\n                $this->picRegEditPHP->Name = \"picRegEditPHP\";\r\n                $this->picRegEditPHP->TabStop = false;\r\n                // \r\n                // lblProductI\r\n                // \r\n                $this->lblProductI->AccessibleDescription = NULL;\r\n                $this->lblProductI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblProductI, \"lblProductI\");\r\n                $this->lblProductI->Font = NULL;\r\n                $this->lblProductI->Name = \"lblProductI\";\r\n                // \r\n                // lblProduct\r\n                // \r\n                $this->lblProduct->AccessibleDescription = NULL;\r\n                $this->lblProduct->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblProduct, \"lblProduct\");\r\n                $this->lblProduct->Font = NULL;\r\n                $this->lblProduct->Name = \"lblProduct\";\r\n                // \r\n                // lblTitleI\r\n                // \r\n                $this->lblTitleI->AccessibleDescription = NULL;\r\n                $this->lblTitleI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblTitleI, \"lblTitleI\");\r\n                $this->lblTitleI->Font = NULL;\r\n                $this->lblTitleI->Name = \"lblTitleI\";\r\n                // \r\n                // lblTitle\r\n                // \r\n                $this->lblTitle->AccessibleDescription = NULL;\r\n                $this->lblTitle->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblTitle, \"lblTitle\");\r\n                $this->lblTitle->Font = NULL;\r\n                $this->lblTitle->Name = \"lblTitle\";\r\n                // \r\n                // lblVersionI\r\n                // \r\n                $this->lblVersionI->AccessibleDescription = NULL;\r\n                $this->lblVersionI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblVersionI, \"lblVersionI\");\r\n                $this->lblVersionI->Font = NULL;\r\n                $this->lblVersionI->Name = \"lblVersionI\";\r\n                // \r\n                // lblVersion\r\n                // \r\n                $this->lblVersion->AccessibleDescription = NULL;\r\n                $this->lblVersion->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblVersion, \"lblVersion\");\r\n                $this->lblVersion->Font = NULL;\r\n                $this->lblVersion->Name = \"lblVersion\";\r\n                // \r\n                // lblDescriptionI\r\n                // \r\n                $this->lblDescriptionI->AccessibleDescription = NULL;\r\n                $this->lblDescriptionI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblDescriptionI, \"lblDescriptionI\");\r\n                $this->lblDescriptionI->Font = NULL;\r\n                $this->lblDescriptionI->Name = \"lblDescriptionI\";\r\n                // \r\n                // lblDescription\r\n                // \r\n                $this->lblDescription->AccessibleDescription = NULL;\r\n                $this->lblDescription->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblDescription, \"lblDescription\");\r\n                $this->lblDescription->Font = NULL;\r\n                $this->lblDescription->Name = \"lblDescription\";\r\n                // \r\n                // lblCompanyI\r\n                // \r\n                $this->lblCompanyI->AccessibleDescription = NULL;\r\n                $this->lblCompanyI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblCompanyI, \"lblCompanyI\");\r\n                $this->lblCompanyI->Font = NULL;\r\n                $this->lblCompanyI->Name = \"lblCompanyI\";\r\n                // \r\n                // lblCompany\r\n                // \r\n                $this->lblCompany->AccessibleDescription = NULL;\r\n                $this->lblCompany->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblCompany, \"lblCompany\");\r\n                $this->lblCompany->Font = NULL;\r\n                $this->lblCompany->Name = \"lblCompany\";\r\n                // \r\n                // lblCopyryghtI\r\n                // \r\n                $this->lblCopyryghtI->AccessibleDescription = NULL;\r\n                $this->lblCopyryghtI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblCopyryghtI, \"lblCopyryghtI\");\r\n                $this->lblCopyryghtI->Font = NULL;\r\n                $this->lblCopyryghtI->Name = \"lblCopyryghtI\";\r\n                // \r\n                // lblCopyright\r\n                // \r\n                $this->lblCopyright->AccessibleDescription = NULL;\r\n                $this->lblCopyright->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblCopyright, \"lblCopyright\");\r\n                $this->lblCopyright->Font = NULL;\r\n                $this->lblCopyright->Name = \"lblCopyright\";\r\n                // \r\n                // lblPoweredByI\r\n                // \r\n                $this->lblPoweredByI->AccessibleDescription = NULL;\r\n                $this->lblPoweredByI->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lblPoweredByI, \"lblPoweredByI\");\r\n                $this->lblPoweredByI->Font = NULL;\r\n                $this->lblPoweredByI->Name = \"lblPoweredByI\";\r\n                // \r\n                // llbPhalanger\r\n                // \r\n                $this->llbPhalanger->AccessibleDescription = NULL;\r\n                $this->llbPhalanger->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->llbPhalanger, \"llbPhalanger\");\r\n                $this->llbPhalanger->Font = NULL;\r\n                $this->llbPhalanger->Name = \"llbPhalanger\";\r\n                $this->llbPhalanger->TabStop = true;\r\n                $this->llbPhalanger->LinkClicked->Add(new System:::Windows:::Forms:::LinkLabelLinkClickedEventHandler(array($this, \"llbPhalanger_LinkClicked\")));\r\n                // \r\n                // picPhalanger\r\n                // \r\n                $this->picPhalanger->AccessibleDescription = NULL;\r\n                $this->picPhalanger->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->picPhalanger, \"picPhalanger\");\r\n                $this->picPhalanger->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->picPhalanger, 2);\r\n                $this->picPhalanger->Cursor = System:::Windows:::Forms:::Cursors::$Hand;\r\n                $this->picPhalanger->Font = NULL;\r\n                $this->picPhalanger->ImageLocation = NULL;\r\n                $this->picPhalanger->Name = \"picPhalanger\";\r\n                $this->picPhalanger->TabStop = false;\r\n                $this->picPhalanger->Click->Add(new System:::EventHandler(array($this, \"picPhalanger_Click\")));\r\n                // \r\n                // rtbReadMe\r\n                // \r\n                $this->rtbReadMe->AccessibleDescription = NULL;\r\n                $this->rtbReadMe->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->rtbReadMe, \"rtbReadMe\");\r\n                $this->rtbReadMe->BackColor = System:::Drawing:::SystemColors::$Control;\r\n                $this->rtbReadMe->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->rtbReadMe, 2);\r\n                $this->rtbReadMe->Font = NULL;\r\n                $this->rtbReadMe->Name = \"rtbReadMe\";\r\n                $this->rtbReadMe->ReadOnly = true;\r\n                // \r\n                // cmdOK\r\n                // \r\n                $this->cmdOK->AccessibleDescription = NULL;\r\n                $this->cmdOK->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmdOK, \"cmdOK\");\r\n                $this->cmdOK->BackgroundImage = NULL;\r\n                $this->tlpMain->SetColumnSpan($this->cmdOK, 2);\r\n                $this->cmdOK->DialogResult = System:::Windows:::Forms:::DialogResult::Cancel;\r\n                $this->cmdOK->Font = NULL;\r\n                $this->cmdOK->Name = \"cmdOK\";\r\n                $this->cmdOK->UseVisualStyleBackColor = true;\r\n                $this->cmdOK->Click->Add(new System:::EventHandler(array($this, \"cmdOK_Click\")));\r\n                // \r\n                // dlgAbout\r\n                // \r\n                $this->AcceptButton = $this->cmdOK;\r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font;\r\n                $this->BackgroundImage = NULL;\r\n                $this->CancelButton = $this->cmdOK;\r\n                $this->Controls->Add($this->tlpMain);\r\n                $this->Font = NULL;\r\n                $this->Icon = NULL;\r\n                $this->MaximizeBox = false;\r\n                $this->MinimizeBox = false;\r\n                $this->Name = \"dlgAbout\";\r\n                $this->Opacity = 0.9;\r\n                $this->ShowIcon = false;\r\n                $this->ShowInTaskbar = false;\r\n                $this->Load->Add(new System:::EventHandler(array($this, \"dlgAbout_Load\")));\r\n                $this->tlpMain->ResumeLayout(false);\r\n                $this->tlpMain->PerformLayout();\r\n                $this->picRegEditPHP->EndInit();\r\n                $this->picPhalanger->EndInit();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/dlgAbout.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"&gt;&gt;lblDescriptionI.Name\" xml:space=\"preserve\">\r\n    <value>lblDescriptionI</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"lblDescriptionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>60, 13</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"tlpMain.LayoutSettings\" type=\"System.Windows.Forms.TableLayoutSettings, System.Windows.Forms\">\r\n    <value>&lt;?xml version=\"1.0\" encoding=\"utf-16\"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name=\"picRegEditPHP\" Row=\"0\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"lblProductI\" Row=\"1\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblProduct\" Row=\"1\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblTitleI\" Row=\"2\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblTitle\" Row=\"2\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblVersionI\" Row=\"3\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblVersion\" Row=\"3\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblDescriptionI\" Row=\"4\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblDescription\" Row=\"4\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblCompanyI\" Row=\"5\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblCompany\" Row=\"5\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblCopyryghtI\" Row=\"6\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblCopyright\" Row=\"6\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"lblPoweredByI\" Row=\"7\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"llbPhalanger\" Row=\"7\" RowSpan=\"1\" Column=\"1\" ColumnSpan=\"1\" /&gt;&lt;Control Name=\"picPhalanger\" Row=\"8\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"rtbReadMe\" Row=\"9\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;Control Name=\"cmdOK\" Row=\"10\" RowSpan=\"1\" Column=\"0\" ColumnSpan=\"2\" /&gt;&lt;/Controls&gt;&lt;Columns Styles=\"AutoSize,0,Percent,100\" /&gt;&lt;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\" /&gt;&lt;/TableLayoutSettings&gt;</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;rtbReadMe.ZOrder\" xml:space=\"preserve\">\r\n    <value>16</value>\r\n  </data>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"lblTitle.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProductI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;llbPhalanger.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblProduct.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompanyI.Name\" xml:space=\"preserve\">\r\n    <value>lblCompanyI</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProductI.Name\" xml:space=\"preserve\">\r\n    <value>lblProductI</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picRegEditPHP.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPoweredByI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Text\" xml:space=\"preserve\">\r\n    <value>Version</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.SizeMode\" type=\"System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms\">\r\n    <value>AutoSize</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersion.Name\" xml:space=\"preserve\">\r\n    <value>lblVersion</value>\r\n  </data>\r\n  <data name=\"rtbReadMe.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picPhalanger.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblProduct.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>55, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersion.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picRegEditPHP.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Text\" xml:space=\"preserve\">\r\n    <value>Powered by</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>260, 92</value>\r\n  </data>\r\n  <data name=\"tlpMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 116</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyryghtI.ZOrder\" xml:space=\"preserve\">\r\n    <value>11</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProduct.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picPhalanger.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAc1JREFUWEe1V4uS\r\n        gzAItF9e++W5AwMSwiOY1qljX8qygV3yamc7vnF8jk97H+9X+VkAYPc8z7PB8R+84bPgJc8gxveCIwSE\r\n        gSeAQUDw+VcAOHMnOAPooOD/eI8AtMUAPOxA+m/KKXN9ZWbgHloqeLuz/hcDI+UeAMkGgCYQWwCo4KKg\r\n        GRN7AArZSyC8ZLtLIKtdB5BdYDFE3bHNgEuxaMNHAKhloqvFgKkDQhe0PpgMYHsJWUF5IbUbvr8Fx6N8\r\n        UkWlkBMA6m1slejsKpd1QEkJVzPnPl7ogswXmAEzc8xyPJgVKLIuRBkLw7orb0AAXuZ4o157WhYB4Ika\r\n        kgJj8CxLCUIzQJ/LILohMQBZ9X6QqxuoBjINyIwJhyGX/m4YZif02phAO53h6gUBoDGCx4kgy8vV7sHD\r\n        6nNL9022QgZ6kSEDFFKwsqKCgwV3aZ6U8Nft5xUnm1FJfBQDnht6zjgtTVgDhhdw9YtRbFWE3HngEQNy\r\n        4jWcLgMl/cHXAYsBCKy+rwiQLMpBCVPnoyHS8YUVEN5GpcRApBdaDyYDcjYorhKawaLCFLN+aWdEZjTJ\r\n        6sJEJH1h2F9UtmalLnAKc9rcVDanWctkv+/srODeP248qvLRqKhVAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"lblProductI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>22, 38</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescriptionI.ZOrder\" xml:space=\"preserve\">\r\n    <value>7</value>\r\n  </data>\r\n  <data name=\"lblVersionI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescription.Name\" xml:space=\"preserve\">\r\n    <value>lblDescription</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>6</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;rtbReadMe.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblTitle.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 51</value>\r\n  </data>\r\n  <data name=\"lblVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 64</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>24, 64</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"lblDescription.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>0, 13</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>15, 90</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picPhalanger.Name\" xml:space=\"preserve\">\r\n    <value>picPhalanger</value>\r\n  </data>\r\n  <data name=\"lblProduct.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>51, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>dlgAbout</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitle.ZOrder\" xml:space=\"preserve\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"cmdOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>166, 443</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProduct.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>32, 32</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyryghtI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>About</value>\r\n  </data>\r\n  <data name=\"lblCopyright.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>77, 13</value>\r\n  </data>\r\n  <data name=\"lblVersionI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\r\n    <value>6, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProductI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblDescription.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>7</value>\r\n  </data>\r\n  <data name=\"lblTitle.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblCopyright.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 103</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitleI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblCopyright.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersionI.ZOrder\" xml:space=\"preserve\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyryghtI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPoweredByI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblCopyright.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>11</value>\r\n  </data>\r\n  <data name=\"lblProduct.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 38</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>13</value>\r\n  </data>\r\n  <data name=\"picPhalanger.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>14</value>\r\n  </data>\r\n  <data name=\"lblProductI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"picPhalanger.SizeMode\" type=\"System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms\">\r\n    <value>AutoSize</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescriptionI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;llbPhalanger.Name\" xml:space=\"preserve\">\r\n    <value>llbPhalanger</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>40, 13</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\r\n    <value>GrowAndShrink</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>15</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>63, 13</value>\r\n  </data>\r\n  <data name=\"cmdOK.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>17</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Text\" xml:space=\"preserve\">\r\n    <value>Title</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompany.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"rtbReadMe.Text\" xml:space=\"preserve\">\r\n    <value />\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"rtbReadMe.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>359, 207</value>\r\n  </data>\r\n  <data name=\"tlpMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"lblCopyright.Text\" xml:space=\"preserve\">\r\n    <value>© Đonny 2009</value>\r\n  </data>\r\n  <data name=\"cmdOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyright.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersionI.Name\" xml:space=\"preserve\">\r\n    <value>lblVersionI</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"tlpMain.RowCount\" type=\"System.Int32, mscorlib\">\r\n    <value>11</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersionI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picRegEditPHP.Name\" xml:space=\"preserve\">\r\n    <value>picRegEditPHP</value>\r\n  </data>\r\n  <data name=\"lblVersion.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"lblProductI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompany.ZOrder\" xml:space=\"preserve\">\r\n    <value>10</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"tlpMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>365, 469</value>\r\n  </data>\r\n  <data name=\"lblProduct.Text\" xml:space=\"preserve\">\r\n    <value>Phalanger</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>52, 132</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescription.ZOrder\" xml:space=\"preserve\">\r\n    <value>8</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"cmdOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>32, 23</value>\r\n  </data>\r\n  <data name=\"lblTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>67, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitleI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>55, 13</value>\r\n  </data>\r\n  <data name=\"lblTitleI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"lblCompany.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyryghtI.Name\" xml:space=\"preserve\">\r\n    <value>lblCopyryghtI</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>6, 77</value>\r\n  </data>\r\n  <data name=\"lblProductI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;rtbReadMe.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Text\" xml:space=\"preserve\">\r\n    <value>Description</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>51, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProduct.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>42, 13</value>\r\n  </data>\r\n  <data name=\"lblVersion.Text\" xml:space=\"preserve\">\r\n    <value>0.0.0.0</value>\r\n  </data>\r\n  <data name=\"rtbReadMe.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>16</value>\r\n  </data>\r\n  <data name=\"lblTitle.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"picRegEditPHP.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>166, 3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompanyI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPoweredByI.Name\" xml:space=\"preserve\">\r\n    <value>lblPoweredByI</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblProductI.Text\" xml:space=\"preserve\">\r\n    <value>Product</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblPoweredByI.ZOrder\" xml:space=\"preserve\">\r\n    <value>13</value>\r\n  </data>\r\n  <data name=\"lblProduct.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"lblDescription.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 77</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>15, 103</value>\r\n  </data>\r\n  <data name=\"lblDescription.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblDescription.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Left</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 116</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyright.Name\" xml:space=\"preserve\">\r\n    <value>lblCopyright</value>\r\n  </data>\r\n  <data name=\"lblCompany.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>107, 13</value>\r\n  </data>\r\n  <data name=\"cmdOK.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;rtbReadMe.Name\" xml:space=\"preserve\">\r\n    <value>rtbReadMe</value>\r\n  </data>\r\n  <data name=\"lblCompany.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersionI.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitle.Name\" xml:space=\"preserve\">\r\n    <value>lblTitle</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyright.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picPhalanger.ZOrder\" xml:space=\"preserve\">\r\n    <value>15</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.Text\" xml:space=\"preserve\">\r\n    <value>Copyright</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;llbPhalanger.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersion.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitle.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;picRegEditPHP.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tlpMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.Name\" xml:space=\"preserve\">\r\n    <value>cmdOK</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitleI.ZOrder\" xml:space=\"preserve\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCopyright.ZOrder\" xml:space=\"preserve\">\r\n    <value>12</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompany.Name\" xml:space=\"preserve\">\r\n    <value>lblCompany</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescription.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitle.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>365, 469</value>\r\n  </data>\r\n  <data name=\"lblTitleI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"cmdOK.Text\" xml:space=\"preserve\">\r\n    <value>&amp;OK</value>\r\n  </data>\r\n  <data name=\"lblTitle.Text\" xml:space=\"preserve\">\r\n    <value>RegEditPHP</value>\r\n  </data>\r\n  <data name=\"lblCompany.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>9</value>\r\n  </data>\r\n  <data name=\"lblCompany.Text\" xml:space=\"preserve\">\r\n    <value>The Phalanger Team</value>\r\n  </data>\r\n  <data name=\"lblProductI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>44, 13</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>39, 51</value>\r\n  </data>\r\n  <data name=\"tlpMain.ColumnCount\" type=\"System.Int32, mscorlib\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProductI.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"lblVersion.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>5</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmdOK.ZOrder\" xml:space=\"preserve\">\r\n    <value>17</value>\r\n  </data>\r\n  <data name=\"lblCopyryghtI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>10</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>27, 13</value>\r\n  </data>\r\n  <data name=\"lblPoweredByI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>12</value>\r\n  </data>\r\n  <data name=\"lblDescriptionI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"lblVersion.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;llbPhalanger.ZOrder\" xml:space=\"preserve\">\r\n    <value>14</value>\r\n  </data>\r\n  <data name=\"lblVersionI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tlpMain.Name\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompanyI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"llbPhalanger.Text\" xml:space=\"preserve\">\r\n    <value>Phalanger</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompany.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>8</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblCompanyI.ZOrder\" xml:space=\"preserve\">\r\n    <value>9</value>\r\n  </data>\r\n  <data name=\"lblTitleI.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\r\n    <value>Right</value>\r\n  </data>\r\n  <data name=\"lblCompany.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>72, 90</value>\r\n  </data>\r\n  <data name=\"picPhalanger.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAAQQAAABcCAYAAACIosskAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAxq9JREFUeF7s/QWwJVd25422B+J9L2I8Hns89njsZrvdZGhzc4taUotZKhWzipmZmblu\r\n        MXPdYrjMzFzMTGKpYb3ff+3Me0+VJHe3v3n+4r2YiliVec/Jk7Bzr/9evH7HzD6X+K+y9ux9H6zfl/W5\r\n        xEPeffvW5+xX9/+m+fe/87nP/c5/+n/dd77f7A9+yL/f+dx/gML+f/gd7YV9/fvEFfnqVxa+13fa/R3t\r\n        sG0+1m9cxyT++lfR3/qcfa4TjokpXE/X/o//SV//x8/9Z475D//xP37uc//JuEO2utDv/IfowPgav9mT\r\n        /p+j/p8dgf/rP/9f/043EM85bX/JvPkF0/DnYc4l/Auz53eYob/DEf+ZI//f/1vv749/l0mc8O9nD/3j\r\n        fX9/48t/0sJkzkwwTSJV1JyxRBo4db31nyxa59R58FzrPGR2oMGBuvh2TtgfvtC6jFjUTF21P3KRdR2x\r\n        GGr5PD5GnwVaat2g7iOXWY+Ry63nyBVOPUautB6jtIVGJTXTW+y/NXqVU3eoG9Q1oi6jk+x+WsnfK/l+\r\n        hXXlXF1HLbOuXCdsl7OFOH/XUTqmhbqNS7JeE1dZb56/7xSef/p6Gzh9ow2cAc2MaNYmG/h/6P9nxmDk\r\n        vF02cv6/B+3kOjug7TZ6/mYbPW8DtBZalUCr2RetsZHz1tnweZtsMPf3v5NmrUq2RKo7fdkS6UH+/yQg\r\n        ICF8AhCmrLcBMISoy1CYfgjMP2yOdR0KAQLxtgugIObvMipQNwEAW4FBl1FLou8AhpFLIG0hPu8+CiAY\r\n        vRTmBgzGLLPeY1daH6gfDNl//CrrP2E1tMb6T1prAyau9W3/SdxTAvWftMH6Td5gffmsL/t92PZ22mC9\r\n        J7CdsBZaZz3Z9hi/GgJoROMgrvXWWMDmQRq3ynpOXG29Jq+1PtM596wNTPzNNnDOFhs0Z2ug2eyL9Fm8\r\n        zzGDRbOjLYAxCBrs2/D5wNkASUzR9zrmE8QxgxKPTfjNvwZEOs//AapPjsG/DxgIcAIYjJq/FYoBYc0D\r\n        gCBwCIAwCrAIgLDz/3lA+BU6wC+ACvvVL62i+rSVVp+x0srTVlJ50gYhIQyGGYaIpm203iMXWK+xi6z3\r\n        6AXWZ9Ri6zVmsfUZv4jtQj5bCJMttd7jVlgvmLn3hBV8t8L6TlwBs660/lOTbMDUVZxvrQ2esdaGzFxv\r\n        w2ZvtBFM8tHzttjYBVtt3OLtNnnxbpu8bI9NFS3fa9NW7rNpSQds5qqDNmvNIZu7+pDNWXPEFmw4avM3\r\n        HrP5m1Jt4WZoiyjNtwv4e/7mNJsn4vu5G1JtzoYUm7n+mM1ce9hmcJ7pqw/YVFHSfpu4Yr9NgMYvg5bu\r\n        a6YJS/bZJP6etGyfTVkR0cr9NmXVfpvMPU3m95NW77dJqzhm9T6bCCJPTIJWJtsE0Yq9n6CJPNMEnk00\r\n        PoHGsT926W4bk0Cjl+y20Ut22ejFMe1kf4eNctrpNHIRtJAJKFqww0Ys2O40nAkZaFugBaKtNoxJ6jTv\r\n        fhrK36IhcwMNnrvl02kOoBbTXO0ngGEMivdtI3AECIcIJKFBDxJAKbDU5wLd5m30+b8Gni3Ap98mgIDA\r\n        VCDr5wz79wHCgl0w6+7fXGLg+E8CSuLvtc87iWi0pIN52yABgqQDMX+QEEaxH2gttB4JYSOAwJj/lhLC\r\n        kHm7/9Xf/NYSQlndVXOqv2rl0PSVYsJdMONum7Zit+06kmk7j2bZLmjH0UwrAiRKUCuKak9ZSZX2T1px\r\n        9SkrqjpthfydVX7CMspPWXb5GcuuPGWZfJdedcbSKs5YJiCT4XTSMssjKjvJsSJ+U3HKcipOsz1jWZXn\r\n        LLPinGU4nQlUqXOI+K7mgmXVXrDs2ovQJaec+ssRXbHc+iuWz9+iAvYLeLaChmsRXbeCputWdPKGFZ64\r\n        YUUxNbHfyGeN16ywIT6e3zdAjSLO05RIHNP021Ehx38W/bbn+j/H/3Zjr/HKrzvfTL9u/PL9XV+2PN59\r\n        LnMgh3mUXXuZOX3e0isvWBpz/HjJSTta1GSHCxrtQH69HcirtQO5bJ0a7WB+nR0qFNXb8eIGO17WBC+c\r\n        dH5IhS/Sq89aRs05S4eyOK/mdlYVpPldx/Xqr0HXufZ17uFGoMbrltcAMVfz/G+2n0G7U8otkeZsOMLC\r\n        2EIPqhCfawYEQKEUmr5sr01esrOZ9gAEySk5ti+iqhPn0UEuWb10kVOXrfYMdPKi74tKGcSSk5es5NQl\r\n        Kz5x2UpO8DdUGm1L+F7HlDLQohJtOU7fl50EmE5et4pTLVR64roVw7zFTdecimI6cRVG5rOT17je9Yhu\r\n        sE0gGL0komLOU6JzPUg6d/wZA10MFUEChYJGJpAT4CLivsMkuQJTf5KKmHD3k+43fJYIAp+YiDxLgegB\r\n        cHkQOH7dBP63f8+zMq6fpN+e4f7t9/C//1oavwfvJ7/+NweEf/1Z7p8TYY4wVwCNPMDDicUor4G/fTG5\r\n        ypa544sK98Xfvq+t/63fawG75KRjP4vJf5vP/82AUAoaiaYhGQgQpizdZZOh3ceybV9ajh1Iy7ODUFXT\r\n        eWsEDOrPXLWG01d9W3/qijXxWQNUceYKDA1j813F2WtWBnOXwrRlp2F4p2tWHlHlqWtWybGVHFt55rpV\r\n        nbkGwNyy2rPQuVtWA1VDVXwWUzX71XzvpO8vcNxF0W2rvnjHqe7iXejeA9u7Vst3NaLzHBfTuTtWdfY2\r\n        93rLKk4HKjt508qhMsBFABU/g56jlHsu1TMlUAn7ogc/198BoMK2tHk/BrAHtwK3T6EIzEocFAM4NgNj\r\n        Igg5SAqAkHCiY7QtBDh/HX06IPxmQOHAxXUfZMBPk4Q+nck+C4x+c5D6tGvrWrovPVvz90gIBREo/N8D\r\n        L93b/YDzaQAUJMoHgSmSMiNAEJAUAByBEoEkkgK0+iO9fgIIHvgs/z4p4aYfL0DYm9oiJfxaCaG09ooV\r\n        11y2wuqLVlB50aYABtPRe2cu34POvtcOpOZaek6pZeSVWnZRhTXC5Gcv3bRTV27Y2SvX7cwltpe0vW5n\r\n        L96w+it3rOnidWs8d9MaLty0epi1nr/rYdxG9psu3mQLXWLf6badgE5Bpy/fhe7ZmStv2+mr79jZa2/b\r\n        uetvs32HLXQDuhnowq137JLo7rt25e770Hu+vXrvA7sCaRv2P+TzD+zynQ/t0p0P7NLtD+zirff5fQud\r\n        Z//8zfc4P3Q9bM/quqKrb9uZq9wTdAo6DZ2M6ATbFnrbTnLfMZ1iX6S/4+1Jnu0Ez3jiSkx32G+hJj5v\r\n        pkvsP0CN/N1MgF6D022rZ+zqHQhvW+2lAHrVFyDATlTldBMCWLU9K9K+QPVmANbo80q+ayY+K08kviuH\r\n        ys5ApwOVOgF2ToBiIn0CJDnmVAKdYV8U/baM35Y9ALgx2IYtgAgVAZpFALZUvhIYvhgpMJYABYB+HN9J\r\n        giyFSgTu/L5Y52i8ZIX1F2C8i1bMwlR6gvuXFKlz8rsSji/w8wtEg1Sp3/p3AHuxwN3PHxaBFglVv+Ve\r\n        OKfAv1DnEEjqfKJYAnPgRLpEIi50KSGSFACDfAGCpAxU2zyRVAOYupnRBQBNN5FSY3Bg37+Pt+wngEQB\r\n        6sQewGBPaoXtiVSHXwsIA/AguOFwSnCn7TycbXuOZdruI1m2E/vBpUuX7catO3brzl27c+OuffDBh/b+\r\n        zz+2Dz/4uX3w8c/to49+bu99HP390S/s/Q/5+6OP7b1fQPz97vtsP/yF77/Nse/wu3edPrZ3P/zY3vnw\r\n        Iz7Tlr85Vt+99/7P7X1tda77iPNxrkC/TKBf+f57H/6K67CF3nf6lb3/caAPIvqQ7X30c/6+j4y//53p\r\n        Y66XSP/e1/8/1wvvXO8gGgumn4n0d5hDxrwye+fjXzJfmcvvfWy33/m53XznY7v57od27d7Hdv3uR3ad\r\n        RecKi87l2+/b5Zsf2uVbIhYq/r526wO7xuJ0jYXrGsfduPM+9AG/+8BuQrfe/tBucY6bLGLaim7f/bnd\r\n        vvcLu3PvV3YXuid626CW7dv8/al0z1i07yXQXdtxuPg+etDo+Lk4vmBAFGew82DmfTaDK9dv2bvvvGvv\r\n        v/uBvf/++/aLn//Cfok34le/wjfxKxwT0C/575e//IX94pe/9O9+6dtf4LTQMeHvX/wCTwZ//xLSNqZf\r\n        woy/cNIxkPa1jUmfR/Rzth9DHz3AxB/wmRj+fV7WBx//ooUAoQ8Bhg8BBicAIxAvWn87OHwW8wMiXOeT\r\n        lDBxnIkfBJQHAOcT33OPul+/5/vpQ/5+ELD0XLpHMNPpk4Cm+4/u4UFg+cxn+y0A7/8PwMqZW+OXwOzN\r\n        oO9jpPH7dWMSHROPRwwgvtDo/CxEkOagAwjz6z2RL1LaarHkO1+4IvLFi89ZKJsXOsDmXRbEd977OaAT\r\n        0Tu//HSGBxQ+EwwAidt8nwgIZ5BOf2NA6BcBwvZD6bYvNc8OpORCBXbNAeE9e/+9D5AKPnRGha3tV9FW\r\n        jC8yACEAACRAEAhoGzHzR87IgaF/zgsQczczf3TsLzjHz0W/iAjw0XH+Owb6I2dwGJ7B/RD6gLcoklTy\r\n        Pm8lpvfYf0+SyX0UJI9ASCwMvOh9bSXBfCYlShySOvQCfz19wEtuPk6TQdeK7zVhe//kCBKRJsin0XvR\r\n        OTWJEinxfj7wewsS0gfNxKTVviYvkzNQ4veMpcY1Gl+N8YcAawCoT4KUQClIXBGwOuBG4BaD3X1gGpgx\r\n        0GcB7QOfNwNgLD09AN6fkKii+3HGDvfti0S8EGhhELP69bkP/zsRvFuA9QMtGno+AUUEws3PGgOAj5/m\r\n        oJhc7/bjaD7G2zA3fYHSNf13XDN+fl1b1/F3Eea0z0WXnpFAmKdvv/MLe+fdX9k778D470RSAKt+Igjc\r\n        /VRJgeM5TlKEAOFcLCUACDt/vYRA0M2k1cQKELhDEM7Wg+l2NLPIUrNKoTK7de22fYBk8HPUgo9QBQKT\r\n        fwzT/tzpF3z2848+4rMPYN6PwQX+Zvsxx+vzjz/4CDBBzfhQEgbbDz5A7YjpI/Y/so9iQn34iOX7Q+gD\r\n        6H3oPUDoXRGAJHqHc73zPluR/w0hsr2DBKPt26J33rd70F2n9xiYmPgcsczpnUDvQG9HpP1m8nMmfM/5\r\n        33biHImka8V/cy/3dAzbt997349tJqSse6J337O7n0L6/H7iXH6eiHQurhWTnu8+0j3omiLG5m3GKdwv\r\n        W+3/GmoeS40r7+ddpzD2egeBPooIsI3VPql+AuBmCse8+5kUjo+pBbyjczMH3nMC4F1djMFaq2oEhL4Q\r\n        oDJ+EMDar8fx2n9Xc+Z9/a174P61zxjqmLfZ131LRfXFQt9LVUX11bneju7rfZ1XK7UYVGou81h/v+Pn\r\n        Cu/01vUbdrG63E7mpFljxjFrTDloVXs2W8mqeVa0bLoVLplqBYunWHXyVjtbUmS3rl5D5b5t7/o8fR+e\r\n        gC9YmN5/D0B5n+vFxN/vAgJvv4tqgmRwT+RqAlupCuw7s9/9ZVAhYPo7d9i/+4vos1/anfg7vj+HDess\r\n        dM7tX7cJHUBlOBIR4PAJlcFDjglDVgRiZyIPM3NrrII4gSriCirw+d+6fc+Z29UABIGfM2gff/A+0gL0\r\n        3rv20fvQB+/Zh2xFH/t+oHfFiDzFXehOtL0LvN19G8aA3rn3Hg/9LpP8PQaA/XfFMKJ3II4TvfOOH38X\r\n        iGyme+x/Ct3hszt3I7rDFrrN37eg277PfTRT+M4/f4D8d/77t9mK7kF33Y7yb6bb/PbXUeL5deyt6De/\r\n        4XVvclxMn3Wft+/eYwygezwTW9Fv8kzxsb/Nb36T8953TDQ+N+Nx+g2f+9deR+fTuRLH/8GxfvBaOtbH\r\n        525497du29ULF+x0ab7VHjtgxZtWWurEwXZ4WFc7OKSTHRjYwfb1F7WD2tvefu1sb1+IbXK/9nZgcGc7\r\n        NravZcwcY8UbV1pt2jE7W1dv167e4r7e5RrYEbAz3LyBXQGj9o3r79qNa+/adbbXMKiLrl67w/F37OrV\r\n        u3YFY/Tla3ftEoZo34+J75v3r92zK9gxrmDHEF3CcJ5WetpSIzpeeuoTkZOfi/MR4m1mdo1VEyxRS9BP\r\n        be15DBrvIh2ABK4KmH0s0QjGd4JZmwlG/+Cdt+09mPh9tu8CAAKDewDKbSb27eiliMkEDmLcwNQwe+JW\r\n        zB8BiE/WiMLEjYhzCqgCRYwj5rnF39DNmxEl7vtnMAzHOfG7T6X4+8845l9lajGkzpvAmNq/bzL6fUbE\r\n        /Wi/+b7ie0o45l+91896hvj6Cffi96AJLmAGXO8JYNn3cf01QCWGECj6exPoPvi7BGb6TUDp1zLw/w4g\r\n        eOCZHGT8vMyDRHDQO4i+u+9zP+YOc+W2Xb961U6XFVr+yrl2fHxfOzSks+0f1MmSB3Rwht/Vp43t6t3a\r\n        dveBAIM9Q7vZrkFdbAcAsaN3G9vRqzXHtLU9Agn9Bto3sJMdmzzECjaussaSYrt44RqMfRdmh4nFyGwv\r\n        i8ToYnIoZnxtY9L3ly63gMAl/e10l98AFhgyHRBk4ARoHAzKAiikFP8GgJCWUWGV1eeslkipuroLTNh3\r\n        UBVkEwhGxI8Rr2RPeI9VXRLAe0wQMf/b0HusOm/DpG+zCt/TSiwwiCb9LRjytojPBQCSEJyQCN7WFmDQ\r\n        ViSQEGDo2FsAyE3O44wmBk9k2E/bF9NDN0R4RW7c4DcJdOP6Pf/Mv/8Mug84YmCIrhUzc7ifBGoGmxiQ\r\n        ou+i+2m+pweuef3mHRPdgG466f41EROA4oHnvMHfTgnnCr+Lfuu/TziH3gF0m/G7y3jG43xPzC1QTbjH\r\n        AKb3A6eAV5JVrHrp/d0ROMfvNhHkBMoxWDtARwwXb+8D83DsfRKBg1z8efTeH5QYIqBrBpb7gDE6X3RP\r\n        GseW52uZP+45uwHxvL6QRM98i7G7pbG7ecuunD9vJ4sLrHznRkudjDQwvLsdGv6WHRjW3Q6wPTZrrKWv\r\n        WWaZO7dYevIuyzh0wNKhlANQ8m47smmdHUpaYoeWzLX9M8fbweljbP+EobZ3aHfbM7CL7R3U2ZIHd7FD\r\n        Y/pZyf49drrplF3EdX/58m2AQARTJ67+fObMDgBc0v7lW3YZN/Nl3M6XceFfYuuk7/nuIm7uKzcEBB/Y\r\n        BQDhPNJHRqKEUPIbAMKxtDIrJaSyHAmhHEC4AvN8iE71EYDg1n3pde985JPjbRj3XTHvLZgc0uDe1eRh\r\n        gG9f58WCdM0MyHl84PleDN+iD3OeCAje1jkjuoc6cefOuxz/DpMbUIgmaswEMYNdh+k/STDZ9QRC1Lr+\r\n        IH3a94mfMVluOAVg0TWat81gE4MOW573uggx7gakbaBPufav+4z7aD5fdN5wH5xL96Tvo3397dfVPbLV\r\n        75x0H74fxsF/I1C4LcntXXv66aftqaeesqlTZ7jYqvu8Gd97fM3oXALU27yHe8R6jB07zsaMGWebNm9H\r\n        jNX9CJgCyCYCr+8DviIH4ETS8Z9BnzhHDFARAGs1F4AIEDWfbmiRiN7NTb9fPuM59Jnfmz9/+NzHSO8k\r\n        Gl9/T/pe78O3qAWXr9l5RPnGnCwr2bLG0qcOt2Pj+tvR8f3tyPiBljJrnOXt3GQFeflWWFgMlVgR26Ki\r\n        EisuLrXSkrAtLi7huyLLyy+wvOwcy01Lt+xjxyzr6BHL3LfPUhfPtP2j+1rysB62d0h3gKGrZS6bY9Wc\r\n        9+zJ80gMNyKGh9kFEDD8ZZj8EjE8YvYLbAPdsAvnr9v581ehG9B1O3f+pp29wPbCbTtPHM0FVIXz19+3\r\n        s5fftdSKs5ZWdsZSAIPjxafJo0jMvlxln1AZdqWUWh45CIV156Dzdp5Bu4fPVVZWAYIMIPfu4R/Fhyrd\r\n        587Nt3nZEAN+K5oEgRF4ASLEnuuILhp0HXMTieMuEytMyDApf/bkU/ak6GfsQ2PGjLUVK5LcBnArAgNn\r\n        xpjpIsa7xnWusS+6yveB0LEw3ly9ccuu4iEJxN962dfYx7By1fUwkfZjCvqZUwJD39B9RxSYOzzLNZ7J\r\n        SfegvyHpeFck2jndDgSSX7nCahMTzHf/d9H3fH6N40XXfatzhnuNz63z3088L9ePP4vv47O2Gj+Np0Dh\r\n        a1/7mv3FX/yFDR06jMl3xS4TPKbr+vPF46D3Bt3gPd4mGOwuAB1+9zUbNmwkk/O6T1LptGEc7jWTAxLn\r\n        iSnMgfi4RMAMn2mutIy7mPqT1Dyn4nkVzzHf6hy6/8DgYczCe9c4alwv+3hyv/4330v0jt/VxSt2rqbO\r\n        ao8ftbzlcyx9+ihLmTTEUqeNsFT0/uwVC6woeYeVwegV5ZXY2GpQqRusob7JTrCynzp5xs6cPmtnz5yz\r\n        s2fP2ZkzZ/nstDWdOGn1HFdTXWfVFdVWzm9LS8oCWKSmWurKhQBDf0se3tP2Du6G5NHDcress4ayajt1\r\n        +qKdO3vZzp6/BpMDVOdEV+0sEb/nIG3Pki5wxrdX7YzvQ0QLnyF6+BSBXg1nCFojEreebTkBWIfzz9jB\r\n        PNEpS84+QWr/Wus1aY31xLHQk+0nAGHbsWKSik6RAHLO8qAzlxD9AQRZXuXCeRff6G2MH1oxbt2SwePt\r\n        8DIjpr/uepCYTUDAi5HogwgjZryilyXEB+HjCfnnf/7n9tWvtpD+DvQX9o//+E+2cePWMOH14sRw2ncQ\r\n        4NwAQDMgiOn57Aov+zLHXIYBLzndRJcSgbBs/W8nIS5bJ01qMe1NJkk0gaKJ5JOHc/v1HFAiihjcf5cA\r\n        MM7sugddj/PpeqKLl0FyojsvQZd9e53PAmlf93qZbfybq7pn3U90Pbl/dR+KC7nCfYTz61zhWcKz6rrR\r\n        M3LMJYGhgBGAvML2GltXNdhqfL/61a9av34DrLHxlE+8y0SdNgMk5/J9jQdbrbgS/wUGX+X9DBgwyE6e\r\n        PIeIe83vUStsIjDG78yZ0Rk0BuX47wC88Xf6PpZkfL+ZuQNIBVAO4HEjBmPfCpyje22+BmOj57+msWDL\r\n        mFz096Dx0ljzN5G156Pt6YZGqzx8wDLnTwYEhloqUkEaIJA+d4JlL55hlenHrKqiympqaq2BY0+dOm1n\r\n        z11APL/CuwdIr99E4rmFFMs4YXPQ/o0bN7nXG8ypa37c+fMXAYoL/PasnTxxGiBp5Jw1Vgww5Bzcb0dn\r\n        TbDkkb1t98DOtrtvezs6c4KVHDlijVX1AMsFGP2SM/ppGP40AOCMr31yhkSnAIPTMSDw+SnoJKkAdUSV\r\n        1ikd4DTh+URQHis+Y4cAAwHCvtwm6zNVQECKvwPC6hgQQnET0Y7jJWQinrJcDIt5SAinYeY7qAjvAAiK\r\n        BrzH/p3b77med50Vvxl9GXQx/xXpNI68N53BxGx6GRdhPL2Ia1rBGThNyK8wIX/y0MP2Vo/e1qNnoJde\r\n        ftX+5m/+1r7yla/4hNXkW7NmvV3gBWriC1iuaZKj612TwQd97zrba5zzCgzjk0AT4KoYEIbjhV3ixVz2\r\n        z3EVwYAXLl+FrnHOq86MzkRM6ovOhBLVRGJWMa7AREzOJOPFX+ZcOk/MjGJ+MZye65ruScwHI+rYixx7\r\n        gQlxnuud51oXLzE5/JzRfejedC7dn48V38GUYrJLPK/u4QrfX+HeAygFksRzhfv15+FcepbznPscdF7P\r\n        p+fWZBQgcE8a7/gepTtf4TuB7pe//BXGvpeVMTFPnDxrF5AUAkjp/iDdC3/rWa9L6uKZ9Du9m169+1h1\r\n        XSOr12WXwiSOCzQ1HgLFSxovXwTCO9P+RZ7jAmMs0lj7vNBz+NgGaU7vUL/RM+s3Ar6r7Asgr3K8wDcY\r\n        2SJQdLDXeTSWPDt0XqRxZxw0Huf1rv29axvexznexzmYur6g0PLWLLZjEwe5kS915mhLXzjV8jausPLj\r\n        h6yqsspqpUI0nbDTrPoXLvK8167D9LfdICvDbLOR1j1hwSMm+5cMsQLR6wDEdZ5B4HCF619EGjl/DgY/\r\n        dc4aG5ocbAoysyxt1WLbheqwvVcb29r9dduNxJC+NsmqisqQQs7B8BcdEBwISCAUnTxxyU4ACCe1H/9N\r\n        smAD4FCP1FBDbk4tVHPilpU23LQjJWftYMEZ25930vZlN1nvKWsSJAQBwiDAQOQVj+bYNvyU6aUnLYdU\r\n        zNya8+QeoFsSVim1QeGadwi7vI7YqRUrrFRhgvskZxJfIM9Bkz4wHjoNQKCJelaTlQFxpuKFidG//OUv\r\n        W+eu3Sw1I8vSs3MtKzfXcnILLDe30Lr36Glf4vsvM/n+9jvfsZMg63kmrIDGgUB6JFZg3zLJtfKJIcUE\r\n        AgOfCFzzohhezHEjMN5F7kGT4axERDEpL+gSPuUrILoYRcfrPs+JiX01gSm5Z2dyTepokonpNJGvCAj4\r\n        znV6GQi1QjhA6XgmP5PnPAx+DtKk1OTVZHdyMNB+YAAB1wUx9gVNWI73a4upAUEmYDP5ih/ASfeqZzl7\r\n        4TK/4Zm4b70L/c4nYmS0DPfGODFeupbA9ktf+rJ17dbd8ovLrbaBCX+OVYwxPqfzaXx8jK5wH6gUXE8M\r\n        p/em9/JWz55WXl1jZ1j5rvJdeBcBFB0MBVZ6Ps0TAPwydIH7PYs//uwVxl8MCYk5JTnpnlya4Z4v8XsH\r\n        NZ7tIsde9GO4F/4WmF+8qnvSZxqj8K5i0nnPcs8+Juyf8WdhbEQ82xm2GquTDSet/CC6PABwdNwAO45U\r\n        kDp7rOWuW2pleTm43CutWhJBYxNz7wxAcIl7BAh4t2J0eWmaDeOKL3HDeOQ5EyAAFLKXyVh8XYDMM11l\r\n        nl1lTESXNO90r4x5ExJDJSpIXn6hHd2927ZhU1jf6SXb0PEF29KjtR1dNNdKswsBj9N24gRSBtnFJ09A\r\n        5GWcbAAQyMto0pYsycZGMo/5vI7MyVryJarIHak8ddMqyNnIr7tGOvZZO5DTZPtzTlpyeoP1nbY+Uhdi\r\n        CWHQIgBBtNC32whWSCs5QT2Csw4KTSTJXL9FMA3BPHff/bndwiCll67VScyiVdbpIi9FyCfxiK1PbJjg\r\n        jL+U8GL08sMqfc0n5Be/9CXr1LmLpaRlWlZOvuUXYIgBDfMLS60AXe2FF19k0n7JJ+7CxYvt1JnzDiY+\r\n        sSUZcB+Hj6Xaxk1bbePmrX5fWhHFqJpQ5y+z4rkEAENF4r7uS6uaSACjZxDz+kuD0bTS6D59EvEs+lsT\r\n        1Vf+BEDQebWa6XMxqn4rI9PGjZu5ny1W33jCJ4EA01ckmFyAEFZTqT1Bx3UJQyurpBuBGMfpvlwi0n1H\r\n        EoHOn4cBa0N0fjGwwESSl090AYKv8IjwfK4VXc+kMTl85Di/2+JbjZnGUNKZxrYTgJzDeaulC7Ninua5\r\n        RWdggDMXAp1jHAVWF3G/OZAACN179LAymObU+QtWwyqn8d+4Zas1oDMLrASyF2EgAUmw6fB8gKFAWsyq\r\n        +SByUNYYC/Rgtis3JVlhEHPQ1n0EOktOzdnL7EPO8ADEGe7rrCgCMB3v79bHA2JfJADw787x99mL1giQ\r\n        FWxdb4fH9rMj4wba0akjLH3xLCvNybGyskq8bDVWh0h/4uSpoBrw/q7xLuW5cferx7qEmJbgCZMrM7jE\r\n        g/dJBlypQFIvYykuUg9j6U/SIvsX4Y2zSAuNTcT9lNdYZma+7d+52zb2bm9JrZ+21W2esY1dX7cDc2ZY\r\n        cU4RdgupG5Iszll9w3mrJ3OzgWStOqT5OlT8Wqiav6vrLloVoFDuCVqq83HN6yvsyGqwjSm1tv5ota06\r\n        WGH9ZlBRLFIbgsrQDAgBGLYcKrZUij5kY43MqeRipAlfw0p5h8zB229/7G5I6WUCgfMXLtoFDbImDXT2\r\n        IroOL8BXmOilnOZlnNaLiSasSw+80GZA6NTVMrLzrLi0wqqq662GiVmDKFpT12ATJ032SfvFL37ReiAx\r\n        NMBkF7luPcwwfOQo+9a3v+2qR2xz0H6btu0sJ68w3B+TSAAgqeKll1+xJ5540oYMHeHGGulkARAQh2GS\r\n        kaPGuFFz2PARPIcYQeCGRMMLFXONHDnaf//8iy8x6VgxkYSCfnzbJk+eZv/wD/+UcC/BBvI4x+87cJjx\r\n        iAABi7DEfTegQpOnTHPVICcHieitnvb4409Y165v+RgKHILd5ZZNmjKV8/+jP6dW6Ph5H3/iCUved4gJ\r\n        hW5JXQqBjsbXQYfrDB8xyr797b+6776+xd+DhwxzsV+A3LkLgJBXZFU1DdaEdfsU43IKpnFiop5iBdO7\r\n        E9BcZDxjQOjWvYftSd5nr7/RKrqf8MzxO6jEiKax1/i2a9fBnnjyZ9amTbuIKZkPmjeaK7pnjhGwCkh1\r\n        nJ4rCTXx5Fneg0RrAdN57QewckBxhmee8ZmDgB8bnTdxi21EY3MGOoVoXV/VABhssMOj+uDuw3swdaTl\r\n        bF5jJYBiebnsBPXWhJHw7Fks/by3K5ofjGVwN0eeMmf44PEJgJ1gwHZVJ7JVSCqUJKT5r/uM6Bxbfabt\r\n        BbwDZ7nHk6dh6vpTVlpWY2kZebZv2y5b37O1LX/jSUtq9TNb3+U1O5y03EqLquGTU1ZDqUMBQF0dMUP1\r\n        ZwGAcwAZW4oXVfFdFQBRCTCUITmUquCPCq3UXLK92ads63EBQq2tPlBOQuMGVIa11nPyJySEAAjbD5cQ\r\n        sEA1IwAhu0qAoJVGLkAysKCreBLkKz3LynDmHBOIgRP5Pmh6Bt/tacTIU7zAU9rqJeqlnkEcZeJexDJ9\r\n        gRcaRFYmZOeulpPPhKxu4IXxW17sOX57mnMtWbrCpYMvfOGL1q3bWwRM1fPSqu0HP/hRpMt+1Se2dGFR\r\n        bHf41re+ZXt272OQo2tioX3xxZf9N3/3d38PoJxl8mMw5X7EQGLqH/5I5/wL+9a3vo0Idw7GOM8LE+PD\r\n        YDDlD38Yrvnss8+jq8ktFCZL27bt7c+/ij3kK1+1v/3bv7OHHnrE/umf/sX//ir0Te5lN/dyWgDEy5c+\r\n        LsOcrjV48FA8KuPtW9/8lhtW9ZtHHnkMcfAcxwIKSCECOIFAOP937KGHH+b8/+zPqs++yW937Up2/fKC\r\n        7kkqVcL96pgHxyj8/WWAFgmhUxcHpKpKGKERgxcGLBmxJJae4pwaw9O8Q4Gj9OdY1fgB4/G1v/zL5nGX\r\n        aieK38H3vvd9nvmCP4c8EjFwpxzP5Drn0YmRRtBzz2E1D+/gZhhLnlXPlJdbjAGP90RBnlNnmA8iGMdB\r\n        QZZ35pQYyT8TGESkcRYASNf23+kZIqqvabSiPbvsIMa7gyP72tHJwyx/6zoMe4ABHoBaFiIZ/XTPlwFk\r\n        jWOIDYncvGL+yPjsth4ZJjWfpSrD/OcBEJfwACpneIBU93X2jIyJENvTjKfG1reMj7YyCp7k+/oTYuST\r\n        VlhSZSmUHdi9Zbut6fSyLXvtcVsJMGzq3c5S9xElWVJLqcNTpgrpVUgMlXVQzSkrrzltZXxeVgWpDCJV\r\n        mEoJHyiqu2QFSAfp5ZcsOavJth6rtU1ICGv3l9uAmeuwI6hu6GcAwo4jZUgIpy2L0mXZSAgnzrNK4V68\r\n        QQrnrTvUHMBgpBX0lCymGFlOinC3nMDVcgKXy8nTbGHmkyJWmZMAgVbkUwIEXt55IrI04GIWAULXLuiw\r\n        qAh1dScYPK1E6JMyFPFCxo6bgHj6FQeEfn0HWDno+RwM+dWvBINYq1ZtbeOGbZaWSsr23kOsrt3tL//y\r\n        6/7dN77xTSsoKHPm1ao3aNBQZyB9l0b1J6GxXoRerGwWsdVdk3rKlOncz0l/YQIErdZ/Lob98letV89+\r\n        VlvdBMBdsu7de/rnuta8uYstL6/EcrKLLBfasW23e0l0PTFyff1pJupFB4XYMPd17lWA96UvfcWP/dGP\r\n        fmJtWrcH+BodQHV+gYHOP2fuIuwrJZaFLpmdXWBbt+667/wN9WfcU3AFyeUtpA0BjK79+ONP2lKANSUV\r\n        O016js2YMdteeOElBwONa8eOXSwrsxBxtR7Rk3cJo55ET3UCGE74RJYEKCnnsqsakiz0W41ZV4B6C/eS\r\n        mVlgmzdttxeel5qH7Ydr9+WdNTZQKox0egcmPmvfviOr8AkXeWUUO3cWkETtqalpah6XF198Bb8+rr3K\r\n        Rj9O+rJWd1nS9S5Piul9q9Vfi03EWM5kHOffBSA4AfOJGgG7stR0O0xg0L4hPezg2EGWs30zMQRyI1Yz\r\n        H7ChsAhIKtAC4DEoUcCYbETu/WEuXHD3H6u6XHsORmJu7sGBKMxzBy/diwNqGMcmEUAvsD9BkaEmjIQn\r\n        m9D9o/2GRlQA7rGuDkZHiskrrLSjx7Ntx7qNtqrDi7b01Z/aylZP2tbhfSw9NdMKS/FQVDVZGUBQShnD\r\n        smqIEoZFbIsqT1hJRZMVsy2qPWMFAEcB6n828UV7M+ps0+EKW3eo3FYdKKWu6SZ3N7Z4GRJUhq5Dltju\r\n        4+UYFU+gMgAISAhNAMJV4gxu4WpUkNAljDha8U/D/CdOn7EmDC5NAIK2jViqGwCEJn3HwDRpMLCkauV3\r\n        xmSAzoGe55EAYgmhG0atouIya0CHErq6NVkGNoDh0cceb5YQNuF+nDdvUVjtYCCJ1seo8Xj0KMlYbI8f\r\n        ywEYcm3atFk+2TUpezvznsTgcs52bN/jE1IgNHbMBKusqOPemAC8ZKkRYiD9RpNdDFNRzvdNZ5EEruPl\r\n        2OgTWt+vWL7GgSmVlxIY+6vc10LAoJiVFt8y2/x8bCAFpTZr9rxmG8hQVsnGxgAK8bXEVI888lNbv26L\r\n        paRkc84sy2a1Lq+ss1TsKonnlxqUnYPB1c9f4teZPWuufSl61mHDRjHZzsPceRF4fcWee+5FO3osw45o\r\n        jI6lWyrXyOT7HADli1z7C1/4AgzayTIziMYrq7P6Ot4lE7WJyemkySpggBnPAWRa9fS8Gl+B3ObNO+0Y\r\n        zJ4KwOrc6ak5lpmehzT1Y7+vv/za162C81ZXNdrDSE4av7/6q7+xkuJq/PKnXEo4D4NdwRM1aeKU5jFe\r\n        vDiJ+yy20lKBlJgosqDHq70zebCua0756utbgYDuNwIz5lzMiDW8z6xVy2xPf6ID8fkfmz/dChjP8rIq\r\n        JJETLFYX3dAn5peKKECQ5ChPmdS6CyxkZ88Gd98pt+hH14LRNY+auOYJtgJQXV+SjcZO20btIxU1AgaN\r\n        jKvmgQCggflVz3jXNZ5BVRadRv/HllBLnVLGLIMF7cDRDNualGQrWj8DKCApoD7smTEBI3yBFfJMxYBH\r\n        EQtUIYtIEb8pBEQLyxssv7zR8ipOeExRHkAgr2EmUYr702tsY3KhrdqVb8u359hAFU5GOvBYBLYtNoTB\r\n        lEwfuoTqKpUe3igJIRdAOEHVo6sKKCIw5QaAIC+CBr4J5hcA1BOQ0QjVnzhjDWxFjXKn8DIaEctPiISK\r\n        AgUGSnqTSwiRlVuqQHFJOQOHJRd9S4Yy2RDebN02TBAm1tPPPGcZGbku9mtS/cVf/KVt35ZsRw4zyQGB\r\n        rGwxSDmMUg7DlPqE1KT9q7/6a9e5BAr1rPhf//rX/XNJEmWl1X5fErOfe/4FB5r+/Qf6yvdtbBNFhRW+\r\n        qmtFH4LOrRVPon56ei4TtdJVHTH2ww8/EoFAiX9ehd9YomcNwSjSSXUPumarN9tYBS9Pz+n6O5/97GdP\r\n        W/L+Ixj70pyx0tEd8/PLWC0brQvGPp3/oej8eYBAMeevQLTX99WoWGVM5vj8rRmv2tomf7YYvLbvSPZz\r\n        H0/Jcskiv6DcSjhHaWlVs4TQvkNny8CQJUCoYzVpxFClVdknLpNVdIJJH3T1S82A0JaV/sDBY3YcFUDS\r\n        QV5uqRVy/gLewcCBQ/z8X/zClywpaS2BONWM4YjIHiRAnmiVlQ0A7nlnNNljvv/9H/gYS6U7eiSd913A\r\n        fQJSvIMmJAQxVyNMqK0s7Sf4TPcVVJwwt5wZ2T+RQGJGnaP4+HHbP7yX7erXEX9/X8s9dBhgKkd9bGJO\r\n        XkQCiMEgDghTKHAEBKiOMdjEjN7oK3tg9oaI6TXnG7ifBu7PP9P3Ebj6mEJSgxrwFoh0X3UNp6wWgKhh\r\n        W410IJWhovYElc+xdSC5ZAD8+w6n2CaMistaPWVLUR9WtWHeLF1o6ahVeUh2BYxlIWBQABjks59XUW95\r\n        ZQ2WW8o+RV1zKeqaTXHjtDKCkdKrbeO+IkvalWvLtmZQ/XwLQBAHJj0ACN0BhOQUbqKEiskCBMSMMyCk\r\n        4g0UPqxIw3OsmBJ7BAD1TQAALpN6VvewPWN1+pzvGyQtsPUVR8jooBAAQZMrtnJLN3+rZy/rBzMOHjLU\r\n        nn/hRde740n9nb/7B9u+Pdkys/JcRNYK//3v/9AOHkq146gK+aBoWVktE6wJJjnh4lbPnn2iCf8lO3zw\r\n        ONJAgzPLUzCgJqquWcxkaOK+y/HB61pSNeJVWaCgiVyHGCsdsNUbrR2IHn30pw4I5ViDv/e97zljv/DC\r\n        yzZj+mybM2eBLV68nAjL1bZy5Rrf6m/ds86ney4urkQ0Pem/+wLM0rZtB9u/X0yVjRpQhKRUBaA0MNnP\r\n        2/dgED8/RszpiPmz54bzL/+M8+uZBBCPPPKoM9b3v/8jB4MUxigPkCllNalCVK9n8skoq2N0Xx06drZ0\r\n        AKGUMZS42oDY6quXr2QCBNRB3psDAqtoLCFI9D/C+bMBGq34FYxxTdUJxuyEHdh/yN+Tzt+3zwCkpXKY\r\n        u9rHWOP/PJKL3plWTYXdZmXlN59X705Sn6QtgV89jCOmc+ZyxuPeIiaUEVTMr22jVmWt1Nr3Y8MKrOep\r\n        5n2lr1xq23u2se192tshgoCyuWZVVZ2rG1JP3Ssjz08U8CWgkn1DqoCrHtE9NACYYWzYch0fL+cH3Zeu\r\n        GT7XPWj1bxCo6ngHBIEBhDRQj95f64SBUIQKK0CoZM5VsuKXMw+KmZu5LJapSAN7kg/auvGjbAm2hKVv\r\n        PGGr2j5v+zass3Sk0XwkSlEBi1E+Y5aDhJBdVm9ZSFiZxY1Qg2WWnbC04iZLzqy0zQeLbDUSwrItGTZ0\r\n        xjb6mBCteJ8NAemgM9QNQDiQWWsZxDpn43Z0QCBe+orH7isI6Y4Pkh6wHt2wXg8GU/kkgwQGEn98kAAH\r\n        R8doldFKo5cVrMstE0uT5gt4ETzmQMbByEgo0V2SwZYtu30Vkn4eG8I6sKpJBNakKQcNNaj+klxMO+eM\r\n        E0/IKVNmIoFUsmITlcXkDF6LL2G3KOOeT9nsOXOd8Z4DiOT+fIZr6p4koVQhhmnCffe733dA6CSPCKt4\r\n        BepGsEdg8Ix0cdebI0NfMOTxvVvyZRT9AgDyA2wVuPdY3QMzfsnF9SOshjlIOFoNa9AHJbXIYh5sAPpt\r\n        YKxYL4/PHdtDvvjFYHQV4EiV0Lndnci9irGys4vDGLEaaXxktJXaEkspsiHEgFBLaf2wgt1PWhWDvtwi\r\n        IejeU1ARCqmzWQUQ1zEXdJxWbK1+sTFY95HLSlaCoUwSnsZekpaMi43MFamQsddDn2/F9nIMdaygqJyx\r\n        avJ5pbnUTBjeGiBJp5JAXU1lK2rUdxwbFiqIOSqQKzqWYvvGDLTN3V63rb3aWsquXcynIubMSbcZyIug\r\n        wCpFV8qeITvBGdQD2S2k1kh9Cqt7JD0xPrJJBPBESuZvZ34BQ6QG6G+BhG91nMaUrWwqui+XDjAI1jDm\r\n        1RFVsRUgVDDvymDwIiSEguIKy0ZKOMbc3Ik7cs3IQUgJTzgorAfgDuzZY9mo3PnltUgIAIKkA6SG7BJU\r\n        pOI6y6AEfFoRVFBvKbkNlowGsGl/gUsIS7dl0K9iC25HvAxRtGJQGQQIbLsPX+b15DMdEM6jezARKI6q\r\n        4BsPJSUS8RyIqYcTGNTxUPW8VKF4XUTa13cNAgYhtA8MaOkMi/HHfcEtE+sbWJTFcFrRfoCo/+hPn7CO\r\n        nbtZ0uqNdvBgGqtcOtJBIStKtU92TSgBgnRurTxVrEr1elkgtpBcBp7lK1Y1T8iJk6axQjK5GOTNW3YE\r\n        OwHnSFq9lpfRiNvsDT/viFFjLTU9292P+l5uvvIKAlN4xnhVXLBgGYCAjs+gi6HEePJKfBeLujwfP8Qo\r\n        KMNgTFJd9Fx6vpdees2lgAp+e/9z5GJACzq1Jp1CTuPxaT5/ND4//OFnn/+VV1731Tp+PnkPUsWwGKf8\r\n        3LLsKwRWejBW+PiZHBDSkRBKa5GiAAQMi83kTCAJT7+7/73pHeh3JfodK53AX3q1zi2xPZZAOnYkaSer\r\n        AEDAqr12czMgy8hbjyHvLIuD1ATdtxaAQ0dSXYWR+60G8VnME+ZStHVAiBg+UlEFEA4CmotiSG21aGF/\r\n        qEViydqx3Xb07WAbO71iW/p0tKMHjzIuMjifDW5FRVk6GOBOJ0FIIcKyWzQBBjqHVnZt6xkbp2hcmj/T\r\n        9yKBgwNAAIH47zp95iDLFjehxleAICmhjjHXQlANVUEVgGsZ0lYRElQhhtXcwnLLBujT4YHD2IN2bN1u\r\n        q/t2tqWvP2EroM1De6FipVg2Km4OY5bLYpXD4pINGGQVsLjn11oqvSJScmvtSHa17aXY6vrkAluxM4+G\r\n        Rpk2kKJI3UbTWS1qsxgAYQg0dJH1GL6USCbEC8IbFZiUj4RwFglByOnx48QfnAE1GxsYKB4sAMEDgCAw\r\n        8M80IBqYAAYaxMbGAAiywmpCanWVq2n3nsN24ECKP/AR6DAr26EjMoahV6czmYprmdRNzatap06EdDIZ\r\n        i4uUYIJ9gAH21U++eHT+FYjssXdiwoQpvjJXoWPV4slwOwKMLAt+eWUtf38D99nX8f3m+kTMQwSTaKsJ\r\n        mpx8wKWN2H5wjB4VWs2lgsSAoJVSYv8h7BlHj2XZMQxsxwCr49g2pNLoeQ4eSvPvZB/QfcSA0LFDYMYS\r\n        SQfo7w2M60lZ0gG2oDIFKULnP8z5j3EOqReiFK4jkkFV3wkgtRK3AAKMmMG5iwmyYSWSeK7QVrl+JYG0\r\n        AELXBECQbhsmrqsN0fbTAEGM7kDCSlSLu0vnl7FNRkKBcgwI7dvrGQtQl2pQtepdhRLg/vjHP3GQXrFi\r\n        TfO9zJu3xJ8nhyrflRWNzjQOCA4KkSrji0zQ28OCwzwTIEQrsFvrxbweuHPW5036xvW2hdV0bbvnbSOR\r\n        f4ex25SgnsmLpKQzgYGS0NydjtdDYKC5Wo8fvx5/fr38/cyxuubzRteIQcIBIVzPt35cAJG66HNt6/is\r\n        DsOtqJb3rSCjmlhKAAwqcRdK9dU4FZXUIMVWuE0sm/eaiScsjfl58GiqbV+FStruBVsiUCB4aeeC2ZaC\r\n        BykX1S2X3+XALzmMd1ZBDYBQbWm51XY8s8aOZFTTVqHU1u8rsOUChE3ZNnDKButGj1NvwQgofK4LYNAF\r\n        MOgybBH9DZfTYUb6RgAEuSrOU9pbmWrXlJ+AOKWMqkatIjyUo5zUBolm2hdAuOQQBsMRUYNKNJUGVmGV\r\n        ysJqBgTXoyk0kXwcA2EmkzoPPT7f0qCMDJI+csphepiF9nKygMvPLyZ57NHHnTHL0ZMUnNEoVxmr0zmy\r\n        weQPHsjqE4usq5I24q4rxoXVxLGn7WdPPePneAEVYc3aDX7cT3/6JNfF+g5waCV78smn/XPps7169Y3s\r\n        B4/DkGK6cl5ao/3zP3/XJ7biBqRLy2+cDgNm4MITZWYVRVTgBrKcnBKkHJiHVa9FXA9MFQOCJmGTYtNZ\r\n        kf/lX76XcP5gPM3g/Jk6N0a8LM4fSH8Tj59X5q662HD67DMvcM1il0j0HgQGWvkUB3JeNpzIWxAYGwNe\r\n        CWpFjVYvGE16cgI14R7zDLoEyUKgnClpiXegd91yfkp/7znQrBbJmOigDnBU4Sbr2bNv5AX6ku1DL371\r\n        VSQ0vEZ/h63oMMCZxnuQxFQtQ3C8IvuqLGIeiVxPD1JhENkVrad7f5BRidrjmhk7dtim7q1sTbvnbAPb\r\n        o+vXYmRMcfXsIgZNlwxY+M7QYuDESfIAeN46LXqMhSIAaz0SMIBDAIVYYoilhnDd+68f3asfr33AICIF\r\n        EmkBqCGIqAYPQA0Gv0pIlcrKcReWMqYC0LwC1AXmrgzCkpIzkLSkpu3bf9i2zptly958ypZgZFzd+TXb\r\n        QwRrRhZGRlSzAmxVuYVVlpmPgyCn0tJyquxoVjV9VWps9+FyW4eEsHRnji3anEnZxLXWbeTSFglBQOAE\r\n        KPShserxQlqxldJKDVDIJ6jhAr0UPK2VQo2XyNF2FwvM6agdgcL9YCAEZMBg1ICu6JQaTAa1kZjr00rT\r\n        RCxuMU5hD6Dke1ZGCStoFdb9WiZEHV6ABqskyaqaAdPvNVFffeUNZ2ZF3+XDADIiink0WZUeqpcrN+Ib\r\n        kRFQfnLp6LlacRhsieR9+w6M3F9/bW9i+RdT9+kzEIbLx0KOFZ/Vf/jw0RzzFV/FZDTUMR07dnPAKmCg\r\n        q1h1JKLrXqT37ks+4hZ2MXwFK5tIkkA1x8mXXoELSJ9pZZBl+n5ACNZ0rRaaOBJTJX6/Ej2rn3/fEcal\r\n        3JlP5630c0Pom/4319BWpMAo3e/f//0/uPuzlmOk18v2c4H3pxVRnpVEQJAapElYK3EWUJKk0rz1e7of\r\n        EEJAWXfAsZT3cyKAMZl1ctFe4h2MGz+pWUJLApDTdX4MXNWoLhkAYCzFyDMSGxo7dOjqkk5WloCTaFXA\r\n        KYTjRszoC0siBYYTcDXPNS08WpU198TEPIfE8XxcoduH9rEkGEjGuI1vtfKU42oMy8ocPMtCIjA4efIK\r\n        z33JAaBGQOCk81E9jHOLwpyOKAYgv150H34PD5COj8KM62olbZzj/IAC80ESQjXlClWysIo5WgkglOEh\r\n        KCqq5f2hBij2BCDIwAgqCVb2nqN4jXYDuuuJSZDXYRn2hA2De9khgCKThSc7rxI1AzDIrcAgWYZ0UGWH\r\n        M6pwOVbY9qMYFPEyLNmRZfO3ZmM/SLpfZegyPJIQEBd6T1hFn7oTlo4NQXaEgvqLrCgKz71H4Qh0LF64\r\n        oqyaXF2IVYMgGbikENsVHBAkRYCaGozoRTYSRilAkGgZT8gO7bsSKESxCfSdStwj1URY1YKcdVRtqqeE\r\n        m8CgkfvQSx82bIy7ITXhBw0c6uqCBzMh6mkiqnCE/OzxuZ966jlE0CxWzwomhvTc8xgpdzVPSK1KMsjt\r\n        3HnIJZLi4jBps0BaAYIzVnTMvHnLLD0N0Rew0otbsGB5s2vtcSQMMaUCTs6iDikA6xy6ugKFZKXesWOf\r\n        zZwxz4N9ZK1uBgSYID09MItESKliTUhRWmkWcv74WRVcJGBRnIGfG7E/Jq3au3btt5kz52HhPw249W/W\r\n        01evXs/YKww3jJEMZgKE5ORDCYDQzZ9dk1BALimlmbifRt7dCZjkTJRvH6sycm8WAlJ65x5tqPGniIcK\r\n        dGhcxfTf++4P7dDBDCQJmByAF6PWEETz0kuvNt+jXJN6B1u3JhNLAuAi4laxWtbx7rWY3A8CWqXvJ8Xx\r\n        P/hZ/LcYuYb5VFxQbcnz5tgqfPkr33zG1nZ82Q7MnISOrkxGRUNiLyARqJ6xFxh4LgDXVziwM7Dum8Wx\r\n        hs9q9Tf7Pq8dsEIOQQsoRWpGBB76vgVAIvXDz8E5meMqV1iNqlAldYG4gQqoHC9BCXOisLAady42BEkI\r\n        AIEkxFQRAHcQo/r29etRHZ6zxa8+Zit4rh084xHc11muYpTSYKnM0rJLAYRSO0Lho/3HymzroRJbvTcP\r\n        CSHb5m9JpzHzJgSCpVE+k1QGAQJGxa7D6OKM6+EYgJCG21FqQyGxz5foFuRFOCjhfAmDi0JCtYLVuU6n\r\n        SRwDQsLW3SqR2uBoGUkIDPgpUPgEk+7LRP3Jgt4RQMhIw2gIM9YSainmb4AkTWjbwDbockSaMWmVMxAs\r\n        1X9pUybP9NBUicGKItuXfNit+bEVP2nlRvTtXF48kWi8NFmM67E6a1Vy6/3nv4DB7wcEOOH2Y/DKyxqd\r\n        GWtZVaQ2+GT9/Bfd4n9EUoxWLyZ2jQrQ8tIEBJrMup+f/OQRmwVTygOhlVJ2hvnzFhNN2Qbm+3NiHIa4\r\n        dCAd3W0IenZsCBkAQnlJA+CH8U4MGNlnwvl/9onzK6DqEswtgJg/fwlSTluP3Ozfb4iL2emI3F8jICg2\r\n        jB7C7XoW0FBlHYnsw4aOJFT6281jpJU5AILUrwAILh0kkCQEvXdJGjEgyIi6c9c+lxQVuadKPrqn5597\r\n        ySM6df1x46bascPYXVD9NNE1tnr+hQuXNXuBPs87ePKJZ+zggXTAsQjVQnEWmjuxDv/ZDC/Gb5YgIqDQ\r\n        qt4s3gsQkDCLYYo9Y4fYKphmBb78zeNHENp+CLsRYIy+Xi2pgsWihmtWMU+qeBeVAHQIDRYpP0CgECjk\r\n        EAACZANr0RL5NQEKlyYioGgBjPgY5pbO4QADGPCclYB4JSqxQpHLAYVyxknzXCqcbGT5BZVICaWuMqSj\r\n        ekotTUdlPA4o7Nt3zDbPneUGRoHC6n5dbRdemuNSu/EupWeWACCldhQ6lEo8A/aDTQeKbeUeqQzZNndT\r\n        pvUZk4R2sNi6RgGKn5O60HnwQlcZBlI95RiFF1WEMYPOtgV0VFZ9tquSEKhzIJFTq7t8rK67CRDczSir\r\n        bovHIbhVgj6qFcbFOomhnqZJnjaDoRVYTCkJQatkGQNQzwDpeF+hxBwAiIAhlhBkcFm5cj0RfF9rdsXJ\r\n        rvAYEY0CAjGegCbo/2Sy0XkqUwwHE0vHbOK8dTD7Sy++6r///J99wdphw5BtQOqCpANJEbJX6Pe6vz/j\r\n        GDH7Uc6l4KcKt0XwIpESJOLKixCDQsinIIdBBV+4F91P7B7U+WTHkE7b/OwuIRAtx6R0QNDzQhI59ayH\r\n        D6e5O/FTz++5Dy3nV1RmOauKjHzdu/fyexfo6Fqyc8juEvIl/hw7wzdd+hAgtm9HYJJsAQCQGPYEzP8J\r\n        Uuiw3nsMZpGrNUQshvH/Kd6hOB9D4//qK62wCcj2IZuAjL9K3Q1RhfUE4fz1X/+NP9ef/dnnSRwb70bk\r\n        HFZDAUesarq6qfkT6fCB+VvUiCDW85lW7mi/JgKJwJSyISDxbd1mmzu/aqtbP2vr+3ezjWs3Eep+xG09\r\n        AoQa6fTMUQGDQKACCTUmAUMVf1ezWImqtE0EB/6uAxh0D4FUnDiAgt9bdM/6W/crKcOBhTlUzbU8GYl7\r\n        rED1EpWL3I7Q6LalQsYuT6DAgpUJk2cQkyCvje79KPaEHTv22JoebWzxS4/YUj3frBmWTMDY0dQiO5aB\r\n        uzK9GOmg2A4KEI5iUNyfh0ER+8H2LJuHDaHHuCTrjDDQeTAEKHxOQNBJqc9sh07eQHtrJATKMwsQiml9\r\n        fRFAuEb1I0kIMSBIb3dfsAdeAAoKTHJQCMDggReRtTowtkRh3F6QAKEWMS5mivaSEGAKoaJUDK2SIb9b\r\n        cd6X2ddEFDBIrzvNClJry5attu9/T4yiCR8mvQxT2n7723+DajHabQfpablWjB5WS4y3pJJTWvW4t6GD\r\n        RzQDgkKR05m0ZbhpZBORFCFbQ/Lew85QWsEUQCQrvgJwFPOgZxFoKJhHhr2evfrZd77z9+F+iAuI8xN0\r\n        Pz/CVdiv7yC8KMe59xpXD1oAAQmBF1uONCHd1w2KMJ4i8yTK6ths1Bcxu87vDH7f+b/sLk4/P56IIlyM\r\n        ch8W8szS8QOQtMQwaIx+/OOHWI2PRcwoQCB0mXuQRBPnDXiuvSIBm6MCg9FWRtlw71/EVvGou1zj+IgQ\r\n        //AVl046deru7uJjx5EOWN3KiJ6ToVk5CGeRJhTbIZDVeQROuxnrYxhNC9GbxXzS/esEAhFJjI9JDB+L\r\n        72IuF+0jBq3W6uzMGNkAtAIDkMnDetlG1ASpCluXr7Iduw64N6iY91HNM9XzrPUAoUChSmAPo1ZGoBAk\r\n        hUCBgSPSCu8kNSJm8rAf/g6k72MQiI+vdGBB8nAJIVyrkhDjclQlSQilovImK8H2pESmAiTcXEAhG8DM\r\n        yi1zaVa2gnTmxn4MsVtmTrHFLz9ii195zJb36mibcanvO5RhR5G8DwMI+wGE5JRi24n9YENyPvaDTFtE\r\n        DMKcDSn21qjl1nHIYusIGHQSIGinowBhyEIbOpXqslIZotDlcpjxEpKBylZdpdCjijeeQdc6gZgeIsZE\r\n        AobIL+y+4CApaHJ5lCLShFYcJXKcUmw3E16TowTky0C0URx8Pg+olfMkCHqqifh0FX6g6stpLL4+MaOt\r\n        JI0qmLuQwdFvF8xf7gE4moBdSJKaMmUGemi2u65S6Vidh8tGcfSqNqMJrWQaBZlUshpmIXYdPZzh+RB5\r\n        Chji+u46kz7JVuK13JU6l0JphcpiXAWk6Pll/KvDhiH3lc51HJfgdmwFkyZOt0mTp9vkSdMJvoli/OmC\r\n        lQ1wCBBktJQnQ/qgPBO5GEcV2CPJRDkDofIN48u4ye5RDAiJYcVc27dzfuIqJuv8kEBK11W8QTb3UIJO\r\n        XAXzybMgr8P69Vs9GUtj1JnYjo2btiGR4MnhdwpaOqxoT3ROHSsDrcbGsxwVp++UUImHfUl9eoY0gPYQ\r\n        0osiISfxnBp7kQK/du7c77kTul/FXShOQcE3IbiJOg94gdIpiBO7JVvjdk4GoNI1PkRTikHlovNV2w1v\r\n        EYkZm0X4WJSPmFerekTOzDGx8uYdOmJbCEhaR4LQ1lGDbPvWPa5nF/IcsvqfwGt2AsNiA3OsVu9dacQP\r\n        SAlBWoiY18FCzCw1IqQaO1BoXxmIbgtoiD4LaoGkisD48TliCQRVQeduVhdOkZREYpKDAclJSAlFLAoF\r\n        2K3ysIPkysjoBkO8D3gg0pnfR5hDOzduw+PwtC148SFbiJSQNGWC7dh9EImAru2phTR6LaZfa4ltO1Jo\r\n        a3fn2oKtKTZn4zGbsfKwdRyz0t4cusDeBANaDVpgn+sAIHTgj05ICMOnb3CVIa2UWggSjVihVQ5N9RKv\r\n        ICmcQ2VQyqoyyRS37Ykb+IFD1FgIGHFw4DMlFGlSKxgmxJhHaZ9MLPmKNWj5iOB5eABKmfT1MJeMbopz\r\n        ECljTdcSKJxyCoyiSSvm1WqoCafJeVyJQVAK/vk0JdigaxUSjCTmkJjr6aaeCBNcejXo2sW46OSWy4VK\r\n        yRyTbSGk/HIcW0kLZUxmgYWO0fG1GMQEcCHzToErWg1wFeFdEFPpumlIG6kAgO5FW+n0WXTCKuQFygsg\r\n        o1oF96W8AgFWCSG9gWEYoyiTz7eeoSdQIJsN0TGPlUHuS7mdHAhgOIFpOH9hOD/nleSigJcwvvwmAoAU\r\n        LNNpgKRiEwRg2XJfsp+LGKpcAwUlSToKz//pJNuRzqtnFaApjFuRm3oHAiWFSSurMo3PBaYa1xri8jUf\r\n        ThP2rDoZqqsg704MCJs27fRYjTzGo5z3KimwFimuOpF4JjGcxGtRvHonivb3ifnRMVpt09attU2kEK/r\r\n        8JLtWDCX/IsUH3stSqflXTjHnMbD0OSAQFGRzwSEwMR+be4l3vfVXcBNzEDGli22f2Q/24Ib8Mj0cS5R\r\n        lrOAVchGkKCG3LfPd+XYpMqgUqSEYgzrxdx3UfkJKwQQCpCc83n/+UgKeSyi2RgaRVlQJnP8GHNrz76j\r\n        tp4ApfkvPmzzXye0eWAfgsA22a79GcQd5Nue42TfHi2xLQeJUMR2MG9zqs3ecNSmJO23DmOTrM0QAcKC\r\n        AAjt+a8dgNAew8Lw2ZstpQhAkMsRvagaA6DbEBwQsCDjrpJVX8yqTEbFjnsGl4eQhjBSJwFClMPggOCg\r\n        EDGlJjurvkR3BY2IucVoyo+QgdCLRyYUiwxFJaNqslFRSVnbFeGlyVnMCq2kJjGXJqoi88oQE7XiCQwE\r\n        AKEQpa6vVY/75v6UblvJSiom0rniwBqvVafYdUWXMTlVJ0DkYBCtoJ7DrjRbP07hrAqAQffjxRWzSheA\r\n        4LqnQiaJTwokEt2P7Bge9q3JLpekGCBaPRUMI+A76RRWZuncbtNQAQx+L3WgiPPr3GJ2uToloQiQdL5G\r\n        hQ9HyTS6lp5N3xdwrIBNYyRg0/GSkirkxlSeB8+m5z3F9eJafdreDwzhWRV7ovMqF0H5CcrPkLchjL9c\r\n        x4AcoeIaM0V5epqv3oFqUxA0VkH0p+odSNV46uln7eDhVI/FKGLCVwEeIb4/kAftwGzVUFVEboSLGFNb\r\n        rdQPMlv4/izj3mR7xwy29agKG7q/abtJ01Y8h+wzmlPnWeB8kTtzNQBCgsrwmQxMSrHsSIlMXsZn2eRv\r\n        7BzU3aWRTZ1fsfVIJClr11gBc7FU8QUOChFF+w4EESAIDEoobixAKMKGUMS9CxAKMTiLCrCx5SEp5OKN\r\n        U8BRZkGVpUOpqBGSBLYsWWgLX37U5qE2zHurvS1ftMLW7UyhNWOubT1ciHRQhEGRgCRsB3M2pdus9QDC\r\n        CgBh1AprHUkHDgjtIkDogHFx5Pxt1GsPBsV8GUhOk33oZappGIHKcAHruVJAT2G1FiBo5Vd+ggNDFFuu\r\n        LEjlE2iCqQiJr3xRTrrXRfBiECFZxLPFmMBamc7w2dm4gKR8w8QWBIoBQjnnLZVmxeju7dDEYUKLIUX6\r\n        28+pwhrNFWlDamzIWFOmpn6riDxJNCG8WucLUkyQENxFqPN4/LmARfn7ApUInCTJKBff02FjYFBwitym\r\n        ZLAhhWjV1Yrt6pNHCgZRXNfyHA9nXj6PjHaftTLre0+fVUCMmCV6Xm31tz4XEOie4/uPY/AVpSgwEfAK\r\n        gOv5W4FlkuBicvuKg0FMUXpvs+qQeN96b2HsgvFYz6vxJy6ChBxdQwDrY+YZgSEzUeqQ4kUGDVK1phYv\r\n        hNQx2Rmkjsnw6FF8HslHJSBVA0pQGVrE86AyBF2/hSpcNA+reCV2KkW47hzS09WFLf262P49R3zR0L3J\r\n        PSpvzTnmQz3VusoP7bfilDSAkhgYWfs/ZVXPo5/CsZkT7dCEYXZw6gQ7vniuuwel6+eh8uybNd02dCMA\r\n        qu1zeDSIIJwynvgBQBijdoXiDLgn3ZsKmej86n9Sit2gRGDA1qUDgKCA8+WXQgBBHpRLclIuNq4cACGL\r\n        OJ0MSGCQTtzO8SwA4Vihbdm0yxa3e9HmvvCozW3/hs2fMd+Sthy1DftybPOBQsCg0NYRobh4e6bN3JBm\r\n        09cds4nL91vnkSuQEBa2SAitBs231ngZOhC2PGbR7lAcRVGKeBgaTpOaqt5xGBW9bBpuR5V8cimBlFEV\r\n        zvACEA4OTGwKTDT/rbRUMb7XRAhAEFb7OJec7xwc4s/JplOAkfvvI4oBIaHstJejdmBQ1dmwormdIYpW\r\n        dKZ2IAglqu8XgaPqORFAOWOK8SMAiBnWjWoRM8Tqhs6l6wqgHKi4xxiwwrUS8uQTGCmRyeOV/5OMHwNR\r\n        y6rcLCVE9xpAVYVLUMMiMBWgJhYziY2B918z/CY+zhlf4+OSUBifRKngtCSVBArGxYhcaokoQYrR2McA\r\n        JBBwY6SSgiKjpAOVv6OLbhyV8fFb3/orYhTSXK2SF8KjURMCi2LXXrwNAUKRyy7aVrFoVSLJykgXKMFI\r\n        B/Plo9Zs79/F1rXHfjC4px3CVlGMeqSF7AKu6tPUTsxZON2OqpvS4O62o2dbOzRphEthZc2rOgzMveVs\r\n        XGdbqW24lUjHLUgbm9hfjxpyaMEsdPpyB7XDW3fahoFv4dp82guabBwz1A5Rz0BeAnkPgoSAKuoUVIVS\r\n        qKQiUDGBeEWkKBeWnQQQThCGjB2rpJG8BDIWAYYsjK4ZnqhEKDLxGil5VXYkq8L2oxJs3X7YlvXsaPNe\r\n        fMzmtHnNZk+db8s2HLI1u7JJdy4goYkaCHsIV8aYOGPtcZuy5qiNX3bAOklCgP8lHbiEoP/a8EFHEpvG\r\n        Ld1tKRgUcwCEYsouNZxRtaDQa+4SlZIuUBtBUW6qnuOFOAmQ8Vp3Ue07pceqgoz+9tJWUS07raRipLim\r\n        vJe3ivRlT+aJGE3Vc0IzCkKQo6YU+uwskoqaUXj56QRqVi/imvTRNpxfOQGfBIVYWmmSPSKa6CHfPlq5\r\n        Y7CIpRoHLK1uUbARVvL4HhWQc04hvdxbc338SMJwe4RWfqeIyWLpIwFs4vJeMTPfvxUzRxV2o/x/Z7ZY\r\n        DdM2/juB+UK1owAysQoUVKYIIBO3sY1GRlwVImHbTBh4TzhFrsgYDBK2zcVLmsuAB+mqxVMR1TJACpHr\r\n        tk/vAdRs6GkTxk3HoIvhkRW0XEFRCpvGqBwH/MTBPMHN2BIA5O48eRWk0kZuQBntgtU+Qc9Hd8/FbrK1\r\n        bydW7Odt20g6L2EILUcC0Hy8QE2O0q14mGaz0s+dagemjYXZ37B1BPqkkCpdUEjuBaqBVJVyMiO3AwSb\r\n        UQV2Tx1ve9Zvsm2s/ivbPGdrkQgO7tjlruv9qCQbhvSxZa//zBa/+KhtnEyvBXJ0srGVlelcAEuIOYBc\r\n        CpFnQWpCRNgNigCDAoCgAKkgr4g05iLSmAvrkQrqkQrqqIGAVLA72Q6Sz3AkvcQOZpTb3tRS27YnzZYN\r\n        GmBzX3rCZr36rM0YP9sWrTlgSdvSbR2BSGspipJE/sLcTUgHa47ZZAyKY5bsAxBWWivSF1rFRkVJCG0R\r\n        GTqNWIYIkewehlwyHUvrCUA6qx4EAgSCkkgAuUjwiTr8eK64ikcqLj6uI6etKisn/i3wQKJQOqkzj0pP\r\n        KdvRwSEqO5XAbMqNlxgnUmSdAny8ZJUkBq3MznifAgpMatkdfJWOpA5PEooMkb5ixoylyS2DnVYwuRgT\r\n        yItwSG8XcZxIrkAv1cW1BQQenuv3p3ujOnBcTsttCpJ+QtEOL9zhYKBtXJashbmDBBIdG30fH9tyfFwM\r\n        JEQ4xuSVeKKVWM8QKvPI8xHIpaXonK4KJYCK31MMVtG4OGC5Jyeq8x8BQRPbZsLgpjiJZoquFYNpDK4u\r\n        TcTf6XhPH4YUcCVjHOJzDgEzacfzPEakGH1Ysfwe4ONh7iGyz7cK9Gn27wMK8ve73z+QAtkEJMoJEBgk\r\n        2hYqAIRsjJVb+nSw1Yjwm8gQPIq9Qh4Yt2eQ+py7bK6lzZtCpGwWbtujlrxonq0hvHktx6dTvFYqRwWq\r\n        X8aalbZRagcxDDt3HrBNRFVuowjskjeftWXtX7Itc2d7XMPONetsXd8uhBL/zIuZbFmzwYOHcjAIV2AX\r\n        qAYIFNSmMGW3H7i6IOkAycClA4HBCcCgyfKLGlETGgEDQEGAkI9kkFdjB/YetE39uxKC/ZLtmsN1jxfY\r\n        btyJW/Zm2rKhQ23uK0/azBeftKlDx9q85btt+eY0pIQ8KNdWbMN+sD7Fpq48ZBOWH7IRC3a7yhCDQYuE\r\n        oOSmkcts8op9blDMq6JaK66/E+dUiz9ICGqDFXrMkS/g/eXiLkShAYpKnymVVEVE4603M+E4hcw6E6me\r\n        IiChjLsACoHRJH4rS07HeMszFalQHzuu5UyHlBBLB77qOShEK3ck8p6JV8PYGBZPbmeeFmZxJncwCKDg\r\n        xTQiauBvj9DT1hlN9gZ5PBQqTLlwb10Wwn+1VZFNAZ6yLF09imIImhkigVlD/bwAQkGvjhk5bEOsRgAo\r\n        F8EVsxGTdHHfj8ubaT8y3EZ2CGe6GNyaASIS2931CzDI/RtJKzHze6OPxBVfgBLFjCTeQwhnls0n3GtI\r\n        LIqKgfjn8TjGIBsFlXlMSQg0q5M7D8YoRORVOLm2FRTuqCV81/NVEqglHFmqQggyUkCYzvEJd2QECImg\r\n        UI7InwOjbx/Q1Vaz6q9nhT+y/6AXXXGjMEVispfMssNThtvx7VttLzU5k9etQ5ogvPn1p+zQzj24+Cgs\r\n        g7HzCBLEekBiY8/2tp1yejsICV/To70tbPWsLe7R0VYlraPX5W7bvHCBreraypa2esbWDOpJSf4dHoGp\r\n        8OMKbAMKklK8gQBBNgVFJpY6GEgyEGE3AATyREgHuQUkGuZTjkDpy9CR9HLbNmMmNRZfseWtn3faun6H\r\n        bSHYaMvudFtB6r4khJnPPWZTkMRmLtlmS7AVrNyaZSu3ZdvSjRk2a9Uxm7TskI1dvN+GzwMQhq9wl+Mb\r\n        sYTQdjASAoDQffQym7ZyP/aDc2Q5XrCKJuINqKeoltRXadcmKSG0o45aoXmvg9CEIu5eHBp/qvJMC6lG\r\n        nZep9mq1YnLsEDCWkpE8FVd2A0+8wV7hBVZ13tCaS8eqhFmw6LdM+EQjXNCHY/E4iOeJgTWqwdDCKFGV\r\n        mxgAokntKdqyoCui0tO1o8QZlxBkK1ECjOL1BVhUNfbWYaHElnIKQg29UB3H6z44c0SMHjFpuIcW8In3\r\n        PZzZjauBybwSj1KPY2ouyhFV3ZGR0ynk6TeXO9PfcgH7d+E6wagX3MOSLoItIRQxaS5DFoNHNE5B+ohW\r\n        9SigLABBVPknvq+oGpBnHXrmYVQtKE6OUmRqFGWoZCkFGXlgDoa0CoxnikgUcyh12vMAEhOCmgGgJUy4\r\n        ueS4yo97CfIoldjTiAOpBJwMkzpnNZb/QvT6vVPH0dvgWYKS0PdXJ3n5ONVrOA0VbVtnB8YPBjQ62U6K\r\n        rm56602qG1PynMi/vdTgTMP7UYiXKId+FutQO1ax6ie1fcFWtX/ZViAZLGr7oq2YOYMitqtsLSCxbsIY\r\n        W9HxFQDhaduK1LAZkDiCWqQkpXIMhZXcUyAlMSlMOVAJdgOBQlAVBAaN9MpAVUBFyKKOQVpWjR0lQenA\r\n        0QLbMH0mUsmrtvCNZ2z+S4/bmuGDbM32Y7Z2+3FbOmKMzXnhpzbj2cds0lu9bcrcjTZv9UFbuj7Vlm5K\r\n        tUVIB9NXHrEJSw8CCPts6Kxd1gnbYQCEyIbQYcg8Vxl6kfo8C79kFupCAaJaxQmSkEhsuqxMR4qsqp9i\r\n        6K0YWnUJDNSA1dtte/tuCrFG7dodFFSSystSRS3IvO9e6J/oK2tUokqMJpKKIMBQGatt23eShLTd1m/Y\r\n        TKjyalu0aBkpn0ejnPc4viE2wAkMEMt9ZQ3iqlcOFkNoVY0qNoUceqkEcS69GFGSQLRNAII4zVbSgmwN\r\n        8qr4PUaAtXXbTl4297d+s5dKW7BgKf0RjrgPXenfSm8VqMRqh1SQINaH1dOvq/uIr+kAFBfeCNV1ArMH\r\n        hn+wPkFzrQL3XgRwaJYg/LNA7iXxKlIRKKj2YGRriO+nBRiie3TgSqyHkFAfIRGoHtyP7zNKA47BIDEn\r\n        wcN6EfuVZi2pQCTRvyWDMBEAQt2ARHLvg1OLa1JepUA6Nmzl2ZF3Re7VY9t22PrORCm2f8F2DOxqeVQe\r\n        qqeMXRMBddVlFbRPW2ZbKW++nliF1dQWkIdg17r1lM4/GNyhZLfmUsfi4JrVthoQSAJYVnV53ZLIG0ia\r\n        NYt6GSttOZGzaxYstpWoFMu1egMam1atJ+nsIHEZ1MnEqCiXseJJlLFaibQg16eAQcBYDFgIDHKpapRN\r\n        haPs3DoiEQncy8atmFFB6HGp7TteTFxBtq1ZstoWdmlnc179mc16/lGb/9pTtmLVTlu+4aAtGDHe5jz/\r\n        U5v+9CM2rkd/Gzdzjc1evs8Wrj5q8zEkzll1xKYsBwyW7LfRC/fa4Jk7AiBgQ3xjYAQInQCEjsPmW99x\r\n        y232qkPenKVIgHCSlVl959W/kQKraurqXZa9KWeoSusNQOlUs3v3HnLgk9kmk/Cym4i6nbaNF7F123bf\r\n        6u/t23c5SZ3QyuqqgzfaUOqyOj/RCUnNTTm/cvr/kpr/qjqs8mP/83/+iRc1VRCQXnpsXQ/17CMvg7v+\r\n        ouKbsdU7rrobiejSb4MxUcDQIrI7kyrL0BkTXVc5D55aG2wKJwUI3KNSqwVq8f0pdv/zn/+8/fEf/08v\r\n        ZOJpyHK7qbCHwCi+nq7p7sYWim0XAo77inpEFYvilT9UP44qILsk0bLqx0ydyNzuhfDnDWAYynzH9ocW\r\n        r4p7VtwN2xIdGUsO7g6OKZYM4tqAcdmwuCJQVEIsSDQtakOsBsXql8BVY+thyQmpxSHmP6QW10VSggOg\r\n        19KIKhT5Ns6mDXkyAUBVtET1N+4nz7pVcBZMl0WQ1I7xw11t2IjR8NDsyVZKtSSPY8FNqkzCw9u22f7l\r\n        i23P2rVEMjJPKU67H4+EAtcUnKb6DMcJAttFlOOWtettE0E/q1ETBATLkQ5WLUuypInjbFnXN20ZUsNa\r\n        PA3r129HDTnquRwq+KKqXQqIUs0KRW+WEkiWsWyB7ezRgXqPy7EzIIkQhZiB1+BYehmh3CQkpZTYATwI\r\n        yYfzAQNiDXYdt1Vrdto8mgnNaPWCzZA08NyjtmjKLFu4cpfNIXFtNurC1KcfttFv9bfR09bYtCV7bHbS\r\n        IZuTdNRmYjuYhCFxDLaDkfP3AAjb3bv4xuAFESDMp+rykLmkP861fmOX2ry1AEIVKgOAUBUDAt2aryMh\r\n        XI8AIVYTblJn8SYSwW2kg29+85u4kb7l9I1vfMOZWa3GY9LfYiJ9J/rud79nI+gqVEbJJ9X4kxtT/Rrc\r\n        /oAtQlWMdLx+r1j8//W//peH3lai/ylc2INd3GoejIkh1DZ2cylYKrLERwY1jxPQxI+8DyrQolXfSVl8\r\n        imAURTYAMavn2ouZ5NqUFwRAkN1E96j7U8akAEu5DgIE5TsozLgCUJDYGu5BfQKCRyVsI+9KBGT63iv0\r\n        cj1l23m1nQggYqNhiI9oieWI+ww0u0Vj12FCzIUfH0tIHjEakcAkjhzV+Gkc4jGJXMJ+r1G8Ruhr0OLV\r\n        CJGpD6g0cSFRXS8KQHOQ0XgqgE1jGnl0VDU5FB9RmnGoNRCTANifPZKggpoSFWoR2Hj1pshWEalNcSm/\r\n        EJ0ZpAnfRuBRTXyEXIiHtmxzNWAthsHNVE46tnCWleA5kMdBVawU+bmPaL9duw84Ke8kjQhPBZnpfWpl\r\n        zyGi8xCh3jsAiw30AlmzBlBAClhNbsSq6VNtKTkEyzq9bkvbPG+bli4zRWDux8OgyFKF2acTEJVKebiU\r\n        vcmWsnq57UAqUcKVyrptpzT8Ec59hKjCw4cLqIqUSy5Ctu06kGk7kjPwIFB1edthW7v5oC1bBeNPnWvT\r\n        O7S2aQDC1Gcesnm0FZg+f7PNGjTCZj3ziE352cM2sltfGzl5lU1esMum416csfSITUZVGLcw2UbM3WXD\r\n        5+6m4vJWaz9iqbsb38C54EbFLkPmUEtxDoCw3OauOeyAUAggVKIyqPPzVTV2pX3b9ZuAAiBwXaqCN7AI\r\n        7cHVxy4GBG3VzUcl1lUgVIlH2upvtX8XGOgYbfW3AETNWGQfUMsu9Ye8RIegREBQRNuf/dmfeR8GRcdJ\r\n        SlBpd2/PFcUrBKOeGDpa9SMJIY5J8OAmHSuXoTweIqksIveAqOa+jINRYU15ISIJwplaEkIUh68Ozi0S\r\n        wlebJQQV+9DkKmOS1VKDIK5f6N6V+Jqym7jtRLEcqhwl+4MYJkgsoVpvUIlCPwQBSgAv70akduDuypVR\r\n        Vi3AgudG9+8kF62OEUgIJN04KXtAbJQMElQcE6I6CbENJ66voOdUHIjXXvQ6irH7ODQfcaZvlj5CRW29\r\n        D9lRQtOUMFa6F/fA6J48mE3PSkCbQtcBhVgKqxEwRDabUDFKUlQAZ0W3avxdutLf2o8Cy5Qg5aqNgEIS\r\n        QwQGLkl44R7ZE8giJJtRvSp2L15ga4hHcFDAVpA8ZoDl0Re0CGlBBXQyCb9WeLcYWCHxqpVQrrwQSOK+\r\n        KlerZN3+5KNIuntpSrPDNuBFWDN9ii0BDJZ0a21LUCnWTRgFWGwmLmAvYdJUAiMOQZW/96Fi7iR0esuI\r\n        /gQvvYGK8gpSywu2EtvEWuwA6nGxfc8h27HnGHTctu48apu3HaJf5kFbu2mfrV6/x5av2WGLk7banPmr\r\n        bGqf3jb1xSds8s9+YvP79LLx01bajP5DbfpTD9vkJ35iw7r0seHjl9vEeTtt+uIDNnnxIZuIIXHknD02\r\n        YuZOGzZ7hw2avtU64kxohbrwxkABAhJCVwDhraHzrM+4ZTZ31X4HhKIaYrpPEudNnbmrt9S1SYCA2oC0\r\n        cM0Nh6rCfMdueXebW87kIjGKmF9ZbH/6p3/Gyv6nzsz6W59LUlAXIlGsEggwZs6c4w1dVPdf/RYFGF+P\r\n        JI24oYvKmVVSNlvp1u5Hhpll9VfrdOXjOyioW09z8E4IjPJqSjJaqmZC1G5dLd69zXu0veQeA8VYEIkJ\r\n        Y4nxJDFoIoYIO9kQ8ISoYSuglQgISt+VhKC6B6oCLdBS8Zi4dZvUDD+/PC3ynET7spmc53pnonuPVYr7\r\n        Ivu8ZZniPuSdUXk4uXyD2zc8eygMI4+He3LUXozvQ/lwgEFM5F6DYCQMEoueJzCrvD76jY9LTN6iLKLY\r\n        vSr3cmQEdgNvLJF5GXQFpiFtRIVb/N7Uyt4pnMeNw7ovr2ZMzULurRGmr4tLlUmdkHolIBOg6f4jOi0P\r\n        kwNowmcu3YUFIEgRLSqFVwNPoBo1PUFyS2F13jp7mq3BBrCa2oobiCnYRn3FQ9PGWebmzbRjJ9sSXV/Z\r\n        tGWAiIcnE96tfYn5ys1QrsZBskr3UJBm6+p1tnLkYFuM52Fx9za2tEsrWzdtoq1atREJYoft2nnQ64Tu\r\n        l+SBmrF+8nhbgyqxqtubtopQ6jVvtbXl/bvb4t5dbfHUmRQGBlxQM9YjWazbuMvWQqs27LKk9dgH1myz\r\n        pau32OKVm23hss02d9Eamz5gkE176Wc2+ckf27zunW3UxMWAxCCb8sSPbMKTD9nQzr1s6IQkGztnu03C\r\n        gDhh0QEbt2ivSwdDpu+wwbN20Ndxm6sMrVAZBAZvAgpICHOREOZhQwAQ1uynW9NZesEFleEMEsIVAQKt\r\n        3AQINwAE0U3fyoYgw+GtZlVAq74Y/E//9E9hkj+2P/qjP/Kt/tZKH0sJLYDwF368xG91fnZQILApqBYB\r\n        YKQ2KNRVTVTUoESrkXrnySNxVQzN1qMniW8I+nAUmSeRmMnbAgYBAGS4DC5SdWYOW9+PzqXW7VIPPHAq\r\n        En21WgoQFJSla98PCH/mgPAGgKDeEaoWrFRwr1IkpoiZVdvYQ+PXEkiIUZRg0yKZeHSfJIPmsnABUC7L\r\n        HRu5O2PXpz+LulpDwTMTvDjOvJJ2onwIB5nIE6PP3cXLvbnHxH8bjYla6MX36O7V4PXxz7xpiSSQ4GIN\r\n        HZJCtKpsQcpijF3M8ZiqBqcDlbueo16IPO9pxlNZhg2AgKQFqRL6W4wf90p0gNazCPABE//c96N+CYqS\r\n        jULQ3aagsn5Rfc8QVh3Cq5WurnL6qtB95MBR27p4oa0b0J3qSU97vMEGAGJLl1cteVQ/yz14mGI1NZ59\r\n        WkEimtLbC1TXEDuDsmePACp76dO5ddkSW9K7Cy7H9kgGbWxZL4Kf5i/AAL7OK0tv2bbHdrHa7wM8dmEc\r\n        Xzdloq0c8FawMQgMuH7SosW2mCpc8+csotDNUrqbJ9my5RtsZdJm7ATb2G615au22rKkLbZ01WZbvHyz\r\n        LQIQFrCdt2C1Te/bH0B4yiY9/iOb07WTDR6z0EZQSmDyT39o45AQBnbuY0MmrLDRs7fb+MXJNnbhARs5\r\n        d68NmbXd+k/fboNmbAcQtrpRsc39gDDHurlRcSnGh33ej6GoJhgVT0llUF9HJwABm4EDgm+RDuRBoNNS\r\n        bBsQ80pN+BN0fon9Q2mRNnLkGJs4YTIFR3rTpPSfmm0JiRKC7ASjRo9BBCTjkGabD6oW0tUHDhyMCKhm\r\n        nOq2dCWarGGyaZJIXPXuPcpL8NwEXEvKv5eo77X+4lUwrF6+wkYrmRp1yDbg4OKAEETzOIpQUoZEX4/S\r\n        JMItBgQBlSQgAcLrr7/pXXtLIkCQqB2vlrEkI2kmgEQLxdeTLu8isQOCOhmLyXRfMrQGhvfWYglMKwAQ\r\n        6XMZer3JSAwyun+dLzJEyhaha8iN6x2iOTbRPRz/9iL3poxEjYkAwcHTe20yNgIvH+fgupSqJ+DTuDhA\r\n        R/fjsSRR7EloeR5LNJw7aonmlbdi1UwSh+w0klp4Tw5AuibnE2hqzJrJQSGEz+sdu3QgrwPqgZg/VGpO\r\n        KBKrfolU9VLxEeUxKJ19J8bujVMn2ppe7fAcvGBraLm+nq0khuMrl5G5SHHfqOqxKhUps/QQQU176Mi8\r\n        aswwwKCzLSaBaFHX1rZyxCBLojL3qlUbbN26rYj+u2wndohkJAPVwty2fLklEb24olcHVymWAyLLqcGx\r\n        eMlKvFPQ/BVsVzggLF2GoTJpI14DvFerAQNoSRKxBEnbbfGK7bZwxQ5bxHbeTDyC3brZ9JeftgmP/cBm\r\n        dO5s/UfOt3EU3Jn0WACE/t0G20CKn4wEEMYuSLZRCw7Y8Dl7bSCehb5Tt9iAaduhLdaVgEQBwpuD55HT\r\n        IAlh6FzrNmKuA8KMJDokqXQa0WEVqAwnKYrijV5vv+egICCQdOBdnCQhaBLS+toBQeXMkRAECDICqtb+\r\n        3r0H6K1wFAMNvtgCqsdm5dL96NHIhhBsDaGhyhfslVdf8/Zn6qb0aYAwABGpihbjJXSyGTNmHBV6Hg+q\r\n        BVKEiqGqfVgBep5qCKoZhvRLTVoPOWaiqdbihImTTW3M1XZdRUh1fYFYMHp+g8o/j1GgtZUbPIupXhu3\r\n        7Qq9EoLaoM5TuqZsJS2A8Mf22uutfBVR9yWVe0+h2cgEgLBbt19/veEjRnozGSUNees0JXpFEoaYbMKE\r\n        SdQdmML9T7KxY8fbKAJQNm7c4owokBw/fuKnjoeyIuM+AnExWoGTVv3YU6TtrFlz7LXXXvcWdhoT0dNP\r\n        P0MJtAn8/gTXn+hjPhzrtiQ1qW9yBQsYNCYCWElrLqUogA2mVsNcNWZJHOevfe0vvfWduj6tQuSW3cTj\r\n        NQQuek8CboBEzzuRd6WtumPreTfggpY6qUjX03RbmjZtpjeaVeepanoveNq0mgUxfnWSPEQAayO5NCp+\r\n        UkdafjlGxgLUh+MAdzJu7K30C904fx4SA31AAAWFOK/v8ortGtHXjqxfgxEwxY5TyekgBU23LpyH4bCT\r\n        LenZERWhndsNkiZNsNV4GNau3uxBSNu37XV3ZTKl/A5Q6n3fnv22efZMW4FasZTYhcXUKlhD8NLSpbgq\r\n        8VIsW7kBEFhri5YAEEvX2pLlm2zpym2oCDtthRORhtCK1btsadJuaK8tXrXHFkyea7PatbYZLz9jEwGE\r\n        CT36WT8AYWy7LjbJJYSHrW/34TZg3CrsBdttzHxsBwDC4Fn7rP/U7dZn4hbrN3mT9QMYumJU7ED6c6dh\r\n        CwhSWqiaivMABFSGsUts5qpkb+OWX33RyimEIrfjVSSD6xEg3IrUhVsAguIPbhBwdI0oxVhCEGOpgKhc\r\n        cf/yL98lvjsVRkQ3o7tzJT0Q6uqaeJEzElQBVd/5gh//0EMPYyOgMQohpTEgtKgMX7Hevfs6o8oQKSYW\r\n        AycaKKV6CIR0PXUX1koh45zEW0kK/foN9Ovoei0lyb7sngJN1JZrfsMrKevv4SNG+3nk1XDd20Hh0qcC\r\n        wquvtfIeiqF5TBP32+9Tr6duzp95Pao9qyu1gEESilZWrc5SnxKfVQw7ZOgwZxoxcXy/D46HmFHFOdW9\r\n        SM8gkAmt14PbuIn2e48++piPQeiKpQawoUak3qMAXmMaPEeyD/25N4mVCiiJT+eUMdKlgwgMVqxIau5K\r\n        HapZhXOpAnbsbdLz61zP0sk7j1Z8MqbKDqEcGd1f4oIQS5JDhw5HIjjrgKQx/JM/+RP7w//xP+wP/uAP\r\n        aGxST14AkYBIArWSGhwIsFNQ8r9BbQN8i80CAKpS1S3cjVl0Qzp8PN12U3B2Kwa/DTMm2UqMjitRI1ZL\r\n        rCfWYE331raWxi7LYejlPVnh3wIIMB5K918xebKtJhBpAWL76j6d8U7sx6twlAUwBTqOtyDFkjdtsvUj\r\n        B9jKrm8Q5gzgTBhtS0hLXklbvlUYHlevRTVAGljuJCDYYUkrNtpKWgOunDTZlo8YasuGDLalg+nWxNxf\r\n        NH66LZo83+YNGm6zX3kOD8OjNvnZR2x4vxE2CEAYj2F78uM/tvFPPmp9e41xQBg5a6eNXnDQRsw/SJem\r\n        fdZnynbrOXETDV43Wf9pW60rRsVODggUSRIgdB02z7qOmme9xyy16eQypJPLkI9hsUxJLpRgl1FRgHAz\r\n        lhDkagQQBA43sCEIEBKNippcshf85CcPkYdPpyLaUdUDBCconnKKztBCer1kTWpNQIncmmA/+tGPvTdh\r\n        XX2TGxRj96U3dIGJNYGCgfILzZNVoBA8FgGI9L0aqMoqXAlTenuxSH1QPwAZOnVMDAxhskpKeNAD0gJs\r\n        gwcPD7EP3ggmJHI9KCH80R/9Mf0FXveGrSpNrnLsb73Vy5/r33Y96kNgsFNTXInuMSC40ZbxDUVm/yJ6\r\n        ji/+K+PxeW9Np7LtMrQJ0CSOSyqQJCaJyNU8wED3KVVPjKb71rvRu4zdxTFjxu9MUoJatgWQue52iLlz\r\n        5/u7iCU/HSsS2Ohcwajc4lJWkRRJDPLKyFuh1V8g2PK837A/5/70+3btO/gc+ZM/+V9ul4rB4L/9t/9m\r\n        Oej5xRSfrSDtvEYuYyS6JqTCJtQ8J0BL2wbutZHv1N2pkLLme6eOts3o83vorrwVvX/j0qW2eiDMjqSw\r\n        Em/ECtyCK2Dm5ej+ywECif1J40fbqnnzbd0qsh/nz7XlRCWuIutx7/IlZG9Sy9CrRVG+DHvDjllTbDVG\r\n        xOV4E5ZzzDKkqpU9ABUCl9ageqwBENZu2Gmr1kFIGSsAgPltiEJs+7IteON5W/D6szb/1WeocfCUzYfm\r\n        vfwUockEJL3wpE1//gmb+PSjNqlTR+s7bKYNHTPfJr3xOl6Hh2zsc89Y74EzbPDkdQDCbgDhsA2PAKH3\r\n        5K3WY8JmB4X+SAidRy63DlRMSpAQ5lv3UQusNxLCDIwP6UWnaSF93spUz9DdjgDCHQDhjlQGtYV/2+5E\r\n        gCCjomwIiW7HeFV/4oknWCnV0PMUYnuY3GoDv3jx0jAJYUafhExAveTHHvspARvUP0QE1jni8wQV5E8J\r\n        TvqfTlJHBAphgoXjEgFBzKlGsCVU65FxKG4rpxUtAMLnnZH++q//2ouPSn3453/+54RVKXhABBSKMRDQ\r\n        qCqQJAXpzOqL+GkqQwsgUCkI/VOdoRKvpy7N8fX+6Te5HsymzNELJIzFEliL0TaMmwK2wngE5n1wPPSc\r\n        GltVMaql+IhiPsS8V3ln3bu/lfCceEoY2//BiitGk01E70ZjoLGNx1jXEIPrvD169HbVSPeoc64i+87B\r\n        OQJ7VwU5VpJfXwxggwYNJv7ku/e921CO/osuTTU0nESSo38Ec+TTJE49r4zUf/iHf4hU8N/t93//9+33\r\n        fu+/2X/9r//VUtV9Gk9AmfpVKLpTxk4A4SSkrSojaXtCHg62KhCcnrSYmAQkAHIc9lHOfA+5DKoivZmG\r\n        J2tnTLWkXkgF6PxL8UgsQ1pYSW5C0vRpAMFa7AR4ETAu7tm02dYBGElIFWu6vmrbCJPeOX+27cCbsZHY\r\n        gjWcW5GNy5E8VgMiSxcuR1p405YAIksIYFo+qI+tnDgBkBlH9GFrwOBlm9/qeZv32rM2t9XLNuuNF20O\r\n        asEspIAZTz1iM9lOJyx56nM/tYnPPm7j6RDeZ/AU6zditg0fNccmvfaiTSIGYcxLL1ovPIeDpm6wUfP2\r\n        2ihcjsPnH7ZBM/dbryk7rMf4jdZzwhbrOw0vw4jl1pZIxfYUWpWU8LmutHDqNmqR9cLLMGXJdkstbHLD\r\n        YinJTQ30dbyEy1E2BEkIt+68TSDSO3YH8hgE7AgtgPDt+wKTnn76aSSDRnzi8gpcAvmlf1+yp5562hFf\r\n        E04MHnsi1GNQHZnVbzExUlFMqeP+8A//hwODgENRi6+js4tBwmT92n36vNsTqFYkH7KiBhXj34dJKcYf\r\n        MXI0Bp+D6OwV3r69HAlGtomUlHR03pfsG7hPEwFB1xw7doJbqhXuqvZfMSBoJQxuR2wIUhkom6ZYBJVi\r\n        V8enf/onrofakUyHomKadup6ZbSIV9fhf/V66O7yqMiAKq9LDJAtkZuBebWSy5bSuUs3elR+cjxiQBhF\r\n        30p1lT5NvQqtwFLhHHAjm49AQ4z2+7//B3Tffsnb18kGUlBUSlfreT4eGmNXGZBOYkBQ1SmNh1yxP/zR\r\n        j3xhaDEWf8WGDhuBSlCC244kIaQ/PbdsFX6uSE0RuKvxTlV1vUuRsg88GJgmyUXPK/Xg95AI/ut//T37\r\n        XYDgd3/3d+2//Jffpex4nkcClqtdn8K1pSZGIfFyIyv2I8RqBNdlI3PiyLTR3sVpDVmQOwlF342+v3/f\r\n        Ye8mtZvI2s3Ll9paUpxXjxtuayiGsm4xAILdZhfHHWb1T6N1mrqF71k4B0CgvHvbZ5EqcGl2RtUAJKRy\r\n        KOchiQpKy+fOtSUYHZdgMFw5DxtC5zdg+qdsDvkIc9583ua0fgHmf9ZmvfmiTWv1qk1s9ZqNfKufDes7\r\n        ygYPmmiDhky2IQMn2KjeQ2xMt542ivqVQ/sMsd6DJlifYVNt0Nh5NnLEDJssmwJxCKNffM56j1xInMEW\r\n        GzUfg+JiSQgAwtz9tH7fQYc2WsCP30LH5x3WesgKe2XgCnt5MDRoZQCErgKECUvxVW61lGKywCoopqm+\r\n        CBRVvXhDLkcA4dZ7SAfv2e07AMJdAYIMjCQ3XQ8SgnTZlkjFr7tRSoBw8iQrHS950aKl9uTPnnJ1wpko\r\n        YvL//t//0P4HyL923SYMhkgI/OZBP79AQ81XV6xYS1vsQ+jqme6mHEL7+HiyxiqDmFMxAfIbCxDkApT4\r\n        LZem6j3Wor4onkFAIOasoOV2NZNRqkpqakaCqhJsIR4lCcOV0VJcBWRP4vZMBAQdI8Bq1aq1d9ZRSTe1\r\n        nveeFRyv/Uo6+aqFfBnXbL4ez5n2GdfrwvV0nMT600hXnzYe6pGYhNgqS3aKj0cp4zHsvvGIAUGNX8vo\r\n        DiwdXJKaDLSxBCbpQhKBmO3pp5+zzRT50BgLEAQcFZU1CYAQjMABEHrB4DAx4zFr9lwvi5YICN+jAW5u\r\n        bhGW/WKCfMqQ2AL4Kkcl7mwdqx9aHNbz/uswYKoB64Oh4X/EO9XC8OOfPEyF676kH++ybTuTCZc/6BWY\r\n        FB+gzlYCPdlf5AmRNyWuWyE3q5O7LHF5Ugb+0NSRMO1rrhJsWLTAdhGLsGUqNRFIckpeuYTqSnswiu8n\r\n        H2EPKc/sJ+/H06AIRooC0225hPdTTKKUgH3XnKneY3G5GsEo2KiDgKCVrejbzRZOJax4CQZDXIjLNyTb\r\n        4nV4CWYvtLld22EUJO/g5cdt2stP2NQXUAGe/amNfeFpG9Clt/UYMs16YNvrNRrpffRC6ykaNd96jZhl\r\n        PYdPt17Dp1rv4dOs3+jZNnjCQhvdD5vSy8/aeNSIQW07W49RSzzOYMT8QwDCMUKVj9jQBYes17Q9dHre\r\n        ab2hXtN22muDV9lLA5LsJcDg5UFJARC6j+BCYxfbxAVICORiZwkQaJJSdw7fLyHLzYCA6nAb1cEBAdVB\r\n        UYoxIKgktwAhXrG1mmkFFaPGUYtaDeIYhf/+34PYJ5JYmYonQjaEehhTom9QA4JbT6vDc8+94K3ClUSk\r\n        YqFadbaB7J8FCOrnqFh1TVjvdgQjCJiaWIXEpFqtKjB0Llm6whOUpkyZZqNHj73PJhEDgqSXImoH1tGX\r\n        8QQT9i8jNUXPp4mqFVahy2q2GialApNUR1CZg9H1AB1db6lfj0izqVOxoEfXSzDGCoDEwPI61CNGn8QN\r\n        +6CbM4zHiySBEXOPtTyMRznjc/94xIDQEUu8ztcg9Q2JQ30tdU4Z+vROBAifZ7uR6DvF8asDczb1/8uZ\r\n        9LV4fsL7kIQQSp/pmd96S81y6/z5Wrdu02xHCvahP7devfvgVVIcf6GDt0ChCAmwgMjAL0agoncrCUxz\r\n        YvDgoXgLKIqL6zlWUYIEFt6/bCFr122xDVQY3gIgKMRYz36MmgdqdSbACW3r9L5VAEUxDYBAFLzmgWlE\r\n        mapehySR40nYCwhOWsaqvpiEpGVd3rCVb6FC4HrcNKibHdm6GTdyFglGFJKFsvJo9QcQVDBvangvtYB1\r\n        JQCWz3XVpHgzHcHWEouwav4iW7FopS2mU/jC+SttztKNNmc5rsONybZyyxFbsukw7v1dNnH2Ehs9bJSN\r\n        7U/OQY8eRBZ2sUFIvn17DiBQEDAYv9j6TlllA6avs0GzNtpACiAP5O/+E5cRVbzABqAiDBwzBzBYYMOn\r\n        LAMQhtqEl562cagMfTv39T6tAzEojlhCIZSlx2z0khQbsfAIn+3H7Zhs/abvsb7Tk+2NIWtcMnhpYFIE\r\n        CN4GeoH1QMQYO2s9KgPts1EZCqmYJEA4d02hy7IfICHced8B4e69d+z2XWU3EspMYFJsQ4hDkuPuPpps\r\n        sdFQE10Tr1n0+73fc9FPhiW95MzsPPcyNOJlSAQE6eH6zfPPv+iTQCW+tfKoVbvsDfcDQlitFUacy8pU\r\n        jdgtEVRisvRcxS+sW7eBqr+t7W/+5m8/YVF/0EgZM5Ran6uQaA1AIkBJBIQY5Bw0iiocNM5gZ9C1zl+4\r\n        zPU2/ivXC/kdsQ0kBiC50sTgtYDjCVqeJwJCy3hQIIPxOEporI8HYCN1K3E8wv3/ibv5CljtJR2dQm1I\r\n        tNFoldYxMgLv3LmPeP0U3oX6ZNDtigkvT0QM8rEhWOeVO1XH1PO+vv/9H9znBYltA5IEdb9i+NjAGuZD\r\n        iwFT70vX74YLUZ6oBuoUfNr7FyBs3gJg7UpmUTjMPKAxLLYdvecS1DH1umxkrM6cJTZCY6/37TEVUQyD\r\n        4hm0f5V2hOdI4MuhyQml01ag4y+Vd4GyaGuorrQKqWHjwG52lBby+YXYg5CQymsoRsvY1ZAlWQ/g1GEc\r\n        r2NbhdG6gJ6dKRRA2X0g1dZvp0LRBtyDq3fYgiRo5Xabj5twGZmIK7amUr2IqkbQvPWHbPKyHeQTrCYW\r\n        YCmr9QJE+HnWfcxc64pE0I0QgJ40TepL4FD/Obts4Nw9NpDtgJnED0xdYwMmLbMB4xfZICSDQZOXYjwE\r\n        ECi1PxGD4qinf2pd+k227vRpHTiPMOWlR21UUrqNXJpGicR0XI+HrP/MfdZv2n7Ot89eG7rBpYOXkA5c\r\n        QlAuQ5ehc6zr8PlUXV5jx0jBzCzHsIiEUHOaCLGr1EK4CSCgLty684Hdvvc+gPCe3cGeoEzHGxEgxOJi\r\n        CF3+govasY1A+r9UA4mlsgoLCP4L+p8mVhKt248dS/NVRAwu9P56goQQM8AL6LaK/JKBT6tdHQYtidSJ\r\n        kyeI739ibdq0Q5fX+Zp8tZClXkarF154wVfFIPYKrGRg/IKrMcGVeb+RMgaE9h06uUhezf0lXjPo1MFT\r\n        0hUDjxhEK6bE8jpUgud/o+sFQ1zsrpW00YHrFbKSioE/CxDUhFZt4tXaq4jxkIFPDXNaxgOvSzQebel9\r\n        IMaRnu6A1myMVWRp8M4IRA/Talz9J0ocDE46eIjBQjJXWPnD836e5+3u1xVIxp4IHSePjSRCjatAIDZ+\r\n        /k83HgfSvhYHqXcivTONXznMV/8ZgPAsEqIarOzDrXeMDMZsKjwXUfVZLscaxqlRXiyA+OwlgQGBUDD+\r\n        RTxgl66xvQ4YaEvMzKXrhKdfJLmqocHSjtEKbTql0KiPuByvwkrcjUkAw2Yanxw9eMQKSlFDmDd1qJu1\r\n        xFzUQTXETMi1WY5qUkRhlhyKmhyn69feVGoVJKfa8i37bQEgMHPFXpu5fI9NW5FsU1cdtJmULZtCCvKk\r\n        NcdtHNWKhlG/tN+srfbWpPXWacwaazdqlb05PMneGL7aWo3eYG3GbbP2k/daBxi349T91mnqHus6aat1\r\n        m7CGbkvLrOdY1PwxwfbXZ8hMm/Azkpp+8G0b+sRP7bU+BBmNWGddp+y1HrOPWp95qdYX6jkvxTrNSLG2\r\n        k45YmwlHrNXkw/ZE/832WJ+N9kjvjfZwr00RIAAK3dBPhk2jtyOAkEE5pzz1ZVD4siomYUe44dLBB3YH\r\n        QLj3NoCA2nA7AoRPWsH/1I2FsVogEPg9lwiCIUjfPf/8y7aFhI59oL10bzFTA7qdjJCfXBH/yF586RVv\r\n        bSbbgLIepQ/LSNbiZQiJRppwYgAHGFY4Wa0VXPODH/wwEpNbJrXARr8RQMgL8Nxzz93ntWgGBFZYBwRE\r\n        2ibsAjFgJTKIVrjySE+vYUX5wQ9+8G++ngDBV3SYzQEySgeX5BUAkvEg6EclzKUaqQpQYIjzzdJLULda\r\n        JCaF38oOIoaLPQexAVDP3wWGzEIyUAn1Oln8JeUgXgcvRzAWJuapyLCbx5hUoDbExt3YLhEDQvAOyRsC\r\n        80deohgQ4s8EDPpMQUYSxyVxOKhFnp74eZ9jQdhDSvIxdHgVNS3hmWtwV9YqmIt5cAqD9RkHA3o/XCGe\r\n        4QpSIaAgQBAINNMNwOGqPA7nqFZEm/TDh237ovm2fuIoW0ucwPp5s23n1h129Dh2GbxFlWoYQwxDDeXk\r\n        qkiRryAZq5ACLbkUd8ksbbJjuY22P7PGdpCmvGZ3ti3bcsxmrT5AVaJkxPQ9NhLP3RDyCAahvw9Cnx84\r\n        77D1n3fAes3ca12m7rL2E3c487cas9VeH73N3hiz3V4fu8veGLfXWk3Yb29OFCXDwDut/biN1plejN2w\r\n        D3QftRCiJ+OoZfZWH4LWHvu+TfjBd6zdK93tmZ6LMRJustbjDwAqx6zD9FTrOCPV2k1NBQxSrfWkFHtz\r\n        0nF7Y+Jxe7TvFnsEIHi49ya2G5X+HCSEbiPm2JAZdH/Ow9hFK7ccVbM9BZqqfJoA4TaAcPd9u/P2BwAC\r\n        wHD33fsBwVeHkK6sF6zts88+53EBTz75lNPLMLVCmeW2Uby3ylZ5MI/EYya/wOCsW5lDPYSvIG38qeuQ\r\n        f2Qvv/yqvyT1OlDGo1avs1R+TmSWREDIyy/2FVZW+gEDBjb7v1skhM97P8JZWNHl3ZC4Kn1Zq9yDK7Zq\r\n        HajfgEqNf7qEIBFagBAMgf37D/jM68lqX0y0pVyydXXheokBXbGEUACzxRKTVJTY8xEziDoo+6RFlZFL\r\n        URWvzzwwHnFYtQye6S5ZVeG9aHggSOhr7rLs0KFj0MP1HqRmoW97OPeV683GQreZRNKfxiQLkCnBsBYH\r\n        dyXaGl586SWPVpw0eSo0zbtqTSW6cNqMWWxn2MQpU4m8VPTlFJs8dYZt27WX0uoYgVFRXCV74P2/8OIr\r\n        VAxKo6sxTXPw4tQSV3GCd3uaMPMzkIKaLlxWERuIe5aEcBkwuAwYXAYEriEliK5Cl/nuHEWCJc2Vcf8Z\r\n        WTnEEBzHmHrAdlNL8QAdvdIo/loIw5fCB2Wozwrnz0OVTqca8nHqGx7MrrXdaZW2I6Xc1h+mozKVjVfQ\r\n        BGURRUxnrz1iE1cSDLRovw2Zv8/6LthvvecdtF7EAvSYdcCp+7R91mFSsrWDWk+A+ccn2+vj0OnH77PX\r\n        x++31ycehGEPWCvoTb5vO57aBWPWWhcAoBvqfTfU/K4j6cdIpGGvzoNs/E/+0YY/9EN7oc0Ee6rXMnt5\r\n        yHZrPe4wgJCClJFm7aenWTu2rSamct4UB4M3JggQtrpkENPnOg+eHVQGkpwGkkJ5NK/J0inFnqMyakgI\r\n        55AQrsnL4IAAEAgQ3pGkEADh+g3VLwgTViumGohKDPwWXodNm2mySRTYVizXOyhJtcstwwcAAkI7Dx33\r\n        VFOthFW1rPi8nLOIp+cQ8UM9BbkSv+Jip2wIAgTFlCvzTNF8MhCeY0IkHhu7Mlu3bkfVmaLgykLXU/2F\r\n        RL1ZK5gMmdm5BS5JyB3onobIwxGLvXGchHRwNSGprpbX4pSvsOH+gnqke5RnQF4SSSMP+tv9eg8/zGpe\r\n        QCQjHaTLELWRImRADatqELO1osc6f5BI0IsBGDFHOKZlPF4CXI8BpjJ21iLei4kFkPF4xMcqLkMu0dQ0\r\n        XKKcU8D308cfd/DWyh4/i7w4wYZDsBGrrWwuVxC5LzcDQshkjUFXY6wOTTrno7iCAyjofAFgnnnmWU/2\r\n        ys7Jp/BHkatwRRjligDDguJSqhAVWVYOjUuRSnIJa5fFvobxECDEz5v4/iUhHiGyUJGN5W4vICwdIIiT\r\n        oTy7UjkpoggMrgAICq0PYKDgKUVUqjIXx2BXksdBFbTKqXmQh/0njYIoKXT4zqTeYw59EArV8BgQyCVY\r\n        73jhadufU287j1fbhkOllDTPt0U0TZ1LvcKZ1CqcvjbNpqxOtQmrj9jYFSQSUZVoEDkEAxYQHTh3n/We\r\n        fcB6zkEyEM0EFGbst67Tkq39FEBhcjIr9z5W7QMw6mGYFpp8xN6ccsxaI9a3RULoMH6bdR671rpR6jBI\r\n        B4CC9sk/GMLiMPEHf20DiDp9psNke7oPXoNhu+2NsUeQCtIBhAxrL1CA3gQM3kRCaAW9Dj3ad/OnAMKQ\r\n        2daVQIYhk1YHCYHw5WyiFUupiXABQLh88303Kt6594HdffdDuxtJCLIhKA5Bk0ATLEzCsKLL67CVZJDd\r\n        GIH20dXmMC6bY/S018TMpPhENoMvI1ylXi6TQIa4kJ9/0c8VR7vJFiEf+UsvvezutSIMSGIASQinAZD7\r\n        j5Wq8sfkI+ACJBJNBVjUabh5skaFW8TICoWWS0yrtVx8yqOQ67HF367CLMraVPETdHB5LViZZGiLPSgt\r\n        wVX/yw13Ahe5NOPr/aUDR8jW1PXykVqUixGkEaIHP+V6EqWbdX7cegKY+Hqy8Msnr/F4kfEQIBQyHtKh\r\n        fTzwaiiyL/YGaOxiMFX0XI4McDBe23btm+tU6Nzh/H9ugwYPcc+GwPYi6oLA4PjxtGYJIVZD4mQutWDL\r\n        REqQ10Jjoeu2nO+rblAVCAhw9cxSuaoZ50rAsCxy2+l9DiBuRLEhtagzDQCgpLgH3/8LxIgcQyIqkHHX\r\n        vQkAoLIs3VioxDQlggUwuCIS40cA4GDAd9eQeK4pzFqJbsqgxA15iuS3BtzS6ghVWE4/BLxs2VQ+zlTD\r\n        IqogHy9osv1Z9bb9eKVt2F9qy3YW0vkoEwkg1YZRdGQg4n/v6fvtLVb87lNRA9DbO8LkHfms7dQD1nra\r\n        YWs346i1n3XcOs3OsE7zCq3z/LJAC8vsLaj7glLr5lQJVVnX+VXWhf3O82naO6/IuvC77tMBEWwIPSes\r\n        xW6QRJjAGvY3Wd/+023sE4/YhB/+nfV69nV7sfcye2lksr05NcvazSmzTvOrrRPn7LiwyrdvTs2z1yZn\r\n        22tTcqEcbAefAgiSErqT5DRg4nI7mFfvgJCrrjJEK54hwenqrfftFraD2/c+ckB4+12pDO94PsOVq9ea\r\n        XYtaLT3GnAkrv/QekpuOkCCi5CbpugXyRyO2Kq20khgBMbZiA6SvnlM5NfVzwHATuynj8mSyRciomCqV\r\n        AfFeqoD81aLEY0MA0x+SKPW6V8GRpb4CppLRMJ6soXjLV+yVV14lmEUNWAlgQtTXir2NEm+xhyTWv2Xv\r\n        kMitfohqXSbfe+I1PYIOiUj9CrUiyrUWh0THjBxfLwACICgAgjlUUu4zr4dxT3ELklw+bTwUQBQYhEat\r\n        7v1Qd6lPjkcYu5e9UEcWhT8KaHU3e86CyJgaCtgE17Ba2X/FfvjDH3oSk1ywCtRKjC8IK/afuQ3o5Vde\r\n        xyNBoxVcnlIHJE3FYco6TiQ39JIlyxIAkMhRGekAuSqef/78xe6h0BjOX7DQY1AaGk/c/7y80/j9H3eV\r\n        MaiXCogSQyv3QSqCwCAAgaSCmCJQUOJVBAZqI3DZK3krevG612aoJQivou4ixYXPWTagcLzwFHzQZHsy\r\n        eEcpNbbxYJkt21VIT8Qcm7omg34GqTZo3lHryarfffo+6woQyOjXaZJoL2rAPmsz6SCr+yF7c9pRaz39\r\n        uLWdlWFtZ+dZh/nF1nEBTLqo2jovqrG3FlXZW4urrMfi6kDRZ90XlgMMpdZ1Tq51n3nM3pq6m/iBTdZr\r\n        /GqnnhM3WM9x62xomy428aF/spEP/cDeaD/enh202V5BMmg9s4BrAQILa7kWxLY99NqUgggMcu1VQOHh\r\n        Xp8BCPI29Bu/wg5T+z2lFAmBwSmmdfsZ2rhdvfmB3URduP32R6gLAAJ0FxuCchkuYciJE5S0ImmyyJsg\r\n        Q9QB8svTM5UBiPEJN6Es0nWs2KoMrAkso6BAIFQyQhdEVG3CdSQgiMV1rXCKVXgeK/NRVrlCVAa1C5No\r\n        q8zGTxzLtcUAR5FGtKoXAUB///dq1f4Fn7CicL9fQJJ402YTVDNv/kJfNSUdBOu4oij/xCUdeUcUluy+\r\n        fiajQCF2p2kiK6hKx7zyymuspqzC+N3/7u/+7oHrKdw3vt48mzdP1+vwa69XDKApNqPZVafrReOhuAy5\r\n        YAsQoRVvUU+oczwesrv4vfmxf+AxC2rPrtb1+ZyzEMnsO9/5O3+OkOx1f8JXnAUqdebBhClJTTqvjJr7\r\n        KDUmUMrIyPWMU73/ON9E4xwnN0ll69y5C5LAIOtPUJSiVb8JWMRgqjmj4KbKavo7AoC6rwffv573uEdP\r\n        Bu/LKdTF89g5LqnUP6pNLBEEqUA1IkjbhvRdaAcQUq/V50MFYppIeqqhsngZ3rSCiguWxZw/nH/akjNP\r\n        2NaUalsPCCzfVWyLt+XbjA15NEZNxUCYYkPmHrK+sw9ZT8KAZQfoImkAO0AnqCNg0AFqg4gvY6BsABL7\r\n        30R/bz073drMyrZ2MGnHhQKEOusC9Vhc0wIGDgqAw6IK67GgxN6al2fdZqUifSQDBkQWSjoQILDtOWGD\r\n        Deg72cY99ZhN+NE/WM/nWmNMXGHPD92J/SEdAIqBp86vJeoIvT4t11536SDQZwKCaiv2GbMcEamWDtCn\r\n        PXy5mLzyM/RiuHb7Q7tx9yNUBiSEdz6ydwQIRCyqxLrCkd1izCqZGGOgySTpIDevkFVaWYynKFaKJMDx\r\n        0lHP4aNXOqs3P0H/O4tRSGKv3IlxcZUQTquY9d/zwBQljsioqEkjMVlJO59+7At2kFblGeinyoGXX18M\r\n        rgmoSRtcYbrnmOT6CrkSD55PHhJJJ/L3qyKSjIv3HxNcqWK6g9hFUrGCi9lj//onrxe72n7N9RzQuB5q\r\n        yKc949OMx2G8DLk0WS2jL6IqA0nq+vTxeN5bt2dy/0rPFqitTFob2WhCwlechNWSjBTcsInJSF7rIpIA\r\n        n38uuIFlFJbBcjcxEV//+jddZQvP/r+ag47i88dVtFryEuSO/u/2B9BkAsOKqYJcjKvvvmdQuLLePx6g\r\n        o2m8/xIAASlCrQTP40m4DABcBgBEVyISIOjviyr7ryrf9BFRavUZSQTUtlCZtkrKwudVnLM0PGqHcxpt\r\n        e2qdrT2EJLC3xOZvz7Npq7NxD6aRNnzcBuIdcBDAh99j+iHrPP0gEoGIfdSCTlPkFoSmHLB27EsyaD3p\r\n        EHYAJITp2AFmAQizslxK6IiKEANC508AQgCDnqgPPeYV4DJMBwz2W4/J25AI1jdLB70mrCc0eamNaNXO\r\n        Jj5MePxjD9lr7cbbU/032Isj91mrKVIXSrlOTTMYxKDw+tQWMBAgPJpgUHS3o9QFUVcMi33xbR6hFvxx\r\n        6sRnUDmpEFHqzGVKsN/6CED4GLUBQEBKECDcESAQg6A232Lc2MUYuxdlcT5OWKdEaA9JRS+9IMu1l9WK\r\n        t6ECs3L0Pc8dXU4Wc58kCTELclU+TafgYxS3UMRbOXp6FSnOZbi8Pu3Yp2CWQ7go0xG75abMRlLQ/eg+\r\n        w72G+41/q2spYUYrl/YFQnG8hFylStNVIIzasWdTbFPHxven5/3d3/2vJgbdj6Vaer2kia99LeF60fg8\r\n        eD15YO67XuSa1fWO6nq4Y7OQOBKv53H8jMdTTz1D3ABuWIx6AgSBYylZlp8cj3BvR8nEVF1AFRatwjiq\r\n        KMM11ASU9BSvyJK2BAgS92X7+NvvfMcWLlzU7HIMBWX/2O/52WdfIN0XwzCqmbwNGYy1Apv++q//xu8h\r\n        jPX/8EVCklYLtcSkONgDphrrMeRv5BUQ6oyBUQDh4xstBnreZ/BYpWZmUbKcGg8nTnosgeIMHATU88OL\r\n        x9A3JKKLl+4gQdzBznAH4+NNVw8a6Wau+o2l9H2URHCUvJ3d9DzYeLTSliWX2uzNuTYmKdOGE+o7YO5h\r\n        Vwc6y6CH+N9xsuIB2E49bJ2mHbPOM9Kt88xMRPo86z4PW8ACaFElDB2t8qz03Vnxuy1uWaFddI9W6we3\r\n        nV2sr7HOC8qtC3aGbrPSuT5eCZKRpB60qAoAw5hVNqRTX5ugVOeHvmtvvdLFnuq9yl4YshVX42HrOAs1\r\n        A3WjB+pIsyoSqSSxZBBvH/lMlQFAULz0kdwGS8WqmgF6FlAy+5QCk25/bDfu/RyV4WO8DB+jMnyMyvAe\r\n        BVcDICQyUJxwIut1Rka2G/YakQ68Ug9lsVSBR8U01AFKYpwqGXmVH1QGZRPWAAgPxi38l//yX5AQnicy\r\n        DbFdOjiTX63Dy/FFJx6rRBcdKwY4AgMo5z2P+gRaRXcR1KIkmvj4AFyBQqRcD4+J8M9g8Pg5dE5dW+pK\r\n        pgCBVTZk2YW4iviaT5EHcPBgquvUaZTe3rFjrxtWP+16CsxR0di9FNJ4MFGn+XpICAKEz7qe8g6Owoz5\r\n        SEzqnKySX6rn6PcWAUt8b88+97ylU0RUgTwhgIkSY6hc8mIov2ASufdt27bzVOTHsFQrknMixVhqsavk\r\n        5hVEwVyhNJ4Y/L/9t993iU25/wqMkhSWh+SkoCYtAm3atHXbg549EADrIBuAtjkmhfH7m7/9jrXh2qmE\r\n        CWfl4pEAFPR9YtyK3umzSAgZRBeWV1VhhD6JdyH2hESdtKj/eeUKMTM0JxYYnBNdBAzOMUcJsGsgnb+G\r\n        ugslqMI5LHiHMRbuxVi46WiFLU0us8kb82zMikwbtCQNb8BB64Y6IDVArkGnyQcAgyMYCwEDVu7OswCD\r\n        menWC2DoPTOD6L9MwoLTbcC8HNyMxdZnYan1BBS6uK0gERQ+bV9gwHELKgCDIus6OxMwQBqZshMw2OgG\r\n        xF5EHvaasA7aiKowkZyFx912MOyJJ+3FrrPs6QFEHI7AfjElzbrMLbLuC1E7fgNASHQ5RhICcQiKRUBl\r\n        6D1yAf7VRkstowN0xRkkBEpbEYdwFTC4+bYA4edICBEgEJwk0UwVhOSuKygo9ESPQ1RIOnzomKVI5MXd\r\n        pNh+uf4uAgjeiEUlwSg2elkFXFXPMGr1prhzWcnVRKMUO0Ea3oiD5JfvJdFmH9VnJB5rtRTAyKgkfVl9\r\n        EFSQ5BjeBx2zB7F1r/zIhN+mMVFVMaiECjlyzeXi1TiO22rSpGmexPPUk08TI/EUWZAD8ITwO10HQNiL\r\n        W1Tx/Fu37qZyLq5SCl9IFUiDocScqneQiYFR+rsSixQ+LFfqAYJm5EbNzCx0D0oGFZp0zMSJ00xg8STX\r\n        E/XpMwBw2u8i9l769O3W9ajQq+t5jD7fHeC5UwCWLFQGXS/Dr5dGlZ9D/r2MteobkIqoXkg3Y4XtVqMy\r\n        SFJQ7f9juGfV2GaXXLw8l34rSakaAFXqbyh9r7qIqj1IKzUYv6KiGnCg0rCyP5HA9FkNWaCqphQCjUIx\r\n        WUkrYtZ+/Qa5GqJ7VHyDohuL8GBk5Ra6XUH3t4b+Bf0HDHbwSCRlqvaj0MmefYo8PGJHUsgexNaUg3qp\r\n        ylo5gFBKWoYdOELVoYO8zyOH6VOQYnmFhTxrrd+3MmgvEZGoUm1XmE8XSdW/iDR74dI9VNG7SAS37eTZ\r\n        W4Qa37BKDIZldI0qJJgoo7DR9mXV2Xpch0n7y9xGMHldto1ZmWEDFx23XnOPIKYfQDLYZ+2JDWg/gXiB\r\n        KYesw9SjAMIx60KQT89JhBMPWWLDu42wMa0w6rXtalNad7KZb7a3WR2729SuA2zygKk2mhTjnrNyYHRW\r\n        /s8EhUQwKEbiyLbuM7iH2IjYbDdY5+DQZ/hiG429atLD/2JjHv6RdWjV357qt9ZtB6+OP2adIunApZXY\r\n        UJmwfVBC+FQbggBB1ZcV7HCYyKu0krNeSq2AoIzTauV270O7/s7P7ZYkhHsBEO7hdVDVnUs0fVUwTjkT\r\n        Ih90V5m0LKoW5avuPZ81ou+doRqO8gmuqXQXZdyvAQzXEO2uIS1c44UKWFQ6S27HJspqV+Hek98/HQlD\r\n        WXep5PMrgUWZhB6zjgFNhsla8gZK8RBkitlZLY+wih9LIajE/eMyyMlI1UjDzkafsLkwdCoivRg8maAo\r\n        lXhLTj7izKwKN0cwvCka8iCisPRj1ecXUyvDLQ8pQwbNQpp25KvJBqu3GE9MoeKbKtEt0CnCii/S9XWM\r\n        DI1ijt0wv5h5r4pvAiQHWF0FcsodkOgtMFKFXiUWpaRnE5qrLMEK1/kVfKSQ7aO4+XQtqQopPKOkn0pA\r\n        QN2MZFRUKTHVdJQrMIV7073L9uFZmEgHNc15Fpc5JteGDRvOO1LpNhkkmzhPPWArkk1CTUzyPYYjjj2Q\r\n        GqAVXirS6tUbeDaMfBg1FSlZg+RRxcIgz4hiE9IwNB7nXRw4fAwgOwJQA7aQQG0vtG//YSItjwIGqHbc\r\n        iwLJVA+jrLzS7Qi5+QWofNnYZBj/DOVr5AFWqAsNBE5hazrPQiT188olgcFtOwcgnL34Nu0H75JrcMsq\r\n        m65aPkAgO0EqPRL3ZVbbzmOVtnZfsS3ARjB9U7ZNXJ1jI5elEStwxLrPPWbdCfPthATQcQqqAWpCh8kQ\r\n        KkLHmSmoBykYEY/YMIKDprTvbtOoSjQNV9+M737DZn3/2zbre9+0qX//VZv811+xSd/4sk3/p2/azCef\r\n        tEldh5CXcBiLfwVuvwd1+lpcj5IMpCbEYHAUMFBG4ub7jYiSFAhxHta+h0386Q9s3CM/sG4vd7Xneiyy\r\n        ZwZutpdHH8SlmO3SwVsLpbp8Ul0QQHwSEFqCku4LXVZtxbdIt0wtpNtt6VlSoAnRpOnrWVSGq4Qt3wQE\r\n        pDLIhhAA4UOClYJhUZllCunVqqLVpVKJR+yH4igX8PkiHcDw1wEBJxUMpWWbA4SDhCoKY1vgPIosPEHq\r\n        cDXuPaUnK4++lBVeYbeqEeDlzBShph4Bii+nIEa5SmXj6y6AgQphktJipTQrroCim+THi5R0pLh3ua1y\r\n        YZh0mDydVdi30tWxDWTllOAeLWHLKgV4yFWq+gaFXF/XqEIsr0Q6iQGmAAlEQKFWX0WU8FYPAJVPUwk3\r\n        qTWSZsQcWcREpMLkCqxSqm4q0oakDNX/F0gpZFiAp4KeuTBGobwLjKHOIbG+AilLgTv52GNk1MyFCZVH\r\n        UM7ndZ6SHfo4NFB1SEwvIJTLVfeeh1uymGIxUsXUr+EchtwLgPgauheHvhlfwWPwomcbrli5yjMxVRZf\r\n        XgHZA+JgL9kDpBpKTfoHUq8VZZoOKBUz7sp7OMG1VWNR4ecC4VIBA9fORmJQWTuBuzJaY0rj70xUhBCU\r\n        RJwChuea+kbeJ8BULxWohnMg4ZUqdZpaB5xPkuhJvFAKSFM688ULKp1/k2jFm9aARFB/7o4V1V+zVObu\r\n        gfxTlpzdZOsOl9m83QKADJuwNtWGkPnXe/4BN9Z1m4i7EKZvhwTQfgox/oT2dkAFkN+/y9xs6zo3x7ot\r\n        wtq/pNIGzM+xieT7TH7qBZv8j39lU//p6zbjJ/9g0x//CXkET9hYku/GETw1DmloEmAx/h++baO/+kWb\r\n        9Pdft9FdhgA0WdZhXmULKMheABh0W5Jv3Rdl2Fvzj1mPOfusJynLvaZiNKTJSu9JK6CV7K+2PvRYGNR3\r\n        tE146nGXDgY8/7q9/NY8e37AWntt+E4Cm46jynAu4hs+SzoQIHSYTqBSAn1CZQjqQqDu1FRLLT1pWRgU\r\n        c6vOW3E1LhoZFYlSvIlkcAspQRKCQEGAcBs7goquysVz0bs6qxMQTVQUJCMjopdLVwFOJAIAQH0bvQUc\r\n        LeG8YjP710WAioOCGxhxQSLSKo1VAUtyL2qSqR/DaWwMSmOWvUGhqiLVHpQYrLqBkhjEEDpeNftVB/Es\r\n        ufHnogYsOod0aDGugKbESXURaoOxjZWuGjWkEjBSxx4xYhUMqXPrt3GPREknUlmqVccPphVQ1XNe78kY\r\n        d2/m/hVnIX97KecvBlQURKRgrFLFYgBwKqSi65ZrC8lIKltANR4UVQpuIE6/gViLOq4t/73iDaoIaJKU\r\n        pDh+1SL0MuhIVqdllFUlYle7KCWma8NAOpdSijV2SrqSpKYQX/XMTCzv5q7YqL5lcKuGxCR5DWSElf4v\r\n        MJAbc+aseV48Nwdmr5ZKyH2ej/oyeDVkriUbheIKFIykTExJDsVIAJIC5E0olXrC53qeeqRIveuTzJ1T\r\n        Z4gvORO/e7ILee4GjNI6n5qzqAv4GWIIzikT9+yNAAZnbtI24JaVn7zJ3L1khwrPYCxstF1p9bZyf7nN\r\n        2JxtE9aR7bfqOPkEB60vHoBuhAN3mLAH+8A+IgWPORiIOk7PJIAoCzDQaptLjECF9V5QYJMwvE//wT/b\r\n        +L/6Opb9H9vI19pZnzZ9rEv7UfZG58n2Yvf59hxBQc/3Wmrtuk223q93tTFP0nT1b75k45941LqQn9B2\r\n        ViGSgkABqYBAoc4Y/rovTMO9eASPwl7AYGsCGAAEgEGfyUn0TFlig/qNttEvv2gTfvojG/3Yw9ax9VB7\r\n        vu8qe3noVntzHJLMjGzrNrf4X5UOfntAoPpyRgl5DHSAFiAUInKdvYyhhkjFG3gYBAi3AIM7khK0RW1Q\r\n        ToNKq4mx3WAoyy9BItpXl2QBgZrCim5F7d9u0i/yOqDg7eAEDirpTkyD+44VdaYa/Kxi3v8R96SCltxN\r\n        CVjIQyHjpDc9wZ0UF70IEyUqhBo1IlH5dTUz0fYcv1WFYDUvaWJiCUTqFcsA44VekVFpccBMBT+VG6DG\r\n        L2e85ZmqNyteQhWcCZ7iOqFRiAqvSFIJTWFi8PHOSs6god+kKjbJNiKSxyUAHLEYWt1JStK1tbprldW9\r\n        nVQtBX7r7lnca5KaQncqFY0NPRZOeol5tZhTjj+rJfq0wnhVylzgcIp71jkUzRmXSg+l51Us5AoBQ0ui\r\n        bMPg/nzQ7SrjoYDg993tF9QESQgKIU/GTpOGGleCxNKoyEbGXu9MJdRDZ281glGfBe7zrNrHAW4nADAS\r\n        l+qRGhsAKIUoN1LrQePsz6r3S0zLBSUoqbqW4lK8a1QY61PEDah0+8kzBBSdpiL4aaTS0zfIQryGe/wK\r\n        DYYuWGblReJoTtuO9DrbcLSGEON6XIhFNi4pw0Ykpdiwlcet78yDLpLLYNhp/B5i/Q9bG2wDbaZhDJ0G\r\n        IOAa7DIv18FA1GNRsQ2dtNsmURJwyl9/2aY+/5T17k7QVq/F9nQPiv70WmFP9FppT/ZebT/rs8bpSSz+\r\n        P+u2yHq83NEm/uM3bMz3/966DVhsb05Ot/ZziokeLI1UBABnrvIbdlmv6agIU9beLxkACH3ptzCk5yDK\r\n        oj3rXoUxP6UAyjOvWKtuM0hg2kwyFLaOKRg55xQQ8Vj+mapCbE/4jSWEbspnoD+D3DF5hC3nVp9HB6P0\r\n        2dV3kBAAgzsfOhg4IBCLoPBlJTnFiU53qJNwWx2g6fWoCEZJDl5EhRZwt1R2LeoM7XUZ9ZlT6PHgQOEV\r\n        nSUxEA6tdvJSKyRZJDYOcQ+FrMlRF2p1o0YFkevJm64ITOR3jhubRG3bJaFcliETAFFvAW9bpgazioX3\r\n        yaveDaycDiB4PlQ/IeqMpE5Il9R3ku3lC2ocEvoEKNdeoOUrbtRAROKrA5B3gZJIG7pKnROYMOnFIMo3\r\n        CLEYAheuq65SUpW8qk/UDEYM4T0con4G0X3pOO9UFRX+aO5G5UlIIjVqiTo4uQdH9QDC/frz871+r3uZ\r\n        O2d+cGe6iy8muV/ldlVsRYj/iDNUFU48evQEbC8H7Ti2CRn/alDLpK7ovuK+DBr/0DuC6xMnIGnk/CWe\r\n        Fa/AWSSUsxcYC+2TXKQEIx9D3av/hkA3PQM2gYtU/L6o8fZuWjcAhmt24sx1gPEGQHCNNOSrVFG+TKm/\r\n        y4QYn7VDBWdwmZ+xzSm1tmZ/tS3dXWZL91Cyf1W6DaE4yIAlR23A4iPWbYYiC3EhYifoROBQezwE7ZEK\r\n        2gAE7adnuJrQZX4e2zwAIcd6LMy3UdQcnPrDf7Qp3/9b69uunz0DEDzRM8me7LMW6/4me2bQVnueZKIX\r\n        MOy9PGy7taWuQK+uo23UM0/ZuL/9qg1nRW/Xh+5I4w/6tbrMzsGTkGXdiEDsSZ+EXtM2ulrg6kGkJvQh\r\n        alhFUEZ062XjVEz1ob+30agi/V9sY627TKXs2Tp7fRRJT1IVZuH6/DWqwm8MCD3HLLaeY5ZgsIAQTTLK\r\n        FLZ83vJIbiqgg9OV2x/YtXd+4RLCnXeREFAV7rytfIYPAyAQkyADoxOeB21VQOUekoPCm++gVihmQXUY\r\n        HTAAhNvUaQykqksAgoNF6PfQXOpdgKKWcZImotbzN7R1dUMNaFX1OUgZ1x1M+JwKTvosgEpoNyfJQ+3p\r\n        vdGJgqzUN0CeDvdwxIATuiJdRXW5ikRz1RvQEKHJ8bJ5uKSj33mpcRlBY+J4ZwD5wkOjFD9P1A3qCr8P\r\n        nYtC9t1FGCTE3QcJp7nTEftXYGQlEym6Tgwlv7oalegcuk+BWnNHJG+eomsGJvLreucm3R/3L8Mtz+8G\r\n        XKlkPIvGRFKbVDgBkuw7qhTVr/8gX/UVQhy6Zakqcii7rtgPRWnOmj0fg+g+N3ymYCSVwVh2ohOs/BdY\r\n        2RUNKFvSVeJSZBe6Rlm9ayS9XYWuXMMTAHldAsLcNQZxarKCigTmYcyVF6NQeHJnMBBeanYd3kbiuYmk\r\n        cQN16AaFSa5bCQtVIen5OcQTHCSycPW+Wlu8o8Rmbyq2EctzcBumwiQYAmdhIITpOk0nlwBqRxhxt2X5\r\n        1mM5doGVUFKpU/eVEa0gn8CpJNByVvO5pTa89zSb9qN/tPGP/thavTnUnuixDMv+Orfsvzx6v71KVuHr\r\n        448SnXiUQkPrbBKeBvVXHPfP2BF+8PfWu00Pe6UfLdNG78BjccS6zDgePAlEIDYHHeFa7C3XIpGIfUha\r\n        GjJoEv0WiDV4jtJqD/2Djf7pQ8QbdMNuMB8A2mIv4GJ8bUKKvTotx1rNLrHWREC28ZDof93F2WpGviXS\r\n        D0l5TqTPCQxiQOg9fmkwKGJDyEdCkMpw5c7HdvO9XyEV/NLuvofr0Y2LAoVIQnBAIOnpnfdRIwCEtwUO\r\n        MSAACiq55gQoeJFWqRiqyRhTAAUHg0h6EFDcdkDgc2f8sFX7eXWO0uS+7UCidvSSRNRJKnSjFji4xNEM\r\n        GOF4ZwpXVSKDpn8m+4WYRaCj7kfaD3YNTc4bhG1Lpbmm73U+qT/RMdq/6cbRQPpbwOHdizTJXZKRCgWz\r\n        wiySZFq+l1QTfYe040wU/47f+j3q3PqNt56LOjRF2+bWbX7/Or/OoXsWEAQ7jffgdHAMUpdI9y4QkTgu\r\n        m4hqPcqbIy/KUbwsB+grsB/r/z5UAidclvvZHsQ1eAwPTCbHFZOdWkOkqPJILrDCuxRHNuF1ge4t9un1\r\n        6VvAIQBsyC+4wjGiq4BF2I8iC/WsbmgOYHAJMLjgAUXED1y4bY3EETScvU7z4evUIrhqRbUXvcTfsYKT\r\n        Hkuw8XCNzd9WbNM3FNmUdYXWf1Eaqy+JRABBR5KKOogAgna4DdsSR9B9ORGAERA0gwHM3/1BMOCzrsuK\r\n        rcOcEhvcY5JN/u5f2dhHfkheyxD7GSrC82QTys3XalqWtZmeY+3R4ZVNOGTADJvw8Pdt1A9gYq3obbvZ\r\n        G90n26sDaJk2apN1Jt+h29R9rrb0mEyPBOUnuGsRI+KYFdYXw+WwnkNtCsVWxz+GwfLRH9rIV9+wzu2H\r\n        2/ORR+GF4XvslXFHrRVehTdmFdmb8yocDNp8SmTigwDxWwFCH3ozZFZGEoJsCHSBvnaXGIT3f2k4Guze\r\n        h7/AjoAx0QEBICANWlLC3WjrEoNLCu+yfc+Dl2R4lJ3B6ydIrVA5d1VfUhXnGBSQHCQ9OBDEJEaHCW9H\r\n        qsUdSRTNEoZ6Q0T9IQAaVYK+eQfAiL7XeWPV5CYZmQKI25zrluwYDipSZYKaIrDxa0RgExrZClBiUOHY\r\n        CJCk5qjh7XV1rYrUGzGfmE6AEEAlML68J2pe4qu0r4CBaf17qUQqYR8xr6QY76QE3fQVnX3iPwKIQQBT\r\n        8MYEKcBbtzkYBGnAjbVuh4klJNl0Wuw2Ak4B7E3dC79X30SP+UD/L8cTIk9JFnEb8oSo0KykALlL09Oo\r\n        KaiCJHhlCvGWlOO9aMAOcpbfSq0SULmRWGnwKpZz+xbjHoDhqmoQSEIQCQRuSmoIgOCgEEUY6n4kXV0k\r\n        oOg8YHAOIDiBobAO9aCSgKIyMm5zqi5To+MskYWnbB9hxuvxHKw6UG4ryTeYtamQEOMsG7tcocbyDBxH\r\n        KghAEKQCUoABhLa4D9tA3ZZiiU+ShIB0IMkgUSKIJQOBAVKEAKH9vFLr03+RTXnkezbmr75k/V/rYC+p\r\n        AMloMhmn51qH2UWARiGGyFxck4ARxU4G0CRlSJe+1qP7MHuzB2DQZ7a9OWiJdaASUlcKonSfsisEHeFa\r\n        7D1utfWl4MmAoTNtWL8xNqbLWzbp1RdsylM/pivT92zoK62sddcp9gwg9HT/jQDRLk9eUnhyW8Cg1dyy\r\n        Zungfy8g0Jeh11gAgYAkqQw5SAgFdIG+jkRw6wOz2+//yu598EsAgcxHBwQ8De+KUB/Ifryr/AalRUfq\r\n        w12XFFAfKKridRS8QCtAQB2FW+rzoLJskergkgH7QYK4xxZykJCq8bbnTdzz4q4RuPB7SRy3VbVJxP6t\r\n        WBJx1URFYINKEoAjkFQTB4uo6cwtGtj6ddj65wIKgYYklmYQiNvXRSqOACa2hzhoRGAgQIg8KGJiV2+a\r\n        JRAxeYs645LKDdrh6ffqgOVgpOa5ERgJlJolmiDJOOA4iESSDOdw9cnP22K4DW32gu3GgTICXbfl3KCk\r\n        vgresDrLLiKjnSSFGvoeVuCSVaNaeV+K8YTIK+Jpy3g/lDsi4+tJDLJq8y5bhCSmmzyDV+Hmnd2+LWDg\r\n        PlR416UEeZEkKQBC+ltG4wgQPPcAMLkgm4Z6RqJCnSOeILgPCSTCPqC+IEV1lzFwX7RDxSctOeuE7cps\r\n        sC1pNZa0t9gWkn24lHDjiSsybNSSTBu1NIsKRdnWEebvABBIVWhPTEG76UdYuY9YWz5rw/atZfjpURek\r\n        JjSrBglAoM8cDKAuHNtubol1HLXTxqBWjfvG523qj//RBr/SzroMWE6sAnELuPq6kMXYBZtAF64hCaDD\r\n        qPXWevASe6PvXHu972xrNWCBtR++gnoGG607wUq96IvQd9QKG0jw0tBu/W0UBXrHvfGajcXmMOaRH9uE\r\n        n/yTd3Du/+Kb9kaHcW64fJo8heeH724GgzYzC6393HLAoLJZOvjfAghj5q+m99tqGkKusrHz1tiezFLb\r\n        n1FJDniNHcmpI9vxPbsotUH2AxkU34O5ZVQEDJTodA/Pg9dIUDiz1AnZGFAhRKq/eCcCBBVoVZGVm9oK\r\n        ENTrQYVbKeAaGPodZ/wwuWSEDH/fY/8ev7kH43vpNgHNO0gfDjYUfFUVJ12HYwQYt1XqjXPGKoozfLM6\r\n        EqkpAgwASdfxazvjAFT6TAzEanobppRkEasx3r7OjaahuKyvuFGvy1swRixRBKaOmN0lkLAfKDDRdTFt\r\n        /FsZXvXMMsTG9hSYV8dKIrlJ1WtRbBtxEJAK4+pUJEF4N+7490GSuslzhTHW+ALiXhNTQByATzH/3n0a\r\n        Y6Zb77H2y8MhgAiExwMPibwo8lKcxyB7id9cFZjpHJL2NN6oh7eUCs+5VWbvhjf2eRcQoAUg93WNZ5LK\r\n        FewE5BoAYBexiQgATpGGfBJqIMGt5rRch9etsOEqKuslSy05b0eLztmunJO24XCVrdpH9iG1CGZtzCKW\r\n        AAMhfQb6KOloQap1n4MfX+G+bLvNwVgHdZ1DaDFM2mMFfvkkaKVItgKBQUSfAQQxIAQJoYyCIpy3x3Qb\r\n        8yhdkb75BRuv4KPnsPq37W6juw6zkf2m2wit8oPJGO4zGYlimnVHdejSb5p14+9efeitMGAyEsBYG0EU\r\n        46j23WwsfTTGyz5AO/dxP/m+jfneP9s4DJcTH/qejXjiMev3anvr0qa/vUxY8vP91tirGCuVp/D6tHx7\r\n        c3a5tZlfY20XNVi7xY3WfsmJ35heGpVsifQJG0IMCA4K89dYcmqpJVMaKjmtCmCoslOX3rOzNz+0izc/\r\n        sitRLMLt934BCPzc7r0HCLxL9CLAINuCIhmVAHUTULh1VxmSbAUCiBg3qKlwDbruoKCJKoCIG8Bockly\r\n        iJrARIwqZr3Lan6XCea2CehtqScuhQSVRPsCnQAGLeTqSMQQvq929l49Wp9rG1SWGxFp3w2d3oQmNn4G\r\n        D4l7RBwIggel2Qgqe0XzsVJJgvdE0kUAEDFfJHmIyX31lsoU3YckIkgSkV9bhWs53u0nunedC9C8ycru\r\n        IOIAwz3rWaLnkTTg54yfTddlPG4xHhr7WxiFb1IL8yYZq6qJeQtp7breBb+5xv2KwWXAk2dGjHoBL8l5\r\n        9i8AABfVTRoGvux2FN1DaOt3nXN4Ojyk893EA6Vs2Bs6N6Cg83uDYIEC17imaFckHoUXn6f5zxlaBJ7C\r\n        M9FIcZIawKj8FBIBvUQLSbdPq7xgh5EI9uWfILAI9QD34bLdZCBuybU5W/NsHIVJ+s47ZL2pPNRzNpmA\r\n        82UzoICIg0GmdWO/K/tdyTXoAkj0SMI3H6kIwXgYwCBROmgGgEgyuB8QKqhpkGOvkEXYoct4G00Doon/\r\n        SCzC33zVprCdSqWiKQ9/lzbsDxEj8JBNwiMw5fWXbCz5HKNavWljXn3Zxr0IeDz7hI2nEevER//FJj8W\r\n        aMoj/2xTH/0u4PI0x71mY9p0sl6t3rJX24+257rMsqd6LLHn+q22V4fTUIWiqB0JbnpzriSCWmsHGLRf\r\n        3PQbA0EMGr8dICxYY7upEbc3rSKAAoBw4uJ7lGL/wM4DCBfIerz99i/t9ru/wsD4SwDhF+wHyeAmEsNN\r\n        AOHanY/sOoBwhUkid6VqKVyhBNu1a+/bpRvveX3Gq0zy6zDAdU0yZxgmNCSGlegfVmwxhkRfbfnM1QWA\r\n        AKaXZHAHQLgnQHAvRrBVaAV0tQRGuME1bnDdQDCQN5wJk1pMJAbTuQNDhXuQZOG2DShWO5rtHHyvyR0o\r\n        GCqDqzQyfkYek9DuLvaiROd0EGoxpDpQ+DUiiUYqUKRK3ea59BwBtIIk5fuAY+jALUkmUgUcFGJ1h+94\r\n        RgdgxkkM665iQOAG7+OGtgJoPr8BSNwAIATM1/UuOM9Vnu/qdbY83xXeiwOGAIDvr2k8tfqL4fV7zqPz\r\n        C2h0Hn12XVuup3J7VzjPFdzVlyjhf544lvMX7wICd5AGbloT7sNaQKD6JC5DJJAiGgLlU68wg47jx/Fw\r\n        7aMwyZbUatuYUmVJB6psFhmI49Zk2lhKiaucuFKQu1I9qBslyLqpOAn1ArrOlUSAyA4gCASUHKRtF1yJ\r\n        sb1AtoJE6eAzQSARFJAQOmK9b4sV/3VqEb44dIe93m22DWjby0aQbTr20Z/YRMT7id//Oxv7L39v436A\r\n        J4LahmP5e8y/fIf4g7+1cT/+O5vw0D9jDwAMqIw8/qmf2hiqcY94vY2Ngoa/0cE6tRtkr6IavNB5qj3d\r\n        da49/RbhyH1W2gsD19trI3ZZa7wXCjzqOqfI2i6o+zeDgUDhtwaEvakVtgdA2CtASK+kJfz7dubKh3b+\r\n        OoSkcB1AuPU2QPAOngekhGuoEVexH1wRCLBKXEYauCyJ4sb71GOErr9nF669a2eZJKcvv8P57qE7Quiy\r\n        F1k1LkHX2L/iYrH0zcCsQcyUuMm+xGYxtK/qEcOKiSQVRKJwCxOJ4TW5xcBaBQEBfn+N6+s8mvC+anF+\r\n        fXeVSXsDUrCUruGgJDFbK65ASsRvRWKYa7onXzFl0MOV58ZE/tbq7d/xt7wd7uUQ4Ak4YvDjcxhYzOfA\r\n        EpW3996ZYmLUrBvaRmAgZveVX9f136goDde4EhjXn4cVXPeuMdQz6hjRFX53gXehoLJrAICqXgmQr3Av\r\n        F/Q957uCPeQK57nEWF27prFg3Ljny3x2meMuw9x6lqvczxXGOXwWAF0dvS5yvguM3QXC289eedtO8W5P\r\n        k258Gs9AE27Cepi/DltANfUHymD8ErqK51SG0mTpxafseIk8BSdRC0hDTm+0HVm11CSgTNmhclu8lziC\r\n        vaU2fhX2AdUlSEojwCiNMuL70dVJS4a6kITkYcaAQWeBAVKBshCdiC/oBLnRcLkIu4DsAwk2gt8EFFRT\r\n        oP08dHXcdfIqPAcoPNM7yV4hbPjNblOtW6dR1rv9AOvbYQAehd42+I1ONuiF12zQq+1sGElP+ntAuz7W\r\n        p8sw695ltHXsPNZe7z7LXsBj8ORbS+xpIhyf7raA7UJ7qucSe7Zvkr1I5uIrSAWtxuwnijIFe0guoFfs\r\n        gUeuIvwbJIPfWEKooLZ8OVSBT1fbGTSZmLVqr81Zt9sWrCXzLqvK+z1m8ALzSmmnjS+4HrGyEf+4yqud\r\n        ZXKegMFVnfk0k/PUJSYGGWdNxJU3XLhjjUyQelmNz97mt2zxKdedlfEIYquMtFPnb/Ob25wLYnuO351h\r\n        VTntKay3CGKRK+ouCSyIt0y+y1jdL0vU1SrE9S8xGQUsF2Uw45iLHKNc+CbO0YSuKv/1SbXwQjRtIsKt\r\n        kYlaj158EpH1BFGNJ9Cjm5Qdx0Q+x72eQVw+q+Airn2eZzyH+1AitCzgwR1Gv0DoNIE2jei96jas9NrG\r\n        JvRhVr4aIgnrm6j9r8+4VgPX8S3GshPozE3ozKf5u4nz65ynlJ3HM5zB0q4svbPS7TnmjAJyuJ/TXtiD\r\n        CESYrJGknVO44U4QnNPE9RpV/QeLfBNj23hKY8rzsa0+pSi+mzDlTasl46+Wa1fTFr2SQJ4qRPPyE5QN\r\n        o0hIGWXFSzHeFfPui0kNLqilsCgrdmEdzUxg4GIMy3kkueUzP1RiLL+K4jkVJ0l+O22ZzIlMxPsMxPvU\r\n        vBM0LGn0Mv5HcmvtEFWJD1GefG96LZWJa2zbUVb9g5WWtK+EoKFCW0iB0tlbKL+2BmPgilQbteKYDcc2\r\n        0GdxqvXAU9BtNnEEih8gkrAVocZvToQmHPTw4nZEFIraEl3YbqqqCVMhiG0bqP0cPkugtqQqt1DafdWC\r\n        Hkz0+bS/W03PszeoMvTa5Ax7edwRexYr/88w8P2050p7rPsie6zrfHu8y1x7rMtse6zzLHu48xx7pNMc\r\n        e7TzbPsZn/2s0wy2s+yJrnM4Zq490WWm7z/Bd76Fnuw+D/VgkT3bezm5CavtpSEbkQy2E4W4B1XhEMFH\r\n        cpumuFvzQbfhr3uGByWC54esJ4iqhY4UEdCVQJ+roLikQKFSoMBkmEnHmRnQzFUChl22D1vCYTLF9IKP\r\n        UTylsOaSFTdSeooS7RUwWB1x5TVM1Fq26vRUSySZQKOKCVmB77is6YYfX9x41Yprr1k5YaZl7GtbzveV\r\n        jddZQTi+CVGSv2s4r9OJaw4gDXxWz9+6Tj3nreG8dUzyRsCk/gyAc4bVCEZuPI3Pmlh2MUYtzFIBlXEO\r\n        TfoSUl/LBHiIpaV1VIKqO0dwC4RbtZRtKatXBQxcjghbyWqmGvzVJALVEy5bD+MoIq4OC3st34kqCYyp\r\n        JFeiEl98OQU3dG6Rcu2LGc8SVsFi3LdFeGxKiOkoovpUGfkFpTBRKYxWquvWn7PKBs5DERpdt5zrV3Af\r\n        ldSgKBGjckwFx5ZXcV/43stJ3RVgl9IToAQGLYYxS8nkK6UycAmReoVlSu8N3xUSUFZEKG8BFvpCdPJi\r\n        Ik/zuZccyutnw8C55Ktksp/BCp1Bp670YjJc8+stBWZOL6amJuXH00hyS+P79KITlgZpUUjNp1YGJciP\r\n        ceyx3FCK/ABMvz+j2valVtme1ErbdbzUth8ptS3QpoPltmYf7kGqEC3dU2KLdhTZLGwB01al2SRCiccv\r\n        J5yYnoP95tBzkPqEairSiYCdjvIS4BFor3qEKkc+4QCBP9DYA1HOQZoDQAwCbWCUNlNSnZrB4D4gEChw\r\n        DJWLfh0DPfi9M6CDQk4ECkfthVH77RkkhafIMnySAKXHCVUWQPy0x3J7DHpU27eWQUsDUdpM3+mYZ8h1\r\n        EOM/25dYhv6rAIA19uKgdZRN32yvAgKvj95lrcaqNLuAAJfplOPWXklXPKPCjv8dAAEgEBgIFACEGUnb\r\n        AyBEoOC2BFSHg5lVgEINIh+rhVaQWqLFmNCl1KQrYVKXwkRyFZUQPFJCrbpijERFTOpc1bPHjZldRqx5\r\n        ObXrFBItYuUpqOZ3TPj8Gq1Q/LYOsKgl+IT9IkWj8XeRSNditVKEWkk9x3KNUtXDa7gOQ8L4ZLiVNFzj\r\n        XgAd7ddd5f6usNphqOLa+ZUnqahLHz62ooIqpB2YtoD9EvaLxMw05CgijbgYhisXgAAUZYBHqZiT/XIn\r\n        /ua78moxHswPU5ZUn7ISCnMWIAbnw/D5MFEuDJXH3wVlJ8LnVPHNZ1Ut4PsCumIVwNyFFZCOBzjy2Ne2\r\n        UA1yVPab32TxXR7nyhaVNrJtslzOk0cz3hzyTbJ1DfbzqBKcW9ZE2fATfH/S8jh/NufLwW+fhU6uCsJZ\r\n        Oh9Mn14EQxdR76KwwVKorp2i6lh5dKKmbF4qHqWjMPmx3Bo7xnEp1A1IAQiOEfyTUsBvSCFOyWmwY9l1\r\n        doR6AvsR7w9lAAZp1XQtonNRCmBwuMK2I/JvPVBsG6G1+0tsJQbBpbuLbdH2YoqU5tkMMg7HLQMMCCdW\r\n        ZaK+AgIqFHtIMbYBpRu3o1JxmykhbuD1sQfpVxDoNagNWYltYJAYALRtnUAOCA9IBTEY/JsBoRkUqEc4\r\n        OdNewZ7wMoFBL4w6YM+PSHap4RlCl58Zss2eHrw1ENGET1PwNJA+2+bHvDKUIqjDtiIBYI8YudPeGL0H\r\n        SWCvvUkvhjaUX3dpgGQrlwh4TkkFMRj8+wOCVAb60QkQYlCQLWEftF+ggPqQwyqYS1izGrkIGApYifIo\r\n        UpkH8+fDLAKMnBpWHyZjBnkRKaxAh/IbmWxNuDFP2tECRMu8BirbMtGYdOmsWOlF1F8ooeItK15WOUTF\r\n        pmzOmcGql1vO+VQEk5VOPulc6aGASS5gIsoDPAoAjDyogP1cJJh8Ps+pxocN5ep8XCOvhNr7ME6+mAdw\r\n        yHWCSSEVzigEFApdbGZbzQoPFYn0mUp0s6/vC331F0OL+WB2zpMH0+VwXjGpGDeL58qE6bIQpbOKuB5M\r\n        lc31s2HKLJgthxU6Q1QEeDijczz7mTBgJsenw+QZMG5WUR09MlitGa90xtC3nDejkHZ7UAa9AzI5Jo3z\r\n        Z8C0GYBCBufI4Dqp7Kejn2uctbqnifmzkQLya2g0grSHWH8kS5Kf3MvsQ4e15e9jVM06Ch3nmilIBSrN\r\n        f1if0Zdgv7xP6dVucN51rAJVoNy20Khk44EiW59cbKvpV5C0I9dW7si3JTvzbSYgMJPaA9PWoR6sy7Jh\r\n        S47biHmoB0gGg+hP0J2moypU2oXoPdUmbEONwraT1JeAmoQwyMvo0a9Ar47d59vWrJitJ98PAg4I+gx6\r\n        UEVIBIP/W4CQCApECL5OYNCrk9LsFcKHXyZs+SUA4iVUipfGHE6gQ+yL+IxgIn3fiudQR6XWqD9tkADa\r\n        TgYAeKZYEmgGgEgieDAZ6f/rEoKZfS6R6utVLIPUVUj1BKbRn27GqmSbs3qvzVu330bNXW+j5m2zMXSK\r\n        nrZ4h01ffZi+dYewNxy1uVsO2rxNR2zhllRbsDnF5m8+bgs2Hrd5G/lu01FWiBSbu47txlQ63KTa4p1Z\r\n        tnR7Ku2vMmzlrgxbsyvfVu3KtFV7s9nPtqTdObZmbx6VbXL4LNfW78ux5XsLIL7blctnebZyT44lJWdy\r\n        jmxbuCPNFm5PowDGcZu/4SiTkbZadNuds/6gzVp3iGYah23e2kM2Z+1Bm809z1pzxOZsOGZzt6Xbwk0p\r\n        tpg2XMt2pljSznTE3DRbuzvTVnPtjQfybMMB7mVfNgU2uPa+DFuxI92W8TxLNhy3ORs5z6ZDNpsWXlNX\r\n        77PpKw/b9FX7KdnNtbnOdGjqqkM2d8MBm8nzz+f4udzP7A3cz7pU7/s3az3n4Z7nbeDzdcf57ij3fIQu\r\n        QIwd46fv56/jXjl+/kbGcf1hGoMcthk8w6yVB2gfdgip7pBNgyatOGiTlifb+KU0DKGV2KhFtBSbt5eC\r\n        obtt5KK9/L2bxp+7aRO+y4bM3mNDZ+22ITN32/CZ22zQnN02dC6NRek72HvaVus0dpO1G7PZ2o/ZaG0J\r\n        vVW0XYex66396HWE4rIdEfbbax96c+QGVj504FEbcJexHYkoPHKrvTh8i704bDMJQJvtRbL0nh+00X42\r\n        aL39pO8a+0mvNfY9sgW/12udPTRgiz3Uf4s9rAYi/RDJh+6xJ4fthXb7/k/6bLIfJ9ATQ3fbE0MCPQ6p\r\n        z0AgWpN5e7JAD+b9/9v/Vg/EjfZQzw32UI/1Tj95ax20toW680wPUuL3HB//9qGeOlc457/lnn46eJcl\r\n        0iO9VvG8LfTwW4stkY4j5SXSg/x/Hxjoy7q6AAj1dLYVTVumhpW7kRxoYJlEJ5rJK23IlNU2dMY6G0m3\r\n        6BELAIfF25loO2zskl02dulOiHbX0IRle23S4t02bslexES+g8Yv3cP+XhuftIdJu8cmrEy2STDPpBX7\r\n        qXQLJe23Kcv32+RVByh9vZe/99pUJvyUVftgKo7j+4n8ZjI0ceU+m8h5JizfjQjK9Zbymc4tZqCv3vjl\r\n        e/27ycv4fqmIv9mfyGeTVuyxySv2QjTjXMk1ab01leebsgaG5j5mrT1gs7kHbWetA1AAkul07Z225gBM\r\n        COPrHjj/RH4/MYn7oMHneM45jp5+4/SM3M94nn089zSO55yoe+F6kxjPCdzb2CV8x+f/n/LOrqlpIArD\r\n        /wrxRuEKkKIOAipeeiWO0A9qaUnSCEhlEJhSYMaBli/7QaWO/sLj8+6mqHin6I0X75xkk+xmM/s+OSkJ\r\n        G3M+Zc452qeMbeUaZsW48S5vx+maUqY6XD3qg+pn/1XaWDn4auU9P4dgwPEhWq5eWlj7hPm7Vqh2mT24\r\n        Y7mtDga/4H/+8VrtFuK7+0WW8xufmAWYGYWlCvu8u7D5jbYtvG3xHX7TnsdnNls8tmeFE5stHNvs64Y9\r\n        Rk/zDXuSP7bHRK0rTkssPyA+RBOLDeYIqNt9fsCaWDy3ifzHJJ7bOCAY47l5LHMKBOp2Gw3OHdmtuYYN\r\n        pwEC8w0OObVsFAiMJKYfw/B3Mbl0J5Eg8KOug+BmYXAdLH04eFP/LIAhaFzp+3Zv/t8DwHVo/BMgeCgk\r\n        QNAMtgzaDUGBAZ/m88zc6qGbq15gWNppMq11mxSwDRw6pIMdKwKJ5SqqCRRa7lrAIA13GeDEaN8P9mCP\r\n        SJYR1TxEygeXFrMtpiwGMmWWg2R7dMDxLAe1nitT3cFe15ehUOvUHbh61S7rmELtyCCh2pIwaqR2nAQo\r\n        gQvDOlAAJwzudAgsMP07oLNOrACmVWfszw4qK4IZplYdq0gxdkZXxOTEcE990j6UY2ZXjpHLrGt/9SlG\r\n        OmftGwKB0jbThG93rbSDqlwb9o32v3AtJJbdOnVxDhGQiICtQBAqC9jtWVHXf6djSy4KAm3LbbaAgtQm\r\n        AxAMPBAyxEylaelKi9giNm1+/aOl1ylb45PcuGlPC970M5h8Jl+3GUwuTSdxBuOrfJL1qRzv22f54Sx7\r\n        ZOMola1bis90UwAgBRTGpeyZ3UOCwWjmxAZfNuwWnxIPvgAILw5tmLv7EGYfWlAm4IHQzwJk/D4IfgVC\r\n        DzD0rjKCvwuCm8w4/qyufwaEPhQq3NUrDD4PBYCw8sEWUEZgWDviObBpi1tNyzPg8tst0s02ajEg28CC\r\n        QamBiUoA4koCBmZdBhCKgcCh6MqS/ZK4jClKVYHmAuiwnWUNeNWpQb9Ee5LaLNCma9sBSm0iIBUg344H\r\n        g9oLgVCIEQWnsjPmJRkGRiPDeUOfVxygvHRndkqMLnBJ7ljqE7g8rPpgog+0J0gpe1I7vq0+sC4BGn2n\r\n        TPtJ6ntA/wqb9AmjFtHS9oW7+0e060Dgzsmvh6T8go1iCRAIBrqeRY4RCNy1ceYHAu9bSWRdUKAsvwko\r\n        iFm+xXcAkN7yjj1AmCemia+YDMRnAQkIcoAgx9/gMftUEqcBwCM0hSZRKnPI/AAAIU1M11k+5df4M6d7\r\n        EjAYzfrsYERAmKsDgiMbAAYDRD0SOCWZwGihx+OAlwx/h2nLf5TKRkib+/pfQNDPFG4aCN8Ax2fzLWx8\r\n        FZYAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescription.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"lblCompanyI.Text\" xml:space=\"preserve\">\r\n    <value>Company</value>\r\n  </data>\r\n  <data name=\"rtbReadMe.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>3, 230</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblVersion.ZOrder\" xml:space=\"preserve\">\r\n    <value>6</value>\r\n  </data>\r\n  <data name=\"lblCopyright.AutoSize\" type=\"System.Boolean, mscorlib\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblProduct.Name\" xml:space=\"preserve\">\r\n    <value>lblProduct</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblDescriptionI.Parent\" xml:space=\"preserve\">\r\n    <value>tlpMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lblTitleI.Name\" xml:space=\"preserve\">\r\n    <value>lblTitleI</value>\r\n  </data>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/dlgAbout.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n//Place your code in this file.\r\n//In case you rename class or namespace it must be renamed in dlgAbout.php as well.\r\nimport namespace System:::Windows:::Forms;\r\nimport namespace System:::ComponentModel;\r\nimport namespace System:::Drawing;\r\nimport namespace RegEditPHP;\r\nimport namespace System:::Reflection;\r\n\r\nnamespace RegEditPHP{\r\n\t///<summary>The \"About\" dialog</summary>\r\n\tpartial class dlgAbout extends System:::Windows:::Forms:::Form{\r\n            //Called when dialog loads\r\n            private function dlgAbout_Load(System:::Object $sender, System:::EventArgs $e) {\r\n                //We need some info from our assembly (set in Program.php)\r\n                //The easiest way to get assembly is get come type from it - i.e. dlgAbout\r\n                $Type=CLRTypeOf dlgAbout;\r\n                //And then query the type for assembly\r\n                $Asm = $Type->Assembly;//So, this is our assembly\r\n                //Now query the assembly from info stored in attributes and show the info in labels\r\n                //In each step we get all the attributes of given type,\r\n                //PHPBUG:\r\n                // select 1st of them (using GetValue because [0] does not work well for non-Php arrays sometimes, currently\r\n                // we are sure that there is one (otherwisa exception will occur)\r\n                // and then get value of the information and show it\r\n                //Product name\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyProductAttribute,false);\r\n                $this->lblProduct->Text = $attrs->GetValue(0)->Product;\r\n                //Assembly title (aka name)\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyTitleAttribute,false);\r\n                $this->lblTitle->Text = $attrs->GetValue(0)->Title;\r\n                //Version\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyVersionAttribute,false);\r\n                $this->lblVersion->Text = $attrs->GetValue(0)->Version->ToString();\r\n                //Now we can set titlebar of window\r\n                $this->Text .= \" \" . $this->lblTitle->Text . \" \" .$this->lblVersion->Text;\r\n                //Description (note: it is not localized)\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyDescriptionAttribute,false);\r\n                $this->lblDescription->Text = $attrs->GetValue(0)->Description;\r\n                //Company name\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyCompanyAttribute,false);\r\n                $this->lblCompany->Text = $attrs->GetValue(0)->Company;\r\n                //Copyright\r\n                $attrs=$Asm->GetCustomAttributes(CLRTypeOf AssemblyCopyrightAttribute,false);\r\n                $this->lblCopyright->Text = $attrs->GetValue(0)->Copyright;\r\n                //Finally load readme from resources\r\n                $this->rtbReadMe->Rtf=Program::$Resources->readme;\r\n            }\r\n            //Handles click on link\r\n            private function llbPhalanger_LinkClicked(System:::Object $sender, System:::Windows:::Forms:::LinkLabelLinkClickedEventArgs $e) {\r\n                self::GoPhalanger();\r\n                $e->Link->Visited=true;\r\n            }\r\n            //Handles click on powered-by image\r\n            private function picPhalanger_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                self::GoPhalanger();\r\n            }\r\n            ///<summary>Opens Phalanger URL in browser</summary>\r\n            private static function GoPhalanger(){\r\n                //Just start process with url\r\n                try{System:::Diagnostics:::Process::Start(\"http://codeplex.com/Phalanger\");}\r\n                catch(System:::Exception $ex){}//And ignore any failure\r\n            }\r\n            //Handles click on OK button\r\n            private function cmdOK_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->DialogResult = DialogResult::OK;//This is not necessary since nothing depends on dialog result of this dialog\r\n                $this->Close();//Close form\r\n            }\r\n\t    \r\n\t}    \r\n}\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/frmMain.cs.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"tmiNewKey.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW\r\n        aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF\r\n        B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Klíč ...</value>\r\n  </data>\r\n  <data name=\"tmiNewSep1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>293, 6</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O\r\n        gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa\r\n        SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO\r\n        gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Binární hodnota ...</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Text\" xml:space=\"preserve\">\r\n    <value>Hodnota &amp;DWord ...</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Text\" xml:space=\"preserve\">\r\n    <value>Hodnota &amp;QWord</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Řetězcová hodnota ...</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Expandovatelný řetězec ...</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>296, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Víceřetězcová hodnota ...</value>\r\n  </data>\r\n  <data name=\"tmiNew.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz\r\n        ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j\r\n        tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1\r\n        ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg\r\n        XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67\r\n        CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe\r\n        cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF\r\n        ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX\r\n        Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ\r\n        Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf\r\n        h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ\r\n        8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNew.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiNew.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Nový</value>\r\n  </data>\r\n  <data name=\"tmiRename.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X\r\n        t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW\r\n        AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD\r\n        Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV\r\n        q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj\r\n        H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRename.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiRename.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Přejmenovat</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn\r\n        Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv\r\n        oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W\r\n        YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L\r\n        vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB\r\n        RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0\r\n        Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI\r\n        osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4\r\n        l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB\r\n        b88e++xiBDeHAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Upravit ...</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7\r\n        f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt\r\n        nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae\r\n        CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO\r\n        m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd\r\n        S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ\r\n        PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE\r\n        BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo\r\n        r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK\r\n        xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Smazat</value>\r\n  </data>\r\n  <data name=\"tssCms1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>180, 6</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Obnovit</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.ToolTipText\" xml:space=\"preserve\">\r\n    <value>Obnoví obsah aktuálního klíče</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Vybrat vše</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW\r\n        1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw\r\n        9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO\r\n        qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B\r\n        NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7\r\n        6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP\r\n        ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv\r\n        CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG\r\n        EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Text\" xml:space=\"preserve\">\r\n    <value>Z&amp;kopírovat plnou cestu</value>\r\n  </data>\r\n  <data name=\"tmiExport.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt\r\n        XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc\r\n        betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1\r\n        43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu\r\n        cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd\r\n        AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2\r\n        g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE\r\n        ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui\r\n        M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS\r\n        01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiExport.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>183, 22</value>\r\n  </data>\r\n  <data name=\"tmiExport.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Exportovat ...</value>\r\n  </data>\r\n  <data name=\"cmsContext.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>184, 186</value>\r\n  </data>\r\n  <data name=\"imlImages.ImageStream\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6\r\n        DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r\n        AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r\n        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r\n        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r\n        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm\r\n        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM\r\n        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA\r\n        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz\r\n        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ\r\n        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM\r\n        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA\r\n        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA\r\n        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ\r\n        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/\r\n        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA\r\n        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm\r\n        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ\r\n        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz\r\n        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA\r\n        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM\r\n        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM\r\n        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM\r\n        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA\r\n        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM\r\n        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ\r\n        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz\r\n        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm\r\n        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw\r\n        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA\r\n        AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/\r\n        AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA\r\n        AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/\r\n        BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs\r\n        Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/\r\n        AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5\r\n        Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs\r\n        BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s\r\n        AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs\r\n        Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs\r\n        Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA\r\n        AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs\r\n        AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH\r\n        AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs\r\n        Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB\r\n        Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA\r\n        DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH\r\n        AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH\r\n        Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/\r\n        AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH\r\n        AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs\r\n        BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo\r\n        AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA\r\n        AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA\r\n        AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB\r\n        AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg\r\n        BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB\r\n        AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes2\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F\r\n        AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs=\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes3\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl\r\n        ZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes4\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G\r\n        SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes5\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA\r\n        BmNsb3NlZP////8JBQAAAAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes6\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D\r\n        RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"cohName.Text\" xml:space=\"preserve\">\r\n    <value>Název</value>\r\n  </data>\r\n  <data name=\"cohType.Text\" xml:space=\"preserve\">\r\n    <value>Typ</value>\r\n  </data>\r\n  <data name=\"cohValue.Text\" xml:space=\"preserve\">\r\n    <value>Hodnota</value>\r\n  </data>\r\n  <data name=\"cohAlternative.Text\" xml:space=\"preserve\">\r\n    <value>Hodnota (jinak)</value>\r\n  </data>\r\n  <data name=\"tmiExit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>143, 22</value>\r\n  </data>\r\n  <data name=\"tmiExit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Konec</value>\r\n  </data>\r\n  <data name=\"tmiFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>53, 20</value>\r\n  </data>\r\n  <data name=\"tmiFile.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Soubor</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>151, 22</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Jazyk ...</value>\r\n  </data>\r\n  <data name=\"tssTools1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>148, 6</value>\r\n  </data>\r\n  <data name=\"tmiJump.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>151, 22</value>\r\n  </data>\r\n  <data name=\"tmiJump.Text\" xml:space=\"preserve\">\r\n    <value>Jít &amp;na klíč ...</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>151, 22</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Text\" xml:space=\"preserve\">\r\n    <value>Jít na &amp;stejný</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>151, 22</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Obnovit vše</value>\r\n  </data>\r\n  <data name=\"tmiTools.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>60, 20</value>\r\n  </data>\r\n  <data name=\"tmiTools.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Nástroje</value>\r\n  </data>\r\n  <data name=\"tmiAbout.Text\" xml:space=\"preserve\">\r\n    <value>&amp;O aplikaci ...</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>68, 20</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Text\" xml:space=\"preserve\">\r\n    <value>Nápo&amp;věda</value>\r\n  </data>\r\n  <data name=\"sfdExport.Filter\" xml:space=\"preserve\">\r\n    <value>Soubory registru (*.reg)|*.reg|Soubory XML (*.xml)|*.xml|Binární soubory registru (*.*)|*.*</value>\r\n  </data>\r\n  <data name=\"sfdExport.Title\" xml:space=\"preserve\">\r\n    <value>Exportovat klíč registru</value>\r\n  </data>\r\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\r\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/\r\n        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v\r\n        7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v\r\n        5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA\r\n        ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g\r\n        sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP//\r\n        ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA\r\n        AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA\r\n        C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77\r\n        sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA\r\n        eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA\r\n        AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If///\r\n        3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\r\n        AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw\r\n        uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv\r\n        DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD\r\n        AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA==\r\n</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/frmMain.hr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"tmiNewKey.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW\r\n        aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF\r\n        B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Ključ ...</value>\r\n  </data>\r\n  <data name=\"tmiNewSep1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>268, 6</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O\r\n        gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa\r\n        SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO\r\n        gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Binarna vriejdnost ...</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Text\" xml:space=\"preserve\">\r\n    <value>&amp;DWord vrijednost ...</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Text\" xml:space=\"preserve\">\r\n    <value>&amp;QWord vrijednost ...</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Nizna vrijednost ...</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Text\" xml:space=\"preserve\">\r\n    <value>Niz za &amp;poširivanje ...</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>271, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Višenizna vrijednost ...</value>\r\n  </data>\r\n  <data name=\"tmiNew.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz\r\n        ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j\r\n        tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1\r\n        ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg\r\n        XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67\r\n        CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe\r\n        cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF\r\n        ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX\r\n        Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ\r\n        Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf\r\n        h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ\r\n        8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNew.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiNew.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Novi</value>\r\n  </data>\r\n  <data name=\"tmiRename.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X\r\n        t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW\r\n        AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD\r\n        Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV\r\n        q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj\r\n        H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRename.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiRename.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Preimenuj</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn\r\n        Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv\r\n        oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W\r\n        YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L\r\n        vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB\r\n        RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0\r\n        Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI\r\n        osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4\r\n        l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB\r\n        b88e++xiBDeHAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Uređi ...</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7\r\n        f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt\r\n        nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae\r\n        CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO\r\n        m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd\r\n        S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ\r\n        PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE\r\n        BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo\r\n        r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK\r\n        xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Izbriši</value>\r\n  </data>\r\n  <data name=\"tssCms1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>166, 6</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Text\" xml:space=\"preserve\">\r\n    <value>Pono&amp;vi</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.ToolTipText\" xml:space=\"preserve\">\r\n    <value>Ponovi sadržaj aktivnog ključa</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Odaber sve</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW\r\n        1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw\r\n        9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO\r\n        qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B\r\n        NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7\r\n        6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP\r\n        ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv\r\n        CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG\r\n        EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Kopiraci cijelu cestu</value>\r\n  </data>\r\n  <data name=\"tmiExport.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt\r\n        XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc\r\n        betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1\r\n        43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu\r\n        cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd\r\n        AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2\r\n        g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE\r\n        ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui\r\n        M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS\r\n        01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiExport.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>169, 22</value>\r\n  </data>\r\n  <data name=\"tmiExport.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Izvoz ...</value>\r\n  </data>\r\n  <data name=\"cmsContext.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>170, 186</value>\r\n  </data>\r\n  <data name=\"imlImages.ImageStream\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6\r\n        DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r\n        AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r\n        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r\n        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r\n        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm\r\n        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM\r\n        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA\r\n        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz\r\n        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ\r\n        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM\r\n        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA\r\n        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA\r\n        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ\r\n        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/\r\n        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA\r\n        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm\r\n        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ\r\n        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz\r\n        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA\r\n        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM\r\n        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM\r\n        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM\r\n        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA\r\n        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM\r\n        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ\r\n        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz\r\n        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm\r\n        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw\r\n        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA\r\n        AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/\r\n        AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA\r\n        AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/\r\n        BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs\r\n        Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/\r\n        AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5\r\n        Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs\r\n        BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s\r\n        AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs\r\n        Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs\r\n        Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA\r\n        AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs\r\n        AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH\r\n        AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs\r\n        Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB\r\n        Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA\r\n        DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH\r\n        AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH\r\n        Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/\r\n        AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH\r\n        AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs\r\n        BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo\r\n        AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA\r\n        AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA\r\n        AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB\r\n        AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg\r\n        BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB\r\n        AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes2\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F\r\n        AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs=\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes3\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl\r\n        ZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes4\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G\r\n        SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes5\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA\r\n        BmNsb3NlZP////8JBQAAAAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes6\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D\r\n        RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"cohName.Text\" xml:space=\"preserve\">\r\n    <value>Naziv</value>\r\n  </data>\r\n  <data name=\"cohType.Text\" xml:space=\"preserve\">\r\n    <value>Oblik</value>\r\n  </data>\r\n  <data name=\"cohValue.Text\" xml:space=\"preserve\">\r\n    <value>Vrijednost</value>\r\n  </data>\r\n  <data name=\"cohAlternative.Text\" xml:space=\"preserve\">\r\n    <value>Vrijednost (inače)</value>\r\n  </data>\r\n  <data name=\"tmiExit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiExit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Izlaz</value>\r\n  </data>\r\n  <data name=\"tmiFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>63, 20</value>\r\n  </data>\r\n  <data name=\"tmiFile.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Datoteka</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Jezik ...</value>\r\n  </data>\r\n  <data name=\"tssTools1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>149, 6</value>\r\n  </data>\r\n  <data name=\"tmiJump.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiJump.Text\" xml:space=\"preserve\">\r\n    <value>Ići za &amp;ključ ...</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Ići za isti</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Ponoviti sve</value>\r\n  </data>\r\n  <data name=\"tmiTools.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>40, 20</value>\r\n  </data>\r\n  <data name=\"tmiTools.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Alati</value>\r\n  </data>\r\n  <data name=\"tmiAbout.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>152, 22</value>\r\n  </data>\r\n  <data name=\"tmiAbout.Text\" xml:space=\"preserve\">\r\n    <value>&amp;O aplikaciji ...</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>50, 20</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Pomoć</value>\r\n  </data>\r\n  <data name=\"sfdExport.Filter\" xml:space=\"preserve\">\r\n    <value>Datotege registara (*.reg)|*.reg|XML datoteke (*.xml)|*.xml|Binarne datoteke registara (*.*)|*.*</value>\r\n  </data>\r\n  <data name=\"sfdExport.Title\" xml:space=\"preserve\">\r\n    <value>Izvoz ključa registara</value>\r\n  </data>\r\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\r\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/\r\n        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v\r\n        7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v\r\n        5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA\r\n        ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g\r\n        sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP//\r\n        ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA\r\n        AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA\r\n        C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77\r\n        sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA\r\n        eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA\r\n        AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If///\r\n        3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\r\n        AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw\r\n        uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv\r\n        DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD\r\n        AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA==\r\n</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/frmMain.php",
    "content": "<?\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace Microsoft:::Win32;\r\n    import namespace System;\r\n    \r\n    namespace RegEditPHP {\r\n        \r\n        [Export]\r\n        partial class frmMain extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $tscMain;\r\n            \r\n            private $mnsMain;\r\n            \r\n            private $tmiFile;\r\n            \r\n            private $tmiExit;\r\n            \r\n            private $cohName;\r\n            \r\n            private $cohValue;\r\n            \r\n            private $splMain;\r\n            \r\n            private $tvwRegistry;\r\n            \r\n            private $lvwRegistry;\r\n            \r\n            private $cohType;\r\n            \r\n            private $imlImages;\r\n            \r\n            private $cmsContext;\r\n            \r\n            private $tmiNew;\r\n            \r\n            private $tmiNewKey;\r\n            \r\n            private $tmiNewSep1;\r\n            \r\n            private $tmiNewBinary;\r\n            \r\n            private $tmiNewDWord;\r\n            \r\n            private $tmiNewQWord;\r\n            \r\n            private $tmiNewString;\r\n            \r\n            private $tmiNewExpandable;\r\n            \r\n            private $tmiNewMulti;\r\n            \r\n            private $tmiRename;\r\n            \r\n            private $tmiEdit;\r\n            \r\n            private $tmiDelete;\r\n            \r\n            private $stsStatus;\r\n            \r\n            private $tslKey;\r\n            \r\n            private $cohAlternative;\r\n            \r\n            private $tssCms1;\r\n            \r\n            private $tmiRefreshNode;\r\n            \r\n            private $tmiSelectAll;\r\n            \r\n            private $tmiTools;\r\n            \r\n            private $tmiLanguage;\r\n            \r\n            private $tmiJump;\r\n            \r\n            private $tmiRefreshAll;\r\n            \r\n            private $tssTools1;\r\n            \r\n            private $tmiJumpToSame;\r\n            \r\n            private $tmiCopyFullPath;\r\n            \r\n            private $tmiExport;\r\n            \r\n            private $sfdExport;\r\n            \r\n            private $tmiHelp;\r\n            \r\n            private $tmiAbout;\r\n            \r\n            private $components;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n                $this->Init();\r\n            }\r\n            \r\n            public function InitializeComponent() {\r\n                $this->components = new System:::ComponentModel:::Container();\r\n                $resources = new System:::ComponentModel:::ComponentResourceManager(CLRTypeOf frmMain );\r\n                $this->tscMain = new System:::Windows:::Forms:::ToolStripContainer();\r\n                $this->stsStatus = new System:::Windows:::Forms:::StatusStrip();\r\n                $this->tslKey = new System:::Windows:::Forms:::ToolStripStatusLabel();\r\n                $this->splMain = new System:::Windows:::Forms:::SplitContainer();\r\n                $this->tvwRegistry = new System:::Windows:::Forms:::TreeView();\r\n                $this->cmsContext = new System:::Windows:::Forms:::ContextMenuStrip($this->components);\r\n                $this->tmiNew = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewKey = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewSep1 = new System:::Windows:::Forms:::ToolStripSeparator();\r\n                $this->tmiNewBinary = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewDWord = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewQWord = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewString = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewExpandable = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiNewMulti = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiRename = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiEdit = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiDelete = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tssCms1 = new System:::Windows:::Forms:::ToolStripSeparator();\r\n                $this->tmiRefreshNode = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiSelectAll = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiCopyFullPath = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiExport = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->imlImages = new System:::Windows:::Forms:::ImageList($this->components);\r\n                $this->lvwRegistry = new System:::Windows:::Forms:::ListView();\r\n                $this->cohName = new System:::Windows:::Forms:::ColumnHeader($resources->GetString(\"lvwRegistry.Columns\"));\r\n                $this->cohType = new System:::Windows:::Forms:::ColumnHeader();\r\n                $this->cohValue = new System:::Windows:::Forms:::ColumnHeader();\r\n                $this->cohAlternative = new System:::Windows:::Forms:::ColumnHeader();\r\n                $this->mnsMain = new System:::Windows:::Forms:::MenuStrip();\r\n                $this->tmiFile = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiExit = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiTools = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiLanguage = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tssTools1 = new System:::Windows:::Forms:::ToolStripSeparator();\r\n                $this->tmiJump = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiJumpToSame = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiRefreshAll = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiHelp = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->tmiAbout = new System:::Windows:::Forms:::ToolStripMenuItem();\r\n                $this->sfdExport = new System:::Windows:::Forms:::SaveFileDialog();\r\n                $this->tscMain->BottomToolStripPanel->SuspendLayout();\r\n                $this->tscMain->ContentPanel->SuspendLayout();\r\n                $this->tscMain->TopToolStripPanel->SuspendLayout();\r\n                $this->tscMain->SuspendLayout();\r\n                $this->stsStatus->SuspendLayout();\r\n                $this->splMain->Panel1->SuspendLayout();\r\n                $this->splMain->Panel2->SuspendLayout();\r\n                $this->splMain->SuspendLayout();\r\n                $this->cmsContext->SuspendLayout();\r\n                $this->mnsMain->SuspendLayout();\r\n                $this->SuspendLayout();\r\n                // \r\n                // tscMain\r\n                // \r\n                $this->tscMain->AccessibleDescription = NULL;\r\n                $this->tscMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tscMain, \"tscMain\");\r\n                // \r\n                // tscMain.BottomToolStripPanel\r\n                // \r\n                $this->tscMain->BottomToolStripPanel->AccessibleDescription = NULL;\r\n                $this->tscMain->BottomToolStripPanel->AccessibleName = NULL;\r\n                $this->tscMain->BottomToolStripPanel->BackgroundImage = NULL;\r\n                $resources->ApplyResources($this->tscMain->BottomToolStripPanel, \"tscMain.BottomToolStripPanel\");\r\n                $this->tscMain->BottomToolStripPanel->Controls->Add($this->stsStatus);\r\n                $this->tscMain->BottomToolStripPanel->Font = NULL;\r\n                // \r\n                // tscMain.ContentPanel\r\n                // \r\n                $this->tscMain->ContentPanel->AccessibleDescription = NULL;\r\n                $this->tscMain->ContentPanel->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tscMain->ContentPanel, \"tscMain.ContentPanel\");\r\n                $this->tscMain->ContentPanel->BackgroundImage = NULL;\r\n                $this->tscMain->ContentPanel->Controls->Add($this->splMain);\r\n                $this->tscMain->ContentPanel->Font = NULL;\r\n                $this->tscMain->Font = NULL;\r\n                // \r\n                // tscMain.LeftToolStripPanel\r\n                // \r\n                $this->tscMain->LeftToolStripPanel->AccessibleDescription = NULL;\r\n                $this->tscMain->LeftToolStripPanel->AccessibleName = NULL;\r\n                $this->tscMain->LeftToolStripPanel->BackgroundImage = NULL;\r\n                $resources->ApplyResources($this->tscMain->LeftToolStripPanel, \"tscMain.LeftToolStripPanel\");\r\n                $this->tscMain->LeftToolStripPanel->Font = NULL;\r\n                $this->tscMain->Name = \"tscMain\";\r\n                // \r\n                // tscMain.RightToolStripPanel\r\n                // \r\n                $this->tscMain->RightToolStripPanel->AccessibleDescription = NULL;\r\n                $this->tscMain->RightToolStripPanel->AccessibleName = NULL;\r\n                $this->tscMain->RightToolStripPanel->BackgroundImage = NULL;\r\n                $resources->ApplyResources($this->tscMain->RightToolStripPanel, \"tscMain.RightToolStripPanel\");\r\n                $this->tscMain->RightToolStripPanel->Font = NULL;\r\n                // \r\n                // tscMain.TopToolStripPanel\r\n                // \r\n                $this->tscMain->TopToolStripPanel->AccessibleDescription = NULL;\r\n                $this->tscMain->TopToolStripPanel->AccessibleName = NULL;\r\n                $this->tscMain->TopToolStripPanel->BackgroundImage = NULL;\r\n                $resources->ApplyResources($this->tscMain->TopToolStripPanel, \"tscMain.TopToolStripPanel\");\r\n                $this->tscMain->TopToolStripPanel->Controls->Add($this->mnsMain);\r\n                $this->tscMain->TopToolStripPanel->Font = NULL;\r\n                // \r\n                // stsStatus\r\n                // \r\n                $this->stsStatus->AccessibleDescription = NULL;\r\n                $this->stsStatus->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->stsStatus, \"stsStatus\");\r\n                $this->stsStatus->BackgroundImage = NULL;\r\n                $this->stsStatus->Font = NULL;\r\n                $this->stsStatus->Items->AddRange(array($this->tslKey));\r\n                $this->stsStatus->Name = \"stsStatus\";\r\n                // \r\n                // tslKey\r\n                // \r\n                $this->tslKey->AccessibleDescription = NULL;\r\n                $this->tslKey->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tslKey, \"tslKey\");\r\n                $this->tslKey->BackgroundImage = NULL;\r\n                $this->tslKey->Name = \"tslKey\";\r\n                // \r\n                // splMain\r\n                // \r\n                $this->splMain->AccessibleDescription = NULL;\r\n                $this->splMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->splMain, \"splMain\");\r\n                $this->splMain->BackgroundImage = NULL;\r\n                $this->splMain->Font = NULL;\r\n                $this->splMain->Name = \"splMain\";\r\n                // \r\n                // splMain.Panel1\r\n                // \r\n                $this->splMain->Panel1->AccessibleDescription = NULL;\r\n                $this->splMain->Panel1->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->splMain->Panel1, \"splMain.Panel1\");\r\n                $this->splMain->Panel1->BackgroundImage = NULL;\r\n                $this->splMain->Panel1->Controls->Add($this->tvwRegistry);\r\n                $this->splMain->Panel1->Font = NULL;\r\n                // \r\n                // splMain.Panel2\r\n                // \r\n                $this->splMain->Panel2->AccessibleDescription = NULL;\r\n                $this->splMain->Panel2->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->splMain->Panel2, \"splMain.Panel2\");\r\n                $this->splMain->Panel2->BackgroundImage = NULL;\r\n                $this->splMain->Panel2->Controls->Add($this->lvwRegistry);\r\n                $this->splMain->Panel2->Font = NULL;\r\n                // \r\n                // tvwRegistry\r\n                // \r\n                $this->tvwRegistry->AccessibleDescription = NULL;\r\n                $this->tvwRegistry->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tvwRegistry, \"tvwRegistry\");\r\n                $this->tvwRegistry->BackgroundImage = NULL;\r\n                $this->tvwRegistry->ContextMenuStrip = $this->cmsContext;\r\n                $this->tvwRegistry->Font = NULL;\r\n                $this->tvwRegistry->HideSelection = false;\r\n                $this->tvwRegistry->ImageList = $this->imlImages;\r\n                $this->tvwRegistry->LabelEdit = true;\r\n                $this->tvwRegistry->Name = \"tvwRegistry\";\r\n                $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\")));\r\n                $this->tvwRegistry->AfterCollapse->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, \"tvwRegistry_AfterCollapse\")));\r\n                $this->tvwRegistry->AfterLabelEdit->Add(new System:::Windows:::Forms:::NodeLabelEditEventHandler(array($this, \"tvwRegistry_AfterLabelEdit\")));\r\n                $this->tvwRegistry->BeforeExpand->Add(new System:::Windows:::Forms:::TreeViewCancelEventHandler(array($this, \"tvwRegistry_BeforeExpand\")));\r\n                $this->tvwRegistry->AfterSelect->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, \"tvwRegistry_AfterSelect\")));\r\n                $this->tvwRegistry->MouseDown->Add(new System:::Windows:::Forms:::MouseEventHandler(array($this, \"tvwRegistry_MouseDown\")));\r\n                $this->tvwRegistry->BeforeLabelEdit->Add(new System:::Windows:::Forms:::NodeLabelEditEventHandler(array($this, \"tvwRegistry_BeforeLabelEdit\")));\r\n                $this->tvwRegistry->KeyDown->Add(new System:::Windows:::Forms:::KeyEventHandler(array($this, \"tvwRegistry_KeyDown\")));\r\n                $this->tvwRegistry->AfterExpand->Add(new System:::Windows:::Forms:::TreeViewEventHandler(array($this, \"tvwRegistry_AfterExpand\")));\r\n                // \r\n                // cmsContext\r\n                // \r\n                $this->cmsContext->AccessibleDescription = NULL;\r\n                $this->cmsContext->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->cmsContext, \"cmsContext\");\r\n                $this->cmsContext->BackgroundImage = NULL;\r\n                $this->cmsContext->Font = NULL;\r\n                $this->cmsContext->Items->AddRange(array($this->tmiNew, $this->tmiRename, $this->tmiEdit, $this->tmiDelete, $this->tssCms1, $this->tmiRefreshNode, $this->tmiSelectAll, $this->tmiCopyFullPath, $this->tmiExport));\r\n                $this->cmsContext->Name = \"cmsContext\";\r\n                $this->cmsContext->Opening->Add(new System:::ComponentModel:::CancelEventHandler(array($this, \"cmsContext_Opening\")));\r\n                // \r\n                // tmiNew\r\n                // \r\n                $this->tmiNew->AccessibleDescription = NULL;\r\n                $this->tmiNew->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNew, \"tmiNew\");\r\n                $this->tmiNew->BackgroundImage = NULL;\r\n                $this->tmiNew->DropDownItems->AddRange(array($this->tmiNewKey, $this->tmiNewSep1, $this->tmiNewBinary, $this->tmiNewDWord, $this->tmiNewQWord, $this->tmiNewString, $this->tmiNewExpandable, $this->tmiNewMulti));\r\n                $this->tmiNew->Name = \"tmiNew\";\r\n                $this->tmiNew->ShortcutKeyDisplayString = NULL;\r\n                // \r\n                // tmiNewKey\r\n                // \r\n                $this->tmiNewKey->AccessibleDescription = NULL;\r\n                $this->tmiNewKey->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewKey, \"tmiNewKey\");\r\n                $this->tmiNewKey->BackgroundImage = NULL;\r\n                $this->tmiNewKey->Name = \"tmiNewKey\";\r\n                $this->tmiNewKey->Click->Add(new System:::EventHandler(array($this, \"tmiNewKey_Click\")));\r\n                // \r\n                // tmiNewSep1\r\n                // \r\n                $this->tmiNewSep1->AccessibleDescription = NULL;\r\n                $this->tmiNewSep1->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewSep1, \"tmiNewSep1\");\r\n                $this->tmiNewSep1->Name = \"tmiNewSep1\";\r\n                // \r\n                // tmiNewBinary\r\n                // \r\n                $this->tmiNewBinary->AccessibleDescription = NULL;\r\n                $this->tmiNewBinary->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewBinary, \"tmiNewBinary\");\r\n                $this->tmiNewBinary->BackgroundImage = NULL;\r\n                $this->tmiNewBinary->Name = \"tmiNewBinary\";\r\n                $this->tmiNewBinary->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiNewDWord\r\n                // \r\n                $this->tmiNewDWord->AccessibleDescription = NULL;\r\n                $this->tmiNewDWord->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewDWord, \"tmiNewDWord\");\r\n                $this->tmiNewDWord->BackgroundImage = NULL;\r\n                $this->tmiNewDWord->Name = \"tmiNewDWord\";\r\n                $this->tmiNewDWord->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiNewQWord\r\n                // \r\n                $this->tmiNewQWord->AccessibleDescription = NULL;\r\n                $this->tmiNewQWord->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewQWord, \"tmiNewQWord\");\r\n                $this->tmiNewQWord->BackgroundImage = NULL;\r\n                $this->tmiNewQWord->Name = \"tmiNewQWord\";\r\n                $this->tmiNewQWord->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiNewString\r\n                // \r\n                $this->tmiNewString->AccessibleDescription = NULL;\r\n                $this->tmiNewString->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewString, \"tmiNewString\");\r\n                $this->tmiNewString->BackgroundImage = NULL;\r\n                $this->tmiNewString->Name = \"tmiNewString\";\r\n                $this->tmiNewString->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiNewExpandable\r\n                // \r\n                $this->tmiNewExpandable->AccessibleDescription = NULL;\r\n                $this->tmiNewExpandable->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewExpandable, \"tmiNewExpandable\");\r\n                $this->tmiNewExpandable->BackgroundImage = NULL;\r\n                $this->tmiNewExpandable->Name = \"tmiNewExpandable\";\r\n                $this->tmiNewExpandable->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiNewMulti\r\n                // \r\n                $this->tmiNewMulti->AccessibleDescription = NULL;\r\n                $this->tmiNewMulti->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiNewMulti, \"tmiNewMulti\");\r\n                $this->tmiNewMulti->BackgroundImage = NULL;\r\n                $this->tmiNewMulti->Name = \"tmiNewMulti\";\r\n                $this->tmiNewMulti->Click->Add(new System:::EventHandler(array($this, \"tmiNewValue_Click\")));\r\n                // \r\n                // tmiRename\r\n                // \r\n                $this->tmiRename->AccessibleDescription = NULL;\r\n                $this->tmiRename->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiRename, \"tmiRename\");\r\n                $this->tmiRename->BackgroundImage = NULL;\r\n                $this->tmiRename->Name = \"tmiRename\";\r\n                $this->tmiRename->Click->Add(new System:::EventHandler(array($this, \"tmiRename_Click\")));\r\n                // \r\n                // tmiEdit\r\n                // \r\n                $this->tmiEdit->AccessibleDescription = NULL;\r\n                $this->tmiEdit->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiEdit, \"tmiEdit\");\r\n                $this->tmiEdit->BackgroundImage = NULL;\r\n                $this->tmiEdit->Name = \"tmiEdit\";\r\n                $this->tmiEdit->Click->Add(new System:::EventHandler(array($this, \"tmiEdit_Click\")));\r\n                // \r\n                // tmiDelete\r\n                // \r\n                $this->tmiDelete->AccessibleDescription = NULL;\r\n                $this->tmiDelete->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiDelete, \"tmiDelete\");\r\n                $this->tmiDelete->BackgroundImage = NULL;\r\n                $this->tmiDelete->Name = \"tmiDelete\";\r\n                $this->tmiDelete->Click->Add(new System:::EventHandler(array($this, \"tmiDelete_Click\")));\r\n                // \r\n                // tssCms1\r\n                // \r\n                $this->tssCms1->AccessibleDescription = NULL;\r\n                $this->tssCms1->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tssCms1, \"tssCms1\");\r\n                $this->tssCms1->Name = \"tssCms1\";\r\n                // \r\n                // tmiRefreshNode\r\n                // \r\n                $this->tmiRefreshNode->AccessibleDescription = NULL;\r\n                $this->tmiRefreshNode->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiRefreshNode, \"tmiRefreshNode\");\r\n                $this->tmiRefreshNode->BackgroundImage = NULL;\r\n                $this->tmiRefreshNode->Name = \"tmiRefreshNode\";\r\n                $this->tmiRefreshNode->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiRefreshNode->Click->Add(new System:::EventHandler(array($this, \"tmiRefreshNode_Click\")));\r\n                // \r\n                // tmiSelectAll\r\n                // \r\n                $this->tmiSelectAll->AccessibleDescription = NULL;\r\n                $this->tmiSelectAll->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiSelectAll, \"tmiSelectAll\");\r\n                $this->tmiSelectAll->BackgroundImage = NULL;\r\n                $this->tmiSelectAll->Name = \"tmiSelectAll\";\r\n                $this->tmiSelectAll->Click->Add(new System:::EventHandler(array($this, \"tmiSelectAll_Click\")));\r\n                // \r\n                // tmiCopyFullPath\r\n                // \r\n                $this->tmiCopyFullPath->AccessibleDescription = NULL;\r\n                $this->tmiCopyFullPath->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiCopyFullPath, \"tmiCopyFullPath\");\r\n                $this->tmiCopyFullPath->BackgroundImage = NULL;\r\n                $this->tmiCopyFullPath->Name = \"tmiCopyFullPath\";\r\n                $this->tmiCopyFullPath->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiCopyFullPath->Click->Add(new System:::EventHandler(array($this, \"tmiCopyFullPath_Click\")));\r\n                // \r\n                // tmiExport\r\n                // \r\n                $this->tmiExport->AccessibleDescription = NULL;\r\n                $this->tmiExport->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiExport, \"tmiExport\");\r\n                $this->tmiExport->BackgroundImage = NULL;\r\n                $this->tmiExport->Name = \"tmiExport\";\r\n                $this->tmiExport->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiExport->Click->Add(new System:::EventHandler(array($this, \"tmiExport_Click\")));\r\n                // \r\n                // imlImages\r\n                // \r\n                $this->imlImages->ImageStream = $resources->GetObject(\"imlImages.ImageStream\");\r\n                $this->imlImages->TransparentColor = System:::Drawing:::Color::$Transparent;\r\n                $this->imlImages->Images->SetKeyName(0, \"binary\");\r\n                $this->imlImages->Images->SetKeyName(1, \"closed\");\r\n                $this->imlImages->Images->SetKeyName(2, \"open\");\r\n                $this->imlImages->Images->SetKeyName(3, \"string\");\r\n                $this->imlImages->Images->SetKeyName(4, \"unknown\");\r\n                $this->imlImages->Images->SetKeyName(5, \"numeric\");\r\n                $this->imlImages->Images->SetKeyName(6, \"desc\");\r\n                $this->imlImages->Images->SetKeyName(7, \"asc\");\r\n                // \r\n                // lvwRegistry\r\n                // \r\n                $this->lvwRegistry->AccessibleDescription = NULL;\r\n                $this->lvwRegistry->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->lvwRegistry, \"lvwRegistry\");\r\n                $this->lvwRegistry->BackgroundImage = NULL;\r\n                $this->lvwRegistry->Columns->AddRange(array($this->cohName, $this->cohType, $this->cohValue, $this->cohAlternative));\r\n                $this->lvwRegistry->ContextMenuStrip = $this->cmsContext;\r\n                $this->lvwRegistry->Font = NULL;\r\n                $this->lvwRegistry->FullRowSelect = true;\r\n                $this->lvwRegistry->HideSelection = false;\r\n                $this->lvwRegistry->LabelEdit = true;\r\n                $this->lvwRegistry->Name = \"lvwRegistry\";\r\n                $this->lvwRegistry->SmallImageList = $this->imlImages;\r\n                $this->lvwRegistry->Sorting = System:::Windows:::Forms:::SortOrder::Ascending;\r\n                $this->lvwRegistry->UseCompatibleStateImageBehavior = false;\r\n                $this->lvwRegistry->View = System:::Windows:::Forms:::View::Details;\r\n                $this->lvwRegistry->ItemActivate->Add(new System:::EventHandler(array($this, \"lvwRegistry_ItemActivate\")));\r\n                $this->lvwRegistry->AfterLabelEdit->Add(new System:::Windows:::Forms:::LabelEditEventHandler(array($this, \"lvwRegistry_AfterLabelEdit\")));\r\n                $this->lvwRegistry->ColumnClick->Add(new System:::Windows:::Forms:::ColumnClickEventHandler(array($this, \"lvwRegistry_ColumnClick\")));\r\n                $this->lvwRegistry->KeyDown->Add(new System:::Windows:::Forms:::KeyEventHandler(array($this, \"lvwRegistry_KeyDown\")));\r\n                // \r\n                // cohName\r\n                // \r\n                $resources->ApplyResources($this->cohName, \"cohName\");\r\n                // \r\n                // cohType\r\n                // \r\n                $resources->ApplyResources($this->cohType, \"cohType\");\r\n                // \r\n                // cohValue\r\n                // \r\n                $resources->ApplyResources($this->cohValue, \"cohValue\");\r\n                // \r\n                // cohAlternative\r\n                // \r\n                $resources->ApplyResources($this->cohAlternative, \"cohAlternative\");\r\n                // \r\n                // mnsMain\r\n                // \r\n                $this->mnsMain->AccessibleDescription = NULL;\r\n                $this->mnsMain->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->mnsMain, \"mnsMain\");\r\n                $this->mnsMain->BackgroundImage = NULL;\r\n                $this->mnsMain->Font = NULL;\r\n                $this->mnsMain->Items->AddRange(array($this->tmiFile, $this->tmiTools, $this->tmiHelp));\r\n                $this->mnsMain->Name = \"mnsMain\";\r\n                // \r\n                // tmiFile\r\n                // \r\n                $this->tmiFile->AccessibleDescription = NULL;\r\n                $this->tmiFile->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiFile, \"tmiFile\");\r\n                $this->tmiFile->BackgroundImage = NULL;\r\n                $this->tmiFile->DropDownItems->AddRange(array($this->tmiExit));\r\n                $this->tmiFile->Name = \"tmiFile\";\r\n                $this->tmiFile->ShortcutKeyDisplayString = NULL;\r\n                // \r\n                // tmiExit\r\n                // \r\n                $this->tmiExit->AccessibleDescription = NULL;\r\n                $this->tmiExit->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiExit, \"tmiExit\");\r\n                $this->tmiExit->BackgroundImage = NULL;\r\n                $this->tmiExit->Name = \"tmiExit\";\r\n                $this->tmiExit->Click->Add(new System:::EventHandler(array($this, \"tmiExit_Click\")));\r\n                // \r\n                // tmiTools\r\n                // \r\n                $this->tmiTools->AccessibleDescription = NULL;\r\n                $this->tmiTools->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiTools, \"tmiTools\");\r\n                $this->tmiTools->BackgroundImage = NULL;\r\n                $this->tmiTools->DropDownItems->AddRange(array($this->tmiLanguage, $this->tssTools1, $this->tmiJump, $this->tmiJumpToSame, $this->tmiRefreshAll));\r\n                $this->tmiTools->Name = \"tmiTools\";\r\n                $this->tmiTools->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiTools->DropDownOpening->Add(new System:::EventHandler(array($this, \"tmiTools_DropDownOpening\")));\r\n                // \r\n                // tmiLanguage\r\n                // \r\n                $this->tmiLanguage->AccessibleDescription = NULL;\r\n                $this->tmiLanguage->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiLanguage, \"tmiLanguage\");\r\n                $this->tmiLanguage->BackgroundImage = NULL;\r\n                $this->tmiLanguage->Name = \"tmiLanguage\";\r\n                $this->tmiLanguage->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiLanguage->Click->Add(new System:::EventHandler(array($this, \"tmiLanguage_Click\")));\r\n                // \r\n                // tssTools1\r\n                // \r\n                $this->tssTools1->AccessibleDescription = NULL;\r\n                $this->tssTools1->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tssTools1, \"tssTools1\");\r\n                $this->tssTools1->Name = \"tssTools1\";\r\n                // \r\n                // tmiJump\r\n                // \r\n                $this->tmiJump->AccessibleDescription = NULL;\r\n                $this->tmiJump->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiJump, \"tmiJump\");\r\n                $this->tmiJump->BackgroundImage = NULL;\r\n                $this->tmiJump->Name = \"tmiJump\";\r\n                $this->tmiJump->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiJump->Click->Add(new System:::EventHandler(array($this, \"tmiJump_Click\")));\r\n                // \r\n                // tmiJumpToSame\r\n                // \r\n                $this->tmiJumpToSame->AccessibleDescription = NULL;\r\n                $this->tmiJumpToSame->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiJumpToSame, \"tmiJumpToSame\");\r\n                $this->tmiJumpToSame->BackgroundImage = NULL;\r\n                $this->tmiJumpToSame->Name = \"tmiJumpToSame\";\r\n                $this->tmiJumpToSame->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiJumpToSame->Click->Add(new System:::EventHandler(array($this, \"tmiJumpToSame_Click\")));\r\n                // \r\n                // tmiRefreshAll\r\n                // \r\n                $this->tmiRefreshAll->AccessibleDescription = NULL;\r\n                $this->tmiRefreshAll->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiRefreshAll, \"tmiRefreshAll\");\r\n                $this->tmiRefreshAll->BackgroundImage = NULL;\r\n                $this->tmiRefreshAll->Name = \"tmiRefreshAll\";\r\n                $this->tmiRefreshAll->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiRefreshAll->Click->Add(new System:::EventHandler(array($this, \"tmiRefreshAll_Click\")));\r\n                // \r\n                // tmiHelp\r\n                // \r\n                $this->tmiHelp->AccessibleDescription = NULL;\r\n                $this->tmiHelp->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiHelp, \"tmiHelp\");\r\n                $this->tmiHelp->BackgroundImage = NULL;\r\n                $this->tmiHelp->DropDownItems->AddRange(array($this->tmiAbout));\r\n                $this->tmiHelp->Name = \"tmiHelp\";\r\n                $this->tmiHelp->ShortcutKeyDisplayString = NULL;\r\n                // \r\n                // tmiAbout\r\n                // \r\n                $this->tmiAbout->AccessibleDescription = NULL;\r\n                $this->tmiAbout->AccessibleName = NULL;\r\n                $resources->ApplyResources($this->tmiAbout, \"tmiAbout\");\r\n                $this->tmiAbout->BackgroundImage = NULL;\r\n                $this->tmiAbout->Name = \"tmiAbout\";\r\n                $this->tmiAbout->ShortcutKeyDisplayString = NULL;\r\n                $this->tmiAbout->Click->Add(new System:::EventHandler(array($this, \"tmiAbout_Click\")));\r\n                // \r\n                // sfdExport\r\n                // \r\n                $this->sfdExport->DefaultExt = \"reg\";\r\n                $resources->ApplyResources($this->sfdExport, \"sfdExport\");\r\n                // \r\n                // frmMain\r\n                // \r\n                $this->AccessibleDescription = NULL;\r\n                $this->AccessibleName = NULL;\r\n                $resources->ApplyResources($this, \"\\$this\");\r\n                $this->AutoScaleMode = System:::Windows:::Forms:::AutoScaleMode::Font;\r\n                $this->BackgroundImage = NULL;\r\n                $this->Controls->Add($this->tscMain);\r\n                $this->Font = NULL;\r\n                $this->MainMenuStrip = $this->mnsMain;\r\n                $this->Name = \"frmMain\";\r\n                $this->Load->Add(new System:::EventHandler(array($this, \"frmMain_Load\")));\r\n                $this->FormClosed->Add(new System:::Windows:::Forms:::FormClosedEventHandler(array($this, \"frmMain_FormClosed\")));\r\n                $this->tscMain->BottomToolStripPanel->ResumeLayout(false);\r\n                $this->tscMain->BottomToolStripPanel->PerformLayout();\r\n                $this->tscMain->ContentPanel->ResumeLayout(false);\r\n                $this->tscMain->TopToolStripPanel->ResumeLayout(false);\r\n                $this->tscMain->TopToolStripPanel->PerformLayout();\r\n                $this->tscMain->ResumeLayout(false);\r\n                $this->tscMain->PerformLayout();\r\n                $this->stsStatus->ResumeLayout(false);\r\n                $this->stsStatus->PerformLayout();\r\n                $this->splMain->Panel1->ResumeLayout(false);\r\n                $this->splMain->Panel2->ResumeLayout(false);\r\n                $this->splMain->ResumeLayout(false);\r\n                $this->cmsContext->ResumeLayout(false);\r\n                $this->mnsMain->ResumeLayout(false);\r\n                $this->mnsMain->PerformLayout();\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/frmMain.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"tscMain.ContentPanel.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 405</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.RightToolStripPanel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Binary value ...</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>40, 20</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRefreshAll.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes2\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAASSEtFWV9MT0NBTF9NQUNISU5FBgQAAAASSEtFWV9MT0NBTF9NQUNISU5F\r\n        AP////8GBQAAAAZjbG9zZWT/////BgYAAAAGY2xvc2VkAAAAAAs=\r\n</value>\r\n  </data>\r\n  <data name=\"tmiExit.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>Alt+F4</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;imlImages.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGNJREFUOE9jYKAW\r\n        aGho+I+OiTYbpPHAgQP///9nQKFB4gQNwaUZZhg2l6EYDOKQCqAGQFyHMADV+ejeQeZjNQBbGOAyZNQF\r\n        B8AJDhj+VIwFXIkFnzjcBdCkCnMSqTTBlE57BQAHeeYQb3jOvQAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohValue.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"lvwRegistry.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiExport.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"cohAlternative.Text\" xml:space=\"preserve\">\r\n    <value>Value (alternative)</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiFile.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewQWord.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel1.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.LeftToolStripPanel.Name\" xml:space=\"preserve\">\r\n    <value>tscMain.LeftToolStripPanel</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiJumpToSame.Name\" xml:space=\"preserve\">\r\n    <value>tmiJumpToSame</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;mnsMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tmiTools.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Tools</value>\r\n  </data>\r\n  <data name=\"tmiExport.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjJJREFUOE+lk91L01EYx/NP6L4boYtua2oM52Q5+JVzKMuGYUWk9os0S9NlmqhYmUYt\r\n        XyCd4tJJq9UknFTkC5giJWIsJfMtp7jE4Ss6EQy+necEO66sizzw/C4OfD7PeV5+IQD27emQ4M1rPyhc\r\n        betoda7hmX0ZzU0+1FvmUVM9B/NDD+6VTaGkeBwF+V+QmzOMa1fdDGXJ6UNgdxdQXbVFl389m1vb0CV1\r\n        43TSKx4BgfPlKhdUlK/8E/YtbyLa8BYKhQzjKYcQ2J8ucUFJ8fddBZSZ4G/eVYTpXci/OY2ThhYhsDYu\r\n        cMEN0+Qfgp3w5wkfDklOZGeNIiHeKgS1j71ckHllOEjwO9zv9uKAxg5ZHoRebxGCqspZLpAvDgYEu8Fd\r\n        AzPYH9mEM2ffIza2RgjuV0yjswNslMD5lI8wnuvj3aaGUc30bMr8C+5BovEdJMksBLdLJ9DuAtsBoMX2\r\n        g819A2V3F3lTqWFUc0a6OwDHJbRBqy0XglsFo3A8B55Yt9ni+KFLzgoKwwUTki8X8sxx8Qw+4YBGUyoE\r\n        ptwRBgOVj/w8MwnYeiNMJWFobAEjU4uQc+4gRtfKYdUxG9TqQiGgtbTUIfBsEhB8Ke8BvnqW4Jlfw/Ui\r\n        M8I1NgY3IzyqAarIPCHISP/E6l7nNR/UOhB6RMKL9l64OvrR2TOAvg9DOK43QqFuRASDDytroVRmBwkS\r\n        01J7+XrShtGS0JxpVNRtahjVTFkpCD4akSkE9FP8b/wEuMDBOdcQbKsAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lvwRegistry.Parent\" xml:space=\"preserve\">\r\n    <value>splMain.Panel2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewDWord.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiRename.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>F2</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiHelp.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>REG_EXPAND_SZ</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Text\" xml:space=\"preserve\">\r\n    <value>Jump to &amp;same</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.BottomToolStripPanel.ZOrder\" xml:space=\"preserve\">\r\n    <value>4</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.BottomToolStripPanel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>295, 405</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiRename.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>REG_DWORD</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiAbout.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Copy full path</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Text\" xml:space=\"preserve\">\r\n    <value>&amp;QWord value ...</value>\r\n  </data>\r\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"lvwRegistry.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"stsStatus.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"tmiHelp.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Help</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\r\n    <value>F5</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.LeftToolStripPanel.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"tmiEdit.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>Enter, F4</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes6\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAVSEtFWV9QRVJGT1JNQU5DRV9EQVRBBgQAAAAVSEtFWV9QRVJGT1JNQU5D\r\n        RV9EQVRBAP////8GBQAAAAZjbG9zZWT/////CQUAAAAAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRefreshNode.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>REQ_QWORD</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.LeftToolStripPanel.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tmiNewSep1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>262, 6</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tvwRegistry.Name\" xml:space=\"preserve\">\r\n    <value>tvwRegistry</value>\r\n  </data>\r\n  <data name=\"tscMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 451</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiHelp.Name\" xml:space=\"preserve\">\r\n    <value>tmiHelp</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"tmiNew.Text\" xml:space=\"preserve\">\r\n    <value>&amp;New</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\r\n    <value>frmMain</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DVVJSRU5UX1VTRVIGBAAAABFIS0VZX0NVUlJFTlRfVVNFUgD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.RightToolStripPanel.Name\" xml:space=\"preserve\">\r\n    <value>tscMain.RightToolStripPanel</value>\r\n  </data>\r\n  <data name=\"tmiExport.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Export ...</value>\r\n  </data>\r\n  <data name=\"stsStatus.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Delete</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"splMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW\r\n        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL\r\n        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm\r\n        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6\r\n        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/\r\n        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiDelete.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiExit.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiJump.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>147, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAIhJREFUOE+9kw0O\r\n        gCAIhfXmHs2bmS97DH/YoLXY2LLgg2eQSyktBa3nZEkBIGKIn4q+AaCgQDQgpdblDKfpM56fRMgeTsAa\r\n        SIj1vtb6MQAteySws62DyJ9ArFuC1Zkb8N8lWpVcEqDHMnzTzrjpDjhVa/A2db1NDp4A9CKeEg6LekOO\r\n        gMBWyy5cVhhsBP+FxlcAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.ContentPanel.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\r\n    <value>6, 13</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tssTools1.Name\" xml:space=\"preserve\">\r\n    <value>tssTools1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiJumpToSame.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"tmiRename.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X\r\n        t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW\r\n        AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD\r\n        Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV\r\n        q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj\r\n        H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"lvwRegistry.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tmiFile.Text\" xml:space=\"preserve\">\r\n    <value>&amp;File</value>\r\n  </data>\r\n  <data name=\"cmsContext.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>160, 186</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lvwRegistry.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel1.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tmiAbout.Text\" xml:space=\"preserve\">\r\n    <value>&amp;About ...</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Multistring value ...</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiEdit.Name\" xml:space=\"preserve\">\r\n    <value>tmiEdit</value>\r\n  </data>\r\n  <data name=\"tmiExit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Exit</value>\r\n  </data>\r\n  <data name=\"cohValue.Text\" xml:space=\"preserve\">\r\n    <value>Value</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"cohType.Text\" xml:space=\"preserve\">\r\n    <value>Type</value>\r\n  </data>\r\n  <data name=\"tscMain.Text\" xml:space=\"preserve\">\r\n    <value>toolStripContainer1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiJump.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.TopToolStripPanel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.RightToolStripPanel.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"cohValue.Width\" type=\"System.Int32, mscorlib\">\r\n    <value>120</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.BottomToolStripPanel.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"tmiFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>35, 20</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tssTools1.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewExpandable.Text\" xml:space=\"preserve\">\r\n    <value>Expandable string ...</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.Parent\" xml:space=\"preserve\">\r\n    <value>$this</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewMulti.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohValue.Name\" xml:space=\"preserve\">\r\n    <value>cohValue</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel2.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;sfdExport.Name\" xml:space=\"preserve\">\r\n    <value>sfdExport</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiEdit.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes5\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAANSEtFWV9EWU5fREFUQQYEAAAADUhLRVlfRFlOX0RBVEEA/////wYFAAAA\r\n        BmNsb3NlZP////8JBQAAAAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tmiJump.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Jump to key ...</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tvwRegistry.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tssCms1.Name\" xml:space=\"preserve\">\r\n    <value>tssCms1</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Key ...</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tscMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewQWord.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewQWord</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.ContentPanel.Name\" xml:space=\"preserve\">\r\n    <value>tscMain.ContentPanel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiExport.Name\" xml:space=\"preserve\">\r\n    <value>tmiExport</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohAlternative.Name\" xml:space=\"preserve\">\r\n    <value>cohAlternative</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiAbout.Name\" xml:space=\"preserve\">\r\n    <value>tmiAbout</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;mnsMain.Name\" xml:space=\"preserve\">\r\n    <value>mnsMain</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.SelectedImageIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>REG_BINARY</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;stsStatus.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain.BottomToolStripPanel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohAlternative.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain.ContentPanel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiFile.Name\" xml:space=\"preserve\">\r\n    <value>tmiFile</value>\r\n  </data>\r\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\r\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/\r\n        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAACO/vb+/m7+9gAAC7uwAAAAj+/m7+9v\r\n        7+ZgAAsAsAAAAI7+9v7+bv72YAALALAAAACP7+bv72/v5mC7uwC7sAAAhmZmZmYP//ZrsAAAALuwAI/v\r\n        5u/vYO/vuwAAAAAAuwCO/vb+/mYAC7AAAAAAAAsAj+/m7+9mBmsAAAAAAAALsI7+9v7+Zga7AAAAALAA\r\n        ALCGZmD//2YGsAAAAAC7AACwjv72Bm72BrAAC7AAuwAAsI/v5mAAAA+7u7uwALsAALCO/vZgZmZg/v5g\r\n        sAALAACwj+/mYGZvZgAAC7AAAAALsI//9mBm/mYGZrsAAAAACwAI7+9gb+9mBruwAAAAALsAAIZmYP//\r\n        ZgawAAAAAAuwAAAI7+9v7+YLsAAAALu7AAAAAIZmZmZmCwAAAACwAAAAAAAI7+9v7+sAALAAu7u7sAAA\r\n        AIiIiIiLAAC7ALsAALAAAAAAAAAACwAAuwCwAACwAAAAAAAAAAsAAAsAsAAAsAAAAAAAAAALsAAAAAAA\r\n        C7AAAAAAAAAAALAAAAAAALtgAAAAAAAAAAi7AAAAAAu2AAAAAAAAAAAIa7sAAAC7YAAAAAAAAAAACP77\r\n        sAC7uIAAAAAAAAAAAACP77sAsAAAAAAAAAAAAAAACPALu7AAAAAAAAAAAAAAAACAAAAAAAAAAAD//wAA\r\n        eH8AADh/AAAYfwAAAB8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA4AA\r\n        AAPAAAAH4AAAD/AAAH/4AAAB/AAAAf/+AAH//gAB//4AAf//AAD//gAB//4AA//+AAf//wB///+If///\r\n        3/8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\r\n        AACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAu7AAj+b+b+uw\r\n        uwCO9u9uuwALsIZmZmuwAAC7j+b+awCwsAuO9u9rALCwC4Zgb2u7sAALj+YAALsAALuO9gZrsAALsAjv\r\n        DvsAALsAAIZv+wCwu7sACIiLALCwCwAAAAuwAAC7AAAACLsAC7AAAAAAi7C7AAAAAAAIu7AAAAcAAAAD\r\n        AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAMAAMAAAADgAAAA/gAAAP4BAAD/AwAA/4cAAA==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewBinary.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewBinary</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Enabled\" type=\"System.Boolean, mscorlib\">\r\n    <value>False</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAfFJREFUOE+lk99LU3EYh0//SSlDqptu7KqbiDKlwKDwoqAgi652oVddRYZBVjMWONsW\r\n        1ixlm53pItJFysy1NJk5169Jy8A2mMo5upzTM3va+UpTF24XvfDcnO95n/f9nB+7AOm/yjv8BR15KCJw\r\n        9ofo9L7jts1brctLIenNheXoC3K56SkHa+oPlBR4BiPb+rPrv2nreoUvEOFsQ2tJieQcmBACXxTkDxCO\r\n        qdx3vEQeUXEPK7j8Co8GFMy9C4Lzd+OHtm4ldXqD+Q1W17KoSxniyZQQFFZz9xyVlwI6eYlkd/vFfR2B\r\n        NUz9KtflnzQ+jtH1ev4fQYM1iXdUZX9dn46QSJZcXj33clpjTkkzE1/kU2we+4uEELTIWUF4epELpgT7\r\n        6p6z93QPFbVP9GNJ0vOuZLT8ZKM9yhXLR+65ZrZtoP7SmJ5dITC1hFUex3Dy4aZATWX4/D3JxNc4wfAP\r\n        ht5/o6lj4/Ve605htCQ4dyfKqRuTAqs8hqGmfVNQWX2RQhrNk0Kg5eIlFY2p2DKDIRXPmwUe9AQprzJv\r\n        CHb6UOqbR4Vg6+S/G7S731J21FRccOaqn/TqOvbeEDbPONZnY2Ky3mxxjrDnyK3igiqjL/e0XYKKWgeG\r\n        EzbKj7dRdqw119zC7sM3iwt2ilZ4veTfVkr0By//4cDea+9lAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;sfdExport.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tvwRegistry.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;mnsMain.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain.TopToolStripPanel</value>\r\n  </data>\r\n  <data name=\"cohAlternative.Width\" type=\"System.Int32, mscorlib\">\r\n    <value>120</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewString.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewString</value>\r\n  </data>\r\n  <data name=\"tmiExport.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.ContentPanel.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"stsStatus.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNew.Name\" xml:space=\"preserve\">\r\n    <value>tmiNew</value>\r\n  </data>\r\n  <data name=\"mnsMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewDWord.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewDWord</value>\r\n  </data>\r\n  <data name=\"tmiNew.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAApdJREFUOE+Nkt9PUnEYxukv6K6L5uZF3nTTbOuiuumiKy8Sy7W5tdZF6DDMtMylSWUz\r\n        ZoVmuJjMBMTI9My0peVmDX+loagF/QJU8HcCogI7Bzic8/Q9HLZu3PC7vfvuvXg/z/M+ew8AkKR77r6j\r\n        tkMZh0MHM09mzI93ZWWdPrdIB1yONfdiTCIA0lXcKTV7B48Du2qsjBaQvwmeD8cQsef0pR1Own3VLoS1\r\n        ADuJ8FoP+ccg9FvOmvTqAsDZnckvWfIR+dsLDjug/f0Q+tWhE/sDEAd3sdtMIWqhCIQiTijSg/Or9gdg\r\n        XXl5no/ZFLeppIL6M8CQTMxg4QYkhjc/0PbagdZX36Brn8UL/TQ0OiueaSfw9Pko6hssMLfUYqRXCf67\r\n        CtvduQj0FCA8X4J16yVI9J0O8DwPluMRYznQUQ4hmkMwkoBvh8VakIXXFwcMOuBeNXBFClw4AvX5UyQe\r\n        cgJtZjs4MlzesgqFZgWyhmVcrvfCH2KxsZ3AcmDv4bJbXSLgJbHOJnhcrPNAen8BOdVunK10YVNQ32JF\r\n        ZWUVUc4F8kVlq4vB9bJOEaAzzSHO8mDiHCIMh21i3R9KYJ1Y38v29DyDCScDRalZBLQYZxAlw486ZlDX\r\n        Po2HRise6CeBgC21M1FO7XyzcQBl6vcY/8OgWNEhArR6G+gYCY5JJNV9uyl1ASAUWUGwPeuJYsrN4AsZ\r\n        Hv1FQ15sEgHNrVOIkOSTDkzEgUF0YMsmV54armweQkXTIEQH/Rj+SaNQ3i4CNLqvSfVgOJEMbj0Yh9cf\r\n        h3sjht+rMdiXYphd/K8+QtQ/O2jIigwiQDgYtWYMjxuHUffkE2pVg1DWDqCq5h1u33mL8goKpSRxRYkZ\r\n        8msmFBYZcVWmT5YA+Aehl/jy7tE8WgAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"splMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 405</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"tmiNewQWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiCopyFullPath.Name\" xml:space=\"preserve\">\r\n    <value>tmiCopyFullPath</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Edit ...</value>\r\n  </data>\r\n  <data name=\"lvwRegistry.Columns\" xml:space=\"preserve\">\r\n    <value>asc</value>\r\n  </data>\r\n  <data name=\"tscMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lvwRegistry.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>REG_MULTI_SZ</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.RightToolStripPanel.ZOrder\" xml:space=\"preserve\">\r\n    <value>2</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.ToolTipText\" xml:space=\"preserve\">\r\n    <value>Refresh content of current node</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes4\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAATSEtFWV9DVVJSRU5UX0NPTkZJRwYEAAAAE0hLRVlfQ1VSUkVOVF9DT05G\r\n        SUcA/////wYFAAAABmNsb3NlZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAhJJREFUOE+Vk31LU2EYxif0TfoCwf7qSyTVB5Aos2bDRubKajGsRGz1RwQuSsssI0Vn\r\n        Ls2ypA10ypbBKtecx9f1QiJkpaTJr/t+9nKwlOiBH+dwnnNf1/Xc9zklgOO/VukOU5CY23A4xylxXAkv\r\n        oFzt+0ggnKUxNEtD5xT1D1JcbEvib36Fr2mU2mtRaAmCr5b4LofBmAcezfNrA4OudbmursPyT1j8AR+W\r\n        YXpJNvLFlJXCvp1c3rs7J9DYPcOaFCl14rgV2xUbgYbODCtrGNR5Rfgm7kur8Pl73vncaSjbA/tzzp4L\r\n        vcbdCFxqn+CrFCh/um/lnHiT2SxQ15o0Z1VUwOnEwGLcNMw45888tgAj45N4/D12An9zgqw0SlGB4lIB\r\n        RZqnsXVveB5exjNUne+yBXxNMSzpslIQCAaDuTHli/Vt3YvMwFAsg/vMQ1tA55v6gmFTAjuLudO95xb0\r\n        Ry0qT7XbAt7AIK8/YdhujIXnAxl4HLFwnbxrC1TX9zMqzVHGshCTc47I/fAcRGcl8jQMivPAJITfQ2jI\r\n        osJz2xbQjkbkReVfCUIT0PXCotx90xZwn+3gmUQzTOWuT4UnQp+49oprTwq6pbjjbU7goEv+icKHVBB4\r\n        l06TTKXRD0VnrePSjmvT9NwaXYv/Eqj03qdIzT1cXqGmjaPVrRw5cYfDx1sor7rFoWM3xLnJcKDiejHB\r\n        b88e++xiBDeHAAAAAElFTkSuQmCC\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.TopToolStripPanel.Parent\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"tmiNewMulti.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmsContext.Name\" xml:space=\"preserve\">\r\n    <value>cmsContext</value>\r\n  </data>\r\n  <data name=\"tmiAbout.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>118, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiDelete.Name\" xml:space=\"preserve\">\r\n    <value>tmiDelete</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.TopToolStripPanel.Name\" xml:space=\"preserve\">\r\n    <value>tscMain.TopToolStripPanel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Name\" xml:space=\"preserve\">\r\n    <value>splMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiExit.Name\" xml:space=\"preserve\">\r\n    <value>tmiExit</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.ImageIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Text\" xml:space=\"preserve\">\r\n    <value>Select &amp;all</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cmsContext.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"splMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>Fill</value>\r\n  </data>\r\n  <data name=\"tslKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>0, 17</value>\r\n  </data>\r\n  <data name=\"splMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiJump.Name\" xml:space=\"preserve\">\r\n    <value>tmiJump</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewSep1.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewSep1</value>\r\n  </data>\r\n  <data name=\"tmiTools.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>44, 20</value>\r\n  </data>\r\n  <data name=\"tmiExit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>132, 22</value>\r\n  </data>\r\n  <data name=\"sfdExport.Filter\" xml:space=\"preserve\">\r\n    <value>Registry files (*.reg)|*.reg|XML files (*.xml)|*.xml|Binary registry file (*.*)|*.*</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiSelectAll.Name\" xml:space=\"preserve\">\r\n    <value>tmiSelectAll</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiTools.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiSelectAll.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"mnsMain.Text\" xml:space=\"preserve\">\r\n    <value>menuStrip1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiCopyFullPath.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewBinary.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tscMain.TabIndex\" type=\"System.Int32, mscorlib\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;mnsMain.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tssCms1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>156, 6</value>\r\n  </data>\r\n  <data name=\"tmiNew.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"splMain.SplitterDistance\" type=\"System.Int32, mscorlib\">\r\n    <value>295</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRename.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI5JREFUOE+lUwES\r\n        gCAI05/7NH9WLoOgZolx550lmwNHLqVsKRgNkxUCgkgg3126QoALlWSFoMlH2X1FCaTcWqsnSAnN7P2Q\r\n        vXyzf46AASzINllyXxV8gXE+VQJ73ikFtqRRXx4KImaiJfwigJxR4Mwu6gNx1T35tOvluuY8MZ72wA4i\r\n        A5BBPUgoQWCqVdUOvHGH+nw++r8AAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.TopToolStripPanel.ZOrder\" xml:space=\"preserve\">\r\n    <value>3</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohType.Name\" xml:space=\"preserve\">\r\n    <value>cohType</value>\r\n  </data>\r\n  <data name=\"tmiCopyFullPath.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiTools.Name\" xml:space=\"preserve\">\r\n    <value>tmiTools</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.BottomToolStripPanel.Name\" xml:space=\"preserve\">\r\n    <value>tscMain.BottomToolStripPanel</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewMulti.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewMulti</value>\r\n  </data>\r\n  <data name=\"tmiDelete.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>Del</value>\r\n  </data>\r\n  <data name=\"imlImages.ImageStream\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6\r\n        DQAAAk1TRnQBSQFMAgEBCAEAAQkBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r\n        AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r\n        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r\n        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r\n        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm\r\n        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM\r\n        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA\r\n        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz\r\n        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ\r\n        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM\r\n        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA\r\n        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA\r\n        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ\r\n        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/\r\n        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA\r\n        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm\r\n        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ\r\n        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz\r\n        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA\r\n        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM\r\n        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM\r\n        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM\r\n        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA\r\n        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM\r\n        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ\r\n        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz\r\n        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm\r\n        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw\r\n        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ALAAC7BoA\r\n        AewJAAHsAQcEAAHsCQAB7AEHCAAC7AgADuwBAAHsAgAEBwHsBAAB7AH/AQcBAAHsAgAEBwHsBAAB7AH/\r\n        AQcHAATsBwAO7AEAAewBBwb/BAcC/wEHAQAB7AEHBv8EBwL/AQcHAATsBwAO7AEAAewF/wL5Bv8BBwEA\r\n        AewN/wEHBgAG7AcADOwCAAHsBf8C+Qb/AQcBAAHsDf8BBwYABuwHAAzsAgAB7A3/AQcBAAHsAf8CBAH/\r\n        BAQB/wMEAf8BBwUACOwHAArsAwAB7AX/AvkG/wEHAQAB7AH/AgQB/wIEBf8CBAEHBQAI7AcACuwDAAHs\r\n        Bf8C+Qb/AQcBAAHsAf8CBAL/AgQD/wIEAf8BBwQACuwHAAjsBAAB7Ab/AvkF/wEHAQAB7AMEA/8CBAP/\r\n        AgQBBwQACuwHAAjsBAAB7Af/AvkE/wEHAQAB7AH/AgQB/wMEAv8DBAH/AQcDAAzsBwAG7AUAAewD/wL5\r\n        Av8C+QT/AQcBAAHsDf8BBwMADOwHAAbsBQAB7AP/AvkC/wL5Av8B7AMAAewL/wHsBAAO7AcABOwGAAHs\r\n        BP8E+QP/AewB/wHsAQAB7Av/AewB/wHsAgAO7AcABOwGAAHsC/8C7AIAAewL/wLsAwAO7AgAAuwHAA3s\r\n        AwAN7BoAAuxKAAHsCQAB7AEHJAAB7AkAAewBBwEAAewCAAQHAewEAAHsAf8BByEAAewCAAQHAewEAAHs\r\n        Af8BBwEAAewBBwb/BAcC/wEHAQAO7AQADOwCAAHsAQcG/wQHAv8BBwEAAewB/wL8Af8C/AL/A/wC/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsBAAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AewCAAHs\r\n        Df8BBwEAAewB/wL8Af8C/AH/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AMA\r\n        AewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAQAB7AEAAewN/wEHAQAB7AH/AvwB/wL8Af8C/AH/AvwB/wEH\r\n        AQAB7AH/AfsBBwH7AQcB+wEHAfsBBwH7AQcB+wHsAwAB7AH/AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHs\r\n        AQAB7AL/CQEC/wEHAQAB7AH/AvwB/wL8Av8D/AL/AQcBAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEH\r\n        AewCAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEAAuwBAAHsAf8CAQH/AgEB/wIBAf8CAQH/AQcBAAHs\r\n        Df8BBwEAAewB/wH7AQcB+wEHAfsBBwH7AQcB+wEHAfsB7AIAAewK/wHsAQABBwHsAQAB7AL/BAEB/wIB\r\n        Af8CAQH/AQcBAAHsAv8D/AL/AvwB/wL8Af8BBwEAAewB/wEHAfsBBwH7AQcB+wEHAfsBBwH7AQcB7AIA\r\n        DewB+wHsAQAB7AT/AgEB/wIBAf8CAQH/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsAf8B+wEH\r\n        AfsBBwH7AQcB+wEHAfsBBwH7AewDAAHsAf8BBwH7AQcB+wEHAfsBBwH7AQcB+wEHAewBAAHsAv8DAQEH\r\n        Af8EAQL/AQcBAAHsAf8C/AH/AvwB/wL8Af8C/AH/AQcBAAHsDP8B7AMAAewB/wH7AQcB+wEHAfsBBwX/\r\n        AewBAAHsB/8CAQT/AQcBAAHsAv8D/AL/AvwB/wH8AewDAAHsAQcB+wEHAfsBBwH7AQcG7AMAAewB/wEH\r\n        AfsBBwH7AQcB/wbsAQAB7Af/AgEC/wHsAwAB7Av/AewB/wHsAgAB7AEHAfsBBwH7AQcB7AoAAewF/wHs\r\n        BwAB7Av/AewB/wHsAQAB7Av/AuwEAAXsDAAF7AgAAewL/wLsAgAN7CMADewDAAFCAU0BPgcAAT4DAAEo\r\n        AwABQAMAATADAAEBAQABAQUAAYABARYAA/+BAAH/AfgB/wH4Af4BfwL/AeAB8AHgAfAB/gF/AYABAQQA\r\n        AfwBPwGAAQEEAAH8AT8BgAEBBAAB+AEfAcABAwQAAfgBHwHAAQMEAAHwAQ8B4AEHBAAB8AEPAeABBwQA\r\n        AeABBwHwAQ8EAAHgAQcB8AEPBAABwAEDAfgBHwQAAcABAwH4AR8EAAGAAQEB/AE/AQABAQEAAQEBgAEB\r\n        AfwBPwEAAQMBAAEDAYABAQH+AX8BAAEHAQABBwL/Af4BfwH/AfgF/wH4AeAB8AT/AeAB8AIAAYABAQHg\r\n        BgABAQHABgABAQHABgABAQGABgABAQGABgABAQcAAQEHAAEBBwABAQGABgABAQGABgABAwGAAQEDAAEB\r\n        AYAB/wHAAX8BAAEBAQABAwHBAf8B4AH/AQABAwEAAQcE/wEAAQcL\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tssCms1.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohName.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRefreshAll.Name\" xml:space=\"preserve\">\r\n    <value>tmiRefreshAll</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;stsStatus.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiJumpToSame.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>147, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;imlImages.Name\" xml:space=\"preserve\">\r\n    <value>imlImages</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohName.Name\" xml:space=\"preserve\">\r\n    <value>cohName</value>\r\n  </data>\r\n  <data name=\"tmiRefreshNode.Text\" xml:space=\"preserve\">\r\n    <value>Re&amp;fresh</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiLanguage.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tssTools1.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>144, 6</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;stsStatus.Name\" xml:space=\"preserve\">\r\n    <value>stsStatus</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewExpandable.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewKey.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel2.ZOrder\" xml:space=\"preserve\">\r\n    <value>1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewKey.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewKey</value>\r\n  </data>\r\n  <data name=\"tmiNewBinary.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAARSEtFWV9DTEFTU0VTX1JPT1QGBAAAABFIS0VZX0NMQVNTRVNfUk9PVAD/\r\n        ////BgUAAAAGY2xvc2Vk/////wYGAAAABmNsb3NlZAAAAAAL\r\n</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Text\" xml:space=\"preserve\">\r\n    <value>&amp;DWord value ...</value>\r\n  </data>\r\n  <data name=\"tmiDelete.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA\r\n        CxMBAJqcGAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7\r\n        f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt\r\n        nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae\r\n        CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO\r\n        m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd\r\n        S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ\r\n        PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE\r\n        BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo\r\n        r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK\r\n        xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII=\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;cohType.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tvwRegistry.Nodes3\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAAB1TeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5UcmVlTm9kZQgAAAAEVGV4dAROYW1lCUlzQ2hlY2tlZApJbWFnZUluZGV4\r\n        CEltYWdlS2V5ElNlbGVjdGVkSW1hZ2VJbmRleBBTZWxlY3RlZEltYWdlS2V5CkNoaWxkQ291bnQBAQAA\r\n        AQABAAEICAgCAAAABgMAAAAKSEtFWV9VU0VSUwYEAAAACkhLRVlfVVNFUlMA/////wYFAAAABmNsb3Nl\r\n        ZP////8GBgAAAAZjbG9zZWQAAAAACw==\r\n</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewSep1.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewExpandable.Name\" xml:space=\"preserve\">\r\n    <value>tmiNewExpandable</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel1.Name\" xml:space=\"preserve\">\r\n    <value>splMain.Panel1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel1.Parent\" xml:space=\"preserve\">\r\n    <value>splMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRename.Name\" xml:space=\"preserve\">\r\n    <value>tmiRename</value>\r\n  </data>\r\n  <data name=\"mnsMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\r\n    <value>0, 0</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>147, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;stsStatus.ZOrder\" xml:space=\"preserve\">\r\n    <value>0</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r\n        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJBJREFUOE+tk4EO\r\n        gCAIRPXP+TT/zDoTRnqltNhYbcHjCMgiUlPQzpxsKQBEDPG3ol8AKGiQFUBSqnC1noi2L48CFFRKmQFa\r\n        DU8ENKldwaiEAkymk+0T/ftSgfa9DXgK3Aawfsf+/TRe/8HOYv0L0JGxyvjmne6BbtUYPG0dxttvx1rw\r\n        h8gSyKE2CAUErtpu4QCx1HhPZJRr1QAAAABJRU5ErkJggg==\r\n</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>147, 22</value>\r\n  </data>\r\n  <data name=\"mnsMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 24</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.LeftToolStripPanel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.Name\" xml:space=\"preserve\">\r\n    <value>tscMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel2.Parent\" xml:space=\"preserve\">\r\n    <value>splMain</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tscMain.ContentPanel.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"sfdExport.Title\" xml:space=\"preserve\">\r\n    <value>Export registry key</value>\r\n  </data>\r\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 451</value>\r\n  </data>\r\n  <data name=\"tmiNewDWord.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>265, 22</value>\r\n  </data>\r\n  <data name=\"cohName.Width\" type=\"System.Int32, mscorlib\">\r\n    <value>90</value>\r\n  </data>\r\n  <data name=\"stsStatus.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>576, 22</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNew.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"$this.Text\" xml:space=\"preserve\">\r\n    <value>RegEdit PHP</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tslKey.Name\" xml:space=\"preserve\">\r\n    <value>tslKey</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiLanguage.Name\" xml:space=\"preserve\">\r\n    <value>tmiLanguage</value>\r\n  </data>\r\n  <data name=\"cohName.Text\" xml:space=\"preserve\">\r\n    <value>Name</value>\r\n  </data>\r\n  <data name=\"tmiSelectAll.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>Ctrl+A</value>\r\n  </data>\r\n  <data name=\"tmiNewString.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>Shift+F4      REG_SZ</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;lvwRegistry.Name\" xml:space=\"preserve\">\r\n    <value>lvwRegistry</value>\r\n  </data>\r\n  <data name=\"lvwRegistry.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>277, 405</value>\r\n  </data>\r\n  <data name=\"tmiRename.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Rename</value>\r\n  </data>\r\n  <data name=\"tmiNewString.Text\" xml:space=\"preserve\">\r\n    <value>&amp;String value ...</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tslKey.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"tmiRefreshAll.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Refresh all</value>\r\n  </data>\r\n  <data name=\"mnsMain.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\r\n    <value>None</value>\r\n  </data>\r\n  <data name=\"tmiEdit.Size\" type=\"System.Drawing.Size, System.Drawing\">\r\n    <value>159, 22</value>\r\n  </data>\r\n  <data name=\"tmiNewKey.ShortcutKeyDisplayString\" xml:space=\"preserve\">\r\n    <value>F7</value>\r\n  </data>\r\n  <data name=\"tmiLanguage.Text\" xml:space=\"preserve\">\r\n    <value>&amp;Language ...</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tvwRegistry.Parent\" xml:space=\"preserve\">\r\n    <value>splMain.Panel1</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiRefreshNode.Name\" xml:space=\"preserve\">\r\n    <value>tmiRefreshNode</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;tmiNewString.Type\" xml:space=\"preserve\">\r\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n  <data name=\"&gt;&gt;splMain.Panel2.Name\" xml:space=\"preserve\">\r\n    <value>splMain.Panel2</value>\r\n  </data>\r\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>43</value>\r\n  </metadata>\r\n  <metadata name=\"mnsMain.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>0, 0</value>\r\n  </metadata>\r\n  <metadata name=\"cmsContext.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>216, 17</value>\r\n  </metadata>\r\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>True</value>\r\n  </metadata>\r\n  <metadata name=\"sfdExport.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>325, 17</value>\r\n  </metadata>\r\n  <metadata name=\"imlImages.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>113, 17</value>\r\n  </metadata>\r\n  <metadata name=\"stsStatus.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>0, 0</value>\r\n  </metadata>\r\n</root>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/frmMain.user.php",
    "content": "<? // onny 2009 - Part of Phalanger project\r\n    import namespace RegEditPHP;\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace Microsoft:::Win32;\r\n    import namespace System;\r\n    \r\n    namespace RegEditPHP{\r\n        ///<summary>Main application form</summary>\r\n\t    partial class frmMain extends System:::Windows:::Forms:::Form{\r\n\t        //This class represents main form of this application. It contains the most of the code.\r\n//Initialization\r\n             ///<summary>This name is used as name and text of placeholder child key</summary>\r\n             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.\r\n             ///<summary>Gives access to localized resources</summary>\r\n             private $Resources;//See ResourceAccessor.php\r\n             ///<summary>Internal initialization method</summary>\r\n             private function Init(){\r\n                //Call to this method wa manually added to __construct() in frmMain.php\r\n                //Following commented lines are no longer needed because pictures now can be added form designer\r\n                //$this->tmiNew->Image = Program::$Resources->new;\r\n                //$this->tmiNewKey->Image = Program::$Resources->folder->ToBitmap();\r\n                //$this->tmiNewDWord->Image = \r\n                //$this->tmiNewQWord->Image = Program::$Resources->numeric->ToBitmap();\r\n                //$this->tmiNewString->Image = \r\n                //$this->tmiNewExpandable->Image = \r\n                //$this->tmiNewMulti->Image = Program::$Resources->string->ToBitmap();\r\n                //$this->tmiNewBinary->Image = Program::$Resources->binary->ToBitmap();\r\n                //$this->tmiRename->Image = Program::$Resources->rename;\r\n                //$this->tmiEdit->Image = Program::$Resources->edit;\r\n                //$this->tmiDelete->Image = Program::$Resources->delete;\r\n                //$this->tmiRefreshNode->Image = Program::$Resources->refresh;\r\n                //Initialize sorter to sort list of values\r\n                $this->Sorter = new Sorter($this->lvwRegistry);\r\n                //Fill nodes added in designer with placeholder subnodes\r\n                //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)\r\n                foreach($this->tvwRegistry->Nodes as $node):\r\n                    $node->Nodes->Add(self::dummy)->Name=self::dummy;\r\n                endforeach;\r\n             }\r\n//Main menu  \r\n             //Handles click to Exit menu item\r\n             private function tmiExit_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->Close();//Close the main form (it terminates the application)\r\n             }\r\n            //Handles click to Language menu item\r\n            private function tmiLanguage_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //Create instance of form for language sleection\r\n                $lSel = new LanguageSelector();\r\n                //Show it and test if user clicked OK\r\n                if($lSel->ShowDialog($this) == DialogResult::OK):\r\n                    //If so, the application must be restarted (changing UI strings without restart is too much work)\r\n                    //To restart the application we need know path of it - location of assembly\r\n                    //So get the assembly from type contained in it\r\n                    $MyType = CLRTypeOf frmMain;\r\n                    $MyPath = $MyType->Assembly->Location;\r\n                    try{ //Launch it\r\n                        System:::Diagnostics:::Process::Start($MyPath);\r\n                    }catch(System:::Exception $ex){ //This probably will not happen\r\n                        self::OnError(Program::$Resources->e_Restart.\"\\r\\n$ex->Message\");\r\n                        return;\r\n                    }\r\n                    //If application successfully started, this can be closed\r\n                    $this->Close();\r\n                endif;\r\n            }\r\n            //Handles click on the Jump menu item\r\n            private function tmiJump_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //get path to jump to using InputBox (see InputBox.user.php)\r\n                $Path = InputBox::GetInput(Program::$Resources->JumpToKey,Program::$Resources->JumpToKey_t);\r\n                if(!is_null($Path)) //InputBox::GetInput returns null on cancel\r\n                    $this->JumpToKey($Path);//Do the jump\r\n            }\r\n            //Handles click on the Refresh all menu item\r\n            private function tmiRefreshAll_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //Remember currently selected key\r\n                $OldPath = $this->tvwRegistry->SelectedNode->FullPath;\r\n                //Clear content of all top-level nodes\r\n                foreach($this->tvwRegistry->Nodes as $node):\r\n                    $node->Nodes->Clear;\r\n                    //And add placeholder into each of them to appear expandable\r\n                    $node->Nodes->Add(self::dummy)->Name=self::dummy;\r\n                endforeach; \r\n                //For user convenience, navigate to node that was selected when reloading (I hate when reloading changes my status)\r\n                $this->JumpToKey($OldPath);    \r\n            }\r\n            ///<summary>Navigates to key with given path</summary>\r\n            ///<param name=\"Path\">Path full to navigate too</param>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function JumpToKey(string $Path){\r\n                //Firts trim trailing backslashes\r\n                //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)\r\n                while($Path->ToString()->EndsWith(\"\\\\\"))\r\n                    $Path = $Path->ToString()->Substring(0,strlen($Path) - 1);\r\n                //You can use many of PHP built-in function you are familiar with. Sometimes they are nicer/better tna .NET ones - as explode()\r\n                $PathParts = explode(\"\\\\\",$Path);\r\n                $CurrentNodes = $this->tvwRegistry->Nodes;//Starting with top-level nodes\r\n                foreach($PathParts as $Part)://For each path part\r\n                    foreach($CurrentNodes as $Node)://Wee look for node with same at current level\r\n                        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\r\n                            $this->NoExpandQuestion=true;//Turn of expand question ofr HKCR\r\n                            $Node->Expand();//Expand node\r\n                            $this->NoExpandQuestion=false;//Turn the question back on\r\n                            $CurrentNodes = $Node->Nodes;//Dive one more level\r\n                            $LastNode = $Node;//Remember last succesfully found node (in case of failure, we will navigate to last-match level)\r\n                            continue 2;//Next (deeper) level\r\n                        endif;\r\n                    endforeach;\r\n                    self::OnError(Program::$Resources->e_KeyDoesNotExist($Path));//continue 2 above skips this line if node is found\r\n                    break;\r\n                endforeach;\r\n                if(!is_null($LastNode))://If there was matc at least at one level\r\n                    $this->tvwRegistry->SelectedNode = $LastNode;//select it\r\n                    $LastNode->EnsureVisible();//And scroll it to view\r\n                    return $LastNode->FullPath->ToLower() == $Path->ToString()->ToLower();//Only when all levels succeeded we consider jump successfull\r\n                else:\r\n                    return false;//The root name was unknown\r\n                endif;\r\n            }\r\n            //Hanndles click on the Jump to same key under ... menu item\r\n            //It navigates to node with same addres but sapped first part HKLM<->HKCU (if possible)\r\n            private function tmiJumpToSame_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                if($this->tvwRegistry->SelectedNode->FullPath->StartsWith(\"HKEY_CURRENT_USER\\\\\")):\r\n                    $start=HKEY_CURRENT_USER;//current 1st part\r\n                    $new=HKEY_LOCAL_MACHINE;//new 1st part\r\n                else:\r\n                    $new=HKEY_CURRENT_USER;//new 1st part\r\n                    $start=HKEY_LOCAL_MACHINE;//current 1st part\r\n                endif;\r\n                $new= $new . $this->tvwRegistry->SelectedNode->FullPath->Substring(strlen($start));///replace 1st part\r\n                $this->JumpToKey($new);//Navigate to new path (if navigation is not possible, navigates as near as can)\r\n            }\r\n            //Handles dropdown opening of the Tools top-level menu item\r\n            private function tmiTools_DropDownOpening(System:::Object $sender, System:::EventArgs $e) {\r\n                //We enable/disable Jump to same menu item depending on if user is under HKCU or HKLM or not\r\n                $this->tmiJumpToSame->Enabled = (\r\n                    $this->tvwRegistry->SelectedNode->FullPath->StartsWith(\"HKEY_CURRENT_USER\\\\\") or\r\n                    $this->tvwRegistry->SelectedNode->FullPath->StartsWith(\"HKEY_LOCAL_MACHINE\\\\\"));\r\n                //And adjust text to show name of target hive (top-level node)\r\n                if($this->tmiJumpToSame->Enabled and $this->tvwRegistry->SelectedNode->FullPath->StartsWith(\"HKEY_CURRENT_USER\\\\\")):\r\n                    $this->tmiJumpToSame->Text = Program::$Resources->JumToSameKey(\"HKLM\");\r\n                elseif($this->tmiJumpToSame->Enabled):\r\n                    $this->tmiJumpToSame->Text = Program::$Resources->JumToSameKey(\"HKCU\");\r\n                endif;\r\n            }\r\n            //Handles click on About menu item\r\n            private function tmiAbout_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $ad=new dlgAbout();//Create about dialog\r\n                $ad->ShowDialog($this);//And show it\r\n            }\r\n\r\n             \r\n//Tree\r\n             ///<summary>If false, user is askt if (s)he really wants to expand HKCR</summary>\r\n             private $NoExpandQuestion = false;\r\n             //Called before tree node is expanded\r\n             //Dummy sub keys are deleted in this event and actual node content is loaded\r\n             private function tvwRegistry_BeforeExpand(System:::Object $sender, System:::Windows:::Forms:::TreeViewCancelEventArgs $e) {\r\n                if(!$this->NoExpandQuestion and $e->Node->FullPath==HKEY_CLASSES_ROOT and $e->Node->Nodes->Count == 1):\r\n                    //PHPBUG:\r\n                    //We use Sorter::Iterate because indexing and default properties does not work well in current version of Phalanger\r\n                    if(Sorter::Iterate($e->Node->Nodes->GetEnumerator(),0)->Name == self::dummy):\r\n                        //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)\r\n                        if(MessageBox::Show(Program::$Resources->ExpandHKCR,Program::$Resources->ExpandHKCR_t,MessageBoxButtons::YesNo,MessageBoxIcon::Information) != DialogResult::Yes):\r\n                            //Cancels expanding (node will remain unexpanded)\r\n                            $e->Cancel = true;\r\n                            return;\r\n                        endif;\r\n                    endif;\r\n                endif;\r\n                //Test if node hals only one child - the Dummy\r\n                if($e->Node->Nodes->Count==1):\r\n                    //Following 2 lines are same as Sorter::Iterate($e->Node->Nodes->GetEnumerator(),0) (legacy)\r\n                    $nem=$e->Node->Nodes->GetEnumerator();\r\n                    $nem->MoveNext();\r\n                    if($nem->Current->Name=self::dummy):\r\n                        //Need load childs from registry\r\n                        $this->Cursor = Cursors::$WaitCursor;//Set cursor to horglass (it may take a while)\r\n                        try{\r\n                            self::FillNode($e->Node);//Load subkeys\r\n                        }catch(System:::Exception $ex){\r\n                            $e->Node->Nodes->Clear();//When there is error, treat key as empty\r\n                            self::OnError($ex->Message);//Show error message\r\n                        }\r\n                        $this->Cursor = Cursors::$Default;//Revert cursor icon\r\n                    endif;\r\n                endif;    \r\n             }\r\n             //Caled after tree node is expanded   \r\n             private function tvwRegistry_AfterExpand(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) {\r\n                //We handle change of icon here\r\n                //Note: Tree node has 2 icons - normal and selected\r\n                // Both icons are taken from associated image list (set in designer)\r\n                // and we want them to be the same, thus same key\r\n                $e->Node->ImageKey=\"open\";\r\n                $e->Node->SelectedImageKey=\"open\";\r\n             }\r\n            //Called after tree node is collapsed\r\n             private function tvwRegistry_AfterCollapse(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) {\r\n                //Same as above, but change icon to closed\r\n                $e->Node->ImageKey=\"closed\";\r\n                $e->Node->SelectedImageKey=\"closed\";\r\n             }\r\n             ///<summary>Fills node with subnodes representing corresponding key subkeys</summary>\r\n             ///<param name=\"Node\">Node to fill</param>\r\n             ///<returns type=\"void\"/>\r\n             private static function FillNode(TreeNode $Node){\r\n                //1st clear any current content\r\n                //It's typically dummy node, but for refresh it may be anything\r\n                $Node->Nodes->Clear();\r\n                //Get key for node path\r\n                //Nice with TreeViewIs that it gives path of node which is immediatelly usable for registry lookup\r\n                $Key=self::getRegistryKey($Node->FullPath);     \r\n                $SubKeys=$Key->GetSubKeyNames();//Enumerate sub keys (this may throw an exception and it must be handles by caller)\r\n                foreach($SubKeys as $SubKeyName)://Add the keys to current node\r\n                    $SubKey = $Node->Nodes->Add($SubKeyName);//Add it (this creates node with given text, adds it and returns it)\r\n                    $SubKey->Name = $SubKeyName;//Set its name (it is used by Fullpath)\r\n                    $SubKey->ImageKey = \"closed\";//Set its image\r\n                    $SubKey->SelectedImageKey = \"closed\";\r\n                    $SubKey->Nodes->Add(self::dummy)->Name=self::dummy;//And fill it with dummy child (to seem to be axpandable)\r\n                endforeach;\r\n                //Note: Every node seems to be expandable if it has been never expanded\r\n                // so user may experience following:\r\n                // (S)he clicks the + and instead of node expanding, the + vanishes\r\n                // it's not 100% good behavior, but is quite common and saves us some pre-testing\r\n             }\r\n             ///<summary>Gets registry key for its path</summary>\r\n             ///<param name=\"Path\">Full path of key to open</param>\r\n             ///<param name=\"writeable\">True to open key for writing, false to open it as readonly</param>\r\n             ///<returns type=\"registryKey\">Opened key</param>\r\n             private static function getRegistryKey(string $Path,bool $writeable = false){\r\n                //We must firts parse the path\r\n                $parts=explode(\"\\\\\",$Path);//Explode it by \\\r\n                //The bad thisng with .NET registry API is that there is no general-purpose function for opening registry key\r\n                // The top-level keys (so-called hives) must be treated separatelly\r\n                switch($parts[0])://So switch for them\r\n                    case HKCR://Shortcut names are not currently utilized by this program\r\n                    case HKEY_CLASSES_ROOT: $root=Registry::$ClassesRoot;\r\n                    break;\r\n                    case HKCU:\r\n                    case HKEY_CURRENT_USER: $root=Registry::$CurrentUser;\r\n                    break;\r\n                    case HKLM:\r\n                    case HKEY_LOCAL_MACHINE: $root=Registry::$LocalMachine;\r\n                    break;\r\n                    case HKU:\r\n                    case HKEY_USERS: $root=Registry::$Users;\r\n                    break;\r\n                    case HKCC:\r\n                    case HKEY_CURRENT_CONFIG: $root=Registry::$CurrentConfig;\r\n                    break;\r\n                    case HKDD:\r\n                    case HKEY_DYN_DATA: $root=Registry::$DynData;\r\n                    break;\r\n                    case HKPD:\r\n                    case HKEY_PERFORMANCE_DATA: $root=Registry::$PerformanceData;\r\n                    break;\r\n                    default: throw new CLRException(new ArgumentException(Program::$Resources->e_UnknownRoot));\r\n                endswitch;\r\n                if(count($parts)==1) return $root;//Return root for single-part path\r\n                //Otherwise open root's sub key (now ve have general-purpose function to open multiple levels at once)\r\n                return $root->OpenSubKey(i'String'::Join(\"\\\\\",$parts,1,count($parts)-1),$writeable);\r\n                //Note: Two uncommon things at line above:\r\n                //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\r\n                //2) I pass $parts (PHP array) where .NET String[] array is expected\r\n                //PHPBUG:\r\n                //   It is strange, but Phalanger currently has not silent implicit conversion from string to System::String but has conversion of array to String[]\r\n             } \r\n            //Called after node in tree is selected\r\n            private function tvwRegistry_AfterSelect(System:::Object $sender, System:::Windows:::Forms:::TreeViewEventArgs $e) {\r\n                //We need show values in this key\r\n                try{ //get key and show values for it\r\n                    $this->LoadValues(self::GetRegistryKey($e->Node->FullPath));\r\n                }catch(System:::Exception $ex){\r\n                    self::OnError($ex->Message);     \r\n                }\r\n                $this->tslKey->Text=$e->Node->FullPath;\r\n            }\r\n            \r\n            ///<summary>Loads values for given key rto ListView>/summary>\r\n            ///<param name=\"key\">Key to load values from</param>\r\n            ///<returns type=\"void\"/>\r\n            private function LoadValues(RegistryKey $key){\r\n                //Gate value names (may cause Exception, must be caught by caller)\r\n                $ValueNames=$key->GetValueNames();\r\n                //Clear list\r\n                $this->lvwRegistry->Items->Clear();\r\n                foreach($ValueNames as $Name)://For each name\r\n                    $item=$this->lvwRegistry->Items->Add($Name);//Create and add item\r\n                    $item->Name=$Name;//Set its name\r\n                    switch($key->GetValueKind($Name))://We must support regtlue types separately\r\n                        case RegistryValueKind::Binary://Binary (got as array of bytes)\r\n                            $item->ImageKey=\"binary\";\r\n                            $kind=REG_BINARY;//You know - undefined constant's\r\n                            $value=$key->GetValue($Name);\r\n                            if(!is_null($value))$value=self::GetBytesString($value,&$alt);//Call helper method to display byte array\r\n                        break;    \r\n                        case RegistryValueKind::DWord://DWord (got as int32)\r\n                            $item->ImageKey=\"numeric\";\r\n                            $kind=REG_DWORD;\r\n                            $value=$key->GetValue($Name);\r\n                            $alt=\"0x\".$value->ToString(\"X\");//Hexa\r\n                            $value=$value->ToString();//Decadic                \r\n                        break;    \r\n                        case RegistryValueKind::ExpandString://Expandable string (%something% is replaced by value of system variable something)\r\n                            $item->ImageKey=\"string\";\r\n                            $kind=REG_EXPAND_SZ;\r\n                            $value=$key->GetValue($Name,null,RegistryValueOptions::DoNotExpandEnvironmentNames);//Unexpanded value\r\n                            $alt=$key->GetValue($Name);//Expanded value\r\n                        break;\r\n                        case RegistryValueKind::MultiString://MultistringgotasString\r\n                            $item->ImageKey=\"string\";\r\n                            $kind=REG_MULTI_SZ;\r\n                            $value=$key->GetValue($Name);\r\n                            $value=System:::String::Join(\"; \",$value);//Just join it using semicolon\r\n                            $alt=$value;//No alternative sight\r\n                        break;\r\n                        case RegistryValueKind::QWord://QWord (got as int64) XP regedit does not support it, but we DO!\r\n                            $item->ImageKey=\"numeric\";\r\n                            $kind=REG_QWORD;\r\n                            $value=$key->GetValue($Name);\r\n                            $alt=\"0x\".$value->ToString(\"X\");//Hexa\r\n                            $value=$value->ToString();//decadic\r\n                        break;\r\n                        case RegistryValueKind::i'String'://Normal string\r\n                            //PHPBUG:\r\n                            //This is littele inconsistent behavior:\r\n                            // While RegistryValueKind::String is invalid\r\n                            // System:::String is valid\r\n                            $item->ImageKey=\"string\";\r\n                            $kind=REG_SZ;\r\n                            $value=$key->GetValue($Name);\r\n                            $alt=$value;//There is no alternative sight of plain text\r\n                        break;\r\n                        default://Unknown kind (tehre are more kinds of registry values - uncommon and I dunno what good for)\r\n                            //Just show that there is sth\r\n                            $item->ImageKey=\"unknown\";\r\n                            $kind=\"unknown\";    \r\n                            $value=Program::$Resources->UnknownValue;\r\n                            $alt=Program::$Resources->UnknownValueAlt;\r\n                    endswitch;\r\n                    //Fill subitems (2nd, 3rd, 4th columns in list view)\r\n                    $item->SubItems->Add($kind);\r\n                    $item->SubItems->Add($value);\r\n                    $item->SubItems->Add($alt);\r\n                endforeach;\r\n                $this->lvwRegistry->Sort();//Sort list (sorting is actually provided by Sorter.php)\r\n                $this->AfterSort();//Some after-sort settings\r\n            }  \r\n            ///<summary>Gets display string for byte array</summary>\r\n            ///<param name=\"bytes\">Byte array to get values from</param>\r\n            ///<param name=\"alt\" type=\"string\">Output parameter filled with alternative (decimal) representation of <paramref name=\"bytes\"/></param>\r\n            ///<returns type=\"string\">String representation of byte array (2-digits hexadecimal numbers separated by spaces)</returns>\r\n            private static function GetBytesString(i'Array' $bytes,&$alt){\r\n                //Note: i'Array' means that we acceps System:::array, not PHP array\r\n                //Output parameters passed by reference are possible in PHP as well, but not commonly used. This uis the rare case when it is useful\r\n                // In phalanger you can use [out] attribute, whoch I'm not using here\r\n                //StringBuolder is efficient way of concatenating strings in .NET\r\n                $ret=new System:::Text:::StringBuilder(count($bytes)*3);//Initial capacity count*3 is not compulsory but is god for efficiency\r\n                $ret2=new System:::Text:::StringBuilder(count($bytes)*3);//For decimal capacity as approximate\r\n                foreach($bytes as $byte):\r\n                    if($ret->Length>0) $ret->Append(\" \");//Add space, if non empty\r\n                    if($ret2->Length>0) $ret2->Append(\" \");\r\n                    $ret->Append($byte->ToString(\"X2\"));//Hexadecimal, 2 didigts    \r\n                    $ret2->Append($byte->ToString());//Decimal\r\n                endforeach;\r\n                $alt=$ret2->ToString(); //StringBuilder must be converted to string explicitly\r\n                return $ret->ToString(); \r\n            }             \r\n            //Handles click on list view collumn\r\n            private function lvwRegistry_ColumnClick(System:::Object $sender, System:::Windows:::Forms:::ColumnClickEventArgs $e) {\r\n                //We do sorting here\r\n                if($this->Sorter->Column == $e->Column):\r\n                    //If user click same column 2nd or more times\r\n                    switch($this->Sorter->Order)://reverse order\r\n                        case SortOrder::Ascending:\r\n                            $this->Sorter->Order=SortOrder::Descending;\r\n                        break;\r\n                        default:$this->Sorter->Order=SortOrder::Ascending;\r\n                    endswitch;\r\n                else://CHange sort column and set order to ASC\r\n                    $this->Sorter->Order=SortOrder::Ascending;\r\n                    $this->Sorter->Column = $e->Column;\r\n                endif;\r\n                $this->lvwRegistry->Sort();//Force apply sorting\r\n                $this->AfterSort();//After sort operations\r\n            }            \r\n            ///<summary>Does common after ListView sort operations</summary>\r\n            ///<returns type=\"void\"/>\r\n            private function AfterSort(){\r\n                foreach($this->lvwRegistry->Columns as $col)\r\n                    $col->ImageKey=null;//Remove sort image from all columns\r\n                //And set it for the used one using direction-aware image\r\n                Sorter::Iterate($this->lvwRegistry->Columns->GetEnumerator(),$this->Sorter->Column)->ImageKey = $this->Sorter->Order == SortOrder::Ascending ? 'asc' : 'desc';\r\n            }\r\n//Context menu and actions\r\n            //Called befor context menu is opened\r\n            private function cmsContext_Opening(System:::Object $sender, System:::ComponentModel:::CancelEventArgs $e) {\r\n                //Note: ContextMenuStrip is associated with TreeView and ListView in designer\r\n                //We hide/show and enable/disable certain menu items here based on conditions\r\n                //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.\r\n                if($this->cmsContext->SourceControl === $this->tvwRegistry and is_null($this->tvwRegistry->SelectedNode)):\r\n                    //No TreeNode selected - this should not happedn\r\n                    $e->Cancel=true;//Do not show the menu\r\n                    return;\r\n                endif;\r\n                //Edit only for values\r\n                $this->tmiEdit->Visible = (\r\n                    $this->cmsContext->SourceControl === $this->lvwRegistry and\r\n                    $this->lvwRegistry->SelectedItems->Count == 1);\r\n                //No rename for no value selected or more values selected\r\n                $this->tmiRename->Visible =\r\n                    !($this->cmsContext->SourceControl === $this->lvwRegistry and $this->lvwRegistry->SelectedItems->Count <> 1);\r\n                //No delete for no values selected\r\n                $this->tmiDelete->Visible = \r\n                    !($this->cmsContext->SourceControl === $this->lvwRegistry and $this->lvwRegistry->SelectedItems->Count == 0);\r\n                //No delete for root\r\n                $this->tmiDelete->Enabled = \r\n                    !($this->cmsContext->SourceControl === $this->tvwRegistry and is_null($this->tvwRegistry->SelectedNode->Parent));\r\n                //Select all only for values\r\n                $this->tmiSelectAll->Visible = $this->cmsContext->SourceControl === $this->lvwRegistry;\r\n                //If there is nothig to select ...\r\n                $this->tmiSelectAll->Enabled = $this->lvwRegistry->Items->Count > 0;\r\n                //Refres only for nodes\r\n                $this->tmiRefreshNode->Visible = $this->cmsContext->SourceControl === $this->tvwRegistry;\r\n                //Copy only for single key or current values\r\n                //Note: LIst veiw recognizec selected values and focused vakues\r\n                $this->tmiCopyFullPath->Enabled = (\r\n                    $this->cmsContext->SourceControl === $this->tvwRegistry or\r\n                    ($this->cmsContext->SourceControl === $this->lvwRegistry and !is_null($this->lvwRegistry->FocusedItem)));\r\n            }\r\n            //Handles attempt to rename tree node\r\n            private function tvwRegistry_BeforeLabelEdit(System:::Object $sender, System:::Windows:::Forms:::NodeLabelEditEventArgs $e) {\r\n                //Top-level cannot be renamed\r\n                $e->CancelEdit = $e->CancelEdit || is_null($e->Node->Parent);\r\n            }\r\n            //Hanldes confirmed rename of tree node\r\n            private function tvwRegistry_AfterLabelEdit(System:::Object $sender, System:::Windows:::Forms:::NodeLabelEditEventArgs $e) {\r\n                //Reaname can be cancled or it is not rename at all (user haven't changed text - indinated by null Label)\r\n                if(is_null($e->Label) or $e->Label == $e->Node->Text) $e->CancelEdit=true;//No change\r\n                if($e->CancelEdit) return;\r\n                $e->CancelEdit = !$this->RenameKey($e->Node, $e->Label);//Try to rename\r\n            }\r\n            //Handles confirned rename of values\r\n            private function lvwRegistry_AfterLabelEdit(System:::Object $sender, System:::Windows:::Forms:::LabelEditEventArgs $e) {\r\n                //Same as rename of key - the event can indicate no rename at all (null Label)\r\n                if(is_null($e->Label)) $e->CancelEdit = true;\r\n                $node = Sorter::Iterate($this->lvwRegistry->Items->GetEnumerator(),$e->Item);\r\n                if($node->Text == $e->Label) $e->CancelEdit = true;//No change\r\n                if($e->CancelEdit) return;\r\n                $e->CancelEdit = $this->RenameValue($node, $e->Label);//Try to rename\r\n            }\r\n            //Handles click on New key context menu item\r\n            private function tmiNewKey_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->AddKey();//Add the key\r\n            }\r\n            //Handles click on Rename context menu item\r\n            private function tmiRename_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //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)\r\n                if($this->cmsContext->SourceControl === $this->tvwRegistry):\r\n                    $this->tvwRegistry->SelectedNode->BeginEdit();//Tree\r\n                else:\r\n                   Sorter::Iterate($this->lvwRegistry->SelectedItems,0)->BeginEdit();//List\r\n                endif;\r\n            }\r\n            //Handles click on Edit context menu item\r\n            private function tmiEdit_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->EditValue();//Do the edit\r\n            }\r\n            //Handles doble-click on list view item\r\n            //Note: Some lama-users like to instruct system to activate list view item on single click instead of on double click (link behavior)\r\n            // If your ListView follows this user decision can be set in designer\r\n            private function lvwRegistry_ItemActivate(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->EditValue();//Edit value value\r\n            }\r\n            //Handles click on delete on context menu item \r\n            private function tmiDelete_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //We just detect control contet menu is shown on and call appropriate method\r\n                if($this->cmsContext->SourceControl === $this->tvwRegistry):\r\n                    $this->DeleteKey();//Delete key\r\n                else:\r\n                    $this->DeleteValues();//Delete value\r\n                endif;\r\n            }\r\n            //Handles key down when tree view is active\r\n            private function tvwRegistry_KeyDown(System:::Object $sender, System:::Windows:::Forms:::KeyEventArgs $e) {\r\n                //We are intrested only in some keys\r\n                //KeyData contains or combination of KeyCode and Ctrl+Alt+Shift state\r\n                switch($e->KeyData):\r\n                    case Keys::Delete: $this->DeleteKey();//Delete key (w/o any Ctrl+Shift+Alt)\r\n                    break;\r\n                    case Keys::F2://F2 key (w/o ...)\r\n                        if(!is_null($this->tvwRegistry->SelectedNode) and !is_null($this->tvwRegistry->SelectedNode->Parent)):\r\n                            $this->tvwRegistry->SelectedNode->BeginEdit();        \r\n                        endif;\r\n                    break;  \r\n                    case Keys::F7: $this->AddKey();//F7 - I love Total Commander :-)\r\n                endswitch;\r\n            }\r\n            //Handles key down on list view\r\n            private function lvwRegistry_KeyDown(System:::Object $sender, System:::Windows:::Forms:::KeyEventArgs $e) {\r\n                //Same note as abowe but we're interested in more keys\r\n                switch($e->KeyData):\r\n                    case Keys::Delete: $this->DeleteValues();//delete\r\n                    break;\r\n                    case Keys::F2://rename\r\n                        if(!is_null($this->lvwRegistry->FocusedItem))\r\n                            $this->lvwRegistry->FocusedItem->BeginEdit();\r\n                    break;\r\n                    case Keys::Control | Keys::A://This is how to uttilize the key combination\r\n                        foreach($this->lvwRegistry->Items as $item)//Select all items\r\n                            $item->Selected=true;\r\n                    break;\r\n                    case Keys::F4://Edit (like in TC)\r\n                    case Keys::Enter: $this->EditValue();//Edit\r\n                    break;\r\n                    case Keys::Shift | Keys::F4://New string (like in TC)\r\n                        $this->Addvalue(RegistryValueKind::i'String');\r\n                    break;\r\n                endswitch;\r\n            }\r\n            //Handles click on any of New value menu items\r\n            //Note: More events can have sam handler and more hahndlers can be attached to single event in .NET\r\n            private function tmiNewValue_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //Detect kind from item being clicked\r\n                if($sender === $this->tmiNewBinary)\r\n                    $kind = RegistryValueKind::Binary;\r\n                elseif($sender === $this->tmiNewDWord)\r\n                    $kind = RegistryValueKind::DWord;\r\n                elseif($sender === $this->tmiNewExpandable)\r\n                    $kind = RegistryValueKind::ExpandString;    \r\n                elseif($sender === $this->tmiNewMulti)\r\n                    $kind = RegistryValueKind::MultiString;\r\n                elseif($sender === $this->tmiNewQWord)\r\n                    $kind = RegistryValueKind::QWord;\r\n                elseif($sender === $this->tmiNewString)\r\n                    $kind = RegistryValueKind::i'String';\r\n                $this->Addvalue($kind);//Do add\r\n            }\r\n            ///<summary>deletes currently selected registry key</summary>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function DeleteKey(){\r\n                $KeyName=$this->tvwRegistry->SelectedNode->Text;\r\n                //Ask user\r\n                if(MessageBox::Show(Program::$Resources->DeleteKey($KeyName),Program::$Resources->DeleteKey_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question) == DialogResult::Yes):\r\n                    //We must open parent key and ask it to delete its child\r\n                    $parts=explode(\"\\\\\",$this->tvwRegistry->SelectedNode->FullPath);\r\n                    $ParentPath=i'String'::Join(\"\\\\\",$parts,0,count($parts)-1);//Parent path\r\n                    try{\r\n                        $ParentKey=$this->getRegistryKey($ParentPath,true);//Open parent\r\n                    }catch(System:::Exception $ex){\r\n                        self::OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    try{\r\n                        $ParentKey->DeleteSubKeyTree($parts[count($parts)-1]);//Delete child\r\n                    }catch(System:::Exception $ex){\r\n                        self::OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    $this->tvwRegistry->SelectedNode->Remove();//On success delete the node visualy as vell\r\n                    return true;\r\n                else:\r\n                    return false;\r\n                endif;\r\n            }\r\n            ///<summary>Deletes selected values</param>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function DeleteValues(){\r\n                //First chose message\r\n                if($this->lvwRegistry->SelectedItems->Count == 1):\r\n                    //For one-value deletion as with value name\r\n                    $item1=Sorter::Iterate($this->lvwRegistry->SelectedItems->GetEnumerator(),0)->Text;\r\n                    $message= Program::$Resources->DeleteValue($item1);\r\n                else://Otherwise simly ask on values\r\n                    $message=Program::$Resources->DeleteValues;\r\n                endif;\r\n                //Ask user\r\n                if(MessageBox::Show($message,Program::$Resources->DeleteValues_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question)==DialogResult::Yes):\r\n                    try{//Open key\r\n                        $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true);\r\n                    }catch(System:::Exception $ex){\r\n                        self::OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    //Index of st selected item (to preselect something after deletion, users like it)\r\n                    $fsi=Sorter::Iterate($this->lvwRegistry->SelectedIndices->GetEnumerator(),0);\r\n                    //Number of items to delete (to detect skip)\r\n                    $todelcnt=$this->lvwRegistry->SelectedItems->Count;\r\n                    foreach($this->lvwRegistry->SelectedItems as $item):\r\n                        //Label is target for goto statement (Phalanger PHP extension)\r\nDeleteValue:            try{\r\n                            $key->DeleteValue($item->Name);//Try to delete\r\n                        }catch(System:::Exception $ex){//On error ask user what to do\r\n                            switch(self::OnError(Program::$Resources->e_DeleteValue($item->Name).\"\\r\\n$ex->Message\",MessageBoxButtons::AbortRetryIgnore)):\r\n                                case DialogResult::Ignore: continue 2;//Ignore, just procede to next selected value\r\n                                case DialogResult::Retry: goto DeleteValue;//Retry (this is where goto is usefully).\r\n                                default: break 2;//Stop deleteing more values (exit foreach loop)\r\n                            endswitch;\r\n                        }\r\n                        $deleted[]=$item;//Remeber deleted items (to delete them visually as well)\r\n                    endforeach;\r\n                    foreach($deleted as $deleteditem)//Delete items visually\r\n                        $this->lvwRegistry->Items->Remove($deleteditem);\r\n                    //If all selected items was deleted\r\n                    // there is no selected item now\r\n                    // if there is somethign to select    \r\n                    if(count($deleted) == $todelcnt and $this->lvwRegistry->Items->Count > 0):\r\n                        //We will select item near the deleted one\r\n                        $newIndex = max(min($this->lvwRegistry->Items->Count-1,$fsi-1),0);\r\n                        Sorter::Iterate($this->lvwRegistry->Items->GetEnumerator(),$newIndex)->Selected = true;    \r\n                    endif;\r\n                    return count($deleted) > 0;//It may indicate success or semi-success\r\n                else:\r\n                    return false;\r\n                endif;                \r\n            }\r\n            ///<summary>Adds key under curent key</summary>\r\n            ///<param name=\"parent\">Node (not key) to add key into</param>\r\n            ///<param name=\"newname\">Name of key to add. If empty user is asked.</param>\r\n            ///<param name=\"norefresh\">True to not add the key to TreeView and return it instead</param>\r\n            ///<returns>Bool success; created key on success when norefresh was true</returns>\r\n            private function AddKey($parent=null, string $newname=\"\",  bool $norefresh=false){\r\n                //This is somewhat complicated because it ca operate in ineractive and non-interactive mode\r\n                if(is_null($parent)):\r\n                    //Get parent node if we haven't got it\r\n                    if(is_null($this->tvwRegistry->SelectedNode)) return false;\r\n                    $parent = $this->tvwRegistry->SelectedNode;\r\n                endif; \r\n                $Name=$newname;\r\n                if($newname<>\"\") goto testBS;//Do not ask for name\r\n                //Ask for name\r\nEnterName:      if(!is_null($Name=InputBox::GetInput(Program::$Resources->NameOfNewKey,Program::$Resources->CreateKey_t,$Name))):\r\ntestBS:             if($Name->Contains(\"\\\\\"))://Name cannot contain \\\r\n                        self::OnError(Program::$Resources->e_InvalidName($Name));\r\n                        if($newname==\"\")\r\n                            goto EnterName;//Interactive mode (repeat enter)\r\n                        else return false;\r\n                    endif;\r\n                    try{ //Open paren registry key for writing\r\n                        $parentkey=$this->getRegistryKey($parent->FullPath,true);\r\n                    }catch(System:::Exception $ex){\r\n                        $this->OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    //Check if key to be created already exists\r\n                    try{\r\n                        $existing = $parentkey->OpenSubKey($Name,false);\r\n                    }catch(System:::Exception $ex){\r\n                        $this->OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    if(!is_null($existing)):\r\n                        self::OnError(Program::$Resources->e_KeyExists($Name));\r\n                        return false;\r\n                    endif;\r\n                    try{//Create it\r\n                       $newKey = $parentkey->CreateSubKey($Name);\r\n                    }catch(System:::Exception $ex){\r\n                        $this->OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    if($norefresh) return $newKey;//Not interactive, return created key to caller\r\n                    //Otherwise navigate to the new key\r\n                    $wasdummy = \r\n                        ($parent->Nodes->Count == 1 and Sorter::Iterate($parent->Nodes->GetEnumerator(),0)->Name=self::dummy);\r\n                    $parent->Expand();//Expand prent\r\n                    if($wasdummy)://If parent was not loaded, it is now loaded and contain newly created key\r\n                        foreach($parent->Nodes as $node)://search for it\r\n                            if($node->Name == $Name):\r\n                                $newNode=$node;//found\r\n                                break;\r\n                            endif;\r\n                        endforeach;\r\n                    else://Otherwise add it visually\r\n                        $newNode = $parent->Nodes->Add($Name);\r\n                        $newNode->Name =  $Name;\r\n                        $newNode->ImageKey = \"closed\";\r\n                        $newNode->SelectedImageKey = \"closed\";\r\n                    endif;\r\n                    if (!is_null($newNode)):\r\n                        $this->tvwRegistry->SelectedNode = $newNode;//Select new key\r\n                        $newNode->EnsureVisible();//and scrollit to view\r\n                    endif;\r\n                    return true;\r\n                else:\r\n                    return false;\r\n                endif;\r\n            }\r\n            ///<summary>Adds value of given type</summary>\r\n            ///<param name=\"type\">Type of value to add</param>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function Addvalue(int $type){\r\n                //PHPBUG:\r\n                //Note: We cannot declare $type as RegistryValueKind because it then will not assept values like RegistryValueKind::Binary (being it treated as int)\r\n                $editor = new ValueEditor();//Create value editor\r\n                $editor->SetValue(null,$type);//Initialize it\r\n                $editor->NameReadOnly=false;//Allow enter of name\r\n                if($editor->ShowDialog($this)==DialogResult::OK)://Show it\r\n                    try{\r\n                        //Open registry key to add value into\r\n                        $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true);\r\n                        try{//Check if value with same name exists\r\n                            $key->GetValueKind($editor->ValueName);\r\n                            self::OnError(Program::$Resources->e_ValueExists($editor->ValueName));\r\n                            return false;\r\n                        }catch(System:::IO:::IOException $ex){}//Non existent value is indicated by System:::IO:::IOExcpetion - and its what we want\r\n                        $key->SetValue($editor->ValueName,$editor->Value,$type);//Create it (create and change value are same operations)\r\n                    }catch(System:::Exception $ex){\r\n                        self::OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    $this->LoadValues($key);//refresh list of values\r\n                    foreach($this->lvwRegistry->Items as $item)://Search for newly added\r\n                        if($item->Name==$editor->ValueName):\r\n                            $item->Selected=true;//select it\r\n                            $item->EnsureVisible();//and scroll it into view\r\n                            break;\r\n                        endif;\r\n                    endforeach; \r\n                    return true;\r\n                else:\r\n                    return false;\r\n                endif;\r\n            }\r\n            ///<summary>Attempts to rename registry key</summary>\r\n            ///<param name=\"node\">Tree node representing the key to reanem</param>\r\n            ///<param name=\"newname>New name of key</param>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function RenameKey(TreeNode $node, string $newname){\r\n                //This is tricky operation because neither .NET registry API nor Win32 ASPI supports key rename\r\n                // we must clone the key and then delete original\r\n                //Create target for copy\r\n                $newKey = $this->AddKey($node->Parent,$newname,true);    \r\n                if(is_bool($newKey)) return false;\r\n                $copyed=false;\r\n                $this->Cursor = Cursors::$WaitCursor;//Set cursor to hourglass\r\n                try{\r\n                    $OldKey=$this->getRegistryKey($node->FullPath,false);//Open source key for reading\r\n                    $copyed = self::CopyKey($OldKey,$newKey,false);//Copy old key to new key\r\n                }catch(System:::Exception $ex){\r\n                    self::OnError($ex->Message);\r\n                }\r\n                $this->Cursor = Cursors::$Default;//Reset cursor back to normal\r\n                $OldKey->Close();//Closing old key is necessary to be done explicitly (PHP closes IDisposable for you somewhen), but open key cannot be deleted\r\n                unset($OldKey);\r\n                if($copyed):\r\n                    try{\r\n                        $pathparts = explode(\"\\\\\",$node->FullPath);\r\n                        //Open old key's parent\r\n                        $parent = $this->getRegistryKey(System:::String::Join(\"\\\\\",$pathparts,0,count($pathparts)-1),true);\r\n                        $parent->DeleteSubKeyTree($node->Name);//delete old key\r\n                    }catch(System:::Exception $ex){\r\n                        //Delete failed - now we have two identical keys, super :-(\r\n                        $TwoKeys=true;\r\n                        if(isset($parent)):\r\n                            //When we're puzzled, puzzle user as well - let him decide\r\n                            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):\r\n                                try{//Delete old key\r\n                                    $parent->DeleteSubKeyTree($newname);\r\n                                    $TwoKeys=false;\r\n                                }catch(System:::Exception $ex){\r\n                                    //Faild. It'sn't probable, but it's possible\r\n                                    self::OnError(Program::$Resources->e_DeleteDuplicated.\"\\r\\n$ex->Message\");\r\n                                }\r\n                            endif;    \r\n                        endif;\r\n                        if($TwoKeys)://Add doplicate key to tree to user see it\r\n                            $newNode = $this->tvwRegistry->Nodes->Add($newKey->Name);\r\n                            $newenameparts=explode(\"\\\\\",$newKey->Name);\r\n                            $newNode->Name = $newenameparts[count($newenameparts)-1];\r\n                            $newNode->ImageKey=\"closed\";\r\n                            $newNode->SelectedImageKey=\"closed\";\r\n                            $newNode->Nodes->Add(self::dummy)->Name=self::dummy;\r\n                        endif;\r\n                        return false;\r\n                    }\r\n                    $node->Name=$newname;//Change of name (change of label is automatic)\r\n                    return true;\r\n                else:\r\n                    return false;\r\n                endif;\r\n            }\r\n            ///<summary>Renames registry value</summary>\r\n            ///<param name=\"item\"><see cref=\"ListViewItem\"/> representing item to rename</prama>\r\n            ///<param name=\"newname\">Proposed new name</praram>\r\n            private function RenameValue(ListViewItem $item, string $newname){\r\n                //Technically the same situation as key rename, but copying is quite easy\r\n                try{//Open key\r\n                    $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true);\r\n                }catch(System:::Exception $ex){\r\n                    self::OnError($ex->Message);\r\n                    return false;\r\n                }\r\n                try{//Chekck existence of newname-named value\r\n                    $key->GetValueKind($newname);\r\n                    self::OnError(Program::$Resources->e_Rename($item->Text,$newname));\r\n                    return false;\r\n                }catch(System:::IO:::IOException $ex){}//If thrown it does not exist\r\n                try{//Set new value\r\n                    $key->SetValue($newname,\r\n                        $key->GetValue($item->Name,null,RegistryValueOptions::DoNotExpandEnvironmentNames),\r\n                        $key->GetValueKind($item->Name));\r\n                }catch(System:::Exception $ex){\r\n                    self::OnError($ex->Message);\r\n                    return false;\r\n                }\r\n                try{//Delete old value\r\n                    $key->DeleteValue($item->Name);\r\n                }catch(System:::Exception $ex){\r\n                    //Failed of delete (inprobable when we were allowed to create one). Let user see both\r\n                    $this->LoadValues($key);\r\n                    foreach($this->lvwRegistry->Items as $item2):\r\n                        $item2->Selected = ($item2->Name == $newname or $item2->Name == $item->Name);\r\n                    endforeach;\r\n                    return true;\r\n                } \r\n                //Do the rename\r\n                $item->Name=$newname;\r\n                $item->Text=$newname;#is that necessary?\r\n                return true;\r\n            }\r\n            ///<summary>Performs value editing</summary>\r\n            ///<returns type=\"bool\">success</returns>\r\n            private function EditValue(){\r\n                if ($this->lvwRegistry->SelectedItems->Count<>1) return false;\r\n                $name = Sorter::Iterate($this->lvwRegistry->SelectedItems->GetEnumerator(),0)->Name;\r\n                try{\r\n                    //Open key\r\n                    $key=$this->getRegistryKey($this->tvwRegistry->SelectedNode->FullPath,true);\r\n                    $type = $key->GetValueKind($name);//get kind\r\n                    if($type==RegistryValueKind::Unknown)://Cannot edit unknown\r\n                        self::OnError(Program::$Resources->e_editUnknown);\r\n                        return false;\r\n                    endif;\r\n                    //Get value\r\n                    $value = $key->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames);\r\n                }catch(System:::Exception $ex){\r\n                    self::OnError($ex->Message);\r\n                    return false;\r\n                }\r\n                $editor = new ValueEditor();//Create editor\r\n                $editor->SetValue($value,$type);//Initialize it\r\n                $editor->ValueName=$name;//Set value name\r\n                if($editor->ShowDialog($this)==DialogResult::OK)://Show it\r\n                    try{\r\n                        $key->SetValue($name,$editor->Value,$type);//Write changed value    \r\n                    }catch(System:::Exception $ex){\r\n                        self::OnError($ex->Message);\r\n                        return false;\r\n                    }\r\n                    $this->LoadValues($key);//referesh list\r\n                    foreach($this->lvwRegistry->Items as $item):\r\n                        if($item->Name == $name)://Search for edited value\r\n                            $item->Selected=true;//Select it\r\n                            $item->EnsureVisible();//Scroll it into view\r\n                            break;\r\n                        endif; \r\n                    endforeach;\r\n                    return true;\r\n                else:\r\n                    return false;\r\n                endif;    \r\n            }\r\n            ///<summary>Show error message box</summary>\r\n            ///<param name=\"message\">Message</param>\r\n            ///<param name=\"buttons\">Buttons to show</param>\r\n            ///<returns type=\"int\">Message box result (clicked button)</returns>\r\n            public static function OnError(string $message, $buttons = MessageBoxButtons::OK){\r\n                //This is the most common Windows API\r\n                return MessageBox::Show($message, Program::$Resources->Error_t, $buttons, MessageBoxIcon::Error);\r\n            } \r\n            //Handles mosued down on tree\r\n            private function tvwRegistry_MouseDown(System:::Object $sender, System:::Windows:::Forms:::MouseEventArgs $e) {\r\n                if ($e->Button == MouseButtons::Right and !is_null($node = $sender->GetNodeAt($e->X,$e->Y))):\r\n                    //This little hack selects node befor context menu is shown for right click\r\n                    $sender->SelectedNode = $node;\r\n                endif;\r\n            }\r\n            //Handles clcick on tzhe Referesh cionetx menu item\r\n            private function tmiRefreshNode_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                if($this->tvwRegistry->SelectedNode->FullPath == HKEY_CLASSES_ROOT)\r\n                    //Ask for HKCR because it may take long    \r\n                    if(MessageBox::Show(Program::$Resources->RefreshHKCR,Program::$Resources->RefreshHKCR_t,MessageBoxButtons::YesNo,MessageBoxIcon::Question)<>DialogResult::Yes)\r\n                        return;\r\n                $this->Cursor = Cursors::$WaitCursor;\r\n                self::FillNode($this->tvwRegistry->SelectedNode);//Reload nodes\r\n                $this->tvwRegistry->SelectedNode->Expand();//expand it\r\n                $this->Cursor = Cursors::$Default;\r\n            }\r\n            //Hasndles clcick on Select all context menu item\r\n            private function tmiSelectAll_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                foreach($this->lvwRegistry->Items as $item)\r\n                    $item->Selected = true;\r\n            }\r\n            //Handkles click on Copy full path context menu item\r\n            private function tmiCopyFullPath_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //we can copy full poath of key as welkl as of value\r\n                if($this->cmsContext->SourceControl === $this->tvwRegistry):\r\n                    $str = $this->tvwRegistry->SelectedNode->FullPath;\r\n                else://Just append value name\r\n                    $str = $this->tvwRegistry->SelectedNode->FullPath . \"\\\\\" . $this->lvwRegistry->FocusedItem->Name;\r\n                endif;\r\n                //And place it into clipboard\r\n                Clipboard::SetText($str,TextDataFormat::UnicodeText);\r\n            }\r\n\r\n//Settings\r\n            //Called when form loads\r\n            private function frmMain_Load(System:::Object $sender, System:::EventArgs $e) {\r\n                $this->LoadSettings();//Load settings\r\n            }\r\n            //Called after form closes\r\n            private function frmMain_FormClosed(System:::Object $sender, System:::Windows:::Forms:::FormClosedEventArgs $e) {\r\n                $this->SaveSettings();//Save settings\r\n            }\r\n            ///<summary>Loads form settings from settings class</summary>\r\n            private function LoadSettings(){\r\n                //Size\r\n                if(!is_null($value=Program::$Settings->MainSize))\r\n                    $this->ClientSize = $value;\r\n                //State    \r\n                if(!is_null($value=Program::$Settings->MainState))\r\n                    $this->WindowState = $value;\r\n                //Splitter (between tree view and listview) distance\r\n                if(!is_null($value=Program::$Settings->SplitterDistance)) \r\n                    $this->splMain->SplitterDistance = $value;\r\n                //Widths of columns    \r\n                if(!is_null($value=Program::$Settings->ColumnWidths)):   \r\n                    if(count($value) == $this->lvwRegistry->Columns->Count):\r\n                        $i=0;\r\n                        foreach($this->lvwRegistry->Columns as $col):\r\n                            $col->Width = Program::$Settings->ColumnWidths[$i++];\r\n                        endforeach;\r\n                    endif;\r\n                endif;\r\n            }\r\n            ///<summary>Saves settings to settings class</summary>\r\n            private function SaveSettings(){\r\n                Program::$Settings->MainSize = $this->ClientSize;//Size\r\n                Program::$Settings->MainState = $this->WindowState;//State\r\n                Program::$Settings->SplitterDistance = $this->splMain->SplitterDistance;//Splitter distance\r\n                foreach($this->lvwRegistry->Columns as $col)://Column widths\r\n                        $widths[] = $col->Width;\r\n                endforeach;\r\n                Program::$Settings->ColumnWidths = $widths;\r\n                Program::$Settings->Save();//Write to disc\r\n            }\r\n//Copy\r\n            ///<summary>Copies content of given registry key to another</summary>\r\n            ///<param name=\"src\">Source key</param>\r\n            ///<param name=\"dest\">Destination key</param>\r\n            ///<param name=\"interactive\">Allow user to recover form errors (if false only error message is displayed)</param>\r\n            ///<returns>Success</param> \r\n            private static function CopyKey(RegistryKey $src, RegistryKey $dest,bool $interactive){\r\n                //Copy values\r\n                if (!self::CopyValues($src,$dest,$interactive)) return false;\r\n                //and copy keys\r\n                return self::CopySubKeys($src,$dest,$interactive);\r\n            }\r\n            ///<summary>Copies value ofrom one key to another</summary>\r\n            ///<param name=\"src\">Source key</param>\r\n            ///<param name=\"dest\">Destination key</param>\r\n            ///<param name=\"interactive\">Allow user to recover form errors (if false only error message is displayed)</param>\r\n            ///<returns>Success</param> \r\n            private static function CopyValues(RegistryKey $src, RegistryKey $dest, bool $interactive){\r\n                //Prepare message box buttons\r\n                $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK;\r\nInitCopy:       try{\r\n                    foreach($src->GetValueNames() as $name):\r\nCopyValue:              try{//Copy value\r\n                            $dest->SetValue($name,\r\n                                $src->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames),\r\n                                $src->GetValueKind($name));\r\n                        }catch(System:::Exception $ex){\r\n                            switch(self::OnError(Program::$Resources->e_CopyValue($name,$src->Name,$dest->Name).\"\\r\\n$ex->Message\",$mb)):\r\n                                case DialogResult::Retry: goto CopyValue;\r\n                                case DialogResult::Ignore: break;\r\n                                default:return false;\r\n                            endswitch;\r\n                        }\r\n                    endforeach;\r\n                }catch(System:::Exception $ex){\r\n                    switch(self::OnError(Program::$Resources->e_EnlistValues($src->Name).\"\\r\\n$ex->Message\",$mb)):\r\n                        case DialogResult::Retry: goto InitCopy;\r\n                        case DialogResult::Ignore: return true;\r\n                        default:return false;\r\n                    endswitch;\r\n                }\r\n                return true;\r\n            }\r\n            ///<summary>Copies keys from one key to another</summary>\r\n            ///<param name=\"src\">Source key</param>\r\n            ///<param name=\"dest\">Destination key</param>\r\n            ///<param name=\"interactive\">Allow user to recover form errors (if false only error message is displayed)</param>\r\n            ///<returns>Success</param> \r\n\r\n            private static function CopySubKeys(RegistryKey $src, RegistryKey $dest, bool $interactive){\r\n                //Prepare message box buttons\r\n                $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK;\r\nInitCopy:       try{\r\n                    foreach($src->GetSubKeyNames() as $skName)://For each sub key\r\nOpenSrc:                try{\r\n                            $SrcSubKey=$src->OpenSubKey($skName);//Open it\r\n                        }catch(System:::Exception $ex){\r\n                            switch(self::OnError(Program::$Resources->e_OpenSubKey($src->Name,$skName).\"\\r\\n$ex->Message\",$mb)):\r\n                                case DialogResult::Retry: goto OpenSrc;\r\n                                case DialogResult::Ignore: continue 2;\r\n                                default:return false;\r\n                            endswitch;\r\n                        }\r\nOpenDest:               try{\r\n                            $DestSubKey=$dest->CreateSubKey($skName);//Create it in target\r\n                        }catch(System:::Exception $ex){\r\n                            switch(self::OnError(Program::$Resources->e_CreateSubKey($dest->Name,$skName).\"\\r\\n$ex->Message\",$mb)):\r\n                                case DialogResult::Retry: goto OpenDest;\r\n                                case DialogResult::Ignore:\r\n                                    $SrcSubKey->Close();\r\n                                    continue 2;\r\n                                default:return false;\r\n                            endswitch;\r\n                        }\r\n                        //Recurse\r\n                        if(!self::CopyKey($SrcSubKey,$DestSubKey,$interactive)) return false;\r\n                        //PHP does this automatically for IDisposable \r\n                        // but for massive operations it's better to do it manually\r\n                        $SrcSubKey->Close();\r\n                        $DestSubKey->Close();       \r\n                    endforeach;\r\n                }catch(System:::Exception $ex){\r\n                    switch (self::OnError(Program::$Resources->e_EnlistSubKeys($src->Name).\"\\r\\n$ex->Message\",$mb)):\r\n                        case DialogResult::Retry: goto InitCopy;\r\n                        case DialogResult::Ignore: return true;\r\n                        default:return false;\r\n                    endswitch;\r\n                }\r\n                return true;\r\n            }\r\n//Export            \r\n            //Handles clcik on Export context menu item\r\n            private function tmiExport_Click(System:::Object $sender, System:::EventArgs $e) {\r\n                //Show save file dialog\r\n                if($this->sfdExport->ShowDialog() == DialogResult::OK):\r\n                    unset($kw);\r\n                    //Depending on format selected by user\r\n                    switch($this->sfdExport->FilterIndex):\r\n                       case 1:\r\n                            $kw=\"export\";\r\n                       case 3:\r\n                           $kw = isset($kw) ? $kw : \"save\";\r\n                           $Keypath = $this->tvwRegistry->SelectedNode->FullPath;\r\n                           $file = $this->sfdExport->FileName;\r\n                           if(System:::IO:::File::Exists($file)):\r\n                                //If file exist delete is as reg does not delete it automatically\r\n                                try{System:::IO:::File::Delete($file);}\r\n                                catch(System:::Exception $ex){\r\n                                    self::OnError($ex->Message);\r\n                                    return;\r\n                                }    \r\n                           endif;\r\n                           //Call reg to do the work\r\n                           // because .NET does not have function for it\r\n                           // doing it manually is too much work\r\n                           //PHPBUG:\r\n                           // using Win32 API cannot be done from Phalanger yet\r\n                           $result = `reg $kw \"$Keypath\" \"$file\"`;//This curious feature of PHP requires at least 7 lines of code in C#/VB :-)\r\n                           MessageBox::Show($result,Program::$Resources->ExportKey_t,MessageBoxButtons::OK,MessageBoxIcon::Information);\r\n                       break;\r\n                       case 2:\r\n                            //To XML do it manually (it's not so hard)\r\n                            //Create XML\r\n                            $xml=self::KeysToXml(array(self::getRegistryKey($this->tvwRegistry->SelectedNode->FullPath)),true);\r\n                            if(is_null($xml)) return;\r\n                            try{\r\n                                $xml->Save($this->sfdExport->FileName);//Save XML\r\n                            }catch(System:::Exception $ex){\r\n                                self::OnError($ex-Message);\r\n                                return;\r\n                            }\r\n                            MessageBox::Show(Program::$Resources->ExportSuccessful,Program::$Resources->ExportKey_t,MessageBoxButtons::OK,MessageBoxIcon::Information);\r\n                       break;\r\n                       default: self::OnError(Program::$Resources->e_UnknownregistryFileType);\r\n                    endswitch;\r\n                endif;\r\n            }\r\n            //private static function GetKeyHandle(RegistryKey $key){\r\n                //$KeyType = CLRTypeOf RegistryKey;\r\n                //$hKey = $KeyType->GetField(\"hkey\",System:::Reflection:::BindingFlags::NonPublic |  System:::Reflection:::BindingFlags::Instance);\r\n                //$hKey = $hKey->GetValue($key);\r\n                //return $hKey;\r\n            //}\r\n            ///<summary>XML namespace name for registry XML</summary>\r\n            const XMLNS = \"http://dzonny.cz/xml/registry\";\r\n            ///<summary>Converts registry keys to XML</summary>\r\n            ///<param name=\"Keys\">Keys tio convert>/param>\r\n            ///<param name=\"Interactive\">Allow user to recover from errors</param>\r\n            ///<returns type=\"System:::Xml:::XmlDocument\">XML document with exported nodes</returns>\r\n            private static function KeysToXml(array $Keys,bool $Interactive){\r\n                $doc = new System:::Xml:::XmlDocument();\r\n                $ns=self::XMLNS;\r\n                //Creating XML document this way is easier than using DOM\r\n                $doc->LoadXml(<<<xmlstring\r\n<?xml version=\"1.0\"?>\r\n<registry xmlns=\"$ns\"/>\r\nxmlstring\r\n                );\r\n                try{//Convert keys to XML\r\n                    foreach($Keys as $key){//Ooops I've used C-syntax, I've must be drunken :-)\r\n                        $keyXml = self::KeyToXml($key,$doc,$Interactive);//Get XML\r\n                        $keyXml->SetAttribute(\"name\",$key->Name);//Change name to be fully qualified\r\n                        $doc->DocumentElement->AppendChild($keyXml,$Interactive);//Add to document\r\n                    }\r\n                }catch(System:::Exception $ex){return null;}\r\n                catch(Exception $ex){return null;}\r\n                return $doc;\r\n            }\r\n            ///<summary>COnverts single registry key to XML</summary>\r\n            ///<param name=\"key\">Key to export</param>\r\n            ///<param name=\"doc\">Document to create element for</param>\r\n            ///<param name=\"Interactive\">Allow user to recover form errros</prama>\r\n            ///<returns type=\"System:::Xml:::XmlElement\">Element with exported key</returns>\r\n            private static function KeyToXml(RegistryKey $key,System:::Xml:::XmlDocument $doc,bool $Interactive){\r\n                //Prepare message box buttons\r\n                $mb=$interactive ? MessageBoxButtons::AbortRetryIgnore : MessageBoxButtons::OK;    \r\n                //Create element\r\n                $el = $doc->CreateElement(\"key\",self::XMLNS);\r\n                $parts = explode(\"\\\\\",$key->Name);\r\n                $el->SetAttribute(\"name\",$parts[count($parts)-1]);//Name it\r\nGetNames:       try{//Get value names\r\n                    $names=$key->GetValueNames();\r\n                }catch(System:::Exception $ex){\r\n                    switch(self::OnError(Program::$Resources->e_EnlistValues($key->Name).\"\\r\\n$ex->Message\",$mb)):\r\n                        case DialogResult::Retry: goto GetNames;\r\n                        case DialogResult::Ignore: goto GetKNames;\r\n                        default: throw new CLRException($ex);\r\n                    endswitch;\r\n                }\r\n                foreach($names as $name)://Serialize values\r\nGetValue:           unset($eln);\r\n                    try{\r\n                        switch($key->GetValueKind($name))://Depending on type\r\n                            case RegistryValueKind::Binary://Base 64\r\n                                $vel=$doc->CreateElement(\"binary\",self::XMLNS);\r\n                                $vel->InnerText = System:::Convert::ToBase64String($key->GetValue($name));\r\n                            break;\r\n                            case RegistryValueKind::QWord://This is easy\r\n                                $eln=\"qword\";\r\n                            case RegistryValueKind::DWord:\r\n                                $eln = isset($eln)?$eln:\"dword\";\r\n                                $vel=$doc->CreateElement($eln,self::XMLNS);\r\n                                //Just better use invariant culture to prevent arabicx or even georgian numerals in your XML\r\n                                $vel->InnerText = $key->GetValue($name)->ToString(\"D\",System:::Globalization:::CultureInfo::$InvariantCulture);\r\n                            break;\r\n                            case RegistryValueKind::ExpandString:\r\n                                $eln=\"expand\";\r\n                            case RegistryValueKind::i'String':\r\n                                $eln = isset($eln)?$eln:\"string\";\r\n                                $vel=$doc->CreateElement($eln,self::XMLNS);\r\n                                //String mkust be saved non-expanded\r\n                                $vel->InnerText = $key->GetValue($name,null,RegistryValueOptions::DoNotExpandEnvironmentNames);\r\n                            break;\r\n                            case RegistryValueKind::MultiString:\r\n                                //Store in multible subelements\r\n                                $vel=$doc->CreateElement(\"multi\",self::XMLNS);\r\n                                foreach($key->GetValue($name) as $string):\r\n                                    $subel=$doc->CreateElement(\"string\",self::XMLNS);\r\n                                    $subel->InnerText = $string;\r\n                                    $vel->AppendChild($subel);\r\n                                endforeach;\r\n                            break;\r\n                            default://Cannot store unknown\r\n                                switch(self::OnError(Program::$Resources->e_GetValue($key->Name,$name).\"\\r\\n$ex->Message\",$mb)):\r\n                                    case DialogResult::Retry: goto GetValue;\r\n                                    case DialogResult::Ignore: continue 3;\r\n                                    default: throw new CLRException($ex);\r\n                                endswitch;\r\n                        endswitch;\r\n                    }catch(System:::Exception $ex){\r\n                        switch(self::OnError(Program::$Resources->e_GetValue($key->Name,$name).\"\\r\\n$ex->Message\",$mb)):\r\n                            case DialogResult::Retry: goto GetValue;\r\n                            case DialogResult::Ignore: continue 2;\r\n                            default: throw new CLRException($ex);\r\n                        endswitch;\r\n                    }\r\n                    $el->AppendChild($vel);\r\n                    $vel->SetAttribute(\"name\",$name);\r\n                endforeach; \r\nGetKNames:      try{//Get sub key names\r\n                    $names=$key->GetSubKeyNames();\r\n                }catch(System:::Exception $ex){\r\n                    switch(self::OnError(Program::$Resources->e_EnlistSubKeys($key->Name).\"\\r\\n$ex->Message\",$mb)):\r\n                        case DialogResult::Retry: goto GetKNames;\r\n                        case DialogResult::Ignore: return $el;\r\n                        default: throw new CLRException($ex);\r\n                    endswitch;\r\n                }\r\n                foreach($names as $name)://Save sub keys\r\nGetKey:             unset($SubKey);\r\n                    try{\r\n                        $SubKey = $key->OpenSubKey($name);//Open\r\n                        $kel = self::KeyToXml($SubKey,$doc,$Interactive);//Recurse\r\n                        $el->AppendChild($kel);\r\n                    }catch(System:::Exception $ex){\r\n                        switch(self::OnError(Program::$Resources->e_OpenSubKey($key->Name,$name).\"\\r\\n$ex->Message\",$mb)):\r\n                            case DialogResult::Retry: goto GetKey;\r\n                            case DialogResult::Ignore: break 2;\r\n                            default: throw new CLRException($ex);\r\n                        endswitch;\r\n                    }\r\n                    if(!is_null($SubKey))$SubKey->Close();\r\n                endforeach;\r\n                return $el;\r\n            }\r\n\t    }    \r\n    }\r\n?>"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/readme.cs.rtf",
    "content": "{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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};}\r\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\flominor\\f31504\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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};}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\f79\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic);}{\\f80\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic;}{\\f81\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese);}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\r\n{\\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;}\r\n{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}}\r\n{\\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;\r\n\\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 \r\n\\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 \r\n\\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 \r\nDefault 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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\sbasedon10 \\sunhideused \\styrsid15158737 Hyperlink;}}{\\*\\listtable{\\list\\listtemplateid-328425630\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\r\n\\'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\r\n;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\r\n\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\r\n\\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 \r\n\\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \r\n\\fi-360\\li4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \r\n\\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 }\r\n{\\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 \r\n;}\\listid193737980}{\\list\\listtemplateid-458086446\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\r\n\\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 \r\n\\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \r\n\\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \r\n\\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 }\r\n{\\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\r\n\\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\r\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\r\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li6480\\lin6480 }{\\listname ;}\\listid618268834}}{\\*\\listoverridetable\r\n{\\listoverride\\listid618268834\\listoverridecount0\\ls1}{\\listoverride\\listid193737980\\listoverridecount0\\ls2}}{\\*\\rsidtbl \\rsid142241\\rsid208113\\rsid217781\\rsid345974\\rsid550746\\rsid552350\\rsid1593398\\rsid1783103\\rsid2055905\\rsid2711893\\rsid2969566\r\n\\rsid2980693\\rsid3231679\\rsid3347747\\rsid3895175\\rsid4411658\\rsid4654667\\rsid4672345\\rsid5124551\\rsid5128047\\rsid5389481\\rsid5461175\\rsid6241037\\rsid6970024\\rsid7087192\\rsid7540268\\rsid7560460\\rsid8005191\\rsid8067474\\rsid8089220\\rsid8209989\\rsid8461511\r\n\\rsid9070747\\rsid9123274\\rsid10109114\\rsid10250287\\rsid10686364\\rsid11100254\\rsid11100399\\rsid11290244\\rsid11483350\\rsid11556869\\rsid11603778\\rsid11611650\\rsid11680637\\rsid11738431\\rsid11740698\\rsid12018813\\rsid12415101\\rsid12601025\\rsid12609733\r\n\\rsid12859122\\rsid13059307\\rsid13397719\\rsid13722403\\rsid13922005\\rsid14054378\\rsid14360527\\rsid14640974\\rsid15158737\\rsid16205939\\rsid16256917\\rsid16466085\\rsid16604065\\rsid16661396\\rsid16731120}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\r\n\\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}\r\n{\\*\\company  }{\\nofcharsws2321}{\\vern32895}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\\paperw11906\\paperh16838\\margl1417\\margr1417\\margt1417\\margb1417\\gutter0\\ltrsect \r\n\\deftab708\\widowctrl\\ftnbj\\aenddoc\\hyphhotz425\\trackmoves1\\trackformatting1\\donotembedsysfont1\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\r\n\\showxmlerrors1\\noxlattoyen\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\formshade\\horzdoc\\dgmargin\\dghspace180\\dgvspace180\\dghorigin1417\\dgvorigin1417\\dghshow1\\dgvshow1\r\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\allowfieldendsel\\wrppunct\r\n\\asianbrkrule\\rsidroot5461175\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\r\n{\\*\\wgrffmtfilter 2450}\\nofeaturethrottle1\\ilfomacatclnup0\\ltrpar \\sectd \\ltrsect\\linex0\\headery708\\footery708\\colsx708\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid2969566\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}\r\n{\\*\\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 \r\n{\\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 (}\r\n{\\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 \r\n\\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\r\n\\'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 \r\n\\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 \r\n  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 \r\n\\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:\r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin720\\itap0\\pararsid6970024\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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\r\n\\'e1\\'f8\\'f9}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid5461175\\charrsid16466085 \r\n\\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 \r\n\\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 \r\nivatelsk\\'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 \r\n\\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 \r\n\\f39\\fs16\\insrsid5128047\\charrsid16466085 \\hich\\af39\\dbch\\af31505\\loch\\f39 Lokalizaci}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid5461175\\charrsid16466085 \r\n\\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 \r\n\\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 \r\n\\ltrch\\fcs0 \\f39\\fs16\\insrsid5461175\\charrsid16466085 \r\n\\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 \r\n\\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 \r\n\\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\r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 :\r\n\\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 \r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 Aplikace\r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0\\pararsid6970024\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\n 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 \r\n\\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 \r\n\\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\r\n\\hich\\af39\\dbch\\af31505\\loch\\f39  jako informaci, nikoliv jako chybu.\r\n\\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 \r\n\\hich\\f39 e HKEY_DYN_DATA a HKEY_PERFORMANCE_DATA nefunguj\\'ed.\r\n\\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 \r\n\\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 \r\n\\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\r\n\\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\r\n\\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 {\r\n\\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\r\n\\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 \r\n\\f39\\fs16\\insrsid217781 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900\r\n6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab0000ff}}}{\\fldrslt {\r\n\\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\r\n\\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 \r\n\\f39\\fs16\\insrsid3895175\\charrsid16466085 \r\n\\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 \r\n\\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\r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 \\hich\\f39 ov\\'e9\\loch\\f39 \\hich\\f39  prost\\'f8\\loch\\f39 \\hich\\f39 ed\\'ed\r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0\\pararsid6970024\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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\r\n\\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 \r\n\\ltrch\\fcs0 \\f39\\fs16\\insrsid5461175\\charrsid16466085 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n 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\r\n\\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 \r\nmto 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 \r\n\\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 \r\n\\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.\r\n\\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\r\n\\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\r\n\\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 \r\n\\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\r\n\\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\r\n\\loch\\f39 na na konci *.phpproj souboru}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid3895175 \\hich\\af39\\dbch\\af31505\\loch\\f39 )\r\n\\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\r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\insrsid12415101\\charrsid16466085 \r\n\\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 \r\n\\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 \r\n\\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 \r\nPhalanger 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 \r\n\\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid5461175 \r\n\\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:}\r\n{\\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 \r\n\\f39\\fs16\\insrsid217781 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bba000000680074007400700073003a002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e0070006800\r\n70003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab00006400417303}}}{\\fldrslt {\\rtlch\\fcs1 \r\n\\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\r\n\\linex0\\headery708\\footery708\\colsx708\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid2969566\\sftnbj {\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid15158737\\charrsid16466085 \r\n\\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\r\n\\loch\\f39 \\hich\\f39 n\\'fd\\loch\\f39 m *.php souborem.}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid2055905 \r\n\\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 :\r\n\\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\r\n}{\\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 \r\n\\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 \r\n\\b\\f39\\fs16\\insrsid3895175 \r\n\\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\r\n\r\n\\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 \r\n virtualizaci registr\\'f9\\loch\\f39 )}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid3895175\\charrsid3895175 \r\n\\par }{\\*\\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8\r\n72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7\r\n2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b\r\n44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7\r\n065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000\r\n00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08\r\n84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc\r\n52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353\r\nbd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468\r\n656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c\r\n070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7\r\n29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65\r\n312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995\r\nb89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9\r\n701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6\r\n34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc\r\n6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6\r\n7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d\r\nbc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4\r\n342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e\r\nc2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280\r\n76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e\r\n73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b\r\nfa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc\r\n2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b\r\nf7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a\r\n22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3\r\n1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae\r\na4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f\r\ne75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6\r\nd2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb\r\n1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c\r\n7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33\r\nd9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee\r\n64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd\r\ndd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2\r\nac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f\r\na40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30\r\n631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6\r\n0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f\r\nd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060\r\n828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff\r\nb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000\r\n1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000\r\n00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00\r\n000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327\r\na8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100\r\n0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000}\r\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\r\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\r\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\r\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\r\n{\\*\\latentstyles\\lsdstimax267\\lsdlockeddef0\\lsdsemihiddendef1\\lsdunhideuseddef1\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\r\n\\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;\r\n\\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;\r\n\\lsdpriority39 \\lsdlocked0 toc 8;\\lsdpriority39 \\lsdlocked0 toc 9;\\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority59 \\lsdlocked0 Table Grid;\\lsdunhideused0 \\lsdlocked0 Placeholder Text;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdunhideused0 \\lsdlocked0 Revision;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 3;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 6;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdpriority37 \\lsdlocked0 Bibliography;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;}}{\\*\\datastore 010500000200000018000000\r\n4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000\r\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000203e\r\nd644297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\r\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\r\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\r\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/readme.hr.rtf",
    "content": "{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\f40\\fbidi \\fnil\\fcharset134\\fprq2{\\*\\panose 02010600030101010101}@SimSun;}{\\flomajor\\f31500\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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};}\r\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\flominor\\f31504\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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};}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\f79\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic);}{\\f80\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic;}{\\f81\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese);}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\r\n{\\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;}\r\n{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}}\r\n{\\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;\r\n\\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 \r\n\\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 \r\n\\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 \r\nDefault 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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\sbasedon10 \\sunhideused \\styrsid15158737 Hyperlink;}{\\s17\\ql \\li0\\ri0\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\rtlch\\fcs1 \\af31507\\afs20\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\n\\sbasedon10 \\slink17 \\slocked \\ssemihidden \\styrsid7361181 Text vysv\\'ectlivek Char;}{\\*\\cs19 \\additive \\rtlch\\fcs1 \\af0 \\ltrch\\fcs0 \\super \\sbasedon10 \\ssemihidden \\sunhideused \\styrsid7361181 endnote reference;}}{\\*\\listtable\r\n{\\list\\listtemplateid-328425630\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \r\n\\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 }\r\n{\\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\r\n\\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\r\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\r\n\\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\r\n\\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\r\n\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\r\n\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li6480\\lin6480 }{\\listname ;}\\listid193737980}{\\list\\listtemplateid2099139110\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\r\n\\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\r\n\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\r\n\\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\r\n\\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\r\n{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \\fi-360\\li5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\r\n\\'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\r\n\\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\r\n{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \\fi-360\\li2880\\lin2880 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\r\n\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\r\n\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\r\n\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \\fi-360\\li5040\\lin5040 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\r\n\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\r\n\\'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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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\r\n\\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}\r\n{\\listoverride\\listid193737980\\listoverridecount0\\ls2}{\\listoverride\\listid1702592304\\listoverridecount0\\ls3}{\\listoverride\\listid1475443951\\listoverridecount0\\ls4}}{\\*\\rsidtbl \\rsid142241\\rsid208113\\rsid275639\\rsid345974\\rsid550746\\rsid552350\\rsid683278\r\n\\rsid1378136\\rsid1593398\\rsid1783103\\rsid1930230\\rsid2055905\\rsid2711893\\rsid2969566\\rsid2980693\\rsid3231679\\rsid3694742\\rsid3895175\\rsid4411658\\rsid4654667\\rsid4672345\\rsid4678839\\rsid5124551\\rsid5128047\\rsid5389481\\rsid5461175\\rsid6186956\\rsid6241037\r\n\\rsid6565277\\rsid7361181\\rsid7540268\\rsid7560460\\rsid8005191\\rsid8067474\\rsid8209989\\rsid8458801\\rsid8461511\\rsid9070747\\rsid9123274\\rsid9775175\\rsid10109114\\rsid10250287\\rsid11100254\\rsid11100399\\rsid11290244\\rsid11483350\\rsid11556869\\rsid11603778\r\n\\rsid11611650\\rsid11680637\\rsid11738431\\rsid11740698\\rsid12018813\\rsid12601025\\rsid12609733\\rsid12859122\\rsid13059307\\rsid13397719\\rsid13922005\\rsid14054378\\rsid14360527\\rsid14640974\\rsid15158737\\rsid15491994\\rsid16205939\\rsid16322290\\rsid16390806\r\n\\rsid16466085\\rsid16470532\\rsid16604065\\rsid16661396}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\\mlMargin0\\mrMargin0\\mdefJc1\\mwrapIndent1440\\mintLim0\\mnaryLim1}{\\info{\\author Jan Z\\'e1ruba}{\\operator Honza}\r\n{\\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}\r\n}\\paperw11906\\paperh16838\\margl1417\\margr1417\\margt1417\\margb1417\\gutter0\\ltrsect \r\n\\deftab708\\widowctrl\\ftnbj\\aenddoc\\hyphhotz425\\trackmoves1\\trackformatting1\\donotembedsysfont1\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\r\n\\showxmlerrors1\\noxlattoyen\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\formshade\\horzdoc\\dgmargin\\dghspace180\\dgvspace180\\dghorigin1417\\dgvorigin1417\\dghshow1\\dgvshow1\r\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\allowfieldendsel\\wrppunct\r\n\\asianbrkrule\\rsidroot5461175\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\r\n{\\*\\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 \r\n\\fs22\\lang1029\\langfe2052\\loch\\af31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1029\\langfenp2052 {\\rtlch\\fcs1 \\af31507 \\ltrch\\fcs0 \\insrsid7361181 \\chftnsep \r\n\\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 \r\n\\fs22\\lang1029\\langfe2052\\loch\\af31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1029\\langfenp2052 {\\rtlch\\fcs1 \\af31507 \\ltrch\\fcs0 \\insrsid7361181 \\chftnsepc \r\n\\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 \r\n\\fs22\\lang1029\\langfe2052\\loch\\af31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1029\\langfenp2052 {\\rtlch\\fcs1 \\af31507 \\ltrch\\fcs0 \\insrsid7361181 \\chftnsep \r\n\\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 \r\n\\fs22\\lang1029\\langfe2052\\loch\\af31506\\hich\\af31506\\dbch\\af31505\\cgrid\\langnp1029\\langfenp2052 {\\rtlch\\fcs1 \\af31507 \\ltrch\\fcs0 \\insrsid7361181 \\chftnsepc \r\n\\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 \r\n{\\pntxta .}}{\\*\\pnseclvl3\\pndec\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxta )}}{\\*\\pnseclvl5\\pndec\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\r\n\\pnlcltr\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl7\\pnlcrm\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\r\n\\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 \r\n\\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 \r\nOva 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\r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid683278\\charrsid8458801 \r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin720\\itap0\\pararsid9775175\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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\r\n\r\n\\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\r\n\\loch\\f39 kih kontrola\r\n\\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\r\n\\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\r\n\\loch\\f39 \\hich\\f39 enu potporu za djelomi\\'e8\\loch\\f39 ne klase u Visual Studio-u\r\n\\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\r\n\\hich\\af39\\dbch\\af31505\\loch\\f39  CodeDOM\r\n\\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\r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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\r\n\\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.}{\r\n\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid7361181\\charrsid7361181 \r\n\\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 \r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 Poznate probleme\r\n\\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 \r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 Aplikacija}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\b\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid4672345\\charrsid8458801 \r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls4\\adjustright\\rin0\\lin720\\itap0\\pararsid9775175\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\nJe trema imati instaliran Phalanger da bi ova aplikacija radila.\r\n\\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 }{\r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16390806\\charrsid8458801 \\hich\\af39\\dbch\\af31505\\loch\\f39 \\hich\\f39  datoteke javi gre\\'9a\\loch\\f39 ke kao informacije.\r\n\\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\r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16390806\\charrsid8458801 \\hich\\af39\\dbch\\af31505\\loch\\f39 ne radi.\r\n\\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 \r\nAplikacija ima funkciju izvod ali ne ima uvod.}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\b\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16390806\\charrsid4678839 \r\n\\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\r\n\\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 \r\n\\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 \r\n{\\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 \r\n\\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 \r\nhttps://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 \r\n{\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900\r\n6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab000000}}}{\\fldrslt {\r\n\\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\r\n\\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 \r\n\\b\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid4678839\\charrsid8458801 \r\n\\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 \r\n\\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 \r\nRazvojno okru\\'9e\\loch\\f39 uje}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\b\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid4672345\\charrsid8458801 \r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0\\pararsid9775175\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\nDa bi se neke formulare prikazali, treba je najprije sastaviti aplikaciju.}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16390806\\charrsid8458801 \r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16470532\\charrsid8458801 \\hich\\af39\\dbch\\af31505\\loch\\f39 Visual Studio padne uza otvaranje datoteke Sorter.php\r\n\\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 \r\nKompilator 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\r\n\\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.*\r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16470532 \r\n\\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\r\n\\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 \r\n\\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 \r\n\\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\r\n\\'f0\\loch\\f39 aj upisan je u koncu *.phpproj datotek\\hich\\af39\\dbch\\af31505\\loch\\f39 e)\r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid1378136\\charrsid8458801 \r\n\\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 \r\n\\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 \r\nAplikacije 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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\f1\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid16470532\\charrsid8458801 \r\n\\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 \r\n\\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 \r\n 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 \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bba000000680074007400700073003a002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e0070006800\r\n70003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000064730062610e}}}{\\fldrslt {\\rtlch\\fcs1 \r\n\\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\r\n\\linex0\\headery708\\footery708\\colsx708\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid2969566\\sftnbj {\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid15158737\\charrsid8458801 \r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid2055905 \r\n\\par }{\\rtlch\\fcs1 \\ab\\af39\\afs16 \\ltrch\\fcs0 \\b\\f39\\fs16\\lang1050\\langfe2052\\langnp1050\\insrsid4678839 \\hich\\af39\\dbch\\af31505\\loch\\f39 Povijest verzijama:\r\n\\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 \r\n\\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 \r\n\\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)\r\n\\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 \r\n\\loch\\af39\\dbch\\af31505\\hich\\f39 \\endash \\loch\\f39  24.1.2009\r\n\\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 \r\n\\par }{\\*\\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8\r\n72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7\r\n2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b\r\n44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7\r\n065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000\r\n00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08\r\n84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc\r\n52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353\r\nbd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468\r\n656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c\r\n070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7\r\n29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65\r\n312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995\r\nb89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9\r\n701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6\r\n34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc\r\n6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6\r\n7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d\r\nbc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4\r\n342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e\r\nc2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280\r\n76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e\r\n73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b\r\nfa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc\r\n2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b\r\nf7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a\r\n22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3\r\n1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae\r\na4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f\r\ne75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6\r\nd2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb\r\n1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c\r\n7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33\r\nd9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee\r\n64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd\r\ndd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2\r\nac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f\r\na40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30\r\n631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6\r\n0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f\r\nd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060\r\n828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff\r\nb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000\r\n1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000\r\n00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00\r\n000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327\r\na8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100\r\n0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000}\r\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\r\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\r\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\r\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\r\n{\\*\\latentstyles\\lsdstimax267\\lsdlockeddef0\\lsdsemihiddendef1\\lsdunhideuseddef1\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\r\n\\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;\r\n\\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;\r\n\\lsdpriority39 \\lsdlocked0 toc 8;\\lsdpriority39 \\lsdlocked0 toc 9;\\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority59 \\lsdlocked0 Table Grid;\\lsdunhideused0 \\lsdlocked0 Placeholder Text;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdunhideused0 \\lsdlocked0 Revision;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 3;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 6;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdpriority37 \\lsdlocked0 Bibliography;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;}}{\\*\\datastore 010500000200000018000000\r\n4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000\r\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000206e\r\n7967297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\r\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\r\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\r\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP/readme.rtf",
    "content": "{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\flomajor\\f31500\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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};}\r\n{\\fhimajor\\f31502\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02040503050406030204}Cambria;}{\\fbimajor\\f31503\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\flominor\\f31504\\fbidi \\froman\\fcharset238\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\r\n{\\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};}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\f75\\fbidi \\fmodern\\fcharset178\\fprq1 Courier New (Arabic);}{\\f76\\fbidi \\fmodern\\fcharset186\\fprq1 Courier New Baltic;}{\\f77\\fbidi \\fmodern\\fcharset163\\fprq1 Courier New (Vietnamese);}\r\n{\\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;}\r\n{\\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;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\fhimajor\\f31529\\fbidi \\froman\\fcharset204\\fprq2 Cambria Cyr;}{\\fhimajor\\f31531\\fbidi \\froman\\fcharset161\\fprq2 Cambria Greek;}{\\fhimajor\\f31532\\fbidi \\froman\\fcharset162\\fprq2 Cambria Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}\r\n{\\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;}\r\n{\\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);}\r\n{\\flominor\\f31555\\fbidi \\froman\\fcharset186\\fprq2 Times New Roman Baltic;}{\\flominor\\f31556\\fbidi \\froman\\fcharset163\\fprq2 Times New Roman (Vietnamese);}\r\n{\\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;}\r\n{\\fhiminor\\f31569\\fbidi \\fswiss\\fcharset204\\fprq2 Calibri Cyr;}{\\fhiminor\\f31571\\fbidi \\fswiss\\fcharset161\\fprq2 Calibri Greek;}{\\fhiminor\\f31572\\fbidi \\fswiss\\fcharset162\\fprq2 Calibri Tur;}\r\n{\\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;}\r\n{\\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);}\r\n{\\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);}}\r\n{\\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;\r\n\\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 \r\n\\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 \r\n\\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 \r\nDefault 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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\sbasedon10 \\sunhideused \\styrsid10037286 Hyperlink;}}{\\*\\listtable{\\list\\listtemplateid-328425630\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\r\n\\'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\r\n;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\r\n\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\r\n\\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 \r\n\\fi-360\\li3600\\lin3600 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \r\n\\fi-360\\li4320\\lin4320 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \r\n\\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 }\r\n{\\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 \r\n;}\\listid193737980}{\\list\\listtemplateid-458086446\\listhybrid{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\r\n\\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 \r\n\\fi-360\\li1440\\lin1440 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \r\n\\fi-360\\li2160\\lin2160 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436545\\'01\\u-3913 ?;}{\\levelnumbers;}\\f3\\fbias0\\hres0\\chhres0 \r\n\\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 }\r\n{\\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\r\n\\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\r\n\\levelnfcn23\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436547\\'01o;}{\\levelnumbers;}\\f2\\fbias0\\hres0\\chhres0 \\fi-360\\li5760\\lin5760 }{\\listlevel\\levelnfc23\\levelnfcn23\\leveljc0\r\n\\leveljcn0\\levelfollow0\\levelstartat1\\lvltentative\\levelspace360\\levelindent0{\\leveltext\\leveltemplateid67436549\\'01\\u-3929 ?;}{\\levelnumbers;}\\f10\\fbias0\\hres0\\chhres0 \\fi-360\\li6480\\lin6480 }{\\listname ;}\\listid618268834}}{\\*\\listoverridetable\r\n{\\listoverride\\listid618268834\\listoverridecount0\\ls1}{\\listoverride\\listid193737980\\listoverridecount0\\ls2}}{\\*\\rsidtbl \\rsid142241\\rsid345974\\rsid550746\\rsid552350\\rsid729657\\rsid1539400\\rsid1593398\\rsid1600798\\rsid1783103\\rsid2575936\\rsid2711893\r\n\\rsid2714154\\rsid2900870\\rsid2969566\\rsid2980693\\rsid3231679\\rsid3895175\\rsid4411658\\rsid4654667\\rsid4664920\\rsid4738795\\rsid4919942\\rsid5124551\\rsid5389481\\rsid5461175\\rsid6241037\\rsid7540268\\rsid7669778\\rsid8005191\\rsid8016588\\rsid8209989\\rsid8461511\r\n\\rsid9070747\\rsid9123274\\rsid9853923\\rsid10037286\\rsid10109114\\rsid10250287\\rsid11100254\\rsid11100399\\rsid11290244\\rsid11483350\\rsid11556869\\rsid11603778\\rsid11611650\\rsid11680637\\rsid11738431\\rsid11740698\\rsid12018813\\rsid12601025\\rsid12609733\r\n\\rsid12859122\\rsid13127900\\rsid13922005\\rsid14054378\\rsid14360527\\rsid14640974\\rsid14683935\\rsid14880278\\rsid15615793\\rsid16205939\\rsid16602033\\rsid16604065\\rsid16658837\\rsid16661396}{\\mmathPr\\mmathFont34\\mbrkBin0\\mbrkBinSub0\\msmallFrac0\\mdispDef1\r\n\\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}\r\n{\\*\\company  }{\\nofcharsws2281}{\\vern32895}}{\\*\\xmlnstbl {\\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\\paperw11906\\paperh16838\\margl1417\\margr1417\\margt1417\\margb1417\\gutter0\\ltrsect \r\n\\deftab708\\widowctrl\\ftnbj\\aenddoc\\hyphhotz425\\trackmoves1\\trackformatting1\\donotembedsysfont1\\relyonvml0\\donotembedlingdata0\\grfdocevents0\\validatexml1\\showplaceholdtext0\\ignoremixedcontent0\\saveinvalidxml0\r\n\\showxmlerrors1\\noxlattoyen\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\formshade\\horzdoc\\dgmargin\\dghspace180\\dgvspace180\\dghorigin1417\\dgvorigin1417\\dghshow1\\dgvshow1\r\n\\jexpand\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind\\lytcalctblwd\\lyttblrtgr\\lnbrkrule\\nobrkwrptbl\\snaptogridincell\\allowfieldendsel\\wrppunct\r\n\\asianbrkrule\\rsidroot5461175\\newtblstyruls\\nogrowautofit\\usenormstyforlist\\noindnmbrts\\felnbrelev\\nocxsptable\\indrlsweleven\\noafcnsttbl\\afelev\\utinl\\hwelev\\spltpgpar\\notcvasp\\notbrkcnstfrctbl\\notvatxbx\\krnprsnet\\cachedcolbal \\nouicompat \\fet0\r\n{\\*\\wgrffmtfilter 2450}\\nofeaturethrottle1\\ilfomacatclnup0\\ltrpar \\sectd \\ltrsect\\linex0\\headery708\\footery708\\colsx708\\endnhere\\sectlinegrid360\\sectdefaultcl\\sectrsid2969566\\sftnbj {\\*\\pnseclvl1\\pnucrm\\pnqc\\pnstart1\\pnindent720\\pnhang {\\pntxta .}}\r\n{\\*\\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 \r\n{\\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 (}\r\n{\\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 \r\n\\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 \r\nThis 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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid2969566\\charrsid13127900 \r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls1\\adjustright\\rin0\\lin720\\itap0\\pararsid16602033\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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\r\n\r\n\\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\r\n\\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\r\n\\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 \r\nLimited support for partial classes in Visual Studio\r\n\\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\r\n\\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\r\n\r\n\\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\r\n\\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 \r\nHow to write applications in PHP for .NET and Windows Forms}{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid8016588 \r\n\\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 \r\n\\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 \r\nApplication 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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid9853923\\charrsid9853923 \r\n\\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 \r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 Know issues:\r\n\\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 \r\n\\hich\\af39\\dbch\\af31505\\loch\\f39 The application\r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0\\pararsid16602033\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\nIn order to run the application, Phalanger must be installed.\r\n\\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 \r\n\\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.\r\n\\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 \r\nThe 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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid2575936\\charrsid13127900 \\hich\\af39\\dbch\\af31505\\loch\\f39 t work.\r\n\\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 \r\n\\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 \r\n\\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\r\n\\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 \r\nOn 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}}}{\r\n\\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 \r\n 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 \r\n\\f39\\fs16\\insrsid4919942 \\hich\\af39\\dbch\\af31505\\loch\\f39 \" }{\\rtlch\\fcs1 \\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\insrsid2900870 {\\*\\datafield \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bc8000000680074007400700073003a002f002f0063006f006e006e006500630074002e006d006900630072006f0073006f00660074002e0063006f006d002f00560069007300750061006c0053007400750064006900\r\n6f002f0066006500650064006200610063006b002f00560069006500770046006500650064006200610063006b002e0061007300700078003f0046006500650064006200610063006b00490044003d003300390035003700330039000000795881f43b1d7f48af2c825dc485276300000000a5ab000000}}}{\\fldrslt {\r\n\\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\r\n\\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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid4919942\\charrsid4919942 \r\n\\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 \r\n\\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 \r\nDevelopment environment\r\n\\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\r\n\\widctlpar\\wrapdefault\\aspalpha\\aspnum\\faauto\\ls2\\adjustright\\rin0\\lin720\\itap0\\pararsid16602033\\contextualspace \\rtlch\\fcs1 \\af31507\\afs22\\alang1025 \\ltrch\\fcs0 \r\n\\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 \r\nIn order to show certain forms in designer, application must be first build.\r\n\\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 \r\nVisual Studio crashes on Sorter PHP\r\n\\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 \r\n\\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 \r\n 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 \r\n\\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 \r\n\\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 \r\n\\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.\r\n\\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\r\n\\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 \r\nIt'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 \r\nsuccessful 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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid4919942 \r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid2714154\\charrsid13127900 \r\n\\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 \r\n\\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 \r\nApplication 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 \r\n\\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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid5461175 \r\n\\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 \r\n\\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 \r\n 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 \r\n00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90bbc000000680074007400700073003a002f002f006400690070002e00660065006c006b002e0063007600750074002e0063007a002f00620072006f007700730065002f00640065007400610069006c0073002e007000\r\n680070003f0066003d0046003300260064003d004b0031003300310033003600260079003d003200300030003900260061003d007a0061007200750062006a003100260074003d006400690070006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000000006d7504}}}{\\fldrslt {\\rtlch\\fcs1 \r\n\\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 \r\n//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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid10037286\\charrsid13127900 \r\n\\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 \r\n\\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid13127900 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\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 \r\n\\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid4919942\\charrsid4919942 \r\n\\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 \r\n\\loch\\af39\\dbch\\af31505\\hich\\f39 \\endash \\loch\\f39  Jan 24 2009\r\n\\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 \r\n\\af39\\afs16 \\ltrch\\fcs0 \\f39\\fs16\\lang1033\\langfe2052\\langnp1033\\insrsid4919942\\charrsid4919942 \r\n\\par }{\\*\\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8\r\n72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7\r\n2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b\r\n44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7\r\n065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000\r\n00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08\r\n84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc\r\n52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353\r\nbd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468\r\n656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c\r\n070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7\r\n29e245eb2b260a0238fd010000ffff0300504b0304140006000800000021000cc90327a8060000611b0000160000007468656d652f7468656d652f7468656d65\r\n312e786d6cec594f6f1c3514bf23f11dacb9b7d94d76d36cd44d95ddec1248d346d96d518fde19ef8c1bcf78647b93ee0db547242444412051094e1c1050a995\r\nb89413e293048aa048fd0a3cdb33b3e3eca449da082ae81e9219fbe7f7ff3d3f7b2e5fb91333b44f84a43c697bf58b350f91c4e7014dc2b67763d8bfb0e221a9\r\n701260c613d2f6a6447a57d6de7eeb325e5511890982f5895cc56d2f522a5d5d58903e0c637991a72481b931173156f02ac28540e003a01bb385c55a6d7921c6\r\n34f150826320bbcd15dd47120753747d3ca63ef1d6720e3d066c1225f580cfc440d327d9b22d9cf884fdfcf52f5f187cb057d72839955d26d03e666d0f1806fc\r\n6048ee280f312c154cb4bd9af9790b6b9717f06ab688a963d696d6f5cd2f5b972d08f6160d4f118e0aa6f57ea37569a3a06f004ccde37abd5eb7572fe81900f6\r\n7dd0d6ca52a6d9e8afd43b39cd12c83eced3eed69ab5868b2fd15f9a93b9d5e9749aad4c164bd480ec63630ebf525b6eac2f3a7803b2f8e61cbed159ef76971d\r\nbc0159fcf21cbe7fa9b5dc70f10614319aeccda1b543fbfd8c7a011973b659095f01f84a2d83cf50100d45846916639ea817c55b8c6f73d107900633ac6882d4\r\n342563ec434877713c12146b267895e0d28c1df2e5dc90e687a42f68aadade7b2986f498d17bfee4bbe74f1ea1c3bb8f0feffe7878efdee1dd1f2c2167d5264e\r\nc2f2aa67df7cfcd7830fd09f8fbe7a76ffd36abc2ce37ffbfec35f7ffaa41a08293413e7e9670f7f7ffcf0e9e71ffdf1edfd0af8bac0a3327c486322d1357280\r\n76790c8a19abb892939138db8a61846979c57a124a9c60cda5827e4f450efada14b3cc3b8e1c1de25af0a6801252057c6772db1178108989a2159cb7a2d8016e\r\n73ce3a5c545a614bf32a99793849c26ae66252c6ed62bc5fc5bb8b13c7bfbd490af5330f4b47f16e441c3177184e140e494214d2737c8f900aed6e51ead8759b\r\nfa824b3e56e816451d4c2b4d32a423279a668b36690c7e9956e90cfe766cb37d137538abd27a83ecbb48c80acc2a841f12e698f11d3c5138ae2239c4312b1bfc\r\n2a5651959083a9f0cbb89e54e0e990308e7a0191b26acd7501fa969cbe85a16a55ba7d9b4d63172914ddaba27915735e466ef0bd6e84e3b40a3ba04954c6be2b\r\nf7204431dae1aa0abecddd0cd1efe0079c1cebee9b9438ee3eb91adca0a123d22c40f4cc44685f42b9762a704c9317956346a11edb1838bf720c05f0e9970f2a\r\n22eb752dc4ebb0275565c2e691f27b1cee68d1ed7211d0d7bfe66ee049b24320cce7379e3725f74dc9f5fef325f7b87c3e6da19dd55628bbba6fb08db16993e3\r\n1776c963cad8404d19b92a4da32c61af08fa30a8d79ae322294e4e69048f596d7770a1c0660d125cbd4f553488700a4d76ddd3444299910e254ab984039e19ae\r\na4adf1d0a82b7b3c6cea8383ad0912ab6d1ed8e1253d9c9f0f0a3266c709cd413467b4a4099c96d9d2a58c28a8fd32ccea5aa85373ab1bd14cb973b8152a831f\r\ne75583c1c29ad08420685dc0cacb7060d7ace170821909b4ddedfe9bbbc578e13c5d24231c90cc475aef791fd58d93f25831b702103b153ed287bd13ac56e2d6\r\nd2645f81db699c5466d738865deebd57f1521ec1332fe9dc3d928e2c2927274bd041db6b35179b1ef271daf6c670ae85c73805af4bddf76116c24d91af840dfb\r\n1393d964f9cc9bad5c313709ea705d61ed3ea7b053075221d50696910d0d339585004b34272bff6213cc7a5e0ad8487f092996562018fe3529c08eae6bc9784c\r\n7c5576766944dbcebe66a5944f141183283840233611bb18dcaf4315f409a884eb095311f40bdca7696b9b29b738674957bec532383b8e591ae1acdcea14cd33\r\nd9c24d1e173298b79278a05ba5ec46b9b3ab6252fe9c542987f1ff4c15bd9fc06dc152a03de0c3bdaec048e76bdbe342451caa501a51bf2fa07930b503a205ee\r\n64611a820a6e97cd7f41f6f57f9b739686496b38f4a95d1a2241613f5291206407ca9289be1388d5b3bdcb9264192113512571656ac51e917dc286ba062eebbd\r\ndd431184baa926591930b8a3f1e7be6719340a759353ce37a786147bafcd817fbaf3b1c90c4ab975d83434b9fd0b112b7655bbde2ccff7deb2227a62d66635f2\r\nac0066a5ada095a5fd4b8a70c6add656ac398d179bb970e0c5798d61b0688852b8f341fa0fec7f54f8cc7ea5d01bea90ef426d45f0c1411383b081a8be601b0f\r\na40ba41d1c41e364076d306952d6b459eba4ad966fd6e7dce9167c8f185b4b761a7f9fd1d84573e6b27372f13c8d9d59d8b1b51d3bd6d4e0d9a3290a43e3fc30\r\n631c63be7195bf40f1d16d70f406dcf14f98922698e0db92c0d07a0e4c1e40f25b8e66e9dadf000000ffff0300504b0304140006000800000021000dd1909fb6\r\n0000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6f\r\nd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060\r\n828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509aff\r\nb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa000000\r\n1c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c00000\r\n00360100000b000000000000000000000000002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00\r\n000000000000000000000000140200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021000cc90327\r\na8060000611b00001600000000000000000000000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d0014000600080000002100\r\n0dd1909fb60000001b0100002700000000000000000000000000ad0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a80a00000000}\r\n{\\*\\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d\r\n617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169\r\n6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363\r\n656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}\r\n{\\*\\latentstyles\\lsdstimax267\\lsdlockeddef0\\lsdsemihiddendef1\\lsdunhideuseddef1\\lsdqformatdef0\\lsdprioritydef99{\\lsdlockedexcept \\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority0 \\lsdlocked0 Normal;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 1;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 2;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 3;\\lsdqformat1 \\lsdpriority9 \\lsdlocked0 heading 4;\r\n\\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;\r\n\\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;\r\n\\lsdpriority39 \\lsdlocked0 toc 8;\\lsdpriority39 \\lsdlocked0 toc 9;\\lsdqformat1 \\lsdpriority35 \\lsdlocked0 caption;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority10 \\lsdlocked0 Title;\\lsdpriority1 \\lsdlocked0 Default Paragraph Font;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority11 \\lsdlocked0 Subtitle;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority22 \\lsdlocked0 Strong;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority20 \\lsdlocked0 Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority59 \\lsdlocked0 Table Grid;\\lsdunhideused0 \\lsdlocked0 Placeholder Text;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority1 \\lsdlocked0 No Spacing;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority63 \\lsdlocked0 Medium Shading 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority66 \\lsdlocked0 Medium List 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority67 \\lsdlocked0 Medium Grid 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority68 \\lsdlocked0 Medium Grid 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority69 \\lsdlocked0 Medium Grid 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 1;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority64 \\lsdlocked0 Medium Shading 2 Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority65 \\lsdlocked0 Medium List 1 Accent 1;\\lsdunhideused0 \\lsdlocked0 Revision;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority34 \\lsdlocked0 List Paragraph;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority29 \\lsdlocked0 Quote;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority30 \\lsdlocked0 Intense Quote;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 1;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 2;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 2;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 2;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 3;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 3;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 3;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority62 \\lsdlocked0 Light Grid Accent 4;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 4;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 5;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority70 \\lsdlocked0 Dark List Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 5;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 5;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority60 \\lsdlocked0 Light Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority61 \\lsdlocked0 Light List Accent 6;\r\n\\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;\r\n\\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;\r\n\\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;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority71 \\lsdlocked0 Colorful Shading Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority72 \\lsdlocked0 Colorful List Accent 6;\\lsdsemihidden0 \\lsdunhideused0 \\lsdpriority73 \\lsdlocked0 Colorful Grid Accent 6;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority19 \\lsdlocked0 Subtle Emphasis;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority21 \\lsdlocked0 Intense Emphasis;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority31 \\lsdlocked0 Subtle Reference;\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority32 \\lsdlocked0 Intense Reference;\r\n\\lsdsemihidden0 \\lsdunhideused0 \\lsdqformat1 \\lsdpriority33 \\lsdlocked0 Book Title;\\lsdpriority37 \\lsdlocked0 Bibliography;\\lsdqformat1 \\lsdpriority39 \\lsdlocked0 TOC Heading;}}{\\*\\datastore 010500000200000018000000\r\n4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000\r\nd0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nfffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\nffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000e043\r\nb630297ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000\r\n00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000\r\n000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000\r\n0000000000000000000000000000000000000000000000000105000000000000}}"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}\") = \"RegEditPHP\", \"RegEditPHP\\RegEditPHP.phpproj\", \"{D5A73F0B-7DEA-4F46-879C-14913395DB11}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(TeamFoundationVersionControl) = preSolution\r\n\t\tSccNumberOfProjects = 2\r\n\t\tSccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}\r\n\t\tSccTeamFoundationServer = https://team.corp.devsense.com:8443/tfs/projects\r\n\t\tSccLocalPath0 = .\r\n\t\tSccProjectUniqueName1 = RegEditPHP\\\\RegEditPHP.phpproj\r\n\t\tSccProjectName1 = RegEditPHP\r\n\t\tSccLocalPath1 = RegEditPHP\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D5A73F0B-7DEA-4F46-879C-14913395DB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D5A73F0B-7DEA-4F46-879C-14913395DB11}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D5A73F0B-7DEA-4F46-879C-14913395DB11}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D5A73F0B-7DEA-4F46-879C-14913395DB11}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Samples/RegEditPHP/RegEditPHP.vssscc",
    "content": "﻿\"\"\r\n{\r\n\"FILE_VERSION\" = \"9237\"\r\n\"ENLISTMENT_CHOICE\" = \"NEVER\"\r\n\"PROJECT_FILE_RELATIVE_PATH\" = \"\"\r\n\"NUMBER_OF_EXCLUDED_FILES\" = \"0\"\r\n\"ORIGINAL_PROJECT_FILE_PATH\" = \"\"\r\n\"NUMBER_OF_NESTED_PROJECTS\" = \"0\"\r\n\"SOURCE_CONTROL_SETTINGS_PROVIDER\" = \"PROJECT\"\r\n}\r\n"
  },
  {
    "path": "Solutions/Phalanger.cmd",
    "content": "..\\Tools\\Elevate cmd /C \"start %~dp0\\Phalanger.sln\""
  },
  {
    "path": "Solutions/Phalanger.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\nVisualStudioVersion = 14.0.24720.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Extensions\", \"Extensions\", \"{BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Applications\", \"Applications\", \"{64A5B5CA-E0A5-4816-96EE-D574E4189E83}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core\", \"..\\Source\\Core\\Core.csproj\", \"{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ClassLibrary\", \"..\\Source\\ClassLibrary\\ClassLibrary.csproj\", \"{D515E8F4-357C-4CAF-87C1-97D64C5F865A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148} = {9A2867A2-981C-4B5A-A1C5-EACCC80B5148}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"phpc\", \"..\\Source\\PhpNetCompiler\\phpc.csproj\", \"{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.MsSql\", \"..\\Source\\Extensions\\MSSql\\Extension.MsSql.csproj\", \"{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MkDynamic\", \"..\\Source\\MkDynamic\\MkDynamic.csproj\", \"{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.XmlDom\", \"..\\Source\\Extensions\\XmlDom\\Extension.XmlDom.csproj\", \"{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Phalanger.CompilerTask\", \"..\\Source\\Phalanger.CompilerTask\\Phalanger.CompilerTask.csproj\", \"{68B54816-884B-48A1-949C-DBBDE2A5C412}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.PDO\", \"..\\Source\\Extensions\\PDO\\Extension.PDO.csproj\", \"{A3D74786-1B4A-4967-853E-C98D74E6990B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.PDOSQLite\", \"..\\Source\\Extensions\\PDOSQLite\\Extension.PDOSQLite.csproj\", \"{E736D942-D76C-46B6-B7F1-82E3068D46A8}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.SQLite\", \"..\\Source\\Extensions\\SQLite\\Extension.SQLite.csproj\", \"{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Zip\", \"..\\Source\\Extensions\\Zip\\Extension.Zip.csproj\", \"{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.PDOSQLServer\", \"..\\Source\\Extensions\\PDOSQLServer\\Extension.PDOSQLServer.csproj\", \"{7445CDB5-09EE-4884-B606-B1D870E03B3B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Curl\", \"..\\Source\\Extensions\\Curl\\Extension.Curl.csproj\", \"{BF2CCCE1-AD1F-4765-A556-35E454C7C861}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Gd2\", \"..\\Source\\Extensions\\Gd2\\Extension.Gd2.csproj\", \"{1E43FFF4-D113-4CE7-90C1-0CB39E068194}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.iconv\", \"..\\Source\\Extensions\\iconv\\Extension.iconv.csproj\", \"{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}\"\r\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E} = {533EA853-45F3-483D-8C89-CF686249CC5E}\n\tEndProjectSection\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.mbstring\", \"..\\Source\\Extensions\\mbstring\\Extension.mbstring.csproj\", \"{533EA853-45F3-483D-8C89-CF686249CC5E}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Soap\", \"..\\Source\\Extensions\\Soap\\Extension.Soap.csproj\", \"{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Xml\", \"..\\Source\\Extensions\\Xml\\Extension.Xml.csproj\", \"{8145F722-1B6C-4162-92DC-824DFDC3ED6A}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.Zlib\", \"..\\Source\\Extensions\\Zlib\\Extension.Zlib.csproj\", \"{630C04B5-0B38-4883-981E-2F094982D49D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core.CodeDom\", \"..\\Source\\Core.CodeDom\\Core.CodeDom.csproj\", \"{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core.Parsers\", \"..\\Source\\Core.Parsers\\Core.Parsers.csproj\", \"{581F1486-5062-459E-BAE6-A41886584F81}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core.DuckTyping\", \"..\\Source\\Core.DuckTyping\\Core.DuckTyping.csproj\", \"{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{2FC1ABC3-5452-411E-8C09-FAABCE16A469}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core.Parsers.Tests\", \"..\\Source\\Core.Parsers.Tests\\Core.Parsers.Tests.csproj\", \"{B7676837-C805-4898-AE2A-BF00C2AC9C51}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Core.Tests\", \"..\\Source\\Core.Tests\\Core.Tests.csproj\", \"{2BC9950D-CD28-4A47-A405-0AE639A76384}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ClassLibrary.Tests\", \"..\\Source\\ClassLibrary.Tests\\ClassLibrary.Tests.csproj\", \"{D2388680-0C99-467F-9C17-68E1E6E4F1C0}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Extension.GetText\", \"..\\Source\\Extensions\\GetText\\Extension.GetText.csproj\", \"{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}\"\nEndProject\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebugNoGac|Any CPU = DebugNoGac|Any CPU\r\n\t\tDebugNoGac|Mixed Platforms = DebugNoGac|Mixed Platforms\r\n\t\tDebugNoGac|Win32 = DebugNoGac|Win32\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tReleaseGAC|Any CPU = ReleaseGAC|Any CPU\n\t\tReleaseGAC|Mixed Platforms = ReleaseGAC|Mixed Platforms\n\t\tReleaseGAC|Win32 = ReleaseGAC|Win32\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{D515E8F4-357C-4CAF-87C1-97D64C5F865A}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}.ReleaseGAC|Win32.Build.0 = Release|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{68B54816-884B-48A1-949C-DBBDE2A5C412}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{581F1486-5062-459E-BAE6-A41886584F81}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51}.ReleaseGAC|Win32.Build.0 = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384}.ReleaseGAC|Win32.Build.0 = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Any CPU.Build.0 = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Win32.ActiveCfg = Release|Any CPU\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0}.ReleaseGAC|Win32.Build.0 = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Debug|Win32.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Any CPU.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Win32.ActiveCfg = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.DebugNoGac|Win32.Build.0 = Debug|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.Release|Win32.Build.0 = Release|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Any CPU.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Any CPU.Build.0 = ReleaseGAC|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Mixed Platforms.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Mixed Platforms.Build.0 = ReleaseGAC|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Win32.ActiveCfg = ReleaseGAC|Any CPU\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}.ReleaseGAC|Win32.Build.0 = ReleaseGAC|Any CPU\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F} = {64A5B5CA-E0A5-4816-96EE-D574E4189E83}\n\t\t{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48} = {64A5B5CA-E0A5-4816-96EE-D574E4189E83}\n\t\t{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{A3D74786-1B4A-4967-853E-C98D74E6990B} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{E736D942-D76C-46B6-B7F1-82E3068D46A8} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{EC3E5E89-7125-448F-BCBA-5F1FF8474B60} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{7445CDB5-09EE-4884-B606-B1D870E03B3B} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{BF2CCCE1-AD1F-4765-A556-35E454C7C861} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{1E43FFF4-D113-4CE7-90C1-0CB39E068194} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{533EA853-45F3-483D-8C89-CF686249CC5E} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{8145F722-1B6C-4162-92DC-824DFDC3ED6A} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{630C04B5-0B38-4883-981E-2F094982D49D} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\r\n\t\t{B7676837-C805-4898-AE2A-BF00C2AC9C51} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469}\r\n\t\t{2BC9950D-CD28-4A47-A405-0AE639A76384} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469}\r\n\t\t{D2388680-0C99-467F-9C17-68E1E6E4F1C0} = {2FC1ABC3-5452-411E-8C09-FAABCE16A469}\r\n\t\t{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D} = {BBF40DB7-2CCE-4E82-98C9-F506E356CC08}\n\tEndGlobalSection\r\n\tGlobalSection(SolutionNotes) = postSolution\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Solutions/Phalanger.sln.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Constants/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AA_BB\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=MethodPropertyEvent/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String></wpf:ResourceDictionary>"
  },
  {
    "path": "Solutions/Phalanger.sln.cmd",
    "content": "..\\Tools\\Elevate cmd /C \"start %~dp0\\Phalanger.sln\""
  },
  {
    "path": "Solutions/Phalanger.vssscc",
    "content": "﻿\"\"\r\n{\r\n\"FILE_VERSION\" = \"9237\"\r\n\"ENLISTMENT_CHOICE\" = \"NEVER\"\r\n\"PROJECT_FILE_RELATIVE_PATH\" = \"\"\r\n\"NUMBER_OF_EXCLUDED_FILES\" = \"0\"\r\n\"ORIGINAL_PROJECT_FILE_PATH\" = \"\"\r\n\"NUMBER_OF_NESTED_PROJECTS\" = \"0\"\r\n\"SOURCE_CONTROL_SETTINGS_PROVIDER\" = \"PROJECT\"\r\n}\r\n"
  },
  {
    "path": "Source/Build/AssemblyInfoCommon.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n[assembly: AssemblyCompany(\"The Phalanger Project Team\")]\r\n[assembly: AssemblyProduct(\"Phalanger\")]\r\n[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\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n[assembly: System.Resources.NeutralResourcesLanguage(\"en-US\", System.Resources.UltimateResourceFallbackLocation.MainAssembly)]\r\n\r\n[assembly: AssemblyVersion(AssemblyVersionInfo.StableVersion)]\r\n[assembly: AssemblyFileVersion(AssemblyVersionInfo.FileVersion)]\r\n\r\nclass AssemblyVersionInfo\r\n{\r\n    // This version string (and the comments for StableVersion and Version)\r\n    // should be updated manually between major releases.\r\n    // Servicing branches should retain the value\r\n    public const string ReleaseVersion = \"4.0\";\r\n\r\n    // Replaced by changeset number using build script.\r\n    public const string ChangesetNumber = \"8139\";\r\n\r\n    public const string StableVersion = ReleaseVersion + \".0.0\";\r\n\r\n    public const string FileVersion = ReleaseVersion + \".0.\" + ChangesetNumber;\r\n}\r\n"
  },
  {
    "path": "Source/Build/Common.Build.settings",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  \r\n  <!-- Ensures that if this file changes it forces a rebuild -->\r\n  <PropertyGroup>\r\n    <MSBuildAllProjects>\r\n        $(MSBuildAllProjects);$(MSBuildThisFileFullPath)\r\n    </MSBuildAllProjects>\r\n  </PropertyGroup>\r\n  \r\n  <PropertyGroup>\r\n\t<RootDir>$(MSBuildThisFileDirectory)..\\..\\</RootDir>\r\n\t<ToolsDir>$(RootDir)Tools\\</ToolsDir>\r\n\r\n    <Configuration Condition=\"'$(Configuration)' == ''\">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n\r\n    <OutputPath Condition=\"'$(OutputPath)' == ''\">$(RootDir)Deployment\\$(Configuration)\\</OutputPath>\r\n    <IntermediateOutputPath Condition=\"'$(IntermediateOutputPath)' == ''\">$(OutputPath)obj\\</IntermediateOutputPath>\r\n    <OutDir>$(OutputPath)</OutDir>\r\n    <IntDir>$(IntermediateOutputPath)</IntDir>\r\n\r\n    <DocumentationFile Condition=\"'$(DocumentationFile)' == ''\">$(OutputPath)$(AssemblyName).xml</DocumentationFile>\r\n    <ToolsDir Condition=\" '$(ToolsDir)'=='' \">$(ProjectRootDir)Tools\\</ToolsDir>\r\n    <NuGetExeDir Condition=\" '$(NuGetExeDir)'=='' \">$(ToolsDir)</NuGetExeDir>\r\n    <NuGetDownloadAddress Condition=\" '$(NuGetDownloadAddress)'=='' \">http://nuget.org/nuget.exe</NuGetDownloadAddress>\r\n    <NuGetExe Condition=\" '$(NuGetExe)'=='' \">$(NuGetExeDir)nuget.exe</NuGetExe>\r\n    <GacUtilExe Condition=\" '$(GacUtilExe)'=='' \">$(ToolsDir)gacutil</GacUtilExe>\r\n    <NuGetCommand Condition=\" '$(NuGetCommand)'=='' \">\"$(NuGetExe)\"</NuGetCommand>\r\n    <GacUtilCommand Condition=\" '$(GacUtilCommand)'=='' \">\"$(GacUtilExe)\"</GacUtilCommand>\r\n\r\n    <SuppressCommonAssemblyMetadata Condition=\"'$(SuppressCommonAssemblyMetadata)' == ''\">False</SuppressCommonAssemblyMetadata>\r\n    <TreatWarningsAsErrors Condition=\"'$(TreatWarningsAsErrors)' == ''\">true</TreatWarningsAsErrors>\r\n  </PropertyGroup>\r\n\r\n  <PropertyGroup>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <NoWarn>$(NoWarn),419,436,1591,CS0618</NoWarn>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' or '$(Configuration)' == 'ReleaseGAC' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "Source/Build/Common.Build.targets",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)\\AssemblyInfoCommon.cs\">\r\n      <Link>AssemblyInfoCommon.cs</Link>\r\n    </Compile>\r\n  </ItemGroup>\r\n\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n\r\n  <UsingTask TaskName=\"DownloadFile\" TaskFactory=\"CodeTaskFactory\" AssemblyFile=\"$(MSBuildToolsPath)\\Microsoft.Build.Tasks.v4.0.dll\" Condition=\" '$(OS)' == 'Windows_NT' \">\r\n    <ParameterGroup>\r\n      <Address ParameterType=\"System.String\" Required=\"true\"/>\r\n      <OutputFilename ParameterType=\"System.String\" Required=\"true\" />\r\n    </ParameterGroup>\r\n    <Task>\r\n      <Reference Include=\"System\" />\r\n      <Code Type=\"Fragment\" Language=\"cs\">\r\n        <![CDATA[\r\n            new System.Net.WebClient().DownloadFile(Address, OutputFilename);\r\n        ]]>\r\n      </Code>\r\n    </Task>\r\n  </UsingTask>\r\n\r\n  <Target Name=\"DownloadNuGet\">\r\n    <MakeDir Directories=\"$(NuGetExeDir)\" Condition=\" !Exists('$(NuGetExeDir)') \" />\r\n    <DownloadFile Address=\"$(NuGetDownloadAddress)\" OutputFilename=\"$(NuGetExe)\" Condition=\" '$(OS)' == 'Windows_NT' AND !Exists('$(NuGetExe)')\" />\r\n    <Exec Command=\"wget $(NuGetDownloadAddress) -O $(NuGetExe)\" Condition=\" '$(OS)' != 'Windows_NT' AND !Exists('$(NuGetExe)') \" />\r\n  </Target>\r\n\r\n  <Target Name=\"RestorePackages\" DependsOnTargets=\"DownloadNuGet\">\r\n    <Exec Command=\"$(NuGetCommand) restore &quot;$(MSBuildThisFileDirectory)../../Solutions/Phalanger.sln&quot;\"/>\r\n  </Target>\r\n\r\n  <Target Name=\"BeforeBuild\" DependsOnTargets=\"RestorePackages\">\r\n    <Exec Command=\"&quot;$(ToolsDir)UpdateFileVersionFromChangeset.cmd&quot; &quot;$(RootDir)&quot; &quot;$(MSBuildThisFileDirectory)AssemblyInfoCommon.cs&quot;\" Condition=\" '$(OS)' == 'Windows_NT' \"></Exec>\r\n    <Exec Command=\"&quot;$(ToolsDir)UpdateFileVersionFromChangeset.sh&quot; &quot;$(RootDir)&quot; &quot;$(MSBuildThisFileDirectory)AssemblyInfoCommon.cs&quot;\" Condition=\" '$(OS)' == 'Unix' \" />\r\n  </Target>\r\n\r\n  <Target Name=\"AfterBuild\" Condition=\" '$(Configutation)' == 'ReleaseGAC' \">\r\n    <Exec Command=\"$(GacUtilCommand) /u &quot;$(TargetName)&quot;\"></Exec>\r\n    <Exec Command=\"$(GacUtilCommand) /f /i &quot;$(TargetPath)&quot;\"></Exec>\r\n  </Target>\r\n\r\n  <Target Name=\"AfterBuild\" DependsOnTargets=\"DownloadNuGet\" Condition=\" '$(Configuration)' == 'Release' \">\r\n    <PropertyGroup>\r\n      <OutputNugetPath>$(OutputPath)NuGet</OutputNugetPath>\r\n    </PropertyGroup>\r\n    <MakeDir Directories=\"$(OutputNugetPath)\" />\r\n    <Exec Command=\"$(NuGetCommand) pack &quot;$(MSBuildProjectFullPath)&quot; -IncludeReferencedProjects -Symbols -Prop Configuration=$(Configuration) -OutputDirectory &quot;$(OutputNugetPath)&quot;\"></Exec>\r\n  </Target>\r\n</Project>\r\n"
  },
  {
    "path": "Source/ClassLibrary/Arrays.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/* \r\n\tNOTES:\r\n\t\t- compact, extract functions are implemented in PhpVariables class\r\n    \r\n\tTODO:\r\n\t\t- array_map depends on call-time ampersand modification (see bug #33940)\r\n\t\t- array_diff_assoc - strict equality comparison\r\n\t\t- array_pop - it is probably buggy in PHP 5.1.2, submitted bug report.\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Runtime.Serialization;\r\nusing System.ComponentModel;\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enumerations\r\n\r\n\t/// <summary>\r\n\t/// Type of sorting.\r\n\t/// </summary>\r\n\tpublic enum ComparisonMethod\r\n\t{\r\n\t\t/// <summary>Regular comparison.</summary>\r\n\t\t[ImplementsConstant(\"SORT_REGULAR\")]\r\n\t\tRegular = 0,\r\n\r\n\t\t/// <summary>Numeric comparison.</summary>\r\n\t\t[ImplementsConstant(\"SORT_NUMERIC\")]\r\n\t\tNumeric = 1,\r\n\r\n\t\t/// <summary>String comparison.</summary>\r\n\t\t[ImplementsConstant(\"SORT_STRING\")]\r\n\t\tString = 2,\r\n\r\n\t\t/// <summary>String comparison respecting to locale.</summary>\r\n\t\t[ImplementsConstant(\"SORT_LOCALE_STRING\")]\r\n\t\tLocaleString = 5,\r\n\r\n\t\t/// <summary>Undefined comparison.</summary>\r\n\t\tUndefined = -1\r\n\t};\r\n\r\n\t/// <summary>\r\n\t/// Sort order.\r\n\t/// </summary>\r\n\tpublic enum SortingOrder\r\n\t{\r\n\t\t/// <summary>Descending</summary>\r\n\t\t[ImplementsConstant(\"SORT_DESC\")]\r\n\t\tDescending = 3,\r\n\r\n\t\t/// <summary>Ascending</summary>\r\n\t\t[ImplementsConstant(\"SORT_ASC\")]\r\n\t\tAscending = 4,\r\n\r\n\t\t/// <summary>Undefined</summary>\r\n\t\tUndefined = -1\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Whether or not the sort is case-sensitive.\r\n\t/// </summary>\r\n\tpublic enum LetterCase\r\n\t{\r\n\t\t/// <summary>Lower case.</summary>\r\n\t\t[ImplementsConstant(\"CASE_LOWER\")]\r\n\t\tLower = 0,\r\n\r\n\t\t/// <summary>Upper case.</summary>\r\n\t\t[ImplementsConstant(\"CASE_UPPER\")]\r\n\t\tUpper = 1\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Manipulates arrays and collections. \r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpArrays\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Array which is always empty. Nobody should add any item to it.\r\n\t\t/// </summary>\r\n\t\tinternal static readonly PhpArray EmptyArray = new PhpArray();\r\n\r\n\t\t#region reset, pos, prev, next, key, end, each\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a value being pointed by an array intrinsic enumerator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which current value to return.</param>\r\n\t\t/// <returns><b>False</b>, if the intrinsic enumerator is behind the last item of <paramref name=\"array\"/>, \r\n\t\t/// otherwise the value being pointed by the enumerator (beware of values which are <b>false</b>!).</returns>\r\n\t\t/// <remarks>The value returned is dereferenced.</remarks>\r\n\t\t[ImplementsFunction(\"current\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Current([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.IntrinsicEnumerator.AtEnd) return false;\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\treturn PhpVariable.Dereference(array.IntrinsicEnumerator.Value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a value being pointed by an array intrinsic enumerator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which current value to return.</param>\r\n\t\t/// <returns>\r\n\t\t/// <b>False</b> if the intrinsic enumerator is behind the last item of <paramref name=\"array\"/>, \r\n\t\t/// otherwise the value being pointed by the enumerator (beware of values which are <b>false</b>!).\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Alias of <see cref=\"Current\"/>. The value returned is dereferenced.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"pos\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Pos([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\treturn Current(array);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a key being pointed by an array intrinsic enumerator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which current key to return.</param>\r\n\t\t/// <returns>\r\n\t\t/// <b>Null</b>, if the intrinsic enumerator is behind the last item of <paramref name=\"array\"/>, \r\n\t\t/// otherwise the key being pointed by the enumerator.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"key\")]\r\n\t\tpublic static object Key([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.IntrinsicEnumerator.AtEnd)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t// note, key can't be of type PhpReference, hence no dereferencing follows:\r\n\t\t\treturn ((IntStringKey)array.IntrinsicEnumerator.Key).Object;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Advances array intrinsic enumerator one item forward.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which intrinsic enumerator to advance.</param>\r\n\t\t/// <returns>\r\n\t\t/// The value being pointed by the enumerator after it has been advanced\r\n\t\t/// or <b>false</b> if the enumerator has moved behind the last item of <paramref name=\"array\"/>.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>The value returned is dereferenced.</remarks>\r\n\t\t/// <include file='Doc/Arrays.xml' path='docs/intrinsicEnumeration/*'/>\r\n\t\t[ImplementsFunction(\"next\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Next([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// moves to the next item and returns false if there is no such item:\r\n\t\t\tif (!array.IntrinsicEnumerator.MoveNext()) return false;\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\treturn PhpVariable.Dereference(array.IntrinsicEnumerator.Value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves array intrinsic enumerator one item backward.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which intrinsic enumerator to move.</param>\r\n\t\t/// <returns>\r\n\t\t/// The value being pointed by the enumerator after it has been moved\r\n\t\t/// or <b>false</b> if the enumerator has moved before the first item of <paramref name=\"array\"/>.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>The value returned is dereferenced.</remarks>\r\n\t\t/// <include file='Doc/Arrays.xml' path='docs/intrinsicEnumeration/*'/>\r\n\t\t[ImplementsFunction(\"prev\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Prev([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// moves to the previous item and returns false if there is no such item:\r\n\t\t\tif (!array.IntrinsicEnumerator.MovePrevious()) return false;\r\n\r\n\t\t\t// gets a value:\r\n\t\t\tobject result = array.IntrinsicEnumerator.Value;\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\treturn PhpVariable.Dereference(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves array intrinsic enumerator so it will point to the last item of the array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which intrinsic enumerator to move.</param>\r\n\t\t/// <returns>The last value in the <paramref name=\"array\"/> or <b>false</b> if <paramref name=\"array\"/> \r\n\t\t/// is empty.</returns>\r\n\t\t/// <remarks>The value returned is dereferenced.</remarks>\r\n\t\t[ImplementsFunction(\"end\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object End([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// moves to the last item and returns false if there is no such item:\r\n\t\t\tif (!array.IntrinsicEnumerator.MoveLast()) return false;\r\n\r\n\t\t\t// gets a value:\r\n\t\t\tobject result = array.IntrinsicEnumerator.Value;\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\treturn PhpVariable.Dereference(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves array intrinsic enumerator so it will point to the first item of the array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which intrinsic enumerator to move.</param>\r\n\t\t/// <returns>The first value in the <paramref name=\"array\"/> or <b>false</b> if <paramref name=\"array\"/> \r\n\t\t/// is empty.</returns>\r\n\t\t/// <remarks>The value returned is dereferenced.</remarks>\r\n\t\t[ImplementsFunction(\"reset\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Reset([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\t//PhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// moves to the last item and returns false if there is no such item:\r\n\t\t\tif (!array.IntrinsicEnumerator.MoveFirst()) return false;\r\n\r\n\t\t\t// gets a value:\r\n\t\t\tobject result = array.IntrinsicEnumerator.Value;\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\treturn PhpVariable.Dereference(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the current entry and advances array intrinsic enumerator one item forward.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which entry get and which intrinsic enumerator to advance.</param>\r\n\t\t/// <returns>\r\n\t\t/// The instance of <see cref=\"PhpArray\"/>(0 =&gt; key, 1 =&gt; value, \"key\" =&gt; key, \"value\" =&gt; value)\r\n\t\t/// where key and value are pointed by the enumerator before it is advanced\r\n\t\t/// or <b>false</b> if the enumerator has been behind the last item of <paramref name=\"array\"/>\r\n\t\t/// before the call.\r\n\t\t/// </returns>\r\n\t\t/// <include file='Doc/Arrays.xml' path='docs/intrinsicEnumeration/*'/>\r\n\t\t[ImplementsFunction(\"each\")]\r\n\t\t[return: CastToFalse, PhpDeepCopy]\r\n\t\tpublic static PhpArray Each([PhpRw] IPhpEnumerable array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\t//PhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.IntrinsicEnumerator.AtEnd)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tDictionaryEntry entry = array.IntrinsicEnumerator.Entry;\r\n\t\t\tarray.IntrinsicEnumerator.MoveNext();\r\n\r\n\t\t\t// dereferences result since enumerator doesn't do so:\r\n\t\t\tobject key = ((IntStringKey)entry.Key).Object;\r\n\t\t\tobject value = PhpVariable.Dereference(entry.Value);\r\n\r\n\t\t\t// creates the resulting array:\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tresult.Add(1, value);\r\n\t\t\tresult.Add(\"value\", value);\r\n\t\t\tresult.Add(0, key);\r\n\t\t\tresult.Add(\"key\", key);\r\n\r\n\t\t\t// keys and values should be inplace deeply copied:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_pop, array_push, array_shift, array_unshift, array_reverse\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the last item from an array and returns it.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array whcih item to pop.</param>\r\n\t\t/// <returns>The last item of <paramref name=\"array\"/> or a <b>null</b> reference if it is empty.</returns>\r\n\t\t/// <remarks>Resets intrinsic enumerator.</remarks>\r\n\t\t[ImplementsFunction(\"array_pop\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Pop([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.Count == 0) return null;\r\n\r\n\t\t\t// dereferences result since the array doesn't do so:\r\n\t\t\tobject result = PhpVariable.Dereference(array.RemoveLast().Value);\r\n\r\n\t\t\tarray.RefreshMaxIntegerKey();\r\n\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds multiple items into an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array where to add values.</param>\r\n\t\t/// <param name=\"vars\">The array of values to add.</param>\r\n\t\t/// <returns>The number of items in array after all items was added.</returns>\r\n\t\t[ImplementsFunction(\"array_push\")]\r\n\t\tpublic static int Push([PhpRw] PhpArray array, [PhpDeepCopy] params object[] vars)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\t// adds copies variables (if called by PHP):\r\n\t\t\tfor (int i = 0; i < vars.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tarray.Add(vars[i]);\r\n\t\t\t}\r\n\r\n\t\t\treturn array.Count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the first item of an array and reindex integer keys starting from zero.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be shifted.</param>\r\n\t\t/// <returns>The removed object.</returns>\r\n\t\t/// <remarks>Resets intrinsic enumerator.</remarks>\r\n\t\t[ImplementsFunction(\"array_shift\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object Shift([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.Count == 0) return null;\r\n\r\n\t\t\t// dereferences result since the array doesn't do so:\r\n\t\t\tobject result = PhpVariable.Dereference(array.RemoveFirst().Value);\r\n\r\n\t\t\t// reindexes integer keys starting from zero:\r\n\t\t\tarray.ReindexIntegers(0);\r\n\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Inserts specified items before the first item of an array and reindex integer keys starting from zero.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be unshifted.</param>\r\n\t\t/// <param name=\"vars\">Variables to be inserted.</param>\r\n\t\t/// <returns>The number of items in resulting array.</returns>\r\n\t\t[ImplementsFunction(\"array_unshift\")]\r\n\t\tpublic static int Unshift([PhpRw] PhpArray array, [PhpDeepCopy] params object[] vars)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\t// reindexes integer keys starting from the number of items to be prepended:\r\n\t\t\tarray.ReindexIntegers(vars.Length);\r\n\r\n\t\t\t// prepends items indexing keys from 0 to the number of items - 1:\r\n\t\t\tfor (int i = vars.Length - 1; i >= 0; i--)\r\n\t\t\t{\r\n\t\t\t\tarray.Prepend(i, vars[i]);\r\n\t\t\t}\r\n\r\n\t\t\treturn array.Count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns array which elements are taken from a specified one in reversed order.\r\n\t\t/// Integer keys are reindexed starting from zero.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be reversed.</param>\r\n\t\t/// <returns>The array <paramref name=\"array\"/> with items in reversed order.</returns>\r\n\t\t[ImplementsFunction(\"array_reverse\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Reverse(PhpArray array)\r\n\t\t{\r\n\t\t\treturn Reverse(array, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns array which elements are taken from a specified one in reversed order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be reversed.</param>\r\n\t\t/// <param name=\"preserveKeys\">Whether keys should be left untouched. \r\n\t\t/// If set to <b>false</b> then integer keys are reindexed starting from zero.</param>\r\n\t\t/// <returns>The array <paramref name=\"array\"/> with items in reversed order.</returns>\r\n\t\t[ImplementsFunction(\"array_reverse\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Reverse(PhpArray array, bool preserveKeys)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tif (preserveKeys)\r\n\t\t\t{\r\n\t\t\t\t// changes only the order of elements:\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t\t\tresult.Prepend(entry.Key, entry.Value);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// changes the order of elements and reindexes integer keys:\r\n\t\t\t\tint i = array.IntegerCount;\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t\t\tresult.Prepend(entry.Key.String, entry.Value);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresult.Prepend(--i, entry.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// if called by PHP languge then all items in the result should be inplace deeply copied:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_slice, array_splice\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a slice of specified array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to get.</param>\r\n\t\t/// <param name=\"offset\">The ordinal number of a first item of the slice.</param>\r\n\t\t/// <returns>The slice of <paramref name=\"array\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The same as <see cref=\"Slice(PhpArray,int,int)\"/> where <c>length</c> is infinity. \r\n\t\t/// <seealso cref=\"PhpMath.AbsolutizeRange\"/>. Resets integer keys.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"array_slice\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Slice(PhpArray array, int offset)\r\n\t\t{\r\n\t\t\treturn Slice(array, offset, int.MaxValue, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a slice of specified array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to get.</param>\r\n\t\t/// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n\t\t/// <param name=\"length\">The relativized length of the slice.</param>\r\n\t\t/// <returns>The slice of <paramref name=\"array\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and \r\n\t\t/// <paramref name=\"length\"/>. Resets integer keys.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"array_slice\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Slice(PhpArray array, int offset, int length)\r\n\t\t{\r\n\t\t\treturn Slice(array, offset, length, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a slice of specified array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to get.</param>\r\n\t\t/// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n\t\t/// <param name=\"length\">The relativized length of the slice.</param>\r\n\t\t/// <param name=\"preserveKeys\">Whether to preserve integer keys. If <B>false</B>, the integer keys are reset.</param>\r\n\t\t/// <returns>The slice of <paramref name=\"array\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and <paramref name=\"length\"/>.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"array_slice\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Slice(PhpArray array, int offset, int length, bool preserveKeys)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// absolutizes range:\r\n\t\t\tPhpMath.AbsolutizeRange(ref offset, ref length, array.Count);\r\n\r\n\t\t\tvar iterator = array.GetBaseEnumerator();\r\n\t\t\t\r\n\t\t\t// moves iterator to the first item of the slice;\r\n\t\t\t// starts either from beginning or from the end (which one is more efficient):\r\n\t\t\tif (offset < array.Count - offset)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = -1; i < offset; i++) iterator.MoveNext();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = array.Count; i > offset; i--) iterator.MovePrevious();\r\n\t\t\t}\r\n\r\n\t\t\t// copies the slice:\r\n            PhpArray result = new PhpArray(length);\r\n            int ikey = 0;\r\n\t\t\tfor (int i = 0; i < length; i++)\r\n\t\t\t{\r\n\t\t\t\tKeyValuePair<IntStringKey, object> entry = iterator.Current;\r\n\r\n\t\t\t\t// integer keys are reindexed if preserveKeys is false, string keys are not touched:\r\n\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(entry.Key, entry.Value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!preserveKeys)\r\n\t\t\t\t\t\tresult.Add(ikey++, entry.Value);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresult.Add(entry.Key, entry.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\titerator.MoveNext();\r\n\t\t\t}\r\n\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a slice of an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to remove.</param>\r\n\t\t/// <param name=\"offset\">The relativized offset of a first item of the slice.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>Items from <paramref name=\"offset\"/>-th to the last one are removed from <paramref name=\"array\"/>.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <para>See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/>.</para>\r\n\t\t[ImplementsFunction(\"array_splice\")]\r\n\t\tpublic static PhpArray Splice([PhpRw] PhpArray array, int offset)\r\n\t\t{\r\n            // Splice would be equivalent to SpliceDc if no replacelent is specified (=> no SpliceDc):\r\n\t\t\treturn Splice(array, offset, int.MaxValue, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a slice of an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to remove.</param>\r\n\t\t/// <param name=\"offset\">The relativized offset of a first item of the slice.</param>\r\n\t\t/// <param name=\"length\">The relativized length of the slice.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para><paramref name=\"length\"/> items are removed from <paramref name=\"array\"/> \r\n\t\t/// starting with the <paramref name=\"offset\"/>-th one.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <para>See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/>.</para>\r\n\t\t[ImplementsFunction(\"array_splice\")]\r\n\t\tpublic static PhpArray Splice([PhpRw] PhpArray array, int offset, int length)\r\n\t\t{\r\n\t\t\t// Splice would be equivalent to SpliceDc if no replacement is specified (=> no SpliceDc):\r\n\t\t\treturn Splice(array, offset, length, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Replaces a slice of an array with specified item(s).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>The same as <see cref=\"Splice(PhpArray,int,int,object)\"/> except for that\r\n\t\t/// replacement items are deeply copied to the <paramref name=\"array\"/>.</para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"array_splice\")]\r\n\t\tpublic static PhpArray SpliceDc([PhpRw] PhpArray array, int offset, int length, object replacement)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ReferenceNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn SpliceInternal(array, offset, length, replacement, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Replaces a slice of an array with specified item(s).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which slice to replace.</param>\r\n\t\t/// <param name=\"offset\">The relativized offset of a first item of the slice.</param>\r\n\t\t/// <param name=\"length\">The relativized length of the slice.</param>\r\n\t\t/// <param name=\"replacement\"><see cref=\"PhpArray\"/> of items to replace the splice or a single item.</param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> of replaced items indexed by integers starting from zero.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and <paramref name=\"length\"/>.</para>\r\n\t\t/// <para>Reindexes all integer keys in resulting array.</para>\r\n\t\t/// </remarks>\r\n        public static PhpArray Splice(PhpArray array, int offset, int length, object replacement)\r\n        {\r\n            if (array == null)\r\n            {\r\n                PhpException.Throw(\r\n                    PhpError.Warning,\r\n                    string.Format(Strings.unexpected_arg_given, \"array\", PhpArray.PhpTypeName, PhpVariable.TypeNameNull));\r\n                return null;\r\n            }\r\n\r\n            return SpliceInternal(array, offset, length, replacement, false);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implementation of <see cref=\"Splice(PhpArray,int,int,object)\"/> and <see cref=\"SpliceDc(PhpArray,int,int,object)\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Whether to make a deep-copy of items in the replacement.</remarks>\r\n\t\tinternal static PhpArray SpliceInternal(PhpArray array, int offset, int length, object replacement, bool deepCopy)\r\n\t\t{\r\n\t\t\tDebug.Assert(array != null);\r\n\t\t\tint count = array.Count;\r\n\r\n\t\t\t// converts offset and length to interval [first,last]:\r\n\t\t\tPhpMath.AbsolutizeRange(ref offset, ref length, count);\r\n\r\n            PhpArray result = new PhpArray(length);\r\n\t\t\tPhpArray r_array = replacement as PhpArray;\r\n\r\n\t\t\t// replacement is an array:\r\n\t\t\tif (r_array != null)\r\n\t\t\t{\r\n\t\t\t\t// provides deep copies:\r\n\t\t\t\tIEnumerable<object> e;\r\n\r\n\t\t\t\tif (deepCopy)\r\n\t\t\t\t\te = PhpVariable.EnumerateDeepCopies<object>(r_array.Values);\r\n\t\t\t\telse\r\n\t\t\t\t\te = r_array.Values;\r\n\r\n\t\t\t\t// does replacement:\r\n\t\t\t\tarray.ReindexAndReplace(offset, length, e, result);\r\n\t\t\t}\r\n\t\t\telse if (replacement != null)\r\n\t\t\t{\r\n\t\t\t\t// replacement is another type //\r\n\r\n\t\t\t\t// creates a deep copy:\r\n\t\t\t\tif (deepCopy) replacement = PhpVariable.DeepCopy(replacement);\r\n\r\n\t\t\t\t// does replacement:\r\n\t\t\t\tarray.ReindexAndReplace(offset, length, new object[] { replacement }, result);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// replacement is null:\r\n\r\n\t\t\t\tarray.ReindexAndReplace(offset, length, null, result);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region shuffle, array_rand\r\n\r\n\t\t/// <summary>\r\n\t\t/// Randomizes the order of elements in the array using PhpMath random numbers generator.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"array\"/> argument is null.</exception>\r\n\t\t/// <remarks>Reindexes all keys in the resulting array.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"shuffle\")]\r\n\t\tpublic static bool Shuffle([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tarray.Shuffle(PhpMath.Generator);\r\n\t\t\tarray.ReindexAll();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a key of an entry chosen at random using PhpMath random numbers generator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which to choose from.</param>\r\n\t\t/// <returns>The chosen key.</returns>\r\n        /// <exception cref=\"System.NullReferenceException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_rand\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object RandomKeys(PhpArray array)\r\n\t\t{\r\n\t\t\treturn RandomKeys(array, 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Chooses specified number of keys from an array at random.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The <see cref=\"PhpArray\"/> from which to choose.</param>\r\n\t\t/// <param name=\"count\">The number of items to choose.</param>\r\n\t\t/// <returns>Either <see cref=\"PhpArray\"/> of chosen keys (<paramref name=\"count\"/> &gt; 1) or a single key.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Items are chosen uniformly in time <I>O(n)</I>, where <I>n</I> is the number of items in the \r\n\t\t/// <paramref name=\"array\"/> using conveyor belt sampling. \r\n\t\t/// </remarks>\r\n        /// <exception cref=\"NullReferenceException\"><paramref name=\"array\"/>  is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"count\"/> is not positive and less \r\n\t\t/// than the number of items in <paramref name=\"array\"/>. (Warning)</exception>\r\n\t\t[ImplementsFunction(\"array_rand\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object RandomKeys(PhpArray array, int count)\r\n\t\t{\r\n\t\t\tif (count == 1)\r\n\t\t\t{\r\n\t\t\t\tArrayList result = new ArrayList(1);\r\n\t\t\t\treturn RandomSubset(((IDictionary)array).Keys, result, count, PhpMath.Generator) ? result[0] : null;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpArray result = new PhpArray(count > 0 ? count : 0, 0);\r\n\t\t\t\tif (RandomSubset(((IDictionary)array).Keys, result, count, PhpMath.Generator))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Chooses specified number of items from a collection at random.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">The <see cref=\"ICollection\"/> from which to choose.</param>\r\n\t\t/// <param name=\"result\">The <see cref=\"IList\"/> where to add chosen items.</param>\r\n\t\t/// <param name=\"count\">The number of items to choose.</param>\r\n\t\t/// <param name=\"generator\">The initialized random numbers generator.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Items are chosen uniformly in time <I>O(n)</I>, where <I>n</I> is the number of items in the collection\r\n\t\t/// using conveyor belt sampling. \r\n\t\t/// </remarks>\r\n\t\t/// <returns><B>false</B> on failure.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Either <paramref name=\"source\"/> or <paramref name=\"result\"/> or \r\n\t\t/// <paramref name=\"generator\"/> is a <B>null</B> reference (Warning)</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"count\"/> is not positive and less \r\n\t\t/// than the number of items in <paramref name=\"source\"/>. (Warning)</exception>\r\n\t\tpublic static bool RandomSubset(ICollection source, IList result, int count, Random generator)\r\n\t\t{\r\n\t\t\t#region requires (source && result && generator && count>=1 && count<=source.Count)\r\n\r\n\t\t\tif (source == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (result == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"result\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (generator == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"generator\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (count < 1 || count > source.Count)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"count\", LibResources.GetString(\"number_of_items_not_between_one_and_item_count\",\r\n\t\t\t\t\tcount, source.Count));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\tint n = source.Count;\r\n\t\t\tIEnumerator iterator = source.GetEnumerator();\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\t// adds item to result with probability count/n:\r\n\t\t\t\tif ((double)count > generator.NextDouble() * n)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(iterator.Current);\r\n\t\t\t\t\tif (--count == 0) break;\r\n\t\t\t\t}\r\n\t\t\t\tn--;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n\r\n\t\t#region array_key_exists, in_array, array_search\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if a key exists in the array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key to be searched for.</param>\r\n\t\t/// <param name=\"array\">The array where to search for the key.</param>\r\n\t\t/// <returns>Whether the <paramref name=\"key\"/> exists in the <paramref name=\"array\"/>.</returns>\r\n\t\t/// <remarks><paramref name=\"key\"/> is converted by <see cref=\"PHP.Core.Convert.ObjectToArrayKey\"/> before the search.</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> argument is a <B>null</B> reference (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"key\"/> has type which is illegal for array key.</exception>\r\n\t\t[ImplementsFunction(\"array_key_exists\")]\r\n\t\tpublic static bool KeyExists(object key, PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tIntStringKey array_key;\r\n\t\t\tif (Core.Convert.ObjectToArrayKey(key, out array_key))\r\n\t\t\t\treturn array.ContainsKey(array_key);\r\n\t\t\t\t\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"illegal_offset_type\")); \r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Alias of <see cref=\"KeyExists\"/>.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"key_exists\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static bool KeyExistsObsolete(object key, PhpArray array)\r\n\t\t{\r\n\t\t\treturn KeyExists(key, array);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if a value exists in an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"needle\">The value to search for.</param>\r\n\t\t/// <param name=\"haystack\">The <see cref=\"PhpArray\"/> where to search.</param>\r\n\t\t/// <returns>Whether there is the <paramref name=\"needle\"/> value in the <see cref=\"PhpArray\"/>.</returns>\r\n\t\t/// <remarks>Regular comparison (<see cref=\"PhpComparer.CompareEq(object,object)\"/>) is used for comparing values.</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"haystack\"/> is a <B>null</B> reference (Warning).</exception>\r\n\t\t[ImplementsFunction(\"in_array\")]\r\n\t\tpublic static bool InArray(object needle, PhpArray haystack)\r\n\t\t{\r\n\t\t\tobject b = Search(needle, haystack, false);\r\n\t\t\treturn !(b is bool) || (bool)b;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if a value exists in an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"needle\">The value to search for.</param>\r\n\t\t/// <param name=\"haystack\">The <see cref=\"PhpArray\"/> where to search.</param>\r\n\t\t/// <param name=\"strict\">Whether strict comparison method (operator ===) is used for comparing values.</param>\r\n\t\t/// <returns>Whether there is the <paramref name=\"needle\"/> value in the <see cref=\"PhpArray\"/>.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"haystack\"/> is a <B>null</B> reference (Warning).</exception>\r\n\t\t[ImplementsFunction(\"in_array\")]\r\n\t\tpublic static bool InArray(object needle, PhpArray haystack, bool strict)\r\n\t\t{\r\n\t\t\tobject b = Search(needle, haystack, strict);\r\n\t\t\treturn !(b is bool) || (bool)b;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches the array for a given value and returns the corresponding key if successful.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"needle\">The value to search for.</param>\r\n\t\t/// <param name=\"haystack\">The <see cref=\"PhpArray\"/> where to search.</param>\r\n\t\t/// <returns>The key associated with the <paramref name=\"needle\"/> or <B>false</B> if there is no such key.</returns>\r\n\t\t/// <remarks>Regular comparison (<see cref=\"PhpComparer.CompareEq(object,object)\"/>) is used for comparing values.</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"haystack\"/> is a <B>null</B> reference (Warning).</exception>\r\n\t\t[ImplementsFunction(\"array_search\")]\r\n\t\tpublic static object Search(object needle, PhpArray haystack)\r\n\t\t{\r\n\t\t\treturn Search(needle, haystack, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches the array for a given value and returns the corresponding key if successful.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"needle\">The value to search for.</param>\r\n\t\t/// <param name=\"haystack\">The <see cref=\"PhpArray\"/> where to search.</param>\r\n\t\t/// <param name=\"strict\">Whether strict comparison method (operator ===) is used for comparing values.</param>\r\n\t\t/// <returns>The key associated with the <paramref name=\"needle\"/> or <B>false</B> if there is no such key.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"haystack\"/> is a <B>null</B> reference (Warning).</exception>\r\n\t\t[ImplementsFunction(\"array_search\")]\r\n\t\tpublic static object Search(object needle, PhpArray haystack, bool strict)\r\n\t\t{\r\n\t\t\t// result needn't to be deeply copied because it is a key of an array //\r\n\r\n\t\t\tif (haystack == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"haystack\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// using operator ===:\r\n\t\t\tif (strict)\r\n\t\t\t{\r\n                using (var enumerator = haystack.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                    {\r\n                        // dereferences value (because of StrictEquality operator):\r\n                        object val = PhpVariable.Dereference(enumerator.CurrentValue);\r\n\r\n                        if (Operators.StrictEquality(needle, val))\r\n                            return enumerator.CurrentKey.Object;\r\n                    }\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// using operator ==:\r\n\r\n                using (var enumerator = haystack.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                    {\r\n                        // comparator manages references well:\r\n                        if (PhpComparer.CompareEq(needle, enumerator.CurrentValue))\r\n                            return enumerator.CurrentKey.Object;\r\n                    }\r\n\t\t\t}\r\n\r\n\t\t\t// not found:\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n        #region array_fill, array_fill_keys, array_pad\r\n\r\n        /// <summary>\r\n\t\t/// Creates a new array filled with a specified value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"startIndex\">The value of the key of the first item in the array.</param>\r\n\t\t/// <param name=\"count\">The number of items in the array.</param>\r\n\t\t/// <param name=\"value\">The value copied to all items in the array.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if <paramref name=\"count\"/> is not positive.</exception>\r\n\t\t[ImplementsFunction(\"array_fill\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Fill(int startIndex, int count, object value)\r\n\t\t{\r\n\t\t\tif (count <= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"count\", LibResources.GetString(\"arg:negative_or_zero\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray(count, 0);\r\n\t\t\tint last = startIndex + count;\r\n\t\t\tfor (int i = startIndex; i < last; i++)\r\n\t\t\t\tresult.Add(i, value);\r\n\r\n\t\t\t// makes deep copies of all added items:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"array_fill_keys\")]\r\n        [return: PhpDeepCopy]\r\n        public static PhpArray FillKeys(PhpArray keys, object value)\r\n        {\r\n            if (keys == null)\r\n            {\r\n                PhpException.ArgumentNull(\"keys\");\r\n                return null;\r\n            }\r\n\r\n            var result = new PhpArray(keys.Count);\r\n            foreach (var x in keys)\r\n            {\r\n                IntStringKey key;\r\n                if (Core.Convert.ObjectToArrayKey(x.Value, out key) &&\r\n                    !result.ContainsKey(key))\r\n                {\r\n                    result.Add(key, value);\r\n                }\r\n            }\r\n\r\n            // makes deep copies of all added items:\r\n            result.InplaceCopyOnReturn = true;\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pads array to the specified length with a value.\r\n\t\t/// If the length is negative adds |length| elements at beginning otherwise adds elements at the end.\r\n\t\t/// Values with integer keys that are contained in the source array are inserted to the resulting one with new \r\n\t\t/// integer keys counted from zero (or from |length| if length negative).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The source array.</param>\r\n\t\t/// <param name=\"length\">The length of the resulting array.</param>\r\n\t\t/// <param name=\"value\">The value to add in array.</param>\r\n\t\t/// <returns>Padded array.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The <paramref name=\"array\"/> argument is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_pad\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Pad(PhpArray array, int length, object value)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// number of items to add:\r\n\t\t\tint remains = Math.Abs(length) - array.Count;\r\n\r\n\t\t\t// returns unchanged array (or its deep copy if called from PHP):\r\n\t\t\tif (remains <= 0) return array;\r\n\r\n\t\t\tPhpArray result = new PhpArray(array.IntegerCount + remains, array.StringCount);\r\n\r\n\t\t\t// prepends items:\r\n\t\t\tif (length < 0)\r\n\t\t\t{\r\n\t\t\t\twhile (remains-- > 0) result.Add(value);\r\n\t\t\t}\r\n\r\n\t\t\t// inserts items from source array\r\n\t\t\t// if a key is a string inserts it unchanged otherwise inserts value with max. integer key:  \r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t\tresult.Add(entry.Key.String, entry.Value);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult.Add(entry.Value);\r\n\t\t\t}\r\n\r\n\t\t\t// appends items:\r\n\t\t\tif (length > 0)\r\n\t\t\t{\r\n\t\t\t\twhile (remains-- > 0) result.Add(value);\r\n\t\t\t}\r\n\r\n\t\t\t// the result is inplace deeply copied on return to PHP code:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region range\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of integers from the [low;high] interval with arbitrary step.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <param name=\"step\">The step. An absolute value is taken if step is zero.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\tpublic static PhpArray RangeOfInts(int low, int high, int step)\r\n\t\t{\r\n\t\t\tif (step == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"step\", LibResources.GetString(\"arg:zero\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (step < 0) step = -step;\r\n\r\n\t\t\tPhpArray result = new PhpArray(Math.Abs(high - low) / step + 1);\r\n\r\n\t\t\tif (high >= low)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low <= high; i++, low += step) result.Add(i, low);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low >= high; i++, low -= step) result.Add(i, low);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of long integers from the [low;high] interval with arbitrary step.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <param name=\"step\">The step. An absolute value is taken if step is zero.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\tpublic static PhpArray RangeOfLongInts(long low, long high, long step)\r\n\t\t{\r\n\t\t\tif (step == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"step\", LibResources.GetString(\"arg:zero\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (step < 0) step = -step;\r\n\r\n\t\t\tPhpArray result = new PhpArray(unchecked((int)(Math.Abs(high - low) / step + 1)));\r\n\r\n\t\t\tif (high >= low)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low <= high; i++, low += step) result.Add(i, low);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low >= high; i++, low -= step) result.Add(i, low);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of doubles from the [low;high] interval with arbitrary step.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <param name=\"step\">The step. An absolute value is taken if step is less than zero.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"step\"/> argument is zero.</exception>\r\n\t\tpublic static PhpArray RangeOfDoubles(double low, double high, double step)\r\n\t\t{\r\n\t\t\tif (step == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"step\", LibResources.GetString(\"arg:zero\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (step < 0) step = -step;\r\n\r\n\t\t\tPhpArray result = new PhpArray(System.Convert.ToInt32(Math.Abs(high - low) / step) + 1);\r\n\r\n\t\t\tif (high >= low)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low <= high; i++, low += step) result.Add(i, low);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low >= high; i++, low -= step) result.Add(i, low);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of characters from the [low;high] interval with arbitrary step.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <param name=\"step\">The step.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"step\"/> argument is zero.</exception>\r\n\t\tpublic static PhpArray RangeOfChars(char low, char high, int step)\r\n\t\t{\r\n\t\t\tif (step == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"step\", LibResources.GetString(\"arg:zero\"));\r\n\t\t\t\tstep = 1;\r\n\t\t\t}\r\n\r\n\t\t\tif (step < 0) step = -step;\r\n\r\n\t\t\tPhpArray result = new PhpArray(Math.Abs(high - low) / step + 1, 0);\r\n\t\t\tif (high >= low)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low <= high; i++, low = unchecked((char)(low + step))) result.Add(i, low.ToString());\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; low >= high; i++, low = unchecked((char)(low - step))) result.Add(i, low.ToString());\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of elements with step 1.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\t[ImplementsFunction(\"range\")]\r\n\t\tpublic static PhpArray Range(object low, object high)\r\n\t\t{\r\n\t\t\treturn Range(low, high, 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array containing range of elements with arbitrary step.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"low\">Lower bound of the interval.</param>\r\n\t\t/// <param name=\"high\">Upper bound of the interval.</param>\r\n\t\t/// <param name=\"step\">The step.</param>\r\n\t\t/// <returns>The array.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Implements PHP awful range function. The result depends on types and \r\n\t\t/// content of parameters under the following rules:\r\n\t\t/// <list type=\"number\">\r\n\t\t/// <item>\r\n\t\t///   <description>\r\n\t\t///   If at least one parameter (low, high or step) is of type double or is a string wholly representing \r\n\t\t///       double value (i.e. whole string is converted to a number and no chars remains, \r\n\t\t///       e.g. \"1.5\" is wholly representing but the value \"1.5x\" is not)\r\n\t\t///    than\r\n\t\t///       range of double values is generated with a step treated as a double value\r\n\t\t///       (e.g. <c>range(\"1x\",\"2.5x\",\"0.5\") = array(1.0, 1.5, 2.0, 2.5)</c> etc.)\r\n\t\t///    otherwise \r\n\t\t///   </description>\r\n\t\t/// </item>\r\n\t\t/// <item>\r\n\t\t///   <description>\r\n\t\t///    if at least one bound (i.e. low or high parameter) is of type int or is a string wholly representing\r\n\t\t///       integer value \r\n\t\t///    than \r\n\t\t///       range of integer values is generated with a step treated as integer value\r\n\t\t///       (e.g. <c>range(\"1x\",\"2\",\"1.5\") = array(1, 2, 3, 4)</c> etc.)\r\n\t\t///    otherwise\r\n\t\t///   </description>\r\n\t\t/// </item>\r\n\t\t/// <item>\r\n\t\t///   <description>\r\n\t\t///    low and high are both non-empty strings (otherwise one of the two previous conditions would be true),\r\n\t\t///    so the first characters of these strings are taken and a sequence of characters is generated.\r\n\t\t///   </description>     \r\n\t\t/// </item>\r\n\t\t/// </list>\r\n\t\t/// Moreover, if <paramref name=\"low\"/> is greater than <paramref name=\"high\"/> then descending sequence is generated \r\n\t\t/// and ascending one otherwise. If <paramref name=\"step\"/> is less than zero than an absolute value is used.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"step\"/> argument is zero (or its absolute value less than 1 in the case 2).</exception>\r\n\t\t[ImplementsFunction(\"range\")]\r\n\t\tpublic static PhpArray Range(object low, object high, object step)\r\n\t\t{\r\n\t\t\tdouble d_step, d_low, d_high;\r\n\t\t\tint i_step, i_low, i_high;\r\n\t\t\tlong l_step, l_low, l_high;\r\n\t\t\tCore.Convert.NumberInfo info_step, info_low, info_high;\r\n\r\n\t\t\tbool is_step_double, is_low_double, is_high_double, w_step, w_low, w_high;\r\n\r\n\t\t\tif (low == null || String.Empty.Equals(low)) low = \"0\";\r\n\t\t\tif (high == null || String.Empty.Equals(high)) high = \"0\";\r\n\r\n\t\t\t// converts each parameter to a number, determines what type of number it is (int/double)\r\n\t\t\t// and whether it wholly represents that number:\r\n\t\t\tinfo_step = Core.Convert.ObjectToNumber(step, out i_step, out l_step, out d_step);\r\n\t\t\tinfo_low = Core.Convert.ObjectToNumber(low, out i_low, out l_low, out d_low);\r\n\t\t\tinfo_high = Core.Convert.ObjectToNumber(high, out i_high, out l_high, out d_high);\r\n\r\n\t\t\tis_step_double = (info_step & PHP.Core.Convert.NumberInfo.Double) != 0;\r\n\t\t\tis_low_double = (info_low & PHP.Core.Convert.NumberInfo.Double) != 0;\r\n\t\t\tis_high_double = (info_high & PHP.Core.Convert.NumberInfo.Double) != 0;\r\n\r\n\t\t\tw_step = (info_step & PHP.Core.Convert.NumberInfo.IsNumber) != 0;\r\n\t\t\tw_low = (info_low & PHP.Core.Convert.NumberInfo.IsNumber) != 0;\r\n\t\t\tw_high = (info_high & PHP.Core.Convert.NumberInfo.IsNumber) != 0;\r\n\r\n\t\t\t// at least one parameter is a double or its numeric value is wholly double:\r\n\t\t\tif (is_low_double && w_low || is_high_double && w_high || is_step_double && w_step)\r\n\t\t\t{\r\n\t\t\t\treturn RangeOfDoubles(d_low, d_high, d_step);\r\n\t\t\t}\r\n\r\n\t\t\t// at least one bound is wholly integer (doesn't matter what the step is):\r\n\t\t\tif (!is_low_double && w_low || !is_high_double && w_high)\r\n\t\t\t{\r\n\t\t\t\t// at least one long integer:\r\n\t\t\t\tif (((info_step | info_low | info_high) & PHP.Core.Convert.NumberInfo.LongInteger) != 0)\r\n\t\t\t\t\treturn RangeOfLongInts(l_low, l_high, l_step);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn RangeOfInts(i_low, i_high, i_step);\r\n\t\t\t}\r\n\r\n\t\t\t// both bounds are strings which are not wholly representing numbers (other types wholly represents a number):\r\n\r\n\t\t\tstring slow = Core.Convert.ObjectToString(low);\r\n\t\t\tstring shigh = Core.Convert.ObjectToString(high);\r\n\r\n\t\t\t// because each string doesn't represent a number it isn't empty:\r\n\t\t\tDebug.Assert(slow != \"\" && shigh != \"\");\r\n\r\n\t\t\treturn RangeOfChars(slow[0], shigh[0], i_step);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region GetComparer\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an instance of PHP comparer parametrized by specified method, order, and compared item type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The <see cref=\"ComparisonMethod\"/>.</param>\r\n\t\t/// <param name=\"order\">The <see cref=\"SortingOrder\"/>.</param>\r\n\t\t/// <param name=\"keyComparer\">Whether to compare keys (<B>false</B> for value comparer).</param>\r\n\t\t/// <returns>A comparer (either a new instance or existing singleton instance).</returns>\r\n\t\tpublic static IComparer<KeyValuePair<IntStringKey, object>>/*!*/ GetComparer(ComparisonMethod method, SortingOrder order, bool keyComparer)\r\n\t\t{\r\n\t\t\tif (keyComparer)\r\n\t\t\t{\r\n\t\t\t\tswitch (method)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase ComparisonMethod.Numeric:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? KeyComparer.ReverseNumeric : KeyComparer.Numeric;\r\n\r\n\t\t\t\t\tcase ComparisonMethod.String:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? KeyComparer.ReverseString : KeyComparer.String;\r\n\r\n\t\t\t\t\tcase ComparisonMethod.LocaleString:\r\n\t\t\t\t\t\treturn new KeyComparer(Locale.GetStringComparer(false), order == SortingOrder.Descending);\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? KeyComparer.Reverse : KeyComparer.Default;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tswitch (method)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase ComparisonMethod.Numeric:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? ValueComparer.ReverseNumeric : ValueComparer.Numeric;\r\n\r\n\t\t\t\t\tcase ComparisonMethod.String:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? ValueComparer.ReverseString : ValueComparer.String;\r\n\r\n\t\t\t\t\tcase ComparisonMethod.LocaleString:\r\n\t\t\t\t\t\treturn new ValueComparer(Locale.GetStringComparer(false), order == SortingOrder.Descending);\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn (order == SortingOrder.Descending) ? ValueComparer.Reverse : ValueComparer.Default;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region sort,asort,ksort,rsort,arsort,krsort\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"sort\")]\r\n\t\tpublic static bool Sort([PhpRw] PhpArray array)\r\n\t\t{\r\n            return Sort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"sort\")]\r\n\t\tpublic static bool Sort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, false));\r\n\t\t\tarray.ReindexAll();\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing values preserving key-value associations.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"asort\")]\r\n\t\tpublic static bool AssocSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\treturn AssocSort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing values preserving key-value associations.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"asort\")]\r\n\t\tpublic static bool AssocSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, false));\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing keys.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"ksort\")]\r\n\t\tpublic static bool KeySort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\treturn KeySort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing keys.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of keys.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"ksort\")]\r\n\t\tpublic static bool KeySort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Ascending, true));\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing values in reverse order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"rsort\")]\r\n\t\tpublic static bool ReverseSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\treturn ReverseSort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing values in reverse order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of keys.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"rsort\")]\r\n\t\tpublic static bool ReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, false));\r\n\t\t\tarray.ReindexAll();\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing values in reverse order \r\n\t\t/// preserving key-value associations.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"arsort\")]\r\n\t\tpublic static bool AssocReverseSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\treturn AssocReverseSort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing values in reverse order\r\n\t\t/// preserving key-value associations.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"arsort\")]\r\n\t\tpublic static bool AssocReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, false));\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using regular comparison method for comparing keys in reverse order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"krsort\")]\r\n\t\tpublic static bool KeyReverseSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\treturn KeyReverseSort(array, ComparisonMethod.Regular);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using specified comparison method for comparing keys in reverse order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"comparisonMethod\">The method to be used for comparison of keys.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"krsort\")]\r\n\t\tpublic static bool KeyReverseSort([PhpRw] PhpArray array, ComparisonMethod comparisonMethod)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(GetComparer(comparisonMethod, SortingOrder.Descending, true));\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region usort,uasort,uksort\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using user comparison callback for comparing values.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n        /// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"compare\">The user callback to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"usort\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool UserSort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\t\t\tif (!PhpArgument.CheckCallback(compare, caller, \"compare\", 0, false)) return false;\r\n\r\n\t\t\t// sorts array using callback for comparisons:\r\n\t\t\tarray.Sort(new ValueComparer(new PhpUserComparer(compare), false));\r\n\r\n\t\t\tarray.ReindexAll();\r\n\t\t\tarray.RestartIntrinsicEnumerator();\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array user comparison callback method for comparing values preserving key-value associations.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n        /// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"compare\">The user callback to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n        [ImplementsFunction(\"uasort\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool UserAssocSort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\t\t\tif (!PhpArgument.CheckCallback(compare, caller, \"compare\", 0, false)) return false;\r\n\r\n\t\t\t// sorts array using callback for comparisons:\r\n\t\t\tarray.Sort(new ValueComparer(new PhpUserComparer(compare), false));\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using user comparison callback for comparing keys.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n        /// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <param name=\"compare\">The user callback to be used for comparison of values.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n        [ImplementsFunction(\"uksort\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool UserKeySort(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback compare)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n            if (!PhpArgument.CheckCallback(compare, caller, \"compare\", 0, false)) return false;\r\n\r\n\t\t\tarray.Sort(new KeyComparer(new PhpUserComparer(compare), false));\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region natsort,natcasesort\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using case sensitive natural comparison method for comparing \r\n\t\t/// values preserving key-value association.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"natsort\")]\r\n\t\tpublic static bool NaturalSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(new ValueComparer(PhpNaturalComparer.Default, false));\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts an array using case insensitive natural comparison method for \r\n\t\t/// comparing values preserving key-value association.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be sorted.</param>\r\n\t\t/// <remarks>Resets <paramref name=\"array\"/>'s intrinsic enumerator.</remarks>\r\n        /// <returns>True on success, False on failure.</returns>\r\n\t\t[ImplementsFunction(\"natcasesort\")]\r\n\t\tpublic static bool NaturalCaseInsensitiveSort([PhpRw] PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return false; }\r\n\r\n\t\t\tarray.Sort(new ValueComparer(PhpNaturalComparer.CaseInsensitive, false));\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_multisort\r\n\r\n\t\t/// <summary>\r\n\t\t/// Resolves arguments passed to <see cref=\"MultiSort\"/> method according to PHP manual for <c>array_multisort</c> function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\">The first argument of <see cref=\"MultiSort\"/>.</param>\r\n\t\t/// <param name=\"args\">The rest of arguments of <see cref=\"MultiSort\"/>.</param>\r\n\t\t/// <param name=\"arrays\">An array to be filled with arrays passed in all arguments.</param>\r\n\t\t/// <param name=\"comparers\">An array to be filled with comparers defined by arguments.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Arrays and comparers can be a <B>null</B> reference. In such a case only number of arrays to be sorted\r\n\t\t/// is returned. Otherwise, <paramref name=\"arrays\"/> is filled with these arrays and <paramref name=\"comparers\"/>\r\n\t\t/// with comparers defined by appropriate arguments.\r\n\t\t/// </remarks>\r\n\t\tprivate static int MultiSortResolveArgs(\r\n\t\t\tPhpArray first,\r\n\t\t\tobject[] args,\r\n\t\t\tPhpArray[] arrays,\r\n\t\t\tIComparer<KeyValuePair<IntStringKey, object>>[] comparers)\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\t\t\tint col_count = 1;\r\n\t\t\tint row_count = first.Count;\r\n\t\t\tComparisonMethod method = ComparisonMethod.Undefined;\r\n\t\t\tSortingOrder order = SortingOrder.Undefined;\r\n\r\n\t\t\tif (arrays != null)\r\n\t\t\t{\r\n\t\t\t\tarrays[0] = first;\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif ((array = args[i] as PhpArray) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// checks whether the currently processed array has the same length as the first one:\r\n\t\t\t\t\tif (array.Count != row_count)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"lengths_are_different\", \"the first array\",\r\n\t\t\t\t\t\t\tString.Format(\"{0}-th array\", col_count)));\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// sets next array:\r\n\t\t\t\t\tif (arrays != null)\r\n\t\t\t\t\t\tarrays[col_count] = array;\r\n\r\n\t\t\t\t\t// sets comparer of the previous array:\r\n\t\t\t\t\tif (comparers != null)\r\n\t\t\t\t\t\tcomparers[col_count - 1] = GetComparer(method, order, false);\r\n\r\n\t\t\t\t\t// resets values:\r\n\t\t\t\t\tmethod = ComparisonMethod.Undefined;\r\n\t\t\t\t\torder = SortingOrder.Undefined;\r\n\r\n\t\t\t\t\tcol_count++;\r\n\t\t\t\t}\r\n\t\t\t\telse if (args[i] is int)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch ((int)args[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase (int)ComparisonMethod.Numeric:\r\n\t\t\t\t\t\tcase (int)ComparisonMethod.Regular:\r\n\t\t\t\t\t\tcase (int)ComparisonMethod.String:\r\n\t\t\t\t\t\tcase (int)ComparisonMethod.LocaleString:\r\n\t\t\t\t\t\t\tif (method != ComparisonMethod.Undefined)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"sorting_flag_already_specified\", i));\r\n\t\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmethod = (ComparisonMethod)args[i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase (int)SortingOrder.Ascending:\r\n\t\t\t\t\t\tcase (int)SortingOrder.Descending:\r\n\t\t\t\t\t\t\tif (order != SortingOrder.Undefined)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"sorting_flag_already_specified\", i));\r\n\t\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\torder = (SortingOrder)args[i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_array_or_sort_flag\", i));\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_array_or_sort_flag\", i));\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// sets comparer of the previous array:\r\n\t\t\tif (comparers != null)\r\n\t\t\t\tcomparers[col_count - 1] = GetComparer(method, order, false);\r\n\t\t\treturn col_count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sort multiple arrays.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\">The first array to be sorted.</param>\r\n\t\t/// <param name=\"args\">Arrays to be sorted along with flags affecting sort order and \r\n\t\t/// comparison methods to be used. See PHP manual for more details.</param>\r\n\t\t/// <returns>Whether arrays were sorted successfully.</returns>\r\n\t\t/// <remarks>Reindexes integer keys in the sorted arrays and restarts their intrinsic enumerators.</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"first\"/> is a <B>null</B> reference (Warning).</exception>\r\n        /// <exception cref=\"PhpException\">Arrays has different lengths (Warning).</exception>\r\n        /// <exception cref=\"PhpException\">Invalid sorting flags (Warning).</exception>\r\n        /// <exception cref=\"PhpException\">Multiple sorting flags applied on single array (Warning).</exception>\r\n\t\t[ImplementsFunction(\"array_multisort\")]\r\n\t\tpublic static bool MultiSort([PhpRw] PhpArray first, params object[] args)\r\n\t\t{\r\n\t\t\t// some \"args\" are also [PhpRw] but which ones is compile time unknown\r\n\t\t\t// but it is not neccessary to mark them since this attribute has no important effect\r\n\r\n\t\t\tif (first == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"first\");\r\n\t\t\t}\r\n\r\n\t\t\tIComparer<KeyValuePair<IntStringKey, object>>[] comparers;\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tint length = MultiSortResolveArgs(first, args, null, null);\r\n\r\n\t\t\tif (length == 0)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (length == 1)\r\n\t\t\t{\r\n\t\t\t\tcomparers = new IComparer<KeyValuePair<IntStringKey, object>>[1];\r\n\t\t\t\tMultiSortResolveArgs(first, args, null, comparers);\r\n\t\t\t\tfirst.Sort(comparers[0]);\r\n\t\t\t\tfirst.ReindexIntegers(0);\r\n\t\t\t\tfirst.RestartIntrinsicEnumerator();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tarrays = new PhpArray[length];\r\n\t\t\tcomparers = new IComparer<KeyValuePair<IntStringKey, object>>[length];\r\n\t\t\tMultiSortResolveArgs(first, args, arrays, comparers);\r\n\t\t\tPhpHashtable.Sort(arrays, comparers);\r\n\r\n\t\t\tfor (int i = 0; i < length; i++)\r\n\t\t\t{\r\n\t\t\t\tarrays[i].ReindexIntegers(0);\r\n\t\t\t\tarrays[i].RestartIntrinsicEnumerator();\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_u?(diff|intersect)(_u?assoc)?, array_(diff|intersect)_u?key\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal method common for all functions.\r\n\t\t/// </summary>\r\n        private static PhpArray SetOperation(SetOperations op, PhpArray array, PhpArray[] arrays,\r\n            IComparer<KeyValuePair<IntStringKey, object>> comparer)\r\n        {\r\n            if (array == null)\r\n            {\r\n                PhpException.ArgumentNull(\"array\");\r\n                return null;\r\n            }\r\n\r\n            if (arrays == null || arrays.Length == 0)\r\n            {\r\n                PhpException.InvalidArgumentCount(null, null);\r\n                return null;\r\n            }\r\n\r\n            Debug.Assert(comparer != null);\r\n\r\n            PhpArray result = new PhpArray();\r\n            array.SetOperation(op, arrays, comparer, result);\r\n\r\n            // the result is inplace deeply copied on return to PHP code:\r\n            result.InplaceCopyOnReturn = true;\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// There have to be at least 1 value in <paramref name=\"vars\"/>.\r\n\t\t/// The last is converted to callback, the rest to arrays.\r\n\t\t/// </summary>\r\n\t\tprivate static bool SplitArraysAndComparers(int comparerCount, PhpArray array, object[] vars,\r\n\t\t  out PhpArray[] arrays, out PhpCallback cmp1, out PhpCallback cmp2)\r\n\t\t{\r\n\t\t\tarrays = null;\r\n\t\t\tcmp1 = cmp2 = null;\r\n\r\n\t\t\tif (vars == null || vars.Length == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgumentCount(null, null);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// the first callback:\r\n\t\t\tcmp1 = Core.Convert.ObjectToCallback(vars[vars.Length - comparerCount]);\r\n            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))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t// the second callback:\r\n\t\t\tif (comparerCount > 1)\r\n\t\t\t{\r\n\t\t\t\tcmp2 = Core.Convert.ObjectToCallback(vars[vars.Length - 1]);\r\n                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))\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// remaining arguments should be arrays:\r\n\t\t\tarrays = new PhpArray[vars.Length - comparerCount + 1];\r\n\t\t\tarrays[0] = array;\r\n\t\t\tfor (int i = 0; i < vars.Length - comparerCount; i++)\r\n\t\t\t{\r\n\t\t\t\tarrays[i + 1] = vars[i] as PhpArray;\r\n\t\t\t\tif (arrays[i + 1] == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_array\", i + 3));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array from which to take items away.</param>\r\n\t\t/// <param name=\"arrays\">The arrays to be differentiated.</param>\r\n\t\t/// <returns>The array containing all the entries of <paramref name=\"array\"/> that are not present \r\n\t\t/// in any of the <paramref name=\"arrays\"/>.</returns>\r\n\t\t/// <remarks>Keys are preserved. Entries are considered to be equal iff values compared by  \r\n\t\t/// by string comparison method are the same (see <see cref=\"ValueComparer.String\"/>).</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"arrays\"/> is a <B>null</B> reference or an empty array.</exception>\r\n\t\t[ImplementsFunction(\"array_diff\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Diff(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays, ValueComparer.String);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_intersect\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Intersect(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays, ValueComparer.String);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array from which to take items away.</param>\r\n\t\t/// <param name=\"arrays\">The arrays to be differentiated.</param>\r\n\t\t/// <returns>The array containing all the entries of <paramref name=\"array\"/> that are not present \r\n\t\t/// in any of the <paramref name=\"arrays\"/>.</returns>\r\n\t\t/// <remarks>Keys are preserved. Entries are considered to be equal iff they has the same keys and values\r\n\t\t/// according to string method comparison (see <see cref=\"EntryComparer\"/> and <see cref=\"PhpStringComparer\"/>).</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"arrays\"/> is a <B>null</B> reference or an empty array.</exception>\r\n\t\t[ImplementsFunction(\"array_diff_assoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray DiffAssoc(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew EntryComparer(PhpStringComparer.Default, false, PhpStringComparer.Default, false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_intersect_assoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray IntersectAssoc(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew EntryComparer(PhpStringComparer.Default, false, PhpStringComparer.Default, false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array from which to take items away.</param>\r\n\t\t/// <param name=\"arrays\">The arrays to be differentiated.</param>\r\n\t\t/// <returns>The array containing all the entries of <paramref name=\"array\"/> that are not present \r\n\t\t/// in any of the <paramref name=\"arrays\"/>.</returns>\r\n\t\t/// <remarks>Entries are considered to be equal iff keys compared by  \r\n\t\t/// by string comparison method are the same (see <see cref=\"KeyComparer.String\"/>).</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"arrays\"/> is a <B>null</B> reference or an empty array.</exception>\r\n\t\t[ImplementsFunction(\"array_diff_key\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray DiffKey(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays, KeyComparer.String);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_intersect_key\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray IntersectKey(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays, KeyComparer.String);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays using a specified key comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_diff_ukey\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray DiffDiffUser(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew KeyComparer(new PhpUserComparer(key_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays using a specified key comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_intersect_ukey\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray IntersectUserKey(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew KeyComparer(new PhpUserComparer(key_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_udiff\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserDiff(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback value_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew ValueComparer(new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_uintersect\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserIntersect(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback value_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew ValueComparer(new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_udiff_assoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserDiffAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback value_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew EntryComparer(PhpStringComparer.Default, false, new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_uintersect_assoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserIntersectAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback value_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out value_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew EntryComparer(PhpStringComparer.Default, false, new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_diff_uassoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray DiffUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew EntryComparer(new PhpUserComparer(key_comparer), false, PhpStringComparer.Default, false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays using a specified comparer.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_intersect_uassoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray IntersectUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparer)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, cmp;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(1, array0, arraysAndComparer, out arrays, out key_comparer, out cmp)) return null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew EntryComparer(new PhpUserComparer(key_comparer), false, PhpStringComparer.Default, false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the difference of arrays using specified comparers.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_udiff_uassoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserDiffUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparers)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, value_comparer;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(2, array0, arraysAndComparers, out arrays, out value_comparer, out key_comparer))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Difference, array, arrays,\r\n\t\t\t\tnew EntryComparer(new PhpUserComparer(key_comparer), false, new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the intersection of arrays using specified comparers.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"array_uintersect_uassoc\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray UserIntersectUserAssoc(PhpArray array, PhpArray array0, params object[] arraysAndComparers)\r\n\t\t{\r\n\t\t\tPhpArray[] arrays;\r\n\t\t\tPhpCallback key_comparer, value_comparer;\r\n\r\n\t\t\tif (!SplitArraysAndComparers(2, array0, arraysAndComparers, out arrays, out value_comparer, out key_comparer))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn SetOperation(SetOperations.Intersection, array, arrays,\r\n\t\t\t\tnew EntryComparer(new PhpUserComparer(key_comparer), false, new PhpUserComparer(value_comparer), false));\r\n\t\t}\r\n\r\n\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_merge, array_merge_recursive\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges one or more arrays. Integer keys are changed to new ones, string keys are preserved.\r\n\t\t/// Values associated with existing string keys are be overwritten.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"arrays\">Arrays to be merged.</param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> containing items from all <paramref name=\"arrays\"/>.</returns>\r\n\t\t[ImplementsFunction(\"array_merge\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Merge(params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\t// \"arrays\" argument is PhpArray[] => compiler generates code converting any value to PhpArray.\r\n\t\t\t// Note, PHP does reject non-array arguments.\r\n\r\n\t\t\tif (arrays == null || arrays.Length == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"arrays\", LibResources.GetString(\"arg:null_or_empty\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray(arrays[0].IntegerCount, arrays[0].StringCount);\r\n\r\n\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t{\r\n                if (arrays[i] != null)\r\n                {\r\n                    using (var enumerator = arrays[i].GetFastEnumerator())\r\n                        while (enumerator.MoveNext())\r\n                        {\r\n                            if (enumerator.CurrentKey.IsString)\r\n                                result[enumerator.CurrentKey] = enumerator.CurrentValue;\r\n                            else\r\n                                result.Add(enumerator.CurrentValue);\r\n                        }\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\t// results is inplace deeply copied if returned to PHP code:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges arrays recursively.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The first array to merge.</param>\r\n\t\t/// <param name=\"arrays\">The next arrays to merge.</param>\r\n\t\t/// <returns>An array containing items of all specified arrays.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Integer keys are reset so there cannot be a conflict among them. \r\n\t\t/// Conflicts among string keys are resolved by merging associated values into arrays. \r\n\t\t/// Merging is propagated recursively. Merged values are dereferenced. References are \r\n\t\t/// preserved in non-merged values.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\">Some array is a <B>null</B> reference (Warning).</exception>\r\n\t\t[ImplementsFunction(\"array_merge_recursive\")]\r\n\t\tpublic static PhpArray MergeRecursiveDc(PhpArray array, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\tif (array == null || arrays == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull((array == null) ? \"array\" : \"arrays\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (arrays[i] == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_array\", i + 2));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn MergeRecursive(array, true, arrays);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges arrays recursively.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The first array to merge.</param>\r\n\t\t/// <param name=\"arrays\">The next arrays to merge.</param>\r\n\t\t/// <param name=\"deepCopy\">Whether to deep copy merged items.</param>\r\n\t\t/// <returns>An array containing items of all specified arrays.</returns>\r\n\t\tpublic static PhpArray MergeRecursive(PhpArray array, bool deepCopy, params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\tif (array == null) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tarray.AddTo(result, deepCopy);\r\n\r\n\t\t\tif (arrays != null)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (arrays[i] != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!MergeRecursiveInternal(result, arrays[i], deepCopy))\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"recursion_detected\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds items of \"array\" to \"result\" merging those whose string keys are the same.\r\n\t\t/// </summary>\r\n\t\tprivate static bool MergeRecursiveInternal(PhpArray/*!*/ result, PhpArray/*!*/ array, bool deepCopy)\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (result.ContainsKey(entry.Key))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// the result array already contains the item => merging take place\r\n\t\t\t\t\t\tobject xv = result[entry.Key];\r\n\t\t\t\t\t\tobject yv = entry.Value;\r\n\r\n\t\t\t\t\t\t// source item:\r\n\t\t\t\t\t\tobject x = PhpVariable.Dereference(xv);\r\n\t\t\t\t\t\tobject y = PhpVariable.Dereference(yv);\r\n\t\t\t\t\t\tPhpArray ax = x as PhpArray;\r\n\t\t\t\t\t\tPhpArray ay = y as PhpArray;\r\n\r\n\t\t\t\t\t\t// if x is not a reference then we can reuse the ax array for the result\r\n\t\t\t\t\t\t// since it has been deeply copied when added to the resulting array:\r\n\t\t\t\t\t\tPhpArray item_result = (deepCopy && x == xv && ax != null) ? ax : new PhpArray();\r\n\r\n\t\t\t\t\t\tif (ax != null && ay != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (ax != item_result)\r\n\t\t\t\t\t\t\t\tax.AddTo(item_result, deepCopy);\r\n\r\n\t\t\t\t\t\t\tif (ax.Visited && ay.Visited) return false;\r\n\r\n\t\t\t\t\t\t\tax.Visited = true;\r\n\t\t\t\t\t\t\tay.Visited = true;\r\n\r\n\t\t\t\t\t\t\t// merges ay to the item result (may lead to stack overflow, \r\n\t\t\t\t\t\t\t// but only with both arrays recursively referencing themselves - who cares?):\r\n\t\t\t\t\t\t\tbool finite = MergeRecursiveInternal(item_result, ay, deepCopy);\r\n\r\n\t\t\t\t\t\t\tax.Visited = false;\r\n\t\t\t\t\t\t\tay.Visited = false;\r\n\r\n\t\t\t\t\t\t\tif (!finite) return false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (ax != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (ax != item_result)\r\n\t\t\t\t\t\t\t\t\tax.AddTo(item_result, deepCopy);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t/*if (x != null)*/\r\n\t\t\t\t\t\t\t\t\titem_result.Add((deepCopy) ? PhpVariable.DeepCopy(x) : x);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (ay != null) ay.AddTo(item_result, deepCopy);\r\n\t\t\t\t\t\t\telse /*if (y != null)*/ item_result.Add((deepCopy) ? PhpVariable.DeepCopy(y) : y);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tresult[entry.Key] = item_result;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// PHP does no dereferencing when items are not merged:\r\n\t\t\t\t\t\tresult.Add(entry.Key, (deepCopy) ? PhpVariable.DeepCopy(entry.Value) : entry.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// PHP does no dereferencing when items are not merged:\r\n\t\t\t\t\tresult.Add((deepCopy) ? PhpVariable.DeepCopy(entry.Value) : entry.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_change_key_case\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string keys in <see cref=\"PhpArray\"/> to lower case.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The <see cref=\"PhpArray\"/> to be converted.</param>\r\n\t\t/// <returns>The copy of <paramref name=\"array\"/> with all string keys lower cased.</returns>\r\n\t\t/// <remarks>Integer keys as well as all values remain unchanged.</remarks>\r\n\t\tpublic static PhpArray StringKeysToLower(PhpArray/*!*/ array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n            System.Globalization.TextInfo textInfo = null; // cache current culture to avoid repetitious CurrentCulture.get\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n                if (entry.Key.IsString)\r\n                {\r\n                    if (textInfo == null) textInfo = System.Globalization.CultureInfo.CurrentCulture.TextInfo;\r\n                    result[textInfo.ToLower(entry.Key.String)] = entry.Value;\r\n                }\r\n                else\r\n                    result[entry.Key] = entry.Value;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string keys in <see cref=\"PhpArray\"/> to upper case.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The <see cref=\"PhpArray\"/> to be converted.</param>\r\n\t\t/// <returns>The copy of <paramref name=\"array\"/> with all string keys upper cased.</returns>\r\n\t\t/// <remarks>Integer keys as well as all values remain unchanged.</remarks>\r\n\t\tpublic static PhpArray StringKeysToUpper(PhpArray/*!*/ array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t\tresult[entry.Key.String.ToUpper()] = entry.Value;\r\n\t\t\t\telse\r\n\t\t\t\t\tresult[entry.Key] = entry.Value;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string keys in <see cref=\"PhpArray\"/> to lower case.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The <see cref=\"PhpArray\"/> to be converted.</param>\r\n\t\t/// <returns>The copy of <paramref name=\"array\"/> with all string keys lower cased.</returns>\r\n\t\t/// <remarks>Integer keys as well as all values remain unchanged.</remarks>\r\n\t\t[ImplementsFunction(\"array_change_key_case\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray ChangeKeyCase(PhpArray/*!*/ array)\r\n\t\t{\r\n\t\t\tPhpArray result = StringKeysToLower(array);\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string keys in <see cref=\"PhpArray\"/> to specified case.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The <see cref=\"PhpArray\"/> to be converted.</param>\r\n\t\t/// <param name=\"keyCase\">The <see cref=\"LetterCase\"/> to convert keys to.</param>\r\n\t\t/// <returns>The copy of <paramref name=\"array\"/> with all string keys lower cased.</returns>\r\n\t\t/// <remarks>Integer keys as well as all values remain unchanged.</remarks>\r\n\t\t[ImplementsFunction(\"array_change_key_case\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray ChangeKeyCase(PhpArray array, LetterCase keyCase)\r\n\t\t{\r\n\t\t\tPhpArray result;\r\n\t\t\tswitch (keyCase)\r\n\t\t\t{\r\n\t\t\t\tcase LetterCase.Lower: result = StringKeysToLower(array); break;\r\n\t\t\t\tcase LetterCase.Upper: result = StringKeysToUpper(array); break;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.InvalidArgument(\"keyCase\");\r\n\t\t\t\t\tgoto case LetterCase.Upper;\r\n\t\t\t}\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_chunk\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits an array into chunks.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be split.</param>\r\n\t\t/// <param name=\"size\">The number of items in each chunk (except for the last one where can be lesser items).</param>\r\n\t\t/// <returns>The array containing chunks indexed by integers starting from zero, \r\n\t\t/// all keys in chunks are reindexed starting from zero.</returns>\r\n\t\t/// <remarks>Chunks will contain deep copies of <paramref name=\"array\"/> items.</remarks>\r\n\t\t[ImplementsFunction(\"array_chunk\")]\r\n\t\tpublic static PhpArray ChunkDc(PhpArray array, int size)\r\n\t\t{\r\n\t\t\treturn ChunkInternal(array, size, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits an array into chunks.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be split.</param>\r\n\t\t/// <param name=\"size\">The number of items in each chunk (except for the last one where can be lesser items).</param>\r\n\t\t/// <param name=\"preserveKeys\">Whether to preserve keys in chunks.</param>\r\n\t\t/// <returns>The array containing chunks indexed by integers starting from zero.</returns>\r\n\t\t/// <remarks>Chunks will contain deep copies of <paramref name=\"array\"/> items.</remarks>\r\n\t\t[ImplementsFunction(\"array_chunk\")]\r\n\t\tpublic static PhpArray ChunkDc(PhpArray array, int size, bool preserveKeys)\r\n\t\t{\r\n\t\t\treturn ChunkInternal(array, size, preserveKeys, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits an array into chunks.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be split.</param>\r\n\t\t/// <param name=\"size\">The number of items in each chunk (except for the last one where can be lesser items).</param>\r\n\t\t/// <returns>The array containing chunks indexed by integers starting from zero, \r\n\t\t/// all keys in chunks are reindexed starting from zero.</returns>\r\n\t\tpublic static PhpArray Chunk(PhpArray array, int size)\r\n\t\t{\r\n\t\t\treturn ChunkInternal(array, size, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits an array into chunks.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be split.</param>\r\n\t\t/// <param name=\"size\">The number of items in each chunk (except for the last one where can be lesser items).</param>\r\n\t\t/// <param name=\"preserveKeys\">Whether to preserve keys in chunks.</param>\r\n\t\t/// <returns>The array containing chunks indexed by integers starting from zero.</returns>\r\n\t\tpublic static PhpArray Chunk(PhpArray array, int size, bool preserveKeys)\r\n\t\t{\r\n\t\t\treturn ChunkInternal(array, size, preserveKeys, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal version of <see cref=\"Chunk\"/> with deep-copy option.\r\n\t\t/// </summary>\r\n\t\tinternal static PhpArray ChunkInternal(PhpArray array, int size, bool preserveKeys, bool deepCopy)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (size <= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"array\", LibResources.GetString(\"arg:negative_or_zero\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// nothing to do:\r\n\t\t\tif (array.Count == 0)\r\n\t\t\t\treturn new PhpArray();\r\n\r\n\t\t\t// number of chunks:\r\n\t\t\tint count = (array.Count - 1) / size + 1; // = ceil(Count/size):\r\n\r\n\t\t\tPhpArray chunk;\r\n\t\t\tPhpArray result = new PhpArray(count, 0);\r\n\r\n\t\t\tIEnumerator<KeyValuePair<IntStringKey, object>> iterator;\r\n\r\n\t\t\t// if deep-copies are required, wrapp iterator by enumerator making deep copies:\r\n\t\t\tif (deepCopy)\r\n\t\t\t\titerator = PhpVariable.EnumerateDeepCopies(array).GetEnumerator();\r\n\t\t\telse\r\n\t\t\t\titerator = array.GetEnumerator();\r\n\r\n\t\t\titerator.MoveNext();\r\n\r\n\t\t\t// all chunks except for the last one:\r\n\t\t\tfor (int i = 0; i < count - 1; i++)\r\n\t\t\t{\r\n\t\t\t\tchunk = new PhpArray(size, 0);\r\n\r\n\t\t\t\tif (preserveKeys)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int j = 0; j < size; j++, iterator.MoveNext())\r\n\t\t\t\t\t\tchunk.Add(iterator.Current.Key, iterator.Current.Value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int j = 0; j < size; j++, iterator.MoveNext())\r\n\t\t\t\t\t\tchunk.Add(iterator.Current.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult.Add(chunk);\r\n\t\t\t}\r\n\r\n\t\t\t// the last chunk:\r\n\t\t\tchunk = new PhpArray((size <= array.Count) ? size : array.Count, 0);\r\n\r\n\t\t\tif (preserveKeys)\r\n\t\t\t{\r\n\t\t\t\tdo { chunk.Add(iterator.Current.Key, iterator.Current.Value); } while (iterator.MoveNext());\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tdo { chunk.Add(iterator.Current.Value); } while (iterator.MoveNext());\r\n\t\t\t}\r\n\r\n\t\t\tresult.Add(chunk);\r\n\r\n\t\t\t// no deep copy is needed since it has already been done on chunks:\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_count_values, array_unique\r\n\r\n\t\t/// <summary>\r\n\t\t/// Counts frequency of each value in an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which values to count.</param>\r\n\t\t/// <returns>The array which keys are values of <paramref name=\"array\"/> and values are their frequency.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Only <see cref=\"string\"/> and <see cref=\"int\"/> values are counted.\r\n\t\t/// Note, string numbers (e.g. \"10\") and their integer equivalents (e.g. 10) are counted separately.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\">A value is neither <see cref=\"string\"/> nor <see cref=\"int\"/>.</exception>\r\n\t\t[ImplementsFunction(\"array_count_values\")]\r\n\t\tpublic static PhpArray CountValues(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tstring skey;\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tIEnumerator iterator = array.Values.GetEnumerator();\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\t// dereferences value:\r\n\t\t\t\tobject val = PhpVariable.Dereference(iterator.Current);\r\n\r\n\t\t\t\tif (val is int)\r\n\t\t\t\t{\r\n\t\t\t\t\tint ikey = (int)val;\r\n\t\t\t\t\tobject q = result[ikey];\r\n\t\t\t\t\tresult[ikey] = (q == null) ? 1 : (int)q + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse if ((skey = PhpVariable.AsString(val)) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject q = result[skey];\r\n\t\t\t\t\tresult[skey] = (q == null) ? 1 : (int)q + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"neither_string_nor_integer_value\", \"count\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// no need to deep copy (values are ints):\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        public enum ArrayUniqueSortFlags\r\n\t    {\r\n            /// <summary>\r\n            /// compare items normally (don't change types)\r\n            /// </summary>\r\n            [ImplementsConstant(\"SORT_REGULAR\")]\r\n            Regular = 0,\r\n\r\n            /// <summary>\r\n            /// compare items numerically\r\n            /// </summary>\r\n            [ImplementsConstant(\"SORT_NUMERIC\")]\r\n            Numeric = 1,\r\n        \r\n            /// <summary>\r\n            /// compare items as strings, default\r\n            /// </summary>\r\n            [ImplementsConstant(\"SORT_STRING\")]\r\n            String = 2,\r\n        \r\n            /// <summary>\r\n            /// compare items as strings, based on the current locale.\r\n            /// Added in PHP 4.4.0 and 5.0.2. Before PHP 6, it uses the system locale,\r\n            /// which can be changed using setlocale(). Since PHP 6, you must use the i18n_loc_set_default() function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"SORT_LOCALE_STRING\")]\r\n            LocaleString = 5,\r\n\t\t\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Removes duplicate values from an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which duplicate values to remove.</param>\r\n\t\t/// <returns>A copy of <paramref name=\"array\"/> without duplicated values.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Values are compared using string comparison method (<see cref=\"ValueComparer.String\"/>).  \r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_unique\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Unique(PhpArray array)\r\n        {\r\n            return Unique(array, ArrayUniqueSortFlags.String);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes duplicate values from an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array which duplicate values to remove.</param>\r\n        /// <param name=\"sortFlags\">Specifies how the values are compared to be identical.</param>\r\n\t\t/// <returns>A copy of <paramref name=\"array\"/> without duplicated values.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Values are compared using string comparison method (<see cref=\"ValueComparer.String\"/>).  \r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_unique\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Unique(PhpArray array, ArrayUniqueSortFlags sortFlags /*= String*/)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tIComparer comparer;\r\n            switch(sortFlags)\r\n            {\r\n                case ArrayUniqueSortFlags.Regular:\r\n                    comparer = PhpComparer.Default; break;\r\n                case ArrayUniqueSortFlags.Numeric:\r\n                    comparer = PhpNumericComparer.Default; break;\r\n                case ArrayUniqueSortFlags.String:\r\n                    comparer = PhpStringComparer.Default; break;\r\n                case ArrayUniqueSortFlags.LocaleString:\r\n                default:\r\n                    PhpException.ArgumentValueNotSupported(\"sortFlags\", (int)sortFlags);\r\n                    return null;\r\n            }\r\n\r\n            PhpArray result = new PhpArray(array.Count);\r\n\r\n            HashSet<object>/*!*/identitySet = new HashSet<object>(new ObjectEqualityComparer(comparer));\r\n\r\n            // get only unique values - first found\r\n            using (var enumerator = array.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    if (identitySet.Add(PhpVariable.Dereference(enumerator.CurrentValue)))\r\n                        result.Add(enumerator.Current);\r\n                }\r\n\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_flip\r\n\r\n\t\t/// <summary>\r\n\t\t/// Swaps all keys and their associated values in an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array.</param>\r\n\t\t/// <returns>An array containing entries which keys are values from the <paramref name=\"array\"/>\r\n\t\t/// and which values are the corresponding keys.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Values which are not of type <see cref=\"string\"/> nor <see cref=\"int\"/> are skipped \r\n\t\t/// and for each such value a warning is reported. If there are more entries with the same \r\n\t\t/// value in the <paramref name=\"array\"/> the last key is considered others are ignored.\r\n\t\t/// String keys are converted using <see cref=\"Core.Convert.StringToArrayKey\"/>.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Unlike PHP this method doesn't return <B>false</B> on failure but a <B>null</B> reference.\r\n\t\t/// This is because it fails only if <paramref name=\"array\"/> is a <B>null</B> reference.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">A value is neither <see cref=\"string\"/> nor <see cref=\"int\"/> (Warning).</exception>     \r\n\t\t[ImplementsFunction(\"array_flip\")]\r\n\t\tpublic static PhpArray Flip(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tstring skey;\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\t// dereferences value:\r\n\t\t\t\tobject val = PhpVariable.Dereference(entry.Value);\r\n\r\n\t\t\t\tif (val is int)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[(int)val] = entry.Key.Object;\r\n\t\t\t\t}\r\n\t\t\t\telse if ((skey = PhpVariable.AsString(val)) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[Core.Convert.StringToArrayKey(skey)] = entry.Key.Object;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"neither_string_nor_integer_value\", \"flip\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// no need to deep copy because values are ints/strings only (<= keys were int/strings only):\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_keys, array_values, array_combine\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an array of keys contained in a given array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">An array which keys to get.</param>\r\n\t\t/// <returns><see cref=\"PhpArray\"/> of <paramref name=\"array\"/>'s keys.\r\n\t\t/// Keys in returned array are successive integers starting from zero.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_keys\")]\r\n\t\tpublic static PhpArray Keys(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// no need to make a deep copy since keys are immutable objects (strings, ints):\r\n            var result = new PhpArray(array.Count);\r\n            using (var enumerator = array.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                    result.AddToEnd(enumerator.CurrentKey.Object);\r\n\r\n            return result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an array of some keys contained in a given array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">An array which keys to get.</param>\r\n\t\t/// <param name=\"searchValue\">Only the keys for this value are returned. \r\n\t\t/// Values are compared using regular comparison method (<see cref=\"PhpComparer.CompareEq\"/>).</param>\r\n\t\t/// <returns>An array of keys being associated with specified value. \r\n\t\t/// Keys in returned array are successive integers starting from zero.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"array_keys\")]\r\n\t\tpublic static PhpArray Keys(PhpArray array, object searchValue)\r\n\t\t{\r\n            return Keys(array, searchValue, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Retrieves an array of some keys contained in a given array.\r\n        /// </summary>\r\n        /// <param name=\"array\">An array which keys to get.</param>\r\n        /// <param name=\"searchValue\">Only the keys for this value are returned. \r\n        /// Values are compared using regular comparison method (<see cref=\"PhpComparer.CompareEq\"/>).</param>\r\n        /// <param name=\"strict\">If true, uses strict comparison method (operator \"===\").</param>\r\n        /// <returns>An array of keys being associated with specified value. \r\n        /// Keys in returned array are successive integers starting from zero.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n        [ImplementsFunction(\"array_keys\")]\r\n        public static PhpArray Keys(PhpArray array, object searchValue, bool strict)\r\n        {\r\n            if (array == null)\r\n            {\r\n                PhpException.ArgumentNull(\"array\");\r\n                return null;\r\n            }\r\n\r\n            PhpArray result = new PhpArray();\r\n\r\n            if (!strict)\r\n            {\r\n                using (var enumerator = array.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                    {\r\n                        if (PhpComparer.CompareEq(enumerator.CurrentValue, searchValue))\r\n                            result.AddToEnd(enumerator.CurrentKey.Object);\r\n                    }\r\n            }\r\n            else\r\n            {\r\n                using (var enumerator = array.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                    {\r\n                        if (Operators.StrictEquality(enumerator.CurrentValue, searchValue))\r\n                            result.AddToEnd(enumerator.CurrentKey.Object);\r\n                    }\r\n            }\r\n\r\n            // no need to make a deep copy since keys are immutable objects (strings, ints):\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an array of values contained in a given array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">An array which values to get.</param>\r\n\t\t/// <returns>A copy of <paramref name=\"array\"/> with all keys indexed starting from zero.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"array\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <remarks>Doesn't dereference PHP references.</remarks>\r\n\t\t[ImplementsFunction(\"array_values\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Values(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// references are not dereferenced:\r\n            PhpArray result = new PhpArray(array.Count);\r\n            using (var enumerator = array.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                    result.AddToEnd(enumerator.CurrentValue);\r\n                \r\n\t\t\t// result is inplace deeply copied on return to PHP code:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an array using one array for its keys and the second for its values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keys\">The keys of resulting array.</param>\r\n\t\t/// <param name=\"values\">The values of resulting array.</param>\r\n\t\t/// <returns>An array with keys from <paramref name=\"keys\"/> values and values \r\n\t\t/// from <paramref name=\"values\"/> values.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <paramref name=\"keys\"/> and <paramref name=\"values\"/> should have the same length (zero is \r\n\t\t/// adminssible - an empty array is returned).\r\n\t\t/// Keys are converted using <see cref=\"PHP.Core.Convert.ObjectToArrayKey\"/> before hashed to resulting array.\r\n\t\t/// If more keys has the same value after conversion the last one is used.\r\n\t\t/// If a key is not a legal array key it is skipped.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"keys\"/> or <paramref name=\"values\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"keys\"/> and <paramref name=\"values\"/> has different length.</exception>\r\n\t\t/// <remarks>Doesn't dereference PHP references.</remarks>\r\n\t\t[ImplementsFunction(\"array_combine\")]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Combine(PhpArray keys, PhpArray values)\r\n\t\t{\r\n\t\t\tif (keys == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"keys\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (values == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"values\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (keys.Count != values.Count)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"lengths_are_different\", \"keys\", \"values\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tIEnumerator k_iterator = keys.Values.GetEnumerator();\r\n\t\t\tIEnumerator v_iterator = values.Values.GetEnumerator();\r\n\t\t\twhile (k_iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tv_iterator.MoveNext();\r\n\r\n\t\t\t\t// invalid keys are skipped, values are not dereferenced:\r\n\t\t\t\tIntStringKey key;\r\n\t\t\t\tif (PHP.Core.Convert.ObjectToArrayKey(k_iterator.Current, out key))\r\n\t\t\t\t\tresult[key] = v_iterator.Current;\r\n\t\t\t}\r\n\r\n\t\t\t// result is inplace deeply copied on return to PHP code:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_sum, array_product, array_reduce\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sums all values in an array. Each value is converted to a number in the same way it is done by PHP.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"array\"/> argument is null.</exception>\r\n\t\t/// <returns>\r\n\t\t/// An integer, if all items are integers or strings converted to integers and the result is in integer range.\r\n\t\t/// A double, otherwise.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"array_sum\")]\r\n\t\tpublic static object Sum(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn 0.0;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.Count == 0)\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\tdouble dval;\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\r\n\t\t\tdouble dresult = 0.0;\r\n\t\t\tlong lresult = 0;\r\n\t\t\tbool overflown = false;\r\n\r\n\t\t\tCore.Convert.NumberInfo info_result = 0;\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tCore.Convert.NumberInfo info;\r\n\r\n\t\t\t\tinfo = Core.Convert.ObjectToNumber(entry.Value, out ival, out lval, out dval) & Core.Convert.NumberInfo.TypeMask;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tdresult += dval;\r\n\t\t\t\t\tif (!overflown) lresult += lval;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (OverflowException)\r\n\t\t\t\t{\r\n\t\t\t\t\toverflown = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinfo_result |= info;\r\n\t\t\t}\r\n\r\n\t\t\tif ((info_result & Core.Convert.NumberInfo.Double) != 0)\r\n\t\t\t\treturn dresult;\r\n\r\n\t\t\tif ((info_result & Core.Convert.NumberInfo.LongInteger) != 0\r\n\t\t\t || lresult < Int32.MinValue || lresult > Int32.MaxValue)\r\n\t\t\t{\r\n\t\t\t\tif (overflown) return dresult; else return lresult;\r\n\t\t\t}\r\n\r\n\t\t\treturn (int)lresult;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes a product of all values in an array. \r\n\t\t/// Each value is converted to a number in the same way it is done by PHP.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"PhpException\">Thrown if the <paramref name=\"array\"/> argument is null.</exception>\r\n\t\t/// <returns>\r\n\t\t/// An integer, if all items are integers or strings converted to integers and the result is in integer range.\r\n\t\t/// A double, otherwise.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"array_product\")]\r\n\t\tpublic static object Product(PhpArray array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"array\");\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (array.Count == 0)\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\tdouble dval;\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\r\n\t\t\tdouble dresult = 1.0;\r\n\t\t\tlong lresult = 1;\r\n\t\t\tbool overflown = false;\r\n\r\n\t\t\tCore.Convert.NumberInfo info_result = 0;\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tCore.Convert.NumberInfo info;\r\n\r\n\t\t\t\tinfo = Core.Convert.ObjectToNumber(entry.Value, out ival, out lval, out dval) & Core.Convert.NumberInfo.TypeMask;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tdresult *= dval;\r\n\t\t\t\t\tif (!overflown) lresult *= lval;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (OverflowException)\r\n\t\t\t\t{\r\n\t\t\t\t\toverflown = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinfo_result |= info;\r\n\t\t\t}\r\n\r\n\t\t\tif ((info_result & Core.Convert.NumberInfo.Double) != 0)\r\n\t\t\t\treturn dresult;\r\n\r\n\t\t\tif ((info_result & Core.Convert.NumberInfo.LongInteger) != 0\r\n\t\t\t || lresult < Int32.MinValue || lresult > Int32.MaxValue)\r\n\t\t\t{\r\n\t\t\t\tif (overflown) return dresult; else return lresult;\r\n\t\t\t}\r\n\r\n\t\t\treturn (int)lresult;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"array_reduce\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object Reduce(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback function)\r\n\t\t{\r\n\t\t\treturn Reduce(caller, array, function, null);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"array_reduce\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object Reduce(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpArray array, PhpCallback function, [PhpDeepCopy] object initialValue)\r\n\t\t{\r\n\t\t\tif (array == null) { PhpException.ReferenceNull(\"array\"); return null; }\r\n\t\t\tif (!PhpArgument.CheckCallback(function, caller, \"function\", 0, false)) return null;\r\n\t\t\tif (array.Count == 0) return initialValue;\r\n\r\n\t\t\tobject[] args = new object[] { initialValue, null };\r\n\t\t\tPhpReference holder = new PhpReference();\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tobject item = entry.Value;\r\n\t\t\t\tPhpReference ref_item = item as PhpReference;\r\n\r\n\t\t\t\t// array item is a reference:\r\n\t\t\t\tif (ref_item != null)\r\n\t\t\t\t{\r\n\t\t\t\t\targs[1] = item;\r\n\t\t\t\t\targs[0] = function.Invoke(args);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// array item is not a reference:\r\n\r\n\t\t\t\t\tholder.Value = item;\r\n\t\t\t\t\targs[1] = holder;\r\n\t\t\t\t\targs[0] = function.Invoke(args);\r\n\r\n\t\t\t\t\t// updates an item if it has been changed:\r\n\t\t\t\t\tif (item != holder.Value)\r\n\t\t\t\t\t\tarray[entry.Key] = holder.Value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// dereferences the last returned value:\r\n\t\t\treturn PhpVariable.Dereference(args[0]);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_walk, array_walk_recursive\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies a user function or method on each element of a specified array or dictionary.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B>.</returns>\r\n        /// <remarks>See <see cref=\"Walk(PHP.Core.Reflection.DTypeDesc,PhpHashtable,PhpCallback,object)\"/> for details.</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"function\"/> or <paramref name=\"array\"/> are <B>null</B> references.</exception>\r\n\t\t[ImplementsFunction(\"array_walk\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool Walk(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback function)\r\n\t\t{\r\n\t\t\treturn Walk(caller, array, function, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies a user function or method on each element (value) of a specified dictionary.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"array\">The array (or generic dictionary) to walk through.</param>\r\n\t\t/// <param name=\"callback\">\r\n\t\t/// The callback called for each element of <paramref name=\"array\"/>.\r\n\t\t/// The callback is assumed to have two or three parameters:\r\n\t\t/// <list type=\"number\">\r\n\t\t///   <item>\r\n\t\t///     <term>\r\n\t\t///       A value of dictionary entry. Can be specified with &amp; modifier which propagates any changes\r\n\t\t///       make to the argument back to the entry. The dictionary can be changed in this way.\r\n\t\t///     </term>\r\n\t\t///   </item>\r\n\t\t///   <item>A key of dictionary entry.</item>\r\n\t\t///   <item>\r\n\t\t///     Value of <paramref name=\"data\"/> parameter if it is not a <B>null</B> reference.\r\n\t\t///     Otherwise, the callback is assumed to have two parameters only.\r\n\t\t///   </item>\r\n\t\t/// </list>\r\n\t\t/// </param>\r\n\t\t/// <param name=\"data\">An additional parameter passed to <paramref name=\"callback\"/> as its third parameter.</param>\r\n\t\t/// <returns><B>true</B>.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"callback\"/> or <paramref name=\"array\"/> are <B>null</B> references.</exception>\r\n\t\t[ImplementsFunction(\"array_walk\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool Walk(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback, object data)\r\n\t\t{\r\n\t\t\tobject[] args = PrepareWalk(array, callback, data);\r\n\t\t\tif (args == null) return false;\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\tVisitEntryOnWalk(caller, entry, array, callback, args);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies a user function or method on each element of a specified array recursively.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B>.</returns>\r\n        /// <remarks>See <see cref=\"Walk(PHP.Core.Reflection.DTypeDesc,PhpHashtable,PhpCallback,object)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"callback\"/> or <paramref name=\"array\"/> are <B>null</B> references.</exception>\r\n        [ImplementsFunction(\"array_walk_recursive\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool WalkRecursive(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback)\r\n\t\t{\r\n\t\t\treturn WalkRecursive(caller, array, callback, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies a user function or method on each element (value) of a specified dictionary recursively.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"array\">The array to walk through.</param>\r\n\t\t/// <param name=\"callback\">The callback called for each element of <paramref name=\"array\"/>.</param>\r\n\t\t/// <param name=\"data\">An additional parameter passed to <paramref name=\"callback\"/> as its third parameter.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"callback\"/> or <paramref name=\"array\"/> are <B>null</B> references.</exception>\r\n\t\t/// <remarks><seealso cref=\"Walk\"/>.</remarks>\r\n\t\t[ImplementsFunction(\"array_walk_recursive\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool WalkRecursive(PHP.Core.Reflection.DTypeDesc caller, [PhpRw] PhpHashtable array, PhpCallback callback, object data)\r\n\t\t{\r\n\t\t\tobject[] args = PrepareWalk(array, callback, data);\r\n\t\t\tif (args == null) return false;\r\n\r\n\t\t\tusing (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(true,false))\r\n\t\t\t{\r\n\t\t\t\twhile (iterator.MoveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\t// visits the item unless it is an array or a reference to an array:\r\n\t\t\t\t\tPhpReference ref_value = iterator.Current.Value as PhpReference;\r\n\t\t\t\t\tif (!(iterator.Current.Value is PhpHashtable || (ref_value != null && ref_value.Value is PhpHashtable)))\r\n\t\t\t\t\t\tVisitEntryOnWalk(caller, iterator.Current, iterator.CurrentTable, callback, args);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prepares a walk for <see cref=\"Walk\"/> and <see cref=\"WalkRecursive\"/> methods.\r\n\t\t/// </summary>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"callback\"/> or <paramref name=\"array\"/> are <B>null</B> references.</exception>\r\n\t\tprivate static object[] PrepareWalk(IDictionary array, PhpCallback callback, object data)\r\n\t\t{\r\n\t\t\tif (callback == null) { PhpException.ArgumentNull(\"callback\"); return null; }\r\n\t\t\tif (array == null) { PhpException.ArgumentNull(\"array\"); return null; }\r\n\r\n\t\t\t// prepares an array of callback's arguments (no deep copying needed because it is done so in callback):\r\n\t\t\tif (data != null)\r\n\t\t\t\treturn new object[3] { new PhpReference(), null, data };\r\n\t\t\telse\r\n\t\t\t\treturn new object[2] { new PhpReference(), null };\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Visits an entyr of array which <see cref=\"Walk\"/> or <see cref=\"WalkRecursive\"/> is walking through.\r\n\t\t/// </summary>\r\n\t\tprivate static void VisitEntryOnWalk(PHP.Core.Reflection.DTypeDesc caller, KeyValuePair<IntStringKey, object> entry, IDictionary<IntStringKey, object> array,\r\n\t\t\tPhpCallback callback, object[] args)\r\n\t\t{\r\n\t\t\tPhpReference ref_item = entry.Value as PhpReference;\r\n\r\n\t\t\t// fills arguments for the callback:\r\n\t\t\t((PhpReference)args[0]).Value = (ref_item != null) ? ref_item.Value : entry.Value;\r\n\t\t\targs[1] = entry.Key.Object;\r\n\r\n\t\t\t// invoke callback:\r\n            Core.Convert.ObjectToBoolean(callback.Invoke(caller, args));\r\n\r\n\t\t\t// loads a new value from a reference:\r\n\t\t\tif (ref_item != null)\r\n\t\t\t{\r\n\t\t\t\tref_item.Value = ((PhpReference)args[0]).Value;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tarray[entry.Key] = ((PhpReference)args[0]).Value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_filter\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retuns the specified array.\r\n        /// see http://php.net/manual/en/function.array-filter.php\r\n\t\t/// </summary>\r\n        /// <remarks>The caller argument is here just because of the second Filter() method. Phalanger shares the function properties over the overloads.</remarks>\r\n        [ImplementsFunction(\"array_filter\", FunctionImplOptions.NeedsClassContext)]\r\n        [return: PhpDeepCopy]\r\n        public static PhpArray Filter(PHP.Core.Reflection.DTypeDesc _, PhpArray array)\r\n        {\r\n            var _result = new PhpArray();\r\n\r\n            using (var enumerator = array.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                    if (Core.Convert.ObjectToBoolean(enumerator.CurrentValue))\r\n                        _result.Add(enumerator.CurrentKey, enumerator.CurrentValue);\r\n\r\n            return _result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Filters an array using a specified callback.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"array\">The array to be filtered.</param>\r\n\t\t/// <param name=\"callback\">\r\n\t\t/// The callback called on each value in the <paramref name=\"array\"/>. \r\n\t\t/// If the callback returns value convertible to <B>true</B> the value is copied to the resulting array.\r\n\t\t/// Otherwise, it is ignored.\r\n\t\t/// </param>\r\n\t\t/// <returns>An array of unfiltered items.</returns>\r\n\t\t[ImplementsFunction(\"array_filter\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray Filter(PHP.Core.Reflection.DTypeDesc caller, PhpArray array, PhpCallback callback)\r\n\t\t{\r\n\t\t\tif (callback == null) { PhpException.ArgumentNull(\"callback\"); return null; }\r\n\t\t\tif (array == null) { PhpException.ArgumentNull(\"array\"); return null; }\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tobject[] args = new object[1];\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t{\r\n\t\t\t\t// no deep copying needed because it is done so in callback:\r\n\t\t\t\targs[0] = entry.Value;\r\n\r\n\t\t\t\t// adds entry to the resulting array if callback returns true:\r\n                if (Core.Convert.ObjectToBoolean(callback.Invoke(caller, args)))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(entry.Key, entry.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// values should be inplace deeply copied:\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region array_map\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default callback for <see cref=\"Map\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">Unused.</param>\r\n\t\t/// <param name=\"stack\">A PHP stack.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing items on the stack (passed as arguments).</returns>\r\n\t\tprivate static object MapIdentity(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(stack.ArgCount, 0);\r\n\r\n\t\t\tfor (int i = 1; i <= stack.ArgCount; i++)\r\n\t\t\t{\r\n\t\t\t\tresult.Add(PhpVariable.Copy(stack.PeekValueUnchecked(i), CopyReason.PassedByCopy));\r\n\t\t\t}\r\n\t\t\tstack.RemoveFrame();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies a callback function on specified tuples one by one storing its results to an array.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to resolve given callback.</param>\r\n\t\t/// <param name=\"map\">\r\n\t\t/// A callback to be called on tuples. The number of arguments should be the same as\r\n\t\t/// the number of arrays specified by <pramref name=\"arrays\"/>.\r\n\t\t/// Arguments passed by reference modifies elements of <pramref name=\"arrays\"/>.\r\n\t\t/// A <B>null</B> means default callback which makes integer indexed arrays from the tuples is used. \r\n\t\t/// </param>\r\n\t\t/// <param name=\"arrays\">Arrays where to load tuples from. </param>\r\n\t\t/// <returns>An array of return values of the callback\r\n\t\t/// keyed by keys of the <paramref name=\"arrays\"/> if it\r\n\t\t/// is a single array or by integer keys starting from 0.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// In the <I>i</I>-th call the <I>j</I>-th parameter of the callback will be \r\n\t\t/// the <I>i</I>-th value of the <I>j</I>-the array or a <B>null</B> if that array \r\n\t\t/// has less then <I>i</I> entries.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// If the callback assigns a value to a parameter passed by reference in the <I>i</I>-the call \r\n\t\t/// and the respective array contains at least <I>i</I> elements the assigned value is propagated \r\n\t\t/// to the array.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"array_map\", FunctionImplOptions.NeedsClassContext)]\r\n        public static PhpArray Map(PHP.Core.Reflection.DTypeDesc caller, PhpCallback map, [PhpRw] params PhpArray[] arrays)\r\n\t\t{\r\n\t\t\tif (!PhpArgument.CheckCallback(map, caller, \"map\", 0, true)) return null;\r\n\t\t\tif (arrays == null || arrays.Length == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"arrays\", LibResources.GetString(\"arg:null_or_emtpy\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// if callback has not been specified uses the default one:\r\n\t\t\tif (map == null)\r\n\t\t\t\tmap = new PhpCallback(new RoutineDelegate(MapIdentity), ScriptContext.CurrentContext);\r\n\r\n\t\t\tint count = arrays.Length;\r\n\t\t\tbool preserve_keys = count == 1;\r\n\t\t\tPhpReference[] args = new PhpReference[count];\r\n\t\t\tIEnumerator<KeyValuePair<IntStringKey, object>>[] iterators = new IEnumerator<KeyValuePair<IntStringKey, object>>[count];\r\n\t\t\tPhpArray result;\r\n\r\n\t\t\t// initializes iterators and args array, computes length of the longest array:\r\n\t\t\tint max_count = 0;\r\n\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t{\r\n                var array = arrays[i];\r\n\r\n                if (array == null)\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_array\", i + 2));// +2 (first arg is callback) \r\n                    return null;\r\n                }\r\n\r\n\t\t\t\targs[i] = new PhpReference();\r\n                iterators[i] = array.GetEnumerator();\r\n                if (array.Count > max_count) max_count = array.Count;\r\n\t\t\t}\r\n\r\n\t\t\t// keys are preserved in a case of a single array and re-indexed otherwise:\r\n\t\t\tif (preserve_keys)\r\n\t\t\t\tresult = new PhpArray(arrays[0].IntegerCount, arrays[0].StringCount);\r\n\t\t\telse\r\n\t\t\t\tresult = new PhpArray(max_count, 0);\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\t// fills args[] with items from arrays:\r\n\t\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iterators[i] != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// an element is available:\r\n\t\t\t\t\t\tif (iterators[i].MoveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// note: deep copy is not necessary since a function copies its arguments if needed:\r\n                            object value = iterators[i].Current.Value;\r\n                            PhpReference valueref = (value != null) ? value as PhpReference : null;\r\n                            args[i].Value = (valueref != null) ? valueref.value : value;\r\n                            //args[i].Value = iterators[i].Current.Value; // TODO: throws if the current Value is PhpReference\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// the i-th iterator has stopped:\r\n\t\t\t\t\t\t\tcount--;\r\n\t\t\t\t\t\t\titerators[i] = null;\r\n\t\t\t\t\t\t\targs[i].Value = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (count == 0) break;\r\n\r\n\t\t\t\t// invokes callback:\r\n\t\t\t\tobject return_value = map.Invoke(args);\r\n\r\n\t\t\t\t// return value is not deeply copied:\r\n\t\t\t\tif (preserve_keys)\r\n\t\t\t\t\tresult.Add(iterators[0].Current.Key, return_value);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult.Add(return_value);\r\n\r\n\t\t\t\t// loads new values (callback may modify some by ref arguments):\r\n\t\t\t\tfor (int i = 0; i < arrays.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iterators[i] != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobject item = iterators[i].Current.Value;\r\n\t\t\t\t\t\tPhpReference ref_item = item as PhpReference;\r\n\t\t\t\t\t\tif (ref_item != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tref_item.Value = args[i].Value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrays[i][iterators[i].Current.Key] = args[i].Value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region array_replace, array_replace_recursive\r\n\r\n        /// <summary>\r\n        /// array_replace() replaces the values of the first array with the same values from\r\n        /// all the following arrays. If a key from the first array exists in the second array,\r\n        /// its value will be replaced by the value from the second array. If the key exists in\r\n        /// the second array, and not the first, it will be created in the first array. If a key\r\n        /// only exists in the first array, it will be left as is. If several arrays are passed\r\n        /// for replacement, they will be processed in order, the later arrays overwriting the\r\n        /// previous values.\r\n        ///  \r\n        /// array_replace() is not recursive : it will replace values in the first array by\r\n        /// whatever type is in the second array. \r\n        /// </summary>\r\n        /// <param name=\"array\">The array in which elements are replaced. </param>\r\n        /// <param name=\"arrays\">The arrays from which elements will be extracted. </param>\r\n        /// <returns>Deep copy of array with replacements. Returns an array, or NULL if an error occurs. </returns>\r\n        [ImplementsFunction(\"array_replace\")]\r\n        //[return: PhpDeepCopy]\r\n        public static PhpArray ArrayReplace([PhpRw] PhpArray array, params PhpArray[] arrays)\r\n        {\r\n            return ArrayReplaceImpl(array, arrays, false);\r\n        }\r\n\r\n        /// <summary>\r\n        ///  array_replace_recursive() replaces the values of the first array with the same values\r\n        ///  from all the following arrays. If a key from the first array exists in the second array,\r\n        ///  its value will be replaced by the value from the second array. If the key exists in the\r\n        ///  second array, and not the first, it will be created in the first array. If a key only\r\n        ///  exists in the first array, it will be left as is. If several arrays are passed for\r\n        ///  replacement, they will be processed in order, the later array overwriting the previous\r\n        ///  values.\r\n        ///  \r\n        /// array_replace_recursive() is recursive : it will recurse into arrays and apply the same\r\n        /// process to the inner value.\r\n        /// \r\n        /// When the value in array is scalar, it will be replaced by the value in array1, may it be\r\n        /// scalar or array. When the value in array and array1 are both arrays, array_replace_recursive()\r\n        /// will replace their respective value recursively. \r\n        /// </summary>\r\n        /// <param name=\"array\">The array in which elements are replaced. </param>\r\n        /// <param name=\"arrays\">The arrays from which elements will be extracted.</param>\r\n        /// <returns>Deep copy of array with replacements. Returns an array, or NULL if an error occurs. </returns>\r\n        [ImplementsFunction(\"array_replace_recursive\")]\r\n        //[return: PhpDeepCopy]\r\n        public static PhpArray ArrayReplaceRecursive([PhpRw] PhpArray array, params PhpArray[] arrays)\r\n        {\r\n            return ArrayReplaceImpl(array, arrays, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"array\"></param>\r\n        /// <param name=\"arrays\"></param>\r\n        /// <param name=\"recursive\"></param>\r\n        /// <returns></returns>\r\n        /// <remarks>Performs deep copy of array, return array with replacements.</remarks>\r\n        internal static PhpArray ArrayReplaceImpl(PhpArray array, PhpArray[] arrays, bool recursive)\r\n        {\r\n            PhpArray result = (PhpArray)array.DeepCopy();\r\n\r\n            if (arrays != null)\r\n                foreach (PhpArray array1 in arrays)\r\n                    ArrayReplaceImpl(result, array1, recursive);\r\n            \r\n            //// if called by PHP language then all items in the result should be in place deeply copied:\r\n            //result.InplaceCopyOnReturn = true;\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs replacements on deeply-copied array. Performs deep copies of replace values.\r\n        /// </summary>\r\n        /// <param name=\"array\"></param>\r\n        /// <param name=\"replaceWith\"></param>\r\n        /// <param name=\"recursive\"></param>\r\n        internal static void ArrayReplaceImpl(PhpArray array, PhpArray replaceWith, bool recursive)\r\n        {\r\n            if (array != null && replaceWith != null)\r\n                foreach (var x in replaceWith)\r\n                {\r\n                    PhpArray xArrayValue, resultArrayValue;\r\n                    if (recursive && (xArrayValue = x.Value as PhpArray) != null && (resultArrayValue = array[x.Key] as PhpArray) != null)\r\n                    {\r\n                        ArrayReplaceImpl(resultArrayValue, xArrayValue, true);\r\n                    }\r\n                    else\r\n                    {\r\n                        array[x.Key] = PhpVariable.DeepCopy(x.Value);\r\n                    }\r\n                }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Pavel Novak, Jan Benda.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing PHP.Core;\r\nusing System.Security;\r\n\r\n#if !SILVERLIGHT\r\n[assembly: AssemblyTitle(\"Phalanger Base Class Library\")]\r\n[assembly: AssemblyDescription(\"Phalanger Base Class Library\")]\r\n//[assembly: AllowPartiallyTrustedCallers]\r\n\r\n//#if DEBUG\r\n[assembly: PhpLibrary(\r\n    typeof(PHP.Library.LibraryDescriptor),\r\n    \"Base Library\",\r\n    new string[]{\"standard\",\"Core\",\"session\",\"ctype\",\"tokenizer\",\"date\",\"pcre\",\"ereg\",\"json\",\"hash\",\"SPL\",\"filter\"})]\r\n//#else\r\n//[assembly: PhpLibrary(typeof(PHP.Library.LibraryDescriptor), \"Base Library\", false, true)]\r\n//#endif\r\n\r\n#else\r\n[assembly: AssemblyTitle(\"Phalanger Base Class Library (Silverlight)\")]\r\n[assembly: AssemblyDescription(\"Phalanger Base Class Library (Silverlight)\")]\r\n[assembly: AssemblyVersion(\"4.0.0.0\")]\r\n[assembly: PhpLibrary(typeof(PHP.Library.LibraryDescriptor), \"Base Library\")]\r\n#endif\r\n\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyDelaySign(false)]\r\n\r\n[assembly: InternalsVisibleTo(\"PhpNet.ClassLibrary.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cdeef915479b86e2633bbd8796635d6114d25cfab4d836c7c57b07af1464b79cd0d9a8c52abe8df4806b83be7372d48a5aa90f32a25f484c5a7c667ab53a542e5261fc9978e0fdf4da339da691733bdf140bd66525dc2714e9cc85eb32e35c80170a188317990622cc3bbf019fb4c57db3414bdc1fc4072d18db33c1b0cc31dd\")]"
  },
  {
    "path": "Source/ClassLibrary/AssemblyResources.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Resources;\r\nusing System.Reflection;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Manages resources of the Class Library.\r\n\t/// </summary>\r\n\tpublic class LibResources\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Resource manager of strings.\r\n\t\t/// </summary>\r\n\t\tstatic ResourceManager strings;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes the resource manager.\r\n\t\t/// </summary>\r\n\t\tstatic LibResources()\r\n\t\t{\r\n            strings = PHP.Library.Strings.ResourceManager;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <returns>The string.</returns>\r\n\t\tpublic static string GetString(string id)\r\n\t\t{\r\n\t\t\treturn strings.GetString(id);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"args\">An <see cref=\"System.Object\"/> array containing zero or more objects to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, params object[] args)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), args);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg1\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg2\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg1, object arg2)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg1, arg2);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg1\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg2\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg3\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg1, object arg2, object arg3)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg1, arg2, arg3);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nnamespace PHP.Dynamic\r\n{\r\n\t// only for documentation purposes\r\n\tinternal class Dummy { }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/BitConverter.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Binary data converter (implements pack/unpack PHP functions).\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <list>\r\n\t///   <term>a</term><description>0x00-padded string</description>\r\n\t///   <term>A</term><description>0x20-padded string</description>\r\n\t///   <term>h</term><description>Hex string, low nibble first</description>\r\n\t///   <term>H</term><description>Hex string, high nibble first</description>\r\n\t///   <term>c</term><description>signed char</description>\r\n\t///   <term>C</term><description>unsigned char</description>\r\n\t///   <term>s</term><description>signed short - 16 bit, machine byte order</description>\r\n\t///   <term>S</term><description>unsigned short - 16 bit, machine byte order</description>\r\n\t///   <term>n</term><description>unsigned short - 16 bit, big endian byte order</description>\r\n\t///   <term>v</term><description>unsigned short - 16 bit, little endian byte order</description>\r\n\t///   <term>i</term><description>signed integer - 32 bit and byte order (PHP: machine dependent size)</description>\r\n\t///   <term>I</term><description>unsigned integer - 32 bit and byte order (PHP: machine dependent size)</description>\r\n\t///   <term>l</term><description>signed long - 32 bit, machine byte order</description>\r\n\t///   <term>L</term><description>unsigned long - 32 bit, machine byte order</description>\r\n\t///   <term>N</term><description>unsigned long - 32 bit, big endian byte order</description>\r\n\t///   <term>V</term><description>unsigned long - 32 bit, little endian byte order</description>\r\n\t///   <term>f</term><description>float - machine dependent size and representation</description>\r\n\t///   <term>d</term><description>double - machine dependent size and representation</description>\r\n\t///   <term>x</term><description>0x00 byte</description>\r\n\t///   <term>X</term><description>Back up one byte</description>\r\n\t///   <term>@</term><description>0x00-fill to absolute position</description>\r\n\t/// </list>\r\n\t/// </remarks>\r\n\tpublic static class PhpBitConverter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Integer representing '*' repeater.\r\n\t\t/// </summary>\r\n\t\tprivate const int InfiniteRepeater = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Formats given integers to a string of bytes according to specified format string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"format\">The string defining the format of the result. See PHP manual for details.</param>\r\n\t\t/// <param name=\"args\">Integers to be formatted to binary data according to <paramref name=\"format\"/>.</param>\r\n\t\t/// <returns>Binary data.</returns>\r\n\t\t[ImplementsFunction(\"pack\")]\r\n\t\t[PureFunction]\r\n        public static PhpBytes Pack(string format, params object[] args)\r\n\t\t{\r\n\t\t\tif (format == null) return PhpBytes.Empty;\r\n\r\n\t\t\t// the number of specifiers is at most length of the format string and usualy close to it:\r\n\t\t\tchar[] specifiers = new char[format.Length];\r\n\t\t\tint[] repeaters = new int[format.Length];\r\n\r\n\t\t\t// parses specifiers and repeaters into the arrays, returns the number of used slots:\r\n\t\t\tint count = ParseFormat(format, args, specifiers, repeaters);\r\n\t\t\tif (count == 0) return PhpBytes.Empty;\r\n\r\n\t\t\t// determines the result length (length) and the working buffer size (size):\r\n\t\t\tint length, size;\r\n\t\t\tGetPackedDataSize(specifiers, repeaters, count, out length, out size);\r\n\r\n\t\t\t// packs data using buffer:\r\n\t\t\tbyte[] buffer = new byte[size];\r\n\t\t\tPackInternal(buffer, args, specifiers, repeaters, count);\r\n\r\n\t\t\t// gets the result as an initial part of the buffer:\r\n\t\t\tbyte[] result = new byte[length];\r\n\t\t\tBuffer.BlockCopy(buffer, 0, result, 0, length);\r\n\r\n\t\t\treturn new PhpBytes(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses pack format. Stores specifiers and repeaters into the respective arrays.\r\n\t\t/// Repeaters are ensured to be finite and non-negative (infinite repeaters are converted to finite).\r\n\t\t/// Some arguments are also converted to another form (e.g. to string) because we will need that form later.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns the number of parsed specifiers or 0 on error.</returns>\r\n\t\tprivate static int ParseFormat(string format, object[] args, char[] specifiers, int[] repeaters)\r\n\t\t{\r\n\t\t\tEncoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n\r\n\t\t\tint i = 0;       // current position in format\r\n\t\t\tint a = 0;       // current argument index\r\n\t\t\tint result = 0;  // number of parsed specifiers\r\n\r\n\t\t\twhile (i < format.Length)\r\n\t\t\t{\r\n\t\t\t\tchar specifier = format[i++];\r\n\t\t\t\tint repeater = ParseRepeater(format, ref i);\r\n\r\n\t\t\t\tswitch (specifier)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 'x': // NUL byte \r\n\t\t\t\t\tcase '@': // NUL-fill to absolute position \r\n\t\t\t\t\tcase 'X': // Back up one byte \r\n\r\n\t\t\t\t\t\t// consumes no arguments => repeater cannot be '*'\r\n\t\t\t\t\t\tif (repeater == InfiniteRepeater)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"asterisk_ignored\", specifier));\r\n\t\t\t\t\t\t\trepeater = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'a': // NUL-padded string\r\n\t\t\t\t\tcase 'A': // SPACE-padded string \r\n\t\t\t\t\tcase 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits:\r\n\t\t\t\t\tcase 'H':\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// consumes one argument:\r\n\t\t\t\t\t\t\tif (a == args.Length)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"not_enought_arguments\", specifier));\r\n\t\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// converts the current argument to a string and stores it back:\r\n\t\t\t\t\t\t\tstring s = Core.Convert.ObjectToString(args[a]);\r\n\t\t\t\t\t\t\targs[a] = s;\r\n\t\t\t\t\t\t\ta++;\r\n\r\n\t\t\t\t\t\t\tif (specifier == 'h' || specifier == 'H')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (repeater > s.Length)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"not_enought_characters\", specifier));\r\n\t\t\t\t\t\t\t\t\trepeater = s.Length;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (encoding.GetByteCount(s) != s.Length)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"multibyte_chars_unsupported\", specifier));\r\n\t\t\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// adjusts infinite repeater to the string length:\r\n\t\t\t\t\t\t\tif (repeater == InfiniteRepeater)\r\n\t\t\t\t\t\t\t\trepeater = s.Length;\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 'c': // signed char\r\n\t\t\t\t\tcase 'C': // unsigned char \r\n\t\t\t\t\tcase 's': // signed short (always 16 bit, machine byte order) \r\n\t\t\t\t\tcase 'S': // unsigned short (always 16 bit, machine byte order) \r\n\t\t\t\t\tcase 'n': // unsigned short (always 16 bit, big endian byte order) \r\n\t\t\t\t\tcase 'v': // unsigned short (always 16 bit, little endian byte order) \r\n\t\t\t\t\tcase 'i': // signed integer (machine dependent size and byte order) \r\n\t\t\t\t\tcase 'I': // unsigned integer (machine dependent size and byte order) \r\n\t\t\t\t\tcase 'l': // signed long (always 32 bit, machine byte order) \r\n\t\t\t\t\tcase 'L': // unsigned long (always 32 bit, machine byte order) \r\n\t\t\t\t\tcase 'N': // unsigned long (always 32 bit, big endian byte order) \r\n\t\t\t\t\tcase 'V': // unsigned long (always 32 bit, little endian byte order) \r\n\t\t\t\t\tcase 'f': // float (machine dependent size and representation) \r\n\t\t\t\t\tcase 'd': // double (machine dependent size and representation) \r\n\r\n\t\t\t\t\t\tif (repeater == InfiniteRepeater)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// infinite repeater is converted to the number of remaining arguments (can be zero):\r\n\t\t\t\t\t\t\trepeater = args.Length - a;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (repeater > args.Length - a)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"not_enought_arguments\", specifier));\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// consume arguments:\r\n\t\t\t\t\t\ta += repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_format_code\", specifier));\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tspecifiers[result] = specifier;\r\n\t\t\t\trepeaters[result] = repeater;\r\n\t\t\t\tresult++;\r\n\t\t\t}\r\n\r\n\t\t\t// reports unused arguments:\r\n\t\t\tif (a < args.Length)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unused_arguments\", args.Length - a));\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses repeater.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"format\">The format string.</param>\r\n\t\t/// <param name=\"i\">The current position in the format string.</param>\r\n\t\t/// <returns>\r\n\t\t/// The value of repeater. Either non-negative integer or <see cref=\"InfiniteRepeater\"/> (asterisk).\r\n\t\t/// </returns>\r\n\t\tprivate static int ParseRepeater(string format, ref int i)\r\n\t\t{\r\n\t\t\t// no repeater:\r\n\t\t\tif (i == format.Length) return 1;\r\n\r\n\t\t\t// infinite repeater:\r\n\t\t\tif (format[i] == '*')\r\n\t\t\t{\r\n\t\t\t\ti++;\r\n\t\t\t\treturn InfiniteRepeater;\r\n\t\t\t}\r\n\r\n\t\t\tint j = i;\r\n\t\t\tlong result = Core.Convert.SubstringToLongInteger(format, format.Length - j, ref j);\r\n\r\n            // invalid repeater or no repeater:\r\n            if (result < 0 || i == j || unchecked((int)result) != result)   // not an int or too big int\r\n\t\t\t\treturn 1;\r\n\r\n\t\t\t// advance index:\r\n\t\t\ti = j;\r\n\t\t\treturn (int)result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Computes the total size of binary data according to given specifiers and repeaters.\r\n\t\t/// Only <c>count</c> of them are valid.\r\n\t\t/// </summary>\r\n\t\tprivate static void GetPackedDataSize(char[] specifiers, int[] repeaters, int count,\r\n\t\t  out int resultLength, out int maxLength)\r\n\t\t{\r\n\t\t\tlong result = 0;\r\n\t\t\tmaxLength = 0;\r\n\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tlong repeater = repeaters[i];\r\n\t\t\t\tchar specifier = specifiers[i];\r\n\r\n\t\t\t\tswitch (specifier)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 'x':\r\n\t\t\t\t\t\t// NUL byte repeated for \"repeater\" count:\r\n\t\t\t\t\t\tresult += repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase '@':\r\n\t\t\t\t\t\t// NUL-fill to absolute position;\r\n\t\t\t\t\t\t// if it is less then the current position the result is shortened\r\n\t\t\t\t\t\tresult = repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'X':\r\n\t\t\t\t\t\t// shortens the result by \"repeater\" bytes (underflow has to be checked):\r\n\t\t\t\t\t\tif (result < repeater)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"outside_string\", specifier));\r\n\t\t\t\t\t\t\tresult = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tresult -= repeater;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'a': // NUL-padded string\r\n\t\t\t\t\tcase 'A': // SPACE-padded string \r\n\t\t\t\t\tcase 'c': // signed char\r\n\t\t\t\t\tcase 'C': // unsigned char \r\n\t\t\t\t\t\tresult += repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 's': // signed short (always 16 bit, machine byte order) \r\n\t\t\t\t\tcase 'S': // unsigned short (always 16 bit, machine byte order) \r\n\t\t\t\t\tcase 'n': // unsigned short (always 16 bit, big endian byte order) \r\n\t\t\t\t\tcase 'v': // unsigned short (always 16 bit, little endian byte order) \r\n\t\t\t\t\t\tresult += repeater * 2;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'i': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\tcase 'I': // unsigned integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\tcase 'l': // signed long (always 32 bit, machine byte order) \r\n\t\t\t\t\tcase 'L': // unsigned long (always 32 bit, machine byte order) \r\n\t\t\t\t\tcase 'N': // unsigned long (always 32 bit, big endian byte order) \r\n\t\t\t\t\tcase 'V': // unsigned long (always 32 bit, little endian byte order) \r\n\t\t\t\t\tcase 'f': // float (machine dependent size and representation) \r\n\t\t\t\t\t\tresult += repeater * 4;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'd': // double (machine dependent size and representation) \r\n\t\t\t\t\t\tresult += repeater * 8;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from it:\r\n\t\t\t\t\tcase 'H':\r\n\t\t\t\t\t\tresult += (repeater + 1) / 2;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Invalid repeater\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// checks for overflow:\r\n\t\t\t\tif (result > Int32.MaxValue)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"binary_data_overflown\", specifier));\r\n\t\t\t\t\tresult = Int32.MaxValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// expands the max length:\r\n\t\t\t\tif (result > maxLength)\r\n\t\t\t\t\tmaxLength = unchecked((int)result);\r\n\t\t\t}\r\n\r\n\t\t\tresultLength = unchecked((int)result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Packs arguments into the buffer according to given specifiers and repeaters.\r\n\t\t/// Count specifies the number of valid specifiers/repeaters.\r\n\t\t/// </summary>\r\n\t\tprivate static void PackInternal(byte[] buffer, object[] args, char[] specifiers, int[] repeaters, int count)\r\n\t\t{\r\n\t\t\tEncoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n\t\t\tbool le = BitConverter.IsLittleEndian;\r\n\t\t\tint a = 0;            // index of the current argument\r\n\t\t\tint pos = 0;          // the position in the buffer\r\n\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tchar specifier = specifiers[i];\r\n\t\t\t\tint repeater = repeaters[i];\r\n\r\n\t\t\t\tswitch (specifier)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 'x':\r\n\t\t\t\t\t\t// NUL byte repeated for \"repeater\" count:\r\n\t\t\t\t\t\tArrayUtils.Fill(buffer, 0, pos, repeater);\r\n\t\t\t\t\t\tpos += repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase '@':\r\n\t\t\t\t\t\t// NUL-fill to absolute position;\r\n\t\t\t\t\t\t// if it is less then the current position the result is shortened\r\n\t\t\t\t\t\tif (repeater > pos)\r\n\t\t\t\t\t\t\tArrayUtils.Fill(buffer, 0, pos, repeater - pos);\r\n\t\t\t\t\t\tpos = repeater;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'X':\r\n\t\t\t\t\t\tpos = Math.Max(0, pos - repeater);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'a': // NUL-padded string\r\n\t\t\t\t\tcase 'A': // SPACE-padded string \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// argument has already been converted to string:\r\n\t\t\t\t\t\t\tstring s = (string)args[a++];\r\n\r\n\t\t\t\t\t\t\tint length = Math.Min(s.Length, repeater);\r\n\t\t\t\t\t\t\tint byte_count = encoding.GetBytes(s, 0, length, buffer, pos);\r\n\t\t\t\t\t\t\tDebug.Assert(byte_count == length, \"Multibyte characters not supported\");\r\n\r\n\t\t\t\t\t\t\t// padding:\r\n\t\t\t\t\t\t\tif (repeater > length)\r\n\t\t\t\t\t\t\t\tArrayUtils.Fill(buffer, (byte)((specifier == 'a') ? 0x00 : 0x20), pos + length, repeater - length);\r\n\r\n\t\t\t\t\t\t\tpos += repeater;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string:\r\n\t\t\t\t\tcase 'H':\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// argument has already been converted to string:\r\n\t\t\t\t\t\t\tstring s = (string)args[a++];\r\n\r\n\t\t\t\t\t\t\tint nibble_shift = (specifier == 'h') ? 0 : 4;\r\n\r\n\t\t\t\t\t\t\tfor (int j = 0; j < repeater; j++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint digit = Core.Parsers.Convert.AlphaNumericToDigit(s[j]);\r\n\t\t\t\t\t\t\t\tif (digit > 15)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"illegal_hex_digit\", specifier, s[j]));\r\n\t\t\t\t\t\t\t\t\tdigit = 0;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (j % 2 == 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbuffer[pos] = unchecked((byte)(digit << nibble_shift));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbuffer[pos] |= unchecked((byte)(digit << (4 - nibble_shift)));\r\n\t\t\t\t\t\t\t\t\tpos++;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// odd number of hex digits (append '0' digit):\r\n\t\t\t\t\t\t\tif (repeater % 2 == 1) pos++;\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 'c': // signed char\r\n\t\t\t\t\tcase 'C': // unsigned char \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tbuffer[pos++] = unchecked((byte)Core.Convert.ObjectToInteger(args[a++]));\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 's': // signed short (always 16 bit, machine byte order) \r\n\t\t\t\t\tcase 'S': // unsigned short (always 16 bit, machine byte order) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(unchecked((ushort)Core.Convert.ObjectToInteger(args[a++]))), le, buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'n': // unsigned short (always 16 bit, big endian byte order) \r\n\t\t\t\t\tcase 'v': // unsigned short (always 16 bit, little endian byte order) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(unchecked((ushort)Core.Convert.ObjectToInteger(args[a++]))), specifier == 'v', buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'i': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\tcase 'I': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\tcase 'l': // signed long (always 32 bit, machine byte order) \r\n\t\t\t\t\tcase 'L': // unsigned long (always 32 bit, machine byte order) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(Core.Convert.ObjectToInteger(args[a++])), le, buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'N': // unsigned long (always 32 bit, big endian byte order) \r\n\t\t\t\t\tcase 'V': // unsigned long (always 32 bit, little endian byte order) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(Core.Convert.ObjectToInteger(args[a++])), specifier == 'V', buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'f': // float (machine dependent size and representation - size is always 4B) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(unchecked((float)Core.Convert.ObjectToDouble(args[a++]))), le, buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 'd': // double (machine dependent size and representation - size is always 8B) \r\n\t\t\t\t\t\twhile (repeater-- > 0)\r\n\t\t\t\t\t\t\tPackNumber(BitConverter.GetBytes(Core.Convert.ObjectToDouble(args[a++])), le, buffer, ref pos);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Invalid specifier\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Packs a number (integer or double) into the buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"bytes\">The number converted to bytes by <see cref=\"BitConverter\"/>.</param>\r\n\t\t/// <param name=\"toLittleEndian\">Whether the result should be in little endian encoding.</param>\r\n\t\t/// <param name=\"buffer\">The buffer where to copy the covnerted number.</param>\r\n\t\t/// <param name=\"pos\">The position where to start in the buffer. Advanced by the length of bytes.</param>\r\n\t\tprivate static void PackNumber(byte[] bytes, bool toLittleEndian, byte[] buffer, ref int pos)\r\n\t\t{\r\n\t\t\tif (BitConverter.IsLittleEndian ^ toLittleEndian)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < bytes.Length; i++)\r\n\t\t\t\t\tbuffer[pos + i] = bytes[bytes.Length - 1 - i];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tBuffer.BlockCopy(bytes, 0, buffer, pos, bytes.Length);\r\n\t\t\t}\r\n\r\n\t\t\tpos += bytes.Length;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unpacks data from a string of bytes into <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"format\">The string defining the items of the result. See PHP manual for details.</param>\r\n\t\t/// <param name=\"data\">The string of bytes to be unpacked.</param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> containing unpacked data.</returns>\r\n\t\t[ImplementsFunction(\"unpack\")]\r\n\t\tpublic static PhpArray Unpack(string format, PhpBytes data)\r\n\t\t{\r\n\t\t\tif (format == null) return null;\r\n\t\t\tbyte[] buffer = (data != null) ? data.ReadonlyData : ArrayUtils.EmptyBytes;\r\n\r\n\t\t\tEncoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n\t\t\tbyte[] reversed = new byte[4]; // used for reversing the order of bytes in buffer\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tint pos = 0;\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\twhile (i < format.Length)\r\n\t\t\t{\r\n\t\t\t\tstring name;\r\n\t\t\t\tint repeater;\r\n\t\t\t\tchar specifier;\r\n\r\n\t\t\t\t// parses specifier, repeater, and name from the format string:\r\n\t\t\t\tParseFormatToken(format, ref i, out specifier, out repeater, out name);\r\n\r\n\t\t\t\tint remains = buffer.Length - pos;          // the number of bytes remaining in the buffer\r\n\t\t\t\tint size;                                   // a size of data to be extracted corresponding to the specifier  \r\n\r\n\t\t\t\t// repeater of '@' specifier has a special meaning:\r\n\t\t\t\tif (specifier == '@')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (repeater > buffer.Length || repeater == InfiniteRepeater)\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"outside_string\", specifier));\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tpos = repeater;\r\n\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// number of operations:\r\n\t\t\t\tint op_count;\r\n\r\n\t\t\t\t// gets the size of the data to read and adjust repeater:\r\n\t\t\t\tif (!GetSizeToUnpack(specifier, remains, repeater, out op_count, out size))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_format_code\", specifier));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// repeats operation determined by specifier \"op_count\" times;\r\n\t\t\t\t// if op_count is infinite then stops when the number of remaining characters is zero:\r\n\t\t\t\tfor (int j = 0; j < op_count || op_count == InfiniteRepeater; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (size > remains)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// infinite means \"while data are available\":\r\n\t\t\t\t\t\tif (op_count == InfiniteRepeater) break;\r\n\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"not_enought_input\", specifier, size, remains));\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tobject item;\r\n\t\t\t\t\tswitch (specifier)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 'X': // decreases position, no value stored:\r\n\t\t\t\t\t\t\tif (pos == 0)\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"outside_string\", specifier));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tpos--;\r\n\t\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\tcase 'x': // advances position, no value stored\r\n\t\t\t\t\t\t\tpos++;\r\n\t\t\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t\t\tcase 'a': // NUL-padded string\r\n\t\t\t\t\t\tcase 'A': // SPACE-padded string \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbyte pad = (byte)(specifier == 'a' ? 0x00 : 0x20);\r\n\r\n\t\t\t\t\t\t\t\tint last = pos + size - 1;\r\n\t\t\t\t\t\t\t\twhile (last >= pos && buffer[last] == pad)\r\n\t\t\t\t\t\t\t\t\tlast--;\r\n\r\n\t\t\t\t\t\t\t\titem = encoding.GetString(buffer, pos, last - pos + 1);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string:\r\n\t\t\t\t\t\tcase 'H':\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint p = pos;\r\n\t\t\t\t\t\t\t\tint nibble_shift = (specifier == 'h') ? 0 : 4;\r\n\r\n\t\t\t\t\t\t\t\tStringBuilder sb = new StringBuilder(size);\r\n\t\t\t\t\t\t\t\tfor (int k = 0; k < size; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tconst string hex_digits = \"0123456789ABCDEF\";\r\n\r\n\t\t\t\t\t\t\t\t\tsb.Append(hex_digits[(buffer[p] >> nibble_shift) & 0x0f]);\r\n\r\n\t\t\t\t\t\t\t\t\t// beware of odd repeaters!\r\n\t\t\t\t\t\t\t\t\tif (repeater == InfiniteRepeater || repeater > sb.Length)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tsb.Append(hex_digits[(buffer[p] >> (4 - nibble_shift)) & 0x0f]);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tp++;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\titem = sb.ToString();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase 'c': // signed char\r\n\t\t\t\t\t\t\titem = (int)unchecked((sbyte)buffer[pos]);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'C': // unsigned char \r\n\t\t\t\t\t\t\titem = (int)buffer[pos];\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 's': // signed short (always 16 bit, machine byte order) \r\n\t\t\t\t\t\t\titem = (int)BitConverter.ToInt16(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'S': // unsigned short (always 16 bit, machine byte order) \r\n\t\t\t\t\t\t\titem = (int)BitConverter.ToUInt16(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'n': // unsigned short (always 16 bit, big endian byte order) \r\n\t\t\t\t\t\t\tif (BitConverter.IsLittleEndian)\r\n\t\t\t\t\t\t\t\titem = (int)BitConverter.ToUInt16(LoadReverseBuffer(reversed, buffer, pos, 2), 0);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\titem = (int)BitConverter.ToUInt16(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'v': // unsigned short (always 16 bit, little endian byte order) \r\n\t\t\t\t\t\t\tif (!BitConverter.IsLittleEndian)\r\n\t\t\t\t\t\t\t\titem = (int)BitConverter.ToUInt16(LoadReverseBuffer(reversed, buffer, pos, 2), 0);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\titem = (int)BitConverter.ToUInt16(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'i': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\t\tcase 'I': // unsigned integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\t\t\tcase 'l': // signed long (always 32 bit, machine byte order) \r\n\t\t\t\t\t\tcase 'L': // unsigned long (always 32 bit, machine byte order) \r\n\t\t\t\t\t\t\titem = BitConverter.ToInt32(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcase 'N': // unsigned long (always 32 bit, big endian byte order) \r\n\t\t\t\t\t\t\titem = unchecked(((int)buffer[pos] << 24) + (buffer[pos + 1] << 16) + (buffer[pos + 2] << 8) + buffer[pos + 3]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tcase 'V': // unsigned long (always 32 bit, little endian byte order) \r\n\t\t\t\t\t\t\titem = unchecked(((int)buffer[pos + 3] << 24) + (buffer[pos + 2] << 16) + (buffer[pos + 1] << 8) + buffer[pos + 0]);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'f': // float (machine dependent size and representation - size is always 4B) \r\n\t\t\t\t\t\t\titem = (double)BitConverter.ToSingle(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'd': // double (machine dependent size and representation - size is always 8B) \r\n\t\t\t\t\t\t\titem = BitConverter.ToDouble(buffer, pos);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tDebug.Fail(\"Invalid specifier.\");\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tAddValue(result, name, item, op_count, j);\r\n\r\n\t\t\t\t\tpos += size;\r\n\t\t\t\t\tremains -= size;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a size of data to be unpacked according to the specifier.\r\n\t\t/// </summary>\r\n\t\tstatic bool GetSizeToUnpack(char specifier, int remains, int repeater, out int op_count, out int size)\r\n\t\t{\r\n\t\t\tswitch (specifier)\r\n\t\t\t{\r\n\t\t\t\tcase '@':\r\n\t\t\t\t\tDebug.Fail(\"@ specifier has already been processed\");\r\n\t\t\t\t\tsize = 0;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'X':\r\n\t\t\t\t\tsize = -1;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'a': // NUL-padded string\r\n\t\t\t\tcase 'A': // SPACE-padded string \r\n\t\t\t\t\tsize = (repeater != InfiniteRepeater) ? repeater : remains;\r\n\t\t\t\t\top_count = 1;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'h': // Hex string, low/high nibble first - converts to a string, takes n hex digits from string:\r\n\t\t\t\tcase 'H':\r\n\t\t\t\t\tsize = (repeater != InfiniteRepeater) ? (repeater + 1) / 2 : remains;\r\n\t\t\t\t\top_count = 1;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'x': // NUL\r\n\t\t\t\tcase 'c': // signed char\r\n\t\t\t\tcase 'C': // unsigned char \r\n\t\t\t\t\tsize = 1;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 's': // signed short (always 16 bit, machine byte order) \r\n\t\t\t\tcase 'S': // unsigned short (always 16 bit, machine byte order) \r\n\t\t\t\tcase 'n': // unsigned short (always 16 bit, big endian byte order) \r\n\t\t\t\tcase 'v': // unsigned short (always 16 bit, little endian byte order) \r\n\t\t\t\t\tsize = 2;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'i': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\tcase 'I': // signed integer (machine dependent size and byte order - always 32 bit) \r\n\t\t\t\tcase 'l': // signed long (always 32 bit, machine byte order) \r\n\t\t\t\tcase 'L': // unsigned long (always 32 bit, machine byte order) \r\n\t\t\t\tcase 'N': // unsigned long (always 32 bit, big endian byte order) \r\n\t\t\t\tcase 'V': // unsigned long (always 32 bit, little endian byte order) \r\n\t\t\t\tcase 'f': // float (machine dependent size and representation - size is always 4B) \r\n\t\t\t\t\tsize = 4;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'd': // double (machine dependent size and representation - size is always 8B) \r\n\t\t\t\t\tsize = 8;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsize = 0;\r\n\t\t\t\t\top_count = repeater;\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses format token \"{specifier}{repeater}?{name}?/?\"\r\n\t\t/// </summary>\r\n\t\tstatic private void ParseFormatToken(string format, ref int i, out char specifier, out int repeater, out string name)\r\n\t\t{\r\n\t\t\tDebug.Assert(i < format.Length);\r\n\r\n\t\t\tspecifier = format[i++];\r\n\t\t\trepeater = ParseRepeater(format, ref i);\r\n\r\n\t\t\tif (i == format.Length)\r\n\t\t\t{\r\n\t\t\t\tname = \"\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tint slash = format.IndexOf('/', i);\r\n\t\t\tif (slash >= 0)\r\n\t\t\t{\r\n\t\t\t\tname = format.Substring(i, slash - i);\r\n\t\t\t\ti = slash + 1;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tname = format.Substring(i);\r\n\t\t\t\ti = format.Length;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds unpacked value to the resulting array.\r\n\t\t/// </summary>\r\n\t\tstatic private void AddValue(PhpArray result, string name, object value, int repeater, int index)\r\n\t\t{\r\n\t\t\tif (name != \"\")\r\n\t\t\t{\r\n\t\t\t\tif (repeater > 1 || repeater == InfiniteRepeater)\r\n\t\t\t\t\tname += (index + 1);\r\n\r\n\t\t\t\tresult[name] = value;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult[index + 1] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads reversed bytes from buffer to an array.\r\n\t\t/// </summary>\r\n\t\tstatic private byte[] LoadReverseBuffer(byte[] reverse, byte[] buffer, int pos, int count)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t\treverse[i] = buffer[pos + count - i - 1];\r\n\r\n\t\t\treturn reverse;\r\n\t\t}\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG\r\n\r\n\t\tpublic static void Test_Pack()\r\n\t\t{\r\n\t\t\tPack(\"ccc\", -5, \"0001x\", \"-8\").Dump(Console.Out);\r\n\t\t\tPack(\"c*\", -5, \"0001x\", \"-8\").Dump(Console.Out);\r\n\t\t\tPack(\"cCsS\", 1, 1, 1, 1).Dump(Console.Out);\r\n\t\t\tPack(\"nviI\", 1, 1, 1, 1).Dump(Console.Out);\r\n\t\t\tPack(\"lLNV\", 1, 1, 1, 1).Dump(Console.Out);\r\n\t\t\tPack(\"fd\", 1, 1).Dump(Console.Out);\r\n\t\t\tPack(\"H*\", \"abcde\").Dump(Console.Out);\r\n\t\t\tPack(\"h*\", \"abcde\").Dump(Console.Out);\r\n\t\t\tPack(\"H*\", \"abcd\").Dump(Console.Out);\r\n\t\t\tPack(\"h*\", \"abcd\").Dump(Console.Out);\r\n\t\t\tPack(\"A*\", \"hello\").Dump(Console.Out);\r\n\t\t\tPack(\"a2\", \"hello\").Dump(Console.Out);\r\n\t\t\tPack(\"a10\", \"hello\").Dump(Console.Out);\r\n\t\t\tPack(\"A10\", \"hello\").Dump(Console.Out);\r\n\t\t\tPack(\"nvc*\", 0x1234, 0x5678, 65, 66).Dump(Console.Out);\r\n\t\t\tPack(\"x10X5x8x1X2x1X2\").Dump(Console.Out);\r\n\t\t\tPack(\"@5s2c3\", \"+5e10\", \"007xasd\", \"-6\", \"49\", \".1\").Dump(Console.Out);\r\n\t\t\tPack(\"@5f2c3\", \"+5e10\", \"007xasd\", \"-6\", \"49\", \".1\").Dump(Console.Out);\r\n\t\t\tPack(\"a*\", \"\").Dump(Console.Out);\r\n\t\t\tPack(\"a0\", \"xxx\").Dump(Console.Out);\r\n\t\t}\r\n\r\n\t\tpublic static void Test_Unpack()\r\n\t\t{\r\n\t\t\tUnpack(\"@2/a*x\", new PhpBytes(\"1234567812123456781212345678121234567812\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"@2/@100/a*x\", new PhpBytes(\"1234567812123456781212345678121234567812\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"@2/X3/a*x\", new PhpBytes(\"1234567812123456781212345678121234567812\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"a*x/a*y\", new PhpBytes(\"1234567812123456781212345678121234567812\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"xx/a*y\", new PhpBytes(\"1234567812123456781212345678121234567812\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"ca/Cb\", new PhpBytes(\"\\x90\\x90\")).Dump(Console.Out);\r\n\r\n\t\t\tUnpack(\"@5/s2x/c3y\", Pack(\"@5s2c3\", \"+5e10\", \"007xasd\", \"-6\", \"49\", \".1\")).Dump(Console.Out);\r\n\t\t\tUnpack(\"na/vb/c*c\", Pack(\"nvc*\", 1234, 5678, 65, 66)).Dump(Console.Out);\r\n\t\t\tUnpack(\"h*\", Pack(\"h*\", \"ABCDEF123456\")).Dump(Console.Out);\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Collections;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library\r\n{\r\n\tpublic static class Clr\r\n\t{\r\n\t\t#region Threads\r\n\r\n\t\tprivate sealed class Worker\r\n\t\t{\r\n\t\t\tprivate ScriptContext context;\r\n\t\t\tprivate object[] args;\r\n\r\n\t\t\tpublic Worker(ScriptContext/*!*/context, object[] args)\r\n\t\t\t{\r\n\t\t\t\tthis.context = context;\r\n\t\t\t\tthis.args = args;\r\n\t\t\t}\r\n\r\n\t\t\tpublic void Run(object _)\r\n\t\t\t{\r\n                var callback = (PhpCallback)_;\r\n\r\n\t\t\t\tcallback.SwitchContext(context.Fork());\r\n\t\t\t\tcallback.Invoke(args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"clr_create_thread\")]\r\n\t\tpublic static bool CreateClrThread(ScriptContext/*!*/context, PhpCallback/*!*/ callback, params object[] args)\r\n\t\t{\r\n\t\t\tif (callback == null)\r\n\t\t\t\tPhpException.ArgumentNull(\"callback\");\r\n\r\n\t\t\tif (!callback.Bind())\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tobject[] copies = (args != null) ? new object[args.Length] : ArrayUtils.EmptyObjects;\r\n\r\n\t\t\tfor (int i = 0; i < copies.Length; i++)\r\n\t\t\t\tcopies[i] = PhpVariable.DeepCopy(args[i]);\r\n\r\n            return ThreadPool.QueueUserWorkItem(new Worker(context, copies).Run, callback);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Types\r\n\r\n\t\t[ImplementsFunction(\"clr_typeof\", FunctionImplOptions.NeedsNamingContext | FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static DObject GetTypeOf(NamingContext/*!*/ namingContext, DTypeDesc caller, object typeNameOrObject)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = PhpObjects.ClassNameOrObjectToType(context, namingContext, caller, typeNameOrObject, true);\r\n\t\t\tif (type == null) return null;\r\n\r\n\t\t\treturn ClrObject.Create(type.RealType);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/CRC32.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Security.Cryptography;\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// An implementation of the CRC32 hash algorithm.\r\n    /// </summary>\r\n    public class CRC32 : HashAlgorithm\r\n    {\r\n        #region Lookup table\r\n\r\n        private static readonly uint[] table = new uint[256]\r\n\t\t{\r\n\t\t\t0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,\r\n\t\t\t0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,\r\n\t\t\t0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\r\n\t\t\t0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,\r\n\t\t\t0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,\r\n\t\t\t0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\r\n\t\t\t0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,\r\n\t\t\t0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,\r\n\t\t\t0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\r\n\t\t\t0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,\r\n\t\t\t0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,\r\n\t\t\t0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\r\n\t\t\t0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,\r\n\t\t\t0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,\r\n\t\t\t0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\r\n\t\t\t0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,\r\n\t\t\t0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,\r\n\t\t\t0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\r\n\t\t\t0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,\r\n\t\t\t0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\r\n\t\t\t0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\r\n\t\t\t0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,\r\n\t\t\t0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,\r\n\t\t\t0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\r\n\t\t\t0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,\r\n\t\t\t0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,\r\n\t\t\t0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\r\n\t\t\t0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,\r\n\t\t\t0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,\r\n\t\t\t0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\r\n\t\t\t0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,\r\n\t\t\t0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,\r\n\t\t\t0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\r\n\t\t\t0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,\r\n\t\t\t0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,\r\n\t\t\t0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\r\n\t\t\t0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,\r\n\t\t\t0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,\r\n\t\t\t0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\r\n\t\t\t0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\r\n\t\t\t0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,\r\n\t\t\t0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\r\n\t\t\t0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,\r\n\t\t\t0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,\r\n\t\t\t0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\r\n\t\t\t0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,\r\n\t\t\t0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,\r\n\t\t\t0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\r\n\t\t\t0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,\r\n\t\t\t0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,\r\n\t\t\t0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\r\n\t\t\t0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,\r\n\t\t\t0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,\r\n\t\t\t0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\r\n\t\t\t0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,\r\n\t\t\t0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,\r\n\t\t\t0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\r\n\t\t\t0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,\r\n\t\t\t0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,\r\n\t\t\t0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\r\n\t\t\t0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,\r\n\t\t\t0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,\r\n\t\t\t0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\r\n\t\t\t0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\r\n\t\t};\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"CRC32\"/> instance.\r\n        /// </summary>\r\n        public CRC32()\r\n        {\r\n            this.HashSizeValue = 32;\r\n            Initialize();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes this <see cref=\"CRC32\"/> instance.\r\n        /// </summary>\r\n        public override void Initialize()\r\n        {\r\n            this.State = -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Computes hash from the supplied data.\r\n        /// </summary>\r\n        protected override void HashCore(byte[] array, int ibStart, int cbSize)\r\n        {\r\n            unchecked\r\n            {\r\n                uint state = (uint)this.State;\r\n\r\n                int end = ibStart + cbSize;\r\n                for (int i = ibStart; i < end; i++)\r\n                {\r\n                    state = (state >> 8) ^ table[array[i] ^ (state & 0x000000ff)];\r\n                }\r\n\r\n                this.State = (int)state;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finalizes the hash computation after the last data block is processed.\r\n        /// </summary>\r\n        protected override byte[] HashFinal()\r\n        {\r\n            this.HashValue = BitConverter.GetBytes(~unchecked((uint)this.State));\r\n            return this.HashValue;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/ClassLibrary/CharMap.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n// TODO:\r\n// public int AddByUnicodeCategory(UnicodeCategory category)\r\n// public int AddByUnicodeCategory(UnicodeCategoryGroup group)\r\n\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Bitmap representig a set of Unicode characters.\r\n\t/// </summary>\r\n\tpublic sealed class CharMap   // GENERICS\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The bitmap.\r\n\t\t/// </summary>\r\n\t\tprivate uint[] flags;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The index of the last integer in <see cref=\"flags\"/> which has at least one bit ever set.\r\n\t\t/// </summary>\r\n\t\tprivate int lastDirty;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"CharMap\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"size\">The number of characters to be mapped.</param>\r\n\t\tpublic CharMap(int size)\r\n\t\t{\r\n\t\t\tthis.flags = new uint[size / 32];\r\n\t\t\tthis.lastDirty = -1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"CharMap\"/> based on specified map.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"map\">The bits used for character map.</param>\r\n\t\tpublic CharMap(uint[] map)\r\n\t\t{\r\n\t\t\tflags = map;\r\n\t\t\tint i = map.Length - 1;\r\n\t\t\twhile (i >= 0 && flags[i] == 0) i--;\r\n\t\t\tlastDirty = i;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves whether a character belongs to the set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"c\">The character to be tested.</param>\r\n\t\t/// <returns>Whether <paramref name=\"c\"/> is element of the set.</returns>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"c\"/> is not mapped by this instance.</exception>\r\n\t\tpublic bool Contains(char c)\r\n\t\t{\r\n\t\t\tint div = c >> 5;\r\n\t\t\treturn div <= lastDirty && (flags[div] & (0x80000000U >> (c & 0x1f))) != 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds character to the set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"c\">The character to be added.</param>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"c\"/> is not mapped by this instance.</exception>\r\n\t\tpublic void Add(char c)\r\n\t\t{\r\n\t\t\tint div = c >> 5;\r\n\t\t\tflags[div] |= 0x80000000U >> (c & 0x1f);\r\n\t\t\tif (div > lastDirty)\r\n\t\t\t\tlastDirty = div;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds all characters contained in a specified string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string which characters to add. Can be a <B>null</B> reference.</param>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\">Some character within <paramref name=\"str\"/> is not mapped by this instance.</exception>\r\n\t\tpublic void Add(string str)\r\n\t\t{\r\n\t\t\tif (str == null) return;\r\n\r\n\t\t\tfor (int i = 0; i < str.Length; i++)\r\n\t\t\t\tAdd(str[i]);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes character from the set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"c\">The character to be removed.</param>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"c\"/> is not mapped by this instance.</exception>\r\n\t\tpublic void Remove(char c)\r\n\t\t{\r\n\t\t\tflags[c >> 5] &= ~(0x80000000U >> (c & 0x1f));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a range of characters to the set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\">The lower bound of the range.</param>\r\n\t\t/// <param name=\"last\">The upper bound of the range.</param>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"first\"/> or <paramref name=\"last\"/> are not mapped by this instance.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">The <paramref name=\"first\"/> is less than the <paramref name=\"last\"/>.</exception>\r\n\t\tpublic void AddRange(char first, char last)\r\n\t\t{\r\n\t\t\tif (first >= last)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"last_is_less_than_first\"));\r\n\r\n\t\t\tint modf = first & 0x1f;\r\n\t\t\tint modl = last & 0x1f;\r\n\t\t\tint f = first >> 5;\r\n\t\t\tint l = last >> 5;\r\n\r\n\t\t\tif (l == f)\r\n\t\t\t{\r\n\t\t\t\tflags[f] |= (0xffffffffU >> (31 - modl + modf)) << (31 - modl);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// the first block:\r\n\t\t\t\tflags[f] |= 0xffffffffU >> modf;\r\n\r\n\t\t\t\t// the middle blocks (if any):\r\n\t\t\t\tfor (int i = f + 1; i < l; i++)\r\n\t\t\t\t\tflags[i] = 0xffffffffU;\r\n\r\n\t\t\t\t// the last block:\r\n\t\t\t\tif (modl < 31)\r\n\t\t\t\t\tflags[l] |= ~(0xffffffffU >> (modl + 1));\r\n\t\t\t\telse\r\n\t\t\t\t\tflags[l] = 0xffffffffU;\r\n\t\t\t}\r\n\t\t\tif (l > lastDirty) lastDirty = l;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a range of characters from the set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\">The lower bound of the range.</param>\r\n\t\t/// <param name=\"last\">The upper bound of the range.</param>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"first\"/> or <paramref name=\"last\"/> are not mapped by this instance.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">The <paramref name=\"first\"/> is less than the <paramref name=\"last\"/>.</exception>\r\n\t\tpublic void RemoveRange(char first, char last)\r\n\t\t{\r\n\t\t\tif (first > last)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"last_is_less_than_first\"));\r\n\r\n\t\t\tint modf = first & 0x1f;\r\n\t\t\tint modl = last & 0x1f;\r\n\t\t\tint f = first >> 5;\r\n\t\t\tint l = last >> 5;\r\n\r\n\t\t\tif (l == f)\r\n\t\t\t{\r\n\t\t\t\tflags[f] &= ~((0xffffffffU >> (31 - modl + modf)) << (31 - modl));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// the first block:\r\n\t\t\t\tflags[f] &= ~(0xffffffffU >> modf);\r\n\r\n\t\t\t\t// the middle blocks (if any):\r\n\t\t\t\tArray.Clear(flags, f + 1, l - f - 1);\r\n\r\n\t\t\t\t// the last block:\r\n\t\t\t\tif (modl < 31)\r\n\t\t\t\t\tflags[l] &= 0xffffffffU >> (modl + 1);\r\n\t\t\t\telse\r\n\t\t\t\t\tflags[l] = 0U;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Clears all bits in the map.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Doesn't necessarily lead to clearing the whole map. Clears the map up to the last bit ever set.\r\n\t\t/// </remarks>\r\n\t\tpublic void ClearAll()\r\n\t\t{\r\n\t\t\tArray.Clear(flags, 0, lastDirty + 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds characters matching given mask. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mask\">The mask of characters to be added. Any collection with items convertible to the <see cref=\"char\"/> type.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>The <paramref name=\"mask\"/> may contain single characters as well as intervals \"a..b\",\r\n\t\t/// where <I>a</I>, <I>b</I> are characters and <I>a</I> is less than or equal to <I>b</I>.</para>\r\n\t\t/// <para>There are no characters delimiting elements of the mask.</para>\r\n\t\t/// <para>If the mask is not valid as a whole its valid parts are processed.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <example><c>\"a..bA..Z0..9\"</c> means alphanumeric characters, <c>\"a.b..d\"</c> means {'a', 'b', 'c', 'd', '.'} etc.</example>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"mask\"/> is not valid mask.</exception>\r\n\t\t/// <exception cref=\"InvalidCastException\">An item of <paramref name=\"mask\"/> is not convertible to character.</exception>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\">Any character of <paramref name=\"mask\"/> is not mapped by this instance.</exception>\r\n\t\tpublic void AddUsingMask(string mask)\r\n\t\t{\r\n\t\t\tif (mask == null) return;\r\n\r\n\t\t\t// implemented by automaton with the following states:\r\n\t\t\tconst int char_empty = 0;     // no character read - initial state and after interval read state\r\n\t\t\tconst int char_read = 1;      // one char read into buffer, no dots read\r\n\t\t\tconst int dot_read = 2;       // one char read into buffer, one dot read\r\n\t\t\tconst int dot_dot_read = 3;   // one char read into buffer, two dots read\r\n\r\n\t\t\t// the interval constructing character:\r\n\t\t\tconst char dot = '.';\r\n\r\n\t\t\tint state = char_empty;       // initial state\r\n\t\t\tchar first = '\\0';            // the first character of an interval being processed \r\n\t\t\tchar last;                    // the last character of an interval being processed\r\n\r\n\t\t\tfor (int i = 0; i < mask.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tlast = mask[i];\r\n\t\t\t\tswitch (state)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase char_empty:\r\n\t\t\t\t\t\tfirst = last;\r\n\t\t\t\t\t\tstate = char_read;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase char_read:\r\n\t\t\t\t\t\tif (last != dot)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tAdd(first);\r\n\t\t\t\t\t\t\tfirst = last;\r\n\t\t\t\t\t\t\tstate = char_read;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstate = dot_read;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase dot_read:\r\n\t\t\t\t\t\tif (last != dot)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (first == dot)  //eg: \"..x\" or \"x.y\"\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_no_char_on_left\", \"..\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tAdd(first);\r\n\r\n\t\t\t\t\t\t\t// The dot will be added and the last char read may be init char of an interval:\r\n\t\t\t\t\t\t\tAdd(dot);\r\n\t\t\t\t\t\t\tfirst = last;\r\n\t\t\t\t\t\t\tstate = char_read;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstate = dot_dot_read;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase dot_dot_read:\r\n\r\n\t\t\t\t\t\tif (first > last)  //eg: \"a..b\" or \"b..a\" \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_not_incrementing\", \"..\"));\r\n\r\n\t\t\t\t\t\t\t// the first character will be added and the last char read may be init char of an interval:\r\n\t\t\t\t\t\t\tAdd(first);\r\n\t\t\t\t\t\t\tAdd(dot);\r\n\t\t\t\t\t\t\tfirst = last;\r\n\t\t\t\t\t\t\tstate = char_read;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tAddRange(first, last);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstate = char_empty;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t} //switch\r\n\r\n\t\t\t} //for\r\n\r\n\t\t\t// postprocessing:\r\n\t\t\tif (state != char_empty) Add(first);\r\n\t\t\tif (state == dot_read || state == dot_dot_read)\r\n\t\t\t{\r\n\t\t\t\tAdd(dot);\r\n\t\t\t\tif (state == dot_dot_read)\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_no_char_on_right\", \"..\"));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds characters using a mask with specified interval bounds separator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mask\">The mask.</param>\r\n\t\t/// <param name=\"separator\">The separator.</param>\r\n\t\tpublic void AddUsingMask(string mask, string separator)\r\n\t\t{\r\n\t\t\tif (separator == null || separator == \"\")\r\n\t\t\t\tthrow new ArgumentNullException(\"separator\");\r\n\r\n\t\t\tint i, k, start;\r\n\r\n\t\t\tstart = i = 0;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\twhile (i < mask.Length && mask[i] != separator[0])\r\n\t\t\t\t{\r\n\t\t\t\t\tAdd(mask[i]);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (i == mask.Length) break;\r\n\r\n\t\t\t\tk = 1;\r\n\t\t\t\twhile (k < separator.Length && i + k < mask.Length && mask[i + k] == separator[k]) k++;\r\n\r\n\t\t\t\t// entire separator read:\r\n\t\t\t\tif (k == separator.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the end of the mask:\r\n\t\t\t\t\tif (i + k == mask.Length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor (int j = 0; j < separator.Length; j++)\r\n\t\t\t\t\t\t\tAdd(separator[j]);\r\n\r\n\t\t\t\t\t\tif (i > start)\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_no_char_on_right\"));\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// interval has its first point behind the starting point:\r\n\t\t\t\t\tif (i > start)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (mask[i - 1] > mask[i + k])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_not_incrementing\"));\r\n\t\t\t\t\t\t\tAdd(mask[i - 1]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tAddRange(mask[i - 1], mask[i + k]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// entire interval has been read, starting from beginning:\r\n\t\t\t\t\t\tstart = i;\r\n\t\t\t\t\t\ti += k + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"char_range_no_char_on_left\"));\r\n\r\n\t\t\t\t\t\tfor (int j = 0; j < separator.Length; j++)\r\n\t\t\t\t\t\t\tAdd(separator[j]);\r\n\r\n\t\t\t\t\t\ti += k;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (i + k == mask.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\t// part of the separator read:\r\n\t\t\t\t\tfor (int j = 0; j < k; j++)\r\n\t\t\t\t\t\tAdd(separator[j]);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tAdd(separator[0]);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds character range given a regular-expression like mask. E.g. [a-zA-Z].\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mask\">The mask.</param>\r\n\t\t/// <param name=\"start\">An index of '[' character in the mask where the range starts.</param>\r\n\t\t/// <param name=\"end\">An index of the last character of the range. Usually the index of ']' character.</param>\r\n\t\t/// <param name=\"separator\">The separator character. Usually '-'.</param>\r\n\t\tpublic void AddUsingRegularMask(string mask, int start, int end, char separator)\r\n\t\t{\r\n\t\t\tif (mask == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"mask\");\r\n\t\t\tif (start < 0 || start >= mask.Length)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"start\");\r\n\t\t\tif (end < 0 || end >= mask.Length || end < start)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"end\");\r\n\r\n\t\t\tint i = start;\r\n\t\t\twhile (i < end)\r\n\t\t\t{\r\n\t\t\t\tif (mask[i] == separator && i > start && i < end)\r\n\t\t\t\t{\r\n\t\t\t\t\t// separator in between:\r\n\t\t\t\t\tif (mask[i - 1] < mask[i + 1])\r\n\t\t\t\t\t\tAddRange(mask[i - 1], mask[i + 1]);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tAddRange(mask[i + 1], mask[i - 1]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// adds an ordinary character:\r\n\t\t\t\t\tAdd(mask[i]);\r\n\t\t\t\t}\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Accumulates all characters contained or not contained in the set to the string in ascending order.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\">The lower bound.</param>\r\n\t\t/// <param name=\"last\">The upper bound.</param>\r\n\t\t/// <param name=\"complement\">Whether to return characters not contained in the string.</param>\r\n\t\t/// <returns>\r\n\t\t/// Depending on the value of the <paramref name=\"complement\"/> the method returns the string of characters in\r\n\t\t/// this instance and a complement of this instance, respectively, intersected with the \r\n\t\t/// [<paramref name=\"first\"/>; <paramref name=\"last\"/>] interval.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"first\"/> or <paramref name=\"last\"/> are not mapped by this instance.</exception>\r\n\t\tpublic string ToString(char first, char last, bool complement)\r\n\t\t{\r\n\t\t\tif (first > last)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"last_is_less_than_first\"));\r\n\r\n\t\t\tint modf = first & 0x1f;\r\n\t\t\tint modl = last & 0x1f;\r\n\t\t\tint f = first >> 5;\r\n\t\t\tint l = last >> 5;\r\n\r\n\t\t\t// an optimization:\r\n\t\t\tif (l > lastDirty && !complement)\r\n\t\t\t{\r\n\t\t\t\t// sets upper bound to the last bit in the lastDirty block:\r\n\t\t\t\tl = lastDirty;\r\n\t\t\t\tmodl = 31;\r\n\r\n\t\t\t\t// the whole interval is beyond the last set bit:\r\n\t\t\t\tif (f > l) return String.Empty;\r\n\t\t\t}\r\n\r\n\t\t\t// if complementary set is required, we xor each item of the \"flags\" array by the \"invert_equality\" \r\n\t\t\t// and so invert the result of comparison with zero in the following if statement:\r\n\t\t\tuint invert_inequality = (complement) ? 0xffffffffU : 0U;\r\n\t\t\tuint flg;\r\n\t\t\tchar c = first;\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\r\n\t\t\tif (f == l)\r\n\t\t\t{\r\n\t\t\t\t// the \"first\" and the \"last\" points to the same block:\r\n\t\t\t\tflg = flags[f] ^ invert_inequality;\r\n\t\t\t\tfor (uint mask = (0x80000000U >> modf); mask > (0x80000000U >> modl); mask >>= 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((flg & mask) != 0) result.Append(c);\r\n\t\t\t\t\tc++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// the first block:\r\n\t\t\t\tflg = flags[f] ^ invert_inequality;\r\n\t\t\t\tfor (uint mask = 0x80000000U >> modf; mask != 0; mask >>= 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((flg & mask) != 0) result.Append(c);\r\n\t\t\t\t\tc++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// middle blocks (if any):\r\n\t\t\t\tfor (int i = f + 1; i < l; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tflg = flags[i] ^ invert_inequality;\r\n\t\t\t\t\tfor (uint mask = 0x80000000U; mask != 0; mask >>= 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((flg & mask) != 0) result.Append(c);\r\n\t\t\t\t\t\tc++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the last block:\r\n\t\t\t\tflg = flags[l] ^ invert_inequality;\r\n\t\t\t\tfor (uint mask = 0x80000000U; mask >= (0x80000000U >> modl); mask >>= 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((flg & mask) != 0) result.Append(c);\r\n\t\t\t\t\tc++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG\r\n\r\n\t\tpublic void Print()\r\n\t\t{\r\n\t\t\tfor (char i = '\\u0000'; i < '\\u00ff'; i++)\r\n\t\t\t\tif (Contains(i))\r\n\t\t\t\t\tConsole.Write(i);\r\n\t\t}\r\n\r\n\t\tpublic void PrintDeclaration()\r\n\t\t{\r\n\t\t\tfor (int i = 0; i <= lastDirty; i++)\r\n\t\t\t\tConsole.WriteLine(\"0x{0},\", flags[i].ToString(\"x\"));\r\n\t\t}\r\n\r\n\t\tpublic static void Test_AddUsingRegularMask()\r\n\t\t{\r\n\t\t\tCharMap m = new CharMap(0x800);\r\n\t\t\tCharMap n = new CharMap(0x800);\r\n\t\t\tConsole.Write(\"m: \");\r\n\t\t\tm.AddUsingMask(\"a-d-g\", \"-\");\r\n\t\t\tConsole.Write(\"n: \");\r\n\t\t\tn.AddUsingMask(\"..a\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t\tm.Print();\r\n\t\t\tConsole.WriteLine();\r\n\t\t\tn.Print();\r\n\t\t\tConsole.WriteLine();\r\n\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/CharType.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Globalization;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implements character type functions known as <c>ctype</c>.\r\n\t/// </summary>\r\n\t[ImplementsExtension(LibraryDescriptor.ExtCType)]\r\n\tpublic static class CharType\r\n\t{\r\n\t\tprivate static string ArgToString(object var)\r\n\t\t{\r\n\t\t\tstring s = var as string;\r\n\t\t\tif (s == null)\r\n\t\t\t{\r\n\t\t\t\tif (var is int)\r\n\t\t\t\t\ts = PhpStrings.ChrUnicode((int)var);\r\n\t\t\t}\r\n\t\t\treturn s;\r\n\t\t}\r\n\r\n        private static bool IsValid(object var, Predicate<char>/*!*/isValid)\r\n        {\r\n            string s = ArgToString(var);\r\n            if (s == null) return false;\r\n\r\n            foreach (char c in s)\r\n                if (!isValid(c))\r\n                    return false;\r\n            \r\n            return true;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for alphanumeric character(s).\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_alnum\")]\r\n        [PureFunction]\r\n        public static bool IsAlphanumeric(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsLetterOrDigit);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for alphabetic character(s). \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_alpha\")]\r\n        [PureFunction]\r\n        public static bool IsAlpha(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsLetter);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for control character(s). \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_cntrl\")]\r\n        [PureFunction]\r\n        public static bool IsControl(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsControl);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for numeric character(s).\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_digit\")]\r\n        [PureFunction]\r\n        public static bool IsDigit(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsDigit);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for lowercase character(s). \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_lower\")]\r\n        [PureFunction]\r\n        public static bool IsLower(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsLower);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for any printable character which is not whitespace or an alphanumeric character.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_punct\")]\r\n        [PureFunction]\r\n        public static bool IsPunctuation(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsPunctuation);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for whitespace character(s).\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_space\")]\r\n        [PureFunction]\r\n        public static bool IsWhiteSpace(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsWhiteSpace);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for uppercase character(s).\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_upper\")]\r\n        [PureFunction]\r\n        public static bool IsUpper(object var)\r\n\t\t{\r\n            return IsValid(var, Char.IsUpper);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for character(s) representing a hexadecimal digit. \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_xdigit\")]\r\n        [PureFunction]\r\n        public static bool IsHexadigit(object var)\r\n\t\t{\r\n            return IsValid(var, c => (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F'));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for any printable character(s) except space. Those are alpha-numeric characters and punctuations.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_graph\")]\r\n        [PureFunction]\r\n        public static bool IsGraph(object var)\r\n\t\t{\r\n            return IsValid(var, c => (Char.IsPunctuation(c) || Char.IsLetterOrDigit(c)));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check for printable character(s). Those are alpha-numeric characters, punctuations, and space character.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ctype_print\")]\r\n        [PureFunction]\r\n        public static bool IsPrintable(object var)\r\n\t\t{\r\n            return IsValid(var, c => (c == ' ' || Char.IsPunctuation(c) || Char.IsLetterOrDigit(c)));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/ClassLibrary.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</ProjectGuid>\r\n    <AssemblyName>PhpNet.ClassLibrary</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>ClassLibrary.snk</AssemblyOriginatorKeyFile>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Windows.Forms\">\r\n      <Name>System.Windows.Forms</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Arrays.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"AssemblyResources.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"BitConverter.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"CharMap.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"CharType.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"CLR.cs\" />\r\n    <Compile Include=\"Configuration.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"Constants.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"FileSystem.Glob.cs\" />\r\n    <Compile Include=\"Filter.cs\" />\r\n    <Compile Include=\"CRC32.cs\" />\r\n    <Compile Include=\"Generated\\jsonLexer.cs\" />\r\n    <Compile Include=\"Generated\\jsonParser.cs\" />\r\n    <Compile Include=\"PhpHttpUtility.cs\" />\r\n    <Compile Include=\"PhpJson.cs\" />\r\n    <Compile Include=\"Data.CLR\\Connection.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Data.CLR\\ConnectionManager.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Data.CLR\\Result.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Data.CLR\\Statement.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"DateTime.CLR\\DateTime.cs\" />\r\n    <Compile Include=\"DateTime.CLR\\DateTimeParsing.cs\" />\r\n    <Compile Include=\"DateTime.CLR\\TimeZones.cs\" />\r\n    <Compile Include=\"DebugTests.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Errors.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"FileSystem.CLR.cs\" />\r\n    <Compile Include=\"FileSystem.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"FileSystem.Directory.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"FileSystem.Path.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Functions.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Generated\\StrToTimeScanner.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Hash.cs\" />\r\n    <Compile Include=\"Highlighting.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LibraryDescriptor.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Locale.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Mailer.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Math.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"MersenneTwister.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Miscellaneous.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Network.CLR.cs\" />\r\n    <Compile Include=\"Objects.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Output.CLR.cs\" />\r\n    <Compile Include=\"PhpFormatter.CLR.cs\" />\r\n    <Compile Include=\"PhpIni.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpIniOptions.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpIniParser.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpTokenizer.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Process.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RegExpPerl.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RegExpPosix.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Serializers.CLR.cs\" />\r\n    <Compile Include=\"Session.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Shell.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\Autoload.cs\" />\r\n    <Compile Include=\"SPL\\FileSystem.cs\" />\r\n    <Compile Include=\"SPL\\Iterators.cs\" />\r\n    <Compile Include=\"SPL\\Objects.cs\" />\r\n    <Compile Include=\"Streams.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Streams.Sockets.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Strings.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Strings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Strings.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"UrlRewriter.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"UrlRewriter.TagsParser.cs\" />\r\n    <Compile Include=\"UUEncoding.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Variables.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Web.CLR.cs\" />\r\n    <Compile Include=\"Web.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <None Include=\"ClassLibrary.nuspec\" />\r\n    <None Include=\"Resources\\WindowsTZ.xml\" />\r\n    <EmbeddedResource Include=\"Strings.resx\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Strings.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n    <Content Include=\"Doc\\Arrays.xml\" />\r\n    <Content Include=\"Doc\\RootPage.html\" />\r\n    <Content Include=\"Doc\\Streams.xml\" />\r\n    <Content Include=\"Doc\\Strings.xml\" />\r\n    <Content Include=\"Doc\\Variables.xml\" />\r\n    <None Include=\"ClassLibrary.snk\" />\r\n    <None Include=\"Generators\\json.lex\" />\r\n    <None Include=\"Generators\\json.y\" />\r\n    <None Include=\"Generators\\StrToTime.lex\" />\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/ClassLibrary/ClassLibrary.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/ClassLibrary/Configuration.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP;\r\nusing PHP.Core;\r\nusing System.Net.Mail;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t[Serializable]\r\n\tpublic sealed partial class LibraryConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region Highlighting\r\n\r\n\t\t/// <summary>\r\n\t\t/// Highlighting functions options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic partial class HighlightingSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"String\": String = value; break;\r\n\t\t\t\t\tcase \"Comment\": Comment = value; break;\r\n\t\t\t\t\tcase \"Keyword\": Keyword = value; break;\r\n\t\t\t\t\tcase \"Background\": Background = value; break;\r\n\t\t\t\t\tcase \"Default\": Default = value; break;\r\n\t\t\t\t\tcase \"Html\": Html = value; break;\r\n\t\t\t\t\tcase \"ScriptTags\": ScriptTags = value; break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Mailer\r\n\r\n\t\t/// <summary>\r\n\t\t/// Mailign funtions options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic class MailerSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// SMTP server name used for sending e-mails.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string SmtpServer = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// SMTP server port used for sending e-mails.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int SmtpPort = 25;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The default value of \"From\" header.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string DefaultFromHeader = null;\r\n\r\n            /// <summary>\r\n            /// Whether to add <c>X-PHP-Originating-Script</c> header to sent mails.\r\n            /// </summary>\r\n            public bool AddXHeader = false;\r\n\r\n            public MailerSection()\r\n            {\r\n                \r\n            }\r\n\r\n\t\t\tinternal MailerSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (MailerSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"DefaultFromHeader\":\r\n                        try\r\n                        {\r\n                            // check the mail address:\r\n                            MailAddress address = new MailAddress(value);\r\n\r\n                            // remember the value only if the address is valid:\r\n                            DefaultFromHeader = value;\r\n                        }\r\n                        catch\r\n                        {\r\n                            // an invalid mail address provided:\r\n                            throw new ConfigUtils.InvalidAttributeValueException(node, \"value\");\r\n                        }\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"SmtpServer\":\r\n\t\t\t\t\t\tSmtpServer = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"SmtpPort\":\r\n\t\t\t\t\t\tSmtpPort = ConfigUtils.ParseInteger(value, 0, UInt16.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n                    case \"AddXHeader\":\r\n                        AddXHeader = string.Equals(value, true.ToString(), StringComparison.OrdinalIgnoreCase);\r\n                        break;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Session\r\n\r\n\t\t/// <summary>\r\n\t\t/// Serialization options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed class SessionSection : IPhpConfigurationSection\r\n\t\t{\r\n            static SessionSection()\r\n            {\r\n                // load configuration into the context every request\r\n                RequestContext.RequestBegin += () =>\r\n                {\r\n                    var config = LibraryConfiguration.Local;\r\n                    if (config == null) return;\r\n\r\n                    RequestContext context = RequestContext.CurrentContext;\r\n                    if (context == null) return;\r\n\r\n                    HttpCookie cookie = AspNetSessionHandler.GetCookie(context.HttpContext);\r\n\r\n                    if (config.Session.CacheExpire >= 0)\r\n                        context.HttpContext.Session.Timeout = config.Session.CacheExpire;\r\n\r\n                    if (config.Session.CacheLimiter != null)\r\n                        PhpSession.CacheLimiter(config.Session.CacheLimiter);\r\n\r\n                    if (cookie != null)\r\n                    {\r\n                        if (config.Session.CookieLifetime >= 0)\r\n                            context.SessionCookieLifetime = config.Session.CookieLifetime;\r\n\r\n                        if (config.Session.CookiePath != null)\r\n                            cookie.Path = config.Session.CookiePath;\r\n\r\n                        if (config.Session.CookieDomain != null)\r\n                            cookie.Domain = config.Session.CookieDomain;\r\n\r\n                        cookie.Secure = config.Session.CookieSecure;\r\n                    }\r\n                };\r\n            }\r\n         \r\n            /// <summary>\r\n\t\t\t/// A serializer used for serializing session data. Can't contain a <B>null</B> reference.\r\n\t\t\t/// Setting <B>null</B> to the propety will set the default PHP serializer.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Serializer Serializer\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn serializer;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\tserializer = (value != null) ? value : PhpSerializer.Default;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tprivate Serializer serializer = PhpSerializer.Default;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A probability factor of invocation of old sessions collection. To get the probability, \r\n\t\t\t/// the factor is divided by <see cref=\"GcDivisor\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int GcProbability = 1;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The divisor of probability factor.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int GcDivisor = 100;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A maximal session lifetime in seconds.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int GcMaxLifetime = 1440;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A directory path relative to the current directory where the session files will be stored in.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string SavePath = Path.GetTempPath();\r\n\r\n            /// <summary>\r\n            /// HttpContext.Session.Timeout if not -1.\r\n            /// </summary>\r\n            public int CacheExpire = -1;\r\n\r\n            /// <summary>\r\n            /// CacheLimiter if not null.\r\n            /// </summary>\r\n            public string CacheLimiter = null;\r\n\r\n            /// <summary>\r\n            /// HttpContext.SessionCookieLifetime if not -1.\r\n            /// </summary>\r\n            public int CookieLifetime = -1;\r\n\r\n            /// <summary>\r\n            /// cookie.Path if not null.\r\n            /// </summary>\r\n            public string CookiePath = null;\r\n\r\n            /// <summary>\r\n            /// cookie.Domain if not null.\r\n            /// </summary>\r\n            public string CookieDomain = null;\r\n\r\n            /// <summary>\r\n            /// cookie.Secure.\r\n            /// </summary>\r\n            public bool CookieSecure = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Copies values to the target structure.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal SessionSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (SessionSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"Serializer\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSerializer serializer = Serializers.GetSerializer(value);\r\n\r\n\t\t\t\t\t\t\tif (serializer == null)\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(LibResources.GetString(\"unknown_serializer\", value) + \".\", node);\r\n\r\n\t\t\t\t\t\t\tthis.serializer = serializer;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"GcProbability\":\r\n\t\t\t\t\t\tGcProbability = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"GcDivisor\":\r\n\t\t\t\t\t\tGcDivisor = ConfigUtils.ParseInteger(value, 1, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"GcMaxLifetime\":\r\n\t\t\t\t\t\tGcMaxLifetime = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"SavePath\":\r\n\t\t\t\t\t\tif (value != \"\")\r\n\t\t\t\t\t\t\tSavePath = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"CacheExpire\":\r\n\t\t\t\t\t\tCacheExpire = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"CacheLimiter\":\r\n                        CacheLimiter = value;\r\n                        break;\r\n\r\n\t\t\t\t\tcase \"CookieLifetime\":\r\n\t\t\t\t\t\tCookieLifetime = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"CookiePath\":\r\n                        CookiePath = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"CookieDomain\":\r\n                        CookieDomain = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"CookieSecure\":\r\n                        CookieSecure = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tinternal void Validate()\r\n\t\t\t{\r\n\t\t\t\t// sets default value if the path is null: \r\n\t\t\t\tif (SavePath == null)\r\n\t\t\t\t\tSavePath = Path.GetTempPath();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Date\r\n\r\n\t\t/// <summary>\r\n\t\t/// Date funtions options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic partial class DateSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"Latitude\":\r\n\t\t\t\t\t\tLatitude = ConfigUtils.ParseDouble(value, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"Longitude\":\r\n\t\t\t\t\t\tLongitude = ConfigUtils.ParseDouble(value, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"SunsetZenith\":\r\n\t\t\t\t\t\tSunsetZenith = ConfigUtils.ParseDouble(value, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"SunriseZenith\":\r\n\t\t\t\t\t\tSunriseZenith = ConfigUtils.ParseDouble(value, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"TimeZone\":\r\n\t\t\t\t\t\tif (!string.IsNullOrEmpty(value))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tTimeZone = PhpTimeZone.GetTimeZone(value);\r\n\t\t\t\t\t\t\tif (TimeZone == null)\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(LibResources.GetString(\"unknown_timezone\", value) + \".\", node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Serialization\r\n\r\n        /// <summary>\r\n        /// Serialization functions options.\r\n        /// </summary>\r\n        [Serializable]\r\n        public sealed class SerializationSection : IPhpConfigurationSection\r\n        {\r\n            /// <summary>\r\n            /// A serializer used for serializing data. Can't contain a <B>null</B> reference.\r\n            /// Setting <B>null</B> to the property will set the default PHP serializer.\r\n            /// </summary>\r\n            public Serializer DefaultSerializer\r\n            {\r\n                get\r\n                {\r\n                    return defaultSerializer;\r\n                }\r\n                set\r\n                {\r\n                    defaultSerializer = (value != null) ? value : PhpSerializer.Default;\r\n                }\r\n            }\r\n\r\n            private Serializer defaultSerializer = PhpSerializer.Default;\r\n\r\n            public bool Parse(string name, string value, XmlNode node)\r\n            {\r\n                switch (name)\r\n                {\r\n                    case \"DefaultSerializer\":\r\n                        {\r\n                            Serializer serializer = Serializers.GetSerializer(value);\r\n\r\n                            if (serializer == null)\r\n                                throw new ConfigurationErrorsException(LibResources.GetString(\"unknown_serializer\", value) + \".\", node);\r\n\r\n                            this.defaultSerializer = serializer;\r\n                            break;\r\n                        }\r\n                    default:\r\n                        return false;\r\n                }\r\n                return true;\r\n            }\r\n\r\n            internal SerializationSection DeepCopy()\r\n            {\r\n                return (SerializationSection)this.MemberwiseClone();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Legacy Configuration\r\n\r\n        /// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n\t\t\tLibraryConfiguration local = (LibraryConfiguration)config.GetLibraryConfig(LibraryDescriptor.Singleton);\r\n\t\t\tLibraryConfiguration @default = DefaultLocal;\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n\t\t\t\tcase \"sendmail_from\": return PhpIni.GSR(ref local.Mailer.DefaultFromHeader, @default.Mailer.DefaultFromHeader, value, action);\r\n\t\t\t\tcase \"SMTP\": return PhpIni.GSR(ref local.Mailer.SmtpServer, @default.Mailer.SmtpServer, value, action);\r\n\t\t\t\tcase \"smtp_port\": return PhpIni.GSR(ref local.Mailer.SmtpPort, @default.Mailer.SmtpPort, value, action);\r\n                case \"mail.add_x_header\": return PhpIni.GSR(ref local.Mailer.AddXHeader, @default.Mailer.AddXHeader, value, action);\r\n\r\n\t\t\t\tcase \"highlight.bg\": return PhpIni.GSR(ref local.Highlighting.Background, @default.Highlighting.Background, value, action);\r\n\t\t\t\tcase \"highlight.comment\": return PhpIni.GSR(ref local.Highlighting.Comment, @default.Highlighting.Comment, value, action);\r\n\t\t\t\tcase \"highlight.default\": return PhpIni.GSR(ref local.Highlighting.Default, @default.Highlighting.Default, value, action);\r\n\t\t\t\tcase \"highlight.html\": return PhpIni.GSR(ref local.Highlighting.Html, @default.Highlighting.Html, value, action);\r\n\t\t\t\tcase \"highlight.keyword\": return PhpIni.GSR(ref local.Highlighting.Keyword, @default.Highlighting.Keyword, value, action);\r\n\t\t\t\tcase \"highlight.string\": return PhpIni.GSR(ref local.Highlighting.String, @default.Highlighting.String, value, action);\r\n\r\n\t\t\t\tcase \"session.serialize_handler\": return PhpSession.GsrSerializer(local, @default, value, action);\r\n\t\t\t\tcase \"session.cache_expire\": return PhpSession.GsrCacheExpire(value, action);\r\n\t\t\t\tcase \"session.cache_limiter\": return PhpSession.GsrCacheLimiter(value, action);\r\n\t\t\t\tcase \"session.save_path\": return PhpIni.GSR(ref local.Session.SavePath, @default.Session.SavePath, value, action);\r\n\t\t\t\tcase \"session.gc_maxlifetime\": return PhpIni.GSR(ref local.Session.GcMaxLifetime, @default.Session.GcMaxLifetime, value, action);\r\n\t\t\t\tcase \"session.gc_probability\": return PhpIni.GSR(ref local.Session.GcProbability, @default.Session.GcProbability, value, action);\r\n\t\t\t\tcase \"session.gc_divisor\": return PhpIni.GSR(ref local.Session.GcDivisor, @default.Session.GcDivisor, value, action);\r\n\r\n\t\t\t\tcase \"session.cookie_lifetime\": return PhpSession.GsrCookieLifetime(value, action);\r\n\t\t\t\tcase \"session.cookie_path\": return PhpSession.GsrCookiePath(value, action);\r\n\t\t\t\tcase \"session.cookie_domain\": return PhpSession.GsrCookieDomain(value, action);\r\n\t\t\t\tcase \"session.cookie_secure\": return PhpSession.GsrCookieSecure(value, action);\r\n\r\n\t\t\t\tcase \"date.default_latitude\": return PhpIni.GSR(ref local.Date.Latitude, @default.Date.Latitude, value, action);\r\n\t\t\t\tcase \"date.default_longitude\": return PhpIni.GSR(ref local.Date.Longitude, @default.Date.Longitude, value, action);\r\n\t\t\t\tcase \"date.sunrise_zenith\": return PhpIni.GSR(ref local.Date.SunriseZenith, @default.Date.SunriseZenith, value, action);\r\n\t\t\t\tcase \"date.sunset_zenith\": return PhpIni.GSR(ref local.Date.SunsetZenith, @default.Date.SunsetZenith, value, action);\r\n\t\t\t\tcase \"date.timezone\": return PhpTimeZone.GsrTimeZone(local, @default, value, action);\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes Phalanger BCL legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n\t\t\tLibraryConfiguration local = new LibraryConfiguration();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n\t\t\tow.StartSection(\"session\");\r\n\t\t\tow.WriteOption(\"session.cache_limiter\", \"CacheLimiter\", \"no-cache\", PhpSession.DefaultCacheLimiter);\r\n\t\t\tow.WriteOption(\"session.cache_expire\", \"CacheExpire\", 180, PhpSession.DefaultCacheExpire);\r\n\t\t\tow.WriteOption(\"session.serialize_handler\", \"Serializer\", \"php\", local.Session.Serializer.Name);\r\n\t\t\tow.WriteOption(\"session.gc_probability\", \"GcProbability\", 1, local.Session.GcProbability);\r\n\t\t\tow.WriteOption(\"session.gc_divisor\", \"GcDivisor\", 100, local.Session.GcDivisor);\r\n\t\t\tow.WriteOption(\"session.gc_maxlifetime\", \"GcMaxLifetime\", 1440, local.Session.GcMaxLifetime);\r\n\t\t\tow.WriteOption(\"session.save_path\", \"SavePath\", \"\", local.Session.SavePath);\r\n\t\t\tow.WriteOption(\"session.cookie_lifetime\", \"CookieLifetime\", 0, PhpSession.DefaultCookieLifetime);\r\n\t\t\tow.WriteOption(\"session.cookie_path\", \"CookiePath\", \"/\", PhpSession.DefaultCookiePath);\r\n\t\t\tow.WriteOption(\"session.cookie_domain\", \"CookieDomain\", \"\", PhpSession.DefaultCookieDomain);\r\n\t\t\tow.WriteOption(\"session.cookie_secure\", \"CookieSecure\", false, PhpSession.DefaultCookieSecure);\r\n\r\n\t\t\tow.StartSection(\"mailer\");\r\n\t\t\tow.WriteOption(\"SMTP\", \"SmtpServer\", \"localhost\", local.Mailer.SmtpServer);\r\n\t\t\tow.WriteOption(\"smtp_port\", \"SmtpPort\", 25, local.Mailer.SmtpPort);\r\n\t\t\tow.WriteOption(\"sendmail_from\", \"DefaultFromHeader\", null, local.Mailer.DefaultFromHeader);\r\n\r\n\t\t\tow.StartSection(\"highlighting\");\r\n\t\t\tow.WriteOption(\"highlight.bg\", \"Background\", \"#FFFFFF\", local.Highlighting.Background);\r\n\t\t\tow.WriteOption(\"highlight.string\", \"String\", \"#DD0000\", local.Highlighting.String);\r\n\t\t\tow.WriteOption(\"highlight.comment\", \"Comment\", \"#FF8000\", local.Highlighting.Comment);\r\n\t\t\tow.WriteOption(\"highlight.keyword\", \"Keyword\", \"#007700\", local.Highlighting.Keyword);\r\n\t\t\tow.WriteOption(\"highlight.html\", \"Html\", \"#000000\", local.Highlighting.Html);\r\n\t\t\tow.WriteOption(\"highlight.default\", \"Default\", \"#0000BB\", local.Highlighting.Default);\r\n\r\n\t\t\tow.StartSection(\"date\");\r\n\t\t\tow.WriteOption(\"date.default_latitude\", \"Latitude\", 31.7667, local.Date.Latitude);\r\n\t\t\tow.WriteOption(\"date.default_longitude\", \"Longitude\", 35.2333, local.Date.Longitude);\r\n\t\t\tow.WriteOption(\"date.sunrise_zenith\", \"SunriseZenith\", 90.83, local.Date.SunriseZenith);\r\n\t\t\tow.WriteOption(\"date.sunset_zenith\", \"SunsetZenith\", 90.83, local.Date.SunsetZenith);\r\n\t\t\tow.WriteOption(\"date.timezone\", \"TimeZone\", null, local.Date.TimeZone.StandardName);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\tconst string s = \"standard\";\r\n\t\t\tGetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n\t\t\t// highlighting:\r\n\t\t\tIniOptions.Register(\"highlight.bg\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"highlight.comment\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"highlight.default\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"highlight.html\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"highlight.keyword\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"highlight.string\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\r\n\t\t\t// e-mail:\r\n\t\t\tIniOptions.Register(\"SMTP\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"smtp_port\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"sendmail_from\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"sendmail_path\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            IniOptions.Register(\"mail.add_x_header\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\r\n\t\t\t// session:\r\n\t\t\tIniOptions.Register(\"session.cache_expire\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.cache_limiter\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.serialize_handler\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.save_path\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.gc_maxlifetime\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.gc_probability\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.gc_divisor\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.cookie_domain\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.cookie_lifetime\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.cookie_path\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.cookie_secure\", IniFlags.Supported | IniFlags.Local | IniFlags.Http, d, s);\r\n\r\n\t\t\tIniOptions.Register(\"session.use_cookies\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.use_only_cookies\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.encode_sources\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.entropy_file\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.entropy_length\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.referer_check\", IniFlags.Unsupported | IniFlags.Local | IniFlags.Http, d, s);\r\n\t\t\tIniOptions.Register(\"session.use_trans_sid\", IniFlags.Unsupported | IniFlags.Global | IniFlags.Http, d, s);\r\n\r\n\t\t\t// date:\r\n\t\t\tIniOptions.Register(\"date.default_latitude\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"date.default_longitude\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"date.sunrise_zenith\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"date.sunset_zenith\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"date.timezone\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP;\r\nusing PHP.Core;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\tpublic sealed partial class LibraryConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region Highlighting\r\n\r\n\t\t/// <summary>\r\n\t\t/// Highlighting functions options.\r\n\t\t/// </summary>\r\n\t\tpublic partial class HighlightingSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>String color.</summary>\r\n\t\t\tpublic string String = \"navy\";\r\n\r\n\t\t\t/// <summary>Comment color.</summary>\r\n\t\t\tpublic string Comment = \"green\";\r\n\r\n\t\t\t/// <summary>Keyword color.</summary>\r\n\t\t\tpublic string Keyword = \"blue\";\r\n\r\n\t\t\t/// <summary>Background color.</summary>\r\n\t\t\tpublic string Background = \"white\";\r\n\r\n\t\t\t/// <summary>HTML color.</summary>\r\n\t\t\tpublic string Html = \"gray\";\r\n\r\n\t\t\t/// <summary>Script tags color (<c>&lt;?</c>, <c>?&gt;</c>, <c>&lt;%</c>, <c>?&gt;%</c>, ...).</summary>\r\n\t\t\tpublic string ScriptTags = \"red\";\r\n\r\n\t\t\t/// <summary>Default foreground color.</summary>\r\n\t\t\tpublic string Default = \"black\";\r\n\r\n\t\t\tinternal HighlightingSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (HighlightingSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Date\r\n\r\n\t\t/// <summary>\r\n\t\t/// Date funtions options.\r\n\t\t/// </summary>\r\n\t\tpublic partial class DateSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default latitude (used for calculating sunrise and sunset times).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic double Latitude = 31.7667;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default longitude (used for calculating sunrise and sunset times).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic double Longitude = 35.2333;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default longitude (used for calculating sunrise and sunset times).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic double SunsetZenith = 90.83;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default longitude (used for calculating sunrise and sunset times).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic double SunriseZenith = 90.83;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default timezone used by time-zone functions.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic TimeZoneInfo TimeZone = null;\r\n\r\n\t\t\tinternal DateSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (DateSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction, Copying\r\n\r\n        public readonly HighlightingSection Highlighting;\r\n        public readonly DateSection Date;\r\n#if !SILVERLIGHT\r\n        public readonly MailerSection Mailer;\r\n        public readonly SessionSection Session;\r\n        public readonly SerializationSection Serialization;\r\n#endif\r\n\r\n        public LibraryConfiguration()\r\n        {\r\n            this.Highlighting = new HighlightingSection();\r\n            this.Date = new DateSection();\r\n#if !SILVERLIGHT\r\n            this.Mailer = new MailerSection();\r\n            this.Session = new SessionSection();\r\n            this.Serialization = new SerializationSection();\r\n#endif\r\n        }\r\n\r\n        private LibraryConfiguration(LibraryConfiguration source)\r\n        {\r\n            this.Highlighting = source.Highlighting.DeepCopy();\r\n            this.Date = source.Date.DeepCopy();\r\n#if !SILVERLIGHT\r\n            this.Mailer = source.Mailer.DeepCopy();\r\n            this.Session = source.Session.DeepCopy();\r\n            this.Serialization = source.Serialization.DeepCopy();\r\n#endif\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n\t\t\treturn new LibraryConfiguration(this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n\t\tpublic static LibraryConfiguration Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (LibraryConfiguration)Core.Configuration.Local.GetLibraryConfig(LibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static LibraryConfiguration DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (LibraryConfiguration)Core.Configuration.DefaultLocal.GetLibraryConfig(LibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n\t\tpublic static LibraryConfiguration GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\treturn (LibraryConfiguration)context.Config.GetLibraryConfig(LibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Constants.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implementation of constants handling functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpConstants\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Defines a constant.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the constant. Can be arbitrary string.</param>\r\n\t\t/// <param name=\"value\">The value of the constant. Can be <B>null</B> reference or a scalar <see cref=\"PhpVariables.IsScalar\"/>.</param>\r\n\t\t/// <returns>Whether the new constant has been defined.</returns>\r\n\t\t[ImplementsFunction(\"define\")]\r\n\t\tpublic static bool Define(string name, object value)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.DefineConstant(name, value, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a constant.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the constant. Can be arbitrary string.</param>\r\n\t\t/// <param name=\"value\">The value of the constant. Can be <B>null</B> reference or a scalar <see cref=\"PhpVariables.IsScalar\"/>.</param>\r\n\t\t/// <param name=\"caseInsensitive\">Whether the name is case insensitive.</param>\r\n\t\t/// <returns>Whether the new constant has been defined.</returns>\r\n\t\t[ImplementsFunction(\"define\")]\r\n\t\tpublic static bool Define(string name, object value, bool caseInsensitive)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.DefineConstant(name, value, caseInsensitive);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a constant is defined.\r\n\t\t/// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"name\">The name of the constant.</param>\r\n\t\t/// <returns>Whether the constant is defined.</returns>\r\n\t\t[ImplementsFunction(\"defined\")]\r\n        [PureFunction(typeof(PhpConstants), \"Defined_Analyze\")]\r\n\t\tpublic static bool Defined(ScriptContext context, string name)\r\n\t\t{\r\n            return context.IsConstantDefined(name);\r\n        }\r\n\r\n        #region analyzer of: defined(), constant()\r\n\r\n        /// <summary>\r\n        /// Try to find constant by given <paramref name=\"name\"/> in compile time.\r\n        /// </summary>\r\n        /// <param name=\"analyzer\">Actual <see cref=\"Analyzer\"/>.</param>\r\n        /// <param name=\"name\">Constant name, including class constants.</param>\r\n        /// <param name=\"exists\">Outputs <c>true</c> or <c>false</c> if the existance of the constant was determined.</param>\r\n        /// <returns>Constant descriptor.</returns>\r\n        private static PHP.Core.Reflection.DConstant EvaluateConstant(Analyzer analyzer, string name, out bool? exists)\r\n        {\r\n            if (name == null)\r\n                name = string.Empty;\r\n\r\n            // try global constant:\r\n            QualifiedName? alias;\r\n            var constant = analyzer.SourceUnit.ResolveConstantName(new QualifiedName(new Name(name)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false);\r\n\r\n            if (constant != null)\r\n            {\r\n                exists = true;  // we surely know, the constant is defined.\r\n                return constant;\r\n            }\r\n            \r\n            // try class constant:\r\n            string typename, constname;\r\n            if (Name.IsClassMemberSyntax(name, out typename, out constname))\r\n            {\r\n                var type = analyzer.SourceUnit.ResolveTypeName(new QualifiedName(new Name(typename)), analyzer.CurrentScope, out alias, null, PHP.Core.Text.Span.Invalid, false);\r\n\r\n                if (type != null && !type.IsUnknown)\r\n                {\r\n                    Core.Reflection.ClassConstant classconst;\r\n                    type.GetConstant(new VariableName(constname), null /* class constants are global only */, out classconst);\r\n                    Debug.Assert(classconst == null || classconst.IsPublic, \"Class constant are expected to be public only.\");\r\n                    exists = (classconst != null);  // we surely know, wheter the constant is or is not defined.\r\n                    return classconst;\r\n                }\r\n            }\r\n\r\n            // special constants defined in runtime, but definitely defined:\r\n            if (name == \"PHALANGER\")\r\n            {\r\n                exists = true;\r\n                return null;\r\n            }\r\n\r\n            // do not evaluate in compile time\r\n            exists = null;   // we are not sure about existance of this constant.\r\n            return null;\r\n        }\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Defined_Analyze(Analyzer analyzer, string name)\r\n        {\r\n            bool? exists;\r\n            var constant = EvaluateConstant(analyzer, name, out exists);\r\n\r\n            if (exists != null)\r\n                return new Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n                {\r\n                    value = exists.Value    // constant existance is known in compile time\r\n                };\r\n\r\n            // check in run time:\r\n            return null;\r\n        }\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Constant_Analyze(Analyzer analyzer, string name)\r\n        {\r\n            bool? exists;\r\n            var constant = EvaluateConstant(analyzer, name, out exists);\r\n\r\n            if (constant != null && constant.HasValue)\r\n                return new Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n                {\r\n                    value = constant.Value  // evaluated value in compile time\r\n                };\r\n\r\n            // check in run time:\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves a value of a constant.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the constant.</param>\r\n\t\t/// <returns>The value.</returns>\r\n\t\t[ImplementsFunction(\"constant\")]\r\n        [PureFunction(typeof(PhpConstants), \"Constant_Analyze\")]\r\n        public static object Constant(string name)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.GetConstantValue(name, false, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves defined constants.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array which contains pairs (constant name,constant value).</returns>\r\n\t\t[ImplementsFunction(\"get_defined_constants\")]\r\n\t\tpublic static PhpArray GetDefinedConstants()\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tPhpArray result = new PhpArray(0, context.GetDefinedConstantCount());\r\n\t\t\tcontext.GetDefinedConstants(result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Retrieves defined constants.\r\n        /// </summary>\r\n        /// <param name=\"categorize\">Returns a multi-dimensional array with categories in the keys of the first dimension and constants and their values in the second dimension. </param>\r\n        /// <returns>Retrives the names and values of all the constants currently defined.</returns>\r\n        [ImplementsFunction(\"get_defined_constants\")]\r\n        public static PhpArray GetDefinedConstants(bool categorize)\r\n        {\r\n            if (categorize == false)\r\n                return GetDefinedConstants();\r\n\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            PhpArray resultArray = new PhpArray();\r\n            PhpArray internalArray = null;\r\n\r\n            //Core constants first\r\n            internalArray = new PhpArray();\r\n            context.GetDefinedExtensionConstants(internalArray, \"Core\");\r\n            if (internalArray.Count > 0)\r\n                resultArray.Add(\"Core\", internalArray);\r\n\r\n            // Loaded extensions constants\r\n            foreach (string extensionName in ScriptContext.CurrentContext.ApplicationContext.GetLoadedExtensions())//TODO: sort alphabeticaly\r\n            {\r\n                if (extensionName == \"Core\")\r\n                    continue; // skip core, it's already defined ( Class library has few core classes )\r\n\r\n                internalArray = new PhpArray();\r\n                context.GetDefinedExtensionConstants(internalArray, extensionName);\r\n\r\n                if (internalArray.Count > 0)\r\n                    resultArray.Add(extensionName, internalArray);\r\n            }\r\n\r\n\t\t\t//User constants\r\n\t\t\tinternalArray = new PhpArray(0, context.GetDefinedUserConstantCount());\r\n\t\t\tcontext.GetDefinedUserConstants(internalArray);\r\n\t\t\tresultArray.Add(\"user\", internalArray);\r\n\r\n            return resultArray;\r\n        }\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Data.CLR/Connection.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Data;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Abstract class implementing common functionality of PHP connection resources.\r\n\t/// </summary>\r\n\tpublic abstract class PhpDbConnection : PhpResource\r\n\t{\r\n\t\t#region Fields & Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connection string.\r\n\t\t/// </summary>\r\n\t\tpublic string/*!*/ ConnectionString { get { return connectionString; } }\r\n\t\tprivate string/*!*/ connectionString;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Underlying database connection.\r\n\t\t/// </summary>\r\n        public IDbConnection/*!*/Connection { get { return this.connection; } }\r\n\t\tprotected IDbConnection/*!*/ connection;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A result associated with this connection that possibly has not been closed yet.\r\n\t\t/// </summary>\r\n\t\tprotected IDataReader pendingReader;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Last result resource.\r\n\t\t/// </summary>\r\n\t\tpublic PhpDbResult LastResult { get { return lastResult; } }\r\n\t\tprivate PhpDbResult lastResult;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an exception thrown by last performed operation or a <B>null</B> reference \r\n\t\t/// if that operation succeeded.\r\n\t\t/// </summary>\r\n\t\tpublic Exception LastException { get { return lastException; } }\r\n\t\tprivate Exception lastException;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of rows affected by the last query executed on this connection.\r\n\t\t/// </summary>\r\n\t\tpublic int LastAffectedRows\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (lastResult == null) return -1;\r\n\r\n\t\t\t\t// SELECT gives -1, UPDATE/INSERT gives the number:\r\n\t\t\t\treturn (lastResult.RecordsAffected >= 0) ? lastResult.RecordsAffected : lastResult.RowCount;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpDbConnection\"/> with a specified connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connectionString\">Connection string.</param>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"name\">Connection resource name.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"connection\"/> is a <B>null</B> reference.</exception>\r\n\t\tprotected PhpDbConnection(string/*!*/ connectionString, IDbConnection/*!*/ connection, string/*!*/ name)\r\n\t\t\t: base(name)\r\n\t\t{\r\n\t\t\tif (connection == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connection\");\r\n\t\t\tif (connectionString == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connectionString\");\r\n\r\n\t\t\tthis.connection = connection;\r\n\t\t\tthis.connectionString = connectionString;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a query result resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"reader\">Data reader to be used for result resource population.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert data types to PHP ones.</param>\r\n\t\t/// <returns>Result resource holding all resulting data of the query.</returns>\r\n\t\tprotected abstract PhpDbResult GetResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a command instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Instance of command specific for the database provider.</returns>\r\n\t\tprotected abstract IDbCommand/*!*/ CreateCommand();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Builds a connection string.\r\n\t\t/// </summary>\r\n\t\tpublic static string/*!*/ BuildConnectionString(string server, string user, string password, string additionalSettings)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder(8);\r\n\t\t\tresult.Append(\"server=\");\r\n\t\t\tresult.Append(server);\r\n\t\t\t//\t\t\tresult.Append(\";database=\");\r\n\t\t\t//\t\t\tresult.Append(database);\r\n\t\t\tresult.Append(\";user id=\");\r\n\t\t\tresult.Append(user);\r\n\t\t\tresult.Append(\";password=\");\r\n\t\t\tresult.Append(password);\r\n\r\n\t\t\tif (!String.IsNullOrEmpty(additionalSettings))\r\n\t\t\t{\r\n\t\t\t\tresult.Append(';');\r\n\t\t\t\tresult.AppendFormat(additionalSettings);\r\n\t\t\t}\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a database connection if it has not been opened yet.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B> if successful.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Attempt to connect the database failed (Warning).</exception>\r\n\t\t/// <remarks>\r\n\t\t/// Sets <see cref=\"LastException\"/> to <B>null</B> (on success) or to the exception object (on failure).\r\n\t\t/// </remarks>\r\n\t\tpublic bool Connect()\r\n\t\t{\r\n\t\t\tDebug.Assert(connection != null);\r\n\r\n\t\t\tif (connection.State == ConnectionState.Open) return true;\r\n\r\n\t\t\tconnection.ConnectionString = this.ConnectionString;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tconnection.Open();\r\n\t\t\t\tlastException = null;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tlastException = e;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"cannot_open_connection\",\r\n\t\t\t\t  GetExceptionMessage(e)));\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes connection and releases the resource.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\tbase.FreeManaged();\r\n\r\n\t\t\tClosePendingReader();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (connection != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tconnection.Close();\r\n\t\t\t\t}\r\n\t\t\t\tlastException = null;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tlastException = e;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"error_closing_connection\",\r\n\t\t\t\t  GetExceptionMessage(e)));\r\n\t\t\t}\r\n\t\t\tconnection = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes pending reader.\r\n\t\t/// </summary>\r\n\t\tpublic void ClosePendingReader()\r\n\t\t{\r\n            if (pendingReader != null)\r\n            {\r\n                if (!pendingReader.IsClosed)\r\n                    pendingReader.Close();\r\n\r\n                pendingReader = null;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a query on the connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"query\">The query.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert data types to PHP ones.</param>\r\n\t\t/// <returns>PhpDbResult class representing the data read from database.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"query\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\">Query execution failed (Warning).</exception>\r\n\t\tpublic PhpDbResult ExecuteQuery(string/*!*/ query, bool convertTypes)\r\n\t\t{\r\n\t\t\tif (query == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"query\");\r\n\r\n\t\t\treturn ExecuteCommand(query, CommandType.Text, convertTypes, null, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a stored procedure on the connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"procedureName\">Procedure name.</param>\r\n\t\t/// <param name=\"parameters\">Parameters.</param>\r\n\t\t/// <param name=\"skipResults\">Whether to load results.</param>\r\n\t\t/// <returns>PhpDbResult class representing the data read from database.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"procedureName\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\">Procedure execution failed (Warning).</exception>\r\n\t\tpublic PhpDbResult ExecuteProcedure(string/*!*/ procedureName, IEnumerable<IDataParameter> parameters, bool skipResults)\r\n\t\t{\r\n\t\t\tif (procedureName == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"procedureName\");\r\n\r\n\t\t\treturn ExecuteCommand(procedureName, CommandType.StoredProcedure, true, parameters, skipResults);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a command on the connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"commandText\">Command text.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert data types to PHP ones.</param>\r\n\t\t/// <param name=\"commandType\">Command type.</param>\r\n\t\t/// <param name=\"parameters\">Parameters.</param>\r\n\t\t/// <param name=\"skipResults\">Whether to load results.</param>\r\n\t\t/// <returns>PhpDbResult class representing the data read from database.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"commandText\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"PhpException\">Command execution failed (Warning).</exception>\r\n        public PhpDbResult ExecuteCommand(string/*!*/ commandText, CommandType commandType, bool convertTypes, IEnumerable<IDataParameter> parameters, bool skipResults)\r\n        {\r\n            if (commandText == null)\r\n                throw new ArgumentNullException(\"commandText\");\r\n\r\n            return (Connect())\r\n                ? ExecuteCommandInternal(commandText, commandType, convertTypes, parameters, skipResults)\r\n                : null;\r\n        }\r\n\t\t\r\n        protected virtual PhpDbResult ExecuteCommandInternal(string/*!*/ commandText, CommandType commandType, bool convertTypes, IEnumerable<IDataParameter> parameters, bool skipResults)\r\n\t\t{\r\n\t\t\tClosePendingReader();\r\n\r\n            // IDbCommand\r\n\t\t\tIDbCommand command = CreateCommand();\r\n\r\n\t\t\tcommand.Connection = connection;\r\n\t\t\tcommand.CommandText = commandText;\r\n\t\t\tcommand.CommandType = commandType;\r\n\r\n\t\t\tif (parameters != null)\r\n\t\t\t{\r\n\t\t\t\tcommand.Parameters.Clear();\r\n\t\t\t\tforeach (IDataParameter parameter in parameters)\r\n\t\t\t\t\tcommand.Parameters.Add(parameter);\r\n\t\t\t}\r\n\r\n            // ExecuteReader\r\n            PhpDbResult result = null;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n                var/*!*/reader = this.pendingReader = command.ExecuteReader();\r\n\r\n\t\t\t\tif (skipResults)\r\n\t\t\t\t{\r\n\t\t\t\t\t// reads all data:\r\n                    do { while (reader.Read()); } while (reader.NextResult());\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tlastResult = null;\r\n                    \r\n                    // read all data into PhpDbResult:\r\n                    result = GetResult(this, reader, convertTypes);\r\n\t\t\t\t\tresult.command = command;\r\n\r\n\t\t\t\t\tlastResult = result;\r\n\t\t\t\t}\r\n\r\n                lastException = null;\r\n            }\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tlastException = e;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"command_execution_failed\",\r\n\t\t\t\t\tGetExceptionMessage(e)));\r\n\t\t\t}\r\n\r\n            //\r\n            return result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reexecutes a command associated with a specified result resource to get schema of the command result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">The result resource.</param>\r\n\t\tinternal void ReexecuteSchemaQuery(PhpDbResult/*!*/ result)\r\n\t\t{\r\n\t\t\tif (!Connect() || result.Command == null) return;\r\n\r\n\t\t\tClosePendingReader();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult.Reader = pendingReader = result.Command.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tlastException = e;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"command_execution_failed\",\r\n\t\t\t\t\tGetExceptionMessage(e)));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Changes the active database on opened connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"databaseName\"></param>\r\n\t\t/// <returns>true if databse was changed; otherwise returns false</returns>\r\n\t\tpublic bool SelectDb(string databaseName)\r\n\t\t{\r\n            ClosePendingReader();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (this.connection.State == ConnectionState.Open)\r\n\t\t\t\t{\r\n\t\t\t\t\tconnection.ChangeDatabase(databaseName);\r\n\t\t\t\t\tlastException = null;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tlastException = e;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"database_selection_failed\",\r\n\t\t\t\t  GetExceptionMessage(e)));\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a message from an exception raised by the connector.\r\n\t\t/// Removes the ending dot.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"e\">Exception.</param>\r\n\t\t/// <returns>The message.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"e\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic virtual string GetExceptionMessage(Exception/*!*/ e)\r\n\t\t{\r\n\t\t\tif (e == null) throw new ArgumentNullException(\"e\");\r\n\t\t\treturn PhpException.ToErrorMessage(e.Message);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the last error message.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The message or an empty string if no error occured.</returns>\r\n\t\tpublic virtual string GetLastErrorMessage()\r\n\t\t{\r\n\t\t\treturn (LastException != null) ? LastException.Message : String.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the last error number.\r\n\t\t/// </summary>\r\n\t\t/// <returns>-1 on error, zero otherwise.</returns>\r\n\t\t/// <remarks>Should be implemented by the subclass if the respective provider supports error numbers.</remarks>\r\n\t\tpublic virtual int GetLastErrorNumber()\r\n\t\t{\r\n\t\t\treturn (LastException != null) ? -1 : 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Data.CLR/ConnectionManager.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Threading;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Abstract base class for database connection managers.\r\n\t/// </summary>\r\n\tpublic abstract class ConnectionManager\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Connection factory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connectionString\">Connection string.</param>\r\n\t\t/// <returns>Connection.</returns>\r\n\t\tprotected abstract PhpDbConnection CreateConnection(string/*!*/ connectionString);\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of connections established by the manager.\r\n\t\t/// </summary>\r\n\t\tprivate ArrayList connections = new ArrayList();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Number of all connections established by the application.\r\n\t\t/// </summary>\r\n\t\tprivate static int AppConnectionCount = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a connection if a connection with the same connection string doesn't exist yet.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connectionString\">Connection string.</param>\r\n\t\t/// <param name=\"newConnection\">Whether to create a new connection even if there exists one with same string.</param>\r\n\t\t/// <param name=\"limit\">Maximal number of connections. Negative value means no limit.</param>\r\n\t\t/// <param name=\"success\"><B>true</B> on success, <B>false</B> on failure.</param>\r\n\t\t/// <returns>The connection (opened or not) or a <B>null</B> reference on failure.</returns>\r\n\t\tpublic PhpDbConnection OpenConnection(string/*!*/ connectionString, bool newConnection, int limit, out bool success)\r\n\t\t{\r\n\t\t\tif (connectionString == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connectionString\");\r\n\r\n\t\t\tPhpDbConnection connection;\r\n\r\n\t\t\tif (!newConnection)\r\n\t\t\t{\r\n\t\t\t\tconnection = GetConnectionByString(connectionString);\r\n\t\t\t\tif (connection != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\treturn connection;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tint count = Interlocked.Increment(ref AppConnectionCount);\r\n\r\n\t\t\tif (limit >= 0 && count > limit)\r\n\t\t\t{\r\n\t\t\t\tInterlocked.Decrement(ref AppConnectionCount);\r\n\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"connection_limit_reached\", limit));\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tconnection = CreateConnection(connectionString);\r\n\t\t\tif (!connection.Connect())\r\n\t\t\t{\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn connection;\r\n\t\t\t}\r\n\r\n\t\t\tconnections.Add(connection);\r\n\t\t\tsuccess = true;\r\n\t\t\treturn connection;\r\n\t\t}\r\n\r\n\t\tprivate PhpDbConnection GetConnectionByString(string connectionString)\r\n\t\t{\r\n\t\t\tforeach (PhpDbConnection connection in connections)\r\n\t\t\t{\r\n\t\t\t\tif (connection.ConnectionString == connectionString)\r\n\t\t\t\t\treturn connection;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes last used connection from the list of active Connections.\r\n\t\t/// </summary>\r\n\t\tpublic void RemoveConnection()\r\n\t\t{\r\n\t\t\tif (connections.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tconnections.RemoveAt(connections.Count - 1);\r\n\t\t\t\tInterlocked.Decrement(ref AppConnectionCount);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes specified connection from the list of active connections.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">The connection to be removed.</param>\r\n\t\tpublic void RemoveConnection(PhpDbConnection/*!*/ connection)\r\n\t\t{\r\n\t\t\tif (connection == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connection\");\r\n\r\n\t\t\tif (connections.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tconnections.Remove(connection);\r\n\t\t\t\tInterlocked.Decrement(ref AppConnectionCount);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns last opened connection.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic PhpDbConnection GetLastConnection()\r\n\t\t{\r\n\t\t\tif (connections.Count == 0) return null;\r\n\t\t\treturn (PhpDbConnection)connections[connections.Count - 1];\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Data.CLR/Result.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Runtime.Serialization;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Holds a result of a query.\r\n\t/// </summary>\r\n\tpublic abstract class PhpDbResult : PhpResource\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Represents a single result set returned by query.\r\n\t\t/// </summary>\r\n\t\tprotected sealed class ResultSet\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Rows.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic ArrayList Rows;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Names of columns in query.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string[] Names;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Names of SQL types of columns in query.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string[] DataTypes;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Number of records affected by the query.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int RecordsAffected = -1;\r\n\r\n            /// <summary>\r\n            /// Custom data obtained from the row by <see cref=\"GetCustomData\"/> callback function of specific PhpDbResult implementation.\r\n            /// </summary>\r\n            public object CustomData;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source data reader.\r\n\t\t/// </summary>\r\n\t\tinternal protected IDataReader Reader { get { return reader; } set { reader = value; } }\r\n\t\tprivate IDataReader reader;\r\n\r\n\t\tprivate PhpDbConnection connection;\r\n\t\tprivate List<ResultSet> resultSets;\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Command whose result is represented by this instance.\r\n\t\t/// </summary>\r\n\t\tpublic IDbCommand Command { get { return command; } }\r\n\t\tinternal IDbCommand command; // GENERICS: internal set \r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the index of the current result set. Initialized to 0.\r\n\t\t/// </summary>\r\n\t\tpublic int CurrentSetIndex { get { return currentSetIndex; } }\r\n\t\tprivate int currentSetIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the index of the current row or -1 if no row has been fetched yet.\r\n\t\t/// </summary>\r\n\t\tpublic int CurrentRowIndex { get { return currentRowIndex; } }\r\n\t\tprivate int currentRowIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the index of the current field. Initialized to 0.\r\n\t\t/// </summary>\r\n\t\tpublic int CurrentFieldIndex { get { return currentFieldIndex; } }\r\n\t\tprivate int currentFieldIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the index of the last fetched field. Initialized to -1.\r\n\t\t/// </summary>\r\n\t\tpublic int LastFetchedField { get { return lastFetchedField; } }\r\n\t\tprivate int lastFetchedField = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of rows of the result.\r\n\t\t/// </summary>\r\n\t\tpublic int RowCount { get { Debug.Assert(CurrentSet.Rows != null); return CurrentSet.Rows.Count; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of fields of the result. Returns 0 if data are not loaded.\r\n\t\t/// </summary>\r\n\t\tpublic int FieldCount { get { Debug.Assert(CurrentSet.Names != null); return CurrentSet.Names.Length; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of records affected by the query that generates this result.\r\n\t\t/// Contains minus one for select queries.\r\n\t\t/// </summary>\r\n\t\tpublic int RecordsAffected { get { return CurrentSet.RecordsAffected; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Result Sets\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current result set.\r\n\t\t/// </summary>\r\n\t\tprotected ResultSet/*!*/ CurrentSet\r\n\t\t{\r\n\t\t\tget { return (ResultSet)resultSets[currentSetIndex]; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of results sets.\r\n\t\t/// </summary>\r\n\t\tpublic int ResultSetCount\r\n\t\t{\r\n\t\t\tget { return resultSets.Count; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Advances the current result set index.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the index has been advanced.</returns>\r\n\t\tpublic bool NextResultSet()\r\n\t\t{\r\n\t\t\tif (currentSetIndex < resultSets.Count - 1)\r\n\t\t\t{\r\n\t\t\t\tcurrentSetIndex++;\r\n\t\t\t\tcurrentRowIndex = -1;\r\n\t\t\t\tcurrentFieldIndex = 0;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Constructors, Population, Release\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of a result resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"reader\">Data reader from which to load results.</param>\r\n\t\t/// <param name=\"name\">Resource name.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert resulting values to PHP types.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\r\n\t\tprotected PhpDbResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, string/*!*/ name, bool convertTypes)\r\n\t\t\t: base(name)\r\n\t\t{\r\n\t\t\tif (connection == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connection\");\r\n\r\n\t\t\tif (reader == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"reader\");\r\n\r\n\t\t\tthis.reader = reader;\r\n\t\t\tthis.connection = connection;\r\n\t\t\tLoadData(convertTypes);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads all data from the reader to arrays.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This method should be called before any other method.</remarks>\r\n\t\tprivate void LoadData(bool convertTypes)\r\n\t\t{\r\n            this.resultSets = new List<ResultSet>(16);\r\n\r\n            var reader = this.reader;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n                ResultSet result_set = new ResultSet()\r\n                {\r\n                    Rows = new ArrayList(),\r\n                    Names = GetNames(),\r\n                    DataTypes = GetDataTypes(),\r\n                    RecordsAffected = reader.RecordsAffected,\r\n                    CustomData = GetCustomData()\r\n                };\r\n\r\n\t\t\t\twhile (reader.Read())\r\n\t\t\t\t{\r\n\t\t\t\t\tresult_set.Rows.Add(this.GetValues(result_set.DataTypes, convertTypes));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresultSets.Add(result_set);\r\n\t\t\t}\r\n\t\t\twhile (reader.NextResult());\r\n\r\n\t\t\tthis.currentSetIndex = 0;\r\n\t\t\tthis.currentRowIndex = -1;\r\n\t\t\tthis.currentFieldIndex = 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disposes the resource.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\tbase.FreeManaged();\r\n\t\t\tif (this.reader != null) reader.Close();\r\n\t\t}\r\n\r\n\t\tinternal void ReleaseConnection()\r\n\t\t{\r\n\t\t\tthis.connection = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Virtual Methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves column names from the reader.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An array of column names.</returns>\r\n\t\tprotected virtual string[]/*!*/ GetNames()\r\n\t\t{\r\n\t\t\tstring[] names = new string[reader.FieldCount];\r\n\t\t\tfor (int i = 0; i < reader.FieldCount; i++)\r\n\t\t\t\tnames[i] = reader.GetName(i);\r\n\r\n\t\t\treturn names;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves column type names from the reader.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An array of column type names.</returns>\r\n\t\tprotected virtual string[]/*!*/ GetDataTypes()\r\n\t\t{\r\n\t\t\tstring[] names = new string[reader.FieldCount];\r\n\t\t\tfor (int i = 0; i < reader.FieldCount; i++)\r\n\t\t\t\tnames[i] = reader.GetDataTypeName(i);\r\n\r\n\t\t\treturn names;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get custom data of current row of <see cref=\"Reader\"/>. Used when loading data from database.\r\n        /// </summary>\r\n        /// <returns>Custom object associated with current row.</returns>\r\n        protected virtual object GetCustomData()\r\n        {\r\n            return null;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets values of the current row from the reader.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dataTypes\">Column type names.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert types of values to PHP types.</param>\r\n\t\t/// <returns>An array of values of cells in the current row.</returns>\r\n\t\tprotected abstract object[]/*!*/ GetValues(string[] dataTypes, bool convertTypes);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Maps SQL type name to PHP type name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeName\">SQL type name.</param>\r\n\t\t/// <returns>PHP type name.</returns>\r\n\t\tprotected abstract string/*!*/ MapFieldTypeName(string typeName);\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SeekRow, SeekField, FetchNextField, FetchArray, FetchObject\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves the internal cursor to the specified row. \r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the cursor moved and there are data available.</returns>\r\n\t\tpublic bool SeekRow(int rowIndex)\r\n\t\t{\r\n\t\t\tif (!CheckRowIndex(rowIndex)) return false;\r\n\t\t\tcurrentRowIndex = rowIndex - 1;\r\n\t\t\tcurrentFieldIndex = 0;\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Seeks to a specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">An index of the field.</param>\r\n\t\t/// <returns>Whether the index is in the range.</returns>\r\n\t\tpublic bool SeekField(int fieldIndex)\r\n\t\t{\r\n\t\t\tCheckFieldIndex(fieldIndex);\r\n\t\t\tcurrentFieldIndex = fieldIndex;\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Advances <see cref=\"LastFetchedField\"/> counter and gets its value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Index of field to be fetched.</returns>\r\n\t\tpublic int FetchNextField()\r\n\t\t{\r\n\t\t\tif (lastFetchedField < FieldCount - 1) lastFetchedField++;\r\n\t\t\treturn lastFetchedField;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves cursor in internal cache one ahead. Reads data from IDataReader if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the cursor moved and there are data available.</returns>\r\n\t\tprivate bool ReadRow()\r\n\t\t{\r\n\t\t\tif (currentRowIndex < RowCount - 1)\r\n\t\t\t{\r\n\t\t\t\tcurrentRowIndex++;\r\n\t\t\t\tcurrentFieldIndex = 0;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a PhpArray containing data from collumns in the row and move to the next row.\r\n\t\t/// Returns false if there are no more rows.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"intKeys\">Whether to add integer keys.</param>\r\n\t\t/// <param name=\"stringKeys\">Whether to add string keys.</param>\r\n\t\t/// <returns>A PHP array containing the data.</returns>\r\n\t\tpublic PhpArray FetchArray(bool intKeys, bool stringKeys)\r\n\t\t{\r\n\t\t\t// no more data\r\n\t\t\tif (!this.ReadRow()) return null;\r\n\r\n\t\t\tDebug.Assert(currentRowIndex >= 0 && currentRowIndex < RowCount);\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tobject[] oa = (object[])CurrentSet.Rows[currentRowIndex];\r\n\t\t\tPhpArray row = new PhpArray((intKeys) ? FieldCount : 0, (stringKeys) ? FieldCount : 0);\r\n\r\n\t\t\tfor (int i = 0; i < FieldCount; i++)\r\n\t\t\t{\r\n\t\t\t\tobject quoted = Core.Convert.Quote(oa[i], context);\r\n\t\t\t\tif (intKeys) row.Add(i, quoted);\r\n                if (stringKeys) row[CurrentSet.Names[i]] = quoted;\r\n\t\t\t}\r\n\r\n\t\t\treturn row;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// A <see cref=\"DObject\"/> with properties that correspond to the fetched row, \r\n\t\t/// or false if there are no more rows. \r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\t/// <remarks>\r\n\t\t/// Works like FetchArray but instead of storing data to associative array,\r\n\t\t/// FetchObject use object fields. Note, that field names are case sensitive.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpObject FetchObject()\r\n\t\t{\r\n\t\t\t// no more data\r\n\t\t\tif (!this.ReadRow()) return null;\r\n\r\n\t\t\tDebug.Assert(currentRowIndex >= 0 && currentRowIndex < RowCount);\r\n\r\n\t\t\tobject[] oa = (object[])CurrentSet.Rows[currentRowIndex];\r\n\t\t\tvar runtimeFields = new PhpArray(FieldCount);\r\n\t\t\tfor (int i = 0; i < FieldCount; i++)\r\n\t\t\t{\r\n                runtimeFields[CurrentSet.Names[i]] = oa[i];\r\n\t\t\t\t//php_object.SetProperty(CurrentSet.Names[i], oa[i], null);\r\n\t\t\t}\r\n\r\n            return new stdClass()\r\n            {\r\n                RuntimeFields = runtimeFields\r\n            };            \r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetSchemaTable, GetSchemaRowInfo, GetFieldName, GetFieldType, GetFieldLength, GetFieldValue\r\n\r\n\t\tprivate ArrayList schemaTables = null;       // GENERICS: List<DataTable>\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets information about schema of the current result set.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Schema table.</returns>\r\n\t\tpublic DataTable GetSchemaTable()\r\n\t\t{\r\n\t\t\t// loads schema if not loaded yet:\r\n\t\t\tif (schemaTables == null)\r\n\t\t\t{\r\n\t\t\t\tconnection.ReexecuteSchemaQuery(this);\r\n\t\t\t\tif (reader.IsClosed)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"cannot_retrieve_schema\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tschemaTables = new ArrayList();\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tschemaTables.Add(reader.GetSchemaTable());\r\n\t\t\t\t}\r\n\t\t\t\twhile (reader.NextResult());\r\n\t\t\t}\r\n\r\n\t\t\treturn (DataTable)schemaTables[currentSetIndex];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets schema information for a specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">Field index.</param>\r\n\t\t/// <returns>Data row containing column schema.</returns>\r\n\t\tpublic DataRow GetSchemaRowInfo(int fieldIndex)\r\n\t\t{\r\n\t\t\tif (!CheckFieldIndex(fieldIndex)) return null;\r\n\t\t\treturn GetSchemaTable().Rows[fieldIndex];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the current field.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The field name.</returns>\r\n\t\tpublic string GetFieldName()\r\n\t\t{\r\n\t\t\treturn GetFieldName(currentFieldIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of a specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">An index of the field.</param>\r\n\t\t/// <returns>The field name or a <B>null</B> reference if index is out of range.</returns>\r\n\t\tpublic string GetFieldName(int fieldIndex)\r\n\t\t{\r\n\t\t\tif (!CheckFieldIndex(fieldIndex)) return null;\r\n\t\t\treturn CurrentSet.Names[fieldIndex];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type of the current field.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The type name.</returns>\r\n\t\tpublic string GetFieldType()\r\n\t\t{\r\n\t\t\treturn GetFieldType(currentFieldIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a PHP name of the current field type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>PHP type name.</returns>\r\n\t\tpublic string GetPhpFieldType()\r\n\t\t{\r\n\t\t\treturn MapFieldTypeName(GetFieldType());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a PHP name of a specified field type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">Field index.</param>\r\n\t\t/// <returns>PHP type name.</returns>\r\n\t\tpublic string GetPhpFieldType(int fieldIndex)\r\n\t\t{\r\n\t\t\treturn MapFieldTypeName(GetFieldType(fieldIndex));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type of specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">An index of the field.</param>\r\n\t\t/// <returns>The type name.</returns>\r\n\t\tpublic string GetFieldType(int fieldIndex)\r\n\t\t{\r\n\t\t\tif (!CheckFieldIndex(fieldIndex)) return null;\r\n\t\t\treturn CurrentSet.DataTypes[fieldIndex];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets length of the current field.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The field length.</returns>\r\n\t\tpublic virtual int GetFieldLength()\r\n\t\t{\r\n\t\t\treturn GetFieldLength(currentFieldIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets length of a specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">An index of the field.</param>\r\n\t\t/// <returns>The field length or 0.</returns>\r\n\t\tpublic virtual int GetFieldLength(int fieldIndex)\r\n\t\t{\r\n\t\t\tDataRow info = GetSchemaRowInfo(fieldIndex);\r\n\t\t\treturn (info != null) ? (int)info[\"ColumnSize\"] : 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of a specified field of the result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"rowIndex\">Row index.</param>\r\n\t\t/// <param name=\"fieldName\">Name of the field.</param>\r\n\t\t/// <returns>The value or a <B>null</B> reference if row or index are out of range.</returns>\r\n\t\tpublic object GetFieldValue(int rowIndex, string fieldName)\r\n\t\t{\r\n\t\t\tif (!CheckRowIndex(rowIndex)) return false;\r\n\r\n\t\t\tfor (int i = 0; i < CurrentSet.Names.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (String.Compare(CurrentSet.Names[i], fieldName, true) == 0)\r\n\t\t\t\t\treturn ((object[])CurrentSet.Rows[rowIndex])[i];\r\n\t\t\t}\r\n\r\n\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"field_not_exists\", fieldName));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of a specified field of the result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"rowIndex\">Row index.</param>\r\n\t\t/// <param name=\"fieldIndex\">Index of the field.</param>\r\n\t\t/// <returns>The value or a <B>null</B> reference if row or index are out of range.</returns>\r\n\t\tpublic object GetFieldValue(int rowIndex, int fieldIndex)\r\n\t\t{\r\n\t\t\tif (!CheckRowIndex(rowIndex) || !CheckFieldIndex(fieldIndex)) return null;\r\n\t\t\treturn ((object[])CurrentSet.Rows[rowIndex])[fieldIndex];\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get custom data associated with current set.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public object GetRowCustomData()\r\n        {\r\n            return CurrentSet.CustomData;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Checks\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a field index is valid for the current result set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fieldIndex\">Field index to check.</param>\r\n\t\t/// <returns>Whether the index is in the range [0, <see cref=\"FieldCount\"/>).</returns>\r\n\t\t/// <exception cref=\"PhpException\">Invalid field index (Warning).</exception>\r\n\t\tpublic bool CheckFieldIndex(int fieldIndex)\r\n\t\t{\r\n\t\t\tif (fieldIndex < 0 || fieldIndex >= FieldCount)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_data_result_field_index\",\r\n\t\t\t\t\t\tfieldIndex, this.TypeName, this.Id));\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a row index is valid for the current result set.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"rowIndex\">Row index to check.</param>\r\n\t\t/// <returns>Whether the index is in the range [0, <see cref=\"RowCount\"/>).</returns>\r\n\t\t/// <exception cref=\"PhpException\">Invalid row index (Warning).</exception>\r\n\t\tpublic bool CheckRowIndex(int rowIndex)\r\n\t\t{\r\n\t\t\tif (rowIndex < 0 || rowIndex >= RowCount)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_data_result_row_index\",\r\n\t\t\t\t  rowIndex, this.TypeName, this.Id));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/ClassLibrary/Data.CLR/Statement.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n \r\n*/\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Collections;\r\nusing System.Collections.Specialized;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Represents a parameterized SQL statement.\r\n\t/// </summary>\r\n\tpublic abstract class PhpDbStatement : PhpResource\r\n\t{\r\n\t\t#region Enum: ParameterType\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP type of the parameter. Parameter value will be converted accordign to this value.\r\n\t\t/// </summary>\r\n\t\tpublic enum ParameterType\r\n\t\t{\r\n\t\t\tInvalid = 0,\r\n\t\t\tString = 1,\r\n\t\t\tDouble = 2,\r\n\t\t\tInteger = 3,\r\n\t\t\tNull = 4,\r\n\t\t\tInfer = 5\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Bindings\r\n\r\n\t\tprivate class Binding // GENERICS: struct\r\n\t\t{\r\n\t\t\tpublic PhpReference/*!*/ Variable;\r\n\t\t\tpublic IDataParameter/*!*/ Parameter;\r\n\t\t\tpublic ParameterType Type;\r\n\r\n\t\t\tpublic Binding(PhpReference/*!*/ variable, IDataParameter/*!*/ parameter, ParameterType type)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(variable != null && parameter != null && type != ParameterType.Invalid);\r\n\r\n\t\t\t\tthis.Variable = variable;\r\n\t\t\t\tthis.Parameter = parameter;\r\n\t\t\t\tthis.Type = type;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate Hashtable Bindings\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_bindings == null)\r\n\t\t\t\t\t_bindings = CollectionsUtil.CreateCaseInsensitiveHashtable();\r\n\r\n\t\t\t\treturn _bindings;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate Hashtable _bindings; // GENERICS: <string, Binding>\r\n\r\n\t\tprivate bool BindingsDefined { get { return _bindings != null; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connection resource associated with the statement.\r\n\t\t/// </summary>\r\n\t\tpublic PhpDbConnection/*!*/ Connection { get { return connection; } }\r\n\t\tprotected PhpDbConnection/*!*/ connection;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of parameterized statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resourceName\">Name of the resource.</param>\r\n\t\t/// <param name=\"connection\">Database connection resource.</param>\r\n\t\tpublic PhpDbStatement(string/*!*/ resourceName, PhpDbConnection/*!*/ connection)\r\n\t\t\t: base(resourceName)\r\n\t\t{\r\n\t\t\tif (connection == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"connection\");\r\n\r\n\t\t\tthis.connection = connection;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a parameter to variable binding.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameter\">SQL parameter.</param>\r\n\t\t/// <param name=\"variable\">PHP variable passed by reference.</param>\r\n\t\t/// <param name=\"type\">Parameter type specified by user.</param>\r\n\t\t/// <returns><B>true</B> if the binding succeeded.</returns>\r\n\t\tpublic bool AddBinding(IDataParameter/*!*/ parameter, PhpReference/*!*/ variable, ParameterType type)\r\n\t\t{\r\n\t\t\tif (parameter == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"parameter\");\r\n\r\n\t\t\tif (variable == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"variable\");\r\n\r\n\t\t\tif (type < ParameterType.String || type > ParameterType.Infer)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"type\");\r\n\r\n\t\t\tif (Bindings.ContainsKey(parameter.ParameterName))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tBindings.Add(parameter.ParameterName, new Binding(variable, parameter, type));\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads data from bound variables to the respective parameters.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An array of parameters with loaded values.</returns>\r\n\t\tpublic IDataParameter[] PrepareParameters()\r\n\t\t{\r\n\t\t\tif (!BindingsDefined) return new IDataParameter[0];\r\n\r\n\t\t\tIDataParameter[] parameters = new IDataParameter[Bindings.Count];\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tforeach (Binding binding in Bindings.Values)\r\n\t\t\t{\r\n\t\t\t\tif (binding.Parameter.Direction == ParameterDirection.InputOutput || binding.Parameter.Direction == ParameterDirection.Input)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (binding.Type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase ParameterType.Double: binding.Parameter.Value = Core.Convert.ObjectToDouble(binding.Variable.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.String: binding.Parameter.Value = Core.Convert.ObjectToString(binding.Variable.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.Integer: binding.Parameter.Value = Core.Convert.ObjectToInteger(binding.Variable.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.Null: binding.Parameter.Value = DBNull.Value; break;\r\n\t\t\t\t\t\tcase ParameterType.Infer: binding.Parameter.Value = binding.Variable.Value; break;\r\n\t\t\t\t\t\tdefault: Debug.Fail(null); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tparameters[i++] = binding.Parameter;\r\n\t\t\t}\r\n\r\n\t\t\treturn parameters;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes parameter values back to the bound variables.\r\n\t\t/// </summary>\r\n\t\tpublic void WriteParametersBack()\r\n\t\t{\r\n\t\t\tif (!BindingsDefined) return;\r\n\r\n\t\t\tforeach (Binding binding in Bindings.Values)\r\n\t\t\t{\r\n\t\t\t\tif (binding.Parameter.Direction != ParameterDirection.Input)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (binding.Type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase ParameterType.Double: binding.Variable.Value = Core.Convert.ObjectToDouble(binding.Parameter.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.String: binding.Variable.Value = Core.Convert.ObjectToString(binding.Parameter.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.Integer: binding.Variable.Value = Core.Convert.ObjectToInteger(binding.Parameter.Value); break;\r\n\t\t\t\t\t\tcase ParameterType.Null: binding.Variable.Value = binding.Parameter.Value; break;\r\n\t\t\t\t\t\tcase ParameterType.Infer: binding.Variable.Value = binding.Parameter.Value; break;\r\n                        default: Debug.Fail(null); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/DateTime.CLR/DateTime.cs",
    "content": "\n/*\n\n Copyright (c) 2004-2006 Tomas Matousek and Pavel Novak.\n\n The use and distribution terms for this software are contained in the file named License.txt,\n which can be found in the root of the Phalanger distribution. By using this software\n in any fashion, you are agreeing to be bound by the terms of this license.\n\n You must not remove this notice from this software.\n\nTODO:\n  - sunset/sunrise calculations changed (PHP 5.1.2)\n  - Added support for exif date format in strtotime(). (PHP 5.1.3)\n*/\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Globalization;\r\nusing System.Text.RegularExpressions;\r\nusing PHP.Core;\nusing PHP.Core.Reflection;\nusing System.ComponentModel;\nusing System.Runtime.Serialization;\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\n\n#if SILVERLIGHT\nusing PHP.CoreCLR;\n#endif\n\nnamespace PHP.Library\n{\n    #region DateTime\n\n    /// <summary>\r\n    /// Representation of date and time.\r\n    /// </summary>\n#if !SILVERLIGHT\n    [Serializable]\n#endif\n    [ImplementsType(\"DateTime\")]\n    public class __PHP__DateTime : PhpObject\n    {\n        #region Constants\n\n        public const string ATOM = PhpDateTime.FormatAtom;// @\"Y-m-d\\TH:i:sP\";\n        public const string COOKIE = PhpDateTime.FormatCookie;// @\"l, d-M-y H:i:s T\";\n        public const string ISO8601 = PhpDateTime.FormatISO8601;// @\"Y-m-d\\TH:i:sO\";\n        public const string RFC822 = PhpDateTime.FormatRFC822;// @\"D, d M y H:i:s O\";\n        public const string RFC850 = PhpDateTime.FormatRFC850;// @\"l, d-M-y H:i:s T\";\n        public const string RFC1036 = PhpDateTime.FormatRFC1036;// @\"D, d M y H:i:s O\";\n        public const string RFC1123 = PhpDateTime.FormatRFC1123;// @\"D, d M Y H:i:s O\";\n        public const string RFC2822 = PhpDateTime.FormatRFC2822;// @\"D, d M Y H:i:s O\";\n        public const string RFC3339 = PhpDateTime.FormatRFC3339;// @\"Y-m-d\\TH:i:sP\";\n        public const string RSS = PhpDateTime.FormatRSS;// @\"D, d M Y H:i:s O\";\n        public const string W3C = PhpDateTime.FormatW3C;// @\"Y-m-d\\TH:i:sP\";\n\n        #endregion\n\n        #region Fields\n\n        // dont see what these are for, no fields/props on php DateTime obj?\n        //public PhpReference date = new PhpSmartReference();\n        //public PhpReference timezone_type = new PhpSmartReference();\n        //public PhpReference timezone = new PhpSmartReference();\n\n        /// <summary>\n        /// Get the date-time value, stored in UTC\n        /// </summary>\n        internal DateTime Time { get; private set; }\n\n        /// <summary>\n        /// Get the time zone for this DateTime object\n        /// </summary>\n        internal TimeZoneInfo TimeZone { get; private set; }\n\n        #endregion\n\n        #region Construction\n\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public __PHP__DateTime(ScriptContext context, bool newInstance)\n            : base(context, newInstance)\n        { }\n\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public __PHP__DateTime(ScriptContext context, DTypeDesc caller)\n            : base(context, caller)\n        { }\n\n#if !SILVERLIGHT\n        /// <summary>Deserializing constructor.</summary>\n        protected __PHP__DateTime(SerializationInfo info, StreamingContext context)\n            : base(info, context)\n        { }\n#endif\n\n        #endregion\n\n        #region Methods\r\n\r\n        private static DateTime StrToTime(string timestr, DateTime time)\r\n        {\r\n            if (string.IsNullOrEmpty(timestr) || timestr.EqualsOrdinalIgnoreCase(\"now\"))\r\n            {\r\n                return DateTime.UtcNow;\r\n            }\r\n\r\n            var result = PhpDateTime.StringToTime(timestr, DateTimeUtils.UtcToUnixTimeStamp(time));\r\n            return result is int ? DateTimeUtils.UnixTimeStampToUtc((int) result) : DateTime.UtcNow;\r\n        }\n\n        // public __construct ([ string $time = \"now\" [, DateTimeZone $timezone = NULL ]] )\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, [Optional]object time, [Optional]object timezone)\n        {\n            if (timezone == Arg.Default || timezone == null)\n            {\n                TimeZone = PhpTimeZone.CurrentTimeZone;\n            }\n            else\n            {\n                var datetimezone = timezone as DateTimeZone;\n                if (datetimezone == null)\n                {\n                    PhpException.InvalidArgumentType(\"timezone\", \"DateTimeZone\");\n                    TimeZone = PhpTimeZone.CurrentTimeZone;\n                }\n                else\n                {\n                    TimeZone = datetimezone.timezone;\n                }\n            }\n\n            if (TimeZone == null)\n            {\n                PhpException.InvalidArgument(\"timezone\");\n                return null;\n            }\n\n            var timestr = (time == Arg.Default) ? \"now\" : PHP.Core.Convert.ObjectToString(time);\r\n            this.Time = StrToTime(timestr, DateTime.UtcNow);\r\n\n            //this.date.Value = this.Time.ToString(\"yyyy-mm-dd HH:mm:ss\");\n            //this.timezone_type.Value = 3;\n            //this.timezone.Value = TimeZone.Id;\n\n            return null;\n        }\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object __construct(object instance, PhpStack stack)\n        {\n            var arg1 = stack.PeekValueOptional(1);\n            var arg2 = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((__PHP__DateTime)instance).__construct(stack.Context, arg1, arg2);\n        }\n\n        [ImplementsMethod]\r\n        public virtual object setTimeZone(ScriptContext/*!*/context, object timezone)\n        {\n            if (timezone == null)\n            {\n                PhpException.ArgumentNull(\"timezone\");\n                return false;\n            }\n\n            var tz = timezone as DateTimeZone;\n            if (tz == null)\n            {\n                PhpException.InvalidArgumentType(\"timezone\", \"DateTimeZone\");\n                return false;\n            }\n\n            this.TimeZone = tz.timezone;\n\n            return this;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setTimeZone(object instance, PhpStack stack)\n        {\n            var tz = stack.PeekValue(1);\n            stack.RemoveFrame();\n\n            return ((__PHP__DateTime)instance).setTimeZone(stack.Context, tz);\n        }\n\n        [ImplementsMethod]\n        public virtual object format(ScriptContext/*!*/context, object format)\n        {\n            if (format == null)\n            {\n                PhpException.ArgumentNull(\"format\");\n                return false;\n            }\n\n            string fm = format.ToString();\n            if (string.IsNullOrEmpty(fm))\n            {\n                return false;\n            }\n\n            return PhpDateTime.FormatDate(fm, this.Time, this.TimeZone);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object format(object instance, PhpStack stack)\n        {\n            var format = stack.PeekValue(1);\n            stack.RemoveFrame();\n\n            return ((__PHP__DateTime)instance).format(stack.Context, format);\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getOffset(ScriptContext/*!*/context)\r\n        {\r\n            if (this.TimeZone == null)\r\n                return false;\r\n\r\n            return (int)this.TimeZone.BaseUtcOffset.TotalSeconds;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getOffset(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((__PHP__DateTime)instance).getOffset(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object modify(ScriptContext/*!*/context, object modify)\r\n        {\r\n            if (modify == null)\r\n            {\r\n                PhpException.ArgumentNull(\"modify\");\r\n                return false;\r\n            }\r\n\r\n            string strtime = PHP.Core.Convert.ObjectToString(modify);\r\n            this.Time = StrToTime(strtime, Time);\r\n\r\n            return this;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object modify(object instance, PhpStack stack)\r\n        {\r\n            var modify = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n\r\n            return ((__PHP__DateTime)instance).modify(stack.Context, modify);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public static object createFromFormat(ScriptContext/*!*/context, object format, object time, [Optional]object timezone)\r\n        {\r\n            // arguments\r\n            var tz = (timezone is DateTimeZone) ? ((DateTimeZone)timezone).timezone : PhpTimeZone.CurrentTimeZone;\r\n            string formatstr = PhpVariable.AsString(format);\r\n            string timestr = PhpVariable.AsString(time);\r\n\r\n            if (formatstr == null)\r\n            {\r\n                PhpException.InvalidArgument(\"format\");\r\n                return false;\r\n            }\r\n\r\n            if (timestr == null)\r\n            {\r\n                PhpException.InvalidArgument(\"time\");\r\n                return false;\r\n            }\r\n\r\n            // create DateTime from format+time\r\n            int i = 0;  // position in <timestr>\r\n            foreach (var c in formatstr)\r\n            {\r\n                switch (c)\r\n                {\r\n                    //case 'd':\r\n                    //case 'j':\r\n                    //    var day = PHP.Library.StrToTime.DateInfo.ParseUnsignedInt(timestr, ref i, 2);\r\n                    //    // ... use day\r\n                    //    break;\r\n                    //case 'F':\r\n                    //case 'M':\r\n                    //    // parse  ...\r\n                    //    break;\r\n                    default:\r\n                        if (i < timestr.Length && timestr[i] == c)\r\n                        {\r\n                            // match\r\n                            i++;\r\n                        }\r\n                        else\r\n                        {\r\n                            // not match\r\n                            PhpException.InvalidArgument(\"time\");   // time not matching format\r\n                            return false;\r\n                        }\r\n                        break;\r\n                }\r\n            }\r\n\r\n            if (i < timestr.Length)\r\n            {\r\n                PhpException.InvalidArgument(\"time\");   // time not matching format\r\n                return false;\r\n            }\r\n\r\n            ////\r\n            //return new __PHP__DateTime(context, true)\r\n            //{\r\n            //     //Time = new DateTime(year, month, day, hour, minute, second, millisecond),\r\n            //     TimeZone = tz,\r\n            //};\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object createFromFormat(object instance, PhpStack stack)\r\n        {\r\n            var format = stack.PeekValue(1);\r\n            var time = stack.PeekValue(2);\r\n            var timezone = stack.PeekValueOptional(3);\r\n            stack.RemoveFrame();\r\n            return createFromFormat(stack.Context, format, time, timezone);\r\n        }\n\n        [ImplementsMethod]\r\n        public virtual object setDate(ScriptContext/*!*/context, object year, object month, object day)\r\n        {\r\n            var y = PHP.Core.Convert.ObjectToInteger(year);\r\n            var m = PHP.Core.Convert.ObjectToInteger(month);\r\n            var d = PHP.Core.Convert.ObjectToInteger(day);\r\n            try\r\n            {\r\n                var time = TimeZoneInfo.ConvertTimeFromUtc(Time, TimeZone);\r\n                this.Time = TimeZoneInfo.ConvertTimeToUtc(\r\n                    new DateTime(\r\n                        y, m, d,\r\n                        time.Hour, time.Minute, time.Second,\r\n                        time.Millisecond\r\n                    ),\r\n                    TimeZone\r\n                );\r\n            }\r\n            catch (ArgumentOutOfRangeException e)\r\n            {\r\n                throw new ArgumentOutOfRangeException(string.Format(\"The date {0}-{1}-{2} is not valid.\", y, m, d), e);\r\n            }\r\n\r\n\r\n            return this;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setDate(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            var arg2 = stack.PeekValue(2);\r\n            var arg3 = stack.PeekValue(3);\r\n            stack.RemoveFrame();\r\n            return ((__PHP__DateTime)instance).setDate(stack.Context, arg1, arg2, arg3);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object setTime(ScriptContext/*!*/context, object hour, object minute, object second)\r\n        {\r\n            var h = PHP.Core.Convert.ObjectToInteger(hour);\r\n            var m = PHP.Core.Convert.ObjectToInteger(minute);\r\n            var s = PHP.Core.Convert.ObjectToInteger(second);\r\n            try\r\n            {\r\n                var time = TimeZoneInfo.ConvertTimeFromUtc(Time, TimeZone);\r\n                this.Time = TimeZoneInfo.ConvertTimeToUtc(\r\n                    new DateTime(time.Year, time.Month, time.Day, h, m, s),\r\n                    TimeZone\r\n                );\r\n            }\r\n            catch (ArgumentOutOfRangeException e)\r\n            {\r\n                throw new ArgumentOutOfRangeException(string.Format(\"The time {0}:{1}:{2} is not valid.\", h, m, s), e);\r\n            }\r\n\r\n\r\n            return this;\r        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setTime(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            var arg2 = stack.PeekValue(2);\r\n            var arg3 = stack.PeekValue(3);\r\n            stack.RemoveFrame();\r\n\r\n            return ((__PHP__DateTime)instance).setTime(stack.Context, arg1, arg2, arg3);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getTimestamp(ScriptContext/*!*/context)\r\n        {\r\n            return DateTimeUtils.UtcToUnixTimeStamp(Time);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getTimestamp(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n\r\n            return ((__PHP__DateTime)instance).getTimestamp(stack.Context);\r\n        }\r\n\r\n        public override int CompareTo(object obj, System.Collections.IComparer comparer)\r\n        {\r\n            var other = obj as __PHP__DateTime;\r\n            return other != null\r\n                ? Time.CompareTo(other.Time)\r\n                : base.CompareTo(obj, comparer);\r\n        }\n\n        #endregion\n    }\n\n    #endregion\n\n\t/// <summary>\n\t/// Functions for date and time manipulation.\n\t/// </summary>\n\t/// <threadsafety static=\"true\"/>\n\t[ImplementsExtension(LibraryDescriptor.ExtDate)]\n\tpublic static class PhpDateTime\n\t{\n\t\t/// <summary>\n\t\t/// Gets the current local time with respect to the current PHP time zone.\n\t\t/// </summary>\n\t\tpublic static DateTime Now\n\t\t{\n\t\t\tget\n\t\t\t{\n                return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, PhpTimeZone.CurrentTimeZone);\n\t\t\t}\n\t\t}\n\n\t\t#region Constants\n\n\t\t[ImplementsConstant(\"DATE_ATOM\")]\n\t\tpublic const string FormatAtom = @\"Y-m-d\\TH:i:sP\";\n\n\t\t[ImplementsConstant(\"DATE_COOKIE\")]\n\t\tpublic const string FormatCookie = @\"D, d M Y H:i:s T\";\n\n\t\t[ImplementsConstant(\"DATE_ISO8601\")]\n\t\tpublic const string FormatISO8601 = @\"Y-m-d\\TH:i:sO\";\n\n\t\t[ImplementsConstant(\"DATE_RFC822\")]\n        public const string FormatRFC822 = @\"D, d M y H:i:s O\";\n\n\t\t[ImplementsConstant(\"DATE_RFC850\")]\n\t\tpublic const string FormatRFC850 = @\"l, d-M-y H:i:s T\";\n\n\t\t[ImplementsConstant(\"DATE_RFC1123\")]\n\t\tpublic const string FormatRFC1123 = @\"D, d M Y H:i:s T\";\n\n\t\t[ImplementsConstant(\"DATE_RFC1036\")]\n\t\tpublic const string FormatRFC1036 = @\"l, d-M-y H:i:s T\";\n\n\t\t[ImplementsConstant(\"DATE_RFC2822\")]\n\t\tpublic const string FormatRFC2822 = @\"D, d M Y H:i:s T\";\n\n        [ImplementsConstant(\"DATE_RFC3339\")]\n        public const string FormatRFC3339 = @\"Y-m-d\\TH:i:sP\";\n\n\t\t[ImplementsConstant(\"DATE_RSS\")]\n\t\tpublic const string FormatRSS = @\"D, d M Y H:i:s T\";\n\n\t\t[ImplementsConstant(\"DATE_W3C\")]\n\t\tpublic const string FormatW3C = @\"Y-m-d\\TH:i:sO\";\n\n\t\t#endregion\r\n\r\n        #region date_format, date_create, date_offset_get,  date_modify\r\n\r\n        [ImplementsFunction(\"date_format\")]\n        [return: CastToFalse]\n        public static object DateFormat(__PHP__DateTime datetime, string format)\n        {\n            // TODO: format it properly\n            return FormatDate(format, datetime.Time, datetime.TimeZone);\n        }\n\n        /// <summary>\n        /// Alias of new <see cref=\"DateTime\"/>\n        /// </summary>\n        [ImplementsFunction(\"date_create\")]\n        [return: CastToFalse]\n        public static object DateCreate(ScriptContext/*!*/context)\n        {\n            return DateCreate(context, null, null);\n        }\n\n        /// <summary>\n        /// Alias of new <see cref=\"DateTime\"/>\n        /// </summary>\n        [ImplementsFunction(\"date_create\")]\n        [return: CastToFalse]\n        public static object DateCreate(ScriptContext/*!*/context, string time)\n        {\n            return DateCreate(context, time, null);\n        }\n\n        /// <summary>\n        /// Alias of new <see cref=\"DateTime\"/>\n        /// </summary>\n        [ImplementsFunction(\"date_create\")]\n        [return: CastToFalse]\n        public static object DateCreate(ScriptContext/*!*/context, string time, DateTimeZone timezone)\n        {\n            var dt = new __PHP__DateTime(context, true);\n            dt.__construct(context, time, timezone);\n            return dt;\n        }\r\n\r\n        /// <summary>\r\n        /// Returns new DateTime object formatted according to the specified format.\r\n        /// </summary>\r\n        /// <param name=\"context\"><see cref=\"ScriptContext\"/> reference.</param>\r\n        /// <param name=\"format\">The format that the passed in string should be in.</param>\r\n        /// <param name=\"time\">String representing the time.</param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"date_create_from_format\")]\r\n        [return: CastToFalse]\r\n        public static __PHP__DateTime DateCreateFromFormat(ScriptContext/*!*/context, string format, string time)\r\n        {\r\n            return __PHP__DateTime.createFromFormat(context, format, time, Arg.Default) as __PHP__DateTime;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns new DateTime object formatted according to the specified format.\r\n        /// </summary>\r\n        /// <param name=\"context\"><see cref=\"ScriptContext\"/> reference.</param>\r\n        /// <param name=\"format\">The format that the passed in string should be in.</param>\r\n        /// <param name=\"time\">String representing the time.</param>\r\n        /// <param name=\"timezone\">A DateTimeZone object representing the desired time zone.</param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"date_create_from_format\")]\r\n        [return:CastToFalse]\r\n        public static __PHP__DateTime DateCreateFromFormat(ScriptContext/*!*/context, string format, string time, DateTimeZone timezone)\r\n        {\r\n            return __PHP__DateTime.createFromFormat(context, format, time, timezone) as __PHP__DateTime;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Alias of DateTime::getOffset().\r\n        /// </summary>\r\n        [ImplementsFunction(\"date_offset_get\")]\r\n        [return: CastToFalse]\r\n        public static int DateOffsetGet(__PHP__DateTime datetime)\r\n        {\r\n            if (datetime == null)\r\n            {\r\n                PhpException.ArgumentNull(\"datetime\");\r\n                return -1;\r\n            }\r\n\r\n            if (datetime.TimeZone == null)\r\n                return -1;\r\n\r\n            return (int)datetime.TimeZone.BaseUtcOffset.TotalSeconds;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Alias of DateTime::modify().\r\n        /// </summary>\r\n        [ImplementsFunction(\"date_modify\")]\r\n        [return: CastToFalse]\r\n        public static __PHP__DateTime DateModify(ScriptContext/*!*/context, __PHP__DateTime datetime, string modify)\r\n        {\r\n            return datetime.modify(context, modify) as __PHP__DateTime;\r\n        }\n\n        #endregion\n\n        #region date, idate, gmdate\n\n        /// <summary>\n\t\t/// Returns a string formatted according to the given format string using the current local time.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <returns>Formatted string.</returns>\n\t\t[ImplementsFunction(\"date\")]\n\t\tpublic static string FormatDate(string format)\n\t\t{\n\t\t\treturn FormatDate(format, DateTime.UtcNow, PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string formatted according to the given format string using the given integer timestamp.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <param name=\"timestamp\">Nuber of seconds since 1970 specifying a date.</param>\n\t\t/// <returns>Formatted string.</returns>\n\t\t[ImplementsFunction(\"date\")]\n\t\tpublic static string FormatDate(string format, int timestamp)\n\t\t{\n\t\t\treturn FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Identical to the date() function except that the time returned is Greenwich Mean Time (GMT)\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <returns>Formatted string.</returns>\n\t\t[ImplementsFunction(\"gmdate\")]\n\t\tpublic static string FormatUtcDate(string format)\n\t\t{\n\t\t\treturn FormatDate(format, DateTime.UtcNow, DateTimeUtils.UtcTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Identical to the date() function except that the time returned is Greenwich Mean Time (GMT)\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <param name=\"timestamp\">Nuber of seconds since 1970 specifying a date.</param>\n\t\t/// <returns>Formatted string.</returns>\n\t\t[ImplementsFunction(\"gmdate\")]\n\t\tpublic static string FormatUtcDate(string format, int timestamp)\n\t\t{\n\t\t\treturn FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a part of current time.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <returns>Part of the date, e.g. month or hours.</returns>\n\t\t[ImplementsFunction(\"idate\")]\n\t\tpublic static int GetDatePart(string format)\n\t\t{\n\t\t\tif (format == null || format.Length != 1)\n\t\t\t\tPhpException.InvalidArgument(\"format\");\n\n\t\t\treturn GetDatePart(format[0], DateTime.UtcNow, PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a part of a specified timestamp.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format definition for output.</param>\n\t\t/// <param name=\"timestamp\">Nuber of seconds since 1970 specifying a date.</param>\n\t\t/// <returns>Part of the date, e.g. month or hours.</returns>\n\t\t[ImplementsFunction(\"idate\")]\n\t\tpublic static int GetDatePart(string format, int timestamp)\n\t\t{\n\t\t\tif (format == null || format.Length != 1)\n\t\t\t\tPhpException.InvalidArgument(\"format\");\n\n\t\t\treturn GetDatePart(format[0], DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\tprivate static int GetDatePart(char format, DateTime utc, TimeZoneInfo/*!*/ zone)\n\t\t{\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);// zone.ToLocalTime(utc);\n\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\t\tcase 'B':\n\t\t\t\t\t// Swatch Beat (Internet Time) - 000 through 999\n\t\t\t\t\treturn GetSwatchBeat(utc);\n\n\t\t\t\tcase 'd':\n\t\t\t\t\t// Day of the month\n\t\t\t\t\treturn local.Day;\n\n\t\t\t\tcase 'g':\n\t\t\t\tcase 'h':\n\t\t\t\t\t// 12-hour format:\n\t\t\t\t\treturn (local.Hour == 12) ? 12 : local.Hour % 12;\n\n\t\t\t\tcase 'G':\n\t\t\t\tcase 'H':\n\t\t\t\t\t// 24-hour format:\n\t\t\t\t\treturn local.Hour;\n\n\t\t\t\tcase 'i':\n\t\t\t\t\treturn local.Minute;\n\n\t\t\t\tcase 'I':\n\t\t\t\t\treturn zone.IsDaylightSavingTime(local) ? 1 : 0;\n\n\t\t\t\tcase 'j':\n\t\t\t\t\tgoto case 'd';\n\n\t\t\t\tcase 'L':\n\t\t\t\t\treturn DateTime.IsLeapYear(local.Year) ? 1 : 0;\n\n\t\t\t\tcase 'm':\n\t\t\t\t\treturn local.Month;\n\n\t\t\t\tcase 'n':\n\t\t\t\t\tgoto case 'm';\n\n\t\t\t\tcase 's':\n\t\t\t\t\treturn local.Second;\n\n\t\t\t\tcase 't':\n\t\t\t\t\treturn DateTime.DaysInMonth(local.Year, local.Month);\n\n\t\t\t\tcase 'U':\n\t\t\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(utc);\n\n\t\t\t\tcase 'w':\n\t\t\t\t\t// day of the week - 0 (for Sunday) through 6 (for Saturday)\n\t\t\t\t\treturn (int)local.DayOfWeek;\n\n\t\t\t\tcase 'W':\n\t\t\t\t\t{\n\t\t\t\t\t\t// ISO-8601 week number of year, weeks starting on Monday:\n\t\t\t\t\t\tint week, year;\n\t\t\t\t\t\tGetIsoWeekAndYear(local, out week, out year);\n\t\t\t\t\t\treturn week;\n\t\t\t\t\t}\n\n\t\t\t\tcase 'y':\n\t\t\t\t\treturn local.Year % 100;\n\n\t\t\t\tcase 'Y':\n\t\t\t\t\treturn local.Year;\n\n\t\t\t\tcase 'z':\n\t\t\t\t\treturn local.DayOfYear - 1;\n\n\t\t\t\tcase 'Z':\n\t\t\t\t\treturn (int)zone.GetUtcOffset(local).TotalSeconds;\n\n\t\t\t\tdefault:\n\t\t\t\t\tPhpException.InvalidArgument(\"format\");\n\t\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n        internal static string FormatDate(string format, DateTime utc, TimeZoneInfo zone)\n        {\n            Debug.Assert(zone != null);\n\n            if (format == null)\n                return string.Empty;\n\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);\n\n            // here we are creating output string\n            StringBuilder result = new StringBuilder();\n            bool escape = false;\n\n            foreach (char ch in format)\n            {\n                if (escape)\n                {\n                    result.Append(ch);\n                    escape = false;\n                    continue;\n                }\n\n                switch (ch)\n                {\n                    case 'a':\n                        // Lowercase Ante meridiem and Post meridiem - am or pm\n                        result.Append(local.ToString(\"tt\", DateTimeFormatInfo.InvariantInfo).ToLowerInvariant());\n                        break;\n\n                    case 'A':\n                        // Uppercase Ante meridiem and Post meridiem - AM or PM\n                        result.Append(local.ToString(\"tt\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'B':\n                        // Swatch Beat (Internet Time) - 000 through 999\n                        result.AppendFormat(\"{0:000}\", GetSwatchBeat(utc));\n                        break;\n\n                    case 'c':\n                        {\n                            // ISO 8601 date (added in PHP 5) 2004-02-12T15:19:21+00:00\n                            result.Append(local.ToString(\"yyyy-MM-dd'T'HH:mm:ss\", DateTimeFormatInfo.InvariantInfo));\n\n                            TimeSpan offset = zone.GetUtcOffset(local);\n                            result.AppendFormat(\"{0}{1:00}:{2:00}\", (offset.Ticks < 0) ? \"\"/*offset.Hours already < 0*/ : \"+\", offset.Hours, offset.Minutes);\n                            break;\n                        }\n\n                    case 'd':\n                        // Day of the month, 2 digits with leading zeros - 01 to 31\n                        result.Append(local.ToString(\"dd\", DateTimeFormatInfo.InvariantInfo));\n                        break;\r\n\r\n                    case 'e':\r\n                        // Timezone identifier (added in PHP 5.1.0)\r\n                        result.Append(zone.Id);\r\n                        break;\r\n\r\n                    case 'D':\n                        // A textual representation of a day, three letters - Mon through Sun\n                        result.Append(local.ToString(\"ddd\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'F':\n                        // A full textual representation of a month, such as January or March - January through December\n                        result.Append(local.ToString(\"MMMM\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'g':\n                        // 12-hour format of an hour without leading zeros - 1 through 12\n                        result.Append(local.ToString(\"%h\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'G':\n                        // 24-hour format of an hour without leading zeros - 0 through 23\n                        result.Append(local.ToString(\"%H\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'h':\n                        // 12-hour format of an hour with leading zeros - 01 through 12\n                        result.Append(local.ToString(\"hh\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'H':\n                        // 24-hour format of an hour with leading zeros - 00 through 23\n                        result.Append(local.ToString(\"HH\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'i':\n                        // Minutes with leading zeros - 00 to 59\n                        result.Append(local.ToString(\"mm\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'I':\n                        // Whether or not the date is in daylights savings time - 1 if Daylight Savings Time, 0 otherwise.\n                        result.Append(zone.IsDaylightSavingTime(local) ? \"1\" : \"0\");\n                        break;\n\n                    case 'j':\n                        // Day of the month without leading zeros - 1 to 31\n                        result.Append(local.ToString(\"%d\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'l':\n                        // A full textual representation of the day of the week - Sunday through Saturday\n                        result.Append(local.ToString(\"dddd\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'L':\n                        // Whether it's a leap year - 1 if it is a leap year, 0 otherwise.\n                        result.Append(DateTime.IsLeapYear(local.Year) ? \"1\" : \"0\");\n                        break;\n\n                    case 'm':\n                        // Numeric representation of a month, with leading zeros - 01 through 12\n                        result.Append(local.ToString(\"MM\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'M':\n                        // A short textual representation of a month, three letters - Jan through Dec\n                        result.Append(local.ToString(\"MMM\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'n':\n                        // Numeric representation of a month, without leading zeros - 1 through 12\n                        result.Append(local.ToString(\"%M\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'N':\n                        // ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)\n                        int day_of_week = (int)local.DayOfWeek;\n                        result.Append(day_of_week == 0 ? 7 : day_of_week);\n                        break;\n\n                    case 'o':\n                        {\n                            // ISO-8601 year number. This has the same value as Y, except that if the ISO\n                            // week number (W) belongs to the previous or next year, that year is used instead.\n                            // (added in PHP 5.1.0)\n                            int week, year;\n                            GetIsoWeekAndYear(local, out week, out year);\n                            result.Append(year);\n                            break;\n                        }\n\n                    case 'O':\n                        {\n                            // Difference to Greenwich time (GMT) in hours Example: +0200\n                            TimeSpan offset = zone.GetUtcOffset(local);\r\n                            string sign = (offset.Ticks < 0) ? ((offset.Hours < 0) ? string.Empty : \"-\") : \"+\";\r\n                            result.AppendFormat(\"{0}{1:00}{2:00}\", sign, offset.Hours, offset.Minutes);\n                            break;\n                        }\n\n                    case 'P':\n                        {\n                            // same as 'O' but with the extra colon between hours and minutes\n                            // Difference to Greenwich time (GMT) in hours Example: +02:00\n                            TimeSpan offset = zone.GetUtcOffset(local);\r\n                            string sign = (offset.Ticks < 0) ? ((offset.Hours < 0) ? string.Empty : \"-\") : \"+\";\r\n                            result.AppendFormat(\"{0}{1:00}:{2:00}\", sign, offset.Hours, offset.Minutes);\n                            break;\n                        }\n\n                    case 'r':\n                        // RFC 822 formatted date Example: Thu, 21 Dec 2000 16:01:07 +0200\n                        result.Append(local.ToString(\"ddd, dd MMM yyyy H:mm:ss \", DateTimeFormatInfo.InvariantInfo));\n                        goto case 'O';\n\n                    case 's':\n                        // Seconds, with leading zeros - 00 through 59\n                        result.Append(local.ToString(\"ss\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'S':\n                        result.Append(GetDayNumberSuffix(local.Day));\n                        break;\n\n                    case 't':\n                        // Number of days in the given month 28 through 31\n                        result.Append(DateTime.DaysInMonth(local.Year, local.Month));\n                        break;\n\n                    case 'T':\n                        // Timezone setting of this machine Examples: EST, MDT ...\n                        result.Append(zone.IsDaylightSavingTime(local) ? zone.DaylightName : zone.StandardName);\n                        break;\n\n                    case 'U':\n                        // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)\n                        result.Append(DateTimeUtils.UtcToUnixTimeStamp(utc));\n                        break;\n\n                    case 'u':\n                        // Microseconds (added in PHP 5.2.2)\n                        result.Append((utc.Millisecond / 1000).ToString(\"D6\"));\n                        break;\n\n                    case 'w':\n                        // Numeric representation of the day of the week - 0 (for Sunday) through 6 (for Saturday)\n                        result.Append((int)local.DayOfWeek);\n                        break;\n\n                    case 'W':\n                        {\n                            // ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0) Example: 42 (the 42nd week in the year)\n                            int week, year;\n                            GetIsoWeekAndYear(local, out week, out year);\n                            result.Append(week);\n                            break;\n                        }\n\n                    case 'y':\n                        // A two digit representation of a year Examples: 99 or 03\n                        result.Append(local.ToString(\"yy\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'Y':\n                        // A full numeric representation of a year, 4 digits Examples: 1999 or 2003\n                        result.Append(local.ToString(\"yyyy\", DateTimeFormatInfo.InvariantInfo));\n                        break;\n\n                    case 'z':\n                        // The day of the year starting from 0\n                        result.Append(local.DayOfYear - 1);\n                        break;\n\n                    case 'Z':\n                        // TimeZone offset in seconds:\n                        result.Append((int)zone.GetUtcOffset(local).TotalSeconds);\n                        break;\n\n                    case '\\\\':\n                        // Escape char. Output next character directly to the result.\n                        escape = true;\n                        break;\n\n                    default:\n                        // unrecognized character, print it as-is.\n                        result.Append(ch);\n                        break;\n                }\n            }\n\n            if (escape)\n                result.Append('\\\\');\n\n            return result.ToString();\n        }\n\n\t\t/// <summary>\n\t\t/// Converts a given <see cref=\"DateTime\"/> to the ISO week of year number and ISO year number.\n\t\t/// </summary>\n\t\t/// <param name=\"dt\">The <see cref=\"DateTime\"/>.</param>\n\t\t/// <param name=\"week\">The ISO week of year number.</param>\n\t\t/// <param name=\"year\">The ISO year number.</param>\n\t\tprivate static void GetIsoWeekAndYear(DateTime dt, out int week, out int year)\n\t\t{\n\t\t\tint weekDay = (int)dt.DayOfWeek - 1; // Day of week (0 for Monday .. 6 for Sunday)\n\t\t\tint yearDay = dt.DayOfYear;     // Days since January 1st (1 .. 367)\n\t\t\tint firstDay = (7 + weekDay - yearDay % 7 + 1) % 7;\t// Weekday of 1st January\n\n\t\t\tif ((yearDay <= 7 - firstDay) && firstDay > 3)\n\t\t\t{\n\t\t\t\t// Week is a last year week (52 or 53)\n\t\t\t\tweek = (firstDay == 4 || (firstDay == 5 && DateTime.IsLeapYear(dt.Year - 1))) ? 53 : 52;\n\t\t\t\tyear = dt.Year - 1;\n\t\t\t}\n\t\t\telse if ((DateTime.IsLeapYear(dt.Year) ? 366 : 365) - yearDay < 3 - weekDay)\n\t\t\t{\n\t\t\t\t// Week is a next year week (1)\n\t\t\t\tweek = 1;\n\t\t\t\tyear = dt.Year + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Normal week\n\t\t\t\tweek = (yearDay + 6 - weekDay + firstDay) / 7;\n\t\t\t\tif (firstDay > 3) week--;\n\t\t\t\tyear = dt.Year;\n\t\t\t}\n\t\t}\n\n\t\tprivate static int GetSwatchBeat(DateTime utc)\n\t\t{\n\t\t\tint seconds = DateTimeUtils.UtcToUnixTimeStamp(utc);\n\t\t\tint beat = (int)(((seconds - (seconds - ((seconds % 86400) + 3600))) * 10) / 864) % 1000;\n\t\t\treturn (beat < 0) ? beat + 1000 : beat;\n\t\t}\n\n        /// <summary>\n        /// English ordinal suffix for the day of the month, 2 characters - st, nd, rd or th.\n        /// </summary>\n        /// <param name=\"DayNumber\">Number of the day. In [1..31].</param>\n        /// <returns>st, nd, rd or th</returns>\n        private static string GetDayNumberSuffix(int DayNumber /* = 1..31 */)\n        {\n            Debug.Assert(DayNumber >= 1 && DayNumber <= 31);\n\n            int DayNumber10 = DayNumber % 10;\n\n            if (DayNumber10 == 1) { if (DayNumber/*%100*/ != 11) return \"st\"; }\n            else if (DayNumber10 == 2) { if (DayNumber/*%100*/ != 12) return \"nd\"; }\n            else if (DayNumber10 == 3) { if (DayNumber/*%100*/ != 13) return \"rd\"; }\n\n            return \"th\";\n        }\n\n\t\t#endregion\n\n        #region strftime, gmstrftime\n\n        /// <summary>\n\t\t/// Returns a string formatted according to the given format string using the current local time.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format of the string.</param>\n\t\t/// <returns>Formatted string representing date and time.</returns>\n\t\t[ImplementsFunction(\"strftime\")]\n\t\tpublic static string FormatTime(string format)\n\t\t{\n\t\t\treturn FormatTime(format, DateTime.UtcNow, PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string formatted according to the given format string using the given timestamp.\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format of the string.</param>\n\t\t/// <param name=\"timestamp\">Number of seconds since 1970 representing the time to format.</param>\n\t\t/// <returns>Formatted string representing date and time.</returns>\n\t\t[ImplementsFunction(\"strftime\")]\n\t\tpublic static string FormatTime(string format, int timestamp)\n\t\t{\n\t\t\treturn FormatTime(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Behaves the same as <c>strftime</c> except that the time returned is Greenwich Mean Time (GMT).\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format of the string.</param>\n\t\t/// <returns>Formatted string representing date and time.</returns>\n\t\t[ImplementsFunction(\"gmstrftime\")]\n\t\tpublic static string FormatUtcTime(string format)\n\t\t{\n\t\t\treturn FormatTime(format, DateTime.UtcNow, DateTimeUtils.UtcTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Behaves the same as <c>strftime</c> except that the time returned is Greenwich Mean Time (GMT).\n\t\t/// </summary>\n\t\t/// <param name=\"format\">Format of the string.</param>\n\t\t/// <param name=\"timestamp\">Number of seconds since 1970 representing the time to format.</param>\n\t\t/// <returns>Formatted string representing date and time.</returns>\n\t\t[ImplementsFunction(\"gmstrftime\")]\n\t\tpublic static string FormatUtcTime(string format, int timestamp)\n\t\t{\n\t\t\treturn FormatTime(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Implementation of <see cref=\"FormatTime(string,int)\"/> function.\n\t\t/// </summary>\n\t\tprivate static string FormatTime(string format, DateTime utc, TimeZoneInfo/*!*/ zone)\n\t\t{\n\t\t\t// Possibly bug in framework? \"h\" and \"hh\" just after midnight shows 12, not 0\n\t\t\tif (format == null) return \"\";\n\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);// zone.ToLocalTime(utc);\n\t\t\tDateTimeFormatInfo info = Locale.GetCulture(Locale.Category.Time).DateTimeFormat;\n\n\t\t\tStringBuilder result = new StringBuilder();\n\n\t\t\tbool specialChar = false;\n\n\t\t\tforeach (char ch in format)\n\t\t\t{\n\t\t\t\tif (!specialChar)\n\t\t\t\t{\n\t\t\t\t\tif (ch == '%')\n\t\t\t\t\t\tspecialChar = true;\n\t\t\t\t\telse\n\t\t\t\t\t\tresult.Append(ch);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// we have special character\n\t\t\t\tswitch (ch)\n\t\t\t\t{\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t// abbreviated weekday name according to the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(\"ddd\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\t// full weekday name according to the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(\"dddd\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t// abbreviated month name according to the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(\"MMM\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'B':\n\t\t\t\t\t\t// full month name according to the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(\"MMMM\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t// preferred date and time representation for the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\t// century number (the year divided by 100 and truncated to an integer, range 00 to 99)\n\t\t\t\t\t\tresult.Append(local.Year / 100);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t// day of the month as a decimal number (range 01 to 31)\n\t\t\t\t\t\tresult.Append(local.ToString(\"dd\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'D':\n\t\t\t\t\t\t// same as %m/%d/%y\n\t\t\t\t\t\tresult.Append(local.ToString(\"MM\\\\/dd\\\\/yy\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'e':\n\t\t\t\t\t\t// day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')\n\t\t\t\t\t\tresult.AppendFormat(\"{0,2}\", local.Day);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'g':\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// like %G, but without the century.\n\t\t\t\t\t\t\tint week, year;\n\t\t\t\t\t\t\tGetIsoWeekAndYear(local, out week, out year);\n\t\t\t\t\t\t\tresult.AppendFormat(\"{0:00}\", year % 100);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\tcase 'G': // The 4-digit year corresponding to the ISO week number.\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint week, year;\n\t\t\t\t\t\t\tGetIsoWeekAndYear(local, out week, out year);\n\t\t\t\t\t\t\tresult.AppendFormat(\"{0:0000}\", year);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\tcase 'h':\n\t\t\t\t\t\t// same as %b\n\t\t\t\t\t\tgoto case 'b';\n\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\t// hour as a decimal number using a 24-hour clock (range 00 to 23)\n\t\t\t\t\t\tresult.Append(local.ToString(\"HH\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'I':\n\t\t\t\t\t\t// hour as a decimal number using a 12-hour clock (range 01 to 12)\n\t\t\t\t\t\tresult.Append(local.ToString(\"hh\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'j':\n\t\t\t\t\t\t// day of the year as a decimal number (range 001 to 366)\n\t\t\t\t\t\tresult.AppendFormat(\"{0:000}\", local.DayOfYear);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t// month as a decimal number (range 01 to 12)\n\t\t\t\t\t\tresult.Append(local.ToString(\"MM\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t// minute as a decimal number\n\t\t\t\t\t\tresult.Append(local.ToString(\"mm\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t// newline character\n\t\t\t\t\t\tresult.Append('\\n');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\t// either `am' or `pm' according to the given time value,\n\t\t\t\t\t\t// or the corresponding strings for the current locale\n\t\t\t\t\t\tresult.Append(local.ToString(\"tt\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'r':\n\t\t\t\t\t\t// time in a.m. and p.m. notation\n\t\t\t\t\t\tresult.Append(local.ToString(\"hh:mm:ss tt\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'R':\n\t\t\t\t\t\t// time in 24 hour notation\n\t\t\t\t\t\tresult.Append(local.ToString(\"H:mm:ss\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'S':\n\t\t\t\t\t\t// second as a decimal number\n\t\t\t\t\t\tresult.Append(local.ToString(\"ss\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\t// tab character\n\t\t\t\t\t\tresult.Append('\\t');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'T':\n\t\t\t\t\t\t// current time, equal to %H:%M:%S\n\t\t\t\t\t\tresult.Append(local.ToString(\"HH:mm:ss\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\t// weekday as a decimal number [1,7], with 1 representing Monday\n\t\t\t\t\t\tresult.Append(((int)local.DayOfWeek + 5) % 7 + 1);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'U':\n\t\t\t\t\t\t// week number of the current year as a decimal number, starting with the first\n\t\t\t\t\t\t// Sunday as the first day of the first week (formula taken from GlibC 2.3.5):\n\t\t\t\t\t\tresult.AppendFormat(\"{0:00}\", (local.DayOfYear - 1 - (int)local.DayOfWeek + 7) / 7);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'V':\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// The ISO 8601:1988 week number of the current year\n\t\t\t\t\t\t\tint week, year;\n\t\t\t\t\t\t\tGetIsoWeekAndYear(local, out week, out year);\n\t\t\t\t\t\t\tresult.AppendFormat(\"{0:00}\", week);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t// day of the week as a decimal, Sunday being 0\n\t\t\t\t\t\tresult.Append((int)local.DayOfWeek);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'W':\n\t\t\t\t\t\t// week number of the current year as a decimal number, starting with the first\n\t\t\t\t\t\t// Monday as the first day of the first week (formula taken from GlibC 2.3.5):\n\t\t\t\t\t\tresult.AppendFormat(\"{0:00}\", (local.DayOfYear - 1 - ((int)local.DayOfWeek - 1 + 7) % 7 + 7) / 7);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'x':\n\t\t\t\t\t\t// preferred date representation for the current locale without the time\n\t\t\t\t\t\tresult.Append(local.ToString(\"d\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'X':\n\t\t\t\t\t\t// preferred time representation for the current locale without the date\n\t\t\t\t\t\tresult.Append(local.ToString(\"T\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t// year as a decimal number without a century (range 00 to 99)\n\t\t\t\t\t\tresult.Append(local.ToString(\"yy\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Y':\n\t\t\t\t\t\t// year as a decimal number including the century\n\t\t\t\t\t\tresult.Append(local.ToString(\"yyyy\", info));\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'z':\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\tresult.Append(zone.IsDaylightSavingTime(local) ? zone.DaylightName : zone.StandardName);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '%':\n\t\t\t\t\t\tresult.Append('%');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tspecialChar = false;\n\t\t\t}\n\n\t\t\tif (specialChar)\n\t\t\t\tresult.Append('%');\n\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region NS: strptime\n\n\t\t//\t\t[ImplementsFunction(\"strptime\")]\n\t\t//\t\tpublic static PhpArray StringToTime(string datetime,string format)\n\t\t//\t\t{\n\t\t//\n\t\t//\t\t}\n\n\t\t#endregion\n\n\t\t#region gmmktime\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime()\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(utc_now.Hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour)\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute)\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(hour, minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute, int second)\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(hour, minute, second, utc_now.Month, utc_now.Day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute, int second, int month)\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(hour, minute, second, month, utc_now.Day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute, int second, int month, int day)\n\t\t{\n\t\t\tDateTime utc_now = DateTime.UtcNow;\n\t\t\treturn MakeUtcTime(hour, minute, second, month, day, utc_now.Year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute, int second, int month, int day, int year, int dummy)\n\t\t{\n\t\t\t// According to PHP manual daylight savings time parameter ignored\n\t\t\treturn MakeUtcTime(hour, minute, second, month, day, year);\n\t\t}\n\n\t\t[ImplementsFunction(\"gmmktime\")]\n\t\tpublic static int MakeUtcTime(int hour, int minute, int second, int month, int day, int year)\n\t\t{\n\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(MakeDateTime(hour, minute, second, month, day, year));\n\t\t}\n\n\t\t#endregion\n\n\t\t#region mktime\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for current time.\n\t\t/// </summary>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime()\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(now.Hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour which is specified and a minute, a second,\n\t\t/// a month, a day and a year which are taken from the current date values.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour)\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour and a minute which are specified and a second,\n\t\t/// a month, a day and a year which are taken from the current date values.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute)\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(hour, minute, now.Second, now.Month, now.Day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour, a minute and a second which are specified and\n\t\t/// a month, a day and a year which are taken from the current date values.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <param name=\"second\">The second.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute, int second)\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(hour, minute, second, now.Month, now.Day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour, a minute, a second and a month which are specified and\n\t\t/// a day and a year which are taken from the current date values.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <param name=\"second\">The second.</param>\n\t\t/// <param name=\"month\">The month.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute, int second, int month)\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(hour, minute, second, month, now.Day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month and a day\n\t\t/// which are specified and a year which is taken from the current date values.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <param name=\"second\">The second.</param>\n\t\t/// <param name=\"month\">The month.</param>\n\t\t/// <param name=\"day\">The day.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute, int second, int month, int day)\n\t\t{\n\t\t\tDateTime now = Now;\n\t\t\treturn MakeTime(hour, minute, second, month, day, now.Year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month, a day and a year.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <param name=\"second\">The second.</param>\n\t\t/// <param name=\"month\">The month.</param>\n\t\t/// <param name=\"day\">The day.</param>\n\t\t/// <param name=\"year\">The year.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute, int second, int month, int day, int year)\n\t\t{\n\t\t\treturn MakeTime(hour, minute, second, month, day, year, -1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the Unix timestamp for a time compound of an hour, a minute, a second, a month, a day and a year.\n\t\t/// </summary>\n\t\t/// <param name=\"hour\">The hour.</param>\n\t\t/// <param name=\"minute\">The minute.</param>\n\t\t/// <param name=\"second\">The second.</param>\n\t\t/// <param name=\"month\">The month.</param>\n\t\t/// <param name=\"day\">The day.</param>\n\t\t/// <param name=\"year\">The year.</param>\n\t\t/// <param name=\"daylightSaving\">Daylight savings time.</param>\n\t\t/// <returns>Unix timestamp.</returns>\n\t\t[ImplementsFunction(\"mktime\")]\n\t\tpublic static int MakeTime(int hour, int minute, int second, int month, int day, int year, int daylightSaving)\n\t\t{\n\t\t\tvar zone = PhpTimeZone.CurrentTimeZone;\n\t\t\tDateTime local = MakeDateTime(hour, minute, second, month, day, year);\n\n\t\t\tswitch (daylightSaving)\n\t\t\t{\n\t\t\t\tcase -1: // detect, whether the date is during DST:\n\t\t\t\t\tif (zone.IsDaylightSavingTime(local))\n\t\t\t\t\t\tlocal.AddHours(-1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0: // not dst\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // dst\n\t\t\t\t\tlocal.AddHours(-1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n                    PhpException.ArgumentValueNotSupported(\"daylightSaving\", daylightSaving);\n\t\t\t\t\tbreak;\n\t\t\t}\n            return DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(local, zone));\n\t\t}\n\n\t\t#endregion\n\n\t\t#region MakeDateTime\n\n\t\tinternal static DateTime MakeDateTime(int hour, int minute, int second, int month, int day, int year)\n\t\t{\n\t\t\tif (year >= 0 && year < 70) year += 2000;\n\t\t\telse if (year >= 70 && year <= 110) year += 1900;\n\n\t\t\t// TODO (better)\n\n\t\t\tDateTime dt = new DateTime(0);\n\t\t\tint i = 0;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// first add positive values, than negative to not throw exception\n\t\t\t\t// if there will be negative values first.\n\t\t\t\t// This works bad for upper limit, if there are big positive values that\n\t\t\t\t// exceeds DateTime.MaxValue and big negative that will substract it to\n\t\t\t\t// less value, this returns simply MaxValue - it is big enough, so it\n\t\t\t\t// should not occur in real life. Algorithm handling this correctly will\n\t\t\t\t// be much more complicated.\n\t\t\t\tfor (i = 1; i <= 2; i++)\n\t\t\t\t{\n\t\t\t\t\tif (i == 1 && year >= 0)\n\t\t\t\t\t\tdt = dt.AddYears(year - 1);\n\t\t\t\t\telse if (i == 2 && year < 0)\n\t\t\t\t\t\tdt = dt.AddYears(year - 1);\n\n\t\t\t\t\tif (i == 1 && month >= 0)\n\t\t\t\t\t\tdt = dt.AddMonths(month - 1);\n\t\t\t\t\telse if (i == 2 && month < 0)\n\t\t\t\t\t\tdt = dt.AddMonths(month - 1);\n\n\t\t\t\t\tif (i == 1 && day >= 0)\n\t\t\t\t\t\tdt = dt.AddDays(day - 1);\n\t\t\t\t\telse if (i == 2 && day < 0)\n\t\t\t\t\t\tdt = dt.AddDays(day - 1);\n\n\t\t\t\t\tif (i == 1 && hour >= 0)\n\t\t\t\t\t\tdt = dt.AddHours(hour);\n\t\t\t\t\telse if (i == 2 && hour < 0)\n\t\t\t\t\t\tdt = dt.AddHours(hour);\n\n\t\t\t\t\tif (i == 1 && minute >= 0)\n\t\t\t\t\t\tdt = dt.AddMinutes(minute);\n\t\t\t\t\telse if (i == 2 && minute < 0)\n\t\t\t\t\t\tdt = dt.AddMinutes(minute);\n\n\t\t\t\t\tif (i == 1 && second >= 0)\n\t\t\t\t\t\tdt = dt.AddSeconds(second);\n\t\t\t\t\telse if (i == 2 && second < 0)\n\t\t\t\t\t\tdt = dt.AddSeconds(second);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (ArgumentOutOfRangeException)\n\t\t\t{\n\t\t\t\tif (i == 1) // exception while adding positive values\n\t\t\t\t\tdt = DateTime.MaxValue;\n\t\t\t\telse // exception while substracting\n\t\t\t\t\tdt = DateTime.MinValue;\n\t\t\t}\n\n\t\t\treturn dt;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region checkdate\n\n\t\t/// <summary>\n\t\t/// Returns TRUE if the date given is valid; otherwise returns FALSE.\n\t\t/// Checks the validity of the date formed by the arguments.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A date is considered valid if:\n\t\t/// <list type=\"bullet\">\n\t\t/// <item>year is between 1 and 32767 inclusive</item>\n\t\t/// <item>month is between 1 and 12 inclusive</item>\n\t\t/// <item>day is within the allowed number of days for the given month. Leap years are taken into consideration.</item>\n\t\t/// </list>\n\t\t/// </remarks>\n\t\t/// <param name=\"month\">Month</param>\n\t\t/// <param name=\"day\">Day</param>\n\t\t/// <param name=\"year\">Year</param>\n\t\t/// <returns>True if the date is valid, false otherwise.</returns>\n\t\t[ImplementsFunction(\"checkdate\")]\n\t\tpublic static bool CheckDate(int month, int day, int year)\n\t\t{\n\t\t\treturn month >= 1 && month <= 12\n\t\t\t\t&& year >= 1 && year <= 32767\n\t\t\t\t&& day >= 1 && day <= DateTime.DaysInMonth(year, month); // this works also with leap years\n\t\t}\n\n\t\t#endregion\n\n\t\t#region getdate\n\n\t\t/// <summary>\n\t\t/// Returns an associative array containing the date information of the current local time.\n\t\t/// </summary>\n\t\t/// <returns>Associative array with date information.</returns>\n\t\t[ImplementsFunction(\"getdate\")]\n\t\tpublic static PhpArray GetDate()\n\t\t{\n\t\t\treturn GetDate(DateTime.UtcNow);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns an associative array containing the date information of the timestamp.\n\t\t/// </summary>\n\t\t/// <param name=\"timestamp\">Number of seconds since 1970.</param>\n\t\t/// <returns>Associative array with date information.</returns>\n\t\t[ImplementsFunction(\"getdate\")]\n\t\tpublic static PhpArray GetDate(int timestamp)\n\t\t{\n\t\t\treturn GetDate(DateTimeUtils.UnixTimeStampToUtc(timestamp));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns an associative array containing the date information.\n\t\t/// </summary>\n\t\t/// <param name=\"utc\">UTC date time.</param>\n\t\t/// <returns>Associative array with date information.</returns>\n\t\tpublic static PhpArray GetDate(DateTime utc)\n\t\t{\n\t\t\tPhpArray result = new PhpArray(1, 10);\n\n\t\t\tvar zone = PhpTimeZone.CurrentTimeZone;\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);\n\n\t\t\tresult.Add(\"seconds\", local.Second);\n\t\t\tresult.Add(\"minutes\", local.Minute);\n\t\t\tresult.Add(\"hours\", local.Hour);\n\t\t\tresult.Add(\"mday\", local.Day);\n\t\t\tresult.Add(\"wday\", (int)local.DayOfWeek);\n\t\t\tresult.Add(\"mon\", local.Month);\n\t\t\tresult.Add(\"year\", local.Year);\n\t\t\tresult.Add(\"yday\", local.DayOfYear - 1); // PHP: zero based day count\n\t\t\tresult.Add(\"weekday\", local.DayOfWeek.ToString());\n\t\t\tresult.Add(\"month\", local.ToString(\"MMMM\", DateTimeFormatInfo.InvariantInfo));\n\t\t\tresult.Add(0, DateTimeUtils.UtcToUnixTimeStamp(utc));\n\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region gettimeofday\n\n\t\t/// <summary>\n\t\t/// Gets time information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// It returns <see cref=\"PhpArray\"/> containing the following 4 entries:\n\t\t/// <list type=\"table\">\n\t\t/// <item><term><c>\"sec\"</c></term><description>Unix timestamp (seconds since the Unix Epoch)</description></item>\n\t\t/// <item><term><c>\"usec\"</c></term><description>microseconds</description></item>\n\t\t/// <item><term><c>\"minuteswest\"</c></term><description>minutes west of Greenwich (doesn't take daylight savings time in consideration)</description></item>\n\t\t/// <item><term><c>\"dsttime\"</c></term><description>type of DST correction (+1 or 0, determined only by the current time zone not by the time)</description></item>\n\t\t/// </list>\n\t\t/// </remarks>\n\t\t/// <returns>Associative array</returns>\n\t\t[ImplementsFunction(\"gettimeofday\")]\n\t\tpublic static PhpArray GetTimeOfDay()\n\t\t{\n\t\t\treturn GetTimeOfDay(DateTime.UtcNow, PhpTimeZone.CurrentTimeZone);\n\t\t}\n\n\t\t[ImplementsFunction(\"gettimeofday\")]\n\t\tpublic static object GetTimeOfDay(bool returnDouble)\n\t\t{\n\t\t\tif (returnDouble)\n\t\t\t{\n\t\t\t\treturn (Now - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn GetTimeOfDay();\n\t\t\t}\n\t\t}\n\n\t\tinternal static PhpArray GetTimeOfDay(DateTime utc, TimeZoneInfo/*!*/ zone)\n\t\t{\n\t\t\tPhpArray result = new PhpArray(0, 4);\n\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);\n\n\t\t\tint current_dst = 0;\n            if (zone.IsDaylightSavingTime(local))\n            {\n                var rules = zone.GetAdjustmentRules();\n                for (int i = 0; i < rules.Length; i++)\n                {\n                    if (rules[i].DateStart <= local && rules[i].DateEnd >= local)\n                    {\n                        current_dst = (int)rules[i].DaylightDelta.TotalHours;\n                        break;\n                    }\n                }\n            }\n\n\t\t\tconst int ticks_per_microsecond = (int)TimeSpan.TicksPerMillisecond / 1000;\n\n\t\t\tresult[\"sec\"] = DateTimeUtils.UtcToUnixTimeStamp(utc);\n\t\t\tresult[\"usec\"] = (int)(local.Ticks % TimeSpan.TicksPerSecond) / ticks_per_microsecond;\n\t\t\tresult[\"minuteswest\"] = (int)(utc - local).TotalMinutes;\n            result[\"dsttime\"] = current_dst;\n\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region localtime\n\n\t\t/// <summary>\n\t\t/// The localtime() function returns an array identical to that of the structure returned by the C function call.\n\t\t/// Current time is used, regular numericaly indexed array is returned.\n\t\t/// </summary>\n\t\t/// <returns>Array containing values specifying the date and time.</returns>\n\t\t[ImplementsFunction(\"localtime\")]\n\t\tpublic static PhpArray GetLocalTime()\n\t\t{\n\t\t\treturn GetLocalTime(DateTime.UtcNow, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The localtime() function returns an array identical to that of the structure returned by the C function call.\n\t\t/// Time specified by the parameter timestamp is used, regular numericaly indexed array is returned.\n\t\t/// </summary>\n\t\t/// <param name=\"timestamp\">Number of seconds since 1970.</param>\n\t\t/// <returns>Array containing values specifying the date and time.</returns>\n\t\t[ImplementsFunction(\"localtime\")]\n\t\tpublic static PhpArray GetLocalTime(int timestamp)\n\t\t{\n\t\t\treturn GetLocalTime(DateTimeUtils.UnixTimeStampToUtc(timestamp), false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The localtime() function returns an array identical to that of the structure returned by the C function call.\n\t\t/// The first argument to localtime() is the timestamp. The second argument to the localtime() is\n\t\t/// the isAssociative, if this is set to <c>false</c> than the array is returned as a regular, numerically indexed array.\n\t\t/// If the argument is set to <c>true</c> then localtime() is an associative array containing all the different\n\t\t/// elements of the structure returned by the C function call to localtime.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returned array contains these elements if isAssociative is set to true:\n\t\t/// <list type=\"bullet\">\n\t\t/// <term><c>\"tm_sec\"</c></term><description>seconds</description>\n\t\t/// <term><c>\"tm_min\"</c></term><description>minutes</description>\n\t\t/// <term><c>\"tm_hour\"</c></term><description>hour</description>\n\t\t///\t<term><c>\"tm_mday\"</c></term><description>day of the month</description>\n\t\t///\t<term><c>\"tm_mon\"</c></term><description>month of the year, starting with 0 for January</description>\n\t\t/// <term><c>\"tm_year\"</c></term><description>Years since 1900</description>\n\t\t/// <term><c>\"tm_wday\"</c></term><description>Day of the week</description>\n\t\t/// <term><c>\"tm_yday\"</c></term><description>Day of the year</description>\n\t\t/// <term><c>\"tm_isdst\"</c></term><description>Is daylight savings time in effect</description>\n\t\t/// </list>\n\t\t/// </remarks>\n\t\t/// <param name=\"timestamp\"></param>\n\t\t/// <param name=\"returnAssociative\"></param>\n\t\t/// <returns></returns>\n\t\t[ImplementsFunction(\"localtime\")]\n\t\tpublic static PhpArray GetLocalTime(int timestamp, bool returnAssociative)\n\t\t{\n\t\t\treturn GetLocalTime(DateTimeUtils.UnixTimeStampToUtc(timestamp), returnAssociative);\n\t\t}\n\n\t\tinternal static PhpArray GetLocalTime(DateTime utc, bool returnAssociative)\n\t\t{\n\t\t\tPhpArray result;\n\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, PhpTimeZone.CurrentTimeZone);\n\n\t\t\tif (returnAssociative)\n\t\t\t{\n\t\t\t\tresult = new PhpArray(0, 9);\n\t\t\t\tresult[\"tm_sec\"] = local.Second;\n\t\t\t\tresult[\"tm_min\"] = local.Minute;\n\t\t\t\tresult[\"tm_hour\"] = local.Hour;\n\t\t\t\tresult[\"tm_mday\"] = local.Day;\n\t\t\t\tresult[\"tm_mon\"] = local.Month - 1;\n\t\t\t\tresult[\"tm_year\"] = local.Year - 1900;\n\t\t\t\tresult[\"tm_wday\"] = (int)local.DayOfWeek;\n\t\t\t\tresult[\"tm_yday\"] = local.DayOfYear - 1;\n\t\t\t\tresult[\"tm_isdst\"] = PhpTimeZone.CurrentTimeZone.IsDaylightSavingTime(local) ? 1 : 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult = new PhpArray(9, 0);\n\t\t\t\tresult[0] = local.Second;\n\t\t\t\tresult[1] = local.Minute;\n\t\t\t\tresult[2] = local.Hour;\n\t\t\t\tresult[3] = local.Day;\n\t\t\t\tresult[4] = local.Month - 1;\n\t\t\t\tresult[5] = local.Year - 1900;\n\t\t\t\tresult[6] = (int)local.DayOfWeek;\n\t\t\t\tresult[7] = local.DayOfYear - 1;\n\t\t\t\tresult[8] = PhpTimeZone.CurrentTimeZone.IsDaylightSavingTime(local) ? 1 : 0;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n        \n\t\t#endregion\n\n\t\t#region microtime\n\n\t\t/// <summary>\n\t\t/// Returns the string \"msec sec\" where sec is the current time measured in the number of seconds\n\t\t/// since the Unix Epoch (0:00:00 January 1, 1970 GMT), and msec is the microseconds part.\n\t\t/// </summary>\n\t\t/// <returns>String containing number of miliseconds, space and number of seconds.</returns>\n\t\t[ImplementsFunction(\"microtime\")]\n\t\tpublic static string MicroTime()\n\t\t{\n\t\t\t// time from 1970\n\t\t\tTimeSpan fromUnixEpoch = DateTime.UtcNow - DateTimeUtils.UtcStartOfUnixEpoch;\n\n\t\t\t// seconds part to return\n\t\t\tlong seconds = (long)fromUnixEpoch.TotalSeconds;\n\n\t\t\t// only remaining time less than one second\n\t\t\tTimeSpan mSec = fromUnixEpoch.Subtract(new TimeSpan(seconds * 10000000)); // convert seconds to 100 ns\n\t\t\tdouble remaining = ((double)mSec.Ticks) / 10000000; // convert from 100ns to seconds\n\n\t\t\treturn String.Format(\"{0} {1}\", remaining, seconds);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the fractional time in seconds from the start of the UNIX epoch.\n\t\t/// </summary>\n\t\t/// <param name=\"returnDouble\"><c>true</c> to return the double, <c>false</c> to return string.</param>\n\t\t/// <returns><see cref=\"String\"/> containing number of miliseconds, space and number of seconds\n\t\t/// if <paramref name=\"returnDouble\"/> is <c>false</c> and <see cref=\"double\"/>\n\t\t/// containing the fractional count of seconds otherwise.</returns>\n\t\t[ImplementsFunction(\"microtime\")]\n\t\tpublic static object MicroTime(bool returnDouble)\n\t\t{\n\t\t\tif (returnDouble)\n\t\t\t\treturn (DateTime.UtcNow - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds;\n\t\t\telse\n\t\t\t\treturn MicroTime();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region strtotime\n\n\t\t/// <summary>\n\t\t/// Parses a string containing an English date format into a UNIX timestamp relative to the current time.\n\t\t/// </summary>\n\t\t/// <param name=\"time\">String containing time definition</param>\n\t\t/// <returns>Number of seconds since 1/1/1970 or -1 on failure.</returns>\n\t\t[ImplementsFunction(\"strtotime\")]\n\t\tpublic static object StringToTime(string time)\n\t\t{\n\t\t\treturn StringToTime(time, DateTime.UtcNow);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses a string containing an English date format into a UNIX timestamp relative to a specified time.\n\t\t/// </summary>\n\t\t/// <param name=\"time\">String containing time definition.</param>\n\t\t/// <param name=\"start\">Timestamp (seconds from 1970) to which is the new timestamp counted.</param>\n\t\t/// <returns>Number of seconds since 1/1/1970 or -1 on failure.</returns>\n\t\t[ImplementsFunction(\"strtotime\")]\n\t\tpublic static object StringToTime(string time, int start)\n\t\t{\n\t\t\treturn StringToTime(time, DateTimeUtils.UnixTimeStampToUtc(start));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Implementation of <see cref=\"StringToTime(string,int)\"/> function.\n\t\t/// </summary>\n\t\tprivate static object StringToTime(string time, DateTime startUtc)\n\t\t{\n\t\t\tif (time == null) return false;\n\t\t\ttime = time.Trim();\n\t\t\tif (time.Length == 0) return false;\r\n            \r\n\t\t    string error = null;\n\t\t\tint result = StrToTime.DateInfo.Parse(time, startUtc, out error);\n\t\t\tif (error != null)\n\t\t\t{\n\t\t\t\tPhpException.Throw(PhpError.Warning, error);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region time\n\n\t\t/// <summary>\n\t\t/// Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).\n\t\t/// </summary>\n\t\t/// <returns>Number of seconds since 1970.</returns>\n\t\t[ImplementsFunction(\"time\")]\n\t\tpublic static int Time()\n\t\t{\n\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(DateTime.UtcNow);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region date_sunrise, date_sunset\n\n\t\tpublic enum TimeFormats\n\t\t{\n\t\t\t[ImplementsConstant(\"SUNFUNCS_RET_TIMESTAMP\")]\n\t\t\tInteger = 0,\n\t\t\t[ImplementsConstant(\"SUNFUNCS_RET_STRING\")]\n\t\t\tString = 1,\n\t\t\t[ImplementsConstant(\"SUNFUNCS_RET_DOUBLE\")]\n\t\t\tDouble = 2\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, TimeFormats.String, Double.NaN, Double.NaN, Double.NaN, Double.NaN, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp, TimeFormats format)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, Double.NaN, Double.NaN, Double.NaN, Double.NaN, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp, TimeFormats format, double latitude)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, Double.NaN, Double.NaN, Double.NaN, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, Double.NaN, Double.NaN, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, zenith, Double.NaN, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunrise\")]\n\t\tpublic static object GetSunriseTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, zenith, offset, true);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, TimeFormats.String, Double.NaN, Double.NaN, Double.NaN, Double.NaN, false);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp, TimeFormats format)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, Double.NaN, Double.NaN, Double.NaN, Double.NaN, false);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp, TimeFormats format, double latitude)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, Double.NaN, Double.NaN, Double.NaN, false);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, Double.NaN, Double.NaN, false);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, zenith, Double.NaN, false);\n\t\t}\n\n\t\t[ImplementsFunction(\"date_sunset\")]\n\t\tpublic static object GetSunsetTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset)\n\t\t{\n\t\t\treturn GetSunTime(timestamp, format, latitude, longitude, zenith, offset, false);\n\t\t}\n\n\n\t\tpublic static object GetSunTime(int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset, bool getSunrise)\n\t\t{\n\t\t\tvar zone = PhpTimeZone.CurrentTimeZone;\n\t\t\tDateTime utc = DateTimeUtils.UnixTimeStampToUtc(timestamp);\n            DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);\n\n\t\t\tif (Double.IsNaN(latitude) || Double.IsNaN(longitude) || Double.IsNaN(zenith))\n\t\t\t{\n\t\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext);\n\n\t\t\t\tif (Double.IsNaN(latitude))\n\t\t\t\t\tlatitude = config.Date.Latitude;\n\t\t\t\tif (Double.IsNaN(longitude))\n\t\t\t\t\tlongitude = config.Date.Longitude;\n\t\t\t\tif (Double.IsNaN(zenith))\n\t\t\t\t\tzenith = (getSunrise) ? config.Date.SunriseZenith : config.Date.SunsetZenith;\n\t\t\t}\n\n\t\t\tif (Double.IsNaN(offset))\n\t\t\t\toffset = zone.GetUtcOffset(local).TotalHours;\n\n\t\t\tdouble result_utc = CalculateSunTime(local.DayOfYear, latitude, longitude, zenith, getSunrise);\n\t\t\tdouble result = result_utc + offset;\n\n\t\t\tswitch (format)\n\t\t\t{\n\t\t\t\tcase TimeFormats.Integer:\n\t\t\t\t\treturn (timestamp - (timestamp % (24 * 3600))) + (int)(3600 * result);\n\n\t\t\t\tcase TimeFormats.String:\n\t\t\t\t\treturn String.Format(\"{0:00}:{1:00}\", (int)result, (int)(60 * (result - (double)(int)result)));\n\n\t\t\t\tcase TimeFormats.Double:\n\t\t\t\t\treturn result;\n\n\t\t\t\tdefault:\n\t\t\t\t\tPhpException.InvalidArgument(\"format\");\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tprivate static double ToRadians(double degrees) { return degrees * Math.PI / 180; }\n\t\tprivate static double ToDegrees(double radians) { return radians * 180 / Math.PI; }\n\n\t\t/// <summary>\n\t\t/// Calculates sunrise or sunset. Adopted PHP implementation by Moshe Doron (mosdoron@netvision.net.il).\n\t\t/// Returns UTC time.\n\t\t/// </summary>\n\t\tprivate static double CalculateSunTime(int day, double latitude, double longitude, double zenith, bool getSunrise)\n\t\t{\n\t\t\tdouble lngHour, t, M, L, Lx, RA, RAx, Lquadrant, RAquadrant, sinDec, cosDec, cosH, H, T, UT, UTx;\n\n\t\t\t// convert the longitude to hour value and calculate an approximate time\n\t\t\tlngHour = longitude / 15;\n\n\t\t\tif (getSunrise)\n\t\t\t\tt = (double)day + ((6 - lngHour) / 24);\n\t\t\telse\n\t\t\t\tt = (double)day + ((18 - lngHour) / 24);\n\n\t\t\t// calculate the sun's mean anomaly:\n\t\t\tM = (0.9856 * t) - 3.289;\n\n\t\t\t// step 4: calculate the sun's true longitude:\n\t\t\tL = M + (1.916 * Math.Sin(ToRadians(M))) + (0.020 * Math.Sin(ToRadians(2 * M))) + 282.634;\n\n\t\t\twhile (L < 0)\n\t\t\t{\n\t\t\t\tLx = L + 360;\n\t\t\t\tDebug.Assert(Lx != L);\n\t\t\t\tL = Lx;\n\t\t\t}\n\n\t\t\twhile (L >= 360)\n\t\t\t{\n\t\t\t\tLx = L - 360;\n\t\t\t\tDebug.Assert(Lx != L);\n\t\t\t\tL = Lx;\n\t\t\t}\n\n\t\t\t// calculate the sun's right ascension:\n\t\t\tRA = ToDegrees(Math.Atan(0.91764 * Math.Tan(ToRadians(L))));\n\n\t\t\twhile (RA < 0)\n\t\t\t{\n\t\t\t\tRAx = RA + 360;\n\t\t\t\tDebug.Assert(RAx != RA);\n\t\t\t\tRA = RAx;\n\t\t\t}\n\n\t\t\twhile (RA >= 360)\n\t\t\t{\n\t\t\t\tRAx = RA - 360;\n\t\t\t\tDebug.Assert(RAx != RA);\n\t\t\t\tRA = RAx;\n\t\t\t}\n\n\t\t\t// right ascension value needs to be in the same quadrant as L:\n\t\t\tLquadrant = Math.Floor(L / 90) * 90;\n\t\t\tRAquadrant = Math.Floor(RA / 90) * 90;\n\t\t\tRA = RA + (Lquadrant - RAquadrant);\n\n\t\t\t// right ascension value needs to be converted into hours:\n\t\t\tRA /= 15;\n\n\t\t\t// calculate the sun's declination:\n\t\t\tsinDec = 0.39782 * Math.Sin(ToRadians(L));\n\t\t\tcosDec = Math.Cos(Math.Asin(sinDec));\n\n\t\t\t// calculate the sun's local hour angle:\n\t\t\tcosH = (Math.Cos(ToRadians(zenith)) - (sinDec * Math.Sin(ToRadians(latitude)))) / (cosDec * Math.Cos(ToRadians(latitude)));\n\n\t\t\t// finish calculating H and convert into hours:\n\t\t\tif (getSunrise)\n\t\t\t\tH = 360 - ToDegrees(Math.Acos(cosH));\n\t\t\telse\n\t\t\t\tH = ToDegrees(Math.Acos(cosH));\n\n\t\t\tH = H / 15;\n\n\t\t\t// calculate local mean time:\n\t\t\tT = H + RA - (0.06571 * t) - 6.622;\n\n\t\t\t// convert to UTC:\n\t\t\tUT = T - lngHour;\n\n\t\t\twhile (UT < 0)\n\t\t\t{\n\t\t\t\tUTx = UT + 24;\n\t\t\t\tDebug.Assert(UTx != UT);\n\t\t\t\tUT = UTx;\n\t\t\t}\n\n\t\t\twhile (UT >= 24)\n\t\t\t{\n\t\t\t\tUTx = UT - 24;\n\t\t\t\tDebug.Assert(UTx != UT);\n\t\t\t\tUT = UTx;\n\t\t\t}\n\n\t\t\treturn UT;\n\t\t}\n\n\t\t#endregion\n    }\n}\n"
  },
  {
    "path": "Source/ClassLibrary/DateTime.CLR/DateTimeParsing.cs",
    "content": "\r\n/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans <derick@derickrethans.nl>. \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n// TODO: Prior to PHP 5.3.0, 24:00 was not a valid format and strtotime() returned FALSE. \r\n// TODO: strtotime(\"0000-00-00 00:00:00 +0000\") should return FALSE\r\n\r\nusing System;\r\nusing System.IO;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library.StrToTime\r\n{\r\n\t#region Enums\r\n\r\n\tinternal enum Tokens\r\n\t{\r\n\t\tEOF,\r\n\t\tERROR,\r\n\t\tXMLRPC_SOAP,\r\n\t\tTIME12,\r\n\t\tTIME24,\r\n\t\tGNU_NOCOLON,\r\n\t\tGNU_NOCOLON_TZ,\r\n\t\tISO_NOCOLON,\r\n\t\tAMERICAN,\r\n\t\tISO_DATE,\r\n\t\tDATE_FULL,\r\n\t\tDATE_TEXT,\r\n\t\tDATE_NOCOLON,\r\n\t\tPG_YEARDAY,\r\n\t\tPG_TEXT,\r\n\t\tPG_REVERSE,\r\n\t\tCLF,\r\n\t\tDATE_NO_DAY,\r\n\t\tSHORTDATE_WITH_TIME,\r\n\t\tDATE_FULL_POINTED,\r\n\t\tTIME24_WITH_ZONE,\r\n\t\tISO_WEEK,\r\n\t\tTIMEZONE,\r\n\t\tAGO,\r\n\t\tRELATIVE,\r\n\t\tWEEKDAY\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\tinternal sealed class DateInfo\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\tpublic struct Relative\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Number of years/months/days.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int y, m, d;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Number of hours/minutes/seconds.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int h, i, s;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Weekday (e.g. \"next monday\").\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int weekday;\r\n\r\n\t\t\tpublic int weekday_behavior;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Date and time specified relatively.\r\n\t\t/// </summary>\r\n\t\tpublic Relative relative;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Absolute year/month/day.\r\n\t\t/// </summary>\r\n\t\tpublic int y = -1, m = -1, d = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Absolute hour/minute/second.\r\n\t\t/// </summary>\r\n\t\tpublic int h = -1, i = -1, s = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fraction of second.\r\n\t\t/// </summary>\r\n\t\tpublic double f = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Number of time/date/zone/relative time/weekday components specified.\r\n\t\t/// </summary>\r\n\t\tpublic int have_time, have_date, have_zone, have_relative, have_weekday_relative;\r\n\r\n\t\t/// <summary>\r\n\t\t/// GMT offset in minutes.\r\n\t\t/// </summary>\r\n\t\tpublic int z = 0;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parse\r\n\r\n\t\tpublic static int Parse(string/*!*/ str, DateTime utcStart, out string error)\r\n\t\t{\r\n\t\t\tDebug.Assert(str != null);\r\n\r\n            var scanner = new Scanner(new StringReader(str.ToLowerInvariant()));\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tTokens token = scanner.GetNextToken();\r\n\t\t\t\tif (token == Tokens.ERROR || scanner.Errors > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\terror = LibResources.GetString(\"parse_error\", scanner.Position, str.Substring(scanner.Position));\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (token == Tokens.EOF)\r\n\t\t\t\t{\r\n\t\t\t\t    return scanner.Time.GetUnixTimeStamp(utcStart, out error);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetUnixTimeStamp\r\n\r\n\t\tprivate int GetUnixTimeStamp(DateTime utcStart, out string error)\r\n\t\t{\r\n            var zone = PhpTimeZone.CurrentTimeZone;\r\n            DateTime start = TimeZoneInfo.ConvertTimeFromUtc(utcStart, zone);// zone.ToLocalTime(utcStart);\r\n\r\n            // following operates on local time defined by the parsed info or by the current time zone //\r\n\r\n\t\t\tif (have_date > 0 && have_time == 0)\r\n\t\t\t{\r\n\t\t\t\th = 0;\r\n\t\t\t\ti = 0;\r\n\t\t\t\ts = 0;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (h == -1) h = start.Hour;\r\n                if (i == -1) i = start.Minute;\r\n\t\t\t\tif (s == -1) s = start.Second;\r\n\t\t\t}\r\n\r\n\t\t\tif (y == -1) y = start.Year;\r\n\t\t\tif (m == -1) m = start.Month;\r\n            else if (m == 0) { m = 1; --relative.m;}\r\n\t\t\tif (d == -1) d = start.Day;\r\n            else if (d == 0) { d = 1; --relative.d; }\r\n\r\n            int days_overflow;\r\n            CheckOverflows(y, m, ref d, ref h, out days_overflow);\r\n            \r\n\t\t\tvar result = new DateTime(y, m, d, h, i, s, DateTimeKind.Unspecified);\r\n\r\n\t\t\tresult = result.AddDays(relative.d + days_overflow);\r\n\t\t\tresult = result.AddMonths(relative.m);\r\n\t\t\tresult = result.AddYears(relative.y);\r\n\t\t\tresult = result.AddHours(relative.h);\r\n\t\t\tresult = result.AddMinutes(relative.i);\r\n\t\t\tresult = result.AddSeconds(relative.s);\r\n\r\n\t\t\t// adds relative weekday:\r\n\t\t\tif (have_weekday_relative > 0)\r\n\t\t\t{\r\n\t\t\t\tint dow = (int)result.DayOfWeek;\r\n\t\t\t\tint difference = relative.weekday - dow;\r\n\r\n\t\t\t\tif ((relative.d < 0 && difference < 0) || (relative.d >= 0 && difference <= -relative.weekday_behavior))\r\n\t\t\t\t\tdifference += 7;\r\n\r\n\t\t\t\tif (relative.weekday >= 0)\r\n\t\t\t\t\tresult = result.AddDays(difference);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult = result.AddDays(dow - relative.weekday - 7);\r\n            }\r\n\r\n\t\t\t// convert to UTC:\r\n\t\t\tif (have_zone > 0)\r\n\t\t\t{\r\n\t\t\t\tresult = result.AddMinutes(-z);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                if (zone.IsInvalidTime(result))\r\n                {\r\n                    // We ended up in an invalid time. This time was skipped because of day-light saving change.\r\n                    // Figure out the direction we were moving, and step in the direction until the next valid time.\r\n                    int secondsStep = ((result - utcStart).Ticks >= 0) ? 1 : -1;\r\n                    do\r\n                    {\r\n                        result = result.AddSeconds(secondsStep);\r\n                    }\r\n                    while (zone.IsInvalidTime(result));\r\n                }\r\n\r\n                result = TimeZoneInfo.ConvertTimeToUtc(result, zone);// zone.ToUniversalTime(result);\r\n\t\t\t}\r\n\r\n\t\t\terror = null;\r\n\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(result);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Helper Methods\r\n\r\n\t\tpublic void HAVE_TIME()\r\n\t\t{\r\n\t\t\thave_time = 1;\r\n\t\t\th = 0;\r\n\t\t\ti = 0;\r\n\t\t\ts = 0;\r\n\t\t\tf = 0;\r\n\t\t}\r\n\r\n\t\tpublic void UNHAVE_TIME()\r\n\t\t{\r\n\t\t\thave_time = 0;\r\n\t\t\th = 0;\r\n\t\t\ti = 0;\r\n\t\t\ts = 0;\r\n\t\t\tf = 0;\r\n\t\t}\r\n\r\n\t\tpublic void HAVE_DATE()\r\n\t\t{\r\n\t\t\thave_date = 1;\r\n\t\t}\r\n\r\n\t\tpublic void UNHAVE_DATE()\r\n\t\t{\r\n\t\t\thave_date = 0;\r\n\t\t\td = 0;\r\n\t\t\tm = 0;\r\n\t\t\ty = 0;\r\n\t\t}\r\n\r\n\t\tpublic void HAVE_RELATIVE()\r\n\t\t{\r\n\t\t\thave_relative = 1;\r\n\t\t\trelative.weekday_behavior = 0;\r\n\t\t}\r\n\r\n\t\tpublic void HAVE_WEEKDAY_RELATIVE()\r\n\t\t{\r\n\t\t\thave_weekday_relative = 1;\r\n\t\t}\r\n\r\n\t\tpublic void HAVE_TZ()\r\n\t\t{\r\n\t\t\thave_zone = 1;\r\n\t\t}\r\n\r\n\t\tpublic static int ProcessYear(int year)\r\n\t\t{\r\n\t\t\tif (year == -1) return -1;\r\n\r\n\t\t\tif (year < 100)\r\n\t\t\t\treturn (year < 70) ? year + 2000 : year + 1900;\r\n\r\n\t\t\treturn year;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Checks how many days given year/month/day/hour overflows (as it is possible in PHP format).\r\n        /// </summary>\r\n        /// <param name=\"y\">parsed year</param>\r\n        /// <param name=\"m\">parsed month</param>\r\n        /// <param name=\"d\">parsed day</param>\r\n        /// <param name=\"h\">parsed hour (24 is problem)</param>\r\n        /// <param name=\"days_overflow\">resulting amount of overflowing days (will be added to the resulting DateTime).</param>\r\n        private static void CheckOverflows(int y, int m, ref int d, ref int h, out int days_overflow)\r\n        {\r\n            days_overflow = 0;\r\n\r\n            int daysinmonth_overflow = d - DateTime.DaysInMonth(y, m);\r\n            if (daysinmonth_overflow > 0)\r\n            {\r\n                d -= daysinmonth_overflow;\r\n                days_overflow += daysinmonth_overflow;\r\n            }\r\n            else if (d == 0)\r\n            {\r\n                d = 1;\r\n                --days_overflow;\r\n            }\r\n\r\n            if (h==24)\r\n            {\r\n                h = 0;\r\n                ++days_overflow;\r\n            }            \r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parse integer with possible sign of a specified maximal number of digits.\r\n\t\t/// </summary>\r\n\t\tpublic static int ParseSignedInt(string str, ref int pos, int maxDigits)\r\n\t\t{\r\n\t\t\tint sign = +1;\r\n\r\n\t\t\t// skip non-digit, non-sign chars:\r\n\t\t\twhile (pos < str.Length && !Char.IsDigit(str, pos) && str[pos] != '+' && str[pos] != '-')\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\t\t\tif (pos == str.Length) return -1;\r\n\r\n\t\t\t// set sign:\r\n\t\t\tif (str[pos] == '+')\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\t\t\telse if (str[pos] == '-')\r\n\t\t\t{\r\n\t\t\t\tsign = -1;\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\treturn sign * ParseUnsignedInt(str, ref pos, maxDigits);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parse unsigned integer of a specified maximal length.\r\n\t\t/// </summary>\r\n\t\tpublic static int ParseUnsignedInt(string str, ref int pos, int maxDigits)          // PHP: timelib_get_nr\r\n\t\t{\r\n\t\t\tint len = 0;\r\n\r\n\t\t\t// skips non-digits:\r\n\t\t\twhile (pos < str.Length && !Char.IsDigit(str, pos))\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\t\t\tif (pos == str.Length) return -1;\r\n\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length && Char.IsDigit(str, pos) && len < maxDigits)\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t\tlen++;\r\n\t\t\t}\r\n\r\n\t\t\treturn Int32.Parse(str.Substring(begin, len));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses real fraction \".[0-9]{1,maxDigits}\". \r\n\t\t/// </summary>\r\n\t\tpublic static double ParseFraction(string str, ref int pos, int maxDigits)         // PHP: timelib_get_frac_nr\r\n\t\t{\r\n\t\t\tDebug.Assert(pos < str.Length && str[pos] == '.');\r\n\r\n\t\t\tint begin = pos;\r\n\r\n\t\t\t// dot:\r\n\t\t\tpos++;\r\n\t\t\tint len = 1;\r\n\r\n\t\t\t// get substring of digits:\r\n\t\t\twhile (pos < str.Length && Char.IsDigit(str, pos) && len < maxDigits)\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t\tlen++;\r\n\t\t\t}\r\n\r\n\t\t\tstring number = str.Substring(begin, len);\r\n\t\t\treturn Double.Parse(number, System.Globalization.NumberFormatInfo.InvariantInfo);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses meridian \"[ap][.]?m[.]?\" and adjusts hours accordingly.\r\n\t\t/// </summary>\r\n\t\tpublic bool SetMeridian(string str, ref int pos)\r\n\t\t{\r\n\t\t\twhile (pos < str.Length && str[pos] != 'a' && str[pos] != 'p')\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\t\t\tif (pos == str.Length) return false;\r\n\r\n\t\t\tif (str[pos] == 'a')\r\n\t\t\t{\r\n\t\t\t\tif (h == 12) h = 0;\r\n\t\t\t}\r\n\t\t\telse if (h != 12)\r\n\t\t\t{\r\n\t\t\t\th += 12;\r\n\t\t\t}\r\n\r\n\t\t\tpos++;\r\n\r\n\t\t\t// dot after \"a\"/\"p\", move after \"m\":\r\n\t\t\tpos += (str[pos] == '.') ? 2 : 1;\r\n\r\n\t\t\t// dot after \"m\":\r\n\t\t\tif (pos < str.Length && str[pos] == '.') pos++;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves string position index behind \"nd\", \"rd\", \"st\", \"th\" if applicable.\r\n\t\t/// </summary>\r\n\t\tpublic static void SkipDaySuffix(string str, ref int pos)                   // PHP: timelib_skip_day_suffix\r\n\t\t{\r\n\t\t\tif (pos + 1 >= str.Length || Char.IsWhiteSpace(str[pos]))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif\r\n\t\t\t(\r\n\t\t\t  str[pos] == 'n' && str[pos + 1] == 'd' ||\r\n\t\t\t  str[pos] == 'r' && str[pos + 1] == 'd' ||\r\n\t\t\t  str[pos] == 's' && str[pos + 1] == 't' ||\r\n\t\t\t  str[pos] == 't' && str[pos + 1] == 'h'\r\n\t\t\t)\r\n\t\t\t{\r\n\t\t\t\tpos += 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses month string and returns the month number 1..12, zero on error.\r\n\t\t/// </summary>\r\n\t\tpublic static int ParseMonth(string str, ref int pos)\r\n\t\t{\r\n\t\t\twhile (pos < str.Length && (str[pos] == ' ' || str[pos] == '-' || str[pos] == '.' || str[pos] == '/'))\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length && Char.IsLetter(str, pos))\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (str.Substring(begin, pos - begin))\r\n\t\t\t{\r\n\t\t\t\tcase \"jan\": return 1;\r\n\t\t\t\tcase \"feb\": return 2;\r\n\t\t\t\tcase \"mar\": return 3;\r\n\t\t\t\tcase \"apr\": return 4;\r\n\t\t\t\tcase \"may\": return 5;\r\n\t\t\t\tcase \"jun\": return 6;\r\n\t\t\t\tcase \"jul\": return 7;\r\n\t\t\t\tcase \"aug\": return 8;\r\n\t\t\t\tcase \"sep\": return 9;\r\n\t\t\t\tcase \"sept\": return 9;\r\n\t\t\t\tcase \"oct\": return 10;\r\n\t\t\t\tcase \"nov\": return 11;\r\n\t\t\t\tcase \"dec\": return 12;\r\n\r\n\t\t\t\tcase \"i\": return 1;\r\n\t\t\t\tcase \"ii\": return 2;\r\n\t\t\t\tcase \"iii\": return 3;\r\n\t\t\t\tcase \"iv\": return 4;\r\n\t\t\t\tcase \"v\": return 5;\r\n\t\t\t\tcase \"vi\": return 6;\r\n\t\t\t\tcase \"vii\": return 7;\r\n\t\t\t\tcase \"viii\": return 8;\r\n\t\t\t\tcase \"ix\": return 9;\r\n\t\t\t\tcase \"x\": return 10;\r\n\t\t\t\tcase \"xi\": return 11;\r\n\t\t\t\tcase \"xii\": return 12;\r\n\r\n\t\t\t\tcase \"january\": return 1;\r\n\t\t\t\tcase \"february\": return 2;\r\n\t\t\t\tcase \"march\": return 3;\r\n\t\t\t\tcase \"april\": return 4;\r\n\t\t\t\tcase \"june\": return 6;\r\n\t\t\t\tcase \"july\": return 7;\r\n\t\t\t\tcase \"august\": return 8;\r\n\t\t\t\tcase \"september\": return 9;\r\n\t\t\t\tcase \"october\": return 10;\r\n\t\t\t\tcase \"november\": return 11;\r\n\t\t\t\tcase \"december\": return 12;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses text defining ordinal number.\r\n\t\t/// </summary>\r\n\t\tpublic static int ParseRelativeText(string str, ref int pos, out int behavior)\r\n\t\t{\r\n\t\t\twhile (pos < str.Length && (str[pos] == ' ' || str[pos] == '-' || str[pos] == '/'))\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length && Char.IsLetter(str, pos))\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\tbehavior = 0;\r\n\t\t\tswitch (str.Substring(begin, pos - begin))\r\n\t\t\t{\r\n\t\t\t\tcase \"last\": return -1;\r\n\t\t\t\tcase \"previous\": return -1;\r\n\t\t\t\tcase \"this\": behavior = 1; return 0;\r\n\t\t\t\tcase \"first\": return 1;\r\n\t\t\t\tcase \"next\": return 1;\r\n\t\t\t\tcase \"second\": return 2;\r\n\t\t\t\tcase \"third\": return 3;\r\n\t\t\t\tcase \"fourth\": return 4;\r\n\t\t\t\tcase \"fifth\": return 5;\r\n\t\t\t\tcase \"sixth\": return 6;\r\n\t\t\t\tcase \"seventh\": return 7;\r\n\t\t\t\tcase \"eight\": return 8;\r\n\t\t\t\tcase \"ninth\": return 9;\r\n\t\t\t\tcase \"tenth\": return 10;\r\n\t\t\t\tcase \"eleventh\": return 11;\r\n\t\t\t\tcase \"twelfth\": return 12;\r\n\t\t\t}\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads characters up to the first space.\r\n\t\t/// </summary>\r\n\t\tpublic static string ReadToSpace(string str, ref int pos)\r\n\t\t{\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length && str[pos] != ' ')\r\n\t\t\t\tpos++;\r\n\r\n\t\t\treturn str.Substring(begin, pos - begin);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets relative time and date information according to the parsed text.\r\n\t\t/// </summary>\r\n\t\tpublic void SetRelative(string str, int amount, int behavior)\r\n\t\t{\r\n\t\t\tswitch (str)\r\n\t\t\t{\r\n\t\t\t\tcase \"sec\":\r\n\t\t\t\tcase \"secs\":\r\n\t\t\t\tcase \"second\":\r\n\t\t\t\tcase \"seconds\":\r\n\t\t\t\t\trelative.s += amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"min\":\r\n\t\t\t\tcase \"mins\":\r\n\t\t\t\tcase \"minute\":\r\n\t\t\t\tcase \"minutes\":\r\n\t\t\t\t\trelative.i += amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"hour\":\r\n\t\t\t\tcase \"hours\":\r\n\t\t\t\t\trelative.h += amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"day\":\r\n\t\t\t\tcase \"days\":\r\n\t\t\t\t\trelative.d += amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"month\":\r\n\t\t\t\tcase \"months\":\r\n\t\t\t\t\trelative.m += amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"week\":\r\n\t\t\t\tcase \"weeks\":\r\n\t\t\t\t\trelative.d += 7 * amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"fortnight\":\r\n\t\t\t\tcase \"fortnights\":\r\n\t\t\t\tcase \"forthnight\":\r\n\t\t\t\tcase \"forthnights\":\r\n\t\t\t\t\trelative.d += 14 * amount;\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tcase \"year\":\r\n\t\t\t\tcase \"years\":\r\n\t\t\t\t\trelative.y += amount;\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (SetWeekDay(str))\r\n\t\t\t{\r\n\t\t\t\trelative.d += (amount > 0 ? amount - 1 : amount) * 7;\r\n\r\n\t\t\t\t// TIMELIB_HAVE_WEEKDAY_RELATIVE\r\n\t\t\t\thave_weekday_relative = 1;\r\n\t\t\t\trelative.weekday_behavior = behavior;\r\n\r\n\t\t\t\t// TIMELIB_UNHAVE_TIME \r\n\t\t\t\thave_time = 0;\r\n\t\t\t\th = 0;\r\n\t\t\t\ti = 0;\r\n\t\t\t\ts = 0;\r\n\t\t\t\tf = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets relative week day according to a specified text.\r\n\t\t/// </summary>\r\n\t\tpublic bool SetWeekDay(string str)\r\n\t\t{\r\n\t\t\tswitch (str)\r\n\t\t\t{\r\n\t\t\t\tcase \"mon\":\r\n\t\t\t\tcase \"monday\": relative.weekday = 1; break;\r\n\t\t\t\tcase \"tue\":\r\n\t\t\t\tcase \"tuesday\": relative.weekday = 2; break;\r\n\t\t\t\tcase \"wed\":\r\n\t\t\t\tcase \"wednesday\": relative.weekday = 3; break;\r\n\t\t\t\tcase \"thu\":\r\n\t\t\t\tcase \"thursday\": relative.weekday = 4; break;\r\n\t\t\t\tcase \"fri\":\r\n\t\t\t\tcase \"friday\": relative.weekday = 5; break;\r\n\t\t\t\tcase \"sat\":\r\n\t\t\t\tcase \"saturday\": relative.weekday = 6; break;\r\n\t\t\t\tcase \"sun\":\r\n\t\t\t\tcase \"sunday\": relative.weekday = 0; break;\r\n\t\t\t\tdefault: return false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts week number to day number.\r\n\t\t/// </summary>\r\n\t\tpublic static int WeekToDay(int year, int week, int day)\r\n\t\t{\r\n\t\t\tint dow = (int)new DateTime(year, 1, 1).DayOfWeek;\r\n\r\n\t\t\t// the offset for day 1 of week 1:\r\n\t\t\tint offset = 0 - (dow > 4 ? dow - 7 : dow);\r\n\r\n\t\t\t// add weeks and days:\r\n\t\t\treturn offset + ((week - 1) * 7) + day;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses and sets time zone information.\r\n\t\t/// </summary>\r\n\t\tpublic bool SetTimeZone(string str, ref int pos)                               // PHP: timelib_get_zone\r\n\t\t{\r\n\t\t\tif (have_zone > 0) return false;\r\n\r\n\t\t\twhile (pos < str.Length && (str[pos] == ' ' || str[pos] == '('))\r\n\t\t\t\tpos++;\r\n\r\n\t\t\tbool result;\r\n\r\n\t\t\tif (pos < str.Length && str[pos] == '+')\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t\tz = ParseTimeZone(str, ref pos);\r\n\t\t\t\tresult = true;\r\n\t\t\t}\r\n\t\t\telse if (pos < str.Length && str[pos] == '-')\r\n\t\t\t{\r\n\t\t\t\tpos++;\r\n\t\t\t\tz = -ParseTimeZone(str, ref pos);\r\n\t\t\t\tresult = true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = SetZoneOffset(str.Substring(pos, str.Length - pos));\r\n\t\t\t\tpos = str.Length;\r\n\t\t\t}\r\n\r\n\t\t\twhile (pos < str.Length && str[pos] == ')')\r\n\t\t\t\tpos++;\r\n\r\n\t\t\tif (result) HAVE_TZ();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses numeric timezones. Returns offset in minutes.\r\n\t\t/// </summary>\r\n\t\tstatic int ParseTimeZone(string str, ref int pos)                               // PHP: timelib_parse_tz_cor\r\n\t\t{\r\n\t\t\tint result = 0;\r\n\t\t\tint length = str.Length - pos;\r\n\r\n\t\t\tswitch (length)\r\n\t\t\t{\r\n\t\t\t\tcase 1: // 0\r\n\t\t\t\tcase 2: // 00\r\n\t\t\t\t\tresult = Int32.Parse(str.Substring(pos, length)) * 60;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 3: // 000, 0:0\r\n\t\t\t\tcase 4: // 0000, 0:00, 00:0\r\n\t\t\t\t\tif (str[pos + 1] == ':')       // 0:0, 0:00\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = (str[pos] - '0') * 60 + Int32.Parse(str.Substring(pos + 2, length - 2));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (str[pos + 2] == ':')  // 00:0\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = ((str[pos] - '0') * 10 + (str[pos + 1] - '0')) * 60 + (str[pos + 3] - '0');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse                          // 000, 0000\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = Int32.Parse(str.Substring(pos, length));\r\n\t\t\t\t\t\tresult = (result / 100) * 60 + result % 100;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 5: // 00:00\r\n\t\t\t\t\tresult = Int32.Parse(str.Substring(pos, 2)) * 60 + Int32.Parse(str.Substring(pos + 3, 2));\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets zone offset by zone abbreviation.\r\n\t\t/// </summary>\r\n\t\tprivate bool SetZoneOffset(string/*!*/ abbreviation)                             // PHP: timelib_lookup_zone, zone_search\r\n\t\t{\r\n\t\t\t// source http://www.worldtimezone.com/wtz-names/timezonenames.html\r\n\t\t\tswitch (abbreviation)\r\n\t\t\t{\r\n\t\t\t\tcase \"z\":\r\n\t\t\t\tcase \"utc\":\r\n\t\t\t\tcase \"gmt\":\r\n\t\t\t\tcase \"wet\":\r\n\t\t\t\tcase \"wez\":\r\n\t\t\t\tcase \"gt\":\r\n\t\t\t\tcase \"wz\":\r\n\t\t\t\tcase \"hg\":\r\n\t\t\t\tcase \"gz\":\r\n\t\t\t\tcase \"cut\":\r\n\t\t\t\tcase \"tuc\": z = 0; break;\r\n\r\n\t\t\t\tcase \"a\":\r\n\t\t\t\tcase \"cet\":\r\n\t\t\t\tcase \"met\":\r\n\t\t\t\tcase \"mez\":\r\n\t\t\t\tcase \"wat\":\r\n\t\t\t\tcase \"fwt\":\r\n\t\t\t\tcase \"hfh\":\r\n\t\t\t\tcase \"wut\":\r\n\t\t\t\tcase \"set\":\r\n\t\t\t\tcase \"swt\":\r\n\t\t\t\tcase \"nor\":\r\n\t\t\t\tcase \"hoe\":\r\n\t\t\t\tcase \"dnt\": z = 60; break;\r\n\r\n\t\t\t\tcase \"b\":\r\n\t\t\t\tcase \"eet\":\r\n\t\t\t\tcase \"oez\":\r\n\t\t\t\tcase \"usz1\":\r\n\t\t\t\tcase \"hfe\": z = +2 * 60; break;\r\n\r\n\t\t\t\tcase \"c\":\r\n\t\t\t\tcase \"msk\":\r\n\t\t\t\tcase \"usz2\":\r\n\t\t\t\tcase \"r2t\":\r\n\t\t\t\tcase \"tst\":\r\n\t\t\t\tcase \"eat\":\r\n\t\t\t\tcase \"bat\":\r\n\t\t\t\tcase \"bt\": z = +3 * 60; break;\r\n\t\t\t\tcase \"it\":\r\n\t\t\t\tcase \"irt\": z = +3 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"d\":\r\n\t\t\t\tcase \"usz3\":\r\n\t\t\t\tcase \"ret\":\r\n\t\t\t\tcase \"mut\":\r\n\t\t\t\tcase \"sct\":\r\n\t\t\t\tcase \"azt\":\r\n\t\t\t\tcase \"amst\": z = +4 * 60; break;\r\n\t\t\t\tcase \"aft\": z = +4 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"e\":\r\n\t\t\t\tcase \"usz4\":\r\n\t\t\t\tcase \"iot\":\r\n\t\t\t\tcase \"tft\":\r\n\t\t\t\tcase \"mvt\":\r\n\t\t\t\tcase \"tmt\":\r\n\t\t\t\tcase \"kgt\":\r\n\t\t\t\tcase \"tjt\":\r\n\t\t\t\tcase \"pkt\":\r\n\t\t\t\tcase \"uzt\":\r\n\t\t\t\tcase \"yekt\": z = +5 * 60; break;\r\n\t\t\t\tcase \"npt\": z = +5 * 60 + 45; break;\r\n\r\n\t\t\t\tcase \"f\":\r\n\t\t\t\tcase \"usz5\":\r\n\t\t\t\tcase \"almt\":\r\n\t\t\t\tcase \"bdt\":\r\n\t\t\t\tcase \"btt\":\r\n\t\t\t\tcase \"lkt\":\r\n\t\t\t\tcase \"novt\":\r\n\t\t\t\tcase \"omst\":\r\n\t\t\t\tcase \"mawt\": z = +6 * 60; break;\r\n\t\t\t\tcase \"mmt\":\r\n\t\t\t\tcase \"nst\":\r\n\t\t\t\tcase \"nsut\": z = +6 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"g\":\r\n\t\t\t\tcase \"usz6\":\r\n\t\t\t\tcase \"jt\":\r\n\t\t\t\tcase \"javt\":\r\n\t\t\t\tcase \"tha\":\r\n\t\t\t\tcase \"ict\":\r\n\t\t\t\tcase \"cxt\":\r\n\t\t\t\tcase \"krat\":\r\n\t\t\t\tcase \"davt\": z = +7 * 60; break;\r\n\r\n\t\t\t\tcase \"h\":\r\n\t\t\t\tcase \"awst\":\r\n\t\t\t\tcase \"usz7\":\r\n\t\t\t\tcase \"bnt\":\r\n\t\t\t\tcase \"hkt\":\r\n\t\t\t\tcase \"myt\":\r\n\t\t\t\tcase \"pht\":\r\n\t\t\t\tcase \"bort\":\r\n\t\t\t\tcase \"ulat\": z = +8 * 60; break;\r\n\r\n\t\t\t\tcase \"i\":\r\n\t\t\t\tcase \"usz8\":\r\n\t\t\t\tcase \"jst\":\r\n\t\t\t\tcase \"kst\":\r\n\t\t\t\tcase \"pwt\":\r\n\t\t\t\tcase \"jayt\":\r\n\t\t\t\tcase \"yakt\": z = +9 * 60; break;\r\n\t\t\t\tcase \"acst\":\r\n\t\t\t\tcase \"cast\": z = +9 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"k\":\r\n\t\t\t\tcase \"aest\":\r\n\t\t\t\tcase \"usz9\":\r\n\t\t\t\tcase \"yapt\":\r\n\t\t\t\tcase \"mpt\":\r\n\t\t\t\tcase \"pgt\":\r\n\t\t\t\tcase \"trut\":\r\n\t\t\t\tcase \"vlat\":\r\n\t\t\t\tcase \"ddut\": z = +10 * 60; break;\r\n\t\t\t\tcase \"lhst\": z = +10 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"l\":\r\n\t\t\t\tcase \"uz10\":\r\n\t\t\t\tcase \"vut\":\r\n\t\t\t\tcase \"sbt\":\r\n\t\t\t\tcase \"nct\":\r\n\t\t\t\tcase \"pont\":\r\n\t\t\t\tcase \"magt\": z = +11 * 60; break;\r\n\t\t\t\tcase \"nft\": z = +11 * 60 + 30; break;\r\n\r\n\t\t\t\tcase \"m\":\r\n\t\t\t\tcase \"uz11\":\r\n\t\t\t\tcase \"nzt\":\r\n\t\t\t\tcase \"fjt\":\r\n\t\t\t\tcase \"tvt\":\r\n\t\t\t\tcase \"kost\":\r\n\t\t\t\tcase \"mht\":\r\n\t\t\t\tcase \"nrt\":\r\n\t\t\t\tcase \"gilt\":\r\n\t\t\t\tcase \"wakt\":\r\n\t\t\t\tcase \"wft\":\r\n\t\t\t\tcase \"pett\":\r\n\t\t\t\tcase \"idle\": z = +12 * 60; break;\r\n\t\t\t\tcase \"chast\": z = +12 * 60 + 45; break;\r\n\t\t\t\tcase \"phot\":\r\n\t\t\t\tcase \"tot\": z = +13 * 60; break;\r\n\t\t\t\tcase \"lint\": z = +14 * 60; break;\r\n\r\n\t\t\t\tcase \"y\":\r\n\t\t\t\tcase \"idlw\": z = -12 * 60; break;\r\n\r\n\t\t\t\tcase \"x\":\r\n\t\t\t\tcase \"best\":\r\n\t\t\t\tcase \"nut\": z = -11 * 60; break;\r\n\r\n\t\t\t\tcase \"w\":\r\n\t\t\t\tcase \"hst\":\r\n\t\t\t\tcase \"hast\":\r\n\t\t\t\tcase \"tkt\":\r\n\t\t\t\tcase \"ckt\":\r\n\t\t\t\tcase \"that\":\r\n\t\t\t\tcase \"ahst\": z = -10 * 60; break;\r\n\r\n\t\t\t\tcase \"v\":\r\n\t\t\t\tcase \"akst\":\r\n\t\t\t\tcase \"yst\":\r\n\t\t\t\tcase \"gamt\": z = -9 * 60; break;\r\n\t\t\t\tcase \"mart\": z = -9 * 60 - 30; break;\r\n\r\n\t\t\t\tcase \"u\":\r\n\t\t\t\tcase \"pst\":\r\n\t\t\t\tcase \"hnp\": z = -8 * 60; break;\r\n\r\n\t\t\t\tcase \"t\":\r\n\t\t\t\tcase \"mst\": z = -7 * 60; break;\r\n\r\n\t\t\t\tcase \"s\":\r\n\t\t\t\tcase \"cst\":\r\n\t\t\t\tcase \"mex\":\r\n\t\t\t\tcase \"east\":\r\n\t\t\t\tcase \"galt\": z = -6 * 60; break;\r\n\r\n\t\t\t\tcase \"r\":\r\n\t\t\t\tcase \"est\":\r\n\t\t\t\tcase \"cot\":\r\n\t\t\t\tcase \"pet\":\r\n\t\t\t\tcase \"ect\": z = -5 * 60; break;\r\n\r\n\t\t\t\tcase \"q\":\r\n\t\t\t\tcase \"clt\":\r\n\t\t\t\tcase \"bot\":\r\n\t\t\t\tcase \"gyt\":\r\n\t\t\t\tcase \"vet\":\r\n\t\t\t\tcase \"pyt\":\r\n\t\t\t\tcase \"fkt\": z = -4 * 60; break;\r\n\r\n\r\n\t\t\t\tcase \"p\":\r\n\t\t\t\tcase \"bst\":\r\n\t\t\t\tcase \"bzt2\":\r\n\t\t\t\tcase \"art\":\r\n\t\t\t\tcase \"uyt\":\r\n\t\t\t\tcase \"srt\":\r\n\t\t\t\tcase \"gft\":\r\n\t\t\t\tcase \"pmt\":\r\n\t\t\t\tcase \"utz\":\r\n\t\t\t\tcase \"wgt\": z = -3 * 60; break;\r\n\r\n\t\t\t\tcase \"o\":\r\n\t\t\t\tcase \"fst\":\r\n\t\t\t\tcase \"vtz\": z = -2 * 60; break;\r\n\r\n\t\t\t\tcase \"n\":\r\n\t\t\t\tcase \"at\":\r\n\t\t\t\tcase \"azot\":\r\n\t\t\t\tcase \"cvt\":\r\n\t\t\t\tcase \"egt\": z = -1 * 60; break;\r\n\r\n\t\t\t\tcase \"acdt\": z = 60 * 10 + 30; break;\r\n\t\t\t\tcase \"adt\": z = -60 * 3; break;        // Atlantic Daylight Time\r\n\t\t\t\tcase \"aedt\": z = 60 * 11; break;\r\n\t\t\t\tcase \"akdt\": z = -60 * 8; break;\r\n\t\t\t\tcase \"ast\": z = 60 * 3; break;        // Arabia Standard Time\r\n\t\t\t\tcase \"cadt\": z = 60 * 10 + 30; break;\r\n\t\t\t\tcase \"cat\": z = -60 * 10; break;\r\n\t\t\t\tcase \"cct\": z = 60 * 8; break;\r\n\t\t\t\tcase \"cdt\": z = -60 * 5; break;       // Central Daylight Time (USA)\r\n\t\t\t\tcase \"cedt\": z = 60 * 2; break;\r\n\t\t\t\tcase \"cest\": z = 60 * 2; break;\r\n\t\t\t\tcase \"eadt\": z = 60 * 11; break;\r\n\t\t\t\tcase \"edt\": z = -60 * 4; break;\r\n\t\t\t\tcase \"eedt\": z = 60 * 3; break;\r\n\t\t\t\tcase \"eest\": z = 60 * 3; break;\r\n\t\t\t\tcase \"gst\": z = 60 * 4; break;        // Gulf Standard Time\r\n\t\t\t\tcase \"haa\": z = -60 * 3; break;\r\n\t\t\t\tcase \"hac\": z = -60 * 5; break;\r\n\t\t\t\tcase \"hadt\": z = -60 * 9; break;\r\n\t\t\t\tcase \"hae\": z = -60 * 4; break;\r\n\t\t\t\tcase \"hap\": z = -60 * 7; break;\r\n\t\t\t\tcase \"har\": z = -60 * 6; break;\r\n\t\t\t\tcase \"hat\": z = -60 * 2 - 30; break;\r\n\t\t\t\tcase \"hay\": z = -60 * 8; break;\r\n\t\t\t\tcase \"hdt\": z = -60 * 9 - 30; break;\r\n\t\t\t\tcase \"hna\": z = -60 * 4; break;\r\n\t\t\t\tcase \"hnc\": z = -60 * 6; break;\r\n\t\t\t\tcase \"hne\": z = -60 * 5; break;\r\n\t\t\t\tcase \"hnr\": z = -60 * 7; break;\r\n\t\t\t\tcase \"hnt\": z = -60 * 3 - 30; break;\r\n\t\t\t\tcase \"hny\": z = -60 * 9; break;\r\n\t\t\t\tcase \"ist\": z = 60 * 1; break;\r\n\t\t\t\tcase \"mdt\": z = -60 * 6; break;\r\n\t\t\t\tcase \"mest\": z = 60 * 2; break;\r\n\t\t\t\tcase \"mesz\": z = 60 * 2; break;\r\n\t\t\t\tcase \"mewt\": z = 60 * 1; break;\r\n\t\t\t\tcase \"ndt\": z = -60 * 2 - 30; break;\r\n\t\t\t\tcase \"nzdt\": z = 60 * 13; break;\r\n\t\t\t\tcase \"nzst\": z = 60 * 12; break;\r\n\t\t\t\tcase \"pdt\": z = -60 * 7; break;\r\n\t\t\t\tcase \"rok\": z = 60 * 9; break;\r\n\t\t\t\tcase \"sst\": z = -11 * 60; break; // Samoa Standard Time\r\n\t\t\t\tcase \"ut\": z = 0; break;\r\n\t\t\t\tcase \"wedt\": z = 60 * 1; break;\r\n\t\t\t\tcase \"west\": z = 60 * 1; break;\r\n\t\t\t\tcase \"wst\": z = 60 * 8; break;\r\n\t\t\t\tcase \"ydt\": z = -60 * 8; break;\r\n\t\t\t\tcase \"zp4\": z = 60 * 4; break;\r\n\t\t\t\tcase \"zp5\": z = 60 * 5; break;\r\n\t\t\t\tcase \"zp6\": z = 60 * 6; break;\r\n\r\n\t\t\t\tdefault: return false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/DateTime.CLR/TimeZones.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.Win32;\r\nusing System.Xml;\r\n\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    #region DateTimeZone\r\n\r\n    /// <summary>\r\n    /// Representation of time zone.\r\n    /// </summary>\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    [ImplementsType]\r\n    public class DateTimeZone : PhpObject\r\n    {\r\n        internal TimeZoneInfo timezone;\r\n\r\n        #region Construction\r\n\r\n        public DateTimeZone(ScriptContext/*!*/context, TimeZoneInfo/*!*/resolvedTimeZone)\r\n            : this(context, true)\r\n        {\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(resolvedTimeZone != null);\r\n\r\n            this.timezone = resolvedTimeZone;\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DateTimeZone(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DateTimeZone(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n#if !SILVERLIGHT\r\n        /// <summary>Deserializing constructor.</summary>\r\n        protected DateTimeZone(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        { }\r\n#endif\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        // public __construct ( string $timezone )\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext/*!*/context, object timezone_name)\r\n        {\r\n            if (timezone_name != null)\r\n            {\r\n                var zoneName = PHP.Core.Convert.ObjectToString(timezone_name);\r\n                this.timezone = PhpTimeZone.GetTimeZone(zoneName);\r\n\r\n                if (this.timezone == null)\r\n                    PhpException.Throw(PhpError.Notice, LibResources.GetString(\"unknown_timezone\", zoneName));\r\n            }\r\n            else\r\n            {\r\n                this.timezone = PhpTimeZone.CurrentTimeZone;\r\n            }\r\n\r\n            return null;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).__construct(stack.Context, arg1);\r\n        }\r\n\r\n        //public array getLocation ( void )\r\n        [ImplementsMethod]\r\n        public object getLocation(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getLocation(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).getLocation(stack.Context);\r\n        }\r\n\r\n        //public string getName ( void )\r\n        [ImplementsMethod]\r\n        public object getName(ScriptContext/*!*/context)\r\n        {\r\n            return (timezone != null) ? timezone.Id : null;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).getName(stack.Context);\r\n        }\r\n\r\n        //public int getOffset ( DateTime $datetime )\r\n        [ImplementsMethod]\r\n        public object getOffset(ScriptContext/*!*/context, object datetime)\r\n        {\r\n            if (this.timezone == null)\r\n                return false;\r\n\r\n            if (datetime == null)\r\n            {\r\n                PhpException.ArgumentNull(\"datetime\");\r\n                return false;\r\n            }\r\n\r\n            var dt = datetime as __PHP__DateTime;\r\n            if (dt == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"datetime\", \"DateTime\");\r\n                return false;\r\n            }\r\n\r\n            return (int)this.timezone.BaseUtcOffset.TotalSeconds + (this.timezone.IsDaylightSavingTime(dt.Time) ? 3600 : 0);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getOffset(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).getOffset(stack.Context, arg1);\r\n        }\r\n\r\n        //public array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )\r\n        [ImplementsMethod]\r\n        public object getTransitions(ScriptContext/*!*/context, [Optional]object timestamp_begin, [Optional]object timestamp_end)\r\n        {\r\n            // TODO: timestamp_begin, timestamp_end\r\n\r\n            var rules = this.timezone.GetAdjustmentRules();\r\n            var array = new PhpArray(rules.Length);\r\n\r\n            //var now = DateTime.UtcNow;\r\n            for (int i = 0; i < rules.Length; i++)\r\n            {\r\n                var rule = rules[i];\r\n\r\n                // TODO: timezone transitions\r\n                //if (rule.DateStart > now || rule.DateEnd < now) continue;\r\n                //var transition = new PhpArray(5);\r\n                //transition[\"ts\"] = (int)(new DateTime(now.Year, rule.DaylightTransitionStart.Month, rule.DaylightTransitionStart.Day) - DateTimeUtils.UtcStartOfUnixEpoch).TotalSeconds;\r\n                ////transition[\"time\"] = ;\r\n                ////transition[\"offset\"] = ;\r\n                //transition[\"isdst\"] = 1;\r\n                ////transition[\"abbr\"] = ;\r\n\r\n                //array.Add(transition);\r\n            }\r\n\r\n            return array;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getTransitions(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValueOptional(1);\r\n            var arg2 = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).getTransitions(stack.Context, arg1, arg2);\r\n        }\r\n\r\n        //public static array listAbbreviations ( void )\r\n        [ImplementsMethod]\r\n        public object listAbbreviations(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object listAbbreviations(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DateTimeZone)instance).listAbbreviations(stack.Context);\r\n        }\r\n\r\n        //public static array listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )\r\n        [ImplementsMethod]\r\n        public static object listIdentifiers(ScriptContext/*!*/context, [Optional]object what, [Optional]object country)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object listIdentifiers(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValueOptional(1);\r\n            var arg2 = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return listIdentifiers(stack.Context, arg1, arg2);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n\t/// <summary>\r\n\t/// Provides timezone information for PHP functions.\r\n\t/// </summary>\r\n    [ImplementsExtension(LibraryDescriptor.ExtDate)]\r\n    public static class PhpTimeZone\r\n    {\r\n        private const string EnvVariableName = \"TZ\";\r\n\r\n        private struct TimeZoneInfoItem\r\n        {\r\n            /// <summary>\r\n            /// Comparer of <see cref=\"TimeZoneInfoItem\"/>, comparing its <see cref=\"TimeZoneInfoItem.PhpName\"/>.\r\n            /// </summary>\r\n            public class Comparer : IComparer<TimeZoneInfoItem>\r\n            {\r\n                public int Compare(TimeZoneInfoItem x, TimeZoneInfoItem y)\r\n                {\r\n                    return StringComparer.OrdinalIgnoreCase.Compare(x.PhpName, y.PhpName);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// PHP time zone name.\r\n            /// </summary>\r\n            public readonly string PhpName;\r\n\r\n            /// <summary>\r\n            /// Actual <see cref=\"TimeZoneInfo\"/> from .NET.\r\n            /// </summary>\r\n            public readonly TimeZoneInfo Info;\r\n\r\n            /// <summary>\r\n            /// An abbrevation, not supported.\r\n            /// </summary>\r\n            public readonly string Abbrevation;\r\n\r\n            /// <summary>\r\n            /// Not listed item used only as an alias for another time zone.\r\n            /// </summary>\r\n            public readonly bool IsAlias;\r\n\r\n            internal TimeZoneInfoItem(string/*!*/phpName, TimeZoneInfo/*!*/info, string abbrevation, bool isAlias)\r\n            {\r\n                // alter the ID with php-like name\r\n                if (!phpName.EqualsOrdinalIgnoreCase(info.Id))\r\n                    info = TimeZoneInfo.CreateCustomTimeZone(phpName, info.BaseUtcOffset, info.DisplayName, info.StandardName, info.DaylightName, info.GetAdjustmentRules());\r\n\r\n                //\r\n                this.PhpName = phpName;\r\n                this.Info = info;\r\n                this.Abbrevation = abbrevation;\r\n                this.IsAlias = isAlias;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes list of time zones.\r\n        /// </summary>\r\n        static PhpTimeZone()\r\n        {\r\n            // initialize tz database (from system time zone database)\r\n            timezones = InitializeTimeZones();\r\n        }\r\n\r\n        #region timezones\r\n\r\n        /// <summary>\r\n        /// PHP time zone database.\r\n        /// </summary>\r\n        private readonly static TimeZoneInfoItem[]/*!!*/timezones;\r\n\r\n        private static TimeZoneInfoItem[]/*!!*/InitializeTimeZones()\r\n        {\r\n            // read list of initial timezones\r\n            var sortedTZ = new SortedSet<TimeZoneInfoItem>(\r\n                EnvironmentUtils.IsWindows ? InitialTimeZones_Windows() : InitialTimeZones_Mono(),\r\n                new TimeZoneInfoItem.Comparer());\r\n\r\n            // add additional time zones:\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"UTC\", TimeZoneInfo.Utc, null, false));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"Etc/UTC\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"Etc/GMT-0\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"GMT\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"GMT0\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"UCT\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"Universal\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"Zulu\", TimeZoneInfo.Utc, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"MET\", sortedTZ.First(t => t.PhpName == \"Europe/Rome\").Info, null, true));\r\n            sortedTZ.Add(new TimeZoneInfoItem(\"WET\", sortedTZ.First(t => t.PhpName == \"Europe/Berlin\").Info, null, true));     \r\n            //{ \"PRC\"              \r\n            //{ \"ROC\"              \r\n            //{ \"ROK\"   \r\n            // W-SU = \r\n            //{ \"Poland\"           \r\n            //{ \"Portugal\"         \r\n            //{ \"PRC\"              \r\n            //{ \"ROC\"              \r\n            //{ \"ROK\"              \r\n            //{ \"Singapore\"      = Asia/Singapore  \r\n            //{ \"Turkey\"  \r\n\r\n            //\r\n            return sortedTZ.ToArray();\r\n        }\r\n\r\n        private static IEnumerable<TimeZoneInfoItem>/*!!*/InitialTimeZones_Windows()\r\n        {\r\n            Debug.Assert(EnvironmentUtils.IsWindows);\r\n\r\n            // time zone cache:\r\n            var tzcache = new Dictionary<string, TimeZoneInfo>(128, StringComparer.OrdinalIgnoreCase);\r\n            Func<string, TimeZoneInfo> cachelookup = (id) =>\r\n            {\r\n                TimeZoneInfo tz;\r\n                if (!tzcache.TryGetValue(id, out tz))\r\n                {\r\n                    TimeZoneInfo winTZ = null;\r\n                    try\r\n                    {\r\n                        winTZ = TimeZoneInfo.FindSystemTimeZoneById(id);\r\n                    }\r\n                    catch { }\r\n\r\n                    tzcache[id] = tz = winTZ;   // null in case \"id\" is not defined in Windows registry (probably missing Windows Update)\r\n                }\r\n\r\n                return tz;\r\n            };\r\n\r\n            // collect php time zone names and match them with Windows TZ IDs:\r\n            var tzdoc = new XmlDocument();\r\n            tzdoc.LoadXml(Strings.WindowsTZ);\r\n            foreach (XmlNode tz in tzdoc.DocumentElement.SelectNodes(@\"//windowsZones/mapTimezones/mapZone\"))\r\n            {\r\n                // <mapZone other=\"Dateline Standard Time\" type=\"Etc/GMT+12\"/>\r\n                // @other = Windows TZ ID\r\n                // @type = PHP TZ names, separated by space\r\n\r\n                var windowsId = tz.Attributes[\"other\"].Value;\r\n                var phpIds = tz.Attributes[\"type\"].Value;\r\n\r\n                var windowsTZ = cachelookup(windowsId);\r\n                if (windowsTZ != null)  // TZ not defined in Windows registry, ignore such time zone // TODO: show a warning\r\n                    foreach (var phpTzName in phpIds.Split(' '))\r\n                    {\r\n                        Debug.Assert(!string.IsNullOrWhiteSpace(phpTzName));\r\n\r\n                        bool isAlias = !phpTzName.Contains('/') || phpTzName.Contains(\"GMT\");   // whether to display such tz within timezone_identifiers_list()\r\n                        yield return new TimeZoneInfoItem(phpTzName, windowsTZ, null, isAlias);\r\n                    }\r\n            }\r\n\r\n            //\r\n            //{ \"US/Alaska\"        \r\n            //{ \"US/Aleutian\"      \r\n            //{ \"US/Arizona\"       \r\n            yield return new TimeZoneInfoItem(\"US/Central\", cachelookup(\"Central Standard Time\"), null, true);\r\n            //{ \"US/East-Indiana\"  \r\n            //{ \"US/Eastern\"       \r\n            yield return new TimeZoneInfoItem(\"US/Hawaii\", cachelookup(\"Hawaiian Standard Time\"), null, true);\r\n            //{ \"US/Indiana-Starke\"\r\n            //{ \"US/Michigan\"      \r\n            //{ \"US/Mountain\"      \r\n            //{ \"US/Pacific\"       \r\n            //{ \"US/Pacific-New\"   \r\n            //{ \"US/Samoa\"   \r\n        }\r\n\r\n        private static IEnumerable<TimeZoneInfoItem>/*!!*/InitialTimeZones_Mono()\r\n        {\r\n            Debug.Assert(!EnvironmentUtils.IsDotNetFramework);\r\n\r\n            var tzns = TimeZoneInfo.GetSystemTimeZones();\r\n            if (tzns == null)\r\n                yield break;\r\n\r\n            foreach (var x in tzns)\r\n            {\r\n                bool isAlias = !x.Id.Contains('/') || x.Id.Contains(\"GMT\");   // whether to display such tz within timezone_identifiers_list()                    \r\n                yield return new TimeZoneInfoItem(x.Id, x, null, isAlias);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Gets the current time zone for PHP date-time library functions. Associated with the current thread.\r\n        /// </summary>\r\n        /// <remarks>It returns the time zone set by date_default_timezone_set PHP function.\r\n        /// If no time zone was set, the time zone is determined in following order:\r\n        /// 1. the time zone set in configuration\r\n        /// 2. the time zone of the current system\r\n        /// 3. default UTC time zone</remarks>\r\n        public static TimeZoneInfo CurrentTimeZone\r\n        {\r\n            get\r\n            {\r\n                TimeZoneInfo info;\r\n\r\n                var ctx = ScriptContext.CurrentContext;\r\n\r\n                // timezone is set by date_default_timezone_set(), return this one\r\n                if (ctx.Properties.TryGetProperty<TimeZoneInfo>(out info) == false || info == null)\r\n                { \r\n                    // default timezone was not set, use & cache the current timezone\r\n                    info = ctx.Properties\r\n                        .GetOrCreateProperty(() => new CurrentTimeZoneCache())\r\n                        .TimeZone;\r\n                }\r\n\r\n                //\r\n                return info;\r\n            }\r\n#if DEBUG   // for unit tests only\r\n            internal set\r\n            {\r\n                ScriptContext.CurrentContext.Properties.SetProperty(value);\r\n            }\r\n#endif\r\n        }\r\n\r\n        #region CurrentTimeZoneCache\r\n\r\n        /// <summary>\r\n        /// Cache of current TimeZone with auto-update ability.\r\n        /// </summary>\r\n        private class CurrentTimeZoneCache\r\n        {\r\n            public CurrentTimeZoneCache()\r\n            {\r\n            }\r\n#if DEBUG\r\n            internal CurrentTimeZoneCache(TimeZoneInfo timezone)\r\n            {\r\n                this._timeZone = timezone;\r\n                this._changedFunc = (_) => false;\r\n            }\r\n#endif\r\n\r\n            /// <summary>\r\n            /// Get the TimeZone set by the current process. Depends on environment variable, or local configuration, or system time zone.\r\n            /// </summary>\r\n            public TimeZoneInfo TimeZone\r\n            {\r\n                get\r\n                {\r\n                    if (_timeZone == null || _changedFunc == null || _changedFunc(_timeZone) == true)\r\n                        _timeZone = DetermineTimeZone(out _changedFunc);    // get the current timezone, update the function that determines, if the timezone has to be rechecked.\r\n\r\n                    return _timeZone;\r\n                }\r\n            }\r\n\r\n            private TimeZoneInfo _timeZone;\r\n\r\n            /// <summary>\r\n            /// Function that determines if the current timezone should be rechecked.\r\n            /// </summary>\r\n            private Func<TimeZoneInfo/*!*/, bool> _changedFunc;\r\n\r\n            /// <summary>\r\n            /// Finds out the time zone in the way how PHP does.\r\n            /// </summary>\r\n            private static TimeZoneInfo DetermineTimeZone(out Func<TimeZoneInfo, bool> changedFunc)\r\n            {\r\n                TimeZoneInfo result;\r\n\r\n                // check environment variable:\r\n#if !SILVERLIGHT\r\n                string env_tz = Environment.GetEnvironmentVariable(EnvVariableName);\r\n                if (!String.IsNullOrEmpty(env_tz))\r\n                {\r\n                    result = GetTimeZone(env_tz);\r\n                    if (result != null)\r\n                    {\r\n                        // recheck the timezone only if the environment variable changes\r\n                        changedFunc = (timezone) => !String.Equals(timezone.StandardName, Environment.GetEnvironmentVariable(EnvVariableName), StringComparison.OrdinalIgnoreCase);\r\n                        // return the timezone set in environment\r\n                        return result;\r\n                    }\r\n\r\n                    PhpException.Throw(PhpError.Notice, LibResources.GetString(\"unknown_timezone_env\", env_tz));\r\n                }\r\n#endif\r\n\r\n                // check configuration:\r\n                LibraryConfiguration config = LibraryConfiguration.Local;\r\n                if (config.Date.TimeZone != null)\r\n                {\r\n                    // recheck the timezone only if the local configuration changes, ignore the environment variable from this point at all\r\n                    changedFunc = (timezone) => LibraryConfiguration.Local.Date.TimeZone != timezone;\r\n                    return config.Date.TimeZone;\r\n                }\r\n\r\n                // convert current system time zone to PHP zone:\r\n                result = SystemToPhpTimeZone(TimeZoneInfo.Local);\r\n                \r\n                // UTC:\r\n                if (result == null)\r\n                    result = DateTimeUtils.UtcTimeZone;// GetTimeZone(\"UTC\");\r\n\r\n                PhpException.Throw(PhpError.Strict, LibResources.GetString(\"using_implicit_timezone\", result.Id));\r\n\r\n                // recheck the timezone when the TimeZone in local configuration is set\r\n                changedFunc = (timezone) => LibraryConfiguration.Local.Date.TimeZone != null;\r\n                return result;\r\n            }\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n#if !SILVERLIGHT\r\n        /// <summary>\r\n        /// Gets/sets/resets legacy configuration setting \"date.timezone\".\r\n        /// </summary>\r\n        internal static object GsrTimeZone(LibraryConfiguration/*!*/ local, LibraryConfiguration/*!*/ @default, object value, IniAction action)\r\n        {\r\n            string result = (local.Date.TimeZone != null) ? local.Date.TimeZone.StandardName : null;\r\n\r\n            switch (action)\r\n            {\r\n                case IniAction.Set:\r\n                    {\r\n                        string name = Core.Convert.ObjectToString(value);\r\n                        TimeZoneInfo zone = GetTimeZone(name);\r\n\r\n                        if (zone == null)\r\n                        {\r\n                            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_timezone\", name));\r\n                        }\r\n                        else\r\n                        {\r\n                            local.Date.TimeZone = zone;\r\n                        }\r\n                        break;\r\n                    }\r\n\r\n                case IniAction.Restore:\r\n                    local.Date.TimeZone = @default.Date.TimeZone;\r\n                    break;\r\n            }\r\n            return result;\r\n        }\r\n#endif\r\n\r\n        /// <summary>\r\n        /// Gets an instance of <see cref=\"TimeZone\"/> corresponding to specified PHP name for time zone.\r\n        /// </summary>\r\n        /// <param name=\"phpName\">PHP time zone name.</param>\r\n        /// <returns>The time zone or a <B>null</B> reference.</returns>\r\n        public static TimeZoneInfo GetTimeZone(string/*!*/ phpName)\r\n        {\r\n            if (string.IsNullOrEmpty(phpName))\r\n                return null;\r\n\r\n            // simple binary search (not the Array.BinarySearch)\r\n            var timezones = PhpTimeZone.timezones;\r\n            int a = 0, b = timezones.Length - 1;\r\n            while (a <= b)\r\n            {\r\n                int x = (a + b) >> 1;\r\n                int comparison = StringComparer.OrdinalIgnoreCase.Compare(timezones[x].PhpName, phpName);\r\n                if (comparison == 0)\r\n                    return timezones[x].Info;\r\n                \r\n                if (comparison < 0)\r\n                    a = x + 1;\r\n                else //if (comparison > 0)\r\n                    b = x - 1;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to match given <paramref name=\"systemTimeZone\"/> to our fixed <see cref=\"timezones\"/>.\r\n        /// </summary>\r\n        private static TimeZoneInfo SystemToPhpTimeZone(TimeZoneInfo systemTimeZone)\r\n        {\r\n            if (systemTimeZone == null)\r\n                return null;\r\n\r\n            var tzns = timezones;\r\n            for (int i = 0; i < tzns.Length; i++)\r\n            {\r\n                var tz = tzns[i].Info;\r\n                if (tz != null && tz.DisplayName.EqualsOrdinalIgnoreCase(systemTimeZone.DisplayName) && tz.HasSameRules(systemTimeZone))\r\n                    return tz;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #region date_default_timezone_get, date_default_timezone_set\r\n\r\n        [ImplementsFunction(\"date_default_timezone_set\")]\r\n        public static bool SetCurrentTimeZone(string zoneName)\r\n        {\r\n            var zone = GetTimeZone(zoneName);\r\n            if (zone == null)\r\n            {\r\n                PhpException.Throw(PhpError.Notice, LibResources.GetString(\"unknown_timezone\", zoneName));\r\n                return false;\r\n            }\r\n\r\n            ScriptContext.CurrentContext.Properties.SetProperty<TimeZoneInfo>(zone);\r\n            return true;\r\n        }\r\n\r\n        [ImplementsFunction(\"date_default_timezone_get\")]\r\n        public static string GetCurrentTimeZone()\r\n        {\r\n            var timezone = CurrentTimeZone;\r\n\r\n            return (timezone != null) ? timezone.Id : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region timezone_identifiers_list, timezone_version_get\r\n\r\n        [ImplementsFunction(\"timezone_identifiers_list\")]\r\n        public static PhpArray IdentifierList()\r\n        {\r\n            var timezones = PhpTimeZone.timezones;\r\n\r\n            // copy names to PHP array:\r\n            var array = new PhpArray(timezones.Length);\r\n            for (int i = 0; i < timezones.Length; i++)\r\n                if (!timezones[i].IsAlias)\r\n                    array.AddToEnd(timezones[i].PhpName);\r\n\r\n            //\r\n            return array;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the version of used the time zone database.\r\n        /// </summary>\r\n        [ImplementsFunction(\"timezone_version_get\")]\r\n        public static string GetTZVersion()\r\n        {\r\n            try\r\n            {\r\n                using (var reg = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\"))\r\n                    return reg.GetValue(\"TzVersion\", 0).ToString() + \".system\";\r\n            }\r\n            catch { }\r\n\r\n            // no windows update installed\r\n            return \"0.system\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region timezone_open, timezone_offset_get\r\n\r\n        /// <summary>\r\n        /// Alias of new <see cref=\"DateTimeZone\"/>\r\n        /// </summary>\r\n        [ImplementsFunction(\"timezone_open\")]\r\n        [return: CastToFalse]\r\n        public static object TimeZoneOpen(ScriptContext/*!*/context, string timezone)\r\n        {\r\n            var tz = GetTimeZone(timezone);\r\n            if (tz == null)\r\n                return null;\r\n\r\n            return new DateTimeZone(context, tz);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Alias of <see cref=\"DateTimeZone.getOffset\"/>\r\n        /// </summary>\r\n        [ImplementsFunction(\"timezone_offset_get\")]\r\n        [return: CastToFalse]\r\n        public static int TimeZoneOffsetGet(ScriptContext context, DateTimeZone timezone, __PHP__DateTime datetime)\r\n        {\r\n            if (timezone == null)\r\n                return -1;\r\n\r\n            var result = timezone.getOffset(context, datetime);\r\n            if (result == null)\r\n                return -1;\r\n\r\n            return PHP.Core.Convert.ObjectToInteger(timezone.getOffset(context, datetime));\r\n        }\r\n\r\n        [ImplementsFunction(\"timezone_transitions_get\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray TimeZoneGetTransitions(ScriptContext context, DateTimeZone timezone)\r\n        {\r\n            if (timezone == null)\r\n                return null;\r\n\r\n            return (PhpArray)timezone.getTransitions(context, Arg.Default, Arg.Default);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/DebugTests.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.Collections.Specialized;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Windows.Forms;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\n\r\nnamespace PHP.Library\r\n{\r\n#if DEBUG\r\n\r\n\t/// <exclude/>\r\n\tpublic static class PhpDocumentation\r\n\t{\r\n\t\tprivate static bool FunctionsCallback(MethodInfo method, ImplementsFunctionAttribute ifa, object result)\r\n\t\t{\r\n\t\t\tif ((ifa.Options & FunctionImplOptions.Internal) == 0 && (ifa.Options & FunctionImplOptions.NotSupported) == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpArray array = (PhpArray)result;\r\n\t\t\t\t((PhpArray)array[\"name\"]).Add(ifa.Name);\r\n\t\t\t\t((PhpArray)array[\"type\"]).Add(method.DeclaringType.FullName);\r\n\t\t\t\t((PhpArray)array[\"method\"]).Add(method.Name);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate static bool TypesCallback(Type type, object result)\r\n\t\t{\r\n\t\t\tPhpArray array = (PhpArray)result;\r\n\t\t\t((PhpArray)array[\"name\"]).Add(type.FullName);\r\n\t\t\t((PhpArray)array[\"interface\"]).Add(type.IsInterface);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate static bool ConstantsCallback(FieldInfo field, ImplementsConstantAttribute ica, object result)\r\n\t\t{\r\n\t\t\tPhpArray array = (PhpArray)result;\r\n\t\t\t((PhpArray)array[\"name\"]).Add(ica.Name);\r\n\t\t\t((PhpArray)array[\"type\"]).Add(field.DeclaringType.FullName);\r\n\t\t\t((PhpArray)array[\"field\"]).Add(field.Name);\r\n\t\t\t((PhpArray)array[\"insensitive\"]).Add(ica.CaseInsensitive);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints documentation table for classes.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"phpnet_doc_functions\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray PrintFunctions()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tresult.Add(\"name\", new PhpArray());\r\n\t\t\tresult.Add(\"type\", new PhpArray());\r\n\t\t\tresult.Add(\"method\", new PhpArray());\r\n\r\n\t\t\tAssembly assembly = typeof(PhpDocumentation).Assembly;\r\n\t\t\t//PhpLibraryModule.EnumerateFunctions(assembly, new PhpLibraryModule.FunctionsEnumCallback(FunctionsCallback), result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints documentation table for classes.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"phpnet_doc_types\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray PrintTypes()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tresult.Add(\"name\", new PhpArray());\r\n\t\t\tresult.Add(\"interface\", new PhpArray());\r\n\r\n\t\t\tAssembly assembly = typeof(PhpDocumentation).Assembly;\r\n\t\t\t//PhpLibraryModule.EnumerateTypes(assembly, new PhpLibraryModule.TypeEnumCallback(TypesCallback), result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints documentation table for classes.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"phpnet_doc_constants\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray PrintConstants()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tresult.Add(\"name\", new PhpArray());\r\n\t\t\tresult.Add(\"type\", new PhpArray());\r\n\t\t\tresult.Add(\"field\", new PhpArray());\r\n\t\t\tresult.Add(\"insensitive\", new PhpArray());\r\n\r\n\t\t\tAssembly assembly = typeof(PhpDocumentation).Assembly;\r\n\t\t\t//PhpLibraryModule.EnumerateConstants(assembly, new PhpLibraryModule.ConstantsEnumCallback(ConstantsCallback), result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Functions used for debugging class library.\r\n\t/// </summary>\r\n\t/// <exclude/>\r\n\tpublic sealed class DebugTests\r\n\t{\r\n\t\tprivate DebugTests() { }\r\n\r\n        [ImplementsFunction(\"__break\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void Break()\r\n\t\t{\r\n\t\t\tDebugger.Break();\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__ddump\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void DebugDump(object var)\r\n\t\t{\r\n\t\t\tStringWriter s = new StringWriter();\r\n\t\t\tPhpVariable.Dump(s, var);\r\n\t\t\tDebug.WriteLine(\"DEBUG\", s.ToString());\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__0\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f0(PhpReference arg)\r\n\t\t{\r\n\t\t\tPhpVariable.Dump(arg.value);\r\n\t\t\targ.value = \"hello\";\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__1\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f1(params PhpReference[] args)\r\n\t\t{\r\n\t\t\tforeach (PhpReference arg in args)\r\n\t\t\t{\r\n\t\t\t\tPhpVariable.Dump(arg.value);\r\n\t\t\t\targ.value = \"hello\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__2\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f2(params int[] args)\r\n\t\t{\r\n\t\t\tforeach (int arg in args)\r\n\t\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__3\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f3(params object[] args)\r\n\t\t{\r\n\t\t\tforeach (object arg in args)\r\n\t\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__4\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f4(params PhpArray[] args)\r\n\t\t{\r\n\t\t\tforeach (PhpArray arg in args)\r\n\t\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__5\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f5(params double[] args)\r\n\t\t{\r\n\t\t\tforeach (double arg in args)\r\n\t\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__6\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f6(ref PhpArray arg)\r\n\t\t{\r\n\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__7\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void f7(params PhpArray[] args)\r\n\t\t{\r\n\t\t\tforeach (PhpArray arg in args)\r\n\t\t\t\tPhpVariable.Dump(arg);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__8\", FunctionImplOptions.Internal)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string f8(PhpResource a, PhpResource b, PhpResource c)\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__9\", FunctionImplOptions.Internal)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int f9(PhpResource a)\r\n\t\t{\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__readline\", FunctionImplOptions.Internal)]\r\n\t\tpublic static string ReadLine()\r\n\t\t{\r\n\t\t\treturn Console.ReadLine();\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__stacktrace\", FunctionImplOptions.Internal)]\r\n\t\tpublic static string ClrStackTrace()\r\n\t\t{\r\n\t\t\tStackTrace trace = new StackTrace(true);\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\r\n\t\t\tfor (int i = 0; i < trace.FrameCount; i++)\r\n\t\t\t{\r\n\t\t\t\tStackFrame frame = trace.GetFrame(i);\r\n\t\t\t\tMethodBase method = frame.GetMethod();\r\n\r\n\t\t\t\tsb.AppendFormat(\"{0} {1} {2} {3} {4} {5}\\n\",\r\n\t\t\t\t\t(method != null) ? method.DeclaringType + \".\" + method.Name : \"NULL\",\r\n\t\t\t\t\tframe.GetFileName(),\r\n\t\t\t\t\tframe.GetFileLineNumber(),\r\n\t\t\t\t\tframe.GetFileColumnNumber(),\r\n\t\t\t\t\tframe.GetNativeOffset(),\r\n\t\t\t\t\tframe.GetILOffset());\r\n\t\t\t}\r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an array of headers of the current HTTP request.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"__headers\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray GetHeaders()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tNameValueCollection headers = HttpContext.Current.Request.Headers;\r\n\r\n\t\t\tstring[] keys = headers.AllKeys;\r\n\t\t\tfor (int i = 0; i < keys.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring[] values = headers.GetValues(keys[i]);\r\n\r\n\t\t\t\tif (values.Length > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArray keys_array = new PhpArray();\r\n\r\n\t\t\t\t\tfor (int j = 0; j < values.Length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkeys_array.Add(values[j]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresult.Add(keys[i], keys_array);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(keys[i], values[0]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__request_enc\", FunctionImplOptions.Internal)]\r\n\t\tpublic static string GetRequestEncoding()\r\n\t\t{\r\n\t\t\treturn HttpContext.Current.Request.ContentEncoding.EncodingName;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__response_enc\", FunctionImplOptions.Internal)]\r\n\t\tpublic static string GetResponseEncoding()\r\n\t\t{\r\n\t\t\treturn HttpContext.Current.Response.ContentEncoding.EncodingName;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__upper\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpBytes GetUpperBytes()\r\n\t\t{\r\n\t\t\tbyte[] result = new byte[30];\r\n\t\t\tfor (int i = 0; i < result.Length; i++)\r\n\t\t\t\tresult[i] = (byte)(i + 128);\r\n\t\t\treturn new PhpBytes(result);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__throw\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpBytes __throw()\r\n\t\t{\r\n\t\t\tthrow new ArgumentNullException(\"XXX\", \"Fake exception\");\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__dump_transient\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void __dump_transient()\r\n\t\t{\r\n\t\t\tDynamicCode.Dump(ScriptContext.CurrentContext, ScriptContext.CurrentContext.Output);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"__evalinfo\", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray __evalinfo()\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\treturn PhpArray.Keyed(\r\n\t\t\t  \"file\", context.EvalRelativeSourcePath,\r\n\t\t\t  \"line\", context.EvalLine,\r\n\t\t\t  \"column\", context.EvalColumn);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__dump_session\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void __dump_session()\r\n\t\t{\r\n\t\t\tTextWriter o = ScriptContext.CurrentContext.Output;\r\n\r\n\t\t\tHttpContext context = HttpContext.Current;\r\n\t\t\tif (context == null) { o.WriteLine(\"HTTP CONTEXT NULL\"); return; }\r\n\r\n\t\t\tHttpSessionState state = context.Session;\r\n\t\t\tif (context == null) { o.WriteLine(\"SESSION NULL\"); return; }\r\n\r\n\t\t\tPhpArray a = new PhpArray();\r\n\t\t\tforeach (string name in state)\r\n\t\t\t{\r\n\t\t\t\ta[name] = state[name];\r\n\t\t\t}\r\n\r\n\t\t\tPhpVariable.Dump(o, a);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__dump_fdecls\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray __dump_fdecls()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tforeach (KeyValuePair<string, DRoutineDesc> entry in ScriptContext.CurrentContext.DeclaredFunctions)\r\n\t\t\t{\r\n\t\t\t\tresult.Add(entry.Key, entry.Value.MakeFullName());\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__type\", FunctionImplOptions.Internal)]\r\n\t\tpublic static string PhpNetType(object o)\r\n\t\t{\r\n\t\t\treturn o == null ? \"null\" : o.GetType().FullName;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__assemblies\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray GetAssemblies()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tforeach (PhpLibraryAssembly a in ScriptContext.CurrentContext.ApplicationContext.GetLoadedLibraries())\r\n\t\t\t\tresult.Add(a.RealAssembly.FullName);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__descriptors\", FunctionImplOptions.Internal)]\r\n\t\tpublic static PhpArray GetDescriptors()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tforeach (PhpLibraryAssembly a in ScriptContext.CurrentContext.ApplicationContext.GetLoadedLibraries())\r\n\t\t\t\tresult.Add(a.Descriptor.GetType().FullName);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic sealed class Remoter : MarshalByRefObject\r\n\t\t{\r\n\t\t\tpublic string[] GetLoadedAssemblies()\r\n\t\t\t{\r\n\t\t\t\tAssembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();\r\n\t\t\t\tstring[] result = new string[assemblies.Length];\r\n\t\t\t\tfor (int i = 0; i < assemblies.Length; i++)\r\n\t\t\t\t\tresult[i] = assemblies[i].FullName;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tpublic static Remoter CreateRemoteInstance(AppDomain domain)\r\n\t\t\t{\r\n\t\t\t\tType t = typeof(Remoter);\r\n\t\t\t\treturn (Remoter)domain.CreateInstanceAndUnwrap(t.Assembly.FullName, t.FullName);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static void AppDomainInfo(AppDomain domain, TextWriter output)\r\n\t\t{\r\n\t\t\tif (domain == null) return;\r\n\r\n\t\t\toutput.WriteLine(\"</PRE><H3>AppDomain info</H3><PRE>\");\r\n\r\n\t\t\toutput.WriteLine(\"FriendlyName = {0}\", domain.FriendlyName);\r\n\t\t\toutput.WriteLine(\"ApplicationBase = {0}\", domain.SetupInformation.ApplicationBase);\r\n\t\t\toutput.WriteLine(\"ConfigurationFile = {0}\", domain.SetupInformation.ConfigurationFile);\r\n\t\t\toutput.WriteLine(\"DynamicBase = {0}\", domain.SetupInformation.DynamicBase);\r\n\t\t\toutput.WriteLine(\"PrivateBinPath = {0}\", domain.SetupInformation.PrivateBinPath);\r\n\t\t\toutput.WriteLine(\"CachePath = {0}\", domain.SetupInformation.CachePath);\r\n\t\t\toutput.WriteLine(\"ShadowCopyDirectories = {0}\", domain.SetupInformation.ShadowCopyDirectories);\r\n\t\t\toutput.WriteLine(\"ShadowCopyFiles = {0}\", domain.SetupInformation.ShadowCopyFiles);\r\n\r\n\t\t\tif (domain == AppDomain.CurrentDomain)\r\n\t\t\t{\r\n\t\t\t\tforeach (Assembly assembly in domain.GetAssemblies())\r\n\t\t\t\t\toutput.WriteLine(\"  Assembly: {0}\", assembly.FullName);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforeach (string name in Remoter.CreateRemoteInstance(domain).GetLoadedAssemblies())\r\n\t\t\t\t\toutput.WriteLine(\"  Assembly: {0}\", name);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"__info\", FunctionImplOptions.Internal)]\r\n\t\tpublic static void Info()\r\n\t\t{\r\n\t\t\tInfo(ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\tpublic static void Info(ScriptContext/*!*/ scriptContext)\r\n\t\t{\r\n\t\t\tTextWriter output = scriptContext.Output;\r\n\t\t\tHttpContext ctx = HttpContext.Current;\r\n\r\n\t\t\toutput.WriteLine(\"<br><div style='background-color:oldlace'><H3>Phalanger debug info:</H3><PRE>\");\r\n\r\n\t\t\toutput.WriteLine(\"</PRE><H3>HttpRuntime</H3><PRE>\");\r\n\r\n\t\t\toutput.WriteLine(\"AppDomainAppId = {0}\", HttpRuntime.AppDomainAppId);\r\n\t\t\toutput.WriteLine(\"AppDomainAppPath = {0}\", HttpRuntime.AppDomainAppPath);\r\n\t\t\toutput.WriteLine(\"AppDomainAppVirtualPath = {0}\", HttpRuntime.AppDomainAppVirtualPath);\r\n\t\t\toutput.WriteLine(\"AppDomainId = {0}\", HttpRuntime.AppDomainId);\r\n\t\t\toutput.WriteLine(\"AspInstallDirectory = {0}\", HttpRuntime.AspInstallDirectory);\r\n\t\t\toutput.WriteLine(\"BinDirectory = {0}\", HttpRuntime.BinDirectory);\r\n\t\t\toutput.WriteLine(\"ClrInstallDirectory = {0}\", HttpRuntime.ClrInstallDirectory);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"CodegenDir = {0}\", HttpRuntime.CodegenDir);\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"CodegenDir = N/A\");\r\n\t\t\t}\r\n\t\t\toutput.WriteLine(\"MachineConfigurationDirectory = {0}\", HttpRuntime.MachineConfigurationDirectory);\r\n\r\n\t\t\toutput.WriteLine(\"</PRE><H3>Worker Process</H3><PRE>\");\r\n\r\n\t\t\toutput.Write(\"Worker processes: \");\r\n\t\t\tif (ctx != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (ProcessInfo pi in ProcessModelInfo.GetHistory(20))\r\n\t\t\t\t\toutput.Write(pi.ProcessID + \";\");\r\n\t\t\t\toutput.WriteLine();\r\n\r\n\t\t\t\toutput.WriteLine(\"Current Worker Process start time: {0}\", ProcessModelInfo.GetCurrentProcessInfo().StartTime);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"N/A\");\r\n\t\t\t}\r\n\r\n\t\t\tProcess proc = Process.GetCurrentProcess();\r\n\t\t\toutput.WriteLine(\"Current process: Id = {0}\", proc.Id);\r\n\t\t\toutput.WriteLine(\"Current PrivateMemorySize: {0} MB\", proc.PrivateMemorySize64 / (1024 * 1024));\r\n\t\t\toutput.WriteLine(\"Current WorkingSet: {0} MB\", proc.WorkingSet64 / (1024 * 1024));\r\n\t\t\toutput.WriteLine(\"Current VirtualMemorySize: {0} MB\", proc.VirtualMemorySize64 / (1024 * 1024));\r\n\t\t\toutput.WriteLine(\"Current thread: HashCode = {0}\", Thread.CurrentThread.GetHashCode());\r\n\t\t\toutput.WriteLine(\"Current domain: {0}\", Thread.GetDomain().FriendlyName);\r\n\r\n\t\t\tAppDomainInfo(AppDomain.CurrentDomain, output);\r\n\t\t\tif (ctx != null) AppDomainInfo(AppDomain.CurrentDomain, output);\r\n\r\n\t\t\toutput.WriteLine(\"</PRE><H3>Libraries</H3><PRE>\");\r\n\r\n\t\t\tforeach (PhpLibraryAssembly a in scriptContext.ApplicationContext.GetLoadedLibraries())\r\n\t\t\t\ta.Descriptor.Dump(output);\r\n\r\n\t\t\t//output.WriteLine(\"</PRE><H3>Invalidated Precompiled Scripts</H3><PRE>\");\r\n\t\t\t//foreach (string item in WebServerManagersDebug.GetInvalidatedScripts())\r\n\t\t\t//  output.WriteLine(item);\r\n\r\n\t\t\toutput.WriteLine(\"</PRE><H3>Cache</H3><PRE>\");\r\n\t\t\tforeach (DictionaryEntry item in HttpRuntime.Cache)\r\n\t\t\t\tif (item.Value is string)\r\n\t\t\t\t\toutput.WriteLine(\"{0} => '{1}'\", item.Key, item.Value);\r\n\t\t\t\telse\r\n\t\t\t\t\toutput.WriteLine(\"{0} => instance of {1}\", item.Key, item.Value.GetType().FullName);\r\n\r\n\t\t\tif (ctx != null)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"</PRE><H3>Query Variables</H3><PRE>\");\r\n\t\t\t\tString[] keys;\r\n\t\t\t\tkeys = ctx.Request.QueryString.AllKeys;\r\n\t\t\t\tfor (int i = 0; i < keys.Length; i++)\r\n\t\t\t\t\toutput.WriteLine(\"{0} = \\\"{1}\\\"\", keys[i], ctx.Request.QueryString.GetValues(keys[i])[0]);\r\n\r\n\t\t\t\tif (ctx.Session != null)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.WriteLine(\"</PRE><H3>Session Variables</H3><PRE>\");\r\n\r\n\t\t\t\t\toutput.WriteLine(\"IsCookieless = {0}\", ctx.Session.IsCookieless);\r\n\t\t\t\t\toutput.WriteLine(\"IsNewSession = {0}\", ctx.Session.IsNewSession);\r\n\t\t\t\t\toutput.WriteLine(\"SessionID = {0}\", ctx.Session.SessionID);\r\n\r\n\t\t\t\t\tforeach (string name in ctx.Session)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.Write(\"{0} = \", name);\r\n\t\t\t\t\t\tPhpVariable.Dump(ctx.Session[name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.WriteLine(\"</PRE><H3>Cookies</H3><PRE>\");\r\n\t\t\t\tforeach (string cookie_name in ctx.Request.Cookies)\r\n\t\t\t\t{\r\n\t\t\t\t\tHttpCookie cookie = ctx.Request.Cookies[cookie_name];\r\n\t\t\t\t\tConsole.WriteLine(\"{0} = {1}\", cookie.Name, cookie.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.WriteLine(\"</PRE><H3>Server Variables</H3><PRE>\");\r\n\r\n\t\t\t\tkeys = ctx.Request.ServerVariables.AllKeys;\r\n\t\t\t\tfor (int i = 0; i < keys.Length; i++)\r\n\t\t\t\t\toutput.WriteLine(\"{0} = \\\"{1}\\\"\", keys[i], ctx.Request.ServerVariables.GetValues(keys[i])[0]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"</PRE><H3>Missing HttpContext</H3><PRE>\");\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine(\"</PRE></DIV>\");\r\n\t\t}\r\n\t}\r\n\r\n#endif\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Doc/Arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n  <intrinsicEnumeration>\r\n    <remarks>\r\n      If the enumerator has been moved behind the last (or before the first) \r\n      item of array it is blocked until <see cref=\"PhpArrays.Reset\"/>\r\n      or <see cref=\"PhpArrays.End\"/> is called or a new item is added to the array.\r\n    </remarks>\r\n  </intrinsicEnumeration>\r\n</docs>  "
  },
  {
    "path": "Source/ClassLibrary/Doc/RootPage.html",
    "content": "<html dir=\"LTR\">\r\n  <head>\r\n    <META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n    <meta name=\"vs_targetSchema\" content=\"http://schemas.microsoft.com/intellisense/ie5\">\r\n    <title>Phalanger Class Library Reference</title>\r\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"MSDN.css\">\r\n  </head>\r\n  <body id=\"bodyID\" class=\"dtBODY\">\r\n    <div id=\"nsbanner\">\r\n      <div id=\"bannerrow1\">\r\n        <table class=\"bannerparthead\" cellspacing=\"0\" ID=\"Table1\">\r\n          <tr id=\"hdr\">\r\n            <td class=\"runninghead\">Phalanger Class Library Reference</td>\r\n            <td class=\"product\"></td>\r\n          </tr>\r\n        </table>\r\n      </div>\r\n      <div id=\"TitleRow\">\r\n        <h1 class=\"dtH1\">Phalanger Class Library Reference</h1>\r\n      </div>\r\n    </div>\r\n    <div id=\"nstext\">\r\n      <p>\r\n        This section contains reference documentation of the public classes that constitute the Phalanger Class Library.\r\n      </p>\r\n    </div>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "Source/ClassLibrary/Doc/Streams.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n\r\n<method name=\"Filter\">\r\n  <summary>\r\n  Processes the <paramref name=\"input\"/> (either of type\r\n  <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>) data through this filter\r\n  and returns the filtered data in one of these formats or <c>null</c>.\r\n  </summary>\r\n  <remarks>\r\n  A filter may hold data in its own buffers when it's unable\r\n  to process whole the input. However, when closing is <c>true</c>,\r\n  it should pass as much data as possible because it is the last call\r\n  to Filter.\r\n  </remarks>\r\n  <param name=\"input\">A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing \r\n  the data to be filtered.</param>\r\n  <param name=\"closing\"><c>true</c> if this is the last call to this filter.</param>\r\n  <returns>\r\n  A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing \r\n  the filtered data or <c>null</c> if no output is available yet.\r\n  </returns>\r\n</method>\r\n\r\n<method name=\"Append\">\r\n\t<summary>\r\n\tAppends a filter to the chain of stream-filters of the <paramref name=\"stream\"/>.\r\n\t</summary> \r\n\t<remarks>\r\n\tThe filter is attached to the read filter chain if the file was opened for reading \r\n\t(i.e. File Mode: <c>r</c>, and/or <c>+</c>); attached to the write filter chain if the file \r\n\twas opened for writing (i.e. File Mode: <c>w</c>, <c>a</c>, and/or <c>+</c>). \r\n\t</remarks>\r\n\t<param name=\"filter\">The name of the filter - either built-in or previously\r\n\tdefined using <see cref=\"PhpFilters.Register\"/>.</param>\r\n\t<param name=\"stream\">The stream which filter-chain is to be extended with the <paramref name=\"filter\"/>.</param>\r\n\t<returns>True if successful.</returns>\r\n</method>\r\n\r\n<method name=\"Prepend\">\r\n\t<summary>\r\n\tPrepends a filter to the chain of stream-filters of the <paramref name=\"stream\"/>.\r\n\t</summary> \r\n\t<remarks>\r\n\tThe filter is attached to the read filter chain if the file was opened for reading \r\n\t(i.e. File Mode: <c>r</c>, and/or <c>+</c>); attached to the write filter chain if the file \r\n\twas opened for writing (i.e. File Mode: <c>w</c>, <c>a</c>, and/or <c>+</c>). \r\n\t</remarks>\r\n\t<param name=\"filter\">The name of the filter - either built-in or previously\r\n\tdefined using <see cref=\"PhpFilters.Register\"/>.</param>\r\n\t<param name=\"stream\">The stream which filter-chain is to be extended with the <paramref name=\"filter\"/>.</param>\r\n\t<returns>True if successful.</returns>\r\n</method>\r\n\r\n</docs>"
  },
  {
    "path": "Source/ClassLibrary/Doc/Strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n<method name=\"AddCSlashes\">\r\n  <summary>\r\n    Adds backslashes before specified characters.\r\n  </summary>\r\n  <param name=\"str\">The string to be processed.</param>\r\n  <param name=\"mask\">The list of characters to backslash. May contain intervals \"a..b\" where \r\n    <I>a</I>, <I>b</I> are characters and <I>a</I> is less than or equal to <I>b</I>.</param>\r\n  <returns>\r\n    The string in which all characters contained in <paramref name=\"mask\"/> list are backslashed\r\n    and each backslashed character which isn't between '\\u0032' and '\\u007f'\r\n    is converted in its octal representation (e.g. \"\\\\123\") except of '\\a', '\\b', '\\f', '\\n', '\\r', '\\t', '\\v'\r\n    characters which are converted into their string form (e.g. '\\n' -> \"\\\\n\", '\\t' -> \"\\\\t\" etc.).\r\n  </returns>\r\n</method>\r\n<method name=\"ConvertCyrillic\">\r\n  <summary>\r\n    Converts a string from one Cyrillic character set to another.\r\n  </summary>\r\n  <param name=\"bytes\">The string to convert.</param>\r\n  <param name=\"srcCharset\">The source character set. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'.</param>\r\n  <param name=\"dstCharset\">The destination character set. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'.</param>\r\n  <returns>The converted string.</returns>\r\n</method>\r\n    \r\n</docs>"
  },
  {
    "path": "Source/ClassLibrary/Doc/Variables.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n  <method name=\"Extract\">\r\n    <remarks>\r\n      <para>\r\n        A variable name can be used as it is or prefixed by <paramref name=\"prefix\"/> according to\r\n        <paramref name=\"type\"/> \r\n        (see the following table). Regardless which name is used (prefixed or not) it is always tested by \r\n        method <see cref=\"PhpVariable.IsValidName\"/> before the extraction is made.\r\n      </para>\r\n      <para>\r\n        <list type=\"table\">\r\n          <listheader>\r\n            <term>Value of the <paramref name=\"type\"/> &amp; <see cref=\"ExtractType.NonFlags\"/></term>\r\n            <description>The action taken</description>\r\n          </listheader>\r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.Overwrite\" />\r\n            </term>\r\n            <description>\r\n              If a variable doesn't exist yet it is created otherwise its value is overwritten.\r\n            </description>\r\n          </item>\r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.Skip\" />\r\n            </term>\r\n            <description>\r\n              If a variable already exists it is skipped (its value is left untouched).\r\n              Otherwise, a new variable is created.\r\n            </description>\r\n          </item>\r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.IfExists\" />\r\n            </term>\r\n            <description>\r\n              If a variable already exists its value is overwritten. Otherwise, the variable is skipped\r\n              (i.e. no new variables are created).\r\n            </description>\r\n          </item>\r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.PrefixAll\" />\r\n            </term>\r\n            <description>\r\n              A variable name is prefixed and if a variable with that name doesn't\r\n              exists it is created and, otherwise its value is overwritten.\r\n            </description>\r\n          </item>        \r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.PrefixSame\" />\r\n            </term>\r\n            <description>\r\n              If a variable already exists its name is prefixed and a new variable \r\n              with that name is created. Otherwise, the variable's value is overwritten.\r\n            </description>\r\n          </item>               \r\n          <item>\r\n            <term>\r\n              <see cref=\"ExtractType.PrefixIfExists\" />\r\n            </term>\r\n            <description>\r\n              If a variable already exists its name is prefixed and a new variable \r\n              with that name is created. Otherwise, the variable is skipped.\r\n            </description>\r\n          </item>               \r\n        </list>      \r\n      </para>\r\n      <para>\r\n        Moreover, <paramref name=\"type\"/> can be OR'ed by <see cref=\"ExtractType.Refs\"/>\r\n        which causes that refereces preserved - if there is a reference in <paramref name=\"vars\"/>\r\n        the target variable will be referencing the same thing.\r\n      </para>\r\n    </remarks>     \r\n  </method>        \r\n</docs>\r\n"
  },
  {
    "path": "Source/ClassLibrary/Errors.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implementation of PHP error control functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtCore)]\r\n\tpublic static class Errors\r\n\t{\r\n\t\t#region Enumerations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set of error types.\r\n\t\t/// </summary>\r\n\t\t[Flags, EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic enum _PhpErrorSet\r\n\t\t{\r\n\t\t\t/// <summary>Error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_ERROR\")]\r\n\t\t\tE_ERROR = PhpError.Error,\r\n\t\t\t/// <summary>Warning.</summary>\r\n\t\t\t[ImplementsConstant(\"E_WARNING\")]\r\n\t\t\tE_WARNING = PhpError.Warning,\r\n\t\t\t/// <summary>Parse error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_PARSE\")]\r\n\t\t\tE_PARSE = PhpError.ParseError,\r\n\t\t\t/// <summary>Notice.</summary>\r\n\t\t\t[ImplementsConstant(\"E_NOTICE\")]\r\n\t\t\tE_NOTICE = PhpError.Notice,\r\n\t\t\t/// <summary>Core error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_CORE_ERROR\")]\r\n\t\t\tE_CORE_ERROR = PhpError.CoreError,\r\n\t\t\t/// <summary>Core warning.</summary>\r\n\t\t\t[ImplementsConstant(\"E_CORE_WARNING\")]\r\n\t\t\tE_CORE_WARNING = PhpError.CoreWarning,\r\n\t\t\t/// <summary>Compile error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_COMPILE_ERROR\")]\r\n\t\t\tE_COMPILE_ERROR = PhpError.CompileError,\r\n\t\t\t/// <summary>Compile warning.</summary>\r\n\t\t\t[ImplementsConstant(\"E_COMPILE_WARNING\")]\r\n\t\t\tE_COMPILE_WARNING = PhpError.CompileWarning,\r\n\t\t\t/// <summary>User error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_USER_ERROR\")]\r\n\t\t\tE_USER_ERROR = PhpError.UserError,\r\n\t\t\t/// <summary>User warning.</summary>\r\n\t\t\t[ImplementsConstant(\"E_USER_WARNING\")]\r\n\t\t\tE_USER_WARNING = PhpError.UserWarning,\r\n\t\t\t/// <summary>User notice.</summary>\r\n\t\t\t[ImplementsConstant(\"E_USER_NOTICE\")]\r\n\t\t\tE_USER_NOTICE = PhpError.UserNotice,\r\n\t\t\t/// <summary>All errors but strict.</summary>\r\n\t\t\t[ImplementsConstant(\"E_ALL\")]\r\n\t\t\tE_ALL = PhpErrorSet.AllButStrict,\r\n\t\t\t/// <summary>Strict error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_STRICT\")]\r\n\t\t\tE_STRICT = PhpError.Strict,\r\n            /// <summary>E_RECOVERABLE_ERROR error.</summary>\r\n            [ImplementsConstant(\"E_RECOVERABLE_ERROR\")]\r\n            E_RECOVERABLE_ERROR = PhpError.RecoverableError,\r\n\t\t\t/// <summary>Deprecated error.</summary>\r\n\t\t\t[ImplementsConstant(\"E_DEPRECATED\")]\r\n\t\t\tE_DEPRECATED = PhpError.Deprecated,\r\n            /// <summary>Deprecated error.</summary>\r\n            [ImplementsConstant(\"E_USER_DEPRECATED\")]\r\n            E_USER_DEPRECATED = PhpError.UserDeprecated,\r\n            \r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// An action performed by the <see cref=\"Log\"/> method.\r\n\t\t/// </summary>\r\n\t\tpublic enum LogAction\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// A message to be logged is appended to log file or sent to system log depending on the \r\n\t\t\t/// current value of <see cref=\"LocalConfiguration.ErrorControl\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tDefault,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A message is sent by an e-mail.\r\n\t\t\t/// </summary>\r\n\t\t\tSendByEmail,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Not supported.\r\n\t\t\t/// </summary>\r\n\t\t\tToDebuggingConnection,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A message is appended to a specified file.\r\n\t\t\t/// </summary>\r\n\t\t\tAppendToFile\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region error_log (CLR only)\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Logs a message to a log file or the system event log.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message to be logged.</param>\r\n\t\t/// <returns>Whether the message has been logged successfully.</returns>\r\n\t\t[ImplementsFunction(\"error_log\")]\r\n\t\tpublic static bool Log(string message)\r\n\t\t{\r\n\t\t\treturn Log(message, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs specific <see cref=\"LogAction\"/> with a given message and default options.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message to be logged.</param>\r\n\t\t/// <param name=\"action\">The <see cref=\"LogAction\"/> to be performed.</param>\r\n\t\t/// <returns>Whether the message has been logged successfully.</returns>\r\n\t\t[ImplementsFunction(\"error_log\")]\r\n\t\tpublic static bool Log(string message, LogAction action)\r\n\t\t{\r\n\t\t\treturn Log(message, action, null, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs specific <see cref=\"LogAction\"/> with a given message and name of the log file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message to be logged.</param>\r\n\t\t/// <param name=\"destination\">The name of the log file.</param>\r\n\t\t/// <param name=\"action\">The <see cref=\"LogAction\"/> to be performed.</param>\r\n\t\t/// <returns>Whether the message has been logged successfully.</returns>\r\n\t\t[ImplementsFunction(\"error_log\")]\r\n\t\tpublic static bool Log(string message, LogAction action, string destination)\r\n\t\t{\r\n\t\t\treturn Log(message, action, destination, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs specific <see cref=\"LogAction\"/> with a given message, name of the log file and additional headers.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message to be logged.</param>\r\n\t\t/// <param name=\"destination\">The name of the log file.</param>\r\n\t\t/// <param name=\"extraHeaders\">Additional headers which are sent along the e-mail.</param>\r\n\t\t/// <param name=\"action\">The <see cref=\"LogAction\"/> to be performed.</param>\r\n\t\t/// <returns>Whether the message has been logged successfully.</returns>\r\n\t\t[ImplementsFunction(\"error_log\")]\r\n\t\tpublic static bool Log(string message, LogAction action, string destination, string extraHeaders)\r\n\t\t{\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase LogAction.Default:\r\n\r\n\t\t\t\t\tbool result = true;\r\n\r\n\t\t\t\t\tLocalConfiguration config = Configuration.Local;\r\n\r\n\t\t\t\t\t// adds a message to the default log file:\r\n\t\t\t\t\tif (config.ErrorControl.LogFile != null)\r\n\t\t\t\t\t\ttry { Logger.AppendLine(config.ErrorControl.LogFile, message); }\r\n\t\t\t\t\t\tcatch (System.Exception) { result = false; }\r\n\r\n\t\t\t\t\t// adds a message to an event log:\r\n\t\t\t\t\tif (config.ErrorControl.SysLog)\r\n\t\t\t\t\t\ttry { Logger.AddToEventLog(message); }\r\n\t\t\t\t\t\tcatch (System.Exception) { result = false; }\r\n\r\n\t\t\t\t\treturn result;\r\n\r\n\t\t\t\tcase LogAction.SendByEmail:\r\n\t\t\t\t\tMailer.Mail(destination, LibResources.GetString(\"error_report\"), message, extraHeaders);\r\n\t\t\t\t\treturn true;\r\n\r\n\t\t\t\tcase LogAction.ToDebuggingConnection:\r\n\t\t\t\t\tPhpException.ArgumentValueNotSupported(\"action\", (int)action);\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase LogAction.AppendToFile:\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPHP.Core.Logger.AppendLine(destination, message);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (System.Exception)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.InvalidArgument(\"action\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n        #region error_get_last\r\n\r\n        [ImplementsFunction(\"error_get_last\")]\r\n        public static PhpArray GetLastError(ScriptContext/*!*/context)\r\n        {\r\n            Debug.Assert(context != null);\r\n\r\n            if (context.LastErrorType != 0)\r\n            {\r\n                PhpArray result = new PhpArray(0, 5);\r\n                result.Add(\"type\", (int)context.LastErrorType);\r\n                result.Add(\"message\", context.LastErrorMessage);\r\n                result.Add(\"file\", context.LastErrorFile);\r\n                result.Add(\"line\", context.LastErrorLine);\r\n                //result.Add(\"column\", context.LastErrorColumn);\r\n                return result;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region trigger_error, user_error\r\n\r\n        /// <summary>\r\n\t\t/// Triggers user notice with a specified message.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message.</param>\r\n\t\t[ImplementsFunction(\"trigger_error\")]\r\n\t\tpublic static bool TriggerError(string message)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.UserNotice, message);\r\n            return true;\r\n\t\t}\r\n\r\n\r\n        /// <summary>\r\n\t\t/// Triggers user error of an arbitrary type and specified message.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message.</param>\r\n\t\t/// <param name=\"error\">The type of an error. The type should be one of the user error types.</param>\r\n\t\t/// <exception cref=\"PhpException\">User specified error.</exception>\r\n\t\t/// <exception cref=\"PhpException\">The <paramref name=\"error\"/> argument has an invalid value.</exception>\r\n\t\t[ImplementsFunction(\"trigger_error\")]\r\n\t\tpublic static bool TriggerError(string message, PhpError error)\r\n\t\t{\r\n            if (((PhpErrorSet)error & PhpErrorSet.User) == 0)\r\n                return false;//    PhpException.InvalidArgument(\"error\");\r\n\r\n            PhpException.Throw(error, message);\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n        /// Alias of trigger_error().\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message.</param>\r\n\t\t[ImplementsFunction(\"user_error\")]\r\n\t\tpublic static bool UserError(string message)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.UserNotice, message);\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Alias of trigger_error().\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\">The message.</param>\r\n\t\t/// <param name=\"error\">The type of an error. The type should be one of the user error types.</param>\r\n\t\t/// <exception cref=\"PhpException\">User specified error.</exception>\r\n\t\t/// <exception cref=\"PhpException\">The <paramref name=\"error\"/> argument has an invalid value.</exception>\r\n\t\t[ImplementsFunction(\"user_error\")]\r\n\t\tpublic static bool UserError(string message, PhpError error)\r\n\t\t{\r\n            if (((PhpErrorSet)error & PhpErrorSet.User) == 0)\r\n                return false;//    PhpException.InvalidArgument(\"error\");\r\n\r\n\t\t\treturn TriggerError(message, error);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region debug_backtrace, debug_print_backtrace\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns array containing current stack state. Each item is an array representing one stack frame.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The stack trace.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The resulting array contains the following items (their keys are stated):\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <item><c>\"file\"</c> - a source file where the function/method has been called</item>\r\n\t\t/// <item><c>\"line\"</c> - a line in a source code where the function/method has been called</item>\r\n\t\t/// <item><c>\"column\"</c> - a column in a source code where the function/method has been called</item>\r\n\t\t/// <item><c>\"function\"</c> - a name of the function/method</item> \r\n\t\t/// <item><c>\"class\"</c> - a name of a class where the method is declared (if any)</item>\r\n        /// <item><c>\"object\"</c> - an object which metod has been called</item>\r\n\t\t/// <item><c>\"type\"</c> - either \"::\" for static methods or \"->\" for instance methods</item>\r\n\t\t/// </list>\r\n        /// PHP adds one more item - \"args\" containing values of arguments and object which metod has been called. This is not supported.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"debug_backtrace\")]\r\n\t\tpublic static PhpArray Backtrace()\r\n\t\t{\r\n\t\t\treturn new PhpStackTrace(ScriptContext.CurrentContext, 1).GetUserTrace();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Returns array containing current stack state. Each item is an array representing one stack frame.\r\n        /// </summary>\r\n        /// <returns>The stack trace.</returns>\r\n        /// <remarks>\r\n        /// The resulting array contains the following items (their keys are stated):\r\n        /// <list type=\"bullet\">\r\n        /// <item><c>\"file\"</c> - a source file where the function/method has been called</item>\r\n        /// <item><c>\"line\"</c> - a line in a source code where the function/method has been called</item>\r\n        /// <item><c>\"column\"</c> - a column in a source code where the function/method has been called</item>\r\n        /// <item><c>\"function\"</c> - a name of the function/method</item> \r\n        /// <item><c>\"class\"</c> - a name of a class where the method is declared (if any)</item>\r\n        /// <item><c>\"object\"</c> - an object which metod has been called</item>\r\n        /// <item><c>\"type\"</c> - either \"::\" for static methods or \"->\" for instance methods</item>\r\n        /// </list>\r\n        /// PHP adds two more item - \"args\" containing values of arguments and object which metod has been called. This is not supported.\r\n        /// </remarks>\r\n        /// <param name=\"provideObject\">Recipient e-mail address.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"provideObject\"/> has an invalid or unsupported value. (Warning)</exception>\r\n        [ImplementsFunction(\"debug_backtrace\")]\r\n        public static PhpArray Backtrace(bool provideObject)\r\n        {\r\n            if (provideObject == true)\r\n                PhpException.ArgumentValueNotSupported(\"provideObject\", provideObject);\r\n            \r\n            return Backtrace();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints string representation of the stack trace.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"debug_print_backtrace\")]\r\n\t\tpublic static void PrintBacktrace()\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tcontext.Output.Write(new PhpStackTrace(context, 1).FormatUserTrace());\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Prints string representation of the stack trace.\r\n        /// No value is returned.\r\n        /// </summary>\r\n        [ImplementsFunction(\"debug_print_backtrace\")]\r\n        public static void PrintBacktrace(bool provideObject)\r\n        {\r\n            if (provideObject == true)\r\n                PhpException.ArgumentValueNotSupported(\"provideObject\", provideObject);\r\n\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            context.Output.Write(new PhpStackTrace(context, 1).FormatUserTrace());\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\t#region NS: PhpLogger\r\n\t/*\r\n\t\r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\t  [EditorBrowsable(EditorBrowsableState.Never)]\r\n\t  public sealed class PhpLogger\r\n\t  {\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t  private PhpLogger() { }\r\n\t  \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  public enum Facility\r\n\t  {\r\n\t\t[ImplementsConstant(\"LOG_KERN\")] Kern = 0,\r\n\t\t[ImplementsConstant(\"LOG_USER\")] User = 8,\r\n\t\t[ImplementsConstant(\"LOG_MAIL\")] Mail = 16,\r\n\t\t[ImplementsConstant(\"LOG_DAEMON\")] Daemon = 24,\r\n\t\t[ImplementsConstant(\"LOG_AUTH\")] Auth = 32,\r\n\t\t[ImplementsConstant(\"LOG_SYSLOG\")] SysLog = 40,\r\n\t\t[ImplementsConstant(\"LOG_LPR\")] Lpr = 48,\r\n\t\t[ImplementsConstant(\"LOG_NEWS\")] News = 56,\r\n\t\t[ImplementsConstant(\"LOG_UUCP\")] Uucp = 64,\r\n\t\t[ImplementsConstant(\"LOG_CRON\")] Cron = 72,\r\n\t\t[ImplementsConstant(\"LOG_AUTHPRIV\")] AuthPriv = 80\r\n\t  }\r\n    \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  public enum Options\r\n\t  {\r\n\t\t[ImplementsConstant(\"LOG_PID\")] PID = 1,\r\n\t\t[ImplementsConstant(\"LOG_CONS\")] Console = 2,\r\n\t\t[ImplementsConstant(\"LOG_ODELAY\")] Delay = 4,\r\n\t\t[ImplementsConstant(\"LOG_NDELAY\")] NoDelay = 8,\r\n\t\t[ImplementsConstant(\"LOG_NOWAIT\")] NoWait = 16,\r\n\t\t[ImplementsConstant(\"LOG_PERROR\")] PrintError = 32,\r\n\t  }\r\n      \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  public enum Priority\r\n\t  {\r\n\t\t[ImplementsConstant(\"LOG_EMERG\")] Emergency = 1,\r\n\t\t[ImplementsConstant(\"LOG_ALERT\")] Alert = 1,\r\n\t\t[ImplementsConstant(\"LOG_CRIT\")] Critical = 1,\r\n\t\t[ImplementsConstant(\"LOG_ERR\")] Error = 4,\r\n\t\t[ImplementsConstant(\"LOG_WARNING\")] Warning = 5,\r\n\t\t[ImplementsConstant(\"LOG_NOTICE\")] Notice = 6,\r\n\t\t[ImplementsConstant(\"LOG_INFO\")] Info = 6,\r\n\t\t[ImplementsConstant(\"LOG_DEBUG\")] Debug = 6\r\n\t  }\r\n    \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  [ImplementsFunction(\"closelog\")]\r\n\t  public static int CloseLog()\r\n\t  {\r\n\t\treturn 0;\r\n\t  }\r\n    \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  [ImplementsFunction(\"define_syslog_variables\",FunctionImplOptions.NotSupported)]\r\n\t  [EditorBrowsable(EditorBrowsableState.Never)]\r\n\t  public static void DefineSyslogVariables()\r\n\t  {\r\n\t\tPhpException.FunctionNotSupported();\r\n\t  }\r\n    \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  [ImplementsFunction(\"openlog\",FunctionImplOptions.NotSupported)]\r\n\t  [EditorBrowsable(EditorBrowsableState.Never)]\r\n\t  public static int OpenLog(string prefix,Options option,Facility facility)\r\n\t  {\r\n\t\tPhpException.FunctionNotSupported();\r\n\t\treturn 0;\r\n\t  }\r\n    \r\n\t  /// <summary>\r\n\t  /// Not supported.\r\n\t  /// </summary>\r\n\t  [ImplementsFunction(\"syslog\",FunctionImplOptions.NotSupported)]\r\n\t  [EditorBrowsable(EditorBrowsableState.Never)]\r\n\t  public static int SysLog(Priority priority,string message)\r\n\t  {\r\n\t\tPhpException.FunctionNotSupported();\r\n\t\treturn 0;\r\n\t  }\r\n\t  }\r\n\r\n\t  */\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/FileSystem.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Jan Benda and Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n\tTODO:\r\n\t\t- Added support for LOCK_EX flag for file_put_contents(). (PHP 5.1.0)\r\n\t\t- Added lchown() and lchgrp() to change user/group ownership of symlinks. (PHP 5.1.3) \r\n\t\t- Fixed safe_mode check for source argument of the copy() function. (PHP 5.1.3) \r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing PHP.Core;\r\nusing System.Security.AccessControl;\r\nusing System.Security.Principal;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Provides PHP I/O operations using the set of StreamWrappers.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static partial class PhpFile\r\n\t{\r\n\t\t#region Constructors and Thread Static Stuff\r\n\r\n\t\t/// <summary>The most recent <c>stat()</c> result (<c>stat()</c> of the <see cref=\"statCacheUrl\"/> file).</summary>\r\n\t\t[ThreadStatic]\r\n\t\tprivate static StatStruct statCache;\r\n\r\n\t\t/// <summary>The absolute path of the last <c>stat()</c> operation.</summary>\r\n\t\t[ThreadStatic]\r\n\t\tprivate static string statCacheUrl = null;\r\n\r\n\t\tprivate static void Clear()\r\n\t\t{\r\n\t\t\tstatCache = new StatStruct();\r\n\t\t\tstatCacheUrl = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Stat Basics (BuildStatArray, StatInternal, lstat, stat, fstat, clearstatcache; exists, touch)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a <see cref=\"PhpArray\"/> from the <see cref=\"StatStruct\"/> \r\n\t\t/// copying the structure members into the array.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The resulting PhpArray has following associative keys in the given order\r\n\t\t/// (each has a corresponding numeric index starting from zero).\r\n\t\t/// As of ordering, first come all the numeric indexes and then come all the associative indexes.\r\n\t\t/// <list type=\"table\">\r\n\t\t/// <item><term>dev</term><term>Drive number of the disk containing the file (same as st_rdev). </term></item>\r\n\t\t/// <item><term>ino</term><term>Number 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. </term></item>\r\n\t\t/// <item><term>mode</term><term>Bit 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. </term></item>\r\n\t\t/// <item><term>nlink</term><term>Always 1 on non-NTFS file systems. </term></item>\r\n\t\t/// <item><term>uid</term><term>Numeric 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. </term></item>\r\n\t\t/// <item><term>gid</term><term>Numeric 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. </term></item>\r\n\t\t/// <item><term>rdev</term><term>Drive number of the disk containing the file (same as st_dev). </term></item>\r\n\t\t/// <item><term>size</term><term>Size of the file in bytes; a 64-bit integer for _stati64 and _wstati64 </term></item>\r\n\t\t/// <item><term>atime</term><term>Time of last access of file. Valid on NTFS but not on FAT formatted disk drives. Gives the same </term></item>\r\n\t\t/// <item><term>mtime</term><term>Time of last modification of file. </term></item>\r\n\t\t/// <item><term>ctime</term><term>Time of creation of file. Valid on NTFS but not on FAT formatted disk drives. </term></item>\r\n\t\t/// <item><term>blksize</term><term>Always -1 on non-NTFS file systems. </term></item>\r\n\t\t/// <item><term>blocks</term><term>Always -1 on non-NTFS file systems. </term></item>\r\n\t\t/// </list>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"stat\">A <see cref=\"StatStruct\"/> returned by a stream wrapper.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> in the format of the <c>stat()</c> PHP function.</returns>\r\n\t\tinternal static PhpArray BuildStatArray(StatStruct stat)\r\n\t\t{\r\n\t\t\t// An unitialized StatStruct means an error.\r\n\t\t\tif (stat.st_ctime == 0) return null;\r\n\t\t\tPhpArray result = new PhpArray(13, 13);\r\n\r\n\t\t\tresult.Add(0, (int)stat.st_dev);         // device number \r\n\t\t\tresult.Add(1, (int)stat.st_ino);         // inode number \r\n\t\t\tresult.Add(2, (int)stat.st_mode);        // inode protection mode \r\n\t\t\tresult.Add(3, (int)stat.st_nlink);       // number of links \r\n\t\t\tresult.Add(4, (int)stat.st_uid);         // userid of owner \r\n\t\t\tresult.Add(5, (int)stat.st_gid);         // groupid of owner \r\n\t\t\tresult.Add(6, (int)stat.st_rdev);        // device type, if inode device -1\r\n\t\t\tresult.Add(7, (int)stat.st_size);        // size in bytes (reset by caller)\r\n\t\t\tresult.Add(8, unchecked((int)stat.st_atime));       // time of last access (unix timestamp) \r\n\t\t\tresult.Add(9, unchecked((int)stat.st_mtime));       // time of last modification (unix timestamp) \r\n\t\t\tresult.Add(10, unchecked((int)stat.st_ctime));      // time of last change (unix timestamp) \r\n\t\t\tresult.Add(11, (int)-1);                 // blocksize of filesystem IO (-1)\r\n\t\t\tresult.Add(12, (int)-1);                 // number of blocks allocated  (-1)\r\n\r\n\t\t\tresult.Add(\"dev\", (int)stat.st_dev);     // device number \r\n\t\t\tresult.Add(\"ino\", (int)stat.st_ino);     // inode number \r\n\t\t\tresult.Add(\"mode\", (int)stat.st_mode);   // inode protection mode \r\n\t\t\tresult.Add(\"nlink\", (int)stat.st_nlink); // number of links \r\n\t\t\tresult.Add(\"uid\", (int)stat.st_uid);     // userid of owner \r\n\t\t\tresult.Add(\"gid\", (int)stat.st_gid);     // groupid of owner \r\n\t\t\tresult.Add(\"rdev\", (int)stat.st_rdev);   // device type, if inode device -1\r\n\t\t\tresult.Add(\"size\", (int)stat.st_size);   // size in bytes (reset by caller)\r\n\t\t\tresult.Add(\"atime\", unchecked((int)stat.st_atime)); // time of last access (unix timestamp) \r\n\t\t\tresult.Add(\"mtime\", unchecked((int)stat.st_mtime)); // time of last modification (unix timestamp) \r\n\t\t\tresult.Add(\"ctime\", unchecked((int)stat.st_ctime)); // time of last change (unix timestamp) \r\n\t\t\tresult.Add(\"blksize\", (int)-1);          // blocksize of filesystem IO (-1)\r\n\t\t\tresult.Add(\"blocks\", (int)-1);           // number of blocks allocated  (-1)\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Check StatInternal input parameters.\r\n        /// </summary>\r\n        /// <param name=\"path\">The path passed to stat().</param>\r\n        /// <param name=\"quiet\">Wheter to suppress warning message if argument is empty.</param>\r\n        /// <param name=\"wrapper\">If passed, it will contain valid StremWrapper to the given <paramref name=\"path\"/>.</param>\r\n        /// <returns>True if check passed.</returns>\r\n        private static bool StatInternalCheck(ref string path, bool quiet, out StreamWrapper wrapper)\r\n        {\r\n            wrapper = null;\r\n            \r\n            if (String.IsNullOrEmpty(path))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:empty\", \"path\"));\r\n                return false;\r\n            }\r\n\r\n            CheckAccessOptions options = CheckAccessOptions.Empty;\r\n            if (quiet) options |= CheckAccessOptions.Quiet;\r\n            if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileOrDirectory, options))\r\n                return false;\r\n            \r\n            // check passed\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check the cache for given <paramref name=\"path\"/>.\r\n        /// </summary>\r\n        /// <param name=\"path\">Path to lookup in the cache.</param>\r\n        /// <param name=\"url\">Url of <paramref name=\"path\"/>.</param>\r\n        /// <returns>True if given <paramref name=\"path\"/> is in the cache currently.</returns>\r\n        private static bool StatInternalTryCache(string path, out string url)\r\n        {\r\n            // Try to hit the cache first\r\n            url = PhpPath.GetUrl(path);\r\n            return (url == statCacheUrl);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Stat the path coming from ResolvePath (file:// wrapper expects path w/o the scheme).\r\n        /// </summary>\r\n        /// <param name=\"path\"></param>\r\n        /// <param name=\"url\"></param>\r\n        /// <param name=\"wrapper\"></param>\r\n        /// <param name=\"quiet\"></param>\r\n        /// <returns>True if stat was successfuly added into cache.</returns>\r\n        private static bool StatInternalStat(string path, string url, StreamWrapper wrapper, bool quiet)\r\n        {\r\n            StatStruct stat = wrapper.Stat(path, quiet ? StreamStatOptions.Quiet : StreamStatOptions.Empty, StreamContext.Default, false);\r\n            if (stat.st_size >= 0)\r\n            {\r\n                statCacheUrl = url;\r\n                statCache = stat;\r\n                return true;\r\n            }\r\n            else\r\n                return false;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stat the given file or directory using stream-wrappers and return the stat structure\r\n\t\t/// using the stat-cache for repetitive calls.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path (absolute or relative or an URL) to the file or directory to stat.</param>\r\n\t\t/// <param name=\"quiet\"><c>true</c> to suppress the display of error messages (for example for <c>exists()</c>).</param>\r\n\t\t/// <returns><c>true</c> if the <see cref=\"statCache\"/> contains a valid \r\n\t\t/// stat structure for the given URL, <c>false</c> on an error.</returns>\r\n\t\tinternal static bool StatInternal(string path, bool quiet)\r\n\t\t{\r\n            StreamWrapper wrapper;\r\n            \r\n            if (StatInternalCheck(ref path, quiet, out wrapper))\r\n            {\r\n                string url;\r\n                if (StatInternalTryCache(path, out url))\r\n                    return true;\r\n\r\n                return StatInternalStat(path, url, wrapper, quiet);\r\n            }\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gives information about a file or symbolic link. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Behaves just like a <see cref=\"Stat\"/> since there are no symbolic links on Windows.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">Path to a file to <c>stat</c>.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing the stat information.</returns>\r\n\t\t[ImplementsFunction(\"lstat\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray LinkStat(string path)\r\n\t\t{\r\n\t\t\treturn Stat(path);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gives information about a file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">Path to a file to <c>stat</c>.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing the stat information.</returns>\r\n\t\t[ImplementsFunction(\"stat\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray Stat(string path)\r\n\t\t{\r\n\t\t\tif (StatInternal(path, false))\r\n\t\t\t{\r\n\t\t\t\treturn BuildStatArray(statCache);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets information about a file using an open file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"fstat\")]\r\n\t\tpublic static PhpArray Stat(PhpResource handle)\r\n\t\t{\r\n\t\t\t// Note: no cache here.\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\t\t\treturn BuildStatArray(stream.Stat());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Remove all the cached <c>stat()</c> entries.\r\n        /// Function has no return value.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The intermediary <see cref=\"StatStruct\"/> used in the last stat-related function call\r\n\t\t/// is cached together with the absolute path or URL to the resource.\r\n\t\t/// The next call to one of the following functions will use the cached\r\n\t\t/// structure unless <see cref=\"ClearStatCache\"/> is called.\r\n\t\t/// <para>\r\n\t\t/// The affected functions are:\r\n\t\t/// <c>stat()</c>, <c>lstat()</c>, <c>file_exists()</c>, <c>is_writable()</c>, <c>is_readable()</c>, <c>\r\n\t\t/// is_executable()</c>, <c>is_file()</c>, <c>is_dir()</c>, <c>is_link()</c>, <c>filectime()</c>, <c>\r\n\t\t/// fileatime()</c>, <c>filemtime()</c>, <c>fileinode()</c>, <c>filegroup()</c>, <c>fileowner()</c>, <c>\r\n\t\t/// filesize()</c>, <c>filetype()</c> <c>and fileperms()</c>. \r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"clearstatcache\")]\r\n\t\tpublic static void ClearStatCache()\r\n\t\t{\r\n            Clear();\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"clearstatcache\")]\r\n        public static void ClearStatCache( bool clear_realpath_cache )\r\n        {\r\n            Clear();   // note: arguments ignored, Phalanger does not cache a lot, caches of .NET and OS are used transparently\r\n        }\r\n        [ImplementsFunction(\"clearstatcache\")]\r\n        public static void ClearStatCache(bool clear_realpath_cache,  string filename  )\r\n        {\r\n            if (!string.IsNullOrEmpty(filename) && !clear_realpath_cache)\r\n            {\r\n                // TODO: throw warning\r\n            }\r\n\r\n            Clear();   // note: arguments ignored, Phalanger does not cache a lot, caches of .NET and OS are used transparently\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a file exists\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be checked.</param>\r\n\t\t/// <returns>True if the file exists.</returns>\r\n\t\t[ImplementsFunction(\"file_exists\")]\r\n\t\tpublic static bool Exists(string path)\r\n\t\t{\r\n\t\t\tif (String.IsNullOrEmpty(path)) return false;\r\n\r\n            StreamWrapper wrapper;\r\n            if (StatInternalCheck(ref path, true, out wrapper))\r\n            {\r\n                string url;\r\n                if (StatInternalTryCache(path, out url))\r\n                    return true;\r\n\r\n                // we can't just call {Directory|File}.Exists since we have to throw warnings\r\n                // also we are not calling full stat(), it is slow\r\n                return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) =>\r\n                    new FileInfo(p).Exists || new DirectoryInfo(p).Exists);\r\n            }\r\n\r\n            return false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets access and modification time of file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to touch.</param>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on failure.</returns>\r\n\t\t[ImplementsFunction(\"touch\")]\r\n\t\tpublic static bool Touch(string path)\r\n\t\t{\r\n\t\t\treturn Touch(path, 0, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets access and modification time of file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to touch.</param>\r\n\t\t/// <param name=\"mtime\">The new modification time.</param>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on failure.</returns>\r\n\t\t[ImplementsFunction(\"touch\")]\r\n\t\tpublic static bool Touch(string path, int mtime)\r\n\t\t{\r\n\t\t\treturn Touch(path, mtime, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets access and modification time of file.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Attempts to set the access and modification time of the file named by \r\n\t\t/// path to the value given by time. If the option time is not given, \r\n\t\t/// uses the present time. If the third option atime is present, the access \r\n\t\t/// time of the given path is set to the value of atime. Note that \r\n\t\t/// the access time is always modified, regardless of the number of parameters. \r\n\t\t/// If the file does not exist, it is created. \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to touch.</param>\r\n\t\t/// <param name=\"mtime\">The new modification time.</param>\r\n\t\t/// <param name=\"atime\">The desired access time.</param>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on failure.</returns>\r\n\t\t[ImplementsFunction(\"touch\")]\r\n\t\tpublic static bool Touch(string path, int mtime, int atime)\r\n\t\t{\r\n\t\t\t// Create the file if it does not already exist (performs all checks).\r\n\t\t\t//PhpStream file = (PhpStream)Open(path, \"ab\");\r\n\t\t\t//if (file == null) return false;\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Quiet))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tif (!Exists(path))\r\n\t\t\t{\r\n\t\t\t\t// Open and close => create new.\r\n\t\t\t\tClose(wrapper.Open(ref path, \"wb\", StreamOpenOptions.Empty, StreamContext.Default));\r\n\t\t\t}\r\n\r\n\t\t\tDateTime access_time = (atime > 0) ? DateTimeUtils.UnixTimeStampToUtc(atime) : DateTime.UtcNow;\r\n\t\t\tDateTime modification_time = (mtime > 0) ? DateTimeUtils.UnixTimeStampToUtc(mtime) : DateTime.UtcNow;\r\n\r\n\t\t\taccess_time -= DateTimeUtils.GetDaylightTimeDifference(access_time, DateTime.UtcNow);\r\n\t\t\tmodification_time -= DateTimeUtils.GetDaylightTimeDifference(modification_time, DateTime.UtcNow);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tFile.SetLastWriteTimeUtc(path, modification_time);\r\n\t\t\t\tFile.SetLastAccessTimeUtc(path, access_time);\r\n\r\n\t\t\t\t// Clear the cached stat values\r\n\t\t\t\tClearStatCache();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path), e.Message));\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n\t\t#region Disk Stats (disk_free_space/diskfreespace, disk_total_space)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Given a string containing a directory, this function will return \r\n\t\t/// the number of free bytes on the corresponding filesystem or disk partition. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directory\">The directory specifying the filesystem or disk partition to be examined.</param>\r\n\t\t/// <returns>Nuber of free bytes available or <c>FALSE</c> on an error.</returns>\r\n\t\t[ImplementsFunction(\"disk_free_space\")]\r\n\t\tpublic static object GetDiskFreeSpace(string directory)\r\n\t\t{\r\n\t\t\treturn GetDiskFreeSpaceInternal(directory, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Given a string containing a directory, this function will return \r\n\t\t/// the number of free bytes on the corresponding filesystem or disk partition. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directory\">The directory specifying the filesystem or disk partition to be examined.</param>\r\n\t\t/// <returns>Nuber of free bytes available or <c>FALSE</c> on an error.</returns>\r\n\t\t[ImplementsFunction(\"diskfreespace\")]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object GetFreeSpace(string directory)\r\n\t\t{\r\n\t\t\treturn GetDiskFreeSpaceInternal(directory, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Given a string containing a directory, this function will return \r\n\t\t/// the number of total bytes on the corresponding filesystem or disk partition. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directory\">The directory specifying the filesystem or disk partition to be examined.</param>\r\n\t\t/// <returns>Total nuber of bytes on the specified filesystem or disk partition or <c>FALSE</c> on an error.</returns>\r\n\t\t[ImplementsFunction(\"disk_total_space\")]\r\n\t\tpublic static object GetDiskTotalSpace(string directory)\r\n\t\t{\r\n\t\t\treturn GetDiskFreeSpaceInternal(directory, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Given a string containing a directory, this function will return \r\n\t\t/// the number of bytes (total or free depending on <paramref name=\"total\"/> \r\n\t\t/// on the corresponding filesystem or disk partition. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directory\">The directory specifying the filesystem or disk partition to be examined.</param>\r\n\t\t/// <param name=\"total\"><c>true</c> to return total space available, <c>false</c> to return free space only.</param>\r\n\t\t/// <returns>Nuber of bytes available or <c>FALSE</c> on an error.</returns>\r\n\t\tinternal static object GetDiskFreeSpaceInternal(string directory, bool total)\r\n\t\t{\r\n\t\t\tlong user_free_bytes, total_bytes, total_free_bytes;\r\n\t\t\tif (!FileSystemUtils.GetDiskFreeSpace(directory, out user_free_bytes, out total_bytes, out total_free_bytes))\r\n\t\t\t{\r\n                // TODO: Warning: disk_free_space(): Systm neme nalzt uvedenou cestu.\\n on line....\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn total ? (double)total_bytes : (double)user_free_bytes;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Stat Values (file* functions)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets file type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns the type of the file. Possible values are <c>fifo</c>, <c>char</c>, \r\n\t\t/// <c>dir</c>, <c>block</c>, <c>link</c>, <c>file</c>, and <c>unknown</c>. \r\n\t\t/// Returns <B>null</B> if an error occurs. \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"filetype\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetType(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return null;\r\n\t\t\tFileModeFlags mode = (FileModeFlags)statCache.st_mode & FileModeFlags.FileTypeMask;\r\n\r\n\t\t\tswitch (mode)\r\n\t\t\t{\r\n\t\t\t\tcase FileModeFlags.Directory:\r\n\t\t\t\t\treturn \"dir\";\r\n\r\n\t\t\t\tcase FileModeFlags.File:\r\n\t\t\t\t\treturn \"file\";\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"unknown_file_type\"));\r\n\t\t\t\t\treturn \"unknown\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the time the file was last accessed, or <c>false</c> in case \r\n\t\t/// of an error. The time is returned as a Unix timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The results of this call are cached.\r\n\t\t/// See <see cref=\"ClearStatCache\"/> for more details.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be probed.</param>\r\n\t\t/// <returns>The file access time or -1 in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"fileatime\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetAccessTime(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn unchecked((int)statCache.st_atime);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the time the file was created, or <c>false</c> in case \r\n\t\t/// of an error. The time is returned as a Unix timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The results of this call are cached.\r\n\t\t/// See <see cref=\"ClearStatCache\"/> for more details.\r\n\t\t/// <para>\r\n\t\t/// On UNIX systems the <c>filectime</c> value represents \r\n\t\t/// the last change of the I-node.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>The file size or -1 in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"filectime\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetCreationTime(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn unchecked((int)statCache.st_ctime);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets file group.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Always returns <c>0</c> for Windows filesystem files.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>The file size or <c>false</c> in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"filegroup\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetGroup(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn (int)statCache.st_gid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets file inode.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Always returns <c>0</c> for Windows filesystem files.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>The file size or <c>false</c> in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"fileinode\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetINode(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn (int)statCache.st_ino;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the time the file was last modified, or <c>false</c> in case \r\n\t\t/// of an error. The time is returned as a Unix timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The results of this call are cached.\r\n\t\t/// See <see cref=\"ClearStatCache\"/> for more details.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>The file modification time or <c>false</c> in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"filemtime\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetModificationTime(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn unchecked((int)statCache.st_mtime);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets file owner.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>The user ID of the owner of the file, or <c>false</c> in case of an error. </returns>\r\n\t\t[ImplementsFunction(\"fileowner\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetOwner(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn (int)statCache.st_uid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets file permissions.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be <c>stat()</c>ed.</param>\r\n\t\t/// <returns>Returns the permissions on the file, or <c>false</c> in case of an error. </returns>\r\n\t\t[ImplementsFunction(\"fileperms\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetPermissions(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return -1;\r\n\t\t\treturn (int)statCache.st_mode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the file size.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The results of this call are cached.\r\n\t\t/// See <see cref=\"ClearStatCache\"/> for more details.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">The file to be probed.</param>\r\n\t\t/// <returns>The file size or false in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"filesize\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetSize(string path)\r\n\t\t{\r\n            StreamWrapper wrapper;\r\n\r\n            if (StatInternalCheck(ref path, false, out wrapper))\r\n            {\r\n                string url;\r\n                if (StatInternalTryCache(path, out url))\r\n                    return statCache.st_size;\r\n\r\n                // we are not calling full stat(), it is slow\r\n                return FileStreamWrapper.HandleNewFileSystemInfo(-1, path, (p) => FileSystemUtils.FileSize(new FileInfo(p)));\r\n            }\r\n\r\n            return -1;\r\n            \r\n            //bool ok = StatInternal(path, false);\r\n            //if (!ok) return -1;\r\n            //return statCache.st_size;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Stat Flags (is_* functions)\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is a directory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"is_dir\")]\r\n\t\tpublic static bool IsDirectory(string path)\r\n\t\t{\r\n            StreamWrapper wrapper;\r\n\r\n            if (!string.IsNullOrEmpty(path) && StatInternalCheck(ref path, false, out wrapper)) // do not throw warning if path is null or empty\r\n            {\r\n                string url;\r\n                if (StatInternalTryCache(path, out url))\r\n                    return ((FileModeFlags)statCache.st_mode & FileModeFlags.Directory) != 0;\r\n\r\n                // we can't just call Directory.Exists since we have to throw warnings\r\n                // also we are not calling full stat(), it is slow\r\n                return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) => new DirectoryInfo(p).Exists);\r\n            }\r\n\r\n            return false;\r\n\r\n            //bool ok = !string.IsNullOrEmpty(path) && StatInternal(path, false); // do not throw warning if path is null or empty\r\n            //if (!ok) return false;\r\n\r\n            //return ((FileModeFlags)statCache.st_mode & FileModeFlags.Directory) > 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is executable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"is_executable\")]\r\n\t\tpublic static bool IsExecutable(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return false;\r\n\t\t\treturn ((FileModeFlags)statCache.st_mode & FileModeFlags.Execute) > 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is a regular file and if it exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"is_file\")]\r\n\t\tpublic static bool IsFile(string path)\r\n\t\t{\r\n            StreamWrapper wrapper;\r\n\r\n            if (StatInternalCheck(ref path, false, out wrapper))\r\n            {\r\n                string url;\r\n                if (StatInternalTryCache(path, out url))\r\n                    return ((FileModeFlags)statCache.st_mode & FileModeFlags.File) != 0;\r\n\r\n                // we can't just call File.Exists since we have to throw warnings\r\n                // also we are not calling full stat(), it is slow\r\n                return FileStreamWrapper.HandleNewFileSystemInfo(false, path, (p) => new FileInfo(p).Exists);\r\n            }\r\n\r\n            return false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is a symbolic link.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns always <c>false</c>.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns>Always <c>false</c></returns>\r\n\t\t[ImplementsFunction(\"is_link\")]\r\n\t\tpublic static bool IsLink(string path)\r\n\t\t{\r\n\t\t\treturn false; // OK\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is readable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"is_readable\")]\r\n\t\tpublic static bool IsReadable(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return false;\r\n\t\t\treturn ((FileModeFlags)statCache.st_mode & FileModeFlags.Read) > 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is writable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path argument may be a directory name allowing you to check if a directory is writeable. </param>\r\n\t\t/// <returns>Returns TRUE if the path exists and is writable. </returns>\r\n\t\t[ImplementsFunction(\"is_writeable\")]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static bool IsWriteable(string path)\r\n\t\t{\r\n\t\t\treturn IsWritable(path);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the path is writable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path argument may be a directory name allowing you to check if a directory is writeable. </param>\r\n\t\t/// <returns>Returns TRUE if the path exists and is writable. </returns>\r\n\t\t[ImplementsFunction(\"is_writable\")]\r\n\t\tpublic static bool IsWritable(string path)\r\n\t\t{\r\n\t\t\tbool ok = StatInternal(path, false);\r\n\t\t\tif (!ok) return false;\r\n\t\t\treturn ((FileModeFlags)statCache.st_mode & FileModeFlags.Write) > 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#region NS: Unix Functions\r\n\r\n\t/// <summary>\r\n\t/// Unix-specific PHP functions. Not supported. Implementations are empty.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class UnixFile\r\n\t{\r\n\t\t#region Owners, Mode (chgrp, chmod, chown, umask)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Changes a group. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">Path to the file to change group.</param>\r\n\t\t/// <param name=\"group\">A <see cref=\"string\"/> or <see cref=\"int\"/>\r\n\t\t/// identifier of the target group.</param>\r\n\t\t/// <returns>Always <B>false</B>.</returns>\r\n\t\t[ImplementsFunction(\"chgrp\")]\r\n\t\tpublic static bool ChangeFileGroup(string path, object group)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n        #region chmod helpers\r\n \t\t/// <summary>\r\n\t\t/// Add or revoke specified permission for a given role\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"role\">an equivalent to UNIX's owner, group or public</param>\r\n\t\t/// <param name=\"permission\">~ read, write, search</param>\r\n\t\t/// <param name=\"add\"></param>\r\n\t\tstatic FileSystemAccessRule GetAccessRule(\r\n\t\t\t\tWellKnownSidType role,\r\n\t\t\t\tFileSystemRights permission,\r\n\t\t\t\tbool add)\r\n\t\t{\r\n\t\t\t//http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/dc841874-b71b-4e1c-9052-06eb4a87d08f\r\n\t\t\tIdentityReference identity = new SecurityIdentifier(role, null).Translate(typeof(NTAccount)) as IdentityReference;\r\n\r\n\t\t\treturn new FileSystemAccessRule(\r\n\t\t\t\t\tidentity,\r\n\t\t\t\t\tpermission,\r\n\t\t\t\t\tadd ? AccessControlType.Allow : AccessControlType.Deny);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attempt to populate a set of Windows access rules, calculated from a UNIX mode flags\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mode\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tstatic FileSystemAccessRule[] ResolveAccessRules(int mode)\r\n\t\t{\r\n\t\t\t//http://support.microsoft.com/kb/243330\r\n\t\t\tWellKnownSidType[] roles = new WellKnownSidType[] {\r\n\t\t\t\tWellKnownSidType.WorldSid,\r\n\t\t\t\tWellKnownSidType.CreatorGroupSid,\r\n\t\t\t\tWellKnownSidType.CreatorOwnerSid\r\n\t\t\t};\r\n\r\n\t\t\t//http://en.wikipedia.org/wiki/File_system_permissions#Octal_notation\r\n\t\t\tFileSystemRights[] permissions = new FileSystemRights[] {\r\n\t\t\t\tFileSystemRights.ReadAndExecute,\r\n\t\t\t\tFileSystemRights.Write,\r\n\t\t\t\tFileSystemRights.Read\r\n\t\t\t};\r\n\r\n\t\t\tvar rules = new System.Collections.Generic.List<FileSystemAccessRule>();\r\n\t\t\t\r\n\t\t\t//Walk all combinations of roles and permissions\r\n\t\t\tfor (int r = 0; r < roles.Length; r++) {\r\n\t\t\t\tWellKnownSidType role = roles[r];\r\n\r\n\t\t\t\tfor (int p = 0; p < permissions.Length; p++) {\r\n\t\t\t\t\trules.Add(GetAccessRule(role, permissions[p], ((mode >> (r * 3)) & (1 << p)) != 0));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn rules.ToArray();\r\n\t\t}\r\n\t\t\r\n\t\t#endregion chmod helpers\r\n\r\n\t\t/// <summary>\r\n\t\t/// Changes file permissions. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// On Windows platform this function supports only the \r\n\t\t/// <c>_S_IREAD (0400)</c> and <c>_S_IWRITE (0200)</c>\r\n\t\t/// options (set read / write permissions for the file owner).\r\n\t\t/// Note that the constants are octal numbers.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">Path to the file to change group.</param>\r\n\t\t/// <param name=\"mode\">New file permissions (see remarks).</param>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on failure.</returns>\r\n\t\t[ImplementsFunction(\"chmod\")]\r\n\t\tpublic static bool ChangeFileMode(string path, int mode)\r\n\t\t{\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileOrDirectory, CheckAccessOptions.Empty))\r\n\t\t\t\treturn false;\r\n\t\t\t\r\n            bool isDir = PhpFile.IsDirectory(path);\r\n\t\t\tFileSystemInfo fInfo = isDir ? (FileSystemInfo)new DirectoryInfo(path) : new FileInfo(path);\r\n\r\n            if (!fInfo.Exists)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_path\", path));\r\n                return false;\r\n            }\r\n            \r\n\t\t\t//Directories has no equivalent of a readonly flag,\r\n\t\t\t//instead, their content permission should be adjusted accordingly\r\n\t\t\t//[http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx]\r\n\t\t\tif (isDir)\r\n\t\t\t{\r\n                //DirectoryInfo dInfo = (DirectoryInfo)fInfo;\r\n                //DirectorySecurity dSecurity = dInfo.GetAccessControl();\r\n\t\t\t\t\r\n                //foreach(FileSystemAccessRule rule in ResolveAccessRules(mode))\r\n                //    dSecurity.AddAccessRule(rule);\r\n                //try\r\n                //{\r\n                //    dInfo.SetAccessControl(dSecurity);\r\n                //}\r\n                //catch\r\n                {\r\n                    return false;\r\n                }\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// according to <io.h> and <chmod.c> from C libraries in Visual Studio 2008\r\n\t\t\t\t// and PHP 5.3 source codes, which are using standard _chmod() function in C\r\n\t\t\t\t// on Windows it only changes the ReadOnly flag of the file\r\n\t\t\t\t//\r\n\t\t\t\t// see <chmod.c> for more details\r\n\t\t\t\t/*\r\n\t\t\t\t#define _S_IREAD        0x0100          // read permission, owner\r\n\t\t\t\t#define _S_IWRITE       0x0080          // write permission, owner\r\n\t\t\t\t#define _S_IEXEC        0x0040          // execute/search permission, owner\r\n\t\t\t\t*/\r\n\r\n\t\t\t\t((FileInfo)fInfo).IsReadOnly = ((mode & 0x0080) == 0);\r\n\t\t\t}\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">Path to the file to change owner.</param>\r\n\t\t/// <param name=\"user\">A <see cref=\"string\"/> or <see cref=\"int\"/>\r\n\t\t/// identifier of the target group.</param>\r\n\t\t/// <returns>Always <c>false</c>.</returns>\r\n\t\t[ImplementsFunction(\"chown\")]\r\n\t\tpublic static bool ChangeFileOwner(string path, object user)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mask\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"umask\")]\r\n\t\tpublic static int UMask(int mask)\r\n\t\t{\r\n\t\t\treturn UMask();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"umask\")]\r\n\t\tpublic static int UMask()\r\n\t\t{\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Links (link, symlink, readlink, linkinfo)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"target\"></param>\r\n\t\t/// <param name=\"link\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"link\")]\r\n\t\tpublic static bool MakeHardLink(string target, string link)\r\n\t\t{\r\n\t\t\t// Creates a hard link.\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"target\"></param>\r\n\t\t/// <param name=\"link\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"symlink\")]\r\n\t\tpublic static bool MakeSymbolicLink(string target, string link)\r\n\t\t{\r\n\t\t\t// Creates a symbolic link.\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"readlink\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static string ReadLink(string path)\r\n\t\t{\r\n\t\t\t// Returns the target of a symbolic link.\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unix-specific function. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"linkinfo\")]\r\n\t\tpublic static int GetLinkInfo(string path)\r\n\t\t{\r\n\t\t\t// Gets information about a link.\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Warning);\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/FileSystem.Directory.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Jan Benda and Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Directory user-class\r\n\r\n\t/// <summary>\r\n\t/// User-like class encapsulating enumeration of a Directory. \r\n\t/// Uses the PhpDiretory implementation upon PhpWrapper streams.\r\n\t/// </summary>\r\n#if !SILVERLIGHT\r\n\t[Serializable]\r\n#endif\r\n\t[ImplementsType]\r\n\tpublic class Directory : PhpObject\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reference to the directory listing resource.\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference handle = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// The opened path (accessible from the PHP script).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference path = new PhpSmartReference();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Start listing of a directory (intended to be used from C#).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directory\">The path to the directory.</param>\r\n\t\tpublic Directory(string directory)\r\n\t\t\t: this(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.path = new PhpReference(directory);\r\n\t\t\tthis.handle = new PhpReference(PhpDirectory.Open(directory));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic Directory(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic Directory(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, caller)\r\n\t\t{ }\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>Deserializing constructor.</summary>\r\n\t\tprotected Directory(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{ }\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region read\r\n\r\n\t\t/// <summary>\r\n\t\t/// Read next directory entry.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Filename of a contained file (including . and ..).</returns>\r\n\t\t[ImplementsMethod]\r\n        [return:CastToFalse]\r\n\t\tpublic object read(ScriptContext context, [Optional]object handle)\r\n\t\t{\r\n\t\t\tPhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource;\r\n\r\n\t\t\tif (res == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidImplicitCast(\"handle\", PhpResource.PhpTypeName, \"read\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpDirectory.Read(res);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region rewind\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restart the directory listing.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object rewind(ScriptContext context, [Optional]object handle)\r\n\t\t{\r\n\t\t\tPhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource;\r\n\r\n\t\t\tif (res == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidImplicitCast(\"handle\", PhpResource.PhpTypeName, \"rewind\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpDirectory.Rewind(res);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region close\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finish the directory listing.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object close(ScriptContext context, [Optional]object handle)\r\n\t\t{\r\n\t\t\tPhpResource res = (handle == Arg.Default ? this.handle.Value : handle) as PhpResource;\r\n\r\n\t\t\tif (res == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidImplicitCast(\"handle\", PhpResource.PhpTypeName, \"close\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpDirectory.Close(res);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Implementation Details\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeDesc\">The type desc to populate.</param>\r\n\t\tprivate static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n\t\t{\r\n\t\t\ttypeDesc.AddMethod(\"read\", PhpMemberAttributes.Public, read);\r\n\t\t\ttypeDesc.AddMethod(\"rewind\", PhpMemberAttributes.Public, rewind);\r\n\t\t\ttypeDesc.AddMethod(\"close\", PhpMemberAttributes.Public, close);\r\n\r\n            typeDesc.AddProperty(\"handle\", PhpMemberAttributes.Public,\r\n                    (instance) => ((Directory)instance).handle,\r\n                    (instance, value) => ((Directory)instance).handle = (PhpReference)value);\r\n            typeDesc.AddProperty(\"path\", PhpMemberAttributes.Public,\r\n                    (instance) => ((Directory)instance).path,\r\n                    (instance, value) => ((Directory)instance).path = (PhpReference)value);\r\n\t\t}\r\n\r\n\t\t/// <summary>Arg-less overload.</summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object read(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tswitch (stack.ArgCount)\r\n\t\t\t{\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n                        return ((Directory)instance).read(stack.Context, Arg.Default) ?? false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.CalleeName = \"read\";\r\n\t\t\t\t\t\tobject arg = stack.PeekValue(1);\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n                        return ((Directory)instance).read(stack.Context, arg) ?? false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\tPhpException.InvalidArgumentCount(null, \"read\");\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Arg-less overload.</summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object rewind(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tswitch (stack.ArgCount)\r\n\t\t\t{\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\t((Directory)instance).rewind(stack.Context, Arg.Default);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.CalleeName = \"rewind\";\r\n\t\t\t\t\t\tobject arg = stack.PeekValue(1);\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\t((Directory)instance).rewind(stack.Context, arg);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\tPhpException.InvalidArgumentCount(null, \"rewind\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>Arg-less overload.</summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object close(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tswitch (stack.ArgCount)\r\n\t\t\t{\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\t((Directory)instance).close(stack.Context, Arg.Default);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.CalleeName = \"close\";\r\n\t\t\t\t\t\tobject arg = stack.PeekValue(1);\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\t((Directory)instance).close(stack.Context, arg);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\t\tPhpException.InvalidArgumentCount(null, \"close\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DirectoryListing\r\n\r\n\t/// <summary>\r\n\t/// Enumeration class used for PhpDirectory listings - serves as a PhpResource.\r\n\t/// Uses the PhpWrapper stream wrappers only to generate the list of contained files.\r\n\t/// No actual resources to be released explicitly.\r\n\t/// </summary>\r\n\tinternal sealed class DirectoryListing : PhpResource\r\n\t{\r\n\t\tpublic DirectoryListing(string[] listing)\r\n\t\t\t: base(DirectoryListingName)\r\n\t\t{\r\n\t\t\tthis.Listing = listing;\r\n\t\t\tif (listing != null)\r\n\t\t\t{\r\n\t\t\t\tthis.Enumerator = listing.GetEnumerator();\r\n\t\t\t\tthis.Enumerator.Reset();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Close();\r\n\t\t\t\t// Invalid resource\r\n\t\t\t}\r\n\t\t}\r\n\r\n        protected override void FreeManaged()\r\n        {\r\n            if (object.ReferenceEquals(this, PhpDirectory.lastDirHandle))\r\n                PhpDirectory.lastDirHandle = null;\r\n        }\r\n\r\n\t\tpublic readonly string[] Listing;\r\n\t\tpublic readonly System.Collections.IEnumerator Enumerator;\r\n\r\n\t\tprivate const string DirectoryListingName = \"stream\";\r\n\t\t//private static int DirectoryListingType = PhpResource.RegisterType(DirectoryListingName);\r\n\t\t// Note: PHP uses the stream mechanism listings (opendir etc.)\r\n\t\t// this is the same but a) faster, b) more memory expensive for large directories\r\n\t\t// (and unfinished listings in script)\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Gives access to the directory manipulation and itereation.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpDirectory\r\n\t{\r\n\t\t#region Browsing (getcwd, chdir, NS: chroot)\r\n\r\n\t\t/// <summary>Gets the virtual working directory of the current script.</summary>\r\n\t\t/// <remarks></remarks>\r\n\t\t/// <returns>Absolute path to the current directory.</returns>\r\n\t\t[ImplementsFunction(\"getcwd\")]\r\n\t\tpublic static string GetWorking()\r\n\t\t{\r\n\t\t\tstring result = ScriptContext.CurrentContext.WorkingDirectory;\r\n\t\t\treturn (result != null) ? result : \"\";\r\n\t\t}\r\n\r\n\t\t/// <summary>Changes the virtual working directory for the current script.</summary>\r\n\t\t/// <param name=\"directory\">Absolute or relative path to the new working directory.</param>\r\n\t\t/// <returns>Returns <c>true</c> on success or <c>false</c> on failure.</returns>\r\n\t\t/// <exception cref=\"PhpException\">If the specified directory does not exist.</exception>\r\n\t\t[ImplementsFunction(\"chdir\")]\r\n\t\tpublic static bool SetWorking(string directory)\r\n\t\t{\r\n\t\t\tif (directory != null)\r\n\t\t\t{\r\n\t\t\t\tstring newPath = PhpPath.AbsolutePath(directory);\r\n\t\t\t\tif (System.IO.Directory.Exists(newPath))\r\n\t\t\t\t{\r\n\t\t\t\t\t// Note: open_basedir not applied here, URL will not pass through\r\n\t\t\t\t\tScriptContext.CurrentContext.WorkingDirectory = newPath;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"directory_not_found\", directory));\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Changes the root directory of the current process to <paramref name=\"directory\"/>.\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This function is only available if your system supports it \r\n\t\t/// and you're using the CLI, CGI or Embed SAPI. \r\n\t\t/// Note: This function is not implemented on Windows platforms.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"directory\">The new value of the root directory.</param>\r\n\t\t/// <returns>Returns TRUE on success or FALSE on failure.</returns>\r\n\t\t[ImplementsFunction(\"chroot\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static bool SetRoot(string directory)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Iterating (dir, opendir, readdir, rewinddir, closedir, scandir)\r\n\r\n\t\t/// <summary>Returns an object encapsulating the directory listing mechanism on a given\r\n\t\t/// <paramref name=\"directory\"/>.</summary>\r\n\t\t/// <remarks>A pseudo-object oriented mechanism for reading a directory. The given directory is opened. \r\n\t\t/// Two properties are available once the directory has been opened. The handle property \r\n\t\t/// can be used with other directory functions such as <c>readdir()</c>, <c>rewinddir()</c> and <c>closedir()</c>. \r\n\t\t/// The path property is set to path the directory that was opened. \r\n\t\t/// Three methods are available: <see cref=\"PHP.Library.Directory.read\"/>, \r\n\t\t/// <see cref=\"PHP.Library.Directory.rewind\"/> and <see cref=\"PHP.Library.Directory.close\"/>.</remarks>\r\n\t\t/// <param name=\"directory\">The path to open for listing.</param>\r\n\t\t/// <returns>An instance of <see cref=\"PHP.Library.Directory\"/>.</returns>\r\n\t\t[ImplementsFunction(\"dir\")]\r\n\t\tpublic static Directory GetIterator(string directory)\r\n\t\t{\r\n\t\t\treturn new Directory(directory);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Last handle opened by <c>opendir</c>.\r\n        /// </summary>\r\n        [ThreadStatic]\r\n        internal static PhpResource lastDirHandle;\r\n\r\n\t\t/// <summary>Returns a directory handle to be used in subsequent \r\n\t\t/// <c>readdir()</c>, <c>rewinddir()</c> and <c>closedir()</c> calls.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// If path is not a valid directory or the directory can not \r\n\t\t/// be opened due to permission restrictions or filesystem errors, \r\n\t\t/// <c>opendir()</c> returns <c>false</c> and generates a PHP error of level <c>E_WARNING</c>. \r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// As of PHP 4.3.0 path can also be any URL which supports directory listing, \r\n\t\t/// however only the <c>file://</c> url wrapper supports this in PHP 4.3. \r\n\t\t/// As of PHP 5.0.0, support for the <c>ftp://</c> url wrapper is included as well.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"directory\">The path of the directory to be listed.</param>\r\n\t\t/// <returns>A <see cref=\"DirectoryListing\"/> resource containing the listing.</returns>\r\n\t\t/// <exception cref=\"PhpException\">In case the specified stream wrapper can not be found\r\n\t\t/// or the desired directory can not be opened.</exception>\r\n\t\t[ImplementsFunction(\"opendir\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Open(string directory)\r\n\t\t{\r\n            lastDirHandle = null;\r\n\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref directory, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tstring[] listing = wrapper.Listing(directory, 0, null);\r\n\t\t\treturn (listing != null) ? (lastDirHandle = new DirectoryListing(listing)) : null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Reads an entry from a directory handle. Uses last handle opened by <c>opendir</c>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"readdir\")]\r\n        [return: CastToFalse]\r\n        public static string Read()\r\n        {\r\n            return Read(PhpDirectory.lastDirHandle);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads an entry from a directory handle.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dirHandle\">A <see cref=\"PhpResource\"/> returned by <see cref=\"Open\"/>.</param>\r\n\t\t/// <returns>\r\n\t\t/// Returns the path of the next file from the directory. \r\n\t\t/// The filenames (including . and ..) are returned in the order \r\n\t\t/// in which they are stored by the filesystem.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"readdir\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string Read(PhpResource dirHandle)\r\n\t\t{\r\n\t\t\tIEnumerator enumerator = ValidListing(dirHandle);\r\n\t\t\tif (enumerator != null && enumerator.MoveNext())\r\n\t\t\t\treturn enumerator.Current.ToString();\r\n\t\t\telse\r\n\t\t\t\treturn null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Rewinds a directory handle. Uses last handle opened by <c>opendir</c>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"rewinddir\")]\r\n        public static void Rewind()\r\n        {\r\n            Rewind(PhpDirectory.lastDirHandle);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Rewinds a directory handle.\r\n        /// Function has no return value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dirHandle\">A <see cref=\"PhpResource\"/> returned by <see cref=\"Open\"/>.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Resets the directory stream indicated by <paramref name=\"dirHandle\"/> to the \r\n\t\t/// beginning of the directory.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"rewinddir\")]\r\n\t\tpublic static void Rewind(PhpResource dirHandle)\r\n\t\t{\r\n\t\t\tIEnumerator enumerator = ValidListing(dirHandle);\r\n\t\t\tif (enumerator == null) return;\r\n\t\t\tenumerator.Reset();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Closes a directory handle. Uses last handle opened by <c>opendir</c>.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"closedir\")]\r\n        public static void Close()\r\n        {\r\n            Close(PhpDirectory.lastDirHandle);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes a directory handle.\r\n        /// Function has no return value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dirHandle\">A <see cref=\"PhpResource\"/> returned by <see cref=\"Open\"/>.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Closes the directory stream indicated by <paramref name=\"dirHandle\"/>. \r\n\t\t/// The stream must have previously been opened by by <see cref=\"Open\"/>.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"closedir\")]\r\n\t\tpublic static void Close(PhpResource dirHandle)\r\n\t\t{\r\n\t\t\t// Note: PHP allows other all stream resources to be closed with closedir().\r\n\t\t\tIEnumerator enumerator = ValidListing(dirHandle);\r\n\t\t\tif (enumerator == null) return;\r\n\t\t\tdirHandle.Close(); // releases the DirectoryListing and sets to invalid.\r\n\t\t}\r\n\r\n\t\t/// <summary>Lists files and directories inside the specified <paramref name=\"directory\"/>.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns an array of files and directories from the <paramref name=\"directory\"/>. \r\n\t\t/// If <paramref name=\"directory\"/> is not a directory, then boolean <c>false</c> is returned, \r\n\t\t/// and an error of level <c>E_WARNING</c> is generated. \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"directory\">The directory to be listed.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> of filenames or <c>false</c> in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"scandir\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray Scan(string directory)\r\n\t\t{\r\n\t\t\treturn Scan(directory, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>Lists files and directories inside the specified path.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns an array of files and directories from the <paramref name=\"directory\"/>. \r\n\t\t/// If <paramref name=\"directory\"/> is not a directory, then boolean <c>false</c> is returned, \r\n\t\t/// and an error of level <c>E_WARNING</c> is generated. \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"directory\">The directory to be listed.</param>\r\n\t\t/// <param name=\"sorting_order\">\r\n\t\t/// By default, the listing is sorted in ascending alphabetical order. \r\n\t\t/// If the optional sorting_order is used (set to <c>1</c>), \r\n\t\t/// then sort order is alphabetical in descending order.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> of filenames or <c>false</c> in case of failure.</returns>\r\n\t\t/// <exception cref=\"PhpException\">In case the specified stream wrapper can not be found\r\n\t\t/// or the desired directory can not be opened.</exception>\r\n\t\t[ImplementsFunction(\"scandir\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray Scan(string directory, int sorting_order)\r\n\t\t{\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref directory, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tstring[] listing = wrapper.Listing(directory, 0, null);\r\n\r\n\t\t\tif (listing != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray ret = new PhpArray(listing); // create the array from the system one\r\n\t\t\t\tif (sorting_order == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArrays.ReverseSort(ret, ComparisonMethod.String);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArrays.Sort(ret, ComparisonMethod.String);\r\n\t\t\t\t}\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t\treturn null; // false\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts the given resource handle to the <see cref=\"DirectoryListing\"/> enumerator.\r\n\t\t/// Throw an exception when a wrong argument is supplied.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dir_handle\">The handle passed to a PHP function.</param>\r\n\t\t/// <returns>The enumerator over the files in the DirectoryListing.</returns>\r\n\t\t/// <exception cref=\"PhpException\">When the supplied argument is not a valid <see cref=\"DirectoryListing\"/> resource.</exception>\r\n\t\tprivate static System.Collections.IEnumerator ValidListing(PhpResource dir_handle)\r\n\t\t{\r\n\t\t\tDirectoryListing listing = dir_handle as DirectoryListing;\r\n\t\t\tif (listing != null) return listing.Enumerator;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_directory_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Manipulating (mkdir, rmdir)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a new directory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pathname\">The directory to create.</param>\r\n\t\t/// <returns><c>true</c> if successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"mkdir\")]\r\n\t\tpublic static bool MakeDirectory(string pathname)\r\n\t\t{\r\n\t\t\treturn MakeDirectory(pathname, (int)FileModeFlags.ReadWriteExecute, false, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a directory or a branch of directories using the specified wrapper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pathname\">The path to create.</param>\r\n\t\t/// <param name=\"mode\">A combination of <see cref=\"StreamMakeDirectoryOptions\"/>.</param>\r\n\t\t/// <returns><c>true</c> if successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"mkdir\")]\r\n\t\tpublic static bool MakeDirectory(string pathname, int mode)\r\n\t\t{\r\n\t\t\treturn MakeDirectory(pathname, mode, false, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pathname\"></param>\r\n\t\t/// <param name=\"mode\"></param>\r\n\t\t/// <param name=\"recursive\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"mkdir\")]\r\n\t\tpublic static bool MakeDirectory(string pathname, int mode, bool recursive)\r\n\t\t{\r\n\t\t\treturn MakeDirectory(pathname, mode, recursive, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pathname\"></param>\r\n\t\t/// <param name=\"mode\"></param>\r\n\t\t/// <param name=\"recursive\"></param>\r\n\t\t/// <param name=\"context\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"mkdir\")]\r\n\t\tpublic static bool MakeDirectory(string pathname, int mode, bool recursive, PhpResource context)\r\n\t\t{\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref pathname, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\treturn wrapper.MakeDirectory(pathname, mode, recursive ?\r\n\t\t\t  StreamMakeDirectoryOptions.Recursive : StreamMakeDirectoryOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a directory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dirname\"></param>\r\n\t\t/// <returns><c>true</c> if successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"rmdir\")]\r\n\t\tpublic static bool RemoveDirectory(string dirname)\r\n\t\t{\r\n\t\t\treturn RemoveDirectory(dirname, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a directory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dirname\"></param>\r\n\t\t/// <param name=\"context\"></param>\r\n\t\t/// <returns><c>true</c> if successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"rmdir\")]\r\n\t\tpublic static bool RemoveDirectory(string dirname, StreamContext context)\r\n\t\t{\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref dirname, out wrapper, CheckAccessMode.Directory, CheckAccessOptions.Empty))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\treturn wrapper.RemoveDirectory(dirname, StreamRemoveDirectoryOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/FileSystem.Glob.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.IO;\r\nusing System.Text.RegularExpressions;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\r\n    //TODO: try to output slashes in a not uniform and ugly way as PHP does\r\n\r\n    public static class PhpGlob\r\n    {\r\n        #region Enums: GlobOptions, FnMatchOptions\r\n\r\n        /// <summary>\r\n        /// Flags used in call to <c>glob()</c>.\r\n        /// </summary>\r\n        [Flags]\r\n        public enum GlobOptions\r\n        {\r\n            /// <summary>\r\n            /// No flags.\r\n            /// </summary>\r\n            None = 0,\r\n\r\n            /// <summary>\r\n            /// Append system directory separator (slash) to matching directories.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_MARK\")]\r\n            Mark = 0x0008,\r\n\r\n            /// <summary>\r\n            /// Return pattern itself if nothing matches.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_NOCHECK\")]\r\n            NoCheck = 0x0010,\r\n\r\n            /// <summary>\r\n            /// Don't sort.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_NOSORT\")]\r\n            NoSort = 0x0020,//TODO: support this somehow\r\n\r\n            /// <summary>\r\n            /// Expand braces ala csh.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_BRACE\")]\r\n            Brace = 0x0080,\r\n\r\n            /// <summary>\r\n            /// Disable backslash escaping.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_NOESCAPE\")]\r\n            NoEscape = 0x1000,\r\n\r\n            /// <summary>\r\n            /// List directories only.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_ONLYDIR\")]\r\n            OnlyDir = 0x40000000,\r\n\r\n            /// <summary>\r\n            /// List directories only.\r\n            /// </summary>\r\n            [ImplementsConstant(\"GLOB_ERR\")]\r\n            StopOnError = 0x4\r\n        }\r\n\r\n        /// <summary>\r\n        /// Flags used in call to <c>fnmatch()</c>.\r\n        /// </summary>\r\n        public enum FnMatchOptions\r\n        {\r\n            /// <summary>\r\n            /// No flags.\r\n            /// </summary>\r\n            None = 0,\r\n\r\n            /// <summary>\r\n            /// Caseless match. Part of the GNU extension. \r\n            /// </summary>\r\n            [ImplementsConstant(\"FNM_CASEFOLD\")]\r\n            CaseFold = 0x0010,\r\n\r\n            /// <summary>\r\n            /// Leading period in string must be exactly matched by period in the given pattern. \r\n            /// </summary>\r\n            [ImplementsConstant(\"FNM_PERIOD\")]\r\n            Period = 0x0004,\r\n\r\n            /// <summary>\r\n            /// Disable backslash escaping. \r\n            /// </summary>\r\n            [ImplementsConstant(\"FNM_NOESCAPE\")]\r\n            NoEscape = 0x0001,\r\n\r\n            /// <summary>\r\n            /// Slash in string only matches slash in the given pattern. \r\n            /// </summary>\r\n            [ImplementsConstant(\"FNM_PATHNAME\")]\r\n            PathName = 0x0002\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        private class CharClass\r\n        {\r\n            private readonly StringBuilder/*!*/ _chars = new StringBuilder();\r\n\r\n            internal void Add(char c)\r\n            {\r\n                if (c == ']' || c == '\\\\')\r\n                {\r\n                    _chars.Append('\\\\');\r\n                }\r\n                _chars.Append(c);\r\n            }\r\n\r\n            internal string MakeString()\r\n            {\r\n                if (_chars.Length == 0)\r\n                {\r\n                    return null;\r\n                }\r\n                if (_chars.Length == 1 && _chars[0] == '^')\r\n                {\r\n                    _chars.Insert(0, \"\\\\\");\r\n                }\r\n                _chars.Insert(0, \"[\");\r\n                _chars.Append(']');\r\n                return _chars.ToString();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces all slashes with <c>/</c>.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Path pattern.</param>\r\n        /// <returns>Canonized pattern.</returns>\r\n        private static string CanonizePattern(string/*!*/pattern)\r\n        {\r\n            Debug.Assert(pattern != null);\r\n            return pattern.Replace('\\\\', '/');\r\n        }\r\n\r\n        private static void AppendExplicitRegexChar(StringBuilder/*!*/ builder, char c)\r\n        {\r\n            builder.Append('[');\r\n            if (c == '^' || c == '\\\\')\r\n            {\r\n                builder.Append('\\\\');\r\n            }\r\n            builder.Append(c);\r\n            builder.Append(']');\r\n        }\r\n\r\n        internal static string/*!*/ PatternToRegex(string/*!*/ pattern, bool pathName, bool noEscape)\r\n        {\r\n            StringBuilder result = new StringBuilder(pattern.Length);\r\n            result.Append(\"\\\\G\");\r\n\r\n            bool inEscape = false;\r\n            CharClass charClass = null;\r\n\r\n            foreach (char c in pattern)\r\n            {\r\n                if (inEscape)\r\n                {\r\n                    if (charClass != null)\r\n                    {\r\n                        charClass.Add(c);\r\n                    }\r\n                    else\r\n                    {\r\n                        AppendExplicitRegexChar(result, c);\r\n                    }\r\n                    inEscape = false;\r\n                    continue;\r\n                }\r\n                else if (c == '\\\\' && !noEscape)\r\n                {\r\n                    inEscape = true;\r\n                    continue;\r\n                }\r\n\r\n                if (charClass != null)\r\n                {\r\n                    if (c == ']')\r\n                    {\r\n                        string set = charClass.MakeString();\r\n                        if (set == null)\r\n                        {\r\n                            // PHP regex \"[]\" matches nothing\r\n                            // CLR regex \"[]\" throws exception\r\n                            return String.Empty;\r\n                        }\r\n                        result.Append(set);\r\n                        charClass = null;\r\n                    }\r\n                    else\r\n                    {\r\n                        charClass.Add(c);\r\n                    }\r\n                    continue;\r\n                }\r\n                switch (c)\r\n                {\r\n                    case '*':\r\n                        result.Append(pathName ? \"[^/]*\" : \".*\");\r\n                        break;\r\n\r\n                    case '?':\r\n                        result.Append('.');\r\n                        break;\r\n\r\n                    case '[':\r\n                        charClass = new CharClass();\r\n                        break;\r\n\r\n                    default:\r\n                        AppendExplicitRegexChar(result, c);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return (charClass == null) ? result.ToString() : String.Empty;\r\n        }\r\n\r\n        private sealed class GlobMatcher\r\n        {\r\n            private readonly string/*!*/ _pattern;\r\n            private readonly GlobOptions _flags;\r\n            private readonly List<string>/*!*/ _result;\r\n            private readonly bool _dirOnly;\r\n            private bool _stripTwo;\r\n            private bool _relative;\r\n            private FnMatchOptions _fnMatchFlags;\r\n\r\n            private bool NoEscapes\r\n            {\r\n                get { return ((_flags & GlobOptions.NoEscape) != 0); }\r\n            }\r\n\r\n            private bool StopOnError\r\n            {\r\n                get { return ((_flags & GlobOptions.StopOnError) != 0); }\r\n            }\r\n\r\n            private bool Mark\r\n            {\r\n                get { return ((_flags & GlobOptions.Mark) != 0); }\r\n            }\r\n\r\n            public GlobMatcher(string/*!*/ pattern, GlobOptions flags)\r\n            {\r\n                _pattern = CanonizePattern(pattern);\r\n                _flags = flags;\r\n                _result = new List<string>();\r\n                _dirOnly = _pattern.LastCharacter() == '/' || (flags & GlobOptions.OnlyDir) != 0;\r\n\r\n                _fnMatchFlags = NoEscapes ? FnMatchOptions.NoEscape : FnMatchOptions.None;\r\n            }\r\n\r\n\r\n            private static string/*!*/ Unescape(string/*!*/ path, int start)\r\n            {\r\n                StringBuilder unescaped = new StringBuilder();\r\n                bool inEscape = false;\r\n                for (int i = start; i < path.Length; i++)\r\n                {\r\n                    char c = path[i];\r\n                    if (inEscape)\r\n                    {\r\n                        inEscape = false;\r\n                    }\r\n                    else if (c == '\\\\')\r\n                    {\r\n                        inEscape = true;\r\n                        continue;\r\n                    }\r\n                    unescaped.Append(c);\r\n                }\r\n\r\n                if (inEscape)\r\n                {\r\n                    unescaped.Append('\\\\');\r\n                }\r\n\r\n                return unescaped.ToString();\r\n            }\r\n\r\n            private void TestPath(string path, int patternEnd, bool isLastPathSegment)\r\n            {\r\n                if (!isLastPathSegment)\r\n                {\r\n                    DoGlob(path, patternEnd);\r\n                    return;\r\n                }\r\n\r\n                if (!NoEscapes)\r\n                {\r\n                    path = Unescape(path, _stripTwo ? 2 : 0);\r\n                }\r\n                else if (_stripTwo)\r\n                {\r\n                    path = path.Substring(2);\r\n                }\r\n\r\n                string resultPath = path;\r\n\r\n                if (_relative)//we have to remove CWD before adding to results list\r\n                {\r\n                    resultPath = path.Substring(ScriptContext.CurrentContext.WorkingDirectory.Length + 1);\r\n                }\r\n\r\n                if (System.IO.Directory.Exists(path))\r\n                {\r\n                    if (Mark)\r\n                        _result.Add(resultPath + FullPath.DirectorySeparatorString);\r\n                    else\r\n                        _result.Add(resultPath);\r\n                        \r\n                }\r\n                else if (!_dirOnly && File.Exists(path))\r\n                {\r\n                    _result.Add(resultPath);\r\n                }\r\n            }\r\n\r\n            internal IList<string>/*!*/ DoGlob()\r\n            {\r\n                if (_pattern.Length == 0)\r\n                {\r\n                    return ArrayUtils.EmptyStrings;\r\n                }\r\n\r\n                int pos = 0;\r\n                string baseDirectory = \".\";\r\n                if (_pattern[0] == '/' ||  (_pattern.Length >= 2 && _pattern[1] == ':'))//is pattern rooted?\r\n                {\r\n                    bool containsWildcard;\r\n                    pos = FindNextSeparator(0, false, out containsWildcard);\r\n                    if (pos == _pattern.Length)\r\n                    {\r\n                        TestPath(_pattern, pos, true);\r\n                        return _result;\r\n                    }\r\n                    if (pos > 0 || _pattern[0] == '/')\r\n                    {\r\n                        baseDirectory = _pattern.Substring(0, pos);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    _relative = true;\r\n                    baseDirectory = CanonizePattern(ScriptContext.CurrentContext.WorkingDirectory);\r\n                }\r\n\r\n                _stripTwo = (baseDirectory == \".\");\r\n\r\n                try\r\n                {\r\n                    DoGlob(baseDirectory, pos);\r\n\r\n                }\r\n                catch (ArgumentNullException)\r\n                {\r\n                    throw;\r\n                }\r\n                catch (Exception)\r\n                {\r\n                }\r\n\r\n                return _result;\r\n            }\r\n\r\n            private void DoGlob(string/*!*/ baseDirectory, int position)\r\n            {\r\n                if (!System.IO.Directory.Exists(baseDirectory))\r\n                {\r\n                    return;\r\n                }\r\n\r\n                bool containsWildcard;\r\n                int patternEnd = FindNextSeparator(position, true, out containsWildcard);\r\n                bool isLastPathSegment = (patternEnd == _pattern.Length);\r\n                string dirSegment = _pattern.Substring(position, patternEnd - position);\r\n\r\n                if (!isLastPathSegment)\r\n                {\r\n                    patternEnd++;\r\n                }\r\n\r\n                if (!containsWildcard)\r\n                {\r\n                    string path = baseDirectory + \"/\" + dirSegment;\r\n                    TestPath(path, patternEnd, isLastPathSegment);\r\n                    return;\r\n                }\r\n\r\n                try\r\n                {\r\n\r\n                    foreach (string file in FileSystemUtils.GetFileSystemEntries(baseDirectory, \"*\"))\r\n                    {\r\n                        string objectName = Path.GetFileName(file);\r\n                        if (FnMatch(dirSegment, objectName, _fnMatchFlags))\r\n                        {\r\n                            TestPath(CanonizePattern(file), patternEnd, isLastPathSegment);\r\n                        }\r\n                    }\r\n\r\n                }\r\n                catch (ArgumentNullException)\r\n                {\r\n                    throw;\r\n                }\r\n                catch(Exception)\r\n                {\r\n                    if (StopOnError)\r\n                        throw;\r\n                }\r\n\r\n                if (isLastPathSegment && dirSegment[0] == '.')\r\n                {\r\n                    if (FnMatch(dirSegment, \".\", _fnMatchFlags))\r\n                    {\r\n                        string directory = baseDirectory + \"/.\";\r\n                        if (_dirOnly)\r\n                        {\r\n                            directory += '/';\r\n                        }\r\n                        TestPath(directory, patternEnd, true);\r\n                    }\r\n                    if (FnMatch(dirSegment, \"..\", _fnMatchFlags))\r\n                    {\r\n                        string directory = baseDirectory + \"/..\";\r\n                        if (_dirOnly)\r\n                        {\r\n                            directory += '/';\r\n                        }\r\n                        TestPath(directory, patternEnd, true);\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            private int FindNextSeparator(int position, bool allowWildcard, out bool containsWildcard)\r\n            {\r\n                int lastSlash = -1;\r\n                bool inEscape = false;\r\n                containsWildcard = false;\r\n                for (int i = position; i < _pattern.Length; i++)\r\n                {\r\n                    if (inEscape)\r\n                    {\r\n                        inEscape = false;\r\n                        continue;\r\n                    }\r\n                    char c = _pattern[i];\r\n                    if (c == '\\\\')\r\n                    {\r\n                        inEscape = true;\r\n                        continue;\r\n                    }\r\n                    else if (c == '*' || c == '?' || c == '[')\r\n                    {\r\n                        if (!allowWildcard)\r\n                        {\r\n                            return lastSlash + 1;\r\n                        }\r\n                        else if (lastSlash >= 0)\r\n                        {\r\n                            return lastSlash;\r\n                        }\r\n                        containsWildcard = true;\r\n                    }\r\n                    else if (c == '/' || c == ':')\r\n                    {\r\n                        if (containsWildcard)\r\n                        {\r\n                            return i;\r\n                        }\r\n                        lastSlash = i;\r\n                    }\r\n                }\r\n                return _pattern.Length;\r\n            }\r\n\r\n\r\n        }\r\n\r\n        private class GlobUngrouper\r\n        {\r\n            internal abstract class GlobNode\r\n            {\r\n                internal readonly GlobNode/*!*/ _parent;\r\n                protected GlobNode(GlobNode parentNode)\r\n                {\r\n                    _parent = parentNode ?? this;\r\n                }\r\n                abstract internal GlobNode/*!*/ AddChar(char c);\r\n                abstract internal GlobNode/*!*/ StartLevel();\r\n                abstract internal GlobNode/*!*/ AddGroup();\r\n                abstract internal GlobNode/*!*/ FinishLevel();\r\n                abstract internal List<StringBuilder>/*!*/ Flatten();\r\n            }\r\n\r\n            internal class TextNode : GlobNode\r\n            {\r\n                private readonly StringBuilder/*!*/ _builder;\r\n\r\n                internal TextNode(GlobNode/*!*/ parentNode)\r\n                    : base(parentNode)\r\n                {\r\n                    _builder = new StringBuilder();\r\n                }\r\n                internal override GlobNode/*!*/ AddChar(char c)\r\n                {\r\n                    if (c != 0)\r\n                    {\r\n                        _builder.Append(c);\r\n                    }\r\n                    return this;\r\n                }\r\n                internal override GlobNode/*!*/ StartLevel()\r\n                {\r\n                    return _parent.StartLevel();\r\n                }\r\n                internal override GlobNode/*!*/ AddGroup()\r\n                {\r\n                    return _parent.AddGroup();\r\n                }\r\n                internal override GlobNode/*!*/ FinishLevel()\r\n                {\r\n                    return _parent.FinishLevel();\r\n                }\r\n                internal override List<StringBuilder>/*!*/ Flatten()\r\n                {\r\n                    List<StringBuilder> result = new List<StringBuilder>(1);\r\n                    result.Add(_builder);\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            internal class ChoiceNode : GlobNode\r\n            {\r\n                private readonly List<SequenceNode>/*!*/ _nodes;\r\n\r\n                internal ChoiceNode(GlobNode/*!*/ parentNode)\r\n                    : base(parentNode)\r\n                {\r\n                    _nodes = new List<SequenceNode>();\r\n                }\r\n                internal override GlobNode/*!*/ AddChar(char c)\r\n                {\r\n                    SequenceNode node = new SequenceNode(this);\r\n                    _nodes.Add(node);\r\n                    return node.AddChar(c);\r\n                }\r\n                internal override GlobNode/*!*/ StartLevel()\r\n                {\r\n                    SequenceNode node = new SequenceNode(this);\r\n                    _nodes.Add(node);\r\n                    return node.StartLevel();\r\n                }\r\n                internal override GlobNode/*!*/ AddGroup()\r\n                {\r\n                    AddChar('\\0');\r\n                    return this;\r\n                }\r\n                internal override GlobNode/*!*/ FinishLevel()\r\n                {\r\n                    AddChar('\\0');\r\n                    return _parent;\r\n                }\r\n                internal override List<StringBuilder>/*!*/ Flatten()\r\n                {\r\n                    List<StringBuilder> result = new List<StringBuilder>();\r\n                    foreach (GlobNode node in _nodes)\r\n                    {\r\n                        foreach (StringBuilder builder in node.Flatten())\r\n                        {\r\n                            result.Add(builder);\r\n                        }\r\n                    }\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            internal class SequenceNode : GlobNode\r\n            {\r\n                private readonly List<GlobNode>/*!*/ _nodes;\r\n\r\n                internal SequenceNode(GlobNode parentNode)\r\n                    : base(parentNode)\r\n                {\r\n                    _nodes = new List<GlobNode>();\r\n                }\r\n\r\n                internal override GlobNode/*!*/ AddChar(char c)\r\n                {\r\n                    TextNode node = new TextNode(this);\r\n                    _nodes.Add(node);\r\n                    return node.AddChar(c);\r\n                }\r\n\r\n                internal override GlobNode/*!*/ StartLevel()\r\n                {\r\n                    ChoiceNode node = new ChoiceNode(this);\r\n                    _nodes.Add(node);\r\n                    return node;\r\n                }\r\n\r\n                internal override GlobNode/*!*/ AddGroup()\r\n                {\r\n                    return _parent;\r\n                }\r\n\r\n                internal override GlobNode/*!*/ FinishLevel()\r\n                {\r\n                    return _parent._parent;\r\n                }\r\n\r\n                internal override List<StringBuilder>/*!*/ Flatten()\r\n                {\r\n                    List<StringBuilder> result = new List<StringBuilder>();\r\n                    result.Add(new StringBuilder());\r\n                    foreach (GlobNode node in _nodes)\r\n                    {\r\n                        List<StringBuilder> tmp = new List<StringBuilder>();\r\n                        foreach (StringBuilder builder in node.Flatten())\r\n                        {\r\n                            foreach (StringBuilder sb in result)\r\n                            {\r\n                                StringBuilder newsb = new StringBuilder(sb.ToString());\r\n                                newsb.Append(builder.ToString());\r\n                                tmp.Add(newsb);\r\n                            }\r\n                        }\r\n                        result = tmp;\r\n                    }\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            private readonly SequenceNode/*!*/ _rootNode;\r\n            private GlobNode/*!*/ _currentNode;\r\n            private int _level;\r\n\r\n            internal GlobUngrouper(int patternLength)\r\n            {\r\n                _rootNode = new SequenceNode(null);\r\n                _currentNode = _rootNode;\r\n                _level = 0;\r\n            }\r\n\r\n            internal void AddChar(char c)\r\n            {\r\n                _currentNode = _currentNode.AddChar(c);\r\n            }\r\n\r\n            internal void StartLevel()\r\n            {\r\n                _currentNode = _currentNode.StartLevel();\r\n                _level++;\r\n            }\r\n\r\n            internal void AddGroup()\r\n            {\r\n                _currentNode = _currentNode.AddGroup();\r\n            }\r\n\r\n            internal void FinishLevel()\r\n            {\r\n                _currentNode = _currentNode.FinishLevel();\r\n                _level--;\r\n            }\r\n            internal int Level\r\n            {\r\n                get { return _level; }\r\n            }\r\n            internal string[]/*!*/ Flatten()\r\n            {\r\n                if (_level != 0)\r\n                {\r\n                    return ArrayUtils.EmptyStrings;\r\n                }\r\n                List<StringBuilder> list = _rootNode.Flatten();\r\n                string[] result = new string[list.Count];\r\n                for (int i = 0; i < list.Count; i++)\r\n                {\r\n                    result[i] = list[i].ToString();\r\n                }\r\n                return result;\r\n            }\r\n        }\r\n\r\n        private static string[] UngroupGlobs(string/*!*/ pattern, bool noEscape, bool brace)\r\n        {\r\n            GlobUngrouper ungrouper = new GlobUngrouper(pattern.Length);\r\n\r\n            bool inEscape = false;\r\n            foreach (char c in pattern)\r\n            {\r\n                if (inEscape)\r\n                {\r\n                    if (c != ',' && c != '{' && c != '}')\r\n                    {\r\n                        ungrouper.AddChar('\\\\');\r\n                    }\r\n                    ungrouper.AddChar(c);\r\n                    inEscape = false;\r\n                    continue;\r\n                }\r\n                else if (c == '\\\\' && !noEscape)\r\n                {\r\n                    inEscape = true;\r\n                    continue;\r\n                }\r\n\r\n                switch (c)\r\n                {\r\n                    case '{':\r\n                        if (!brace)\r\n                            return ArrayUtils.EmptyStrings;\r\n\r\n                        ungrouper.StartLevel();\r\n                        break;\r\n\r\n                    case ',':\r\n                        if (ungrouper.Level < 1)\r\n                        {\r\n                            ungrouper.AddChar(c);\r\n                        }\r\n                        else\r\n                        {\r\n                            ungrouper.AddGroup();\r\n                        }\r\n                        break;\r\n\r\n                    case '}':\r\n                        if (ungrouper.Level < 1)\r\n                        {\r\n                            // Unbalanced closing bracket matches nothing\r\n                            return ArrayUtils.EmptyStrings;\r\n                        }\r\n                        ungrouper.FinishLevel();\r\n                        break;\r\n\r\n                    default:\r\n                        ungrouper.AddChar(c);\r\n                        break;\r\n                }\r\n            }\r\n            return ungrouper.Flatten();\r\n        }\r\n\r\n        internal static IEnumerable<string>/*!*/ GetMatches(string/*!*/ pattern, GlobOptions flags) \r\n        {\r\n            if (pattern.Length == 0) {\r\n                yield break;\r\n            }\r\n\n            bool noEscape = ((flags & GlobOptions.NoEscape) != 0);\r\n            bool brace = ((flags & GlobOptions.Brace) != 0);\n\n            string[] groups = UngroupGlobs(pattern, noEscape, brace);\n            if (groups.Length == 0) {\n                yield break;\n            }\n\n            foreach (string group in groups) {\n                GlobMatcher matcher = new GlobMatcher(group, flags);\n                foreach (string filename in matcher.DoGlob()) {                 \n                    yield return filename.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);\n                }\n            }            \n        }\r\n\r\n        #region fnmatch, glob\r\n\r\n        /// <summary>\r\n        /// Matches the given path against a pattern.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">A <see cref=\"string\"/> containing a wildcard.</param>\r\n        /// <param name=\"path\">The <see cref=\"string\"/> to be matched.</param>\r\n        /// <param name=\"flags\">Additional flags.</param>\r\n        /// <returns><c>true</c> if the <paramref name=\"path\"/> matches with the given \r\n        /// wildcard <paramref name=\"pattern\"/>.</returns>\r\n        [ImplementsFunction(\"fnmatch\")]\r\n        public static bool FnMatch(string/*!*/ pattern, string/*!*/ path, FnMatchOptions flags)\r\n        {\r\n            if (pattern.Length == 0)\r\n            {\r\n                return path.Length == 0;\r\n            }\r\n\r\n            bool pathName = ((flags & FnMatchOptions.PathName) != 0);\r\n            bool noEscape = ((flags & FnMatchOptions.NoEscape) != 0);\r\n            string regexPattern = PatternToRegex(pattern, pathName, noEscape);\r\n            if (regexPattern.Length == 0)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            if (((flags & FnMatchOptions.Period) == 0) && path.Length > 0 && path[0] == '.')\r\n            {\r\n                // Starting dot requires an explicit dot in the pattern\r\n                if (regexPattern.Length < 4 || regexPattern[2] != '[' || regexPattern[3] != '.')\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            RegexOptions options = RegexOptions.None;\r\n            if ((flags & FnMatchOptions.CaseFold) != 0)\r\n            {\r\n                options |= RegexOptions.IgnoreCase;\r\n            }\r\n            Match match = Regex.Match(path, regexPattern, options);\r\n            return match != null && match.Success && (match.Length == path.Length);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Matches the given path against a pattern.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">A <see cref=\"string\"/> containing a wildcard.</param>\r\n        /// <param name=\"path\">The <see cref=\"string\"/> to be matched.</param>\r\n        /// <returns><c>true</c> if the <paramref name=\"path\"/> matches with the given \r\n        /// wildcard <paramref name=\"pattern\"/>.</returns>\r\n        [ImplementsFunction(\"fnmatch\")]\r\n        public static bool Match(string pattern, string path)\r\n        {\r\n            return FnMatch(pattern, path, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find pathnames matching a pattern.\r\n        /// </summary>\r\n        [ImplementsFunction(\"glob\")]\r\n        public static PhpArray Glob(string pattern)\r\n        {\r\n            return Glob(pattern, GlobOptions.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find pathnames matching a pattern.\r\n        /// </summary>\r\n        [ImplementsFunction(\"glob\")]\r\n        public static PhpArray Glob(string pattern, GlobOptions flags)\r\n        {\r\n            if (pattern == null)\r\n\t\t\t\treturn new PhpArray(0, 0);\r\n            \r\n            PhpArray result = new PhpArray();\r\n            foreach (var fileName in GetMatches(pattern, flags))\r\n            {\r\n                result.Add(fileName);\r\n            }\r\n\r\n\t\t\tif (result.Count == 0 && (flags & GlobOptions.NoCheck) != 0) \r\n                result.Add(pattern);\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/FileSystem.Path.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Jan Benda and Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n\tTODO:\r\n\t\t-\tFixed tempnam() 2nd parameter to be checked against path components. (PHP 5.1.3) \r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Threading;\r\nusing System.ComponentModel;\r\n\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\nusing System.Text.RegularExpressions;\r\n\r\n#if SILVERLIGHT\r\nusing DirectoryEx = PHP.CoreCLR.DirectoryEx;\r\n#else\r\nusing DirectoryEx = System.IO.Directory;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Provides path strings manipulation.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpPath\r\n\t{\r\n\t\t#region Scheme, Url, Absolute Path\r\n\r\n\t\t/// <summary>\r\n\t\t/// Wrapper-safe method of getting the schema portion from an URL.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">A <see cref=\"string\"/> containing an URL or a local filesystem path.</param>\r\n\t\t/// <returns>\r\n\t\t/// The schema portion of the given <paramref name=\"path\"/> or <c>\"file\"</c>\r\n\t\t/// for a local filesystem path.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\tinternal static string GetScheme(string/*!*/ path)\r\n\t\t{\r\n\t\t\tint colon_index = path.IndexOf(':');\r\n\r\n\t\t\t// When there is not scheme present (or it's a local path) return \"file\".\r\n\t\t\tif (colon_index == -1 || Path.IsPathRooted(path))\r\n\t\t\t\treturn \"file\";\r\n\r\n\t\t\t// Otherwise assume that it's the string before first ':'.\r\n\t\t\treturn path.Substring(0, colon_index);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Concatenates a scheme with the given absolute path if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"absolutePath\">Absolute path.</param>\r\n\t\t/// <returns>The given url or absolute path preceded by a <c>file://</c>.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\tinternal static string GetUrl(string/*!*/ absolutePath)\r\n\t\t{\r\n\t\t\t// Assert that the path is absolute\r\n            Debug.Assert(\r\n                !string.IsNullOrEmpty(absolutePath) &&\r\n                (absolutePath.IndexOf(':') > 0 ||   // there is a protocol (http://) or path is rooted (c:\\)\r\n                    (Path.VolumeSeparatorChar != ':' && // or on linux, if there is no protocol, file path is rooted\r\n                        (absolutePath[0] == Path.DirectorySeparatorChar || absolutePath[0] == Path.AltDirectorySeparatorChar)))                      \r\n                );\r\n\r\n\t\t\tif (Path.IsPathRooted(absolutePath))\r\n\t\t\t\treturn String.Concat(\"file://\", absolutePath);\r\n\r\n\t\t\t// Otherwise assume that it's the string before first ':'.\r\n\t\t\treturn absolutePath;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the given filesystem url without the scheme.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">A path or url of a local filesystem file.</param>\r\n\t\t/// <returns>The filesystem path or <b>null</b> if the <paramref name=\"path\"/> is not a local file.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\tinternal static string GetFilename(string/*!*/ path)\r\n\t\t{\r\n\t\t\tif (path.IndexOf(':') == -1 || Path.IsPathRooted(path)) return path;\r\n\t\t\tif (path.IndexOf(\"file://\") == 0) return path.Substring(\"file://\".Length);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check if the given path is a path to a local file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"url\">The path to test.</param>\r\n\t\t/// <returns><c>true</c> if it's not a fully qualified name of a remote resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\tinternal static bool IsLocalFile(string/*!*/ url)\r\n\t\t{\r\n\t\t\treturn GetScheme(url) == \"file\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check if the given path is a remote url.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"url\">The path to test.</param>\r\n\t\t/// <returns><c>true</c> if it's a fully qualified name of a remote resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\tinternal static bool IsRemoteFile(string/*!*/ url)\r\n\t\t{\r\n\t\t\treturn GetScheme(url) != \"file\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges the path with the current working directory\r\n\t\t/// to get a canonicalized absolute pathname representing the same path\r\n\t\t/// (local files only). If the provided <paramref name=\"path\"/>\r\n\t\t/// is absolute (rooted local path or an URL) it is returned unchanged.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">An absolute or relative path to a directory or an URL.</param>\r\n\t\t/// <returns>Canonicalized absolute path in case of a local directory or the original \r\n\t\t/// <paramref name=\"path\"/> in case of an URL.</returns>\r\n\t\tinternal static string AbsolutePath(string path)\r\n\t\t{\r\n\t\t\t// Don't combine remote file paths with CWD.\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (IsRemoteFile(path))\r\n\t\t\t\t\treturn path;\r\n\r\n\t\t\t\t// Remove the file:// schema if any.\r\n\t\t\t\tpath = GetFilename(path);\r\n\r\n\t\t\t\t// Combine the path and simplify it.\r\n\t\t\t\tstring combinedPath = Path.Combine(PhpDirectory.GetWorking(), path);\r\n\r\n\t\t\t\t// Note: GetFullPath handles \"C:\" incorrectly\r\n\t\t\t\tif (combinedPath[combinedPath.Length - 1] == ':') combinedPath += '\\\\';\r\n\t\t\t\treturn Path.GetFullPath(combinedPath);\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice,\r\n\t\t\t\t  LibResources.GetString(\"invalid_path\", FileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region basename, dirname, pathinfo\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns path component of path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">A <see cref=\"string\"/> containing a path to a file.</param>\r\n\t\t/// <returns>The path conponent of the given <paramref name=\"path\"/>.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path.</exception>\r\n\t\t[ImplementsFunction(\"basename\")]\r\n\t\t[PureFunction]\r\n        public static string GetBase(string path)\r\n\t\t{\r\n\t\t\treturn GetBase(path, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns path component of path.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Given a <see cref=\"string\"/> containing a path to a file, this function will return the base name of the file. \r\n\t\t/// If the path ends in this will also be cut off. \r\n\t\t/// On Windows, both slash (/) and backslash (\\) are used as path separator character. \r\n\t\t/// In other environments, it is the forward slash (/). \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">A <see cref=\"string\"/> containing a path to a file.</param>\r\n\t\t/// <param name=\"suffix\">A <see cref=\"string\"/> containing suffix to be cut off the path if present.</param>\r\n\t\t/// <returns>The path conponent of the given <paramref name=\"path\"/>.</returns>\r\n        [ImplementsFunction(\"basename\")]\r\n        [PureFunction]\r\n        public static string GetBase(string path, string suffix)\r\n        {\r\n            if (String.IsNullOrEmpty(path)) return string.Empty;\r\n\r\n            int end = path.Length - 1;\r\n            while (end >= 0 && IsDirectorySeparator(path[end])) end--;\r\n\r\n            int start = end;\r\n            while (start >= 0 && !IsDirectorySeparator(path[start])) start--;\r\n            start++;\r\n\r\n            int name_length = end - start + 1;\r\n            if (!string.IsNullOrEmpty(suffix) &&\r\n                suffix.Length < name_length &&\r\n                String.Compare(path, end - suffix.Length + 1, suffix, 0, suffix.Length, StringComparison.CurrentCultureIgnoreCase) == 0)\r\n            {\r\n                name_length -= suffix.Length;\r\n            }\r\n\r\n            return path.Substring(start, name_length);\r\n        }\r\n\r\n\t\tprivate static bool IsDirectorySeparator(char c)\r\n\t\t{\r\n\t\t\treturn c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns directory name component of path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The full path.</param>\r\n\t\t/// <returns>The directory portion of the given path.</returns>\r\n\t\t[ImplementsFunction(\"dirname\")]\r\n        [PureFunction]\r\n        public static string GetDirectory(string path)\r\n\t\t{\r\n\t\t\tif (String.IsNullOrEmpty(path)) return null;\r\n\r\n\t\t\tint start = 0;\r\n\t\t\tint end = path.Length - 1;\r\n\r\n\t\t\t// advance start position beyond drive specifier:\r\n\t\t\tif (path.Length >= 2 && path[1] == ':' && (path[0] >= 'a' && path[0] <= 'z' || path[0] >= 'A' && path[0] <= 'Z'))\r\n\t\t\t{\r\n\t\t\t\tstart = 2;\r\n\t\t\t\tif (path.Length == 2)\r\n\t\t\t\t\treturn path;\r\n\t\t\t}\r\n\r\n\t\t\t// strip slashes from the end:\r\n\t\t\twhile (end >= start && IsDirectorySeparator(path[end])) end--;\r\n\t\t\tif (end < start)\r\n\t\t\t\treturn path.Substring(0, end + 1) + Path.DirectorySeparatorChar;\r\n\r\n\t\t\t// strip file name:\r\n\t\t\twhile (end >= start && !IsDirectorySeparator(path[end])) end--;\r\n\t\t\tif (end < start)\r\n\t\t\t\treturn path.Substring(0, end + 1) + '.';\r\n\r\n\t\t\t// strip slashes from the end:\r\n\t\t\twhile (end >= start && IsDirectorySeparator(path[end])) end--;\r\n\t\t\tif (end < start)\r\n\t\t\t\treturn path.Substring(0, end + 1) + Path.DirectorySeparatorChar;\r\n\r\n\t\t\treturn path.Substring(0, end + 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts parts from a specified path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path to be parsed.</param>\r\n\t\t/// <returns>Array keyed by <c>\"dirname\"</c>, <c>\"basename\"</c>, and <c>\"extension\"</c>.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"pathinfo\")]\r\n        public static object GetInfo(string path)\r\n\t\t{\r\n\t\t\treturn GetInfo(path, PathInfoOptions.All);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts part(s) from a specified path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path to be parsed.</param>\r\n\t\t/// <param name=\"options\">Flags determining the result.</param>\r\n\t\t/// <returns>\r\n\t\t/// If <paramref name=\"options\"/> is <see cref=\"PathInfoOptions.All\"/> then returns array\r\n\t\t/// keyed by <c>\"dirname\"</c>, <c>\"basename\"</c>, and <c>\"extension\"</c>. Otherwise,\r\n\t\t/// it returns string value containing a single part of the path.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"pathinfo\")]\r\n        public static object GetInfo(string path, PathInfoOptions options)\r\n\t\t{\r\n            // collect strings\r\n\t\t\tstring dirname = null, basename = null, extension = null, filename = null;\r\n\r\n\t\t\tif ((options & PathInfoOptions.BaseName) != 0 ||\r\n                (options & PathInfoOptions.Extension) != 0 ||\r\n                (options & PathInfoOptions.FileName) != 0 )\r\n\t\t\t\tbasename = GetBase(path);\r\n\r\n\t\t\tif ((options & PathInfoOptions.DirName) != 0)\r\n\t\t\t\tdirname = GetDirectory(path);\r\n\r\n\t\t\tif ((options & PathInfoOptions.Extension) != 0)\r\n\t\t\t{\r\n\t\t\t\tint last_dot = basename.LastIndexOf('.');\r\n\t\t\t\tif (last_dot >= 0)\r\n\t\t\t\t\textension = basename.Substring(last_dot + 1);\r\n\t\t\t}\r\n\r\n            if ((options & PathInfoOptions.FileName) != 0)\r\n            {\r\n                int last_dot = basename.LastIndexOf('.');\r\n                if (last_dot >= 0)\r\n                    filename = basename.Substring(0, last_dot);\r\n                else\r\n                    filename = basename;\r\n            }\r\n\r\n            // return requested value or all of them in an associative array\r\n\t\t\tif (options == PathInfoOptions.All)\r\n\t\t\t{\r\n\t\t\t\tPhpArray result = new PhpArray(0, 4);\r\n\t\t\t\tresult.Add(\"dirname\", dirname);\r\n\t\t\t\tresult.Add(\"basename\", basename);\r\n\t\t\t\tresult.Add(\"extension\", extension);\r\n                result.Add(\"filename\", filename);\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tif ((options & PathInfoOptions.DirName) != 0)\r\n\t\t\t\treturn dirname;\r\n\r\n\t\t\tif ((options & PathInfoOptions.BaseName) != 0)\r\n\t\t\t\treturn basename;\r\n\r\n\t\t\tif ((options & PathInfoOptions.Extension) != 0)\r\n\t\t\t\treturn extension;\r\n\r\n            if ((options & PathInfoOptions.FileName) != 0)\r\n                return filename;\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region tempnam, realpath, sys_get_temp_dir\r\n\r\n        /// <summary>\r\n\t\t/// Creates a file with a unique path in the specified directory. \r\n\t\t/// If the directory does not exist, <c>tempnam()</c> may generate \r\n\t\t/// a file in the system's temporary directory, and return the name of that.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dir\">The directory where the temporary file should be created.</param>\r\n\t\t/// <param name=\"prefix\">The prefix of the unique path.</param>\r\n\t\t/// <returns>A unique path for a temporary file \r\n\t\t/// in the given <paramref name=\"dir\"/>.</returns>\r\n\t\t[ImplementsFunction(\"tempnam\")]\r\n\t\tpublic static string GetTemporaryFilename(string dir, string prefix)\r\n\t\t{\r\n\t\t\t// makes \"dir\" a valid directory:\r\n\t\t\tif (string.IsNullOrEmpty(dir) || !System.IO.Directory.Exists(dir))\r\n\t\t\t\tdir = Path.GetTempPath();\r\n\r\n\t\t\t// makes \"prefix\" a valid file prefix:\r\n\t\t\tif (prefix == null || prefix.Length == 0 || prefix.IndexOfAny(Path.GetInvalidPathChars()) >= 0)\r\n\t\t\t\tprefix = \"tmp_\";\r\n\r\n\t\t\tstring path = Path.Combine(dir, prefix);\r\n\t\t\tstring result;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tresult = String.Concat(path, Interlocked.Increment(ref tempCounter), \".tmp\");\r\n\t\t\t\tif (!File.Exists(result))\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tFile.Open(result, FileMode.CreateNew).Close();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// try system temp directory:\r\n\t\t\t\t\t\tdir = Path.GetTempPath();\r\n\t\t\t\t\t\tpath = Path.Combine(dir, prefix);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (PathTooLongException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Notice, PhpException.ToErrorMessage(e.Message));\r\n\t\t\t\t\t\treturn Path.GetTempFileName();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Returns the path of the directory PHP stores temporary files in by default.\r\n        /// </summary>\r\n        /// <returns>Returns the path of the temporary directory.</returns>\r\n        /// <remarks>Path ends with \"\\\"</remarks>\r\n        [ImplementsFunction(\"sys_get_temp_dir\")]\r\n        public static string GetTempDirectoryName()\r\n        {\r\n            return Path.GetTempPath();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A counter used to generate unique filenames for <see cref=\"GetTemporaryFilename\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate static int tempCounter = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns canonicalized absolute path name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">Arbitrary path.</param>\r\n\t\t/// <returns>\r\n\t\t/// The given <paramref name=\"path\"/> combined with the current working directory or\r\n\t\t/// <B>null</B> (<B>false</B> in PHP) if the path is invalid or doesn't exists.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"realpath\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string RealPath(string path)\r\n\t\t{\r\n\t\t\tif (String.IsNullOrEmpty(path)) return null;\r\n\r\n\t\t\t// string ending slash\r\n\t\t\tif (IsDirectorySeparator(path[path.Length - 1]))\r\n\t\t\t\tpath = path.Substring(0, path.Length - 1);\r\n\r\n\t\t\tstring realpath = PhpPath.AbsolutePath(path);\r\n\t\t\tif (!File.Exists(realpath) && !System.IO.Directory.Exists(realpath))\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn realpath;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/FileSystem.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Jan Benda and Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n\tTODO:\r\n\t\t- Added support for LOCK_EX flag for file_put_contents(). (PHP 5.1.0)\r\n\t\t- Added lchown() and lchgrp() to change user/group ownership of symlinks. (PHP 5.1.3) \r\n\t\t- Fixed safe_mode check for source argument of the copy() function. (PHP 5.1.3) \r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing System.Runtime.InteropServices;\r\nusing Microsoft.Win32.SafeHandles;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enums (FileOptions, WriteContentsOptions, ...)\r\n\r\n\t/// <summary>\r\n\t/// Options used in the <c>flags</c> argument of the 'fopen' function.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum FileOpenOptions\r\n\t{\r\n\t\t/// <summary>Default option for the <c>flags</c> argument.</summary>\r\n\t\tEmpty = 0,\r\n\t\t/// <summary>Search for the file in the <c>include_path</c> too (1).</summary>\r\n\t\t[ImplementsConstant(\"FILE_USE_INCLUDE_PATH\")]\r\n\t\tUseIncludePath = 0x1\r\n\r\n\t\t// UNUSED    /// <summary>Do not create a default context if none is provided (16).</summary>\r\n\t\t// UNUSED    [ImplementsConstant(\"FILE_NO_DEFAULT_CONTEXT\")] NoDefaultContext = 0x10\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Options used in the <c>flags</c> argument of PHP Filesystem functions.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum FileOptions\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Default.\r\n\t\t/// </summary>\r\n\t\tEmpty = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Search for the file in the <c>include_path</c> too (1).\r\n\t\t/// </summary>\r\n\t\tUseIncludePath = FileOpenOptions.UseIncludePath,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Do not include the line break characters to the result in <c>file()</c> (2).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"FILE_IGNORE_NEW_LINES\")]\r\n\t\tTrimLineEndings = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Do not include empty lines to the resulting <see cref=\"PhpArray\"/> in <c>file()</c> (4).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"FILE_SKIP_EMPTY_LINES\")]\r\n\t\tSkipEmptyLines = 4\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// The options used as the <c>flag</c> argument of <see cref=\"PhpFile.WriteContents\"/>.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum WriteContentsOptions\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Empty option (default).\r\n\t\t/// </summary>\r\n\t\tEmpty = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Search for the file in the <c>include_path</c> too (1).\r\n\t\t/// </summary>\r\n\t\tUseIncludePath = FileOptions.UseIncludePath,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Append the given data at the end of the file in <c>file_put_contents</c> (8).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"FILE_APPEND\")]\r\n\t\tAppendContents = 8,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Acquire an exclusive lock on the file.\r\n\t\t/// </summary>\r\n\t\tLockExclusive = StreamLockOptions.Exclusive\r\n\t}\r\n\r\n\r\n\t/// <summary>\r\n\t/// The flags indicating which fields the <see cref=\"PhpPath.GetInfo\"/>\r\n\t/// method should fill in the result array.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum PathInfoOptions\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Fill the \"dirname\" field in results.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PATHINFO_DIRNAME\")]\r\n\t\tDirName = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fill the \"basename\" field in results.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PATHINFO_BASENAME\")]\r\n\t\tBaseName = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fill the \"extension\" field in results.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PATHINFO_EXTENSION\")]\r\n\t\tExtension = 4,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fill the \"filename\" field in results. Since PHP 5.2.0.\r\n\t\t/// </summary>\r\n        [ImplementsConstant(\"PATHINFO_FILENAME\")]\r\n\t\tFileName = 8,\r\n\r\n\t\t/// <summary>\r\n\t\t/// All the four options result in an array returned by <see cref=\"PhpPath.GetInfo\"/>.\r\n\t\t/// </summary>\r\n\t\tAll = DirName | BaseName | Extension | FileName\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Provides PHP I/O operations using the set of StreamWrappers.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static partial class PhpFile\r\n\t{\r\n        /// <summary>\r\n        /// Name of variable that is filled with response headers in case of file_get_contents and http protocol.\r\n        /// </summary>\r\n        internal const string HttpResponseHeaderName = \"http_response_header\";\r\n\r\n\t\t#region Constructors \r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers the ClassLibrary filters for the Core streams API.\r\n\t\t/// </summary>\r\n\t\tstatic PhpFile()\r\n\t\t{\r\n#if !SILVERLIGHT\r\n            RequestContext.RequestEnd += new Action(Clear);\r\n#endif\r\n\t\t\tPhpFilter.AddSystemFilter(new StringFilterFactory());\r\n\t\t\tPhpFilter.AddSystemFilter(new EncodingFilterFactory());\r\n\t\t\tPhpFilter.AddSystemFilter(new DecodingFilterFactory());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region make_absolute (Silverlight utility)\r\n#if SILVERLIGHT\r\n\r\n\t\t[ImplementsFunction(\"sl_mkabsolute\")]\r\n\t\tpublic static string MakeAbsoluteUrl(string relative)\r\n\t\t{\r\n\t\t\treturn HttpPathUtils.Combine(System.Windows.Browser.HtmlPage.Document.DocumentUri.AbsoluteUri, \"../\" + relative);\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\r\n        #region fopen, tmpfile, fclose, feof, fflush\r\n\r\n        /// <summary>\r\n\t\t/// Opens filename or URL using a registered StreamWrapper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be opened. The schema part of the URL specifies the wrapper to be used.</param>\r\n\t\t/// <param name=\"mode\">The read/write and text/binary file open mode.</param>\r\n\t\t/// <returns>The file resource or false in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"fopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Open(string path, string mode)\r\n\t\t{\r\n\t\t\treturn Open(path, mode, FileOpenOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens filename or URL using a registered StreamWrapper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be opened. The schema part of the URL specifies the wrapper to be used.</param>\r\n\t\t/// <param name=\"mode\">The read/write and text/binary file open mode.</param>\r\n\t\t/// <param name=\"flags\">If set to true, then the include path is searched for relative filenames too.</param>\r\n\t\t/// <returns>The file resource or false in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"fopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Open(string path, string mode, FileOpenOptions flags)\r\n\t\t{\r\n\t\t\treturn Open(path, mode, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens filename or URL using a registered StreamWrapper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to be opened. The schema part of the URL specifies the wrapper to be used.</param>\r\n\t\t/// <param name=\"mode\">The read/write and text/binary file open mode.</param>\r\n\t\t/// <param name=\"flags\">If set to true, then the include path is searched for relative filenames too.</param>\r\n\t\t/// <param name=\"context\">A script context to be provided to the StreamWrapper.</param>\r\n\t\t/// <returns>The file resource or false in case of failure.</returns>\r\n\t\t[ImplementsFunction(\"fopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Open(string path, string mode, FileOpenOptions flags, PhpResource context)\r\n\t\t{\r\n\t\t\tStreamContext sc = StreamContext.GetValid(context);\r\n\t\t\tif (sc == null) return null;\r\n\r\n\t\t\tif (String.IsNullOrEmpty(path))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:empty\", \"path\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (String.IsNullOrEmpty(mode))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:empty\", \"mode\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpStream.Open(path, mode, ProcessOptions(flags), sc);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prevents invalid options from the the options argument for StreamWrapper.Open().\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"flags\">Flags passed to stream opening functions.</param>\r\n\t\t/// <returns>The StreamOpenFlags combination for the given arguments.</returns>\r\n\t\tinternal static StreamOpenOptions ProcessOptions(FileOpenOptions flags)\r\n\t\t{\r\n\t\t\tStreamOpenOptions options = 0;\r\n\r\n\t\t\tif ((flags & FileOpenOptions.UseIncludePath) > 0)\r\n\t\t\t\toptions |= StreamOpenOptions.UseIncludePath;\r\n\r\n\t\t\tif (!ScriptContext.CurrentContext.ErrorReportingDisabled)\r\n\t\t\t\toptions |= StreamOpenOptions.ReportErrors;\r\n\r\n\t\t\treturn options;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a temporary file.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Creates a temporary file with an unique name in write mode, \r\n\t\t/// returning a file handle similar to the one returned by fopen(). \r\n\t\t/// The file is automatically removed when closed (using fclose()), \r\n\t\t/// or when the script ends.\r\n\t\t/// </remarks>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"tmpfile\")]\r\n\t\tpublic static PhpResource OpenTemporary()\r\n\t\t{\r\n\t\t\tstring path = PhpPath.GetTemporaryFilename(string.Empty, \"php\");\r\n\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Empty))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn wrapper.Open(ref path, \"w+b\", StreamOpenOptions.Temporary, StreamContext.Default);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Close an open file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A PhpResource passed to the PHP function.</param>\r\n\t\t/// <returns>True if successful.</returns>\r\n\t\t[ImplementsFunction(\"fclose\")]\r\n\t\tpublic static bool Close(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return false;\r\n\t\t\tif (stream.IsPersistent)\r\n\t\t\t{\r\n\t\t\t\t// Do not close persisten streams (incl. for example STDOUT).\r\n\t\t\t\tstream.Flush();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tstream.Close();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests for end-of-file on a file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A PhpResource passed to the PHP function.</param>\r\n\t\t/// <returns>True if successful.</returns>\r\n\t\t[ImplementsFunction(\"feof\")]\r\n\t\tpublic static bool Eof(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return false;\r\n\t\t\treturn stream.Eof;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes the output to a file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A PhpResource passed to the PHP function.</param>\r\n\t\t/// <returns>True if successful.</returns>\r\n\t\t[ImplementsFunction(\"fflush\")]\r\n\t\tpublic static bool Flush(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return false;\r\n\t\t\treturn stream.Flush();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region fprintf, fscanf\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes the string formatted using <c>sprintf</c> to the given stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A stream opened for writing.</param>\r\n\t\t/// <param name=\"format\">The format string. For details, see PHP manual.</param>\r\n\t\t/// <param name=\"arguments\">The arguments.\r\n\t\t/// See <A href=\"http://www.php.net/manual/en/function.sprintf.php\">PHP manual</A> for details.\r\n\t\t/// Besides, a type specifier \"%C\" is applicable. It converts an integer value to Unicode character.</param>\r\n\t\t/// <returns>Number of characters written of <c>false</c> in case of an error.</returns>\r\n\t\t[ImplementsFunction(\"fprintf\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int WriteFormatted(PhpResource handle, string format, params object[] arguments)\r\n\t\t{\r\n\t\t\tstring formatted = PhpStrings.Format(format, arguments);\r\n\t\t\tif (formatted == String.Empty) return 0;\r\n\t\t\treturn WriteInternal(handle, formatted, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses input from a file according to a format.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <param name=\"format\"></param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing the parsed values.</returns>\r\n\t\t[ImplementsFunction(\"fscanf\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray ReadLineFormat(PhpResource handle, string format)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\t\t\tstring line = stream.ReadLine(-1, null);\r\n\t\t\treturn PhpStrings.ScanFormat(line, format);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses input from a file according to a format.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <param name=\"format\"></param>\r\n\t\t/// <param name=\"arg\"></param>\r\n\t\t/// <param name=\"arguments\"></param>\r\n\t\t/// <returns>The number of assigned values.</returns>\r\n\t\t[ImplementsFunction(\"fscanf\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int ReadLineFormat(PhpResource handle, string format, PhpReference arg, params PhpReference[] arguments)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return -1;\r\n\t\t\tstring line = stream.ReadLine(-1, null);\r\n\t\t\treturn PhpStrings.ScanFormat(line, format, arg, arguments);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region fgetcsv, fputcsv, str_getcsv\r\n\r\n        private const char DefaultCsvDelimiter = ',';\r\n\t\tprivate const char DefaultCsvEnclosure = '\"';\r\n        private const char DefaultCsvEscape = '\\\\';\r\n\r\n        [ImplementsFunction(\"str_getcsv\")]\r\n        public static PhpArray ReadStrLineCsv( string input  )\r\n        {\r\n            return ReadStrLineCsv(input, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape);\r\n        }\r\n        [ImplementsFunction(\"str_getcsv\")]\r\n        public static PhpArray ReadStrLineCsv(string input, char delimiter)\r\n        {\r\n            return ReadStrLineCsv(input, delimiter, DefaultCsvEnclosure, DefaultCsvEscape);\r\n        }\r\n        [ImplementsFunction(\"str_getcsv\")]\r\n        public static PhpArray ReadStrLineCsv(string input, char delimiter, char enclosure)\r\n        {\r\n            return ReadStrLineCsv(input, delimiter, enclosure, DefaultCsvEscape);\r\n        }\r\n        [ImplementsFunction(\"str_getcsv\")]\r\n        public static PhpArray ReadStrLineCsv(string input, char delimiter, char enclosure, char escape)\r\n        {\r\n            bool firstLine = true;\r\n            return ReadLineCsv(delegate()\r\n            {\r\n                if (!firstLine)\r\n                    return null;\r\n                \r\n                firstLine = false;\r\n                return input;\r\n            },\r\n            delimiter, enclosure, escape);\r\n        }\r\n\r\n\t\t[ImplementsFunction(\"fgetcsv\")]\r\n        public static object ReadLineCsv(PhpResource handle)\r\n\t\t{\r\n\t\t\treturn ReadLineCsv(handle, 0, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"fgetcsv\")]\r\n        public static object ReadLineCsv(PhpResource handle, int length)\r\n\t\t{\r\n            return ReadLineCsv(handle, length, DefaultCsvDelimiter, DefaultCsvEnclosure, DefaultCsvEscape);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"fgetcsv\")]\r\n        public static object ReadLineCsv(PhpResource handle, int length, char delimiter)\r\n        {\r\n            return ReadLineCsv(handle, length, delimiter, DefaultCsvEnclosure, DefaultCsvEscape);\r\n        }\r\n\r\n        [ImplementsFunction(\"fgetcsv\")]\r\n        public static object ReadLineCsv(PhpResource handle, int length, char delimiter, char enclosure)\r\n        {\r\n            return ReadLineCsv(handle, length, delimiter, enclosure, DefaultCsvEscape);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"handle\"></param>\r\n        /// <param name=\"length\"></param>\r\n        /// <param name=\"delimiter\"></param>\r\n        /// <param name=\"enclosure\"></param>\r\n        /// <param name=\"escape_char\">The escape character used in the CSV string.</param>\r\n        /// <returns>Returns an indexed array containing the fields read.\r\n        /// fgetcsv() returns NULL if an invalid handle is supplied or FALSE on other errors, including end of file.</returns>\r\n\t\t[ImplementsFunction(\"fgetcsv\")]\r\n\t\tpublic static object ReadLineCsv(PhpResource handle, int length, char delimiter/*=','*/, char enclosure/*='\"'*/, char escape_char /*= '\\\\'*/ )\r\n\t\t{\r\n            // check arguments\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle, FileAccess.Read);\r\n            if (stream == null) return null;\r\n\t\t\tif (length < 0) PhpException.InvalidArgument(\"length\", LibResources.GetString(\"arg:negative\"));\r\n            if (length <= 0) length = -1;    // no length limit\r\n            if (stream.Eof) return false;\r\n\r\n            return ReadLineCsv(() => (stream.Eof ? null : stream.ReadLine(length, null)), delimiter, enclosure, escape_char);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// CSV data line reader.\r\n        /// In case of stream, it returns stream.GetLine() or null in case of EOF.\r\n        /// In case of string input, it returns string for the first time, then null.\r\n        /// ...\r\n        /// </summary>\r\n        /// <returns>Next line of CSV data or NULL in case of EOF.</returns>\r\n        private delegate string CsvLineReader();\r\n\r\n        private static PhpArray ReadLineCsv( CsvLineReader reader, char delimiter/*=','*/, char enclosure/*='\"'*/, char escape_char /*= '\\\\'*/ )\r\n        {\r\n            // collect results\r\n            PhpArray result = new PhpArray();\r\n\r\n            int i = 0;  // index of currently scanned char\r\n            string line = reader(); // currently scanned string\r\n            bool eof = false;\r\n\r\n            if (line == null)\r\n            {\r\n                result.Add(null);\r\n                return result;\r\n            }\r\n\r\n            for (; ; )\r\n            {\r\n                Debug.Assert(i - 1 < line.Length);\r\n                bool previous_field_delimited = (i == 0 || line[i - 1] == delimiter);\r\n\r\n                // skip initial whitespace:\r\n                while (i < line.Length && Char.IsWhiteSpace(line[i]) && line[i] != delimiter)\r\n                    ++i;\r\n\r\n                if (i >= line.Length)\r\n                {\r\n                    if (result.Count == 0)\r\n                        result.Add(null);\r\n                    else if (previous_field_delimited)\r\n                        result.Add(string.Empty);\r\n\r\n                    break;\r\n                }\r\n                else if (line[i] == delimiter)\r\n                {\r\n                    if (previous_field_delimited)\r\n                        result.Add(string.Empty);\r\n                    ++i;\r\n                }\r\n                else if (line[i] == enclosure)\r\n                {\r\n                    // enclosed string follows:\r\n                    int start = ++i;\r\n                    StringBuilder field_builder = new StringBuilder();\r\n\r\n                    for (; ; )\r\n                    {\r\n                        // read until enclosure character found:\r\n                        while (i < line.Length && line[i] != enclosure)\r\n                        {\r\n                            if (i + 1 < line.Length && line[i] == escape_char)\r\n                                ++i;// skip escape char\r\n\r\n                            ++i;    // skip following char\r\n                        }\r\n\r\n                        // end of line:\r\n                        if (i == line.Length)\r\n                        {\r\n                            // append including eoln:\r\n                            field_builder.Append(line, start, line.Length - start);\r\n\r\n                            // field continues on the next line:\r\n                            string nextLine = reader();\r\n                            if (nextLine == null)\r\n                            {\r\n                                eof = true;\r\n                                break;\r\n                            }\r\n\r\n                            line = nextLine;\r\n                            start = i = 0;\r\n                        }\r\n                        else\r\n                        {\r\n                            Debug.Assert(line[i] == enclosure);\r\n                            i++;\r\n\r\n                            if (i < line.Length && line[i] == enclosure)\r\n                            {\r\n                                // escaped enclosure; add previous text including enclosure:\r\n                                field_builder.Append(line, start, i - start);\r\n                                start = ++i;\r\n                            }\r\n                            else\r\n                            {\r\n                                // end of enclosure:\r\n                                field_builder.Append(line, start, i - 1 - start);\r\n                                start = i;\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (!eof)//if (!stream.Eof)\r\n                    {\r\n                        Debug.Assert(start == i && line.Length > 0);\r\n\r\n                        int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);\r\n\r\n                        field_builder.Append(line, start, end - start);\r\n                    }\r\n\r\n                    //result.Add(Core.Convert.Quote(field_builder.ToString(), context));\r\n                    //result.Add(StringUtils.EscapeStringCustom(field_builder.ToString(), charsToEscape, escape));\r\n                    result.Add(field_builder.ToString());\r\n                }\r\n                else\r\n                {\r\n                    // disclosed text:\r\n\r\n                    int start = i;\r\n                    int end = GetCsvDisclosedTextEnd(line, delimiter, ref i, escape_char);\r\n\r\n                    //result.Add( Core.Convert.Quote(line.Substring(start, end - start), context));\r\n                    //result.Add(StringUtils.EscapeStringCustom(line.Substring(start, end - start), charsToEscape, escape));\r\n                    result.Add(line.Substring(start, end - start));\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n        private static int GetCsvDisclosedTextEnd(string line, char delimiter, ref int i, char escape_char)\r\n\t\t{\r\n\t\t\t// disclosed text follows enclosed one:\r\n            while (i < line.Length && line[i] != delimiter)\r\n            {\r\n                i++;\r\n            }\r\n\r\n\t\t\t// field ended by eoln or delimiter:\r\n\t\t\tif (i == line.Length)\r\n\t\t\t{\r\n\t\t\t\t// do not add eoln to the field:\r\n                int dec = 0;\r\n                if (line[i - 1] == '\\n')\r\n                {\r\n                    dec++;\r\n                    if (i > 1 && line[i - 2] == '\\r')\r\n                        dec++;\r\n                }\r\n                return i - dec;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(line[i] == delimiter);\r\n\r\n\t\t\t\t// skip delimiter:\r\n\t\t\t\treturn i++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"fputcsv\")]\r\n\t\tpublic static int WriteLineCsv(PhpResource handle, PhpArray fields)\r\n\t\t{\r\n\t\t\treturn WriteLineCsv(handle, fields, DefaultCsvDelimiter, DefaultCsvEnclosure);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"fputcsv\")]\r\n\t\tpublic static int WriteLineCsv(PhpResource handle, PhpArray fields, char delimiter)\r\n\t\t{\r\n\t\t\treturn WriteLineCsv(handle, fields, delimiter, DefaultCsvEnclosure);\r\n\t\t}\r\n\r\n\t\t/// <remarks>\r\n\t\t/// Affected by run-time quoting (data are unqouted before written)\r\n\t\t/// (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fputcsv\")]\r\n\t\tpublic static int WriteLineCsv(PhpResource handle, PhpArray fields, char delimiter, char enclosure)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle, FileAccess.Write);\r\n\t\t\tif (stream == null || !stream.CanWrite) return -1;\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tchar[] special_chars = { delimiter, ' ', '\\\\', '\\t', '\\r', '\\n' };\r\n\t\t\tstring str_enclosure = enclosure.ToString();\r\n\t\t\tstring str_delimiter = delimiter.ToString();\r\n\r\n\t\t\tint initial_position = stream.WritePosition;\r\n\t\t\tforeach (object field in fields.Values)\r\n\t\t\t{\r\n\t\t\t\tstring str_field = Core.Convert.Unquote(Core.Convert.ObjectToString(field), context);\r\n\r\n\t\t\t\tif (stream.WritePosition > initial_position)\r\n\t\t\t\t\tstream.WriteString(str_delimiter);\r\n\r\n\t\t\t\tint special_char_index = str_field.IndexOfAny(special_chars);\r\n\t\t\t\tint enclosure_index = str_field.IndexOf(enclosure);\r\n\r\n\t\t\t\tif (special_char_index >= 0 || enclosure_index >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tstream.WriteString(str_enclosure);\r\n\r\n\t\t\t\t\tif (enclosure_index >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// escapes enclosure characters:\r\n\t\t\t\t\t\tint start = 0;\r\n\t\t\t\t\t\tfor (; ; )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// writes string starting after the last enclosure and ending by the next one:\r\n\t\t\t\t\t\t\tstream.WriteString(str_field.Substring(start, enclosure_index - start + 1));\r\n\t\t\t\t\t\t\tstream.WriteString(str_enclosure);\r\n\r\n\t\t\t\t\t\t\tstart = enclosure_index + 1;\r\n\t\t\t\t\t\t\tif (start >= str_field.Length) break;\r\n\r\n\t\t\t\t\t\t\tenclosure_index = str_field.IndexOf(enclosure, start);\r\n\t\t\t\t\t\t\tif (enclosure_index < 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// remaining substring: \r\n\t\t\t\t\t\t\t\tstream.WriteString(str_field.Substring(start));\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstream.WriteString(str_field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstream.WriteString(str_enclosure);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tstream.WriteString(str_field);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstream.WriteString(\"\\n\");\r\n\r\n\t\t\treturn (initial_position == -1) ? stream.WritePosition : stream.WritePosition - initial_position;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region fread, fgetc, fwrite, fputs, fpassthru, readfile\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file read.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A file stream opened for reading.</param>\r\n\t\t/// <param name=\"length\">Number of bytes to be read.</param>\r\n\t\t/// <returns>\r\n\t\t/// The <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>\r\n\t\t/// of the specified length depending on file access mode.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Result is affected by run-time quoting \r\n\t\t/// (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fread\")]\r\n\t\tpublic static object Read(PhpResource handle, int length)\r\n\t\t{\r\n\t\t\t// returns an object (string or PhpBytes depending on fopen mode)\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\tif (stream.IsText)\r\n\t\t\t\treturn Core.Convert.Quote(stream.ReadString(length), ScriptContext.CurrentContext);\r\n\t\t\telse\r\n\t\t\t\treturn Core.Convert.Quote(stream.ReadBytes(length), ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets character from file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A file stream opened for reading.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing one character from the \r\n\t\t/// given stream or <c>false</c> on EOF.</returns>\r\n\t\t[ImplementsFunction(\"fgetc\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadChar(PhpResource handle)\r\n\t\t{\r\n\t\t\tif (Eof(handle)) return null;\r\n\t\t\treturn Read(handle, 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file write.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for writing). </param>\r\n\t\t/// <param name=\"data\">The data to be written.</param>\r\n\t\t/// <returns>Returns the number of bytes written, or FALSE on error. </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Affected by run-time quoting (data are unqouted before written)\r\n\t\t/// (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fwrite\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Write(PhpResource handle, object data)\r\n\t\t{\r\n\t\t\treturn Write(handle, data, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file write.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for writing). </param>\r\n\t\t/// <param name=\"data\">The data to be written.</param>\r\n\t\t/// <param name=\"length\">\r\n\t\t/// If the length argument is given, writing will stop after length bytes \r\n\t\t/// have been written or the end of string is reached, whichever comes first.\r\n\t\t/// </param>\r\n\t\t/// <returns>Returns the number of bytes written, or FALSE on error. </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Affected by run-time quoting (data are unqouted before written)\r\n\t\t/// (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fwrite\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Write(PhpResource handle, object data, int length)\r\n\t\t{\r\n\t\t\tdata = Core.Convert.Unquote(data, ScriptContext.CurrentContext);\r\n\t\t\treturn WriteInternal(handle, data, length);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file write. Alias for <see cref=\"Write(PhpResource, object)\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for writing). </param>\r\n\t\t/// <param name=\"data\">The data to be written.</param>\r\n\t\t/// <returns>Returns the number of bytes written, or FALSE on error. </returns>\r\n\t\t[ImplementsFunction(\"fputs\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Write2(PhpResource handle, object data)\r\n\t\t{\r\n\t\t\treturn Write(handle, data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file write. Alias for <see cref=\"Write(PhpResource, object, int)\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for writing). </param>\r\n\t\t/// <param name=\"data\">The data to be written.</param>\r\n\t\t/// <param name=\"length\">If the length argument is given, writing will stop after length bytes \r\n\t\t/// have been written or the end of string is reached, whichever comes first. </param>\r\n\t\t/// <returns>Returns the number of bytes written, or FALSE on error. </returns>\r\n\t\t[ImplementsFunction(\"fputs\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Write2(PhpResource handle, object data, int length)\r\n\t\t{\r\n\t\t\treturn Write(handle, data, length);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binary-safe file write implementation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for writing). </param>\r\n\t\t/// <param name=\"data\">The data to be written.</param>\r\n\t\t/// <param name=\"length\">The number of characters to write or <c>-1</c> to use the whole <paramref name=\"data\"/>.</param>\r\n\t\t/// <returns>Returns the number of bytes written, or FALSE on error. </returns>\r\n\t\tinternal static int WriteInternal(PhpResource handle, object data, int length)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return -1;\r\n\r\n\t\t\tif (data == null) return 0;\r\n\r\n\t\t\t// Note: Any data type is converted using implicit conversion in AsText/AsBinary.\r\n\t\t\tif (stream.IsText)\r\n\t\t\t{\r\n\t\t\t\t// If file OpenMode is text then use string access methods.\r\n\t\t\t\tstring sub;\r\n\t\t\t\tif (length > 0) sub = PhpStream.AsText(data, length);\r\n\t\t\t\telse sub = PhpStream.AsText(data);\r\n\r\n\t\t\t\treturn stream.WriteString(sub);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// File OpenMode is binary.\r\n\t\t\t\tPhpBytes sub;\r\n\t\t\t\tif (length > 0) sub = PhpStream.AsBinary(data, length);\r\n\t\t\t\telse sub = PhpStream.AsBinary(data);\r\n\r\n\t\t\t\treturn stream.WriteBytes(sub);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Outputs all remaining data on a file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream (opened for reading). </param>\r\n\t\t/// <returns>Number of bytes written.</returns>\r\n\t\t[ImplementsFunction(\"fpassthru\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int PassThrough(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return -1;\r\n\t\t\tif (stream.IsText)\r\n\t\t\t{\r\n\t\t\t\t// Use the text output buffers.\r\n\t\t\t\tint rv = 0;\r\n\t\t\t\twhile (!stream.Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring str = stream.ReadMaximumString();\r\n\t\t\t\t\tScriptContext.CurrentContext.Output.Write(str);\r\n\t\t\t\t\trv += str.Length;\r\n\t\t\t\t}\r\n\t\t\t\treturn rv;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Write directly to the binary output buffers.\r\n\t\t\t\treturn PhpStreams.Copy(stream, InputOutputStreamWrapper.ScriptOutput);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads a file and writes it to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to open.</param>\r\n\t\t/// <returns>Returns the number of bytes read from the file. If an error occurs, <c>false</c> is returned.</returns>\r\n\t\t[ImplementsFunction(\"readfile\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int ReadFile(string path)\r\n\t\t{\r\n\t\t\treturn ReadFile(path, FileOpenOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads a file and writes it to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to open.</param>\r\n\t\t/// <param name=\"flags\">Searches for the file in the <c>include_path</c> if set to <c>true</c>.</param>\r\n\t\t/// <returns>Returns the number of bytes read from the file. If an error occurs, <c>false</c> is returned.</returns>\r\n\t\t[ImplementsFunction(\"readfile\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int ReadFile(string path, FileOpenOptions flags)\r\n\t\t{\r\n\t\t\treturn ReadFile(path, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads a file and writes it to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The file to open.</param>\r\n\t\t/// <param name=\"flags\">Searches for the file in the <c>include_path</c> if set to <c>1</c>.</param>\r\n\t\t/// <param name=\"context\">A <see cref=\"StreamContext\"/> resource with additional information for the stream.</param>\r\n\t\t/// <returns>Returns the number of bytes read from the file. If an error occurs, <c>false</c> is returned.</returns>\r\n\t\t[ImplementsFunction(\"readfile\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int ReadFile(string path, FileOpenOptions flags, PhpResource context)\r\n\t\t{\r\n            StreamContext sc = StreamContext.GetValid(context, true);\r\n\t\t\tif (sc == null) return -1;\r\n\r\n\t\t\tusing (PhpStream res = PhpStream.Open(path, \"rb\", ProcessOptions(flags), sc))\r\n\t\t\t{\r\n\t\t\t\tif (res == null) return -1;\r\n\r\n\t\t\t\t// Note: binary file access is the most efficient (no superfluous filtering\r\n\t\t\t\t// and no conversions - PassThrough will write directly to the OutputStream).\r\n\t\t\t\treturn PassThrough(res);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region fgets, fgetss\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets one line of text from file pointer including the end-of-line character. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream opened for reading.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing the line of text or <c>false</c> in case of an error.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t///   Result is affected by run-time quoting \r\n\t\t///   (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fgets\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadLine(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\t// Use the default accessor to the stream breaking at \\n, no superfluous conversion.\r\n\t\t\treturn Core.Convert.Quote(stream.ReadData(-1, true), ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets one line of text from file pointer including the end-of-line character. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"length\">Maximum length of the returned text.</param>\r\n\t\t/// <param name=\"handle\">The file stream opened for reading.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing the line of text or <c>false</c> in case of an error.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t///   Returns a string of up to <paramref name=\"length\"/><c> - 1</c> bytes read from \r\n\t\t///   the file pointed to by <paramref name=\"handle\"/>.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t///   The <paramref name=\"length\"/> parameter became optional in PHP 4.2.0, if omitted, it would\r\n\t\t///   assume 1024 as the line length. As of PHP 4.3, omitting <paramref name=\"length\"/> will keep\r\n\t\t///   reading from the stream until it reaches the end of the line. \r\n\t\t///   If the majority of the lines in the file are all larger than 8KB, \r\n\t\t///   it is more resource efficient for your script to specify the maximum line length.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t///   Result is affected by run-time quoting \r\n\t\t///   (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"fgets\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadLine(PhpResource handle, int length)\r\n\t\t{\r\n\t\t\tif (length <= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:negative\", \"Length\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\t// Use the default accessor to the stream breaking at \\n, no superfluous conversion.\r\n\t\t\treturn Core.Convert.Quote(stream.ReadData(length, true), ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a whole line from file pointer and strips HTML tags.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fgetss\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string ReadLineStripTags(PhpResource handle)\r\n\t\t{\r\n\t\t\treturn ReadLineStripTagsInternal(handle, -1, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a line from file pointer and strips HTML tags.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fgetss\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string ReadLineStripTags(PhpResource handle, int length)\r\n\t\t{\r\n\t\t\treturn ReadLineStripTags(handle, length, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets one line from file pointer and strips HTML tags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <param name=\"length\"></param>\r\n\t\t/// <param name=\"allowableTags\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"fgetss\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string ReadLineStripTags(PhpResource handle, int length, string allowableTags)\r\n\t\t{\r\n\t\t\tif (length <= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:negative\", \"Length\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn ReadLineStripTagsInternal(handle, length, allowableTags);\r\n\t\t}\r\n\r\n\t\tinternal static string ReadLineStripTagsInternal(PhpResource handle, int length, string allowableTags)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\t\t\tstring line = PhpStream.AsText(stream.ReadLine(length, null));\r\n\r\n\t\t\tif (line != null)\r\n\t\t\t{\r\n\t\t\t\tint state = stream.StripTagsState;\r\n\t\t\t\tline = PhpStrings.StripTags(line, allowableTags, ref state);\r\n\t\t\t\tstream.StripTagsState = state;\r\n\t\t\t}\r\n\t\t\treturn line;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region file, file_get_contents, file_put_contents\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"file\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray ReadArray(string path)\r\n\t\t{\r\n\t\t\treturn ReadArray(path, 0, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <param name=\"flags\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"file\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray ReadArray(string path, FileOptions flags)\r\n\t\t{\r\n\t\t\treturn ReadArray(path, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into an array.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// </remarks>\r\n\t\t/// <para>\r\n\t\t///   The input file is split at '\\n' and the separator is included in every line.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t///   Result is affected by run-time quoting \r\n\t\t///   (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </para>\r\n\t\t[ImplementsFunction(\"file\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray ReadArray(string path, FileOptions flags, PhpResource context)\r\n\t\t{\r\n            StreamContext sc = StreamContext.GetValid(context, true);\r\n\t\t\tif (sc == null) return null;\r\n\r\n\t\t\tScriptContext script_context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(path, \"rt\", ProcessOptions((FileOpenOptions)flags), sc))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return null;\r\n\r\n\t\t\t\tPhpArray rv = new PhpArray();\r\n\r\n\t\t\t\twhile (!stream.Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Note: The last line does not contain the \\n delimiter, but may be empty\r\n\t\t\t\t\tstring line = PhpStream.AsText(stream.ReadData(-1, true));\r\n\r\n                    if ((flags & FileOptions.TrimLineEndings) > 0)\r\n                    {\r\n                        int len = line.Length;\r\n                        if ((len > 0) && (line[len - 1] == '\\n'))\r\n                            line = line.Substring(0, len - 1);\r\n                    }\r\n                    if ((flags & FileOptions.SkipEmptyLines) > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (line.Length == 0) continue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trv.Add(Core.Convert.Quote(line, script_context));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn rv;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into a string.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"file_get_contents\", FunctionImplOptions.NeedsVariables)]\r\n\t\t[return: CastToFalse]\r\n        public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary<string, object> definedVariables, string path)\r\n\t\t{\r\n            return ReadContents(scriptcontext, definedVariables, path, FileOpenOptions.Empty, StreamContext.Default, -1, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into a string.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"file_get_contents\", FunctionImplOptions.NeedsVariables)]\r\n\t\t[return: CastToFalse]\r\n        public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary<string, object> definedVariables, string path, FileOpenOptions flags)\r\n\t\t{\r\n            return ReadContents(scriptcontext, definedVariables, path, flags, StreamContext.Default, -1, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into a string.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"file_get_contents\", FunctionImplOptions.NeedsVariables)]\r\n\t\t[return: CastToFalse]\r\n        public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary<string, object> definedVariables, string path, FileOpenOptions flags, PhpResource context)\r\n\t\t{\r\n            return ReadContents(scriptcontext, definedVariables, path, flags, context, -1, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into a string.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"file_get_contents\", FunctionImplOptions.NeedsVariables)]\r\n\t\t[return: CastToFalse]\r\n        public static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary<string, object> definedVariables, string path, FileOpenOptions flags, PhpResource context,\r\n\t\t  int offset)\r\n\t\t{\r\n            return ReadContents(scriptcontext, definedVariables, path, flags, context, offset, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire file into a string.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Result is affected by run-time quoting \r\n\t\t/// (<see cref=\"LocalConfiguration.VariablesSection.QuoteRuntimeVariables\"/>).\r\n\t\t/// </remarks>\r\n        [ImplementsFunction(\"file_get_contents\", FunctionImplOptions.NeedsVariables)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadContents(ScriptContext scriptcontext, System.Collections.Generic.Dictionary<string, object> definedVariables, string path, FileOpenOptions flags, PhpResource context,\r\n\t\t  int offset, int maxLength)\r\n\t\t{\r\n            StreamContext sc = StreamContext.GetValid(context, true);\r\n            if (sc == null)\r\n                return null;\r\n            \r\n\t\t\tusing (PhpStream stream = PhpStream.Open(path, \"rb\", ProcessOptions(flags), sc))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return null;\r\n\r\n                // when HTTP protocol requested, store responded headers into local variable $http_response_header:\r\n                // NOTE: (J) this should be applied by HTTP wrapper itself, not only by this function.\r\n                if (string.Compare(stream.Wrapper.Scheme, \"http\", StringComparison.OrdinalIgnoreCase) == 0)\r\n                {\r\n                    var headers = stream.WrapperSpecificData as PhpArray;\r\n                    Operators.SetVariable(scriptcontext, definedVariables, HttpResponseHeaderName, headers);                    \r\n                }\r\n\r\n                //\r\n\t\t\t\treturn Core.Convert.Quote(stream.ReadContents(maxLength, offset), ScriptContext.CurrentContext);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"file_put_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int WriteContents(string path, object data)\r\n\t\t{\r\n\t\t\treturn WriteContents(path, data, 0, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"file_put_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int WriteContents(string path, object data, WriteContentsOptions flags)\r\n\t\t{\r\n\t\t\treturn WriteContents(path, data, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"file_put_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int WriteContents(string path, object data, WriteContentsOptions flags, PhpResource context)\r\n\t\t{\r\n            StreamContext sc = StreamContext.GetValid(context, true);\r\n\t\t\tif (sc == null) return -1;\r\n\r\n\t\t\tstring mode = (flags & WriteContentsOptions.AppendContents) > 0 ? \"ab\" : \"wb\";\r\n\t\t\tusing (PhpStream to = PhpStream.Open(path, mode, ProcessOptions((FileOpenOptions)flags), sc))\r\n\t\t\t{\r\n\t\t\t\tif (to == null) return -1;\r\n\r\n\t\t\t\t// passing array is equivalent to file_put_contents($filename, join('', $array))\r\n\t\t\t\tPhpArray array = data as PhpArray;\r\n\t\t\t\tif (array != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tint total = 0;\r\n\r\n\t\t\t\t\tforeach (object o in array.Values)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint written = to.WriteBytes(Core.Convert.ObjectToPhpBytes(o));\r\n\t\t\t\t\t\tif (written == -1) return total;\r\n\t\t\t\t\t\ttotal += written;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn total;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// as of PHP 5.1.0, you may also pass a stream resource to the data parameter\r\n\t\t\t\tPhpResource resource = data as PhpResource;\r\n\t\t\t\tif (resource != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStream from = PhpStream.GetValid(resource);\r\n\t\t\t\t\tif (from == null) return -1;\r\n\r\n\t\t\t\t\treturn PhpStreams.Copy(from, to);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn to.WriteBytes(Core.Convert.ObjectToPhpBytes(data));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#region Seek (fseek, rewind, ftell, ftruncate)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Seeks on a file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">The file stream resource.</param>\r\n\t\t/// <param name=\"offset\">The number of bytes to seek.</param>\r\n\t\t/// <returns>Upon success, returns 0; otherwise, returns -1. \r\n\t\t/// Note that seeking past EOF is not considered an error.</returns>\r\n\t\t[ImplementsFunction(\"fseek\")]\r\n\t\tpublic static int Seek(PhpResource handle, int offset)\r\n\t\t{\r\n\t\t\treturn Seek(handle, offset, (int)SeekOptions.Set);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Seeks on a file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A file stream resource.</param>\r\n\t\t/// <param name=\"offset\">The number of bytes to seek.</param>\r\n\t\t/// <param name=\"whence\">The position in stream to seek from.\r\n\t\t/// May be one of the SeekOptions flags.</param>\r\n\t\t/// <returns>Upon success, returns 0; otherwise, returns -1. \r\n\t\t/// Note that seeking past EOF is not considered an error.</returns>\r\n\t\t[ImplementsFunction(\"fseek\")]\r\n\t\tpublic static int Seek(PhpResource handle, int offset, int whence)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return -1;\r\n\t\t\treturn stream.Seek(offset, (SeekOrigin)whence) ? 0 : -1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Rewind the position of a file pointer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"rewind\")]\r\n\t\tpublic static bool Rewind(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return false;\r\n\t\t\treturn stream.Seek(0, SeekOrigin.Begin);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells file pointer read/write position.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A file stream resource.</param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"ftell\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Tell(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return -1;\r\n\t\t\treturn stream.Tell();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Truncates a file to a given length.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <param name=\"size\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"ftruncate\")]\r\n\t\tpublic static bool Truncate(PhpResource handle, int size)\r\n\t\t{\r\n            PhpStream stream = PhpStream.GetValid(handle);\r\n            if (stream == null) return false;\r\n\r\n            if (stream.RawStream != null && stream.RawStream.CanWrite && stream.RawStream.CanSeek)\r\n            {\r\n                stream.RawStream.SetLength(size);\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region FileSystem Access (copy, rename, unlink, mkdir, rmdir, flock)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copies a file (even accross different stream wrappers).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If the destination file already exists, it will be overwritten. \r\n\t\t/// <para>\r\n\t\t/// Note: As of PHP 4.3.0, both source and dest may be URLs if the \r\n\t\t/// \"fopen wrappers\" have been enabled. See <c>fopen()</c> for more details. \r\n\t\t/// If dest is an URL, the copy operation may fail if the wrapper does \r\n\t\t/// not support overwriting of existing files. \r\n\t\t/// </para> \r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"source\">Source URL.</param>\r\n\t\t/// <param name=\"dest\">Destination URL.</param>\r\n\t\t/// <returns><c>true</c> on success or <c>false</c> on failure.</returns>\r\n\t\t[ImplementsFunction(\"copy\")]\r\n\t\tpublic static bool Copy(string source, string dest)\r\n\t\t{\r\n\t\t\tStreamWrapper reader, writer;\r\n\t\t\tif ((!PhpStream.ResolvePath(ref source, out reader, CheckAccessMode.FileExists, CheckAccessOptions.Empty))\r\n\t\t\t\t|| (!PhpStream.ResolvePath(ref dest, out writer, CheckAccessMode.FileExists, CheckAccessOptions.Empty)))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tif ((reader.Scheme == \"file\") && (writer.Scheme == \"file\"))\r\n\t\t\t{\r\n\t\t\t\t// Copy the file.\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tFile.Copy(source, dest, true);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (System.Exception)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Copy the two files using the appropriate stream wrappers.\r\n\t\t\t\tusing (PhpResource from = reader.Open(ref source, \"rb\", StreamOpenOptions.Empty, StreamContext.Default))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (from == null) return false;\r\n\t\t\t\t\tusing (PhpResource to = writer.Open(ref dest, \"wb\", StreamOpenOptions.Empty, StreamContext.Default))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (to == null) return false;\r\n\r\n\t\t\t\t\t\tint copied = PhpStreams.Copy(from, to);\r\n\t\t\t\t\t\treturn copied >= 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Renames a file.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Both the <paramref name=\"oldpath\"/> and the <paramref name=\"newpath\"/>\r\n\t\t/// must be handled by the same wrapper.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"oldpath\"></param>\r\n\t\t/// <param name=\"newpath\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"rename\")]\r\n\t\tpublic static bool Rename(string oldpath, string newpath)\r\n\t\t{\r\n\t\t\tStreamWrapper oldwrapper, newwrapper;\r\n\t\t\tif ((!PhpStream.ResolvePath(ref oldpath, out oldwrapper, CheckAccessMode.FileExists, CheckAccessOptions.Empty))\r\n\t\t\t\t|| (!PhpStream.ResolvePath(ref newpath, out newwrapper, CheckAccessMode.FileMayExist, CheckAccessOptions.Empty)))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tif (oldwrapper != newwrapper)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"wrappers_must_match\"));\r\n\t\t\t}\r\n\r\n\t\t\treturn oldwrapper.Rename(oldpath, newpath, StreamRenameOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deletes a file using a StreamWrapper corresponding to the given URL.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">An URL of a file to be deleted.</param>\r\n\t\t/// <returns>True in case of success.</returns>\r\n\t\t[ImplementsFunction(\"unlink\")]\r\n\t\tpublic static bool Delete(string path)\r\n\t\t{\r\n            return Delete(path, null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Deletes a file using a StreamWrapper corresponding to the given URL.\r\n        /// </summary>\r\n        /// <param name=\"path\">An URL of a file to be deleted.</param>\r\n        /// <param name=\"context\">StreamContext.</param>\r\n        /// <returns>True in case of success.</returns>\r\n        [ImplementsFunction(\"unlink\")]\r\n        public static bool Delete(string path, PhpResource context)\r\n        {\r\n            if (String.IsNullOrEmpty(path))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:empty\", \"path\"));\r\n                return false;\r\n            }\r\n\r\n            StreamContext sc = StreamContext.GetValid(context, true);\r\n            if (sc == null) // PHP warning is thrown by StreamContext.GetValid\r\n                return false;\r\n            \r\n            StreamWrapper wrapper;\r\n            if (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileExists, CheckAccessOptions.Empty))\r\n                return false;\r\n\r\n            // Clear the cache (the currently deleted file may have been cached)\r\n#if !SILVERLIGHT\r\n            ClearStatCache();\r\n#endif\r\n            return wrapper.Unlink(path, 0, sc);\r\n        }\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <param name=\"operation\"></param>\r\n\t\t/// <returns></returns>\r\n        [ImplementsFunction(\"flock\")]\r\n\t\tpublic static bool Lock(PhpResource handle, int operation)\r\n\t\t{\r\n\t\t\tint dummy = 0;\r\n\t\t\treturn Lock(handle, operation, ref dummy);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Portable advisory file locking.\r\n        /// </summary>\r\n        /// <param name=\"handle\">A file system pointer resource that is typically created using fopen().</param>\r\n        /// <param name=\"operation\">Operation is one of the following:\r\n        /// <c>LOCK_SH</c> to acquire a shared lock (reader).\r\n        /// <c>LOCK_EX</c> to acquire an exclusive lock (writer).\r\n        /// <c>LOCK_UN</c> to release a lock (shared or exclusive).\r\n        /// \r\n        /// It is also possible to add <c>LOCK_NB</c> as a bitmask to one of the above operations if you don't want flock() to block while locking. (not supported on Windows)\r\n        /// </param>\r\n        /// <param name=\"wouldblock\">The optional third argument is set to TRUE if the lock would block (EWOULDBLOCK errno condition). (not supported on Windows)</param>\r\n        /// <returns>Returns <c>true</c> on success or <c>false</c> on failure.</returns>\r\n        [ImplementsFunction(\"flock\")]\r\n        public static bool Lock(PhpResource handle, int operation, ref int wouldblock)\r\n        {\r\n            // Get the native file handle for the PHP resource\r\n            var phpStream = PhpStream.GetValid(handle);\r\n            if (phpStream == null) return false;\r\n\r\n            var fileStream = phpStream.RawStream as FileStream;\r\n            if (fileStream == null) return false;\r\n\r\n            //\r\n            if (EnvironmentUtils.IsDotNetFramework)\r\n            {\r\n                return Lock_dotNET(fileStream, (StreamLockOptions)operation);\r\n            }\r\n            else\r\n            {\r\n                PhpException.FunctionNotSupported();\r\n                return false;\r\n            }\r\n        }\r\n\r\n        #region flock (Windows)\r\n\r\n        // Constants passed to LockFileEx for the flags\r\n        private const uint LOCKFILE_FAIL_IMMEDIATELY = 0x00000001;\r\n        private const uint LOCKFILE_EXCLUSIVE_LOCK = 0x00000002;\r\n\r\n        [DllImport(\"kernel32.dll\")]\r\n        static extern bool LockFileEx(SafeFileHandle hFile, uint dwFlags, uint dwReserved, uint nNumberOfBytesToLockLow, uint nNumberOfBytesToLockHigh, [In] ref NativeOverlapped lpOverlapped);\r\n\r\n        [DllImport(\"kernel32.dll\")]\r\n        static extern bool UnlockFileEx(SafeFileHandle hFile, uint dwReserved, uint nNumberOfBytesToUnlockLow, uint nNumberOfBytesToUnlockHigh, [In] ref NativeOverlapped lpOverlapped);\r\n\r\n        private static bool Lock_dotNET(FileStream/*!*/fileStream, StreamLockOptions op)\r\n        {\r\n            Debug.Assert(fileStream != null);\r\n\r\n            var hFile = fileStream.SafeFileHandle;\r\n\r\n            // Set up some parameters\r\n            uint low = 1, high = 0;\r\n            var offset = new NativeOverlapped();\r\n            bool noBlocking = (op & StreamLockOptions.NoBlocking) != 0;\r\n\r\n            // bug for bug compatible with Unix \r\n            UnlockFileEx(hFile, 0, low, high, ref offset);\r\n\r\n            //\r\n            switch (op & ~StreamLockOptions.NoBlocking)\r\n            {\r\n                case StreamLockOptions.Exclusive:\r\n                    // Exclusive lock\r\n                    return LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK + (noBlocking ? LOCKFILE_FAIL_IMMEDIATELY : 0), 0, low, high, ref offset);\r\n\r\n                case StreamLockOptions.Shared:\r\n                    // Shared lock\r\n                    return LockFileEx(hFile, (noBlocking ? LOCKFILE_FAIL_IMMEDIATELY : 0), 0, low, high, ref offset);\r\n\r\n                case StreamLockOptions.Unlock:\r\n                    // Unlock always succeeds\r\n                    return true;\r\n            }\r\n\r\n            // Bad call\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Filter.cs",
    "content": "/*\r\n\r\n Copyright (c) 2012 Jakub Misek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing PHP.Core;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text.RegularExpressions;\r\nusing System.ComponentModel;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    #region Constants\r\n\r\n    public enum FilterInput : int\r\n    {\r\n        [ImplementsConstant(\"INPUT_POST\")]\r\n        Post = 0,\r\n        [ImplementsConstant(\"INPUT_GET\")]\r\n        Get = 1,\r\n        [ImplementsConstant(\"INPUT_COOKIE\")]\r\n        Cookie = 2,\r\n        [ImplementsConstant(\"INPUT_ENV\")]\r\n        Env = 4,\r\n        [ImplementsConstant(\"INPUT_SERVER\")]\r\n        Server = 5,\r\n        [ImplementsConstant(\"INPUT_SESSION\")]\r\n        Session = 6,\r\n        [ImplementsConstant(\"INPUT_REQUEST\")]\r\n        Request = 99\r\n    }\r\n\r\n    /// <summary>\r\n    /// Other filter ids.\r\n    /// </summary>\r\n    public enum FilterIds : int\r\n    {\r\n        /// <summary>\r\n        /// Flag used to require scalar as input\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_REQUIRE_SCALAR\")]\r\n        FILTER_REQUIRE_SCALAR = 33554432,\r\n\r\n        /// <summary>\r\n        /// Require an array as input.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_REQUIRE_ARRAY\")]\r\n        FILTER_REQUIRE_ARRAY = 16777216,\r\n\r\n        /// <summary>\r\n        /// Always returns an array.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FORCE_ARRAY\")]\r\n        FILTER_FORCE_ARRAY = 67108864,\r\n\r\n        /// <summary>\r\n        /// Use NULL instead of FALSE on failure.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_NULL_ON_FAILURE\")]\r\n        FILTER_NULL_ON_FAILURE = 134217728,\r\n\r\n        /// <summary>\r\n        /// ID of \"callback\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_CALLBACK\")]\r\n        FILTER_CALLBACK = 1024,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Validation filters.\r\n    /// </summary>\r\n    public enum FilterValidate : int\r\n    {\r\n        /// <summary>\r\n        /// ID of \"int\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_INT\")]\r\n        INT = 257,\r\n\r\n        /// <summary>\r\n        /// ID of \"boolean\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_BOOLEAN\")]\r\n        BOOLEAN = 258,\r\n\r\n        /// <summary>\r\n        /// ID of \"float\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_FLOAT\")]\r\n        FLOAT = 259,\r\n\r\n        /// <summary>\r\n        /// ID of \"validate_regexp\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_REGEXP\")]\r\n        REGEXP = 272,\r\n\r\n        /// <summary>\r\n        /// ID of \"validate_url\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_URL\")]\r\n        URL = 273,\r\n\r\n        /// <summary>\r\n        /// ID of \"validate_email\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_EMAIL\")]\r\n        EMAIL = 274,\r\n\r\n        /// <summary>\r\n        /// ID of \"validate_ip\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_VALIDATE_IP\")]\r\n        IP = 275,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Sanitize filters.\r\n    /// </summary>\r\n    public enum FilterSanitize : int\r\n    {\r\n        /// <summary>\r\n        /// ID of \"string\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_STRING\")]\r\n        STRING = 513,\r\n\r\n        /// <summary>\r\n        /// ID of \"stripped\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_STRIPPED\")]\r\n        STRIPPED = STRING,   // alias of FILTER_SANITIZE_STRING\r\n\r\n        /// <summary>\r\n        /// ID of \"encoded\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_ENCODED\")]\r\n        ENCODED = 514,\r\n\r\n        /// <summary>\r\n        /// ID of \"special_chars\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_SPECIAL_CHARS\")]\r\n        SPECIAL_CHARS = 515,\r\n\r\n        /// <summary>\r\n        /// ID of \"unsafe_raw\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_UNSAFE_RAW\")]\r\n        FILTER_UNSAFE_RAW = 516,\r\n\r\n        /// <summary>\r\n        /// ID of default (\"string\") filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_DEFAULT\")]\r\n        FILTER_DEFAULT = FILTER_UNSAFE_RAW, // alias of FILTER_UNSAFE_RAW\r\n        \r\n        /// <summary>\r\n        /// ID of \"email\" filter.\r\n        /// Remove all characters except letters, digits and !#$%&amp;'*+-/=?^_`{|}~@.[].\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_EMAIL\")]\r\n        EMAIL = 517,\r\n\r\n        /// <summary>\r\n        /// ID of \"url\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_URL\")]\r\n        URL = 518,\r\n\r\n        /// <summary>\r\n        /// ID of \"number_int\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_NUMBER_INT\")]\r\n        NUMBER_INT = 519,\r\n\r\n        /// <summary>\r\n        /// ID of \"number_float\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_NUMBER_FLOAT\")]\r\n        NUMBER_FLOAT = 520,\r\n\r\n        /// <summary>\r\n        /// ID of \"magic_quotes\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_SANITIZE_MAGIC_QUOTES\")]\r\n        MAGIC_QUOTES = 521,\r\n    }\r\n\r\n    [Flags]\r\n    public enum FilterFlag : int\r\n    {\r\n        /// <summary>\r\n        /// No flags.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_NONE\")]\r\n        NONE = 0,\r\n\r\n        /// <summary>\r\n        /// Allow octal notation (0[0-7]+) in \"int\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ALLOW_OCTAL\")]\r\n        ALLOW_OCTAL = 1,\r\n\r\n        /// <summary>\r\n        /// Allow hex notation (0x[0-9a-fA-F]+) in \"int\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ALLOW_HEX\")]\r\n        ALLOW_HEX = 2,\r\n\r\n        /// <summary>\r\n        /// Strip characters with ASCII value less than 32.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_STRIP_LOW\")]\r\n        STRIP_LOW = 4,\r\n\r\n        /// <summary>\r\n        /// Strip characters with ASCII value greater than 127.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_STRIP_HIGH\")]\r\n        STRIP_HIGH = 8,\r\n\r\n        /// <summary>\r\n        /// Encode characters with ASCII value less than 32.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ENCODE_LOW\")]\r\n        ENCODE_LOW = 16,\r\n\r\n        /// <summary>\r\n        /// Encode characters with ASCII value greater than 127.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ENCODE_HIGH\")]\r\n        ENCODE_HIGH = 32,\r\n\r\n        /// <summary>\r\n        /// Encode &amp;.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ENCODE_AMP\")]\r\n        ENCODE_AMP = 64,\r\n\r\n        /// <summary>\r\n        /// Don't encode ' and \".\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_NO_ENCODE_QUOTES\")]\r\n        NO_ENCODE_QUOTES = 128,\r\n\r\n        /// <summary>\r\n        /// ?\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_EMPTY_STRING_NULL\")]\r\n        EMPTY_STRING_NULL = 256,\r\n\r\n        /// <summary>\r\n        /// Allow fractional part in \"number_float\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ALLOW_FRACTION\")]\r\n        ALLOW_FRACTION = 4096,\r\n\r\n        /// <summary>\r\n        /// Allow thousand separator (,) in \"number_float\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ALLOW_THOUSAND\")]\r\n        ALLOW_THOUSAND = 8192,\r\n\r\n        /// <summary>\r\n        /// Allow scientific notation (e, E) in \"number_float\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_ALLOW_SCIENTIFIC\")]\r\n        ALLOW_SCIENTIFIC = 16384,\r\n\r\n        /// <summary>\r\n        /// Require path in \"validate_url\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_PATH_REQUIRED\")]\r\n        PATH_REQUIRED = 262144,\r\n\r\n        /// <summary>\r\n        /// Require query in \"validate_url\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_QUERY_REQUIRED\")]\r\n        QUERY_REQUIRED = 524288,\r\n\r\n        /// <summary>\r\n        /// Allow only IPv4 address in \"validate_ip\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_IPV4\")]\r\n        IPV4 = 1048576,\r\n\r\n        /// <summary>\r\n        /// Allow only IPv6 address in \"validate_ip\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_IPV6\")]\r\n        IPV6 = 2097152,\r\n\r\n        /// <summary>\r\n        /// Deny reserved addresses in \"validate_ip\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_NO_RES_RANGE\")]\r\n        NO_RES_RANGE = 4194304,\r\n\r\n        /// <summary>\r\n        /// Deny private addresses in \"validate_ip\" filter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"FILTER_FLAG_NO_PRIV_RANGE\")]\r\n        NO_PRIV_RANGE = 8388608\r\n    }\r\n\r\n    #endregion\r\n\r\n    [ImplementsExtension(\"filter\")]\r\n    public static class PhpFiltering\r\n    {\r\n        #region (NS) filter_input_array, filter_var_array, filter_id, filter_list\r\n        \r\n        [ImplementsFunction(\"filter_input_array\", FunctionImplOptions.NotSupported)]\r\n        public static object filter_input_array(int type)\r\n        {\r\n            return filter_input_array(type, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets external variables and optionally filters them.\r\n        /// </summary>\r\n        [ImplementsFunction(\"filter_input_array\", FunctionImplOptions.NotSupported)]\r\n        public static object filter_input_array(int type, object definition)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the filter ID belonging to a named filter.\r\n        /// </summary>\r\n        [ImplementsFunction(\"filter_id\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static int filter_id(string filtername)\r\n        {\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a list of all supported filters.\r\n        /// </summary>\r\n        [ImplementsFunction(\"filter_list\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray/*!*/filter_list()\r\n        {\r\n            return new PhpArray();\r\n        }\r\n\r\n        [ImplementsFunction(\"filter_var_array\", FunctionImplOptions.NotSupported)]\r\n        public static object filter_var_array(PhpArray data)\r\n        {\r\n            return filter_var_array(data, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets multiple variables and optionally filters them.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"filter_var_array\", FunctionImplOptions.NotSupported)]\r\n        public static object filter_var_array(PhpArray data, object definition)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region filter_input\r\n\r\n        [ImplementsFunction(\"filter_input\")]\r\n        public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name)\r\n        {\r\n            return filter_input(context, type, variable_name, (int)FilterSanitize.FILTER_DEFAULT, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"filter_input\")]\r\n        public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name, int filter)\r\n        {\r\n            return filter_input(context, type, variable_name, filter, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a specific external variable by name and optionally filters it.\r\n        /// </summary>\r\n        [ImplementsFunction(\"filter_input\")]\r\n        public static object filter_input(ScriptContext/*!*/context, FilterInput type, string variable_name, int filter /*= FILTER_DEFAULT*/ , object options)\r\n        {\r\n            var arrayobj = GetArrayByInput(context, type);\r\n            object value;\r\n            if (arrayobj == null || !arrayobj.TryGetValue(variable_name, out value))\r\n                return null;\r\n\r\n            return filter_var(value, filter, options);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region filter_var, filter_has_var\r\n\r\n        /// <summary>\r\n        /// Checks if variable of specified type exists\r\n        /// </summary>\r\n        [ImplementsFunction(\"filter_has_var\")]\r\n        public static bool filter_has_var(ScriptContext/*!*/context, FilterInput type, string variable_name)\r\n        {\r\n            var arrayobj = GetArrayByInput(context, type);\r\n            if (arrayobj != null)\r\n                return arrayobj.ContainsKey(variable_name);\r\n            else\r\n                return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns <see cref=\"PhpArray\"/> containing required input.\r\n        /// </summary>\r\n        /// <param name=\"context\">CUrrent <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"type\"><see cref=\"FilterInput\"/> value.</param>\r\n        /// <returns>An instance of <see cref=\"PhpArray\"/> or <c>null</c> if there is no such input.</returns>\r\n        private static PhpArray GetArrayByInput(ScriptContext/*!*/context, FilterInput type)\r\n        {\r\n            object arrayobj = null;\r\n\r\n            switch (type)\r\n            {\r\n                case FilterInput.Get:\r\n                    arrayobj = context.AutoGlobals.Get.Value; break;\r\n                case FilterInput.Post:\r\n                    arrayobj = context.AutoGlobals.Post.Value; break;\r\n                case FilterInput.Server:\r\n                    arrayobj = context.AutoGlobals.Server.Value; break;\r\n                case FilterInput.Request:\r\n                    arrayobj = context.AutoGlobals.Request.Value; break;\r\n                case FilterInput.Env:\r\n                    arrayobj = context.AutoGlobals.Env.Value; break;\r\n                case FilterInput.Cookie:\r\n                    arrayobj = context.AutoGlobals.Cookie.Value; break;\r\n                case FilterInput.Session:\r\n                    arrayobj = context.AutoGlobals.Session.Value; break;\r\n                default:\r\n                    return null;\r\n            }\r\n\r\n            // cast arrayobj to PhpArray if possible:\r\n            return PhpArray.AsPhpArray(arrayobj);\r\n        }\r\n\r\n        [ImplementsFunction(\"filter_var\")]\r\n        public static object filter_var(object variable)\r\n        {\r\n            return filter_var(variable, (int)FilterSanitize.FILTER_DEFAULT, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"filter_var\")]\r\n        public static object filter_var(object variable, int filter)\r\n        {\r\n            return filter_var(variable, filter, null);\r\n        }        \r\n        \r\n        /// <summary>\r\n        /// Filters a variable with a specified filter.\r\n        /// </summary>\r\n        /// <param name=\"variable\">Value to filter.</param>\r\n        /// <param name=\"filter\">The ID of the filter to apply.</param>\r\n        /// <param name=\"options\">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.</param>\r\n        /// <returns>Returns the filtered data, or <c>false</c> if the filter fails.</returns>\r\n        [ImplementsFunction(\"filter_var\")]\r\n        public static object filter_var(object variable, int filter /*= FILTER_DEFAULT*/ , object options)\r\n        {\r\n            switch (filter)\r\n            {\r\n                //\r\n                // SANITIZE\r\n                //\r\n\r\n                case (int)FilterSanitize.FILTER_DEFAULT:\r\n                    return Core.Convert.ObjectToString(variable);\r\n\r\n                case (int)FilterSanitize.EMAIL:\r\n                    // Remove all characters except letters, digits and !#$%&'*+-/=?^_`{|}~@.[].\r\n                    return FilterSanitizeString(PHP.Core.Convert.ObjectToString(variable), (c) =>\r\n                            (int)c <= 0x7f && (Char.IsLetterOrDigit(c) ||\r\n                            c == '!' || c == '#' || c == '$' || c == '%' || c == '&' || c == '\\'' ||\r\n                            c == '*' || c == '+' || c == '-' || c == '/' || c == '=' || c == '!' ||\r\n                            c == '?' || c == '^' || c == '_' || c == '`' || c == '{' || c == '|' ||\r\n                            c == '}' || c == '~' || c == '@' || c == '.' || c == '[' || c == ']'));\r\n\r\n                //\r\n                // VALIDATE\r\n                //\r\n\r\n                case (int)FilterValidate.EMAIL:\r\n                    {\r\n                        var str = PHP.Core.Convert.ObjectToString(variable);\r\n                        return RegexUtilities.IsValidEmail(str) ? str : (object)false;\r\n                    }\r\n\r\n                case (int)FilterValidate.INT:\r\n                    {\r\n                        int result;\r\n                        if (int.TryParse((PhpVariable.AsString(variable) ?? string.Empty).Trim(), out result))\r\n                        {\r\n                            if (options != null) PhpException.ArgumentValueNotSupported(\"options\", \"!null\");\r\n                            return result;  // TODO: options: min_range, max_range\r\n                        }\r\n                        else\r\n                            return false;\r\n                    }\r\n                case (int)FilterValidate.REGEXP:\r\n                    {\r\n                        PhpArray optarray;\r\n                        // options = options['options']['regexp']\r\n                        if ((optarray = PhpArray.AsPhpArray(options)) != null &&\r\n                            optarray.TryGetValue(\"options\", out options) && (optarray = PhpArray.AsPhpArray(options)) != null &&\r\n                            optarray.TryGetValue(\"regexp\", out options))\r\n                        {\r\n                            if (PerlRegExp.Match(options, variable) > 0)\r\n                                return variable;\r\n                        }\r\n                        else\r\n                            PhpException.InvalidArgument(\"options\", LibResources.GetString(\"option_missing\", \"regexp\"));\r\n                        return false;\r\n                    }\r\n\r\n                default:\r\n                    PhpException.ArgumentValueNotSupported(\"filter\", filter);\r\n                    break;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper filter methods\r\n\r\n        private static class RegexUtilities\r\n        {\r\n            private static readonly Regex ValidEmailRegex = new Regex(\r\n                    @\"^(?(\"\")(\"\"[^\"\"]+?\"\"@)|(([0-9a-z]((\\.(?!\\.))|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*)(?<=[0-9a-z])@))\" +\r\n                    @\"(?(\\[)(\\[(\\d{1,3}\\.){3}\\d{1,3}\\])|(([0-9a-z][-\\w]*[0-9a-z]*\\.)+[a-z0-9]{2,17}))$\",\r\n                    RegexOptions.IgnoreCase | RegexOptions.Compiled);\r\n\r\n            public static bool IsValidEmail(string strIn)\r\n            {\r\n                if (String.IsNullOrEmpty(strIn) || strIn.Length > 320)\r\n                    return false;\r\n\r\n                // Use IdnMapping class to convert Unicode domain names.\r\n                try\r\n                {\r\n                    strIn = Regex.Replace(strIn, @\"(@)(.+)$\", DomainMapper);\r\n                }\r\n                catch (ArgumentException)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                // Return true if strIn is in valid e-mail format.\r\n                return ValidEmailRegex.IsMatch(strIn);\r\n            }\r\n\r\n            private static string DomainMapper(Match match)\r\n            {\r\n                // IdnMapping class with default property values.\r\n                var idn = new System.Globalization.IdnMapping();\r\n\r\n                string domainName = match.Groups[2].Value;\r\n                //try\r\n                //{\r\n                    domainName = idn.GetAscii(domainName);\r\n                //}\r\n                //catch (ArgumentException)\r\n                //{\r\n                //    invalid = true;\r\n                //}\r\n\r\n                return match.Groups[1].Value + domainName;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Remove all characters not valid by given <paramref name=\"predicate\"/>.\r\n        /// </summary>\r\n        private static string FilterSanitizeString(string str, Predicate<char>/*!*/predicate)\r\n        {\r\n            Debug.Assert(predicate != null);\r\n\r\n            // nothing to sanitize:\r\n            if (string.IsNullOrEmpty(str)) return string.Empty;\r\n\r\n            // check if all the characters are valid first:\r\n            bool allvalid = true;\r\n            foreach (var c in str)\r\n                if (!predicate(c))\r\n                {\r\n                    allvalid = false;\r\n                    break;\r\n                }\r\n\r\n            if (allvalid)\r\n            {\r\n                return str;\r\n            }\r\n            else\r\n            {\r\n                // remove not allowed characters:\r\n                StringBuilder newstr = new StringBuilder(str.Length);\r\n\r\n                foreach (char c in str)\r\n                    if (predicate(c))\r\n                        newstr.Append(c);\r\n\r\n                return newstr.ToString();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Functions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Provides means for PHP functions handling.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpFunctions\r\n\t{\r\n\t\t#region call_user_func, call_user_func_array, create_function\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls a function or a method defined by callback with given arguments.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"function\">The function or metod designation.</param>\r\n\t\t/// <param name=\"args\">The arguments.</param>\r\n\t\t/// <returns>The return value.</returns>\r\n\t\t[ImplementsFunction(\"call_user_func\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static object CallUserFunction(DTypeDesc caller, PhpCallback function, params object[] args)\r\n\t\t{\r\n\t\t\tif (function == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"function\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif (function.IsInvalid) return null;\r\n\r\n\t\t\t// invoke the callback:\r\n\t\t\treturn PhpVariable.Dereference(function.Invoke(caller, args));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls a function or a method defined by callback with arguments stored in an array.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"function\">The function or method designation.</param>\r\n\t\t/// <param name=\"args\">The arguments. Can be null.</param>\r\n\t\t/// <returns>The returned value.</returns>\r\n        [ImplementsFunction(\"call_user_func_array\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object CallUserFunctionArray(DTypeDesc caller, PhpCallback function, PhpArray args)\r\n\t\t{\r\n\t\t\tobject[] args_array;\r\n\r\n            if (args != null)\r\n            {\r\n                args_array = new object[args.Count];\r\n                args.CopyValuesTo(args_array, 0);\r\n            }\r\n            else\r\n            {\r\n                args_array = ArrayUtils.EmptyObjects;\r\n            }\r\n\r\n\t\t\treturn CallUserFunction(caller, function, args_array);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new lambda function given its arguments and body.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">A source code defining function signature, e.g. \"$a,MyClass $b,$c = null\".</param>\r\n\t\t/// <param name=\"body\">A source code defining function body, e.g. \"return $a + $b->x + $c;\"</param>\r\n\t\t/// <returns>A name of the created function.</returns>\r\n\t\t[ImplementsFunction(\"create_function\", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)]\r\n        [PureFunction(typeof(PhpFunctions), \"CreateFunction_Analyze\")]\r\n\t\tpublic static string CreateFunction(string args, string body)\r\n\t\t{\r\n\t\t\tvar context = ScriptContext.CurrentContext;\r\n            return DynamicCode.CreateLambdaFunction(args, body, context, context.GetCapturedSourceCodeDescriptor());\r\n        }\r\n\r\n        #region analyzer of create_function\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo CreateFunction_Analyze(\r\n            Analyzer analyzer,\r\n            PHP.Core.AST.CallSignature callSignature,\r\n            string args, string body)\r\n        {\r\n            if (analyzer.IsInsideIncompleteClass())\r\n                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.\r\n\r\n            // has to be a valid identifier:\r\n            // actually this name is never used then\r\n            string function_name = \"__\" + Guid.NewGuid().ToString().Replace('-', '_'); //DynamicCode.GenerateLambdaName(args, body);\r\n\r\n            string prefix1, prefix2;\r\n            DynamicCode.GetLamdaFunctionCodePrefixes(function_name, args, out prefix1, out prefix2);\r\n\r\n            var pos_args = new PHP.Core.Text.TextSpan(analyzer.SourceUnit.LineBreaks, callSignature.Parameters[0].Span);\r\n            var pos_body = new PHP.Core.Text.TextSpan(analyzer.SourceUnit.LineBreaks, callSignature.Parameters[1].Span);\r\n\r\n            // function __XXXXXX(<args>){<fill><body>}\r\n            string fill = GetInlinedLambdaCodeFill(pos_args, pos_body);\r\n            string code = String.Concat(prefix2, fill, body, \"}\");\r\n\r\n            // parses function source code:\r\n            \r\n            // the position of the first character of the parsed code:\r\n            // (note that escaped characters distort position a little bit, which cannot be eliminated so easily)\r\n            var counter = new PHP.Core.Parsers.Parser.ReductionsCounter();\r\n            var ast = analyzer.BuildAst(pos_args.Start.Position - prefix1.Length + 1, code, counter);\r\n            if (ast == null || ast.Statements == null)\r\n                return null;   // the function cannot be parsed\r\n\r\n            Debug.Assert(counter.FunctionCount == 1);\r\n\r\n            var decl_node = (PHP.Core.AST.FunctionDecl)ast.Statements[0];\r\n\r\n            // adds declaration to the end of the global code statement list:\r\n            analyzer.AddLambdaFcnDeclaration(decl_node);\r\n\r\n            //\r\n            return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n            {\r\n                //.inlined = InlinedFunction.CreateFunction;\r\n                emitDeclareLamdaFunction = true,\r\n\r\n                // modify declaration:\r\n                newRoutine = Core.Compiler.AST.FunctionDeclCompilerHelper.ConvertToLambda(decl_node, analyzer),\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a string which is used as a fill in the code to be parsed in order to maintain\r\n        /// correct token positioning.\r\n        /// </summary>\r\n        /// <param name=\"args\">A position of string literal holding source code for lambda function arguments.</param>\r\n        /// <param name=\"body\">A position of string literal holding source code for the body.</param>\r\n        /// <returns>A string containing spaces and end-of-line characters '\\n'.</returns>\r\n        private static string GetInlinedLambdaCodeFill(PHP.Core.Text.TextSpan args, PHP.Core.Text.TextSpan body)\r\n        {\r\n            int delta_lines = body.FirstLine - args.LastLine;\r\n\r\n            if (delta_lines == 0)\r\n            {\r\n                // ....args.......'_____,_______________'.......body.....\r\n                // ...............)_________fill________{................\r\n                return new String(' ', body.FirstColumn - args.LastColumn - 1);\r\n            }\r\n            else\r\n            {\r\n                // source:\r\n                // .....args.....'_____\\r\\n\r\n                // _________,_____\\r\\n\r\n                // ____________'......body..... \r\n\r\n                // code to parse:\r\n                // .....args....'\\n\r\n                // \\n\r\n                // ____fill____{.....body......\r\n\r\n                // the same number of lines as it is in the source file + leading columns:\r\n                return new System.Text.StringBuilder(delta_lines + body.FirstColumn).\r\n                  Append('\\n', delta_lines).Append(' ', body.FirstColumn).ToString();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region assert, assert_options\r\n\r\n        /// <summary>\r\n        /// Assertion options.\r\n        /// </summary>\r\n        public enum AssertOption : int\r\n        {\r\n            [ImplementsConstant(\"ASSERT_ACTIVE\")]\r\n            ASSERT_ACTIVE,\r\n            [ImplementsConstant(\"ASSERT_WARNING\")]\r\n            ASSERT_WARNING,\r\n            [ImplementsConstant(\"ASSERT_BAIL\")]\r\n            ASSERT_BAIL,\r\n            [ImplementsConstant(\"ASSERT_QUIET_EVAL\")]\r\n            ASSERT_QUIET_EVAL,\r\n            [ImplementsConstant(\"ASSERT_CALLBACK\")]\r\n            ASSERT_CALLBACK,\r\n        }\r\n\r\n        [ImplementsFunction(\"assert\", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)]\r\n        public static bool Assert(object assertion)\r\n        {\r\n            return Assert(assertion, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"assert\", FunctionImplOptions.CaptureEvalInfo /*| FunctionImplOptions.Special*/)]\r\n        public static bool Assert(object assertion, string description)\r\n        {\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            var descriptor = context.GetCapturedSourceCodeDescriptor();\r\n            return DynamicCode.CheckAssertion(assertion, null, context, descriptor.ContainingSourcePath, descriptor.Line, descriptor.Column, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"assert_options\", FunctionImplOptions.NotSupported)]\r\n        public static object AssertOptions(int what, object value)\r\n        {\r\n            return value;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region func_num_args, func_get_arg, func_get_args\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves the number of arguments passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"PhpStack.GetArgCount\"/></remarks>\r\n\t\t[ImplementsFunction(\"func_num_args\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\tpublic static int GetArgsNumber()\r\n\t\t{\r\n\t\t\tint arg_count, type_arg_count;\r\n\t\t\treturn ScriptContext.CurrentContext.Stack.GetArgCount(out arg_count, out type_arg_count) ? arg_count : -1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an argument passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"PhpStack.GetArgument\"/></remarks>\r\n\t\t[ImplementsFunction(\"func_get_arg\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static object GetArg(int index)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.Stack.GetArgument(index);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of arguments of the current user-defined function. \r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"PhpStack.GetArguments\"/>\r\n        /// Also throws warning if called from global scope.</remarks>\r\n\t\t[ImplementsFunction(\"func_get_args\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\t[return: PhpDeepCopy]\r\n        [return: CastToFalse]\r\n\t\tpublic static PhpArray GetArgs()\r\n\t\t{\r\n\t\t\tPhpArray result = ScriptContext.CurrentContext.Stack.GetArguments();\r\n            if (result != null)\r\n            {\r\n                result.InplaceCopyOnReturn = true;\r\n            }\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region func_num_generic_args, func_get_generic_arg, func_get_generic_args (PHP/CLR)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the number of generic type arguments passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"func_num_generic_args\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\tpublic static int GetGenericArgsNumber()\r\n\t\t{\r\n\t\t\tint arg_count, type_arg_count;\r\n\t\t\treturn ScriptContext.CurrentContext.Stack.GetArgCount(out arg_count, out type_arg_count) ? type_arg_count : -1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a fully qualified name of the generic type argument passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"func_get_generic_arg\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static string GetGenericArg(int index)\r\n\t\t{\r\n\t\t\tDTypeDesc type_desc = ScriptContext.CurrentContext.Stack.GetTypeArgument(index);\r\n\t\t\treturn (type_desc != null) ? type_desc.MakeFullName() : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of names of generic type arguments of the current user-defined function. \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"func_get_generic_args\", FunctionImplOptions.NeedsFunctionArguments)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\tpublic static PhpArray GetGenericArgs()\r\n\t\t{\r\n\t\t\tDTypeDesc[] type_descs = ScriptContext.CurrentContext.Stack.GetTypeArguments();\r\n\t\t\tif (type_descs == null) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray(type_descs.Length, 0);\r\n\r\n\t\t\tforeach (DTypeDesc type_desc in type_descs)\r\n\t\t\t\tresult.Add(type_desc.MakeFullName());\r\n\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region function_exists, get_defined_functions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a function with a specified name exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the function.</param>\r\n\t\t/// <returns>Wheter the function exists.</returns>\r\n\t\t/// <remarks>User functions which are declared conditionally and was not declared yet is considered as not existent.</remarks>\r\n\t\t[ImplementsFunction(\"function_exists\"/*, FunctionImplOptions.Special*/)]\r\n        [PureFunction(typeof(PhpFunctions), \"Exists_Analyze\")]\r\n        public static bool Exists(string name)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.ResolveFunction(name, null, true) != null;\r\n        }\r\n\r\n        #region analyzer of function_exists\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo Exists_Analyze(Analyzer analyzer, string name)\r\n        {\r\n            QualifiedName? alias;\r\n\r\n            DRoutine routine = analyzer.SourceUnit.ResolveFunctionName(\r\n                new QualifiedName(new Name(name)),\r\n                analyzer.CurrentScope,\r\n                out alias,\r\n                null,\r\n                Core.Text.Span.Invalid,\r\n                false);\r\n\r\n            if (routine == null || routine.IsUnknown)\r\n                return null;  // function is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc).\r\n\r\n            return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n            {\r\n                value = true    // function is definitely known the the compilation time\r\n            };\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves defined functions.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// The <see cref=\"PhpArray\"/> containing two entries with keys \"internal\" and \"user\".\r\n\t\t/// The former's value is a <see cref=\"PhpArray\"/> containing PHP library functions as values.\r\n\t\t/// The latter's value is a <see cref=\"PhpArray\"/> containing user defined functions as values.\r\n\t\t/// Keys of both these arrays are integers starting from 0.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>User functions which are declared conditionally and was not declared yet is considered as not existent.</remarks>\r\n\t\t[ImplementsFunction(\"get_defined_functions\")]\r\n\t\tpublic static PhpArray GetDefinedFunctions()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(0, 2);\r\n\t\t\tPhpArray library = new PhpArray(0, 500);\r\n\t\t\tPhpArray user = new PhpArray();\r\n\r\n\t\t\tScriptContext.CurrentContext.GetDeclaredFunctions(user, library);\r\n\r\n\t\t\tresult[\"internal\"] = library;\r\n\t\t\tresult[\"user\"] = user;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region register_shutdown_function\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers callback which will be called when script processing is complete but before the request\r\n\t\t/// has been complete.\r\n        /// Function has no return value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"function\">The function which is called after main code of the script is finishes execution.</param>\r\n\t\t/// <param name=\"parameters\">Parameters for the function.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Although, there is explicitly written in the PHP manual that it is not possible \r\n\t\t/// to send an output to a browser via echo or another output handling functions you can actually do so.\r\n\t\t/// There is no such limitation with Phalanger.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"register_shutdown_function\")]\r\n\t\tpublic static void RegisterShutdownFunction(PhpCallback/*!*/ function, params object[] parameters)\r\n\t\t{\r\n\t\t\tif (function == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"function\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tScriptContext.CurrentContext.RegisterShutdownCallback(function, parameters);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: register_tick_function, unregister_tick_function\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"register_tick_function\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static void RegisterTickFunction(PhpCallback function)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"register_tick_function\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static void RegisterTickFunction(PhpCallback function, object arg)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"unregister_tick_function\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static void UnregisterTickFunction(PhpCallback function)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generated/StrToTimeScanner.cs",
    "content": "namespace PHP.Library.StrToTime\r\n{\r\n\t#region User Code\r\n\t\r\n\tusing System;\nusing System.Collections.Generic;\n/*\n Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans <derick@derickrethans.nl>. \n The use and distribution terms for this software are contained in the file named License.txt, \n which can be found in the root of the Phalanger distribution. By using this software \n in any fashion, you are agreeing to be bound by the terms of this license.\n You must not remove this notice from this software.\n*/\n#endregion\r\n\t\r\n\t\r\n\tinternal class Scanner\r\n\t{\r\n\t\tpublic enum LexicalStates\r\n\t\t{\r\n\t\t\tYYINITIAL = 0,\r\n\t\t}\r\n\t\t\r\n\t\t[Flags]\r\n\t\tprivate enum AcceptConditions : byte\r\n\t\t{\r\n\t\t\tNotAccept = 0,\r\n\t\t\tAcceptOnStart = 1,\r\n\t\t\tAcceptOnEnd = 2,\r\n\t\t\tAccept = 4\r\n\t\t}\r\n\t\t\r\n\t\tprivate const int NoState = -1;\r\n\t\tprivate const char BOL = (char)128;\r\n\t\tprivate const char EOF = (char)129;\r\n\t\t\r\n\t\tprivate Tokens yyreturn;\r\n\t\tinternal DateInfo Time { get { return time; } }\r\n\t\tprivate DateInfo time = new DateInfo();\r\n\t\tinternal int Errors { get { return errors; } } \r\n\t\tprivate int errors = 0;\r\n\t\tinternal int Position { get { return pos; } }\r\n\t\tprivate int pos = 0;\r\n\t\tprivate string str;\r\n\t\tvoid INIT()\r\n\t\t{\r\n\t\t\tstr = new string(buffer, token_start, token_end - token_start);\r\n\t\t\tpos = 0;\r\n\t\t}\r\n\t\tvoid DEINIT()\r\n\t\t{\r\n\t\t}\r\n\t\t\r\n\t\tprivate System.IO.TextReader reader;\r\n\t\tprivate char[] buffer = new char[512];\r\n\t\t\r\n\t\t// whether the currently parsed token is being expanded (yymore has been called):\r\n\t\tprivate bool expanding_token;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token starts:\r\n\t\tprivate int token_start;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token chunk starts:\r\n\t\tprivate int token_chunk_start;\r\n\t\t\r\n\t\t// offset in buffer one char behind the currently parsed token (chunk) ending character:\r\n\t\tprivate int token_end;\r\n\t\t\r\n\t\t// offset of the lookahead character (number of characters parsed):\r\n\t\tprivate int lookahead_index;\r\n\t\t\r\n\t\t// number of characters read into the buffer:\r\n\t\tprivate int chars_read;\r\n\t\t\r\n\t\tprivate bool yy_at_bol = false;\r\n\t\t\r\n\t\tpublic LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } \r\n\t\tprivate LexicalStates current_lexical_state;\r\n\t\t\r\n\t\tpublic Scanner(System.IO.TextReader reader)\r\n\t\t{\r\n\t\t\tInitialize(reader, LexicalStates.YYINITIAL);\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol)\r\n\t\t{\r\n\t\t\tthis.expanding_token = false;\r\n\t\t\tthis.token_start = 0;\r\n\t\t\tthis.chars_read = 0;\r\n\t\t\tthis.lookahead_index = 0;\r\n\t\t\tthis.token_chunk_start = 0;\r\n\t\t\tthis.token_end = 0;\r\n\t\t\tthis.reader = reader;\r\n\t\t\tthis.yy_at_bol = atBol;\r\n\t\t\tthis.current_lexical_state = lexicalState;\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState)\r\n\t\t{\r\n\t\t\tInitialize(reader, lexicalState, false);\r\n\t\t}\r\n\t\t\r\n\t\t#region Accept\r\n\t\t\r\n\t\t#pragma warning disable 162\r\n\t\t\r\n\t\t\r\n\t\tTokens Accept0(int state,out bool accepted)\r\n\t\t{\r\n\t\t\taccepted = true;\r\n\t\t\t\r\n\t\t\tswitch(state)\r\n\t\t\t{\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\t// #line 698\r\n\t\t\t\t\t{\r\n\t\t\t\t\t  break;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\t// #line 702\r\n\t\t\t\t\t{\r\n\t\t\t\t\t  return Tokens.ERROR;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\t// #line 644\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.TIMEZONE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\t// #line 435\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tDateInfo.SkipDaySuffix(str, ref pos);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_TEXT;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\t// #line 198\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\ttime.UNHAVE_DATE();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\tint i = DateInfo.ParseSignedInt(str, ref pos, 24);\r\n\t\t\t\t\t\ttime.y = 1970;\r\n\t\t\t\t\t\ttime.m = 1;\r\n\t\t\t\t\t\ttime.d = 1;\r\n\t\t\t\t\t\ttime.h = time.i = time.s = 0;\r\n\t\t\t\t\t\ttime.f = 0.0;\r\n\t\t\t\t\t\ttime.relative.s += i;\r\n\t\t\t\t\t\ttime.z = 0;\r\n\t\t\t\t\t\ttime.HAVE_TZ();\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 6:\r\n\t\t\t\t\t// #line 421\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_TEXT;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 7:\r\n\t\t\t\t\t// #line 243\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\tif (pos < str.Length && str[pos] == '.') \r\n\t\t\t\t\t\t\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 8);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (pos < str.Length) \r\n\t\t\t\t\t\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.TIME24_WITH_ZONE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 8:\r\n\t\t\t\t\t// #line 306\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length && str[pos] == '/') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.AMERICAN;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 9:\r\n\t\t\t\t\t// #line 336\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tDateInfo.SkipDaySuffix(str, ref pos);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_FULL;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\t// #line 219\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t  time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t  if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t\t\t\t\t\t  {\r\n\t\t\t\t\t\t\t  time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\t}  \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!time.SetMeridian(str, ref pos))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Tokens.ERROR; \r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.TIME12;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 11:\r\n\t\t\t\t\t// #line 597\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.relative.y = -time.relative.y;\r\n\t\t\t\t\t\ttime.relative.m = -time.relative.m;\r\n\t\t\t\t\t\ttime.relative.d = -time.relative.d;\r\n\t\t\t\t\t\ttime.relative.h = -time.relative.h;\r\n\t\t\t\t\t\ttime.relative.i = -time.relative.i;\r\n\t\t\t\t\t\ttime.relative.s = -time.relative.s;\r\n\t\t\t\t\t\ttime.relative.weekday = -time.relative.weekday;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.AGO;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 12:\r\n\t\t\t\t\t// #line 630\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\ttime.HAVE_WEEKDAY_RELATIVE();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\ttime.SetWeekDay(DateInfo.ReadToSpace(str,ref pos));\r\n\t\t\t\t\t  time.relative.weekday_behavior = 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.WEEKDAY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 13:\r\n\t\t\t\t\t// #line 163\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 14:\r\n\t\t\t\t\t// #line 266\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tswitch (time.have_time) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\t\ttime.s = 0;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\t\t\treturn Tokens.ERROR;\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t\ttime.have_time++;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.GNU_NOCOLON;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 15:\r\n\t\t\t\t\t// #line 588\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.CLF;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 16:\r\n\t\t\t\t\t// #line 682\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\twhile(pos < str.Length) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint amount = DateInfo.ParseSignedInt(str, ref pos, 24);\r\n\t\t\t\t\t\t\twhile (pos < str.Length && str[pos] == ' ') pos++;\r\n\t\t\t\t\t\t\ttime.SetRelative(DateInfo.ReadToSpace(str, ref pos), amount, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 17:\r\n\t\t\t\t\t// #line 170\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\ttime.h = 12;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 18:\r\n\t\t\t\t\t// #line 351\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.ISO_DATE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 19:\r\n\t\t\t\t\t// #line 406\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.d = 1;\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_NO_DAY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 20:\r\n\t\t\t\t\t// #line 392\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.d = 1;\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_NO_DAY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 21:\r\n\t\t\t\t\t// #line 653\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length && str[pos] == ':') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\tif (pos < str.Length && str[pos] == '.') \r\n\t\t\t\t\t\t\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 8);\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t\tif (pos < str.Length) \r\n\t\t\t\t\t\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.SHORTDATE_WITH_TIME;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 22:\r\n\t\t\t\t\t// #line 180\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 23:\r\n\t\t\t\t\t// #line 378\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_FULL_POINTED;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 24:\r\n\t\t\t\t\t// #line 290\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length) \r\n\t\t\t\t\t\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.ISO_NOCOLON;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 25:\r\n\t\t\t\t\t// #line 486\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 3);\r\n\t\t\t\t\t\ttime.m = 1;\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.PG_YEARDAY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 26:\r\n\t\t\t\t\t// #line 519\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint w, d;\r\n\t\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\t\tw = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\t\td = 1;\r\n\t\t\t\t\t\t\ttime.m = 1;\r\n\t\t\t\t\t\t\ttime.d = 1;\r\n\t\t\t\t\t\t\ttime.relative.d = DateInfo.WeekToDay(time.y, w, d);\r\n\t\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\t\treturn Tokens.ISO_WEEK;\r\n\t\t\t\t\t\t}\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 27:\r\n\t\t\t\t\t// #line 612\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\twhile (pos < str.Length) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t  int behavior;\r\n\t\t\t\t\t\t\tint amount = DateInfo.ParseRelativeText(str, ref pos, out behavior);\r\n\t\t\t\t\t\t\twhile (pos < str.Length && str[pos] == ' ') pos++;\r\n\t\t\t\t\t\t\ttime.SetRelative(DateInfo.ReadToSpace(str,ref pos), amount, behavior);\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 28:\r\n\t\t\t\t\t// #line 365\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_FULL_POINTED;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 29:\r\n\t\t\t\t\t// #line 448\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.DATE_NOCOLON;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 30:\r\n\t\t\t\t\t// #line 500\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint week, day;\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\tweek = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tday = DateInfo.ParseUnsignedInt(str, ref pos, 1);\r\n\t\t\t\t\t\ttime.m = 1;\r\n\t\t\t\t\t\ttime.d = 1;\r\n\t\t\t\t\t\ttime.relative.d = DateInfo.WeekToDay(time.y, week, day);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.ISO_WEEK;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 31:\r\n\t\t\t\t\t// #line 540\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.PG_TEXT;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 32:\r\n\t\t\t\t\t// #line 188\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\ttime.relative.d = 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 33:\r\n\t\t\t\t\t// #line 554\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.PG_TEXT;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 34:\r\n\t\t\t\t\t// #line 153\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\ttime.HAVE_RELATIVE();\r\n\t\t\t\t\t\ttime.UNHAVE_TIME();\r\n\t\t\t\t\t\ttime.relative.d = -1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.RELATIVE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 35:\r\n\t\t\t\t\t// #line 323\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.ISO_DATE;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 36:\r\n\t\t\t\t\t// #line 461\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\tif (pos < str.Length && str[pos] == '.') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 9);\r\n\t\t\t\t\t\t\tif (pos < str.Length)\r\n\t\t\t\t\t\t\t  errors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.XMLRPC_SOAP;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 37:\r\n\t\t\t\t\t// #line 568\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tINIT();\r\n\t\t\t\t\t\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\t\t\t\t\t\ttime.HAVE_TIME();\r\n\t\t\t\t\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\t\t\t\t\ttime.HAVE_DATE();\r\n\t\t\t\t\t\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\t\t\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\t\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\t\t\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\t\t\t\t\tDEINIT();\r\n\t\t\t\t\t\treturn Tokens.CLF;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 39: goto case 1;\r\n\t\t\t\tcase 40: goto case 2;\r\n\t\t\t\tcase 41: goto case 3;\r\n\t\t\t\tcase 42: goto case 4;\r\n\t\t\t\tcase 43: goto case 6;\r\n\t\t\t\tcase 44: goto case 7;\r\n\t\t\t\tcase 45: goto case 8;\r\n\t\t\t\tcase 46: goto case 9;\r\n\t\t\t\tcase 47: goto case 10;\r\n\t\t\t\tcase 48: goto case 12;\r\n\t\t\t\tcase 49: goto case 16;\r\n\t\t\t\tcase 50: goto case 18;\r\n\t\t\t\tcase 51: goto case 19;\r\n\t\t\t\tcase 52: goto case 20;\r\n\t\t\t\tcase 53: goto case 21;\r\n\t\t\t\tcase 54: goto case 24;\r\n\t\t\t\tcase 55: goto case 25;\r\n\t\t\t\tcase 56: goto case 27;\r\n\t\t\t\tcase 57: goto case 31;\r\n\t\t\t\tcase 58: goto case 35;\r\n\t\t\t\tcase 59: goto case 36;\r\n\t\t\t\tcase 60: goto case 37;\r\n\t\t\t\tcase 62: goto case 2;\r\n\t\t\t\tcase 63: goto case 3;\r\n\t\t\t\tcase 64: goto case 4;\r\n\t\t\t\tcase 65: goto case 6;\r\n\t\t\t\tcase 66: goto case 7;\r\n\t\t\t\tcase 67: goto case 8;\r\n\t\t\t\tcase 68: goto case 10;\r\n\t\t\t\tcase 69: goto case 16;\r\n\t\t\t\tcase 70: goto case 18;\r\n\t\t\t\tcase 71: goto case 19;\r\n\t\t\t\tcase 72: goto case 21;\r\n\t\t\t\tcase 73: goto case 24;\r\n\t\t\t\tcase 74: goto case 25;\r\n\t\t\t\tcase 75: goto case 27;\r\n\t\t\t\tcase 76: goto case 35;\r\n\t\t\t\tcase 77: goto case 36;\r\n\t\t\t\tcase 78: goto case 37;\r\n\t\t\t\tcase 80: goto case 2;\r\n\t\t\t\tcase 81: goto case 3;\r\n\t\t\t\tcase 82: goto case 4;\r\n\t\t\t\tcase 83: goto case 6;\r\n\t\t\t\tcase 84: goto case 7;\r\n\t\t\t\tcase 85: goto case 8;\r\n\t\t\t\tcase 86: goto case 10;\r\n\t\t\t\tcase 87: goto case 16;\r\n\t\t\t\tcase 88: goto case 18;\r\n\t\t\t\tcase 89: goto case 19;\r\n\t\t\t\tcase 90: goto case 21;\r\n\t\t\t\tcase 91: goto case 24;\r\n\t\t\t\tcase 92: goto case 25;\r\n\t\t\t\tcase 93: goto case 27;\r\n\t\t\t\tcase 94: goto case 36;\r\n\t\t\t\tcase 96: goto case 2;\r\n\t\t\t\tcase 97: goto case 3;\r\n\t\t\t\tcase 98: goto case 4;\r\n\t\t\t\tcase 99: goto case 6;\r\n\t\t\t\tcase 100: goto case 7;\r\n\t\t\t\tcase 101: goto case 8;\r\n\t\t\t\tcase 102: goto case 16;\r\n\t\t\t\tcase 103: goto case 18;\r\n\t\t\t\tcase 104: goto case 19;\r\n\t\t\t\tcase 105: goto case 21;\r\n\t\t\t\tcase 106: goto case 24;\r\n\t\t\t\tcase 107: goto case 25;\r\n\t\t\t\tcase 108: goto case 27;\r\n\t\t\t\tcase 109: goto case 36;\r\n\t\t\t\tcase 111: goto case 2;\r\n\t\t\t\tcase 112: goto case 3;\r\n\t\t\t\tcase 113: goto case 4;\r\n\t\t\t\tcase 114: goto case 6;\r\n\t\t\t\tcase 115: goto case 7;\r\n\t\t\t\tcase 116: goto case 8;\r\n\t\t\t\tcase 117: goto case 16;\r\n\t\t\t\tcase 118: goto case 18;\r\n\t\t\t\tcase 119: goto case 19;\r\n\t\t\t\tcase 120: goto case 21;\r\n\t\t\t\tcase 121: goto case 27;\r\n\t\t\t\tcase 122: goto case 36;\r\n\t\t\t\tcase 124: goto case 3;\r\n\t\t\t\tcase 125: goto case 4;\r\n\t\t\t\tcase 126: goto case 6;\r\n\t\t\t\tcase 127: goto case 7;\r\n\t\t\t\tcase 128: goto case 16;\r\n\t\t\t\tcase 129: goto case 18;\r\n\t\t\t\tcase 130: goto case 19;\r\n\t\t\t\tcase 131: goto case 21;\r\n\t\t\t\tcase 132: goto case 27;\r\n\t\t\t\tcase 133: goto case 36;\r\n\t\t\t\tcase 135: goto case 3;\r\n\t\t\t\tcase 136: goto case 4;\r\n\t\t\t\tcase 137: goto case 6;\r\n\t\t\t\tcase 138: goto case 7;\r\n\t\t\t\tcase 139: goto case 16;\r\n\t\t\t\tcase 140: goto case 18;\r\n\t\t\t\tcase 141: goto case 19;\r\n\t\t\t\tcase 142: goto case 21;\r\n\t\t\t\tcase 143: goto case 27;\r\n\t\t\t\tcase 144: goto case 36;\r\n\t\t\t\tcase 146: goto case 3;\r\n\t\t\t\tcase 147: goto case 4;\r\n\t\t\t\tcase 148: goto case 6;\r\n\t\t\t\tcase 149: goto case 7;\r\n\t\t\t\tcase 150: goto case 16;\r\n\t\t\t\tcase 151: goto case 18;\r\n\t\t\t\tcase 152: goto case 19;\r\n\t\t\t\tcase 153: goto case 21;\r\n\t\t\t\tcase 154: goto case 27;\r\n\t\t\t\tcase 155: goto case 36;\r\n\t\t\t\tcase 157: goto case 3;\r\n\t\t\t\tcase 158: goto case 4;\r\n\t\t\t\tcase 159: goto case 6;\r\n\t\t\t\tcase 160: goto case 7;\r\n\t\t\t\tcase 161: goto case 16;\r\n\t\t\t\tcase 162: goto case 18;\r\n\t\t\t\tcase 163: goto case 19;\r\n\t\t\t\tcase 164: goto case 21;\r\n\t\t\t\tcase 165: goto case 27;\r\n\t\t\t\tcase 166: goto case 36;\r\n\t\t\t\tcase 168: goto case 3;\r\n\t\t\t\tcase 169: goto case 4;\r\n\t\t\t\tcase 170: goto case 6;\r\n\t\t\t\tcase 171: goto case 7;\r\n\t\t\t\tcase 172: goto case 18;\r\n\t\t\t\tcase 173: goto case 19;\r\n\t\t\t\tcase 174: goto case 21;\r\n\t\t\t\tcase 175: goto case 27;\r\n\t\t\t\tcase 176: goto case 36;\r\n\t\t\t\tcase 178: goto case 3;\r\n\t\t\t\tcase 179: goto case 4;\r\n\t\t\t\tcase 180: goto case 6;\r\n\t\t\t\tcase 181: goto case 7;\r\n\t\t\t\tcase 182: goto case 18;\r\n\t\t\t\tcase 183: goto case 19;\r\n\t\t\t\tcase 184: goto case 21;\r\n\t\t\t\tcase 185: goto case 27;\r\n\t\t\t\tcase 186: goto case 36;\r\n\t\t\t\tcase 188: goto case 3;\r\n\t\t\t\tcase 189: goto case 6;\r\n\t\t\t\tcase 190: goto case 7;\r\n\t\t\t\tcase 191: goto case 18;\r\n\t\t\t\tcase 192: goto case 19;\r\n\t\t\t\tcase 193: goto case 21;\r\n\t\t\t\tcase 195: goto case 3;\r\n\t\t\t\tcase 196: goto case 6;\r\n\t\t\t\tcase 197: goto case 7;\r\n\t\t\t\tcase 198: goto case 19;\r\n\t\t\t\tcase 199: goto case 21;\r\n\t\t\t\tcase 201: goto case 3;\r\n\t\t\t\tcase 202: goto case 6;\r\n\t\t\t\tcase 203: goto case 7;\r\n\t\t\t\tcase 204: goto case 19;\r\n\t\t\t\tcase 205: goto case 21;\r\n\t\t\t\tcase 207: goto case 3;\r\n\t\t\t\tcase 208: goto case 6;\r\n\t\t\t\tcase 209: goto case 7;\r\n\t\t\t\tcase 210: goto case 19;\r\n\t\t\t\tcase 211: goto case 21;\r\n\t\t\t\tcase 213: goto case 3;\r\n\t\t\t\tcase 214: goto case 6;\r\n\t\t\t\tcase 215: goto case 7;\r\n\t\t\t\tcase 216: goto case 19;\r\n\t\t\t\tcase 217: goto case 21;\r\n\t\t\t\tcase 219: goto case 3;\r\n\t\t\t\tcase 220: goto case 6;\r\n\t\t\t\tcase 221: goto case 7;\r\n\t\t\t\tcase 222: goto case 19;\r\n\t\t\t\tcase 223: goto case 21;\r\n\t\t\t\tcase 225: goto case 3;\r\n\t\t\t\tcase 226: goto case 6;\r\n\t\t\t\tcase 227: goto case 7;\r\n\t\t\t\tcase 228: goto case 19;\r\n\t\t\t\tcase 229: goto case 21;\r\n\t\t\t\tcase 231: goto case 3;\r\n\t\t\t\tcase 232: goto case 6;\r\n\t\t\t\tcase 233: goto case 7;\r\n\t\t\t\tcase 234: goto case 19;\r\n\t\t\t\tcase 235: goto case 21;\r\n\t\t\t\tcase 237: goto case 3;\r\n\t\t\t\tcase 238: goto case 6;\r\n\t\t\t\tcase 239: goto case 7;\r\n\t\t\t\tcase 240: goto case 19;\r\n\t\t\t\tcase 241: goto case 21;\r\n\t\t\t\tcase 243: goto case 3;\r\n\t\t\t\tcase 244: goto case 7;\r\n\t\t\t\tcase 245: goto case 19;\r\n\t\t\t\tcase 246: goto case 21;\r\n\t\t\t\tcase 248: goto case 3;\r\n\t\t\t\tcase 249: goto case 7;\r\n\t\t\t\tcase 250: goto case 21;\r\n\t\t\t\tcase 252: goto case 3;\r\n\t\t\t\tcase 253: goto case 7;\r\n\t\t\t\tcase 254: goto case 21;\r\n\t\t\t\tcase 256: goto case 3;\r\n\t\t\t\tcase 257: goto case 7;\r\n\t\t\t\tcase 258: goto case 21;\r\n\t\t\t\tcase 260: goto case 3;\r\n\t\t\t\tcase 261: goto case 7;\r\n\t\t\t\tcase 262: goto case 21;\r\n\t\t\t\tcase 264: goto case 3;\r\n\t\t\t\tcase 265: goto case 7;\r\n\t\t\t\tcase 267: goto case 3;\r\n\t\t\t\tcase 268: goto case 7;\r\n\t\t\t\tcase 270: goto case 7;\r\n\t\t\t\tcase 272: goto case 7;\r\n\t\t\t\tcase 274: goto case 7;\r\n\t\t\t\tcase 276: goto case 7;\r\n\t\t\t\tcase 278: goto case 7;\r\n\t\t\t\tcase 280: goto case 7;\r\n\t\t\t\tcase 282: goto case 7;\r\n\t\t\t\tcase 284: goto case 7;\r\n\t\t\t\tcase 623: goto case 3;\r\n\t\t\t\tcase 624: goto case 6;\r\n\t\t\t\tcase 625: goto case 9;\r\n\t\t\t\tcase 626: goto case 31;\r\n\t\t\t\tcase 627: goto case 37;\r\n\t\t\t\tcase 628: goto case 3;\r\n\t\t\t\tcase 629: goto case 4;\r\n\t\t\t\tcase 630: goto case 7;\r\n\t\t\t\tcase 631: goto case 19;\r\n\t\t\t\tcase 632: goto case 20;\r\n\t\t\t\tcase 633: goto case 27;\r\n\t\t\t\tcase 634: goto case 37;\r\n\t\t\t\tcase 636: goto case 3;\r\n\t\t\t\tcase 637: goto case 10;\r\n\t\t\t\tcase 638: goto case 18;\r\n\t\t\t\tcase 639: goto case 21;\r\n\t\t\t\tcase 640: goto case 7;\r\n\t\t\t\tcase 641: goto case 8;\r\n\t\t\t\tcase 642: goto case 2;\r\n\t\t\t\tcase 643: goto case 3;\r\n\t\t\t\tcase 644: goto case 4;\r\n\t\t\t\tcase 645: goto case 7;\r\n\t\t\t\tcase 646: goto case 19;\r\n\t\t\t\tcase 647: goto case 4;\r\n\t\t\t\tcase 648: goto case 6;\r\n\t\t\t\tcase 649: goto case 7;\r\n\t\t\t\tcase 650: goto case 18;\r\n\t\t\t\tcase 651: goto case 19;\r\n\t\t\t\tcase 652: goto case 21;\r\n\t\t\t\tcase 653: goto case 7;\r\n\t\t\t\tcase 654: goto case 21;\r\n\t\t\t\tcase 655: goto case 7;\r\n\t\t\t\tcase 656: goto case 21;\r\n\t\t\t\tcase 657: goto case 6;\r\n\t\t\t\tcase 658: goto case 7;\r\n\t\t\t\tcase 660: goto case 7;\r\n\t\t\t\tcase 661: goto case 21;\r\n\t\t\t\tcase 663: goto case 7;\r\n\t\t\t\tcase 664: goto case 19;\r\n\t\t\t\tcase 665: goto case 21;\r\n\t\t\t\tcase 667: goto case 7;\r\n\t\t\t\tcase 668: goto case 19;\r\n\t\t\t\tcase 669: goto case 3;\r\n\t\t\t\tcase 670: goto case 6;\r\n\t\t\t\tcase 671: goto case 21;\r\n\t\t\t\tcase 673: goto case 7;\r\n\t\t\t\tcase 674: goto case 6;\r\n\t\t\t\tcase 675: goto case 3;\r\n\t\t\t\tcase 676: goto case 21;\r\n\t\t\t\tcase 679: goto case 3;\r\n\t\t\t\tcase 680: goto case 3;\r\n\t\t\t\tcase 681: goto case 21;\r\n\t\t\t\tcase 682: goto case 7;\r\n\t\t\t\tcase 683: goto case 7;\r\n\t\t\t\tcase 731: goto case 3;\r\n\t\t\t\tcase 732: goto case 6;\r\n\t\t\t\tcase 733: goto case 9;\r\n\t\t\t\tcase 734: goto case 37;\r\n\t\t\t\tcase 735: goto case 7;\r\n\t\t\t\tcase 737: goto case 3;\r\n\t\t\t\tcase 738: goto case 2;\r\n\t\t\t\tcase 739: goto case 3;\r\n\t\t\t\tcase 740: goto case 6;\r\n\t\t\t\tcase 741: goto case 7;\r\n\t\t\t\tcase 742: goto case 21;\r\n\t\t\t\tcase 743: goto case 21;\r\n\t\t\t\tcase 744: goto case 7;\r\n\t\t\t\tcase 746: goto case 7;\r\n\t\t\t\tcase 747: goto case 21;\r\n\t\t\t\tcase 748: goto case 7;\r\n\t\t\t\tcase 749: goto case 6;\r\n\t\t\t\tcase 750: goto case 3;\r\n\t\t\t\tcase 752: goto case 3;\r\n\t\t\t\tcase 765: goto case 3;\r\n\t\t\t\tcase 766: goto case 6;\r\n\t\t\t\tcase 768: goto case 2;\r\n\t\t\t\tcase 769: goto case 3;\r\n\t\t\t\tcase 770: goto case 6;\r\n\t\t\t\tcase 771: goto case 7;\r\n\t\t\t\tcase 772: goto case 21;\r\n\t\t\t\tcase 773: goto case 21;\r\n\t\t\t\tcase 774: goto case 7;\r\n\t\t\t\tcase 775: goto case 7;\r\n\t\t\t\tcase 776: goto case 21;\r\n\t\t\t\tcase 777: goto case 7;\r\n\t\t\t\tcase 778: goto case 3;\r\n\t\t\t\tcase 780: goto case 3;\r\n\t\t\t\tcase 785: goto case 3;\r\n\t\t\t\tcase 787: goto case 3;\r\n\t\t\t\tcase 788: goto case 6;\r\n\t\t\t\tcase 789: goto case 21;\r\n\t\t\t\tcase 790: goto case 7;\r\n\t\t\t\tcase 791: goto case 7;\r\n\t\t\t\tcase 792: goto case 3;\r\n\t\t\t\tcase 794: goto case 3;\r\n\t\t\t\tcase 798: goto case 3;\r\n\t\t\t\tcase 799: goto case 3;\r\n\t\t\t\tcase 800: goto case 6;\r\n\t\t\t\tcase 801: goto case 7;\r\n\t\t\t\tcase 802: goto case 3;\r\n\t\t\t\tcase 804: goto case 3;\r\n\t\t\t\tcase 808: goto case 3;\r\n\t\t\t\tcase 809: goto case 3;\r\n\t\t\t\tcase 810: goto case 7;\r\n\t\t\t\tcase 812: goto case 3;\r\n\t\t\t\tcase 815: goto case 3;\r\n\t\t\t\tcase 816: goto case 3;\r\n\t\t\t\tcase 820: goto case 3;\r\n\t\t\t\tcase 821: goto case 3;\r\n\t\t\t\tcase 824: goto case 3;\r\n\t\t\t\tcase 825: goto case 3;\r\n\t\t\t\tcase 828: goto case 3;\r\n\t\t\t\tcase 829: goto case 3;\r\n\t\t\t\tcase 832: goto case 3;\r\n\t\t\t\tcase 833: goto case 3;\r\n\t\t\t\tcase 836: goto case 3;\r\n\t\t\t\tcase 839: goto case 3;\r\n\t\t\t\tcase 841: goto case 3;\r\n\t\t\t\tcase 843: goto case 3;\r\n\t\t\t\tcase 845: goto case 3;\r\n\t\t\t\tcase 853: goto case 7;\r\n\t\t\t\tcase 854: goto case 9;\r\n\t\t\t\tcase 855: goto case 12;\r\n\t\t\t\tcase 856: goto case 27;\r\n\t\t\t\tcase 857: goto case 31;\r\n\t\t\t\tcase 858: goto case 4;\r\n\t\t\t\tcase 859: goto case 7;\r\n\t\t\t\tcase 860: goto case 19;\r\n\t\t\t\tcase 861: goto case 27;\r\n\t\t\t\tcase 862: goto case 7;\r\n\t\t\t\tcase 863: goto case 8;\r\n\t\t\t\tcase 864: goto case 3;\r\n\t\t\t\tcase 865: goto case 3;\r\n\t\t\t\tcase 866: goto case 7;\r\n\t\t\t\tcase 867: goto case 21;\r\n\t\t\t\tcase 868: goto case 21;\r\n\t\t\t\tcase 869: goto case 7;\r\n\t\t\t\tcase 870: goto case 6;\r\n\t\t\t\tcase 871: goto case 7;\r\n\t\t\t\tcase 872: goto case 3;\r\n\t\t\t\tcase 873: goto case 3;\r\n\t\t\t\tcase 879: goto case 3;\r\n\t\t\t\tcase 880: goto case 3;\r\n\t\t\t\tcase 881: goto case 4;\r\n\t\t\t\tcase 882: goto case 4;\r\n\t\t\t\tcase 883: goto case 3;\r\n\t\t\t\tcase 884: goto case 7;\r\n\t\t\t\tcase 885: goto case 9;\r\n\t\t\t\tcase 886: goto case 12;\r\n\t\t\t\tcase 887: goto case 27;\r\n\t\t\t\tcase 888: goto case 27;\r\n\t\t\t\tcase 889: goto case 7;\r\n\t\t\t\tcase 890: goto case 3;\r\n\t\t\t\tcase 891: goto case 6;\r\n\t\t\t\tcase 892: goto case 3;\r\n\t\t\t\tcase 893: goto case 3;\r\n\t\t\t\tcase 896: goto case 3;\r\n\t\t\t\tcase 897: goto case 3;\r\n\t\t\t\tcase 898: goto case 9;\r\n\t\t\t\tcase 899: goto case 3;\r\n\t\t\t\tcase 900: goto case 3;\r\n\t\t\t\tcase 901: goto case 3;\r\n\t\t\t\tcase 904: goto case 9;\r\n\t\t\t\tcase 905: goto case 3;\r\n\t\t\t\tcase 906: goto case 3;\r\n\t\t\t\tcase 908: goto case 3;\r\n\t\t\t\tcase 910: goto case 3;\r\n\t\t\t\tcase 912: goto case 3;\r\n\t\t\t\tcase 919: goto case 4;\r\n\t\t\t\tcase 920: goto case 4;\r\n\t\t\t\tcase 921: goto case 3;\r\n\t\t\t\tcase 922: goto case 4;\r\n\t\t\t\tcase 923: goto case 4;\r\n\t\t\t\tcase 924: goto case 4;\r\n\t\t\t\tcase 925: goto case 4;\r\n\t\t\t\tcase 926: goto case 4;\r\n\t\t\t\tcase 927: goto case 4;\r\n\t\t\t\tcase 928: goto case 4;\r\n\t\t\t\tcase 929: goto case 4;\r\n\t\t\t\tcase 930: goto case 3;\r\n\t\t\t\tcase 947: goto case 3;\r\n\t\t\t\tcase 948: goto case 12;\r\n\t\t\t\tcase 949: goto case 27;\r\n\t\t\t\tcase 950: goto case 3;\r\n\t\t\t\tcase 952: goto case 3;\r\n\t\t\t\tcase 954: goto case 3;\r\n\t\t\t\tcase 955: goto case 12;\r\n\t\t\t\tcase 956: goto case 27;\r\n\t\t\t\tcase 957: goto case 3;\r\n\t\t\t\tcase 958: goto case 3;\r\n\t\t\t\tcase 960: goto case 3;\r\n\t\t\t\tcase 961: goto case 3;\r\n\t\t\t\tcase 963: goto case 3;\r\n\t\t\t\tcase 964: goto case 3;\r\n\t\t\t\tcase 966: goto case 3;\r\n\t\t\t\tcase 968: goto case 3;\r\n\t\t\t\tcase 970: goto case 3;\r\n\t\t\t\tcase 973: goto case 3;\r\n\t\t\t\tcase 977: goto case 3;\r\n\t\t\t\tcase 979: goto case 3;\r\n\t\t\t\tcase 980: goto case 3;\r\n\t\t\t\tcase 981: goto case 27;\r\n\t\t\t\tcase 982: goto case 3;\r\n\t\t\t\tcase 983: goto case 3;\r\n\t\t\t\tcase 985: goto case 3;\r\n\t\t\t\tcase 986: goto case 3;\r\n\t\t\t\tcase 987: goto case 3;\r\n\t\t\t\tcase 989: goto case 3;\r\n\t\t\t\tcase 991: goto case 3;\r\n\t\t\t\tcase 992: goto case 3;\r\n\t\t\t\tcase 993: goto case 3;\r\n\t\t\t\tcase 995: goto case 3;\r\n\t\t\t\tcase 996: goto case 3;\r\n\t\t\t\tcase 997: goto case 3;\r\n\t\t\t\tcase 998: goto case 3;\r\n\t\t\t\tcase 999: goto case 3;\r\n\t\t\t}\r\n\t\t\taccepted = false;\r\n\t\t\treturn yyreturn;\r\n\t\t}\r\n\t\t\r\n\t\t#pragma warning restore 162\r\n\t\t\r\n\t\t\r\n\t\t#endregion\r\n\t\tprivate void BEGIN(LexicalStates state)\r\n\t\t{\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate char Advance()\r\n\t\t{\r\n\t\t\tif (lookahead_index >= chars_read)\r\n\t\t\t{\r\n\t\t\t\tif (token_start > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// shift buffer left:\r\n\t\t\t\t\tint length = chars_read - token_start;\r\n\t\t\t\t\tSystem.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1);\r\n\t\t\t\t\ttoken_end -= token_start;\r\n\t\t\t\t\ttoken_chunk_start -= token_start;\r\n\t\t\t\t\ttoken_start = 0;\r\n\t\t\t\t\tchars_read = lookahead_index = length;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// populate the remaining bytes:\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\t\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\twhile (lookahead_index >= chars_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (lookahead_index >= buffer.Length)\r\n\t\t\t\t\t\tbuffer = ResizeBuffer(buffer);\r\n\t\t\t\t\t\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn buffer[lookahead_index++];\r\n\t\t}\r\n\t\t\r\n\t\tprivate char[] ResizeBuffer(char[] buf)\r\n\t\t{\r\n\t\t\tchar[] result = new char[buf.Length << 1];\r\n\t\t\tSystem.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tprotected static bool IsNewLineCharacter(char ch)\r\n\t\t{\r\n\t\t    return ch == '\\r' || ch == '\\n' || ch == (char)0x2028 || ch == (char)0x2029;\r\n\t\t}\r\n\t\tprivate void TrimTokenEnd()\r\n\t\t{\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\n')\r\n\t\t\t\ttoken_end--;\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\r')\r\n\t\t\t\ttoken_end--;\r\n\t\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenChunkStart()\r\n\t\t{\r\n\t\t\ttoken_chunk_start = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenEnd()\r\n\t\t{\r\n\t\t\ttoken_end = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MoveToTokenEnd()\r\n\t\t{\r\n\t\t\tlookahead_index = token_end;\r\n\t\t\tyy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\\r' || buffer[token_end - 1] == '\\n');\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_start; }\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenChunkLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_chunk_start; }\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yymore()\r\n\t\t{\r\n\t\t\tif (!expanding_token)\r\n\t\t\t{\r\n\t\t\t\ttoken_start = token_chunk_start;\r\n\t\t\t\texpanding_token = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yyless(int count)\r\n\t\t{\r\n\t\t\tlookahead_index = token_end = token_chunk_start + count;\r\n\t\t}\r\n\t\t\r\n\t\tprivate Stack<LexicalStates> stateStack = new Stack<LexicalStates>(20);\r\n\t\t\r\n\t\tprivate void yy_push_state(LexicalStates state)\r\n\t\t{\r\n\t\t\tstateStack.Push(current_lexical_state);\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate bool yy_pop_state()\r\n\t\t{\r\n\t\t\tif (stateStack.Count == 0) return false;\r\n\t\t\tcurrent_lexical_state = stateStack.Pop();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\tprivate LexicalStates yy_top_state()\r\n\t\t{\r\n\t\t\treturn stateStack.Peek();\r\n\t\t}\r\n\t\t\r\n\t\t#region Tables\r\n\t\t\r\n\t\tprivate static AcceptConditions[] acceptCondition = new AcceptConditions[]\r\n\t\t{\r\n\t\t\tAcceptConditions.NotAccept, // 0\r\n\t\t\tAcceptConditions.Accept, // 1\r\n\t\t\tAcceptConditions.Accept, // 2\r\n\t\t\tAcceptConditions.Accept, // 3\r\n\t\t\tAcceptConditions.Accept, // 4\r\n\t\t\tAcceptConditions.Accept, // 5\r\n\t\t\tAcceptConditions.Accept, // 6\r\n\t\t\tAcceptConditions.Accept, // 7\r\n\t\t\tAcceptConditions.Accept, // 8\r\n\t\t\tAcceptConditions.Accept, // 9\r\n\t\t\tAcceptConditions.Accept, // 10\r\n\t\t\tAcceptConditions.Accept, // 11\r\n\t\t\tAcceptConditions.Accept, // 12\r\n\t\t\tAcceptConditions.Accept, // 13\r\n\t\t\tAcceptConditions.Accept, // 14\r\n\t\t\tAcceptConditions.Accept, // 15\r\n\t\t\tAcceptConditions.Accept, // 16\r\n\t\t\tAcceptConditions.Accept, // 17\r\n\t\t\tAcceptConditions.Accept, // 18\r\n\t\t\tAcceptConditions.Accept, // 19\r\n\t\t\tAcceptConditions.Accept, // 20\r\n\t\t\tAcceptConditions.Accept, // 21\r\n\t\t\tAcceptConditions.Accept, // 22\r\n\t\t\tAcceptConditions.Accept, // 23\r\n\t\t\tAcceptConditions.Accept, // 24\r\n\t\t\tAcceptConditions.Accept, // 25\r\n\t\t\tAcceptConditions.Accept, // 26\r\n\t\t\tAcceptConditions.Accept, // 27\r\n\t\t\tAcceptConditions.Accept, // 28\r\n\t\t\tAcceptConditions.Accept, // 29\r\n\t\t\tAcceptConditions.Accept, // 30\r\n\t\t\tAcceptConditions.Accept, // 31\r\n\t\t\tAcceptConditions.Accept, // 32\r\n\t\t\tAcceptConditions.Accept, // 33\r\n\t\t\tAcceptConditions.Accept, // 34\r\n\t\t\tAcceptConditions.Accept, // 35\r\n\t\t\tAcceptConditions.Accept, // 36\r\n\t\t\tAcceptConditions.Accept, // 37\r\n\t\t\tAcceptConditions.NotAccept, // 38\r\n\t\t\tAcceptConditions.Accept, // 39\r\n\t\t\tAcceptConditions.Accept, // 40\r\n\t\t\tAcceptConditions.Accept, // 41\r\n\t\t\tAcceptConditions.Accept, // 42\r\n\t\t\tAcceptConditions.Accept, // 43\r\n\t\t\tAcceptConditions.Accept, // 44\r\n\t\t\tAcceptConditions.Accept, // 45\r\n\t\t\tAcceptConditions.Accept, // 46\r\n\t\t\tAcceptConditions.Accept, // 47\r\n\t\t\tAcceptConditions.Accept, // 48\r\n\t\t\tAcceptConditions.Accept, // 49\r\n\t\t\tAcceptConditions.Accept, // 50\r\n\t\t\tAcceptConditions.Accept, // 51\r\n\t\t\tAcceptConditions.Accept, // 52\r\n\t\t\tAcceptConditions.Accept, // 53\r\n\t\t\tAcceptConditions.Accept, // 54\r\n\t\t\tAcceptConditions.Accept, // 55\r\n\t\t\tAcceptConditions.Accept, // 56\r\n\t\t\tAcceptConditions.Accept, // 57\r\n\t\t\tAcceptConditions.Accept, // 58\r\n\t\t\tAcceptConditions.Accept, // 59\r\n\t\t\tAcceptConditions.Accept, // 60\r\n\t\t\tAcceptConditions.NotAccept, // 61\r\n\t\t\tAcceptConditions.Accept, // 62\r\n\t\t\tAcceptConditions.Accept, // 63\r\n\t\t\tAcceptConditions.Accept, // 64\r\n\t\t\tAcceptConditions.Accept, // 65\r\n\t\t\tAcceptConditions.Accept, // 66\r\n\t\t\tAcceptConditions.Accept, // 67\r\n\t\t\tAcceptConditions.Accept, // 68\r\n\t\t\tAcceptConditions.Accept, // 69\r\n\t\t\tAcceptConditions.Accept, // 70\r\n\t\t\tAcceptConditions.Accept, // 71\r\n\t\t\tAcceptConditions.Accept, // 72\r\n\t\t\tAcceptConditions.Accept, // 73\r\n\t\t\tAcceptConditions.Accept, // 74\r\n\t\t\tAcceptConditions.Accept, // 75\r\n\t\t\tAcceptConditions.Accept, // 76\r\n\t\t\tAcceptConditions.Accept, // 77\r\n\t\t\tAcceptConditions.Accept, // 78\r\n\t\t\tAcceptConditions.NotAccept, // 79\r\n\t\t\tAcceptConditions.Accept, // 80\r\n\t\t\tAcceptConditions.Accept, // 81\r\n\t\t\tAcceptConditions.Accept, // 82\r\n\t\t\tAcceptConditions.Accept, // 83\r\n\t\t\tAcceptConditions.Accept, // 84\r\n\t\t\tAcceptConditions.Accept, // 85\r\n\t\t\tAcceptConditions.Accept, // 86\r\n\t\t\tAcceptConditions.Accept, // 87\r\n\t\t\tAcceptConditions.Accept, // 88\r\n\t\t\tAcceptConditions.Accept, // 89\r\n\t\t\tAcceptConditions.Accept, // 90\r\n\t\t\tAcceptConditions.Accept, // 91\r\n\t\t\tAcceptConditions.Accept, // 92\r\n\t\t\tAcceptConditions.Accept, // 93\r\n\t\t\tAcceptConditions.Accept, // 94\r\n\t\t\tAcceptConditions.NotAccept, // 95\r\n\t\t\tAcceptConditions.Accept, // 96\r\n\t\t\tAcceptConditions.Accept, // 97\r\n\t\t\tAcceptConditions.Accept, // 98\r\n\t\t\tAcceptConditions.Accept, // 99\r\n\t\t\tAcceptConditions.Accept, // 100\r\n\t\t\tAcceptConditions.Accept, // 101\r\n\t\t\tAcceptConditions.Accept, // 102\r\n\t\t\tAcceptConditions.Accept, // 103\r\n\t\t\tAcceptConditions.Accept, // 104\r\n\t\t\tAcceptConditions.Accept, // 105\r\n\t\t\tAcceptConditions.Accept, // 106\r\n\t\t\tAcceptConditions.Accept, // 107\r\n\t\t\tAcceptConditions.Accept, // 108\r\n\t\t\tAcceptConditions.Accept, // 109\r\n\t\t\tAcceptConditions.NotAccept, // 110\r\n\t\t\tAcceptConditions.Accept, // 111\r\n\t\t\tAcceptConditions.Accept, // 112\r\n\t\t\tAcceptConditions.Accept, // 113\r\n\t\t\tAcceptConditions.Accept, // 114\r\n\t\t\tAcceptConditions.Accept, // 115\r\n\t\t\tAcceptConditions.Accept, // 116\r\n\t\t\tAcceptConditions.Accept, // 117\r\n\t\t\tAcceptConditions.Accept, // 118\r\n\t\t\tAcceptConditions.Accept, // 119\r\n\t\t\tAcceptConditions.Accept, // 120\r\n\t\t\tAcceptConditions.Accept, // 121\r\n\t\t\tAcceptConditions.Accept, // 122\r\n\t\t\tAcceptConditions.NotAccept, // 123\r\n\t\t\tAcceptConditions.Accept, // 124\r\n\t\t\tAcceptConditions.Accept, // 125\r\n\t\t\tAcceptConditions.Accept, // 126\r\n\t\t\tAcceptConditions.Accept, // 127\r\n\t\t\tAcceptConditions.Accept, // 128\r\n\t\t\tAcceptConditions.Accept, // 129\r\n\t\t\tAcceptConditions.Accept, // 130\r\n\t\t\tAcceptConditions.Accept, // 131\r\n\t\t\tAcceptConditions.Accept, // 132\r\n\t\t\tAcceptConditions.Accept, // 133\r\n\t\t\tAcceptConditions.NotAccept, // 134\r\n\t\t\tAcceptConditions.Accept, // 135\r\n\t\t\tAcceptConditions.Accept, // 136\r\n\t\t\tAcceptConditions.Accept, // 137\r\n\t\t\tAcceptConditions.Accept, // 138\r\n\t\t\tAcceptConditions.Accept, // 139\r\n\t\t\tAcceptConditions.Accept, // 140\r\n\t\t\tAcceptConditions.Accept, // 141\r\n\t\t\tAcceptConditions.Accept, // 142\r\n\t\t\tAcceptConditions.Accept, // 143\r\n\t\t\tAcceptConditions.Accept, // 144\r\n\t\t\tAcceptConditions.NotAccept, // 145\r\n\t\t\tAcceptConditions.Accept, // 146\r\n\t\t\tAcceptConditions.Accept, // 147\r\n\t\t\tAcceptConditions.Accept, // 148\r\n\t\t\tAcceptConditions.Accept, // 149\r\n\t\t\tAcceptConditions.Accept, // 150\r\n\t\t\tAcceptConditions.Accept, // 151\r\n\t\t\tAcceptConditions.Accept, // 152\r\n\t\t\tAcceptConditions.Accept, // 153\r\n\t\t\tAcceptConditions.Accept, // 154\r\n\t\t\tAcceptConditions.Accept, // 155\r\n\t\t\tAcceptConditions.NotAccept, // 156\r\n\t\t\tAcceptConditions.Accept, // 157\r\n\t\t\tAcceptConditions.Accept, // 158\r\n\t\t\tAcceptConditions.Accept, // 159\r\n\t\t\tAcceptConditions.Accept, // 160\r\n\t\t\tAcceptConditions.Accept, // 161\r\n\t\t\tAcceptConditions.Accept, // 162\r\n\t\t\tAcceptConditions.Accept, // 163\r\n\t\t\tAcceptConditions.Accept, // 164\r\n\t\t\tAcceptConditions.Accept, // 165\r\n\t\t\tAcceptConditions.Accept, // 166\r\n\t\t\tAcceptConditions.NotAccept, // 167\r\n\t\t\tAcceptConditions.Accept, // 168\r\n\t\t\tAcceptConditions.Accept, // 169\r\n\t\t\tAcceptConditions.Accept, // 170\r\n\t\t\tAcceptConditions.Accept, // 171\r\n\t\t\tAcceptConditions.Accept, // 172\r\n\t\t\tAcceptConditions.Accept, // 173\r\n\t\t\tAcceptConditions.Accept, // 174\r\n\t\t\tAcceptConditions.Accept, // 175\r\n\t\t\tAcceptConditions.Accept, // 176\r\n\t\t\tAcceptConditions.NotAccept, // 177\r\n\t\t\tAcceptConditions.Accept, // 178\r\n\t\t\tAcceptConditions.Accept, // 179\r\n\t\t\tAcceptConditions.Accept, // 180\r\n\t\t\tAcceptConditions.Accept, // 181\r\n\t\t\tAcceptConditions.Accept, // 182\r\n\t\t\tAcceptConditions.Accept, // 183\r\n\t\t\tAcceptConditions.Accept, // 184\r\n\t\t\tAcceptConditions.Accept, // 185\r\n\t\t\tAcceptConditions.Accept, // 186\r\n\t\t\tAcceptConditions.NotAccept, // 187\r\n\t\t\tAcceptConditions.Accept, // 188\r\n\t\t\tAcceptConditions.Accept, // 189\r\n\t\t\tAcceptConditions.Accept, // 190\r\n\t\t\tAcceptConditions.Accept, // 191\r\n\t\t\tAcceptConditions.Accept, // 192\r\n\t\t\tAcceptConditions.Accept, // 193\r\n\t\t\tAcceptConditions.NotAccept, // 194\r\n\t\t\tAcceptConditions.Accept, // 195\r\n\t\t\tAcceptConditions.Accept, // 196\r\n\t\t\tAcceptConditions.Accept, // 197\r\n\t\t\tAcceptConditions.Accept, // 198\r\n\t\t\tAcceptConditions.Accept, // 199\r\n\t\t\tAcceptConditions.NotAccept, // 200\r\n\t\t\tAcceptConditions.Accept, // 201\r\n\t\t\tAcceptConditions.Accept, // 202\r\n\t\t\tAcceptConditions.Accept, // 203\r\n\t\t\tAcceptConditions.Accept, // 204\r\n\t\t\tAcceptConditions.Accept, // 205\r\n\t\t\tAcceptConditions.NotAccept, // 206\r\n\t\t\tAcceptConditions.Accept, // 207\r\n\t\t\tAcceptConditions.Accept, // 208\r\n\t\t\tAcceptConditions.Accept, // 209\r\n\t\t\tAcceptConditions.Accept, // 210\r\n\t\t\tAcceptConditions.Accept, // 211\r\n\t\t\tAcceptConditions.NotAccept, // 212\r\n\t\t\tAcceptConditions.Accept, // 213\r\n\t\t\tAcceptConditions.Accept, // 214\r\n\t\t\tAcceptConditions.Accept, // 215\r\n\t\t\tAcceptConditions.Accept, // 216\r\n\t\t\tAcceptConditions.Accept, // 217\r\n\t\t\tAcceptConditions.NotAccept, // 218\r\n\t\t\tAcceptConditions.Accept, // 219\r\n\t\t\tAcceptConditions.Accept, // 220\r\n\t\t\tAcceptConditions.Accept, // 221\r\n\t\t\tAcceptConditions.Accept, // 222\r\n\t\t\tAcceptConditions.Accept, // 223\r\n\t\t\tAcceptConditions.NotAccept, // 224\r\n\t\t\tAcceptConditions.Accept, // 225\r\n\t\t\tAcceptConditions.Accept, // 226\r\n\t\t\tAcceptConditions.Accept, // 227\r\n\t\t\tAcceptConditions.Accept, // 228\r\n\t\t\tAcceptConditions.Accept, // 229\r\n\t\t\tAcceptConditions.NotAccept, // 230\r\n\t\t\tAcceptConditions.Accept, // 231\r\n\t\t\tAcceptConditions.Accept, // 232\r\n\t\t\tAcceptConditions.Accept, // 233\r\n\t\t\tAcceptConditions.Accept, // 234\r\n\t\t\tAcceptConditions.Accept, // 235\r\n\t\t\tAcceptConditions.NotAccept, // 236\r\n\t\t\tAcceptConditions.Accept, // 237\r\n\t\t\tAcceptConditions.Accept, // 238\r\n\t\t\tAcceptConditions.Accept, // 239\r\n\t\t\tAcceptConditions.Accept, // 240\r\n\t\t\tAcceptConditions.Accept, // 241\r\n\t\t\tAcceptConditions.NotAccept, // 242\r\n\t\t\tAcceptConditions.Accept, // 243\r\n\t\t\tAcceptConditions.Accept, // 244\r\n\t\t\tAcceptConditions.Accept, // 245\r\n\t\t\tAcceptConditions.Accept, // 246\r\n\t\t\tAcceptConditions.NotAccept, // 247\r\n\t\t\tAcceptConditions.Accept, // 248\r\n\t\t\tAcceptConditions.Accept, // 249\r\n\t\t\tAcceptConditions.Accept, // 250\r\n\t\t\tAcceptConditions.NotAccept, // 251\r\n\t\t\tAcceptConditions.Accept, // 252\r\n\t\t\tAcceptConditions.Accept, // 253\r\n\t\t\tAcceptConditions.Accept, // 254\r\n\t\t\tAcceptConditions.NotAccept, // 255\r\n\t\t\tAcceptConditions.Accept, // 256\r\n\t\t\tAcceptConditions.Accept, // 257\r\n\t\t\tAcceptConditions.Accept, // 258\r\n\t\t\tAcceptConditions.NotAccept, // 259\r\n\t\t\tAcceptConditions.Accept, // 260\r\n\t\t\tAcceptConditions.Accept, // 261\r\n\t\t\tAcceptConditions.Accept, // 262\r\n\t\t\tAcceptConditions.NotAccept, // 263\r\n\t\t\tAcceptConditions.Accept, // 264\r\n\t\t\tAcceptConditions.Accept, // 265\r\n\t\t\tAcceptConditions.NotAccept, // 266\r\n\t\t\tAcceptConditions.Accept, // 267\r\n\t\t\tAcceptConditions.Accept, // 268\r\n\t\t\tAcceptConditions.NotAccept, // 269\r\n\t\t\tAcceptConditions.Accept, // 270\r\n\t\t\tAcceptConditions.NotAccept, // 271\r\n\t\t\tAcceptConditions.Accept, // 272\r\n\t\t\tAcceptConditions.NotAccept, // 273\r\n\t\t\tAcceptConditions.Accept, // 274\r\n\t\t\tAcceptConditions.NotAccept, // 275\r\n\t\t\tAcceptConditions.Accept, // 276\r\n\t\t\tAcceptConditions.NotAccept, // 277\r\n\t\t\tAcceptConditions.Accept, // 278\r\n\t\t\tAcceptConditions.NotAccept, // 279\r\n\t\t\tAcceptConditions.Accept, // 280\r\n\t\t\tAcceptConditions.NotAccept, // 281\r\n\t\t\tAcceptConditions.Accept, // 282\r\n\t\t\tAcceptConditions.NotAccept, // 283\r\n\t\t\tAcceptConditions.Accept, // 284\r\n\t\t\tAcceptConditions.NotAccept, // 285\r\n\t\t\tAcceptConditions.NotAccept, // 286\r\n\t\t\tAcceptConditions.NotAccept, // 287\r\n\t\t\tAcceptConditions.NotAccept, // 288\r\n\t\t\tAcceptConditions.NotAccept, // 289\r\n\t\t\tAcceptConditions.NotAccept, // 290\r\n\t\t\tAcceptConditions.NotAccept, // 291\r\n\t\t\tAcceptConditions.NotAccept, // 292\r\n\t\t\tAcceptConditions.NotAccept, // 293\r\n\t\t\tAcceptConditions.NotAccept, // 294\r\n\t\t\tAcceptConditions.NotAccept, // 295\r\n\t\t\tAcceptConditions.NotAccept, // 296\r\n\t\t\tAcceptConditions.NotAccept, // 297\r\n\t\t\tAcceptConditions.NotAccept, // 298\r\n\t\t\tAcceptConditions.NotAccept, // 299\r\n\t\t\tAcceptConditions.NotAccept, // 300\r\n\t\t\tAcceptConditions.NotAccept, // 301\r\n\t\t\tAcceptConditions.NotAccept, // 302\r\n\t\t\tAcceptConditions.NotAccept, // 303\r\n\t\t\tAcceptConditions.NotAccept, // 304\r\n\t\t\tAcceptConditions.NotAccept, // 305\r\n\t\t\tAcceptConditions.NotAccept, // 306\r\n\t\t\tAcceptConditions.NotAccept, // 307\r\n\t\t\tAcceptConditions.NotAccept, // 308\r\n\t\t\tAcceptConditions.NotAccept, // 309\r\n\t\t\tAcceptConditions.NotAccept, // 310\r\n\t\t\tAcceptConditions.NotAccept, // 311\r\n\t\t\tAcceptConditions.NotAccept, // 312\r\n\t\t\tAcceptConditions.NotAccept, // 313\r\n\t\t\tAcceptConditions.NotAccept, // 314\r\n\t\t\tAcceptConditions.NotAccept, // 315\r\n\t\t\tAcceptConditions.NotAccept, // 316\r\n\t\t\tAcceptConditions.NotAccept, // 317\r\n\t\t\tAcceptConditions.NotAccept, // 318\r\n\t\t\tAcceptConditions.NotAccept, // 319\r\n\t\t\tAcceptConditions.NotAccept, // 320\r\n\t\t\tAcceptConditions.NotAccept, // 321\r\n\t\t\tAcceptConditions.NotAccept, // 322\r\n\t\t\tAcceptConditions.NotAccept, // 323\r\n\t\t\tAcceptConditions.NotAccept, // 324\r\n\t\t\tAcceptConditions.NotAccept, // 325\r\n\t\t\tAcceptConditions.NotAccept, // 326\r\n\t\t\tAcceptConditions.NotAccept, // 327\r\n\t\t\tAcceptConditions.NotAccept, // 328\r\n\t\t\tAcceptConditions.NotAccept, // 329\r\n\t\t\tAcceptConditions.NotAccept, // 330\r\n\t\t\tAcceptConditions.NotAccept, // 331\r\n\t\t\tAcceptConditions.NotAccept, // 332\r\n\t\t\tAcceptConditions.NotAccept, // 333\r\n\t\t\tAcceptConditions.NotAccept, // 334\r\n\t\t\tAcceptConditions.NotAccept, // 335\r\n\t\t\tAcceptConditions.NotAccept, // 336\r\n\t\t\tAcceptConditions.NotAccept, // 337\r\n\t\t\tAcceptConditions.NotAccept, // 338\r\n\t\t\tAcceptConditions.NotAccept, // 339\r\n\t\t\tAcceptConditions.NotAccept, // 340\r\n\t\t\tAcceptConditions.NotAccept, // 341\r\n\t\t\tAcceptConditions.NotAccept, // 342\r\n\t\t\tAcceptConditions.NotAccept, // 343\r\n\t\t\tAcceptConditions.NotAccept, // 344\r\n\t\t\tAcceptConditions.NotAccept, // 345\r\n\t\t\tAcceptConditions.NotAccept, // 346\r\n\t\t\tAcceptConditions.NotAccept, // 347\r\n\t\t\tAcceptConditions.NotAccept, // 348\r\n\t\t\tAcceptConditions.NotAccept, // 349\r\n\t\t\tAcceptConditions.NotAccept, // 350\r\n\t\t\tAcceptConditions.NotAccept, // 351\r\n\t\t\tAcceptConditions.NotAccept, // 352\r\n\t\t\tAcceptConditions.NotAccept, // 353\r\n\t\t\tAcceptConditions.NotAccept, // 354\r\n\t\t\tAcceptConditions.NotAccept, // 355\r\n\t\t\tAcceptConditions.NotAccept, // 356\r\n\t\t\tAcceptConditions.NotAccept, // 357\r\n\t\t\tAcceptConditions.NotAccept, // 358\r\n\t\t\tAcceptConditions.NotAccept, // 359\r\n\t\t\tAcceptConditions.NotAccept, // 360\r\n\t\t\tAcceptConditions.NotAccept, // 361\r\n\t\t\tAcceptConditions.NotAccept, // 362\r\n\t\t\tAcceptConditions.NotAccept, // 363\r\n\t\t\tAcceptConditions.NotAccept, // 364\r\n\t\t\tAcceptConditions.NotAccept, // 365\r\n\t\t\tAcceptConditions.NotAccept, // 366\r\n\t\t\tAcceptConditions.NotAccept, // 367\r\n\t\t\tAcceptConditions.NotAccept, // 368\r\n\t\t\tAcceptConditions.NotAccept, // 369\r\n\t\t\tAcceptConditions.NotAccept, // 370\r\n\t\t\tAcceptConditions.NotAccept, // 371\r\n\t\t\tAcceptConditions.NotAccept, // 372\r\n\t\t\tAcceptConditions.NotAccept, // 373\r\n\t\t\tAcceptConditions.NotAccept, // 374\r\n\t\t\tAcceptConditions.NotAccept, // 375\r\n\t\t\tAcceptConditions.NotAccept, // 376\r\n\t\t\tAcceptConditions.NotAccept, // 377\r\n\t\t\tAcceptConditions.NotAccept, // 378\r\n\t\t\tAcceptConditions.NotAccept, // 379\r\n\t\t\tAcceptConditions.NotAccept, // 380\r\n\t\t\tAcceptConditions.NotAccept, // 381\r\n\t\t\tAcceptConditions.NotAccept, // 382\r\n\t\t\tAcceptConditions.NotAccept, // 383\r\n\t\t\tAcceptConditions.NotAccept, // 384\r\n\t\t\tAcceptConditions.NotAccept, // 385\r\n\t\t\tAcceptConditions.NotAccept, // 386\r\n\t\t\tAcceptConditions.NotAccept, // 387\r\n\t\t\tAcceptConditions.NotAccept, // 388\r\n\t\t\tAcceptConditions.NotAccept, // 389\r\n\t\t\tAcceptConditions.NotAccept, // 390\r\n\t\t\tAcceptConditions.NotAccept, // 391\r\n\t\t\tAcceptConditions.NotAccept, // 392\r\n\t\t\tAcceptConditions.NotAccept, // 393\r\n\t\t\tAcceptConditions.NotAccept, // 394\r\n\t\t\tAcceptConditions.NotAccept, // 395\r\n\t\t\tAcceptConditions.NotAccept, // 396\r\n\t\t\tAcceptConditions.NotAccept, // 397\r\n\t\t\tAcceptConditions.NotAccept, // 398\r\n\t\t\tAcceptConditions.NotAccept, // 399\r\n\t\t\tAcceptConditions.NotAccept, // 400\r\n\t\t\tAcceptConditions.NotAccept, // 401\r\n\t\t\tAcceptConditions.NotAccept, // 402\r\n\t\t\tAcceptConditions.NotAccept, // 403\r\n\t\t\tAcceptConditions.NotAccept, // 404\r\n\t\t\tAcceptConditions.NotAccept, // 405\r\n\t\t\tAcceptConditions.NotAccept, // 406\r\n\t\t\tAcceptConditions.NotAccept, // 407\r\n\t\t\tAcceptConditions.NotAccept, // 408\r\n\t\t\tAcceptConditions.NotAccept, // 409\r\n\t\t\tAcceptConditions.NotAccept, // 410\r\n\t\t\tAcceptConditions.NotAccept, // 411\r\n\t\t\tAcceptConditions.NotAccept, // 412\r\n\t\t\tAcceptConditions.NotAccept, // 413\r\n\t\t\tAcceptConditions.NotAccept, // 414\r\n\t\t\tAcceptConditions.NotAccept, // 415\r\n\t\t\tAcceptConditions.NotAccept, // 416\r\n\t\t\tAcceptConditions.NotAccept, // 417\r\n\t\t\tAcceptConditions.NotAccept, // 418\r\n\t\t\tAcceptConditions.NotAccept, // 419\r\n\t\t\tAcceptConditions.NotAccept, // 420\r\n\t\t\tAcceptConditions.NotAccept, // 421\r\n\t\t\tAcceptConditions.NotAccept, // 422\r\n\t\t\tAcceptConditions.NotAccept, // 423\r\n\t\t\tAcceptConditions.NotAccept, // 424\r\n\t\t\tAcceptConditions.NotAccept, // 425\r\n\t\t\tAcceptConditions.NotAccept, // 426\r\n\t\t\tAcceptConditions.NotAccept, // 427\r\n\t\t\tAcceptConditions.NotAccept, // 428\r\n\t\t\tAcceptConditions.NotAccept, // 429\r\n\t\t\tAcceptConditions.NotAccept, // 430\r\n\t\t\tAcceptConditions.NotAccept, // 431\r\n\t\t\tAcceptConditions.NotAccept, // 432\r\n\t\t\tAcceptConditions.NotAccept, // 433\r\n\t\t\tAcceptConditions.NotAccept, // 434\r\n\t\t\tAcceptConditions.NotAccept, // 435\r\n\t\t\tAcceptConditions.NotAccept, // 436\r\n\t\t\tAcceptConditions.NotAccept, // 437\r\n\t\t\tAcceptConditions.NotAccept, // 438\r\n\t\t\tAcceptConditions.NotAccept, // 439\r\n\t\t\tAcceptConditions.NotAccept, // 440\r\n\t\t\tAcceptConditions.NotAccept, // 441\r\n\t\t\tAcceptConditions.NotAccept, // 442\r\n\t\t\tAcceptConditions.NotAccept, // 443\r\n\t\t\tAcceptConditions.NotAccept, // 444\r\n\t\t\tAcceptConditions.NotAccept, // 445\r\n\t\t\tAcceptConditions.NotAccept, // 446\r\n\t\t\tAcceptConditions.NotAccept, // 447\r\n\t\t\tAcceptConditions.NotAccept, // 448\r\n\t\t\tAcceptConditions.NotAccept, // 449\r\n\t\t\tAcceptConditions.NotAccept, // 450\r\n\t\t\tAcceptConditions.NotAccept, // 451\r\n\t\t\tAcceptConditions.NotAccept, // 452\r\n\t\t\tAcceptConditions.NotAccept, // 453\r\n\t\t\tAcceptConditions.NotAccept, // 454\r\n\t\t\tAcceptConditions.NotAccept, // 455\r\n\t\t\tAcceptConditions.NotAccept, // 456\r\n\t\t\tAcceptConditions.NotAccept, // 457\r\n\t\t\tAcceptConditions.NotAccept, // 458\r\n\t\t\tAcceptConditions.NotAccept, // 459\r\n\t\t\tAcceptConditions.NotAccept, // 460\r\n\t\t\tAcceptConditions.NotAccept, // 461\r\n\t\t\tAcceptConditions.NotAccept, // 462\r\n\t\t\tAcceptConditions.NotAccept, // 463\r\n\t\t\tAcceptConditions.NotAccept, // 464\r\n\t\t\tAcceptConditions.NotAccept, // 465\r\n\t\t\tAcceptConditions.NotAccept, // 466\r\n\t\t\tAcceptConditions.NotAccept, // 467\r\n\t\t\tAcceptConditions.NotAccept, // 468\r\n\t\t\tAcceptConditions.NotAccept, // 469\r\n\t\t\tAcceptConditions.NotAccept, // 470\r\n\t\t\tAcceptConditions.NotAccept, // 471\r\n\t\t\tAcceptConditions.NotAccept, // 472\r\n\t\t\tAcceptConditions.NotAccept, // 473\r\n\t\t\tAcceptConditions.NotAccept, // 474\r\n\t\t\tAcceptConditions.NotAccept, // 475\r\n\t\t\tAcceptConditions.NotAccept, // 476\r\n\t\t\tAcceptConditions.NotAccept, // 477\r\n\t\t\tAcceptConditions.NotAccept, // 478\r\n\t\t\tAcceptConditions.NotAccept, // 479\r\n\t\t\tAcceptConditions.NotAccept, // 480\r\n\t\t\tAcceptConditions.NotAccept, // 481\r\n\t\t\tAcceptConditions.NotAccept, // 482\r\n\t\t\tAcceptConditions.NotAccept, // 483\r\n\t\t\tAcceptConditions.NotAccept, // 484\r\n\t\t\tAcceptConditions.NotAccept, // 485\r\n\t\t\tAcceptConditions.NotAccept, // 486\r\n\t\t\tAcceptConditions.NotAccept, // 487\r\n\t\t\tAcceptConditions.NotAccept, // 488\r\n\t\t\tAcceptConditions.NotAccept, // 489\r\n\t\t\tAcceptConditions.NotAccept, // 490\r\n\t\t\tAcceptConditions.NotAccept, // 491\r\n\t\t\tAcceptConditions.NotAccept, // 492\r\n\t\t\tAcceptConditions.NotAccept, // 493\r\n\t\t\tAcceptConditions.NotAccept, // 494\r\n\t\t\tAcceptConditions.NotAccept, // 495\r\n\t\t\tAcceptConditions.NotAccept, // 496\r\n\t\t\tAcceptConditions.NotAccept, // 497\r\n\t\t\tAcceptConditions.NotAccept, // 498\r\n\t\t\tAcceptConditions.NotAccept, // 499\r\n\t\t\tAcceptConditions.NotAccept, // 500\r\n\t\t\tAcceptConditions.NotAccept, // 501\r\n\t\t\tAcceptConditions.NotAccept, // 502\r\n\t\t\tAcceptConditions.NotAccept, // 503\r\n\t\t\tAcceptConditions.NotAccept, // 504\r\n\t\t\tAcceptConditions.NotAccept, // 505\r\n\t\t\tAcceptConditions.NotAccept, // 506\r\n\t\t\tAcceptConditions.NotAccept, // 507\r\n\t\t\tAcceptConditions.NotAccept, // 508\r\n\t\t\tAcceptConditions.NotAccept, // 509\r\n\t\t\tAcceptConditions.NotAccept, // 510\r\n\t\t\tAcceptConditions.NotAccept, // 511\r\n\t\t\tAcceptConditions.NotAccept, // 512\r\n\t\t\tAcceptConditions.NotAccept, // 513\r\n\t\t\tAcceptConditions.NotAccept, // 514\r\n\t\t\tAcceptConditions.NotAccept, // 515\r\n\t\t\tAcceptConditions.NotAccept, // 516\r\n\t\t\tAcceptConditions.NotAccept, // 517\r\n\t\t\tAcceptConditions.NotAccept, // 518\r\n\t\t\tAcceptConditions.NotAccept, // 519\r\n\t\t\tAcceptConditions.NotAccept, // 520\r\n\t\t\tAcceptConditions.NotAccept, // 521\r\n\t\t\tAcceptConditions.NotAccept, // 522\r\n\t\t\tAcceptConditions.NotAccept, // 523\r\n\t\t\tAcceptConditions.NotAccept, // 524\r\n\t\t\tAcceptConditions.NotAccept, // 525\r\n\t\t\tAcceptConditions.NotAccept, // 526\r\n\t\t\tAcceptConditions.NotAccept, // 527\r\n\t\t\tAcceptConditions.NotAccept, // 528\r\n\t\t\tAcceptConditions.NotAccept, // 529\r\n\t\t\tAcceptConditions.NotAccept, // 530\r\n\t\t\tAcceptConditions.NotAccept, // 531\r\n\t\t\tAcceptConditions.NotAccept, // 532\r\n\t\t\tAcceptConditions.NotAccept, // 533\r\n\t\t\tAcceptConditions.NotAccept, // 534\r\n\t\t\tAcceptConditions.NotAccept, // 535\r\n\t\t\tAcceptConditions.NotAccept, // 536\r\n\t\t\tAcceptConditions.NotAccept, // 537\r\n\t\t\tAcceptConditions.NotAccept, // 538\r\n\t\t\tAcceptConditions.NotAccept, // 539\r\n\t\t\tAcceptConditions.NotAccept, // 540\r\n\t\t\tAcceptConditions.NotAccept, // 541\r\n\t\t\tAcceptConditions.NotAccept, // 542\r\n\t\t\tAcceptConditions.NotAccept, // 543\r\n\t\t\tAcceptConditions.NotAccept, // 544\r\n\t\t\tAcceptConditions.NotAccept, // 545\r\n\t\t\tAcceptConditions.NotAccept, // 546\r\n\t\t\tAcceptConditions.NotAccept, // 547\r\n\t\t\tAcceptConditions.NotAccept, // 548\r\n\t\t\tAcceptConditions.NotAccept, // 549\r\n\t\t\tAcceptConditions.NotAccept, // 550\r\n\t\t\tAcceptConditions.NotAccept, // 551\r\n\t\t\tAcceptConditions.NotAccept, // 552\r\n\t\t\tAcceptConditions.NotAccept, // 553\r\n\t\t\tAcceptConditions.NotAccept, // 554\r\n\t\t\tAcceptConditions.NotAccept, // 555\r\n\t\t\tAcceptConditions.NotAccept, // 556\r\n\t\t\tAcceptConditions.NotAccept, // 557\r\n\t\t\tAcceptConditions.NotAccept, // 558\r\n\t\t\tAcceptConditions.NotAccept, // 559\r\n\t\t\tAcceptConditions.NotAccept, // 560\r\n\t\t\tAcceptConditions.NotAccept, // 561\r\n\t\t\tAcceptConditions.NotAccept, // 562\r\n\t\t\tAcceptConditions.NotAccept, // 563\r\n\t\t\tAcceptConditions.NotAccept, // 564\r\n\t\t\tAcceptConditions.NotAccept, // 565\r\n\t\t\tAcceptConditions.NotAccept, // 566\r\n\t\t\tAcceptConditions.NotAccept, // 567\r\n\t\t\tAcceptConditions.NotAccept, // 568\r\n\t\t\tAcceptConditions.NotAccept, // 569\r\n\t\t\tAcceptConditions.NotAccept, // 570\r\n\t\t\tAcceptConditions.NotAccept, // 571\r\n\t\t\tAcceptConditions.NotAccept, // 572\r\n\t\t\tAcceptConditions.NotAccept, // 573\r\n\t\t\tAcceptConditions.NotAccept, // 574\r\n\t\t\tAcceptConditions.NotAccept, // 575\r\n\t\t\tAcceptConditions.NotAccept, // 576\r\n\t\t\tAcceptConditions.NotAccept, // 577\r\n\t\t\tAcceptConditions.NotAccept, // 578\r\n\t\t\tAcceptConditions.NotAccept, // 579\r\n\t\t\tAcceptConditions.NotAccept, // 580\r\n\t\t\tAcceptConditions.NotAccept, // 581\r\n\t\t\tAcceptConditions.NotAccept, // 582\r\n\t\t\tAcceptConditions.NotAccept, // 583\r\n\t\t\tAcceptConditions.NotAccept, // 584\r\n\t\t\tAcceptConditions.NotAccept, // 585\r\n\t\t\tAcceptConditions.NotAccept, // 586\r\n\t\t\tAcceptConditions.NotAccept, // 587\r\n\t\t\tAcceptConditions.NotAccept, // 588\r\n\t\t\tAcceptConditions.NotAccept, // 589\r\n\t\t\tAcceptConditions.NotAccept, // 590\r\n\t\t\tAcceptConditions.NotAccept, // 591\r\n\t\t\tAcceptConditions.NotAccept, // 592\r\n\t\t\tAcceptConditions.NotAccept, // 593\r\n\t\t\tAcceptConditions.NotAccept, // 594\r\n\t\t\tAcceptConditions.NotAccept, // 595\r\n\t\t\tAcceptConditions.NotAccept, // 596\r\n\t\t\tAcceptConditions.NotAccept, // 597\r\n\t\t\tAcceptConditions.NotAccept, // 598\r\n\t\t\tAcceptConditions.NotAccept, // 599\r\n\t\t\tAcceptConditions.NotAccept, // 600\r\n\t\t\tAcceptConditions.NotAccept, // 601\r\n\t\t\tAcceptConditions.NotAccept, // 602\r\n\t\t\tAcceptConditions.NotAccept, // 603\r\n\t\t\tAcceptConditions.NotAccept, // 604\r\n\t\t\tAcceptConditions.NotAccept, // 605\r\n\t\t\tAcceptConditions.NotAccept, // 606\r\n\t\t\tAcceptConditions.NotAccept, // 607\r\n\t\t\tAcceptConditions.NotAccept, // 608\r\n\t\t\tAcceptConditions.NotAccept, // 609\r\n\t\t\tAcceptConditions.NotAccept, // 610\r\n\t\t\tAcceptConditions.NotAccept, // 611\r\n\t\t\tAcceptConditions.NotAccept, // 612\r\n\t\t\tAcceptConditions.NotAccept, // 613\r\n\t\t\tAcceptConditions.NotAccept, // 614\r\n\t\t\tAcceptConditions.NotAccept, // 615\r\n\t\t\tAcceptConditions.NotAccept, // 616\r\n\t\t\tAcceptConditions.NotAccept, // 617\r\n\t\t\tAcceptConditions.NotAccept, // 618\r\n\t\t\tAcceptConditions.NotAccept, // 619\r\n\t\t\tAcceptConditions.NotAccept, // 620\r\n\t\t\tAcceptConditions.NotAccept, // 621\r\n\t\t\tAcceptConditions.NotAccept, // 622\r\n\t\t\tAcceptConditions.Accept, // 623\r\n\t\t\tAcceptConditions.Accept, // 624\r\n\t\t\tAcceptConditions.Accept, // 625\r\n\t\t\tAcceptConditions.Accept, // 626\r\n\t\t\tAcceptConditions.Accept, // 627\r\n\t\t\tAcceptConditions.Accept, // 628\r\n\t\t\tAcceptConditions.Accept, // 629\r\n\t\t\tAcceptConditions.Accept, // 630\r\n\t\t\tAcceptConditions.Accept, // 631\r\n\t\t\tAcceptConditions.Accept, // 632\r\n\t\t\tAcceptConditions.Accept, // 633\r\n\t\t\tAcceptConditions.Accept, // 634\r\n\t\t\tAcceptConditions.NotAccept, // 635\r\n\t\t\tAcceptConditions.Accept, // 636\r\n\t\t\tAcceptConditions.Accept, // 637\r\n\t\t\tAcceptConditions.Accept, // 638\r\n\t\t\tAcceptConditions.Accept, // 639\r\n\t\t\tAcceptConditions.Accept, // 640\r\n\t\t\tAcceptConditions.Accept, // 641\r\n\t\t\tAcceptConditions.Accept, // 642\r\n\t\t\tAcceptConditions.Accept, // 643\r\n\t\t\tAcceptConditions.Accept, // 644\r\n\t\t\tAcceptConditions.Accept, // 645\r\n\t\t\tAcceptConditions.Accept, // 646\r\n\t\t\tAcceptConditions.Accept, // 647\r\n\t\t\tAcceptConditions.Accept, // 648\r\n\t\t\tAcceptConditions.Accept, // 649\r\n\t\t\tAcceptConditions.Accept, // 650\r\n\t\t\tAcceptConditions.Accept, // 651\r\n\t\t\tAcceptConditions.Accept, // 652\r\n\t\t\tAcceptConditions.Accept, // 653\r\n\t\t\tAcceptConditions.Accept, // 654\r\n\t\t\tAcceptConditions.Accept, // 655\r\n\t\t\tAcceptConditions.Accept, // 656\r\n\t\t\tAcceptConditions.Accept, // 657\r\n\t\t\tAcceptConditions.Accept, // 658\r\n\t\t\tAcceptConditions.NotAccept, // 659\r\n\t\t\tAcceptConditions.Accept, // 660\r\n\t\t\tAcceptConditions.Accept, // 661\r\n\t\t\tAcceptConditions.NotAccept, // 662\r\n\t\t\tAcceptConditions.Accept, // 663\r\n\t\t\tAcceptConditions.Accept, // 664\r\n\t\t\tAcceptConditions.Accept, // 665\r\n\t\t\tAcceptConditions.NotAccept, // 666\r\n\t\t\tAcceptConditions.Accept, // 667\r\n\t\t\tAcceptConditions.Accept, // 668\r\n\t\t\tAcceptConditions.Accept, // 669\r\n\t\t\tAcceptConditions.Accept, // 670\r\n\t\t\tAcceptConditions.Accept, // 671\r\n\t\t\tAcceptConditions.NotAccept, // 672\r\n\t\t\tAcceptConditions.Accept, // 673\r\n\t\t\tAcceptConditions.Accept, // 674\r\n\t\t\tAcceptConditions.Accept, // 675\r\n\t\t\tAcceptConditions.Accept, // 676\r\n\t\t\tAcceptConditions.NotAccept, // 677\r\n\t\t\tAcceptConditions.NotAccept, // 678\r\n\t\t\tAcceptConditions.Accept, // 679\r\n\t\t\tAcceptConditions.Accept, // 680\r\n\t\t\tAcceptConditions.Accept, // 681\r\n\t\t\tAcceptConditions.Accept, // 682\r\n\t\t\tAcceptConditions.Accept, // 683\r\n\t\t\tAcceptConditions.NotAccept, // 684\r\n\t\t\tAcceptConditions.NotAccept, // 685\r\n\t\t\tAcceptConditions.NotAccept, // 686\r\n\t\t\tAcceptConditions.NotAccept, // 687\r\n\t\t\tAcceptConditions.NotAccept, // 688\r\n\t\t\tAcceptConditions.NotAccept, // 689\r\n\t\t\tAcceptConditions.NotAccept, // 690\r\n\t\t\tAcceptConditions.NotAccept, // 691\r\n\t\t\tAcceptConditions.NotAccept, // 692\r\n\t\t\tAcceptConditions.NotAccept, // 693\r\n\t\t\tAcceptConditions.NotAccept, // 694\r\n\t\t\tAcceptConditions.NotAccept, // 695\r\n\t\t\tAcceptConditions.NotAccept, // 696\r\n\t\t\tAcceptConditions.NotAccept, // 697\r\n\t\t\tAcceptConditions.NotAccept, // 698\r\n\t\t\tAcceptConditions.NotAccept, // 699\r\n\t\t\tAcceptConditions.NotAccept, // 700\r\n\t\t\tAcceptConditions.NotAccept, // 701\r\n\t\t\tAcceptConditions.NotAccept, // 702\r\n\t\t\tAcceptConditions.NotAccept, // 703\r\n\t\t\tAcceptConditions.NotAccept, // 704\r\n\t\t\tAcceptConditions.NotAccept, // 705\r\n\t\t\tAcceptConditions.NotAccept, // 706\r\n\t\t\tAcceptConditions.NotAccept, // 707\r\n\t\t\tAcceptConditions.NotAccept, // 708\r\n\t\t\tAcceptConditions.NotAccept, // 709\r\n\t\t\tAcceptConditions.NotAccept, // 710\r\n\t\t\tAcceptConditions.NotAccept, // 711\r\n\t\t\tAcceptConditions.NotAccept, // 712\r\n\t\t\tAcceptConditions.NotAccept, // 713\r\n\t\t\tAcceptConditions.NotAccept, // 714\r\n\t\t\tAcceptConditions.NotAccept, // 715\r\n\t\t\tAcceptConditions.NotAccept, // 716\r\n\t\t\tAcceptConditions.NotAccept, // 717\r\n\t\t\tAcceptConditions.NotAccept, // 718\r\n\t\t\tAcceptConditions.NotAccept, // 719\r\n\t\t\tAcceptConditions.NotAccept, // 720\r\n\t\t\tAcceptConditions.NotAccept, // 721\r\n\t\t\tAcceptConditions.NotAccept, // 722\r\n\t\t\tAcceptConditions.NotAccept, // 723\r\n\t\t\tAcceptConditions.NotAccept, // 724\r\n\t\t\tAcceptConditions.NotAccept, // 725\r\n\t\t\tAcceptConditions.NotAccept, // 726\r\n\t\t\tAcceptConditions.NotAccept, // 727\r\n\t\t\tAcceptConditions.NotAccept, // 728\r\n\t\t\tAcceptConditions.NotAccept, // 729\r\n\t\t\tAcceptConditions.NotAccept, // 730\r\n\t\t\tAcceptConditions.Accept, // 731\r\n\t\t\tAcceptConditions.Accept, // 732\r\n\t\t\tAcceptConditions.Accept, // 733\r\n\t\t\tAcceptConditions.Accept, // 734\r\n\t\t\tAcceptConditions.Accept, // 735\r\n\t\t\tAcceptConditions.NotAccept, // 736\r\n\t\t\tAcceptConditions.Accept, // 737\r\n\t\t\tAcceptConditions.Accept, // 738\r\n\t\t\tAcceptConditions.Accept, // 739\r\n\t\t\tAcceptConditions.Accept, // 740\r\n\t\t\tAcceptConditions.Accept, // 741\r\n\t\t\tAcceptConditions.Accept, // 742\r\n\t\t\tAcceptConditions.Accept, // 743\r\n\t\t\tAcceptConditions.Accept, // 744\r\n\t\t\tAcceptConditions.NotAccept, // 745\r\n\t\t\tAcceptConditions.Accept, // 746\r\n\t\t\tAcceptConditions.Accept, // 747\r\n\t\t\tAcceptConditions.Accept, // 748\r\n\t\t\tAcceptConditions.Accept, // 749\r\n\t\t\tAcceptConditions.Accept, // 750\r\n\t\t\tAcceptConditions.NotAccept, // 751\r\n\t\t\tAcceptConditions.Accept, // 752\r\n\t\t\tAcceptConditions.NotAccept, // 753\r\n\t\t\tAcceptConditions.NotAccept, // 754\r\n\t\t\tAcceptConditions.NotAccept, // 755\r\n\t\t\tAcceptConditions.NotAccept, // 756\r\n\t\t\tAcceptConditions.NotAccept, // 757\r\n\t\t\tAcceptConditions.NotAccept, // 758\r\n\t\t\tAcceptConditions.NotAccept, // 759\r\n\t\t\tAcceptConditions.NotAccept, // 760\r\n\t\t\tAcceptConditions.NotAccept, // 761\r\n\t\t\tAcceptConditions.NotAccept, // 762\r\n\t\t\tAcceptConditions.NotAccept, // 763\r\n\t\t\tAcceptConditions.NotAccept, // 764\r\n\t\t\tAcceptConditions.Accept, // 765\r\n\t\t\tAcceptConditions.Accept, // 766\r\n\t\t\tAcceptConditions.NotAccept, // 767\r\n\t\t\tAcceptConditions.Accept, // 768\r\n\t\t\tAcceptConditions.Accept, // 769\r\n\t\t\tAcceptConditions.Accept, // 770\r\n\t\t\tAcceptConditions.Accept, // 771\r\n\t\t\tAcceptConditions.Accept, // 772\r\n\t\t\tAcceptConditions.Accept, // 773\r\n\t\t\tAcceptConditions.Accept, // 774\r\n\t\t\tAcceptConditions.Accept, // 775\r\n\t\t\tAcceptConditions.Accept, // 776\r\n\t\t\tAcceptConditions.Accept, // 777\r\n\t\t\tAcceptConditions.Accept, // 778\r\n\t\t\tAcceptConditions.NotAccept, // 779\r\n\t\t\tAcceptConditions.Accept, // 780\r\n\t\t\tAcceptConditions.NotAccept, // 781\r\n\t\t\tAcceptConditions.NotAccept, // 782\r\n\t\t\tAcceptConditions.NotAccept, // 783\r\n\t\t\tAcceptConditions.NotAccept, // 784\r\n\t\t\tAcceptConditions.Accept, // 785\r\n\t\t\tAcceptConditions.NotAccept, // 786\r\n\t\t\tAcceptConditions.Accept, // 787\r\n\t\t\tAcceptConditions.Accept, // 788\r\n\t\t\tAcceptConditions.Accept, // 789\r\n\t\t\tAcceptConditions.Accept, // 790\r\n\t\t\tAcceptConditions.Accept, // 791\r\n\t\t\tAcceptConditions.Accept, // 792\r\n\t\t\tAcceptConditions.NotAccept, // 793\r\n\t\t\tAcceptConditions.Accept, // 794\r\n\t\t\tAcceptConditions.NotAccept, // 795\r\n\t\t\tAcceptConditions.NotAccept, // 796\r\n\t\t\tAcceptConditions.NotAccept, // 797\r\n\t\t\tAcceptConditions.Accept, // 798\r\n\t\t\tAcceptConditions.Accept, // 799\r\n\t\t\tAcceptConditions.Accept, // 800\r\n\t\t\tAcceptConditions.Accept, // 801\r\n\t\t\tAcceptConditions.Accept, // 802\r\n\t\t\tAcceptConditions.NotAccept, // 803\r\n\t\t\tAcceptConditions.Accept, // 804\r\n\t\t\tAcceptConditions.NotAccept, // 805\r\n\t\t\tAcceptConditions.NotAccept, // 806\r\n\t\t\tAcceptConditions.NotAccept, // 807\r\n\t\t\tAcceptConditions.Accept, // 808\r\n\t\t\tAcceptConditions.Accept, // 809\r\n\t\t\tAcceptConditions.Accept, // 810\r\n\t\t\tAcceptConditions.NotAccept, // 811\r\n\t\t\tAcceptConditions.Accept, // 812\r\n\t\t\tAcceptConditions.NotAccept, // 813\r\n\t\t\tAcceptConditions.NotAccept, // 814\r\n\t\t\tAcceptConditions.Accept, // 815\r\n\t\t\tAcceptConditions.Accept, // 816\r\n\t\t\tAcceptConditions.NotAccept, // 817\r\n\t\t\tAcceptConditions.NotAccept, // 818\r\n\t\t\tAcceptConditions.NotAccept, // 819\r\n\t\t\tAcceptConditions.Accept, // 820\r\n\t\t\tAcceptConditions.Accept, // 821\r\n\t\t\tAcceptConditions.NotAccept, // 822\r\n\t\t\tAcceptConditions.NotAccept, // 823\r\n\t\t\tAcceptConditions.Accept, // 824\r\n\t\t\tAcceptConditions.Accept, // 825\r\n\t\t\tAcceptConditions.NotAccept, // 826\r\n\t\t\tAcceptConditions.NotAccept, // 827\r\n\t\t\tAcceptConditions.Accept, // 828\r\n\t\t\tAcceptConditions.Accept, // 829\r\n\t\t\tAcceptConditions.NotAccept, // 830\r\n\t\t\tAcceptConditions.NotAccept, // 831\r\n\t\t\tAcceptConditions.Accept, // 832\r\n\t\t\tAcceptConditions.Accept, // 833\r\n\t\t\tAcceptConditions.NotAccept, // 834\r\n\t\t\tAcceptConditions.NotAccept, // 835\r\n\t\t\tAcceptConditions.Accept, // 836\r\n\t\t\tAcceptConditions.NotAccept, // 837\r\n\t\t\tAcceptConditions.NotAccept, // 838\r\n\t\t\tAcceptConditions.Accept, // 839\r\n\t\t\tAcceptConditions.NotAccept, // 840\r\n\t\t\tAcceptConditions.Accept, // 841\r\n\t\t\tAcceptConditions.NotAccept, // 842\r\n\t\t\tAcceptConditions.Accept, // 843\r\n\t\t\tAcceptConditions.NotAccept, // 844\r\n\t\t\tAcceptConditions.Accept, // 845\r\n\t\t\tAcceptConditions.NotAccept, // 846\r\n\t\t\tAcceptConditions.NotAccept, // 847\r\n\t\t\tAcceptConditions.NotAccept, // 848\r\n\t\t\tAcceptConditions.NotAccept, // 849\r\n\t\t\tAcceptConditions.NotAccept, // 850\r\n\t\t\tAcceptConditions.NotAccept, // 851\r\n\t\t\tAcceptConditions.NotAccept, // 852\r\n\t\t\tAcceptConditions.Accept, // 853\r\n\t\t\tAcceptConditions.Accept, // 854\r\n\t\t\tAcceptConditions.Accept, // 855\r\n\t\t\tAcceptConditions.Accept, // 856\r\n\t\t\tAcceptConditions.Accept, // 857\r\n\t\t\tAcceptConditions.Accept, // 858\r\n\t\t\tAcceptConditions.Accept, // 859\r\n\t\t\tAcceptConditions.Accept, // 860\r\n\t\t\tAcceptConditions.Accept, // 861\r\n\t\t\tAcceptConditions.Accept, // 862\r\n\t\t\tAcceptConditions.Accept, // 863\r\n\t\t\tAcceptConditions.Accept, // 864\r\n\t\t\tAcceptConditions.Accept, // 865\r\n\t\t\tAcceptConditions.Accept, // 866\r\n\t\t\tAcceptConditions.Accept, // 867\r\n\t\t\tAcceptConditions.Accept, // 868\r\n\t\t\tAcceptConditions.Accept, // 869\r\n\t\t\tAcceptConditions.Accept, // 870\r\n\t\t\tAcceptConditions.Accept, // 871\r\n\t\t\tAcceptConditions.Accept, // 872\r\n\t\t\tAcceptConditions.Accept, // 873\r\n\t\t\tAcceptConditions.NotAccept, // 874\r\n\t\t\tAcceptConditions.NotAccept, // 875\r\n\t\t\tAcceptConditions.NotAccept, // 876\r\n\t\t\tAcceptConditions.NotAccept, // 877\r\n\t\t\tAcceptConditions.NotAccept, // 878\r\n\t\t\tAcceptConditions.Accept, // 879\r\n\t\t\tAcceptConditions.Accept, // 880\r\n\t\t\tAcceptConditions.Accept, // 881\r\n\t\t\tAcceptConditions.Accept, // 882\r\n\t\t\tAcceptConditions.Accept, // 883\r\n\t\t\tAcceptConditions.Accept, // 884\r\n\t\t\tAcceptConditions.Accept, // 885\r\n\t\t\tAcceptConditions.Accept, // 886\r\n\t\t\tAcceptConditions.Accept, // 887\r\n\t\t\tAcceptConditions.Accept, // 888\r\n\t\t\tAcceptConditions.Accept, // 889\r\n\t\t\tAcceptConditions.Accept, // 890\r\n\t\t\tAcceptConditions.Accept, // 891\r\n\t\t\tAcceptConditions.Accept, // 892\r\n\t\t\tAcceptConditions.Accept, // 893\r\n\t\t\tAcceptConditions.NotAccept, // 894\r\n\t\t\tAcceptConditions.NotAccept, // 895\r\n\t\t\tAcceptConditions.Accept, // 896\r\n\t\t\tAcceptConditions.Accept, // 897\r\n\t\t\tAcceptConditions.Accept, // 898\r\n\t\t\tAcceptConditions.Accept, // 899\r\n\t\t\tAcceptConditions.Accept, // 900\r\n\t\t\tAcceptConditions.Accept, // 901\r\n\t\t\tAcceptConditions.NotAccept, // 902\r\n\t\t\tAcceptConditions.NotAccept, // 903\r\n\t\t\tAcceptConditions.Accept, // 904\r\n\t\t\tAcceptConditions.Accept, // 905\r\n\t\t\tAcceptConditions.Accept, // 906\r\n\t\t\tAcceptConditions.NotAccept, // 907\r\n\t\t\tAcceptConditions.Accept, // 908\r\n\t\t\tAcceptConditions.NotAccept, // 909\r\n\t\t\tAcceptConditions.Accept, // 910\r\n\t\t\tAcceptConditions.NotAccept, // 911\r\n\t\t\tAcceptConditions.Accept, // 912\r\n\t\t\tAcceptConditions.NotAccept, // 913\r\n\t\t\tAcceptConditions.NotAccept, // 914\r\n\t\t\tAcceptConditions.NotAccept, // 915\r\n\t\t\tAcceptConditions.NotAccept, // 916\r\n\t\t\tAcceptConditions.NotAccept, // 917\r\n\t\t\tAcceptConditions.NotAccept, // 918\r\n\t\t\tAcceptConditions.Accept, // 919\r\n\t\t\tAcceptConditions.Accept, // 920\r\n\t\t\tAcceptConditions.Accept, // 921\r\n\t\t\tAcceptConditions.Accept, // 922\r\n\t\t\tAcceptConditions.Accept, // 923\r\n\t\t\tAcceptConditions.Accept, // 924\r\n\t\t\tAcceptConditions.Accept, // 925\r\n\t\t\tAcceptConditions.Accept, // 926\r\n\t\t\tAcceptConditions.Accept, // 927\r\n\t\t\tAcceptConditions.Accept, // 928\r\n\t\t\tAcceptConditions.Accept, // 929\r\n\t\t\tAcceptConditions.Accept, // 930\r\n\t\t\tAcceptConditions.NotAccept, // 931\r\n\t\t\tAcceptConditions.NotAccept, // 932\r\n\t\t\tAcceptConditions.NotAccept, // 933\r\n\t\t\tAcceptConditions.NotAccept, // 934\r\n\t\t\tAcceptConditions.NotAccept, // 935\r\n\t\t\tAcceptConditions.NotAccept, // 936\r\n\t\t\tAcceptConditions.NotAccept, // 937\r\n\t\t\tAcceptConditions.NotAccept, // 938\r\n\t\t\tAcceptConditions.NotAccept, // 939\r\n\t\t\tAcceptConditions.NotAccept, // 940\r\n\t\t\tAcceptConditions.NotAccept, // 941\r\n\t\t\tAcceptConditions.NotAccept, // 942\r\n\t\t\tAcceptConditions.NotAccept, // 943\r\n\t\t\tAcceptConditions.NotAccept, // 944\r\n\t\t\tAcceptConditions.NotAccept, // 945\r\n\t\t\tAcceptConditions.NotAccept, // 946\r\n\t\t\tAcceptConditions.Accept, // 947\r\n\t\t\tAcceptConditions.Accept, // 948\r\n\t\t\tAcceptConditions.Accept, // 949\r\n\t\t\tAcceptConditions.Accept, // 950\r\n\t\t\tAcceptConditions.NotAccept, // 951\r\n\t\t\tAcceptConditions.Accept, // 952\r\n\t\t\tAcceptConditions.NotAccept, // 953\r\n\t\t\tAcceptConditions.Accept, // 954\r\n\t\t\tAcceptConditions.Accept, // 955\r\n\t\t\tAcceptConditions.Accept, // 956\r\n\t\t\tAcceptConditions.Accept, // 957\r\n\t\t\tAcceptConditions.Accept, // 958\r\n\t\t\tAcceptConditions.NotAccept, // 959\r\n\t\t\tAcceptConditions.Accept, // 960\r\n\t\t\tAcceptConditions.Accept, // 961\r\n\t\t\tAcceptConditions.NotAccept, // 962\r\n\t\t\tAcceptConditions.Accept, // 963\r\n\t\t\tAcceptConditions.Accept, // 964\r\n\t\t\tAcceptConditions.NotAccept, // 965\r\n\t\t\tAcceptConditions.Accept, // 966\r\n\t\t\tAcceptConditions.NotAccept, // 967\r\n\t\t\tAcceptConditions.Accept, // 968\r\n\t\t\tAcceptConditions.NotAccept, // 969\r\n\t\t\tAcceptConditions.Accept, // 970\r\n\t\t\tAcceptConditions.NotAccept, // 971\r\n\t\t\tAcceptConditions.NotAccept, // 972\r\n\t\t\tAcceptConditions.Accept, // 973\r\n\t\t\tAcceptConditions.NotAccept, // 974\r\n\t\t\tAcceptConditions.NotAccept, // 975\r\n\t\t\tAcceptConditions.NotAccept, // 976\r\n\t\t\tAcceptConditions.Accept, // 977\r\n\t\t\tAcceptConditions.NotAccept, // 978\r\n\t\t\tAcceptConditions.Accept, // 979\r\n\t\t\tAcceptConditions.Accept, // 980\r\n\t\t\tAcceptConditions.Accept, // 981\r\n\t\t\tAcceptConditions.Accept, // 982\r\n\t\t\tAcceptConditions.Accept, // 983\r\n\t\t\tAcceptConditions.NotAccept, // 984\r\n\t\t\tAcceptConditions.Accept, // 985\r\n\t\t\tAcceptConditions.Accept, // 986\r\n\t\t\tAcceptConditions.Accept, // 987\r\n\t\t\tAcceptConditions.NotAccept, // 988\r\n\t\t\tAcceptConditions.Accept, // 989\r\n\t\t\tAcceptConditions.NotAccept, // 990\r\n\t\t\tAcceptConditions.Accept, // 991\r\n\t\t\tAcceptConditions.Accept, // 992\r\n\t\t\tAcceptConditions.Accept, // 993\r\n\t\t\tAcceptConditions.NotAccept, // 994\r\n\t\t\tAcceptConditions.Accept, // 995\r\n\t\t\tAcceptConditions.Accept, // 996\r\n\t\t\tAcceptConditions.Accept, // 997\r\n\t\t\tAcceptConditions.Accept, // 998\r\n\t\t\tAcceptConditions.Accept, // 999\r\n\t\t\tAcceptConditions.NotAccept, // 1000\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] colMap = new int[]\r\n\t\t{\r\n\t\t\t4, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 4, 5, 5, \r\n\t\t\t5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r\n\t\t\t1, 5, 5, 5, 5, 5, 5, 5, 6, 7, 5, 8, 3, 9, 2, 10, \r\n\t\t\t11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 5, 5, 5, 5, 5, \r\n\t\t\t21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r\n\t\t\t5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, \r\n\t\t\t5, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, \r\n\t\t\t38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 39, 5, 5, 5, 5, 5, \r\n\t\t\t5, 5\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] rowMap = new int[]\r\n\t\t{\r\n\t\t\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 11, 13, 14, \r\n\t\t\t15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 2, 27, 2, 28, \r\n\t\t\t21, 2, 21, 29, 30, 31, 1, 2, 32, 33, 34, 35, 36, 37, 2, 2, \r\n\t\t\t21, 38, 39, 40, 41, 42, 43, 44, 45, 2, 46, 47, 48, 24, 49, 50, \r\n\t\t\t51, 52, 53, 54, 55, 56, 57, 2, 58, 59, 60, 61, 2, 2, 2, 62, \r\n\t\t\t63, 2, 64, 65, 66, 67, 10, 68, 69, 70, 71, 72, 73, 74, 30, 75, \r\n\t\t\t76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 24, 2, 86, 87, 88, 89, \r\n\t\t\t90, 91, 92, 93, 2, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, \r\n\t\t\t105, 2, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 2, 118, \r\n\t\t\t119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, \r\n\t\t\t135, 2, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, \r\n\t\t\t150, 151, 152, 153, 154, 155, 156, 157, 158, 2, 159, 160, 161, 162, 2, 163, \r\n\t\t\t164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, \r\n\t\t\t19, 180, 181, 182, 183, 184, 41, 185, 186, 187, 188, 189, 190, 191, 192, 193, \r\n\t\t\t194, 24, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 2, 207, \r\n\t\t\t208, 177, 209, 210, 22, 211, 212, 213, 16, 214, 193, 215, 216, 217, 198, 218, \r\n\t\t\t219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, \r\n\t\t\t235, 236, 196, 237, 238, 239, 240, 241, 242, 243, 228, 244, 231, 245, 246, 247, \r\n\t\t\t248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 51, 260, 261, 262, \r\n\t\t\t263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, \r\n\t\t\t279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, \r\n\t\t\t295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, \r\n\t\t\t311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, \r\n\t\t\t327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, \r\n\t\t\t343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 21, \r\n\t\t\t358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, \r\n\t\t\t374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, \r\n\t\t\t390, 391, 392, 393, 394, 23, 43, 59, 72, 395, 396, 397, 398, 399, 400, 401, \r\n\t\t\t402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, \r\n\t\t\t418, 419, 420, 421, 422, 423, 424, 233, 425, 426, 427, 428, 429, 430, 431, 432, \r\n\t\t\t433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, \r\n\t\t\t449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, \r\n\t\t\t465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 400, 479, \r\n\t\t\t480, 481, 482, 483, 484, 485, 158, 486, 487, 488, 489, 490, 491, 492, 493, 494, \r\n\t\t\t495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, \r\n\t\t\t511, 512, 139, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 117, \r\n\t\t\t525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 502, \r\n\t\t\t540, 513, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, \r\n\t\t\t30, 47, 555, 556, 546, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, \r\n\t\t\t568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, \r\n\t\t\t584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, \r\n\t\t\t600, 601, 602, 603, 604, 507, 605, 606, 607, 608, 609, 610, 611, 612, 576, 212, \r\n\t\t\t613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, \r\n\t\t\t629, 630, 631, 632, 633, 634, 203, 635, 636, 637, 447, 638, 639, 640, 641, 642, \r\n\t\t\t643, 644, 449, 645, 646, 647, 648, 203, 649, 447, 650, 651, 652, 653, 499, 654, \r\n\t\t\t655, 500, 656, 657, 533, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, \r\n\t\t\t669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 191, 681, 682, 683, \r\n\t\t\t684, 685, 308, 22, 686, 687, 688, 443, 689, 690, 691, 692, 693, 694, 144, 695, \r\n\t\t\t696, 697, 698, 699, 198, 700, 701, 702, 171, 703, 704, 705, 706, 707, 708, 709, \r\n\t\t\t710, 711, 712, 713, 714, 676, 715, 679, 716, 717, 718, 719, 720, 721, 722, 723, \r\n\t\t\t724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 231, 734, 735, 736, 737, 738, \r\n\t\t\t739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 11, 752, 753, \r\n\t\t\t754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, \r\n\t\t\t770, 771, 772, 773, 774, 775, 666, 776, 777, 778, 779, 780, 781, 782, 783, 784, \r\n\t\t\t785, 786, 787, 788, 680, 789, 790, 703, 791, 792, 793, 794, 795, 796, 797, 798, \r\n\t\t\t799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, \r\n\t\t\t815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, \r\n\t\t\t831, 832, 833, 834, 835, 45, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, \r\n\t\t\t846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, \r\n\t\t\t862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, \r\n\t\t\t878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 807, 889, 890, 891, 892, \r\n\t\t\t893, 894, 895, 896, 897, 21, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, \r\n\t\t\t908, 909, 910, 911, 912, 913, 914, 915, 916\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[,] nextState = new int[,]\r\n\t\t{\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 }\r\n\t\t};\r\n\t\t\r\n\t\t\r\n\t\tprivate static int[] yy_state_dtrans = new int[]\r\n\t\t{\r\n\t\t\t  0\r\n\t\t};\r\n\t\t\r\n\t\t#endregion\r\n\t\t\r\n\t\tpublic Tokens GetNextToken()\r\n\t\t{\r\n\t\t\tint current_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\tint last_accept_state = NoState;\r\n\t\t\tbool is_initial_state = true;\r\n\t\t\t\r\n\t\t\tMarkTokenChunkStart();\r\n\t\t\ttoken_start = token_chunk_start;\r\n\t\t\texpanding_token = false;\r\n\t\t\t\r\n\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t{\r\n\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\tMarkTokenEnd();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tchar lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance();\r\n\t\t\t\tint next_state = nextState[rowMap[current_state], colMap[lookahead]];\r\n\t\t\t\t\r\n\t\t\t\tif (lookahead == EOF && is_initial_state)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Tokens.EOF;\r\n\t\t\t\t}\r\n\t\t\t\tif (next_state != -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent_state = next_state;\r\n\t\t\t\t\tis_initial_state = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last_accept_state == NoState)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Tokens.ERROR;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0)\r\n\t\t\t\t\t\t\tTrimTokenEnd();\r\n\t\t\t\t\t\tMoveToTokenEnd();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (last_accept_state < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSystem.Diagnostics.Debug.Assert(last_accept_state >= 1001);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool accepted = false;\r\n\t\t\t\t\t\t\tyyreturn = Accept0(last_accept_state, out accepted);\r\n\t\t\t\t\t\t\tif (accepted)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yyreturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// token ignored:\r\n\t\t\t\t\t\tis_initial_state = true;\r\n\t\t\t\t\t\tcurrent_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\t\t\t\tlast_accept_state = NoState;\r\n\t\t\t\t\t\tMarkTokenChunkStart();\r\n\t\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} // end of GetNextToken\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generated/jsonLexer.cs",
    "content": "namespace PHP.Library.Json\r\n{\r\n\t#region User Code\r\n\t\r\n\tusing System;\nusing System.Text;\nusing System.Collections.Generic;\n#endregion\r\n\t\r\n\t\r\n\tpublic partial class Lexer\r\n\t{\r\n\t\tpublic enum LexicalStates\r\n\t\t{\r\n\t\t\tINITIAL = 0,\r\n\t\t\tIN_STRING = 1,\r\n\t\t}\r\n\t\t\r\n\t\t[Flags]\r\n\t\tprivate enum AcceptConditions : byte\r\n\t\t{\r\n\t\t\tNotAccept = 0,\r\n\t\t\tAcceptOnStart = 1,\r\n\t\t\tAcceptOnEnd = 2,\r\n\t\t\tAccept = 4\r\n\t\t}\r\n\t\t\r\n\t\tprivate const int NoState = -1;\r\n\t\tprivate const char BOL = (char)128;\r\n\t\tprivate const char EOF = (char)129;\r\n\t\t\r\n\t\tprivate Tokens yyreturn;\r\n\t\t// content of the STRING literal text\r\n\t\tprotected string yytext()\r\n\t\t{\r\n\t\t\treturn new String(buffer, token_start, token_end - token_start);\r\n\t\t}\r\n\t\tprivate StringBuilder str = null;\r\n\t\tprotected string QuotedStringContent{get{return str.ToString();}}\r\n\t\t\r\n\t\tprivate System.IO.TextReader reader;\r\n\t\tprivate char[] buffer = new char[512];\r\n\t\t\r\n\t\t// whether the currently parsed token is being expanded (yymore has been called):\r\n\t\tprivate bool expanding_token;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token starts:\r\n\t\tprivate int token_start;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token chunk starts:\r\n\t\tprivate int token_chunk_start;\r\n\t\t\r\n\t\t// offset in buffer one char behind the currently parsed token (chunk) ending character:\r\n\t\tprivate int token_end;\r\n\t\t\r\n\t\t// offset of the lookahead character (number of characters parsed):\r\n\t\tprivate int lookahead_index;\r\n\t\t\r\n\t\t// number of characters read into the buffer:\r\n\t\tprivate int chars_read;\r\n\t\t\r\n\t\tprivate bool yy_at_bol = false;\r\n\t\t\r\n\t\tpublic LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } \r\n\t\tprivate LexicalStates current_lexical_state;\r\n\t\t\r\n\t\tpublic Lexer(System.IO.TextReader reader)\r\n\t\t{\r\n\t\t\tInitialize(reader, LexicalStates.INITIAL);\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol)\r\n\t\t{\r\n\t\t\tthis.expanding_token = false;\r\n\t\t\tthis.token_start = 0;\r\n\t\t\tthis.chars_read = 0;\r\n\t\t\tthis.lookahead_index = 0;\r\n\t\t\tthis.token_chunk_start = 0;\r\n\t\t\tthis.token_end = 0;\r\n\t\t\tthis.reader = reader;\r\n\t\t\tthis.yy_at_bol = atBol;\r\n\t\t\tthis.current_lexical_state = lexicalState;\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState)\r\n\t\t{\r\n\t\t\tInitialize(reader, lexicalState, false);\r\n\t\t}\r\n\t\t\r\n\t\t#region Accept\r\n\t\t\r\n\t\t#pragma warning disable 162\r\n\t\t\r\n\t\t\r\n\t\tTokens Accept0(int state,out bool accepted)\r\n\t\t{\r\n\t\t\taccepted = true;\r\n\t\t\t\r\n\t\t\tswitch(state)\r\n\t\t\t{\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\t// #line 54\r\n\t\t\t\t\t{return Tokens.ARRAY_OPEN;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\t// #line 55\r\n\t\t\t\t\t{return Tokens.ARRAY_CLOSE;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\t// #line 56\r\n\t\t\t\t\t{return Tokens.ITEMS_SEPARATOR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\t// #line 57\r\n\t\t\t\t\t{return Tokens.NAMEVALUE_SEPARATOR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 6:\r\n\t\t\t\t\t// #line 58\r\n\t\t\t\t\t{return Tokens.OBJECT_OPEN;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 7:\r\n\t\t\t\t\t// #line 59\r\n\t\t\t\t\t{return Tokens.OBJECT_CLOSE;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 8:\r\n\t\t\t\t\t// #line 64\r\n\t\t\t\t\t{return Tokens.INTEGER;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 9:\r\n\t\t\t\t\t// #line 65\r\n\t\t\t\t\t{}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\t// #line 67\r\n\t\t\t\t\t{BEGIN(LexicalStates.IN_STRING); str = new StringBuilder(); return Tokens.STRING_BEGIN;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 11:\r\n\t\t\t\t\t// #line 63\r\n\t\t\t\t\t{return Tokens.DOUBLE;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 12:\r\n\t\t\t\t\t// #line 60\r\n\t\t\t\t\t{return Tokens.TRUE;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 13:\r\n\t\t\t\t\t// #line 62\r\n\t\t\t\t\t{return Tokens.NULL;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 14:\r\n\t\t\t\t\t// #line 61\r\n\t\t\t\t\t{return Tokens.FALSE;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 15:\r\n\t\t\t\t\t// #line 68\r\n\t\t\t\t\t{str.Append(yytext()); return Tokens.CHARS;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 16:\r\n\t\t\t\t\t// #line 78\r\n\t\t\t\t\t{BEGIN(LexicalStates.INITIAL); return Tokens.STRING_END;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 17:\r\n\t\t\t\t\t// #line 74\r\n\t\t\t\t\t{str.Append('\\t'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 18:\r\n\t\t\t\t\t// #line 72\r\n\t\t\t\t\t{str.Append('\\r'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 19:\r\n\t\t\t\t\t// #line 70\r\n\t\t\t\t\t{str.Append('\\f'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 20:\r\n\t\t\t\t\t// #line 73\r\n\t\t\t\t\t{str.Append('\\n'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 21:\r\n\t\t\t\t\t// #line 77\r\n\t\t\t\t\t{str.Append('\"'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 22:\r\n\t\t\t\t\t// #line 75\r\n\t\t\t\t\t{str.Append('\\\\'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 23:\r\n\t\t\t\t\t// #line 71\r\n\t\t\t\t\t{str.Append('\\b'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 24:\r\n\t\t\t\t\t// #line 76\r\n\t\t\t\t\t{str.Append('/'); return Tokens.ESCAPEDCHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 25:\r\n\t\t\t\t\t// #line 69\r\n\t\t\t\t\t{str.Append((char)int.Parse(yytext().Substring(2), System.Globalization.NumberStyles.HexNumber)); return Tokens.UNICODECHAR;}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 27: goto case 11;\r\n\t\t\t}\r\n\t\t\taccepted = false;\r\n\t\t\treturn yyreturn;\r\n\t\t}\r\n\t\t\r\n\t\t#pragma warning restore 162\r\n\t\t\r\n\t\t\r\n\t\t#endregion\r\n\t\tprivate void BEGIN(LexicalStates state)\r\n\t\t{\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate char Advance()\r\n\t\t{\r\n\t\t\tif (lookahead_index >= chars_read)\r\n\t\t\t{\r\n\t\t\t\tif (token_start > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// shift buffer left:\r\n\t\t\t\t\tint length = chars_read - token_start;\r\n\t\t\t\t\tSystem.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1);\r\n\t\t\t\t\ttoken_end -= token_start;\r\n\t\t\t\t\ttoken_chunk_start -= token_start;\r\n\t\t\t\t\ttoken_start = 0;\r\n\t\t\t\t\tchars_read = lookahead_index = length;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// populate the remaining bytes:\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\t\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\twhile (lookahead_index >= chars_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (lookahead_index >= buffer.Length)\r\n\t\t\t\t\t\tbuffer = ResizeBuffer(buffer);\r\n\t\t\t\t\t\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Map(buffer[lookahead_index++]);\r\n\t\t}\r\n\t\t\r\n\t\tprivate char[] ResizeBuffer(char[] buf)\r\n\t\t{\r\n\t\t\tchar[] result = new char[buf.Length << 1];\r\n\t\t\tSystem.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void TrimTokenEnd()\r\n\t\t{\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\n')\r\n\t\t\t\ttoken_end--;\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\r')\r\n\t\t\t\ttoken_end--;\r\n\t\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenChunkStart()\r\n\t\t{\r\n\t\t\ttoken_chunk_start = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenEnd()\r\n\t\t{\r\n\t\t\ttoken_end = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MoveToTokenEnd()\r\n\t\t{\r\n\t\t\tlookahead_index = token_end;\r\n\t\t\tyy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\\r' || buffer[token_end - 1] == '\\n');\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_start; }\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenChunkLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_chunk_start; }\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yymore()\r\n\t\t{\r\n\t\t\tif (!expanding_token)\r\n\t\t\t{\r\n\t\t\t\ttoken_start = token_chunk_start;\r\n\t\t\t\texpanding_token = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yyless(int count)\r\n\t\t{\r\n\t\t\tlookahead_index = token_end = token_chunk_start + count;\r\n\t\t}\r\n\t\t\r\n\t\tprivate Stack<LexicalStates> stateStack = new Stack<LexicalStates>(20);\r\n\t\t\r\n\t\tprivate void yy_push_state(LexicalStates state)\r\n\t\t{\r\n\t\t\tstateStack.Push(current_lexical_state);\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate bool yy_pop_state()\r\n\t\t{\r\n\t\t\tif (stateStack.Count == 0) return false;\r\n\t\t\tcurrent_lexical_state = stateStack.Pop();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\tprivate LexicalStates yy_top_state()\r\n\t\t{\r\n\t\t\treturn stateStack.Peek();\r\n\t\t}\r\n\t\t\r\n\t\t#region Tables\r\n\t\t\r\n\t\tprivate static AcceptConditions[] acceptCondition = new AcceptConditions[]\r\n\t\t{\r\n\t\t\tAcceptConditions.NotAccept, // 0\r\n\t\t\tAcceptConditions.Accept, // 1\r\n\t\t\tAcceptConditions.Accept, // 2\r\n\t\t\tAcceptConditions.Accept, // 3\r\n\t\t\tAcceptConditions.Accept, // 4\r\n\t\t\tAcceptConditions.Accept, // 5\r\n\t\t\tAcceptConditions.Accept, // 6\r\n\t\t\tAcceptConditions.Accept, // 7\r\n\t\t\tAcceptConditions.Accept, // 8\r\n\t\t\tAcceptConditions.Accept, // 9\r\n\t\t\tAcceptConditions.Accept, // 10\r\n\t\t\tAcceptConditions.Accept, // 11\r\n\t\t\tAcceptConditions.Accept, // 12\r\n\t\t\tAcceptConditions.Accept, // 13\r\n\t\t\tAcceptConditions.Accept, // 14\r\n\t\t\tAcceptConditions.Accept, // 15\r\n\t\t\tAcceptConditions.Accept, // 16\r\n\t\t\tAcceptConditions.Accept, // 17\r\n\t\t\tAcceptConditions.Accept, // 18\r\n\t\t\tAcceptConditions.Accept, // 19\r\n\t\t\tAcceptConditions.Accept, // 20\r\n\t\t\tAcceptConditions.Accept, // 21\r\n\t\t\tAcceptConditions.Accept, // 22\r\n\t\t\tAcceptConditions.Accept, // 23\r\n\t\t\tAcceptConditions.Accept, // 24\r\n\t\t\tAcceptConditions.Accept, // 25\r\n\t\t\tAcceptConditions.NotAccept, // 26\r\n\t\t\tAcceptConditions.Accept, // 27\r\n\t\t\tAcceptConditions.NotAccept, // 28\r\n\t\t\tAcceptConditions.NotAccept, // 29\r\n\t\t\tAcceptConditions.NotAccept, // 30\r\n\t\t\tAcceptConditions.NotAccept, // 31\r\n\t\t\tAcceptConditions.NotAccept, // 32\r\n\t\t\tAcceptConditions.NotAccept, // 33\r\n\t\t\tAcceptConditions.NotAccept, // 34\r\n\t\t\tAcceptConditions.NotAccept, // 35\r\n\t\t\tAcceptConditions.NotAccept, // 36\r\n\t\t\tAcceptConditions.NotAccept, // 37\r\n\t\t\tAcceptConditions.NotAccept, // 38\r\n\t\t\tAcceptConditions.NotAccept, // 39\r\n\t\t\tAcceptConditions.NotAccept, // 40\r\n\t\t\tAcceptConditions.NotAccept, // 41\r\n\t\t\tAcceptConditions.NotAccept, // 42\r\n\t\t\tAcceptConditions.NotAccept, // 43\r\n\t\t\tAcceptConditions.NotAccept, // 44\r\n\t\t\tAcceptConditions.NotAccept, // 45\r\n\t\t\tAcceptConditions.NotAccept, // 46\r\n\t\t\tAcceptConditions.NotAccept, // 47\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] colMap = new int[]\r\n\t\t{\r\n\t\t\t23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 23, 23, 20, 23, 23, \r\n\t\t\t23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, \r\n\t\t\t20, 23, 22, 23, 23, 23, 23, 23, 23, 23, 23, 19, 3, 16, 18, 27, \r\n\t\t\t17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 4, 23, 23, 23, 23, 23, \r\n\t\t\t23, 12, 26, 25, 25, 10, 11, 23, 23, 23, 23, 23, 13, 23, 15, 23, \r\n\t\t\t23, 23, 8, 14, 7, 9, 23, 23, 23, 23, 23, 1, 24, 2, 23, 23, \r\n\t\t\t23, 12, 26, 25, 25, 10, 11, 23, 23, 23, 23, 23, 13, 23, 15, 23, \r\n\t\t\t23, 23, 8, 14, 7, 9, 23, 23, 23, 23, 23, 5, 21, 6, 23, 23, \r\n\t\t\t0, 0\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] rowMap = new int[]\r\n\t\t{\r\n\t\t\t0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, \r\n\t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 9, 10, \r\n\t\t\t11, 12, 13, 14, 15, 3, 16, 11, 17, 18, 19, 20, 21, 22, 23, 24\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[,] nextState = new int[,]\r\n\t\t{\r\n\t\t\t{ 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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ 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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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 }\r\n\t\t};\r\n\t\t\r\n\t\t\r\n\t\tprivate static int[] yy_state_dtrans = new int[]\r\n\t\t{\r\n\t\t\t  0,\r\n\t\t\t  40\r\n\t\t};\r\n\t\t\r\n\t\t#endregion\r\n\t\t\r\n\t\tpublic Tokens GetNextToken()\r\n\t\t{\r\n\t\t\tint current_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\tint last_accept_state = NoState;\r\n\t\t\tbool is_initial_state = true;\r\n\t\t\t\r\n\t\t\tMarkTokenChunkStart();\r\n\t\t\ttoken_start = token_chunk_start;\r\n\t\t\texpanding_token = false;\r\n\t\t\t\r\n\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t{\r\n\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\tMarkTokenEnd();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tchar lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance();\r\n\t\t\t\tint next_state = nextState[rowMap[current_state], colMap[lookahead]];\r\n\t\t\t\t\r\n\t\t\t\tif (lookahead == EOF && is_initial_state)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Tokens.EOF;\r\n\t\t\t\t}\r\n\t\t\t\tif (next_state != -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent_state = next_state;\r\n\t\t\t\t\tis_initial_state = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last_accept_state == NoState)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Tokens.ERROR;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0)\r\n\t\t\t\t\t\t\tTrimTokenEnd();\r\n\t\t\t\t\t\tMoveToTokenEnd();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (last_accept_state < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSystem.Diagnostics.Debug.Assert(last_accept_state >= 48);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool accepted = false;\r\n\t\t\t\t\t\t\tyyreturn = Accept0(last_accept_state, out accepted);\r\n\t\t\t\t\t\t\tif (accepted)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn yyreturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// token ignored:\r\n\t\t\t\t\t\tis_initial_state = true;\r\n\t\t\t\t\t\tcurrent_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\t\t\t\tlast_accept_state = NoState;\r\n\t\t\t\t\t\tMarkTokenChunkStart();\r\n\t\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} // end of GetNextToken\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generated/jsonParser.cs",
    "content": "// This code was generated by the Gardens Point Parser Generator\r\n// Copyright (c) Wayne Kelly, QUT 2005\r\n// (see accompanying GPPGcopyright.rtf)\r\n\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers.GPPG;\r\nusing System.Diagnostics;\r\n\r\n\r\nnamespace PHP.Library.Json\r\n{\r\npublic 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};\r\n\r\npublic partial struct SemanticValueType\r\n{\r\n\tpublic object obj; \r\n}\r\npublic partial struct Position\r\n{\r\n  public int FirstLine;\r\n  public int FirstColumn;\r\n  public int FirstOffset;\r\n  public int LastLine;\r\n  public int LastColumn;\r\n  public int LastOffset;\r\n\r\n  public Position(int firstLine, int firstColumn, int firstOffset, int lastLine, int lastColumn, int lastOffset)\r\n  {\r\n    this.FirstLine = firstLine;\r\n    this.FirstColumn = firstColumn;\r\n    this.FirstOffset = firstOffset;\r\n    this.LastLine = lastLine;\r\n    this.LastColumn = lastColumn;\r\n    this.LastOffset = lastOffset;\r\n  }\r\n}\r\npublic  partial class Parser: ShiftReduceParser<SemanticValueType,Position>\r\n{\r\n\r\n  protected override string[] NonTerminals { get { return nonTerminals; } }\r\n  private static string[] nonTerminals;\r\n\r\n  protected override State[] States { get { return states; } }\r\n  private static State[] states;\r\n\r\n  protected override Rule[] Rules { get { return rules; } }\r\n  private static Rule[] rules;\r\n\r\n  protected sealed override Position CombinePositions(Position first, Position last)\r\n  {\r\n    return new Position(first.FirstLine, first.FirstColumn, first.FirstOffset, last.LastLine, last.LastColumn, last.LastOffset);\r\n  }\r\n\r\n  #region Construction\r\n\r\n  static Parser()\r\n  {\r\n\r\n    states = new State[]\r\n    {\r\n      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}),\r\n      new State(1, new int[] {2,2}),\r\n      new State(2, -1),\r\n      new State(3, -2),\r\n      new State(4, -12),\r\n      new State(5, -13),\r\n      new State(6, -14),\r\n      new State(7, -15),\r\n      new State(8, new int[] {8,11,14,15}, new int[] {-5,9,-6,12}),\r\n      new State(9, new int[] {8,10}),\r\n      new State(10, -3),\r\n      new State(11, -4),\r\n      new State(12, new int[] {5,13,8,-6}),\r\n      new State(13, new int[] {14,15}, new int[] {-5,14,-6,12}),\r\n      new State(14, -5),\r\n      new State(15, new int[] {6,16}),\r\n      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}),\r\n      new State(17, -7),\r\n      new State(18, -16),\r\n      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}),\r\n      new State(20, new int[] {4,21}),\r\n      new State(21, -8),\r\n      new State(22, -9),\r\n      new State(23, new int[] {5,24,4,-11}),\r\n      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}),\r\n      new State(25, -10),\r\n      new State(26, -17),\r\n      new State(27, -18),\r\n      new State(28, -19),\r\n    };\r\n\r\n    rules = new Rule[20];\r\n    rules[1]=new Rule(-2, new int[]{-1,2});\r\n    rules[2]=new Rule(-1, new int[]{-3});\r\n    rules[3]=new Rule(-4, new int[]{7,-5,8});\r\n    rules[4]=new Rule(-4, new int[]{7,8});\r\n    rules[5]=new Rule(-5, new int[]{-6,5,-5});\r\n    rules[6]=new Rule(-5, new int[]{-6});\r\n    rules[7]=new Rule(-6, new int[]{14,6,-3});\r\n    rules[8]=new Rule(-7, new int[]{3,-8,4});\r\n    rules[9]=new Rule(-7, new int[]{3,4});\r\n    rules[10]=new Rule(-8, new int[]{-3,5,-8});\r\n    rules[11]=new Rule(-8, new int[]{-3});\r\n    rules[12]=new Rule(-3, new int[]{14});\r\n    rules[13]=new Rule(-3, new int[]{12});\r\n    rules[14]=new Rule(-3, new int[]{13});\r\n    rules[15]=new Rule(-3, new int[]{-4});\r\n    rules[16]=new Rule(-3, new int[]{-7});\r\n    rules[17]=new Rule(-3, new int[]{9});\r\n    rules[18]=new Rule(-3, new int[]{10});\r\n    rules[19]=new Rule(-3, new int[]{11});\r\n\r\n    nonTerminals = new string[] {\"\", \"start\", \"$accept\", \"value\", \"object\", \r\n      \"members\", \"pair\", \"array\", \"elements\", };\r\n  }\r\n\r\n  #endregion\r\n\r\n  protected override void DoAction(int action)\r\n  {\r\n    switch (action)\r\n    {\r\n      case 2: // start -> value \r\n{ Result = value_stack.array[value_stack.top-1].yyval.obj; }\r\n        return;\r\n      case 3: // object -> OBJECT_OPEN members OBJECT_CLOSE \r\n{\r\n\t\t\tvar elements = (List<KeyValuePair<string, object>>)value_stack.array[value_stack.top-2].yyval.obj;\r\n\t\t\t\t\r\n\t\t\tif (decodeOptions.Assoc)\r\n\t\t\t{\r\n\t\t\t\tvar arr = new PhpArray( elements.Count );\r\n\t\t\t\t\r\n\t\t\t\tforeach (var item in elements)\r\n\t\t\t\t\tarr.Add( PHP.Core.Convert.StringToArrayKey(item.Key), item.Value );\r\n\t\t\t\t\t\r\n\t\t\t\tyyval.obj = arr;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar std = new stdClass(context, true);\r\n\t\t\t\tstd.AddRange( elements );\r\n\t\t\t\tyyval.obj = std;\r\n\t\t\t}\r\n\t\t}\r\n        return;\r\n      case 4: // object -> OBJECT_OPEN OBJECT_CLOSE \r\n{ yyval.obj = new stdClass(context, true); }\r\n        return;\r\n      case 5: // members -> pair ITEMS_SEPARATOR members \r\n{\r\n\t\t\tvar elements = (List<KeyValuePair<string, object>>)value_stack.array[value_stack.top-1].yyval.obj;\r\n\t\t\tvar result = new List<KeyValuePair<string, object>>( elements.Count + 1 ){ (KeyValuePair<string,object>)value_stack.array[value_stack.top-3].yyval.obj };\r\n\t\t\tresult.AddRange(elements);\t\t\t\r\n\t\t\tyyval.obj = result;\r\n\t\t}\r\n        return;\r\n      case 6: // members -> pair \r\n{ yyval.obj = new List<KeyValuePair<string, object>>(){ (KeyValuePair<string,object>)value_stack.array[value_stack.top-1].yyval.obj }; }\r\n        return;\r\n      case 7: // pair -> STRING NAMEVALUE_SEPARATOR value \r\n{ yyval.obj = new KeyValuePair<string,object>((string)value_stack.array[value_stack.top-3].yyval.obj, value_stack.array[value_stack.top-1].yyval.obj); }\r\n        return;\r\n      case 8: // array -> ARRAY_OPEN elements ARRAY_CLOSE \r\n{\r\n\t\t\tvar elements = (List<object>)value_stack.array[value_stack.top-2].yyval.obj;\r\n\t\t\tvar arr = new PhpArray( elements.Count );\r\n\t\t\t\r\n\t\t\tforeach (var item in elements)\r\n\t\t\t\tarr.Add( item );\r\n\t\t\t\t\r\n\t\t\tyyval.obj = arr;\r\n\t\t}\r\n        return;\r\n      case 9: // array -> ARRAY_OPEN ARRAY_CLOSE \r\n{ yyval.obj = new PhpArray(); }\r\n        return;\r\n      case 10: // elements -> value ITEMS_SEPARATOR elements \r\n{\r\n\t\t\tvar elements = (List<object>)value_stack.array[value_stack.top-1].yyval.obj;\r\n\t\t\tvar result = new List<object>( elements.Count + 1 ){ value_stack.array[value_stack.top-3].yyval.obj };\r\n\t\t\tresult.AddRange(elements);\t\t\t\r\n\t\t\tyyval.obj = result;\r\n\t\t}\r\n        return;\r\n      case 11: // elements -> value \r\n{ yyval.obj = new List<object>(){ value_stack.array[value_stack.top-1].yyval.obj }; }\r\n        return;\r\n      case 12: // value -> STRING \r\n{yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;}\r\n        return;\r\n      case 13: // value -> INTEGER \r\n{yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;}\r\n        return;\r\n      case 14: // value -> DOUBLE \r\n{yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;}\r\n        return;\r\n      case 15: // value -> object \r\n{yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;}\r\n        return;\r\n      case 16: // value -> array \r\n{yyval.obj = value_stack.array[value_stack.top-1].yyval.obj;}\r\n        return;\r\n      case 17: // value -> TRUE \r\n{yyval.obj = true;}\r\n        return;\r\n      case 18: // value -> FALSE \r\n{yyval.obj = false;}\r\n        return;\r\n      case 19: // value -> NULL \r\n{yyval.obj = null;}\r\n        return;\r\n    }\r\n  }\r\n\r\n  protected override string TerminalToString(int terminal)\r\n  {\r\n    if (((Tokens)terminal).ToString() != terminal.ToString())\r\n      return ((Tokens)terminal).ToString();\r\n    else\r\n      return CharToString((char)terminal);\r\n  }\r\n\r\n\r\n\r\nprotected override int EofToken { get { return (int)Tokens.EOF; } }\r\nprotected override int ErrorToken { get { return (int)Tokens.ERROR; } }\r\n\r\nprivate readonly ScriptContext/*!*/context;\r\nprivate readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions;\r\n\r\npublic Parser(ScriptContext/*!*/context, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions)\r\n{\r\n\tSystem.Diagnostics.Debug.Assert(context != null && decodeOptions != null);\r\n\t\r\n\tthis.context = context;\r\n\tthis.decodeOptions = decodeOptions;\r\n}\r\n\r\npublic object Result{get;private set;}\r\n}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generators/Generate.cmd",
    "content": "\"..\\..\\..\\Tools\\cslex\" \"StrToTime.lex\" \"..\\Generated\\StrToTimeScanner.cs\" /v:2\r\n\r\n\"..\\..\\..\\Tools\\cslex\" \"json.lex\" \"..\\Generated\\jsonLexer.cs\" /v:2\r\n\"..\\..\\..\\Tools\\gppg\" /l /r \"json.y\" \"..\\Generated\\jsonParser.cs\" \"..\\Generated\\json.log\" \r\n\r\npause"
  },
  {
    "path": "Source/ClassLibrary/Generators/StrToTime.lex",
    "content": "\r\nusing System;\r\n\r\nusing System.Collections.Generic;\r\n\r\n/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek. Based on PHP5 implementation by Derick Rethans <derick@derickrethans.nl>. \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n%%\r\n\r\n%namespace PHP.Library.StrToTime\r\n%type Tokens\r\n%eofval Tokens.EOF\r\n%errorval Tokens.ERROR\r\n%attributes internal\r\n%class Scanner\r\n%function GetNextToken\r\n\r\n%{\r\n\r\ninternal DateInfo Time { get { return time; } }\r\nprivate DateInfo time = new DateInfo();\r\n\r\ninternal int Errors { get { return errors; } } \r\nprivate int errors = 0;\r\n\r\ninternal int Position { get { return pos; } }\r\nprivate int pos = 0;\r\n\r\nprivate string str;\r\n\r\nvoid INIT()\r\n{\r\n\tstr = new string(buffer, token_start, token_end - token_start);\r\n\tpos = 0;\r\n}\r\n\r\nvoid DEINIT()\r\n{\r\n}\r\n\r\n%}\r\n\r\nany [\\000-\\377]\r\n\r\nfrac \".\"[0-9]+\r\n\r\naz14            [a-z]|[a-z][a-z]|[a-z][a-z][a-z]|[a-z][a-z][a-z][a-z]\r\n\r\nago \"ago\"\r\n\r\nhour24\t\t\t\t\t[01]?[0-9]|\"2\"[0-4]\r\nhour24lz\t\t\t\t[01][0-9]|\"2\"[0-4]\r\nhour12\t\t\t\t\t\"0\"?[1-9]|\"1\"[0-2]\r\nminute\t\t\t\t\t[0-5]?[0-9]\r\nminutelz\t\t\t\t[0-5][0-9]\r\nsecond\t\t\t\t\t{minute}|\"60\"\r\nsecondlz\t\t\t\t{minutelz}|\"60\"\r\nmeridian\t\t\t\t[ap]\".\"?m\".\"?\r\ndaysuf          \"st\"|\"nd\"|\"rd\"|\"th\"\r\n\r\ntz\t\t\t\t\t\t\t\"(\"?{az14}\")\"?|[a-z][a-z]+([_/][a-z][a-z]+)+\r\ntzcorrection\t\t[+-]{hour24}\":\"?{minute}?\r\nzone            {tzcorrection}|{tz}\r\n\r\nmonth\t\t\t\t\t\t\"0\"?[0-9]|\"1\"[0-2]\r\nday\t\t\t\t\t\t\t([0-2]?[0-9]|\"3\"[01]){daysuf}?\r\nyear\t\t\t\t\t\t[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]\r\nyear2\t\t\t\t\t\t[0-9][0-9]\r\nyear4\t\t\t\t\t\t[0-9][0-9][0-9][0-9]\r\n\r\ndayofyear\t\t\t\t\"00\"[1-9]|\"0\"[1-9][0-9]|[1-2][0-9][0-9]|\"3\"[0-5][0-9]|\"36\"[0-6]\r\nweekofyear\t\t\t\"0\"[1-9]|[1-4][0-9]|\"5\"[0-3]\r\n\r\nmonthlz\t\t\t\t\t\"0\"[1-9]|\"1\"[0-2]\r\ndaylz\t\t\t\t\t\t\"0\"[1-9]|[1-2][0-9]|\"3\"[01]\r\n\r\ndayfull\t\t\t\t\t\"sunday\"|\"monday\"|\"tuesday\"|\"wednesday\"|\"thursday\"|\"friday\"|\"saturday\"\r\ndayabbr\t\t\t\t\t\"sun\"|\"mon\"|\"tue\"|\"wed\"|\"thu\"|\"fri\"|\"sat\"|\"sun\"\r\ndaytext\t\t\t\t\t{dayfull}|{dayabbr}\r\n\r\nmonthfull\t\t\t\t\"january\"|\"february\"|\"march\"|\"april\"|\"may\"|\"june\"|\"july\"|\"august\"|\"september\"|\"october\"|\"november\"|\"december\"\r\n\r\nmonthabbr\t\t\t\t\"jan\"|\"feb\"|\"mar\"|\"apr\"|\"may\"|\"jun\"|\"jul\"|\"aug\"|\"sep\"|\"sept\"|\"oct\"|\"nov\"|\"dec\"\r\nmonthroman\t\t\t\"i\"|\"ii\"|\"iii\"|\"iv\"|\"v\"|\"vi\"|\"vii\"|\"viii\"|\"ix\"|\"x\"|\"xi\"|\"xii\"\r\nmonthtext\t\t\t\t{monthfull}|{monthabbr}|{monthroman}\r\n\r\ntimetiny12      {hour12}[ ]*{meridian}\r\ntimeshort12\t\t\t{hour12}[:.]{minutelz}[ ]*{meridian}\r\ntimelong12\t\t\t{hour12}[:.]{minute}[:.]{secondlz}[ ]*{meridian}\r\n\r\ntimeshort24\t\t\t{hour24}[:.]{minute}([ ]*{zone})?\r\ntimelong24\t\t\t{hour24}[:.]{minute}[:.]{second}([ ]*{zone})?\r\niso8601long\t\t\t{hour24}[:.]{minute}[:.]{second}{frac}([ ]*{zone})?\r\n\r\niso8601normtz\t\t{hour24}[:.]{minute}[:.]{secondlz}[ ]*{zone}\r\n\r\ngnunocolon\t\t\t{hour24lz}{minutelz}\r\niso8601nocolon\t{hour24lz}{minutelz}{secondlz}\r\n\r\namericanshort\t\t{month}\"/\"{day}\r\namerican\t\t\t\t{month}\"/\"{day}\"/\"{year}\r\niso8601dateslash\t{year4}\"/\"{monthlz}\"/\"{daylz}\"/\"?\r\npointeddate4\t\t{day}[-.]{month}[-.]{year4}\r\ngnudateshort\t\t{year}\"-\"{month}\"-\"{day}\r\niso8601date\t\t\t{year4}\"-\"{monthlz}\"-\"{daylz}\r\npointeddate2\t\t{day}\".\"{month}\".\"{year2}\r\ndatefull\t\t\t\t{day}([-. ])*{monthtext}([-. ])*{year}\r\ndatenoday\t\t\t\t{monthtext}([-. ])*{year4}\r\ndatenodayrev\t\t{year4}([-. ])*{monthtext}\r\ndatetextual\t\t\t{monthtext}([-. ])*{day}[,.stndrh ]*{year}\r\ndatenoyear\t\t\t{monthtext}([-. ])*{day}[,.stndrh ]*\r\ndatenoyearrev\t\t{day}([-. ])*{monthtext}\r\ndatenocolon\t\t\t{year4}{monthlz}{daylz}\r\n\r\nsoap\t\t\t\t\t\t{year4}\"-\"{monthlz}\"-\"{daylz}\"t\"{hour24lz}\":\"{minutelz}\":\"{secondlz}{frac}{tzcorrection}?\r\nxmlrpc\t\t\t\t\t{year4}{monthlz}{daylz}\"t\"{hour24}\":\"{minutelz}\":\"{secondlz}\r\nxmlrpcnocolon\t\t{year4}{monthlz}{daylz}\"t\"{hour24}{minutelz}{secondlz}\r\nwddx\t\t\t\t\t\t{year4}\"-\"{month}\"-\"{day}\"t\"{hour24}\":\"{minute}\":\"{second}\r\npgydotd\t\t\t\t\t{year4}\".\"?{dayofyear}\r\npgtextshort\t\t\t{monthabbr}\"-\"{daylz}\"-\"{year}\r\npgtextreverse\t\t{year}\"-\"{monthabbr}\"-\"{daylz}\r\nisoweekday\t\t\t{year4}\"w\"{weekofyear}[0-7]\r\nisoweek\t\t\t\t\t{year4}\"w\"{weekofyear}\r\n\r\nclf\t\t\t\t\t\t\t{day}\"/\"{monthabbr}\"/\"{year4}\":\"{hour24lz}\":\"{minutelz}\":\"{secondlz}[ ]+{tzcorrection}\r\n\r\ntimestamp\t\t\t\t\"@\"\"-\"?[1-9][0-9]*\r\n\r\ndateshortwithtimeshort\t{datenoyear}{timeshort24}\r\n\r\ndateshortwithtimelong\t\t{datenoyear}{timelong24}\r\ndateshortwithtimelongtz\t{datenoyear}{iso8601normtz}\r\n\r\nreltextnumber\t\t\"first\"|\"next\"|\"second\"|\"third\"|\"fourth\"|\"fifth\"|\"sixth\"|\"seventh\"|\"eight\"|\"ninth\"|\"tenth\"|\"eleventh\"|\"twelfth\"|\"last\"|\"previous\"|\"this\"\r\nreltextunit\t\t\t((\"sec\"|\"second\"|\"min\"|\"minute\"|\"hour\"|\"day\"|\"week\"|\"fortnight\"|\"forthnight\"|\"month\"|\"year\")\"s\"?)|{daytext}\r\n\r\nrelnumber\t\t\t\t\t\t([+-]?[ ]*[0-9]+)\r\nrelative\t\t\t\t\t\t{relnumber}[ ]*{reltextunit}\r\nrelativetext\t\t\t\t{reltextnumber}[ ]*{reltextunit}\r\n\r\n%%\r\n\r\n<YYINITIAL>\"yesterday\" {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\ttime.UNHAVE_TIME();\r\n\r\n\ttime.relative.d = -1;\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>\"now\" {\r\n\tINIT();\r\n\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>\"noon\" {\r\n\tINIT();\r\n\ttime.UNHAVE_TIME();\r\n\ttime.HAVE_TIME();\r\n\ttime.h = 12;\r\n\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>\"midnight\"|\"today\" {\r\n\tINIT();\r\n\ttime.UNHAVE_TIME();\r\n\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>\"tomorrow\" {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\ttime.UNHAVE_TIME();\r\n\r\n\ttime.relative.d = 1;\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>{timestamp} {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\ttime.UNHAVE_DATE();\r\n\ttime.UNHAVE_TIME();\r\n\r\n\tint i = DateInfo.ParseSignedInt(str, ref pos, 24);\r\n\ttime.y = 1970;\r\n\ttime.m = 1;\r\n\ttime.d = 1;\r\n\ttime.h = time.i = time.s = 0;\r\n\ttime.f = 0.0;\r\n\ttime.relative.s += i;\r\n\ttime.z = 0;\r\n\t\r\n\ttime.HAVE_TZ();\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>{timetiny12}|{timeshort12}|{timelong12} {\r\n\tINIT();\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\t\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tif (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t{\r\n\t  time.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t  if (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t  {\r\n\t\t  time.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t}  \r\n\t}\r\n\t\r\n\tif (!time.SetMeridian(str, ref pos))\r\n\t{\r\n\t\treturn Tokens.ERROR; \r\n\t}\t\r\n\tDEINIT();\r\n\treturn Tokens.TIME12;\r\n}\r\n\r\n<YYINITIAL>{timeshort24}|{timelong24}|{iso8601long} {\r\n\tINIT();\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\t\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tif (pos < str.Length && (str[pos] == ':' || str[pos] == '.')) \r\n\t{\r\n\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\r\n\t\tif (pos < str.Length && str[pos] == '.') \r\n\t\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 8);\r\n\t}\r\n\r\n\tif (pos < str.Length) \r\n\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.TIME24_WITH_ZONE;\r\n}\r\n\r\n<YYINITIAL>{gnunocolon} {\r\n\tINIT();\r\n\t\r\n\tswitch (time.have_time) \r\n\t{\r\n\t\tcase 0:\r\n\t\t\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\t\ttime.s = 0;\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\tcase 1:\r\n\t\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\tdefault:\r\n\t\t\tDEINIT();\r\n\t\t\treturn Tokens.ERROR;\r\n  }\r\n\ttime.have_time++;\r\n\tDEINIT();\r\n\treturn Tokens.GNU_NOCOLON;\r\n}\r\n\r\n<YYINITIAL>{iso8601nocolon} {\r\n\tINIT();\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\t\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\r\n\tif (pos < str.Length) \r\n\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\r\n\tDEINIT();\r\n\treturn Tokens.ISO_NOCOLON;\r\n}\r\n\r\n<YYINITIAL>{americanshort}|{american} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tif (pos < str.Length && str[pos] == '/') \r\n\t{\r\n\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\ttime.y = DateInfo.ProcessYear(time.y);\r\n  }\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.AMERICAN;\r\n}\r\n\r\n<YYINITIAL>{iso8601date}|{iso8601dateslash} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.ISO_DATE;\r\n}\r\n\r\n<YYINITIAL>{datefull} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\tDateInfo.SkipDaySuffix(str, ref pos);\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_FULL;\r\n}\r\n\r\n<YYINITIAL>{gnudateshort} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.ISO_DATE;\r\n}\r\n\r\n<YYINITIAL>{pointeddate4} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_FULL_POINTED;\r\n}\r\n\r\n<YYINITIAL>{pointeddate2} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR;} \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_FULL_POINTED;\r\n}\r\n\r\n<YYINITIAL>{datenoday} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.d = 1;\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_NO_DAY;\r\n}\r\n\r\n<YYINITIAL>{datenodayrev} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.d = 1;\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_NO_DAY;\r\n}\r\n\r\n<YYINITIAL>{datetextual}|{datenoyear}\r\n{\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_TEXT;\r\n}\r\n\r\n<YYINITIAL>{datenoyearrev} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\tDateInfo.SkipDaySuffix(str, ref pos);\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_TEXT;\r\n}\r\n\r\n<YYINITIAL>{datenocolon} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.DATE_NOCOLON;\r\n}\r\n\r\n<YYINITIAL>{xmlrpc}|{xmlrpcnocolon}|{soap}|{wddx} {\r\n\tINIT();\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tif (pos < str.Length && str[pos] == '.') \r\n\t{\r\n\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 9);\r\n\t\tif (pos < str.Length)\r\n\t\t  errors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t}\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.XMLRPC_SOAP;\r\n}\r\n\r\n<YYINITIAL>{pgydotd} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 3);\r\n\ttime.m = 1;\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.PG_YEARDAY;\r\n}\r\n\r\n<YYINITIAL>{isoweekday} {\r\n\tint week, day;\r\n\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\ttime.HAVE_RELATIVE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\tweek = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\tday = DateInfo.ParseUnsignedInt(str, ref pos, 1);\r\n\ttime.m = 1;\r\n\ttime.d = 1;\r\n\ttime.relative.d = DateInfo.WeekToDay(time.y, week, day);\r\n\r\n\tDEINIT();\r\n\treturn Tokens.ISO_WEEK;\r\n}\r\n\r\n<YYINITIAL>{isoweek} {\r\n\t{\r\n\t\tint w, d;\r\n\r\n\t\tINIT();\r\n\t\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\t\ttime.HAVE_DATE();\r\n\t\ttime.HAVE_RELATIVE();\r\n\t\t\r\n\t\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\tw = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\td = 1;\r\n\t\ttime.m = 1;\r\n\t\ttime.d = 1;\r\n\t\ttime.relative.d = DateInfo.WeekToDay(time.y, w, d);\r\n\r\n\t\tDEINIT();\r\n\t\treturn Tokens.ISO_WEEK;\r\n\t}\t\r\n}\r\n\r\n<YYINITIAL>{pgtextshort} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.PG_TEXT;\r\n}\r\n\r\n<YYINITIAL>{pgtextreverse} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.y = DateInfo.ProcessYear(time.y);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.PG_TEXT;\r\n}\r\n\r\n<YYINITIAL>{clf} {\r\n\tINIT();\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\t\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.CLF;\r\n}\r\n\r\n<YYINITIAL>{year4} {\r\n\tINIT();\r\n\t\r\n\ttime.y = DateInfo.ParseUnsignedInt(str, ref pos, 4);\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.CLF;\r\n}\r\n\r\n<YYINITIAL>{ago} {\r\n\tINIT();\r\n\t\r\n\ttime.relative.y = -time.relative.y;\r\n\ttime.relative.m = -time.relative.m;\r\n\ttime.relative.d = -time.relative.d;\r\n\ttime.relative.h = -time.relative.h;\r\n\ttime.relative.i = -time.relative.i;\r\n\ttime.relative.s = -time.relative.s;\r\n\ttime.relative.weekday = -time.relative.weekday;\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.AGO;\r\n}\r\n\r\n<YYINITIAL>{relativetext} {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\r\n\twhile (pos < str.Length) \r\n\t{\r\n\t  int behavior;\r\n\t\tint amount = DateInfo.ParseRelativeText(str, ref pos, out behavior);\r\n\t\t\r\n\t\twhile (pos < str.Length && str[pos] == ' ') pos++;\r\n\t\t\r\n\t\ttime.SetRelative(DateInfo.ReadToSpace(str,ref pos), amount, behavior);\r\n  }\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>{daytext} {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\ttime.HAVE_WEEKDAY_RELATIVE();\r\n\ttime.UNHAVE_TIME();\r\n\r\n\ttime.SetWeekDay(DateInfo.ReadToSpace(str,ref pos));\r\n  time.relative.weekday_behavior = 1;\r\n  \t\r\n\tDEINIT();\r\n\treturn Tokens.WEEKDAY;\r\n}\r\n\r\n<YYINITIAL>{tzcorrection}|{tz}\r\n{\r\n\tINIT();\r\n\t\r\n\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.TIMEZONE;\r\n}\r\n\r\n<YYINITIAL>{dateshortwithtimeshort}|{dateshortwithtimelong}|{dateshortwithtimelongtz} {\r\n\tINIT();\r\n\tif (time.have_date!=0) { return Tokens.ERROR; } \r\n\ttime.HAVE_DATE();\r\n\r\n\ttime.m = DateInfo.ParseMonth(str, ref pos);\r\n\ttime.d = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\r\n\tif (time.have_time!=0) { return Tokens.ERROR; }\r\n\ttime.HAVE_TIME();\r\n\t\r\n\ttime.h = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\ttime.i = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\t\r\n\tif (pos < str.Length && str[pos] == ':') \r\n\t{\r\n\t\ttime.s = DateInfo.ParseUnsignedInt(str, ref pos, 2);\r\n\r\n\t\tif (pos < str.Length && str[pos] == '.') \r\n\t\t\ttime.f = DateInfo.ParseFraction(str, ref pos, 8);\r\n  }\r\n\r\n\tif (pos < str.Length) \r\n\t\terrors += time.SetTimeZone(str, ref pos) ? 0 : 1;\r\n\t\r\n\tDEINIT();\r\n\treturn Tokens.SHORTDATE_WITH_TIME;\r\n}\r\n\r\n<YYINITIAL>{relative} {\r\n\tINIT();\r\n\ttime.HAVE_RELATIVE();\r\n\r\n\twhile(pos < str.Length) \r\n\t{\r\n\t\tint amount = DateInfo.ParseSignedInt(str, ref pos, 24);\r\n\t\t\r\n\t\twhile (pos < str.Length && str[pos] == ' ') pos++;\r\n\t\t\r\n\t\ttime.SetRelative(DateInfo.ReadToSpace(str, ref pos), amount, 0);\r\n\t}\r\n\tDEINIT();\r\n\treturn Tokens.RELATIVE;\r\n}\r\n\r\n<YYINITIAL>[ .,\\0\\n\\r\\t] {\r\n  break;\r\n}\r\n\r\n<YYINITIAL>{any} {\r\n  return Tokens.ERROR;\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generators/json.lex",
    "content": "using System;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\n\r\n%%\r\n\r\n%namespace PHP.Library.Json\r\n%type Tokens\r\n%class Lexer\r\n%eofval Tokens.EOF\r\n%errorval Tokens.ERROR\r\n%attributes public partial\r\n%charmap Map\r\n%function GetNextToken\r\n%ignorecase\r\n\r\n%{\r\n\r\n// content of the STRING literal text\r\nprotected string yytext()\r\n{\r\n\treturn new String(buffer, token_start, token_end - token_start);\r\n}\r\n\r\nprivate StringBuilder str = null;\r\nprotected string QuotedStringContent{get{return str.ToString();}}\r\n\r\n%}\r\n\r\ne\t\t\te[\\+|\\-]?\r\nhex\t\t\t[0-9a-fA-F]\r\ndigit\t\t[0-9]\r\ndigit1\t\t[1-9]\r\ndigits\t\t{digit}+\r\nexp\t\t\t{e}{digits}\r\nfrac\t\t\".\"{digits}\r\nint\t\t\t-?{digits}\r\ndouble\t\t{int}({frac}{exp}|{frac}|{exp})\r\ninteger\t\t{int}\r\n\r\nquote\t\t\\\"\r\ncharUnicode\t\\\\u{hex}{hex}{hex}{hex}\r\ncharNormal\t[^\\\"\\\\]\r\ncharEscaped\t[\\\\f|\\\\b|\\\\r|\\\\n|\\\\t|\\\\\\\\|\\\\/|\\\\\\\"]\r\n\r\nwhitespace\t[\\r|\\n|\\t| ]\t// whitespaces allowed between tokens\r\n\r\n\r\n%x INITIAL\r\n%x IN_STRING\r\n\r\n%%\r\n\r\n<INITIAL>\"[\"\t\t{return Tokens.ARRAY_OPEN;}\r\n<INITIAL>\"]\"\t\t{return Tokens.ARRAY_CLOSE;}\r\n<INITIAL>\",\"\t\t{return Tokens.ITEMS_SEPARATOR;}\r\n<INITIAL>\":\"\t\t{return Tokens.NAMEVALUE_SEPARATOR;}\r\n<INITIAL>\"{\"\t\t{return Tokens.OBJECT_OPEN;}\r\n<INITIAL>\"}\"\t\t{return Tokens.OBJECT_CLOSE;}\r\n<INITIAL>\"true\"\t\t{return Tokens.TRUE;}\r\n<INITIAL>\"false\"\t{return Tokens.FALSE;}\r\n<INITIAL>\"null\"\t\t{return Tokens.NULL;}\r\n<INITIAL>{double}\t{return Tokens.DOUBLE;}\r\n<INITIAL>{integer}\t{return Tokens.INTEGER;}\r\n<INITIAL>{whitespace}\t{}\r\n\r\n<INITIAL>{quote}\t\t\t{BEGIN(LexicalStates.IN_STRING); str = new StringBuilder(); return Tokens.STRING_BEGIN;}\r\n<IN_STRING>{charNormal}+\t{str.Append(yytext()); return Tokens.CHARS;}\r\n<IN_STRING>{charUnicode}\t{str.Append((char)int.Parse(yytext().Substring(2), System.Globalization.NumberStyles.HexNumber)); return Tokens.UNICODECHAR;}\r\n<IN_STRING>\"\\\\f\"\t\t\t{str.Append('\\f'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\b\"\t\t\t{str.Append('\\b'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\r\"\t\t\t{str.Append('\\r'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\n\"\t\t\t{str.Append('\\n'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\t\"\t\t\t{str.Append('\\t'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\\\\\\"\t\t\t{str.Append('\\\\'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\/\"\t\t\t{str.Append('/'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>\"\\\\\\\"\"\t\t\t{str.Append('\"'); return Tokens.ESCAPEDCHAR;}\r\n<IN_STRING>{quote}\t\t\t{BEGIN(LexicalStates.INITIAL); return Tokens.STRING_END;}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Generators/json.y",
    "content": "using PHP.Core;\r\nusing PHP.Core.Parsers.GPPG;\r\nusing System.Diagnostics;\r\n\r\n%%\r\n\r\n%namespace PHP.Library.Json\r\n%valuetype SemanticValueType\r\n%positiontype Position\r\n%tokentype Tokens\r\n%visibility public\r\n\r\n%union\r\n{\r\n\tpublic object obj; \r\n}\r\n\r\n%token ARRAY_OPEN\r\n%token ARRAY_CLOSE\r\n%token ITEMS_SEPARATOR\r\n%token NAMEVALUE_SEPARATOR\r\n%token OBJECT_OPEN\r\n%token OBJECT_CLOSE\r\n%token TRUE\r\n%token FALSE\r\n%token NULL\r\n%token INTEGER\r\n%token DOUBLE\r\n%token STRING\r\n\r\n%token STRING_BEGIN\r\n%token CHARS\r\n%token UNICODECHAR\r\n%token ESCAPEDCHAR\r\n%token STRING_END\r\n\t   \r\n%% /* Productions */\r\n\r\nstart:\r\n\t  value\t{ Result = $1.obj; }\r\n;\r\n\r\nobject:\r\n\t\tOBJECT_OPEN members OBJECT_CLOSE\r\n\t\t{\r\n\t\t\tvar elements = (List<KeyValuePair<string, object>>)$2.obj;\r\n\t\t\t\t\r\n\t\t\tif (decodeOptions.Assoc)\r\n\t\t\t{\r\n\t\t\t\tvar arr = new PhpArray( elements.Count );\r\n\t\t\t\t\r\n\t\t\t\tforeach (var item in elements)\r\n\t\t\t\t\tarr.Add( PHP.Core.Convert.StringToArrayKey(item.Key), item.Value );\r\n\t\t\t\t\t\r\n\t\t\t\t$$.obj = arr;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar std = new stdClass(context, true);\r\n\t\t\t\tstd.AddRange( elements );\r\n\t\t\t\t$$.obj = std;\r\n\t\t\t}\r\n\t\t}\r\n\t|\tOBJECT_OPEN OBJECT_CLOSE\t{ $$.obj = new stdClass(context, true); }\r\n\t;\r\n\t\r\nmembers:\r\n\t\tpair ITEMS_SEPARATOR members\r\n\t\t{\r\n\t\t\tvar elements = (List<KeyValuePair<string, object>>)$3.obj;\r\n\t\t\tvar result = new List<KeyValuePair<string, object>>( elements.Count + 1 ){ (KeyValuePair<string,object>)$1.obj };\r\n\t\t\tresult.AddRange(elements);\t\t\t\r\n\t\t\t$$.obj = result;\r\n\t\t}\r\n\t|\tpair\t{ $$.obj = new List<KeyValuePair<string, object>>(){ (KeyValuePair<string,object>)$1.obj }; }\r\n\t;\r\n\t\r\npair:\r\n\t\tSTRING NAMEVALUE_SEPARATOR value\t{ $$.obj = new KeyValuePair<string,object>((string)$1.obj, $3.obj); }\r\n\t;\r\n\t\r\narray:\r\n\t\tARRAY_OPEN elements ARRAY_CLOSE\r\n\t\t{\r\n\t\t\tvar elements = (List<object>)$2.obj;\r\n\t\t\tvar arr = new PhpArray( elements.Count );\r\n\t\t\t\r\n\t\t\tforeach (var item in elements)\r\n\t\t\t\tarr.Add( item );\r\n\t\t\t\t\r\n\t\t\t$$.obj = arr;\r\n\t\t}\r\n\t|\tARRAY_OPEN ARRAY_CLOSE\t{ $$.obj = new PhpArray(); }\r\n\t;\r\n\t\r\nelements:\r\n\t\tvalue ITEMS_SEPARATOR elements\r\n\t\t{\r\n\t\t\tvar elements = (List<object>)$3.obj;\r\n\t\t\tvar result = new List<object>( elements.Count + 1 ){ $1.obj };\r\n\t\t\tresult.AddRange(elements);\t\t\t\r\n\t\t\t$$.obj = result;\r\n\t\t}\r\n\t|\tvalue { $$.obj = new List<object>(){ $1.obj }; }\r\n\t;\r\n\t\r\nvalue:\r\n\t\tSTRING\t{$$.obj = $1.obj;}\r\n\t|\tINTEGER\t{$$.obj = $1.obj;}\r\n\t|\tDOUBLE\t{$$.obj = $1.obj;}\r\n\t|\tobject\t{$$.obj = $1.obj;}\r\n\t|\tarray\t{$$.obj = $1.obj;}\r\n\t|\tTRUE\t{$$.obj = true;}\r\n\t|\tFALSE\t{$$.obj = false;}\r\n\t|\tNULL\t{$$.obj = null;}\r\n\t;\r\n\r\n%%\r\n\r\nprotected override int EofToken { get { return (int)Tokens.EOF; } }\r\nprotected override int ErrorToken { get { return (int)Tokens.ERROR; } }\r\n\r\nprivate readonly ScriptContext/*!*/context;\r\nprivate readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions;\r\n\r\npublic Parser(ScriptContext/*!*/context, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions)\r\n{\r\n\tSystem.Diagnostics.Debug.Assert(context != null && decodeOptions != null);\r\n\t\r\n\tthis.context = context;\r\n\tthis.decodeOptions = decodeOptions;\r\n}\r\n\r\npublic object Result{get;private set;}"
  },
  {
    "path": "Source/ClassLibrary/Hash.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.  \r\n Copyright (c) 2010 Jakub Misek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/*\r\n\r\n TODO: (PHP 5.2 hash functions)\r\n    * hash_algos  — Return a list of registered hashing algorithms\r\n    * hash_copy — Copy hashing context\r\n    * hash_file — Generate a hash value using the contents of a given file\r\n    * hash_final — Finalize an incremental hash and return resulting digest\r\n    * hash_hmac_file — Generate a keyed hash value using the HMAC method and the contents of a given file\r\n    * hash_hmac — Generate a keyed hash value using the HMAC method\r\n    * hash_init — Initialize an incremental hashing context\r\n    * hash_update_file — Pump data into an active hashing context from a file\r\n    * hash_update_stream — Pump data into an active hashing context from an open stream\r\n    * hash_update — Pump data into an active hashing context\r\n    * hash — Generate a hash value (message digest)\r\n\r\n*/\r\n\r\nusing System;\r\nusing PHP.Core;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text.RegularExpressions;\r\nusing System.ComponentModel;\r\nusing CRYPT = System.Security.Cryptography;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// PHP hash functions support.\r\n    /// </summary>\r\n    [ImplementsExtension(LibraryDescriptor.ExtHash)]\r\n    public static class PhpHash\r\n    {\r\n        #region crc32, (Only CLR:) md5, md5_file, sha1, sha1_file, sha256, sha256_file\r\n\r\n        /// <summary>\r\n        /// Calculates the crc32 polynomial of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes to compute crc32 of.</param>\r\n        /// <returns>The CRC32 of <paramref name=\"bytes\"/>.</returns>\r\n        [ImplementsFunction(\"crc32\")]\r\n        [PureFunction]\r\n        public static int CRC32(PhpBytes bytes)\r\n        {\r\n            return BitConverter.ToInt32(new CRC32().ComputeHash(bytes.ReadonlyData), 0);\r\n        }\r\n\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Calculate the md5 hash of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes to compute md5 of.</param>\r\n        /// <returns>MD5 of <paramref name=\"bytes\"/> as a sequence of hexadecimal numbers.</returns>\r\n        [ImplementsFunction(\"md5\")]\r\n        [PureFunction]\r\n        public static string MD5(PhpBytes bytes)\r\n        {\r\n            return (string)MD5(bytes, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculate the md5 hash of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes to compute md5 of.</param>\r\n        /// <param name=\"rawOutput\">If true, returns raw binary hash, otherwise returns hash as \r\n        /// a sequence of hexadecimal numbers.</param>\r\n        /// <returns>md5 of <paramref name=\"bytes\"/>.</returns>\r\n        [ImplementsFunction(\"md5\")]\r\n        [PureFunction]\r\n        public static object MD5(PhpBytes bytes, bool rawOutput)\r\n        {\r\n            return Hash(new CRYPT.MD5CryptoServiceProvider(), bytes, rawOutput);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the md5 hash of a given file.\r\n        /// </summary>\r\n        /// <param name=\"fileName\">The file name.</param>\r\n        /// <returns>MD5 of given <paramref name=\"fileName\"/> content.</returns>\r\n        [ImplementsFunction(\"md5_file\")]\r\n        public static string MD5FromFile(string fileName)\r\n        {\r\n            return (string)MD5FromFile(fileName, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the md5 hash of a given file.\r\n        /// </summary>\r\n        /// <param name=\"fileName\">The file name.</param>\r\n        /// <param name=\"rawOutput\">If <B>true</B>, returns raw binary hash, otherwise returns hash as \r\n        /// a sequence of hexadecimal numbers.</param>\r\n        /// <returns>MD5 of given <paramref name=\"fileName\"/> content.</returns>\r\n        [ImplementsFunction(\"md5_file\")]\r\n        public static object MD5FromFile(string fileName, bool rawOutput)\r\n        {\r\n            return HashFromFile(new CRYPT.MD5CryptoServiceProvider(), fileName, rawOutput);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculate the sha1 hash of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes to compute SHA1 of.</param>\r\n        /// <returns>SHA1 of <paramref name=\"bytes\"/> as a sequence of hexadecimal numbers.</returns>\r\n        [ImplementsFunction(\"sha1\")]\r\n        [PureFunction]\r\n        public static string SHA1(PhpBytes bytes)\r\n        {\r\n            return (string)SHA1(bytes, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculate the SHA1 hash of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes to compute SHA1 of.</param>\r\n        /// <param name=\"rawOutput\">If <B>true</B>, returns raw binary hash, otherwise returns hash as \r\n        /// a sequence of hexadecimal numbers.</param>\r\n        /// <returns>md5 of <paramref name=\"bytes\"/>.</returns>\r\n        [ImplementsFunction(\"sha1\")]\r\n        [PureFunction]\r\n        public static object SHA1(PhpBytes bytes, bool rawOutput)\r\n        {\r\n            return Hash(new CRYPT.SHA1CryptoServiceProvider(), bytes, rawOutput);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the SHA1 hash of a given file.\r\n        /// </summary>\r\n        /// <param name=\"fileName\">The file name.</param>\r\n        /// <returns>SHA1 of given <paramref name=\"fileName\"/> content.</returns>\r\n        [ImplementsFunction(\"sha1_file\")]\r\n        public static string SHA1FromFile(string fileName)\r\n        {\r\n            return (string)SHA1FromFile(fileName, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the SHA1 hash of a given file.\r\n        /// </summary>\r\n        /// <param name=\"fileName\">The file name.</param>\r\n        /// <param name=\"rawOutput\">If <B>true</B>, returns raw binary hash, otherwise returns hash as \r\n        /// a sequence of hexadecimal numbers.</param>\r\n        /// <returns>SHA1 of <paramref name=\"fileName\"/> content.</returns>\r\n        [ImplementsFunction(\"sha1_file\")]\r\n        public static object SHA1FromFile(string fileName, bool rawOutput)\r\n        {\r\n            return HashFromFile(new CRYPT.SHA1CryptoServiceProvider(), fileName, rawOutput);\r\n        }\r\n#endif\r\n\r\n        #region not implemented in PHP\r\n        ///// <summary>\r\n        ///// Calculate the sha256 hash of a string of bytes.\r\n        ///// </summary>\r\n        ///// <param name=\"bytes\">The string of bytes to compute SHA256 of.</param>\r\n        ///// <returns>SHA256 of <paramref name=\"bytes\"/> as a sequence of hexadecimal numbers.</returns>\r\n        //[ImplementsFunction(\"sha256\")]\r\n        //public static string SHA256(PhpBytes bytes)\r\n        //{\r\n        //    return (string)SHA256(bytes, false);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Calculate the SHA256 hash of a string of bytes.\r\n        ///// </summary>\r\n        ///// <param name=\"bytes\">The string of bytes to compute SHA256 of.</param>\r\n        ///// <param name=\"rawOutput\">If <B>true</B>, returns raw binary hash, otherwise returns hash as \r\n        ///// a sequence of hexadecimal numbers.</param>\r\n        ///// <returns>md5 of <paramref name=\"str\"/>.</returns>\r\n        //[ImplementsFunction(\"sha256\")]\r\n        //public static object SHA256(PhpBytes bytes, bool rawOutput)\r\n        //{\r\n        //    return Hash(new CRYPT.SHA256Managed(), bytes, rawOutput);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Calculates the SHA256 hash of a given file.\r\n        ///// </summary>\r\n        ///// <param name=\"fileName\">The file name.</param>\r\n        ///// <returns>SHA256 of <paramref name=\"str\"/> as a sequence of hexadecimal numbers.</returns>\r\n        //[ImplementsFunction(\"sha256_file\")]\r\n        //public static string SHA256FromFile(string fileName)\r\n        //{\r\n        //    return (string)SHA256FromFile(fileName, false);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Calculates the SHA256 hash of a given file.\r\n        ///// </summary>\r\n        ///// <param name=\"fileName\">The file name.</param>\r\n        ///// <param name=\"rawOutput\">If <B>true</B>, returns raw binary hash, otherwise returns hash as \r\n        ///// a sequence of hexadecimal numbers.</param>\r\n        ///// <returns>SHA256 of <paramref name=\"str\"/>.</returns>\r\n        //[ImplementsFunction(\"sha256_file\")]\r\n        //public static object SHA256FromFile(string fileName, bool rawOutput)\r\n        //{\r\n        //    return HashFromFile(new CRYPT.SHA256Managed(), fileName, rawOutput);\r\n        //}\r\n        #endregion\r\n\r\n\r\n        /// <summary>\r\n        /// Computes a hash of a string of bytes using specified algorithm.\r\n        /// </summary>\r\n        private static object Hash(CRYPT.HashAlgorithm/*!*/ algorithm, PhpBytes bytes, bool rawOutput)\r\n        {\r\n            if (bytes == null) return null;\r\n\r\n            byte[] hash = algorithm.ComputeHash(bytes.ReadonlyData);\r\n\r\n            if (rawOutput)\r\n                return new PhpBytes(hash);\r\n            else\r\n                return StringUtils.BinToHex(hash, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Computes a hash of a file using specified algorithm.\r\n        /// </summary>\r\n        private static object HashFromFile(CRYPT.HashAlgorithm/*!*/ algorithm, string fileName, bool rawOutput)\r\n        {\r\n            byte[] hash;\r\n\r\n            try\r\n            {\r\n                using (PhpStream stream = PhpStream.Open(fileName, \"rb\", StreamOpenOptions.Empty, StreamContext.Default))\r\n                //using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read))\r\n                {\r\n                    if (stream == null)\r\n                        return null;\r\n\r\n                    object data = stream.ReadContents();\r\n\t\t\t        if (data == null)\r\n\t\t\t\t        return null;\r\n\r\n\t\t\t        PhpBytes bytes = PhpStream.AsBinary(data);\r\n                    if (bytes == null)\r\n                        return null;\r\n\r\n                    hash = algorithm.ComputeHash(bytes.ReadonlyData);\r\n                }\r\n            }\r\n            catch (SystemException)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            if (rawOutput)\r\n                return new PhpBytes(hash);\r\n            else\r\n                return StringUtils.BinToHex(hash, null);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region HashPhpResource\r\n\r\n        /// <summary>\r\n        /// The Hashing Context PHP Resource.\r\n        /// </summary>\r\n        public abstract class HashPhpResource : PhpResource\r\n        {\r\n            #region HashPhpResource base ctor\r\n\r\n            /// <summary>\r\n            /// hash_init\r\n            /// </summary>\r\n            protected HashPhpResource()\r\n                : base(\"Hash Context\")\r\n            {\r\n                Init();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region HashPhpResource interface\r\n\r\n            /// <summary>\r\n            /// hash_copy\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            public abstract HashPhpResource Clone();\r\n\r\n            /// <summary>\r\n            /// hash_init\r\n            /// Restart the hashing algorithm.\r\n            /// </summary>\r\n            public abstract void Init();\r\n\r\n            /// <summary>\r\n            /// hash_update\r\n            /// Push more data into the algorithm, incremental hashing.\r\n            /// </summary>\r\n            /// <param name=\"data\"></param>\r\n            /// <returns></returns>\r\n            public abstract bool Update(byte[] data);\r\n\r\n            /// <summary>\r\n            /// hash_final\r\n            /// Finalize the algorithm. Get the result.\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            public abstract byte[] Final();\r\n\r\n            /// <summary>\r\n            /// HMAC key max size.\r\n            /// </summary>\r\n            public abstract int BlockSize { get; }\r\n\r\n            #endregion\r\n\r\n            #region hash_init state\r\n\r\n            internal HashInitOptions options = HashInitOptions.HASH_DEFAULT;\r\n            internal byte[] HMACkey = null;\r\n\r\n            protected void CloneHashState(HashPhpResource clone)\r\n            {\r\n                clone.options = this.options;\r\n                clone.HMACkey = (this.HMACkey != null) ? (byte[])this.HMACkey.Clone() : null;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Helper methods\r\n\r\n            #region Buffering for blocks of input data\r\n\r\n            private byte[] buffer = null;\r\n            private int bufferUsage = 0;\r\n\r\n            /// <summary>\r\n            /// Returns blocks of data, using buffered data stored before.\r\n            /// Provided data can be too small to fit the block, so they are buffered and processed when more data comes.\r\n            /// </summary>\r\n            /// <param name=\"newData\">New pack of data to be appended to the buffered ones.</param>\r\n            /// <param name=\"blockSize\">Block size, when buffered data fits this, they are returned.</param>\r\n            /// <returns>Packs of block, as a pair of byte array and index of first element.</returns>\r\n            internal IEnumerable<Tuple<byte[], int>> ProcessBlocked(byte[]/*!*/newData, int blockSize)\r\n            {\r\n                Debug.Assert(newData != null);\r\n                Debug.Assert(blockSize > 0);\r\n\r\n                int index = 0;  // index of first byte in the newData to be used as a block start\r\n\r\n                // fill the buffer / used buffered data if it fits the block size\r\n                if (bufferUsage > 0)\r\n                {\r\n                    Debug.Assert(buffer != null);\r\n                    Debug.Assert(buffer.Length == blockSize);\r\n\r\n                    int bytesToFitBuffer = blockSize - bufferUsage; // bytes needed to fill the whole buffer\r\n\r\n                    if (newData.Length < bytesToFitBuffer)\r\n                    {\r\n                        Array.Copy(newData, 0, buffer, bufferUsage, newData.Length);\r\n                        bufferUsage += newData.Length;\r\n                        yield break;\r\n                    }\r\n\r\n                    Array.Copy(newData, 0, buffer, bufferUsage, bytesToFitBuffer);\r\n                    yield return new Tuple<byte[], int>(buffer, 0); // use the data from buffer\r\n\r\n                    bufferUsage = 0;            // buffer is empty now\r\n                    index += bytesToFitBuffer;  // part of newData was used\r\n                }\r\n\r\n                // returns blocks from the newData\r\n                while (index + blockSize <= newData.Length)\r\n                {\r\n                    yield return new Tuple<byte[], int>(newData, index);\r\n                    index += blockSize;\r\n                }\r\n\r\n                // put the rest of newData into the buffer\r\n                int remainingBytes = newData.Length - index;\r\n                if (remainingBytes > 0)\r\n                {\r\n                    if (buffer == null) buffer = new byte[blockSize];\r\n                    Debug.Assert(remainingBytes < blockSize);\r\n                    Debug.Assert(buffer.Length == blockSize);\r\n\r\n                    Array.Copy(newData, index, buffer, 0, remainingBytes);\r\n                    bufferUsage = remainingBytes;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Returns the buffered bytes not processed yet.\r\n            /// </summary>\r\n            /// <param name=\"length\">Amount of used bytes in the buffer.</param>\r\n            /// <returns>Buffer, can be null.</returns>\r\n            internal byte[] GetBufferedBlock(out int length)\r\n            {\r\n                length = bufferUsage;\r\n                return buffer;\r\n            }\r\n\r\n            internal void ClearBufferedBlock()\r\n            {\r\n                bufferUsage = 0;\r\n                buffer = null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Copies the buffered information from this instance into the clone.\r\n            /// </summary>\r\n            /// <param name=\"clone\">Copy buffered info here.</param>\r\n            internal void CloneBufferedBlock(HashPhpResource clone)\r\n            {\r\n                if (bufferUsage > 0)\r\n                {\r\n                    clone.bufferUsage = this.bufferUsage;\r\n                    clone.buffer = new byte[this.buffer.Length];\r\n                    this.buffer.CopyTo(clone.buffer, 0);\r\n                }\r\n                else\r\n                {\r\n                    clone.bufferUsage = 0;\r\n                    clone.buffer = null;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Conversion\r\n\r\n            protected static void DWORDToBigEndian(byte[] block, uint[] x, int digits)\r\n            {\r\n                int index = 0;\r\n                for (int i = 0; index < digits; i += 4)\r\n                {\r\n                    block[i] = (byte)((x[index] >> 0x18) & 0xff);\r\n                    block[i + 1] = (byte)((x[index] >> 0x10) & 0xff);\r\n                    block[i + 2] = (byte)((x[index] >> 8) & 0xff);\r\n                    block[i + 3] = (byte)(x[index] & 0xff);\r\n                    index++;\r\n                }\r\n            }\r\n\r\n            protected static void DWORDFromBigEndian(uint[] x, int digits, byte[] block)\r\n            {\r\n                int index = 0;\r\n                for (int i = 0; index < digits; i += 4)\r\n                {\r\n                    x[index] = ((((uint)block[i] << 0x18) | (uint)(block[i + 1] << 0x10)) | (uint)(block[i + 2] << 8)) | (uint)block[i + 3];\r\n                    index++;\r\n                }\r\n            }\r\n\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Simply compute hash on existing HashPhpResource instance.\r\n            /// No HMAC.\r\n            /// The algorithm is reinitialized.\r\n            /// </summary>\r\n            /// <param name=\"data\"></param>\r\n            /// <returns></returns>\r\n            public byte[] ComputeHash(byte[] data)\r\n            {\r\n                this.Init();\r\n\r\n                if (!this.Update(data))\r\n                    return null;\r\n\r\n                return this.Final();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region hash algorithms implementation\r\n\r\n            #region list of available algorithms\r\n\r\n            internal delegate HashPhpResource HashAlgFactory();\r\n\r\n            internal static Dictionary<string, HashAlgFactory> _HashAlgorithms = null;\r\n            internal static Dictionary<string, HashAlgFactory> HashAlgorithms\r\n            {\r\n                get\r\n                {\r\n                    if (_HashAlgorithms == null)\r\n                    {\r\n                        var algs = new Dictionary<string, HashAlgFactory>(25, StringComparer.OrdinalIgnoreCase);\r\n\r\n                        //\r\n                        // note: use lower case as algorithms name\r\n                        //\r\n\r\n                        algs[\"crc32\"] = () => new CRC32();\r\n                        algs[\"crc32b\"] = () => new CRC32B();\r\n\r\n                        algs[\"md2\"] = () => new MD2();\r\n                        algs[\"md4\"] = () => new MD4();\r\n                        algs[\"md5\"] = () => new MD5();\r\n\r\n                        //algs[\"haval256,3\"] = () => new HAVAL256();\r\n                        //algs[\"haval224,3\"] = () => new HAVAL224();\r\n                        //algs[\"haval192,3\"] = () => new HAVAL192();\r\n                        //algs[\"haval160,3\"] = () => new HAVAL160();\r\n                        //algs[\"haval128,3\"] = () => new HAVAL128();\r\n\r\n                        //algs[\"tiger192,3\"] = () => new TIGER();\r\n                        //algs[\"tiger128,3\"] = () => new TIGER128();\r\n                        //algs[\"tiger160,3\"] = () => new TIGER160();\r\n                        \r\n                        //algs[\"gost\"] = () => new GOST();\r\n                        \r\n                        algs[\"adler32\"] = () => new ADLER32();\r\n                        \r\n                        algs[\"sha1\"] = () => new SHA1();\r\n                        //algs[\"sha224\"] = () => new SHA224();\r\n                        algs[\"sha256\"] = () => new SHA256();\r\n                        //algs[\"sha384\"] = () => new SHA384();\r\n                        //algs[\"sha512\"] = () => new SHA512();\r\n                        \r\n                        //algs[\"whirlpool\"] = () => new WHIRLPOOL();\r\n                        \r\n                        //algs[\"ripemd160\"] = () => new RIPEMD160();\r\n                        //algs[\"ripemd128\"] = () => new RIPEMD128();\r\n                        //algs[\"ripemd256\"] = () => new RIPEMD256();\r\n                        //algs[\"ripemd320\"] = () => new RIPEMD320();\r\n                        \r\n                        //algs[\"snefru256\"] = () => new SNEFRU256();\r\n                        \r\n                        _HashAlgorithms = algs;\r\n                    }\r\n\r\n                    return _HashAlgorithms;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            public sealed class ADLER32 : HashPhpResource\r\n            {\r\n                private uint state;\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new ADLER32()\r\n                    {\r\n                        state = this.state\r\n                    };\r\n                    CloneHashState(clone);\r\n                    return clone;\r\n                }\r\n                public override void Init()\r\n                {\r\n                    state = 1;\r\n                }\r\n                public override bool Update(byte[] data)\r\n                {\r\n                    uint s0, s1;\r\n\r\n                    s0 = state & 0xffff;\r\n                    s1 = (state >> 16) & 0xffff;\r\n                    foreach (byte b in data)\r\n                    {\r\n                        s0 = (s0 + b) % 65521;\r\n                        s1 = (s1 + s0) % 65521;\r\n                    }\r\n                    state = s0 + (s1 << 16);\r\n\r\n                    return true;\r\n                }\r\n                public override byte[] Final()\r\n                {\r\n                    byte[] bytes = BitConverter.GetBytes((uint)state);\r\n                    Array.Reverse(bytes);\r\n\r\n                    state = 0;\r\n                    return bytes;\r\n                }\r\n                public override int BlockSize { get { return 4; } }\r\n            }\r\n            public sealed class CRC32 : HashPhpResource\r\n            {\r\n                private uint state;\r\n\r\n                private static uint[] crc32_table = { 0x0,\r\n\t0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,\r\n\t0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,\r\n\t0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,\r\n\t0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,\r\n\t0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,\r\n\t0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,\r\n\t0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,\r\n\t0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,\r\n\t0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,\r\n\t0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,\r\n\t0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,\r\n\t0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,\r\n\t0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,\r\n\t0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,\r\n\t0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,\r\n\t0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,\r\n\t0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,\r\n\t0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,\r\n\t0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,\r\n\t0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,\r\n\t0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,\r\n\t0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,\r\n\t0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,\r\n\t0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,\r\n\t0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,\r\n\t0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,\r\n\t0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,\r\n\t0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,\r\n\t0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,\r\n\t0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,\r\n\t0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,\r\n\t0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,\r\n\t0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,\r\n\t0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,\r\n\t0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,\r\n\t0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,\r\n\t0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,\r\n\t0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,\r\n\t0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,\r\n\t0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,\r\n\t0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,\r\n\t0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,\r\n\t0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,\r\n\t0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,\r\n\t0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,\r\n\t0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,\r\n\t0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,\r\n\t0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,\r\n\t0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,\r\n\t0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,\r\n\t0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4\r\n                                                    };\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new CRC32()\r\n                    {\r\n                        state = this.state\r\n                    };\r\n                    CloneHashState(clone);\r\n                    return clone;\r\n                }\r\n                public override void Init()\r\n                {\r\n                    state = ~(uint)0;\r\n                }\r\n                public override bool Update(byte[] data)\r\n                {\r\n                    foreach (byte b in data)\r\n                    {\r\n                        state = (state << 8) ^ crc32_table[(state >> 24) ^ (b & 0xff)];\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n                public override byte[] Final()\r\n                {\r\n                    state = ~state;\r\n                    var h = BitConverter.GetBytes((uint)state);\r\n\r\n                    state = 0;\r\n                    return h;\r\n                }\r\n                public override int BlockSize { get { return 4; } }\r\n            }\r\n            public sealed class CRC32B : HashPhpResource\r\n            {\r\n                private uint state;\r\n\r\n                private static uint[] crc32b_table = {\r\n\t0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,\r\n\t0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,\r\n\t0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\r\n\t0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,\r\n\t0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,\r\n\t0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\r\n\t0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,\r\n\t0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,\r\n\t0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\r\n\t0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,\r\n\t0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,\r\n\t0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\r\n\t0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,\r\n\t0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,\r\n\t0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\r\n\t0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,\r\n\t0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,\r\n\t0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\r\n\t0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,\r\n\t0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\r\n\t0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\r\n\t0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,\r\n\t0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,\r\n\t0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\r\n\t0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,\r\n\t0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,\r\n\t0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\r\n\t0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,\r\n\t0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,\r\n\t0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\r\n\t0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,\r\n\t0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,\r\n\t0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\r\n\t0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,\r\n\t0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,\r\n\t0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\r\n\t0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,\r\n\t0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,\r\n\t0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\r\n\t0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\r\n\t0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,\r\n\t0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\r\n\t0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,\r\n\t0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,\r\n\t0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\r\n\t0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,\r\n\t0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,\r\n\t0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\r\n\t0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,\r\n\t0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,\r\n\t0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\r\n\t0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,\r\n\t0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,\r\n\t0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\r\n\t0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,\r\n\t0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,\r\n\t0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\r\n\t0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,\r\n\t0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,\r\n\t0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\r\n\t0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,\r\n\t0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,\r\n\t0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\r\n\t0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\r\n};\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new CRC32B()\r\n                    {\r\n                        state = this.state\r\n                    };\r\n                    CloneHashState(clone);\r\n                    return clone;\r\n                }\r\n                public override void Init()\r\n                {\r\n                    state = ~(uint)0;\r\n                }\r\n                public override bool Update(byte[] data)\r\n                {\r\n                    foreach (byte b in data)\r\n                    {\r\n                        state = (state >> 8) ^ crc32b_table[(state ^ b) & 0xff];\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n                public override byte[] Final()\r\n                {\r\n                    state = ~state;\r\n\r\n                    byte[] bytes = BitConverter.GetBytes((uint)state);\r\n                    Array.Reverse(bytes);\r\n\r\n                    state = 0;\r\n                    return bytes;\r\n                }\r\n                public override int BlockSize { get { return 4; } }\r\n            }\r\n            public sealed class MD2 : HashPhpResource\r\n            {\r\n                private static byte[] MD2_S = {\r\n\t 41,  46,  67, 201, 162, 216, 124,   1,  61,  54,  84, 161, 236, 240,   6,  19,\r\n\t 98, 167,   5, 243, 192, 199, 115, 140, 152, 147,  43, 217, 188,  76, 130, 202,\r\n\t 30, 155,  87,  60, 253, 212, 224,  22, 103,  66, 111,  24, 138,  23, 229,  18,\r\n\t190,  78, 196, 214, 218, 158, 222,  73, 160, 251, 245, 142, 187,  47, 238, 122,\r\n\t169, 104, 121, 145,  21, 178,   7,  63, 148, 194,  16, 137,  11,  34,  95,  33,\r\n\t128, 127,  93, 154,  90, 144,  50,  39,  53,  62, 204, 231, 191, 247, 151,   3,\r\n\t255,  25,  48, 179,  72, 165, 181, 209, 215,  94, 146,  42, 172,  86, 170, 198,\r\n\t 79, 184,  56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116,   4, 241,\r\n\t 69, 157, 112,  89, 100, 113, 135,  32, 134,  91, 207, 101, 230,  45, 168,   2,\r\n\t 27,  96,  37, 173, 174, 176, 185, 246,  28,  70,  97, 105,  52,  64, 126,  15,\r\n\t 85,  71, 163,  35, 221,  81, 175,  58, 195,  92, 249, 206, 186, 197, 234,  38,\r\n\t 44,  83,  13, 110, 133,  40, 132,   9, 211, 223, 205, 244,  65, 129,  77,  82,\r\n\t106, 220,  55, 200, 108, 193, 171, 250,  36, 225, 123,   8,  12, 189, 177,  74,\r\n\t120, 136, 149, 139, 227,  99, 232, 109, 233, 203, 213, 254,  59,   0,  29,  57,\r\n\t242, 239, 183,  14, 102,  88, 208, 228, 166, 119, 114, 248, 235, 117,  75,  10,\r\n\t 49,  68,  80, 180, 143, 237,  31,  26, 219, 153, 141,  51, 159,  17, 131,  20 };\r\n\r\n                #region state\r\n\r\n                private readonly byte[] state = new byte[48];\r\n                private readonly byte[] checksum = new byte[16];\r\n                \r\n                #endregion\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new MD2();\r\n\r\n                    this.CloneHashState(clone);\r\n                    this.CloneBufferedBlock(clone);\r\n                    this.state.CopyTo(clone.state, 0);\r\n                    this.checksum.CopyTo(clone.checksum, 0);\r\n                                        \r\n                    return clone;\r\n                }\r\n\r\n                public override void Init()\r\n                {\r\n                    this.ClearBufferedBlock();\r\n                    Array.Clear(this.state, 0, this.state.Length);\r\n                    Array.Clear(this.checksum, 0, this.checksum.Length);                    \r\n                }\r\n\r\n                private void TransformBlock(byte[]/*!*//*byte[16+startIndex]*/block, int startIndex)\r\n                {\r\n                    Debug.Assert(block != null);\r\n                    Debug.Assert(block.Length >= 16 + startIndex);\r\n\r\n                    byte i, j, t = 0;\r\n\r\n                    for (i = 0; i < 16; i++)\r\n                    {\r\n                        state[16 + i] = block[i + startIndex];\r\n                        state[32 + i] = (byte)(state[16 + i] ^ state[i]);\r\n                    }\r\n\r\n                    for (i = 0; i < 18; i++)\r\n                    {\r\n                        for (j = 0; j < 48; j++)\r\n                        {\r\n                            t = state[j] = (byte)(state[j] ^ MD2_S[t]);\r\n                        }\r\n                        unchecked \r\n                        {\r\n                            t += i;\r\n                        }\r\n                    }\r\n\r\n                    /* Update checksum -- must be after transform to avoid fouling up last message block */\r\n                    t = checksum[15];\r\n                    for (i = 0; i < 16; i++)\r\n                    {\r\n                        t = checksum[i] ^= MD2_S[block[i + startIndex] ^ t];\r\n                    }\r\n                }\r\n\r\n                public override bool Update(byte[] data)\r\n                {\r\n                    foreach (var block in ProcessBlocked(data, 16))\r\n                        TransformBlock(block.Item1, block.Item2);\r\n                    \r\n                    return true;\r\n                }\r\n\r\n                public override byte[] Final()\r\n                {\r\n                    // take the remaining buffer\r\n                    // fill the rest up to 16 bytes with \"remainingBytes\" value\r\n                    int bufferUsage;\r\n                    byte[] buffer = GetBufferedBlock(out bufferUsage);\r\n                    if (buffer == null) buffer = new byte[16];\r\n                    Debug.Assert(buffer.Length == 16);\r\n                    Debug.Assert(bufferUsage < 16);\r\n                    byte remainingBytes = (byte)(16 - bufferUsage);\r\n                    for (int i = bufferUsage; i < 16; ++i)\r\n                        buffer[i] = remainingBytes;\r\n                    \r\n                    //\r\n                    TransformBlock(buffer, 0);\r\n                    TransformBlock(checksum, 0);\r\n\r\n                    //\r\n                    byte[] hash = new byte[16];\r\n                    Array.Copy(this.state, 0, hash, 0, 16);\r\n                    return hash;\r\n                }\r\n\r\n                public override int BlockSize { get { return 16; } }\r\n            }\r\n            public sealed class MD4 : HashPhpResource\r\n            {\r\n                #region state\r\n\r\n                private uint[] state = new uint[4];\r\n                private uint[] count = new uint[2];\r\n\r\n                #endregion\r\n\r\n                #region MD4 transformation\r\n                private static uint MD4_F(uint x, uint y, uint z) { return ((z) ^ ((x) & ((y) ^ (z)))); }\r\n                private static uint MD4_G(uint x, uint y, uint z) { return (((x) & ((y) | (z))) | ((y) & (z))); }\r\n                private static uint MD4_H(uint x, uint y, uint z) { return ((x) ^ (y) ^ (z)); }\r\n\r\n                private static uint ROTL32(byte s, uint v) { return (((v) << (s)) | ((v) >> (32 - (s)))); }\r\n\r\n                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); } }\r\n                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); } }\r\n                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); } }\r\n                private static uint[] Decode(byte[] block, int startIndex, int bytesCount)\r\n                {\r\n                    Debug.Assert(bytesCount > 0);\r\n                    Debug.Assert((bytesCount % 4) == 0);\r\n\r\n                    uint[] result = new uint[bytesCount / 4];\r\n                    int index = 0;\r\n                    while (bytesCount > 0)\r\n                    {\r\n                        result[index++] = BitConverter.ToUInt32(block, startIndex);\r\n                        startIndex += 4;\r\n                        bytesCount -= 4;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n                private static byte[] Encode(uint[] nums, int startIndex, int bytesCount)\r\n                {\r\n                    Debug.Assert(bytesCount > 0);\r\n                    Debug.Assert((bytesCount % 4) == 0);\r\n\r\n                    byte[] result = new byte[bytesCount];\r\n\r\n                    int index = 0;\r\n                    while (index < bytesCount)\r\n                    {\r\n                        Array.Copy(BitConverter.GetBytes(nums[startIndex++]), 0, result, index, 4);\r\n                        index += 4;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n                private void MD4Transform(byte[] block, int startIndex)\r\n                {\r\n                    uint a = state[0], b = state[1], c = state[2], d = state[3];\r\n                    uint[] x = Decode(block, startIndex, 64);\r\n\r\n\r\n                    /* Round 1 */\r\n                    MD4_R1(ref a, b, c, d, x[0], 3);\r\n                    MD4_R1(ref d, a, b, c, x[1], 7);\r\n                    MD4_R1(ref c, d, a, b, x[2], 11);\r\n                    MD4_R1(ref b, c, d, a, x[3], 19);\r\n                    MD4_R1(ref a, b, c, d, x[4], 3);\r\n                    MD4_R1(ref d, a, b, c, x[5], 7);\r\n                    MD4_R1(ref c, d, a, b, x[6], 11);\r\n                    MD4_R1(ref b, c, d, a, x[7], 19);\r\n                    MD4_R1(ref a, b, c, d, x[8], 3);\r\n                    MD4_R1(ref d, a, b, c, x[9], 7);\r\n                    MD4_R1(ref c, d, a, b, x[10], 11);\r\n                    MD4_R1(ref b, c, d, a, x[11], 19);\r\n                    MD4_R1(ref a, b, c, d, x[12], 3);\r\n                    MD4_R1(ref d, a, b, c, x[13], 7);\r\n                    MD4_R1(ref c, d, a, b, x[14], 11);\r\n                    MD4_R1(ref b, c, d, a, x[15], 19);\r\n\r\n                    /* Round 2 */\r\n                    MD4_R2(ref a, b, c, d, x[0], 3);\r\n                    MD4_R2(ref d, a, b, c, x[4], 5);\r\n                    MD4_R2(ref c, d, a, b, x[8], 9);\r\n                    MD4_R2(ref b, c, d, a, x[12], 13);\r\n                    MD4_R2(ref a, b, c, d, x[1], 3);\r\n                    MD4_R2(ref d, a, b, c, x[5], 5);\r\n                    MD4_R2(ref c, d, a, b, x[9], 9);\r\n                    MD4_R2(ref b, c, d, a, x[13], 13);\r\n                    MD4_R2(ref a, b, c, d, x[2], 3);\r\n                    MD4_R2(ref d, a, b, c, x[6], 5);\r\n                    MD4_R2(ref c, d, a, b, x[10], 9);\r\n                    MD4_R2(ref b, c, d, a, x[14], 13);\r\n                    MD4_R2(ref a, b, c, d, x[3], 3);\r\n                    MD4_R2(ref d, a, b, c, x[7], 5);\r\n                    MD4_R2(ref c, d, a, b, x[11], 9);\r\n                    MD4_R2(ref b, c, d, a, x[15], 13);\r\n\r\n                    /* Round 3 */\r\n                    MD4_R3(ref a, b, c, d, x[0], 3);\r\n                    MD4_R3(ref d, a, b, c, x[8], 9);\r\n                    MD4_R3(ref c, d, a, b, x[4], 11);\r\n                    MD4_R3(ref b, c, d, a, x[12], 15);\r\n                    MD4_R3(ref a, b, c, d, x[2], 3);\r\n                    MD4_R3(ref d, a, b, c, x[10], 9);\r\n                    MD4_R3(ref c, d, a, b, x[6], 11);\r\n                    MD4_R3(ref b, c, d, a, x[14], 15);\r\n                    MD4_R3(ref a, b, c, d, x[1], 3);\r\n                    MD4_R3(ref d, a, b, c, x[9], 9);\r\n                    MD4_R3(ref c, d, a, b, x[5], 11);\r\n                    MD4_R3(ref b, c, d, a, x[13], 15);\r\n                    MD4_R3(ref a, b, c, d, x[3], 3);\r\n                    MD4_R3(ref d, a, b, c, x[11], 9);\r\n                    MD4_R3(ref c, d, a, b, x[7], 11);\r\n                    MD4_R3(ref b, c, d, a, x[15], 15);\r\n\r\n                    unchecked\r\n                    {\r\n                        state[0] += a;\r\n                        state[1] += b;\r\n                        state[2] += c;\r\n                        state[3] += d;\r\n                    }\r\n                }\r\n                #endregion\r\n\r\n                #region HashPhpResource\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new MD4();\r\n                    this.CloneHashState(clone);\r\n                    this.CloneBufferedBlock(clone);\r\n                    this.state.CopyTo(clone.state, 0);\r\n                    this.count.CopyTo(clone.count, 0);\r\n\r\n                    return clone;\r\n                }\r\n                public override void Init()\r\n                {\r\n                    this.ClearBufferedBlock();\r\n\r\n                    count[0] = count[1] = 0;\r\n                    /* Load magic initialization constants.\r\n                     */\r\n                    state[0] = 0x67452301;\r\n                    state[1] = 0xefcdab89;\r\n                    state[2] = 0x98badcfe;\r\n                    state[3] = 0x10325476;\r\n                }\r\n                public override bool Update(byte[] data)\r\n                {\r\n                    /* Update number of bits */\r\n                    if ((count[0] += ((uint)data.Length << 3)) < ((uint)data.Length << 3))\r\n                        ++count[1];\r\n                    count[1] += ((uint)data.Length >> 29);\r\n\r\n                    foreach (var block in ProcessBlocked(data, 64))\r\n                        MD4Transform(block.Item1, block.Item2);\r\n                    \r\n                    return true;\r\n                }\r\n                public override byte[] Final()\r\n                {\r\n                    // save length\r\n                    byte[] bits = Encode(count, 0, 8);\r\n\r\n                    // padd to 56 mod 64\r\n                    int bufferUsage;\r\n                    byte[] buffer = GetBufferedBlock(out bufferUsage);\r\n                    if (buffer == null) buffer = new byte[64];\r\n                    Debug.Assert(buffer.Length == 64);\r\n                    int padLen = (bufferUsage < 56) ? (56 - bufferUsage) : (120 - bufferUsage);\r\n                    if (padLen > 0)\r\n                    {\r\n                        byte[] padding = new byte[padLen];\r\n                        padding[0] = 0x80;\r\n                        Update(padding);\r\n                    }\r\n\r\n                    Update(bits);\r\n\r\n                    byte[] result = Encode(state, 0, 16);\r\n\r\n                    // cleanup sensitive data\r\n                    Array.Clear(state, 0, state.Length);\r\n                    Array.Clear(count, 0, count.Length);\r\n\r\n                    // done\r\n                    return result;\r\n                }\r\n                public override int BlockSize { get { return 64; } }\r\n\r\n                #endregion\r\n            }\r\n            public sealed class MD5 : HashPhpResource\r\n            {\r\n                #region state\r\n\r\n                private uint[] state = new uint[4];\r\n                private uint[] count = new uint[2];\r\n\r\n                #endregion\r\n\r\n                #region MD5 transformation\r\n\r\n                /// <summary>\r\n                /// MD5 Transformation constants.\r\n                /// </summary>\r\n                enum MD5Consts : byte\r\n                {\r\n                    S11 = 7,\r\n                    S12 = 12,\r\n                    S13 = 17,\r\n                    S14 = 22,\r\n                    S21 = 5,\r\n                    S22 = 9,\r\n                    S23 = 14,\r\n                    S24 = 20,\r\n                    S31 = 4,\r\n                    S32 = 11,\r\n                    S33 = 16,\r\n                    S34 = 23,\r\n                    S41 = 6,\r\n                    S42 = 10,\r\n                    S43 = 15,\r\n                    S44 = 21,\r\n                }\r\n               \r\n                /// F, G, H and I are basic MD5 functions.\r\n                private static uint F(uint x, uint y, uint z) { return (((x) & (y)) | ((~x) & (z))); }\r\n                private static uint G(uint x, uint y, uint z) { return (((x) & (z)) | ((y) & (~z))); }\r\n                private static uint H(uint x, uint y, uint z) { return ((x) ^ (y) ^ (z)); }\r\n                private static uint I(uint x, uint y, uint z) { return ((y) ^ ((x) | (~z))); }\r\n\r\n                /// <summary>\r\n                /// ROTATE_LEFT rotates x left n bits.\r\n                /// </summary>\r\n                /// <param name=\"x\"></param>\r\n                /// <param name=\"n\"></param>\r\n                /// <returns></returns>\r\n                private static uint ROTATE_LEFT(uint x, byte n) { return (((x) << (n)) | ((x) >> (32 - (n)))); }\r\n\r\n                /// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.\r\n                /// Rotation is separate from addition to prevent re-computation.\r\n                private static void FF(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        (a) += F((b), (c), (d)) + (x) + (ac);\r\n                        (a) = ROTATE_LEFT((a), (s));\r\n                        (a) += (b);\r\n                    }\r\n                }\r\n                private static void GG(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        (a) += G((b), (c), (d)) + (x) + (ac);\r\n                        (a) = ROTATE_LEFT((a), (s));\r\n                        (a) += (b);\r\n                    }\r\n                }\r\n                private static void HH(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        (a) += H((b), (c), (d)) + (x) + (ac);\r\n                        (a) = ROTATE_LEFT((a), (s));\r\n                        (a) += (b);\r\n                    }\r\n                }\r\n                private static void II(ref uint a, uint b, uint c, uint d, uint x, byte s, uint ac)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        (a) += I((b), (c), (d)) + (x) + (ac);\r\n                        (a) = ROTATE_LEFT((a), (s));\r\n                        (a) += (b);\r\n                    }\r\n                }\r\n\r\n                private static uint[] Decode(byte[] block, int startIndex, int bytesCount)\r\n                {\r\n                    Debug.Assert(bytesCount > 0);\r\n                    Debug.Assert((bytesCount % 4) == 0);\r\n\r\n                    uint[] result = new uint[bytesCount / 4];\r\n                    int index = 0;\r\n                    while (bytesCount > 0)\r\n                    {\r\n                        result[index++] = BitConverter.ToUInt32(block, startIndex);\r\n                        startIndex += 4;\r\n                        bytesCount -= 4;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n                private static byte[] Encode(uint[] nums, int startIndex, int bytesCount)\r\n                {\r\n                    Debug.Assert(bytesCount > 0);\r\n                    Debug.Assert((bytesCount % 4) == 0);\r\n\r\n                    byte[] result = new byte[bytesCount];\r\n\r\n                    int index = 0;\r\n                    while (index < bytesCount)\r\n                    {\r\n                        Array.Copy(BitConverter.GetBytes(nums[startIndex++]), 0, result, index, 4);\r\n                        index += 4;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n                \r\n                /// <summary>\r\n                /// MD5 basic transformation. Transforms state based on block.\r\n                /// </summary>\r\n                /// <param name=\"block\"></param>\r\n                /// <param name=\"startIndex\"></param>\r\n                private void MD5Transform(byte[]/*[64]*/block, int startIndex)\r\n                {\r\n                    uint a = state[0], b = state[1], c = state[2], d = state[3];\r\n\r\n                    uint[] x = Decode(block, startIndex, 64);   // [16]\r\n                    Debug.Assert(x.Length == 16);\r\n\r\n                    /* Round 1 */\r\n                    FF(ref a, b, c, d, x[0], (byte)MD5Consts.S11, 0xd76aa478);\t/* 1 */\r\n                    FF(ref d, a, b, c, x[1], (byte)MD5Consts.S12, 0xe8c7b756);\t/* 2 */\r\n                    FF(ref c, d, a, b, x[2], (byte)MD5Consts.S13, 0x242070db);\t/* 3 */\r\n                    FF(ref b, c, d, a, x[3], (byte)MD5Consts.S14, 0xc1bdceee);\t/* 4 */\r\n                    FF(ref a, b, c, d, x[4], (byte)MD5Consts.S11, 0xf57c0faf);\t/* 5 */\r\n                    FF(ref d, a, b, c, x[5], (byte)MD5Consts.S12, 0x4787c62a);\t/* 6 */\r\n                    FF(ref c, d, a, b, x[6], (byte)MD5Consts.S13, 0xa8304613);\t/* 7 */\r\n                    FF(ref b, c, d, a, x[7], (byte)MD5Consts.S14, 0xfd469501);\t/* 8 */\r\n                    FF(ref a, b, c, d, x[8], (byte)MD5Consts.S11, 0x698098d8);\t/* 9 */\r\n                    FF(ref d, a, b, c, x[9], (byte)MD5Consts.S12, 0x8b44f7af);\t/* 10 */\r\n                    FF(ref c, d, a, b, x[10], (byte)MD5Consts.S13, 0xffff5bb1);\t\t/* 11 */\r\n                    FF(ref b, c, d, a, x[11], (byte)MD5Consts.S14, 0x895cd7be);\t\t/* 12 */\r\n                    FF(ref a, b, c, d, x[12], (byte)MD5Consts.S11, 0x6b901122);\t\t/* 13 */\r\n                    FF(ref d, a, b, c, x[13], (byte)MD5Consts.S12, 0xfd987193);\t\t/* 14 */\r\n                    FF(ref c, d, a, b, x[14], (byte)MD5Consts.S13, 0xa679438e);\t\t/* 15 */\r\n                    FF(ref b, c, d, a, x[15], (byte)MD5Consts.S14, 0x49b40821);\t\t/* 16 */\r\n\r\n                    /* Round 2 */\r\n                    GG(ref a, b, c, d, x[1], (byte)MD5Consts.S21, 0xf61e2562);\t/* 17 */\r\n                    GG(ref d, a, b, c, x[6], (byte)MD5Consts.S22, 0xc040b340);\t/* 18 */\r\n                    GG(ref c, d, a, b, x[11], (byte)MD5Consts.S23, 0x265e5a51);\t\t/* 19 */\r\n                    GG(ref b, c, d, a, x[0], (byte)MD5Consts.S24, 0xe9b6c7aa);\t/* 20 */\r\n                    GG(ref a, b, c, d, x[5], (byte)MD5Consts.S21, 0xd62f105d);\t/* 21 */\r\n                    GG(ref d, a, b, c, x[10], (byte)MD5Consts.S22, 0x2441453);\t/* 22 */\r\n                    GG(ref c, d, a, b, x[15], (byte)MD5Consts.S23, 0xd8a1e681);\t\t/* 23 */\r\n                    GG(ref b, c, d, a, x[4], (byte)MD5Consts.S24, 0xe7d3fbc8);\t/* 24 */\r\n                    GG(ref a, b, c, d, x[9], (byte)MD5Consts.S21, 0x21e1cde6);\t/* 25 */\r\n                    GG(ref d, a, b, c, x[14], (byte)MD5Consts.S22, 0xc33707d6);\t\t/* 26 */\r\n                    GG(ref c, d, a, b, x[3], (byte)MD5Consts.S23, 0xf4d50d87);\t/* 27 */\r\n                    GG(ref b, c, d, a, x[8], (byte)MD5Consts.S24, 0x455a14ed);\t/* 28 */\r\n                    GG(ref a, b, c, d, x[13], (byte)MD5Consts.S21, 0xa9e3e905);\t\t/* 29 */\r\n                    GG(ref d, a, b, c, x[2], (byte)MD5Consts.S22, 0xfcefa3f8);\t/* 30 */\r\n                    GG(ref c, d, a, b, x[7], (byte)MD5Consts.S23, 0x676f02d9);\t/* 31 */\r\n                    GG(ref b, c, d, a, x[12], (byte)MD5Consts.S24, 0x8d2a4c8a);\t\t/* 32 */\r\n\r\n                    /* Round 3 */\r\n                    HH(ref a, b, c, d, x[5], (byte)MD5Consts.S31, 0xfffa3942);\t/* 33 */\r\n                    HH(ref d, a, b, c, x[8], (byte)MD5Consts.S32, 0x8771f681);\t/* 34 */\r\n                    HH(ref c, d, a, b, x[11], (byte)MD5Consts.S33, 0x6d9d6122);\t\t/* 35 */\r\n                    HH(ref b, c, d, a, x[14], (byte)MD5Consts.S34, 0xfde5380c);\t\t/* 36 */\r\n                    HH(ref a, b, c, d, x[1], (byte)MD5Consts.S31, 0xa4beea44);\t/* 37 */\r\n                    HH(ref d, a, b, c, x[4], (byte)MD5Consts.S32, 0x4bdecfa9);\t/* 38 */\r\n                    HH(ref c, d, a, b, x[7], (byte)MD5Consts.S33, 0xf6bb4b60);\t/* 39 */\r\n                    HH(ref b, c, d, a, x[10], (byte)MD5Consts.S34, 0xbebfbc70);\t\t/* 40 */\r\n                    HH(ref a, b, c, d, x[13], (byte)MD5Consts.S31, 0x289b7ec6);\t\t/* 41 */\r\n                    HH(ref d, a, b, c, x[0], (byte)MD5Consts.S32, 0xeaa127fa);\t/* 42 */\r\n                    HH(ref c, d, a, b, x[3], (byte)MD5Consts.S33, 0xd4ef3085);\t/* 43 */\r\n                    HH(ref b, c, d, a, x[6], (byte)MD5Consts.S34, 0x4881d05);\t/* 44 */\r\n                    HH(ref a, b, c, d, x[9], (byte)MD5Consts.S31, 0xd9d4d039);\t/* 45 */\r\n                    HH(ref d, a, b, c, x[12], (byte)MD5Consts.S32, 0xe6db99e5);\t\t/* 46 */\r\n                    HH(ref c, d, a, b, x[15], (byte)MD5Consts.S33, 0x1fa27cf8);\t\t/* 47 */\r\n                    HH(ref b, c, d, a, x[2], (byte)MD5Consts.S34, 0xc4ac5665);\t/* 48 */\r\n\r\n                    /* Round 4 */\r\n                    II(ref a, b, c, d, x[0], (byte)MD5Consts.S41, 0xf4292244);\t/* 49 */\r\n                    II(ref d, a, b, c, x[7], (byte)MD5Consts.S42, 0x432aff97);\t/* 50 */\r\n                    II(ref c, d, a, b, x[14], (byte)MD5Consts.S43, 0xab9423a7);\t\t/* 51 */\r\n                    II(ref b, c, d, a, x[5], (byte)MD5Consts.S44, 0xfc93a039);\t/* 52 */\r\n                    II(ref a, b, c, d, x[12], (byte)MD5Consts.S41, 0x655b59c3);\t\t/* 53 */\r\n                    II(ref d, a, b, c, x[3], (byte)MD5Consts.S42, 0x8f0ccc92);\t/* 54 */\r\n                    II(ref c, d, a, b, x[10], (byte)MD5Consts.S43, 0xffeff47d);\t\t/* 55 */\r\n                    II(ref b, c, d, a, x[1], (byte)MD5Consts.S44, 0x85845dd1);\t/* 56 */\r\n                    II(ref a, b, c, d, x[8], (byte)MD5Consts.S41, 0x6fa87e4f);\t/* 57 */\r\n                    II(ref d, a, b, c, x[15], (byte)MD5Consts.S42, 0xfe2ce6e0);\t\t/* 58 */\r\n                    II(ref c, d, a, b, x[6], (byte)MD5Consts.S43, 0xa3014314);\t/* 59 */\r\n                    II(ref b, c, d, a, x[13], (byte)MD5Consts.S44, 0x4e0811a1);\t\t/* 60 */\r\n                    II(ref a, b, c, d, x[4], (byte)MD5Consts.S41, 0xf7537e82);\t/* 61 */\r\n                    II(ref d, a, b, c, x[11], (byte)MD5Consts.S42, 0xbd3af235);\t\t/* 62 */\r\n                    II(ref c, d, a, b, x[2], (byte)MD5Consts.S43, 0x2ad7d2bb);\t/* 63 */\r\n                    II(ref b, c, d, a, x[9], (byte)MD5Consts.S44, 0xeb86d391);\t/* 64 */\r\n\r\n                    unchecked\r\n                    {\r\n                        state[0] += a;\r\n                        state[1] += b;\r\n                        state[2] += c;\r\n                        state[3] += d;\r\n                    }\r\n\r\n                    Array.Clear(x, 0, 16);\r\n                }\r\n\r\n                #endregion\r\n\r\n                #region HashPhpResource\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new MD5();\r\n                    this.CloneHashState(clone);\r\n                    this.CloneBufferedBlock(clone);\r\n                    this.state.CopyTo(clone.state, 0);\r\n                    this.count.CopyTo(clone.count, 0);\r\n\r\n                    return clone;\r\n                }\r\n                public override void Init()\r\n                {\r\n                    count[0] = count[1] = 0;\r\n                    /* Load magic initialization constants.\r\n                     */\r\n                    state[0] = 0x67452301;\r\n                    state[1] = 0xefcdab89;\r\n                    state[2] = 0x98badcfe;\r\n                    state[3] = 0x10325476;\r\n                }\r\n                public override bool Update(byte[]/*!*/data)\r\n                {\r\n                    Debug.Assert(data != null);\r\n\r\n                    // Update number of bits\r\n                    if ((count[0] += ((uint)data.Length << 3)) < ((uint)data.Length << 3)) count[1]++;\r\n                    count[1] += ((uint)data.Length >> 29);\r\n\r\n                    // Transform blocks of 64 bytes\r\n                    foreach (var block in ProcessBlocked(data, 64))\r\n                        MD5Transform(block.Item1, block.Item2);\r\n\r\n                    return true;\r\n                }\r\n                public override byte[] Final()\r\n                {\r\n                    // save length\r\n                    byte[] bits = Encode(count, 0, 8);\r\n\r\n                    // padd to 56 mod 64\r\n                    int bufferUsage;\r\n                    byte[] buffer = GetBufferedBlock(out bufferUsage);\r\n                    if (buffer == null) buffer = new byte[64];\r\n                    Debug.Assert(buffer.Length == 64);\r\n                    int padLen = (bufferUsage < 56) ? (56 - bufferUsage) : (120 - bufferUsage);\r\n                    if (padLen > 0)\r\n                    {\r\n                        byte[] padding = new byte[padLen];\r\n                        padding[0] = 0x80;\r\n                        Update(padding);\r\n                    }\r\n\r\n                    Update(bits);\r\n\r\n                    byte[] result = Encode(state, 0, 16);\r\n\r\n                    // cleanup sensitive data\r\n                    Array.Clear(state, 0, state.Length);\r\n                    Array.Clear(count, 0, count.Length);\r\n\r\n                    // done\r\n                    return result;\r\n                }\r\n                public override int BlockSize\r\n                {\r\n                    get { return 64; }\r\n                }\r\n\r\n                #endregion\r\n            }\r\n            /// <summary>\r\n            /// Base class for SHA based hashing algorithms.\r\n            /// </summary>\r\n            /// <typeparam name=\"T\">Actual type of SHA class. Used to instantiate new one in <see cref=\"Clone\"/> method.</typeparam>\r\n            public abstract class SHA<T> : HashPhpResource where T: SHA<T>, new()\r\n            {\r\n                #region state\r\n\r\n                /// <summary>\r\n                /// Internal buffer holding SHA results.\r\n                /// </summary>\r\n                protected readonly byte[]/*!*/_buffer;\r\n                /// <summary>\r\n                /// Amount of chars encoded.\r\n                /// </summary>\r\n                protected long _count;\r\n                /// <summary>\r\n                /// Temporary buffer used internally by <see cref=\"_HashData\"/> method.\r\n                /// </summary>\r\n                protected readonly uint[]/*!*/_tmp;\r\n                /// <summary>\r\n                /// Current hash state.\r\n                /// </summary>\r\n                protected readonly uint[]/*!*/_state;\r\n\r\n                #endregion\r\n\r\n                #region Constructor\r\n\r\n                public SHA(int bufferSize, int tmpSize, int stateSize)\r\n                {\r\n                    Debug.Assert(bufferSize > 0);\r\n                    Debug.Assert(tmpSize > 0);\r\n                    Debug.Assert(stateSize > 0);\r\n\r\n                    this._buffer = new byte[bufferSize];\r\n                    this._tmp = new uint[tmpSize];\r\n                    this._state = new uint[stateSize];\r\n\r\n                    // initialize the state:\r\n                    this.InitializeState();\r\n                }\r\n\r\n                #endregion\r\n\r\n                #region SHA (to be implemented in derived class)\r\n\r\n                /// <summary>\r\n                /// Set <see cref=\"_count\"/> and <see cref=\"_state\"/> to their initial state.\r\n                /// </summary>\r\n                protected abstract void InitializeState();\r\n\r\n                /// <summary>\r\n                /// Finalize the hash.\r\n                /// </summary>\r\n                /// <returns>Resulting hash.</returns>\r\n                protected abstract byte[] _EndHash();\r\n\r\n                /// <summary>\r\n                /// Pump more data into the hashing algorithm.\r\n                /// </summary>\r\n                /// <param name=\"partIn\">Array of data to be hashed.</param>\r\n                /// <param name=\"ibStart\">Index where to start reading from <paramref name=\"partIn\"/>.</param>\r\n                /// <param name=\"cbSize\">Amount of bytes to read from <paramref name=\"partIn\"/>.</param>\r\n                /// <returns><c>true</c> if hashing succeeded.</returns>\r\n                protected abstract bool _HashData(byte[] partIn, int ibStart, int cbSize);\r\n\r\n                #endregion\r\n\r\n                #region HashPhpResource\r\n\r\n                public override void Init()\r\n                {\r\n                    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)\r\n                    {\r\n                        this.InitializeState();\r\n                        Array.Clear(this._buffer, 0, this._buffer.Length);\r\n                        Array.Clear(this._tmp, 0, this._tmp.Length);\r\n                    }\r\n                }\r\n\r\n                public override bool Update(byte[]/*!*/data)\r\n                {\r\n                    Debug.Assert(data != null);\r\n\r\n                    return _HashData(data, 0, data.Length);\r\n                }\r\n\r\n                public override byte[] Final()\r\n                {\r\n                    try\r\n                    {\r\n                        return _EndHash();\r\n                    }\r\n                    finally\r\n                    {\r\n                        InitializeState();  // clear the state\r\n                    }\r\n                }\r\n\r\n                public override HashPhpResource Clone()\r\n                {\r\n                    var clone = new T() { _count = this._count };\r\n                    this.CloneHashState(clone);\r\n\r\n                    this._buffer.CopyTo(clone._buffer, 0);\r\n                    this._tmp.CopyTo(clone._tmp, 0);\r\n                    this._state.CopyTo(clone._state, 0);\r\n\r\n                    return clone;\r\n                }\r\n\r\n                public override int BlockSize\r\n                {\r\n                    get { return _buffer.Length; }\r\n                }\r\n\r\n                #endregion\r\n            }\r\n            public sealed class SHA1 : SHA<SHA1>\r\n            {\r\n                #region SHA1 hashing internals\r\n\r\n                public SHA1()\r\n                    :base(64,80,5)\r\n                {\r\n                }\r\n\r\n                protected override void InitializeState()\r\n                {\r\n                    this._count = 0L;\r\n                    this._state[0] = 0x67452301;\r\n                    this._state[1] = 0xefcdab89;\r\n                    this._state[2] = 0x98badcfe;\r\n                    this._state[3] = 0x10325476;\r\n                    this._state[4] = 0xc3d2e1f0;\r\n                }\r\n\r\n                /// <summary>\r\n                /// Finalize the hash.\r\n                /// </summary>\r\n                /// <returns>Hashed bytes.</returns>\r\n                protected override byte[] _EndHash()\r\n                {\r\n                    byte[] block = new byte[20];\r\n                    int num = 0x40 - ((int)(this._count & 0x3fL));\r\n                    if (num <= 8)\r\n                        num += 0x40;\r\n\r\n                    byte[] partIn = new byte[num];\r\n                    partIn[0] = 0x80;\r\n                    long num2 = this._count * 8L;\r\n                    partIn[num - 8] = (byte)((num2 >> 0x38) & 0xffL);\r\n                    partIn[num - 7] = (byte)((num2 >> 0x30) & 0xffL);\r\n                    partIn[num - 6] = (byte)((num2 >> 40) & 0xffL);\r\n                    partIn[num - 5] = (byte)((num2 >> 0x20) & 0xffL);\r\n                    partIn[num - 4] = (byte)((num2 >> 0x18) & 0xffL);\r\n                    partIn[num - 3] = (byte)((num2 >> 0x10) & 0xffL);\r\n                    partIn[num - 2] = (byte)((num2 >> 8) & 0xffL);\r\n                    partIn[num - 1] = (byte)(num2 & 0xffL);\r\n                    this._HashData(partIn, 0, partIn.Length);\r\n                    DWORDToBigEndian(block, this._state, 5);\r\n                    //base.HashValue = block;\r\n                    return block;\r\n                }\r\n\r\n                protected override bool _HashData(byte[] partIn, int ibStart, int cbSize)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        int byteCount = cbSize;\r\n                        int srcOffsetBytes = ibStart;\r\n                        int dstOffsetBytes = (int)(this._count & 0x3fL);\r\n                        this._count += byteCount;\r\n\r\n                        if ((dstOffsetBytes > 0) && ((dstOffsetBytes + byteCount) >= 0x40))\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, 0x40 - dstOffsetBytes);\r\n                            srcOffsetBytes += 0x40 - dstOffsetBytes;\r\n                            byteCount -= 0x40 - dstOffsetBytes;\r\n                            SHATransform(_tmp, _state, _buffer);\r\n                            dstOffsetBytes = 0;\r\n                        }\r\n                        while (byteCount >= 0x40)\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, 0, 0x40);\r\n                            srcOffsetBytes += 0x40;\r\n                            byteCount -= 0x40;\r\n                            SHATransform(_tmp, _state, _buffer);\r\n                        }\r\n                        if (byteCount > 0)\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, byteCount);\r\n                        }\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n\r\n                private static void SHAExpand(uint[] x)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        for (int i = 0x10; i < 80; i++)\r\n                        {\r\n                            uint num2 = ((x[i - 3] ^ x[i - 8]) ^ x[i - 14]) ^ x[i - 0x10];\r\n                            x[i] = (num2 << 1) | (num2 >> 0x1f);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                private static void SHATransform(uint[] tmp, uint[] state, byte[] block)\r\n                {\r\n                    Debug.Assert(tmp != null && tmp.Length == 80);\r\n\r\n                    uint num = state[0];\r\n                    uint num2 = state[1];\r\n                    uint num3 = state[2];\r\n                    uint num4 = state[3];\r\n                    uint num5 = state[4];\r\n                    DWORDFromBigEndian(tmp, 0x10, block);\r\n                    SHAExpand(tmp);\r\n                    int index = 0;\r\n\r\n                    unchecked\r\n                    {\r\n\r\n                        while (index < 20)\r\n                        {\r\n                            num5 += ((((num << 5) | (num >> 0x1b)) + (num4 ^ (num2 & (num3 ^ num4)))) + tmp[index]) + 0x5a827999;\r\n                            num2 = (num2 << 30) | (num2 >> 2);\r\n                            num4 += ((((num5 << 5) | (num5 >> 0x1b)) + (num3 ^ (num & (num2 ^ num3)))) + tmp[index + 1]) + 0x5a827999;\r\n                            num = (num << 30) | (num >> 2);\r\n                            num3 += ((((num4 << 5) | (num4 >> 0x1b)) + (num2 ^ (num5 & (num ^ num2)))) + tmp[index + 2]) + 0x5a827999;\r\n                            num5 = (num5 << 30) | (num5 >> 2);\r\n                            num2 += ((((num3 << 5) | (num3 >> 0x1b)) + (num ^ (num4 & (num5 ^ num)))) + tmp[index + 3]) + 0x5a827999;\r\n                            num4 = (num4 << 30) | (num4 >> 2);\r\n                            num += ((((num2 << 5) | (num2 >> 0x1b)) + (num5 ^ (num3 & (num4 ^ num5)))) + tmp[index + 4]) + 0x5a827999;\r\n                            num3 = (num3 << 30) | (num3 >> 2);\r\n                            index += 5;\r\n                        }\r\n                        while (index < 40)\r\n                        {\r\n                            num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 ^ num3) ^ num4)) + tmp[index]) + 0x6ed9eba1;\r\n                            num2 = (num2 << 30) | (num2 >> 2);\r\n                            num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num ^ num2) ^ num3)) + tmp[index + 1]) + 0x6ed9eba1;\r\n                            num = (num << 30) | (num >> 2);\r\n                            num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 ^ num) ^ num2)) + tmp[index + 2]) + 0x6ed9eba1;\r\n                            num5 = (num5 << 30) | (num5 >> 2);\r\n                            num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 ^ num5) ^ num)) + tmp[index + 3]) + 0x6ed9eba1;\r\n                            num4 = (num4 << 30) | (num4 >> 2);\r\n                            num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 ^ num4) ^ num5)) + tmp[index + 4]) + 0x6ed9eba1;\r\n                            num3 = (num3 << 30) | (num3 >> 2);\r\n                            index += 5;\r\n                        }\r\n                        while (index < 60)\r\n                        {\r\n                            num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 & num3) | (num4 & (num2 | num3)))) + tmp[index]) + 0x8f1bbcdc;\r\n                            num2 = (num2 << 30) | (num2 >> 2);\r\n                            num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num & num2) | (num3 & (num | num2)))) + tmp[index + 1]) + 0x8f1bbcdc;\r\n                            num = (num << 30) | (num >> 2);\r\n                            num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 & num) | (num2 & (num5 | num)))) + tmp[index + 2]) + 0x8f1bbcdc;\r\n                            num5 = (num5 << 30) | (num5 >> 2);\r\n                            num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 & num5) | (num & (num4 | num5)))) + tmp[index + 3]) + 0x8f1bbcdc;\r\n                            num4 = (num4 << 30) | (num4 >> 2);\r\n                            num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 & num4) | (num5 & (num3 | num4)))) + tmp[index + 4]) + 0x8f1bbcdc;\r\n                            num3 = (num3 << 30) | (num3 >> 2);\r\n                            index += 5;\r\n                        }\r\n                        while (index < 80)\r\n                        {\r\n                            num5 += ((((num << 5) | (num >> 0x1b)) + ((num2 ^ num3) ^ num4)) + tmp[index]) + 0xca62c1d6;\r\n                            num2 = (num2 << 30) | (num2 >> 2);\r\n                            num4 += ((((num5 << 5) | (num5 >> 0x1b)) + ((num ^ num2) ^ num3)) + tmp[index + 1]) + 0xca62c1d6;\r\n                            num = (num << 30) | (num >> 2);\r\n                            num3 += ((((num4 << 5) | (num4 >> 0x1b)) + ((num5 ^ num) ^ num2)) + tmp[index + 2]) + 0xca62c1d6;\r\n                            num5 = (num5 << 30) | (num5 >> 2);\r\n                            num2 += ((((num3 << 5) | (num3 >> 0x1b)) + ((num4 ^ num5) ^ num)) + tmp[index + 3]) + 0xca62c1d6;\r\n                            num4 = (num4 << 30) | (num4 >> 2);\r\n                            num += ((((num2 << 5) | (num2 >> 0x1b)) + ((num3 ^ num4) ^ num5)) + tmp[index + 4]) + 0xca62c1d6;\r\n                            num3 = (num3 << 30) | (num3 >> 2);\r\n                            index += 5;\r\n                        }\r\n                        state[0] += num;\r\n                        state[1] += num2;\r\n                        state[2] += num3;\r\n                        state[3] += num4;\r\n                        state[4] += num5;\r\n\r\n                    }\r\n                }\r\n\r\n                #endregion\r\n            }\r\n            public sealed class SHA256 : SHA<SHA256>\r\n            {\r\n                #region SHA256 hashing internals\r\n\r\n                public SHA256()\r\n                    :base(64,64,8)\r\n                {                    \r\n                }\r\n\r\n                protected override void InitializeState()\r\n                {\r\n                    this._count = 0L;\r\n\r\n                    // initialize the state:\r\n                    this._state[0] = 0x6a09e667;\r\n                    this._state[1] = 0xbb67ae85;\r\n                    this._state[2] = 0x3c6ef372;\r\n                    this._state[3] = 0xa54ff53a;\r\n                    this._state[4] = 0x510e527f;\r\n                    this._state[5] = 0x9b05688c;\r\n                    this._state[6] = 0x1f83d9ab;\r\n                    this._state[7] = 0x5be0cd19;\r\n                }\r\n\r\n                /// <summary>\r\n                /// Finalize the hash.\r\n                /// </summary>\r\n                /// <returns>Hashed bytes.</returns>\r\n                protected override byte[] _EndHash()\r\n                {\r\n                    byte[] block = new byte[32];\r\n\r\n                    int num = 0x40 - ((int)(this._count & 0x3fL));\r\n                    if (num <= 8)\r\n                        num += 0x40;\r\n\r\n                    byte[] partIn = new byte[num];\r\n                    partIn[0] = 0x80;\r\n                    long num2 = this._count * 8L;\r\n                    partIn[num - 8] = (byte)((num2 >> 0x38) & 0xffL);\r\n                    partIn[num - 7] = (byte)((num2 >> 0x30) & 0xffL);\r\n                    partIn[num - 6] = (byte)((num2 >> 40) & 0xffL);\r\n                    partIn[num - 5] = (byte)((num2 >> 0x20) & 0xffL);\r\n                    partIn[num - 4] = (byte)((num2 >> 0x18) & 0xffL);\r\n                    partIn[num - 3] = (byte)((num2 >> 0x10) & 0xffL);\r\n                    partIn[num - 2] = (byte)((num2 >> 8) & 0xffL);\r\n                    partIn[num - 1] = (byte)(num2 & 0xffL);\r\n                    this._HashData(partIn, 0, partIn.Length);\r\n                    DWORDToBigEndian(block, this._state, 8);\r\n                    //base.HashValue = block;\r\n                    return block;\r\n                }\r\n\r\n                protected override bool _HashData(byte[] partIn, int ibStart, int cbSize)\r\n                {\r\n                    unchecked\r\n                    {\r\n                        int byteCount = cbSize;\r\n                        int srcOffsetBytes = ibStart;\r\n                        int dstOffsetBytes = (int)(this._count & 0x3fL);\r\n                        this._count += byteCount;\r\n\r\n                        if ((dstOffsetBytes > 0) && ((dstOffsetBytes + byteCount) >= 0x40))\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, 0x40 - dstOffsetBytes);\r\n                            srcOffsetBytes += 0x40 - dstOffsetBytes;\r\n                            byteCount -= 0x40 - dstOffsetBytes;\r\n                            SHATransform(_tmp, _state, _buffer);\r\n                            dstOffsetBytes = 0;\r\n                        }\r\n                        while (byteCount >= 0x40)\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, 0, 0x40);\r\n                            srcOffsetBytes += 0x40;\r\n                            byteCount -= 0x40;\r\n                            SHATransform(_tmp, _state, _buffer);\r\n                        }\r\n                        if (byteCount > 0)\r\n                        {\r\n                            Buffer.BlockCopy(partIn, srcOffsetBytes, this._buffer, dstOffsetBytes, byteCount);\r\n                        }\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n\r\n                #region SHA256 internals\r\n                private static uint ROTR32(int b, uint x) { return unchecked((x >> b) | (x << (32 - b))); }\r\n                private static uint SHR(int b, uint x) { return unchecked(x >> b); }\n\n                private static uint SHA256_F0(uint x, uint y, uint z) { return unchecked(((x) & (y)) ^ ((~(x)) & (z))); }\n                private static uint SHA256_F1(uint x, uint y, uint z) { return unchecked(((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))); }\n                private static uint SHA256_F2(uint x) { return unchecked(ROTR32(2, (x)) ^ ROTR32(13, (x)) ^ ROTR32(22, (x))); }\n                private static uint SHA256_F3(uint x) { return unchecked(ROTR32(6, (x)) ^ ROTR32(11, (x)) ^ ROTR32(25, (x))); }\n                private static uint SHA256_F4(uint x) { return unchecked(ROTR32(7, (x)) ^ ROTR32(18, (x)) ^ SHR(3, (x))); }\n                private static uint SHA256_F5(uint x) { return unchecked(ROTR32(17, (x)) ^ ROTR32(19, (x)) ^ SHR(10, (x))); }\r\n                static readonly uint[] SHA256_K = new uint[]{\n\t                0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n\t                0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n\t                0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n\t                0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n\t                0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n\t                0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n\t                0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n\t                0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n                };\r\n                #endregion\r\n\r\n                private static void SHATransform(uint[] tmp, uint[] state, byte[] block)\r\n                {\r\n                    Debug.Assert(tmp != null && tmp.Length == 64);\r\n\r\n                    unchecked\r\n                    {\r\n                        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];\r\n\r\n                        DWORDFromBigEndian(tmp, 0x10, block);\r\n\r\n                        for (int i = 16; i < 64; i++)\r\n                            tmp[i] = SHA256_F5(tmp[i - 2]) + tmp[i - 7] + SHA256_F4(tmp[i - 15]) + tmp[i - 16];\r\n\r\n                        for (int i = 0; i < 64; i++)\r\n                        {\r\n                            uint T1 = h + SHA256_F3(e) + SHA256_F0(e, f, g) + SHA256_K[i] + tmp[i];\r\n                            uint T2 = SHA256_F2(a) + SHA256_F1(a, b, c);\r\n\r\n                            h = g;\r\n                            g = f;\r\n                            f = e;\r\n                            e = d + T1;\r\n                            d = c;\r\n                            c = b;\r\n                            b = a;\r\n                            a = T1 + T2;\r\n                        }\r\n\r\n                        state[0] += a;\r\n                        state[1] += b;\r\n                        state[2] += c;\r\n                        state[3] += d;\r\n                        state[4] += e;\r\n                        state[5] += f;\r\n                        state[6] += g;\r\n                        state[7] += h;\r\n                    }\r\n                }\r\n\r\n\r\n                #endregion\r\n            }\r\n \r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region hash_algos\r\n\r\n        /// <summary>\r\n        /// Get an array of available hashing algorithms. These names can be used in hash* functions, as the \"algo\" argument.\r\n        /// </summary>\r\n        /// <returns>Zero-based indexed array of names of hashing algorithms.</returns>\r\n        [ImplementsFunction(\"hash_algos\")]\r\n        public static PhpArray GetHashAlgorithms()\r\n        {\r\n            var algos = HashPhpResource.HashAlgorithms;\r\n            var result = new PhpArray(algos.Count, 0);\r\n\r\n            foreach (var x in algos)\r\n                result.Add(x.Key);\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region options\r\n\r\n        /// <summary>\r\n        /// hash_init() options\r\n        /// </summary>\r\n        [Flags]\r\n        public enum HashInitOptions\r\n        {\r\n            /// <summary>\r\n            /// No options.\r\n            /// Default.\r\n            /// </summary>\r\n            [ImplementsConstant(\"HASH_DEFAULT\")]\r\n            HASH_DEFAULT = 0,\r\n\r\n            /// <summary>\r\n            /// Use HMAC. The key must be provided.\r\n            /// </summary>\r\n            [ImplementsConstant(\"HASH_HMAC\")]\r\n            HASH_HMAC = 1,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region hash_copy, hash_init, hash_update, hash_final, hash_update_file, hash_update_stream\r\n\r\n        [ImplementsFunction(\"hash_copy\")]\r\n        public static PhpResource HashCopy(PhpResource context)\r\n        {\r\n            HashPhpResource h = context as HashPhpResource;\r\n\r\n            if (h == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"context\", PhpResource.PhpTypeName);\r\n                return null;\r\n            }\r\n\r\n            return h.Clone();\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_init\")]\r\n        public static PhpResource HashInit(string algo)\r\n        {\r\n            return HashInit(algo, HashInitOptions.HASH_DEFAULT, null);\r\n        }\r\n        [ImplementsFunction(\"hash_init\")]\r\n        public static PhpResource HashInit(string algo, HashInitOptions options)\r\n        {\r\n            return HashInit(algo, options, null);\r\n        }\r\n        [ImplementsFunction(\"hash_init\")]\r\n        public static PhpResource HashInit(string algo, HashInitOptions options, PhpBytes key)\r\n        {\r\n            bool hmac = (options & HashInitOptions.HASH_HMAC) != 0;\r\n\r\n            if (hmac && (key == null || key.Length == 0))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"HMAC requested without a key\");   // TODO: to resources\r\n                return null;\r\n            }\r\n\r\n            HashPhpResource.HashAlgFactory algFactory;\r\n            if (!HashPhpResource.HashAlgorithms.TryGetValue(algo, out algFactory))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"Unknown hashing algorithm: \" + algo);   // TODO: to resources\r\n                return null;\r\n            }\r\n\r\n            //\r\n            // create the hashing algorithm context\r\n            //\r\n            HashPhpResource h = algFactory();\r\n            h.options = options;\r\n\r\n            //\r\n            // HMAC\r\n            //\r\n            if (hmac)\r\n            {\r\n                // Take the given key and hash it in the context of newly created hashing context.\r\n\r\n                Debug.Assert(h.BlockSize > 0);\r\n                byte[] K = key.ReadonlyData;\r\n\r\n                if (K.Length > h.BlockSize)\r\n                {\r\n                    // provided key is too long, hash it to obtain shorter key\r\n                    h.Update(K);\r\n                    K = h.Final();\r\n                    h.Init();// restart the algorithm\r\n                }\r\n                else\r\n                {\r\n                    K = (byte[])K.Clone();\r\n                }\r\n\r\n                if (K.Length != h.BlockSize)\r\n                {\r\n                    Debug.Assert(K.Length < h.BlockSize);\r\n                    byte[] KAligned = new byte[h.BlockSize];\r\n                    K.CopyTo(KAligned, 0);\r\n                    K = KAligned;\r\n                }\r\n\r\n                for (int i = 0; i < K.Length; ++i)\r\n                    K[i] ^= 0x36;\r\n\r\n                h.Update(K);\r\n                h.HMACkey = K;\r\n            }\r\n\r\n            return h;\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_update\")]\r\n        public static bool HashUpdate(PhpResource context, PhpBytes data)\r\n        {\r\n            HashPhpResource h = context as HashPhpResource;\r\n\r\n            if (h == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"context\", PhpResource.PhpTypeName);\r\n                return false;\r\n            }\r\n\r\n            h.Update(data.ReadonlyData);\r\n\r\n            return true;\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_final\")]\r\n        public static object HashFinal(PhpResource context)\r\n        {\r\n            return HashFinal(context, false);\r\n        }\r\n        [ImplementsFunction(\"hash_final\")]\r\n        public static object HashFinal(PhpResource context, bool raw_output)\r\n        {\r\n            HashPhpResource h = context as HashPhpResource;\r\n\r\n            if (h == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"context\", PhpResource.PhpTypeName);\r\n                return null;\r\n            }\r\n\r\n            byte[] hash = h.Final();\r\n\r\n            //\r\n            // HMAC\r\n            //\r\n            if (/*(h.options & HashInitOptions.HASH_HMAC) != 0 &&*/ h.HMACkey != null)\r\n            {\r\n                /* Convert K to opad -- 0x6A = 0x36 ^ 0x5C */\r\n                byte[] K = h.HMACkey;\r\n                for (int i = 0; i < K.Length; ++i)\r\n                    K[i] ^= 0x6A;\r\n\r\n                /* Feed this result into the outter hash */\r\n                h.Init();\r\n                h.Update(K);\r\n                h.Update(hash);\r\n                hash = h.Final();\r\n\r\n                /* Zero the key */\r\n                //Array.Clear(K, 0, K.Length);\r\n                h.HMACkey = null;\r\n            }\r\n\r\n            //\r\n            // output\r\n            //\r\n            if (raw_output)\r\n                return new PhpBytes(hash);\r\n            else\r\n                return StringUtils.BinToHex(hash, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_update_file\")]\r\n        public static bool HashUpdateFromFile(PhpResource context, string filename)\r\n        {\r\n            return HashUpdateFromFile(context, filename, StreamContext.Default);\r\n        }\r\n        [ImplementsFunction(\"hash_update_file\")]\r\n        public static bool HashUpdateFromFile(PhpResource context, string filename, PhpResource stream_context)\r\n        {\r\n            // hashing context\r\n            HashPhpResource h = context as HashPhpResource;\r\n\r\n            if (h == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"context\", PhpResource.PhpTypeName);\r\n                return false;\r\n            }\r\n\r\n            // stream context\r\n            StreamContext sc = StreamContext.GetValid(stream_context);\r\n            if (sc == null)\r\n                return false;\r\n\r\n            // read data from file (or URL)\r\n            using (PhpStream stream = PhpStream.Open(filename, \"rb\", StreamOpenOptions.Empty, sc))\r\n            {\r\n                if (stream == null)\r\n                    return false;\r\n\r\n                if (HashUpdateFromStream(h, stream, -1) < 0)\r\n                    return false;\r\n            }\r\n\r\n            //\r\n            return true;\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_update_stream\")]\r\n        [return: CastToFalse]\r\n        public static int HashUpdateFromStream(PhpResource context, PhpResource handle)\r\n        {\r\n            return HashUpdateFromStream(context, handle, -1);\r\n        }\r\n        [ImplementsFunction(\"hash_update_stream\")]\r\n        [return: CastToFalse]\r\n        public static int HashUpdateFromStream(PhpResource context, PhpResource handle, int length/*=-1*/)\r\n        {\r\n            // hashing context\r\n            HashPhpResource h = context as HashPhpResource;\r\n\r\n            if (h == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"context\", PhpResource.PhpTypeName);\r\n                return -1;\r\n            }\r\n\r\n            PhpStream stream = PhpStream.GetValid(handle);\r\n            if (stream == null)\r\n                return -1;\r\n\r\n            // read data from stream, return number of used bytes\r\n            return HashUpdateFromStream(h, stream, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pump data from valid PHP stream into the hashing incremental algorithm.\r\n        /// </summary>\r\n        /// <param name=\"context\">Hash resource to be updated from given <paramref name=\"stream\"/>. Cannot be null.</param>\r\n        /// <param name=\"stream\">The <see cref=\"PhpStream\"/> to read from. Cannot be null.</param>\r\n        /// <param name=\"length\">Maximum number of bytes to read from <paramref name=\"stream\"/>. Or <c>-1</c> to read entire stream.</param>\r\n        /// <returns>Number of bytes read from given <paramref name=\"stream\"/>.</returns>\r\n        private static int HashUpdateFromStream(HashPhpResource/*!*/context, PhpStream/*!*/stream, int length/*=-1*/)\r\n        {\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(stream != null);\r\n\r\n            int n = 0;\r\n            bool done = false;\r\n\r\n            const int buffsize = 4096;\r\n\r\n            do\r\n            {\r\n                // read data from stream sub-sequentially to lower memory consumption\r\n                int bytestoread = (length < 0) ? buffsize : Math.Min(length - n, buffsize);   // read <buffsize> bytes, or up to <length> bytes\r\n                if (bytestoread == 0)\r\n                    break;\r\n\r\n                PhpBytes bytes = stream.ReadBytes(bytestoread);\r\n                if (bytes == null)\r\n                    break;\r\n\r\n                // update the incremental hash\r\n                context.Update(bytes.ReadonlyData);\r\n\r\n                n += bytes.Length;\r\n                done = (bytes.Length < bytestoread);\r\n            } while (!done);\r\n\r\n            return n;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region hash, hash_file\r\n\r\n        [ImplementsFunction(\"hash\")]\r\n        [PureFunction]\r\n        public static object DoHash(string algo, PhpBytes data)\r\n        {\r\n            return DoHash(algo, data, false);\r\n        }\r\n        [ImplementsFunction(\"hash\")]\r\n        [PureFunction]\r\n        public static object DoHash(string algo, PhpBytes data, bool raw_output)\r\n        {\r\n            var h = HashInit(algo);\r\n            if (h == null)\r\n                return false;\r\n\r\n            if (!HashUpdate(h, data))\r\n                return false;\r\n\r\n            return HashFinal(h, raw_output);\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_file\")]\r\n        public static object DoHashFile(string algo, string filename)\r\n        {\r\n            return DoHashFile(algo, filename, false);\r\n        }\r\n        [ImplementsFunction(\"hash_file\")]\r\n        public static object DoHashFile(string algo, string filename, bool raw_output)\r\n        {\r\n            var h = HashInit(algo);\r\n            if (h == null)\r\n                return false;\r\n\r\n            if (!HashUpdateFromFile(h, filename))\r\n                return false;\r\n\r\n            return HashFinal(h, raw_output);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region hash_hmac, hash_hmac_file\r\n\r\n        [ImplementsFunction(\"hash_hmac\")]\r\n        [PureFunction]\r\n        public static object DoHashHMAC(string algo, PhpBytes data, PhpBytes key)\r\n        {\r\n            return DoHashHMAC(algo, data, key, false);\r\n        }\r\n        [ImplementsFunction(\"hash_hmac\")]\r\n        [PureFunction]\r\n        public static object DoHashHMAC(string algo, PhpBytes data, PhpBytes key, bool raw_output)\r\n        {\r\n            var h = HashInit(algo, HashInitOptions.HASH_HMAC, key);\r\n            if (h == null)\r\n                return false;\r\n\r\n            if (!HashUpdate(h, data))\r\n                return false;\r\n\r\n            return HashFinal(h, raw_output);\r\n        }\r\n\r\n        [ImplementsFunction(\"hash_hmac_file\")]\r\n        public static object DoHashHMACFile(string algo, string filename, PhpBytes key)\r\n        {\r\n            return DoHashHMACFile(algo, filename, key, false);\r\n        }\r\n        [ImplementsFunction(\"hash_hmac_file\")]\r\n        public static object DoHashHMACFile(string algo, string filename, PhpBytes key, bool raw_output)\r\n        {\r\n            var h = HashInit(algo, HashInitOptions.HASH_HMAC, key);\r\n            if (h == null)\r\n                return false;\r\n\r\n            if (!HashUpdateFromFile(h, filename))\r\n                return false;\r\n\r\n            return HashFinal(h, raw_output);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/ClassLibrary/Highlighting.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.IO;\r\n\r\nusing PHP;\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\n\r\n#if SILVERLIGHT\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Functions for highlighting PHP source code written as HTML.\r\n\t/// </summary>\r\n\tpublic static class Highlighting\r\n\t{\r\n\t\t#region highlight_file, highlight_string, show_source\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes PHP source code from file highlighted to output.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">PHP source file to highlight.</param>\r\n\t\t/// <returns><B>True</B> if the source code was succesfuly highlighted.</returns>\r\n\t\t[ImplementsFunction(\"highlight_file\")]\r\n\t\tpublic static object HighlightFile(string fileName)\r\n\t\t{\r\n\t\t\treturn HighlightFile(fileName, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes PHP source code from file highlighted to output or returns this code as string\r\n\t\t/// according to second parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">PHP source file to highlight.</param>\r\n\t\t/// <param name=\"returnHighlighted\"><B>True</B> if highlighted code should be returned,\r\n\t\t/// <B>false</B> if it should be printed out.</param>\r\n\t\t/// <returns>Highlighted source code or - if it is printed out - <B>true</B> if the code was\r\n\t\t/// highlighted succesfuly, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"highlight_file\")]\r\n\t\tpublic static object HighlightFile(string fileName, bool returnHighlighted)\r\n\t\t{\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"rt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tstring source = stream.ReadStringContents(-1);\r\n\t\t\t\tDebug.Assert(source != null);\r\n\r\n\t\t\t\treturn HighlightString(source, returnHighlighted);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes highlighted PHP source code passed as string to output.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">PHP source code to highlight</param>\r\n\t\t/// <returns><B>True</B> if the source code was successfully highlighted.</returns>\r\n\t\t[ImplementsFunction(\"highlight_string\")]\r\n\t\tpublic static object HighlightString(string str)\r\n\t\t{\r\n\t\t\treturn HighlightString(str, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes PHP source code highlighted to output or returns this code as string\r\n\t\t/// according to second parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">PHP source code</param>\r\n\t\t/// <param name=\"returnHighlighted\"><B>True</B> if highlighted code should be returned,\r\n\t\t/// <B>false</B> if it should be printed out.</param>\r\n\t\t/// <returns>Highlighted source code or - if it is printed out - <B>true</B> if the code was\r\n\t\t/// highlighted succesfuly, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"highlight_string\")]\r\n\t\tpublic static object HighlightString(string str, bool returnHighlighted)\r\n\t\t{\r\n\t\t\tif (str == null) str = \"\";\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\r\n\t\t\tTextWriter output = returnHighlighted ? new StringWriter() : context.Output;\r\n\r\n\t\t\tbool success = Highlight(str, output, config);\r\n\r\n\t\t\tif (returnHighlighted)\r\n\t\t\t\treturn output.ToString();\r\n\t\t\telse\r\n\t\t\t\treturn success;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Alias for <see cref=\"HighlightFile\"/>.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"show_source\")]\r\n\t\tpublic static object ShowSource(string fileName)\r\n\t\t{\r\n\t\t\treturn HighlightFile(fileName, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Alias for <see cref=\"HighlightFile\"/>.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"show_source\")]\r\n\t\tpublic static object ShowSource(string fileName, bool returnHighlighted)\r\n\t\t{\r\n\t\t\treturn HighlightFile(fileName, returnHighlighted);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic static bool Highlight(string/*!*/ code, TextWriter/*!*/ output, LibraryConfiguration/*!*/ config)\r\n\t\t{\r\n\t\t\tif (code == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"code\");\r\n\t\t\tif (output == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"output\");\r\n\t\t\tif (config == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"config\");\r\n\r\n\t\t\tTokenizer.Features features = Tokenizer.Features.Default | Tokenizer.Features.ContextKeywords;\r\n\r\n\t\t\tTokenizer tokenizer = new Tokenizer(new StringReader(code), features);\r\n\t\t\tTokens token;\r\n\r\n\t\t\toutput.Write(\"<pre>\");\r\n\t\t\toutput.Write(\"<span style='color:\");\r\n\t\t\toutput.Write(config.Highlighting.Background);\r\n\t\t\toutput.Write(\"'>\");\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\ttoken = tokenizer.GetNextToken();\r\n\r\n\t\t\t\tif (token == Tokens.ERROR || token == Tokens.EOF) break;\r\n\r\n\t\t\t\tstring fcolor = config.Highlighting.Default;\r\n\t\t\t\tbool is_bold = false;\r\n\r\n\t\t\t\tswitch (tokenizer.TokenCategory)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase TokenCategory.Unknown:\r\n\t\t\t\t\tcase TokenCategory.Text:\r\n\t\t\t\t\tcase TokenCategory.Delimiter:\r\n\t\t\t\t\tcase TokenCategory.Number:\r\n\t\t\t\t\tcase TokenCategory.Identifier:\r\n\t\t\t\t\tcase TokenCategory.Operator:\r\n\t\t\t\t\tcase TokenCategory.WhiteSpace:\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.Html:\r\n\t\t\t\t\t\tfcolor = config.Highlighting.Html;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.Comment:\r\n\t\t\t\t\tcase TokenCategory.LineComment:\r\n\t\t\t\t\t\tfcolor = config.Highlighting.Comment;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.ScriptTags:\r\n\t\t\t\t\t\tfcolor = config.Highlighting.ScriptTags;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.Keyword:\r\n\t\t\t\t\t\tfcolor = config.Highlighting.Keyword;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.StringCode:\r\n\t\t\t\t\t\tis_bold = true;\r\n\t\t\t\t\t\tfcolor = config.Highlighting.String;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase TokenCategory.String:\r\n\t\t\t\t\t\tfcolor = config.Highlighting.String;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.Write(\"<span style='color:\");\r\n\t\t\t\toutput.Write(fcolor);\r\n\t\t\t\toutput.Write(\"'>\");\r\n\t\t\t\tif (is_bold) output.Write(\"<b>\");\r\n\r\n\t\t\t\toutput.Write(HttpUtility.HtmlEncode(tokenizer.TokenText));\r\n\r\n\t\t\t\tif (is_bold) output.Write(\"</b>\");\r\n\t\t\t\toutput.Write(\"</span>\");\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write(\"</pre>\");\r\n\t\t\treturn token != Tokens.ERROR;\r\n\t\t}\r\n\r\n\t}\r\n}"
  },
  {
    "path": "Source/ClassLibrary/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP.Core;\r\n#if !SILVERLIGHT\r\nusing System.Web;\r\nusing System.Runtime.Serialization.Formatters.Binary;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n\tpublic sealed class LibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n        // default extension:\r\n        public const string ExtStandard = \"standard\";\r\n\r\n        // other extensions:\r\n        //public const string ExtCalendar = \"calendar\";//There isn't managed calender in class library\r\n        public const string ExtCore = \"Core\";//Class Library defines some functions/constants that in PHP belongs to Core\r\n        public const string ExtSession = \"session\";\r\n        public const string ExtCType = \"ctype\";\r\n        public const string ExtTokenizer = \"tokenizer\";\r\n        public const string ExtDate = \"date\";\r\n        public const string ExtPcre = \"pcre\";\r\n        public const string ExtEreg = \"ereg\";\r\n        public const string ExtJson = \"json\";\r\n        public const string ExtHash = \"hash\";\r\n        public const string ExtSpl = \"SPL\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal static LibraryDescriptor Singleton { get { return singleton; } }\r\n\t\tprivate static LibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtStandard, ExtCore,/* ExtCalendar,*/ ExtCType, ExtSession, ExtTokenizer, ExtDate, ExtPcre, ExtEreg, ExtJson, ExtHash, ExtSpl }; }\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore config)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, config);\r\n\t\t\tsingleton = this;\r\n\r\n#if !SILVERLIGHT\r\n\t\t\tLibraryConfiguration.RegisterLegacyOptions();\r\n\r\n\t\t\t// registers session handlers:\r\n\t\t\tSessionHandlers.RegisterHandler(PhpSessionHandler.Default);\r\n\t\t\tSessionHandlers.RegisterHandler(PhpUserSessionHandler.Default);\r\n            SessionHandlers.RegisterHandler(AspNetThruSessionHandler.Default);\r\n\r\n\t\t\t// registers serializers:\r\n\t\t\tSerializers.RegisterSerializer(PhpSerializer.Default);\r\n            //Serializers.RegisterSerializer(PhalangerSerializer.Default);\r\n\t\t\tSerializers.RegisterSerializer(new ContextualSerializer(\"dotnet\", delegate(PHP.Core.Reflection.DTypeDesc caller/*ignored*/)\r\n\t\t\t{\r\n\t\t\t\treturn new BinaryFormatter(\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnew StreamingContext(StreamingContextStates.Persistence, new SerializationContext()));\r\n\t\t\t}));\r\n#endif\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\treturn new ConfigContextBase(new LibraryConfiguration(), null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A library configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated library configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\tLibraryConfiguration local = (LibraryConfiguration)result.Local;\r\n\r\n\t\t\t// parses XML tree:\r\n\t\t\tforeach (XmlNode node in section.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (node.Name)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"mailer\":\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, context, local.Mailer);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"highlighting\":\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, context, local.Highlighting);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"session\":\r\n\r\n\t\t\t\t\t\t\t// allowed only in web application configuration:\r\n\t\t\t\t\t\t\tif (HttpContext.Current == null)\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"web_only_option\"), node);\r\n\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, context, local.Session);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"date\":\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, context, local.Date);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n                        case \"serialization\":\r\n                            ConfigUtils.ParseNameValueList(node, context, local.Serialization);\r\n                            break;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidNodeException(node);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n#endif\r\n\t}\r\n}  \r\n\r\n\r\n"
  },
  {
    "path": "Source/ClassLibrary/Locale.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Threading;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// This class manages locale information for PHP and interacts .NET Framework.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Locale\r\n\t{\r\n\t\t[ImplementsConstant(\"CHAR_MAX\")]\r\n\t\tpublic const int CHAR_MAX = 127;\r\n\r\n\t\tprivate static readonly char[] CultureNameSeparators = new char[] { '-', '_' };\r\n\r\n\t\t#region Categorized Cultures\r\n\r\n\t\t/// <summary>\r\n\t\t/// A locale categories.\r\n\t\t/// </summary>\r\n\t\t/// <exclude/>\r\n\t\tpublic enum Category\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Assigning a culture to this category is equivalent to assigning it to all other categories.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_ALL\")]\r\n\t\t\tAll,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Influences function <c>strcoll</c>.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_COLLATE\")]\r\n\t\t\tCollate,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Influences functions <c>strtolower</c>, <c>strtoupper</c>\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_CTYPE\")]\r\n\t\t\tCType,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Influences functions <c>money_format</c>, <c>localeconv</c>\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_MONETARY\")]\r\n\t\t\tMonetary,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Influences function <c>localeconv</c> and formatting of all floating-point numbers.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_NUMERIC\")]\r\n\t\t\tNumeric,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Influences function <c>strftime</c>.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"LC_TIME\")]\r\n\t\t\tTime\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Cultures associated with cathegories.\r\n\t\t/// </summary>\r\n\t\tprivate static CultureInfo[] cultures\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_cultures == null)\r\n\t\t\t\t\t_cultures = new CultureInfo[(int)Category.Time + 1];\r\n\r\n\t\t\t\treturn _cultures;\r\n\t\t\t}\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t[ThreadStatic]\r\n#endif\r\n\t\tprivate static CultureInfo[] _cultures;\r\n\r\n\t\tstatic Locale()\r\n\t\t{\r\n            RequestContext.RequestEnd += new Action(Clear);\r\n\t\t}\r\n\r\n\t\tprivate static void Clear()\r\n\t\t{\r\n\t\t\t_cultures = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a culture specific for the given category.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"category\">The category.</param>\r\n\t\t/// <returns>Non-null culture info.</returns>\r\n\t\tpublic static CultureInfo GetCulture(Category category)\r\n\t\t{\r\n\t\t\tif ((int)category < 0 || (int)category >= cultures.Length)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"category\");\r\n\r\n\t\t\treturn cultures[(int)category] ?? CultureInfo.CurrentCulture;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a culture specific for the given category.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"category\">The category.</param>\r\n\t\t/// <param name=\"culture\">The culture.</param>\r\n\t\tpublic static void SetCulture(Category category, CultureInfo culture)\r\n\t\t{\r\n\t\t\tif ((int)category < 0 || (int)category >= cultures.Length)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"category\");\r\n\r\n\t\t\t// sets specific culture:\r\n\t\t\tif (category == Category.All)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < cultures.Length; i++)\r\n\t\t\t\t\tcultures[i] = culture;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcultures[(int)category] = culture;\r\n\t\t\t}\r\n\r\n\t\t\t// sets global culture used in many places:\r\n\t\t\tif (category == Category.All || category == Category.Numeric)\r\n\t\t\t\tThread.CurrentThread.CurrentCulture = culture;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpLocaleStringComparer\"/> comparing according to the current collate.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ignoreCase\">Whether to create a case-insensitive comparer.</param>\r\n\t\t/// <returns>The comparer.</returns>\r\n\t\tpublic static PhpLocaleStringComparer GetStringComparer(bool ignoreCase)\r\n\t\t{\r\n\t\t\treturn new PhpLocaleStringComparer(GetCulture(Category.Collate), ignoreCase);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region localeconv\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts .NET groups information to PHP array.\r\n\t\t/// </summary>\r\n\t\tprivate static PhpArray GetGroupingArray(int[] groups)\r\n\t\t{\r\n\t\t\tDebug.Assert(groups != null);\r\n\r\n\t\t\tint length = groups.Length;\r\n\t\t\tPhpArray result = new PhpArray(length, 0);\r\n\t\t\tfor (int i = 0; i < length; i++)\r\n\t\t\t\tif (groups[i] == 0)\r\n\t\t\t\t\tresult.Add(i, CHAR_MAX);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult.Add(i, groups[i]);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets information about the current thread culture.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The associative array of number and currency information.</returns>\r\n\t\t[ImplementsFunction(\"localeconv\")]\r\n\t\tpublic static PhpArray localeconv()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(0, 18);\r\n\t\t\tNumberFormatInfo number;\r\n\r\n\t\t\tnumber = GetCulture(Category.Numeric).NumberFormat;\r\n\r\n\t\t\tresult.Add(\"decimal_point\", number.NumberDecimalSeparator);\r\n\t\t\tresult.Add(\"thousands_sep\", number.NumberGroupSeparator);\r\n\t\t\tresult.Add(\"grouping\", GetGroupingArray(number.CurrencyGroupSizes));\r\n\t\t\tresult.Add(\"positive_sign\", number.PositiveSign);\r\n\t\t\tresult.Add(\"negative_sign\", number.NegativeSign);\r\n\t\t\tresult.Add(\"frac_digits\", number.CurrencyDecimalDigits);\r\n\r\n\t\t\tnumber = GetCulture(Category.Monetary).NumberFormat;\r\n\r\n\t\t\tresult.Add(\"currency_symbol\", number.CurrencySymbol);\r\n\t\t\tresult.Add(\"mon_decimal_point\", number.CurrencyDecimalSeparator);\r\n\t\t\tresult.Add(\"mon_thousands_sep\", number.CurrencyGroupSeparator);\r\n\t\t\tresult.Add(\"mon_grouping\", GetGroupingArray(number.CurrencyGroupSizes));\r\n\r\n\t\t\t// currency patterns: 0 -> $n, 1 -> n$, 2 -> $ n, 3 -> n $\r\n\t\t\tresult.Add(\"p_cs_precedes\", number.CurrencyPositivePattern == 0 || number.CurrencyPositivePattern == 2);\r\n\t\t\tresult.Add(\"p_sep_by_space\", number.CurrencyPositivePattern == 2 || number.CurrencyPositivePattern == 3);\r\n\t\t\tresult.Add(\"n_cs_precedes\", number.CurrencyNegativePattern == 0 || number.CurrencyNegativePattern == 2);\r\n\t\t\tresult.Add(\"n_sep_by_space\", number.CurrencyNegativePattern == 2 || number.CurrencyNegativePattern == 3);\r\n\r\n\t\t\tresult.Add(\"p_sign_posn\", 1);\r\n\t\t\tresult.Add(\"n_sign_posn\", 1);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region setlocale, strcoll, nl_langinfo (NS)\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Sets or gets the current thread culture settings.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"category\">\r\n\t\t/// A category to be modified. The only supported value in this version is <see cref=\"Category.All\"/>.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"locale\">Either an instance of <see cref=\"PhpArray\"/> containing locales or a locale.</param>\r\n\t\t/// <param name=\"moreLocales\">If <paramref name=\"locale\"/> is not of type <see cref=\"PhpArray\"/> contains locales, ignored otherwise.</param>\r\n\t\t/// <returns>The culture string (e.g. \"en-US\").</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Values specified in <paramref name=\"locale\"/> and <paramref name=\"moreLocales\"/> are converted to strings.\r\n\t\t/// Each value should have format \"{language}-{region}\" or \"{language}_{region}\" or \"{language}\" or special values \"C\" or empty string\r\n\t\t/// which represents the invariant culture or special values <B>null</B> or \"0\" which means no changes is made \r\n\t\t/// by the method rather the current culture name is returned. \r\n\t\t/// The first value containing am existing culture string is used.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"category\"/> has an invalid or unsupported value. (Warning)</exception>\r\n\t\t[ImplementsFunction(\"setlocale\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string SetLocale(Category category, object locale, params object[] moreLocales)\r\n\t\t{\r\n\t\t\tCultureInfo new_culture;\r\n\r\n\t\t\tif (GetFirstExistingCulture(locale, moreLocales, out new_culture))\r\n\t\t\t{\r\n\t\t\t\tif ((int)category < 0 || (int)category > cultures.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.InvalidArgument(\"category\", LibResources.GetString(\"arg:invalid_value\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// sets specific culture:\r\n\t\t\t\tSetCulture(category, new_culture);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tnew_culture = CultureInfo.CurrentCulture;\r\n\t\t\t}\r\n\r\n\t\t\tif (new_culture == CultureInfo.InvariantCulture)\r\n\t\t\t\treturn \"C\";\r\n\r\n\t\t\treturn String.Format(\"{0}.{1}\",\r\n\t\t\t  new_culture.EnglishName.Replace(\" (\", \"_\").Replace(\")\", \"\"),\r\n\t\t\t  new_culture.TextInfo.ANSICodePage);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches in given objects for a locale string describing an existing culture.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"locale\">Contains either an instance of <see cref=\"PhpArray\"/> containing locales or a locale.</param>\r\n\t\t/// <param name=\"moreLocales\">If <paramref name=\"locale\"/> is not of type <see cref=\"PhpArray\"/> contains locales, ignored otherwise.</param>\r\n\t\t/// <param name=\"culture\">The resulting culture. A <B>null</B> reference means no culture has been found.</param>\r\n\t\t/// <returns>Whether a culture settings should be changed.</returns>\r\n\t\tprivate static bool GetFirstExistingCulture(object locale, object[] moreLocales, out CultureInfo culture)\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\t\t\tIEnumerator locales;\r\n\t\t\tculture = null;\r\n\r\n\t\t\tif ((array = locale as PhpArray) != null)\r\n\t\t\t{\r\n\t\t\t\t// locales are stored in the \"locale\" array:\r\n\t\t\t\tlocales = array.GetEnumerator();\r\n\t\t\t\tlocales.MoveNext();\r\n\t\t\t\tlocale = locales.Current;\r\n\t\t\t}\r\n\t\t\telse if (moreLocales != null)\r\n\t\t\t{\r\n\t\t\t\t// locales are stored in the \"locale\" and \"moreLocales\":\r\n\t\t\t\tlocales = moreLocales.GetEnumerator();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthrow new ArgumentNullException(\"moreLocales\");\r\n\t\t\t}\r\n\r\n\t\t\t// enumerates locales and finds out the first which is valid:\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tstring name = (locale != null) ? Core.Convert.ObjectToString(locale) : null;\r\n\r\n\t\t\t\tculture = GetCultureByName(name);\r\n\r\n\t\t\t\t// name is \"empty\" then the current culture is not changed:\r\n\t\t\t\tif (name == null || name == \"0\") return false;\r\n\r\n\t\t\t\t// if culture exists and is specific then finish searching:\r\n\t\t\t\tif (culture != null) return true;\r\n\r\n\t\t\t\t// the next locale:\r\n\t\t\t\tif (!locales.MoveNext()) return false;\r\n\r\n\t\t\t\tlocale = locales.Current;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a culture of a specified name. \r\n\t\t/// Tries \"{language}-{country}\", \"{country}-{language}\".\r\n\t\t/// Recognizes \"C\", \"\", \"0\" and <B>null</B> as invariant culture.\r\n\t\t/// Note, PHP swaps language and country codes.\r\n\t\t/// </summary>\r\n\t\tprivate static CultureInfo GetCultureByName(string name)\r\n\t\t{\r\n\t\t\t// invariant culture:\r\n\t\t\tif (name == null || name == \"0\" || name == String.Empty || name == \"C\")\r\n\t\t\t\treturn CultureInfo.InvariantCulture;\r\n\r\n\t\t\tint separator = name.IndexOfAny(CultureNameSeparators);\r\n\t\t\tif (separator < 0)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\treturn CultureInfo.CreateSpecificCulture(name);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstring part1 = name.Substring(0, separator);\r\n\t\t\t\tstring part2 = name.Substring(separator + 1);\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\treturn CultureInfo.CreateSpecificCulture(String.Concat(part1, \"-\", part2));\r\n\t\t\t\t}\r\n\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn CultureInfo.CreateSpecificCulture(String.Concat(part2, \"-\", part1));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Compares two specified strings, honoring their case, using culture specific comparison.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str1\">A string.</param>\r\n\t\t/// <param name=\"str2\">A string.</param>\r\n\t\t/// <returns>\r\n\t\t/// Returns -1 if <paramref name=\"str1\"/> is less than <paramref name=\"str2\"/>; +1 if <paramref name=\"str1\"/> is greater than <paramref name=\"str2\"/>,\r\n\t\t/// and 0 if they are equal.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"strcoll\")]\r\n\t\tpublic static int StringCollate(string str1, string str2)\r\n\t\t{\r\n\t\t\treturn String.Compare(str1, str2, false, GetCulture(Category.Collate));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"nl_langinfo\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static string nl_langinfo(int item)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Mailer.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2012 Pavel Novak, Tomas Matousek, DEVSENSE.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n TODO: .NET 2.0\r\n\r\n*/\r\nusing System;\r\nusing PHP.Core;\r\nusing System.Net.Mail;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.ComponentModel;\r\nusing System.Net.Sockets;\r\nusing System.Net;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Maps PHP mailing methods to Framework ones.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Mailer\r\n\t{\r\n\t\t#region mail, ezmlm_hash\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends e-mail only with essential headers.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"to\">Recipient e-mail address.</param>\r\n\t\t/// <param name=\"subject\">E-mail subject.</param>\r\n\t\t/// <param name=\"message\">Message body.</param>\r\n\t\t/// <returns>True if mail was accepted to send.</returns>\r\n\t\t[ImplementsFunction(\"mail\")]\r\n        public static bool Mail(string to, string subject, string message)\r\n\t\t{\r\n\t\t\treturn Mail(to, subject, message, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends e-mail, allows specify additional headers.\r\n\t\t/// Supported are Cc, Bcc, From, Priority, Content-type. Others are ignored.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// E-mail addresses specified in additional headers must be valid (including From header).\r\n\t\t/// Otherwise your e-mail will not be send.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"to\">Recipient e-mail address.</param>\r\n\t\t/// <param name=\"subject\">E-mail subject.</param>\r\n\t\t/// <param name=\"message\">Message body.</param>\r\n\t\t/// <param name=\"additionalHeaders\">Additional headers.</param>\r\n\t\t/// <returns>True if mail was accepted to send.</returns>\r\n\t\t[ImplementsFunction(\"mail\")]\r\n        public static bool Mail(string to, string subject, string message, string additionalHeaders)\r\n\t\t{\r\n\t\t\t// to and subject cannot contain newlines, replace with spaces\r\n\t\t\tto = (to != null) ? to.Replace(\"\\r\\n\", \" \").Replace('\\n', ' ') : \"\";\r\n\t\t\tsubject = (subject != null) ? subject.Replace(\"\\r\\n\", \" \").Replace('\\n', ' ') : \"\";\r\n\r\n\t\t\tDebug.WriteLine(\"MAILER\", \"mail('{0}','{1}','{2}','{3}')\", to, subject, message, additionalHeaders);\r\n\r\n\t\t\t// get current configuration, we need some fields for mailing\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.Local;\r\n\r\n\t\t\t// set SMTP server we are using\r\n            RawSmtpClient client = new RawSmtpClient(config.Mailer.SmtpServer, config.Mailer.SmtpPort);\r\n\r\n            // X-PHP-Originating-Script\r\n            if (config.Mailer.AddXHeader)\r\n                additionalHeaders = \"X-PHP-Originating-Script: 1:\" + ScriptContext.CurrentContext.MainScriptFile.RelativePath.Path + \"\\n\" + additionalHeaders;\r\n\r\n            try\r\n            {\r\n                client.Connect();\r\n                client.SendMessage(\r\n                    config.Mailer.DefaultFromHeader, to,\r\n                    subject,\r\n                    additionalHeaders,\r\n                    message);\r\n                return true;\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                string error_message = e.Message;\r\n                Exception inner = e;\r\n                while ((inner = inner.InnerException) != null)\r\n                    error_message += \"; \" + inner.Message;\r\n\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"cannot_send_email\", error_message)\r\n#if DEBUG\r\n                    + \"\\n\\n\" + e.StackTrace\r\n#endif\r\n                    );\r\n                return false;\r\n            }\r\n            finally\r\n            { \r\n                client.Disconnect(); \r\n            }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends e-mail, allows specify additional headers and additional parameters.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Additional parameters are not supported, must be null or empty string.\r\n\t\t/// Use overload function without <c>additionalParameters</c> parameter.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"to\">Recipient e-mail address.</param>\r\n\t\t/// <param name=\"subject\">E-mail subject.</param>\r\n\t\t/// <param name=\"message\">Message body.</param>\r\n\t\t/// <param name=\"additionalHeaders\">Additional headers.</param>\r\n\t\t/// <param name=\"additionalParameters\">Additional parameters.</param>\r\n\t\t/// <returns>True if mail was accepted to send.</returns>\r\n\t\t[ImplementsFunction(\"mail\")]\r\n\t\tpublic static bool Mail(string to, string subject, string message, string additionalHeaders, string additionalParameters)\r\n\t\t{\r\n\t\t\t// additional parameters are not supported while running windows\r\n\t\t\tif (!string.IsNullOrEmpty(additionalParameters))\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"additional_parameters_not_supported\"));\r\n\r\n\t\t\treturn Mail(to, subject, message, additionalHeaders);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Counts hash value needed by EZMLM.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"addr\">Mail address for which is hash value calculating.</param>\r\n\t\t/// <returns>Calculated hash value.</returns>\r\n\t\t[ImplementsFunction(\"ezmlm_hash\")]\r\n\t\tpublic static int ezmlm_hash(string addr)\r\n\t\t{\r\n\t\t\t// this algorithm is assumed from PHP source code\r\n\r\n\t\t\tuint h = 5381; // must be 32-bit unsigned\r\n\t\t\taddr = addr.ToLower();\r\n\r\n\t\t\tunchecked // overflow may occur, this is OK.\r\n\t\t\t{\r\n\t\t\t\tfor (int j = 0; j < addr.Length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\th = (h + (h << 5)) ^ (uint)addr[j];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\th = (h % 53);\r\n\r\n\t\t\treturn (int)h;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Mail headers parsing\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts mail headers from string <c>headers</c> and if the string contains supported headers,\r\n\t\t/// appropriate fields are set to <c>MailMessage mm</c> object.\r\n\t\t/// Supported headers are: Cc, Bcc, From, Priority, Content-type. Others are ignored.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"headers\">String containing mail headers.</param>\r\n\t\t/// <param name=\"mm\">MailMessage object to set fields according to <c>headers</c>.</param>\r\n\t\tprivate static void SetMailHeaders(string headers, MailMessage mm)\r\n\t\t{\r\n\t\t\t// parse additional headers\r\n\t\t\tRegex headerRegex = new Regex(\"^([^:]+):[ \\t]*(.+)$\");\r\n\t\t\tMatch headerMatch;\r\n\r\n\t\t\tint line_begin, line_end = -1;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tline_begin = line_end + 1;\r\n\r\n\t\t\t\t// search for non-empty line\r\n\t\t\t\twhile (line_begin < headers.Length && (headers[line_begin] == '\\n' || headers[line_begin] == '\\r'))\r\n\t\t\t\t\tline_begin++;\r\n\t\t\t\tif (line_begin >= headers.Length)\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t// find the line end\r\n\t\t\t\tline_end = line_begin + 1;\r\n\t\t\t\twhile (line_end < headers.Length && headers[line_end] != '\\n' && headers[line_end] != '\\r')\r\n\t\t\t\t\tline_end++;\r\n\r\n\t\t\t\tstring header = headers.Substring(line_begin, line_end - line_begin);\r\n\t\t\t\theaderMatch = headerRegex.Match(header);\r\n\r\n\t\t\t\t// ignore wrong formatted headers\r\n\t\t\t\tif (!headerMatch.Success)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\tstring sw = headerMatch.Groups[1].Value.Trim().ToLower();\r\n\t\t\t\tswitch (sw)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"cc\":\r\n\t\t\t\t\t\tmm.CC.Add(ExtractMailAddressesOnly(headerMatch.Groups[2].Value, Int32.MaxValue));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"bcc\":\r\n\t\t\t\t\t\tmm.Bcc.Add(ExtractMailAddressesOnly(headerMatch.Groups[2].Value, Int32.MaxValue));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"from\":\r\n\t\t\t\t\t\tstring from = ExtractMailAddressesOnly(headerMatch.Groups[2].Value, 1);\r\n\t\t\t\t\t\tif (!String.IsNullOrEmpty(from))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmm.From = new MailAddress(from);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcatch (FormatException)\r\n\t\t\t\t\t\t\t{ }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"priority\":\r\n\t\t\t\t\t\tmm.Priority = ExtractPriority(headerMatch.Groups[2].Value);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"content-type\":\r\n\t\t\t\t\t\tExtractContentType(headerMatch.Groups[2].Value, mm);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tmm.Headers.Add(headerMatch.Groups[1].Value.Trim(), headerMatch.Groups[2].Value);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts semicolon separated list of email addresses and names of email owners\r\n\t\t/// to semicolon separated list of only email addresses.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"emails\">Semicolon separated list of email addresses and names.</param>\r\n\t\t/// <param name=\"max\">Max number of emails returned.</param>\r\n\t\t/// <returns>Semicolon separated list of email addresses only.</returns>\r\n\t\tprivate static string ExtractMailAddressesOnly(string emails, int max)\r\n\t\t{\r\n\t\t\tStringBuilder mailsOnly = new StringBuilder();\r\n\t\t\tRegex regWithName = new Regex(\"^[ \\t]*([^<>]*?)[ \\t]*<[ \\t]*([^<>]*?)[ \\t]*>[ \\t]*$\");\r\n\t\t\tRegex regEmail = new Regex(\"^[ \\t]*[^@ \\t<>]+@[^@ \\t<>]+.[^@ \\t<>]+[ \\t]*$\");\r\n\r\n\t\t\tMatch m, m2;\r\n\t\t\tstring toAppend = \"\";\r\n\t\t\tstring[] mailsArray = emails.Split(';');\r\n\t\t\tforeach (string mail in mailsArray)\r\n\t\t\t{\r\n\t\t\t\tm = regWithName.Match(mail);\r\n\t\t\t\tif (m.Success) // mail with name\r\n\t\t\t\t{\r\n\t\t\t\t\tGroup gr;\r\n\t\t\t\t\tfor (int i = 1; i < m.Groups.Count; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tgr = m.Groups[i];\r\n\t\t\t\t\t\tm2 = regEmail.Match(gr.Value);\r\n\t\t\t\t\t\tif (m2.Success)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttoAppend = m2.Value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// if an e-mail is in <..> we forget previous email found out of <..> (the name looks like e-mail address)\r\n\t\t\t\t\tmailsOnly.Append(toAppend);\r\n\t\t\t\t\tmailsOnly.Append(';');\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tm2 = regEmail.Match(mail);\r\n\t\t\t\t\tif (m2.Success) // only email without name\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmailsOnly.Append(m2.Value);\r\n\t\t\t\t\t\tmailsOnly.Append(';');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// bad e-mail address\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_email_address\", mail));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (mailsOnly.Length == 0)\r\n\t\t\t\treturn \"\";\r\n\r\n\t\t\t// return without last semicolon\r\n\t\t\treturn mailsOnly.ToString(0, mailsOnly.Length - 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for converting header Priority to <c>MailPriority</c> value needed by .NET Framework mailer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"p\">\"Priority:\" header value.</param>\r\n\t\t/// <returns><c>MailPriority</c> specified by header value.</returns>\r\n\t\tprivate static MailPriority ExtractPriority(string p)\r\n\t\t{\r\n            switch (p.Trim().ToLowerInvariant())\r\n\t\t\t{\r\n\t\t\t\tcase \"high\":\r\n\t\t\t\t\treturn MailPriority.High;\r\n\t\t\t\tcase \"low\":\r\n\t\t\t\t\treturn MailPriority.Low;\r\n\t\t\t\tcase \"normal\":\r\n\t\t\t\tdefault:\r\n                    return MailPriority.Normal;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for converting header ContentType to <c>MailFormat</c> value and <c>Encoding</c> class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"contentTypeHeader\">\"Content-type:\" header value</param>\r\n        /// <param name=\"mm\">Mail message instance.</param>\r\n\t\tprivate static void ExtractContentType(string contentTypeHeader, MailMessage mm)\r\n\t\t{\r\n            contentTypeHeader = contentTypeHeader.Trim().ToLower();\r\n\r\n            // extract content-type value parts (type/subtype; parameter1=value1; parameter2=value2)\r\n            string[] headerParts = contentTypeHeader.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);\r\n\r\n            if (headerParts == null || headerParts.Length == 0)\r\n                return;\r\n\r\n            // process type/subtype\r\n            mm.IsBodyHtml = (headerParts[0].Trim() == \"text/html\");\r\n            \r\n            for (int i = 1; i < headerParts.Length; ++i)\r\n            {\r\n                int asspos = headerParts[i].IndexOf('=');\r\n                if (asspos < 1) continue;\r\n\r\n                string propertyName = headerParts[i].Remove(asspos).Trim();\r\n                string propertyValue = headerParts[i].Substring(asspos + 1).Trim(new char[]{' ','\\t','\\\"','\\'','\\n','\\r'});\r\n\r\n                switch (propertyName)\r\n                {\r\n                    case \"charset\":\r\n                        try\r\n                        {\r\n                            mm.BodyEncoding = Encoding.GetEncoding(propertyValue);\r\n                        }\r\n                        catch (Exception)\r\n                        {}\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            \r\n            // add header into the mail message as it is\r\n            mm.Headers.Add(\"content-type\", contentTypeHeader);\r\n\t\t}\r\n\t\t#endregion\r\n\r\n        #region RawSmtpClient\r\n        \r\n        /// <summary>\r\n        /// Raw SMTP client serving the needs of PHP mail functions. This is reimplemented mainly because .NET SmtpClient provides\r\n        /// certain level of abstraction which is incompatible with mail function usage. Currently not as much advanced, but it can easily be.\r\n        /// </summary>\r\n        internal class RawSmtpClient\r\n        {\r\n            /// <summary>\r\n            /// Wait time for Socket.Poll - in microseconds.\r\n            /// </summary>\r\n            private const int _pollTime = 100000;\r\n\r\n            /// <summary>\r\n            /// Timeout of connection. We don't want to block for too long.\r\n            /// </summary>\r\n            private const int _connectionTimeout = 5000;\r\n\r\n            /// <summary>\r\n            /// Gets a value indicating whether this client is connected to a server.\r\n            /// </summary>\r\n            public bool Connected { get { return _connected; } }\r\n            private bool _connected;\r\n\r\n            /// <summary>\r\n            /// Gets or sets a value indicating whether this client should implicitly use ESMTP to connect to the server.\r\n            /// </summary>\r\n            public bool UseExtendedSmtp { get { return _useExtendedSmtp; } }\r\n            private bool _useExtendedSmtp;\r\n\r\n            /// <summary>\r\n            /// Gets host name set for this client to connect to.\r\n            /// </summary>\r\n            public string/*!*/HostName { get { return _hostName; } }\r\n            private readonly string/*!*/_hostName;\r\n\r\n            /// <summary>\r\n            /// Gets port number set for this client to connect to.\r\n            /// </summary>\r\n            public int Port { get { return _port; } }\r\n            private readonly int _port;\r\n\r\n            /// <summary>\r\n            /// Gets a list of SMTP extensions supported by current connection.\r\n            /// </summary>\r\n            public string[] Extensions { get { return _extensions; } }\r\n            private string[] _extensions;\r\n\r\n            private TextReader _reader;\r\n            private TextWriter _writer;\r\n\r\n            private Socket _socket;\r\n            private NetworkStream _stream;\r\n\r\n            public RawSmtpClient(string hostName)\r\n                : this(hostName, 25)\r\n            {\r\n            }\r\n\r\n            /// <summary>\r\n            /// Initializes a new instance of AdvancedSmtp client class.\r\n            /// </summary>\r\n            /// <param name=\"hostName\">Host name (IP or domain name) of the SMTP server.</param>\r\n            /// <param name=\"port\">Port on which SMTP server runs.</param>\r\n            public RawSmtpClient(string hostName, int port)\r\n            {\r\n                _hostName = hostName ?? string.Empty;\r\n                _port = port;\r\n                _connected = false;\r\n                _useExtendedSmtp = true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Resets the state of this object.\r\n            /// </summary>\r\n            private void ResetConnection()\r\n            {\r\n                if (_reader != null)\r\n                {\r\n                    _reader.Close();\r\n                    _reader = null;\r\n                }\r\n\r\n                if (_writer != null)\r\n                {\r\n                    _writer.Close();\r\n                    _writer = null;\r\n                }\r\n\r\n                if (_stream != null)\r\n                {\r\n                    _stream.Close();\r\n                    _stream = null;\r\n                }\r\n\r\n                if (_socket != null)\r\n                {\r\n                    if (_socket.Connected)\r\n                        _socket.Shutdown(SocketShutdown.Both);\r\n                    _socket.Close();\r\n                    _socket = null;\r\n                }\r\n\r\n                _extensions = null;\r\n                _connected = false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Connects to the server.\r\n            /// </summary>\r\n            /// <remarks>Method throws an exception on any error.</remarks>\r\n            /// <exception cref=\"SmtpException\">If any error occures.</exception>\r\n            public void Connect()\r\n            {\r\n                // invariant condition\r\n                Debug.Assert(_connected == (_socket != null));\r\n\r\n                // check whether socket is not already connected\r\n                if (_connected)\r\n                {\r\n                    // check whether the socket is OK\r\n                    bool error = _socket.Poll(_pollTime, SelectMode.SelectError);\r\n\r\n                    if (!error)\r\n                        // ok, we keep this connection\r\n                        return;// true;\r\n\r\n                    // close the socket and reset\r\n                    ResetConnection();\r\n                }\r\n\r\n                // resolve host's domain\r\n                IPAddress[] addresses = null;\r\n\r\n                try\r\n                {\r\n                    addresses = System.Net.Dns.GetHostAddresses(_hostName);\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    // DNS error - reset and fail\r\n                    ResetConnection();\r\n                    //return false;\r\n                    throw new SmtpException(e.Message);\r\n                }\r\n\r\n                Debug.Assert(addresses != null);\r\n\r\n                // create socket\r\n                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n\r\n                // begin async connect\r\n                IAsyncResult res = _socket.BeginConnect(addresses, _port, null, null);\r\n\r\n                // wait for some time\r\n                res.AsyncWaitHandle.WaitOne(_connectionTimeout);\r\n\r\n                // if socket could not connect, reset and fail\r\n                if (!_socket.Connected)\r\n                {\r\n                    ResetConnection();\r\n                    throw new SmtpException(\"Cannot connect to \" + _hostName);\r\n                }\r\n\r\n                // if anything inside throws exception, we were not successful\r\n                try\r\n                {\r\n                    // end connect\r\n                    _socket.EndConnect(res);\r\n\r\n                    // create a stream\r\n                    _stream = new NetworkStream(_socket);\r\n\r\n                    // create _reader and _writer\r\n                    _reader = new StreamReader(_stream, Encoding.ASCII);\r\n                    _writer = new StreamWriter(_stream, Encoding.ASCII);\r\n                    _writer.NewLine = \"\\r\\n\";\r\n\r\n                    string line;\r\n\r\n                    // read server welcome message\r\n                    line = _reader.ReadLine();\r\n\r\n                    // if there is no 220 in the beginning, this is no SMTP server\r\n                    if (!line.StartsWith(\"220\")) throw new SmtpException(\"Expected 220, '\"+line+\"' given\");// return false;\r\n                    //TODO: server name processing\r\n\r\n                    // send ESMTP welcome message\r\n                    if (_useExtendedSmtp)\r\n                    {\r\n                        Post(\"EHLO \" + System.Net.Dns.GetHostName());\r\n\r\n                        // read response\r\n                        line = _reader.ReadLine();\r\n                    }\r\n\r\n                    if (_useExtendedSmtp && line.StartsWith(\"250\"))\r\n                    {\r\n                        // this is ESMTP server\r\n\r\n                        // ESMTP returns '-' on fourth char if there are any more lines available\r\n                        if (line[3] == ' ')\r\n                        {\r\n                            // there are no extensions\r\n                            _extensions = ArrayUtils.EmptyStrings;\r\n\r\n                            // success\r\n                            return;// true;\r\n                        }\r\n                        else if (line[3] == '-')\r\n                        {\r\n                            List<string> extensions = new List<string>();\r\n\r\n                            // we do not need to read first line - there is only a welcome string\r\n\r\n                            while (true)\r\n                            {\r\n                                //read new line\r\n                                line = _reader.ReadLine();\r\n\r\n                                if (line.StartsWith(\"250-\"))\r\n                                {\r\n                                    //add new extension name\r\n                                    extensions.Add(line.Substring(4, line.Length - 4));\r\n                                }\r\n                                else if (line.StartsWith(\"250 \"))\r\n                                {\r\n                                    //add new extension name and finish handshake\r\n                                    extensions.Add(line.Substring(4, line.Length - 4));\r\n                                    _extensions = extensions.ToArray();\r\n                                    _connected = true;\r\n                                    return;// true;\r\n                                }\r\n                                else\r\n                                {\r\n                                    //invalid response (do not send QUIT message)\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        // this is not a valid ESMTP server\r\n                    }\r\n                    else if (line.StartsWith(\"500\") || !_useExtendedSmtp)\r\n                    {\r\n                        Post(\"HELO \" + System.Net.Dns.GetHostName());\r\n\r\n                        if (Ack(\"250\"))\r\n                        {\r\n                            _extensions = ArrayUtils.EmptyStrings;\r\n\r\n                            // handshake complete\r\n                            _connected = true;\r\n                            return;// true;\r\n                        }\r\n                    }\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    throw new SmtpException(e.Message);\r\n                } // any error is bad\r\n\r\n                ResetConnection(); // (do not send QUIT message)\r\n\r\n                throw new SmtpException(\"Unexpected\"); //return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Disconnects the client from the server.\r\n            /// </summary>\r\n            public void Disconnect()\r\n            {\r\n                if (!_connected)\r\n                {\r\n                    ResetConnection();\r\n                    return;\r\n                }\r\n\r\n                Post(\"QUIT\");\r\n                Ack(\"221\", null, (_) => {/*incorrect response (do nothing)*/});\r\n\r\n                //correct response\r\n                ResetConnection();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Sends reset message to the server.\r\n            /// </summary>\r\n            private void Reset()\r\n            {\r\n                if (!_connected) return;\r\n\r\n                if (_reader.Peek() != -1)\r\n                {\r\n                    // there is something on the input (should be empty)\r\n                    ResetConnection();\r\n                    return;\r\n                }\r\n\r\n                Post(\"RSET\");\r\n                Ack(\"250\", null,\r\n                    (_) => ResetConnection());\r\n            }\r\n\r\n            /// <summary>\r\n            /// Starts mail transaction and prepares the data lines from supplied message properties.\r\n            /// Processes provided headers to determine cc, bcc and from values.\r\n            /// All data will be send as ASCII if possible.\r\n            /// </summary>\r\n            /// <param name=\"from\">Sender of the mail.</param>\r\n            /// <param name=\"to\">Recipients of the mail.</param>\r\n            /// <param name=\"subject\">Subject of the mail.</param>\r\n            /// <param name=\"headers\">Additional headers.</param>\r\n            /// <param name=\"body\">Message body.</param>\r\n            /// <returns>List of message body lines.</returns>\r\n            private IEnumerable<string>/*!*/ProcessMessageHeaders(string from, string to, string subject, string headers, string body)\r\n            {\r\n                Dictionary<string, int> headerHashtable = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);\r\n                List<KeyValuePair<string, string>> headerList = new List<KeyValuePair<string, string>>();\r\n                List<string> recipients = new List<string>(1) { to };\r\n\r\n                //parse headers\r\n                if (headers != null)\r\n                    using (StringReader reader = new StringReader(headers))\r\n                    {\r\n                        string line;\r\n                        while ((line = reader.ReadLine()) != null)\r\n                        {\r\n                            int index = line.IndexOf(\": \", StringComparison.Ordinal);\r\n\r\n                            if (index > 0)\r\n                            {\r\n                                string name = line.Substring(0, index);\r\n                                string value = line.Substring(index + 2);\r\n\r\n                                //\r\n                                headerHashtable[name] = headerList.Count;   // remember last position of <name> header\r\n                                headerList.Add(new KeyValuePair<string, string>(name, value));\r\n\r\n                                // process known headers:\r\n                                if (from == null && name.EqualsOrdinalIgnoreCase(\"from\"))\r\n                                    from = value;\r\n                                if (name.EqualsOrdinalIgnoreCase(\"cc\") || name.EqualsOrdinalIgnoreCase(\"bcc\"))\r\n                                    recipients.Add(value); //PostRcptTo(value); // postponed until we are discovering from address\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                // check from address:\r\n                if (from == null)\r\n                    throw new SmtpException(LibResources.GetString(\"smtp_sendmail_from_not_set\"));\r\n\r\n                // start mail transaction:\r\n                Post(FormatEmailAddress(from, \"MAIL FROM:<{0}>\"));\r\n                Ack(\"250\");\r\n\r\n                for (int i = 0; i < recipients.Count; i++)\r\n                    PostRcptTo(recipients[i]);\r\n\r\n                // additional message lines:\r\n                List<string> ret = new List<string>();\r\n\r\n                // Date:\r\n                ret.Add(\"Date: \" + DateTime.Now.ToString(\"ddd, dd MMM yyyy HH:mm:ss zz00\", new CultureInfo(\"en-US\")));\r\n                \r\n                // From: // Only add the From: field from <from> parameter if it isn't in the custom headers:\r\n                if (!headerHashtable.ContainsKey(\"from\") && !string.IsNullOrEmpty(from))\r\n                    ret.Add(\"From: \" + from);\r\n\r\n                // Subject:\r\n                ret.Add(\"Subject: \" + (subject ?? \"No Subject\"));\r\n                \r\n                // To: // Only add the To: field from the <to> parameter if isn't in the custom headers:\r\n                if (!headerHashtable.ContainsKey(\"to\") && !string.IsNullOrEmpty(to))\r\n                    ret.Add(\"To: \" + to);\r\n\r\n                // add headers, ignore duplicities (only accept the last occurance):\r\n                foreach (var headerIndex in headerHashtable.Values)\r\n                {\r\n                    var header = headerList[headerIndex];\r\n                    ret.Add(string.Format(\"{0}: {1}\", header.Key, header.Value));\r\n                }\r\n\r\n                ret.Add(\"\");\r\n\r\n                // parse the <body> into lines:\r\n                StringReader bodyReader = new StringReader(body);\r\n\r\n                while (bodyReader.Peek() != -1)\r\n                    ret.Add(bodyReader.ReadLine());\r\n\r\n                return ret;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Cut out the address if contained within &lt;...&gt; characters. Otherwise take the whole <paramref name=\"address\"/> string.\r\n            /// The address is transformed using given <paramref name=\"formatString\"/> format.\r\n            /// </summary>\r\n            /// <param name=\"address\">Given mail address.</param>\r\n            /// <param name=\"formatString\">Format to be used for <see cref=\"String.Format\"/> method.</param>\r\n            /// <returns>Formatted email address.</returns>\r\n            private static string FormatEmailAddress(string/*!*/address, string/*!*/formatString)\r\n            {\r\n                Debug.Assert(address != null, \"address == null\");\r\n                Debug.Assert(formatString != null, \"formatString == null\");\r\n\r\n                int a, b;\r\n                if ((a = address.IndexOf('<')) >= 0 && (b = address.IndexOf('>', a)) >= 0)\r\n                    address = address.Substring(a + 1, b - a - 1);\r\n\r\n                return string.Format(formatString, address.Trim());\r\n            }\r\n\r\n            #region Post, Ack\r\n\r\n            /// <summary>\r\n            /// Writes <paramref name=\"line\"/>, appends <c>CRLF</c> and flushes internal writer.\r\n            /// </summary>\r\n            /// <param name=\"line\"><see cref=\"String\"/> to be written onto the internal writer.</param>\r\n            private void Post(string line)\r\n            {\r\n                this._writer.WriteLine(line);\r\n                this._writer.Flush();\r\n            }\r\n\r\n            private bool Ack(string expected1)\r\n            {\r\n                return Ack(expected1, null,\r\n                    (line) => ThrowExpectedResponseHelper(line, expected1));\r\n            }\r\n\r\n            private bool Ack(string expected1, string expected2)\r\n            {\r\n                return Ack(expected1, expected2,\r\n                    (line) => ThrowExpectedResponseHelper(line, string.Format(\"{0} or {1}\", expected1, expected2)));\r\n            }\r\n\r\n            private void ThrowExpectedResponseHelper(string givenResponse, string expectedStr)\r\n            {\r\n                Reset();\r\n                throw new SmtpException(string.Format(\"Expected response {0}, '{1}' given.\", expectedStr, givenResponse));\r\n            }\r\n            \r\n            private bool Ack(string expected1, string expected2, Action<string>/*!*/fail)\r\n            {\r\n                Debug.Assert(fail != null);\r\n\r\n                var line = _reader.ReadLine();\r\n\r\n                if (expected1 != null && line.StartsWith(expected1, StringComparison.Ordinal))\r\n                    return true; // ok\r\n\r\n                if (expected2 != null && line.StartsWith(expected2, StringComparison.Ordinal))\r\n                    return true; // ok\r\n\r\n                fail(line);\r\n                return false;\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Send <c>RCPT TO</c> commands.\r\n            /// </summary>\r\n            /// <param name=\"recipients\">List of recipients comma-separated.</param>\r\n            private void PostRcptTo(string recipients)\r\n            {\r\n                if (!string.IsNullOrEmpty(recipients))\r\n                    foreach (var rcpt in recipients.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))\r\n                    {\r\n                        if (rcpt.StartsWith(\"undisclosed-recipients:\", StringComparison.Ordinal))\r\n                            continue;   // this should be specified in To: header, it is not intended for the SMTP server within RCPT TO command\r\n\r\n                        Post(FormatEmailAddress(rcpt, \"RCPT TO:<{0}>\"));\r\n                        Ack(\"250\", \"251\");\r\n                    }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Sends the raw message.\r\n            /// </summary>\r\n            /// <remarks>On eny error an exception is thrown.</remarks>\r\n            /// <exception cref=\"SmtpException\">When any error occures during the mail send.</exception>\r\n            public void SendMessage(string from, string to, string subject, string headers, string body)\r\n            {\r\n                //\r\n                // see http://email.about.com/cs/standards/a/smtp_error_code_2.htm for response codes.\r\n                //\r\n\r\n                if (!_connected)\r\n                    throw new SmtpException(\"NOT CONNECTED\");\r\n                \r\n                // start mail transaction and\r\n                // process headers (may contain additional recipients and from address)\r\n                // and prepare data that is broken up to form data lines.\r\n                // Note ProcessMessageData may add additional recipients, so it must be called before \"DATA\" section.\r\n                var dataLines = ProcessMessageHeaders(from, to, subject, headers, body);\r\n\r\n                // send DATA\r\n                Post(\"DATA\");\r\n                Ack(\"354\");\r\n                \r\n                foreach (string dataLine in dataLines)\r\n                {\r\n                    // PHP implementation uses 991 line length limit (including CRLF)\r\n                    const int maxLineLength = 989;\r\n                    int lineStart = 0;\r\n                    int correction = 0;\r\n\r\n                    // if SP character is on the first place, we need to duplicate it\r\n                    if (dataLine.Length > 0 && dataLine[0] == '.')\r\n                        _writer.Write('.');\r\n                    \r\n                    // according to MIME, the lines must not be longer than 998 characters (1000 including CRLF)\r\n                    // so we need to break such lines using folding\r\n                    while (dataLine.Length - lineStart > maxLineLength - correction)\r\n                    {\r\n                        //break the line, inserting FWS sequence\r\n                        _writer.WriteLine(dataLine.Substring(lineStart, maxLineLength - correction));\r\n                        _writer.Write(' ');\r\n                        lineStart += maxLineLength - correction;\r\n\r\n                        //make correction (whitespace on the next line)\r\n                        correction += 1;\r\n                    }\r\n\r\n                    //output the rest of the line\r\n                    _writer.WriteLine(dataLine.Substring(lineStart));\r\n\r\n                    // flush the stream\r\n                    _writer.Flush();\r\n                }\r\n\r\n                _writer.WriteLine(\".\");\r\n\r\n                // flush the stream\r\n                _writer.Flush();\r\n\r\n                Ack(\"250\");\r\n\r\n                //return true; // ok\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Math.cs",
    "content": "/*\n\n Copyright (c) 2004-2006 Jan Benda and Tomas Matousek.  \n\n The use and distribution terms for this software are contained in the file named License.txt, \n which can be found in the root of the Phalanger distribution. By using this software \n in any fashion, you are agreeing to be bound by the terms of this license.\n \n You must not remove this notice from this software.\n\n*/\nusing System;\nusing System.Text;\nusing System.Collections;\nusing System.ComponentModel;\n\nusing PHP.Core;\n\n#if SILVERLIGHT\nusing PHP.CoreCLR;\nusing MathEx = PHP.CoreCLR.MathEx;\n#else\nusing MathEx = System.Math;\r\nusing System.Diagnostics;\n#endif\n\nnamespace PHP.Library\n{\n\t/// <summary>\n\t/// Implements PHP mathematical functions and constants.\n\t/// </summary>\n\t/// <threadsafety static=\"true\"/>\n\tpublic static class PhpMath\n\t{\n\t\t#region Per-request Random Number Generators\n\n\t\t/// <summary>\n\t\t/// Gets an initialized random number generator associated with the current thread.\n\t\t/// </summary>\n\t\tinternal static Random Generator\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_generator == null)\n\t\t\t\t\t_generator = new Random(unchecked((int)DateTime.UtcNow.ToFileTime()));\n\t\t\t\treturn _generator;\n\t\t\t}\n\t\t}\n#if !SILVERLIGHT\n\t\t[ThreadStatic]\n#endif\n\t\tprivate static Random _generator;\n\n\t\t/// <summary>\n\t\t/// Gets an initialized Mersenne Twister random number generator associated with the current thread.\n\t\t/// </summary>\n\t\tinternal static MersenneTwister MTGenerator\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_mtGenerator == null)\n\t\t\t\t\t_mtGenerator = new MersenneTwister(unchecked((uint)DateTime.UtcNow.ToFileTime()));\n\t\t\t\treturn _mtGenerator;\n\t\t\t}\n\t\t}\n#if !SILVERLIGHT\n\t\t[ThreadStatic]\n#endif\n\t\tprivate static MersenneTwister _mtGenerator;\n\n\t\t/// <summary>\n\t\t/// Registers <see cref=\"ClearGenerators\"/> routine to be called on request end.\n\t\t/// </summary>\n\t\tstatic PhpMath()\n\t\t{\n            RequestContext.RequestEnd += new Action(ClearGenerators);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Nulls <see cref=\"_generator\"/> and <see cref=\"_mtGenerator\"/> fields on request end.\n\t\t/// </summary>\n\t\tprivate static void ClearGenerators()\n\t\t{\n\t\t\t_generator = null;\r\n            _mtGenerator = null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Constants\n\n\t\t[ImplementsConstant(\"M_PI\")]\n\t\tpublic const double Pi = System.Math.PI;\n\t\t[ImplementsConstant(\"M_E\")]\n\t\tpublic const double E = System.Math.E;\n\t\t[ImplementsConstant(\"M_LOG2E\")]\n\t\tpublic const double Log2e = 1.4426950408889634074;\n\t\t[ImplementsConstant(\"M_LOG10E\")]\n\t\tpublic const double Log10e = 0.43429448190325182765;\n\t\t[ImplementsConstant(\"M_LN2\")]\n\t\tpublic const double Ln2 = 0.69314718055994530942;\n\t\t[ImplementsConstant(\"M_LN10\")]\n\t\tpublic const double Ln10 = 2.30258509299404568402;\n\t\t[ImplementsConstant(\"M_PI_2\")]\n\t\tpublic const double PiHalf = 1.57079632679489661923;\n\t\t[ImplementsConstant(\"M_PI_4\")]\n\t\tpublic const double PiFourth = 0.78539816339744830962;\n\t\t[ImplementsConstant(\"M_1_PI\")]\n\t\tpublic const double Pith = 0.31830988618379067154;\n\t\t[ImplementsConstant(\"M_2_PI\")]\n\t\tpublic const double TwoPiths = 0.63661977236758134308;\n\t\t[ImplementsConstant(\"M_SQRTPI\")]\n\t\tpublic const double SqrtPi = 1.77245385090551602729;\n\t\t[ImplementsConstant(\"M_2_SQRTPI\")]\n\t\tpublic const double TwoSqrtPi = 1.12837916709551257390;\n\t\t[ImplementsConstant(\"M_SQRT3\")]\n\t\tpublic const double Sqrt3 = 1.73205080756887729352;\n\t\t[ImplementsConstant(\"M_SQRT1_2\")]\n\t\tpublic const double SqrtHalf = 0.70710678118654752440;\n\t\t[ImplementsConstant(\"M_LNPI\")]\n\t\tpublic const double LnPi = 1.14472988584940017414;\n\t\t[ImplementsConstant(\"M_EULER\")]\n\t\tpublic const double Euler = 0.57721566490153286061;\n\t\t[ImplementsConstant(\"NAN\")]\n\t\tpublic const double NaN = Double.NaN;\n\t\t[ImplementsConstant(\"INF\")]\n\t\tpublic const double Infinity = Double.PositiveInfinity;\n\n\t\t#endregion\n\n\t\t#region Absolutize Range\n\n\t\t/// <summary>\n\t\t/// Absolutizes range specified by an offset and a length relatively to a dimension of an array.\n\t\t/// </summary>\n\t\t/// <param name=\"count\">The number of items in array. Should be non-negative.</param>\n\t\t/// <param name=\"offset\">\n\t\t/// The offset of the range relative to the beginning (if non-negative) or the end of the array (if negative).\n\t\t/// If the offset underflows or overflows the length is shortened appropriately.\n\t\t/// </param>\n\t\t/// <param name=\"length\">\n\t\t/// The length of the range if non-negative. Otherwise, its absolute value is the number of items\n\t\t/// which will not be included in the range from the end of the array. In the latter case \n\t\t/// the range ends with the |<paramref name=\"length\"/>|-th item from the end of the array (counting from zero).\n\t\t/// </param>\n\t\t/// <remarks>\n\t\t/// Ensures that <c>[offset,offset + length]</c> is subrange of <c>[0,count]</c>.\n\t\t/// </remarks>\n\t\tpublic static void AbsolutizeRange(ref int offset, ref int length, int count)\n\t\t{\n\t\t\tDebug.Assert(count >= 0);\n\n\t\t\t// prevents overflows:\n\t\t\tif (offset >= count || count == 0)\n\t\t\t{\n\t\t\t\toffset = count;\n\t\t\t\tlength = 0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// negative offset => offset is relative to the end of the string:\n\t\t\tif (offset < 0)\n\t\t\t{\n\t\t\t\toffset += count;\n\t\t\t\tif (offset < 0) offset = 0;\n\t\t\t}\n\n\t\t\tDebug.Assert(offset >= 0 && offset < count);\n\n\t\t\tif (length < 0)\n\t\t\t{\n\t\t\t\t// there is count-offset items from offset to the end of array,\n\t\t\t\t// the last |length| items is taken away:\n\t\t\t\tlength = count - offset + length;\n\t\t\t\tif (length < 0) length = 0;\n\t\t\t}\n\t\t\telse if ((long)offset + length > count)\n\t\t\t{\n\t\t\t\t// interval ends on the end of array:\n\t\t\t\tlength = count - offset;\n\t\t\t}\n\n\t\t\tDebug.Assert(length >= 0 && offset + length <= count);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region rand, srand, getrandmax, uniqid, lcg_value\n\n        /// <summary>\r\n        /// Gets <c>0</c> or <c>1</c> randomly.\r\n        /// </summary>\r\n        static int Random01()\r\n        {\r\n            return (int)Math.Round(Generator.NextDouble());\r\n        }\n\n        /// <summary>\n        /// Seed the random number generator. No return value.\n        /// </summary>\n        [ImplementsFunction(\"srand\")]\n        public static void Seed()\n        {\n            _generator = new Random();\n        }\n\n        /// <summary>\n        /// Seed the random number generator. No return value.\n        /// </summary>\n        /// <param name=\"seed\">Optional seed value.</param>\n\t\t[ImplementsFunction(\"srand\")]\n\t\tpublic static void Seed(int seed)\n\t\t{\n\t\t\t_generator = new Random(seed);\n\t\t}\n\n        /// <summary>\n        /// Show largest possible random value.\n        /// </summary>\n        /// <returns>The largest possible random value returned by rand().</returns>\n\t\t[ImplementsFunction(\"getrandmax\")]\n\t\tpublic static int GetMaxRandomValue()\n\t\t{\n\t\t\treturn Int32.MaxValue;\n\t\t}\n\n        /// <summary>\n        /// Generate a random integer.\n        /// </summary>\n        /// <returns>A pseudo random value between 0 and getrandmax(), inclusive.</returns>\n\t\t[ImplementsFunction(\"rand\")]\n\t\tpublic static int Random()\n\t\t{\r\n            return Generator.Next() + Random01();\n\t\t}\n\n        /// <summary>\n        /// Generate a random integer.\n        /// </summary>\n        /// <param name=\"min\">The lowest value to return.</param>\n        /// <param name=\"max\">The highest value to return.</param>\n        /// <returns>A pseudo random value between min and max, inclusive. </returns>\n\t\t[ImplementsFunction(\"rand\")]\n\t\tpublic static int Random(int min, int max)\n\t\t{\n            if (min > max)\r\n                return Random(max, min);\r\n\r\n            if (min == max)\n                return min;\n\n            if (max == int.MaxValue)\r\n                return Generator.Next(min, int.MaxValue) + Random01();\r\n            \n            return Generator.Next(min, max + 1);\n\t\t}\n\n        /// <summary>\n        /// Generate a unique ID.\n        /// Gets a prefixed unique identifier based on the current time in microseconds. \n        /// </summary>\n        /// <returns>Returns the unique identifier, as a string.</returns>\n\t\t[ImplementsFunction(\"uniqid\")]\n\t\tpublic static string UniqueId()\n\t\t{\n\t\t\treturn UniqueId(null, false);\n\t\t}\n\n        /// <summary>\n        /// Generate a unique ID.\n        /// Gets a prefixed unique identifier based on the current time in microseconds. \n        /// </summary>\n        /// <param name=\"prefix\">Can be useful, for instance, if you generate identifiers simultaneously on several hosts that might happen to generate the identifier at the same microsecond.\n        /// With an empty prefix , the returned string will be 13 characters long.\n        /// </param>\n        /// <returns>Returns the unique identifier, as a string.</returns>\n\t\t[ImplementsFunction(\"uniqid\")]\n\t\tpublic static string UniqueId(string prefix)\n\t\t{\n\t\t\treturn UniqueId(prefix, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generate a unique ID.\n\t\t/// </summary>\n\t\t/// <remarks>\n        /// With an empty prefix, the returned string will be 13 characters long. If more_entropy is TRUE, it will be 23 characters.\n\t\t/// </remarks>\n\t\t/// <param name=\"prefix\">Use the specified prefix.</param>\n\t\t/// <param name=\"more_entropy\">Use LCG to generate a random postfix.</param>\n\t\t/// <returns>A pseudo-random string composed from the given prefix, current time and a random postfix.</returns>\n\t\t[ImplementsFunction(\"uniqid\")]\n\t\tpublic static string UniqueId(string prefix, bool more_entropy)\n\t\t{\n\t\t\t// Note that Ticks specify time in 100nanoseconds but it is raised each 100144 \n\t\t\t// ticks which is around 10 times a second (the same for Milliseconds).\n\t\t\tstring ticks = String.Format(\"{0:X}\", DateTime.Now.Ticks + Generator.Next());\n\n\t\t\tticks = ticks.Substring(ticks.Length - 13);\n\t\t\tif (prefix == null) prefix = \"\";\n\t\t\tif (more_entropy)\n\t\t\t{\n\t\t\t\tstring rnd = LcgValue().ToString();\n\t\t\t\trnd = rnd.Substring(2, 8);\n\t\t\t\treturn String.Format(\"{0}{1}.{2}\", prefix, ticks, rnd);\n\t\t\t}\n\t\t\telse return String.Format(\"{0}{1}\", prefix, ticks);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a pseudo-random number using linear congruential generator in the range of (0,1).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method uses the Framwork <see cref=\"Random\"/> generator\n\t\t/// which may or may not be the same generator as the PHP one (L(CG(2^31 - 85),CG(2^31 - 249))).\n\t\t/// </remarks>\n\t\t/// <returns></returns>\n\t\t[ImplementsFunction(\"lcg_value\")]\n\t\tpublic static double LcgValue()\n\t\t{\n\t\t\treturn Generator.NextDouble();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region mt_getrandmax, mt_rand, mt_srand\n\n\t\t[ImplementsFunction(\"mt_getrandmax\")]\n\t\tpublic static int MtGetMaxRandomValue()\n\t\t{\n\t\t\treturn Int32.MaxValue;\n\t\t}\n\n\t\t[ImplementsFunction(\"mt_rand\")]\n\t\tpublic static int MtRandom()\n\t\t{\n\t\t\treturn MTGenerator.Next();\n\t\t}\n\n\t\t[ImplementsFunction(\"mt_rand\")]\n\t\tpublic static int MtRandom(int min, int max)\n\t\t{\n\t\t\treturn (min < max) ? MTGenerator.Next(min, max) : MTGenerator.Next(max, min);\n\t\t}\n\n        /// <summary>\n        /// Seed the better random number generator.\n        /// No return value.\n        /// </summary>\n        [ImplementsFunction(\"mt_srand\")]\n        public static void MtSeed()\n        {\n            MtSeed(Generator.Next());\n        }\n\n        /// <summary>\n        /// Seed the better random number generator.\n        /// No return value.\n        /// </summary>\n        /// <param name=\"seed\">Optional seed value.</param>\n\t\t[ImplementsFunction(\"mt_srand\")]\n\t\tpublic static void MtSeed(int seed)\n\t\t{\n\t\t\tMTGenerator.Seed(unchecked((uint)seed));\n\t\t}\n\n\t\t#endregion\n\n\t\t#region is_nan,is_finite,is_infinite\n\n\t\t[ImplementsFunction(\"is_nan\")]\n\t\t[PureFunction]\n        public static bool IsNaN(double x)\n\t\t{\n\t\t\treturn Double.IsNaN(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"is_finite\")]\n        [PureFunction]\n        public static bool IsFinite(double x)\n\t\t{\n\t\t\treturn !Double.IsInfinity(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"is_infinite\")]\n        [PureFunction]\n        public static bool IsInfinite(double x)\n\t\t{\n\t\t\treturn Double.IsInfinity(x);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region decbin, bindec, decoct, octdec, dechex, hexdec, base_convert\n\n\t\t/// <summary>\n\t\t/// Converts the given number to int (if the number is whole\n\t\t/// and fits into the int's range).\n\t\t/// </summary>\n\t\t/// <param name=\"number\"></param>\n\t\t/// <returns><c>int</c> representation of number if possible, otherwise a <c>double</c> representation.</returns>\n\t\tprivate static object ConvertToInt(double number)\n\t\t{\n\t\t\tif ((Math.Round(number) == number) && (number <= int.MaxValue) && (number >= int.MinValue))\n\t\t\t{\n\t\t\t\treturn (int)number;\n\t\t\t}\n\t\t\treturn number;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts the lowest 32 bits of the given number to a binary string.\n\t\t/// </summary>\n\t\t/// <param name=\"number\"></param>\n\t\t/// <returns></returns>\n\t\t[ImplementsFunction(\"decbin\")]\n\t\tpublic static PhpBytes DecToBin(double number)\n\t\t{\n\t\t\t// Trim the number to the lower 32 binary digits.\n\t\t\tuint temp = unchecked((uint)number);\n\t\t\treturn DoubleToBase(temp, 2);\n\t\t}\n\n        /// <summary>\n        /// Converts the lowest 32 bits of the given number to a binary string.\n        /// </summary>\n        /// <param name=\"number\"></param>\n        /// <returns></returns>\n        [ImplementsFunction(\"decbin_unicode\")]\n        public static string DecToBinUnicode(double number)\n        {\n            // Trim the number to the lower 32 binary digits.\n            uint temp = unchecked((uint)number);\n            return DoubleToBaseUnicode(temp, 2);\n        }\n\n        /// <summary>\n        /// Returns the decimal equivalent of the binary number represented by the binary_string argument.\n        /// bindec() converts a binary number to an integer or, if needed for size reasons, double.\n        /// </summary>\n        /// <param name=\"str\">The binary string to convert.</param>\n        /// <returns>The decimal value of <paramref name=\"str\"/>.</returns>\n\t\t[ImplementsFunction(\"bindec\")]\n\t\tpublic static object BinToDec(PhpBytes str)\n\t\t{\n\t\t\tif (str == null) return 0;\n\t\t\treturn ConvertToInt(BaseToDouble(str, 2));\n\t\t}\n\n\n        [ImplementsFunction(\"bindec_unicode\")]\n        public static object BinToDecUnicode(string str)\n        {\n            if (str == null) return 0;\n            return ConvertToInt(BaseToDoubleUnicode(str, 2));\n        }\n\n        /// <summary>\n        /// Returns a string containing an octal representation of the given number argument.\n        /// </summary>\n        /// <param name=\"number\">Decimal value to convert.</param>\n        /// <returns>Octal string representation of <paramref name=\"number\"/>.</returns>\n        [ImplementsFunction(\"decoct\")]\n        public static PhpBytes DecToOct(int number)\n        {\n            return new PhpBytes(System.Convert.ToString(number, 8));\n        }\n\n\t\t[ImplementsFunction(\"decoct_unicode\")]\n\t\tpublic static string DecToOctUnicode(int number)\n\t\t{\n\t\t\treturn System.Convert.ToString(number, 8);\n\t\t}\n\n        /// <summary>\n        /// Returns the decimal equivalent of the octal number represented by the <paramref name=\"str\"/> argument.\n        /// </summary>\n        /// <param name=\"str\">The octal string to convert.</param>\n        /// <returns>The decimal representation of <paramref name=\"str\"/>.</returns>\n        [ImplementsFunction(\"octdec\")]\n        public static object OctToDec(PhpBytes str)\n        {\n            if (str == null) return 0;\n            return ConvertToInt(BaseToDouble(str, 8));\n        }\n\n\t\t[ImplementsFunction(\"octdec_unicode\")]\n\t\tpublic static object OctToDecUnicode(string str)\n\t\t{\n\t\t\tif (str == null) return 0;\n\t\t\treturn ConvertToInt(BaseToDoubleUnicode(str, 8));\n\t\t}\n\n        /// <summary>\n        /// Returns a string containing a hexadecimal representation of the given number argument.\n        /// </summary>\n        /// <param name=\"number\">Decimal value to convert.</param>\n        /// <returns>Hexadecimal string representation of <paramref name=\"number\"/>.</returns>\n\t\t[ImplementsFunction(\"dechex\")]\n\t\tpublic static PhpBytes DecToHex(int number)\n\t\t{\n\t\t\treturn new PhpBytes(System.Convert.ToString(number, 16));\n\t\t}\n\n        [ImplementsFunction(\"dechex_unicode\")]\n        public static string DecToHexUnicode(int number)\n        {\n            return System.Convert.ToString(number, 16);\n        }\n\n        /// <summary>\n        /// Hexadecimal to decimal.\n        /// Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument. hexdec() converts a hexadecimal string to a decimal number.\n        /// hexdec() will ignore any non-hexadecimal characters it encounters.\n        /// </summary>\n        /// <param name=\"str\">The hexadecimal string to convert.</param>\n        /// <returns>The decimal representation of <paramref name=\"str\"/>.</returns>\n        [ImplementsFunction(\"hexdec\")]\n        public static object HexToDec(PhpBytes str)\n        {\n            if (str == null) return 0;\n            return ConvertToInt(BaseToDouble(str, 16));\n        }\n\n\t\t[ImplementsFunction(\"hexdec_unicode\")]\n\t\tpublic static object HexToDecUnicode(string str)\n\t\t{\n\t\t\tif (str == null) return 0;\n\t\t\treturn ConvertToInt(BaseToDoubleUnicode(str, 16));\n\t\t}\n\n        public static double BaseToDouble(PhpBytes number, int fromBase)\n        {\n            if (number == null)\n            {\n                PhpException.ArgumentNull(\"number\");\n                return 0.0;\n            }\n\n            if (fromBase < 2 || fromBase > 36)\n            {\n                PhpException.InvalidArgument(\"toBase\", LibResources.GetString(\"arg:out_of_bounds\"));\n                return 0.0;\n            }\n\n            double fnum = 0;\n            for (int i = 0; i < number.Length; i++)\n            {\r\n                int digit = Core.Parsers.Convert.AlphaNumericToDigit((char)number.ReadonlyData[i]);\n                if (digit < fromBase)\n                    fnum = fnum * fromBase + digit;\n            }\n\n            return fnum;\n        }\n\n\n\t\tpublic static double BaseToDoubleUnicode(string number, int fromBase)\n\t\t{\n\t\t\tif (number == null)\n\t\t\t{\n\t\t\t\tPhpException.ArgumentNull(\"number\");\n\t\t\t\treturn 0.0;\n\t\t\t}\n\n\t\t\tif (fromBase < 2 || fromBase > 36)\n\t\t\t{\n\t\t\t\tPhpException.InvalidArgument(\"toBase\", LibResources.GetString(\"arg:out_of_bounds\"));\n\t\t\t\treturn 0.0;\n\t\t\t}\n\n\t\t\tdouble fnum = 0;\n\t\t\tfor (int i = 0; i < number.Length; i++)\n\t\t\t{\r\n                int digit = Core.Parsers.Convert.AlphaNumericToDigit(number[i]);\n\t\t\t\tif (digit < fromBase)\n\t\t\t\t\tfnum = fnum * fromBase + digit;\n\t\t\t}\n\n\t\t\treturn fnum;\n\t\t}\n\n        private const string digitsUnicode = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n        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',\n            (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',\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' };\n     \n        public static PhpBytes DoubleToBase(double number, int toBase)\n        {\n            if (toBase < 2 || toBase > 36)\n            {\n                PhpException.InvalidArgument(\"toBase\", LibResources.GetString(\"arg:out_of_bounds\"));\n                return PhpBytes.Empty;\n            }\n\n            // Don't try to convert infinity or NaN:\n            if (Double.IsInfinity(number) || Double.IsNaN(number))\n            {\n                PhpException.InvalidArgument(\"number\", LibResources.GetString(\"arg:out_of_bounds\"));\n                return PhpBytes.Empty;\n            }\n\n            double fvalue = Math.Floor(number); /* floor it just in case */\n            if (Math.Abs(fvalue) < 1) return new PhpBytes(new byte[]{(byte)'0'});\n\n            System.Collections.Generic.List<byte> sb = new System.Collections.Generic.List<byte>();\n            while (Math.Abs(fvalue) >= 1)\n            {\n                double mod = Fmod(fvalue, toBase);\n                int i = (int)mod;\n                byte b = digits[i];\n                //sb.Append(digits[(int) fmod(fvalue, toBase)]);\n                sb.Add(b);\n                fvalue /= toBase;\n            }\n\n            sb.Reverse();\n\n            return new PhpBytes(sb.ToArray());\n        }\n\n\t\tpublic static string DoubleToBaseUnicode(double number, int toBase)\n\t\t{\n\t\t\tif (toBase < 2 || toBase > 36)\n\t\t\t{\n\t\t\t\tPhpException.InvalidArgument(\"toBase\", LibResources.GetString(\"arg:out_of_bounds\"));\n\t\t\t\treturn String.Empty;\n\t\t\t}\n\n\t\t\t// Don't try to convert infinity or NaN:\n\t\t\tif (Double.IsInfinity(number) || Double.IsNaN(number))\n\t\t\t{\n\t\t\t\tPhpException.InvalidArgument(\"number\", LibResources.GetString(\"arg:out_of_bounds\"));\n\t\t\t\treturn String.Empty;\n\t\t\t}\n\n\t\t\tdouble fvalue = Math.Floor(number); /* floor it just in case */\n\t\t\tif (Math.Abs(fvalue) < 1) return \"0\";\n\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\twhile (Math.Abs(fvalue) >= 1)\n\t\t\t{\n\t\t\t\tdouble mod = Fmod(fvalue, toBase);\n\t\t\t\tint i = (int)mod;\n\t\t\t\tchar c = digitsUnicode[i];\n\t\t\t\t//sb.Append(digits[(int) fmod(fvalue, toBase)]);\n\t\t\t\tsb.Append(c);\n\t\t\t\tfvalue /= toBase;\n\t\t\t}\n\n\t\t\treturn PhpStrings.Reverse(sb.ToString());\n\t\t}\n\n        /// <summary>\n        /// Convert a number between arbitrary bases.\n        /// Returns a string containing number represented in base tobase. The base in which number is given is specified in <paramref name=\"fromBase\"/>. Both <paramref name=\"fromBase\"/> and <paramref name=\"toBase\"/> 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.\n        /// </summary>\n        /// <param name=\"number\">The number to convert</param>\n        /// <param name=\"fromBase\">The base <paramref name=\"number\"/> is in.</param>\n        /// <param name=\"toBase\">The base to convert <paramref name=\"number\"/> to</param>\n        /// <returns><paramref name=\"number\"/> converted to base <paramref name=\"toBase\"/>.</returns>\n\t\t[ImplementsFunction(\"base_convert\")]\n\t\t[return: CastToFalse]\n\t\tpublic static string BaseConvert(string number, int fromBase, int toBase)\n\t\t{\n\t\t\tdouble value;\n\t\t\tif (number == null) return \"0\";\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvalue = BaseToDoubleUnicode(number, fromBase);\n\t\t\t}\n\t\t\tcatch (ArgumentException)\n\t\t\t{\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:invalid_value\", \"fromBase\", fromBase));\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\treturn DoubleToBaseUnicode(value, toBase);\n\t\t\t}\n\t\t\tcatch (ArgumentException)\n\t\t\t{\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:invalid_value\", \"toBase\", toBase));\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region deg2rad, pi, cos, sin, tan, acos, asin, atan, atan2\n\n\t\t/// <summary>\n\t\t/// Degrees to radians.\n\t\t/// </summary>\n\t\t/// <param name=\"degrees\"></param>\n\t\t/// <returns></returns>\n\t\t[ImplementsFunction(\"deg2rad\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n\t\tpublic static double DegreesToRadians(double degrees)\n\t\t{\n\t\t\treturn degrees / 180 * Math.PI;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Radians to degrees.\n\t\t/// </summary>\n\t\t/// <param name=\"radians\"></param>\n\t\t/// <returns></returns>\n\t\t[ImplementsFunction(\"rad2deg\")]\n        [PureFunction]\n        public static double RadiansToDegrees(double radians)\n\t\t{\n\t\t\treturn radians / Math.PI * 180;\n\t\t}\n\n        /// <summary>\n        /// Returns an approximation of pi.\n        /// </summary>\n        /// <returns>The value of pi as <c>double</c>.</returns>\n\t\t[ImplementsFunction(\"pi\")]\n        [PureFunction]\n        public static double PI()\n\t\t{\n\t\t\treturn Math.PI;\n\t\t}\n\n        /// <summary>\n        /// Returns the arc cosine of arg in radians.\n        /// acos() is the complementary function of cos(), which means that <paramref name=\"x\"/>==cos(acos(<paramref name=\"x\"/>)) for every value of a that is within acos()' range.\n        /// </summary>\n        /// <param name=\"x\">The argument to process.</param>\n        /// <returns>The arc cosine of <paramref name=\"x\"/> in radians.</returns>\n\t\t[ImplementsFunction(\"acos\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Acos(double x)\n\t\t{\n\t\t\treturn Math.Acos(x);\n\t\t}\n\n        /// <summary>\n        /// Returns the arc sine of arg in radians. asin() is the complementary function of sin(), which means that <paramref name=\"x\"/>==sin(asin(<paramref name=\"x\"/>)) for every value of a that is within asin()'s range.\n        /// </summary>\n        /// <param name=\"x\">The argument to process.</param>\n        /// <returns>The arc sine of <paramref name=\"x\"/> in radians.</returns>\n\t\t[ImplementsFunction(\"asin\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Asin(double x)\n\t\t{\n\t\t\treturn Math.Asin(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"atan\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Atan(double x)\n\t\t{\n\t\t\treturn Math.Atan(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"atan2\")]\n        [PureFunction]\n        public static double Atan2(double y, double x)\n\t\t{\n\t\t\tdouble rv = Math.Atan(y / x);\n\t\t\tif (x < 0)\n\t\t\t{\n\t\t\t\treturn ((rv > 0) ? -Math.PI : Math.PI) + rv;\n\t\t\t}\n\t\t\telse return rv;\n\t\t}\n\n\t\t[ImplementsFunction(\"cos\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Cos(double x)\n\t\t{\n\t\t\treturn Math.Cos(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"sin\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Sin(double x)\n\t\t{\n\t\t\treturn Math.Sin(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"tan\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Tan(double x)\n\t\t{\n\t\t\treturn Math.Tan(x);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region cosh, sinh, tanh, acosh, asinh, atanh\n\n\t\t[ImplementsFunction(\"cosh\")]\n        [PureFunction]\n        public static double Cosh(double x)\n\t\t{\n\t\t\treturn Math.Cosh(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"sinh\")]\n        [PureFunction]\n        public static double Sinh(double x)\n\t\t{\n\t\t\treturn Math.Sinh(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"tanh\")]\n        [PureFunction]\n        public static double Tanh(double x)\n\t\t{\n\t\t\treturn Math.Tanh(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"acosh\")]\n        [PureFunction]\n        public static double Acosh(double x)\n\t\t{\n\t\t\treturn Math.Log(x + Math.Sqrt(x * x - 1));\n\t\t}\n\n\t\t[ImplementsFunction(\"asinh\")]\n        [PureFunction]\n        public static double Asinh(double x)\n\t\t{\n\t\t\treturn Math.Log(x + Math.Sqrt(x * x + 1));\n\t\t}\n\n\t\t[ImplementsFunction(\"atanh\")]\n        [PureFunction]\n        public static double Atanh(double x)\n\t\t{\n\t\t\treturn Math.Log((1 + x) / (1 - x)) / 2;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region exp, expm1, log, log10, log1p, pow, sqrt, hypot\n\n        /// <summary>\n        /// Returns <c>e</c> raised to the power of <paramref name=\"x\"/>.\n        /// </summary>\n        [ImplementsFunction(\"exp\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Exp(double x)\n\t\t{\n\t\t\treturn Math.Exp(x);\n\t\t}\n\n\t\t/// <summary>\n        /// expm1() returns the equivalent to 'exp(arg) - 1' computed in a way that is accurate even\n        /// if the value of arg is near zero, a case where 'exp (arg) - 1' would be inaccurate due to\n        /// subtraction of two numbers that are nearly equal. \n\t\t/// </summary>\n        /// <param name=\"x\">The argument to process </param>\n\t\t[ImplementsFunction(\"expm1\")]\n        [PureFunction]\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static double ExpM1(double x)\n\t\t{\n            return Math.Exp(x) - 1.0;   // TODO: implement exp(x)-1 for x near to zero\n\t\t}\n\n        /// <summary>\n        /// Returns the base-10 logarithm of <paramref name=\"x\"/>.\n        /// </summary>\n        [ImplementsFunction(\"log10\")]\n        [PureFunction]\n        public static double Log10(double x)\n\t\t{\n\t\t\treturn Math.Log10(x);\n\t\t}\n\n        [ImplementsFunction(\"log\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Log(double x)\n\t\t{\n\t\t\treturn Math.Log(x);\n\t\t}\n\n        /// <summary>\n        /// If the optional <paramref name=\"logBase\"/> parameter is specified, log() returns log(<paramref name=\"logBase\"/>) <paramref name=\"x\"/>, otherwise log() returns the natural logarithm of <paramref name=\"x\"/>.\n        /// </summary>\n        [ImplementsFunction(\"log\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Log(double x, double logBase)\n\t\t{\n\t\t\treturn MathEx.Log(x, logBase);\n\t\t}\n\n        /// <summary>\n        /// log1p() returns log(1 + number) computed in a way that is accurate even when the value\n        /// of number is close to zero. log()  might only return log(1) in this case due to lack of precision. \n        /// </summary>\n        /// <param name=\"x\">The argument to process </param>\n        /// <returns></returns>\n\t\t[ImplementsFunction(\"log1p\")]\n        [PureFunction]\n        [EditorBrowsable(EditorBrowsableState.Never)]\n\t\tpublic static double Log1P(double x)\n\t\t{\n            return Math.Log(x + 1.0);   // TODO: implement log(x+1) for x near to zero\n\t\t}\n\n        /// <summary>\n        /// Returns <paramref name=\"base\"/> raised to the power of <paramref name=\"exp\"/>.\n        /// </summary>\n\t\t[ImplementsFunction(\"pow\")]\n        [PureFunction]\n        public static object Power(object @base, object exp)\n\t\t{\n\t\t\tdouble dbase, dexp;\n\t\t\tint ibase, iexp;\n\t\t\tlong lbase, lexp;\n\t\t\tCore.Convert.NumberInfo info_base, info_exp;\n\n\t\t\tinfo_base = Core.Convert.ObjectToNumber(@base, out ibase, out lbase, out dbase);\n\t\t\tinfo_exp = Core.Convert.ObjectToNumber(exp, out iexp, out lexp, out dexp);\n\n\t\t\tif (((info_base | info_exp) & PHP.Core.Convert.NumberInfo.Double) == 0 && lexp >= 0)\n\t\t\t{\n\t\t\t\t// integer base, non-negative integer exp  //\n\n\t\t\t\tlong lpower;\n\t\t\t\tdouble dpower;\n\n\t\t\t\tif (!Power(lbase, lexp, out lpower, out dpower))\n\t\t\t\t\treturn dpower;\n\n\t\t\t\tif (lpower >= Int32.MinValue && lpower <= Int32.MaxValue)\n\t\t\t\t\treturn (Int32)lpower;\n\n\t\t\t\treturn lpower;\n\t\t\t}\n\n\t\t\tif (dbase < 0)\n\t\t\t{\n\t\t\t\t// cannot rount to integer:\n\t\t\t\tif (Math.Ceiling(dexp) > dexp)\n\t\t\t\t\treturn Double.NaN;\n\n\t\t\t\tdouble result = Math.Pow(-dbase, dexp);\n\t\t\t\treturn (Math.IEEERemainder(Math.Abs(dexp), 2.0) < 1.0) ? result : -result;\n\t\t\t}\n\n\t\t\tif (dexp < 0)\n\t\t\t\treturn 1 / Math.Pow(dbase, -dexp);\n\t\t\telse\n\t\t\t\treturn Math.Pow(dbase, dexp);\n\t\t}\n\n\t\tprivate static bool Power(long x, long y, out long longResult, out double doubleResult)\n\t\t{\n\t\t\tlong l1 = 1, l2 = x;\n\n            if (y == 0) // anything powered by 0 is 1\n\t\t\t{\n\t\t\t\tdoubleResult = longResult = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\n            if (x == 0) // 0^(anything except 0) is 0\n            {\n                doubleResult = longResult = 0;\n                return true;\n            }\n\n            try\n            {\n                while (y >= 1)\n                {\n                    if ((y & 1) != 0)\n                    {\n                        l1 *= l2;\n                        y--;\n                    }\n                    else\n                    {\n                        l2 *= l2;\n                        y /= 2;\n                    }\n                }\n            }\n            catch(ArithmeticException)\n            {\n                longResult = 0;//ignored\n                doubleResult = (double)l1 * Math.Pow(l2, y);\n                return false;\n            }\n            \n            // able to do it with longs\n\t\t\tdoubleResult = longResult = l1;\n\t\t\treturn true;\n\t\t}\n\n\t\t[ImplementsFunction(\"sqrt\"/*, FunctionImplOptions.Special*/)]\n        [PureFunction]\n        public static double Sqrt(double x)\n\t\t{\n\t\t\treturn Math.Sqrt(x);\n\t\t}\n\n\t\t[ImplementsFunction(\"hypot\")]\n        [PureFunction]\n        public static double Hypotenuse(double x, double y)\n\t\t{\n\t\t\treturn Math.Sqrt(x * x + y * y);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region  ceil, floor, round, abs, fmod, max, min\n\n        /// <summary>\n        /// Returns the next highest integer value by rounding up <paramref name=\"x\"/> if necessary.\n        /// </summary>\n        /// <param name=\"x\">The value to round.</param>\n        /// <returns><paramref name=\"x\"/> rounded up to the next highest integer. The return value of ceil() is still of type <c>double</c> as the value range of double is usually bigger than that of integer.</returns>\n\t\t[ImplementsFunction(\"ceil\")]\n        [PureFunction]\n        public static double Ceiling(double x)\n\t\t{\n\t\t\treturn Math.Ceiling(x);\n\t\t}\n\n        /// <summary>\n        /// Returns the next lowest integer value by rounding down <paramref name=\"x\"/> if necessary.\n        /// </summary>\n        /// <param name=\"x\">The numeric value to round.</param>\n        /// <returns><paramref name=\"x\"/> rounded to the next lowest integer. The return value of floor() is still of type <c>double</c> because the value range of double is usually bigger than that of integer.</returns>\n\t\t[ImplementsFunction(\"floor\")]\n        [PureFunction]\n        public static double Floor(double x)\n\t\t{\n\t\t\treturn Math.Floor(x);\n\t\t}\n\n        /// <summary>\n        /// Rounds a float.\n        /// </summary>\n        /// <param name=\"x\">The value to round.</param>\n        /// <returns>The rounded value.</returns>\n\t\t[ImplementsFunction(\"round\")]\n        [PureFunction]\n        public static double Round(double x)\n\t\t{\n            return RoundInternal(x, RoundMode.HalfUp);\n\t\t}\n\n        /// <summary>\n        /// Rounds a float.\n        /// </summary>\n        /// <param name=\"x\">The value to round.</param>\n        /// <param name=\"precision\">The optional number of decimal digits to round to. Can be less than zero to ommit digits at the end. Default is <c>0</c>.</param>\n        /// <returns>The rounded value.</returns>\n        [ImplementsFunction(\"round\")]\n        [PureFunction]\n        public static double Round(double x, int precision /*= 0*/)\n\t\t{\n            return Round(x, precision, RoundMode.HalfUp);\n\t\t}\n\n        /// <summary>\n        /// <c>$mode</c> parameter for <see cref=\"Round(double,int,RoundMode)\"/> function.\n        /// </summary>\n        public enum RoundMode : int\n        {\n            /// <summary>\n            /// When a number is halfway between two others, it is rounded away from zero.\n            /// </summary>\n            [ImplementsConstant(\"PHP_ROUND_HALF_UP\")]\n            HalfUp = 1,\n\n            /// <summary>\n            /// When a number is halfway between two others, it is rounded to the zero.\n            /// </summary>\n            [ImplementsConstant(\"PHP_ROUND_HALF_DOWN\")]\n            HalfDown = 2,\n\n            /// <summary>\n            /// When a number is halfway between two others, it is rounded toward the nearest even number.\n            /// </summary>\n            [ImplementsConstant(\"PHP_ROUND_HALF_EVEN\")]\n            HalfEven = 3,\n\n            /// <summary>\n            /// When a number is halfway between two others, it is rounded toward the nearest odd number.\n            /// </summary>\n            [ImplementsConstant(\"PHP_ROUND_HALF_ODD\")]\n            HalfOdd = 4,\n        }\n\n        #region Round Helpers\n\n        /// <summary>\n        /// Returns precise value of 10^<paramref name=\"power\"/>.\n        /// </summary>\n        private static double Power10Value(int power)\n        {\n            switch (power)\n            {\n                case -15: return .000000000000001;\n                case -14: return .00000000000001;\n                case -13: return .0000000000001;\n                case -12: return .000000000001;\n                case -11: return .00000000001;\n                case -10: return .0000000001;\n                case -9: return .000000001;\n                case -8: return .00000001;\n                case -7: return .0000001;\n                case -6: return .000001;\n                case -5: return .00001;\n                case -4: return .0001;\n                case -3: return .001;\n                case -2: return .01;\n                case -1: return .1;\n                case 0: return 1.0;\n                case 1: return 10.0;\n                case 2: return 100.0;\n                case 3: return 1000.0;\n                case 4: return 10000.0;\n                case 5: return 100000.0;\n                case 6: return 1000000.0;\n                case 7: return 10000000.0;\n                case 8: return 100000000.0;\n                case 9: return 1000000000.0;\n                case 10: return 10000000000.0;\n                case 11: return 100000000000.0;\n                case 12: return 1000000000000.0;\n                case 13: return 10000000000000.0;\n                case 14: return 100000000000000.0;\n                case 15: return 1000000000000000.0;\n                default: return Math.Pow(10.0, (double)power);\n            }\n        }\n\n        private static double RoundInternal(double value, RoundMode mode)\n        {\n            double tmp_value;\n\n            if (value >= 0.0)\n            {\n                tmp_value = Math.Floor(value + 0.5);\n                if (mode != RoundMode.HalfUp)\n                {\n                    if ((mode == RoundMode.HalfDown && value == (-0.5 + tmp_value)) ||\n                        (mode == RoundMode.HalfEven && value == (0.5 + 2 * Math.Floor(tmp_value * .5))) ||\n                        (mode == RoundMode.HalfOdd && value == (0.5 + 2 * Math.Floor(tmp_value * .5) - 1.0)))\n                    {\n                        tmp_value = tmp_value - 1.0;\n                    }\n                }\n            }\n            else\n            {\n                tmp_value = Math.Ceiling(value - 0.5);\n                if (mode != RoundMode.HalfUp)\n                {\n                    if ((mode == RoundMode.HalfDown && value == (0.5 + tmp_value)) ||\n                        (mode == RoundMode.HalfEven && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5))) ||\n                        (mode == RoundMode.HalfOdd && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5) + 1.0)))\n                    {\n                        tmp_value = tmp_value + 1.0;\n                    }\n                }\n            }\n\n            return tmp_value;\n        }\n\n        private static readonly double[] _Log10AbsValues = new[]\n        {\n\t\t\t1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,\n\t\t\t1e0,  1e1,  1e2,  1e3,  1e4,  1e5,  1e6,  1e7,\n\t\t\t1e8,  1e9,  1e10, 1e11, 1e12, 1e13, 1e14, 1e15,\n\t\t\t1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23\n        };\n\n        private static int _Log10Abs(double value)\n        {\n            value = Math.Abs(value);\n\n            if (value < 1e-8 || value > 1e23)\n            {\n                return (int)Math.Floor(Math.Log10(value));\n            }\n            else\n            {\n                var values = _Log10AbsValues;\n\n                /* Do a binary search with 5 steps */\n                var result = 16;\n                if (value < values[result])\n                    result -= 8;\n                else\n                    result += 8;\n                \n                if (value < values[result])\n                    result -= 4;\n                else\n                    result += 4;\n                \n                if (value < values[result])\n                    result -= 2;\n                else\n                    result += 2;\n                \n                if (value < values[result])\n                    result -= 1;\n                else\n                    result += 1;\n                \n                if (value < values[result])\n                    result -= 1;\n                \n                result -= 8;\n\n                //\n                return result;\n            }\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Rounds a float.\n        /// </summary>\n        /// <param name=\"x\">The value to round.</param>\n        /// <param name=\"precision\">The optional number of decimal digits to round to. Can be less than zero to ommit digits at the end. Default is <c>0</c>.</param>\n        /// <param name=\"mode\">One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD. Default is <c>PHP_ROUND_HALF_UP</c>.</param>\n        /// <returns>The rounded value.</returns>\n        [ImplementsFunction(\"round\")]\n        [PureFunction]\n        public static double Round(double x, int precision /*= 0*/, RoundMode mode /*= RoundMode.HalfUp*/)\n        {\n            if (Double.IsInfinity(x) || Double.IsNaN(x) || x == default(double))\n                return x;\n\n            if (precision == 0)\n            {\n                return RoundInternal(x, mode);\n            }\n            else\n            {\n                if (precision > 23 || precision < -23)\n                    return x;\n\n                //\n                // Following code is taken from math.c to avoid incorrect .NET rounding\n                //\n\n                var precision_places = 14 - _Log10Abs(x);\n\n                var f1 = Power10Value(precision);\n                double tmp_value;\n\n                /* If the decimal precision guaranteed by FP arithmetic is higher than\n                   the requested places BUT is small enough to make sure a non-zero value\n                   is returned, pre-round the result to the precision */\n                if (precision_places > precision && precision_places - precision < 15)\n                {\n                    var f2 = Power10Value(precision_places);\n                    tmp_value = x * f2;\n                    /* preround the result (tmp_value will always be something * 1e14,\n                       thus never larger than 1e15 here) */\n                    tmp_value = RoundInternal(tmp_value, mode);\n                    /* now correctly move the decimal point */\n                    f2 = Power10Value(Math.Abs(precision - precision_places));\n                    /* because places < precision_places */\n                    tmp_value = tmp_value / f2;\n                }\n                else\n                {\n                    /* adjust the value */\n                    tmp_value = x * f1;\n                    /* This value is beyond our precision, so rounding it is pointless */\n                    if (Math.Abs(tmp_value) >= 1e15)\n                        return x;\n                }\n\n                /* round the temp value */\n                tmp_value = RoundInternal(tmp_value, mode);\n\n                /* see if it makes sense to use simple division to round the value */\n                //if (precision < 23 && precision > -23)\n                {\n                    tmp_value = tmp_value / f1;\n                }\n                //else\n                //{\n                //    /* Simple division can't be used since that will cause wrong results.\n                //       Instead, the number is converted to a string and back again using\n                //       strtod(). strtod() will return the nearest possible FP value for\n                //       that string. */\n\n                //    /* 40 Bytes should be more than enough for this format string. The\n                //       float won't be larger than 1e15 anyway. But just in case, use\n                //       snprintf() and make sure the buffer is zero-terminated */\n                //    char buf[40];\n                //    snprintf(buf, 39, \"%15fe%d\", tmp_value, -places);\n                //    buf[39] = '\\0';\n                //    tmp_value = zend_strtod(buf, NULL);\n                //    /* couldn't convert to string and back */\n                //    if (!zend_finite(tmp_value) || zend_isnan(tmp_value)) {\n                //        tmp_value = value;\n                //    }\n                //}\n\n                return tmp_value;\n            }\n        }\n\n        /// <summary>\n        /// Returns the absolute value of <paramref name=\"x\"/>.\n        /// </summary>\n        /// <param name=\"x\">The numeric value to process.</param>\n        /// <returns></returns>\n\t\t[ImplementsFunction(\"abs\")]\n        [PureFunction]\n        public static object Abs(object x)\n\t\t{\n\t\t\tdouble dx;\n\t\t\tint ix;\n\t\t\tlong lx;\n\n\t\t\tswitch (Core.Convert.ObjectToNumber(x, out ix, out lx, out dx) & Core.Convert.NumberInfo.TypeMask)\n\t\t\t{\n\t\t\t\tcase Core.Convert.NumberInfo.Double:\n\t\t\t\t\treturn Math.Abs(dx);\n\n\t\t\t\tcase Core.Convert.NumberInfo.Integer:\n\t\t\t\t\tif (ix == int.MinValue)\n\t\t\t\t\t\treturn -lx;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn Math.Abs(ix);\n\n\t\t\t\tcase Core.Convert.NumberInfo.LongInteger:\n\t\t\t\t\tif (lx == long.MinValue)\n\t\t\t\t\t\treturn -dx;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn Math.Abs(lx);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n        /// <summary>\n        /// Returns the floating point remainder (modulo) of the division of the arguments.\n        /// </summary>\n        /// <param name=\"x\">The dividend.</param>\n        /// <param name=\"y\">The divisor.</param>\n        /// <returns>The floating point remainder of <paramref name=\"x\"/>/<paramref name=\"y\"/>.</returns>\n\t\t[ImplementsFunction(\"fmod\")]\n        [PureFunction]\n        public static double Fmod(double x, double y)\n\t\t{\n\t\t\ty = Math.Abs(y);\n\t\t\tdouble rem = Math.IEEERemainder(Math.Abs(x), y);\n\t\t\tif (rem < 0) rem += y;\n\t\t\treturn (x >= 0) ? rem : -rem;\n\t\t}\n\n        /// <summary>\n        /// Find highest value.\n        /// 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.\n        /// </summary>\n        /// <param name=\"numbers\">An array containing the values or values separately.</param>\n        /// <returns>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.\n        /// 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.\n        /// When given a string it will be cast as an integer when comparing.</returns>\n\t\t[ImplementsFunction(\"max\")]\n        [PureFunction]\n        public static object Max(params object[] numbers)\n\t\t{\n\t\t\treturn GetExtreme(numbers, true);\n\t\t}\n\n        /// <summary>\n        /// Find lowest value.\n        /// 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.\n        /// </summary>\n        /// <param name=\"numbers\">An array containing the values or values separately.</param>\n        /// <returns>min() returns the numerically lowest of the parameter values.</returns>\n\t\t[ImplementsFunction(\"min\")]\n        [PureFunction]\n        public static object Min(params object[] numbers)\n\t\t{\n\t\t\treturn GetExtreme(numbers, false);\n\t\t}\n\n\t\tinternal static object GetExtreme(object[] numbers, bool maximum)\n\t\t{\n\t\t\tif ((numbers.Length == 1) && (numbers[0] is PhpArray))\n\t\t\t{\n\t\t\t\tIEnumerable e = (numbers[0] as PhpArray).Values;\n\t\t\t\tDebug.Assert(e != null);\n\t\t\t\treturn FindExtreme(e, maximum);\n\t\t\t}\n\t\t\treturn FindExtreme(numbers, maximum);\n\t\t}\n\n\t\tinternal static object FindExtreme(IEnumerable array, bool maximum)\n\t\t{\n\t\t\tobject ex = null;\n\t\t\tint fact = maximum ? 1 : -1;\n\t\t\tforeach (object o in array)\n\t\t\t{\n\t\t\t\tif (ex == null) ex = o;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif ((PhpComparer.Default.Compare(o, ex) * fact) > 0) ex = o;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ex;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Source/ClassLibrary/MersenneTwister.cs",
    "content": "using System;\r\n\r\n/* \r\n  \r\n  Mersanne Twister random generator C# implementation. Adapted by Tomas Matousek from original \r\n  C version by Takuji Nishimura and Makoto Matsumoto (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html).\r\n  \r\n  Experimental version.\r\n  \r\n*/\r\n\r\n/*  \r\n  License:\r\n\r\n  Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\r\n  All rights reserved.                          \r\n\r\n  Redistribution and use in source and binary forms, with or without\r\n  modification, are permitted provided that the following conditions\r\n  are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright\r\n      notice, this list of conditions and the following disclaimer.\r\n\r\n    2. Redistributions in binary form must reproduce the above copyright\r\n      notice, this list of conditions and the following disclaimer in the\r\n      documentation and/or other materials provided with the distribution.\r\n\r\n    3. The names of its contributors may not be used to endorse or promote \r\n      products derived from this software without specific prior written \r\n      permission.\r\n\r\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n  \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\n  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r\n  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r\n  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\n  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n*/\r\n\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Mersanne Twister random generator.\r\n\t/// </summary>\r\n\tpublic sealed class MersenneTwister\r\n\t{\r\n\t\t// period parameters:\r\n\t\tprivate const int N = 624;\r\n\t\tprivate const int M = 397;\r\n\r\n\t\t// mag01[x] = x * MATRIX_A  for x=0,1\r\n\t\tprivate static readonly uint[] mag01 = { 0, 0x9908b0dfU };\r\n\r\n\t\t// mti==N+1 means mt[N] is not initialized:\r\n\t\tprivate int mti = N + 1;\r\n\r\n\t\t// the array for the state vector:\r\n\t\tprivate readonly uint[] mt = new uint[N];\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a new instance of <see cref=\"MersenneTwister\"/> using a default seed.\r\n\t\t/// </summary>\r\n\t\tpublic MersenneTwister()\r\n\t\t{\r\n\t\t\tSeed(5489U);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a new instance of <see cref=\"MersenneTwister\"/> using a specified seed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"seed\">The seed.</param>\r\n\t\tpublic MersenneTwister(uint seed)\r\n\t\t{\r\n\t\t\tSeed(seed);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Seeds the generator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"seed\">The seed.</param>\r\n\t\tpublic void Seed(uint seed)\r\n\t\t{\r\n\t\t\tmt[0] = seed;\r\n\t\t\tfor (int i = 1; i < N; i++)\r\n\t\t\t{\r\n\t\t\t\t// See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier.\r\n\t\t\t\t// In the previous versions, MSBs of the seed affect\r\n\t\t\t\t// only MSBs of the array mt[].\r\n\t\t\t\t// 2002/01/09 modified by Makoto Matsumoto\r\n\t\t\t\tmt[i] = unchecked((uint)((1812433253UL * (mt[i - 1] ^ (mt[i - 1] >> 30)) + (ulong)i)));\r\n\t\t\t}\r\n\t\t\tmti = N;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random unsigned integer.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The generated number.</returns>\r\n\t\tpublic uint NextUnsigned()\r\n\t\t{\r\n\t\t\t// most significant w-r bits:\r\n\t\t\tconst uint upper_mask = 0x80000000U;\r\n\r\n\t\t\t// least significant r bits:\r\n\t\t\tconst uint lower_mask = 0x7fffffffU;\r\n\r\n\t\t\tuint result;\r\n\r\n\t\t\tunchecked\r\n\t\t\t{\r\n\t\t\t\t// generate N words at one time:\r\n\t\t\t\tif (mti >= N)\r\n\t\t\t\t{\r\n\t\t\t\t\tint k;\r\n\r\n\t\t\t\t\tfor (k = 0; k < N - M; k++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = (mt[k] & upper_mask) | (mt[k + 1] & lower_mask);\r\n\t\t\t\t\t\tmt[k] = mt[k + M] ^ (result >> 1) ^ mag01[result & 1];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (; k < N - 1; k++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = (mt[k] & upper_mask) | (mt[k + 1] & lower_mask);\r\n\t\t\t\t\t\tmt[k] = mt[k + (M - N)] ^ (result >> 1) ^ mag01[result & 1];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult = (mt[N - 1] & upper_mask) | (mt[0] & lower_mask);\r\n\t\t\t\t\tmt[N - 1] = mt[M - 1] ^ (result >> 1) ^ mag01[result & 1];\r\n\r\n\t\t\t\t\tmti = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = mt[mti++];\r\n\r\n\t\t\t\t// tempering:\r\n\t\t\t\tresult ^= (result >> 11);\r\n\t\t\t\tresult ^= (result << 7) & 0x9d2c5680U;\r\n\t\t\t\tresult ^= (result << 15) & 0xefc60000U;\r\n\t\t\t\tresult ^= (result >> 18);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random signed integer value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The generated number.</returns>\r\n\t\tpublic int Next()\r\n\t\t{\r\n\t\t\treturn unchecked((int)(NextUnsigned() >> 1));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random number from interval [min,max).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The generated number.</returns>\r\n\t\tpublic int Next(int min, int max)\r\n\t\t{\r\n\t\t\tif (min > max)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"min\");\r\n\r\n\t\t\tunchecked\r\n\t\t\t{\r\n\t\t\t\tint range = max - min;\r\n\r\n\t\t\t\tif (range < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tlong long_range = (long)max - min;\r\n\t\t\t\t\treturn (int)((long)(NextDouble() * long_range) + min);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn ((int)(NextDouble() * range)) + min;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a random double value from interval [0,1).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The generated number.</returns>\r\n\t\tdouble NextDouble()\r\n\t\t{\r\n\t\t\treturn (double)NextUnsigned() * (1.0 / (double)UInt32.MaxValue);\r\n\t\t}\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG\r\n\r\n\t\tpublic static void Test()\r\n\t\t{\r\n\t\t\tint i;\r\n\r\n\t\t\tMersenneTwister mt = new MersenneTwister();\r\n\r\n\t\t\tConsole.WriteLine(\"1000 outputs of genrand_int32()\");\r\n\t\t\tfor (i = 0; i < 1000; i++)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"{0} \", mt.NextUnsigned());\r\n\t\t\t\tif (i % 5 == 4) Console.WriteLine();\r\n\t\t\t}\r\n\r\n\t\t\tConsole.ReadLine();\r\n\t\t\tConsole.WriteLine(\"1000 outputs of genrand_real2\");\r\n\t\t\tfor (i = 0; i < 1000; i++)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"{0} \", mt.NextDouble());\r\n\t\t\t\tif (i % 5 == 4) Console.WriteLine();\r\n\t\t\t}\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Misc.cs",
    "content": "using System;\r\nusing System.Diagnostics;\r\n\r\n/*\r\n  \r\n  Designed and implemented by Tomas Matousek.\r\n  \r\n*/\r\n\r\nnamespace PHP\r\n{\r\n\t/// <summary>\r\n\t/// Summary description for Utils.\r\n\t/// </summary>\r\n\tpublic class Misc\r\n\t{\r\n\t\tprivate Misc() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Absolutizes range specified by an offset and a length relatively to a dimension of an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"count\">The number of items in array.</param>\r\n\t\t/// <param name=\"offset\">\r\n\t\t/// The offset of the range relative to the beginning (if non-negative) or the end of the array (if negative).\r\n\t\t/// If the offset underflows or overflows the dimension of array it is trimmed appropriately.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"length\">\r\n\t\t/// The length of the range if non-negative. Otherwise, its absolute value is the number of items\r\n\t\t/// which will not be included in the range from the end of the array. In the latter case \r\n\t\t/// the range ends with the |<paramref name=\"length\"/>|-th item from the end of the array (counting from zero).\r\n\t\t/// </param>\r\n\t\tpublic static void AbsolutizeRange(ref int offset, ref int length, int count)\r\n\t\t{\r\n\t\t\t// prevents overflows:\r\n\t\t\tif (offset >= count)\r\n\t\t\t{\r\n\t\t\t\toffset = count;\r\n\t\t\t\tlength = 0;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// negative offset => offset is relative to the end of the string:\r\n\t\t\tif (offset < 0)\r\n\t\t\t{\r\n\t\t\t\toffset += count;\r\n\t\t\t\tif (offset < 0) offset = 0;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(offset >= 0 && offset < count);\r\n\r\n\t\t\tif (length < 0)\r\n\t\t\t{\r\n\t\t\t\t// there is count-offset items from offset to the end of array,\r\n\t\t\t\t// the last |length| items is taken away:\r\n\t\t\t\tlength = count - offset + length;\r\n\t\t\t\tif (length < 0) length = 0;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tif ((long)offset + length > count)\r\n\t\t\t\t{\r\n\t\t\t\t\t// interval ends on the end of array:\r\n\t\t\t\t\tlength = count - offset;\r\n\t\t\t\t}\r\n\r\n\t\t\tDebug.Assert(length >= 0 && offset + length <= count);\r\n\t\t}\r\n\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Miscellaneous.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n\tTODO:\r\n\t\t- sleep() accepts negative values. (5.1.3) \r\n*/\r\n\r\nusing System;\r\n//using System.Web;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enumerations\r\n\r\n\t/// <exclude/>\r\n\t[Flags]\r\n\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\tpublic enum PhpInfoSections\r\n\t{\r\n\t\t[ImplementsConstant(\"INFO_GENERAL\")]\r\n\t\tGeneral = PhpNetInfo.Sections.General,\r\n\t\t[ImplementsConstant(\"INFO_CREDITS\")]\r\n\t\tCredits = PhpNetInfo.Sections.Credits,\r\n\t\t[ImplementsConstant(\"INFO_CONFIGURATION\")]\r\n\t\tConfiguration = PhpNetInfo.Sections.Configuration,\r\n\t\t[ImplementsConstant(\"INFO_MODULES\")]\r\n\t\tExtensions = PhpNetInfo.Sections.Extensions,\r\n\t\t[ImplementsConstant(\"INFO_ENVIRONMENT\")]\r\n\t\tEnvironment = PhpNetInfo.Sections.Environment,\r\n\t\t[ImplementsConstant(\"INFO_VARIABLES\")]\r\n\t\tVariables = PhpNetInfo.Sections.Variables,\r\n\t\t[ImplementsConstant(\"INFO_LICENSE\")]\r\n\t\tLicense = PhpNetInfo.Sections.License,\r\n\t\t[ImplementsConstant(\"INFO_ALL\")]\r\n\t\tAll = PhpNetInfo.Sections.All\r\n\t}\r\n\r\n\t/// <exclude/>\r\n\t[Flags]\r\n\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\tpublic enum PhpCreditsSections\r\n\t{\r\n\t\t[ImplementsConstant(\"CREDITS_GROUP\")]\r\n\t\tGroup = 1,\r\n\t\t[ImplementsConstant(\"CREDITS_GENERAL\")]\r\n\t\tGeneral = 2,\r\n\t\t[ImplementsConstant(\"CREDITS_SAPI\")]\r\n\t\tSAPI = 4,\r\n\t\t[ImplementsConstant(\"CREDITS_MODULES\")]\r\n\t\tModules = 8,\r\n\t\t[ImplementsConstant(\"CREDITS_DOCS\")]\r\n\t\tDocs = 16,\r\n\t\t[ImplementsConstant(\"CREDITS_FULLPAGE\")]\r\n\t\tFullpage = 32,\r\n\t\t[ImplementsConstant(\"CREDITS_QA\")]\r\n\t\tQA = 64,\r\n\t\t[ImplementsConstant(\"CREDITS_ALL\")]\r\n\t\tAll = -1\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Miscellaneous functionality.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Misc\r\n\t{\r\n\t\t#region phpinfo, phpcredits, phpversion, version_compare, zend_version\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shows all information about Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <returns>1.</returns>\r\n\t\t[ImplementsFunction(\"phpinfo\")]\r\n\t\tpublic static int PhpInfo()\r\n\t\t{\r\n\t\t\tPhpNetInfo.Write(PhpNetInfo.Sections.All, ScriptContext.CurrentContext.Output);\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shows specific information about Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sections\">A section to show.</param>\r\n\t\t/// <returns>1.</returns>\r\n\t\t[ImplementsFunction(\"phpinfo\")]\r\n\t\tpublic static int PhpInfo(PhpInfoSections sections)\r\n\t\t{\r\n\t\t\tPhpNetInfo.Write((PhpNetInfo.Sections)sections, ScriptContext.CurrentContext.Output);\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shows all credits of Phalanger.\r\n\t\t/// </summary>\r\n        /// <returns>True on success, or False on failure.</returns>\r\n\t\t[ImplementsFunction(\"phpcredits\")]\r\n\t\tpublic static bool PhpCredits()\r\n\t\t{\r\n\t\t\tPhpNetInfo.Write(PhpNetInfo.Sections.Credits, ScriptContext.CurrentContext.Output);\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shows all credits of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sections\">Ignored.</param>\r\n        /// /// <returns>True on success, or False on failure.</returns>\r\n\t\t[ImplementsFunction(\"phpcredits\")]\r\n\t\tpublic static bool PhpCredits(PhpCreditsSections sections)\r\n\t\t{\r\n\t\t\tPhpNetInfo.Write(PhpNetInfo.Sections.Credits, ScriptContext.CurrentContext.Output);\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a string version of PHP language which features is supported by the Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <returns>PHP language version.</returns>\r\n\t\t[ImplementsFunction(\"phpversion\")]\r\n        [PureFunction]\r\n        public static string PhpVersion()\r\n\t\t{\r\n\t\t\treturn Core.PhpVersion.Current;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a string version of a specified extension.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Version of the extension or <b>null</b> if it cannot be retrieved.</returns>\r\n\t\t[ImplementsFunction(\"phpversion\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string PhpVersion(string extensionName)\r\n\t\t{\r\n            PhpException.FunctionNotSupported();\r\n\t\t\t//return ApplicationContext.Default.GetLoadedLibraries().FirstOrDefault(x => x.Descriptor.AssemblyAttribute ...\r\n            return null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares PHP versions.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ver1\">The first version.</param>\r\n\t\t/// <param name=\"ver2\">The second version.</param>\r\n\t\t/// <returns>The result of comparison (-1,0,+1).</returns>\r\n\t\t[ImplementsFunction(\"version_compare\")]\r\n        [PureFunction]\r\n        public static int VersionCompare(string ver1, string ver2)\r\n\t\t{\r\n\t\t\treturn Core.PhpVersion.Compare(ver1, ver2);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares PHP versions using a specified operators.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ver1\">The first version.</param>\r\n\t\t/// <param name=\"ver2\">The second version.</param>\r\n\t\t/// <param name=\"op\">The operator to be used.</param>\r\n\t\t/// <returns>A boolean result of comparison or a <B>null</B> reference if the operator is invalid.</returns>\r\n\t\t[ImplementsFunction(\"version_compare\")]\r\n        [PureFunction]\r\n        public static object VersionCompare(string ver1, string ver2, string op)\r\n\t\t{\r\n\t\t\treturn Core.PhpVersion.Compare(ver1, ver2, op);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current version of Zend engine as it is defined in the currently supported PHP.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The version.</returns>\r\n\t\t[ImplementsFunction(\"zend_version\")]\r\n        [PureFunction]\r\n        public static string ZendVersion()\r\n\t\t{\r\n\t\t\treturn Core.PhpVersion.Zend;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region gethostname, php_uname, memory_get_usage, php_sapi_name\r\n\r\n        /// <summary>\r\n        /// gethostname() gets the standard host name for the local machine. \r\n        /// </summary>\r\n        /// <returns>Returns a string with the hostname on success, otherwise FALSE is returned. </returns>\r\n        [ImplementsFunction(\"gethostname\")]\r\n        [return: CastToFalse]\r\n        public static string GetHostName()\r\n        {\r\n            string host = null;\r\n\r\n#if !SILVERLIGHT\r\n            try { host = System.Net.Dns.GetHostName(); }\r\n            catch { }\r\n#endif\r\n            return host;\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves full version information about OS.\r\n\t\t/// </summary>\r\n\t\t/// <returns>OS version.</returns>\r\n\t\t[ImplementsFunction(\"php_uname\")]\r\n\t\tpublic static string PhpUName()\r\n\t\t{\r\n\t\t\t//return String.Concat(Environment.OSVersion,\", CLR \",Environment.Version);\r\n\t\t\treturn PhpUName(null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves specific version information about OS.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"mode\">\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <term>'a'</term><description>This is the default. Contains all modes in the sequence \"s n r v m\".</description>\r\n\t\t/// <term>'s'</term><description>Operating system name, e.g. \"Windows NT\", \"Windows 9x\".</description>\r\n\t\t/// <term>'n'</term><description>Host name, e.g. \"www.php-compiler.net\".</description>\r\n\t\t/// <term>'r'</term><description>Release name, e.g. \"5.1\".</description>\r\n\t\t/// <term>'v'</term><description>Version information. Varies a lot between operating systems, e.g. \"build 2600\".</description>\r\n\t\t/// <term>'m'</term><description>Machine type. eg. \"i586\".</description>\r\n\t\t/// </list>\r\n\t\t/// </param>\r\n\t\t/// <returns>OS version.</returns>\r\n\t\t[ImplementsFunction(\"php_uname\")]\r\n\t\tpublic static string PhpUName(string mode)\r\n\t\t{\r\n\t\t\tstring system, host, release, version, machine;\r\n\r\n\t\t\tswitch (Environment.OSVersion.Platform)\r\n\t\t\t{\r\n\t\t\t\tcase PlatformID.Win32NT: system = \"Windows NT\"; break;\r\n\t\t\t\tcase PlatformID.Win32Windows: system = \"Windows 9x\"; break;\r\n\t\t\t\tcase PlatformID.Win32S: system = \"Win32S\"; break;\r\n\t\t\t\tcase PlatformID.WinCE: system = \"Windows CE\"; break;\r\n\t\t\t\tdefault: system = \"Unix\"; break;        // TODO\r\n\t\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t\thost = System.Net.Dns.GetHostName();\r\n\r\n\t\t\tmachine = Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\");\r\n\t\t\tif (machine == \"x86\") machine = \"i586\";    // TODO\r\n#endif\r\n\t\t\trelease = String.Concat(Environment.OSVersion.Version.Major, \".\", Environment.OSVersion.Version.Minor);\r\n\t\t\tversion = String.Concat(\"build \", Environment.OSVersion.Version.Build);\r\n\r\n\t\t\tif (mode != null && mode != \"\")\r\n\t\t\t{\r\n\t\t\t\tswitch (mode[0])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 's': return system;\r\n\t\t\t\t\tcase 'r': return release;\r\n\t\t\t\t\tcase 'v': return version;\r\n#if !SILVERLIGHT\r\n\t\t\t\t\tcase 'm': return machine;\r\n\t\t\t\t\tcase 'n': return host;\r\n#endif\r\n\t\t\t\t}\r\n\t\t\t}\r\n#if !SILVERLIGHT\r\n\t\t\treturn String.Format(\"{0} {1} {2} {3} {4}\", system, host, release, version, machine);\r\n#else\r\n\t\t\treturn String.Format(\"{0} {1} {2}\", system, release, version);\r\n#endif\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the size of the current process working set in bytes.\r\n        /// (In PHP, Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.)\r\n\t\t/// </summary>\r\n\t\t/// <returns>The size.</returns>\r\n\t\t[ImplementsFunction(\"memory_get_usage\")]\r\n\t\tpublic static int MemoryGetUsage()\r\n\t\t{\r\n            return MemoryGetUsage(false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Retrieves the size of the current process working set in bytes.\r\n        /// </summary>\r\n        /// <param name=\"real_usage\">\r\n        /// \"Set this to TRUE to get the real size of memory allocated from system.\r\n        /// If not set or FALSE only the memory used by emalloc() is reported.\"</param>\r\n        /// <returns>The size.</returns>\r\n        [ImplementsFunction(\"memory_get_usage\")]\r\n        public static int MemoryGetUsage(bool real_usage)\r\n        {\r\n            //if (real_usage == false)// TODO: real_usage = false\r\n            //    PhpException.ArgumentValueNotSupported(\"real_usage\");\r\n\r\n            long ws = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;\r\n            if (ws > Int32.MaxValue) return Int32.MaxValue;\r\n            return (int)ws;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns the peak of memory, in bytes, that's been allocated to the PHP script.\r\n        /// </summary>\r\n        /// <returns>The size.</returns>\r\n        [ImplementsFunction(\"memory_get_peak_usage\", FunctionImplOptions.NotSupported)]\r\n        public static int MemoryGetPeakUsage()\r\n        {\r\n            return MemoryGetPeakUsage(false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the peak of memory, in bytes, that's been allocated to the PHP script.\r\n        /// </summary>\r\n        /// <param name=\"real_usage\">\r\n        /// Set this to TRUE to get the real size of memory allocated from system.\r\n        /// If not set or FALSE only the memory used by emalloc() is reported.</param>\r\n        /// <returns>The size.</returns>\r\n        [ImplementsFunction(\"memory_get_peak_usage\", FunctionImplOptions.NotSupported)]\r\n        public static int MemoryGetPeakUsage(bool real_usage)\r\n        {\r\n            //if (real_usage == false)// TODO: real_usage = false\r\n            //    PhpException.ArgumentValueNotSupported(\"real_usage\");\r\n\r\n            long ws = System.Diagnostics.Process.GetCurrentProcess().NonpagedSystemMemorySize64;    // can't get current thread's memory\r\n            if (ws > Int32.MaxValue) return Int32.MaxValue;\r\n            return (int)ws;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of interface between web server and Phalanger. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The \"isapi\" string if runned under webserver (ASP.NET works via ISAPI) or \"cli\" otherwise.</returns>\r\n\t\t[ImplementsFunction(\"php_sapi_name\")]\r\n\t\tpublic static string PhpSapiName()\r\n\t\t{\r\n\t\t\treturn (System.Web.HttpContext.Current == null) ? \"cli\" : \"isapi\";\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region getmypid, getlastmod, get_current_user, (UNIX) getmyuid\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Returns the PID of the current process. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The PID.</returns>\r\n\t\t[ImplementsFunction(\"getmypid\")]\r\n\t\tpublic static int GetCurrentProcessId()\r\n\t\t{\r\n\t\t\treturn System.Diagnostics.Process.GetCurrentProcess().Id;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets time of last page modification. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The UNIX timestamp or -1 on error.</returns>\r\n\t\t[ImplementsFunction(\"getlastmod\")]\r\n\t\tpublic static int GetLastModification()\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tPhpSourceFile file = ScriptContext.CurrentContext.MainScriptFile;\r\n\t\t\t\tif (file == null) return -1;\r\n\r\n\t\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(File.GetLastWriteTime(file.FullPath).ToUniversalTime());\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the name of the current user.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name of the current user.</returns>\r\n\t\t[ImplementsFunction(\"get_current_user\")]\r\n\t\tpublic static string GetCurrentUser()\r\n\t\t{\r\n\t\t\treturn Environment.UserName;\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Zero.</returns>\r\n        [ImplementsFunction(\"getmyuid\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int GetCurrentUserId()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region sleep, usleep, (UNIX) time_sleep_until, (UNIX) time_nanosleep\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sleeps the current thread for a specified amount of time.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"seconds\">The number of seconds to sleep.</param>\r\n        /// <returns>Zero on success, or FALSE if negative argument is passed.</returns>\r\n\t\t[ImplementsFunction(\"sleep\")]\r\n        [return: CastToFalse]\r\n\t\tpublic static int sleep(int seconds)\r\n\t\t{\r\n            if (seconds < 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"sleep_seconds_less_zero\"));\r\n                return -1;\r\n            }\r\n\r\n\t\t\tThread.Sleep(((long)seconds * 1000 > int.MaxValue) ? seconds = Timeout.Infinite : seconds * 1000);\r\n\r\n            return 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sleeps the current thread for a specified amount of time.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"microSeconds\">The number of microseconds to sleep.</param>\r\n\t\t[ImplementsFunction(\"usleep\")]\r\n\t\tpublic static void usleep(int microSeconds)\r\n\t\t{\r\n\t\t\tif (microSeconds < 0) microSeconds = 0;\r\n\t\t\tThread.Sleep(microSeconds / 1000);\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region dl, extension_loaded, get_loaded_extensions, get_extension_funcs\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"library\">Ignored.</param>\r\n\t\t/// <returns><B>false</B></returns>\r\n\t\t[ImplementsFunction(\"dl\")]\r\n\t\tpublic static bool LoadExtension(string library)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"dl_not_supported\"));\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a native extension is loaded.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"extension\">Internal extension name (e.g. <c>sockets</c>).</param>\r\n\t\t/// <returns><B>true</B> if the <paramref name=\"extension\"/> is loaded, <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"extension_loaded\")]\r\n        [PureFunction(typeof(Misc), \"ExtensionLoaded_Analyze\")]\r\n        public static bool ExtensionLoaded(string extension)\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.ApplicationContext.GetExtensionImplementor(extension) != null;\r\n        }\r\n\r\n        #region analyzer of extension_loaded\r\n\r\n        public static bool ExtensionLoaded_Analyze(Analyzer/*!*/analyzer, string extension)\r\n        {\r\n            Debug.Assert(analyzer != null);\r\n\r\n            foreach (var loadedExtension in analyzer.Context.ApplicationContext.GetLoadedExtensions())\r\n                if (String.Compare(loadedExtension, extension, StringComparison.CurrentCultureIgnoreCase) == 0)\r\n                    return true;\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Returns an array with names of all loaded native extensions.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array of extension names.</returns>\r\n\t\t[ImplementsFunction(\"get_loaded_extensions\")]\r\n\t\tpublic static PhpArray GetLoadedExtensions()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tforeach (string extension_name in ScriptContext.CurrentContext.ApplicationContext.GetLoadedExtensions())\r\n\t\t\t\tresult.Add(extension_name);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array with names of the functions of a native extension.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"extension\">Internal extension name (e.g. <c>sockets</c>).</param>\r\n\t\t/// <returns>The array of function names or <B>null</B> if the <paramref name=\"extension\"/> is not loaded.</returns>\r\n\t\t[ImplementsFunction(\"get_extension_funcs\")]\r\n\t\tpublic static PhpArray GetExtensionFunctions(string extension)\r\n\t\t{\r\n            if (extension == \"zend\")    // since PHP 5.0\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"extension\", extension); // TODO: functions in the module zend (php functions in PhpNetCore ?)\r\n                // ...\r\n            }\r\n\r\n\t\t\tApplicationContext app_context = ScriptContext.CurrentContext.ApplicationContext;\r\n\r\n\t\t\tPhpLibraryDescriptor desc = app_context.GetExtensionImplementor(extension);\r\n\t\t\tif (desc == null) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tforeach (KeyValuePair<string, DRoutineDesc> function in app_context.Functions)\r\n\t\t\t{\r\n\t\t\t\tif (function.Value.DeclaringType.DeclaringModule == desc.Module)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(function.Key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// A callback used by <see cref=\"GetExtensionFunctions\"/> method. Adds a function to the resulting array as a key.\r\n\t\t/// </summary>\r\n\t\tprivate static bool AddFunctionToHashtable(MethodInfo info, ImplementsFunctionAttribute ifa, object result)\r\n\t\t{\r\n\t\t\tif ((ifa.Options & FunctionImplOptions.NotSupported) == 0)\r\n\t\t\t\t((Hashtable)result)[ifa.Name] = null;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_required_files, get_included_files\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of included file paths.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array of paths to included files (without duplicates).</returns>\r\n\t\t[ImplementsFunction(\"get_required_files\")]\r\n\t\tpublic static PhpArray GetRequiredFiles()\r\n\t\t{\r\n\t\t\treturn GetIncludedFiles();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of included file paths.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array of paths to included files (without duplicates).</returns>\r\n\t\t[ImplementsFunction(\"get_included_files\")]\r\n\t\tpublic static PhpArray GetIncludedFiles()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tforeach (var source_file in ScriptContext.CurrentContext.GetIncludedScripts())\r\n\t\t\t{\r\n\t\t\t\tresult.Add(source_file/*.FullPath.ToString()*/);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: zend_logo_guid, php_logo_guid, (UNIX) getmygid, (UNIX) getmyinode\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"_mime_content_type\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static string GetMimeContentType(string fileName)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn \"text/plain\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"zend_logo_guid\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static string ZendLogoGuid()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"php_logo_guid\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static string PhpLogoGuid()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"getmygid\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static int GetMyGid()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"getmyinode\", FunctionImplOptions.NotSupported)]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static int GetMyINode()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region gc_enabled\r\n\r\n        [ImplementsFunction(\"gc_enabled\")]\r\n        public static bool gc_enabled()\r\n        {\r\n            return true;    // status of the circular reference collector\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Network.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n TODO:\r\n   Added: inet_pton,inet_ntop (PHP 5.1.0, UNIX only)\r\n*/\r\n\r\nusing System;\r\nusing PHP.Core;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.ComponentModel;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enumerations\r\n\r\n\t/// <summary>\r\n\t/// Types of the DNS record.\r\n\t/// </summary>\r\n\tpublic enum DnsRecordType\r\n\t{\r\n\t\t/// <summary>IPv4 Address Resource</summary>\r\n\t\t[ImplementsConstant(\"DNS_A\")]\r\n\t\tIp4Address,\r\n\r\n\t\t/// <summary>Mail Exchanger Resource</summary>\r\n\t\t[ImplementsConstant(\"DNS_MX\")]\r\n\t\tMail,\r\n\r\n\t\t/// <summary>Alias (Canonical Name) Resource</summary>\r\n\t\t[ImplementsConstant(\"DNS_CNAME\")]\r\n\t\tAlias,\r\n\r\n\t\t/// <summary>Authoritative Name Server Resource.</summary>\r\n\t\t[ImplementsConstant(\"DNS_NS\")]\r\n\t\tNameServer,\r\n\r\n\t\t/// <summary>Pointer Resource.</summary>\r\n\t\t[ImplementsConstant(\"DNS_PTR\")]\r\n\t\tPointer,\r\n\r\n\t\t/// <summary>Host Info Resource.</summary>\r\n\t\t[ImplementsConstant(\"DNS_HINFO\")]\r\n\t\tHostInfo,\r\n\r\n\t\t/// <summary>Start of Authority Resource.</summary>\r\n\t\t[ImplementsConstant(\"DNS_SOA\")]\r\n\t\tStartOfAuthority,\r\n\r\n\t\t/// <summary>Text Resource.</summary>\r\n\t\t[ImplementsConstant(\"DNS_TXT\")]\r\n\t\tText,\r\n\r\n\t\t/// <summary>Any Resource Record.</summary>\r\n\t\t[ImplementsConstant(\"DNS_ANY\")]\r\n\t\tAny,\r\n\r\n\t\t/// <summary>IPv6 Address Resource</summary>\r\n\t\t[ImplementsConstant(\"DNS_AAAA\")]\r\n\t\tIp6Address,\r\n\r\n\t\t/// <summary>Iteratively query the name server for each available record type.</summary>\r\n\t\t[ImplementsConstant(\"DNS_ALL\")]\r\n\t\tAll\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Socket functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Sockets\r\n\t{\r\n\t\t#region pfsockopen\r\n\r\n\t\t[ImplementsFunction(\"pfsockopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource OpenPersistent(string target, int port)\r\n\t\t{\r\n\t\t\tint errno;\r\n\t\t\tstring errstr;\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"pfsockopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource OpenPersistent(string target, int port, out int errno)\r\n\t\t{\r\n\t\t\tstring errstr;\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"pfsockopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource OpenPersistent(string target, int port, out int errno, out string errstr)\r\n\t\t{\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, true);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"pfsockopen\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource OpenPersistent(string target, int port, out int errno, out string errstr, double timeout)\r\n\t\t{\r\n\t\t\treturn Open(target, port, out errno, out errstr, timeout, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region fsockopen\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fsockopen\")]\r\n\t\tpublic static PhpResource Open(string target, int port)\r\n\t\t{\r\n\t\t\tint errno;\r\n\t\t\tstring errstr;\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fsockopen\")]\r\n\t\tpublic static PhpResource Open(string target, int port, out int errno)\r\n\t\t{\r\n\t\t\tstring errstr;\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fsockopen\")]\r\n\t\tpublic static PhpResource Open(string target, int port, out int errno, out string errstr)\r\n\t\t{\r\n\t\t\treturn Open(target, port, out errno, out errstr, ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fsockopen\")]\r\n\t\tpublic static PhpResource Open(string target, int port, out int errno, out string errstr, double timeout)\r\n\t\t{\r\n\t\t\treturn Open(target, port, out errno, out errstr, timeout, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"fsockopen\")]\r\n\t\tpublic static PhpResource Open(string target, int port, out int errno, out string errstr, double timeout, bool persistent)\r\n\t\t{\r\n\t\t\treturn StreamSocket.Connect(target, port, out errno, out errstr, timeout,\r\n\t\t\t  persistent ? StreamSocket.SocketOptions.Persistent : StreamSocket.SocketOptions.None,\r\n\t\t\t  StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region socket_get_status, socket_set_blocking, socket_set_timeout\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets status.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">A stream.</param>\r\n\t\t/// <returns>The array containing status info.</returns>\r\n\t\t[ImplementsFunction(\"socket_get_status\")]\r\n\t\tpublic static PhpArray GetStatus(PhpResource stream)\r\n\t\t{\r\n\t\t\treturn PhpStreams.GetMetaData(stream);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets blocking mode.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">A stream.</param>\r\n\t\t/// <param name=\"mode\">A mode.</param>\r\n\t\t[ImplementsFunction(\"socket_set_blocking\")]\r\n\t\tpublic static bool SetBlocking(PhpResource stream, int mode)\r\n\t\t{\r\n\t\t\treturn PhpStreams.SetBlocking(stream, mode);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a timeout.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">A stream.</param>\r\n\t\t/// <param name=\"seconds\">The timeout in seconds.</param>\r\n\t\t[ImplementsFunction(\"socket_set_timeout\")]\r\n\t\tpublic static bool SetTimeout(PhpResource stream, int seconds)\r\n\t\t{\r\n\t\t\treturn PhpStreams.SetTimeout(stream, seconds);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a timeout.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">A stream.</param>\r\n\t\t/// <param name=\"seconds\">Seconds part of the timeout.</param>\r\n\t\t/// <param name=\"microseconds\">Microseconds part of the timeout.</param>\r\n\t\t[ImplementsFunction(\"socket_set_timeout\")]\r\n\t\tpublic static bool SetTimeout(PhpResource stream, int seconds, int microseconds)\r\n\t\t{\r\n\t\t\treturn PhpStreams.SetTimeout(stream, seconds, microseconds);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Functions working with DNS.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Dns\r\n\t{\r\n\t\t#region NS: dns_check_record, checkdnsrr\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"checkdnsrr\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int CheckRecordRows(string host)\r\n\t\t{\r\n\t\t\treturn CheckRecords(host, \"MX\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"checkdnsrr\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int CheckRecordRows(string host, string type)\r\n\t\t{\r\n\t\t\treturn CheckRecords(host, type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_check_record\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int CheckRecords(string host, string type)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: dns_get_record\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_get_record\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray GetRecord(string host)\r\n\t\t{\r\n\t\t\treturn GetRecord(host, DnsRecordType.All);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_get_record\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray GetRecord(string host, DnsRecordType type)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_get_record\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray GetRecord(string host, DnsRecordType type, out PhpArray authNS, out PhpArray additional)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\tauthNS = null;\r\n\t\t\tadditional = null;\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region gethostbyaddr, gethostbyname, gethostbynamel\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the Internet host name corresponding to a given IP address.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ipAddress\">The IP address.</param>\r\n\t\t/// <returns>The host name or unmodified <paramref name=\"ipAddress\"/> on failure.</returns>\r\n\t\t[ImplementsFunction(\"gethostbyaddr\")]\r\n\t\tpublic static string GetHostByAddress(string ipAddress)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\treturn System.Net.Dns.GetHostEntry(ipAddress).HostName;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\treturn ipAddress;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the IP address corresponding to a given Internet host name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"hostName\">The host name.</param>\r\n\t\t/// <returns>The IP address or unmodified <paramref name=\"hostName\"/> on failure.</returns>\r\n\t\t[ImplementsFunction(\"gethostbyname\")]\r\n\t\tpublic static string GetHostByName(string hostName)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tIPAddress[] addresses = System.Net.Dns.GetHostEntry(hostName).AddressList;\r\n\t\t\t\treturn (addresses.Length > 0) ? addresses[0].ToString() : hostName;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\treturn hostName;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a list of IP addresses corresponding to a given Internet host name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"hostName\">The host name.</param>\r\n\t\t/// <returns>The list of IP addresses to which the Internet host specified by <paramref name=\"hostName\"/> resolves.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"gethostbynamel\")]\r\n\t\tpublic static PhpArray GetHostByNameList(string hostName)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tIPAddress[] addresses = System.Net.Dns.GetHostEntry(hostName).AddressList;\r\n\t\t\t\tPhpArray result = new PhpArray(addresses.Length, 0);\r\n\r\n\t\t\t\tforeach (IPAddress address in addresses)\r\n\t\t\t\t\tresult.Add(address.ToString());\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: getmxrr, dns_get_mx\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"getmxrr\")]\r\n\t\tpublic static bool GetMxRecordRow(string hostName, PhpArray mxHosts)\r\n\t\t{\r\n\t\t\treturn GetMxRecord(hostName, mxHosts); ;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"getmxrr\")]\r\n\t\tpublic static bool GetMxRecordRow(string hostName, PhpArray mxHosts, PhpArray weight)\r\n\t\t{\r\n\t\t\treturn GetMxRecord(hostName, mxHosts, weight);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_get_mx\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool GetMxRecord(string hostName, PhpArray mxHosts)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"dns_get_mx\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool GetMxRecord(string hostName, PhpArray mxHosts, PhpArray weight)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region getprotobyname, getprotobynumber, getservbyname, getservbyport, ip2long, long2ip\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns protocol number associated with a given protocol name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The protocol name.</param>\r\n\t\t/// <returns>The protocol number or <c>-1</c> if <paramref name=\"name\"/> is not found.</returns>\r\n\t\t[ImplementsFunction(\"getprotobyname\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetProtocolByName(string name)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(name)) return -1;\r\n\r\n            NetworkUtils.ProtoEnt ent = NetworkUtils.GetProtocolByName(name);\r\n\t\t\tif (ent == null) return -1;\r\n\t\t\treturn ent.p_proto;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns protocol name associated with a given protocol number.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"number\">The protocol number.</param>\r\n\t\t/// <returns>The protocol name or <B>null</B> if <paramref name=\"number\"/> is not found.</returns>\r\n\t\t[ImplementsFunction(\"getprotobynumber\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetProtocolByNumber(int number)\r\n\t\t{\r\n\t\t\tNetworkUtils.ProtoEnt ent = NetworkUtils.GetProtocolByNumber(number);\r\n\t\t\tif (ent == null) return null;\r\n\t\t\treturn ent.p_name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns port number associated with a given Internet service and protocol.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"service\">The service.</param>\r\n\t\t/// <param name=\"protocol\">The protocol.</param>\r\n\t\t/// <returns>The port number or <c>-1</c> if not found.</returns>\r\n\t\t[ImplementsFunction(\"getservbyname\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetServiceByName(string service, string protocol)\r\n\t\t{\r\n\t\t\tif (service == null) return -1;\r\n\r\n\t\t\tNetworkUtils.ServEnt ent = NetworkUtils.GetServiceByName(service, protocol);\r\n\t\t\tif (ent == null) return -1;\r\n\t\t\treturn IPAddress.NetworkToHostOrder(ent.s_port);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an Internet service that corresponds to a given port and protocol.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"port\">The port.</param>\r\n\t\t/// <param name=\"protocol\">The protocol.</param>\r\n\t\t/// <returns>The service name or <B>null</B> if not found.</returns>\r\n\t\t[ImplementsFunction(\"getservbyport\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetServiceByPort(int port, string protocol)\r\n\t\t{\r\n\t\t\tNetworkUtils.ServEnt ent = NetworkUtils.GetServiceByPort(IPAddress.HostToNetworkOrder(port), protocol);\r\n\t\t\tif (ent == null) return null;\r\n\t\t\treturn ent.s_proto;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ipAddress\">The string representation of the address.</param>\r\n\t\t/// <returns>The integer representation of the address.</returns>\r\n\t\t[ImplementsFunction(\"ip2long\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int IPToInteger(string ipAddress)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(ipAddress)) return -1;\r\n\t\t\tIPAddress addr;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\taddr = IPAddress.Parse(ipAddress);\r\n\t\t\t}\r\n\t\t\tcatch (FormatException)\r\n\t\t\t{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\tif (addr.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork) return -1;\r\n\t\t\treturn IPAddress.NetworkToHostOrder(BitConverter.ToInt32(addr.GetAddressBytes(), 0));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts an (IPv4) Internet network address into a string in Internet standard dotted format.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"properAddress\">The integer representation of the address.</param>\r\n\t\t/// <returns>The string representation of the address.</returns>\r\n\t\t[ImplementsFunction(\"long2ip\")]\r\n\t\tpublic static string IntegerToIP(int properAddress)\r\n\t\t{\r\n\t\t\tIPAddress addr;\r\n\t\t\tunchecked\r\n\t\t\t{\r\n\t\t\t\taddr = new IPAddress((long)(uint)IPAddress.HostToNetworkOrder(properAddress));\r\n\t\t\t}\r\n\t\t\treturn addr.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Objects.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Contains object-related class library functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpObjects\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Calls the method referred by <paramref name=\"methodName\"/> from the user defined\r\n\t\t/// object <paramref name=\"classNameOrObject\"/> with parameters <paramref name=\"args\"/>.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"methodName\">The name of the method.</param>\r\n\t\t/// <param name=\"classNameOrObject\">An instance to invoke the method on or a class name.</param>\r\n\t\t/// <param name=\"args\">Parameters to invoke the method with.</param>\r\n\t\t/// <returns>The method's return value (always dereferenced).</returns>\r\n        internal static object CallUserMethodInternal(DTypeDesc caller, string methodName, object classNameOrObject, ICollection args)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"call_user_method_deprecated\"));\r\n\r\n\t\t\tobject ret_val = false;\r\n\t\t\tDObject obj;\r\n\t\t\tstring class_name;\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            //DTypeDesc classContext = PhpStackTrace.GetClassContext();  // TODO: GetClassContext only if needed by context.ResolveType\r\n            if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();\r\n\r\n\t\t\tif ((obj = classNameOrObject as DObject) != null)\r\n\t\t\t{\r\n\t\t\t\t// push arguments on stack\r\n\t\t\t\tcontext.Stack.AddFrame(args);\r\n\t\t\t\tret_val = obj.InvokeMethod(methodName, caller, context);\r\n\t\t\t}\r\n\t\t\telse if ((class_name = PhpVariable.AsString(classNameOrObject)) != null)\r\n\t\t\t{\r\n\t\t\t\t// push arguments on stack\r\n\t\t\t\tcontext.Stack.AddFrame(args);\r\n\t\t\t\t\r\n\t\t\t\tResolveTypeFlags flags = ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors;\r\n                DTypeDesc type = PHP.Core.Convert.ObjectToTypeDesc(class_name, flags, caller, context, null, null);\r\n\r\n                ret_val = Operators.InvokeStaticMethod(type, methodName, null, caller, context);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"classNameOrObject\", LibResources.GetString(\"arg:not_object_or_class_name\"));\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpVariable.Dereference(ret_val);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls the method referred by <paramref name=\"methodName\"/> from the user defined\r\n\t\t/// object <paramref name=\"classNameOrObject\"/> with parameters <paramref name=\"args\"/>.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"methodName\">The name of the method.</param>\r\n\t\t/// <param name=\"classNameOrObject\">An instance to invoke the method on or a class name.</param>\r\n\t\t/// <param name=\"args\">Parameters to invoke the method with.</param>\r\n\t\t/// <returns>The method's return value (always dereferenced).</returns>\r\n        [ImplementsFunction(\"call_user_method\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static object CallUserMethod(DTypeDesc caller, string methodName, object classNameOrObject, params object[] args)\r\n\t\t{\r\n            return CallUserMethodInternal(caller, methodName, classNameOrObject, args);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls the method referred by <paramref name=\"methodName\"/> from the user defined\r\n\t\t/// object <paramref name=\"classNameOrObject\"/> with parameters <paramref name=\"args\"/>.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"methodName\">The name of the method.</param>\r\n\t\t/// <param name=\"classNameOrObject\">An instance to invoke the method on or a class name.</param>\r\n\t\t/// <param name=\"args\">Parameters to invoke the method with.</param>\r\n\t\t/// <returns>The method's return value.</returns>\r\n\t\t[ImplementsFunction(\"call_user_method_array\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static object CallUserMethodArray(DTypeDesc caller, string methodName, object classNameOrObject, PhpArray args)\r\n\t\t{\r\n            return CallUserMethodInternal(caller, methodName, classNameOrObject, ((IDictionary)args).Values);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> of default fields of a class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"className\">The name of the class.</param>\r\n\t\t/// <param name=\"parentsFirst\">Whether to list vars in PHP order (child vars then parent vars) or logical (parent vars then child).</param>\r\n\t\t/// <param name=\"includeStatic\">Specifies whether static variables should be listed as well</param>\r\n\t\t/// <returns>Array of <paramref name=\"className\"/>'s default fields.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// The resulting array elements are in the form of <c>varname => value</c>, where <c>value</c>\r\n\t\t/// is the default value of the field.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// This method returns fields declared in <paramref name=\"className\"/> and all its parent classes.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"get_class_vars\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\t[return: CastToFalse]\r\n        public static PhpArray GetClassVars(DTypeDesc caller, string className, bool parentsFirst, bool includeStatic)\r\n\t\t{\r\n\t\t\tScriptContext script_context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = script_context.ResolveType(className);\r\n\t\t\tif (type == null) return null;\r\n\r\n\t\t\t// determine the calling type\r\n            //DTypeDesc caller = PhpStackTrace.GetClassContext();\r\n            if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\t// add instance properties\r\n\t\t\tbool have_instance_props = false;\r\n\t\t\tif (!type.IsAbstract)\r\n\t\t\t{\r\n\t\t\t\t// the class has to be instantiated in order to discover default instance property values\r\n\t\t\t\t// (the constructor will initialize default properties, user defined constructor will not be called)\r\n\t\t\t\tDObject obj = type.New(script_context) as DObject;\r\n\t\t\t\tif (obj == null) return null;\r\n\r\n\t\t\t\t// populate the resulting array taking into account current caller\r\n\t\t\t\tIDictionaryEnumerator enumerator = obj.GetEnumerator(caller);\r\n\t\t\t\twhile (enumerator.MoveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(enumerator.Key, enumerator.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\thave_instance_props = true;\r\n\t\t\t}\r\n\r\n\t\t\t// add static fields (static and instance fields if the type is abstract)\r\n\t\t\tif (includeStatic)\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in type.EnumerateProperties(caller))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pair.Value.IsStatic)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult.Add(pair.Key.ToString(), pair.Value.Get(null));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!have_instance_props)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult.Add(pair.Key.ToString(), null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tresult.InplaceCopyOnReturn = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\r\n\t\t[ImplementsFunction(\"get_class_vars\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: PhpDeepCopy]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray GetClassVars(DTypeDesc caller, string className)\r\n\t\t{\r\n\t\t\treturn GetClassVars(caller, className, false, true);\r\n\t\t}\r\n\r\n        \t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> of defined fields for the specified object <paramref name=\"obj\"/>. \r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"obj\">The object whose fields are requested.</param>\r\n\t\t/// <returns>Array of <paramref name=\"obj\"/>'s fields (name => value pairs).</returns>\r\n\t\t/// <remarks>\r\n\t\t/// This method returns default fields (those declared in the class using &quot;var&quot;) declared in the\r\n\t\t/// class and all its parent classes) as well as fields added at runtime.\r\n\t\t/// </remarks>\r\n        [ImplementsFunction(\"get_object_vars\", FunctionImplOptions.NeedsClassContext)]\r\n        //[return: PhpDeepCopy]\r\n        public static PhpArray GetObjectVars(DTypeDesc caller, DObject obj)\r\n        {\r\n            return GetObjectVars(caller,obj,false);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> of defined fields for the specified object <paramref name=\"obj\"/>. \r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"obj\">The object whose fields are requested.</param>\r\n        /// <param name=\"IgnoreReferences\">References will be omited from the result</param>\r\n\t\t/// <returns>Array of <paramref name=\"obj\"/>'s fields (name => value pairs).</returns>\r\n\t\t/// <remarks>\r\n\t\t/// This method returns default fields (those declared in the class using &quot;var&quot;) declared in the\r\n\t\t/// class and all its parent classes) as well as fields added at runtime.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"get_object_vars\", FunctionImplOptions.NeedsClassContext)]\r\n        //[return: PhpDeepCopy] // already deep copied\r\n\t\tpublic static PhpArray GetObjectVars(DTypeDesc caller, DObject obj, bool IgnoreReferences)\r\n\t\t{\r\n\t\t\tif (obj == null) return null;\r\n\r\n            Converter<object, object> copy = null;\r\n\r\n            ///////////////////////////////////////\r\n            // This is hot fix for a reference counting problem when reference aren't released in same way as in PHP. \r\n            // Hence, we need to perform deep copy ignoring references\r\n            if (IgnoreReferences)\r\n                copy = (value) =>\r\n                    {\r\n                        PhpReference refValue = value as PhpReference;\r\n                        if (refValue != null)\r\n                            return copy(refValue.Value);\r\n\r\n                        PhpArray array = value as PhpArray;\r\n                        if (array != null)\r\n                        {\r\n                            PhpArray dst = new PhpArray(array.IntegerCount, array.StringCount);\r\n\r\n                            foreach (KeyValuePair<IntStringKey, object> entry in array)\r\n                            {\r\n                                // checks whether a value is a reference pointing to the instance itself:\r\n                                refValue = entry.Value as PhpReference;\r\n                                if (refValue != null && refValue.Value == array)\r\n                                {\r\n                                    // copies the value so that it will self-reference the new instance (not the old one):\r\n                                    dst.Add(entry.Key, new PhpReference(dst));\r\n                                }\r\n                                else\r\n                                {\r\n                                    dst.Add(entry.Key, copy(entry.Value));\r\n                                }\r\n                            }\r\n                            return dst;\r\n                        }\r\n\r\n                        return value;\r\n                    };\r\n            else\r\n                copy = (value) => { return PhpVariable.DeepCopy(value); };  // perform InplaceDeepCopy() here to save one more iteration through the array\r\n            ///////////////////////////////////////\r\n\r\n            PhpArray result = new PhpArray(0, obj.Count);\r\n            var foreachEnumerator = obj.GetEnumerator((caller != null && caller.IsUnknown) ? PhpStackTrace.GetClassContext() : caller);\r\n            while (foreachEnumerator.MoveNext())\r\n\t\t\t//foreach (DictionaryEntry pair in obj)\r\n\t\t\t{\r\n                DictionaryEntry pair = (DictionaryEntry)foreachEnumerator.Current;\r\n\t\t\t\tresult.Add((string)pair.Key, copy(pair.Value));\r\n\t\t\t}\r\n\r\n            //result.InplaceCopyOnReturn = true;    // already deep copied\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Verifies whether the method given by <paramref name=\"methodName\"/> has been defined for the given\r\n\t\t/// object <paramref name=\"obj\"/>. \r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"obj\">The object to test.</param>\r\n\t\t/// <param name=\"methodName\">The name of the method.</param>\r\n\t\t/// <returns><B>True</B> if the method given by <paramref name=\"methodName\"/> has been defined for the given\r\n\t\t/// object <paramref name=\"obj\"/>, <B>false</B> otherwise.</returns>\r\n        [ImplementsFunction(\"method_exists\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool MethodExists(DTypeDesc caller, object obj, string methodName)\r\n\t\t{\r\n\t\t\tif (obj == null || string.IsNullOrEmpty(methodName)) return false;\r\n\r\n            DTypeDesc dtype;\r\n            DObject dobj;\r\n            string str;\r\n\r\n            if ((dobj = (obj as DObject)) != null)\r\n            {\r\n                dtype = dobj.TypeDesc;\r\n                if (dtype == null)\r\n                {\r\n                    Debug.Fail(\"DObject.TypeDesc should not be null\");\r\n                    return false;\r\n                }\r\n            }\r\n            else if ((str = PhpVariable.AsString(obj)) != null)\r\n            {\r\n                ScriptContext script_context = ScriptContext.CurrentContext;\r\n                dtype = script_context.ResolveType(str, null, caller, null, ResolveTypeFlags.UseAutoload);\r\n                if (dtype == null)\r\n                    return false;\r\n            }\r\n            else\r\n            {\r\n                // other type names are not handled\r\n                return false;\r\n            }\r\n\r\n\t\t\tDRoutineDesc method;\r\n            return (dtype.GetMethod(new Name(methodName), dtype, out method) != GetMemberResult.NotFound);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a class name or class instance to <see cref=\"DTypeDesc\"/> object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"scriptContext\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"namingContext\">Current <see cref=\"NamingContext\"/>.</param>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The class name or class instance (<see cref=\"DObject\"/>).</param>\r\n\t\t/// <param name=\"useAutoload\"><B>True</B> iff the <c>__autoload</c> magic function should be used.</param>\r\n\t\t/// <returns>The type desc that corresponds to <paramref name=\"classNameOrObject\"/> or <B>null</B>\r\n\t\t/// if the type could not be found or <paramref name=\"classNameOrObject\"/> is neither a string\r\n\t\t/// nor <see cref=\"DObject\"/>.</returns>\r\n\t\tinternal static DTypeDesc ClassNameOrObjectToType(ScriptContext/*!*/ scriptContext, NamingContext namingContext,\r\n\t\t\tDTypeDesc caller, object classNameOrObject, bool useAutoload)\r\n\t\t{\r\n\t\t\tstring class_name = PhpVariable.AsString(classNameOrObject);\r\n\t\t\tif (class_name != null)\r\n\t\t\t{\r\n\t\t\t\t// lookup the Type\r\n\t\t\t\treturn scriptContext.ResolveType(class_name, namingContext, caller, null,\r\n\t\t\t\t\t(useAutoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDObject obj = classNameOrObject as DObject;\r\n\t\t\t\tif (obj != null) return obj.TypeDesc;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Verifies whether the property given by <paramref name=\"propertyName\"/> has been defined for the given\r\n\t\t/// object object or class. \r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"classNameOrObject\">The object (<see cref=\"DObject\"/>) or the name of a class\r\n\t\t/// (<see cref=\"String\"/>).</param>\r\n\t\t/// <param name=\"propertyName\">The name of the property.</param>\r\n\t\t/// <returns><B>True</B> if the property given by <paramref name=\"propertyName\"/> has been defined for the\r\n\t\t/// given class or object and is accessible from current class context.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// This function has different semantics than <see cref=\"MethodExists\"/>, which ignores visibility.\r\n\t\t/// If an object is passed in the first parameter, the property is searched among runtime fields as well.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"property_exists\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool PropertyExists(DTypeDesc caller, object classNameOrObject, string propertyName)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true);\r\n\t\t\tif (type == null) return false;\r\n\r\n\t\t\t// determine the calling class context\r\n\t\t\t//DTypeDesc caller = PhpStackTrace.GetClassContext();\r\n            if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();\r\n\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tif (type.GetProperty(new VariableName(propertyName), caller, out property) == GetMemberResult.OK)\r\n\t\t\t{\r\n\t\t\t\t// CT property was found\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// search RT fields, if possible\r\n\t\t\t\tDObject obj = classNameOrObject as DObject;\r\n\t\t\t\treturn (obj != null && obj.RuntimeFields != null && obj.RuntimeFields.ContainsKey(propertyName));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns all methods defined in the specified class or class of specified object, and its predecessors.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n\t\t/// <param name=\"classNameOrObject\">The object (<see cref=\"DObject\"/>) or the name of a class\r\n\t\t/// (<see cref=\"String\"/>).</param>\r\n\t\t/// <returns>Array of all methods defined in <paramref name=\"classNameOrObject\"/>.</returns>\r\n\t\t[ImplementsFunction(\"get_class_methods\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static PhpArray GetClassMethods(DTypeDesc caller, object classNameOrObject)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true);\r\n\t\t\tif (type == null) return null;\r\n\r\n\t\t\t// determine the calling type\r\n\t\t\t//DTypeDesc caller = PhpStackTrace.GetClassContext();\r\n            if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tforeach (KeyValuePair<Name, DRoutineDesc> pair in type.EnumerateMethods(caller))\r\n\t\t\t{\r\n\t\t\t\tresult.Add(pair.Key.ToString());\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with names of all defined classes (system and user).\r\n\t\t/// </summary>\r\n\t\t/// <returns><see cref=\"PhpArray\"/> of class names.</returns>\r\n\t\t[ImplementsFunction(\"get_declared_classes\")]\r\n\t\tpublic static PhpArray GetDeclaredClasses()\r\n\t\t{\r\n\t\t\treturn (PhpArray)ScriptContext.CurrentContext.GetDeclaredClasses(new PhpArray());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with names of all defined interfaces (system and user).\r\n\t\t/// </summary>\r\n\t\t/// <returns><see cref=\"PhpArray\"/> of interface names.</returns>\r\n\t\t[ImplementsFunction(\"get_declared_interfaces\")]\r\n\t\tpublic static PhpArray GetDeclaredInterfaces()\r\n\t\t{\r\n\t\t\treturn (PhpArray)ScriptContext.CurrentContext.GetDeclaredInterfaces(new PhpArray());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests whether the class given by <paramref name=\"classNameOrObject\"/> is derived from a class given\r\n\t\t/// by <paramref name=\"baseClassName\"/>.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The object (<see cref=\"DObject\"/>) or the name of a class\r\n\t\t/// (<see cref=\"String\"/>).</param>\r\n\t\t/// <param name=\"baseClassName\">The name of the (base) class.</param>\r\n\t\t/// <returns><B>true</B> if <paramref name=\"classNameOrObject\"/> implements or extends <paramref name=\"baseClassName\"/>,\r\n\t\t/// <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"is_subclass_of\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool IsSubclassOf(DTypeDesc caller, object classNameOrObject, string baseClassName)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tDTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true);\r\n\t\t\tif (type == null) return false;\r\n\r\n\t\t\t// look for the class, do not use autoload (since PHP 5.1):\r\n            DTypeDesc base_type = context.ResolveType(baseClassName, null, caller, null, ResolveTypeFlags.None); // do not call autoload [workitem:26664]\r\n\t\t\tif (base_type == null) return false;\r\n\r\n\t\t\treturn (base_type.RealType.IsAssignableFrom(type.RealType) && base_type != type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests whether a given class is defined.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller class context to resolve visibility.</param>\r\n\t\t/// <param name=\"className\">The name of the class.</param>\r\n\t\t/// <returns><B>true</B> if the class given by <paramref name=\"className\"/> has been defined,\r\n\t\t/// <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"class_exists\", FunctionImplOptions.NeedsClassContext)]\r\n        [PureFunction(typeof(PhpObjects), \"ClassExists_Analyze_1\")]\r\n        public static bool ClassExists(DTypeDesc caller, string className)\r\n\t\t{\r\n\t\t\treturn ClassExists(caller, className, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests whether a given class is defined.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller class context to resolve visibility.</param>\r\n        /// <param name=\"className\">The name of the class.</param>\r\n\t\t/// <param name=\"autoload\">Whether to attempt to call <c>__autoload</c>.</param>\r\n\t\t/// <returns><B>true</B> if the class given by <paramref name=\"className\"/> has been defined,\r\n\t\t/// <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"class_exists\", FunctionImplOptions.NeedsClassContext)]\r\n        [PureFunction(typeof(PhpObjects), \"ClassExists_Analyze_2\")]\r\n        public static bool ClassExists(DTypeDesc caller, string className, bool autoload)\r\n\t\t{\r\n\t\t\tDTypeDesc type = ScriptContext.CurrentContext.ResolveType(className, null, caller, null, autoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None);\r\n\t\t\treturn type != null;\r\n        }\r\n\r\n        #region analyzer of class_exists\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo ClassExists_Analyze_2(Analyzer analyzer, string name, bool autoload)\r\n        {\r\n            // ignore autoload at the compile time\r\n            return ClassExists_Analyze_1(analyzer, name);\r\n        }\r\n\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo ClassExists_Analyze_1(Analyzer analyzer, string name)\r\n        {\r\n            QualifiedName? alias;\r\n\r\n            DType type = analyzer.SourceUnit.ResolveTypeName(\r\n                new QualifiedName(new Name(name)),\r\n                analyzer.CurrentScope,\r\n                out alias,\r\n                null,\r\n                PHP.Core.Text.Span.Invalid,\r\n                false);\r\n\r\n            if (type == null || type.IsUnknown)\r\n                return null;  // type is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc).\r\n\r\n            return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n            {\r\n                value = true    // type is definitely known the the compilation time\r\n            };\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Tests whether a given interface is defined.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context of the caller.</param>\r\n\t\t/// <param name=\"ifaceName\">The name of the interface.</param>\r\n\t\t/// <returns><B>true</B> if the interface given by <paramref name=\"ifaceName\"/> has been defined,\r\n\t\t/// <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"interface_exists\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool InterfaceExists(DTypeDesc caller, string ifaceName)\r\n\t\t{\r\n\t\t\treturn InterfaceExists(caller, ifaceName, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests whether a given interface is defined.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context of the caller.</param>\r\n        /// <param name=\"ifaceName\">The name of the interface.</param>\r\n\t\t/// <param name=\"autoload\">Whether to attempt to call <c>__autoload</c>.</param>\r\n\t\t/// <returns><B>true</B> if the interface given by <paramref name=\"ifaceName\"/> has been defined,\r\n\t\t/// <B>false</B> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"interface_exists\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool InterfaceExists(DTypeDesc caller, string ifaceName, bool autoload)\r\n\t\t{\r\n            DTypeDesc type = ScriptContext.CurrentContext.ResolveType(ifaceName, null, caller, null, autoload ? ResolveTypeFlags.UseAutoload : ResolveTypeFlags.None);\r\n\t\t\treturn type != null && type.IsInterface;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Returns the name of the current class.\r\n        /// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        /// <returns>Current class name.</returns>\r\n        [ImplementsFunction(\"get_class\", FunctionImplOptions.NeedsClassContext)]\r\n        [return: CastToFalse]\r\n        public static string GetClass(DTypeDesc caller)\r\n        {\r\n            if (caller == null || caller.IsUnknown)\r\n                return null;\r\n\r\n            return caller.MakeFullName();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the class of which the object <paramref name=\"var\"/> is an instance.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"var\">The object whose class is requested.</param>\r\n\t\t/// <returns><paramref name=\"var\"/>'s class name or current class name if <paramref name=\"var\"/> is\r\n\t\t/// <B>null</B>.</returns>\r\n\t\t[ImplementsFunction(\"get_class\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetClass(DTypeDesc caller, object var)\r\n\t\t{\r\n            if (var == null)\r\n                return GetClass(caller);\r\n\r\n\t\t\tDObject obj = var as DObject;\r\n\t\t\treturn (obj != null) ? obj.TypeName : null;\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"get_called_class\", FunctionImplOptions.NeedsLateStaticBind)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetCalledClass(DTypeDesc caller)\r\n\t\t{\r\n            if (caller == null || caller.IsUnknown)\r\n                return null;\r\n\r\n            return caller.MakeFullName();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the name of the class from which class given by <paramref name=\"classNameOrObject\"/>\r\n\t\t/// inherits.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The object (<see cref=\"DObject\"/>) or the name of a class\r\n\t\t/// (<see cref=\"String\"/>).</param>\r\n\t\t/// <returns>If <paramref name=\"classNameOrObject\"/> is an <see cref=\"DObject\"/>, returns the name\r\n\t\t/// of the parent class of the class of which <paramref name=\"classNameOrObject\"/> is an instance.\r\n\t\t/// If <paramref name=\"classNameOrObject\"/> is a <see cref=\"String\"/>, returns the name of the parent\r\n\t\t/// class of the class with that name.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If the class given by <paramref name=\"classNameOrObject\"/> has no parent in PHP class hierarchy,\r\n\t\t/// this method returns <B>null</B>.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"get_parent_class\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n        [PureFunction(typeof(PhpObjects), \"GetParentClass_Analyze\")]\r\n\t\tpublic static string GetParentClass(DTypeDesc caller, object classNameOrObject)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n            DTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, true);\r\n\t\t\tif (type == null || type.IsInterface) return null;\r\n\r\n\t\t\tDTypeDesc parent_type = type.Base;\r\n\t\t\treturn (parent_type == null ? null : parent_type.MakeFullName());\r\n\t\t}\r\n\r\n        #region analyzer of get_parent_class\r\n\r\n        [return: CastToFalse]\r\n        public static PHP.Core.Compiler.AST.FunctionCallEvaluateInfo GetParentClass_Analyze(Analyzer analyzer, string name)\r\n        {\r\n            QualifiedName? alias;\r\n\r\n            DType type = analyzer.SourceUnit.ResolveTypeName(\r\n                new QualifiedName(new Name(name)),\r\n                analyzer.CurrentScope,\r\n                out alias,\r\n                null,\r\n                PHP.Core.Text.Span.Invalid,\r\n                false);\r\n\r\n            if (type == null || type.IsUnknown)\r\n                return null;  // type is not known at the compilation time. However it can be defined at the runtime (dynamic include, script library, etc).\r\n\r\n            // type is definitely known the the compilation time\r\n            var parent_type = type.Base;\r\n            return new PHP.Core.Compiler.AST.FunctionCallEvaluateInfo()\r\n            {\r\n                value = (parent_type == null ? null : parent_type.FullName)\r\n            };\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests whether <paramref name=\"obj\"/>'s class is derived from a class given by <paramref name=\"className\"/>.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"obj\">The object to test.</param>\r\n\t\t/// <param name=\"className\">The name of the class.</param>\r\n\t\t/// <returns><B>true</B> if the object <paramref name=\"obj\"/> belongs to <paramref name=\"className\"/> class or\r\n\t\t/// a class which is a subclass of <paramref name=\"className\"/>, <B>false</B> otherwise.</returns>\r\n        [ImplementsFunction(\"is_a\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool IsA(DTypeDesc caller, object obj, string className)\r\n\t\t{\r\n\t\t\tif (obj == null || !(obj is DObject)) return false;\r\n\r\n            DObject dobj = (DObject)obj;\r\n            DTypeDesc type = ScriptContext.CurrentContext.ResolveType(className, null, caller, null, ResolveTypeFlags.None);    // do not call autoload [workitem:26664]\r\n\t\t\tif (type == null) return false;\r\n\r\n\t\t\treturn type.IsAssignableFrom(dobj.TypeDesc);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with keys and values being names of a given class's\r\n\t\t/// base classes.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The <see cref=\"DObject\"/> or class name to get base classes of.</param>\r\n\t\t/// <param name=\"useAutoload\"><B>True</B> if the magic <c>__autoload</c> function should be used.</param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> with base class names.</returns>\r\n\t\t[ImplementsFunction(\"class_parents\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n        public static PhpArray GetClassParents(DTypeDesc caller, object classNameOrObject, bool useAutoload)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, useAutoload);\r\n\t\t\tif (type == null || type.IsInterface) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\twhile ((type = type.Base) != null)\r\n\t\t\t{\r\n\t\t\t\tstring class_name = type.MakeFullName();\r\n\t\t\t\tresult.Add(class_name, class_name);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with keys and values being names of a given class's\r\n\t\t/// base classes.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The <see cref=\"DObject\"/> or class name to get base classes of.</param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> with base class names.</returns>\r\n        [ImplementsFunction(\"class_parents\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n        public static PhpArray GetClassParents(DTypeDesc caller, object classNameOrObject)\r\n\t\t{\r\n\t\t\treturn GetClassParents(caller, classNameOrObject, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with keys and values being names of interfaces implemented by a given\r\n\t\t/// class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The <see cref=\"DObject\"/> or class name to get implemented interfaces of.\r\n\t\t/// <param name=\"useAutoload\"><B>True</B> if the magic <c>__autoload</c> function should be used.</param>\r\n\t\t/// </param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> with interface names.</returns>\r\n        [ImplementsFunction(\"class_implements\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n        public static PhpArray GetClassInterfaces(DTypeDesc caller, object classNameOrObject, bool useAutoload)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tDTypeDesc type = ClassNameOrObjectToType(context, null, caller, classNameOrObject, useAutoload);\r\n\t\t\tif (type == null) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tDTypeDesc[] interfaces = type.GetImplementedInterfaces();\r\n\t\t\tfor (int i = 0; i < interfaces.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring iface_name = interfaces[i].MakeFullName();\r\n\t\t\t\tresult[iface_name] = iface_name;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpArray\"/> with keys and values being names of interfaces implemented by a given\r\n\t\t/// class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The caller of the method to resolve visible properties properly. Can be UnknownTypeDesc.</param>\r\n        /// <param name=\"classNameOrObject\">The <see cref=\"DObject\"/> or class name to get implemented interfaces of.\r\n\t\t/// </param>\r\n\t\t/// <returns>The <see cref=\"PhpArray\"/> with interface names.</returns>\r\n        [ImplementsFunction(\"class_implements\", FunctionImplOptions.NeedsClassContext)]\r\n\t\t[return: CastToFalse]\r\n        public static PhpArray GetClassInterfaces(DTypeDesc caller, object classNameOrObject)\r\n\t\t{\r\n\t\t\treturn GetClassInterfaces(caller, classNameOrObject, true);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Output.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// PHP output control functions implementation. \r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtCore)] \r\n\tpublic static class Output\r\n\t{\r\n\t\t[Flags]\r\n\t\tpublic enum _ChunkPosition\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"PHP_OUTPUT_HANDLER_START\")]\r\n\t\t\tFirst = BufferedOutput.ChunkPosition.First,\r\n\t\t\t[ImplementsConstant(\"PHP_OUTPUT_HANDLER_CONT\")]\r\n\t\t\tMiddle = BufferedOutput.ChunkPosition.Middle,\r\n\t\t\t[ImplementsConstant(\"PHP_OUTPUT_HANDLER_END\")]\r\n\t\t\tLast = BufferedOutput.ChunkPosition.Last\r\n\t\t}\r\n\r\n\t\t#region fprintf, vprintf\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates output according to the specified formatting string.\r\n\t\t/// </summary>\r\n        /// <param name=\"format\">The formatting string. See also the <b>sprintf</b> function (<see cref=\"PhpStrings.Format\"/>).</param>\r\n\t\t/// <param name=\"args\">Variables to format.</param>\r\n        /// <returns>Returns the length of the outputted string. </returns>\r\n\t\t[ImplementsFunction(\"printf\")]\r\n\t\tpublic static int PrintFormatted(string format, params object[] args)\r\n\t\t{\r\n            string formattedString = PhpStrings.FormatInternal(format, args);\r\n\r\n            ScriptContext.CurrentContext.Output.Write(formattedString);\r\n\r\n            return formattedString.Length;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates output according to the specified formatting string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"format\">The formatting string.</param>\r\n\t\t/// <param name=\"args\">Array of variables to format.</param>\r\n        /// <returns>Returns the length of the outputted string. </returns>\r\n\t\t[ImplementsFunction(\"vprintf\")]\r\n\t\tpublic static int PrintFormatted(string format, PhpArray args)\r\n\t\t{\r\n            string formattedString = PhpStrings.Format(format, args);\r\n\r\n\t\t\tScriptContext.CurrentContext.Output.Write(formattedString);\r\n\r\n            return formattedString.Length;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_start\r\n\r\n\t\t/// <summary>\r\n\t\t/// Increases the level of buffering and enables output buffering if disabled.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Always true.</returns>\r\n\t\t[ImplementsFunction(\"ob_start\")]\r\n\t\tpublic static bool Start()\r\n\t\t{\r\n\t\t\treturn Start(null, 0, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback\r\n\t\t/// to the new level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filtering callback. Ignores invalid callbacks.</param>\r\n\t\t/// <returns>Whether the filter is empty or a valid callback.</returns>\r\n\t\t[ImplementsFunction(\"ob_start\")]\r\n\t\tpublic static bool Start(PhpCallback filter)\r\n\t\t{\r\n\t\t\treturn Start(filter, 0, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback\r\n\t\t/// to the new level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filtering callback. Ignores invalid callbacks.</param>\r\n\t\t/// <param name=\"chunkSize\">Not supported.</param>\r\n\t\t/// <returns>Whether the filter is empty or a valid callback.</returns>\r\n\t\t[ImplementsFunction(\"ob_start\")]\r\n\t\tpublic static bool Start(PhpCallback filter, int chunkSize)\r\n\t\t{\r\n\t\t\treturn Start(filter, chunkSize, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Increases the level of buffering, enables output buffering if disabled and assignes the filtering callback\r\n\t\t/// to the new level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filtering callback. Ignores invalid callbacks.</param>\r\n\t\t/// <param name=\"chunkSize\">Not supported.</param>\r\n\t\t/// <param name=\"erase\">Not supported.</param>\r\n\t\t/// <returns>Whether the filter is valid callback.</returns>\r\n\t\t[ImplementsFunction(\"ob_start\")]\r\n\t\tpublic static bool Start(PhpCallback filter, int chunkSize, bool erase)\r\n\t\t{\r\n\t\t\tif (chunkSize != 0)\r\n\t\t\t\tPhpException.ArgumentValueNotSupported(\"chunkSize\", \"!= 0\");\r\n\t\t\tif (!erase)\r\n\t\t\t\tPhpException.ArgumentValueNotSupported(\"erase\", erase);\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tcontext.BufferedOutput.IncreaseLevel();\r\n\r\n\t\t\tbool result = true;\r\n\r\n\t\t\t// skips filter setting if filter is not specified or valid:\r\n\t\t\tif (filter != null && (result = filter.Bind()))\r\n\t\t\t\tcontext.BufferedOutput.SetFilter(filter);\r\n\r\n\t\t\tcontext.IsOutputBuffered = true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_clean, ob_end_clean, ob_end_flush\r\n\r\n\t\t/// <summary>\r\n\t\t/// Discards the contents of the current level of buffering.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ob_clean\")]\r\n\t\tpublic static void Clean()\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.BufferedOutput.Clean();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Discards the contents of the current level of buffering and decreases the level.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the content was discarded and the level was decreased.</returns>\r\n\t\t[ImplementsFunction(\"ob_end_clean\")]\r\n\t\tpublic static bool EndAndClean()\r\n\t\t{\r\n\t\t\treturn EndInternal(ScriptContext.CurrentContext, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes the contents of the current level of buffering and decreases the level.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the content was discarded and the level was decreased.</returns>\r\n\t\t[ImplementsFunction(\"ob_end_flush\")]\r\n\t\tpublic static bool EndAndFlush()\r\n\t\t{\r\n\t\t\treturn EndInternal(ScriptContext.CurrentContext, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decreases the level of buffering and discards or flushes data on the current level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current script context.</param>\r\n\t\t/// <param name=\"flush\">Whether to flush data.</param>\r\n\t\t/// <returns>Whether the content was discarded and the level was decreased.</returns>\r\n\t\tprivate static bool EndInternal(ScriptContext/*!*/ context, bool flush)\r\n\t\t{\r\n\t\t\tBufferedOutput buf = context.BufferedOutput;\r\n\r\n\t\t\tif (buf.Level == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, CoreResources.GetString(\"output_buffering_disabled\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (buf.DecreaseLevel(flush) < 0)\r\n\t\t\t\tcontext.IsOutputBuffered = false;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_get_clean, ob_get_contents, ob_get_flush, ob_get_level, ob_get_length, ob_get_status\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the contents of the current buffer and cleans it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The content of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_clean\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object GetAndClean()\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tBufferedOutput bo = context.BufferedOutput;\r\n\r\n\t\t\tobject result = bo.GetContent();\r\n\t\t\tbo.Clean();\r\n\t\t\tEndInternal(context, true);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the content of the current buffer.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The content of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object GetContents()\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.BufferedOutput.GetContent();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the content of the current buffer and decreases the level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The content of the buffer.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_flush\")]\r\n\t\tpublic static object GetAndFlush()\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tBufferedOutput bo = context.BufferedOutput;\r\n\r\n\t\t\tobject result = bo.GetContent();\r\n\t\t\tEndInternal(context, true);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The level of buffering.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_level\")]\r\n\t\tpublic static int GetLevel()\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.BufferedOutput.Level;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the length of the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The length of the contents in the output buffer or <B>false</B>, if output buffering isn't active.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_length\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int GetLength()\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.BufferedOutput.Length;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the status of the current or all output buffers.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array of name => value pairs containing information.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_status\")]\r\n\t\tpublic static PhpArray GetStatus()\r\n\t\t{\r\n\t\t\treturn GetStatus(false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the status of the current or all output buffers.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"full\">Whether to retrieve extended information about all levels of buffering or about the current one.</param>\r\n\t\t/// <returns>The array of name => value pairs containing information.</returns>\r\n\t\t[ImplementsFunction(\"ob_get_status\")]\r\n\t\tpublic static PhpArray GetStatus(bool full)\r\n\t\t{\r\n\t\t\tBufferedOutput bo = ScriptContext.CurrentContext.BufferedOutput;\r\n\t\t\tPhpArray result;\r\n\r\n\t\t\tif (full)\r\n\t\t\t{\r\n\t\t\t\tresult = new PhpArray(bo.Level, 0);\r\n\t\t\t\tfor (int i = 1; i <= bo.Level; i++)\r\n\t\t\t\t\tresult.Add(i, GetLevelStatus(bo, i));\r\n\t\t\t}\r\n\t\t\telse if (bo.Level > 0)\r\n\t\t\t{\r\n\t\t\t\tresult = GetLevelStatus(bo, bo.Level);\r\n\t\t\t\tresult.Add(\"level\", bo.Level);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tresult = new PhpArray(0, 0);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate static PhpArray/*!*/ GetLevelStatus(BufferedOutput/*!*/ bo, int index)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(0, 3);\r\n\r\n\t\t\tPhpCallback filter;\r\n\t\t\tint size;\r\n\t\t\tbo.GetLevelInfo(index, out filter, out size);\r\n\r\n\t\t\tif (filter != null)\r\n\t\t\t{\r\n\t\t\t\tresult.Add(\"type\", 1);\r\n\t\t\t\tresult.Add(\"name\", ((IPhpConvertible)filter).ToString());\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult.Add(\"type\", 0);\r\n\t\t\t}\r\n\t\t\tresult.Add(\"buffer_size\", size);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region flush, ob_flush\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flush the output buffer of the HTTP server. Has no effect on data buffered in Phalanger output buffers.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"flush\")]\r\n\t\tpublic static void FlushHttpBuffers()\r\n\t\t{\r\n\t\t\tHttpContext http_context = HttpContext.Current;\r\n\t\t\tif (http_context != null) http_context.Response.Flush();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes data from the current level of buffering to the previous one or to the client \r\n\t\t/// if the current one is the first one. Applies the filter assigned to the current level (if any).\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"ob_flush\")]\r\n\t\tpublic static void FlushOutputBuffer()\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.BufferedOutput.Flush();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_implicit_flush\r\n\r\n\t\t/// <summary>\r\n\t\t/// Switches implicit flushing on. \r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Affects the current script context.</remarks>\r\n        [ImplementsFunction(\"ob_implicit_flush\")]\r\n\t\tpublic static void ImplicitFlush()\r\n\t\t{\r\n\t\t\tHttpContext http_context = HttpContext.Current;\r\n\t\t\tif (http_context != null) http_context.Response.BufferOutput = true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Switches implicit flushing on or off.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doFlush\">Do flush implicitly?</param>\r\n\t\t/// <remarks>\r\n\t\t/// Affects the current script context.\r\n\t\t///\r\n\t\t/// There is a bug in the PHP implementation of this function: \r\n\t\t/// \"Turning implicit flushing on will disable output buffering, the output buffers current output \r\n\t\t/// will be sent as if ob_end_flush() had been called.\"\r\n\t\t/// Actually, this is not true (PHP doesn't do that) and in fact it is nonsense because \r\n\t\t/// ob_end_flush only flushes and destroys one level of buffering. \r\n\t\t/// It would be more meaningful if ob_implicit_flush function had flushed and destroyed all existing buffers\r\n\t\t/// and so disabled output buffering. \r\n\t\t/// </remarks>  \r\n\t\t[ImplementsFunction(\"ob_implicit_flush\")]\r\n\t\tpublic static void ImplicitFlush(bool doFlush)\r\n\t\t{\r\n\t\t\tHttpContext http_context = HttpContext.Current;\r\n\t\t\tif (http_context != null) http_context.Response.BufferOutput = doFlush;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_list_handlers\r\n\r\n\t\t[ImplementsFunction(\"ob_list_handlers\")]\r\n\t\tpublic static PhpArray GetHandlers()\r\n\t\t{\r\n\t\t\tBufferedOutput bo = ScriptContext.CurrentContext.BufferedOutput;\r\n\t\t\tPhpArray result = new PhpArray(bo.Level, 0);\r\n\r\n\t\t\tfor (int i = 0; i < bo.Level; i++)\r\n\t\t\t{\r\n\t\t\t\tresult.Add(bo.GetLevelName(i));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ob_gzhandler\r\n\r\n        ///// <summary>\r\n        ///// Compresses data by gzip compression. Not supported.\r\n        ///// </summary>\r\n        ///// <param name=\"data\">Data to compress.</param>\r\n        ///// <returns>Compressed data.</returns>\r\n        //[ImplementsFunction(\"ob_gzhandler\")]\r\n        //public static PhpBytes GzipHandler(string data)\r\n        //{\r\n        //    return GzipHandler(data, 4);\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Available content encodings.\r\n        /// </summary>\r\n        /// <remarks>Values correspond to \"content-encoding\" response header.</remarks>\r\n        private enum ContentEncoding\r\n        {\r\n            gzip, deflate\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compresses data by gzip compression.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">Data to be compressed.</param>\r\n\t\t/// <param name=\"mode\">Compression mode.</param>\r\n\t\t/// <returns>Compressed data.</returns>\r\n        /// <remarks>The function does not support subsequent calls to compress more chunks of data subsequentally.</remarks>\r\n        [ImplementsFunction(\"ob_gzhandler\")]\r\n        [return: CastToFalse]\r\n        public static object GzipHandler(object data, int mode)\r\n        {\r\n            // TODO: mode is not passed by Core properly. Therefore it is not possible to make subsequent calls to this handler.\r\n            // Otherwise headers of ZIP stream will be mishmashed.\r\n\r\n            // check input data\r\n            if (data == null) return null;\r\n\r\n            // check if we are running web application\r\n            var httpcontext = HttpContext.Current;\r\n            System.Collections.Specialized.NameValueCollection headers;\r\n            if (httpcontext == null ||\r\n                httpcontext.Request == null ||\r\n                (headers = httpcontext.Request.Headers) == null)\r\n                return data;\r\n\r\n            // check if compression is supported by browser\r\n            string acceptEncoding = headers[\"Accept-Encoding\"];\r\n\r\n            if (acceptEncoding != null)\r\n            {\r\n                acceptEncoding = acceptEncoding.ToLower(System.Globalization.CultureInfo.InvariantCulture);\r\n\r\n                if (acceptEncoding.Contains(\"gzip\"))\r\n                    return DoGzipHandler(data, httpcontext, ContentEncoding.gzip);\r\n\r\n                if (acceptEncoding.Contains(\"*\") || acceptEncoding.Contains(\"deflate\"))\r\n                    return DoGzipHandler(data, httpcontext, ContentEncoding.deflate);\r\n            }\r\n\r\n            return data;\r\n\r\n            /*\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            bool do_start = (((BufferedOutput.ChunkPosition)mode) & BufferedOutput.ChunkPosition.First) != 0;\r\n            bool do_end = (((BufferedOutput.ChunkPosition)mode) & BufferedOutput.ChunkPosition.Last) != 0;\r\n\r\n            // redirects output to the sink to allow error reporting:\r\n            context.IsOutputBuffered = false;\r\n            PhpException.FunctionNotSupported(PhpError.Notice);\r\n            context.IsOutputBuffered = true;\r\n\r\n            if (data == null) return null;\r\n            return new PhpBytes(Configuration.Application.Globalization.PageEncoding.GetBytes(data));*/\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compress given data using compressor named in contentEncoding. Set the response header accordingly.\r\n        /// </summary>\r\n        /// <param name=\"data\">PhpBytes or string to be compressed.</param>\r\n        /// <param name=\"httpcontext\">Current HttpContext.</param>\r\n        /// <param name=\"contentEncoding\">gzip or deflate</param>\r\n        /// <returns>Byte stream of compressed data.</returns>\r\n        private static PhpBytes DoGzipHandler(object data, HttpContext/*!*/httpcontext, ContentEncoding contentEncoding)\r\n        {\r\n            PhpBytes phpbytes = data as PhpBytes;\r\n\r\n            var inputbytes = (phpbytes != null) ?\r\n                phpbytes.ReadonlyData :\r\n                Configuration.Application.Globalization.PageEncoding.GetBytes(PHP.Core.Convert.ObjectToString(data));\r\n\r\n            using (var outputStream = new System.IO.MemoryStream())\r\n            {\r\n                System.IO.Stream compressionStream;\r\n                switch (contentEncoding)\r\n                {\r\n                    case ContentEncoding.gzip:\r\n                        compressionStream = new System.IO.Compression.GZipStream(outputStream, System.IO.Compression.CompressionMode.Compress);\r\n                        break;\r\n                    case ContentEncoding.deflate:\r\n                        compressionStream = new System.IO.Compression.DeflateStream(outputStream, System.IO.Compression.CompressionMode.Compress);\r\n                        break;\r\n                    default:\r\n                        throw new ArgumentException(\"Not recognized content encoding to be compressed to.\", \"contentEncoding\");\r\n                }\r\n\r\n                using (compressionStream)\r\n                {\r\n                    compressionStream.Write(inputbytes, 0, inputbytes.Length);\r\n                }\r\n\r\n                //Debug.Assert(\r\n                //    ScriptContext.CurrentContext.Headers[\"content-encoding\"] != contentEncoding,\r\n                //    \"The content encoding was already set to '\" + contentEncoding + \"'. The ob_gzhandler() was called subsequently probably.\");\r\n\r\n                ScriptContext.CurrentContext.Headers[\"content-encoding\"] = contentEncoding.ToString();\r\n\r\n                return new PhpBytes(outputStream.ToArray());\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpFormatter.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Security;\r\nusing System.Security.Permissions;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.Serialization.Formatters;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implements a PHP-compatible formatter (serializer).\r\n\t/// </summary>\r\n\tpublic sealed class PhpFormatter : IFormatter\r\n\t{\r\n\t\t#region Tokens\r\n\r\n\t\t/// <summary>\r\n\t\t/// Contains definition of (one-character) tokens that constitute PHP serialized data.\r\n\t\t/// </summary>\r\n\t\tinternal class Tokens\r\n\t\t{\r\n\t\t\tinternal const char BraceOpen = '{';\r\n\t\t\tinternal const char BraceClose = '}';\r\n\t\t\tinternal const char Colon = ':';\r\n\t\t\tinternal const char Semicolon = ';';\r\n\t\t\tinternal const char Quote = '\"';\r\n\r\n\t\t\tinternal const char Null = 'N';\r\n\t\t\tinternal const char Boolean = 'b';\r\n\t\t\tinternal const char Integer = 'i';\r\n\t\t\tinternal const char Double = 'd';\r\n\t\t\tinternal const char String = 's';\r\n\t\t\tinternal const char Array = 'a';\r\n\t\t\tinternal const char Object = 'O'; // instance of a class that does not implement SPL.Serializable\r\n\t\t\tinternal const char ObjectSer = 'C'; // instance of a class that implements SPL.Serializable\r\n            internal const char ClrObject = 'T';    // instance of CLR object, serialized using binary formatter\r\n\r\n\t\t\tinternal const char Reference = 'R'; // &-like reference\r\n\t\t\tinternal const char ObjectRef = 'r'; // same instance reference (PHP5 object semantics)\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements the serialization functionality. Serializes an object, or graph of objects\r\n\t\t/// with the given root to the provided <see cref=\"StreamWriter\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal class ObjectWriter : Serializer.ClassContextHolder\r\n\t\t{\r\n\t\t\t#region Fields and Properties\r\n\r\n\t\t\tprivate ScriptContext/*!*/ context;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The stream writer to write serialized data to.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate StreamWriter/*!*/ writer;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Object ID counter used by the <B>r</B> and <B>R</B> tokens.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate int sequenceNumber;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Maintains a sequence number for every <see cref=\"DObject\"/> and <see cref=\"PhpReference\"/>\r\n\t\t\t/// that have already been serialized.\r\n\t\t\t/// </summary>\r\n            private Dictionary<object, int> serializedRefs { get { return _serializedRefs ?? (_serializedRefs = new Dictionary<object, int>()); } }\r\n\t\t\tprivate Dictionary<object, int> _serializedRefs;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"ObjectWriter\"/> with a given <see cref=\"StreamWriter\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"context\">The current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t\t/// <param name=\"writer\">The writer to write serialized data to.</param>\r\n            /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n            internal ObjectWriter(ScriptContext/*!*/ context, StreamWriter/*!*/ writer, DTypeDesc caller)\r\n                : base(caller)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(context != null && writer != null);\r\n\t\t\t\tthis.context = context;\r\n\t\t\t\tthis.writer = writer;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Serialize and Write*\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes an object or graph of objects to <see cref=\"writer\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"graph\">The object (graph) to serialize.</param>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This is just a switch over <paramref name=\"graph\"/>'s type that delegates the task\r\n\t\t\t/// to one of <see cref=\"WriteNull\"/>, <see cref=\"WriteBoolean\"/>, <see cref=\"WriteInteger\"/>,\r\n\t\t\t/// <see cref=\"WriteDouble\"/>, <see cref=\"WriteString\"/>, <see cref=\"WriteReference\"/>,\r\n\t\t\t/// <see cref=\"WriteBinaryData\"/>, <see cref=\"WriteArray\"/> and <see cref=\"WriteObject\"/>.\r\n\t\t\t/// </remarks>\r\n\t\t\tinternal void Serialize(object graph)\r\n\t\t\t{\r\n\t\t\t\tsequenceNumber++;\r\n\r\n\t\t\t\tif (graph == null) WriteNull();\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (Type.GetTypeCode(graph.GetType()))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase TypeCode.Boolean: WriteBoolean((bool)graph); break;\r\n\t\t\t\t\t\tcase TypeCode.Int32: WriteInteger((int)graph); break;\r\n\t\t\t\t\t\tcase TypeCode.Int64: WriteInteger((long)graph); break;\r\n\t\t\t\t\t\tcase TypeCode.Double: WriteDouble((double)graph); break;\r\n\t\t\t\t\t\tcase TypeCode.String: WriteString((string)graph); break;\r\n\t\t\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tPhpReference reference = graph as PhpReference;\r\n\t\t\t\t\t\t\t\tif (reference != null)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tWriteReference(reference);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tPhpBytes bytes = graph as PhpBytes;\r\n\t\t\t\t\t\t\t\tif (bytes != null)\r\n\t\t\t\t\t\t\t\t{\r\n                                    WriteBinaryData(bytes.ReadonlyData);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tPhpString str = graph as PhpString;\r\n\t\t\t\t\t\t\t\tif (str != null)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tWriteString(str.ToString());\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tPhpArray array = graph as PhpArray;\r\n\t\t\t\t\t\t\t\tif (array != null)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tWriteArray(array);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tDObject obj = graph as DObject;\r\n\t\t\t\t\t\t\t\tif (obj != null)\r\n\t\t\t\t\t\t\t\t{\r\n                                    WriteObject(obj);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tPhpResource res = graph as PhpResource;\r\n\t\t\t\t\t\t\t\tif (res != null)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// resources are serialized as 0\r\n\t\t\t\t\t\t\t\t\tWriteInteger(0);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tgoto default;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdefault:\r\n                            throw new SerializationException(string.Format(Strings.serialization_unsupported_type, graph.GetType().FullName));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes <B>Null</B>.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void WriteNull()\r\n\t\t\t{\r\n\t\t\t\twriter.Write(Tokens.Null);\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a bool value.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The value.</param>\r\n\t\t\tprivate void WriteBoolean(bool value)\r\n\t\t\t{\r\n\t\t\t\twriter.Write(Tokens.Boolean);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(value ? '1' : '0');\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes an integer.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The integer.</param>\r\n\t\t\tprivate void WriteInteger(long value)\r\n\t\t\t{\r\n\t\t\t\twriter.Write(Tokens.Integer);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(value);\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a double.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The double.</param>\r\n\t\t\tprivate void WriteDouble(double value)\r\n\t\t\t{\r\n\t\t\t\twriter.Write(Tokens.Double);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\r\n\t\t\t\t// handle NaN, +Inf, -Inf\r\n\t\t\t\tif (Double.IsNaN(value)) writer.Write(\"NAN\");\r\n\t\t\t\telse if (Double.IsPositiveInfinity(value)) writer.Write(\"INF\");\r\n\t\t\t\telse if (Double.IsNegativeInfinity(value)) writer.Write(\"-INF\");\r\n\t\t\t\telse writer.Write(value.ToString(\"R\", NumberFormatInfo.InvariantInfo));\r\n\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a string.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The string.</param>\r\n\t\t\tprivate void WriteString(string value)\r\n\t\t\t{\r\n                byte[] binaryValue = writer.Encoding.GetBytes(value);\r\n\r\n                writer.Write(Tokens.String);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n                writer.Write(binaryValue.Length);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(Tokens.Quote);\r\n\r\n                // flush the StreamWriter before accessing its underlying stream\r\n                writer.Flush();\r\n\r\n                writer.BaseStream.Write(binaryValue, 0, binaryValue.Length);\r\n\t\t\t\twriter.Write(Tokens.Quote);\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes binary data.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The data.</param>\r\n\t\t\tprivate void WriteBinaryData(byte[] value)\r\n\t\t\t{\r\n\t\t\t\twriter.Write(Tokens.String);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(value.Length);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(Tokens.Quote);\r\n\r\n\t\t\t\t// flush the StreamWriter before accessing its underlying stream\r\n\t\t\t\twriter.Flush();\r\n\r\n\t\t\t\twriter.BaseStream.Write(value, 0, value.Length);\r\n\t\t\t\twriter.Write(Tokens.Quote);\r\n\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a <see cref=\"PhpReference\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The reference.</param>\r\n\t\t\tprivate void WriteReference(PhpReference value)\r\n\t\t\t{\r\n\t\t\t\tsequenceNumber--;\r\n\t\t\t\tif (!value.IsAliased)\r\n\t\t\t\t{\r\n\t\t\t\t\tSerialize(value.Value);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint seq;\r\n\t\t\t\tif (serializedRefs.TryGetValue(value, out seq))\r\n\t\t\t\t{\r\n\t\t\t\t\t// this reference has already been serialized -> write out its seq. number\r\n\t\t\t\t\twriter.Write(Tokens.Reference);\r\n\t\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\t\twriter.Write(seq);\r\n\t\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tserializedRefs.Add(value, sequenceNumber + 1);\r\n\r\n\t\t\t\t\tif (value.Value is DObject && serializedRefs.TryGetValue(value.Value, out seq))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// this reference's value has already been serialized -> write out its seq. number\r\n\t\t\t\t\t\t// (this is to handle situations such as array($x, &$x), where $x is an object instance)\r\n\t\t\t\t\t\twriter.Write(Tokens.Reference);\r\n\t\t\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\t\t\twriter.Write(seq);\r\n\t\t\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse Serialize(value.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a <see cref=\"PhpArray\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The array.</param>\r\n\t\t\tprivate void WriteArray(PhpArray value)\r\n\t\t\t{\r\n\t\t\t\tserializedRefs[value] = sequenceNumber;\r\n\r\n\t\t\t\twriter.Write(Tokens.Array);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(value.Count);\r\n\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\twriter.Write(Tokens.BraceOpen);\r\n\r\n\t\t\t\t// write out array items in the correct order\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in value)\r\n\t\t\t\t{\r\n\t\t\t\t\tSerialize(entry.Key.Object);\r\n\r\n\t\t\t\t\t// don't assign a seq number to array keys\r\n\t\t\t\t\tsequenceNumber--;\r\n\t\t\t\t\tSerialize(entry.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\twriter.Write(Tokens.BraceClose);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes a <see cref=\"DObject\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The object.</param>\r\n            /// <remarks>Avoids redundant serialization of the same object by using <see cref=\"serializedRefs\"/>.</remarks>\r\n\t\t\tprivate void WriteObject(DObject value)\r\n\t\t\t{\r\n\t\t\t\tint seq;\r\n\t\t\t\tif (serializedRefs.TryGetValue(value, out seq))\r\n\t\t\t\t{\r\n\t\t\t\t\t// this object instance has already been serialized -> write out its seq. number\r\n\t\t\t\t\twriter.Write(Tokens.ObjectRef);\r\n\t\t\t\t\twriter.Write(Tokens.Colon);\r\n\t\t\t\t\twriter.Write(seq);\r\n\t\t\t\t\twriter.Write(Tokens.Semicolon);\r\n\t\t\t\t\tsequenceNumber--;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    serializedRefs.Add(value, sequenceNumber);\r\n\r\n                    if (value is ClrObject || value is IClrValue)\r\n                        WriteClrObjectInternal(value.RealObject);\r\n                    else\r\n                        WritePhpObjectInternal(value);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes <see cref=\"DObject\"/> using PHP serialization.\r\n            /// </summary>\r\n            /// <param name=\"value\">The object.</param>\r\n            private void WritePhpObjectInternal(DObject/*!*/value)\r\n            {\r\n                byte[] binaryClassName;\r\n\r\n                // determine class name\r\n                bool avoid_pic_name = false;\r\n                string class_name = null;\r\n                __PHP_Incomplete_Class pic = value as __PHP_Incomplete_Class;\r\n                if (pic != null)\r\n                {\r\n                    if (pic.__PHP_Incomplete_Class_Name.IsSet)\r\n                    {\r\n                        avoid_pic_name = true;\r\n                        class_name = pic.__PHP_Incomplete_Class_Name.Value as string;\r\n                    }\r\n                }\r\n                if (value is stdClass) class_name = stdClass.ClassName;\r\n                if (class_name == null) class_name = value.TypeName;\r\n\r\n                // is the instance PHP5.1 Serializable?\r\n                if (value.RealObject is Library.SPL.Serializable)\r\n                {\r\n                    context.Stack.AddFrame();\r\n                    object res = PhpVariable.Dereference(value.InvokeMethod(\"serialize\", null, context));\r\n                    if (res == null)\r\n                    {\r\n                        // serialize returned NULL -> serialize the instance as NULL\r\n                        WriteNull();\r\n                        return;\r\n                    }\r\n\r\n                    byte[] resdata = null;\r\n\r\n                    if (res is PhpString)\r\n                    {\r\n                        res = res.ToString();\r\n                    }\r\n\r\n                    if (res is string)\r\n                    {\r\n                        resdata = writer.Encoding.GetBytes((string)res);\r\n                    }\r\n                    else if (res is PhpBytes)\r\n                    {\r\n                        resdata = ((PhpBytes)res).ReadonlyData;\r\n                    }\r\n\r\n                    if (resdata == null)\r\n                    {\r\n                        // serialize did not return NULL nor a string -> throw an exception\r\n                        SPL.Exception.ThrowSplException(\r\n                            _ctx => new SPL.Exception(_ctx, true),\r\n                            context,\r\n                            string.Format(CoreResources.serialize_must_return_null_or_string, value.TypeName), 0, null);\r\n                    }\r\n\r\n                    writer.Write(Tokens.ObjectSer);\r\n                    writer.Write(Tokens.Colon);\r\n\r\n                    binaryClassName = writer.Encoding.GetBytes(class_name);\r\n\r\n                    // write out class name\r\n                    writer.Write(binaryClassName.Length);\r\n                    writer.Write(Tokens.Colon);\r\n                    writer.Write(Tokens.Quote);\r\n\r\n                    // flush the StreamWriter before accessing its underlying stream\r\n                    writer.Flush();\r\n\r\n                    writer.BaseStream.Write(binaryClassName, 0, binaryClassName.Length);\r\n                    writer.Write(Tokens.Quote);\r\n                    writer.Write(Tokens.Colon);\r\n\r\n                    // write out the result of serialize\r\n                    writer.Write(resdata.Length);\r\n                    writer.Write(Tokens.Colon);\r\n                    writer.Write(Tokens.BraceOpen);\r\n\r\n                    // flush the StreamWriter before accessing its underlying stream\r\n                    writer.Flush();\r\n\r\n                    writer.BaseStream.Write(resdata, 0, resdata.Length);\r\n                    writer.Write(Tokens.BraceClose);\r\n                    return;\r\n                }\r\n\r\n                // try to call the __sleep method\r\n                bool sleep_called;\r\n                PhpArray ser_props = value.Sleep(ClassContext, context, out sleep_called);\r\n\r\n                if (sleep_called && ser_props == null)\r\n                {\r\n                    // __sleep did not return an array -> serialize the instance as NULL\r\n                    WriteNull();\r\n                    return;\r\n                }\r\n\r\n                writer.Write(Tokens.Object);\r\n                writer.Write(Tokens.Colon);\r\n\r\n                // write out class name\r\n                binaryClassName = writer.Encoding.GetBytes(class_name);\r\n\r\n                // write out class name\r\n                writer.Write(binaryClassName.Length);\r\n                writer.Write(Tokens.Colon);\r\n                writer.Write(Tokens.Quote);\r\n\r\n                // flush the StreamWriter before accessing its underlying stream\r\n                writer.Flush();\r\n\r\n                writer.BaseStream.Write(binaryClassName, 0, binaryClassName.Length);\r\n                writer.Write(Tokens.Quote);\r\n                writer.Write(Tokens.Colon);\r\n\r\n                // write out property count\r\n                if (ser_props != null) writer.Write(ser_props.Count);\r\n                else writer.Write(value.Count - (avoid_pic_name ? 1 : 0));\r\n                writer.Write(Tokens.Colon);\r\n                writer.Write(Tokens.BraceOpen);\r\n\r\n                // write out properties\r\n                if (ser_props != null) WriteSleepResult(value, ser_props);\r\n                else WriteAllProperties(value, avoid_pic_name);\r\n\r\n                writer.Write(Tokens.BraceClose);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes an object using .NET binary formatter.\r\n            /// </summary>\r\n            /// <param name=\"realObject\">The object.</param>\r\n            private void WriteClrObjectInternal(object realObject)\r\n            {\r\n                writer.Write(Tokens.ClrObject);\r\n                writer.Write(Tokens.Colon);\r\n                writer.Write(Tokens.BraceOpen);\r\n\r\n                // flush the StreamWriter before accessing its underlying stream\r\n                writer.Flush();\r\n                \r\n                // serialize CLR object\r\n                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();\r\n                formatter.Serialize(writer.BaseStream, realObject);\r\n                \r\n                //\r\n                writer.Write(Tokens.BraceClose);\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes properties whose names have been returned by <c>__sleep</c>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The instance containing the properties to serialize.</param>\r\n\t\t\t/// <param name=\"propertiesToSerialize\">The array containing names of the properties to serialize.</param>\r\n\t\t\tprivate void WriteSleepResult(DObject value, PhpArray propertiesToSerialize)\r\n\t\t\t{\r\n\t\t\t\t// serialize the properties whose names have been returned by __sleep\r\n\r\n\t\t\t\tforeach (KeyValuePair<string, object> pair in Serialization.EnumerateSerializableProperties(\r\n\t\t\t\t\tvalue, propertiesToSerialize, context))\r\n\t\t\t\t{\r\n\t\t\t\t\t// write out the property name and the property value\r\n\t\t\t\t\tSerialize(pair.Key);\r\n\t\t\t\t\tsequenceNumber--; // don't assign a seq number to property names\r\n\t\t\t\t\tSerialize(pair.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Serializes all properties of a given instance.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The instance containing the properties to serialize.</param>\r\n\t\t\t/// <param name=\"avoidPicName\">If <B>true</B>, the property named <c>__PHP_Incomplete_Class_Name</c>\r\n\t\t\t/// should not be serialized.</param>\r\n\t\t\tprivate void WriteAllProperties(DObject value, bool avoidPicName)\r\n\t\t\t{\r\n\t\t\t\t// if have no sleep result, serialize all instance properties\r\n\r\n\t\t\t\tforeach (KeyValuePair<string, object> pair in Serialization.EnumerateSerializableProperties(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (avoidPicName && pair.Key == __PHP_Incomplete_Class.ClassNameFieldName)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// skip the __PHP_Incomplete_Class_Name field\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// write out the property name and the property value\r\n\t\t\t\t\tSerialize(pair.Key);\r\n\t\t\t\t\tsequenceNumber--; // don't assign a seq number to property names\r\n\t\t\t\t\tSerialize(pair.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements the deserialization functionality. Deserializes the data on the provided\r\n\t\t/// <see cref=\"Stream\"/> and reconstitutes the graph of objects.\r\n\t\t/// </summary>\r\n        internal class ObjectReader : Serializer.ClassContextHolder\r\n\t\t{\r\n\t\t\t#region BackReference\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Intermediate representation of a <B>r</B> or <B>R</B> record in serialized stream.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate class BackReference\r\n\t\t\t{\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// The index referenced by this back-reference record.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tprivate int index;\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// If <B>true</B>, this is a proper <B>&amp;</B> reference (<B>R</B>), if <B>false</B>,\r\n\t\t\t\t/// this is an object instance reference (<B>r</B>) following the PHP 5 reference\r\n\t\t\t\t/// semantics in objects.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tprivate bool isProper;\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// Creates a new <see cref=\"BackReference\"/> with a given index.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\t/// <param name=\"index\">The index of the record being referred to.</param>\r\n\t\t\t\t/// <param name=\"isProper\">Indicates whether this is a <B>&amp;</B> reference, or\r\n\t\t\t\t/// just object identity (valid only for objects - class instances).</param>\r\n\t\t\t\tinternal BackReference(int index, bool isProper)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.index = index;\r\n\t\t\t\t\tthis.isProper = isProper;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// Returns the index that is being referred to.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tinternal int Index\r\n\t\t\t\t{\r\n\t\t\t\t\tget { return index; }\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// Returns <B>true</B> is this a <B>&amp;</B> reference. See <see cref=\"isProper\"/>.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tinternal bool IsProper\r\n\t\t\t\t{\r\n\t\t\t\t\tget { return isProper; }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Fields and Properties\r\n\r\n\t\t\tprivate readonly ScriptContext/*!*/ context;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The stream to read serialized data from.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate readonly Stream/*!*/ stream;\r\n\r\n            /// <summary>\r\n            /// Encoding to be used for conversion from binary to unicode strings.\r\n            /// </summary>\r\n            private readonly Encoding/*!*/ encoding;\r\n\r\n\t\t\t/// <summary>\r\n            /// List of objects deserialized from the reader.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// In its first phase, the deserializer reads the input stream token by token and stores the\r\n\t\t\t/// deserialized items to this <see cref=\"List{T}\"/>. If a proper back-reference (<B>&amp;</B>)\r\n\t\t\t/// is encountered, the referenced item is converted to <see cref=\"PhpReference\"/> and a\r\n\t\t\t/// <see cref=\"BackReference\"/> instance is stored to <see cref=\"atoms\"/>. End of array item and\r\n\t\t\t/// object property lists are delimited by the <see cref=\"delimiter\"/> singleton. In the second phase,\r\n\t\t\t/// after the whole stream has been read, the object graph is built from this list (see\r\n\t\t\t/// <see cref=\"BuildObjectGraph\"/>).\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate List<object> atoms;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Maps sequence numbers used in the serialized stream to indices in the <see cref=\"atoms\"/>\r\n\t\t\t/// list.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This <see cref=\"List{T}\"/> is built simultaneously with <see cref=\"atoms\"/> during the\r\n\t\t\t/// first &quot;parsing&quot; phase.\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate List<int> sequenceMap;\r\n\r\n\t\t\t/// <summary>\r\n            /// The lookahead symbol of the parser input (i.e. the <see cref=\"Consume\"/>).\r\n\t\t\t/// </summary>\r\n\t\t\tprivate char lookAhead;\r\n\r\n            /// <summary>\r\n            /// Tells whether Consume methods are in Unicode reading mode. Legacy only, will be removed.\r\n            /// </summary>\r\n            private bool unicodeMode;\r\n\r\n            /// <summary>\r\n            /// Used for switching back from Unicode mode. Legacy only, will be removed.\r\n            /// </summary>\r\n            private long lastUnicodeCharacterPos;\r\n\r\n            /// <summary>\r\n            /// Used by Unicode consume to buffer bytes and read characters, if possible.\r\n            /// </summary>\r\n            private byte[] miniByteBuffer;\r\n\r\n            /// <summary>\r\n            /// Used by Unicode consume to buffer chars.\r\n            /// </summary>\r\n            private char[] miniCharBuffer;\r\n\r\n            /// <summary>\r\n            /// Used by Unicode consume to decode characters;\r\n            /// </summary>\r\n            private Decoder decoder;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// If <B>true</B>, there are no more characters in the input stream.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool endOfStream;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// If <B>true</B>, the next item being added to the <see cref=\"atoms\"/> list should not be\r\n\t\t\t/// assigned a sequence number.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool skipSequenceNumber;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Marks ends of array items and ends of object properties in the <see cref=\"atoms\"/> list.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate static object delimiter = new object();\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Current position in the <see cref=\"atoms\"/> list during object graph building.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate int atomCounter;\r\n\r\n            /// <summary>\r\n            /// Temporarily used <see cref=\"StringBuilder\"/>. Remember it to save GC.\r\n            /// This method always returns the same instance of <see cref=\"StringBuilder\"/>, it will always reset its <see cref=\"StringBuilder.Length\"/> to <c>0</c>.\r\n            /// </summary>\r\n            private StringBuilder/*!*/GetTemporaryStringBuilder(int initialCapacity)\r\n            {\r\n                var tmp = tmpStringBuilder;\r\n\r\n                if (tmp != null)\r\n                {\r\n                    tmp.Length = 0;\r\n                }\r\n                else\r\n                {\r\n                    tmpStringBuilder = tmp = new StringBuilder(initialCapacity, int.MaxValue);\r\n                }\r\n\r\n                return tmp;\r\n            }\r\n            private StringBuilder tmpStringBuilder;\r\n            \r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"ObjectReader\"/> with a given <see cref=\"StreamReader\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"context\">The current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t\t/// <param name=\"stream\">The stream to read serialized data from.</param>\r\n            /// <param name=\"encoding\">Encoding used to read serialized strings.</param>\r\n            /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n            internal ObjectReader(ScriptContext/*!*/ context, Stream/*!*/ stream, Encoding/*!*/ encoding, DTypeDesc caller)\r\n                :base(caller)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(context != null && stream != null);\r\n\t\t\t\tthis.context = context;\r\n\t\t\t\tthis.stream = stream;\r\n                this.encoding = encoding;\r\n\t\t\t\tthis.atoms = new List<object>();\r\n\t\t\t\tthis.sequenceMap = new List<int>();\r\n                this.miniByteBuffer = new byte[1];\r\n                this.miniCharBuffer = new char[1];\r\n                this.decoder = encoding.GetDecoder();\r\n\r\n\t\t\t\t// read look ahead character\r\n\t\t\t\tConsume();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Parser helpers: Throw*, Consume, AddAtom\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Throws a <see cref=\"SerializationException\"/> due to an unexpected character.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ThrowUnexpected()\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(LibResources.GetString(\"unexpected_character_in_stream\"));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Throws a <see cref=\"SerializationException\"/> due to an unexpected end of stream.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ThrowEndOfStream()\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(LibResources.GetString(\"unexpected_end_of_stream\"));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Throws a <see cref=\"SerializationException\"/> due to an data type.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ThrowInvalidDataType()\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(LibResources.GetString(\"invalid_data_bad_type\"));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Throws a <see cref=\"SerializationException\"/> due to an invalid length marker.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ThrowInvalidLength()\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(LibResources.GetString(\"invalid_data_bad_length\"));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Throws a <see cref=\"SerializationException\"/> due to an invalid back-reference.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ThrowInvalidReference()\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(LibResources.GetString(\"invalid_data_bad_back_reference\"));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Consumes the look ahead character and moves to the next character in the input stream.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>The old (consumed) look ahead character.</returns>\r\n            /// <remarks>The consumed value is 8-bit, always in range 0x00 - 0xff.</remarks>\r\n\t\t\tprivate char Consume()\r\n\t\t\t{\r\n                if (unicodeMode)\r\n                {\r\n                    unicodeMode = false;\r\n                    endOfStream = false;\r\n                    stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin);\r\n                    Consume(); // update lookahead\r\n                }\r\n\r\n\t\t\t\tif (endOfStream) ThrowEndOfStream();\r\n\r\n\t\t\t\tchar ret = lookAhead;\r\n\t\t\t\tint next = stream.ReadByte();\r\n\r\n\t\t\t\tif (next == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tendOfStream = true;\r\n\t\t\t\t\tlookAhead = (char)0;\r\n\t\t\t\t}\r\n\t\t\t\telse lookAhead = (char)next;\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Consumes Unicode character based on encoding.\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            private char ConsumeLegacy()\r\n            {\r\n                if (!unicodeMode && !endOfStream)\r\n                {\r\n                    unicodeMode = true;\r\n                    stream.Seek(stream.Position - 1, SeekOrigin.Begin);\r\n                    ConsumeLegacy();\r\n                }\r\n\r\n                if (endOfStream) ThrowEndOfStream();\r\n\r\n                lastUnicodeCharacterPos = stream.Position;\r\n                char ret = lookAhead;\r\n\r\n                while (true)\r\n                {\r\n                    bool completed;\r\n                    int bytesUsed;\r\n                    int charsUsed;\r\n\r\n                    int next = stream.ReadByte();\r\n\r\n                    if (next == -1)\r\n                    {\r\n                        endOfStream = true;\r\n                        lookAhead = (char)0;\r\n                        return ret;\r\n                    }\r\n\r\n                    miniByteBuffer[0] = unchecked((byte)next);\r\n\r\n                    decoder.Convert(miniByteBuffer, 0, 1, miniCharBuffer, 0, 1, false, out bytesUsed, out charsUsed, out completed);\r\n\r\n                    if (charsUsed == 1) break;\r\n                }\r\n\r\n                lookAhead = miniCharBuffer[0];\r\n                return ret;\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Consumes a given look ahead character and moves to the next character in the input stream.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"ch\">The character that should be consumed.</param>\r\n\t\t\t/// <remarks>If <paramref name=\"ch\"/> does not match current look ahead character,\r\n\t\t\t/// <see cref=\"ThrowUnexpected\"/> is called.</remarks>\r\n\t\t\tprivate void Consume(char ch)\r\n\t\t\t{\r\n                if (unicodeMode)\r\n                {\r\n                    unicodeMode = false;\r\n                    endOfStream = false;\r\n                    stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin);\r\n                    Consume(); // update lookahead\r\n                }\r\n\r\n\t\t\t\tif (endOfStream) ThrowEndOfStream();\r\n\r\n\t\t\t\tif (lookAhead != ch) ThrowUnexpected();\r\n                int next = stream.ReadByte();\r\n\r\n\t\t\t\tif (next == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tendOfStream = true;\r\n\t\t\t\t\tlookAhead = (char)0;\r\n\t\t\t\t}\r\n\t\t\t\telse lookAhead = (char)next;\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Tries to consume a given look ahead character and, if successful, moves to the next character in the input stream.\r\n            /// </summary>\r\n            /// <param name=\"ch\">The character that should be consumed.</param>\r\n            /// <remarks>If <paramref name=\"ch\"/> does not match current look ahead character,\r\n            /// <see cref=\"ThrowUnexpected\"/> is called.</remarks>\r\n            /// <returns>True if a character was successfully consumed, otherwise false.</returns>\r\n            private bool TryConsume(char ch)\r\n            {\r\n                if (unicodeMode)\r\n                {\r\n                    unicodeMode = false;\r\n                    endOfStream = false;\r\n                    stream.Seek(lastUnicodeCharacterPos, SeekOrigin.Begin);\r\n                    Consume(); // update lookahead\r\n                }\r\n\r\n                if (endOfStream) return false;\r\n\r\n                if (lookAhead != ch) return false;\r\n                int next = stream.ReadByte();\r\n\r\n                if (next == -1)\r\n                {\r\n                    endOfStream = true;\r\n                    lookAhead = (char)0;\r\n                }\r\n                else lookAhead = (char)next;\r\n\r\n                return true;\r\n            }\r\n\r\n            private void Seek(long position)\r\n            {\r\n                stream.Seek(position, SeekOrigin.Begin);\r\n\r\n                if (unicodeMode)\r\n                    ConsumeLegacy();\r\n                else\r\n                    Consume();\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Adds an item to the <see cref=\"atoms\"/> list and optionally assigns a sequence number to it.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"obj\">The item to add.</param>\r\n\t\t\tprivate void AddAtom(object obj)\r\n\t\t\t{\r\n\t\t\t\tif (!skipSequenceNumber) sequenceMap.Add(atoms.Count);\r\n\t\t\t\telse skipSequenceNumber = false;\r\n\r\n\t\t\t\tatoms.Add(obj);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n            #region Utils\r\n\r\n            /// <summary>\r\n            /// Quickly check if the look ahead byte is digit. Assumes the value is in range 0x00 - 0xff.\r\n            /// </summary>\r\n            /// <param name=\"lookAhead\">The lookAhead byte value.</param>\r\n            /// <returns>True if value is in range '0'-'9'.</returns>\r\n            private static bool IsDigit(char lookAhead)\r\n            {\r\n                return Digit(lookAhead) != -1;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Quickly determine the numeric value of given lookAhead byte.\r\n            /// </summary>\r\n            /// <param name=\"lookAhead\">The lookAhead byte value.</param>\r\n            /// <returns></returns>\r\n            private static int Digit(char lookAhead)\r\n            {\r\n                int num = unchecked((int)lookAhead - (int)'0');\r\n                return (num >= 0 && num <= 9) ? num : -1;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Parser\r\n\r\n            /// <summary>\r\n\t\t\t/// The top-level parser method. \r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>Just a switch over the look ahead characters that delegates the work to one of\r\n\t\t\t/// <see cref=\"ParseNull\"/>, <see cref=\"ParseBoolean\"/>, <see cref=\"ParseInteger\"/>, <see cref=\"ParseDouble\"/>,\r\n\t\t\t/// <see cref=\"ParseString\"/>, <see cref=\"ParseArray\"/>, <see cref=\"ParseObject\"/>, <see cref=\"ParseReference\"/>,\r\n\t\t\t/// <see cref=\"ParseObjectRef\"/>.</remarks>\r\n\t\t\tprivate void Parse()\r\n\t\t\t{\r\n\t\t\t\tswitch (Consume())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase Tokens.Null: ParseNull(); break;\r\n\t\t\t\t\tcase Tokens.Boolean: ParseBoolean(); break;\r\n\t\t\t\t\tcase Tokens.Integer: ParseInteger(); break;\r\n\t\t\t\t\tcase Tokens.Double: ParseDouble(); break;\r\n\t\t\t\t\tcase Tokens.String: ParseString(); break;\r\n\t\t\t\t\tcase Tokens.Array: ParseArray(); break;\r\n\t\t\t\t\tcase Tokens.Object: ParseObject(false); break;\r\n\t\t\t\t\tcase Tokens.ObjectSer: ParseObject(true); break;\r\n                    case Tokens.ClrObject: ParseClrObject(); break;\r\n\t\t\t\t\tcase Tokens.Reference: ParseReference(); break;\r\n\t\t\t\t\tcase Tokens.ObjectRef: ParseObjectRef(); break;\r\n\r\n\t\t\t\t\tdefault: ThrowUnexpected(); break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Reads a signed 64-bit integer number from the <see cref=\"stream\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>The integer.</returns>\r\n\t\t\tprivate long ReadInteger()\r\n\t\t\t{\r\n\t\t\t\t// pattern:\r\n\t\t\t\t// [+-]?[0-9]+\r\n\r\n                long number = 0;\r\n                \r\n                bool minus = (lookAhead == '-');\r\n                if (minus || (lookAhead == '+'))\r\n                    Consume();\r\n\r\n                int digit;  // == Digit(lookAhead)\r\n                if ((digit = Digit(lookAhead)) == -1)\r\n                    ThrowUnexpected();\r\n\r\n                do\r\n                {\r\n                    // let it overflow just as PHP does\r\n                    number = unchecked((10 * number) + digit);\r\n                    Consume();\r\n\r\n                } while ((digit = Digit(lookAhead)) != -1);\r\n\r\n\t\t\t\treturn (minus ? unchecked(-number) : number);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Reads a double-precision floating point number from the <see cref=\"stream\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>The double.</returns>\r\n\t\t\tprivate double ReadDouble()\r\n\t\t\t{\r\n\t\t\t\t// pattern:\r\n\t\t\t\t// NAN\r\n\t\t\t\t// [+-]INF\r\n\t\t\t\t// [+-]?[0-9]*[.]?[0-9]*([eE][+-]?[0-9]+)?\r\n\r\n                // NaN\r\n\t\t\t\tif (lookAhead == 'N')\r\n\t\t\t\t{\r\n\t\t\t\t\tConsume();\r\n\t\t\t\t\tConsume('A');\r\n\t\t\t\t\tConsume('N');\r\n\t\t\t\t\treturn Double.NaN;\r\n\t\t\t\t}\r\n\r\n                // mantissa + / -\r\n                int sign = 1;\r\n                if (lookAhead == '+') Consume();\r\n\t\t\t\telse if (lookAhead == '-')\r\n\t\t\t\t{\r\n\t\t\t\t\tsign = -1;\r\n\t\t\t\t\tConsume();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Infinity\r\n\t\t\t\tif (lookAhead == 'I')\r\n\t\t\t\t{\r\n\t\t\t\t\tConsume();\r\n\t\t\t\t\tConsume('N');\r\n\t\t\t\t\tConsume('F');\r\n\t\t\t\t\treturn (sign > 0 ? Double.PositiveInfinity : Double.NegativeInfinity);\r\n\t\t\t\t}\r\n\r\n                // reconstruct the number:\r\n                StringBuilder number = GetTemporaryStringBuilder(16);\r\n                if (sign < 0) number.Append('-');\r\n\r\n                // [^;]*\r\n                while (Tokens.Semicolon != lookAhead)\r\n                {\r\n                    number.Append(lookAhead);\r\n                    Consume();\r\n                }\r\n\r\n                double result;\r\n                if (!Double.TryParse(number.ToString(), NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent | NumberStyles.AllowLeadingSign, NumberFormatInfo.InvariantInfo, out result))\r\n                    ThrowUnexpected();\r\n\r\n                return result;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Reads a string with a given length surrounded by quotes from the <see cref=\"stream\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"length\">The expected length of the string.</param>\r\n\t\t\t/// <returns>Byte array or null if string appears to be unicode (old functionality of serialize).</returns>\r\n\t\t\tprivate byte[]/*!*/ReadString(int length)\r\n\t\t\t{\r\n                //ASCII character - we can expect if will be always there (UTF16 is not supported).\r\n\t\t\t\tConsume(Tokens.Quote);\r\n\r\n                if (endOfStream) ThrowEndOfStream();\r\n\r\n                if (length > 0)\r\n                {\r\n                    byte[] buffer = new byte[length];\r\n\r\n                    // use current lookahead\r\n                    buffer[0] = unchecked((byte)lookAhead);\r\n\r\n                    // read the rest from stream\r\n                    int rlen = stream.Read(buffer, 1, length - 1);\r\n                    // unicode string would be longer or of same length, so it is safe to fail if end of stream was reached\r\n                    if (rlen != length - 1) ThrowEndOfStream();\r\n\r\n                    // this just updates lookahead, and returns the lastahead which we already used\r\n                    Consume();\r\n\r\n                    // try to consume\r\n                    bool success = TryConsume(Tokens.Quote);\r\n\r\n                    if (success)                        \r\n                        return buffer;\r\n                    else\r\n                    {\r\n                        return null;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    return ArrayUtils.EmptyBytes;\r\n                }\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Reads a string with a given length surrounded by quotes from the <see cref=\"stream\"/>.\r\n            /// </summary>\r\n            /// <param name=\"length\">The expected length of the string.</param>\r\n            /// <returns>The string or null.</returns>\r\n            private string ReadStringUnicode(int length)\r\n            {\r\n                var bytes = ReadString(length);\r\n\r\n                if (bytes == null) return null;\r\n\r\n                return encoding.GetString(bytes);\r\n            }\r\n\r\n            /// <summary>\r\n            /// LEGACY functionality, will be removed in future.\r\n            /// </summary>\r\n            /// <param name=\"length\"></param>\r\n            /// <returns></returns>\r\n            private string ReadStringLegacy(int length)\r\n            {\r\n                var sb = GetTemporaryStringBuilder(length);\r\n\r\n                Consume(Tokens.Quote);\r\n                while (length-- > 0) sb.Append(ConsumeLegacy());\r\n                Consume(Tokens.Quote);\r\n\r\n                return sb.ToString();\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>N</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseNull()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\t\t\t\tAddAtom(null);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>b</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseBoolean()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tswitch (Consume())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase '0': AddAtom(false); break;\r\n\t\t\t\t\tcase '1': AddAtom(true); break;\r\n\t\t\t\t\tdefault: ThrowUnexpected(); break;\r\n\t\t\t\t}\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>i</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseInteger()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\r\n\t\t\t\tlong i = ReadInteger();\r\n\t\t\t\tif (i >= Int32.MinValue && i <= Int32.MaxValue) AddAtom((int)i);\r\n\t\t\t\telse AddAtom(i);\r\n\t\t\t\t\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>d</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseDouble()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tAddAtom(ReadDouble());\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>s</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseString()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tint length = (unchecked((int)ReadInteger()));\r\n\t\t\t\tif (length < 0) ThrowInvalidLength();\r\n\r\n                long position = stream.Position;\r\n                Consume(Tokens.Colon);\r\n\t\t\t\tvar str = ReadString(length);\r\n\r\n                if (str != null && TryConsume(Tokens.Semicolon))\r\n                {\r\n                    AddAtom(new PhpBytes(str));\r\n                }\r\n                else\r\n                {\r\n                    Seek(position);\r\n                    AddAtom(ReadStringLegacy(length));\r\n                    Consume(Tokens.Semicolon);\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>a</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseArray()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tint length = (unchecked((int)ReadInteger()));\r\n\t\t\t\tif (length < 0) ThrowInvalidLength();\r\n\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tAddAtom(new PhpArray(length / 2, length / 2));\r\n\t\t\t\tConsume(Tokens.BraceOpen);\r\n\r\n\t\t\t\twhile (length-- > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tskipSequenceNumber = true;\r\n\r\n\t\t\t\t\tParse();\r\n\r\n                    // J: do not encode byte[] to string\r\n                    //if (atoms[atoms.Count - 1] is PhpBytes)\r\n                    //{\r\n                    //    atoms[atoms.Count - 1] = encoding.GetString(((PhpBytes)atoms[atoms.Count - 1]).ReadonlyData);\r\n                    //}\r\n\r\n\t\t\t\t\tParse();\r\n\t\t\t\t}\r\n\t\t\t\tatoms.Add(delimiter);\r\n\r\n\t\t\t\tConsume(Tokens.BraceClose);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>O</B> and <B>C</B> tokens.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"serializable\">If <B>true</B>, the last token eaten was <B>C</B>, otherwise <B>O</B>.</param>\r\n\t\t\tprivate void ParseObject(bool serializable)\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tint length = (unchecked((int)ReadInteger()));\r\n\t\t\t\tif (length < 0) ThrowInvalidLength();\r\n\r\n                long position = stream.Position;\r\n                Consume(Tokens.Colon);\r\n                string class_name = ReadStringUnicode(length);\r\n\r\n                if (class_name == null)\r\n                {\r\n                    Seek(position);\r\n                    class_name = ReadStringLegacy(length);\r\n                }\r\n\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tlength = (unchecked((int)ReadInteger()));\r\n\t\t\t\tif (length < 0) ThrowInvalidLength();\r\n\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\r\n\t\t\t\t// bind to the specified class\r\n\t\t\t\tDObject obj = Serialization.GetUninitializedInstance(class_name, context);\r\n\r\n\t\t\t\tif (obj == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new SerializationException(LibResources.GetString(\"class_instantiation_failed\",\r\n\t\t\t\t\t\tclass_name));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// check whether the instance is PHP5.1 Serializable\r\n\t\t\t\tif (serializable && !(obj.RealObject is Library.SPL.Serializable))\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new SerializationException(LibResources.GetString(\"class_has_no_unserializer\",\r\n\t\t\t\t\t\tclass_name));\r\n\t\t\t\t}\r\n\t\t\t\tAddAtom(obj);\r\n\t\t\t\tatoms.Add(serializable);\r\n\r\n\t\t\t\tConsume(Tokens.BraceOpen);\r\n\r\n\t\t\t\tif (serializable)\r\n\t\t\t\t{\r\n                    if (length > 0)\r\n                    {\r\n                        // add serialized representation to be later passed to unserialize\r\n                        if (endOfStream) ThrowEndOfStream();\r\n\r\n                        byte[] buffer = new byte[length];\r\n\r\n                        // use current lookahead\r\n                        buffer[0] = unchecked((byte)lookAhead);\r\n\r\n                        // read the rest from stream\r\n                        int rlen = stream.Read(buffer, 1, length - 1);\r\n                        if (rlen != length - 1) ThrowEndOfStream();\r\n\r\n                        // this just updates lookahead, and returns the lastahead which we already used\r\n                        Consume();\r\n\r\n                        atoms.Add(new PhpBytes(buffer));\r\n                    }\r\n                    else\r\n                    {\r\n                        atoms.Add(PhpBytes.Empty);\r\n                    }\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// parse properties\r\n\t\t\t\t\twhile (length-- > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tskipSequenceNumber = true;\r\n\r\n\t\t\t\t\t\t// parse property name\r\n\t\t\t\t\t\tParse();\r\n\r\n\t\t\t\t\t\t// verify that the name is either string or int\r\n\t\t\t\t\t\tobject name = atoms[atoms.Count - 1];\r\n\r\n                        if (name is PhpBytes)   // property name needs to be string\r\n                            name = atoms[atoms.Count - 1] = encoding.GetString(((PhpBytes)name).ReadonlyData);\r\n                        \r\n\t\t\t\t\t\tif (!(name is string))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (!(name is int)) ThrowInvalidDataType();\r\n\t\t\t\t\t\t\tatoms[atoms.Count - 1] = name.ToString();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// parse property value\r\n\t\t\t\t\t\tParse();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tatoms.Add(delimiter);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tConsume(Tokens.BraceClose);\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Parses the <B>T</B> token.\r\n            /// </summary>\r\n            /// <remarks>Expects CLR object formatted using <see cref=\"System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\"/>.</remarks>\r\n            private void ParseClrObject()\r\n            {\r\n                // T,{DATA}\r\n\r\n                Consume(Tokens.Colon);\r\n                if (lookAhead != Tokens.BraceOpen)\r\n                    ThrowUnexpected();\r\n\r\n                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();\r\n                var obj = formatter.Deserialize(stream);\r\n                AddAtom(ClrObject.WrapDynamic(obj));\r\n\r\n                atoms.Add(false);       // !serializable\r\n                atoms.Add(delimiter);   // end\r\n\r\n                // restore lookAhead state:\r\n                int next = stream.ReadByte();\r\n                if (next == -1)\r\n                {\r\n                    endOfStream = true;\r\n                    lookAhead = (char)0;\r\n                }\r\n                else lookAhead = (char)next;\r\n                Consume(Tokens.BraceClose);\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>R</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseReference()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tint seq_number = (unchecked((int)ReadInteger())) - 1;\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\r\n\t\t\t\tif (seq_number < 0 || seq_number >= sequenceMap.Count) ThrowInvalidReference();\r\n\t\t\t\tint index = sequenceMap[seq_number];\r\n\r\n\t\t\t\t// make the referenced atom a PhpReference\r\n\t\t\t\tPhpReference reference = atoms[index] as PhpReference;\r\n\t\t\t\tif (reference == null)\r\n\t\t\t\t{\r\n\t\t\t\t\treference = new PhpReference(atoms[index]);\r\n\t\t\t\t\tatoms[index] = reference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tatoms.Add(new BackReference(index, true));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parses the <B>r</B> token.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void ParseObjectRef()\r\n\t\t\t{\r\n\t\t\t\tConsume(Tokens.Colon);\r\n\t\t\t\tint seq_number = (unchecked((int)ReadInteger())) - 1;\r\n\t\t\t\tConsume(Tokens.Semicolon);\r\n\r\n\t\t\t\tif (seq_number < 0 || seq_number >= sequenceMap.Count) ThrowInvalidReference();\r\n\t\t\t\tint index = sequenceMap[seq_number];\r\n\r\n\t\t\t\tatoms.Add(new BackReference(index, false));\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region BuildObjectGraph, Deserialize\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Builds the object graph from <see cref=\"atoms\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns></returns>\r\n\t\t\tprivate object BuildObjectGraph()\r\n\t\t\t{\r\n\t\t\t\tobject atom = atoms[atomCounter++];\r\n\r\n\t\t\t\tif (atom != null /*&& Type.GetTypeCode(atom.GetType()) == TypeCode.Object*//* note (Jakub): useless check, in result much slower than a few .isinst */)\r\n                {\r\n\t\t\t\t\t// back reference (either r or R)\r\n\t\t\t\t\tBackReference back_ref = atom as BackReference;\r\n\t\t\t\t\tif (back_ref != null)\r\n\t\t\t\t\t{\r\n                        PhpReference reference;\r\n                        \r\n                        object ref_val = atoms[back_ref.Index];\r\n\r\n\t\t\t\t\t\tif (back_ref.IsProper) return ref_val;\r\n\r\n\t\t\t\t\t\t// object references should reference objects only\r\n\t\t\t\t\t\treference = ref_val as PhpReference;\r\n\t\t\t\t\t\tif ((reference != null && !(reference.Value is DObject)) &&\r\n\t\t\t\t\t\t\t!(ref_val is DObject)) ThrowInvalidReference();\r\n\r\n\t\t\t\t\t\treturn ref_val;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// dereference an eventual reference\r\n\t\t\t\t\tobject value = PhpVariable.Dereference(atom);\r\n\r\n\t\t\t\t\t// array\r\n\t\t\t\t\tPhpArray array = value as PhpArray;\r\n\t\t\t\t\tif (array != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile (atoms[atomCounter] != delimiter)\r\n\t\t\t\t\t\t{\r\n                            object arraykey = BuildObjectGraph();\r\n                            object arrayvalue = BuildObjectGraph();\r\n\r\n                            if (arraykey is PhpBytes)// IntStringKey does not allow PhpBytes yet\r\n                                arraykey = encoding.GetString(((PhpBytes)arraykey).ReadonlyData);\r\n\r\n                            array.Add(arraykey, arrayvalue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tatomCounter++; // for the delimiter\r\n\t\t\t\t\t\treturn atom;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// object\r\n\t\t\t\t\tDObject obj = value as DObject;\r\n\t\t\t\t\tif (obj != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBuildDObject(obj);\r\n\t\t\t\t\t\treturn atom;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// no special treatment for the rest of the types\r\n\t\t\t\treturn atom;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Builds a <see cref=\"DObject\"/> from atoms (the object itself given as parameter).\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"obj\">The instance.</param>\r\n\t\t\tprivate void BuildDObject(DObject obj)\r\n\t\t\t{\r\n\t\t\t\tbool serializable = ((bool)atoms[atomCounter++] == true);\r\n\r\n\t\t\t\tif (serializable && obj.RealObject is Library.SPL.Serializable)\r\n\t\t\t\t{\r\n\t\t\t\t\t// pass the serialized data to unserialize\r\n\t\t\t\t\tcontext.Stack.AddFrame(BuildObjectGraph());\r\n\t\t\t\t\tobj.InvokeMethod(\"unserialize\", null, context);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (atoms[atomCounter] != delimiter)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring property_name = (string)BuildObjectGraph();\r\n\t\t\t\t\tobject property_value = BuildObjectGraph();\r\n\r\n\t\t\t\t\tDebug.Assert(property_name != null);\r\n\t\t\t\t\tSerialization.SetProperty(obj, property_name, property_value, context);\r\n\t\t\t\t}\r\n\t\t\t\tatomCounter++; // for the delimiter\r\n\r\n\t\t\t\t// invoke __wakeup on the deserialized instance\r\n\t\t\t\tobj.Wakeup(ClassContext, context);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Deserializes the data from the <see cref=\"stream\"/> and reconstitutes the graph of objects.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>The top object of the deserialized graph.</returns>\r\n\t\t\tinternal object Deserialize()\r\n\t\t\t{\r\n\t\t\t\t// parsing phase\r\n\t\t\t\tParse();\r\n\r\n\t\t\t\t// object building phase\r\n\t\t\t\tatomCounter = 0;\r\n\t\t\t\treturn BuildObjectGraph();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n        #region Fields and properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Serialization security permission demanded in <see cref=\"Serialize\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate static SecurityPermission serializationPermission =\r\n\t\t\tnew SecurityPermission(SecurityPermissionFlag.SerializationFormatter);\r\n\r\n\t\t/// <summary>\r\n\t\t/// The encoding to be used when writing and reading the serialization stream.\r\n\t\t/// </summary>\r\n\t\tprivate readonly Encoding encoding;\r\n\r\n        /// <summary>\r\n        /// DTypeDesc of the caller class context known already or UnknownTypeDesc if class context should be determined lazily.\r\n        /// </summary>\r\n        private readonly DTypeDesc caller;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the serialization binder that performs type lookups during deserialization.\r\n\t\t/// </summary>\r\n\t\tpublic SerializationBinder Binder\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t\tset { throw new NotSupportedException(LibResources.GetString(\"serialization_binder_unsupported\")); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the streaming context used for serialization and deserialization.\r\n\t\t/// </summary>\r\n\t\tpublic StreamingContext Context\r\n\t\t{\r\n\t\t\tget { return new StreamingContext(StreamingContextStates.Persistence); }\r\n\t\t\tset { throw new NotSupportedException(LibResources.GetString(\"streaming_context_unsupported\")); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the surrogate selector used by the current formatter.\r\n\t\t/// </summary>\r\n        public ISurrogateSelector SurrogateSelector\r\n        {\r\n            get { return null; }\r\n            set { throw new NotSupportedException(LibResources.GetString(\"surrogate_selector_unsupported\")); }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n        ///// <summary>\r\n        ///// Creates a new <see cref=\"PhpFormatter\"/> with <see cref=\"ASCIIEncoding\"/> and\r\n        ///// default <see cref=\"Context\"/>.\r\n        ///// </summary>\r\n        //public PhpFormatter()\r\n        //{\r\n        //    this.encoding = new ASCIIEncoding();\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpFormatter\"/> with a given <see cref=\"Encoding\"/> and\r\n\t\t/// default <see cref=\"Context\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"encoding\">The encoding to be used when writing and reading the serialization stream.</param>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n        public PhpFormatter(Encoding encoding, DTypeDesc caller)\r\n\t\t{\r\n            this.caller = caller;\r\n\r\n\t\t\t// no UTF8 BOM!\r\n\t\t\tif (encoding is UTF8Encoding)\r\n                this.encoding = new UTF8Encoding(false);\r\n\t\t\telse\r\n\t\t\t\tthis.encoding = (encoding ?? new ASCIIEncoding());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialize and Deserialize\r\n\r\n\t\t/// <summary>\r\n\t\t/// Serializes an object, or graph of objects with the given root to the provided stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"serializationStream\">The stream where the formatter puts the serialized data.</param>\r\n\t\t/// <param name=\"graph\">The object, or root of the object graph, to serialize.</param>\r\n\t\tpublic void Serialize(Stream serializationStream, object graph)\r\n\t\t{\r\n\t\t\tif (serializationStream == null)\r\n\t\t\t{\r\n\t\t\t\tthrow new ArgumentNullException(\"serializationStream\");\r\n\t\t\t}\r\n\t\t\tserializationPermission.Demand();\r\n\r\n\t\t\tStreamWriter stream_writer = new StreamWriter(serializationStream, encoding);\r\n\t\t\tObjectWriter object_writer = new ObjectWriter(ScriptContext.CurrentContext, stream_writer, caller);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tobject_writer.Serialize(graph);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tstream_writer.Flush();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deserializes the data on the provided stream and reconstitutes the graph of objects.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"serializationStream\">The stream containing the data to deserialize.</param>\r\n\t\t/// <returns>The top object of the deserialized graph.</returns>\r\n\t\tpublic object Deserialize(Stream serializationStream)\r\n\t\t{\r\n\t\t\tif (serializationStream == null)\r\n\t\t\t{\r\n\t\t\t\tthrow new ArgumentNullException(\"serializationStream\");\r\n\t\t\t}\r\n\t\t\tserializationPermission.Demand();\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tObjectReader object_reader = new ObjectReader(context, serializationStream, encoding, caller);\r\n            return object_reader.Deserialize();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpHttpUtility.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// This class implements alternative for HttpUtility.UrlEncode function which results have\r\n    /// hexadecimal values with small letters. However PHP returns big letters. This can lead\r\n    /// to incompatibility. e.g. %3a vs %3A\r\n    /// </summary>\r\n    internal static class PhpHttpUtility\r\n    {\r\n        public static byte[] UrlEncode(byte[] bytes)\r\n        {\r\n            if (bytes == null)\r\n            {\r\n                return null;\r\n            }\r\n            return UrlEncode(bytes, 0, bytes.Length);\r\n        }\r\n\r\n        public static string UrlEncode(string str, Encoding e)\r\n        {\r\n            if (str == null)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            byte[] bytes = e.GetBytes(str);\r\n            bytes = UrlEncode(bytes, 0, bytes.Length);\r\n            return Encoding.ASCII.GetString(bytes);\r\n        }\r\n\r\n        private static byte[] UrlEncode(byte[] bytes, int offset, int count)\r\n        {\r\n            if (!ValidateUrlEncodingParameters(bytes, offset, count))\r\n            {\r\n                return null;\r\n            }\r\n            int num = 0;\r\n            int num2 = 0;\r\n            for (int i = 0; i < count; i++)\r\n            {\r\n                char ch = (char)bytes[offset + i];\r\n                if (ch == ' ')\r\n                {\r\n                    num++;\r\n                }\r\n                else if (!IsUrlSafeChar(ch))\r\n                {\r\n                    num2++;\r\n                }\r\n            }\r\n            if ((num == 0) && (num2 == 0))\r\n            {\r\n                return bytes;\r\n            }\r\n            byte[] buffer = new byte[count + (num2 * 2)];\r\n            int num4 = 0;\r\n            for (int j = 0; j < count; j++)\r\n            {\r\n                byte num6 = bytes[offset + j];\r\n                char ch2 = (char)num6;\r\n                if (IsUrlSafeChar(ch2))\r\n                {\r\n                    buffer[num4++] = num6;\r\n                }\r\n                else if (ch2 == ' ')\r\n                {\r\n                    buffer[num4++] = 0x2b;\r\n                }\r\n                else\r\n                {\r\n                    buffer[num4++] = 0x25;\r\n                    buffer[num4++] = (byte)IntToHex((num6 >> 4) & 15);\r\n                    buffer[num4++] = (byte)IntToHex(num6 & 15);\r\n                }\r\n            }\r\n            return buffer;\r\n        }\r\n\r\n        private static bool ValidateUrlEncodingParameters(byte[] bytes, int offset, int count)\r\n        {\r\n            if ((bytes == null) && (count == 0))\r\n            {\r\n                return false;\r\n            }\r\n            if (bytes == null)\r\n            {\r\n                throw new ArgumentNullException(\"bytes\");\r\n            }\r\n            if ((offset < 0) || (offset > bytes.Length))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"offset\");\r\n            }\r\n            if ((count < 0) || ((offset + count) > bytes.Length))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"count\");\r\n            }\r\n            return true;\r\n        }\r\n\r\n\r\n        public static bool IsUrlSafeChar(char ch)\r\n        {\r\n            if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9')))\r\n            {\r\n                return true;\r\n            }\r\n            switch (ch)\r\n            {\r\n                case '(':\r\n                case ')':\r\n                case '*':\r\n                case '-':\r\n                case '.':\r\n                case '_':\r\n                case '!':\r\n                    return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        public static char IntToHex(int n)\r\n        {\r\n            if (n <= 9)\r\n            {\r\n                return (char)(n + 0x30);\r\n            }\r\n            return (char)((n - 10) + 0x41);\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpIni.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\n\r\nusing PHP;\r\nusing PHP.Core;\r\nusing Convert = PHP.Core.Convert;\r\nusing System.Web.Configuration;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enumerations\r\n\r\n\t/// <summary>\r\n\t/// Assertion options.\r\n\t/// </summary>\r\n\tpublic enum AssertOption\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Whether assertions are evaluated.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"ASSERT_ACTIVE\")]\r\n\t\tActive,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether an error is reported if assertion fails.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"ASSERT_WARNING\")]\r\n\t\tReportWarning,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether script execution is terminated if assertion fails.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"ASSERT_BAIL\")]\r\n\t\tTerminate,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether to disable error reporting during assertion evaluation.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"ASSERT_QUIET_EVAL\")]\r\n\t\tQuiet,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The user callback to be called if assertion fails. \r\n\t\t/// Can be a <B>null</B> reference which means no function is called.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"ASSERT_CALLBACK\")]\r\n\t\tCallback\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Class manipulating PHP configuration. \r\n\t/// The class is provided only for backward compatibility with PHP and \r\n\t/// is intended to be used only by a compiler of PHP language.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpIni\r\n\t{\r\n\t\t#region Default values for Core options having no equivalent in configuration record\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"default_mimetype\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const string DefaultMimetype = \"text/html\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"default_charset\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly string DefaultCharset = Configuration.Application.Globalization.PageEncoding.HeaderName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A value of \"error_log\" option meaning System log.\r\n\t\t/// </summary>\r\n\t\tpublic const string ErrorLogSysLog = \"syslog\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Core Options\r\n\r\n\t\tinternal static object GetSetRestoreCoreOption(LocalConfiguration local, string option, object value, IniAction action)\r\n\t\t{\r\n\t\t\tLocalConfiguration @default = Configuration.DefaultLocal;\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\t\t\tApplicationConfiguration app = Configuration.Application;\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n\t\t\t\t#region <paths>\r\n\r\n\t\t\t\tcase \"extension_dir\": Debug.Assert(action == IniAction.Get); return app.Paths.Libraries;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <compiler>\r\n\r\n\t\t\t\tcase \"short_open_tag\": Debug.Assert(action == IniAction.Get); return app.Compiler.ShortOpenTags;\r\n\t\t\t\tcase \"asp_tags\": Debug.Assert(action == IniAction.Get); return app.Compiler.AspTags;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <error-control>\r\n\r\n\t\t\t\tcase \"html_errors\": return GSR(ref local.ErrorControl.HtmlMessages, @default.ErrorControl.HtmlMessages, value, action);\r\n\t\t\t\tcase \"display_errors\": return GSR(ref local.ErrorControl.DisplayErrors, @default.ErrorControl.DisplayErrors, value, action);\r\n\t\t\t\tcase \"error_append_string\": return GSR(ref local.ErrorControl.ErrorAppendString, @default.ErrorControl.ErrorAppendString, value, action);\r\n\t\t\t\tcase \"error_prepend_string\": return GSR(ref local.ErrorControl.ErrorPrependString, @default.ErrorControl.ErrorPrependString, value, action);\r\n\t\t\t\tcase \"log_errors\": return GSR(ref local.ErrorControl.EnableLogging, @default.ErrorControl.EnableLogging, value, action);\r\n\t\t\t\tcase \"error_log\": return GsrErrorLog(local, @default, value, action);\r\n\t\t\t\tcase \"error_reporting\":\r\n\t\t\t\t\tswitch (action)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase IniAction.Get: return ErrorReporting();\r\n\t\t\t\t\t\tcase IniAction.Set: return ErrorReporting(Convert.ObjectToInteger(value));\r\n\t\t\t\t\t\tcase IniAction.Restore: return ErrorReporting((int)@default.ErrorControl.ReportErrors);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <output-control>\r\n\r\n\t\t\t\tcase \"implicit_flush\":\r\n\t\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\t\t\t\t\treturn @default.OutputControl.ImplicitFlush;\r\n\r\n\t\t\t\tcase \"output_handler\":\r\n\t\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\t\t\t\t\tIPhpConvertible handler = @default.OutputControl.OutputHandler;\r\n\t\t\t\t\treturn (handler != null) ? handler.ToString() : null;\r\n\r\n\t\t\t\tcase \"output_buffering\":\r\n\t\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\t\t\t\t\treturn @default.OutputControl.OutputBuffering;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <request-control>\r\n\r\n\t\t\t\tcase \"max_execution_time\":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobject result = GSR(ref local.RequestControl.ExecutionTimeout, @default.RequestControl.ExecutionTimeout, value, action);\r\n\r\n\t\t\t\t\t\t// applies the timeout:\r\n\t\t\t\t\t\tif (action != IniAction.Get)\r\n\t\t\t\t\t\t\tScriptContext.CurrentContext.ApplyExecutionTimeout(local.RequestControl.ExecutionTimeout);\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase \"ignore_user_abort\":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobject result = GSR(ref local.RequestControl.IgnoreUserAbort, @default.RequestControl.IgnoreUserAbort, value, action);\r\n\r\n\t\t\t\t\t\t// enables/disables disconnection tracking:\r\n\t\t\t\t\t\tif (action != IniAction.Get)\r\n\t\t\t\t\t\t\tRequestContext.CurrentContext.TrackClientDisconnection = !local.RequestControl.IgnoreUserAbort;\r\n\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <file-system>\r\n\r\n\t\t\t\tcase \"allow_url_fopen\": return GSR(ref local.FileSystem.AllowUrlFopen, @default.FileSystem.AllowUrlFopen, value, action);\r\n\t\t\t\tcase \"user_agent\": return GSR(ref local.FileSystem.UserAgent, @default.FileSystem.UserAgent, value, action);\r\n\t\t\t\tcase \"from\": return GSR(ref local.FileSystem.AnonymousFtpPassword, @default.FileSystem.AnonymousFtpPassword, value, action);\r\n\t\t\t\tcase \"default_socket_timeout\": return GSR(ref local.FileSystem.DefaultSocketTimeout, @default.FileSystem.DefaultSocketTimeout, value, action);\r\n\t\t\t\tcase \"include_path\": return GSR(ref local.FileSystem.IncludePaths, @default.FileSystem.IncludePaths, value, action);\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <variables>\r\n\r\n                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);\r\n\t\t\t\tcase \"magic_quotes_runtime\": return GSR(ref local.Variables.QuoteRuntimeVariables, @default.Variables.QuoteRuntimeVariables, value, action);\r\n                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);\r\n                case \"magic_quotes_gpc\": Debug.Assert(action == IniAction.Get || OptionValueToBoolean(value) == global.GlobalVariables.QuoteGpcVariables); return global.GlobalVariables.QuoteGpcVariables;\r\n\t\t\t\tcase \"register_argc_argv\": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterArgcArgv;\r\n\t\t\t\tcase \"register_globals\": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterGlobals;\r\n\t\t\t\tcase \"register_long_arrays\": Debug.Assert(action == IniAction.Get); return global.GlobalVariables.RegisterLongArrays;\r\n\t\t\t\tcase \"variables_order\": return GsrVariablesOrder(local, @default, value, action);\r\n\r\n\t\t\t\tcase \"unserialize_callback_func\":\r\n\t\t\t\t\treturn GSR(ref local.Variables.DeserializationCallback, @default.Variables.DeserializationCallback, value, action);\r\n\r\n                case \"always_populate_raw_post_data\":\r\n                    switch (action)\r\n                    {\r\n                        case IniAction.Restore: local.Variables.AlwaysPopulateRawPostData = false; break;\r\n                        case IniAction.Set: local.Variables.AlwaysPopulateRawPostData = Convert.ObjectToBoolean(value); break;\r\n                    }\r\n                    return local.Variables.AlwaysPopulateRawPostData;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <posted-files>\r\n\r\n\t\t\t\tcase \"file_uploads\": Debug.Assert(action == IniAction.Get); return global.PostedFiles.Accept;\r\n\t\t\t\tcase \"upload_tmp_dir\": Debug.Assert(action == IniAction.Get); return global.PostedFiles.TempPath;\r\n\r\n\t\t\t\tcase \"post_max_size\":\r\n\t\t\t\tcase \"upload_max_filesize\":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\r\n\t\t\t\t\t\tHttpContext context;\r\n\t\t\t\t\t\tif (!Web.EnsureHttpContext(out context)) return null;\r\n\r\n\t\t\t\t\t\tHttpRuntimeSection http_runtime_section = (HttpRuntimeSection)context.GetSection(\"system.web/httpRuntime\");\r\n\t\t\t\t\t\treturn (http_runtime_section != null) ? http_runtime_section.MaxRequestLength * 1024 : 0;// values in config are in kB, PHP's in B\r\n\t\t\t\t\t}\r\n\r\n                #endregion\r\n\r\n\t\t\t\t#region <assert>\r\n\r\n\t\t\t\tcase \"assert.active\": return GSR(ref local.Assertion.Active, @default.Assertion.Active, value, action);\r\n\t\t\t\tcase \"assert.bail\": return GSR(ref local.Assertion.Terminate, @default.Assertion.Terminate, value, action);\r\n\t\t\t\tcase \"assert.quiet_eval\": return GSR(ref local.Assertion.Quiet, @default.Assertion.Quiet, value, action);\r\n\t\t\t\tcase \"assert.warning\": return GSR(ref local.Assertion.ReportWarning, @default.Assertion.ReportWarning, value, action);\r\n\t\t\t\tcase \"assert.callback\": return GSR(ref local.Assertion.Callback, @default.Assertion.Callback, value, action);\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <safe-mode>\r\n\r\n\t\t\t\tcase \"safe_mode\": Debug.Assert(action == IniAction.Get); return global.SafeMode.Enabled;\r\n\t\t\t\tcase \"open_basedir\": Debug.Assert(action == IniAction.Get); return global.SafeMode.GetAllowedPathPrefixesJoin();\r\n\t\t\t\tcase \"safe_mode_exec_dir\": Debug.Assert(action == IniAction.Get); return global.SafeMode.ExecutionDirectory;\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region <session>\r\n\r\n\t\t\t\tcase \"session.save_handler\": return PhpSession.GsrHandler(local, @default, value, action);\r\n\t\t\t\tcase \"session.auto_start\": Debug.Assert(action == IniAction.Get); return local.Session.AutoStart;\r\n\t\t\t\tcase \"session.name\": Debug.Assert(action == IniAction.Get); return PhpSession.Name();\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t#region others\r\n\r\n\t\t\t\tcase \"default_charset\": return GsrDefaultCharset(value, action);\r\n\t\t\t\tcase \"default_mimetype\": return GsrDefaultMimetype(value, action);\r\n                case \"memory_limit\": return GsrMemoryLimit(value, action);\r\n                case \"disable_functions\": return GsrDisableFunctions(value, action);\r\n\r\n\t\t\t\t#endregion\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes Core legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void CoreOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS: <string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n\t\t\tApplicationConfiguration app = new ApplicationConfiguration();\r\n\t\t\tGlobalConfiguration global = new GlobalConfiguration();\r\n\t\t\tLocalConfiguration local = new LocalConfiguration();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n\t\t\tow.StartSection(\"compiler\");\r\n\t\t\tow.WriteOption(\"short_open_tag\", \"ShortOpenTag\", true, app.Compiler.ShortOpenTags);\r\n\t\t\tow.WriteOption(\"asp_tags\", \"AspTags\", false, app.Compiler.AspTags);\r\n\r\n\t\t\tow.StartSection(\"variables\");\r\n\t\t\t//ow.WriteOption(\"zend.ze1_compatibility_mode\", \"ZendEngineV1Compatible\", false, local.Variables.ZendEngineV1Compatible);\r\n\t\t\tow.WriteOption(\"register_globals\", \"RegisterGlobals\", false, global.GlobalVariables.RegisterGlobals);\r\n\t\t\tow.WriteOption(\"register_argc_argv\", \"RegisterArgcArgv\", true, global.GlobalVariables.RegisterArgcArgv);\r\n\t\t\tow.WriteOption(\"register_long_arrays\", \"RegisterLongArrays\", true, global.GlobalVariables.RegisterLongArrays);\r\n\t\t\tow.WriteOption(\"variables_order\", \"RegisteringOrder\", \"EGPCS\", local.Variables.RegisteringOrder);\r\n\t\t\t//ow.WriteOption(\"magic_quotes_gpc\", \"QuoteGpcVariables\", true, global.GlobalVariables.QuoteGpcVariables);\r\n\t\t\tow.WriteOption(\"magic_quotes_runtime\", \"QuoteRuntimeVariables\", false, local.Variables.QuoteRuntimeVariables);\r\n\t\t\t//ow.WriteOption(\"magic_quotes_sybase\", \"QuoteInDbManner\", false, local.Variables.QuoteInDbManner);\r\n\t\t\tow.WriteOption(\"unserialize_callback_func\", \"DeserializationCallback\", null, local.Variables.DeserializationCallback);\r\n\r\n\t\t\tow.StartSection(\"output-control\");\r\n\t\t\tow.WriteOption(\"output_buffering\", \"OutputBuffering\", false, local.OutputControl.OutputBuffering);\r\n\t\t\tow.WriteOption(\"output_handler\", \"OutputHandler\", null, local.OutputControl.OutputHandler);\r\n\t\t\tow.WriteOption(\"implicit_flush\", \"ImplicitFlush\", false, local.OutputControl.ImplicitFlush);\r\n\t\t\tow.WriteOption(\"default_mimetype\", \"ContentType\", \"text/html\", DefaultMimetype);\r\n\t\t\tow.WriteOption(\"default_charset\", \"Charset\", \"\", DefaultCharset);\r\n\r\n\t\t\tow.StartSection(\"request-control\");\r\n\t\t\tow.WriteOption(\"max_execution_time\", \"ExecutionTimeout\", 30, local.RequestControl.ExecutionTimeout);\r\n\t\t\tow.WriteOption(\"ignore_user_abort\", \"IgnoreUserAbort\", false, local.RequestControl.IgnoreUserAbort);\r\n\r\n\t\t\tow.StartSection(\"error-control\");\r\n\t\t\tow.WriteEnumOption(\"error_reporting\", \"ReportErrors\", (int)PhpErrorSet.AllButStrict, (int)local.ErrorControl.ReportErrors, typeof(PhpError));\r\n\t\t\tow.WriteOption(\"display_errors\", \"DisplayErrors\", true, local.ErrorControl.DisplayErrors);\r\n\t\t\tow.WriteOption(\"html_errors\", \"HtmlMessages\", true, local.ErrorControl.HtmlMessages);\r\n\t\t\tow.WriteOption(\"docref_root\", \"DocRefRoot\", null, local.ErrorControl.DocRefRoot.ToString());\r\n\t\t\tow.WriteOption(\"docref_ext\", \"DocRefExtension\", null, local.ErrorControl.DocRefExtension);\r\n\t\t\tow.WriteErrorLog(\"error_log\", null, local.ErrorControl.SysLog, local.ErrorControl.LogFile);\r\n\t\t\tow.WriteOption(\"log_errors\", \"EnableLogging\", false, local.ErrorControl.EnableLogging);\r\n\t\t\tow.WriteOption(\"error_prepend_string\", \"ErrorPrependString\", null, local.ErrorControl.ErrorPrependString);\r\n\t\t\tow.WriteOption(\"error_append_string\", \"ErrorAppendString\", null, local.ErrorControl.ErrorAppendString);\r\n\r\n\t\t\tow.StartSection(\"session-control\");\r\n\t\t\tow.WriteOption(\"session.auto_start\", \"AutoStart\", false, local.Session.AutoStart);\r\n\t\t\tow.WriteOption(\"session.save_handler\", \"Handler\", \"files\", local.Session.Handler.Name);\r\n\r\n\t\t\tow.StartSection(\"assertion\");\r\n\t\t\tow.WriteOption(\"assert.active\", \"Active\", true, local.Assertion.Active);\r\n\t\t\tow.WriteOption(\"assert.warning\", \"ReportWarning\", true, local.Assertion.ReportWarning);\r\n\t\t\tow.WriteOption(\"assert.bail\", \"Terminate\", false, local.Assertion.Terminate);\r\n\t\t\tow.WriteOption(\"assert.quiet_eval\", \"Quiet\", false, local.Assertion.Quiet);\r\n\t\t\tow.WriteOption(\"assert.callback\", \"Callback\", null, local.Assertion.Callback);\r\n\r\n\t\t\tow.StartSection(\"safe-mode\");\r\n\t\t\tow.WriteOption(\"safe_mode\", \"Enabled\", false, global.SafeMode.Enabled);\r\n\t\t\tow.WriteOption(\"open_basedir\", \"AllowedPathPrefixes\", null, global.SafeMode.GetAllowedPathPrefixesJoin());\r\n\t\t\tow.WriteOption(\"safe_mode_exec_dir\", \"ExecutionDirectory\", null, global.SafeMode.ExecutionDirectory);\r\n\r\n\t\t\tow.StartSection(\"posted-files\");\r\n\t\t\tow.WriteOption(\"file_uploads\", \"Accept\", true, global.PostedFiles.Accept);\r\n\t\t\tow.WriteOption(\"upload_tmp_dir\", \"TempPath\", null, global.PostedFiles.TempPath);\r\n\r\n\t\t\tow.StartSection(\"file-system\");\r\n\t\t\tow.WriteOption(\"allow_url_fopen\", \"AllowUrlFopen\", true, local.FileSystem.AllowUrlFopen);\r\n\t\t\tow.WriteOption(\"default_socket_timeout\", \"DefaultSocketTimeout\", 60, local.FileSystem.DefaultSocketTimeout);\r\n\t\t\tow.WriteOption(\"user_agent\", \"UserAgent\", null, local.FileSystem.UserAgent);\r\n\t\t\tow.WriteOption(\"from\", \"AnonymousFtpPassword\", null, local.FileSystem.AnonymousFtpPassword);\r\n\t\t\tow.WriteOption(\"include_path\", \"IncludePaths\", \".\", local.FileSystem.IncludePaths);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Public GSRs\r\n\r\n\t\tinternal static bool OptionValueToBoolean(object value)\r\n\t\t{\r\n\t\t\tstring sval = value as string;\r\n\t\t\tif (sval != null)\r\n\t\t\t{\r\n\t\t\t\tswitch (sval.ToLower(System.Globalization.CultureInfo.InvariantCulture)) // we dont need any unicode chars lowercased properly, CurrentCulture is slow\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"on\":\r\n\t\t\t\t\tcase \"yes\": return true;\r\n\r\n\t\t\t\t\tcase \"off\":\r\n\t\t\t\t\tcase \"no\":\r\n\t\t\t\t\tcase \"none\": return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn Convert.ObjectToBoolean(value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores boolean option.\r\n\t\t/// </summary>\r\n\t\tpublic static object GSR(ref bool option, bool defaultValue, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = option;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: option = OptionValueToBoolean(value); break;\r\n\t\t\t\tcase IniAction.Restore: option = defaultValue; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores integer option.\r\n\t\t/// </summary>\r\n\t\tpublic static object GSR(ref int option, int defaultValue, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = option;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: option = Convert.ObjectToInteger(value); break;\r\n\t\t\t\tcase IniAction.Restore: option = defaultValue; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores double option.\r\n\t\t/// </summary>\r\n\t\tpublic static object GSR(ref double option, double defaultValue, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = option;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: option = Convert.ObjectToDouble(value); break;\r\n\t\t\t\tcase IniAction.Restore: option = defaultValue; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores string option.\r\n\t\t/// </summary>\r\n\t\tpublic static object GSR(ref string option, string defaultValue, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = option;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: option = Convert.ObjectToString(value); break;\r\n\t\t\t\tcase IniAction.Restore: option = defaultValue; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores callback option.\r\n\t\t/// </summary>\r\n\t\tpublic static object GSR(ref PhpCallback option, PhpCallback defaultValue, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = option;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: option = Convert.ObjectToCallback(value); break;\r\n\t\t\t\tcase IniAction.Restore: option = defaultValue; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Special GSRs\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores \"default_charset\" option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GsrDefaultCharset(object value, IniAction action)\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\r\n\t\t\tif (!Web.EnsureHttpContext(out context)) return null;\r\n\r\n\t\t\tobject result = context.Response.Charset;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: context.Response.Charset = Convert.ObjectToString(value); break;\r\n\t\t\t\tcase IniAction.Restore: context.Response.Charset = DefaultCharset; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores \"default_mimetype\" option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GsrDefaultMimetype(object value, IniAction action)\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\r\n\t\t\tif (!Web.EnsureHttpContext(out context)) return null;\r\n\r\n\t\t\tobject result = context.Response.ContentType;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set: context.Response.ContentType = Convert.ObjectToString(value); break;\r\n\t\t\t\tcase IniAction.Restore: context.Response.ContentType = DefaultMimetype; break;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets, sets or restores \"memory_limit\" option.\r\n        /// </summary>\r\n        private static object GsrMemoryLimit(object value, IniAction action)\r\n        {\r\n            object result = -1;\r\n            switch (action)\r\n            {\r\n                case IniAction.Set:\r\n                case IniAction.Restore:\r\n                    PhpException.ArgumentValueNotSupported(\"memory_limit\", action);\r\n                    break;\r\n            }\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets, sets or restores \"disable_functions\" option.\r\n        /// </summary>\r\n        private static object GsrDisableFunctions(object value, IniAction action)\r\n        {\r\n            object result = \"\";\r\n            switch (action)\r\n            {\r\n                case IniAction.Set:\r\n                case IniAction.Restore:\r\n                    PhpException.ArgumentValueNotSupported(\"disable_functions\", action);\r\n                    break;\r\n            }\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores \"variables_order\" option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GsrVariablesOrder(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action)\r\n\t\t{\r\n\t\t\tobject result = local.Variables.RegisteringOrder;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\tstring svalue = Convert.ObjectToString(value);\r\n\r\n\t\t\t\t\tif (!LocalConfiguration.VariablesSection.ValidateRegisteringOrder(svalue))\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_registering_order\"));\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tlocal.Variables.RegisteringOrder = svalue;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tlocal.Variables.RegisteringOrder = @default.Variables.RegisteringOrder;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores \"error_log\" option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GsrErrorLog(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action)\r\n\t\t{\r\n\t\t\tif (action == IniAction.Restore)\r\n\t\t\t{\r\n\t\t\t\tlocal.ErrorControl.LogFile = @default.ErrorControl.LogFile;\r\n\t\t\t\tlocal.ErrorControl.SysLog = @default.ErrorControl.SysLog;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tstring result = (local.ErrorControl.SysLog) ? ErrorLogSysLog : local.ErrorControl.LogFile;\r\n\r\n\t\t\tif (action == IniAction.Set)\r\n\t\t\t{\r\n\t\t\t\tstring svalue = Convert.ObjectToString(value);\r\n\t\t\t\tlocal.ErrorControl.SysLog = (string.Compare(svalue, ErrorLogSysLog, StringComparison.InvariantCultureIgnoreCase) == 0);\r\n\t\t\t\tlocal.ErrorControl.LogFile = (local.ErrorControl.SysLog) ? svalue : null;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ini_get, ini_set, ini_restore, get_cfg_var, ini_alter\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of a configuration option.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option name (case sensitive).</param>\r\n\t\t/// <returns>The option old value conveted to string or <B>false</B> on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The option is not supported (Warning).</exception>\r\n\t\t[ImplementsFunction(\"ini_get\")]\r\n\t\tpublic static object Get(string option)\r\n\t\t{\r\n\t\t\tbool error;\r\n\t\t\tobject result = IniOptions.TryGetSetRestore(option, null, IniAction.Get, out error);\r\n\t\t\tif (error) return false;\r\n\r\n\t\t\treturn Convert.ObjectToString(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of a configuration option.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option name (case sensitive).</param>\r\n\t\t/// <param name=\"value\">The option new value.</param>\r\n\t\t/// <returns>The option old value converted to string or <B>false</B> on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The option is not supported (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The option cannot be set by script (Warning).</exception>\r\n\t\t[ImplementsFunction(\"ini_set\")]\r\n\t\tpublic static object Set(string option, object value)\r\n\t\t{\r\n\t\t\tbool error;\r\n\t\t\tobject result = IniOptions.TryGetSetRestore(option, value, IniAction.Set, out error);\r\n\t\t\tif (error) return false;\r\n\r\n\t\t\treturn Convert.ObjectToString(result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restores the value of a configuration option to its global value.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option name (case sensitive).</param>\r\n\t\t/// <exception cref=\"PhpException\">The option is not supported (Warning).</exception>\r\n\t\t[ImplementsFunction(\"ini_restore\")]\r\n\t\tpublic static void Restore(string option)\r\n\t\t{\r\n\t\t\tbool error;\r\n\t\t\tIniOptions.TryGetSetRestore(option, null, IniAction.Restore, out error);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of a configuration option (alias for <see cref=\"Get\"/>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option name (case sensitive).</param>\r\n\t\t/// <returns>The option old value conveted to string or <B>false</B> on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The option is not supported (Warning).</exception>\r\n\t\t[ImplementsFunction(\"get_cfg_var\")]\r\n\t\tpublic static object GetCfgVar(string option)\r\n\t\t{\r\n\t\t\treturn Get(option);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of a configuration option (alias for <see cref=\"Set\"/>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option name (case sensitive).</param>\r\n\t\t/// <param name=\"value\">The option new value converted to string.</param>\r\n\t\t/// <returns>The option old value.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The option is not supported (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The option cannot be set by script (Warning).</exception>\r\n\t\t[ImplementsFunction(\"ini_alter\")]\r\n\t\tpublic static object Alter(string option, object value)\r\n\t\t{\r\n\t\t\treturn Set(option, value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_all\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an array of all configuration entries.\r\n\t\t/// </summary>\r\n\t\t/// <seealso cref=\"GetAll(string)\"/>\r\n\t\t[ImplementsFunction(\"ini_get_all\")]\r\n\t\tpublic static PhpArray GetAll()\r\n\t\t{\r\n\t\t\treturn (PhpArray)IniOptions.GetAllOptionStates(null, new PhpArray(0, IniOptions.Count));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an array of configuration entries of a specified extension.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"extension\">The PHP internal extension name.</param>\r\n\t\t/// <remarks>\r\n\t\t/// For each supported configuration option an entry is added to the resulting array.\r\n\t\t/// The key is the name of the option and the value is an array having three entries: \r\n\t\t/// <list type=\"bullet\">\r\n\t\t///   <item><c>global_value</c> - global value of the option</item>\r\n\t\t///   <item><c>local_value</c> - local value of the option</item>\r\n\t\t///   <item><c>access</c> - 7 (PHP_INI_ALL), 6 (PHP_INI_PERDIR | PHP_INI_SYSTEM) or 4 (PHP_INI_SYSTEM)</item>\r\n\t\t/// </list>\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"ini_get_all\")]\r\n\t\tpublic static PhpArray GetAll(string extension)\r\n\t\t{\r\n            PhpArray result = new PhpArray();\r\n\r\n\t\t\t// adds options from managed libraries:\r\n\t\t\tIniOptions.GetAllOptionStates(extension, result);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region assert_options\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of an assert option.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option which value to get.</param>\r\n\t\t/// <returns>The value of the option.</returns>\r\n\t\t[ImplementsFunction(\"assert_options\")]\r\n\t\tpublic static object AssertOptions(AssertOption option)\r\n\t\t{\r\n\t\t\treturn AssertOptions(option, null, IniAction.Get);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a value of an assert option.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"option\">The option which value to get.</param>\r\n\t\t/// <param name=\"value\">The new value for the option.</param>\r\n\t\t/// <returns>The value of the option.</returns>\r\n\t\t[ImplementsFunction(\"assert_options\")]\r\n\t\tpublic static object AssertOptions(AssertOption option, object value)\r\n\t\t{\r\n\t\t\treturn AssertOptions(option, value, IniAction.Set);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implementation of <see cref=\"AssertOptions(AssertOption)\"/> and <see cref=\"AssertOptions(AssertOption,object)\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Only gets/sets. No restore.</remarks>\r\n\t\tprivate static object AssertOptions(AssertOption option, object value, IniAction action)\r\n\t\t{\r\n\t\t\tLocalConfiguration config = Configuration.Local;\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n\t\t\t\tcase AssertOption.Active:\r\n\t\t\t\t\treturn GSR(ref config.Assertion.Active, false, value, action);\r\n\r\n\t\t\t\tcase AssertOption.Callback:\r\n\t\t\t\t\treturn GSR(ref config.Assertion.Callback, null, value, action);\r\n\r\n\t\t\t\tcase AssertOption.Quiet:\r\n\t\t\t\t\treturn GSR(ref config.Assertion.Quiet, false, value, action);\r\n\r\n\t\t\t\tcase AssertOption.Terminate:\r\n\t\t\t\t\treturn GSR(ref config.Assertion.Terminate, false, value, action);\r\n\r\n\t\t\t\tcase AssertOption.ReportWarning:\r\n\t\t\t\t\treturn GSR(ref config.Assertion.ReportWarning, false, value, action);\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.InvalidArgument(\"option\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_include_path, set_include_path, restore_include_path\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of \"include_path\" option.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The current value.</returns>\r\n\t\t[ImplementsFunction(\"get_include_path\")]\r\n\t\tpublic static string GetIncludePath()\r\n\t\t{\r\n\t\t\treturn Configuration.Local.FileSystem.IncludePaths;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a new value of \"include_path\" option.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A previous value.</returns>\r\n\t\t[ImplementsFunction(\"set_include_path\")]\r\n\t\tpublic static string SetIncludePath(string value)\r\n\t\t{\r\n\t\t\tLocalConfiguration config = Configuration.Local;\r\n\t\t\tstring result = config.FileSystem.IncludePaths;\r\n\t\t\tconfig.FileSystem.IncludePaths = value;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restores a value of \"include_path\" option from global configuration.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"restore_include_path\")]\r\n\t\tpublic static void RestoreIncludePath()\r\n\t\t{\r\n\t\t\tConfiguration.Local.FileSystem.IncludePaths = Configuration.DefaultLocal.FileSystem.IncludePaths;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_magic_quotes_gpc, get_magic_quotes_runtime, set_magic_quotes_runtime\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of \"magic_quotes_gpc\" option.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The current value.</returns>\r\n\t\t[ImplementsFunction(\"get_magic_quotes_gpc\")]\r\n\t\tpublic static bool GetMagicQuotesGPC()\r\n\t\t{\r\n            return Configuration.Global.GlobalVariables.QuoteGpcVariables;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of \"magic_quotes_runtime\" option.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The current value.</returns>\r\n\t\t[ImplementsFunction(\"get_magic_quotes_runtime\")]\r\n\t\tpublic static bool GetMagicQuotesRuntime()\r\n\t\t{\r\n\t\t\treturn Configuration.Local.Variables.QuoteRuntimeVariables;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a new value of \"magic_quotes_runtime\" option.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The new value.</param>\r\n\t\t/// <returns>A previous value.</returns>\r\n\t\t[ImplementsFunction(\"set_magic_quotes_runtime\")]\r\n\t\tpublic static bool SetMagicQuotesRuntime(bool value)\r\n\t\t{\r\n\t\t\tLocalConfiguration local = Configuration.Local;\r\n\t\t\tbool result = local.Variables.QuoteRuntimeVariables;\r\n\t\t\tlocal.Variables.QuoteRuntimeVariables = value;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region error_reporting, set_error_handler, restore_error_handler, set_exception_handler, restore_exception_handler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the current error reporting level.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// The bitmask of error types which are reported. Returns 0 if error reporting is disabled\r\n\t\t/// by means of @ operator.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"error_reporting\")]\r\n\t\tpublic static int ErrorReporting()\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.ErrorReportingLevel;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a new level of error reporting.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"level\">The new level.</param>\r\n\t\t/// <returns>The original level.</returns>\r\n\t\t[ImplementsFunction(\"error_reporting\")]\r\n\t\tpublic static int ErrorReporting(int level)\r\n\t\t{\r\n\t\t\tif ((level & (int)PhpErrorSet.All) == 0 && level != 0)\r\n\t\t\t\tPhpException.InvalidArgument(\"level\");\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tint result = context.ErrorReportingLevel;\r\n\t\t\tcontext.Config.ErrorControl.ReportErrors = PhpErrorSet.All & (PhpErrorSet)level;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal record in the error handler stack.\r\n\t\t/// </summary>\r\n\t\tprivate class ErrorHandlerRecord\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Error handler callback.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback ErrorHandler;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Error types to be handled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpError ErrorTypes;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Public constructor of the class.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"handler\">Error handler callback.</param>\r\n\t\t\t/// <param name=\"errors\">Error types to be handled.</param>\r\n\t\t\tpublic ErrorHandlerRecord(PhpCallback handler, PhpError errors)\r\n\t\t\t{\r\n\t\t\t\tErrorHandler = handler;\r\n\t\t\t\tErrorTypes = errors;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores user error handlers which has been rewritten by a new one.\r\n\t\t/// </summary>\r\n\t\t[ThreadStatic]\r\n\t\tprivate static Stack OldUserErrorHandlers;          // GENERICS: <ErrorHandlerRecord>\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores user exception handlers which has been rewritten by a new one.\r\n\t\t/// </summary>\r\n\t\t[ThreadStatic]\r\n\t\tprivate static Stack OldUserExceptionHandlers;          // GENERICS: <PhpCallback>\r\n\r\n\t\t/// <summary>\r\n\t\t/// Clears <see cref=\"OldUserErrorHandlers\"/> and <see cref=\"OldUserExceptionHandlers\"/> on request end.\r\n\t\t/// </summary>\r\n\t\tprivate static void ClearOldUserHandlers()\r\n\t\t{\r\n\t\t\tOldUserErrorHandlers = null;\r\n\t\t\tOldUserExceptionHandlers = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets user defined handler to handle errors.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n\t\t/// <param name=\"newHandler\">The user callback called to handle an error.</param>\r\n\t\t/// <returns>\r\n\t\t/// The PHP representation of previous user handler, <B>null</B> if there is no user one, or \r\n\t\t/// <B>false</B> if <paramref name=\"newHandler\"/> is invalid or empty.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Stores old user handlers on the stack so that it is possible to \r\n\t\t/// go back to arbitrary previous user handler.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"set_error_handler\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object SetErrorHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler)\r\n\t\t{\r\n\t\t\treturn SetErrorHandler(caller, newHandler, (int)PhpErrorSet.Handleable);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets user defined handler to handle errors.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n        /// <param name=\"newHandler\">The user callback called to handle an error.</param>\r\n\t\t/// <param name=\"errorTypes\">Error types to be handled by the handler.</param>\r\n\t\t/// <returns>\r\n\t\t/// The PHP representation of previous user handler, <B>null</B> if there is no user one, or \r\n\t\t/// <B>false</B> if <paramref name=\"newHandler\"/> is invalid or empty.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Stores old user handlers on the stack so that it is possible to \r\n\t\t/// go back to arbitrary previous user handler.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"set_error_handler\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object SetErrorHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler, int errorTypes)\r\n\t\t{\r\n\t\t\tif (!PhpArgument.CheckCallback(newHandler, caller, \"newHandler\", 0, false)) return null;\r\n\r\n\t\t\tPhpCallback old_handler = Configuration.Local.ErrorControl.UserHandler;\r\n\t\t\tPhpError old_errors = Configuration.Local.ErrorControl.UserHandlerErrors;\r\n\r\n\t\t\t// previous handler was defined by user => store it into the stack:\r\n\t\t\tif (old_handler != null)\r\n\t\t\t{\r\n\t\t\t\tif (OldUserErrorHandlers == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tOldUserErrorHandlers = new Stack(5);\r\n                    RequestContext.RequestEnd += new Action(ClearOldUserHandlers);\r\n\t\t\t\t}\r\n\t\t\t\tOldUserErrorHandlers.Push(new ErrorHandlerRecord(old_handler, old_errors));\r\n\t\t\t}\r\n\r\n\t\t\t// sets the current handler:\r\n\t\t\tConfiguration.Local.ErrorControl.UserHandler = newHandler;\r\n\t\t\tConfiguration.Local.ErrorControl.UserHandlerErrors = (PhpError)errorTypes;\r\n\r\n\t\t\t// returns the previous handler:\r\n\t\t\treturn (old_handler != null) ? old_handler.ToPhpRepresentation() : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restores the previous user error handler if there was any.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"restore_error_handler\")]\r\n\t\tpublic static bool RestoreErrorHandler()\r\n\t\t{\r\n\t\t\t// if some user handlers has been stored in the stack then restore the top-most, otherwise set to null:\r\n\t\t\tif (OldUserErrorHandlers != null && OldUserErrorHandlers.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tErrorHandlerRecord record = (ErrorHandlerRecord)OldUserErrorHandlers.Pop();\r\n\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserHandler = record.ErrorHandler;\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserHandlerErrors = record.ErrorTypes;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserHandler = null;\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserHandlerErrors = (PhpError)PhpErrorSet.None;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets user defined handler to handle exceptions.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context used to bind the callback.</param>\r\n        /// <param name=\"newHandler\">The user callback called to handle an exceptions.</param>\r\n\t\t/// <returns>\r\n\t\t/// The PHP representation of previous user handler, <B>null</B> if there is no user one, or \r\n\t\t/// <B>false</B> if <paramref name=\"newHandler\"/> is invalid or empty.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Stores old user handlers on the stack so that it is possible to \r\n\t\t/// go back to arbitrary previous user handler.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"set_exception_handler\", FunctionImplOptions.NeedsClassContext)]\r\n        public static object SetExceptionHandler(PHP.Core.Reflection.DTypeDesc caller, PhpCallback newHandler)\r\n\t\t{\r\n\t\t\tif (!PhpArgument.CheckCallback(newHandler, caller, \"newHandler\", 0, false)) return null;\r\n\r\n\t\t\tPhpCallback old_handler = Configuration.Local.ErrorControl.UserExceptionHandler;\r\n\r\n\t\t\t// previous handler was defined by user => store it into the stack:\r\n\t\t\tif (old_handler != null)\r\n\t\t\t{\r\n\t\t\t\tif (OldUserExceptionHandlers == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tOldUserExceptionHandlers = new Stack(5);\r\n                    RequestContext.RequestEnd += new Action(ClearOldUserHandlers);\r\n\t\t\t\t}\r\n\t\t\t\tOldUserExceptionHandlers.Push(old_handler);\r\n\t\t\t}\r\n\r\n\t\t\t// sets the current handler:\r\n\t\t\tConfiguration.Local.ErrorControl.UserExceptionHandler = newHandler;\r\n\r\n\t\t\t// returns the previous handler:\r\n\t\t\treturn (old_handler != null) ? old_handler.ToPhpRepresentation() : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restores the previous user error handler if there was any.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"restore_exception_handler\")]\r\n\t\tpublic static bool RestoreExceptionHandler()\r\n\t\t{\r\n\t\t\tif (OldUserExceptionHandlers != null && OldUserExceptionHandlers.Count > 0)\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserExceptionHandler = (PhpCallback)OldUserExceptionHandlers.Pop();\r\n\t\t\telse\r\n\t\t\t\tConfiguration.Local.ErrorControl.UserExceptionHandler = null;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region set_time_limit, ignore_user_abort\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the request time-out in seconds (configuration option \"max_execution_time\").\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"seconds\">The time-out setting for request.</param>\r\n\t\t[ImplementsFunction(\"set_time_limit\")]\r\n\t\tpublic static void SetTimeLimit(int seconds)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.ApplyExecutionTimeout(seconds);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a value of a configuration option \"ignore_user_abort\".\r\n\t\t/// </summary>\r\n\t\t/// <returns>The current value of the option.</returns>\r\n\t\t[ImplementsFunction(\"ignore_user_abort\")]\r\n\t\tpublic static bool IgnoreUserAbort()\r\n\t\t{\r\n\t\t\treturn Configuration.Local.RequestControl.IgnoreUserAbort;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a value of a configuration option \"ignore_user_abort\".\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The new value of the option.</param>\r\n\t\t/// <returns>The previous value of the option.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web request PHP context is not available (Warning).</exception>\r\n\t\t[ImplementsFunction(\"ignore_user_abort\")]\r\n\t\tpublic static bool IgnoreUserAbort(bool value)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tif (!Web.EnsureRequestContext(out context)) return true;\r\n\r\n\t\t\tLocalConfiguration local = Configuration.Local;\r\n\t\t\tbool result = local.RequestControl.IgnoreUserAbort;\r\n\t\t\tlocal.RequestControl.IgnoreUserAbort = value;\r\n\r\n\t\t\t// enables/disables disconnection tracking:\r\n\t\t\tcontext.TrackClientDisconnection = !value;\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#region PhpIniXmlWriter\r\n\r\n\tpublic sealed class PhpIniXmlWriter\r\n\t{\r\n\t\tprivate readonly XmlTextWriter writer;\r\n\t\tprivate readonly Hashtable options; // GENERICS: <string,string>\r\n\t\tprivate readonly bool writePhpNames;\r\n\r\n\t\tprivate string startSection;\r\n\t\tprivate bool sectionOpened;\r\n\r\n\t\tpublic PhpIniXmlWriter(XmlTextWriter writer, Hashtable options, bool writePhpNames)\r\n\t\t{\r\n\t\t\tthis.writer = writer;\r\n\t\t\tthis.options = options;\r\n\t\t\tthis.writePhpNames = writePhpNames;\r\n\t\t}\r\n\r\n\t\tpublic void WriteEnd()\r\n\t\t{\r\n\t\t\tif (sectionOpened)\r\n\t\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void StartSection(string name)\r\n\t\t{\r\n\t\t\tstartSection = name;\r\n\t\t}\r\n\r\n\t\tprivate void StartElement()\r\n\t\t{\r\n\t\t\tif (startSection != null)\r\n\t\t\t{\r\n\t\t\t\tif (sectionOpened)\r\n\t\t\t\t\twriter.WriteEndElement();\r\n\r\n\t\t\t\twriter.WriteStartElement(startSection);\r\n\t\t\t\tstartSection = null;\r\n\t\t\t\tsectionOpened = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void WriteSetNode(string phpName, string xmlName, string value)\r\n\t\t{\r\n\t\t\tStartElement();\r\n\t\t\twriter.WriteStartElement(\"set\");\r\n\r\n\t\t\twriter.WriteAttributeString(\"name\", xmlName);\r\n\t\t\twriter.WriteAttributeString(\"value\", value);\r\n\t\t\tif (writePhpNames)\r\n\t\t\t\twriter.WriteAttributeString(\"phpName\", phpName);\r\n\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tprivate void WriteEnumSetNode(string phpName, string xmlName, int value, Type type)\r\n\t\t{\r\n\t\t\tStartElement();\r\n\t\t\twriter.WriteStartElement(\"set\");\r\n\r\n\t\t\twriter.WriteAttributeString(\"name\", xmlName);\r\n\t\t\tif (writePhpNames)\r\n\t\t\t\twriter.WriteAttributeString(\"phpName\", phpName);\r\n\r\n\t\t\twriter.WriteStartElement(\"clear\");\r\n\t\t\twriter.WriteEndElement();\r\n\r\n\t\t\twriter.WriteStartElement(\"add\");\r\n\t\t\twriter.WriteAttributeString(\"value\", Enum.Format(type, value, \"G\"));\r\n\t\t\twriter.WriteEndElement();\r\n\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void WriteOption(string phpName, string xmlName, string phpValue, string defValue)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = (string)options[phpName];\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue == null) phpValue = \"\";\r\n\t\t\tif (defValue == null) defValue = \"\";\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteSetNode(phpName, xmlName, phpValue);\r\n\t\t}\r\n\r\n\t\tpublic void WriteOption(string phpName, string xmlName, bool phpValue, bool defValue)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = Core.Convert.StringToBoolean((string)options[phpName]);\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteSetNode(phpName, xmlName, phpValue ? \"true\" : \"false\");\r\n\t\t}\r\n\r\n\t\tpublic void WriteByteSize(string phpName, string xmlName, int phpValue, int defValue)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = Core.Convert.StringByteSizeToInteger((string)options[phpName]);\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteSetNode(phpName, xmlName, phpValue.ToString());\r\n\t\t}\r\n\r\n\t\tpublic void WriteOption(string phpName, string xmlName, int phpValue, int defValue)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = Core.Convert.StringToInteger((string)options[phpName]);\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteSetNode(phpName, xmlName, phpValue.ToString());\r\n\t\t}\r\n\r\n\t\tpublic void WriteOption(string phpName, string xmlName, double phpValue, double defValue)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = Core.Convert.StringToDouble((string)options[phpName]);\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteSetNode(phpName, xmlName, phpValue.ToString());\r\n\t\t}\r\n\r\n\t\tpublic void WriteOption(string phpName, string xmlName, string phpValue, PhpCallback defValue)\r\n\t\t{\r\n\t\t\tWriteOption(phpName, xmlName, phpValue, (defValue != null) ? ((IPhpConvertible)defValue).ToString() : null);\r\n\t\t}\r\n\r\n\t\tinternal void WriteErrorLog(string phpName, string phpValue, bool defSysLog, string defLogFile)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = (string)options[phpName];\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tbool phpSysLog = phpValue == PhpIni.ErrorLogSysLog;\r\n\t\t\tstring phpLogFile = phpSysLog ? null : phpValue;\r\n\r\n\t\t\tif (phpLogFile == null) phpLogFile = \"\";\r\n\t\t\tif (defLogFile == null) defLogFile = \"\";\r\n\r\n\t\t\tif (phpLogFile != defLogFile)\r\n\t\t\t\tWriteSetNode(phpName, \"LogFile\", phpLogFile);\r\n\r\n\t\t\tif (phpSysLog != defSysLog)\r\n\t\t\t\tWriteSetNode(phpName, \"SysLog\", phpSysLog ? \"true\" : \"false\");\r\n\t\t}\r\n\r\n\t\tpublic void WriteEnumOption(string phpName, string xmlName, int phpValue, int defValue, Type type)\r\n\t\t{\r\n\t\t\tif (options.ContainsKey(phpName))\r\n\t\t\t{\r\n\t\t\t\tphpValue = Core.Convert.StringToInteger((string)options[phpName]);\r\n\t\t\t\toptions.Remove(phpName);\r\n\t\t\t}\r\n\r\n\t\t\tif (phpValue != defValue)\r\n\t\t\t\tWriteEnumSetNode(phpName, xmlName, phpValue, type);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpIniOptions.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing Convert = PHP.Core.Convert;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\tpublic delegate object GetSetRestoreDelegate(LocalConfiguration config, string option, object value, IniAction action);\r\n\r\n\t/// <summary>\r\n\t/// An action which can be performed on option.\r\n\t/// </summary>\r\n\tpublic enum IniAction\r\n\t{\r\n\t\tRestore, Set, Get\r\n\t}\r\n\r\n\t[Flags]\r\n\tpublic enum IniFlags : byte\r\n\t{\r\n\t\tUnsupported = 0,\r\n\t\tGlobal = 0,\r\n\r\n\t\tSupported = 1,\r\n\t\tLocal = 2,\r\n\t\tHttp = 4,\r\n\t}\r\n\r\n\t[Flags]\r\n\tpublic enum IniAccessability\r\n\t{\r\n\t\tUser = 1,\r\n\t\tPerDirectory = 2,\r\n\t\tSystem = 4,\r\n\t\tAll = 7,\r\n\r\n\t\tGlobal = PerDirectory | System,\r\n\t\tLocal = All\r\n\t}\r\n\r\n\tpublic static class IniOptions\r\n\t{\r\n\t\t#region Options Table\r\n\r\n\t\t/// <summary>\r\n\t\t/// Holds information about the option.\r\n\t\t/// </summary>\r\n\t\tpublic class OptionDefinition // GENERICS: struct\r\n\t\t{\r\n\t\t\tpublic readonly IniFlags Flags;\r\n\t\t\tpublic readonly GetSetRestoreDelegate Gsr;\r\n\t\t\tpublic readonly string Extension;\r\n\r\n\t\t\tinternal OptionDefinition(IniFlags flags, GetSetRestoreDelegate gsr, string extension)\r\n\t\t\t{\r\n\t\t\t\tthis.Flags = flags;\r\n\t\t\t\tthis.Gsr = gsr;\r\n\t\t\t\tthis.Extension = extension;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static Dictionary<string, OptionDefinition> options;\r\n\t\tprivate static GetSetRestoreDelegate GsrCoreOption = new GetSetRestoreDelegate(PhpIni.GetSetRestoreCoreOption);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a number of currently registered options.\r\n\t\t/// </summary>\r\n\t\tpublic static int Count { get { return options.Count; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an option by name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the option.</param>\r\n\t\t/// <returns>Information about the option or a <B>null</B> reference if it has not been registered yet.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <remarks>Shouldn't be called before or during option registration (not thread safe for writes).</remarks>\r\n\t\tpublic static OptionDefinition GetOption(string name)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tOptionDefinition value;\r\n\t\t\treturn options.TryGetValue(name, out value) ? value : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registeres a legacy configuration option. Not thread safe.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A case-sensitive unique option name.</param>\r\n\t\t/// <param name=\"flags\">Flags.</param>\r\n\t\t/// <param name=\"gsr\">A delegate pointing to a method which will perform option's value getting, setting, and restoring.</param>\r\n\t\t/// <param name=\"extension\">A case-sensitive name of the extension which the option belongs to. Can be a <B>null</B> reference.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Registered options are known to <c>ini_get</c>, <c>ini_set</c>, and <c>ini_restore</c> PHP functions.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"gsr\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An option with specified name has already been registered.</exception>\r\n\t\tpublic static void Register(string name, IniFlags flags, GetSetRestoreDelegate gsr, string extension)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\t\t\tif (gsr == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"gsr\");\r\n\t\t\tif (options.ContainsKey(name))\r\n\t\t\t\tthrow new ArgumentException(LibResources.GetString(\"option_already_registered\", name));\r\n\r\n\t\t\toptions.Add(name, new OptionDefinition(flags, gsr, extension));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registeres a Core option.\r\n\t\t/// </summary>\r\n\t\tprivate static void RegisterCoreOption(string name, IniFlags flags)\r\n\t\t{\r\n\t\t\toptions.Add(name, new OptionDefinition(flags, GsrCoreOption, null));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Initialization\r\n\r\n\t\tstatic IniOptions()\r\n\t\t{\r\n\t\t\toptions = new Dictionary<string, OptionDefinition>(150);\r\n\t\t\tRegisterCoreOption(\"allow_call_time_pass_reference\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"allow_url_fopen\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"allow_webdav_methods\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"always_populate_raw_post_data\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"arg_separator.input\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"arg_separator.output\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"asp_tags\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"assert.active\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"assert.bail\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"assert.callback\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"assert.quiet_eval\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"assert.warning\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"async_send\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"auto_append_file\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"auto_detect_line_endings\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"auto_prepend_file\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"browscap\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"cgi.force_redirect\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"cgi.redirect_status_env\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"cgi.rfc2616_headers\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"child_terminate\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"debugger.enabled\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"debugger.host\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"debugger.port\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"default_charset\", IniFlags.Supported | IniFlags.Local | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"default_mimetype\", IniFlags.Supported | IniFlags.Local | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"default_socket_timeout\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"define_syslog_variables\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"disable_classes\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"disable_functions\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"display_errors\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"display_startup_errors\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"doc_root\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"enable_dl\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"engine\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"error_append_string\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"error_log\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"error_prepend_string\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"error_reporting\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"expose_php\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"extension_dir\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"fastcgi.impersonate\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"file_uploads\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"from\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"gpc_order\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"html_errors\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"ignore_repeated_errors\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"ignore_repeated_source\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"ignore_user_abort\", IniFlags.Supported | IniFlags.Local | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"implicit_flush\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"include_path\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"last_modified\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"log_errors\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"log_errors_max_len\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"magic_quotes_gpc\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"magic_quotes_runtime\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"magic_quotes_sybase\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"max_execution_time\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"max_input_time\", IniFlags.Unsupported | IniFlags.Global);\r\n            RegisterCoreOption(\"memory_limit\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"mime_magic.magicfile\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"open_basedir\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"output_buffering\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"output_handler\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"post_max_size\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"precision\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"register_argc_argv\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"register_globals\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"register_long_arrays\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"report_memleaks\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode_allowed_env_vars\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode_exec_dir\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode_gid\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode_include_dir\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"safe_mode_protected_env_vars\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"session.auto_start\", IniFlags.Supported | IniFlags.Global | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"session.save_handler\", IniFlags.Supported | IniFlags.Local | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"session.name\", IniFlags.Supported | IniFlags.Global | IniFlags.Http);\r\n\t\t\tRegisterCoreOption(\"short_open_tag\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"sql.safe_mode\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"track_errors\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"unserialize_callback_func\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"upload_max_filesize\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"upload_tmp_dir\", IniFlags.Supported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"url_rewriter.tags\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"user_agent\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"user_dir\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"variables_order\", IniFlags.Supported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"warn_plus_overloading\", IniFlags.Unsupported | IniFlags.Global);\r\n\t\t\tRegisterCoreOption(\"xbithack\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"y2k_compliance\", IniFlags.Unsupported | IniFlags.Local);\r\n\t\t\tRegisterCoreOption(\"zend.ze1_compatibility_mode\", IniFlags.Supported | IniFlags.Local);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to get, set, or restore an option given its PHP name and value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The option name.</param>\r\n\t\t/// <param name=\"value\">The option new value if applicable.</param>\r\n\t\t/// <param name=\"action\">The action to be taken.</param>\r\n\t\t/// <param name=\"error\"><B>true</B>, on failure.</param>\r\n\t\t/// <returns>The option old value.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The option not supported (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The option is read only but action demands write access (Warning).</exception>\r\n\t\tinternal static object TryGetSetRestore(string name, object value, IniAction action, out bool error)\r\n\t\t{\r\n\t\t\tDebug.Assert(name != null);\r\n\t\t\terror = true;\r\n\r\n\t\t\tIniOptions.OptionDefinition option = GetOption(name);\r\n\r\n\t\t\t// option not found:\r\n\t\t\tif (option == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_option\", name));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// the option is known but not supported:\r\n\t\t\tif ((option.Flags & IniFlags.Supported) == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"option_not_supported\", name));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// the option is global thus cannot be changed:\r\n\t\t\tif ((option.Flags & IniFlags.Local) == 0 && action != IniAction.Get)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"option_readonly\", name));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\terror = false;\r\n\t\t\treturn option.Gsr(Configuration.Local, name, value, action);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Formats a state of the specified option into <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"flags\">The option's flag.</param>\r\n\t\t/// <param name=\"defaultValue\">A default value of the option.</param>\r\n\t\t/// <param name=\"localValue\">A script local value of the option.</param>\r\n\t\t/// <returns>An array containig keys <c>\"global_value\"</c>, <c>\"local_value\"</c>, <c>\"access\"</c>.</returns>\r\n\t\tprivate static PhpArray FormatOptionState(IniFlags flags, object defaultValue, object localValue)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(0, 3);\r\n\r\n\t\t\t// default value:\r\n\t\t\tresult.Add(\"global_value\", Convert.ObjectToString(defaultValue));\r\n\r\n\t\t\t// local value:\r\n\t\t\tresult.Add(\"local_value\", Convert.ObjectToString(localValue));\r\n\r\n\t\t\t// accessibility:\r\n\t\t\tresult.Add(\"access\", (int)((flags & IniFlags.Local) != 0 ? IniAccessability.Local : IniAccessability.Global));\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an array of options states formatted by <see cref=\"FormatOptionState\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"extension\">An extension which options to retrieve.</param>\r\n\t\t/// <param name=\"result\">A dictionary where to add options.</param>\r\n\t\t/// <returns>An array of option states.</returns>\r\n\t\t/// <remarks>Options already contained in <paramref name=\"result\"/> are overwritten.</remarks>\r\n\t\tinternal static IDictionary GetAllOptionStates(string extension, IDictionary result)\r\n\t\t{\r\n\t\t\tDebug.Assert(result != null);\r\n\r\n\t\t\tLocalConfiguration local = Configuration.Local;\r\n\t\t\tLocalConfiguration @default = Configuration.DefaultLocal;\r\n\r\n\t\t\tforeach (KeyValuePair<string, OptionDefinition> entry in options)\r\n\t\t\t{\r\n\t\t\t\tstring name = entry.Key;\r\n\t\t\t\tOptionDefinition def = entry.Value;\r\n\r\n\t\t\t\t// skips configuration which don't belong to the specified extension:\r\n\t\t\t\tif ((extension == null || extension == def.Extension))\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((def.Flags & IniFlags.Supported) == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult[name] = FormatOptionState(\r\n\t\t\t\t\t\t\tdef.Flags,\r\n\t\t\t\t\t\t\t\"Not Supported\",\r\n\t\t\t\t\t\t\t\"Not Supported\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ((def.Flags & IniFlags.Http) != 0 && System.Web.HttpContext.Current == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult[name] = FormatOptionState(\r\n\t\t\t\t\t\t\tdef.Flags,\r\n\t\t\t\t\t\t\t\"Http Context Required\",\r\n\t\t\t\t\t\t\t\"Http Context Required\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult[name] = FormatOptionState(\r\n\t\t\t\t\t\t\tdef.Flags,\r\n\t\t\t\t\t\t\tdef.Gsr(@default, name, null, IniAction.Get),\r\n\t\t\t\t\t\t\tdef.Gsr(local, name, null, IniAction.Get));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpIniParser.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\nTODO:\r\n Added possibility to access INI variables from within .ini file. (Andrei) (PHP 5.1.0)\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implements the INI file parsing functionality (see the <c>parse_ini_file</c> PHP function).\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The parser is implemented by hand using the recursive descent (LL) approach.\r\n    /// Note (jakub): can be implemented using regular expressions ?\r\n\t/// </remarks>\r\n\tpublic sealed class PhpIniParser\r\n    {\r\n        /// <summary>\r\n        /// Type of sorting.\r\n        /// </summary>\r\n        public enum ScannerMode\r\n        {\r\n            /// <summary>Normal scanner mode.</summary>\r\n            [ImplementsConstant(\"INI_SCANNER_NORMAL\")]\r\n            Normal = 0,\r\n\r\n            /// <summary>Raw scanner mode.</summary>\r\n            [ImplementsConstant(\"INI_SCANNER_RAW\")]\r\n            Raw = 1,\r\n        };\r\n\r\n        #region parse_ini_string\r\n\r\n\r\n        /// <summary>\r\n        /// Parse a configuration string.\r\n        /// </summary>\r\n        /// <param name=\"ini\">The contents of the ini file being parsed. </param>\r\n        /// <returns>The settings are returned as an associative array on success, and FALSE on failure. </returns>\r\n        [ImplementsFunction(\"parse_ini_string\")]\r\n        [return: CastToFalse]\r\n\t\tpublic static PhpArray ParseString(string ini)\r\n\t\t{\r\n            return ParseString(ini, false, 0);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Parse a configuration string.\r\n        /// </summary>\r\n        /// <param name=\"ini\">The contents of the ini file being parsed. </param>\r\n        /// <param name=\"processSections\">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</param>\r\n        /// <returns>The settings are returned as an associative array on success, and FALSE on failure. </returns>\r\n        [ImplementsFunction(\"parse_ini_string\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray ParseString(string ini, bool processSections)\r\n        {\r\n            return ParseString(ini, processSections, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a configuration string.\r\n        /// </summary>\r\n        /// <param name=\"ini\">The contents of the ini file being parsed. </param>\r\n        /// <param name=\"processSections\">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</param>\r\n        /// <param name=\"scanner_mode\">Can either be INI_SCANNER_NORMAL (default) or INI_SCANNER_RAW. If INI_SCANNER_RAW is supplied, then option values will not be parsed. </param>\r\n        /// <returns>The settings are returned as an associative array on success, and FALSE on failure. </returns>\r\n\t\t[ImplementsFunction(\"parse_ini_string\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray ParseString(string ini, bool processSections, int scanner_mode)\r\n        {\r\n            if (scanner_mode != (int)ScannerMode.Normal)  // TODO: handle value 1\r\n                PhpException.ArgumentValueNotSupported(\"scanner_mode\", scanner_mode);\r\n\r\n            if (string.IsNullOrEmpty(ini))\r\n                return null;\r\n\r\n            ArrayBuilder builder = new ArrayBuilder(ScriptContext.CurrentContext, processSections);\r\n\r\n            try\r\n            {\r\n                // parse the stream and let the builder build the resulting array\r\n                Parse(ini, builder);\r\n            }\r\n            catch (ParseException e)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"ini_parse_error\", e.LineNumber));\r\n                return null;\r\n            }\r\n\r\n            // return what we have read so far - even if a parse error occurred\r\n            return builder.Result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region parse_ini_file\r\n\r\n        /// <summary>\r\n\t\t/// Parses an INI-style configuration file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">A file designation (may be a local file path, an URL, or whatever is accepted\r\n\t\t/// by <c>fopen</c>).</param>\r\n\t\t/// <returns>An array of key-value pairs read from the INI file.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Parse error (Warning).</exception>\r\n\t\t/// <remarks>\r\n\t\t/// Section names and keys are converted to integers if applicable. The parser recognizes special values\r\n\t\t/// <c>true</c>, <c>on</c> and <c>yes</c> (converted to &quot;1&quot;); and <c>false</c>, <c>off</c>,\r\n\t\t/// <c>no</c> and <c>none</c> (converted to &quot;&quot;).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"parse_ini_file\")]\r\n        [return: CastToFalse]\r\n\t\tpublic static PhpArray ParseFile(string fileName)\r\n\t\t{\r\n\t\t\treturn ParseFile(fileName, false, 0);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Parses an INI-style configuration file.\r\n        /// </summary>\r\n        /// <param name=\"fileName\">A file designation (may be a local file path, an URL, or whatever is accepted\r\n        /// by <c>fopen</c>).</param>\r\n        /// <param name=\"processSections\">If <B>true</B>, the returned array contains nested arrays corresponding\r\n        /// to individual INI sections. If <B>false</B>, section names are completely disregarded and the returned\r\n        /// array contains directly key-value pairs from all sections.</param>\r\n        /// <returns>An array of key-value pairs read from the INI file.</returns>\r\n        /// <exception cref=\"PhpException\">Parse error (Warning).</exception>\r\n        /// <remarks>\r\n        /// Section names and keys are converted to integers if applicable. The parser recognizes special values\r\n        /// <c>true</c>, <c>on</c> and <c>yes</c> (converted to &quot;1&quot;); and <c>false</c>, <c>off</c>,\r\n        /// <c>no</c> and <c>none</c> (converted to &quot;&quot;).\r\n        /// </remarks>\r\n        [ImplementsFunction(\"parse_ini_file\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray ParseFile(string fileName, bool processSections)\r\n        {\r\n            return ParseFile(fileName, processSections, 0);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI-style configuration file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">A file designation (may be a local file path, an URL, or whatever is accepted\r\n\t\t/// by <c>fopen</c>).</param>\r\n\t\t/// <param name=\"processSections\">If <B>true</B>, the returned array contains nested arrays corresponding\r\n\t\t/// to individual INI sections. If <B>false</B>, section names are completely disregarded and the returned\r\n\t\t/// array contains directly key-value pairs from all sections.</param>\r\n        /// <param name=\"scanner_mode\">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. </param>\r\n\t\t/// <returns>An array of key-value pairs (<paramref name=\"processSections\"/> is <B>false</B>) or an array\r\n\t\t/// of arrays of key-value pairs (<paramref name=\"processSections\"/> is <B>true</B>).</returns>\r\n\t\t/// <exception cref=\"PhpException\">Parse error (Warning).</exception>\r\n\t\t/// <remarks>\r\n\t\t/// Section names and keys are converted to integers if applicable. The parser recognizes special values\r\n\t\t/// <c>true</c>, <c>on</c> and <c>yes</c> (converted to &quot;1&quot;); and <c>false</c>, <c>off</c>,\r\n\t\t/// <c>no</c> and <c>none</c> (converted to &quot;&quot;).\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"parse_ini_file\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray ParseFile(string fileName, bool processSections, int scanner_mode)\r\n\t\t{\r\n            if (scanner_mode != (int)ScannerMode.Normal)  // TODO: handle value 1\r\n                PhpException.ArgumentValueNotSupported(\"scanner_mode\", scanner_mode);\r\n\r\n\t\t\t// we're using binary mode because CR/LF stuff should be preserved for multiline values\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"rb\", StreamOpenOptions.ReportErrors,\r\n\t\t\t\t\t   StreamContext.Default))\r\n\t\t\t{\r\n                if (stream == null) return null;//new PhpArray();\r\n\r\n\t\t\t\tArrayBuilder builder = new ArrayBuilder(ScriptContext.CurrentContext, processSections);\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// parse the stream and let the builder build the resulting array\r\n\t\t\t\t\tParse(stream, builder);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (ParseException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"ini_parse_error\", e.LineNumber));\r\n                    return null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// return what we have read so far - even if a parse error occurred\r\n\t\t\t\treturn builder.Result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI-style configuration file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">A stream referring to the file to parse. Should be open in binary mode.</param>\r\n\t\t/// <param name=\"callbacks\">Implementation of the parser callbacks invoked during parsing.</param>\r\n\t\t/// <exception cref=\"ParseException\">Parse error.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"stream\"/> or <paramref name=\"callbacks\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">Stream is was not opened as binary.</exception>\r\n\t\tpublic static void Parse(PhpStream stream, IParserCallbacks callbacks)\r\n\t\t{\r\n\t\t\tif (stream == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"stream\");\r\n\t\t\tif (!stream.IsBinary)\r\n\t\t\t\tthrow new ArgumentException(\"Stream must be binary\");\r\n\t\t\tif (callbacks == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"callbacks\");\r\n\r\n\t\t\tPhpIniParser parser = new PhpIniParser(stream, callbacks);\r\n\t\t\tparser.TopLevel();\r\n\t\t}\r\n\r\n        public static void Parse(string ini, IParserCallbacks callbacks)\r\n        {\r\n            if (ini == null)\r\n                throw new ArgumentNullException(\"ini\");\r\n            if (callbacks == null)\r\n                throw new ArgumentNullException(\"callbacks\");\r\n\r\n            PhpIniParser parser = new PhpIniParser(ini, callbacks);\r\n            parser.TopLevel();\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IParserCallbacks\r\n\r\n\t\t/// <summary>\r\n\t\t/// Groups together methods that are called back by the parser during parsing.\r\n\t\t/// </summary>\r\n\t\tpublic interface IParserCallbacks\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when an INI section is encountered.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"sectionName\">The section name (without the enclosing brackets). Either a string or\r\n\t\t\t/// an integer.</param>\r\n\t\t\tvoid ProcessSection(object sectionName);\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when an option (i.e. a key-value pair) is encountered.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"key\">The key. Either a string or an integer.</param>\r\n\t\t\t/// <param name=\"value\">The value.</param>\r\n\t\t\tvoid ProcessOption(object key, string value);\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when a token, which might possibly denote a constant, should be resolved.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"name\">The constant name.</param>\r\n\t\t\t/// <returns>The constant value. Should be either a string or an integer. Usually, when the\r\n\t\t\t/// implementing method is unable to resolve the constant, it simply returns <paramref name=\"name\"/>.\r\n\t\t\t/// </returns>\r\n\t\t\tobject GetConstantValue(string name);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ArrayBuilder\r\n\r\n\t\t/// <summary>\r\n\t\t/// Provides an array-building implementation of the the parser callbacks.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The format of the resulting <see cref=\"PhpArray\"/> complies to the <c>parse_ini_file</c>\r\n\t\t/// return value.\r\n\t\t/// </remarks>\r\n\t\tpublic class ArrayBuilder : IParserCallbacks\r\n\t\t{\r\n\t\t\t#region Fields and Properties\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The resulting array.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate PhpArray result;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The section currently being processed.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate PhpArray currentSection;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The <see cref=\"ScriptContext\"/> used to lookup constants.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate ScriptContext scriptContext;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A flag that affects the way the <see cref=\"result\"/> is built up.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// If <B>true</B>, the resulting array contains nested arrays corresponding to individual\r\n\t\t\t/// INI sections. If <B>false</B>, section names are completely disregarded and the resulting\r\n\t\t\t/// array contains directly key-value pairs from all sections.\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate bool processSections;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns the resulting array.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpArray Result\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{ return result; }\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"ArrayBuilder\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"scriptContext\">The <see cref=\"ScriptContext\"/> used to lookup constants or a <B>null</B> reference.</param>\r\n\t\t\t/// <param name=\"processSections\">If <B>true</B>, the resulting array contains nested arrays\r\n\t\t\t/// corresponding to individual INI sections. If <B>false</B>, section names are completely\r\n\t\t\t/// disregarded and the resulting array contains directly key-value pairs from all sections.</param>\r\n\t\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"scriptContext\"/> is a <B>null</B> reference.</exception>\r\n\t\t\tpublic ArrayBuilder(ScriptContext scriptContext, bool processSections)\r\n\t\t\t{\r\n\t\t\t\tthis.scriptContext = scriptContext;\r\n\t\t\t\tthis.processSections = processSections;\r\n\t\t\t\tresult = new PhpArray();\r\n\t\t\t\tcurrentSection = result;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IParserCallbacks Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when an INI section is encountered.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void ProcessSection(object sectionName)\r\n\t\t\t{\r\n\t\t\t\tif (processSections)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrentSection = new PhpArray();\r\n\t\t\t\t\tresult[sectionName] = currentSection;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when an option (i.e. a key-value pair) is encountered.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void ProcessOption(object key, string value)\r\n\t\t\t{\r\n\t\t\t\tcurrentSection[key] = value;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when a token, which might possibly denote a constant, should be resolved.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object GetConstantValue(string name)\r\n\t\t\t{\r\n\t\t\t\treturn scriptContext.GetConstantValue(name, true, true);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Tokens\r\n\r\n\t\t/// <summary>\r\n\t\t/// Contains definition of (one-character) tokens that are relevant for INI files.\r\n\t\t/// </summary>\r\n\t\tinternal class Tokens\r\n\t\t{\r\n\t\t\tinternal const char BracketOpen = '[';\r\n\t\t\tinternal const char BracketClose = ']';\r\n\t\t\tinternal const char EqualS = '=';\r\n\t\t\tinternal const char Quote = '\"';\r\n\t\t\tinternal const char Semicolon = ';';\r\n\r\n\t\t\tinternal const char Or = '|';\r\n\t\t\tinternal const char And = '&';\r\n\t\t\tinternal const char Not = '!';\r\n\t\t\tinternal const char Neg = '~';\r\n\t\t\tinternal const char ParOpen = '(';\r\n\t\t\tinternal const char ParClose = ')';\r\n\r\n\t\t\tinternal const char EndOfLine = (char)0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ParseException\r\n\r\n\t\t/// <summary>\r\n\t\t/// An exception thrown by the parser when an error occurs.\r\n\t\t/// </summary>\r\n\t\tinternal class ParseException : ApplicationException\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Number of the line where the parse error occured.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate int lineNumber;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns the number of the line where the parse error occured.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int LineNumber\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{ return lineNumber; }\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"ParseException\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"lineNumber\">Number of the line where the parse error occured.</param>\r\n\t\t\tpublic ParseException(int lineNumber)\r\n\t\t\t{\r\n\t\t\t\tthis.lineNumber = lineNumber;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Line getter\r\n\r\n        /// <summary>\r\n        /// Interface for getting next line from the source.\r\n        /// </summary>\r\n        private abstract class LineGetter\r\n        {\r\n            /// <summary>\r\n            /// Get the next line from the source. Every line must ends with \"\\n\".\r\n            /// </summary>\r\n            /// <returns>Next line or null if you reach the end of the source.</returns>\r\n            public abstract string GetLine();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Getting next line from the PhpStream.\r\n        /// </summary>\r\n        private sealed class LineGetterStream:LineGetter\r\n        {\r\n            /// <summary>\r\n            /// A stream representing the input INI file, instead of text.\r\n            /// </summary>\r\n            private PhpStream stream;\r\n\r\n            public LineGetterStream(PhpStream stream)\r\n            {\r\n                if (stream == null)\r\n                    throw new ArgumentNullException(\"stream\");\r\n\r\n                this.stream = stream;\r\n            }\r\n\r\n            public override string GetLine()\r\n            {\r\n                if (stream.Eof) return null;\r\n\r\n                return stream.ReadLine(-1, null);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Getting  next line from the string.\r\n        /// </summary>\r\n        private sealed class LineGetterString:LineGetter\r\n        {\r\n            private string[] lines;\r\n            private int nextLineIndex = 0;\r\n\r\n            public LineGetterString(string text)\r\n            {\r\n                if (text == null)\r\n                    lines = ArrayUtils.EmptyStrings;\r\n                else\r\n                    lines = text.Split(new char[] { '\\n' });\r\n            }\r\n\r\n            public override string GetLine()\r\n            {\r\n                if (nextLineIndex < lines.Length)\r\n                    return lines[nextLineIndex++] + \"\\n\";\r\n                else\r\n                    return null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields\r\n\r\n        /// <summary>\r\n        /// Object getting next lines of INI source.\r\n        /// </summary>\r\n        private LineGetter lineGetter;\r\n\r\n        /// <summary>\r\n\t\t/// Implementation of the parser callbacks invoked during parsing.\r\n\t\t/// </summary>\r\n\t\tprivate IParserCallbacks callbacks;\r\n\r\n\t\t/// <summary>\r\n        /// The line read from <see cref=\"lineGetter\"/> that is currently being processed.\r\n\t\t/// </summary>\r\n\t\tprivate string line;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current line number.\r\n\t\t/// </summary>\r\n\t\tprivate int lineNumber = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The position within the current <see cref=\"line\"/> (0-based column).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <c>line[linePos]</c> denotes a lookahead symbol.\r\n\t\t/// </remarks>\r\n\t\tprivate int linePos;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpIniParser\"/> operating on a given input stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">The input stream. Should be open in binary mode.</param>\r\n\t\t/// <param name=\"callbacks\">Implementation of the parser callbacks invoked during parsing.</param>\r\n\t\tprivate PhpIniParser(PhpStream stream, IParserCallbacks callbacks)\r\n\t\t{\r\n            this.lineGetter = new LineGetterStream(stream);\r\n\t\t\tthis.callbacks = callbacks;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PhpIniParser\"/> operating on a given input stream.\r\n        /// </summary>\r\n        /// <param name=\"text\">The input INI file content.</param>\r\n        /// <param name=\"callbacks\">Implementation of the parser callbacks invoked during parsing.</param>\r\n        private PhpIniParser(string text, IParserCallbacks callbacks)\r\n        {\r\n            this.lineGetter = new LineGetterString(text);\r\n            this.callbacks = callbacks;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parser helpers: LoadLine, LookAhead, Consume*, AddValue\r\n\r\n\t\t/// <summary>\r\n        /// Loads the next line from <see cref=\"lineGetter\"/>, and updates <see cref=\"line\"/> and <see cref=\"linePos\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B> if a line was successfully loaded, <B>false</B> if end-of-file was reached.</returns>\r\n\t\tprivate bool LoadLine()\r\n\t\t{\r\n            line = lineGetter.GetLine();\r\n            linePos = 0;\r\n\r\n            if (line != null)\r\n            {\r\n                lineNumber++;\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the lookahead symbol which is either <c>line[linePos]</c> or <see cref=\"Tokens.EndOfLine\"/>\r\n\t\t/// if there are no more characters in the current line.\r\n\t\t/// </summary>\r\n\t\tprivate char LookAhead\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (linePos < line.Length ? line[linePos] : Tokens.EndOfLine);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the lookahead symbol and cosumes it, i.e. advances the <see cref=\"linePos\"/>.\r\n\t\t/// <seealso cref=\"LookAhead\"/>\r\n\t\t/// </summary>\r\n\t\t/// <returns>The original lookahead (before advancing).</returns>\r\n\t\tprivate char Consume()\r\n\t\t{\r\n\t\t\treturn (linePos < line.Length ? line[linePos++] : Tokens.EndOfLine);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Consumes the current lookahead symbol and compares it to a given character.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ch\">The character that is expected as the current lookahead symbol. If the characters\r\n\t\t/// do not match, a <see cref=\"ParseException\"/> is thrown.</param>\r\n\t\tprivate void Consume(char ch)\r\n\t\t{\r\n\t\t\tif (Consume() != ch) throw new ParseException(lineNumber);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Keeps consuming the current lookahead as long as it is categorized as a white space.\r\n\t\t/// </summary>\r\n        private void ConsumeWhiteSpace()\r\n        {\r\n            while (linePos < line.Length && Char.IsWhiteSpace(line, linePos)) linePos++;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a key-value pair into a <see cref=\"PhpArray\"/>. If a value with the same key already exists,\r\n\t\t/// a nested <see cref=\"PhpArray\"/> containing all values with this key is created.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to add the pair to.</param>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\tprivate static void AddValue(PhpArray array, object key, string value)\r\n\t\t{\r\n\t\t\tif (!array.Contains(key)) array.Add(key, value);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobject old_value = array[key];\r\n\t\t\t\tPhpArray nested_array = old_value as PhpArray;\r\n\r\n\t\t\t\tif (nested_array != null) nested_array.Add(value);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tnested_array = new PhpArray();\r\n\t\t\t\t\tnested_array.Add(old_value);\r\n\t\t\t\t\tnested_array.Add(value);\r\n\r\n\t\t\t\t\tarray[key] = nested_array;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a substring of the current <see cref=\"line\"/> into the array key representing a section name\r\n\t\t/// (the interior of <c>[ ]</c>) or an option name (on the left of <c>=</c>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"start\">The start index of the substring (within the current <see cref=\"line\"/>).</param>\r\n\t\t/// <param name=\"length\">The length of the substring.</param>\r\n\t\t/// <returns>The key found at the position given by <paramref name=\"start\"/> and <paramref name=\"length\"/>.\r\n\t\t/// This may be either a string or an integer (decimal, hexadecimal and octal numbers are decoded).</returns>\r\n\t\tprivate object SubstringToKey(int start, int length)\r\n\t\t{\r\n\t\t\tDebug.Assert(start >= 0 && start <= line.Length && (start + length) <= line.Length && length > 0);\r\n\r\n\t\t\tint radix = 10;\r\n\t\t\tif (line[start] == '0')\r\n\t\t\t{\r\n\t\t\t\tif (length > 2 && (line[start + 1] == 'x' || line[start + 1] == 'X'))\r\n\t\t\t\t{\r\n\t\t\t\t\tradix = 16;\r\n\r\n\t\t\t\t\t// skip the \"0x\" prefix\r\n\t\t\t\t\tstart += 2;\r\n\t\t\t\t\tlength -= 2;\r\n\t\t\t\t}\r\n\t\t\t\telse radix = 8;\r\n\t\t\t}\r\n\r\n\t\t\tint pos = start;\r\n\t\t\tint res = (int)Core.Convert.SubstringToLongStrict(line, length, radix, Int32.MaxValue, ref pos);\r\n\r\n\t\t\tif (pos == start + length) return res;\r\n\t\t\telse return line.Substring(start, length);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a substring of the current <see cref=\"line\"/> into the array value representing an option\r\n\t\t/// value (on the right of <c>=</c>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"start\">The start index of the substring (within the current <see cref=\"line\"/>).</param>\r\n\t\t/// <param name=\"length\">The length of the substring.</param>\r\n\t\t/// <returns>The value found at the position given by <paramref name=\"start\"/> and <paramref name=\"length\"/>.\r\n\t\t/// This may be either a string or an integer (decimal numbers are decoded and constants are looked up).\r\n\t\t/// </returns>\r\n\t\tprivate object SubstringToValue(int start, int length)\r\n\t\t{\r\n\t\t\tDebug.Assert(start >= 0 && start <= line.Length && (start + length) <= line.Length);\r\n\r\n\t\t\tif (length == 0) return String.Empty;\r\n\r\n\t\t\t// check for decimal number\r\n\t\t\tint pos = start;\r\n\t\t\tlong res = Core.Convert.SubstringToLongInteger(line, length, ref pos);\r\n            if (pos == start + length)\r\n            {\r\n                int ires = unchecked((int)res);\r\n                if (ires == res) return ires;   // is Int32 big enough?\r\n                return res;\r\n            }\r\n\r\n\t\t\tstring val = line.Substring(start, length);\r\n\r\n\t\t\t// check for predefined \"INI constants\"\r\n\t\t\tswitch (val.ToUpper())\r\n\t\t\t{\r\n\t\t\t\tcase \"ON\":\r\n\t\t\t\tcase \"YES\": return \"1\";\r\n\r\n\t\t\t\tcase \"OFF\":\r\n\t\t\t\tcase \"NO\":\r\n\t\t\t\tcase \"NONE\": return String.Empty;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobject obj = callbacks.GetConstantValue(val);\r\n\t\t\t\t\t\tif (obj is int) return obj;\r\n\t\t\t\t\t\telse return Core.Convert.ObjectToString(obj);\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parser\r\n\r\n\t\t/// <summary>\r\n\t\t/// Top level parsing method. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Reads and processes lines from the input stream until the end-of-file is reached. Invokes the\r\n\t\t/// <see cref=\"callbacks\"/> during parsing.\r\n\t\t/// </remarks>\r\n\t\tprivate void TopLevel()\r\n\t\t{\r\n\t\t\tStringBuilder val = null;\r\n\t\t\tbool multiline = false;\r\n\t\t\tobject key = null;\r\n\r\n\t\t\twhile (LoadLine())\r\n\t\t\t{\r\n\t\t\t\tif (multiline)\r\n\t\t\t\t{\r\n\t\t\t\t\t// this is the next line of a multi-line value\r\n\t\t\t\t\tval.Append(Value(ref multiline));\r\n\r\n\t\t\t\t\t// it is the last line of multi-line value, save the entire value\r\n\t\t\t\t\tif (!multiline) callbacks.ProcessOption(key, val.ToString());\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConsumeWhiteSpace();\r\n\t\t\t\t\tchar la = LookAhead;\r\n\r\n\t\t\t\t\t// check for end-of-line and comment (line starting with ;)\r\n\t\t\t\t\tif (la == Tokens.EndOfLine || la == Tokens.Semicolon) continue;\r\n\r\n\t\t\t\t\tif (la == Tokens.BracketOpen)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// this line denotes a section\r\n\t\t\t\t\t\tcallbacks.ProcessSection(Section());\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ((key = Key()) != null)\r\n                    {\r\n                        // this line denotes an ordinary entry\r\n\t\t\t\t\t\tstring s = Value(ref multiline);\r\n\t\t\t\t\t\tif (!multiline) callbacks.ProcessOption(key, s);\r\n\t\t\t\t\t\telse val = new StringBuilder(s);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// check for an unterminated multi-line value\r\n\t\t\tif (multiline) throw new ParseException(lineNumber);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI section (<c>[&lt;section_name&gt;&lt;whitespace&gt;]&lt;whitespace&gt;</c>).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The section name (either a string or an integer).</returns>\r\n\t\tprivate object Section()\r\n\t\t{\r\n\t\t\tConsume(Tokens.BracketOpen);\r\n\t\t\t//ConsumeWhiteSpace();\r\n\r\n\t\t\tint start = linePos, end = linePos;\r\n\t\t\tchar ch;\r\n\t\t\twhile ((ch = Consume()) != Tokens.BracketClose)\r\n\t\t\t{\r\n\t\t\t\tif (ch == Tokens.EndOfLine) throw new ParseException(lineNumber);\r\n\r\n\t\t\t\t// remember the last non-whitespace\r\n\t\t\t\t/*if (!Char.IsWhiteSpace(ch)) */end = linePos;  // include white-spaces too, as it is in PHP 5.3.1\r\n\t\t\t}\r\n\r\n\t\t\tConsumeWhiteSpace();\r\n\r\n\t\t\t// section name must not be empty and we must have reached end-of-line by now\r\n\t\t\tif (end == start || (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon))\r\n\t\t\t{\r\n\t\t\t\tthrow new ParseException(lineNumber);\r\n\t\t\t}\r\n\r\n\t\t\treturn SubstringToKey(start, end - start);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI option name (<c>&lt;option_name&gt;&lt;whitespace&gt;=</c>).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The option name (either a string or an integer).</returns>\r\n\t\tprivate object Key()\r\n\t\t{\r\n\t\t\tint start = linePos, end = linePos, whitespace = start - 1;\r\n\t\t\tchar ch;\r\n\t\t\twhile ((ch = Consume()) != Tokens.EqualS)\r\n\t\t\t{\r\n\t\t\t\tif (ch == Tokens.EndOfLine || ch == Tokens.Semicolon) return null;\r\n\r\n\t\t\t\t// remember the last non-whitespace and whitespace\r\n                if (!Char.IsWhiteSpace(ch))\r\n                {\r\n                    end = linePos;\r\n\r\n                    if (linePos == (whitespace + 1))  // new word starts, ignore the words before\r\n                        start = linePos - 1;\r\n                }\r\n                else\r\n                {\r\n                    whitespace = linePos;\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\t// option name must not be empty\r\n\t\t\tif (end == start) throw new ParseException(lineNumber);\r\n\r\n\t\t\treturn SubstringToKey(start, end - start);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI option value (<c>&quot;&lt;quoted_value&gt;</c> or <c>&lt;expression&gt;</c>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"multiline\">If <B>true</B>, next line of a multi-line value is expected; if <B>false</B>\r\n\t\t/// otherwise. Receives <B>true</B> if more lines should follow and <B>false</B> if this was the last one\r\n\t\t/// or the only one line.</param>\r\n\t\t/// <returns>The option value (always a string). If <paramref name=\"multiline\"/> receives <B>true</B>,\r\n\t\t/// the return values is just a fragment and should be concatenated with subsequent return values to \r\n\t\t/// obtain the entire option value.</returns>\r\n\t\tprivate string Value(ref bool multiline)\r\n\t\t{\r\n\t\t\tif (multiline) return QuotedValue(out multiline);\r\n\r\n\t\t\t// this is the first line (just after the =)\r\n\t\t\tConsumeWhiteSpace();\r\n\t\t\tif (LookAhead == Tokens.Quote)\r\n\t\t\t{\r\n\t\t\t\t// quoted string starts here\r\n\t\t\t\tConsume();\r\n\t\t\t\treturn QuotedValue(out multiline);\r\n\t\t\t}\r\n\r\n\t\t\t// no quotes - let's parse an expression\r\n\t\t\tstring result = Core.Convert.ObjectToString(Expression());\r\n\r\n\t\t\t// must have reached end-of-line\r\n\t\t\tif (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon) throw new ParseException(lineNumber);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI option quoted value (<c>&lt;option_value&gt;</c> or\r\n\t\t/// <c>&lt;option_value&gt;&quot;&lt;whitespace&gt;</c>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"moreLinesFollow\">Receives <B>true</B> if this value consists of more lines that\r\n\t\t/// should follow (i.e. right quote not found yet), <B>false</B> otherwise.</param>\r\n\t\t/// <returns>The option value (always a string). If <paramref name=\"moreLinesFollow\"/> receives\r\n\t\t/// <B>true</B>, the return values is just a fragment and should be concatenated with subsequent\r\n\t\t/// return values to obtain the entire option value.</returns>\r\n\t\tprivate string QuotedValue(out bool moreLinesFollow)\r\n\t\t{\r\n\t\t\tchar ch;\r\n\t\t\tint start = linePos;\r\n\r\n\t\t\t// reading next line of a multiline quoted string\r\n\t\t\twhile ((ch = Consume()) != Tokens.EndOfLine)\r\n\t\t\t{\r\n\t\t\t\tif (ch == Tokens.Quote)\r\n\t\t\t\t{\r\n\t\t\t\t\t// right quote\r\n\t\t\t\t\tmoreLinesFollow = false;\r\n\t\t\t\t\tint end = linePos - 1;\r\n\r\n\t\t\t\t\tConsumeWhiteSpace();\r\n\t\t\t\t\tif (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new ParseException(lineNumber);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn line.Substring(start, end - start);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// the string shall continue on the following line\r\n\t\t\tmoreLinesFollow = true;\r\n\t\t\treturn (start == 0 ? line : line.Substring(start));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI option value expression (<c>&lt;literal&gt;(&amp;/|&lt;literal&gt;)*</c>).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The expression value (either a string or an integer).</returns>\r\n\t\tprivate object Expression()\r\n\t\t{\r\n\t\t\tobject result = Literal();\r\n\r\n\t\t\twhile (LookAhead != Tokens.EndOfLine && LookAhead != Tokens.Semicolon && LookAhead != Tokens.ParClose)\r\n\t\t\t{\r\n\t\t\t\t// expecting either & or |\r\n\t\t\t\tchar op = Consume();\r\n\t\t\t\tif (op != Tokens.And && op != Tokens.Or) throw new ParseException(lineNumber);\r\n\r\n\t\t\t\t// both operands must be converted to an integer\r\n\t\t\t\tint lhs = Core.Convert.ObjectToInteger(result);\r\n\t\t\t\tint rhs = Core.Convert.ObjectToInteger(Literal());\r\n\r\n\t\t\t\t// perform the operation eagerly (like a stupid calculator)\r\n\t\t\t\tresult = (op == Tokens.And ? (int)(lhs & rhs) : (int)(lhs | rhs));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses an INI option value literal (<c>&lt;whitespace&gt;(&lt;expression&gt;)&lt;whitespace&gt;</c>,\r\n\t\t/// <c>&lt;whitespace&gt;!&lt;literal&gt;</c>, <c>&lt;whitespace&gt;~&lt;literal&gt;</c> or\r\n\t\t/// <c>&lt;whitespace&gt;&lt;literal_value&gt;&lt;whitespace&gt;</c>).\r\n\t\t/// </summary>\r\n\t\t/// <returns>The literal value (either a string or an integer).</returns>\r\n\t\tprivate object Literal()\r\n\t\t{\r\n\t\t\tConsumeWhiteSpace();\r\n\r\n\t\t\tswitch (LookAhead)\r\n\t\t\t{\r\n\t\t\t\tcase Tokens.ParOpen:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// literal ::= ( expression )\r\n\t\t\t\t\t\tConsume();\r\n\t\t\t\t\t\tobject result = Expression();\r\n\t\t\t\t\t\tConsume(Tokens.ParClose);\r\n\t\t\t\t\t\tConsumeWhiteSpace();\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase Tokens.Not:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// literal ::= ! literal\r\n\t\t\t\t\t\tConsume();\r\n\t\t\t\t\t\treturn (Core.Convert.ObjectToBoolean(Literal()) ? \"0\" : \"1\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase Tokens.Neg:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// literal ::= ~ literal\r\n\t\t\t\t\t\tConsume();\r\n\t\t\t\t\t\treturn (int)~Core.Convert.ObjectToInteger(Literal());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// literal ::= alphanum\r\n\t\t\t\t\t\tint start = linePos, end = start;\r\n\r\n\t\t\t\t\t\twhile (true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tchar la = LookAhead;\r\n\t\t\t\t\t\t\tswitch (la)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase Tokens.EqualS:\r\n\t\t\t\t\t\t\t\tcase Tokens.Quote:\r\n\t\t\t\t\t\t\t\tcase Tokens.Or:\r\n\t\t\t\t\t\t\t\tcase Tokens.And:\r\n\t\t\t\t\t\t\t\tcase Tokens.Not:\r\n\t\t\t\t\t\t\t\tcase Tokens.Neg:\r\n\t\t\t\t\t\t\t\tcase Tokens.ParOpen:\r\n\t\t\t\t\t\t\t\tcase Tokens.ParClose:\r\n\t\t\t\t\t\t\t\tcase Tokens.Semicolon:\r\n\t\t\t\t\t\t\t\tcase Tokens.EndOfLine:\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\treturn SubstringToValue(start, end - start);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tConsume();\r\n\r\n\t\t\t\t\t\t\t\t\t\t// remember the last non-whitespace\r\n\t\t\t\t\t\t\t\t\t\tif (!Char.IsWhiteSpace(la)) end = linePos;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/PhpJson.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2010 Tomas Matousek, Jakub Misek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/*\r\n * TODO:\r\n * \r\n * JSON_NUMERIC_CHECK (integer)\r\n * Encodes numeric strings as numbers. Available since PHP 5.3.3.\r\n * \r\n * JSON_BIGINT_AS_STRING (integer)\r\n * Available since PHP 5.4.0.\r\n * \r\n * JSON_PRETTY_PRINT (integer)\r\n * Use whitespace in returned data to format it. Available since PHP 5.4.0.\r\n * \r\n * JSON_UNESCAPED_SLASHES (integer)\r\n * Don't escape /. Available since PHP 5.4.0.\r\n * */\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Security;\r\nusing System.Security.Permissions;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.Serialization.Formatters;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Library;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#else\r\nusing System.Web;\r\nusing System.Runtime.Serialization.Formatters.Binary;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    #region JSON PHP API\r\n\r\n    /// <summary>\r\n    /// Classes implementing Countable can be used with the count() function.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface JsonSerializable\r\n    {\r\n        /// <summary>\r\n        /// Specify data which should be serialized to JSON.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/> provided by Phalanger.</param>\r\n        /// <returns>Return data which should be serialized by <c>json_encode()</c>, see <see cref=\"PhpJson.Serialize\"/>.</returns>\r\n        [ImplementsMethod]\r\n        [AllowReturnValueOverride]\r\n        object jsonSerialize(ScriptContext context);\r\n    }\r\n\r\n    /// <summary>\r\n\t/// JSON encoding/decoding functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtJson)]\r\n\tpublic static class PhpJson\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Values returned by json_last_error function.\r\n        /// </summary>\r\n        public enum JsonLastError : int\r\n        {\r\n            /// <summary>\r\n            /// No error has occurred  \t \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_ERROR_NONE\")]\r\n            JSON_ERROR_NONE = 0,\r\n\r\n            /// <summary>\r\n            /// The maximum stack depth has been exceeded  \t \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_ERROR_DEPTH\")]\r\n            JSON_ERROR_DEPTH = 1,\r\n\r\n            /// <summary>\r\n            /// Occurs with underflow or with the modes mismatch.\r\n            /// </summary>\r\n            [ImplementsConstant(\"PHP_JSON_ERROR_STATE_MISMATCH\")]\r\n            PHP_JSON_ERROR_STATE_MISMATCH = 2,\r\n\r\n            /// <summary>\r\n            /// Control character error, possibly incorrectly encoded  \t \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_ERROR_CTRL_CHAR\")]\r\n            JSON_ERROR_CTRL_CHAR = 3,\r\n\r\n            /// <summary>\r\n            /// Syntax error  \t \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_ERROR_SYNTAX\")]\r\n            JSON_ERROR_SYNTAX = 4,\r\n\r\n            /// <summary>\r\n            /// \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_ERROR_UTF8\")]\r\n            JSON_ERROR_UTF8 = 5,\r\n        }\r\n\r\n        /// <summary>\r\n        /// Options given to json_encode function.\r\n        /// </summary>\r\n        public enum JsonEncodeOptions\r\n        {\r\n            /// <summary>\r\n            /// No options specified.\r\n            /// </summary>\r\n            Default = 0,\r\n\r\n            /// <summary>\r\n            /// All &lt; and &gt; are converted to \\u003C and \\u003E. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_HEX_TAG\")]\r\n            JSON_HEX_TAG = 1,\r\n\r\n            /// <summary>\r\n            /// All &amp;s are converted to \\u0026. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_HEX_AMP\")]\r\n            JSON_HEX_AMP = 2,\r\n\r\n            /// <summary>\r\n            /// All ' are converted to \\u0027. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_HEX_APOS\")]\r\n            JSON_HEX_APOS = 4,\r\n\r\n            /// <summary>\r\n            /// All \" are converted to \\u0022. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_HEX_QUOT\")]\r\n            JSON_HEX_QUOT = 8,\r\n\r\n            /// <summary>\r\n            /// 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. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_FORCE_OBJECT\")]\r\n            JSON_FORCE_OBJECT = 16,\r\n\r\n            /// <summary>\r\n            /// Encodes numeric strings as numbers. \r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_NUMERIC_CHECK\")]\r\n            JSON_NUMERIC_CHECK = 32,\r\n        }\r\n\r\n        /// <summary>\r\n        /// Options given to json_decode function.\r\n        /// </summary>\r\n        public enum JsonDecodeOptions\r\n        {\r\n            Default = 0,\r\n\r\n            /// <summary>\r\n            /// Big integers represent as strings rather than floats.\r\n            /// </summary>\r\n            [ImplementsConstant(\"JSON_BIGINT_AS_STRING\")]\r\n            JSON_BIGINT_AS_STRING = 1,\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region json_encode, json_decode, json_last_error (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        [ImplementsFunction(\"json_encode\")]\r\n\t\tpublic static PhpBytes Serialize(object value)\r\n\t\t{\r\n            return PhpJsonSerializer.Default.Serialize(value, UnknownTypeDesc.Singleton);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"json_encode\")]\r\n        public static PhpBytes Serialize(object value, JsonEncodeOptions options)\r\n        {\r\n            return new PhpJsonSerializer(\r\n                new JsonFormatter.EncodeOptions()\r\n                {\r\n                    ForceObject = (options & JsonEncodeOptions.JSON_FORCE_OBJECT) != 0,\r\n                    HexAmp = (options & JsonEncodeOptions.JSON_HEX_AMP) != 0,\r\n                    HexApos = (options & JsonEncodeOptions.JSON_HEX_APOS) != 0,\r\n                    HexQuot = (options & JsonEncodeOptions.JSON_HEX_QUOT) != 0,\r\n                    HexTag = (options & JsonEncodeOptions.JSON_HEX_TAG) != 0,\r\n                    NumericCheck = (options & JsonEncodeOptions.JSON_NUMERIC_CHECK) != 0,\r\n                },\r\n                new JsonFormatter.DecodeOptions()\r\n                ).Serialize(value, UnknownTypeDesc.Singleton);\r\n        }\r\n\r\n        [ImplementsFunction(\"json_decode\")]\r\n        public static PhpReference Unserialize(PhpBytes json)\r\n        {\r\n            if (json == null)\r\n                return null;\r\n\r\n            return PhpJsonSerializer.Default.Deserialize(json, UnknownTypeDesc.Singleton);\r\n        }\r\n\r\n        [ImplementsFunction(\"json_decode\")]\r\n        public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/)\r\n        {\r\n            return Unserialize(json, assoc, 512, JsonDecodeOptions.Default);\r\n        }\r\n\r\n        [ImplementsFunction(\"json_decode\")]\r\n        public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/ , int depth /* = 512*/)\r\n        {\r\n            return Unserialize(json, assoc, depth, JsonDecodeOptions.Default);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"json\"></param>\r\n        /// <param name=\"assoc\">When TRUE, returned object's will be converted into associative array s. </param>\r\n        /// <param name=\"depth\">User specified recursion depth. </param>\r\n        /// <param name=\"options\"></param>\r\n        /// <returns></returns>\r\n\t\t[ImplementsFunction(\"json_decode\")]\r\n        public static PhpReference Unserialize(PhpBytes json, bool assoc /* = false*/ , int depth /* = 512*/  , JsonDecodeOptions options /* = 0 */)\r\n\t\t{\r\n            if (json == null)\r\n                return null;\r\n\r\n            return new PhpJsonSerializer(\r\n                new JsonFormatter.EncodeOptions(),\r\n                new JsonFormatter.DecodeOptions()\r\n                {\r\n                    Assoc = assoc,\r\n                    Depth = depth,\r\n                    BigIntAsString =  (options & JsonDecodeOptions.JSON_BIGINT_AS_STRING) != 0\r\n                }\r\n                ).Deserialize(json, UnknownTypeDesc.Singleton);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"json_last_error\")]\r\n        public static int GetLastError()\r\n        {\r\n            JsonLastError err;\r\n            var ctx = ScriptContext.CurrentContext;\r\n            if (ctx.Properties.TryGetProperty<JsonLastError>(out err) == false)\r\n                err = JsonLastError.JSON_ERROR_NONE;\r\n\r\n            return (int)err;\r\n        }\r\n\r\n#endif\r\n\t\t#endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region JsonFormatter\r\n\r\n    /// <summary>\r\n    /// Implements a JSON formatter (serializer).\r\n    /// </summary>\r\n    public sealed class JsonFormatter : IFormatter\r\n    {\r\n        #region Tokens\r\n\r\n        /// <summary>\r\n        /// Contains definition of (one-character) tokens that constitute PHP serialized data.\r\n        /// </summary>\r\n        internal class Tokens\r\n        {\r\n            internal const char ObjectOpen = '{';\r\n            internal const char ObjectClose = '}';\r\n            internal const char ItemsSeparator = ',';\r\n            internal const char PropertyKeyValueSeparator = ':';\r\n            \r\n            internal const char Quote = '\"';\r\n            internal const char Escape = '\\\\';\r\n\r\n            internal const string EscapedNewLine = @\"\\n\";\r\n            internal const string EscapedCR = @\"\\r\";\r\n            internal const string EscapedTab = @\"\\t\";\r\n            internal const string EscapedBackspace = @\"\\b\";\r\n            internal const string EscapedQuote = \"\\\\\\\"\";\r\n            internal const string EscapedReverseSolidus = @\"\\\\\";\r\n            internal const string EscapedSolidus = @\"\\/\";\r\n            internal const string EscapedFormFeed = @\"\\f\";\r\n            internal const string EscapedUnicodeChar = @\"\\u\";   // 4-digit number follows\r\n\r\n            internal const char ArrayOpen = '[';\r\n            internal const char ArrayClose = ']';\r\n\r\n            internal const string NullLiteral = \"null\";\r\n            internal const string TrueLiteral = \"true\";\r\n            internal const string FalseLiteral = \"false\";\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Implements the serialization functionality. Serializes an object, or graph of objects\r\n        /// with the given root to the provided <see cref=\"StreamWriter\"/>.\r\n        /// </summary>\r\n        internal class ObjectWriter\r\n        {\r\n            #region Fields and Properties\r\n\r\n            private readonly ScriptContext/*!*/ context;\r\n\r\n            /// <summary>\r\n            /// The stream writer to write serialized data to.\r\n            /// </summary>\r\n            private readonly StreamWriter/*!*/ writer;\r\n\r\n            /// <summary>\r\n            /// Options.\r\n            /// </summary>\r\n            private readonly EncodeOptions/*!*/ encodeOptions;\r\n\r\n            /// <summary>\r\n            /// The encoding to be used when writing and reading the serialization stream.\r\n            /// </summary>\r\n            private Encoding encoding;\r\n\r\n            /// <summary>\r\n            /// Stack of objects being currently serialized. Used to avoid stack overflow and to properly outputs \"recursion_detected\" warning.\r\n            /// </summary>\r\n            private List<object> recursionStack = null;\r\n\r\n            #endregion\r\n\r\n            #region Construction\r\n\r\n            /// <summary>\r\n            /// Creates a new <see cref=\"ObjectWriter\"/> with a given <see cref=\"StreamWriter\"/>.\r\n            /// </summary>\r\n            /// <param name=\"context\">The current <see cref=\"ScriptContext\"/>.</param>\r\n            /// <param name=\"writer\">The writer to write serialized data to.</param>\r\n            /// <param name=\"encodeOptions\">Encoding options.</param>\r\n            /// <param name=\"encoding\">Encoding used for reading PhpBytes.</param>\r\n            internal ObjectWriter(ScriptContext/*!*/ context, StreamWriter/*!*/ writer, EncodeOptions/*!*/encodeOptions, Encoding encoding)\r\n            {\r\n                Debug.Assert(context != null && writer != null && encodeOptions != null);\r\n\r\n                this.context = context;\r\n                this.writer = writer;\r\n                this.encodeOptions = encodeOptions;\r\n                this.encoding = encoding;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Recursion\r\n\r\n            /// <summary>\r\n            /// Push currently serialized array or object to the stack to prevent recursion.\r\n            /// </summary>\r\n            /// <param name=\"obj\"></param>\r\n            /// <returns></returns>\r\n            private bool PushObject(object/*!*/obj)\r\n            {\r\n                Debug.Assert(obj != null);\r\n\r\n                if (recursionStack == null)\r\n                    recursionStack = new List<object>(8);\r\n                else\r\n                {\r\n                    // check recursion\r\n                    int hits = 0;\r\n                    for (int i = 0; i < recursionStack.Count; i++)\r\n                        if (recursionStack[i] == obj)\r\n                            hits++;\r\n\r\n                    if (hits >= 2)\r\n                    {\r\n                        PhpException.Throw(PhpError.Warning, LibResources.GetString(\"recursion_detected\"));\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                recursionStack.Add(obj);\r\n                return true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Pop the serialized object from the stack.\r\n            /// </summary>\r\n            private void PopObject()\r\n            {\r\n                Debug.Assert(recursionStack != null);\r\n                recursionStack.RemoveAt(recursionStack.Count - 1);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Serialize, Write*\r\n\r\n            /// <summary>\r\n            /// Serializes an object or graph of objects to <see cref=\"writer\"/>.\r\n            /// </summary>\r\n            /// <param name=\"graph\">The object (graph) to serialize.</param>\r\n            internal void Serialize(object graph)\r\n            {\r\n                if (graph == null)\r\n                {\r\n                    WriteNull();\r\n                    return;\r\n                }\r\n\r\n                switch (Type.GetTypeCode(graph.GetType()))\r\n                {\r\n                    case TypeCode.Boolean:\r\n                        WriteBoolean((bool)graph); break;\r\n\r\n                    case TypeCode.Byte:\r\n                    case TypeCode.SByte:\r\n                    case TypeCode.Int16:\r\n                    case TypeCode.Int32:\r\n                    case TypeCode.Int64:\r\n                    case TypeCode.UInt16:\r\n                    case TypeCode.UInt32:\r\n                    case TypeCode.UInt64:\r\n                    case TypeCode.Decimal:\r\n                        writer.Write(graph.ToString());\r\n                        break;\r\n\r\n                    case TypeCode.Single:\r\n                        writer.Write(graph.ToString());\r\n                        break;\r\n                    case TypeCode.Double:\r\n                        writer.Write((double)graph);\r\n                        break;\r\n\r\n                    case TypeCode.Char:\r\n                        WriteString(graph.ToString());\r\n                        break;\r\n\r\n                    case TypeCode.String:\r\n                        WriteString((string)graph);\r\n                        break;\r\n\r\n                    case TypeCode.Object:\r\n                        {\r\n                            PhpArray array;\r\n                            if ((array = graph as PhpArray) != null)\r\n                            {\r\n                                if (PushObject(graph))\r\n                                {\r\n                                    WriteArray(array);\r\n                                    PopObject();\r\n                                }\r\n                                else\r\n                                    WriteNull();\r\n\r\n                                break;\r\n                            }\r\n\r\n                            DObject obj;\r\n                            JsonSerializable jsonserializeble;\r\n                            if ((jsonserializeble = graph as JsonSerializable) != null)\r\n                            {\r\n                                var retval = jsonserializeble.jsonSerialize(context);\r\n                                if ((obj = (retval as DObject)) != null)    // Handle the case where jsonSerialize() returns itself.\r\n                                    WriteDObject(obj);\r\n                                else\r\n                                    Serialize(retval);\r\n                                \r\n                                break;\r\n                            }\r\n\r\n                            if ((obj = graph as DObject) != null)\r\n                            {\r\n                                if (PushObject(graph))\r\n                                {\r\n                                    WriteDObject(obj);\r\n                                    PopObject();\r\n                                }\r\n                                else\r\n                                    WriteNull();\r\n\r\n                                break;\r\n                            }\r\n\r\n                            PhpReference reference;\r\n                            if ((reference = graph as PhpReference) != null)\r\n                            {\r\n                                Serialize(reference.Value);\r\n                                break;\r\n                            }\r\n\r\n                            PhpBytes bytes;\r\n                            if ((bytes = graph as PhpBytes) != null)\r\n                            {\r\n                                WriteString(((IPhpConvertible)bytes).ToString());\r\n                                break;\r\n                            }\r\n\r\n                            PhpString str;\r\n                            if ((str = graph as PhpString) != null)\r\n                            {\r\n                                WriteString(str.ToString());\r\n                                break;\r\n                            }\r\n\r\n                            if (graph is PhpResource)\r\n                            {\r\n                                WriteUnsupported(PhpResource.PhpTypeName);\r\n                                break;\r\n                            }\r\n\r\n                            goto default;\r\n                        }\r\n\r\n                    default:\r\n                        WriteUnsupported(graph.GetType().FullName);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes null and throws an exception.\r\n            /// </summary>\r\n            /// <param name=\"TypeName\"></param>\r\n            private void WriteUnsupported(string TypeName)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"serialization_unsupported_type\", TypeName));\r\n                WriteNull();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes <B>Null</B>.\r\n            /// </summary>\r\n            private void WriteNull()\r\n            {\r\n                writer.Write(Tokens.NullLiteral);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes a bool value.\r\n            /// </summary>\r\n            /// <param name=\"value\">The value.</param>\r\n            private void WriteBoolean(bool value)\r\n            {\r\n                writer.Write(value ? Tokens.TrueLiteral : Tokens.FalseLiteral);\r\n            }\r\n\r\n            #region encoding strings\r\n\r\n            /// <summary>\r\n            /// Determines if given character is printable character. Otherwise it must be encoded.\r\n            /// </summary>\r\n            /// <param name=\"c\"></param>\r\n            /// <returns></returns>\r\n            private static bool CharIsPrintable(char c)\r\n            {\r\n                return\r\n                    (c <= 0x7f) &&   // ASCII\r\n                    (!char.IsControl(c)) && // not control\r\n                    (!(c >= 9 && c <= 13)); // not BS, HT, LF, Vertical Tab, Form Feed, CR\r\n            }\r\n\r\n            /// <summary>\r\n            /// Determines if given character should be encoded.\r\n            /// </summary>\r\n            /// <param name=\"c\"></param>\r\n            /// <returns></returns>\r\n            private bool CharShouldBeEncoded(char c)\r\n            {\r\n                switch (c)\r\n                {\r\n                    case '\\n':\r\n                    case '\\r':\r\n                    case '\\t':\r\n                    case '/':\r\n                    case Tokens.Escape:\r\n                    case '\\b':\r\n                    case '\\f':\r\n                    case Tokens.Quote:\r\n                        return true;\r\n\r\n                    case '\\'':\r\n                        return encodeOptions.HexApos;\r\n\r\n                    case '<':\r\n                        return encodeOptions.HexTag;\r\n\r\n                    case '>':\r\n                        return encodeOptions.HexTag;\r\n\r\n                    case '&':\r\n                        return encodeOptions.HexAmp;\r\n\r\n                    default:\r\n                        return !CharIsPrintable(c);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Convert 16b character into json encoded character.\r\n            /// </summary>\r\n            /// <param name=\"value\">The full string to be encoded.</param>\r\n            /// <param name=\"i\">The index of character to be encoded. Can be increased if more characters are processed.</param>\r\n            /// <returns>The encoded part of string, from value[i] to value[i after method call]</returns>\r\n            private string EncodeStringIncremental(string value, ref int i)\r\n            {\r\n                char c = value[i];\r\n\r\n                switch (c)\r\n                {\r\n                    case '\\n':  return (Tokens.EscapedNewLine);\r\n                    case '\\r':  return (Tokens.EscapedCR);\r\n                    case '\\t':  return (Tokens.EscapedTab);\r\n                    case '/':   return (Tokens.EscapedSolidus);\r\n                    case Tokens.Escape: return (Tokens.EscapedReverseSolidus);\r\n                    case '\\b':  return (Tokens.EscapedBackspace);\r\n                    case '\\f':  return (Tokens.EscapedFormFeed);\r\n                    case Tokens.Quote:  return (encodeOptions.HexQuot ? (Tokens.EscapedUnicodeChar + \"0022\") : Tokens.EscapedQuote);\r\n                    case '\\'':  return (encodeOptions.HexApos ? (Tokens.EscapedUnicodeChar + \"0027\") : \"'\");\r\n                    case '<':   return (encodeOptions.HexTag ? (Tokens.EscapedUnicodeChar + \"003C\") : \"<\");\r\n                    case '>':   return (encodeOptions.HexTag ? (Tokens.EscapedUnicodeChar + \"003E\") : \">\");\r\n                    case '&':   return (encodeOptions.HexAmp ? (Tokens.EscapedUnicodeChar + \"0026\") : \"&\");\r\n                    default:\r\n                        {\r\n                            if (CharIsPrintable(c))\r\n                            {\r\n                                int start = i++;\r\n                                for (; i < value.Length && !CharShouldBeEncoded(value[i]); ++i)\r\n                                    ;\r\n\r\n                                return value.Substring(start, (i--) - start);   // accumulate characters, mostly it is entire string value (faster)\r\n                            }\r\n                            else\r\n                            {\r\n                                return (Tokens.EscapedUnicodeChar + ((int)c).ToString(\"X4\"));\r\n                            }\r\n                        }\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Serializes JSON string.\r\n            /// </summary>\r\n            /// <param name=\"value\">The string.</param>\r\n            private void WriteString(string value)\r\n            {\r\n                if (encodeOptions.NumericCheck)\r\n                {\r\n                    int i;\r\n                    long l;\r\n                    double d;\r\n                    var result = PHP.Core.Convert.StringToNumber(value, out i, out l, out d);\r\n                    if ((result & Core.Convert.NumberInfo.IsNumber) != 0)\r\n                    {\r\n                        if ((result & Core.Convert.NumberInfo.Integer) != 0) writer.Write(i.ToString());\r\n                        if ((result & Core.Convert.NumberInfo.LongInteger) != 0) writer.Write(l.ToString());\r\n                        if ((result & Core.Convert.NumberInfo.Double) != 0) writer.Write(d.ToString());\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                StringBuilder strVal = new StringBuilder(value.Length + 2);\r\n\r\n                strVal.Append(Tokens.Quote);\r\n\r\n                for (int i = 0; i < value.Length; ++i)\r\n                {\r\n                    strVal.Append(EncodeStringIncremental(value, ref i));\r\n                }\r\n                                \r\n                strVal.Append(Tokens.Quote);\r\n\r\n                writer.Write(strVal.ToString());\r\n            }\r\n\r\n            #region formatting JSON objects / arrays\r\n\r\n            private void WriteJsonObject(IEnumerable<KeyValuePair<string, object>> items)\r\n            {\r\n                writer.Write(Tokens.ObjectOpen);\r\n\r\n                bool bFirst = true;\r\n                foreach (var x in items)\r\n                {\r\n                    if (bFirst) bFirst = false;\r\n                    else writer.Write(Tokens.ItemsSeparator);\r\n\r\n                    WriteString(x.Key);\r\n                    writer.Write(Tokens.PropertyKeyValueSeparator);\r\n\r\n                    Serialize(x.Value);\r\n                }\r\n\r\n                writer.Write(Tokens.ObjectClose);\r\n            }\r\n\r\n            private void WriteJsonArray(IEnumerable<object> items)\r\n            {\r\n                writer.Write(Tokens.ArrayOpen);\r\n\r\n                bool bFirst = true;\r\n                foreach (var x in items)\r\n                {\r\n                    if (bFirst) bFirst = false;\r\n                    else writer.Write(Tokens.ItemsSeparator);\r\n\r\n                    Serialize(x);\r\n                }\r\n\r\n                writer.Write(Tokens.ArrayClose);\r\n            }\r\n\r\n            private IEnumerable<KeyValuePair<string, object>> JsonObjectProperties(PhpArray/*!*/value)\r\n            {\r\n                foreach (var x in value)\r\n                    yield return new KeyValuePair<string, object>(x.Key.ToString(), x.Value);\r\n            }\r\n\r\n            private IEnumerable<KeyValuePair<string, object>> JsonObjectProperties(DObject/*!*/value, bool avoidPicName)\r\n            {\r\n                foreach (KeyValuePair<string, object> pair in Serialization.EnumerateSerializableProperties(value))\r\n                {\r\n                    if (avoidPicName && pair.Key == __PHP_Incomplete_Class.ClassNameFieldName)\r\n                    {\r\n                        // skip the __PHP_Incomplete_Class_Name field\r\n                        continue;\r\n                    }\r\n\r\n                    yield return pair;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Serializes a <see cref=\"PhpArray\"/>.\r\n            /// </summary>\r\n            /// <param name=\"value\">The array.</param>\r\n            private void WriteArray(PhpArray value)\r\n            {\r\n                if (encodeOptions.ForceObject || (value.StringCount > 0 || value.MaxIntegerKey + 1 != value.IntegerCount))\r\n                    WriteJsonObject(JsonObjectProperties(value));\r\n                else\r\n                    WriteJsonArray(value.Values);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Serializes a <see cref=\"DObject\"/>.\r\n            /// </summary>\r\n            /// <param name=\"value\">The object.</param>\r\n            private void WriteDObject(DObject value)\r\n            {\r\n                __PHP_Incomplete_Class pic;\r\n                \r\n                // write out properties\r\n                WriteJsonObject(JsonObjectProperties(value, (pic = value as __PHP_Incomplete_Class) != null && pic.__PHP_Incomplete_Class_Name.IsSet));\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements the deserialization functionality. Deserializes the data on the provided\r\n        /// <see cref=\"StreamReader\"/> and reconstitutes the graph of objects.\r\n        /// </summary>\r\n        internal class ObjectReader\r\n        {\r\n            #region Fields and Properties\r\n\r\n            private readonly ScriptContext/*!*/ context;\r\n\r\n            /// <summary>\r\n            /// The stream reader to read serialized data from.\r\n            /// </summary>\r\n            private readonly StreamReader/*!*/ reader;\r\n\r\n            /// <summary>\r\n            /// Decoding options.\r\n            /// </summary>\r\n            private readonly DecodeOptions/*!*/decodeOptions;\r\n\r\n            #endregion\r\n\r\n            #region Construction\r\n\r\n            /// <summary>\r\n            /// Creates a new <see cref=\"ObjectReader\"/> with a given <see cref=\"StreamReader\"/>.\r\n            /// </summary>\r\n            /// <param name=\"context\">The current <see cref=\"ScriptContext\"/>.</param>\r\n            /// <param name=\"reader\">The reader to reader serialized data from.</param>\r\n            /// <param name=\"decodeOptions\"></param>\r\n            internal ObjectReader(ScriptContext/*!*/ context, StreamReader/*!*/ reader, DecodeOptions/*!*/decodeOptions)\r\n            {\r\n                Debug.Assert(context != null && reader != null && decodeOptions != null);\r\n\r\n                this.context = context;\r\n                this.reader = reader;\r\n                this.decodeOptions = decodeOptions;\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// De-serializes the data is <see cref=\"reader\"/> and reconstitutes the graph of objects.\r\n            /// </summary>\r\n            /// <returns>The top object of the deserialized graph. Null in case of error.</returns>\r\n            internal object Deserialize()\r\n            {\r\n                context.Properties.RemoveProperty<PhpJson.JsonLastError>();\r\n\r\n                var scanner = new JsonScanner(reader, decodeOptions);\r\n                var parser = new Json.Parser(context, decodeOptions) { Scanner = scanner };\r\n\r\n                try\r\n                {\r\n                    if (!parser.Parse())\r\n                        throw new Exception(\"Syntax error\");\r\n                }\r\n                catch (Exception)\r\n                {\r\n                    context.Properties.SetProperty<PhpJson.JsonLastError>(PhpJson.JsonLastError.JSON_ERROR_SYNTAX);\r\n                    return null;\r\n                }\r\n\r\n                //\r\n                return parser.Result;\r\n            }\r\n        }\r\n\r\n        #region Fields and properties\r\n\r\n        /// <summary>\r\n        /// Serialization security permission demanded in <see cref=\"Serialize\"/>.\r\n        /// </summary>\r\n        private static SecurityPermission serializationPermission =\r\n            new SecurityPermission(SecurityPermissionFlag.SerializationFormatter);\r\n\r\n        /// <summary>\r\n        /// The encoding to be used when writing and reading the serialization stream.\r\n        /// </summary>\r\n        private Encoding encoding;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the encoding to be used when writing and reading the serialized stream.\r\n        /// </summary>\r\n        public Encoding Encoding\r\n        {\r\n            get { return encoding; }\r\n            set { encoding = (value ?? new ASCIIEncoding()); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the serialization binder that performs type lookups during deserialization.\r\n        /// </summary>\r\n        public SerializationBinder Binder\r\n        {\r\n            get { return null; }\r\n            set { throw new NotSupportedException(LibResources.GetString(\"serialization_binder_unsupported\")); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the streaming context used for serialization and deserialization.\r\n        /// </summary>\r\n        public StreamingContext Context\r\n        {\r\n            get { return new StreamingContext(StreamingContextStates.Persistence); }\r\n            set { throw new NotSupportedException(LibResources.GetString(\"streaming_context_unsupported\")); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the surrogate selector used by the current formatter.\r\n        /// </summary>\r\n        public ISurrogateSelector SurrogateSelector\r\n        {\r\n            get { return null; }\r\n            set { throw new NotSupportedException(LibResources.GetString(\"surrogate_selector_unsupported\")); }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Options\r\n\r\n        /// <summary>\r\n        /// Encode (serialize) options. All false.\r\n        /// </summary>\r\n        public class EncodeOptions\r\n        {\r\n            public bool HexTag = false, HexAmp = false, HexApos = false, HexQuot = false, ForceObject = false, NumericCheck = false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Decode (unserialize) options.\r\n        /// </summary>\r\n        public class DecodeOptions\r\n        {\r\n            public bool BigIntAsString = false;\r\n\r\n            /// <summary>\r\n            /// When TRUE, returned object s will be converted into associative array s. \r\n            /// </summary>\r\n            public bool Assoc = false;\r\n\r\n            /// <summary>\r\n            /// User specified recursion depth. \r\n            /// </summary>\r\n            public int Depth = 512;\r\n        }\r\n\r\n        private readonly EncodeOptions encodeOptions;\r\n        private readonly DecodeOptions decodeOptions;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        ///// <summary>\r\n        ///// Creates a new <see cref=\"PhpFormatter\"/> with <see cref=\"ASCIIEncoding\"/> and\r\n        ///// default <see cref=\"Context\"/>.\r\n        ///// </summary>\r\n        //public JsonFormatter()\r\n        //    :this(new ASCIIEncoding(), new EncodeOptions(), new DecodeOptions())\r\n        //{\r\n            \r\n        //}\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PhpFormatter\"/> with a given <see cref=\"Encoding\"/> and\r\n        /// default <see cref=\"Context\"/>.\r\n        /// </summary>\r\n        /// <param name=\"encoding\">The encoding to be used when writing and reading the serialization stream.</param>\r\n        /// <param name=\"encodeOptions\">Options used to encode the data stream.</param>\r\n        /// <param name=\"decodeOptions\">Options used to decode the data stream.</param>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n        public JsonFormatter(Encoding encoding, EncodeOptions encodeOptions, DecodeOptions decodeOptions, DTypeDesc caller)\r\n        {\r\n            // no UTF8 BOM!\r\n            if (encoding is UTF8Encoding)\r\n                this.encoding = new UTF8Encoding(false);\r\n            else\r\n                this.encoding = (encoding ?? new ASCIIEncoding());\r\n\r\n            // options\r\n            this.encodeOptions = encodeOptions;\r\n            this.decodeOptions = decodeOptions;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialize and Deserialize\r\n\r\n        /// <summary>\r\n        /// Serializes an object, or graph of objects with the given root to the provided stream.\r\n        /// </summary>\r\n        /// <param name=\"serializationStream\">The stream where the formatter puts the serialized data.</param>\r\n        /// <param name=\"graph\">The object, or root of the object graph, to serialize.</param>\r\n        public void Serialize(Stream/*!*/serializationStream, object graph)\r\n        {\r\n            if (serializationStream == null)\r\n                throw new ArgumentNullException(\"serializationStream\");\r\n            \r\n            serializationPermission.Demand();\r\n\r\n            StreamWriter stream_writer = new StreamWriter(serializationStream, encoding);\r\n            ObjectWriter object_writer = new ObjectWriter(ScriptContext.CurrentContext, stream_writer, encodeOptions, encoding);\r\n\r\n            try\r\n            {\r\n                object_writer.Serialize(graph);\r\n            }\r\n            finally\r\n            {\r\n                stream_writer.Flush();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Deserializes the data on the provided stream and reconstitutes the graph of objects.\r\n        /// </summary>\r\n        /// <param name=\"serializationStream\">The stream containing the data to deserialize.</param>\r\n        /// <returns>The top object of the deserialized graph.</returns>\r\n        public object Deserialize(Stream/*!*/serializationStream)\r\n        {\r\n            if (serializationStream == null)\r\n                throw new ArgumentNullException(\"serializationStream\");\r\n            \r\n            serializationPermission.Demand();\r\n\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            ObjectReader object_reader = new ObjectReader(context, new StreamReader(serializationStream, encoding), decodeOptions);\r\n            return object_reader.Deserialize();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region JsonScanner\r\n\r\n    public class JsonScanner : Json.Lexer, PHP.Core.Parsers.GPPG.ITokenProvider<Json.SemanticValueType, Json.Position>\r\n    {\r\n        Json.SemanticValueType tokenSemantics;\r\n        Json.Position tokenPosition;\r\n\r\n        private readonly PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions;\r\n\r\n        public JsonScanner(TextReader/*!*/ reader, PHP.Library.JsonFormatter.DecodeOptions/*!*/decodeOptions)\r\n            : base(reader)\r\n        {\r\n            Debug.Assert(decodeOptions != null);\r\n\r\n            this.decodeOptions = decodeOptions;\r\n        }\r\n\r\n        #region ITokenProvider<SemanticValueType,Position> Members\r\n\r\n        public Json.SemanticValueType TokenValue\r\n        {\r\n            get { return tokenSemantics; }\r\n        }\r\n\r\n        public Json.Position TokenPosition\r\n        {\r\n            get { return tokenPosition; }\r\n        }\r\n\r\n        public new int GetNextToken()\r\n        {\r\n            tokenPosition = new Json.Position();\r\n            tokenSemantics = new Json.SemanticValueType();\r\n\r\n            Json.Tokens token = base.GetNextToken();\r\n\r\n            switch (token)\r\n            {\r\n                case Json.Tokens.STRING_BEGIN:\r\n                    while ((token = base.GetNextToken()) != Json.Tokens.STRING_END)\r\n                    {\r\n                        if (token == Json.Tokens.ERROR || token == Json.Tokens.EOF)\r\n                            throw new Exception(\"Syntax error, unexpected \" + TokenChunkLength.ToString());\r\n                    }\r\n                    token = Json.Tokens.STRING;\r\n                    tokenSemantics.obj = base.QuotedStringContent;\r\n                    break;\r\n                case Json.Tokens.INTEGER:\r\n                case Json.Tokens.DOUBLE:\r\n                    {\r\n                        int i;\r\n                        long l;\r\n                        double d;\r\n                        string numtext = yytext();\r\n                        switch (PHP.Core.Convert.StringToNumber(numtext, out i, out l, out d) & PHP.Core.Convert.NumberInfo.TypeMask)\r\n                        {\r\n                            case PHP.Core.Convert.NumberInfo.Double:\r\n                                if (decodeOptions.BigIntAsString && token == Json.Tokens.INTEGER)\r\n                                    tokenSemantics.obj = numtext;   // it was integer, but converted to double because it was too long\r\n                                else\r\n                                    tokenSemantics.obj = d;\r\n                                break;\r\n                            case PHP.Core.Convert.NumberInfo.Integer:\r\n                                tokenSemantics.obj = i;\r\n                                break;\r\n                            case PHP.Core.Convert.NumberInfo.LongInteger:\r\n                                tokenSemantics.obj = l;\r\n                                break;\r\n                            default:\r\n                                tokenSemantics.obj = numtext;\r\n                                break;\r\n\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            return (int)token;\r\n        }\r\n\r\n        public void ReportError(string[] expectedTokens)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n\r\n\r\nnamespace PHP.Library.Json\r\n{\r\n    public partial class Lexer\r\n    {\r\n        private char Map(char c)\r\n        {\r\n            return (c > SByte.MaxValue) ? 'a' : c;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/ClassLibrary/PhpTokenizer.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Library\r\n{\r\n\tusing CoreTokens = PHP.Core.Parsers.Tokens;\r\n\r\n\t/// <summary>\r\n\t/// Provides functions and constant related to PHP tokenizer.\r\n\t/// </summary>\r\n\t[ImplementsExtension(LibraryDescriptor.ExtTokenizer)]\r\n\tpublic static class PhpTokenizer\r\n\t{\r\n\t\t#region Tokens\r\n\r\n\t\t/// <exclude/>\r\n\t\tpublic enum Tokens\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"T_REQUIRE_ONCE\")]\r\n\t\t\tT_REQUIRE_ONCE = CoreTokens.T_REQUIRE_ONCE,\r\n\t\t\t[ImplementsConstant(\"T_REQUIRE\")]\r\n\t\t\tT_REQUIRE = CoreTokens.T_REQUIRE,\r\n\t\t\t[ImplementsConstant(\"T_EVAL\")]\r\n\t\t\tT_EVAL = CoreTokens.T_EVAL,\r\n\t\t\t[ImplementsConstant(\"T_INCLUDE_ONCE\")]\r\n\t\t\tT_INCLUDE_ONCE = CoreTokens.T_INCLUDE_ONCE,\r\n\t\t\t[ImplementsConstant(\"T_INCLUDE\")]\r\n\t\t\tT_INCLUDE = CoreTokens.T_INCLUDE,\r\n\t\t\t[ImplementsConstant(\"T_LOGICAL_OR\")]\r\n\t\t\tT_LOGICAL_OR = CoreTokens.T_LOGICAL_OR,\r\n\t\t\t[ImplementsConstant(\"T_LOGICAL_XOR\")]\r\n\t\t\tT_LOGICAL_XOR = CoreTokens.T_LOGICAL_XOR,\r\n\t\t\t[ImplementsConstant(\"T_LOGICAL_AND\")]\r\n\t\t\tT_LOGICAL_AND = CoreTokens.T_LOGICAL_AND,\r\n\t\t\t[ImplementsConstant(\"T_PRINT\")]\r\n\t\t\tT_PRINT = CoreTokens.T_PRINT,\r\n\t\t\t[ImplementsConstant(\"T_SR_EQUAL\")]\r\n\t\t\tT_SR_EQUAL = CoreTokens.T_SR_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_SL_EQUAL\")]\r\n\t\t\tT_SL_EQUAL = CoreTokens.T_SL_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_XOR_EQUAL\")]\r\n\t\t\tT_XOR_EQUAL = CoreTokens.T_XOR_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_OR_EQUAL\")]\r\n\t\t\tT_OR_EQUAL = CoreTokens.T_OR_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_AND_EQUAL\")]\r\n\t\t\tT_AND_EQUAL = CoreTokens.T_AND_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_MOD_EQUAL\")]\r\n\t\t\tT_MOD_EQUAL = CoreTokens.T_MOD_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_CONCAT_EQUAL\")]\r\n\t\t\tT_CONCAT_EQUAL = CoreTokens.T_CONCAT_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_DIV_EQUAL\")]\r\n\t\t\tT_DIV_EQUAL = CoreTokens.T_DIV_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_MUL_EQUAL\")]\r\n\t\t\tT_MUL_EQUAL = CoreTokens.T_MUL_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_MINUS_EQUAL\")]\r\n\t\t\tT_MINUS_EQUAL = CoreTokens.T_MINUS_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_PLUS_EQUAL\")]\r\n\t\t\tT_PLUS_EQUAL = CoreTokens.T_PLUS_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_BOOLEAN_OR\")]\r\n\t\t\tT_BOOLEAN_OR = CoreTokens.T_BOOLEAN_OR,\r\n\t\t\t[ImplementsConstant(\"T_BOOLEAN_AND\")]\r\n\t\t\tT_BOOLEAN_AND = CoreTokens.T_BOOLEAN_AND,\r\n\t\t\t[ImplementsConstant(\"T_IS_NOT_IDENTICAL\")]\r\n\t\t\tT_IS_NOT_IDENTICAL = CoreTokens.T_IS_NOT_IDENTICAL,\r\n\t\t\t[ImplementsConstant(\"T_IS_IDENTICAL\")]\r\n\t\t\tT_IS_IDENTICAL = CoreTokens.T_IS_IDENTICAL,\r\n\t\t\t[ImplementsConstant(\"T_IS_NOT_EQUAL\")]\r\n\t\t\tT_IS_NOT_EQUAL = CoreTokens.T_IS_NOT_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_IS_EQUAL\")]\r\n\t\t\tT_IS_EQUAL = CoreTokens.T_IS_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_IS_GREATER_OR_EQUAL\")]\r\n\t\t\tT_IS_GREATER_OR_EQUAL = CoreTokens.T_IS_GREATER_OR_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_IS_SMALLER_OR_EQUAL\")]\r\n\t\t\tT_IS_SMALLER_OR_EQUAL = CoreTokens.T_IS_SMALLER_OR_EQUAL,\r\n\t\t\t[ImplementsConstant(\"T_SR\")]\r\n\t\t\tT_SR = CoreTokens.T_SR,\r\n\t\t\t[ImplementsConstant(\"T_SL\")]\r\n\t\t\tT_SL = CoreTokens.T_SL,\r\n\t\t\t[ImplementsConstant(\"T_INSTANCEOF\")]\r\n\t\t\tT_INSTANCEOF = CoreTokens.T_INSTANCEOF,\r\n\t\t\t[ImplementsConstant(\"T_UNSET_CAST\")]\r\n\t\t\tT_UNSET_CAST = CoreTokens.T_UNSET_CAST,\r\n\t\t\t[ImplementsConstant(\"T_BOOL_CAST\")]\r\n\t\t\tT_BOOL_CAST = CoreTokens.T_BOOL_CAST,\r\n\t\t\t[ImplementsConstant(\"T_OBJECT_CAST\")]\r\n\t\t\tT_OBJECT_CAST = CoreTokens.T_OBJECT_CAST,\r\n\t\t\t[ImplementsConstant(\"T_ARRAY_CAST\")]\r\n\t\t\tT_ARRAY_CAST = CoreTokens.T_ARRAY_CAST,\r\n\t\t\t[ImplementsConstant(\"T_STRING_CAST\")]\r\n\t\t\tT_STRING_CAST = CoreTokens.T_STRING_CAST,\r\n\t\t\t[ImplementsConstant(\"T_DOUBLE_CAST\")]\r\n\t\t\tT_DOUBLE_CAST = CoreTokens.T_DOUBLE_CAST,\r\n\t\t\t[ImplementsConstant(\"T_INT_CAST\")]\r\n\t\t\tT_INT_CAST = CoreTokens.T_INT_CAST,\r\n\t\t\t[ImplementsConstant(\"T_DEC\")]\r\n\t\t\tT_DEC = CoreTokens.T_DEC,\r\n\t\t\t[ImplementsConstant(\"T_INC\")]\r\n\t\t\tT_INC = CoreTokens.T_INC,\r\n\t\t\t[ImplementsConstant(\"T_CLONE\")]\r\n\t\t\tT_CLONE = CoreTokens.T_CLONE,\r\n\t\t\t[ImplementsConstant(\"T_NEW\")]\r\n\t\t\tT_NEW = CoreTokens.T_NEW,\r\n\t\t\t[ImplementsConstant(\"T_EXIT\")]\r\n\t\t\tT_EXIT = CoreTokens.T_EXIT,\r\n\t\t\t[ImplementsConstant(\"T_IF\")]\r\n\t\t\tT_IF = CoreTokens.T_IF,\r\n\t\t\t[ImplementsConstant(\"T_ELSEIF\")]\r\n\t\t\tT_ELSEIF = CoreTokens.T_ELSEIF,\r\n\t\t\t[ImplementsConstant(\"T_ELSE\")]\r\n\t\t\tT_ELSE = CoreTokens.T_ELSE,\r\n\t\t\t[ImplementsConstant(\"T_ENDIF\")]\r\n\t\t\tT_ENDIF = CoreTokens.T_ENDIF,\r\n\t\t\t[ImplementsConstant(\"T_LNUMBER\")]\r\n\t\t\tT_LNUMBER = CoreTokens.T_LNUMBER,\r\n\t\t\t[ImplementsConstant(\"T_DNUMBER\")]\r\n\t\t\tT_DNUMBER = CoreTokens.T_DNUMBER,\r\n\t\t\t[ImplementsConstant(\"T_STRING\")]\r\n\t\t\tT_STRING = CoreTokens.T_STRING,\r\n\t\t\t[ImplementsConstant(\"T_STRING_VARNAME\")]\r\n\t\t\tT_STRING_VARNAME = CoreTokens.T_STRING_VARNAME,\r\n\t\t\t[ImplementsConstant(\"T_VARIABLE\")]\r\n\t\t\tT_VARIABLE = CoreTokens.T_VARIABLE,\r\n\t\t\t[ImplementsConstant(\"T_NUM_STRING\")]\r\n\t\t\tT_NUM_STRING = CoreTokens.T_NUM_STRING,\r\n\t\t\t[ImplementsConstant(\"T_INLINE_HTML\")]\r\n\t\t\tT_INLINE_HTML = CoreTokens.T_INLINE_HTML,\r\n\t\t\t[ImplementsConstant(\"T_CHARACTER\")]\r\n\t\t\tT_CHARACTER = CoreTokens.T_CHARACTER,\r\n\t\t\t[ImplementsConstant(\"T_BAD_CHARACTER\")]\r\n\t\t\tT_BAD_CHARACTER = CoreTokens.T_BAD_CHARACTER,\r\n\t\t\t[ImplementsConstant(\"T_ENCAPSED_AND_WHITESPACE\")]\r\n\t\t\tT_ENCAPSED_AND_WHITESPACE = CoreTokens.T_ENCAPSED_AND_WHITESPACE,\r\n\t\t\t[ImplementsConstant(\"T_CONSTANT_ENCAPSED_STRING\")]\r\n\t\t\tT_CONSTANT_ENCAPSED_STRING = CoreTokens.T_CONSTANT_ENCAPSED_STRING,\r\n\t\t\t[ImplementsConstant(\"T_ECHO\")]\r\n\t\t\tT_ECHO = CoreTokens.T_ECHO,\r\n\t\t\t[ImplementsConstant(\"T_DO\")]\r\n\t\t\tT_DO = CoreTokens.T_DO,\r\n\t\t\t[ImplementsConstant(\"T_WHILE\")]\r\n\t\t\tT_WHILE = CoreTokens.T_WHILE,\r\n\t\t\t[ImplementsConstant(\"T_ENDWHILE\")]\r\n\t\t\tT_ENDWHILE = CoreTokens.T_ENDWHILE,\r\n\t\t\t[ImplementsConstant(\"T_FOR\")]\r\n\t\t\tT_FOR = CoreTokens.T_FOR,\r\n\t\t\t[ImplementsConstant(\"T_ENDFOR\")]\r\n\t\t\tT_ENDFOR = CoreTokens.T_ENDFOR,\r\n\t\t\t[ImplementsConstant(\"T_FOREACH\")]\r\n\t\t\tT_FOREACH = CoreTokens.T_FOREACH,\r\n\t\t\t[ImplementsConstant(\"T_ENDFOREACH\")]\r\n\t\t\tT_ENDFOREACH = CoreTokens.T_ENDFOREACH,\r\n\t\t\t// [ImplementsConstant(\"T_DECLARE\")] T_DECLARE = CoreTokens.T_DECLARE,\r\n\t\t\t// [ImplementsConstant(\"T_ENDDECLARE\")] T_ENDDECLARE = CoreTokens.T_ENDDECLARE,\r\n\t\t\t[ImplementsConstant(\"T_AS\")]\r\n\t\t\tT_AS = CoreTokens.T_AS,\r\n\t\t\t[ImplementsConstant(\"T_SWITCH\")]\r\n\t\t\tT_SWITCH = CoreTokens.T_SWITCH,\r\n\t\t\t[ImplementsConstant(\"T_ENDSWITCH\")]\r\n\t\t\tT_ENDSWITCH = CoreTokens.T_ENDSWITCH,\r\n\t\t\t[ImplementsConstant(\"T_CASE\")]\r\n\t\t\tT_CASE = CoreTokens.T_CASE,\r\n\t\t\t[ImplementsConstant(\"T_DEFAULT\")]\r\n\t\t\tT_DEFAULT = CoreTokens.T_DEFAULT,\r\n\t\t\t[ImplementsConstant(\"T_BREAK\")]\r\n\t\t\tT_BREAK = CoreTokens.T_BREAK,\r\n\t\t\t[ImplementsConstant(\"T_CONTINUE\")]\r\n\t\t\tT_CONTINUE = CoreTokens.T_CONTINUE,\r\n\t\t\t[ImplementsConstant(\"T_FUNCTION\")]\r\n\t\t\tT_FUNCTION = CoreTokens.T_FUNCTION,\r\n\t\t\t[ImplementsConstant(\"T_CONST\")]\r\n\t\t\tT_CONST = CoreTokens.T_CONST,\r\n\t\t\t[ImplementsConstant(\"T_RETURN\")]\r\n\t\t\tT_RETURN = CoreTokens.T_RETURN,\r\n            [ImplementsConstant(\"T_YIELD\")]\r\n            T_YIELD = CoreTokens.T_YIELD,\r\n            [ImplementsConstant(\"T_TRY\")]\r\n\t\t\tT_TRY = CoreTokens.T_TRY,\r\n\t\t\t[ImplementsConstant(\"T_CATCH\")]\r\n\t\t\tT_CATCH = CoreTokens.T_CATCH,\r\n            [ImplementsConstant(\"T_FINALLY\")]\r\n            T_FINALLY = CoreTokens.T_FINALLY,\r\n            [ImplementsConstant(\"T_THROW\")]\r\n\t\t\tT_THROW = CoreTokens.T_THROW,\r\n\t\t\t// [ImplementsConstant(\"T_USE\")] T_USE = CoreTokens.T_USE,\r\n\t\t\t[ImplementsConstant(\"T_GLOBAL\")]\r\n\t\t\tT_GLOBAL = CoreTokens.T_GLOBAL,\r\n\t\t\t[ImplementsConstant(\"T_PUBLIC\")]\r\n\t\t\tT_PUBLIC = CoreTokens.T_PUBLIC,\r\n\t\t\t[ImplementsConstant(\"T_PROTECTED\")]\r\n\t\t\tT_PROTECTED = CoreTokens.T_PROTECTED,\r\n\t\t\t[ImplementsConstant(\"T_PRIVATE\")]\r\n\t\t\tT_PRIVATE = CoreTokens.T_PRIVATE,\r\n\t\t\t[ImplementsConstant(\"T_FINAL\")]\r\n\t\t\tT_FINAL = CoreTokens.T_FINAL,\r\n\t\t\t[ImplementsConstant(\"T_ABSTRACT\")]\r\n\t\t\tT_ABSTRACT = CoreTokens.T_ABSTRACT,\r\n\t\t\t[ImplementsConstant(\"T_STATIC\")]\r\n\t\t\tT_STATIC = CoreTokens.T_STATIC,\r\n\t\t\t[ImplementsConstant(\"T_VAR\")]\r\n\t\t\tT_VAR = CoreTokens.T_VAR,\r\n\t\t\t[ImplementsConstant(\"T_UNSET\")]\r\n\t\t\tT_UNSET = CoreTokens.T_UNSET,\r\n\t\t\t[ImplementsConstant(\"T_ISSET\")]\r\n\t\t\tT_ISSET = CoreTokens.T_ISSET,\r\n\t\t\t[ImplementsConstant(\"T_EMPTY\")]\r\n\t\t\tT_EMPTY = CoreTokens.T_EMPTY,\r\n\t\t\t[ImplementsConstant(\"T_HALT_COMPILER\")]\r\n\t\t\tT_HALT_COMPILER = 351, // Unused\r\n\t\t\t[ImplementsConstant(\"T_CLASS\")]\r\n\t\t\tT_CLASS = CoreTokens.T_CLASS,\r\n\t\t\t[ImplementsConstant(\"T_INTERFACE\")]\r\n\t\t\tT_INTERFACE = CoreTokens.T_INTERFACE,\r\n\t\t\t[ImplementsConstant(\"T_EXTENDS\")]\r\n\t\t\tT_EXTENDS = CoreTokens.T_EXTENDS,\r\n\t\t\t[ImplementsConstant(\"T_IMPLEMENTS\")]\r\n\t\t\tT_IMPLEMENTS = CoreTokens.T_IMPLEMENTS,\r\n\t\t\t[ImplementsConstant(\"T_OBJECT_OPERATOR\")]\r\n\t\t\tT_OBJECT_OPERATOR = CoreTokens.T_OBJECT_OPERATOR,\r\n\t\t\t[ImplementsConstant(\"T_DOUBLE_ARROW\")]\r\n\t\t\tT_DOUBLE_ARROW = CoreTokens.T_DOUBLE_ARROW,\r\n\t\t\t[ImplementsConstant(\"T_LIST\")]\r\n\t\t\tT_LIST = CoreTokens.T_LIST,\r\n\t\t\t[ImplementsConstant(\"T_ARRAY\")]\r\n\t\t\tT_ARRAY = CoreTokens.T_ARRAY,\r\n\t\t\t[ImplementsConstant(\"T_CLASS_C\")]\r\n\t\t\tT_CLASS_C = CoreTokens.T_CLASS_C,\r\n\t\t\t[ImplementsConstant(\"T_METHOD_C\")]\r\n\t\t\tT_METHOD_C = CoreTokens.T_METHOD_C,\r\n\t\t\t[ImplementsConstant(\"T_FUNC_C\")]\r\n\t\t\tT_FUNC_C = CoreTokens.T_FUNC_C,\r\n\t\t\t[ImplementsConstant(\"T_LINE\")]\r\n\t\t\tT_LINE = CoreTokens.T_LINE,\r\n\t\t\t[ImplementsConstant(\"T_FILE\")]\r\n\t\t\tT_FILE = CoreTokens.T_FILE,\r\n\t\t\t[ImplementsConstant(\"T_COMMENT\")]\r\n\t\t\tT_COMMENT = CoreTokens.T_COMMENT,\r\n\t\t\t[ImplementsConstant(\"T_DOC_COMMENT\")]\r\n\t\t\tT_DOC_COMMENT = CoreTokens.T_DOC_COMMENT,\r\n\t\t\t[ImplementsConstant(\"T_OPEN_TAG\")]\r\n\t\t\tT_OPEN_TAG = CoreTokens.T_OPEN_TAG,\r\n\t\t\t[ImplementsConstant(\"T_OPEN_TAG_WITH_ECHO\")]\r\n\t\t\tT_OPEN_TAG_WITH_ECHO = CoreTokens.T_OPEN_TAG_WITH_ECHO,\r\n\t\t\t[ImplementsConstant(\"T_CLOSE_TAG\")]\r\n\t\t\tT_CLOSE_TAG = CoreTokens.T_CLOSE_TAG,\r\n\t\t\t[ImplementsConstant(\"T_WHITESPACE\")]\r\n\t\t\tT_WHITESPACE = CoreTokens.T_WHITESPACE,\r\n\t\t\t[ImplementsConstant(\"T_START_HEREDOC\")]\r\n\t\t\tT_START_HEREDOC = CoreTokens.T_START_HEREDOC,\r\n\t\t\t[ImplementsConstant(\"T_END_HEREDOC\")]\r\n\t\t\tT_END_HEREDOC = CoreTokens.T_END_HEREDOC,\r\n\t\t\t[ImplementsConstant(\"T_DOLLAR_OPEN_CURLY_BRACES\")]\r\n\t\t\tT_DOLLAR_OPEN_CURLY_BRACES = CoreTokens.T_DOLLAR_OPEN_CURLY_BRACES,\r\n\t\t\t[ImplementsConstant(\"T_CURLY_OPEN\")]\r\n\t\t\tT_CURLY_OPEN = CoreTokens.T_CURLY_OPEN,\r\n\t\t\t[ImplementsConstant(\"T_DOUBLE_COLON\")]\r\n\t\t\tT_DOUBLE_COLON = CoreTokens.T_DOUBLE_COLON,\r\n\t\t\t[ImplementsConstant(\"T_PAAMAYIM_NEKUDOTAYIM\")]\r\n\t\t\tT_PAAMAYIM_NEKUDOTAYIM = CoreTokens.T_DOUBLE_COLON,  // Duplicate\r\n            [ImplementsConstant(\"T_DIR\")]\r\n            T_DIR = CoreTokens.T_DIR,\r\n            [ImplementsConstant(\"T_GOTO\")]\r\n            T_GOTO = CoreTokens.T_GOTO,\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region token_get_all, token_name\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tokenize a source source and returns a list of tokens.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Array of items that are either token string values of for unnamed tokens\r\n\t\t/// or arrays comprising of token id and token string value.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"token_get_all\")]\r\n\t\tpublic static PhpArray GetAllTokens(string sourceCode)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tTokenizer tokenizer = new Tokenizer(new StringReader(sourceCode));\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tCoreTokens token = tokenizer.GetNextToken();\r\n\t\t\t\tif (token == CoreTokens.ERROR)\r\n\t\t\t\t{\r\n\t\t\t\t\ttoken = CoreTokens.T_STRING;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (token == CoreTokens.EOF) break;\r\n\r\n\t\t\t\tif (Tokenizer.IsCharToken(token))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Add(tokenizer.TokenText);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArray item = new PhpArray();\r\n\t\t\t\t\titem.Add((int)token);\r\n\t\t\t\t\titem.Add(tokenizer.TokenText);\r\n\t\t\t\t\tresult.Add(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the name of the PHP grammar token.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"token\">The token id.</param>\r\n\t\t/// <returns>The token name.</returns>\r\n\t\t[ImplementsFunction(\"token_name\")]\r\n\t\tpublic static string GetTokenName(Tokens token)\r\n\t\t{\r\n\t\t\treturn token.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Process.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing Process = System.Diagnostics.Process;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region PhpProcessHandle\r\n\r\n\tpublic class PhpProcessHandle : PhpResource\r\n\t{\r\n\t\tpublic Process/*!*/ Process { get { return process; } }\r\n\t\tprivate Process/*!*/ process;\r\n\r\n\t\tpublic string/*!*/ Command { get { return command; } }\r\n\t\tprivate string/*!*/ command;\r\n\r\n\t\tinternal PhpProcessHandle(Process/*!*/ process, string/*!*/ command)\r\n\t\t\t: base(\"process\")\r\n\t\t{\r\n\t\t\tDebug.Assert(process != null && command != null);\r\n\t\t\tthis.process = process;\r\n\t\t\tthis.command = command;\r\n\t\t}\r\n\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\tprocess.Close();\r\n\t\t\tbase.FreeManaged();\r\n\t\t}\r\n\r\n\t\tinternal static PhpProcessHandle Validate(PhpResource resource)\r\n\t\t{\r\n\t\t\tPhpProcessHandle result = resource as PhpProcessHandle;\r\n\r\n\t\t\tif (result == null || !result.IsValid)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_process_resource\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\tpublic static class Processes\r\n\t{\r\n\t\t#region popen, pclose\r\n\r\n\t\tprivate sealed class ProcessWrapper : StreamWrapper\r\n\t\t{\r\n\t\t\tpublic Process/*!*/ process;\r\n\r\n\t\t\tpublic ProcessWrapper(Process/*!*/ process)\r\n\t\t\t{\r\n\t\t\t\tthis.process = process;\r\n\t\t\t}\r\n\r\n\t\t\tpublic override bool IsUrl { get { return false; } }\r\n\t\t\tpublic override string Label { get { return null; } }\r\n\t\t\tpublic override string Scheme { get { return null; } }\r\n\r\n\t\t\tpublic override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Starts a process and creates a pipe to its standard input or output.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command.</param>\r\n\t\t/// <param name=\"mode\">Pipe open mode (<c>\"r\"</c> or <c>\"w\"</c>).</param>\r\n\t\t/// <returns>Opened pipe or <B>null</B> on error.</returns>\r\n\t\t[ImplementsFunction(\"popen\")]\r\n\t\tpublic static PhpResource OpenPipe(string command, string mode)\r\n\t\t{\r\n\t\t\tif (String.IsNullOrEmpty(mode))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_file_mode\", mode));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tbool read = mode[0] == 'r';\r\n\t\t\tbool write = mode[0] == 'w' || mode[0] == 'a' || mode[0] == 'x';\r\n\r\n\t\t\tif (!read && !write)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_file_mode\", mode));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tProcess process = CreateProcessExecutingCommand(ref command, false);\r\n\t\t\tif (process == null) return null;\r\n\r\n\t\t\tprocess.StartInfo.RedirectStandardOutput = read;\r\n\t\t\tprocess.StartInfo.RedirectStandardInput = write;\r\n\r\n\t\t\tif (!StartProcess(process, true))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tStream stream = (read) ? process.StandardOutput.BaseStream : process.StandardInput.BaseStream;\r\n\t\t\tStreamAccessOptions access = (read) ? StreamAccessOptions.Read : StreamAccessOptions.Write;\r\n\t\t\tProcessWrapper wrapper = new ProcessWrapper(process);\r\n\t\t\tPhpStream php_stream = new NativeStream(stream, wrapper, access, String.Empty, StreamContext.Default);\r\n\r\n\t\t\treturn php_stream;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes a pipe and a process opened by <see cref=\"OpenPipe\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pipeHandle\">The pipe handle returned by <see cref=\"OpenPipe\"/>.</param>\r\n\t\t/// <returns>An exit code of the process.</returns>\r\n\t\t[ImplementsFunction(\"pclose\")]\r\n\t\tpublic static int ClosePipe(PhpResource pipeHandle)\r\n\t\t{\r\n\t\t\tPhpStream php_stream = PhpStream.GetValid(pipeHandle);\r\n\t\t\tif (php_stream == null) return -1;\r\n\r\n\t\t\tProcessWrapper wrapper = php_stream.Wrapper as ProcessWrapper;\r\n\t\t\tif (wrapper == null) return -1;\r\n\r\n\t\t\tvar code = CloseProcess(wrapper.process);\r\n            php_stream.Close();\r\n            return code;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region proc_open\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a process.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"proc_open\")]\r\n\t\tpublic static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes)\r\n\t\t{\r\n\t\t\treturn Open(command, descriptorSpec, out pipes, null, null, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a process.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"proc_open\")]\r\n\t\tpublic static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes,\r\n\t\t  string workingDirectory)\r\n\t\t{\r\n\t\t\treturn Open(command, descriptorSpec, out pipes, workingDirectory, null, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a process.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"proc_open\")]\r\n\t\tpublic static PhpResource Open(string command, PhpArray descriptorSpec, out PhpArray pipes,\r\n\t\t  string workingDirectory, PhpArray envVariables)\r\n\t\t{\r\n\t\t\treturn Open(command, descriptorSpec, out pipes, workingDirectory, envVariables, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Starts a process and otpionally redirects its input/output/error streams to specified PHP streams.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\"></param>\r\n\t\t/// <param name=\"descriptors\"></param>\r\n\t\t/// Indexed array where the key represents the descriptor number (0 for STDIN, 1 for STDOUT, 2 for STDERR)\r\n\t\t/// and the value represents how to pass that descriptor to the child process. \r\n\t\t/// A descriptor is either an opened file resources or an integer indexed arrays \r\n\t\t/// containing descriptor name followed by options. Supported descriptors:\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <term><c>array(\"pipe\",{mode})</c></term><description>Pipe is opened in the specified mode .</description>\r\n\t\t/// <term><c>array(\"file\",{path},{mode})</c></term><description>The file is opened in the specified mode.</description>\r\n\t\t/// </list>\r\n\t\t/// <param name=\"pipes\">\r\n\t\t/// Set to indexed array of file resources corresponding to the current process's ends of created pipes.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"workingDirectory\">\r\n\t\t/// Working directory.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"envVariables\"></param>\r\n\t\t/// <param name=\"options\">\r\n\t\t/// Associative array containing following key-value pairs.\r\n\t\t///   <list type=\"bullet\">\r\n\t\t///     <term>\"suppress_errors\"</term><description></description>\r\n\t\t///   </list>\r\n\t\t/// </param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the process.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"proc_open\")]\r\n\t\tpublic static PhpResource Open(string command, PhpArray descriptors, out PhpArray pipes,\r\n\t\t  string workingDirectory, PhpArray envVariables, PhpArray options)\r\n\t\t{\r\n\t\t\tif (descriptors == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"descriptors\");\r\n\t\t\t\tpipes = null;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tpipes = new PhpArray();\r\n\t\t\tPhpResource result = Open(command, descriptors, pipes, workingDirectory, envVariables, options);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a process.\r\n\t\t/// </summary>\r\n\t\tprivate static PhpResource Open(string command, PhpArray/*!*/ descriptors, PhpArray/*!*/ pipes,\r\n          string workingDirectory, PhpArray envVariables, PhpArray options)\r\n\t\t{\r\n\t\t\tif (descriptors == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"descriptors\");\r\n\t\t\tif (pipes == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"pipes\");\r\n\r\n            bool bypass_shell = options != null && Core.Convert.ObjectToBoolean(options[\"bypass_shell\"]);   // quiet\r\n\r\n            Process process = CreateProcessExecutingCommand(ref command, bypass_shell);\r\n\t\t\tif (process == null)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tif (!SetupStreams(process, descriptors))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tif (envVariables != null)\r\n\t\t\t\tSetupEnvironment(process, envVariables);\r\n\r\n\t\t\tif (workingDirectory != null)\r\n\t\t\t\tprocess.StartInfo.WorkingDirectory = workingDirectory;\r\n\r\n\t\t\tbool suppress_errors = false;\r\n\r\n\t\t\tif (options != null)\r\n\t\t\t{\r\n\t\t\t\tsuppress_errors = Core.Convert.ObjectToBoolean(options[\"suppress_errors\"]);\r\n\t\t\t}\r\n\r\n\t\t\tif (!StartProcess(process, !suppress_errors))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tif (!RedirectStreams(process, descriptors, pipes))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn new PhpProcessHandle(process, command);\r\n\t\t}\r\n\r\n        private const string CommandLineSplitterPattern = @\"(?<filename>^\"\"[^\"\"]*\"\"|\\S*) *(?<arguments>.*)?\";\r\n        private static readonly System.Text.RegularExpressions.Regex/*!*/CommandLineSplitter = new System.Text.RegularExpressions.Regex(CommandLineSplitterPattern, System.Text.RegularExpressions.RegexOptions.Singleline);\r\n\r\n        private static Process CreateProcessExecutingCommand(ref string command, bool bypass_shell)\r\n\t\t{\r\n\t\t\tif (!Execution.MakeCommandSafe(ref command))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tProcess process = new Process();\r\n\r\n            if (bypass_shell)\r\n            {\r\n                var match = CommandLineSplitter.Match(command);\r\n                if (match == null || !match.Success)\r\n                {\r\n                    PhpException.InvalidArgument(\"command\");\r\n                    return null;\r\n                }\r\n                \r\n                process.StartInfo.FileName = match.Groups[\"filename\"].Value;\r\n                process.StartInfo.Arguments = match.Groups[\"arguments\"].Value;\r\n            }\r\n            else\r\n            {\r\n                process.StartInfo.FileName = (Environment.OSVersion.Platform != PlatformID.Win32Windows) ? \"cmd.exe\" : \"command.com\";\r\n                process.StartInfo.Arguments = \"/c \" + command;\r\n            }\r\n\t\t\tprocess.StartInfo.UseShellExecute = false;\r\n            process.StartInfo.WorkingDirectory = ScriptContext.CurrentContext.WorkingDirectory;\r\n\r\n\t\t\treturn process;\r\n\t\t}\r\n\r\n\t\tprivate static bool StartProcess(Process/*!*/ process, bool reportError)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tprocess.Start();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tif (reportError)\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"error_starting_process\", e.Message));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static void SetupEnvironment(Process/*!*/ process, IDictionary/*!*/ envVariables)\r\n\t\t{\r\n\t\t\tforeach (DictionaryEntry entry in envVariables)\r\n\t\t\t{\r\n\t\t\t\tstring s = entry.Key as string;\r\n\t\t\t\tif (s != null)\r\n\t\t\t\t\tprocess.StartInfo.EnvironmentVariables.Add(s, Core.Convert.ObjectToString(entry.Value));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static bool SetupStreams(Process/*!*/ process, IDictionary/*!*/ descriptors)\r\n\t\t{\r\n\t\t\tforeach (DictionaryEntry entry in descriptors)\r\n\t\t\t{\r\n\t\t\t\t// key must be an integer:\r\n\t\t\t\tif (!(entry.Key is int))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"argument_not_integer_indexed_array\", \"descriptors\"));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint desc_no = (int)entry.Key;\r\n\r\n\t\t\t\tswitch (desc_no)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 0: process.StartInfo.RedirectStandardInput = true; break;\r\n\t\t\t\t\tcase 1: process.StartInfo.RedirectStandardOutput = true; break;\r\n\t\t\t\t\tcase 2: process.StartInfo.RedirectStandardError = true; break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_unsupported\", desc_no));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n        private static bool RedirectStreams(Process/*!*/ process, PhpArray/*!*/ descriptors, PhpArray/*!*/ pipes)\r\n\t\t{\r\n\t\t\tusing (var descriptors_enum = descriptors.GetFastEnumerator())\r\n            while (descriptors_enum.MoveNext())\r\n\t\t\t{\r\n                int desc_no = descriptors_enum.CurrentKey.Integer;\r\n\r\n\t\t\t\tStreamAccessOptions access;\r\n\t\t\t\tStream stream;\r\n\t\t\t\tswitch (desc_no)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 0: stream = process.StandardInput.BaseStream; access = StreamAccessOptions.Write; break;\r\n\t\t\t\t\tcase 1: stream = process.StandardOutput.BaseStream; access = StreamAccessOptions.Read; break;\r\n\t\t\t\t\tcase 2: stream = process.StandardError.BaseStream; access = StreamAccessOptions.Read; break;\r\n\t\t\t\t\tdefault: Debug.Fail(null); return false;\r\n\t\t\t\t}\r\n\r\n                object value = PhpVariable.Dereference(descriptors_enum.CurrentValue);\r\n                PhpResource resource;\r\n\t\t\t\tPhpArray array;\r\n                \r\n                if ((array = PhpArray.AsPhpArray(value)) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!array.Contains(0))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// value must be either a resource or an array:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_item_missing_qualifier\", desc_no));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstring qualifier = Core.Convert.ObjectToString(array[0]);\r\n\r\n\t\t\t\t\tswitch (qualifier)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"pipe\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// mode is ignored (it's determined by the stream):\r\n\t\t\t\t\t\t\t\tPhpStream php_stream = new NativeStream(stream, null, access, String.Empty, StreamContext.Default);\r\n\t\t\t\t\t\t\t\tpipes.Add(desc_no, php_stream);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase \"file\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (!array.Contains(1))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_item_missing_file_name\", desc_no));\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (!array.Contains(2))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_item_missing_mode\", desc_no));\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tstring path = Core.Convert.ObjectToString(array[1]);\r\n\t\t\t\t\t\t\t\tstring mode = Core.Convert.ObjectToString(array[2]);\r\n\r\n\t\t\t\t\t\t\t\tPhpStream php_stream = PhpStream.Open(path, mode, StreamOpenOptions.Empty, StreamContext.Default);\r\n\t\t\t\t\t\t\t\tif (php_stream == null)\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t\t\t\tif (!ActivePipe.BeginIO(stream, php_stream, access, desc_no)) return false;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_handle_qualifier\", qualifier));\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n                else if ((resource = value as PhpResource) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStream php_stream = PhpStream.GetValid(resource);\r\n\t\t\t\t\tif (php_stream == null) return false;\r\n\r\n\t\t\t\t\tif (!ActivePipe.BeginIO(stream, php_stream, access, desc_no)) return false;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// value must be either a resource or an array:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_item_not_array_nor_resource\", desc_no));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate sealed class ActivePipe\r\n\t\t{\r\n\t\t\tprivate const int BufferSize = 1024;\r\n\r\n\t\t\tStream stream;\r\n\t\t\tStreamAccessOptions access;\r\n\t\t\tPhpStream phpStream;\r\n\t\t\tpublic AsyncCallback callback;\r\n\t\t\tpublic PhpBytes buffer;\r\n\r\n\t\t\tpublic static bool BeginIO(Stream stream, PhpStream phpStream, StreamAccessOptions access, int desc_no)\r\n\t\t\t{\r\n\t\t\t\tif (access == StreamAccessOptions.Read && !phpStream.CanWrite ||\r\n\t\t\t\t  access == StreamAccessOptions.Write && !phpStream.CanRead)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"descriptor_item_invalid_mode\", desc_no));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tActivePipe pipe = new ActivePipe();\r\n\t\t\t\tpipe.stream = stream;\r\n\t\t\t\tpipe.phpStream = phpStream;\r\n\t\t\t\tpipe.access = access;\r\n\t\t\t\tpipe.callback = new AsyncCallback(pipe.Callback);\r\n\r\n\t\t\t\tif (access == StreamAccessOptions.Read)\r\n\t\t\t\t{\r\n                    var buffer = new byte[BufferSize];\r\n                    stream.BeginRead(buffer, 0, buffer.Length, pipe.callback, null);\r\n                    pipe.buffer = new PhpBytes(buffer);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpipe.buffer = phpStream.ReadBytes(BufferSize);\r\n\t\t\t\t\tif (pipe.buffer != null)\r\n\t\t\t\t\t\tstream.BeginWrite(pipe.buffer.ReadonlyData, 0, pipe.buffer.Length, pipe.callback, null);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tstream.Close();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tprivate void Callback(IAsyncResult ar)\r\n\t\t\t{\r\n\t\t\t\tif (access == StreamAccessOptions.Read)\r\n\t\t\t\t{\r\n\t\t\t\t\tint count = stream.EndRead(ar);\r\n\t\t\t\t\tif (count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (count != buffer.Length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// TODO: improve streams\r\n\t\t\t\t\t\t\tvar buf = new byte[count];\r\n\t\t\t\t\t\t\tBuffer.BlockCopy(buffer.ReadonlyData, 0, buf, 0, count);\r\n\t\t\t\t\t\t\tphpStream.WriteBytes(new PhpBytes(buf));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tphpStream.WriteBytes(buffer);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstream.BeginRead(buffer.Data, 0, buffer.Length, callback, ar.AsyncState);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstream.Close();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tbuffer = phpStream.ReadBytes(BufferSize);\r\n\t\t\t\t\tif (buffer != null)\r\n\t\t\t\t\t{\r\n                        stream.BeginWrite(buffer.ReadonlyData, 0, buffer.Length, callback, ar.AsyncState);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstream.EndWrite(ar);\r\n\t\t\t\t\t\tstream.Close();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region proc_close, proc_get_status, proc_terminate\r\n\r\n\t\t[ImplementsFunction(\"proc_close\")]\r\n\t\tpublic static int Close(PhpResource process)\r\n\t\t{\r\n\t\t\tPhpProcessHandle handle = PhpProcessHandle.Validate(process);\r\n\t\t\tif (handle == null) return -1;\r\n\r\n            var code = CloseProcess(handle.Process);\r\n            handle.Close();\r\n            return code;\r\n\t\t}\r\n\r\n\t\tprivate static int CloseProcess(Process/*!*/ process)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tprocess.WaitForExit();\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"error_waiting_for_process_exit\", e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\treturn process.ExitCode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"process\"></param>\r\n\t\t/// <returns>\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <term>\"command\"</term><description>The command string that was passed to proc_open()</description> \r\n\t\t/// <term>\"pid\"</term><description>process id</description>\r\n\t\t/// <term>\"running\"</term><description>TRUE if the process is still running, FALSE if it has terminated</description>  \r\n\t\t/// <term>\"signaled\"</term><description>TRUE if the child process has been terminated by an uncaught signal. Always set to FALSE on Windows.</description>\r\n\t\t/// <term>\"stopped\"</term><description>TRUE if the child process has been stopped by a signal. Always set to FALSE on Windows.</description>  \r\n\t\t/// <term>\"exitcode\"</term><description>the exit code returned by the process (which is only meaningful if running is FALSE)</description>  \r\n\t\t/// <term>\"termsig\"</term><description>the number of the signal that caused the child process to terminate its execution (only meaningful if signaled is TRUE)</description>  \r\n\t\t/// <term>\"stopsig\"</term><description>the number of the signal that caused the child process to stop its execution (only meaningful if stopped is TRUE)</description>  \r\n\t\t/// </list>\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"proc_get_status\")]\r\n\t\tpublic static PhpArray GetStatus(PhpResource process)\r\n\t\t{\r\n\t\t\tPhpProcessHandle handle = PhpProcessHandle.Validate(process);\r\n\t\t\tif (handle == null) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray(0, 8);\r\n\r\n\t\t\tresult.Add(\"command\", handle.Command);\r\n\t\t\tresult.Add(\"pid\", handle.Process.Id);\r\n\t\t\tresult.Add(\"running\", !handle.Process.HasExited);\r\n\t\t\tresult.Add(\"signaled\", false); // UNIX\r\n\t\t\tresult.Add(\"stopped\", false);  // UNIX\r\n\t\t\tresult.Add(\"exitcode\", handle.Process.HasExited ? handle.Process.ExitCode : -1);\r\n\t\t\tresult.Add(\"termsig\", 0);      // UNIX\r\n\t\t\tresult.Add(\"stopsig\", 0);      // UNIX\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"proc_terminate\")]\r\n\t\tpublic static int Terminate(PhpResource process)\r\n\t\t{\r\n\t\t\treturn Terminate(process, 255);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"proc_terminate\")]\r\n\t\tpublic static int Terminate(PhpResource process, int signal)\r\n\t\t{\r\n\t\t\tPhpProcessHandle handle = PhpProcessHandle.Validate(process);\r\n\t\t\tif (handle == null) return -1;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\thandle.Process.Kill();\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"error_terminating_process\",\r\n\t\t\t\t  handle.Process.ProcessName, handle.Process.Id, e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\treturn handle.Process.ExitCode;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: proc_nice\r\n\r\n\t\t[ImplementsFunction(\"proc_nice\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool SetPriority(int priority)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();    // even in PHP for Windows, it is not available\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/RegExpPerl.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Pavel Novak and Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n  TODO: preg_match - unmatched groups should be empty only if they are not followed by matched one (isn't it PHP bug?)\r\n  TODO: preg_last_error - Returns the error code of the last PCRE regex execution\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Text.RegularExpressions;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// Perl regular expression specific options that are not captured by .NET <see cref=\"RegexOptions\"/> or by\r\n    /// transformation of the regular expression itself.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum PerlRegexOptions\r\n    {\r\n        None = 0,\r\n        Evaluate = 1,\r\n        Ungreedy = 2,\r\n        Anchored = 4,\r\n        DollarMatchesEndOfStringOnly = 8,\r\n        UTF8 = 16\r\n    }\r\n\r\n    /// <summary>\r\n    /// Implements PERL extended regular expressions as they are implemented in PHP.\r\n    /// </summary>\r\n    /// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtPcre)]\r\n    public static class PerlRegExp\r\n    {\r\n        #region preg_last_error\r\n\r\n        public enum PregError\r\n        {\r\n            [ImplementsConstant(\"PREG_NO_ERROR\")]\r\n            NoError = 0,\r\n            [ImplementsConstant(\"PREG_INTERNAL_ERROR\")]\r\n            InternalError = 1,\r\n            [ImplementsConstant(\"PREG_BACKTRACK_LIMIT_ERROR\")]\r\n            BacktrackLimitError = 2,\r\n            [ImplementsConstant(\"PREG_RECURSION_LIMIT_ERROR\")]\r\n            RecursionLimitError = 3,\r\n            [ImplementsConstant(\"PREG_BAD_UTF8_ERROR\")]\r\n            BadUtf8Error = 4,\r\n            [ImplementsConstant(\"PREG_BAD_UTF8_OFFSET_ERROR\")]\r\n            BadUtf8OffsetError = 5\r\n        }\r\n\r\n        public enum PregConst\r\n        {\r\n            [ImplementsConstant(\"PREG_PATTERN_ORDER\")]\r\n            PatternOrder = 1,\r\n            [ImplementsConstant(\"PREG_SET_ORDER\")]\r\n            SetOrder = 2,\r\n            [ImplementsConstant(\"PREG_OFFSET_CAPTURE\")]\r\n            OffsetCapture = 1 << 8,\r\n            [ImplementsConstant(\"PREG_SPLIT_NO_EMPTY\")]\r\n            SplitNoEmpty = 1 << 0,\r\n            [ImplementsConstant(\"PREG_SPLIT_DELIM_CAPTURE\")]\r\n            SplitDelimCapture = 1 << 1,\r\n            [ImplementsConstant(\"PREG_SPLIT_OFFSET_CAPTURE\")]\r\n            SplitOffsetCapture = 1 << 2,\r\n            [ImplementsConstant(\"PREG_REPLACE_EVAL\")]\r\n            ReplaceEval = 1 << 0,\r\n            [ImplementsConstant(\"PREG_GREP_INVERT\")]\r\n            GrepInvert = 1 << 0,\r\n        }\r\n\r\n        [ImplementsFunction(\"preg_last_error\")]\r\n        public static int LastError()\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n        #region preg_quote\r\n\r\n        /// <summary>\r\n        /// <para>Escapes all characters that have special meaning in regular expressions. These characters are\r\n        /// . \\\\ + * ? [ ^ ] $ ( ) { } = ! &lt; &gt; | :</para>\r\n        /// </summary>\r\n        /// <param name=\"str\">String with characters to escape.</param>\r\n        /// <returns>String with escaped characters.</returns>\r\n        [ImplementsFunction(\"preg_quote\")]\r\n        [PureFunction]\r\n        public static string Quote(string str)\r\n        {\r\n            return Quote(str, '\\0', false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Escapes all characters that have special meaning in regular expressions. These characters are\r\n        /// . \\\\ + * ? [ ^ ] $ ( ) { } = ! &lt; &gt; | : plus <paramref name=\"delimiter\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"str\">String with characters to escape.</param>\r\n        /// <param name=\"delimiter\">Character to escape in additon to general special characters.</param>\r\n        /// <returns>String with escaped characters.</returns>\r\n        [ImplementsFunction(\"preg_quote\")]\r\n        [PureFunction]\r\n        public static string Quote(string str, string delimiter)\r\n        {\r\n            bool delimiter_used = true;\r\n            if (delimiter == null || delimiter.Length == 0)\r\n                delimiter_used = false;\r\n\r\n            return Quote(str, delimiter_used ? delimiter[0] : '\\0', delimiter_used);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Escapes all characters with special meaning in Perl regular expressions and char\r\n        /// <paramref name=\"delimiter\"/>.\r\n        /// </summary>\r\n        /// <param name=\"str\">String to quote.</param>\r\n        /// <param name=\"delimiter\">Additional character to quote.</param>\r\n        /// <param name=\"delimiterUsed\">Whether the delimiter should be quoted.</param>\r\n        /// <returns>String with quoted characters.</returns>\r\n        internal static string Quote(string str, char delimiter, bool delimiterUsed)\r\n        {\r\n            if (str == null)\r\n                return null;\r\n\r\n            StringBuilder result = new StringBuilder();\r\n\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                bool escape = false;\r\n\r\n                if (delimiterUsed && str[i] == delimiter)\r\n                    escape = true;\r\n                else\r\n                    // switch only if true is not set already\r\n                    switch (str[i])\r\n                    {\r\n                        case '\\\\':\r\n                        case '+':\r\n                        case '*':\r\n                        case '?':\r\n                        case '[':\r\n                        case '^':\r\n                        case ']':\r\n                        case '$':\r\n                        case '(':\r\n                        case ')':\r\n                        case '{':\r\n                        case '}':\r\n                        case '=':\r\n                        case '!':\r\n                        case '<':\r\n                        case '>':\r\n                        case '|':\r\n                        case ':':\r\n                        case '.':\r\n                            escape = true;\r\n                            break;\r\n                    }\r\n\r\n                if (escape)\r\n                    result.Append('\\\\');\r\n\r\n                result.Append(str[i]);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region preg_grep\r\n\r\n        /// <summary>\r\n        /// Flags for Grep functions.\r\n        /// </summary>\r\n        [Flags]\r\n        public enum GrepFlags\r\n        {\r\n            None = 0,\r\n            [ImplementsConstant(\"PREG_GREP_INVERT\")]\r\n            GrepInvert = 1\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the array consisting of the elements of the <paramref name=\"input\"/> array that match\r\n        /// the given <paramref name=\"pattern\"/>.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Pattern to be matched against each array element.</param>\r\n        /// <param name=\"input\">Array of strings to match.</param>\r\n        /// <returns>Array containing only values from <paramref name=\"input\"/> that match <paramref name=\"pattern\"/>\r\n        /// </returns>\r\n        [ImplementsFunction(\"preg_grep\")]\r\n        public static PhpArray Grep(object pattern, PhpArray input)\r\n        {\r\n            return Grep(pattern, input, GrepFlags.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Returns the array consisting of the elements of the <paramref name=\"input\"/> array that match\r\n        /// the given <paramref name=\"pattern\"/>.</para>\r\n        /// <para>If <see cref=\"GrepFlags.GrepInvert\"/> flag is specified, resulting array will contain\r\n        /// elements that do not match the <paramref name=\"pattern\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Pattern to be matched against each array element.</param>\r\n        /// <param name=\"input\">Array of strings to match.</param>\r\n        /// <param name=\"flags\">Flags modifying which elements contains resulting array.</param>\r\n        /// <returns>Array containing only values from <paramref name=\"input\"/> that match <paramref name=\"pattern\"/>.\r\n        /// (Or do not match according to <paramref name=\"flags\"/> specified.)</returns>\r\n        [ImplementsFunction(\"preg_grep\")]\r\n        public static PhpArray Grep(object pattern, PhpArray input, GrepFlags flags)\r\n        {\r\n            if (input == null)\r\n                return null;\r\n\r\n            PerlRegExpConverter converter = ConvertPattern(pattern, null);\r\n            if (converter == null) return null;\r\n\r\n            PhpArray result = new PhpArray();\r\n            foreach (KeyValuePair<IntStringKey, object> entry in input)\r\n            {\r\n                string str = ConvertData(entry.Value, converter);\r\n                Match m = converter.Regex.Match(str);\r\n\r\n                // move a copy to return array if success and not invert or\r\n                // not success and invert\r\n                if (m.Success ^ (flags & GrepFlags.GrepInvert) != 0)\r\n                    result.Add(entry.Key, str);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region preg_match, preg_match_all\r\n\r\n        /// <summary>\r\n        /// Flags for Match function family.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// MatchFlags used by pre_match PHP functions is a hybrid enumeration.\r\n        /// PatternOrder and SetOrder flags are mutually exclusive but OffsetCapture may be added by bitwise | operator.\r\n        /// Moreover, PatternOrder is a default value used by these functions, so it can be equal to 0.\r\n        /// (This confusing declaration is done by PHP authors.)\r\n        ///\t</remarks>\r\n        [Flags]\r\n        public enum MatchFlags\r\n        {\r\n            [ImplementsConstant(\"PREG_PATTERN_ORDER\")]\r\n            PatternOrder = 1,\r\n            [ImplementsConstant(\"PREG_SET_ORDER\")]\r\n            SetOrder = 2,\r\n            [ImplementsConstant(\"PREG_OFFSET_CAPTURE\")]\r\n            OffsetCapture = 0x100\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches <paramref name=\"data\"/> for a match to the regular expression given in <paramref name=\"pattern\"/>.\r\n        /// The search is stopped after the first match is found.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression.</param>\r\n        /// <param name=\"data\">String to search.</param>\r\n        /// <returns>0 if there is no match and 1 if the match was found.</returns>\r\n        [ImplementsFunction(\"preg_match\")]\r\n        [return: CastToFalse]\r\n        public static int Match(object pattern, object data)\r\n        {\r\n            PerlRegExpConverter converter = ConvertPattern(pattern, null);\r\n            if (converter == null) return -1;\r\n\r\n            string str = ConvertData(data, converter);\r\n            Match match = converter.Regex.Match(str);\r\n            return match.Success ? 1 : 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for a match to the regular expression given in\r\n        /// <paramref name=\"pattern\"/>. The search is stopped after the first match is found.</para>\r\n        /// <para><paramref name=\"matches\"/> contains an array with matches. At index 0 is the whole string that\r\n        /// matches the <paramref name=\"pattern\"/>, from index 1 are stored matches for parenthesized subpatterns.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression.</param>\r\n        /// <param name=\"data\">String or string of bytes to search.</param>\r\n        /// <param name=\"matches\">Array containing matched strings.</param>\r\n        /// <returns>0 if there is no match and 1 if the match was found.</returns>\r\n        [ImplementsFunction(\"preg_match\")]\r\n        [return: CastToFalse]\r\n        public static int Match(object pattern, object data, out PhpArray matches)\r\n        {\r\n            return Match(pattern, data, out matches, MatchFlags.PatternOrder, 0, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for a match to the regular expression given in\r\n        /// <paramref name=\"pattern\"/>. The search is stopped after the first match is found.</para>\r\n        /// <para><paramref name=\"matches\"/> contains an array with matches. At index 0 is the whole string that\r\n        /// matches the <paramref name=\"pattern\"/>, from index 1 are stored matches for parenthesized subpatterns.</para>\r\n        /// <para>Flag <see cref=\"MatchFlags.OffsetCapture\"/> can be specified and it means that the\r\n        /// <paramref name=\"matches\"/> array will not contain substrings, but another array where the substring\r\n        /// is stored at index [0] and index [1] is its offset in <paramref name=\"data\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression.</param>\r\n        /// <param name=\"data\">String to search.</param>\r\n        /// <param name=\"matches\">Array containing matched strings.</param>\r\n        /// <param name=\"flags\"><see cref=\"MatchFlags\"/>.</param>\r\n        /// <returns>0 if there is no match and 1 if the match was found.</returns>\r\n        [ImplementsFunction(\"preg_match\")]\r\n        [return: CastToFalse]\r\n        public static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags)\r\n        {\r\n            return Match(pattern, data, out matches, flags, 0, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for a match to the regular expression given in\r\n        /// <paramref name=\"pattern\"/>. The search is stopped after the first match is found.</para>\r\n        /// <para><paramref name=\"matches\"/> contains an array with matches. At index 0 is the whole string that\r\n        /// matches the <paramref name=\"pattern\"/>, from index 1 are stored matches for parenthesized subpatterns.</para>\r\n        /// <para>Flag <see cref=\"MatchFlags.OffsetCapture\"/> can be specified and it means that the\r\n        /// <paramref name=\"matches\"/> array will not contain substrings, but another array where the substring\r\n        /// is stored at index [0] and index [1] is its offset in <paramref name=\"data\"/>. <paramref name=\"offset\"/>\r\n        /// specifies where the search should start. (Note that it is not the same as passing a substring of\r\n        /// <paramref name=\"data\"/>.)</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression.</param>\r\n        /// <param name=\"data\">String or string of bytes to search.</param>\r\n        /// <param name=\"matches\">Array containing matched strings.</param>\r\n        /// <param name=\"flags\"><see cref=\"MatchFlags\"/>.</param>\r\n        /// <param name=\"offset\">Offset to <paramref name=\"data\"/> where the match should start.</param>\r\n        /// <returns>0 if there is no match and 1 if the match was found.</returns>\r\n        [ImplementsFunction(\"preg_match\")]\r\n        [return: CastToFalse]\r\n        public static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags, int offset)\r\n        {\r\n            return Match(pattern, data, out matches, flags, offset, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for all matches to the regular expression given in pattern and puts\r\n        /// them in <paramref name=\"matches\"/> array. The matches are sorted in \"Pattern Order\" i. e. at zero\r\n        /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns\r\n        /// for all matches etc.</para>\r\n        /// <para>Next match search starts just after the previous match.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression.</param>\r\n        /// <param name=\"data\">String or string of bytes to search.</param>\r\n        /// <param name=\"matches\">Output array containing matches found.</param>\r\n        /// <returns>Number of whole matches.</returns>\r\n        [ImplementsFunction(\"preg_match_all\")]\r\n        [return: CastToFalse]\r\n        public static int MatchAll(object pattern, object data, out PhpArray matches)\r\n        {\r\n            return Match(pattern, data, out matches, MatchFlags.PatternOrder, 0, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for all matches to the regular expression given in pattern and puts\r\n        /// them in <paramref name=\"matches\"/> array. The matches are sorted in \"Pattern Order\" i. e. at zero\r\n        /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns\r\n        /// for all matches etc.</para>\r\n        /// <para>Next match search starts just after the previous match.</para>\r\n        /// <para>If <see cref=\"MatchFlags.PatternOrder\"/> flag is specified, <paramref name=\"matches\"/> array\r\n        /// contains an array of full pattern matches at index 0, an array of strings matched to\r\n        /// first parenthesized substring at index 1 etc. If <see cref=\"MatchFlags.SetOrder\"/> is set, at index 0 is the first\r\n        /// set of matches (full match and substrings), at index 1 full set for second match etc.</para>\r\n        /// <para>Flag <see cref=\"MatchFlags.OffsetCapture\"/> indicates that instead the matched substring should\r\n        /// be an array containing the substring at index 0 and position at original string at index 1.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression.</param>\r\n        /// <param name=\"data\">String or string of bytes to search.</param>\r\n        /// <param name=\"matches\">Output array containing matches found.</param>\r\n        /// <param name=\"flags\">Flags for specifying order of results in <paramref name=\"matches\"/> array (Set Order,\r\n        /// Pattern Order) and whether positions of matches should be added to results (Offset Capture).</param>\r\n        /// <returns>Number of whole matches.</returns>\r\n        [ImplementsFunction(\"preg_match_all\")]\r\n        [return: CastToFalse]\r\n        public static int MatchAll(object pattern, object data, out PhpArray matches, MatchFlags flags)\r\n        {\r\n            return Match(pattern, data, out matches, flags, 0, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for all matches to the regular expression given in pattern and puts\r\n        /// them in <paramref name=\"matches\"/> array. The matches are sorted in \"Pattern Order\" i. e. at zero\r\n        /// index is an array containing whole matches, at first index is an array containing number 1 subpatterns\r\n        /// for all matches etc.</para>\r\n        /// <para>Next match search starts just after the previous match.</para>\r\n        /// <para>If <see cref=\"MatchFlags.PatternOrder\"/> flag is specified, <paramref name=\"matches\"/> array\r\n        /// contains at index 0 an array of full pattern matches, at index 1 is an array of strings matched to\r\n        /// first parenthesized substring etc. If <see cref=\"MatchFlags.SetOrder\"/> is set, at index 0 is the first\r\n        /// set of matches (full match and substrings), at index 1 full set for second match etc.</para>\r\n        /// <para>Flag <see cref=\"MatchFlags.OffsetCapture\"/> indicates that instead the matched substring should\r\n        /// be an array containing the substring at index 0 and position at original string at index 1.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression.</param>\r\n        /// <param name=\"data\">String or string of bytes to search.</param>\r\n        /// <param name=\"matches\">Output array containing matches found.</param>\r\n        /// <param name=\"flags\">Flags for specifying order of results in <paramref name=\"matches\"/> array (Set Order,\r\n        /// Pattern Order) and whether positions of matches should be added to results (Offset Capture).</param>\r\n        /// <param name=\"offset\">Offset in <paramref name=\"data\"/> where the search should begin. Note that it is\r\n        /// not equal to passing an substring as this parameter because of ^ (start of the string or line) modifier.\r\n        /// </param>\r\n        /// <returns>Number of whole matches.</returns>\r\n        [ImplementsFunction(\"preg_match_all\")]\r\n        [return: CastToFalse]\r\n        public static int MatchAll(object pattern, object data, out PhpArray matches, MatchFlags flags, int offset)\r\n        {\r\n            return Match(pattern, data, out matches, flags, offset, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Private method implementing functions from match family.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression match pattern.</param>\r\n        /// <param name=\"data\">String to search matches.</param>\r\n        /// <param name=\"matches\">An array containing matches found.</param>\r\n        /// <param name=\"flags\">Flags for searching.</param>\r\n        /// <param name=\"offset\">Offset to <paramref name=\"pattern\"/> where the search should start.</param>\r\n        /// <param name=\"matchAll\"><B>True</B> if all matches should be found, <B>false</B> if only the first\r\n        /// is enough.</param>\r\n        /// <returns>Number of times the <paramref name=\"pattern\"/> matches.</returns>\r\n        private static int Match(object pattern, object data, out PhpArray matches, MatchFlags flags,\r\n            int offset, bool matchAll)\r\n        {\r\n            // these two flags together do not make sense\r\n            if ((flags & MatchFlags.PatternOrder) != 0 && (flags & MatchFlags.SetOrder) != 0)\r\n            {\r\n                PhpException.InvalidArgument(\"flags\", LibResources.GetString(\"preg_match_pattern_set_order\"));\r\n                matches = null;\r\n                return -1;\r\n            }\r\n\r\n            PerlRegExpConverter converter = ConvertPattern(pattern, null);\r\n            if (converter == null)\r\n            {\r\n                matches = new PhpArray();\r\n                return -1;\r\n            }\r\n\r\n            string converted = ConvertData(data, converter);\r\n            Match m = converter.Regex.Match(converted, offset > converted.Length ? converted.Length : offset);\r\n\r\n            if ((converter.PerlOptions & PerlRegexOptions.Anchored) > 0 && m.Success && m.Index != offset)\r\n            {\r\n                matches = new PhpArray();\r\n                return -1;\r\n            }\r\n\r\n            if (m.Success)\r\n            {\r\n                if (!matchAll || (flags & MatchFlags.PatternOrder) != 0)\r\n                {\r\n                    matches = new PhpArray(m.Groups.Count);\r\n                }\r\n                else\r\n                    matches = new PhpArray();\r\n\r\n                if (!matchAll)\r\n                {\r\n                    // Preg numbers groups sequentially, both named and unnamed.\r\n                    // .Net only numbers unnamed groups.\r\n                    // So we name unnamed groups (see ConvertRegex) to map correctly.\r\n                    int lastSuccessfulGroupIndex = GetLastSuccessfulGroup(m.Groups);\r\n                    var indexGroups = new List<Group>(m.Groups.Count);\r\n                    var groupNameByIndex = new Dictionary<int, string>(m.Groups.Count);\r\n                    for (int i = 0; i <= lastSuccessfulGroupIndex; i++)\r\n                    {\r\n                        // All groups should be named.\r\n                        var groupName = GetGroupName(converter.Regex, i);\r\n\r\n                        if (!string.IsNullOrEmpty(groupName))\r\n                        {\r\n                            matches[groupName] = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, (flags & MatchFlags.OffsetCapture) != 0);\r\n                        }\r\n\r\n                        matches[i] = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, (flags & MatchFlags.OffsetCapture) != 0);\r\n                    }\r\n\r\n                    return 1;\r\n                }\r\n\r\n                // store all other matches in PhpArray matches\r\n                if ((flags & MatchFlags.SetOrder) != 0) // cannot test PatternOrder, it is 0, SetOrder must be tested\r\n                    return FillMatchesArrayAllSetOrder(converter.Regex, m, ref matches, (flags & MatchFlags.OffsetCapture) != 0);\r\n                else\r\n                    return FillMatchesArrayAllPatternOrder(converter.Regex, m, ref matches, (flags & MatchFlags.OffsetCapture) != 0);\r\n            }\r\n\r\n            // no match has been found\r\n            if (matchAll && (flags & MatchFlags.SetOrder) == 0)\r\n            {\r\n                // in that case PHP returns an array filled with empty arrays according to parentheses count\r\n                matches = new PhpArray(m.Groups.Count);\r\n                for (int i = 0; i < converter.Regex.GetGroupNumbers().Length; i++)\r\n                {\r\n                    AddGroupNameToResult(converter.Regex, matches, i, (ms, groupName) =>\r\n                    {\r\n                        ms[groupName] = new PhpArray(0);\r\n                    });\r\n\r\n                    matches[i] = new PhpArray(0);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                matches = new PhpArray(0); // empty array\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        private static string GetGroupName(Regex regex, int index)\r\n        {\r\n            var groupName = regex.GroupNameFromNumber(index);\r\n            if (groupName.StartsWith(PerlRegExpConverter.AnonymousGroupPrefix))\r\n            {\r\n                // Anonymous groups: remove it altogether. Its purpose was to order it correctly.\r\n                Debug.Assert(groupName.Substring(PerlRegExpConverter.AnonymousGroupPrefix.Length) == index.ToString(CultureInfo.InvariantCulture));\r\n                groupName = string.Empty;\r\n            }\r\n            else\r\n                if (groupName[0] != PerlRegExpConverter.GroupPrefix)\r\n                {\r\n                    // Indexed groups. Leave as-is.\r\n                    Debug.Assert(groupName == index.ToString(CultureInfo.InvariantCulture));\r\n                    groupName = string.Empty;\r\n                }\r\n                else\r\n                {\r\n                    // Named groups: remove prefix.\r\n                    groupName = (groupName[0] == PerlRegExpConverter.GroupPrefix ? groupName.Substring(1) : groupName);\r\n                }\r\n\r\n            return groupName;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region preg_split\r\n\r\n        /// <summary>\r\n        /// Flags for split functions family.\r\n        /// </summary>\r\n        [Flags]\r\n        public enum SplitFlags\r\n        {\r\n            None = 0,\r\n            [ImplementsConstant(\"PREG_SPLIT_NO_EMPTY\")]\r\n            NoEmpty = 1,\r\n            [ImplementsConstant(\"PREG_SPLIT_DELIM_CAPTURE\")]\r\n            DelimCapture = 2,\r\n            [ImplementsConstant(\"PREG_SPLIT_OFFSET_CAPTURE\")]\r\n            OffsetCapture = 4\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits <paramref name=\"data\"/> along boundaries matched by <paramref name=\"pattern\"/> and returns\r\n        /// an array containing substrings.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression to match to boundaries.</param>\r\n        /// <param name=\"data\">String string of bytes to split.</param>\r\n        /// <returns>An array containing substrings.</returns>\r\n        [ImplementsFunction(\"preg_split\")]\r\n        public static PhpArray Split(object pattern, object data)\r\n        {\r\n            return Split(pattern, data, -1, SplitFlags.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Splits <paramref name=\"data\"/> along boundaries matched by <paramref name=\"pattern\"/> and returns\r\n        /// an array containing substrings.</para>\r\n        /// <para><paramref name=\"limit\"/> specifies the maximum number of strings returned in the resulting\r\n        /// array. If (limit-1) matches is found and there remain some characters to match whole remaining\r\n        /// string is returned as the last element of the array.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression to match to boundaries.</param>\r\n        /// <param name=\"data\">String string of bytes to split.</param>\r\n        /// <param name=\"limit\">Max number of elements in the resulting array.</param>\r\n        /// <returns>An array containing substrings.</returns>\r\n        [ImplementsFunction(\"preg_split\")]\r\n        public static PhpArray Split(object pattern, object data, int limit)\r\n        {\r\n            return Split(pattern, data, limit, SplitFlags.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Splits <paramref name=\"data\"/> along boundaries matched by <paramref name=\"pattern\"/> and returns\r\n        /// an array containing substrings.</para>\r\n        /// <para><paramref name=\"limit\"/> specifies the maximum number of strings returned in the resulting\r\n        /// array. If (limit-1) matches is found and there remain some characters to match whole remaining\r\n        /// string is returned as the last element of the array.</para>\r\n        /// <para>Some flags may be specified. <see cref=\"SplitFlags.NoEmpty\"/> means no empty strings will be\r\n        /// in the resulting array. <see cref=\"SplitFlags.DelimCapture\"/> adds also substrings matching\r\n        /// the delimiter and <see cref=\"SplitFlags.OffsetCapture\"/> returns instead substrings the arrays\r\n        /// containing appropriate substring at index 0 and the offset of this substring in original\r\n        /// <paramref name=\"data\"/> at index 1.</para>\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Regular expression to match to boundaries.</param>\r\n        /// <param name=\"data\">String or string of bytes to split.</param>\r\n        /// <param name=\"limit\">Max number of elements in the resulting array.</param>\r\n        /// <param name=\"flags\">Flags affecting the returned array.</param>\r\n        /// <returns>An array containing substrings.</returns>\r\n        [ImplementsFunction(\"preg_split\")]\r\n        public static PhpArray Split(object pattern, object data, int limit, SplitFlags flags)\r\n        {\r\n            if (limit == 0) // 0 does not make sense, php's behavior is as it is -1\r\n                limit = -1;\r\n            if (limit < -1) // for all other negative values it seems that is as limit == 1\r\n                limit = 1;\r\n\r\n            PerlRegExpConverter converter = ConvertPattern(pattern, null);\r\n            if (converter == null) return null;\r\n\r\n            string str = ConvertData(data, converter);\r\n            Match m = converter.Regex.Match(str);\r\n\r\n            bool offset_capture = (flags & SplitFlags.OffsetCapture) != 0;\r\n            PhpArray result = new PhpArray();\r\n            int last_index = 0;\r\n\r\n            while (m.Success && (limit == -1 || --limit > 0) && last_index < str.Length)\r\n            {\r\n                // add part before match\r\n                int length = m.Index - last_index;\r\n                if (length > 0 || (flags & SplitFlags.NoEmpty) == 0)\r\n                    result.Add(NewArrayItem(str.Substring(last_index, length), last_index, offset_capture));\r\n\r\n                if (m.Value.Length > 0)\r\n                {\r\n                    if ((flags & SplitFlags.DelimCapture) != 0) // add all captures but not whole pattern match (start at 1)\r\n                    {\r\n                        List<object> lastUnsucessfulGroups = null;  // value of groups that was not successful since last succesful one\r\n                        for (int i = 1; i < m.Groups.Count; i++)\r\n                        {\r\n                            Group g = m.Groups[i];\r\n                            if (g.Length > 0 || (flags & SplitFlags.NoEmpty) == 0)\r\n                            {\r\n                                // the value to be added into the result:\r\n                                object value = NewArrayItem(g.Value, g.Index, offset_capture);\r\n\r\n                                if (g.Success)\r\n                                {\r\n                                    // group {i} was matched:\r\n                                    // if there was some unsuccesfull matches before, add them now:\r\n                                    if (lastUnsucessfulGroups != null && lastUnsucessfulGroups.Count > 0)\r\n                                    {\r\n                                        foreach (var x in lastUnsucessfulGroups)\r\n                                            result.Add(x);\r\n                                        lastUnsucessfulGroups.Clear();\r\n                                    }\r\n                                    // add the matched group:\r\n                                    result.Add(value);\r\n                                }\r\n                                else\r\n                                {\r\n                                    // The match was unsuccesful, remember all the unsuccesful matches\r\n                                    // and add them only if some succesful match will follow.\r\n                                    // In PHP, unsuccessfully matched groups are trimmed by the end\r\n                                    // (regexp processing stops when other groups cannot be matched):\r\n                                    if (lastUnsucessfulGroups == null) lastUnsucessfulGroups = new List<object>();\r\n                                    lastUnsucessfulGroups.Add(value);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    last_index = m.Index + m.Length;\r\n                }\r\n                else // regular expression match an empty string => add one character\r\n                {\r\n                    // always not empty\r\n                    result.Add(NewArrayItem(str.Substring(last_index, 1), last_index, offset_capture));\r\n                    last_index++;\r\n                }\r\n\r\n                m = m.NextMatch();\r\n            }\r\n\r\n            // add remaining string (might be empty)\r\n            if (last_index < str.Length || (flags & SplitFlags.NoEmpty) == 0)\r\n                result.Add(NewArrayItem(str.Substring(last_index), last_index, offset_capture));\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region preg_replace, preg_replace_callback\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and replaces them\r\n        /// with <paramref name=\"replacement\"/>. <paramref name=\"replacement\"/> may contain backreferences\r\n        /// of the form of <I>\\\\n</I> or <I>$n</I> (second one preferred).</para>\r\n        /// <para>Every parameter may be an unidimensional array of strings. If <paramref name=\"data\"/> is\r\n        /// an array, replacement is done on every element and return value is an array as well. If\r\n        /// <paramref name=\"pattern\"/> and <paramref name=\"replacement\"/> are arrays, the replacements are processed\r\n        /// in the order the keys appear in the array. If only <paramref name=\"pattern\"/> is an array, the\r\n        /// replacement string is used for every key in the <paramref name=\"pattern\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this).</param>\r\n        /// <param name=\"definedVariables\"></param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"replacement\">Replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace\", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)]\r\n        public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary<string, object> definedVariables,\r\n            object pattern, object replacement, object data)\r\n        {\r\n            int count = Int32.MinValue; // disables counting\r\n            return Replace(context, self, definedVariables, pattern, replacement, null, data, -1, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and replaces them\r\n        /// with <paramref name=\"replacement\"/>. <paramref name=\"replacement\"/> may contain backreferences\r\n        /// of the form of <I>\\\\n</I> or <I>$n</I> (second one preferred).</para>\r\n        /// <para>Every parameter may be an unidimensional array of strings. If <paramref name=\"data\"/> is\r\n        /// an array, replacement is done on every element and return value is an array as well. If\r\n        /// <paramref name=\"pattern\"/> and <paramref name=\"replacement\"/> are arrays, the replacements are processed\r\n        /// in the order the keys appear in the array. If only <paramref name=\"pattern\"/> is an array, the\r\n        /// replacement string is used for every key in the <paramref name=\"pattern\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this)</param>\r\n        /// <param name=\"definedVariables\"></param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"replacement\">Replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <param name=\"limit\">Maximum number of matches replaced. (-1 for no limit)</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace\", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)]\r\n        public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary<string, object> definedVariables,\r\n            object pattern, object replacement, object data, int limit)\r\n        {\r\n            int count = Int32.MinValue; // disables counting\r\n            return Replace(context, self, definedVariables, pattern, replacement, null, data, limit, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and replaces them\r\n        /// with <paramref name=\"replacement\"/>. <paramref name=\"replacement\"/> may contain backreferences\r\n        /// of the form of <I>\\\\n</I> or <I>$n</I> (second one preferred).</para>\r\n        /// <para>Every parameter may be an unidimensional array of strings. If <paramref name=\"data\"/> is\r\n        /// an array, replacement is done on every element and return value is an array as well. If\r\n        /// <paramref name=\"pattern\"/> and <paramref name=\"replacement\"/> are arrays, the replacements are processed\r\n        /// in the order the keys appear in the array. If only <paramref name=\"pattern\"/> is an array, the\r\n        /// replacement string is used for every key in the <paramref name=\"pattern\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this)</param>\r\n        /// <param name=\"definedVariables\"></param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"replacement\">Replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <param name=\"limit\">Maximum number of matches replaced. (-1 for no limit)</param>\r\n        /// <param name=\"count\">Number of replacements.</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace\", FunctionImplOptions.CaptureEvalInfo | FunctionImplOptions.NeedsVariables | FunctionImplOptions.NeedsThisReference)]\r\n        public static object Replace(ScriptContext/*!*/context, DObject self, Dictionary<string, object> definedVariables,\r\n            object pattern, object replacement, object data, int limit, out int count)\r\n        {\r\n            count = 0;\r\n            return Replace(context, self, definedVariables, pattern, replacement, null, data, limit, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and the array of matched\r\n        /// strings (full pattern match + parenthesized substrings) is passed to <paramref name=\"callback\"/> which\r\n        /// returns replacement string.</para>\r\n        /// <para><paramref name=\"pattern\"/> and <paramref name=\"data\"/> parameters may be also unidimensional\r\n        /// arrays of strings. For the explanation <see cref=\"Replace\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"callback\">Function called to find out the replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace_callback\")]\r\n        public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data)\r\n        {\r\n            int count = Int32.MinValue; // disables counting;\r\n            return Replace(context, null, null, pattern, null, callback, data, -1, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and the array of matched\r\n        /// strings (full pattern match + parenthesized substrings) is passed to <paramref name=\"callback\"/> which\r\n        /// returns replacement string.</para>\r\n        /// <para><paramref name=\"pattern\"/> and <paramref name=\"data\"/> parameters may be also unidimensional\r\n        /// arrays of strings. For the explanation <see cref=\"Replace\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"callback\">Function called to find out the replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <param name=\"limit\">Maximum number of matches replaced. (-1 for no limit)</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace_callback\")]\r\n        public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data, int limit)\r\n        {\r\n            int count = Int32.MinValue; // disables counting\r\n            return Replace(context, null, null, pattern, null, callback, data, limit, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Searches <paramref name=\"data\"/> for matches to <paramref name=\"pattern\"/> and the array of matched\r\n        /// strings (full pattern match + parenthesized substrings) is passed to <paramref name=\"callback\"/> which\r\n        /// returns replacement string.</para>\r\n        /// <para><paramref name=\"pattern\"/> and <paramref name=\"data\"/> parameters may be also unidimensional\r\n        /// arrays of strings. For the explanation <see cref=\"Replace\"/>.</para>\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Passed by Phalanger runtime, cannot be null.</param>\r\n        /// <param name=\"pattern\">Regular expression to match.</param>\r\n        /// <param name=\"callback\">Function called to find out the replacement string.</param>\r\n        /// <param name=\"data\">String to search for replacements.</param>\r\n        /// <param name=\"limit\">Maximum number of matches replaced. (-1 for no limit)</param>\r\n        /// <param name=\"count\">Number of replacements.</param>\r\n        /// <returns>String or array containing strings with replacement performed.</returns>\r\n        [ImplementsFunction(\"preg_replace_callback\")]\r\n        public static object Replace(ScriptContext/*!*/context, object pattern, PhpCallback callback, object data, int limit, out int count)\r\n        {\r\n            count = 0;\r\n            return Replace(context, null, null, pattern, null, callback, data, limit, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Private mehtod implementing all replace methods. Just one of <paramref name=\"replacement\"/> or <paramref name=\"callback\" /> should be used.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Must not be null.</param>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this)</param>\r\n        /// <param name=\"definedVariables\"></param>\r\n        /// <param name=\"pattern\"></param>\r\n        /// <param name=\"replacement\"></param>\r\n        /// <param name=\"callback\"></param>\r\n        /// <param name=\"data\"></param>\r\n        /// <param name=\"limit\"></param>\r\n        /// <param name=\"count\"></param>\r\n        /// <returns>String or an array.</returns>\r\n        private static object Replace(ScriptContext/*!*/context, DObject self, Dictionary<string, object> definedVariables, object pattern, object replacement, PhpCallback callback,\r\n            object data, int limit, ref int count)\r\n        {\r\n            // if we have no replacement and no callback, matches are deleted (replaced by an empty string)\r\n            if (replacement == null && callback == null)\r\n                replacement = String.Empty;\r\n\r\n            // exactly one of replacement or callback is valid now\r\n            Debug.Assert(replacement != null ^ callback != null);\r\n\r\n            // get eval info if it has been captured - is needed even if we do not need them later\r\n            SourceCodeDescriptor descriptor = context.GetCapturedSourceCodeDescriptor();\r\n\r\n            // PHP's behaviour for undocumented limit range\r\n            if (limit < -1)\r\n                limit = 0;\r\n\r\n            PhpArray replacement_array = replacement as PhpArray;\r\n\r\n            string replacement_string = null;\r\n            if (replacement_array == null && replacement != null)\r\n                replacement_string = Core.Convert.ObjectToString(replacement);\r\n\r\n            // we should return new array, if there is an array passed as subject, it should remain unchanged:\r\n            object data_copy = PhpVariable.DeepCopy(data);\r\n\r\n            PhpArray pattern_array = pattern as PhpArray;\r\n            if (pattern_array == null)\r\n            {\r\n                // string pattern\r\n                // string replacement\r\n\r\n                if (replacement_array != null)\r\n                {\r\n                    // string pattern and array replacement not allowed:\r\n                    PhpException.InvalidArgument(\"replacement\", LibResources.GetString(\"replacement_array_pattern_not\"));\r\n                    return null;\r\n                }\r\n\r\n                // pattern should be treated as string and therefore replacement too:\r\n                return SimpleReplace(self, definedVariables, pattern, replacement_string, callback, data_copy, limit, descriptor, ref count);\r\n            }\r\n            else if (replacement_array == null)\r\n            {\r\n                // array  pattern\r\n                // string replacement\r\n\r\n                using (var pattern_enumerator = pattern_array.GetFastEnumerator())\r\n                    while (pattern_enumerator.MoveNext())\r\n                    {\r\n                        data_copy = SimpleReplace(self, definedVariables, pattern_enumerator.CurrentValue, replacement_string,\r\n                                    callback, data_copy, limit, descriptor, ref count);\r\n                    }\r\n            }\r\n            else //if (replacement_array != null)\r\n            {\r\n                // array pattern\r\n                // array replacement\r\n\r\n                var replacement_enumerator = replacement_array.GetFastEnumerator();\r\n                bool replacement_valid = true;\r\n\r\n                using (var pattern_enumerator = pattern_array.GetFastEnumerator())\r\n                    while (pattern_enumerator.MoveNext())\r\n                    {\r\n                        // replacements are in array, move to next item and take it if possible, in other case take empty string:\r\n                        if (replacement_valid && replacement_enumerator.MoveNext())\r\n                        {\r\n                            replacement_string = Core.Convert.ObjectToString(replacement_enumerator.CurrentValue);\r\n                        }\r\n                        else\r\n                        {\r\n                            replacement_string = string.Empty;\r\n                            replacement_valid = false;  // end of replacement_enumerator, do not call MoveNext again!\r\n                        }\r\n\r\n                        data_copy = SimpleReplace(self, definedVariables, pattern_enumerator.CurrentValue, replacement_string,\r\n                                    callback, data_copy, limit, descriptor, ref count);\r\n                    }\r\n            }\r\n\r\n            // return resulting array or string assigned to data\r\n            return data_copy;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Takes a regular expression <paramref name=\"pattern\"/> and one of <paramref name=\"replacement\"/> or \r\n        /// <paramref name=\"callback\"/>. Performs replacing on <paramref name=\"data\"/>, which can be\r\n        /// <see cref=\"PhpArray\"/>, in other cases it is converted to string.\r\n        /// If <paramref name=\"data\"/> is <see cref=\"PhpArray\"/>, every value is converted to string and\r\n        /// replacement is performed in place in this array.\r\n        /// Either <paramref name=\"replacement\"/> or <paramref name=\"callback\"/> should be null.\r\n        /// </summary>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this)</param>\r\n        /// <param name=\"definedVariables\">Array with local variables - can be used by replace pattern</param>\r\n        /// <param name=\"pattern\">Regular expression to search.</param>\r\n        /// <param name=\"replacement\">Regular replacement expression. Should be null if callback is specified.</param>\r\n        /// <param name=\"callback\">Callback function that should be called to make replacements. Should be null\r\n        /// if replacement is specified.</param>\r\n        /// <param name=\"data\">Array or string where pattern is searched.</param>\r\n        /// <param name=\"limit\">Max count of replacements for each item in subject.</param>\r\n        /// <param name=\"descriptor\"><see cref=\"SourceCodeDescriptor\"/> for possible lambda function creation.</param>\r\n        /// <param name=\"count\">Cumulated number of replacements.</param>\r\n        /// <returns></returns>\r\n        private static object SimpleReplace(DObject self, Dictionary<string, object> definedVariables, object pattern,\r\n            string replacement, PhpCallback callback, object data, int limit, SourceCodeDescriptor descriptor, ref int count)\r\n        {\r\n            Debug.Assert(limit >= -1);\r\n\r\n            // exactly one of replacement or callback is valid:\r\n            Debug.Assert(replacement != null ^ callback != null);\r\n\r\n            PerlRegExpConverter converter = ConvertPattern(pattern, replacement);\r\n            if (converter == null) return null;\r\n\r\n            // get types of data we need:\r\n            PhpArray data_array = data as PhpArray;\r\n            string data_string = (data_array == null) ? ConvertData(data, converter) : null;\r\n\r\n            // data comprising of a single string:\r\n            if (data_array == null)\r\n            {\r\n                return ReplaceInternal(self, definedVariables, converter, callback, data_string, limit, descriptor, ref count);\r\n            }\r\n            else\r\n            {\r\n                // data is array, process each item:\r\n                var enumerator = data_array.GetFastEnumerator();\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    enumerator.CurrentValue = ReplaceInternal(self, definedVariables, converter, callback,\r\n                        ConvertData(enumerator.CurrentValue, converter), limit, descriptor, ref count);\r\n                }\r\n                enumerator.Dispose();\r\n\r\n                // return array with items replaced:\r\n                return data;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces <paramref name=\"limit\"/> occurences of substrings.\r\n        /// </summary>\r\n        /// <param name=\"converter\">\r\n        /// Converter used for replacement if <paramref name=\"callback\"/> is <B>null</B>.\r\n        /// </param>\r\n        /// <param name=\"self\">Instance of object that called the replace method (replace pattern may contain $this)</param>\r\n        /// <param name=\"definedVariables\">Array with local variables - can be used by replace pattern</param>\r\n        /// <param name=\"callback\">Callback to call for replacement strings.</param>\r\n        /// <param name=\"str\">String to search for matches.</param>\r\n        /// <param name=\"limit\">Max number of replacements performed.</param>\r\n        /// <param name=\"sourceCodeDesc\"><see cref=\"SourceCodeDescriptor\"/> for possible lambda function creation.</param>\r\n        /// <param name=\"count\">Cumulated number of replacements.</param>\r\n        /// <returns></returns>\r\n        private static string ReplaceInternal(DObject self, Dictionary<string, object> definedVariables, PerlRegExpConverter converter, PhpCallback callback,\r\n            string str, int limit, SourceCodeDescriptor sourceCodeDesc, ref int count)\r\n        {\r\n            Debug.Assert(limit >= -1);\r\n\r\n            if (callback == null)\r\n            {\r\n                // replace without executing code or counting the number of replacements:\r\n                if ((converter.PerlOptions & PerlRegexOptions.Evaluate) == 0 && count < 0)\r\n                    return converter.Regex.Replace(str, converter.DotNetReplaceExpression, limit);\r\n\r\n                Evaluator evaluator = new Evaluator(converter.Regex, converter.DotNetReplaceExpression, sourceCodeDesc, self, definedVariables);\r\n                MatchEvaluator match_evaluator;\r\n\r\n                if ((converter.PerlOptions & PerlRegexOptions.Evaluate) != 0)\r\n                    match_evaluator = new MatchEvaluator(evaluator.ReplaceCodeExecute);\r\n                else\r\n                    match_evaluator = new MatchEvaluator(evaluator.ReplaceCount);\r\n\r\n                string result = converter.Regex.Replace(str, match_evaluator, limit);\r\n                count += evaluator.Count;\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                StringBuilder result = new StringBuilder((str != null) ? str.Length : 0);\r\n                int last_index = 0;\r\n\r\n                Match m = converter.Regex.Match(str);\r\n                while (m.Success && (limit == -1 || limit-- > 0))\r\n                {\r\n                    // append everything from input string to current match\r\n                    result.Append(str, last_index, m.Index - last_index);\r\n\r\n                    // move index after current match\r\n                    last_index = m.Index + m.Length;\r\n\r\n                    PhpArray arr = new PhpArray(m.Groups.Count, 0);\r\n                    for (int i = 0; i < m.Groups.Count; i++)\r\n                        arr[i] = m.Groups[i].Value;\r\n\r\n                    // append user callback function result\r\n                    string replacement = Core.Convert.ObjectToString(callback.Invoke(arr));\r\n                    result.Append(replacement);\r\n\r\n                    m = m.NextMatch();\r\n\r\n                    count++;\r\n                }\r\n\r\n                // remaining string\r\n                result.Append(str, last_index, str.Length - last_index);\r\n                return result.ToString();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Class implementing <see cref=\"MatchEvaluator\"/> delegate evaluating php code if 'e' modifier\r\n        /// in preg_replace is specified.\r\n        /// </summary>\r\n        private sealed class Evaluator\r\n        {\r\n            private Regex reg;\r\n            private string replacement;\r\n            private SourceCodeDescriptor sourceCodeDesc;\r\n            private Dictionary<string, object> definedVariables;\r\n            private DObject self;\r\n\r\n            public int Count { get { return count; } }\r\n            private int count;\r\n\r\n            public Evaluator(Regex reg, string replacement, SourceCodeDescriptor sourceCodeDesc, DObject self, Dictionary<string, object> definedVariables)\r\n            {\r\n                this.reg = reg;\r\n                this.definedVariables = definedVariables;\r\n                this.replacement = replacement;\r\n                this.sourceCodeDesc = sourceCodeDesc;\r\n                this.count = 0;\r\n                this.self = self;\r\n            }\r\n\r\n            public string ReplaceCodeExecute(Match m)\r\n            {\r\n                count++;\r\n\r\n                if (m.Value.Trim().Length == 0)\r\n                    return String.Empty; // nothing to do\r\n\r\n                ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n                // generate code that will be executed\r\n                string code = String.Concat(\"return \", Substitute(replacement, m.Groups), \";\");\r\n\r\n                // Execute..\r\n                return Core.Convert.ObjectToString(DynamicCode.Eval(code, true, context, definedVariables, self, null,\r\n                    context.EvalRelativeSourcePath, context.EvalLine, context.EvalColumn, context.EvalId, null));\r\n            }\r\n\r\n            public string ReplaceCount(Match m)\r\n            {\r\n                count++;\r\n                return replacement;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Expects replacement string produced by <see cref=\"PerlRegExpReplacement.ConvertReplacement\"/>, \r\n            /// i.e. only ${n} refer to valid groups.\r\n            /// </summary>\r\n            private string Substitute(string replacement, GroupCollection groups)\r\n            {\r\n                StringBuilder result = new StringBuilder(replacement.Length);\r\n\r\n                int i = 0;\r\n                while (i < replacement.Length)\r\n                {\r\n                    if (IsParenthesizedGroupReference(replacement, i))\r\n                    {\r\n                        // ${\r\n                        i += 2;\r\n\r\n                        // [0-9]{1,2}\r\n                        int group_no = replacement[i++] - '0';\r\n                        if (replacement[i] != '}')\r\n                        {\r\n                            group_no = group_no * 10 + (replacement[i] - '0');\r\n                            i++;\r\n                        }\r\n\r\n                        // }\r\n                        Debug.Assert(replacement[i] == '}');\r\n                        i++;\r\n\r\n                        Debug.Assert(group_no < groups.Count);\r\n\r\n                        // append slashed group value:\r\n                        result.Append(StringUtils.AddCSlashes(groups[group_no].Value, true, true, false));\r\n                    }\r\n                    else if (replacement[i] == '$')\r\n                    {\r\n                        Debug.Assert(i + 1 < replacement.Length && replacement[i + 1] == '$');\r\n                        result.Append('$');\r\n                        i += 2;\r\n                    }\r\n                    else\r\n                    {\r\n                        result.Append(replacement[i++]);\r\n                    }\r\n                }\r\n\r\n                return result.ToString();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper methods\r\n\r\n        private static void AddGroupNameToResult(Regex regex, PhpArray matches, int i, Action<PhpArray, string> action)\r\n        {\r\n            var groupName = GetGroupName(regex, i);\r\n            if (!String.IsNullOrEmpty(groupName))\r\n            {\r\n                action(matches, groupName);\r\n            }\r\n        }\r\n\r\n        private static PerlRegExpConverter ConvertPattern(object pattern, string replacement)\r\n        {\r\n            var converter = PerlRegExpCache.Get(pattern, replacement, true);\r\n\r\n            // converter can contain a warning message,\r\n            // it means it is invalid and we cannot use it:\r\n            if (converter.ArgumentException != null)\r\n            {\r\n                // Exception message might contain substrings like \"{2}\" so it cannot be passed to any\r\n                // method that formats the string and replaces these numbers with parameters.\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_argument\", \"pattern\") + \": \" + converter.ArgumentException);\r\n                return null;\r\n            }\r\n\r\n            //\r\n            return converter;\r\n        }\r\n\r\n        private static string ConvertData(object data, PerlRegExpConverter/*!*/ converter)\r\n        {\r\n            if (data == null)\r\n            {\r\n                return string.Empty;\r\n            }\r\n            else if (data.GetType() == typeof(PhpBytes))\r\n            {\r\n                return converter.ConvertBytes(((PhpBytes)data).ReadonlyData);\r\n            }\r\n            else\r\n            {\r\n                string str = Core.Convert.ObjectToString(data);\r\n                return converter.ConvertString(str, 0, str.Length);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used for handling Offset Capture flags. Returns just <paramref name=\"item\"/> if\r\n        /// <paramref name=\"offsetCapture\"/> is <B>false</B> or an <see cref=\"PhpArray\"/> containing\r\n        /// <paramref name=\"item\"/> at index 0 and <paramref name=\"index\"/> at index 1.\r\n        /// </summary>\r\n        /// <param name=\"item\">Item to add to return value.</param>\r\n        /// <param name=\"index\">Index to specify in return value if <paramref name=\"offsetCapture\"/> is\r\n        /// <B>true</B>.</param>\r\n        /// <param name=\"offsetCapture\">Whether or not to make <see cref=\"PhpArray\"/> with item and index.</param>\r\n        /// <returns></returns>\r\n        private static object NewArrayItem(object item, int index, bool offsetCapture)\r\n        {\r\n            if (!offsetCapture)\r\n                return item;\r\n\r\n            PhpArray arr = new PhpArray(2, 0);\r\n            arr[0] = item;\r\n            arr[1] = index;\r\n            return arr;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Goes through <paramref name=\"m\"/> matches and fill <paramref name=\"matches\"/> array with results\r\n        /// according to Pattern Order.\r\n        /// </summary>\r\n        /// <param name=\"r\"><see cref=\"Regex\"/> that produced the match</param>\r\n        /// <param name=\"m\"><see cref=\"Match\"/> to iterate through all matches by NextMatch() call.</param>\r\n        /// <param name=\"matches\">Array for storing results.</param>\r\n        /// <param name=\"addOffsets\">Whether or not add arrays with offsets instead of strings.</param>\r\n        /// <returns>Number of full pattern matches.</returns>\r\n        private static int FillMatchesArrayAllPatternOrder(Regex r, Match m, ref PhpArray matches, bool addOffsets)\r\n        {\r\n            // second index, increases at each match in pattern order\r\n            int j = 0;\r\n            while (m.Success)\r\n            {\r\n                // add all groups\r\n                for (int i = 0; i < m.Groups.Count; i++)\r\n                {\r\n                    object arr = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, addOffsets);\r\n\r\n                    AddGroupNameToResult(r, matches, i, (ms, groupName) =>\r\n                    {\r\n                        if (j == 0) ms[groupName] = new PhpArray();\r\n                        ((PhpArray)ms[groupName])[j] = arr;\r\n                    });\r\n\r\n                    if (j == 0) matches[i] = new PhpArray();\r\n                    ((PhpArray)matches[i])[j] = arr;\r\n                }\r\n\r\n                j++;\r\n                m = m.NextMatch();\r\n            }\r\n\r\n            return j;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Goes through <paramref name=\"m\"/> matches and fill <paramref name=\"matches\"/> array with results\r\n        /// according to Set Order.\r\n        /// </summary>\r\n        /// <param name=\"r\"><see cref=\"Regex\"/> that produced the match</param>\r\n        /// <param name=\"m\"><see cref=\"Match\"/> to iterate through all matches by NextMatch() call.</param>\r\n        /// <param name=\"matches\">Array for storing results.</param>\r\n        /// <param name=\"addOffsets\">Whether or not add arrays with offsets instead of strings.</param>\r\n        /// <returns>Number of full pattern matches.</returns>\r\n        private static int FillMatchesArrayAllSetOrder(Regex r, Match m, ref PhpArray matches, bool addOffsets)\r\n        {\r\n            // first index, increases at each match in set order\r\n            int i = 0;\r\n\r\n            while (m.Success)\r\n            {\r\n                PhpArray pa = new PhpArray(m.Groups.Count, 0);\r\n\r\n                // add all groups\r\n                for (int j = 0; j < m.Groups.Count; j++)\r\n                {\r\n                    object arr = NewArrayItem(m.Groups[j].Value, m.Groups[j].Index, addOffsets);\r\n\r\n                    AddGroupNameToResult(r, pa, j, (p, groupName) =>\r\n                    {\r\n                        p[groupName] = arr;\r\n                    });\r\n\r\n\r\n                    pa[j] = arr;\r\n                }\r\n\r\n                matches[i] = pa;\r\n                i++;\r\n                m = m.NextMatch();\r\n            }\r\n\r\n            return i;\r\n        }\r\n\r\n        private static int GetLastSuccessfulGroup(GroupCollection/*!*/ groups)\r\n        {\r\n            Debug.Assert(groups != null);\r\n\r\n            for (int i = groups.Count - 1; i >= 0; i--)\r\n            {\r\n                if (groups[i].Success)\r\n                    return i;\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        internal static bool IsDigitGroupReference(string replacement, int i)\r\n        {\r\n            return (replacement[i] == '$' || replacement[i] == '\\\\') &&\r\n              (i + 1 < replacement.Length && Char.IsDigit(replacement, i + 1));\r\n        }\r\n\r\n        internal static bool IsParenthesizedGroupReference(string replacement, int i)\r\n        {\r\n            return replacement[i] == '$' && i + 3 < replacement.Length && replacement[i + 1] == '{' &&\r\n              Char.IsDigit(replacement, i + 2) &&\r\n                (\r\n                    replacement[i + 3] == '}' ||\r\n                    i + 4 < replacement.Length && replacement[i + 4] == '}' && Char.IsDigit(replacement, i + 3)\r\n              );\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region PerlRegExpReplacement\r\n\r\n    internal static class PerlRegExpReplacement\r\n    {\r\n        /// <summary>\r\n        /// Get the converted replacement from the cache or perform conversion and cache.\r\n        /// </summary>\r\n        /// <param name=\"regex\"></param>\r\n        /// <param name=\"replacement\"></param>\r\n        /// <returns></returns>\r\n        internal static string ConvertReplacement(Regex/*!*/regex, string/*!*/replacement)\r\n        {\r\n            int[] group_numbers = regex.GetGroupNumbers();\r\n            int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0;\r\n\r\n            return ConvertReplacement(max_number, replacement);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts substitutions of the form \\\\xx to $xx (perl to .NET format).\r\n        /// </summary>\r\n        /// <param name=\"max_number\">Maximum group number for the current regullar expression.\r\n        /// <code>\r\n        ///     int[] group_numbers = regex.GetGroupNumbers();\r\n        ///     int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0;\r\n        /// </code>\r\n        /// </param>\r\n        /// <param name=\"replacement\">String possibly containing \\\\xx substitutions.</param>\r\n        /// <returns>String with converted $xx substitution format.</returns>\r\n        private static string ConvertReplacement(int max_number, string replacement)\r\n        {\r\n            int length = replacement.Length;\r\n            StringBuilder result = new StringBuilder(length);\r\n\r\n            //int[] group_numbers = regex.GetGroupNumbers();\r\n            //int max_number = (group_numbers.Length > 0) ? group_numbers[group_numbers.Length - 1] : 0;\r\n\r\n            int i = 0;\r\n            while (i < length)\r\n            {\r\n                if (PerlRegExp.IsDigitGroupReference(replacement, i) ||\r\n                  PerlRegExp.IsParenthesizedGroupReference(replacement, i))\r\n                {\r\n                    int add = 0;\r\n                    i++;\r\n\r\n                    if (replacement[i] == '{') { i++; add = 1; }\r\n\r\n                    // parse number\r\n                    int number = replacement[i++] - '0';\r\n                    if (i < length && Char.IsDigit(replacement, i))\r\n                    {\r\n                        number = number * 10 + (replacement[i++] - '0');\r\n                    }\r\n\r\n                    // insert only existing group references (others replaced with empty string):\r\n                    if (number <= max_number)\r\n                    {\r\n                        result.Append('$');\r\n                        result.Append('{');\r\n                        result.Append(number.ToString());\r\n                        result.Append('}');\r\n                    }\r\n\r\n                    i += add;\r\n                }\r\n                else if (replacement[i] == '$')\r\n                {\r\n                    // there is $ and it is not a substitution - duplicate it:\r\n                    result.Append(\"$$\");\r\n                    i++;\r\n                }\r\n                else if (replacement[i] == '\\\\' && i + 1 < length)\r\n                {\r\n                    if (replacement[i + 1] == '\\\\')\r\n                    {\r\n                        // two backslashes, replace with one:\r\n                        result.Append('\\\\');\r\n                        i += 2;\r\n                    }\r\n                    else if (replacement[i + 1] == '$')\r\n                    {\r\n                        // \"/$\" -> '$$' because /$ doesn't escape $ in .NET\r\n                        result.Append(\"$$\");\r\n                        i += 2;\r\n                    }\r\n                    else\r\n                    {\r\n                        // backslash + some character, skip two characters\r\n                        result.Append(replacement, i, 2);\r\n                        i += 2;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // no substitution, no backslash (or backslash at the end of string)\r\n                    result.Append(replacement, i++, 1);\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region PerlRegExpCache\r\n\r\n    internal static class PerlRegExpCache\r\n    {\r\n        private const uint BucketsLength = 64;\r\n        private static readonly PerlRegExpConverter[]/*!*/buckets = new PerlRegExpConverter[BucketsLength];\r\n        private static readonly object[] locks = new object[8];\r\n        static PerlRegExpCache()\r\n        {\r\n            var locks = PerlRegExpCache.locks;\r\n            for (int i = 0; i < locks.Length; i++)\r\n                locks[i] = new object();\r\n\r\n            Debug.Assert(BucketsLength == 64); // must be 2^x\r\n            RequestContext.RequestEnd += CleanupBuckets;\r\n        }\r\n\r\n        private static int generation = 0;\r\n\r\n        public static PerlRegExpConverter Get(object pattern, string replacement, bool add)\r\n        {\r\n            uint hash = unchecked(\r\n                ((pattern != null)\r\n                    ? (uint)pattern.GetHashCode()   // little slow, some virtual method call\r\n                    : 0)\r\n                & (BucketsLength - 1));\r\n\r\n            for (var item = buckets[hash]; item != null; item = item.nextcache)\r\n            {\r\n                if (item.CacheEquals(item, pattern, replacement))\r\n                {\r\n                    item.Cachehit();\r\n                    item.generation = PerlRegExpCache.generation;   // move item to the current generation\r\n                    return item;\r\n                }\r\n            }\r\n\r\n            return add ? EnsureGet(pattern, replacement, hash) : null;\r\n        }\r\n\r\n        private static PerlRegExpConverter/*!*/EnsureGet(object pattern, string replacement, uint hash)\r\n        {\r\n            PerlRegExpConverter item;\r\n\r\n            lock (locks[hash % locks.Length])\r\n            {\r\n                // double checked lock\r\n                if ((item = Get(pattern, replacement, false)) == null)\r\n                {\r\n                    // avoid growing of the table in non-web applications (console etc.)\r\n                    CleanupBuckets();\r\n\r\n                    // new item\r\n                    item = new PerlRegExpConverter(pattern, replacement, Configuration.Application.Globalization.PageEncoding)\r\n                    {\r\n                        nextcache = PerlRegExpCache.buckets[hash],\r\n                        generation = PerlRegExpCache.generation\r\n                    };\r\n                    buckets[hash] = item;   // enlist the item\r\n                }\r\n            }\r\n\r\n            return item;\r\n        }\r\n\r\n        private static int requestsCounter = 0;\r\n        private static uint cleanupBucket = 0;\r\n        private static void CleanupBuckets()\r\n        {\r\n            var requestsCounter = PerlRegExpCache.requestsCounter;\r\n            if (requestsCounter < 32)\r\n            {\r\n                PerlRegExpCache.requestsCounter = requestsCounter + 1;\r\n            }\r\n            else if (requestsCounter < 64)\r\n            {\r\n                if (Interlocked.Increment(ref PerlRegExpCache.requestsCounter) == 64)\r\n                {\r\n                    // do some cleanup\r\n                    var generation = PerlRegExpCache.generation;\r\n                    var hash = PerlRegExpCache.cleanupBucket;\r\n                    PerlRegExpCache.cleanupBucket = (uint)(hash + 1) & (BucketsLength - 1);\r\n\r\n                    //\r\n                    PerlRegExpConverter prev = null;\r\n                    for (var p = buckets[hash]; p != null; p = p.nextcache)\r\n                    {\r\n                        if (p.generation != generation && unchecked(p.generation + 1) != generation)\r\n                        {\r\n                            if (prev != null) prev.nextcache = p.nextcache;\r\n                            else buckets[hash] = p.nextcache;\r\n                        }\r\n                        else\r\n                            prev = p;\r\n                    }\r\n\r\n                    // \r\n                    if ((hash & 1) == 1)    // every 2nd\r\n                        PerlRegExpCache.generation = unchecked(generation + 1);\r\n                }\r\n            }\r\n            else\r\n                PerlRegExpCache.requestsCounter = 0;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region PerlRegExpConverter\r\n\r\n    /// <summary>\r\n    /// Used for converting PHP Perl like regular expressions to .NET regular expressions.\r\n    /// </summary>\r\n    internal sealed class PerlRegExpConverter\r\n    {\r\n        #region Static & Constants\r\n\r\n        /// <summary>\r\n        /// All named groups from Perl regexp are renamed to start with this character. \r\n        /// In order to enable group names starting with number\r\n        /// </summary>\r\n        internal const char GroupPrefix = 'a';\r\n\r\n        internal const string AnonymousGroupPrefix = \"an0ny_\";\r\n\r\n        /// <summary>\r\n        /// Regular expression used for matching quantifiers, they are changed ungreedy to greedy and vice versa if\r\n        /// needed.\r\n        /// </summary>\r\n        private static Regex quantifiers\r\n        {\r\n            get\r\n            {\r\n                if (_quantifiers == null)\r\n                    _quantifiers = new Regex(@\"\\G(?:\\?|\\*|\\+|\\{[0-9]+,[0-9]*\\})\");\r\n                return _quantifiers;\r\n            }\r\n        }\r\n        private static Regex _quantifiers;\r\n\r\n        /// <summary>\r\n        /// Regular expression for POSIX regular expression classes matching.\r\n        /// </summary>\r\n        private static Regex posixCharClasses\r\n        {\r\n            get\r\n            {\r\n                if (_posixCharClasses == null)\r\n                    _posixCharClasses = new Regex(\"^\\\\[:(^)?(alpha|alnum|ascii|cntrl|digit|graph|lower|print|punct|space|upper|word|xdigit):]\", RegexOptions.Singleline | RegexOptions.Compiled);\r\n                return _posixCharClasses;\r\n            }\r\n        }\r\n        private static Regex _posixCharClasses = null;\r\n\r\n        #endregion\r\n\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Returns <see cref=\"Regex\"/> class that can be used for matching.\r\n        /// </summary>\r\n        public Regex/*!*/ Regex { get { return regex; } }\r\n        private Regex/*!*/ regex;\r\n\r\n        /// <summary>\r\n        /// Returns .NET replacement string.\r\n        /// </summary>\r\n        public readonly string DotNetReplaceExpression;\r\n\r\n        /// <summary>\r\n        /// <see cref=\"RegexOptions\"/> which should be set while matching the expression. May be <B>null</B>\r\n        /// if <see cref=\"regex\"/> is already set.\r\n        /// </summary>\r\n        public RegexOptions DotNetOptions { get { return dotNetOptions; } }\r\n        private RegexOptions dotNetOptions;\r\n\r\n        public PerlRegexOptions PerlOptions { get { return perlOptions; } }\r\n        private PerlRegexOptions perlOptions = PerlRegexOptions.None;\r\n\r\n        private readonly Encoding/*!*/ encoding;\r\n\r\n        /// <summary>\r\n        /// An error message. Is <c>null</c> if all the conversions are ok.\r\n        /// </summary>\r\n        public string ArgumentException { get; private set; }\r\n\r\n        #endregion\r\n\r\n        #region Cache helper\r\n\r\n        /// <summary>\r\n        /// Internal pointer to the next <see cref=\"PerlRegExpConverter\"/> in the list of cached <see cref=\"PerlRegExpConverter\"/> instances.\r\n        /// </summary>\r\n        internal PerlRegExpConverter nextcache;\r\n\r\n        /// <summary>\r\n        /// Internal hits counter. Once it gets to specified constant number, <see cref=\"regex\"/> gets compiled.\r\n        /// </summary>\r\n        private int hitsCount = 0;\r\n\r\n        /// <summary>\r\n        /// Current generation. Old generations can be removed from cache.\r\n        /// </summary>\r\n        internal long generation;\r\n\r\n        internal readonly object _pattern;\r\n        internal readonly string _replacement, _strpattern;\r\n\r\n        internal void Cachehit()\r\n        {\r\n            int hitsCount = this.hitsCount;\r\n\r\n            if (hitsCount < 3 && (Interlocked.Increment(ref this.hitsCount) == 3))\r\n            {\r\n                if (this.regex != null) // && (this.regex.Options & RegexOptions.Compiled) == 0)\r\n                    this.regex = new Regex(this.regex.ToString(), this.dotNetOptions | RegexOptions.Compiled);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Function that efficiently compares <c>this</c> instance of <see cref=\"PerlRegExpConverter\"/> with another <see cref=\"PerlRegExpConverter\"/>.\r\n        /// 1st argument is reference to <c>this</c>.\r\n        /// 2nd argument is the other's <see cref=\"PerlRegExpConverter._pattern\"/>.\r\n        /// 3nd argument is the other's <see cref=\"PerlRegExpConverter._replacement\"/>.\r\n        /// Function returns <c>true</c> if pattern and replacement match.\r\n        /// </summary>\r\n        internal readonly Func<PerlRegExpConverter, object, string, bool>/*!*/CacheEquals;\r\n\r\n        /// <summary>\r\n        /// Functions for efficient equality check.\r\n        /// </summary>\r\n        private struct CacheEqualsFunctions\r\n        {\r\n            static bool eq_null(PerlRegExpConverter self, object otherpattern, string otherreplacement) { return otherpattern == null && otherreplacement == self._replacement; }\r\n            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); }\r\n            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); }\r\n            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; }\r\n            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; }\r\n            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; }\r\n\r\n            // cached delegates\r\n            static Func<PerlRegExpConverter, object, string, bool>/*!*/\r\n                cacheeq_null = eq_null,\r\n                cacheeq_string_null = eq_string_null,\r\n                cacheeq_string = eq_string,\r\n                cacheeq_phpbytes = eq_phpbytes,\r\n                cacheeq_phpstring = eq_phpstring,\r\n                cacheeq_default = eq_default;\r\n\r\n            /// <summary>\r\n            /// Select appropriate equality function delegate for given <see cref=\"PerlRegExpConverter\"/>'s pattern and replacement.\r\n            /// </summary>\r\n            public static Func<PerlRegExpConverter, object, string, bool>/*!*/SelectEqualsFunction(object pattern, string replacement)\r\n            {\r\n                if (pattern == null) return CacheEqualsFunctions.cacheeq_null;\r\n                else if (pattern.GetType() == typeof(string) && replacement == null) return CacheEqualsFunctions.cacheeq_string_null;\r\n                else if (pattern.GetType() == typeof(string)) return CacheEqualsFunctions.cacheeq_string;\r\n                else if (pattern.GetType() == typeof(PhpBytes)) return CacheEqualsFunctions.cacheeq_phpbytes;\r\n                else if (pattern.GetType() == typeof(PhpString)) return CacheEqualsFunctions.cacheeq_phpstring;\r\n                else return CacheEqualsFunctions.cacheeq_default;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes cache-specific fields of <see cref=\"PerlRegExpConverter\"/> new instance.\r\n        /// </summary>\r\n        private PerlRegExpConverter(object pattern, string replacement)\r\n        {\r\n            // used for caching:\r\n            this._pattern = PhpVariable.Copy(pattern, CopyReason.Assigned);\r\n            this._strpattern = pattern as string;\r\n            this._replacement = replacement;\r\n\r\n            // initialize function that effectively checks given pattern whether it is equal to this pattern\r\n            this.CacheEquals = CacheEqualsFunctions.SelectEqualsFunction(pattern, replacement);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Creates new <see cref=\"PerlRegExpConverter\"/> and converts Perl regular expression to .NET.\r\n        /// </summary>\r\n        /// <param name=\"pattern\">Perl regular expression to convert.</param>\r\n        /// <param name=\"replacement\">Perl replacement string to convert or a <B>null</B> reference for match only.</param>\r\n        /// <param name=\"encoding\">Encoding used in the case the pattern is a binary string.</param>\r\n        public PerlRegExpConverter(object pattern, string replacement, Encoding/*!*/ encoding)\r\n            : this(pattern, replacement)\r\n        {\r\n            if (encoding == null)\r\n                throw new ArgumentNullException(\"encoding\");\r\n\r\n            this.encoding = encoding;\r\n\r\n            ConvertPattern(pattern);\r\n\r\n            if (replacement != null && this.regex != null)\r\n                this.DotNetReplaceExpression = (replacement.Length == 0) ? string.Empty : PerlRegExpReplacement.ConvertReplacement(regex, replacement);\r\n        }\r\n\r\n        private void ConvertPattern(object pattern)\r\n        {\r\n            string perlRegEx;\r\n            string dotNetMatchExpression = null;\r\n\r\n            try\r\n            {\r\n                // convert pattern into string, parse options:\r\n                if (pattern != null && pattern.GetType() == typeof(PhpBytes))\r\n                    perlRegEx = LoadPerlRegex(((PhpBytes)pattern).ReadonlyData);\r\n                else\r\n                    perlRegEx = LoadPerlRegex(PHP.Core.Convert.ObjectToString(pattern));\r\n\r\n                // convert pattern into regex:\r\n                dotNetMatchExpression = ConvertRegex(perlRegEx, this.perlOptions, this.encoding);\r\n\r\n                // process the regex:\r\n                this.regex = new Regex(dotNetMatchExpression, dotNetOptions);\r\n            }\r\n            catch (ArgumentException e)\r\n            {\r\n                this.ArgumentException = ExtractExceptionalMessage(e.Message, dotNetMatchExpression);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extracts the .NET exceptional message from the message stored in an exception.\r\n        /// The message has format 'parsing \"{pattern}\" - {message}\\r\\nParameter name {pattern}' in .NET 1.1.\r\n        /// </summary>\r\n        private static string ExtractExceptionalMessage(string message, string dotNetMatchExpression)\r\n        {\r\n            if (message != null)\r\n            {\r\n                if (dotNetMatchExpression != null)\r\n                    message = message.Replace(dotNetMatchExpression, \"<pattern>\");\r\n\r\n                int i = message.IndexOf(\"\\r\\n\");\r\n                if (i >= 0)\r\n                    message = message.Substring(0, i);\r\n\r\n                i = message.IndexOf(\"-\");\r\n                if (i >= 0)\r\n                    message = message.Substring(i + 2);\r\n\r\n                return message;\r\n            }\r\n            else\r\n            {\r\n                return string.Empty;\r\n            }\r\n        }\r\n\r\n        internal string ConvertString(string str, int start, int length)\r\n        {\r\n            if ((perlOptions & PerlRegexOptions.UTF8) != 0 && !StringUtils.IsAsciiString(str, start, length))\r\n#if SILVERLIGHT\r\n\t\t\t{\r\n\t\t    byte[] bytes = new byte[encoding.GetByteCount(str)];\r\n\t\t\t\tencoding.GetBytes(str, 0, str.Length, bytes, 0);\r\n\t\t    return System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);\r\n\t\t\t}\r\n#else\r\n                return Encoding.UTF8.GetString(encoding.GetBytes(str.Substring(start, length)));\r\n#endif\r\n            else\r\n                return str.Substring(start, length);\r\n        }\r\n\r\n        internal string ConvertBytes(byte[] bytes)\r\n        {\r\n            return ConvertBytes(bytes, 0, bytes.Length);\r\n        }\r\n\r\n        internal string ConvertBytes(byte[] bytes, int start, int length)\r\n        {\r\n            if ((perlOptions & PerlRegexOptions.UTF8) != 0)\r\n                return Encoding.UTF8.GetString(bytes, start, length);\r\n            else\r\n                return encoding.GetString(bytes, start, length);\r\n        }\r\n\r\n        private string LoadPerlRegex(byte[] pattern)\r\n        {\r\n            if (pattern == null) pattern = ArrayUtils.EmptyBytes;\r\n            int regex_start, regex_end;\r\n\r\n            StringUtils.UniformWrapper upattern = new StringUtils.BytesWrapper(pattern);\r\n\r\n            FindRegexDelimiters(upattern, out regex_start, out regex_end);\r\n            ParseRegexOptions(upattern, regex_end + 2, out dotNetOptions, out perlOptions);\r\n\r\n            return ConvertBytes(pattern, regex_start, regex_end - regex_start + 1);\r\n        }\r\n\r\n        private string LoadPerlRegex(string pattern)\r\n        {\r\n            if (pattern == null) pattern = \"\";\r\n            int regex_start, regex_end;\r\n\r\n            StringUtils.UniformWrapper upattern = new StringUtils.StringWrapper(pattern);\r\n\r\n            FindRegexDelimiters(upattern, out regex_start, out regex_end);\r\n            ParseRegexOptions(upattern, regex_end + 2, out dotNetOptions, out perlOptions);\r\n\r\n            return ConvertString(pattern, regex_start, regex_end - regex_start + 1);\r\n        }\r\n\r\n        private void FindRegexDelimiters(StringUtils.UniformWrapper pattern, out int start, out int end)\r\n        {\r\n            int i = 0;\r\n            while (i < pattern.Length && Char.IsWhiteSpace(pattern[i])) i++;\r\n\r\n            if (i == pattern.Length)\r\n                throw new ArgumentException(LibResources.GetString(\"regular_expression_empty\"));\r\n\r\n            char start_delimiter = pattern[i++];\r\n            if (Char.IsLetterOrDigit(start_delimiter) || start_delimiter == '\\\\')\r\n                throw new ArgumentException(LibResources.GetString(\"delimiter_alnum_backslash\"));\r\n\r\n            start = i;\r\n            char end_delimiter;\r\n            if (start_delimiter == '[') end_delimiter = ']';\r\n            else if (start_delimiter == '(') end_delimiter = ')';\r\n            else if (start_delimiter == '{') end_delimiter = '}';\r\n            else if (start_delimiter == '<') end_delimiter = '>';\r\n            else end_delimiter = start_delimiter;\r\n\r\n            int depth = 1;\r\n            while (i < pattern.Length)\r\n            {\r\n                if (pattern[i] == '\\\\' && i + 1 < pattern.Length)\r\n                {\r\n                    i += 2;\r\n                    continue;\r\n                }\r\n                else if (pattern[i] == end_delimiter)   // (1) should precede (2) to handle end_delim == start_delim case\r\n                {\r\n                    depth--;\r\n                    if (depth == 0) break;\r\n                }\r\n                else if (pattern[i] == start_delimiter) // (2)\r\n                {\r\n                    depth++;\r\n                }\r\n                i++;\r\n            }\r\n\r\n            if (i == pattern.Length)\r\n                throw new ArgumentException(LibResources.GetString(\"preg_no_end_delimiter\", end_delimiter));\r\n\r\n            end = i - 1;\r\n        }\r\n\r\n        private static void ParseRegexOptions(StringUtils.UniformWrapper pattern, int start,\r\n          out RegexOptions dotNetOptions, out PerlRegexOptions extraOptions)\r\n        {\r\n            dotNetOptions = RegexOptions.None;\r\n            extraOptions = PerlRegexOptions.None;\r\n\r\n            for (int i = start; i < pattern.Length; i++)\r\n            {\r\n                char option = pattern[i];\r\n\r\n                switch (option)\r\n                {\r\n                    case 'i': // PCRE_CASELESS\r\n                        dotNetOptions |= RegexOptions.IgnoreCase;\r\n                        break;\r\n\r\n                    case 'm': // PCRE_MULTILINE\r\n                        dotNetOptions |= RegexOptions.Multiline;\r\n                        break;\r\n\r\n                    case 's': // PCRE_DOTALL\r\n                        dotNetOptions |= RegexOptions.Singleline;\r\n                        break;\r\n\r\n                    case 'x': // PCRE_EXTENDED\r\n                        dotNetOptions |= RegexOptions.IgnorePatternWhitespace;\r\n                        break;\r\n\r\n                    case 'e': // evaluate as PHP code\r\n                        extraOptions |= PerlRegexOptions.Evaluate;\r\n                        break;\r\n\r\n                    case 'A': // PCRE_ANCHORED\r\n                        extraOptions |= PerlRegexOptions.Anchored;\r\n                        break;\r\n\r\n                    case 'D': // PCRE_DOLLAR_ENDONLY\r\n                        extraOptions |= PerlRegexOptions.DollarMatchesEndOfStringOnly;\r\n                        break;\r\n\r\n                    case 'S': // spend more time studying the pattern - ignore\r\n                        break;\r\n\r\n                    case 'U': // PCRE_UNGREEDY\r\n                        extraOptions |= PerlRegexOptions.Ungreedy;\r\n                        break;\r\n\r\n                    case 'u': // PCRE_UTF8\r\n                        extraOptions |= PerlRegexOptions.UTF8;\r\n                        break;\r\n\r\n                    case 'X': // PCRE_EXTRA\r\n                        PhpException.Throw(PhpError.Warning, LibResources.GetString(\"modifier_not_supported\", option));\r\n                        break;\r\n\r\n                    default:\r\n                        PhpException.Throw(PhpError.Notice, LibResources.GetString(\"modifier_unknown\", option));\r\n                        break;\r\n                }\r\n            }\r\n\r\n            // inconsistent options check:\r\n            if\r\n            (\r\n              (dotNetOptions & RegexOptions.Multiline) != 0 &&\r\n              (extraOptions & PerlRegexOptions.DollarMatchesEndOfStringOnly) != 0\r\n            )\r\n            {\r\n                PhpException.Throw(PhpError.Notice, LibResources.GetString(\"modifiers_inconsistent\", 'D', 'm'));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses escaped sequences: \"\\[xX][0-9A-Fa-f]{2}\", \"\\[xX]\\{[0-9A-Fa-f]{0,4}\\}\", \"\\[0-7]{3}\", \r\n        /// \"\\[pP]{Unicode Category}\"\r\n        /// </summary>\r\n        private static bool ParseEscapeCode(\r\n            //Encoding/*!*/ encoding,\r\n            string/*!*/ str, ref int pos, ref int ch, ref bool escaped)\r\n        {\r\n            Debug.Assert(/*encoding != null &&*/ str != null && pos >= 0 && pos < str.Length && str[pos] == '\\\\');\r\n\r\n            if (pos + 3 >= str.Length) return false;\r\n\r\n            int number = 0;\r\n\r\n            if (str[pos + 1] == 'x')\r\n            {\r\n                if (str[pos + 2] == '{')\r\n                {\r\n                    // hexadecimal number encoding a Unicode character:\r\n                    int i = pos + 3;\r\n                    while (i < str.Length && str[i] != '}' && number < Char.MaxValue)\r\n                    {\r\n                        int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]);\r\n                        if (digit > 16) return false;\r\n                        number = (number << 4) + digit;\r\n                        i++;\r\n                    }\r\n                    if (/*number > Char.MaxValue || */i >= str.Length) return false;\r\n                    pos = i;\r\n                    ch = number;\r\n                    escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false;\r\n                }\r\n                else\r\n                {\r\n\r\n                    // hexadecimal number encoding single-byte character:\r\n                    for (int i = pos + 2; i < pos + 4; i++)\r\n                    {\r\n                        Debug.Assert(i < str.Length);\r\n                        int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]);\r\n                        if (digit > 16) return false;\r\n                        number = (number << 4) + digit;\r\n                    }\r\n                    pos += 3;\r\n                    ch = number;\r\n                    //char[] chars = encoding.GetChars(new byte[] { (byte)number });\r\n                    //if (chars.Length == 1)\r\n                    //    ch = chars[0];\r\n                    //else\r\n                    //    ch = number;\r\n                    escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false;\r\n                }\r\n                return true;\r\n            }\r\n            else if (str[pos + 1] >= '0' && str[pos + 1] <= '7')\r\n            {\r\n                // octal number:\r\n                for (int i = pos + 1; i < pos + 4; i++)\r\n                {\r\n                    Debug.Assert(i < str.Length);\r\n                    int digit = Core.Parsers.Convert.AlphaNumericToDigit(str[i]);\r\n                    if (digit > 8) return false;\r\n                    number = (number << 3) + digit;\r\n                }\r\n                pos += 3;\r\n                ch = number;//encoding.GetChars(new byte[] { (byte)number })[0];\r\n                escaped = ch < Char.MaxValue ? IsCharRegexSpecial((char)ch) : false;\r\n                return true;\r\n            }\r\n            else if (str[pos + 1] == 'p' || str[pos + 1] == 'P')\r\n            {\r\n                bool complement = str[pos + 1] == 'P';\r\n                int cat_start;\r\n\r\n                if (str[pos + 2] == '{')\r\n                {\r\n                    if (!complement && str[pos + 3] == '^')\r\n                    {\r\n                        complement = true;\r\n                        cat_start = pos + 4;\r\n                    }\r\n                    else\r\n                        cat_start = pos + 3;\r\n                }\r\n                else\r\n                {\r\n                    cat_start = pos + 2;\r\n                }\r\n\r\n                UnicodeCategoryGroup group;\r\n                UnicodeCategory category;\r\n\r\n                int cat_length = StringUtils.ParseUnicodeDesignation(str, cat_start, out group, out category);\r\n                int cat_end = cat_start + cat_length - 1;\r\n\r\n                // unknown category:\r\n                if (cat_length == 0) return false;\r\n\r\n                // check closing brace:\r\n                if (str[pos + 2] == '{' && (cat_end + 1 >= str.Length || str[cat_end + 1] != '}'))\r\n                    return false;\r\n\r\n                // TODO: custom categories on .NET 2?\r\n                // Unicode category:\r\n                PhpException.Throw(PhpError.Warning, \"Unicode categories not supported.\");\r\n                // ?? if (complement) pos = pos;\r\n                return false;\r\n            }\r\n            else if (str[pos + 1] == 'X')\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"Unicode categories not supported.\");\r\n                return false;\r\n            }\r\n\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Characters that must be encoded in .NET regexp\r\n        /// </summary>\r\n        static char[] encodeChars = new char[] { '.', '$', '(', ')', '*', '+', '?', '[', ']', '{', '}', '\\\\', '^', '|' };\r\n\r\n        /// <summary>\r\n        /// Returns true if character needs to be escaped in .NET regex\r\n        /// </summary>\r\n        private static bool IsCharRegexSpecial(char ch)\r\n        {\r\n            return Array.IndexOf(encodeChars, ch) != -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts Perl match expression (only, without delimiters, options etc.) to .NET regular expression.\r\n        /// </summary>\r\n        /// <param name=\"perlExpr\">Perl regular expression to convert.</param>\r\n        /// <param name=\"opt\">Regexp options - some of them must be processed by changes in match string.</param>\r\n        /// <param name=\"encoding\">Encoding used for character ranges and escaping.</param>\r\n        /// <returns>Resulting .NET regular expression.</returns>\r\n        internal static string ConvertRegex(string perlExpr, PerlRegexOptions opt, Encoding encoding)\r\n        {\r\n            // Ranges in bracket expressions should be replaced with appropriate characters\r\n\r\n            // assume no conversion will be performed, create string builder with exact length. Only in\r\n            // case there is a range StringBuilder would be prolonged, +1 for Anchored\r\n            StringBuilder result = new StringBuilder(perlExpr.Length + 1);\r\n\r\n            // Anchored means that the string should match only at the start of the string, add '^'\r\n            // at the beginning if there is no one\r\n            if ((opt & PerlRegexOptions.Anchored) != 0 && (perlExpr.Length == 0 || perlExpr[0] != '^'))\r\n                result.Append('^');\r\n\r\n            // set to true after a quantifier is matched, if there is second quantifier just behind the\r\n            // first it is an error\r\n            bool last_quantifier = false;\r\n\r\n            // 4 means we're switching from 3 back to 2 - ie. \"a-b-c\" \r\n            // (we need to make a difference here because second \"-\" shouldn't be expanded)\r\n            bool leaving_range = false;\r\n\r\n            // remember the last character added in the character class, so in state 3 we can expand the range as properly as possible\r\n            int range_from_character = -1;\r\n\r\n            bool escaped = false;\r\n            int state = 0;\r\n            int inner_state = 0;\r\n            HashSet<uint> addedSurrogate2Ranges = null; // cache of already added character pairs valid within character class [], dropped when switching to 0\r\n\r\n            int group_number = 0;\r\n            int i = 0;\r\n            while (i < perlExpr.Length)\r\n            {\r\n                int ch = perlExpr[i];\r\n\r\n                escaped = false;\r\n                if (ch == '\\\\' && !ParseEscapeCode(/*encoding,*/ perlExpr, ref i, ref ch, ref escaped))\r\n                {\r\n                    i++;\r\n                    Debug.Assert(i < perlExpr.Length, \"Regex cannot end with backslash.\");\r\n                    ch = perlExpr[i];\r\n\r\n                    if (ch == 'g')\r\n                    {\r\n                        ++i;\r\n                        inner_state = 5; // skip 'g' from resulting pattern\r\n                        escaped = false;\r\n                        continue;\r\n                    }\r\n                    else if (ch == 'k')\r\n                    {\r\n                        inner_state = 11;\r\n                        escaped = true;\r\n                    }\r\n\r\n                    // some characters (like '_') don't need to be escaped in .net\r\n                    // and ignore escaping of unicode sequence of characters\r\n                    if (ch == '_' || (int)ch > 0x7F) escaped = false; else escaped = true;\r\n                }\r\n\r\n                switch (state)\r\n                {\r\n                    case 0: // outside of character class\r\n                        if (escaped)\r\n                        {\r\n                            result.Append('\\\\');\r\n                            Append(result, ch);\r\n                            last_quantifier = false;\r\n                            break;\r\n                        }\r\n\r\n                        // In perl regexps, named groups are written like this: \"(?P<name> ... )\"\r\n                        //  (\\k<name>...)\r\n                        //  (\\k'name'...)\r\n                        //  (\\k{name}...)\r\n                        //  (\\g{name}...)\r\n                        //  (?'name'...)\r\n                        //  (?<name>...)\r\n                        //  (?P=name)\r\n                        //  (?:...)\r\n\r\n                        // If the group is starting here, we need to skip the 'P' character (see state 4)\r\n                        switch (inner_state)\r\n                        {\r\n                            case 0:\r\n                                if (ch == '(')\r\n                                {\r\n                                    inner_state = 1;\r\n\r\n                                    // Look-ahead and name anonymous groups.\r\n                                    // This is used to match the order of the results.\r\n                                    // As perlre doc says:\r\n                                    // NOTE: While the notation of this construct [grouping] is the same as the similar function in .NET regexes,\r\n                                    // the behavior is not. In Perl the groups are numbered sequentially regardless of being named or not.\r\n                                    ++group_number;\r\n                                    if (i + 1 < perlExpr.Length)\r\n                                    {\r\n                                        if (perlExpr[i + 1] != '?')\r\n                                        {\r\n                                            ++i;\r\n                                            result.Append(\"(?<\");\r\n                                            result.Append(AnonymousGroupPrefix);\r\n                                            result.Append(group_number);\r\n                                            result.Append('>');\r\n                                            continue;\r\n                                        }\r\n                                        else\r\n                                            if (i + 2 < perlExpr.Length && perlExpr[i + 2] == ':')\r\n                                            {\r\n                                                // Pseudo-group, don't count.\r\n                                                --group_number;\r\n                                            }\r\n                                    }\r\n                                }\r\n                                else if (ch == '\\\\')\r\n                                    inner_state = 4;\r\n                                else\r\n                                    inner_state = 0;\r\n\r\n                                break;\r\n\r\n                            //groups\r\n                            case 1:\r\n                                if (ch == '?')\r\n                                    inner_state = 2;\r\n                                else if (ch != '(')// stay in inner_state == 1, because this can happen: ((?<blah>...))\r\n                                    inner_state = 0;\r\n                                break;\r\n                            case 2:\r\n                                if (ch == 'P')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 3;\r\n                                    continue; //skip 'P' from resulting pattern\r\n                                }\r\n                                else if (ch == '<')\r\n                                {\r\n                                    inner_state = 15;\r\n                                    break;\r\n                                }\r\n                                else if (ch == '\\'')\r\n                                {\r\n                                    i++;\r\n                                    result.Append('\\'');\r\n                                    result.Append(GroupPrefix);\r\n\r\n                                    inner_state = 0;\r\n                                    continue;\r\n                                }\r\n\r\n                                inner_state = 0;\r\n                                break;\r\n                            case 3: // '(?P'\r\n                                if (ch == '=')\r\n                                {\r\n                                    ++i;\r\n                                    inner_state = 12;\r\n                                    continue; //skip '=' from resulting pattern\r\n                                }\r\n                                else if (ch != '<')// if P wasn't part of \"(?P<name> ... )\" neither '(?P=name)' back reference, so put it back to the pattern\r\n                                {\r\n                                    result.Append('P');\r\n                                }\r\n                                else if (ch == '<')\r\n                                {\r\n                                    i++;\r\n                                    result.Append('<');\r\n                                    result.Append(GroupPrefix);\r\n\r\n                                    inner_state = 0;\r\n                                    continue;\r\n                                }\r\n\r\n                                inner_state = 0;\r\n                                break;\r\n\r\n                            // /g[0-9]{1,2} back references\r\n                            case 5: // '\\g'\r\n\r\n                                result.Append('\\\\');\r\n\r\n                                if (ch == '{')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 6;\r\n                                    continue; // skip '{' from resulting pattern\r\n                                }\r\n                                else if (ch >= '0' && ch <= '9')\r\n                                {\r\n                                    inner_state = 0; // just copy the rest of the pattern\r\n                                }\r\n                                else\r\n                                {\r\n                                    result.Append('g'); // unexpected character after '/g', so put g back to pattern\r\n                                    inner_state = 0;\r\n                                }\r\n                                break;\r\n                            case 6: // '\\g{'\r\n\r\n                                if (ch >= '0' && ch <= '9')\r\n                                {\r\n                                    inner_state = 7;\r\n                                }\r\n                                else\r\n                                {\r\n                                    // it can be named group\r\n                                    result.Append(\"k<\");\r\n                                    result.Append(GroupPrefix);\r\n                                    inner_state = 10;\r\n\r\n                                    //result.Append(\"g{\"); // unexpected character after '/g{', so put it back to pattern\r\n                                    //group_state = 0;\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case 7:// '\\g{[0-9]'\r\n\r\n                                if (ch == '}')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 9;\r\n                                    continue; // skip '}' from resulting pattern\r\n                                }\r\n                                else if (ch >= '0' && ch <= '9')\r\n                                {\r\n                                    inner_state = 8;\r\n                                }\r\n                                else\r\n                                {\r\n                                    //name of the group starts with a number\r\n                                    //put behind PreGroupNameSign\r\n                                    result.Insert(result.Length - 1, \"k<\");\r\n                                    result.Insert(result.Length - 1, GroupPrefix);\r\n                                    inner_state = 14;\r\n                                }\r\n\r\n\r\n\r\n                                break;\r\n\r\n                            case 8: // '\\g{[0-9][0-9]'\r\n\r\n                                if (ch == '}')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 9;\r\n                                    continue; // skip '}' from resulting pattern\r\n                                }\r\n                                else\r\n                                {\r\n                                    //name of the group starts with a number\r\n                                    //put behind PreGroupNameSign\r\n                                    result.Insert(result.Length - 1, \"k<\");\r\n                                    result.Insert(result.Length - 2, GroupPrefix);\r\n                                    inner_state = 14;\r\n                                }\r\n\r\n                                // there is just 99 back references possible\r\n\r\n                                inner_state = 0;\r\n\r\n                                break;\r\n\r\n                            case 9:// '\\g{[0-9][0-9]?}'\r\n\r\n                                if (ch >= '0' && ch <= '9')\r\n                                {\r\n                                    result.Append(\"(?#)\"); // put this to the resulting pattern to separate number of the reference from number that follows\r\n                                }\r\n\r\n                                inner_state = 0;\r\n\r\n                                break;\r\n\r\n                            // named back references\r\n                            case 10:// '\\g{.*?}' | '\\k{.*?}'\r\n\r\n                                if (ch == '}')\r\n                                {\r\n                                    ++i;\r\n                                    result.Append('>');\r\n                                    inner_state = 0;\r\n                                    continue; // skip '}' from resulting pattern\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case 11:// '\\k'\r\n\r\n                                if (ch == '{')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 10;\r\n                                    result.Append('<');\r\n                                    result.Append(GroupPrefix);\r\n                                    continue; // skip '{' from resulting pattern\r\n                                }\r\n                                else if (ch == '<')\r\n                                {\r\n                                    i++;\r\n                                    result.Append('<');\r\n                                    result.Append(GroupPrefix);\r\n\r\n                                    inner_state = 0;\r\n                                    continue;\r\n                                }\r\n                                else if (ch == '\\'')\r\n                                {\r\n                                    i++;\r\n                                    result.Append('\\'');\r\n                                    result.Append(GroupPrefix);\r\n\r\n                                    inner_state = 0;\r\n                                    continue;\r\n                                }\r\n\r\n                                inner_state = 0;\r\n\r\n                                break;\r\n\r\n                            // transforming '(?P=name)' to '\\k<name>'\r\n                            case 12: // '(?P='\r\n\r\n                                // (? was already put in the pattern, so replace it with '\\k'\r\n                                result[result.Length - 2] = '\\\\';\r\n                                result[result.Length - 1] = 'k';\r\n\r\n                                // add '<' so it is '\\k<'\r\n                                result.Append('<');\r\n                                result.Append(GroupPrefix);\r\n\r\n                                inner_state = 13;\r\n\r\n                                break;\r\n\r\n                            case 13: // '(?P=.*?'\r\n\r\n                                if (ch == ')')\r\n                                {\r\n                                    ++i;\r\n                                    result.Append('>');\r\n                                    inner_state = 0;\r\n                                    continue; // skip ')' from resulting pattern\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case 14:// '\\g{[0-9].*?'\r\n\r\n                                if (ch == '}')\r\n                                {\r\n                                    i++;\r\n                                    inner_state = 9;\r\n                                    result.Append(\">\");\r\n                                    continue; // skip '}' from resulting pattern\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case 15:// (?<\r\n\r\n                                //Add group prefix only if it's not lookbehind assertions\r\n                                //(?<! negative\r\n                                //(?<= positive\r\n                                if (ch != '!' && ch != '=')\r\n                                {\r\n                                    result.Append(GroupPrefix);\r\n\r\n                                }\r\n\r\n                                inner_state = 0;\r\n\r\n                                break;\r\n\r\n\r\n\r\n                            default: inner_state = 0; break;\r\n                        }\r\n\r\n                        if ((opt & PerlRegexOptions.Ungreedy) != 0)\r\n                        {\r\n                            // match quantifier ?,*,+,{n,m} at the position i:\r\n                            Match m = quantifiers.Match(perlExpr, i);\r\n\r\n                            // quantifier matched; quentifier '?' hasn't to be preceded by '(' - a grouping construct '(?'\r\n                            if (m.Success && (m.Value != \"?\" || i == 0 || perlExpr[i - 1] != '('))\r\n                            {\r\n                                // two quantifiers: \r\n                                if (last_quantifier)\r\n                                    throw new ArgumentException(LibResources.GetString(\"regexp_duplicate_quantifier\", i));\r\n\r\n                                // append quantifier:\r\n                                result.Append(perlExpr, i, m.Length);\r\n                                i += m.Length;\r\n\r\n                                if (i < perlExpr.Length && perlExpr[i] == '?')\r\n                                {\r\n                                    // skip question mark to make the quantifier greedy:\r\n                                    i++;\r\n                                }\r\n                                else if (i < perlExpr.Length && perlExpr[i] == '+')\r\n                                {\r\n                                    // TODO: we do not yet support possesive quantifiers\r\n                                    //       so we just skip the attribute it and pray\r\n                                    //       nobody will ever realize :-)\r\n                                    i++;\r\n                                }\r\n                                else\r\n                                {\r\n                                    // add question mark to make the quantifier lazy:\r\n                                    if (result.Length != 0 && result[result.Length - 1] == '?')\r\n                                    {\r\n                                        // HACK: Due to the issue in .NET regex we can't use \"??\" because it isn't interpreted correctly!!\r\n                                        // (for example \"^(ab)??$\" matches with \"abab\", but it shouldn't!!)\r\n                                    }\r\n                                    else\r\n                                        result.Append('?');\r\n                                }\r\n\r\n                                last_quantifier = true;\r\n                                continue;\r\n                            }\r\n                        }\r\n\r\n                        last_quantifier = false;\r\n\r\n                        if (ch == '$' && (opt & PerlRegexOptions.DollarMatchesEndOfStringOnly) != 0)\r\n                        {\r\n                            // replaces '$' with '\\z': \r\n                            result.Append(@\"\\z\");\r\n                            break;\r\n                        }\r\n\r\n                        if (ch == '[')\r\n                            state = 1;\r\n\r\n                        Append(result, ch);\r\n                        break;\r\n\r\n                    case 1: // first character of character class\r\n                        if (escaped)\r\n                        {\r\n                            result.Append('\\\\');\r\n                            Append(result, ch);\r\n                            range_from_character = ch;\r\n                            state = 2;\r\n                            break;\r\n                        }\r\n\r\n                        // special characters:\r\n                        if (ch == '^' || ch == ']' || ch == '-')\r\n                        {\r\n                            Append(result, ch);\r\n                        }\r\n                        else\r\n                        {\r\n                            // other characters are not consumed here, for example [[:space:]abc] will not match if the first\r\n                            // [ is appended here.\r\n                            state = 2;\r\n                            goto case 2;\r\n                        }\r\n                        break;\r\n\r\n                    case 2: // inside of character class\r\n                        if (escaped)\r\n                        {\r\n                            result.Append('\\\\');\r\n                            Append(result, ch);\r\n                            range_from_character = ch;\r\n                            leaving_range = false;\r\n                            break;\r\n                        }\r\n\r\n                        if (ch == '-' && !leaving_range)\r\n                        {\r\n                            state = 3;\r\n                            break;\r\n                        }\r\n                        leaving_range = false;\r\n\r\n                        // posix character classes\r\n                        Match match = posixCharClasses.Match(perlExpr.Substring(i), 0);\r\n                        if (match.Success)\r\n                        {\r\n                            string chars = PosixRegExp.BracketExpression.CountCharacterClass(match.Groups[2].Value);\r\n                            if (chars == null)\r\n                                throw new ArgumentException(/*TODO*/ String.Format(\"Unknown character class '{0}'\", match.Groups[2].Value));\r\n\r\n                            if (match.Groups[1].Value.Length > 0)\r\n                                throw new ArgumentException(/*TODO*/ \"POSIX character classes negation not supported.\");\r\n\r\n                            result.Append(chars);\r\n                            range_from_character = -1;  // -1 means, it is not rangable :)\r\n                            i += match.Length - 1; // +1 is added just behind the switch\r\n                            break;\r\n                        }\r\n\r\n                        if (ch == ']')\r\n                        {\r\n                            addedSurrogate2Ranges = null;   // drop the cache of ranges\r\n                            state = 0;\r\n                        }\r\n\r\n                        // append <ch>\r\n                        range_from_character = ch;\r\n\r\n                        if (ch == '-')\r\n                            result.Append(\"\\\\x2d\");\r\n                        else\r\n                            AppendEscaped(result, ch);\r\n\r\n                        break;\r\n\r\n                    case 3: // range previous character was '-'\r\n                        if (!escaped && ch == ']')\r\n                        {\r\n                            if (range_from_character > char.MaxValue)\r\n                                throw new ArgumentException(\"Cannot range from an UTF-32 character to unknown.\");\r\n\r\n                            result.Append(\"-]\");\r\n                            addedSurrogate2Ranges = null;   // drop the cache of ranges\r\n                            state = 0;\r\n                            break;\r\n                        }\r\n\r\n                        //string range;\r\n                        //int error;\r\n                        //if (!PosixRegExp.BracketExpression.CountRange(result[result.Length - 1], ch, out range, out error))\r\n                        //{\r\n                        //    if ((error != 1) || (!CountUnicodeRange(result[result.Length - 1], ch, out range)))\r\n                        //    {\r\n                        //        Debug.Assert(error == 2);\r\n                        //        throw new ArgumentException(LibResources.GetString(\"range_first_character_greater\"));\r\n                        //    }\r\n                        //}\r\n                        //PosixRegExp.BracketExpression.EscapeBracketExpressionSpecialChars(result, range); // left boundary is duplicated, but doesn't matter...\r\n\r\n                        if (addedSurrogate2Ranges == null)\r\n                            addedSurrogate2Ranges = new HashSet<uint>();    // initialize the cache of already added character ranges, invalidated at the end of character class\r\n\r\n                        if (ch != range_from_character)\r\n                        {\r\n                            // <from>-<ch>:\r\n\r\n                            // 1. <utf16>-<utf16>\r\n                            // 2. <utf16>-<utf32>\r\n                            // 3. <utf32>-<utf32>\r\n                            if (range_from_character <= char.MaxValue)\r\n                            {\r\n                                if (ch <= char.MaxValue)\r\n                                {\r\n                                    //symbol order can be different, not testet with other modes\r\n                                    var seqBreak = false;\r\n                                    int from = 0;\r\n                                    int to = 0;\r\n                                    if (encoding.IsSingleByte)\r\n                                    {\r\n                                        var bytes = encoding.GetBytes(new char[] { (char)range_from_character });\r\n                                        from = (int)bytes[0];\r\n                                        bytes = encoding.GetBytes(new char[] { (char)ch });\r\n                                        to = (int)bytes[0];\r\n                                        var lastChar = range_from_character;\r\n                                        for (int j = from; j < to; j++)\r\n                                        {\r\n                                            var chars = encoding.GetChars(new[] { (byte)(j + 1) });\r\n                                            if (chars[0] - lastChar != 1)\r\n                                            {\r\n                                                seqBreak = true;\r\n                                                break;\r\n                                            }\r\n                                            lastChar = chars[0];\r\n                                        }\r\n                                    }\r\n\r\n                                    // 1.\r\n                                    if (!seqBreak)\r\n                                    {\r\n                                        result.Append('-');\r\n                                        AppendEscaped(result, ch);\r\n                                    }\r\n                                    else\r\n                                    {\r\n                                        for (int j = from; j < to; j++)\r\n                                        {\r\n                                            var chars = encoding.GetChars(new[] { (byte)(j + 1) });\r\n                                            AppendEscaped(result, chars[0]);\r\n                                        }\r\n                                    }\r\n                                }\r\n                                else\r\n                                {\r\n                                    // 2.\r\n                                    result.Append('-');\r\n                                    AppendEscaped(result, char.MaxValue);\r\n\r\n                                    // count <char.MaxValue+1>-<ch>\r\n                                    CountUTF32Range(result, char.MaxValue + 1, ch, addedSurrogate2Ranges);\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                // 3. utf32 range\r\n                                result.Length -= 2;\r\n                                CountUTF32Range(result, range_from_character, ch, addedSurrogate2Ranges);\r\n                            }\r\n                        }\r\n\r\n                        state = 2;\r\n                        leaving_range = true;\r\n                        range_from_character = -1;\r\n                        break;\r\n                }\r\n\r\n                i++;\r\n            }\r\n\r\n            return ConvertPossesiveToAtomicGroup(result);\r\n        }\r\n\r\n        private static void AppendEscaped(StringBuilder/*!*/sb, int ch)\r\n        {\r\n            Debug.Assert(sb != null);\r\n\r\n            if (ch < 0x80 && ch != '\\\\' && ch != '-')\r\n                sb.Append((char)ch);\r\n            else\r\n                AppendUnicode(sb, ch);\r\n        }\r\n\r\n        private static void Append(StringBuilder/*!*/sb, int ch)\r\n        {\r\n            Debug.Assert(sb != null);\r\n            Debug.Assert(ch >= 0);\r\n\r\n            if (ch < Char.MaxValue && ch > 0)\r\n                sb.Append((char)ch);\r\n            else\r\n                AppendUnicode(sb, ch);\r\n        }\r\n\r\n        private static void AppendUnicode(StringBuilder/*!*/sb, int ch)\r\n        {\r\n            Debug.Assert(sb != null);\r\n\r\n            if (ch <= Char.MaxValue)\r\n                sb.Append(@\"\\u\" + ((int)ch).ToString(\"X4\"));\r\n            else\r\n                sb.Append(Char.ConvertFromUtf32(ch));\r\n        }\r\n\r\n        #region Conversion of possesive quantifiers\r\n\r\n        internal struct brace\r\n        {\r\n            public brace(int position, char braceType)\r\n            {\r\n                this.position = position;\r\n                this.braceType = braceType;\r\n            }\r\n\r\n            public int position;\r\n            public char braceType;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convert possesive quantifiers to atomic group, which .NET support.\r\n        /// </summary>\r\n        /// <param name=\"pattern\"></param>\r\n        /// <returns></returns>\r\n        /// <remarks>Works on these cases *+, ++, ?+, {}+\r\n        /// </remarks>\r\n        private static string ConvertPossesiveToAtomicGroup(StringBuilder pattern)\r\n        {\r\n            const int preallocatedAttomicGroups = 10;\r\n            const string atomicGroupStart = \"(?>\";\r\n            const string atomicGroupEnd = \")\";\r\n            Stack<brace> braceStack = new Stack<brace>(16);\r\n            int state = 0;\r\n            int escape_state = 0;\r\n            int escapeSequenceStart = 0;\r\n            int offset = 0;\r\n\r\n            StringBuilder sb = new StringBuilder(pattern.Length + atomicGroupStart.Length * preallocatedAttomicGroups);//, 0, pattern.Length, pattern.Length + 4 * 10); // (?>)\r\n\r\n            Action<int> addAtomicGroup =\r\n                (start) =>\r\n                {\r\n                    sb.Insert(start, atomicGroupStart);\r\n                    sb.Append(atomicGroupEnd);\r\n                    offset += atomicGroupStart.Length;\r\n                };\r\n\r\n            Action<int, char> pushToStack = (pos, ch) =>\r\n            {\r\n                braceStack.Push(new brace(pos + offset, ch));\r\n            };\r\n\r\n            brace LastBrace = new brace();\r\n\r\n            bool escaped = false;\r\n\r\n            int i = 0;\r\n            while (i < pattern.Length)\r\n            {\r\n                char ch = pattern[i];\r\n\r\n                //TODO: handle comments\r\n\r\n                if (!escaped)\r\n                {\r\n                    switch (state)\r\n                    {\r\n                        case 0:\r\n                            if (ch == '(')\r\n                            {\r\n                                pushToStack(i, ch);\r\n                                state = 2;\r\n                            }\r\n                            else if (ch == '[')\r\n                            {\r\n                                pushToStack(i, ch);\r\n                                state = 12;\r\n                            }\r\n\r\n                            break;\r\n\r\n\r\n                        case 2: // (. \r\n                            if (ch == ')')\r\n                                state = 3;\r\n                            else if (ch == '(') //nested (\r\n                                pushToStack(i, ch);\r\n                            else if (ch == '[')\r\n                            {\r\n                                state = 12;\r\n                                pushToStack(i, ch);\r\n                            }\r\n\r\n                            break;\r\n\r\n                        case 3: // (...)\r\n\r\n                            LastBrace = braceStack.Pop();\r\n\r\n                            if (ch == '*' || ch == '?' || ch == '+')\r\n                                state = 4;\r\n                            else if (ch == '{')\r\n                                state = 5;\r\n                            else\r\n                            {\r\n                                state = DecideState(pattern, braceStack);\r\n                                continue;\r\n                            }\r\n\r\n                            break;\r\n\r\n                        case 4: // (...)*+ | (...)++ | (...)?+\r\n\r\n                            if (ch == '+')\r\n                            {\r\n                                addAtomicGroup(LastBrace.position);\r\n\r\n                                state = DecideState(pattern, braceStack);\r\n                                ++i;\r\n                                continue;\r\n                            }\r\n                            else\r\n                                state = DecideState(pattern, braceStack);\r\n\r\n                            break;\r\n\r\n                        case 5: // (...){\r\n\r\n                            if (ch == '}')\r\n                                state = 4;\r\n                            //if (!char.IsDigit(ch))\r\n                            //{\r\n                            //    state = DecideState(pattern, braceStack);\r\n                            //}\r\n\r\n                            break;\r\n\r\n                        case 12: // [. \r\n                            if (ch == ']')\r\n                                state = 13;\r\n                            //else \r\n                            //if (ch == '(')\r\n                            //{\r\n                            //    state = 2;\r\n                            //    pushToStack(i, ch);\r\n                            //}\r\n                            else if (ch == '[')\r\n                            {\r\n                                pushToStack(i, ch);\r\n                            }\r\n\r\n                            break;\r\n\r\n                        case 13: // [...]\r\n\r\n                            LastBrace = braceStack.Pop();\r\n\r\n                            if (ch == '*' || ch == '?' || ch == '+')\r\n                                state = 14;\r\n                            else if (ch == '{')\r\n                                state = 15;\r\n                            else\r\n                                state = DecideState(pattern, braceStack);\r\n\r\n\r\n                            break;\r\n\r\n                        case 14: // [...]*+\r\n\r\n                            if (ch == '+')\r\n                            {\r\n                                addAtomicGroup(LastBrace.position);\r\n\r\n                                state = DecideState(pattern, braceStack);\r\n                                ++i;\r\n                                continue;\r\n                            }\r\n                            else\r\n                            {\r\n                                state = DecideState(pattern, braceStack);\r\n                                continue;\r\n                            }\r\n\r\n                        case 15: // [...]{\r\n\r\n                            if (ch == '}')\r\n                                state = 4;\r\n\r\n                            break;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    //escaped\r\n\r\n                    switch (escape_state)\r\n                    {\r\n                        case 0:\r\n\r\n                            if (ch == '\\\\')\r\n                            {\r\n                                escape_state = 0;\r\n                            }\r\n                            else\r\n                            {\r\n                                escape_state = 1;\r\n                            }\r\n\r\n                            break;\r\n\r\n                        case 1:// \\.\r\n\r\n                            if (ch == '*' || ch == '?' || ch == '+')\r\n                                escape_state = 2;\r\n                            else\r\n                                escape_state = 0;\r\n\r\n\r\n                            break;\r\n\r\n                        case 2:\r\n\r\n                            if (ch == '+')\r\n                            {\r\n                                escape_state = 0;\r\n                                addAtomicGroup(escapeSequenceStart);\r\n                                ++i;\r\n                            }\r\n                            else\r\n                            {\r\n                                escape_state = 0;\r\n                            }\r\n\r\n                            break;\r\n\r\n                    }\r\n\r\n                    if (escape_state == 0)\r\n                    {\r\n                        escaped = false;\r\n                        continue;\r\n                    }\r\n                }\r\n\r\n\r\n                if (ch == '\\\\' && escaped == false)\r\n                {\r\n                    escaped = true;\r\n                    escapeSequenceStart = i + offset;\r\n                }\r\n\r\n                ++i;\r\n                sb.Append(ch);\r\n\r\n            }\r\n\r\n            return sb.ToString();\r\n\r\n        }\r\n        private static int DecideState(StringBuilder pattern, Stack<brace> braceStack)\r\n        {\r\n            int state;\r\n            if (braceStack.Count > 0)\r\n            {\r\n                brace SecondToLastBrace = braceStack.Pop();\r\n                braceStack.Push(SecondToLastBrace);\r\n\r\n                if (SecondToLastBrace.braceType == '(')\r\n                    state = 2;\r\n                else\r\n                    state = 12;\r\n            }\r\n            else\r\n                state = 0;\r\n\r\n            return state;\r\n        }\r\n\r\n        #endregion\r\n\r\n        ///// <summary>\r\n        ///// Simple version of 'PosixRegExp.BracketExpression.CountRange' function. Generates string\r\n        ///// with all characters in specified range, but uses unicode encoding.\r\n        ///// </summary>\r\n        ///// <param name=\"f\">Lower bound</param>\r\n        ///// <param name=\"t\">Upper bound</param>\r\n        ///// <param name=\"range\">Returned string</param>\r\n        ///// <returns>Returns false if lower bound is larger than upper bound</returns>\r\n        //private static bool CountUnicodeRange(char f, char t, out string range)\r\n        //{\r\n        //    range = \"\";\r\n        //    if (f > t) return false;\r\n        //    StringBuilder sb = new StringBuilder(t - f);\r\n        //    for (char c = f; c <= t; c++) sb.Append(c);\r\n        //    range = sb.ToString();\r\n        //    return true;\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Ranges characters from <paramref name=\"chFrom\"/> up to <paramref name=\"chTo\"/> inclusive, where characters are UTF32.\r\n        /// We will only list every from surrogate pair once (same result as writing all the characters one by one).\r\n        /// </summary>\r\n        /// <param name=\"sb\"></param>\r\n        /// <param name=\"chFrom\"></param>\r\n        /// <param name=\"chTo\"></param>\r\n        /// <param name=\"addedSurrogate2Ranges\">Cache of already added character pairs to avoid duplicitous character ranges.</param>\r\n        private static void CountUTF32Range(StringBuilder/*!*/sb, int chFrom, int chTo, HashSet<uint>/*!*/addedSurrogate2Ranges)\r\n        {\r\n            Debug.Assert(addedSurrogate2Ranges != null);\r\n            Debug.Assert(chFrom > Char.MaxValue);\r\n            Debug.Assert(chTo > Char.MaxValue);\r\n\r\n            //\r\n            chFrom -= char.MaxValue + 1;\r\n            chTo -= char.MaxValue + 1;\r\n\r\n            // whether the range of the same surrogate1 starts\r\n            bool start = true;\r\n\r\n            // range UTF32 characters\r\n            for (; chFrom <= chTo; chFrom++)\r\n            {\r\n                // current UTF32 character \"<a1><a2>\":\r\n                char a1 = (char)(chFrom / 1024 + 55296);    // surrogate pair [1]\r\n                char a2 = (char)(chFrom % 1024 + 56320);    // surrogate pair [2]\r\n\r\n                //var str = new string(new char[] { a1, a2 });  // single UTF32 character\r\n\r\n                // output:\r\n                if (start)  // first character from the range of the same surrogate1\r\n                {\r\n                    start = false;\r\n                    // \"<a1><a2>\"\r\n\r\n                    // try to compress <a1>:\r\n\r\n                    // convert \"-ab\" to \"-b\", where a+1 == b\r\n                    if (sb.Length >= 2 &&\r\n                        sb[sb.Length - 1] + 1 == a1 &&\r\n                        sb[sb.Length - 2] == '-' &&\r\n                        (sb.Length < 3 || sb[sb.Length - 3] != '\\\\'))    // '-' is not escaped\r\n                    {\r\n                        sb[sb.Length - 1] = a1; // extend the range\r\n                    }\r\n                    // convert \"abc\" to \"a-c\", where a+2 == b+1 == c\r\n                    else if (sb.Length >= 2 &&\r\n                            sb[sb.Length - 1] + 1 == a1 &&\r\n                            sb[sb.Length - 2] + 2 == a1)\r\n                    {\r\n                        // a,b,c are all UTF32 surrogate1\r\n                        sb[sb.Length - 1] = '-';\r\n                        sb.Append(a1);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append(a1);\r\n                    }\r\n\r\n                    //\r\n                    sb.Append(a2);\r\n                }\r\n                else if ((chFrom + 1) > chTo || a1 != (char)((chFrom + 1) / 1024 + 55296)) // finish the range (end of the range || different next surrogate1)\r\n                {\r\n                    AddCharacterRangeChecked(sb, a2, addedSurrogate2Ranges);\r\n                    start = true;\r\n                }\r\n                else\r\n                {\r\n                    // in range ...\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds \"-<paramref name=\"chTo\"/>\" iff there is not the same character range in the result already. Otherwise the last character form <paramref name=\"sb\"/> is removed.\r\n        /// </summary>\r\n        /// <param name=\"sb\"><see cref=\"StringBuilder\"/> with lower bound of the range already added.</param>\r\n        /// <param name=\"chTo\">Upper bound of the range.</param>\r\n        /// <param name=\"addedSurrogate2Ranges\">Cache of already added character pairs.</param>\r\n        /// <remarks>Assumes there is starting character at the end of <paramref name=\"sb\"/>.</remarks>\r\n        private static void AddCharacterRangeChecked(StringBuilder/*!*/sb, char chTo, HashSet<uint>/*!*/addedSurrogate2Ranges)\r\n        {\r\n            Debug.Assert(addedSurrogate2Ranges != null);\r\n            Debug.Assert(sb.Length > 0);\r\n\r\n            char previous = sb[sb.Length - 1];  // the lower bound already in the result\r\n            uint print = (uint)previous | ((uint)chTo << 16); // the \"hash\" of the character range to be inserted\r\n\r\n            if (addedSurrogate2Ranges.Add(print))   // is the <print> range not in the result yet?\r\n            {\r\n                // and of the range with the same surrogate1\r\n                // \"<previous>-<chTo>\" wil be in the <sb>\r\n                sb.Append('-');\r\n                sb.Append(chTo);\r\n            }\r\n            else\r\n            {\r\n                // \"<previous>-<chTo>\" already in the result, just \"remove\" the last character from the <sb>\r\n                sb.Length--;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Modifies regular expression so it matches only at the beginning of the string.\r\n        /// </summary>\r\n        /// <param name=\"expr\">Regular expression to modify.</param>\r\n        private static void ModifyRegExpAnchored(ref string expr)\r\n        {\r\n            // anchored means regular expression should match only at the beginning of the string\r\n            // => add ^ at the beginning if there is no one.\r\n            if (expr.Length == 0 || expr[0] != '^')\r\n                expr.Insert(0, \"^\");\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/RegExpPosix.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Pavel Novak and Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implements POSIX extended regular expressions as they are implemented in PHP.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtEreg)]\r\n\tpublic static class PosixRegExp\r\n\t{\r\n\t\t#region sql_regcase\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a valid regular expression which will match string, ignoring case.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">String for that is case insensitive regular expression created.</param>\r\n\t\t/// <returns>Regular expression matching str case insensitive.\r\n\t\t/// This expression is string with each character converted to a bracket expression;\r\n\t\t/// this bracket expression contains that character's uppercase and lowercase form if applicable,\r\n\t\t/// otherwise it contains only the original character.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"sql_regcase\")]\r\n\t\tpublic static string GetCaseInsensitivePattern(string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"sql_regcase\");\r\n\r\n\t\t\tif (String.IsNullOrEmpty(str)) return \"\";\r\n\r\n\t\t\tStringBuilder regcaseStr = new StringBuilder(str.Length * 4); // estimated necessary capacity of StringBuilder\r\n\t\t\tchar upper;\r\n\t\t\tchar lower;\r\n\r\n\t\t\tforeach (char ch in str)\r\n\t\t\t{\r\n\t\t\t\tupper = Char.ToUpper(ch);\r\n\t\t\t\tlower = Char.ToLower(ch);\r\n\r\n\t\t\t\tif (upper == lower) //non-alphabetic character\r\n\t\t\t\t{\r\n\t\t\t\t\tregcaseStr.Append('[');\r\n\t\t\t\t\tregcaseStr.Append(ch);\r\n\t\t\t\t\tregcaseStr.Append(']');\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tregcaseStr.Append('[');\r\n\t\t\t\t\tregcaseStr.Append(upper);\r\n\t\t\t\t\tregcaseStr.Append(lower);\r\n\t\t\t\t\tregcaseStr.Append(']');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn regcaseStr.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ereg_replace, eregi_replace\r\n\r\n\t\t/// <summary>\r\n\t\t/// This function scans str for matches to pattern and replaces the matched text with replacement.\r\n\t\t/// The modified string is returned. Pattern can contain parenthesized substrings in this case\r\n\t\t/// replacement may contain substrings of the form \\\\digit, they will be replaced by the text\r\n\t\t/// matching the digit'th parenthesized substring. \\\\0 means the entire contents of string.\r\n\t\t/// Up to nine substrings (1..9) may be used. Parentheses may be nested, in which case they are counted by the opening parenthesis. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression that is matched to str.</param>\r\n\t\t/// <param name=\"replacement\">String that will be placed instead of string that matched pattern.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <returns>Modified string with replacements. If there is no match found, unmodified str is returned.</returns>\r\n\t\t[ImplementsFunction(\"ereg_replace\")]\r\n\t\tpublic static string Replace(string pattern, string replacement, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"ereg_replace\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// convert Posix pattern to .NET regular expression and create regular expression object\r\n\t\t\t\tRegex r = new Regex(ConvertPosix2DotNetExpr(pattern));\r\n\r\n\t\t\t\t// convert Posix replacement to .NET regular expression\r\n\t\t\t\t// (there may be \\\\digit references to pattern) and replace\r\n\t\t\t\treturn r.Replace(str, ConvertPosix2DotNetRepl(replacement, r.GetGroupNumbers()));\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\t// PhpExceptions rethrow immediately\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\t// all other exceptions convert to PhpException, we want to handle they in the same way\r\n\t\t\t\t// (display to user in web browser etc.)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Case insensitive version of ereg_replace.\r\n\t\t/// Ignores case distinction when matching characters. Other behaviour is identical to ereg_replace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression that is matched to str.</param>\r\n\t\t/// <param name=\"replacement\">String that will be placed instead of string that matched pattern.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <returns>Modified string with replacements. If there is no match found, unmodified str is returned.</returns>\r\n\t\t[ImplementsFunction(\"eregi_replace\")]\r\n\t\tpublic static string ReplaceIgnoreCase(string pattern, string replacement, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"eregi_replace\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// convert Posix pattern to .NET regular expression and create regular expression object\r\n\t\t\t\tRegex r = new Regex(ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase);\r\n\r\n\t\t\t\t// convert Posix replacement to .NET regular expression\r\n\t\t\t\t// (there may be \\\\digit references to pattern) and replace\r\n\t\t\t\treturn r.Replace(str, ConvertPosix2DotNetRepl(replacement, r.GetGroupNumbers()));\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\t// PhpExceptions rethrow immediately\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\t// all other exceptions convert to PhpException, we want to handle they in the same way\r\n\t\t\t\t// (display to user in web browser etc.)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ereg, eregi\r\n\r\n\t\t/// <summary>\r\n\t\t/// Scans str for matches to the regular expression pattern (case sensitive).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <returns>True if there is a match, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"ereg\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Match(string pattern, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"ereg\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// convert and find match\r\n\t\t\t\tif (Regex.IsMatch(str, ConvertPosix2DotNetExpr(pattern)))\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\t// all other exceptions convert to PhpException, we want to handle they in the same way\r\n\t\t\t\t// (display to user in web browser etc.)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Scans <c>str</c> for matches to the regular expression <c>pattern</c> (case sensitive).\r\n\t\t/// If <c>pattern</c> contains parentheses and matches are found for parenthesized substrings, these matches\r\n\t\t/// are stored in <c>registers</c> array.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <c>registers[0]</c> contains whole matched string,\r\n\t\t/// <c>registers[1]</c> to <c>registers[9]</c> contain matched substrings, if applicable.\r\n\t\t/// Parenthesized substrigs are counted according to open parenthesis.\r\n\t\t/// \r\n\t\t/// Extension to PHP:  if <c>pattern</c> contains\r\n\t\t/// more than 9 parenthesis all of matched substrings are stored in <c>registers</c> array,\r\n\t\t/// not only first 9 of them.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"pattern\">Regular expression.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <param name=\"registers\">Array containing matches for parenthesized substrings.</param>\r\n\t\t/// <returns>True if there is a match, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"ereg\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Match(string pattern, string str, PhpReference registers)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"ereg\");\r\n\r\n\t\t\tMatch m;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tm = Regex.Match(str, ConvertPosix2DotNetExpr(pattern));\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\tif (!m.Success)\r\n\t\t\t\treturn -1;\r\n\r\n\t\t\t// fill registers\r\n\t\t\tPhpArray result = new PhpArray(m.Groups.Count, 0);\r\n\t\t\tfor (int i = 0; i < m.Groups.Count; i++)\r\n\t\t\t{\r\n\t\t\t\t// index 0 contains string that suits the whole reg. expression\r\n\t\t\t\tstring value = m.Groups[i].Value;\r\n\t\t\t\tresult.Add(i, (value.Length == 0 ? (object)false : (object)value));\r\n\t\t\t}\r\n\t\t\tregisters.value = result;\r\n\r\n\t\t\tint matched_length = m.Groups[0].Value.Length; // match was successful, at least index 0 exist\r\n\t\t\t// return 1 if the length of matched string is zero (according to PHP manual)\r\n\t\t\tif (matched_length == 0)\r\n\t\t\t\treturn 1;\r\n\r\n\t\t\treturn matched_length;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Case insensitive variation of ereg function.\r\n\t\t/// \r\n\t\t/// <see>ereg()</see>\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <returns>True if there is a match, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"eregi\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int MatchIgnoreCase(string pattern, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"eregi\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// convert and find match\r\n\t\t\t\tif (Regex.IsMatch(str, ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase))\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\t// all other exceptions convert to PhpException, we want to handle they in the same way\r\n\t\t\t\t// (display to user in web browser etc.)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Case insensitive variation of ereg function.\r\n\t\t/// \r\n\t\t/// <see>ereg()</see>\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression.</param>\r\n\t\t/// <param name=\"str\">Scanned string.</param>\r\n\t\t/// <param name=\"registers\">Array containing matches for parenthesized substrings.</param>\r\n\t\t/// <returns>True if there is a match, false otherwise.</returns>\r\n\t\t[ImplementsFunction(\"eregi\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int MatchIgnoreCase(string pattern, string str, PhpReference registers)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"eregi\");\r\n\r\n\t\t\tMatch m;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tm = Regex.Match(str, ConvertPosix2DotNetExpr(pattern), RegexOptions.IgnoreCase);\r\n\t\t\t}\r\n\t\t\tcatch (PhpException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\tif (!m.Success)\r\n\t\t\t\treturn -1;\r\n\r\n\t\t\t// fill registers\r\n\t\t\tPhpArray result = new PhpArray(m.Groups.Count, 0);\r\n\t\t\tfor (int i = 0; i < m.Groups.Count; i++)\r\n\t\t\t{\r\n\t\t\t\t// index 0 contains string that suits the whole reg. expression\r\n\t\t\t\tresult.Add(i, m.Groups[i].Value);\r\n\t\t\t}\r\n\t\t\tregisters.value = result;\r\n\r\n\t\t\tint matched_length = m.Groups[0].Value.Length; // match was successful, at least index 0 exist\r\n\t\t\t// return 1 if the length of matched string is zero (according to PHP manual)\r\n\t\t\tif (matched_length == 0)\r\n\t\t\t\treturn 1;\r\n\r\n\t\t\treturn matched_length;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region split, spliti\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits string <c>str</c> to arrays of strings by regular expression <c>pattern</c>\r\n\t\t/// (case sensitive).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression matching string delimiters.</param>\r\n\t\t/// <param name=\"str\">String to split according to regular expression.</param>\r\n\t\t/// <returns>Array of substrings.</returns>\r\n\t\t[ImplementsFunction(\"split\")]\r\n\t\tpublic static PhpArray Split(string pattern, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"split\");\r\n\r\n\t\t\treturn DoSplit(\r\n\t\t\t  pattern,\r\n\t\t\t  str,\r\n\t\t\t  0,\r\n\t\t\t  false,\t// do not use limit (previous parameter)\r\n\t\t\t  false\t\t// case sensitive\r\n\t\t\t  );\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits string <c>str</c> to arrays of strings by regular expression <c>pattern</c>.\r\n\t\t/// Returned array contains max. <c>limit</c> elements. If there is more substrings in <c>str</c>,\r\n\t\t/// array contains only first <c>limit-1</c> substrings and last element contains the whole rest\r\n\t\t/// of input <c>string</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression matching string delimiters.</param>\r\n\t\t/// <param name=\"str\">String to split according to regular expression.</param>\r\n\t\t/// <param name=\"limit\">Max number of elements in returned array.</param>\r\n\t\t/// <returns>Array of substrings.</returns>\r\n\t\t[ImplementsFunction(\"split\")]\r\n\t\tpublic static PhpArray Split(string pattern, string str, int limit)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"split\");\r\n\r\n\t\t\treturn DoSplit(\r\n\t\t\t  pattern,\r\n\t\t\t  str,\r\n\t\t\t  limit,\r\n\t\t\t  true,\t\t// use limit (previous parameter)\r\n\t\t\t  false\t\t// case sensitive\r\n\t\t\t  );\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits string <c>str</c> to arrays of strings by regular expression <c>pattern</c>\r\n\t\t/// in case insensitive way.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression matching string delimiters.</param>\r\n\t\t/// <param name=\"str\">String to split according to regular expression.</param>\r\n\t\t/// <returns>Array of substrings.</returns>\r\n\t\t[ImplementsFunction(\"spliti\")]\r\n\t\tpublic static PhpArray SplitIgnoreCase(string pattern, string str)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"spliti\");\r\n\r\n\t\t\treturn DoSplit(\r\n\t\t\t  pattern,\r\n\t\t\t  str,\r\n\t\t\t  0,\r\n\t\t\t  false,\t// do not use limit (previous parameter)\r\n\t\t\t  true\t\t// ignore case\r\n\t\t\t  );\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits string <c>str</c> to arrays of strings by regular expression <c>pattern</c>\r\n\t\t/// in case insensitive way.\r\n\t\t/// Returned array contains max. <c>limit</c> elements. If there is more substrings in <c>str</c>,\r\n\t\t/// array contains only first <c>limit-1</c> substrings and last element contains the whole rest\r\n\t\t/// of input <c>string</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">Regular expression matching string delimiters.</param>\r\n\t\t/// <param name=\"str\">String to split according to regular expression.</param>\r\n\t\t/// <param name=\"limit\">Max number of elements in returned array.</param>\r\n\t\t/// <returns>Array of substrings.</returns>\r\n\t\t[ImplementsFunction(\"spliti\")]\r\n\t\tpublic static PhpArray SplitIgnoreCase(string pattern, string str, int limit)\r\n\t\t{\r\n            PhpException.FunctionDeprecated(\"spliti\");\r\n\r\n\t\t\treturn DoSplit(\r\n\t\t\t  pattern,\r\n\t\t\t  str,\r\n\t\t\t  limit,\r\n\t\t\t  true,\t\t// use limit (previous parameter)\r\n\t\t\t  true\t\t// ignore case\r\n\t\t\t  );\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implementation of functions family \"split\"\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"pattern\">POSIX regular expression that match delimiter.</param>\r\n\t\t/// <param name=\"str\">String to split.</param>\r\n\t\t/// <param name=\"limit\">Maximum elements of output array.</param>\r\n\t\t/// <param name=\"useLimit\">True if you want to use previous parameter.</param>\r\n\t\t/// <param name=\"ignoreCase\">True if <c>str</c> is matched case insensitive, false otherwise.</param>\r\n\t\t/// <returns>Array containing parts of str</returns>\r\n\t\tpublic static PhpArray DoSplit(string pattern, string str, int limit, bool useLimit, bool ignoreCase)\r\n\t\t{\r\n\t\t\tSystem.Array sAr;\r\n\r\n\t\t\tif (useLimit)\r\n\t\t\t{\r\n\t\t\t\t// in PHP limit < 1 means the same as 1, no error or warning is written\r\n\t\t\t\tif (limit < 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"limit_less_than_one\"));\r\n\t\t\t\t\tlimit = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// there is no static method with parameter \"limit\", we must instantiate Regex\r\n\t\t\t\tRegex reg = new Regex(ConvertPosix2DotNetExpr(pattern));\r\n\t\t\t\tsAr = reg.Split(str, limit);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// we can use static method\r\n\t\t\t\tsAr = Regex.Split(str, ConvertPosix2DotNetExpr(pattern));\r\n\t\t\t}\r\n\r\n\t\t\treturn new PhpArray(sAr, 0, sAr.Length);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t#region BracketExpression class\r\n\r\n\t\t/// <summary>\r\n\t\t/// Class representing one bracket expression ([...]) in whole regular expression.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// While converting POSIX regular expression to framework regexp if we determine start\r\n\t\t/// of bracket expression, characters are written to this class and it controls regexp processing.\r\n\t\t/// Nothing is written to output while processing, results are stored in this class and the\r\n\t\t/// converted bracket expression is written at once after to the output.\r\n\t\t/// </remarks>\r\n\t\tinternal class BracketExpression\r\n\t\t{\r\n\t\t\t/* vocabulary used in function naming:\r\n\t\t\t * COUNT sth. means get some string to appropriate input (character class name, range endpoints...)\r\n\t\t\t * UNROLL sth. means replace some parts in buffer with COUNTED string\r\n\t\t\t * OPTIMIZE means make some change in buffer that doesn't change meaning of reg. expr.\r\n\t\t\t */\r\n\r\n\t\t\t// string containing partially processed regular expression\r\n\t\t\t// in this string are written several parts, which substrings are which parts indicates parts array \r\n\t\t\tprivate StringBuilder buffer;\r\n\r\n\t\t\tconst int initialNumberOfParts = 30;\r\n\t\t\tprivate int[] parts; // -1 means no part\r\n\t\t\tprivate PartType[] partTypes;\r\n\t\t\tprivate int currentPartNumber;\r\n\r\n\t\t\tprivate bool negation;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// indicates whether or not some failure occurs\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool allOK;\r\n\r\n\t\t\tpublic enum PartType\r\n\t\t\t{\r\n\t\t\t\tNormal, NormalNoRangeNext, NormalBackslash, NormalBackslashNoRangeNext,\r\n\t\t\t\tCollatingElement, UnrolledCollatingElement,\r\n\t\t\t\tCharacterClass, UnrolledCharacterClass, WordBoundary,\r\n\t\t\t\tEquivalenceClass, UnrolledEquivalenceClass,\r\n\t\t\t\tRange, UnrolledRange\r\n\t\t\t};\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// indicates if there is a part that cannot be converted to single [...] expression, for example\r\n\t\t\t/// [xyz[.abcd.]opq]. Is set to \"true\" in optimization if some part is marked as <c>UnrolledCollatingElement</c>\r\n\t\t\t/// or <c>UnrolledEquivalenceClass</c>\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool specialTranslationNeeded;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Indicates that this bracket expression has '^' as the first character.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Negation\r\n\t\t\t{\r\n\t\t\t\tset { negation = value; }\r\n\t\t\t}\r\n\r\n\t\t\tpublic PartType CurrentPartType\r\n\t\t\t{\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\tif (value == PartType.Range)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tStartNextPart();\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = value;\r\n\t\t\t\t\t\tbuffer.Append('-'); // so that the part wasn't empty and we can simply convert it to PartType.Normal\r\n\t\t\t\t\t\tStartNextPart();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// According to currentPartNumber part makes some changes at the end of buffer. Assumes that\r\n\t\t\t/// currentPartNumber is last in buffer.\r\n\t\t\t/// Sets allOK to false if something is wrong.\r\n\t\t\t/// \r\n\t\t\t/// BEFORE optimization there can be:\r\n\t\t\t/// Range, Normal, NormalBackslash, CharacterClass, CollatingElement, EquivalenceClass\r\n\t\t\t///\r\n\t\t\t/// AFTER optimization there can be:\r\n\t\t\t/// Range, UnrolledRange, Normal, NormalBackslash, NormalBackslashNoRangeNext, NormalNoRangeNext,\r\n\t\t\t/// UnrolledCharacterClass, WordBoundary, UnrolledCollatingElement, UnrolledEquivalenceClass\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void OptimizeParts()\r\n\t\t\t{\r\n\t\t\t\tswitch (partTypes[currentPartNumber])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PartType.Range:\r\n\t\t\t\t\t\tOptimizeRange(); // transformed to Range or UnrolledRange\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.Normal:\r\n\t\t\t\t\t\tOptimizeNormal();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.NormalBackslash:\r\n\t\t\t\t\t\tOptimizeNormalBackslash();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.CharacterClass: //transformed to UnrolledCharacterClass or WordBoundary\r\n\t\t\t\t\t\tOptimizeCharacterClass();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.CollatingElement: // transformed to Normal, NormalBackslash or UnrolledCollatingElement\r\n\t\t\t\t\t\tOptimizeCollatingElement();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.EquivalenceClass:\r\n\t\t\t\t\t\tOptimizeEquivalenceClass();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Unexpected part type in OptimizeParts().\");\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t/* These possibilities cannot occur here, they arise during optimization\r\n\t\t\t\t\t * case PartType.UnrolledRange:\r\n\t\t\t\t\t * case PartType.NormalNoRangeNext:\r\n\t\t\t\t\t * case PartType.NormalBackslashNoRangeNext;\r\n\t\t\t\t\t * case PartType.UnrolledCharacterClass:\r\n\t\t\t\t\t * case PartType.WordBoundary:\r\n\t\t\t\t\t * case PartType.UnrolledEquivalenceClass:\r\n\t\t\t\t\t*/\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Assume that currentPartNumber is set to Range and is last in buffer.\r\n\t\t\t/// According to previous part type changes types and groups some parts.\r\n\t\t\t/// Sets allOK to false if something is wrong.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void OptimizeRange()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tpartTypes[currentPartNumber] = PartType.NormalNoRangeNext; // '-' is first character in expression\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (partTypes[currentPartNumber - 1])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase PartType.Range: // replace [x-y] with correct chars\r\n\t\t\t\t\t\t\tstring countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], '-');\r\n\t\t\t\t\t\t\tcurrentPartNumber = currentPartNumber - 2;\r\n\t\t\t\t\t\t\tparts[currentPartNumber + 1] = -1;\r\n\t\t\t\t\t\t\tbuffer.Remove(parts[currentPartNumber], buffer.Length - parts[currentPartNumber]);\r\n\t\t\t\t\t\t\tbuffer.Append(countedRange);\r\n\t\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.UnrolledRange;\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.UnrolledRange:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"range_shared_endpoint\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.Normal:\r\n\t\t\t\t\t\t\tif ((parts[currentPartNumber] - parts[currentPartNumber - 1]) > 1)\r\n\t\t\t\t\t\t\t// divide part in order that we have one character before range\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// create next part, but do not optimize to avoid infinite recursive call\r\n\t\t\t\t\t\t\t\tStartNextPart(false); // currentPartNumber is now greater by 1\r\n\t\t\t\t\t\t\t\tparts[currentPartNumber] = parts[currentPartNumber - 1];\r\n\t\t\t\t\t\t\t\tpartTypes[currentPartNumber] = partTypes[currentPartNumber - 1];\r\n\t\t\t\t\t\t\t\tparts[currentPartNumber - 1]--;\r\n\t\t\t\t\t\t\t\tpartTypes[currentPartNumber - 1] = PartType.Normal;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.NormalBackslash:\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.NormalNoRangeNext:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"range_not_allowed\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.NormalBackslashNoRangeNext:\r\n\t\t\t\t\t\t\tgoto case PartType.NormalNoRangeNext;\r\n\r\n\t\t\t\t\t\tcase PartType.UnrolledCharacterClass:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"first_endpoint_character_class\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.WordBoundary:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.UnrolledCollatingElement:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"bad_collating_el_at_first_endpoint_of_range\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase PartType.UnrolledEquivalenceClass:\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"equivalence_class_at_first_endpoint_of_range\"));\r\n\t\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tDebug.Fail(\"Internal error - default in OptimizeRange().\");\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tprivate void OptimizeNormal()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber == 0) // if this is the first part, there is nothing to optimize\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tswitch (partTypes[currentPartNumber - 1])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PartType.Range:\r\n\t\t\t\t\t\tstring countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], buffer[parts[currentPartNumber]]);\r\n\t\t\t\t\t\tstring normalLeft = buffer.ToString(parts[currentPartNumber] + 1, buffer.Length - parts[currentPartNumber] - 1);\r\n\r\n\t\t\t\t\t\tparts[currentPartNumber] = -1;\r\n\t\t\t\t\t\tcurrentPartNumber = currentPartNumber - 1;\r\n\t\t\t\t\t\tbuffer.Remove(parts[currentPartNumber - 1], buffer.Length - parts[currentPartNumber - 1]);\r\n\t\t\t\t\t\tbuffer.Append(countedRange);\r\n\t\t\t\t\t\tpartTypes[currentPartNumber - 1] = PartType.UnrolledRange;\r\n\t\t\t\t\t\tparts[currentPartNumber] = buffer.Length;\r\n\t\t\t\t\t\tbuffer.Append(normalLeft);\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.Normal;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.WordBoundary:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tprivate void OptimizeNormalBackslash()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber == 0)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tswitch (partTypes[currentPartNumber - 1])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PartType.Range:\r\n\t\t\t\t\t\tstring countedRange = CountRangeEscaped(buffer[parts[currentPartNumber - 2]], '\\\\');\r\n\t\t\t\t\t\tcurrentPartNumber = currentPartNumber - 2;\r\n\t\t\t\t\t\tparts[currentPartNumber + 1] = -1;\r\n\t\t\t\t\t\tbuffer.Remove(parts[currentPartNumber], buffer.Length - parts[currentPartNumber]);\r\n\t\t\t\t\t\tbuffer.Append(countedRange);\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.UnrolledRange;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PartType.WordBoundary:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns string containing appropriate characters for range according to current encoding. If some\r\n\t\t\t/// characters may have special meaning in the bracket expression they are escaped.\r\n\t\t\t/// Sets private variable allOK to false if secondCharacter is before firstCharacter in current encoding\r\n\t\t\t/// or the range cannot be counted for these characters.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"firstCharacter\">First endpoint of the range.</param>\r\n\t\t\t/// <param name=\"secondCharacter\">Second endpoint of the range.</param>\r\n\t\t\t/// <returns>String with all range characters.</returns>\r\n\t\t\tprivate string CountRangeEscaped(char firstCharacter, char secondCharacter)\r\n\t\t\t{\r\n\t\t\t\t// error indication of range conversion\r\n\t\t\t\tint result;\r\n\t\t\t\t// range characters\r\n\t\t\t\tstring characters;\r\n\r\n\t\t\t\tif (CountRange(firstCharacter, secondCharacter, out characters, out result))\r\n\t\t\t\t{\r\n                    StringBuilder sb = new StringBuilder(characters.Length);\r\n\t\t\t\t\tEscapeBracketExpressionSpecialChars(sb, characters);\r\n                    return sb.ToString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// there was an error\r\n\t\t\t\tswitch (result)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"ranges_not_supported\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"range_first_character_greater\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Unexpected result error value from CountRange().\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Escapes characters that have special meaning in bracket expression to make them ordinary characters.\r\n\t\t\t/// </summary>\r\n            /// <param name=\"sb\"><see cref=\"StringBuilder\"/> to output the result.</param>\r\n\t\t\t/// <param name=\"chars\">String possibly containing characters with special meaning.</param>\r\n\t\t\t/// <returns>String with escaped characters.</returns>\r\n\t\t\tinternal static void EscapeBracketExpressionSpecialChars(StringBuilder/*!*/sb, string chars)\r\n\t\t\t{\r\n                Debug.Assert(sb != null);\r\n\r\n\t\t\t\tfor (int i = 0; i < chars.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tchar ch = chars[i];\r\n\t\t\t\t\tswitch (ch)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// case '^': // not necessary, not at the beginning have no special meaning\r\n\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\tcase '-':\r\n\t\t\t\t\t\t\tsb.Append('\\\\');\r\n\t\t\t\t\t\t\tgoto default;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tsb.Append(ch);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Takes endpoints of a range and returns string containing appropriate characters.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"firstCharacter\">First endpoint of a range.</param>\r\n\t\t\t/// <param name=\"secondCharacter\">Second endpoint of a range.</param>\r\n\t\t\t/// <param name=\"characters\">String containing all characters that are to be in the range.</param>\r\n\t\t\t/// <param name=\"result\">Integer specifying an error. Value 1 means characters specified cannot\r\n\t\t\t/// be expressed in current encoding, value of 2 first character is greater than second.</param>\r\n\t\t\t/// <returns><B>True</B> if range was succesfuly counted, <B>false</B> otherwise.</returns>\r\n\t\t\tinternal static bool CountRange(char firstCharacter, char secondCharacter, out string characters, out int result)\r\n\t\t\t{\r\n\t\t\t\t// initialize out parameters\r\n\t\t\t\tcharacters = null;\r\n\t\t\t\tresult = 0;\r\n\r\n\t\t\t\tEncoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n\t\t\t\tchar[] chars = new char[2];\r\n\t\t\t\tchars[0] = firstCharacter;\r\n\t\t\t\tchars[1] = secondCharacter;\r\n\r\n\t\t\t\tbyte[] two_bytes = new byte[encoding.GetMaxByteCount(2)];\r\n\r\n\t\t\t\t// convert endpoints and test if characters are \"normal\" - they can be stored in one byte\r\n\t\t\t\tif (encoding.GetBytes(chars, 0, 2, two_bytes, 0) != 2)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = 1;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (two_bytes[0] > two_bytes[1])\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = 2;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// array for bytes that will be converted to unicode string\r\n\t\t\t\tbyte[] bytes = new byte[two_bytes[1] - two_bytes[0] + 1];\r\n\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tfor (int ch = two_bytes[0]; ch <= two_bytes[1]; i++, ch++)\r\n\t\t\t\t{\r\n\t\t\t\t\t// casting to byte is OK, ch is always in byte range thanks to ch <= two_bytes[1] condition\r\n\t\t\t\t\tbytes[i] = (byte)ch;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcharacters = encoding.GetString(bytes, 0, i);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Takes character class name and returns string containing appropriate characters.\r\n\t\t\t/// Returns <B>null</B> if has got unknown character class name.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"chClassName\">Character class name.</param>\r\n\t\t\t/// <returns>String containing characters from character class.</returns>\r\n\t\t\tinternal static string CountCharacterClass(string chClassName)\r\n\t\t\t{\r\n\t\t\t\tstring ret = null;\r\n\r\n\t\t\t\tswitch (chClassName)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"alnum\":\r\n\t\t\t\t\t\tret = @\"\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Nd}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"digit\":\r\n\t\t\t\t\t\tret = @\"\\p{Nd}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"punct\":\r\n\t\t\t\t\t\tret = @\"\\p{P}\\p{S}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"alpha\":\r\n\t\t\t\t\t\tret = @\"\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"graph\":\r\n\t\t\t\t\t\tret = @\"\\p{L}\\p{M}\\p{N}\\p{P}\\p{S}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"space\":\r\n\t\t\t\t\t\tret = @\"\\s\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"blank\":\r\n\t\t\t\t\t\tret = @\" \\t\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"lower\":\r\n\t\t\t\t\t\tret = @\"\\p{Ll}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"upper\":\r\n\t\t\t\t\t\tret = @\"\\p{Lu}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"cntrl\":\r\n\t\t\t\t\t\tret = @\"\\p{Cc}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"print\":\r\n\t\t\t\t\t\tret = @\"\\p{L}\\p{M}\\p{N}\\p{P}\\p{S}\\p{Zs}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"xdigit\":\r\n\t\t\t\t\t\tret = @\"abcdefABCDEF\\d\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"ascii\":\r\n\t\t\t\t\t\tret = @\"\\u0000-\\u007F\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"word\":\r\n\t\t\t\t\t\tret = @\"_\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Nd}\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Replaces CharacterClass name with appropriate characters and changes type to UnrolledCharacterClass.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// Assumes that currentPartNumber is last part in buffer and has type CharacterClass.\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate void OptimizeCharacterClass()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (partTypes[currentPartNumber - 1] == PartType.Range)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"character_class_at_second_endpoint_of_range\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (partTypes[currentPartNumber - 1] == PartType.WordBoundary)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint length = buffer.Length - parts[currentPartNumber];\r\n\t\t\t\tstring oldValue = buffer.ToString(parts[currentPartNumber], length);\r\n\r\n\t\t\t\tif (currentPartNumber == 0 && (oldValue == \"<\" || oldValue == \">\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tpartTypes[currentPartNumber] = PartType.WordBoundary;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstring cce = CountCharacterClass(oldValue);\r\n\t\t\t\tif (cce == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_character_class\"));\r\n\t\t\t\t\tallOK = false;\r\n\t\t\t\t\tcce = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpartTypes[currentPartNumber] = PartType.UnrolledCharacterClass;\r\n\t\t\t\tbuffer.Remove(parts[currentPartNumber], length);\r\n\t\t\t\tbuffer.Append(cce);\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Takes collating element \"name\" (string that was enclosed in [. and .]) and returns appropriate\r\n\t\t\t/// character(s) or the original string, if there no association exist.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"cElement\">String that was enclosed in [. and .] (collating element).</param>\r\n\t\t\t/// <returns>String associated with cElement.</returns>\r\n\t\t\tprivate string CountCollatingElement(string cElement)\r\n\t\t\t{\r\n\t\t\t\tstring ret;\r\n\r\n\t\t\t\tswitch (cElement)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"NUL\": ret = \"\\x0\"; break;\r\n\t\t\t\t\tcase \"SOH\": ret = \"\\x1\"; break;\r\n\t\t\t\t\tcase \"STX\": ret = \"\\x2\"; break;\r\n\t\t\t\t\tcase \"ETX\": ret = \"\\x3\"; break;\r\n\t\t\t\t\tcase \"EOT\": ret = \"\\x4\"; break;\r\n\t\t\t\t\tcase \"ENQ\": ret = \"\\x5\"; break;\r\n\t\t\t\t\tcase \"ACK\": ret = \"\\x6\"; break;\r\n\t\t\t\t\tcase \"BEL\": ret = \"\\x7\"; break;\r\n\t\t\t\t\tcase \"alert\": ret = \"\\x7\"; break;\r\n\t\t\t\t\tcase \"BS\": ret = \"\\x8\"; break;\r\n\t\t\t\t\tcase \"backspace\": ret = \"\\b\"; break;\r\n\t\t\t\t\tcase \"HT\": ret = \"\\x9\"; break;\r\n\t\t\t\t\tcase \"tab\": ret = \"\\t\"; break;\r\n\t\t\t\t\tcase \"LF\": ret = \"\\xa\"; break;\r\n\t\t\t\t\tcase \"newline\": ret = \"\\n\"; break;\r\n\t\t\t\t\tcase \"VT\": ret = \"\\xb\"; break;\r\n\t\t\t\t\tcase \"vertical-tab\": ret = \"\\v\"; break;\r\n\t\t\t\t\tcase \"FF\": ret = \"\\xc\"; break;\r\n\t\t\t\t\tcase \"form-feed\": ret = \"\\f\"; break;\r\n\t\t\t\t\tcase \"CR\": ret = \"\\xd\"; break;\r\n\t\t\t\t\tcase \"carriage-return\": ret = \"\\r\"; break;\r\n\t\t\t\t\tcase \"SO\": ret = \"\\xe\"; break;\r\n\t\t\t\t\tcase \"SI\": ret = \"\\xf\"; break;\r\n\t\t\t\t\tcase \"DLE\": ret = \"\\x10\"; break;\r\n\t\t\t\t\tcase \"DC1\": ret = \"\\x11\"; break;\r\n\t\t\t\t\tcase \"DC2\": ret = \"\\x12\"; break;\r\n\t\t\t\t\tcase \"DC3\": ret = \"\\x13\"; break;\r\n\t\t\t\t\tcase \"DC4\": ret = \"\\x14\"; break;\r\n\t\t\t\t\tcase \"NAK\": ret = \"\\x15\"; break;\r\n\t\t\t\t\tcase \"SYN\": ret = \"\\x16\"; break;\r\n\t\t\t\t\tcase \"ETB\": ret = \"\\x17\"; break;\r\n\t\t\t\t\tcase \"CAN\": ret = \"\\x18\"; break;\r\n\t\t\t\t\tcase \"EM\": ret = \"\\x19\"; break;\r\n\t\t\t\t\tcase \"SUB\": ret = \"\\x1a\"; break;\r\n\t\t\t\t\tcase \"ESC\": ret = \"\\x1b\"; break;\r\n\t\t\t\t\tcase \"IS4\": ret = \"\\x1c\"; break;\r\n\t\t\t\t\tcase \"FS\": ret = \"\\x1c\"; break;\r\n\t\t\t\t\tcase \"IS3\": ret = \"\\x1d\"; break;\r\n\t\t\t\t\tcase \"GS\": ret = \"\\x1d\"; break;\r\n\t\t\t\t\tcase \"IS2\": ret = \"\\x1e\"; break;\r\n\t\t\t\t\tcase \"RS\": ret = \"\\x1e\"; break;\r\n\t\t\t\t\tcase \"IS1\": ret = \"\\x1f\"; break;\r\n\t\t\t\t\tcase \"US\": ret = \"\\x1f\"; break;\r\n\t\t\t\t\tcase \"space\": ret = \" \"; break;\r\n\t\t\t\t\tcase \"exclamation-mark\": ret = \"!\"; break;\r\n\t\t\t\t\tcase \"quotation-mark\": ret = \"\\\"\"; break;\r\n\t\t\t\t\tcase \"number-sign\": ret = \"#\"; break;\r\n\t\t\t\t\tcase \"dollar-sign\": ret = \"$\"; break;\r\n\t\t\t\t\tcase \"percent-sign\": ret = \"%\"; break;\r\n\t\t\t\t\tcase \"ampersand\": ret = \"&\"; break;\r\n\t\t\t\t\tcase \"apostrophe\": ret = \"\\'\"; break;\r\n\t\t\t\t\tcase \"left-parenthesis\": ret = \"(\"; break;\r\n\t\t\t\t\tcase \"right-parenthesis\": ret = \")\"; break;\r\n\t\t\t\t\tcase \"asterisk\": ret = \"*\"; break;\r\n\t\t\t\t\tcase \"plus-sign\": ret = \"+\"; break;\r\n\t\t\t\t\tcase \"comma\": ret = \",\"; break;\r\n\t\t\t\t\tcase \"hyphen\": ret = \"-\"; break;\r\n\t\t\t\t\tcase \"hyphen-minus\": ret = \"-\"; break;\r\n\t\t\t\t\tcase \"period\": ret = \".\"; break;\r\n\t\t\t\t\tcase \"full-stop\": ret = \".\"; break;\r\n\t\t\t\t\tcase \"slash\": ret = \"/\"; break;\r\n\t\t\t\t\tcase \"solidus\": ret = \"/\"; break;\r\n\t\t\t\t\tcase \"zero\": ret = \"0\"; break;\r\n\t\t\t\t\tcase \"one\": ret = \"1\"; break;\r\n\t\t\t\t\tcase \"two\": ret = \"2\"; break;\r\n\t\t\t\t\tcase \"three\": ret = \"3\"; break;\r\n\t\t\t\t\tcase \"four\": ret = \"4\"; break;\r\n\t\t\t\t\tcase \"five\": ret = \"5\"; break;\r\n\t\t\t\t\tcase \"six\": ret = \"6\"; break;\r\n\t\t\t\t\tcase \"seven\": ret = \"7\"; break;\r\n\t\t\t\t\tcase \"eight\": ret = \"8\"; break;\r\n\t\t\t\t\tcase \"nine\": ret = \"9\"; break;\r\n\t\t\t\t\tcase \"colon\": ret = \":\"; break;\r\n\t\t\t\t\tcase \"semicolon\": ret = \";\"; break;\r\n\t\t\t\t\tcase \"less-than-sign\": ret = \"<\"; break;\r\n\t\t\t\t\tcase \"equals-sign\": ret = \"=\"; break;\r\n\t\t\t\t\tcase \"greater-than-sign\": ret = \">\"; break;\r\n\t\t\t\t\tcase \"question-mark\": ret = \"?\"; break;\r\n\t\t\t\t\tcase \"commercial-at\": ret = \"@\"; break;\r\n\t\t\t\t\tcase \"left-square-bracket\": ret = \"[\"; break;\r\n\t\t\t\t\tcase \"backslash\": ret = \"\\\\\"; break;\r\n\t\t\t\t\tcase \"reverse-solidus\": ret = \"\\\\\"; break;\r\n\t\t\t\t\tcase \"right-square-bracket\": ret = \"]\"; break;\r\n\t\t\t\t\tcase \"circumflex\": ret = \"^\"; break;\r\n\t\t\t\t\tcase \"circumflex-accent\": ret = \"^\"; break;\r\n\t\t\t\t\tcase \"underscore\": ret = \"_\"; break;\r\n\t\t\t\t\tcase \"low-line\": ret = \"_\"; break;\r\n\t\t\t\t\tcase \"grave-accent\": ret = \"`\"; break;\r\n\t\t\t\t\tcase \"left-brace\": ret = \"{\"; break;\r\n\t\t\t\t\tcase \"left-curly-bracket\": ret = \"{\"; break;\r\n\t\t\t\t\tcase \"vertical-line\": ret = \"|\"; break;\r\n\t\t\t\t\tcase \"right-brace\": ret = \"}\"; break;\r\n\t\t\t\t\tcase \"right-curly-bracket\": ret = \"}\"; break;\r\n\t\t\t\t\tcase \"tilde\": ret = \"~\"; break;\r\n\t\t\t\t\tcase \"DEL\": ret = \"\\x7f\"; break;\r\n\t\t\t\t\tcase \"NULL\": ret = \"\\x0\"; break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tret = cElement;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Assumes that currentPartNumber is last part in buffer and has type CollatingElement.\r\n\t\t\t/// Changes it to Normal, NormalBackslash or UnrolledCollatingElement.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void OptimizeCollatingElement()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber > 0 && (partTypes[currentPartNumber - 1] == PartType.WordBoundary))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\tallOK = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tint length = buffer.Length - parts[currentPartNumber];\r\n\t\t\t\tstring cce = CountCollatingElement(buffer.ToString(parts[currentPartNumber], length));\r\n\t\t\t\tbuffer.Remove(parts[currentPartNumber], length);\r\n\t\t\t\tbuffer.Append(cce);\r\n\r\n\t\t\t\tif (cce.Length == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tpartTypes[currentPartNumber] = PartType.Normal;\r\n\t\t\t\t\tOptimizeNormal();\r\n\t\t\t\t}\r\n\t\t\t\telse if (cce == @\"\\\\\")\r\n\t\t\t\t{\r\n\t\t\t\t\tcce = @\"\\\";\r\n\t\t\t\t\tpartTypes[currentPartNumber] = PartType.NormalBackslash;\r\n\t\t\t\t\tOptimizeNormalBackslash();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tpartTypes[currentPartNumber] = PartType.UnrolledCollatingElement;\r\n\t\t\t\t\tspecialTranslationNeeded = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Calls OptimizeCollatingElement() and sets current part type to UnrolledEquivalenceClass.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate void OptimizeEquivalenceClass()\r\n\t\t\t{\r\n\t\t\t\tif (currentPartNumber > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (partTypes[currentPartNumber - 1] == PartType.Range)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"equivalence_class_at_second_endpoint_of_range\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (partTypes[currentPartNumber - 1] == PartType.WordBoundary)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"word_boundary_not_single_bracket_expr\"));\r\n\t\t\t\t\t\tallOK = false;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// we have no equivalence classes defined, so [= =] is the same as [. .] according to specification\r\n\t\t\t\tOptimizeCollatingElement();\r\n\r\n\t\t\t\tswitch (partTypes[currentPartNumber])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PartType.UnrolledCollatingElement:\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.UnrolledEquivalenceClass;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase PartType.Normal:\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.NormalNoRangeNext;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase PartType.NormalBackslash:\r\n\t\t\t\t\t\tpartTypes[currentPartNumber] = PartType.NormalBackslashNoRangeNext;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// If something was written to current part, creates next empty part.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// Important to easy automaton implementation: if current part is empty, does nothing!\r\n\t\t\t/// Appending new parts is unlimited, arrays are enlarged if needed.\r\n\t\t\t/// </remarks>\r\n\t\t\tpublic bool StartNextPart()\r\n\t\t\t{\r\n\t\t\t\treturn StartNextPart(true);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// If something was written to current part, creates next empty part.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// Important to easy automaton implementation: if current part is empty, does nothing!\r\n\t\t\t/// Appending new parts is unlimited, arrays are enlarged if needed.\r\n\t\t\t/// </remarks>\r\n\t\t\t/// <param name=\"optimize\">Whether call OptimizeParts().</param>\r\n\t\t\t/// <returns>True if everything is OK.</returns>\r\n\t\t\tprivate bool StartNextPart(bool optimize)\r\n\t\t\t{\r\n\t\t\t\tif (!allOK)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tif (parts[currentPartNumber] == buffer.Length)\r\n\t\t\t\t\t// we don't need to make new part, current part is empty\r\n\t\t\t\t\treturn true;\r\n\r\n\t\t\t\tif (optimize)\r\n\t\t\t\t\tOptimizeParts();\r\n\r\n\t\t\t\tcurrentPartNumber++;\r\n\t\t\t\tif (currentPartNumber == parts.Length) // array is full, enlarge it\r\n\t\t\t\t{\r\n\t\t\t\t\tint[] tempArray = parts;\r\n\t\t\t\t\tparts = new int[parts.Length * 2];\r\n\t\t\t\t\tSystem.Array.Copy(tempArray, parts, tempArray.Length);\r\n\r\n\t\t\t\t\tPartType[] tempArray2 = partTypes;\r\n\t\t\t\t\tpartTypes = new PartType[parts.Length * 2];\r\n\t\t\t\t\tSystem.Array.Copy(tempArray2, partTypes, tempArray2.Length);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tparts[currentPartNumber] = buffer.Length; // set position after last character in buffer\r\n\t\t\t\tpartTypes[currentPartNumber] = PartType.Normal;\r\n\t\t\t\tparts[currentPartNumber + 1] = -1;\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Constructor. Sets all fields to appropriate empty values.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic BracketExpression()\r\n\t\t\t{\r\n\t\t\t\tbuffer = new StringBuilder();\r\n\t\t\t\tparts = new int[initialNumberOfParts];\r\n\t\t\t\tpartTypes = new PartType[initialNumberOfParts];\r\n\r\n\t\t\t\tReset();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Sets inner state as if the object was created.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\tbuffer.Remove(0, buffer.Length);\r\n\t\t\t\tcurrentPartNumber = 0;\r\n\r\n\t\t\t\tparts[0] = 0;\r\n\t\t\t\tparts[1] = -1;\r\n\t\t\t\tpartTypes[0] = PartType.Normal;\r\n\t\t\t\t// if these arrays were enlarged, we keep the same lenght, shortening is pointless\r\n\r\n\t\t\t\tnegation = false;\r\n\t\t\t\tallOK = true;\r\n\t\t\t\tspecialTranslationNeeded = false;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Appends one character to current part of bracket expression.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"ch\">Character to append.</param>\r\n\t\t\tpublic void Append(char ch)\r\n\t\t\t{\r\n\t\t\t\tbuffer.Append(ch);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Appends two characters to current part of bracket expression.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"ch1\">First character to append.</param>\r\n\t\t\t/// <param name=\"ch2\">Second character to append.</param>\r\n\t\t\tpublic void Append(char ch1, char ch2)\r\n\t\t\t{\r\n\t\t\t\tbuffer.Append(ch1);\r\n\t\t\t\tbuffer.Append(ch2);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Appends three characters to current part of bracket expression.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"ch1\">First character to append.</param>\r\n\t\t\t/// <param name=\"ch2\">Second character to append.</param>\r\n\t\t\t/// <param name=\"ch3\">Third character to append.</param>\r\n\t\t\tpublic void Append(char ch1, char ch2, char ch3)\r\n\t\t\t{\r\n\t\t\t\tbuffer.Append(ch1);\r\n\t\t\t\tbuffer.Append(ch2);\r\n\t\t\t\tbuffer.Append(ch3);\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// \r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"output\"></param>\r\n\t\t\tprivate void WriteOutNoSpecial(ref StringBuilder output)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < currentPartNumber; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (partTypes[i] == PartType.NormalBackslash || partTypes[i] == PartType.NormalBackslashNoRangeNext)\r\n\t\t\t\t\t\toutput.Append(@\"\\\");\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\toutput.Append(buffer.ToString(parts[i], parts[i + 1] - parts[i]));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// last iteration - we count part length otherwise\r\n\t\t\t\tif (partTypes[currentPartNumber] == PartType.NormalBackslash\r\n\t\t\t\t  || partTypes[currentPartNumber] == PartType.NormalBackslashNoRangeNext)\r\n\t\t\t\t\toutput.Append(@\"\\\\\");\r\n\t\t\t\telse\r\n\t\t\t\t\toutput.Append(buffer.ToString(parts[currentPartNumber], buffer.Length - parts[currentPartNumber]));\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// \r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"output\"></param>\r\n\t\t\tprivate void WriteOutSpecial(ref StringBuilder output)\r\n\t\t\t{\r\n\t\t\t\tint length;\r\n\r\n\t\t\t\tfor (int i = 0; i <= currentPartNumber; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i == currentPartNumber)\r\n\t\t\t\t\t\tlength = buffer.Length - parts[i];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tlength = parts[i + 1] - parts[i];\r\n\r\n\t\t\t\t\tswitch (partTypes[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase PartType.Normal:\r\n\t\t\t\t\t\t\toutput.Append('[');\r\n\t\t\t\t\t\t\toutput.Append(buffer.ToString(parts[i], length));\r\n\t\t\t\t\t\t\toutput.Append(']');\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase PartType.Range: // can be only last part\r\n\t\t\t\t\t\t\tDebug.Assert(i != currentPartNumber, \"internal error WriteOutSpecial() Range isn't last.\");\r\n\t\t\t\t\t\t\tgoto case PartType.Normal;\r\n\t\t\t\t\t\tcase PartType.UnrolledRange:\r\n\t\t\t\t\t\t\tgoto case PartType.Normal;\r\n\t\t\t\t\t\tcase PartType.NormalBackslash:\r\n\t\t\t\t\t\t\toutput.Append(@\"[\\\\]\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase PartType.NormalBackslashNoRangeNext:\r\n\t\t\t\t\t\t\tgoto case PartType.NormalBackslash;\r\n\t\t\t\t\t\tcase PartType.NormalNoRangeNext:\r\n\t\t\t\t\t\t\tgoto case PartType.Normal;\r\n\t\t\t\t\t\tcase PartType.UnrolledCharacterClass:\r\n\t\t\t\t\t\t\tgoto case PartType.Normal;\r\n\t\t\t\t\t\tcase PartType.WordBoundary:\r\n\t\t\t\t\t\t\tDebug.Fail(\"internal error WriteOutSpecial() Word boundary.\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase PartType.UnrolledCollatingElement:\r\n\t\t\t\t\t\t\toutput.Append(buffer.ToString(parts[i], length));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase PartType.UnrolledEquivalenceClass:\r\n\t\t\t\t\t\t\tgoto case PartType.UnrolledCollatingElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toutput.Append('|');\r\n\t\t\t\t} // for()\r\n\r\n\t\t\t\toutput.Remove(output.Length - 1, 1); // remove last '|' character\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Writes to <c>output</c> Framework regular expression for beginning or end of word,\r\n\t\t\t/// according to first part in <c>parts</c> array.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"output\"><c>StringBuilder</c> to write out.</param>\r\n\t\t\tprivate void WriteOutWordBoundary(ref StringBuilder output)\r\n\t\t\t{\r\n\t\t\t\tif (buffer[parts[0]] == '<')\r\n\t\t\t\t{\t// beginning of word\r\n\t\t\t\t\toutput.Append(@\"\\b(?=\\w)\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\t// end of word\r\n\t\t\t\t\toutput.Append(@\"\\b(?<=\\w)\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Compose all parts and creates .NET Framework compatible regular expression.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>.NET Framework compatible regular expression</returns>\r\n\t\t\tpublic bool WriteOut(ref StringBuilder retString)\r\n\t\t\t{\r\n\t\t\t\t// some failure occured, nothing is written\r\n\t\t\t\tif (!allOK)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t// creates new empty part - causes optimization of previous part (the last one, that was not omptimized,\r\n\t\t\t\t// previous parts were optimized while calling StartNextPart()).\r\n\t\t\t\tStartNextPart();\r\n\r\n\t\t\t\tStringBuilder output = new StringBuilder(2 * buffer.Length); // estimated indigent length\r\n\r\n\t\t\t\tif (partTypes[0] == PartType.WordBoundary)\r\n\t\t\t\t{\r\n\t\t\t\t\t// writes word boundary and ends, if it is word boundary, nothing can follow\r\n\t\t\t\t\tWriteOutWordBoundary(ref output);\r\n\t\t\t\t}\r\n\t\t\t\telse if (!specialTranslationNeeded)\r\n\t\t\t\t{\r\n\t\t\t\t\t// regular expression can be written to single framework bracket expression [..]\r\n\t\t\t\t\toutput.Append('[');\r\n\r\n\t\t\t\t\tif (negation)\r\n\t\t\t\t\t\toutput.Append('^');\r\n\t\t\t\t\tWriteOutNoSpecial(ref output);\r\n\r\n\t\t\t\t\toutput.Append(']');\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// regular expression cannot be written to single framework expression,\r\n\t\t\t\t\t// we enclose whole expression to (? .. ) parentheses and inside can be more\r\n\t\t\t\t\t// complicated expression that match one single POSIX bracket expression\r\n\t\t\t\t\tif (negation)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.Append(\"(?(\");\r\n\t\t\t\t\t\tWriteOutSpecial(ref output);\r\n\t\t\t\t\t\toutput.Append(@\")\\b\\B|.)\"); // \\b\\B always fails\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.Append(\"(?:\");\r\n\t\t\t\t\t\tWriteOutSpecial(ref output);\r\n\t\t\t\t\t\toutput.Append(')');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tretString.Append(output.ToString());\r\n\t\t\t\treturn allOK;\r\n\t\t\t}\r\n\t\t}// class BracketExpression\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Regular expression conversion functions\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>CharMap</c> containing characters that must be preppended by '\\'.\r\n\t\t/// </summary>\r\n\t\tprivate static readonly CharMap controlCharsMap = new CharMap(new uint[] { 0x0, 0x8f20001, 0x1a, 0x18 });\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts POSIX regular expression to .NET Framework regular expression\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expr\">POSIX 1003.2 regular expression</param>\r\n\t\t/// <returns>.NET Framework compatible regular expression</returns>\r\n\t\t// WORKING: change to private!\r\n\t\tpublic static string ConvertPosix2DotNetExpr(string expr)\r\n\t\t{\r\n\t\t\tif (expr == null) return \"\";\r\n\r\n\t\t\t// number that is not used in automaton\r\n\t\t\tconst int errorState = 99;\r\n\r\n\t\t\t// 0 == initial state\r\n\t\t\tint state = 0;\r\n\r\n\t\t\t// iterator for iterating in strings\r\n#if !SILVERLIGHT\r\n\t\t\tCharEnumerator ch = expr.GetEnumerator();\r\n#else\r\n            System.Collections.Generic.IEnumerator<char> ch = new System.Collections.Generic.List<char>(expr.ToCharArray()).GetEnumerator();\r\n#endif\r\n\t\t\t// true if we are at the end of bracket expression\r\n\t\t\tbool eOfExpr = false;\r\n\r\n\t\t\t// true if we have read next character and this character is not applicable for current state,\r\n\t\t\t// we change state with lambda step and there is character scanned again\r\n\t\t\t// true if we are changing state and the character should be scanned again\r\n\t\t\tbool lambdaStep = false;\r\n\r\n\t\t\t// into this StringBuilder is converted regular expression written\r\n\t\t\t// 2*expr.Length is estimated necessary length of output string\r\n\t\t\tStringBuilder output = new StringBuilder(2 * expr.Length);\r\n\r\n\t\t\t// bracket expressions are very complicated, we have made separate class for managing them\r\n\t\t\t// if we need to create bracket expression class instance, we store it in this variable\r\n\t\t\t// and reuse it after Reset() call\r\n\t\t\tBracketExpression be = null;\r\n\r\n\r\n\r\n\t\t\teOfExpr = !ch.MoveNext();\r\n\t\t\twhile (!eOfExpr)\r\n\t\t\t{\r\n\t\t\t\tswitch (state)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 0: // initial state\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tstate = 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '[':\r\n\t\t\t\t\t\t\t\tstate = 2;\r\n\t\t\t\t\t\t\t\tif (be != null) // bracket expr. already exists, reset it only\r\n\t\t\t\t\t\t\t\t\tbe.Reset();\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\tbe = new BracketExpression();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '(':\r\n\t\t\t\t\t\t\t\tstate = 15;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\toutput.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\tif (controlCharsMap.Contains(ch.Current))\r\n\t\t\t\t\t\t{\t// control character - must be preppended by '\\'\r\n\t\t\t\t\t\t\toutput.Append('\\\\');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\toutput.Append(ch.Current);\r\n\t\t\t\t\t\tstate = 0;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '^':\r\n\t\t\t\t\t\t\t\tbe.Negation = true;\r\n\t\t\t\t\t\t\t\tstate = 3;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\tbe.Append(']');\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tlambdaStep = true;\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 3:\r\n\t\t\t\t\t\tif (ch.Current == ']')\r\n\t\t\t\t\t\t\tbe.Append(']');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tlambdaStep = true;\r\n\r\n\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '[':\r\n\t\t\t\t\t\t\t\tstate = 5;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tbe.Append('\\\\');\r\n\t\t\t\t\t\t\t\tbe.CurrentPartType = BracketExpression.PartType.NormalBackslash;\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\tstate = 0;\r\n\t\t\t\t\t\t\t\tif (!be.WriteOut(ref output))\r\n\t\t\t\t\t\t\t\t\tstate = errorState;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '-':\r\n\t\t\t\t\t\t\t\tbe.CurrentPartType = BracketExpression.PartType.Range;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 5:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '.':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tbe.CurrentPartType = BracketExpression.PartType.CollatingElement;\r\n\t\t\t\t\t\t\t\tstate = 6;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase ':':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tbe.CurrentPartType = BracketExpression.PartType.CharacterClass;\r\n\t\t\t\t\t\t\t\tstate = 7;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '=':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tbe.CurrentPartType = BracketExpression.PartType.EquivalenceClass;\r\n\t\t\t\t\t\t\t\tstate = 8;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\t\t\tbe.Append('[', ch.Current);\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 6:\r\n\t\t\t\t\t\tif (ch.Current == '\\\\')\r\n\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\tstate = 9;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 7:\r\n\t\t\t\t\t\tif (ch.Current == '\\\\')\r\n\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\tstate = 10;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 8:\r\n\t\t\t\t\t\tif (ch.Current == '\\\\')\r\n\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\tstate = 11;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 9:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '.':\r\n\t\t\t\t\t\t\t\tstate = 12;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 10:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase ':':\r\n\t\t\t\t\t\t\t\tstate = 13;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 11:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '=':\r\n\t\t\t\t\t\t\t\tstate = 14;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 12:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('.', '\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tstate = 9;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append('.', ch.Current);\r\n\t\t\t\t\t\t\t\tstate = 9;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 13:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append(':', '\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tstate = 10;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append(':', ch.Current);\r\n\t\t\t\t\t\t\t\tstate = 10;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 14:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\tbe.StartNextPart();\r\n\t\t\t\t\t\t\t\tstate = 4;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tbe.Append('=', '\\\\', '\\\\');\r\n\t\t\t\t\t\t\t\tstate = 11;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbe.Append('=', ch.Current);\r\n\t\t\t\t\t\t\t\tstate = 11;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 15:\r\n\t\t\t\t\t\tswitch (ch.Current)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '?':\r\n\t\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"question_mark_folowing_nothing\"));\r\n\t\t\t\t\t\t\t\tstate = errorState;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\toutput.Append('(');\r\n\t\t\t\t\t\t\t\toutput.Append(ch.Current);\r\n\t\t\t\t\t\t\t\tstate = 0;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault: // catch the ErrorState\r\n\t\t\t\t\t\teOfExpr = true;\r\n\t\t\t\t\t\toutput.Remove(0, output.Length);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// we can eliminate this, but without lambda steps will be an automaton much more complicated\r\n\t\t\t\t// other solution is calling ch.MoveNext() in each case statement, this would bring error liability\r\n\t\t\t\t// but can save a few instructions in each iteration\r\n\t\t\t\tif (!eOfExpr && !lambdaStep)\r\n\t\t\t\t\teOfExpr = !ch.MoveNext();\r\n\r\n\t\t\t\tlambdaStep = false;\r\n\t\t\t}\r\n\r\n\t\t\t// check where an automaton has finished\r\n\t\t\tswitch (state)\r\n\t\t\t{\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\treturn output.ToString();\r\n\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"regexp_cannot_end_with_two_backslashes\"));\r\n\t\t\t\t\treturn null;\r\n\r\n\t\t\t\tcase 15:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"regexp_cannot_end_with_open_bracket\"));\r\n\t\t\t\t\treturn null;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unenclosed_bracket_expression\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string that represents replacement and can be used with regular expression and\r\n\t\t/// contain references to parenthesized substrings in that regular expression.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"replacement\">String to convert</param>\r\n\t\t/// <param name=\"substrNumbers\">Array containig numbers of parenthesized substrings in matching regular expression.</param>\r\n\t\t/// <returns>Converted .NET Framework compatible regular expression to replacement.</returns>\r\n\t\tprivate static string ConvertPosix2DotNetRepl(string replacement, int[] substrNumbers)\r\n\t\t{\r\n\t\t\tif (replacement == null) return \"\";\r\n\r\n\t\t\tint state = 0;\r\n\t\t\tStringBuilder output = new StringBuilder((int)(replacement.Length * 1.5));\r\n\r\n\t\t\tforeach (char ch in replacement)\r\n\t\t\t{\r\n\t\t\t\tswitch (state)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\tswitch (ch)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\t\t\tstate = 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase '$':\r\n\t\t\t\t\t\t\t\t// 'normal' dollar must be doubled to prevent back reference meaning\r\n\t\t\t\t\t\t\t\toutput.Append(\"$$\");\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\toutput.Append(ch);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\tstate = 0; // always return to state 0\r\n\t\t\t\t\t\tif (ch == '$')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// 'normal' dollar must be doubled to prevent back reference meaning\r\n\t\t\t\t\t\t\toutput.Append(\"\\\\$$\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (ch >= '0' && ch <= '9')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// back reference number 0 .. 9\r\n\r\n\t\t\t\t\t\t\t// write back reference only if exists\r\n\t\t\t\t\t\t\tif (((System.Collections.IList)substrNumbers).Contains(Int32.Parse(ch.ToString())))\r\n\t\t\t\t\t\t\t\toutput.Append('$');\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\toutput.Append('\\\\');\r\n\r\n\t\t\t\t\t\t\toutput.Append(ch);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// other characters - leave unchanged\r\n\t\t\t\t\t\t\toutput.Append('\\\\');\r\n\t\t\t\t\t\t\toutput.Append(ch);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (state == 1)\r\n\t\t\t\toutput.Append('\\\\');\r\n\r\n\t\t\treturn output.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Resources/WindowsTZ.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- document downloaded from http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml -->\n<supplementalData>\n\t<windowsZones>\n\t\t<mapTimezones otherVersion=\"07dc0000\" typeVersion=\"2012a\">\n\n\t\t\t<!-- (UTC-12:00) International Date Line West -->\n\t\t\t<mapZone other=\"Dateline Standard Time\" territory=\"001\" type=\"Etc/GMT+12\"/>\n\t\t\t<mapZone other=\"Dateline Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+12\"/>\n\n\t\t\t<!-- (UTC-11:00) Coordinated Universal Time-11 -->\n\t\t\t<mapZone other=\"UTC-11\" territory=\"001\" type=\"Etc/GMT+11\"/>\n\t\t\t<mapZone other=\"UTC-11\" territory=\"AS\" type=\"Pacific/Pago_Pago\"/>\n\t\t\t<mapZone other=\"UTC-11\" territory=\"NU\" type=\"Pacific/Niue\"/>\n\t\t\t<mapZone other=\"UTC-11\" territory=\"UM\" type=\"Pacific/Midway\"/>\n\t\t\t<mapZone other=\"UTC-11\" territory=\"ZZ\" type=\"Etc/GMT+11\"/>\n\n\t\t\t<!-- (UTC-10:00) Hawaii -->\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"001\" type=\"Pacific/Honolulu\"/>\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"CK\" type=\"Pacific/Rarotonga\"/>\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"PF\" type=\"Pacific/Tahiti\"/>\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"UM\" type=\"Pacific/Johnston\"/>\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"US\" type=\"Pacific/Honolulu\"/>\n\t\t\t<mapZone other=\"Hawaiian Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+10\"/>\n\n\t\t\t<!-- (UTC-09:00) Alaska -->\n\t\t\t<mapZone other=\"Alaskan Standard Time\" territory=\"001\" type=\"America/Anchorage\"/>\n\t\t\t<mapZone other=\"Alaskan Standard Time\" territory=\"US\" type=\"America/Anchorage America/Juneau America/Nome America/Sitka America/Yakutat\"/>\n\n\t\t\t<!-- (UTC-08:00) Baja California -->\n\t\t\t<mapZone other=\"Pacific Standard Time (Mexico)\" territory=\"001\" type=\"America/Santa_Isabel\"/>\n\t\t\t<mapZone other=\"Pacific Standard Time (Mexico)\" territory=\"MX\" type=\"America/Santa_Isabel\"/>\n\n\t\t\t<!-- (UTC-08:00) Pacific Time (US & Canada) -->\n\t\t\t<mapZone other=\"Pacific Standard Time\" territory=\"001\" type=\"America/Los_Angeles\"/>\n\t\t\t<mapZone other=\"Pacific Standard Time\" territory=\"CA\" type=\"America/Vancouver America/Dawson America/Whitehorse\"/>\n\t\t\t<mapZone other=\"Pacific Standard Time\" territory=\"MX\" type=\"America/Tijuana\"/>\n\t\t\t<mapZone other=\"Pacific Standard Time\" territory=\"US\" type=\"America/Los_Angeles\"/>\n\t\t\t<mapZone other=\"Pacific Standard Time\" territory=\"ZZ\" type=\"PST8PDT\"/>\n\n\t\t\t<!-- (UTC-07:00) Arizona -->\n\t\t\t<mapZone other=\"US Mountain Standard Time\" territory=\"001\" type=\"America/Phoenix\"/>\n\t\t\t<mapZone other=\"US Mountain Standard Time\" territory=\"CA\" type=\"America/Dawson_Creek America/Creston\"/>\n\t\t\t<mapZone other=\"US Mountain Standard Time\" territory=\"MX\" type=\"America/Hermosillo\"/>\n\t\t\t<mapZone other=\"US Mountain Standard Time\" territory=\"US\" type=\"America/Phoenix\"/>\n\t\t\t<mapZone other=\"US Mountain Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+7\"/>\n\n\t\t\t<!-- (UTC-07:00) Chihuahua, La Paz, Mazatlan -->\n\t\t\t<mapZone other=\"Mountain Standard Time (Mexico)\" territory=\"001\" type=\"America/Chihuahua\"/>\n\t\t\t<mapZone other=\"Mountain Standard Time (Mexico)\" territory=\"MX\" type=\"America/Chihuahua America/Mazatlan\"/>\n\n\t\t\t<!-- (UTC-07:00) Mountain Time (US & Canada) -->\n\t\t\t<mapZone other=\"Mountain Standard Time\" territory=\"001\" type=\"America/Denver\"/>\n\t\t\t<mapZone other=\"Mountain Standard Time\" territory=\"CA\" type=\"America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife\"/>\n\t\t\t<mapZone other=\"Mountain Standard Time\" territory=\"MX\" type=\"America/Ojinaga\"/>\n\t\t\t<mapZone other=\"Mountain Standard Time\" territory=\"US\" type=\"America/Denver America/Boise America/Shiprock\"/>\n\t\t\t<mapZone other=\"Mountain Standard Time\" territory=\"ZZ\" type=\"MST7MDT\"/>\n\n\t\t\t<!-- (UTC-06:00) Central America -->\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"001\" type=\"America/Guatemala\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"BZ\" type=\"America/Belize\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"CR\" type=\"America/Costa_Rica\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"EC\" type=\"Pacific/Galapagos\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"GT\" type=\"America/Guatemala\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"HN\" type=\"America/Tegucigalpa\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"NI\" type=\"America/Managua\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"SV\" type=\"America/El_Salvador\"/>\n\t\t\t<mapZone other=\"Central America Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+6\"/>\n\n\t\t\t<!-- (UTC-06:00) Central Time (US & Canada) -->\n\t\t\t<mapZone other=\"Central Standard Time\" territory=\"001\" type=\"America/Chicago\"/>\n\t\t\t<mapZone other=\"Central Standard Time\" territory=\"CA\" type=\"America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute\"/>\n\t\t\t<mapZone other=\"Central Standard Time\" territory=\"MX\" type=\"America/Matamoros\"/>\n\t\t\t<mapZone other=\"Central Standard Time\" territory=\"US\" type=\"America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem\"/>\n\t\t\t<mapZone other=\"Central Standard Time\" territory=\"ZZ\" type=\"CST6CDT\"/>\n\n\t\t\t<!-- (UTC-06:00) Guadalajara, Mexico City, Monterrey -->\n\t\t\t<mapZone other=\"Central Standard Time (Mexico)\" territory=\"001\" type=\"America/Mexico_City\"/>\n\t\t\t<mapZone other=\"Central Standard Time (Mexico)\" territory=\"MX\" type=\"America/Mexico_City America/Bahia_Banderas America/Cancun America/Merida America/Monterrey\"/>\n\n\t\t\t<!-- (UTC-06:00) Saskatchewan -->\n\t\t\t<mapZone other=\"Canada Central Standard Time\" territory=\"001\" type=\"America/Regina\"/>\n\t\t\t<mapZone other=\"Canada Central Standard Time\" territory=\"CA\" type=\"America/Regina America/Swift_Current\"/>\n\n\t\t\t<!-- (UTC-05:00) Bogota, Lima, Quito -->\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"001\" type=\"America/Bogota\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"CA\" type=\"America/Coral_Harbour\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"CO\" type=\"America/Bogota\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"EC\" type=\"America/Guayaquil\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"HT\" type=\"America/Port-au-Prince\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"JM\" type=\"America/Jamaica\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"KY\" type=\"America/Cayman\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"PA\" type=\"America/Panama\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"PE\" type=\"America/Lima\"/>\n\t\t\t<mapZone other=\"SA Pacific Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+5\"/>\n\n\t\t\t<!-- (UTC-05:00) Eastern Time (US & Canada) -->\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"001\" type=\"America/New_York\"/>\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"BS\" type=\"America/Nassau\"/>\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"CA\" type=\"America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay\"/>\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"TC\" type=\"America/Grand_Turk\"/>\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"US\" type=\"America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville\"/>\n\t\t\t<mapZone other=\"Eastern Standard Time\" territory=\"ZZ\" type=\"EST5EDT\"/>\n\n\t\t\t<!-- (UTC-05:00) Indiana (East) -->\n\t\t\t<mapZone other=\"US Eastern Standard Time\" territory=\"001\" type=\"America/Indianapolis\"/>\n\t\t\t<mapZone other=\"US Eastern Standard Time\" territory=\"US\" type=\"America/Indianapolis America/Indiana/Marengo America/Indiana/Vevay\"/>\n\n\t\t\t<!-- (UTC-04:30) Caracas -->\n\t\t\t<mapZone other=\"Venezuela Standard Time\" territory=\"001\" type=\"America/Caracas\"/>\n\t\t\t<mapZone other=\"Venezuela Standard Time\" territory=\"VE\" type=\"America/Caracas\"/>\n\n\t\t\t<!-- (UTC-04:00) Asuncion -->\n\t\t\t<mapZone other=\"Paraguay Standard Time\" territory=\"001\" type=\"America/Asuncion\"/>\n\t\t\t<mapZone other=\"Paraguay Standard Time\" territory=\"PY\" type=\"America/Asuncion\"/>\n\n\t\t\t<!-- (UTC-04:00) Atlantic Time (Canada) -->\n\t\t\t<mapZone other=\"Atlantic Standard Time\" territory=\"001\" type=\"America/Halifax\"/>\n\t\t\t<mapZone other=\"Atlantic Standard Time\" territory=\"BM\" type=\"Atlantic/Bermuda\"/>\n\t\t\t<mapZone other=\"Atlantic Standard Time\" territory=\"CA\" type=\"America/Halifax America/Glace_Bay America/Goose_Bay America/Moncton\"/>\n\t\t\t<mapZone other=\"Atlantic Standard Time\" territory=\"GL\" type=\"America/Thule\"/>\n\n\t\t\t<!-- (UTC-04:00) Cuiaba -->\n\t\t\t<mapZone other=\"Central Brazilian Standard Time\" territory=\"001\" type=\"America/Cuiaba\"/>\n\t\t\t<mapZone other=\"Central Brazilian Standard Time\" territory=\"BR\" type=\"America/Cuiaba America/Campo_Grande\"/>\n\n\t\t\t<!-- (UTC-04:00) Georgetown, La Paz, Manaus, San Juan -->\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"001\" type=\"America/La_Paz\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"AG\" type=\"America/Antigua\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"AI\" type=\"America/Anguilla\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"AW\" type=\"America/Aruba\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"BB\" type=\"America/Barbados\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"BL\" type=\"America/St_Barthelemy\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"BO\" type=\"America/La_Paz\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"BQ\" type=\"America/Kralendijk\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"BR\" type=\"America/Manaus America/Boa_Vista America/Eirunepe America/Porto_Velho America/Rio_Branco\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"CA\" type=\"America/Blanc-Sablon\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"CW\" type=\"America/Curacao\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"DM\" type=\"America/Dominica\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"DO\" type=\"America/Santo_Domingo\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"GD\" type=\"America/Grenada\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"GP\" type=\"America/Guadeloupe\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"GY\" type=\"America/Guyana\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"KN\" type=\"America/St_Kitts\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"LC\" type=\"America/St_Lucia\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"MF\" type=\"America/Marigot\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"MQ\" type=\"America/Martinique\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"MS\" type=\"America/Montserrat\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"PR\" type=\"America/Puerto_Rico\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"SX\" type=\"America/Lower_Princes\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"TT\" type=\"America/Port_of_Spain\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"VC\" type=\"America/St_Vincent\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"VG\" type=\"America/Tortola\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"VI\" type=\"America/St_Thomas\"/>\n\t\t\t<mapZone other=\"SA Western Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+4\"/>\n\n\t\t\t<!-- (UTC-04:00) Santiago -->\n\t\t\t<mapZone other=\"Pacific SA Standard Time\" territory=\"001\" type=\"America/Santiago\"/>\n\t\t\t<mapZone other=\"Pacific SA Standard Time\" territory=\"AQ\" type=\"Antarctica/Palmer\"/>\n\t\t\t<mapZone other=\"Pacific SA Standard Time\" territory=\"CL\" type=\"America/Santiago\"/>\n\n\t\t\t<!-- (UTC-03:30) Newfoundland -->\n\t\t\t<mapZone other=\"Newfoundland Standard Time\" territory=\"001\" type=\"America/St_Johns\"/>\n\t\t\t<mapZone other=\"Newfoundland Standard Time\" territory=\"CA\" type=\"America/St_Johns\"/>\n\n\t\t\t<!-- (UTC-03:00) Brasilia -->\n\t\t\t<mapZone other=\"E. South America Standard Time\" territory=\"001\" type=\"America/Sao_Paulo\"/>\n\t\t\t<mapZone other=\"E. South America Standard Time\" territory=\"BR\" type=\"America/Sao_Paulo\"/>\n\n\t\t\t<!-- (UTC-03:00) Buenos Aires -->\n\t\t\t<mapZone other=\"Argentina Standard Time\" territory=\"001\" type=\"America/Buenos_Aires\"/>\n\t\t\t<mapZone other=\"Argentina Standard Time\" territory=\"AR\" type=\"America/Buenos_Aires America/Argentina/La_Rioja America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Catamarca America/Cordoba America/Jujuy America/Mendoza\"/>\n\n\t\t\t<!-- (UTC-03:00) Cayenne, Fortaleza -->\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"001\" type=\"America/Cayenne\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"AQ\" type=\"Antarctica/Rothera\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"BR\" type=\"America/Fortaleza America/Araguaina America/Belem America/Maceio America/Recife America/Santarem\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"FK\" type=\"Atlantic/Stanley\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"GF\" type=\"America/Cayenne\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"SR\" type=\"America/Paramaribo\"/>\n\t\t\t<mapZone other=\"SA Eastern Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+3\"/>\n\n\t\t\t<!-- (UTC-03:00) Greenland -->\n\t\t\t<mapZone other=\"Greenland Standard Time\" territory=\"001\" type=\"America/Godthab\"/>\n\t\t\t<mapZone other=\"Greenland Standard Time\" territory=\"GL\" type=\"America/Godthab\"/>\n\n\t\t\t<!-- (UTC-03:00) Montevideo -->\n\t\t\t<mapZone other=\"Montevideo Standard Time\" territory=\"001\" type=\"America/Montevideo\"/>\n\t\t\t<mapZone other=\"Montevideo Standard Time\" territory=\"UY\" type=\"America/Montevideo\"/>\n\n\t\t\t<!-- (UTC-03:00) Salvador -->\n\t\t\t<mapZone other=\"Bahia Standard Time\" territory=\"001\" type=\"America/Bahia\"/>\n\t\t\t<mapZone other=\"Bahia Standard Time\" territory=\"BR\" type=\"America/Bahia\"/>\n\n\t\t\t<!-- (UTC-02:00) Coordinated Universal Time-02 -->\n\t\t\t<mapZone other=\"UTC-02\" territory=\"001\" type=\"Etc/GMT+2\"/>\n\t\t\t<mapZone other=\"UTC-02\" territory=\"BR\" type=\"America/Noronha\"/>\n\t\t\t<mapZone other=\"UTC-02\" territory=\"GS\" type=\"Atlantic/South_Georgia\"/>\n\t\t\t<mapZone other=\"UTC-02\" territory=\"ZZ\" type=\"Etc/GMT+2\"/>\n\n\t\t\t<!-- (UTC-02:00) Mid-Atlantic -->\n\t\t\t<!-- Unmappable -->\n\n\t\t\t<!-- (UTC-01:00) Azores -->\n\t\t\t<mapZone other=\"Azores Standard Time\" territory=\"001\" type=\"Atlantic/Azores\"/>\n\t\t\t<mapZone other=\"Azores Standard Time\" territory=\"GL\" type=\"America/Scoresbysund\"/>\n\t\t\t<mapZone other=\"Azores Standard Time\" territory=\"PT\" type=\"Atlantic/Azores\"/>\n\n\t\t\t<!-- (UTC-01:00) Cape Verde Is. -->\n\t\t\t<mapZone other=\"Cape Verde Standard Time\" territory=\"001\" type=\"Atlantic/Cape_Verde\"/>\n\t\t\t<mapZone other=\"Cape Verde Standard Time\" territory=\"CV\" type=\"Atlantic/Cape_Verde\"/>\n\t\t\t<mapZone other=\"Cape Verde Standard Time\" territory=\"ZZ\" type=\"Etc/GMT+1\"/>\n\n\t\t\t<!-- (UTC) Casablanca -->\n\t\t\t<mapZone other=\"Morocco Standard Time\" territory=\"001\" type=\"Africa/Casablanca\"/>\n\t\t\t<mapZone other=\"Morocco Standard Time\" territory=\"MA\" type=\"Africa/Casablanca\"/>\n\n\t\t\t<!-- (UTC) Coordinated Universal Time -->\n\t\t\t<mapZone other=\"UTC\" territory=\"001\" type=\"Etc/GMT\"/>\n\t\t\t<mapZone other=\"UTC\" territory=\"GL\" type=\"America/Danmarkshavn\"/>\n\t\t\t<mapZone other=\"UTC\" territory=\"ZZ\" type=\"Etc/GMT\"/>\n\n\t\t\t<!-- (UTC) Dublin, Edinburgh, Lisbon, London -->\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"001\" type=\"Europe/London\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"ES\" type=\"Atlantic/Canary\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"FO\" type=\"Atlantic/Faeroe\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"GB\" type=\"Europe/London\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"GG\" type=\"Europe/Guernsey\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"IE\" type=\"Europe/Dublin\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"IM\" type=\"Europe/Isle_of_Man\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"JE\" type=\"Europe/Jersey\"/>\n\t\t\t<mapZone other=\"GMT Standard Time\" territory=\"PT\" type=\"Europe/Lisbon Atlantic/Madeira\"/>\n\n\t\t\t<!-- (UTC) Monrovia, Reykjavik -->\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"001\" type=\"Atlantic/Reykjavik\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"BF\" type=\"Africa/Ouagadougou\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"CI\" type=\"Africa/Abidjan\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"EH\" type=\"Africa/El_Aaiun\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"GH\" type=\"Africa/Accra\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"GM\" type=\"Africa/Banjul\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"GN\" type=\"Africa/Conakry\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"GW\" type=\"Africa/Bissau\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"IS\" type=\"Atlantic/Reykjavik\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"LR\" type=\"Africa/Monrovia\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"ML\" type=\"Africa/Bamako\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"MR\" type=\"Africa/Nouakchott\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"SH\" type=\"Atlantic/St_Helena\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"SL\" type=\"Africa/Freetown\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"SN\" type=\"Africa/Dakar\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"ST\" type=\"Africa/Sao_Tome\"/>\n\t\t\t<mapZone other=\"Greenwich Standard Time\" territory=\"TG\" type=\"Africa/Lome\"/>\n\n\t\t\t<!-- (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna -->\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"001\" type=\"Europe/Berlin\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"AD\" type=\"Europe/Andorra\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"AT\" type=\"Europe/Vienna\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"CH\" type=\"Europe/Zurich\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"DE\" type=\"Europe/Berlin\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"GI\" type=\"Europe/Gibraltar\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"IT\" type=\"Europe/Rome\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"LI\" type=\"Europe/Vaduz\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"LU\" type=\"Europe/Luxembourg\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"MC\" type=\"Europe/Monaco\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"MT\" type=\"Europe/Malta\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"NL\" type=\"Europe/Amsterdam\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"NO\" type=\"Europe/Oslo\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"SE\" type=\"Europe/Stockholm\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"SJ\" type=\"Arctic/Longyearbyen\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"SM\" type=\"Europe/San_Marino\"/>\n\t\t\t<mapZone other=\"W. Europe Standard Time\" territory=\"VA\" type=\"Europe/Vatican\"/>\n\n\t\t\t<!-- (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague -->\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"001\" type=\"Europe/Budapest\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"AL\" type=\"Europe/Tirane\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"CZ\" type=\"Europe/Prague\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"HU\" type=\"Europe/Budapest\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"ME\" type=\"Europe/Podgorica\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"RS\" type=\"Europe/Belgrade\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"SI\" type=\"Europe/Ljubljana\"/>\n\t\t\t<mapZone other=\"Central Europe Standard Time\" territory=\"SK\" type=\"Europe/Bratislava\"/>\n\n\t\t\t<!-- (UTC+01:00) Brussels, Copenhagen, Madrid, Paris -->\n\t\t\t<mapZone other=\"Romance Standard Time\" territory=\"001\" type=\"Europe/Paris\"/>\n\t\t\t<mapZone other=\"Romance Standard Time\" territory=\"BE\" type=\"Europe/Brussels\"/>\n\t\t\t<mapZone other=\"Romance Standard Time\" territory=\"DK\" type=\"Europe/Copenhagen\"/>\n\t\t\t<mapZone other=\"Romance Standard Time\" territory=\"ES\" type=\"Europe/Madrid Africa/Ceuta\"/>\n\t\t\t<mapZone other=\"Romance Standard Time\" territory=\"FR\" type=\"Europe/Paris\"/>\n\n\t\t\t<!-- (UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb -->\n\t\t\t<mapZone other=\"Central European Standard Time\" territory=\"001\" type=\"Europe/Warsaw\"/>\n\t\t\t<mapZone other=\"Central European Standard Time\" territory=\"BA\" type=\"Europe/Sarajevo\"/>\n\t\t\t<mapZone other=\"Central European Standard Time\" territory=\"HR\" type=\"Europe/Zagreb\"/>\n\t\t\t<mapZone other=\"Central European Standard Time\" territory=\"MK\" type=\"Europe/Skopje\"/>\n\t\t\t<mapZone other=\"Central European Standard Time\" territory=\"PL\" type=\"Europe/Warsaw\"/>\n\n\t\t\t<!-- (UTC+01:00) West Central Africa -->\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"001\" type=\"Africa/Lagos\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"AO\" type=\"Africa/Luanda\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"BJ\" type=\"Africa/Porto-Novo\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"CD\" type=\"Africa/Kinshasa\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"CF\" type=\"Africa/Bangui\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"CG\" type=\"Africa/Brazzaville\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"CM\" type=\"Africa/Douala\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"DZ\" type=\"Africa/Algiers\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"GA\" type=\"Africa/Libreville\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"GQ\" type=\"Africa/Malabo\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"NE\" type=\"Africa/Niamey\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"NG\" type=\"Africa/Lagos\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"TD\" type=\"Africa/Ndjamena\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"TN\" type=\"Africa/Tunis\"/>\n\t\t\t<mapZone other=\"W. Central Africa Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-1\"/>\n\n\t\t\t<!-- (UTC+01:00) Windhoek -->\n\t\t\t<mapZone other=\"Namibia Standard Time\" territory=\"001\" type=\"Africa/Windhoek\"/>\n\t\t\t<mapZone other=\"Namibia Standard Time\" territory=\"NA\" type=\"Africa/Windhoek\"/>\n\n\t\t\t<!-- (UTC+02:00) Amman -->\n\t\t\t<mapZone other=\"Jordan Standard Time\" territory=\"001\" type=\"Asia/Amman\"/>\n\t\t\t<mapZone other=\"Jordan Standard Time\" territory=\"JO\" type=\"Asia/Amman\"/>\n\n\t\t\t<!-- (UTC+02:00) Athens, Bucharest -->\n\t\t\t<mapZone other=\"GTB Standard Time\" territory=\"001\" type=\"Europe/Bucharest\"/>\n\t\t\t<mapZone other=\"GTB Standard Time\" territory=\"GR\" type=\"Europe/Athens\"/>\n\t\t\t<mapZone other=\"GTB Standard Time\" territory=\"MD\" type=\"Europe/Chisinau\"/>\n\t\t\t<mapZone other=\"GTB Standard Time\" territory=\"RO\" type=\"Europe/Bucharest\"/>\n\n\t\t\t<!-- (UTC+02:00) Beirut -->\n\t\t\t<mapZone other=\"Middle East Standard Time\" territory=\"001\" type=\"Asia/Beirut\"/>\n\t\t\t<mapZone other=\"Middle East Standard Time\" territory=\"LB\" type=\"Asia/Beirut\"/>\n\n\t\t\t<!-- (UTC+02:00) Cairo -->\n\t\t\t<mapZone other=\"Egypt Standard Time\" territory=\"001\" type=\"Africa/Cairo\"/>\n\t\t\t<mapZone other=\"Egypt Standard Time\" territory=\"EG\" type=\"Africa/Cairo\"/>\n\t\t\t<mapZone other=\"Egypt Standard Time\" territory=\"PS\" type=\"Asia/Gaza Asia/Hebron\"/>\n\n\t\t\t<!-- (UTC+02:00) Damascus -->\n\t\t\t<mapZone other=\"Syria Standard Time\" territory=\"001\" type=\"Asia/Damascus\"/>\n\t\t\t<mapZone other=\"Syria Standard Time\" territory=\"SY\" type=\"Asia/Damascus\"/>\n\n\t\t\t<!-- (UTC+02:00) Harare, Pretoria -->\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"001\" type=\"Africa/Johannesburg\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"BI\" type=\"Africa/Bujumbura\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"BW\" type=\"Africa/Gaborone\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"CD\" type=\"Africa/Lubumbashi\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"LS\" type=\"Africa/Maseru\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"LY\" type=\"Africa/Tripoli\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"MW\" type=\"Africa/Blantyre\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"MZ\" type=\"Africa/Maputo\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"RW\" type=\"Africa/Kigali\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"SZ\" type=\"Africa/Mbabane\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"ZA\" type=\"Africa/Johannesburg\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"ZM\" type=\"Africa/Lusaka\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"ZW\" type=\"Africa/Harare\"/>\n\t\t\t<mapZone other=\"South Africa Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-2\"/>\n\n\t\t\t<!-- (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius -->\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"001\" type=\"Europe/Kiev\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"AX\" type=\"Europe/Mariehamn\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"BG\" type=\"Europe/Sofia\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"EE\" type=\"Europe/Tallinn\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"FI\" type=\"Europe/Helsinki\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"LT\" type=\"Europe/Vilnius\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"LV\" type=\"Europe/Riga\"/>\n\t\t\t<mapZone other=\"FLE Standard Time\" territory=\"UA\" type=\"Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye\"/>\n\n\t\t\t<!-- (UTC+02:00) Istanbul -->\n\t\t\t<mapZone other=\"Turkey Standard Time\" territory=\"001\" type=\"Europe/Istanbul\"/>\n\t\t\t<mapZone other=\"Turkey Standard Time\" territory=\"TR\" type=\"Europe/Istanbul\"/>\n\n\t\t\t<!-- (UTC+02:00) Jerusalem -->\n\t\t\t<mapZone other=\"Israel Standard Time\" territory=\"001\" type=\"Asia/Jerusalem\"/>\n\t\t\t<mapZone other=\"Israel Standard Time\" territory=\"IL\" type=\"Asia/Jerusalem\"/>\n\n\t\t\t<!-- (UTC+02:00) Nicosia -->\n\t\t\t<mapZone other=\"E. Europe Standard Time\" territory=\"001\" type=\"Asia/Nicosia\"/>\n\t\t\t<mapZone other=\"E. Europe Standard Time\" territory=\"CY\" type=\"Asia/Nicosia\"/>\n\n\t\t\t<!-- (UTC+03:00) Baghdad -->\n\t\t\t<mapZone other=\"Arabic Standard Time\" territory=\"001\" type=\"Asia/Baghdad\"/>\n\t\t\t<mapZone other=\"Arabic Standard Time\" territory=\"IQ\" type=\"Asia/Baghdad\"/>\n\n\t\t\t<!-- (UTC+03:00) Kaliningrad, Minsk -->\n\t\t\t<mapZone other=\"Kaliningrad Standard Time\" territory=\"001\" type=\"Europe/Kaliningrad\"/>\n\t\t\t<mapZone other=\"Kaliningrad Standard Time\" territory=\"BY\" type=\"Europe/Minsk\"/>\n\t\t\t<mapZone other=\"Kaliningrad Standard Time\" territory=\"RU\" type=\"Europe/Kaliningrad\"/>\n\n\t\t\t<!-- (UTC+03:00) Kuwait, Riyadh -->\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"001\" type=\"Asia/Riyadh\"/>\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"BH\" type=\"Asia/Bahrain\"/>\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"KW\" type=\"Asia/Kuwait\"/>\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"QA\" type=\"Asia/Qatar\"/>\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"SA\" type=\"Asia/Riyadh\"/>\n\t\t\t<mapZone other=\"Arab Standard Time\" territory=\"YE\" type=\"Asia/Aden\"/>\n\n\t\t\t<!-- (UTC+03:00) Nairobi -->\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"001\" type=\"Africa/Nairobi\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"AQ\" type=\"Antarctica/Syowa\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"DJ\" type=\"Africa/Djibouti\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"ER\" type=\"Africa/Asmera\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"ET\" type=\"Africa/Addis_Ababa\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"KE\" type=\"Africa/Nairobi\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"KM\" type=\"Indian/Comoro\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"MG\" type=\"Indian/Antananarivo\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"SD\" type=\"Africa/Khartoum\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"SO\" type=\"Africa/Mogadishu\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"SS\" type=\"Africa/Juba\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"TZ\" type=\"Africa/Dar_es_Salaam\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"UG\" type=\"Africa/Kampala\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"YT\" type=\"Indian/Mayotte\"/>\n\t\t\t<mapZone other=\"E. Africa Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-3\"/>\n\n\t\t\t<!-- (UTC+03:30) Tehran -->\n\t\t\t<mapZone other=\"Iran Standard Time\" territory=\"001\" type=\"Asia/Tehran\"/>\n\t\t\t<mapZone other=\"Iran Standard Time\" territory=\"IR\" type=\"Asia/Tehran\"/>\n\n\t\t\t<!-- (UTC+04:00) Abu Dhabi, Muscat -->\n\t\t\t<mapZone other=\"Arabian Standard Time\" territory=\"001\" type=\"Asia/Dubai\"/>\n\t\t\t<mapZone other=\"Arabian Standard Time\" territory=\"AE\" type=\"Asia/Dubai\"/>\n\t\t\t<mapZone other=\"Arabian Standard Time\" territory=\"OM\" type=\"Asia/Muscat\"/>\n\t\t\t<mapZone other=\"Arabian Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-4\"/>\n\n\t\t\t<!-- (UTC+04:00) Baku -->\n\t\t\t<mapZone other=\"Azerbaijan Standard Time\" territory=\"001\" type=\"Asia/Baku\"/>\n\t\t\t<mapZone other=\"Azerbaijan Standard Time\" territory=\"AZ\" type=\"Asia/Baku\"/>\n\n\t\t\t<!-- (UTC+04:00) Moscow, St. Petersburg, Volgograd -->\n\t\t\t<mapZone other=\"Russian Standard Time\" territory=\"001\" type=\"Europe/Moscow\"/>\n\t\t\t<mapZone other=\"Russian Standard Time\" territory=\"RU\" type=\"Europe/Moscow Europe/Samara Europe/Volgograd\"/>\n\n\t\t\t<!-- (UTC+04:00) Port Louis -->\n\t\t\t<mapZone other=\"Mauritius Standard Time\" territory=\"001\" type=\"Indian/Mauritius\"/>\n\t\t\t<mapZone other=\"Mauritius Standard Time\" territory=\"MU\" type=\"Indian/Mauritius\"/>\n\t\t\t<mapZone other=\"Mauritius Standard Time\" territory=\"RE\" type=\"Indian/Reunion\"/>\n\t\t\t<mapZone other=\"Mauritius Standard Time\" territory=\"SC\" type=\"Indian/Mahe\"/>\n\n\t\t\t<!-- (UTC+04:00) Tbilisi -->\n\t\t\t<mapZone other=\"Georgian Standard Time\" territory=\"001\" type=\"Asia/Tbilisi\"/>\n\t\t\t<mapZone other=\"Georgian Standard Time\" territory=\"GE\" type=\"Asia/Tbilisi\"/>\n\n\t\t\t<!-- (UTC+04:00) Yerevan -->\n\t\t\t<mapZone other=\"Caucasus Standard Time\" territory=\"001\" type=\"Asia/Yerevan\"/>\n\t\t\t<mapZone other=\"Caucasus Standard Time\" territory=\"AM\" type=\"Asia/Yerevan\"/>\n\n\t\t\t<!-- (UTC+04:30) Kabul -->\n\t\t\t<mapZone other=\"Afghanistan Standard Time\" territory=\"001\" type=\"Asia/Kabul\"/>\n\t\t\t<mapZone other=\"Afghanistan Standard Time\" territory=\"AF\" type=\"Asia/Kabul\"/>\n\n\t\t\t<!-- (UTC+05:00) Islamabad, Karachi -->\n\t\t\t<mapZone other=\"Pakistan Standard Time\" territory=\"001\" type=\"Asia/Karachi\"/>\n\t\t\t<mapZone other=\"Pakistan Standard Time\" territory=\"PK\" type=\"Asia/Karachi\"/>\n\n\t\t\t<!-- (UTC+05:00) Tashkent -->\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"001\" type=\"Asia/Tashkent\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"AQ\" type=\"Antarctica/Mawson\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"KZ\" type=\"Asia/Oral Asia/Aqtau Asia/Aqtobe\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"MV\" type=\"Indian/Maldives\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"TF\" type=\"Indian/Kerguelen\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"TJ\" type=\"Asia/Dushanbe\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"TM\" type=\"Asia/Ashgabat\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"UZ\" type=\"Asia/Tashkent Asia/Samarkand\"/>\n\t\t\t<mapZone other=\"West Asia Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-5\"/>\n\n\t\t\t<!-- (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi -->\n\t\t\t<mapZone other=\"India Standard Time\" territory=\"001\" type=\"Asia/Calcutta\"/>\n\t\t\t<mapZone other=\"India Standard Time\" territory=\"IN\" type=\"Asia/Calcutta\"/>\n\n\t\t\t<!-- (UTC+05:30) Sri Jayawardenepura -->\n\t\t\t<mapZone other=\"Sri Lanka Standard Time\" territory=\"001\" type=\"Asia/Colombo\"/>\n\t\t\t<mapZone other=\"Sri Lanka Standard Time\" territory=\"LK\" type=\"Asia/Colombo\"/>\n\n\t\t\t<!-- (UTC+05:45) Kathmandu -->\n\t\t\t<mapZone other=\"Nepal Standard Time\" territory=\"001\" type=\"Asia/Katmandu\"/>\n\t\t\t<mapZone other=\"Nepal Standard Time\" territory=\"NP\" type=\"Asia/Katmandu\"/>\n\n\t\t\t<!-- (UTC+06:00) Astana -->\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"001\" type=\"Asia/Almaty\"/>\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"AQ\" type=\"Antarctica/Vostok\"/>\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"IO\" type=\"Indian/Chagos\"/>\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"KG\" type=\"Asia/Bishkek\"/>\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"KZ\" type=\"Asia/Almaty Asia/Qyzylorda\"/>\n\t\t\t<mapZone other=\"Central Asia Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-6\"/>\n\n\t\t\t<!-- (UTC+06:00) Dhaka -->\n\t\t\t<mapZone other=\"Bangladesh Standard Time\" territory=\"001\" type=\"Asia/Dhaka\"/>\n\t\t\t<mapZone other=\"Bangladesh Standard Time\" territory=\"BD\" type=\"Asia/Dhaka\"/>\n\t\t\t<mapZone other=\"Bangladesh Standard Time\" territory=\"BT\" type=\"Asia/Thimphu\"/>\n\n\t\t\t<!-- (UTC+06:00) Ekaterinburg -->\n\t\t\t<mapZone other=\"Ekaterinburg Standard Time\" territory=\"001\" type=\"Asia/Yekaterinburg\"/>\n\t\t\t<mapZone other=\"Ekaterinburg Standard Time\" territory=\"RU\" type=\"Asia/Yekaterinburg\"/>\n\n\t\t\t<!-- (UTC+06:30) Yangon (Rangoon) -->\n\t\t\t<mapZone other=\"Myanmar Standard Time\" territory=\"001\" type=\"Asia/Rangoon\"/>\n\t\t\t<mapZone other=\"Myanmar Standard Time\" territory=\"CC\" type=\"Indian/Cocos\"/>\n\t\t\t<mapZone other=\"Myanmar Standard Time\" territory=\"MM\" type=\"Asia/Rangoon\"/>\n\n\t\t\t<!-- (UTC+07:00) Bangkok, Hanoi, Jakarta -->\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"001\" type=\"Asia/Bangkok\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"AQ\" type=\"Antarctica/Davis\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"CX\" type=\"Indian/Christmas\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"ID\" type=\"Asia/Jakarta Asia/Pontianak\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"KH\" type=\"Asia/Phnom_Penh\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"LA\" type=\"Asia/Vientiane\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"MN\" type=\"Asia/Hovd\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"TH\" type=\"Asia/Bangkok\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"VN\" type=\"Asia/Saigon\"/>\n\t\t\t<mapZone other=\"SE Asia Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-7\"/>\n\n\t\t\t<!-- (UTC+07:00) Novosibirsk -->\n\t\t\t<mapZone other=\"N. Central Asia Standard Time\" territory=\"001\" type=\"Asia/Novosibirsk\"/>\n\t\t\t<mapZone other=\"N. Central Asia Standard Time\" territory=\"RU\" type=\"Asia/Novosibirsk Asia/Novokuznetsk Asia/Omsk\"/>\n\n\t\t\t<!-- (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi -->\n\t\t\t<mapZone other=\"China Standard Time\" territory=\"001\" type=\"Asia/Shanghai\"/>\n\t\t\t<mapZone other=\"China Standard Time\" territory=\"CN\" type=\"Asia/Shanghai Asia/Chongqing Asia/Harbin Asia/Kashgar Asia/Urumqi\"/>\n\t\t\t<mapZone other=\"China Standard Time\" territory=\"HK\" type=\"Asia/Hong_Kong\"/>\n\t\t\t<mapZone other=\"China Standard Time\" territory=\"MO\" type=\"Asia/Macau\"/>\n\n\t\t\t<!-- (UTC+08:00) Krasnoyarsk -->\n\t\t\t<mapZone other=\"North Asia Standard Time\" territory=\"001\" type=\"Asia/Krasnoyarsk\"/>\n\t\t\t<mapZone other=\"North Asia Standard Time\" territory=\"RU\" type=\"Asia/Krasnoyarsk\"/>\n\n\t\t\t<!-- (UTC+08:00) Kuala Lumpur, Singapore -->\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"001\" type=\"Asia/Singapore\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"BN\" type=\"Asia/Brunei\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"ID\" type=\"Asia/Makassar\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"MY\" type=\"Asia/Kuala_Lumpur Asia/Kuching\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"PH\" type=\"Asia/Manila\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"SG\" type=\"Asia/Singapore\"/>\n\t\t\t<mapZone other=\"Singapore Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-8\"/>\n\n\t\t\t<!-- (UTC+08:00) Perth -->\n\t\t\t<mapZone other=\"W. Australia Standard Time\" territory=\"001\" type=\"Australia/Perth\"/>\n\t\t\t<mapZone other=\"W. Australia Standard Time\" territory=\"AQ\" type=\"Antarctica/Casey\"/>\n\t\t\t<mapZone other=\"W. Australia Standard Time\" territory=\"AU\" type=\"Australia/Perth\"/>\n\n\t\t\t<!-- (UTC+08:00) Taipei -->\n\t\t\t<mapZone other=\"Taipei Standard Time\" territory=\"001\" type=\"Asia/Taipei\"/>\n\t\t\t<mapZone other=\"Taipei Standard Time\" territory=\"TW\" type=\"Asia/Taipei\"/>\n\n\t\t\t<!-- (UTC+08:00) Ulaanbaatar -->\n\t\t\t<mapZone other=\"Ulaanbaatar Standard Time\" territory=\"001\" type=\"Asia/Ulaanbaatar\"/>\n\t\t\t<mapZone other=\"Ulaanbaatar Standard Time\" territory=\"MN\" type=\"Asia/Ulaanbaatar Asia/Choibalsan\"/>\n\n\t\t\t<!-- (UTC+09:00) Irkutsk -->\n\t\t\t<mapZone other=\"North Asia East Standard Time\" territory=\"001\" type=\"Asia/Irkutsk\"/>\n\t\t\t<mapZone other=\"North Asia East Standard Time\" territory=\"RU\" type=\"Asia/Irkutsk\"/>\n\n\t\t\t<!-- (UTC+09:00) Osaka, Sapporo, Tokyo -->\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"001\" type=\"Asia/Tokyo\"/>\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"ID\" type=\"Asia/Jayapura\"/>\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"JP\" type=\"Asia/Tokyo\"/>\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"PW\" type=\"Pacific/Palau\"/>\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"TL\" type=\"Asia/Dili\"/>\n\t\t\t<mapZone other=\"Tokyo Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-9\"/>\n\n\t\t\t<!-- (UTC+09:00) Seoul -->\n\t\t\t<mapZone other=\"Korea Standard Time\" territory=\"001\" type=\"Asia/Seoul\"/>\n\t\t\t<mapZone other=\"Korea Standard Time\" territory=\"KP\" type=\"Asia/Pyongyang\"/>\n\t\t\t<mapZone other=\"Korea Standard Time\" territory=\"KR\" type=\"Asia/Seoul\"/>\n\n\t\t\t<!-- (UTC+09:30) Adelaide -->\n\t\t\t<mapZone other=\"Cen. Australia Standard Time\" territory=\"001\" type=\"Australia/Adelaide\"/>\n\t\t\t<mapZone other=\"Cen. Australia Standard Time\" territory=\"AU\" type=\"Australia/Adelaide Australia/Broken_Hill\"/>\n\n\t\t\t<!-- (UTC+09:30) Darwin -->\n\t\t\t<mapZone other=\"AUS Central Standard Time\" territory=\"001\" type=\"Australia/Darwin\"/>\n\t\t\t<mapZone other=\"AUS Central Standard Time\" territory=\"AU\" type=\"Australia/Darwin\"/>\n\n\t\t\t<!-- (UTC+10:00) Brisbane -->\n\t\t\t<mapZone other=\"E. Australia Standard Time\" territory=\"001\" type=\"Australia/Brisbane\"/>\n\t\t\t<mapZone other=\"E. Australia Standard Time\" territory=\"AU\" type=\"Australia/Brisbane Australia/Lindeman\"/>\n\n\t\t\t<!-- (UTC+10:00) Canberra, Melbourne, Sydney -->\n\t\t\t<mapZone other=\"AUS Eastern Standard Time\" territory=\"001\" type=\"Australia/Sydney\"/>\n\t\t\t<mapZone other=\"AUS Eastern Standard Time\" territory=\"AU\" type=\"Australia/Sydney Australia/Melbourne\"/>\n\n\t\t\t<!-- (UTC+10:00) Guam, Port Moresby -->\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"001\" type=\"Pacific/Port_Moresby\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"AQ\" type=\"Antarctica/DumontDUrville\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"FM\" type=\"Pacific/Truk\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"GU\" type=\"Pacific/Guam\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"MP\" type=\"Pacific/Saipan\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"PG\" type=\"Pacific/Port_Moresby\"/>\n\t\t\t<mapZone other=\"West Pacific Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-10\"/>\n\n\t\t\t<!-- (UTC+10:00) Hobart -->\n\t\t\t<mapZone other=\"Tasmania Standard Time\" territory=\"001\" type=\"Australia/Hobart\"/>\n\t\t\t<mapZone other=\"Tasmania Standard Time\" territory=\"AU\" type=\"Australia/Hobart Australia/Currie\"/>\n\n\t\t\t<!-- (UTC+10:00) Yakutsk -->\n\t\t\t<mapZone other=\"Yakutsk Standard Time\" territory=\"001\" type=\"Asia/Yakutsk\"/>\n\t\t\t<mapZone other=\"Yakutsk Standard Time\" territory=\"RU\" type=\"Asia/Yakutsk\"/>\n\n\t\t\t<!-- (UTC+11:00) Solomon Is., New Caledonia -->\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"001\" type=\"Pacific/Guadalcanal\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"AQ\" type=\"Antarctica/Macquarie\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"FM\" type=\"Pacific/Ponape Pacific/Kosrae\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"NC\" type=\"Pacific/Noumea\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"SB\" type=\"Pacific/Guadalcanal\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"VU\" type=\"Pacific/Efate\"/>\n\t\t\t<mapZone other=\"Central Pacific Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-11\"/>\n\n\t\t\t<!-- (UTC+11:00) Vladivostok -->\n\t\t\t<mapZone other=\"Vladivostok Standard Time\" territory=\"001\" type=\"Asia/Vladivostok\"/>\n\t\t\t<mapZone other=\"Vladivostok Standard Time\" territory=\"RU\" type=\"Asia/Vladivostok Asia/Sakhalin\"/>\n\n\t\t\t<!-- (UTC+12:00) Auckland, Wellington -->\n\t\t\t<mapZone other=\"New Zealand Standard Time\" territory=\"001\" type=\"Pacific/Auckland\"/>\n\t\t\t<mapZone other=\"New Zealand Standard Time\" territory=\"AQ\" type=\"Antarctica/South_Pole Antarctica/McMurdo\"/>\n\t\t\t<mapZone other=\"New Zealand Standard Time\" territory=\"NZ\" type=\"Pacific/Auckland\"/>\n\n\t\t\t<!-- (UTC+12:00) Coordinated Universal Time+12 -->\n\t\t\t<mapZone other=\"UTC+12\" territory=\"001\" type=\"Etc/GMT-12\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"KI\" type=\"Pacific/Tarawa\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"MH\" type=\"Pacific/Majuro Pacific/Kwajalein\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"NR\" type=\"Pacific/Nauru\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"TV\" type=\"Pacific/Funafuti\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"UM\" type=\"Pacific/Wake\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"WF\" type=\"Pacific/Wallis\"/>\n\t\t\t<mapZone other=\"UTC+12\" territory=\"ZZ\" type=\"Etc/GMT-12\"/>\n\n\t\t\t<!-- (UTC+12:00) Fiji -->\n\t\t\t<mapZone other=\"Fiji Standard Time\" territory=\"001\" type=\"Pacific/Fiji\"/>\n\t\t\t<mapZone other=\"Fiji Standard Time\" territory=\"FJ\" type=\"Pacific/Fiji\"/>\n\n\t\t\t<!-- (UTC+12:00) Magadan -->\n\t\t\t<mapZone other=\"Magadan Standard Time\" territory=\"001\" type=\"Asia/Magadan\"/>\n\t\t\t<mapZone other=\"Magadan Standard Time\" territory=\"RU\" type=\"Asia/Magadan Asia/Anadyr Asia/Kamchatka\"/>\n\n\t\t\t<!-- (UTC+13:00) Nuku'alofa -->\n\t\t\t<mapZone other=\"Tonga Standard Time\" territory=\"001\" type=\"Pacific/Tongatapu\"/>\n\t\t\t<mapZone other=\"Tonga Standard Time\" territory=\"KI\" type=\"Pacific/Enderbury\"/>\n\t\t\t<mapZone other=\"Tonga Standard Time\" territory=\"TO\" type=\"Pacific/Tongatapu\"/>\n\t\t\t<mapZone other=\"Tonga Standard Time\" territory=\"ZZ\" type=\"Etc/GMT-13\"/>\n\n\t\t\t<!-- (UTC+13:00) Samoa -->\n\t\t\t<mapZone other=\"Samoa Standard Time\" territory=\"001\" type=\"Pacific/Apia\"/>\n\t\t\t<mapZone other=\"Samoa Standard Time\" territory=\"WS\" type=\"Pacific/Apia\"/>\n\t\t</mapTimezones>\n\t</windowsZones>\n</supplementalData>\n"
  },
  {
    "path": "Source/ClassLibrary/SPL/Autoload.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// Functions for date and time manipulation.\r\n    /// </summary>\r\n    /// <threadsafety static=\"true\"/>\r\n    [ImplementsExtension(LibraryDescriptor.ExtSpl)]\r\n    public static class Autoload\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// The name of spl_autoload default function.\r\n        /// </summary>\r\n        public const string SplAutoloadFunction = \"spl_autoload\";\r\n\r\n        #endregion\r\n\r\n        #region spl_autoload_call, spl_autoload_extensions, spl_autoload_functions, spl_autoload_register, spl_autoload_unregister, spl_autoload\r\n\r\n        /// <summary>\r\n        /// This function can be used to manually search for a class or interface using the registered __autoload functions.\r\n        /// </summary>\r\n        [ImplementsFunction(\"spl_autoload_call\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static void Call(NamingContext namingContext, DTypeDesc caller, string className)\r\n        {\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            // If class isn't defined autoload functions are called automatically until class is declared\r\n            if (context.IsSplAutoloadEnabled)\r\n                ScriptContext.CurrentContext.ResolveType(className, namingContext, caller, null, ResolveTypeFlags.UseAutoload);\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_extensions\")]\r\n        public static string SetExtensions()\r\n        {\r\n            var context = ScriptContext.CurrentContext;\r\n\r\n            StringBuilder sb = null;\r\n            foreach (string extension in context.SplAutoloadExtensions)\r\n            {\r\n                if (sb == null) sb = new StringBuilder();\r\n                else sb.Append(',');\r\n\r\n                sb.Append(extension);\r\n            }\r\n\r\n            return sb.ToString();\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_extensions\")]\r\n        public static string SetExtensions(string fileExtensions)\r\n        {\r\n            ScriptContext.CurrentContext.SplAutoloadExtensions = Array.ConvertAll(fileExtensions.Split(new char[] { ',' }), (value) => value.Trim());\r\n\r\n            return fileExtensions;\r\n        }\r\n                \r\n        [ImplementsFunction(\"spl_autoload_functions\")]\r\n        [return:CastToFalse]\r\n        public static PhpArray GetFunctions()\r\n        {\r\n            var context = ScriptContext.CurrentContext;\r\n            if (context.IsSplAutoloadEnabled)\r\n            {\r\n                PhpArray result = new PhpArray();\r\n                foreach (var func in context.SplAutoloadFunctions)\r\n                    result.Add(func.ToPhpRepresentation());\r\n                \r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n\r\n            \r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_register\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static bool Register(NamingContext namingContext, DTypeDesc caller)\r\n        {\r\n            return Register(namingContext, caller, new PhpCallback(SplAutoloadFunction), true, false);\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_register\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction)\r\n        {\r\n            return Register(namingContext, caller, autoloadFunction, true, false);\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_register\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction, bool throwError)\r\n        {\r\n            return Register(namingContext, caller, autoloadFunction, throwError, false);\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_register\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static bool Register(NamingContext namingContext, DTypeDesc caller, PhpCallback autoloadFunction, bool throwError, bool prepend)\r\n        {\r\n            if (autoloadFunction == null)\r\n            {\r\n                PhpException.ArgumentNull(\"autoloadFunction\");\r\n                return false;\r\n            }\r\n\r\n            if (autoloadFunction.Bind(!throwError, caller, namingContext))\r\n            {\r\n                var context = ScriptContext.CurrentContext;\r\n                if (FindAutoloadFunction(context, autoloadFunction.ToPhpRepresentation()) != null)\r\n                    return false;\r\n                \r\n                if (prepend)\r\n                    context.SplAutoloadFunctions.AddFirst(autoloadFunction);\r\n                else\r\n                    context.SplAutoloadFunctions.AddLast(autoloadFunction);\r\n\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload_unregister\")]\r\n        public static bool Unregister(object autoloadFunction)\r\n        {\r\n            var context = ScriptContext.CurrentContext;\r\n            var functionNode = FindAutoloadFunction(context, autoloadFunction);\r\n\r\n            if (functionNode != null)\r\n            {\r\n                context.SplAutoloadFunctions.Remove(functionNode);\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        [ImplementsFunction(\"spl_autoload\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static void DefaultAutoload(NamingContext namingContext, DTypeDesc caller, string className)\r\n        {\r\n            // TODO: skip in pure mode\r\n\r\n            var context = ScriptContext.CurrentContext;\r\n\r\n            var fileExtensions = context.SplAutoloadExtensions.GetEnumerator();\r\n            bool stateChanged = true;\r\n\r\n            while (!stateChanged || ScriptContext.CurrentContext.ResolveType(className, namingContext, caller, null, ResolveTypeFlags.None) == null)\r\n            {\r\n                if (!fileExtensions.MoveNext())\r\n                {\r\n                    PhpException.Throw(PhpError.Error, string.Format(CoreResources.class_could_not_be_loaded, className));\r\n                    return;\r\n                }\r\n\r\n                // try to dynamically include the file specified by the class name, if it exists\r\n                string FullFileName = className + fileExtensions.Current;\r\n\r\n                if (PhpFile.Exists(FullFileName))\r\n                {\r\n                    context.DynamicInclude(FullFileName, context.WorkingDirectory, null, null, null, InclusionTypes.IncludeOnce);\r\n                    stateChanged = true;\r\n                }\r\n                else\r\n                {\r\n                    stateChanged = false;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region helpers\r\n\r\n        /// <summary>\r\n        /// Finds the specified autoload function list element.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current script context.</param>\r\n        /// <param name=\"autoloadFunction\">The PHP representation of callback function to find in list of SPL autoload functions.</param>\r\n        /// <returns>List node or null if such a functions does not exist in the list.</returns>\r\n        private static LinkedListNode<PhpCallback> FindAutoloadFunction(ScriptContext/*!*/context, object autoloadFunction)\r\n        {\r\n            Debug.Assert(context != null);\r\n\r\n            if (context.IsSplAutoloadEnabled)\r\n                for (var node = context.SplAutoloadFunctions.First; node != null; node = node.Next)\r\n                    if (PhpComparer.CompareEq(node.Value.ToPhpRepresentation(), autoloadFunction))\r\n                        return node;\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/SPL/FileSystem.cs",
    "content": "﻿using System;\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Reflection;\r\nusing System.IO;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// The SplFileInfo class offers a high-level object oriented interface to information for an individual file.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class SplFileInfo : PhpObject\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Internal file system entry.\r\n        /// </summary>\r\n        internal FileSystemInfo fs_info = null;\r\n\r\n        [PhpVisible]\r\n        private string pathName { get { return getPathnameInternal(this.fs_info); } }\r\n\r\n        [PhpVisible]\r\n        private string fileName { get { return getFilenameInternal(fs_info); } }\r\n\r\n        ///// <summary>\r\n        ///// <see cref=\"_info\"/> as <see cref=\"FileInfo\"/>.\r\n        ///// </summary>\r\n        //protected FileInfo FileInfo { get { return this._info as FileInfo; } }\r\n\r\n        ///// <summary>\r\n        ///// <see cref=\"_info\"/> as <see cref=\"DirectoryInfo\"/>.\r\n        ///// </summary>\r\n        //protected DirectoryInfo DirectoryInfo { get { return this._info as DirectoryInfo; } }\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFileInfo(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFileInfo(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new SplFileInfo object for the <paramref name=\"filename\"/> specified. The file does not need to exist, or be readable.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"filename\">File or directory name.</param>\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext/*!*/context, object filename)\r\n        {\r\n            // check arguments\r\n            string filenamestr = PhpVariable.AsString(filename);\r\n            if (filenamestr == null)\r\n            {\r\n                PhpException.InvalidArgumentType(\"filename\", PhpVariable.TypeNameString);\r\n            }\r\n            else\r\n            {\r\n                // TODO                \r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            var filename = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).__construct(stack.Context, filename);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        //public int getATime ( void )\r\n        //public string getBasename ([ string $suffix ] )\r\n        //public int getCTime ( void )\r\n        //public string getExtension ( void )\r\n        //public SplFileInfo getFileInfo ([ string $class_name ] )\r\n\r\n        protected static string getPathnameInternal(FileSystemInfo info)\r\n        {\r\n            if (info == null)\r\n                return string.Empty;\r\n\r\n            // handle . and ..\r\n            var originalPath = info.ToString();\r\n            if (originalPath.EndsWith(\".\"))\r\n            {\r\n                string fname = Path.GetFileName(originalPath);\r\n                if (fname == \".\" || fname == \"..\")\r\n                    return originalPath;\r\n            }\r\n\r\n            // otherwise use FullName\r\n            return info.FullName;\r\n        }\r\n\r\n        protected static string getFilenameInternal(FileSystemInfo info)\r\n        {\r\n            return (info != null) ? Path.GetFileName(info.ToString()) : string.Empty;   // we need original path, including \".\" and \"..\"\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getFilename(ScriptContext context)\r\n        {\r\n            return getFilenameInternal(this.fs_info);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getFilename(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).getFilename(stack.Context);\r\n        }\r\n\r\n        //public int getGroup ( void )\r\n        //public int getInode ( void )\r\n        //public string getLinkTarget ( void )\r\n        //public int getMTime ( void )\r\n        //public int getOwner ( void )\r\n\r\n        protected static string getPathInternal(FileSystemInfo/*!*/info)\r\n        {\r\n            Debug.Assert(info != null);\r\n            DirectoryInfo dir = info as DirectoryInfo ?? ((FileInfo)info).Directory;\r\n            return dir.FullName;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getPath(ScriptContext context)\r\n        {\r\n            return getPathInternal(this.fs_info);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getPath(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).getPath(stack.Context);\r\n        }\r\n\r\n        //public SplFileInfo getPathInfo ([ string $class_name ] )\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getPathname(ScriptContext context)\r\n        {\r\n            return getPathnameInternal(this.fs_info);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getPathname(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).getPathname(stack.Context);\r\n        }\r\n\r\n        //public int getPerms ( void )\r\n        //public string getRealPath ( void )\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/getSize(ScriptContext context)\r\n        {\r\n            if (this.fs_info is FileInfo)\r\n                return ((FileInfo)this.fs_info).Length;\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getSize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).getSize(stack.Context);\r\n        }\r\n\r\n        //public string getType ( void )\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDir(ScriptContext context)\r\n        {\r\n            return this.fs_info is DirectoryInfo;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDir(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).isDir(stack.Context);\r\n        }\r\n\r\n        //public bool isExecutable ( void )\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isFile(ScriptContext context)\r\n        {\r\n            return this.fs_info is FileInfo;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isFile(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).isFile(stack.Context);\r\n        }\r\n\r\n        //public bool isLink ( void )\r\n        //public bool isReadable ( void )\r\n        //public bool isWritable ( void )\r\n        //public SplFileObject openFile ([ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL ]]] )\r\n        //public void setFileClass ([ string $class_name ] )\r\n        //public void setInfoClass ([ string $class_name ] )\r\n        \r\n        /// <summary>\r\n        /// An alias for <c>getPathname</c>.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/__toString(ScriptContext context)\r\n        {\r\n            return getPathnameInternal(this.fs_info);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).__toString(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// The DirectoryIterator class provides a simple interface for viewing the contents of filesystem directories.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class DirectoryIterator : SplFileInfo, Iterator, Traversable, SeekableIterator\r\n    {\r\n        #region Fields\r\n\r\n        /// <summary>\r\n        /// Internal fs enumerator.\r\n        /// </summary>\r\n        protected IEnumerator<FileSystemInfo> dir_enumerator = null;\r\n\r\n        /// <summary>\r\n        /// Internal fs enumerator item index.\r\n        /// </summary>\r\n        protected int dir_enumerator_key = -1;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DirectoryIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DirectoryIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets enumeration of file system entries for this iterator.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        protected virtual IEnumerable<FileSystemInfo>/*!*/EnumerateFileSystemInfos()\r\n        {\r\n            var dir = this.fs_info as DirectoryInfo;\r\n            return dir != null ? dir.EnumerateFileSystemInfos() : new FileSystemInfo[0];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes <see cref=\"dir_enumerator\"/>.\r\n        /// </summary>\r\n        protected void CreateEnumeratorInternal()\r\n        {\r\n            var dir = this.fs_info as DirectoryInfo;\r\n            if (dir != null)\r\n            {\r\n                var enumerable = this.EnumerateFileSystemInfos();\r\n\r\n                if (dir.Root != dir)\r\n                {\r\n                    // prepend ., ..\r\n                    var dots = new FileSystemInfo[] { new DirectoryInfo(dir.FullName + \"\\\\.\"), new DirectoryInfo(dir.FullName + \"\\\\..\") };\r\n                    enumerable = dots.Concat(enumerable);\r\n                }\r\n\r\n                this.dir_enumerator = enumerable.GetEnumerator();\r\n            }\r\n            else\r\n            {\r\n                this.dir_enumerator = null;\r\n            }\r\n        }\r\n\r\n        protected void ConstructDirectoryIteratorInternal(ScriptContext/*!*/context, object path)\r\n        {\r\n            string pathstr = PhpVariable.AsString(path);\r\n            if (string.IsNullOrEmpty(pathstr))\r\n            {\r\n                RuntimeException.ThrowSplException(c => new RuntimeException(c, true), context, @\"Directory name must not be empty.\", 0, null);\r\n                return;\r\n            }\r\n\r\n            string errmessage = null;\r\n\r\n            try\r\n            {\r\n                this.fs_info = new DirectoryInfo(Path.Combine(context.WorkingDirectory, pathstr));\r\n                this.CreateEnumeratorInternal();\r\n            }\r\n            catch (System.Exception ex)\r\n            {\r\n                errmessage = ex.Message;\r\n            }\r\n\r\n            if (errmessage != null)\r\n            {\r\n                UnexpectedValueException.ThrowSplException(c => new UnexpectedValueException(c, true), context, errmessage, 0, null);\r\n            }\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual new object __construct(ScriptContext/*!*/context, object path)\r\n        {\r\n            ConstructDirectoryIteratorInternal(context, path);\r\n            return null;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            var path = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).__construct(stack.Context, path);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        /// <summary>\r\n        /// Whether current entry represents \".\" or \"..\".\r\n        /// </summary>\r\n        protected bool isDotInternal()\r\n        {\r\n            string str;\r\n            return\r\n                //this.dir_enumerator_key < 2 &&  // . and .. are first 2 entries\r\n                validInternal() && (str = this.dir_enumerator.Current.ToString()).EndsWith(\".\", StringComparison.Ordinal) &&\r\n                ((str = Path.GetFileName(str)) == \"..\" || str == \".\");\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDot(ScriptContext context)\r\n        {\r\n            return isDotInternal();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDot(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).isDot(stack.Context);\r\n        }\r\n\r\n        //public int getATime ( void )\r\n        //public string getBasename ([ string $suffix ] )\r\n        //public int getCTime ( void )\r\n        //public string getExtension ( void )\r\n\r\n        [ImplementsMethod]\r\n        public override object/*string*/getFilename(ScriptContext context)\r\n        {\r\n            return validInternal() ? getFilenameInternal(this.dir_enumerator.Current) : string.Empty;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object getFilename(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).getFilename(stack.Context);\r\n        }\r\n\r\n        //public int getGroup ( void )\r\n        //public int getInode ( void )\r\n        //public int getMTime ( void )\r\n        //public int getOwner ( void )\r\n\r\n        [ImplementsMethod]\r\n        public override object/*string*/getPath(ScriptContext context)\r\n        {\r\n            return validInternal() ? getPathInternal(this.dir_enumerator.Current) : string.Empty;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object getPath(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).getPath(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object/*string*/getPathname(ScriptContext context)\r\n        {\r\n            return validInternal() ? getPathnameInternal(this.dir_enumerator.Current) : string.Empty;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object getPathname(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).getPathname(stack.Context);\r\n        }\r\n\r\n        //public int getPerms ( void )\r\n\r\n        [ImplementsMethod]\r\n        public override object/*bool*/getSize(ScriptContext context)\r\n        {\r\n            if (validInternal())\r\n            {\r\n                var info = this.dir_enumerator.Current as FileInfo;\r\n                if (info != null)\r\n                    return info.Length;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object getSize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).getSize(stack.Context);\r\n        }\r\n\r\n        //public string getType ( void )\r\n\r\n        [ImplementsMethod]\r\n        public override object/*bool*/isDir(ScriptContext context)\r\n        {\r\n            return validInternal() && this.dir_enumerator.Current is DirectoryInfo;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object isDir(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).isDir(stack.Context);\r\n        }\r\n\r\n        //public bool isExecutable ( void )\r\n\r\n        [ImplementsMethod]\r\n        public override object/*bool*/isFile(ScriptContext context)\r\n        {\r\n            return validInternal() && this.dir_enumerator.Current is FileInfo;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object isFile(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).isFile(stack.Context);\r\n        }\r\n\r\n        //public bool isLink ( void )\r\n        //public bool isReadable ( void )\r\n        //public bool isWritable ( void )\r\n\r\n        /// <summary>\r\n        /// An alias for <c>getFilename</c>.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public override object/*string*/__toString(ScriptContext context)\r\n        {\r\n            return this.getFilename(context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileInfo)instance).__toString(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object rewind(ScriptContext context)\r\n        {\r\n            if (this.dir_enumerator == null || this.dir_enumerator_key >= 0)\r\n            {\r\n                this.dir_enumerator_key = -1;\r\n                this.CreateEnumeratorInternal();\r\n            }\r\n\r\n            return this.next(context);  // move to first item\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object next(ScriptContext context)\r\n        {\r\n            if (this.dir_enumerator == null)\r\n                return false;\r\n\r\n            if (this.dir_enumerator.MoveNext())\r\n                this.dir_enumerator_key++;\r\n            else\r\n                this.dir_enumerator = null;\r\n\r\n            return null;\r\n        }\r\n\r\n        protected bool validInternal()\r\n        {\r\n            return\r\n                this.dir_enumerator_key >= 0 &&\r\n                this.dir_enumerator != null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            return validInternal();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            return this.dir_enumerator_key;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        #region Arglesses\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region interface SeekableIterator\r\n\r\n        [ImplementsMethod]\r\n        public object seek(ScriptContext context, object position)\r\n        {\r\n            int i = Core.Convert.ObjectToInteger(position);\r\n\r\n            if (i < 0)\r\n                return this.rewind(context);\r\n\r\n            if (this.dir_enumerator_key == -1 || this.dir_enumerator_key > i)\r\n            {\r\n                // newly constructed\r\n                 this.rewind(context);   // we have to rewind and iterate to <i>\r\n                // ->\r\n            }\r\n            else if (validInternal())\r\n            {\r\n                if (this.dir_enumerator_key == i)\r\n                    return null;    // done\r\n\r\n                // else dir_enumerator_key < i, we have to iterate to <i>\r\n                // ->\r\n            }\r\n            else\r\n            {\r\n                this.rewind(context);\r\n                // ->\r\n            }\r\n\r\n            // ->\r\n            while (validInternal() && this.dir_enumerator_key < i)\r\n                this.next(context);\r\n\r\n            return null;\r\n        }\r\n\r\n        #region Arglesses\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object seek(object instance, PhpStack stack)\r\n        {\r\n            object position = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((DirectoryIterator)instance).seek(stack.Context, position);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// The Filesystem iterator.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class FilesystemIterator : DirectoryIterator, Iterator, Traversable, SeekableIterator\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Default <see cref=\"flags\"/>.\r\n        /// </summary>\r\n        private const int DefaultFlags = FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO | FilesystemIterator.SKIP_DOTS;\r\n\r\n        public const int CURRENT_AS_PATHNAME = 32;\r\n        public const int CURRENT_AS_FILEINFO = 0;\r\n        public const int CURRENT_AS_SELF = 16;\r\n        public const int CURRENT_MODE_MASK = 240;\r\n        public const int KEY_AS_PATHNAME = 0;\r\n        public const int KEY_AS_FILENAME = 256;\r\n        public const int FOLLOW_SYMLINKS = 512;\r\n        public const int KEY_MODE_MASK = 3840;\r\n        public const int NEW_CURRENT_AND_KEY = 256;\r\n        public const int SKIP_DOTS = 4096;\r\n        public const int UNIX_PATHS = 8192;\r\n\r\n        #endregion\r\n\r\n        #region Fields\r\n\r\n        /// <summary>\r\n        /// Flags of the iterator. See <see cref=\"FilesystemIterator\"/> constants.\r\n        /// </summary>\r\n        protected int flags = 0;\r\n\r\n        protected bool CurrentAsPathName { get { return (this.flags & CURRENT_AS_PATHNAME) != 0; } }\r\n        protected bool CurrentAsFileInfo { get { return (this.flags & CURRENT_MODE_MASK) == CURRENT_AS_FILEINFO; } }\r\n        protected bool CurrentAsSelf { get { return (this.flags & CURRENT_AS_SELF) != 0; } }\r\n\r\n        protected bool KeyAsPathName { get { return (this.flags & KEY_MODE_MASK) == KEY_AS_PATHNAME; } }\r\n        protected bool KeyAsFileName { get { return (this.flags & KEY_AS_FILENAME) != 0; } }        \r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public FilesystemIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public FilesystemIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, object/*string*/path, [Optional]object/*int*/flags /*= FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO | FilesystemIterator.SKIP_DOTS*/ )\r\n        {\r\n            if (flags == Arg.Default || flags == null)\r\n                this.flags = DefaultFlags;\r\n            else\r\n                this.flags = Core.Convert.ObjectToInteger(flags);\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            var path = stack.PeekValue(1);\r\n            var flags = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((FilesystemIterator)instance).__construct(stack.Context, path, flags);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [ImplementsMethod]\r\n        public override object key(ScriptContext context)\r\n        {\r\n            if (validInternal())\r\n            {\r\n                if (KeyAsFileName)\r\n                    return dir_enumerator.Current.Name;\r\n                else// if (KeyAsPathName)\r\n                    return dir_enumerator.Current.FullName;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object current(ScriptContext context)\r\n        {\r\n            if (validInternal())\r\n            {\r\n                if (CurrentAsSelf)\r\n                    return this;\r\n                else if (CurrentAsPathName)\r\n                    return getPathnameInternal(dir_enumerator.Current);\r\n                else //if (CurrentAsFileInfo)\r\n                    return new SplFileInfo(context, true)\r\n                    {\r\n                        fs_info = dir_enumerator.Current,\r\n                    };\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #region Arglesses\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((FilesystemIterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((FilesystemIterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// The RecursiveDirectoryIterator provides an interface for iterating recursively over filesystem directories.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class RecursiveDirectoryIterator : FilesystemIterator, RecursiveIterator\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Default <see cref=\"FilesystemIterator.flags\"/>.\r\n        /// </summary>\r\n        private const int DefaultFlags = FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO;\r\n\r\n        /// <summary>\r\n        /// Sub path used internally to track nesting of the iterator.\r\n        /// </summary>\r\n        private string sub_path = null;\r\n\r\n        protected string SubPathname\r\n        {\r\n            get\r\n            {\r\n                var fname = (this.dir_enumerator != null) ? getFilenameInternal(this.dir_enumerator.Current) : null;\r\n                if (this.sub_path != null)\r\n                {\r\n                    return string.Concat(this.sub_path, Path.DirectorySeparatorChar.ToString(), fname);\r\n                }\r\n                else\r\n                {\r\n                    return fname ?? string.Empty;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveDirectoryIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveDirectoryIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual new object __construct(ScriptContext/*!*/context, object/*string*/path , [Optional]object/*int*/flags /*= FilesystemIterator.KEY_AS_PATHNAME | FilesystemIterator.CURRENT_AS_FILEINFO*/ )\r\n        {\r\n            // setup flags\r\n            if (flags != Arg.Default && flags != null)\r\n                this.flags = Core.Convert.ObjectToInteger(flags);\r\n            else\r\n                this.flags = DefaultFlags;\r\n\r\n            // init path and enumerator\r\n            ConstructDirectoryIteratorInternal(context, path);\r\n\r\n            return null;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            var path = stack.PeekValue(1);\r\n            var flags = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveDirectoryIterator)instance).__construct(stack.Context, path, flags);\r\n        }\r\n\r\n        protected override IEnumerable<FileSystemInfo> EnumerateFileSystemInfos()\r\n        {\r\n            var dir = this.fs_info as DirectoryInfo;\r\n            return dir != null ? dir.EnumerateFileSystemInfos(\"*\", SearchOption.AllDirectories) : new FileSystemInfo[0];\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getSubPath(ScriptContext/*!*/context)\r\n        {\r\n            return this.sub_path ?? string.Empty;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getSubPathname(ScriptContext/*!*/context)\r\n        {\r\n            return this.SubPathname;\r\n        }\r\n\r\n        //public string getSubPathname ( void )\r\n        //public bool hasChildren ([ bool $allow_links = false ] )\r\n        //public string key ( void )\r\n        //public void next ( void )\r\n        //public void rewind ( void )\r\n\r\n        #endregion\r\n\r\n        #region RecursiveIterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getChildren(ScriptContext context)\r\n        {\r\n            if (CurrentAsPathName)\r\n                return this.getPath(context);\r\n\r\n            if (validInternal())\r\n            {\r\n                var di = new RecursiveDirectoryIterator(context, true)\r\n                {\r\n                    fs_info = this.dir_enumerator.Current,\r\n                    sub_path = this.SubPathname,\r\n                    flags = DefaultFlags,\r\n                };\r\n                di.CreateEnumeratorInternal();\r\n                return di;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object hasChildren(ScriptContext context/*, [Optional]object allowLinks/*=false*/)\r\n        {\r\n            //bool bAllowLinks = (allowLinks == null || allowLinks == Arg.Default) ? false : Core.Convert.ObjectToBoolean(allowLinks);\r\n            return this.validInternal() && !this.isDotInternal() && this.dir_enumerator.Current is DirectoryInfo;\r\n        }\r\n\r\n        #region Arglesses\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getSubPath(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveDirectoryIterator)instance).getSubPath(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getSubPathname(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveDirectoryIterator)instance).getSubPathname(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveDirectoryIterator)instance).getChildren(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasChildren(object instance, PhpStack stack)\r\n        {\r\n            var allowLinks = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveDirectoryIterator)instance).hasChildren(stack.Context/*, allowLinks*/);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// The SplFileObject class offers an object oriented interface for a file.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class SplFileObject : SplFileInfo, RecursiveIterator, Traversable, Iterator, SeekableIterator\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Drop newlines at the end of a line.\r\n        /// </summary>\r\n        public const int DROP_NEW_LINE = 1;\r\n\r\n        /// <summary>\r\n        /// Read on rewind/next.\r\n        /// </summary>\r\n        public const int READ_AHEAD = 2;\r\n\r\n        /// <summary>\r\n        /// Skips empty lines in the file. This requires the READ_AHEAD flag be enabled, to work as expected.\r\n        /// </summary>\r\n        public const int SKIP_EMPTY = 4;\r\n\r\n        /// <summary>\r\n        /// Read lines as CSV rows.\r\n        /// </summary>\r\n        public const int READ_CSV = 8;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFileObject(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFileObject(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        ///* Methods */\r\n        //public __construct ( string $filename [, string $open_mode = \"r\" [, bool $use_include_path = false [, resource $context ]]] )\r\n        [ImplementsMethod]\r\n        public virtual new object __construct(ScriptContext context, object filename)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).__construct(stack.Context, arg1);\r\n        }\r\n\r\n        //public bool eof ( void )\r\n        //public bool fflush ( void )\r\n        //public string fgetc ( void )\r\n        //public array fgetcsv ([ string $delimiter = \",\" [, string $enclosure = \"\\\"\" [, string $escape = \"\\\\\" ]]] )\r\n        //public string fgets ( void )\r\n        //public string fgetss ([ string $allowable_tags ] )\r\n        //public bool flock ( int $operation [, int &$wouldblock ] )\r\n        //public int fpassthru ( void )\r\n        //public int fputcsv ( array $fields [, string $delimiter = ',' [, string $enclosure = '\"' ]] )\r\n        //public mixed fscanf ( string $format [, mixed &$... ] )\r\n        //public int fseek ( int $offset [, int $whence = SEEK_SET ] )\r\n        //public array fstat ( void )\r\n        //public int ftell ( void )\r\n        //public bool ftruncate ( int $size )\r\n        //public int fwrite ( string $str [, int $length ] )\r\n        //public array getCsvControl ( void )\r\n        //public int getFlags ( void )\r\n        //public int getMaxLineLen ( void )\r\n        //public void setCsvControl ([ string $delimiter = \",\" [, string $enclosure = \"\\\"\" [, string $escape = \"\\\\\" ]]] )\r\n        //public void setFlags ( int $flags )\r\n        //public void setMaxLineLen ( int $max_len )\r\n        \r\n        #endregion\r\n\r\n        #region RecursiveIterator Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getChildren(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).getChildren(stack.Context);\r\n        }\r\n        [ImplementsMethod]\r\n        public virtual object hasChildren(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).hasChildren(stack.Context);\r\n        }\r\n        #endregion\r\n\r\n        #region Iterator Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object rewind(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object next(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).next(stack.Context);\r\n        }\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).valid(stack.Context);\r\n        }\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).key(stack.Context);\r\n        }\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).current(stack.Context);\r\n        }\r\n        #endregion\r\n\r\n        #region SeekableIterator Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object seek(ScriptContext context, object position)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object seek(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplFileObject)instance).seek(stack.Context, arg1);\r\n        }\r\n        \r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/SPL/Iterators.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n\t/// <summary>\r\n\t/// Contains iterators-related class library functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class SplIterators\r\n    {\r\n        #region iterator_apply, iterator_count, iterator_to_array\r\n\r\n        /// <summary>\r\n        /// Calls a function for every element in an iterator.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"caller\">Class context provided by compiler.</param>\r\n        /// <param name=\"iterator\">The class to iterate over.</param>\r\n        /// <param name=\"function\">The callback function to call on every element.\r\n        /// Note: The function must return TRUE in order to continue iterating over the iterator.</param>\r\n        /// <returns>Returns the iteration count.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"function\"/> or <paramref name=\"iterator\"/> are <B>null</B> references.</exception>\r\n        [ImplementsFunction(\"iterator_apply\", FunctionImplOptions.NeedsClassContext)]\r\n        [return: CastToFalse]\r\n        public static int Apply(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller, Iterator iterator, PhpCallback function)\r\n        {\r\n            return Apply(context, caller, iterator, function, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls a function for every element in an iterator.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"caller\">Class context provided by compiler.</param>\r\n        /// <param name=\"iterator\">The class to iterate over.</param>\r\n        /// <param name=\"function\">The callback function to call on every element.\r\n        /// Note: The function must return TRUE in order to continue iterating over the iterator.</param>\r\n        /// <param name=\"args\">Arguments to pass to the callback function.</param>\r\n        /// <returns>Returns the iteration count.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"function\"/> or <paramref name=\"iterator\"/> are <B>null</B> references.</exception>\r\n        [ImplementsFunction(\"iterator_apply\", FunctionImplOptions.NeedsClassContext)]\r\n        [return:CastToFalse]\r\n        public static int Apply(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller, Iterator/*!*/iterator, PhpCallback function, PhpArray args)\r\n        {\r\n            // check parameters:\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(iterator != null, \"Phalanger should not pass a null here.\");\r\n\r\n            if (function == null)\r\n            {\r\n                PhpException.ArgumentNull(\"function\");\r\n                return -1;\r\n            }\r\n\r\n            // copy args into object array:\r\n            object[] args_array;\r\n\r\n            if (args != null)\r\n            {\r\n                args_array = new object[args.Count];\r\n                args.Values.CopyTo(args_array, 0);\r\n            }\r\n            else\r\n            {\r\n                args_array = ArrayUtils.EmptyObjects;\r\n            }\r\n\r\n            // iterate through the iterator:\r\n            int n = 0;\r\n            \r\n            iterator.rewind(context);\r\n            \n            while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context)))\n            {\n                if (!PHP.Core.Convert.ObjectToBoolean(function.Invoke(caller, args_array)))\n                    break;\n\t\t        n++;\n\n\t\t        iterator.next(context);\n\t        }\r\n\r\n            // return amount of iterated elements:\r\n            return n;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Count the elements in an iterator.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"iterator\">The iterator being counted.</param>\r\n        /// <returns>The number of elements in <paramref name=\"iterator\"/>.</returns>\r\n        [ImplementsFunction(\"iterator_count\")]\r\n        public static int Count(ScriptContext/*!*/context, Iterator/*!*/iterator)\r\n        {\r\n            // check parameters:\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(iterator != null, \"Phalanger should not pass a null here.\");\r\n            \r\n            // iterate through the iterator:\r\n            int n = 0;\r\n\r\n            iterator.rewind(context);\r\n\r\n            while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context)))\r\n            {\r\n                n++;\r\n                iterator.next(context);\r\n            }\r\n\r\n            // return amount of iterated elements:\r\n            return n;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copy the elements of an iterator into an array.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"iterator\">The iterator being copied.</param>\r\n        /// <returns>An array containing the elements of the <paramref name=\"iterator\"/>.</returns>\r\n        [ImplementsFunction(\"iterator_to_array\")]\r\n        public static PhpArray/*!*/ToArray(ScriptContext/*!*/context, Iterator/*!*/iterator)\r\n        {\r\n            return ToArray(context, iterator, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copy the elements of an iterator into an array.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"iterator\">The iterator being copied.</param>\r\n        /// <param name=\"use_keys\">Whether to use the iterator element keys as index.</param>\r\n        /// <returns>An array containing the elements of the <paramref name=\"iterator\"/>.</returns>\r\n        [ImplementsFunction(\"iterator_to_array\")]\r\n        public static PhpArray/*!*/ToArray(ScriptContext/*!*/context, Iterator/*!*/iterator, bool use_keys/*=true*/)\r\n        {\r\n            // check parameters:\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(iterator != null, \"Phalanger should not pass a null here.\");\r\n\r\n            //\r\n            var array = new PhpArray();\r\n\r\n            // iterate through the iterator:\r\n            iterator.rewind(context);\r\n\r\n            while (PHP.Core.Convert.ObjectToBoolean(iterator.valid(context)))\r\n            {\r\n                object value = iterator.current(context);   // PHP calls current() first\r\n                if (use_keys)\r\n                    array[iterator.key(context)] = value;\r\n                else\r\n                    array.Add(value);\r\n\r\n                iterator.next(context);\r\n            }\r\n\r\n            // return amount of iterated elements:\r\n            return array;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/SPL/Objects.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Contains object-related class library functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class SplObjects\r\n\t{\r\n\t\t/// <summary>\r\n        /// Return hash id for given object.\r\n        /// </summary>\r\n        /// <param name=\"obj\">Object instance to get its hash code.</param>\r\n        /// <returns>Hexadecimal number as string.</returns>\r\n        [ImplementsFunction(\"spl_object_hash\")]\r\n        public static string ObjectHash(object obj)\r\n        {\r\n            DObject dobj = obj as DObject;\r\n\r\n            if (dobj == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unexpected_arg_given\", 1, DObject.PhpTypeName, PhpVariable.GetTypeName(obj).ToLower()));\r\n                return null;\r\n            }\r\n\r\n            return dobj.GetHashCode().ToString(\"x32\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function returns an array with the current available SPL classes.\r\n        /// </summary>\r\n        /// <returns>Returns an array containing the currently available SPL classes.</returns>\r\n        [ImplementsFunction(\"spl_classes\")]\r\n        public static PhpArray/*!*/SplClasses()\r\n        {\r\n            var array = new PhpArray(32);\r\n\r\n            // TODO: (J) list SPL classes http://www.php.net/manual/en/function.spl-classes.php\r\n            // array.Add( \"class_name\", \"class_name\" );\r\n\r\n            return array;\r\n        }\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Serializers.CLR.cs",
    "content": "\r\n/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Serializer\r\n\r\n\t/// <summary>\r\n\t/// A base class for serializers, i.e. a named formatters.\r\n\t/// </summary>\r\n\tpublic abstract class Serializer : MarshalByRefObject\r\n\t{\r\n        #region ClassContextHolder\r\n\r\n        /// <summary>\r\n        /// Common base class of <c>ObjectWriter</c> and <c>ObjectReader</c> containing the cached class context functionality.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Class context is needed when invoking <c>__sleep</c> and <c>__wakeup</c> magic methods.\r\n        /// </remarks>\r\n        internal abstract class ClassContextHolder\r\n        {\r\n            /// <summary>\r\n            /// Initialize the ClassCOntextHolder with a known DTypeDesc.\r\n            /// Use UnknownTypeDesc.Singleton to specify an unknown caller. In this case the caller will be determined when needed.\r\n            /// </summary>\r\n            /// <param name=\"caller\"></param>\r\n            public ClassContextHolder(DTypeDesc caller)\r\n            {\r\n                if (caller == null || !caller.IsUnknown)\r\n                {\r\n                    ClassContext = caller;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Copies info from already used ClassContextHolder. It reuses the holder iff class context was already initialized.\r\n            /// </summary>\r\n            /// <param name=\"holder\">Exiting class context holder with potentionaly already obtained class context.</param>\r\n            internal ClassContextHolder(ClassContextHolder/*!*/holder)\r\n            {\r\n                Debug.Assert(holder != null);\r\n\r\n                this._classContext = holder._classContext;\r\n                this.classContextIsValid = holder.classContextIsValid;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets or sets the current class context. See <see cref=\"_classContext\"/>.\r\n            /// </summary>\r\n            protected DTypeDesc ClassContext\r\n            {\r\n                get\r\n                {\r\n                    return (classContextIsValid ?\r\n                        _classContext :\r\n                        (ClassContext = PhpStackTrace.GetClassContext()));\r\n                }\r\n                set\r\n                {\r\n                    _classContext = value;\r\n                    classContextIsValid = true;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Holds the current class context (a type derived from <see cref=\"DObject\"/> in whose\r\n            /// scope the calling code is executing). Initialized lazily.\r\n            /// </summary>\r\n            private DTypeDesc _classContext;\r\n\r\n            /// <summary>\r\n            /// Invalid class context singleton. The initial value for <see cref=\"_classContext\"/>.\r\n            /// </summary>\r\n            private bool classContextIsValid;        \r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the serializer. Shouldn't return a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tprotected abstract string GetName();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a formatter. Shouldn't return a <B>null</B> reference.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the class context or UnknownTypeDesc if class context is not known yet and will be determined lazily.</param>\r\n\t\tprotected abstract IFormatter CreateFormatter(DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets tring representation of the serializer.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name of the serializer.</returns>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the serializer name (always non-null).\r\n\t\t/// </summary>\r\n\t\tpublic string Name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tstring result = GetName();\r\n\t\t\t\tif (result == null)\r\n\t\t\t\t\tthrow new InvalidMethodImplementationException(GetType().FullName + \".GetName\");\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a formatter (always non-null).\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the class context or UnknownTypeDesc if class context is not known yet and will be determined lazily.</param>\r\n        /// <returns>New IFormatter class instance.</returns>\r\n        private IFormatter GetFormatter(DTypeDesc caller)\r\n\t\t{\r\n\t\t\tIFormatter result = CreateFormatter(caller);\r\n\t\t\tif (result == null)\r\n\t\t\t\tthrow new InvalidMethodImplementationException(GetType().FullName + \"CreateFormatter\");\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Serializes a graph of connected objects to a byte array using a given formatter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The variable to serialize.</param>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n        /// <returns>\r\n\t\t/// The serialized representation of the <paramref name=\"variable\"/> or a <B>null</B> reference on error.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">Serialization failed (Notice).</exception>\r\n\t\tpublic PhpBytes Serialize(object variable, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tMemoryStream stream = new MemoryStream();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// serialize the variable into the memory stream\r\n                    GetFormatter(caller).Serialize(stream, variable);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (System.Reflection.TargetInvocationException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow e.InnerException;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (SerializationException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"serialization_failed\", e.Message));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// extract the serialized data\r\n\t\t\treturn new PhpBytes(stream.ToArray());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deserializes a graph of connected object from a byte array using a given formatter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"bytes\">The byte array to deserialize the graph from.</param>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\r\n        /// <returns>\r\n\t\t/// The deserialized object graph or an instance of <see cref=\"PhpReference\"/> containing <B>false</B> on error.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">Deserialization failed (Notice).</exception>\r\n        public PhpReference Deserialize(PhpBytes bytes, DTypeDesc caller)\r\n\t\t{\r\n            MemoryStream stream = new MemoryStream(bytes.ReadonlyData);\r\n\t\t\tobject result = null;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// deserialize the data\r\n                    result = GetFormatter(caller).Deserialize(stream);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (System.Reflection.TargetInvocationException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow e.InnerException;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (SerializationException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"deserialization_failed\",\r\n\t\t\t\t  e.Message, stream.Position, stream.Length));\r\n\t\t\t\treturn new PhpReference(false);\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpVariable.MakeReference(result);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SingletonSerializer\r\n\r\n\t/// <summary>\r\n\t/// Represents a serializer with a singleton formatter.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class SingletonSerializer : Serializer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A name of the serializer. Can't contain a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tprivate readonly string/*!*/ name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A formatter. Can't contain a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tprivate readonly IFormatter/*!*/ formatter;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the serializer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name.</param>\r\n\t\t/// <param name=\"formatter\">The formatter.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> or <paramref name=\"formatter\"/> are <B>null</B> references.</exception>\r\n\t\tpublic SingletonSerializer(string/*!*/ name, IFormatter/*!*/ formatter)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tif (formatter == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"formatter\");\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.formatter = formatter;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name.\r\n\t\t/// </summary>\r\n\t\tprotected override string/*!*/ GetName()\r\n\t\t{\r\n\t\t\treturn name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the formatter.\r\n\t\t/// </summary>\r\n        protected override IFormatter/*!*/ CreateFormatter(DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn formatter;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ContextualSerializer\r\n\r\n\t/// <summary>\r\n\t/// Prepresents a serializer with a formatter utilizing the <see cref=\"SerializationContext\"/>.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class ContextualSerializer : Serializer\r\n\t{\r\n\t\tpublic delegate IFormatter/*!*/ FormatterFactory(DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// A name of the serializer. Can't contain a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tprivate readonly string/*!*/ name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A formatter. Can't contain a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tprivate readonly FormatterFactory/*!*/ formatterFactory;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the serializer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name.</param>\r\n\t\t/// <param name=\"formatterFactory\">The factory that supplies fresh instances of the formatter.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> or <paramref name=\"formatterFactory\"/> are <B>null</B> references.</exception>\r\n\t\tpublic ContextualSerializer(string/*!*/ name, FormatterFactory/*!*/ formatterFactory)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tif (formatterFactory == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"formatterFactory\");\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.formatterFactory = formatterFactory;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name.\r\n\t\t/// </summary>\r\n\t\tprotected override string/*!*/ GetName()\r\n\t\t{\r\n\t\t\treturn name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the formatter.\r\n\t\t/// </summary>\r\n        protected override IFormatter/*!*/ CreateFormatter(DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn formatterFactory(caller);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpSerializer\r\n\r\n\tpublic sealed class PhpSerializer : Serializer\r\n\t{\r\n\t\tprivate PhpSerializer() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A singleton instance. \r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpSerializer Default = new PhpSerializer();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name.\r\n\t\t/// </summary>\r\n\t\tprotected override string GetName()\r\n\t\t{\r\n\t\t\treturn \"php\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the formatter using the current page encoding set in the global configuration.\r\n\t\t/// </summary>\r\n        protected override IFormatter CreateFormatter(DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn new PhpFormatter(Configuration.Application.Globalization.PageEncoding, caller);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PhpJsonSerializer\r\n\r\n    public sealed class PhpJsonSerializer : Serializer\r\n    {\r\n        private readonly JsonFormatter.EncodeOptions encodeOptions;\r\n        private readonly JsonFormatter.DecodeOptions decodeOptions;\r\n        \r\n        /// <summary>\r\n        /// Initialize parametrized serializer.\r\n        /// </summary>\r\n        internal PhpJsonSerializer(JsonFormatter.EncodeOptions encodeOptions, JsonFormatter.DecodeOptions decodeOptions)\r\n        {\r\n            // options\r\n            this.encodeOptions = encodeOptions;\r\n            this.decodeOptions = decodeOptions;\r\n        }\r\n\r\n        /// <summary>\r\n        /// A singleton instance with default parameters.\r\n        /// </summary>\r\n        public static readonly PhpJsonSerializer Default = new PhpJsonSerializer(new JsonFormatter.EncodeOptions(), new JsonFormatter.DecodeOptions());\r\n\r\n        /// <summary>\r\n        /// Returns the name.\r\n        /// </summary>\r\n        protected override string GetName()\r\n        {\r\n            return \"JSON\";\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the formatter using the current page encoding set in the global configuration.\r\n        /// </summary>\r\n        protected override IFormatter CreateFormatter(DTypeDesc caller)\r\n        {\r\n            return new JsonFormatter(Configuration.Application.Globalization.PageEncoding, encodeOptions, decodeOptions, caller);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    //#region PhalangerSerializer\r\n\r\n    //public sealed class PhalangerSerializer : Serializer\r\n    //{\r\n    //    private PhalangerSerializer() { }\r\n\r\n    //    /// <summary>\r\n    //    /// A singleton instance. \r\n    //    /// </summary>\r\n    //    public static readonly PhalangerSerializer Default = new PhalangerSerializer();\r\n\r\n    //    /// <summary>\r\n    //    /// Returns the name.\r\n    //    /// </summary>\r\n    //    protected override string GetName()\r\n    //    {\r\n    //        return \"phalanger\";\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Returns the formatter using the current page encoding set in the global configuration.\r\n    //    /// </summary>\r\n    //    protected override IFormatter CreateFormatter(DTypeDesc caller)\r\n    //    {\r\n    //        return new PhalangerFormatter(Configuration.Application.Globalization.PageEncoding, caller);\r\n    //    }\r\n    //}\r\n\r\n    //#endregion\r\n\r\n\t#region Serializers\r\n\r\n\t/// <summary>\r\n\t/// Maintains serializers. Libraries can register their own serializers here.\r\n\t/// </summary>\r\n\tpublic static class Serializers\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Registered handlers.\r\n\t\t/// </summary>\r\n\t\tprivate static Dictionary<string, Serializer> serializers = new Dictionary<string, Serializer>();\r\n\t\tprivate static readonly object serializersLock = new object();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registeres a new serializer. Serializers are usualy registered by libraries.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"serializer\">The serializer.</param>\r\n\t\t/// <returns>Whether the serializer has been successfuly registered. Two serializers with the same names can't be registered.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"serializer\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static bool RegisterSerializer(Serializer serializer)\r\n\t\t{\r\n            if (serializer == null) throw new ArgumentNullException(\"serializer\");\r\n\r\n\t\t\tlock (serializersLock)\r\n\t\t\t{\r\n\t\t\t\tif (serializers.ContainsKey(serializer.Name))\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tserializers.Add(serializer.Name, serializer);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a serializer by specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the serializer.</param>\r\n\t\t/// <returns>The serializer or <B>null</B> reference if such serializer has not been registered.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static Serializer GetSerializer(string name)\r\n\t\t{\r\n\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\r\n\t\t\tlock (serializersLock)\r\n\t\t\t{\r\n                if (serializers.ContainsKey(name))\r\n                {\r\n                    return (Serializer)serializers[name];\r\n                }\r\n                else\r\n                {\r\n                    return null;\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Session.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n\tTODO:\r\n\t\t- Added a check for special characters in the session name. (PHP 5.1.3) \r\n        - Deprecated session_register(), session_unregister() and session_is_registered().\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Globalization;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Web.Configuration;\r\nusing System.Security.Cryptography;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region PhpSessionHandlerBase\r\n\r\n\t/// <summary>\r\n\t/// A base class for PHP session handlers.\r\n\t/// </summary>\r\n\tpublic abstract class PhpSessionHandlerBase : SessionHandler\r\n\t{\r\n\t\tprotected const string FilePrefix = \"sess_\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads serialized variables.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"savePath\">A path where session files can be stored in.</param>\r\n\t\t/// <param name=\"sid\">A session ID.</param>\r\n\t\t/// <returns>Variables in serialized form.</returns>\r\n\t\tprotected abstract PhpBytes LoadSerializedVariables(string savePath, string sid);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores serialized variables.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"savePath\">A path where session files can be stored in.</param>\r\n\t\t/// <param name=\"sid\">A session ID.</param>\r\n\t\t/// <param name=\"data\">Variables in serialized form.</param>\r\n\t\tprotected abstract void SaveSerializedVariables(string savePath, string sid, PhpBytes data);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collects old session data.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"savePath\">A path where session files can be stored in.</param>\r\n\t\t/// <param name=\"sid\">A session ID.</param>\r\n\t\t/// <param name=\"lifetime\">A data lifetime in seconds.</param>\r\n\t\tprotected abstract void Collect(string savePath, string sid, int lifetime);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads session variables from persistent storage.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The current script context.</param>\r\n\t\t/// <param name=\"httpContext\">The current HTTP context.</param>\r\n\t\t/// <returns>An array of session variables. A <B>null</B> reference on error.</returns>\r\n\t\tprotected sealed override PhpArray Load(ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tstring sid = httpContext.Session.SessionID;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\r\n\t\t\tPhpBytes bytes = LoadSerializedVariables(config.Session.SavePath, sid);\r\n\r\n\t\t\t// deserialization:\r\n\t\t\tPhpArray result = null;\r\n\t\t\tif (bytes != null && bytes.Length != 0)\r\n\t\t\t{\r\n                PhpReference php_ref = PhpVariables.Unserialize(null/*Load method is not called from any class context*/, bytes);\r\n\t\t\t\tresult = (php_ref != null) ? php_ref.Value as PhpArray : null;\r\n\t\t\t}\r\n\r\n\t\t\t// collection:\r\n\t\t\tif (DoCollection(config))\r\n\t\t\t\tCollect(config.Session.SavePath, sid, config.Session.GcMaxLifetime);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Persists session variables to a file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variables\">Variables to persist.</param>\r\n\t\t/// <param name=\"context\">The current script context.</param>\r\n\t\t/// <param name=\"httpContext\">The current HTTP context.</param>\r\n\t\tprotected sealed override void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tstring sid = httpContext.Session.SessionID;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\r\n\t\t\tPhpBytes data = PhpVariables.Serialize(null/*Persist method is not called from any class context*/, variables);\r\n\r\n\t\t\tSaveSerializedVariables(config.Session.SavePath, sid, data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decides whether to perform collection or not.\r\n\t\t/// </summary>\r\n\t\tprivate static bool DoCollection(LibraryConfiguration config)\r\n\t\t{\r\n\t\t\tif (config.Session.GcProbability <= 0) return false;\r\n\r\n\t\t\tdouble rand = (double)config.Session.GcDivisor * PhpMath.Generator.NextDouble();\r\n\t\t\treturn rand < config.Session.GcProbability;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the session file without path.\r\n\t\t/// </summary>\r\n\t\tprotected static string GetSessionFileName(string sid)\r\n\t\t{\r\n\t\t\treturn FilePrefix + sid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a full path to the session file.\r\n\t\t/// </summary>\r\n\t\tprotected static string GetSessionFilePath(string savePath, string sid)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\treturn Path.Combine(savePath, GetSessionFileName(sid));\r\n\t\t\t}\r\n\t\t\tcatch (ArgumentException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_session_save_path\", savePath));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpSessionHandler\r\n\r\n\t/// <summary>\r\n\t/// Handles PHP file backed sessions.\r\n\t/// </summary>\r\n\tpublic sealed class PhpSessionHandler : PhpSessionHandlerBase\r\n\t{\r\n\t\tprivate PhpSessionHandler() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton instance.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpSessionHandler Default = new PhpSessionHandler();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets name of the handler used in configuration.\r\n\t\t/// </summary>\r\n\t\tpublic override string Name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn \"files\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads session data from the session file.\r\n\t\t/// </summary>\r\n\t\tprotected override PhpBytes LoadSerializedVariables(string savePath, string sid)\r\n\t\t{\r\n\t\t\tPhpBytes result = null;\r\n\r\n\t\t\tusing (PhpStream file = OpenSessionFile(savePath, sid, false))\r\n\t\t\t{\r\n\t\t\t\tif (file != null)\r\n\t\t\t\t{\r\n                    result = file.ReadBinaryContents(-1);\r\n\t\t\t\t\tfile.Close();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores serialied variables to the session file.\r\n\t\t/// </summary>\r\n\t\tprotected override void SaveSerializedVariables(string savePath, string sid, PhpBytes data)\r\n\t\t{\r\n\t\t\tusing (PhpStream file = OpenSessionFile(savePath, sid, true))\r\n\t\t\t{\r\n\t\t\t\tif (file != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tfile.WriteBytes(data);\r\n\t\t\t\t\tfile.Close();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deletes session files older than <paramref name=\"lifetime\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected override void Collect(string savePath, string sid, int lifetime)\r\n\t\t{\r\n\t\t\tusing (PhpResource dir = PhpDirectory.Open(savePath))\r\n\t\t\t{\r\n\t\t\t\tif (dir == null) return;\r\n\r\n\t\t\t\tint threshold = DateTimeUtils.UtcToUnixTimeStamp(DateTime.Now.ToUniversalTime().AddSeconds(-lifetime));\r\n\r\n\t\t\t\tstring file_name;\r\n\t\t\t\twhile ((file_name = PhpDirectory.Read(dir)) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (file_name.Length >= FilePrefix.Length && file_name.Substring(0, FilePrefix.Length) == FilePrefix)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstring full_path = Path.Combine(savePath, file_name);\r\n\t\t\t\t\t\tint time = PhpFile.GetAccessTime(full_path);\r\n\r\n\t\t\t\t\t\tif (time < threshold)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDebug.WriteLine(String.Format(\"Collecting file {0} atime: {1} threshold: {2}\",\r\n\t\t\t\t\t\t\t  full_path,\r\n\t\t\t\t\t\t\t  DateTimeUtils.UnixTimeStampToUtc(time).ToLongTimeString(),\r\n\t\t\t\t\t\t\t  DateTimeUtils.UnixTimeStampToUtc(threshold).ToLongTimeString()),\r\n\t\t\t\t\t\t\t  \"PhpSessionHandler\");\r\n\r\n\t\t\t\t\t\t\tPhpFile.Delete(full_path);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called immediately before the session is abandoned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">A current script context.</param>\r\n\t\t/// <param name=\"httpContext\">A current HTTP context.</param>\r\n\t\tprotected override void Abandoning(ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\r\n\t\t\tstring file_name = GetSessionFilePath(config.Session.SavePath, httpContext.Session.SessionID);\r\n\t\t\tDebug.WriteLine(\"Abandoning file \" + file_name, \"PhpSessionHandler.CollectOldFiles\");\r\n\t\t\tPhpFile.Delete(file_name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a session file for reading or writing.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"savePath\">A save path in the configuration.</param>\r\n\t\t/// <param name=\"sid\">The SID.</param>\r\n\t\t/// <param name=\"write\">Whether to open the file for writing.</param>\r\n\t\tprivate static PhpStream OpenSessionFile(string savePath, string sid, bool write)\r\n\t\t{\r\n\t\t\tstring file_path = GetSessionFilePath(savePath, sid);\r\n\r\n\t\t\tif (file_path != null)\r\n\t\t\t{\r\n\t\t\t\tif (write)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.WriteLine(\"Write open file \" + file_path, \"PhpSessionHandler\");\r\n\t\t\t\t\treturn PhpStream.Open(file_path, \"wb\", StreamOpenOptions.Empty, StreamContext.Default);\r\n\t\t\t\t}\r\n\t\t\t\telse if (PhpFile.Exists(file_path))\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.WriteLine(\"Read open file \" + file_path, \"PhpSessionHandler\");\r\n\t\t\t\t\treturn PhpStream.Open(file_path, \"rb\", StreamOpenOptions.Empty, StreamContext.Default);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG\r\n\r\n\t\tpublic static void Test_CollectOldFiles()\r\n\t\t{\r\n\t\t\tstring path = Path.Combine(Path.GetTempPath(), \"Session\");\r\n\t\t\tSystem.IO.Directory.CreateDirectory(path);\r\n\t\t\tconst int lifetime = 200;\r\n\t\t\tconst int count = 20;\r\n\r\n\t\t\t//      System.Diagnostics.Debug.Listeners.Clear();\r\n\t\t\t//      System.Diagnostics.Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));\r\n\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tstring file = Path.Combine(path, \"sess_\" + i);\r\n\t\t\t\tConsole.WriteLine(\"create file '{0}'\", file);\r\n\t\t\t\tFile.CreateText(file).Close();\r\n\t\t\t\tFile.SetLastAccessTime(file, DateTime.Now.AddSeconds(-lifetime + count / 2 - i));\r\n\t\t\t}\r\n\r\n\t\t\tConsole.WriteLine(\"collecting...\");\r\n\t\t\tDefault.Collect(path, \"\", lifetime);\r\n\t\t\tConsole.WriteLine(\"done.\");\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpUserSessionHandler\r\n\r\n\t/// <summary>\r\n\t/// Handles PHP sessions via user handlers.\r\n\t/// </summary>\r\n\tpublic sealed class PhpUserSessionHandler : PhpSessionHandlerBase\r\n\t{\r\n\t\tprivate PhpUserSessionHandler() { }\r\n\r\n\t\t#region Nested class: User Handlers\r\n\r\n\t\t/// <summary>\r\n\t\t/// A set of session callbacks. \r\n\t\t/// </summary>\r\n\t\tinternal class Handlers\r\n\t\t{\r\n\t\t\tpublic PhpCallback Open;\r\n\t\t\tpublic PhpCallback Close;\r\n\t\t\tpublic PhpCallback Read;\r\n\t\t\tpublic PhpCallback Write;\r\n\t\t\tpublic PhpCallback Destroy;\r\n\t\t\tpublic PhpCallback Collect;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Clears thread static field. Called on request end.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate static void Clear()\r\n\t\t\t{\r\n\t\t\t\t_current = null;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Registeres <see cref=\"Clear\"/> called on request end.\r\n\t\t\t/// </summary>\r\n\t\t\tstatic Handlers()\r\n\t\t\t{\r\n                RequestContext.RequestEnd += new Action(Clear);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets the current set of handlers.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal static Handlers Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tif (_current == null) _current = new Handlers();\r\n\t\t\t\t\treturn _current;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t[ThreadStatic]\r\n\t\t\tprivate static Handlers _current = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton instance.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpUserSessionHandler Default = new PhpUserSessionHandler();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets name of the handler used in configuration.\r\n\t\t/// </summary>\r\n\t\tpublic override string Name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn \"user\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls \"open\" and \"read\" user handlers if not empty.\r\n\t\t/// </summary>\r\n\t\tprotected override PhpBytes LoadSerializedVariables(string savePath, string sid)\r\n\t\t{\r\n\t\t\tHandlers handlers = Handlers.Current;\r\n\t\t\tPhpBytes result = null;\r\n\r\n\t\t\tif (handlers.Open != null)\r\n\t\t\t{\r\n\t\t\t\tif (!Core.Convert.ObjectToBoolean(handlers.Open.Invoke(savePath, GetSessionFileName(sid))))\r\n\t\t\t\t{\r\n\t\t\t\t\tReportError(\"open\", savePath, sid);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (handlers.Read != null)\r\n\t\t\t{\r\n\t\t\t\tresult = Core.Convert.ObjectToPhpBytes(handlers.Read.Invoke(sid));\r\n\r\n\t\t\t\t// error (empty string of bytes):\r\n\t\t\t\tif (result != null && result.Length == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tReportError(\"read\", savePath, sid);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls \"write\" and \"close\" user handlers if not empty.\r\n\t\t/// </summary>\r\n\t\tprotected override void SaveSerializedVariables(string savePath, string sid, PhpBytes data)\r\n\t\t{\r\n\t\t\tHandlers handlers = Handlers.Current;\r\n\r\n\t\t\tif (handlers.Write != null && !Core.Convert.ObjectToBoolean(handlers.Write.Invoke(sid, data)))\r\n\t\t\t{\r\n\t\t\t\tReportError(\"write\", savePath, sid);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (handlers.Close != null && !Core.Convert.ObjectToBoolean(handlers.Close.Invoke()))\r\n\t\t\t{\r\n\t\t\t\tReportError(\"close\", savePath, sid);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls \"gc\" user handler if not empty.\r\n\t\t/// </summary>\r\n\t\tprotected override void Collect(string savePath, string sid, int lifetime)\r\n\t\t{\r\n\t\t\tHandlers handlers = Handlers.Current;\r\n\r\n\t\t\tif (handlers.Collect != null)\r\n\t\t\t\tif (!Core.Convert.ObjectToBoolean(handlers.Collect.Invoke(lifetime)))\r\n\t\t\t\t\tReportError(\"gc\", savePath, sid);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls \"destroy\" user handler if not empty.\r\n\t\t/// </summary>\r\n\t\tprotected override void Abandoning(ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tstring sid = httpContext.Session.SessionID;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\t\t\tHandlers handlers = Handlers.Current;\r\n\r\n\t\t\tif (handlers.Destroy != null)\r\n\t\t\t\tif (!Core.Convert.ObjectToBoolean(handlers.Destroy.Invoke(sid)))\r\n\t\t\t\t\tReportError(\"destroy\", config.Session.SavePath, sid);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reports an error when the user handler has failed.\r\n\t\t/// </summary>\r\n\t\tprivate void ReportError(string operation, string savePath, string sid)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"user_session_handler_failed\",\r\n\t\t\t  operation, sid, savePath));\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region AspNetThruSessionHandler\r\n\r\n    /// <summary>\r\n    /// Session handler based of ASP.NET sessions.\r\n    /// </summary>\r\n    public sealed class AspNetThruSessionHandler : SessionHandler\r\n    {\r\n        #region Inner class: AspNetSessionArray\r\n\r\n        private sealed class AspNetSessionArray : PhpArray\r\n        {\r\n            private readonly HttpSessionState/*!*/state;\r\n\r\n            public AspNetSessionArray(HttpSessionState/*!*/httpSessionState)\r\n            {\r\n                Debug.Assert(httpSessionState != null);\r\n                this.state = httpSessionState;\r\n            }\r\n\r\n            #region Helpers\r\n\r\n            /// <summary>\r\n            /// Checks whether given object DOES NOT implement <c>__wakeup</c> and <c>__sleep</c> magic methods.\r\n            /// </summary>\r\n            [System.Diagnostics.Conditional(\"DEBUG\")]\r\n            private static void NotWakeupThrowHelper(object obj)\r\n            {\r\n                if (obj != null && obj is DObject)\r\n                {\r\n                    var dobj = (DObject)obj;\r\n\r\n                    if (dobj.TypeDesc.GetMethod(Core.Name.SpecialMethodNames.Wakeup) != null)\r\n                        throw new ArgumentException(\"__wakeup not handled yet in aspnet session handler!\");\r\n\r\n                    if (dobj.TypeDesc.GetMethod(Core.Name.SpecialMethodNames.Sleep) != null)\r\n                        throw new ArgumentException(\"__sleep not handled yet in aspnet session handler!\");\r\n                }\r\n            }\r\n\r\n            private string FindNewKey()\r\n            {\r\n                for (int i = 0; ; i++)\r\n                {\r\n                    string name = i.ToString();\r\n                    if (state[name] == null)\r\n                        return name;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Operators\r\n\r\n            public override object Clone()\r\n            {\r\n                var result = new PhpArray(state.Count);\r\n\r\n                foreach (string name in state)\r\n                    result[name] = ClrObject.WrapDynamic(state[name]);\r\n\r\n                return result;\r\n            }\r\n\r\n            protected override PhpArray EnsureItemIsArrayOverride()\r\n            {\r\n                // find max integer key, add new array at the next position\r\n                var result = new PhpArray();\r\n                state[FindNewKey()] = result;\r\n                return result;\r\n            }\r\n\r\n            protected override PhpArray EnsureItemIsArrayOverride(object key)\r\n            {\r\n                IntStringKey array_key;\r\n                if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }\r\n                string name = array_key.ToString();\r\n\r\n                var obj = state[name];\r\n                var objref = obj as PhpReference;\r\n\r\n                if (objref != null)\r\n                    obj = objref.Value;\r\n\r\n                // wrap CLR types into DObject (needed for checks below):\r\n                obj = ClrObject.WrapDynamic(obj);\r\n\r\n                // convert obj into an array or wrap it into an array if possible:\r\n                object new_obj;\r\n                var wrappedarray = Operators.EnsureObjectIsArray(obj, out new_obj);\r\n                if (wrappedarray != null)\r\n                {\r\n                    if (new_obj != null)\r\n                    {\r\n                        if (objref != null) objref.Value = new_obj;\r\n                        else state[name] = new_obj;\r\n                    }\r\n\r\n                    return wrappedarray;\r\n                }\r\n\r\n                // cannot be represented as an array:\r\n                PhpException.VariableMisusedAsArray(obj, false);\r\n                return null;\r\n            }\r\n\r\n            protected override DObject EnsureItemIsObjectOverride(object key, ScriptContext context)\r\n            {\r\n                IntStringKey array_key;\r\n                if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }\r\n                string name = array_key.ToString();\r\n                var obj = state[name];\r\n                var objref = obj as PhpReference;\r\n\r\n                if (objref != null)\r\n                    obj = objref.Value;\r\n\r\n                obj = ClrObject.WrapDynamic(obj);\r\n\r\n                if (obj is DObject)\r\n                    return (DObject)obj;\r\n\r\n                if (Operators.IsEmptyForEnsure(obj))\r\n                {\r\n                    var newobj = PHP.Library.stdClass.CreateDefaultObject(context);\r\n\r\n                    if (objref != null)\r\n                        objref.Value = newobj;\r\n                    else\r\n                        state[name] = newobj;\r\n\r\n                    return newobj;\r\n                }\r\n\r\n                PhpException.VariableMisusedAsObject(obj, false);\r\n                return null;\r\n            }\r\n\r\n            protected override DObject EnsureItemIsObjectOverride(ScriptContext context)\r\n            {\r\n                var obj = PHP.Library.stdClass.CreateDefaultObject(context);\r\n                state[FindNewKey()] = obj;\r\n                return obj;\r\n            }\r\n\r\n            protected override object GetArrayItemOverride(object key, bool quiet)\r\n            {\r\n                IntStringKey array_key;\r\n                if (!PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    if (!quiet)\r\n                        PhpException.IllegalOffsetType();\r\n\r\n                    return null;\r\n                }\r\n\r\n                string name = array_key.ToString();\r\n                var item = state[name];\r\n                NotWakeupThrowHelper(item);\r\n                return ClrObject.WrapDynamic(PhpVariable.Dereference(item));\r\n            }\r\n\r\n            protected override PhpReference GetArrayItemRefOverride()\r\n            {\r\n                var result = new PhpReference();\r\n                state[FindNewKey()] = result;\r\n                return result;\r\n            }\r\n\r\n            protected override PhpReference GetArrayItemRefOverride(int key)\r\n            {\r\n                return SessionGetArrayItemRef(key.ToString());\r\n            }\r\n\r\n            protected override PhpReference GetArrayItemRefOverride(string key)\r\n            {\r\n                return SessionGetArrayItemRef(key ?? string.Empty);\r\n            }\r\n\r\n            protected override PhpReference GetArrayItemRefOverride(object key)\r\n            {\r\n                IntStringKey array_key;\r\n                if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    return SessionGetArrayItemRef(array_key.ToString());\r\n                }\r\n                else\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            private PhpReference SessionGetArrayItemRef(string name)\r\n            {\r\n                Debug.Assert(name != null);\r\n\r\n                var obj = state[name];\r\n                NotWakeupThrowHelper(obj);\r\n\r\n                if (obj is PhpReference)\r\n                    return (PhpReference)obj;\r\n\r\n                var objref = new PhpReference(ClrObject.WrapDynamic(obj));\r\n                state[name] = objref;\r\n                return objref;\r\n            }\r\n\r\n            protected override void SetArrayItemOverride(object value)\r\n            {\r\n                state[FindNewKey()] = value;\r\n            }\r\n\r\n            protected override void SetArrayItemOverride(int key, object value)\r\n            {\r\n                SessionSetArrayItem(key.ToString(), value);\r\n            }\r\n\r\n            protected override void SetArrayItemOverride(object key, object value)\r\n            {\r\n                IntStringKey array_key;\r\n                if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    SessionSetArrayItem(array_key.ToString(), value);\r\n                }\r\n                else\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                }\r\n            }\r\n\r\n            protected override void SetArrayItemOverride(string key, object value)\r\n            {\r\n                SessionSetArrayItem(key ?? string.Empty, value);\r\n            }\r\n\r\n            private void SessionSetArrayItem(string name, object value)\r\n            {\r\n                Debug.Assert(name != null);\r\n                NotWakeupThrowHelper(value);\r\n\r\n                var obj = state[name];\r\n\r\n                // preserve reference:\r\n                if (obj != null && obj is PhpReference)\r\n                    ((PhpReference)obj).Value = value;\r\n                else\r\n                    state[name] = value;\r\n            }\r\n\r\n            protected override void SetArrayItemRefOverride(object key, PhpReference value)\r\n            {\r\n                IntStringKey array_key;\r\n                if (PHP.Core.Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    NotWakeupThrowHelper(value.Value);\r\n                    state[array_key.ToString()] = value;\r\n                }\r\n                else\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                }\r\n            }\r\n\r\n            public override bool Remove(IntStringKey key)\r\n            {\r\n                state.Remove(key.ToString());\r\n                return true;\r\n            }\r\n\r\n            public override int Count { get { return state.Count; } }\r\n\r\n            public override void Clear()\r\n            {\r\n                state.Clear();\r\n            }\r\n\r\n            private class SessionStateEnumerator : IDictionaryEnumerator\r\n            {\r\n                private AspNetSessionArray array;\r\n                private bool aliasedValues;\r\n\r\n                private readonly IEnumerator namesEnumerator;\r\n\r\n                public SessionStateEnumerator(AspNetSessionArray array, bool aliasedValues)\r\n                {\r\n                    this.array = array;\r\n                    this.aliasedValues = aliasedValues;\r\n\r\n                    this.namesEnumerator = new System.Collections.ArrayList(array.state).GetEnumerator();   // make a copy of names, and get enumerator on this\r\n                }\r\n\r\n                public DictionaryEntry Entry\r\n                {\r\n                    get { throw new NotImplementedException(); }\r\n                }\r\n\r\n                public object Key\r\n                {\r\n                    get { return namesEnumerator.Current; }\r\n                }\r\n\r\n                public object Value\r\n                {\r\n                    get\r\n                    {\r\n                        if (aliasedValues)\r\n                            return array.GetArrayItemRefOverride((string)Key);\r\n                        else\r\n                            return PhpVariable.Copy(ClrObject.WrapDynamic(PhpVariable.Dereference(array.state[(string)Key])), CopyReason.Assigned);\r\n                    }\r\n                }\r\n\r\n                public object Current\r\n                {\r\n                    get { throw new NotImplementedException(); }\r\n                }\r\n\r\n                public bool MoveNext()\r\n                {\r\n                    return namesEnumerator.MoveNext();\r\n                }\r\n\r\n                public void Reset()\r\n                {\r\n                    namesEnumerator.Reset();\r\n                }\r\n            }\r\n\r\n            public override IDictionaryEnumerator GetForeachEnumerator(bool keyed, bool aliasedValues, DTypeDesc caller)\r\n            {\r\n                return new SessionStateEnumerator(this, aliasedValues);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Enumeration\r\n\r\n            public override IEnumerator<KeyValuePair<IntStringKey, object>>/*!*/ GetEnumerator()\r\n            {\r\n                foreach (string name in state)\r\n                {\r\n                    string key = (string)name;\r\n                    yield return new KeyValuePair<IntStringKey, object>(new IntStringKey(key), state[key]);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Does not allow instantiation from outside.\r\n        /// </summary>\r\n        private AspNetThruSessionHandler() { }\r\n\r\n        public static string AspNetSessionName { get { return AspNetSessionHandler.AspNetSessionName; } }\r\n\r\n        /// <summary>\r\n        /// Singleton instance.\r\n        /// </summary>\r\n        public static readonly AspNetThruSessionHandler Default = new AspNetThruSessionHandler();\r\n\r\n        /// <summary>\r\n        /// Gets a string representation.\r\n        /// </summary>\r\n        /// <returns>The name of the handler.</returns>\r\n        public override string ToString()\r\n        {\r\n            return Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a name of the handler used in the configuration.\r\n        /// </summary>\r\n        public override string Name\r\n        {\r\n            get { return \"aspnet_thru\"; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads variables from ASP.NET session to an array.\r\n        /// </summary>\r\n        protected override PhpArray Load(ScriptContext context, HttpContext httpContext)\r\n        {\r\n            return new AspNetSessionArray(httpContext.Session);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Stores session variables to ASP.NET session.\r\n        /// </summary>\r\n        protected override void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called immediately before the session is abandoned.\r\n        /// </summary>\r\n        protected override void Abandoning(ScriptContext context, HttpContext httpContext)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// ASP.NET session handler won't persist data if session id has been changed. New session will be created.\r\n        /// </summary>\r\n        public override bool AllowsSessionIdChange { get { return false; } }\r\n\r\n        /// <summary>\r\n        /// Gets session cookie associated with a specified HTTP context.\r\n        /// </summary>\r\n        /// <param name=\"context\">The context.</param>\r\n        /// <returns>The cookie.</returns>\r\n        public static HttpCookie GetCookie(HttpContext/*!*/ context)\r\n        {\r\n            if (context == null) throw new ArgumentNullException(\"context\");\r\n\r\n            // no cookies available:\r\n            if (context.Session == null || context.Session.IsCookieless) return null;\r\n\r\n            // gets cookie from request:\r\n            return context.Request.Cookies[AspNetSessionName];\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n\t/// <summary>\r\n\t/// PHP session handling functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\t[ImplementsExtension(LibraryDescriptor.ExtSession)]\r\n\tpublic static class PhpSession\r\n\t{\r\n\t\t#region GSRs\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cache_expire\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const int DefaultCacheExpire = 180;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cache_limiter\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const string DefaultCacheLimiter = \"public\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cookie_lifetime\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const int DefaultCookieLifetime = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cookie_path\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const string DefaultCookiePath = \"/\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cookie_domain\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const string DefaultCookieDomain = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default value for \"session.cookie_secure\" PHP configuration option.\r\n\t\t/// </summary>\r\n\t\tpublic const bool DefaultCookieSecure = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine for \"session.serialize_handler\" configuration option.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrSerializer(LibraryConfiguration/*!*/ local, LibraryConfiguration/*!*/ @default, object value, IniAction action)\r\n\t\t{\r\n\t\t\tstring result = local.Session.Serializer.Name;\r\n\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstring name = Core.Convert.ObjectToString(value);\r\n\t\t\t\t\t\tSerializer serializer = Serializers.GetSerializer(name);\r\n\r\n\t\t\t\t\t\tif (serializer == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"unknown_serializer\", name));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlocal.Session.Serializer = serializer;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tlocal.Session.Serializer = @default.Session.Serializer;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets or restores \"session.save_handler\" option.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrHandler(LocalConfiguration local, LocalConfiguration @default, object value, IniAction action)\r\n\t\t{\r\n\t\t\tstring result = local.Session.Handler.Name;\r\n\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstring name = Core.Convert.ObjectToString(value);\r\n\t\t\t\t\t\tSessionHandler handler = SessionHandlers.GetHandler(name);\r\n\r\n\t\t\t\t\t\tif (handler == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning,\r\n\t\t\t\t\t\t\t  PhpException.ToErrorMessage(CoreResources.GetString(\"unknown_session_handler\", name)));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlocal.Session.Handler = handler;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tlocal.Session.Handler = @default.Session.Handler;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCacheExpire(object value, IniAction action)\r\n\t\t{\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Get: return CacheExpire();\r\n\t\t\t\tcase IniAction.Set: return CacheExpire(Core.Convert.ObjectToInteger(value));\r\n\t\t\t\tcase IniAction.Restore: CacheExpire(PhpSession.DefaultCacheExpire); return null;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCacheLimiter(object value, IniAction action)\r\n\t\t{\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Get: return CacheLimiter();\r\n\t\t\t\tcase IniAction.Set: return CacheLimiter(Core.Convert.ObjectToString(value));\r\n\t\t\t\tcase IniAction.Restore: CacheLimiter(PhpSession.DefaultCacheLimiter); return null;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCookieLifetime(object value, IniAction action)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return DefaultCookieLifetime;\r\n\r\n\t\t\tint result = context.SessionCookieLifetime;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\tcontext.SessionCookieLifetime = Core.Convert.ObjectToInteger(value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tcontext.SessionCookieLifetime = DefaultCookieLifetime;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCookieSecure(object value, IniAction action)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return DefaultCookieSecure;\r\n\r\n\t\t\tbool result = cookie.Secure;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\tcookie.Secure = PhpIni.OptionValueToBoolean(value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tcookie.Secure = DefaultCookieSecure;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCookiePath(object value, IniAction action)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return DefaultCookiePath;\r\n\r\n\t\t\tstring result = cookie.Path;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\tcookie.Path = Core.Convert.ObjectToString(value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tcookie.Path = DefaultCookiePath;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GSR routine used for configuration.\r\n\t\t/// </summary>\r\n\t\tinternal static object GsrCookieDomain(object value, IniAction action)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return DefaultCookieDomain;\r\n\r\n\t\t\tstring result = cookie.Domain;\r\n\t\t\tswitch (action)\r\n\t\t\t{\r\n\t\t\t\tcase IniAction.Set:\r\n\t\t\t\t\tcookie.Domain = Core.Convert.ObjectToString(value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase IniAction.Restore:\r\n\t\t\t\t\tcookie.Domain = DefaultCookieDomain;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region SessionId\r\n\r\n        internal class SessionId\r\n        {\r\n            /// <summary>\r\n            /// Singleton SessionIDManager instance.\r\n            /// </summary>\r\n            internal static SessionIDManager Manager\r\n            {\r\n                get\r\n                {\r\n                    if (manager == null)\r\n                    {\r\n                        var newManager = new SessionIDManager();\r\n                        newManager.Initialize();\r\n\r\n                        return (manager = newManager);\r\n                    }\r\n\r\n                    return manager;\r\n                }\r\n            }\r\n            private static SessionIDManager manager = null;\r\n\r\n            /// <summary>\r\n            /// Set new SessionId string. Resets the Session object.\r\n            /// </summary>\r\n            /// <param name=\"request_context\">Current RequestContext. Cannot be null.</param>\r\n            /// <param name=\"session_id\">New SessionId string.</param>\r\n            internal static void SetNewSessionId(RequestContext/*!*/request_context, string session_id)\r\n            {\r\n                Debug.Assert(request_context != null);\r\n\r\n                // currently this method does not work properly with ASP.NET handler, because\r\n                // there is already created InProcDataStore associated with old SessionId,\r\n                // this old SessionId is saved in private field SessionStateModule._rqId (and others)\r\n                // and an attempt to store the data at the end of the request by ASP runtime with\r\n                // new SessionId will silently fail (probably).\r\n                //\r\n                // Need to implement own SessionStateModule ?\r\n                //Debug.Assert(request_context.ScriptContext.Config.Session.Handler.Name != AspNetSessionHandler.Default.Name);\r\n\r\n                // NOTE:\r\n                // When using ASP.NET session handler, following process drops all the session data\r\n                // created during this request ... so next request starts with all new session state.\r\n                \r\n                if (!Manager.Validate(session_id))\r\n                    throw new ArgumentException(null, \"session_id\");\r\n\r\n                var session = request_context.HttpContext.Session;\r\n\r\n                //var x = HttpRuntime.CacheInternal.Get(\"j\" + session.SessionID);\r\n\r\n                // drop previous HttpContext.Session\r\n                System.Web.SessionState.SessionStateUtility.RemoveHttpSessionStateFromContext(\r\n                    request_context.HttpContext);\r\n\r\n                // assign new HttpContext.Session\r\n                System.Web.SessionState.SessionStateUtility.AddHttpSessionStateToContext(\r\n                    request_context.HttpContext,\r\n                    new System.Web.SessionState.HttpSessionStateContainer(\r\n                        session_id,\r\n                        CloneSessionStateCollection(session),   // in PHP, session variables are not cleaned when new SessionId has been set\r\n                        session.StaticObjects,// new HttpStaticObjectsCollection(),\r\n                        session.Timeout,\r\n                        true,\r\n                        session.CookieMode,\r\n                        session.Mode,\r\n                        false)\r\n                    );\r\n\r\n                // save session id cookie, update SID\r\n\r\n                //request_context.HttpContext.Response.Cookies[]\r\n                SessionId.Manager.RemoveSessionID(request_context.HttpContext);\r\n                bool redirected, cookieAdded;\r\n                SessionId.Manager.SaveSessionID(request_context.HttpContext, session_id, out redirected, out cookieAdded);\r\n\r\n                // set new SID constant\r\n                request_context.UpdateSID();\r\n            }\r\n\r\n            private static ISessionStateItemCollection CloneSessionStateCollection(HttpSessionState session)\r\n            {\r\n                var collection = new System.Web.SessionState.SessionStateItemCollection();\r\n\r\n                for (int i = 0; i < session.Count; ++i)\r\n                    collection[session.Keys[i]] = session[i];\r\n\r\n                return collection;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t#region session_start, session_destroy, session_write_close, session_commit\r\n\r\n\t\t/// <summary>\r\n\t\t/// Starts session. Loads session variables to <c>$_SESSION</c> and optionally to <c>$GLOBALS</c> arrays.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B> on success.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t[ImplementsFunction(\"session_start\")]\r\n\t\tpublic static bool Start()\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return false;\r\n\r\n\t\t\trequest_context.StartSession();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes session and deletes all the data associated with it.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B> on success.</returns>\r\n\t\t[ImplementsFunction(\"session_destroy\")]\r\n\t\tpublic static bool Destroy()\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return false;\r\n\r\n\t\t\trequest_context.EndSession(true);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Persists session data and closes the session. See <see cref=\"Commit\"/> for details.\r\n        /// No value is returned.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_write_close\")]\r\n\t\tpublic static void WriteClose()\r\n\t\t{\r\n\t\t\tCommit();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Persists session data and closes the session.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_commit\")]\r\n\t\tpublic static void Commit()\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return;\r\n\r\n\t\t\trequest_context.EndSession(false);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_register, session_is_registered, session_unregister, session_unset\r\n\r\n\t\t[ImplementsFunction(\"session_register\")]\r\n\t\tpublic static bool RegisterVariable(params object[] names)\r\n\t\t{\r\n\t\t\tif (names == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"names\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return false;\r\n\r\n\t\t\t// starts session if not started yet:\r\n\t\t\tif (request_context.SessionState == SessionStates.Closed)\r\n\t\t\t\trequest_context.StartSession();\r\n\r\n\t\t\tScriptContext context = request_context.ScriptContext;\r\n\r\n\t\t\t// gets $GLOBALS array if exists:\r\n\t\t\tPhpArray globals = context.GlobalVariables;\r\n\r\n\t\t\t// gets $_SESSION array (creates a new one if not exists):\r\n\t\t\tPhpArray session = context.SessionVariables;\r\n\r\n\t\t\tPhpReference reference;\r\n\t\t\tbool result = true;\r\n\r\n\t\t\t// sets $_SESSION items using $GLOBALS array:\r\n\t\t\tfor (int i = 0; i < names.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring name;\r\n\t\t\t\tPhpArray array;\r\n\r\n\t\t\t\tif ((array = names[i] as PhpArray) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// recursively searches for string variable names:\r\n\t\t\t\t\tusing (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(false, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile (iterator.MoveNext())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tname = PHP.Core.Convert.ObjectToString(iterator.Current.Value);\r\n\t\t\t\t\t\t\treference = globals.GetArrayItemRef(iterator.Current.Value);\r\n\r\n\t\t\t\t\t\t\t// skips resources:\r\n\t\t\t\t\t\t\tif (!(reference.value is PhpResource)) session[name] = reference; else result = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tname = PHP.Core.Convert.ObjectToString(names[i]);\r\n\t\t\t\t\treference = globals.GetArrayItemRef(names[i]);\r\n\r\n\t\t\t\t\t// skips resources:\r\n\t\t\t\t\tif (!(reference.value is PhpResource)) session[name] = reference; else result = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"session_is_registered\")]\r\n\t\tpublic static bool IsVariableRegistered(string sessionName)\r\n\t\t{\r\n\t\t\tPhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session);\r\n\t\t\treturn (session != null) && session.ContainsKey(sessionName);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"session_unregister\")]\r\n\t\tpublic static bool UnregisterVariable(string name)\r\n\t\t{\r\n\t\t\tPhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session);\r\n\t\t\tif (session == null) return false;\r\n\r\n\t\t\tbool result = session.ContainsKey(name);\r\n\t\t\tsession.Remove(name);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"session_unset\")]\r\n\t\tpublic static void UnsetVariable()\r\n\t\t{\r\n\t\t\tPhpArray session = PhpReference.AsPhpArray(ScriptContext.CurrentContext.AutoGlobals.Session);\r\n\t\t\tif (session != null)\r\n\t\t\t\tsession.Clear();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_cache_expire, session_cache_limiter\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a session cache expiration timeout.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The timeout in minutes.</returns>\r\n\t\t[ImplementsFunction(\"session_cache_expire\")]\r\n\t\tpublic static int CacheExpire()\r\n\t\t{\r\n\t\t\tHttpContext http_context;\r\n\t\t\tif (!Web.EnsureHttpContext(out http_context)) return 0;\r\n\r\n\t\t\treturn http_context.Response.Expires;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a session cache expiration timeout.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newValue\">A new value (in minutes).</param>\r\n\t\t/// <returns>An old value (in minutes).</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"newValue\"/> is not positive. (Warning)</exception>\r\n\t\t[ImplementsFunction(\"session_cache_expire\")]\r\n\t\tpublic static int CacheExpire(int newValue)\r\n\t\t{\r\n\t\t\tHttpContext http_context;\r\n\t\t\tif (!Web.EnsureHttpContext(out http_context)) return 0;\r\n\r\n\t\t\tint result = http_context.Response.Expires;\r\n\r\n\t\t\tif (newValue > 0)\r\n\t\t\t{\r\n\t\t\t\thttp_context.Response.Expires = newValue;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"newValue\", LibResources.GetString(\"arg:negative_or_zero\"));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a current value of cache control limiter.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The cache control limiter (\"private\", \"public\", \"no-cache\").</returns>\r\n\t\t[ImplementsFunction(\"session_cache_limiter\")]\r\n\t\tpublic static string CacheLimiter()\r\n\t\t{\r\n            return CacheLimiter(null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets cache control limiter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newLimiter\">\r\n\t\t/// A new value - should be one of \"private\", \"private_no_expire\", \"public\", \"nocache\", or \"no-cache\".\r\n\t\t/// Letter case is ignored. In PHP the value can contain other colon-separated values.\r\n\t\t/// </param>\r\n\t\t/// <returns>An old value (\"private\", \"public\", or \"no-cache\").</returns>\r\n        /// <remarks>Sets the headers according to the http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html .</remarks>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"newLimiter\"/> has invalid value. (Notice)</exception>\r\n\t\t[ImplementsFunction(\"session_cache_limiter\")]\r\n\t\tpublic static string CacheLimiter(string newLimiter)\r\n\t\t{\r\n\t\t\tHttpContext http_context;\r\n\t\t\tif (!Web.EnsureHttpContext(out http_context)) return null;\r\n\r\n            string result = ScriptContext.CurrentContext.Headers[\"cache-control\"] ?? \"public\";\r\n\r\n            if (!string.IsNullOrEmpty(newLimiter))\r\n            {\r\n                PHP.Core.HttpHeaders.CacheLimiter(\r\n                   http_context.Response,\r\n                   newLimiter,\r\n                   limiter => PhpException.Throw(PhpError.Notice, LibResources.GetString(\"invalid_cache_limiter\", limiter))\r\n                   );\r\n            }\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_save_path, session_name, session_id, session_regenerate_id\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a path where sessions are stored.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_save_path\")]\r\n\t\tpublic static string SavePath()\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!Web.EnsureHttpContext(out context)) return null;\r\n\r\n\t\t\treturn LibraryConfiguration.Local.Session.SavePath;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a path where sessions are stored (see 'session.save_path' configuration option).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newPath\">The new path to set.</param>\r\n\t\t/// <remarks>A previous value of the path.</remarks>\r\n\t\t[ImplementsFunction(\"session_save_path\")]\r\n\t\tpublic static string SavePath(string newPath)\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!Web.EnsureHttpContext(out context)) return null;\r\n\r\n\t\t\tstring result = LibraryConfiguration.Local.Session.SavePath;\r\n\t\t\tLibraryConfiguration.Local.Session.SavePath = newPath;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current session name. \r\n\t\t/// </summary>\r\n\t\t/// <returns>A session name (<c>\"ASP.NET_SessionId\"</c>).</returns>\r\n\t\t[ImplementsFunction(\"session_name\")]\r\n\t\tpublic static string Name()\r\n\t\t{\r\n            return Name(null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the current session name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newName\">A new name.</param>\r\n\t\t/// <returns>An old name.</returns>\r\n\t\t[ImplementsFunction(\"session_name\")]\r\n\t\tpublic static string Name(string newName)\r\n\t\t{\r\n            RequestContext request_context;\r\n            if (!Web.EnsureRequestContext(out request_context)) return null;\r\n\r\n            var/*!*/handler = request_context.ScriptContext.Config.Session.Handler;\r\n            Debug.Assert(handler != null);\r\n\r\n            var oldName = handler.GetSessionName(request_context);\r\n            if (newName != null)\r\n            {\r\n                handler.SetSessionName(request_context, newName);\r\n            }\r\n\t\t\t\r\n\t\t\treturn oldName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current session id.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The session id.</returns>\r\n\t\t[ImplementsFunction(\"session_id\")]\r\n\t\tpublic static string Id()\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return null;\r\n\r\n            // in Phalanger:\r\n            // id is returned only if sessions are active\r\n\r\n            return (request_context.SessionState == SessionStates.Started) ?\r\n              request_context.HttpContext.Session.SessionID : String.Empty;\r\n\r\n            // in PHP:\r\n            // id is initially \"\"\r\n            // session_id() returns current SessionId even if session was not started yet\r\n            // id is cleared after destroying the session\r\n            \r\n            // return request_context.HttpContext.Session.SessionID;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Changes session id.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">A new id value.</param>\r\n\t\t/// <returns>A session id.</returns>\r\n\t\t[ImplementsFunction(\"session_id\")]\r\n\t\tpublic static string Id(string id)\r\n\t\t{\r\n            string oldId = Id();\r\n\r\n            if (!string.IsNullOrEmpty(id))\r\n            {\r\n                RequestContext request_context;\r\n                if (!Web.EnsureRequestContext(out request_context))\r\n                    return null;\r\n\r\n                // writes up new session id\r\n                SessionId.SetNewSessionId(request_context, id);\r\n            \r\n                //\r\n                if (!request_context.ScriptContext.Config.Session.Handler.AllowsSessionIdChange)\r\n                {\r\n                    // ASP.NET session id change causes session data to be lost:\r\n                    PhpException.Throw(PhpError.Notice, Strings.aspnet_sessionhandler_id_reset);\r\n                }\r\n            }\r\n\r\n            return oldId;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Update the current session id with a newly generated one.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns TRUE on success or FALSE on failure.</returns>\r\n\t\t[ImplementsFunction(\"session_regenerate_id\")]\r\n\t\tpublic static bool RegenerateId()\r\n\t\t{\r\n            return RegenerateId(false);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Update the current session id with a newly generated one.\r\n\t\t/// </summary>\r\n        /// <param name=\"delete_old_session\">Whether to delete the old associated session file or not.</param>\r\n\t\t/// <returns>Returns TRUE on success or FALSE on failure.   </returns>\r\n        [ImplementsFunction(\"session_regenerate_id\")]\r\n        public static bool RegenerateId(bool delete_old_session)\r\n        {\r\n            RequestContext request_context;\r\n            if (!Web.EnsureRequestContext(out request_context)) return false;\r\n\r\n            if (request_context.SessionState != SessionStates.Started)\r\n                return false;\r\n\r\n            if (delete_old_session)\r\n            {\r\n                // TODO: delete old session file\r\n            }\r\n\r\n            // regenerate SessionID\r\n            string session_id = SessionId.Manager.CreateSessionID(request_context.HttpContext/*not used*/);\r\n            SessionId.SetNewSessionId(request_context, session_id);\r\n\r\n            if (!request_context.ScriptContext.Config.Session.Handler.AllowsSessionIdChange)\r\n            {\r\n                // ASP.NET session id change causes session data to be lost:\r\n                PhpException.Throw(PhpError.Notice, Strings.aspnet_sessionhandler_id_reset);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_decode, session_encode\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deserializes data serialized by PHP session serializer and registers them into the $_SESSION\r\n\t\t/// and $GLOBAL (if register globals configuration option is on) variables.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">A string of bytes to deserialize.</param>\r\n\t\t/// <returns>Whether deserialization was successful.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Out of HTTP server context (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Session doesn't not exist (Notice).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Deserialization failed (Notice).</exception>\r\n\t\t[ImplementsFunction(\"session_decode\")]\r\n\t\tpublic static bool DecodeVariables(PhpBytes data)\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return false;\r\n\r\n\t\t\tif (!request_context.SessionExists)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"session_not_exists\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tScriptContext context = request_context.ScriptContext;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\r\n            PhpReference php_ref = config.Session.Serializer.Deserialize(data, UnknownTypeDesc.Singleton);\r\n\t\t\tif (php_ref == null) return false;\r\n\r\n\t\t\tcontext.AutoGlobals.Session = php_ref;\r\n\r\n\t\t\t// copies session variables to $GLOBALS array if necessary:\r\n\t\t\tif (global.GlobalVariables.RegisterGlobals)\r\n\t\t\t\tcontext.RegisterSessionGlobals();\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Serializes session variables.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Session variables serialized by the current session serializer. \r\n\t\t/// Returns a <B>null</B> reference on failure.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">Out of HTTP server context (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Session doesn't not exist (Notice).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Serialization failed (Notice).</exception>\r\n\t\t[ImplementsFunction(\"session_encode\")]\r\n\t\tpublic static PhpBytes EncodeVariables()\r\n\t\t{\r\n\t\t\tRequestContext request_context;\r\n\t\t\tif (!Web.EnsureRequestContext(out request_context)) return null;\r\n\r\n\t\t\tif (!request_context.SessionExists)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"session_not_exists\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tScriptContext context = request_context.ScriptContext;\r\n\t\t\tLibraryConfiguration config = LibraryConfiguration.GetLocal(context);\r\n\r\n            return config.Session.Serializer.Serialize(PhpReference.AsPhpArray(context.AutoGlobals.Session), UnknownTypeDesc.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_get_cookie_params, session_set_cookie_params\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the cookie created for the session by ASP.NET server.\r\n\t\t/// </summary>\r\n\t\tprivate static bool GetCookie(out HttpCookie cookie, out RequestContext context)\r\n\t\t{\r\n\t\t\tif (!Web.EnsureRequestContext(out context))\r\n\t\t\t{\r\n\t\t\t\tcontext = null;\r\n\t\t\t\tcookie = null;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tcookie = AspNetSessionHandler.GetCookie(context.HttpContext);\r\n\t\t\treturn cookie != null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the session cookie parameters.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_get_cookie_params\")]\r\n\t\tpublic static PhpArray GetCookieParameters()\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return null;\r\n\r\n\t\t\tPhpArray result = new PhpArray(0, 4);\r\n\r\n\t\t\tresult.Add(\"secure\", cookie.Secure);\r\n\t\t\tresult.Add(\"domain\", cookie.Domain);\r\n\t\t\tresult.Add(\"path\", cookie.Path);\r\n\t\t\tresult.Add(\"lifetime\", context.SessionCookieLifetime);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set the session cookie parameters.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_set_cookie_params\")]\r\n\t\tpublic static void SetCookieParameters(int lifetime)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return;\r\n\r\n\t\t\tcontext.SessionCookieLifetime = lifetime;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set the session cookie parameters.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_set_cookie_params\")]\r\n\t\tpublic static void SetCookieParameters(int lifetime, string path)\r\n\t\t{\r\n\t\t\tRequestContext context;\r\n\t\t\tHttpCookie cookie;\r\n\t\t\tif (!GetCookie(out cookie, out context)) return;\r\n\r\n\t\t\tcontext.SessionCookieLifetime = lifetime;\r\n\t\t\tcookie.Path = path;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set the session cookie parameters.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_set_cookie_params\")]\r\n\t\tpublic static void SetCookieParameters(int lifetime, string path, string domain)\r\n\t\t{\r\n            SetCookieParameters(lifetime, path, domain, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set the session cookie parameters.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"session_set_cookie_params\")]\r\n\t\tpublic static void SetCookieParameters(int lifetime, string path, string domain, bool secure)\r\n\t\t{\r\n            SetCookieParameters(lifetime, path, domain, secure, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Set the session cookie parameters.\r\n        /// </summary>\r\n        [ImplementsFunction(\"session_set_cookie_params\")]\r\n        public static void SetCookieParameters(int lifetime, string path, string domain, bool secure, bool httponly)\r\n        {\r\n            RequestContext context;\r\n            HttpCookie cookie;\r\n            if (!GetCookie(out cookie, out context)) return;\r\n\r\n            context.SessionCookieLifetime = lifetime;\r\n            cookie.Path = path;\r\n            cookie.Domain = domain;\r\n            cookie.Secure = secure;\r\n            cookie.HttpOnly = httponly;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region session_set_save_handler, session_module_name\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets handlers for session managing. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Only those callbacks which are non-null are set others are left their previous values. \r\n\t\t/// If any non-null callback binding fails none are set.\r\n\t\t/// </remarks>\r\n\t\t/// <returns>Whether all non-null callbacks were successfully set.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server is not available (Warning).</exception>\r\n\t\t[ImplementsFunction(\"session_set_save_handler\", FunctionImplOptions.NeedsClassContext)]\r\n\t\tpublic static bool SetHandlers(\r\n            PHP.Core.Reflection.DTypeDesc caller, \r\n\t\t\tPhpCallback open,\r\n\t\t\tPhpCallback close,\r\n\t\t\tPhpCallback read,\r\n\t\t\tPhpCallback write,\r\n\t\t\tPhpCallback destroy,\r\n\t\t\tPhpCallback gc)\r\n\t\t{\r\n\t\t\tif (!Web.EnsureHttpContext()) return false;\r\n\r\n\t\t\t// binds all non-null callbacks (reports all errors due to bitwise or):\r\n\t\t\tif (!PhpArgument.CheckCallback(open, caller, \"open\", 0, true) |\r\n\t\t\t  !PhpArgument.CheckCallback(close, caller, \"close\", 0, true) |\r\n\t\t\t  !PhpArgument.CheckCallback(read, caller, \"read\", 0, true) |\r\n\t\t\t  !PhpArgument.CheckCallback(write, caller, \"write\", 0, true) |\r\n\t\t\t  !PhpArgument.CheckCallback(destroy, caller, \"destroy\", 0, true) |\r\n\t\t\t  !PhpArgument.CheckCallback(gc, caller, \"gc\", 0, true))\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tPhpUserSessionHandler.Handlers handlers = PhpUserSessionHandler.Handlers.Current;\r\n\r\n\t\t\t// sets current handlers:\r\n\t\t\tif (open != null) handlers.Open = open;\r\n\t\t\tif (close != null) handlers.Close = close;\r\n\t\t\tif (read != null) handlers.Read = read;\r\n\t\t\tif (write != null) handlers.Write = write;\r\n\t\t\tif (destroy != null) handlers.Destroy = destroy;\r\n\t\t\tif (gc != null) handlers.Collect = gc;\r\n\r\n\t\t\tConfiguration.Local.Session.Handler = PhpUserSessionHandler.Default;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current session handler name.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name of the current session handler.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server is not available (Warning).</exception>\r\n\t\t[ImplementsFunction(\"session_module_name\")]\r\n\t\tpublic static string HandlerName()\r\n\t\t{\r\n\t\t\tif (!Web.EnsureHttpContext()) return null;\r\n\r\n\t\t\treturn Configuration.Local.Session.Handler.Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the current session module.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A name of the new handler.</param>\r\n\t\t/// <returns>The name of the current session handler.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server is not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\t[ImplementsFunction(\"session_module_name\")]\r\n\t\tpublic static string HandlerName(string name)\r\n\t\t{\r\n\t\t\tif (!Web.EnsureHttpContext()) return null;\r\n\t\t\tif (name == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"name\");\r\n\t\t\t\treturn Configuration.Local.Session.Handler.Name;\r\n\t\t\t}\r\n\r\n\t\t\treturn (string)GsrHandler(Configuration.Local, null, name, IniAction.Set);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Shell.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Implements program execution functions defined by PHP.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class Shell\r\n\t{\r\n\t\t#region getenv, putenv\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of an environment variable associated with a current process.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A name of the variable.</param>\r\n\t\t/// <returns>Current value of the variable.</returns>\r\n\t\t[ImplementsFunction(\"getenv\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string GetEnvironmentVariable(string name)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(name)) return null;\r\n\r\n            var servervar = ScriptContext.CurrentContext.AutoGlobals.Server.Value as PhpArray;\r\n            if (servervar != null)\r\n            {\r\n                object value;\r\n                if (servervar.TryGetValue(name, out value))\r\n                    return PHP.Core.Convert.ObjectToString(PhpVariable.Dereference(value));\r\n            }\r\n\r\n            return Environment.GetEnvironmentVariable(name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets an environment variable of the current process.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"setting\">String in format \"{name}={value}\".</param>\r\n\t\t[ImplementsFunction(\"putenv\")]\r\n\t\tpublic static bool SetEnvironmentVariable(string setting)\r\n\t\t{\r\n\t\t\tif (HttpContext.Current != null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"function_disallowed_in_web_context\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (String.IsNullOrEmpty(setting))\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"setting\", LibResources.GetString(\"arg:null_or_empty\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tint separator_pos = setting.IndexOf('=');\r\n\t\t\tif (separator_pos == -1)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:invalid_value\", \"setting\", setting));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tstring name = setting.Substring(0, separator_pos);\r\n\t\t\tstring value = setting.Substring(separator_pos + 1);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tEnvironment.SetEnvironmentVariable(name, value);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region escapeshellarg, escapeshellcmd\r\n\r\n\t\t/// <summary>\r\n\t\t/// Escapes argument to be passed to shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"arg\">The argument to excape.</param>\r\n\t\t/// <returns>\r\n\t\t/// <para>\r\n\t\t/// On Windows platform, each occurance of double quote (\") and ampersand (&amp;) \r\n\t\t/// is replaced with a single space. The resulting string is then put into double quotes.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// On Unix platform, each occurance of single quote (')\r\n\t\t/// is replaced with characters '\\'''. The resulting string is then put into single quotes.\r\n\t\t/// </para>\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"escapeshellarg\")]\r\n\t\tpublic static string EscapeShellArg(string arg)\r\n\t\t{\r\n\t\t\tif (arg == null || arg.Length == 0) return String.Empty;\r\n\r\n\t\t\tStringBuilder sb;\r\n\r\n\t\t\tif (Environment.OSVersion.Platform != PlatformID.Unix)\r\n\t\t\t{\r\n\t\t\t\tsb = new StringBuilder(arg.Length + 2);\r\n\t\t\t\tsb.Append(' ');\r\n\t\t\t\tsb.Append(arg);\r\n\t\t\t\tsb.Replace('\"', ' ');\r\n\t\t\t\tsb.Replace('%', ' ');\r\n\t\t\t\tsb.Append('\"');\r\n\t\t\t\tsb[0] = '\\'';\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tsb = new StringBuilder(arg.Length + 2);\r\n\t\t\t\tsb.Append(' ');\r\n\t\t\t\tsb.Append(arg);\r\n\t\t\t\tsb.Replace(\"'\", @\"'\\''\");\r\n\t\t\t\tsb.Append('\\'');\r\n\t\t\t\tsb[0] = '\\'';\r\n\t\t\t}\r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Escape shell metacharacters in a specified shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to excape.</param>\r\n\t\t/// <para>\r\n\t\t/// On Windows platform, each occurance of a character that might be used to trick a shell command\r\n\t\t/// is replaced with space. These characters are \r\n\t\t/// <c>\", ', #, &amp;, ;, `, |, *, ?, ~, &lt;, &gt;, ^, (, ), [, ], {, }, $, \\, \\u000A, \\u00FF, %</c>.\r\n\t\t/// </para>\r\n\t\t[ImplementsFunction(\"escapeshellcmd\")]\r\n\t\tpublic static string EscapeShellCmd(string command)\r\n\t\t{\r\n\t\t\treturn Execution.EscapeCommand(command);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region exec\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to execute.</param>\r\n\t\t/// <returns>The last line of the output.</returns>\r\n\t\t[ImplementsFunction(\"exec\")]\r\n\t\tpublic static string Exec(string command)\r\n\t\t{\r\n\t\t\tstring result;\r\n\r\n\t\t\tExecution.ShellExec(command, Execution.OutputHandling.ArrayOfLines, null, out result);\r\n\t\t\treturn Core.Convert.Quote(result, ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to execute.</param>\r\n\t\t/// <param name=\"output\">An array where to add items of output. One item per each line of the output.</param>\r\n\t\t/// <returns>The last line of the output.</returns>\r\n\t\t[ImplementsFunction(\"exec\")]\r\n\t\tpublic static string Exec(string command, ref PhpArray output)\r\n\t\t{\r\n\t\t\tint exit_code;\r\n\t\t\treturn Exec(command, ref output, out exit_code);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to execute.</param>\r\n\t\t/// <param name=\"output\">An array where to add items of output. One item per each line of the output.</param>\r\n\t\t/// <param name=\"exitCode\">Exit code of the process.</param>\r\n\t\t/// <returns>The last line of the output.</returns>\r\n\t\t[ImplementsFunction(\"exec\")]\r\n\t\tpublic static string Exec(string command, ref PhpArray output, out int exitCode)\r\n\t\t{\r\n\t\t\t// creates a new array if user specified variable not containing one:\r\n\t\t\tif (output == null) output = new PhpArray();\r\n\r\n\t\t\tstring result;\r\n\t\t\texitCode = Execution.ShellExec(command, Execution.OutputHandling.ArrayOfLines, output, out result);\r\n\r\n\t\t\treturn Core.Convert.Quote(result, ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region pasthru\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a command and writes raw output to the output sink set on the current script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command.</param>\r\n\t\t[ImplementsFunction(\"passthru\")]\r\n\t\tpublic static void PassThru(string command)\r\n\t\t{\r\n\t\t\tstring dummy;\r\n\t\t\tExecution.ShellExec(command, Execution.OutputHandling.RedirectToScriptOutput, null, out dummy);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a command and writes raw output to the output sink set on the current script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command.</param>\r\n\t\t/// <param name=\"exitCode\">An exit code of the process.</param>\r\n\t\t[ImplementsFunction(\"passthru\")]\r\n\t\tpublic static void PassThru(string command, out int exitCode)\r\n\t\t{\r\n\t\t\tstring dummy;\r\n\t\t\texitCode = Execution.ShellExec(command, Execution.OutputHandling.RedirectToScriptOutput, null, out dummy);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region system\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a command and writes output line by line to the output sink set on the current script context.\r\n\t\t/// Flushes output after each written line.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command.</param>\r\n\t\t/// <returns>\r\n\t\t/// Either the last line of the output or a <B>null</B> reference if the command fails (returns non-zero exit code).\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"system\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string System(string command)\r\n\t\t{\r\n\t\t\tint exit_code;\r\n\t\t\treturn System(command, out exit_code);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a command and writes output line by line to the output sink set on the current script context.\r\n\t\t/// Flushes output after each written line.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command.</param>\r\n\t\t/// <param name=\"exitCode\">An exit code of the process.</param>\r\n\t\t/// <returns>\r\n\t\t/// Either the last line of the output or a <B>null</B> reference if the command fails (returns non-zero exit code).\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"system\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string System(string command, out int exitCode)\r\n\t\t{\r\n\t\t\tstring result;\r\n\t\t\texitCode = Execution.ShellExec(command, Execution.OutputHandling.FlushLinesToScriptOutput, null, out result);\r\n\t\t\treturn (exitCode == 0) ? result : null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region shell_exec\r\n\r\n\t\t[ImplementsFunction(\"shell_exec\")]\r\n\t\tpublic static string ShellExec(string command)\r\n\t\t{\r\n\t\t\tstring result;\r\n\t\t\tExecution.ShellExec(command, Execution.OutputHandling.String, null, out result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region getopt\r\n\r\n        [ImplementsFunction(\"getopt\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray GetOptions(string options)\r\n        {\r\n            return GetOptions(options, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets options from the command line argument list.\r\n        /// </summary>\r\n        /// <param name=\"options\">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. </param>\r\n        /// <param name=\"longopts\">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. </param>\r\n        /// <returns>This function will return an array of option / argument pairs or FALSE  on failure. </returns>\r\n        [ImplementsFunction(\"getopt\")]\r\n        [return:CastToFalse]\r\n        public static PhpArray GetOptions(string options, PhpArray longopts)\r\n        {\r\n            var args = Environment.GetCommandLineArgs();\r\n\r\n            PhpArray result = new PhpArray();\r\n\r\n            // process single char options\r\n            if (options != null)\r\n                for (int i = 0; i < options.Length; ++i )\r\n                {\r\n                    char opt = options[i];\r\n                    if (!char.IsLetterOrDigit(opt))\r\n                        break;\r\n                    \r\n                    int ncolons = 0;\r\n                    if (i+1<options.Length && options[i+1] == ':'){++ncolons;++i;}    // require value\r\n                    if (i+1<options.Length && options[i+1] == ':'){++ncolons;++i;}    // optional value\r\n\r\n                    object value = ParseOption(opt.ToString(), false, ncolons == 1, ncolons == 2, args);\r\n                    if (value != null)\r\n                        result.Add(opt.ToString(), value);\r\n                }\r\n\r\n            // process long options\r\n            if (longopts != null)\r\n                foreach (var opt in longopts)\r\n                {\r\n                    string str = PhpVariable.AsString(opt.Value);\r\n                    if (str == null) continue;\r\n\r\n                    int ncolons = 0;\r\n                    if (str.EndsWith(\":\")) ncolons = (str.EndsWith(\"::\")) ? 2 : 1;\r\n                    str = str.Substring(0, str.Length - ncolons);// remove colons\r\n\r\n                    object value = ParseOption(str, true, ncolons == 1, ncolons == 2, args);\r\n                    if (value != null)\r\n                        result.Add(str, value);\r\n                }\r\n\r\n            return result;\r\n        }\r\n\r\n        private static object ParseOption(string option, bool longOpt, bool valueRequired, bool valueOptional, string[] args)\r\n        {\r\n            string prefix = (longOpt ? \"--\" : \"-\") + option;\r\n            bool noValue = (!valueOptional && !valueRequired);\r\n\r\n            // find matching arg\r\n            for (int a = 1; a < args.Length; ++a)\r\n            {\r\n                string arg = args[a];\r\n                if (arg.StartsWith(prefix))\r\n                {\r\n                    if (noValue)\r\n                    {\r\n                        if (arg.Length == prefix.Length) return false;   // OK, no value\r\n                        if (longOpt) continue; // try another arg\r\n                        return null;    // invalid arg\r\n                    }\r\n\r\n                    // value is optional or required\r\n                    // try value after the prefix\r\n                    string value = arg.Substring(prefix.Length);\r\n\r\n                    if (value.Length > 0)\r\n                    {\r\n                        bool eq = (value[0] == '=');    // '=' follows\r\n                        if (longOpt && !eq)continue;    // long options can have value only after =\r\n                        if (eq) value = value.Substring(1); // remove the '=' char\r\n                        return value;   // value resolved (optional or required)\r\n                    }\r\n\r\n                    if (valueOptional) return false;\r\n\r\n                    // value required\r\n                    if (a + 1 >= args.Length) return null;  // missing value\r\n                    return args[a + 1];\r\n                }\r\n            }\r\n\r\n            // not found\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Streams.Sockets.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Jan Benda.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt,\r\n which can be found in the root of the Phalanger distribution. By using this software\r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n\r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/*\r\n TODO:\r\n - implement all functions\r\n - Added (PHP 5.1.0):\r\n   stream_socket_enable_crypto()\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Collections;\r\nusing System.Threading;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Gives access to various network-based stream properties.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class StreamSocket\r\n\t{\r\n\t\t#region Enums\r\n\r\n\t\t/// <summary>\r\n\t\t/// Options used for <see cref=\"StreamSocket.Connect\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic enum SocketOptions\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default option.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"STREAM_CLIENT_CONNECT\")]\r\n\t\t\tNone = 0,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Client socket opened with <c>stream_socket_client</c> should remain persistent\r\n\t\t\t/// between page loads.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"STREAM_CLIENT_PERSISTENT\")]\r\n\t\t\tPersistent = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Open client socket asynchronously.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"STREAM_CLIENT_ASYNC_CONNECT\")]\r\n\t\t\tAsynchronous = 2\r\n\t\t}\r\n\r\n\t\tpublic enum _AddressFamily\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"STREAM_PF_INET\")]\r\n\t\t\tInterNetwork = AddressFamily.InterNetwork,\r\n\t\t\t[ImplementsConstant(\"STREAM_PF_INET6\")]\r\n\t\t\tInterNetworkV6 = AddressFamily.InterNetworkV6,\r\n\t\t\t[ImplementsConstant(\"STREAM_PF_UNIX\")]\r\n\t\t\tUnix = AddressFamily.Unix\r\n\t\t}\r\n\r\n\t\tpublic enum _SocketType\r\n\t\t{\r\n\t\t\tUnknown = SocketType.Unknown,\r\n\t\t\t[ImplementsConstant(\"STREAM_SOCK_STREAM\")]\r\n\t\t\tStream = SocketType.Stream,\r\n\t\t\t[ImplementsConstant(\"STREAM_SOCK_DGRAM\")]\r\n\t\t\tDgram = SocketType.Dgram,\r\n\t\t\t[ImplementsConstant(\"STREAM_SOCK_RAW\")]\r\n\t\t\tRaw = SocketType.Raw,\r\n\t\t\t[ImplementsConstant(\"STREAM_SOCK_RDM\")]\r\n\t\t\tRdm = SocketType.Rdm,\r\n\t\t\t[ImplementsConstant(\"STREAM_SOCK_SEQPACKET\")]\r\n\t\t\tSeqpacket = SocketType.Seqpacket,\r\n\t\t}\r\n\r\n\t\tpublic enum _ProtocolType\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"STREAM_IPPROTO_IP\")]\r\n\t\t\tIP = ProtocolType.IP,\r\n\t\t\t[ImplementsConstant(\"STREAM_IPPROTO_ICMP\")]\r\n\t\t\tIcmp = ProtocolType.Icmp,\r\n\t\t\t[ImplementsConstant(\"STREAM_IPPROTO_TCP\")]\r\n\t\t\tTcp = ProtocolType.Tcp,\r\n\t\t\t[ImplementsConstant(\"STREAM_IPPROTO_UDP\")]\r\n\t\t\tUdp = ProtocolType.Udp,\r\n\t\t\t[ImplementsConstant(\"STREAM_IPPROTO_RAW\")]\r\n\t\t\tRaw = ProtocolType.Raw\r\n\t\t}\r\n\r\n\t\tpublic enum SendReceiveOptions\r\n\t\t{\r\n\t\t\tNone = 0,\r\n\t\t\t[ImplementsConstant(\"STREAM_OOB\")]\r\n\t\t\tOutOfBand = 1,\r\n\t\t\t[ImplementsConstant(\"STREAM_PEEK\")]\r\n\t\t\tPeek = 2\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_get_transports, stream_socket_get_name\r\n\r\n\t\t/// <summary>Retrieve list of registered socket transports</summary>\r\n        [ImplementsFunction(\"stream_get_transports\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray GetTransports()\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieve the name of the local or remote sockets.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"stream_socket_get_name\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static string SocketGetName(PhpResource handle, bool wantPeer)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_client\r\n\r\n\t\t//private static void SplitSocketAddressPort(ref string socket, out int port)\r\n\t\t//{\r\n\t\t//\tport = 0;\r\n\t\t//\tString[] arr = socket.Split(new[] {':'}, 2, StringSplitOptions.RemoveEmptyEntries);\r\n\t\t//\tif (arr.Length == 2)\r\n\t\t//\t{\r\n\t\t//\t\tsocket = arr[0];\r\n\t\t//\t\tport = int.Parse(arr[1]);\r\n\t\t//\t}\r\n\t\t//}\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket)\r\n\t\t{\r\n\t\t\tint errno;\r\n\t\t\tstring errstr;\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket, out int errno)\r\n\t\t{\r\n\t\t\tstring errstr;\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr,\r\n\t\t  double timeout)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, timeout, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr,\r\n\t\t  double timeout, SocketOptions flags)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, timeout, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_client\")]\r\n\t\tpublic static PhpResource ConnectClient(string remoteSocket, out int errno, out string errstr,\r\n\t\t  double timeout, SocketOptions flags, PhpResource context)\r\n\t\t{\r\n\t\t\tStreamContext sc = StreamContext.GetValid(context);\r\n\t\t\tif (sc == null)\r\n\t\t\t{\r\n\t\t\t\terrno = -1;\r\n\t\t\t\terrstr = null;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref remoteSocket, out port);\r\n\t\t\treturn Connect(remoteSocket, port, out errno, out errstr, timeout, flags, sc);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_server\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket)\r\n\t\t{\r\n\t\t\tint errno;\r\n\t\t\tstring errstr;\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket, out int errno)\r\n\t\t{\r\n\t\t\tstring errstr;\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket, out int errno, out string errstr)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, Double.NaN, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket, out int errno, out string errstr,\r\n\t\t  double timeout)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, timeout, SocketOptions.None, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket, out int errno, out string errstr,\r\n\t\t  double timeout, SocketOptions flags)\r\n\t\t{\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, timeout, flags, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open client socket.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_socket_server\")]\r\n\t\tpublic static PhpResource ConnectServer(string localSocket, out int errno, out string errstr,\r\n\t\t  double timeout, SocketOptions flags, PhpResource context)\r\n\t\t{\r\n\t\t\tStreamContext sc = StreamContext.GetValid(context);\r\n\t\t\tif (sc == null)\r\n\t\t\t{\r\n\t\t\t\terrno = -1;\r\n\t\t\t\terrstr = null;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tint port = 0;\r\n\t\t\t//SplitSocketAddressPort(ref localSocket, out port);\r\n\t\t\treturn Connect(localSocket, port, out errno, out errstr, timeout, flags, sc);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_accept\r\n\r\n\t\t/// <summary>\r\n\t\t/// Accepts a connection on a server socket.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"stream_socket_accept\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool Accept(PhpResource serverSocket)\r\n\t\t{\r\n\t\t\tstring peerName;\r\n\t\t\treturn Accept(serverSocket, Configuration.Local.FileSystem.DefaultSocketTimeout, out peerName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Accepts a connection on a server socket.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"stream_socket_accept\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool Accept(PhpResource serverSocket, int timeout)\r\n\t\t{\r\n\t\t\tstring peerName;\r\n\t\t\treturn Accept(serverSocket, timeout, out peerName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Accepts a connection on a server socket.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"stream_socket_accept\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static bool Accept(PhpResource serverSocket, int timeout, out string peerName)\r\n\t\t{\r\n\t\t\tpeerName = \"\";\r\n\r\n\t\t\tSocketStream stream = SocketStream.GetValid(serverSocket);\r\n\t\t\tif (stream == null) return false;\r\n\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_recvfrom\r\n\r\n        [ImplementsFunction(\"stream_socket_recvfrom\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static string ReceiveFrom(PhpResource socket, int length)\r\n\t\t{\r\n\t\t\tstring address;\r\n\t\t\treturn ReceiveFrom(socket, length, SendReceiveOptions.None, out address);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"stream_socket_recvfrom\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static string ReceiveFrom(PhpResource socket, int length, SendReceiveOptions flags)\r\n\t\t{\r\n\t\t\tstring address;\r\n\t\t\treturn ReceiveFrom(socket, length, flags, out address);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"stream_socket_recvfrom\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static string ReceiveFrom(PhpResource socket, int length, SendReceiveOptions flags,\r\n\t\t  out string address)\r\n\t\t{\r\n\t\t\taddress = null;\r\n\r\n\t\t\tSocketStream stream = SocketStream.GetValid(socket);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_sendto\r\n\r\n        [ImplementsFunction(\"stream_socket_sendto\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int SendTo(PhpResource socket, string data)\r\n\t\t{\r\n\t\t\treturn SendTo(socket, data, SendReceiveOptions.None, null);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"stream_socket_sendto\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int SendTo(PhpResource socket, string data, SendReceiveOptions flags)\r\n\t\t{\r\n\t\t\treturn SendTo(socket, data, flags, null);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"stream_socket_sendto\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static int SendTo(PhpResource socket, string data, SendReceiveOptions flags,\r\n\t\t  string address)\r\n\t\t{\r\n\t\t\tSocketStream stream = SocketStream.GetValid(socket);\r\n\t\t\tif (stream == null) return -1;\r\n\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_socket_pair\r\n\r\n        //[ImplementsFunction(\"stream_socket_pair\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray CreatePair(ProtocolFamily protocolFamily, SocketType type, ProtocolType protocol)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Connect\r\n\r\n\t\t/// <summary>\r\n\t\t/// Opens a new SocketStream\r\n\t\t/// </summary>\r\n\t\tinternal static SocketStream Connect(string remoteSocket, int port, out int errno, out string errstr,\r\n\t\t  double timeout, SocketOptions flags, StreamContext/*!*/ context)\r\n\t\t{\r\n\t\t\terrno = 0;\r\n\t\t\terrstr = null;\r\n\r\n\t\t\tif (remoteSocket == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"remoteSocket\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: extract schema (tcp://, udp://) and port from remoteSocket\r\n\t\t\t// Uri uri = Uri.TryCreate(remoteSocket);\r\n\t\t\tProtocolType protocol = ProtocolType.Tcp;\r\n\t\t\tif (remoteSocket.Contains(\"://\"))\r\n\t\t\t{\r\n\t\t\t\tString[] separator = { \"://\" };\r\n\t\t\t\tString[] socketParts = remoteSocket.Split(separator, 2, StringSplitOptions.None);\r\n\t\t\t\tswitch (socketParts[0])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"udp\":\r\n\t\t\t\t\t\tprotocol = ProtocolType.Udp;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"tcp\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tprotocol = ProtocolType.Tcp;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tremoteSocket = socketParts[1];\r\n\t\t\t}\r\n\r\n\t\t\tif (remoteSocket.Contains(\":\"))\r\n\t\t\t{\r\n\t\t\t\tChar[] separator = { ':' };\r\n\t\t\t\tString[] socketParts = remoteSocket.Split(separator, 2, StringSplitOptions.None);\r\n\t\t\t\tremoteSocket = socketParts[0];\r\n\r\n\t\t\t\tint result = 0;\r\n\t\t\t\tif (socketParts[1] != \"\" && int.TryParse(socketParts[1], out result) &&\r\n\t\t\t\t\t(0 < result && result < 65536))\r\n\t\t\t\t{\r\n\t\t\t\t\tport = result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (Double.IsNaN(timeout))\r\n\t\t\t\ttimeout = Configuration.Local.FileSystem.DefaultSocketTimeout;\r\n\r\n\t\t\t// TODO:\r\n\t\t\tif (flags != SocketOptions.None && flags != SocketOptions.Asynchronous)\r\n\t\t\t\tPhpException.ArgumentValueNotSupported(\"flags\", (int)flags);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n                // workitem 299181; for remoteSocket as IPv4 address it results in IPv6 address\r\n                //IPAddress address = System.Net.Dns.GetHostEntry(remoteSocket).AddressList[0];\r\n\r\n                IPAddress address;\r\n                if (!IPAddress.TryParse(remoteSocket, out address)) // if remoteSocket is not a valid IP address then lookup the DNS\r\n                    address = System.Net.Dns.GetHostEntry(remoteSocket).AddressList[0];\r\n\r\n\t\t\t\tSocket socket = new Socket(address.AddressFamily, SocketType.Stream, protocol);\r\n\r\n\t\t\t\tIAsyncResult res = socket.BeginConnect(\r\n\t\t\t\t  new IPEndPoint(address, port),\r\n\t\t\t\t  new AsyncCallback(StreamSocket.ConnectResultCallback),\r\n\t\t\t\t  socket);\r\n\r\n\t\t\t\tint msec = 0;\r\n\t\t\t\twhile (!res.IsCompleted)\r\n\t\t\t\t{\r\n\t\t\t\t\tThread.Sleep(100);\r\n\t\t\t\t\tmsec += 100;\r\n\t\t\t\t\tif (msec / 1000.0 > timeout)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"socket_open_timeout\",\r\n\t\t\t\t\t\t  FileSystemUtils.StripPassword(remoteSocket)));\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsocket.EndConnect(res);\r\n\r\n\t\t\t\t//        socket.Connect(new IPEndPoint(address, port));\r\n\t\t\t\treturn new SocketStream(socket, remoteSocket, context, (flags & SocketOptions.Asynchronous) == SocketOptions.Asynchronous);\r\n\t\t\t}\r\n\t\t\tcatch (SocketException e)\r\n\t\t\t{\r\n\t\t\t\terrno = e.ErrorCode;\r\n\t\t\t\terrstr = e.Message;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\terrno = -1;\r\n\t\t\t\terrstr = e.Message;\r\n\t\t\t}\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"socket_open_error\",\r\n\t\t\t  FileSystemUtils.StripPassword(remoteSocket), errstr));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprivate static void ConnectResultCallback(IAsyncResult res)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Streams.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda and Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/* \r\n TODO:\r\n  - Added offset parameter to the stream_copy_to_stream() function. (PHP 5.1.0)\r\n  - Changed stream_filter_(ap|pre)pend() to return resource. (Sara) \r\n  - Fixed a bug where stream_get_meta_data() did not return the \"uri\" element for files opened with tmpname(). (Derick) \r\n  - Fixed crash inside stream_get_line() when length parameter equals 0. (Ilia) \r\n  - Added (PHP 5.1.0):\r\n      stream_context_get_default() (Wez) \r\n      stream_wrapper_unregister() (Sara) \r\n      stream_wrapper_restore() (Sara) \r\n      stream_filter_remove() (Sara) \r\n  - Added proxy support to ftp wrapper via http. (Sara) \r\n  - Added MDTM support to ftp_url_stat. (Sara) \r\n  - Added zlib stream filter support. (Sara) \r\n  - Added bz2 stream filter support. (Sara) \r\n  - Added bindto socket context option. (PHP 5.1.0)\r\n  - Added HTTP/1.1 and chunked encoding support to http:// wrapper. (PHP 5.1.0)\r\n  \r\n NOTES:\r\n  PhpStream is derived from PhpResource,\r\n  it contains a Stream descendant, a StreamContext (may be empty)\r\n  and an ordered list of PhpFilters. PhpStream may be cast to\r\n  a regular stream (using its RawStream property).\r\n\r\n  PhpStream is created by a StreamWrapper on a call to fopen().\r\n  Wrappers are stateless: they provide an instance of PhpStream\r\n  on fopen() and an instance of DirectoryListing on opendir().\r\n  \r\n  PHP Stream functions are implemented as static methods of corresponding\r\n  classes - wrappers are registered by StreamWrapper and so on.\r\n  \r\n  User-defined wrappers are stored in the ScriptContext.\r\n  So are the user-defined filters. And finally a working directory too.\r\n  \r\n  EX: Notification callback: void my_notifier \r\n    ( int notification_code, int severity, string message, \r\n    int message_code, int bytes_transferred, int bytes_max)\r\n  It is a parameter of StreamContext.\r\n\r\n*/\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Net;\r\n//using System.Net.Sockets;\r\nusing System.Collections;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Threading;\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region Enums\r\n\r\n\t/// <summary>\r\n\t/// The \"whence\" options used in PhpStream.Seek().\r\n\t/// </summary>\r\n\tpublic enum SeekOptions\r\n\t{\r\n\t\t/// <summary>Seek from the beginning of the file.</summary>\r\n\t\t[ImplementsConstant(\"SEEK_SET\")]\r\n\t\tSet = SeekOrigin.Begin,   // 0 (OK)\r\n\t\t/// <summary>Seek from the current position.</summary>\r\n\t\t[ImplementsConstant(\"SEEK_CUR\")]\r\n\t\tCurrent = SeekOrigin.Current, // 1 (OK)\r\n\t\t/// <summary>Seek from the end of the file.</summary>\r\n\t\t[ImplementsConstant(\"SEEK_END\")]\r\n\t\tEnd = SeekOrigin.End      // 2 (OK)\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Value used as an argument to <c>flock()</c> calls.\r\n\t/// Passed to streams using the <see cref=\"PhpStream.SetParameter\"/>\r\n\t/// with <c>option</c> set to <see cref=\"StreamParameterOptions.Locking\"/>.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Note that not all of these are flags. Only the <see cref=\"StreamLockOptions.NoBlocking\"/> \r\n\t/// may be added to one of the first three values.\r\n\t/// </remarks>\r\n\t[Flags]\r\n\tpublic enum StreamLockOptions\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// To acquire a shared lock (reader), set operation to LOCK_SH.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"LOCK_SH\")]\r\n\t\tShared = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// To acquire an exclusive lock (writer), set operation to LOCK_EX.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"LOCK_EX\")]\r\n\t\tExclusive = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// To release a lock (shared or exclusive), set operation to LOCK_UN.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"LOCK_UN\")]\r\n\t\tUnlock = 3,\r\n\r\n\t\t/// <summary>\r\n\t\t/// If you don't want flock() to block while locking, add LOCK_NB to operation.\r\n\t\t/// </summary> \r\n\t\t[ImplementsConstant(\"LOCK_NB\")]\r\n\t\tNoBlocking = 4\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// ImplementsConstant enumeration for various PHP stream-related constants.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum PhpStreamConstants\r\n\t{\r\n\t\t/// <summary>Empty option (default)</summary>\r\n\t\tEmpty = 0,\r\n\t\t/// <summary>If path is relative, Wrapper will search for the resource using the include_path (1).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_USE_PATH\")]\r\n\t\tUseIncludePath = StreamOptions.UseIncludePath,\r\n\t\t/// <summary>When this flag is set, only the file:// wrapper is considered. (2)</summary>\r\n\t\t[ImplementsConstant(\"STREAM_IGNORE_URL\")]\r\n\t\tIgnoreUrl = StreamOptions.IgnoreUrl,\r\n\t\t/// <summary>Apply the <c>safe_mode</c> permissions check when opening a file (4).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_ENFORCE_SAFE_MODE\")]\r\n\t\tEnforceSafeMode = StreamOptions.EnforceSafeMode,\r\n\t\t/// <summary>If this flag is set, the Wrapper is responsible for raising errors using \r\n\t\t/// trigger_error() during opening of the stream. If this flag is not set, she should not raise any errors (8).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_REPORT_ERRORS\")]\r\n\t\tReportErrors = StreamOptions.ReportErrors,\r\n\t\t/// <summary>If you don't need to write to the stream, but really need to \r\n\t\t/// be able to seek, use this flag in your options (16).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_MUST_SEEK\")]\r\n\t\tMustSeek = StreamOptions.MustSeek,\r\n\r\n\t\t/// <summary>Stat the symbolic link itself instead of the linked file (1).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_URL_STAT_LINK\")]\r\n\t\tStatLink = StreamStatOptions.Link,\r\n\t\t/// <summary>Do not complain if the file does not exist (2).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_URL_STAT_QUIET\")]\r\n\t\tStatQuiet = StreamStatOptions.Quiet,\r\n\r\n\t\t/// <summary>Create the whole path leading to the specified directory if necessary (1).</summary>\r\n\t\t[ImplementsConstant(\"STREAM_MKDIR_RECURSIVE\")]\r\n\t\tMakeDirectoryRecursive = StreamMakeDirectoryOptions.Recursive\r\n\t}\r\n\r\n\tpublic enum StreamEncryption\r\n\t{\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv2_CLIENT\")]\r\n\t\tClientSSL2,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv3_CLIENT\")]\r\n\t\tClientSSL3,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv23_CLIENT\")]\r\n\t\tClientSSL23,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_TLS_CLIENT\")]\r\n\t\tClientTSL,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv2_SERVER\")]\r\n\t\tServerSSL2,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv3_SERVER\")]\r\n\t\tServerSSL3,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_SSLv23_SERVER\")]\r\n\t\tServerSSL23,\r\n\t\t[ImplementsConstant(\"STREAM_CRYPTO_METHOD_TLS_SERVER\")]\r\n\t\tServerTSL\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Steam Filter functions\r\n\r\n\t#region Options and status\r\n\r\n\t/// <summary>\r\n\t/// The status indicators returned by filter's main method.\r\n\t/// </summary>\r\n\tpublic enum FilterStatus\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Error in data stream (1).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PSFS_ERR_FATAL\")]\r\n\t\tFatalError,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Filter needs more data; stop processing chain until more is available (2).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PSFS_FEED_ME\")]\r\n\t\tMoreData,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Filter generated output buckets; pass them on to next in chain (3).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"PSFS_PASS_ON\")]\r\n\t\tOK\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Indicates whether the filter is to be attached to the\r\n\t/// input/ouput filter-chain or both.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum FilterChains\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Insert the filter to the read filter chain of the stream (1).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"STREAM_FILTER_READ\")]\r\n\t\tRead = FilterChainOptions.Read,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Insert the filter to the write filter chain of the stream (2).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"STREAM_FILTER_WRITE\")]\r\n\t\tWrite = FilterChainOptions.Write,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Insert the filter to both the filter chains of the stream (3).\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"STREAM_FILTER_ALL\")]\r\n\t\tReadWrite = Read | Write\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Gives access to the stream filter chains.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpFilters\r\n\t{\r\n\t\t#region stream_filter_append, stream_filter_prepend\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Append\"]/*'/>\r\n\t\t[ImplementsFunction(\"stream_filter_append\")]\r\n        public static bool Append(PhpResource stream, string filter)\r\n        {\r\n            return Append(stream, filter, (int)FilterChainOptions.ReadWrite, null);\r\n        }\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Append\"]/*'/>\r\n\t\t/// <param name=\"read_write\">Combination of the <see cref=\"FilterChainOptions\"/> flags.</param>\r\n\t\t[ImplementsFunction(\"stream_filter_append\")]\r\n\t\tpublic static bool Append(PhpResource stream, string filter, int read_write)\r\n\t\t{\r\n\t\t\treturn Append(stream, filter, read_write, null);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Append\"]/*'/>\r\n\t\t/// <param name=\"read_write\">Combination of the <see cref=\"FilterChainOptions\"/> flags.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters for a user filter.</param>\r\n\t\t[ImplementsFunction(\"stream_filter_append\")]\r\n\t\tpublic static bool Append(PhpResource stream, string filter, int read_write, object parameters)\r\n\t\t{\r\n\t\t\tPhpStream s = PhpStream.GetValid(stream);\r\n\t\t\tif (s == null) return false;\r\n\r\n\t\t\tFilterChainOptions where = (FilterChainOptions)read_write & FilterChainOptions.ReadWrite;\r\n\t\t\treturn PhpFilter.AddToStream(s, filter, where | FilterChainOptions.Tail, parameters);\r\n\t\t}\r\n\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Prepend\"]/*'/>\r\n\t\t[ImplementsFunction(\"stream_filter_prepend\")]\r\n\t\tpublic static bool Prepend(PhpResource stream, string filter)\r\n\t\t{\r\n\t\t\treturn Prepend(stream, filter, (int)FilterChainOptions.ReadWrite, null);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Prepend\"]/*'/>\r\n\t\t/// <param name=\"read_write\">Combination of the <see cref=\"FilterChainOptions\"/> flags.</param>\r\n\t\t[ImplementsFunction(\"stream_filter_prepend\")]\r\n\t\tpublic static bool Prepend(PhpResource stream, string filter, int read_write)\r\n\t\t{\r\n\t\t\treturn Prepend(stream, filter, read_write, null);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Prepend\"]/*'/>\r\n\t\t/// <param name=\"read_write\">Combination of the <see cref=\"FilterChainOptions\"/> flags.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters for a user filter.</param>\r\n\t\t[ImplementsFunction(\"stream_filter_prepend\")]\r\n\t\tpublic static bool Prepend(PhpResource stream, string filter, int read_write, object parameters)\r\n\t\t{\r\n\t\t\tPhpStream s = PhpStream.GetValid(stream);\r\n\t\t\tif (s == null) return false;\r\n\r\n\t\t\tFilterChainOptions where = (FilterChainOptions)read_write & FilterChainOptions.ReadWrite;\r\n\t\t\treturn PhpFilter.AddToStream(s, filter, where | FilterChainOptions.Head, parameters);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region stream_filter_register, stream_get_filters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers a user stream filter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The name of the filter (may contain wildcards).</param>\r\n\t\t/// <param name=\"classname\">The PHP user class (derived from <c>php_user_filter</c>) implementing the filter.</param>\r\n\t\t/// <returns><c>true</c> if the filter was succesfully added, <c>false</c> if the filter of such name already exists.</returns>\r\n\t\t[ImplementsFunction(\"stream_filter_register\")]\r\n\t\tpublic static bool Register(string filter, string classname)\r\n\t\t{\r\n\t\t\t// EX: [stream_filter_register]\r\n\r\n\t\t\treturn PhpFilter.AddUserFilter(filter, classname);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the list of registered filters.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing the names of available filters.</returns>\r\n\t\t[ImplementsFunction(\"stream_get_filters\")]\r\n\t\tpublic static PhpArray GetFilterNames()\r\n\t\t{\r\n\t\t\treturn PhpFilter.GetFilterNames();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#region Stream Filter Implementations\r\n\r\n\t#region String Filters\r\n\t/// <summary>\r\n\t/// Options provided to the constructor of <see cref=\"StringFilter\"/>\r\n\t/// to specify which string conversion to use.\r\n\t/// </summary>\r\n\tpublic enum StringFilterOptions\r\n\t{\r\n\t\t/// <summary>Use the <c>str_rot13</c> function to alter the stream data.</summary>\r\n\t\tRotate13 = 1,\r\n\t\t/// <summary>Use the <c>strtoupper</c> function to alter the stream data.</summary>\r\n\t\tToUpper = 2,\r\n\t\t/// <summary>Use the <c>strtolower</c> function to alter the stream data.</summary>\r\n\t\tToLower = 3,\r\n\t\t/// <summary>Use the <c>strip_tags</c> function with an additional <c>allowable_tags</c>\r\n\t\t/// argument to alter the stream data.</summary>\r\n\t\tStripTags = 4\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Encapsulates built-in \"string.*\" filters. See <see cref=\"StringFilterOptions\"/>\r\n\t/// for the list of possible filter operations.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class StringFilter : PhpFilter\r\n\t{\r\n\t\t/// <summary>Creates a new instance of this filter with additional parameters.</summary>\r\n\t\tpublic StringFilter(StringFilterOptions operation, object parameters)\r\n\t\t\t: base(AlterParameters(operation, parameters))\r\n\t\t{\r\n\t\t\tthis.operation = operation;\r\n\t\t}\r\n\r\n\t\tprivate static object AlterParameters(StringFilterOptions operation, object parameters)\r\n\t\t{\r\n\t\t\tif (operation == StringFilterOptions.StripTags)\r\n\t\t\t{\r\n\t\t\t\t// Convert the given tags to the format expected by strip_tags\r\n\t\t\t\tPhpArray tags = (parameters as PhpArray);\r\n\t\t\t\tif (tags != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\t\t\tforeach (object o in tags)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsb.Append('<');\r\n\t\t\t\t\t\tsb.Append(Core.Convert.ObjectToString(o));\r\n\t\t\t\t\t\tsb.Append('>');\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn sb.ToString();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// The allowable_tags is expected to be a string\r\n\t\t\t\t\treturn Core.Convert.ObjectToString(parameters);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn parameters;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Filter\"]/*'/>\r\n\t\tpublic override object Filter(object input, bool closing)\r\n\t\t{\r\n\t\t\tstring str = PhpStream.AsText(input);\r\n\t\t\tswitch (operation)\r\n\t\t\t{\r\n\t\t\t\tcase StringFilterOptions.Rotate13:\r\n\t\t\t\t\tstr = PhpStrings.Rotate13(str);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase StringFilterOptions.ToUpper:\r\n\t\t\t\t\tstr = str.ToUpper();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase StringFilterOptions.ToLower:\r\n\t\t\t\t\tstr = str.ToLower();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase StringFilterOptions.StripTags:\r\n\t\t\t\t\tstr = PhpStrings.StripTags(str, (string)parameters, ref stripTagsState);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Assert(false);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\t/// <summary>The selected operation of this string-filter.</summary>\r\n\t\tprivate readonly StringFilterOptions operation;\r\n\r\n\t\t/// <summary>The stored state of the last <c>strip_tags</c> function call.</summary>\r\n\t\tprivate int stripTagsState = 0;\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Factory for string stream filters.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class StringFilterFactory : IFilterFactory\r\n\t{\r\n\t\t#region Implemented Filters Access\r\n\t\t/// <summary>\r\n\t\t/// Returns the list of filters defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic string[] GetImplementedFilterNames()\r\n\t\t{\r\n\t\t\treturn new string[]\r\n    {\r\n      \"string.toupper\",\r\n      \"string.tolower\",\r\n      \"string.rot13\",\r\n      \"string.strip-tags\"\r\n    };\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a filter implementation defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">Name of the filter to look for.</param>\r\n\t\t/// <param name=\"instantiate\"><c>true</c> to fill <paramref name=\"instance\"/> with a new instance of that filter.</param>\r\n\t\t/// <param name=\"instance\">Filled with a new instance of an implemented filter if <paramref name=\"instantiate\"/>.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters provided to the filter constructor.</param>\r\n\t\t/// <returns><c>true</c> if a filter with the given name was found.</returns>\r\n\t\tpublic bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters)\r\n\t\t{\r\n\t\t\tinstance = null;\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tcase \"string.toupper\":\r\n\t\t\t\t\tif (instantiate) instance = new StringFilter(StringFilterOptions.ToUpper, parameters);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"string.tolower\":\r\n\t\t\t\t\tif (instantiate) instance = new StringFilter(StringFilterOptions.ToLower, parameters);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"string.rot13\":\r\n\t\t\t\t\tif (instantiate) instance = new StringFilter(StringFilterOptions.Rotate13, parameters);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"string.strip-tags\":\r\n\t\t\t\t\tif (instantiate) instance = new StringFilter(StringFilterOptions.StripTags, parameters);\r\n\t\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Conversion Filters\r\n\t/// <summary>\r\n\t/// Options provided to the constructor of <see cref=\"EncodingFilter\"/>\r\n\t/// or <see cref=\"DecodingFilter\"/> to specify which conversion to use.\r\n\t/// </summary>\r\n\tpublic enum ConversionFilterOptions\r\n\t{\r\n\t\t/// <summary>Use the <c>base-64</c> encoding.</summary>\r\n\t\tBase64 = 1,\r\n\t\t/// <summary>Use the <c>quoted-printable</c> encoding. Only decoding is implemented.</summary>\r\n\t\tQuotedPrintable = 2,\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Encapsulates built-in \"convert.*\" filters performing the decoding\r\n\t/// (string to binary) conversions. See <see cref=\"ConversionFilterOptions\"/>\r\n\t/// for the list of possible filter operations.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class DecodingFilter : PhpFilter\r\n\t{\r\n\t\t/// <summary>Creates a new instance of this filter.</summary>\r\n\t\tpublic DecodingFilter(ConversionFilterOptions operation)\r\n\t\t\t: base(null)\r\n\t\t{\r\n\t\t\tthis.operation = operation;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Filter\"]/*'/>\r\n\t\tpublic override object Filter(object input, bool closing)\r\n\t\t{\r\n\t\t\tstring str = PhpStream.AsText(input);\r\n\t\t\tswitch (operation)\r\n\t\t\t{\r\n\t\t\t\tcase ConversionFilterOptions.Base64:\r\n\t\t\t\t\treturn new PhpBytes(System.Convert.FromBase64String(str));\r\n\t\t\t\t// PHP5 supports this function with additional parameters too.\r\n\t\t\t\tcase ConversionFilterOptions.QuotedPrintable:\r\n\t\t\t\t\treturn PhpStrings.QuotedPrintableDecode(str);\r\n\t\t\t\t// PHP5 supports this function with additional parameters too.\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Assert(false);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\t/// <summary>The selected operation of this conversion filter.</summary>\r\n\t\tprivate readonly ConversionFilterOptions operation;\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Factory for decoding stream filters.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class DecodingFilterFactory : IFilterFactory\r\n\t{\r\n\t\t#region Implemented Filters Access\r\n\t\t/// <summary>\r\n\t\t/// Returns the list of filters defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic string[] GetImplementedFilterNames()\r\n\t\t{\r\n\t\t\treturn new string[]\r\n    {\r\n      \"convert.base64-decode\"\r\n      //          \"convert.quoted-printable-decode\"\r\n    };\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a filter implementation defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">Name of the filter to look for.</param>\r\n\t\t/// <param name=\"instantiate\"><c>true</c> to fill <paramref name=\"instance\"/> with a new instance of that filter.</param>\r\n\t\t/// <param name=\"instance\">Filled with a new instance of an implemented filter if <paramref name=\"instantiate\"/>.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters provided to the filter constructor.</param>\r\n\t\t/// <returns><c>true</c> if a filter with the given name was found.</returns>\r\n\t\tpublic bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters)\r\n\t\t{\r\n\t\t\tinstance = null;\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tcase \"convert.base64-decode\":\r\n\t\t\t\t\tif (instantiate) instance = new DecodingFilter(ConversionFilterOptions.Base64);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"convert.quoted-printable-decode\":\r\n\t\t\t\t\tif (instantiate) instance = new DecodingFilter(ConversionFilterOptions.QuotedPrintable);\r\n\t\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Encapsulates built-in \"convert.*\" filters performing the encoding\r\n\t/// (binary to string) conversions. See <see cref=\"ConversionFilterOptions\"/>\r\n\t/// for the list of possible filter operations.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class EncodingFilter : PhpFilter\r\n\t{\r\n\t\t/// <summary>Creates a new instance of this filter.</summary>\r\n\t\tpublic EncodingFilter(ConversionFilterOptions operation)\r\n\t\t\t: base(null)\r\n\t\t{\r\n\t\t\tthis.operation = operation;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Filter\"]/*'/>\r\n\t\tpublic override object Filter(object input, bool closing)\r\n\t\t{\r\n\t\t\tPhpBytes bin = PhpStream.AsBinary(input);\r\n\t\t\tswitch (operation)\r\n\t\t\t{\r\n\t\t\t\tcase ConversionFilterOptions.Base64:\r\n                    return System.Convert.ToBase64String(bin.ReadonlyData);\r\n\t\t\t\t// EX: PHP5 supports this function with additional parameters.\r\n\t\t\t\tcase ConversionFilterOptions.QuotedPrintable:\r\n\t\t\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\t\t\t// EX: PHP5 supports this function with additional parameters.\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Assert(false);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn bin;\r\n\t\t}\r\n\r\n\t\t/// <summary>The selected operation of this conversion filter.</summary>\r\n\t\tprivate readonly ConversionFilterOptions operation;\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Factory for encoding stream filters.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class EncodingFilterFactory : IFilterFactory\r\n\t{\r\n\t\t#region Implemented Filters Access\r\n\t\t/// <summary>\r\n\t\t/// Returns the list of filters defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic string[] GetImplementedFilterNames()\r\n\t\t{\r\n\t\t\treturn new string[]\r\n    {\r\n      \"convert.base64-encode\"\r\n      // \"convert.quoted-printable-encode\"\r\n    };\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a filter implementation defined by this PhpFilter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">Name of the filter to look for.</param>\r\n\t\t/// <param name=\"instantiate\"><c>true</c> to fill <paramref name=\"instance\"/> with a new instance of that filter.</param>\r\n\t\t/// <param name=\"instance\">Filled with a new instance of an implemented filter if <paramref name=\"instantiate\"/>.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters provided to the filter constructor.</param>\r\n\t\t/// <returns><c>true</c> if a filter with the given name was found.</returns>\r\n\t\tpublic bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters)\r\n\t\t{\r\n\t\t\tinstance = null;\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tcase \"convert.base64-encode\":\r\n\t\t\t\t\tif (instantiate) instance = new EncodingFilter(ConversionFilterOptions.Base64);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t//        case \"convert.quoted-printable-encode\":\r\n\t\t\t\t//          if (instantiate) instance = new EncodingFilter(ConversionFilterOptions.QuotedPrintable);\r\n\t\t\t\t//          return true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#endregion\r\n\r\n\t#endregion\r\n\r\n\t#region Stream Context functions\r\n\r\n\t/// <summary>\r\n\t/// Class containing implementations of PHP functions accessing the <see cref=\"StreamContext\"/>s.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpContexts\r\n\t{\r\n\t\t#region stream_context_create\r\n\r\n\t\t[ImplementsFunction(\"stream_context_create\")]\r\n\t\tpublic static PhpResource CreateContext()\r\n\t\t{\r\n\t\t\treturn CreateContext(null);\r\n\t\t}\r\n\r\n\t\t/// <summary>Create a new stream context.</summary>\r\n\t\t/// <param name=\"data\">The 2-dimensional array in format \"options[wrapper][option]\".</param>\r\n\t\t[ImplementsFunction(\"stream_context_create\")]\r\n\t\tpublic static PhpResource CreateContext(PhpArray data)\r\n\t\t{\r\n\t\t\tif (data == null)\r\n\t\t\t\treturn StreamContext.Default;\r\n\r\n\t\t\t// OK, data lead to a valid stream-context.\r\n\t\t\tif (CheckContextData(data))\r\n\t\t\t\treturn new StreamContext(data);\r\n\r\n\t\t\t// Otherwise..\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_context_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check whether the provided argument is a valid stream-context data array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The data to be stored into context.</param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate static bool CheckContextData(PhpArray data)\r\n\t\t{\r\n\t\t\t// Check if the supplied data are correctly formed.\r\n\t\t\tforeach (object o in data.Values)\r\n\t\t\t{\r\n\t\t\t\tif (!(o is PhpArray))\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t// Invalid resource - not an array of arrays\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the StreamContext from a handle representing either an isolated context or a PhpStream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream_or_context\">The PhpResource of either PhpStream or StreamContext type.</param>\r\n\t\t/// <param name=\"createContext\">If true then a new context will be created at the place of <see cref=\"StreamContext.Default\"/>.</param>\r\n\t\t/// <returns>The respective StreamContext.</returns>\r\n\t\t/// <exception cref=\"PhpException\">If the first argument is neither a stream nor a context.</exception>\r\n\t\tprivate static StreamContext FromResource(PhpResource stream_or_context, bool createContext)\r\n\t\t{\r\n\t\t\tif ((stream_or_context != null) && (stream_or_context.IsValid))\r\n\t\t\t{\r\n\t\t\t\t// Get the context out of the stream\r\n\t\t\t\tPhpStream stream = stream_or_context as PhpStream;\r\n\t\t\t\tif (stream != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(stream.Context != null);\r\n\t\t\t\t\tstream_or_context = stream.Context;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tStreamContext context = stream_or_context as StreamContext;\r\n\t\t\t\tif (context == StreamContext.Default)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!createContext) return null;\r\n\t\t\t\t\tcontext = new StreamContext();\r\n\t\t\t\t}\r\n\t\t\t\treturn context;\r\n\t\t\t}\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"context_expected\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprivate static PhpArray GetContextData(PhpResource stream_or_context)\r\n\t\t{\r\n\t\t\t// Always create a new context if there is the Default one.\r\n\t\t\tStreamContext context = FromResource(stream_or_context, true);\r\n\r\n\t\t\t// Now create the data if this is a \"lazy context\".\r\n\t\t\tif (context != null)\r\n\t\t\t{\r\n\t\t\t\tif (context.Data == null)\r\n\t\t\t\t\tcontext.Data = new PhpArray(0, 4);\r\n\t\t\t\treturn context.Data;\r\n\t\t\t\t// Now it is OK.\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region stream_context_get_options, stream_context_set_option, stream_context_set_params\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieve options for a stream-wrapper or a context itself.\r\n\t\t/// </summary>  \r\n\t\t/// <param name=\"stream_or_context\">The PhpResource of either PhpStream or StreamContext type.</param>\r\n\t\t/// <returns>The contained PhpArray of options.</returns>\r\n\t\t[ImplementsFunction(\"stream_context_get_options\")]\r\n\t\tpublic static PhpArray GetContextOptions(PhpResource stream_or_context)\r\n\t\t{\r\n\t\t\t// Do not create a new context if there is the Default one.\r\n\t\t\tStreamContext context = FromResource(stream_or_context, false);\r\n\t\t\treturn context != null ? context.Data : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets an option for a stream/wrapper/context.\r\n\t\t/// </summary> \r\n\t\t/// <param name=\"stream_or_context\">The PhpResource of either PhpStream or StreamContext type.</param>\r\n\t\t/// <param name=\"wrapper\">The first-level index to the options array.</param>\r\n\t\t/// <param name=\"option\">The second-level index to the options array.</param>\r\n\t\t/// <param name=\"data\">The data to be stored to the options array.</param>\r\n\t\t/// <returns>True on success.</returns>\r\n\t\t[ImplementsFunction(\"stream_context_set_option\")]\r\n\t\tpublic static bool SetContextOption(PhpResource stream_or_context, string wrapper, string option, object data)\r\n\t\t{\r\n\t\t\t// OK, creates the context if Default, so that Data is always a PhpArray.\r\n\t\t\t// Fails only if the first argument is not a stream nor context.\r\n\t\t\tPhpArray context_data = GetContextData(stream_or_context);\r\n\t\t\tif (context_data == null) return false;\r\n\r\n\t\t\tif (context_data.ContainsKey(wrapper))\r\n\t\t\t{\r\n\t\t\t\t// Inserts the option key if necessary.\r\n\t\t\t\t(context_data[wrapper] as PhpArray)[option] = data;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Create the second-level array and fill it with the given data.\r\n\t\t\t\tPhpArray options = new PhpArray(0, 4);\r\n\t\t\t\toptions.Add(option, data);\r\n\t\t\t\tcontext_data.Add(wrapper, options);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set parameters for a stream/wrapper/context.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_context_set_params\")]\r\n\t\tpublic static bool SetContextParameters(PhpResource stream_or_context, PhpArray parameters)\r\n\t\t{\r\n\t\t\t// Create the context if the stream does not have one.\r\n\t\t\tStreamContext context = FromResource(stream_or_context, true);\r\n\r\n\t\t\tif ((context != null) && (context.IsValid))\r\n\t\t\t{\r\n\t\t\t\tcontext.Parameters = parameters;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Stream Wrapper functions\r\n\r\n\t/// <summary>\r\n\t/// Class containing implementations of PHP functions accessing the <see cref=\"StreamWrapper\"/>s.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpWrappers\r\n\t{\r\n\t\t#region stream_wrapper_register, stream_register_wrapper, stream_get_wrappers\r\n\r\n        /// <summary>\r\n        /// Optional flag for <c>stream_wrapper_register</c> function.\r\n        /// </summary>\r\n        public enum StreamWrapperRegisterFlags : int\r\n        {\r\n            Default = 0,\r\n\r\n            [ImplementsConstant(\"STREAM_IS_URL\")]\r\n            IsUrl = 1\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Registers a user-wrapper specified by the name of a defining user-class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context.</param>\r\n        /// <param name=\"protocol\">The schema to be associated with the given wrapper.</param>\r\n        /// <param name=\"classname\">Name of the user class implementing the wrapper functions.</param>\r\n\t\t/// <returns>False in case of failure (ex. schema already occupied).</returns>\r\n        [ImplementsFunction(\"stream_wrapper_register\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool RegisterUserWrapperByName(DTypeDesc caller, string protocol, string classname)\r\n        {\r\n            return RegisterUserWrapperByName(caller, protocol, classname, StreamWrapperRegisterFlags.Default);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers a user-wrapper specified by the name of a defining user-class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context.</param>\r\n\t\t/// <param name=\"protocol\">The schema to be associated with the given wrapper.</param>\r\n        /// <param name=\"classname\">Name of the user class implementing the wrapper functions.</param>\r\n        /// <param name=\"flags\">Should be set to STREAM_IS_URL if protocol is a URL protocol. Default is 0, local stream.</param>\r\n\t\t/// <returns>False in case of failure (ex. schema already occupied).</returns>\r\n\t\t[ImplementsFunction(\"stream_wrapper_register\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool RegisterUserWrapperByName(DTypeDesc caller, string protocol, string classname, StreamWrapperRegisterFlags flags/*=0*/)\r\n\t\t{\r\n\t\t\t// check if the scheme is already registered:\r\n\t\t\tif (string.IsNullOrEmpty(protocol) || StreamWrapper.Exists(protocol))\r\n\t\t\t{\r\n\t\t\t\t// TODO: Warning?\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n            DTypeDesc wrapperClass = ScriptContext.CurrentContext.ResolveType(classname, null, caller, null, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n            if (wrapperClass == null)\r\n                return false;\r\n\r\n\t\t\t// EX: [stream_wrapper_register]: create the user wrapper\r\n            StreamWrapper wrapper = new UserStreamWrapper(ScriptContext.CurrentContext, protocol, wrapperClass, flags == StreamWrapperRegisterFlags.IsUrl);\r\n\t\t\treturn StreamWrapper.RegisterUserWrapper(protocol, wrapper);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers a user-wrapper specified by the name of a defining user-class.\r\n\t\t/// </summary>\r\n        /// <param name=\"caller\">The class context.</param>\r\n        /// <param name=\"protocol\">The schema to be associated with the given wrapper.</param>\r\n\t\t/// <param name=\"userWrapperName\">Name of the user class implementing the wrapper functions.</param>\r\n\t\t/// <returns>False in case of failure (ex. schema already occupied).</returns>\r\n        [ImplementsFunction(\"stream_register_wrapper\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool RegisterUserWrapperByName2(DTypeDesc caller, string protocol, string userWrapperName)\r\n\t\t{\r\n\t\t\treturn RegisterUserWrapperByName(caller, protocol, userWrapperName);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Registers a user-wrapper specified by the name of a defining user-class.\r\n        /// </summary>\r\n        /// <param name=\"caller\">The class context.</param>\r\n        /// <param name=\"protocol\">The schema to be associated with the given wrapper.</param>\r\n        /// <param name=\"userWrapperName\">Name of the user class implementing the wrapper functions.</param>\r\n        /// <param name=\"flags\">Should be set to STREAM_IS_URL if protocol is a URL protocol. Default is 0, local stream.</param>\r\n        /// <returns>False in case of failure (ex. schema already occupied).</returns>\r\n        [ImplementsFunction(\"stream_register_wrapper\", FunctionImplOptions.NeedsClassContext)]\r\n        public static bool RegisterUserWrapperByName2(DTypeDesc caller, string protocol, string userWrapperName, StreamWrapperRegisterFlags flags/*=0*/)\r\n        {\r\n            return RegisterUserWrapperByName(caller, protocol, userWrapperName, flags);\r\n        }\r\n\r\n\r\n\t\t///<summary>Retrieve list of registered streams (only the names)</summary>  \r\n\t\t[ImplementsFunction(\"stream_get_wrappers\")]\r\n\t\tpublic static PhpArray GetWrapperSchemes()\r\n\t\t{\r\n\t\t\tPhpArray ret = new PhpArray(8, 0);\r\n\r\n\t\t\t// First add the internal built-in wrappers.\r\n\t\t\tvar internals = StreamWrapper.GetSystemWrapperSchemes();\r\n\t\t\tforeach (string scheme in internals)\r\n\t\t\t{\r\n\t\t\t\tret.Add(scheme);\r\n\t\t\t}\r\n\r\n\t\t\t// Now add the indexes (schemes) of User wrappers.\r\n\t\t\tforeach (string scheme in StreamWrapper.GetUserWrapperSchemes())\r\n\t\t\t{\r\n\t\t\t\tret.Add(scheme);\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PHP Stream functions\r\n\r\n\t/// <summary>\r\n\t/// A class encapsulating the static implementations of PHP Stream functions.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static class PhpStreams\r\n\t{\r\n\t\t#region stream_copy_to_stream\r\n\r\n        /// <summary>\r\n        /// Copies data from one stream to another.\r\n        /// </summary>\r\n        /// <param name=\"source\">Stream to copy data from. Opened for reading.</param>\r\n        /// <param name=\"dest\">Stream to copy data to. Opened for writing.</param> \r\n\t\t[ImplementsFunction(\"stream_copy_to_stream\")]\r\n\t\tpublic static int Copy(PhpResource source, PhpResource dest)\r\n\t\t{\r\n\t\t\treturn Copy(source, dest, -1, 0);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Copies data from one stream to another.\r\n        /// </summary>\r\n        /// <param name=\"source\">Stream to copy data from. Opened for reading.</param>\r\n        /// <param name=\"dest\">Stream to copy data to. Opened for writing.</param>\r\n        /// <param name=\"maxlength\">The maximum count of bytes to copy (<c>-1</c> to copy entire <paramref name=\"source\"/> stream.</param> \r\n        [ImplementsFunction(\"stream_copy_to_stream\")]\r\n        public static int Copy(PhpResource source, PhpResource dest, int maxlength)\r\n        {\r\n            return Copy(source, dest, maxlength, 0);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copies data from one stream to another.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">Stream to copy data from. Opened for reading.</param>\r\n\t\t/// <param name=\"destination\">Stream to copy data to. Opened for writing.</param>\r\n\t\t/// <param name=\"maxlength\">The maximum count of bytes to copy (<c>-1</c> to copy entire <paramref name=\"source\"/> stream.</param>\r\n        /// <param name=\"offset\">The offset where to start to copy data.</param>\r\n\t\t[ImplementsFunction(\"stream_copy_to_stream\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static int Copy(PhpResource source, PhpResource destination, int maxlength, int offset)\r\n\t\t{\r\n\t\t\tPhpStream from = PhpStream.GetValid(source);\r\n\t\t\tPhpStream to = PhpStream.GetValid(destination);\r\n\t\t\tif (from == null || to == null) return -1;\r\n            if (offset < 0) return -1;\r\n\t\t\tif (maxlength == 0) return 0;\r\n            \r\n\t\t\t// Compatibility (PHP streams.c: \"in the event that the source file is 0 bytes, \r\n\t\t\t// return 1 to indicate success because opening the file to write had already \r\n\t\t\t// created a copy\"\r\n\t\t\tif (from.Eof) return 1;\r\n\r\n            // If we have positive offset, we will skip the data\r\n            if ( offset > 0 ) \r\n            {                \r\n                int haveskipped = 0;\r\n\r\n                while (haveskipped != offset)\r\n                {\r\n                    object data = null;\r\n\r\n                    int toskip = offset - haveskipped;\r\n                    if (toskip > from.GetNextDataLength())\r\n                    {\r\n                        data = from.ReadMaximumData();\r\n                        if (data == null) break;\r\n                    }\r\n                    else\r\n                    {\r\n                        data = from.ReadData(toskip, false);\r\n                        if (data == null) break; // EOF or error.\r\n                        Debug.Assert(PhpStream.GetDataLength(data) <= toskip);\r\n                    }\r\n\r\n                    Debug.Assert(haveskipped <= offset);\r\n                }\r\n            }\r\n\r\n\t\t\t// Copy entire stream.\r\n\t\t\tint haveread = 0, havewritten = 0;\r\n\t\t\twhile (haveread != maxlength)\r\n\t\t\t{\r\n\t\t\t\tobject data = null;\r\n\r\n\t\t\t\t// Is is safe to read a whole block?\r\n\t\t\t\tint toread = maxlength - haveread;\r\n\t\t\t\tif ((maxlength == -1) || (toread > from.GetNextDataLength()))\r\n\t\t\t\t{\r\n\t\t\t\t\tdata = from.ReadMaximumData();\r\n\t\t\t\t\tif (data == null) break; // EOF or error.\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdata = from.ReadData(toread, false);\r\n\t\t\t\t\tif (data == null) break; // EOF or error.\r\n\t\t\t\t\tDebug.Assert(PhpStream.GetDataLength(data) <= toread);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tDebug.Assert((data is string) || (data is PhpBytes));\r\n\t\t\t\thaveread += PhpStream.GetDataLength(data);\r\n\t\t\t\tDebug.Assert((maxlength == -1) || (haveread <= maxlength));\r\n\r\n\t\t\t\tint written = to.WriteData(data);\r\n\t\t\t\tif (written <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Warning already thrown at PhpStream.WriteData.\r\n\t\t\t\t\treturn (havewritten > 0) ? haveread : -1;\r\n\t\t\t\t}\r\n\t\t\t\thavewritten += written;\r\n\t\t\t}\r\n\r\n\t\t\treturn haveread;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region stream_get_line, stream_get_meta_data\r\n\r\n\t\t/// <summary>Gets line from stream resource up to a given delimiter</summary> \r\n\t\t/// <param name=\"handle\">A handle to a stream opened for reading.</param>\r\n\t\t/// <param name=\"ending\">A string containing the end-of-line delimiter.</param>\r\n\t\t/// <param name=\"length\">Maximum length of the return value.</param>\r\n\t\t/// <returns>One line from the stream <b>without</b> the <paramref name=\"ending\"/> string at the end.</returns>\r\n\t\t[ImplementsFunction(\"stream_get_line\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static string ReadLine(PhpResource handle, int length, string ending)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\tif (length <= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:negative\", \"length\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (String.IsNullOrEmpty(ending))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:empty\", \"ending\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// The ending is not included in the returned data.\r\n\t\t\tstring rv = stream.ReadLine(length, ending);\r\n\t\t\tif (rv == null) return null;\r\n\t\t\tif (rv.Length >= ending.Length)\r\n\t\t\t\trv = rv.Substring(rv.Length - ending.Length);\r\n\t\t\treturn rv;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves header/meta data from streams/file pointers\r\n\t\t/// </summary>\r\n        /// <remarks>\r\n        /// The result array contains the following items:\r\n        /// * timed_out (bool) - TRUE if the stream timed out while waiting for data on the last call to fread() or fgets().\r\n        /// * blocked (bool) - TRUE if the stream is in blocking IO mode. See stream_set_blocking().\r\n        /// * 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.\r\n        /// * unread_bytes (int) - the number of bytes currently contained in the PHP's own internal buffer.\r\n        /// * stream_type (string) - a label describing the underlying implementation of the stream.\r\n        /// * 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.\r\n        /// * 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.\r\n        /// * 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.\r\n        /// * mode (string) - the type of access required for this stream (see Table 1 of the fopen() reference)\r\n        /// * seekable (bool) - whether the current stream can be seeked.\r\n        /// * uri (string) - the URI/filename associated with this stream.\r\n        /// </remarks>\r\n\t\t[ImplementsFunction(\"stream_get_meta_data\")]\r\n\t\tpublic static PhpArray GetMetaData(PhpResource resource)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(resource);\r\n            if (stream == null) return null;\r\n\r\n            PhpArray result = new PhpArray(0, 10);\r\n            \r\n            // TODO: timed_out (bool) - TRUE if the stream timed out while waiting for data on the last call to fread() or fgets().\r\n            // TODO: blocked (bool) - TRUE if the stream is in blocking IO mode. See stream_set_blocking().\r\n            result.Add(\"blocked\", true);\r\n            // 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.\r\n            result.Add(\"eof\", stream.Eof);\r\n            // TODO: unread_bytes (int) - the number of bytes currently contained in the PHP's own internal buffer.\r\n            result.Add(\"unread_bytes\", 0);\r\n            // TODO: stream_type (string) - a label describing the underlying implementation of the stream.\r\n            result.Add(\"stream_type\", (stream.Wrapper != null) ? stream.Wrapper.Label : string.Empty);\r\n            // 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.\r\n            result.Add(\"wrapper_type\", (stream.Wrapper != null) ? stream.Wrapper.Scheme : string.Empty);\r\n            // 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.\r\n            if (stream.WrapperSpecificData != null)\r\n                result.Add(\"wrapper_data\", stream.WrapperSpecificData);\r\n            // 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.\r\n            result.Add(\"filters\", GetFiltersName(stream));\r\n            // mode (string) - the type of access required for this stream (see Table 1 of the fopen() reference)\r\n            result.Add(\"mode\", stream.CanRead ? (stream.CanWrite ? \"r+\" : \"r\") : (stream.CanWrite ? \"w\" : string.Empty));\r\n            // seekable (bool) - whether the current stream can be seeked.\r\n            result.Add(\"seekable\", stream.CanSeek);\r\n            // uri (string) - the URI/filename associated with this stream.\r\n            result.Add(\"uri\", stream.OpenedPath);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// filters (array)\r\n        /// - array containing the names of any filters that have been stacked onto this stream.\r\n        /// </summary>\r\n        /// <param name=\"stream\"></param>\r\n        /// <returns></returns>\r\n        private static PhpArray GetFiltersName(PhpStream/*!*/stream)\r\n        {\r\n            PhpArray array = new PhpArray();\r\n\r\n            foreach (PhpFilter f in stream.StreamFilters)\r\n                array.Add(f.FilterName);\r\n\r\n            return array;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region stream_get_contents\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire content of the stream.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_get_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadContents(PhpResource handle)\r\n\t\t{\r\n\t\t\treturn ReadContents(handle, -1, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire content of the stream.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_get_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadContents(PhpResource handle, int maxLength)\r\n\t\t{\r\n\t\t\treturn ReadContents(handle, maxLength, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads entire content of the stream.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"stream_get_contents\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object ReadContents(PhpResource handle, int maxLength, int offset)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(handle, FileAccess.Read);\r\n\t\t\tif (stream == null) return null;\r\n\r\n\t\t\treturn stream.ReadContents(maxLength, offset);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region stream_set_blocking, stream_set_timeout, set_file_buffer, stream_set_write_buffer\r\n\r\n\t\t/// <summary>Set blocking/non-blocking (synchronous/asynchronous I/O operations) mode on a stream.</summary>\r\n\t\t/// <param name=\"resource\">A handle to a stream resource.</param>\r\n\t\t/// <param name=\"mode\"><c>1</c> for blocking, <c>0</c> for non-blocking.</param>\r\n\t\t/// <returns><c>true</c> if the operation is supported and was successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"stream_set_blocking\")]\r\n\t\tpublic static bool SetBlocking(PhpResource resource, int mode)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(resource);\r\n\t\t\tif (stream == null) return false;\r\n\r\n\t\t\tbool block = mode > 0;\r\n\t\t\treturn stream.SetParameter(StreamParameterOptions.BlockingMode, block);\r\n\t\t}\r\n\r\n\t\t/// <summary>Set timeout period on a stream</summary>\r\n\t\t/// <param name=\"resource\">A handle to a stream opened for reading.</param>\r\n\t\t/// <param name=\"seconds\">The number of seconds.</param>\r\n\t\t/// <returns><c>true</c> if the operation is supported and was successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"stream_set_timeout\")]\r\n\t\tpublic static bool SetTimeout(PhpResource resource, int seconds)\r\n\t\t{\r\n\t\t\treturn SetTimeout(resource, seconds, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>Set timeout period on a stream</summary>\r\n\t\t/// <param name=\"resource\">A handle to a stream opened for reading.</param>\r\n\t\t/// <param name=\"seconds\">The number of seconds.</param>\r\n\t\t/// <param name=\"microseconds\">The number of microseconds.</param>\r\n\t\t/// <returns><c>true</c> if the operation is supported and was successful, <c>false</c> otherwise.</returns>\r\n\t\t[ImplementsFunction(\"stream_set_timeout\")]\r\n\t\tpublic static bool SetTimeout(PhpResource resource, int seconds, int microseconds)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(resource);\r\n\t\t\tif (stream == null) return false;\r\n\r\n\t\t\tdouble timeout = seconds + (microseconds / 1000000.0);\r\n\t\t\tif (timeout < 0.0) timeout = 0.0;\r\n\t\t\treturn stream.SetParameter(StreamParameterOptions.ReadTimeout, timeout);\r\n\t\t}\r\n\r\n\t\t/// <summary>Sets file buffering on the given stream.</summary>   \r\n\t\t/// <param name=\"resource\">The stream to set write buffer size to.</param>\r\n\t\t/// <param name=\"buffer\">Number of bytes the output buffer holds before \r\n\t\t/// passing to the underlying stream.</param>\r\n\t\t/// <returns><c>true</c> on success.</returns>\r\n\t\t[ImplementsFunction(\"set_file_buffer\")]\r\n\t\tpublic static bool SetFileBuffer(PhpResource resource, int buffer)\r\n\t\t{\r\n\t\t\treturn SetWriteBuffer(resource, buffer);\r\n\t\t}\r\n\r\n\t\t/// <summary>Sets file buffering on the given stream.</summary>   \r\n\t\t/// <param name=\"resource\">The stream to set write buffer size to.</param>\r\n\t\t/// <param name=\"buffer\">Number of bytes the output buffer holds before \r\n\t\t/// passing to the underlying stream.</param>\r\n\t\t/// <returns><c>true</c> on success.</returns>\r\n\t\t[ImplementsFunction(\"stream_set_write_buffer\")]\r\n\t\tpublic static bool SetWriteBuffer(PhpResource resource, int buffer)\r\n\t\t{\r\n\t\t\tPhpStream stream = PhpStream.GetValid(resource);\r\n\t\t\tif (stream == null) return false;\r\n\r\n\t\t\tif (buffer < 0) buffer = 0;\r\n\t\t\treturn stream.SetParameter(StreamParameterOptions.WriteBufferSize, buffer);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TODO: stream_select\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs the equivalent of the select() system call on the given arrays of streams \r\n\t\t/// with a timeout specified by tv_sec and tv_usec.\r\n\t\t/// </summary> \r\n\t\t[ImplementsFunction(\"stream_select\")]\r\n\t\tpublic static int Select(ref PhpArray read, ref PhpArray write, ref PhpArray except, int tv_sec)\r\n\t\t{\r\n\t\t\treturn Select(ref read, ref write, ref except, tv_sec, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>Runs the equivalent of the select() system call on the given arrays of streams with a timeout specified by tv_sec and tv_usec </summary>   \r\n\t\t[ImplementsFunction(\"stream_select\")]\r\n\t\tpublic static int Select(ref PhpArray read, ref PhpArray write, ref PhpArray except, int tv_sec, int tv_usec)\r\n\t\t{\r\n\t\t\tif ((read == null || read.IsEmpty()) && (write == null || write.IsEmpty()))\r\n\t\t\t\treturn except == null ? 0 : except.Count;\r\n\r\n\t\t\tvar readResult = new PhpArray();\r\n\t\t\tvar writeResult = new PhpArray();\r\n\t\t\tvar i = 0;\r\n\t\t\tvar timer = Stopwatch.StartNew();\r\n\t\t\tvar waitTime = tv_sec*1000 + tv_usec;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tif (read != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treadResult.Clear();\r\n\t\t\t\t\tforeach (var item in read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar stream = item.Value as PhpStream;\r\n\t\t\t\t\t\tif (stream == null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tif (stream.CanReadWithoutLock())\r\n\t\t\t\t\t\t\treadResult.Add(item.Key, item.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (write != null)\r\n\t\t\t\t{\r\n\t\t\t\t\twriteResult.Clear();\r\n\t\t\t\t\tforeach (var item in write)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar stream = item.Value as PhpStream;\r\n\t\t\t\t\t\tif (stream == null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tif (stream.CanWriteWithoutLock())\r\n\t\t\t\t\t\t\twriteResult.Add(item.Key, item.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (readResult.Count > 0 || writeResult.Count > 0 || except.Count > 0)\r\n\t\t\t\t\tbreak;\r\n\t\t\t\ti++;\r\n\t\t\t\tif (timer.ElapsedMilliseconds > waitTime)\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tif (i < 10)\r\n\t\t\t\t\tThread.Yield();\r\n\t\t\t\telse\r\n\t\t\t\t\tThread.Sleep(Math.Min(i, waitTime));\r\n\t\t\t}\r\n\t\t\tread = readResult;\r\n\t\t\twrite = writeResult;\r\n\t\t\treturn read.Count + write.Count + (except == null ? 0 : except.Count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.18444\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Additional parameters not supported.\r\n        /// </summary>\r\n        internal static string additional_parameters_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"additional_parameters_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; should not be empty.\r\n        /// </summary>\r\n        internal static string arg_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; has invalid length.\r\n        /// </summary>\r\n        internal static string arg_invalid_length {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:invalid_length\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{1}&apos; is invalid for argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string arg_invalid_value {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:invalid_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; should not be negative.\r\n        /// </summary>\r\n        internal static string arg_negative {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:negative\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; should be positive.\r\n        /// </summary>\r\n        internal static string arg_negative_or_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:negative_or_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; not an object or class name.\r\n        /// </summary>\r\n        internal static string arg_not_object_or_class_name {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:not_object_or_class_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; should not be null nor empty.\r\n        /// </summary>\r\n        internal static string arg_null_or_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:null_or_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is out of bounds.\r\n        /// </summary>\r\n        internal static string arg_out_of_bounds {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:out_of_bounds\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; should not be zero.\r\n        /// </summary>\r\n        internal static string arg_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"arg:zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be an array.\r\n        /// </summary>\r\n        internal static string argument_not_array {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be an array or a sort flag.\r\n        /// </summary>\r\n        internal static string argument_not_array_or_sort_flag {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_array_or_sort_flag\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; must be an integer indexed array.\r\n        /// </summary>\r\n        internal static string argument_not_integer_indexed_array {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_integer_indexed_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Second argument is not an object or class name.\r\n        /// </summary>\r\n        internal static string argument_not_object_or_class_name {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_object_or_class_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   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..\r\n        /// </summary>\r\n        internal static string aspnet_sessionhandler_id_reset {\r\n            get {\r\n                return ResourceManager.GetString(\"aspnet_sessionhandler_id_reset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: &apos;*&apos; ignored.\r\n        /// </summary>\r\n        internal static string asterisk_ignored {\r\n            get {\r\n                return ResourceManager.GetString(\"asterisk_ignored\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempted {0} variable override.\r\n        /// </summary>\r\n        internal static string attempted_variable_override {\r\n            get {\r\n                return ResourceManager.GetString(\"attempted_variable_override\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Collating element representing more than one character cannot be the first endpoint of range.\r\n        /// </summary>\r\n        internal static string bad_collating_el_at_first_endpoint_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"bad_collating_el_at_first_endpoint_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: binary data length has overflown integer size.\r\n        /// </summary>\r\n        internal static string binary_data_overflown {\r\n            get {\r\n                return ResourceManager.GetString(\"binary_data_overflown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to .\r\n        /// </summary>\r\n        internal static string both_must_be_arrays_or_nonarrays {\r\n            get {\r\n                return ResourceManager.GetString(\"both_must_be_arrays_or_nonarrays\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This function is deprecated, use the call_user_func variety with the array(&amp;$obj, &quot;method&quot;) syntax instead.\r\n        /// </summary>\r\n        internal static string call_user_method_deprecated {\r\n            get {\r\n                return ResourceManager.GetString(\"call_user_method_deprecated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot open connection: {0}.\r\n        /// </summary>\r\n        internal static string cannot_open_connection {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_open_connection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot retrieve schema information.\r\n        /// </summary>\r\n        internal static string cannot_retrieve_schema {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_retrieve_schema\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot send the mail due to error: &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string cannot_send_email {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_send_email\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid &apos;{0}&apos;-range, no character to the left of &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string char_range_no_char_on_left {\r\n            get {\r\n                return ResourceManager.GetString(\"char_range_no_char_on_left\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid &apos;{0}&apos;-range, no character to the right of &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string char_range_no_char_on_right {\r\n            get {\r\n                return ResourceManager.GetString(\"char_range_no_char_on_right\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid &apos;{0}&apos;-range, &apos;{0}&apos;-range needs to be incrementing.\r\n        /// </summary>\r\n        internal static string char_range_not_incrementing {\r\n            get {\r\n                return ResourceManager.GetString(\"char_range_not_incrementing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Character class cannot be an endpoint of range (second endpoint here).\r\n        /// </summary>\r\n        internal static string character_class_at_second_endpoint_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"character_class_at_second_endpoint_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class {0} has no unserializer.\r\n        /// </summary>\r\n        internal static string class_has_no_unserializer {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_unserializer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to instantiate class &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string class_instantiation_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"class_instantiation_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Command execution failed: {0}.\r\n        /// </summary>\r\n        internal static string command_execution_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"command_execution_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of connections reached the limit ({0}).\r\n        /// </summary>\r\n        internal static string connection_limit_reached {\r\n            get {\r\n                return ResourceManager.GetString(\"connection_limit_reached\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t force cut when width is zero.\r\n        /// </summary>\r\n        internal static string cut_forced_with_zero_width {\r\n            get {\r\n                return ResourceManager.GetString(\"cut_forced_with_zero_width\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Database selection failed: {0}.\r\n        /// </summary>\r\n        internal static string database_selection_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"database_selection_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delimiter must not be alphanumeric or backslash.\r\n        /// </summary>\r\n        internal static string delimiter_alnum_backslash {\r\n            get {\r\n                return ResourceManager.GetString(\"delimiter_alnum_backslash\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid mode for descriptor item #{0}.\r\n        /// </summary>\r\n        internal static string descriptor_item_invalid_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_item_invalid_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing file name parameter from descriptor item #{0}.\r\n        /// </summary>\r\n        internal static string descriptor_item_missing_file_name {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_item_missing_file_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing mode parameter from descriptor item #{0}.\r\n        /// </summary>\r\n        internal static string descriptor_item_missing_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_item_missing_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Descriptor item #{0} should contain handle qualifier and parameters.\r\n        /// </summary>\r\n        internal static string descriptor_item_missing_qualifier {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_item_missing_qualifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Descriptor item #{0} must be either an array or a resource.\r\n        /// </summary>\r\n        internal static string descriptor_item_not_array_nor_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_item_not_array_nor_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Descriptor #{0} is not supported.\r\n        /// </summary>\r\n        internal static string descriptor_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"descriptor_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Deserialization failed: {0} at offset {1} of {2} bytes.\r\n        /// </summary>\r\n        internal static string deserialization_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"deserialization_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The number of variables ({0}) differs from the number of format specifiers ({1}).\r\n        /// </summary>\r\n        internal static string different_variables_and_specifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"different_variables_and_specifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The directory &apos;{0}&apos; does not exist.\r\n        /// </summary>\r\n        internal static string directory_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"directory_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extensions cannot be loaded by script. Use configuration files instead..\r\n        /// </summary>\r\n        internal static string dl_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"dl_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Equivalence class cannot be endpoint of range (first endpoint here).\r\n        /// </summary>\r\n        internal static string equivalence_class_at_first_endpoint_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"equivalence_class_at_first_endpoint_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Equivalence class cannot be an endpoint of a range (second endpoint here).\r\n        /// </summary>\r\n        internal static string equivalence_class_at_second_endpoint_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"equivalence_class_at_second_endpoint_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error occured while closing the connection: {0}.\r\n        /// </summary>\r\n        internal static string error_closing_connection {\r\n            get {\r\n                return ResourceManager.GetString(\"error_closing_connection\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Phalanger: Error report.\r\n        /// </summary>\r\n        internal static string error_report {\r\n            get {\r\n                return ResourceManager.GetString(\"error_report\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured while starting process: {0}.\r\n        /// </summary>\r\n        internal static string error_starting_process {\r\n            get {\r\n                return ResourceManager.GetString(\"error_starting_process\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured while terminating process {0} (pid = {1}): {2}.\r\n        /// </summary>\r\n        internal static string error_terminating_process {\r\n            get {\r\n                return ResourceManager.GetString(\"error_terminating_process\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured while waiting for process exit: {0}.\r\n        /// </summary>\r\n        internal static string error_waiting_for_process_exit {\r\n            get {\r\n                return ResourceManager.GetString(\"error_waiting_for_process_exit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Field (column) of name &apos;{0}&apos; doesn&apos;t exist in the result.\r\n        /// </summary>\r\n        internal static string field_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"field_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to First endpoint of range cannot be a character class.\r\n        /// </summary>\r\n        internal static string first_endpoint_character_class {\r\n            get {\r\n                return ResourceManager.GetString(\"first_endpoint_character_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function not allowed in web server context.\r\n        /// </summary>\r\n        internal static string function_disallowed_in_web_context {\r\n            get {\r\n                return ResourceManager.GetString(\"function_disallowed_in_web_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Header &apos;{0}&apos; not supported and has been ignored.\r\n        /// </summary>\r\n        internal static string header_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"header_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Headers has already been sent; modification of cookies or other HTTP headers are not allowed.\r\n        /// </summary>\r\n        internal static string headers_has_been_sent {\r\n            get {\r\n                return ResourceManager.GetString(\"headers_has_been_sent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Requested host not responding.\r\n        /// </summary>\r\n        internal static string host_not_responding {\r\n            get {\r\n                return ResourceManager.GetString(\"host_not_responding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to HTTP request failed with message &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string http_request_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"http_request_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: illegal hex digit &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string illegal_hex_digit {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_hex_digit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parse error on line {0}.\r\n        /// </summary>\r\n        internal static string ini_parse_error {\r\n            get {\r\n                return ResourceManager.GetString(\"ini_parse_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid base64 encoded data.\r\n        /// </summary>\r\n        internal static string invalid_base64_encoded_data {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_base64_encoded_data\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid value for cache limiter.\r\n        /// </summary>\r\n        internal static string invalid_cache_limiter {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_cache_limiter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid calendar id &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_calendar {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_calendar\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid connection resource.\r\n        /// </summary>\r\n        internal static string invalid_connection_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_connection_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Stream-Context resource.\r\n        /// </summary>\r\n        internal static string invalid_context_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_context_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid data encountered in the stream (bad back reference marker)..\r\n        /// </summary>\r\n        internal static string invalid_data_bad_back_reference {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_data_bad_back_reference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid data encountered in the stream (bad length marker)..\r\n        /// </summary>\r\n        internal static string invalid_data_bad_length {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_data_bad_length\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid data encountered in the stream (the specified data type is invalid in this context)..\r\n        /// </summary>\r\n        internal static string invalid_data_bad_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_data_bad_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Field index {0} is invalid for {1} resource #{2}.\r\n        /// </summary>\r\n        internal static string invalid_data_result_field_index {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_data_result_field_index\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Row index {0} is invalid for {1} resource #{2}.\r\n        /// </summary>\r\n        internal static string invalid_data_result_row_index {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_data_result_row_index\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Directory listing resource.\r\n        /// </summary>\r\n        internal static string invalid_directory_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_directory_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid destination charser.\r\n        /// </summary>\r\n        internal static string invalid_dst_charset {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_dst_charset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Email address &apos;{0}&apos; is not valid.\r\n        /// </summary>\r\n        internal static string invalid_email_address {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_email_address\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid handle qualifier.\r\n        /// </summary>\r\n        internal static string invalid_handle_qualifier {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_handle_qualifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path &apos;{0}&apos; is invalid.\r\n        /// </summary>\r\n        internal static string invalid_path {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid port number &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_port {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_port\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid process resource.\r\n        /// </summary>\r\n        internal static string invalid_process_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_process_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid query result resource.\r\n        /// </summary>\r\n        internal static string invalid_result_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_result_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid scan conversion character &quot;{0}&quot;.\r\n        /// </summary>\r\n        internal static string invalid_scan_conversion_character {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_scan_conversion_character\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid session save path &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_session_save_path {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_session_save_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid source charser.\r\n        /// </summary>\r\n        internal static string invalid_src_charset {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_src_charset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid stored procedure resource.\r\n        /// </summary>\r\n        internal static string invalid_stored_procedure_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_stored_procedure_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid name of type.\r\n        /// </summary>\r\n        internal static string invalid_type_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_type_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not a valid URL, unable to parse ({0}).\r\n        /// </summary>\r\n        internal static string invalid_url {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_url\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The given parameter is not a valid uuencoded string.\r\n        /// </summary>\r\n        internal static string invalid_uuencoded_string {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_uuencoded_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Limit is less than 1.\r\n        /// </summary>\r\n        internal static string limit_less_than_one {\r\n            get {\r\n                return ResourceManager.GetString(\"limit_less_than_one\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ignoring unsupported pattern modifier &apos;{0}&apos; in perl regular expression.\r\n        /// </summary>\r\n        internal static string modifier_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"modifier_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ignoring unknown pattern modifier &apos;{0}&apos; in perl regular expression.\r\n        /// </summary>\r\n        internal static string modifier_unknown {\r\n            get {\r\n                return ResourceManager.GetString(\"modifier_unknown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Pattern modifier &apos;{0}&apos; is ignored due to use of modifier &apos;{1}&apos; in perl regular expression.\r\n        /// </summary>\r\n        internal static string modifiers_inconsistent {\r\n            get {\r\n                return ResourceManager.GetString(\"modifiers_inconsistent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: multi-byte characters are not supported.\r\n        /// </summary>\r\n        internal static string multibyte_chars_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"multibyte_chars_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} must be greater than or equal to 0.\r\n        /// </summary>\r\n        internal static string must_be_positive {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_positive\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can {0} only string and integer values.\r\n        /// </summary>\r\n        internal static string neither_string_nor_integer_value {\r\n            get {\r\n                return ResourceManager.GetString(\"neither_string_nor_integer_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No prefix specified - possible security hazard.\r\n        /// </summary>\r\n        internal static string no_prefix_security_hazard {\r\n            get {\r\n                return ResourceManager.GetString(\"no_prefix_security_hazard\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to .\r\n        /// </summary>\r\n        internal static string no_prefix_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"no_prefix_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: not enough arguments.\r\n        /// </summary>\r\n        internal static string not_enought_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"not_enought_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: not enough characters in string.\r\n        /// </summary>\r\n        internal static string not_enought_characters {\r\n            get {\r\n                return ResourceManager.GetString(\"not_enought_characters\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: not enough input, need {1}, have {2}.\r\n        /// </summary>\r\n        internal static string not_enought_input {\r\n            get {\r\n                return ResourceManager.GetString(\"not_enought_input\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of elements must be positive.\r\n        /// </summary>\r\n        internal static string number_of_elements_not_positive {\r\n            get {\r\n                return ResourceManager.GetString(\"number_of_elements_not_positive\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The number of items is {0} but it must be between 1 and array item count {1}.\r\n        /// </summary>\r\n        internal static string number_of_items_not_between_one_and_item_count {\r\n            get {\r\n                return ResourceManager.GetString(\"number_of_items_not_between_one_and_item_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of repetitions must be non-negative.\r\n        /// </summary>\r\n        internal static string number_of_repetitions_negative {\r\n            get {\r\n                return ResourceManager.GetString(\"number_of_repetitions_negative\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Option &apos;{0}&apos; has already been registered..\r\n        /// </summary>\r\n        internal static string option_already_registered {\r\n            get {\r\n                return ResourceManager.GetString(\"option_already_registered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; option missing.\r\n        /// </summary>\r\n        internal static string option_missing {\r\n            get {\r\n                return ResourceManager.GetString(\"option_missing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option &apos;{0}&apos; is not supported.\r\n        /// </summary>\r\n        internal static string option_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"option_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option &apos;{0}&apos; cannot be set or restored since it is read only.\r\n        /// </summary>\r\n        internal static string option_readonly {\r\n            get {\r\n                return ResourceManager.GetString(\"option_readonly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: outside of string.\r\n        /// </summary>\r\n        internal static string outside_string {\r\n            get {\r\n                return ResourceManager.GetString(\"outside_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; has already been bound.\r\n        /// </summary>\r\n        internal static string parameter_already_bound {\r\n            get {\r\n                return ResourceManager.GetString(\"parameter_already_bound\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parse error on position {0} near &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string parse_error {\r\n            get {\r\n                return ResourceManager.GetString(\"parse_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PREG_PATTERN_ORDER and PREG_SET_ORDER flags are mutually exclusive.\r\n        /// </summary>\r\n        internal static string preg_match_pattern_set_order {\r\n            get {\r\n                return ResourceManager.GetString(\"preg_match_pattern_set_order\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No ending delimiter &apos;{0}&apos; found.\r\n        /// </summary>\r\n        internal static string preg_no_end_delimiter {\r\n            get {\r\n                return ResourceManager.GetString(\"preg_no_end_delimiter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Quantifier &apos;?&apos; following nothing (after &apos;(&apos;).\r\n        /// </summary>\r\n        internal static string question_mark_folowing_nothing {\r\n            get {\r\n                return ResourceManager.GetString(\"question_mark_folowing_nothing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Range: first character code is greater than second.\r\n        /// </summary>\r\n        internal static string range_first_character_greater {\r\n            get {\r\n                return ResourceManager.GetString(\"range_first_character_greater\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Range not allowed here (first endpoint may be illeagal).\r\n        /// </summary>\r\n        internal static string range_not_allowed {\r\n            get {\r\n                return ResourceManager.GetString(\"range_not_allowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ranges cannot share an endpoint.\r\n        /// </summary>\r\n        internal static string range_shared_endpoint {\r\n            get {\r\n                return ResourceManager.GetString(\"range_shared_endpoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ranges for current page encoding are not supported.\r\n        /// </summary>\r\n        internal static string ranges_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"ranges_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Recursion detected.\r\n        /// </summary>\r\n        internal static string recursion_detected {\r\n            get {\r\n                return ResourceManager.GetString(\"recursion_detected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Regular expression cannot end with &apos;(&apos;.\r\n        /// </summary>\r\n        internal static string regexp_cannot_end_with_open_bracket {\r\n            get {\r\n                return ResourceManager.GetString(\"regexp_cannot_end_with_open_bracket\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Regular expression cannot end with &apos;\\\\&apos;.\r\n        /// </summary>\r\n        internal static string regexp_cannot_end_with_two_backslashes {\r\n            get {\r\n                return ResourceManager.GetString(\"regexp_cannot_end_with_two_backslashes\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Nothing to repeat - duplicate quantifier at offset {0} in matching part of regular expression..\r\n        /// </summary>\r\n        internal static string regexp_duplicate_quantifier {\r\n            get {\r\n                return ResourceManager.GetString(\"regexp_duplicate_quantifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Empty regular expression.\r\n        /// </summary>\r\n        internal static string regular_expression_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"regular_expression_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Replacement cannot be an array if pattern is not an array.\r\n        /// </summary>\r\n        internal static string replacement_array_pattern_not {\r\n            get {\r\n                return ResourceManager.GetString(\"replacement_array_pattern_not\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The segment length must be greater then zero.\r\n        /// </summary>\r\n        internal static string segment_length_not_positive {\r\n            get {\r\n                return ResourceManager.GetString(\"segment_length_not_positive\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PhpFormatter does not support serialization binders..\r\n        /// </summary>\r\n        internal static string serialization_binder_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"serialization_binder_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Serialization failed: {0}.\r\n        /// </summary>\r\n        internal static string serialization_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"serialization_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Serialization of type {0} is not supported by PhpFormatter..\r\n        /// </summary>\r\n        internal static string serialization_unsupported_type {\r\n            get {\r\n                return ResourceManager.GetString(\"serialization_unsupported_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::serialize() must return a string or NULL.\r\n        /// </summary>\r\n        internal static string serialize_must_return_null_or_string {\r\n            get {\r\n                return ResourceManager.GetString(\"serialize_must_return_null_or_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Serializer &apos;{0}&apos; has already been registered..\r\n        /// </summary>\r\n        internal static string serializer_already_registered {\r\n            get {\r\n                return ResourceManager.GetString(\"serializer_already_registered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Session doesn&apos;t not exist.\r\n        /// </summary>\r\n        internal static string session_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"session_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} should be specified.\r\n        /// </summary>\r\n        internal static string should_be_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"should_be_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of seconds must be greater than or equal to 0.\r\n        /// </summary>\r\n        internal static string sleep_seconds_less_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"sleep_seconds_less_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to From header was not specified..\r\n        /// </summary>\r\n        internal static string smtp_sendmail_from_not_set {\r\n            get {\r\n                return ResourceManager.GetString(\"smtp_sendmail_from_not_set\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error connecting &apos;{0}&apos;: {0}.\r\n        /// </summary>\r\n        internal static string socket_open_error {\r\n            get {\r\n                return ResourceManager.GetString(\"socket_open_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Connect timeout: {0} did not respond.\r\n        /// </summary>\r\n        internal static string socket_open_timeout {\r\n            get {\r\n                return ResourceManager.GetString(\"socket_open_timeout\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} specifies a sorting flag which has already been specified for the array.\r\n        /// </summary>\r\n        internal static string sorting_flag_already_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"sorting_flag_already_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PhpFormatter does not support streaming context..\r\n        /// </summary>\r\n        internal static string streaming_context_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"streaming_context_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Length value {0} exceeds string length.\r\n        /// </summary>\r\n        internal static string substr_count_length_exceeds {\r\n            get {\r\n                return ResourceManager.GetString(\"substr_count_length_exceeds\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Offset value {0} exceeds string length.\r\n        /// </summary>\r\n        internal static string substr_count_offset_exceeds {\r\n            get {\r\n                return ResourceManager.GetString(\"substr_count_offset_exceeds\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Offset should be greater than or equal to 0.\r\n        /// </summary>\r\n        internal static string substr_count_offset_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"substr_count_offset_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Length should be greater than 0.\r\n        /// </summary>\r\n        internal static string substr_count_zero_length {\r\n            get {\r\n                return ResourceManager.GetString(\"substr_count_zero_length\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PhpFormatter does not support surrogate selectors..\r\n        /// </summary>\r\n        internal static string surrogate_selector_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"surrogate_selector_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String containg Unicode characters greater than &apos;\\u0800&apos; are not supported.\r\n        /// </summary>\r\n        internal static string too_big_unicode_character {\r\n            get {\r\n                return ResourceManager.GetString(\"too_big_unicode_character\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Too few arguments.\r\n        /// </summary>\r\n        internal static string too_few_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unenclosed bracket expression.\r\n        /// </summary>\r\n        internal static string unenclosed_bracket_expression {\r\n            get {\r\n                return ResourceManager.GetString(\"unenclosed_bracket_expression\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to expects parameter {0} to be {1}, {2} given.\r\n        /// </summary>\r\n        internal static string unexpected_arg_given {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_arg_given\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected character in the stream..\r\n        /// </summary>\r\n        internal static string unexpected_character_in_stream {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_character_in_stream\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected end of stream..\r\n        /// </summary>\r\n        internal static string unexpected_end_of_stream {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_end_of_stream\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Uninitialized string offset &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string uninitialized_string_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"uninitialized_string_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown character class name.\r\n        /// </summary>\r\n        internal static string unknown_character_class {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_character_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File type not recognized.\r\n        /// </summary>\r\n        internal static string unknown_file_type {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_file_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos;: unknown format code.\r\n        /// </summary>\r\n        internal static string unknown_format_code {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_format_code\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option &apos;{0}&apos; is not known.\r\n        /// </summary>\r\n        internal static string unknown_option {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Serializer &apos;{0}&apos; is unknown. It hasn&apos;t been registered by any loaded library.\r\n        /// </summary>\r\n        internal static string unknown_serializer {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_serializer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown time zone &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string unknown_timezone {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_timezone\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown time zone &apos;{0}&apos; specified by &apos;TZ&apos; environment variable.\r\n        /// </summary>\r\n        internal static string unknown_timezone_env {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_timezone_env\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unmatched [ in format string.\r\n        /// </summary>\r\n        internal static string unmathed_format_bracket {\r\n            get {\r\n                return ResourceManager.GetString(\"unmathed_format_bracket\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} unused arguments.\r\n        /// </summary>\r\n        internal static string unused_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"unused_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to User session handler operation &apos;{0}&apos; failed (sid = &apos;{1}&apos;, save_path = &apos;{2}&apos;).\r\n        /// </summary>\r\n        internal static string user_session_handler_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"user_session_handler_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Using system time zone settings which may be inaccurate (&apos;{0}&apos; zone selected).\r\n        /// </summary>\r\n        internal static string using_implicit_timezone {\r\n            get {\r\n                return ResourceManager.GetString(\"using_implicit_timezone\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to .\r\n        /// </summary>\r\n        internal static string web_server_not_available {\r\n            get {\r\n                return ResourceManager.GetString(\"web_server_not_available\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;\n        ///&lt;!-- document downloaded from http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml --&gt;\n        ///&lt;supplementalData&gt;\n        ///\t&lt;windowsZones&gt;\n        ///\t\t&lt;mapTimezones otherVersion=&quot;07dc0000&quot; typeVersion=&quot;2012a&quot;&gt;\n        ///\n        ///\t\t\t&lt;!-- (UTC-12:00) International Date Line West --&gt;\n        ///\t\t\t&lt;mapZone other=&quot;Dateline Standard Time&quot; territory=&quot;001&quot; type=&quot;Etc/GMT+12&quot;/&gt;\n        ///\t\t\t&lt;mapZone other=&quot;Dateline Standard Time&quot; territory=&quot;ZZ&quot; type=&quot;Etc/GMT+12&quot;/&gt;\n        ///\n        ///\t\t\t&lt;!-- (UTC-11:00) Coordinated Universal Time-11 --&gt;\n        ///\t\t\t [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string WindowsTZ {\r\n            get {\r\n                return ResourceManager.GetString(\"WindowsTZ\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Word boundary must be single bracket expression.\r\n        /// </summary>\r\n        internal static string word_boundary_not_single_bracket_expr {\r\n            get {\r\n                return ResourceManager.GetString(\"word_boundary_not_single_bracket_expr\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The destination wrapper is different from the source one; use copy instead.\r\n        /// </summary>\r\n        internal static string wrappers_must_match {\r\n            get {\r\n                return ResourceManager.GetString(\"wrappers_must_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Zero is not a valid argument number.\r\n        /// </summary>\r\n        internal static string zero_argument_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"zero_argument_invalid\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Strings.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/*\r\n  GENERICS:\r\n    Generic char map and hashtable will allow to handle all Unicode characters and get rid of the errors:\r\n    <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n    \r\n  TODO:\r\n\t\t- PHP6 - new functions hash($alg,...) hash_file($alg, ...)\r\n\t\t- Added overflow checks to wordwrap() function. (5.1.3) \r\n    - Fixed offset/length parameter validation in substr_compare() function. (5.1.3)\r\n\t\t- (strncmp & strncasecmp do not return false on negative string length). (5.1.3) \r\n\r\n*/\r\nusing System;\r\nusing PHP.Core;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Security.Cryptography;\r\nusing System.Text.RegularExpressions;\r\nusing System.ComponentModel;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n    #region Enumerations\r\n\r\n    /// <summary>Quote conversion options.</summary>\r\n    [Flags]\r\n    public enum QuoteStyle\r\n    {\r\n        /// <summary>\r\n        /// Default quote style for <c>htmlentities</c>.\r\n        /// </summary>\r\n        HtmlEntitiesDefault = QuoteStyle.Compatible | QuoteStyle.Html401,\r\n\r\n        /// <summary>Single quotes.</summary>\r\n        SingleQuotes = 1,\r\n\r\n        /// <summary>Double quotes.</summary>\r\n        DoubleQuotes = 2,\r\n\r\n        /// <summary>\r\n        /// No quotes.\r\n        /// Will leave both double and single quotes unconverted.\r\n        /// </summary>\r\n        [ImplementsConstant(\"ENT_NOQUOTES\")]\r\n        NoQuotes = 0,\r\n\r\n        /// <summary>\r\n        /// Will convert double-quotes and leave single-quotes alone.\r\n        /// </summary>\r\n        [ImplementsConstant(\"ENT_COMPAT\")]\r\n        Compatible = DoubleQuotes,\r\n\r\n        /// <summary>\r\n        /// Both single and double quotes.\r\n        /// Will convert both double and single quotes.\r\n        /// </summary>\r\n        [ImplementsConstant(\"ENT_QUOTES\")]\r\n        BothQuotes = DoubleQuotes | SingleQuotes,\r\n\r\n        /// <summary>\r\n        /// Silently discard invalid code unit sequences instead of\r\n        /// returning an empty string. Using this flag is discouraged\r\n        /// as it may have security implications.\r\n        /// </summary>\r\n        [ImplementsConstant(\"ENT_IGNORE\")]\r\n        Ignore = 4,\r\n\r\n        /// <summary>\r\n        /// Replace invalid code unit sequences with a Unicode\r\n        /// Replacement Character U+FFFD (UTF-8) or &amp;#FFFD;\r\n        /// (otherwise) instead of returning an empty string.\r\n        /// </summary>\r\n        [ImplementsConstant(\"ENT_SUBSTITUTE\")]  //\t8\n        Substitute = 8,\n\n        /// <summary>\r\n        /// Handle code as HTML 4.01.\r\n        /// </summary>\n        [ImplementsConstant(\"ENT_HTML401\")]     //\t0\n        Html401 = NoQuotes,\n\n        /// <summary>\r\n        /// Handle code as XML 1.\r\n        /// </summary>\n        [ImplementsConstant(\"ENT_XML1\")]        //\t16\n        XML1 = 16,\n\n        /// <summary>\r\n        /// Handle code as XHTML.\r\n        /// </summary>\n        [ImplementsConstant(\"ENT_XHTML\")]       //\t32\n        XHTML = 32,\n\n        /// <summary>\r\n        /// Handle code as HTML 5.\r\n        /// </summary>\n        [ImplementsConstant(\"ENT_HTML5\")]       //\t(16|32)\n        HTML5 = XML1 | XHTML,\n\n        /// <summary>\r\n        /// Replace invalid code points for the given document type\r\n        /// with a Unicode Replacement Character U+FFFD (UTF-8) or &amp;#FFFD;\r\n        /// (otherwise) instead of leaving them as is.\r\n        /// This may be useful, for instance, to ensure the well-formedness\r\n        /// of XML documents with embedded external content.\r\n        /// </summary>\n        [ImplementsConstant(\"ENT_DISALLOWED\")]  //\t128\r\n        Disallowed = 128,\r\n    };\r\n\r\n    /// <summary>Types of HTML entities tables.</summary>\r\n    public enum HtmlEntitiesTable\r\n    {\r\n        /// <summary>Table containing special characters only.</summary>\r\n        [ImplementsConstant(\"HTML_SPECIALCHARS\")]\r\n        SpecialChars = 0,\r\n\r\n        /// <summary>Table containing all entities.</summary>\r\n        [ImplementsConstant(\"HTML_ENTITIES\")]\r\n        AllEntities = 1\r\n    };\r\n\r\n    /// <summary>\r\n    /// Type of padding.\r\n    /// </summary>\r\n    public enum PaddingType\r\n    {\r\n        /// <summary>Pad a string from the left.</summary>\r\n        [ImplementsConstant(\"STR_PAD_LEFT\")]\r\n        Left = 0,\r\n\r\n        /// <summary>Pad a string from the right.</summary>\r\n        [ImplementsConstant(\"STR_PAD_RIGHT\")]\r\n        Right = 1,\r\n\r\n        /// <summary>Pad a string from both sides.</summary>\r\n        [ImplementsConstant(\"STR_PAD_BOTH\")]\r\n        Both = 2\r\n    }\r\n\r\n    /// <summary>\r\n    /// Format of a return value of <see cref=\"PhpStrings.CountWords\"/> method. Constants are not named in PHP.\r\n    /// </summary>                   \r\n    public enum WordCountResult\r\n    {\r\n        /// <summary>\r\n        /// Return number of words in string.\r\n        /// </summary>\r\n        WordCount = 0,\r\n\r\n        /// <summary>\r\n        /// Return array of words.\r\n        /// </summary>\r\n        WordsArray = 1,\r\n\r\n        /// <summary>\r\n        /// Return positions to words mapping.\r\n        /// </summary>\r\n        PositionsToWordsMapping = 2\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// Manipulates strings.\r\n    /// </summary>\r\n    /// <threadsafety static=\"true\"/>\r\n    public static class PhpStrings\r\n    {\r\n        #region Character map\r\n\r\n#if !SILVERLIGHT\r\n        [ThreadStatic]\r\n#endif\r\n        private static CharMap _charmap;\r\n\r\n        /// <summary>\r\n        /// Get clear <see cref=\"CharMap\"/> to be used by current thread. <see cref=\"_charmap\"/>.\r\n        /// </summary>\r\n        internal static CharMap InitializeCharMap()\r\n        {\r\n            CharMap result = _charmap;\r\n\r\n            if (result == null)\r\n                _charmap = result = new CharMap(0x0800);\r\n            else\r\n                result.ClearAll();\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region Binary Data Functions\r\n\r\n        #region ord, chr, bin2hex, ord_unicode, chr_unicode, bin2hex_unicode, to_binary\r\n\r\n        /// <summary>\r\n        /// Returns ASCII code of the first character of a string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes which the first byte will be returned.</param>\r\n        /// <returns>The ASCII code of <paramref name=\"bytes\"/>[0] or zero if null or empty.</returns>\r\n        [ImplementsFunction(\"ord\")]\r\n        [PureFunction]\r\n        public static int Ord(PhpBytes bytes)\r\n        {\r\n            return (bytes == null || bytes.Length == 0) ? 0 : (int)bytes[0];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns Unicode ordinal number of the first character of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string which the first character's ordinal number is returned.</param>\r\n        /// <returns>The ordinal number of <paramref name=\"str\"/>[0].</returns>\r\n        [ImplementsFunction(\"ord_unicode\")]\r\n        [PureFunction]\r\n        public static int OrdUnicode(string str)\r\n        {\r\n            return (str == null || str == String.Empty) ? 0 : (int)str[0];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts ordinal number of character to a binary string containing that character.\r\n        /// </summary>\r\n        /// <param name=\"charCode\">The ASCII code.</param>\r\n        /// <returns>The character with <paramref name=\"charCode\"/> ASCIT code.</returns>\r\n        /// <remarks>Current code-page is determined by the <see cref=\"ApplicationConfiguration.GlobalizationSection.PageEncoding\"/> property.</remarks>\r\n        [ImplementsFunction(\"chr\")]\r\n        [PureFunction]\r\n        public static PhpBytes Chr(int charCode)\r\n        {\r\n            return new PhpBytes(unchecked((byte)charCode));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts ordinal number of Unicode character to a string containing that character.\r\n        /// </summary>\r\n        /// <param name=\"charCode\">The ordinal number of character.</param>\r\n        /// <returns>The character with <paramref name=\"charCode\"/> ordnial number.</returns>\r\n        [ImplementsFunction(\"chr_unicode\")]\r\n        [PureFunction]\r\n        public static string ChrUnicode(int charCode)\r\n        {\r\n            return unchecked((char)charCode).ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a string of bytes into hexadecimal representation.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes.</param>\r\n        /// <returns>Concatenation of hexadecimal values of bytes of <paramref name=\"bytes\"/>.</returns>\r\n        /// <example>\r\n        /// The string \"01A\" is converted into string \"303140\" because ord('0') = 0x30, ord('1') = 0x31, ord('A') = 0x40.\r\n        /// </example>\r\n        [ImplementsFunction(\"bin2hex\")]\r\n        [PureFunction]\r\n        public static string BinToHex(PhpBytes bytes)\r\n        {\r\n            return (bytes == null) ? String.Empty : StringUtils.BinToHex(bytes.ReadonlyData, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a string into hexadecimal representation.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be converted.</param>\r\n        /// <returns>\r\n        /// The concatenated four-characters long hexadecimal numbers each representing one character of <paramref name=\"str\"/>.\r\n        /// </returns>\r\n        [ImplementsFunction(\"bin2hex_unicode\")]\r\n        [PureFunction]\r\n        public static string BinToHex(string str)\r\n        {\r\n            if (str == null) return null;\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length * 4, length * 4);\r\n            result.Length = length * 4;\r\n\r\n            const string hex_digs = \"0123456789abcdef\";\r\n\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                int c = (int)str[i];\r\n                result[4 * i + 0] = hex_digs[(c & 0xf000) >> 12];\r\n                result[4 * i + 1] = hex_digs[(c & 0x0f00) >> 8];\r\n                result[4 * i + 2] = hex_digs[(c & 0x00f0) >> 4];\r\n                result[4 * i + 3] = hex_digs[(c & 0x000f)];\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a variable to a string of binary data.\r\n        /// </summary>\r\n        /// <param name=\"var\">A variable.</param>\r\n        /// <returns>Binary data.</returns>\r\n        [ImplementsFunction(\"to_binary\")]\r\n        [PureFunction]\r\n        public static PhpBytes ToBinary(PhpBytes var)\r\n        {\r\n            return var;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region convert_cyr_string\r\n\r\n        #region cyrWin1251 (1251), cyrCp866 (20866), cyrIso88595 (28595), cyrMac (10007) conversion tables\r\n\r\n        /// <summary>\r\n        /// Cyrillic translation table for Windows CP1251 character set.\r\n        /// </summary>\r\n        private static readonly byte[] cyrWin1251 = new byte[]\r\n\t{\r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,\r\n\t\t46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,\r\n\t\t154,174,190,46,159,189,46,46,179,191,180,157,46,46,156,183,\r\n\t\t46,46,182,166,173,46,46,158,163,152,164,155,46,46,46,167,\r\n\t\t225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,\r\n\t\t242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,\r\n\t\t193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,\r\n\t\t210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,\r\n      \r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,184,186,32,179,191,32,32,32,32,32,180,162,32,\r\n\t\t32,32,32,168,170,32,178,175,32,32,32,32,32,165,161,169,\r\n\t\t254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,\r\n\t\t239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,\r\n\t\t222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,\r\n\t\t207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218,\r\n\t\t};\r\n\r\n        /// <summary>\r\n        /// Cyrillic translation table for CP866 character set.\r\n        /// </summary>\r\n        private static readonly byte[] cyrCp866 = new byte[]\r\n\t{ \r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,\r\n\t\t242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,\r\n\t\t193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,\r\n\t\t35,35,35,124,124,124,124,43,43,124,124,43,43,43,43,43,\r\n\t\t43,45,45,124,45,43,124,124,43,43,45,45,124,45,43,45,\r\n\t\t45,45,45,43,43,43,43,43,43,43,43,35,35,124,124,35,\r\n\t\t210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,\r\n\t\t179,163,180,164,183,167,190,174,32,149,158,32,152,159,148,154,\r\n      \r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t205,186,213,241,243,201,32,245,187,212,211,200,190,32,247,198,\r\n\t\t199,204,181,240,242,185,32,244,203,207,208,202,216,32,246,32,\r\n\t\t238,160,161,230,164,165,228,163,229,168,169,170,171,172,173,174,\r\n\t\t175,239,224,225,226,227,166,162,236,235,167,232,237,233,231,234,\r\n\t\t158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,\r\n\t\t143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,\r\n\t\t};\r\n\r\n        /// <summary>\r\n        /// Cyrillic translation table for ISO88595 character set.\r\n        /// </summary>\r\n        private static readonly byte[] cyrIso88595 = new byte[]\r\n\t{\r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,179,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,\r\n\t\t242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,\r\n\t\t193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,\r\n\t\t210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209,\r\n\t\t32,163,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n      \r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,241,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t32,32,32,161,32,32,32,32,32,32,32,32,32,32,32,32,\r\n\t\t238,208,209,230,212,213,228,211,229,216,217,218,219,220,221,222,\r\n\t\t223,239,224,225,226,227,214,210,236,235,215,232,237,233,231,234,\r\n\t\t206,176,177,198,180,181,196,179,197,184,185,186,187,188,189,190,\r\n\t\t191,207,192,193,194,195,182,178,204,203,183,200,205,201,199,202,\r\n\t\t};\r\n\r\n        /// <summary>\r\n        /// Cyrillic translation table for Mac character set.\r\n        /// </summary>\r\n        private static readonly byte[] cyrMac = new byte[]\r\n\t{\r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,\r\n\t\t242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,\r\n\t\t160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,\r\n\t\t176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,\r\n\t\t128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,\r\n\t\t144,145,146,147,148,149,150,151,152,153,154,155,156,179,163,209,\r\n\t\t193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,\r\n\t\t210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,255,\r\n      \r\n\t\t0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,\r\n\t\t16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,\r\n\t\t32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,\r\n\t\t48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,\r\n\t\t64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,\r\n\t\t80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,\r\n\t\t96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,\r\n\t\t112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,\r\n      \r\n\t\t192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,\r\n\t\t208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,\r\n\t\t160,161,162,222,164,165,166,167,168,169,170,171,172,173,174,175,\r\n\t\t176,177,178,221,180,181,182,183,184,185,186,187,188,189,190,191,\r\n\t\t254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,\r\n\t\t239,223,240,241,242,243,230,226,252,251,231,248,253,249,247,250,\r\n\t\t158,128,129,150,132,133,148,131,149,136,137,138,139,140,141,142,\r\n\t\t143,159,144,145,146,147,134,130,156,155,135,152,157,153,151,154,\r\n\t\t};\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Returns a Cyrillic translation table for a specified character set,\r\n        /// </summary>\r\n        /// <param name=\"code\">The character set code. Can be one of 'k', 'w', 'i', 'a', 'd', 'm'.</param>\r\n        /// <returns>The translation table or null if no table is associated with given charset code.</returns>\r\n        internal static byte[] GetCyrTableInternal(char code)\r\n        {\r\n            switch (Char.ToUpper(code))\r\n            {\r\n                case 'W':\r\n                    return cyrWin1251;\r\n\r\n                case 'A':\r\n                case 'D':\r\n                    return cyrCp866;\r\n\r\n                case 'I':\r\n                    return cyrIso88595;\r\n\r\n                case 'M':\r\n                    return cyrMac;\r\n\r\n                case 'K':\r\n                    return null;\r\n\r\n                default:\r\n                    return ArrayUtils.EmptyBytes;\r\n            }\r\n        }\r\n\r\n        /// <include file='Doc/Strings.xml' path='docs/method[@name=\"ConvertCyrillic\"]/*'/>\r\n        /// <exception cref=\"PhpException\">Thrown if source or destination charset is invalid. </exception>\r\n        [ImplementsFunction(\"convert_cyr_string\")]\r\n        public static PhpBytes ConvertCyrillic(PhpBytes bytes, string srcCharset, string dstCharset)\r\n        {\r\n            if (bytes == null) return null;\r\n            if (bytes.Length == 0) return PhpBytes.Empty;\r\n\r\n            // checks srcCharset argument:\r\n            if (srcCharset == null || srcCharset == String.Empty)\r\n            {\r\n                PhpException.InvalidArgument(\"srcCharset\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                return PhpBytes.Empty;\r\n            }\r\n\r\n            // checks dstCharset argument:\r\n            if (dstCharset == null || dstCharset == String.Empty)\r\n            {\r\n                PhpException.InvalidArgument(\"dstCharset\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                return PhpBytes.Empty;\r\n            }\r\n\r\n            // get and check source charset table:\r\n            byte[] fromTable = GetCyrTableInternal(srcCharset[0]);\r\n            if (fromTable != null && fromTable.Length < 256)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_src_charser\"));\r\n                return PhpBytes.Empty;\r\n            }\r\n\r\n            // get and check destination charset table:\r\n            byte[] toTable = GetCyrTableInternal(dstCharset[0]);\r\n            if (toTable != null && toTable.Length < 256)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_dst_charser\"));\r\n                return PhpBytes.Empty;\r\n            }\r\n\r\n            byte[] data = bytes.ReadonlyData;\r\n            byte[] result = new byte[data.Length];\r\n\r\n            // perform conversion:\r\n            if (fromTable == null)\r\n            {\r\n                if (toTable != null)\r\n                {\r\n                    for (int i = 0; i < data.Length; i++) result[i] = toTable[data[i] + 256];\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (toTable == null)\r\n                {\r\n                    for (int i = 0; i < data.Length; i++) result[i] = fromTable[data[i]];\r\n                }\r\n                else\r\n                {\r\n                    for (int i = 0; i < data.Length; i++) result[i] = toTable[fromTable[data[i]] + 256];\r\n                }\r\n            }\r\n\r\n            return new PhpBytes(result);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region count_chars\r\n\r\n        /// <summary>\r\n        /// Creates a histogram of Unicode character occurence in the given string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be processed.</param>\r\n        /// <returns>The array of characters frequency (unsorted).</returns>\r\n        [ImplementsFunction(\"count_chars_unicode\")]\r\n        public static PhpArray CountChars(string str)\r\n        {\r\n            PhpArray count = new PhpArray();\r\n\r\n            for (int i = str.Length - 1; i >= 0; i--)\r\n            {\r\n                int j = (int)str[i];\r\n                object c = count[j];\r\n                count[j] = (c == null) ? 1 : (int)c + 1;\r\n            }\r\n\r\n            return count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a histogram of byte occurence in the given array of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The array of bytes to be processed.</param>\r\n        /// <returns>The array of bytes frequency.</returns>\r\n        public static int[] CountBytes(byte[] bytes)\r\n        {\r\n            if (bytes == null)\r\n                throw new ArgumentNullException(\"bytes\");\r\n\r\n            int[] count = new int[256];\r\n\r\n            for (int i = bytes.Length - 1; i >= 0; i--)\r\n                count[bytes[i]]++;\r\n\r\n            return count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a histogram of byte occurrence in specified string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">Bytes to be processed.</param>\r\n        /// <returns>The array of characters frequency.</returns>\r\n        [ImplementsFunction(\"count_chars\")]\r\n        public static PhpArray CountChars(PhpBytes bytes)\r\n        {\r\n            return (bytes == null) ? new PhpArray() : new PhpArray(CountBytes(bytes.ReadonlyData), 0, 256);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a histogram of character occurence in a string or string of bytes.\r\n        /// </summary>\r\n        /// <param name=\"data\">The string or bytes to be processed.</param>\r\n        /// <param name=\"mode\">Determines the type of result.</param>\r\n        /// <returns>Depending on <paramref name=\"mode\"/> the following is returned:\r\n        /// <list type=\"bullet\">\r\n        /// <item><term>0</term><description>an array with the character ordinals as key and their frequency as value,</description></item> \r\n        /// <item><term>1</term><description>same as 0 but only characters with a frequency greater than zero are listed,</description></item>\r\n        /// <item><term>2</term><description>same as 0 but only characters with a frequency equal to zero are listed,</description></item> \r\n        /// <item><term>3</term><description>a string containing all used characters is returned,</description></item> \r\n        /// <item><term>4</term><description>a string containing all not used characters is returned.</description></item>\r\n        /// </list>\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"mode\"/> is invalid.</exception>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"data\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n        [ImplementsFunction(\"count_chars\")]\r\n        public static object CountChars(object data, int mode)\r\n        {\r\n            try\r\n            {\r\n                switch (mode)\r\n                {\r\n                    case 0: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256);\r\n                    case 1: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256, 0, true);\r\n                    case 2: return new PhpArray(CountBytes(Core.Convert.ObjectToPhpBytes(data).ReadonlyData), 0, 256, 0, false);\r\n                    case 3: return GetBytesContained(Core.Convert.ObjectToPhpBytes(data), 0, 255);\r\n                    case 4: return GetBytesNotContained(Core.Convert.ObjectToPhpBytes(data), 0, 255);\r\n                    default: PhpException.InvalidArgument(\"mode\"); return null;\r\n                }\r\n            }\r\n            catch (IndexOutOfRangeException)\r\n            {\r\n                // thrown by char map:\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"too_big_unicode_character\"));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a <see cref=\"String\"/> containing all characters used in the specified <see cref=\"String\"/>.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to process.</param>\r\n        /// <param name=\"lower\">The lower limit for returned chars.</param>\r\n        /// <param name=\"upper\">The upper limit for returned chars.</param>\r\n        /// <returns>\r\n        /// The string containing characters used in <paramref name=\"str\"/> which are sorted according to their ordinal values.\r\n        /// </returns>\r\n        /// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"str\"/> contains characters greater than '\\u0800'.</exception>\r\n        public static string GetCharactersContained(string str, char lower, char upper)\r\n        {\r\n            CharMap charmap = InitializeCharMap();\r\n\r\n            charmap.Add(str);\r\n            return charmap.ToString(lower, upper, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a <see cref=\"String\"/> containing all characters used in the specified <see cref=\"String\"/>.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to process.</param>\r\n        /// <param name=\"lower\">The lower limit for returned chars.</param>\r\n        /// <param name=\"upper\">The upper limit for returned chars.</param>\r\n        /// <returns>\r\n        /// The string containing characters used in <paramref name=\"str\"/> which are sorted according to their ordinal values.\r\n        /// </returns>\r\n        /// <exception cref=\"IndexOutOfRangeException\"><paramref name=\"str\"/> contains characters greater than '\\u0800'.</exception>\r\n        public static string GetCharactersNotContained(string str, char lower, char upper)\r\n        {\r\n            CharMap charmap = InitializeCharMap();\r\n\r\n            charmap.Add(str);\r\n            return charmap.ToString(lower, upper, true);\r\n        }\r\n\r\n        private static BitArray CreateByteMap(PhpBytes/*!*/ bytes, out int count)\r\n        {\r\n            BitArray map = new BitArray(256);\r\n            map.Length = 256;\r\n\r\n            count = 0;\r\n            for (int i = 0; i < bytes.Length; i++)\r\n            {\r\n                if (!map[bytes[i]])\r\n                {\r\n                    map[bytes[i]] = true;\r\n                    count++;\r\n                }\r\n            }\r\n            return map;\r\n        }\r\n\r\n        public static PhpBytes GetBytesContained(PhpBytes bytes, byte lower, byte upper)\r\n        {\r\n            if (bytes == null) bytes = PhpBytes.Empty;\r\n\r\n            int count;\r\n            BitArray map = CreateByteMap(bytes, out count);\r\n\r\n            byte[] result = new byte[count];\r\n            int j = 0;\r\n            for (int i = lower; i <= upper; i++)\r\n            {\r\n                if (map[i]) result[j++] = (byte)i;\r\n            }\r\n\r\n            return new PhpBytes(result);\r\n        }\r\n\r\n        public static PhpBytes GetBytesNotContained(PhpBytes bytes, byte lower, byte upper)\r\n        {\r\n            if (bytes == null) bytes = PhpBytes.Empty;\r\n\r\n            int count;\r\n            BitArray map = CreateByteMap(bytes, out count);\r\n\r\n            byte[] result = new byte[map.Length - count];\r\n            int j = 0;\r\n            for (int i = lower; i <= upper; i++)\r\n            {\r\n                if (!map[i]) result[j++] = (byte)i;\r\n            }\r\n\r\n            return new PhpBytes(result);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region crypt (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Specifies whether standard DES algorithm is implemented.\r\n        /// 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\r\n        /// If you want key compatibility with PHP, use CRYPT_MD5 by passing in a key starting with \"?1?\"\r\n        /// </summary>\r\n        [ImplementsConstant(\"CRYPT_STD_DES\")]\r\n        public const int CryptStandardDES = 1;\r\n\r\n        /// <summary>\r\n        /// Specifies whether extended DES algorithm is implemented.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CRYPT_EXT_DES\")]\r\n        public const int CryptExtendedDES = 0;\r\n\r\n        /// <summary>\r\n        /// Specifies whether MD5 algorithm is implemented.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CRYPT_MD5\")]\r\n        public const int CryptMD5 = 1;\r\n\r\n        /// <summary>\r\n        /// Specifies whether Blowfish encryption is implemented.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CRYPT_BLOWFISH\")]\r\n        public const int CryptBlowfish = 0;\r\n\r\n        /// <summary>\r\n        /// Specifies the length of the salt applicable to the <see cref=\"Encrypt\"/> method.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CRYPT_SALT_LENGTH\")]\r\n        public const int CryptSaltLength = 9;\r\n\r\n        /// <summary>\r\n        /// Encrypts a string (one-way) with a random key.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to encrypt.</param>\r\n        /// <returns>The encrypted string.</returns>\r\n        [ImplementsFunction(\"crypt\")]\r\n        public static PhpBytes Encrypt(PhpBytes str)\r\n        {\r\n            return Encrypt(str, null);\r\n        }\r\n\r\n        private const int MaxMD5Key = 12;\r\n        private const int InternalMD5Key = 8;\r\n        private const int MaxKeyLength = MaxMD5Key;\r\n        private const int MaxDESKey = 8;\r\n\r\n        public static bool ByteArrayEquals(byte[] array1, byte[] array2, int compareLength)\r\n        {\r\n            // If the other object is null, of a diffent type, or   \r\n            // of an array of a different length then skip out now.   \r\n            if ((array2 == null) || (array1 == null) || (compareLength <= 0 && (array1.Length != array2.Length)))\r\n                return false;\r\n\r\n            int minArray = Math.Min(array1.Length, array2.Length);\r\n            if (compareLength <= 0)\r\n                compareLength = minArray;\r\n            else\r\n                compareLength = Math.Min(minArray, compareLength);\r\n\r\n            // If any of the elements are not equal, skip out.   \r\n            for (int i = 0; i < compareLength; ++i)\r\n                if (array1[i] != array2[i])\r\n                    return false;\r\n\r\n            // They're both the same length and the elements are all   \r\n            // equal so consider the arrays to be equal.   \r\n            return true;\r\n        }\r\n\r\n        //PHP's non-standard base64 used in converting md5 binary crypt() into chars\r\n        //0 ... 63 => ascii - 64\r\n        //aka bin_to_ascii ((c) >= 38 ? ((c) - 38 + 'a') : (c) >= 12 ? ((c) - 12 + 'A') : (c) + '.')\r\n        private static byte[] itoa64 = System.Text.Encoding.ASCII.GetBytes(\"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\");\r\n\r\n        private static void to64(MemoryStream stream, UInt32 v, int n)\r\n        {\r\n            while (--n >= 0)\r\n            {\r\n                stream.WriteByte(itoa64[v & 0x3f]);\r\n                v >>= 6;\r\n            }\r\n        }\r\n\r\n        private static byte[] MD5MagicString = System.Text.Encoding.ASCII.GetBytes(\"$1$\");\r\n        private static PhpBytes DoMD5Password(byte[] key, PhpBytes password)\r\n        {\r\n            MD5CryptoServiceProvider ctx = new MD5CryptoServiceProvider(), ctx1 = new MD5CryptoServiceProvider();\r\n            MemoryStream result = new MemoryStream();\r\n            byte[] final = new byte[16];\r\n\r\n            int startOffset = 0, endOffset = 0;\r\n            /* If it starts with the magic string, then skip that */\r\n            if (ByteArrayEquals(key, MD5MagicString, MD5MagicString.Length))\r\n                startOffset += MD5MagicString.Length;\r\n\r\n            /* It stops at the first '$', max InternalMD5Key chars */\r\n            for (endOffset = startOffset; key[endOffset] != '\\0' && key[endOffset] != '$' && endOffset < (startOffset + InternalMD5Key); ++endOffset)\r\n                continue;\r\n            int keyLength = endOffset - startOffset;\r\n\r\n            // PHP puts the relevant salt characters in the beginning\r\n            result.Write(MD5MagicString, 0, MD5MagicString.Length);\r\n            result.Write(key, startOffset, keyLength);\r\n            result.Write(System.Text.Encoding.ASCII.GetBytes(new char[] { '$' }), 0, 1);\r\n\r\n            ctx.Initialize();\r\n            /* The password first, since that is what is most unknown */\r\n            ctx.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0);\r\n            ctx.TransformBlock(MD5MagicString, 0, MD5MagicString.Length, null, 0);\r\n            ctx.TransformBlock(key, startOffset, keyLength, null, 0);\r\n\r\n            ctx1.Initialize();\r\n            /* Then just as many characters of the MD5(pw,salt,pw) */\r\n            ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0);\r\n            ctx1.TransformBlock(key, startOffset, keyLength, null, 0);\r\n            ctx1.TransformFinalBlock(password.ReadonlyData, 0, password.Length);\r\n            Array.Copy(ctx1.Hash, final, final.Length);\r\n\r\n            for (int pl = password.Length; pl > 0; pl -= 16)\r\n                ctx.TransformBlock(final, 0, pl > 16 ? 16 : pl, null, 0);\r\n\r\n            //Clear the data\r\n            for (int i = 0; i < final.Length; ++i)\r\n                final[i] = 0;\r\n\r\n            // \"Then something really weird...\", per zend PHP - what a ridiculous waste of CPU cycles\r\n            byte[] zeroByte = new byte[1] { 0 };\r\n            for (int i = password.Length; i != 0; i >>= 1)\r\n            {\r\n                if ((i & 1) != 0)\r\n                    ctx.TransformBlock(zeroByte, 0, 1, null, 0);\r\n                else\r\n                    ctx.TransformBlock(password.ReadonlyData, 0, 1, null, 0);\r\n            }\r\n\r\n            ctx.TransformFinalBlock(ArrayUtils.EmptyBytes, 0, 0);\r\n            Array.Copy(ctx.Hash, final, final.Length);\r\n\r\n            /* Per md5crypt.c, again ridiculous but we want to keep consistent \"\r\n            * And now, just to make sure things don't run too fast. On a 60 MHz\r\n            * Pentium this takes 34 msec, so you would need 30 seconds to build\r\n            * a 1000 entry dictionary... \"\r\n            */\r\n            for (int i = 0; i < 1000; ++i)\r\n            {\r\n                ctx1.Initialize();\r\n\r\n                if ((i & 1) != 0)\r\n                    ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0);\r\n                else\r\n                    ctx1.TransformBlock(final, 0, final.Length, null, 0);\r\n\r\n                if ((i % 3) != 0)\r\n                    ctx1.TransformBlock(key, startOffset, keyLength, null, 0);\r\n\r\n                if ((i % 7) != 0)\r\n                    ctx1.TransformBlock(password.ReadonlyData, 0, password.Length, null, 0);\r\n\r\n                if ((i & 1) != 0)\r\n                    ctx1.TransformFinalBlock(final, 0, final.Length);\r\n                else\r\n                    ctx1.TransformFinalBlock(password.ReadonlyData, 0, password.Length);\r\n\r\n                Array.Copy(ctx1.Hash, final, final.Length);\r\n            }\r\n\r\n            to64(result, ((UInt32)final[0] << 16) | ((UInt32)final[6] << 8) | (UInt32)final[12], 4);\r\n            to64(result, ((UInt32)final[1] << 16) | ((UInt32)final[7] << 8) | (UInt32)final[13], 4);\r\n            to64(result, ((UInt32)final[2] << 16) | ((UInt32)final[8] << 8) | (UInt32)final[14], 4);\r\n            to64(result, ((UInt32)final[3] << 16) | ((UInt32)final[9] << 8) | (UInt32)final[15], 4);\r\n            to64(result, ((UInt32)final[4] << 16) | ((UInt32)final[10] << 8) | (UInt32)final[5], 4);\r\n            to64(result, (UInt32)final[11], 2);\r\n\r\n            return new PhpBytes(result.ToArray());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Encrypts a string (one-way) with given key.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string of bytes to encrypt</param>\r\n        /// <param name=\"salt\">The key.</param>\r\n        /// <returns>The encrypted string.</returns>\r\n        [ImplementsFunction(\"crypt\")]\r\n        public static PhpBytes Encrypt(PhpBytes str, PhpBytes salt)\r\n        {\r\n            if (str == null) str = PhpBytes.Empty;\r\n\r\n            Stream stream = new System.IO.MemoryStream(str.ReadonlyData);\r\n\r\n            bool usemd5 = (salt == null) || (salt.Length == 0) || ByteArrayEquals(salt.ReadonlyData, MD5MagicString, MD5MagicString.Length);\r\n            int requiredKeyLength = usemd5 ? MaxMD5Key : MaxDESKey;\r\n\r\n            byte[] key = new byte[requiredKeyLength];\r\n            int saltLength = requiredKeyLength;\r\n\r\n            DES des = new DESCryptoServiceProvider();\r\n\r\n            // prepare the key if salt is provided:\r\n            if ((salt != null) && (salt.Length > 0))\r\n            {\r\n                //Fill with $'s first, same as zend PHP\r\n                Array.Copy(System.Text.Encoding.ASCII.GetBytes(new String('$', requiredKeyLength)), key, requiredKeyLength);\r\n\r\n                saltLength = System.Math.Min(requiredKeyLength, salt.Length);\r\n                Array.Copy(salt.ReadonlyData, key, saltLength);\r\n            }\r\n            else\r\n                Array.Copy(des.Key, key, InternalMD5Key);\t//Random 8-byte sequence\r\n\r\n            if (usemd5)\r\n            {\r\n                return DoMD5Password(key, str);\r\n            }\r\n            else\r\n            {\r\n                MemoryStream result = new MemoryStream();\r\n                des.IV = new byte[8];\r\n                des.Key = key;\r\n\r\n                ICryptoTransform transform = des.CreateEncryptor(des.Key, des.IV);\r\n                CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Read);\r\n\r\n                // PHP puts the relevant salt characters in the beginning\r\n                result.Write(key, 0, saltLength);\r\n\r\n                byte[] buffer = new byte[256];\r\n                int rd;\r\n\r\n                while ((rd = cs.Read(buffer, 0, buffer.Length)) > 0)\r\n                {\r\n                    int i;\r\n                    for (i = 0; i < rd; ++i)\r\n                    {\r\n                        switch (i % 3)\r\n                        {\r\n                            case 0:\r\n                                result.WriteByte(itoa64[buffer[i] >> 2]);\r\n                                break;\r\n                            case 1:\r\n                                result.WriteByte(itoa64[((buffer[i - 1] & 0x3) << 4) | (buffer[i] >> 4)]);\r\n                                break;\r\n                            case 2:\r\n                                result.WriteByte(itoa64[((buffer[i - 1] & 0xF) << 2) | (buffer[i] >> 6)]);\r\n                                result.WriteByte(itoa64[buffer[i] & 0x3F]);\r\n                                break;\r\n                        }\r\n                    }\r\n                    //Leftover bits\r\n                    switch (i % 3)\r\n                    {\r\n                        case 1:\r\n                            result.WriteByte(itoa64[((buffer[i - 1] & 0x3) << 4)]);\r\n                            break;\r\n                        case 2:\r\n                            result.WriteByte(itoa64[((buffer[i - 1] & 0xF) << 2)]);\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                return new PhpBytes(result.ToArray());\r\n            }\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n\r\n        #region strrev, strspn, strcspn\r\n\r\n        /// <summary>\r\n        /// Reverses the given string.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The string to be reversed.</param>\r\n        /// <returns>The reversed string or empty string if <paramref name=\"obj\"/> is null.</returns>\r\n        [ImplementsFunction(\"strrev\")]\r\n        [PureFunction]\r\n        public static object Reverse(object obj)\r\n        {\r\n            PhpBytes bytes;\r\n            if ((bytes = obj as PhpBytes) != null)\r\n            {\r\n                return Reverse(bytes);\r\n            }\r\n            else\r\n            {\r\n                return Reverse(PHP.Core.Convert.ObjectToString(obj));\r\n            }\r\n        }\r\n\r\n        internal static PhpBytes Reverse(PhpBytes bytes)\r\n        {\r\n            int length;\r\n            if ((length = bytes.Length) == 0)\r\n                return PhpBytes.Empty;\r\n\r\n            byte[] reversed = new byte[length];\r\n            byte[] data = bytes.ReadonlyData;\r\n\r\n            for (int i = 0, j = length - 1; j >= 0; j--, i++)\r\n                reversed[i] = data[j];\r\n\r\n            return new PhpBytes(reversed);\r\n        }\r\n\r\n        internal static string Reverse(string str)\r\n        {\r\n            if (String.IsNullOrEmpty(str))\r\n                return String.Empty;\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length, length);\r\n            result.Length = length;\r\n\r\n            for (int i = 0, j = length - 1; j >= 0; j--, i++)\r\n                result[i] = str[j];\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of an initial segment consisting entirely of specified characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <returns>\r\n        /// The length of the initial segment consisting entirely of characters in <paramref name=\"acceptedChars\"/>\r\n        /// or zero if any argument is null.\r\n        /// </returns>\r\n        [ImplementsFunction(\"strspn\")]\r\n        public static int StrSpn(string str, string acceptedChars)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, 0, int.MaxValue, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of a segment consisting entirely of specified characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <returns>\r\n        /// The length of the substring consisting entirely of characters in <paramref name=\"acceptedChars\"/> or \r\n        /// zero if any argument is null. Search starts from absolutized <paramref name=\"offset\"/>\r\n        /// (see <see cref=\"PhpMath.AbsolutizeRange\"/> where <c>length</c> is infinity).\r\n        /// </returns>\r\n        [ImplementsFunction(\"strspn\")]\r\n        public static int StrSpn(string str, string acceptedChars, int offset)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, offset, int.MaxValue, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of a segment consisting entirely of specified characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <param name=\"length\">The relativized length of the slice.</param>\r\n        /// <returns>\r\n        /// The length of the substring consisting entirely of characters in <paramref name=\"acceptedChars\"/> or \r\n        /// zero if any argument is null. Search starts from absolutized <paramref name=\"offset\"/>\r\n        /// (see <see cref=\"PhpMath.AbsolutizeRange\"/> and takes at most absolutized <paramref name=\"length\"/> characters.\r\n        /// </returns>\r\n        [ImplementsFunction(\"strspn\")]\r\n        public static int StrSpn(string str, string acceptedChars, int offset, int length)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, offset, length, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of an initial segment consisting entirely of any characters excpept for specified ones.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <returns>\r\n        /// The length of the initial segment consisting entirely of characters not in <paramref name=\"acceptedChars\"/>\r\n        /// or zero if any argument is null.\r\n        /// </returns>\r\n        [ImplementsFunction(\"strcspn\")]\r\n        public static int StrCSpn(string str, string acceptedChars)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, 0, int.MaxValue, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of a segment consisting entirely of any characters excpept for specified ones.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <returns>\r\n        /// The length of the substring consisting entirely of characters not in <paramref name=\"acceptedChars\"/> or \r\n        /// zero if any argument is null. Search starts from absolutized <paramref name=\"offset\"/>\r\n        /// (see <see cref=\"PhpMath.AbsolutizeRange\"/> where <c>length</c> is infinity).\r\n        /// </returns>\r\n        [ImplementsFunction(\"strcspn\")]\r\n        public static int StrCSpn(string str, string acceptedChars, int offset)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, offset, int.MaxValue, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a length of a segment consisting entirely of any characters except for specified ones.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be searched in.</param>\r\n        /// <param name=\"acceptedChars\">Accepted characters.</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <param name=\"length\">The relativized length of the slice.</param>\r\n        /// <returns>\r\n        /// The length of the substring consisting entirely of characters not in <paramref name=\"acceptedChars\"/> or \r\n        /// zero if any argument is null. Search starts from absolutized <paramref name=\"offset\"/>\r\n        /// (see <see cref=\"PhpMath.AbsolutizeRange\"/> and takes at most absolutized <paramref name=\"length\"/> characters.\r\n        /// </returns>\r\n        [ImplementsFunction(\"strcspn\")]\r\n        public static int StrCSpn(string str, string acceptedChars, int offset, int length)\r\n        {\r\n            return StrSpnInternal(str, acceptedChars, offset, length, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Internal version of <see cref=\"StrSpn\"/> (complement off) and <see cref=\"StrCSpn\"/> (complement on).\r\n        /// </summary>\r\n        internal static int StrSpnInternal(string str, string acceptedChars, int offset, int length, bool complement)\r\n        {\r\n            if (str == null || acceptedChars == null) return 0;\r\n\r\n            PhpMath.AbsolutizeRange(ref offset, ref length, str.Length);\r\n\r\n            char[] chars = acceptedChars.ToCharArray();\r\n            Array.Sort(chars);\r\n\r\n            int j = offset;\r\n\r\n            if (complement)\r\n            {\r\n                while (length > 0 && ArrayUtils.BinarySearch(chars, str[j]) < 0) { j++; length--; }\r\n            }\r\n            else\r\n            {\r\n                while (length > 0 && ArrayUtils.BinarySearch(chars, str[j]) >= 0) { j++; length--; }\r\n            }\r\n\r\n            return j - offset;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region explode, implode\r\n\r\n        /// <summary>\r\n        /// Splits a string by string separators.\r\n        /// </summary>\r\n        /// <param name=\"separator\">The substrings separator. Must not be empty.</param>\r\n        /// <param name=\"str\">The string to be split.</param>\r\n        /// <returns>The array of strings.</returns>\r\n        [ImplementsFunction(\"explode\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray Explode(string separator, string str)\r\n        {\r\n            return Explode(separator, str, Int32.MaxValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string by string separators with limited resulting array size.\r\n        /// </summary>\r\n        /// <param name=\"separator\">The substrings separator. Must not be empty.</param>\r\n        /// <param name=\"str\">The string to be split.</param>\r\n        /// <param name=\"limit\">\r\n        /// The maximum number of elements in the resultant array. Zero value is treated in the same way as 1.\r\n        /// If negative, then the number of separators found in the string + 1 is added to the limit.\r\n        /// </param>\r\n        /// <returns>The array of strings.</returns>\r\n        /// <remarks>\r\n        /// If <paramref name=\"str\"/> is empty an array consisting of exacty one empty string is returned.\r\n        /// If <paramref name=\"limit\"/> is zero\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if the <paramref name=\"separator\"/> is null or empty or if <paramref name=\"limit\"/>is not positive nor -1.</exception>\r\n        [ImplementsFunction(\"explode\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray Explode(string separator, string str, int limit)\r\n        {\r\n            // validate parameters:\r\n            if (String.IsNullOrEmpty(separator))\r\n            {\r\n                PhpException.InvalidArgument(\"separator\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                return null;\r\n            }\r\n\r\n            if (str == null) str = String.Empty;\r\n\r\n            bool last_part_is_the_rest = limit >= 0;\r\n\r\n            if (limit == 0)\r\n                limit = 1;\r\n            else if (limit < 0)\r\n                limit += SubstringCountInternal(str, separator, 0, str.Length) + 2;\r\n            \r\n            // splits <str> by <separator>:\r\n            int sep_len = separator.Length;\r\n            int i = 0;                        // start searching at this position\r\n            int pos;                          // found separator's first character position\r\n            PhpArray result = new PhpArray(); // creates integer-keyed array with default capacity\r\n\r\n            var/*!*/compareInfo = System.Globalization.CultureInfo.InvariantCulture.CompareInfo;\r\n\r\n            while (--limit > 0)\r\n            {\r\n                pos = compareInfo.IndexOf(str, separator, i, str.Length - i, System.Globalization.CompareOptions.Ordinal);\r\n\r\n                if (pos < 0) break; // not found\r\n\r\n                result.AddToEnd(str.Substring(i, pos - i)); // faster than Add()\r\n                i = pos + sep_len;\r\n            }\r\n\r\n            // Adds last chunk. If separator ends the string, it will add empty string (as PHP do).\r\n            if (i <= str.Length && last_part_is_the_rest)\r\n            {\r\n                result.AddToEnd(str.Substring(i));\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates items of an array into a string separating them by a glue.\r\n        /// </summary>\r\n        /// <param name=\"pieces\">The array to be impleded.</param>\r\n        /// <returns>The glued string.</returns>\r\n        [ImplementsFunction(\"join\")]\r\n        public static object JoinGeneric(PhpArray pieces)\r\n        {\r\n            return ImplodeGeneric(pieces);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates items of an array into a string separating them by a glue.\r\n        /// </summary>\r\n        /// <param name=\"pieces\">The array to be impleded.</param>\r\n        /// <param name=\"glue\">The glue string.</param>\r\n        /// <returns>The glued string.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if neither <paramref name=\"glue\"/> nor <paramref name=\"pieces\"/> is not null and of type <see cref=\"PhpArray\"/>.</exception>\r\n        [ImplementsFunction(\"join\")]\r\n        public static object JoinGeneric(object glue, object pieces)\r\n        {\r\n            return ImplodeGeneric(glue, pieces);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates items of an array into a string.\r\n        /// </summary>\r\n        /// <param name=\"pieces\">The <see cref=\"PhpArray\"/> to be imploded.</param>\r\n        /// <returns>The glued string.</returns>\r\n        [ImplementsFunction(\"implode\")]\r\n        public static object ImplodeGeneric(PhpArray pieces)\r\n        {\r\n            if (pieces == null)\r\n            {\r\n                PhpException.ArgumentNull(\"pieces\");\r\n                return null;\r\n            }\r\n\r\n            return Implode(\"\", pieces);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates items of an array into a string separating them by a glue.\r\n        /// </summary>\r\n        /// <param name=\"glue\">The glue of type <see cref=\"string\"/> or <see cref=\"PhpArray\"/> to be imploded.</param>\r\n        /// <param name=\"pieces\">The <see cref=\"PhpArray\"/> to be imploded or glue of type <see cref=\"string\"/>.</param>\r\n        /// <returns>The glued string.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if neither <paramref name=\"glue\"/> nor <paramref name=\"pieces\"/> is not null and of type <see cref=\"PhpArray\"/>.</exception>\r\n        [ImplementsFunction(\"implode\")]\r\n        public static object ImplodeGeneric(object glue, object pieces)\r\n        {\r\n            if (pieces != null && pieces.GetType() == typeof(PhpArray))\r\n                return Implode(glue, (PhpArray)pieces);\r\n\r\n            if (glue != null && glue.GetType() == typeof(PhpArray))\r\n                return Implode(pieces, (PhpArray)glue);\r\n\r\n            return ImplodeGenericEnumeration(glue, pieces);\r\n        }\r\n\r\n        private static object ImplodeGenericEnumeration(object glue, object pieces)\r\n        {\r\n            Core.Reflection.DObject dobj;\r\n            IEnumerable enumerable;\r\n\r\n            if ((dobj = pieces as Core.Reflection.DObject) != null && (enumerable = dobj.RealObject as IEnumerable) != null)\r\n                return Implode(glue, new PhpArray(enumerable));\r\n\r\n            if ((dobj = glue as Core.Reflection.DObject) != null && (enumerable = dobj.RealObject as IEnumerable) != null)\r\n                return Implode(pieces, new PhpArray(enumerable));\r\n\r\n            //\r\n            PhpException.InvalidArgument(\"pieces\");\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates items of an array into a string separating them by a glue.\r\n        /// </summary>\r\n        /// <param name=\"glue\">The glue string.</param>\r\n        /// <param name=\"pieces\">The enumeration to be imploded.</param>\r\n        /// <returns>The glued string.</returns>           \r\n        /// <remarks>\r\n        /// Items of <paramref name=\"pieces\"/> are converted to strings in the manner of PHP \r\n        /// (i.e. by <see cref=\"PHP.Core.Convert.ObjectToString\"/>).\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"pieces\"/> is null.</exception>\r\n        public static object Implode(object glue, PhpArray/*!*/pieces)\r\n        {\r\n            Debug.Assert(pieces != null);\r\n\r\n            // handle empty pieces:\r\n            if (pieces.Count == 0)\r\n                return string.Empty;\r\n\r\n            // check whether we have to preserve a binary string\r\n            bool binary = glue != null && glue.GetType() == typeof(PhpBytes);\r\n            if (!binary)    // try to find any binary string within pieces:\r\n                using (var x = pieces.GetFastEnumerator())\r\n                    while (x.MoveNext())\r\n                        if (x.CurrentValue != null && x.CurrentValue.GetType() == typeof(PhpBytes))\r\n                        {\r\n                            binary = true;\r\n                            break;\r\n                        }\r\n\r\n            // concatenate pieces and glue:\r\n\r\n            bool not_first = false;                       // not the first iteration\r\n\r\n            if (binary)\r\n            {\r\n                Debug.Assert(pieces.Count > 0);\r\n\r\n                PhpBytes gluebytes = PHP.Core.Convert.ObjectToPhpBytes(glue);\r\n                PhpBytes[] piecesBytes = new PhpBytes[pieces.Count + pieces.Count - 1]; // buffer of PhpBytes to be concatenated\r\n                int p = 0;\r\n                \r\n                 using (var x = pieces.GetFastEnumerator())\r\n                     while (x.MoveNext())\r\n                     {\r\n                         if (not_first) piecesBytes[p++] = gluebytes;\r\n                         else not_first = true;\r\n\r\n                         piecesBytes[p++] = PHP.Core.Convert.ObjectToPhpBytes(x.CurrentValue);\r\n                     }\r\n\r\n                 return PhpBytes.Concat(piecesBytes, 0, piecesBytes.Length);\r\n            }\r\n            else\r\n            {\r\n                string gluestr = PHP.Core.Convert.ObjectToString(glue);\r\n\r\n                StringBuilder result = new StringBuilder();\r\n\r\n                using (var x = pieces.GetFastEnumerator())\r\n                    while (x.MoveNext())\r\n                    {\r\n                        if (not_first) result.Append(gluestr);\r\n                        else not_first = true;\r\n\r\n                        result.Append(PHP.Core.Convert.ObjectToString(x.CurrentValue));\r\n                    }\r\n\r\n                return result.ToString();\r\n            }            \r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strtr, str_rot13\r\n\r\n        /// <summary>\r\n        /// Replaces specified characters in a string with another ones.\r\n        /// </summary>\r\n        /// <param name=\"str\">A string where to do the replacement.</param>\r\n        /// <param name=\"from\">Characters to be replaced.</param>\r\n        /// <param name=\"to\">Characters to replace those in <paramref name=\"from\"/> with.</param>\r\n        /// <returns>\r\n        /// A copy of <paramref name=\"str\"/> with all occurrences of each character in <paramref name=\"from\"/> \r\n        /// replaced by the corresponding character in <paramref name=\"to\"/>.\r\n        /// </returns>\r\n        /// <remarks>\r\n        /// <para>If <paramref name=\"from\"/> and <paramref name=\"to\"/> are different lengths, the extra characters \r\n        /// in the longer of the two are ignored.</para>\r\n        /// </remarks>\r\n        [ImplementsFunction(\"strtr\")]\r\n        [PureFunction]\r\n        public static string Translate(string str, string from, string to)\r\n        {\r\n            if (String.IsNullOrEmpty(str) || from == null || to == null) return String.Empty;\r\n\r\n            int min_length = Math.Min(from.Length, to.Length);\r\n            Dictionary<char, char> ht = new Dictionary<char, char>(min_length);\r\n\r\n            // adds chars to the hashtable:\r\n            for (int i = 0; i < min_length; i++)\r\n                ht[from[i]] = to[i];\r\n\r\n            // creates result builder:\r\n            StringBuilder result = new StringBuilder(str.Length, str.Length);\r\n            result.Length = str.Length;\r\n\r\n            // translates:\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                char c = str[i];\r\n                char h;\r\n                result[i] = ht.TryGetValue(c, out h) ? h : c;\r\n\r\n                // obsolete:\r\n                // object h = ht[c];\r\n                // result[i] = (h==null) ? c : h;\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares objects according to the length of their string representation\r\n        /// as the primary criteria and the alphabetical order as the secondary one.\r\n        /// </summary>\r\n        private sealed class StringLengthComparer : IComparer<string>\r\n        {\r\n            /// <summary>\r\n            /// Performs length and alphabetical comparability backwards (longer first).\r\n            /// </summary>\r\n            /// <param name=\"x\"></param>\r\n            /// <param name=\"y\"></param>\r\n            /// <returns></returns>\r\n            public int Compare(string x, string y)\r\n            {\r\n                int rv = x.Length - y.Length;\r\n                if (rv == 0) return -string.CompareOrdinal(x, y);\r\n                else return -rv;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces substrings according to a dictionary.\r\n        /// </summary>\r\n        /// <param name=\"str\">Input string.</param>\r\n        /// <param name=\"replacePairs\">\r\n        /// An dictionary that contains <see cref=\"string\"/> to <see cref=\"string\"/> replacement mapping.\r\n        /// </param>\r\n        /// <returns>A copy of str, replacing all substrings (looking for the longest possible match).</returns>\r\n        /// <remarks>This function will not try to replace stuff that it has already worked on.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if the <paramref name=\"replacePairs\"/> argument is null.</exception>\r\n        [ImplementsFunction(\"strtr\")]\r\n        [return: CastToFalse]\r\n        public static string Translate(string str, PhpArray replacePairs)\r\n        {\r\n            if (replacePairs == null)\r\n            {\r\n                PhpException.ArgumentNull(\"replacePairs\");\r\n                return null;\r\n            }\r\n\r\n            if (string.IsNullOrEmpty(str))\r\n                return String.Empty;\r\n\r\n            // sort replacePairs according to the key length, longer first\r\n            var count = replacePairs.Count;\r\n            var sortedkeys = new string[count];\r\n            var sortedValues = new string[count];\r\n\r\n            int i = 0;\r\n            var replacePairsEnum = replacePairs.GetFastEnumerator();\r\n            while (replacePairsEnum.MoveNext())\r\n            {\r\n                string key = replacePairsEnum.CurrentKey.ToString();\r\n                string value = Core.Convert.ObjectToString(replacePairsEnum.CurrentValue);\r\n\r\n                if (key.Length == 0)\r\n                {\r\n                    // TODO: an exception ?\r\n                    return null;\r\n                }\r\n\r\n                sortedkeys[i] = key;\r\n                sortedValues[i] = value;\r\n                i++;\r\n            }\r\n            Array.Sort<string, string>(sortedkeys, sortedValues, new StringLengthComparer());   // perform quick sort, much faster than SortedList\r\n\r\n            // perform replacement\r\n            StringBuilder result = new StringBuilder(str);\r\n            StringBuilder temp = new StringBuilder(str);\r\n            int length = str.Length;\r\n            int[] offset = new int[length];\r\n\r\n            for (i = 0; i < sortedkeys.Length; i++)\r\n            {\r\n                var key = sortedkeys[i];\r\n                int index = 0;\r\n\r\n                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\r\n                {\r\n                    var value = sortedValues[i];\r\n                    var keyLength = key.Length;\r\n                    int replaceAtIndex = index + offset[index];\r\n\r\n                    // replace occurrence in result\r\n                    result.Replace(index + offset[index], keyLength, value);\r\n\r\n                    // Pack the offset array (drop the items removed from temp)\r\n                    for (int j = index + keyLength; j < offset.Length; j++)\r\n                        offset[j - keyLength] = offset[j];\r\n\r\n                    // Ensure that we don't replace stuff that we already have worked on by\r\n                    // removing the replaced substring from temp.\r\n                    temp.Remove(index, keyLength);\r\n                    for (int j = index; j < length; j++) offset[j] += value.Length;\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// GetUserEntryPoint encode a string by shifting every letter (a-z, A-Z) by 13 places in the alphabet.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be encoded.</param>\r\n        /// <returns>The string with characters rotated by 13 places.</returns>\r\n        [ImplementsFunction(\"str_rot13\")]\r\n        [PureFunction]\r\n        public static string Rotate13(string str)\r\n        {\r\n            return Translate(str,\r\n                \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",\r\n                \"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM\");\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region substr, str_repeat\r\n\r\n        /// <summary>\r\n        /// Retrieves a substring from the given string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The source string (unicode or binary).</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <returns>The substring of the <paramref name=\"str\"/>.</returns>\r\n        /// <remarks>\r\n        /// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> where <c>length</c> is infinity.\r\n        /// </remarks>\r\n        [ImplementsFunction(\"substr\")]\r\n        [PureFunction]\r\n        [return: CastToFalse]\r\n        public static object Substring(object str, int offset)\r\n        {\r\n            return Substring(str, offset, int.MaxValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a substring from the given string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The source string (unicode or binary).</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice.</param>\r\n        /// <param name=\"length\">The relativized length of the slice.</param>\r\n        /// <returns>The substring of the <paramref name=\"str\"/>.</returns>\r\n        /// <remarks>\r\n        /// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and <paramref name=\"length\"/>.\r\n        /// </remarks>\r\n        [ImplementsFunction(\"substr\")]\r\n        [PureFunction]\r\n        [return: CastToFalse]\r\n        public static object Substring(object str, int offset, int length)\r\n        {\r\n            PhpBytes binstr = str as PhpBytes;\r\n            if (binstr != null)\r\n            {\r\n                if (binstr.Length == 0) return null;\r\n\r\n                PhpMath.AbsolutizeRange(ref offset, ref length, binstr.Length);\r\n\r\n                // string is shorter than offset to start substring\r\n                if (offset == binstr.Length) return null;\r\n\r\n                if (length == 0) return PhpBytes.Empty;\r\n\r\n                byte[] substring = new byte[length];\r\n\r\n                Buffer.BlockCopy(binstr.ReadonlyData, offset, substring, 0, length);\r\n\r\n                return new PhpBytes(substring);\r\n            }\r\n\r\n            string unistr = Core.Convert.ObjectToString(str);\r\n            if (unistr != null)\r\n            {\r\n                if (unistr == String.Empty) return null;\r\n\r\n                PhpMath.AbsolutizeRange(ref offset, ref length, unistr.Length);\r\n\r\n                // string is shorter than offset to start substring\r\n                if (offset == unistr.Length) return null;\r\n\r\n                if (length == 0) return String.Empty;\r\n\r\n                return unistr.Substring(offset, length);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Repeats a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string, can be both binary and unicode.</param>\r\n        /// <param name=\"count\">The number of times <paramref name=\"str\"/> should be repeated.</param>\r\n        /// <returns>The string where <paramref name=\"str\"/> is repeated <paramref name=\"count\"/> times.</returns>\r\n        /// <remarks>If <paramref name=\"str\"/> is <b>null</b> reference, the function will return an empty string.</remarks>   \r\n        /// <remarks>If <paramref name=\"count\"/> is set to 0, the function will return <b>null</b> reference.</remarks>   \r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"count\"/> is negative.</exception>\r\n        [ImplementsFunction(\"str_repeat\")]\r\n        [PureFunction]\r\n        public static object Repeat(object str, int count)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            if (count < 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"number_of_repetitions_negative\"));\r\n                return null;\r\n            }\r\n            if (count == 0) return null;\r\n\r\n            PhpBytes binstr = str as PhpBytes;\r\n            if (binstr != null)\r\n            {\r\n                byte[] result = new byte[binstr.Length * count];\r\n\r\n                for (int i = 0; i < count; i++) Buffer.BlockCopy(binstr.ReadonlyData, 0, result, binstr.Length * i, binstr.Length);\r\n\r\n                return new PhpBytes(result);\r\n            }\r\n\r\n            string unistr = Core.Convert.ObjectToString(str);\r\n            if (unistr != null)\r\n            {\r\n                StringBuilder result = new StringBuilder(count * unistr.Length);\r\n                while (count-- > 0) result.Append(unistr);\r\n\r\n                return result.ToString();\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region substr_count, substr_replace, substr_compare\r\n\r\n        #region substr_count internals\r\n\r\n        private static bool SubstringCountInternalCheck(string needle)\r\n        {\r\n            if (String.IsNullOrEmpty(needle))\r\n            {\r\n                PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n        private static bool SubstringCountInternalCheck(string haystack, int offset)\r\n        {\r\n            if (offset < 0)\r\n            {\r\n                PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"substr_count_offset_zero\"));\r\n                return false;\r\n            }\r\n            if (offset > haystack.Length)\r\n            {\r\n                PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"substr_count_offset_exceeds\", offset));\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n        private static bool SubstringCountInternalCheck(string haystack, int offset, int length)\r\n        {\r\n            if (!SubstringCountInternalCheck(haystack, offset))\r\n                return false;\r\n\r\n            if (length == 0)\r\n            {\r\n                PhpException.InvalidArgument(\"length\", LibResources.GetString(\"substr_count_zero_length\"));\r\n                return false;\r\n            }\r\n            if (offset + length > haystack.Length)\r\n            {\r\n                PhpException.InvalidArgument(\"length\", LibResources.GetString(\"substr_count_length_exceeds\", length));\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Count the number of substring occurrences. Expects correct argument values.\r\n        /// </summary>\r\n        internal static int SubstringCountInternal(string/*!*/ haystack, string/*!*/ needle, int offset, int end)\r\n        {\r\n            int result = 0;\r\n\r\n            if (needle.Length == 1)\r\n            {\r\n                while (offset < end)\r\n                {\r\n                    if (haystack[offset] == needle[0]) result++;\r\n                    offset++;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                while ((offset = haystack.IndexOf(needle, offset, end - offset)) != -1)\r\n                {\r\n                    offset += needle.Length;\r\n                    result++;\r\n                }\r\n            }\r\n            return result;\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// See <see cref=\"SubstringCount(string,string,int,int)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"substr_count\")]\r\n        [PureFunction]\r\n        [return: CastToFalse]\r\n        public static int SubstringCount(string haystack, string needle)\r\n        {\r\n            if (String.IsNullOrEmpty(haystack)) return 0;\r\n            if (!SubstringCountInternalCheck(needle)) return -1;\r\n\r\n            return SubstringCountInternal(haystack, needle, 0, haystack.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// See <see cref=\"SubstringCount(string,string,int,int)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"substr_count\")]\r\n        [PureFunction]\r\n        [return: CastToFalse]\r\n        public static int SubstringCount(string haystack, string needle, int offset)\r\n        {\r\n            if (String.IsNullOrEmpty(haystack)) return 0;\r\n            if (!SubstringCountInternalCheck(needle)) return -1;\r\n            if (!SubstringCountInternalCheck(haystack, offset)) return -1;\r\n\r\n            return SubstringCountInternal(haystack, needle, offset, haystack.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Count the number of substring occurrences.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string.</param>\r\n        /// <param name=\"needle\">The substring.</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice. Zero if missing in overloads</param>\r\n        /// <param name=\"length\">The relativized length of the slice. Infinity if missing in overloads.</param>\r\n        /// <returns>The number of <paramref name=\"needle\"/> occurences in <paramref name=\"haystack\"/>.</returns>\r\n        /// <example>\"aba\" has one occurence in \"ababa\".</example>\r\n        /// <remarks>\r\n        /// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and <paramref name=\"length\"/>.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"needle\"/> is null.</exception>\r\n        [ImplementsFunction(\"substr_count\")]\r\n        [PureFunction]\r\n        [return: CastToFalse]\r\n        public static int SubstringCount(string haystack, string needle, int offset, int length)\r\n        {\r\n            if (String.IsNullOrEmpty(haystack)) return 0;\r\n            if (!SubstringCountInternalCheck(needle)) return -1;\r\n            if (!SubstringCountInternalCheck(haystack, offset, length)) return -1;\r\n\r\n            return SubstringCountInternal(haystack, needle, offset, offset + length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// See <see cref=\"SubstringReplace(object,object,object,object)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"substr_replace\")]\r\n        [PureFunction]\r\n        public static object SubstringReplace(object subject, object replacement, object offset)\r\n        {\r\n            return SubstringReplace(subject, replacement, offset, int.MaxValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces a portion of a string or multiple strings with another string.\r\n        /// </summary>\r\n        /// <param name=\"subject\">The subject of replacement (can be an array of subjects).</param>\r\n        /// <param name=\"replacement\">The replacement string (can be array of replacements).</param>\r\n        /// <param name=\"offset\">The relativized offset of the first item of the slice (can be array of offsets).</param>\r\n        /// <param name=\"length\">The relativized length of the slice (can be array of lengths).</param>\r\n        /// <returns>\r\n        /// Either the <paramref name=\"subject\"/> with a substring replaced by <paramref name=\"replacement\"/> if it is a string\r\n        /// or an array containing items of the <paramref name=\"subject\"/> with substrings replaced by <paramref name=\"replacement\"/>\r\n        /// and indexed by integer keys starting from 0. If <paramref name=\"replacement\"/> is an array, multiple replacements take place.\r\n        /// </returns>\r\n        /// <remarks>\r\n        /// See <see cref=\"PhpMath.AbsolutizeRange\"/> for details about <paramref name=\"offset\"/> and <paramref name=\"length\"/>.\r\n        /// Missing <paramref name=\"length\"/> is considered to be infinity.\r\n        /// If <paramref name=\"offset\"/> and <paramref name=\"length\"/> conversion results in position\r\n        /// less than or equal to zero and greater than or equal to string length, the replacement is prepended and appended, respectively.\r\n        /// </remarks>\r\n        [ImplementsFunction(\"substr_replace\")]\r\n        [PureFunction]\r\n        public static object SubstringReplace(object subject, object replacement, object offset, object length)\r\n        {\r\n            IDictionary dict_subject, dict_replacement, dict_offset, dict_length;\r\n            string[] replacements = null, subjects = null;\r\n            int[] offsets = null, lengths = null;\r\n            int int_offset = 0, int_length = 0;\r\n            string str_replacement = null;\r\n\r\n            // prepares string array of subjects:\r\n            if ((dict_subject = subject as IDictionary) != null)\r\n            {\r\n                subjects = new string[dict_subject.Count];\r\n                int i = 0;\r\n                foreach (object item in dict_subject.Values)\r\n                    subjects[i++] = Core.Convert.ObjectToString(item);\r\n            }\r\n            else\r\n            {\r\n                subjects = new string[] { Core.Convert.ObjectToString(subject) };\r\n            }\r\n\r\n            // prepares string array of replacements:\r\n            if ((dict_replacement = replacement as IDictionary) != null)\r\n            {\r\n                replacements = new string[dict_replacement.Count];\r\n                int i = 0;\r\n                foreach (object item in dict_replacement.Values)\r\n                    replacements[i++] = Core.Convert.ObjectToString(item);\r\n            }\r\n            else\r\n            {\r\n                str_replacement = Core.Convert.ObjectToString(replacement);\r\n            }\r\n\r\n            // prepares integer array of offsets:\r\n            if ((dict_offset = offset as IDictionary) != null)\r\n            {\r\n                offsets = new int[dict_offset.Count];\r\n                int i = 0;\r\n                foreach (object item in dict_offset.Values)\r\n                    offsets[i++] = Core.Convert.ObjectToInteger(item);\r\n            }\r\n            else\r\n            {\r\n                int_offset = Core.Convert.ObjectToInteger(offset);\r\n            }\r\n\r\n            // prepares integer array of lengths:\r\n            if ((dict_length = length as IDictionary) != null)\r\n            {\r\n                lengths = new int[dict_length.Count];\r\n                int i = 0;\r\n                foreach (object item in dict_length.Values)\r\n                    lengths[i++] = Core.Convert.ObjectToInteger(item);\r\n            }\r\n            else\r\n            {\r\n                int_length = Core.Convert.ObjectToInteger(length);\r\n            }\r\n\r\n            for (int i = 0; i < subjects.Length; i++)\r\n            {\r\n                if (dict_offset != null) int_offset = (i < offsets.Length) ? offsets[i] : 0;\r\n                if (dict_length != null) int_length = (i < lengths.Length) ? lengths[i] : subjects[i].Length;\r\n                if (dict_replacement != null) str_replacement = (i < replacements.Length) ? replacements[i] : \"\";\r\n\r\n                subjects[i] = SubstringReplace(subjects[i], str_replacement, int_offset, int_length);\r\n            }\r\n\r\n            if (dict_subject != null)\r\n                return new PhpArray(subjects);\r\n            else\r\n                return subjects[0];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs substring replacements on subject.\r\n        /// </summary>\r\n        private static string SubstringReplace(string subject, string replacement, int offset, int length)\r\n        {\r\n            PhpMath.AbsolutizeRange(ref offset, ref length, subject.Length);\r\n            return new StringBuilder(subject).Remove(offset, length).Insert(offset, replacement).ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case sensitive comparison of <paramref name=\"mainStr\"/> from position <paramref name=\"offset\"/> \r\n        /// with <paramref name=\"str\"/>. \r\n        /// </summary>\r\n        /// <seealso cref=\"SubstringCompare(string,string,int,int,bool)\"/>.\r\n        [ImplementsFunction(\"substr_compare\")]\r\n        [PureFunction]\r\n        public static int SubstringCompare(string mainStr, string str, int offset)\r\n        {\r\n            return SubstringCompare(mainStr, str, offset, Int32.MaxValue, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case sensitive comparison of <paramref name=\"mainStr\"/> from position <paramref name=\"offset\"/> \r\n        /// with <paramref name=\"str\"/> up to the <paramref name=\"length\"/> characters. \r\n        /// </summary>\r\n        /// <seealso cref=\"SubstringCompare(string,string,int,int,bool)\"/>.\r\n        [ImplementsFunction(\"substr_compare\")]\r\n        [PureFunction]\r\n        public static int SubstringCompare(string mainStr, string str, int offset, int length)\r\n        {\r\n            return SubstringCompare(mainStr, str, offset, length, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares substrings.\r\n        /// </summary>\r\n        /// <param name=\"mainStr\">A string whose substring to compare with <paramref name=\"str\"/>.</param>\r\n        /// <param name=\"str\">The second operand of the comparison.</param>\r\n        /// <param name=\"offset\">An offset in <paramref name=\"mainStr\"/> where to start. Negative value means zero. Offsets beyond <paramref name=\"mainStr\"/> means its length.</param>\r\n        /// <param name=\"length\">A maximal number of characters to compare. Non-positive values means infinity.</param>\r\n        /// <param name=\"ignoreCase\">Whether to ignore case.</param>\r\n        [ImplementsFunction(\"substr_compare\")]\r\n        [PureFunction]\r\n        public static int SubstringCompare(string mainStr, string str, int offset, int length, bool ignoreCase)\r\n        {\r\n            if (mainStr == null) mainStr = \"\";\r\n            if (str == null) str = \"\";\r\n            if (length <= 0) length = Int32.MaxValue;\r\n            if (offset < 0) offset = 0;\r\n            if (offset > mainStr.Length) offset = mainStr.Length;\r\n\r\n            return String.Compare(mainStr, offset, str, 0, length, ignoreCase ? StringComparison.CurrentCultureIgnoreCase : StringComparison.CurrentCulture);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region str_replace, str_ireplace\r\n\r\n        #region ReplaceInternal\r\n\r\n        /// <summary>\r\n        /// A class that enables customized replacement of substrings.\r\n        /// Optimized for multiple replacements.\r\n        /// </summary>\r\n        internal class SubstringReplacer\r\n        {\r\n            private Regex regex;\r\n            private int count;\r\n            private MatchEvaluator evaluator;\r\n            private string replacement;\r\n            private string search;\r\n\r\n            public SubstringReplacer(string/*!*/ search, string/*!*/ replacement, bool ignoreCase)\r\n            {\r\n                Debug.Assert(!string.IsNullOrEmpty(search), \"Searched string shouln't be empty\");\r\n\r\n                if (ignoreCase)\r\n                {\r\n                    this.regex = new Regex(Regex.Escape(search), RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Singleline);\r\n                    this.evaluator = new MatchEvaluator(Evaluator);\r\n                }\r\n                this.search = search;\r\n                this.replacement = replacement;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Called for each matched substring.\r\n            /// </summary>\r\n            /// <returns>Replacement.</returns>\r\n            private string Evaluator(Match match)\r\n            {\r\n                count++;\r\n                return replacement;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Replaces all substrings of <paramref name=\"subject\"/> specified in constructor parameter <c>search</c> \r\n            /// with <see cref=\"replacement\"/>. If <paramref name=\"replacementCount\"/> is non-negative,\r\n            /// advances it by the number of replacements. Retuns resulting string.\r\n            /// </summary>\r\n            public string Replace(string/*!*/ subject, ref int replacementCount)\r\n            {\r\n                string result;\r\n                if (regex == null)\r\n                {\r\n                    if (replacementCount >= 0)\r\n                        replacementCount += SubstringCountInternal(subject, search, 0, subject.Length);\r\n\r\n                    if (search.Length != 1 || replacement.Length != 1)\r\n                        result = subject.Replace(search, replacement);\r\n                    else\r\n                        result = subject.Replace(search[0], replacement[0]);\r\n                }\r\n                else\r\n                {\r\n                    this.count = 0;\r\n                    result = regex.Replace(subject, evaluator);\r\n\r\n                    if (replacementCount >= 0)\r\n                        replacementCount += this.count;\r\n                }\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /*\r\n        /// <summary>\r\n        /// Get enumeration of given parameter.\r\n        /// </summary>\r\n        /// <param name=\"objOrDictionary\">Single object or IDictionary of objects.</param>\r\n        /// <returns>IEnumerable of object/objects.</returns>\r\n        private static IEnumerable ValuesEnumerator(object objOrDictionary)\r\n        {\r\n            IDictionary dict;\r\n            if ((dict = objOrDictionary as IDictionary) != null)\r\n                return dict.Values;\r\n            else\r\n                return new object[] { objOrDictionary ?? string.Empty };\r\n        }\r\n        */\r\n\r\n        private class InifiniteEnumerator : IEnumerator\r\n        {\r\n            private readonly object obj;\r\n            public InifiniteEnumerator(object obj)\r\n            {\r\n                this.obj = obj;\r\n            }\r\n\r\n            #region IEnumerator Members\r\n\r\n            public object Current\r\n            {\r\n                get { return obj; }\r\n            }\r\n\r\n            public bool MoveNext()\r\n            {\r\n                return true;\r\n            }\r\n\r\n            public void Reset()\r\n            {\r\n\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        internal static string ReplaceInternal(string/*!*/search, string replace, string/*!*/subject, bool ignoreCase, ref int count)\r\n        {\r\n            SubstringReplacer replacer = new SubstringReplacer(search, replace, ignoreCase);\r\n            return replacer.Replace(subject, ref count);\r\n        }\r\n\r\n        internal static string ReplaceInternal(IEnumerable searches, IEnumerator replacements_enum, string/*!*/subject, bool ignoreCase, ref int count)\r\n        {\r\n            //IEnumerator replacements_enum = replacements.GetEnumerator();\r\n            foreach (object s in searches)\r\n            {\r\n                string search_str = Core.Convert.ObjectToString(s);\r\n                string replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty;\r\n\r\n                if (search_str != string.Empty)\r\n                {\r\n                    SubstringReplacer replacer = new SubstringReplacer(search_str, replacement_str, ignoreCase);\r\n                    subject = replacer.Replace(subject, ref count);\r\n\r\n                    if (subject == string.Empty)\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return subject;\r\n        }\r\n\r\n        internal static PhpArray ReplaceInternal(string search, string replace, ref DictionaryEntry[] subjects, bool ignoreCase, ref int count)\r\n        {\r\n            SubstringReplacer replacer = new SubstringReplacer(search, replace, ignoreCase);\r\n\r\n            PhpArray result = new PhpArray();\r\n\r\n            foreach (var entry in subjects)\r\n            {\r\n                // subjects has already been converted to CLR strings:\r\n                string subject_str = entry.Value as string;\r\n                result.Add(entry.Key, string.IsNullOrEmpty(subject_str) ? entry.Value : replacer.Replace(subject_str, ref count));\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static PhpArray ReplaceInternal(IEnumerable searches, IEnumerator replacements_enum, ref DictionaryEntry[] subjects, bool ignoreCase, ref int count)\r\n        {\r\n            // performs replacement - subjects are enumerated once per each search-replacement pair;\r\n            // this order of loops enables to reuse instances of SubstringReplacer:\r\n            //IEnumerator replacements_enum = replacements.GetEnumerator();\r\n            foreach (object s in searches)\r\n            {\r\n                string search_str = Core.Convert.ObjectToString(s);\r\n                string replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty;\r\n\r\n                // skips empty strings:\r\n                if (search_str != string.Empty)\r\n                {\r\n                    SubstringReplacer replacer = new SubstringReplacer(search_str, replacement_str, ignoreCase);\r\n\r\n                    for (int i = 0; i < subjects.Length; i++)\r\n                    {\r\n                        // subjects has already been converted to CLR strings:\r\n                        string subject_str = subjects[i].Value as string;\r\n                        if (subject_str != null)\r\n                        {\r\n                            subjects[i].Value = replacer.Replace(subject_str, ref count);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            // copy into PhpArray\r\n            return ToPhpArray(ref subjects);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convert array of DictionaryEntry into PhpArray.\r\n        /// </summary>\r\n        /// <param name=\"subjects\"></param>\r\n        /// <returns></returns>\r\n        internal static PhpArray ToPhpArray(ref DictionaryEntry[]/*!*/subjects)\r\n        {\r\n            Debug.Assert(subjects != null);\r\n\r\n            var result = new PhpArray(subjects.Length);\r\n            foreach (var entry in subjects)\r\n                result.Add(entry.Key, entry.Value);\r\n            return result;\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Returns first item from values of given collection converted to string or empty string.\r\n        ///// </summary>\r\n        ///// <param name=\"dict\"></param>\r\n        ///// <returns></returns>\r\n        //internal static string FirstOrEmpty(IDictionary/*!*/dict)\r\n        //{\r\n        //    if (dict.Count > 0)\r\n        //    {\r\n        //        var dict_enum = dict.Values.GetEnumerator();\r\n\r\n        //        if (dict_enum.MoveNext())\r\n        //            return Core.Convert.ObjectToString(dict_enum.Current);\r\n        //    }\r\n\r\n        //    return string.Empty;\r\n        //}\r\n\r\n\r\n        /// <summary>\r\n        /// Implements <c>str_replace</c> and <c>str_ireplace</c> functions.\r\n        /// </summary>\r\n        internal static object ReplaceInternal(object search, object replace, object subject, bool ignoreCase, ref int count)\r\n        {\r\n            if (subject == null)\r\n                return null;\r\n\r\n            IDictionary searches = search as IDictionary;\r\n            IDictionary replacements = replace as IDictionary;\r\n            IDictionary subjects = subject as IDictionary;\r\n\r\n            //\r\n            // several cases of search/replace/subject combinations\r\n            //\r\n\r\n            if (subjects == null)\r\n            {\r\n                // string str_replace(..., ... , {string}, ...)\r\n                string subject_str = Core.Convert.ObjectToString(subject);\r\n                if (subject_str == string.Empty)\r\n                    return string.Empty;\r\n\r\n                if (searches == null)\r\n                {\r\n                    string search_str = Core.Convert.ObjectToString(search);\r\n                    if (search_str == string.Empty)\r\n                        return subject_str;\r\n\r\n                    ////\r\n                    //if (replacements == null)// str_replace({string},{string},{string},...);\r\n                    //    return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), subject_str, ignoreCase, ref count);\r\n                    //else// str_replace({string},{array}[0],{string},...);\r\n                    //    return ReplaceInternal(search_str, FirstOrEmpty(replacements), subject_str, ignoreCase, ref count);\r\n                    return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), subject_str, ignoreCase, ref count);\r\n                }\r\n                else\r\n                {\r\n                    if (replacements == null)// str_replace({array},{string[1]},{string},...);\r\n                        return ReplaceInternal(searches.Values, new InifiniteEnumerator(Core.Convert.ObjectToString(replace)), subject_str, ignoreCase, ref count);\r\n                    else// str_replace({array},{array},{string},...);\r\n                        return ReplaceInternal(searches.Values, replacements.Values.GetEnumerator(), subject_str, ignoreCase, ref count);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // converts scalars (and nulls) to strings:\r\n                var subjectEntries = new DictionaryEntry[subjects.Count];\r\n                int i = 0;\r\n                foreach (DictionaryEntry entry in subjects)\r\n                {\r\n                    subjectEntries[i] = entry;\r\n\r\n                    if (PhpVariable.IsScalar(entry.Value))\r\n                        subjectEntries[i].Value = Core.Convert.ObjectToString(entry.Value);\r\n                    else if (entry.Value == null)\r\n                        subjectEntries[i].Value = string.Empty;\r\n\r\n                    i++;\r\n                }\r\n\r\n                // PhpArray str_replace(..., ... , {array}, ...)\r\n                if (searches == null)\r\n                {\r\n                    string search_str = Core.Convert.ObjectToString(search);\r\n                    if (search_str == string.Empty)\r\n                        return ToPhpArray(ref subjectEntries);\r\n\r\n                    ////\r\n                    //if (replacements == null)// str_replace({string},{string},{array},...);\r\n                    //    return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), ref subjectEntries, ignoreCase, ref count);\r\n                    //else// str_replace({string},{array}[0],{array},...);\r\n                    //    return ReplaceInternal(search_str, FirstOrEmpty(replacements), ref subjectEntries, ignoreCase, ref count);\r\n                    return ReplaceInternal(search_str, Core.Convert.ObjectToString(replace), ref subjectEntries, ignoreCase, ref count);\r\n                }\r\n                else\r\n                {\r\n                    if (replacements == null)// str_replace({array},{string[1]},{array},...);\r\n                        return ReplaceInternal(searches.Values, new InifiniteEnumerator(Core.Convert.ObjectToString(replace)), ref subjectEntries, ignoreCase, ref count);\r\n                    else// str_replace({array},{array},{array},...);\r\n                        return ReplaceInternal(searches.Values, replacements.Values.GetEnumerator(), ref subjectEntries, ignoreCase, ref count);\r\n                }\r\n            }\r\n\r\n            /*\r\n            \r\n            //\r\n            // previous (common) implementation:\r\n            //\r\n            \r\n\t\t\t// assembles a dictionary of subject strings:\r\n\t\t\tbool return_array;\r\n            DictionaryEntry[] subjects;\r\n            \r\n            IDictionary dict;\r\n            if ((dict = subject as IDictionary) != null)\r\n\t\t\t{\r\n\t\t\t\tsubjects = new DictionaryEntry[dict.Count];\r\n\r\n\t\t\t\t// converts scalars to strings:\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tforeach (DictionaryEntry entry in dict)\r\n\t\t\t\t{\r\n\t\t\t\t\tsubjects[i] = entry;\r\n\r\n\t\t\t\t\tif (PhpVariable.IsScalar(entry.Value))\r\n\t\t\t\t\t\tsubjects[i].Value = Core.Convert.ObjectToString(entry.Value);\r\n\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t\treturn_array = true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tsubjects = new DictionaryEntry[] { new DictionaryEntry(string.Empty, Core.Convert.ObjectToString(subject)) };\r\n\t\t\t\treturn_array = false;\r\n\t\t\t}\r\n\r\n\t\t\t// performs replacement - subjects are enumerated once per each search-replacement pair;\r\n\t\t\t// this order of loops enables to reuse instances of SubstringReplacer:\r\n\t\t\tIEnumerator replacements_enum = replacements.GetEnumerator();\r\n\t\t\tforeach (object s in searches)\r\n\t\t\t{\r\n\t\t\t\tstring search_str = Core.Convert.ObjectToString(s);\r\n\t\t\t\tstring replacement_str = (replacements_enum.MoveNext()) ? Core.Convert.ObjectToString(replacements_enum.Current) : string.Empty;\r\n\r\n                ReplaceInplace(search_str, replacement_str, ref subjects, ignoreCase, ref count);\r\n\t\t\t}\r\n\r\n\t\t\t// constructs resulting array or single item from subjects:\r\n\t\t\tif (return_array)\r\n\t\t\t{\r\n\t\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\t\tforeach (DictionaryEntry entry in subjects)\r\n\t\t\t\t\tresult.Add(entry.Key, entry.Value);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn subjects[0].Value;\r\n\t\t\t}*/\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Replaces all occurrences of the <paramref name=\"searched\"/> string \r\n        /// with the <paramref name=\"replacement\"/> string counting the number of occurrences.\r\n        /// </summary>\r\n        /// <param name=\"searched\">\r\n        /// The substring(s) to replace. Can be string or <see cref=\"IDictionary\"/> of strings.\r\n        /// </param>\r\n        /// <param name=\"replacement\">\r\n        /// The string(s) to replace <paramref name=\"searched\"/>. Can be string or <see cref=\"IDictionary\"/> of strings.\r\n        /// </param>\r\n        /// <param name=\"subject\">\r\n        /// The string or <see cref=\"IDictionary\"/> of strings to perform the search and replace with.\r\n        /// </param>\r\n        /// <param name=\"count\">\r\n        /// The number of matched and replaced occurrences.\r\n        /// </param>\r\n        /// <returns>\r\n        /// A string or an <see cref=\"IDictionary\"/> with all occurrences of \r\n        /// <paramref name=\"searched\"/> in <paramref name=\"subject\"/> replaced\r\n        /// with the given <paramref name=\"replacement\"/> value.\r\n        /// </returns>\r\n        [ImplementsFunction(\"str_replace\")]\r\n        [PureFunction]\r\n        public static object Replace(object searched, object replacement, object subject, out int count)\r\n        {\r\n            count = 0;\r\n            return ReplaceInternal(searched, replacement, subject, false, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces all occurrences of the <paramref name=\"searched\"/> string \r\n        /// with the <paramref name=\"replacement\"/> string.\r\n        /// <seealso cref=\"Replace(object,object,object,out int)\"/>\r\n        /// </summary>\r\n        [ImplementsFunction(\"str_replace\")]\r\n        [PureFunction]\r\n        public static object Replace(object searched, object replacement, object subject)\r\n        {\r\n            int count = -1;\r\n            return ReplaceInternal(searched, replacement, subject, false, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case insensitive version of <see cref=\"Replace(object,object,object,out int)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"str_ireplace\")]\r\n        [PureFunction]\r\n        public static object ReplaceInsensitively(object searched, object replacement, object subject, out int count)\r\n        {\r\n            count = 0;\r\n            return ReplaceInternal(searched, replacement, subject, true, ref count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case insensitive version of <see cref=\"Replace(object,object,object)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"str_ireplace\")]\r\n        [PureFunction]\r\n        public static object ReplaceInsensitively(object searched, object replacement, object subject)\r\n        {\r\n            int count = -1;\r\n            return ReplaceInternal(searched, replacement, subject, true, ref count);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region str_shuffle, str_split\r\n\r\n        /// <summary>\r\n        /// Randomly shuffles a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to shuffle.</param>\r\n        /// <returns>One random permutation of <paramref name=\"str\"/>.</returns>\r\n        [ImplementsFunction(\"str_shuffle\")]\r\n        public static string Shuffle(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            Random generator = PhpMath.Generator;\r\n\r\n            int count = str.Length;\r\n            if (count <= 1) return str;\r\n\r\n            StringBuilder newstr = new StringBuilder(str);\r\n\r\n            // Takes n-th character from the string at random with probability 1/i\r\n            // and exchanges it with the one on the i-th position.\r\n            // Thus a random permutation is formed in the second part of the string (from i to count)\r\n            // and the set of remaining characters is stored in the first part.\r\n            for (int i = count - 1; i > 0; i--)\r\n            {\r\n                int n = generator.Next(i + 1);\r\n\r\n                char ch = newstr[i];\r\n                newstr[i] = newstr[n];\r\n                newstr[n] = ch;\r\n            }\r\n\r\n            return newstr.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a string to an array.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to split.</param>\r\n        /// <returns>An array with keys being character indeces and values being characters.</returns>\r\n        [ImplementsFunction(\"str_split\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray Split(string str)\r\n        {\r\n            return Split(str, 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a string to an array.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The string to split.</param>\r\n        /// <param name=\"splitLength\">Length of chunks <paramref name=\"obj\"/> should be split into.</param>\r\n        /// <returns>An array with keys being chunk indeces and values being chunks of <paramref name=\"splitLength\"/>\r\n        /// length.</returns>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"splitLength\"/> parameter is not positive (Warning).</exception>\r\n        [ImplementsFunction(\"str_split\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray Split(object obj, int splitLength)\r\n        {\r\n            if (splitLength < 1)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"segment_length_not_positive\"));\r\n                return null;\r\n            }\r\n            if (obj == null)\r\n                return new PhpArray();\r\n\r\n            PhpBytes bytes;\r\n            if ((bytes = obj as PhpBytes) != null)\r\n            {\r\n                int length = bytes.Length;\r\n                PhpArray result = new PhpArray(length / splitLength + 1, 0);\r\n\r\n                // add items of length splitLength\r\n                int i;\r\n                for (i = 0; i < (length - splitLength + 1); i += splitLength)\r\n                {\r\n                    byte[] chunk = new byte[splitLength];\r\n                    Array.Copy(bytes.ReadonlyData, i, chunk, 0, chunk.Length);\r\n                    result.Add(new PhpBytes(chunk));\r\n                }\r\n\r\n                // add the last item\r\n                if (i < length)\r\n                {\r\n                    byte[] chunk = new byte[length - i];\r\n                    Array.Copy(bytes.ReadonlyData, i, chunk, 0, chunk.Length);\r\n                    result.Add(new PhpBytes(chunk));\r\n                }\r\n\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                return Split(PHP.Core.Convert.ObjectToString(obj), splitLength);\r\n            }\r\n        }\r\n\r\n        private static PhpArray Split(string str, int splitLength)\r\n        {\r\n            int length = str.Length;\r\n            PhpArray result = new PhpArray(length / splitLength + 1, 0);\r\n\r\n            // add items of length splitLength\r\n            int i;\r\n            for (i = 0; i < (length - splitLength + 1); i += splitLength)\r\n            {\r\n                result.Add(str.Substring(i, splitLength));\r\n            }\r\n\r\n            // add the last item\r\n            if (i < length) result.Add(str.Substring(i));\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region quoted_printable_decode, quoted_printable_encode\r\n\r\n        /// <summary>\r\n        /// Maximum length of line according to quoted-printable specification.\r\n        /// </summary>\r\n        internal const int PHP_QPRINT_MAXL = 75;\r\n\r\n        /// <summary>\r\n        /// Converts a quoted-printable string into (an 8-bit) string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The quoted-printable string.</param>\r\n        /// <returns>The 8-bit string corresponding to the decoded <paramref name=\"str\"/>.</returns>\r\n        /// <remarks>Based on the implementation in quot_print.c PHP source file.</remarks>\r\n        [ImplementsFunction(\"quoted_printable_decode\")]\r\n        public static string QuotedPrintableDecode(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            Encoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n            MemoryStream stream = new MemoryStream();\r\n            StringBuilder result = new StringBuilder(str.Length / 2);\r\n\r\n            int i = 0;\r\n            while (i < str.Length)\r\n            {\r\n                char c = str[i];\r\n\r\n                if (c == '=')\r\n                {\r\n                    if (i + 2 < str.Length && Uri.IsHexDigit(str[i + 1]) && Uri.IsHexDigit(str[i + 2]))\r\n                    {\r\n                        stream.WriteByte((byte)((Uri.FromHex(str[i + 1]) << 4) + Uri.FromHex(str[i + 2])));\r\n                        i += 3;\r\n                    }\r\n                    else  // check for soft line break according to RFC 2045\r\n                    {\r\n                        int k = 1;\r\n\r\n                        // Possibly, skip spaces/tabs at the end of line\r\n                        while (i + k < str.Length && (str[i + k] == ' ' || str[i + k] == '\\t')) k++;\r\n\r\n                        // End of line reached\r\n                        if (i + k >= str.Length)\r\n                        {\r\n                            i += k;\r\n                        }\r\n                        else if (str[i + k] == '\\r' && i + k + 1 < str.Length && str[i + k + 1] == '\\n')\r\n                        {\r\n                            // CRLF\r\n                            i += k + 2;\r\n                        }\r\n                        else if (str[i + k] == '\\r' || str[i + k] == '\\n')\r\n                        {\r\n                            // CR or LF\r\n                            i += k + 1;\r\n                        }\r\n                        else\r\n                        {\r\n                            // flush stream\r\n                            if (stream.Position > 0)\r\n                            {\r\n                                result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position));\r\n                                stream.Seek(0, SeekOrigin.Begin);\r\n                            }\r\n                            result.Append(str[i++]);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // flush stream\r\n                    if (stream.Position > 0)\r\n                    {\r\n                        result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position));\r\n                        stream.Seek(0, SeekOrigin.Begin);\r\n                    }\r\n\r\n                    result.Append(c);\r\n                    i++;\r\n                }\r\n            }\r\n\r\n            // flush stream\r\n            if (stream.Position > 0)\r\n            {\r\n                result.Append(encoding.GetChars(stream.GetBuffer(), 0, (int)stream.Position));\r\n                stream.Seek(0, SeekOrigin.Begin);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convert a 8 bit string to a quoted-printable string\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <returns>The quoted-printable string.</returns>\r\n        /// <remarks>Based on the implementation in quot_print.c PHP source file.</remarks>\r\n        [ImplementsFunction(\"quoted_printable_encode\")]\r\n        public static string QuotedPrintableEncode(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            Encoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n            MemoryStream stream = new MemoryStream();\r\n\r\n            StringBuilder result = new StringBuilder(3 * str.Length + 3 * (((3 * str.Length) / PHP_QPRINT_MAXL) + 1));\r\n            string hex = \"0123456789ABCDEF\";\r\n\r\n            byte[] bytes = new byte[encoding.GetMaxByteCount(1)];\r\n            int encodedChars;\r\n\r\n\r\n            int i = 0;\r\n            int j = 0;\r\n            int charsOnLine = 0;\r\n            char c;\r\n            while (i < str.Length)\r\n            {\r\n                c = str[i];\r\n\r\n                if (c == '\\r' && i + 1 < str.Length && str[i + 1] == '\\n')\r\n                {\r\n                    result.Append(\"\\r\\n\");\r\n                    charsOnLine = 0;\r\n                    i += 2;\r\n                }\r\n                else\r\n                {\r\n                    \r\n                    if (char.IsControl(c) ||\r\n                        c >= 0x7F || // is not ascii char\r\n                        (c == '=') ||\r\n                        ((c == ' ') && i + 1 < str.Length && (str[i + 1] == '\\r')))\r\n                    {\r\n\r\n                        if ((charsOnLine += 3) > PHP_QPRINT_MAXL)\r\n                        {\r\n                            result.Append(\"=\\r\\n\");\r\n                            charsOnLine = 3;\r\n                        }\r\n\r\n                        // encode c(==str[i])\r\n                        encodedChars = encoding.GetBytes(str, i, 1, bytes, 0);\r\n\r\n                        for (j = 0; j < encodedChars; ++j)\r\n                        {\r\n                            result.Append('=');\r\n                            result.Append(hex[bytes[j] >> 4]);\r\n                            result.Append(hex[bytes[j] & 0xf]);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n\r\n                        if ((++charsOnLine) > PHP_QPRINT_MAXL)\r\n                        {\r\n                            result.Append(\"=\\r\\n\");\r\n                            charsOnLine = 1;\r\n                        }\r\n                        result.Append(c);\r\n                    }\r\n\r\n                    ++i;\r\n                }\r\n            }\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region addslashes, addcslashes, quotemeta\r\n\r\n        /// <summary>\r\n        /// Adds backslashes before characters depending on current configuration.\r\n        /// </summary>\r\n        /// <param name=\"str\">Data to process.</param>\r\n        /// <returns>\r\n        /// The string or string of bytes where some characters are preceded with the backslash character.\r\n        /// </returns>\r\n        /// <remarks>\r\n        /// If <see cref=\"LocalConfiguration.VariablesSection.QuoteInDbManner\"/> (\"magic_quotes_sybase\" in PHP) option \r\n        /// is set then '\\0' characters are slashed and single quotes are replaced with two single quotes. Otherwise,\r\n        /// '\\'', '\"', '\\\\' and '\\0 characters are slashed.\r\n        /// </remarks>\r\n        [ImplementsFunction(\"addslashes\")]\r\n        public static string AddSlashes(string str)\r\n        {\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            if (context.Config.Variables.QuoteInDbManner)\r\n                return StringUtils.AddDbSlashes(str);\r\n            else\r\n                return StringUtils.AddCSlashes(str, true, true);\r\n        }\r\n\r\n        /// <include file='Doc/Strings.xml' path='docs/method[@name=\"AddCSlashes\"]/*'/>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"str\"/> interval is invalid.</exception>\r\n        [ImplementsFunction(\"addcslashes_unicode\")]\r\n        public static string AddCSlashes(string str, string mask)\r\n        {\r\n            if (str == null) return String.Empty;\r\n            if (mask == null) return str;\r\n\r\n            return AddCSlashesInternal(str, str, mask);\r\n        }\r\n\r\n        /// <include file='Doc/Strings.xml' path='docs/method[@name=\"AddCSlashes\"]/*'/>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"str\"/> interval is invalid.</exception>\r\n        [ImplementsFunction(\"addcslashes\")]\r\n        public static string AddCSlashesAscii(string str, string mask)\r\n        {\r\n            if (string.IsNullOrEmpty(str)) return String.Empty;\r\n            if (string.IsNullOrEmpty(mask)) return str;\r\n\r\n            //Encoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n\r\n            //// to guarantee the same result both the string and the mask has to be converted to bytes:\r\n            //string c = ArrayUtils.ToString(encoding.GetBytes(mask));\r\n            //string s = ArrayUtils.ToString(encoding.GetBytes(str));\r\n\r\n            string c = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(mask));\r\n            string s = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(str));\r\n\r\n            // the result contains ASCII characters only, so there is no need to conversions:\r\n            return AddCSlashesInternal(str, s, c);\r\n        }\r\n\r\n        /// <param name=\"translatedStr\">A sequence of chars or ints from which to take character codes.</param>\r\n        /// <param name=\"translatedMask\">A mask containing codes.</param>\r\n        /// <param name=\"str\">A string to be slashed.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"translatedStr\"/> interval is invalid.</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"translatedStr\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n        internal static string AddCSlashesInternal(string str, string translatedStr, string translatedMask)\r\n        {\r\n            Debug.Assert(str != null && translatedMask != null && translatedStr != null && str.Length == translatedStr.Length);\r\n\r\n            // prepares the mask:\r\n            CharMap charmap = InitializeCharMap();\r\n            try\r\n            {\r\n                charmap.AddUsingMask(translatedMask);\r\n            }\r\n            catch (IndexOutOfRangeException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"too_big_unicode_character\"));\r\n                return null;\r\n            }\r\n\r\n            const string cslashed_chars = \"abtnvfr\";\r\n\r\n            StringBuilder result = new StringBuilder();\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                //char c = translatedStr[i];\r\n\r\n                if (charmap.Contains(translatedStr[i]))\r\n                {\r\n                    result.Append('\\\\');\r\n\r\n                    char c = str[i];    // J: translatedStr and translatedMask are used only in context of CharMap, later we are working with original str only\r\n\r\n                    // performs conversion to C representation:\r\n                    if (c < '\\u0020' || c > '\\u007f')\r\n                    {\r\n                        if (c >= '\\u0007' && c <= '\\u000d')\r\n                            result.Append(cslashed_chars[c - '\\u0007']);\r\n                        else\r\n                            result.Append(System.Convert.ToString((int)c, 8));  // 0x01234567\r\n                    }\r\n                    else\r\n                        result.Append(c);\r\n                }\r\n                else\r\n                    result.Append(str[i]);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// A map of following characters: {'.', '\\', '+', '*', '?', '[', '^', ']', '(', '$', ')'}.\r\n        /// </summary>\r\n        internal static readonly CharMap metaCharactersMap = new CharMap(new uint[] { 0, 0x08f20001, 0x0000001e });\r\n\r\n        /// <summary>\r\n        /// Adds backslashes before following characters: {'.', '\\', '+', '*', '?', '[', '^', ']', '(', '$', ')'}\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be processed.</param>\r\n        /// <returns>The string where said characters are backslashed.</returns>\r\n        [ImplementsFunction(\"quotemeta\")]\r\n        public static string QuoteMeta(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length);\r\n\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                char c = str[i];\r\n                if (metaCharactersMap.Contains(c)) result.Append('\\\\');\r\n                result.Append(c);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region stripslashes, stripcslashes\r\n\r\n        /// <summary>\r\n        /// Unquote string quoted with <see cref=\"AddSlashes\"/>.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to unquote.</param>\r\n        /// <returns>The unquoted string.</returns>\r\n        [ImplementsFunction(\"stripslashes\")]\r\n        public static string StripSlashes(string str)\r\n        {\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            if (context.Config.Variables.QuoteInDbManner)\r\n                return StringUtils.StripDbSlashes(str);\r\n            else\r\n                return StringUtils.StripCSlashes(str);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a string with backslashes stripped off. Recognizes \\a, \\b, \\f, \\n, \\r, \\t, \\v, \\\\, octal\r\n        /// and hexadecimal representation.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to strip.</param>\r\n        /// <returns>The stripped string.</returns>\r\n        [ImplementsFunction(\"stripcslashes\")]\r\n        public static string StripCSlashesAscii(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            Encoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n            const char escape = '\\\\';\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length);\r\n            bool state1 = false;\r\n            byte[] bA1 = new byte[1];\r\n\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                char c = str[i];\r\n                if (c == escape && state1 == false)\r\n                {\r\n                    state1 = true;\r\n                    continue;\r\n                }\r\n\r\n                if (state1 == true)\r\n                {\r\n                    switch (c)\r\n                    {\r\n                        case 'a': result.Append('\\a'); break;\r\n                        case 'b': result.Append('\\b'); break;\r\n                        case 'f': result.Append('\\f'); break;\r\n                        case 'n': result.Append('\\n'); break;\r\n                        case 'r': result.Append('\\r'); break;\r\n                        case 't': result.Append('\\t'); break;\r\n                        case 'v': result.Append('\\v'); break;\r\n                        case '\\\\': result.Append('\\\\'); break;\r\n\r\n                        // hex ASCII code\r\n                        case 'x':\r\n                            {\r\n                                int code = 0;\r\n                                if (i + 1 < length && Uri.IsHexDigit(str[i + 1])) // first digit\r\n                                {\r\n                                    code = Uri.FromHex(str[i + 1]);\r\n                                    i++;\r\n                                    if (i + 1 < length && Uri.IsHexDigit(str[i + 1])) // second digit\r\n                                    {\r\n                                        code = (code << 4) + Uri.FromHex(str[i + 1]);\r\n                                        i++;\r\n                                    }\r\n\r\n                                    bA1[0] = (byte)code;\r\n                                    result.Append(encoding.GetChars(bA1)[0]);\r\n                                    break;\r\n                                }\r\n                                goto default;\r\n                            }\r\n\r\n                        // octal ASCII code\r\n                        default:\r\n                            {\r\n                                int code = 0, j = 0;\r\n                                for (; j < 3 && i < length && str[i] >= '0' && str[i] <= '8'; i++, j++)\r\n                                {\r\n                                    code = (code << 3) + (str[i] - '0');\r\n                                }\r\n\r\n                                if (j > 0)\r\n                                {\r\n                                    i--;\r\n                                    bA1[0] = (byte)code;\r\n                                    result.Append(encoding.GetChars(bA1)[0]);\r\n                                }\r\n                                else result.Append(c);\r\n                                break;\r\n                            }\r\n                    }\r\n\r\n                    state1 = false;\r\n                }\r\n                else result.Append(c);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region htmlspecialchars, htmlspecialchars_decode\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars\")]\r\n        public static string HtmlSpecialCharsEncode(string str)\r\n        {\r\n            return HtmlSpecialCharsEncode(str, 0, str.Length, QuoteStyle.Compatible, \"ISO-8859-1\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars\")]\r\n        public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle)\r\n        {\r\n            return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, \"ISO-8859-1\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion. This parameter is ignored.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars\")]\r\n        public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle, string charSet)\r\n        {\r\n            return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, charSet);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion. This parameter is ignored.</param>\r\n        /// <param name=\"doubleEncode\">When double_encode is turned off PHP will not encode existing html entities, the default is to convert everything.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars\")]\r\n        public static string HtmlSpecialCharsEncode(string str, QuoteStyle quoteStyle, string charSet, bool doubleEncode /* = true */)\r\n        {\r\n            if (!doubleEncode)\r\n                PhpException.ArgumentValueNotSupported(\"doubleEncode\", doubleEncode); // TODO: is doubleEncode is false\r\n\r\n            return HtmlSpecialCharsEncode(str, 0, str.Length, quoteStyle, charSet);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters of substring to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string.</param>\r\n        /// <param name=\"index\">First character of the string to covert.</param>\r\n        /// <param name=\"length\">Length of the substring to covert.</param>\r\n        /// <returns>The converted substring.</returns>\r\n        internal static string HtmlSpecialChars(string str, int index, int length)\r\n        {\r\n            return HtmlSpecialCharsEncode(str, index, length, QuoteStyle.Compatible, \"ISO-8859-1\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters of substring to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string.</param>\r\n        /// <param name=\"index\">First character of the string to covert.</param>\r\n        /// <param name=\"length\">Length of the substring to covert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion. This parameter is ignored.</param>\r\n        /// <returns>The converted substring.</returns>\r\n        internal static string HtmlSpecialCharsEncode(string str, int index, int length, QuoteStyle quoteStyle, string charSet)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            Debug.Assert(index + length <= str.Length);\r\n\r\n            StringBuilder result = new StringBuilder(length);\r\n\r\n            // quote style is anded to emulate PHP behavior (any value is allowed):\r\n            string single_quote = (quoteStyle & QuoteStyle.SingleQuotes) != 0 ? \"&#039;\" : \"'\";\r\n            string double_quote = (quoteStyle & QuoteStyle.DoubleQuotes) != 0 ? \"&quot;\" : \"\\\"\";\r\n\r\n            for (int i = index; i < index + length; i++)\r\n            {\r\n                char c = str[i];\r\n                switch (c)\r\n                {\r\n                    case '&': result.Append(\"&amp;\"); break;\r\n                    case '\"': result.Append(double_quote); break;\r\n                    case '\\'': result.Append(single_quote); break;\r\n                    case '<': result.Append(\"&lt;\"); break;\r\n                    case '>': result.Append(\"&gt;\"); break;\r\n                    default: result.Append(c); break;\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Converts HTML entities (&amp;amp;, &amp;quot;, &amp;lt;, and &amp;gt;) \r\n        /// in a specified string to the respective characters. \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be converted.</param>\r\n        /// <returns>String with converted entities.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars_decode\")]\r\n        public static string HtmlSpecialCharsDecode(string str)\r\n        {\r\n            return HtmlSpecialCharsDecode(str, QuoteStyle.Compatible);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts HTML entities (&amp;amp;, &amp;lt;, &amp;gt;, and optionally &amp;quot; and &amp;#039;) \r\n        /// in a specified string to the respective characters. \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be converted.</param>\r\n        /// <param name=\"quoteStyle\">Which quote entities to convert.</param>\r\n        /// <returns>String with converted entities.</returns>\r\n        [ImplementsFunction(\"htmlspecialchars_decode\")]\r\n        public static string HtmlSpecialCharsDecode(string str, QuoteStyle quoteStyle)\r\n        {\r\n            if (str == null) return null;\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            bool dq = (quoteStyle & QuoteStyle.DoubleQuotes) != 0;\r\n            bool sq = (quoteStyle & QuoteStyle.SingleQuotes) != 0;\r\n\r\n            int i = 0;\r\n            while (i < str.Length)\r\n            {\r\n                char c = str[i];\r\n                if (c == '&')\r\n                {\r\n                    i++;\r\n                    if (i + 4 < str.Length && str[i + 4] == ';')                   // quot; #039;\r\n                    {\r\n                        if (dq && str[i] == 'q' && str[i + 1] == 'u' && str[i + 2] == 'o' && str[i + 3] == 't') { i += 5; result.Append('\"'); continue; }\r\n                        if (sq && str[i] == '#' && str[i + 1] == '0' && str[i + 2] == '3' && str[i + 3] == '9') { i += 5; result.Append('\\''); continue; }\r\n                    }\r\n\r\n                    if (i + 3 < str.Length && str[i + 3] == ';')                   // amp; #39;\r\n                    {\r\n                        if (str[i] == 'a' && str[i + 1] == 'm' && str[i + 2] == 'p') { i += 4; result.Append('&'); continue; }\r\n                        if (sq && str[i] == '#' && str[i + 1] == '3' && str[i + 2] == '9') { i += 4; result.Append('\\''); continue; }\r\n                    }\r\n\r\n                    if (i + 2 < str.Length && str[i + 2] == ';' && str[i + 1] == 't')  // lt; gt;\r\n                    {\r\n                        if (str[i] == 'l') { i += 3; result.Append('<'); continue; }\r\n                        if (str[i] == 'g') { i += 3; result.Append('>'); continue; }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    i++;\r\n                }\r\n\r\n                result.Append(c);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region htmlentities, get_html_translation_table, html_entity_decode\r\n\r\n        /// <summary>\r\n        /// Default <c>encoding</c> used in <c>htmlentities</c>.\r\n        /// </summary>\r\n        private const string DefaultHtmlEntitiesCharset = \"UTF-8\";\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The converted string.</returns>\r\n        /// <remarks>This method is identical to <see cref=\"HtmlSpecialChars\"/> in all ways, except with\r\n        /// <b>htmlentities</b> (<see cref=\"EncodeHtmlEntities\"/>), all characters that have HTML character entity equivalents are\r\n        /// translated into these entities.</remarks>\r\n        [ImplementsFunction(\"htmlentities\")]\r\n        public static string EncodeHtmlEntities(object str)\r\n        {\r\n            return EncodeHtmlEntities(str, QuoteStyle.HtmlEntitiesDefault, DefaultHtmlEntitiesCharset, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <returns>The converted string.</returns>\r\n        /// <remarks>This method is identical to <see cref=\"HtmlSpecialChars\"/> in all ways, except with\r\n        /// <b>htmlentities</b> (<see cref=\"EncodeHtmlEntities\"/>), all characters that have HTML character entity equivalents are\r\n        /// translated into these entities.</remarks>\r\n        [ImplementsFunction(\"htmlentities\")]\r\n        public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle)\r\n        {\r\n            return EncodeHtmlEntities(str, quoteStyle, DefaultHtmlEntitiesCharset, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion.</param>\r\n        /// <returns>The converted string.</returns>\r\n        /// <remarks>This method is identical to <see cref=\"HtmlSpecialChars\"/> in all ways, except with\r\n        /// <b>htmlentities</b> (<see cref=\"EncodeHtmlEntities\"/>), all characters that have HTML character entity equivalents are\r\n        /// translated into these entities.</remarks>\r\n        [ImplementsFunction(\"htmlentities\")]\r\n        public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet)\r\n        {\r\n            return EncodeHtmlEntities(str, quoteStyle, charSet, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts special characters to HTML entities.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion. This parameter is ignored.</param>\r\n        /// <param name=\"doubleEncode\">When it is turned off existing HTML entities will not be encoded. The default is to convert everything.</param>\r\n        /// <returns>The converted string.</returns>\r\n        /// <remarks>This method is identical to <see cref=\"HtmlSpecialChars\"/> in all ways, except with\r\n        /// <b>htmlentities</b> (<see cref=\"EncodeHtmlEntities\"/>), all characters that have HTML character entity equivalents are\r\n        /// translated into these entities.</remarks>\r\n        [ImplementsFunction(\"htmlentities\")]\r\n        public static string EncodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet, bool doubleEncode)\r\n        {\r\n            try\r\n            {\r\n                var s = ObjectToString(str, charSet);\r\n                return EncodeHtmlEntities(s, quoteStyle, doubleEncode);\r\n            }\r\n            catch (ArgumentException ex)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, ex.Message);\r\n                return string.Empty;\r\n            }\r\n        }\r\n\r\n        private static string EncodeHtmlEntities(string str, QuoteStyle quoteStyle, bool doubleEncode)\r\n        {\r\n            if (string.IsNullOrEmpty(str))\r\n                return string.Empty;\r\n\r\n            if (!doubleEncode)\r\n            {   // existing HTML entities will not be double encoded // TODO: do it nicely\r\n                str = DecodeHtmlEntities(str, quoteStyle);\r\n            }\r\n\r\n            // if only double quotes should be encoded, we can use HttpUtility.HtmlEncode right away:\r\n            if ((quoteStyle & QuoteStyle.BothQuotes) == QuoteStyle.DoubleQuotes)\r\n            {\r\n                return HttpUtility.HtmlEncode(str);\r\n            }\r\n\r\n            // quote style is anded to emulate PHP behavior (any value is allowed):\r\n            string single_quote = (quoteStyle & QuoteStyle.SingleQuotes) != 0 ? \"&#039;\" : \"'\";\r\n            string double_quote = (quoteStyle & QuoteStyle.DoubleQuotes) != 0 ? \"&quot;\" : \"\\\"\";\r\n\r\n            StringBuilder str_builder = new StringBuilder(str.Length);\r\n            StringWriter result = new StringWriter(str_builder);\r\n\r\n            // convert ' and \" manually, rely on HttpUtility.HtmlEncode for everything else\r\n            char[] quotes = new char[] { '\\'', '\\\"' };\r\n            int old_index = 0, index = 0;\r\n            while (index < str.Length && (index = str.IndexOfAny(quotes, index)) >= 0)\r\n            {\r\n                result.Write(HttpUtility.HtmlEncode(str.Substring(old_index, index - old_index)));\r\n\r\n                if (str[index] == '\\'') result.Write(single_quote);\r\n                else result.Write(double_quote);\r\n\r\n                old_index = ++index;\r\n            }\r\n            if (old_index < str.Length) result.Write(HttpUtility.HtmlEncode(str.Substring(old_index)));\r\n\r\n            result.Flush();\r\n            return str_builder.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the translation table used by <see cref=\"HtmlSpecialChars\"/> and <see cref=\"EncodeHtmlEntities\"/>. \r\n        /// </summary>\r\n        /// <param name=\"table\">Type of the table that should be returned.</param>\r\n        /// <returns>The table.</returns>\r\n        [ImplementsFunction(\"get_html_translation_table\")]\r\n        public static PhpArray GetHtmlTranslationTable(HtmlEntitiesTable table)\r\n        {\r\n            return GetHtmlTranslationTable(table, QuoteStyle.Compatible);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the translation table used by <see cref=\"HtmlSpecialChars\"/> and <see cref=\"EncodeHtmlEntities\"/>. \r\n        /// </summary>\r\n        /// <param name=\"table\">Type of the table that should be returned.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <returns>The table.</returns>\r\n        [ImplementsFunction(\"get_html_translation_table\")]\r\n        public static PhpArray GetHtmlTranslationTable(HtmlEntitiesTable table, QuoteStyle quoteStyle)\r\n        {\r\n            PhpArray result = new PhpArray();\r\n            if (table == HtmlEntitiesTable.SpecialChars)\r\n            {\r\n                // return the table used with HtmlSpecialChars\r\n                if ((quoteStyle & QuoteStyle.SingleQuotes) != 0) result.Add(\"\\'\", \"&#039;\");\r\n                if ((quoteStyle & QuoteStyle.DoubleQuotes) != 0) result.Add(\"\\\"\", \"&quot;\");\r\n\r\n                result.Add(\"&\", \"&amp;\");\r\n                result.Add(\"<\", \"&lt;\");\r\n                result.Add(\">\", \"&gt;\");\r\n            }\r\n            else\r\n            {\r\n                // return the table used with HtmlEntities\r\n                if ((quoteStyle & QuoteStyle.SingleQuotes) != 0) result.Add(\"\\'\", \"&#039;\");\r\n                if ((quoteStyle & QuoteStyle.DoubleQuotes) != 0) result.Add(\"\\\"\", \"&quot;\");\r\n\r\n                for (char ch = (char)0; ch < 0x100; ch++)\r\n                {\r\n                    if (ch != '\\'' && ch != '\\\"')\r\n                    {\r\n                        string str = ch.ToString();\r\n                        string enc = HttpUtility.HtmlEncode(str);\r\n\r\n                        // if the character was encoded:\r\n                        if (str != enc) result.Add(str, enc);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts all HTML entities to their applicable characters. \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"html_entity_decode\")]\r\n        public static string DecodeHtmlEntities(object str)\r\n        {\r\n            return DecodeHtmlEntities(str, QuoteStyle.Compatible, DefaultHtmlEntitiesCharset);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts all HTML entities to their applicable characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"html_entity_decode\")]\r\n        public static string DecodeHtmlEntities(object str, QuoteStyle quoteStyle)\r\n        {\r\n            return DecodeHtmlEntities(str, quoteStyle, DefaultHtmlEntitiesCharset);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts all HTML entities to their applicable characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"quoteStyle\">Quote conversion.</param>\r\n        /// <param name=\"charSet\">The character set used in conversion.</param>\r\n        /// <returns>The converted string.</returns>\r\n        [ImplementsFunction(\"html_entity_decode\")]\r\n        public static string DecodeHtmlEntities(object str, QuoteStyle quoteStyle, string charSet)\r\n        {\r\n            try\r\n            {\r\n                string s = ObjectToString(str, charSet);\r\n                return DecodeHtmlEntities(s, quoteStyle);\r\n            }\r\n            catch (ArgumentException ex)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, ex.Message);\r\n                return string.Empty;\r\n            }\r\n        }\r\n\r\n        private static string DecodeHtmlEntities(string str, QuoteStyle quoteStyle)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            // if both quotes should be decoded, we can use HttpUtility.HtmlDecode right away:\r\n            if ((quoteStyle & QuoteStyle.BothQuotes) == QuoteStyle.BothQuotes)\r\n            {\r\n                return HttpUtility.HtmlDecode(str);\r\n            }\r\n\r\n            StringBuilder str_builder = new StringBuilder(str.Length);\r\n            StringWriter result = new StringWriter(str_builder);\r\n\r\n            // convert &#039;, &#39; and &quot; manually, rely on HttpUtility.HtmlDecode for everything else\r\n            int old_index = 0, index = 0;\r\n            while (index < str.Length && (index = str.IndexOf('&', index)) >= 0)\r\n            {\r\n                // &quot;\r\n                if ((quoteStyle & QuoteStyle.DoubleQuotes) == 0 && index < str.Length - 5 &&\r\n                    str[index + 1] == 'q' && str[index + 2] == 'u' &&\r\n                    str[index + 3] == 'o' && str[index + 4] == 't' &&\r\n                    str[index + 5] == ';')\r\n                {\r\n                    result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index)));\r\n                    result.Write(\"&quot;\");\r\n                    old_index = (index += 6);\r\n                    continue;\r\n                }\r\n\r\n                if ((quoteStyle & QuoteStyle.SingleQuotes) == 0)\r\n                {\r\n                    // &#039;\r\n                    if (index < str.Length - 5 && str[index + 1] == '#' &&\r\n                        str[index + 2] == '0' && str[index + 3] == '3' &&\r\n                        str[index + 4] == '9' && str[index + 5] == ';')\r\n                    {\r\n                        result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index)));\r\n                        result.Write(\"&#039;\");\r\n                        old_index = (index += 6);\r\n                        continue;\r\n                    }\r\n\r\n                    // &#39;\r\n                    if (index < str.Length - 4 && str[index + 1] == '#' &&\r\n                        str[index + 2] == '3' && str[index + 3] == '9' && str[index + 4] == ';')\r\n                    {\r\n                        result.Write(HttpUtility.HtmlDecode(str.Substring(old_index, index - old_index)));\r\n                        result.Write(\"&#39;\");\r\n                        old_index = (index += 5);\r\n                        continue;\r\n                    }\r\n                }\r\n\r\n                index++; // for the &\r\n            }\r\n            if (old_index < str.Length) result.Write(HttpUtility.HtmlDecode(str.Substring(old_index)));\r\n\r\n            result.Flush();\r\n            return str_builder.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strip_tags, nl2br\r\n\r\n        /// <summary>\r\n        /// Strips HTML and PHP tags from a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to strip tags from.</param>\r\n        /// <returns>The result.</returns>\r\n        [ImplementsFunction(\"strip_tags\")]\r\n        public static string StripTags(string str)\r\n        {\r\n            return StripTags(str, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips HTML and PHP tags from a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to strip tags from.</param>\r\n        /// <param name=\"allowableTags\">Tags which should not be stripped in the following format:\r\n        /// &lt;tag1&gt;&lt;tag2&gt;&lt;tag3&gt;.</param>\r\n        /// <returns>The result.</returns>\r\n        /// <remarks>This is a slightly modified php_strip_tags which can be found in PHP sources.</remarks>\r\n        [ImplementsFunction(\"strip_tags\")]\r\n        public static string StripTags(string str, string allowableTags)\r\n        {\r\n            int state = 0;\r\n            return StripTags(str, allowableTags, ref state);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips tags allowing to set automaton start state and read its accepting state.\r\n        /// </summary>\r\n        internal static string StripTags(string str, string allowableTags, ref int state)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            int br = 0, i = 0, depth = 0, length = str.Length;\r\n            char lc = '\\0';\r\n\r\n            // Simple state machine. State 0 is the output state, State 1 means we are inside a\r\n            // normal html tag and state 2 means we are inside a php tag.\r\n            //\r\n            // lc holds the last significant character read and br is a bracket counter.\r\n            // When an allowableTags string is passed in we keep track of the string in\r\n            // state 1 and when the tag is closed check it against the allowableTags string\r\n            // to see if we should allow it.\r\n\r\n            StringBuilder result = new StringBuilder(), tagBuf = new StringBuilder();\r\n            if (allowableTags != null) allowableTags = allowableTags.ToLower();\r\n\r\n            while (i < length)\r\n            {\r\n                char c = str[i];\r\n\r\n                switch (c)\r\n                {\r\n                    case '<':\r\n                        if (i + 1 < length && Char.IsWhiteSpace(str[i + 1])) goto default;\r\n                        if (state == 0)\r\n                        {\r\n                            lc = '<';\r\n                            state = 1;\r\n                            if (allowableTags != null)\r\n                            {\r\n                                tagBuf.Length = 0;\r\n                                tagBuf.Append(c);\r\n                            }\r\n                        }\r\n                        else if (state == 1) depth++;\r\n                        break;\r\n\r\n                    case '(':\r\n                        if (state == 2)\r\n                        {\r\n                            if (lc != '\"' && lc != '\\'')\r\n                            {\r\n                                lc = '(';\r\n                                br++;\r\n                            }\r\n                        }\r\n                        else if (allowableTags != null && state == 1) tagBuf.Append(c);\r\n                        else if (state == 0) result.Append(c);\r\n                        break;\r\n\r\n                    case ')':\r\n                        if (state == 2)\r\n                        {\r\n                            if (lc != '\"' && lc != '\\'')\r\n                            {\r\n                                lc = ')';\r\n                                br--;\r\n                            }\r\n                        }\r\n                        else if (allowableTags != null && state == 1) tagBuf.Append(c);\r\n                        else if (state == 0) result.Append(c);\r\n                        break;\r\n\r\n                    case '>':\r\n                        if (depth > 0)\r\n                        {\r\n                            depth--;\r\n                            break;\r\n                        }\r\n\r\n                        switch (state)\r\n                        {\r\n                            case 1: /* HTML/XML */\r\n                                lc = '>';\r\n                                state = 0;\r\n                                if (allowableTags != null)\r\n                                {\r\n                                    // find out whether this tag is allowable or not\r\n                                    tagBuf.Append(c);\r\n\r\n                                    StringBuilder normalized = new StringBuilder();\r\n\r\n                                    bool done = false;\r\n                                    int tagBufLen = tagBuf.Length, substate = 0;\r\n\r\n                                    // normalize the tagBuf by removing leading and trailing whitespace and turn\r\n                                    // any <a whatever...> into just <a> and any </tag> into <tag>\r\n                                    for (int j = 0; j < tagBufLen; j++)\r\n                                    {\r\n                                        char d = Char.ToLower(tagBuf[j]);\r\n                                        switch (d)\r\n                                        {\r\n                                            case '<':\r\n                                                normalized.Append(d);\r\n                                                break;\r\n\r\n                                            case '>':\r\n                                                done = true;\r\n                                                break;\r\n\r\n                                            default:\r\n                                                if (!Char.IsWhiteSpace(d))\r\n                                                {\r\n                                                    if (substate == 0)\r\n                                                    {\r\n                                                        substate = 1;\r\n                                                        if (d != '/') normalized.Append(d);\r\n                                                    }\r\n                                                    else normalized.Append(d);\r\n                                                }\r\n                                                else if (substate == 1) done = true;\r\n                                                break;\r\n                                        }\r\n                                        if (done) break;\r\n                                    }\r\n\r\n                                    normalized.Append('>');\r\n                                    if (allowableTags.IndexOf(normalized.ToString()) >= 0) result.Append(tagBuf);\r\n\r\n                                    tagBuf.Length = 0;\r\n                                }\r\n                                break;\r\n\r\n                            case 2: /* PHP */\r\n                                if (br == 0 && lc != '\\\"' && i > 0 && str[i] == '?') state = 0;\r\n                                {\r\n                                    state = 0;\r\n                                    tagBuf.Length = 0;\r\n                                }\r\n                                break;\r\n\r\n                            case 3:\r\n                                state = 0;\r\n                                tagBuf.Length = 0;\r\n                                break;\r\n\r\n                            case 4: /* JavaScript/CSS/etc... */\r\n                                if (i >= 2 && str[i - 1] == '-' && str[i - 2] == '-')\r\n                                {\r\n                                    state = 0;\r\n                                    tagBuf.Length = 0;\r\n                                }\r\n                                break;\r\n\r\n                            default:\r\n                                result.Append(c);\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case '\"':\r\n                        goto case '\\'';\r\n\r\n                    case '\\'':\r\n                        if (state == 2 && i > 0 && str[i - 1] != '\\\\')\r\n                        {\r\n                            if (lc == c) lc = '\\0';\r\n                            else if (lc != '\\\\') lc = c;\r\n                        }\r\n                        else if (state == 0) result.Append(c);\r\n                        else if (allowableTags != null && state == 1) tagBuf.Append(c);\r\n                        break;\r\n\r\n                    case '!':\r\n                        /* JavaScript & Other HTML scripting languages */\r\n                        if (state == 1 && i > 0 && str[i - 1] == '<')\r\n                        {\r\n                            state = 3;\r\n                            lc = c;\r\n                        }\r\n                        else\r\n                        {\r\n                            if (state == 0) result.Append(c);\r\n                            else if (allowableTags != null && state == 1) tagBuf.Append(c);\r\n                        }\r\n                        break;\r\n\r\n                    case '-':\r\n                        if (state == 3 && i >= 2 && str[i - 1] == '-' && str[i - 2] == '!') state = 4;\r\n                        else goto default;\r\n                        break;\r\n\r\n                    case '?':\r\n                        if (state == 1 && i > 0 && str[i - 1] == '<')\r\n                        {\r\n                            br = 0;\r\n                            state = 2;\r\n                            break;\r\n                        }\r\n                        goto case 'e';\r\n\r\n                    case 'E':\r\n                        goto case 'e';\r\n\r\n                    case 'e':\r\n                        /* !DOCTYPE exception */\r\n                        if (state == 3 && i > 6\r\n                            && Char.ToLower(str[i - 1]) == 'p' && Char.ToLower(str[i - 2]) == 'y'\r\n                            && Char.ToLower(str[i - 3]) == 't' && Char.ToLower(str[i - 4]) == 'c'\r\n                            && Char.ToLower(str[i - 5]) == 'o' && Char.ToLower(str[i - 6]) == 'd')\r\n                        {\r\n                            state = 1;\r\n                            break;\r\n                        }\r\n                        goto case 'l';\r\n\r\n                    case 'l':\r\n\r\n                        /*\r\n                          If we encounter '<?xml' then we shouldn't be in\r\n                          state == 2 (PHP). Switch back to HTML.\r\n                        */\r\n\r\n                        if (state == 2 && i > 2 && str[i - 1] == 'm' && str[i - 2] == 'x')\r\n                        {\r\n                            state = 1;\r\n                            break;\r\n                        }\r\n                        goto default;\r\n\r\n                    /* fall-through */\r\n                    default:\r\n                        if (state == 0) result.Append(c);\r\n                        else if (allowableTags != null && state == 1) tagBuf.Append(c);\r\n                        break;\r\n                }\r\n                i++;\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inserts HTML line breaks before all newlines in a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <returns>The output string.</returns>\r\n        /// <remarks>Inserts \"&lt;br/&gt;\" before each \"\\n\", \"\\n\\r\", \"\\r\", \"\\r\\n\".</remarks>\r\n        [ImplementsFunction(\"nl2br\")]\r\n        public static string NewLinesToBreaks(string str)\r\n        {\r\n            return NewLinesToBreaks(str, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inserts HTML line breaks before all newlines in a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <param name=\"isXHTML\">Whenever to use XHTML compatible line breaks or not. </param>\r\n        /// <returns>The output string.</returns>\r\n        /// <remarks>Inserts \"&lt;br/&gt;\" before each \"\\n\", \"\\n\\r\", \"\\r\", \"\\r\\n\".</remarks>\r\n        [ImplementsFunction(\"nl2br\")]\r\n        public static string NewLinesToBreaks(string str, bool isXHTML/*=true*/ )\r\n        {\r\n            if (string.IsNullOrEmpty(str))\r\n                return String.Empty;\r\n\r\n            StringReader reader = new StringReader(str);\r\n            StringWriter writer = new StringWriter(new StringBuilder(str.Length));\r\n\r\n            NewLinesToBreaks(reader, writer, isXHTML ? \"<br />\" : \"<br>\");\r\n\r\n            return writer.ToString();\r\n        }\r\n\r\n        public static void NewLinesToBreaks(TextReader/*!*/ input, TextWriter/*!*/ output, string lineBreakString)\r\n        {\r\n            if (input == null)\r\n                throw new ArgumentNullException(\"input\");\r\n            if (output == null)\r\n                throw new ArgumentNullException(\"output\");\r\n\r\n            for (; ; )\r\n            {\r\n                int d = input.Read();\r\n                if (d == -1) break;\r\n\r\n                char c = (char)d;\r\n                if (c == '\\r' || c == '\\n')\r\n                {\r\n                    output.Write(lineBreakString);\r\n\r\n                    d = input.Peek();\r\n                    if (d != -1)\r\n                    {\r\n                        char c1 = (char)d;\r\n                        if ((c == '\\r' && c1 == '\\n') || (c == '\\n' && c1 == '\\r'))\r\n                        {\r\n                            output.Write(c);\r\n                            c = c1;\r\n                            input.Read();\r\n                        }\r\n                    }\r\n                }\r\n\r\n                output.Write(c);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region chunk_split\r\n\r\n        /// <summary>\r\n        /// Splits a string into chunks 76 characters long separated by \"\\r\\n\".\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to split.</param>\r\n        /// <returns>The splitted string.</returns>\r\n        /// <remarks>\"\\r\\n\" is also appended after the last chunk.</remarks>\r\n        [ImplementsFunction(\"chunk_split\")]\r\n        [return: CastToFalse]\r\n        public static string ChunkSplit(string str)\r\n        {\r\n            return ChunkSplit(str, 76, \"\\r\\n\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string into chunks of a specified length separated by \"\\r\\n\".\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to split.</param>\r\n        /// <param name=\"chunkLength\">The chunk length.</param>\r\n        /// <returns>The splitted string.</returns>\r\n        /// <remarks>\"\\r\\n\" is also appended after the last chunk.</remarks>\r\n        [ImplementsFunction(\"chunk_split\")]\r\n        [return: CastToFalse]\r\n        public static string ChunkSplit(string str, int chunkLength)\r\n        {\r\n            return ChunkSplit(str, chunkLength, \"\\r\\n\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string into chunks of a specified length separated by a specified string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to split.</param>\r\n        /// <param name=\"chunkLength\">The chunk length.</param>\r\n        /// <param name=\"endOfChunk\">The chunk separator.</param>\r\n        /// <returns><paramref name=\"endOfChunk\"/> is also appended after the last chunk.</returns>\r\n        [ImplementsFunction(\"chunk_split\")]\r\n        [return: CastToFalse]\r\n        public static string ChunkSplit(string str, int chunkLength, string endOfChunk)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            if (chunkLength <= 0)\r\n            {\r\n                PhpException.InvalidArgument(\"chunkLength\", LibResources.GetString(\"arg:negative_or_zero\"));\r\n                return null;\r\n            }\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length + (length / chunkLength + 1) * endOfChunk.Length);\r\n\r\n            // append the chunks one by one to the result\r\n            for (int i = 0, j = length - chunkLength; i < length; i += chunkLength)\r\n            {\r\n                if (i > j) result.Append(str, i, length - i); else result.Append(str, i, chunkLength);\r\n                result.Append(endOfChunk);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region soundex, metaphone, levenshtein, similar_text\r\n\r\n        /// <summary>\r\n        /// A map of following characters: {'A', 'E', 'I', 'Y', 'O', 'U', 'a', 'e', 'i', 'y', 'o', 'u'}.\r\n        /// </summary>\r\n        internal static readonly CharMap vowelsMap = new CharMap(new uint[] { 0, 0, 0x44410440, 0x44410440 });\r\n\r\n        /// <summary>\r\n        /// Indicates whether a character is recognized as an English vowel.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character.</param>\r\n        /// <returns>True iff recognized as an English vowel.</returns>\r\n        public static bool IsVowel(char c)\r\n        {\r\n            return vowelsMap.Contains(c);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the soundex key of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to calculate soundex key of.</param>\r\n        /// <returns>The soundex key of <paramref name=\"str\"/>.</returns>\r\n        [ImplementsFunction(\"soundex\")]\r\n        public static string Soundex(string str)\r\n        {\r\n            if (str == null || str == String.Empty) return String.Empty;\r\n\r\n            int length = str.Length;\r\n            const string sound = \"01230120022455012623010202\";\r\n\r\n            char[] result = new char[4];\r\n            int resPos = 0;\r\n            char lastIdx = '0';\r\n\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                char c = Char.ToUpper(str[i]);\r\n                if (c >= 'A' && c <= 'Z')\r\n                {\r\n                    char idx = sound[(int)(c - 'A')];\r\n                    if (resPos == 0)\r\n                    {\r\n                        result[resPos++] = c;\r\n                        lastIdx = idx;\r\n                    }\r\n                    else\r\n                    {\r\n                        if (idx != '0' && idx != lastIdx)\r\n                        {\r\n                            result[resPos] = idx;\r\n                            if (++resPos >= 4) return new string(result);\r\n                        }\r\n\r\n                        // Some soundex algorithm descriptions say that the following condition should\r\n                        // be in effect...\r\n                        /*if (c != 'W' && c != 'H')*/\r\n                        lastIdx = idx;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // pad with '0'\r\n            do\r\n            {\r\n                result[resPos] = '0';\r\n            }\r\n            while (++resPos < 4);\r\n\r\n            return new string(result);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the metaphone key of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to calculate metaphone key of.</param>\r\n        /// <returns>The metaphone key of <paramref name=\"str\"/>.</returns>\r\n        [ImplementsFunction(\"metaphone\")]\r\n        public static string Metaphone(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            int length = str.Length;\r\n            const int padL = 4, padR = 3;\r\n\r\n            StringBuilder sb = new StringBuilder(str.Length + padL + padR);\r\n            StringBuilder result = new StringBuilder();\r\n\r\n            // avoid index out of bounds problem when looking at previous and following characters\r\n            // by padding the string at both sides\r\n            sb.Append('\\0', padL);\r\n            sb.Append(str.ToUpper());\r\n            sb.Append('\\0', padR);\r\n\r\n            int i = padL;\r\n            char c = sb[i];\r\n\r\n            // transformations at the beginning of the string\r\n            if ((c == 'A' && sb[i + 1] == 'E') ||\r\n                (sb[i + 1] == 'N' && (c == 'G' || c == 'K' || c == 'P')) ||\r\n                (c == 'W' && sb[i + 1] == 'R')) i++;\r\n\r\n            if (c == 'X') sb[i] = 'S';\r\n\r\n            if (c == 'W' && sb[i + 1] == 'H') sb[++i] = 'W';\r\n\r\n            // if the string starts with a vowel it is copied to output\r\n            if (IsVowel(sb[i])) result.Append(sb[i++]);\r\n\r\n            int end = length + padL;\r\n            while (i < end)\r\n            {\r\n                c = sb[i];\r\n\r\n                if (c == sb[i - 1] && c != 'C')\r\n                {\r\n                    i++;\r\n                    continue;\r\n                }\r\n\r\n                // transformations of consonants (vowels as well as other characters are ignored)\r\n                switch (c)\r\n                {\r\n                    case 'B':\r\n                        if (sb[i - 1] != 'M') result.Append('B');\r\n                        break;\r\n\r\n                    case 'C':\r\n                        if (sb[i + 1] == 'I' || sb[i + 1] == 'E' || sb[i + 1] == 'Y')\r\n                        {\r\n                            if (sb[i + 2] == 'A' && sb[i + 1] == 'I') result.Append('X');\r\n                            else if (sb[i - 1] == 'S') break;\r\n                            else result.Append('S');\r\n                        }\r\n                        else if (sb[i + 1] == 'H')\r\n                        {\r\n                            result.Append('X');\r\n                            i++;\r\n                        }\r\n                        else result.Append('K');\r\n                        break;\r\n\r\n                    case 'D':\r\n                        if (sb[i + 1] == 'G' && (sb[i + 2] == 'E' || sb[i + 2] == 'Y' ||\r\n                            sb[i + 2] == 'I'))\r\n                        {\r\n                            result.Append('J');\r\n                            i++;\r\n                        }\r\n                        else result.Append('T');\r\n                        break;\r\n\r\n                    case 'F':\r\n                        result.Append('F');\r\n                        break;\r\n\r\n                    case 'G':\r\n                        if (sb[i + 1] == 'H')\r\n                        {\r\n                            if (sb[i - 4] == 'H' || (sb[i - 3] != 'B' && sb[i - 3] != 'D' && sb[i - 3] != 'H'))\r\n                            {\r\n                                result.Append('F');\r\n                                i++;\r\n                            }\r\n                            else break;\r\n                        }\r\n                        else if (sb[i + 1] == 'N')\r\n                        {\r\n                            if (sb[i + 2] < 'A' || sb[i + 2] > 'Z' ||\r\n                                (sb[i + 2] == 'E' && sb[i + 3] == 'D')) break;\r\n                            else result.Append('K');\r\n                        }\r\n                        else if ((sb[i + 1] == 'E' || sb[i + 1] == 'I' || sb[i + 1] == 'Y') && sb[i - 1] != 'G')\r\n                        {\r\n                            result.Append('J');\r\n                        }\r\n                        else result.Append('K');\r\n                        break;\r\n\r\n                    case 'H':\r\n                        if (IsVowel(sb[i + 1]) && sb[i - 1] != 'C' && sb[i - 1] != 'G' &&\r\n                            sb[i - 1] != 'P' && sb[i - 1] != 'S' && sb[i - 1] != 'T') result.Append('H');\r\n                        break;\r\n\r\n                    case 'J':\r\n                        result.Append('J');\r\n                        break;\r\n\r\n                    case 'K':\r\n                        if (sb[i - 1] != 'C') result.Append('K');\r\n                        break;\r\n\r\n                    case 'L':\r\n                        result.Append('L');\r\n                        break;\r\n\r\n                    case 'M':\r\n                        result.Append('M');\r\n                        break;\r\n\r\n                    case 'N':\r\n                        result.Append('N');\r\n                        break;\r\n\r\n                    case 'P':\r\n                        if (sb[i + 1] == 'H') result.Append('F');\r\n                        else result.Append('P');\r\n                        break;\r\n\r\n                    case 'Q':\r\n                        result.Append('K');\r\n                        break;\r\n\r\n                    case 'R':\r\n                        result.Append('R');\r\n                        break;\r\n\r\n                    case 'S':\r\n                        if (sb[i + 1] == 'I' && (sb[i + 2] == 'O' || sb[i + 2] == 'A')) result.Append('X');\r\n                        else if (sb[i + 1] == 'H')\r\n                        {\r\n                            result.Append('X');\r\n                            i++;\r\n                        }\r\n                        else result.Append('S');\r\n                        break;\r\n\r\n                    case 'T':\r\n                        if (sb[i + 1] == 'I' && (sb[i + 2] == 'O' || sb[i + 2] == 'A')) result.Append('X');\r\n                        else if (sb[i + 1] == 'H')\r\n                        {\r\n                            result.Append('0');\r\n                            i++;\r\n                        }\r\n                        else result.Append('T');\r\n                        break;\r\n\r\n                    case 'V':\r\n                        result.Append('F');\r\n                        break;\r\n\r\n                    case 'W':\r\n                        if (IsVowel(sb[i + 1])) result.Append('W');\r\n                        break;\r\n\r\n                    case 'X':\r\n                        result.Append(\"KS\");\r\n                        break;\r\n\r\n                    case 'Y':\r\n                        if (IsVowel(sb[i + 1])) result.Append('Y');\r\n                        break;\r\n\r\n                    case 'Z':\r\n                        result.Append('S');\r\n                        break;\r\n                }\r\n\r\n                i++;\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the Levenshtein distance between two strings.\r\n        /// </summary>\r\n        /// <param name=\"src\">The first string.</param>\r\n        /// <param name=\"dst\">The second string.</param>\r\n        /// <returns>The Levenshtein distance between <paramref name=\"src\"/> and <paramref name=\"dst\"/> or -1 if any of the\r\n        /// strings is longer than 255 characters.</returns>\r\n        [ImplementsFunction(\"levenshtein\")]\r\n        public static int Levenshtein(string src, string dst)\r\n        {\r\n            return Levenshtein(src, dst, 1, 1, 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the Levenshtein distance between two strings given the cost of insert, replace\r\n        /// and delete operations.\r\n        /// </summary>\r\n        /// <param name=\"src\">The first string.</param>\r\n        /// <param name=\"dst\">The second string.</param>\r\n        /// <param name=\"insertCost\">Cost of the insert operation.</param>\r\n        /// <param name=\"replaceCost\">Cost of the replace operation.</param>\r\n        /// <param name=\"deleteCost\">Cost of the delete operation.</param>\r\n        /// <returns>The Levenshtein distance between <paramref name=\"src\"/> and <paramref name=\"dst\"/> or -1 if any of the\r\n        /// strings is longer than 255 characters.</returns>\r\n        /// <remarks>See <A href=\"http://www.merriampark.com/ld.htm\">http://www.merriampark.com/ld.htm</A> for description of the algorithm.</remarks>\r\n        [ImplementsFunction(\"levenshtein\")]\r\n        public static int Levenshtein(string src, string dst, int insertCost, int replaceCost, int deleteCost)\r\n        {\r\n            if (src == null) src = String.Empty;\r\n            if (dst == null) dst = String.Empty;\r\n\r\n            int n = src.Length;\r\n            int m = dst.Length;\r\n\r\n            if (n > 255 || m > 255) return -1;\r\n\r\n            if (n == 0) return m * insertCost;\r\n            if (m == 0) return n * deleteCost;\r\n\r\n            int[,] matrix = new int[n + 1, m + 1];\r\n\r\n            for (int i = 0; i <= n; i++) matrix[i, 0] = i * deleteCost;\r\n            for (int j = 0; j <= m; j++) matrix[0, j] = j * insertCost;\r\n\r\n            for (int i = 1; i <= n; i++)\r\n            {\r\n                char cs = src[i - 1];\r\n\r\n                for (int j = 1; j <= m; j++)\r\n                {\r\n                    char cd = dst[j - 1];\r\n\r\n                    matrix[i, j] = System.Math.Min(System.Math.Min(\r\n                        matrix[i - 1, j] + deleteCost,\r\n                        matrix[i, j - 1] + insertCost),\r\n                        matrix[i - 1, j - 1] + (cs == cd ? 0 : replaceCost));\r\n                }\r\n            }\r\n\r\n            return matrix[n, m];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the similarity between two strings. Internal recursive function.\r\n        /// </summary>\r\n        /// <param name=\"first\">The first string.</param>\r\n        /// <param name=\"second\">The second string.</param>\r\n        /// <returns>The number of matching characters in both strings.</returns>\r\n        /// <remarks>Algorithm description is supposed to be found \r\n        /// <A href=\"http://citeseer.nj.nec.com/oliver93decision.html\">here</A>.</remarks>\r\n        internal static int SimilarTextInternal(string first, string second)\r\n        {\r\n            Debug.Assert(first != null && second != null);\r\n\r\n            int posF = 0, lengthF = first.Length;\r\n            int posS = 0, lengthS = second.Length;\r\n            int maxK = 0;\r\n\r\n            for (int i = 0; i < lengthF; i++)\r\n            {\r\n                for (int j = 0; j < lengthS; j++)\r\n                {\r\n                    int k;\r\n                    for (k = 0; i + k < lengthF && j + k < lengthS && first[i + k] == second[j + k]; k++) ;\r\n                    if (k > maxK)\r\n                    {\r\n                        maxK = k;\r\n                        posF = i;\r\n                        posS = j;\r\n                    }\r\n                }\r\n            }\r\n\r\n            int sum = maxK;\r\n            if (sum > 0)\r\n            {\r\n                if (posF > 0 && posS > 0)\r\n                {\r\n                    sum += SimilarTextInternal(first.Substring(0, posF), second.Substring(0, posS));\r\n                }\r\n                if (posF + maxK < lengthF && posS + maxK < lengthS)\r\n                {\r\n                    sum += SimilarTextInternal(first.Substring(posF + maxK), second.Substring(posS + maxK));\r\n                }\r\n            }\r\n\r\n            return sum;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the similarity between two strings.\r\n        /// </summary>\r\n        /// <param name=\"first\">The first string.</param>\r\n        /// <param name=\"second\">The second string.</param>\r\n        /// <returns>The number of matching characters in both strings.</returns>\r\n        [ImplementsFunction(\"similar_text\")]\r\n        public static int SimilarText(string first, string second)\r\n        {\r\n            if (first == null || second == null) return 0;\r\n            return SimilarTextInternal(first, second);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculates the similarity between two strings.\r\n        /// </summary>\r\n        /// <param name=\"first\">The first string.</param>\r\n        /// <param name=\"second\">The second string.</param>\r\n        /// <param name=\"percent\">Will become the similarity in percent.</param>\r\n        /// <returns>The number of matching characters in both strings.</returns>\r\n        [ImplementsFunction(\"similar_text\")]\r\n        public static int SimilarText(string first, string second, out double percent)\r\n        {\r\n            if (first == null || second == null) { percent = 0; return 0; }\r\n\r\n            int sum = SimilarTextInternal(first, second);\r\n            percent = (200.0 * sum) / (first.Length + second.Length);\r\n\r\n            return sum;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strtok\r\n\r\n        /// <summary>\r\n        /// Holds a context of <see cref=\"Tokenize\"/> method.\r\n        /// </summary>\r\n        private class TokenizerContext\r\n        {\r\n            /// <summary>\r\n            /// The <b>str</b> parameter of last <see cref=\"Tokenize\"/> method call.\r\n            /// </summary>\r\n            public string String;\r\n\r\n            /// <summary>\r\n            /// Current position in <see cref=\"TokenizerContext\"/>.\r\n            /// </summary>\r\n            public int Position;\r\n\r\n            /// <summary>\r\n            /// The length of <see cref=\"TokenizerContext\"/>.\r\n            /// </summary>\r\n            public int Length;\r\n\r\n            /// <summary>\r\n            /// A context associated with the current thread.\r\n            /// </summary>\r\n            public static TokenizerContext/*!*/CurrentContext\r\n            {\r\n                get\r\n                {\r\n                    var ctx = ScriptContext.CurrentContext;\r\n\r\n                    TokenizerContext tctx;\r\n                    if (ctx.Properties.TryGetProperty<TokenizerContext>(out tctx) == false)\r\n                        ctx.Properties.SetProperty<TokenizerContext>(tctx = new TokenizerContext());\r\n                    \r\n                    //\r\n                    return tctx;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string into tokens using given set of delimiter characters. Tokenizes the string\r\n        /// that was passed to a previous call of the two-parameter version.\r\n        /// </summary>\r\n        /// <param name=\"delimiters\">Set of delimiters.</param>\r\n        /// <returns>The next token or a <B>null</B> reference.</returns>\r\n        /// <remarks>This method implements the behavior introduced with PHP 4.1.0, i.e. empty tokens are\r\n        /// skipped and never returned.</remarks>\r\n        [ImplementsFunction(\"strtok\")]\r\n        [return: CastToFalse]\r\n        public static string Tokenize(string delimiters)\r\n        {\r\n            TokenizerContext context = TokenizerContext.CurrentContext;\r\n\r\n            if (context.Position >= context.Length) return null;\r\n            if (delimiters == null) delimiters = String.Empty;\r\n\r\n            int index;\r\n            char[] delChars = delimiters.ToCharArray();\r\n            while ((index = context.String.IndexOfAny(delChars, context.Position)) == context.Position)\r\n            {\r\n                if (context.Position == context.Length - 1) return null; // last char is delimiter\r\n                context.Position++;\r\n            }\r\n\r\n            string token;\r\n            if (index == -1) // delimiter not found\r\n            {\r\n                token = context.String.Substring(context.Position);\r\n                context.Position = context.Length;\r\n                return token;\r\n            }\r\n\r\n            token = context.String.Substring(context.Position, index - context.Position);\r\n            context.Position = index + 1;\r\n            return token;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string into tokens using given set of delimiter characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to tokenize.</param>\r\n        /// <param name=\"delimiters\">Set of delimiters.</param>\r\n        /// <returns>The first token or null. Call one-parameter version of this method to get next tokens.\r\n        /// </returns>\r\n        /// <remarks>This method implements the behavior introduced with PHP 4.1.0, i.e. empty tokens are\r\n        /// skipped and never returned.</remarks>\r\n        [ImplementsFunction(\"strtok\")]\r\n        [return: CastToFalse]\r\n        public static string Tokenize(string str, string delimiters)\r\n        {\r\n            if (str == null) str = String.Empty;\r\n\r\n            TokenizerContext context = TokenizerContext.CurrentContext;\r\n\r\n            context.String = str;\r\n            context.Length = str.Length;\r\n            context.Position = 0;\r\n\r\n            return Tokenize(delimiters);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region trim, rtrim, ltrim, chop\r\n\r\n        /// <summary>\r\n        /// Strips whitespace characters from the beginning and end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <remarks>This one-parameter version trims '\\0', '\\t', '\\n', '\\r', '\\x0b' and ' ' (space).</remarks>\r\n        [ImplementsFunction(\"trim\")]\r\n        public static string Trim(string str)\r\n        {\r\n            return Trim(str, \"\\0\\t\\n\\r\\x0b\\x20\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips given characters from the beginning and end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <param name=\"whiteSpaceCharacters\">The characters to strip from <paramref name=\"str\"/>. Can contain ranges\r\n        /// of characters, e.g. \"\\0x00..\\0x1F\".</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> is invalid char mask. Multiple errors may be printed out.</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"str\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n        [ImplementsFunction(\"trim\")]\r\n        public static string Trim(string str, string whiteSpaceCharacters)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            // As whiteSpaceCharacters may contain intervals, I see two possible implementations:\r\n            // 1) Call CharMap.AddUsingMask and do the trimming \"by hand\".\r\n            // 2) Write another version of CharMap.AddUsingMask that would return char[] of characters\r\n            // that fit the mask, and do the trimming with String.Trim(char[]).\r\n            // I have chosen 1).\r\n\r\n            CharMap charmap = InitializeCharMap();\r\n\r\n            // may throw an exception:\r\n            try\r\n            {\r\n                charmap.AddUsingMask(whiteSpaceCharacters);\r\n            }\r\n            catch (IndexOutOfRangeException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unicode_characters\"));\r\n                return null;\r\n            }\r\n\r\n            int length = str.Length, i = 0, j = length - 1;\r\n\r\n            // finds the new beginning:\r\n            while (i < length && charmap.Contains(str[i])) i++;\r\n\r\n            // finds the new end:\r\n            while (j >= 0 && charmap.Contains(str[j])) j--;\r\n\r\n            return (i <= j) ? str.Substring(i, j - i + 1) : String.Empty;\r\n        }\r\n\r\n        /// <summary>Characters treated as blanks by the PHP.</summary>\r\n        private static char[] phpBlanks = new char[] { '\\0', '\\t', '\\n', '\\r', '\\u000b', ' ' };\r\n\r\n        /// <summary>\r\n        /// Strips whitespace characters from the beginning of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <remarks>This one-parameter version trims '\\0', '\\t', '\\n', '\\r', '\\u000b' and ' ' (space).</remarks>\r\n        [ImplementsFunction(\"ltrim\")]\r\n        public static string TrimStart(string str)\r\n        {\r\n            return (str != null) ? str.TrimStart(phpBlanks) : String.Empty;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips given characters from the beginning of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <param name=\"whiteSpaceCharacters\">The characters to strip from <paramref name=\"str\"/>. Can contain ranges\r\n        /// of characters, e.g. \\0x00..\\0x1F.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> is invalid char mask. Multiple errors may be printed out.</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n        [ImplementsFunction(\"ltrim\")]\r\n        public static string TrimStart(string str, string whiteSpaceCharacters)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            CharMap charmap = InitializeCharMap();\r\n\r\n            // may throw an exception:\r\n            try\r\n            {\r\n                charmap.AddUsingMask(whiteSpaceCharacters);\r\n            }\r\n            catch (IndexOutOfRangeException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unicode_characters\"));\r\n                return null;\r\n            }\r\n\r\n            int length = str.Length, i = 0;\r\n\r\n            while (i < length && charmap.Contains(str[i])) i++;\r\n\r\n            if (i < length) return str.Substring(i);\r\n            return String.Empty;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips whitespace characters from the end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <remarks>This one-parameter version trims '\\0', '\\t', '\\n', '\\r', '\\u000b' and ' ' (space).</remarks>\r\n        [ImplementsFunction(\"rtrim\")]\r\n        public static string TrimEnd(string str)\r\n        {\r\n            return (str != null) ? str.TrimEnd(phpBlanks) : String.Empty;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips given characters from the end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <param name=\"whiteSpaceCharacters\">The characters to strip from <paramref name=\"str\"/>. Can contain ranges\r\n        /// of characters, e.g. \\0x00..\\0x1F.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> is invalid char mask. Multiple errors may be printed out.</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"whiteSpaceCharacters\"/> contains Unicode characters greater than '\\u0800'.</exception>\r\n        [ImplementsFunction(\"rtrim\")]\r\n        public static string TrimEnd(string str, string whiteSpaceCharacters)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            CharMap charmap = InitializeCharMap();\r\n\r\n            try\r\n            {\r\n                charmap.AddUsingMask(whiteSpaceCharacters);\r\n            }\r\n            catch (IndexOutOfRangeException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unicode_characters\"));\r\n                return null;\r\n            }\r\n\r\n            int j = str.Length - 1;\r\n\r\n            while (j >= 0 && charmap.Contains(str[j])) j--;\r\n\r\n            return (j >= 0) ? str.Substring(0, j + 1) : String.Empty;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips whitespace characters from the end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <remarks>This one-parameter version trims '\\0', '\\t', '\\n', '\\r', '\\u000b' and ' ' (space).</remarks>\r\n        [ImplementsFunction(\"chop\")]\r\n        public static string Chop(string str)\r\n        {\r\n            return TrimEnd(str);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips given characters from the end of a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to trim.</param>\r\n        /// <param name=\"whiteSpaceCharacters\">The characters to strip from <paramref name=\"str\"/>. Can contain ranges\r\n        /// of characters, e.g. \\0x00..\\0x1F.</param>\r\n        /// <returns>The trimmed string.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"whiteSpaceCharacters\"/> is invalid char mask. Multiple errors may be printed out.</exception>\r\n        [ImplementsFunction(\"chop\")]\r\n        public static string Chop(string str, string whiteSpaceCharacters)\r\n        {\r\n            return TrimEnd(str, whiteSpaceCharacters);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region ucfirst, lcfirst, ucwords\r\n\r\n        /// <summary>\r\n        /// Makes a string's first character uppercase.\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <returns><paramref name=\"str\"/> with the first character converted to uppercase.</returns>\r\n        [ImplementsFunction(\"ucfirst\")]\r\n        public static string UpperCaseFirst(string str)\r\n        {\r\n            if (string.IsNullOrEmpty(str))\r\n                return string.Empty;\r\n\r\n            return Char.ToUpper(str[0]) + str.Substring(1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a string with the first character of str , lowercased if that character is alphabetic.\r\n        /// 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. \r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <returns>Returns the resulting string.</returns>\r\n        [ImplementsFunction(\"lcfirst\")]\r\n        public static string LowerCaseFirst(string str)\r\n        {\r\n            if (string.IsNullOrEmpty(str))\r\n                return string.Empty;\r\n\r\n            // first character to lower case\r\n            return Char.ToLower(str[0]) + str.Substring(1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Makes the first character of each word in a string uppercase.\r\n        /// </summary>\r\n        /// <param name=\"str\">The input string.</param>\r\n        /// <returns><paramref name=\"str\"/> with the first character of each word in a string converted to \r\n        /// uppercase.</returns>\r\n        [ImplementsFunction(\"ucwords\")]\r\n        public static string UpperCaseWords(string str)\r\n        {\r\n            if (str == null) return String.Empty;\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(str);\r\n\r\n            bool state = true;\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                if (Char.IsWhiteSpace(result[i])) state = true;\r\n                else\r\n                {\r\n                    if (state)\r\n                    {\r\n                        result[i] = Char.ToUpper(result[i]);\r\n                        state = false;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region sprintf, vsprintf\r\n\r\n        /// <summary>\r\n        /// Default number of decimals when formatting floating-point numbers (%f in printf).\r\n        /// </summary>\r\n        internal const int printfFloatPrecision = 6;\r\n\r\n        /// <summary>\r\n        /// Returns a formatted string.\r\n        /// </summary>\r\n        /// <param name=\"format\">The format string. \r\n        /// See <A href=\"http://www.php.net/manual/en/function.sprintf.php\">PHP manual</A> for details.\r\n        /// Besides, a type specifier \"%C\" is applicable. It converts an integer value to Unicode character.</param>\r\n        /// <param name=\"arguments\">The arguments.</param>\r\n        /// <returns>The formatted string or null if there is too few arguments.</returns>\r\n        /// <remarks>Assumes that either <paramref name=\"format\"/> nor <paramref name=\"arguments\"/> is null.</remarks>\r\n        internal static string FormatInternal(string format, object[] arguments)\r\n        {\r\n            Debug.Assert(format != null && arguments != null);\r\n\r\n            Encoding encoding = Configuration.Application.Globalization.PageEncoding;\r\n            StringBuilder result = new StringBuilder();\r\n            int state = 0, width = 0, precision = -1, seqIndex = 0, swapIndex = -1;\r\n            bool leftAlign = false;\r\n            bool plusSign = false;\r\n            char padChar = ' ';\r\n\r\n            // process the format string using a 6-state finite automaton\r\n            int length = format.Length;\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                char c = format[i];\r\n\r\n            Lambda:\r\n                switch (state)\r\n                {\r\n                    case 0: // the initial state\r\n                        {\r\n                            if (c == '%')\r\n                            {\r\n                                width = 0;\r\n                                precision = -1;\r\n                                swapIndex = -1;\r\n                                leftAlign = false;\r\n                                plusSign = false;\r\n                                padChar = ' ';\r\n                                state = 1;\r\n                            }\r\n                            else result.Append(c);\r\n                            break;\r\n                        }\r\n\r\n                    case 1: // % character encountered, expecting format\r\n                        {\r\n                            switch (c)\r\n                            {\r\n                                case '-': leftAlign = true; break;\r\n                                case '+': plusSign = true; break;\r\n                                case ' ': padChar = ' '; break;\r\n                                case '\\'': state = 2; break;\r\n                                case '.': state = 4; break;\r\n                                case '%': result.Append(c); state = 0; break;\r\n                                case '0': padChar = '0'; state = 3; break;\r\n\r\n                                default:\r\n                                    {\r\n                                        if (Char.IsDigit(c)) state = 3;\r\n                                        else state = 5;\r\n                                        goto Lambda;\r\n                                    }\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 2: // ' character encountered, expecting padding character\r\n                        {\r\n                            padChar = c;\r\n                            state = 1;\r\n                            break;\r\n                        }\r\n\r\n                    case 3: // number encountered, expecting width or argument number\r\n                        {\r\n                            switch (c)\r\n                            {\r\n                                case '$':\r\n                                    {\r\n                                        swapIndex = width;\r\n                                        if (swapIndex == 0)\r\n                                        {\r\n                                            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"zero_argument_invalid\"));\r\n                                            return result.ToString();\r\n                                        }\r\n\r\n                                        width = 0;\r\n                                        state = 1;\r\n                                        break;\r\n                                    }\r\n\r\n                                case '.':\r\n                                    {\r\n                                        state = 4;\r\n                                        break;\r\n                                    }\r\n\r\n                                default:\r\n                                    {\r\n                                        if (Char.IsDigit(c)) width = width * 10 + (int)Char.GetNumericValue(c);\r\n                                        else\r\n                                        {\r\n                                            state = 5;\r\n                                            goto Lambda;\r\n                                        }\r\n                                        break;\r\n                                    }\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 4: // number after . encountered, expecting precision\r\n                        {\r\n                            if (precision == -1) precision = 0;\r\n                            if (Char.IsDigit(c)) precision = precision * 10 + (int)Char.GetNumericValue(c);\r\n                            else\r\n                            {\r\n                                state = 5;\r\n                                goto case 5;\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 5: // expecting type specifier\r\n                        {\r\n                            int index = (swapIndex <= 0 ? seqIndex++ : swapIndex - 1);\r\n                            if (index >= arguments.Length)\r\n                            {\r\n                                // few arguments:\r\n                                return null;\r\n                            }\r\n\r\n                            object obj = arguments[index];\r\n                            string app = null;\r\n                            char sign = '\\0';\r\n\r\n                            switch (c)\r\n                            {\r\n                                case 'b': // treat as integer, present as binary number without a sign\r\n                                    app = System.Convert.ToString(Core.Convert.ObjectToInteger(obj), 2);\r\n                                    break;\r\n\r\n                                case 'c': // treat as integer, present as character\r\n                                    app = encoding.GetString(new byte[] { unchecked((byte)Core.Convert.ObjectToInteger(obj)) }, 0, 1);\r\n                                    break;\r\n\r\n                                case 'C': // treat as integer, present as Unicode character\r\n                                    app = new String(unchecked((char)Core.Convert.ObjectToInteger(obj)), 1);\r\n                                    break;\r\n\r\n                                case 'd': // treat as integer, present as signed decimal number\r\n                                    {\r\n                                        // use long to prevent overflow in Math.Abs:\r\n                                        long ivalue = Core.Convert.ObjectToInteger(obj);\r\n                                        if (ivalue < 0) sign = '-'; else if (ivalue >= 0 && plusSign) sign = '+';\r\n\r\n                                        app = Math.Abs((long)ivalue).ToString();\r\n                                        break;\r\n                                    }\r\n\r\n                                case 'u': // treat as integer, present as unsigned decimal number, without sign\r\n                                    app = unchecked((uint)Core.Convert.ObjectToInteger(obj)).ToString();\r\n                                    break;\r\n\r\n                                case 'e':\r\n                                    {\r\n                                        double dvalue = Core.Convert.ObjectToDouble(obj);\r\n                                        if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+';\r\n\r\n                                        string f = String.Concat(\"0.\", new String('0', precision == -1 ? printfFloatPrecision : precision), \"e+0\");\r\n                                        app = Math.Abs(dvalue).ToString(f);\r\n                                        break;\r\n                                    }\r\n\r\n                                case 'f': // treat as float, present locale-aware floating point number\r\n                                    {\r\n                                        double dvalue = Core.Convert.ObjectToDouble(obj);\r\n                                        if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+';\r\n\r\n                                        app = Math.Abs(dvalue).ToString(\"F\" + (precision == -1 ? printfFloatPrecision : precision));\r\n                                        break;\r\n                                    }\r\n\r\n                                case 'F': // treat as float, present locale-unaware floating point number with '.' decimal separator (PHP 5.0.3+ feature)\r\n                                    {\r\n                                        double dvalue = Core.Convert.ObjectToDouble(obj);\r\n                                        if (dvalue < 0) sign = '-'; else if (dvalue >= 0 && plusSign) sign = '+';\r\n\r\n                                        app = Math.Abs(dvalue).ToString(\"F\" + (precision == -1 ? printfFloatPrecision : precision),\r\n                                          System.Globalization.NumberFormatInfo.InvariantInfo);\r\n                                        break;\r\n                                    }\r\n\r\n                                case 'o': // treat as integer, present as octal number without sign\r\n                                    app = System.Convert.ToString(Core.Convert.ObjectToInteger(obj), 8);\r\n                                    break;\r\n\r\n                                case 'x': // treat as integer, present as hex number (lower case) without sign\r\n                                    app = Core.Convert.ObjectToInteger(obj).ToString(\"x\");\r\n                                    break;\r\n\r\n                                case 'X': // treat as integer, present as hex number (upper case) without sign\r\n                                    app = Core.Convert.ObjectToInteger(obj).ToString(\"X\");\r\n                                    break;\r\n\r\n                                case 's': // treat as string, present as string\r\n                                    {\r\n                                        if (obj != null)\r\n                                        {\r\n                                            app = Core.Convert.ObjectToString(obj);\r\n\r\n                                            // undocumented feature:\r\n                                            if (precision != -1) app = app.Substring(0, Math.Min(precision, app.Length));\r\n                                        }\r\n                                        break;\r\n                                    }\r\n                            }\r\n\r\n                            if (app != null)\r\n                            {\r\n                                // pad:\r\n                                if (leftAlign)\r\n                                {\r\n                                    if (sign != '\\0') result.Append(sign);\r\n                                    result.Append(app);\r\n                                    for (int j = width - app.Length; j > ((sign != '\\0') ? 1 : 0); j--)\r\n                                        result.Append(padChar);\r\n                                }\r\n                                else\r\n                                {\r\n                                    if (sign != '\\0' && padChar == '0')\r\n                                        result.Append(sign);\r\n\r\n                                    for (int j = width - app.Length; j > ((sign != '\\0') ? 1 : 0); j--)\r\n                                        result.Append(padChar);\r\n\r\n                                    if (sign != '\\0' && padChar != '0')\r\n                                        result.Append(sign);\r\n\r\n                                    result.Append(app);\r\n                                }\r\n                            }\r\n\r\n                            state = 0;\r\n                            break;\r\n                        }\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a formatted string.\r\n        /// </summary>\r\n        /// <param name=\"format\">The format string. For details, see PHP manual.</param>\r\n        /// <param name=\"arguments\">The arguments.\r\n        /// See <A href=\"http://www.php.net/manual/en/function.sprintf.php\">PHP manual</A> for details.\r\n        /// Besides, a type specifier \"%C\" is applicable. It converts an integer value to Unicode character.</param>\r\n        /// <returns>The formatted string.</returns>\r\n        /// <exception cref=\"ArgumentNullException\">Thrown when the <paramref name=\"arguments\"/> parameter is null.</exception>\r\n        /// <exception cref=\"PhpException\">Thrown when there is less arguments than expeceted by formatting string.</exception>\r\n        [ImplementsFunction(\"sprintf\")]\r\n        [return: CastToFalse]\r\n        public static string Format(string format, params object[] arguments)\r\n        {\r\n            if (format == null) return String.Empty;\r\n\r\n            // null arguments would be compiler's error (or error of the user):\r\n            if (arguments == null) throw new ArgumentNullException(\"arguments\");\r\n\r\n            string result = FormatInternal(format, arguments);\r\n            if (result == null)\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"too_few_arguments\"));\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a formatted string.\r\n        /// </summary>\r\n        /// <param name=\"format\">The format string. For details, see PHP manual.</param>\r\n        /// <param name=\"arguments\">The arguments.</param>\r\n        /// <returns>The formatted string.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown when there is less arguments than expeceted by formatting string.</exception>\r\n        [ImplementsFunction(\"vsprintf\")]\r\n        [return: CastToFalse]\r\n        public static string Format(string format, PhpArray arguments)\r\n        {\r\n            if (format == null) return String.Empty;\r\n\r\n            object[] array;\r\n            if (arguments != null)\r\n            {\r\n                array = new object[arguments.Count];\r\n                arguments.Values.CopyTo(array, 0);\r\n            }\r\n            else\r\n                array = ArrayUtils.EmptyObjects;\r\n\r\n            string result = FormatInternal(format, array);\r\n            if (result == null)\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"too_few_arguments\"));\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region sscanf\r\n\r\n        /// <summary>\r\n        /// Parses input from a string according to a format. \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be parsed.</param>\r\n        /// <param name=\"format\">The format. See <c>sscanf</c> C function for details.</param>\r\n        /// <param name=\"arg\">A PHP reference which value is set to the first parsed value.</param>\r\n        /// <param name=\"arguments\">PHP references which values are set to the next parsed values.</param>\r\n        /// <returns>The number of parsed values.</returns>\r\n        /// <remarks><seealso cref=\"ParseString\"/>.</remarks>\r\n        [ImplementsFunction(\"sscanf\")]\r\n        public static int ScanFormat(string str, string format, PhpReference arg, params PhpReference[] arguments)\r\n        {\r\n            if (arg == null)\r\n                throw new ArgumentNullException(\"arg\");\r\n            if (arguments == null)\r\n                throw new ArgumentNullException(\"arguments\");\r\n\r\n            // assumes capacity same as the number of arguments:\r\n            ArrayList result = new ArrayList(arguments.Length + 1);\r\n\r\n            // parses string and fills the result with parsed values:\r\n            ParseString(str, format, result);\r\n\r\n            // the number of specifiers differs from the number of arguments:\r\n            if (result.Count != arguments.Length + 1)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"different_variables_and_specifiers\", arguments.Length + 1, result.Count));\r\n                return -1;\r\n            }\r\n\r\n            // the number of non-null parsed values:\r\n            int count = 0;\r\n\r\n            if (result[0] != null)\r\n            {\r\n                arg.Value = result[0];\r\n                count = 1;\r\n            }\r\n\r\n            for (int i = 0; i < arguments.Length; i++)\r\n            {\r\n                if (arguments[i] != null && result[i + 1] != null)\r\n                {\r\n                    arguments[i].Value = result[i + 1];\r\n                    count++;\r\n                }\r\n            }\r\n\r\n            return count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses input from a string according to a format. \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be parsed.</param>\r\n        /// <param name=\"format\">The format. See <c>sscanf</c> C function for details.</param>\r\n        /// <returns>A new instance of <see cref=\"PhpArray\"/> containing parsed values indexed by integers starting from 0.</returns>\r\n        /// <remarks><seealso cref=\"ParseString\"/>.</remarks>\r\n        [ImplementsFunction(\"sscanf\")]\r\n        public static PhpArray ScanFormat(string str, string format)\r\n        {\r\n            return (PhpArray)ParseString(str, format, new PhpArray());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a string according to a specified format.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be parsed.</param>\r\n        /// <param name=\"format\">The format. See <c>sscanf</c> C function for details.</param>\r\n        /// <param name=\"result\">A list which to fill with results.</param>\r\n        /// <returns><paramref name=\"result\"/> for convenience.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"result\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"PhpException\">Invalid formatting specifier.</exception>\r\n        public static IList ParseString(string str, string format, IList result)\r\n        {\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            if (str == null || format == null)\r\n                return result;\r\n\r\n            int s = 0, f = 0;\r\n\r\n            while (f < format.Length)\r\n            {\r\n                char c = format[f++];\r\n\r\n                if (c == '%')\r\n                {\r\n                    if (f == format.Length) break;\r\n\r\n                    int width;   // max. parsed characters\r\n                    bool store;  // whether to store parsed item to the result\r\n\r\n                    // checks for asterisk which means matching value is not stored:\r\n                    if (format[f] == '*')\r\n                    {\r\n                        f++;\r\n                        if (f == format.Length) break;\r\n                        store = false;\r\n                    }\r\n                    else\r\n                    {\r\n                        store = true;\r\n                    }\r\n\r\n                    // parses width (a sequence of digits without sign):\r\n                    if (format[f] >= '0' && format[f] <= '9')\r\n                    {\r\n                        width = (int)Core.Convert.SubstringToLongStrict(format, -1, 10, Int32.MaxValue, ref f);\r\n                        if (width == 0) width = Int32.MaxValue;\r\n\r\n                        // format string ends with \"%number\"\r\n                        if (f == format.Length)\r\n                        {\r\n                            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_scan_conversion_character\", \"null\"));\r\n                            return null;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        width = Int32.MaxValue;\r\n                    }\r\n\r\n                    // adds null if string parsing has been finished:\r\n                    if (s == str.Length)\r\n                    {\r\n                        if (store)\r\n                        {\r\n                            if (format[f] == 'n')\r\n                                result.Add(s);\r\n                            else if (format[f] != '%')\r\n                                result.Add(null);\r\n                        }\r\n                        continue;\r\n                    }\r\n\r\n                    // parses the string according to the format specifier:\r\n                    object item = ParseSubstring(format[f], width, str, ref s);\r\n\r\n                    // unknown specifier:\r\n                    if (item == null)\r\n                    {\r\n                        if (format[f] == '%')\r\n                        {\r\n                            // stops string parsing if characters don't match:\r\n                            if (str[s++] != '%') s = str.Length;\r\n                        }\r\n                        else if (format[f] == '[')\r\n                        {\r\n                            bool complement;\r\n                            CharMap charmap = ParseRangeSpecifier(format, ref f, out complement);\r\n                            if (charmap != null)\r\n                            {\r\n                                int start = s;\r\n\r\n                                // skip characters contained in the specifier:\r\n                                if (complement)\r\n                                {\r\n                                    while (s < str.Length && !charmap.Contains(str[s])) s++;\r\n                                }\r\n                                else\r\n                                {\r\n                                    while (s < str.Length && charmap.Contains(str[s])) s++;\r\n                                }\r\n\r\n                                item = str.Substring(start, s - start);\r\n                            }\r\n                            else\r\n                            {\r\n                                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unmatched_separator\"));\r\n                                return null;\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_scan_conversion_character\", c));\r\n                            return null;\r\n                        }\r\n                    }\r\n\r\n                    // stores the parsed value:\r\n                    if (store && item != null)\r\n                        result.Add(item);\r\n\r\n                    // shift:\r\n                    f++;\r\n                }\r\n                else if (Char.IsWhiteSpace(c))\r\n                {\r\n                    // skips additional white space in the format:\r\n                    while (f < format.Length && Char.IsWhiteSpace(format[f])) f++;\r\n\r\n                    // skips white space in the string:\r\n                    while (s < str.Length && Char.IsWhiteSpace(str[s])) s++;\r\n                }\r\n                else if (s < str.Length && c != str[s++])\r\n                {\r\n                    // stops string parsing if characters don't match:\r\n                    s = str.Length;\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extracts a range specifier from the formatting string.\r\n        /// </summary>\r\n        /// <param name=\"format\">The formatting string.</param>\r\n        /// <param name=\"f\">The position if the string pointing to the '[' at the beginning and to ']' at the end.</param>\r\n        /// <param name=\"complement\">Whether '^' was stated as the first character in the specifier.</param>\r\n        /// <returns>\r\n        /// <see cref=\"CharMap\"/> containing the characters belonging to the range or a <B>null</B> reference on error.\r\n        /// </returns>\r\n        /// <remarks>\r\n        /// Specifier should be enclosed to brackets '[', ']' and can contain complement character '^' at the beginning.\r\n        /// The first character after '[' or '^' can be ']'. In such a case the specifier continues to the next ']'.\r\n        /// </remarks>\r\n        private static CharMap ParseRangeSpecifier(string format, ref int f, out bool complement)\r\n        {\r\n            Debug.Assert(format != null && f > 0 && f < format.Length && format[f] == '[');\r\n\r\n            complement = false;\r\n\r\n            f++;\r\n            if (f < format.Length)\r\n            {\r\n                if (format[f] == '^')\r\n                {\r\n                    complement = true;\r\n                    f++;\r\n                }\r\n\r\n                if (f + 1 < format.Length)\r\n                {\r\n                    // search for ending bracket (the first symbol can be the bracket so skip it):\r\n                    int end = format.IndexOf(']', f + 1);\r\n                    if (end >= 0)\r\n                    {\r\n                        CharMap result = InitializeCharMap();\r\n                        result.AddUsingRegularMask(format, f, end, '-');\r\n                        f = end;\r\n                        return result;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a string according to a given specifier.\r\n        /// </summary>\r\n        /// <param name=\"specifier\">The specifier.</param>\r\n        /// <param name=\"width\">A width of the maximal parsed substring.</param>\r\n        /// <param name=\"str\">The string to be parsed.</param>\r\n        /// <param name=\"s\">A current position in the string.</param>\r\n        /// <returns>The parsed value or a <B>null</B> reference on error.</returns>\r\n        private static object ParseSubstring(char specifier, int width, string str, ref int s)\r\n        {\r\n            Debug.Assert(width >= 0 && str != null && s < str.Length);\r\n\r\n            object result;\r\n            int limit = (width < str.Length - s) ? s + width : str.Length;\r\n\r\n            switch (specifier)\r\n            {\r\n                case 'S':  // string\r\n                case 's':\r\n                    {\r\n                        // skips initial white spaces:\r\n                        while (s < limit && Char.IsWhiteSpace(str[s])) s++;\r\n\r\n                        int i = s;\r\n\r\n                        // skips black spaces:\r\n                        while (i < limit && !Char.IsWhiteSpace(str[i])) i++;\r\n\r\n                        // if s = length then i = s and substring returns an empty string:\r\n                        result = str.Substring(s, i - s);\r\n\r\n                        // moves behind the substring:\r\n                        s = i;\r\n\r\n                    } break;\r\n\r\n                case 'C': // character\r\n                case 'c':\r\n                    {\r\n                        result = str[s++].ToString();\r\n                        break;\r\n                    }\r\n\r\n                case 'X': // hexadecimal integer: [0-9A-Fa-f]*\r\n                case 'x':\r\n                    result = Core.Convert.SubstringToLongStrict(str, width, 16, Int32.MaxValue, ref s);\r\n                    break;\r\n\r\n                case 'o': // octal integer: [0-7]*\r\n                    result = Core.Convert.SubstringToLongStrict(str, width, 8, Int32.MaxValue, ref s);\r\n                    break;\r\n\r\n                case 'd': // decimal integer: [+-]?[0-9]*\r\n                    result = Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s);\r\n                    break;\r\n\r\n                case 'u': // unsigned decimal integer [+-]?[1-9][0-9]*\r\n                    result = unchecked((uint)Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s));\r\n                    break;\r\n\r\n                case 'i': // decimal (no prefix), hexadecimal (0[xX]...), or octal (0...) integer \r\n                    {\r\n                        // sign:\r\n                        int sign = 0;\r\n                        if (str[s] == '-') { sign = -1; s++; }\r\n                        else\r\n                            if (str[s] == '+') { sign = +1; s++; }\r\n\r\n                        // string ends \r\n                        if (s == limit)\r\n                        {\r\n                            result = 0;\r\n                            break;\r\n                        }\r\n\r\n                        if (str[s] != '0')\r\n                        {\r\n                            if (sign != 0) s--;\r\n                            result = (int)Core.Convert.SubstringToLongStrict(str, width, 10, Int32.MaxValue, ref s);\r\n                            break;\r\n                        }\r\n                        s++;\r\n\r\n                        // string ends \r\n                        if (s == limit)\r\n                        {\r\n                            result = 0;\r\n                            break;\r\n                        }\r\n\r\n                        int number = 0;\r\n\r\n                        if (str[s] == 'x' || str[s] == 'X')\r\n                        {\r\n                            s++;\r\n\r\n                            // reads unsigned hexadecimal number starting from the next position:\r\n                            if (s < limit && str[s] != '+' && str[s] != '-')\r\n                                number = (int)Core.Convert.SubstringToLongStrict(str, width, 16, Int32.MaxValue, ref s);\r\n                        }\r\n                        else\r\n                        {\r\n                            // reads unsigned octal number starting from the current position:\r\n                            if (str[s] != '+' && str[s] != '-')\r\n                                number = (int)Core.Convert.SubstringToLongStrict(str, width, 8, Int32.MaxValue, ref s);\r\n                        }\r\n\r\n                        // minus sign has been stated:\r\n                        result = (sign >= 0) ? +number : -number;\r\n                        break;\r\n                    }\r\n\r\n                case 'e': // float\r\n                case 'E':\r\n                case 'g':\r\n                case 'G':\r\n                case 'f':\r\n                    result = Core.Convert.SubstringToDouble(str, width, ref s);\r\n                    break;\r\n\r\n                case 'n': // the number of read characters is placed into result:\r\n                    result = s;\r\n                    break;\r\n\r\n                default:\r\n                    result = null;\r\n                    break;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region wordwrap\r\n\r\n        /// <summary>\r\n        /// Wraps a string to 75 characters using new line as the break character.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to word-wrap.</param>\r\n        /// <returns>The word-wrapped string.</returns>\r\n        /// <remarks>The only \"break-point\" character is space (' '). If a word is longer than 75 characers\r\n        /// it will stay uncut.</remarks>\r\n        [ImplementsFunction(\"wordwrap\")]\r\n        [return: CastToFalse]\r\n        public static string WordWrap(string str)\r\n        {\r\n            return WordWrap(str, 75, \"\\n\", false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wraps a string to a specified number of characters using new line as the break character.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to word-wrap.</param>\r\n        /// <param name=\"width\">The desired line length.</param>\r\n        /// <returns>The word-wrapped string.</returns>\r\n        /// <remarks>The only \"break-point\" character is space (' '). If a word is longer than <paramref name=\"width\"/> \r\n        /// characers it will stay uncut.</remarks>\r\n        [ImplementsFunction(\"wordwrap\")]\r\n        [return: CastToFalse]\r\n        public static string WordWrap(string str, int width)\r\n        {\r\n            return WordWrap(str, width, \"\\n\", false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wraps a string to a specified number of characters using a specified string as the break string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to word-wrap.</param>\r\n        /// <param name=\"width\">The desired line length.</param>\r\n        /// <param name=\"lineBreak\">The break string.</param>\r\n        /// <returns>The word-wrapped string.</returns>\r\n        /// <remarks>The only \"break-point\" character is space (' '). If a word is longer than <paramref name=\"width\"/> \r\n        /// characers it will stay uncut.</remarks>\r\n        [ImplementsFunction(\"wordwrap\")]\r\n        [return: CastToFalse]\r\n        public static string WordWrap(string str, int width, string lineBreak)\r\n        {\r\n            return WordWrap(str, width, lineBreak, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wraps a string to a specified number of characters using a specified string as the break string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to word-wrap.</param>\r\n        /// <param name=\"width\">The desired line length.</param>\r\n        /// <param name=\"lineBreak\">The break string.</param>\r\n        /// <param name=\"cut\">If true, words longer than <paramref name=\"width\"/> will be cut so that no line is longer\r\n        /// than <paramref name=\"width\"/>.</param>\r\n        /// <returns>The word-wrapped string.</returns>\r\n        /// <remarks>The only \"break-point\" character is space (' ').</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if the combination of <paramref name=\"width\"/> and <paramref name=\"cut\"/> is invalid.</exception>\r\n        [ImplementsFunction(\"wordwrap\")]\r\n        [return: CastToFalse]\r\n        public static string WordWrap(string str, int width, string lineBreak, bool cut)\r\n        {\r\n            if (width == 0 && cut)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"cut_forced_with_zero_width\"));\r\n                return null;\r\n            }\r\n            if (str == null) return null;\r\n\r\n            int length = str.Length;\r\n            StringBuilder result = new StringBuilder(length);\r\n\r\n            // mimic the strange PHP behaviour when width < 0 and cut is true\r\n            if (width < 0 && cut)\r\n            {\r\n                result.Append(lineBreak);\r\n                width = 1;\r\n            }\r\n\r\n            int lastSpace = -1, lineStart = 0;\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                if (str[i] == ' ')\r\n                {\r\n                    lastSpace = i;\r\n                    if (i - lineStart >= width + 1)\r\n                    {\r\n                        // cut is false if we get here\r\n                        if (lineStart == 0)\r\n                        {\r\n                            result.Append(str, 0, i);\r\n                        }\r\n                        else\r\n                        {\r\n                            result.Append(lineBreak);\r\n                            result.Append(str, lineStart, i - lineStart);\r\n                        }\r\n\r\n                        lineStart = i + 1;\r\n                        continue;\r\n                    }\r\n                }\r\n\r\n                if (i - lineStart >= width)\r\n                {\r\n                    // we reached the specified width\r\n\r\n                    if (lastSpace > lineStart) // obsolete: >=\r\n                    {\r\n                        if (lineStart > 0) result.Append(lineBreak);\r\n                        result.Append(str, lineStart, lastSpace - lineStart);\r\n                        lineStart = lastSpace + 1;\r\n                    }\r\n                    else if (cut)\r\n                    {\r\n                        if (lineStart > 0) result.Append(lineBreak);\r\n                        result.Append(str, lineStart, width);\r\n                        lineStart = i;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // process the rest of str\r\n            if (lineStart < length || lastSpace == length - 1)\r\n            {\r\n                if (lineStart > 0) result.Append(lineBreak);\r\n                result.Append(str, lineStart, length - lineStart);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region number_format, NS: money_format\r\n\r\n        /// <summary>\r\n        /// Formats a number with grouped thousands.\r\n        /// </summary>\r\n        /// <param name=\"number\">The number to format.</param>\r\n        /// <returns>String representation of the number without decimals (rounded) with comma between every group\r\n        /// of thousands.</returns>\r\n        [ImplementsFunction(\"number_format\")]\r\n        public static string FormatNumber(double number)\r\n        {\r\n            return FormatNumber(number, 0, \".\", \",\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Formats a number with grouped thousands and with given number of decimals.\r\n        /// </summary>\r\n        /// <param name=\"number\">The number to format.</param>\r\n        /// <param name=\"decimals\">The number of decimals.</param>\r\n        /// <returns>String representation of the number with <paramref name=\"decimals\"/> decimals with a dot in front, and with \r\n        /// comma between every group of thousands.</returns>\r\n        [ImplementsFunction(\"number_format\")]\r\n        public static string FormatNumber(double number, int decimals)\r\n        {\r\n            return FormatNumber(number, decimals, \".\", \",\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Formats a number with grouped thousands, with given number of decimals, with given decimal point string\r\n        /// and with given thousand separator.\r\n        /// </summary>\r\n        /// <param name=\"number\">The number to format.</param>\r\n        /// <param name=\"decimals\">The number of decimals within range 0 to 99.</param>\r\n        /// <param name=\"decimalPoint\">The string to separate integer part and decimals.</param>\r\n        /// <param name=\"thousandsSeparator\">The character to separate groups of thousands. Only the first character\r\n        /// of <paramref name=\"thousandsSeparator\"/> is used.</param>\r\n        /// <returns>\r\n        /// String representation of the number with <paramref name=\"decimals\"/> decimals with <paramref name=\"decimalPoint\"/> in \r\n        /// front, and with <paramref name=\"thousandsSeparator\"/> between every group of thousands.\r\n        /// </returns>\r\n        /// <remarks>\r\n        /// The <b>number_format</b> (<see cref=\"FormatNumber\"/>) PHP function requires <paramref name=\"decimalPoint\"/> and <paramref name=\"thousandsSeparator\"/>\r\n        /// to be of length 1 otherwise it uses default values (dot and comma respectively). As this behavior does\r\n        /// not make much sense, this method has no such limitation except for <paramref name=\"thousandsSeparator\"/> of which\r\n        /// only the first character is used (documented feature).\r\n        /// </remarks>\r\n        [ImplementsFunction(\"number_format\")]\r\n        public static string FormatNumber(double number, int decimals, string decimalPoint, string thousandsSeparator)\r\n        {\r\n            System.Globalization.NumberFormatInfo format = new System.Globalization.NumberFormatInfo();\r\n\r\n            if ((decimals >= 0) && (decimals <= 99))\r\n            {\r\n                format.NumberDecimalDigits = decimals;\r\n            }\r\n            else\r\n            {\r\n                PhpException.InvalidArgument(\"decimals\", LibResources.GetString(\"arg:out_of_bounds\", decimals));\r\n            }\r\n\r\n            if (!String.IsNullOrEmpty(decimalPoint))\r\n            {\r\n                format.NumberDecimalSeparator = decimalPoint;\r\n            }\r\n\r\n            if (thousandsSeparator == null) thousandsSeparator = String.Empty;\r\n\r\n            switch (thousandsSeparator.Length)\r\n            {\r\n                case 0: format.NumberGroupSeparator = String.Empty; break;\r\n                case 1: format.NumberGroupSeparator = thousandsSeparator; break;\r\n                default: format.NumberGroupSeparator = thousandsSeparator.Substring(0, 1); break;\r\n            }\r\n\r\n            return number.ToString(\"N\", format);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Not supported.\r\n        /// </summary>\r\n        [ImplementsFunction(\"money_format\", FunctionImplOptions.NotSupported)]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static string FormatMoney(string format, double number)\r\n        {\r\n            PhpException.FunctionNotSupported();\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region hebrev, hebrevc\r\n\r\n        /// <summary>\r\n        /// Indicates whether a character is recognized as Hebrew letter.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character.</param>\r\n        /// <returns>\r\n        /// Whether the <paramref name=\"c\"/> is a Hebrew letter according to \r\n        /// the <A href=\"http://www.unicode.org/charts/PDF/U0590.pdf\">Unicode 4.0 standard</A>.\r\n        /// </returns>\r\n        public static bool IsHebrew(char c)\r\n        {\r\n            return c >= '\\u05d0' && c <= '\\u05ea';\r\n        }\r\n\r\n        /// <summary>\r\n        /// Indicates whether a character is a space or tab.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character.</param>\r\n        /// <returns>True iff space or tab.</returns>\r\n        internal static bool IsBlank(char c)\r\n        {\r\n            return c == ' ' || c == '\\t';\r\n        }\r\n\r\n        /// <summary>\r\n        /// Indicates whether a character is new line or carriage return.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character.</param>\r\n        /// <returns>True iff new line or carriage return.</returns>\r\n        internal static bool IsNewLine(char c)\r\n        {\r\n            return c == '\\n' || c == '\\r';\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts logical Hebrew text to visual text.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"maxCharactersPerLine\">If &gt;0, maximum number of characters per line. If 0,\r\n        /// there is no maximum.</param>\r\n        /// <param name=\"convertNewLines\">Whether to convert new lines '\\n' to \"&lt;br/&gt;\".</param>\r\n        /// <returns>The converted string.</returns>\r\n        internal static string HebrewReverseInternal(string str, int maxCharactersPerLine, bool convertNewLines)\r\n        {\r\n            if (str == null || str == String.Empty) return str;\r\n            int length = str.Length, blockLength = 0, blockStart = 0, blockEnd = 0;\r\n\r\n            StringBuilder hebStr = new StringBuilder(length);\r\n            hebStr.Length = length;\r\n\r\n            bool blockTypeHeb = IsHebrew(str[0]);\r\n            int source = 0, target = length - 1;\r\n\r\n            do\r\n            {\r\n                if (blockTypeHeb)\r\n                {\r\n                    while (source + 1 < length && (IsHebrew(str[source + 1]) || IsBlank(str[source + 1]) ||\r\n                        Char.IsPunctuation(str[source + 1]) || str[source + 1] == '\\n') && blockEnd < length - 1)\r\n                    {\r\n                        source++;\r\n                        blockEnd++;\r\n                        blockLength++;\r\n                    }\r\n\r\n                    for (int i = blockStart; i <= blockEnd; i++)\r\n                    {\r\n                        switch (str[i])\r\n                        {\r\n                            case '(': hebStr[target] = ')'; break;\r\n                            case ')': hebStr[target] = '('; break;\r\n                            case '[': hebStr[target] = ']'; break;\r\n                            case ']': hebStr[target] = '['; break;\r\n                            case '{': hebStr[target] = '}'; break;\r\n                            case '}': hebStr[target] = '{'; break;\r\n                            case '<': hebStr[target] = '>'; break;\r\n                            case '>': hebStr[target] = '<'; break;\r\n                            case '\\\\': hebStr[target] = '/'; break;\r\n                            case '/': hebStr[target] = '\\\\'; break;\r\n                            default: hebStr[target] = str[i]; break;\r\n                        }\r\n                        target--;\r\n                    }\r\n                    blockTypeHeb = false;\r\n                }\r\n                else\r\n                {\r\n                    // blockTypeHeb == false\r\n\r\n                    while (source + 1 < length && !IsHebrew(str[source + 1]) && str[source + 1] != '\\n' &&\r\n                        blockEnd < length - 1)\r\n                    {\r\n                        source++;\r\n                        blockEnd++;\r\n                        blockLength++;\r\n                    }\r\n                    while ((IsBlank(str[source]) || Char.IsPunctuation(str[source])) && str[source] != '/' &&\r\n                        str[source] != '-' && blockEnd > blockStart)\r\n                    {\r\n                        source--;\r\n                        blockEnd--;\r\n                    }\r\n                    for (int i = blockEnd; i >= blockStart; i--)\r\n                    {\r\n                        hebStr[target] = str[i];\r\n                        target--;\r\n                    }\r\n                    blockTypeHeb = true;\r\n                }\r\n\r\n                blockStart = blockEnd + 1;\r\n\r\n            } while (blockEnd < length - 1);\r\n\r\n            StringBuilder brokenStr = new StringBuilder(length);\r\n            brokenStr.Length = length;\r\n            int begin = length - 1, end = begin, charCount, origBegin;\r\n            target = 0;\r\n\r\n            while (true)\r\n            {\r\n                charCount = 0;\r\n                while ((maxCharactersPerLine == 0 || charCount < maxCharactersPerLine) && begin > 0)\r\n                {\r\n                    charCount++;\r\n                    begin--;\r\n                    if (begin <= 0 || IsNewLine(hebStr[begin]))\r\n                    {\r\n                        while (begin > 0 && IsNewLine(hebStr[begin - 1]))\r\n                        {\r\n                            begin--;\r\n                            charCount++;\r\n                        }\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (charCount == maxCharactersPerLine)\r\n                {\r\n                    // try to avoid breaking words\r\n                    int newCharCount = charCount, newBegin = begin;\r\n\r\n                    while (newCharCount > 0)\r\n                    {\r\n                        if (IsBlank(hebStr[newBegin]) || IsNewLine(hebStr[newBegin])) break;\r\n\r\n                        newBegin++;\r\n                        newCharCount--;\r\n                    }\r\n                    if (newCharCount > 0)\r\n                    {\r\n                        charCount = newCharCount;\r\n                        begin = newBegin;\r\n                    }\r\n                }\r\n                origBegin = begin;\r\n\r\n                if (IsBlank(hebStr[begin])) hebStr[begin] = '\\n';\r\n\r\n                while (begin <= end && IsNewLine(hebStr[begin]))\r\n                {\r\n                    // skip leading newlines\r\n                    begin++;\r\n                }\r\n\r\n                for (int i = begin; i <= end; i++)\r\n                {\r\n                    // copy content\r\n                    brokenStr[target] = hebStr[i];\r\n                    target++;\r\n                }\r\n\r\n                for (int i = origBegin; i <= end && IsNewLine(hebStr[i]); i++)\r\n                {\r\n                    brokenStr[target] = hebStr[i];\r\n                    target++;\r\n                }\r\n\r\n                begin = origBegin;\r\n                if (begin <= 0) break;\r\n\r\n                begin--;\r\n                end = begin;\r\n            }\r\n\r\n            if (convertNewLines) brokenStr.Replace(\"\\n\", \"<br/>\\n\");\r\n            return brokenStr.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts logical Hebrew text to visual text.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The comverted string.</returns>\r\n        /// <remarks>Although PHP returns false if <paramref name=\"str\"/> is null or empty there is no reason to do so.</remarks>\r\n        [ImplementsFunction(\"hebrev\")]\r\n        public static string HebrewReverse(string str)\r\n        {\r\n            return HebrewReverseInternal(str, 0, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts logical Hebrew text to visual text.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"maxCharactersPerLine\">Maximum number of characters per line.</param>\r\n        /// <returns>The comverted string.</returns>\r\n        /// <remarks>Although PHP returns false if <paramref name=\"str\"/> is null or empty there is no reason to do so.</remarks>\r\n        [ImplementsFunction(\"hebrev\")]\r\n        public static string HebrewReverse(string str, int maxCharactersPerLine)\r\n        {\r\n            return HebrewReverseInternal(str, maxCharactersPerLine, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts logical Hebrew text to visual text and also converts new lines '\\n' to \"&lt;br/&gt;\".\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The converted string.</returns>\r\n        /// <remarks>Although PHP returns false if <paramref name=\"str\"/> is null or empty there is no reason to do so.</remarks>\r\n        [ImplementsFunction(\"hebrevc\")]\r\n        public static string HebrewReverseWithNewLines(string str)\r\n        {\r\n            return HebrewReverseInternal(str, 0, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts logical Hebrew text to visual text and also converts new lines '\\n' to \"&lt;br/&gt;\".\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <param name=\"maxCharactersPerLine\">Maximum number of characters per line.</param>\r\n        /// <returns>The comverted string.</returns>\r\n        /// <remarks>Although PHP returns false if <paramref name=\"str\"/> is null or empty there is no reason to do so.</remarks>\r\n        [ImplementsFunction(\"hebrevc\")]\r\n        public static string HebrewReverseWithNewLines(string str, int maxCharactersPerLine)\r\n        {\r\n            return HebrewReverseInternal(str, maxCharactersPerLine, true);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strnatcmp, strnatcasecmp\r\n\r\n        /// <summary>\r\n        /// Compares two strings using the natural ordering.\r\n        /// </summary>\r\n        /// <example>NaturalCompare(\"page155\", \"page16\") returns 1.</example>\r\n        /// <include file='Doc/../../Core/Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        [ImplementsFunction(\"strnatcmp\")]\r\n        public static int NaturalCompare(string x, string y)\r\n        {\r\n            return PhpNaturalComparer.Default.Compare(x, y);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two strings using the natural ordering. Ignores the case.\r\n        /// </summary>\r\n        /// <include file='Doc/../../Core/Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        [ImplementsFunction(\"strnatcasecmp\")]\r\n        public static int NaturalCompareIgnoringCase(string x, string y)\r\n        {\r\n            return PhpNaturalComparer.CaseInsensitive.Compare(x, y);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region str_pad\r\n\r\n        /// <summary>\r\n        /// Pads a string to a certain length with spaces.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to pad.</param>\r\n        /// <param name=\"totalWidth\">Desired length of the returned string.</param>\r\n        /// <returns><paramref name=\"str\"/> padded on the right with spaces.</returns>\r\n        [ImplementsFunction(\"str_pad\")]\r\n        public static object Pad(object str, int totalWidth)\r\n        {\r\n            if (str is PhpBytes) return Pad(str, totalWidth, new PhpBytes(32));\r\n            else return Pad(str, totalWidth, \" \");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pads a string to certain length with another string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to pad.</param>\r\n        /// <param name=\"totalWidth\">Desired length of the returned string.</param>\r\n        /// <param name=\"paddingString\">The string to use as the pad.</param>\r\n        /// <returns><paramref name=\"str\"/> padded on the right with <paramref name=\"paddingString\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"paddingString\"/> is null or empty.</exception>\r\n        [ImplementsFunction(\"str_pad\")]\r\n        public static object Pad(object str, int totalWidth, object paddingString)\r\n        {\r\n            return Pad(str, totalWidth, paddingString, PaddingType.Right);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pads a string to certain length with another string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to pad.</param>\r\n        /// <param name=\"totalWidth\">Desired length of the returned string.</param>\r\n        /// <param name=\"paddingString\">The string to use as the pad.</param>\r\n        /// <param name=\"paddingType\">Specifies whether the padding should be done on the left, on the right,\r\n        /// or on both sides of <paramref name=\"str\"/>.</param>\r\n        /// <returns><paramref name=\"str\"/> padded with <paramref name=\"paddingString\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"paddingType\"/> is invalid or <paramref name=\"paddingString\"/> is null or empty.</exception>\r\n        [ImplementsFunction(\"str_pad\")]\r\n        public static object Pad(object str, int totalWidth, object paddingString, PaddingType paddingType)\r\n        {\r\n            PhpBytes binstr = str as PhpBytes;\r\n            if (str is PhpBytes)\r\n            {\r\n                PhpBytes binPaddingString = Core.Convert.ObjectToPhpBytes(paddingString);\r\n\r\n                if (binPaddingString == null || binPaddingString.Length == 0)\r\n                {\r\n                    PhpException.InvalidArgument(\"paddingString\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                    return null;\r\n                }\r\n                if (binstr == null) binstr = PhpBytes.Empty;\r\n\r\n                int length = binstr.Length;\r\n                if (totalWidth <= length) return binstr;\r\n\r\n                int pad = totalWidth - length, padLeft = 0, padRight = 0;\r\n\r\n                switch (paddingType)\r\n                {\r\n                    case PaddingType.Left: padLeft = pad; break;\r\n                    case PaddingType.Right: padRight = pad; break;\r\n\r\n                    case PaddingType.Both:\r\n                        padLeft = pad / 2;\r\n                        padRight = pad - padLeft;\r\n                        break;\r\n\r\n                    default:\r\n                        PhpException.InvalidArgument(\"paddingType\");\r\n                        break;\r\n                }\r\n\r\n                // if paddingString has length 1, use String.PadLeft and String.PadRight\r\n                int padStrLength = binPaddingString.Length;\r\n\r\n                // else build the resulting string manually\r\n                byte[] result = new byte[totalWidth];\r\n\r\n                int position = 0;\r\n\r\n                // pad left\r\n                while (padLeft > padStrLength)\r\n                {\r\n                    Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padStrLength);\r\n                    padLeft -= padStrLength;\r\n                    position += padStrLength;\r\n                }\r\n\r\n                if (padLeft > 0)\r\n                {\r\n                    Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padLeft);\r\n                    position += padLeft;\r\n                }\r\n\r\n                Buffer.BlockCopy(binstr.ReadonlyData, 0, result, position, binstr.Length);\r\n                position += binstr.Length;\r\n\r\n                // pad right\r\n                while (padRight > padStrLength)\r\n                {\r\n                    Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padStrLength);\r\n                    padRight -= padStrLength;\r\n                    position += padStrLength;\r\n                }\r\n\r\n                if (padRight > 0)\r\n                {\r\n                    Buffer.BlockCopy(binPaddingString.ReadonlyData, 0, result, position, padRight);\r\n                    position += padRight;\r\n                }\r\n\r\n                return new PhpBytes(result);\r\n            }\r\n\r\n            string unistr = Core.Convert.ObjectToString(str);\r\n            if (unistr != null)\r\n            {\r\n                string uniPaddingString = Core.Convert.ObjectToString(paddingString);\r\n\r\n                if (String.IsNullOrEmpty(uniPaddingString))\r\n                {\r\n                    PhpException.InvalidArgument(\"paddingString\", LibResources.GetString(\"arg:null_or_empty\"));\r\n                    return null;\r\n                }\r\n                if (unistr == null) unistr = String.Empty;\r\n\r\n                int length = unistr.Length;\r\n                if (totalWidth <= length) return unistr;\r\n\r\n                int pad = totalWidth - length, padLeft = 0, padRight = 0;\r\n\r\n                switch (paddingType)\r\n                {\r\n                    case PaddingType.Left: padLeft = pad; break;\r\n                    case PaddingType.Right: padRight = pad; break;\r\n\r\n                    case PaddingType.Both:\r\n                        padLeft = pad / 2;\r\n                        padRight = pad - padLeft;\r\n                        break;\r\n\r\n                    default:\r\n                        PhpException.InvalidArgument(\"paddingType\");\r\n                        break;\r\n                }\r\n\r\n                // if paddingString has length 1, use String.PadLeft and String.PadRight\r\n                int padStrLength = uniPaddingString.Length;\r\n                if (padStrLength == 1)\r\n                {\r\n                    char c = uniPaddingString[0];\r\n                    if (padLeft > 0) unistr = unistr.PadLeft(length + padLeft, c);\r\n                    if (padRight > 0) unistr = unistr.PadRight(totalWidth, c);\r\n\r\n                    return unistr;\r\n                }\r\n\r\n                // else build the resulting string manually\r\n                StringBuilder result = new StringBuilder(totalWidth);\r\n\r\n                // pad left\r\n                while (padLeft > padStrLength)\r\n                {\r\n                    result.Append(uniPaddingString);\r\n                    padLeft -= padStrLength;\r\n                }\r\n                if (padLeft > 0) result.Append(uniPaddingString.Substring(0, padLeft));\r\n\r\n                result.Append(unistr);\r\n\r\n                // pad right\r\n                while (padRight > padStrLength)\r\n                {\r\n                    result.Append(uniPaddingString);\r\n                    padRight -= padStrLength;\r\n                }\r\n                if (padRight > 0) result.Append(uniPaddingString.Substring(0, padRight));\r\n\r\n                return result.ToString();\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region str_word_count\r\n\r\n        /// <summary>\r\n        /// Counts the number of words inside a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string containing words to count.</param>\r\n        /// <returns>Then number of words inside <paramref name=\"str\"/>. </returns>\r\n        [ImplementsFunction(\"str_word_count\")]\r\n        public static int CountWords(string str)\r\n        {\r\n            return CountWords(str, WordCountResult.WordCount, null, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Splits a string into words.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to split.</param>\r\n        /// <param name=\"format\">If <see cref=\"WordCountResult.WordsArray\"/>, the method returns an array containing all\r\n        /// the words found inside the string. If <see cref=\"WordCountResult.PositionsToWordsMapping\"/>, the method returns \r\n        /// an array, where the key is the numeric position of the word inside the string and the value is the \r\n        /// actual word itself.</param>\r\n        /// <returns>Array of words. Keys are just numbers starting with 0 (when <paramref name=\"format\"/> is \r\n        /// WordCountResult.WordsArray) or positions of the words inside <paramref name=\"str\"/> (when\r\n        /// <paramref name=\"format\"/> is <see cref=\"WordCountResult.PositionsToWordsMapping\"/>).</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"format\"/> is invalid.</exception>\r\n        [ImplementsFunction(\"str_word_count\")]\r\n        public static object CountWords(string str, WordCountResult format)\r\n        {\r\n            return CountWords(str, format, null);\r\n        }\r\n\r\n        [ImplementsFunction(\"str_word_count\")]\r\n        public static object CountWords(string str, WordCountResult format, string addWordChars)\r\n        {\r\n            PhpArray words = (format != WordCountResult.WordCount) ? new PhpArray() : null;\r\n\r\n            int count = CountWords(str, format, addWordChars, words);\r\n\r\n            if (count == -1)\r\n                return false;\r\n\r\n            if (format == WordCountResult.WordCount)\r\n                return count;\r\n            else\r\n            {\r\n                if (words != null)\r\n                    return words;\r\n                else\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        private static bool IsWordChar(char c, CharMap map)\r\n        {\r\n            return Char.IsLetter(c) || map != null && map.Contains(c);\r\n        }\r\n\r\n        public static int CountWords(string str, WordCountResult format, string addWordChars, IDictionary words)\r\n        {\r\n            if (str == null)\r\n                return 0;\r\n            if (format != WordCountResult.WordCount && words == null)\r\n                throw new ArgumentNullException(\"words\");\r\n\r\n            CharMap charmap = null;\r\n\r\n            if (!String.IsNullOrEmpty(addWordChars))\r\n            {\r\n                charmap = InitializeCharMap();\r\n                charmap.Add(addWordChars);\r\n            }\r\n\r\n            // find the end\r\n            int last = str.Length - 1;\r\n            if (last > 0 && str[last] == '-' && !IsWordChar(str[last], charmap)) last--;\r\n\r\n            // find the beginning\r\n            int pos = 0;\r\n            if (last >= 0 && (str[0] == '-' || str[0] == '\\'') && !IsWordChar(str[0], charmap)) pos++;\r\n\r\n            int word_count = 0;\r\n\r\n            while (pos <= last)\r\n            {\r\n                if (IsWordChar(str[pos], charmap) || str[pos] == '\\'' || str[pos] == '-')\r\n                {\r\n                    // word started - read it whole:\r\n                    int word_start = pos++;\r\n                    while (pos <= last &&\r\n                        (IsWordChar(str[pos], charmap) ||\r\n                         str[pos] == '\\'' || str[pos] == '-'))\r\n                    {\r\n                        pos++;\r\n                    }\r\n\r\n                    switch (format)\r\n                    {\r\n                        case WordCountResult.WordCount:\r\n                            break;\r\n\r\n                        case WordCountResult.WordsArray:\r\n                            words.Add(word_count, str.Substring(word_start, pos - word_start));\r\n                            break;\r\n\r\n                        case WordCountResult.PositionsToWordsMapping:\r\n                            words.Add(word_start, str.Substring(word_start, pos - word_start));\r\n                            break;\r\n\r\n                        default:\r\n                            PhpException.InvalidArgument(\"format\");\r\n                            return -1;\r\n                    }\r\n\r\n                    word_count++;\r\n                }\r\n                else pos++;\r\n            }\r\n            return word_count;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strcmp, strcasecmp, strncmp, strncasecmp\r\n\r\n        /// <summary>\r\n        /// Compares two specified strings, honoring their case, using culture invariant comparison.\r\n        /// </summary>\r\n        /// <param name=\"str1\">A string.</param>\r\n        /// <param name=\"str2\">A string.</param>\r\n        /// <returns>Returns -1 if <paramref name=\"str1\"/> is less than <paramref name=\"str2\"/>; +1 if <paramref name=\"str1\"/> is greater than <paramref name=\"str2\"/>,\r\n        /// and 0 if they are equal.</returns>\r\n        [ImplementsFunction(\"strcmp\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static int Compare(string str1, string str2)\r\n        {\r\n            return String.CompareOrdinal(str1, str2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two specified strings, ignoring their case, using culture invariant comparison.\r\n        /// </summary>\r\n        /// <param name=\"str1\">A string.</param>\r\n        /// <param name=\"str2\">A string.</param>\r\n        /// <returns>Returns -1 if <paramref name=\"str1\"/> is less than <paramref name=\"str2\"/>; +1 if <paramref name=\"str1\"/> is greater than <paramref name=\"str2\"/>,\r\n        /// and 0 if they are equal.</returns>\r\n        [ImplementsFunction(\"strcasecmp\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static int CompareIgnoringCase(string str1, string str2)\r\n        {\r\n#if SILVERLIGHT\r\n\t\t\treturn String.Compare(str1, str2, System.Globalization.CultureInfo.InvariantCulture,System.Globalization.CompareOptions.IgnoreCase);\r\n#else\r\n            return String.Compare(str1, str2, true, System.Globalization.CultureInfo.InvariantCulture);\r\n#endif\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares parts of two specified strings, honoring their case, using culture invariant comparison.\r\n        /// </summary>\r\n        /// <param name=\"str1\">The lesser string.</param>\r\n        /// <param name=\"str2\">The greater string.</param>\r\n        /// <param name=\"length\">The upper limit of the length of parts to be compared.</param>\r\n        /// <returns>Returns -1 if <paramref name=\"str1\"/> is less than <paramref name=\"str2\"/>; +1 if <paramref name=\"str1\"/> is greater than <paramref name=\"str2\"/>,\r\n        /// and 0 if they are equal.</returns>\r\n        [ImplementsFunction(\"strncmp\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object Compare(string str1, string str2, int length)\r\n        {\r\n            if (length < 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"must_be_positive\", \"Length\"));\r\n                return false;\r\n            }\r\n\r\n            return String.CompareOrdinal(str1, 0, str2, 0, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares parts of two specified strings, honoring their case, using culture invariant comparison.\r\n        /// </summary>\r\n        /// <param name=\"str1\">A string.</param>\r\n        /// <param name=\"str2\">A string.</param>\r\n        /// <param name=\"length\">The upper limit of the length of parts to be compared.</param>\r\n        /// <returns>Returns -1 if <paramref name=\"str1\"/> is less than <paramref name=\"str2\"/>; +1 if <paramref name=\"str1\"/> is greater than <paramref name=\"str2\"/>,\r\n        /// and 0 if they are equal.</returns>\r\n        [ImplementsFunction(\"strncasecmp\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object CompareIgnoringCase(string str1, string str2, int length)\r\n        {\r\n            if (length < 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"must_be_positive\", \"Length\"));\r\n                return false;\r\n            }\r\n\r\n#if SILVERLIGHT\r\n\t\t\treturn String.Compare(str1, 0, str2, 0, length, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreCase);\r\n#else\r\n            return String.Compare(str1, 0, str2, 0, length, true, System.Globalization.CultureInfo.InvariantCulture);\r\n#endif\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strpos, strrpos, stripos, strripos\r\n\r\n        #region Stubs\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the first occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>.\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strpos(string,object,int)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"strpos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strpos(string haystack, object needle)\r\n        {\r\n            return Strpos(haystack, needle, 0, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the first occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>.\r\n        /// The search starts at the specified character position.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"needle\">\r\n        /// The string or the ordinal value of character to search for. \r\n        /// If non-string is passed as a needle then it is converted to an integer (modulo 256) and the character\r\n        /// with such ordinal value (relatively to the current encoding set in the configuration) is searched.</param>\r\n        /// <param name=\"offset\">\r\n        /// The position where to start searching. Should be between 0 and a length of the <paramref name=\"haystack\"/> including.\r\n        /// </param>\r\n        /// <returns>Non-negative integer on success, -1 otherwise.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"offset\"/> is out of bounds or <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"strpos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strpos(string haystack, object needle, int offset)\r\n        {\r\n            return Strpos(haystack, needle, offset, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the first occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>\r\n        /// (case insensitive).\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strpos(string,object,int)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"stripos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Stripos(string haystack, object needle)\r\n        {\r\n            return Strpos(haystack, needle, 0, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the first occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>\r\n        /// (case insensitive).\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strpos(string,object,int)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"offset\"/> is out of bounds or <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"stripos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Stripos(string haystack, object needle, int offset)\r\n        {\r\n            return Strpos(haystack, needle, offset, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the last occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>.\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strrpos(string,object,int)\"/> for details.</remarks>\r\n        [ImplementsFunction(\"strrpos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strrpos(string haystack, object needle)\r\n        {\r\n            return Strrpos(haystack, needle, 0, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the last occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>.\r\n        /// The search starts at the specified character position.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"needle\">The string or the ordinal value of character to search for. \r\n        /// If non-string is passed as a needle then it is converted to an integer (modulo 256) and the character\r\n        /// with such ordinal value (relatively to the current encoding set in the configuration) is searched.</param>\r\n        /// <param name=\"offset\">\r\n        /// The position where to start searching (is non-negative) or a negative number of characters\r\n        /// prior the end where to stop searching (if negative).\r\n        /// </param>\r\n        /// <returns>Non-negative integer on success, -1 otherwise.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"offset\"/> is out of bounds or <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"strrpos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strrpos(string haystack, object needle, int offset)\r\n        {\r\n            return Strrpos(haystack, needle, offset, false);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the last occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>\r\n        /// (case insensitive).\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strrpos(string,object,int)\"/> for details.</remarks>\r\n        [ImplementsFunction(\"strripos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strripos(string haystack, string needle)\r\n        {\r\n            return Strrpos(haystack, needle, 0, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the index of the last occurrence of the <paramref name=\"needle\"/> in the <paramref name=\"haystack\"/>\r\n        /// (case insensitive).\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strrpos(string,object,int)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown if <paramref name=\"offset\"/> is out of bounds or <paramref name=\"needle\"/> is empty string.</exception>\r\n        [ImplementsFunction(\"strripos\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static int Strripos(string haystack, object needle, int offset)\r\n        {\r\n            return Strrpos(haystack, needle, offset, true);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Implementation of <c>str[i]pos</c> functions.\r\n        /// </summary>\r\n        public static int Strpos(string haystack, object needle, int offset, bool ignoreCase)\r\n        {\r\n            if (String.IsNullOrEmpty(haystack)) return -1;\r\n\r\n            if (offset < 0 || offset >= haystack.Length)\r\n            {\r\n                if (offset != haystack.Length)\r\n                    PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"arg:out_of_bounds\"));\r\n                return -1;\r\n            }\r\n\r\n            string str_needle = PhpVariable.AsString(needle);\r\n            if (str_needle != null)\r\n            {\r\n                if (str_needle == String.Empty)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return -1;\r\n                }\r\n\r\n                if (ignoreCase)\r\n                    return haystack.IndexOf(str_needle, offset, StringComparison.OrdinalIgnoreCase);\r\n                else\r\n                    return haystack.IndexOf(str_needle, offset, StringComparison.Ordinal);\r\n            }\r\n            else\r\n            {\r\n                if (ignoreCase)\r\n                    return haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), offset, StringComparison.OrdinalIgnoreCase);\r\n                else\r\n                    return haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), offset, StringComparison.Ordinal);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implementation of <c>strr[i]pos</c> functions.\r\n        /// </summary>\r\n        public static int Strrpos(string haystack, object needle, int offset, bool ignoreCase)\r\n        {\r\n            if (String.IsNullOrEmpty(haystack)) return -1;\r\n\r\n            int end = haystack.Length - 1;\r\n            if (offset > end || offset < -end - 1)\r\n            {\r\n                PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"arg:out_of_bounds\"));\r\n                return -1;\r\n            }\r\n\r\n            string str_needle = PhpVariable.AsString(needle);\r\n            if (offset < 0)\r\n            {\r\n                end += offset + (str_needle != null ? str_needle.Length : 1);\r\n                offset = 0;\r\n            }\r\n\r\n            if (str_needle != null)\r\n            {\r\n                if (str_needle.Length == 0)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return -1;\r\n                }\r\n\r\n                if (ignoreCase)\r\n                    return haystack.LastIndexOf(str_needle, end, end - offset + 1, StringComparison.OrdinalIgnoreCase);\r\n                else\r\n                    return haystack.LastIndexOf(str_needle, end, end - offset + 1, StringComparison.Ordinal);\r\n            }\r\n            else\r\n            {\r\n                if (ignoreCase)\r\n                    return haystack.LastIndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), end, end - offset + 1, StringComparison.OrdinalIgnoreCase);\r\n                else\r\n                    return haystack.LastIndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256), end, end - offset + 1, StringComparison.Ordinal);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strstr, stristr, strchr, strrchr\r\n\r\n        #region Stubs\r\n\r\n        /// <summary>\r\n        /// Finds first occurrence of a string.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"needle\">The substring to search for.</param>\r\n        /// <returns>Part of <paramref name=\"haystack\"/> string from the first occurrence of <paramref name=\"needle\"/> to the end \r\n        /// of <paramref name=\"haystack\"/> or null if <paramref name=\"needle\"/> is not found.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"strstr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static string Strstr(string haystack, object needle)\r\n        {\r\n            return StrstrImpl(haystack, needle, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds first occurrence of a string.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"needle\">The substring to search for.</param>\r\n        /// <param name=\"beforeNeedle\">If TRUE, strstr() returns the part of the haystack before the first occurrence of the needle. </param>\r\n        /// <returns>Part of <paramref name=\"haystack\"/> string from the first occurrence of <paramref name=\"needle\"/> to the end \r\n        /// of <paramref name=\"haystack\"/> or null if <paramref name=\"needle\"/> is not found.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"strstr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static string Strstr(string haystack, object needle, bool beforeNeedle /*= false*/)\r\n        {\r\n            return StrstrImpl(haystack, needle, false, beforeNeedle);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds first occurrence of a string. Alias of <see cref=\"Strstr(string,object)\"/>.\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"Strstr(string,object)\"/> for details.</remarks>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"strchr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static string Strchr(string haystack, object needle)\r\n        {\r\n            return StrstrImpl(haystack, needle, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case insensitive version of <see cref=\"Strstr(string,object)\"/>.\r\n        /// </summary>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"stristr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static string Stristr(string haystack, object needle)\r\n        {\r\n            return StrstrImpl(haystack, needle, true, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Case insensitive version of <see cref=\"Strstr(string,object)\"/>.\r\n        /// </summary>\r\n        /// <param name=\"haystack\"></param>\r\n        /// <param name=\"needle\"></param>\r\n        /// <param name=\"beforeNeedle\">If TRUE, strstr() returns the part of the haystack before the first occurrence of the needle. </param>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"stristr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static string Stristr(string haystack, object needle, bool beforeNeedle /*= false*/)\r\n        {\r\n            return StrstrImpl(haystack, needle, true, beforeNeedle);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// This function returns the portion of haystack  which starts at the last occurrence of needle  and goes until the end of haystack . \r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"needle\">\r\n        /// If needle contains more than one character, only the first is used. This behavior is different from that of strstr().\r\n        /// If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.\r\n        /// </param>\r\n        /// <returns>This function returns the portion of string, or FALSE  if needle  is not found.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"needle\"/> is empty.</exception>\r\n        [ImplementsFunction(\"strrchr\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static string Strrchr(string haystack, object needle)\r\n        {\r\n            if (haystack == null)\r\n                return null;\r\n\r\n            char charToFind;\r\n            string str_needle;\r\n\r\n            if ((str_needle = PhpVariable.AsString(needle)) != null)\r\n            {\r\n                if (str_needle.Length == 0)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return null;\r\n                }\r\n\r\n                charToFind = str_needle[0];\r\n            }\r\n            else\r\n            {\r\n                charToFind = ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256)[0];\r\n            }\r\n\r\n            int index = haystack.LastIndexOf(charToFind);\r\n            if (index < 0)\r\n                return null;\r\n\r\n            return haystack.Substring(index);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implementation of <c>str[i]{chr|str}</c> functions.\r\n        /// </summary>\r\n        internal static string StrstrImpl(string haystack, object needle, bool ignoreCase, bool beforeNeedle)\r\n        {\r\n            if (haystack == null) return null;\r\n\r\n            int index;\r\n            string str_needle = PhpVariable.AsString(needle);\r\n            if (str_needle != null)\r\n            {\r\n                if (str_needle == String.Empty)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return null;\r\n                }\r\n\r\n                if (ignoreCase)\r\n                    index = haystack.ToLower().IndexOf(str_needle.ToLower());\r\n                else\r\n                    index = haystack.IndexOf(str_needle);\r\n            }\r\n            else\r\n            {\r\n                if (ignoreCase)\r\n                    index = haystack.ToLower().IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256).ToLower());\r\n                else\r\n                    index = haystack.IndexOf(ChrUnicode(Core.Convert.ObjectToInteger(needle) % 256));\r\n            }\r\n\r\n            return (index == -1) ? null : (beforeNeedle ? haystack.Substring(0, index) : haystack.Substring(index));\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strpbrk\r\n\r\n        /// <summary>\r\n        /// Finds first occurence of any of given characters.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string to search in.</param>\r\n        /// <param name=\"charList\">The characters to search for given as a string.</param>\r\n        /// <returns>Part of <paramref name=\"haystack\"/> string from the first occurrence of any of characters contained\r\n        /// in <paramref name=\"charList\"/> to the end of <paramref name=\"haystack\"/> or <B>null</B> if no character is\r\n        /// found.</returns>\r\n        /// <exception cref=\"PhpException\">Thrown when <paramref name=\"charList\"/> is empty.</exception>\r\n        [ImplementsFunction(\"strpbrk\")]\r\n        [return: CastToFalse]\r\n        public static string Strpbrk(string haystack, string charList)\r\n        {\r\n            if (charList == null)\r\n            {\r\n                PhpException.InvalidArgument(\"charList\", LibResources.GetString(\"arg:empty\"));\r\n                return null;\r\n            }\r\n\r\n            if (haystack == null) return null;\r\n\r\n            int index = haystack.IndexOfAny(charList.ToCharArray());\r\n            return (index >= 0 ? haystack.Substring(index) : null);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region strtolower, strtoupper, strlen\r\n\r\n        /// <summary>\r\n        /// Returns string with all alphabetic characters converted to lowercase. \r\n        /// Note that 'alphabetic' is determined by the current culture.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The lowercased string or empty string if <paramref name=\"str\"/> is null.</returns>\r\n        [ImplementsFunction(\"strtolower\")]\r\n        public static string ToLower(string str)\r\n        {\r\n            return (str == null) ? String.Empty : str.ToLower(Locale.GetCulture(Locale.Category.CType));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns string with all alphabetic characters converted to lowercase. \r\n        /// Note that 'alphabetic' is determined by the current culture.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to convert.</param>\r\n        /// <returns>The lowercased string or empty string if <paramref name=\"str\"/> is null.</returns>\r\n        [ImplementsFunction(\"strtoupper\")]\r\n        public static string ToUpper(string str)\r\n        {\r\n            return (str == null) ? String.Empty : str.ToUpper(Locale.GetCulture(Locale.Category.CType));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the length of a string.\r\n        /// </summary>\r\n        /// <param name=\"x\">The string (either <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>).</param>\r\n        /// <returns>The length of the string.</returns>\r\n        [ImplementsFunction(\"strlen\"/*, FunctionImplOptions.Special*/)]\r\n        [PureFunction]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static int Length(object x)\r\n        {\r\n            string str = x as string;\r\n            if (str != null) return str.Length;\r\n\r\n            PhpBytes bytes = x as PhpBytes;\r\n            if (bytes != null) return bytes.Length;\r\n\r\n            PhpString phpstr = x as PhpString;\r\n            if (phpstr != null) return phpstr.Length;\r\n\r\n            return Core.Convert.ObjectToString(x).Length;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helpers\r\n\r\n        /// <summary>\r\n        /// Converts object <paramref name=\"obj\"/> to <see cref=\"System.String\"/>.\r\n        /// In case if bunary string, the conversion routine respects given <paramref name=\"charSet\"/>.\r\n        /// </summary>\r\n        /// <param name=\"obj\">Object to be converted.</param>\r\n        /// <param name=\"charSet\">Character set used to encode binary string to <see cref=\"System.String\"/>.</param>\r\n        /// <returns>String representation of <paramref name=\"obj\"/>.</returns>\r\n        internal static string ObjectToString(object obj, string charSet)\r\n        {\r\n            if (obj != null && obj.GetType() == typeof(PhpBytes))\r\n            {\r\n                var encoding = Encoding.GetEncoding(charSet);\r\n                if (encoding == null)\r\n                    throw new ArgumentException(string.Format(Strings.arg_invalid_value, \"charSet\", charSet), \"charSet\");\r\n\r\n                return encoding.GetString(((PhpBytes)obj).ReadonlyData);\r\n            }\r\n            else\r\n            {\r\n                return Core.Convert.ObjectToString(obj);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Strings.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"option_already_registered\" xml:space=\"preserve\">\r\n    <value>Option '{0}' has already been registered.</value>\r\n  </data>\r\n  <data name=\"serializer_already_registered\" xml:space=\"preserve\">\r\n    <value>Serializer '{0}' has already been registered.</value>\r\n  </data>\r\n  <data name=\"serialization_unsupported_type\" xml:space=\"preserve\">\r\n    <value>Serialization of type {0} is not supported by PhpFormatter.</value>\r\n  </data>\r\n  <data name=\"unexpected_character_in_stream\" xml:space=\"preserve\">\r\n    <value>Unexpected character in the stream.</value>\r\n  </data>\r\n  <data name=\"unexpected_end_of_stream\" xml:space=\"preserve\">\r\n    <value>Unexpected end of stream.</value>\r\n  </data>\r\n  <data name=\"invalid_data_bad_length\" xml:space=\"preserve\">\r\n    <value>Invalid data encountered in the stream (bad length marker).</value>\r\n  </data>\r\n  <data name=\"invalid_data_bad_type\" xml:space=\"preserve\">\r\n    <value>Invalid data encountered in the stream (the specified data type is invalid in this context).</value>\r\n  </data>\r\n  <data name=\"invalid_data_bad_back_reference\" xml:space=\"preserve\">\r\n    <value>Invalid data encountered in the stream (bad back reference marker).</value>\r\n  </data>\r\n  <data name=\"class_instantiation_failed\" xml:space=\"preserve\">\r\n    <value>Unable to instantiate class '{0}'.</value>\r\n  </data>\r\n  <data name=\"serialization_binder_unsupported\" xml:space=\"preserve\">\r\n    <value>PhpFormatter does not support serialization binders.</value>\r\n  </data>\r\n  <data name=\"streaming_context_unsupported\" xml:space=\"preserve\">\r\n    <value>PhpFormatter does not support streaming context.</value>\r\n  </data>\r\n  <data name=\"surrogate_selector_unsupported\" xml:space=\"preserve\">\r\n    <value>PhpFormatter does not support surrogate selectors.</value>\r\n  </data>\r\n  <data name=\"regexp_duplicate_quantifier\" xml:space=\"preserve\">\r\n    <value>Nothing to repeat - duplicate quantifier at offset {0} in matching part of regular expression.</value>\r\n  </data>\r\n  <data name=\"class_has_no_unserializer\" xml:space=\"preserve\">\r\n    <value>Class {0} has no unserializer</value>\r\n  </data>\r\n  <data name=\"serialize_must_return_null_or_string\" xml:space=\"preserve\">\r\n    <value>{0}::serialize() must return a string or NULL</value>\r\n  </data>\r\n  <data name=\"web_server_not_available\" xml:space=\"preserve\">\r\n    <value />\r\n  </data>\r\n  <data name=\"headers_has_been_sent\" xml:space=\"preserve\">\r\n    <value>Headers has already been sent; modification of cookies or other HTTP headers are not allowed</value>\r\n  </data>\r\n  <data name=\"additional_parameters_not_supported\" xml:space=\"preserve\">\r\n    <value>Additional parameters not supported</value>\r\n  </data>\r\n  <data name=\"number_of_elements_not_positive\" xml:space=\"preserve\">\r\n    <value>Number of elements must be positive</value>\r\n  </data>\r\n  <data name=\"number_of_repetitions_negative\" xml:space=\"preserve\">\r\n    <value>Number of repetitions must be non-negative</value>\r\n  </data>\r\n  <data name=\"both_must_be_arrays_or_nonarrays\" xml:space=\"preserve\">\r\n    <value />\r\n  </data>\r\n  <data name=\"invalid_url\" xml:space=\"preserve\">\r\n    <value>Not a valid URL, unable to parse ({0})</value>\r\n  </data>\r\n  <data name=\"invalid_src_charset\" xml:space=\"preserve\">\r\n    <value>Invalid source charser</value>\r\n  </data>\r\n  <data name=\"invalid_dst_charset\" xml:space=\"preserve\">\r\n    <value>Invalid destination charser</value>\r\n  </data>\r\n  <data name=\"limit_less_than_one\" xml:space=\"preserve\">\r\n    <value>Limit is less than 1</value>\r\n  </data>\r\n  <data name=\"range_shared_endpoint\" xml:space=\"preserve\">\r\n    <value>Ranges cannot share an endpoint</value>\r\n  </data>\r\n  <data name=\"range_not_allowed\" xml:space=\"preserve\">\r\n    <value>Range not allowed here (first endpoint may be illeagal)</value>\r\n  </data>\r\n  <data name=\"first_endpoint_character_class\" xml:space=\"preserve\">\r\n    <value>First endpoint of range cannot be a character class</value>\r\n  </data>\r\n  <data name=\"word_boundary_not_single_bracket_expr\" xml:space=\"preserve\">\r\n    <value>Word boundary must be single bracket expression</value>\r\n  </data>\r\n  <data name=\"bad_collating_el_at_first_endpoint_of_range\" xml:space=\"preserve\">\r\n    <value>Collating element representing more than one character cannot be the first endpoint of range</value>\r\n  </data>\r\n  <data name=\"equivalence_class_at_first_endpoint_of_range\" xml:space=\"preserve\">\r\n    <value>Equivalence class cannot be endpoint of range (first endpoint here)</value>\r\n  </data>\r\n  <data name=\"ranges_not_supported\" xml:space=\"preserve\">\r\n    <value>Ranges for current page encoding are not supported</value>\r\n  </data>\r\n  <data name=\"range_first_character_greater\" xml:space=\"preserve\">\r\n    <value>Range: first character code is greater than second</value>\r\n  </data>\r\n  <data name=\"unknown_character_class\" xml:space=\"preserve\">\r\n    <value>Unknown character class name</value>\r\n  </data>\r\n  <data name=\"character_class_at_second_endpoint_of_range\" xml:space=\"preserve\">\r\n    <value>Character class cannot be an endpoint of range (second endpoint here)</value>\r\n  </data>\r\n  <data name=\"equivalence_class_at_second_endpoint_of_range\" xml:space=\"preserve\">\r\n    <value>Equivalence class cannot be an endpoint of a range (second endpoint here)</value>\r\n  </data>\r\n  <data name=\"question_mark_folowing_nothing\" xml:space=\"preserve\">\r\n    <value>Quantifier '?' following nothing (after '(')</value>\r\n  </data>\r\n  <data name=\"regexp_cannot_end_with_two_backslashes\" xml:space=\"preserve\">\r\n    <value>Regular expression cannot end with '\\\\'</value>\r\n  </data>\r\n  <data name=\"regexp_cannot_end_with_open_bracket\" xml:space=\"preserve\">\r\n    <value>Regular expression cannot end with '('</value>\r\n  </data>\r\n  <data name=\"unenclosed_bracket_expression\" xml:space=\"preserve\">\r\n    <value>Unenclosed bracket expression</value>\r\n  </data>\r\n  <data name=\"char_range_no_char_on_left\" xml:space=\"preserve\">\r\n    <value>Invalid '{0}'-range, no character to the left of '{0}'</value>\r\n  </data>\r\n  <data name=\"char_range_no_char_on_right\" xml:space=\"preserve\">\r\n    <value>Invalid '{0}'-range, no character to the right of '{0}'</value>\r\n  </data>\r\n  <data name=\"char_range_not_incrementing\" xml:space=\"preserve\">\r\n    <value>Invalid '{0}'-range, '{0}'-range needs to be incrementing</value>\r\n  </data>\r\n  <data name=\"cut_forced_with_zero_width\" xml:space=\"preserve\">\r\n    <value>Can't force cut when width is zero</value>\r\n  </data>\r\n  <data name=\"no_prefix_specified\" xml:space=\"preserve\">\r\n    <value />\r\n  </data>\r\n  <data name=\"invalid_type_name\" xml:space=\"preserve\">\r\n    <value>Invalid name of type</value>\r\n  </data>\r\n  <data name=\"number_of_items_not_between_one_and_item_count\" xml:space=\"preserve\">\r\n    <value>The number of items is {0} but it must be between 1 and array item count {1}</value>\r\n  </data>\r\n  <data name=\"neither_string_nor_integer_value\" xml:space=\"preserve\">\r\n    <value>Can {0} only string and integer values</value>\r\n  </data>\r\n  <data name=\"uninitialized_string_offset\" xml:space=\"preserve\">\r\n    <value>Uninitialized string offset '{0}'</value>\r\n  </data>\r\n  <data name=\"call_user_method_deprecated\" xml:space=\"preserve\">\r\n    <value>This function is deprecated, use the call_user_func variety with the array(&amp;$obj, \"method\") syntax instead</value>\r\n  </data>\r\n  <data name=\"should_be_specified\" xml:space=\"preserve\">\r\n    <value>{0} should be specified</value>\r\n  </data>\r\n  <data name=\"cannot_send_email\" xml:space=\"preserve\">\r\n    <value>Cannot send the mail due to error: '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_email_address\" xml:space=\"preserve\">\r\n    <value>Email address '{0}' is not valid</value>\r\n  </data>\r\n  <data name=\"header_not_supported\" xml:space=\"preserve\">\r\n    <value>Header '{0}' not supported and has been ignored</value>\r\n  </data>\r\n  <data name=\"host_not_responding\" xml:space=\"preserve\">\r\n    <value>Requested host not responding</value>\r\n  </data>\r\n  <data name=\"http_request_failed\" xml:space=\"preserve\">\r\n    <value>HTTP request failed with message '{0}'</value>\r\n  </data>\r\n  <data name=\"dl_not_supported\" xml:space=\"preserve\">\r\n    <value>Extensions cannot be loaded by script. Use configuration files instead.</value>\r\n  </data>\r\n  <data name=\"option_readonly\" xml:space=\"preserve\">\r\n    <value>Configuration option '{0}' cannot be set or restored since it is read only</value>\r\n  </data>\r\n  <data name=\"option_not_supported\" xml:space=\"preserve\">\r\n    <value>Configuration option '{0}' is not supported</value>\r\n  </data>\r\n  <data name=\"unknown_option\" xml:space=\"preserve\">\r\n    <value>Configuration option '{0}' is not known</value>\r\n  </data>\r\n  <data name=\"segment_length_not_positive\" xml:space=\"preserve\">\r\n    <value>The segment length must be greater then zero</value>\r\n  </data>\r\n  <data name=\"zero_argument_invalid\" xml:space=\"preserve\">\r\n    <value>Zero is not a valid argument number</value>\r\n  </data>\r\n  <data name=\"no_prefix_security_hazard\" xml:space=\"preserve\">\r\n    <value>No prefix specified - possible security hazard</value>\r\n  </data>\r\n  <data name=\"too_big_unicode_character\" xml:space=\"preserve\">\r\n    <value>String containg Unicode characters greater than '\\u0800' are not supported</value>\r\n  </data>\r\n  <data name=\"invalid_scan_conversion_character\" xml:space=\"preserve\">\r\n    <value>Invalid scan conversion character \"{0}\"</value>\r\n  </data>\r\n  <data name=\"different_variables_and_specifiers\" xml:space=\"preserve\">\r\n    <value>The number of variables ({0}) differs from the number of format specifiers ({1})</value>\r\n  </data>\r\n  <data name=\"unmathed_format_bracket\" xml:space=\"preserve\">\r\n    <value>Unmatched [ in format string</value>\r\n  </data>\r\n  <data name=\"preg_match_pattern_set_order\" xml:space=\"preserve\">\r\n    <value>PREG_PATTERN_ORDER and PREG_SET_ORDER flags are mutually exclusive</value>\r\n  </data>\r\n  <data name=\"replacement_array_pattern_not\" xml:space=\"preserve\">\r\n    <value>Replacement cannot be an array if pattern is not an array</value>\r\n  </data>\r\n  <data name=\"regular_expression_empty\" xml:space=\"preserve\">\r\n    <value>Empty regular expression</value>\r\n  </data>\r\n  <data name=\"delimiter_alnum_backslash\" xml:space=\"preserve\">\r\n    <value>Delimiter must not be alphanumeric or backslash</value>\r\n  </data>\r\n  <data name=\"modifier_not_supported\" xml:space=\"preserve\">\r\n    <value>Ignoring unsupported pattern modifier '{0}' in perl regular expression</value>\r\n  </data>\r\n  <data name=\"modifier_unknown\" xml:space=\"preserve\">\r\n    <value>Ignoring unknown pattern modifier '{0}' in perl regular expression</value>\r\n  </data>\r\n  <data name=\"modifiers_inconsistent\" xml:space=\"preserve\">\r\n    <value>Pattern modifier '{0}' is ignored due to use of modifier '{1}' in perl regular expression</value>\r\n  </data>\r\n  <data name=\"preg_no_end_delimiter\" xml:space=\"preserve\">\r\n    <value>No ending delimiter '{0}' found</value>\r\n  </data>\r\n  <data name=\"invalid_calendar\" xml:space=\"preserve\">\r\n    <value>Invalid calendar id '{0}'</value>\r\n  </data>\r\n  <data name=\"session_not_exists\" xml:space=\"preserve\">\r\n    <value>Session doesn't not exist</value>\r\n  </data>\r\n  <data name=\"function_disallowed_in_web_context\" xml:space=\"preserve\">\r\n    <value>Function not allowed in web server context</value>\r\n  </data>\r\n  <data name=\"parse_error\" xml:space=\"preserve\">\r\n    <value>Parse error on position {0} near '{1}'</value>\r\n  </data>\r\n  <data name=\"unknown_serializer\" xml:space=\"preserve\">\r\n    <value>Serializer '{0}' is unknown. It hasn't been registered by any loaded library</value>\r\n  </data>\r\n  <data name=\"deserialization_failed\" xml:space=\"preserve\">\r\n    <value>Deserialization failed: {0} at offset {1} of {2} bytes</value>\r\n  </data>\r\n  <data name=\"serialization_failed\" xml:space=\"preserve\">\r\n    <value>Serialization failed: {0}</value>\r\n  </data>\r\n  <data name=\"ini_parse_error\" xml:space=\"preserve\">\r\n    <value>Parse error on line {0}</value>\r\n  </data>\r\n  <data name=\"invalid_path\" xml:space=\"preserve\">\r\n    <value>Path '{0}' is invalid</value>\r\n  </data>\r\n  <data name=\"recursion_detected\" xml:space=\"preserve\">\r\n    <value>Recursion detected</value>\r\n  </data>\r\n  <data name=\"unknown_timezone_env\" xml:space=\"preserve\">\r\n    <value>Unknown time zone '{0}' specified by 'TZ' environment variable</value>\r\n  </data>\r\n  <data name=\"unknown_timezone\" xml:space=\"preserve\">\r\n    <value>Unknown time zone '{0}'</value>\r\n  </data>\r\n  <data name=\"using_implicit_timezone\" xml:space=\"preserve\">\r\n    <value>Using system time zone settings which may be inaccurate ('{0}' zone selected)</value>\r\n  </data>\r\n  <data name=\"invalid_uuencoded_string\" xml:space=\"preserve\">\r\n    <value>The given parameter is not a valid uuencoded string</value>\r\n  </data>\r\n  <data name=\"descriptor_unsupported\" xml:space=\"preserve\">\r\n    <value>Descriptor #{0} is not supported</value>\r\n  </data>\r\n  <data name=\"descriptor_item_not_array_nor_resource\" xml:space=\"preserve\">\r\n    <value>Descriptor item #{0} must be either an array or a resource</value>\r\n  </data>\r\n  <data name=\"descriptor_item_missing_qualifier\" xml:space=\"preserve\">\r\n    <value>Descriptor item #{0} should contain handle qualifier and parameters</value>\r\n  </data>\r\n  <data name=\"descriptor_item_missing_mode\" xml:space=\"preserve\">\r\n    <value>Missing mode parameter from descriptor item #{0}</value>\r\n  </data>\r\n  <data name=\"descriptor_item_invalid_mode\" xml:space=\"preserve\">\r\n    <value>Invalid mode for descriptor item #{0}</value>\r\n  </data>\r\n  <data name=\"descriptor_item_missing_file_name\" xml:space=\"preserve\">\r\n    <value>Missing file name parameter from descriptor item #{0}</value>\r\n  </data>\r\n  <data name=\"invalid_handle_qualifier\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a valid handle qualifier</value>\r\n  </data>\r\n  <data name=\"invalid_process_resource\" xml:space=\"preserve\">\r\n    <value>Invalid process resource</value>\r\n  </data>\r\n  <data name=\"error_terminating_process\" xml:space=\"preserve\">\r\n    <value>An error occured while terminating process {0} (pid = {1}): {2}</value>\r\n  </data>\r\n  <data name=\"error_starting_process\" xml:space=\"preserve\">\r\n    <value>An error occured while starting process: {0}</value>\r\n  </data>\r\n  <data name=\"error_waiting_for_process_exit\" xml:space=\"preserve\">\r\n    <value>An error occured while waiting for process exit: {0}</value>\r\n  </data>\r\n  <data name=\"attempted_variable_override\" xml:space=\"preserve\">\r\n    <value>Attempted {0} variable override</value>\r\n  </data>\r\n  <data name=\"invalid_cache_limiter\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a valid value for cache limiter</value>\r\n  </data>\r\n  <data name=\"invalid_base64_encoded_data\" xml:space=\"preserve\">\r\n    <value>Invalid base64 encoded data</value>\r\n  </data>\r\n  <data name=\"unknown_format_code\" xml:space=\"preserve\">\r\n    <value>Type '{0}': unknown format code</value>\r\n  </data>\r\n  <data name=\"asterisk_ignored\" xml:space=\"preserve\">\r\n    <value>Type '{0}': '*' ignored</value>\r\n  </data>\r\n  <data name=\"not_enought_arguments\" xml:space=\"preserve\">\r\n    <value>Type '{0}': not enough arguments</value>\r\n  </data>\r\n  <data name=\"not_enought_characters\" xml:space=\"preserve\">\r\n    <value>Type '{0}': not enough characters in string</value>\r\n  </data>\r\n  <data name=\"outside_string\" xml:space=\"preserve\">\r\n    <value>Type '{0}': outside of string</value>\r\n  </data>\r\n  <data name=\"binary_data_overflown\" xml:space=\"preserve\">\r\n    <value>Type '{0}': binary data length has overflown integer size</value>\r\n  </data>\r\n  <data name=\"multibyte_chars_unsupported\" xml:space=\"preserve\">\r\n    <value>Type '{0}': multi-byte characters are not supported</value>\r\n  </data>\r\n  <data name=\"illegal_hex_digit\" xml:space=\"preserve\">\r\n    <value>Type '{0}': illegal hex digit '{0}'</value>\r\n  </data>\r\n  <data name=\"unused_arguments\" xml:space=\"preserve\">\r\n    <value>{0} unused arguments</value>\r\n  </data>\r\n  <data name=\"not_enought_input\" xml:space=\"preserve\">\r\n    <value>Type '{0}': not enough input, need {1}, have {2}</value>\r\n  </data>\r\n  <data name=\"invalid_session_save_path\" xml:space=\"preserve\">\r\n    <value>Invalid session save path '{0}'.</value>\r\n  </data>\r\n  <data name=\"user_session_handler_failed\" xml:space=\"preserve\">\r\n    <value>User session handler operation '{0}' failed (sid = '{1}', save_path = '{2}')</value>\r\n  </data>\r\n  <data name=\"invalid_directory_resource\" xml:space=\"preserve\">\r\n    <value>Supplied resource is not a valid Directory listing resource</value>\r\n  </data>\r\n  <data name=\"invalid_context_resource\" xml:space=\"preserve\">\r\n    <value>Supplied resource is not a valid Stream-Context resource</value>\r\n  </data>\r\n  <data name=\"directory_not_found\" xml:space=\"preserve\">\r\n    <value>The directory '{0}' does not exist</value>\r\n  </data>\r\n  <data name=\"wrappers_must_match\" xml:space=\"preserve\">\r\n    <value>The destination wrapper is different from the source one; use copy instead</value>\r\n  </data>\r\n  <data name=\"unknown_file_type\" xml:space=\"preserve\">\r\n    <value>File type not recognized</value>\r\n  </data>\r\n  <data name=\"socket_open_error\" xml:space=\"preserve\">\r\n    <value>Error connecting '{0}': {0}</value>\r\n  </data>\r\n  <data name=\"socket_open_timeout\" xml:space=\"preserve\">\r\n    <value>Connect timeout: {0} did not respond</value>\r\n  </data>\r\n  <data name=\"connection_limit_reached\" xml:space=\"preserve\">\r\n    <value>Number of connections reached the limit ({0})</value>\r\n  </data>\r\n  <data name=\"cannot_open_connection\" xml:space=\"preserve\">\r\n    <value>Cannot open connection: {0}</value>\r\n  </data>\r\n  <data name=\"error_closing_connection\" xml:space=\"preserve\">\r\n    <value>Error occured while closing the connection: {0}</value>\r\n  </data>\r\n  <data name=\"command_execution_failed\" xml:space=\"preserve\">\r\n    <value>Command execution failed: {0}</value>\r\n  </data>\r\n  <data name=\"database_selection_failed\" xml:space=\"preserve\">\r\n    <value>Database selection failed: {0}</value>\r\n  </data>\r\n  <data name=\"cannot_retrieve_schema\" xml:space=\"preserve\">\r\n    <value>Cannot retrieve schema information</value>\r\n  </data>\r\n  <data name=\"field_not_exists\" xml:space=\"preserve\">\r\n    <value>Field (column) of name '{0}' doesn't exist in the result</value>\r\n  </data>\r\n  <data name=\"invalid_data_result_field_index\" xml:space=\"preserve\">\r\n    <value>Field index {0} is invalid for {1} resource #{2}</value>\r\n  </data>\r\n  <data name=\"invalid_data_result_row_index\" xml:space=\"preserve\">\r\n    <value>Row index {0} is invalid for {1} resource #{2}</value>\r\n  </data>\r\n  <data name=\"parameter_already_bound\" xml:space=\"preserve\">\r\n    <value>Parameter '{0}' has already been bound</value>\r\n  </data>\r\n  <data name=\"invalid_stored_procedure_resource\" xml:space=\"preserve\">\r\n    <value>Invalid stored procedure resource</value>\r\n  </data>\r\n  <data name=\"invalid_connection_resource\" xml:space=\"preserve\">\r\n    <value>Invalid connection resource</value>\r\n  </data>\r\n  <data name=\"invalid_result_resource\" xml:space=\"preserve\">\r\n    <value>Invalid query result resource</value>\r\n  </data>\r\n  <data name=\"invalid_port\" xml:space=\"preserve\">\r\n    <value>Invalid port number '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument\" xml:space=\"preserve\">\r\n    <value>Invalid argument '{0}'</value>\r\n  </data>\r\n  <data name=\"too_few_arguments\" xml:space=\"preserve\">\r\n    <value>Too few arguments</value>\r\n  </data>\r\n  <data name=\"argument_not_object_or_class_name\" xml:space=\"preserve\">\r\n    <value>Second argument is not an object or class name</value>\r\n  </data>\r\n  <data name=\"argument_not_array_or_sort_flag\" xml:space=\"preserve\">\r\n    <value>Argument #{0} should be an array or a sort flag</value>\r\n  </data>\r\n  <data name=\"sorting_flag_already_specified\" xml:space=\"preserve\">\r\n    <value>Argument #{0} specifies a sorting flag which has already been specified for the array</value>\r\n  </data>\r\n  <data name=\"argument_not_array\" xml:space=\"preserve\">\r\n    <value>Argument #{0} should be an array</value>\r\n  </data>\r\n  <data name=\"argument_not_integer_indexed_array\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' must be an integer indexed array</value>\r\n  </data>\r\n  <data name=\"arg:negative\" xml:space=\"preserve\">\r\n    <value>'{0}' should not be negative</value>\r\n  </data>\r\n  <data name=\"arg:negative_or_zero\" xml:space=\"preserve\">\r\n    <value>'{0}' should be positive</value>\r\n  </data>\r\n  <data name=\"arg:zero\" xml:space=\"preserve\">\r\n    <value>'{0}' should not be zero</value>\r\n  </data>\r\n  <data name=\"arg:null_or_empty\" xml:space=\"preserve\">\r\n    <value>'{0}' should not be null nor empty</value>\r\n  </data>\r\n  <data name=\"arg:empty\" xml:space=\"preserve\">\r\n    <value>'{0}' should not be empty</value>\r\n  </data>\r\n  <data name=\"arg:out_of_bounds\" xml:space=\"preserve\">\r\n    <value>'{0}' is out of bounds</value>\r\n  </data>\r\n  <data name=\"arg:not_object_or_class_name\" xml:space=\"preserve\">\r\n    <value>'{0}' not an object or class name</value>\r\n  </data>\r\n  <data name=\"arg:invalid_value\" xml:space=\"preserve\">\r\n    <value>Value '{1}' is invalid for argument '{0}'</value>\r\n  </data>\r\n  <data name=\"arg:invalid_length\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' has invalid length</value>\r\n  </data>\r\n  <data name=\"error_report\" xml:space=\"preserve\">\r\n    <value>Phalanger: Error report</value>\r\n  </data>\r\n  <data name=\"sleep_seconds_less_zero\" xml:space=\"preserve\">\r\n    <value>Number of seconds must be greater than or equal to 0</value>\r\n  </data>\r\n  <data name=\"substr_count_length_exceeds\" xml:space=\"preserve\">\r\n    <value>Length value {0} exceeds string length</value>\r\n  </data>\r\n  <data name=\"substr_count_offset_exceeds\" xml:space=\"preserve\">\r\n    <value>Offset value {0} exceeds string length</value>\r\n  </data>\r\n  <data name=\"substr_count_zero_length\" xml:space=\"preserve\">\r\n    <value>Length should be greater than 0</value>\r\n  </data>\r\n  <data name=\"substr_count_offset_zero\" xml:space=\"preserve\">\r\n    <value>Offset should be greater than or equal to 0</value>\r\n  </data>\r\n  <data name=\"must_be_positive\" xml:space=\"preserve\">\r\n    <value>{0} must be greater than or equal to 0</value>\r\n  </data>\r\n  <data name=\"unexpected_arg_given\" xml:space=\"preserve\">\r\n    <value>expects parameter {0} to be {1}, {2} given</value>\r\n  </data>\r\n  <data name=\"option_missing\" xml:space=\"preserve\">\r\n    <value>'{0}' option missing</value>\r\n  </data>\r\n  <data name=\"smtp_sendmail_from_not_set\" xml:space=\"preserve\">\r\n    <value>From header was not specified.</value>\r\n  </data>\r\n  <data name=\"aspnet_sessionhandler_id_reset\" xml:space=\"preserve\">\r\n    <value>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.</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"WindowsTZ\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\WindowsTZ.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/ClassLibrary/UUEncoding.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\n#if SILVERLIGHT\r\nusing MathEx = PHP.CoreCLR.MathEx;\r\n#else\r\nusing MathEx = System.Math;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Provides methods for strings UU-encoding and UU-decoding.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <para>\r\n\t/// Uuencode repeatedly takes in a group of three bytes, adding trailing zeros if there are fewer \r\n\t/// than three bytes left. These 24 bits are split into four groups of six which are treated as \r\n\t/// numbers between 0 and 63. Decimal 32 is added to each number and they are output as ASCII \r\n\t/// characters which will lie in the range 32 (space) to 32+63 = 95 (underscore). ASCII characters \r\n\t/// greater than 95 may also be used; however, only the six right-most bits are relevant.\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// Each group of sixty output characters (corresponding to 45 input bytes) is output as a separate \r\n\t/// line preceded by an encoded character giving the number of encoded bytes on that line. \r\n\t/// For all lines except the last, this will be the character 'M' (ASCII code 77 = 32+45). \r\n\t/// If the input is not evenly divisible by 45, the last line will contain the remaining N \r\n\t/// output characters, preceded by the character whose code is 32+N. Finally, a line containing just \r\n\t/// a single space (or grave character) is output, followed by one line containing the string \"end\".\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// Sometimes each data line has extra dummy characters (often the grave accent) added to avoid \r\n\t/// problems with mailers that strip trailing spaces. These characters are ignored by uudecode. \r\n\t/// The grave accent ('`') is used in place of a space character. \r\n\t/// When stripped of their high bits they both decode to 100000.\r\n\t/// </para>\r\n\t/// </remarks>\r\n\tpublic static class UUEncoder\r\n\t{\r\n\t\tprivate const char UUEncodeZero = '`';\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encodes an array of bytes using UU-encode algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">Array of bytes to be encoded.</param>\r\n\t\t/// <param name=\"output\">Encoded output writer.</param>\r\n\t\tpublic static void Encode(byte[]/*!*/ input, TextWriter/*!*/ output)\r\n\t\t{\r\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\r\n\t\t\tif (output == null) throw new ArgumentNullException(\"output\");\r\n\r\n\t\t\tif (input.Length == 0) return;\r\n\r\n\t\t\tconst int max_bytes_per_line = 45;\r\n\r\n\t\t\tint remains;\r\n\t\t\tint full_lines = MathEx.DivRem(input.Length, max_bytes_per_line, out remains);\r\n\t\t\tint input_offset = 0;\r\n\r\n\t\t\t// encode full lines:\r\n\t\t\tfor (int i = 0; i < full_lines; i++)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(EncodeByte(max_bytes_per_line));\r\n\r\n\t\t\t\tfor (int j = 0; j < max_bytes_per_line / 3; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tEncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], input[input_offset + 2]);\r\n\t\t\t\t\tinput_offset += 3;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.Write('\\n');\r\n\t\t\t}\r\n\r\n\t\t\t// encode remaining bytes (if any):\r\n\t\t\tif (remains > 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(EncodeByte(remains));\r\n\r\n\t\t\t\t// ceil(remains/3)*4\r\n\t\t\t\tint full_triplets = MathEx.DivRem(remains, 3, out remains);\r\n\r\n\t\t\t\t// full triplets:\r\n\t\t\t\tfor (int i = 0; i < full_triplets; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tEncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], input[input_offset + 2]);\r\n\t\t\t\t\tinput_offset += 3;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// remaining bytes:\r\n\t\t\t\tif (remains == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tEncodeWriteTriplet(output, input[input_offset], 0, 0);\r\n\t\t\t\t}\r\n\t\t\t\telse if (remains == 2)\r\n\t\t\t\t{\r\n\t\t\t\t\tEncodeWriteTriplet(output, input[input_offset], input[input_offset + 1], 0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.Write('\\n');\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write('`');\r\n\t\t\toutput.Write('\\n');\r\n\t\t}\r\n\r\n\t\tprivate static char EncodeByte(int b)\r\n\t\t{\r\n\t\t\tDebug.Assert(b <= 0x3f);\r\n\t\t\treturn (b == 0) ? '`' : (char)(0x20 + b);\r\n\t\t}\r\n\r\n\t\tprivate static byte DecodeChar(int c)\r\n\t\t{\r\n\t\t\treturn (byte)((c - 0x20) & 0x3f);\r\n\t\t}\r\n\r\n\t\tprivate static void EncodeWriteTriplet(TextWriter/*!*/ output, int a, int b, int c)\r\n\t\t{\r\n\t\t\toutput.Write(EncodeByte(a >> 2));\r\n\t\t\toutput.Write(EncodeByte(((a << 4) | (b >> 4)) & 0x3f));\r\n\t\t\toutput.Write(EncodeByte(((b << 2) | (c >> 6)) & 0x3f));\r\n\t\t\toutput.Write(EncodeByte(c & 0x3f));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decodes textual data using UU-encode algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">Textual data reader.</param>\r\n\t\t/// <param name=\"output\">Binary output writer.</param>\r\n\t\t/// <remarks>Whether input data has correct format.</remarks>\r\n\t\tpublic static bool Decode(TextReader/*!*/ input, MemoryStream/*!*/ output)\r\n\t\t{\r\n\t\t\tif (input == null) throw new ArgumentNullException(\"input\");\r\n\t\t\tif (output == null) throw new ArgumentNullException(\"output\");\r\n\r\n\t\t\t// empty input:\r\n\t\t\tif (input.Peek() == -1) return true;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tint line_length = input.Read();\r\n\t\t\t\tif (line_length == -1) return false;\r\n\r\n\t\t\t\tline_length = DecodeChar((char)line_length);\r\n\r\n\t\t\t\t// stopped by '`' on the last line:\r\n\t\t\t\tif (line_length == 0)\r\n\t\t\t\t\treturn input.Read() == (int)'\\n';\r\n\r\n\t\t\t\tint remains;\r\n\t\t\t\tint full_triplets = MathEx.DivRem(line_length, 3, out remains);\r\n\r\n\t\t\t\tfor (int i = 0; i < full_triplets; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint a = DecodeChar(input.Read());\r\n\t\t\t\t\tint b = DecodeChar(input.Read());\r\n\t\t\t\t\tint c = DecodeChar(input.Read());\r\n\t\t\t\t\tint d = input.Read();\r\n\t\t\t\t\tif (d == -1) return false;\r\n\t\t\t\t\td = DecodeChar(d);\r\n\r\n\t\t\t\t\toutput.WriteByte((byte)((a << 2 | b >> 4) & 0xff));\r\n\t\t\t\t\toutput.WriteByte((byte)((b << 4 | c >> 2) & 0xff));\r\n\t\t\t\t\toutput.WriteByte((byte)((c << 6 | d) & 0xff));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (remains > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tint a = DecodeChar(input.Read());\r\n\t\t\t\t\tint b = DecodeChar(input.Read());\r\n\t\t\t\t\tint c = DecodeChar(input.Read());\r\n\t\t\t\t\tint d = input.Read();\r\n\t\t\t\t\tif (d == -1) return false;\r\n\t\t\t\t\td = DecodeChar(d);\r\n\r\n\t\t\t\t\toutput.WriteByte((byte)(a << 2 | b >> 4));\r\n\r\n\t\t\t\t\tif (remains == 2)\r\n\t\t\t\t\t\toutput.WriteByte((byte)(b << 4 | c >> 2));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (input.Read() != (int)'\\n')\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encodes a string using UU-encode algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"bytes\">String of bytes to be encoded.</param>\r\n\t\t/// <returns>The encoded string.</returns>\r\n\t\t[ImplementsFunction(\"convert_uuencode\")]\r\n\t\tpublic static string Encode(PhpBytes bytes)\r\n\t\t{\r\n            byte[] data = (bytes != null) ? bytes.ReadonlyData : ArrayUtils.EmptyBytes;\r\n\t\t\tStringBuilder result = new StringBuilder((int)(data.Length * 1.38 + data.Length + 1));\r\n\r\n\t\t\tEncode(data, new StringWriter(result));\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decodes a uu-encoded string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">Data to be decoded.</param>\r\n\t\t/// <returns>Decoded bytes.</returns>\r\n\t\t[ImplementsFunction(\"convert_uudecode\")]\r\n\t\tpublic static PhpBytes Decode(string data)\r\n\t\t{\r\n\t\t\tif (data == null) data = \"\";\r\n\r\n\t\t\tMemoryStream result = new MemoryStream((int)(data.Length * 0.75) + 2);\r\n\r\n\t\t\tif (!Decode(new StringReader(data), result))\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_uuencoded_string\"));\r\n\r\n\t\t\treturn new PhpBytes(result.ToArray());\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/UrlRewriter.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n TODO:\r\n   filter - see url_scanner_ex.c\r\n   session starts rewriter (session.use_trans_sid)\r\n   url_rewriter.tags\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library\r\n{\r\n\tpublic sealed class UrlRewriter\r\n\t{\r\n\t\t#region Construction and Properties\r\n\r\n\t\tprivate UrlRewriter()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tprivate Dictionary<string, string> Variables\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_variables == null)\r\n\t\t\t\t\t_variables = new Dictionary<string, string>();\r\n\r\n\t\t\t\treturn _variables;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate Dictionary<string, string> _variables; // GENERICS \r\n\r\n\t\tprivate PhpCallback filterCallback;\r\n\r\n\t\tprivate PhpCallback/*!*/ GetOrCreateFilterCallback(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (filterCallback == null)\r\n\t\t\t\tfilterCallback = new PhpCallback(new RoutineDelegate(Filter), context);\r\n\r\n\t\t\treturn filterCallback;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region object\r\n\r\n        #endregion\r\n\r\n        #region Filter\r\n\r\n        /// <summary>\r\n        /// Tags parser, modifies the specified elements in the HTML code.\r\n        /// </summary>\r\n        private class TagsUrlRewriter: UrlRewriterTagsParser\r\n        {\r\n            public TagsUrlRewriter(UrlRewriter rewriter)\r\n            {\r\n                this.rewriter = rewriter;\r\n            }\r\n\r\n            private readonly UrlRewriter rewriter;\r\n\r\n            Regex protocolPattern = new Regex(@\"^[a-zA-Z]+:(\\\\|//).*\", RegexOptions.Compiled);\r\n\r\n            protected override void OnTagAttribute(string tagName, ref string attributeName, ref string attributeValue, ref char attributeValueQuote)\r\n            {\r\n                string[] attrs;\r\n\r\n                if (ScriptContext.CurrentContext.Config.Session.UrlRewriterTags.TryGetValue(tagName.ToLower(), out attrs))\r\n                {\r\n                    for (int i = 0; i < attrs.Length; i++)\r\n                    {\r\n                        if (string.Equals(attrs[i], attributeName, StringComparison.InvariantCultureIgnoreCase))\r\n                        {\r\n                            if (protocolPattern.IsMatch(attributeValue))\r\n                                return; // the URL must NOT be an absolute URL (not start with the protocol name)\r\n\r\n                            // modify attribute value\r\n                            if (attributeValue.Contains(\"?\"))\r\n                                attributeValue += \"&\";\r\n                            else\r\n                                attributeValue += \"?\";\r\n                            \r\n                            bool bFirst = true;\r\n                            foreach (KeyValuePair<string, string> item in rewriter.Variables)\r\n                            {\r\n                                if (bFirst)\r\n                                    bFirst = false;\r\n                                else\r\n                                    attributeValue += \"&\";\r\n\r\n                                attributeValue += item.Key + \"=\" + item.Value;\r\n                            }                            \r\n\r\n                            return;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            protected override void OnTagElement(string tagName, ref string tagString)\r\n            {\r\n                // modify the \"form\" element\r\n                const string strFormTag = \"form\";\r\n\r\n                if ( string.Compare(tagName, strFormTag, StringComparison.InvariantCultureIgnoreCase) == 0 &&\r\n                     ScriptContext.CurrentContext.Config.Session.UrlRewriterTags.ContainsKey(strFormTag) )\r\n                {\r\n                    foreach (KeyValuePair<string, string> item in rewriter.Variables)\r\n                        tagString += string.Format(\"<input type=\\\"hidden\\\" name=\\\"{0}\\\" value=\\\"{1}\\\" />\", item.Key, item.Value);\r\n                }\r\n            }\r\n        }\r\n\r\n        private TagsUrlRewriter parser;\r\n        private TagsUrlRewriter.ParserState parserState = new TagsUrlRewriter.ParserState();\r\n\r\n        private object Filter(object instance, PhpStack/*!*/ stack)\r\n\t\t{\r\n            StringBuilder result = new StringBuilder();\r\n\r\n\t\t\tDebug.Assert(stack.ArgCount >= 1, \"Called by output buffering, so should be ok\");\r\n\r\n            string data = PhpVariable.AsString(stack.PeekValueUnchecked(1));\r\n\r\n\t\t\tstack.RemoveFrame();\r\n\r\n            // parse the text\r\n            if (parser == null)\r\n                parser = new TagsUrlRewriter(this);\r\n\r\n            return parser.ParseHtml(parserState, data);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region output_add_rewrite_var, output_reset_rewrite_vars\r\n\r\n\t\t[ImplementsFunction(\"output_add_rewrite_var\")]\r\n\t\tpublic static bool AddRewriteVariable(string name, string value)\r\n\t\t{\r\n\t\t\tif (String.IsNullOrEmpty(name))\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"name\", LibResources.GetString(\"arg:null_or_empty\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n            UrlRewriter rewriter = context.Properties.GetOrCreateProperty(() => new UrlRewriter());\r\n            BufferedOutput output = context.BufferedOutput;\r\n\r\n            // some output flush\r\n            output.Flush();\r\n            \r\n            rewriter.Variables[name] = value;\r\n\r\n            // start UrlRewriter filtering if not yet\r\n            if (output.FindLevelByFilter( rewriter.filterCallback ) < 0)\r\n            {\r\n                // create new output buffer level (URL-Rewriter is not started yet)\r\n                int Level = output.IncreaseLevel();\r\n                output.SetFilter(rewriter.GetOrCreateFilterCallback(context), Level);\r\n                output.SetLevelName(Level, \"URL-Rewriter\");\r\n            }\r\n\r\n            context.IsOutputBuffered = true;    // turn on output buffering if not yet\r\n\r\n            return true;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"output_reset_rewrite_vars\")]\r\n\t\tpublic static bool ResetRewriteVariables()\r\n\t\t{\r\n\t\t\t/*PhpException.FunctionNotSupported();\r\n\t\t\treturn false;*/\r\n\r\n            \r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            UrlRewriter rewriter;\r\n\r\n            if (context.Properties.TryGetProperty<UrlRewriter>(out rewriter) == false)\r\n                return false;\r\n\r\n            BufferedOutput output = context.BufferedOutput;\r\n            if (output.Level == 0 || output.GetFilter() != rewriter.filterCallback)\r\n                return false;\r\n            \r\n            // some output flush\r\n            output.Flush();\r\n\r\n            rewriter.Variables.Clear();\r\n            output.DecreaseLevel(false);\r\n\r\n            if (output.Level == 0)\r\n                context.IsOutputBuffered = false;\r\n            \r\n            return true;\r\n\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/UrlRewriter.TagsParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library\r\n{\r\n    /// <summary>\r\n    /// Parsing of HTML tags,\r\n    /// primarily targeted for parsing and replacing URLs within output buffering.\r\n    /// \r\n    /// Parses the input text and calls several events, when specified HTML elements are found.\r\n    /// </summary>\r\n    public class UrlRewriterTagsParser\r\n    {\r\n        #region HTML elements found events\r\n\r\n        /// <summary>\r\n        /// Called when tag attribute is found and parsed.\r\n        /// Allows to modify the attribute.\r\n        /// </summary>\r\n        /// <param name=\"tagName\">The tag name, where the attribute was found.</param>\r\n        /// <param name=\"attributeName\">The attribute name. Can be modified.</param>\r\n        /// <param name=\"attributeValue\">The attribute value. Can be modified.</param>\r\n        /// <param name=\"attributeValueQuote\">The attribute value quote character. Can be modified.</param>\r\n        virtual protected void OnTagAttribute(string tagName, ref string attributeName, ref string attributeValue, ref char attributeValueQuote)\r\n        {\r\n            // modify attributeName\r\n            // modify attributeValue\r\n            // modify attributeValueQuote\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when the whole tag is found and parsed.\r\n        /// </summary>\r\n        /// <param name=\"tagName\">The tag name.</param>\r\n        /// <param name=\"tagString\">The whole tag input string. Can be modified.</param>\r\n        virtual protected void OnTagElement(string tagName, ref string tagString)\r\n        {\r\n            // modify tagString\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Parser states\r\n\r\n        /// <summary>\r\n        /// Internal parser states.\r\n        /// </summary>\r\n        public enum ParserStateNum\r\n        {\r\n            OuterText = 0,  // not in any HTML tag, waiting for <\r\n\r\n            TagOpening, // <\r\n            TagClosing, // >\r\n            TagName,    // \r\n\r\n            InnerTagSpace,  // \\s | \\t ...\r\n\r\n            AttributeName,  // \r\n            AttributePreAssigning, //\r\n            AttributeAssigning, // =\r\n            AttributeValueOpening,  // \" | '\r\n            AttributeValueClosing,  // \" | '\r\n            AttributeValue, //\r\n        }\r\n\r\n        /// <summary>\r\n        /// Internal parser state.\r\n        /// </summary>\r\n        public class ParserState\r\n        {\r\n            public ParserStateNum state = ParserStateNum.OuterText;\r\n\r\n            // tag\r\n            public StringBuilder lastTagName;\r\n            public StringBuilder lastTagString;\r\n\r\n            // attribute\r\n            public StringBuilder lastAttributeName;\r\n            public char lastAttributeValueQuote;\r\n            public StringBuilder lastAttributeValue;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Parsing HTML tags\r\n\r\n        private bool IsWhiteSpace(char c)\r\n        {\r\n            return (c == ' ' || c == '\\n' || c == '\\t' || c == '\\r');\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses the given text, using the given current parser state.\r\n        /// </summary>\r\n        /// <param name=\"state\"></param>\r\n        /// <param name=\"text\"></param>\r\n        public string ParseHtml( ParserState state, string text )\r\n        {\r\n            StringBuilder result = new StringBuilder();\r\n\r\n            foreach (char c in text)\r\n            {\r\n                switch (state.state)\r\n                {\r\n                    case ParserStateNum.OuterText:  // -> TagOpening\r\n                        if (c == '<')\r\n                        {\r\n                            state.state = ParserStateNum.TagOpening;\r\n                            state.lastTagString = new StringBuilder();\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.TagOpening: // -> TagClosing, TagName\r\n                        if (c == '>')\r\n                        {\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        }\r\n                        else\r\n                        {\r\n                            state.state = ParserStateNum.TagName;\r\n                            state.lastTagName = new StringBuilder();\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.TagClosing: // not reachable\r\n                        throw new InvalidOperationException(\"This state should not be reachable.\");\r\n                    case ParserStateNum.TagName:    // -> InnerTagSpace, TagClosing\r\n                        if (IsWhiteSpace(c) || c == '/')\r\n                            state.state = ParserStateNum.InnerTagSpace;\r\n                        else if (c == '>')\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        break;\r\n                    case ParserStateNum.InnerTagSpace:  // -> TagClosing, AttributeName\r\n                        if (c == '>')\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        else if (c == '/')\r\n                            {}\r\n                        else if (!IsWhiteSpace(c))\r\n                        {\r\n                            state.state = ParserStateNum.AttributeName;\r\n                            state.lastAttributeName = new StringBuilder();\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.AttributeName:  // -> AttributeAssigning, AttributePreAssigning, TagClosing\r\n                        if (c == '=')\r\n                        {\r\n                            state.lastAttributeValue = new StringBuilder();\r\n                            state.state = ParserStateNum.AttributeAssigning;\r\n                        }\r\n                        else if (IsWhiteSpace(c))\r\n                        {\r\n                            state.state = ParserStateNum.AttributePreAssigning;\r\n                        }\r\n                        else if (c == '>')\r\n                        {\r\n                            state.lastTagString.Append(state.lastAttributeName);\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.AttributePreAssigning:  // -> AttributeAssigning, TagClosing, AttributeName\r\n                        if (c == '=')\r\n                        {\r\n                            state.lastAttributeValue = new StringBuilder();\r\n                            state.state = ParserStateNum.AttributeAssigning;\r\n                        }\r\n                        else if (IsWhiteSpace(c))\r\n                        {}\r\n                        else if (c == '>')\r\n                        {\r\n                            state.lastTagString.Append(state.lastAttributeName);\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        }\r\n                        else\r\n                        {\r\n                            state.lastTagString.Append(state.lastAttributeName);\r\n                            state.lastTagString.Append(' ');    // attribute name without value\r\n\r\n                            state.state = ParserStateNum.AttributeName;\r\n                            state.lastAttributeName = new StringBuilder();\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.AttributeAssigning: // -> AttributeValueOpening, AttributeValue, TagClosing\r\n                        if (c == '\\'' || c == '\\\"')\r\n                        {\r\n                            state.lastAttributeValueQuote = c;\r\n                            state.state = ParserStateNum.AttributeValueOpening;\r\n                        }\r\n                        else if (!IsWhiteSpace(c))\r\n                        {\r\n                            state.lastAttributeValueQuote = '\\0';\r\n                            state.state = ParserStateNum.AttributeValue;\r\n                        }\r\n                        else if (c == '>')\r\n                        {\r\n                            state.lastTagString.Append(state.lastAttributeName); // attribute name without value\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        }\r\n                        break;\r\n                    case ParserStateNum.AttributeValueOpening:\r\n                        throw new InvalidOperationException(\"This state should not be reachable.\");\r\n                    case ParserStateNum.AttributeValueClosing:\r\n                        throw new InvalidOperationException(\"This state should not be reachable.\");\r\n                    case ParserStateNum.AttributeValue: // -> AttributeValueClosing, TagClosing\r\n                        if ( c == state.lastAttributeValueQuote || (state.lastAttributeValueQuote == '\\0' && IsWhiteSpace(c)) )\r\n                        {\r\n                            state.state = ParserStateNum.AttributeValueClosing;\r\n                        }\r\n                        else if (state.lastAttributeValueQuote == '\\0' && c == '>')\r\n                        {\r\n                            Parse_AttributeValueClosing(state, c, result);\r\n                            state.state = ParserStateNum.TagClosing;\r\n                        }\r\n                        break;\r\n                }\r\n\r\n                switch (state.state)\r\n                {\r\n                    case ParserStateNum.OuterText: Parse_OuterText(state, c, result); break;\r\n                    case ParserStateNum.TagOpening: Parse_TagOpening(state, c, result); break;\r\n                    case ParserStateNum.TagClosing: Parse_TagClosing(state, c, result); break;\r\n                    case ParserStateNum.TagName: Parse_TagName(state, c, result); break;\r\n                    case ParserStateNum.InnerTagSpace: Parse_InnerTagSpace(state, c, result); break;\r\n                    case ParserStateNum.AttributeName: Parse_AttributeName(state, c, result); break;\r\n                    case ParserStateNum.AttributePreAssigning: Parse_AttributePreAssigning(state, c, result); break;\r\n                    case ParserStateNum.AttributeAssigning: Parse_AttributeAssigning(state, c, result); break;\r\n                    case ParserStateNum.AttributeValueOpening: Parse_AttributeValueOpening(state, c, result); break;\r\n                    case ParserStateNum.AttributeValueClosing: Parse_AttributeValueClosing(state, c, result); break;\r\n                    case ParserStateNum.AttributeValue: Parse_AttributeValue(state, c, result); break;\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        private void Parse_OuterText( ParserState state, char c, StringBuilder result )\r\n        {\r\n            result.Append(c);\r\n        }\r\n        private void Parse_TagOpening(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastTagString.Append(c);            \r\n        }\r\n        private void Parse_TagClosing(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastTagString.Append(c);\r\n            \r\n            string tagString = state.lastTagString.ToString();\r\n\r\n            OnTagElement(state.lastTagName.ToString(), ref tagString);\r\n\r\n            result.Append(tagString);\r\n\r\n            state.state = ParserStateNum.OuterText;            \r\n        }\r\n        private void Parse_TagName(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastTagString.Append(c);\r\n            state.lastTagName.Append(c);\r\n        }\r\n        private void Parse_InnerTagSpace(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastTagString.Append(c);\r\n        }\r\n        private void Parse_AttributeName(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastAttributeName.Append(c);\r\n        }\r\n        private void Parse_AttributePreAssigning(ParserState state, char c, StringBuilder result)\r\n        {}\r\n        private void Parse_AttributeAssigning(ParserState state, char c, StringBuilder result)\r\n        {}\r\n        private void Parse_AttributeValueOpening(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.state = ParserStateNum.AttributeValue;\r\n        }\r\n        private void Parse_AttributeValueClosing(ParserState state, char c, StringBuilder result)\r\n        {\r\n            string\r\n                attName = state.lastAttributeName.ToString(),\r\n                attValue = state.lastAttributeValue.ToString();\r\n\r\n            OnTagAttribute(state.lastTagName.ToString(), ref attName, ref attValue, ref state.lastAttributeValueQuote);\r\n\r\n            state.lastTagString.Append(attName);\r\n            state.lastTagString.Append('=');\r\n            if (state.lastAttributeValueQuote != '\\0')  state.lastTagString.Append(state.lastAttributeValueQuote);\r\n            state.lastTagString.Append(attValue);\r\n            if (state.lastAttributeValueQuote != '\\0') state.lastTagString.Append(state.lastAttributeValueQuote);\r\n\r\n            state.state = ParserStateNum.InnerTagSpace;\r\n        }\r\n        private void Parse_AttributeValue(ParserState state, char c, StringBuilder result)\r\n        {\r\n            state.lastAttributeValue.Append(c);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Utils.CoreCLR.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Ink;\r\nusing System.Windows.Input;\r\nusing System.Windows.Media;\r\nusing System.Windows.Media.Animation;\r\nusing System.Windows.Shapes;\r\nusing System.Windows.Markup;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library\r\n{\r\n    public static class Utils\r\n    {\r\n\r\n        [ImplementsFunction(\"loadfile\")]\r\n        public static void LoadFile(string path, PhpCallback function)\r\n        {\r\n            string file = string.Empty;\r\n\r\n            if (function == null)\r\n            {\r\n                PhpException.ArgumentNull(\"function\");\r\n                return;\r\n            }\r\n            if (function.IsInvalid) return;\r\n\r\n            WebClient webclient = new WebClient();\r\n            webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(\r\n                delegate(object sender, DownloadStringCompletedEventArgs downEventArgs)\r\n                {\r\n                    var canvas = ((ClrObject)ScriptContext.CurrentContext.AutoGlobals.Canvas.Value).RealObject as System.Windows.Controls.Canvas;\r\n\r\n                    canvas.Dispatcher.BeginInvoke(() =>\r\n                        {\r\n                            function.Invoke(downEventArgs.Result);\r\n\r\n                        });\r\n                }\r\n                );\r\n\r\n            var source_root = ((ClrObject)ScriptContext.CurrentContext.AutoGlobals.Addr.Value).RealObject as string;\r\n\r\n            Uri baseUri = new Uri(source_root + \"/\", UriKind.Absolute);\r\n            Uri uriFile = new Uri(path, UriKind.RelativeOrAbsolute);\r\n            Uri uri = new Uri(baseUri, uriFile);\r\n\r\n\r\n            webclient.DownloadStringAsync(uri);\r\n\r\n            //downloadFinished.WaitOne();\r\n\r\n            //return XamlReader.Load(file);\r\n\r\n        }\r\n\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary/Variables.cs",
    "content": "/*\n\n Copyright (c) 2004-2006 Tomas Matousek.  \n\n The use and distribution terms for this software are contained in the file named License.txt, \n which can be found in the root of the Phalanger distribution. By using this software \n in any fashion, you are agreeing to be bound by the terms of this license.\n \n You must not remove this notice from this software.\n\n*/\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Runtime.Serialization;\nusing PHP.Core;\nusing System.Collections.Generic;\n\n#if SILVERLIGHT\nusing PHP.CoreCLR;\n#else\nusing System.Web;\nusing System.Runtime.Serialization.Formatters.Binary;\r\nusing System.Diagnostics;\n#endif\n\nnamespace PHP.Library\n{\n\t#region Enumerations\n\n\t/// <summary>\n\t/// Type of extraction <see cref=\"PhpVariables.Extract(Dictionary{string,object},PhpArray,ExtractType,string)\"/>.\n\t/// </summary>\n\t[Flags]\n\tpublic enum ExtractType\n\t{\n\t\t/// <summary>PHP constant: EXTR_OVERWRITE</summary>\n\t\t[ImplementsConstant(\"EXTR_OVERWRITE\")]\n\t\tOverwrite,\n\n\t\t/// <summary>PHP constant: EXTR_SKIP</summary>\n\t\t[ImplementsConstant(\"EXTR_SKIP\")]\n\t\tSkip,\n\n\t\t/// <summary>PHP constant: EXTR_PREFIX_SAME</summary>\n\t\t[ImplementsConstant(\"EXTR_PREFIX_SAME\")]\n\t\tPrefixSame,\n\n\t\t/// <summary>PHP constant: EXTR_PREFIX_ALL</summary>\n\t\t[ImplementsConstant(\"EXTR_PREFIX_ALL\")]\n\t\tPrefixAll,\n\n\t\t/// <summary>PHP constant: EXTR_PREFIX_INVALID</summary>\n\t\t[ImplementsConstant(\"EXTR_PREFIX_INVALID\")]\n\t\tPrefixInvalid,\n\n\t\t/// <summary>PHP constant: EXTR_PREFIX_IF_EXISTS</summary>\n\t\t[ImplementsConstant(\"EXTR_PREFIX_IF_EXISTS\")]\n\t\tPrefixIfExists,\n\n\t\t/// <summary>PHP constant: EXTR_IF_EXISTS</summary>\n\t\t[ImplementsConstant(\"EXTR_IF_EXISTS\")]\n\t\tIfExists,\n\n\t\t/// <summary>PHP constant: EXTR_REFS</summary>\n\t\t[ImplementsConstant(\"EXTR_REFS\")]\n\t\tRefs = 256,\n\n\t\t/// <summary>A value masking all options but <see cref=\"Refs\"/> (0xff).</summary>\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\n\t\tNonFlags = 0xff\n\t}\n\n\t/// <summary>\n\t/// File upload errors.\n\t/// </summary>\n    [ImplementsExtension(LibraryDescriptor.ExtCore)]\n\tpublic enum FileUploadError\n\t{\n\t\t/// <summary>\n\t\t/// No error.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"UPLOAD_ERR_OK\")]\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// The uploaded file exceeds the \"upload_max_filesize\" configuration option.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"UPLOAD_ERR_INI_SIZE\")]\n\t\tSizeExceededOnServer,\n\n\t\t/// <summary>\n\t\t/// The uploaded file exceeds the \"MAX_FILE_SIZE\" value specified in the form.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"UPLOAD_ERR_FORM_SIZE\")]\n\t\tSizeExceededOnClient,\n\n\t\t/// <summary>\n\t\t/// The uploaded file was only partially uploaded.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"UPLOAD_ERR_PARTIAL\")]\n\t\tPartial,\n\n\t\t/// <summary>\n\t\t/// No file was uploaded.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"UPLOAD_ERR_NO_FILE\")]\n\t\tNoFile,\n\n        /// <summary>\n        /// Missing a temporary folder\n        /// </summary>\n        [ImplementsConstant(\"UPLOAD_ERR_NO_TMP_DIR\")]\n        NoTempDirectory,\n\n        /// <summary>\n        /// Missing a temporary folder\n        /// </summary>\n        [ImplementsConstant(\"UPLOAD_ERR_CANT_WRITE\")]\n        CantWrite,\n\n        /// <summary>\n        /// A PHP extension stopped the file upload\n        /// </summary>\n        [ImplementsConstant(\"UPLOAD_ERR_EXTENSION\")]\n        ErrorExtension\n\t}\n\n\t#endregion\n\n\t/// <summary>\n\t/// Provides means for PHP variables handling.\n\t/// </summary>\n\t/// <threadsafety static=\"true\"/>\n\tpublic static class PhpVariables\n\t{\n\t\t#region Constants\n\n\t\t/// <summary>\n\t\t/// Recursive counting.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"COUNT_RECURSIVE\")]\n\t\tpublic const int CountRecursive = 1;\n\n\t\t/// <summary>\n\t\t/// Non-recursive counting.\n\t\t/// </summary>\n\t\t[ImplementsConstant(\"COUNT_NORMAL\")]\n\t\tpublic const int CountNormal = 0;\n\n\t\t#endregion\n\n\t\t#region count, sizeof\n\n\t\t/// <summary>\n\t\t/// Counts items in a variable.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable which items to count.</param>\n\t\t/// <returns>The number of items.</returns>\n\t\t/// <remarks>The same as <see cref=\"Count\"/>.</remarks>\n\t\t[ImplementsFunction(\"sizeof\")]\n\t\tpublic static int SizeOf(object variable)\n\t\t{\n            return Count(variable, CountNormal);\n\t\t}\n        \n        /// <summary>\n        /// Counts items in a variable.\n        /// </summary>\n        /// <param name=\"variable\">The variable which items to count.</param>\n        /// <param name=\"mode\">Whether to count recursively.</param>\n        /// <returns>The number of items in all arrays contained recursivelly in <paramref name=\"variable\"/>.</returns>\n        /// <remarks>If any item of the <paramref name=\"variable\"/> contains infinite recursion \n        /// skips items that are repeating because of such recursion.\n        /// </remarks>\n        [ImplementsFunction(\"sizeof\")]\n        public static int SizeOf(object variable, int mode)\n        {\n            return Count(variable, mode);\n        }\n\n\t\t/// <summary>\n\t\t/// Counts items in a variable.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable which items to count.</param>\n\t\t/// <returns>The number of items.</returns>\n\t\t[ImplementsFunction(\"count\")]\n\t\tpublic static int Count(object variable)\n\t\t{\n            return Count(variable, CountNormal);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Counts items in a variable.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable which items to count.</param>\n\t\t/// <param name=\"mode\">Whether to count recursively.</param>\n\t\t/// <returns>The number of items in all arrays contained recursivelly in <paramref name=\"variable\"/>.</returns>\n\t\t/// <remarks>If any item of the <paramref name=\"variable\"/> contains infinite recursion \n\t\t/// skips items that are repeating because of such recursion.\n\t\t/// </remarks>\n\t\t[ImplementsFunction(\"count\")]\n\t\tpublic static int Count(object variable, int mode)\n\t\t{\n\t\t\t// null or uninitialized variable:\n\t\t\tif (variable == null) return 0;\n\n            //\n\t\t\t// hashtable\n            //\n\t\t\tPhpHashtable ht;\n            if ((ht = variable as PhpHashtable) != null)\n            {\n                // non recursive count:\n                if (mode != CountRecursive)\n                    return ht.Count;\n\n                // recursive count:\n                int result = 0;\n                using (PhpHashtable.RecursiveEnumerator iterator = ht.GetRecursiveEnumerator(true,true))\n                {\n                    while (iterator.MoveNext())\n                        result++;\n                }\n\n                return result;\n            }\n\n            //\n            // SPL.Countable\n            // recursive count not supported (not even in PHP)\n            //\n            SPL.Countable countable;\n            if ((countable = variable as SPL.Countable) != null)\n            {\n                object cnt = countable.count(ScriptContext.CurrentContext);\n                return (cnt != null) ? PHP.Core.Convert.ObjectToInteger(cnt) : 0;\n            }\n\n            PHP.Core.Reflection.DObject dobj;\n            if ((dobj = variable as PHP.Core.Reflection.DObject) != null)\n            {\n                if (dobj.RealObject is SPL.Countable)\n                {\n                    object cnt = dobj.InvokeMethod(\"count\", null, ScriptContext.CurrentContext);\n                    return (cnt != null) ? PHP.Core.Convert.ObjectToInteger(cnt) : 0;\n                }\r\n                else if (dobj.RealObject is ICollection)\r\n                {\r\n                    return ((ICollection)dobj.RealObject).Count;\r\n                }\n            }            \n\n            // count not supported\n            return 1;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region doubleval, floatval, intval, strval, settype, gettype, boolval\n\n\t\t/// <summary>\n\t\t/// Converts to double.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>The converted value.</returns>\n\t\t[ImplementsFunction(\"doubleval\")]\n        [PureFunction]\n\t\tpublic static double DoubleVal(object variable)\n\t\t{\n\t\t\treturn PHP.Core.Convert.ObjectToDouble(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts to double.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>The converted value.</returns>\n\t\t[ImplementsFunction(\"floatval\")]\n        [PureFunction]\n        public static double FloatVal(object variable)\n\t\t{\n\t\t\treturn PHP.Core.Convert.ObjectToDouble(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts to integer.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>The converted value.</returns>\n\t\t[ImplementsFunction(\"intval\")]\n        [PureFunction]\n        public static int IntVal(object variable)\n\t\t{\n\t\t\treturn PHP.Core.Convert.ObjectToInteger(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts to integer using a specified base.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <param name=\"base\">The base.</param>\n\t\t/// <returns>The converted value.</returns>\n\t\t[ImplementsFunction(\"intval\")]\n        [PureFunction]\n        public static int IntVal(object variable, int @base)\n\t\t{\n\t\t\t// TODO: base\n\t\t\t// The integer value of var on success, or 0 on failure. Empty arrays and objects return 0, non-empty arrays and objects return 1. \n\t\t\t// 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. \n\t\t\treturn PHP.Core.Convert.ObjectToInteger(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts to string.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>The converted value.</returns>\n\t\t[ImplementsFunction(\"strval\")]\n        [PureFunction]\n        public static string StrVal(object variable)\n\t\t{\n\t\t\treturn PHP.Core.Convert.ObjectToString(variable);\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Converts to boolean.\r\n        /// </summary>\r\n        /// <param name=\"variable\">The variable.</param>\r\n        /// <returns>The converted value.</returns>\r\n        [ImplementsFunction(\"boolval\")]\r\n        [PureFunction]\r\n        public static bool BoolVal(object variable)\r\n        {\r\n            return PHP.Core.Convert.ObjectToBoolean(variable);\r\n        }\n\n\t\t/// <summary>\n\t\t/// Sets variable's type.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <param name=\"type\">The string identifying a new type. See PHP manual for details.</param>\n\t\t/// <returns>Whether <paramref name=\"type\"/> is valid type identifier.</returns>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"type\"/> has invalid value.</exception>\n\t\t[ImplementsFunction(\"settype\")]\n\t\tpublic static bool SetType(ref object variable, string type)\n\t\t{\n            switch (System.Globalization.CultureInfo.InvariantCulture.TextInfo.ToLower(type)) // we don't need Unicode characters to be lowercased properly // CurrentCulture is slow\n\t\t\t{\n\t\t\t\tcase \"bool\":\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToBoolean(variable);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"int\":\n\t\t\t\tcase \"integer\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToInteger(variable);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"float\":\n\t\t\t\tcase \"double\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToDouble(variable);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToString(variable);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"array\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToPhpArray(variable);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\tvariable = PHP.Core.Convert.ObjectToDObject(variable, ScriptContext.CurrentContext);\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"null\":\n\t\t\t\t\tvariable = null;\n\t\t\t\t\treturn true;\n\n\t\t\t\tdefault:\n\t\t\t\t\tPhpException.InvalidArgument(\"type\", LibResources.GetString(\"invalid_type_name\"));\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Retrieves name of a variable type.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>The string type identifier. See PHP manual for details.</returns>\n\t\t[ImplementsFunction(\"gettype\")]\n        [PureFunction]\n        public static string GetType(object variable)\n\t\t{\n\t\t\t// works well on references:\n\t\t\treturn PhpVariable.GetTypeName(variable);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region is_<type>\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is integer.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is integer.</returns>\n\t\t[ImplementsFunction(\"is_int\")]\n        [PureFunction]\n        public static bool IsInt(object variable)\n\t\t{\n            return variable is int;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is integer.\n        /// Alias for is_int().\n        /// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is integer.</returns>\n\t\t[ImplementsFunction(\"is_integer\")]\n        [PureFunction]\n        public static bool IsInteger(object variable)\n\t\t{\n            return variable is int;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is long. \n        /// TODO: Alias for is_int(). But not in Phalanger.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is long.</returns>\n\t\t[ImplementsFunction(\"is_long\")]\n        [PureFunction]\n        public static bool IsLong(object variable)\n\t\t{\n            return variable is long;//IsInt(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is boolean.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is boolean.</returns>\n\t\t[ImplementsFunction(\"is_bool\")]\n        [PureFunction]\n        public static bool IsBool(object variable)\n\t\t{\n\t\t\treturn variable is bool;\n\t\t}\n\n        /// <summary>\n        /// Checks whether a dereferenced variable is double.\n        /// </summary>\n        /// <param name=\"variable\">The variable.</param>\n        /// <returns>Whether <paramref name=\"variable\"/> is double.</returns>\n        [ImplementsFunction(\"is_float\")]\n        [PureFunction]\n        public static bool IsFloat(object variable)\n        {\n            return variable is double;\n        }\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is double.\n        /// Alias for is_float().\n        /// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is double.</returns>\n\t\t[ImplementsFunction(\"is_double\")]\n        [PureFunction]\n        public static bool IsDouble(object variable)\n\t\t{\n            return variable is double;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is double.\n        /// Alias for is_float().\n        /// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is double.</returns>\n\t\t[ImplementsFunction(\"is_real\")]\n        [PureFunction]\n        public static bool IsReal(object variable)\n\t\t{\n            return variable is double;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is string.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is string.</returns>\n\t\t[ImplementsFunction(\"is_string\")]\n        [PureFunction]\n        public static bool IsString(object variable)\n\t\t{\n\t\t\treturn PhpVariable.IsString(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is an <see cref=\"PhpArray\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is <see cref=\"PhpArray\"/>.</returns>\n\t\t[ImplementsFunction(\"is_array\")]\n        public static bool IsArray(object variable)\n\t\t{\n\t\t\treturn variable is PhpArray;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is <see cref=\"Core.Reflection.DObject\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is <see cref=\"Core.Reflection.DObject\"/>.</returns>\n\t\t[ImplementsFunction(\"is_object\")]\n        public static bool IsObject(object variable)\n\t\t{\n\t\t\treturn (variable is Core.Reflection.DObject && !(variable is __PHP_Incomplete_Class));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is a valid <see cref=\"PhpResource\"/>.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is a valid <see cref=\"PhpResource\"/>.</returns>\n\t\t[ImplementsFunction(\"is_resource\")]\n\t\tpublic static bool IsResource(object variable)\n\t\t{\n\t\t\tPhpResource res = variable as PhpResource;\n\t\t\treturn res != null && res.IsValid;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is a <B>null</B> reference.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is a <B>null</B> reference.</returns>\n\t\t[ImplementsFunction(\"is_null\")]\n        [PureFunction]\n        public static bool IsNull(object variable)\n\t\t{\n\t\t\treturn variable == null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region is_scalar, is_numeric, is_callable, get_resource_type\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is a scalar.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is an integer, a double, a bool or a string after dereferencing.</returns>\n\t\t[ImplementsFunction(\"is_scalar\")]\n        [PureFunction]\n        public static bool IsScalar(object variable)\n\t\t{\n\t\t\treturn PhpVariable.IsScalar(variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks whether a dereferenced variable is numeric.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns>Whether <paramref name=\"variable\"/> is integer, double or numeric string.\n\t\t/// <seealso cref=\"PHP.Core.Convert.StringToNumber\"/></returns>\n\t\t[ImplementsFunction(\"is_numeric\")]\n        [PureFunction]\n        public static bool IsNumeric(object variable)\n\t\t{\r\n            if (variable == null)\r\n                return false;\r\n\r\n            // real numbers\r\n            if (variable.GetType() == typeof(int) ||\r\n                variable.GetType() == typeof(long) ||\r\n                variable.GetType() == typeof(double))\r\n                return true;\n\n            // string            \r\n            if (variable.GetType() == typeof(string))\r\n                return IsNumericString((string)variable);\r\n            \n            if (variable.GetType() == typeof(PhpBytes))\n                return IsNumericString(variable.ToString());\n\n            // some .NET types:\r\n            if (variable is Core.Reflection.IClrValue)\r\n            {\r\n                // decimal ?\r\n            }\n\n            // anything else:\r\n            return false;\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Checks whether given string can be converted to a number.\r\n        /// </summary>\r\n        /// <param name=\"str\">A string value.</param>\r\n        /// <returns><c>True</c> if the string represents a number. Otherwise <c>false</c>.</returns>\r\n        private static bool IsNumericString(string str)\r\n        {\r\n            int ival;\r\n            long lval;\r\n            double dval;\n\n            return (Core.Convert.StringToNumber(str, out ival, out lval, out dval) & Core.Convert.NumberInfo.IsNumber) != 0;\r\n        }\n\n\t\t/// <summary>\n\t\t/// Verifies that the contents of a variable can be called as a function.\n\t\t/// </summary>\n        /// <param name=\"caller\">Current class context.</param>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <returns><B>true</B> if <paramref name=\"variable\"/> denotes a function, <B>false</B>\n\t\t/// otherwise.</returns>\n\t\t[ImplementsFunction(\"is_callable\", FunctionImplOptions.NeedsClassContext)]\n\t\tpublic static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable)\n\t\t{\n\t\t\treturn IsCallable(caller, variable, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Verifies that the contents of a variable can be called as a function.\n\t\t/// </summary>\n        /// <param name=\"caller\">Current class context.</param>\n        /// <param name=\"variable\">The variable.</param>\n\t\t/// <param name=\"syntaxOnly\">If <B>true</B>, it is only checked that has <pararef name=\"variable\"/>\n\t\t/// a valid structure to be used as a callback. if <B>false</B>, the existence of the function (or\n\t\t/// method) is also verified.</param>\n\t\t/// <returns><B>true</B> if <paramref name=\"variable\"/> denotes a function, <B>false</B>\n\t\t/// otherwise.</returns>\n\t\t[ImplementsFunction(\"is_callable\", FunctionImplOptions.NeedsClassContext)]\n\t\tpublic static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable, bool syntaxOnly)\n\t\t{\n            return Operators.IsCallable(variable, caller, syntaxOnly);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Verifies that the contents of a variable can be called as a function.\n\t\t/// </summary>\n        /// <param name=\"caller\">Current class context.</param>\n        /// <param name=\"variable\">The variable.</param>\n\t\t/// <param name=\"syntaxOnly\">If <B>true</B>, it is only checked that has <pararef name=\"variable\"/>\n\t\t/// a valid structure to be used as a callback. if <B>false</B>, the existence of the function (or\n\t\t/// method) is also verified.</param>\n\t\t/// <param name=\"callableName\">Receives the name of the function or method (for example\n\t\t/// <c>SomeClass::SomeMethod</c>).</param>\n\t\t/// <returns><B>true</B> if <paramref name=\"variable\"/> denotes a function, <B>false</B>\n\t\t/// otherwise.</returns>\n        [ImplementsFunction(\"is_callable\", FunctionImplOptions.NeedsClassContext)]\n\t\tpublic static bool IsCallable(PHP.Core.Reflection.DTypeDesc caller, object variable, bool syntaxOnly, out string callableName)\n\t\t{\n\t\t\tPhpCallback callback = PHP.Core.Convert.ObjectToCallback(variable, true);\n\t\t\tif (callback == null || callback.IsInvalid)\n\t\t\t{\n\t\t\t\tcallableName = PHP.Core.Convert.ObjectToString(variable);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcallableName = ((IPhpConvertible)callback).ToString();\n\t\t\treturn (syntaxOnly ? true : callback.Bind(true, caller, null));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the type of a resource.\n\t\t/// </summary>\n\t\t/// <param name=\"resource\">The resource.</param>\n\t\t/// <returns>The resource type name or <c>null</c> if <paramref name=\"resource\"/> is <c>null</c>.</returns>\n\t\t[ImplementsFunction(\"get_resource_type\")]\n\t\t[return: CastToFalse]\n\t\tpublic static string GetResourceType(PhpResource resource)\n\t\t{\n\t\t\treturn (resource != null ? resource.TypeName : null);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region serialize, unserialize (CLR only)\n#if !SILVERLIGHT\n\n\t\t/// <summary>\n\t\t/// Serializes a graph of connected objects to a byte array using the PHP serializer.\n\t\t/// </summary>\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\n        /// <param name=\"variable\">The variable to serialize.</param>\n\t\t/// <returns>The serialized representation of the <paramref name=\"variable\"/>.</returns>\n\t\t[ImplementsFunction(\"serialize\", FunctionImplOptions.NeedsClassContext)]\n\t\tpublic static PhpBytes Serialize(PHP.Core.Reflection.DTypeDesc caller, object variable)\n\t\t{\n            LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext);\n\n\t\t\treturn config.Serialization.DefaultSerializer.Serialize(variable, caller);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Deserializes a graph of connected object from a byte array using the PHP serializer.\n\t\t/// </summary>\n        /// <param name=\"caller\">DTypeDesc of the caller's class context if it is known or UnknownTypeDesc if it should be determined lazily.</param>\n        /// <param name=\"bytes\">The byte array to deserialize the graph from.</param>\n\t\t/// <returns>The deserialized object graph.</returns>\n        [ImplementsFunction(\"unserialize\", FunctionImplOptions.NeedsClassContext)]\n        public static PhpReference Unserialize(PHP.Core.Reflection.DTypeDesc caller, PhpBytes bytes)\n\t\t{\r\n            if (bytes == null || bytes.Length == 0)\r\n                return new PhpReference(false);\n\n            LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext);\n\n            return config.Serialization.DefaultSerializer.Deserialize(bytes, caller);\n\t\t}\n\n#endif\n\t\t#endregion\n\n        #region compact, extract\n\n        /// <summary>\n\t\t/// Creates array containing variables and their values.\n\t\t/// </summary>\n\t\t/// <param name=\"localVariables\">The table of defined variables.</param>\n\t\t/// <param name=\"names\">Names of the variables - each chan be either \n\t\t/// <see cref=\"string\"/> or <see cref=\"PhpArray\"/>. Names are retrived recursively from an array.</param>\n\t\t/// <returns>The <see cref=\"PhpArray\"/> which keys are names of variables and values are deep copies of \n\t\t/// their values.</returns>\n\t\t/// <remarks>\n\t\t/// Items in <paramref name=\"names\"/> which are neither of type <see cref=\"string\"/> nor <see cref=\"PhpArray\"/> \n\t\t/// are ignored.</remarks>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"names\"/> is a <B>null</B> reference.</exception>\n\t\t[ImplementsFunction(\"compact\", FunctionImplOptions.NeedsVariables)]\n\t\tpublic static PhpArray Compact(Dictionary<string, object> localVariables, params object[] names)\n\t\t{\n\t\t\tif (names == null)\n\t\t\t{\n\t\t\t\tPhpException.ArgumentNull(\"names\");\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tPhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables;\n\t\t\tPhpArray result = new PhpArray();\n\n\t\t\tfor (int i = 0; i < names.Length; i++)\n\t\t\t{\n\t\t\t\tstring name;\n\t\t\t\tPhpArray array;\n\n\t\t\t\tif ((name = PhpVariable.AsString(names[i])) != null)\n\t\t\t\t{\n\t\t\t\t\t// if variable exists adds a copy of its current value to the result:\n\t\t\t\t\tobject value;\n\n\t\t\t\t\tif (PhpHashtable.TryGetValue(globals, localVariables, name, out value))\n\t\t\t\t\t\tresult.Add(name, PhpVariable.DeepCopy(value));\n\t\t\t\t}\n\t\t\t\telse if ((array = names[i] as PhpArray) != null)\n\t\t\t\t{\n\t\t\t\t\t// recursively searches for string variable names:\n\t\t\t\t\tusing (PhpHashtable.RecursiveEnumerator iterator = array.GetRecursiveEnumerator(false,true))\n\t\t\t\t\t{\n\t\t\t\t\t\twhile (iterator.MoveNext())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ((name = PhpVariable.AsString(iterator.Current.Value)) != null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// if variable exists adds a copy of its current value to the result:\n\t\t\t\t\t\t\t\tobject value;\n\t\t\t\t\t\t\t\tif (PhpHashtable.TryGetValue(globals, localVariables, name, out value))\n\t\t\t\t\t\t\t\t\tresult.Add(name, PhpVariable.DeepCopy(value));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Import variables into the current variables table from an array.\n\t\t/// </summary>\n\t\t/// <param name=\"definedVariables\">The table of defined variables.</param>\n\t\t/// <param name=\"vars\">The <see cref=\"PhpArray\"/> containing names of variables and values to be assigned to them.</param>\n\t\t/// <returns>The number of variables actually affected by the extraction.</returns>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"vars\"/> or <paramref name=\"definedVariables\"/> is a <B>null</B> reference.</exception>\n\t\t/// <exception cref=\"InvalidCastException\">Some key of <paramref name=\"definedVariables\"/> is not type of <see cref=\"string\"/>.</exception>\n\t\t/// <remarks>The same as <see cref=\"Extract(Dictionary{string,object},PhpArray,ExtractType,string)\"/> with empty prefix and \n\t\t/// <see cref=\"ExtractType.Overwrite\"/> option.\n\t\t/// </remarks>\n\t\t[ImplementsFunction(\"extract\", FunctionImplOptions.NeedsVariables)]\n\t\tpublic static int Extract(Dictionary<string, object> definedVariables, PhpArray vars)\n\t\t{\n\t\t\t// GENERICS: IDictionary<string,object>\n\n\t\t\treturn Extract(definedVariables, vars, ExtractType.Overwrite, null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Import variables into the current variables table from an array.\n\t\t/// </summary>\n\t\t/// <param name=\"definedVariables\">The table of defined variables.</param>\n\t\t/// <param name=\"vars\">The <see cref=\"PhpArray\"/> containing names of variables and values to be assigned to them.</param>\n\t\t/// <param name=\"type\">The type of the extraction.</param>\n\t\t/// <returns>The number of variables actually affected by the extraction.</returns>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"type\"/> is invalid.</exception>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"vars\"/> or <paramref name=\"definedVariables\"/> is a <B>null</B> reference.</exception>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"type\"/> compels presence of prefix (see <see cref=\"Extract(Dictionary{string,object},PhpArray,ExtractType,string)\"/>).</exception>\n\t\t/// <exception cref=\"InvalidCastException\">Some key of <paramref name=\"definedVariables\"/> is not type of <see cref=\"string\"/>.</exception>\n\t\t/// <remarks>See <see cref=\"Extract(Dictionary{string,object},PhpArray,ExtractType,string)\"/> for details.</remarks>\n\t\t[ImplementsFunction(\"extract\", FunctionImplOptions.NeedsVariables)]\n\t\tpublic static int Extract(Dictionary<string, object> definedVariables, PhpArray vars, ExtractType type)\n\t\t{\n\t\t\t// GENERICS: IDictionary<string,object>\n\n\t\t\tswitch (type & ExtractType.NonFlags)\n\t\t\t{\n\t\t\t\tcase ExtractType.PrefixSame:\n\t\t\t\tcase ExtractType.PrefixAll:\n\t\t\t\tcase ExtractType.PrefixInvalid:\n\t\t\t\tcase ExtractType.PrefixIfExists:\n\t\t\t\t\tPhpException.InvalidArgument(\"prefix\", LibResources.GetString(\"should_be_specified\", \"prefix\"));\n\t\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\treturn Extract(definedVariables, vars, type, null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Import variables into the current variables table from an array.\n\t\t/// </summary>\n\t\t/// <param name=\"localVariables\">The table of defined variables.</param>\n\t\t/// <param name=\"vars\">The <see cref=\"PhpArray\"/> containing names of variables and values to be assigned to them.</param>\n\t\t/// <param name=\"type\">The type of the extraction.</param>\n\t\t/// <param name=\"prefix\">The prefix (can be a <B>null</B> reference) of variables names.</param>\n\t\t/// <returns>The number of variables actually affected by the extraction.</returns>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"type\"/> is invalid.</exception>\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"vars\"/> is a <B>null</B> reference.</exception>\n        /// <exception cref=\"InvalidCastException\">Some key of <paramref name=\"localVariables\"/> is not type of <see cref=\"string\"/>.</exception>\n\t\t/// <include file='Doc/Variables.xml' path='docs/method[@name=\"Extract\"]/*'/>\n\t\t[ImplementsFunction(\"extract\", FunctionImplOptions.NeedsVariables)]\n\t\tpublic static int Extract(Dictionary<string, object> localVariables, PhpArray/*!*/ vars, ExtractType type,\n\t\t\t\tstring prefix)\n\t\t{\n\t\t\tif (vars == null)\n\t\t\t{\n\t\t\t\tPhpException.ArgumentNull(\"vars\");\n\t\t\t\treturn 0;\n\t\t\t}\r\n\r\n            if (vars.Count == 0)\r\n                return 0;\n\n            // unfortunately, type contains flags are combined with enumeration: \n            bool refs = (type & ExtractType.Refs) != 0;\n            type &= ExtractType.NonFlags;\n\n            //\n            // construct the action used to set the variable into the locals/globals\n            //\n            Action<string/*name*/, object/*value*/> updateVariableFn;    // function that writes the value to locals/globals\n            Predicate<string/*name*/> containsFn;       // function that checks if variable exists\n            PhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables;\n\n            #region select function that writes the variable\n\n            if (refs)\n            {\n                // makes a reference and writes it back (deep copy is not necessary, \"no duplicate pointers\" rule preserved):\n\n                if (localVariables != null)\n                {\n                    updateVariableFn = (name, value) =>\n                    {\n                        localVariables[name] = vars[name] = PhpVariable.MakeReference(value);\n                    };\n                }\n                else\n                {\n                    updateVariableFn = (name, value) =>\n                    {\n                        globals[name] = vars[name] = PhpVariable.MakeReference(value);\n                    };\n                }\n            }\n            else\n            {\n                if (localVariables != null)\n                {\n                    updateVariableFn = (name, value) =>\n                    {\n                        // deep copy the value\n                        value = PhpVariable.DeepCopy(PhpVariable.Dereference(value));\n\n                        // put into locals\n                        object item;\n                        PhpReference ref_item;\n                        if (localVariables.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null)\n                            ref_item.Value = value;\n                        else\n                            localVariables[name] = value;\n                    };\n                }\n                else\n                {\n                    updateVariableFn = (name, value) =>\n                    {\n                        // deep copy the value\n                        value = PhpVariable.DeepCopy(PhpVariable.Dereference(value));\n\n                        // set the value to globals\n                        object item;\n                        PhpReference ref_item;\n                        if (globals.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null)\n                            ref_item.Value = value;\n                        else\n                            globals[name] = value;\n                    };\n                }\n            }\n\n            #endregion\n\n            Debug.Assert(updateVariableFn != null);\n\n            #region select function that checks if variable exists\n\n            if (localVariables != null)\n                containsFn = (name) => localVariables.ContainsKey(name);\n            else\n                containsFn = (name) => globals.ContainsKey(name);\n\n            #endregion\n\n            Debug.Assert(containsFn != null);\n            \n            //\n            //\n            //\n            int extracted_count = 0;\n            foreach (KeyValuePair<IntStringKey, object> entry in vars)\n\t\t\t{\n\t\t\t\tstring name = entry.Key.ToString();\n\t\t\t\tif (String.IsNullOrEmpty(name) && type != ExtractType.PrefixInvalid) continue;\n\n\t\t\t\tswitch (type)\n\t\t\t\t{\n\t\t\t\t\tcase ExtractType.Overwrite:\n\n\t\t\t\t\t\t// anything is overwritten:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.Skip:\n\n\t\t\t\t\t\t// skips existing name:\n\t\t\t\t\t\tif (containsFn(name)) continue;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.IfExists:\n\n\t\t\t\t\t\t// skips nonexistent name:\n                        if (!containsFn(name)) continue;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.PrefixAll:\n\n\t\t\t\t\t\t// prefix anything:\n\t\t\t\t\t\tname = String.Concat(prefix, \"_\", name);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.PrefixInvalid:\n\n\t\t\t\t\t\t// prefixes invalid, others are overwritten:\n\t\t\t\t\t\tif (!PhpVariable.IsValidName(name))\n\t\t\t\t\t\t\tname = String.Concat(prefix, \"_\", name);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.PrefixSame:\n\n\t\t\t\t\t\t// prefixes existing, others are overwritten:\n                        if (containsFn(name))\n\t\t\t\t\t\t\tname = String.Concat(prefix, \"_\", name);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ExtractType.PrefixIfExists:\n\n\t\t\t\t\t\t// prefixes existing, others are skipped:\n                        if (containsFn(name))\n\t\t\t\t\t\t\tname = String.Concat(prefix, \"_\", name);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tPhpException.InvalidArgument(\"type\", LibResources.GetString(\"arg:invalid_value\"));\n\t\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// invalid names are skipped:\n\t\t\t\tif (PhpVariable.IsValidName(name))\n\t\t\t\t{\n                    // write the value to locals or globals:\n                    updateVariableFn(name, entry.Value);\n\t\t\t\t\t\n\t\t\t\t\textracted_count++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn extracted_count;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region get_defined_vars, import_request_variables (CLR only)\n\n#if !SILVERLIGHT\n\t\t/// <summary>\n\t\t/// Retrieves an array containing copies of currently defined variables.\n\t\t/// </summary>\n\t\t/// <param name=\"localVariables\">The table of defined variables.</param>\n\t\t/// <returns>The <see cref=\"PhpArray\"/> which keys are the name of variables and values are \n\t\t/// deep copies of their values.</returns>\n\t\t[ImplementsFunction(\"get_defined_vars\", FunctionImplOptions.NeedsVariables)]\n\t\tpublic static PhpArray GetDefinedVariables(Dictionary<string, object> localVariables)\n\t\t{\n\t\t\tPhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables;\n\n            PhpArray result = new PhpArray((localVariables != null) ? localVariables.Count : globals.Count);\n\t\t\tforeach (KeyValuePair<string, object> entry in PhpArray.GetEnumerator(globals, localVariables))\n\t\t\t\tresult.Add(entry.Key, PhpVariable.DeepCopy(entry.Value));\n\n\t\t\treturn result;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Imports request variables to the $GLOBALS array.\n\t\t/// </summary>\n\t\t[ImplementsFunction(\"import_request_variables\")]\n\t\tpublic static bool ImportRequestVariables(string gpcOrder)\n\t\t{\n\t\t\treturn ImportRequestVariables(gpcOrder, null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Imports request variables to the $GLOBALS array.\n\t\t/// </summary>\n\t\t/// <param name=\"gpcOrder\">\n\t\t/// Order of addition. A string containing 'G', 'P', 'C' letters. \n\t\t/// GET, POST, COOKIE variables are set to the $GLOBALS array for each such letter, respectively, \n\t\t/// overwriting variables of the same name that are already there.\n\t\t/// </param>\n\t\t/// <param name=\"prefix\">\n\t\t/// String to prefix variables names with. \n\t\t/// It's recommanded to specify some to prevent overriding existing global variables.\n\t\t/// </param>\n\t\t/// <returns>\n\t\t/// Whether any variables has been added.\n\t\t/// </returns>\n\t\t/// <exception cref=\"PhpException\">No prefix specified - security hazard (Notice).</exception>\n\t\t/// <exception cref=\"PhpException\">Attempt to override $GLOBALS variable (Warning).</exception>\n\t\t[ImplementsFunction(\"import_request_variables\")]\n\t\tpublic static bool ImportRequestVariables(string gpcOrder, string prefix)\n\t\t{\n\t\t\tif (String.IsNullOrEmpty(gpcOrder)) return false;\n\n\t\t\tif (prefix == null || prefix == String.Empty)\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"no_prefix_security_hazard\"));\n\n\t\t\tHttpContext http_context = HttpContext.Current;\n\t\t\tif (http_context == null)\n\t\t\t\treturn false;\n\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\n\n\t\t\tPhpArray globals_array = context.GlobalVariables;\n\t\t\tPhpArray get_array, post_array, cookie_array;\n            string httprawpost_array;\n\n            AutoGlobals.InitializeGetPostVariables(context.Config, http_context.Request, out get_array, out post_array, out httprawpost_array);\n\t\t\tAutoGlobals.InitializeCookieVariables(context.Config, http_context.Request, out cookie_array);\n\n\t\t\tfor (int i = 0; i < gpcOrder.Length; i++)\n\t\t\t{\n\t\t\t\tswitch (Char.ToUpper(gpcOrder[i]))\n\t\t\t\t{\n\t\t\t\t\tcase 'G': AddGpcVariables(globals_array, get_array, prefix); break;\n\t\t\t\t\tcase 'P': AddGpcVariables(globals_array, post_array, prefix); break;\n\t\t\t\t\tcase 'C': AddGpcVariables(globals_array, cookie_array, prefix); break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate static void AddGpcVariables(PhpArray/*!*/ globals, PhpArray/*!*/ gpcArray, string prefix)\n\t\t{\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in gpcArray)\n\t\t\t{\n\t\t\t\tstring name = prefix + entry.Key.ToString();\n\t\t\t\tif (name == VariableName.GlobalsName)\n\t\t\t\t{\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"attempted_variable_override\",\r\n                            VariableName.GlobalsName));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tglobals[name] = PhpVariable.DeepCopy(entry.Value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n#endif\n\n\t\t#endregion\n\n\t\t#region print_r, var_export, var_dump\n\n\t\t/// <summary>\n\t\t/// Outputs human-readable information about a variable. \n\t\t/// </summary>\n\t\t/// <param name=\"expression\">The variable.</param>\n\t\t[ImplementsFunction(\"print_r\")]\n        public static object Print(object expression)\n\t\t{\n            return Print(expression, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Outputs or returns human-readable information about a variable. \n\t\t/// </summary>\n        /// <param name=\"expression\">The variable.</param>\n\t\t/// <param name=\"returnString\">Whether to return a string representation.</param>\n\t\t/// <returns>A string representation or <B>TRUE</B> if <paramref name=\"returnString\"/> is <B>false</B>.</returns>\n\t\t[ImplementsFunction(\"print_r\")]\n        public static object Print(object expression, bool returnString)\n\t\t{\n\t\t\tif (returnString)\n            {\n                // output to a string:\n                StringWriter output = new StringWriter();\n                PhpVariable.Print(output, expression);\n                return output.ToString();\n            }\n\t\t\telse\n\t\t\t{\n                // output to script context:\n\t\t\t\tPhpVariable.Print(ScriptContext.CurrentContext.Output, expression);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dumps variables.\n\t\t/// </summary>\n\t\t/// <param name=\"variables\">Variables to be dumped.</param>\n\t\t[ImplementsFunction(\"var_dump\")]\n\t\tpublic static void Dump(params object[] variables)\n\t\t{\n\t\t\tTextWriter output = ScriptContext.CurrentContext.Output;\n\t\t\tforeach (object variable in variables)\n\t\t\t\tPhpVariable.Dump(output, variable);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Outputs a pars-able string representation of a variable.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t[ImplementsFunction(\"var_export\")]\n\t\tpublic static string Export(object variable)\n\t\t{\n            return Export(variable, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Outputs or returns a pars-able string representation of a variable.\n\t\t/// </summary>\n\t\t/// <param name=\"variable\">The variable.</param>\n\t\t/// <param name=\"returnString\">Whether to return a string representation.</param>\n\t\t/// <returns>A string representation or a <B>null</B> reference if <paramref name=\"returnString\"/> is <B>false</B>.</returns>\n\t\t[ImplementsFunction(\"var_export\")]\n\t\tpublic static string Export(object variable, bool returnString)\n\t\t{\n            if (returnString)\n            {\n                // output to a string:\n                StringWriter output = new StringWriter();\n                PhpVariable.Export(output, variable);\n                return output.ToString();\n            }\n            else\n            {\n                // output to script context:\n                PhpVariable.Export(ScriptContext.CurrentContext.Output, variable);\n                return null;\n            }\n\t\t\t\n\t\t}\n\t\t#endregion\n\t}\n\n}\n"
  },
  {
    "path": "Source/ClassLibrary/Web.CLR.cs",
    "content": "/*\r\n\r\n\tCopyright (c) 2004006- Tomas Matousek, Jan Benda and Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\nTODO:\r\n\tChanged get_headers() to retrieve headers also from non-200 responses. (PHP 5.1.3) \r\n\tChanged get_headers() to use the default context. (PHP 5.1.3) \r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.ComponentModel;\r\nusing System.Collections;\r\nusing System.Net;\r\nusing System.Text.RegularExpressions;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#else\r\nusing System.Web;\r\nusing System.Collections.Specialized;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Web related methods (URL, HTTP, cookies, headers, connection etc.).\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static partial class Web\r\n\t{\r\n\t\t#region Helpers\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that current <see cref=\"RequestContext\"/> associted with the thread is not a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The current request context.</param>\r\n\t\t/// <returns>Whether the request context is available.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\tinternal static bool EnsureRequestContext(out RequestContext context)\r\n\t\t{\r\n\t\t\tcontext = RequestContext.CurrentContext;\r\n\t\t\tif (context == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"web_server_not_available\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that current <see cref=\"HttpContext\"/> is not a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The current context.</param>\r\n\t\t/// <returns>Whether the HTTP context is available.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\tinternal static bool EnsureHttpContext(out HttpContext context)\r\n\t\t{\r\n\t\t\tcontext = HttpContext.Current;\r\n\t\t\tif (context == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"web_server_not_available\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that current <see cref=\"HttpContext\"/> is not a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the HTTP context is available.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\tinternal static bool EnsureHttpContext()\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\treturn Web.EnsureHttpContext(out context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that headers has not been sent.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The current context.</param>\r\n\t\t/// <returns>Whether the HTTP context is available and headers has not been sent.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Headers has already been sent (Warning).</exception>\r\n\t\tinternal static bool EnsureHeadersNotSent(out HttpContext context)\r\n\t\t{\r\n\t\t\tbool result = HeadersSent();\r\n\t\t\t\r\n\t\t\tif (result) PhpException.Throw(PhpError.Warning, LibResources.GetString(\"headers_has_been_sent\"));\r\n\r\n            context = HttpContext.Current;\r\n            return !result && context != null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts together elements of HTTP status line.\r\n\t\t/// </summary>\r\n\t\tinternal static string MakeHttpStatusLine(Version version, int code, string message)\r\n\t\t{\r\n\t\t\treturn String.Format(\"HTTP/{0}.{1} {2} {3}\", version.Major, version.Minor, code, message);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region setcookie, setrawcookie\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name)\r\n\t\t{\r\n            return SetCookieInternal(name, null, 0, null, null, false, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name and value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name, string value)\r\n\t\t{\r\n            return SetCookieInternal(name, value, 0, null, null, false, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name, value and expiration timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n\t\t/// <param name=\"expire\">The time (Unix timestamp) when the cookie expiers.</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name, string value, int expire)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, null, null, false, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name, value and expiration timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n\t\t/// <param name=\"expire\">The time (Unix timestamp) when the cookie expiers.</param>\r\n\t\t/// <param name=\"path\">The virtual path on server in which context is the cookie valid.</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name, string value, int expire, string path)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, null, false, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name, value and expiration timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n\t\t/// <param name=\"expire\">The time (Unix timestamp) when the cookie expiers.</param>\r\n\t\t/// <param name=\"path\">The virtual path on server in which is the cookie valid.</param>\r\n\t\t/// <param name=\"domain\">The domain where the cookie is valid.</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name, string value, int expire, string path, string domain)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, domain, false, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a cookie with specified name, value and expiration timestamp.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the cookie to send.</param>\r\n\t\t/// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n\t\t/// <param name=\"expire\">The time (Unix timestamp) when the cookie expires.</param>\r\n\t\t/// <param name=\"path\">The virtual path on server in which is the cookie valid.</param>\r\n\t\t/// <param name=\"domain\">The domain where the cookie is valid.</param>\r\n\t\t/// <param name=\"secure\">Whether to transmit the cookie securely (that is, over HTTPS only).</param>\r\n\t\t/// <returns>Whether a cookie has been successfully send.</returns>\r\n\t\t[ImplementsFunction(\"setcookie\")]\r\n\t\tpublic static bool SetCookie(string name, string value, int expire, string path, string domain, bool secure)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, domain, secure, false, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Sends a cookie with specified name, value and expiration timestamp.\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the cookie to send.</param>\r\n        /// <param name=\"value\">The value of the cookie. The value will be <see cref=\"UrlEncode\"/>d.</param>\r\n        /// <param name=\"expire\">The time (Unix timestamp) when the cookie expires.</param>\r\n        /// <param name=\"path\">The virtual path on server in which is the cookie valid.</param>\r\n        /// <param name=\"domain\">The domain where the cookie is valid.</param>\r\n        /// <param name=\"secure\">Whether to transmit the cookie securely (that is, over HTTPS only).</param>\r\n        /// <param name=\"httponly\">When TRUE the cookie will be made accessible only through the HTTP protocol.\r\n        /// This means that the cookie won't be accessible by scripting languages, such as JavaScript.\r\n        /// This setting can effectively help to reduce identity theft through XSS attacks\r\n        /// (although it is not supported by all browsers).</param>\r\n        /// <returns>Whether a cookie has been successfully send.</returns>\r\n        [ImplementsFunction(\"setcookie\")]\r\n        public static bool SetCookie(string name, string value, int expire, string path, string domain, bool secure, bool httponly)\r\n        {\r\n            return SetCookieInternal(name, value, expire, path, domain, secure, httponly, false);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name)\r\n\t\t{\r\n            return SetCookieInternal(name, null, 0, null, null, false, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string,string)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name, string value)\r\n\t\t{\r\n            return SetCookieInternal(name, value, 0, null, null, false, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string,string,int)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name, string value, int expire)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, null, null, false, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string,string,int,string)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name, string value, int expire, string path)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, null, false, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string,string,int,string,string)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name, string value, int expire, string path, string domain)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, domain, false, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The same as <see cref=\"SetCookie(string,string,int,string,string,bool)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"setrawcookie\")]\r\n\t\tpublic static bool SetRawCookie(string name, string value, int expire, string path, string domain, bool secure)\r\n\t\t{\r\n            return SetCookieInternal(name, value, expire, path, domain, secure, false, true);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// The same as <see cref=\"SetCookie(string,string,int,string,string,bool)\"/> except for that value is not <see cref=\"UrlEncode\"/>d.\r\n        /// </summary>\r\n        [ImplementsFunction(\"setrawcookie\")]\r\n        public static bool SetRawCookie(string name, string value, int expire, string path, string domain, bool secure, bool httponly)\r\n        {\r\n            return SetCookieInternal(name, value, expire, path, domain, secure, httponly, true);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal version common for <see cref=\"SetCookie\"/> and <see cref=\"SetRawCookie\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal static bool SetCookieInternal(string name, string value, int expire, string path, string domain, bool secure, bool httponly, bool raw)\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!EnsureHeadersNotSent(out context)) return false;\r\n\r\n\t\t\tHttpCookie cookie = new HttpCookie(name, raw ? value : UrlEncode(value));\r\n\t\t\tif (expire > 0)\r\n\t\t\t{\r\n\t\t\t\tcookie.Expires = DateTimeUtils.UnixTimeStampToUtc(expire).ToLocalTime();\r\n\t\t\t}\r\n\t\t\tcookie.Path = path;\r\n\t\t\tcookie.Domain = domain;\r\n\t\t\tcookie.Secure = secure;\r\n            cookie.HttpOnly = httponly;\r\n\r\n\t\t\tcontext.Response.Cookies.Add(cookie);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region header, header_remove\r\n\r\n        /// <summary>\r\n\t\t/// Adds a specified header to the current response.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The header to be added.</param>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Headers has already been sent (Warning).</exception>\r\n\t\t[ImplementsFunction(\"header\")]\r\n\t\tpublic static void Header(string str)\r\n\t\t{\r\n\t\t\tHeader(str, false, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a specified header to the current response.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The header to be added.</param>\r\n\t\t/// <param name=\"replace\">Whether the header should be replaced if there is already one with the same name (ignored since 5.1.2)</param>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Headers has already been sent (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"replace\"/> is <B>true</B> (Warning).</exception>\r\n\t\t[ImplementsFunction(\"header\")]\r\n\t\tpublic static void Header(string str, bool replace)\r\n\t\t{\r\n\t\t\tHeader(str, replace, 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a specified header to the current response.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The header to be added.</param>\r\n\t\t/// <param name=\"replace\">Whether the header should be replaced if there is already one with the same name. \r\n\t\t/// Replacement not supported (ignored since 5.1.2)</param>\r\n\t\t/// <param name=\"httpResponseCode\">Sets the response status code.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// If <paramref name=\"httpResponseCode\"/> is positive than the response status code is set to this value.\r\n\t\t/// Otherwise, if <paramref name=\"str\"/> has format \"{spaces}HTTP/{no spaces} {response code}{whatever}\" \r\n\t\t/// then the response code is set to the {responce code} and the method returns.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// If <paramref name=\"str\"/> has format \"{name}:{value}\" then the respective header is set (both name and value \r\n\t\t/// are trimmed) and an appropriate action associated with this header by ASP.NET is performed.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Not:  Since PHP 4.4.2 and PHP 5.1.2 this function prevents more than one header to be sent at once as \r\n\t\t/// a protection against header injection attacks (which means that header is always replaced).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Headers has already been sent (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"replace\"/> is <B>true</B> (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"str\"/> has invalid format (Warning).</exception>\r\n\t\t[ImplementsFunction(\"header\")]\r\n\t\tpublic static void Header(string str, bool replace, int httpResponseCode)\r\n\t\t{\r\n\t\t\tif (str == null) return;\r\n\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!EnsureHeadersNotSent(out context)) return;\r\n\r\n\t\t\t// response code is not forced => checks for initial HTTP/ and the status code in \"str\":  \r\n\t\t\tif (httpResponseCode <= 0)\r\n\t\t\t{\r\n\t\t\t\tMatch m = Regex.Match(str, \"[ ]*HTTP/[^ ]* ([0-9]{1,3}).*\", RegexOptions.IgnoreCase);\r\n\t\t\t\tif (m.Success)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontext.Response.StatusCode = Int32.Parse(m.Groups[1].Value);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// sets response status code:\r\n\t\t\t\tcontext.Response.StatusCode = httpResponseCode;\r\n\t\t\t}\r\n\r\n\t\t\t// adds a header if it has a correct form (i.e. \"name: value\"):\r\n\t\t\t// store header in collection associated with current context - headers can be\r\n\t\t\t// replaced and are flushed automatically (in BeforeHeadersSent event :-)) on IIS Classic Mode.\r\n\t\t\tHttpHeaders headers = ScriptContext.CurrentContext.Headers;\r\n\t\t\tint i = str.IndexOf(':');\r\n\t\t\tif (i > 0)\r\n\t\t\t{\r\n\t\t\t\tstring name = str.Substring(0, i).Trim();\r\n\t\t\t\tif (!string.IsNullOrEmpty(name))\r\n\t\t\t\t\theaders[name] = str.Substring(i + 1).Trim();\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// RemoveRemoves an HTTP header previously set using header().\r\n        /// </summary>\r\n        [ImplementsFunction(\"header_remove\")]\r\n        public static void HeaderRemove()\r\n        {\r\n            // remove all headers\r\n            HeaderRemove(null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes an HTTP header previously set using header().\r\n        /// </summary>\r\n        /// <param name=\"name\">The header name to be removed.\r\n        /// Note: This parameter is case-insensitive. \r\n        /// </param>\r\n        /// <remarks>Caution: This function will remove all headers set by PHP, including cookies, session and the X-Powered-By headers.</remarks>\r\n        [ImplementsFunction(\"header_remove\")]\r\n        public static void HeaderRemove(string name)\r\n        {\r\n            if (name == null)\r\n                ScriptContext.CurrentContext.Headers.Clear();\r\n            else\r\n                ScriptContext.CurrentContext.Headers[name] = null;\r\n            //PhpException.FunctionNotSupported();    // see remarks, remove specified header (can be cookie, content-type, content-encoding or any other header)\r\n\r\n            // TODO: cookies, session\r\n        }\r\n\r\n        /// <summary>\r\n        /// http_response_code will get the current status code.\r\n        /// </summary>\r\n        /// <returns>Current status code</returns>\r\n        [ImplementsFunction(\"http_response_code\")]\r\n        public static int HttpResponseCode()\r\n        {\r\n            HttpContext context;\r\n            if (EnsureHttpContext(out context))\r\n            {\r\n                return context.Response.StatusCode;\r\n            }\r\n\r\n            return -1;  // FALSE ?\r\n        }\r\n\r\n        /// <summary>\r\n        /// http_response_code will set the current status code.\r\n        /// </summary>\r\n        /// <param name=\"status\">New status code.</param>\r\n        /// <returns>Current status code.</returns>\r\n        [ImplementsFunction(\"http_response_code\")]\r\n        public static int HttpResponseCode(int status)\r\n        {\r\n            HttpContext context;\r\n            if (EnsureHttpContext(out context))\r\n            {\r\n                var oldstatus = context.Response.StatusCode;\r\n                context.Response.StatusCode = status;\r\n\r\n                return oldstatus;\r\n            }\r\n\r\n            return -1;  // FALSE ?\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_headers\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fetches headers sent by the server in response to a HTTP request.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"url\">The URL where to send a request (e.g. http://www.mff.cuni.cz). </param>\r\n\t\t/// <returns>The same as <see cref=\"GetHeaders(string,bool)\"/> where <c>format</c> is <B>false</B>.</returns>\r\n\t\t[ImplementsFunction(\"get_headers\")]\r\n\t\tpublic static PhpArray GetHeaders(string url)\r\n\t\t{\r\n\t\t\treturn GetHeaders(url, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fetches headers sent by the server in response to a HTTP request.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"url\">The URL where to send a request (e.g. http://www.mff.cuni.cz). </param>\r\n\t\t/// <param name=\"format\">Whether to parse a response and set the result's keys to header names.</param>\r\n\t\t/// <returns>\r\n\t\t/// Either an array with integer keys indexed from 0 and values set to raw headers\r\n\t\t/// (<paramref name=\"format\"/> is <B>false</B>). Or an array which each key is a name of a header and \r\n\t\t/// a value is either an appropriate header's value or an array of values if the header has more than one \r\n\t\t/// value. In both cases the first item (always with key 0) will be the HTTP response status line.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"get_headers\")]\r\n\t\tpublic static PhpArray GetHeaders(string url, bool format)\r\n\t\t{\r\n\t\t\tHttpWebRequest request;\r\n\t\t\tHttpWebResponse response;\r\n\r\n\t\t\t// creates a HTTP request:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\trequest = (HttpWebRequest)WebRequest.Create(url);\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_url\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(url)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// fetches response:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresponse = (HttpWebResponse)request.GetResponse();\r\n\t\t\t}\r\n\t\t\tcatch (WebException e)\r\n\t\t\t{\r\n\t\t\t\tresponse = (HttpWebResponse)e.Response;\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"http_request_failed\",\r\n\t\t\t\t\t(response != null) ? String.Format(\"({0}) {1}\", (int)response.StatusCode, response.StatusDescription) : null));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"host_not_responding\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tWebHeaderCollection headers = response.Headers;\r\n\t\t\tPhpArray result = (format) ? new PhpArray(1, headers.Count) : new PhpArray(headers.Count + 1, 0);\r\n\r\n\t\t\t// adds the first entry (0 => HTTP status line):\r\n\t\t\tresult.Add(0, MakeHttpStatusLine(response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription));\r\n\r\n\t\t\t// creates an array {<header> => <value>}:\r\n\t\t\tif (format)\r\n\t\t\t{\r\n\t\t\t\tforeach (string header in headers)\r\n\t\t\t\t{\r\n\t\t\t\t\t// gets all values with specified header:\r\n\t\t\t\t\tstring[] values = headers.GetValues(header);\r\n\r\n\t\t\t\t\t// puts values into an subarray if header has more than one value:\r\n\t\t\t\t\tif (values.Length > 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpArray values_array = new PhpArray(values.Length, 0);\r\n\r\n\t\t\t\t\t\t// fills subarray with values:\r\n\t\t\t\t\t\tfor (int i = 0; i < values.Length; i++)\r\n\t\t\t\t\t\t\tvalues_array.Add(values[i]);\r\n\r\n\t\t\t\t\t\tresult.Add(header, values_array);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult.Add(header, values[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t// create an array {<index> => <header>: <value>}:\r\n\t\t\t{\r\n\t\t\t\tforeach (string header in headers)\r\n\t\t\t\t\tresult.Add(String.Concat(header, \": \", headers[header]));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region headers_sent, headers_list\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether all headers has been sent.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether headers has already been sent.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t[ImplementsFunction(\"headers_sent\")]\r\n\t\tpublic static bool HeadersSent()\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!EnsureHttpContext(out context)) return false;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// a trick (StatusCodes's setter checks whether or not headers has been sent):\r\n\t\t\t\tcontext.Response.StatusCode = context.Response.StatusCode;\r\n\t\t\t}\r\n\t\t\tcatch (HttpException)\r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether all headers has been sent.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"file\">The name of a source file which has sent headers or an empty string \r\n\t\t/// headers has not been sent yet. Not supported.</param>\r\n\t\t/// <returns>Whether headers has already been sent.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Function is not supported in this version (Warning).</exception>\r\n\t\t[ImplementsFunction(\"headers_sent\")]\r\n\t\tpublic static bool HeadersSent(out string file)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\tfile = String.Empty;\r\n\t\t\treturn HeadersSent();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether all headers has been sent.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"file\">The name of a source file which has sent headers or an empty string  if\r\n\t\t/// headers has not been sent yet. Not supported.</param>\r\n\t\t/// <param name=\"line\">The line in a source file where headers has been sent or 0 if \r\n\t\t/// headers has not been sent yet. Not supported.</param>\r\n\t\t/// <returns>Whether headers has already been sent.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Web server variables are not available (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Function is not supported in this version (Warning).</exception>\r\n\t\t[ImplementsFunction(\"headers_sent\")]\r\n\t\tpublic static bool HeadersSent(out string file, out int line)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\tfile = String.Empty;\r\n\t\t\tline = 0;\r\n\t\t\treturn HeadersSent();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// headers_list() will return a list of headers to be sent to the browser / client.\r\n        /// To determine whether or not these headers have been sent yet, use headers_sent(). \r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"headers_list\")]\r\n\t\tpublic static PhpArray HeadersList()\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n            if (!EnsureHttpContext(out context))\r\n                return null;\r\n\r\n            var list = new PhpArray();\r\n            \r\n            foreach (var x in ScriptContext.CurrentContext.Headers)\r\n                list.Add(x.Key + \": \" + x.Value);\r\n\r\n            /*foreach (var x in context.Response.Cookies.AllKeys)\r\n            {\r\n                var cookie = context.Response.Cookies[x];\r\n                list.Add(\"set-cookie: \" + cookie.Name + \"=\" + cookie.Value);    // TODO: full cookie spec\r\n            }*/\r\n\r\n            // TODO: cookies, session\r\n\r\n            return list;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region http_build_query, get_browser\r\n\r\n        /// <summary>\r\n        /// Generates a URL-encoded query string from the associative (or indexed) array provided. \r\n        /// </summary>\r\n        /// <param name=\"formData\">\r\n        /// The array form may be a simple one-dimensional structure, or an array of arrays\r\n        /// (who in turn may contain other arrays). \r\n        /// </param>\r\n        /// <returns>Returns a URL-encoded string.</returns>\r\n\t\t[ImplementsFunction(\"http_build_query\")]\r\n\t\tpublic static string HttpBuildQuery(PhpArray formData)\r\n\t\t{\r\n            return PHP.Library.Web.HttpBuildQuery(formData, null, \"&\", null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Generates a URL-encoded query string from the associative (or indexed) array provided. \r\n        /// </summary>\r\n        /// <param name=\"formData\">\r\n        /// The array form may be a simple one-dimensional structure, or an array of arrays\r\n        /// (who in turn may contain other arrays). \r\n        /// </param>\r\n        /// <param name=\"numericPrefix\">\r\n        /// If numeric indices are used in the base array and this parameter is provided,\r\n        /// it will be prepended to the numeric index for elements in the base array only.\r\n        /// This is meant to allow for legal variable names when the data is decoded by PHP\r\n        /// or another CGI application later on.\r\n        /// </param>\r\n        /// <returns>Returns a URL-encoded string.</returns>\r\n\t\t[ImplementsFunction(\"http_build_query\")]\r\n\t\tpublic static string HttpBuildQuery(PhpArray formData, string numericPrefix)\r\n\t\t{\r\n            return PHP.Library.Web.HttpBuildQuery(formData, numericPrefix, \"&\", null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Generates a URL-encoded query string from the associative (or indexed) array provided. \r\n        /// </summary>\r\n        /// <param name=\"formData\">\r\n        /// The array form may be a simple one-dimensional structure, or an array of arrays\r\n        /// (who in turn may contain other arrays). \r\n        /// </param>\r\n        /// <param name=\"numericPrefix\">\r\n        /// If numeric indices are used in the base array and this parameter is provided,\r\n        /// it will be prepended to the numeric index for elements in the base array only.\r\n        /// This is meant to allow for legal variable names when the data is decoded by PHP\r\n        /// or another CGI application later on.\r\n        /// </param>\r\n        /// <param name=\"argSeparator\">\r\n        /// arg_separator.output is used to separate arguments, unless this parameter is\r\n        /// specified, and is then used. \r\n        /// </param>\r\n        /// <returns>Returns a URL-encoded string </returns>\r\n\t\t[ImplementsFunction(\"http_build_query\")]\r\n\t\tpublic static string HttpBuildQuery(PhpArray formData, string numericPrefix, string argSeparator)\r\n\t\t{\r\n            return HttpBuildQuery(formData, numericPrefix, argSeparator, null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Generates a URL-encoded query string from the associative (or indexed) array provided. \r\n        /// </summary>\r\n        /// <param name=\"formData\">\r\n        /// The array form may be a simple one-dimensional structure, or an array of arrays\r\n        /// (who in turn may contain other arrays). \r\n        /// </param>\r\n        /// <param name=\"numericPrefix\">\r\n        /// If numeric indices are used in the base array and this parameter is provided,\r\n        /// it will be prepended to the numeric index for elements in the base array only.\r\n        /// This is meant to allow for legal variable names when the data is decoded by PHP\r\n        /// or another CGI application later on.\r\n        /// </param>\r\n        /// <param name=\"argSeparator\">\r\n        /// arg_separator.output is used to separate arguments, unless this parameter is\r\n        /// specified, and is then used. \r\n        /// </param>\r\n        /// <param name=\"indexerPrefix\">Default is null, otherwise it is a name of the array to be used instead\r\n        /// of regular parameter name. Then the parameter name is used as an index.\r\n        /// \r\n        /// This argument must be URL encoded.</param>\r\n        /// <returns>Returns a URL-encoded string </returns>\r\n        private static string HttpBuildQuery(PhpArray formData, string numericPrefix, string argSeparator, string indexerPrefix)\r\n        {\r\n            StringBuilder str_builder = new StringBuilder(64);  // statistically the length of the result\r\n            StringWriter result = new StringWriter(str_builder);\r\n\r\n            bool isNotFirst = false;\r\n\r\n            foreach (KeyValuePair<IntStringKey, object> item in formData)\r\n            {\r\n                // the query parameter name (key name)\r\n                // the parameter name is URL encoded\r\n                string keyName = null;\r\n\r\n                if (item.Key.IsInteger)\r\n                    keyName = UrlEncode(numericPrefix) + item.Key.Integer.ToString();\r\n                else\r\n                    keyName = UrlEncode(item.Key.String);\r\n\r\n                if (indexerPrefix != null)\r\n                {\r\n                    keyName = indexerPrefix + \"%5B\" + keyName + \"%5D\";  // == prefix[key] (url encoded brackets)\r\n                }\r\n                \r\n                // write the query element\r\n\r\n                PhpArray valueArray = item.Value as PhpArray;\r\n\r\n                if (valueArray != null)\r\n                {\r\n                    // value is an array, emit query recursively, use current keyName as an array variable name\r\n\r\n                    string queryStr = HttpBuildQuery(valueArray, null, argSeparator, keyName);  // emit the query recursively\r\n\r\n                    if (queryStr != null && queryStr.Length > 0)\r\n                    {\r\n                        if (isNotFirst)\r\n                            result.Write(argSeparator);\r\n\r\n                        result.Write(queryStr);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // simple value, emit query in a form of (key=value), URL encoded !\r\n\r\n                    if (isNotFirst)\r\n                        result.Write(argSeparator);\r\n\r\n                    if (item.Value != null)\r\n                    {\r\n                        result.Write(keyName + \"=\" + UrlEncode(PHP.Core.Convert.ObjectToString(item.Value)));    // == \"keyName=keyValue\"\r\n                    }\r\n                    else\r\n                    {\r\n                        result.Write(keyName + \"=\");    // == \"keyName=\"\r\n                    }\r\n                }\r\n\r\n                // separator will be used in next loop\r\n                isNotFirst = true;\r\n            }\r\n\r\n            result.Flush();\r\n\r\n            return str_builder.ToString();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini  file.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///  The information is returned in an object or an array which will contain various data elements representing,\r\n        ///  for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE  values for features\r\n        ///  such as frames, JavaScript, and cookies; and so forth.\r\n        ///  The cookies value simply means that the browser itself is capable of accepting cookies and does not mean\r\n        ///  the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is\r\n        ///  to set one with setcookie(), reload, and check for the value. \r\n        /// </returns>\r\n        [ImplementsFunction(\"get_browser\")]\r\n        public static object GetBrowser()\r\n\t\t{\r\n            return GetBrowser(null, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini  file.\r\n        /// </summary>\r\n        /// <param name=\"user_agent\">\r\n        /// 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.\r\n        /// You can bypass this parameter with a NULL value.\r\n        /// </param>\r\n        /// <returns>\r\n        ///  The information is returned in an object or an array which will contain various data elements representing,\r\n        ///  for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE  values for features\r\n        ///  such as frames, JavaScript, and cookies; and so forth.\r\n        ///  The cookies value simply means that the browser itself is capable of accepting cookies and does not mean\r\n        ///  the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is\r\n        ///  to set one with setcookie(), reload, and check for the value. \r\n        /// </returns>\r\n        [ImplementsFunction(\"get_browser\")]\r\n        public static object GetBrowser(string user_agent)\r\n\t\t{\r\n            return GetBrowser(user_agent, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Attempts to determine the capabilities of the user's browser, by looking up the browser's information in the browscap.ini  file.\r\n        /// </summary>\r\n        /// <param name=\"user_agent\">\r\n        /// 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.\r\n        /// You can bypass this parameter with a NULL value.\r\n        /// </param>\r\n        /// <param name=\"return_array\">If set to TRUE, this function will return an array instead of an object . </param>\r\n        /// <returns>\r\n        ///  The information is returned in an object or an array which will contain various data elements representing,\r\n        ///  for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE  values for features\r\n        ///  such as frames, JavaScript, and cookies; and so forth.\r\n        ///  The cookies value simply means that the browser itself is capable of accepting cookies and does not mean\r\n        ///  the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is\r\n        ///  to set one with setcookie(), reload, and check for the value. \r\n        /// </returns>\r\n        [ImplementsFunction(\"get_browser\")]\r\n        public static object GetBrowser(string user_agent, bool return_array /*= false*/)\r\n        {\r\n            HttpBrowserCapabilities browserCaps = GetBrowserCaps(user_agent);    // this is container for information given from Request and browscap.ini, which is placed in Win systems by default\r\n\r\n            if (browserCaps == null)\r\n                return null;\r\n\r\n            // some special fields\r\n            /*if (browserCaps.Browsers != null)\r\n                for (int ib = 0; ib < browserCaps.Browsers.Count; ++ib)\r\n                    if (browserCaps.Browsers[ib].ToString().ToLower() == browserCaps.Browser.ToLower())\r\n                    {\r\n                        if (ib > 0) caps[\"parent\"] = browserCaps.Browsers[ib - 1].ToString();\r\n                        break;\r\n                    }*/\r\n\r\n            // create an array of browser capabilities:\r\n            var caps = new PhpArray(browserCaps.Capabilities.Count);\r\n\r\n            foreach (var x in browserCaps.Capabilities.Keys)\r\n                caps.Add(x, browserCaps.Capabilities[x]);\r\n\r\n            if (return_array)\r\n                return caps;\r\n\r\n            // create an object of browser capabilities:\r\n            return new stdClass()\r\n            {\r\n                RuntimeFields = caps\r\n            };\r\n        }\r\n\r\n        private static HttpBrowserCapabilities GetBrowserCaps(string user_agent)\r\n        {\r\n            if (String.IsNullOrEmpty(user_agent))\r\n            {\r\n                HttpContext context;\r\n                if (!EnsureHttpContext(out context))\r\n                    return null;\r\n\r\n                return context.Request.Browser;\r\n            }\r\n            else\r\n            {\r\n                NameValueCollection headers = new NameValueCollection();\r\n                headers[\"User-Agent\"] = user_agent;\r\n\r\n                HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities();\r\n                Hashtable hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase);\r\n                hashtable[string.Empty] = user_agent; // The actual method uses client target   \r\n                browserCaps.Capabilities = hashtable;\r\n\r\n                //var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory();\r\n                //capsFactory.ConfigureBrowserCapabilities(headers, browserCaps);\r\n                //capsFactory.ConfigureCustomCapabilities(headers, browserCaps);\r\n\r\n                // use System.Web.Configuration.BrowserCapabilitiesFactory dynamically since Mono does not have this defined\r\n                // Following code emits DynamicMethod delegate lazily and performs code commented above.\r\n                \r\n                // Note: absolutely no performance overhead.\r\n                // This should be removed when the type will be defined on Mono.\r\n                var configureCapsMethod = ConfigureCapsMethod;\r\n                if (configureCapsMethod != null)\r\n                    configureCapsMethod(headers, browserCaps);\r\n\r\n                return browserCaps;\r\n            }\r\n        }\r\n\r\n        #region System.Web.Configuration.BrowserCapabilitiesFactory\r\n\r\n        /// <summary>\r\n        /// Get DynamicMethod that configures capabilities on systems, where System.Web.Configuration.BrowserCapabilitiesFactory is defined.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// The method performs following code:\r\n        /// {\r\n        ///     var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory();\r\n        ///     capsFactory.ConfigureBrowserCapabilities(headers, browserCaps);\r\n        ///     capsFactory.ConfigureCustomCapabilities(headers, browserCaps);\r\n        /// }\r\n        /// </remarks>\r\n        private static Action<NameValueCollection, HttpBrowserCapabilities> ConfigureCapsMethod\r\n        {\r\n            get\r\n            {\r\n                if (configureCapsMethod == null && configureCapsMethodAvailable)\r\n                    lock (configureCapsLocker)  // double checked lock\r\n                        if (configureCapsMethod == null && configureCapsMethodAvailable)\r\n                        {\r\n                            // find the type dynamically\r\n                            Type browserCapabilitiesFactoryType = null;\r\n                            foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())\r\n                                if ((browserCapabilitiesFactoryType = ass.GetType(\"System.Web.Configuration.BrowserCapabilitiesFactory\")) != null)\r\n                                    break;\r\n\r\n                            //Type browserCapabilitiesFactoryType = Type.GetType(\"System.Web.Configuration.BrowserCapabilitiesFactory\", false);\r\n                            if (browserCapabilitiesFactoryType != null)\r\n                                configureCapsMethod = BuildConfigureCapsMethod(browserCapabilitiesFactoryType);\r\n                            else\r\n                                configureCapsMethodAvailable = false;   // TODO: declare another Type with required methods and BuildConfigureCapsMethod() with this Type\r\n                        }\r\n                    \r\n                return configureCapsMethod;\r\n            }\r\n        }\r\n        private static Action<NameValueCollection, HttpBrowserCapabilities> configureCapsMethod = null;\r\n        private static bool configureCapsMethodAvailable = true;\r\n        private static object configureCapsLocker = new object();\r\n\r\n        /// <summary>\r\n        /// Create DynamicMethod that configures capabilities using System.Web.Configuration.BrowserCapabilitiesFactory (or similar) type.\r\n        /// </summary>\r\n        /// <param name=\"BrowserCapabilitiesFactoryType\">Type with ConfigureBrowserCapabilities and ConfigureCustomCapabilities methods.</param>\r\n        /// <remarks>\r\n        /// Generated method performs following code:\r\n        /// {\r\n        ///     var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory();\r\n        ///     capsFactory.ConfigureBrowserCapabilities(headers, browserCaps);\r\n        ///     capsFactory.ConfigureCustomCapabilities(headers, browserCaps);\r\n        /// }\r\n        /// </remarks>\r\n        private static Action<NameValueCollection, HttpBrowserCapabilities> BuildConfigureCapsMethod(Type/*!*/BrowserCapabilitiesFactoryType)\r\n        {\r\n            Debug.Assert(BrowserCapabilitiesFactoryType != null);\r\n\r\n            var method_ctor = BrowserCapabilitiesFactoryType.GetConstructor(Type.EmptyTypes);\r\n            var method_ConfigureBrowserCapabilities = BrowserCapabilitiesFactoryType.GetMethod(\"ConfigureBrowserCapabilities\");\r\n            var method_ConfigureCustomCapabilities = BrowserCapabilitiesFactoryType.GetMethod(\"ConfigureCustomCapabilities\");\r\n\r\n            if (method_ctor == null) throw new InvalidOperationException(string.Format(\"{0} does not implement .ctor.\", BrowserCapabilitiesFactoryType.ToString()));\r\n            if (method_ConfigureBrowserCapabilities == null) throw new InvalidOperationException(string.Format(\"{0} does not implement {1}.\", BrowserCapabilitiesFactoryType.ToString(), \"ConfigureBrowserCapabilities\"));\r\n            if (method_ConfigureCustomCapabilities == null) throw new InvalidOperationException(string.Format(\"{0} does not implement {1}.\", BrowserCapabilitiesFactoryType.ToString(), \"ConfigureCustomCapabilities\"));\r\n\r\n            var method = new DynamicMethod(\"<dynamic>.BrowserCapabilitiesFactory\", typeof(void), new Type[] { typeof(NameValueCollection), typeof(HttpBrowserCapabilities) });\r\n            var il = new PHP.Core.Emit.ILEmitter(method);\r\n\r\n            method.DefineParameter(1, System.Reflection.ParameterAttributes.None, \"headers\");\r\n            method.DefineParameter(2, System.Reflection.ParameterAttributes.None, \"browserCaps\");\r\n\r\n            // var capsFactory = new System.Web.Configuration.BrowserCapabilitiesFactory();\r\n            var loc_factory = il.DeclareLocal(BrowserCapabilitiesFactoryType);\r\n            il.Emit(OpCodes.Newobj, method_ctor);\r\n            il.Stloc(loc_factory);\r\n\r\n            // capsFactory.ConfigureBrowserCapabilities(headers, browserCaps);\r\n            il.Ldloc(loc_factory);\r\n            il.Ldarg(0);\r\n            il.Ldarg(1);\r\n            il.Emit(OpCodes.Callvirt, method_ConfigureBrowserCapabilities);\r\n\r\n            // capsFactory.ConfigureCustomCapabilities(headers, browserCaps);\r\n            il.Ldloc(loc_factory);\r\n            il.Ldarg(0);\r\n            il.Ldarg(1);\r\n            il.Emit(OpCodes.Callvirt, method_ConfigureCustomCapabilities);\r\n\r\n            // ret\r\n            il.Emit(OpCodes.Ret);\r\n\r\n            // done\r\n            return (Action<NameValueCollection, HttpBrowserCapabilities>)method.CreateDelegate(typeof(Action<NameValueCollection, HttpBrowserCapabilities>));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region connection_aborted, connection_timeout, connection_status\r\n\r\n        /// <summary>\r\n\t\t/// Checks whether a client is still connected.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether a client is still connected.</returns>\r\n\t\t[ImplementsFunction(\"connection_aborted\")]\r\n\t\tpublic static bool IsClientDisconnected()\r\n\t\t{\r\n\t\t\tHttpContext context;\r\n\t\t\tif (!EnsureHttpContext(out context)) return false;\r\n\r\n\t\t\t// we needn't to check for abortion because the abortion implies disconnection:\r\n\t\t\treturn !context.Response.IsClientConnected;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a client is still connected.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether a client is still connected.</returns>\r\n\t\t[ImplementsFunction(\"connection_timeout\")]\r\n\t\tpublic static bool ConnectionTimeout()\r\n\t\t{\r\n\t\t\treturn ScriptContext.CurrentContext.ExecutionTimedOut;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a connection status. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The connection status bitfield.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Works also out of HTTP context (i.e. in console and windows apps). \r\n\t\t/// In that cases, only <see cref=\"ConnectionStatus.Timeout\"/> flag is relevant.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"connection_status\")]\r\n\t\tpublic static int GetConnectionStatus()\r\n\t\t{\r\n\t\t\tConnectionStatus result = ConnectionStatus.Normal;\r\n\r\n\t\t\tif (ScriptContext.CurrentContext.ExecutionTimedOut)\r\n\t\t\t\tresult |= ConnectionStatus.Timeout;\r\n\r\n\t\t\tHttpContext context = HttpContext.Current;\r\n\t\t\tif (context != null && !context.Response.IsClientConnected)\r\n\t\t\t\tresult |= ConnectionStatus.Aborted;\r\n\r\n\t\t\treturn (int)result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region is_uploaded_file, move_uploaded_file\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether the file was uploaded via HTTP POST.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"is_uploaded_file\")]\r\n\t\tpublic static bool IsUploadedFile(string path)\r\n\t\t{\r\n\t\t\tif (path == null) return false;\r\n\t\t\treturn RequestContext.CurrentContext.IsTemporaryFile(path);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves an uploaded file to a new location.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\"></param>\r\n\t\t/// <param name=\"destination\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[ImplementsFunction(\"move_uploaded_file\")]\r\n\t\tpublic static bool MoveUploadedFile(string path, string destination)\r\n\t\t{\r\n\t\t\tRequestContext context = RequestContext.CurrentContext;\r\n\t\t\tif (path == null || !context.IsTemporaryFile(path)) return false;\r\n\r\n\t\t\tif (PhpFile.Exists(destination))\r\n\t\t\t\tPhpFile.Delete(destination);\r\n\r\n\t\t\tif (!PhpFile.Rename(path, destination))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tcontext.RemoveTemporaryFile(path);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/ClassLibrary/Web.cs",
    "content": "/*\r\n\r\n\tCopyright (c) 2004006- Tomas Matousek, Jan Benda and Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\nTODO:\r\n\tChanged get_headers() to retrieve headers also from non-200 responses. (PHP 5.1.3) \r\n\tChanged get_headers() to use the default context. (PHP 5.1.3) \r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.ComponentModel;\r\nusing System.Collections;\r\nusing System.Net;\r\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace PHP.Library\r\n{\r\n\t/// <summary>\r\n\t/// Web related methods (URL, HTTP, cookies, headers, connection etc.).\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic static partial class Web\r\n\t{\r\n\t\tpublic enum UrlComponent\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"PHP_URL_SCHEME\")]\r\n\t\t\tScheme = 0,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_HOST\")]\r\n\t\t\tHost = 1,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_PORT\")]\r\n\t\t\tPort = 2,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_USER\")]\r\n\t\t\tUser = 3,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_PASS\")]\r\n\t\t\tPassword = 4,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_PATH\")]\r\n\t\t\tPath = 5,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_QUERY\")]\r\n\t\t\tQuery = 6,\r\n\t\t\t[ImplementsConstant(\"PHP_URL_FRAGMENT\")]\r\n\t\t\tFragment = 7\r\n\t\t}\r\n\r\n\t\t#region Enumerations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connection status.\r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tpublic enum ConnectionStatus\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"CONNECTION_NORMAL\")]\r\n\t\t\tNormal = 0,\r\n\t\t\t[ImplementsConstant(\"CONNECTION_ABORTED\")]\r\n\t\t\tAborted = 1,\r\n\t\t\t[ImplementsConstant(\"CONNECTION_TIMEOUT\")]\r\n\t\t\tTimeout = 2\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region base64_decode, base64_encode\r\n\r\n\t\t[ImplementsFunction(\"base64_decode\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpBytes DecodeBase64(string encoded_data)\r\n\t\t{\r\n            return DecodeBase64(encoded_data, false);\r\n\t\t}\r\n\r\n        [ImplementsFunction(\"base64_decode\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n        [return: CastToFalse]\r\n        public static PhpBytes DecodeBase64(string encoded_data, bool strict /* = false*/)\r\n        {\r\n            if (encoded_data == null) return null;\r\n            try\r\n            {\r\n                return new PhpBytes(System.Convert.FromBase64String(encoded_data));\r\n            }\r\n            catch (FormatException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_base64_encoded_data\"));\r\n                return null;\r\n            }\r\n        }\r\n\r\n\t\t[ImplementsFunction(\"base64_encode\"), EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static string EncodeBase64(PhpBytes data_to_encode)\r\n\t\t{\r\n\t\t\tif (data_to_encode == null) return null;\r\n            return System.Convert.ToBase64String(data_to_encode.ReadonlyData);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region parse_url, parse_str\r\n\r\n        #region Helper parse_url() methods\r\n\r\n        internal static class ParseUrlMethods\r\n        {\r\n            /// <summary>\r\n            /// Regular expression for parsing URLs (via parse_url())\r\n            /// </summary>\r\n            public static Regex ParseUrlRegEx\r\n            {\r\n                get\r\n                {\r\n                    return\r\n                        (_parseUrlRegEx) ??\r\n                        (_parseUrlRegEx = new Regex(@\"^((?<scheme>[^:]+):(?<scheme_separator>/{0,2}))?((?<user>[^:@/?#\\[\\]]*)(:(?<pass>[^@/?#\\[\\]]*))?@)?(?<host>([^/:?#\\[\\]]+)|(\\[[^\\[\\]]+\\]))?(:(?<port>[0-9]*))?(?<path>/[^\\?#]*)?(\\?(?<query>[^#]+)?)?(#(?<fragment>.*))?$\", \r\n#if !SILVERLIGHT\r\n                            RegexOptions.Compiled |\r\n#endif\r\n                            RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase\r\n\r\n                            ));\r\n                }\r\n            }\r\n            private static Regex _parseUrlRegEx = null;\r\n\r\n            /// <summary>\r\n            /// Determines matched group value or null if the group was not matched.\r\n            /// </summary>\r\n            /// <param name=\"g\"></param>\r\n            /// <returns></returns>\r\n            public static string MatchedString(Group/*!*/g)\r\n            {\r\n                Debug.Assert(g != null);\r\n\r\n                return (g.Success && g.Value.Length > 0) ? g.Value : null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Replace all the occurrences of control characters (see iscntrl() C++ function) with the specified character.\r\n            /// </summary>\r\n            /// <param name=\"str\"></param>\r\n            /// <param name=\"newChar\"></param>\r\n            /// <returns></returns>\r\n            public static string ReplaceControlCharset(string/*!*/str, char newChar)\r\n            {\r\n                Debug.Assert(str != null);\r\n\r\n                StringBuilder sb = new StringBuilder(str.Length);\r\n                foreach (char c in str)\r\n                {\r\n                    sb.Append(Char.IsControl(c) ? newChar : c);\r\n                }\r\n\r\n                return sb.ToString();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Parses an URL and returns its components.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"url\">\r\n\t\t/// The URL string with format \r\n        /// <c>{scheme}://{user}:{pass}@{host}:{port}{path}?{query}#{fragment}</c>\r\n\t\t/// or <c>{schema}:{path}?{query}#{fragment}</c>.\r\n\t\t/// </param>\r\n\t\t/// <returns>\r\n\t\t/// An array which keys are names of components (stated in URL string format in curly braces, e.g.\"schema\")\r\n\t\t/// and values are components themselves.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"parse_url\")]\r\n\t\tpublic static PhpArray ParseUrl(string url)\r\n\t\t{\r\n            Match match = ParseUrlMethods.ParseUrlRegEx.Match(url ?? string.Empty);\r\n\r\n            if (match == null || !match.Success || match.Groups[\"port\"].Value.Length > 5)   // not matching or port number too long\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_url\", FileSystemUtils.StripPassword(url)));\r\n                return null;\r\n            }\r\n\r\n            string scheme = ParseUrlMethods.MatchedString(match.Groups[\"scheme\"]);\r\n            string user = ParseUrlMethods.MatchedString(match.Groups[\"user\"]);\r\n            string pass = ParseUrlMethods.MatchedString(match.Groups[\"pass\"]);\r\n            string host = ParseUrlMethods.MatchedString(match.Groups[\"host\"]);\r\n            string port = ParseUrlMethods.MatchedString(match.Groups[\"port\"]);\r\n            string path = ParseUrlMethods.MatchedString(match.Groups[\"path\"]);\r\n            string query = ParseUrlMethods.MatchedString(match.Groups[\"query\"]);\r\n            string fragment = ParseUrlMethods.MatchedString(match.Groups[\"fragment\"]);\r\n\r\n            string scheme_separator = match.Groups[\"scheme_separator\"].Value;   // cannot be null\r\n\r\n            int tmp;\r\n\r\n            // some exceptions\r\n            if (host != null && scheme != null && scheme_separator.Length == 0 && int.TryParse(host, out tmp))\r\n            {   // domain:port/path\r\n                port = host;\r\n                host = scheme;\r\n                scheme = null;\r\n            }\r\n            else if (scheme_separator.Length != 2 && host != null)\r\n            {   // mailto:user@host\r\n                // st:xx/zzz\r\n                // mydomain.com/path\r\n                // mydomain.com:port/path\r\n\r\n                // dismiss user and pass\r\n                if (user != null || pass != null)\r\n                {\r\n                    if (pass != null) user = user + \":\" + pass;\r\n                    host = user + \"@\" + host;\r\n\r\n                    user = null;\r\n                    pass = null;\r\n                }\r\n\r\n                // dismiss port\r\n                if (port != null)\r\n                {\r\n                    host += \":\" + port;\r\n                    port = null;\r\n                }\r\n\r\n                // everything as a path\r\n                path = scheme_separator + host + path;\r\n                host = null;\r\n            }\r\n            \r\n\t\t\tPhpArray result = new PhpArray(0, 8);\r\n\r\n            const char neutralChar = '_';\r\n\r\n            // store segments into the array (same order as it is in PHP)\r\n            if (scheme != null) result[\"scheme\"] = ParseUrlMethods.ReplaceControlCharset(scheme, neutralChar);\r\n            if (host != null) result[\"host\"] = ParseUrlMethods.ReplaceControlCharset(host, neutralChar);\r\n            if (port != null) result[\"port\"] = (int)unchecked((ushort)uint.Parse(port)); // PHP overflows in this way\r\n            if (user != null) result[\"user\"] = ParseUrlMethods.ReplaceControlCharset(user, neutralChar);\r\n            if (pass != null) result[\"pass\"] = ParseUrlMethods.ReplaceControlCharset(pass, neutralChar);\r\n            if (path != null) result[\"path\"] = ParseUrlMethods.ReplaceControlCharset(path, neutralChar);\r\n            if (query != null) result[\"query\"] = ParseUrlMethods.ReplaceControlCharset(query, neutralChar);\r\n            if (fragment != null) result[\"fragment\"] = ParseUrlMethods.ReplaceControlCharset(fragment, neutralChar);\r\n\r\n            return result;\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"parse_url\")]\r\n\t\tpublic static object ParseUrl(string url, UrlComponent component)\r\n\t\t{\r\n\t\t\tPhpArray array = ParseUrl(url);\r\n\t\t\tif (array == null) return null;\r\n\r\n\t\t\tswitch (component)\r\n\t\t\t{\r\n\t\t\t\tcase UrlComponent.Fragment: return (string)array[\"fragment\"];\r\n\t\t\t\tcase UrlComponent.Host: return (string)array[\"host\"];\r\n\t\t\t\tcase UrlComponent.Password: return (string)array[\"pass\"];\r\n\t\t\t\tcase UrlComponent.Path: return (string)array[\"path\"];\r\n\t\t\t\tcase UrlComponent.Port: object port = array[\"port\"]; if (port != null) return (int)port; else return null;\r\n\t\t\t\tcase UrlComponent.Query: return (string)array[\"query\"];\r\n\t\t\t\tcase UrlComponent.Scheme: return (string)array[\"scheme\"];\r\n\t\t\t\tcase UrlComponent.User: return (string)array[\"user\"];\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"arg:invalid_value\", \"component\", component));\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a string as if it were the query string passed via an URL.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"definedVariables\">Only to comply with Phalanger Class Library rules - all overloads of the same \r\n\t\t/// function has to have the same implementation options. Can be <B>null</B> reference.</param>\r\n\t\t/// <param name=\"str\">The string to parse.</param>\r\n\t\t/// <param name=\"result\">The array to store the variable found in <paramref name=\"str\"/> to.</param>\r\n\t\t[ImplementsFunction(\"parse_str\", FunctionImplOptions.NeedsVariables), EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static void ParseUrlQuery(Dictionary<string, object> definedVariables, string str, out PhpArray result)\r\n\t\t{\r\n\t\t\tresult = new PhpArray();\r\n\t\t\tAutoGlobals.LoadFromCollection(result, HttpUtility.ParseQueryString(str));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a string as if it were the query string passed via an URL and sets variables in the\r\n\t\t/// current scope.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"localVariables\">The <see cref=\"IDictionary\"/> where to store variables and its values.</param>\r\n\t\t/// <param name=\"str\">The string to parse.</param>\r\n\t\t[ImplementsFunction(\"parse_str\", FunctionImplOptions.NeedsVariables)]\r\n\t\tpublic static void ParseUrlQuery(Dictionary<string, object> localVariables, string str)\r\n\t\t{\r\n\t\t\tif (str == null) return;\r\n\r\n\t\t\tPhpArray globals = (localVariables != null) ? null : ScriptContext.CurrentContext.GlobalVariables;\r\n\t\t\tAutoGlobals.LoadFromCollection(globals, HttpUtility.ParseQueryString(str));\r\n\t\t}\r\n\r\n\t\tprivate static void ParseUrlQuery_InitVariable(PhpArray globals, Dictionary<string, object> localVariables, string key, object value)\r\n\t\t{\r\n\t\t\tif (key.EndsWith(\"[]\"))\r\n\t\t\t{\r\n\t\t\t\tkey = key.Substring(0, key.Length - 2);\r\n\r\n\t\t\t\tobject ov;\r\n\r\n\t\t\t\tif (PhpArray.TryGetValue(globals, localVariables, key, out ov))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ov is PhpArray)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpArray a = (PhpArray)ov;\r\n\r\n\t\t\t\t\t\ta.Add(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), PhpArray.New(ov, value));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), PhpArray.New(value));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpArray.Set(globals, localVariables, HttpUtility.UrlDecode(key), value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region rawurlencode, rawurldecode, urlencode, urldecode\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decode URL-encoded strings\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The URL string (e.g. \"hello%20from%20foo%40bar\").</param>\r\n\t\t/// <returns>Decoded string (e.g. \"hello from foo@bar\")</returns>\r\n\t\t[ImplementsFunction(\"rawurldecode\")]\r\n\t\tpublic static string RawUrlDecode(string str)\r\n\t\t{\r\n\t\t\tif (str == null) return null;\r\n            return HttpUtility.UrlDecode(str.Replace(\"+\", \"%2B\"));  // preserve '+'\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encodes a URL string keeping spaces in it. Spaces are encoded as '%20'.\r\n\t\t/// </summary>  \r\n\t\t/// <param name=\"str\">The string to be encoded.</param>\r\n\t\t/// <returns>The encoded string.</returns>\r\n\t\t[ImplementsFunction(\"rawurlencode\")]\r\n\t\tpublic static string RawUrlEncode(string str)\r\n\t\t{\r\n\t\t\tif (str == null) return null;\r\n            return UpperCaseEncodedChars(HttpUtility.UrlEncode(str)).Replace(\"+\", \"%20\");   // ' ' => '+' => '%20'\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decodes a URL string.\r\n\t\t/// </summary>  \r\n\t\t[ImplementsFunction(\"urldecode\")]\r\n\t\tpublic static string UrlDecode(string str)\r\n\t\t{\r\n            return HttpUtility.UrlDecode(str);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Encodes a URL string. Spaces are encoded as '+'.\r\n\t\t/// </summary>  \r\n\t\t[ImplementsFunction(\"urlencode\")]\r\n\t\tpublic static string UrlEncode(string str)\r\n\t\t{\r\n            return UpperCaseEncodedChars(HttpUtility.UrlEncode(str));\r\n\t\t}\r\n\r\n        private static string UpperCaseEncodedChars(string encoded)\r\n        {\r\n            char[] temp = encoded.ToCharArray();\r\n            for (int i = 0; i < temp.Length - 2; i++)\r\n            {\r\n                if (temp[i] == '%')\r\n                {\r\n                    temp[i + 1] = temp[i + 1].ToUpperAsciiInvariant();\r\n                    temp[i + 2] = temp[i + 2].ToUpperAsciiInvariant();\r\n                }\r\n            }\r\n            return new string(temp);\r\n        }\r\n\r\n//#if !SILVERLIGHT\r\n//        /// <summary>\r\n//        /// Encodes a Unicode URL string.\r\n//        /// </summary>  \r\n//        [ImplementsFunction(\"urlencode_unicode\")]\r\n//        public static string UrlEncodeUnicode(string str)\r\n//        {\r\n//            return HttpUtility.UrlEncodeUnicode(str);//TODO: implement this in PhpHttpUtility\r\n//        }\r\n//#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region get_meta_tags\r\n\r\n\t\t/// <summary>\r\n\t\t/// Lazily initialized &lt;meta&gt; tag regex.\r\n\t\t/// </summary>\r\n\t\tprivate static volatile Regex getMetaTagsRegex = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts all meta tag content attributes from a file and returns an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">The file to search for meta tags in.</param>\r\n\t\t/// <returns>Array with keys set to values of the name property and values set to values of the\r\n\t\t/// content property.</returns>\r\n\t\t/// <remarks>The parsing stops at the &lt;/head&gt; tag.</remarks>\r\n\t\t[ImplementsFunction(\"get_meta_tags\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray GetMetaTags(string fileName)\r\n\t\t{\r\n\t\t\treturn GetMetaTags(fileName, FileOpenOptions.Empty);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts all meta tag content attributes from a file and returns an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">The file to search for meta tags in.</param>\r\n\t\t/// <param name=\"flags\">If true, the file specified by <paramref name=\"fileName\"/> should be sought\r\n\t\t/// for along the standard include path.</param>\r\n\t\t/// <returns>Array with keys set to values of the name property and values set to values of the\r\n\t\t/// content property.</returns>\r\n\t\t/// <remarks>The parsing stops at the &lt;/head&gt; tag.</remarks>\r\n\t\t[ImplementsFunction(\"get_meta_tags\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray GetMetaTags(string fileName, FileOpenOptions flags)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tif (getMetaTagsRegex == null)\r\n\t\t\t{\r\n\t\t\t\tgetMetaTagsRegex = new Regex(@\"^meta\\s+name\\s*=\\s*(?:(\\w*)|'([^']*)'|\\u0022([^\\u0022]*)\\u0022)\\s+\" +\r\n\t\t\t\t\t@\"content\\s*=\\s*(?:(\\w*)|'([^']*)'|\\u0022([^\\u0022]*)\\u0022)\\s*/?$\",\r\n\t\t\t\t\tRegexOptions.IgnoreCase | RegexOptions.CultureInvariant);\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tPhpStream stream = PhpStream.Open(fileName, \"rt\", PhpFile.ProcessOptions(flags));\r\n\t\t\t\tStringBuilder tag = new StringBuilder();\r\n\r\n\t\t\t\tbool in_brackets = false;\r\n\t\t\t\tint in_quotes = 0; // 1 = ', 2 = \"\r\n\t\t\t\tint in_comment = 0; // 1 = <, 2 = <!, 3 = <!-, 4 = <!--, 5 = <!-- -, 6  <!-- --\r\n\r\n\t\t\t\twhile (!stream.Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tint start_index = 0;\r\n\r\n\t\t\t\t\tstring line = stream.ReadLine(-1, null);\r\n\t\t\t\t\tfor (int i = 0; i < line.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch (line[i])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '<':\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (!in_brackets && in_quotes == 0 && in_comment == 0)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tin_brackets = true;\r\n\t\t\t\t\t\t\t\t\t\tin_comment = 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\tstart_index = i + 1;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcase '>':\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (in_brackets && in_quotes == 0 && in_comment != 4 && in_comment != 5)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tin_brackets = false;\r\n\t\t\t\t\t\t\t\t\t\tin_comment = 0;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (start_index < i) tag.Append(line, start_index, i - start_index);\r\n\r\n\t\t\t\t\t\t\t\t\t\tstring str = tag.ToString();\r\n\t\t\t\t\t\t\t\t\t\ttag.Length = 0;\r\n\r\n\t\t\t\t\t\t\t\t\t\t// did we reach the end of <head>?\r\n\t\t\t\t\t\t\t\t\t\tif (str.Equals(\"/head\", StringComparison.InvariantCultureIgnoreCase)) return result;\r\n\r\n\t\t\t\t\t\t\t\t\t\t// try to match the tag with the <meta> regex\r\n\t\t\t\t\t\t\t\t\t\tMatch match = getMetaTagsRegex.Match(str);\r\n\t\t\t\t\t\t\t\t\t\tif (match.Success)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tstring name = null, value = null;\r\n\t\t\t\t\t\t\t\t\t\t\tfor (int j = 1; j <= 3; j++)\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (match.Groups[j].Success)\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tname = match.Groups[j].Value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (name != null)\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tfor (int j = 4; j <= 6; j++)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (match.Groups[j].Success)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue = match.Groups[j].Value;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tresult[name] = (value == null ? String.Empty : Core.Convert.Quote(value, context));\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (in_quotes == 0) in_quotes = 1;\r\n\t\t\t\t\t\t\t\t\telse if (in_quotes == 1) in_quotes = 0;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcase '\"':\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (in_quotes == 0) in_quotes = 2;\r\n\t\t\t\t\t\t\t\t\telse if (in_quotes == 2) in_quotes = 0;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcase '!': if (in_comment == 1) in_comment = 2; break;\r\n\t\t\t\t\t\t\tcase '-': if (in_comment >= 2 && in_comment < 6) in_comment++; break;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// reset comment state machine\r\n\t\t\t\t\t\t\t\t\tif (in_comment < 4) in_comment = 0;\r\n\t\t\t\t\t\t\t\t\tif (in_comment > 4) in_comment = 4;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (in_brackets && start_index < line.Length) tag.Append(line, start_index, line.Length - start_index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (IOException)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n    }\r\n}  \r\n"
  },
  {
    "path": "Source/ClassLibrary/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetClassLibrary\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/ClassLibrary/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetClassLibrary\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/ArraysTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Tests\r\n{\r\n    [TestClass]\r\n    public class ArraysTests\r\n    {\r\n        [TestMethod]\r\n        public void TestRandomKeys()\r\n        {\r\n            PhpArray a = PhpArray.Keyed(\"Server1\", 1, \"Server2\", 2, \"Server3\", 3);\r\n            PhpVariable.Dump(a);\r\n            string result = PhpArrays.RandomKeys(a) as string;\r\n            Assert.IsTrue(result == \"Server1\" || result == \"Server2\" || result == \"Server3\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/ClassLibrary.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{D2388680-0C99-467F-9C17-68E1E6E4F1C0}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Tests</RootNamespace>\r\n    <AssemblyName>PhpNet.ClassLibrary.Tests</AssemblyName>\r\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\r\n    <IsCodedUITest>False</IsCodedUITest>\r\n    <TestProjectType>UnitTest</TestProjectType>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <AssemblyOriginatorKeyFile>ClassLibrary.Tests.snk</AssemblyOriginatorKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n      </ItemGroup>\r\n    </When>\r\n    <Otherwise>\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\r\n      </ItemGroup>\r\n    </Otherwise>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"TimeZonesTests.cs\" />\r\n    <Compile Include=\"ArraysTests.cs\" />\r\n    <Compile Include=\"RegExpPerlTests.cs\" />\r\n    <Compile Include=\"PhpDateTimeTests.cs\" />\r\n    <Compile Include=\"UUEncodingTests.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"ClassLibrary.Tests.snk\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Source/ClassLibrary.Tests/PhpDateTimeTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Tests\r\n{\r\n    [TestClass]\r\n    public class PhpDateTimeTests\r\n    {\r\n        private static TimeZoneInfo/*!*/NepalTimeZone { get { return PhpTimeZone.GetTimeZone(\"Asia/Katmandu\"); } }// = TimeZoneInfo.FindSystemTimeZoneById(\"Nepal Standard Time\");// new _NepalTimeZone();\r\n        private static TimeZoneInfo/*!*/PacificTimeZone { get { return PhpTimeZone.GetTimeZone(\"America/Los_Angeles\"); } }//  = TimeZoneInfo.FindSystemTimeZoneById(\"Pacific Standard Time\");//new _PacificTimeZone();\r\n        private static TimeZoneInfo/*!*/GmtTimeZone { get { return PhpTimeZone.GetTimeZone(\"Etc/GMT\"); } }//  = TimeZoneInfo.FindSystemTimeZoneById(\"GTM\");\r\n\r\n        [TestMethod]\r\n        public void TestGetTimeOfDay()\r\n        {\r\n            PhpArray result;\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 10, 1), PacificTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], 480);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 1);\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), PacificTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], 480);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 1);\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), NepalTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], -345);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 0);\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 10, 1), GmtTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], 0);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 1);\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), GmtTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], 0);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 1);\r\n\r\n            result = PhpDateTime.GetTimeOfDay(new DateTime(2005, 11, 1), DateTimeUtils.UtcTimeZone);\r\n            Assert.AreEqual((int)result[\"minuteswest\"], 0);\r\n            Assert.AreEqual((int)result[\"dsttime\"], 0);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestGetLocalTime()\r\n        {\r\n#if DEBUG\r\n            PhpArray result1, result2;\r\n            PhpTimeZone.CurrentTimeZone = PhpTimeZone.GetTimeZone(\"UTC\");\r\n            DateTime dt = new DateTime(2005, 11, 4, 5, 4, 3, 132);\r\n\r\n            result1 = PhpDateTime.GetLocalTime(dt, false);\r\n            result2 = PhpDateTime.GetLocalTime(dt, true);\r\n            Assert.AreEqual((int)result1[0], 3);\r\n            Assert.AreEqual((int)result1[1], 4);\r\n            Assert.AreEqual((int)result1[2], 5);\r\n            Assert.AreEqual((int)result1[3], 4);\r\n            Assert.AreEqual((int)result1[4], 10);\r\n            Assert.AreEqual((int)result1[5], 105);\r\n            Assert.AreEqual((int)result1[6], 5);\r\n            Assert.AreEqual((int)result1[7], 307);\r\n            Assert.AreEqual((int)result1[8], 0);\r\n\r\n            Assert.AreEqual((int)result1[0], (int)result2[\"tm_sec\"]);\r\n            Assert.AreEqual((int)result1[1], (int)result2[\"tm_min\"]);\r\n            Assert.AreEqual((int)result1[2], (int)result2[\"tm_hour\"]);\r\n            Assert.AreEqual((int)result1[3], (int)result2[\"tm_mday\"]);\r\n            Assert.AreEqual((int)result1[4], (int)result2[\"tm_mon\"]);\r\n            Assert.AreEqual((int)result1[5], (int)result2[\"tm_year\"]);\r\n            Assert.AreEqual((int)result1[6], (int)result2[\"tm_wday\"]);\r\n            Assert.AreEqual((int)result1[7], (int)result2[\"tm_yday\"]);\r\n            Assert.AreEqual((int)result1[8], (int)result2[\"tm_isdst\"]);\r\n#endif\r\n        }\r\n\r\n        struct StringToTimeCase\r\n        {\r\n            public string String;\r\n            public int StartTime;\r\n            public string Result;\r\n            public TimeZoneInfo[] Zones;\r\n\r\n            public StringToTimeCase(string str, int start, string result, TimeZoneInfo[] zones)\r\n            {\r\n                this.String = str;\r\n                this.StartTime = start;\r\n                this.Result = result;\r\n                this.Zones = zones;\r\n            }\r\n\r\n            public StringToTimeCase(string str, string result, TimeZoneInfo[] zones)\r\n                : this(str, 0, result, zones)\r\n            {\r\n            }\r\n\r\n            public StringToTimeCase(string str, int locMonth, int locDay, int locYear, TimeZoneInfo zone, string result, TimeZoneInfo[] zones)\r\n                : this(str, DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(new DateTime(locYear, locMonth, locDay), zone)),\r\n                  result, zones)\r\n            {\r\n            }\r\n\r\n            public StringToTimeCase(string str, DateTime local, TimeZoneInfo zone, string result, TimeZoneInfo[] zones)\r\n                : this(str, DateTimeUtils.UtcToUnixTimeStamp(TimeZoneInfo.ConvertTimeToUtc(local, zone)),\r\n                  result, zones)\r\n            {\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestStringToTime()\r\n        {\r\n            TimeZoneInfo[] all_zones =\n\t\t  {\n\t\t    NepalTimeZone,\n\t\t    PacificTimeZone,\n\t\t    GmtTimeZone\n\t\t  };\r\n\r\n            var utc_zone = DateTimeUtils.UtcTimeZone;\r\n            var nep_zone = NepalTimeZone;\r\n            var pac_zone = PacificTimeZone;\r\n\r\n            TimeZoneInfo[] utc_zones = { utc_zone };\r\n            TimeZoneInfo[] nep_zones = { nep_zone };\r\n            TimeZoneInfo[] pac_zones = { pac_zone };\r\n\r\n            DateTime time1 = new DateTime(2005, 11, 13, 17, 41, 43);\r\n            // mktime(17,41,43,11,13,2005);\r\n\r\n            StringToTimeCase[] cases =\n\t\t  {\n\t\t    new StringToTimeCase(\"10 September 2000\",                time1,pac_zone, \"\", pac_zones),\n\t\t    new StringToTimeCase(\"+0545\",                            time1,pac_zone, \"\", pac_zones),\n\n//\t\t    new StringToTimeCase(\"+0545\",                            time1,pac_zone, \"11:56:43 11/13/2005\", pac_zones),\n//\t\t    new StringToTimeCase(\"11/31/2005\",                       time1,pac_zone, \"17:41:43 11/13/2005\", pac_zones),\n//\t\t    new StringToTimeCase(\"-1 month +0545\",11,01,2005,pac_zone, \"20:15:00 09-30-2005\", pac_zones),\n//        new StringToTimeCase(\"@-1519789808\",null,pac_zones),\n//\t\t    new StringToTimeCase( \"1/1/1900\",                                        null, all_zones),\n//\t\t    new StringToTimeCase(\"11/1/2005\",                       \"00:00:00 11/01/2005\", nep_zones),\n//\n//\t\t    // note: goes over daylight savings change date:\n//\t\t    new StringToTimeCase( \"+1 month\",  10,01,2005,utc_zone, \"00:00:00 11/01/2005\", utc_zones),\n//\t\t    new StringToTimeCase( \"+1 month\",  10,01,2005,nep_zone, \"00:00:00 11/01/2005\", nep_zones),\n//\t\t    new StringToTimeCase( \"+1 month\",  10,01,2005,pac_zone, \"00:00:00 11/01/2005\", pac_zones),\n//\t\t    new StringToTimeCase( \"-1 month\",  11,01,2005,utc_zone, \"00:00:00 10/01/2005\", utc_zones),\n//\t\t    new StringToTimeCase( \"-1 month\",  11,01,2005,nep_zone, \"00:00:00 10/01/2005\", nep_zones),\n//\t\t    new StringToTimeCase( \"-1 month\",  11,01,2005,pac_zone, \"00:00:00 10/01/2005\", pac_zones),\n//\n//        new StringToTimeCase(\"now\",                              time1,pac_zone, \"17:41:43 11/13/2005\", pac_zones),\n//        new StringToTimeCase(\"10 September 2000\",                time1,pac_zone, \"00:00:00 09/10/2000\", pac_zones),\n//        new StringToTimeCase(\"+1 day\",                           time1,pac_zone, \"17:41:43 11/14/2005\", pac_zones),\n//        new StringToTimeCase(\"+1 week\",                          time1,pac_zone, \"17:41:43 11/20/2005\", pac_zones),\n//        new StringToTimeCase(\"+1 week 2 days 4 hours 2 seconds\", time1,pac_zone, \"21:41:45 11/22/2005\", pac_zones),\n//        new StringToTimeCase(\"next Thursday\",                    time1,pac_zone, \"00:00:00 11/17/2005\", pac_zones),\n//        new StringToTimeCase(\"last Monday\",                      time1,pac_zone, \"00:00:00 11/07/2005\", pac_zones),\n//        new StringToTimeCase(\"2004-12-31\",                       time1,pac_zone, \"00:00:00 12/31/2004\", pac_zones),\n//        new StringToTimeCase(\"2005-04-15\",                       time1,pac_zone, \"00:00:00 04/15/2005\", pac_zones),\n//        new StringToTimeCase(\"last Wednesday\",                   time1,pac_zone, \"00:00:00 11/09/2005\", pac_zones),\n//        new StringToTimeCase(\"04/05/2005\",                       time1,pac_zone, \"00:00:00 04/05/2005\", pac_zones),\n//        new StringToTimeCase(\"Thu, 31 Jul 2003 13:02:39 -0700\",  time1,pac_zone, \"13:02:39 07/31/2003\", pac_zones),\n//        new StringToTimeCase(\"today 00:00:00\",                   time1,pac_zone, \"00:00:00 11/13/2005\", pac_zones),\n//        new StringToTimeCase(\"last Friday\",                      time1,pac_zone, \"00:00:00 11/11/2005\", pac_zones),\n//        new StringToTimeCase(\"2004-12-01\",                       time1,pac_zone, \"00:00:00 12/01/2004\", pac_zones),\n//        new StringToTimeCase(\"- 1week\",                          time1,pac_zone, \"16:00:00 12/31/1969\", pac_zones),\n//        new StringToTimeCase(\"2004-06-13 09:20:00.0\",            time1,pac_zone, \"09:20:00 06/13/2004\", pac_zones),\n//        new StringToTimeCase(\"+10 seconds\",                      time1,pac_zone, \"17:41:53 11/13/2005\", pac_zones),\n//        new StringToTimeCase(\"2004-04-04 02:00:00 GMT\",          time1,pac_zone, \"18:00:00 04/03/2004\", pac_zones),\n//        new StringToTimeCase(\"2004-04-04 01:59:59 UTC\",          time1,pac_zone, \"16:00:00 12/31/1969\", pac_zones),\n//        new StringToTimeCase(\"2004-06-13 09:20:00.0\",            time1,pac_zone, \"09:20:00 06/13/2004\", pac_zones),\n//        new StringToTimeCase(\"2004-04-04 02:00:00\",              time1,pac_zone, \"03:00:00 04/04/2004\", pac_zones),\n//        new StringToTimeCase(\"last sunday 12:00:00\",             time1,pac_zone, \"12:00:00 11/06/2005\", pac_zones),\n//        new StringToTimeCase(\"last sunday\",                      time1,pac_zone, \"00:00:00 11/06/2005\", pac_zones),\n//        new StringToTimeCase(\"01-jan-70 01:00\",                  time1,pac_zone, \"01:00:00 01/01/1970\", pac_zones),\n//        new StringToTimeCase(\"01-jan-70 02:00\",                  time1,pac_zone, \"02:00:00 01/01/1970\", pac_zones),\n\t\t  };\r\n\r\n            foreach (StringToTimeCase c in cases)\r\n            {\r\n                foreach (var zone in c.Zones)\r\n                {\r\n                    //DateTimeUtils.SetCurrentTimeZone(zone);\r\n\r\n                    object timestamp = PhpDateTime.StringToTime(c.String, c.StartTime);\r\n\r\n                    //          string str = null;\r\n                    //          if (timestamp is int)\r\n                    //            str = FormatDate(\"H:i:s m/d/Y\",(int)timestamp); else\r\n                    //            Debug.Assert(!(bool)timestamp);\r\n                    //\r\n                    //          if (str!=c.Result)\r\n                    //            Debug.Fail();\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"ClassLibrary.Tests\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"ClassLibrary.Tests\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"a7e1cfb9-4e1d-40e9-9150-c39ce661cc33\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/RegExpPerlTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing PHP.Library;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Library.Tests\r\n{\r\n    [TestClass]\r\n    public class RegExpPerlTests\r\n    {\r\n        [TestMethod]\r\n        public void TestUnicodeMatch()\r\n        {\r\n            int m;\r\n\r\n            m = PerlRegExp.Match\r\n            (\r\n              new PhpBytes(Encoding.UTF8.GetBytes(\"/[ř]/u\")),\r\n              new PhpBytes(Encoding.UTF8.GetBytes(\"12ščř45\"))\r\n            );\r\n            Assert.AreEqual(m, 1);\r\n\r\n            Encoding enc = Configuration.Application.Globalization.PageEncoding;\r\n\r\n            m = PerlRegExp.Match\r\n            (\r\n              new PhpBytes(enc.GetBytes(\"/[ř]/\")),\r\n              new PhpBytes(\"12ščř45\")\r\n            );\r\n            Assert.AreEqual(m, 1);\r\n\r\n            // binary cache test:\r\n            m = PerlRegExp.Match\r\n            (\r\n              new PhpBytes(enc.GetBytes(\"/[ř]/\")),\r\n              new PhpBytes(\"12ščř45\")\r\n            );\r\n            Assert.AreEqual(m, 1);\r\n\r\n            int count;\r\n            object r = PerlRegExp.Replace\r\n            (\r\n            ScriptContext.CurrentContext,\r\n                null,\r\n                null,\r\n              new PhpBytes(Encoding.UTF8.GetBytes(\"/[řš]+/u\")),\r\n              \"|žýř|\",\r\n              new PhpBytes(Encoding.UTF8.GetBytes(\"Hešovářřřříčkořš hxx\")),\r\n              1000,\r\n              out count\r\n            );\r\n\r\n            Assert.AreEqual(r as string, \"He|žýř|ová|žýř|íčko|žýř| hxx\");\r\n            Assert.AreEqual(count, 3);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestConvertRegex()\r\n        {\r\n            IEnumerable<Tuple<string,string,PerlRegexOptions>> tests = new Tuple<string,string,PerlRegexOptions>[]\r\n            {\r\n                new Tuple<string,string,PerlRegexOptions>( @\"?a+sa?s (?:{1,2})\", \"??a+?sa??s (?:{1,2}?)\", PerlRegexOptions.Ungreedy),\r\n                new Tuple<string,string,PerlRegexOptions>( @\"(X+)(?:\\|(.+?))?]](.*)$\", @\"(X+?)(?:\\|(.+))??]](.*?)$\", PerlRegexOptions.Ungreedy),\r\n                new Tuple<string,string,PerlRegexOptions>( @\"([X$]+)$\", @\"([X$]+)\\z\", PerlRegexOptions.DollarMatchesEndOfStringOnly)\r\n            };\r\n\r\n            foreach (var test in tests)\r\n            {\r\n                var result = PerlRegExpConverter.ConvertRegex(test.Item1, test.Item3, Encoding.UTF8);\r\n                Assert.AreEqual(result, test.Item2);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/TimeZonesTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Library;\r\n\r\nnamespace PHP.Library.Tests\r\n{\r\n    [TestClass]\r\n    public class TimeZonesTests\r\n    {\r\n\r\n        //        //[Test(true)]\r\n        //        static void SortZones()\r\n        //        {\r\n        //            InitTables();\r\n\r\n        //#if !SILVERLIGHT\r\n        //            Array.Sort(zones, CaseInsensitiveComparer.DefaultInvariant);\r\n        //#else\r\n        //            Array.Sort(zones, StringComparer.InvariantCultureIgnoreCase);\r\n        //#endif\r\n\r\n\r\n        //            Console.WriteLine();\r\n        //            foreach (string z in zones)\r\n        //            {\r\n        //                Console.WriteLine(\"\\\"{0}\\\",\", z);\r\n        //            }\r\n        //        }\r\n\r\n        //        [Test]\r\n        //        static void TestSorted()\r\n        //        {\r\n        //            InitTables();\r\n        //            string[] sorted = (string[])zones.Clone();\r\n\r\n        //#if !SILVERLIGHT\r\n        //            Array.Sort(sorted, CaseInsensitiveComparer.DefaultInvariant);\r\n        //#else\r\n        //            Array.Sort(sorted, StringComparer.InvariantCultureIgnoreCase);\r\n        //#endif\r\n\r\n        //            for (int i = 0; i < zones.Length; i++)\r\n        //                Debug.Assert(sorted[i] == zones[i]);\r\n        //        }\r\n\r\n        [TestMethod]\r\n        public void TestGetTimeZone()\r\n        {\r\n            TimeZoneInfo zone;\r\n\r\n            zone = PhpTimeZone.GetTimeZone(\"Europe/Prague\");\r\n            Assert.IsTrue(zone != null && zone.Id == \"Europe/Prague\");\r\n\r\n            zone = PhpTimeZone.GetTimeZone(\"europe/prague\");\r\n            Assert.IsTrue(zone != null && zone.Id == \"Europe/Prague\");\r\n\r\n            zone = PhpTimeZone.GetTimeZone(\"foo\");\r\n            Assert.IsNull(zone);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/ClassLibrary.Tests/UUEncodingTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Tests\r\n{\r\n    [TestClass]\r\n    public class UUEncodingTests\r\n    {\r\n        [TestMethod]\r\n        public void TestUUEncodeDecode()\r\n        {\r\n            string[,] cases = \r\n\t\t  { \r\n\t\t    {\"x\", \"!>```\\n`\\n\"},\r\n\t\t    {\"xx\", \"\\\">'@`\\n`\\n\"},       \r\n\t\t    {\"xxx\", \"#>'AX\\n`\\n\"},\r\n\t\t    {\"test\\ntext text\\r\\n\", \"0=&5S=`IT97AT('1E>'0-\\\"@``\\n`\\n\"},\r\n\t\t    {\"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\"},\r\n\t\t    {\"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\"},\r\n\t\t    {\"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\"},\r\n\t\t    {\"\",\"\"},\r\n\t\t    {@\"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.)\r\nWhere 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:\r\nThese octets then shall be translated into the local character set.\r\nEach 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.\",\r\n@\"M5&AE(&%L9V]R:71H;2!T:&%T('-H86QL(&)E('5S960@9F]R(&QI;F5S(&EN\r\nM(&)E='=E96X@8F5G:6X@86YD(&5N9\"\"!T86ME<R!T:')E92!O8W1E=',@87,@\r\nM:6YP=70@86YD('=R:71E<R!F;W5R(&-H87)A8W1E<G,@;V8@;W5T<'5T(&)Y\r\nM('-P;&ET=&EN9R!T:&4@:6YP=70@870@<VEX+6)I=\"\"!I;G1E<G9A;',@:6YT\r\nM;R!F;W5R(&]C=&5T<RP@8V]N=&%I;FEN9R!D871A(&EN('1H92!L;W=E<B!S\r\nM:7@@8FET<R!O;FQY+B!4:&5S92!O8W1E=',@<VAA;&P@8F4@8V]N=F5R=&5D\r\nM('1O(&-H87)A8W1E<G,@8GD@861D:6YG(&$@=F%L=64@;V8@,'@R,\"\"!T;R!E\r\nM86-H(&]C=&5T+\"\"!S;R!T:&%T(&5A8V@@;V-T970@:7,@:6X@=&AE(')A;F=E\r\nM(%LP>#(P+#!X-69=+\"\"!A;F0@=&AE;B!I=\"\"!S:&%L;\"\"!B92!A<W-U;65D('1O\r\nM(')E<')E<V5N=\"\"!A('!R:6YT86)L92!C:&%R86-T97(@:6X@=&AE($E33R])\r\nM14,@-C0V.C$Y.3$@<W1A;F1A<F0@96YC;V1E9\"\"!C:&%R86-T97(@<V5T+B!)\r\nM=\"\"!T:&5N('-H86QL(&)E('1R86YS;&%T960@:6YT;R!T:&4@8V]R<F5S<&]N\r\nM9&EN9R!C:&%R86-T97(@8V]D97,@9F]R('1H92!C;V1E<V5T(&EN('5S92!I\r\nM;B!T:&4@8W5R<F5N=\"\"!L;V-A;&4N(\"\"A&;W(@97AA;7!L92P@=&AE(&]C=&5T\r\nM(#!X-#$L(')E<')E<V5N=&EN9R`G02<L('=O=6QD(&)E('1R86YS;&%T960@\r\nM=&\\@)T$G(&EN('1H92!C=7)R96YT(&-O9&5S970L('-U8V@@87,@,'AC,2!I\r\nM9B!I=\"\"!W97)E($5\"\"0T1)0RXI#0I7:&5R92!T:&4@8FET<R!O9B!T=V\\@;V-T\r\nM971S(&%R92!C;VUB:6YE9\"\"P@=&AE(&QE87-T('-I9VYI9FEC86YT(&)I=',@\r\nM;V8@=&AE(&9I<G-T(&]C=&5T('-H86QL(&)E('-H:69T960@;&5F=\"\"!A;F0@\r\nM8V]M8FEN960@=VET:\"\"!T:&4@;6]S=\"\"!S:6=N:69I8V%N=\"\"!B:71S(&]F('1H\r\nM92!S96-O;F0@;V-T970@<VAI9G1E9\"\"!R:6=H=\"\"X@5&AU<R!T:&4@=&AR964@\r\nM;V-T971S($$L($(L($,@<VAA;&P@8F4@8V]N=F5R=&5D(&EN=&\\@=&AE(&9O\r\nM=7(@;V-T971S.@T*5&AE<V4@;V-T971S('1H96X@<VAA;&P@8F4@=')A;G-L\r\nM871E9\"\"!I;G1O('1H92!L;V-A;\"\"!C:&%R86-T97(@<V5T+@T*16%C:\"\"!E;F-O\r\nM9&5D(&QI;F4@8V]N=&%I;G,@82!L96YG=&@@8VAA<F%C=&5R+\"\"!E<75A;\"\"!T\r\nM;R!T:&4@;G5M8F5R(&]F(&-H87)A8W1E<G,@=&\\@8F4@9&5C;V1E9\"\"!P;'5S\r\nM(#!X,C`@=')A;G-L871E9\"\"!T;R!T:&4@;&]C86P@8VAA<F%C=&5R('-E=\"\"!A\r\nM<R!D97-C<FEB960@86)O=F4L(&9O;&QO=V5D(&)Y('1H92!E;F-O9&5D(&-H\r\nM87)A8W1E<G,N(%1H92!M87AI;75M(&YU;6)E<B!O9B!O8W1E=',@=&\\@8F4@\r\nA96YC;V1E9\"\"!O;B!E86-H(&QI;F4@<VAA;&P@8F4@-#4N\r\n`\r\n\"}\r\n\t\t  };\r\n\r\n            for (int i = 0; i < cases.GetLength(0); i++)\r\n            {\r\n                string encoded = UUEncoder.Encode(new PhpBytes(Encoding.Default.GetBytes(cases[i, 0])));\r\n\r\n                if (encoded != cases[i, 1].Replace(\"\\r\", \"\"))\r\n                {\r\n                    Console.WriteLine();\r\n                    Console.WriteLine(encoded);\r\n                    Console.WriteLine(StringUtils.FirstDifferent(encoded, cases[i, 1], false));\r\n                    Assert.Fail(null);\r\n                }\r\n\r\n                byte[] bytes = UUEncoder.Decode(encoded).ReadonlyData;\r\n                string decoded = Encoding.Default.GetString(bytes, 0, bytes.Length);\r\n                Assert.AreEqual(decoded, cases[i, 0]);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/ApplicationContext.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Xml;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\nusing System.Web;\r\n\r\nnamespace PHP.Core\r\n{\r\n\tpublic sealed partial class ApplicationContext\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n        /// Singleton instance of <see cref=\"WebServerCompilerManager\"/> manager. Created lazily in HTTP context. \r\n\t\t/// </summary>\r\n\t\tprivate volatile WebServerCompilerManager webServerCompilerManager;\r\n\t\t\r\n        /// <summary>\r\n        /// Contains database of scripts, which are contained in loaded script libraries. Used by dynamic inclusions and compiler.\r\n        /// </summary>\r\n        internal ScriptLibraryDatabase ScriptLibraryDatabase\r\n        {\r\n            get\r\n            {\r\n                Debug.Assert(scriptLibraryDatabase != null, \"Empty application context doesn't have a script library.\");\r\n                return scriptLibraryDatabase;\r\n            }\r\n        }\r\n        private ScriptLibraryDatabase scriptLibraryDatabase;\r\n\t\t\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Initialization\r\n\r\n        /// <summary>\r\n        /// Gets instance to compiler manager that manages script libraries, WebPages.dll and scripts compiled dynamically in runtime.\r\n        /// </summary>\r\n\t\tinternal WebServerCompilerManager/*!*/ RuntimeCompilerManager\r\n\t\t{\r\n            get\r\n            {\r\n                if (webServerCompilerManager == null)\r\n                    lock (this)\r\n                        if (webServerCompilerManager == null)\r\n                            webServerCompilerManager = new WebServerCompilerManager(this);\r\n\r\n                return webServerCompilerManager;\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n \t}\r\n\r\n    #region AssemblyLoader\r\n\r\n    public sealed partial class AssemblyLoader\r\n    {\r\n        /// <summary>\r\n        /// Loads assemblies whose paths or full names are listed in references.\r\n        /// </summary>\r\n        /// <param name=\"references\">Enumeration of paths to or full names of assemblies to load.</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"references\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"ConfigurationErrorsException\">An error occured while loading a library.</exception>\r\n        public void Load(IEnumerable<CompilationParameters.ReferenceItem>/*!*/ references)\r\n        {\r\n            if (references == null)\r\n                throw new ArgumentNullException(\"references\");\r\n\r\n            foreach (var reference in references)\r\n            {\r\n                LoadReference(reference.Reference, reference.LibraryRoot);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads single reference.\r\n        /// </summary>\r\n        /// <param name=\"reference\">Path to or full name of references assembly.</param>\r\n        /// <param name=\"libraryRoot\">If the reference represents a script library, this optional parameter can move scripts in the loaded library to a subdirectory.</param>\r\n        private void LoadReference(string reference, string libraryRoot)\r\n        {\r\n            Assembly realAssembly;\r\n\r\n            if (System.IO.File.Exists(reference))\r\n                // TODO: look if this can be simplified\r\n                realAssembly = LoadRealAssemblyFrom(reference);\r\n            else\r\n                realAssembly = LoadRealAssembly(reference);\r\n\r\n            if (realAssembly == null)\r\n            {\r\n                throw new ConfigurationErrorsException\r\n                    (CoreResources.GetString(\"library_assembly_loading_failed\", reference), (Exception)null);\r\n            }\r\n\r\n            DAssemblyAttribute attr = DAssemblyAttribute.Reflect(realAssembly);\r\n\r\n            // TODO: this special case should be removed after WebPages functionality is passed to script libraries\r\n            if (attr is ScriptAssemblyAttribute && ((ScriptAssemblyAttribute)attr).IsMultiScript)\r\n            {\r\n                //load this as script library\r\n                LoadScriptLibrary(realAssembly, libraryRoot);\r\n\r\n                return;\r\n            }\r\n\r\n            Load(realAssembly, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads assembly as script library, adding all scripts it contains into script library database.\r\n        /// </summary>\r\n        /// <param name=\"assemblyName\">Long assembly name (see <see cref=\"Assembly.Load\"/>) or a <B>null</B> reference.</param>\r\n        /// <param name=\"assemblyUrl\">Assembly file absolute URI or a <B>null</B> reference.</param>\r\n        /// <param name=\"libraryRoot\">Root offset of the script library. All scripts will be loaded with this offset.\r\n        /// Strict behavior forbids conflicts between scriptLibrary and filesystem, all conflicts will be reported as errors.\r\n        /// This is used in the runtime (dynamic include), compiler currently ignores filesystem.\r\n        /// </param>\r\n        public DAssembly LoadScriptLibrary(string assemblyName, Uri assemblyUrl, string libraryRoot)\r\n        {\r\n            if (assemblyName == null && assemblyUrl == null)\r\n                throw new ArgumentNullException(\"assemblyName\");\r\n\r\n            if (assemblyUrl != null && !assemblyUrl.IsAbsoluteUri)\r\n                throw new ArgumentException(\"Absolute URL expected\", \"assemblyUrl\");\r\n\r\n            string target = null;\r\n\r\n            try\r\n            {\r\n                if (assemblyName != null)\r\n                {\r\n                    // load assembly by full name:\r\n                    target = assemblyName;\r\n\r\n                    return LoadScriptLibrary(LoadRealAssembly(target), libraryRoot);\r\n                }\r\n                else\r\n                {\r\n                    // load by URI:\r\n                    target = HttpUtility.UrlDecode(assemblyUrl.AbsoluteUri);\r\n\r\n                    return LoadScriptLibrary(LoadRealAssemblyFrom(target), libraryRoot);\r\n                }\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new ConfigurationErrorsException\r\n                    (CoreResources.GetString(\"script_library_assembly_loading_failed\", target) + \" \" + e.Message, e);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads assembly as script library, adding all scripts it contains into script library database.\r\n        /// </summary>\r\n        /// <param name=\"realAssembly\">Script assembly that is to be loaded.</param>\r\n        /// <param name=\"libraryRoot\">Root offset of the script library. All scripts will be loaded with this offset.\r\n        /// Strict behavior forbids conflicts between scriptLibrary and filesystem, all conflicts will be reported as errors.\r\n        /// This is used in the runtime (dynamic include), compiler currently ignores filesystem.\r\n        /// </param>\r\n        public DAssembly LoadScriptLibrary(Assembly/*!*/ realAssembly, string libraryRoot)\r\n        {\r\n            ScriptAssembly scriptAssembly;\r\n\r\n            lock (this)\r\n            {\r\n                if (loadedAssemblies.ContainsKey(realAssembly))\r\n                    return loadedAssemblies[realAssembly];\r\n\r\n                scriptAssembly = ScriptAssembly.LoadFromAssembly(applicationContext, realAssembly, libraryRoot);\r\n                loadedAssemblies.Add(realAssembly, scriptAssembly);\r\n            }\r\n\r\n            applicationContext.ScriptLibraryDatabase.ReflectLibraryNoLock(scriptAssembly);\r\n\r\n            return scriptAssembly;\r\n        }\r\n    }\r\n\r\n    #endregion AssemblyLoader\r\n\r\n    #region ScriptLibraryDatabase\r\n    /// <summary>\r\n    /// Database of library scripts. These scripts are contained in assemblies listed in scriptLibrary configuration section.\r\n    /// Used by DynamicInclude.\r\n    /// </summary>\r\n    internal sealed class ScriptLibraryDatabase\r\n    {\r\n        #region Entry\r\n\r\n        /// <summary>\r\n        /// Single entry in the database.\r\n        /// </summary>\r\n        private class Entry\r\n        {\r\n            public FullPath Path;\r\n            public ScriptModule ScriptModule;\r\n            public ScriptAssembly ContainingAssembly;\r\n\r\n            public Entry(FullPath path, ScriptModule scriptModule, ScriptAssembly containingAssembly)\r\n            {\r\n                ScriptModule = scriptModule;\r\n                ContainingAssembly = containingAssembly;\r\n                Path = path;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Prepared to be loaded lazily\r\n\r\n        /// <summary>\r\n        /// Description of the script library to be loaded later lazily.\r\n        /// </summary>\r\n        internal class ScriptLibraryConfigurationNode\r\n        {\r\n            /// <summary>\r\n            /// The full name of the assembly. If <c>assemblyUri</c> is not provided.\r\n            /// </summary>\r\n            public AssemblyName assemblyName;\r\n\r\n            /// <summary>\r\n            /// The full path to the assembly. If <c>assemblyName</c> is not provided.\r\n            /// </summary>\r\n            public Uri assemblyUrl;\r\n\r\n            /// <summary>\r\n            /// Relative root path to the scripts in library. Default is \".\".\r\n            /// </summary>\r\n            public string libraryRootPath;\r\n\r\n            /// <summary>\r\n            /// Value of the <c>url</c> attribute to allow removing the library\r\n            /// by this value within the nested configuration.\r\n            /// </summary>\r\n            public string urlNodeValue;\r\n\r\n            /// <summary>\r\n            /// Compares two ScriptLibraryConfigurationNode objects.\r\n            /// </summary>\r\n            /// <param name=\"obj\"></param>\r\n            /// <returns></returns>\r\n            public override bool Equals(object obj)\r\n            {\r\n                var node = obj as ScriptLibraryConfigurationNode;\r\n                if (node != null)\r\n                {\r\n                    if (string.Equals(node.urlNodeValue, this.urlNodeValue, StringComparison.Ordinal))\r\n                        return true;\r\n\r\n                    if (node.assemblyName != null && this.assemblyName != null)\r\n                        return AssemblyName.ReferenceMatchesDefinition(node.assemblyName, this.assemblyName);\r\n\r\n                    if (node.assemblyUrl != null && this.assemblyUrl != null)\r\n                        return node.assemblyUrl == this.assemblyUrl;\r\n\r\n                    return false;\r\n                }\r\n\r\n                return object.ReferenceEquals(this, obj);\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return base.GetHashCode();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// List of libraries to be loaded lazily.\r\n        /// </summary>\r\n        private List<ScriptLibraryConfigurationNode> libraries = null;\r\n\r\n        /// <summary>\r\n        /// Check if the given library was already and returns its index within <see cref=\"libraries\"/>.\r\n        /// </summary>\r\n        private int FindAddedLibrary(ScriptLibraryConfigurationNode/*!*/ desc)\r\n        {\r\n            return libraries.IndexOf(desc);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds new library to the script library.\r\n        /// </summary>\r\n        /// <returns>True if library was added, false if the library was not added.</returns>\r\n        public bool AddLibrary(string assemblyName, Uri assemblyUrl, string urlNodeValue, string libraryRootPath)\r\n        {\r\n            return AddLibrary(\r\n                new ScriptLibraryDatabase.ScriptLibraryConfigurationNode()\r\n                {\r\n                    assemblyUrl = assemblyUrl,\r\n                    assemblyName = (assemblyName != null) ? new AssemblyName(assemblyName) : null,\r\n                    urlNodeValue = urlNodeValue,\r\n                    libraryRootPath = libraryRootPath\r\n                });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes specified library from the list of libraries to be loaded lazily.\r\n        /// </summary>\r\n        /// <returns>True if library was removed.</returns>\r\n        public bool RemoveLibrary(string assemblyName, Uri assemblyUrl, string urlNodeValue, string libraryRootPath)\r\n        {\r\n            var existing = FindAddedLibrary(\r\n                new ScriptLibraryDatabase.ScriptLibraryConfigurationNode()\r\n                {\r\n                    assemblyUrl = assemblyUrl,\r\n                    assemblyName = (assemblyName != null) ? new AssemblyName(assemblyName) : null,\r\n                    urlNodeValue = urlNodeValue,\r\n                    libraryRootPath = libraryRootPath\r\n                });\r\n\r\n            if (existing >= 0)\r\n            {\r\n                libraries.RemoveAt(existing);\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clear the list of libraries to be loaded lazily.\r\n        /// </summary>\r\n        public void ClearLibraries()\r\n        {\r\n            libraries = null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds new library to the script library.\r\n        /// </summary>\r\n        /// <param name=\"desc\">Configuration of script library to be added and reflected later.</param>\r\n        /// <returns>True if library was added, false if the library was not added.</returns>\r\n        private bool AddLibrary(ScriptLibraryConfigurationNode/*!*/ desc)\r\n        {\r\n            Debug.Assert(desc != null);\r\n\r\n            if (libraries == null)\r\n            {\r\n                libraries = new List<ScriptLibraryConfigurationNode>();\r\n            }\r\n            else\r\n            {\r\n                // check for duplicity\r\n                if (FindAddedLibrary(desc) >= 0)\r\n                    return false;\r\n            }\r\n\r\n            // add the library configuration to be loaded lazily\r\n            libraries.Add(desc);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that libraries are reflected.\r\n        /// </summary>\r\n        internal void EnsureLibrariesReflected()\r\n        {\r\n            if (libraries != null)\r\n                lock (this)\r\n                    if (libraries != null)  // double checked lock\r\n                    {\r\n                        foreach (var lib in libraries)\r\n                        {\r\n                            applicationContext.AssemblyLoader.LoadScriptLibrary(\r\n                                    (lib.assemblyName != null) ? lib.assemblyName.FullName : null,\r\n                                    lib.assemblyUrl,\r\n                                    lib.libraryRootPath);\r\n                        }\r\n\r\n                        libraries = null;\r\n                    }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields and Properties\r\n\r\n        /// <summary>\r\n        /// Database of the library scripts. Cannot be null.\r\n        /// </summary>\r\n        private readonly Dictionary<FullPath, Entry>/*!*/entries = new Dictionary<FullPath, Entry>();\r\n\r\n        /// <summary>\r\n        /// Amount of scripts in the database.\r\n        /// </summary>\r\n        public int Count\r\n        {\r\n            get\r\n            {\r\n                EnsureLibrariesReflected();\r\n                return entries.Count;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Owning application context.\r\n        /// </summary>\r\n        private readonly ApplicationContext applicationContext;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates new ScriptLibraryDatabase object.\r\n        /// </summary>\r\n        /// <param name=\"context\">Owning application context.</param>\r\n        public ScriptLibraryDatabase(ApplicationContext context)\r\n        {\r\n            applicationContext = context;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ScriptLibrary methods\r\n\r\n        /// <summary>\r\n        /// Reflect given scriptAssembly and add its modules into <c>entries</c>.\r\n        /// </summary>\r\n        /// <param name=\"scriptAssembly\"><c>ScriptAssembly</c> to be reflected.</param>\r\n        internal void ReflectLibraryNoLock(ScriptAssembly scriptAssembly)\r\n        {\r\n            foreach (ScriptModule module in scriptAssembly.GetModules())\r\n            {\r\n                FullPath fullPath = new FullPath(module.RelativeSourcePath, Configuration.Application.Compiler.SourceRoot);\r\n\r\n                Entry entry = new Entry(fullPath, module, scriptAssembly);\r\n\r\n                if (!entries.ContainsKey(fullPath))\r\n                {\r\n                    entries.Add(fullPath, entry);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a known library script.\r\n        /// </summary>\r\n        /// <param name=\"path\">Application config-dependent path of the script.</param>\r\n        /// <returns>Library script corresponding to the supplied path, or null if there is no such script present in the script library.</returns>\r\n        public ScriptModule GetScriptModule(FullPath path)\r\n        {\r\n            EnsureLibrariesReflected();\r\n\r\n            Entry entry;\r\n            if (entries.TryGetValue(path, out entry) && entry != null)\r\n                return entry.ScriptModule;\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a value indicating whether the script library database contains given script.\r\n        /// </summary>\r\n        /// <param name=\"path\">Application config-dependent path of the script.</param>\r\n        /// <returns>True if the script is contained within the script library. Otherwise false.</returns>\r\n        public bool ContainsScript(FullPath path)\r\n        {\r\n            EnsureLibrariesReflected();\r\n            return entries.ContainsKey(path);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core/ApplicationContext.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Xml;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing System.Windows.Browser;\r\n#else\r\nusing System.Web;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    [DebuggerNonUserCode]\r\n    public sealed partial class ApplicationContext\r\n    {\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Whether full reflection of loaded libraries should be postponed until really needed.\r\n        /// Set to <B>false</B> by command line compiler (phpc) and web server manager as they both need\r\n        /// to compile source files. \r\n        /// </summary>\r\n        public bool LazyFullReflection { get { return lazyFullReflection; } }\r\n        private bool lazyFullReflection;\r\n\r\n        public Dictionary<string, DTypeDesc>/*!*/ Types { get { Debug.Assert(types != null); return types; } }\r\n        private readonly Dictionary<string, DTypeDesc> types;\r\n\r\n        public Dictionary<string, DRoutineDesc>/*!*/ Functions { get { Debug.Assert(functions != null); return functions; } }\r\n        private readonly Dictionary<string, DRoutineDesc> functions;\r\n\r\n        public DualDictionary<string, DConstantDesc>/*!*/ Constants { get { Debug.Assert(constants != null); return constants; } }\r\n        private readonly DualDictionary<string, DConstantDesc> constants;\r\n\r\n        /// <summary>\r\n        /// Associated assembly loader.\r\n        /// </summary>\r\n        /// <exception cref=\"InvalidOperationException\">Context is readonly.</exception>\r\n        public AssemblyLoader/*!*/ AssemblyLoader\r\n        {\r\n            get\r\n            {\r\n                Debug.Assert(assemblyLoader != null, \"Empty application context doesn't have a loader.\");\r\n                return assemblyLoader;\r\n            }\r\n        }\r\n        private readonly AssemblyLoader assemblyLoader;\r\n\r\n        /// <summary>\r\n        /// Assembly builder where compiled pieces of eval'd code are stored.\r\n        /// </summary>\r\n        internal TransientAssemblyBuilder/*!*/ TransientAssemblyBuilder\r\n        {\r\n            get\r\n            {\r\n                if (transientAssemblyBuilder == null)\r\n                    throw new InvalidOperationException();\r\n\r\n                return transientAssemblyBuilder;\r\n            }\r\n        }\r\n        private readonly TransientAssemblyBuilder transientAssemblyBuilder;\r\n\r\n        public bool HasTransientAssemblyBuilder { get { return transientAssemblyBuilder != null; } }\r\n\r\n        /// <summary>\r\n        /// Delegate checking for script existance. Created lazily, valid across all the requests on this <see cref=\"ApplicationContext\"/>.\r\n        /// </summary>\r\n        private Predicate<FullPath> fileExists = null;\r\n\r\n        #endregion\r\n\r\n        #region Default Contexts\r\n\r\n        private static object/*!*/ mutex = new object();\r\n\r\n        /// <summary>\r\n        /// Default context.\r\n        /// </summary>\r\n        public static ApplicationContext/*!*/ Default\r\n        {\r\n            get\r\n            {\r\n                if (_defaultContext == null)\r\n                    DefineDefaultContext(true, false, true);\r\n                return _defaultContext;\r\n            }\r\n        }\r\n        private static ApplicationContext _defaultContext; // lazy\r\n\r\n        public static bool DefineDefaultContext(bool lazyFullReflection, bool reflectionOnly, bool createTransientBuilder)\r\n        {\r\n            bool created = false;\r\n\r\n            if (_defaultContext == null)\r\n            {\r\n                lock (mutex)\r\n                {\r\n                    if (_defaultContext == null)\r\n                    {\r\n                        _defaultContext = new ApplicationContext(lazyFullReflection, reflectionOnly, createTransientBuilder);\r\n                        created = true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return created;\r\n        }\r\n\r\n        internal static readonly ApplicationContext/*!*/ Empty = new ApplicationContext();\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        private ApplicationContext()\r\n        {\r\n        }\r\n\r\n        public ApplicationContext(bool lazyFullReflection, bool reflectionOnly, bool createTransientBuilder)\r\n        {\r\n            this.lazyFullReflection = lazyFullReflection;\r\n\r\n            this.assemblyLoader = new AssemblyLoader(this, reflectionOnly);\r\n            this.transientAssemblyBuilder = createTransientBuilder ? new TransientAssemblyBuilder(this) : null;\r\n\r\n            this.types = new Dictionary<string, DTypeDesc>(StringComparer.OrdinalIgnoreCase);\r\n            this.functions = new Dictionary<string, DRoutineDesc>(StringComparer.OrdinalIgnoreCase);\r\n            this.constants = new DualDictionary<string, DConstantDesc>(null, StringComparer.OrdinalIgnoreCase);\r\n\r\n#if !SILVERLIGHT\r\n            this.scriptLibraryDatabase = new ScriptLibraryDatabase(this);\r\n#endif\r\n\r\n            PopulateTables();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Initialization\r\n\r\n        private void PopulateTables()\r\n        {\r\n            // primitive types (prefixed by '@' to prevent ambiguities with identifiers, e.g. i'Array'):\r\n            types.Add(\"@\" + QualifiedName.Integer.Name.Value, DTypeDesc.IntegerTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.Boolean.Name.Value, DTypeDesc.BooleanTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.LongInteger.Name.Value, DTypeDesc.LongIntegerTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.Double.Name.Value, DTypeDesc.DoubleTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.String.Name.Value, DTypeDesc.StringTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.Resource.Name.Value, DTypeDesc.ResourceTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.Array.Name.Value, DTypeDesc.ArrayTypeDesc);\r\n            types.Add(\"@\" + QualifiedName.Object.Name.Value, DTypeDesc.ObjectTypeDesc);\r\n\r\n            // types implemented in Core\r\n            Func<Type, DTypeDesc> addType = (x) =>\r\n            {\r\n                var typedesc = DTypeDesc.Create(x);\r\n                types.Add(x.Name, typedesc);\r\n                return typedesc;\r\n            };\r\n\r\n            addType(typeof(Library.stdClass));\r\n            addType(typeof(Library.__PHP_Incomplete_Class));\r\n            addType(typeof(Library.EventClass<>));\r\n\r\n            addType(typeof(Library.SPL.Countable));\r\n            addType(typeof(Library.SPL.ArrayAccess));\r\n            addType(typeof(Library.SPL.SplFixedArray));\r\n            addType(typeof(Library.SPL.ArrayObject));\r\n\r\n            addType(typeof(Library.SPL.Serializable));\r\n            addType(typeof(Library.SPL.SplObjectStorage));\r\n            addType(typeof(Library.SPL.SplObserver));\r\n            addType(typeof(Library.SPL.SplSubject));\r\n\r\n            addType(typeof(Library.SPL.Closure));\r\n\r\n            // Reflection:\r\n            AddExportMethod(addType(typeof(Library.SPL.Reflector)));\r\n            addType(typeof(Library.SPL.Reflection));\r\n            addType(typeof(Library.SPL.ReflectionClass));\r\n            addType(typeof(Library.SPL.ReflectionFunctionAbstract));\r\n            addType(typeof(Library.SPL.ReflectionFunction));\r\n            addType(typeof(Library.SPL.ReflectionMethod));\r\n            addType(typeof(Library.SPL.ReflectionProperty));\r\n            addType(typeof(Library.SPL.ReflectionException));\r\n\r\n            // Iterators:\r\n            addType(typeof(Library.SPL.Traversable));\r\n            addType(typeof(Library.SPL.Iterator));\r\n            addType(typeof(Library.SPL.IteratorAggregate));\r\n            addType(typeof(Library.SPL.SeekableIterator));\r\n            addType(typeof(Library.SPL.OuterIterator));\r\n            addType(typeof(Library.SPL.RecursiveIterator));\r\n            addType(typeof(Library.SPL.ArrayIterator));\r\n            addType(typeof(Library.SPL.EmptyIterator));\r\n            addType(typeof(Library.SPL.IteratorIterator));\r\n            addType(typeof(Library.SPL.AppendIterator));\r\n            addType(typeof(Library.SPL.FilterIterator));\r\n            addType(typeof(Library.SPL.RecursiveArrayIterator));\r\n            addType(typeof(Library.SPL.RecursiveIteratorIterator));\r\n\r\n            // Exception:\r\n            addType(typeof(Library.SPL.Exception));\r\n            addType(typeof(Library.SPL.RuntimeException));\r\n            addType(typeof(Library.SPL.ErrorException));\r\n            addType(typeof(Library.SPL.LogicException));\r\n            addType(typeof(Library.SPL.InvalidArgumentException));\r\n            addType(typeof(Library.SPL.OutOfRangeException));\r\n            addType(typeof(Library.SPL.BadFunctionCallException));\r\n            addType(typeof(Library.SPL.BadMethodCallException));\r\n            addType(typeof(Library.SPL.LengthException));\r\n            addType(typeof(Library.SPL.RangeException));\r\n            addType(typeof(Library.SPL.OutOfBoundsException));\r\n            addType(typeof(Library.SPL.OverflowException));\r\n            addType(typeof(Library.SPL.UnderflowException));\r\n            addType(typeof(Library.SPL.UnexpectedValueException));\r\n            addType(typeof(Library.SPL.DomainException));\r\n\r\n            // primitive constants\r\n            constants.Add(\"TRUE\", GlobalConstant.True.ConstantDesc, true);\r\n            constants.Add(\"FALSE\", GlobalConstant.False.ConstantDesc, true);\r\n            constants.Add(\"NULL\", GlobalConstant.Null.ConstantDesc, true);\r\n\r\n            // the constants are same for all platforms (Phalanger use Int32 for integers in PHP):\r\n            constants.Add(\"PHP_INT_SIZE\", GlobalConstant.PhpIntSize.ConstantDesc, false);\r\n            constants.Add(\"PHP_INT_MAX\", GlobalConstant.PhpIntMax.ConstantDesc, false);\r\n        }\r\n\r\n        #region HACK HACK HACK !!!\r\n\r\n        /// <remarks>\r\n        /// We have to inject <c>export</c> method into <see cref=\"Library.SPL.Reflector\"/> interface, since it cannot be written in C#\r\n        /// (abstract public static method with implementation in an interface). It could be declared in pure IL, but it would be ugly.\r\n        /// </remarks>\r\n        /// <param name=\"typedesc\"><see cref=\"DTypeDesc\"/> corresponding to <see cref=\"Library.SPL.Reflector\"/>.</param>\r\n        private void AddExportMethod(DTypeDesc/*!*/typedesc)\r\n        {\r\n            Debug.Assert(typedesc != null);\r\n            Debug.Assert(typedesc.RealType == typeof(Library.SPL.Reflector));\r\n\r\n            // public static object export( ScriptContext context ){ return null; }\r\n            AddMethodToType(typedesc, PhpMemberAttributes.Public | PhpMemberAttributes.Static | PhpMemberAttributes.Abstract, \"export\", null);\r\n        }\r\n\r\n        #endregion\r\n\r\n        internal void LoadModuleEntries(DModule/*!*/ module)\r\n        {\r\n            module.Reflect(!lazyFullReflection, types, functions, constants);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Libraries\r\n\r\n        public List<DAssembly>/*!*/ GetLoadedAssemblies()\r\n        {\r\n            return assemblyLoader.GetLoadedAssemblies<DAssembly>();\r\n        }\r\n\r\n        public IEnumerable<PhpLibraryAssembly>/*!*/ GetLoadedLibraries()\r\n        {\r\n            foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies<PhpLibraryAssembly>())\r\n                yield return library;\r\n        }\r\n\r\n        public IEnumerable<string>/*!*/ GetLoadedExtensions()\r\n        {\r\n            //if (assemblyLoader.ReflectionOnly)\r\n            //    throw new InvalidOperationException(\"Cannot retrieve list of extensions loaded for reflection only\");\r\n\r\n            foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies<PhpLibraryAssembly>())\r\n            {\r\n                foreach (string name in library.ImplementedExtensions)\r\n                    yield return name;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a library among currently loaded ones that implements an extension with a specified name.\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the extension to look for.</param>\r\n        /// <returns>The library descriptor.</returns>\r\n        /// <remarks>Not thread-safe. Not available at compilation domain.</remarks>\r\n        public PhpLibraryDescriptor/*!*/ GetExtensionImplementor(string name)\r\n        {\r\n            if (assemblyLoader.ReflectionOnly)\r\n                throw new InvalidOperationException(\"Cannot retrieve list of extensions loaded for reflection only\");\r\n\r\n            foreach (PhpLibraryAssembly library in assemblyLoader.GetLoadedAssemblies<PhpLibraryAssembly>())\r\n            {\r\n                if (CollectionUtils.ContainsString(library.ImplementedExtensions, name, true))\r\n                    return library.Descriptor;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helpers\r\n\r\n        public DRoutine GetFunction(QualifiedName qualifiedName, ref string/*!*/ fullName)\r\n        {\r\n            if (fullName == null)\r\n                fullName = qualifiedName.ToString();\r\n\r\n            DRoutineDesc desc;\r\n            return (functions.TryGetValue(fullName, out desc)) ? desc.Routine : null;\r\n        }\r\n\r\n        public DType GetType(QualifiedName qualifiedName, ref string/*!*/ fullName)\r\n        {\r\n            if (fullName == null)\r\n                fullName = qualifiedName.ToString();\r\n\r\n            DTypeDesc desc;\r\n            return (types.TryGetValue(fullName, out desc)) ? desc.Type : null;\r\n        }\r\n\r\n        public GlobalConstant GetConstant(QualifiedName qualifiedName, ref string/*!*/ fullName)\r\n        {\r\n            if (fullName == null)\r\n                fullName = qualifiedName.ToString();\r\n\r\n            DConstantDesc desc;\r\n            return (constants.TryGetValue(fullName, out desc)) ? desc.GlobalConstant : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a PHP type globally. Replaces any previous declaration.\r\n        /// To be called from the compiled scripts before library loading; libraries should check for conflicts.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void DeclareType(DTypeDesc/*!*/ typeDesc, string/*!*/ fullName)\r\n        {\r\n            types[fullName] = typeDesc;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a PHP type globally. Replaces any previous declaration.\r\n        /// To be called from the compiled scripts before library loading; libraries should check for conflicts.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void DeclareType(RuntimeTypeHandle/*!*/ typeHandle, string/*!*/ fullName)\r\n        {\r\n            types[fullName] = DTypeDesc.Create(typeHandle);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a PHP function globally. Replaces any previous declaration.\r\n        /// To be called from the compiled scripts before library loading; libraries should check for conflicts.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void DeclareFunction(RoutineDelegate/*!*/ arglessStub, string/*!*/ fullName, PhpMemberAttributes memberAttributes, MethodInfo argfull)\r\n        {\r\n            var desc = new PhpRoutineDesc(memberAttributes, arglessStub, true);\r\n\r\n            if (argfull != null)    // only if we have the argfull\r\n                new PurePhpFunction(desc, fullName, argfull);   // writes desc.Member\r\n\r\n            functions[fullName] = desc;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a PHP constant globally. Replaces any previous declaration.\r\n        /// To be called from the compiled scripts before library loading; libraries should check for conflicts.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void DeclareConstant(string/*!*/ fullName, object value)\r\n        {\r\n            constants[fullName, false] = new DConstantDesc(UnknownModule.RuntimeModule, PhpMemberAttributes.None, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checkes whether a type is transient.\r\n        /// </summary>\r\n        public bool IsTransientRealType(Type/*!*/ realType)\r\n        {\r\n            return transientAssemblyBuilder.IsTransientRealType(realType);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Build the delegate checking if the given script specified by its FullPath exists on available locations.\r\n        /// </summary>\r\n        /// <returns>Function determinig the given script existance or null if no script can be included with current configuration.</returns>\r\n        internal Predicate<FullPath> BuildFileExistsDelegate()\r\n        {\r\n            if (this.fileExists == null)\r\n            {\r\n                RequestContext context = RequestContext.CurrentContext;\r\n\r\n                Predicate<FullPath> file_exists = null;\r\n\r\n                // 1. ScriptLibrary database\r\n                var database = ScriptLibraryDatabase;\r\n                if (database != null && database.Count > 0)\r\n                    file_exists = file_exists.OrElse((path) => database.ContainsScript(path)); // file_exists can really be null\r\n\r\n                if (context != null)\r\n                {\r\n                    // on web, check following locations too:\r\n\r\n                    // 2. bin/WebPages.dll\r\n                    var msas = context.GetPrecompiledAssemblies();\r\n                    file_exists = file_exists.OrElse((path) => \r\n                        {\r\n                            foreach (var msa in msas)\r\n                                if (msa.ScriptExists(path))\r\n                                    return true;\r\n\r\n                            // path was not found in any msa\r\n                            return false;\r\n                        });\r\n                }\r\n                else\r\n                {\r\n                    // on non-web application, only script library should be checked\r\n                }\r\n\r\n                if (Configuration.IsBuildTime || !Configuration.Application.Compiler.OnlyPrecompiledCode)\r\n                {\r\n                    // 3. file system\r\n                    file_exists = file_exists.OrElse((path) => path.FileExists);\r\n                }\r\n\r\n                // remember in ApplicationContext\r\n                this.fileExists = file_exists;\r\n            }\r\n\r\n            return this.fileExists;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add at runtime a method to a type\r\n        /// </summary>\r\n        /// <param name=\"typedesc\">Type to modify</param>\r\n        /// <param name=\"attributes\">New method attributes</param>\r\n        /// <param name=\"func_name\">Method name</param>\r\n        /// <param name=\"callback\">Method body</param>\r\n        /// <remarks>Used by PDO_SQLITE</remarks>\r\n        public void AddMethodToType(DTypeDesc typedesc, PhpMemberAttributes attributes, string func_name, Func<object, PhpStack, object> callback)\r\n        {\r\n            Debug.Assert(typedesc != null);\r\n\r\n            var name = new Name(func_name);\r\n            var method_desc = new PhpRoutineDesc(typedesc, attributes);\r\n\r\n            if (!typedesc.Methods.ContainsKey(name))\r\n            {\r\n                typedesc.Methods.Add(name, method_desc);\r\n\r\n                // assign member:\r\n                if (method_desc.Member == null)\r\n                {\r\n                    Func<ScriptContext, object> dummyArgFullCallback = DummyArgFull;\r\n                    PhpMethod method = new PhpMethod(name, (PhpRoutineDesc)method_desc, dummyArgFullCallback.Method, (callback != null) ? callback.Method : null);\r\n                    method.WriteUp(PhpRoutineSignature.FromArgfullInfo(method, dummyArgFullCallback.Method));\r\n                    method_desc.Member = method;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add at runtime a constant to a type\r\n        /// </summary>\r\n        /// <param name=\"typedesc\">Type to modify</param>\r\n        /// <param name=\"attributes\">New const attributes</param>\r\n        /// <param name=\"const_name\">Const name</param>\r\n        /// <param name=\"value\">Const value</param>\r\n        /// <remarks>Used by PDO_MYSQL</remarks>\r\n        public void AddConstantToType(DTypeDesc typedesc, PhpMemberAttributes attributes, string const_name, object value)\r\n        {\r\n            Debug.Assert(typedesc != null);\r\n\r\n            VariableName name = new VariableName(const_name);\r\n            DConstantDesc const_desc = new DConstantDesc(typedesc, attributes, value);\r\n\r\n            if (!typedesc.Constants.ContainsKey(name))\r\n            {\r\n                typedesc.Constants.Add(name, const_desc);\r\n            }\r\n        }\r\n\r\n        [NeedsArgless]\r\n        private static object DummyArgFull(ScriptContext context)\r\n        {\r\n            Debug.Fail(\"This function should not be called thru argfull!\");\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region AssemblyLoader\r\n\r\n    public sealed partial class AssemblyLoader\r\n    {\r\n        /// <summary>\r\n        /// The owning AC.\r\n        /// </summary>\r\n        private readonly ApplicationContext/*!*/ applicationContext;\r\n\r\n        public bool ReflectionOnly { get { return reflectionOnly; } }\r\n        private readonly bool reflectionOnly;\r\n\r\n        public bool ClrReflectionOnly { get { return clrReflectionOnly; } }\r\n        private readonly bool clrReflectionOnly;\r\n\r\n        /// <summary>\r\n        /// Loaded assemblies. Contains all instances loaded by the loader. Synchronized.\r\n        /// </summary>\r\n        private readonly Dictionary<Assembly, DAssembly>/*!!*/ loadedAssemblies = new Dictionary<Assembly, DAssembly>();\r\n\r\n\r\n        internal AssemblyLoader(ApplicationContext/*!*/ applicationContext, bool reflectionOnly)\r\n        {\r\n            this.applicationContext = applicationContext;\r\n            this.reflectionOnly = reflectionOnly;\r\n\r\n            // not supported yet:\r\n            this.clrReflectionOnly = false;\r\n        }\r\n\r\n        internal Assembly LoadRealAssembly(string/*!*/ target)\r\n        {\r\n#if SILVERLIGHT\r\n\t\t\treturn Assembly.Load(target);\r\n#else\r\n            return (clrReflectionOnly) ? Assembly.ReflectionOnlyLoad(target) : Assembly.Load(target);\r\n#endif\r\n        }\r\n\r\n        internal Assembly LoadRealAssemblyFrom(string/*!*/ target)\r\n        {\r\n#if SILVERLIGHT\r\n\t\t\treturn Assembly.LoadFrom(target);\r\n#else\r\n            return (clrReflectionOnly) ? Assembly.ReflectionOnlyLoadFrom(target) : Assembly.LoadFrom(target);\r\n#endif\r\n        }\r\n\r\n        public List<T> GetLoadedAssemblies<T>()\r\n            where T : DAssembly\r\n        {\r\n            lock (this)\r\n            {\r\n                List<T> result = new List<T>(loadedAssemblies.Count);\r\n\r\n                foreach (DAssembly loaded_assembly in loadedAssemblies.Values)\r\n                {\r\n                    T assembly = loaded_assembly as T;\r\n                    if (assembly != null)\r\n                        result.Add(assembly);\r\n                }\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads a library assembly given its name and configuration node.\r\n        /// </summary>\r\n        /// <param name=\"assemblyName\">Long assembly name (see <see cref=\"Assembly.Load\"/>) or a <B>null</B> reference.</param>\r\n        /// <param name=\"assemblyUrl\">Assembly file absolute URI or a <B>null</B> reference.</param>\r\n        /// <param name=\"config\">Configuration node describing the assembly to load (or a <B>null</B> reference).</param>\r\n        /// <exception cref=\"ConfigurationErrorsException\">An error occured while loading the library.</exception>\r\n        public DAssembly/*!*/ Load(string assemblyName, Uri assemblyUrl, LibraryConfigStore config)\r\n        {\r\n            if (assemblyName == null && assemblyUrl == null)\r\n                throw new ArgumentNullException(\"assemblyName\");\r\n\r\n            if (assemblyUrl != null && !assemblyUrl.IsAbsoluteUri)\r\n                throw new ArgumentException(\"Absolute URL expected\", \"assemblyUrl\");\r\n\r\n            string target = null;\r\n\r\n            try\r\n            {\r\n                if (assemblyName != null)\r\n                {\r\n                    // load assembly by full name:\r\n                    target = assemblyName;\r\n\r\n                    return Load(LoadRealAssembly(target), config);\r\n                }\r\n                else\r\n                {\r\n                    // load by URI:\r\n                    target = HttpUtility.UrlDecode(assemblyUrl.AbsoluteUri);\r\n\r\n                    return Load(LoadRealAssemblyFrom(target), config);\r\n                }\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new ConfigurationErrorsException\r\n                    (CoreResources.GetString(\"library_assembly_loading_failed\", target) + \" \" + e.Message, e);\r\n            }\r\n        }\r\n\r\n        public DAssembly/*!*/ Load(Assembly/*!*/ realAssembly, LibraryConfigStore config)\r\n        {\r\n            Debug.Assert(realAssembly != null);\r\n\r\n            DAssembly assembly;\r\n\r\n            lock (this)\r\n            {\r\n                if (loadedAssemblies.TryGetValue(realAssembly, out assembly))\r\n                    return assembly;\r\n\r\n                assembly = DAssembly.CreateNoLock(applicationContext, realAssembly, config);\r\n\r\n                // load the members contained in the assembly to the global tables:\r\n                applicationContext.LoadModuleEntries(assembly.ExportModule);\r\n\r\n                // add the assembly into loaded assemblies list now, so if LoadModuleEntries throws, assembly is not skipped within the next request!\r\n                loadedAssemblies.Add(realAssembly, assembly);\r\n            }\r\n\r\n            if (!reflectionOnly)\r\n                assembly.LoadCompileTimeReferencedAssemblies(this);\r\n\r\n            return assembly;\r\n        }\r\n\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2005-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, Pavel Novak, Jan Benda and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Security;\r\nusing System.Runtime.CompilerServices;\r\nusing System;\r\n\r\n#if !SILVERLIGHT\r\n[assembly: AssemblyTitle(\"Phalanger Core\")]\r\n[assembly: AssemblyDescription(\"Phalanger Core Functionality\")]\r\n//[assembly: AllowPartiallyTrustedCallers]\r\n#else\r\n[assembly: AssemblyTitle(\"Phalanger Core (Silverlight)\")]\r\n[assembly: AssemblyDescription(\"Phalanger Core Functionality (Silverlight)\")]\r\n#endif\r\n\r\n//[assembly: InternalsVisibleTo(\"PhpNetClasslibrary, PublicKey=0024000004800000940000000602000000240000525341310004000001000100611b1c313d77d51b5ac4d5b309e8712919634a716ae826dd133e722fe5e4f10012a8b96c40b7098d669ac5f78581b83cfa412d1a436a65450fac212d0d2dca824f8b1ab51b98af6d44d14ffd9a7aacd21e23557971564886df047070ca34d51869f3eddfb343739ee014e1b117772885fbc0758232461c5db7c659ca98b981a9\")]\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core.CodeDom, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3c182f57d3158a916b477e7fbdb05d2733bf65c53e5ad976bd1af240211998dd8ffb116d73e2d2059909f1578a4031b3a33c0dc892d22834960f413ca1ebbe0cfe631c84d4ba26cb5f44f4fd8785a08260d44600fa6b6fddd8a4ace4d7d86a9f5d7884539b343973d8b4ac305ccffda775c493326aee5284e8b963b297a7eb9\")]\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cfbcc1fd851a8a7bdbea1fcd2a974e9b30d66e78bd559ee4b6601165b95bf88fa560523627862acffc0480b1ed91ee84220e76473a3f93e394fb3f452dea4928b915f3f994d26a5863956f1ccf5f772176a70371cac2a9ace9dfc756cc4033ef192b880bac533ee800ccdea929c5d51dbfc7e5003f23753916438f3dd6d7889d\")]\r\n[assembly: InternalsVisibleTo(\"Phalanger.LanguageService, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b74f6114dcb75b60485b38820a516d1592ba89587f8449feac300570596bddac07226721e06178a9d2f8fbf0887bde659421378186cf0bfa31908b8f1965cc2cebeba22c9b232fb6cf5183eb12588bbdd61f0df0b390352f8be981f950642fedb8ad7cb241808f233cecb8ebaa2eb45b657744e95200c51ec39b686c66ad2eb6\")]\r\n[assembly: InternalsVisibleTo(\"ControlFlow, PublicKey=00240000048000009400000006020000002400005253413100040000010001007f76493bf62c3a11fc4aedde33c9767dc38c5300dd9c3e7df13a766f4a0abc85fdee440584ba1d122cc9a0d220a78dd3532b4d7e4a4365d5347d183fc9bceacdc18336c66bb71b5f0a02ede53a080136f39f44482c35a4f96c8dece4a9953c4ec7234e6609d57754c1069efcd96f1c3e32be0cb8f3a97f48a426472e5e0c02ba\")]\r\n[assembly: InternalsVisibleTo(\"ControlFlow.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001003d5731df28b262d8074a2f2b55dcf9a636fc1f2d3728dcad1f79f62d6f1bbccf2e3c958db6d2fe63091addd056ffb2bed42f585b8e1b15e2d86d6514946bd97a9e52e43ac6c93282e68e6253e3491fd300f07d817b523bd772697fd40e1ed488cf7808724dfaacb8bfead864a084a62ed13a367ef066d69649e5a427ea8d49be\")]\r\n"
  },
  {
    "path": "Source/Core/Attributes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Linq;\r\nusing PHP.Core.Emit;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Assemblies\r\n\r\n\t[Serializable]\r\n\tpublic abstract class DAssemblyAttribute : Attribute\r\n\t{\r\n\t\tinternal static DAssemblyAttribute Reflect(Assembly/*!*/ assembly)\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\tDebug.Assert(!assembly.ReflectionOnly);\r\n#endif\r\n\t\t\tobject[] attrs = assembly.GetCustomAttributes(typeof(DAssemblyAttribute), false);\r\n\t\t\treturn (attrs.Length == 1) ? (DAssemblyAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n\t[Serializable]\r\n\tpublic abstract class PhpAssemblyAttribute : DAssemblyAttribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Identifies PHP library assembly or extension.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\t[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]\r\n\tpublic class PhpLibraryAttribute : DAssemblyAttribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Name of the type describing the assembly. \r\n\t\t/// Either a name of the type in the declaring assembly, a fully qualified name containing an assembly name\r\n\t\t/// or a <B>null</B> reference if a default descriptor can be used.\r\n\t\t/// </summary>\r\n\t\tpublic Type Descriptor { get { return descriptor; } }\r\n        private readonly Type descriptor;\r\n\r\n\t\tpublic bool IsPure { get { return isPure; } }\r\n\t\tprivate readonly bool isPure;\r\n\r\n\t\tpublic bool ContainsDynamicStubs { get { return containsDynamicStubs; } }\r\n        private readonly bool containsDynamicStubs;\r\n\r\n\t\tpublic string/*!*/ Name { get { return name; } }\r\n        private readonly string/*!*/ name;\r\n\r\n        public string[]/*!*/ ImplementsExtensions { get { return implementsExtensions; } }\r\n        private readonly string[]/*!*/ implementsExtensions;\r\n\r\n        /// <summary>\r\n        /// Used by hand-written libraries in PHP.\r\n        /// </summary>\r\n        /// <param name=\"descriptor\">The type derived from <c>PhpLibraryDescriptor</c> class. Can be null to use default implementation.</param>\r\n        /// <param name=\"name\">The human readable name of the extension.</param>\r\n        /// <remarks>List of implemented extensions <c>ImplementsExtensions</c> is an empty array. Extensions using\r\n        /// this attribute does not populate any list of implemented PHP extensions.</remarks>\r\n        public PhpLibraryAttribute(Type descriptor, string/*!*/ name)\r\n            : this(descriptor, name, ArrayUtils.EmptyStrings, false, false)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used by hand-written libraries.\r\n        /// </summary>\r\n        public PhpLibraryAttribute(Type descriptor, string/*!*/ name, string[]/*!*/implementsExtensions)\r\n\t\t\t: this(descriptor, name, implementsExtensions, false, false)\r\n\t\t{\r\n\t\t\t\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Used by hand-written libraries.\r\n        /// </summary>\r\n        public PhpLibraryAttribute(Type descriptor, string/*!*/ name, string[]/*!*/implementsExtensions, bool isPure, bool containsDynamicStubs)\r\n\t\t{\r\n            // descriptor can be null, default descriptor is used then, needed at least for the Extension PHP project\r\n            //if (descriptor == null)\r\n            //    throw new ArgumentNullException(\"descriptorName\");\r\n            if (descriptor != null && !typeof(PhpLibraryDescriptor).IsAssignableFrom(descriptor))\r\n                throw new ArgumentNullException(\"descriptor\", \"The type must be derived from PHP.Core.PhpLibraryDescriptor class.\");\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n            if (implementsExtensions == null)\r\n                throw new ArgumentNullException(\"implementsExtensions\");\r\n\r\n\t\t\tthis.descriptor = descriptor;\r\n\t\t\tthis.isPure = isPure;\r\n\t\t\tthis.containsDynamicStubs = containsDynamicStubs;\r\n\t\t\tthis.name = name;\r\n            this.implementsExtensions = implementsExtensions;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t *  TODO: Not needed???\r\n\t\t * \r\n\t\tpublic static PhpLibraryAttribute/*!* / Reflect(CustomAttributeData/*!* / data)\r\n\t\t{\r\n\t\t\tif (data == null) \r\n\t\t\t\tthrow new ArgumentNullException(\"data\");\r\n\t\t\t\t\r\n\t\t\tswitch (data.ConstructorArguments.Count)\r\n\t\t\t{\r\n\t\t\t\tcase 2: return new PhpLibraryAttribute(\r\n\t\t\t\t\t(Type)data.ConstructorArguments[0].Value,\r\n\t\t\t\t\t(string)data.ConstructorArguments[1].Value);\r\n\t\t\t\tcase 3: return new PhpLibraryAttribute(\r\n\t\t\t\t\t(Type)data.ConstructorArguments[0].Value,\r\n\t\t\t\t\t(string)data.ConstructorArguments[1].Value,\r\n\t\t\t\t\t(bool)data.ConstructorArguments[2].Value, \r\n\t\t\t\t\t(bool)data.ConstructorArguments[3].Value);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthrow new ArgumentException();\r\n\t\t}*/\r\n\t}\r\n\r\n    /// <summary>\r\n\t/// Identifies PHP extension written in PHP pure mode.\r\n    /// It has only PHP literals as parameters and it has dynamic stubs contained already.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\t[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]\r\n\tpublic class PhpExtensionAttribute : PhpLibraryAttribute\r\n    {\r\n        public PhpExtensionAttribute(string/*!*/name)\r\n            :base(null, name, ArrayUtils.EmptyStrings, false, true)\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n\t/// Marks Phalanger compiled PHP script assemblies.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ScriptAssemblyAttribute : PhpAssemblyAttribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Determines whether there are multiple scripts stored in the assembly.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsMultiScript { get { return isMultiScript; } }\r\n\t\tprivate readonly bool isMultiScript;\r\n\r\n        /// <summary>\r\n        /// <see cref=\"Type\"/> of a <c>&lt;Script&gt;</c> class in case of SingleScriptAssembly.\r\n        /// </summary>\r\n        public Type SSAScriptType { get { return ssaScriptType; } }\r\n        private readonly Type ssaScriptType;\r\n\r\n\t\tpublic ScriptAssemblyAttribute(bool isMultiScript, Type ssaScriptType)\r\n\t\t{\r\n\t\t\tthis.isMultiScript = isMultiScript;\r\n            this.ssaScriptType = ssaScriptType;\r\n\t\t}\r\n\r\n\t\tinternal new static ScriptAssemblyAttribute Reflect(Assembly/*!*/ assembly)\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\tDebug.Assert(!assembly.ReflectionOnly);\r\n#endif\r\n\t\t\tobject[] attrs = assembly.GetCustomAttributes(typeof(ScriptAssemblyAttribute), false);\r\n\t\t\treturn (attrs.Length == 1) ? (ScriptAssemblyAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks Phalanger compiled pure assemblies.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PurePhpAssemblyAttribute : PhpAssemblyAttribute\r\n\t{\r\n\t\tpublic string[]/*!*/ ReferencedAssemblies { get { return referencedAssemblies; } }\r\n\t\tprivate string[]/*!*/ referencedAssemblies;\r\n\r\n\t\tpublic PurePhpAssemblyAttribute(string[]/*!*/ referencedAssemblies)\r\n\t\t{\r\n\t\t\tthis.referencedAssemblies = referencedAssemblies;\r\n\t\t}\r\n\r\n\t\t/* TODO: Not needed?\r\n\t\tpublic static PurePhpAssemblyAttribute/*!* / Reflect(CustomAttributeData/*!* / data)\r\n\t\t{\r\n\t\t\tif (data == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"data\");\r\n\r\n\t\t\tswitch (data.ConstructorArguments.Count)\r\n\t\t\t{\r\n\t\t\t\tcase 1: return new PurePhpAssemblyAttribute((string[])data.ConstructorArguments[0].Value);\r\n\t\t\t}\r\n\r\n\t\t\tthrow new ArgumentException();\r\n\t\t}*/\r\n\r\n\t\tinternal new static PurePhpAssemblyAttribute Reflect(Assembly/*!*/ assembly)\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\tDebug.Assert(!assembly.ReflectionOnly);\r\n#endif\r\n\t\t\tobject[] attrs = assembly.GetCustomAttributes(typeof(PurePhpAssemblyAttribute), false);\r\n\t\t\treturn (attrs.Length == 1) ? (PurePhpAssemblyAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n    #endregion\r\n\r\n\t#region Language\r\n\r\n\t/// <summary>\r\n\t/// Marks types of the Class Library which should be viewed as PHP classes or interfaces.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ImplementsTypeAttribute : Attribute\r\n\t{\r\n        /// <summary>\r\n        /// If not <c>null</c>, defines the PHP type name instead of the reflected name. CLR notation of namespaces.\r\n        /// </summary>\r\n        public readonly string PHPTypeName;\r\n\r\n        /// <summary>\r\n        /// Initialized new instance of <see cref=\"ImplementsTypeAttribute\"/> specifying that\r\n        /// the type is visible in PHP code and the type is named using the reflected <see cref=\"Type.FullName\"/>.\r\n        /// </summary>\r\n\t\tpublic ImplementsTypeAttribute()\r\n\t\t{\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initialized new instance of <see cref=\"ImplementsTypeAttribute\"/> with PHP type name specified.\r\n        /// </summary>\r\n        /// <param name=\"PHPTypeName\">If not <c>null</c>, defines the PHP type name instead of the reflected name. Uses CLR notation of namespaces.</param>\r\n        /// <remarks>This overload is only valid within class library types.</remarks>\r\n        public ImplementsTypeAttribute(string PHPTypeName)\r\n        {\r\n            Debug.Assert(!string.IsNullOrWhiteSpace(PHPTypeName));\r\n            Debug.Assert(!PHPTypeName.Contains(QualifiedName.Separator));\r\n            \r\n            this.PHPTypeName = PHPTypeName;\r\n        }\r\n\r\n        internal static ImplementsTypeAttribute Reflect(Type/*!*/type)\r\n        {\r\n            Debug.Assert(type != null);\r\n            var attrs = type.GetCustomAttributes(typeof(ImplementsTypeAttribute), false);\r\n            return (attrs != null && attrs.Length == 1) ? (ImplementsTypeAttribute)attrs[0] : null;\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// An attibute storing PHP formal argument type hints.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class DTypeSpecAttribute : Attribute\r\n\t{\r\n\t\tinternal DTypeSpec TypeSpec { get { return typeSpec; } }\r\n\t\tprivate DTypeSpec typeSpec;\r\n\r\n\t\tpublic DTypeSpecAttribute(int data0, int data1)\r\n\t\t{\r\n\t\t\ttypeSpec = new DTypeSpec(new int[] { data0, data1 });\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpecAttribute(int[]/*!*/ data)\r\n\t\t{\r\n\t\t\ttypeSpec = new DTypeSpec(data);\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpecAttribute(int data0, int data1, byte[]/*!*/ strings)\r\n\t\t{\r\n\t\t\ttypeSpec = new DTypeSpec(new int[] { data0, data1 }, strings);\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpecAttribute(int[]/*!*/ data, byte[]/*!*/ strings)\r\n\t\t{\r\n\t\t\ttypeSpec = new DTypeSpec(data, strings);\r\n\t\t}\r\n\r\n\t\tinternal static DTypeSpecAttribute Reflect(ICustomAttributeProvider/*!*/ parameterInfo)\r\n\t\t{\r\n\t\t\tobject[] attrs = parameterInfo.GetCustomAttributes(typeof(DTypeSpecAttribute), false);\r\n\t\t\treturn (attrs.Length == 1) ? (DTypeSpecAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class RoutineAttribute : Attribute\r\n\t{\r\n\t\tprivate RoutineProperties properties;\r\n\r\n\t\tpublic RoutineAttribute(RoutineProperties properties)\r\n\t\t{\r\n\t\t\tthis.properties = properties;\r\n\t\t}\r\n\r\n\t\tpublic RoutineProperties Properties { get { return properties; } }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks namespace-private PHP types and functions.\r\n\t/// </summary>\r\n\t/// <remarks>Attribute is used by <see cref=\"Reflection\"/>.</remarks>\r\n\t[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpNamespacePrivateAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Marks CLR type representing a PHP trait.\r\n    /// </summary>\r\n    /// <remarks>Attribute is used by <see cref=\"Reflection\"/>.</remarks>\r\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n    public sealed class PhpTraitAttribute : Attribute\r\n    {\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// CLI does not allow static final methods. If a static method is declared as\r\n\t/// final, it is marked with this attribute.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpFinalAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// CLI does not allow static abstract methods. If a  static method is declared as\r\n\t/// abstract, it is marked with this attribute.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpAbstractAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Class field that have an init value is marked with this attribute.\r\n\t/// </summary>\r\n\t/// <remarks>Attribute is used by <see cref=\"Reflection\"/>.</remarks>\r\n\t[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpHasInitValueAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Interface method marked by this attribute can be implemented without adhering to its return type.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// An interface method returning by reference (<B>&amp;</B>) that is decorated by this attribute\r\n\t/// can be implemented by a method that does not return by reference.\r\n\t/// Attribute is used by <see cref=\"Reflection\"/>.\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class AllowReturnValueOverrideAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Interface method marked by this attribute can be implemented without adhering to its parameters.\r\n\t/// </summary>\r\n\t/// <remarks>Attribute is used by <see cref=\"Reflection\"/>.</remarks>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class AllowParametersOverrideAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// PHP allows increasing visibility of fields that are declared as protected\r\n\t/// in ancestor class. A class that increases the visibility declares no field\r\n\t/// but is marked with that attribute.\r\n\t/// </summary>\r\n\t/// <remarks>Attribute is used by <see cref=\"Reflection\"/>.</remarks>\r\n\t[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpPublicFieldAttribute : Attribute\r\n\t{\r\n\t\tprivate string fieldName;\r\n\t\tprivate bool isStatic;\r\n\t\tprivate bool hasInitValue;\r\n\r\n\t\tpublic PhpPublicFieldAttribute(string fieldName, bool isStatic, bool hasInitValue)\r\n\t\t{\r\n\t\t\tthis.fieldName = fieldName;\r\n\t\t\tthis.isStatic = isStatic;\r\n\t\t\tthis.hasInitValue = hasInitValue;\r\n\t\t}\r\n\r\n\t\tpublic string FieldName { get { return fieldName; } }\r\n\t\tpublic bool IsStatic { get { return isStatic; } }\r\n\t\tpublic bool HasInitValue { get { return hasInitValue; } }\r\n\t}\r\n\r\n\tpublic abstract class PseudoCustomAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class |\r\n\t  AttributeTargets.Interface | AttributeTargets.Constructor | AttributeTargets.Method |\r\n\t  AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ExportAttribute : PseudoCustomAttribute\r\n\t{\r\n\t\tinternal static readonly ExportAttribute/*!*/ Default = new ExportAttribute();\r\n\r\n\t\tpublic ExportAttribute()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class AppStaticAttribute : PseudoCustomAttribute\r\n\t{\r\n\t\tpublic AppStaticAttribute()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Class Library and Extensions\r\n\r\n\t/// <summary>\r\n\t/// Options of the function implementation.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum FunctionImplOptions : ushort\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// No options defined.\r\n\t\t/// </summary>\r\n\t\tNone = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// <see cref=\"IDictionary\"/> of declared variables will be passed to the first argument.\r\n\t\t/// </summary>\r\n\t\tNeedsVariables = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the function accesses currently executed PHP function arguments.\r\n\t\t/// </summary>\r\n\t\tNeedsFunctionArguments = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the function needs to access instance of the object calling the function ($this reference)\r\n\t\t/// </summary>\r\n\t\tNeedsThisReference = 4,\r\n\r\n        ///// <summary>\r\n        ///// Whether the function is special for compiler. Setting this flag implies changes in compiler so\r\n        ///// only compiler writers should set it. \r\n        ///// </summary>\r\n        //Special = 8,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Function is not supported.\r\n\t\t/// </summary>\r\n\t\tNotSupported = 16,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Function is internal.\r\n\t\t/// </summary>\r\n\t\tInternal = 32,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Captures eval to the current <see cref=\"ScriptContext\"/>. \r\n\t\t/// The captured values has to be reset immediately before the method returns.\r\n\t\t/// </summary>\r\n\t\tCaptureEvalInfo = 64,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the function uses the current naming context.\r\n\t\t/// </summary>\r\n\t\tNeedsNamingContext = 128,\r\n\r\n        /// <summary>\r\n        /// Needs DTypeDesc class context of the caller.\r\n        /// </summary>\r\n        NeedsClassContext = 256,\r\n\r\n        /// <summary>\r\n        /// Needs DTypeDesc class context of the late static binding.\r\n        /// </summary>\r\n        NeedsLateStaticBind = 512,\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks static methods of the Class Library which implements PHP functions.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ImplementsFunctionAttribute : Attribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the <see cref=\"ImplementsFunctionAttribute\"/> attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the PHP function implemented by marked method.</param>\r\n\t\tpublic ImplementsFunctionAttribute(string name)\r\n\t\t\t: this(name, FunctionImplOptions.None)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the <see cref=\"ImplementsFunctionAttribute\"/> attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the PHP function implemented by marked method.</param>\r\n\t\t/// <param name=\"options\">Options.</param>\r\n\t\tpublic ImplementsFunctionAttribute(string name, FunctionImplOptions options)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.options = options;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the PHP function.\r\n\t\t/// </summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate string name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Options.\r\n\t\t/// </summary>\r\n\t\tpublic FunctionImplOptions Options { get { return options; } }\r\n\t\tprivate FunctionImplOptions options;\r\n\r\n\t\tinternal static ImplementsFunctionAttribute Reflect(MethodBase/*!*/ method)\r\n\t\t{\r\n\t\t\tobject[] attributes = method.GetCustomAttributes(Emit.Types.ImplementsFunctionAttribute, false);\r\n\t\t\treturn (attributes.Length == 1) ? (ImplementsFunctionAttribute)attributes[0] : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflects an assembly, but also supports a case where Phalanger is reflecting\r\n\t\t/// Silverlight version of the assembly (and so the type of attribute is different)\r\n\t\t/// </summary>\r\n        /// <param name=\"attrType\"></param>\r\n\t\t/// <param name=\"method\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tinternal static ImplementsFunctionAttribute ReflectDynamic(Type/*!*/ attrType, MethodBase/*!*/ method)\r\n\t\t{\r\n\t\t\tobject[] attributes = method.GetCustomAttributes(attrType, false);\r\n\t\t\tif (attributes.Length == 1)\r\n\t\t\t{\r\n                string name = (string)attrType.GetProperty(\"Name\").GetValue(attributes[0], ArrayUtils.EmptyObjects);\r\n                object options = attrType.GetProperty(\"Options\").GetValue(attributes[0], ArrayUtils.EmptyObjects);\r\n\t\t\t\tint opt = System.Convert.ToInt32(options);\r\n\t\t\t\treturn new ImplementsFunctionAttribute(name, (FunctionImplOptions)opt);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Marks class library function that the specified method is pure. Therefore it can be evaluated at the compilation time.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PureFunctionAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// True if special method must be called for compile-time evaluation.\r\n        /// </summary>\r\n        public bool CallSpecialMethod { get { return SpecialMethodType != null && SpecialMethodName != null; } }\r\n\r\n        /// <summary>\r\n        /// MethodInfo of the method to be used during the compile-time evaluation.\r\n        /// </summary>\r\n        public MethodInfo SpecialMethod\r\n        {\r\n            get\r\n            {\r\n                Debug.Assert(CallSpecialMethod);\r\n                return SpecialMethodType.GetMethod(SpecialMethodName, BindingFlags.Static | BindingFlags.Public);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Type containing special method to be called for compile-time evaluation.\r\n        /// </summary>\r\n        private Type SpecialMethodType { get; set; }\r\n\r\n        /// <summary>\r\n        /// Special method name to be called for compile-time evaluation.\r\n        /// </summary>\r\n        private string SpecialMethodName { get; set; }\r\n\r\n        /// <summary>\r\n        /// Creates an instance of the <see cref=\"PureFunctionAttribute\"/> attribute. Used if the method can be called during the compile-time evaluation.\r\n        /// </summary>\r\n        public PureFunctionAttribute()\r\n            : this(null, null)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates an instance of the <see cref=\"PureFunctionAttribute\"/> attribute. Used if another method must be called during the compile-time evaluation.\r\n        /// </summary>\r\n        /// <param name=\"specialMethodType\">Type containing special method to be called for compile-time evaluation.</param>\r\n        /// <param name=\"specialMethodName\">Special method name to be called for compile-time evaluation.</param>\r\n        public PureFunctionAttribute(Type specialMethodType, string specialMethodName)\r\n        {\r\n            this.SpecialMethodType = specialMethodType;\r\n            this.SpecialMethodName = specialMethodName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reflect the given MethodBase to fund the PureFunctionAttribute.\r\n        /// </summary>\r\n        /// <param name=\"method\">The method where to find PureFunctionAttribute.</param>\r\n        /// <returns>PureFunctionAttribute of the <c>method</c> or null if the attribute was not found.</returns>\r\n        internal static PureFunctionAttribute Reflect(MethodBase/*!*/ method)\r\n        {\r\n            object[] attributes = method.GetCustomAttributes(typeof(PureFunctionAttribute), false);\r\n            return (attributes.Length == 1) ? (PureFunctionAttribute)attributes[0] : null;\r\n        }\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// Marks the pseudo-this parameter of a class library method.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The method should be static and the parameter marked by this attribute should have the\r\n\t/// enclosing type. Use this attribute when the method must be callable both using an instance\r\n\t/// and statically (e.g. <c>DOMDocument::load</c>).\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ThisAttribute : Attribute\r\n\t{\r\n\t\tpublic ThisAttribute()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks a nullable parameter of a class library method.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// When a parameter of a reference type is marked by this attribute, <B>null</B> is also a legal\r\n\t/// argument value.\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class NullableAttribute : Attribute\r\n\t{\r\n\t\tpublic NullableAttribute()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks methods of the Class Library which implement PHP methods.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ImplementsMethodAttribute : Attribute\r\n\t{\r\n\t\tpublic ImplementsMethodAttribute()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks properties/methods of Class Library types which should be exposed to PHP.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpVisibleAttribute : Attribute\r\n\t{\r\n\t\tpublic PhpVisibleAttribute()\r\n\t\t{\r\n\t\t}\r\n\r\n        internal static PhpVisibleAttribute Reflect(MemberInfo/*!*/ info)\r\n        {\r\n            object[] attributes = info.GetCustomAttributes(typeof(PhpVisibleAttribute), false);\r\n            return (attributes.Length == 1) ? (PhpVisibleAttribute)attributes[0] : null;\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks constants and items of enumerations in the Class Library which represent PHP constants.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ImplementsConstantAttribute : Attribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the <see cref=\"ImplementsConstantAttribute\"/> attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the PHP constant implemented by marked constant or enum item.</param>\r\n\t\tpublic ImplementsConstantAttribute(string name)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.caseInsensitive = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the PHP constant.\r\n\t\t/// </summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate string name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the constant name is not case sensitive.\r\n\t\t/// </summary>\r\n\t\tpublic bool CaseInsensitive { get { return caseInsensitive; } set { caseInsensitive = value; } }\r\n\t\tprivate bool caseInsensitive;\r\n\r\n\t\tinternal static ImplementsConstantAttribute Reflect(FieldInfo/*!*/ field)\r\n\t\t{\r\n\t\t\tobject[] attributes = field.GetCustomAttributes(typeof(ImplementsConstantAttribute), false);\r\n\t\t\treturn (attributes.Length == 1) ? (ImplementsConstantAttribute)attributes[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks classes in the Class Library which implements a part or entire PHP extension.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Libraries which implements more than one extension should use the attribute \r\n\t/// to distinguish which types belongs to which extension. If the library implements a single extension\r\n\t/// it is not required to use the attribute.\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ImplementsExtensionAttribute : Attribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the <see cref=\"ImplementsExtensionAttribute\"/> attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the PHP extension.</param>\r\n\t\tpublic ImplementsExtensionAttribute(string name)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the PHP extension.\r\n\t\t/// </summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate string name;\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks return values of methods implementing PHP functions which returns <B>false</B> on error\r\n\t/// but has other return type than <see cref=\"bool\"/> or <see cref=\"object\"/>.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Compiler takes care of converting a return value of a method into <B>false</B> if necessary.\r\n\t/// An attribute can be applied only on return values of type <see cref=\"int\"/> (-1 is converted to <B>false</B>)\r\n\t/// or of a reference type (<B>null</B> is converted to <B>false</B>).\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.ReturnValue, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class CastToFalseAttribute : Attribute\r\n\t{\r\n\t\tpublic CastToFalseAttribute()\r\n\t\t{\r\n\t\t}\r\n        \r\n        /// <summary>\r\n        /// Determine wheter the attribute is defined for given <paramref name=\"method\"/>.\r\n        /// </summary>\r\n        /// <param name=\"method\"><see cref=\"MethodInfo\"/> to check for the attribute.</param>\r\n        /// <returns>True iff given <paramref name=\"method\"/> has <see cref=\"CastToFalseAttribute\"/>.</returns>\r\n        internal static bool IsDefined(MethodInfo/*!*/ method)\r\n        {\r\n            return method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false);\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// If a parameter or a return value is marked by this attribute compiler should \r\n\t/// generate deep-copy code before or after the method's call respectively.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpDeepCopyAttribute : Attribute\r\n\t{\r\n\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks arguments having by-value argument pass semantics and data of the value can be changed by a callee.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class PhpRwAttribute : Attribute\r\n\t{\r\n        internal static bool IsDefined(ParameterInfo/*!*/ param)\r\n        {\r\n            return param != null && param.IsDefined(typeof(PhpRwAttribute), false);\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Marks argless stubs in (dynamic) wrappers which consumes <see cref=\"PhpStack.Variables\"/>.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class NeedsVariablesAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// ExternalCallbackAttribute marks methods which are intended to be called by some PHP extension module.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Informative only. Not used so far.\r\n\t/// </remarks>\r\n\t[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ExternalCallbackAttribute : Attribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the <see cref=\"ImplementsConstantAttribute\"/> attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callbackName\">The name the callback.</param>\r\n\t\tpublic ExternalCallbackAttribute(string callbackName)\r\n\t\t{\r\n\t\t\tname = callbackName;\r\n\t\t}\r\n\r\n\t\t/// <summary>The name of the callback.</summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\r\n\t\t/// <summary>The name of the callback.</summary>\r\n\t\tprivate string name;\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Scripts\r\n\r\n\t/// <summary>\r\n\t/// An attribute associated with the persistent script type.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ScriptAttribute : Attribute\r\n\t{\r\n        /// <summary>\r\n\t\t/// A timestamp of the source file when the script builder is created.\r\n\t\t/// </summary>\r\n\t\tpublic DateTime SourceTimestamp  { get { return new DateTime(sourceTimestamp, DateTimeKind.Utc); } }\r\n        private readonly long sourceTimestamp;\r\n\r\n        /// <summary>\r\n        /// Source file relative path.\r\n        /// </summary>\r\n        public string/*!*/RelativePath { get { return relativePath; } }\r\n        private readonly string/*!*/relativePath;\r\n        \r\n        /// <summary>\r\n        /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection.\r\n        /// </summary>\r\n        /// <param name=\"sourceTimestamp\">A timestamp of the source file when the script builder is created.</param>\r\n        /// <param name=\"relativePath\">Source file relative path.</param>\r\n        public ScriptAttribute(long sourceTimestamp, string relativePath)\r\n\t\t{\r\n            this.sourceTimestamp = sourceTimestamp;\r\n\t\t\tthis.relativePath = relativePath;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Determine the [ScriptInfoAttribute] attribute of given script type.\r\n        /// </summary>\r\n        /// <param name=\"type\">The script type to reflect from.</param>\r\n        /// <returns>Script attribute associated with the given <c>type</c> or null.</returns>\r\n        internal static ScriptAttribute Reflect(Type/*!*/ type)\r\n\t\t{\r\n            object[] attrs = type.GetCustomAttributes(typeof(ScriptAttribute), false);\r\n            return (attrs.Length == 1) ? (ScriptAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n    /// <summary>\r\n\t/// An attribute associated with the persistent script type.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ScriptIncludersAttribute : Attribute\r\n\t{\r\n        /// <summary>\r\n        /// Array of Scripts that statically include this script within current assembly.\r\n        /// Script is represented as type token to the Script type resolved within current module.\r\n        /// </summary>\r\n        public int[]/*!*/ Includers { get { return includers ?? ArrayUtils.EmptyIntegers; } }\r\n        private readonly int[] includers;\r\n\r\n        /// <summary>\r\n        /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection.\r\n        /// </summary>\r\n        /// <param name=\"includers\">\r\n        /// Array of Scripts that statically include this script within current assembly.\r\n        /// Script is represented as type token to the Script type.\r\n        /// </param>\r\n        public ScriptIncludersAttribute(int[] includers)\r\n\t\t{\r\n            this.includers = includers;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Determine the [ScriptIncludersAttribute] attribute of given script type.\r\n        /// </summary>\r\n        /// <param name=\"type\">The script type to reflect from.</param>\r\n        /// <returns>Script attribute associated with the given <c>type</c> or null.</returns>\r\n        internal static ScriptIncludersAttribute Reflect(Type/*!*/ type)\r\n\t\t{\r\n            object[] attrs = type.GetCustomAttributes(typeof(ScriptIncludersAttribute), false);\r\n            return (attrs.Length == 1) ? (ScriptIncludersAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n    /// <summary>\r\n\t/// An attribute associated with the persistent script type.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n\tpublic sealed class ScriptIncludeesAttribute : Attribute\r\n\t{\r\n        /// <summary>\r\n        /// Array of statically included Scripts.\r\n        /// Script is represented as type token to the Script type resolved within current module.\r\n        /// </summary>\r\n        public int[]/*!*/ Inclusions { get { return inclusions ?? ArrayUtils.EmptyIntegers; } }\r\n\t\tprivate readonly int[] inclusions;\r\n\r\n        /// <summary>\r\n        /// Get bit array with flags determining if static inclusion on specific index is included conditionally.\r\n        /// </summary>\r\n        public BitArray/*!*/InclusionsConditionalFlags { get { return new BitArray(inclusionsConditionalFlag ?? ArrayUtils.EmptyBytes); } }\r\n        /// <summary>\r\n        /// Bit array. Bit is set to 1 if inclusion on specified bit index is conditional.\r\n        /// </summary>\r\n        private readonly byte[] inclusionsConditionalFlag;\r\n\r\n        /// <summary>\r\n        /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection.\r\n        /// </summary>\r\n        /// <param name=\"inclusions\">\r\n        /// Array of statically included Scripts.\r\n        /// Script is represented as type token to the Script type.\r\n        /// </param>\r\n        /// <param name=\"inclusionsConditionalFlag\">\r\n        /// Array with bit flags determining if static inclusion on specific index is included conditionally.\r\n        /// </param>\r\n\t\tpublic ScriptIncludeesAttribute(int[] inclusions, byte[] inclusionsConditionalFlag)\r\n\t\t{\r\n            this.inclusions = inclusions;\r\n            this.inclusionsConditionalFlag = inclusionsConditionalFlag;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Convert array of bools into array of bytes.\r\n        /// Note: BitArray cannot be used, missing method <c>ToBytes</c>.\r\n        /// </summary>\r\n        /// <param name=\"array\">An array to convert.</param>\r\n        /// <returns>Bytes with particular bits set or null of <c>array</c> is null or empty.</returns>\r\n        internal static byte[] ConvertBoolsToBits(bool[] array)\r\n        {\r\n            if (array == null || array.Length == 0)\r\n                return null;\r\n\r\n            // construct the bit array from given array\r\n            int bytesCount = array.Length / 8;\r\n            if ((array.Length % 8) != 0) bytesCount++;\r\n\r\n            byte[] bits = new byte[bytesCount];\r\n\r\n            for (int i = 0; i < array.Length; ++i)\r\n                if (array[i])\r\n                    bits[i / 8] |= (byte)(1 << (i % 8));\r\n\r\n            return bits;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine the [ScriptIncludesAttribute] attribute of given script type.\r\n        /// </summary>\r\n        /// <param name=\"type\">The script type to reflect from.</param>\r\n        /// <returns>Script attribute associated with the given <c>type</c> or null.</returns>\r\n        internal static ScriptIncludeesAttribute Reflect(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tobject[] attrs = type.GetCustomAttributes(typeof(ScriptIncludeesAttribute), false);\r\n            return (attrs.Length == 1) ? (ScriptIncludeesAttribute)attrs[0] : null;\r\n\t\t}\r\n\t}\r\n\r\n    /// <summary>\r\n    /// An attribute associated with the persistent script type.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n    public sealed class ScriptDeclaresAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// Array of Types that are statically declared by this Script.\r\n        /// Type is represented as type token to the Type resolved within current module.\r\n        /// </summary>\r\n        public int[]/*!*/ DeclaredTypes { get { return declaredTypes ?? ArrayUtils.EmptyIntegers; } }\r\n        private readonly int[] declaredTypes;\r\n\r\n        /// <summary>\r\n        /// Used in SSA/MSA (target web and dll). Contains info needed for compile-time/runtime reflection.\r\n        /// </summary>\r\n        /// <param name=\"declaredTypes\">\r\n        /// Array of Types that are statically declared by this Script.\r\n        /// Type is represented as type token to the Type resolved within current module.\r\n        /// </param>\r\n        public ScriptDeclaresAttribute(int[] declaredTypes)\r\n        {\r\n            this.declaredTypes = declaredTypes;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine the [ScriptIncludersAttribute] attribute of given script type.\r\n        /// </summary>\r\n        /// <param name=\"type\">The script type to reflect from.</param>\r\n        /// <returns>Script attribute associated with the given <c>type</c> or null.</returns>\r\n        internal static ScriptDeclaresAttribute Reflect(Type/*!*/ type)\r\n        {\r\n            object[] attrs = type.GetCustomAttributes(typeof(ScriptDeclaresAttribute), false);\r\n            return (attrs.Length == 1) ? (ScriptDeclaresAttribute)attrs[0] : null;\r\n        }\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// Stores information about scripts directly included by a module which is decorated by this attribute.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]\r\n\tpublic sealed class IncludesAttribute : Attribute\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the attribute with a specified source path and a conditionality flag.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"relativeSourcePath\">Relative path remainder.</param>\r\n\t\t/// <param name=\"level\">Relative path level.</param>\r\n\t\t/// <param name=\"isConditional\">Whether the inclusion is conditional.</param>\r\n\t\t/// <param name=\"once\"><B>True</B> if the include is include_once or require_once.</param>\r\n\t\tpublic IncludesAttribute(string relativeSourcePath, sbyte level, bool isConditional, bool once)\r\n\t\t{\r\n\t\t\tthis.relativeSourceFile = new RelativePath(level, relativeSourcePath);\r\n\t\t\tthis.isConditional = isConditional;\r\n\t\t\tthis.once = once;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// An included script's canonical source path relative to the application source root.\r\n\t\t/// </summary>\r\n\t\tpublic RelativePath RelativeSourceFile { get { return relativeSourceFile; } }\r\n\t\tprivate RelativePath relativeSourceFile;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the inclusion is conditional.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsConditional { get { return isConditional; } }\r\n\t\tprivate bool isConditional;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the inclusion is include_once or require_once.\r\n\t\t/// </summary>\r\n\t\tpublic bool Once { get { return once; } }\r\n\t\tprivate bool once;\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Associates a class with an eval id.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n\tpublic class PhpEvalIdAttribute : Attribute\r\n\t{\r\n\t\tpublic PhpEvalIdAttribute(int id)\r\n\t\t{\r\n\t\t\tthis.id = id;\r\n\t\t}\r\n\r\n\t\tinternal static PhpEvalIdAttribute Reflect(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tobject[] attrs = type.GetCustomAttributes(typeof(PhpEvalIdAttribute), false);\r\n\t\t\treturn (attrs.Length == 1) ? (PhpEvalIdAttribute)attrs[0] : null;\r\n\t\t}\r\n\r\n#if DEBUG\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\t//EvalInfo info = (EvalInfo)EvalCompilerManager.Default.GetEvalInfo(id);\r\n\t\t\t//return String.Format(\"PhpEvalId(id={4},parent={5},kind={0},line={2},column={3},file={1})\",\r\n\t\t\t//  info.Kind,\r\n\t\t\t//  (info.File != null) ? \"@\\\"\" + info.File + \"\\\"\" : \"null\",\r\n\t\t\t//  info.Line,\r\n\t\t\t//  info.Column,\r\n\t\t\t//  id,\r\n\t\t\t//  info.ParentId);\r\n\t\t\treturn \"TODO\";\r\n\t\t}\r\n\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Eval id.\r\n\t\t/// </summary>\r\n\t\tpublic int Id { get { return id; } }\r\n\t\tprivate int id;\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Miscellaneous\r\n\r\n\t/// <summary>\r\n\t/// Specifies that a target field, property, or class defined in the configuration record \r\n\t/// is not displayd by PHP info.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\r\n\tpublic class NoPhpInfoAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Used for marking Core members that are emitted to the user code.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]\r\n\tinternal class EmittedAttribute : Attribute\r\n\t{\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Attribute specifying that function should be called statically with valid PhpStack. Such a function needs function arguments,\r\n    /// e.g. it calls func_num_args() or func_get_arg() inside.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]\r\n    public class NeedsArglessAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// Determines if given <c>method</c> has [NeedsArgless] attribute set.\r\n        /// </summary>\r\n        /// <param name=\"method\">The method to reflect from.</param>\r\n        /// <returns>True if the method is marked.</returns>\r\n        internal static bool IsSet(MethodInfo/*!*/method)\r\n        {\r\n            object[] attrs;\r\n            return (attrs = method.GetCustomAttributes(typeof(NeedsArglessAttribute), false)) != null && attrs.Length > 0;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Attribute specifying that function contains usage of <c>static</c> (late static binding),\r\n    /// runtime should pass type used to call a static method into script context, so it can be used by late static binding.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]\r\n    public class UsesLateStaticBindingAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// Determines if given <c>method</c> has [UsesLateStaticBinding] attribute set.\r\n        /// </summary>\r\n        /// <param name=\"method\">The method to reflect from.</param>\r\n        /// <returns>True if the method is marked.</returns>\r\n        internal static bool IsSet(MethodInfo/*!*/method)\r\n        {\r\n            object[] attrs;\r\n            return (attrs = method.GetCustomAttributes(typeof(UsesLateStaticBindingAttribute), false)) != null && attrs.Length > 0;\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/Binder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Runtime.CompilerServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing System.Threading;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n    /// <summary>\r\n    /// Manages run time binders.\r\n    /// </summary>\r\n    public static class Binder\r\n    {\r\n        #region BinderFlags\r\n\r\n        /// <summary>\r\n        /// Requested binder options.\r\n        /// </summary>\r\n        [Flags]\r\n        public enum BinderFlags : int\r\n        {\r\n            None = 0,\r\n\r\n            /// <summary>\r\n            /// The return value is required. Object is expected as the return value type.\r\n            /// </summary>\r\n            ResultWanted = 1,\r\n\r\n            /// <summary>\r\n            /// PhpReference of the return value is expected. Return type must be PhpReference and the value must not be null.\r\n            /// </summary>\r\n            ResultAsPhpReferenceWanted = 2 | ResultWanted,\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields\r\n\r\n        /// <summary>\r\n        /// Binders cache. Alows to share binders for the same operations.\r\n        /// TODO: Slit different binders into different dictionaries.\r\n        /// </summary>\r\n        private static readonly Dictionary<string, PhpInvokeMemberBinder/*!*/> invokeMemberBinders = new Dictionary<string, PhpInvokeMemberBinder>();\r\n\r\n        /// <summary>\r\n        /// Get*Property* binders.\r\n        /// TODO: Slit different binders into different dictionaries.\r\n        /// </summary>\r\n        private static readonly Dictionary<string, PhpGetMemberBinder/*!*/>/*!*/getMemberBinders = new Dictionary<string, PhpGetMemberBinder>();\r\n\r\n        #endregion\r\n\r\n        #region MethodCall, StaticMethodCall (same signature)\r\n\r\n        /// <summary>\r\n        /// Get the instance method call binder.\r\n        /// </summary>\r\n        /// <param name=\"methodName\">The method name. It is <c>null</c> iff this is not known at compile time.</param>\r\n        /// <param name=\"classContext\">The class context of the call site. It can be null or an instance of <see cref=\"DTypeDesc\"/>.\r\n        /// If the class context is not constant, its <see cref=\"DTypeDesc.IsUnknown\"/> is <c>true</c>.</param>\r\n        /// <param name=\"genericParamsCount\">Type arguments count.</param>\r\n        /// <param name=\"paramsCount\">Parameters count.</param>\r\n        /// <param name=\"returnType\">CallSite return value type.</param>\r\n        /// <returns>An instance of requested binder.</returns>\r\n        [Emitted]\r\n        public static CallSiteBinder/*!*/MethodCall(string methodName, int genericParamsCount, int paramsCount, DTypeDesc classContext, Type/*!*/returnType)\r\n        {\r\n            // CallSite< Func< CallSite, object /*target instance*/, ScriptContext, {args}*/*method call arguments*/, (DTypeDesc)?/*class context, iff <classContext>.IsUnknown*/, (object)?/*method name, iff <methodName>==null*/, <returnType> > >\r\n\r\n            PhpInvokeBinderKey key = new PhpInvokeBinderKey(methodName, genericParamsCount, paramsCount, classContext, returnType);\r\n\r\n            lock (invokeMemberBinders)\r\n            {\r\n                PhpInvokeMemberBinder res;\r\n                if (!invokeMemberBinders.TryGetValue(key.ToString(), out res))\r\n                {\r\n                    invokeMemberBinders[key.ToString()] = res = PhpBaseInvokeMemberBinder.Create(methodName, genericParamsCount, paramsCount, classContext, returnType);\r\n                }\r\n\r\n                return res;\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the static method call binder.\r\n        /// </summary>\r\n        /// <param name=\"methodName\">The method name. It is <c>null</c> iff this is not known at compile time.</param>\r\n        /// <param name=\"classContext\">The class context of the call site. It can be null or an instance of <see cref=\"DTypeDesc\"/>.\r\n        /// If the class context is not constant, its <see cref=\"DTypeDesc.IsUnknown\"/> is <c>true</c>.</param>\r\n        /// <param name=\"genericParamsCount\">Type arguments count.</param>\r\n        /// <param name=\"paramsCount\">Parameters count.</param>\r\n        /// <param name=\"returnType\">CallSite return value type.</param>\r\n        /// <returns>An instance of requested binder.</returns>\r\n        [Emitted]\r\n        public static CallSiteBinder/*!*/StaticMethodCall(string methodName, int genericParamsCount, int paramsCount, DTypeDesc classContext, Type/*!*/returnType)\r\n        {\r\n            // CallSite< Func< CallSite, DTypeDesc /*target type*/, ScriptContext, {args}*/*method call arguments*/, DObject/*type*/, (DTypeDesc)?/*class context, iff <classContext>.IsUnknown*/, (object)?/*method name, iff <methodName>==null*/, <returnType> > >\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetProperty, StaticGetProperty\r\n\r\n        [Emitted]\r\n        public static CallSiteBinder/*!*/GetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType)\r\n        {\r\n            // the binder cache key\r\n            string key = string.Format(\"{0}'{1}'{2}'{3}\",\r\n                fieldName ?? \"$\",\r\n                (classContext != null) ? (classContext.GetHashCode().ToString()) : string.Empty,\r\n                issetSemantics ? \"1\" : \"0\",\r\n                returnType.FullName\r\n                );\r\n\r\n            lock (getMemberBinders)\r\n            {\r\n                PhpGetMemberBinder binder;\r\n                if (!getMemberBinders.TryGetValue(key, out binder))\r\n                    getMemberBinders[key] = binder = new PhpGetMemberBinder(fieldName, classContext, issetSemantics, returnType);\r\n                \r\n                return binder;\r\n            }\r\n            \r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [Emitted]\r\n        public static CallSiteBinder/*!*/StaticGetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/BinderHelper.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Dynamic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    internal static class BinderHelper\r\n    {\r\n        #region PhpException.Throw\r\n\r\n        public static Expression/*!*/ ThrowError(string id)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Error),\r\n                Expression.Constant(CoreResources.GetString(id)));\r\n        }\r\n\r\n        public static Expression/*!*/ ThrowError(string id, object arg)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Error),\r\n                Expression.Constant(CoreResources.GetString(id, arg)));\r\n        }\r\n\r\n        public static Expression/*!*/ ThrowError(string id, object arg1, object arg2)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Error),\r\n                Expression.Constant(CoreResources.GetString(id, arg1, arg2)));\r\n        }\r\n\r\n        public static Expression/*!*/ ThrowError(string id, object arg1, object arg2, object arg3)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Error),\r\n                Expression.Constant(CoreResources.GetString(id, arg1, arg2, arg3)));\r\n        }\r\n\r\n        public static Expression/*!*/ ThrowWarning(string id)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Warning),\r\n                Expression.Constant(CoreResources.GetString(id)));\r\n        }\r\n        public static Expression/*!*/ ThrowWarning(string id, object arg)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Warning),\r\n                Expression.Constant(CoreResources.GetString(id, arg)));\r\n        }\r\n        public static Expression/*!*/ ThrowWarning(string id, object arg1, object arg2)\r\n        {\r\n            return Expression.Call(Methods.PhpException.Throw,\r\n                Expression.Constant(PhpError.Warning),\r\n                Expression.Constant(CoreResources.GetString(id, arg1, arg2)));\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Generates Expression that throws a 'Protected method called' or 'Private method called' <see cref=\"PhpException\"/>.\r\n        /// </summary>\r\n        /// <param name=\"method\">The <see cref=\"DRoutineDesc\"/>.</param>\r\n        /// <param name=\"callerContext\">The caller that was passed to method lookup or <B>null</B>\r\n        /// if it should be determined by this method (by tracing the stack).</param>\r\n        /// <remarks>\r\n        /// This method is intended to be called after <see cref=\"DTypeDesc.GetMethod\"/> has returned\r\n        /// <see cref=\"GetMemberResult.BadVisibility\"/> while performing a method lookup.\r\n        /// </remarks>\r\n        public static Expression/*!*/ ThrowVisibilityError(DRoutineDesc/*!*/ method, DTypeDesc/*!*/ callerContext)\r\n        {\r\n            if (method.IsProtected)\r\n            {\r\n                return ThrowError(\"protected_method_called\",\r\n                                  method.DeclaringType.MakeFullName(),\r\n                                  method.MakeFullName(),\r\n                                  callerContext == null ? String.Empty : callerContext.MakeFullName());\r\n            }\r\n            else if (method.IsPrivate)\r\n            {\r\n                return ThrowError(\"private_method_called\",\r\n                                  method.DeclaringType.MakeFullName(),\r\n                                  method.MakeFullName(),\r\n                                  callerContext == null ? String.Empty : callerContext.MakeFullName());\r\n            }\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        public static Expression/*!*/ ThrowMissingArgument(int argIndex, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                return ThrowWarning(\"missing_argument_for\", argIndex, calleeName);\r\n            else\r\n                return ThrowWarning(\"missing_argument\", argIndex);\r\n        }\r\n\r\n        public static Expression/*!*/ ThrowMissingTypeArgument(int argIndex, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                return ThrowWarning(\"missing_type_argument_for\", argIndex, calleeName);\r\n            else\r\n                return ThrowWarning(\"missing_type_argument\", argIndex);\r\n        }\r\n\r\n\r\n        public static Expression/*!*/ ThrowArgumentNotPassedByRef(int argIndex, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                return ThrowWarning(\"argument_not_passed_byref_to\", argIndex, calleeName);\r\n            else\r\n                return ThrowWarning(\"argument_not_passed_byref\", argIndex);\r\n        }\r\n\r\n    \r\n        #endregion\r\n\r\n        #region (ClrObject, IClrValue)\r\n\r\n        /// <summary>\r\n        /// Builds <see cref=\"Expression\"/> that properly wraps given expression to return valid PHP type.\r\n        /// It does not perform any conversion for PHP primitive types. Byte array is wrapped into <see cref=\"PhpBytes\"/> and\r\n        /// anything else is wrapped using <see cref=\"ClrObject.Create\"/> method.\r\n        /// </summary>\r\n        /// <param name=\"expression\">Expression returning an object/value.</param>\r\n        /// <returns><see cref=\"Expression\"/> returning valid PHP object.</returns>\r\n        public static Expression/*!*/ClrObjectWrapDynamic(Expression/*!*/expression)\r\n        {\r\n            Debug.Assert(expression != null);\r\n\r\n            var type = expression.Type;\r\n\r\n            if (type.IsGenericParameter)\r\n                type = Types.Object[0];\r\n\r\n            // PHP types as they are:\r\n            if (PhpVariable.IsPrimitiveType(type) || /*Types.DObject[0].IsAssignableFrom(type) || */typeof(IPhpVariable).IsAssignableFrom(type))\r\n                return expression;\r\n\r\n            // (byte[])<expression> -> PhpBytes( <expression> )\r\n            // (byte[])null -> null\r\n            if (type == typeof(byte[]))\r\n            {\r\n                var value = Expression.Variable(typeof(byte[]));\r\n                return\r\n                    Expression.Block(Types.PhpBytes[0],\r\n                        new[] { value },\r\n                        Expression.Condition(\r\n                            Expression.Equal(Expression.Assign(value, expression),Expression.Constant(null)),\r\n                            Expression.Constant(null, Types.PhpBytes[0]),\r\n                            Expression.New(Constructors.PhpBytes_ByteArray, value)\r\n                    ));\r\n            }\r\n            \r\n            // from Emit/ClrOverloadBuilder.cs, ClrOverloadBuilder.EmitConvertToPhp:\r\n            switch (Type.GetTypeCode(type))\r\n            {\r\n                case TypeCode.Boolean:\r\n                    return Expression.Convert(expression, Types.Bool[0]);\r\n                // coercion:\r\n                case TypeCode.SByte:\r\n                case TypeCode.Int16:\r\n                case TypeCode.Byte:\r\n                case TypeCode.UInt16:\r\n                case TypeCode.Int32:\r\n                    return Expression.Convert(expression, Types.Int[0]);\r\n\r\n                case TypeCode.Int64:\r\n                case TypeCode.UInt32:\r\n                    return Expression.Convert(expression, Types.LongInt[0]);\r\n\r\n                case TypeCode.UInt64:\r\n                case TypeCode.Single:\r\n                case TypeCode.Double:\r\n                    return Expression.Convert(expression, Types.Double[0]);\r\n\r\n                case TypeCode.Char:\r\n                    return Expression.Call(Expression.Convert(expression, Types.Object[0]), Methods.Object_ToString);\r\n\r\n                case TypeCode.DBNull:\r\n                    return Expression.Constant(null, Types.Object[0]);\r\n            }\r\n\r\n            // value type -> ClrValue<T>\r\n            // ref type -> ClrObject\r\n            return Expression.Call(null,\r\n                type == Types.Object[0] ?\r\n                    Methods.ClrObject_WrapDynamic :     // expression can represent anything, check type in run time and wrap dynamically\r\n                    Methods.ClrObject_WrapRealObject,   // expression is surely not PHP primitive type, DObject nor byte[], wrap into ClrObject or IClrValue\r\n                Expression.Convert(expression, Types.Object[0]));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unwraps <see cref=\"DObject.RealObject\"/> or <see cref=\"ClrValue&lt;T&gt;.realValue\"/> from <see cref=\"ClrObject\"/> or <see cref=\"ClrValue&lt;T&gt;\"/>.\r\n        /// </summary>\r\n        /// <param name=\"target\">Original <b>target</b> of binding operation.</param>\r\n        /// <param name=\"realType\">Expected <see cref=\"Type\"/> of the operation.</param>\r\n        /// <returns><see cref=\"Expression\"/> getting the real object wrapped into given target.</returns>\r\n        public static Expression/*!*/ClrRealObject(DynamicMetaObject/*!*/target, Type/*!*/realType)\r\n        {\r\n            Debug.Assert(target != null);\r\n            Debug.Assert(realType != null);\r\n\r\n            var obj = target.Value as DObject;\r\n\r\n            Debug.Assert(obj != null, \"Not DObject!\");\r\n            Debug.Assert(realType.IsAssignableFrom(obj.RealType), \"Not compatible types!\");\r\n\r\n            if (obj is ClrObject)\r\n            {\r\n                // (<realType>)((DObject)target).RealObject: // TODO: access ClrObject.realObject directly\r\n                return Expression.Convert(\r\n                    Expression.Property(Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_RealObject),\r\n                    realType);\r\n            }\r\n            else if (obj is IClrValue) // => obj is ClrValue<T>\r\n            {\r\n                var ClrValue_Type = obj.GetType(); // ClrValue'1\r\n                var ClrValue_ValueField = ClrValue_Type.GetField(\"realValue\"); // ClrValue'1.realValue\r\n\r\n                // (T)((ClrValue<T>)target).realValue:\r\n                return Expression.Field(Expression.Convert(target.Expression, ClrValue_Type), ClrValue_ValueField);\r\n            }\r\n            else\r\n                throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpReference\r\n\r\n        /// <summary>\r\n        /// Ensures the expression returns <see cref=\"PhpReference\"/>. If not the expression is wrapped to a new instance of <see cref=\"PhpReference\"/>.\r\n        /// </summary>\r\n        /// <param name=\"expression\">The <see cref=\"Expression\"/> to be wrapped.</param>\r\n        /// <returns>Expression representing PhpReference.</returns>\r\n        public static Expression/*!*/MakePhpReference(Expression/*!*/expression)\r\n        {\r\n            // PhpReference already:\r\n            if (Types.PhpReference[0].IsAssignableFrom(expression.Type))\r\n                return expression;\r\n\r\n            // void -> new PhpReference():\r\n            if (expression.Type == Types.Void)\r\n                return Expression.New(Constructors.PhpReference_Void);\r\n\r\n            // object -> PhpReference(object):\r\n            return Expression.New(Constructors.PhpReference_Object, Expression.Convert(expression, Types.Object[0]));\r\n        }\r\n\r\n        #endregion\r\n\r\n        public static Expression[]/*!*/ CombineArguments(Expression/*!*/ arg, Expression/*!*/[]/*!*/ args)\r\n        {\r\n            Expression[] arguments = new Expression[1 + args.Length];\r\n            arguments[0] = arg;\r\n            for (int i = 0; i < args.Length; ++i)\r\n                arguments[1 + i] = args[i];\r\n\r\n            return arguments;\r\n        }\r\n        \r\n        public static DynamicMetaObject[]/*!*/ CombineArguments(DynamicMetaObject/*!*/ arg, DynamicMetaObject/*!*/[]/*!*/ args)\r\n        {\r\n            DynamicMetaObject[] arguments = new DynamicMetaObject[1 + args.Length];\r\n            arguments[0] = arg;\r\n            for (int i = 0; i < args.Length; ++i)\r\n                arguments[1 + i] = args[i];\r\n\r\n            return arguments;\r\n        }\r\n\r\n        public static BindingRestrictions GetSimpleInvokeRestrictions(DynamicMetaObject/*!*/ target, DynamicMetaObject[]/*!*/ args)\r\n        {\r\n            BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType);\r\n\r\n            foreach (var arg in args)\r\n            {\r\n                if (arg.RuntimeType != null)\r\n                    restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(arg.Expression, arg.LimitType));\r\n                else\r\n                    restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(arg.Expression, null));//(MB) is it\r\n            }\r\n\r\n            return restrictions;\r\n        }\r\n\r\n        private static object AssertNotPhpReferenceMethod(object obj)\r\n        {\r\n            Debug.Assert(!(obj is PhpReference));\r\n            return obj;\r\n        }\r\n\r\n        public static Expression/*!*/ AssertNotPhpReference(Expression objEx)\r\n        {\r\n#if DEBUG\r\n            return Expression.Call(null, new Func<object, object>(AssertNotPhpReferenceMethod).Method, objEx);\r\n#else\r\n            return objEx;\r\n#endif\r\n        }\r\n\r\n\r\n        public static BindingRestrictions ValueTypeRestriction( this DynamicMetaObject target)\r\n        {\r\n            return (target.HasValue && target.Value == null) ?\r\n                        BindingRestrictions.GetInstanceRestriction(target.Expression, null) :\r\n                        BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create static <see cref=\"DynamicMethod\"/> that wraps call of given <paramref name=\"mi\"/>. The call is performed statically, method's overrides are not called.\r\n        /// </summary>\r\n        /// <param name=\"mi\"><see cref=\"MethodInfo\"/> to be called statically.</param>\r\n        /// <returns>New <see cref=\"MethodInfo\"/> representing static method stub.</returns>\r\n        public static MethodInfo/*!*/WrapInstanceMethodCall(MethodInfo/*!*/mi)\r\n        {\r\n            Debug.Assert(mi != null);\r\n            Debug.Assert(!mi.IsStatic, \"'mi' must not be static!\");\r\n\r\n            var parameters = mi.GetParameters();\r\n\r\n            // array of parameters type\r\n            // Type[]{ <DeclaringType>, <arg1.Type>, ..., <argn.Type> }\r\n            var paramTypes = new Type[parameters.Length + 1]; // = new Type[]{ mi.DeclaringType }.Concat(parameters.Select<ParameterInfo, Type>(p => p.ParameterType)).ToArray();\r\n            paramTypes[0] = mi.DeclaringType;\r\n            for (int i = 0; i < parameters.Length; i++)\r\n                paramTypes[i + 1] = parameters[i].ParameterType;\r\n\r\n            // create static dynamic method that calls given MethodInfo statically\r\n            DynamicMethod stub = new DynamicMethod(\"<^>.\" + mi.Name, mi.ReturnType, paramTypes, mi.DeclaringType);\r\n            ILEmitter il = new ILEmitter(stub);\r\n\r\n            // return <mi>( instance, arg_1, arg_2, ..., arg_n ):\r\n            for (int i = 0; i <= parameters.Length; i++)\r\n                il.Ldarg(i);\r\n\r\n            il.Emit(OpCodes.Call, mi);\r\n            il.Emit(OpCodes.Ret);\r\n            \r\n            //\r\n            return stub;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts first #length elements from a given array of DynamicMetaObject to array of Expression\r\n        /// </summary>\r\n        /// <param name=\"args\">Array of DynamicMetaObject to be converted to Expression[]</param>\r\n        /// <param name=\"startIndex\">Index of first argument that's going to be converted</param>\r\n        /// <param name=\"length\">Count of arguments that are going to be converted</param>\r\n        /// <returns>Expression[] of values of DynamicMetaObject array</returns>\r\n        public static Expression[]/*!*/ PackToExpressions(DynamicMetaObject/*!*/[]/*!*/ args, int startIndex, int length)\r\n        {\r\n            int top = startIndex + length;\r\n            Expression[] arguments = new Expression[length];\r\n            for (int i = 0; i < length; ++i)\r\n                arguments[i] = args[i + startIndex].Expression;\r\n\r\n            return arguments;\r\n        }\r\n\r\n        public static Expression[]/*!*/ PackToExpressions(DynamicMetaObject/*!*/[]/*!*/ args)\r\n        {\r\n            return PackToExpressions(args, 0, args.Length);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/InteropBinder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Dynamic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n    internal static class InteropBinder\r\n    {\r\n\r\n        public static Expression WrapDynamic(Expression arg)\r\n        {\r\n            return Expression.Call(Methods.ClrObject_WrapDynamic,\r\n                            Expression.Convert(arg, Types.Object[0]));\r\n\r\n        }\r\n\r\n        public static Expression Unwrap(Expression arg)\r\n        {\r\n            return Expression.Call(Methods.PhpVariable.Unwrap,\r\n                            Expression.Convert(arg, Types.Object[0]));\r\n        }\r\n\r\n        internal sealed class InvokeMember : DynamicMetaObjectBinder\r\n        {\r\n\r\n            #region Php -> DLR\r\n\r\n            public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region DLR -> Php\r\n\r\n            public static DynamicMetaObject/*!*/ Bind(InvokeMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target,\r\n                DynamicMetaObject/*!*/[]/*!*/ args, Func<DynamicMetaObject, DynamicMetaObject[], DynamicMetaObject>/*!*/ fallback)\r\n            {\r\n                return Bind(binder.Name, binder.CallInfo, binder, target, args, fallback);\r\n            }\r\n\r\n            public static DynamicMetaObject/*!*/ Bind(string/*!*/ methodName, CallInfo/*!*/ callInfo,\r\n                DynamicMetaObjectBinder/*!*/ binder, DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args,\r\n                Func<DynamicMetaObject, DynamicMetaObject[], DynamicMetaObject>/*!*/ fallback)\r\n            {\r\n                Debug.Assert(fallback != null);\r\n\r\n                //create DMO\r\n                var phpInvokeBinder = Binder.MethodCall(methodName, 0, callInfo.ArgumentCount, null, Types.Object[0]) as PhpBaseInvokeMemberBinder;\r\n\r\n                if (phpInvokeBinder != null)\r\n                {\r\n\r\n                    //Add ScriptContext.CurrentContext\r\n                    var context = new DynamicMetaObject(Expression.Call(Methods.ScriptContext.GetCurrentContext), BindingRestrictions.Empty);\r\n\r\n                    var restrictions = BinderHelper.GetSimpleInvokeRestrictions(target, args);\r\n\r\n                    //Value type arguments have to be boxed\r\n                    DynamicMetaObject[] arguments = new DynamicMetaObject[1 + args.Length];\r\n                    arguments[0] = context;\r\n                    for (int i = 0; i < args.Length; ++i)\r\n                        arguments[1 + i] = new DynamicMetaObject(WrapDynamic(args[i].Expression),\r\n                                                                 args[i].Restrictions);\r\n                    var result = phpInvokeBinder.Bind(target, arguments);\r\n\r\n                    //Unwrap result\r\n                    var res = new DynamicMetaObject(Unwrap(result.Expression), restrictions);\r\n\r\n                    return res;\r\n                }\r\n                else\r\n                    return fallback(target, args);//this will never happen\r\n            }\r\n\r\n            #endregion\r\n\r\n        }\r\n\r\n\r\n        internal sealed class Invoke : InvokeBinder\r\n        {\r\n\r\n            public Invoke(CallInfo callInfo)\r\n                :base(callInfo)\r\n            {\r\n\r\n            }\r\n\r\n            #region Php->DLR\r\n\r\n            public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region DLR -> Php\r\n\r\n            public static DynamicMetaObject/*!*/ Bind(InvokeBinder/*!*/ binder,\r\n                DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args)\r\n            {\r\n                //Convert.ObjectToCallback(target).Invoke(args)\r\n\r\n                var callback =  Expression.Call(Methods.Convert.ObjectToCallback,\r\n                                    Expression.Convert( target.Expression, Types.DObject[0]));\r\n\r\n                //restriction: target is Type\r\n                BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType);\r\n\r\n                //args -> new object[](args)\r\n                var convertedArgs = Array.ConvertAll<DynamicMetaObject, Expression>(args, (x) => Expression.Convert(x.Expression, Types.Object[0]));\r\n                var argsArray = Expression.NewArrayInit(Types.Object[0], convertedArgs);\r\n\r\n                return new DynamicMetaObject(\r\n                    Unwrap(/*TODO: deref*/Expression.Call(callback, Methods.PhpCallback_Invoke, argsArray)),\r\n                    restrictions);\r\n            }\r\n\r\n            #endregion\r\n\r\n        }\r\n\r\n\r\n        internal sealed class GetMember : GetMemberBinder\r\n        {\r\n            internal GetMember(string/*!*/ name)\r\n                : base(name, false)\r\n            {\r\n            }\r\n\r\n            #region DLR -> Php\r\n\r\n            public static DynamicMetaObject/*!*/ Bind(GetMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target,\r\n                Func<DynamicMetaObject, DynamicMetaObject>/*!*/ fallback)\r\n            {\r\n                Debug.Assert(fallback != null);\r\n\r\n                //create DMO\r\n                var phpGetMemberBinder = Binder.GetProperty(binder.Name, null, false, Types.Object[0]) as PhpGetMemberBinder;\r\n\r\n                if (phpGetMemberBinder != null)\r\n                {\r\n                    // Get ClassContext of actual object\r\n                    var args = new DynamicMetaObject[]{\r\n                    new DynamicMetaObject(Expression.Field(Expression.Convert( target.Expression, Types.DObject[0]), Fields.DObject_TypeDesc), BindingRestrictions.Empty)\r\n                    };\r\n\r\n                    var res = phpGetMemberBinder.Bind(target, args);\r\n                    return new DynamicMetaObject(Unwrap(res.Expression), res.Restrictions);\r\n                }\r\n                else\r\n                    return fallback(target);//this will never happen\r\n\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Php -> DLR\r\n\r\n            public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        internal sealed class SetMember : DynamicMetaObjectBinder\r\n        {\r\n\r\n            #region DLR -> Php\r\n\r\n            public static DynamicMetaObject/*!*/ Bind(SetMemberBinder/*!*/ binder, DynamicMetaObject/*!*/ target,\r\n                DynamicMetaObject/*!*/ value, Func<DynamicMetaObject, DynamicMetaObject, DynamicMetaObject>/*!*/ fallback)\r\n            {\r\n                Debug.Assert(target.HasValue && target.LimitType != Types.PhpReference[0], \"Target should not be PhpReference!\");\r\n                Debug.Assert(fallback != null);\r\n\r\n                BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); //target.Restrictions;\r\n\r\n                //wrap reference\r\n\r\n                return new DynamicMetaObject(\r\n                    Expression.Block(\r\n                        Expression.Call(Expression.Convert(target.Expression, Types.DObject[0]), Methods.DObject_SetProperty,\r\n                            Expression.Constant(binder.Name),\r\n                            WrapDynamic(value.Expression),\r\n                            Expression.Constant(null, Types.DTypeDesc[0])),\r\n                        Expression.Constant(null, Types.Object[0])),\r\n                    restrictions\r\n                        );\r\n\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Php -> DLR\r\n\r\n            public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/PhpBinder.cs",
    "content": "﻿#if DLR_OVERLOAD_RESOLUTION\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing PHP.Core.Reflection;\r\nusing System.Reflection;\r\nusing Microsoft.Scripting.Actions;\r\nusing Microsoft.Scripting.Actions.Calls;\r\nusing Microsoft.Scripting.Runtime;\r\nusing Microsoft.Scripting.Utils;\r\n\r\n\r\nusing System.Linq.Expressions;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n    class PhpBinder : DefaultBinder\r\n    {\r\n        internal static readonly PhpBinder Instance = new PhpBinder();\r\n\r\n        public DynamicMetaObject CallClrMethod(ClrMethod method, DynamicMetaObject target, DynamicMetaObject[] args)\r\n        {\r\n            CallSignature signature = new CallSignature(args.Length);\r\n            return Call(signature,null,new DefaultOverloadResolverFactory(this), method, target, args);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provides default binding for performing a call on the specified meta objects.\r\n        /// </summary>\r\n        /// <param name=\"signature\">The signature describing the call</param>\r\n        /// <param name=\"target\">The meta object to be called.</param>\r\n        /// <param name=\"args\">\r\n        /// Additional meta objects are the parameters for the call as specified by the CallSignature in the CallAction.\r\n        /// </param>\r\n        /// <param name=\"resolverFactory\">Overload resolver factory.</param>\r\n        /// <param name=\"errorSuggestion\">The result should the object be uncallable.</param>\r\n        /// <returns>A MetaObject representing the call or the error.</returns>\r\n        public DynamicMetaObject Call(CallSignature signature, DynamicMetaObject errorSuggestion, OverloadResolverFactory resolverFactory,ClrMethod method, DynamicMetaObject target, params DynamicMetaObject[] args)\r\n        {\r\n            ContractUtils.RequiresNotNullItems(args, \"args\");\r\n            ContractUtils.RequiresNotNull(resolverFactory, \"resolverFactory\");\r\n\r\n            TargetInfo targetInfo = GetTargetInfo(method, target, args);\r\n\r\n            if (targetInfo != null)\r\n            {\r\n                // we're calling a well-known MethodBase\r\n                DynamicMetaObject res = MakeMetaMethodCall(signature, resolverFactory, targetInfo);\r\n                if (res.Expression.Type.IsValueType)\r\n                {\r\n                    if (res.Expression.Type == Types.Void)\r\n                        res = new DynamicMetaObject(\r\n                            Expression.Block(Types.Object[0],\r\n                                res.Expression,\r\n                                Expression.Constant(null)),\r\n                            res.Restrictions\r\n                        );\r\n                    else\r\n                        res = new DynamicMetaObject(\r\n                            Expression.Convert(res.Expression, typeof(object)),\r\n                            res.Restrictions\r\n                    );\r\n                }\r\n\r\n                return res;\r\n            }\r\n            else\r\n            {\r\n                // we can't call this object\r\n                return errorSuggestion ?? MakeCannotCallRule(target, target.GetLimitType());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a TargetInfo object for performing a call on this object.  \r\n        /// </summary>\r\n        private TargetInfo GetTargetInfo(ClrMethod method, DynamicMetaObject target, DynamicMetaObject[] args)\r\n        {\r\n            Debug.NotNull(method);\r\n            Debug.Assert(target.HasValue);\r\n            object objTarget = target.Value;\r\n\r\n            List<MethodBase> foundTargets = new List<MethodBase>(method.Overloads.Count);\r\n\r\n            foreach (PHP.Core.Reflection.ClrMethod.Overload overload in method.Overloads)\r\n            {\r\n                foundTargets.Add(overload.Method);\r\n            }\r\n\r\n            return new TargetInfo(target, args, target.Restrictions, foundTargets.ToArray()); \r\n\r\n\r\n        }\r\n\r\n\r\n    }\r\n}\r\n#endif"
  },
  {
    "path": "Source/Core/Binders/PhpDynamicMetaObjects.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Dynamic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    //TODO:(MB) Implement IDynamicMetaObject provider to DObject\r\n\r\n    internal class PhpReferenceDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        //Restriction: (obj isinst PhpReference) && ( ref.Value.GetType() == |typeof(obj.Value)|)\r\n\r\n        public PhpReferenceDynamicMetaObject(DynamicMetaObject dynamic):\r\n            base(Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value),\r\n            \r\n\r\n            BindingRestrictions.GetTypeRestriction(dynamic.Expression,Types.PhpReference[0]) // TODO: PhpSmartReference\r\n                /*.Merge(              \r\n                    BindingRestrictions.GetTypeRestriction(\r\n                        Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value), ((PhpReference)dynamic.Value).Value.GetType()))*/,\r\n            ((PhpReference)dynamic.Value).Value\r\n            )\r\n        {\r\n            Debug.Assert(Types.PhpReference[0] == dynamic.LimitType);\r\n        }\r\n\r\n    }\r\n\r\n    internal class PhpSmartReferenceDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        //Restriction: (obj isinst PhpReference) && ( ref.Value.GetType() == |typeof(obj.Value)|)\r\n\r\n        public PhpSmartReferenceDynamicMetaObject(DynamicMetaObject dynamic) :\r\n            base(Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpSmartReference[0]), Fields.PhpReference_Value),\r\n\r\n\r\n             BindingRestrictions.GetTypeRestriction(dynamic.Expression, Types.PhpSmartReference[0]) // TODO: PhpSmartReference\r\n                /*.Merge(              \r\n                    BindingRestrictions.GetTypeRestriction(\r\n                        Expression.Field(Expression.Convert(dynamic.Expression, Types.PhpReference[0]), Fields.PhpReference_Value), ((PhpReference)dynamic.Value).Value.GetType()))*/,\r\n             ((PhpReference)dynamic.Value).Value\r\n             )\r\n        {\r\n            Debug.Assert(Types.PhpSmartReference[0] == dynamic.LimitType);\r\n        }\r\n\r\n    }\r\n\r\n    internal class ClrDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        //Restriction: (obj is ClrObject) && (obj.RealType == |typeof(obj.RealType)|))\r\n\r\n        public ClrDynamicMetaObject(DynamicMetaObject dynamic) :\r\n            base(Expression.Property(Expression.Convert(dynamic.Expression, typeof(ClrObject)), Properties.DObject_RealObject),\r\n\r\n\r\n             BindingRestrictions.GetTypeRestriction(dynamic.Expression, typeof(ClrObject)) \r\n                 .Merge(// TODO: this has to be turned off for DLR overload resolution, because instance is argument for method and DLR creates its restriction\r\n                     BindingRestrictions.GetExpressionRestriction(\r\n                         Expression.Equal(\r\n                            Expression.Property(Expression.Convert(dynamic.Expression, typeof(ClrObject)), Properties.DObject_RealType),\r\n                            Expression.Constant(((ClrObject)dynamic.Value).RealType)))),\r\n            ((ClrObject)dynamic.Value).RealObject\r\n             )\r\n        {\r\n            Debug.Assert(typeof(ClrObject) == dynamic.LimitType);\r\n        }\r\n\r\n    }\r\n\r\n\r\n    internal class ClrValueDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        public ClrValueDynamicMetaObject(DynamicMetaObject dynamic) :\r\n            base(dynamic.Expression,\r\n\r\n             BindingRestrictions.GetTypeRestriction(dynamic.Expression, dynamic.LimitType),\r\n             dynamic.Value\r\n             )\r\n        {   \r\n        }\r\n\r\n    }\r\n\r\n    internal class WrappedClrDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        public WrappedClrDynamicMetaObject(DynamicMetaObject dynamic) :\r\n            base(dynamic.Expression,\r\n\r\n             BindingRestrictions.GetTypeRestriction(dynamic.Expression, dynamic.LimitType),\r\n\r\n             ClrObject.WrapRealObject(dynamic.Value)\r\n             )\r\n        {\r\n            Debug.Assert(!Types.DObject[0].IsAssignableFrom(dynamic.LimitType) && \r\n                        dynamic.Value != null &&\r\n                        Configuration.Application.Compiler.ClrSemantics);\r\n        }\r\n\r\n        public Expression WrapIt()\r\n        {\r\n            return Expression.Assign(Expression, Expression.Call(\r\n                                Methods.ClrObject_WrapRealObject, Expression));\r\n        }\r\n\r\n    }\r\n\r\n\r\n    internal class PhpDynamicMetaObject : DynamicMetaObject\r\n    {\r\n        public PhpDynamicMetaObject(DynamicMetaObject dynamic) :\r\n            base(dynamic.Expression,\r\n\r\n             // Restriction: typeof(target) == |target.TypeDesc.RealType|\r\n             BindingRestrictions.GetTypeRestriction(dynamic.Expression, ((PhpObject)dynamic.Value).TypeDesc.RealType), //TODO: it's sufficient to use typeof(targetObj), but this is faster                                                                                                                                                                \r\n             dynamic.Value\r\n             )\r\n        {\r\n            Debug.Assert(Types.PhpObject[0].IsAssignableFrom(dynamic.LimitType));\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/PhpGetMemberBinder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    /// <summary>\r\n    /// \r\n    /// </summary>\r\n    public class PhpGetMemberBinder : DynamicMetaObjectBinder\r\n    {\r\n        #region Fields\r\n\r\n        protected readonly string _fieldName;\r\n        protected readonly DTypeDesc _classContext;\r\n        protected readonly bool _issetSemantics;\r\n        protected readonly Type/*!*/_returnType;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        protected bool ClassContextIsKnown { get { return _classContext == null || !_classContext.IsUnknown; } }\r\n        protected bool IsIndirect { get { return _fieldName == null; } }\r\n        protected bool WantReference { get { return this._returnType == Types.PhpReference[0]; } }\r\n        \r\n        #endregion\r\n\r\n        public PhpGetMemberBinder(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType)\r\n        {\r\n            this._fieldName = fieldName;\r\n            this._classContext = classContext;\r\n            this._issetSemantics = issetSemantics;\r\n            this._returnType = returnType;\r\n        }\r\n\r\n        public override Type ReturnType { get { return this._returnType; } }\r\n\r\n        public override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args)\r\n        {\r\n            if (target.Value is IDynamicMetaObjectProvider)\r\n            {\r\n                //throw new NotImplementedException();\r\n                //Translate arguments to DLR standard\r\n                //TODO: Create DlrCompatibilityInvokeBinder because it has to be derived from GetMemberBinder\r\n                //return target.BindGetMember(this,args);\r\n            }\r\n\r\n            return FallbackInvokeMember(target, args);\r\n        }\r\n\r\n        static PhpReference notsetOperation(DObject self, string name, DTypeDesc caller, PhpReference refrnc)\r\n        {\r\n            bool getter_exists;\r\n            // the CT property has been unset -> try to invoke __get\r\n            PhpReference get_ref = self.InvokeGetterRef(name, caller, out getter_exists);\r\n            if (getter_exists) return get_ref ?? new PhpReference();\r\n\r\n            Debug.Assert(refrnc != null);\r\n\r\n            refrnc.IsAliased = true;\r\n            refrnc.IsSet = true;\r\n\r\n            return refrnc;\r\n        }\r\n\r\n        private DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args)\r\n        {\r\n            // determine run time values and additional restrictions:\r\n            DTypeDesc classContext = this._classContext;\r\n            string fieldName = this._fieldName;\r\n            BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType); //target.Restrictions;\r\n\r\n            int currentArg = 0;\r\n            if (!ClassContextIsKnown)\r\n            {\r\n                Debug.Assert(args.Length > currentArg, \"Not enough arguments!\");\r\n                Debug.Assert(args[currentArg].Value == null || Types.DTypeDesc[0].IsAssignableFrom(args[currentArg].LimitType), \"Wrong class context type!\");\r\n                classContext = (DTypeDesc)args[currentArg].Value;\r\n                Debug.Assert(classContext == null || !classContext.IsUnknown, \"Class context should be known at run time!\");\r\n\r\n                restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(args[currentArg].Expression, classContext));\r\n                \r\n                currentArg++;\r\n            }\r\n            if (IsIndirect)\r\n            {\r\n                Debug.Assert(args.Length > currentArg, \"Not enough arguments!\");\r\n                Debug.Assert(Types.String[0].IsAssignableFrom(args[currentArg].LimitType), \"Wrong field name type!\");\r\n                fieldName = (string)args[currentArg].Value;\r\n\r\n                restrictions = restrictions.Merge(\r\n                    BindingRestrictions.GetExpressionRestriction(\r\n                        Expression.Equal(\r\n                            args[currentArg].Expression,\r\n                            Expression.Constant(fieldName, Types.String[0]))));\r\n\r\n                currentArg++;\r\n            }\r\n\r\n            // \r\n            ////Debug.Assert(!(var is PhpReference) && name != null);\r\n            Debug.Assert(target.HasValue && target.LimitType != Types.PhpReference[0], \"Target should not be PhpReference!\");\r\n\r\n            ////if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject))\r\n            ////{\r\n            ////    ScriptContext.CurrentContext.AbortSetterChain(false);\r\n            ////    return new PhpReference();\r\n            ////}\r\n            if (WantReference && ReferenceEquals(target.Value, ScriptContext.SetterChainSingletonObject))\r\n            {\r\n                // GetObjectPropertyRef:\r\n                Func<PhpReference> abortSetterChain = () =>\r\n                {\r\n                    ScriptContext.CurrentContext.AbortSetterChain(false);\r\n                    return new PhpReference();\r\n                };\r\n\r\n                return new DynamicMetaObject(\r\n                    Expression.Call(abortSetterChain.Method),\r\n                    BindingRestrictions.GetInstanceRestriction(target.Expression, ScriptContext.SetterChainSingletonObject)\r\n                    );\r\n            }\r\n\r\n            DObject obj;\r\n            ////// a property of a DObject:\r\n            if ((obj = target.Value as DObject) != null)\r\n            {\r\n                if (obj is ClrObject /*|| obj is IClrValue // IClrValue -> ClrValue<T> -> already in restriction */)\r\n                {\r\n                    // ((DObject)target).RealType == <obj>.RealType\r\n                    restrictions = restrictions.Merge(\r\n                        BindingRestrictions.GetInstanceRestriction(\r\n                            Expression.Property(Expression.Convert(target.Expression, Types.DObject[0]), Properties.DObject_RealType),\r\n                            obj.RealType));\r\n                }\r\n\r\n                ////    return GetObjectProperty(obj, name, caller, quiet);\r\n                DPropertyDesc property;\r\n                GetMemberResult result = obj.TypeDesc.GetInstanceProperty(new VariableName(fieldName), classContext, out property);\r\n\r\n                switch (result)\r\n                {\r\n                    case GetMemberResult.OK:\r\n                        ////object value = property.Get(this);\r\n                        ////PhpReference reference = value as PhpReference;\r\n\r\n                        if (property.Member is PhpField || property.Member is PhpVisibleProperty)\r\n                        {\r\n                            var realType = property.DeclaringType.RealType;\r\n                            FieldInfo realField = (property.Member is PhpField) ? property.PhpField.RealField : null;\r\n                            PropertyInfo realProperty = (property.Member is PhpVisibleProperty) ? ((PhpVisibleProperty)property.Member).RealProperty : null;\r\n\r\n                            Debug.Assert(realField != null ^ realProperty != null);\r\n\r\n                            MemberExpression getter = null;\r\n\r\n                            if (realField != null)\r\n                                getter = Expression.Field(Expression.Convert(target.Expression, realType), realField);\r\n                            else if (realProperty != null)\r\n                                getter = Expression.Property(Expression.Convert(target.Expression, realType), realProperty);\r\n\r\n\r\n                            if (Types.PhpReference[0].IsAssignableFrom(getter.Type))\r\n                            {\r\n                                var reference = Expression.Variable(Types.PhpReference[0]);\r\n                                var assignment = Expression.Assign(reference, getter);\r\n\r\n                                if (WantReference)\r\n                                {\r\n                                    ////value = property.Get(this);\r\n                                    ////reference = value as PhpReference;\r\n\r\n                                    var returnLabel = Expression.Label(this._returnType);\r\n\r\n                                    ////if (reference != null && reference.IsSet)\r\n                                    ////{\r\n                                    ////    reference.IsAliased = true;\r\n                                    ////    return reference;\r\n                                    ////}\r\n\r\n                                    var isset = Expression.IfThen(\r\n                                        Expression.Property(assignment, Properties.PhpReference_IsSet),\r\n                                        Expression.Block(\r\n                                            Expression.Assign(Expression.Property(reference, Properties.PhpReference_IsAliased), Expression.Constant(true)),\r\n                                            Expression.Return(returnLabel, reference)));\r\n\r\n                                    ////// the CT property has been unset -> try to invoke __get\r\n                                    ////PhpReference get_ref = InvokeGetterRef(name, caller, out getter_exists);\r\n                                    ////if (getter_exists) return (get_ref == null ? new PhpReference() : get_ref);\r\n\r\n                                    ////if (reference == null)\r\n                                    ////{\r\n                                    ////    reference = new PhpReference(value);\r\n                                    ////    property.Set(this, reference);\r\n                                    ////}\r\n                                    ////else\r\n                                    ////{\r\n                                    ////    reference.IsAliased = true;\r\n                                    ////    reference.IsSet = true;\r\n                                    ////}\r\n                                   \r\n                                    ////return reference;\r\n\r\n                                    return new DynamicMetaObject(\r\n                                        Expression.Block(this._returnType,\r\n                                            new[]{reference},\r\n                                            new Expression[]{\r\n                                                isset,\r\n                                                Expression.Label(returnLabel,\r\n                                                    Expression.Call(null, new Func<DObject, string, DTypeDesc, PhpReference, PhpReference>(notsetOperation).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]), reference))\r\n                                            }),\r\n                                            restrictions);\r\n                                }\r\n                                else\r\n                                {\r\n                                    ////if (reference != null && !reference.IsSet)\r\n                                    ////{\r\n                                    ////    // the property is CT but has been unset\r\n                                    ////    if (issetSemantics)\r\n                                    ////    {\r\n                                    ////        bool handled;\r\n                                    ////        return PropertyIssetHandler(name, caller, out handled);\r\n                                    ////    }\r\n                                    ////    else return GetRuntimeField(name, caller);\r\n                                    ////}\r\n                                    ////else return value;\r\n\r\n\r\n                                    var notsetOperation = _issetSemantics ? (Func<DObject, string, DTypeDesc, object>)GetMemberRuntimeFld : GetMemberIsSet;\r\n                                    var value =\r\n                                        Expression.Block(this._returnType,\r\n                                            new[] { reference },\r\n                                            Expression.Condition(\r\n                                                Expression.Property(assignment, Properties.PhpReference_IsSet),\r\n                                                Expression.Field(reference, Fields.PhpReference_Value),\r\n                                                Expression.Call(null, notsetOperation.Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]))\r\n                                        ));\r\n\r\n                                    return new DynamicMetaObject(value, restrictions);\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if (WantReference)\r\n                                {\r\n                                    return new DynamicMetaObject(\r\n                                        Expression.New(Constructors.PhpReference_Object, Expression.Convert(getter, Types.Object[0])),\r\n                                        restrictions);\r\n                                }\r\n                                else\r\n                                {\r\n                                    return new DynamicMetaObject(\r\n                                        Expression.Call(Methods.PhpVariable.Dereference, Expression.Convert(getter, Types.Object[0])),\r\n                                        restrictions);\r\n                                }\r\n                            }\r\n                        }\r\n                        else if (property.Member is ClrProperty)\r\n                        {\r\n                            var realType = property.DeclaringType.RealType;\r\n                            var realProperty = property.ClrProperty.RealProperty;\r\n\r\n                            // (target.{RealObject|realValue}).<realProperty>\r\n                            Expression value = Expression.Convert(\r\n                                            BinderHelper.ClrObjectWrapDynamic(\r\n                                                Expression.Property(\r\n                                                    BinderHelper.ClrRealObject(target, realType),\r\n                                                    realProperty)),\r\n                                            Types.Object[0]);\r\n\r\n                            if (WantReference) value = BinderHelper.MakePhpReference(value);\r\n\r\n                            return new DynamicMetaObject(value, restrictions);\r\n                        }\r\n                        else if (property.Member is ClrField)\r\n                        {\r\n                            var realType = property.DeclaringType.RealType;\r\n                            var realField = property.ClrField.FieldInfo;\r\n\r\n                            // (target.{RealObject|realValue}).<realField>\r\n                            Expression value = Expression.Convert(\r\n                                            BinderHelper.ClrObjectWrapDynamic(\r\n                                                Expression.Field(\r\n                                                    BinderHelper.ClrRealObject(target, realType),\r\n                                                    realField)),\r\n                                            Types.Object[0]);\r\n\r\n                            if (WantReference) value = BinderHelper.MakePhpReference(value);\r\n\r\n                            return new DynamicMetaObject(value, restrictions);\r\n                        }\r\n                        else if (property.Member is ClrEvent)\r\n                        {\r\n                            var clrEvent = (ClrEvent)property.Member;\r\n                            var realType = property.DeclaringType.RealType;\r\n\r\n                            // emit stub that Wraps event as [ ClrEventObject<handlerType>.Wrap(<SC>, <event name>, <addMethod>, <removeMethod>) ]\r\n                            var stub = new System.Reflection.Emit.DynamicMethod(\r\n                                string.Format(\"event<{0}>\",fieldName),\r\n                                Types.DObject[0], new[] { realType }, realType);\r\n                            var il = new ILEmitter(stub);\r\n                            clrEvent.EmitGetEventObject(\r\n                                il,\r\n                                new Place(null, Properties.ScriptContext_CurrentContext),\r\n                                new IndexedPlace(PlaceHolder.Argument, 0),\r\n                                false);\r\n                            il.Emit(System.Reflection.Emit.OpCodes.Ret);\r\n\r\n                            Expression value = Expression.Call(stub, BinderHelper.ClrRealObject(target, realType));\r\n                            if (WantReference) value = BinderHelper.MakePhpReference(value);\r\n                            return new DynamicMetaObject(value, restrictions);\r\n                        }\r\n                        else\r\n                            throw new NotImplementedException();\r\n\r\n                    case GetMemberResult.NotFound:\r\n                        if (WantReference)\r\n                        {\r\n                            return new DynamicMetaObject(\r\n                                Expression.Call(null, new Func<DObject, string, DTypeDesc, PhpReference>(GetRefMemberNotFound).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0])),\r\n                                restrictions);\r\n                        }\r\n                        else\r\n                        {\r\n                            ////if (issetSemantics)\r\n                            ////{\r\n                            ////    OrderedHashtable<string>.Element element;\r\n                            ////    if (RuntimeFields != null && (element = RuntimeFields.GetElement(name)) != null)\r\n                            ////    {\r\n                            ////        return element.Value;\r\n                            ////    }\r\n                            ////    else\r\n                            ////    {\r\n                            ////        bool handled;\r\n                            ////        return PropertyIssetHandler(name, caller, out handled);\r\n                            ////    }\r\n                            ////}\r\n                            ////else return GetRuntimeField(name, caller);\r\n\r\n                            if (_issetSemantics)\r\n                            {\r\n                                return new DynamicMetaObject(\r\n                                    Expression.Call(Methods.PhpVariable.Dereference,\r\n                                        Expression.Call(null, new Func<DObject, string, DTypeDesc, object>(GetMemberNotFoundIsSet).Method, Expression.Convert(target.Expression, Types.DObject[0]), Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]))),\r\n                                    restrictions);\r\n                            }\r\n                            else\r\n                            {\r\n                                return new DynamicMetaObject(\r\n                                    Expression.Call(\r\n                                        Methods.PhpVariable.Dereference,\r\n                                        Expression.Call(\r\n                                            Expression.Convert(target.Expression, Types.DObject[0]),\r\n                                            Methods.DObject_GetRuntimeField, Expression.Constant(fieldName), Expression.Constant(classContext, Types.DTypeDesc[0]))),\r\n                                    restrictions);\r\n                            };\r\n                        }\r\n                    case GetMemberResult.BadVisibility:\r\n                        {\r\n                            ////PhpException.PropertyNotAccessible(\r\n                            ////    property.DeclaringType.MakeFullName(),\r\n                            ////    name.ToString(),\r\n                            ////    (caller == null ? String.Empty : caller.MakeFullName()),\r\n                            ////    property.IsProtected);\r\n\r\n                            string stringResourceKey = property.IsProtected ? \"protected_property_accessed\" : \"private_property_accessed\";\r\n\r\n                            return new DynamicMetaObject(\r\n                                Expression.Block(this._returnType,\r\n                                    Expression.Call(null, Methods.PhpException.Throw,\r\n                                        Expression.Constant(PhpError.Error, Types.PhpError_String[0]),\r\n                                        Expression.Constant(CoreResources.GetString(stringResourceKey, property.DeclaringType.MakeFullName(), fieldName, (classContext == null ? String.Empty : classContext.MakeFullName())))),\r\n                                    WantReference ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null)\r\n                                    ),\r\n                                restrictions);\r\n                        }\r\n                }\r\n            }\r\n\r\n            ////// warnings:\r\n            ////if (!quiet) // not in isset() operator only\r\n            ////{\r\n            if (!_issetSemantics)\r\n            {\r\n                ////    if (PhpVariable.IsEmpty(var))\r\n                ////        // empty:\r\n                ////        PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"empty_used_as_object\"));\r\n                ////    else\r\n                ////        // PhpArray, string, scalar type:\r\n                ////        PhpException.VariableMisusedAsObject(var, false);\r\n                \r\n                Action<object> error = (var) =>\r\n                {\r\n                    if (PhpVariable.IsEmpty(var))\r\n                        // empty:\r\n                        PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"empty_used_as_object\"));\r\n                    else\r\n                        // PhpArray, string, scalar type:\r\n                        PhpException.VariableMisusedAsObject(var, false);\r\n                };\r\n\r\n                return new DynamicMetaObject(\r\n                    Expression.Block(this._returnType,\r\n                        Expression.Call(error.Method, target.Expression),\r\n                        WantReference ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null)),\r\n                    (target.HasValue && target.Value == null) ?\r\n                        BindingRestrictions.GetInstanceRestriction(target.Expression, null) :\r\n                        BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType));\r\n            }\r\n            ////}\r\n            \r\n            ////// property does not exist\r\n            ////return null;\r\n            return new DynamicMetaObject(\r\n                Expression.Constant(null),\r\n                (target.HasValue && target.Value == null) ?\r\n                    BindingRestrictions.GetInstanceRestriction(target.Expression, null) :\r\n                    BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType));\r\n        }\r\n\r\n        static object GetMemberRuntimeFld(DObject self, string name, DTypeDesc caller)\r\n        {\r\n            return PhpVariable.Dereference(self.GetRuntimeField(name, caller));\r\n        }\r\n        \r\n        static object GetMemberIsSet(DObject self, string name, DTypeDesc caller)\r\n        {\r\n            return PhpVariable.Dereference(self.GetRuntimeField(name, caller));\r\n        }\r\n\r\n        static PhpReference GetRefMemberNotFound(DObject self, string name, DTypeDesc caller)\r\n        {\r\n            PhpReference reference;\r\n            bool getter_exists;\r\n\r\n            // search in RT fields\r\n            if (self.RuntimeFields != null && self.RuntimeFields.ContainsKey(name))\r\n            {\r\n                var namekey = new IntStringKey(name);\r\n                return self.RuntimeFields.table._ensure_item_ref(ref namekey, self.RuntimeFields);\r\n            }\r\n\r\n            // property is not present -> try to invoke __get\r\n            reference = self.InvokeGetterRef(name, caller, out getter_exists);\r\n            if (getter_exists) return (reference == null) ? new PhpReference() : reference;\r\n\r\n            // (no notice/warning/error thrown by PHP)\r\n\r\n            // add the field\r\n            reference = new PhpReference();\r\n            if (self.RuntimeFields == null) self.RuntimeFields = new PhpArray();\r\n            self.RuntimeFields[name] = reference;\r\n\r\n            return reference;\r\n        }\r\n\r\n        static object GetMemberNotFoundIsSet(DObject self, string name, DTypeDesc caller)\r\n        {\r\n            if (self.RuntimeFields != null)\r\n            {\r\n                object value;\r\n                if (self.RuntimeFields.TryGetValue(name, out value))\r\n                    return value;\r\n            }\r\n\r\n            bool handled;\r\n            return self.PropertyIssetHandler(name, caller, out handled);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/PhpInvokeBinderKey.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core.Reflection;\r\n\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    public struct PhpInvokeBinderKey : IEquatable<PhpInvokeBinderKey>\r\n    {\r\n        /// <summary>\r\n        /// Number of arguments in the signature.\r\n        /// </summary>\r\n        private readonly int argumentCount;\r\n\r\n        /// <summary>\r\n        /// Number of generic type arguments in the signature.\r\n        /// </summary>\r\n        private readonly int genericArgumentCount;\r\n\r\n        /// <summary>\r\n        /// Binding flags\r\n        /// </summary>\r\n        private readonly Type returnType;\r\n\r\n        /// <summary>\r\n        /// Method name\r\n        /// </summary>\r\n        private readonly string methodName;\r\n\r\n        /// <summary>\r\n        /// Method name\r\n        /// </summary>\r\n        private readonly DTypeDesc callerClassContext;\r\n\r\n\r\n        private readonly string stringKey;\r\n\r\n\r\n        #region Construction\r\n\r\n        public PhpInvokeBinderKey(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType)\r\n        {\r\n            this.methodName = methodName;\r\n            this.genericArgumentCount = genericParamsCount;\r\n            this.argumentCount = paramsCount;\r\n            this.callerClassContext = callerClassContext;\r\n            this.returnType = returnType;\r\n\r\n            \r\n            StringBuilder sb = new StringBuilder(( methodName != null ? methodName.Length : 0) + returnType.Name + 16);\r\n\r\n            sb.Append(methodName);\r\n            sb.Append(\"|\");\r\n            sb.Append(argumentCount);\r\n            sb.Append(\"|\");\r\n            sb.Append(genericArgumentCount); \r\n            sb.Append(\"|\");\r\n            sb.Append(returnType.Name); \r\n            sb.Append(\"|\");\r\n\r\n            if (callerClassContext != null)\r\n                sb.Append(callerClassContext.GetHashCode());\r\n\r\n            stringKey = sb.ToString();\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n\r\n        #region IEquatable<PhpInvokeBinderKey> Members\r\n\r\n        public bool Equals(PhpInvokeBinderKey other)\r\n        {\r\n            if (methodName != other.methodName)\r\n                return false;\r\n\r\n            if (argumentCount != other.argumentCount)\r\n                return false;\r\n\r\n            if (genericArgumentCount != other.genericArgumentCount)\r\n                return false;\r\n\r\n            if (returnType != other.returnType)\r\n                return false;\r\n\r\n            if (callerClassContext != other.callerClassContext)\r\n                return false;\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        //public override int GetHashCode()\r\n        //{\r\n        //    int result = 1254645177;\r\n\r\n        //    for (int i = 0; i < types.Length; i++)\r\n        //        result ^= types[i].GetHashCode();\r\n\r\n        //    return result;\r\n        //}\r\n\r\n        public override string ToString()\r\n        {\r\n            return stringKey;\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/PhpInvokeMemberBinder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing System.Linq.Expressions;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n    //TODO:\r\n    // - implement IDynamicMetaObjectProvider for DObject, PhpObject, ClrObject, ClrValue\r\n    // - if library function is called with wrong number of arguments throw PhpException.InvalidArgumentCount\r\n    \r\n    /// <summary>\r\n    /// \r\n    /// </summary>\r\n    public abstract class PhpBaseInvokeMemberBinder : DynamicMetaObjectBinder\r\n    {\r\n        #region Fields\r\n\r\n        protected readonly string _methodName;\r\n        protected readonly int _genericParamsCount;\r\n        protected readonly int _paramsCount;\r\n        protected readonly DTypeDesc _classContext;\r\n        protected readonly Type _returnType;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        protected bool ClassContextIsKnown { get { return _classContext == null || !_classContext.IsUnknown; } }\r\n\r\n        /// <summary>\r\n        /// The result type of the invoke operation.\r\n        /// </summary>\r\n        public override Type ReturnType\r\n        {\r\n            get\r\n            {\r\n                return _returnType;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// This binder binds indirect method calls\r\n        /// </summary>\r\n        public bool IsIndirect\r\n        {\r\n            get { return _methodName == null; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Name of the method\r\n        /// </summary>\r\n        protected abstract string ActualMethodName\r\n        {\r\n            get;\r\n        }\r\n\r\n        public int RealMethodArgumentCount\r\n        {\r\n            get\r\n            {\r\n                //ScriptContext + generic parameters count + parameters count\r\n                return 1 + _genericParamsCount + _paramsCount;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates appropriate binder according to paramaters specified\r\n        /// </summary>\r\n        /// <param name=\"methodName\">Name of the method known during binder creation.</param>\r\n        /// <param name=\"genericParamsCount\">Number of generic type arguments of the method</param>\r\n        /// <param name=\"paramsCount\">Number of arguments of the method</param>\r\n        /// <param name=\"callerClassContext\">TypeDesc of the class that is calling this method</param>\r\n        /// <param name=\"returnType\">Type which is expected from the call site to return</param>\r\n        /// <returns>Return appropriate binder derived from PhpInvokeMemberBinder</returns>\r\n        public static PhpInvokeMemberBinder Create(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType)\r\n        {\r\n            if (methodName == null)\r\n            {\r\n                return new PhpIndirectInvokeMemberBinder(genericParamsCount, paramsCount, callerClassContext, returnType);\r\n            }\r\n            else\r\n            {\r\n                return new PhpInvokeMemberBinder(methodName, genericParamsCount, paramsCount, callerClassContext, returnType);\r\n            }\r\n\r\n        }\r\n\r\n        protected PhpBaseInvokeMemberBinder(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType)\r\n        {\r\n            this._methodName = methodName;\r\n            this._genericParamsCount = genericParamsCount;\r\n            this._paramsCount = paramsCount;\r\n            this._classContext = callerClassContext;\r\n            this._returnType = returnType;\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        /// <summary>\r\n        /// Php invoke call site signature is non-standard for DLR. If the object implements IDynamicMetaObjectProvider\r\n        /// a call has to be transleted to arguments that can understand. If it's object comming from Phalanger\r\n        /// for now we just fallback to FallbackInvokeMember method.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// \r\n        /// CallSite&lt; Func&lt; CallSite, \r\n        ///      object /*target instance*/,\r\n        ///      ScriptContext,\r\n        ///      {args}*/*method call arguments*/,\r\n        ///      (DTypeDesc)?/*class context,\r\n        ///      iff {classContext}.IsUnknown*/,\r\n        ///      (object)?/*method name,\r\n        ///      iff {methodName}==null*/, {returnType} &gt; &gt;\r\n        /// \r\n        /// </remarks>\r\n        public override DynamicMetaObject/*!*/ Bind(DynamicMetaObject/*!*/ target, DynamicMetaObject/*!*/[]/*!*/ args)\r\n        {\r\n            Debug.Assert(args.Length > 0);\r\n\r\n            if (target.Value is IDynamicMetaObjectProvider)\r\n            {\r\n                //Translate arguments to DLR standard\r\n                //TODO: Create DlrCompatibilityInvokeBinder because it has to be derived from InvokeMemberBinder\r\n                //return target.BindInvokeMember(this,args);\r\n            }\r\n\r\n            //target = target.ToPhpDynamicMetaObject();\r\n\r\n            return FallbackInvokeMember(target, args);\r\n        }\r\n\r\n\r\n        protected abstract DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args);\r\n\r\n\r\n        protected static DynamicMetaObject[]/*!*/ GetArgumentsRange(DynamicMetaObject/*!*/[]/*!*/ args, int startIndex, int length)\r\n        {\r\n            int top = startIndex + length;\r\n            DynamicMetaObject[] arguments = new DynamicMetaObject[length];\r\n            for (int i = 0; i < length; ++i)\r\n                arguments[i] = args[i + startIndex];\r\n\r\n            return arguments;\r\n        }\r\n\r\n\r\n        protected DynamicMetaObject GetRuntimeClassContext(DynamicMetaObject[] args)\r\n        {\r\n            if (args.Length > this._genericParamsCount + this._paramsCount + 1)\r\n                return args[this._genericParamsCount + this._paramsCount + 1];\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns ClassContext that was supplied during creation of binder or if it wasn't available that time, it selects it from supplied arguments\r\n        /// </summary>\r\n        /// <param name=\"args\">Arguments supplied during run time bind process</param>\r\n        /// <returns></returns>\r\n        protected DTypeDesc GetActualClassContext(DynamicMetaObject[] args)\r\n        {\r\n            if (this._classContext == null)\r\n                return null;\r\n\r\n            if (!this._classContext.IsUnknown)\r\n                return this._classContext;\r\n\r\n            var dmoClassContext = GetRuntimeClassContext(args);\r\n            return dmoClassContext.Value != null ? (DTypeDesc)dmoClassContext.Value : null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Handles the return argument of the method\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Caller needs as returned type\r\n        /// 1.) void\r\n        ///    => result\r\n        /// 2.) PhpReference\r\n        ///    a.) if method returns PhpReference => result\r\n        ///    b.) otherwise => PhpVariable.MakeReference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy));\r\n        /// 3.) otherwise\r\n        ///    a.) if method returns PhpReference = > result.Value\r\n        ///    b.) otherwise => PhpVariable.Dereference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy));\r\n        /// </remarks>\r\n        /// <param name=\"result\">Result to be handled</param>\r\n        /// <param name=\"methodReturnType\">Type of the return argument the method</param>\r\n        /// <param name=\"dereference\">Dereference will be generated.</param>\r\n        protected Expression/*!*/ HandleResult(Expression/*!*/ result, Type/*!*/ methodReturnType, bool dereference = true)\r\n        {\r\n\r\n            if (_returnType == Types.Void)\r\n            {\r\n                // do nothing\r\n                return result;\r\n            }\r\n            else if (_returnType == Types.PhpReference[0])\r\n            {\r\n                if (methodReturnType == Types.PhpReference[0])\r\n                    return result;\r\n                else\r\n                {\r\n                    result = CopyByReturn(result);\r\n\r\n                    return Expression.Call(Methods.PhpVariable.MakeReference, result);\r\n                }\r\n\r\n            }\r\n            else /*if (_returnType != Types.PhpReference[0])*/\r\n            {\r\n                result = CopyByReturn(result);\r\n\r\n                if (methodReturnType == Types.PhpReference[0])\r\n                    return Expression.Field(Expression.Convert(result, Types.PhpReference[0]), Fields.PhpReference_Value);\r\n                else if (dereference)\r\n                {\r\n                    return Expression.Call(Methods.PhpVariable.Dereference, result);\r\n                }\r\n                else\r\n                {\r\n                    // We don't need to dereference at all in this point(for argfull overload only!)\r\n                    // To make sure\r\n                    result = BinderHelper.AssertNotPhpReference(result);\r\n                    return result;\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        private static Expression CopyByReturn(Expression result)\r\n        {\r\n            result = Expression.Call(Methods.PhpVariable.Copy,\r\n                result,\r\n                Expression.Constant(CopyReason.ReturnedByCopy));\r\n            return result;\r\n        }\r\n\r\n\r\n\r\n        protected DynamicMetaObject DoAndReturnDefault(Expression rule, BindingRestrictions restrictions)\r\n        {\r\n            return new DynamicMetaObject(\r\n                    Expression.Block(\r\n                        rule,\r\n                        _returnType == Types.PhpReference[0] ? (Expression)Expression.New(Constructors.PhpReference_Void) : Expression.Constant(null)),\r\n                    restrictions);\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n    }\r\n\r\n\r\n    public class PhpInvokeMemberBinder : PhpBaseInvokeMemberBinder\r\n    {\r\n        #region Fields\r\n\r\n        private ParameterExpression argsArrayVariable;\r\n        private ParameterExpression retValVariable;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Name of the method\r\n        /// </summary>\r\n        protected override string ActualMethodName\r\n        {\r\n            get { return this._methodName; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        internal PhpInvokeMemberBinder(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) :\r\n            base(methodName, genericParamsCount, paramsCount, callerClassContext, returnType)\r\n        {\r\n\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        protected override DynamicMetaObject/*!*/ FallbackInvokeMember(DynamicMetaObject target/*!*/, DynamicMetaObject/*!*/[]/*!*/ args)\r\n        {\r\n            Expression invokeMethodExpr;\r\n\r\n            DObject obj = target.Value as DObject;// target.Value can be something else which isn't DObject ?\r\n\r\n            WrappedClrDynamicMetaObject wrappedTarget = null;\r\n\r\n            bool invokeCallMethod = false;\r\n\r\n            // Restrictions\r\n            BindingRestrictions restrictions;\r\n            BindingRestrictions classContextRestrictions = BindingRestrictions.Empty;\r\n            BindingRestrictions defaultRestrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType);\r\n\r\n            DTypeDesc classContext = this._classContext;\r\n\r\n            if (!ClassContextIsKnown)//ClassContext wasn't supplied during creation of binder => put it into restriction\r\n            {\r\n                Debug.Assert(args.Length > RealMethodArgumentCount, \"Not enough arguments!\");\r\n\r\n                DynamicMetaObject dmoRuntimeClassContext = GetRuntimeClassContext(args);\r\n                Debug.Assert(dmoRuntimeClassContext.Value == null || Types.DTypeDesc[0].IsAssignableFrom(dmoRuntimeClassContext.LimitType), \"Wrong class context type!\");\r\n\r\n                classContext = (DTypeDesc)dmoRuntimeClassContext.Value;\r\n                Debug.Assert(classContext == null || !classContext.IsUnknown, \"Class context should be known at run time!\");\r\n\r\n                classContextRestrictions = BindingRestrictions.GetInstanceRestriction(dmoRuntimeClassContext.Expression, classContext);\r\n                defaultRestrictions = defaultRestrictions.Merge(classContextRestrictions);\r\n            }\r\n\r\n            if (obj == null)\r\n            {\r\n\r\n                if (target.Value != null && Configuration.Application.Compiler.ClrSemantics)\r\n                {\r\n                    // TODO: some normalizing conversions (PhpString, PhpBytes -> string):\r\n                    target = new WrappedClrDynamicMetaObject(target);\r\n                    obj = target.Value as DObject;\r\n\r\n                    wrappedTarget = target as WrappedClrDynamicMetaObject;\r\n\r\n                    Debug.Assert(obj != null);\r\n\r\n                }\r\n                else\r\n                {\r\n                    //defaultRestrictions = defaultRestrictions.Merge(BindingRestrictions.GetTypeRestriction\r\n                    if (target.Value == null)\r\n                        defaultRestrictions = BindingRestrictions.GetInstanceRestriction(target.Expression, null);\r\n\r\n                    return DoAndReturnDefault(\r\n                                    BinderHelper.ThrowError(\"method_called_on_non_object\", ActualMethodName),\r\n                                    defaultRestrictions);\r\n                }\r\n            }\r\n\r\n\r\n\r\n            // obtain the appropriate method table\r\n            DTypeDesc type_desc = obj.TypeDesc;\r\n\r\n            // perform method lookup\r\n            DRoutineDesc method;\r\n            GetMemberResult result = type_desc.GetMethod(new Name(ActualMethodName), classContext, out method);\r\n\r\n            //PhpStack stack = context.Stack;\r\n\r\n            if (result == GetMemberResult.NotFound)\r\n            {\r\n\r\n                if ((result = type_desc.GetMethod(Name.SpecialMethodNames.Call, classContext, out method)) == GetMemberResult.NotFound)\r\n                {\r\n                    return DoAndReturnDefault(\r\n                                    Expression.Call(Methods.PhpException.UndefinedMethodCalled, Expression.Constant(obj.TypeName), Expression.Constant(ActualMethodName)),\r\n                                    defaultRestrictions\r\n                                    );// TODO: alter restrictions\r\n                }\r\n                else\r\n                {\r\n                    invokeCallMethod = true;\r\n                }\r\n\r\n            }\r\n\r\n            // throw an error if the method was found but the caller is not allowed to call it due to its visibility\r\n            if (result == GetMemberResult.BadVisibility)\r\n            {\r\n                return DoAndReturnDefault(\r\n                    BinderHelper.ThrowVisibilityError(method, classContext),\r\n                    defaultRestrictions);\r\n            }\r\n\r\n            if (invokeCallMethod)\r\n            {\r\n                InvokeCallMethod(target, args, obj, method, out restrictions, out invokeMethodExpr);\r\n\r\n                return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions));\r\n\r\n            }\r\n            else\r\n            {\r\n                // we are invoking the method\r\n\r\n                // PhpRoutine (function or method)\r\n                if (method.Member is PhpRoutine)\r\n                {\r\n                    InvokePhpMethod(target, args, method.PhpRoutine, out restrictions, out invokeMethodExpr);\r\n                    return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions));\r\n                }\r\n                // ClrMethod\r\n                else if (method.Member is ClrMethod)\r\n                {\r\n                    var targetwrapper = (target.LimitType == typeof(ClrObject)) ?\r\n                        (DynamicMetaObject)new ClrDynamicMetaObject(target) :       // ((ClrObject)target).RealType restriction\r\n                        (DynamicMetaObject)new ClrValueDynamicMetaObject(target);   // simple type restriction, IClrValue<T> or any .NET class inheriting PhpObject\r\n\r\n                    InvokeClrMethod(targetwrapper, args, method, out restrictions, out invokeMethodExpr);\r\n\r\n                    if (wrappedTarget != null)\r\n                    {\r\n                        return new DynamicMetaObject(Expression.Block(wrappedTarget.WrapIt(),\r\n                                                     invokeMethodExpr), wrappedTarget.Restrictions.Merge(classContextRestrictions));\r\n                    }\r\n\r\n                    return new DynamicMetaObject(invokeMethodExpr, restrictions.Merge(classContextRestrictions));\r\n                }\r\n            }\r\n\r\n            throw new NotImplementedException();\r\n\r\n        }\r\n\r\n        private void InvokeClrMethod(DynamicMetaObject target, DynamicMetaObject/*!*/[] args, DRoutineDesc method, out BindingRestrictions restrictions, out Expression invokeMethodExpr)\r\n        {\r\n            DynamicMetaObject scriptContext = args[0];\r\n\r\n            //Select arguments without scriptContext\r\n            DynamicMetaObject[] realArgs = GetArgumentsRange(args, 1, RealMethodArgumentCount - 1);\r\n\r\n\r\n#if DLR_OVERLOAD_RESOLUTION\r\n\r\n            // Convert arguments\r\n            DynamicMetaObject[] realArgsConverted = Array.ConvertAll<DynamicMetaObject, DynamicMetaObject>(realArgs, (x) =>\r\n            {\r\n                return x.ToPhpDynamicMetaObject();\r\n\r\n            });\r\n\r\n            //DLR overload resolution\r\n            DynamicMetaObject res = PhpBinder.Instance.CallClrMethod(method.ClrMethod, target, realArgsConverted);\r\n            restriction = res.Restriction;\r\n            invokeMethodExpr = res.Rule;\r\n\r\n#else\r\n            // Old overload resolution\r\n            // TODO: in case of zero-parameters, we can call via ArgFull\r\n            InvokeArgLess(target, scriptContext, method, realArgs, out restrictions, out invokeMethodExpr);\r\n#endif\r\n        }\r\n\r\n\r\n        private void InvokeArgLess(DynamicMetaObject target, DynamicMetaObject scriptContext, DRoutineDesc method, DynamicMetaObject[] args, out BindingRestrictions restrictions, out Expression invokeMethodExpr)\r\n        {\r\n            int argsWithoutScriptContext = RealMethodArgumentCount - 1;\r\n\r\n            System.Reflection.MethodInfo miAddFrame = Methods.PhpStack.AddFrame.Overload(argsWithoutScriptContext);\r\n\r\n            Expression[] argsExpr = null;\r\n            if (miAddFrame == Methods.PhpStack.AddFrame.N)\r\n            {\r\n                //Create array of arguments\r\n                argsExpr = new Expression[1];\r\n                argsExpr[0] = Expression.NewArrayInit(Types.Object[0], BinderHelper.PackToExpressions(args, 0, argsWithoutScriptContext));\r\n            }\r\n            else\r\n            {\r\n                //call overload with < N arguments\r\n                //argsExpr = new Expression[argsWithoutScriptContext];\r\n                argsExpr = BinderHelper.PackToExpressions(args, 0, argsWithoutScriptContext);\r\n            }\r\n\r\n            var stack = Expression.Field(scriptContext.Expression,\r\n                                            Fields.ScriptContext_Stack);\r\n\r\n            // scriptContext.PhpStack\r\n            // PhpStack.Add( args )\r\n            // call argless stub\r\n            invokeMethodExpr = Expression.Block(_returnType,\r\n                                    Expression.Call(\r\n                                        stack,\r\n                                        miAddFrame, argsExpr),\r\n                                    Expression.Assign(\r\n                                        Expression.Field(stack, Fields.PhpStack_AllowProtectedCall),\r\n                                        Expression.Constant(true, Types.Bool[0])),\r\n                                    HandleResult(\r\n                                        Expression.Call(method.ArglessStubMethod,\r\n                                            target.Expression,\r\n                                            stack),\r\n                                        method.ArglessStubMethod.ReturnType));\r\n\r\n            restrictions = target.Restrictions;\r\n        }\r\n\r\n        private void InvokeCallMethod(DynamicMetaObject target,\r\n            DynamicMetaObject/*!*/[] args,\r\n            DObject/*!*/ obj,\r\n            DRoutineDesc/*!*/ method,\r\n            out BindingRestrictions restrictions,\r\n            out Expression invokeMethodExpr)\r\n        {\r\n            var insideCaller = Expression.Property(\r\n                                        Expression.Convert(target.Expression, Types.DObject[0]),\r\n                                         Properties.DObject_InsideCaller);\r\n\r\n            if (argsArrayVariable == null)\r\n                argsArrayVariable = Expression.Parameter(Types.PhpArray[0], \"args\");\r\n\r\n            if (retValVariable == null)\r\n                retValVariable = Expression.Parameter(Types.Object[0], \"retVal\");\r\n\r\n            ParameterExpression[] vars = new ParameterExpression[] { argsArrayVariable, retValVariable };\r\n\r\n            // Just select real method arguments without ScriptContext and generic type arguments\r\n            var justParams = BinderHelper.PackToExpressions(args, 1 + _genericParamsCount, _paramsCount);\r\n\r\n            // Expression which calls ((PhpArray)argArray).add method on each real method argument.\r\n            var initArgsArray = Array.ConvertAll<Expression, Expression>(justParams, (x) => Expression.Call(argsArrayVariable, Methods.PhpHashtable_Add, x));\r\n\r\n            // Argfull __call signature: (ScriptContext, object, object)->object\r\n            var callerMethodArgs = new DynamicMetaObject[3] {   args[0], \r\n                                                                new DynamicMetaObject(Expression.Constant(ActualMethodName),BindingRestrictions.Empty),\r\n                                                                new DynamicMetaObject(argsArrayVariable, BindingRestrictions.Empty) };\r\n            // what if method.PhpRoutine is null \r\n            InvokePhpMethod(target, callerMethodArgs, /*(PhpObject)target.Value, */method.PhpRoutine, out restrictions, out invokeMethodExpr);\r\n\r\n\r\n            //Expression:\r\n            // if (target.insideCaller)\r\n            //      throw new UndefinedMethodException();\r\n            //\r\n            // args = new PhpArray(paramsCount, 0);\r\n            //\r\n            // args.Add(arg0);\r\n            // .\r\n            // .\r\n            // args.Add(paramsCount);\r\n            //\r\n            // target.insideCaller = true;\r\n            // try\r\n            // {\r\n            //     ret_val = target.__call( scriptContext, methodName, args);\r\n            // }\r\n            // finally\r\n            // {\r\n            //     target.insideCaller = false;\r\n            // }\r\n            // return ret_val;\r\n            //\r\n            invokeMethodExpr = Expression.Block(\r\n                vars,//local variables\r\n                Expression.IfThen(Expression.Property(\r\n                                        Expression.Convert(target.Expression, Types.DObject[0]),\r\n                                        Properties.DObject_InsideCaller),\r\n                                  Expression.Call(Methods.PhpException.UndefinedMethodCalled, Expression.Constant(obj.TypeName), Expression.Constant(ActualMethodName))),\r\n\r\n                Expression.Assign(\r\n                                argsArrayVariable,\r\n                                Expression.New(Constructors.PhpArray.Int32_Int32,\r\n                                            Expression.Constant(_paramsCount),\r\n                                            Expression.Constant(0))),\r\n\r\n                                ((initArgsArray.Length == 0) ? (Expression)Expression.Empty() : Expression.Block(initArgsArray)),\r\n\r\n                                Expression.Assign(insideCaller,\r\n                                                Expression.Constant(true)),\r\n                                Expression.TryFinally(\r\n                //__call(caller,args)\r\n                                    Expression.Assign(retValVariable, invokeMethodExpr),\r\n                //Finally part:\r\n                                    Expression.Assign(insideCaller,\r\n                                                        Expression.Constant(false))\r\n                                    ),\r\n                                 HandleResult(retValVariable, method.PhpRoutine.ArgFullInfo.ReturnType, false));\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// This method binds rules for PhpMethod\r\n        /// </summary>\r\n        private void InvokePhpMethod(DynamicMetaObject/*!*/ target, DynamicMetaObject[]/*!!*/ args, /*object targetObj,*/ PhpRoutine/*!*/ routine, out BindingRestrictions restrictions, out Expression invokeMethodExpr)\r\n        {\r\n            Debug.Assert(target != null && target.Value != null);\r\n            Debug.Assert(!(target.Value is IClrValue), \"PhpRoutine should not be declared on CLR value type!\");\r\n\r\n            /*if (target.Value is PhpObject)\r\n            {\r\n                // Restriction: typeof(target) == |target.TypeDesc.RealType|\r\n                var targetPhpObj = (PhpObject)target.Value;\r\n                Debug.Assert(targetPhpObj.TypeDesc.RealType == target.LimitType);\r\n                Debug.Assert(target.Value.GetType() == target.LimitType);\r\n                restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, targetPhpObj.TypeDesc.RealType);\r\n            }\r\n            else*/\r\n            Debug.Assert(typeof(ClrObject).IsSealed);   // just to ensure following condition is correct\r\n            if (target.Value.GetType() == typeof(ClrObject))\r\n            {\r\n                target = new ClrDynamicMetaObject(target);  // unwrap the real object, get restrictions\r\n                restrictions = target.Restrictions;\r\n            }\r\n            else\r\n            {\r\n                Debug.Assert(target.Value.GetType() == target.LimitType);   // just for sure\r\n                Debug.Assert(!(target.Value is PhpObject) || ((PhpObject)target.Value).TypeDesc.RealType == target.LimitType);\r\n\r\n                restrictions = BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType);\r\n            }\r\n\r\n            BindingRestrictions argumentsRestrictions;\r\n            Expression[] arguments;\r\n\r\n            if (routine.Name != Name.SpecialMethodNames.Call)\r\n            {\r\n                args = GetArgumentsRange(args, 0, RealMethodArgumentCount);// This can't be done when _call method is invoked\r\n\r\n                //Check if method has ArgAware attribute\r\n                if ((routine.Properties & RoutineProperties.IsArgsAware) != 0 ||\r\n                    routine.IsStatic)// this is because of hack in PHP.Library.XML library static methods that can be also called like instance methods\r\n                {\r\n                    DynamicMetaObject scriptContext = args[0];\r\n\r\n                    //Select arguments without scriptContext\r\n                    DynamicMetaObject[] realArgs = GetArgumentsRange(args, 1, RealMethodArgumentCount - 1);\r\n\r\n                    InvokeArgLess(target, scriptContext, routine.RoutineDesc, realArgs, out argumentsRestrictions, out invokeMethodExpr);\r\n                    restrictions = restrictions.Merge(argumentsRestrictions);\r\n                    return;\r\n                }\r\n\r\n                arguments = routine.PrepareArguments(args, _genericParamsCount, _paramsCount, out argumentsRestrictions);\r\n                restrictions = restrictions.Merge(argumentsRestrictions);\r\n            }\r\n            else\r\n            {\r\n                arguments = BinderHelper.PackToExpressions(args);\r\n            }\r\n\r\n            //((PhpObject)target))\r\n            var realObjEx = Expression.Convert(target.Expression, routine.ArgFullInfo.DeclaringType);//targetObj.TypeDesc.RealType);\r\n\r\n            //ArgFull( ((PhpObject)target), ScriptContext, args, ... )\r\n            invokeMethodExpr = Expression.Call(BinderHelper.WrapInstanceMethodCall(routine.ArgFullInfo),\r\n                                     BinderHelper.CombineArguments(realObjEx, arguments));\r\n\r\n            invokeMethodExpr = ReturnArgumentHelpers.ReturnValueConversion(routine.ArgFullInfo, invokeMethodExpr);\r\n\r\n            invokeMethodExpr = HandleResult(invokeMethodExpr, routine.ArgFullInfo.ReturnType, false);\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n\r\n    #region PhpIndirectInvokeMemberBinder\r\n\r\n    public sealed class PhpIndirectInvokeMemberBinder : PhpInvokeMemberBinder\r\n    {\r\n\r\n        #region Fields\r\n\r\n        private string actualMethodName;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Name of the actual method.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Can change in the begining of the each binding\r\n        /// </remarks>\r\n        protected override string ActualMethodName\r\n        {\r\n            get { return this.actualMethodName; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        internal PhpIndirectInvokeMemberBinder(int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType) :\r\n            base(null, genericParamsCount, paramsCount, callerClassContext, returnType)\r\n        {\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        ///// <summary>\r\n        ///// Returns methodName from Args\r\n        ///// </summary>\r\n        ///// <param name=\"args\"></param>\r\n        ///// <returns></returns>\r\n        //protected DynamicMetaObject GetRuntimeMethodName(DynamicMetaObject[] args)\r\n        //{\r\n        //    //if (args.Length == this.genericParamsCount + this.paramsCount + 3) // args contains ClassContext \r\n        //    //    return args[this.genericParamsCount + this.paramsCount + 2];\r\n        //    //else if (args.Length == this.genericParamsCount + this.paramsCount + 2)\r\n        //    //    return args[this.genericParamsCount + this.paramsCount + 1];\r\n\r\n        //    //throw new InvalidOperationException();\r\n\r\n        //    return args[args.Length - 1];\r\n\r\n        //}\r\n\r\n\r\n        protected override DynamicMetaObject/*!*/ FallbackInvokeMember(\r\n            DynamicMetaObject target,\r\n            DynamicMetaObject[] args)\r\n        {\r\n            Debug.Assert(Types.String[0].IsAssignableFrom(args[args.Length - 1].LimitType), \"Wrong field name type!\");\r\n\r\n            DynamicMetaObject dmoMethodName = args[args.Length - 1];\r\n\r\n            string name = PhpVariable.AsString(dmoMethodName.Value);\r\n            if (name == null)\r\n            {\r\n                //PhpException.Throw(PhpError.Error, CoreResources.GetString(\"invalid_method_name\"));\r\n                //return new PhpReference() | null;\r\n\r\n                return DoAndReturnDefault(\r\n                                BinderHelper.ThrowError(\"invalid_method_name\"),\r\n                                target.Restrictions);\r\n\r\n                throw new NotImplementedException();\r\n            }\r\n            else\r\n            {\r\n                // Restriction: PhpVariable.AsString(methodName) == |methodName|\r\n                BindingRestrictions restrictions = BindingRestrictions.GetExpressionRestriction(\r\n                                    Expression.Equal(\r\n                                        Expression.Call(Methods.PhpVariable.AsString, dmoMethodName.Expression),\r\n                                        Expression.Constant(dmoMethodName.Value, Types.String[0])));\r\n\r\n                actualMethodName = name;\r\n\r\n                //transform arguments that it doesn't contains methodName\r\n                Array.Resize<DynamicMetaObject>(ref args, args.Length - 1);\r\n\r\n                DynamicMetaObject result = base.FallbackInvokeMember(target, args);\r\n\r\n                return new DynamicMetaObject(\r\n                    result.Expression,\r\n                    result.Restrictions.Merge(restrictions));//TODO: Creation of this can be saved\r\n            }\r\n\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/PhpOverloadResolver.cs",
    "content": "﻿#if DLR_OVERLOAD_RESOLUTION\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Text;\r\nusing Microsoft.Scripting.Actions;\r\nusing Microsoft.Scripting.Actions.Calls;\r\nusing System.Dynamic;\r\nusing Microsoft.Scripting.Runtime;\r\nusing System.Reflection;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    //public class PhpOverloadResolver : DefaultOverloadResolver\r\n    //{\r\n\r\n    //}\r\n\r\n}\r\n#endif"
  },
  {
    "path": "Source/Core/Binders/PhpRoutineExtensions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing System.Linq.Expressions;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n\r\n    internal static class PhpRoutineExtensions\r\n    {\r\n        /// <summary>\r\n        /// Prepares arguments for argfull overload.\r\n        /// </summary>\r\n        /// <param name=\"routine\">Routine for which arguments should be prepared</param>\r\n        /// <param name=\"arguments\">Arguments to be prepared for the routine</param>\r\n        /// <param name=\"genericArguments\">Amount of generic arguments provided by call site.</param>\r\n        /// <param name=\"regularArguments\">Amount of value arguments provided by call site.</param>\r\n        /// <param name=\"restrictions\">Type restrictions for the arguments</param>\r\n        /// <returns>Array of prepared arguments to be called with routine</returns>\r\n        /// <remarks>\r\n        /// This is basically substitute for everything important that was done in argless overload (except it doesn't use PhpStack but evaluation stack).\r\n        /// It adopts the arguments according to routine. e.g. dereference reference if value is needed, supplies default argument, etc.\r\n        /// </remarks>\r\n        public static Expression[] PrepareArguments(this PhpRoutine routine, DynamicMetaObject[] arguments, int genericArguments, int regularArguments, out BindingRestrictions restrictions)\r\n        {\r\n            const int scriptContextIndex = 0;\r\n            DynamicMetaObject arg;\r\n            int result_offset = 0;\r\n            int argument_offset = 0;\r\n            Expression[] result = new Expression[1 + routine.Signature.GenericParamCount + routine.Signature.ParamCount];//ScriptContext + all arguments = actual arguments to be passed to argfull overload\r\n            restrictions = BindingRestrictions.Empty;\r\n\r\n            result[scriptContextIndex] = arguments[scriptContextIndex].Expression;\r\n            ++result_offset;\r\n            ++argument_offset;\r\n\r\n\t\t\t// peek pseudo-generic arguments:\r\n            for (int i = 0; i < routine.Signature.GenericParamCount; ++i)\r\n            {\r\n                if (i < genericArguments)\r\n                {\r\n                    arg = arguments[argument_offset + i];\r\n                }\r\n                else\r\n                {\r\n                    arg = null;\r\n                }\r\n\r\n                result[result_offset + i] = GeneratePeekPseudoGenericArgument(routine, arguments[scriptContextIndex], arg, i);\r\n\r\n                // it isn't necessary to add restriction for type argument, it is always DTypeDesc\r\n            }\r\n\r\n            result_offset += routine.Signature.GenericParamCount;\r\n            argument_offset += genericArguments;\r\n\r\n\t\t\t// peek regular arguments:\r\n            // skip first one ScriptContext and generic parameters\r\n            for (int i = 0; i < routine.Signature.ParamCount; ++i)\r\n            {\r\n                if (i < regularArguments)\r\n                {\r\n                    arg = arguments[argument_offset + i];\r\n\r\n                    if (arg.RuntimeType != null)\r\n                        restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(arguments[argument_offset + i].Expression, arguments[argument_offset + i].LimitType));\r\n                    else\r\n                        restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(arguments[argument_offset + i].Expression, null));//(MB) is it necessary?\r\n                }\r\n                else\r\n                {\r\n                    arg = null;\r\n                }\r\n                \r\n                result[result_offset + i] = GeneratePeekArgument(routine, arguments[scriptContextIndex], arg, i);\r\n\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        private static Expression/*!*/ GeneratePeekPseudoGenericArgument(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int index)\r\n        {\r\n            bool optional = index >= routine.Signature.MandatoryGenericParamCount;\r\n            int indexTransformed = index + 1; // in PHP indexes of arguments starts from index 1\r\n\r\n            if (optional)\r\n                return PeekTypeOptional(routine, scriptContext, arg, indexTransformed);\r\n            else\r\n                return PeekType(routine, scriptContext, arg, indexTransformed);\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates expression for a given argument to fit formal argument of the give routine.\r\n        /// </summary>\r\n        /// <param name=\"routine\">Routine for which argument will be supplied.</param>\r\n        /// <param name=\"scriptContext\">ScriptContext DynamicMetaObject</param>\r\n        /// <param name=\"arg\">Actual argument to be supplied to be supplied to routine.</param>\r\n        /// <param name=\"argIndex\">Index of the argument in a routine(not counting ScriptContext argument).</param>\r\n        /// <returns>The expression of an argument that is prepared to be supplied as an argument to the routine.</returns>\r\n        private static Expression/*!*/ GeneratePeekArgument(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            bool optional = argIndex >= routine.Signature.MandatoryParamCount;\r\n            int argIndexTransformed = argIndex + 1; // in PHP indexes of arguments starts from index 1\r\n\r\n            if (routine.Signature.IsAlias(argIndex))\r\n            {\r\n                if (optional)\r\n                    return PeekReferenceOptional(routine, scriptContext, arg, argIndexTransformed);\r\n                else\r\n                    return PeekReference(routine, scriptContext, arg, argIndexTransformed);\r\n            }\r\n            else\r\n            {\r\n                if (optional)\r\n                    return PeekValueOptional(routine, scriptContext, arg, argIndexTransformed);\r\n                else\r\n                    return PeekValue(routine, scriptContext, arg, argIndexTransformed);\r\n            }\r\n        }\r\n\r\n\r\n        private static Expression/*!*/ PeekValue(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n\t\t\tif (arg != null)\r\n\t\t\t{\r\n\t\t\t\t// peeks the value:\r\n                return PeekValueUnchecked(routine, scriptContext, arg, argIndex);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                return Expression.Block(\r\n                        BinderHelper.ThrowMissingArgument(argIndex, routine.FullName),\r\n                        Expression.Constant(null));\r\n                \r\n\t\t\t}\r\n        }\r\n\r\n        private static Expression/*!*/ PeekValueOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            if (arg != null)\r\n            {\r\n                // peeks the value:\r\n                return PeekValueUnchecked(routine, scriptContext, arg, argIndex);\r\n            }\r\n            else\r\n            {\r\n                // default value:\r\n                return Expression.Constant(Arg.Default);\r\n            }\r\n        }\r\n\r\n\r\n        private static Expression/*!*/ PeekValueUnchecked(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n\t\t{\r\n\t\t\t// caller may have pushed a reference even if a formal argument is not reference => dereference it:\r\n            if (Types.PhpReference[0].IsAssignableFrom(arg.LimitType)) // what about SmartReference\r\n            {\r\n                //object result = ((PhpReference)arg_i).Value;\r\n                return Expression.Field(Expression.Convert(arg.Expression, Types.PhpReference[0]), Fields.PhpReference_Value);\r\n            }\r\n            else\r\n\t\t\t// caller may have pushed a runtime chain => evaluate it:\r\n                if (arg.LimitType == Types.PhpRuntimeChain[0])\r\n            {\r\n                //result = php_chain.GetValue(Context);\r\n                return Expression.Call(\r\n                    Expression.Convert(arg.Expression, Types.PhpRuntimeChain[0]),\r\n                    Methods.PhpRuntimeChain.GetValue,\r\n                    scriptContext.Expression);\r\n            }\r\n            else\r\n            {\r\n                return arg.Expression;\r\n            }\r\n\r\n\t\t}\r\n\r\n\r\n\r\n        private static Expression/*!*/ PeekReference(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            if (arg != null)\r\n            {\r\n                // peeks the reference:\r\n                return PeekReferenceUnchecked(routine, scriptContext, arg, argIndex);\r\n            }\r\n            else\r\n            {\r\n                return Expression.Block(\r\n                        BinderHelper.ThrowMissingArgument(argIndex, routine.FullName),\r\n                        Expression.New(Constructors.PhpReference_Void));\r\n            }\r\n\r\n        }\r\n\r\n\r\n        private static Expression/*!*/ PeekReferenceOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            if (arg != null)\r\n            {\r\n                // peeks the value:\r\n                return PeekReferenceUnchecked(routine, scriptContext, arg, argIndex);\r\n            }\r\n            else\r\n            {\r\n                // default value:\r\n                return Expression.Constant(Arg.Default,Types.PhpReference[0]);\r\n            }\r\n        }\r\n\r\n        private static Expression/*!*/ PeekReferenceUnchecked(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            // the caller may not pushed a reference although the formal argument is a reference:\r\n            // it doesn't matter if called by callback:\r\n            if (!Types.PhpReference[0].IsAssignableFrom(arg.LimitType))\r\n            {\r\n                // caller may have pushed a runtime chain => evaluate it:\r\n                if (arg.LimitType == Types.PhpRuntimeChain[0])\r\n                {\r\n                    //result = php_chain.GetReference(Context);\r\n                    return Expression.Call(\r\n                        Expression.Convert(arg.Expression, Types.PhpRuntimeChain[0]),\r\n                        Methods.PhpRuntimeChain.GetReference,\r\n                        scriptContext.Expression);\r\n                }\r\n                else\r\n                {\r\n                    // the reason of copy is not exactly known (it may be returning by copy as well as passing by copy):\r\n                    // result = new PhpReference(PhpVariable.Copy(arg_i, CopyReason.Unknown));\r\n\r\n                    ParameterExpression resultVariable = Expression.Parameter(Types.PhpReference[0], \"result\");\r\n                    ParameterExpression[] vars = new ParameterExpression[] { resultVariable };\r\n\r\n                    return Expression.Block(vars,\r\n                        Expression.Assign(\r\n                            resultVariable,\r\n                            Expression.New(Constructors.PhpReference_Object, Expression.Call(Methods.PhpVariable.Copy, arg.Expression, Expression.Constant(CopyReason.Unknown)))),\r\n                        BinderHelper.ThrowArgumentNotPassedByRef(argIndex, routine.FullName),\r\n                        resultVariable);\r\n\r\n                    //(MB) I'm not sure if it's necessary to execute these two in this order\r\n\r\n\r\n                    //Original code\r\n                    //\r\n                    //(MB) I don't have to solve this now, PhpCallback is called in a old manner. So I can just throw exception always now.\r\n                    //\r\n                    // Reports an error in the case that we are not called by callback.\r\n                    // Although, this error is fatal one can switch throwing exceptions off.\r\n                    // If this is the case the afterwards behavior will be the same as if callback was called.\r\n                    //if (!Callback)\r\n                    //{\r\n                    //    // warning (can invoke user code => we have to save and restore callstate):\r\n                    //    CallState call_state = SaveCallState();\r\n\r\n                    //    PhpException.ArgumentNotPassedByRef(i, CalleeName);\r\n                    //    RestoreCallState(call_state);\r\n                    //}\r\n                }\r\n            }\r\n            else\r\n            {\r\n                return Expression.Convert(arg.Expression, arg.LimitType);\r\n            }\r\n\r\n          \r\n        }\r\n\r\n\r\n        private static Expression/*!*/ PeekType(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            if (arg != null)\r\n            {\r\n                // peeks the value:\r\n                return Expression.Convert(arg.Expression, arg.LimitType);\r\n            }\r\n            else\r\n            {\r\n                return Expression.Block(\r\n                    BinderHelper.ThrowMissingTypeArgument(argIndex, routine.FullName),\r\n                    Expression.Constant(DTypeDesc.ObjectTypeDesc, Types.DTypeDesc[0]));\r\n            }\r\n        }\r\n\r\n        private static Expression/*!*/ PeekTypeOptional(PhpRoutine routine, DynamicMetaObject scriptContext, DynamicMetaObject arg, int argIndex)\r\n        {\r\n            if (arg != null)\r\n            {\r\n                // peeks the value:\r\n                return Expression.Convert(arg.Expression, arg.LimitType);\r\n            }\r\n            else\r\n            {\r\n                // default value:\r\n                return Expression.Constant(Arg.DefaultType, Types.DTypeDesc[0]);\r\n            }\r\n\r\n        }\r\n\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Binders/ReturnArgumentHelpers.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Binders\r\n{\r\n    internal static class ReturnArgumentHelpers\r\n    {\r\n        #region Return Value Conversion\r\n\r\n        public static Expression/*!*/ ReturnValueConversion(MethodInfo method, Expression/*!*/ returnExpr)\r\n        {\r\n            Type returnType = method.ReturnType;\r\n\r\n            if (returnType == null || returnType == Types.Void)\r\n                return returnExpr; // nothing to be converted\r\n\r\n            // whether to emit cast to false:\r\n            if (method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false))\r\n            {\r\n                var tmp = Expression.Variable(Types.Object[0]);\r\n                ParameterExpression[] vars = new ParameterExpression[] { tmp };\r\n\r\n                if (returnType == typeof(int))\r\n                {\r\n                    return Expression.Block(Types.Object[0], vars,\r\n                        Expression.Assign(tmp, returnExpr),\r\n                        Expression.Condition(Expression.Equal(\r\n                            Expression.Convert(tmp,Types.Int[0]), Expression.Constant(-1)),\r\n                            Expression.Convert(Expression.Constant(false), Types.Object[0]),\r\n                            tmp));\r\n                }\r\n                else\r\n                {\r\n                    return Expression.Block(Types.Object[0], vars,\r\n                        Expression.Assign(tmp, returnExpr),\r\n                        Expression.Condition(Expression.Equal(\r\n                            tmp, Expression.Constant(null)),\r\n                            Expression.Convert(Expression.Constant(false),Types.Object[0]),\r\n                            tmp));\r\n                }\r\n            }\r\n            //TODO: else // deep copy:\r\n            //    if (method.ReturnTypeCustomAttributes.IsDefined(typeof(PhpDeepCopyAttribute), false) && !returnType.IsValueType)\r\n            //    {\r\n            //        // returnValue = (<returnType>)PhpVariable.Copy(returnValue,CopyReason.ReturnedByCopy);\r\n            //    }\r\n\r\n            return returnExpr;\r\n\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Comparisons.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Interfaces\r\n\r\n    /// <summary>\r\n\t/// Defines comparison methods which are used to compare PHP.NET types.\r\n\t/// </summary>\r\n\tpublic interface IPhpComparable\r\n\t{\r\n        /// <summary>\r\n        /// Compares the current instance with another object using default comparer.\r\n        /// </summary>\r\n        /// <param name=\"obj\">Object to compare with.</param>\r\n        /// <returns>-1,0,+1</returns>\r\n        /// <exception cref=\"ArgumentException\">Incomparable objects have been compared.</exception>\r\n\t\tint CompareTo(object obj);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares the current instance with another object.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*'/>\r\n        /// <exception cref=\"ArgumentException\">Incomparable objects have been compared.</exception>\r\n\t\tint CompareTo(object obj, IComparer/*!*/ comparer);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Defines comparer which can be used to compare entries of a disctionary collection.\r\n\t/// </summary>\r\n\tpublic interface IDictionaryComparer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Compares two entries of a dictionary collection.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareEntries\"]/*'/>\r\n\t\tint Compare(object keyA, object valueA, object keyB, object valueB);\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region Dictionary Comparers\r\n\r\n    /// <summary>\r\n\t/// Compares keys of dictionary entries by specified comparer.\r\n\t/// </summary>\r\n\tpublic class KeyComparer : IComparer<KeyValuePair<IntStringKey, object>>\r\n\t{\r\n\t\t/// <summary>Regular comparer.</summary>\r\n\t\tpublic static readonly KeyComparer Default = new KeyComparer(PhpComparer.Default, false);\r\n\t\t/// <summary>Numeric comparer.</summary>\r\n\t\tpublic static readonly KeyComparer Numeric = new KeyComparer(PhpNumericComparer.Default, false);\r\n\t\t/// <summary>String comparer.</summary>\r\n\t\tpublic static readonly KeyComparer String = new KeyComparer(PhpStringComparer.Default, false);\r\n\t\t/// <summary>Array keys comparer.</summary>\r\n\t\tpublic static readonly KeyComparer ArrayKeys = new KeyComparer(PhpArrayKeysComparer.Default, false);\r\n\t\t/// <summary>Regular comparer with reverse order.</summary>\r\n\t\tpublic static readonly KeyComparer Reverse = new KeyComparer(PhpComparer.Default, true);\r\n\t\t/// <summary>Numeric comparer with reverse order.</summary>\r\n\t\tpublic static readonly KeyComparer ReverseNumeric = new KeyComparer(PhpNumericComparer.Default, true);\r\n\t\t/// <summary>String comparer with reverse order.</summary>\r\n\t\tpublic static readonly KeyComparer ReverseString = new KeyComparer(PhpStringComparer.Default, true);\r\n\t\t/// <summary>Locale string comparer with reverse order.</summary>\r\n\t\tpublic static readonly KeyComparer ReverseArrayKeys = new KeyComparer(PhpArrayKeysComparer.Default, true);\r\n\r\n\t\t/// <summary>\r\n\t\t/// The comparer which will be used to compare keys.\r\n\t\t/// </summary>\r\n\t\tprivate readonly IComparer/*!*/ comparer; // TODO: <IntStringKey>\r\n\r\n\t\t/// <summary>\r\n\t\t/// Plus or minus 1 depending on whether the comparer compares reversly.\r\n\t\t/// </summary>\r\n\t\tprivate readonly int reverse;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the <see cref=\"KeyComparer\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer which will be used to compare keys.</param>\r\n\t\t/// <param name=\"reverse\">Whether to compare reversly.</param>\r\n        public KeyComparer(IComparer/*!*/ comparer, bool reverse) // TODO: <IntStringKey>\r\n\t\t{\r\n\t\t\tif (comparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"comparer\");\r\n\r\n\t\t\tthis.comparer = comparer;\r\n\t\t\tthis.reverse = reverse ? -1 : +1;\r\n\t\t}\r\n\r\n\t\t///// <summary>\r\n\t\t///// Compares keys only. Values are not used to compare so their order will not change if sorting is stable.\r\n\t\t///// </summary>\r\n\t\t///// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareEntries\"]/*'/>\r\n\t\t//public int Compare(object keyA, object valueA, object keyB, object valueB)\r\n\t\t//{\r\n\t\t//  return reverse * comparer.Compare(keyA, keyB);\r\n\t\t//}\r\n\r\n\t\t#region IComparer<KeyValuePair<IntStringKey,object>> Members\r\n\r\n\t\tpublic int Compare(KeyValuePair<IntStringKey, object> x, KeyValuePair<IntStringKey, object> y)\r\n\t\t{\r\n\t\t\treturn reverse * comparer.Compare(x.Key.Object, y.Key.Object);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Compares values of dictionary entries by specified comparer.\r\n\t/// </summary>\r\n\tpublic class ValueComparer : IComparer<KeyValuePair<IntStringKey, object>>/*!*/\r\n\t{\r\n\t\t/// <summary>Regular comparer.</summary>\r\n\t\tpublic static readonly ValueComparer Default = new ValueComparer(PhpComparer.Default, false);\r\n\t\t/// <summary>Numeric comparer.</summary>\r\n\t\tpublic static readonly ValueComparer Numeric = new ValueComparer(PhpNumericComparer.Default, false);\r\n\t\t/// <summary>String comparer.</summary>\r\n\t\tpublic static readonly ValueComparer String = new ValueComparer(PhpStringComparer.Default, false);\r\n\t\t/// <summary>Regular comparer with reverse order.</summary>\r\n\t\tpublic static readonly ValueComparer Reverse = new ValueComparer(PhpComparer.Default, true);\r\n\t\t/// <summary>Numeric comparer with reverse order.</summary>\r\n\t\tpublic static readonly ValueComparer ReverseNumeric = new ValueComparer(PhpNumericComparer.Default, true);\r\n\t\t/// <summary>String comparer with reverse order.</summary>\r\n\t\tpublic static readonly ValueComparer ReverseString = new ValueComparer(PhpStringComparer.Default, true);\r\n\r\n\t\t/// <summary>The comparer which will be used to compare values.</summary>\r\n\t\tprivate IComparer/*!*/ comparer;\r\n\r\n\t\t/// <summary>Plus or minus 1 depending on whether the comparer compares reversly.</summary>\r\n\t\tprivate int reverse;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the <see cref=\"ValueComparer\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer which will be used to compare values.</param>\r\n\t\t/// <param name=\"reverse\">Whether to compare reversly.</param>\r\n\t\tpublic ValueComparer(IComparer/*!*/ comparer, bool reverse)\r\n\t\t{\r\n\t\t\tif (comparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"comparer\");\r\n\r\n\t\t\tthis.comparer = comparer;\r\n\t\t\tthis.reverse = reverse ? -1 : +1;\r\n\t\t}\r\n\r\n\t\t///// <summary>\r\n\t\t///// Compares values only. Keys are not used to compare so their order will not change if sorting is stable.\r\n\t\t///// </summary>\r\n\t\t///// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareEntries\"]/*'/>\r\n\t\t//public int Compare(object keyA,object valueA,object keyB,object valueB)\r\n\t\t//{\r\n\t\t//  return reverse*comparer.Compare(valueA,valueB);\r\n\t\t//}\r\n\r\n\t\t#region IComparer<KeyValuePair<IntStringKey,object>> Members\r\n\r\n\t\tpublic int Compare(KeyValuePair<IntStringKey, object> x, KeyValuePair<IntStringKey, object> y)\r\n\t\t{\r\n\t\t\treturn reverse * comparer.Compare(x.Value, y.Value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Compares dictionary entries using specified value and key comparers.\r\n\t/// </summary>\r\n\tpublic class EntryComparer : IComparer<KeyValuePair<IntStringKey, object>>\r\n\t{\r\n\t\tprivate readonly IComparer/*!*/ keyComparer; // TODO: <IntStringKey>\r\n\t\tprivate readonly IComparer/*!*/ valueComparer;\r\n\t\tprivate readonly int keyReverse;\r\n\t\tprivate readonly int valueReverse;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"EntryComparer\"/> with specified value and key comparers.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keyComparer\">The comparer used on keys.</param>\r\n\t\t/// <param name=\"keyReverse\">Whether the the result of the key comparer is inversed.</param>\r\n\t\t/// <param name=\"valueComparer\">The comparer used on values.</param>\r\n\t\t/// <param name=\"valueReverse\">Whether the the result of the value comparer is inversed</param>\r\n\t\tpublic EntryComparer(IComparer/*!*/ keyComparer, bool keyReverse, IComparer/*!*/ valueComparer, bool valueReverse)\r\n\t\t{\r\n\t\t\t// TODO: key: <IntStringKey>\r\n\r\n\t\t\tif (keyComparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"keyComparer\");\r\n\r\n\t\t\tif (valueComparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"valueComparer\");\r\n\r\n\t\t\tthis.keyComparer = keyComparer;\r\n\t\t\tthis.valueComparer = valueComparer;\r\n\t\t\tthis.keyReverse = keyReverse ? -1 : +1;\r\n\t\t\tthis.valueReverse = valueReverse ? -1 : +1;\r\n\t\t}\r\n\r\n\t\t///// <summary>\r\n\t\t///// Compares two entries.\r\n\t\t///// </summary>\r\n\t\t///// <param name=\"keyA\">The first entry key.</param>\r\n\t\t///// <param name=\"valueA\">The first entry value.</param>\r\n\t\t///// <param name=\"keyB\">The second entry key.</param>\r\n\t\t///// <param name=\"valueB\">The second entry value.</param>\r\n\t\t///// <returns>-1, 0, +1</returns>\r\n\t\t//public int Compare(object keyA, object valueA, object keyB, object valueB)\r\n\t\t//{\r\n\t\t//  int kcmp = keyReverse*keyComparer.Compare(keyA,keyB);\r\n\t\t//  if (kcmp!=0) return kcmp;\r\n\t\t//  return valueReverse*valueComparer.Compare(valueA,valueB);\r\n\t\t//}\r\n\r\n\t\t#region IComparer<KeyValuePair<IntStringKey,object>> Members\r\n\r\n\t\tpublic int Compare(KeyValuePair<IntStringKey, object> x, KeyValuePair<IntStringKey, object> y)\r\n\t\t{\r\n\t\t\tint kcmp = keyReverse * keyComparer.Compare(x.Key.Object, y.Key.Object);\r\n\t\t\tif (kcmp != 0) return kcmp;\r\n\t\t\treturn valueReverse * valueComparer.Compare(x.Value, y.Value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Implements equality comparer of objects, using given <see cref=\"IComparer\"/>.\r\n    /// </summary>\r\n    public class ObjectEqualityComparer : IEqualityComparer<object>\r\n    {\r\n        /// <summary>\r\n        /// <see cref=\"IComparer\"/> to use.\r\n        /// </summary>\r\n        private readonly IComparer/*!*/ comparer;\r\n\r\n        public ObjectEqualityComparer(IComparer/*!*/ comparer)\r\n        {\r\n            if (comparer == null)\r\n                throw new ArgumentNullException(\"comparer\");\r\n\r\n            this.comparer = comparer;\r\n        }\r\n\r\n        #region IEqualityComparer<object>\r\n\r\n        bool IEqualityComparer<object>.Equals(object x, object y)\r\n        {\r\n            return comparer.Compare(x, y) == 0;\r\n        }\r\n\r\n        int IEqualityComparer<object>.GetHashCode(object obj)\r\n        {\r\n            return (obj != null) ? obj.GetHashCode() : 0;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n    \r\n\t#endregion\r\n\r\n\t#region Regular Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP regular comparison.\r\n\t/// </summary>\r\n    public class PhpComparer : IComparer // TODO: , IComparer<IntStringKey> \r\n\t{\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t\tprivate PhpComparer() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default comparer used to compare objects where no other comparer is provided by user.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpComparer/*!*/ Default = new PhpComparer();\r\n\r\n\t\t#region Compare\r\n\r\n        /// <summary>\r\n        /// Compares two objects in a manner of the PHP regular comparison.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        /// <param name=\"y\"></param>\r\n        /// <param name=\"throws\">If true, functions throws ArgumentException for incomparable objects.</param>\r\n        /// <returns></returns>\r\n        public static int CompareOp(object x, object y, bool throws)\r\n        {\r\n            // the following trick is used when comparing booleans:\r\n            //   F,F = 1-1 = 0  => F==F\r\n            //   F,T = 1-2 = -1 => F<T\r\n            //   T,F = 2-1 = 1  => T>F\r\n            //   T,T = 2-2 = 0  => T==T\r\n\r\n            // code marked as OBSOLETE is implementing NULL comparison such that NULL is considered as 0/0.0/false/\"\"\r\n            // actual PHP comparison treats NULL as less or equal to any value\r\n            \r\n            if (x == null)\r\n            {\r\n                if (y == null) return 0; // x == null\r\n                if (y.GetType() == typeof(int)) return ((int)y == 0) ? 0 : -1;     // obsolete: -Math.Sign((int)y);                 // x == 0\r\n                if (y.GetType() == typeof(long)) return ((long)y == 0) ? 0 : -1;\r\n                if (y.GetType() == typeof(double)) return ((double)y == 0.0) ? 0 : -1;// obsolete: CompareDouble(0.0,(double)y);      // x == 0.0\r\n                if (y.GetType() == typeof(string)) return ((string)y == \"\") ? 0 : -1;        // obsolete: sy==String.Empty ? 0:-1;            // x == \"\"  \r\n                if (y.GetType() == typeof(bool)) return ((bool)y == false) ? 0 : -1;// obsolete: (bool)y ? 1:0;                      // x == false\r\n            }\r\n            else if (x.GetType() == typeof(int))\r\n            {\r\n                if (y == null) return ((int)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0\r\n                if (y.GetType() == typeof(int)) return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0));\r\n                if (y.GetType() == typeof(long)) return ((int)x < (long)y ? -1 : ((int)x > (long)y ? 1 : 0));\r\n                if (y.GetType() == typeof(double)) return CompareDouble((int)x, (double)y);\r\n                if (y.GetType() == typeof(string)) return -CompareString((string)y, (int)x);\r\n                if (y.GetType() == typeof(bool)) return ((int)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1);\r\n            }\r\n            else if (x.GetType() == typeof(long))\r\n            {\r\n                if (y == null) return ((long)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0\r\n                if (y.GetType() == typeof(int)) return ((long)x < (int)y ? -1 : ((long)x > (int)y ? 1 : 0));\r\n                if (y.GetType() == typeof(long)) return ((long)x < (long)y ? -1 : ((long)x > (long)y ? 1 : 0));\r\n                if (y.GetType() == typeof(double)) return CompareDouble((long)x, (double)y);\r\n                if (y.GetType() == typeof(string)) return -CompareString((string)y, (long)x);\r\n                if (y.GetType() == typeof(bool)) return ((long)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1);\r\n            }\r\n            else if (x.GetType() == typeof(double))\r\n            {\r\n                if (y == null) return ((double)x == 0.0) ? 0 : 1; // obsolete: CompareDouble((double)x,0.0); // y == 0.0\r\n                if (y.GetType() == typeof(double)) return CompareDouble((double)x, (double)y);\r\n                if (y.GetType() == typeof(int)) return CompareDouble((double)x, (int)y);\r\n                if (y.GetType() == typeof(long)) return CompareDouble((double)x, (long)y);\r\n                if (y.GetType() == typeof(string)) return -CompareString((string)y, (double)x);\r\n                if (y.GetType() == typeof(bool)) return ((double)x != 0.0 ? 2 : 1) - ((bool)y ? 2 : 1);\r\n            }\r\n            else if (x.GetType() == typeof(string))\r\n            {\r\n                if (y == null) return (string)x == \"\" ? 0 : 1; // y == \"\"\r\n                if (y.GetType() == typeof(string)) return CompareString((string)x, (string)y);\r\n                if (y.GetType() == typeof(int)) return CompareString((string)x, (int)y);\r\n                if (y.GetType() == typeof(long)) return CompareString((string)x, (long)y);\r\n                if (y.GetType() == typeof(double)) return CompareString((string)x, (double)y);\r\n                if (y.GetType() == typeof(bool)) return (Convert.StringToBoolean((string)x) ? 2 : 1) - ((bool)y ? 2 : 1);\r\n            }\r\n            else if (x.GetType() == typeof(bool))\r\n            {\r\n                return ((bool)x ? 2 : 1) - (Convert.ObjectToBoolean(y) ? 2 : 1);\r\n            }\r\n            \r\n            try\r\n            {\r\n                return CompareOp_Nonliterals(x, y);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                if (throws)\r\n                    throw;\r\n\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_objects_compared\"));\r\n                return 0;\r\n            }           \r\n        }\r\n\r\n        /// <summary>\r\n        /// Compare given objects, assuming they are IPhpComparable (PhpReference, PhpArray, PhpObject, PhpResource, PhpBytes). Otherwise it compares references.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        /// <param name=\"y\"></param>\r\n        /// <returns></returns>\r\n        /// <exception cref=\"ArgumentException\">If x and y are incomparable, ArgumentException is thrown.</exception>\r\n        private static int CompareOp_Nonliterals(object x, object y)\r\n        {\r\n            IPhpComparable cmp;\r\n\r\n            // PHP variables:\r\n            if ((cmp = x as IPhpComparable) != null) return cmp.CompareTo(y, Default);\r\n\r\n            if ((cmp = y as IPhpComparable) != null) return -cmp.CompareTo(x, Default);\r\n\r\n            if (x != y) CompareOp_ThrowHelper(x, y);\r\n\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Throws <see cref=\"ArgumentException\"/> with information about arguments type.\r\n        /// </summary>\r\n        /// <param name=\"x\">Left operand.</param>\r\n        /// <param name=\"y\">Right operand.</param>\r\n        /// <exception cref=\"ArgumentException\">Always throws.</exception>\r\n        private static void CompareOp_ThrowHelper(object x, object y)\r\n        {\r\n            throw new ArgumentException(\r\n                string.Format(CoreResources.incomparable_objects_compared_exception,\r\n                    (x != null) ? x.GetType().ToString() : PhpVariable.TypeNameNull,\r\n                    (y != null) ? y.GetType().ToString() : PhpVariable.TypeNameNull));\r\n        }\r\n        \r\n\t\tpublic static int CompareOp(int x, int y)\r\n        {\r\n            return (x < y ? -1 : (x > y ? 1 : 0));\r\n        }\r\n\r\n        public static int CompareOp(object x, int y, bool throws)\r\n        {\r\n            // copied from CompareOp(object,object,bool)\r\n\r\n            if (x == null)\r\n            {\r\n                return ((int)y == 0) ? 0 : -1;     // obsolete: -Math.Sign((int)y);                 // x == 0\r\n            }\r\n            else if (x.GetType() == typeof(int))\r\n            {\r\n                return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0));                \r\n            }\r\n            else if (x.GetType() == typeof(long))\r\n            {\r\n                return ((long)x < (int)y ? -1 : ((long)x > (int)y ? 1 : 0));\r\n            }\r\n            else if (x.GetType() == typeof(double))\r\n            {\r\n                return CompareDouble((double)x, (int)y);\r\n            }\r\n            else if (x.GetType() == typeof(string))\r\n            {\r\n                return CompareString((string)x, (int)y);\r\n            }\r\n            else if (x.GetType() == typeof(bool))\r\n            {\r\n                return ((bool)x ? 2 : 1) - (Convert.ObjectToBoolean(y) ? 2 : 1);\r\n            }\r\n            \r\n            try\r\n            {\r\n                return CompareOp_Nonliterals(x, y);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                if (throws)\r\n                    throw;\r\n\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_objects_compared\"));\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        public static int CompareOp(int x, object y, bool throws)\r\n        {\r\n            // copied from CompareOp(object,object,bool)\r\n\r\n            //if (x is int)\r\n            {\r\n                if (y == null) return ((int)x == 0) ? 0 : 1; // obsolete: Math.Sign((int)x); // y == 0\r\n                if (y.GetType() == typeof(int)) return ((int)x < (int)y ? -1 : ((int)x > (int)y ? 1 : 0));\r\n                if (y.GetType() == typeof(long)) return ((int)x < (long)y ? -1 : ((int)x > (long)y ? 1 : 0));\r\n                if (y.GetType() == typeof(double)) return CompareDouble((int)x, (double)y);\r\n                if (y.GetType() == typeof(string)) return -CompareString((string)y, (int)x);\r\n                if (y.GetType() == typeof(bool)) return ((int)x != 0 ? 2 : 1) - ((bool)y ? 2 : 1);\r\n            }\r\n            \r\n            try\r\n            {\r\n                return CompareOp_Nonliterals(x, y);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                if (throws)\r\n                    throw;\r\n\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_objects_compared\"));\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two objects in a manner of the PHP regular comparison.\r\n        /// </summary>\r\n        /// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        public int Compare(object x, object y)\r\n        {\r\n            return CompareOp(x, y, true);\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t#region CompareEq\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects for equality in a manner of the PHP regular comparison.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">The first object.</param>\r\n\t\t/// <param name=\"y\">The second object.</param>\r\n        /// <returns>Whether the values of operands are the same.</returns>\r\n\t\t/// <remarks>Faster than Compare(x,y) == 0.</remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static bool CompareEq(object x, object y)\r\n\t\t{\r\n\t\t\tif (x == null)\r\n\t\t\t{\r\n\t\t\t\tif (y == null) return true;                                // y == null\r\n                if (y.GetType() == typeof(int)) return (int)y == 0;\t\t\t\t\t\t\t\t// y == 0\r\n                if (y.GetType() == typeof(long)) return (long)y == 0;\t\t\t\t\t\t// y == 0\r\n                if (y.GetType() == typeof(double)) return (double)y == 0.0;                  // y == 0.0\r\n                if (y.GetType() == typeof(string)) return (string)y == String.Empty; // y == \"\"  \r\n                if (y.GetType() == typeof(bool)) return !(bool)y;                            // y == false\r\n\t\t\t}\r\n            else if (x.GetType() == typeof(int))\r\n\t\t\t{\r\n\t\t\t\tif (y == null) return (int)x == 0;                     // y == 0\r\n                if (y.GetType() == typeof(int)) return (int)x == (int)y;\r\n\t\t\t\tif (y.GetType() == typeof(long)) return (long)(int)x == (long)y;\r\n                if (y.GetType() == typeof(double)) return (double)(int)x == (double)y;\r\n                if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (int)x);\r\n                if (y.GetType() == typeof(bool)) return ((int)x != 0) == (bool)y;\r\n\t\t\t}\r\n            else if (x.GetType() == typeof(long))\r\n\t\t\t{\r\n\t\t\t\tif (y == null) return (long)x == 0;                     // y == 0\r\n                if (y.GetType() == typeof(long)) return (long)x == (long)y;\r\n                if (y.GetType() == typeof(int)) return (long)x == (long)(int)y;\r\n                if (y.GetType() == typeof(double)) return (double)(long)x == (double)y;\r\n                if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (long)x);\r\n                if (y.GetType() == typeof(bool)) return ((long)x != 0) == (bool)y;\r\n\t\t\t}\r\n            else if (x.GetType() == typeof(double))\r\n\t\t\t{\r\n\t\t\t\tif (y == null) return (double)x == 0.0;                // y == 0.0\r\n                if (y.GetType() == typeof(double)) return (double)x == (double)y;\r\n                if (y.GetType() == typeof(int)) return (double)x == (double)(int)y;\r\n                if (y.GetType() == typeof(long)) return (double)x == (double)(long)y;\r\n                if (y.GetType() == typeof(string)) return CompareStringEq((string)y, (double)x);\r\n                if (y.GetType() == typeof(bool)) return ((double)x != 0.0) == (bool)y;\r\n\t\t\t}\r\n            else if (x.GetType() == typeof(string))\r\n\t\t\t{\r\n\t\t\t\tif (y == null) return (string)x == String.Empty;             // y == \"\"  \r\n                if (y.GetType() == typeof(string)) return CompareString((string)x, (string)y) == 0;\r\n                if (y.GetType() == typeof(int)) return CompareString((string)x, (int)y) == 0;\r\n                if (y.GetType() == typeof(long)) return CompareString((string)x, (long)y) == 0;\r\n                if (y.GetType() == typeof(double)) return CompareStringEq((string)x, (double)y);\r\n                if (y.GetType() == typeof(bool)) return Convert.StringToBoolean((string)x) == (bool)y;\r\n\t\t\t}\r\n\t\t\telse if (x.GetType() == typeof(bool))\r\n\t\t\t{\r\n\t\t\t\treturn (bool)x == Convert.ObjectToBoolean(y);\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n            {\r\n                return (CompareOp_Nonliterals(x, y) == 0);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                return false;\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Compares two objects for equality in a manner of the PHP regular comparison.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first object.</param>\r\n        /// <param name=\"y\">The second object.</param>\r\n        /// <returns>Whether the values of operands are the same.</returns>\r\n        /// <remarks>Faster than Compare(x,y) == 0.</remarks>\r\n        [Emitted]\r\n        public static bool CompareEq(object x, string/*!*/y)\r\n        {\r\n            Debug.Assert(y != null);\r\n\r\n            if (x == null)\r\n            {\r\n                if (y == null) return true;\r\n                return string.IsNullOrEmpty(y);\r\n            }\r\n            else if (x.GetType() == typeof(string))\r\n            {\r\n                if (y == null) return (string)x == string.Empty;\r\n                return CompareString((string)x, (string)y) == 0;\r\n            }\r\n            else if (x.GetType() == typeof(int))\r\n            {\r\n                if (y == null) return (int)x == 0;\r\n                return CompareStringEq((string)y, (int)x);\r\n            }\r\n            else if (x.GetType() == typeof(long))\r\n            {\r\n                if (y == null) return (long)x == 0;\r\n                return CompareStringEq((string)y, (long)x);\r\n            }\r\n            else if (x.GetType() == typeof(double))\r\n            {\r\n                if (y == null) return (double)x == 0.0;\r\n                return CompareStringEq((string)y, (double)x);\r\n            }\r\n            else if (x.GetType() == typeof(bool))\r\n            {\r\n                return (bool)x == Convert.StringToBoolean(y);\r\n            }\r\n\r\n            try\r\n            {\r\n                return (CompareOp_Nonliterals(x, y) == 0);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two objects for equality in a manner of the PHP regular comparison.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first object.</param>\r\n        /// <param name=\"y\">The second object.</param>\r\n        /// <returns>Whether the values of operands are the same.</returns>\r\n        /// <remarks>Faster than Compare(x,y) == 0.</remarks>\r\n        [Emitted]\r\n        public static bool CompareEq(object x, int y)\r\n        {\r\n            if (x == null)\r\n            {\r\n                return y == 0;\t\t\t\t\t\t\t\t// y == 0\r\n            }\r\n            else if (x.GetType() == typeof(int))\r\n            {\r\n                return (int)x == y;\r\n            }\r\n            else if (x.GetType() == typeof(long))\r\n            {\r\n                return (long)x == (long)y;\r\n            }\r\n            else if (x.GetType() == typeof(double))\r\n            {\r\n                return (double)x == (double)y;\r\n            }\r\n            else if (x.GetType() == typeof(string))\r\n            {\r\n                return CompareString((string)x, y) == 0;\r\n            }\r\n            else if (x.GetType() == typeof(bool))\r\n            {\r\n                return (bool)x == (y != 0);\r\n            }\r\n\r\n            try\r\n            {\r\n                return (CompareOp_Nonliterals(x, y) == 0);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Auxiliary comparisons\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two double values.\r\n\t\t/// </summary>\r\n\t\t/// <returns>(+1,0,-1)</returns>\r\n\t\t/// <remarks>We cannot used <see cref=\"Math.Sign\"/> on <c>x - y</c> since the result can be NaN.</remarks>\r\n        public static int CompareDouble(double x, double y)\r\n\t\t{\r\n\t\t\treturn (x > y) ? +1 : (x < y ? -1 : 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two integer values.\r\n\t\t/// </summary>\r\n\t\t/// <returns>(+1,0,-1)</returns>\r\n\t\t/// <remarks>We cannot used <see cref=\"Math.Sign\"/> on <c>x - y</c> since the result can overflow.</remarks>\r\n        public static int CompareInteger(int x, int y)\r\n\t\t{\r\n\t\t\treturn (x > y) ? +1 : (x < y ? -1 : 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two long integer values.\r\n\t\t/// </summary>\r\n\t\t/// <returns>(+1,0,-1)</returns>\r\n        public static int CompareLongInteger(long x, long y)\r\n\t\t{\r\n\t\t\treturn (x > y) ? +1 : (x < y ? -1 : 0);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares string in a manner of PHP. \r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\t/// <remarks>Note that this comparison is not transitive (e.g. {\"2\",\"10\",\"10a\"} leads to a contradiction).</remarks>\r\n        public static int CompareString(string/*!*/ x, string/*!*/ y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tint ix, iy;\r\n\t\t\tlong lx, ly;\r\n\t\t\tdouble dx, dy;\r\n\t\t\tConvert.NumberInfo info_x, info_y;\r\n\r\n\t\t\tinfo_x = Convert.StringToNumber(x, out ix, out lx, out dx);\r\n\r\n\t\t\t// an operand is not entirely convertable to numbers => string comparison is performed:\r\n\t\t\tif ((info_x & Convert.NumberInfo.IsNumber) == 0) return String.CompareOrdinal(x, y);\r\n\r\n\t\t\tinfo_y = Convert.StringToNumber(y, out iy, out ly, out dy);\r\n\r\n\t\t\t// an operand is not entirely convertable to numbers => string comparison is performed:\r\n\t\t\tif ((info_y & Convert.NumberInfo.IsNumber) == 0) return String.CompareOrdinal(x, y);\r\n\r\n\t\t\t// at least one operand has been converted to double:\r\n\t\t\tif (((info_x | info_y) & Convert.NumberInfo.Double) != 0)\r\n\t\t\t\treturn CompareDouble(dx, dy);\r\n\r\n\t\t\t// compare integers:\r\n\t\t\treturn CompareLongInteger(lx, ly);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares a <see cref=\"string\"/> with <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        public static int CompareString(string/*!*/ x, int y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return CompareDouble(dx, y);\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return CompareInteger(ix, y);\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return CompareLongInteger(lx, y);\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares a <see cref=\"string\"/> with <see cref=\"long\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        public static int CompareString(string/*!*/ x, long y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return CompareDouble(dx, y);\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return CompareLongInteger(ix, y);\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return CompareLongInteger(lx, y);\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares a <see cref=\"string\"/> with <see cref=\"double\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n        public static int CompareString(string/*!*/ x, double y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return CompareDouble(dx, y);\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return CompareDouble(ix, y);\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return CompareDouble(lx, y);\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects for equality in a manner of the PHP regular comparison.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">The first object.</param>\r\n\t\t/// <param name=\"y\">The second object.</param>\r\n\t\t/// <returns>Whether the values of operands are the same.</returns>\r\n        public static bool CompareStringEq(string/*!*/ x, int y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return dx == y;\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return ix == y;\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return lx == y;\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects for equality in a manner of the PHP regular comparison.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">The first object.</param>\r\n\t\t/// <param name=\"y\">The second object.</param>\r\n\t\t/// <returns>Whether the values of operands are the same.</returns>\r\n        public static bool CompareStringEq(string/*!*/ x, long y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return dx == y;\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return ix == y;\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return lx == y;\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects for equality in a manner of the PHP regular comparison.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">The first object.</param>\r\n\t\t/// <param name=\"y\">The second object.</param>\r\n\t\t/// <returns>Whether the values of operands are the same.</returns>\r\n        public static bool CompareStringEq(string/*!*/ x, double y)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null);\r\n\r\n\t\t\tint ix;\r\n\t\t\tdouble dx;\r\n\t\t\tlong lx;\r\n\r\n\t\t\tswitch (Convert.StringToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Double: return dx == y;\r\n\t\t\t\tcase Convert.NumberInfo.Integer: return ix == y;\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: return lx == y;\r\n\t\t\t\tdefault: Debug.Fail(null); throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Numeric Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP numeric comparison.\r\n\t/// </summary>\r\n\tpublic class PhpNumericComparer : IComparer\r\n\t{\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t\tprivate PhpNumericComparer() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default comparer used to compare objects where no other comparer is provided by user.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpNumericComparer/*!*/ Default = new PhpNumericComparer();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects in a manner of PHP numeric comparison.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n\t\t\tint ix, iy;\r\n\t\t\tlong lx, ly;\r\n\t\t\tdouble dx, dy;\r\n\t\t\tConvert.NumberInfo info_x, info_y;\r\n\r\n\t\t\tinfo_x = Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\t\t\tinfo_y = Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n\t\t\t// at least one operand has been converted to double:\r\n\t\t\tif (((info_x | info_y) & Convert.NumberInfo.Double) != 0)\r\n\t\t\t\treturn PhpComparer.CompareDouble(dx, dy);\r\n\r\n\t\t\t// compare integers:\r\n\t\t\treturn PhpComparer.CompareLongInteger(lx, ly);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region String Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP string comparison.\r\n\t/// </summary>\r\n\tpublic class PhpStringComparer : IComparer\r\n\t{\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t\tprivate PhpStringComparer() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default comparer used to compare objects where no other comparer is provided by user.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpStringComparer Default = new PhpStringComparer();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects in a manner of PHP string comparison.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n\t\t\treturn String.CompareOrdinal(Convert.ObjectToString(x), Convert.ObjectToString(y));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Locale String Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP locale string comparison.\r\n\t/// </summary>\r\n\tpublic class PhpLocaleStringComparer : IComparer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A culture used for comparison.\r\n\t\t/// </summary>\r\n\t\tpublic CultureInfo Culture { get { return culture; } }\r\n\t\tprivate readonly CultureInfo culture;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the comparer is ignoring case.\r\n\t\t/// </summary>\r\n\t\tpublic bool IgnoreCase { get { return ignoreCase; } }\r\n\t\tprivate readonly bool ignoreCase;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new string comparer with a specified culture.\r\n\t\t/// </summary>\r\n\t\tpublic PhpLocaleStringComparer(CultureInfo culture, bool ignoreCase)\r\n\t\t{\r\n\t\t\tthis.culture = (culture != null) ? culture : CultureInfo.InvariantCulture;\r\n\t\t\tthis.ignoreCase = ignoreCase;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects in a manner of PHP string comparison.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n#if SILVERLIGHT\r\n\t\t\treturn String.Compare(Convert.ObjectToString(x), Convert.ObjectToString(y), culture, ignoreCase?CompareOptions.IgnoreCase:CompareOptions.None);\r\n#else\r\n            return String.Compare(Convert.ObjectToString(x), Convert.ObjectToString(y), ignoreCase, culture);\r\n#endif\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ArrayKeys Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements comparison of PHP array keys.\r\n\t/// </summary>\r\n\tpublic class PhpArrayKeysComparer : IComparer<IntStringKey>, IComparer\r\n\t{\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t\tprivate PhpArrayKeysComparer() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default comparer.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpArrayKeysComparer Default = new PhpArrayKeysComparer();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares keys of an array.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\t/// <remarks>\r\n\t\t/// Keys are compared as strings if at least one of them is a string \r\n\t\t/// otherwise they have to be integers and so they are compared as integers.\r\n\t\t/// </remarks>\r\n\t\tpublic int Compare(IntStringKey x, IntStringKey y)\r\n\t\t{\r\n\t\t\treturn x.CompareTo(y);\r\n\t\t}\r\n\r\n\t\t#region IComparer Members\r\n\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n\t\t\tIntStringKey keyx = (x is IntStringKey ? (IntStringKey)x : new IntStringKey(x));\r\n\t\t\tIntStringKey keyy = (y is IntStringKey ? (IntStringKey)y : new IntStringKey(y));\r\n\r\n\t\t\treturn Compare(keyx, keyy);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Natural Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP natural comparison.\r\n\t/// </summary>\r\n\tpublic class PhpNaturalComparer : IComparer\r\n\t{\r\n\t\t/// <summary>Whether comparisons will be case insensitive.</summary>\r\n\t\tprivate bool caseInsensitive;\r\n\r\n\t\t/// <summary>Default case sensitive comparer.</summary>\r\n\t\tpublic static readonly PhpNaturalComparer Default = new PhpNaturalComparer(false);\r\n\r\n\t\t/// <summary>Case insensitive comparer.</summary>\r\n\t\tpublic static readonly PhpNaturalComparer CaseInsensitive = new PhpNaturalComparer(true);\r\n\r\n\t\t/// <summary>Prevents from creating instances of this class.</summary>\r\n\t\t/// <param name=\"caseInsensitive\">Whether comparisons will be case insensitive.</param>\r\n\t\tpublic PhpNaturalComparer(bool caseInsensitive)\r\n\t\t{\r\n\t\t\tthis.caseInsensitive = caseInsensitive;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects using the natural ordering.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n\t\t\treturn CompareStrings(Convert.ObjectToString(x), Convert.ObjectToString(y));\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Compares two strings using the natural ordering.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int CompareStrings(string x, string y)\r\n\t\t{\r\n\t\t\tif (x == null) x = String.Empty;\r\n\t\t\tif (y == null) y = String.Empty;\r\n\r\n\t\t\tint length_l = x.Length, length_g = y.Length;\r\n\t\t\tif (length_l == 0 || length_g == 0) return length_l - length_g;\r\n\r\n\t\t\tint i = 0, j = 0;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tchar lc = x[i], gc = y[j];\r\n\r\n\t\t\t\t// skip white spaces\r\n\t\t\t\tif (Char.IsWhiteSpace(lc))\r\n\t\t\t\t{\r\n\t\t\t\t\ti++;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (Char.IsWhiteSpace(gc))\r\n\t\t\t\t{\r\n\t\t\t\t\tj++;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Char.IsDigit(lc) && Char.IsDigit(gc))\r\n\t\t\t\t{\r\n\t\t\t\t\t// compare numbers\r\n\t\t\t\t\tint result = (lc == '0' || gc == '0') ? CompareLeft(x, y, ref i, ref j) :\r\n\t\t\t\t\t\tCompareRight(x, y, ref i, ref j);\r\n\r\n\t\t\t\t\tif (result != 0) return result;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// compare letters\r\n\t\t\t\t\tif (caseInsensitive)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlc = Char.ToLower(lc);\r\n\t\t\t\t\t\tgc = Char.ToLower(gc);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (lc < gc) return -1;\r\n\t\t\t\t\tif (lc > gc) return 1;\r\n\r\n\t\t\t\t\ti++; j++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\twhile (i < length_l && j < length_g);\r\n\r\n\t\t\tif (i < length_l) return 1;\r\n\t\t\tif (j < length_g) return -1;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two strings with left-aligned numbers, the first to have a different value wins.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">String that contains the first number.</param>\r\n\t\t/// <param name=\"y\">String that contains the second number.</param>\r\n\t\t/// <param name=\"i\">Index in <paramref name=\"x\"/> where the first number begins. Is set to the index\r\n\t\t/// immediately following the number after returning from this method.</param>\r\n\t\t/// <param name=\"j\">Index in <paramref name=\"y\"/> where the second number begins. Is set to the index\r\n\t\t/// immediately following the number after returning from this method.</param>\r\n\t\t/// <returns>\r\n\t\t/// Negative integer if the first number is less than the second number, \r\n\t\t/// zero if the two numbers are equal and\r\n\t\t/// positive integer if the first number is greater than the second number.</returns>\r\n\t\t/// <remarks>Assumes neither <paramref name=\"x\"/> nor <paramref name=\"y\"/> parameter is null.</remarks>\r\n\t\tprivate int CompareLeft(string x, string y, ref int i, ref int j)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tint length_l = x.Length, length_g = y.Length;\r\n\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbool bl = (i == length_l || !Char.IsDigit(x[i]));\r\n\t\t\t\tbool bg = (j == length_g || !Char.IsDigit(y[j]));\r\n\r\n\t\t\t\tif (bl && bg) return 0;\r\n\t\t\t\tif (bl) return -1;\r\n\t\t\t\tif (bg) return 1;\r\n\r\n\t\t\t\tif (x[i] < y[j]) return -1;\r\n\t\t\t\tif (x[i] > y[j]) return 1;\r\n\r\n\t\t\t\ti++; j++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two strings with right-aligned numbers, The longest run of digits wins.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">String that contains the first number.</param>\r\n\t\t/// <param name=\"y\">String that contains the second number.</param>\r\n\t\t/// <param name=\"i\">Index in <paramref name=\"x\"/> where the first number begins. Is set to the index\r\n\t\t/// immediately following the number after returning from this method.</param>\r\n\t\t/// <param name=\"j\">Index in <paramref name=\"y\"/> where the second number begins. Is set to the index\r\n\t\t/// immediately following the number after returning from this method.</param>\r\n\t\t/// <returns>\r\n\t\t/// Negative integer if the first number is less than the second number, \r\n\t\t/// zero if the two numbers are equal and\r\n\t\t/// positive integer if the first number is greater than the second number.</returns>\r\n\t\t/// <remarks>Assumes neither <paramref name=\"x\"/> nor <paramref name=\"y\"/> parameter is null.</remarks>\r\n\t\tinternal int CompareRight(string x, string y, ref int i, ref int j)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tint length_l = x.Length, length_g = y.Length;\r\n\r\n\t\t\t// That aside, the greatest value wins, but we can't know that it will until we've scanned both numbers to\r\n\t\t\t// know that they have the same magnitude, so we remember it in \"bias\".\r\n\t\t\tint bias = 0;\r\n\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tbool bl = (i == length_l || !Char.IsDigit(x[i]));\r\n\t\t\t\tbool bg = (j == length_g || !Char.IsDigit(y[j]));\r\n\r\n\t\t\t\tif (bl && bg) return bias;\r\n\t\t\t\tif (bl) return -1;\r\n\t\t\t\tif (bg) return 1;\r\n\r\n\t\t\t\tif (x[i] < y[j])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (bias == 0) bias = -1;\r\n\t\t\t\t}\r\n\t\t\t\telse if (x[i] > y[j])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (bias == 0) bias = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ti++; j++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region User Comparer\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP numeric comparison.\r\n\t/// </summary>\r\n\tpublic class PhpUserComparer : IComparer\r\n\t{\r\n\t\t/// <summary>User defined PHP method used to compare given objects.</summary>\r\n\t\tprivate PhpCallback compare;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of a comparer using <see cref=\"PhpCallback\"/> for comparisons.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"compare\">User callback which provides comparing functionality.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Callback should have the signature <c>object(object,object)</c> and should already be bound.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// The result of calback's invocation is converted to a double by <see cref=\"Convert.ObjectToDouble\"/>\r\n\t\t/// and than the sign is taken as a result of the comparison.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"compare\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\"><paramref name=\"compare\"/> callback is not bound.</exception>\r\n\t\tpublic PhpUserComparer(PhpCallback compare)\r\n\t\t{\r\n\t\t\tif (compare == null) throw new ArgumentNullException(\"compare\");\r\n\t\t\tif (!compare.IsBound) throw new ArgumentException(CoreResources.GetString(\"callback_not_bound\"), \"compare\");\r\n\t\t\tthis.compare = compare;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two objects in a manner of PHP numeric comparison.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tpublic int Compare(object x, object y)\r\n\t\t{\r\n\t\t\treturn PhpComparer.CompareDouble(Convert.ObjectToDouble(compare.Invoke(x, y)), 0.0);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/ArrayEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(ArrayEx))]\r\n        sealed class ArrayExCompiler : VarLikeConstructUseCompiler<ArrayEx>\r\n        {\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(ArrayEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                foreach (var i in node.Items)\r\n                    if (i != null)\r\n                        i.NodeCompiler<ItemCompiler>().Analyze(i, analyzer);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Code Emission\r\n\r\n            /// <returns>It suffice to make a copy only if assignment nesting level is 1 or above (we are starting from 0).</returns>\r\n            public override bool IsDeeplyCopied(ArrayEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return nestingLevel > 0;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ArrayEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // count integer and string keys:\r\n                int int_count = 0;\r\n                int string_count = 0;\r\n                DetermineCapacities(node, out int_count, out string_count);\r\n\r\n                // array = new PhpArray(<int_count>, <string_count>);\r\n                il.Emit(OpCodes.Ldc_I4, int_count);\r\n                il.Emit(OpCodes.Ldc_I4, string_count);\r\n                il.Emit(OpCodes.Newobj, Constructors.PhpArray.Int32_Int32);\r\n\r\n                if (codeGenerator.Context.Config.Compiler.Debug)\r\n                {\r\n                    il.Emit(OpCodes.Nop);\r\n                    il.Emit(OpCodes.Nop);\r\n                    il.Emit(OpCodes.Nop);\r\n                }\r\n\r\n                foreach (var item in node.Items)\r\n                {\r\n                    var itemcompiler = item.NodeCompiler<ItemCompiler>();\r\n                    // CALL array.SetArrayItemRef(z, p);\r\n                    // CALL array.SetArrayItem(x, PhpVariable.Copy(y, CopyReason.Assigned));\r\n                    // CALL array.SetArrayItem(PhpVariable.Copy(x, CopyReason.Assigned))\r\n                    // CALL array.AddToEnd(x)\r\n\r\n                    il.Emit(OpCodes.Dup);\r\n                    PhpTypeCode index_type_code = itemcompiler.EmitIndex(item, codeGenerator);\r\n                    itemcompiler.EmitValue(item, codeGenerator);\r\n                    codeGenerator.EmitSetArrayItem(index_type_code, item.Index, item is RefItem, true);\r\n                }\r\n\r\n                switch (this.access)\r\n                {\r\n                    case AccessType.Read:\r\n                        // keep array on the stack\r\n                        return PhpTypeCode.PhpArray;\r\n\r\n                    case AccessType.None:\r\n                        // pop array from the stack\r\n                        il.Emit(OpCodes.Pop);\r\n                        return PhpTypeCode.Void;\r\n                }\r\n\r\n                throw new InvalidOperationException();\r\n                //return PhpTypeCode.Invalid;\r\n            }\r\n\r\n            private void DetermineCapacities(ArrayEx node, out int intCount, out int stringCount)\r\n            {\r\n                intCount = 0;\r\n                stringCount = 0;\r\n\r\n                foreach (var item in node.Items)\r\n                {\r\n                    if (item.HasKey)\r\n                    {\r\n                        if (item.IsIndexStringLiteral)\r\n                            stringCount++;\r\n                        else\r\n                            intCount++; // Item is IntLiteral, Variable, Constant, etc.\r\n                    }\r\n                    else\r\n                        intCount++;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #region ItemCompiler\r\n\r\n        abstract class ItemCompiler : INodeCompiler\r\n        {\r\n            internal virtual void Analyze(Item/*!*/node,  Analyzer/*!*/ analyzer)\r\n            {\r\n                if (node.Index != null)\r\n                    node.Index = node.Index.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit IL instructions that load the value of array index at the stack.\r\n            /// </summary>\r\n            internal PhpTypeCode EmitIndex(Item/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                return codeGenerator.EmitArrayKey(null, node.Index);\r\n            }\r\n\r\n            internal abstract PhpTypeCode EmitValue(Item/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ValueItemCompiler\r\n\r\n        [NodeCompiler(typeof(ValueItem), Singleton = true)]\r\n        sealed class ValueItemCompiler : ItemCompiler\r\n        {\r\n            internal override void Analyze(Item node, Analyzer analyzer)\r\n            {\r\n                var valueitem = (ValueItem)node;\r\n\r\n                base.Analyze(node, analyzer);\r\n                valueitem.ValueExpr = valueitem.ValueExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit IL instructions that load the value of array item at the stack and make a copy \r\n            /// of it if necessary.\r\n            /// </summary>\r\n            internal override PhpTypeCode EmitValue(Item/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                var valueitem = (ValueItem)node;\r\n\r\n                Debug.Assert(valueitem.ValueExpr != null);\r\n                Statistics.AST.AddNode(\"Array.ValueItem\");\r\n\r\n                codeGenerator.EmitBoxing(valueitem.ValueExpr.Emit(codeGenerator));\r\n                codeGenerator.EmitVariableCopy(CopyReason.Assigned, valueitem.ValueExpr);\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region RefItemCompiler\r\n\r\n        /// <summary>\r\n        /// Reference to a variable containing the value of an array item defined by <c>array</c> constructor.\r\n        /// </summary>\r\n        [NodeCompiler(typeof(RefItem), Singleton = true)]\r\n        sealed class RefItemCompiler : ItemCompiler\r\n        {\r\n            internal override void Analyze(Item node, Analyzer analyzer)\r\n            {\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n                info.Access = AccessType.ReadRef;\r\n                ((RefItem)node).RefToGet.Analyze(analyzer, info);\r\n                base.Analyze(node, analyzer);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit IL instructions that load the value of array item at the stack and make a copy \r\n            /// of it if necessary.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <returns></returns>\r\n            /// <remarks>This node represents the item x=>&amp;y in PHP notation. See <see cref=\"PHP.Core.AST.ArrayEx\"/>\r\n            ///  for more details.</remarks>\r\n            internal override PhpTypeCode EmitValue(Item node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(((RefItem)node).RefToGet != null);\r\n                Statistics.AST.AddNode(\"Array.RefItem\");\r\n\r\n                // Emit refToGet\r\n                return ((RefItem)node).RefToGet.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/AssignEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        abstract class AssignExCompiler : ExpressionCompiler<AssignEx>\r\n        {\r\n            /// <summary>\r\n            /// Whether an expression represented by this node should be stored to a temporary local if assigned.\r\n            /// </summary>\r\n            public override bool StoreOnAssignment(AssignEx node)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        #region ValueAssignEx\r\n\r\n        [NodeCompiler(typeof(ValueAssignEx))]\r\n        sealed class ValueAssignExCompiler : AssignExCompiler\r\n        {\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"IsDeeplyCopied\"]/*'/>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <returns>\r\n            /// The copy-on-assignment value of the right hand side.\r\n            /// </returns>\r\n            public override bool IsDeeplyCopied(AssignEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return true; // J: once assigned value must be copied again // rvalue.IsDeeplyCopied(reason, nestingLevel + 1);\r\n            }\r\n\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(AssignEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                var valueassignex = (ValueAssignEx)node;\r\n\r\n                ExInfoFromParent lvalue_info = new ExInfoFromParent(node);\r\n\r\n                // x[] = y\r\n                if (node.LValue is ItemUse && ((ItemUse)node.LValue).Index == null)\r\n                    if (node.Operation != Operations.AssignValue)\r\n                    {\r\n                        var oldop = node.Operation;\r\n                        valueassignex.operation = Operations.AssignValue;\r\n\r\n                        // x[] .= y -> x[] = null . y\r\n                        if (oldop == Operations.AssignAppend)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Concat, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] += y -> x[] = 0 + y\r\n                        else if (oldop == Operations.AssignAdd)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Add, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] -= y -> x[] = 0 - y\r\n                        else if (oldop == Operations.AssignSub)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Sub, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] *= y -> x[] = 0 * y\r\n                        else if (oldop == Operations.AssignMul)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Mul, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] **= y -> x[] = 0 * y\r\n                        else if (oldop == Operations.AssignPow)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Pow, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] /= y -> x[] = 0 / y\r\n                        else if (oldop == Operations.AssignDiv)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.Div, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        // x[] &= y -> x[] = 0 & y\r\n                        else if (oldop == Operations.AssignAnd)\r\n                            valueassignex.rvalue = new BinaryEx(node.Span, Operations.BitAnd, new NullLiteral(node.Span), valueassignex.rvalue);\r\n                        else\r\n                        {\r\n                            Debug.Fail(\"Unhandled operation \" + oldop.ToString() + \" must be reduced!\");\r\n                            valueassignex.operation = oldop;  // change it back, this will result in compile time exception\r\n                        }\r\n                    }\r\n\r\n                // stop evaluation:\r\n                valueassignex.rvalue = valueassignex.rvalue.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                if (node.Operation == Operations.AssignValue)\r\n                {\r\n                    // elimination of $x = $x . expr\r\n                    var concat = valueassignex.rvalue as ConcatEx;\r\n                    DirectVarUse vur;\r\n                    DirectVarUse vul = valueassignex.lvalue as DirectVarUse;\r\n\r\n                    if (concat != null && concat.Expressions.Length >= 2 && vul != null && vul.IsMemberOf == null)\r\n                    {\r\n                        if ((vur = concat.Expressions[0] as DirectVarUse) != null && vur.VarName.Equals(vul.VarName) && vur.IsMemberOf == null)\r\n                        {\r\n                            // $x = $x.a.b.c\r\n                            // =>\r\n                            // $x .= a.b.c\r\n\r\n                            valueassignex.operation = Operations.AssignAppend;\r\n                            lvalue_info.Access = AccessType.ReadAndWrite;\r\n\r\n                            //rvalue = concat.RightExpr;\r\n                            concat.Expressions = concat.Expressions.TakeArray(1, concat.Expressions.Length - 1);\r\n                        }\r\n                        else if ((vur = concat.Expressions[concat.Expressions.Length - 1] as DirectVarUse) != null && vur.VarName.Equals(vul.VarName) && vur.IsMemberOf == null)\r\n                        {\r\n                            // $x = a.b.c.$x\r\n                            // =>\r\n                            // $x =. a.b.c\r\n\r\n                            valueassignex.operation = Operations.AssignPrepend;\r\n                            lvalue_info.Access = AccessType.ReadAndWrite;\r\n\r\n                            //rvalue = (Expression)concat.LeftExpr;\r\n                            concat.Expressions = concat.Expressions.TakeArray(0, concat.Expressions.Length - 1);\r\n                        }\r\n                        else\r\n                            lvalue_info.Access = AccessType.Write;\r\n                    }\r\n                    else\r\n                        lvalue_info.Access = AccessType.Write;\r\n                }\r\n                else\r\n                    lvalue_info.Access = AccessType.ReadAndWrite;\r\n\r\n                // If this ValueAssignEx is actual param that is to be passed by reference,\r\n                // AccessType of the destVar has to be changed, because its reference will be\r\n                // (potencially) passeed\r\n                ActualParam ap = info.Parent as ActualParam;\r\n                if (ap != null)\r\n                {\r\n                    if (analyzer.ActParamDeclIsUnknown())\r\n                    {\r\n                        if (lvalue_info.Access == AccessType.Write)\r\n                            lvalue_info.Access = AccessType.WriteAndReadUnknown;\r\n                        else\r\n                            lvalue_info.Access = AccessType.ReadAndWriteAndReadUnknown;\r\n                    }\r\n                    else if (analyzer.ActParamPassedByRef())\r\n                    {\r\n                        if (lvalue_info.Access == AccessType.Write)\r\n                            lvalue_info.Access = AccessType.WriteAndReadRef;\r\n                        else\r\n                            lvalue_info.Access = AccessType.ReadAndWriteAndReadRef;\r\n                    }\r\n                }\r\n\r\n                valueassignex.lvalue.Analyze(analyzer, lvalue_info); //retval not needed ...\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Emits assignment.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// Pattern: a op= b\r\n            ///\r\n            /// PREPARE a      (prepared)\r\n            /// LOAD a         (prepared,a)\r\n            /// LOAD b         (prepared,a,b)\r\n            /// OP             (prepared,result)\r\n            /// *DUP           (prepared,result,result)\r\n            /// *STORE tmp     (prepared,result)           must be this stack here!\r\n            /// STORE a        ()\r\n            /// *LOAD tmp      (result)\r\n            ///\r\n            /// * only if the resulting value needs to be propagated to the right\r\n            ///\r\n            /// Note: There is a possible improvement: some store operations (SetVariable) may return the value set\r\n            /// which would replace DUP and second temp op.\r\n            /// </remarks>\r\n            public override PhpTypeCode Emit(AssignEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None || access == AccessType.ReadRef ||\r\n                  access == AccessType.ReadUnknown);\r\n                Statistics.AST.AddNode(\"Assign.Value\");\r\n\r\n                AccessType old_selector = codeGenerator.AccessSelector;\r\n\r\n                codeGenerator.ChainBuilder.Create();\r\n\r\n                PhpTypeCode result;\r\n\r\n                if (node.Operation == Operations.AssignValue)\r\n                {\r\n                    //\r\n                    // Access Type = ReadRef/ReadUnknown\r\n                    // ---------------------------------\r\n                    //\r\n                    // f(&$x) { }\r\n                    //\r\n                    // f($a = $b); \r\n                    // f($a = $b =& $c); \r\n                    //\r\n                    // Destination variable $a is prepared for reference write.\r\n                    // A new reference is created and its value set to a deep copy of the result of RHS ($b, $b =& $c).\r\n                    // RHS has Read access => it has been dereferenced.\r\n                    //\r\n\r\n                    // PREPARE a:\r\n                    codeGenerator.AccessSelector = AccessType.Write;\r\n                    node.lvalue.Emit(codeGenerator);\r\n                    codeGenerator.AccessSelector = AccessType.None;\r\n\r\n                    PhpTypeCode src_type_code = EmitSourceValRead((ValueAssignEx)node, codeGenerator);\r\n\r\n                    // RHS should have Read access => should be dereferenced\r\n                    Debug.Assert(src_type_code != PhpTypeCode.PhpReference);\r\n\r\n                    // LOAD BOX b\r\n                    codeGenerator.EmitBoxing(src_type_code);\r\n\r\n                    // makes a copy if necessary:\r\n                    if (PhpTypeCodeEnum.IsDeeplyCopied(src_type_code))\r\n                        codeGenerator.EmitVariableCopy(CopyReason.Assigned, ((ValueAssignEx)node).rvalue);\r\n                }\r\n                else\r\n                {\r\n                    // PREPARE a:\r\n                    codeGenerator.AccessSelector = AccessType.Write;\r\n                    node.LValue.Emit(codeGenerator);\r\n                    codeGenerator.AccessSelector = AccessType.None;\r\n\r\n                    // LOAD b,a (rvalue must be processed first, than +-*/ with lvalue, since lvalu can be changed by rvalue expression)\r\n                    //must be the second operand// EmitDestVarRead(codeGenerator);\r\n                    PhpTypeCode right_type = EmitSourceValRead((ValueAssignEx)node, codeGenerator);\r\n                    var rvalue_tmp = codeGenerator.IL.GetTemporaryLocal(PhpTypeCodeEnum.ToType(right_type), false);\r\n                    codeGenerator.IL.Emit(OpCodes.Stloc, rvalue_tmp);\r\n                    EmitDestVarRead(node, codeGenerator);\r\n                    codeGenerator.IL.Emit(OpCodes.Ldloc, rvalue_tmp);\r\n                    codeGenerator.IL.ReturnTemporaryLocal(rvalue_tmp);\r\n\r\n                    switch (node.Operation)\r\n                    {\r\n                        #region Arithmetic\r\n\r\n                        case Operations.AssignAdd:\r\n                            {\r\n                                switch (right_type)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(right_type);\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        case Operations.AssignSub:\r\n                            {\r\n                                switch (right_type)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Int);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(right_type);\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        case Operations.AssignDiv:\r\n                            {\r\n                                switch (right_type)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(right_type);\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        case Operations.AssignMul:\r\n                            {\r\n                                switch (right_type)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(right_type);\r\n                                        result = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        case Operations.AssignPow:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.Pow.Object_Object);\r\n                            break;\r\n\r\n                        case Operations.AssignMod:\r\n\r\n                            if (right_type == PhpTypeCode.Integer)\r\n                            {\r\n                                result = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Int32);\r\n                            }\r\n                            else\r\n                            {\r\n                                codeGenerator.EmitBoxing(right_type);\r\n                                result = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Object);\r\n                            }\r\n                            break;\r\n\r\n\r\n                        #endregion\r\n\r\n                        #region Bitwise\r\n\r\n                        case Operations.AssignAnd:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.And);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation);\r\n                            break;\r\n\r\n                        case Operations.AssignOr:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.Or);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation);\r\n                            break;\r\n\r\n                        case Operations.AssignXor:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            codeGenerator.IL.Emit(OpCodes.Ldc_I4, (int)Operators.BitOp.Xor);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.BitOperation);\r\n                            break;\r\n\r\n                        case Operations.AssignShiftLeft:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.ShiftLeft);\r\n                            break;\r\n\r\n                        case Operations.AssignShiftRight:\r\n                            codeGenerator.EmitBoxing(right_type);\r\n                            result = codeGenerator.EmitMethodCall(Methods.Operators.ShiftRight);\r\n                            break;\r\n\r\n                        #endregion\r\n\r\n                        #region String\r\n\r\n                        case Operations.AssignAppend:\r\n                            {\r\n                                if (right_type == PhpTypeCode.String)\r\n                                {\r\n                                    result = codeGenerator.EmitMethodCall(Methods.Operators.Append.Object_String);\r\n                                }\r\n                                else if (right_type == PhpTypeCode.PhpBytes)\r\n                                {\r\n                                    result = codeGenerator.EmitMethodCall(Methods.PhpBytes.Append_Object_PhpBytes);\r\n                                }\r\n                                else\r\n                                {\r\n                                    codeGenerator.EmitBoxing(right_type);\r\n                                    result = codeGenerator.EmitMethodCall(Methods.Operators.Append.Object_Object);\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        case Operations.AssignPrepend:\r\n                            {\r\n                                if (right_type == PhpTypeCode.String)\r\n                                {\r\n                                    result = codeGenerator.EmitMethodCall(Methods.Operators.Prepend.Object_String);\r\n                                }\r\n                                else\r\n                                {\r\n                                    codeGenerator.EmitBoxing(right_type);\r\n                                    result = codeGenerator.EmitMethodCall(Methods.Operators.Prepend.Object_Object);\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                        #endregion\r\n\r\n                        default:\r\n                            throw new InvalidOperationException();\r\n                    }\r\n\r\n                    codeGenerator.IL.EmitBoxing(result);\r\n                }\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                        {\r\n                            // DUP\r\n                            codeGenerator.IL.Emit(OpCodes.Dup);\r\n\r\n                            // STORE tmp\r\n                            codeGenerator.IL.Stloc(codeGenerator.IL.GetAssignmentLocal());\r\n\r\n                            // STORE prepared, result\r\n                            codeGenerator.AccessSelector = AccessType.Write;\r\n                            result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator);\r\n                            codeGenerator.AccessSelector = AccessType.None;\r\n                            Debug.Assert(result == PhpTypeCode.Void);\r\n\r\n                            // LOAD result\r\n                            codeGenerator.IL.Ldloc(codeGenerator.IL.GetAssignmentLocal());\r\n\r\n                            result = PhpTypeCode.Object;\r\n                            break;\r\n                        }\r\n\r\n                    case AccessType.ReadRef:\r\n                    case AccessType.ReadUnknown:\r\n\r\n                        // STORE prepared,result\r\n                        codeGenerator.AccessSelector = AccessType.Write;\r\n                        result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator);\r\n                        codeGenerator.AccessSelector = AccessType.None;\r\n                        Debug.Assert(result == PhpTypeCode.Void);\r\n\r\n                        // loads a reference on the LHS variable:\r\n                        codeGenerator.AccessSelector = access;\r\n                        codeGenerator.ChainBuilder.Create();\r\n                        result = node.LValue.Emit(codeGenerator);\r\n                        codeGenerator.ChainBuilder.EndRef();\r\n                        codeGenerator.AccessSelector = AccessType.None;\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n\r\n                        // STORE a:\r\n                        codeGenerator.AccessSelector = AccessType.Write;\r\n                        result = VariableUseHelper.EmitAssign(node.LValue, codeGenerator);\r\n                        codeGenerator.AccessSelector = AccessType.None;\r\n                        Debug.Assert(result == PhpTypeCode.Void);\r\n\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"Invalid access type.\");\r\n                        result = PhpTypeCode.Invalid;\r\n                        break;\r\n                }\r\n\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                codeGenerator.AccessSelector = old_selector;\r\n\r\n                return result;\r\n            }\r\n\r\n            private PhpTypeCode EmitDestVarRead(AssignEx/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                PhpTypeCode result;\r\n\r\n                codeGenerator.AccessSelector = AccessType.Read;\r\n                codeGenerator.ChainBuilder.Create();\r\n                result = node.LValue.Emit(codeGenerator);\r\n                codeGenerator.ChainBuilder.End();\r\n                codeGenerator.AccessSelector = AccessType.None;\r\n\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits the RHS of assignment.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <returns><see cref=\"PhpTypeCode\"/> of the RHS.</returns>\r\n            private PhpTypeCode EmitSourceValRead(ValueAssignEx/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                PhpTypeCode result;\r\n\r\n                codeGenerator.ChainBuilder.Create();\r\n                result = node.RValue.Emit(codeGenerator);\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region RefAssignEx\r\n\r\n        [NodeCompiler(typeof(RefAssignEx))]\r\n        sealed class RefAssignExCompiler : AssignExCompiler\r\n        {\r\n            public override Evaluation Analyze(AssignEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n                ExInfoFromParent lvalue_info = new ExInfoFromParent(node);\r\n                ExInfoFromParent rvalue_info = new ExInfoFromParent(node);\r\n\r\n                lvalue_info.Access = AccessType.WriteRef;\r\n                rvalue_info.Access = AccessType.ReadRef;\r\n\r\n                var refassignex = (RefAssignEx)node;\r\n\r\n                node.lvalue = (VariableUse)node.LValue.Analyze(analyzer, lvalue_info).Expression;\r\n                refassignex.rvalue = refassignex.RValue.Analyze(analyzer, rvalue_info).Literalize();\r\n\r\n                if (refassignex.RValue is NewEx)\r\n                {\r\n                    //PhpException.Throw(PhpError.Deprecated, CoreResources.GetString(\"assign_new_as_ref_is_deprecated\"));\r\n                    analyzer.ErrorSink.Add(Warnings.AssignNewByRefDeprecated, analyzer.SourceUnit, node.Span);\r\n                }\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(AssignEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef\r\n                  || access == AccessType.ReadUnknown);\r\n                Statistics.AST.AddNode(\"Assign.Ref\");\r\n\r\n                //ChainBuilder.RefErrorLabelInfo labelInfo;\r\n                \r\n                // Strict Standards: Only variables should be assigned by reference\r\n                /*if (rvalue is FunctionCall)//TODO: only variables (but also variables given by function call return value!)\r\n                {\r\n                    il.LdcI4( (int)PhpError.Strict );\r\n                    il.Emit(OpCodes.Ldstr, CoreResources.GetString(\"only_vars_assign ed_by_ref\"));\r\n                    codeGenerator.EmitPhpException(il,Methods.PhpException.Throw);\r\n                }*/\r\n\r\n                // PREPARE:\r\n                codeGenerator.ChainBuilder.Create();\r\n                node.LValue.Emit(codeGenerator);\r\n\r\n                // LOAD <right hand side>:\r\n                codeGenerator.ChainBuilder.Create();\r\n                ((RefAssignEx)node).RValue.Emit(codeGenerator);\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                PhpTypeCode result;\r\n\r\n                // Dup source value if assignment is read\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                    case AccessType.ReadUnknown:\r\n                    case AccessType.ReadRef:\r\n                        {\r\n                            // DUP\r\n                            codeGenerator.IL.Emit(OpCodes.Dup);\r\n\r\n                            // STORE tmp\r\n                            codeGenerator.IL.Stloc(codeGenerator.IL.GetAssignmentLocalRef());\r\n\r\n                            // STORE prepared,result\r\n                            VariableUseHelper.EmitAssign(node.LValue, codeGenerator);\r\n\r\n                            // LOAD DEREF tmp\r\n                            codeGenerator.IL.Ldloc(codeGenerator.IL.GetAssignmentLocalRef());\r\n\r\n                            if (access == AccessType.Read)\r\n                            {\r\n                                codeGenerator.IL.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                                result = PhpTypeCode.Object;\r\n                            }\r\n                            else\r\n                            {\r\n                                result = PhpTypeCode.PhpReference;\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case AccessType.None:\r\n                        VariableUseHelper.EmitAssign(node.LValue, codeGenerator);\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    default:\r\n                        throw new InvalidOperationException();\r\n                        //result = PhpTypeCode.Invalid;\r\n                        //break;\r\n                }\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/AstNodeExtension.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core.Reflection;\r\n\r\nusing PHP.Core.AST;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    /// <summary>\r\n    /// <see cref=\"AstNode\"/> extension methods.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    internal static class AstNodeExtension\r\n    {\r\n        #region INodeCompiler instantiation\r\n\r\n        /// <summary>\r\n        /// Reflected information about specific node compiler.\r\n        /// </summary>\r\n        public struct NodeCompilerInfo\r\n        {\r\n            [Flags]\r\n            private enum Flags : byte\r\n            {\r\n                HasDefaultCtor = 1,\r\n                IsSingleton = 2,\r\n            }\r\n\r\n            private object data;\r\n            private Flags flags;\r\n\r\n            public bool IsSingleton { get { return (flags & Flags.IsSingleton) != 0; } }\r\n            public bool HasDefaultCtor { get { return (flags & Flags.HasDefaultCtor) != 0; } }\r\n\r\n            public NodeCompilerInfo(Type type, bool hasDefaultCtor, bool isSingleton)\r\n            {\r\n                Debug.Assert(type != null);\r\n                Debug.Assert(!isSingleton || hasDefaultCtor);   // isSingleton => hasDefaultCtor\r\n                data = type;\r\n                flags = (Flags)0;\r\n                if (hasDefaultCtor) flags |= Flags.HasDefaultCtor;\r\n                if (isSingleton) flags |= Flags.IsSingleton;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Type of <see cref=\"INodeCompiler\"/> to be used. In case of <see cref=\"IsSingleton\"/>, this property is invalid.\r\n            /// </summary>\r\n            public Type/*!*/NodeCompilerType\r\n            {\r\n                get\r\n                {\r\n                    Debug.Assert(!IsSingleton);\r\n                    return (Type)data;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Instance of <see cref=\"INodeCompiler\"/> is case of <see cref=\"IsSingleton\"/> is <c>true</c>.\r\n            /// </summary>\r\n            public INodeCompiler/*!*/NodeCompilerSingleton\r\n            {\r\n                get\r\n                {\r\n                    Debug.Assert(IsSingleton);\r\n\r\n                    var result = data as INodeCompiler;\r\n                    if (result == null && IsSingleton)\r\n                    {\r\n                        Debug.Assert(HasDefaultCtor);\r\n                        Debug.Assert(data is Type);\r\n\r\n                        // lazily create instance of INodeCompiler\r\n                        data = result = (INodeCompiler)Activator.CreateInstance((Type)data);\r\n                    }\r\n                    return result;\r\n                }\r\n            }\r\n\r\n#if DEBUG\r\n            internal void Test()\r\n            {\r\n                var type = data as Type;\r\n                if (type == null) return;\r\n                // determine whether NodeCompilerAttribute should have Singleton = true\r\n                bool hasFields = false;\r\n                for (var t = type; t != null && t != typeof(Object); t = t.BaseType)\r\n                    hasFields |= t.GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public).Length != 0;\r\n\r\n                if (IsSingleton) Debug.Assert(!hasFields, \"Singleton should not have instance fields.\");\r\n                else Debug.Assert(hasFields, type.ToString() + \" should be marked as Singleton.\");\r\n            }\r\n#endif\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets map of <see cref=\"AstNode\"/> types corresponding to <see cref=\"INodeCompiler\"/> types.\r\n        /// </summary>\r\n        internal static Dictionary<Type, NodeCompilerInfo>/*!*/AstNodeExtensionTypes\r\n        {\r\n            get\r\n            {\r\n                if (_astNodeExtensionTypes == null)\r\n                    lock (typeof(AstNodeExtension))\r\n                        if (_astNodeExtensionTypes == null)\r\n                            _astNodeExtensionTypes = NodeCompilers.CreateNodeExtensionTypes();\r\n\r\n                return _astNodeExtensionTypes;\r\n            }\r\n        }\r\n        private static Dictionary<Type, NodeCompilerInfo> _astNodeExtensionTypes = null;\r\n        \r\n        /// <summary>\r\n        /// Key to <see cref=\"AstNode.Properties\"/> referencing its <see cref=\"INodeCompiler\"/>.\r\n        /// </summary>\r\n        private static object AstNodeCompilerKey = typeof(INodeCompiler);\r\n\r\n        /// <summary>\r\n        /// Gets (or creates new) <see cref=\"INodeCompiler\"/> associated with given <paramref name=\"node\"/>.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"AstNode\"/> instance.</param>\r\n        /// <returns>Associuated <see cref=\"INodeCompiler\"/> instance.</returns>\r\n        public static T/*!*/NodeCompiler<T>(this AstNode/*!*/node) where T : class\r\n        {\r\n            var obj = node.Properties[AstNodeCompilerKey] as T;\r\n            if (obj == null)\r\n            {\r\n                node.Properties[AstNodeCompilerKey] = obj = CreateNodeCompiler(node) as T;\r\n                Debug.Assert(obj != null, \"AstNode \" + node.GetType().ToString() + \" does not implement INodeCompiler of type \" + typeof(T).ToString());\r\n            }\r\n            return obj;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates <see cref=\"INodeCompiler\"/> instance for given <paramref name=\"node\"/>.\r\n        /// </summary>\r\n        /// <param name=\"node\">Corresponding <see cref=\"AstNode\"/> instance.</param>\r\n        /// <returns><see cref=\"INodeCompiler\"/> instance for given <paramref name=\"node\"/>.</returns>\r\n        private static INodeCompiler/*!*/CreateNodeCompiler(AstNode/*!*/node)\r\n        {\r\n            var compilerinfo = AstNodeExtensionTypes[node.GetType()];\r\n            if (compilerinfo.IsSingleton)\r\n                return compilerinfo.NodeCompilerSingleton;\r\n\r\n            if (compilerinfo.HasDefaultCtor)\r\n                return (INodeCompiler)Activator.CreateInstance(compilerinfo.NodeCompilerType);\r\n            else\r\n                return (INodeCompiler)Activator.CreateInstance(compilerinfo.NodeCompilerType, node);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets (or creates) <see cref=\"IExpressionCompiler\"/> associatd with given expression.\r\n        /// </summary>\r\n        private static IExpressionCompiler/*!*/ExpressionCompiler(this Expression/*!*/expr)\r\n        {\r\n            return NodeCompiler<IExpressionCompiler>(expr);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Expression\r\n\r\n        public static AccessType GetAccess(this Expression/*!*/node)\r\n        {\r\n            return node.ExpressionCompiler().Access;\r\n        }\r\n\r\n        public static bool HasValue(this Expression/*!*/node)\r\n        {\r\n            return node.ExpressionCompiler().HasValue(node);\r\n        }\r\n\r\n        public static object GetValue(this Expression/*!*/node)\r\n        {\r\n            return node.ExpressionCompiler().GetValue(node);\r\n        }\r\n\r\n        public static PhpTypeCode GetValueTypeCode(this Expression/*!*/node)\r\n        {\r\n            return node.ExpressionCompiler().GetValueTypeCode(node);\r\n        }\r\n\r\n        public static Evaluation EvaluatePriorAnalysis(this Expression/*!*/node, CompilationSourceUnit/*!*/sourceUnit)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.EvaluatePriorAnalysis(node, sourceUnit);\r\n        }\r\n        public static Evaluation Analyze(this Expression/*!*/node, Analyzer/*!*/ analyzer, ExInfoFromParent info)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.Analyze(node, analyzer, info);\r\n        }\r\n        \r\n        public static object Evaluate(this Expression/*!*/node, object value)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.Evaluate(node, value);\r\n        }\r\n        public static object Evaluate(this Expression/*!*/node, object leftValue, object rightValue)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.Evaluate(node, leftValue, rightValue);\r\n        }\r\n\r\n        public static PhpTypeCode Emit(this Expression/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.Emit(node, codeGenerator);\r\n        }\r\n\r\n        public static bool IsDeeplyCopied(this Expression/*!*/node, CopyReason reason, int nestingLevel)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.IsDeeplyCopied(node, reason, nestingLevel);\r\n        }\r\n\r\n        public static bool IsCustomAttributeArgumentValue(this Expression/*!*/node)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.IsCustomAttributeArgumentValue(node);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether an expression represented by this node should be stored to a temporary local if assigned.\r\n        /// </summary>\r\n        public static bool StoreOnAssignment(this Expression/*!*/node)\r\n        {\r\n            var nodecompiler = node.ExpressionCompiler();\r\n            return nodecompiler.StoreOnAssignment(node);\r\n        }\r\n\r\n        #endregion        \r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/BinaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(BinaryEx))]\r\n        sealed class BinaryExCompiler : ExpressionCompiler<BinaryEx>\r\n        {\r\n            #region Analysis\r\n\r\n            public override Evaluation EvaluatePriorAnalysis(BinaryEx node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                Evaluation left_eval = node.LeftExpr.EvaluatePriorAnalysis(sourceUnit);\r\n                Evaluation right_eval = node.RightExpr.EvaluatePriorAnalysis(sourceUnit);\r\n\r\n                return Evaluation.ReadOnlyEvaluate(node, left_eval, right_eval);\r\n            }\r\n\r\n            public override Evaluation Analyze(BinaryEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n                ExInfoFromParent operand_info = ExInfoFromParent.DefaultExInfo;\r\n\r\n                Evaluation left_eval = node.LeftExpr.Analyze(analyzer, operand_info);\r\n                Evaluation right_eval;\r\n\r\n                // Boolean expression evaluation semantics:\r\n                if (node.Operation == Operations.Or)\r\n                {\r\n                    analyzer.EnterConditionalCode();\r\n                    right_eval = node.RightExpr.Analyze(analyzer, operand_info);\r\n                    analyzer.LeaveConditionalCode();\r\n                }\r\n                else\r\n                {\r\n                    right_eval = node.RightExpr.Analyze(analyzer, operand_info);\r\n                }\r\n\r\n                Expression rightTmp, leftTmp;\r\n                Evaluation result = Evaluation.Evaluate(node, left_eval, out leftTmp, right_eval, out rightTmp);\r\n                node.LeftExpr = leftTmp;\r\n                node.RightExpr = rightTmp;\r\n\r\n                // division by zero check:\r\n                if ((node.Operation == Operations.Div || node.Operation == Operations.Mod) && result.HasValue && result.Value is bool && (bool)result.Value == false)\r\n                {\r\n                    analyzer.ErrorSink.Add(Warnings.DivisionByZero, analyzer.SourceUnit, node.RightExpr.Span);\r\n                }\r\n                else if ((node.Operation == Operations.Div || node.Operation == Operations.Mod) && right_eval.HasValue && right_eval.Value is int && (int)right_eval.Value == 0)\r\n                {\r\n                    result = new Evaluation(node, false);\r\n                    analyzer.ErrorSink.Add(Warnings.DivisionByZero, analyzer.SourceUnit, node.RightExpr.Span);\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            public override object Evaluate(BinaryEx node, object leftValue, object rightValue)\r\n            {\r\n                switch (node.Operation)\r\n                {\r\n                    case Operations.Xor:\r\n                        return Convert.ObjectToBoolean(leftValue) ^ Convert.ObjectToBoolean(rightValue);\r\n\r\n                    case Operations.Or:\r\n                        return Convert.ObjectToBoolean(leftValue) || Convert.ObjectToBoolean(rightValue);\r\n\r\n                    case Operations.And:\r\n                        return Convert.ObjectToBoolean(leftValue) && Convert.ObjectToBoolean(rightValue);\r\n\r\n                    case Operations.BitOr:\r\n                        return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.Or);\r\n\r\n                    case Operations.BitXor:\r\n                        return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.Xor);\r\n\r\n                    case Operations.BitAnd:\r\n                        return Operators.BitOperation(leftValue, rightValue, Operators.BitOp.And);\r\n\r\n                    case Operations.Equal:\r\n                        return PhpComparer./*Default.*/CompareEq(leftValue, rightValue);\r\n\r\n                    case Operations.NotEqual:\r\n                        return !PhpComparer./*Default.*/CompareEq(leftValue, rightValue);\r\n\r\n                    case Operations.Identical:\r\n                        return Operators.StrictEquality(leftValue, rightValue);\r\n\r\n                    case Operations.NotIdentical:\r\n                        return !Operators.StrictEquality(leftValue, rightValue);\r\n\r\n                    case Operations.LessThan:\r\n                        return PhpComparer.Default.Compare(leftValue, rightValue) < 0;\r\n\r\n                    case Operations.GreaterThan:\r\n                        return PhpComparer.Default.Compare(leftValue, rightValue) > 0;\r\n\r\n                    case Operations.LessThanOrEqual:\r\n                        return PhpComparer.Default.Compare(leftValue, rightValue) <= 0;\r\n\r\n                    case Operations.GreaterThanOrEqual:\r\n                        return PhpComparer.Default.Compare(leftValue, rightValue) >= 0;\r\n\r\n                    case Operations.ShiftRight:\r\n                        return Operators.ShiftRight(leftValue, rightValue); // int\r\n\r\n                    case Operations.ShiftLeft:\r\n                        return Operators.ShiftLeft(leftValue, rightValue);  // int\r\n\r\n                    case Operations.Add:\r\n                        return Operators.Add(leftValue, rightValue);\r\n\r\n                    case Operations.Sub:\r\n                        return Operators.Subtract(leftValue, rightValue);\r\n\r\n                    case Operations.Mul:\r\n                        return Operators.Multiply(leftValue, rightValue);\r\n\r\n                    case Operations.Pow:\r\n                        return Operators.Pow(leftValue, rightValue);\r\n\r\n                    case Operations.Div:\r\n                        return Operators.Divide(leftValue, rightValue);\r\n\r\n                    case Operations.Mod:\r\n                        return Operators.Remainder(leftValue, rightValue);\r\n\r\n                    case Operations.Concat:\r\n                        return Operators.Concat(leftValue, rightValue);\r\n\r\n                    default:\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Code emission\r\n\r\n            /// <summary>\r\n            /// Whether the result of binary expression should be deeply copied.\r\n            /// </summary>\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"IsDeeplyCopied\"]/*'/>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <returns>All operators returns immutable values. Hence, returns <B>false</B>.</returns>\r\n            public override bool IsDeeplyCopied(BinaryEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                switch (node.Operation)\r\n                {\r\n                    // respective operators returns immutable values:\r\n                    case Operations.Xor:\r\n                    case Operations.Or:\r\n                    case Operations.And:\r\n                    case Operations.BitOr:\r\n                    case Operations.BitXor:\r\n                    case Operations.BitAnd:\r\n                    case Operations.Equal:\r\n                    case Operations.NotEqual:\r\n                    case Operations.Identical:\r\n                    case Operations.NotIdentical:\r\n                    case Operations.LessThan:\r\n                    case Operations.GreaterThan:\r\n                    case Operations.LessThanOrEqual:\r\n                    case Operations.GreaterThanOrEqual:\r\n                    case Operations.ShiftLeft:\r\n                    case Operations.ShiftRight:\r\n                    case Operations.Add:\r\n                    case Operations.Sub:\r\n                    case Operations.Mul:\r\n                    case Operations.Pow:\r\n                    case Operations.Div:\r\n                    case Operations.Mod:\r\n                    case Operations.Concat:\r\n                        return false;\r\n                }\r\n                Debug.Fail(\"Illegal operation type.\");\r\n                return true;\r\n            }\r\n\r\n            /// <remarks>\r\n            /// Nothing is expected at the evaluation stack. If AST node is read by other node,\r\n            /// the operation result is left at the stack, otherwise it is poped from the stack.\r\n            /// </remarks>\r\n            public override PhpTypeCode Emit(BinaryEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read);\r\n                Statistics.AST.AddNode(\"BinaryEx\");\r\n\r\n                PhpTypeCode returned_typecode;\r\n                PhpTypeCode lo_typecode;\r\n                PhpTypeCode ro_typecode;\r\n\r\n                switch (node.Operation)\r\n                {\r\n                    #region Arithmetic Operations\r\n\r\n                    case Operations.Add:\r\n                        // Template: x + y : Operators.Add(x,y) [overloads]\r\n\r\n                        switch (lo_typecode = node.LeftExpr.Emit(codeGenerator))\r\n                        {\r\n                            case PhpTypeCode.Double:\r\n                                switch (ro_typecode = node.RightExpr.Emit(codeGenerator))\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        codeGenerator.IL.Emit(OpCodes.Conv_R8);\r\n                                        goto case PhpTypeCode.Double;   // fallback:\r\n                                    case PhpTypeCode.Double:\r\n                                        codeGenerator.IL.Emit(OpCodes.Add);\r\n                                        returned_typecode = PhpTypeCode.Double;\r\n                                        break;\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Double_Object);\r\n                                        break;\r\n                                }\r\n\r\n                                break;\r\n                            default:\r\n                                codeGenerator.EmitBoxing(lo_typecode);\r\n                                ro_typecode = node.RightExpr.Emit(codeGenerator);\r\n\r\n                                switch (ro_typecode)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Add.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.Sub:\r\n                        //Template: \"x - y\"        Operators.Subtract(x,y) [overloads]\r\n                        lo_typecode = node.LeftExpr.Emit(codeGenerator);\r\n                        switch (lo_typecode)\r\n                        {\r\n                            case PhpTypeCode.Integer:\r\n                                codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                                returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Int32_Object);\r\n                                break;\r\n                            case PhpTypeCode.Double:\r\n                                switch (ro_typecode = node.RightExpr.Emit(codeGenerator))\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        codeGenerator.IL.Emit(OpCodes.Conv_R8);\r\n                                        goto case PhpTypeCode.Double;   // fallback:\r\n                                    case PhpTypeCode.Double:\r\n                                        codeGenerator.IL.Emit(OpCodes.Sub);\r\n                                        returned_typecode = PhpTypeCode.Double;\r\n                                        break;\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Double_Object);\r\n                                        break;\r\n                                }\r\n\r\n                                break;\r\n                            default:\r\n                                codeGenerator.EmitBoxing(lo_typecode);\r\n                                ro_typecode = node.RightExpr.Emit(codeGenerator);\r\n                                if (ro_typecode == PhpTypeCode.Integer)\r\n                                {\r\n                                    returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Int);\r\n                                }\r\n                                else\r\n                                {\r\n                                    codeGenerator.EmitBoxing(ro_typecode);\r\n                                    returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Subtract.Object_Object);\r\n                                }\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.Div:\r\n                        //Template: \"x / y\"   Operators.Divide(x,y)\r\n\r\n                        lo_typecode = node.LeftExpr.Emit(codeGenerator);\r\n                        switch (lo_typecode)\r\n                        {\r\n                            case PhpTypeCode.Integer:\r\n                                codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                                returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Int32_Object);\r\n                                break;\r\n\r\n                            case PhpTypeCode.Double:\r\n                                switch (ro_typecode = node.RightExpr.Emit(codeGenerator))\r\n                                {\r\n                                    case PhpTypeCode.Double:\r\n                                        codeGenerator.IL.Emit(OpCodes.Div);\r\n                                        returned_typecode = PhpTypeCode.Double;\r\n                                        break;\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Double_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n\r\n                            default:\r\n                                codeGenerator.EmitBoxing(lo_typecode);\r\n                                ro_typecode = node.RightExpr.Emit(codeGenerator);\r\n\r\n                                switch (ro_typecode)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Divide.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.Mul:\r\n                        switch (lo_typecode = node.LeftExpr.Emit(codeGenerator))\r\n                        {\r\n                            case PhpTypeCode.Double:\r\n                                // \"x * (double)y\"\r\n                                // Operators.Multiply((double)x,(object)y)\r\n\r\n                                switch (ro_typecode = node.RightExpr.Emit(codeGenerator))\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        codeGenerator.IL.Emit(OpCodes.Conv_R8);\r\n                                        goto case PhpTypeCode.Double;   // fallback:\r\n                                    case PhpTypeCode.Double:\r\n                                        codeGenerator.IL.Emit(OpCodes.Mul);\r\n                                        returned_typecode = PhpTypeCode.Double;\r\n                                        break;\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Double_Object);\r\n                                        break;\r\n                                }\r\n\r\n                                break;\r\n                            default:\r\n                                //Template: \"x * y\"  Operators.Multiply((object)x,y) [overloads]\r\n                                codeGenerator.EmitBoxing(lo_typecode);\r\n\r\n                                ro_typecode = node.RightExpr.Emit(codeGenerator);\r\n                                switch (ro_typecode)\r\n                                {\r\n                                    case PhpTypeCode.Integer:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Int32);\r\n                                        break;\r\n\r\n                                    case PhpTypeCode.Double:\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Double);\r\n                                        break;\r\n\r\n                                    default:\r\n                                        codeGenerator.EmitBoxing(ro_typecode);\r\n                                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Multiply.Object_Object);\r\n                                        break;\r\n                                }\r\n                                break;\r\n                        }\r\n                        break;\r\n                    \r\n                    case Operations.Pow:\r\n                        codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                        codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Pow.Object_Object);\r\n                        break;\r\n\r\n                    case Operations.Mod:\r\n                        //Template: \"x % y\"        Operators.Remainder(x,y)\r\n                        codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                        ro_typecode = node.RightExpr.Emit(codeGenerator);\r\n                        switch (ro_typecode)\r\n                        {\r\n                            case PhpTypeCode.Integer:\r\n                                returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Int32);\r\n                                break;\r\n\r\n                            default:\r\n                                codeGenerator.EmitBoxing(ro_typecode);\r\n                                returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Remainder.Object_Object);\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.ShiftLeft:\r\n\r\n                        // LOAD Operators.ShiftLeft(box left, box right);\r\n                        codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                        codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.ShiftLeft);\r\n                        break;\r\n\r\n                    case Operations.ShiftRight:\r\n\r\n                        // LOAD Operators.ShiftRight(box left, box right);\r\n                        codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                        codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                        returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.ShiftRight);\r\n                        break;\r\n\r\n                    #endregion\r\n\r\n                    #region Boolean and Bitwise Operations\r\n\r\n                    case Operations.And:\r\n                        returned_typecode = EmitBinaryBooleanOperation(node, codeGenerator, true);\r\n                        break;\r\n\r\n                    case Operations.Or:\r\n                        returned_typecode = EmitBinaryBooleanOperation(node, codeGenerator, false);\r\n                        break;\r\n\r\n                    case Operations.Xor:\r\n\r\n                        // LOAD <(bool) leftSon> == <(bool) rightSon>;\r\n                        codeGenerator.EmitConversion(node.LeftExpr, PhpTypeCode.Boolean);\r\n                        codeGenerator.EmitConversion(node.RightExpr, PhpTypeCode.Boolean);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.BitAnd:\r\n                        returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.And);\r\n                        break;\r\n\r\n                    case Operations.BitOr:\r\n                        returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.Or);\r\n                        break;\r\n\r\n                    case Operations.BitXor:\r\n                        returned_typecode = EmitBitOperation(node, codeGenerator, Operators.BitOp.Xor);\r\n                        break;\r\n\r\n                    #endregion\r\n\r\n                    #region Comparing Operations\r\n\r\n                    case Operations.Equal:\r\n\r\n                        // LOAD PhpComparer.Default.CompareEq\r\n                        returned_typecode = EmitComparison(node, codeGenerator, true);\r\n                        break;\r\n\r\n                    case Operations.NotEqual:\r\n\r\n                        // LOAD PhpComparer.Default.CompareEq == false\r\n                        EmitComparison(node, codeGenerator, true);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.GreaterThan:\r\n\r\n                        // LOAD PhpComparer.Default.Compare > 0;\r\n                        EmitComparison(node, codeGenerator, false);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Cgt);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.LessThan:\r\n\r\n                        // LOAD PhpComparer.Default.Compare < 0;\r\n                        EmitComparison(node, codeGenerator, false);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Clt);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.GreaterThanOrEqual:\r\n\r\n                        // LOAD PhpComparer.Default.Compare >= 0 (not less than)\r\n                        EmitComparison(node, codeGenerator, false);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Clt);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.LessThanOrEqual:\r\n\r\n                        // LOAD PhpComparer.Default.Compare >= 0 (not greater than)\r\n                        EmitComparison(node, codeGenerator, false);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Cgt);\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.Identical:\r\n\r\n                        // LOAD Operators.StrictEquality(box left,box right);\r\n                        returned_typecode = EmitStrictEquality(node, codeGenerator);\r\n                        break;\r\n\r\n                    case Operations.NotIdentical:\r\n\r\n                        // LOAD Operators.StrictEquality(box left,box right) == false;\r\n                        EmitStrictEquality(node, codeGenerator);\r\n\r\n                        codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);\r\n                        codeGenerator.IL.Emit(OpCodes.Ceq);\r\n\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    #endregion\r\n\r\n                    case Operations.Concat:\r\n                        returned_typecode = ConcatExCompiler.EmitConcat(codeGenerator, node.LeftExpr, node.RightExpr);\r\n                        break;\r\n\r\n                    default:\r\n                        throw null;\r\n                }\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                        // Result is read, do nothing.\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n                        // Result is not read, pop the result\r\n                        codeGenerator.IL.Emit(OpCodes.Pop);\r\n                        returned_typecode = PhpTypeCode.Void;\r\n                        break;\r\n                }\r\n\r\n                return returned_typecode;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits bit operation <see cref=\"BinaryEx.LeftExpr\"/> OP <see cref=\"BinaryEx.RightExpr\"/>.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"op\">The operation.</param>\r\n            /// <returns>A type code of the result.</returns>\r\n            private static PhpTypeCode EmitBitOperation(BinaryEx/*!*/node, CodeGenerator/*!*/ codeGenerator, Operators.BitOp op)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // LOAD Operators.BitOperation(box <leftSon>, box <rightSon>);\r\n                codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                il.Emit(OpCodes.Ldc_I4, (int)op);\r\n                il.Emit(OpCodes.Call, Methods.Operators.BitOperation);\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits binary boolean operation (AND or OR).\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"isAnd\">Whether to emit AND.</param>\r\n            /// <returns>A type code of the result.</returns>\r\n            private static PhpTypeCode EmitBinaryBooleanOperation(BinaryEx/*!*/node, CodeGenerator codeGenerator, bool isAnd)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Label partial_eval_label = il.DefineLabel();\r\n                Label end_label = il.DefineLabel();\r\n\r\n                // IF [!]<(bool) leftSon> THEN GOTO partial_eval;\r\n                codeGenerator.EmitConversion(node.LeftExpr, PhpTypeCode.Boolean);\r\n                il.Emit(isAnd ? OpCodes.Brfalse : OpCodes.Brtrue, partial_eval_label);\r\n\r\n                // LOAD <(bool) leftSon>;\r\n                codeGenerator.EmitConversion(node.RightExpr, PhpTypeCode.Boolean);\r\n\r\n                il.Emit(OpCodes.Br, end_label);\r\n                il.MarkLabel(partial_eval_label, true);\r\n                il.LdcI4(isAnd ? 0 : 1);\r\n                il.MarkLabel(end_label, true);\r\n\r\n                return PhpTypeCode.Boolean;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits call to a default comparator method.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"equality\">Whether to emit equality comparison (or generic comparison otherwise).</param>\r\n            /// <returns>A type code of the result.</returns>\r\n            private static PhpTypeCode EmitComparison(BinaryEx/*!*/node, CodeGenerator codeGenerator, bool equality)\r\n            {\r\n                PhpTypeCode x, y;\r\n                // PhpComparer.Default.<CompareEq | Compare>(box left, box right <|, false>);\r\n                /*changed to static method*/\r\n                //codeGenerator.IL.Emit(OpCodes.Ldsfld, Fields.PhpComparer_Default);\r\n\r\n                if (equality)\r\n                {\r\n                    return codeGenerator.EmitCompareEq(cg => node.LeftExpr.Emit(cg), cg => node.RightExpr.Emit(cg));\r\n                }\r\n                else\r\n                {\r\n                    x = node.LeftExpr.Emit(codeGenerator);\r\n\r\n                    if (x == PhpTypeCode.Integer)\r\n                    {\r\n                        y = node.RightExpr.Emit(codeGenerator);\r\n\r\n                        // int, ?\r\n\r\n                        if (y == PhpTypeCode.Integer)\r\n                        {\r\n                            // int, int\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_int_int);\r\n                            return PhpTypeCode.Integer;\r\n                        }\r\n                        else\r\n                        {\r\n                            codeGenerator.EmitBoxing(y);\r\n\r\n                            // int, object\r\n                            codeGenerator.IL.LdcI4(0);  // throws = false\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_int_object_bool);\r\n                            return PhpTypeCode.Integer;\r\n                        }\r\n\r\n                    }\r\n                    else\r\n                    {\r\n                        codeGenerator.EmitBoxing(x);\r\n\r\n                        y = node.RightExpr.Emit(codeGenerator);\r\n\r\n                        // object, ?\r\n\r\n                        if (y == PhpTypeCode.Integer)\r\n                        {\r\n                            // object, int\r\n                            codeGenerator.IL.LdcI4(0);  // throws = false\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_object_int_bool);\r\n                            return PhpTypeCode.Integer;\r\n                        }\r\n                        else\r\n                        {\r\n                            codeGenerator.EmitBoxing(y);\r\n\r\n                            // object, object\r\n                            codeGenerator.IL.LdcI4(0);  // throws = false\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.CompareOp_object_object_bool);\r\n                            return PhpTypeCode.Integer;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits strict equality operation.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <returns>A type code of the result (boolean).</returns>\r\n            private static PhpTypeCode EmitStrictEquality(BinaryEx/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                if (IsEmptyArrayEx(node.LeftExpr))\r\n                {\r\n                    EmitEmptyArrayStrictEquality(codeGenerator, node.RightExpr);\r\n                }\r\n                else if (IsEmptyArrayEx(node.RightExpr))\r\n                {\r\n                    EmitEmptyArrayStrictEquality(codeGenerator, node.LeftExpr);\r\n                }\r\n                else\r\n                {\r\n                    // LOAD Operators.StrictEquality(box left,box right);\r\n                    codeGenerator.EmitBoxing(node.LeftExpr.Emit(codeGenerator));\r\n                    codeGenerator.EmitBoxing(node.RightExpr.Emit(codeGenerator));\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEquality);\r\n                }\r\n\r\n                return PhpTypeCode.Boolean;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits strict equality to empty PHP array.\r\n            /// </summary>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"expr\">Expression to be compared against.</param>\r\n            private static void EmitEmptyArrayStrictEquality(CodeGenerator/*!*/codeGenerator, Expression/*!*/expr)\r\n            {\r\n                if (IsEmptyArrayEx(expr))\r\n                {\r\n                    // array() === array()\r\n                    // LOAD true\r\n                    codeGenerator.IL.LoadBool(true);\r\n                }\r\n                else if (expr is Literal)\r\n                {\r\n                    // array() === NULL|int|double|string|...\r\n                    // LOAD false\r\n                    codeGenerator.IL.LoadBool(false);\r\n                }\r\n                else\r\n                {\r\n                    // array() === <expr>\r\n\r\n                    // LOAD <expr>\r\n                    var exprTypeCode = expr.Emit(codeGenerator);\r\n\r\n                    // check whether <expr> type can be an array\r\n                    switch (exprTypeCode)\r\n                    {\r\n                        case PhpTypeCode.Boolean:\r\n                        case PhpTypeCode.DObject:\r\n                        case PhpTypeCode.Double:\r\n                        case PhpTypeCode.Integer:\r\n                        case PhpTypeCode.LongInteger:\r\n                        case PhpTypeCode.PhpBytes:\r\n                        case PhpTypeCode.PhpString:\r\n                        case PhpTypeCode.String:\r\n                            // always FALSE\r\n                            codeGenerator.IL.Emit(OpCodes.Pop);\r\n                            codeGenerator.IL.LoadBool(false);\r\n                            break;\r\n                        case PhpTypeCode.PhpArray:\r\n                            // compare (PhpArray)<expr> with array()\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEmptyPhpArrayEquality_PhpArray);\r\n                            break;\r\n                        default:\r\n                            // compare <expr> with array()\r\n                            codeGenerator.EmitBoxing(exprTypeCode);\r\n                            codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.StrictEmptyPhpArrayEquality);\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Determines whether given <paramref name=\"expr\"/> represents an empty array (<c>array()</c> or <c>[]</c>).\r\n            /// </summary>\r\n            /// <param name=\"expr\">Expression to be checked.</param>\r\n            /// <returns>True if <paramref name=\"expr\"/> is an empty array expression.</returns>\r\n            private static bool IsEmptyArrayEx(Expression/*!*/expr)\r\n            {\r\n                Debug.Assert(expr != null);\r\n                return expr.GetType() == typeof(ArrayEx) && ((ArrayEx)expr).Items.Empty();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/BuiltInFunctions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region IncludingEx\r\n\r\n        [NodeCompiler(typeof(IncludingEx))]\r\n        sealed class IncludingExCompiler : ExpressionCompiler<IncludingEx>, IIncludingExCompiler\r\n        {\r\n            #region IIncludingExCompiler\r\n\r\n            /// <summary>\r\n            /// Static inclusion info or <B>null</B> reference if target cannot be determined statically.\r\n            /// Set during inclusion graph building, before the analysis takes place.\r\n            /// </summary>\r\n            public StaticInclusion Inclusion { get { return inclusion; } /* CompilationUnit */ set { inclusion = value; } }\r\n            private StaticInclusion inclusion;\r\n\r\n            /// <summary>\r\n            /// Set during inclusion graph building, before the analysis takes place.\r\n            /// </summary>\r\n            public Characteristic Characteristic { get { return characteristic; } set { characteristic = value; } }\r\n            private Characteristic characteristic;\r\n\r\n            #endregion\r\n\r\n            public override Evaluation Analyze(IncludingEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                // if the expression should be emitted:\r\n                if (characteristic == Characteristic.Dynamic || characteristic == Characteristic.StaticArgEvaluated)\r\n                {\r\n                    node.Target = node.Target.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                }\r\n\r\n                analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsInclude);\r\n\r\n                analyzer.CurrentScope = node.Scope;\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(IncludingEx node, CodeGenerator codeGenerator)\r\n            {\r\n                PhpTypeCode result;\r\n\r\n                // emits inclusion and Main() call:\r\n                if (inclusion != null)\r\n                    result = EmitStaticInclusion(node, codeGenerator);\r\n                else\r\n                    result = EmitDynamicInclusion(node, codeGenerator);\r\n\r\n                // return value conversion:\r\n                codeGenerator.EmitReturnValueHandling(node, false, ref result);\r\n\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits a static inclusion.\r\n            /// </summary>\r\n            private PhpTypeCode EmitStaticInclusion(IncludingEx node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Label endif_label = il.DefineLabel();\r\n                Label else_label = il.DefineLabel();\r\n                MethodInfo method;\r\n\r\n                // if the expression should be emitted:\r\n                if (characteristic == Characteristic.StaticArgEvaluated)\r\n                {\r\n                    if (!(node.Target is StringLiteral || node.Target is BinaryStringLiteral))\r\n                    {\r\n                        // emits expression evaluation and ignores the result:\r\n                        node.Target.Emit(codeGenerator);\r\n                        il.Emit(OpCodes.Pop);\r\n                    }\r\n                }\r\n\r\n                if (characteristic == Characteristic.StaticAutoInclusion)\r\n                {\r\n                    // calls the Main routine only if this script is the main one:\r\n                    il.Ldarg(ScriptBuilder.ArgIsMain);\r\n                }\r\n                else\r\n                {\r\n                    RelativePath relativePath = new RelativePath(inclusion.Includee.RelativeSourcePath);    // normalize the relative path\r\n\r\n                    // CALL context.StaticInclude(<relative included script source path>,<this script type>,<inclusion type>);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    il.Emit(OpCodes.Ldc_I4, (int)relativePath.Level);\r\n                    il.Emit(OpCodes.Ldstr, relativePath.Path);\r\n                    il.Emit(OpCodes.Ldtoken, inclusion.Includee.ScriptClassType);\r\n                    il.LoadLiteral(node.InclusionType);\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.StaticInclude);\r\n                }\r\n\r\n                // IF (STACK)\r\n                il.Emit(OpCodes.Brfalse, else_label);\r\n                if (true)\r\n                {\r\n                    // emits a call to the main helper of the included script:\r\n                    method = inclusion.Includee.MainHelper;\r\n\r\n                    // CALL <Main>(context, variables, self, includer, false):\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    codeGenerator.EmitLoadSelf();\r\n                    codeGenerator.EmitLoadClassContext();\r\n                    il.Emit(OpCodes.Ldc_I4_0);\r\n                    il.Emit(OpCodes.Call, method);\r\n\r\n                    il.Emit(OpCodes.Br, endif_label);\r\n                }\r\n\r\n                // ELSE\r\n\r\n                il.MarkLabel(else_label);\r\n                if (true)\r\n                {\r\n                    // LOAD <PhpScript.SkippedIncludeReturnValue>;                          \r\n                    il.LoadLiteral(ScriptModule.SkippedIncludeReturnValue);\r\n                    il.Emit(OpCodes.Box, ScriptModule.SkippedIncludeReturnValue.GetType());\r\n                }\r\n\r\n                il.MarkLabel(endif_label);\r\n                // END IF \r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits dynamic inclusion.\r\n            /// </summary>\r\n            private PhpTypeCode EmitDynamicInclusion(IncludingEx node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                // do not generate dynamic auto inclusions:\r\n                if (InclusionTypesEnum.IsAutoInclusion(node.InclusionType))\r\n                    return PhpTypeCode.Void;\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // CALL context.DynamicInclude(<file name>,<relative includer source path>,variables,self,includer);\r\n                codeGenerator.EmitLoadScriptContext();\r\n                codeGenerator.EmitConversion(node.Target, PhpTypeCode.String);\r\n                il.Emit(OpCodes.Ldstr, codeGenerator.SourceUnit.SourceFile.RelativePath.ToString());\r\n                codeGenerator.EmitLoadRTVariablesTable();\r\n                codeGenerator.EmitLoadSelf();\r\n                codeGenerator.EmitLoadClassContext();\r\n                il.LoadLiteral(node.InclusionType);\r\n                il.Emit(OpCodes.Call, Methods.ScriptContext.DynamicInclude);\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IssetEx\r\n\r\n        [NodeCompiler(typeof(IssetEx))]\r\n        sealed class IssetExCompiler : ExpressionCompiler<IssetEx>\r\n        {\r\n            public override Evaluation Analyze(IssetEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                var vars = node.VarList;\r\n                for (int i = 0; i < vars.Count; i++)\r\n                    vars[i].Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(IssetEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read);\r\n                Statistics.AST.AddNode(\"IssetEx\");\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                codeGenerator.ChainBuilder.Create();\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                var vars = node.VarList;\r\n\r\n                if (vars.Count == 1)\r\n                {\r\n                    codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[0], codeGenerator, false));\r\n\r\n                    // Compare the result with \"null\"\r\n                    il.CmpNotNull();\r\n                }\r\n                else\r\n                {\r\n                    // Define labels \r\n                    Label f_label = il.DefineLabel();\r\n                    Label x_label = il.DefineLabel();\r\n\r\n                    // Get first variable\r\n                    codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[0], codeGenerator, false));\r\n\r\n                    // Compare the result with \"null\"\r\n                    il.CmpNotNull();\r\n\r\n                    // Process following variables and include branching\r\n                    for (int i = 1; i < vars.Count; i++)\r\n                    {\r\n                        il.Emit(OpCodes.Brfalse, f_label);\r\n                        codeGenerator.EmitBoxing(VariableUseHelper.EmitIsset(vars[i], codeGenerator, false));\r\n\r\n                        // Compare the result with \"null\"\r\n                        codeGenerator.IL.CmpNotNull();\r\n                    }\r\n\r\n                    il.Emit(OpCodes.Br, x_label);\r\n                    il.MarkLabel(f_label, true);\r\n                    il.Emit(OpCodes.Ldc_I4_0);\r\n                    il.MarkLabel(x_label, true);\r\n                }\r\n\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    il.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n\r\n                return PhpTypeCode.Boolean;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EmptyEx\r\n\r\n        [NodeCompiler(typeof(EmptyEx))]\r\n        sealed class EmptyExCompiler : ExpressionCompiler<EmptyEx>\r\n        {\r\n            public override Evaluation Analyze(EmptyEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                var expression = node.Expression;\r\n                var evaluation = expression\r\n                    .Analyze(analyzer, ExInfoFromParent.DefaultExInfo)\r\n                    .Evaluate(node, out expression);\r\n                node.Expression = expression;\r\n\r\n                return evaluation;\r\n            }\r\n\r\n            public override object Evaluate(EmptyEx node, object value)\r\n            {\r\n                return !Convert.ObjectToBoolean(value);\r\n            }\r\n\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Emit\"]/*'/>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. The result value is left on the\r\n            /// evaluation stack.\r\n            /// </remarks>\r\n            public override PhpTypeCode Emit(EmptyEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"EmptyEx\");\r\n\r\n                var variable = node.Expression as VariableUse;\r\n\r\n                //\r\n                codeGenerator.ChainBuilder.Create();\r\n\r\n                if (variable != null)\r\n                {\r\n                    // legacy isset behaviour (before PHP 5.5)\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                    // call EmitIsset in order to evaluate the variable quietly\r\n                    codeGenerator.EmitBoxing(variable.EmitIsset(codeGenerator, true));\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpVariable.IsEmpty);\r\n                }\r\n                else\r\n                {\r\n                    codeGenerator.EmitObjectToBoolean(node.Expression, true);\r\n                }\r\n\r\n                //\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n\r\n                return PhpTypeCode.Boolean;\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(EmptyEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EvalEx, AssertEx\r\n\r\n        [NodeCompiler(typeof(EvalEx), Singleton = true)]\r\n        sealed class EvalExCompiler : ExpressionCompiler<EvalEx>\r\n        {\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(EvalEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                node.Code = node.Code.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsEval);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override PhpTypeCode Emit(EvalEx node, CodeGenerator codeGenerator)\r\n            {\r\n                // not emitted in release mode:\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef);\r\n                Debug.Assert(codeGenerator.RTVariablesTablePlace != null, \"Function should have variables table.\");\r\n                Statistics.AST.AddNode(\"EvalEx\");\r\n\r\n                PhpTypeCode result = codeGenerator.EmitEval(EvalKinds.ExplicitEval, node.Code, node.Span, null, null);\r\n                \r\n                // handles return value according to the access type:\r\n                codeGenerator.EmitReturnValueHandling(node, false, ref result);\r\n                return result;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        [NodeCompiler(typeof(AssertEx))]\r\n        sealed class AssertExCompiler : ExpressionCompiler<AssertEx>\r\n        {\r\n            /// <summary>\r\n            /// Contains the code string literal that has been inlined.\r\n            /// </summary>\r\n            private string _inlinedCode;\r\n\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(AssertEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                // assertion:\r\n                if (analyzer.Context.Config.Compiler.Debug)\r\n                {\r\n                    Evaluation code_evaluation = node.CodeEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                    //Evaluation desc_evaluation = node.DescriptionEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                    // string parameter is parsed and converted to an expression:\r\n                    if (code_evaluation.HasValue)\r\n                    {\r\n                        _inlinedCode = Convert.ObjectToString(code_evaluation.Value);\r\n                        if (!string.IsNullOrEmpty(_inlinedCode))\r\n                        {\r\n                            const string prefix = \"return \";\r\n\r\n                            // the position of the last character before the parsed string:\r\n                            var statements = analyzer.BuildAst(node.CodeEx.Span.Start - prefix.Length + 1, String.Concat(prefix, _inlinedCode, \";\"));\r\n\r\n                            // code is unevaluable:\r\n                            if (statements == null)\r\n                                return new Evaluation(node, true);\r\n\r\n                            if (statements.Length > 1)\r\n                                analyzer.ErrorSink.Add(Warnings.MultipleStatementsInAssertion, analyzer.SourceUnit, node.Span);\r\n\r\n                            Debug.Assert(statements.Length > 0 && statements[0] is JumpStmt);\r\n\r\n                            node.CodeEx = ((JumpStmt)statements[0]).Expression;\r\n                        }\r\n                        else\r\n                        {\r\n                            // empty assertion:\r\n                            return new Evaluation(node, true);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        node.CodeEx = code_evaluation.Expression;\r\n                        analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsEval);\r\n                    }\r\n\r\n                    //\r\n                    node.CodeEx = node.CodeEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                    \r\n                    return new Evaluation(node);\r\n                }\r\n                else\r\n                {\r\n                    // replace with \"true\" value in release mode:\r\n                    return new Evaluation(node, true);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override PhpTypeCode Emit(AssertEx node, CodeGenerator codeGenerator)\r\n            {\r\n                // not emitted in release mode:\r\n                Debug.Assert(codeGenerator.Context.Config.Compiler.Debug, \"Assert should be cut off in release mode.\");\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef);\r\n                Debug.Assert(_inlinedCode != null || codeGenerator.RTVariablesTablePlace != null, \"Function should have variables table.\");\r\n                Statistics.AST.AddNode(\"AssertEx\");\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n                PhpTypeCode result;\r\n\r\n                if (_inlinedCode != null)\r\n                {\r\n                    Label endif_label = il.DefineLabel();\r\n                    Label else_label = il.DefineLabel();\r\n\r\n                    // IF DynamicCode.PreAssert(context) THEN\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    il.Emit(OpCodes.Call, Methods.DynamicCode.PreAssert);\r\n                    il.Emit(OpCodes.Brfalse, else_label);\r\n                    if (true)\r\n                    {\r\n                        // LOAD <evaluated assertion>;\r\n                        codeGenerator.EmitBoxing(((Expression)node.CodeEx).Emit(codeGenerator));\r\n\r\n                        // CALL DynamicCode.PostAssert(context);\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, Methods.DynamicCode.PostAssert);\r\n\r\n                        // LOAD bool CheckAssertion(STACK, <inlined code>, context, <source path>, line, column);\r\n                        var position = new Text.TextPoint(codeGenerator.SourceUnit.LineBreaks, node.Span.Start);\r\n                        il.Emit(OpCodes.Ldstr, _inlinedCode);\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Ldstr, codeGenerator.SourceUnit.SourceFile.RelativePath.ToString());\r\n                        il.LdcI4(position.Line);\r\n                        il.LdcI4(position.Column);\r\n                        codeGenerator.EmitLoadNamingContext();\r\n                        il.Emit(OpCodes.Call, Methods.DynamicCode.CheckAssertion);\r\n\r\n                        // GOTO END IF;\r\n                        il.Emit(OpCodes.Br, endif_label);\r\n                    }\r\n                    // ELSE\r\n                    il.MarkLabel(else_label);\r\n                    if (true)\r\n                    {\r\n                        // LOAD true;\r\n                        il.Emit(OpCodes.Ldc_I4_1);\r\n                    }\r\n                    // END IF;\r\n                    il.MarkLabel(endif_label);\r\n\r\n                    result = PhpTypeCode.Object;\r\n                }\r\n                else\r\n                {\r\n                    result = codeGenerator.EmitEval(EvalKinds.Assert, node.CodeEx, node.Span, null, null);\r\n                }\r\n\r\n                // handles return value according to the access type:\r\n                codeGenerator.EmitReturnValueHandling(node, false, ref result);\r\n                return result;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ExitEx\r\n\r\n        [NodeCompiler(typeof(ExitEx))]\r\n        sealed class ExitExCompiler : ExpressionCompiler<ExitEx>\r\n        {\r\n            public override Evaluation Analyze(ExitEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                if (node.ResulExpr != null)\r\n                    node.ResulExpr = node.ResulExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                analyzer.EnterUnreachableCode();\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ExitEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read);\r\n                Statistics.AST.AddNode(\"ExitEx\");\r\n\r\n                codeGenerator.EmitLoadScriptContext();\r\n\r\n                if (node.ResulExpr == null)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Ldnull);\r\n                }\r\n                else\r\n                {\r\n                    codeGenerator.EmitBoxing(node.ResulExpr.Emit(codeGenerator));\r\n                }\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.ScriptContext.Die);\r\n\r\n                if (access == AccessType.Read)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Ldnull);\r\n                    return PhpTypeCode.Object;\r\n                }\r\n                else return PhpTypeCode.Void;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// IncludingExCompiler members to be accessed by compiler.\r\n    /// </summary>\r\n    internal interface IIncludingExCompiler : INodeCompiler\r\n    {\r\n        StaticInclusion Inclusion { get; set; }\r\n        Characteristic Characteristic { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/CallSignature.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region ActualParam\r\n\r\n        [NodeCompiler(typeof(ActualParam), Singleton = true)]\r\n        sealed class ActualParamCompiler : INodeCompiler, IActualParamCompiler\r\n        {\r\n            public void Analyze(ActualParam/*!*/node, Analyzer/*!*/ analyzer, bool isBaseCtorCallConstrained)\r\n            {\r\n                // TODO: isBaseCtorCallConstrained\r\n\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n\r\n                analyzer.EnterActParam();\r\n\r\n                if (node.IsVariadic) throw new NotImplementedException();\r\n\r\n                if (analyzer.ActParamDeclIsUnknown())\r\n                {\r\n                    // we don't know whether the parameter will be passed by reference at run-time:\r\n                    if (node.Expression.AllowsPassByReference)\r\n                    {\r\n                        info.Access = AccessType.ReadUnknown;\r\n\r\n                        // Although we prepare to pass reference, value can be really passed.\r\n                        // That's why we report warning when user use '&' in calling, \r\n                        // because it has no influence.\r\n                        if (node.Ampersand)\r\n                            analyzer.ErrorSink.Add(Warnings.ActualParamWithAmpersand, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                    else\r\n                    {\r\n                        info.Access = AccessType.Read;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (analyzer.ActParamPassedByRef())\r\n                    {\r\n                        if (node.Expression.AllowsPassByReference)\r\n                        {\r\n                            info.Access = AccessType.ReadRef;\r\n                        }\r\n                        else\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.NonVariablePassedByRef, analyzer.SourceUnit, node.Expression.Span);\r\n                            analyzer.LeaveActParam();\r\n                            return;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        info.Access = AccessType.Read;\r\n                        if (node.Ampersand) analyzer.ErrorSink.Add(Warnings.ActualParamWithAmpersand, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                }\r\n\r\n                node._expression = node.Expression.Analyze(analyzer, info).Literalize();\r\n\r\n                // TODO: if signature is known, act. param has type hint and expression has known type; check if type hint matches expression\r\n\r\n                analyzer.LeaveActParam();\r\n            }\r\n\r\n            public PhpTypeCode Emit(ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable = false)\r\n            {\r\n                codeGenerator.ChainBuilder.Create();\r\n\r\n                if (ensureChainWritable)\r\n                    codeGenerator.ChainBuilder.EnsureWritable = true;\r\n\r\n                try\r\n                {\r\n                    return node.Expression.Emit(codeGenerator);\r\n                }\r\n                finally\r\n                {\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region NamedActualParam\r\n\r\n        [NodeCompiler(typeof(NamedActualParam))]\r\n        public sealed class NamedActualParamCompiler : INodeCompiler, INamedActualParamCompiler\r\n        {\r\n            public DProperty Property { get { return property; } }\r\n            private DProperty property;\r\n\r\n            public void Analyze(NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer)\r\n            {\r\n                // TODO: Named parameters can target the non-static, public, and read-write fields \r\n                // or properties of the attribute class\r\n\r\n                bool visibility_check;\r\n\r\n                if (!propertiesDeclarer.IsUnknown)\r\n                {\r\n                    property = analyzer.ResolveProperty(propertiesDeclarer, node.Name, node.Span, false, null, null, out visibility_check);\r\n                }\r\n\r\n                node.expression = node.Expression.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region CallSignature\r\n\r\n        [NodeCompiler(typeof(CallSignature), Singleton = true)]\r\n        sealed class CallSignatureCompiler : INodeCompiler, ICallSignatureCompiler\r\n        {\r\n            /// <summary>\r\n            /// Gets true if all the Parameters (after the analysis) have the value and could be evaluated during the compilation time.\r\n            /// </summary>\r\n            public bool AllParamsHaveValue(CallSignature/*!*/node)\r\n            {\r\n                foreach (var p in node.Parameters)\r\n                    if (!p.Expression.HasValue())\r\n                        return false;\r\n\r\n                return true;\r\n            }\r\n\r\n            public void Analyze(CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained)\r\n            {\r\n                // generic:\r\n\r\n                foreach (var p in node.GenericParams)\r\n                    TypeRefHelper.Analyze(p, analyzer);\r\n\r\n                // regular:\r\n\r\n                analyzer.EnterActualParams(signature, node.Parameters.Length);\r\n\r\n                foreach (var p in node.Parameters)\r\n                    p.NodeCompiler<ActualParamCompiler>().Analyze(p, analyzer, isBaseCtorCallConstrained);\r\n\r\n                analyzer.LeaveActualParams();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Builds <see cref=\"ArrayEx\"/> with call signature parameters.\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            public ArrayEx/*!*/BuildPhpArray(CallSignature/*!*/node)\r\n            {\r\n                Debug.Assert(node.GenericParams.Empty());\r\n\r\n                List<Item> arrayItems = new List<Item>(node.Parameters.Length);\r\n                var pos = Text.Span.Invalid;\r\n\r\n                foreach (var p in node.Parameters)\r\n                {\r\n                    arrayItems.Add(new ValueItem(null, p.Expression));\r\n                    if (pos.IsValid)\r\n                        pos = p.Span;\r\n                    else\r\n                        pos = Text.Span.FromBounds(pos.Start, p.Span.End);\r\n                }\r\n\r\n                return new ArrayEx(pos, arrayItems);\r\n            }\r\n\r\n            #region Emission\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load actual parameters and optionally add a new stack frame to\r\n            /// current <see cref=\"PHP.Core.ScriptContext.Stack\"/>.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">Code generator.</param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </remarks>\r\n            public void EmitLoadOnPhpStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                var parameters = node.Parameters;\r\n                var genericParams = node.GenericParams;\r\n\r\n                PhpStackBuilder.EmitAddFrame(codeGenerator.IL, codeGenerator.ScriptContextPlace, genericParams.Length, parameters.Length,\r\n                  delegate(ILEmitter il, int i)\r\n                  {\r\n                      // generic arguments:\r\n                      genericParams[i].EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n                  },\r\n                  delegate(ILEmitter il, int i)\r\n                  {\r\n                      // regular arguments:\r\n                      var p = parameters[i];\r\n                      codeGenerator.EmitBoxing(p.NodeCompiler<ActualParamCompiler>().Emit(p, codeGenerator));\r\n                  }\r\n                );\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load actual parameters on the evaluation stack.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">Code generator.</param>\r\n            /// <param name=\"routine\">PHP method being called.</param>\r\n            /// <remarks>\r\n            /// <para>\r\n            /// The function has mandatory and optional formal arguments.\r\n            /// Mandatory arguments are those formal arguments which are not preceded by \r\n            /// any formal argument with default value. The others are optional.\r\n            /// If a formal argument without default value is declared beyond the last mandatory argument\r\n            /// it is treated as optional one by the caller. The callee checks this and throws warning.\r\n            /// </para>\r\n            /// Missing arguments handling:\r\n            /// <list type=\"bullet\">\r\n            ///   <item>missing mandatory argument - WARNING; LOAD(null);</item>\r\n            ///   <item>missing optional argument - LOAD(Arg.Default);</item>\r\n            ///   <item>superfluous arguments are ignored</item>\r\n            /// </list>\r\n            /// </remarks>\r\n            public void EmitLoadOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine)\r\n            {\r\n                EmitLoadTypeArgsOnEvalStack(node, codeGenerator, routine);\r\n                EmitLoadArgsOnEvalStack(node, codeGenerator, routine);\r\n            }\r\n\r\n            internal void EmitLoadTypeArgsOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                int mandatory_count = (routine.Signature != null) ? routine.Signature.MandatoryGenericParamCount : 0;\r\n                int formal_count = (routine.Signature != null) ? routine.Signature.GenericParamCount : 0;\r\n                int actual_count = node.GenericParams.Length;\r\n\r\n                // loads all actual parameters which are not superfluous:\r\n                for (int i = 0; i < Math.Min(actual_count, formal_count); i++)\r\n                    node.GenericParams[i].EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\r\n                // loads missing mandatory arguments:\r\n                for (int i = actual_count; i < mandatory_count; i++)\r\n                {\r\n                    // CALL PhpException.MissingTypeArgument(<i+1>,<name>);\r\n                    il.LdcI4(i + 1);\r\n                    il.Emit(OpCodes.Ldstr, routine.FullName);\r\n                    codeGenerator.EmitPhpException(Methods.PhpException.MissingTypeArgument);\r\n\r\n                    // LOAD DTypeDesc.ObjectTypeDesc;\r\n                    il.Emit(OpCodes.Ldsfld, Fields.DTypeDesc.ObjectTypeDesc);\r\n                }\r\n\r\n                // loads missing optional arguments:\r\n                for (int i = Math.Max(mandatory_count, actual_count); i < formal_count; i++)\r\n                {\r\n                    // LOAD Arg.DefaultType;\r\n                    il.Emit(OpCodes.Ldsfld, Fields.Arg_DefaultType);\r\n                }\r\n            }\r\n\r\n            internal void EmitLoadArgsOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                int mandatory_count = (routine.Signature != null) ? routine.Signature.MandatoryParamCount : 0;\r\n                int formal_count = (routine.Signature != null) ? routine.Signature.ParamCount : 0;\r\n                int actual_count = node.Parameters.Length;\r\n                PhpTypeCode param_type;\r\n\r\n                // loads all actual parameters which are not superfluous:\r\n                for (int i = 0; i < Math.Min(actual_count, formal_count); i++)\r\n                {\r\n                    var p = node.Parameters[i];\r\n                    codeGenerator.EmitBoxing(param_type = p.NodeCompiler<ActualParamCompiler>().Emit(p, codeGenerator));\r\n\r\n                    // Actual param emitter should emit \"boxing\" to a reference if its access type is ReadRef.\r\n                    // That's why no operation is needed here and references should match.\r\n                    Debug.Assert((routine.Signature == null || routine.Signature.IsAlias(i)) == (param_type == PhpTypeCode.PhpReference));\r\n                }\r\n\r\n                // loads missing mandatory arguments:\r\n                for (int i = actual_count; i < mandatory_count; i++)\r\n                {\r\n                    // CALL PhpException.MissingArgument(<i+1>,<name>);\r\n                    il.LdcI4(i + 1);\r\n                    il.Emit(OpCodes.Ldstr, routine.FullName);\r\n                    codeGenerator.EmitPhpException(Methods.PhpException.MissingArgument);\r\n\r\n                    // LOAD null;\r\n                    if (routine.Signature.IsAlias(i))\r\n                        il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                    else\r\n                        il.Emit(OpCodes.Ldnull);\r\n                }\r\n\r\n                // loads missing optional arguments:\r\n                for (int i = Math.Max(mandatory_count, actual_count); i < formal_count; i++)\r\n                {\r\n                    // LOAD Arg.Default;\r\n                    il.Emit(OpCodes.Ldsfld, Fields.Arg_Default);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits parameter loading.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"il\">Emitter.</param>\r\n            /// <param name=\"index\">The index of the parameter starting from 0.</param>\r\n            /// <param name=\"codeGenerator\">Code generator.</param>\r\n            /// <param name=\"param\">Target <see cref=\"ParameterInfo\"/>.</param>\r\n            /// <returns>The type of the actual argument or its value if it is a leteral.</returns>\r\n            public object EmitLibraryLoadArgument(CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param)\r\n            {\r\n                Debug.Assert(codeGenerator != null);\r\n                Debug.Assert(index < node.Parameters.Length, \"Missing arguments prevents code generation\");\r\n\r\n                // returns value if the parameter is evaluable at compile time:\r\n                if (node.Parameters[index].Expression.HasValue())\r\n                    return node.Parameters[index].Expression.GetValue();\r\n\r\n                // emits parameter evaluation:\r\n                var p = node.Parameters[index];\r\n                return PhpTypeCodeEnum.ToType(p.NodeCompiler<ActualParamCompiler>().Emit(p, (CodeGenerator)codeGenerator, PhpRwAttribute.IsDefined(param)));\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits load of optional parameters array on the evaluation stack.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"builder\">An overloads builder.</param>\r\n            /// <param name=\"start\">An index of the first optional parameter to be loaded into the array (indices start from 0).</param>\r\n            /// <param name=\"param\">\r\n            /// A <see cref=\"ParameterInfo\"/> of the formal parameter of the target method where the array will be passed.\r\n            /// This information influences conversions all optional parameters.\r\n            /// </param>\r\n            /// <param name=\"optArgCount\">Optional argument count (unused).</param>\r\n            public void EmitLibraryLoadOptArguments(CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount)\r\n            {\r\n                Debug.Assert(start >= 0 && builder != null && param != null && builder.Aux is CodeGenerator);\r\n\r\n                ILEmitter il = builder.IL;\r\n                Type elem_type = param.ParameterType.GetElementType();\r\n                Type array_type = elem_type.MakeArrayType();\r\n\r\n                // NEW <alem_type>[<parameters count - start>]\r\n                il.LdcI4(node.Parameters.Length - start);\r\n                il.Emit(OpCodes.Newarr, elem_type);\r\n\r\n                // loads each optional parameter into the appropriate bucket of the array:\r\n                for (int i = start; i < node.Parameters.Length; i++)\r\n                {\r\n                    // <arr>[i - start]\r\n                    il.Emit(OpCodes.Dup);\r\n                    il.LdcI4(i - start);\r\n\r\n                    // <parameter value>\r\n                    object type_or_value = EmitLibraryLoadArgument(node, il, i, builder.Aux, param);\r\n                    builder.EmitArgumentConversion(elem_type, type_or_value, false, param, 3);\r\n\r\n                    // <arr>[i - start] = <parameter value>;\r\n                    il.Stelem(elem_type);\r\n                }\r\n\r\n                // <arr>\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region INamedActualParamCompiler\r\n\r\n    internal interface INamedActualParamCompiler\r\n    {\r\n        DProperty Property { get; }\r\n        void Analyze(NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer);\r\n    }\r\n\r\n    internal static class NamedActualParamCompilerHelper\r\n    {\r\n        public static DProperty GetProperty(this NamedActualParam node)\r\n        {\r\n            return node.NodeCompiler<INamedActualParamCompiler>().Property;\r\n        }\r\n        public static void Analyze(this NamedActualParam/*!*/node, Analyzer/*!*/ analyzer, DType/*!*/ propertiesDeclarer)\r\n        {\r\n            node.NodeCompiler<INamedActualParamCompiler>().Analyze(node, analyzer, propertiesDeclarer);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IActualParamCompiler\r\n\r\n    internal interface IActualParamCompiler\r\n    {\r\n        PhpTypeCode Emit(ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable);\r\n    }\r\n\r\n    internal static class ActualParamCompilerHelper\r\n    {\r\n        public static PhpTypeCode Emit(this ActualParam/*!*/node, CodeGenerator/*!*/ codeGenerator, bool ensureChainWritable = false)\r\n        {\r\n            return node.NodeCompiler<IActualParamCompiler>().Emit(node, codeGenerator, ensureChainWritable);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ICallSignatureCompiler\r\n\r\n    internal interface ICallSignatureCompiler\r\n    {\r\n        bool AllParamsHaveValue(CallSignature/*!*/node);\r\n        ArrayEx/*!*/BuildPhpArray(CallSignature/*!*/node);\r\n        void Analyze(CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained);\r\n        void EmitLoadOnPhpStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n        void EmitLoadOnEvalStack(CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine);\r\n        object EmitLibraryLoadArgument(CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param);\r\n        void EmitLibraryLoadOptArguments(CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount);\r\n    }\r\n\r\n    internal static class CallSignatureHelpers\r\n    {\r\n        public static bool AllParamsHaveValue(this CallSignature/*!*/node)\r\n        {\r\n            return node.NodeCompiler<ICallSignatureCompiler>().AllParamsHaveValue(node);\r\n        }\r\n        public static ArrayEx/*!*/BuildPhpArray(this CallSignature/*!*/node)\r\n        {\r\n            return node.NodeCompiler<ICallSignatureCompiler>().BuildPhpArray(node);\r\n        }\r\n        public static void Analyze(this CallSignature/*!*/node, Analyzer/*!*/ analyzer, RoutineSignature/*!*/ signature, ExInfoFromParent info, bool isBaseCtorCallConstrained)\r\n        {\r\n            node.NodeCompiler<ICallSignatureCompiler>().Analyze(node, analyzer, signature, info, isBaseCtorCallConstrained);\r\n        }\r\n        public static void EmitLoadOnPhpStack(this CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<ICallSignatureCompiler>().EmitLoadOnPhpStack(node, codeGenerator);\r\n        }\r\n        public static void EmitLoadOnEvalStack(this CallSignature/*!*/node, CodeGenerator/*!*/ codeGenerator, PhpRoutine/*!*/ routine)\r\n        {\r\n            node.NodeCompiler<ICallSignatureCompiler>().EmitLoadOnEvalStack(node, codeGenerator, routine);\r\n        }\r\n        public static object EmitLibraryLoadArgument(this CallSignature/*!*/node, ILEmitter/*!*/ il, int index, object/*!*/ codeGenerator, ParameterInfo param)\r\n        {\r\n            return node.NodeCompiler<ICallSignatureCompiler>().EmitLibraryLoadArgument(node, il, index, codeGenerator, param);\r\n        }\r\n        public static void EmitLibraryLoadOptArguments(this CallSignature/*!*/node, OverloadsBuilder/*!*/ builder, int start, ParameterInfo/*!*/ param, IPlace optArgCount)\r\n        {\r\n            node.NodeCompiler<ICallSignatureCompiler>().EmitLibraryLoadOptArguments(node, builder, start, param, optArgCount);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/ConcatEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(ConcatEx))]\r\n        sealed class ConcatExCompiler : ExpressionCompiler<ConcatEx>\r\n        {\r\n            #region Analysis\r\n\r\n            private static IList<Expression> ChainConcatenations(IList<Expression>/*!*/ expressions)\r\n            {\r\n                //return expressions;\r\n\r\n                List<Expression> newExpressions = null;\r\n\r\n                ConcatEx expr;\r\n\r\n                for (int index = 0; index < expressions.Count; index++)\r\n                {\r\n                    if ((expr = expressions[index] as ConcatEx) != null)\r\n                    {\r\n                        if (newExpressions == null)\r\n                        {\r\n                            newExpressions = new List<Expression>(index);\r\n                            newExpressions.AddRange(expressions.Take(index)); // initial list of expressions (that were not ConcatEx)\r\n                        }\r\n\r\n                        newExpressions.AddRange(expr.Expressions);\r\n                    }\r\n                    else if (newExpressions != null)\r\n                    {\r\n                        newExpressions.Add(expressions[index]);\r\n                    }\r\n                }\r\n\r\n                // something was chained ?? or not\r\n                return (IList<Expression>)newExpressions ?? expressions;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Analyze the list of expressions and separate them into a list of chunks. (HasValue and !HasValue together)\r\n            /// </summary>\r\n            /// <returns>List of chunks - expressions chunked by that, if they are evaluable during compilation. Cannot return null.</returns>\r\n            private static List<ConcatChunk> AnalyzeChunks(Analyzer/*!*/ analyzer, IList<Expression>/*!*/expressions)\r\n            {\r\n                Debug.Assert(expressions.Any());\r\n\r\n                List<ConcatChunk> chunks = new List<ConcatChunk>();\r\n\r\n                ConcatChunk lastChunk = null;\r\n\r\n                // flattern concatenation expressions:\r\n                expressions = ChainConcatenations(expressions);\r\n\r\n                // analyze chunks\r\n                foreach (var expr in expressions)\r\n                {\r\n                    var evaluation = expr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                    // skip empty evaluated expressions\r\n                    if (evaluation.HasValue &&\r\n                        (\r\n                            evaluation.Value == null ||\r\n                            (evaluation.Value is string && ((string)evaluation.Value) == string.Empty) ||\r\n                            Convert.ObjectToPhpBytes(evaluation.Value).Length == 0\r\n                        ))\r\n                    {\r\n                        continue;  // empty literal => skip\r\n                    }\r\n\r\n                    // add chunk\r\n                    if (lastChunk == null || lastChunk.HasValue != evaluation.HasValue)\r\n                    {\r\n                        chunks.Add(lastChunk = new ConcatChunk(expr.Span, evaluation));\r\n                    }\r\n                    else if (evaluation.HasValue)\r\n                    {\r\n                        lastChunk.Value = Operators.Concat(lastChunk.Value, evaluation.Value);\r\n                        lastChunk.Position = Text.Span.Combine(lastChunk.Position, expr.Span);\r\n                    }\r\n                    else//if (!evaluation.HasValue)\r\n                    {\r\n                        lastChunk.Expressions.Add(evaluation.Expression);\r\n                        lastChunk.Position = Text.Span.Combine(lastChunk.Position, expr.Span);\r\n                    }\r\n                }\r\n\r\n                // there must be at least one expression\r\n                if (chunks.Count == 0)\r\n                {\r\n                    var position = Text.Span.Invalid;\r\n                    if (expressions.Count > 0) position = expressions[0].Span;\r\n\r\n                    chunks.Add(new ConcatChunk(position, string.Empty));\r\n                }\r\n\r\n                //\r\n                return chunks;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Expressions from ConcatChunks, Values are transformed into corresponding literals.\r\n            /// </summary>\r\n            private static IEnumerable<Expression> ChunkExpressions(IEnumerable<ConcatChunk>/*!*/concatChunks)\r\n            {\r\n                Debug.Assert(concatChunks != null);\r\n                foreach (var chunk in concatChunks)\r\n                {\r\n                    if (chunk.HasValue)\r\n                    {\r\n                        yield return LiteralUtils.Create(chunk.Position, chunk.Value, AccessType.Read);\r\n                    }\r\n                    else\r\n                    {\r\n                        foreach (var expr in chunk.Expressions)\r\n                            yield return expr;\r\n                    }\r\n                }\r\n            }\r\n\r\n            public override Evaluation Analyze(ConcatEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                Debug.Assert(node.Expressions.Length > 0);\r\n                access = info.Access;\r\n\r\n                var concatChunks = AnalyzeChunks(analyzer, node.Expressions);\r\n                node.Expressions = ChunkExpressions(concatChunks).ToArray();   // replace expressions with optimized one\r\n\r\n                if (concatChunks.Count == 1 && concatChunks[0].HasValue)\r\n                    return new Evaluation(node, concatChunks[0].Value); // can be resolved during compilation time\r\n                else\r\n                    return new Evaluation(node);\r\n            }\r\n\r\n            public override object Evaluate(ConcatEx node, object leftValue, object rightValue)\r\n            {\r\n                return Operators.Concat(leftValue, rightValue);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Piece of analyzed ConcatEx expressions list.\r\n            /// </summary>\r\n            private class ConcatChunk\r\n            {\r\n                public ConcatChunk(Text.Span position, Evaluation evaluation)\r\n                {\r\n                    if ((this.HasValue = evaluation.HasValue) == true)\r\n                        this.Value = evaluation.Value;\r\n                    else\r\n                        this.Expressions = new List<Expression>() { evaluation.Expression };\r\n\r\n                    this.Position = position;\r\n                }\r\n\r\n                public ConcatChunk(Text.Span position, object value)\r\n                {\r\n                    this.HasValue = true;\r\n                    this.Value = value;\r\n                    this.Position = position;\r\n                }\r\n\r\n                public bool HasValue;\r\n\r\n                /// <summary>\r\n                /// If HasValue is true, the Value of the chunk.\r\n                /// </summary>\r\n                public object Value;\r\n\r\n                /// <summary>\r\n                /// Position of the <see cref=\"Value\"/> within the source code.\r\n                /// </summary>\r\n                public Text.Span Position;\r\n\r\n                /// <summary>\r\n                /// If HasValue is false, list of expression to be emitted.\r\n                /// </summary>\r\n                public List<Expression> Expressions;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override bool IsDeeplyCopied(ConcatEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ConcatEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"Class.Concat.\" + node.Expressions.Length);\r\n\r\n                PhpTypeCode result;\r\n\r\n                //\r\n                // For low numbers call specialized methods\r\n                var/*!*/expressions = node.Expressions;\r\n                switch (expressions.Length)\r\n                {\r\n                    case 1:\r\n                        result = expressions[0].Emit(codeGenerator);\r\n\r\n                        if (result != PhpTypeCode.PhpBytes && result != PhpTypeCode.String)\r\n                        {\r\n                            var lbl = codeGenerator.IL.DefineLabel();\r\n                            codeGenerator.EmitBoxing(result);\r\n                            codeGenerator.IL.Emit(OpCodes.Dup);\r\n                            codeGenerator.IL.Emit(OpCodes.Isinst, typeof(PhpBytes));\r\n\r\n                            // IF (STACK)\r\n                            codeGenerator.IL.Emit(OpCodes.Brtrue_S, lbl);\r\n                            if (true)\r\n                            {\r\n                                codeGenerator.IL.Emit(OpCodes.Call, Methods.Convert.ObjectToString);\r\n                            }\r\n\r\n                            // ELSE                        \r\n                            codeGenerator.IL.MarkLabel(lbl, true);\r\n\r\n                            //END IF\r\n\r\n                            result = PhpTypeCode.Object;\r\n                        }\r\n                        break;\r\n\r\n                    case 2:\r\n                        result = EmitConcat(codeGenerator, expressions[0], expressions[1]);\r\n                        break;\r\n\r\n                    default:\r\n\r\n                        codeGenerator.EmitObjectArrayPopulation(expressions);\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.ObjectArray);\r\n\r\n                        result = PhpTypeCode.Object;    // string, PhpBytes\r\n                        break;\r\n                }\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                        // do nothing\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n                        // pop result from stack\r\n                        codeGenerator.IL.Emit(OpCodes.Pop);\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits concatenation of a pair of expressions.\r\n            /// </summary>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"x\">The first expression.</param>\r\n            /// <param name=\"y\">The second expression.</param>\r\n            /// <returns>The resulting type code.</returns>\r\n            internal static PhpTypeCode EmitConcat(CodeGenerator/*!*/ codeGenerator, Expression/*!*/ x, Expression/*!*/ y)\r\n            {\r\n                PhpTypeCode type_code_x = EmitConcatExpressionLoad(codeGenerator, x);\r\n                PhpTypeCode type_code_y = EmitConcatExpressionLoad(codeGenerator, y);\r\n\r\n                if (type_code_x == PhpTypeCode.String)\r\n                {\r\n                    if (type_code_y == PhpTypeCode.String)\r\n                    {\r\n                        // string.string:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.String_Concat_String_String);\r\n\r\n                        return PhpTypeCode.String;\r\n                    }\r\n                    else if (type_code_y == PhpTypeCode.PhpBytes)\r\n                    {\r\n                        // check the return type:\r\n                        Debug.Assert(Methods.PhpBytes.Concat_Object_PhpBytes.ReturnType == typeof(PhpBytes));\r\n\r\n                        // string.PhpBytes:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_Object_PhpBytes);\r\n\r\n                        return PhpTypeCode.PhpBytes;\r\n                    }\r\n                    else\r\n                    {\r\n                        // string.object:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.String_Object);\r\n\r\n                        return PhpTypeCode.Object;\r\n                    }\r\n                }\r\n                else if (type_code_x == PhpTypeCode.PhpBytes)\r\n                {\r\n                    if (type_code_y == PhpTypeCode.PhpBytes)\r\n                    {\r\n                        // check the return type:\r\n                        Debug.Assert(Methods.PhpBytes.Concat_PhpBytes_PhpBytes.ReturnType == typeof(PHP.Core.PhpBytes));\r\n\r\n                        // PhpBytes.PhpBytes\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_PhpBytes_PhpBytes);\r\n                    }\r\n                    else\r\n                    {\r\n                        // check the return type:\r\n                        Debug.Assert(Methods.PhpBytes.Concat_PhpBytes_Object.ReturnType == typeof(PHP.Core.PhpBytes));\r\n\r\n                        // PhpBytes.object:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_PhpBytes_Object);\r\n                    }\r\n\r\n                    return PhpTypeCode.PhpBytes;\r\n                }\r\n                else\r\n                {\r\n                    if (type_code_y == PhpTypeCode.String)\r\n                    {\r\n                        // check the return type:\r\n                        //Debug.Assert(Methods.Operators.Concat.Object_String.ReturnType == typeof(object));\r\n\r\n                        // object.string:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.Object_String);\r\n                        return PhpTypeCode.Object;\r\n                    }\r\n                    else if (type_code_y == PhpTypeCode.PhpBytes)\r\n                    {\r\n                        // check the return type:\r\n                        Debug.Assert(Methods.PhpBytes.Concat_Object_PhpBytes.ReturnType == typeof(PhpBytes));\r\n\r\n                        // object.PhpBytes:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpBytes.Concat_Object_PhpBytes);\r\n                        return PhpTypeCode.PhpBytes;\r\n                    }\r\n                    else\r\n                    {   // object.object:\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.Object_Object);\r\n                        return PhpTypeCode.Object;\r\n                    }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits load of an argument of a concatenation.\r\n            /// </summary>\r\n            private static PhpTypeCode EmitConcatExpressionLoad(CodeGenerator/*!*/ codeGenerator, Expression/*!*/ expression)\r\n            {\r\n                // tries to evaluate the expression:\r\n                if (expression.HasValue())\r\n                {\r\n                    var value = expression.GetValue();\r\n                    if (value is PhpBytes)\r\n                    {\r\n                        codeGenerator.IL.LoadLiteral(value);\r\n                        return PhpTypeCode.PhpBytes;\r\n                    }\r\n                    else\r\n                    {\r\n                        // evaluated expression is converted to a string if necessary:\r\n                        codeGenerator.IL.Emit(OpCodes.Ldstr, Convert.ObjectToString(value));\r\n                        return PhpTypeCode.String;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // emits non-evaluable expression:\r\n                    PhpTypeCode result = expression.Emit(codeGenerator);\r\n\r\n                    // the result should be converted to string: (so we know the type for the further analysis)\r\n                    if (result != PhpTypeCode.String && // string already\r\n                        result != PhpTypeCode.Object && // object can contain PhpBytes, should be converted just when we know we need string\r\n                        result != PhpTypeCode.PhpBytes  // keep PhpBytes\r\n                        )\r\n                    {\r\n                        codeGenerator.EmitBoxing(result);   // in case of value-type\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Convert.ObjectToString);\r\n                        result = PhpTypeCode.String;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/ConstantUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region ConstantUse\r\n\r\n        abstract class ConstantUseCompiler<T> : ExpressionCompiler<T> where T : ConstantUse\r\n        {\r\n            protected DConstant constant;\r\n\r\n            internal abstract void ResolveName(T/*!*/node, Analyzer/*!*/ analyzer);\r\n\r\n            /// <summary>\r\n            /// Determines behavior on assignment.\r\n            /// </summary>\r\n            /// <returns>Always <B>false</B>, since constants contain immutable objects only.</returns>\r\n            public override bool IsDeeplyCopied(T node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                bool already_resolved = constant != null;\r\n\r\n                if (!already_resolved)\r\n                {\r\n                    access = info.Access;\r\n                    ResolveName(node, analyzer);\r\n                }\r\n\r\n                if (constant.IsUnknown)\r\n                    return new Evaluation(node);\r\n\r\n                KnownConstant known_const = (KnownConstant)constant;\r\n\r\n                if (known_const.HasValue)\r\n                {\r\n                    // constant value is known:\r\n                    return new Evaluation(node, known_const.Value);\r\n                }\r\n                else if (already_resolved)\r\n                {\r\n                    // circular definition:\r\n                    constant.ReportCircularDefinition(analyzer.ErrorSink);\r\n                    return new Evaluation(node);\r\n                }\r\n                else\r\n                {\r\n                    // value is not known yet, try to resolve it:\r\n                    if (known_const.Node != null)\r\n                        known_const.Node.Analyze(analyzer);\r\n                    \r\n                    return (known_const.HasValue) ? new Evaluation(node, known_const.Value) : new Evaluation(node);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GlobalConstUse\r\n\r\n        [NodeCompiler(typeof(GlobalConstUse))]\r\n        sealed class GlobalConstUseCompiler : ConstantUseCompiler<GlobalConstUse>\r\n        {\r\n            public override Evaluation EvaluatePriorAnalysis(GlobalConstUse node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                constant = sourceUnit.TryResolveGlobalConstantGlobally(node.Name);\r\n                return (constant != null && constant.HasValue) ? new Evaluation(node, constant.Value) : new Evaluation(node);\r\n            }\r\n\r\n            internal override void ResolveName(GlobalConstUse/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                if (constant == null)\r\n                    constant = analyzer.ResolveGlobalConstantName(node.Name, node.Span);\r\n            }\r\n\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Emit\"]/*'/>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <remarks>\r\n            /// Emits IL instructions to load the value of the constant. If the value is known at compile \r\n            /// time (constant is system), its value is loaded on the stack. Otherwise the value is \r\n            /// obtained at runtime by calling <see cref=\"PHP.Core.ScriptContext.GetConstantValue\"/>.\r\n            /// </remarks>\r\n            public override PhpTypeCode Emit(GlobalConstUse node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"ConstantUse.Global\");\r\n\r\n                // loads constant only if its value is read:\r\n                if (access == AccessType.Read)\r\n                {\r\n                    return constant.EmitGet(codeGenerator, null, false, node.FallbackName.HasValue ? node.FallbackName.Value.ToString() : null);\r\n                }\r\n                else\r\n                {\r\n                    // to satisfy debugger; sequence point has already been defined:\r\n                    if (codeGenerator.Context.Config.Compiler.Debug)\r\n                        codeGenerator.IL.Emit(OpCodes.Nop);\r\n                }\r\n\r\n                return PhpTypeCode.Void;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ClassConstUse\r\n\r\n        /// <summary>\r\n        /// Class constant use.\r\n        /// </summary>\r\n        [NodeCompiler(typeof(ClassConstUse))]\r\n        class ClassConstUseCompiler<T> : ConstantUseCompiler<T> where T : ClassConstUse\r\n        {\r\n            protected DType/*!A*/type;\r\n\r\n            bool runtimeVisibilityCheck;\r\n\r\n            public override Evaluation EvaluatePriorAnalysis(T node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                var className = node.ClassName;\r\n                if (!string.IsNullOrEmpty(className.QualifiedName.Name.Value))\r\n                    constant = sourceUnit.TryResolveClassConstantGlobally(className, node.Name);\r\n\r\n                return (constant != null && constant.HasValue) ? new Evaluation(node, constant.Value) : new Evaluation(node);\r\n            }\r\n\r\n            internal override void ResolveName(T node, Analyzer analyzer)\r\n            {\r\n                var typeRef = node.TypeRef;\r\n\r\n                TypeRefHelper.Analyze(typeRef, analyzer);\r\n                this.type = TypeRefHelper.ResolvedTypeOrUnknown(typeRef);\r\n\r\n                // analyze constructed type (we are in the full analysis):\r\n                analyzer.AnalyzeConstructedType(type);\r\n\r\n                constant = analyzer.ResolveClassConstantName(type, node.Name, node.Span, analyzer.CurrentType, analyzer.CurrentRoutine,\r\n                      out runtimeVisibilityCheck);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(T node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.None || access == AccessType.Read);\r\n                Statistics.AST.AddNode(\"ConstantUse.Class\");\r\n\r\n                if (access == AccessType.Read)\r\n                {\r\n                    return constant.EmitGet(codeGenerator, type as ConstructedType, runtimeVisibilityCheck, null);\r\n                }\r\n                else\r\n                {\r\n                    // to satisfy debugger; sequence point has already been defined:\r\n                    if (codeGenerator.Context.Config.Compiler.Debug)\r\n                        codeGenerator.IL.Emit(OpCodes.Nop);\r\n                }\r\n\r\n                return PhpTypeCode.Void;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region  PseudoClassConstUseCompiler\r\n\r\n        [NodeCompiler(typeof(PseudoClassConstUse))]\r\n        sealed class PseudoClassConstUseCompiler : ClassConstUseCompiler<PseudoClassConstUse>\r\n        {\r\n            private string TryGetValue(PseudoClassConstUse/*!*/node)\r\n            {\r\n                switch (node.Type)\r\n                {\r\n                    case PseudoClassConstUse.Types.Class:\r\n                        var className = node.ClassName;\r\n                        if (string.IsNullOrEmpty(className.QualifiedName.Name.Value) ||\r\n                            className.QualifiedName.IsStaticClassName ||\r\n                            className.QualifiedName.IsSelfClassName)\r\n                            return null;\r\n\r\n                        return className.QualifiedName.ToString();\r\n\r\n                    default:\r\n                        throw new InvalidOperationException();\r\n                }\r\n            }\r\n            internal override void ResolveName(PseudoClassConstUse node, Analyzer analyzer)\r\n            {\r\n                if (this.type != null)\r\n                    return;\r\n\r\n                var typeRef = node.TypeRef;\r\n\r\n                typeRef.Analyze(analyzer);\r\n                this.type = typeRef.ResolvedTypeOrUnknown();\r\n\r\n                // analyze constructed type (we are in the full analysis):\r\n                analyzer.AnalyzeConstructedType(type);\r\n\r\n                //\r\n                this.constant = null;\r\n            }\r\n\r\n            public override Evaluation EvaluatePriorAnalysis(PseudoClassConstUse node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                var value = TryGetValue(node);\r\n                if (value != null)\r\n                    return new Evaluation(node, value);\r\n                else\r\n                    return base.EvaluatePriorAnalysis(node, sourceUnit);\r\n            }\r\n\r\n            public override Evaluation Analyze(PseudoClassConstUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.access;\r\n\r\n                var value = TryGetValue(node);\r\n                if (value != null)\r\n                    return new Evaluation(node, value);\r\n\r\n                //\r\n                this.ResolveName(node, analyzer);\r\n\r\n                //\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(PseudoClassConstUse node, CodeGenerator codeGenerator)\r\n            {\r\n                switch (node.Type)\r\n                {\r\n                    case PseudoClassConstUse.Types.Class:\r\n                        this.type.EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.UseAutoload);\r\n                        codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.GetFullyQualifiedName);\r\n                        return PhpTypeCode.String;\r\n\r\n                    default:\r\n                        throw new InvalidOperationException();\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PseudoConstUse\r\n\r\n        [NodeCompiler(typeof(PseudoConstUse))]\r\n        sealed class PseudoConstUseCompiler : ExpressionCompiler<PseudoConstUse>\r\n        {\r\n            #region Analysis\r\n\r\n            /// <summary>\r\n            /// Get the value indicating if the given constant is evaluable in compile time.\r\n            /// </summary>\r\n            /// <param name=\"type\"></param>\r\n            /// <returns></returns>\r\n            private bool IsEvaluable(PseudoConstUse.Types type)\r\n            {\r\n                switch (type)\r\n                {\r\n                    case PseudoConstUse.Types.File:\r\n                    case PseudoConstUse.Types.Dir:\r\n                        return false;\r\n                    default:\r\n                        return true;\r\n                }\r\n            }\r\n\r\n            public override Evaluation Analyze(PseudoConstUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.access;\r\n\r\n                if (IsEvaluable(node.Type))\r\n                    return new Evaluation(node, Evaluate(node, analyzer));\r\n                else\r\n                    return new Evaluation(node);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets value of __LINE__, __FUNCTION__, __METHOD__, __CLASS__, __NAMESPACE__ used in source code.\r\n            /// Doesn't get value for __FILE__ and __DIR__. This value is combined from relative path and the current source root\r\n            /// at run-time.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// Analyzer maintains during AST walk information about its position in AST\r\n            /// and that information uses (among others) to provide values of the pseudo constants.\r\n            /// </remarks>\r\n            private object Evaluate(PseudoConstUse node, Analyzer/*!*/ analyzer)\r\n            {\r\n                switch (node.Type)\r\n                {\r\n                    case PseudoConstUse.Types.Line:\r\n                        return (int)new Text.TextPoint(analyzer.SourceUnit, node.Span.Start).Line; // __LINE__ is of type Integer in PHP\r\n\r\n                    case PseudoConstUse.Types.Class:\r\n                        if (analyzer.CurrentType != null)\r\n                            return analyzer.CurrentType.FullName;\r\n\r\n                        return string.Empty;\r\n\r\n                    case PseudoConstUse.Types.Trait:\r\n                        if (analyzer.CurrentType != null && analyzer.CurrentType.TypeDesc.IsTrait)\r\n                            return analyzer.CurrentType.FullName;\r\n\r\n                        return string.Empty;\r\n\r\n                    case PseudoConstUse.Types.Function:\r\n                        if (analyzer.CurrentRoutine != null)\r\n                            return analyzer.CurrentRoutine.FullName;\r\n\r\n                        return string.Empty;\r\n\r\n                    case PseudoConstUse.Types.Method:\r\n                        if (analyzer.CurrentRoutine != null)\r\n                        {\r\n                            if (analyzer.CurrentRoutine.IsMethod)\r\n                            {\r\n                                return ((KnownType)analyzer.CurrentRoutine.DeclaringType).QualifiedName.ToString(\r\n                                  ((PhpMethod)analyzer.CurrentRoutine).Name, false);\r\n                            }\r\n                            else\r\n                                return analyzer.CurrentRoutine.FullName;\r\n                        }\r\n                        return string.Empty;\r\n\r\n                    case PseudoConstUse.Types.Namespace:\r\n                        return analyzer.CurrentNamespace.HasValue ? analyzer.CurrentNamespace.Value.NamespacePhpName : string.Empty;\r\n\r\n                    case PseudoConstUse.Types.File:\r\n                    case PseudoConstUse.Types.Dir:\r\n                        Debug.Fail(\"Evaluated at run-time.\");\r\n                        return null;\r\n\r\n                    default:\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Emit\r\n            /// CALL Operators.ToAbsoluteSourcePath(relative source path level, remaining relative source path);\r\n            /// </summary>\r\n            /// <param name=\"codeGenerator\">Code generator.</param>\r\n            /// <returns>Type code of value that is on the top of the evaluation stack as the result of call of emitted code.</returns>\r\n            private PhpTypeCode EmitToAbsoluteSourcePath(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // CALL Operators.ToAbsoluteSourcePath(<relative source path level>, <remaining relative source path>);\r\n                RelativePath relative_path = codeGenerator.SourceUnit.SourceFile.RelativePath;\r\n                il.LdcI4(relative_path.Level);\r\n                il.Emit(OpCodes.Ldstr, relative_path.Path);\r\n                il.Emit(OpCodes.Call, Methods.Operators.ToAbsoluteSourcePath);\r\n\r\n                //\r\n                return PhpTypeCode.String;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(PseudoConstUse node, CodeGenerator codeGenerator)\r\n            {\r\n                switch (node.Type)\r\n                {\r\n                    case PseudoConstUse.Types.File:\r\n                        EmitToAbsoluteSourcePath(codeGenerator);\r\n                        break;\r\n\r\n                    case PseudoConstUse.Types.Dir:\r\n                        ILEmitter il = codeGenerator.IL;\r\n                        // CALL Path.GetDirectory( Operators.ToAbsoluteSourcePath(...) )\r\n                        EmitToAbsoluteSourcePath(codeGenerator);\r\n                        il.Emit(OpCodes.Call, Methods.Path.GetDirectoryName);\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"Pseudo constant \" + node.Type.ToString() + \" expected to be already evaluated.\");\r\n                        throw null;\r\n                }\r\n\r\n                return PhpTypeCode.String;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/CustomAttributes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE.\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Linq;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    internal interface IPhpCustomAttributeProvider\r\n    {\r\n        PhpAttributeTargets AttributeTarget { get; }\r\n        AttributeTargets AcceptsTargets { get; }\r\n        int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector);\r\n        void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector);\r\n        void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector);\r\n    }\r\n\r\n    #region SpecialCustomAttribute\r\n\r\n    internal static class SpecialCustomAttribute\r\n    {\r\n        // Is it correct to create ClrType here as the mscorlib reflection only creates type-desc via the cache.\r\n        // the ClrType is created lazily and only if not yet created (which won't be the case).\r\n\r\n        public static readonly DType/*!*/ AppStaticAttribute =\r\n            new ClrType(DTypeDesc.Create(typeof(AppStaticAttribute)), new QualifiedName(Name.AppStaticName));\r\n\r\n        public static readonly DType/*!*/ ExportAttribute =\r\n            new ClrType(DTypeDesc.Create(typeof(ExportAttribute)), new QualifiedName(Name.ExportName));\r\n\r\n        public static readonly DType/*!*/ DllImportAttribute =\r\n            new ClrType(DTypeDesc.Create(typeof(System.Runtime.InteropServices.DllImportAttribute)), new QualifiedName(Name.DllImportName));\r\n                \r\n        public static readonly DType/*!*/ OutAttribute =\r\n            new ClrType(DTypeDesc.Create(typeof(System.Runtime.InteropServices.OutAttribute)), new QualifiedName(Name.OutName));\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ICustomAttributesCompiler\r\n\r\n    internal interface ICustomAttributesCompiler : INodeCompiler\r\n    {\r\n        void AnalyzeMembers(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope);        \r\n        void Analyze(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target);        \r\n        int Count(CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector);\r\n        void Emit(CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target);\r\n    }\r\n\r\n    internal static class CustomAttributesCompilerHelper\r\n    {\r\n        private static ICustomAttributesCompiler/*!*/Compiler(this CustomAttributes/*!*/node) { return node.NodeCompiler<ICustomAttributesCompiler>(); }\r\n\r\n        public static void AnalyzeMembers(this CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n        {\r\n            node.Compiler().AnalyzeMembers(node, analyzer, referringScope);\r\n        }\r\n        public static void Analyze(this CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target)\r\n        {\r\n            node.Compiler().Analyze(node, analyzer, target);\r\n        }\r\n        public static int Count(this CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector)\r\n        {\r\n            return node.Compiler().Count(node, attributeType, selector);\r\n        }\r\n        public static void Emit(this CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target)\r\n        {\r\n            node.Compiler().Emit(node, codeGenerator, target);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ICustomAttributeCompiler\r\n\r\n    internal interface ICustomAttributeCompiler : INodeCompiler\r\n    {\r\n        DType/*!MA*/ ResolvedType { get; }\r\n        void AnalyzeMembers(Analyzer/*!*/ analyzer, Scope referringScope);\r\n        void Analyze(Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound);\r\n        void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target);\r\n        void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force);\r\n    }\r\n\r\n    internal static class CustomAttributeCompilerHelper\r\n    {\r\n        private static ICustomAttributeCompiler/*!*/Compiler(this CustomAttribute/*!*/node) { return node.NodeCompiler<ICustomAttributeCompiler>(); }\r\n\r\n        public static DType GetResolvedType(this CustomAttribute/*!*/node)\r\n        {\r\n            return node.Compiler().ResolvedType;\r\n        }\r\n\r\n        public static void AnalyzeMembers(this CustomAttribute/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n        {\r\n            node.Compiler().AnalyzeMembers(analyzer, referringScope);\r\n        }\r\n        public static void Analyze(this CustomAttribute/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound)\r\n        {\r\n            node.Compiler().Analyze(analyzer, target, ref duplicateFound);\r\n        }\r\n        public static void Emit(this CustomAttribute/*!*/node, CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target)\r\n        {\r\n            node.Compiler().Emit(codeGen, target);\r\n        }\r\n        public static void Emit(this CustomAttribute/*!*/node, CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force)\r\n        {\r\n            node.Compiler().Emit(codeGen, target, force);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    partial class NodeCompilers\r\n    {\r\n        #region CustomAttributes\r\n\r\n        [NodeCompiler(typeof(CustomAttributes), Singleton = true)]\r\n        sealed class CustomAttributesCompiler : ICustomAttributesCompiler\r\n        {\r\n            public void AnalyzeMembers(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n            {\r\n                if (node.Attributes == null) return;\r\n\r\n                foreach (CustomAttribute attribute in node.Attributes)\r\n                    attribute.AnalyzeMembers(analyzer, referringScope);\r\n            }\r\n\r\n            public void Analyze(CustomAttributes/*!*/node, Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target)\r\n            {\r\n                if (node.Attributes == null) return;\r\n\r\n                bool duplicate_found = false;\r\n\r\n                foreach (CustomAttribute attribute in node.Attributes)\r\n                    attribute.Analyze(analyzer, target, ref duplicate_found);\r\n            }\r\n\r\n            public int Count(CustomAttributes/*!*/node, DType/*!*/ attributeType, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                if (node.Attributes == null) return 0;\r\n\r\n                int count = 0;\r\n\r\n                foreach (CustomAttribute attribute in node.Attributes)\r\n                {\r\n                    if (attribute.TargetSelector == selector && attribute.GetResolvedType().Equals(attributeType))\r\n                        count++;\r\n                }\r\n\r\n                return count;\r\n            }\r\n\r\n            public void Emit(CustomAttributes/*!*/node, CodeGenerator/*!*/ codeGenerator, IPhpCustomAttributeProvider/*!*/ target)\r\n            {\r\n                if (node.Attributes == null) return;\r\n\r\n                foreach (CustomAttribute attribute in node.Attributes)\r\n                    attribute.Emit(codeGenerator, target);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region CustomAttribute\r\n\r\n        [NodeCompiler(typeof(CustomAttribute))]\r\n        sealed class CustomAttributeCompiler : ICustomAttributeCompiler, IPostAnalyzable\r\n        {\r\n            private readonly CustomAttribute/*!*/node;\r\n\r\n            public DType/*!MA*/ ResolvedType { get { return type; } }\r\n            private DType/*!MA*/ type;\r\n\r\n            private RoutineSignature/*!A*/ overload;\r\n            private IPhpCustomAttributeProvider/*!MA*/ target;\r\n            private bool isEmitted;\r\n\r\n            public CustomAttributeCompiler(CustomAttribute/*!*/node)\r\n            {\r\n                this.node = node;\r\n            }\r\n\r\n            #region Analysis\r\n\r\n            /// <summary>\r\n            /// Analyzes the attribute type. Parameters are left to the full analysis as we want to resolve global and class \r\n            /// constants used there. Resolving attribute type during member analysis enables to them to influence the \r\n            /// member and full analysis of their respective targets.\r\n            /// </summary>\r\n            public void AnalyzeMembers(Analyzer/*!*/ analyzer, Scope referringScope)\r\n            {\r\n                // resolve attribute type:\r\n                type = analyzer.ResolveCustomAttributeType(node.QualifiedName, referringScope, node.Span);\r\n\r\n                // let the Assembly Builder know that this attribute is defined on it;\r\n                // we need the Builder to be able to count the defined attributes in analysis:\r\n                if (node.TargetSelector == CustomAttribute.TargetSelectors.Assembly || node.TargetSelector == CustomAttribute.TargetSelectors.Module)\r\n                {\r\n                    analyzer.SourceUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.CustomAttributeDefined(analyzer.ErrorSink, node);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Analyses attribute parameters, resolves the constructor, the fields, and the properties \r\n            /// assigned in the parameters.\r\n            /// </summary>\r\n            public void Analyze(Analyzer/*!*/ analyzer, IPhpCustomAttributeProvider/*!*/ target, ref bool duplicateFound)\r\n            {\r\n                Debug.Assert(type != null);\r\n\r\n                this.target = target;\r\n\r\n                // check selector:\r\n                if (((int)target.AcceptsTargets & (int)node.TargetSelector) == 0)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.InvalidAttributeTargetSelector, analyzer.SourceUnit, node.Span,\r\n                        node.TargetSelector.ToString().ToLower(System.Globalization.CultureInfo.InvariantCulture));\r\n                }\r\n\r\n                // resolve constructor for the regular attributes:\r\n                if (!ResolveConstructor(analyzer))\r\n                    return;\r\n\r\n                // evaluate actual arguments:\r\n                bool all_evaluable;\r\n                AnalyzeActualArguments(analyzer, out all_evaluable);\r\n\r\n                // check usage:\r\n                if (!CheckAttributeUsage(analyzer, ref duplicateFound))\r\n                    return;\r\n\r\n                if (!all_evaluable)\r\n                    return;\r\n\r\n                // process special and pseudo-attributes:\r\n                ApplySpecialAttributes(analyzer);\r\n            }\r\n\r\n            private void ApplySpecialAttributes(Analyzer/*!*/ analyzer)\r\n            {\r\n                if (type.Equals(SpecialCustomAttribute.AppStaticAttribute))\r\n                {\r\n                    Debug.Assert(node.CallSignature.Parameters.Empty(), \"Should be checked by ResolveOverload\");\r\n                    ApplySpecialAttribute(analyzer, SpecialAttributes.AppStatic, null);\r\n                    isEmitted = false;\r\n                }\r\n                else if (type.Equals(SpecialCustomAttribute.ExportAttribute))\r\n                {\r\n                    Debug.Assert(node.CallSignature.Parameters.Empty(), \"Should be checked by ResolveOverload\");\r\n\r\n                    if (!analyzer.SourceUnit.CompilationUnit.IsPure)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.ExportAttributeInNonPureUnit, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                    else\r\n                    {\r\n                        ApplySpecialAttribute(analyzer, SpecialAttributes.Export, Core.ExportAttribute.Default);\r\n                    }\r\n\r\n                    isEmitted = false;\r\n                }\r\n                else if (type.Equals(SpecialCustomAttribute.OutAttribute))\r\n                {\r\n                    Debug.Assert(node.CallSignature.Parameters.Empty(), \"Should be checked by ResolveOverload\");\r\n                    ApplySpecialAttribute(analyzer, SpecialAttributes.Out, new System.Runtime.InteropServices.OutAttribute());\r\n                    isEmitted = true;\r\n                }\r\n                else if (type.Equals(SpecialCustomAttribute.DllImportAttribute))\r\n                {\r\n                    isEmitted = false;\r\n                }\r\n                else if (ReferenceEquals(type.TypeDesc, DTypeDesc.AttributeUsageAttributeTypeDesc))\r\n                {\r\n                    // set usage of the attribute defined by this attribute's target //\r\n\r\n                    Debug.Assert(node.CallSignature.Parameters.Empty(), \"Missing arguments should be checked by ResolveOverload\");\r\n\r\n                    int valid_on = Convert.ObjectToInteger(node.CallSignature.Parameters[0].Expression.GetValue());\r\n\r\n                    AttributeUsageAttribute usage = new AttributeUsageAttribute((AttributeTargets)valid_on);\r\n\r\n                    foreach (NamedActualParam param in node.NamedParameters)\r\n                    {\r\n                        if (param.Name.Equals(\"AllowMultiple\"))\r\n                        {\r\n                            usage.AllowMultiple = Convert.ObjectToBoolean(param.Expression.GetValue());\r\n                        }\r\n                        else if (param.Name.Equals(\"Inherited\"))\r\n                        {\r\n                            usage.Inherited = Convert.ObjectToBoolean(param.Expression.GetValue());\r\n                        }\r\n                    }\r\n\r\n                    ApplySpecialAttribute(analyzer, SpecialAttributes.AttributeUsage, usage);\r\n                    isEmitted = true;\r\n                }\r\n                else\r\n                {\r\n                    isEmitted = true;\r\n                }\r\n            }\r\n\r\n            private void ApplySpecialAttribute(Analyzer/*!*/ analyzer, SpecialAttributes kind, Attribute attribute)\r\n            {\r\n                switch (node.TargetSelector)\r\n                {\r\n                    case CustomAttribute.TargetSelectors.Assembly:\r\n                    case CustomAttribute.TargetSelectors.Module:\r\n                        analyzer.SourceUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.ApplyCustomAttribute(kind, attribute, node.TargetSelector);\r\n                        break;\r\n\r\n                    default:\r\n                        target.ApplyCustomAttribute(kind, attribute, node.TargetSelector);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            private bool ResolveConstructor(Analyzer/*!*/ analyzer)\r\n            {\r\n                if (!type.IsDefinite)\r\n                {\r\n                    // attribute type has to be known definitely:\r\n                    analyzer.ErrorSink.Add(Errors.UnknownCustomAttribute, analyzer.SourceUnit, node.Span,\r\n                      type.FullName, type.FullName + \"Attribute\");\r\n\r\n                    return false;\r\n                }\r\n\r\n                if (!type.IsCustomAttributeType)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.NotCustomAttributeClass, analyzer.SourceUnit, node.Span, type.FullName);\r\n                    return false;\r\n                }\r\n\r\n                // resolve ctor overload in global context (only public ctors are visible):\r\n                bool check_visibility;\r\n                DRoutine constructor = analyzer.ResolveConstructor(type, node.Span, null, null, out check_visibility);\r\n                Debug.Assert(!check_visibility);\r\n\r\n                if (constructor.ResolveOverload(analyzer, node.CallSignature, node.Span, out overload) == DRoutine.InvalidOverloadIndex)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.ClassHasNoVisibleCtor, analyzer.SourceUnit, node.Span, type.FullName);\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            private void AnalyzeActualArguments(Analyzer/*!*/ analyzer, out bool allEvaluable)\r\n            {\r\n                node.CallSignature.Analyze(analyzer, overload, ExInfoFromParent.DefaultExInfo, false);\r\n\r\n                allEvaluable = true;\r\n\r\n                // parameters:\r\n                foreach (ActualParam param in node.CallSignature.Parameters)\r\n                {\r\n                    if (!param.Expression.IsCustomAttributeArgumentValue())\r\n                    {\r\n                        // expression has to be evaluable:\r\n                        analyzer.ErrorSink.Add(Errors.InvalidAttributeExpression, analyzer.SourceUnit, param.Span);\r\n                        allEvaluable = false;\r\n                    }\r\n                }\r\n\r\n                // named parameters:\r\n                foreach (NamedActualParam param in node.NamedParameters)\r\n                {\r\n                    param.Analyze(analyzer, type);\r\n\r\n                    if (!param.Expression.IsCustomAttributeArgumentValue())\r\n                    {\r\n                        // expression has to be evaluable:\r\n                        analyzer.ErrorSink.Add(Errors.InvalidAttributeExpression, analyzer.SourceUnit, param.Span);\r\n                        allEvaluable = false;\r\n                    }\r\n                }\r\n            }\r\n\r\n            private bool CheckAttributeUsage(Analyzer/*!*/ analyzer, ref bool duplicateFound)\r\n            {\r\n                // check usage target of this attribute:\r\n                bool is_usage_definite;\r\n                AttributeUsageAttribute specific_usage = type.GetCustomAttributeUsage(out is_usage_definite);\r\n                if (is_usage_definite)\r\n                {\r\n                    if (!CheckAttributeUsage(analyzer, specific_usage, ref duplicateFound)) return false;\r\n                }\r\n                else\r\n                {\r\n                    // usage constraints cannot be determined now; ckeck the usage later during post-analysis:\r\n                    analyzer.PostAnalyzed.Add(this);\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            private bool CheckAttributeUsage(Analyzer/*!*/ analyzer, AttributeUsageAttribute usage, ref bool duplicateFound)\r\n            {\r\n                if (usage != null && (target.AcceptsTargets & usage.ValidOn) == 0)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.InvalidAttributeUsage, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString());\r\n                    return false;\r\n                }\r\n\r\n                // check duplicate usage of this attribute:\r\n                if (!duplicateFound && (usage == null || !usage.AllowMultiple) && target.GetAttributeUsageCount(type, node.TargetSelector) > 1)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.DuplicateAttributeUsage, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString());\r\n                    duplicateFound = true;\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            void IPostAnalyzable.PostAnalyze(Analyzer/*!*/ analyzer)\r\n            {\r\n                // Note, usage needn't to be definite even now (it is not set unless the [AttributeUsage] is explicitly specified)\r\n                bool is_usage_definite;\r\n                bool duplicateFound = false; // TODO: duplicates should be tracked!!!\r\n                CheckAttributeUsage(analyzer, type.GetCustomAttributeUsage(out is_usage_definite), ref duplicateFound);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target)\r\n            {\r\n                Emit(codeGen, target, false);\r\n            }\r\n\r\n            public void Emit(CodeGenerator/*!*/ codeGen, IPhpCustomAttributeProvider/*!*/ target, bool force)\r\n            {\r\n                // skip attributes that are not emitted:\r\n                if (!isEmitted && !force) return;\r\n\r\n                ConstructorInfo real_ctor;\r\n\r\n                // TODO: type conversions (in analysis during overload resolution?)\r\n\r\n                var parameters = node.CallSignature.Parameters;\r\n                Type[] real_ctor_parameter_types = new Type[parameters.Length];\r\n\r\n                if (type is ClrType)\r\n                {\r\n                    real_ctor = (ConstructorInfo)((ClrMethod.Overload)overload).Method;\r\n                    var real_params = real_ctor.GetParameters();\r\n\r\n                    for (int i = 0; i < real_ctor_parameter_types.Length; i++)\r\n                        real_ctor_parameter_types[i] = real_params[i].ParameterType;\r\n                }\r\n                else\r\n                {\r\n                    Debug.Assert(type is PhpType);\r\n                    real_ctor = ((PhpType)type).ClrConstructorInfos[0];\r\n\r\n                    // Do not try to call GetParameters(), all parameters are of type object,\r\n                    // GetParameters() of not baked PhpType throws.\r\n                    for (int i = 0; i < real_ctor_parameter_types.Length; i++)\r\n                        real_ctor_parameter_types[i] = PHP.Core.Emit.Types.Object[0];\r\n                }\r\n\r\n                // ctor args:\r\n                object[] ctor_args = new object[parameters.Length];\r\n\r\n                for (int i = 0; i < parameters.Length; i++)\r\n                {\r\n                    Expression expr = parameters[i].Expression;\r\n\r\n                    TypeOfEx type_of = expr as TypeOfEx;\r\n                    if (type_of != null)\r\n                    {\r\n                        ctor_args[i] = type_of.ClassNameRef.ResolvedType().RealType;\r\n                    }\r\n                    else\r\n                    {\r\n                        ctor_args[i] = ConvertToClr.ObjectToType(expr.GetValue(), real_ctor_parameter_types[i]);\r\n                    }\r\n                }\r\n\r\n                List<FieldInfo> fields = new List<FieldInfo>();\r\n                List<PropertyInfo> properties = new List<PropertyInfo>();\r\n                List<object> field_values = new List<object>();\r\n                List<object> prop_values = new List<object>();\r\n\r\n                foreach (NamedActualParam param in node.NamedParameters)\r\n                {\r\n                    object value = param.Expression.GetValue();\r\n\r\n                    MemberInfo real_member = param.GetProperty().RealMember;\r\n                    FieldInfo real_field;\r\n                    PropertyInfo real_property;\r\n\r\n                    if ((real_property = real_member as PropertyInfo) != null ||    // regular CLR property\r\n                        (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)\r\n                    {\r\n                        properties.Add(real_property);\r\n                        prop_values.Add(ConvertToClr.ObjectToType(value, real_property.PropertyType));\r\n                    }\r\n                    else if ((real_field = real_member as FieldInfo) != null)\r\n                    {\r\n                        fields.Add(real_field);\r\n                        field_values.Add(ConvertToClr.ObjectToType(value, real_field.FieldType));\r\n                    }\r\n                    else\r\n                    {\r\n                        Debug.Fail(\"Cannot resolve attribute named parameter!\");\r\n                    }\r\n                }\r\n\r\n                CustomAttributeBuilder builder = new CustomAttributeBuilder(real_ctor, ctor_args,\r\n                    properties.ToArray(), prop_values.ToArray(), fields.ToArray(), field_values.ToArray());\r\n\r\n                switch (node.TargetSelector)\r\n                {\r\n                    case CustomAttribute.TargetSelectors.Assembly:\r\n                    case CustomAttribute.TargetSelectors.Module:\r\n                        codeGen.CompilationUnit.ModuleBuilder.AssemblyBuilder.EmitCustomAttribute(builder, node.TargetSelector);\r\n                        break;\r\n\r\n                    default:\r\n                        target.EmitCustomAttribute(builder, node.TargetSelector);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/DirectVariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(DirectVarUse))]\r\n        sealed class DirectVarUseCompiler : SimpleVarUseCompiler<DirectVarUse>\r\n        {\r\n            #region Analysis\r\n            \r\n            public override Evaluation Analyze(DirectVarUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                bool var_shall_be_ref;\r\n                access = info.Access;\r\n\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                var_shall_be_ref = !(access == AccessType.Read || access == AccessType.Write || access == AccessType.ReadAndWrite ||\r\n                    access == AccessType.None);\r\n\r\n                //If this VarUse is in GlobalCode, value of var_shall_be_ref does not matter.\r\n                //All global vars are refs.\r\n                \r\n                //$this has special meaning, but $a->this has NOT\r\n                if (node.VarName.IsThisVariableName && node.IsMemberOf == null)\r\n                {\r\n                    // report misuse of $this if we are sure about it, that is in a static routine:\r\n                    if (analyzer.CurrentRoutine != null && analyzer.CurrentRoutine.IsStatic)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Warnings.ThisOutOfMethod, analyzer.SourceUnit, node.Span);\r\n                    }\r\n\r\n                    if (!(info.Parent is VarLikeConstructUse) // $this->a = 1; is ok, but $this has write AT\r\n                        && !(access == AccessType.None\r\n                                    || access == AccessType.Read\r\n                                    || access == AccessType.ReadRef\r\n                                    || access == AccessType.ReadUnknown))\r\n                    {\r\n                        analyzer.ErrorSink.Add(Warnings.ThisInWriteContext, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                }\r\n\r\n                if (node.IsMemberOf == null)\r\n                {\r\n                    if (analyzer.CurrentVarTable == null)\r\n                    {\r\n                        Debug.Assert(analyzer.SourceUnit.CompilationUnit.IsPure);\r\n\r\n                        // variables used in global context when we do not have global variable table:\r\n                        analyzer.ErrorSink.Add(Errors.GlobalCodeInPureUnit, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                    else\r\n                        analyzer.CurrentVarTable.Set(node.VarName, var_shall_be_ref);\r\n                }\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Code emitting\r\n\r\n            public override PhpTypeCode Emit(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"VariableUse.Direct\");\r\n                PhpTypeCode result = PhpTypeCode.Invalid;\r\n\r\n                switch (codeGenerator.SelectAccess(access))\r\n                {\r\n                    // This case occurs everytime we want to get current variable value\r\n                    // All we do is push the value onto the IL stack\r\n                    case AccessType.Read: // Push value onto a IL stack\r\n                        result = EmitNodeRead(node, codeGenerator);\r\n                        break;\r\n\r\n                    // This case occurs when the varible is written ($a = $b, then $a has Write mark)\r\n                    // We only prepare the stack for storing, the work will be done later,\r\n                    // by EmitAssign()\r\n                    case AccessType.Write:\r\n                        result = EmitNodeWrite(node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n                        result = EmitNodeRead(node, codeGenerator);\r\n                        codeGenerator.IL.Emit(OpCodes.Pop);\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        // if the selector is set to the ReadRef, the chain is emitted as if it was written\r\n                        // (chained nodes are marked as ReadAndWrite):\r\n                        if (codeGenerator.AccessSelector == AccessType.ReadRef)\r\n                            codeGenerator.AccessSelector = AccessType.Write;\r\n\r\n                        result = EmitNodeReadRef(node, codeGenerator);\r\n                        Debug.Assert(result == PhpTypeCode.PhpReference);\r\n                        break;\r\n\r\n                    case AccessType.ReadUnknown:\r\n                        result = EmitNodeReadUnknown(node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        result = EmitNodeWriteRef(node, codeGenerator);\r\n                        break;\r\n                }\r\n                return result;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitAssign(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                PhpTypeCode result;\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.None:\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    case AccessType.Read:\r\n                        result = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    case AccessType.Write:\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWrite:\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.ReadAndWriteAndReadUnknown:\r\n                        result = EmitNodeWriteAssign(node, codeGenerator);\r\n                        Debug.Assert(result == PhpTypeCode.Void);\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        EmitNodeWriteRefAssign(node, codeGenerator);\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    default:\r\n                        result = PhpTypeCode.Invalid;\r\n                        Debug.Fail(null);\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitReadFieldOfThisInInstanceMethod(DirectVarUse node, CodeGenerator codeGenerator, bool wantRef)\r\n            {\r\n                PhpType type = codeGenerator.LocationStack.PeekMethodDecl().Type;\r\n                DProperty property;\r\n\r\n                if (type.GetProperty((node).VarName, type, out property) == GetMemberResult.OK && !property.IsStatic)\r\n                {\r\n                    // ask the DProperty to emit code that reads the field\r\n                    return property.EmitGet(codeGenerator, IndexedPlace.ThisArg, wantRef, null, false);\r\n                }\r\n                else\r\n                {\r\n                    return base.EmitReadFieldOfThisInInstanceMethod(node, codeGenerator, wantRef);\r\n                }\r\n            }\r\n\r\n            internal override AssignmentCallback EmitWriteFieldOfThisInInstanceMethod(DirectVarUse node, CodeGenerator/*!*/ codeGenerator, bool writeRef)\r\n            {\r\n                PhpType type = codeGenerator.LocationStack.PeekMethodDecl().Type;\r\n                DProperty property;\r\n\r\n                if (type.GetProperty(node.VarName, type, out property) == GetMemberResult.OK && !property.IsStatic)\r\n                {\r\n                    // ask the DProperty to emit code that writes the field\r\n                    return property.EmitSet(codeGenerator, IndexedPlace.ThisArg, writeRef, null, false);\r\n                }\r\n                else\r\n                {\r\n                    return base.EmitWriteFieldOfThisInInstanceMethod(node, codeGenerator, writeRef);\r\n                }\r\n            }\r\n\r\n            internal override void EmitUnset(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                //Template: \"unset(x)\"     x = null\r\n                Debug.Assert(access == AccessType.Read);\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                // 2, 7, 8 \r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n                    EmitUnsetField(node, codeGenerator);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return;\r\n                }\r\n\r\n                // 7: $a\r\n                // Check if the variable is auto-global\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.VariableIsAutoGlobal(node.VarName))\r\n                {\r\n                    codeGenerator.EmitAutoGlobalStorePrepare(node.VarName);\r\n                    il.Emit(OpCodes.Ldnull);\r\n                    codeGenerator.EmitAutoGlobalStoreAssign();\r\n                    return;\r\n                }\r\n\r\n                // Unset this variable\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template:\r\n                    //\t\tunset(x) x = null \r\n                    //\t\tunset(p) p.value = null <- this case isn't valid. When p is reference just create a new PhpReference\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[node.VarName];\r\n                    if (entry.IsPhpReference)\r\n                    {\r\n                        il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                        entry.Variable.EmitStore(il);\r\n                    }\r\n                    else\r\n                    {\r\n                        il.Emit(OpCodes.Ldnull);\r\n                        entry.Variable.EmitStore(il);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // CALL Operators.UnsetVariable(<script context>, <local variable table>, <variable name>);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.UnsetVariable);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that unset an instance field.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </remarks>\r\n            private void EmitUnsetField(DirectVarUse node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                DirectVarUse direct_instance = node.IsMemberOf as DirectVarUse;\r\n                if (direct_instance != null && direct_instance.VarName.IsThisVariableName)\r\n                {\r\n                    // $this->a\r\n                    switch (codeGenerator.LocationStack.LocationType)\r\n                    {\r\n                        case LocationTypes.GlobalCode:\r\n                            {\r\n                                // load $this from one of Main's arguments and check for null\r\n                                Label this_non_null = il.DefineLabel();\r\n\r\n                                codeGenerator.EmitLoadSelf();\r\n                                il.Emit(OpCodes.Brtrue_S, this_non_null);\r\n                                codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                                il.Emit(OpCodes.Br, codeGenerator.ChainBuilder.ErrorLabel);\r\n                                il.MarkLabel(this_non_null, true);\r\n\r\n                                // call UnsetProperty\r\n                                codeGenerator.EmitLoadSelf();\r\n                                il.Emit(OpCodes.Ldstr, node.VarName.ToString()); // TODO\r\n                                codeGenerator.EmitLoadClassContext();\r\n\r\n                                il.EmitCall(OpCodes.Call, Methods.Operators.UnsetProperty, null);\r\n                                return;\r\n                            }\r\n\r\n                        case LocationTypes.FunctionDecl:\r\n                            {\r\n                                // always throws error\r\n                                codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                                il.Emit(OpCodes.Br, codeGenerator.ChainBuilder.ErrorLabel);\r\n                                break;\r\n                            }\r\n\r\n                        case LocationTypes.MethodDecl:\r\n                            {\r\n                                CompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                                if (context.Method.IsStatic)\r\n                                {\r\n                                    // always throws error\r\n                                    codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                                    il.Emit(OpCodes.Br, codeGenerator.ChainBuilder.ErrorLabel);\r\n                                }\r\n                                else\r\n                                {\r\n                                    DProperty property;\r\n                                    if (context.Type.GetProperty(node.VarName, context.Type, out property) == GetMemberResult.OK &&\r\n                                        !property.IsStatic)\r\n                                    {\r\n                                        // ask the DProperty to emit its unsetting code\r\n                                        property.EmitUnset(codeGenerator, IndexedPlace.ThisArg, null, false);\r\n                                    }\r\n                                    else\r\n                                    {\r\n                                        // unable to resolve the field -> call UnsetProperty\r\n                                        codeGenerator.EmitLoadSelf();\r\n                                        il.Emit(OpCodes.Ldstr, node.VarName.ToString());\r\n                                        codeGenerator.EmitLoadClassContext();\r\n\r\n                                        il.EmitCall(OpCodes.Call, Methods.Operators.UnsetProperty, null);\r\n                                    }\r\n                                }\r\n                            }\r\n                            break;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // call UnsetProperty\r\n                    node.IsMemberOf.Emit(codeGenerator);\r\n                    il.Emit(OpCodes.Ldstr, node.VarName.ToString());\r\n                    codeGenerator.EmitLoadClassContext();\r\n\r\n                    il.EmitCall(OpCodes.Call, Methods.Operators.UnsetProperty, null);\r\n                }\r\n            }\r\n\r\n            internal override PhpTypeCode EmitIsset(DirectVarUse node, CodeGenerator codeGenerator, bool empty)\r\n            {\r\n                // Template: \"isset(x)\"     x != null        \r\n                //\t\t\t\tisset doesn't distinguish between the NULL and uninitialized variable\r\n                //\t\t\t\ta reference is dereferenced, i.e. isset tells us whether the referenced variable is set \r\n\r\n                Debug.Assert(access == AccessType.Read);\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                // 2,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n                    EmitReadField(node, codeGenerator, false);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return PhpTypeCode.Object;\r\n                }\r\n                // 7: $a\r\n                // Check whether this variable is set\r\n                //codeGenerator.EmitVariableIsset(this);\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (node.VarName.IsThisVariableName && codeGenerator.LocationStack.LocationType == LocationTypes.MethodDecl)\r\n                {\r\n                    CompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                    if (!context.Method.IsStatic)\r\n                    {\r\n                        // $this is always set in instance methods\r\n                        il.Emit(OpCodes.Ldarg_0);\r\n                        return PhpTypeCode.Object;\r\n                    }\r\n                }\r\n                this.EmitLoad(node, codeGenerator);\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeWrite(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n\r\n                if (chain.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1:  ...->a->...\r\n                        chain.Lengthen();\r\n                        chain.EmitEnsureProperty(node.IsMemberOf, node, false);\r\n                        return PhpTypeCode.DObject;\r\n                    }\r\n                    if (chain.IsArrayItem)\r\n                    {\r\n                        // 4,6\r\n                        if (chain.IsLastMember)\r\n                        {\r\n                            // 4: a[][]\r\n                            chain.EmitEnsureVariableIsArray(node);\r\n                        }\r\n                        else\r\n                        {\r\n                            // 6: $b->a[3]\r\n                            ChainBuilder.ObjectFieldLazyEmitInfo object_info = chain.GetObjectForLazyEmit();\r\n                            // Lengthen for hop over ->\r\n                            chain.EmitEnsureProperty(object_info.ObjectForLazyEmit, node, true);\r\n                            chain.ReleaseObjectForLazyEmit(object_info);\r\n                            chain.IsArrayItem = true;\r\n                            chain.IsLastMember = false;\r\n                        }\r\n\r\n                        return PhpTypeCode.PhpArray;\r\n                    }\r\n                    if (chain.Exists)\r\n                    {\r\n                        // 5: $a->b->c->...\r\n                        chain.EmitEnsureVariableIsObject(node);\r\n                        return PhpTypeCode.DObject;\r\n                    }\r\n                    else\r\n                    {\r\n                        // 9: $a->b\r\n                        this.EmitLoadAddress(node, codeGenerator);\r\n                        return PhpTypeCode.ObjectAddress;\r\n                    }\r\n                }\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a \r\n                    // 8: b[]->a\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    assignmentCallback = EmitWriteField(node, codeGenerator, false);\r\n                    // Note: more work is done in EmitAssign \r\n\r\n                    // some data are preloaded but nothing that can be consumed is loaded on stack:\r\n                    return PhpTypeCode.Unknown;\r\n                }\r\n                // 3,7\r\n                if (codeGenerator.ChainBuilder.IsArrayItem)\r\n                {\r\n                    // 3: a[3]\r\n                    EmitLoadAddress(node, codeGenerator);\r\n                    return PhpTypeCode.ObjectAddress;\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    EmitStorePrepare(node, codeGenerator);\r\n                    return PhpTypeCode.Unknown;\r\n                }\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeWriteAssign(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Note that for cases 1,3,4,5,6,9 EmitAssign is never called!!!\r\n\r\n                // 2,7,8\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 2,8\r\n                    if (codeGenerator.ChainBuilder.Exists)\r\n                    {\r\n                        // 8: b[]->a\r\n                        codeGenerator.ChainBuilder.EmitSetObjectField();\r\n                    }\r\n                    else\r\n                    {\r\n                        // 2: $b->a \r\n                        Debug.Assert(node.IsMemberOf is SimpleVarUse || node.IsMemberOf is FunctionCall);\r\n                        if (node.IsMemberOf is FunctionCall)\r\n                            codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                        assignmentCallback(codeGenerator, PhpTypeCode.Object);\r\n\r\n                        SimpleVarUse svu = node.IsMemberOf as SimpleVarUse;\r\n                        if (svu != null)\r\n                            SimpleVarUseHelper.EmitLoadAddress_StoreBack(svu, codeGenerator);\r\n                        // else do nothing\r\n                    }\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    EmitStoreAssign(node, codeGenerator);\r\n                }\r\n\r\n                return PhpTypeCode.Void;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code for loading the variable's value onto the evaluation stack. Supports operators chaining.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">Code generator.</param>\r\n            private PhpTypeCode EmitNodeRead(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1: ...->a->...\r\n                        codeGenerator.ChainBuilder.Lengthen();\r\n                        return EmitReadField(node, codeGenerator, false);\r\n                    }\r\n                    if (codeGenerator.ChainBuilder.IsArrayItem && !codeGenerator.ChainBuilder.IsLastMember)\r\n                    {\r\n                        // 6: $b->a[3]\r\n                        return codeGenerator.ChainBuilder.EmitGetProperty(node);\r\n                    }\r\n                    // 4: a[][] \r\n                    // 5: $a->b->c->... \r\n                    // 9: $a->b\r\n                    return this.EmitLoad(node, codeGenerator);\r\n\r\n                }\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    PhpTypeCode result = EmitReadField(node, codeGenerator, false);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return result;\r\n                }\r\n                // 3: a[3]\r\n                // 7: $a\r\n                return this.EmitLoad(node, codeGenerator);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code for loading the variable's value as a <see cref=\"PhpReference\"/>. This function is called only\r\n            /// by first AST node in chain.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeReadRef(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                // 2, 7, 8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    if (node.IsMemberOf is FunctionCall)\r\n                        codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                    PhpTypeCode type_code = EmitReadField(node, codeGenerator, true);\r\n                    Debug.Assert(type_code == PhpTypeCode.PhpReference);\r\n\r\n                    codeGenerator.ChainBuilder.EndRef();\r\n                    return PhpTypeCode.PhpReference;\r\n                }\r\n\r\n                // 7: $a\r\n                EmitLoadRef(node, codeGenerator);\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code for loading the variable's value as either <see cref=\"PhpReference\"/> or\r\n            /// <see cref=\"PhpRuntimeChain\"/>.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeReadUnknown(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1: ...->a->...\r\n                        codeGenerator.ChainBuilder.Lengthen();\r\n                        PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                        if (res != PhpTypeCode.PhpRuntimeChain)\r\n                        {\r\n                            codeGenerator.EmitBoxing(res);\r\n                            codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                        }\r\n                        codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                        return PhpTypeCode.PhpRuntimeChain;\r\n                    }\r\n                    if (codeGenerator.ChainBuilder.IsArrayItem && !codeGenerator.ChainBuilder.IsLastMember)\r\n                    {\r\n                        // 6: $b->a[3]\r\n                        codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                        return PhpTypeCode.PhpRuntimeChain;\r\n                    }\r\n                    // 4: a[][] \r\n                    // 5: $a->b->c->... \r\n                    // 9: $a->b\r\n                    this.EmitLoadRef(node, codeGenerator);\r\n                    codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                    return PhpTypeCode.PhpRuntimeChain;\r\n                }\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                    if (res != PhpTypeCode.PhpRuntimeChain)\r\n                    {\r\n                        codeGenerator.EmitBoxing(res);\r\n                        codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                    }\r\n                    codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return PhpTypeCode.PhpRuntimeChain;\r\n                }\r\n                // 3: a[3]\r\n                // 7: $a\r\n                this.EmitLoadRef(node, codeGenerator);\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeWriteRef(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                // 2,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a \r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    assignmentCallback = EmitWriteField(node, codeGenerator, true);\r\n                    // Note: more work is done in EmitAssign \r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    EmitStoreRefPrepare(node, codeGenerator);\r\n                }\r\n                return PhpTypeCode.Unknown;\r\n            }\r\n\r\n            private void EmitNodeWriteRefAssign(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Note that for cases 1,3,4,5,6,9 EmitAssign is never called!!!\r\n\r\n                // 2,7,8\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 2,8\r\n                    if (codeGenerator.ChainBuilder.Exists)\r\n                    {\r\n                        // 8: b[]->a\r\n                        codeGenerator.ChainBuilder.EmitSetObjectField();\r\n                    }\r\n                    else\r\n                    {\r\n                        // 2: $b->a\r\n                        Debug.Assert(node.IsMemberOf is SimpleVarUse || node.IsMemberOf is FunctionCall);\r\n                        if (node.IsMemberOf is FunctionCall)\r\n                            codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                        assignmentCallback(codeGenerator, PhpTypeCode.Object);\r\n\r\n                        SimpleVarUse svu = node.IsMemberOf as SimpleVarUse;\r\n                        if (svu != null)\r\n                            SimpleVarUseHelper.EmitLoadAddress_StoreBack(svu, codeGenerator);\r\n                    }\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    //codeGenerator.EmitVariableStoreRefAssign(this);\r\n                    EmitStoreRefAssign(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load the name of the variable onto evaluation stack.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. The <B>string</B> representing the \r\n            /// name of the variable is left on the evaluation stack.\r\n            /// </remarks>\r\n            internal override void EmitName(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.IL.Emit(OpCodes.Ldstr, node.VarName.Value);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load the variable onto the evaluation stack.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <remarks>Also handles loading of <B>$this</B>.</remarks>\r\n            internal override PhpTypeCode EmitLoad(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                if (node.VarName.IsThisVariableName)\r\n                {\r\n                    return EmitLoadThis(node, codeGenerator);\r\n                }\r\n\r\n                return EmitLoad(codeGenerator, node.VarName);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit load of variable named <paramref name=\"varName\"/>.\r\n            /// </summary>\r\n            internal static PhpTypeCode EmitLoad(CodeGenerator codeGenerator, VariableName varName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // Check if the variable is auto-global\r\n                if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    codeGenerator.EmitAutoGlobalLoad(varName);\r\n                    return PhpTypeCode.Object;\r\n                }\r\n\r\n                // Variable is local\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template:\r\n                    //\t\t\tldloc loc\r\n                    //\t***** // If the specidied variable is of type PhpReference\r\n                    //\t\t\t\tldfld PhpReference.value\r\n                    //\t*****\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n                    entry.Variable.EmitLoad(il);\r\n                    if (entry.IsPhpReference)\r\n                        il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\r\n                    return PhpTypeCode.Object;\r\n                }\r\n\r\n                // LOAD Operators.GetVariable[Unchecked](<script context>, <local variable table>, <name>);\r\n                codeGenerator.EmitLoadScriptContext();\r\n                codeGenerator.EmitLoadRTVariablesTable();\r\n                il.Emit(OpCodes.Ldstr, varName.Value);\r\n\r\n                if (codeGenerator.ChainBuilder.QuietRead)\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetVariableUnchecked);\r\n                else\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetVariable);\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load the \"$this\" variable onto the evaluation stack.\r\n            /// </summary>\r\n            private PhpTypeCode EmitLoadThis(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                CompilerLocationStack locationStack = codeGenerator.LocationStack;\r\n\r\n                // special treatment of $this\r\n                switch (locationStack.LocationType)\r\n                {\r\n                    case LocationTypes.GlobalCode:\r\n                        {\r\n                            // load $this from one of Main's arguments and check for null\r\n                            Label this_non_null = il.DefineLabel();\r\n\r\n                            codeGenerator.EmitLoadSelf();\r\n                            il.Emit(OpCodes.Dup);\r\n                            il.Emit(OpCodes.Brtrue_S, this_non_null);\r\n                            il.Emit(OpCodes.Ldstr, VariableName.ThisVariableName.Value);\r\n                            codeGenerator.EmitPhpException(Methods.PhpException.UndefinedVariable);\r\n                            il.MarkLabel(this_non_null, true);\r\n\r\n                            return PhpTypeCode.Object;\r\n                        }\r\n\r\n                    case LocationTypes.FunctionDecl:\r\n                        {\r\n                            // always null\r\n                            il.Emit(OpCodes.Ldstr, VariableName.ThisVariableName.Value);\r\n                            codeGenerator.EmitPhpException(Methods.PhpException.UndefinedVariable);\r\n                            il.Emit(OpCodes.Ldnull);\r\n\r\n                            return PhpTypeCode.Object;\r\n                        }\r\n\r\n                    case LocationTypes.MethodDecl:\r\n                        {\r\n                            CompilerLocationStack.MethodDeclContext context = locationStack.PeekMethodDecl();\r\n                            if (context.Method.IsStatic)\r\n                            {\r\n                                // always null in static methods\r\n                                il.Emit(OpCodes.Ldstr, VariableName.ThisVariableName.Value);\r\n                                codeGenerator.EmitPhpException(Methods.PhpException.UndefinedVariable);\r\n                                il.Emit(OpCodes.Ldnull);\r\n\r\n                                return PhpTypeCode.Object;\r\n                            }\r\n                            else\r\n                            {\r\n                                // arg0 or <proxy> in instance methods\r\n                                codeGenerator.EmitLoadSelf();\r\n                                return PhpTypeCode.DObject;\r\n                            }\r\n                        }\r\n\r\n                    default:\r\n                        Debug.Fail(\"Invalid location type.\");\r\n                        return PhpTypeCode.Invalid;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Loads an address of a variable on the stack.\r\n            /// </summary>\r\n            internal override void EmitLoadAddress(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var varName = node.VarName;\r\n\r\n                if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    codeGenerator.EmitAutoGlobalLoadAddress(varName);\r\n                    return;\r\n                }\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template: for DirectVarUse\r\n                    //\t***** // If the specidied variable is of type PhpReference\r\n                    //\t\t\t\tldloc loc\r\n                    //\t\t\t\tldflda PhpReference.value\r\n                    //\t***** // Otherwise\r\n                    //\t\t\t\tldloca loc\r\n                    //\t*****\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n                    if (entry.IsPhpReference)\r\n                    {\r\n                        // Load variable (of type PhpReference) from IPlace\r\n                        entry.Variable.EmitLoad(codeGenerator.IL);\r\n                        // ... and get address (ref) of its Value field\r\n                        codeGenerator.IL.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n                    }\r\n                    else\r\n                        // Load address of variable from IPlace\r\n                        entry.Variable.EmitLoadAddress(codeGenerator.IL);\r\n                    return;\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tobject Operators.GetVariableUnchecked(IDictionary table, string name) //returns variable value\r\n                    this.LoadTabledVariableAddress(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            internal override void EmitLoadAddress_StoreBack(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitLoadAddress_StoreBack(node, codeGenerator, false);\r\n            }\r\n\r\n            internal override void EmitLoadAddress_StoreBack(DirectVarUse node, CodeGenerator codeGenerator, bool duplicate_value)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // Skip $this->a\r\n                if (node.VarName.IsThisVariableName)\r\n                    // Take no action\r\n                    return;\r\n\r\n                if (codeGenerator.VariableIsAutoGlobal(node.VarName))\r\n                {\r\n                    // Take no action\r\n                    return;\r\n                }\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Take no action\r\n                    return;\r\n                }\r\n                this.StoreTabledVariableBack(node, codeGenerator, duplicate_value);\r\n            }\r\n\r\n            internal override void EmitLoadRef(DirectVarUse node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                if (node.VarName.IsThisVariableName)\r\n                {\r\n                    EmitLoadThisRef(node, codeGenerator);\r\n                    return;\r\n                }\r\n\r\n                EmitLoadRef(codeGenerator, node.VarName);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit reference load of variable named <paramref name=\"varName\"/>.\r\n            /// </summary>\r\n            internal static void EmitLoadRef(CodeGenerator/*!*/ codeGenerator, VariableName varName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // Check if the variable is auto-global\r\n                if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    codeGenerator.EmitAutoGlobalLoadRef(varName);\r\n                    return;\r\n                }\r\n\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template: for DirectVarUse\t\t\t\r\n                    //\t\t\"LOAD ref $x;\"\r\n                    //\r\n                    //\t\tldloc loc // Local variable should be of type PhpReference\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n                    entry.Variable.EmitLoad(il);\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tPhpReference Operators.GetVariableRef(IDictionary table, string name) \r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Emit(OpCodes.Ldstr, varName.Value);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetVariableRef);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Loads a PhpReference to \"this\" special variable to the evaluation stack.\r\n            /// If \"this\" is not available, loads an empty PhpReference.\r\n            /// </summary>\r\n            private PhpTypeCode EmitLoadThisRef(DirectVarUse node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                switch (codeGenerator.LocationStack.LocationType)\r\n                {\r\n                    case LocationTypes.GlobalCode:\r\n                        {\r\n                            // load $this from one of Main's arguments:\r\n                            codeGenerator.EmitLoadSelf();\r\n\r\n                            // NOTE: If $this is used by ref somewhere in the method each access to it is boxed to the reference.\r\n                            // Only calls to methods use the \"this\" pointer itself. Thus the rule \"no duplicate pointers\" is slightly\r\n                            // broken here yet everything should work fine.\r\n                            il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n                            break;\r\n                        }\r\n\r\n                    case LocationTypes.FunctionDecl:\r\n                        {\r\n                            // always null referencing PhpReference\r\n                            il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                            break;\r\n                        }\r\n\r\n                    case LocationTypes.MethodDecl:\r\n                        {\r\n                            CompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                            if (context.Method.IsStatic)\r\n                            {\r\n                                // always null referencing PhpReference in static methods\r\n                                il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                            }\r\n                            else\r\n                            {\r\n                                // arg0 or <proxy> referencing PhpReference in instance methods\r\n                                codeGenerator.EmitLoadSelf();\r\n\r\n                                // NOTE: If $this is used by ref somewhere in the method each access to it is boxed to the reference.\r\n                                // Only calls to methods use the \"this\" pointer itself. Thus the rule \"no duplicate pointers\" is slightly\r\n                                // broken here yet everything should work fine.\r\n                                il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    default:\r\n                        Debug.Fail(\"Invalid location type.\");\r\n                        break;\r\n                }\r\n\r\n                // always returns a reference:\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            internal override void EmitStorePrepare(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var varName = node.VarName;\r\n\r\n                if (varName.IsThisVariableName)\r\n                {\r\n                    // Error throwing code will be emitted in EmitVariableStoreAssign\r\n                }\r\n                else if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    // Check if the variable is auto-global\r\n                    codeGenerator.EmitAutoGlobalStorePrepare(varName);\r\n                }\r\n                else if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template:\r\n                    //\t\t\"WRITE($x,value);\"\r\n                    //\t\t**** // if specified variable is of type PhpReference\r\n                    //\t\tldloc local\r\n                    //\t\t**** // Otherwise do nothing\r\n\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n                    if (entry.IsPhpReference)\r\n                    {\r\n                        entry.Variable.EmitLoad(codeGenerator.IL);\r\n                    }\r\n                    // Otherwise do nothing\r\n                    // Now load the value, then call EmitVariableStoreAssignOptimized() to store the value ...\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tvoid Operators.SetVariable(table, \"x\", PhpVariable.Copy(Operators.getValue(table, \"x\"), CopyReason.Assigned));\t\t\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    // Now load the value, then call SetVariable() to store the value ...\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreAssign(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var varName = node.VarName;\r\n\r\n                if (varName.IsThisVariableName)\r\n                {\r\n                    // emit error throwing code\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    codeGenerator.EmitPhpException(Methods.PhpException.CannotReassignThis);\r\n                }\r\n                else if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    // Check if the variable is auto-global\r\n                    codeGenerator.EmitAutoGlobalStoreAssign();\r\n                }\r\n                else if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template:\r\n                    //\t\t\"WRITE($x,value);\"\r\n                    //\t\t**** // if specified variable is of type PhpReference\r\n                    //\t\tldloc local\r\n                    //\t\t**** // Otherwise do nothing\r\n\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n\r\n                    if (entry.IsPhpReference)\r\n                        codeGenerator.IL.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n                    else\r\n                        entry.Variable.EmitStore(codeGenerator.IL);\r\n                }\r\n                else\r\n                {\r\n                    // CALL Operators.SetVariable(STACK:table,STACK:name,STACK:value);\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.SetVariable);\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreRefPrepare(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var varName = node.VarName;\r\n\r\n                if (varName.IsThisVariableName)\r\n                {\r\n                    // error throwing code will be emitted in EmitVariableStoreRefAssign\r\n                }\r\n                else if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    // Check if the variable is auto-global\r\n                    codeGenerator.EmitAutoGlobalStoreRefPrepare(varName);\r\n                }\r\n                else if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template:\r\n                    //\t\tWRITE ref ($x,value);\r\n\r\n                    //\t\tDO NOTHING !!!!\r\n                    // now load the value then store to local variable\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tWRITE ref ($x,value); // by Martin\r\n                    //\r\n                    //\t\tldarg.1 \r\n                    //\t\tldstr \"name\"   \r\n                    //\t\tLOAD value\r\n                    //\t\tcall instance IDictionary.set_Item(object)\r\n\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    // now load value, then call EmitVariableStoreRefAssignGlobalContext() to emit stfld ...\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreRefAssign(DirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var varName = node.VarName;\r\n\r\n                if (varName.IsThisVariableName)\r\n                {\r\n                    // emit error throwing code\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    codeGenerator.EmitPhpException(Methods.PhpException.CannotReassignThis);\r\n                }\r\n                else if (codeGenerator.VariableIsAutoGlobal(varName))\r\n                {\r\n                    // Check if the variable is auto-global\r\n                    codeGenerator.EmitAutoGlobalStoreRefAssign(varName);\r\n                }\r\n                else if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    VariablesTable.Entry entry = codeGenerator.CurrentVariablesTable[varName];\r\n                    entry.Variable.EmitStore(codeGenerator.IL);\r\n                }\r\n                else\r\n                {\r\n                    // call instance IDictionary.set_Item(object, object)\r\n                    // OBSOLETE: il.Emit(OpCodes.Callvirt, Methods.IDictionary_SetItem);\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.SetVariableRef);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/Doc/Nodes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<doc>\r\n\t<method name=\"Analyze\">\r\n\t\r\n\t</method>\r\n  <method name=\"Expression.Analyze\">\r\n    <summary>\r\n      Analyzes an AST node containing a specialization of an expression.\r\n    </summary>\r\n    <remarks>\r\n\t\t\tThis method \r\n    </remarks>\r\n    <param name=\"analyzer\">An analyzer which analyzes the node.</param>\r\n    <param name=\"info\">Informations from parent in AST.</param>\r\n    <returns>AST node that should replace this node in AST</returns>\r\n  </method>\r\n  <method name=\"Statement.Analyze\">\r\n    <summary>\r\n      Analyzes an AST node containing a specialization of a statement.\r\n    </summary>\r\n    <param name=\"analyzer\">An analyzer which analyzes the node.</param>\r\n    <returns>???</returns>\r\n  </method>\r\n  <method name=\"Emit\">\r\n    <summary>\r\n      Emits AST node respective IL code.\r\n    </summary>\r\n    <param name=\"codeGenerator\">A code generator which generates code of this node.</param>\r\n    <returns>A type code of item which has been placed on the top of the evaluation stack by this method.</returns>\r\n  </method>\r\n  <method name=\"IsDeeplyCopied\">\r\n    <summary>\r\n      Decides whether an expression represented by this node should be copied if a certain operation is performed.\r\n    </summary>\r\n    <param name=\"reason\">Reason of copying (a kind of the operation performed).</param>\r\n    <param name=\"nestingLevel\">A level of nesting. Used for optimizing copies on assignment during nested assignments (a = b = c = ...)</param>\r\n    <returns>Whether to make a deep copy of expression result when the expression is on rhs of operator =.</returns>\r\n  </method>\r\n  <method name=\"StoreOnAssignment\">\r\n    <summary>\r\n      Decides whether an expression represented by this node should be stored to a temporary local if assigned.\r\n    </summary>\r\n    <returns>Whether to store the value of expression to a temporary local for later use when the expression is on rhs of operator =.</returns>\r\n  </method>\r\n</doc>\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/EchoStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(EchoStmt), Singleton = true)]\r\n        sealed class EchoStmtCompiler : StatementCompiler<EchoStmt>\r\n        {\r\n            internal override Core.AST.Statement Analyze(EchoStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                ExInfoFromParent info = ExInfoFromParent.DefaultExInfo;\r\n                \r\n                var parameters = node.Parameters;\r\n                for (int i = 0; i < parameters.Length; i++)\r\n                {\r\n                    parameters[i] = parameters[i].Analyze(analyzer, info).Literalize();\r\n                }\r\n\r\n                return node;\r\n            }\r\n\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Emit\"]/*'/>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </remarks>\r\n            internal override void Emit(EchoStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"EchoStmt\");\r\n\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n                foreach (Expression parameter in node.Parameters)\r\n                {\r\n                    // skip empty evaluated expression\r\n                    var value = parameter.GetValue();\r\n                    if (parameter.HasValue() &&\r\n                        (\r\n                            value == null ||\r\n                            (value is string && ((string)value) == string.Empty) ||\r\n                            Convert.ObjectToPhpBytes(value).Length == 0\r\n                        ))\r\n                    {\r\n                        continue;\r\n                    }\r\n\r\n                    // emit the echo of parameter expression\r\n                    codeGenerator.EmitEcho(parameter);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/Expression.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.AST;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region ExpressionCompiler\r\n\r\n        abstract class ExpressionCompiler<T> : IExpressionCompiler where T : Expression\r\n        {\r\n            #region Generic IExpressionCompiler implementation\r\n\r\n            public virtual object GetValue(T node) { return null; }\r\n\r\n            public virtual PhpTypeCode GetValueTypeCode(T node) { return PhpTypeCode.Unknown; }\r\n\r\n            public virtual Evaluation EvaluatePriorAnalysis(T node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                // in-evaluable by default:\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public abstract Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info);\r\n\r\n            public abstract PhpTypeCode Emit(T node, CodeGenerator codeGenerator);\r\n\r\n            public virtual object Evaluate(T node, object value)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public virtual object Evaluate(T node, object leftValue, object rightValue)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public virtual bool IsDeeplyCopied(T node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return true;\r\n            }\r\n\r\n            public virtual bool StoreOnAssignment(T node)\r\n            {\r\n                return true;\r\n            }\r\n\r\n            public virtual bool IsCustomAttributeArgumentValue(T node)\r\n            {\r\n                return HasValue(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IExpressionCompiler\r\n\r\n            public AccessType Access { get { return access; } set { access = value; } }\r\n            protected AccessType access = AccessType.None;\r\n\r\n            public bool HasValue(Expression node) { return GetValueTypeCode((T)node) != PhpTypeCode.Unknown; }\r\n\r\n            object IExpressionCompiler.GetValue(Expression node) { return GetValue((T)node); }\r\n\r\n            PhpTypeCode IExpressionCompiler.GetValueTypeCode(Expression node) { return GetValueTypeCode((T)node); }\r\n\r\n            Evaluation IExpressionCompiler.EvaluatePriorAnalysis(Expression node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                return EvaluatePriorAnalysis((T)node, sourceUnit);\r\n            }\r\n\r\n            Evaluation IExpressionCompiler.Analyze(Expression node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                return Analyze((T)node, analyzer, info);\r\n            }\r\n\r\n            PhpTypeCode IExpressionCompiler.Emit(Expression node, CodeGenerator codeGenerator)\r\n            {\r\n                return Emit((T)node, codeGenerator);\r\n            }\r\n\r\n            object IExpressionCompiler.Evaluate(Expression node, object value)\r\n            {\r\n                return Evaluate((T)node, value);\r\n            }\r\n\r\n            object IExpressionCompiler.Evaluate(Expression node, object leftValue, object rightValue)\r\n            {\r\n                return Evaluate((T)node, leftValue, rightValue);\r\n            }\r\n\r\n            bool IExpressionCompiler.IsDeeplyCopied(Expression node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return IsDeeplyCopied((T)node, reason, nestingLevel);\r\n            }\r\n\r\n            bool IExpressionCompiler.IsCustomAttributeArgumentValue(Expression node)\r\n            {\r\n                return IsCustomAttributeArgumentValue((T)node);\r\n            }\r\n\r\n            bool IExpressionCompiler.StoreOnAssignment(Expression node)\r\n            {\r\n                return StoreOnAssignment((T)node);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region VarLikeConstructUseCompiler\r\n\r\n        abstract class VarLikeConstructUseCompiler<T> : ExpressionCompiler<T> where T : VarLikeConstructUse\r\n        {\r\n            public override Evaluation Analyze(T/*!*/node, Analyzer/*!*/ analyzer, ExInfoFromParent info)\r\n            {\r\n                if (node.IsMemberOf != null)\r\n                    node.IsMemberOf.Analyze(analyzer, new ExInfoFromParent(node, DetermineAccessType(node, info.Access)));\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Determine the AccessType based in <c>isMemberOf</c> type and <c>AccessType</c> of parent.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"parentInfoAccess\"></param>\r\n            /// <returns></returns>\r\n            private AccessType DetermineAccessType(T/*!*/node, AccessType parentInfoAccess)\r\n            {\r\n                Debug.Assert(node.IsMemberOf != null);\r\n\r\n                switch (parentInfoAccess)\r\n                {\r\n                    case AccessType.Write:\r\n                        // Example: $x->f()->c = \"foo\";\r\n                        // Chain is read up to function call \"$x->f()\", the rest is written \"->c\"\r\n                        return (node.IsMemberOf is FunctionCall) ? AccessType.Read : AccessType.Write;\r\n\r\n                    case AccessType.WriteRef:\r\n                        // Example: $x->f()->c =& $v;\r\n                        // Chain is read up to function call \"$x->f()\", the rest is written or written ref \"->c\"\r\n                        return (node.IsMemberOf is FunctionCall) ? AccessType.Read : AccessType.Write;\r\n\r\n                    case AccessType.ReadRef:\r\n                        return (node.IsMemberOf is FunctionCall || node is FunctionCall) ? AccessType.Read : AccessType.Write;\r\n\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.ReadAndWrite:\r\n                        // Example: $x->f()->c = \"foo\";\r\n                        // Chain is read up to function call \"$x->f()\", the rest is both read and written \"->c\"\r\n                        return (node.IsMemberOf is FunctionCall) ? AccessType.Read : AccessType.ReadAndWrite;\r\n\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWriteAndReadUnknown:\r\n                        return (node.IsMemberOf is FunctionCall) ? AccessType.Read : parentInfoAccess;\r\n\r\n                    case AccessType.ReadUnknown:\r\n                        return (node.IsMemberOf is FunctionCall || node is FunctionCall) ? AccessType.Read : AccessType.ReadUnknown;\r\n\r\n                    default:\r\n                        return AccessType.Read;\r\n                }\r\n            }            \r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ConstantDeclCompiler\r\n\r\n        abstract class ConstantDeclCompiler<T> : INodeCompiler, IConstantDeclCompiler where T : ConstantDecl\r\n        {\r\n            /// <summary>\r\n            /// Whether the node has been analyzed.\r\n            /// </summary>\r\n            protected bool analyzed;\r\n\r\n            public abstract KnownConstant Constant { get; }\r\n\r\n            public virtual void Analyze(T/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                if (!this.analyzed && Constant != null) // J: Constant can be null, if there was an error\r\n                {\r\n                    Evaluation eval = node.Initializer.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                    if (eval.HasValue)\r\n                    {\r\n                        Constant.SetValue(eval.Value);\r\n                    }\r\n                    else\r\n                    {\r\n                        node.Initializer = eval.Expression;\r\n                        Constant.SetNode(node);\r\n                    }\r\n\r\n                    this.analyzed = true;\r\n                }\r\n            }\r\n\r\n            #region IConstantDeclCompiler Members\r\n\r\n            void IConstantDeclCompiler.Analyze(ConstantDecl node, Analyzer analyzer)\r\n            {\r\n                Analyze((T)node, analyzer);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region AccessType\r\n\r\n    /// <summary>\r\n    /// Access type - describes context within which an expression is used.\r\n    /// </summary>\r\n    public enum AccessType : byte\r\n    {\r\n        None,          // serves for case when Expression is body of a ExpressionStmt.\r\n        // It is useless to push its value on the stack in that case\r\n        Read,\r\n        Write,         // this access can only have VariableUse of course\r\n        ReadAndWrite,  // dtto, it serves for +=,*=, etc.\r\n        ReadRef,       // this access can only have VarLikeConstructUse and RefAssignEx (eg. f($a=&$b); where decl. is: function f(&$x) {} )\r\n        WriteRef,      // this access can only have VariableUse of course\r\n        ReadUnknown,   // this access can only have VarLikeConstructUse and NewEx, \r\n        // when they are act. param whose related formal param is not known\r\n        WriteAndReadRef,\t\t/*this access can only have VariableUse, it is used in case like:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfunction f(&$x) {}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tf($a=$b);\r\n\t\t\t\t\t\t\t\t\t\t\t\t*/\r\n        WriteAndReadUnknown, //dtto, but it is used when the signature of called function is not known \r\n        /* It is because of implementation of code generation that we\r\n            * do not use an AccessType WriteRefAndReadRef in case of ReafAssignEx\r\n            * f(&$x){} \r\n            * f($a=&$b)\r\n            */\r\n        ReadAndWriteAndReadRef, //for f($a+=$b);\r\n        ReadAndWriteAndReadUnknown\r\n    }\r\n\r\n    #endregion        \r\n\r\n    #region ExInfoFromParent\r\n\r\n    /// <summary>\r\n    /// Structure used to pass inherited attributes during expression analyzis.\r\n    /// </summary>\r\n    internal struct ExInfoFromParent\r\n    {\r\n        public AccessType Access { get { return access; } set { access = value; } }\r\n        public AccessType access;\r\n\r\n        /// <summary>\r\n        /// Used only by DirectVarUse to avoid assigning to $this. \r\n        /// Can be null reference if not needed.\r\n        /// </summary>\r\n        public AstNode Parent { get { return parent; } }\r\n        private AstNode parent;\r\n\r\n        public readonly static ExInfoFromParent DefaultExInfo = new ExInfoFromParent(null);\r\n\r\n        public ExInfoFromParent(AstNode parent)\r\n            :this(parent, AccessType.Read)\r\n        {\r\n        }\r\n\r\n        public ExInfoFromParent(AstNode parent, AccessType access)\r\n        {\r\n            this.parent = parent;\r\n            this.access = access;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IExpressionCompiler\r\n\r\n    /// <summary>\r\n    /// Base compiler <see cref=\"Expression\"/> extension interface .\r\n    /// </summary>\r\n    internal interface IExpressionCompiler : INodeCompiler\r\n    {\r\n        /// <summary>\r\n        /// Gets the access type of the expression.\r\n        /// </summary>\r\n        AccessType Access { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the expression has compile-time value. (literals only).\r\n        /// </summary>\r\n        bool HasValue(Expression/*!*/node);\r\n\r\n        /// <summary>\r\n        /// Gets compile-time value of the expression. (literals only).\r\n        /// </summary>\r\n        object GetValue(Expression/*!*/node);\r\n\r\n        /// <summary>\r\n        /// Gets compile-time value type code of the expression. Returns <see cref=\"PhpTypeCode.Unknown\"/> if the value if unknown.\r\n        /// </summary>\r\n        PhpTypeCode GetValueTypeCode(Expression/*!*/node);\r\n\r\n        /// <summary>\r\n        /// Whether the expression can be used as a value of a custom attribute argument\r\n        /// (a constant expression, CLR array, CLR type object).\r\n        /// </summary>\r\n        bool IsCustomAttributeArgumentValue(Expression/*!*/node);\r\n\r\n        /// <summary>\r\n        /// Evaluates value of given <paramref name=\"node\"/> before actual analysis, with no additional information provided.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/>.</param>\r\n        /// <param name=\"sourceUnit\">Containing <see cref=\"SourceUnit\"/>.</param>\r\n        /// <returns><see cref=\"Evaluation\"/> with the result of the operation.</returns>\r\n        /// <remarks>This method allows compiler to resolve static inclusions before analysis,\r\n        /// when application constants or literals are used within the expression.</remarks>\r\n        Evaluation EvaluatePriorAnalysis(Expression/*!*/node, CompilationSourceUnit/*!*/sourceUnit);\r\n\r\n        /// <summary>\r\n        /// Performs analysis of given expression, before actual emit.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/>.</param>\r\n        /// <param name=\"analyzer\">Analyzer object.</param>\r\n        /// <param name=\"info\">Access information from parent node.</param>\r\n        /// <returns><see cref=\"Evaluation\"/> containing this or new expression, as a result of this operation.</returns>\r\n        Evaluation Analyze(Expression/*!*/node, Analyzer/*!*/ analyzer, ExInfoFromParent info);\r\n\r\n        /// <summary>\r\n        /// Emits given <paramref name=\"node\"/> into IL.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/>.</param>\r\n        /// <param name=\"codeGenerator\"><see cref=\"CodeGenerator\"/> object.</param>\r\n        /// <returns>Whether this operation left a value on stack, the return value contains its type code. Othervise it returns <see cref=\"PhpTypeCode.Void\"/>.</returns>\r\n        PhpTypeCode Emit(Expression/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n\r\n        /// <summary>\r\n        /// Helper function to compute an unary operation.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/>.</param>\r\n        /// <param name=\"value\">Operand of the operation.</param>\r\n        /// <returns>Computed value.</returns>\r\n        object Evaluate(Expression/*!*/node, object value);\r\n\r\n        /// <summary>\r\n        /// Helper function to compute a binary operation.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/></param>\r\n        /// <param name=\"leftValue\">Left operand.</param>\r\n        /// <param name=\"rightValue\">Right operand.</param>\r\n        /// <returns>Computed value.</returns>\r\n        object Evaluate(Expression/*!*/node, object leftValue, object rightValue);\r\n\r\n        /// <summary>\r\n        /// Whether compiler should emit deep variable copying, when passing expression as an assignment, a function parameter or as a function return value.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"Expression\"/> instance, associated with this <see cref=\"INodeCompiler\"/>.</param>\r\n        /// <param name=\"reason\">The reason of copying.</param>\r\n        /// <param name=\"nestingLevel\"></param>\r\n        /// <returns>Whether compiler should perform variable copying.</returns>\r\n        bool IsDeeplyCopied(Expression/*!*/node, CopyReason reason, int nestingLevel);\r\n\r\n        /// <summary>\r\n        /// Whether an expression represented by this node should be stored to a temporary local if assigned.\r\n        /// </summary>\r\n        bool StoreOnAssignment(Expression/*!*/node);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IConstantDeclCompiler, ConstantDeclHelper\r\n\r\n    interface IConstantDeclCompiler\r\n    {\r\n        KnownConstant Constant { get; }\r\n        void Analyze(ConstantDecl/*!*/node, Analyzer/*!*/ analyzer);\r\n    }\r\n\r\n    static class ConstantDeclHelper\r\n    {\r\n        public static void Analyze(this ConstantDecl/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<IConstantDeclCompiler>().Analyze(node, analyzer);\r\n        }\r\n    }\r\n\r\n    #endregion        \r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/FieldUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region StaticFieldUse\r\n\r\n        [NodeCompiler(typeof(StaticFieldUse))]\r\n        abstract class StaticFieldUseCompiler<T> : VariableUseCompiler<T> where T : StaticFieldUse\r\n        {\r\n            protected DType/*!*/ type;\r\n\r\n            /// <summary>\r\n            /// Points to a method that emits code to be placed after the new static field value has\r\n            /// been loaded on the evaluation stack.\r\n            /// </summary>\r\n            internal AssignmentCallback assignmentCallback;\r\n\r\n            public override Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                TypeRefHelper.Analyze(node.TypeRef, analyzer);\r\n                this.type = TypeRefHelper.ResolvedTypeOrUnknown(node.TypeRef);\r\n\r\n                analyzer.AnalyzeConstructedType(type);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #region Emit, EmitAssign, EmitIsset, EmitRead, EmitWrite, EmitEnsure\r\n\r\n            public override PhpTypeCode Emit(T/*!*/node, CodeGenerator/*!*/codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"FieldUse.Static\");\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n                PhpTypeCode result = PhpTypeCode.Invalid;\r\n\r\n                switch (codeGenerator.SelectAccess(access))\r\n                {\r\n                    case AccessType.Read:\r\n                        result = EmitRead(node, codeGenerator, false);\r\n                        if (chain.IsMember) chain.Lengthen();\r\n                        break;\r\n\r\n                    case AccessType.ReadUnknown:\r\n                        result = EmitRead(node, codeGenerator, true);\r\n                        if (chain.IsMember) chain.Lengthen();\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        if (chain.IsMember)\r\n                        {\r\n                            chain.Lengthen();\r\n                            result = EmitRead(node, codeGenerator, false);\r\n                        }\r\n                        else\r\n                        {\r\n                            result = EmitRead(node, codeGenerator, true);\r\n                        }\r\n                        break;\r\n\r\n                    case AccessType.Write:\r\n                        if (chain.IsMember)\r\n                        {\r\n                            result = EmitEnsure(node, codeGenerator, chain);\r\n                            chain.Lengthen();\r\n                        }\r\n                        else\r\n                        {\r\n                            assignmentCallback = EmitWrite(node, codeGenerator, false);\r\n                            result = PhpTypeCode.Unknown;\r\n                        }\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        if (chain.IsMember)\r\n                        {\r\n                            result = EmitEnsure(node, codeGenerator, chain);\r\n                            chain.Lengthen();\r\n                        }\r\n                        else\r\n                        {\r\n                            assignmentCallback = EmitWrite(node, codeGenerator, true);\r\n                            result = PhpTypeCode.Unknown;\r\n                        }\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitAssign(T/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                switch (access)\r\n                {\r\n                    case AccessType.Write:\r\n                    case AccessType.WriteRef:\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWrite:\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.ReadAndWriteAndReadUnknown:\r\n                        // finish the assignment by invoking the callback obtained in Emit\r\n                        assignmentCallback(codeGenerator, PhpTypeCode.Object);\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(null);\r\n                        break;\r\n                }\r\n\r\n                return PhpTypeCode.Void;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitIsset(T/*!*/node, CodeGenerator codeGenerator, bool empty)\r\n            {\r\n                Debug.Assert(access == AccessType.Read);\r\n\r\n                // Do not report error messages\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                // Emit as if the node is read\r\n                return this.Emit(node, codeGenerator);\r\n            }\r\n\r\n            internal abstract PhpTypeCode EmitRead(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool wantRef);\r\n            internal abstract AssignmentCallback EmitWrite(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool writeRef);\r\n            internal abstract PhpTypeCode EmitEnsure(T/*!*/node, CodeGenerator/*!*/ codeGenerator, ChainBuilder/*!*/ chain);\r\n\r\n            #endregion\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region DirectStFldUse\r\n\r\n        [NodeCompiler(typeof(DirectStFldUse))]\r\n        sealed class DirectStFldUseCompiler : StaticFieldUseCompiler<DirectStFldUse>\r\n        {\r\n            private DProperty property;\r\n            private bool runtimeVisibilityCheck;\r\n\r\n            public override Evaluation Analyze(DirectStFldUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                property = analyzer.ResolveProperty(type, node.PropertyName, node.Span, true, analyzer.CurrentType, analyzer.CurrentRoutine, out runtimeVisibilityCheck);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #region EmitRead, EmitWrite, EmitEnsure, EmitUnset\r\n            \r\n            /// <summary>\r\n            /// Emits IL instructions that read the value of a static field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"wantRef\">If <B>false</B> the field value should be left on the evaluation stack,\r\n            /// if <B>true</B> the <see cref=\"PhpReference\"/> should be left on the evaluation stack.</param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. A <see cref=\"PhpReference\"/> (if <paramref name=\"wantRef\"/>\r\n            /// is <B>true</B>) or the field value itself (if <paramref name=\"wantRef\"/> is <B>false</B>) is left on the\r\n            /// evaluation stack (all PHP static fields are <see cref=\"PhpReference\"/>s).\r\n            /// </remarks>\r\n            internal override PhpTypeCode EmitRead(DirectStFldUse/*!*/node, CodeGenerator/*!*/ codeGenerator, bool wantRef)\r\n            {\r\n                return property.EmitGet(codeGenerator, null, wantRef, type as ConstructedType, runtimeVisibilityCheck);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that write a value to a static field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"writeRef\">If <B>true</B> the value being written is a <see cref=\"PhpReference\"/>\r\n            /// instance, if <B>false</B> it is an <see cref=\"Object\"/> instance.</param>\r\n            /// <returns>Delegate to a method that emits code to be executed when the actual value has been\r\n            /// loaded on the evaluation stack (see <see cref=\"StaticFieldUseCompiler{T}.EmitAssign\"/>).</returns>\r\n            internal override AssignmentCallback EmitWrite(DirectStFldUse/*!*/node, CodeGenerator/*!*/ codeGenerator, bool writeRef)\r\n            {\r\n                return property.EmitSet(codeGenerator, null, writeRef, type as ConstructedType, runtimeVisibilityCheck);\r\n            }\r\n\r\n            internal override PhpTypeCode EmitEnsure(DirectStFldUse/*!*/node, CodeGenerator/*!*/ codeGenerator, ChainBuilder/*!*/ chain)\r\n            {\r\n                // unknown property of a known type reported as an error during analysis\r\n                Debug.Assert(!property.IsUnknown ||\r\n                    property.DeclaringType.IsUnknown ||\r\n                    !property.DeclaringType.IsDefinite);\r\n\r\n                // we're only interested in a directly accessible property\r\n                return chain.EmitEnsureStaticProperty((runtimeVisibilityCheck) ? null : property, node.TypeRef, node.PropertyName, chain.IsArrayItem);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that &quot;unset&quot; a static field.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// <para>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </para>\r\n            /// <para>\r\n            /// An error throwing code is always emitted because static fields cannot be unset.\r\n            /// </para>\r\n            /// </remarks>\r\n            internal override void EmitUnset(DirectStFldUse/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                property.EmitUnset(codeGenerator, null, type as ConstructedType, runtimeVisibilityCheck);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IndirectStFldUse\r\n\r\n        [NodeCompiler(typeof(IndirectStFldUse))]\r\n        sealed class IndirectStFldUseCompiler : StaticFieldUseCompiler<IndirectStFldUse>\r\n        {\r\n            public override Evaluation Analyze(IndirectStFldUse/*!*/node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                node.FieldNameExpr = node.FieldNameExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #region EmitRead, EmitWrite, EmitEnsure, EmitUnset\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that read the value of a static field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"wantRef\">If <B>false</B> the field value should be left on the evaluation stack,\r\n            /// if <B>true</B> the <see cref=\"PhpReference\"/> should be left on the evaluation stack.</param>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. A <see cref=\"PhpReference\"/> (if <paramref name=\"wantRef\"/>\r\n            /// is <B>true</B>) or the field value itself (if <paramref name=\"wantRef\"/> is <B>false</B>) is left on the\r\n            /// evaluation stack (all PHP static fields are <see cref=\"PhpReference\"/>s).\r\n            /// </remarks>\r\n            internal override PhpTypeCode EmitRead(IndirectStFldUse/*!*/node, CodeGenerator codeGenerator, bool wantRef)\r\n            {\r\n                return codeGenerator.EmitGetStaticPropertyOperator(type, null, node.FieldNameExpr, wantRef);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that write the value to a static field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"writeRef\">If <B>true</B> the value being written is a <see cref=\"PhpReference\"/>\r\n            /// instance, if <B>false</B> it is an <see cref=\"Object\"/> instance.</param>\r\n            /// <returns>Delegate to a method that emits code to be executed when the actual value has been\r\n            /// loaded on the evaluation stack (see <see cref=\"StaticFieldUseCompiler{T}.EmitAssign\"/>).</returns>\r\n            internal override AssignmentCallback EmitWrite(IndirectStFldUse/*!*/node, CodeGenerator codeGenerator, bool writeRef)\r\n            {\r\n                return codeGenerator.EmitSetStaticPropertyOperator(type, null, node.FieldNameExpr, writeRef);\r\n\r\n                // obsolete:\r\n                //codeGenerator.IL.Emit(OpCodes.Ldstr, className.QualifiedName.ToString());\r\n                //codeGenerator.EmitBoxing(fieldNameExpr.Emit(codeGenerator));\r\n\r\n                //return delegate(CodeGenerator codeGen)\r\n                //{\r\n                //  codeGen.EmitLoadClassContext();\r\n                //  codeGen.EmitLoadScriptContext();\r\n                //  codeGen.EmitLoadNamingContext();\r\n\r\n                //  // invoke the operator\r\n                //  codeGen.IL.EmitCall(OpCodes.Call, Methods.Operators.SetStaticProperty, null);\r\n                //};\r\n            }\r\n\r\n            internal override PhpTypeCode EmitEnsure(IndirectStFldUse/*!*/node, CodeGenerator/*!*/ codeGenerator, ChainBuilder chain)\r\n            {\r\n                return chain.EmitEnsureStaticProperty(node.TypeRef, null, node.FieldNameExpr, chain.IsArrayItem);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that &quot;unset&quot; a static field.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// <para>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </para>\r\n            /// <para>\r\n            /// Call to the <see cref=\"Operators.UnsetStaticProperty\"/> error throwing operator is always emitted because static\r\n            /// fields cannot be unset.\r\n            /// </para>\r\n            /// </remarks>\r\n            internal override void EmitUnset(IndirectStFldUse/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.EmitUnsetStaticPropertyOperator(type, null, node.FieldNameExpr);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/FunctionCall.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n/*\r\n  \r\n NOTES:\r\n     possible access values for all FunctionCall subclasses: Read, None, ReadRef\r\n\t\t ReadRef is set even in cases when the function do NOT return ref:\r\n\t\t \r\n\t\t\tfunction g(&$a) {}\r\n\t\t\tfunction f() {}\r\n\t\t\tg(f());  ... calling f has access ReadRef\r\n\t\t\t$a =& f(); ... dtto\r\n\r\n*/\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region FunctionCall\r\n\r\n        abstract class FunctionCallCompiler<T> : VarLikeConstructUseCompiler<T> where T : FunctionCall\r\n        {\r\n            public override Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n                access = info.Access;\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(T node, CopyReason reason, int nestingLevel)\r\n            {\r\n                // J: PhpVariable.Copy is always emitted in Emit method if needed (access == Read && resultTypeCode is copiable)\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emit <see cref=\"PhpVariable.Copy\"/> if needed. It means <see cref=\"IExpressionCompiler.Access\"/> has to be <see cref=\"AccessType.Read\"/> and <paramref name=\"returnType\"/> has to be copiable.\r\n            /// </summary>\r\n            /// <param name=\"il\">The <see cref=\"ILEmitter\"/>.</param>\r\n            /// <param name=\"returnType\"><see cref=\"PhpTypeCode\"/> of function call return value.</param>\r\n            protected void EmitReturnValueCopy(ILEmitter/*!*/il, PhpTypeCode returnType)\r\n            {\r\n                Debug.Assert(il != null);\r\n\r\n                // copy only if we are reading the return value &&\r\n                // only if return type is copiable:\r\n                if (access != AccessType.None &&   // reading, not literals:\r\n                    PhpTypeCodeEnum.IsDeeplyCopied(returnType) &&\r\n                    returnType != PhpTypeCode.PhpReference) // PhpSmartReference can be an issue if method returns an object field (but this is handled by binders)\r\n                {\r\n                    il.LdcI4((int)CopyReason.ReturnedByCopy);\r\n                    il.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region DirectFcnCall\r\n\r\n        [NodeCompiler(typeof(DirectFcnCall))]\r\n        sealed class DirectFcnCallCompiler : FunctionCallCompiler<DirectFcnCall>\r\n        {\r\n            /// <summary>\r\n\t\t    /// A list of inlined functions.\r\n\t\t    /// </summary>\r\n\t\t    private enum InlinedFunction\r\n\t\t    {\r\n\t\t\t    None,\r\n\t\t\t    CreateFunction\r\n\t\t    }\r\n\r\n            public DRoutine routine;\r\n            public int overloadIndex = DRoutine.InvalidOverloadIndex;\r\n\r\n            /// <summary>\r\n            /// Type of <see cref=\"VarLikeConstructUse.IsMemberOf\"/> if can be resolved statically. Otherwise <c>null</c>.\r\n            /// </summary>\r\n            public DType isMemberOfType;\r\n\r\n            /// <summary>\r\n            /// An inlined function represented by the node (if any).\r\n            /// </summary>\r\n            private InlinedFunction inlined = InlinedFunction.None;\r\n            \r\n            /// <summary>\r\n            /// Gets type of <see cref=\"VarLikeConstructUse.IsMemberOf\"/> expression if can be resolved.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"analyzer\">Analyzer.</param>\r\n            /// <returns><see cref=\"DType\"/> or <c>null</c> reference if type could not be resolved.</returns>\r\n            private DType GetIsMemberOfType(DirectFcnCall/*!*/node, Analyzer/*!*/analyzer)\r\n            {\r\n                if (node.IsMemberOf == null)\r\n                    return null;\r\n\r\n                DirectVarUse memberDirectVarUse = node.IsMemberOf as DirectVarUse;\r\n\r\n                if (memberDirectVarUse != null && memberDirectVarUse.IsMemberOf == null &&  // isMemberOf is single variable\r\n                    memberDirectVarUse.VarName.IsThisVariableName)                          // isMemberOf if $this\r\n                {\r\n                    // $this->\r\n                    return analyzer.CurrentType;\r\n                }\r\n                else if (node.IsMemberOf is NewEx)\r\n                {\r\n                    // (new T)->\r\n                    return TypeRefHelper.ResolvedType(((NewEx)node.IsMemberOf).ClassNameRef);\r\n                }\r\n\r\n                //\r\n                return null;\r\n            }\r\n\r\n            public override Evaluation Analyze(DirectFcnCall node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                if (node.IsMemberOf == null)\r\n                {\r\n                    // function call //\r\n\r\n                    return AnalyzeFunctionCall(node, analyzer, ref info);\r\n                }\r\n                else\r\n                {\r\n                    // method call //\r\n\r\n                    Debug.Assert(!(node.FallbackQualifiedName.HasValue));   // only valid for global function call\r\n                    return AnalyzeMethodCall(node, analyzer, ref info);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Analyze the function call (isMemberOf == null).\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"analyzer\"></param>\r\n            /// <param name=\"info\"></param>\r\n            /// <returns></returns>\r\n            /// <remarks>This code fragment is separated to save the stack when too long Expression chain is being compiled.</remarks>\r\n            private Evaluation AnalyzeFunctionCall(DirectFcnCall node, Analyzer/*!*/ analyzer, ref ExInfoFromParent info)\r\n            {\r\n                Debug.Assert(node.IsMemberOf == null);\r\n\r\n                // resolve name:\r\n                routine = analyzer.ResolveFunctionName(node.QualifiedName, node.Span);\r\n\r\n                if (routine.IsUnknown)\r\n                {\r\n                    // note: we've to try following at run time, there can be dynamically added namespaced function matching qualifiedName\r\n                    // try fallback\r\n                    if (node.FallbackQualifiedName.HasValue)\r\n                    {\r\n                        var fallbackroutine = analyzer.ResolveFunctionName(node.FallbackQualifiedName.Value, node.Span);\r\n                        if (fallbackroutine != null && !fallbackroutine.IsUnknown)\r\n                        {\r\n                            if (fallbackroutine is PhpLibraryFunction)  // we are calling library function directly\r\n                                routine = fallbackroutine;\r\n                        }\r\n                    }\r\n\r\n                    if (routine.IsUnknown)   // still unknown ?\r\n                        Statistics.AST.AddUnknownFunctionCall(node.QualifiedName);\r\n                }\r\n                // resolve overload if applicable:\r\n                RoutineSignature signature;\r\n                overloadIndex = routine.ResolveOverload(analyzer, node.CallSignature, node.Span, out signature);\r\n\r\n                Debug.Assert(overloadIndex != DRoutine.InvalidOverloadIndex, \"A function should have at least one overload\");\r\n\r\n                if (routine is PhpLibraryFunction)\r\n                {\r\n                    var opts = ((PhpLibraryFunction)routine).Options;\r\n                    // warning if not supported function call is detected\r\n                    if ((opts & FunctionImplOptions.NotSupported) != 0)\r\n                        analyzer.ErrorSink.Add(Warnings.NotSupportedFunctionCalled, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString());\r\n\r\n                    // warning if function requiring locals is detected (performance critical)\r\n                    if ((opts & FunctionImplOptions.NeedsVariables) != 0 && !analyzer.CurrentScope.IsGlobal)\r\n                        analyzer.ErrorSink.Add(Warnings.UnoptimizedLocalsInFunction, analyzer.SourceUnit, node.Span, node.QualifiedName.ToString());\r\n                }\r\n\r\n                // analyze parameters:\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, signature, info, false);\r\n\r\n                // get properties:\r\n                analyzer.AddCurrentRoutineProperty(routine.GetCallerRequirements());\r\n\r\n                // HACK: handle call to assert() function\r\n                if (node.QualifiedName.Name.Value.EqualsOrdinalIgnoreCase(\"assert\"))\r\n                {\r\n                    // replace DirectFcnCall with AssertEx\r\n                    var newnode = new AssertEx(node.Span, node.CallSignature);\r\n                    return newnode.Analyze(analyzer, info);\r\n                }\r\n\r\n                // replaces the node if its value can be determined at compile-time:\r\n                object value;\r\n                return TryEvaluate(node, analyzer, out value) ?\r\n                    new Evaluation(node, value) :\r\n                    new Evaluation(node);\r\n            }\r\n\r\n            private bool AnalyzeMethodCallOnKnownType(DirectFcnCall node, Analyzer/*!*/ analyzer, ref ExInfoFromParent info, DType type)\r\n            {\r\n                if (type == null || type.IsUnknown)\r\n                    return false;\r\n\r\n                bool runtimeVisibilityCheck, isCallMethod;\r\n                \r\n                routine = analyzer.ResolveMethod(\r\n                    type, node.QualifiedName.Name,\r\n                    node.Span,\r\n                    analyzer.CurrentType, analyzer.CurrentRoutine, false,\r\n                    out runtimeVisibilityCheck, out isCallMethod);\r\n\r\n                if (routine.IsUnknown)\r\n                    return false;\r\n\r\n                Debug.Assert(runtimeVisibilityCheck == false);  // can only be set to true if CurrentType or CurrentRoutine are null\r\n\r\n                // check __call\r\n                if (isCallMethod)\r\n                {\r\n                    // TODO: generic args\r\n\r\n                    var arg1 = new StringLiteral(node.Span, node.QualifiedName.Name.Value);\r\n                    var arg2 = node.CallSignature.BuildPhpArray();\r\n\r\n                    node.CallSignature = new CallSignature(\r\n                        new List<ActualParam>(2) {\r\n                                new ActualParam(arg1.Span, arg1),\r\n                                new ActualParam(arg2.Span, arg2)\r\n                            },\r\n                        new List<TypeRef>());\r\n                }\r\n\r\n                // resolve overload if applicable:\r\n                RoutineSignature signature;\r\n                overloadIndex = routine.ResolveOverload(analyzer, node.CallSignature, node.Span, out signature);\r\n\r\n                Debug.Assert(overloadIndex != DRoutine.InvalidOverloadIndex, \"A function should have at least one overload\");\r\n\r\n                // analyze parameters:\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, signature, info, false);\r\n\r\n                // get properties:\r\n                analyzer.AddCurrentRoutineProperty(routine.GetCallerRequirements());\r\n\r\n                return true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Analyze the method call (isMemberOf != null).\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"analyzer\"></param>\r\n            /// <param name=\"info\"></param>\r\n            /// <returns></returns>\r\n            private Evaluation AnalyzeMethodCall(DirectFcnCall node, Analyzer/*!*/ analyzer, ref ExInfoFromParent info)\r\n            {\r\n                Debug.Assert(node.IsMemberOf != null);\r\n\r\n                // resolve routine if IsMemberOf is resolved statically:\r\n                isMemberOfType = this.GetIsMemberOfType(node, analyzer);\r\n                if (this.AnalyzeMethodCallOnKnownType(node, analyzer, ref info, isMemberOfType))\r\n                    return new Evaluation(node);\r\n\r\n                // by default, fall back to dynamic method invocation\r\n                routine = null;\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, UnknownSignature.Default, info, false);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #region Evaluation\r\n\r\n            /// <summary>\r\n            /// Modifies AST if possible, in order to generate better code.\r\n            /// </summary>\r\n            /// <remarks>Some well-known constructs can be modified to be analyzed and emitted better.</remarks>\r\n            private void AnalyzeSpecial(DirectFcnCall node, Analyzer/*!*/ analyzer)\r\n            {\r\n                if (routine is PhpLibraryFunction)\r\n                {\r\n                    // basename(__FILE__, ...) -> basename(\"actual_file\", ...)  // SourceRoot can be ignored in this case\r\n                    if (routine.FullName.EqualsOrdinalIgnoreCase(\"basename\"))\r\n                        if (node.CallSignature.Parameters.Any())\r\n                        {\r\n                            var path_param = node.CallSignature.Parameters[0];\r\n                            var path_expr = path_param.Expression;\r\n                            if (path_expr is PseudoConstUse && ((PseudoConstUse)path_expr).Type == PseudoConstUse.Types.File)\r\n                                node.CallSignature.Parameters[0] = new ActualParam(path_param.Span, new StringLiteral(path_expr.Span, analyzer.SourceUnit.SourceFile.RelativePath.Path));\r\n                        }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Tries to determine a value of the node.\r\n            /// </summary>\r\n            /// <returns>\r\n            /// Whether the function call can be evaluated at compile time. <B>true</B>, \r\n            /// if the function is a special library one and the correct number of arguments \r\n            /// is specified in the call and all that arguments are evaluable.\r\n            /// </returns>\r\n            private bool TryEvaluate(DirectFcnCall node, Analyzer/*!*/ analyzer, out object value)\r\n            {\r\n                // special cases, allow some AST transformation:\r\n                this.AnalyzeSpecial(node, analyzer);\r\n\r\n                // try evaluate function call in compile time:\r\n                if (node.CallSignature.AllParamsHaveValue())\r\n                {\r\n                    PureFunctionAttribute pureAttribute;\r\n\r\n                    // PhpLibraryFunction with PureFunctionAttribute can be evaluated\r\n                    PhpLibraryFunction lib_function;\r\n\r\n                    if ((lib_function = routine as PhpLibraryFunction) != null &&\r\n                        (pureAttribute = PureFunctionAttribute.Reflect(lib_function.Overloads[overloadIndex].Method)) != null)\r\n                    {\r\n                        // the method to be used for evaluation\r\n                        MethodInfo evaluableMethod = pureAttribute.CallSpecialMethod ?\r\n                            pureAttribute.SpecialMethod :\r\n                            lib_function.Overloads[overloadIndex].Method;\r\n\r\n                        Debug.Assert(evaluableMethod != null);\r\n\r\n                        if (evaluableMethod.ContainsGenericParameters)\r\n                            throw new ArgumentException(\"Evaluable method '\" + evaluableMethod.Name + \"' cannot contain generic parameters.\");\r\n\r\n                        var parametersInfo = evaluableMethod.GetParameters();\r\n\r\n                        object[] invokeParameters = new object[parametersInfo.Length];\r\n\r\n                        // convert/create proper parameters value:\r\n                        int nextCallParamIndex = 0;\r\n\r\n                        for (int i = 0; i < parametersInfo.Length; ++i)\r\n                        {\r\n                            ParameterInfo paramInfo = parametersInfo[i];\r\n                            Type paramType = paramInfo.ParameterType;\r\n\r\n                            // only In parameters are allowed\r\n#if !SILVERLIGHT\r\n                            Debug.Assert(!paramInfo.IsOut && !paramInfo.IsRetval);\r\n#else\r\n                        Debug.Assert(!paramInfo.IsOut && !ParameterInfoEx.IsRetVal(paramInfo));\r\n#endif\r\n\r\n                            // perform parameter conversion:\r\n                            Action<Converter<object, object>> PassArgument = (converter) =>\r\n                                {\r\n                                    if (nextCallParamIndex >= node.CallSignature.Parameters.Length)\r\n                                        throw new ArgumentException(\"Not enough parameters in evaluable method.\");\r\n\r\n                                    object obj = node.CallSignature.Parameters[nextCallParamIndex++].Expression.GetValue();\r\n                                    invokeParameters[i] = converter(obj);\r\n                                };\r\n\r\n                            // special params types:\r\n                            if (paramType == typeof(Analyzer))\r\n                            {\r\n                                invokeParameters[i] = analyzer;\r\n                            }\r\n                            else if (paramType == typeof(CallSignature))\r\n                            {\r\n                                invokeParameters[i] = node.CallSignature;\r\n                            }\r\n                            else if (   // ... , params object[] // last parameter\r\n                                paramType == typeof(object[]) &&\r\n                                i == parametersInfo.Length - 1 &&\r\n                                parametersInfo[i].IsDefined(typeof(ParamArrayAttribute), false))\r\n                            {\r\n                                // params object[]\r\n                                var args = new object[node.CallSignature.Parameters.Length - nextCallParamIndex];\r\n                                for (int arg = 0; arg < args.Length; ++nextCallParamIndex, ++arg)\r\n                                    args[arg] = node.CallSignature.Parameters[nextCallParamIndex].Expression.GetValue();\r\n\r\n                                invokeParameters[i] = args;\r\n                            }\r\n                            // PHP value types:\r\n                            else if (paramType == typeof(object))\r\n                                PassArgument(obj => obj);\r\n                            else if (paramType == typeof(PhpBytes))\r\n                                PassArgument(Convert.ObjectToPhpBytes);\r\n                            else if (paramType == typeof(string))\r\n                                PassArgument(Convert.ObjectToString);\r\n                            else if (paramType == typeof(int))\r\n                                PassArgument(obj => (object)Convert.ObjectToInteger(obj));\r\n                            else if (paramType == typeof(bool))\r\n                                PassArgument(obj => (object)Convert.ObjectToBoolean(obj));\r\n                            else if (paramType == typeof(double))\r\n                                PassArgument(obj => (object)Convert.ObjectToDouble(obj));\r\n                            else if (paramType == typeof(long))\r\n                                PassArgument(obj => (object)Convert.ObjectToLongInteger(obj));\r\n                            else if (paramType == typeof(char))\r\n                                PassArgument(obj => (object)Convert.ObjectToChar(obj));\r\n                            else\r\n                                throw new ArgumentException(\"Parameter type \" + paramType.ToString() + \" cannot be used in evaluable method.\", paramInfo.Name);\r\n                        }\r\n\r\n                        // catch runtime errors\r\n                        var oldErrorOverride = PhpException.ThrowCallbackOverride;\r\n                        if (!(analyzer.ErrorSink is EvalErrorSink || analyzer.ErrorSink is WebErrorSink)) // avoid infinite recursion, PhpExceptions in such cases are passed\r\n                            PhpException.ThrowCallbackOverride = (error, message) =>\r\n                            {\r\n                                var position = new Text.TextSpan(analyzer.SourceUnit, node.Span);\r\n                                analyzer.ErrorSink.AddInternal(\r\n                                    -2,\r\n                                    message, (error == PhpError.Error || error == PhpError.CoreError || error == PhpError.UserError) ? ErrorSeverity.Error : ErrorSeverity.Warning,\r\n                                    (int)WarningGroups.None,\r\n                                    analyzer.SourceUnit.GetMappedFullSourcePath(position.FirstLine),\r\n                                    new ErrorPosition(\r\n                                        analyzer.SourceUnit.GetMappedLine(position.FirstLine) + 1, position.FirstColumn + 1,\r\n                                        analyzer.SourceUnit.GetMappedLine(position.LastLine) + 1, position.LastColumn + 1),\r\n                                    true\r\n                                    );\r\n                            };\r\n\r\n                        // invoke the method and get the result\r\n                        try\r\n                        {\r\n                            value = evaluableMethod.Invoke(null, invokeParameters);\r\n\r\n                            if (evaluableMethod.ReturnType == typeof(FunctionCallEvaluateInfo))\r\n                            {\r\n                                var info = value as FunctionCallEvaluateInfo;\r\n\r\n                                if (info != null && info.emitDeclareLamdaFunction && info.newRoutine != null)\r\n                                {\r\n                                    routine = info.newRoutine;\r\n                                    inlined = InlinedFunction.CreateFunction;\r\n                                    return false;   // \r\n                                }\r\n\r\n                                if (info == null)\r\n                                    return false;\r\n\r\n                                value = info.value;\r\n                            }\r\n\r\n                            // apply automatic cast to false if CastToFalse attribute is defined:\r\n                            if (evaluableMethod.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false))\r\n                            {\r\n                                if ((value == null) ||\r\n                                    (value is int && (int)value == -1))\r\n                                    value = false;\r\n                            }\r\n\r\n                            // pass the value\r\n                            return true;\r\n                        }\r\n                        finally\r\n                        {\r\n                            PhpException.ThrowCallbackOverride = oldErrorOverride;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // function cannot be evaluated\r\n                value = null;\r\n                return false;\r\n\r\n                /*\r\n\r\n                // skips functions without \"special\" flag set:\r\n                //PhpLibraryFunction lib_function = routine as PhpLibraryFunction;\r\n                if (lib_function == null || (lib_function.Options & FunctionImplOptions.Special) == 0)\r\n                {\r\n                    value = null;\r\n                    return false;\r\n                }\r\n\r\n                switch (callSignature.Parameters.Length)\r\n                {\r\n                    case 0:\r\n                        {\r\n                            if (lib_function.Name.EqualsLowercase(\"phpversion\"))\r\n                            {\r\n                                value = PhpVersion.Current;\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"pi\"))\r\n                            {\r\n                                value = Math.PI;\r\n                                return true;\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 1:\r\n                        {\r\n                            // tries to evaluate the parameter:\r\n                            if (!callSignature.Parameters[0].Expression.HasValue) break;\r\n\r\n                            object param = callSignature.Parameters[0].Expression.Value;\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"function_exists\"))\r\n                            {\r\n                                // jakub: if this returns true, it is evaluable, in case of false, we should try it during the runtime again\r\n\r\n                                // TODO:\r\n                                //Name function_name = new Name(Convert.ObjectToString(param));\r\n                                //OverloadInfo overload;\r\n\r\n                                //// only library functions can be checked; others depends on the current set of declarators:\r\n                                //ApplicationContext.Functions.Get(function_name, 0, out overload);\r\n                                //value = overload.GetUserEntryPoint != null;\r\n\r\n                                //return overload.GetUserEntryPoint != null;\r\n                                value = false;\r\n                                return false;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"strlen\"))\r\n                            {\r\n                                value = Convert.ObjectToString(param).Length;\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"round\"))\r\n                            {\r\n                                value = Math.Round(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"sqrt\"))\r\n                            {\r\n                                value = Math.Sqrt(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"exp\"))\r\n                            {\r\n                                value = Math.Exp(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"log\"))\r\n                            {\r\n                                value = Math.Log(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"ceil\"))\r\n                            {\r\n                                value = Math.Ceiling(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"floor\"))\r\n                            {\r\n                                value = Math.Floor(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"deg2rad\"))\r\n                            {\r\n                                value = Convert.ObjectToDouble(param) / 180 * Math.PI;\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"cos\"))\r\n                            {\r\n                                value = Math.Cos(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"sin\"))\r\n                            {\r\n                                value = Math.Sin(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"tan\"))\r\n                            {\r\n                                value = Math.Tan(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"acos\"))\r\n                            {\r\n                                value = Math.Acos(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"asin\"))\r\n                            {\r\n                                value = Math.Asin(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"atan\"))\r\n                            {\r\n                                value = Math.Atan(Convert.ObjectToDouble(param));\r\n                                return true;\r\n                            }\r\n\r\n                            break;\r\n                        }\r\n\r\n                    case 2:\r\n                        {\r\n                            // tries to evaluate the parameters:\r\n                            if (!callSignature.Parameters[0].Expression.HasValue) break;\r\n                            if (!callSignature.Parameters[1].Expression.HasValue) break;\r\n\r\n                            object param1 = callSignature.Parameters[0].Expression.Value;\r\n                            object param2 = callSignature.Parameters[1].Expression.Value;\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"version_compare\"))\r\n                            {\r\n                                value = PhpVersion.Compare(Convert.ObjectToString(param1), Convert.ObjectToString(param2));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"log\"))\r\n                            {\r\n                                value = MathEx.Log(Convert.ObjectToDouble(param1), Convert.ObjectToDouble(param2));\r\n                                return true;\r\n                            }\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"create_function\"))\r\n                            {\r\n                                // has to be a valid identifier:\r\n                                string function_name = \"__\" + Guid.NewGuid().ToString().Replace('-', '_');\r\n\r\n                                string prefix1, prefix2;\r\n                                DynamicCode.GetLamdaFunctionCodePrefixes(function_name, Convert.ObjectToString(param1), out prefix1, out prefix2);\r\n\r\n                                Position pos_args = callSignature.Parameters[0].Position;\r\n                                Position pos_body = callSignature.Parameters[1].Position;\r\n\r\n                                // function __XXXXXX(<args>){<fill><body>}\r\n                                string fill = GetInlinedLambdaCodeFill(pos_args, pos_body);\r\n                                string code = String.Concat(prefix2, fill, Convert.ObjectToString(param2), \"}\");\r\n\r\n                                // the position of the first character of the parsed code:\r\n                                // (note that escaped characters distort position a little bit, which cannot be eliminated so easily)\r\n                                Position pos = Position.Initial;\r\n                                pos.FirstOffset = pos_args.FirstOffset - prefix1.Length + 1;\r\n                                pos.FirstColumn = pos_args.FirstColumn - prefix1.Length + 1;\r\n                                pos.FirstLine = pos_args.FirstLine;\r\n\r\n                                // parses function source code:\r\n                                List<Statement> statements = analyzer.BuildAst(pos, code);\r\n\r\n                                if (statements == null)\r\n                                    break;\r\n\r\n                                FunctionDecl decl_node = (FunctionDecl)statements[0];\r\n\r\n                                // modify declaration:\r\n                                this.routine = decl_node.ConvertToLambda(analyzer);\r\n\r\n                                // adds declaration to the end of the global code statement list:\r\n                                analyzer.AddLambdaFcnDeclaration(decl_node);\r\n\r\n                                this.inlined = InlinedFunction.CreateFunction;\r\n\r\n                                // we cannot replace the expression with literal (emission of lambda declaration is needed):\r\n                                value = null;\r\n                                return false;\r\n                            }\r\n\r\n                            break;\r\n                        }\r\n\r\n                    case 3:\r\n                        {\r\n                            // tries to evaluate the parameters:\r\n                            if (!callSignature.Parameters[0].Expression.HasValue) break;\r\n                            if (!callSignature.Parameters[1].Expression.HasValue) break;\r\n                            if (!callSignature.Parameters[2].Expression.HasValue) break;\r\n\r\n                            object param1 = callSignature.Parameters[0].Expression.Value;\r\n                            object param2 = callSignature.Parameters[1].Expression.Value;\r\n                            object param3 = callSignature.Parameters[2].Expression.Value;\r\n\r\n                            if (lib_function.Name.EqualsLowercase(\"version_compare\"))\r\n                            {\r\n                                value = PhpVersion.Compare(Convert.ObjectToString(param1), Convert.ObjectToString(param2),\r\n                                    Convert.ObjectToString(param3));\r\n\r\n                                return true;\r\n                            }\r\n                            break;\r\n                        }\r\n                }\r\n\r\n                value = null;\r\n                return false;\r\n             \r\n                */\r\n            }\r\n\r\n            #endregion\r\n\r\n            ///// <include file='Doc/Nodes.xml' path='doc/method[@name=\"IsDeeplyCopied\"]/*'/>\r\n            //internal override bool IsDeeplyCopied(CopyReason reason, int nestingLevel)\r\n            //{\r\n            //    // emit copy only if the call itself don't do that:\r\n            //    // J: PhpVariable.Copy is always emitted in Emit method if needed (access == Read && resultTypeCode is copiable)\r\n            //    return routine == null || !routine.ReturnValueDeepCopyEmitted;  // true if Copy has to be emitted by parent expression ($a = func())\r\n            //}\r\n\r\n            public override PhpTypeCode Emit(DirectFcnCall node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(\r\n                    access == AccessType.Read ||\r\n                    access == AccessType.ReadRef ||\r\n                    access == AccessType.ReadUnknown ||\r\n                    access == AccessType.None,\r\n                    \"Invalid access type in FunctionCall\");\r\n\r\n                Statistics.AST.AddNode(\"FunctionCall.Direct\");\r\n\r\n                PhpTypeCode result;\r\n                if (inlined != InlinedFunction.None)\r\n                {\r\n                    result = EmitInlinedFunctionCall(codeGenerator);\r\n                }\r\n                else\r\n                {\r\n                    if (alreadyEmittedPlace != null)\r\n                    {\r\n                        // continuation of HandleLongChain,\r\n                        // this DirectFcnCall was already emitted\r\n                        // and the result was stored into local variable.\r\n                        codeGenerator.IL.Emit(OpCodes.Ldloc, alreadyEmittedPlace);\r\n                        result = PhpTypeCodeEnum.FromType(alreadyEmittedPlace.LocalType);\r\n                    }\r\n                    else\r\n                        // this node actually represents a method call:\r\n                        if (node.IsMemberOf != null)\r\n                        {\r\n                            // to avoid StackOverflowException due to long isMemberOf chain,\r\n                            // we will avoid recursion, and divide the chain into smaller pieces.\r\n                            HandleLongChain((DirectFcnCall)node, codeGenerator);\r\n\r\n                            if (routine == null)\r\n                            {\r\n                                //result = codeGenerator.EmitRoutineOperatorCall(null, isMemberOf, qualifiedName.ToString(), null, null, callSignature, access);\r\n                                result = codeGenerator.CallSitesBuilder.EmitMethodCall(\r\n                                    codeGenerator,\r\n                                    CallSitesBuilder.AccessToReturnType(access),\r\n                                    node.IsMemberOf, null,\r\n                                    node.QualifiedName.ToString(), null,\r\n                                    node.CallSignature);\r\n                            }\r\n                            else\r\n                                result = routine.EmitCall(\r\n                                    codeGenerator, null, node.CallSignature,\r\n                                    new ExpressionPlace(codeGenerator, node.IsMemberOf), false, overloadIndex,\r\n                                    isMemberOfType, node.Span, access, true);\r\n                        }\r\n                        else\r\n                        {\r\n                            var fallbackFunctionName = node.FallbackQualifiedName.HasValue ? node.FallbackQualifiedName.Value.ToString() : null;\r\n\r\n                            // the node represents a function call:\r\n                            result = routine.EmitCall(\r\n                                codeGenerator, fallbackFunctionName,\r\n                                node.CallSignature, null, false, overloadIndex,\r\n                                null, node.Span, access, false);\r\n                        }\r\n                }\r\n\r\n                // (J) Emit Copy if necessary:\r\n                // routine == null => Copy emitted by EmitRoutineOperatorCall\r\n                // routine.ReturnValueDeepCopyEmitted => Copy emitted\r\n                // otherwise emit Copy if we are going to read it by value\r\n                if (routine != null && !routine.ReturnValueDeepCopyEmitted)\r\n                    EmitReturnValueCopy(codeGenerator.IL, result);\r\n\r\n                // handles return value:\r\n                codeGenerator.EmitReturnValueHandling(node, codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue, ref result);\r\n\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// To avoid <see cref=\"StackOverflowException\"/> due to long <see cref=\"VarLikeConstructUse.IsMemberOf\"/> chain,\r\n            /// we will avoid recursion, and divide the chain into smaller pieces.\r\n            /// </summary>\r\n            private void HandleLongChain(DirectFcnCall node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                int length = 300;\r\n                VarLikeConstructUse p = node.IsMemberOf;\r\n                while (p != null && length > 0)\r\n                {\r\n                    if (p.GetType() == typeof(DirectFcnCall) &&\r\n                        ((DirectFcnCall)p).NodeCompiler<DirectFcnCallCompiler>().alreadyEmittedPlace != null)\r\n                        return; // chain already divided here\r\n\r\n                    p = p.IsMemberOf;\r\n                    length--;\r\n                }\r\n\r\n                if (length == 0 && p != null && p.GetType() == typeof(DirectFcnCall))\r\n                {\r\n                    var/*!*/fcn = (DirectFcnCall)p;\r\n                    var/*!*/fcnCompiler = fcn.NodeCompiler<DirectFcnCallCompiler>();\r\n\r\n                    var result = fcnCompiler.Emit(fcn, codeGenerator);\r\n                    fcnCompiler.alreadyEmittedPlace = codeGenerator.IL.DeclareLocal(PhpTypeCodeEnum.ToType(result));\r\n                    codeGenerator.IL.Emit(OpCodes.Stloc, fcnCompiler.alreadyEmittedPlace);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Once function call is emitted into a local variable,\r\n            /// remember it to load it next time when <see cref=\"Emit\"/> is called.\r\n            /// </summary>\r\n            private LocalBuilder alreadyEmittedPlace = null;\r\n\r\n            /// <summary>\r\n            /// Emits library function that can be inlined.\r\n            /// </summary>\r\n            private PhpTypeCode EmitInlinedFunctionCall(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                switch (inlined)\r\n                {\r\n                    case InlinedFunction.CreateFunction:\r\n                        {\r\n                            PhpFunction php_function = (PhpFunction)routine;\r\n\r\n                            // define builders (not defined earlier as the lambda function it is not in the tables):\r\n                            php_function.DefineBuilders();\r\n\r\n                            // LOAD PhpFunction.DeclareLamda(context,<delegate>);\r\n                            Debug.Assert(php_function.ArgLessInfo != null); \r\n                            codeGenerator.EmitDeclareLamdaFunction(php_function.ArgLessInfo);\r\n\r\n                            // bake (not baked later as the lambda function it is not in the tables):\r\n                            php_function.Bake();\r\n\r\n                            return PhpTypeCode.String;\r\n                        }\r\n\r\n                    default:\r\n                        Debug.Fail(\"Unimplemented inlined function.\");\r\n                        return PhpTypeCode.Invalid;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IndirectFcnCall\r\n\r\n        [NodeCompiler(typeof(IndirectFcnCall))]\r\n        sealed class IndirectFcnCallCompiler : FunctionCallCompiler<IndirectFcnCall>\r\n        {\r\n            public override Evaluation Analyze(IndirectFcnCall node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                node.nameExpr = node.NameExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, UnknownSignature.Default, info, false);\r\n\r\n                // function call:\r\n                if (node.IsMemberOf == null)\r\n                    analyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsIndirectFcnCall);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(IndirectFcnCall node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.ReadRef ||\r\n                    access == AccessType.ReadUnknown || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"FunctionCall.Indirect\");\r\n\r\n                PhpTypeCode result;\r\n                result = codeGenerator.EmitRoutineOperatorCall(null, node.IsMemberOf, null, null, node.NameExpr, node.CallSignature, access);\r\n                //EmitReturnValueCopy(codeGenerator.IL, result); // (J) already emitted by EmitRoutineOperatorCall\r\n\r\n                codeGenerator.EmitReturnValueHandling(node, codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue, ref result);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region StaticMtdCall\r\n        \r\n        abstract class StaticMtdCallCompiler<T> : FunctionCallCompiler<T> where T : StaticMtdCall\r\n        {\r\n            protected DType/*!A*/type;\r\n\r\n            public override Evaluation Analyze(T node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                var typeRef = node.TypeRef;\r\n\r\n                TypeRefHelper.Analyze(typeRef, analyzer);\r\n                type = TypeRefHelper.ResolvedTypeOrUnknown(typeRef);\r\n\r\n                // analyze constructed type (new constructed type cane be used here):\r\n                analyzer.AnalyzeConstructedType(type);\r\n\r\n                if (type.TypeDesc.Equals(DTypeDesc.InterlockedTypeDesc))\r\n                    analyzer.ErrorSink.Add(Warnings.ClassBehaviorMayBeUnexpected, analyzer.SourceUnit, node.Span, type.FullName);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region DirectStMtdCall\r\n\r\n        [NodeCompiler(typeof(DirectStMtdCall))]\r\n        sealed class DirectStMtdCallCompiler : StaticMtdCallCompiler<DirectStMtdCall>\r\n        {\r\n            private DRoutine method;\r\n            private int overloadIndex = DRoutine.InvalidOverloadIndex;\r\n            private bool runtimeVisibilityCheck;\r\n\r\n            public override Evaluation Analyze(DirectStMtdCall node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                // look for the method:\r\n                bool isCallMethod;\r\n                method = analyzer.ResolveMethod(\r\n                    type, node.MethodName, node.Span, analyzer.CurrentType, analyzer.CurrentRoutine,\r\n                    true, out runtimeVisibilityCheck, out isCallMethod);\r\n\r\n                if (!method.IsUnknown)\r\n                {\r\n                    // we are sure about the method //\r\n\r\n                    if (method.IsAbstract)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.AbstractMethodCalled, analyzer.SourceUnit, node.Span,\r\n                            method.DeclaringType.FullName, method.FullName);\r\n                    }\r\n                }\r\n\r\n                // check __callStatic\r\n                if (isCallMethod)\r\n                {\r\n                    // TODO: generic args\r\n\r\n                    // create new CallSignature({function name},{args})\r\n                    var arg1 = new StringLiteral(node.Span, node.MethodName.Value);\r\n                    var arg2 = node.CallSignature.BuildPhpArray();\r\n\r\n                    node.CallSignature = new CallSignature(\r\n                        new List<ActualParam>(2) {\r\n                                new ActualParam(arg1.Span, arg1),\r\n                                new ActualParam(arg2.Span, arg2)\r\n                            },\r\n                        new List<TypeRef>());\r\n                }\r\n\r\n                // analyze the method\r\n                RoutineSignature signature;\r\n                overloadIndex = method.ResolveOverload(analyzer, node.CallSignature, node.Span, out signature);\r\n\r\n                Debug.Assert(overloadIndex != DRoutine.InvalidOverloadIndex, \"Each method should have at least one overload\");\r\n\r\n                // analyze arguments\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, signature, info, false);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(DirectStMtdCall node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"StaticMethodCall.Direct\");\r\n\r\n                IPlace instance = null;\r\n\r\n                // PHP allows for static invocations of instance method\r\n                if (!method.IsUnknown && !method.IsStatic)\r\n                {\r\n                    // if we are in an instance method and the $this for the callee is assignable from\r\n                    // current $this, then invoke the method directly with current $this\r\n                    if (codeGenerator.LocationStack.LocationType == LocationTypes.MethodDecl)\r\n                    {\r\n                        CompilerLocationStack.MethodDeclContext method_context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                        if (!method_context.Method.IsStatic && method.DeclaringType.IsAssignableFrom(method_context.Type))\r\n                        {\r\n                            instance = IndexedPlace.ThisArg;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // class context is unknown or the class is m-decl or completely unknown at compile-time -> call the operator\t\t\t\r\n                PhpTypeCode result = method.EmitCall(codeGenerator, null, node.CallSignature, instance, runtimeVisibilityCheck,\r\n                    overloadIndex, type, node.Span, access, false/* TODO: __call must be called virtually */);\r\n\r\n                if (/*method == null || */!method.ReturnValueDeepCopyEmitted)   // (J) Emit Copy only if method is known (=> known PhpRoutine do not emit Copy on return value)\r\n                    EmitReturnValueCopy(codeGenerator.IL, result);  // only if we are going to read the resulting value\r\n\r\n                // handles return value:\r\n                codeGenerator.EmitReturnValueHandling(node, codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue, ref result);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IndirectStMtdCall\r\n\r\n        [NodeCompiler(typeof(IndirectStMtdCall))]\r\n        sealed class IndirectStMtdCallCompiler : StaticMtdCallCompiler<IndirectStMtdCall>\r\n        {\r\n            public override Evaluation Analyze(IndirectStMtdCall node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                node.MethodNameVar.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, UnknownSignature.Default, info, false);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(IndirectStMtdCall node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"StaticMethodCall.Indirect\");\r\n\r\n                PhpTypeCode result = codeGenerator.EmitRoutineOperatorCall(type, null, null, null, node.MethodNameVar, node.CallSignature, access);\r\n                //EmitReturnValueCopy(codeGenerator.IL, result); // (J) already emitted by EmitRoutineOperatorCall\r\n\r\n                // handles return value:\r\n                codeGenerator.EmitReturnValueHandling(node, codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue, ref result);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Evaluation info used to get some info from evaluated functions.\r\n    /// </summary>\r\n    public class FunctionCallEvaluateInfo\r\n    {\r\n        public bool emitDeclareLamdaFunction;\r\n        public DRoutine newRoutine;\r\n        public object value;    // evaluated value\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/FunctionDecl.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region FormalParam\r\n\r\n        [NodeCompiler(typeof(FormalParam))]\r\n        sealed class FormalParamCompiler : INodeCompiler, IFormalParamCompiler\r\n        {\r\n            #region CustomAttributeProvider\r\n\r\n            private sealed class CustomAttributeProvider : IPhpCustomAttributeProvider\r\n            {\r\n                private readonly FormalParam node;\r\n\r\n                public CustomAttributeProvider(FormalParam node)\r\n                {\r\n                    this.node = node;\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider\r\n\r\n                public PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Parameter; } }\r\n                public AttributeTargets AcceptsTargets { get { return AttributeTargets.Parameter; } }\r\n\r\n                public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    var attributes = node.Attributes;\r\n                    if (attributes != null)\r\n                        return attributes.Count(type, selector);\r\n                    else\r\n                        return 0;\r\n                }\r\n\r\n                public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n\r\n                    switch (kind)\r\n                    {\r\n                        case SpecialAttributes.Out:\r\n                            node.IsOut = true;\r\n                            break;\r\n\r\n                        default:\r\n                            Debug.Fail(\"N/A\");\r\n                            throw null;\r\n                    }\r\n                }\r\n\r\n                public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n\r\n                    var nodecompiler = node.NodeCompiler<FormalParamCompiler>();\r\n                    nodecompiler.routine.Builder.ParameterBuilders[nodecompiler.routine.FirstPhpParameterIndex + nodecompiler.index].SetCustomAttribute(builder);\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            #endregion\r\n\r\n            public DType ResolvedTypeHint { get { return resolvedTypeHint; } }\r\n            private DType resolvedTypeHint;\r\n\r\n            /// <summary>\r\n            /// Declaring routine.\r\n            /// </summary>\r\n            private PhpRoutine/*!A*/ routine;\r\n\r\n            /// <summary>\r\n            /// Index in the <see cref=\"Signature\"/> tuple.\r\n            /// </summary>\r\n            private int index;\r\n            \r\n            #region Analysis\r\n\r\n            internal void AnalyzeMembers(FormalParam/*!*/node, Analyzer/*!*/ analyzer, PhpRoutine/*!*/ routine, int index)\r\n            {\r\n                this.routine = routine;\r\n                this.index = index;\r\n\r\n                PhpType referring_type;\r\n                Scope referring_scope;\r\n\r\n                if (routine.IsMethod)\r\n                {\r\n                    referring_type = routine.DeclaringPhpType;\r\n                    referring_scope = referring_type.Declaration.Scope;\r\n                }\r\n                else if (routine.IsLambdaFunction)\r\n                {\r\n                    referring_type = analyzer.CurrentType;\r\n                    referring_scope = analyzer.CurrentScope;\r\n                }\r\n                else\r\n                {\r\n                    referring_type = null;\r\n                    referring_scope = ((PhpFunction)routine).Declaration.Scope;\r\n                }\r\n\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                {\r\n                    attributes.AnalyzeMembers(analyzer, referring_scope);\r\n                }\r\n\r\n                resolvedTypeHint = analyzer.ResolveType(node.TypeHint, referring_type, routine, node.Span, false);\r\n            }\r\n\r\n            internal void Analyze(FormalParam/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                {\r\n                    node.Attributes.Analyze(analyzer, new CustomAttributeProvider(node));\r\n                }\r\n\r\n                if (node.InitValue != null)\r\n                    node.InitValue = node.InitValue.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                // adds arguments to local variables table:\r\n                if (!routine.Builder.LocalVariables.AddParameter(node.Name, node.PassedByRef))\r\n                {\r\n                    // parameter with the same name specified twice\r\n                    analyzer.ErrorSink.Add(Errors.DuplicateParameterName, analyzer.SourceUnit, node.Span, node.Name);\r\n                }\r\n\r\n                if (node.IsOut && !node.PassedByRef)\r\n                {\r\n                    // out can be used only on by-ref params:\r\n                    analyzer.ErrorSink.Add(Errors.OutAttributeOnByValueParam, analyzer.SourceUnit, node.Span, node.Name);\r\n                }\r\n\r\n                if (node.IsVariadic)\r\n                    throw new NotImplementedException();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            /// <summary>\r\n            /// Emits type hint test on the argument if specified.\r\n            /// </summary>\r\n            public void EmitTypeHintTest(FormalParam/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                int real_index = routine.FirstPhpParameterIndex + index;\r\n\r\n                // not type hint specified:\r\n                if (node.TypeHint == null) return;\r\n\r\n                Debug.Assert(resolvedTypeHint != null);\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n                Label endif_label = il.DefineLabel();\r\n\r\n                // IF (DEREF(ARG[argIdx]) is not of hint type) THEN\r\n                il.Ldarg(real_index);\r\n                if (node.PassedByRef) il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\r\n                resolvedTypeHint.EmitInstanceOf(codeGenerator, null);\r\n                il.Emit(OpCodes.Brtrue, endif_label);\r\n\r\n                // add a branch allowing null values if the argument is optional with null default value (since PHP 5.1.0);\r\n                if (node.InitValue != null && node.InitValue.HasValue() && node.InitValue.GetValue() == null)\r\n                {\r\n                    // IF (DEREF(ARG[argIdx]) != null) THEN\r\n                    il.Ldarg(real_index);\r\n                    if (node.PassedByRef) il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                    il.Emit(OpCodes.Brfalse, endif_label);\r\n                }\r\n\r\n                // CALL PhpException.InvalidArgumentType(<param_name>, <class_name>);\r\n                il.Emit(OpCodes.Ldstr, node.Name.ToString());\r\n                il.Emit(OpCodes.Ldstr, resolvedTypeHint.FullName);\r\n                codeGenerator.EmitPhpException(Methods.PhpException.InvalidArgumentType);\r\n\r\n                // END IF;\r\n                // END IF;\r\n                il.MarkLabel(endif_label);\r\n            }\r\n\r\n            internal void Emit(FormalParam/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                {\r\n                    attributes.Emit(codeGenerator, new CustomAttributeProvider(node));\r\n                }\r\n\r\n                // persists type hint to the [TypeHint] attribute: \r\n                if (resolvedTypeHint != null)\r\n                {\r\n                    ParameterBuilder param_builder = routine.Builder.ParameterBuilders[routine.FirstPhpParameterIndex + index];\r\n                    DTypeSpec spec = resolvedTypeHint.GetTypeSpec(codeGenerator.SourceUnit);\r\n                    param_builder.SetCustomAttribute(spec.ToCustomAttributeBuilder());\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Signature\r\n\r\n        struct SignatureCompiler\r\n        {\r\n            internal static void AnalyzeMembers(Signature node, Analyzer/*!*/ analyzer, PhpRoutine/*!*/ routine)\r\n            {\r\n                int last_mandatory_param_index = -1;\r\n                bool last_param_was_optional = false;\r\n                var formalParams = node.FormalParams;\r\n                BitArray alias_mask = new BitArray(formalParams.Length);\r\n                DType[] type_hints = new DType[formalParams.Length];\r\n\r\n                for (int i = 0; i < formalParams.Length; i++)\r\n                {\r\n                    var param = formalParams[i];\r\n                    var paramcompiler = param.NodeCompiler<FormalParamCompiler>();\r\n\r\n                    paramcompiler.AnalyzeMembers(param, analyzer, routine, i);\r\n\r\n                    alias_mask[i] = param.PassedByRef;\r\n                    type_hints[i] = paramcompiler.ResolvedTypeHint;\r\n\r\n                    if (param.InitValue == null && !param.IsVariadic)   // optional parameters\r\n                    {\r\n                        if (last_param_was_optional)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Warnings.MandatoryBehindOptionalParam, analyzer.SourceUnit,\r\n                                param.Span, param.Name);\r\n                        }\r\n\r\n                        last_mandatory_param_index = i;\r\n                        last_param_was_optional = false;\r\n                    }\r\n                    else\r\n                        last_param_was_optional = true;\r\n                }\r\n\r\n                routine.Signature.WriteUp(node.AliasReturn, alias_mask, type_hints, last_mandatory_param_index + 1);\r\n            }\r\n\r\n            internal static void Analyze(Signature node, Analyzer/*!*/ analyzer)\r\n            {\r\n                foreach (FormalParam param in node.FormalParams)\r\n                    param.NodeCompiler<FormalParamCompiler>()\r\n                        .Analyze(param, analyzer);\r\n            }\r\n\r\n            internal static void Emit(Signature node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                foreach (FormalParam param in node.FormalParams)\r\n                    param.NodeCompiler<FormalParamCompiler>()\r\n                        .Emit(param, codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region FunctionDecl\r\n\r\n        [NodeCompiler(typeof(FunctionDecl))]\r\n        sealed class FunctionDeclCompiler : StatementCompiler<FunctionDecl>, IFunctionDeclCompiler, IDeclarationNode, IPhpCustomAttributeProvider\r\n        {\r\n            public PhpFunction/*!*/ Function { get { return function; } }\r\n            private readonly PhpFunction/*!*/ function;\r\n\r\n            private readonly FunctionDecl/*!*/node;\r\n\r\n            #region Construction\r\n\r\n            public FunctionDeclCompiler(FunctionDecl/*!*/node)\r\n            {\r\n                this.node = node;\r\n\r\n                QualifiedName qn = (node.Namespace != null)\r\n                    ? new QualifiedName(node.Name, node.Namespace.QualifiedName)\r\n                    : new QualifiedName(node.Name);\r\n\r\n                function = new PhpFunction(\r\n                    qn, node.MemberAttributes, node.Signature, node.TypeSignature,\r\n                    node.IsConditional, node.Scope, (CompilationSourceUnit)node.SourceUnit, node.Span);\r\n\r\n                function.WriteUp(node.TypeSignature.ToPhpRoutineSignature(function));\r\n                function.Declaration.Node = this;\r\n            }\r\n            \r\n            #endregion\r\n\r\n            #region Analysis\r\n\r\n            void IDeclarationNode.PreAnalyze(Analyzer/*!*/ analyzer)\r\n            {\r\n                TypeSignatureCompiler.PreAnalyze(node.TypeSignature, analyzer, function);\r\n\r\n                if (function.Version.Next != null)\r\n                    function.Version.Next.Declaration.Node.PreAnalyze(analyzer);\r\n            }\r\n\r\n            void IDeclarationNode.AnalyzeMembers(Analyzer/*!*/ analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.AnalyzeMembers(analyzer, function.Declaration.Scope);\r\n\r\n                TypeSignatureCompiler.AnalyzeMembers(node.TypeSignature, analyzer, function.Declaration.Scope);\r\n                SignatureCompiler.AnalyzeMembers(node.Signature, analyzer, function);\r\n\r\n                // member-analyze the other versions:\r\n                if (function.Version.Next != null)\r\n                    function.Version.Next.Declaration.Node.AnalyzeMembers(analyzer);\r\n\r\n                function.Declaration.Node = null;\r\n            }\r\n\r\n            internal override Statement Analyze(FunctionDecl node, Analyzer analyzer)\r\n            {\r\n                // functions in incomplete (not emitted) class can't be emitted\r\n                function.Declaration.IsInsideIncompleteClass = analyzer.IsInsideIncompleteClass();\r\n\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Analyze(analyzer, this);\r\n                \r\n                // function is analyzed even if it is unreachable in order to discover more errors at compile-time:\r\n                function.Declaration.IsUnreachable = analyzer.IsThisCodeUnreachable();\r\n\r\n                if (function.Declaration.IsUnreachable)\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n\r\n                analyzer.EnterFunctionDeclaration(function);\r\n\r\n                TypeSignatureCompiler.Analyze(node.TypeSignature, analyzer);\r\n                SignatureCompiler.Analyze(node.Signature, analyzer);\r\n\r\n                function.Validate(analyzer.ErrorSink);\r\n\r\n                node.Body.Analyze(analyzer);\r\n\r\n                // validate function and its body:\r\n                function.ValidateBody(analyzer.ErrorSink);\r\n\r\n                /*\r\n                if (docComment != null)\r\n                    AnalyzeDocComment(analyzer);\r\n                */\r\n\r\n                analyzer.LeaveFunctionDeclaration();\r\n\r\n                if (function.Declaration.IsUnreachable)\r\n                {\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n                else\r\n                {\r\n                    // add entry point if applicable:\r\n                    analyzer.SetEntryPoint(function, node.Span);\r\n                    return node;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            internal override void Emit(FunctionDecl node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"FunctionDecl\");\r\n\r\n                // marks a sequence point if function is declared here (i.e. is m-decl):\r\n                //Note: this sequence point goes to the function where this function is declared not to this declared function!\r\n                if (!function.IsLambda && function.Declaration.IsConditional)\r\n                    codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                // emits attributes on the function itself, its return value, type parameters and regular parameters:\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Emit(codeGenerator, this);\r\n                SignatureCompiler.Emit(node.Signature, codeGenerator);\r\n                TypeSignatureCompiler.Emit(node.TypeSignature, codeGenerator);\r\n\r\n                // prepares code generator for emitting arg-full overload;\r\n                // false is returned when the body should not be emitted:\r\n                if (!codeGenerator.EnterFunctionDeclaration(function)) return;\r\n\r\n                // emits the arg-full overload:\r\n                codeGenerator.EmitArgfullOverloadBody(function, node.Body, node.EntireDeclarationSpan, node.DeclarationBodyPosition);\r\n\r\n                // restores original code generator settings:\r\n                codeGenerator.LeaveFunctionDeclaration();\r\n\r\n                // emits function declaration (if needed):\r\n                // ignore s-decl function declarations except for __autoload;\r\n                // __autoload function is declared in order to avoid using callbacks when called:\r\n                if (function.Declaration.IsConditional && !function.QualifiedName.IsAutoloadName)\r\n                {\r\n                    Debug.Assert(!function.IsLambda);\r\n                    codeGenerator.EmitDeclareFunction(function);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IPhpCustomAttributeProvider Members\r\n\r\n            public PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Function; } }\r\n\r\n            public AttributeTargets AcceptsTargets\r\n            {\r\n                get { return AttributeTargets.Method | AttributeTargets.ReturnValue; }\r\n            }\r\n\r\n            public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    return attributes.Count(type, selector);\r\n                else\r\n                    return 0;\r\n            }\r\n\r\n            public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                switch (kind)\r\n                {\r\n                    case SpecialAttributes.Export:\r\n                        function.Builder.ExportInfo = (ExportAttribute)attribute;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"N/A\");\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                if (selector == CustomAttribute.TargetSelectors.Return)\r\n                {\r\n                    function.Builder.ReturnParamBuilder.SetCustomAttribute(builder);\r\n                }\r\n                else\r\n                {\r\n                    // custom attributes ignored on functions in evals:\r\n                    ReflectionUtils.SetCustomAttribute(function.ArgFullInfo, builder);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            public PhpFunction/*!*/ ConvertToLambda(Analyzer/*!*/ analyzer)\r\n            {\r\n                function.ConvertToLambda();\r\n\r\n                // perform pre- and member- analyses:\r\n                ((IDeclarationNode)this).PreAnalyze(analyzer);\r\n                ((IDeclarationNode)this).AnalyzeMembers(analyzer);\r\n\r\n                // full analysis is performed later //\r\n\r\n                return function;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region IFormalParamCompiler\r\n\r\n    internal interface IFormalParamCompiler\r\n    {\r\n        void EmitTypeHintTest(FormalParam/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n    }\r\n\r\n    internal static class FormalParamCompilerHelper\r\n    {\r\n        public static void EmitTypeHintTest(this FormalParam/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<IFormalParamCompiler>().EmitTypeHintTest(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IFunctionDeclCompiler\r\n\r\n    internal interface IFunctionDeclCompiler : IStatementCompiler\r\n    {\r\n        PhpFunction/*!*/ Function { get; }\r\n        PhpFunction/*!*/ ConvertToLambda(Analyzer/*!*/ analyzer);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Helper class for accessing function declaration compiler methods.\r\n    /// </summary>\r\n    public static class FunctionDeclCompilerHelper\r\n    {\r\n        public static PhpFunction/*!*/ GetFunction(this FunctionDecl node)\r\n        {\r\n            return node.NodeCompiler<IFunctionDeclCompiler>().Function;\r\n        }\r\n        public static PhpFunction/*!*/ ConvertToLambda(this FunctionDecl node, Analyzer/*!*/ analyzer)\r\n        {\r\n            return node.NodeCompiler<IFunctionDeclCompiler>().ConvertToLambda(analyzer);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/GlobalCode.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region GlobalCode\r\n\r\n        [NodeCompiler(typeof(GlobalCode))]\r\n        sealed class GlobalCodeCompiler : INodeCompiler, IGlobalCodeCompiler\r\n        {\r\n            /// <summary>\r\n            /// Global variables. Not available in pure mode, non-null otherwise.\r\n            /// </summary>\r\n            public VariablesTable/*!*/ VarTable { get { return varTable; } }\r\n            private readonly VariablesTable/*!*/ varTable;\r\n\r\n            /// <summary>\r\n            /// Labels (PHP6 feature).\r\n            /// </summary>\r\n            public Dictionary<VariableName, Statement> Labels { get { return labels; } }\r\n            private readonly Dictionary<VariableName, Statement> labels;\r\n\r\n            public IncludingEx PrependedInclusion { get; set; }\r\n            public IncludingEx AppendedInclusion { get; set; }\r\n\r\n            public GlobalCodeCompiler(GlobalCode/*!*/ast)\r\n            {\r\n                if (!ast.SourceUnit.IsPure)\r\n                {\r\n                    this.varTable = new VariablesTable(20);\r\n                    this.varTable.SetAllRef();\r\n                    this.labels = new Dictionary<VariableName, Statement>();\r\n                }\r\n            }\r\n\r\n            #region Analysis\r\n\r\n            public void Analyze(GlobalCode/*!*/ast, Analyzer/*!*/ analyzer)\r\n            {\r\n                analyzer.LeaveUnreachableCode();\r\n\r\n                ExInfoFromParent info = new ExInfoFromParent(ast);\r\n\r\n                // analyze auto-prepended inclusion (no code reachability checks):\r\n                if (PrependedInclusion != null)\r\n                {\r\n                    info.Access = AccessType.None;\r\n                    PrependedInclusion.Analyze(analyzer, info);\r\n                }\r\n\r\n                for (int i = 0; i < ast.Statements.Length; i++) // NOTE: ast.Statements may change during analysis, iterate in this way!\r\n                {\r\n                    if (analyzer.IsThisCodeUnreachable() && ast.Statements[i].IsDeclaration)\r\n                    {\r\n                        //unreachable declarations in global code are valid\r\n                        analyzer.LeaveUnreachableCode();\r\n                        ast.Statements[i] = ast.Statements[i].Analyze(analyzer);\r\n                        analyzer.EnterUnreachableCode();\r\n                    }\r\n                    else\r\n                    {\r\n                        ast.Statements[i] = ast.Statements[i].Analyze(analyzer);\r\n                    }\r\n                }\r\n\r\n                if (!ast.SourceUnit.IsPure)\r\n                    Analyzer.ValidateLabels(analyzer.ErrorSink, ast.SourceUnit, labels);\r\n\r\n                // analyze auto-prepended inclusion (no code reachability checks):\r\n                if (AppendedInclusion != null)\r\n                {\r\n                    info.Access = AccessType.Read;\r\n                    AppendedInclusion.Analyze(analyzer, info);\r\n                }\r\n\r\n                analyzer.LeaveUnreachableCode();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            /// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Emit\"]/*'/>\r\n            /// <param name=\"ast\">Instance.</param>\r\n            public void Emit(GlobalCode/*!*/ast, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                // TODO: improve\r\n                codeGenerator.EnterGlobalCodeDeclaration(this.varTable, labels, (CompilationSourceUnit)ast.SourceUnit);\r\n\r\n                //\r\n                if (codeGenerator.CompilationUnit.IsTransient)\r\n                {\r\n                    codeGenerator.DefineLabels(labels);\r\n\r\n                    codeGenerator.ChainBuilder.Create();\r\n\r\n                    foreach (Statement statement in ast.Statements)\r\n                        statement.Emit(codeGenerator);\r\n\r\n                    codeGenerator.ChainBuilder.End();\r\n\r\n                    // return + appended file emission:\r\n                    codeGenerator.EmitRoutineEpilogue(ast, true);\r\n                }\r\n#if !SILVERLIGHT\r\n                else if (codeGenerator.CompilationUnit.IsPure)\r\n                {\r\n                    codeGenerator.ChainBuilder.Create();\r\n\r\n                    foreach (Statement statement in ast.Statements)\r\n                    {\r\n                        // skip empty statements in global code (they emit sequence points, which is undesirable):\r\n                        if (!(statement is EmptyStmt))\r\n                            statement.Emit(codeGenerator);\r\n                    }\r\n\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n                else\r\n                {\r\n                    ScriptCompilationUnit unit = (ScriptCompilationUnit)codeGenerator.CompilationUnit;\r\n\r\n                    ILEmitter il = codeGenerator.IL;\r\n\r\n                    if (codeGenerator.Context.Config.Compiler.Debug)\r\n                    {\r\n                        codeGenerator.MarkSequencePoint(0);\r\n                        il.Emit(OpCodes.Nop);\r\n                    }\r\n\r\n                    codeGenerator.DefineLabels(labels);\r\n\r\n                    // CALL <self>.<Declare>(context); \r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    il.Emit(OpCodes.Call, unit.ScriptBuilder.DeclareHelperBuilder);\r\n\r\n                    // IF (<is main script>) CALL <prepended script>.Main()\r\n                    if (PrependedInclusion != null)\r\n                        PrependedInclusion.Emit(codeGenerator);\r\n\r\n                    codeGenerator.ChainBuilder.Create();\r\n\r\n                    foreach (Statement statement in ast.Statements)\r\n                        statement.Emit(codeGenerator);\r\n\r\n                    codeGenerator.ChainBuilder.End();\r\n\r\n                    // return + appended file emission:\r\n                    codeGenerator.EmitRoutineEpilogue(ast, false);\r\n                }\r\n#endif\r\n                codeGenerator.LeaveGlobalCodeDeclaration();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region NamespaceDecl\r\n\r\n        [NodeCompiler(typeof(NamespaceDecl), Singleton = true)]\r\n        sealed class NamespaceDeclCompiler : StatementCompiler<NamespaceDecl>\r\n        {\r\n            internal override Statement Analyze(NamespaceDecl node, Analyzer analyzer)\r\n            {\r\n                analyzer.EnterNamespace(node);\r\n\r\n                node.Statements.Analyze(analyzer);\r\n\r\n                analyzer.LeaveNamespace();\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(NamespaceDecl node, CodeGenerator codeGenerator)\r\n            {\r\n                foreach (Statement statement in node.Statements)\r\n                {\r\n                    if (!(statement is EmptyStmt))\r\n                        statement.Emit(codeGenerator);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GlobalConstDeclList\r\n\r\n        [NodeCompiler(typeof(GlobalConstDeclList), Singleton = true)]\r\n        sealed class GlobalConstDeclListCompiler : StatementCompiler<GlobalConstDeclList>\r\n        {\r\n            #region CustomAttributesProvider\r\n\r\n            private sealed class CustomAttributesProvider : IPhpCustomAttributeProvider\r\n            {\r\n                private readonly GlobalConstDeclList node;\r\n                public CustomAttributesProvider(GlobalConstDeclList node)\r\n                {\r\n                    this.node = node;\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider Members\r\n\r\n                public PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Constant; } }\r\n                public AttributeTargets AcceptsTargets { get { return AttributeTargets.Field; } }\r\n\r\n                public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    var attributes = node.Attributes;\r\n                    if (attributes == null || attributes.Attributes == null)\r\n                        return 0;\r\n                    else\r\n                        return attributes.Count(type, selector);\r\n                }\r\n\r\n                public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (GlobalConstantDecl cd in node.Constants)\r\n                    {\r\n                        var cdcompiler = cd.NodeCompiler<IGlobalConstantDeclCompiler>();\r\n                        cdcompiler.ApplyCustomAttribute(kind, attribute, selector);\r\n                    }\r\n                }\r\n\r\n                public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (GlobalConstantDecl cd in node.Constants)\r\n                    {\r\n                        var cdcompiler = cd.NodeCompiler<IGlobalConstantDeclCompiler>();\r\n                        cdcompiler.EmitCustomAttribute(builder);\r\n                    }\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            #endregion\r\n\r\n            internal override Statement Analyze(GlobalConstDeclList node, Analyzer analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                {\r\n                    attributes.AnalyzeMembers(analyzer, analyzer.CurrentScope);\r\n                    attributes.Analyze(analyzer, new CustomAttributesProvider(node));\r\n                }\r\n\r\n                bool is_unreachable = analyzer.IsThisCodeUnreachable();\r\n\r\n                foreach (GlobalConstantDecl cd in node.Constants)\r\n                {\r\n                    var cdcompiler = cd.NodeCompiler<IGlobalConstantDeclCompiler>();\r\n                    cdcompiler.GlobalConstant.Declaration.IsUnreachable = is_unreachable;\r\n                    cdcompiler.Analyze(cd, analyzer);\r\n                }\r\n\r\n                if (is_unreachable)\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n                else\r\n                {\r\n                    return node;\r\n                }\r\n            }\r\n\r\n            internal override void Emit(GlobalConstDeclList node, CodeGenerator codeGenerator)\r\n            {\r\n                // TODO: initialization\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GlobalConstantDecl\r\n\r\n        [NodeCompiler(typeof(GlobalConstantDecl))]\r\n        sealed class GlobalConstantDeclCompiler : ConstantDeclCompiler<GlobalConstantDecl>, IGlobalConstantDeclCompiler\r\n        {\r\n            public override KnownConstant/*!*/Constant { get { return constant; } }\r\n            public GlobalConstant/*!*/GlobalConstant { get { return constant; } }\r\n            private readonly GlobalConstant/*!*/constant;\r\n\r\n            public GlobalConstantDeclCompiler(GlobalConstantDecl/*!*/node)\r\n            {\r\n                QualifiedName qn = (node.Namespace != null)\r\n                            ? new QualifiedName(new Name(node.Name.Value), node.Namespace.QualifiedName)\r\n                            : new QualifiedName(new Name(node.Name.Value));\r\n                constant = new GlobalConstant(qn, PhpMemberAttributes.Public, (CompilationSourceUnit)node.SourceUnit, node.IsConditional, node.Scope, node.Span);\r\n                constant.SetNode(node);\r\n            }\r\n\r\n            public override void Analyze(GlobalConstantDecl node, Analyzer analyzer)\r\n            {\r\n                if (!this.analyzed)\r\n                {\r\n                    base.Analyze(node, analyzer);\r\n\r\n                    // check some special constants (ignoring namespace)\r\n                    if (node.Name.Value == GlobalConstant.Null.FullName ||\r\n                        node.Name.Value == GlobalConstant.False.FullName ||\r\n                        node.Name.Value == GlobalConstant.True.FullName)\r\n                        analyzer.ErrorSink.Add(FatalErrors.ConstantRedeclared, analyzer.SourceUnit, node.Span, node.Name.Value);\r\n                }\r\n            }\r\n\r\n            public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                switch (kind)\r\n                {\r\n                    case SpecialAttributes.Export:\r\n                        constant.ExportInfo = (ExportAttribute)attribute;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"N/A\");\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder)\r\n            {\r\n                constant.RealFieldBuilder.SetCustomAttribute(builder);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region IGlobalCodeCompiler\r\n\r\n    internal interface IGlobalCodeCompiler\r\n    {\r\n        /// <summary>\r\n        /// Global variables. Is <c>null</c> in pure mode.\r\n        /// </summary>\r\n        VariablesTable VarTable { get; }\r\n\r\n        /// <summary>\r\n        /// Labels (PHP6 feature).\r\n        /// </summary>\r\n        Dictionary<VariableName, Statement> Labels { get; }\r\n\r\n        /// <summary>\r\n        /// Prepended inclusion by compiler.\r\n        /// </summary>\r\n        IncludingEx PrependedInclusion { get; set; }\r\n\r\n        /// <summary>\r\n        /// Appended inclusion by compiler.\r\n        /// </summary>\r\n        IncludingEx AppendedInclusion { get; set; }\r\n\r\n        /// <summary>\r\n        /// Analyzes entire AST.\r\n        /// </summary>\r\n        void Analyze(GlobalCode/*!*/ast, Analyzer/*!*/ analyzer);\r\n\r\n        /// <summary>\r\n        /// Emits entire AST.\r\n        /// </summary>\r\n        void Emit(GlobalCode/*!*/ast, CodeGenerator/*!*/ codeGenerator);\r\n    }\r\n\r\n    internal static class GlobalCodeCompilerHelper\r\n    {\r\n        public static VariablesTable GetVarTable(this GlobalCode/*!*/ast)\r\n        {\r\n            return ast.NodeCompiler<IGlobalCodeCompiler>().VarTable;\r\n        }\r\n\r\n        public static Dictionary<VariableName, Statement> GetLabels(this GlobalCode/*!*/ast)\r\n        {\r\n            return ast.NodeCompiler<IGlobalCodeCompiler>().Labels;\r\n        }\r\n\r\n        public static void Analyze(this GlobalCode/*!*/ast, Analyzer/*!*/ analyzer)\r\n        {\r\n            ast.NodeCompiler<IGlobalCodeCompiler>().Analyze(ast, analyzer);\r\n        }\r\n        public static void Emit(this GlobalCode/*!*/ast, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            ast.NodeCompiler<IGlobalCodeCompiler>().Emit(ast, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IGlobalConstantDeclCompiler\r\n\r\n    internal static class GlobalConstantDeclCompilerHelper\r\n    {\r\n        public static GlobalConstant GetGlobalConstant(this GlobalConstantDecl/*!*/node)\r\n        {\r\n            return node.NodeCompiler<IGlobalConstantDeclCompiler>().GlobalConstant;\r\n        }\r\n    }\r\n\r\n    internal interface IGlobalConstantDeclCompiler : IConstantDeclCompiler\r\n    {\r\n        GlobalConstant/*!*/GlobalConstant { get; }\r\n        void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector);\r\n        void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder);\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/IfStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region IfStmt\r\n\r\n        [NodeCompiler(typeof(IfStmt), Singleton = true)]\r\n        sealed class IfStmtCompiler : StatementCompiler<IfStmt>\r\n        {\r\n            internal override Statement Analyze(IfStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                ExInfoFromParent info = ExInfoFromParent.DefaultExInfo;\r\n                var/*!*/conditions = node.Conditions;\r\n\r\n                bool is_first = true;\r\n                int remaining = conditions.Count;\r\n                int last_non_null = -1;\r\n\r\n                for (int i = 0; i < conditions.Count; i++)\r\n                {\r\n                    // \"else\":\r\n                    if (conditions[i].Condition == null)\r\n                    {\r\n                        Debug.Assert(i > 0);\r\n\r\n                        if (!is_first) analyzer.EnterConditionalCode();\r\n                        conditions[i].Statement = conditions[i].Statement.Analyze(analyzer);\r\n                        if (!is_first) analyzer.LeaveConditionalCode();\r\n                        last_non_null = i;\r\n\r\n                        break;\r\n                    }\r\n\r\n                    // all but the condition before the first non-evaluable including are conditional:\r\n                    if (!is_first) analyzer.EnterConditionalCode();\r\n                    Evaluation cond_eval = conditions[i].Condition.Analyze(analyzer, info);\r\n                    if (!is_first) analyzer.LeaveConditionalCode();\r\n\r\n                    if (cond_eval.HasValue)\r\n                    {\r\n                        if (Convert.ObjectToBoolean(cond_eval.Value))\r\n                        {\r\n                            // condition is evaluated to be true //\r\n\r\n                            // analyze the first statement unconditionally, the the others conditionally:\r\n                            if (!is_first) analyzer.EnterConditionalCode();\r\n                            conditions[i].Statement = conditions[i].Statement.Analyze(analyzer);\r\n                            if (!is_first) analyzer.LeaveConditionalCode();\r\n\r\n                            // the remaining conditions are unreachable:\r\n                            for (int j = i + 1; j < conditions.Count; j++)\r\n                            {\r\n                                conditions[j].Statement.ReportUnreachable(analyzer);\r\n                                conditions[j] = null;\r\n                                remaining--;\r\n                            }\r\n\r\n                            conditions[i].Condition = null;\r\n                            last_non_null = i;\r\n\r\n                            break;\r\n                        }\r\n                        else\r\n                        {\r\n                            // condition is evaluated to be false //\r\n\r\n                            // remove the condition, report unreachable code:\r\n                            conditions[i].Statement.ReportUnreachable(analyzer);\r\n                            conditions[i] = null;\r\n                            remaining--;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // condition is not evaluable:\r\n                        conditions[i].Condition = cond_eval.Expression;\r\n\r\n                        // analyze statement conditinally:\r\n                        analyzer.EnterConditionalCode();\r\n                        conditions[i].Statement = conditions[i].Statement.Analyze(analyzer);\r\n                        analyzer.LeaveConditionalCode();\r\n\r\n                        is_first = false;\r\n                        last_non_null = i;\r\n                    }\r\n                }\r\n\r\n                if (remaining == 0)\r\n                    return EmptyStmt.Skipped;\r\n\r\n                Debug.Assert(last_non_null != -1 && conditions[last_non_null] != null);\r\n\r\n                // only \"else\" remained:\r\n                if (remaining == 1 && conditions[last_non_null].Condition == null)\r\n                    return conditions[last_non_null].Statement;\r\n\r\n                // compact the list (remove nulls):\r\n                if (remaining < conditions.Count)\r\n                {\r\n                    List<ConditionalStmt> compacted = new List<ConditionalStmt>(remaining);\r\n                    foreach (ConditionalStmt condition in conditions)\r\n                    {\r\n                        if (condition != null)\r\n                            compacted.Add(condition);\r\n                    }\r\n                    node.Conditions = compacted;\r\n                }\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(IfStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"IfStmt\");\r\n                var/*!*/conditions = node.Conditions;\r\n\r\n                Debug.Assert(conditions.Count > 0);\r\n\r\n                // marks a sequence point containing whole condition:\r\n                codeGenerator.MarkSequencePoint(conditions[0].Condition);   // NOTE: (J) when emitting a statement, sequence point has to be marked. Normally it is done in Statement.Emit()\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                Label exit_label = il.DefineLabel();\r\n                Label false_label = il.DefineLabel();\r\n\r\n                // IF\r\n                codeGenerator.EmitConversion(conditions[0].Condition, PhpTypeCode.Boolean);\r\n\r\n                il.Emit(OpCodes.Brfalse, false_label);\r\n                conditions[0].Statement.Emit(codeGenerator);\r\n\r\n                // (J) Mark the end of condition body so debugger will jump off the block properly\r\n                codeGenerator.MarkSequencePoint(conditions[0].Statement.Span.End);\r\n\r\n                il.Emit(OpCodes.Br, exit_label);\r\n\r\n                // ELSEIF:\r\n                for (int i = 1; i < conditions.Count && conditions[i].Condition != null; i++)\r\n                {\r\n                    il.MarkLabel(false_label, true);\r\n                    false_label = il.DefineLabel();\r\n\r\n                    // IF (!<(bool) condition>)\r\n                    codeGenerator.MarkSequencePoint(conditions[i].Condition);   // marks a sequence point of the condition \"statement\"\r\n                    codeGenerator.EmitConversion(conditions[i].Condition, PhpTypeCode.Boolean);\r\n                    il.Emit(OpCodes.Brfalse, false_label);\r\n\r\n                    conditions[i].Statement.Emit(codeGenerator);\r\n                    il.Emit(OpCodes.Br, exit_label);\r\n                }\r\n\r\n                il.MarkLabel(false_label, true);\r\n\r\n                // ELSE\r\n                if (conditions[conditions.Count - 1].Condition == null)\r\n                    conditions[conditions.Count - 1].Statement.Emit(codeGenerator);\r\n\r\n                il.MarkLabel(exit_label, true);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ConditionalStmt\r\n\r\n        [NodeCompiler(typeof(ConditionalStmt), Singleton = true)]\r\n        sealed class ConditionalStmtCompiler : INodeCompiler\r\n        {\r\n\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/IncDecEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(IncDecEx))]\r\n        sealed class IncDecExCompiler : ExpressionCompiler<IncDecEx>\r\n        {\r\n            public override Evaluation Analyze(IncDecEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n                ExInfoFromParent var_info = new ExInfoFromParent(node);\r\n                var_info.Access = AccessType.ReadAndWrite;\r\n\r\n                node.Variable.Analyze(analyzer, var_info);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(IncDecEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"IncDecEx\");\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n\r\n                AccessType old_selector = codeGenerator.AccessSelector;\r\n\r\n                PhpTypeCode returned_typecode = PhpTypeCode.Void;\r\n\r\n                codeGenerator.AccessSelector = AccessType.Write;\r\n                codeGenerator.ChainBuilder.Create();\r\n                node.Variable.Emit(codeGenerator);\r\n                codeGenerator.AccessSelector = AccessType.Read;\r\n                codeGenerator.ChainBuilder.Create();\r\n                node.Variable.Emit(codeGenerator);\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                LocalBuilder old_value = null;\r\n\r\n                if (access == AccessType.Read && node.Post)\r\n                {\r\n                    old_value = codeGenerator.IL.DeclareLocal(Types.Object[0]);\r\n                    // Save variable's value for later use\r\n                    codeGenerator.IL.Emit(OpCodes.Dup);\r\n                    codeGenerator.IL.Stloc(old_value);\r\n                }\r\n\r\n                if (node.Inc)\r\n                {\r\n                    // Increment\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Increment);\r\n                }\r\n                else\r\n                {\r\n                    // Decrement\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Decrement);\r\n                }\r\n\r\n                codeGenerator.AccessSelector = AccessType.Write;\r\n                if (access == AccessType.Read)\r\n                {\r\n                    if (node.Post)\r\n                    {\r\n                        node.Variable.EmitAssign(codeGenerator);\r\n                        // Load original value (as was before operation)\r\n                        codeGenerator.IL.Ldloc(old_value);\r\n                    }\r\n                    else\r\n                    {\r\n                        old_value = codeGenerator.IL.DeclareLocal(Types.Object[0]);\r\n                        // pre-incrementation\r\n                        // Load variable's value after operation\r\n                        codeGenerator.IL.Emit(OpCodes.Dup);\r\n                        codeGenerator.IL.Stloc(old_value);\r\n                        node.Variable.EmitAssign(codeGenerator);\r\n                        codeGenerator.IL.Ldloc(old_value);\r\n                    }\r\n\r\n                    returned_typecode = PhpTypeCode.Object;\r\n                }\r\n                else\r\n                {\r\n                    node.Variable.EmitAssign(codeGenerator);\r\n                }\r\n                codeGenerator.AccessSelector = old_selector;\r\n\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                return returned_typecode;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/IndirectVariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(IndirectVarUse))]\r\n        sealed class IndirectVarUseCompiler : SimpleVarUseCompiler<IndirectVarUse>, IVariableSwitchEmitter\r\n        {\r\n            #region Analysis\r\n            \r\n            public override Evaluation Analyze(IndirectVarUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                if (node.IsMemberOf == null)\r\n                {\r\n                    if (!(access == AccessType.Read\r\n                        || access == AccessType.Write\r\n                        || access == AccessType.ReadAndWrite\r\n                        || access == AccessType.None))\r\n                    {\r\n                        analyzer.CurrentVarTable.SetAllRef();\r\n                    }\r\n                    analyzer.AddCurrentRoutineProperty(RoutineProperties.IndirectLocalAccess);\r\n                }\r\n\r\n                node.varNameEx = node.VarNameEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override PhpTypeCode Emit(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"IndirectVarUse\");\r\n                PhpTypeCode result = PhpTypeCode.Invalid;\r\n\r\n                switch (codeGenerator.SelectAccess(access))\r\n                {\r\n                    // This case occurs everytime we want to get current variable value\r\n                    // All we do is push the value onto the IL stack\r\n                    case AccessType.Read: // Push value onto a IL stack\r\n                        result = EmitNodeRead(node, codeGenerator);\r\n                        break;\r\n\r\n                    // This case occurs when the varible is written ($a = $b, then $a has Write mark)\r\n                    // We only prepare the stack for storing, the work will be done later,\r\n                    // by EmitAssign()\r\n                    case AccessType.Write:\r\n                        result = EmitNodeWrite(node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.None:\r\n                        EmitNodeRead(node, codeGenerator);\r\n                        codeGenerator.IL.Emit(OpCodes.Pop);\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        // if the selector is set to the ReadRef, the chain is emitted as if it was written\r\n                        // (chained nodes are marked as ReadAndWrite):\r\n                        if (codeGenerator.AccessSelector == AccessType.ReadRef)\r\n                            codeGenerator.AccessSelector = AccessType.Write;\r\n\r\n                        result = EmitNodeReadRef(node, codeGenerator);\r\n                        Debug.Assert(result == PhpTypeCode.PhpReference);\r\n                        break;\r\n\r\n                    case AccessType.ReadUnknown:\r\n                        result = EmitNodeReadUnknown(node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        EmitNodeWriteRef(node, codeGenerator);\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    default:\r\n                        result = PhpTypeCode.Invalid;\r\n                        Debug.Fail(null);\r\n                        break;\r\n                }\r\n                return result;\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeRead(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1: ...->$a->...\r\n                        codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                        node.IsMemberOf.Emit(codeGenerator);\r\n                        return codeGenerator.ChainBuilder.EmitGetProperty(node);\r\n                    }\r\n\r\n                    if (codeGenerator.ChainBuilder.IsArrayItem && !codeGenerator.ChainBuilder.IsLastMember)\r\n                    {\r\n                        // 6: $b->${\"a\"}[3]\r\n                        return codeGenerator.ChainBuilder.EmitGetProperty(node);\r\n                    }\r\n\r\n                    // 4: ${\"a\"}[][] \r\n                    // 5: $$a->b->c->... \r\n                    // 9: $$a->b\r\n                    return EmitLoad(node, codeGenerator);\r\n                }\r\n\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->$a\r\n                    // 8: b[]->$a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n\r\n                    //codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                    //PhpTypeCode result = node.IsMemberOf.Emit(codeGenerator);\r\n                    //codeGenerator.ChainBuilder.EmitGetProperty(this);\r\n                    var result = codeGenerator.CallSitesBuilder.EmitGetProperty(\r\n                        codeGenerator, false,\r\n                        node.IsMemberOf, null, null,\r\n                        null,\r\n                        null, node.VarNameEx,\r\n                        codeGenerator.ChainBuilder.QuietRead);\r\n\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return result;\r\n                }\r\n\r\n                // 3: ${\"a\"}[3]\r\n                // 7: $$a\r\n                return EmitLoad(node, codeGenerator);\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeReadRef(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                // 2, 7, 8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a\r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    if (node.IsMemberOf is FunctionCall)\r\n                        codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n                    PhpTypeCode result = EmitReadField(node, codeGenerator, true);\r\n                    codeGenerator.ChainBuilder.EndRef();\r\n\r\n                    Debug.Assert(result == PhpTypeCode.PhpReference);\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    //codeGenerator.EmitVariableLoadRef(this);\r\n                    EmitLoadRef(node, codeGenerator);\r\n                }\r\n\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeReadUnknown(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1: ...->$a->...\r\n                        codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                        PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                        if (res != PhpTypeCode.PhpRuntimeChain)\r\n                        {\r\n                            codeGenerator.EmitBoxing(res);\r\n                            codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                        }\r\n                        codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                        return PhpTypeCode.PhpRuntimeChain;\r\n                    }\r\n\r\n                    if (codeGenerator.ChainBuilder.IsArrayItem && !codeGenerator.ChainBuilder.IsLastMember)\r\n                    {\r\n                        // 6: $b->${\"a\"}[3]\r\n                        codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                        return PhpTypeCode.PhpRuntimeChain;\r\n                    }\r\n\r\n                    // 4: ${\"a\"}[][] \r\n                    // 5: $$a->b->c->... \r\n                    // 9: $$a->b\r\n                    this.EmitLoadRef(node, codeGenerator);\r\n                    codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                    return PhpTypeCode.PhpRuntimeChain;\r\n                }\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->$a\r\n                    // 8: b[]->$a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                    PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                    if (res != PhpTypeCode.PhpRuntimeChain)\r\n                    {\r\n                        codeGenerator.EmitBoxing(res);\r\n                        codeGenerator.ChainBuilder.EmitCreateRTChain();\r\n                    }\r\n                    codeGenerator.ChainBuilder.EmitRTChainAddField(node);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return PhpTypeCode.PhpRuntimeChain;\r\n                }\r\n\r\n                // 3: ${\"a\"}[3]\r\n                // 7: $$a\r\n                this.EmitLoadRef(node, codeGenerator);\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            private PhpTypeCode EmitNodeWrite(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n\r\n                if (chain.IsMember)\r\n                {\r\n                    // 1,4,5,6,9\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 1:  ...->$a->...\r\n                        chain.Lengthen();\r\n                        chain.EmitEnsureProperty(node.IsMemberOf, node, false);\r\n                        return PhpTypeCode.DObject;\r\n                    }\r\n\r\n                    if (chain.IsArrayItem)\r\n                    {\r\n                        // 4,6\r\n                        if (chain.IsLastMember)\r\n                        {\r\n                            // 4: ${\"a\"}[][]\r\n                            chain.EmitEnsureVariableIsArray(node);\r\n                            return PhpTypeCode.PhpArray;\r\n                        }\r\n                        else\r\n                        {\r\n                            // 6: $b->${\"a\"}[3]\r\n                            ChainBuilder.ObjectFieldLazyEmitInfo object_info = chain.GetObjectForLazyEmit();\r\n                            // Lengthen for hop over ->\r\n                            chain.EmitEnsureProperty(object_info.ObjectForLazyEmit, node, true);\r\n                            chain.ReleaseObjectForLazyEmit(object_info);\r\n                            chain.IsArrayItem = true;\r\n                            chain.IsLastMember = false;\r\n                            return PhpTypeCode.PhpArray;\r\n                        }\r\n                    }\r\n\r\n                    if (chain.Exists)\r\n                    {\r\n                        // 5: $$a->b->c->...\r\n                        chain.EmitEnsureVariableIsObject(node);\r\n                        return PhpTypeCode.DObject;\r\n                    }\r\n                    else\r\n                    {\r\n                        // 9: $$a->b\r\n                        this.EmitLoadAddress(node, codeGenerator);\r\n                        return PhpTypeCode.ObjectAddress;\r\n                    }\r\n                }\r\n\r\n                // 2,3,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a \r\n                    // 8: b[]->a\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    assignmentCallback = EmitWriteField(node, codeGenerator, false);\r\n                    // Note: more work is done in EmitAssign \r\n                    return PhpTypeCode.Unknown;\r\n                }\r\n\r\n                // 3,7\r\n                if (codeGenerator.ChainBuilder.IsArrayItem)\r\n                {\r\n                    // 3: ${\"a\"}[3]\r\n                    this.EmitLoadAddress(node, codeGenerator);\r\n                    return PhpTypeCode.ObjectAddress;\r\n                }\r\n\r\n                // 7: $a\r\n                //codeGenerator.EmitVariableStorePrepare(this);\r\n                this.EmitStorePrepare(node, codeGenerator);\r\n                return PhpTypeCode.Unknown;\r\n            }\r\n\r\n            private void EmitNodeWriteAssign(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n\r\n                // Note that for cases 1,3,4,5,6,9 EmitAssign is never called!!!\r\n\r\n                // 2,7,8\r\n                if (chain.IsMember)\r\n                {\r\n                    // 2,8\r\n                    if (chain.Exists)\r\n                    {\r\n                        // 8: b[]->$a\r\n                        chain.EmitSetObjectField();\r\n                    }\r\n                    else\r\n                    {\r\n                        // 2: $b->a \r\n                        Debug.Assert(node.IsMemberOf is SimpleVarUse || node.IsMemberOf is FunctionCall);\r\n                        if (node.IsMemberOf is FunctionCall)\r\n                            codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                        assignmentCallback(codeGenerator, PhpTypeCode.Object);\r\n\r\n                        SimpleVarUse svu = node.IsMemberOf as SimpleVarUse;\r\n                        if (svu != null)\r\n                            SimpleVarUseHelper.EmitLoadAddress_StoreBack(svu, codeGenerator);\r\n                        // else do nothing\r\n                    }\r\n                    chain.End();\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    //codeGenerator.EmitVariableStoreAssign(this);\r\n                    this.EmitStoreAssign(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            private void EmitNodeWriteRef(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                // 2,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->a \r\n                    // 8: b[]->a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    assignmentCallback = EmitWriteField(node, codeGenerator, true);\r\n                    // Note: more work is done in EmitAssign \r\n                    return;\r\n                }\r\n                // 7: $a\r\n                //codeGenerator.EmitVariableStoreRefPrepare(this);\r\n                this.EmitStoreRefPrepare(node, codeGenerator);\r\n            }\r\n\r\n            private void EmitNodeWriteRefAssign(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // Note that for cases 1,3,4,5,6,9 EmitAssign is never called!!!\r\n\r\n                // 2,7,8\r\n                if (codeGenerator.ChainBuilder.IsMember)\r\n                {\r\n                    // 2,8\r\n                    if (codeGenerator.ChainBuilder.Exists)\r\n                    {\r\n                        // 8: b[]->a\r\n                        // TODO: <MARTIN> May be this call will change to SetObjectFieldRef\r\n                        codeGenerator.ChainBuilder.EmitSetObjectField();\r\n                    }\r\n                    else\r\n                    {\r\n                        // 2: $b->$a\r\n                        Debug.Assert(node.IsMemberOf is SimpleVarUse || node.IsMemberOf is FunctionCall);\r\n\r\n                        if (node.IsMemberOf is FunctionCall)\r\n                            codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                        assignmentCallback(codeGenerator, PhpTypeCode.Object);\r\n\r\n                        SimpleVarUse svu = node.IsMemberOf as SimpleVarUse;\r\n                        if (svu != null)\r\n                            SimpleVarUseHelper.EmitLoadAddress_StoreBack(svu, codeGenerator);\r\n                    }\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    //codeGenerator.EmitVariableStoreRefAssign(this);\r\n                    this.EmitStoreRefAssign(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            internal override PhpTypeCode EmitAssign(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                PhpTypeCode result;\r\n                switch (access)\r\n                {\r\n                    case AccessType.None:\r\n                        // Do nothing\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    case AccessType.Read:\r\n                        // Do nothing\r\n                        result = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case AccessType.Write:\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWrite:\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.ReadAndWriteAndReadUnknown:\r\n                        EmitNodeWriteAssign(node, codeGenerator);\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        // Do nothing\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        EmitNodeWriteRefAssign(node, codeGenerator);\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(null);\r\n                        result = PhpTypeCode.Invalid;\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            internal override void EmitUnset(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                //Template:  \"unset($$x)\"   $$x = null;\r\n                //Template: \"unset(x)\"     x = null\r\n                Debug.Assert(access == AccessType.Read);\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                // 2, 7, 8 \r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->$a\r\n                    // 8: b[]->$a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    EmitUnsetField(node, codeGenerator);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return;\r\n                }\r\n                // 7: $a\r\n                // Unset this variable\r\n                //codeGenerator.EmitVariableUnset(this);\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(UnsetLocal));\r\n                }\r\n                else\r\n                {\r\n                    // CALL Operators.UnsetVariable(<script context>, <local variable table>, <variable name>);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.UnsetVariable);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that unset an instance field.\r\n            /// </summary>\r\n            /// <remarks>\r\n            /// Nothing is expected on the evaluation stack. Nothing is left on the evaluation stack.\r\n            /// </remarks>\r\n            private void EmitUnsetField(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                // call UnsetProperty operator\r\n                codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                node.IsMemberOf.Emit(codeGenerator);\r\n                EmitName(node, codeGenerator);\r\n                codeGenerator.EmitLoadClassContext();\r\n\r\n                codeGenerator.IL.EmitCall(OpCodes.Call, Methods.Operators.UnsetProperty, null);\r\n            }\r\n\r\n            internal override PhpTypeCode EmitIsset(IndirectVarUse node, CodeGenerator codeGenerator, bool empty)\r\n            {\r\n                //TODO:\r\n                // Template: \"isset(x)\"     x != null        \r\n                //\t\t\t\tisset doesn't distinguish between the NULL and uninitialized variable\r\n                //\t\t\t\ta reference is dereferenced, i.e. isset tells us whether the referenced variable is set \r\n\r\n                Debug.Assert(access == AccessType.Read);\r\n                // Cases 1, 4, 5, 6, 9 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsMember == false);\r\n                // Case 3 never reached\r\n                Debug.Assert(codeGenerator.ChainBuilder.IsArrayItem == false);\r\n\r\n                // 2,7,8\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 2: $b->$a\r\n                    // 8: b[]->$a\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.Begin();\r\n                    codeGenerator.ChainBuilder.Lengthen(); // for hop over ->\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n                    EmitReadField(node, codeGenerator, false);\r\n                    codeGenerator.ChainBuilder.End();\r\n                    return PhpTypeCode.Object;\r\n                }\r\n                else\r\n                {\r\n                    // 7: $a\r\n                    // Check wheteher this variable is set\r\n\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n                    this.EmitLoad(node, codeGenerator);\r\n                    return PhpTypeCode.Object;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits load of the name to the stack.\r\n            /// </summary>\r\n            internal override void EmitName(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.ChainBuilder.Create();\r\n                codeGenerator.EmitConversion(node.VarNameEx, PhpTypeCode.String);\r\n                codeGenerator.ChainBuilder.End();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that load the variable onto the evaluation stack.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <remarks><B>$this</B> cannot be accessed indirectly.</remarks>\r\n            internal override PhpTypeCode EmitLoad(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Switch over all local variables and dereference those being of type PhpReference\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(LoadLocal));\r\n                }\r\n                else\r\n                {\r\n                    // LOAD Operators.GetVariable[Unchecked](<script context>, <local variables table>, <variable name>);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    if (codeGenerator.ChainBuilder.QuietRead)\r\n                        il.Emit(OpCodes.Call, Methods.Operators.GetVariableUnchecked);\r\n                    else\r\n                        il.Emit(OpCodes.Call, Methods.Operators.GetVariable);\r\n                }\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            internal override void EmitLoadAddress(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Template: for IndirectVarUse\r\n                    //\t***** emit \"switch\" to make sure whether a variable is PhpReference or not\r\n                    //\t\t\t\tInside the switch do the same work as in DirectVarUse case. \r\n\r\n                    // For IndirectVarUse emit switch over all variables. Load address of specified variable.\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(LoadLocalAddress));\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tobject Operators.GetVariableUnchecked(IDictionary table, string name) //returns variable value\r\n                    this.LoadTabledVariableAddress(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            internal override void EmitLoadAddress_StoreBack(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitLoadAddress_StoreBack(node, codeGenerator, false);\r\n            }\r\n\r\n            internal override void EmitLoadAddress_StoreBack(IndirectVarUse node, CodeGenerator codeGenerator, bool duplicate_value)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Take no action\r\n                    return;\r\n                }\r\n                this.StoreTabledVariableBack(node, codeGenerator, duplicate_value);\r\n            }\r\n\r\n            internal override void EmitLoadRef(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // For IndirectVarUse emit switch over all variables.\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(LoadLocalRef));\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tPhpReference Operators.GetVariableRef(IDictionary table, string name) //returns variable value; variable is of type PhpReference\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetVariableRef);\r\n                }\r\n            }\r\n\r\n            internal override void EmitStorePrepare(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Switch over all variables\r\n                    // /*historical reason, not needed now*/EmitSwitch(codeGenerator, new SwitchMethod(StoreLocalPrepare));\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tvoid Operators.SetVariable(table, \"x\", PhpVariable.Copy(Operators.getValue(table, \"x\"), CopyReason.Assigned));\r\n\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    // now load value the call Operators.SetVariable in EmitVariableStoreAssignFromTable\t\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreAssign(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // For IndirectVarUse emit switch over all variables\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(StoreLocalAssign));\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tvoid Operators.SetVariable(table, \"x\", PhpVariable.Copy(Operators.getValue(table, \"x\"), CopyReason.Assigned));\r\n                    il.Emit(OpCodes.Call, Methods.Operators.SetVariable);\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreRefPrepare(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // Switch over all variables\r\n                    // /*copypaste bug*/EmitSwitch(codeGenerator, new SwitchMethod(StoreLocalPrepare));\r\n                }\r\n                else\r\n                {\r\n                    // Template:\r\n                    //\t\tvoid Operators.SetVariable(table, \"x\", PhpVariable.Copy(Operators.getValue(table, \"x\"), CopyReason.Assigned));\r\n\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    EmitName(node, codeGenerator);\r\n                    // now load value the call Operators.SetVariable in EmitVariableStoreAssignFromTable\t\r\n                }\r\n            }\r\n\r\n            internal override void EmitStoreRefAssign(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                if (codeGenerator.OptimizedLocals)\r\n                {\r\n                    // For IndirectVarUse emit switch over all variables\r\n                    EmitSwitch(node, codeGenerator, new SwitchMethod(StoreLocalRefAssign));\r\n                }\r\n                else\r\n                {\r\n                    // Operators.SetVariable( <FROM EmitStoreRefPrepare> )\r\n                    il.Emit(OpCodes.Call, Methods.Operators.SetVariableRef);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Switching over local variables\r\n\r\n            /// <summary>\r\n            /// <see cref=\"SwitchMethod\"/> delegate instances stands as a parameter for <see cref=\"EmitSwitch\"/> method.\r\n            /// </summary>\r\n            internal delegate void SwitchMethod(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName);\r\n\r\n            void IVariableSwitchEmitter.LoadLocal(IndirectVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitSwitch(node, codeGenerator, new SwitchMethod(LoadLocal));\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits local variable switch and performs a specified operation on each case.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The code generator.</param>\r\n            /// <param name=\"method\">The operation performed in each case.</param>\r\n            internal void EmitSwitch(IndirectVarUse node, CodeGenerator codeGenerator, SwitchMethod method)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                Debug.Assert(method != null);\r\n\r\n                Label default_case = il.DefineLabel();\r\n                Label end_label = il.DefineLabel();\r\n                LocalBuilder ivar_local = il.GetTemporaryLocal(Types.String[0], true);\r\n                LocalBuilder non_interned_local = il.DeclareLocal(Types.String[0]);\r\n                VariablesTable variables = codeGenerator.CurrentVariablesTable;\r\n                Label[] labels = new Label[variables.Count];\r\n\r\n                // non_interned_local = <name expression>;\r\n                EmitName(node, codeGenerator);\r\n                il.Stloc(non_interned_local);\r\n\r\n                // ivar_local = String.IsInterned(non_interned_local)\r\n                il.Ldloc(non_interned_local);\r\n                il.Emit(OpCodes.Call, Methods.String_IsInterned);\r\n                il.Stloc(ivar_local);\r\n\r\n                // switch for every compile-time variable:\r\n                int i = 0;\r\n                foreach (VariablesTable.Entry variable in variables)\r\n                {\r\n                    labels[i] = il.DefineLabel();\r\n\r\n                    // IF (ivar_local == <i-th variable name>) GOTO labels[i];\r\n                    il.Ldloc(ivar_local);\r\n                    il.Emit(OpCodes.Ldstr, variable.VariableName.ToString());\r\n                    il.Emit(OpCodes.Beq, labels[i]);\r\n                    i++;\r\n                }\r\n\r\n                // GOTO default_case:\r\n                il.Emit(OpCodes.Br, default_case);\r\n\r\n                // operation on each variable:\r\n                i = 0;\r\n                foreach (VariablesTable.Entry variable in variables)\r\n                {\r\n                    // labels[i]:\r\n                    il.MarkLabel(labels[i]);\r\n\r\n                    // operation:\r\n                    method(node, codeGenerator, variable, null);\r\n\r\n                    // GOTO end;\r\n                    il.Emit(OpCodes.Br, end_label);\r\n                    i++;\r\n                }\r\n\r\n                // default case - new variable created at runtime:\r\n                il.MarkLabel(default_case);\r\n                method(node, codeGenerator, null, non_interned_local);\r\n\r\n                // END:\r\n                il.MarkLabel(end_label);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Loads a value of a specified variable. If the variable is of type <see cref=\"PhpReference\"/>, it is dereferenced.\r\n            /// </summary>\r\n            internal static void LoadLocal(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n\r\n                if (variable != null)\r\n                {\r\n                    // LOAD DEREF <variable>;\r\n                    variable.Variable.EmitLoad(il);\r\n                    if (variable.IsPhpReference)\r\n                        il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                }\r\n                else\r\n                {\r\n                    // LOAD Operators.GetVariable[Unchecked](<script context>, <local variables table>, <variable name>);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Ldloc(variableName);\r\n                    if (codeGenerator.ChainBuilder.QuietRead)\r\n                        il.Emit(OpCodes.Call, Methods.Operators.GetVariableUnchecked);\r\n                    else\r\n                        il.Emit(OpCodes.Call, Methods.Operators.GetVariable);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Loads and address of a specified variable.\r\n            /// </summary>\r\n            internal void LoadLocalAddress(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n\r\n                if (variable != null)\r\n                {\r\n                    if (variable.IsPhpReference)\r\n                    {\r\n                        // LOAD ADDR <variable>.value;\r\n                        variable.Variable.EmitLoad(il);\r\n                        il.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n                    }\r\n                    else\r\n                    {\r\n                        variable.Variable.EmitLoadAddress(il);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    LoadTabledVariableAddress(node, codeGenerator);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Loads a specified reference local variable.\r\n            /// </summary>\r\n            internal static void LoadLocalRef(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n\r\n                if (variable != null)\r\n                {\r\n                    Debug.Assert(variable.IsPhpReference);\r\n                    variable.Variable.EmitLoad(il);\r\n                }\r\n                else\r\n                {\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Ldloc(variableName);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetVariableRef);\r\n                }\r\n            }\r\n\r\n            ///// <summary>\r\n            ///// Prepares local variable for a store operation.\r\n            ///// </summary>\r\n            //internal void StoreLocalPrepare(CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            //{\r\n            //    Debug.Assert(variable == null ^ variableName == null);\r\n            //}\r\n\r\n            /// <summary>\r\n            /// Unsets a specified variable.\r\n            /// </summary>\r\n            internal static void UnsetLocal(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n\r\n                if (variable != null)\r\n                {\r\n                    if (variable.IsPhpReference)\r\n                    {\r\n                        // <variable> = new PhpReference();\r\n                        il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                        variable.Variable.EmitStore(il);\r\n                    }\r\n                    else\r\n                    {\r\n                        il.Emit(OpCodes.Ldnull);\r\n                        variable.Variable.EmitStore(il);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // CALL Operators.SetVariable(<local variables table>,<name>,null);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Ldloc(variableName);\r\n                    il.Emit(OpCodes.Ldnull);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.SetVariable);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stores a value on the top of the stack to a specified variable.\r\n            /// </summary>\r\n            internal static void StoreLocalAssign(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n                LocalBuilder temp;\r\n\r\n                if (variable != null)\r\n                {\r\n                    if (variable.IsPhpReference)\r\n                    {\r\n                        // temp = STACK \r\n                        temp = il.GetTemporaryLocal(Types.Object[0], true);\r\n                        il.Stloc(temp);\r\n\r\n                        // <variable>.value = temp;\r\n                        variable.Variable.EmitLoad(il);\r\n                        il.Ldloc(temp);\r\n                        il.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n                    }\r\n                    else\r\n                    {\r\n                        variable.Variable.EmitStore(il);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // temp = STACK\r\n                    temp = il.GetTemporaryLocal(Types.Object[0], true);\r\n                    il.Stloc(temp);\r\n\r\n                    // CALL Operators.SetVariable(<local variables table>,<name>,temp);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Ldloc(variableName);\r\n                    il.Ldloc(temp);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.SetVariable);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stores a reference on the top of the stack to a specified variable.\r\n            /// </summary>\r\n            internal static void StoreLocalRefAssign(IndirectVarUse node, CodeGenerator codeGenerator, VariablesTable.Entry variable, LocalBuilder variableName)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                Debug.Assert(variable == null ^ variableName == null);\r\n\r\n                if (variable != null)\r\n                {\r\n                    Debug.Assert(variable.IsPhpReference);\r\n                    variable.Variable.EmitStore(il);\r\n                }\r\n                else\r\n                {\r\n                    // temp = STACK\r\n                    LocalBuilder temp = il.GetTemporaryLocal(Types.PhpReference[0], true);\r\n                    il.Stloc(temp);\r\n\r\n                    // CALL Operators.SetVariableRef(<local variables table>,<name>,temp);\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    codeGenerator.EmitLoadRTVariablesTable();\r\n                    il.Ldloc(variableName);\r\n                    il.Ldloc(temp);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.SetVariableRef);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n\r\n    #region IVariableSwitchEmitter\r\n\r\n    internal interface IVariableSwitchEmitter\r\n    {\r\n        void LoadLocal(IndirectVarUse node, CodeGenerator codeGenerator);\r\n    }\r\n\r\n    internal static class IndirectVarUseCompilerHelper\r\n    {\r\n        public static void EmitSwitch_LoadLocal(this IndirectVarUse node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<IVariableSwitchEmitter>().LoadLocal(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/ItemUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region ItemUse\r\n\r\n        [NodeCompiler(typeof(ItemUse))]\r\n        sealed class ItemUseCompiler : CompoundVarUseCompiler<ItemUse>\r\n        {\r\n            /// <summary>\r\n            /// Set when the index is emitted.\r\n            /// </summary>\r\n            private PhpTypeCode indexTypeCode = PhpTypeCode.Unknown;\r\n\r\n            public override Evaluation Analyze(ItemUse node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                // checks for write context of key-less array operator ($a =& $x[] is ok):\r\n                if (node.Index == null\r\n                    && (access == AccessType.Read\r\n                        || access == AccessType.ReadAndWrite\r\n                        || access == AccessType.ReadAndWriteAndReadRef\r\n                        || access == AccessType.ReadAndWriteAndReadUnknown))\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.EmptyIndexInReadContext, analyzer.SourceUnit, node.Span);\r\n                    return new Evaluation(node);\r\n                }\r\n\r\n                base.Analyze(node, analyzer, info);\r\n\r\n                ExInfoFromParent sinfo = new ExInfoFromParent(node);\r\n                switch (info.Access)\r\n                {\r\n                    case AccessType.Write:\r\n                    case AccessType.WriteRef:\r\n                    case AccessType.ReadRef: sinfo.Access = AccessType.Write; break;\r\n\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.ReadAndWrite: sinfo.Access = AccessType.ReadAndWrite; break;\r\n\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWriteAndReadUnknown: sinfo.Access = info.Access; break;\r\n\r\n                    case AccessType.ReadUnknown: sinfo.Access = AccessType.ReadUnknown; break;\r\n                    default: sinfo.Access = AccessType.Read; break;\r\n                }\r\n\r\n                ((ItemUse)node).Array.Analyze(analyzer, sinfo);\r\n\r\n                if (node.Index != null)\r\n                    node.Index = node.Index.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ItemUse node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"ItemUse\");\r\n                PhpTypeCode result = PhpTypeCode.Invalid;\r\n\r\n                switch (codeGenerator.SelectAccess(access))\r\n                {\r\n                    case AccessType.None:\r\n                        result = EmitNodeRead((ItemUse)node, codeGenerator, Operators.GetItemKinds.Get);\r\n                        codeGenerator.IL.Emit(OpCodes.Pop);\r\n                        break;\r\n\r\n                    case AccessType.Read:\r\n                        result = EmitNodeRead((ItemUse)node, codeGenerator, Operators.GetItemKinds.Get);\r\n                        break;\r\n\r\n                    case AccessType.Write:\r\n                        // prepares for write:\r\n                        result = EmitNodeWrite((ItemUse)node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        // if the selector is set to the ReadRef, the chain is emitted as if it was written\r\n                        // (chained nodes are marked as ReadAndWrite):\r\n                        if (codeGenerator.AccessSelector == AccessType.ReadRef)\r\n                            codeGenerator.AccessSelector = AccessType.Write;\r\n\r\n                        result = EmitNodeReadRef((ItemUse)node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.ReadUnknown:\r\n                        result = EmitNodeReadUnknown((ItemUse)node, codeGenerator);\r\n                        break;\r\n\r\n                    case AccessType.WriteRef:\r\n                        // prepares for write:\t\t\t\t\t\r\n                        result = EmitNodeWriteRef((ItemUse)node, codeGenerator);\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(null);\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitAssign(ItemUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var chain = codeGenerator.ChainBuilder;\r\n                PhpTypeCode result;\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.WriteAndReadRef:\r\n                    case AccessType.WriteAndReadUnknown:\r\n                    case AccessType.ReadAndWrite:\r\n                    case AccessType.ReadAndWriteAndReadRef:\r\n                    case AccessType.ReadAndWriteAndReadUnknown:\r\n                    case AccessType.Write:\r\n                    case AccessType.WriteRef:\r\n                        {\r\n                            bool reference = access == AccessType.WriteRef;\r\n\r\n                            // Note that some work was done in Emit() !\r\n                            // In cases 3, 4, 5 EmitAssign is not called\r\n\r\n                            if (node.IsMemberOf != null ||\r\n                               (node.IsMemberOf == null && (node.Array is DirectStFldUse || node.Array is IndirectStFldUse || node.Array is ItemUse)))\r\n                            {\r\n                                // 2, 6, 7\r\n                                chain.EmitSetArrayItem(indexTypeCode, node.Index, reference);\r\n                                chain.End();\r\n                            }\r\n                            else\r\n                            {\r\n                                // Note: The value which should be stored is already loaded on the evaluation stack.\r\n                                //\t\t\t\tPush the destination array and index and call the operator\r\n                                // 1: a_[x]_\r\n                                Debug.Assert(node.Array is SimpleVarUse);\r\n                                chain.IsArrayItem = true;\r\n                                chain.IsLastMember = true;\r\n                                indexTypeCode = codeGenerator.EmitArrayKey(chain, node.Index);\r\n                                node.Array.Emit(codeGenerator);\r\n                                chain.EmitSetItem(indexTypeCode, node.Index, reference);\r\n\r\n                                // Store the changed variable into table of variables (do nothing in optimalized functions)\r\n                                SimpleVarUseHelper.EmitLoadAddress_StoreBack((SimpleVarUse)node.Array, codeGenerator);\r\n                            }\r\n\r\n                            result = PhpTypeCode.Void;\r\n                            break;\r\n                        }\r\n\r\n                    case AccessType.None:\r\n                        // do nothing\r\n                        result = PhpTypeCode.Void;\r\n                        break;\r\n\r\n                    case AccessType.Read:\r\n                        // do nothing\r\n                        result = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case AccessType.ReadRef:\r\n                        // Do nothing\r\n                        result = PhpTypeCode.PhpReference;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(null);\r\n                        result = PhpTypeCode.Invalid;\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            internal override void EmitUnset(ItemUse node, CodeGenerator codeGenerator)\r\n            {\r\n                var chain = codeGenerator.ChainBuilder;\r\n                var itemuse = (ItemUse)node;\r\n\r\n                // Template: \"unset(x[y])\"  Operators.UnsetItem(object obj,object index)\r\n\r\n                // Case 3: a_[x]_[x] never reached\r\n                Debug.Assert(chain.IsArrayItem == false);\r\n                // Case 4,5 never reached\r\n                // 4: a[x]->...\r\n                // 5: ...->a[]->...\r\n                Debug.Assert(chain.IsMember == false);\r\n\r\n                chain.QuietRead = true;\r\n\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 6 , 7: ...->a[]_[]_ , ...->a_[]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.Lengthen(); // for hop over ->\r\n                    node.IsMemberOf.Emit(codeGenerator);\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    chain.EmitUnsetItem(itemuse.Array, itemuse.Index);\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return;\r\n                }\r\n                // 1, 2\r\n                if (itemuse.Array is ItemUse || itemuse.Array is DirectStFldUse || itemuse.Array is IndirectStFldUse /* ??? */)\r\n                {\r\n                    // 2: a[]_[]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n                    chain.EmitUnsetItem(itemuse.Array, itemuse.Index);\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return;\r\n                }\r\n                // 1: a_[x]_\r\n                chain.IsArrayItem = true;\r\n                chain.IsLastMember = true;\r\n                chain.EmitUnsetItem(itemuse.Array, itemuse.Index);\r\n                chain.IsArrayItem = false;\r\n            }\r\n\r\n            internal override PhpTypeCode EmitIsset(ItemUse node, CodeGenerator codeGenerator, bool empty)\r\n            {\r\n                //Template:\r\n                //\t\t\"isset(x[y])\"  Operators.GetItem(x,y) != null      \r\n\r\n                codeGenerator.ChainBuilder.QuietRead = true;\r\n\r\n                // GetItem(x,y) ...\r\n                this.EmitNodeRead(node, codeGenerator, (empty) ? Operators.GetItemKinds.Empty : Operators.GetItemKinds.Isset);\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code to load variable onto the evaluation stack. Supports operators chaining.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A geenrator.</param>\r\n            /// <param name=\"itemGetterKind\">Whether to load for \"get\", \"isset\", or \"empty\".</param>\r\n            private PhpTypeCode EmitNodeRead(ItemUse/*!*/node, CodeGenerator/*!*/ codeGenerator, Operators.GetItemKinds itemGetterKind)\r\n            {\r\n                var chain = codeGenerator.ChainBuilder;\r\n                var itemuse = (ItemUse)node;\r\n                PhpTypeCode result;\r\n\r\n                if (chain.IsArrayItem)\r\n                {\r\n                    // we are in the itemuse.Array subchain //\r\n\r\n                    // 3: a_[x]_[x]\r\n                    chain.Lengthen(); // for []\r\n                    result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n                    return result;\r\n                }\r\n\r\n                // 1,2,4,5,6,7\r\n                if (chain.IsMember)\r\n                {\r\n                    // we are in the field chain //\r\n\r\n                    // 4, 5\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // we are in the middle of the field chain //\r\n\r\n                        // 5: ...->a[]->...\r\n\r\n                        // Lengthen chain for isMemberOf\r\n                        chain.Lengthen(); // for hop over ->\r\n\r\n                        node.IsMemberOf.Emit(codeGenerator);\r\n\r\n                        // Lengthen chain for own []\r\n                        chain.Lengthen();\r\n\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = false;\r\n\r\n                        result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n\r\n                        chain.IsArrayItem = false;\r\n                        return result;\r\n                    }\r\n                    else\r\n                    {\r\n                        // we are at the beginning of the field chain //\r\n\r\n                        // 4: a[x]->...\r\n                        // Lengthen chain for itself\r\n                        chain.Lengthen(); // for own []\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = true;\r\n\r\n                        result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n\r\n                        chain.IsArrayItem = false;\r\n                        return result;\r\n                    }\r\n                }\r\n\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // last node of the field chain //\r\n\r\n                    // 6 , 7: ...->a[]_[]_ , ...->a_[]_\r\n                    bool quiet_read = chain.QuietRead;\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.QuietRead = quiet_read;\r\n                    chain.Lengthen(); // for hop over ->\r\n\r\n                    node.IsMemberOf.Emit(codeGenerator);\r\n\r\n                    // let's emit the itemuse.Array subchain followed by the GetItem:\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return result;\r\n                }\r\n\r\n                // 1, 2\r\n                if (itemuse.Array is ItemUse || itemuse.Array is DirectStFldUse || itemuse.Array is IndirectStFldUse)\r\n                {\r\n                    // we are at the beginning of the field chain //\r\n\r\n                    // 2: a[]_[]_\r\n                    bool quiet_read = chain.QuietRead;\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.QuietRead = quiet_read;\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n\r\n                    result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return result;\r\n                }\r\n\r\n                // no chains //\r\n\r\n                // 1: a_[x]_\r\n                chain.IsArrayItem = true;\r\n                chain.IsLastMember = true;\r\n                result = chain.EmitGetItem(itemuse.Array, itemuse.Index, itemGetterKind);\r\n                chain.IsArrayItem = false;\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code to load a reference to a variable onto an evaluation stack.  Supports operators chaining.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeReadRef(ItemUse/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n                LocalBuilder local = codeGenerator.IL.DeclareLocal(typeof(object));\r\n\r\n                // Case 3: a_[x]_[x] never reached\r\n                Debug.Assert(chain.IsArrayItem == false, \"ReadRef access shouldn't be set to node.Array subchain nodes\");\r\n\r\n                // Case 4,5 never reached\r\n                // 4: a[x]->...\r\n                // 5: ...->a[]->...\r\n                Debug.Assert(chain.IsMember == false);\r\n\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // last node of the field chain //\r\n\r\n                    // 6 , 7: ...->a[]_[]_ , ...->a_[]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    if (node.IsMemberOf is FunctionCall)\r\n                        chain.LoadAddressOfFunctionReturnValue = true;\r\n\r\n                    chain.SetObjectForLazyEmit(node);\r\n\r\n                    // let's emit the node.Array subchain followed by the GetArrayItemRef:\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    chain.Lengthen(); // for own []\r\n                    chain.EmitGetArrayItemRef(node.Array, node.Index);\r\n                    chain.IsArrayItem = false;\r\n                    chain.EndRef();\r\n                    return PhpTypeCode.PhpReference;\r\n                }\r\n\r\n                // 1, 2\r\n                if (node.Array is ItemUse || node.Array is DirectStFldUse || node.Array is IndirectStFldUse)\r\n                {\r\n                    // we are at the beginning of the field chain //\r\n\r\n                    // 2: a[]_[]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n                    chain.Lengthen();\r\n                    chain.EmitGetArrayItemRef(node.Array, node.Index);\r\n                    chain.IsArrayItem = false;\r\n                    chain.EndRef();\r\n                    return PhpTypeCode.PhpReference;\r\n                }\r\n\r\n                // no chains //\r\n\r\n                // 1: a_[x]_\r\n                return chain.EmitGetItemRef((SimpleVarUse)node.Array, node.Index);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code to load <see cref=\"PhpRuntimeChain\"/> onto an evaluation stack. Supports operators chaining.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeReadUnknown(ItemUse/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n                PhpTypeCode result = PhpTypeCode.PhpRuntimeChain;\r\n\r\n                if (chain.IsArrayItem)\r\n                {\r\n                    // 3: a_[x]_[x]\r\n                    chain.Lengthen(); // for []\r\n                    chain.EmitRTChainAddItem(node);\r\n                    return result;\r\n                }\r\n                // 1,2,4,5,6,7\r\n                if (chain.IsMember)\r\n                {\r\n                    // 4, 5\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 5: ...->a[]->...\r\n\r\n                        // Lengthen chain for isMemberOf\r\n                        chain.Lengthen(); // for hop over ->\r\n                        PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                        if (res != PhpTypeCode.PhpRuntimeChain)\r\n                        {\r\n                            codeGenerator.EmitBoxing(res);\r\n                            chain.EmitCreateRTChain();\r\n                        }\r\n                        // Lengthen chain for own []\r\n                        chain.Lengthen();\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = false;\r\n                        chain.EmitRTChainAddItem(node);\r\n                        chain.IsArrayItem = false;\r\n                        return result;\r\n                    }\r\n                    // 4: a[x]->...\r\n                    // Lengthen chain for itself\r\n                    chain.Lengthen(); // for own []\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n                    chain.EmitRTChainAddItem(node);\r\n                    chain.IsArrayItem = false;\r\n                    return result;\r\n                }\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 6 , 7: ...->a[]_[]_ , ...->a_[]_\r\n                    bool quiet_read = chain.QuietRead;\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.QuietRead = quiet_read;\r\n                    chain.Lengthen(); // for hop over ->\r\n                    PhpTypeCode res = node.IsMemberOf.Emit(codeGenerator);\r\n                    if (res != PhpTypeCode.PhpRuntimeChain)\r\n                    {\r\n                        codeGenerator.EmitBoxing(res);\r\n                        chain.EmitCreateRTChain();\r\n                    }\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    chain.EmitRTChainAddItem(node);\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return result;\r\n                }\r\n                // 1, 2\r\n                if (node.Array is ItemUse || node.Array is DirectStFldUse || node.Array is IndirectStFldUse /* ??? */)\r\n                {\r\n                    // 2: a[]_[]_\r\n                    bool quiet_read = chain.QuietRead;\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.QuietRead = quiet_read;\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n                    chain.EmitRTChainAddItem(node);\r\n                    chain.IsArrayItem = false;\r\n                    chain.End();\r\n                    return result;\r\n                }\r\n                // 1: a_[x]_\r\n                chain.IsArrayItem = true;\r\n                chain.IsLastMember = true;\r\n                chain.EmitRTChainAddItem(node);\r\n                chain.IsArrayItem = false;\r\n                return result;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code to prepare an evaluation stack for storing a value into a variable.\r\n            /// Supports operators chaining. Store is finished by calling <see cref=\"EmitAssign\"/>.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeWrite(ItemUse/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n\r\n                if (chain.IsArrayItem)\r\n                {\r\n                    // 3: a_[x]_[v]\r\n                    Debug.Assert(node.IsMemberOf == null);\r\n                    return chain.EmitEnsureItem(node.Array, node.Index, true);\r\n                }\r\n\r\n                // 1, 2, 4, 5, 6, 7\r\n                if (chain.IsMember)\r\n                {\r\n                    // 4, 5\r\n                    if (node.IsMemberOf != null)\r\n                    {\r\n                        // 5: ...->a[]->...\r\n                        // Store isMemberOf for lazy emit\r\n                        chain.SetObjectForLazyEmit(node);\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = false;\r\n                    }\r\n                    else\r\n                    {\r\n                        // 4: a_[x]_->c->..., a[x]_[x]_->c->...\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = true;\r\n                    }\r\n\r\n                    PhpTypeCode result = chain.EmitEnsureItem(node.Array, node.Index, false);\r\n                    chain.IsArrayItem = false;\r\n                    return result;\r\n                }\r\n\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 6, 7: ...->a[x]_[x]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    // Store isMemberOf for lazy emit\r\n                    chain.SetObjectForLazyEmit(node);\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    chain.Lengthen(); // for own []\r\n                    node.Array.Emit(codeGenerator);\r\n                    indexTypeCode = codeGenerator.EmitArrayKey(chain, node.Index);\r\n\r\n                    // Note that EmitAssign will finish the work (SetArrayItem or PhpArray.Add)\r\n                    return PhpTypeCode.Unknown;\r\n                }\r\n                // 1, 2\r\n                Debug.Assert(node.IsMemberOf == null);\r\n\r\n                if (node.Array is ItemUse || node.Array is DirectStFldUse || node.Array is IndirectStFldUse /* ??? */)\r\n                {\r\n                    // 2: a[]_[]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = true;\r\n                    node.Array.Emit(codeGenerator);\r\n                    indexTypeCode = codeGenerator.EmitArrayKey(chain, node.Index);\r\n\r\n\r\n                    // Note that further work will be done by EmitAssign (SetArrayItem or PhpArray.Add)\r\n                    return PhpTypeCode.Unknown;\r\n                }\r\n\r\n                // 1: a_[x]_\r\n                // Do nothing now, let the work be done in EmitAssign()\r\n                return PhpTypeCode.Unknown;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits code to prepare an evaluation stack for storing a reference into a variable.\r\n            /// Supports operators chaining. Store is finished by calling <see cref=\"EmitAssign\"/>.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            private PhpTypeCode EmitNodeWriteRef(ItemUse/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                ChainBuilder chain = codeGenerator.ChainBuilder;\r\n\r\n                // Case 3: a_[x]_[x] never reached\r\n                Debug.Assert(chain.IsArrayItem == false);\r\n\r\n                // Case 4,5 never reached\r\n                // 4: a[x]->...\r\n                // 5: ...->a[]->...\r\n                Debug.Assert(chain.IsMember == false);\r\n\r\n                // 1, 2, 6, 7\r\n                if (node.IsMemberOf != null)\r\n                {\r\n                    // 6, 7: ...->a[x]_[x]_\r\n                    chain.Create();\r\n                    chain.Begin();\r\n                    // Store isMemberOf for lazy emit\r\n                    chain.SetObjectForLazyEmit(node);\r\n                    chain.IsArrayItem = true;\r\n                    chain.IsLastMember = false;\r\n                    chain.Lengthen(); // for own []\r\n                    node.Array.Emit(codeGenerator);\r\n                    indexTypeCode = codeGenerator.EmitArrayKey(chain, node.Index);\r\n\r\n                    // Note that EmitAssign will finish the work (SetArrayItem or PhpArray.Add)\r\n                }\r\n                else\r\n                {\r\n                    // 1, 2\r\n                    Debug.Assert(node.IsMemberOf == null);\r\n\r\n                    if (node.Array is ItemUse || node.Array is DirectStFldUse || node.Array is IndirectStFldUse /* ??? */)\r\n                    {\r\n                        // 2: a[]_[]_\r\n                        chain.Create();\r\n                        chain.Begin();\r\n                        chain.IsArrayItem = true;\r\n                        chain.IsLastMember = true;\r\n                        node.Array.Emit(codeGenerator);\r\n                        indexTypeCode = codeGenerator.EmitArrayKey(chain, node.Index);\r\n\r\n                        // Note that further work will be done by EmitAssign (SetArrayItem or PhpArray.Add)\r\n                    }\r\n                    // 1: a_[x]_\r\n                    // Do nothing now, let the work be done in EmitAssign()\r\n                    // Note further work will be done by EmitAssign (either SetItem or SetItemRef);\t\r\n                }\r\n                return PhpTypeCode.Unknown;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region StringLiteralDereferenceEx\r\n\r\n        [NodeCompiler(typeof(StringLiteralDereferenceEx))]\r\n        sealed class StringLiteralDereferenceExCompiler : ExpressionCompiler<StringLiteralDereferenceEx>\r\n        {\r\n            public override Evaluation Analyze(StringLiteralDereferenceEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                node.StringExpr = node.StringExpr.Analyze(analyzer, info).Literalize();\r\n                node.KeyExpr = node.KeyExpr.Analyze(analyzer, info).Literalize();\r\n\r\n                IntLiteral @int = node.KeyExpr as IntLiteral;\r\n                if (@int != null)\r\n                {\r\n                    int key = (int)@int.Value;\r\n                    if (key >= 0)\r\n                    {\r\n                        StringLiteral str;\r\n                        BinaryStringLiteral bstr;\r\n\r\n                        if ((str = node.StringExpr as StringLiteral) != null)\r\n                        {\r\n                            string strValue = (string)str.Value;\r\n                            if (key < strValue.Length)\r\n                                return new Evaluation(node, strValue[key].ToString());\r\n                            else\r\n                            { }// report invalid index\r\n                        }\r\n                        else if ((bstr = node.StringExpr as BinaryStringLiteral) != null)\r\n                        {\r\n                            var bytesValue = (PhpBytes)bstr.GetValue();\r\n                            if (key < bytesValue.Length)\r\n                                return new Evaluation(node, new PhpBytes(new byte[] { bytesValue[key] }));\r\n                            else\r\n                            { }// report invalid index\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // report invalid index\r\n                    }\r\n                }\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(StringLiteralDereferenceEx node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.ChainBuilder.Create();\r\n                var typeCode = codeGenerator.ChainBuilder.EmitGetItem(node.StringExpr, node.KeyExpr, Operators.GetItemKinds.Get);\r\n                codeGenerator.ChainBuilder.End();\r\n\r\n                return typeCode;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/JumpStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region JumpStmt\r\n\r\n        [NodeCompiler(typeof(JumpStmt), Singleton = true)]\r\n        sealed class JumpStmtCompiler : StatementCompiler<JumpStmt>\r\n        {\r\n            internal override Statement Analyze(JumpStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                if (node.Expression != null)\r\n                {\r\n                    ExInfoFromParent sinfo = ExInfoFromParent.DefaultExInfo;\r\n\r\n                    if (node.Type == JumpStmt.Types.Return\r\n                        && analyzer.CurrentRoutine != null && analyzer.CurrentRoutine.Signature.AliasReturn\r\n                        && node.Expression is VarLikeConstructUse)\r\n                    {\r\n                        sinfo.Access = AccessType.ReadRef;\r\n                    }\r\n\r\n                    node.Expression = node.Expression.Analyze(analyzer, sinfo).Literalize();\r\n\r\n                    if (node.Type != JumpStmt.Types.Return && node.Expression.HasValue())\r\n                    {\r\n                        int level = Convert.ObjectToInteger(node.Expression.GetValue());\r\n                        if (level > analyzer.LoopNestingLevel || level < 0)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.InvalidBreakLevelCount, analyzer.SourceUnit, node.Span, level);\r\n                        }\r\n                    }\r\n                }\r\n                else if (node.Type != JumpStmt.Types.Return && analyzer.LoopNestingLevel == 0)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.InvalidBreakLevelCount, analyzer.SourceUnit, node.Span, 1);\r\n                }\r\n\r\n                // code in the same block after return, break, continue is unreachable\r\n                analyzer.EnterUnreachableCode();\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(JumpStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"JumpStmt\");\r\n\r\n                // marks a sequence point:\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                switch (node.Type)\r\n                {\r\n                    case JumpStmt.Types.Break:\r\n                        // Emit simple break; - break the most inner loop\r\n                        if (node.Expression == null)\r\n                        {\r\n                            codeGenerator.BranchingStack.EmitBreak();\r\n                        }\r\n                        else if (node.Expression.HasValue())\r\n                        {\r\n                            // We can get the number at compile time and generate the right branch \r\n                            // instruction for break x; where x is Literal\r\n                            codeGenerator.BranchingStack.EmitBreak(Convert.ObjectToInteger(node.Expression.GetValue()));\r\n                        }\r\n                        else\r\n                        {\r\n                            // In this case we emit the switch that decides where to branch at runtime.\r\n                            codeGenerator.EmitConversion(node.Expression, PhpTypeCode.Integer);\r\n                            codeGenerator.BranchingStack.EmitBreakRuntime();\r\n                        }\r\n                        break;\r\n\r\n                    case JumpStmt.Types.Continue:\r\n                        // Emit simple continue; - banch back to the condition of the most inner loop\r\n                        if (node.Expression == null)\r\n                        {\r\n                            codeGenerator.BranchingStack.EmitContinue();\r\n                        }\r\n                        else if (node.Expression.HasValue())\r\n                        {\r\n                            // We can get the number at compile time and generate the right branch \r\n                            // instruction for continue x; where x is Literal\r\n                            codeGenerator.BranchingStack.EmitContinue(Convert.ObjectToInteger(node.Expression.GetValue()));\r\n                        }\r\n                        else\r\n                        {\r\n                            // In this case we emit the switch that decides where to branch at runtime.\r\n                            codeGenerator.EmitConversion(node.Expression, PhpTypeCode.Integer);\r\n                            codeGenerator.BranchingStack.EmitContinueRuntime();\r\n                        }\r\n                        break;\r\n\r\n                    case JumpStmt.Types.Return:\r\n                        if (codeGenerator.ReturnsPhpReference)\r\n                            EmitReturnPhpReference(node.Expression, codeGenerator);\r\n                        else\r\n                            EmitReturnObject(node.Expression, codeGenerator);\r\n                        break;\r\n\r\n                    default:\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Return value is not deeply copied since the deep copy takes place when the caller accesses the value.\r\n            /// </summary>\r\n            private void EmitReturnObject(Expression expr, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                PhpTypeCode result;\r\n\r\n                if (expr != null)\r\n                {\r\n                    result = expr.Emit(codeGenerator);\r\n\r\n                    // dereference return value:\r\n                    if (result == PhpTypeCode.PhpReference)\r\n                    {\r\n                        il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                    }\r\n                    else if (result == PhpTypeCode.PhpArray)\r\n                    {\r\n                        // <array>.InplaceCopyOnReturn = true;\r\n                        il.Emit(OpCodes.Dup);\r\n                        il.Emit(OpCodes.Ldc_I4_1);\r\n                        il.Emit(OpCodes.Call, Core.Emit.Properties.PhpArray_InplaceCopyOnReturn.GetSetMethod());\r\n                    }\r\n                    else\r\n                    {\r\n                        codeGenerator.EmitBoxing(result);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    il.Emit(OpCodes.Ldnull);\r\n                }\r\n\r\n                codeGenerator.EmitReturnBranch();\r\n            }\r\n\r\n            private void EmitReturnPhpReference(Expression expr, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                PhpTypeCode result;\r\n\r\n                if (expr != null)\r\n                {\r\n                    result = expr.Emit(codeGenerator);\r\n\r\n                    if (result != PhpTypeCode.PhpReference)\r\n                    {\r\n                        // return value is \"boxed\" to PhpReference:\r\n                        if (result != PhpTypeCode.Void)\r\n                        {\r\n                            codeGenerator.EmitBoxing(result);\r\n\r\n                            // We can box the value without making a copy since the result of the return expression\r\n                            // is not accessible after returnign from the routine as it is a value (not a reference).\r\n                            il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n                        }\r\n                        else\r\n                        {\r\n                            il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                }\r\n\r\n                codeGenerator.EmitReturnBranch();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GotoStmt\r\n\r\n        [NodeCompiler(typeof(GotoStmt), Singleton = true)]\r\n        sealed class GotoStmtCompiler : StatementCompiler<GotoStmt>\r\n        {\r\n            internal override Statement Analyze(GotoStmt node, Analyzer analyzer)\r\n            {\r\n                //\r\n                // TODO: analyze reachability, restrict jumps inside blocks, ...\r\n                //\r\n                // goto x;\r\n                // // unreachable\r\n                // x:\r\n                //\r\n\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                Dictionary<VariableName, Statement> labels = analyzer.CurrentLabels;\r\n\r\n                Statement stmt;\r\n                if (labels.TryGetValue(node.LabelName, out stmt))\r\n                {\r\n                    LabelStmt label = stmt as LabelStmt;\r\n                    if (label != null)\r\n                        label.IsReferred = true;\r\n                }\r\n                else\r\n                {\r\n                    // add a stub (this node):\r\n                    labels.Add(node.LabelName, node);\r\n                }\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(GotoStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(codeGenerator.CurrentLabels.ContainsKey(node.LabelName));\r\n                Debug.Assert(codeGenerator.CurrentLabels[node.LabelName] is LabelStmt);\r\n\r\n                // marks a sequence point:\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                codeGenerator.IL.Emit(OpCodes.Br, ((LabelStmt)codeGenerator.CurrentLabels[node.LabelName]).Label);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region LabelStmt\r\n\r\n        [NodeCompiler(typeof(LabelStmt), Singleton = true)]\r\n        sealed class LabelStmtCompiler : StatementCompiler<LabelStmt>\r\n        {\r\n            internal override Statement Analyze(LabelStmt node, Analyzer analyzer)\r\n            {\r\n                Dictionary<VariableName, Statement> labels = analyzer.CurrentLabels;\r\n\r\n                Statement stmt;\r\n                if (labels.TryGetValue(node.Name, out stmt))\r\n                {\r\n                    if (stmt is LabelStmt)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.LabelRedeclared, analyzer.SourceUnit, node.Span, node.Name);\r\n                        analyzer.ErrorSink.Add(Errors.RelatedLocation, analyzer.SourceUnit, stmt.Span);\r\n                    }\r\n                    else\r\n                    {\r\n                        labels[node.Name] = node;\r\n                        node.IsReferred = true;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    labels.Add(node.Name, node);\r\n                }\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(LabelStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.IL.MarkLabel(node.Label);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/LambdaFunctionExpr.cs",
    "content": "/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region LambdaFunctionDecl\r\n\r\n        [NodeCompiler(typeof(LambdaFunctionExpr))]\r\n        sealed class LambdaFunctionExprCompiler : ExpressionCompiler<LambdaFunctionExpr>\r\n        {\r\n            private PhpLambdaFunction/*!A*/function;\r\n\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(LambdaFunctionExpr node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                // construct fake signature containing both - use params and regular params\r\n                var allparams = new List<FormalParam>(node.Signature.FormalParams);\r\n                if (node.UseParams != null)\r\n                    allparams.InsertRange(0, node.UseParams);\r\n                var signature = new Signature(false, allparams);\r\n\r\n                //\r\n                function = new PhpLambdaFunction(signature, analyzer.SourceUnit, node.Span);\r\n                function.WriteUp(new TypeSignature(FormalTypeParam.EmptyList).ToPhpRoutineSignature(function));\r\n\r\n                SignatureCompiler.AnalyzeMembers(signature, analyzer, function);\r\n\r\n                //attributes.Analyze(analyzer, this);\r\n\r\n                // ensure 'use' parameters in parent scope:\r\n                if (node.UseParams != null)\r\n                    foreach (var p in node.UseParams)\r\n                        analyzer.CurrentVarTable.Set(p.Name, p.PassedByRef);\r\n\r\n                // function is analyzed even if it is unreachable in order to discover more errors at compile-time:\r\n                analyzer.EnterFunctionDeclaration(function);\r\n\r\n                //typeSignature.Analyze(analyzer);\r\n                SignatureCompiler.Analyze(signature, analyzer);\r\n\r\n                node.Body.Analyze(analyzer);\r\n\r\n                // validate function and its body:\r\n                function.ValidateBody(analyzer.ErrorSink);\r\n\r\n                analyzer.LeaveFunctionDeclaration();\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override bool IsDeeplyCopied(LambdaFunctionExpr node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(LambdaFunctionExpr node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"LambdaFunctionExpr\");\r\n\r\n                var typeBuilder = codeGenerator.IL.TypeBuilder;\r\n\r\n                // define argless and argfull\r\n                this.function.DefineBuilders(typeBuilder);\r\n\r\n                //\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n                if (!codeGenerator.EnterFunctionDeclaration(function))\r\n                    throw new Exception(\"EnterFunctionDeclaration() failed!\");\r\n\r\n                codeGenerator.EmitArgfullOverloadBody(function, node.Body, node.EntireDeclarationSpan, node.DeclarationBodyPosition);\r\n\r\n                codeGenerator.LeaveFunctionDeclaration();\r\n\r\n                // new Closure( <context>, new RoutineDelegate(null,function.ArgLess), <parameters>, <static> )\r\n                codeGenerator.EmitLoadScriptContext();\r\n\r\n                var/*!*/il = codeGenerator.IL;\r\n                il.Emit(OpCodes.Ldnull);\r\n                il.Emit(OpCodes.Ldftn, function.ArgLessInfo);\r\n                il.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n\r\n                if (node.Signature.FormalParams != null && node.Signature.FormalParams.Length != 0)\r\n                {\r\n                    // array = new PhpArray(<int_count>, <string_count>);\r\n                    il.Emit(OpCodes.Ldc_I4, 0);\r\n                    il.Emit(OpCodes.Ldc_I4, node.Signature.FormalParams.Length);\r\n                    il.Emit(OpCodes.Newobj, Constructors.PhpArray.Int32_Int32);\r\n\r\n                    foreach (var p in node.Signature.FormalParams)\r\n                    {\r\n                        // CALL array.SetArrayItem(\"&$name\", \"<required>\" | \"<optional>\");\r\n                        il.Emit(OpCodes.Dup);   // PhpArray\r\n\r\n                        string keyValue = string.Format(\"{0}${1}\", p.PassedByRef ? \"&\" : null, p.Name.Value);\r\n\r\n                        il.Emit(OpCodes.Ldstr, keyValue);\r\n                        il.Emit(OpCodes.Ldstr, (p.InitValue != null) ? \"<optional>\" : \"<required>\");\r\n                        il.LdcI4(IntStringKey.StringKeyToArrayIndex(keyValue));\r\n\r\n                        il.Emit(OpCodes.Call, Methods.PhpArray.SetArrayItemExact_String);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    il.Emit(OpCodes.Ldnull);\r\n                }\r\n\r\n                if (node.UseParams != null && node.UseParams.Count != 0)\r\n                {\r\n                    // array = new PhpArray(<int_count>, <string_count>);\r\n                    il.Emit(OpCodes.Ldc_I4, 0);\r\n                    il.Emit(OpCodes.Ldc_I4, node.UseParams.Count);\r\n                    il.Emit(OpCodes.Newobj, Constructors.PhpArray.Int32_Int32);\r\n\r\n                    foreach (var p in node.UseParams)\r\n                    {\r\n                        // <stack>.SetArrayItem{Ref}\r\n                        il.Emit(OpCodes.Dup);   // PhpArray\r\n\r\n                        string variableName = p.Name.Value;\r\n\r\n                        il.Emit(OpCodes.Ldstr, variableName);\r\n                        if (p.PassedByRef)\r\n                        {\r\n                            DirectVarUseCompiler.EmitLoadRef(codeGenerator, p.Name);\r\n                            il.Emit(OpCodes.Call, Methods.PhpArray.SetArrayItemRef_String);\r\n                        }\r\n                        else\r\n                        {\r\n                            // LOAD PhpVariable.Copy( <name>, Assigned )\r\n                            DirectVarUseCompiler.EmitLoad(codeGenerator, p.Name);\r\n                            il.LdcI4((int)CopyReason.Assigned);\r\n                            il.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\r\n                            // .SetArrayItemExact( <stack>, <stack>, <hashcode> )\r\n                            il.LdcI4(IntStringKey.StringKeyToArrayIndex(variableName));\r\n                            il.Emit(OpCodes.Call, Methods.PhpArray.SetArrayItemExact_String);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    il.Emit(OpCodes.Ldnull);\r\n                }\r\n\r\n                il.Emit(OpCodes.Newobj, typeof(PHP.Library.SPL.Closure).GetConstructor(new Type[] { typeof(ScriptContext), typeof(RoutineDelegate), typeof(PhpArray), typeof(PhpArray) }));\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/ListEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(ListEx))]\r\n        sealed class ListExCompiler : ExpressionCompiler<ListEx>\r\n        {\r\n            public override Evaluation Analyze(ListEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n                ExInfoFromParent sinfo = new ExInfoFromParent(node);\r\n\r\n                // r-value\r\n                if (node.RValue != null)\r\n                    node.RValue = node.RValue.Analyze(analyzer, sinfo).Literalize();\r\n\r\n                // l-values\r\n                sinfo.Access = AccessType.Write;\r\n\r\n                for (int i = 0; i < node.LValues.Count; i++)\r\n                {\r\n                    if (node.LValues[i] != null)\r\n                        node.LValues[i] = node.LValues[i].Analyze(analyzer, sinfo).Expression;\r\n                }\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ListEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"ListEx\");\r\n\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Debug.Assert(node.RValue != null);   // the root of the lists structure must have RValue assigned. list(whatever) = RValue\r\n\r\n                codeGenerator.EmitBoxing(node.RValue.Emit(codeGenerator));   // put object on the top of the stack\r\n\r\n                // assign the value from top of evaluation stack to the list\r\n                return this.EmitAssign(node, codeGenerator);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Assigns items of array from the top of evaluation stack to the list.\r\n            /// </summary>\r\n            internal PhpTypeCode EmitAssign(ListEx listex, CodeGenerator codeGenerator)\r\n            {\r\n                LocalBuilder o1 = codeGenerator.IL.GetTemporaryLocal(Types.Object[0]);   // temporary variable for object to be copied\r\n                EmitAssignList(codeGenerator, listex.LValues, o1);                 // assign particular elements of the list, using the array from the stack\r\n\r\n                // return temporary local\r\n                codeGenerator.IL.ReturnTemporaryLocal(o1);\r\n\r\n                // the original top of the stack is replaced with the instance of array or null\r\n                if (access == AccessType.Read)\r\n                {\r\n                    return PhpTypeCode.PhpArray;    // return the top of the stack (null or array)\r\n                }\r\n                else\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop); // remove the top of the stack, not used\r\n                    return PhpTypeCode.Void;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Use the object on the top of the stack, the object here will stay untouched.\r\n            /// \r\n            /// Assigns recursively into lvalues. If the object is PhpArray, assign items, otherwise assign nulls.\r\n            /// </summary>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <param name=\"vals\">Arguments of the list expression.</param>\r\n            /// <param name=\"o1\">Temporary local variable.</param>\r\n            /// <remarks>After the method finishes, the top of the stack is the same.</remarks>\r\n            private static void EmitAssignList(CodeGenerator codeGenerator, List<Expression> vals, LocalBuilder o1)\r\n            {\r\n                Label end_label = codeGenerator.IL.DefineLabel();\r\n                Label storearray_label = codeGenerator.IL.DefineLabel();\r\n\r\n                // PUSH stack[0] as PhpArray\r\n                codeGenerator.IL.Emit(OpCodes.Dup);                         // copy of the value, keep original value on the top of the stack\r\n                codeGenerator.IL.Emit(OpCodes.Isinst, Types.PhpArray[0]);   // convert the top of the stack into PhpArray\r\n\r\n                // the top of the stack points to array or null\r\n                // if (stack[0] != null) goto storearray_label\r\n                codeGenerator.IL.Emit(OpCodes.Dup);                         // copy of the value, keep original value on the top of the stack\r\n                codeGenerator.IL.Emit(OpCodes.Brtrue, storearray_label);    // jump to storearray_label if conversion succeeded\r\n\r\n                // Conversion to array failed, assign null into lvalues\r\n                EmitAssignListNulls(codeGenerator, vals);                   // fill vals with null recursively\r\n                codeGenerator.IL.Emit(OpCodes.Br, end_label);               // goto end_label\r\n\r\n                // Conversion to PhpArray succeeded\r\n                codeGenerator.IL.MarkLabel(storearray_label, true);\r\n\r\n                // assign array items into lvalues\r\n                EmitAssignListArray(codeGenerator, vals, o1);\r\n\r\n                // End label\r\n                codeGenerator.IL.MarkLabel(end_label, true);\r\n\r\n                codeGenerator.IL.Emit(OpCodes.Pop); // remove the top of the stack (array or null), not used then\r\n            }\r\n\r\n            private static void EmitAssignListArray(CodeGenerator codeGenerator, List<Expression> vals, LocalBuilder o1)\r\n            {\r\n                //\r\n                // the array is on the top of the evaluation stack, value will be kept, must be duplicated to be used\r\n                //\r\n\r\n                // Process in the reverse order !\r\n                for (int i = vals.Count - 1; i >= 0; i--)\r\n                {\r\n                    if (vals[i] == null)\r\n                        continue;\r\n\r\n                    // push the array item onto the stack\r\n\r\n                    // LOAD array.GetArrayItem(i,false)\r\n                    codeGenerator.IL.Emit(OpCodes.Dup);         // copy of the array\r\n                    codeGenerator.IL.Emit(OpCodes.Ldc_I4, i);   // i\r\n                    codeGenerator.IL.Emit(OpCodes.Ldc_I4_0);    // false (!quiet)\r\n                    codeGenerator.IL.Emit(OpCodes.Callvirt, Methods.PhpArray.GetArrayItem_Int32);\r\n\r\n                    // assign the item from the stack into vals[i]\r\n\r\n                    if (vals[i] is VariableUse)\r\n                    {\r\n                        // o1 = stack[0]\r\n                        codeGenerator.IL.Stloc(o1);                 // store the value into local variable o1\r\n\r\n                        // PREPARE <variable>:\r\n                        codeGenerator.ChainBuilder.Create();\r\n                        vals[i].Emit(codeGenerator);\r\n\r\n                        // LOAD o1\r\n                        codeGenerator.IL.Ldloc(o1);\r\n\r\n                        // LOAD PhpVariable.Copy(STACK,CopyReason.Assigned)\r\n                        codeGenerator.EmitVariableCopy(CopyReason.Assigned, null);\r\n\r\n                        // STORE <variable>:\r\n                        VariableUseHelper.EmitAssign((VariableUse)vals[i], codeGenerator);\r\n                        codeGenerator.ChainBuilder.End();\r\n                    }\r\n                    else if (vals[i] is ListEx)\r\n                    {\r\n                        EmitAssignList(codeGenerator, (vals[i] as ListEx).LValues, o1);\r\n                        codeGenerator.IL.Emit(OpCodes.Pop); // removes used value from the stack\r\n                    }\r\n                    else\r\n                    {\r\n                        codeGenerator.IL.Emit(OpCodes.Pop); // removes used value from the stack\r\n\r\n                        Debug.Fail(\"Unsupported list argument of type \" + vals[i].GetType().ToString());\r\n                    }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Assigns null into given lvalues recursively.\r\n            /// </summary>\r\n            /// <param name=\"codeGenerator\"></param>\r\n            /// <param name=\"vals\"></param>\r\n            private static void EmitAssignListNulls(CodeGenerator codeGenerator, List<Expression> vals)\r\n            {\r\n                // clear lvalues recursively\r\n\r\n                for (int i = 0; i < vals.Count; ++i)\r\n                {\r\n                    if (vals[i] == null)\r\n                        continue;\r\n\r\n                    if (vals[i] is VariableUse)\r\n                    {\r\n                        // Prepare stack for writing result...\r\n                        codeGenerator.ChainBuilder.Create();\r\n                        (vals[i] as VariableUse).Emit(codeGenerator);\r\n\r\n                        codeGenerator.IL.Emit(OpCodes.Ldnull);\r\n\r\n                        // Store result\r\n                        VariableUseHelper.EmitAssign((VariableUse)vals[i], codeGenerator);\r\n                        codeGenerator.ChainBuilder.End();\r\n                    }\r\n                    else if (vals[i] is ListEx)\r\n                    {\r\n                        EmitAssignListNulls(codeGenerator, (vals[i] as ListEx).LValues);\r\n                    }\r\n                    else\r\n                    {\r\n                        Debug.Fail(\"Unsupported list argument of type \" + vals[i].GetType().ToString());\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/Literal.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    internal static class LiteralUtils\r\n    {\r\n        public static Literal/*!*/Create(Text.Span position, object value, AccessType access)\r\n        {\r\n            Literal result;\r\n\r\n            if (value == null) result = new NullLiteral(position);\r\n            else if (value.GetType() == typeof(int)) result = new IntLiteral(position, (int)value);\r\n            else if (value.GetType() == typeof(string)) result = new StringLiteral(position, (string)value);\r\n            else if (value.GetType() == typeof(bool)) result = new BoolLiteral(position, (bool)value);\r\n            else if (value.GetType() == typeof(double)) result = new DoubleLiteral(position, (double)value);\r\n            else if (value.GetType() == typeof(long)) result = new LongIntLiteral(position, (long)value);\r\n            else if (value.GetType() == typeof(PhpBytes)) result = new BinaryStringLiteral(position, ((PhpBytes)value).ReadonlyData);\r\n            else throw new ArgumentException(\"value\");\r\n\r\n            //\r\n            Debug.Assert(result != null);\r\n            result.NodeCompiler<IExpressionCompiler>().Access = access;\r\n\r\n            //\r\n            return result;\r\n        }\r\n    }\r\n\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(IntLiteral))]\r\n        [NodeCompiler(typeof(LongIntLiteral))]\r\n        [NodeCompiler(typeof(DoubleLiteral))]\r\n        [NodeCompiler(typeof(StringLiteral))]\r\n        [NodeCompiler(typeof(BinaryStringLiteral))]\r\n        [NodeCompiler(typeof(BoolLiteral))]\r\n        [NodeCompiler(typeof(NullLiteral))]\r\n        sealed class LiteralCompiler : ExpressionCompiler<Literal>\r\n        {\r\n            public override PhpTypeCode GetValueTypeCode(Literal node)\r\n            {\r\n                if (node.GetType() == typeof(IntLiteral))\r\n                    return PhpTypeCode.Integer;\r\n                if (node.GetType() == typeof(StringLiteral))\r\n                    return PhpTypeCode.String;\r\n                if (node.GetType() == typeof(BoolLiteral))\r\n                    return PhpTypeCode.Boolean;\r\n                if (node.GetType() == typeof(NullLiteral))\r\n                    return PhpTypeCode.Object;\r\n                if (node.GetType() == typeof(DoubleLiteral))\r\n                    return PhpTypeCode.Double;\r\n                if (node.GetType() == typeof(LongIntLiteral))\r\n                    return PhpTypeCode.LongInteger;\r\n                if (node.GetType() == typeof(BinaryStringLiteral))\r\n                    return PhpTypeCode.PhpBytes;\r\n                \r\n                throw new ArgumentException();\r\n            }\r\n\r\n            public override object GetValue(Literal node)\r\n            {\r\n                var value = node.ValueObj;\r\n                if (value != null)\r\n                {\r\n                    // wrap CLR value to PHP value type\r\n                    if (value.GetType() == typeof(byte[]))\r\n                        value = new PhpBytes((byte[])value);\r\n                }\r\n\r\n                Debug.Assert(PhpVariable.HasLiteralPrimitiveType(value));\r\n\r\n                return value;\r\n            }\r\n\r\n            public override Evaluation EvaluatePriorAnalysis(Literal node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                return new Evaluation(node, GetValue(node));\r\n            }\r\n\r\n            public override Evaluation Analyze(Literal node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                // possible access values: Read, None\r\n                access = info.Access;\r\n                return new Evaluation(node, GetValue(node));\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(Literal node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits the literal. The common code for all literals.\r\n            /// </summary>\r\n            public override PhpTypeCode Emit(Literal node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // loads the value:\r\n                il.LoadLiteral(GetValue(node));\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                        return GetValueTypeCode(node);\r\n\r\n                    case AccessType.None:\r\n                        il.Emit(OpCodes.Pop);\r\n                        return GetValueTypeCode(node);\r\n\r\n                    case AccessType.ReadUnknown:\r\n                    case AccessType.ReadRef:\r\n                        // created by evaluation a function called on literal, e.g. $x =& sin(10);\r\n                        codeGenerator.EmitBoxing(GetValueTypeCode(node));\r\n                        il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\r\n                        return PhpTypeCode.PhpReference;\r\n                }\r\n\r\n                Debug.Fail(\"Invalid access type\");\r\n                return PhpTypeCode.Invalid;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/LoopStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region WhileStmt\r\n\r\n        [NodeCompiler(typeof(WhileStmt), Singleton = true)]\r\n        sealed class WhileStmtCompiler : StatementCompiler<WhileStmt>\r\n        {\r\n            internal override Statement Analyze(WhileStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                Evaluation cond_eval = node.CondExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                if (cond_eval.HasValue)\r\n                {\r\n                    if (Convert.ObjectToBoolean(cond_eval.Value))\r\n                    {\r\n                        // unbounded loop:\r\n                        node.CondExpr = null;\r\n                    }\r\n                    else\r\n                    {\r\n                        // unreachable body:\r\n                        if (node.LoopType == WhileStmt.Type.While)\r\n                        {\r\n                            node.Body.ReportUnreachable(analyzer);\r\n                            return EmptyStmt.Unreachable;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                node.CondExpr = cond_eval.Literalize();\r\n\r\n                analyzer.EnterLoopBody();\r\n                node.Body = node.Body.Analyze(analyzer);\r\n                analyzer.LeaveLoopBody();\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(WhileStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Loop.While\");\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n                Label cond_label = il.DefineLabel();\r\n                Label exit_label = il.DefineLabel();\r\n                Label stat_label = il.DefineLabel();\r\n\r\n                codeGenerator.BranchingStack.BeginLoop(cond_label, exit_label, codeGenerator.ExceptionBlockNestingLevel);\r\n\r\n                if (node.LoopType == WhileStmt.Type.While)\r\n                {\r\n                    il.Emit(OpCodes.Br, cond_label);\r\n                }\r\n\r\n                // body:\r\n                il.MarkLabel(stat_label);\r\n                node.Body.Emit(codeGenerator);\r\n\r\n                // marks a sequence point containing condition:\r\n                codeGenerator.MarkSequencePoint(node.CondExpr);\r\n\r\n                // condition:\r\n                il.MarkLabel(cond_label);\r\n\r\n                // bounded loop:\r\n                if (node.CondExpr != null)\r\n                {\r\n                    // IF (<(bool) condition>) GOTO stat;\r\n                    codeGenerator.EmitConversion(node.CondExpr, PhpTypeCode.Boolean);\r\n                    il.Emit(OpCodes.Brtrue, stat_label);\r\n                }\r\n\r\n                il.MarkLabel(exit_label);\r\n                codeGenerator.BranchingStack.EndLoop();\r\n\r\n                il.ForgetLabel(cond_label);\r\n                il.ForgetLabel(exit_label);\r\n                il.ForgetLabel(stat_label);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ForStmt\r\n\r\n        [NodeCompiler(typeof(ForStmt), Singleton = true)]\r\n        sealed class ForStmtCompiler : StatementCompiler<ForStmt>\r\n        {\r\n            internal override Statement Analyze(ForStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n\r\n                info.Access = AccessType.None;\r\n\r\n                var initExList = node.InitExList;\r\n                for (int i = 0; i < initExList.Count; i++)\r\n                {\r\n                    initExList[i] = initExList[i].Analyze(analyzer, info).Literalize();\r\n                }\r\n\r\n                var condExList = node.CondExList;\r\n                if (condExList.Count > 0)\r\n                {\r\n                    // all but the last expression is evaluated and the result is ignored (AccessType.None), \r\n                    // the last is read:\r\n\r\n                    for (int i = 0; i < condExList.Count - 1; i++)\r\n                    {\r\n                        condExList[i] = condExList[i].Analyze(analyzer, info).Literalize();\r\n                    }\r\n\r\n                    condExList[condExList.Count - 1] = condExList[condExList.Count - 1].Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                }\r\n\r\n                var actionExList = node.ActionExList;\r\n                for (int i = 0; i < actionExList.Count; i++)\r\n                {\r\n                    actionExList[i] = actionExList[i].Analyze(analyzer, info).Literalize();\r\n                }\r\n\r\n                analyzer.EnterLoopBody();\r\n                node.Body = node.Body.Analyze(analyzer);\r\n                analyzer.LeaveLoopBody();\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(ForStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Loop.For\");\r\n\r\n                // Template: \r\n                // we expand the for-statement\r\n                //\t\tfor (<expr1>; <expr2>; <expr3>) <loop body>\r\n                // in the while form\r\n                //\t\t{\r\n                //\t\t\t<expr1>;\r\n                //\t\t\twhile (<expr2>) {\r\n                //\t\t\t\t<loop body>;\r\n                //\t\t\t\t<expr 3>;\r\n                //\t\t\t}\r\n                //\t\t}\t\r\n\r\n                Label cond_label = codeGenerator.IL.DefineLabel();\r\n                Label iterate_label = codeGenerator.IL.DefineLabel();\r\n                Label exit_label = codeGenerator.IL.DefineLabel();\r\n                Label stat_label = codeGenerator.IL.DefineLabel();\r\n\r\n                codeGenerator.BranchingStack.BeginLoop(\r\n                    iterate_label, exit_label, codeGenerator.ExceptionBlockNestingLevel);\r\n\r\n                // marks a sequence point containing initialization statements (if any):\r\n                codeGenerator.MarkSequencePoint(node.InitExList);\r\n\r\n                // Emit <expr1>\r\n                foreach (Expression expr in node.InitExList)\r\n                    expr.Emit(codeGenerator);\r\n\r\n                // Branch unconditionally to the begin of condition evaluation\r\n                codeGenerator.IL.Emit(OpCodes.Br, cond_label);\r\n\r\n                // Emit loop body\r\n                codeGenerator.IL.MarkLabel(stat_label);\r\n                node.Body.Emit(codeGenerator);\r\n                codeGenerator.IL.MarkLabel(iterate_label);\r\n\r\n                // marks a sequence point containing action statements (if any):\r\n                codeGenerator.MarkSequencePoint(node.ActionExList);\r\n                \r\n                // Emit <expr3>\r\n                foreach (Expression expr in node.ActionExList)\r\n                    expr.Emit(codeGenerator);\r\n\r\n                // marks a sequence point containing condition (if any):\r\n                codeGenerator.MarkSequencePoint(node.CondExList);\r\n\r\n                // Emit <expr2>\r\n                codeGenerator.IL.MarkLabel(cond_label);\r\n                if (node.CondExList.Count > 0)\r\n                {\r\n                    for (int i = 0; i < (node.CondExList.Count - 1); i++)\r\n                        node.CondExList[i].Emit(codeGenerator);\r\n\r\n                    // LOAD <(bool) condition>\r\n                    codeGenerator.EmitConversion(node.CondExList[node.CondExList.Count - 1], PhpTypeCode.Boolean);\r\n                }\r\n                else\r\n                    codeGenerator.IL.LdcI4(1);\r\n\r\n                codeGenerator.IL.Emit(OpCodes.Brtrue, stat_label);\r\n\r\n                codeGenerator.IL.MarkLabel(exit_label);\r\n                codeGenerator.BranchingStack.EndLoop();\r\n\r\n                codeGenerator.IL.ForgetLabel(cond_label);\r\n                codeGenerator.IL.ForgetLabel(iterate_label);\r\n                codeGenerator.IL.ForgetLabel(exit_label);\r\n                codeGenerator.IL.ForgetLabel(stat_label);\r\n            }\r\n        }\r\n        #endregion\r\n\r\n        #region ForeachStmt\r\n\r\n        [NodeCompiler(typeof(ForeachVar), Singleton = true)]\r\n        sealed class ForeachVarCompiler : INodeCompiler, IForeachVarCompiler\r\n        {\r\n            public void Analyze(ForeachVar/*!*/node, Analyzer analyzer)\r\n            {\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n                if (node.Alias) info.Access = AccessType.WriteRef;\r\n                else info.Access = AccessType.Write;\r\n\r\n                // retval not needed\r\n                node.Expression.Analyze(analyzer, info);\r\n            }\r\n\r\n            public PhpTypeCode Emit(ForeachVar/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                var varuse = node.Variable;\r\n                if (varuse != null)\r\n                {\r\n                    return varuse.Emit(codeGenerator);\r\n                }\r\n                else\r\n                {\r\n                    // other epxressions are handled in EmitAssign only\r\n                    return PhpTypeCode.Unknown; // ignored\r\n                }\r\n            }\r\n\r\n            public PhpTypeCode EmitAssign(ForeachVar/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                // Object (or PhpReference) is on top of evaluation stack\r\n\r\n                var varuse = node.Variable;\r\n                if (varuse != null)\r\n                {\r\n                    return VariableUseHelper.EmitAssign(varuse, codeGenerator);\r\n                }\r\n                else\r\n                {\r\n                    var listex = node.List;\r\n                    if (listex != null)\r\n                    {\r\n                        return listex.NodeCompiler<ListExCompiler>().EmitAssign(listex, codeGenerator);\r\n                    }\r\n                    else\r\n                    {\r\n                        throw new InvalidOperationException();\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        [NodeCompiler(typeof(ForeachStmt), Singleton = true)]\r\n        sealed class ForeachStmtCompiler : StatementCompiler<ForeachStmt>\r\n        {\r\n            internal override Statement Analyze(ForeachStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                //next version: array.SetSeqPoint();\r\n                node.Enumeree.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                if (node.KeyVariable != null) node.KeyVariable.Analyze(analyzer);\r\n                node.ValueVariable.Analyze(analyzer);\r\n\r\n                analyzer.EnterLoopBody();\r\n                node.Body = node.Body.Analyze(analyzer);\r\n                analyzer.LeaveLoopBody();\r\n                return node;\r\n            }\r\n\r\n            /// <author>Tomas Matousek</author>\r\n            /// <remarks>\r\n            /// Emits the following code:\r\n            /// <code>\r\n            /// IPhpEnumerable enumerable = ARRAY as IPhpEnumerable;\r\n            /// if (enumerable==null)\r\n            /// {\r\n            ///   PhpException.InvalidForeachArgument();\r\n            /// }\r\n            /// else\r\n            /// FOREACH_BEGIN:\r\n            /// {\r\n            ///   IDictionaryEnumerator enumerator = enumerable.GetForeachEnumerator(KEYED,ALIASED,TYPE_HANDLE);\r\n            ///    \r\n            ///   goto LOOP_TEST;\r\n            ///   LOOP_BEGIN:\r\n            ///   {\r\n            ///     ASSIGN(value,enumerator.Value);\r\n            ///     ASSIGN(key,enumerator.Key);\r\n            ///     \r\n            ///     BODY; \r\n            ///   }\r\n            ///   LOOP_TEST:\r\n            ///   if (enumerator.MoveNext()) goto LOOP_BEGIN;\r\n            /// } \r\n            /// FOREACH_END:\r\n            /// </code>\r\n            /// </remarks>\r\n            internal override void Emit(ForeachStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Loop.Foreach\");\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                Label foreach_end = il.DefineLabel();\r\n                Label foreach_begin = il.DefineLabel();\r\n                Label loop_begin = il.DefineLabel();\r\n                Label loop_test = il.DefineLabel();\r\n\r\n                codeGenerator.BranchingStack.BeginLoop(loop_test, foreach_end,\r\n                  codeGenerator.ExceptionBlockNestingLevel);\r\n\r\n                LocalBuilder enumerable = il.GetTemporaryLocal(typeof(IPhpEnumerable));\r\n\r\n                // marks foreach \"header\" (the first part of the IL code):\r\n                MarkSequencePointHeader(node, codeGenerator);\r\n\r\n                // enumerable = array as IPhpEnumerable;\r\n                node.Enumeree.Emit(codeGenerator);\r\n                il.Emit(OpCodes.Isinst, typeof(IPhpEnumerable));\r\n                il.Stloc(enumerable);\r\n\r\n                // if (enumerable==null)\r\n                il.Ldloc(enumerable);\r\n                il.Emit(OpCodes.Brtrue, foreach_begin);\r\n                {\r\n                    // CALL PhpException.InvalidForeachArgument();\r\n                    codeGenerator.EmitPhpException(Methods.PhpException.InvalidForeachArgument);\r\n                    il.Emit(OpCodes.Br, foreach_end);\r\n                }\r\n                // FOREACH_BEGIN:\r\n                il.MarkLabel(foreach_begin);\r\n                {\r\n                    LocalBuilder enumerator = il.GetTemporaryLocal(typeof(System.Collections.IDictionaryEnumerator));\r\n\r\n                    // enumerator = enumerable.GetForeachEnumerator(KEYED,ALIASED,TYPE_HANDLE);\r\n                    il.Ldloc(enumerable);\r\n                    il.LoadBool(node.KeyVariable != null);\r\n                    il.LoadBool(node.ValueVariable.Alias);\r\n                    codeGenerator.EmitLoadClassContext();\r\n                    il.Emit(OpCodes.Callvirt, Methods.IPhpEnumerable_GetForeachEnumerator);\r\n                    il.Stloc(enumerator);\r\n\r\n                    // goto LOOP_TEST;\r\n                    il.Emit(OpCodes.Br, loop_test);\r\n\r\n                    // LOOP_BEGIN:\r\n                    il.MarkLabel(loop_begin);\r\n                    {\r\n                        // enumerator should do dereferencing and deep copying (if applicable):\r\n                        // ASSIGN(value,enumerator.Value);\r\n                        node.ValueVariable.Emit(codeGenerator);\r\n                        il.Ldloc(enumerator);\r\n                        il.Emit(OpCodes.Callvirt, Core.Emit.Properties.IDictionaryEnumerator_Value.GetGetMethod());\r\n                        if (node.ValueVariable.Alias) il.Emit(OpCodes.Castclass, typeof(PhpReference));\r\n                        node.ValueVariable.EmitAssign(codeGenerator);\r\n\r\n                        if (node.KeyVariable != null)\r\n                        {\r\n                            // enumerator should do dereferencing and deep copying (if applicable):\r\n                            // ASSIGN(key,enumerator.Key);\r\n                            node.KeyVariable.Emit(codeGenerator);\r\n                            il.Ldloc(enumerator);\r\n                            il.Emit(OpCodes.Callvirt, Core.Emit.Properties.IDictionaryEnumerator_Key.GetGetMethod());\r\n                            node.KeyVariable.EmitAssign(codeGenerator);\r\n                        }\r\n\r\n                        // BODY:\r\n                        node.Body.Emit(codeGenerator);\r\n                    }\r\n                    // LOOP_TEST:\r\n                    il.MarkLabel(loop_test);\r\n\r\n                    // marks foreach \"header\" (the second part of the code):\r\n                    MarkSequencePointHeader(node, codeGenerator);\r\n\r\n                    // if (enumerator.MoveNext()) goto LOOP_BEGIN;\r\n                    il.Ldloc(enumerator);\r\n                    il.Emit(OpCodes.Callvirt, Methods.IEnumerator_MoveNext);\r\n                    il.Emit(OpCodes.Brtrue, loop_begin);\r\n\r\n                    //\r\n                    il.ReturnTemporaryLocal(enumerator);\r\n                }\r\n                // FOREACH_END:\r\n                il.MarkLabel(foreach_end);\r\n\r\n                il.ReturnTemporaryLocal(enumerable);\r\n\r\n                codeGenerator.BranchingStack.EndLoop();\r\n\r\n                il.ForgetLabel(foreach_end);\r\n                il.ForgetLabel(foreach_begin);\r\n                il.ForgetLabel(loop_begin);\r\n                il.ForgetLabel(loop_test);\r\n            }\r\n\r\n            /// <summary>\r\n            /// marks foreach \"header\"\r\n            /// </summary>\r\n            private static void MarkSequencePointHeader(ForeachStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.MarkSequencePoint(\r\n                    Text.Span.FromBounds(node.Enumeree.Span.Start, node.ValueVariable.Span.End));\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region IForeachVarCompiler\r\n\r\n    internal interface IForeachVarCompiler\r\n    {\r\n        void Analyze(ForeachVar/*!*/node, Analyzer analyzer);\r\n        PhpTypeCode Emit(ForeachVar/*!*/node, CodeGenerator codeGenerator);\r\n        PhpTypeCode EmitAssign(ForeachVar/*!*/node, CodeGenerator codeGenerator);\r\n    }\r\n\r\n    internal static class ForeachVarCompilerHelper\r\n    {\r\n        public static void Analyze(this ForeachVar/*!*/node, Analyzer analyzer)\r\n        {\r\n            node.NodeCompiler<IForeachVarCompiler>().Analyze(node, analyzer);\r\n        }\r\n        public static PhpTypeCode Emit(this ForeachVar/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            return node.NodeCompiler<IForeachVarCompiler>().Emit(node, codeGenerator);\r\n        }\r\n        public static PhpTypeCode EmitAssign(this ForeachVar/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            return node.NodeCompiler<IForeachVarCompiler>().EmitAssign(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/NewAndInstanceof.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\nusing System.IO;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region NewEx\r\n\r\n        [NodeCompiler(typeof(NewEx))]\r\n        sealed class NewExCompiler : VarLikeConstructUseCompiler<NewEx>\r\n        {\r\n            private DRoutine constructor;\r\n            private bool runtimeVisibilityCheck;\r\n            private bool typeArgsResolved;\r\n\r\n            public override Evaluation Analyze(NewEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                Debug.Assert(node.IsMemberOf == null);\r\n\r\n                access = info.Access;\r\n\r\n                this.typeArgsResolved = TypeRefHelper.Analyze(node.ClassNameRef, analyzer);\r\n\r\n                DType type = TypeRefHelper.ResolvedType(node.ClassNameRef);\r\n                RoutineSignature signature;\r\n\r\n                if (typeArgsResolved)\r\n                    analyzer.AnalyzeConstructedType(type);\r\n\r\n                if (type != null)\r\n                {\r\n                    bool error_reported = false;\r\n\r\n                    // make checks if we are sure about character of the type:\r\n                    if (type.IsIdentityDefinite)\r\n                    {\r\n                        if (type.IsAbstract || type.IsInterface)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.AbstractClassOrInterfaceInstantiated, analyzer.SourceUnit,\r\n                                node.Span, type.FullName);\r\n                            error_reported = true;\r\n                        }\r\n                    }\r\n\r\n                    // disallow instantiation of Closure\r\n                    if (type.RealType == typeof(PHP.Library.SPL.Closure))\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.ClosureInstantiated, analyzer.SourceUnit, node.Span, type.FullName);\r\n                        error_reported = true;\r\n                    }\r\n\r\n                    // type name resolved, look the constructor up:\r\n                    constructor = analyzer.ResolveConstructor(type, node.Span, analyzer.CurrentType, analyzer.CurrentRoutine,\r\n                      out runtimeVisibilityCheck);\r\n\r\n                    if (constructor.ResolveOverload(analyzer, node.CallSignature, node.Span, out signature) == DRoutine.InvalidOverloadIndex)\r\n                    {\r\n                        if (!error_reported)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.ClassHasNoVisibleCtor, analyzer.SourceUnit, node.Span, type.FullName);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    signature = UnknownSignature.Default;\r\n                }\r\n\r\n                CallSignatureHelpers.Analyze(node.CallSignature, analyzer, signature, info, false);\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(NewEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(NewEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"NewEx\");\r\n\r\n                PhpTypeCode result;\r\n                var newextype = TypeRefHelper.ResolvedType(node.ClassNameRef);\r\n\r\n                if (newextype != null && typeArgsResolved)\r\n                {\r\n                    // constructor is resolvable (doesn't mean that known) //\r\n\r\n                    result = newextype.EmitNew(codeGenerator, null, constructor, node.CallSignature, runtimeVisibilityCheck);\r\n                }\r\n                else\r\n                {\r\n                    // constructor is unresolvable (a variable is used in type name => type is unresolvable as well) //\r\n\r\n                    codeGenerator.EmitNewOperator(null, node.ClassNameRef, null, node.CallSignature);\r\n                    result = PhpTypeCode.Object;\r\n                }\r\n\r\n                codeGenerator.EmitReturnValueHandling(node, false, ref result);\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region InstanceOfEx\r\n\r\n        [NodeCompiler(typeof(InstanceOfEx))]\r\n        sealed class InstanceOfExCompiler : ExpressionCompiler<InstanceOfEx>\r\n        {\r\n            private bool typeArgsResolved;\r\n\r\n            public override Evaluation Analyze(InstanceOfEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                node.Expression = node.Expression.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                typeArgsResolved = TypeRefHelper.Analyze(node.ClassNameRef, analyzer);\r\n\r\n                if (typeArgsResolved)\r\n                    analyzer.AnalyzeConstructedType(TypeRefHelper.ResolvedType(node.ClassNameRef));\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(InstanceOfEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(InstanceOfEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"InstanceOfEx\");\r\n\r\n                // emits load of expression value on the stack:\r\n                codeGenerator.EmitBoxing(node.Expression.Emit(codeGenerator));\r\n\r\n                var resolvedType = TypeRefHelper.ResolvedType(node.ClassNameRef);\r\n\r\n                if (resolvedType != null && typeArgsResolved)\r\n                {\r\n                    // type is resolvable (doesn't mean known) //\r\n\r\n                    resolvedType.EmitInstanceOf(codeGenerator, null);\r\n                }\r\n                else\r\n                {\r\n                    // type is unresolvable (there is some variable or the type is a generic parameter) //\r\n\r\n                    codeGenerator.EmitInstanceOfOperator(null, node.ClassNameRef, null);\r\n                }\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n                else\r\n                {\r\n                    return PhpTypeCode.Boolean;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region TypeOfEx\r\n\r\n        [NodeCompiler(typeof(TypeOfEx))]\r\n        sealed class TypeOfExCompiler : ExpressionCompiler<TypeOfEx>\r\n        {\r\n            public bool/*!*/ TypeArgsResolved { get { return typeArgsResolved; } }\r\n            private bool typeArgsResolved;\r\n\r\n            public override Evaluation Analyze(TypeOfEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                typeArgsResolved = TypeRefHelper.Analyze(node.ClassNameRef, analyzer);\r\n\r\n                if (typeArgsResolved)\r\n                    analyzer.AnalyzeConstructedType(TypeRefHelper.ResolvedType(node.ClassNameRef));\r\n\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override bool IsCustomAttributeArgumentValue(TypeOfEx node)\r\n            {\r\n                var resolvedtype = TypeRefHelper.ResolvedType(node.ClassNameRef);\r\n                return resolvedtype != null && typeArgsResolved && resolvedtype.IsDefinite;\r\n            }\r\n\r\n            public override bool IsDeeplyCopied(TypeOfEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public override PhpTypeCode Emit(TypeOfEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"TypeOfEx\");\r\n\r\n                var resolvedtype = TypeRefHelper.ResolvedType(node.ClassNameRef);\r\n\r\n                if (resolvedtype != null && typeArgsResolved)\r\n                {\r\n                    // type is resolvable (doesn't mean known) //\r\n\r\n                    resolvedtype.EmitTypeOf(codeGenerator, null);\r\n                }\r\n                else\r\n                {\r\n                    // type is unresolvable (there is some variable or the type is a generic parameter) //\r\n\r\n                    codeGenerator.EmitTypeOfOperator(null, node.ClassNameRef, null);\r\n                }\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n                else\r\n                {\r\n                    return PhpTypeCode.DObject;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/NodeCompiler.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    /// <summary>\r\n    /// Annotates <see cref=\"INodeCompiler\"/> implementation with type of <see cref=\"AstNode\"/> which is used for.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]\r\n    internal sealed class NodeCompilerAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// Type of <see cref=\"AstNode\"/> which is extended by corresponding <see cref=\"INodeCompiler\"/>.\r\n        /// </summary>\r\n        public Type/*!*/AstNodeType { get { return _astNodeType; } }\r\n        private readonly Type _astNodeType;\r\n\r\n        /// <summary>\r\n        /// Whether we need just single instance for all the nodes of provided type.\r\n        /// </summary>\r\n        /// <remarks>This saves memory resources for node compilers holding no additional data.</remarks>\r\n        public bool Singleton { get; set; }\r\n\r\n        public NodeCompilerAttribute(Type/*!*/nodeType)\r\n        {\r\n            if (nodeType == null)\r\n                throw new ArgumentNullException(\"nodeType\");\r\n\r\n            Debug.Assert(typeof(AstNode).IsAssignableFrom(nodeType));\r\n            _astNodeType = nodeType;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Base compiler <see cref=\"AstNode\"/> extension interface.\r\n    /// </summary>\r\n    internal interface INodeCompiler\r\n    {\r\n        \r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/NodeCompilers.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Reflection;\r\nusing Conditional = System.Diagnostics.ConditionalAttribute;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    /// <summary>\r\n    /// Container for <see cref=\"INodeCompiler\"/> implementations.\r\n    /// </summary>\r\n    public partial class NodeCompilers\r\n    {\r\n        /// <summary>\r\n        /// Creates map of <see cref=\"AstNode\"/> types corresponding to <see cref=\"INodeCompiler\"/> types.\r\n        /// </summary>\r\n        /// <returns>Dictionary of <see cref=\"AstNode\"/> types each mapped to <see cref=\"INodeCompiler\"/> type.</returns>\r\n        internal static Dictionary<Type, AstNodeExtension.NodeCompilerInfo>/*!*/CreateNodeExtensionTypes()\r\n        {\r\n            // like MEF, but simpler\r\n\r\n            // lists all types within NodeCompilers,\r\n            // maps types defining INodeCompiler with corresponding AstNode type\r\n\r\n            var types = typeof(NodeCompilers).GetNestedTypes(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);\r\n            var dict = new Dictionary<Type, AstNodeExtension.NodeCompilerInfo>(types.Length);\r\n            for (int i = 0; i < types.Length; i++)\r\n            {\r\n                var t = types[i];\r\n                if (!t.IsAbstract && typeof(INodeCompiler).IsAssignableFrom(t))\r\n                {\r\n                    var attrs = t.GetCustomAttributes(typeof(NodeCompilerAttribute), false);\r\n                    if (attrs != null && attrs.Length != 0)\r\n                    {\r\n                        bool hasDefaultCtor = t.GetConstructor(Type.EmptyTypes) != null;\r\n                        foreach (NodeCompilerAttribute attr in attrs)\r\n                        {\r\n                            Type compilertype = (t.ContainsGenericParameters)\r\n                                ? t.MakeGenericType(attr.AstNodeType)\r\n                                : t;\r\n\r\n                            dict.Add(attr.AstNodeType, new AstNodeExtension.NodeCompilerInfo(compilertype, hasDefaultCtor, attr.Singleton));\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return dict;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/PHPDocBlock.cs",
    "content": "/*\r\n\r\n Copyright (c) 2014 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(PHPDocBlock), Singleton = true)]\r\n        sealed class PHPDocBlockCompiler : INodeCompiler\r\n        {\r\n            // nothing\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/ShellEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        /// <summary>\r\n        /// Represents a content of backtick operator (shell command execution).\r\n        /// </summary>\r\n        [NodeCompiler(typeof(ShellEx))]\r\n        sealed class ShellExCompiler : ExpressionCompiler<ShellEx>\r\n        {\r\n            public override bool IsDeeplyCopied(ShellEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                // always returns a string:\r\n                return false;\r\n            }\r\n\r\n            public override Evaluation Analyze(ShellEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n                node.Command = node.Command.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                return new Evaluation(node);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ShellEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"ShellEx\");\r\n\r\n                // CALL Execution.ShellExec(<(string) command>);\r\n                codeGenerator.EmitConversion(node.Command, PhpTypeCode.String);\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.ShellExec);\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n\r\n                // ShellExec returns a string containing the standard output of executed command\r\n                return PhpTypeCode.String;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/Statement.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region Statement\r\n\r\n        [NodeCompiler(typeof(Statement))]\r\n        abstract class StatementCompiler<T> : IStatementCompiler, INodeCompiler where T : Statement\r\n        {\r\n            /// <summary>\r\n            /// Analyzes an AST node containing a specialization of a statement.\r\n            /// </summary>\r\n            internal abstract Statement/*!*/ Analyze(T/*!*/node, Analyzer/*!*/ analyzer);\r\n\r\n            /// <summary>\r\n            /// Emits AST node respective IL code.\r\n            /// </summary>\r\n            internal abstract void Emit(T/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n\r\n            /// <summary>\r\n            /// Reports the statement unreachability. \r\n            /// The block statement reports the position of its first statement.\r\n            /// </summary>\r\n            protected virtual void ReportUnreachable(T/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                analyzer.ErrorSink.Add(Warnings.UnreachableCodeDetected, analyzer.SourceUnit, node.Span);\r\n            }\r\n\r\n            #region IStatementCompiler Members\r\n\r\n            Statement IStatementCompiler.Analyze(Statement node, Analyzer analyzer)\r\n            {\r\n                return this.Analyze((T)node, analyzer);\r\n            }\r\n\r\n            void IStatementCompiler.Emit(Statement node, CodeGenerator codeGenerator)\r\n            {\r\n                this.Emit((T)node, codeGenerator);\r\n            }\r\n\r\n            void IStatementCompiler.ReportUnreachable(Statement/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                this.ReportUnreachable((T)node, analyzer);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region BlockStmt\r\n\r\n        [NodeCompiler(typeof(BlockStmt), Singleton = true)]\r\n        sealed class BlockStmtCompiler : StatementCompiler<BlockStmt>\r\n        {\r\n            internal override Statement Analyze(BlockStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                node.Statements.Analyze(analyzer);\r\n                return node;\r\n            }\r\n\r\n            protected override void ReportUnreachable(BlockStmt node, Analyzer analyzer)\r\n            {\r\n                if (node.Statements.Any())\r\n                    node.Statements[0].ReportUnreachable(analyzer);\r\n                else\r\n                    base.ReportUnreachable(node, analyzer);\r\n            }\r\n\r\n            internal override void Emit(BlockStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                node.Statements.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ExpressionStmt\r\n\r\n        [NodeCompiler(typeof(ExpressionStmt), Singleton = true)]\r\n        sealed class ExpressionStmtCompiler : StatementCompiler<ExpressionStmt>\r\n        {\r\n            internal override Statement Analyze(ExpressionStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n                info.Access = AccessType.None;\r\n\r\n                Evaluation expr_eval = node.Expression.Analyze(analyzer, info);\r\n\r\n                // skip statement if it is evaluable (has no side-effects):\r\n                if (expr_eval.HasValue)\r\n                    return EmptyStmt.Skipped;\r\n\r\n                node.Expression = expr_eval.Expression;\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(ExpressionStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                if (node.Expression.DoMarkSequencePoint)\r\n                    codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                try\r\n                {\r\n                    // emit the expression\r\n                    node.Expression.Emit(codeGenerator);\r\n                }\r\n                catch (CompilerException ex)\r\n                {\r\n                    // put the error into the error sink,\r\n                    // so the user can see, which expression is problematic (work item 20695)\r\n                    codeGenerator.Context.Errors.Add(\r\n                        ex.ErrorInfo,\r\n                        codeGenerator.SourceUnit,\r\n                        node.Span,   // exact position of the statement\r\n                        ex.ErrorParams\r\n                        );\r\n\r\n                    // terminate the emit with standard Exception\r\n                    throw new Exception(CoreResources.GetString(ex.ErrorInfo.MessageId, ex.ErrorParams));\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EmptyStmt\r\n\r\n        [NodeCompiler(typeof(EmptyStmt), Singleton = true)]\r\n        sealed class EmptyStmtCompiler : StatementCompiler<EmptyStmt>\r\n        {\r\n            internal override Statement Analyze(EmptyStmt node, Analyzer analyzer)\r\n            {\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(EmptyStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PHPDocStmt\r\n\r\n        [NodeCompiler(typeof(PHPDocStmt), Singleton = true)]\r\n        sealed class PHPDocStmtCompiler : StatementCompiler<PHPDocStmt>\r\n        {\r\n            internal override Statement Analyze(PHPDocStmt node, Analyzer analyzer)\r\n            {\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(PHPDocStmt node, CodeGenerator codeGenerator)\r\n            {   \r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region UnsetStmt\r\n\r\n        [NodeCompiler(typeof(UnsetStmt), Singleton = true)]\r\n        sealed class UnsetStmtCompiler : StatementCompiler<UnsetStmt>\r\n        {\r\n            internal override Statement Analyze(UnsetStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                //retval not needed, VariableUse analyzis always returns the same instance\r\n                //Access really shall by Read\r\n                foreach (VariableUse vu in node.VarList)\r\n                    vu.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(UnsetStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"UnsetStmt\");\r\n\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                foreach (VariableUse variable in node.VarList)\r\n                {\r\n                    codeGenerator.ChainBuilder.Create();\r\n                    codeGenerator.ChainBuilder.QuietRead = true;\r\n                    VariableUseHelper.EmitUnset(variable, codeGenerator);\r\n                    codeGenerator.ChainBuilder.End();\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GlobalStmt\r\n\r\n        [NodeCompiler(typeof(GlobalStmt), Singleton = true)]\r\n        sealed class GlobalStmtCompiler : StatementCompiler<GlobalStmt>\r\n        {\r\n            internal override Statement Analyze(GlobalStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n                info.Access = AccessType.WriteRef;\r\n                foreach (SimpleVarUse svu in node.VarList)\r\n                    svu.Analyze(analyzer, info);\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(GlobalStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"GlobalStmt\");\r\n\r\n                foreach (SimpleVarUse variable in node.VarList)\r\n                {\r\n                    variable.Emit(codeGenerator);\r\n\r\n                    // CALL Operators.GetItemRef(<string variable name>, ref context.AutoGlobals.GLOBALS);\r\n                    SimpleVarUseHelper.EmitName(variable, codeGenerator);\r\n                    codeGenerator.EmitAutoGlobalLoadAddress(new VariableName(VariableName.GlobalsName));\r\n                    codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.GetItemRef.String);\r\n\r\n                    SimpleVarUseHelper.EmitAssign(variable, codeGenerator);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region StaticStmt\r\n\r\n        [NodeCompiler(typeof(StaticStmt), Singleton = true)]\r\n        sealed class StaticStmtCompiler : StatementCompiler<StaticStmt>\r\n        {\r\n            internal override Statement Analyze(StaticStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                foreach (StaticVarDecl svd in node.StVarList)\r\n                    StaticVarDeclCompilerHelper.Analyze(svd, analyzer);\r\n\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(StaticStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"StaticStmt\");\r\n                foreach (StaticVarDecl svd in node.StVarList)\r\n                    StaticVarDeclCompilerHelper.Emit(svd, codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region StaticVarDecl\r\n\r\n        [NodeCompiler(typeof(StaticVarDecl), Singleton = true)]\r\n        sealed class StaticVarDeclCompiler : INodeCompiler\r\n        {\r\n            public void Analyze(StaticVarDecl/*!*/node, Analyzer analyzer)\r\n            {\r\n                ExInfoFromParent sinfo = new ExInfoFromParent(node);\r\n                sinfo.Access = AccessType.WriteRef;\r\n\r\n                node.Variable.Analyze(analyzer, sinfo);\r\n\r\n                if (node.Initializer != null)\r\n                    node.Initializer = node.Initializer.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n            }\r\n\r\n            public void Emit(StaticVarDecl/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n                string id = codeGenerator.GetLocationId();\r\n\r\n                if (id == null)\r\n                {\r\n                    // we are in global code -> just assign the iniVal to the variable\r\n                    node.Variable.Emit(codeGenerator);\r\n\r\n                    if (node.Initializer != null)\r\n                    {\r\n                        codeGenerator.EmitBoxing(node.Initializer.Emit(codeGenerator));\r\n                        il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n                    }\r\n                    else il.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\r\n                    // continue ...\r\n                }\r\n                else\r\n                {\r\n                    // cache the integer index of static local variable to access its value fast from within the array\r\n\r\n                    // unique static local variable string ID\r\n                    id = String.Format(\"{0}${1}${2}\", id, node.Variable.VarName, node.Span.Start);\r\n\r\n                    // create static field for static local index: private static int <id>;\r\n                    var type = codeGenerator.IL.TypeBuilder;\r\n                    Debug.Assert(type != null, \"The method does not have declaring type! (global code in pure mode?)\");\r\n                    var field_id = type.DefineField(id, Types.Int[0], System.Reflection.FieldAttributes.Private | System.Reflection.FieldAttributes.Static);\r\n\r\n                    // we are in a function or method -> try to retrieve the local value from ScriptContext\r\n                    node.Variable.Emit(codeGenerator);\r\n\r\n                    // <context>.GetStaticLocal( <field> )\r\n                    codeGenerator.EmitLoadScriptContext();  // <context>\r\n                    il.Emit(OpCodes.Ldsfld, field_id);         // <field>\r\n                    il.Emit(OpCodes.Callvirt, Methods.ScriptContext.GetStaticLocal);    // GetStaticLocal\r\n                    il.Emit(OpCodes.Dup);\r\n\r\n                    // ?? <context>.AddStaticLocal( <field> != 0 ? <field> : ( <field> = ScriptContext.GetStaticLocalId(<id>) ), <initializer> )\r\n                    if (true)\r\n                    {\r\n                        // if (GetStaticLocal(<field>) == null)\r\n                        Label local_initialized = il.DefineLabel();\r\n                        il.Emit(OpCodes.Brtrue/*not .S, initializer can emit really long code*/, local_initialized);\r\n\r\n                        il.Emit(OpCodes.Pop);\r\n\r\n                        // <field> != 0 ? <field> : ( <field> = ScriptContext.GetStaticLocalId(<id>) )\r\n                        il.Emit(OpCodes.Ldsfld, field_id);         // <field>\r\n\r\n                        if (true)\r\n                        {\r\n                            // if (<field> == 0)\r\n                            Label id_initialized = il.DefineLabel();\r\n                            il.Emit(OpCodes.Brtrue_S, id_initialized);\r\n\r\n                            // <field> = GetStaticLocalId( <id> )\r\n                            il.Emit(OpCodes.Ldstr, id);\r\n                            il.Emit(OpCodes.Call, Methods.ScriptContext.GetStaticLocalId);\r\n                            il.Emit(OpCodes.Stsfld, field_id);\r\n\r\n                            il.MarkLabel(id_initialized);\r\n                        }\r\n\r\n                        // <context>.AddStaticLocal(<field>,<initialize>)\r\n                        codeGenerator.EmitLoadScriptContext();  // <context>\r\n                        il.Emit(OpCodes.Ldsfld, field_id);         // <field>\r\n                        if (node.Initializer != null) codeGenerator.EmitBoxing(node.Initializer.Emit(codeGenerator)); // <initializer>\r\n                        else il.Emit(OpCodes.Ldnull);\r\n                        il.Emit(OpCodes.Callvirt, Methods.ScriptContext.AddStaticLocal);    // AddStaticLocal\r\n\r\n                        // \r\n                        il.MarkLabel(local_initialized);\r\n                    }\r\n\r\n                    // continue ...\r\n                }\r\n\r\n                // stores value from top of the stack to the variable:\r\n                SimpleVarUseHelper.EmitAssign(node.Variable, codeGenerator);\r\n            }\r\n        }\r\n\r\n        static class StaticVarDeclCompilerHelper\r\n        {\r\n            public static void Analyze(StaticVarDecl/*!*/node, Analyzer analyzer)\r\n            {\r\n                node.NodeCompiler<StaticVarDeclCompiler>().Analyze(node, analyzer);\r\n            }\r\n\r\n            public static void Emit(StaticVarDecl/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                node.NodeCompiler<StaticVarDeclCompiler>().Emit(node, codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region DeclareStmt\r\n\r\n        [NodeCompiler(typeof(DeclareStmt), Singleton = true)]\r\n        sealed class DeclareStmtCompiler : StatementCompiler<DeclareStmt>\r\n        {\r\n            internal override Statement Analyze(DeclareStmt node, Analyzer analyzer)\r\n            {\r\n                analyzer.ErrorSink.Add(Warnings.NotSupportedFunctionCalled, analyzer.SourceUnit, node.Span, \"declare\");\r\n                node.Statement.Analyze(analyzer);\r\n                return node;\r\n            }\r\n\r\n            protected override void ReportUnreachable(DeclareStmt node, Analyzer analyzer)\r\n            {\r\n                node.Statement.ReportUnreachable(analyzer);\r\n            }\r\n\r\n            internal override void Emit(DeclareStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                node.Statement.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region StatementUtils\r\n\r\n    internal static class StatementUtils\r\n    {\r\n        /// <summary>\r\n        /// Analyze all the <see cref=\"Statement\"/> objects in the <paramref name=\"statements\"/> list.\r\n        /// This methods replaces items in the original list if <see cref=\"IStatementCompiler.Analyze\"/> returns a different instance.\r\n        /// </summary>\r\n        /// <param name=\"statements\">List of statements to be analyzed.</param>\r\n        /// <param name=\"analyzer\">Current <see cref=\"Analyzer\"/>.</param>\r\n        public static void Analyze(this IList<Statement>/*!*/statements, Analyzer/*!*/ analyzer)\r\n        {\r\n            Debug.Assert(statements != null);\r\n            Debug.Assert(analyzer != null);\r\n\r\n            // analyze statements:\r\n            for (int i = 0; i < statements.Count; i++)\r\n            {\r\n                // analyze the statement\r\n                var statement = statements[i];\r\n                var analyzed = statement.Analyze(analyzer);\r\n\r\n                // update the statement in the list\r\n                if (!object.ReferenceEquals(statement, analyzer))\r\n                    statements[i] = analyzed;\r\n            }\r\n        }\r\n\r\n        public static Statement Analyze(this Statement/*!*/statement, Analyzer/*!*/ analyzer)\r\n        {\r\n            return statement.NodeCompiler<IStatementCompiler>().Analyze(statement, analyzer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emits each <see cref=\"Statement\"/> in given <paramref name=\"statements\"/> list.\r\n        /// </summary>\r\n        public static void Emit(this IEnumerable<Statement> statements, CodeGenerator codeGenerator)\r\n        {\r\n            if (statements != null)\r\n            {\r\n                foreach (Statement statement in statements)\r\n                    statement.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        public static void Emit(this Statement/*!*/statement, CodeGenerator codeGenerator)\r\n        {\r\n            statement.NodeCompiler<IStatementCompiler>().Emit(statement, codeGenerator);\r\n        }\r\n\r\n        public static void ReportUnreachable(this Statement/*!*/statement, Analyzer/*!*/ analyzer)\r\n        {\r\n            statement.NodeCompiler<IStatementCompiler>().ReportUnreachable(statement, analyzer);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IStatementCompiler\r\n\r\n    /// <summary>\r\n    /// Base interface for <see cref=\"Statement\"/> compiler implementation.\r\n    /// </summary>\r\n    internal interface IStatementCompiler\r\n    {\r\n        /// <summary>\r\n        /// Analyzes an AST node containing a specialization of a statement.\r\n        /// </summary>\r\n        Statement/*!*/ Analyze(Statement/*!*/node, Analyzer/*!*/ analyzer);\r\n\r\n        /// <summary>\r\n        /// Emits AST node respective IL code.\r\n        /// </summary>\r\n        void Emit(Statement/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n\r\n        /// <summary>\r\n        /// Reports the statement unreachability. \r\n        /// </summary>\r\n        void ReportUnreachable(Statement/*!*/node, Analyzer/*!*/ analyzer);\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/SwitchStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region SwitchStmt\r\n\r\n        [NodeCompiler(typeof(SwitchStmt), Singleton = true)]\r\n        sealed class SwitchStmtCompiler : StatementCompiler<SwitchStmt>\r\n        {\r\n            internal override Statement Analyze(SwitchStmt node, Analyzer analyzer)\r\n            {\r\n                if (analyzer.IsThisCodeUnreachable())\r\n                {\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n\r\n                node.SwitchValue = node.SwitchValue.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                analyzer.EnterSwitchBody();\r\n\r\n                foreach (SwitchItem item in node.SwitchItems)\r\n                    item.Analyze(analyzer);\r\n\r\n                analyzer.LeaveSwitchBody();\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(SwitchStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"SwitchStmt\");\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // Note: \r\n                //  SwitchStmt is now implemented in the most general (and unefficient) way. The whole switch\r\n                //  is understood as a series of if-elseif-else statements.\r\n\r\n                Label exit_label = il.DefineLabel();\r\n                bool fall_through = false;\r\n                Label fall_through_label = il.DefineLabel();\r\n                Label last_default_label = il.DefineLabel();\r\n                DefaultItem last_default = GetLastDefaultItem(node);\r\n                LocalBuilder branch_to_lastdefault = null;\r\n\r\n                if (last_default != null)\r\n                {\r\n                    branch_to_lastdefault = il.DeclareLocal(Types.Bool[0]);\r\n                    il.LdcI4(0);\r\n                    il.Stloc(branch_to_lastdefault);\r\n                }\r\n\r\n                codeGenerator.BranchingStack.BeginLoop(exit_label, exit_label,\r\n                  codeGenerator.ExceptionBlockNestingLevel);\r\n\r\n                // marks a sequence point containing the discriminator evaluation:\r\n                codeGenerator.MarkSequencePoint(node.SwitchValue.Span);\r\n\r\n                // Evaluate condition value and store the result into local variable\r\n                codeGenerator.EmitBoxing(node.SwitchValue.Emit(codeGenerator));\r\n                LocalBuilder condition_value = il.DeclareLocal(Types.Object[0]);\r\n                il.Stloc(condition_value);\r\n\r\n                foreach (SwitchItem item in node.SwitchItems)\r\n                {\r\n                    item.MarkSequencePoint(codeGenerator);\r\n\r\n                    // switch item is either CaseItem (\"case xxx:\") or DefaultItem (\"default\") item:\r\n                    CaseItem case_item = item as CaseItem;\r\n                    if (case_item != null)\r\n                    {\r\n                        Label false_label = il.DefineLabel();\r\n\r\n                        // PhpComparer.Default.CompareEq(<switch expr. value>,<case value>);\r\n                        /*changed to static method*/\r\n                        //il.Emit(OpCodes.Ldsfld, Fields.PhpComparer_Default);\r\n                        codeGenerator.EmitCompareEq(\r\n                            cg => { cg.IL.Ldloc(condition_value); return PhpTypeCode.Object; },\r\n                            cg => case_item.CaseVal.Emit(cg));\r\n\r\n                        // IF (!STACK) GOTO false_label;\r\n                        il.Emit(OpCodes.Brfalse, false_label);\r\n                        if (fall_through == true)\r\n                        {\r\n                            il.MarkLabel(fall_through_label, true);\r\n                            fall_through = false;\r\n                        }\r\n\r\n                        case_item.EmitStatements(codeGenerator);\r\n\r\n                        if (fall_through == false)\r\n                        {\r\n                            fall_through_label = il.DefineLabel();\r\n                            fall_through = true;\r\n                        }\r\n\r\n                        il.Emit(OpCodes.Br, fall_through_label);\r\n\r\n                        il.MarkLabel(false_label, true);\r\n                    }\r\n                    else\r\n                    {\r\n                        DefaultItem default_item = (DefaultItem)item;\r\n\r\n                        // Only the last default branch defined in source code is used.\r\n                        // So skip default while testing \"case\" items at runtime.\r\n                        Label false_label = il.DefineLabel();\r\n                        il.Emit(OpCodes.Br, false_label);\r\n\r\n                        if (default_item == last_default)\r\n                        {\r\n                            il.MarkLabel(last_default_label, false);\r\n                        }\r\n\r\n                        if (fall_through == true)\r\n                        {\r\n                            il.MarkLabel(fall_through_label, true);\r\n                            fall_through = false;\r\n                        }\r\n\r\n                        default_item.EmitStatements(codeGenerator);\r\n\r\n                        if (fall_through == false)\r\n                        {\r\n                            fall_through_label = il.DefineLabel();\r\n                            fall_through = true;\r\n                        }\r\n\r\n                        il.Emit(OpCodes.Br, fall_through_label);\r\n                        il.MarkLabel(false_label, true);\r\n                    }\r\n                }\r\n\r\n                // If no case branch matched, branch to last default case if any is defined\r\n                if (last_default != null)\r\n                {\r\n                    // marks a sequence point containing the condition evaluation or skip of the default case:\r\n                    codeGenerator.MarkSequencePoint(last_default.Span);\r\n\r\n                    Debug.Assert(branch_to_lastdefault != null);\r\n                    Label temp = il.DefineLabel();\r\n\r\n                    // IF (!branch_to_lastdefault) THEN \r\n                    il.Ldloc(branch_to_lastdefault);\r\n                    il.LdcI4(0);\r\n                    il.Emit(OpCodes.Bne_Un, temp);\r\n                    if (true)\r\n                    {\r\n                        // branch_to_lastdefault = TRUE; \r\n                        il.LdcI4(1);\r\n                        il.Stloc(branch_to_lastdefault);\r\n\r\n                        // GOTO last_default_label;\r\n                        il.Emit(OpCodes.Br, last_default_label);\r\n                    }\r\n                    il.MarkLabel(temp, true);\r\n                    // END IF;\r\n\r\n                    il.ForgetLabel(last_default_label);\r\n                }\r\n\r\n                if (fall_through == true)\r\n                {\r\n                    il.MarkLabel(fall_through_label, true);\r\n                }\r\n\r\n                il.MarkLabel(exit_label);\r\n                codeGenerator.BranchingStack.EndLoop();\r\n                il.ForgetLabel(exit_label);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Determines the last default item in the list of switch items.\r\n            /// </summary>\r\n            /// <returns>The last default item or a <b>null</b> reference if there is no default item.</returns>\r\n            private static DefaultItem GetLastDefaultItem(SwitchStmt/*!*/node)\r\n            {\r\n                DefaultItem result = null;\r\n                foreach (SwitchItem item in node.SwitchItems)\r\n                {\r\n                    DefaultItem di = item as DefaultItem;\r\n                    if (di != null) result = di;\r\n                }\r\n                return result;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SwitchItem\r\n\r\n        abstract class SwitchItemCompiler<T> : INodeCompiler, ISwitchItemCompiler where T : SwitchItem\r\n        {\r\n            protected virtual void Analyze(T/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                analyzer.EnterConditionalCode();\r\n\r\n                node.Statements.Analyze(analyzer);\r\n\r\n                analyzer.LeaveConditionalCode();\r\n            }\r\n\r\n            protected abstract void MarkSequencePoint(T/*!*/node, CodeGenerator/*!*/codeGenerator);\r\n\r\n            protected virtual void EmitStatements(T/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                node.Statements.Emit(codeGenerator);\r\n            }\r\n\r\n            #region ISwitchItemCompiler Members\r\n\r\n            void ISwitchItemCompiler.Analyze(SwitchItem node, Analyzer analyzer)\r\n            {\r\n                Analyze((T)node, analyzer);\r\n            }\r\n\r\n            void ISwitchItemCompiler.MarkSequencePoint(SwitchItem node, CodeGenerator codeGenerator)\r\n            {\r\n                MarkSequencePoint((T)node, codeGenerator);\r\n            }\r\n\r\n            void ISwitchItemCompiler.EmitStatements(SwitchItem node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitStatements((T)node, codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        [NodeCompiler(typeof(CaseItem), Singleton = true)]\r\n        sealed class CaseItemCompiler : SwitchItemCompiler<CaseItem>\r\n        {\r\n            protected override void Analyze(CaseItem/*!*/node, Analyzer analyzer)\r\n            {\r\n                node.CaseVal = node.CaseVal.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\r\n                if (node.CaseVal.HasValue())\r\n                    analyzer.AddConstCaseToCurrentSwitch(node.CaseVal.GetValue(), node.Span);\r\n\r\n                base.Analyze(node, analyzer);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Marks a sequence point \"case {caseVal}\".\r\n            /// </summary>\r\n            protected override void MarkSequencePoint(CaseItem/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n            }\r\n\r\n            protected override void EmitStatements(CaseItem/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                base.EmitStatements(node, codeGenerator);\r\n            }\r\n        }\r\n\r\n        [NodeCompiler(typeof(DefaultItem), Singleton = true)]\r\n        sealed class DefaultItemCompiler : SwitchItemCompiler<DefaultItem>\r\n        {\r\n            protected override void Analyze(DefaultItem/*!*/node, Analyzer analyzer)\r\n            {\r\n                analyzer.AddDefaultToCurrentSwitch(node.Span);\r\n                base.Analyze(node, analyzer);\r\n            }\r\n\r\n            protected override void MarkSequencePoint(DefaultItem/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n            }\r\n\r\n            protected override void EmitStatements(DefaultItem/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                base.EmitStatements(node, codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region ISwitchItemCompiler\r\n\r\n    internal interface ISwitchItemCompiler\r\n    {\r\n        void Analyze(SwitchItem/*!*/node, Analyzer/*!*/ analyzer);\r\n\r\n        void MarkSequencePoint(SwitchItem/*!*/node, CodeGenerator/*!*/codeGenerator);\r\n\r\n        void EmitStatements(SwitchItem/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n    }\r\n\r\n    internal static class SwitchItemCompilerHelper\r\n    {\r\n        public static void Analyze(this SwitchItem/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<ISwitchItemCompiler>().Analyze(node, analyzer);\r\n        }\r\n\r\n        public static void MarkSequencePoint(this SwitchItem/*!*/node, CodeGenerator/*!*/codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISwitchItemCompiler>().MarkSequencePoint(node, codeGenerator);\r\n        }\r\n\r\n        public static void EmitStatements(this SwitchItem/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISwitchItemCompiler>().EmitStatements(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/TernaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(ConditionalEx))]\r\n        sealed class ConditionalExCompiler : ExpressionCompiler<ConditionalEx>\r\n        {\r\n            #region Analysis\r\n\r\n            public override Evaluation Analyze(ConditionalEx/*!*/node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                Evaluation cond_eval = node.CondExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                if (cond_eval.HasValue)\r\n                {\r\n                    if (Convert.ObjectToBoolean(cond_eval.Value))\r\n                    {\r\n                        if (node.TrueExpr != null)\r\n                            return node.TrueExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                        else\r\n                            return cond_eval;   // condExpr ?: falseExpr    // ternary shortcut\r\n                    }\r\n                    else\r\n                        return node.FalseExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n                }\r\n                else\r\n                {\r\n                    if (node.TrueExpr != null)\r\n                    {\r\n                        analyzer.EnterConditionalCode();\r\n                        node.TrueExpr = node.TrueExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                        analyzer.LeaveConditionalCode();\r\n                    }\r\n\r\n                    analyzer.EnterConditionalCode();\r\n                    node.FalseExpr = node.FalseExpr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                    analyzer.LeaveConditionalCode();\r\n\r\n                    return new Evaluation(node);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public override bool IsDeeplyCopied(ConditionalEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                return\r\n                    (node.TrueExpr ?? node.CondExpr).IsDeeplyCopied(reason, nestingLevel) ||\r\n                    node.FalseExpr.IsDeeplyCopied(reason, nestingLevel);\r\n            }\r\n\r\n            public override PhpTypeCode Emit(ConditionalEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"TernaryEx\");\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n\r\n                Label end_label = codeGenerator.IL.DefineLabel();\r\n\r\n                if (node.TrueExpr != null)   // standard ternary operator\r\n                {\r\n                    Label else_label = codeGenerator.IL.DefineLabel();\r\n\r\n                    // IF (<(bool) condition>) THEN\r\n                    codeGenerator.EmitConversion(node.CondExpr, PhpTypeCode.Boolean);\r\n                    codeGenerator.IL.Emit(OpCodes.Brfalse, else_label);\r\n                    {\r\n                        codeGenerator.EmitBoxing(node.TrueExpr.Emit(codeGenerator));\r\n                        codeGenerator.IL.Emit(OpCodes.Br, end_label);\r\n                    }\r\n                    // ELSE\r\n                    codeGenerator.IL.MarkLabel(else_label, true);\r\n                    {\r\n                        codeGenerator.EmitBoxing(node.FalseExpr.Emit(codeGenerator));\r\n                    }\r\n                }\r\n                else\r\n                {   // ternary shortcut:\r\n                    var il = codeGenerator.IL;\r\n\r\n                    // condExpr ?? rightExpr\r\n\r\n                    il.EmitBoxing(node.CondExpr.Emit(codeGenerator));\r\n\r\n                    // IF (<stack>):\r\n                    il.Emit(OpCodes.Dup);\r\n                    il.Emit(OpCodes.Call, Methods.Convert.ObjectToBoolean);\r\n\r\n                    codeGenerator.IL.Emit(OpCodes.Brtrue, end_label);\r\n                    // ELSE:\r\n                    {\r\n                        il.Emit(OpCodes.Pop);\r\n                        il.EmitBoxing(node.FalseExpr.Emit(codeGenerator));\r\n                    }\r\n                }\r\n\r\n                // END IF;\r\n                codeGenerator.IL.MarkLabel(end_label, true);\r\n\r\n\r\n                if (access == AccessType.None)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Pop);\r\n                    return PhpTypeCode.Void;\r\n                }\r\n\r\n                return PhpTypeCode.Object;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/TryStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(TryStmt), Singleton = true)]\r\n        sealed class TryStmtCompiler : StatementCompiler<TryStmt>\r\n        {\r\n            internal override Statement Analyze(TryStmt node, Analyzer analyzer)\r\n            {\r\n                // try {}\r\n                analyzer.EnterConditionalCode();\r\n                node.Statements.Analyze(analyzer);\r\n                analyzer.LeaveConditionalCode();\r\n\r\n                // catch {}\r\n                if (node.HasCatches)\r\n                {\r\n                    foreach (var c in node.Catches)\r\n                        c.Analyze(analyzer);\r\n                }\r\n\r\n                // finally {}\r\n                if (node.HasFinallyStatements)\r\n                {\r\n                    node.FinallyItem.Analyze(analyzer);\r\n                }\r\n\r\n                return node;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits the try block and the catch blocks.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <remarks>\r\n            /// <code>\r\n            ///\ttry\r\n            /// {\r\n            ///   // guarded code //\r\n            /// }\r\n            /// catch(E1 $e1)\r\n            /// {\r\n            ///   // E1 //\r\n            /// }\r\n            /// catch(E2 $e2)\r\n            /// {\r\n            ///   // E2 //\r\n            /// } \r\n            /// </code>\r\n            /// is translated as follows:\r\n            /// <code>\r\n            /// try\r\n            /// {\r\n            ///   // guarded code //\r\n            /// }\r\n            /// catch(PhpUserException _e)\r\n            /// {\r\n            ///   PhpObject _o = _e.UserException;\r\n            ///   if (_o instanceOf E1)\r\n            ///   {\r\n            ///     $e1 = _o;\r\n            ///     // E1 //\r\n            ///   }\r\n            ///   else if (_o instanceOf E2)\r\n            ///   {\r\n            ///     $e2 = _o;\r\n            ///     // E2 //\r\n            ///   }\r\n            ///   else\r\n            ///   {\r\n            ///     throw;\r\n            ///   }\r\n            /// }\r\n            /// </code> \r\n            /// </remarks>\r\n            internal override void Emit(TryStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"TryStmt\");\r\n\r\n                // emit try block without CLR exception block if possible\r\n\r\n                if (!node.HasCatches && !node.HasFinallyStatements)\r\n                {\r\n                    node.Statements.Emit(codeGenerator);\r\n                    return;\r\n                }\r\n\r\n                // emit CLR exception block\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n                codeGenerator.ExceptionBlockNestingLevel++;\r\n\r\n                // TRY\r\n                Label end_label = il.BeginExceptionBlock();\r\n\r\n                node.Statements.Emit(codeGenerator);\r\n\r\n                // catches\r\n\r\n                if (node.HasCatches)\r\n                {\r\n                    // catch (PHP.Core.ScriptDiedException)\r\n                    // { throw; }\r\n\r\n                    il.BeginCatchBlock(typeof(PHP.Core.ScriptDiedException));\r\n                    il.Emit(OpCodes.Rethrow);\r\n\r\n                    // catch (System.Exception ex)\r\n\r\n                    il.BeginCatchBlock(typeof(System.Exception));\r\n\r\n                    // <exception_local> = (DObject) (STACK is PhpUserException) ? ((PhpUserException)STACK).UserException : ClrObject.WrapRealObject(STACK)\r\n\r\n                    Label clrExceptionLabel = il.DefineLabel();\r\n                    Label wrapEndLabel = il.DefineLabel();\r\n                    LocalBuilder exception_local = il.GetTemporaryLocal(typeof(DObject));\r\n\r\n                    il.Emit(OpCodes.Dup);\r\n                    il.Emit(OpCodes.Isinst, typeof(PHP.Core.PhpUserException)); // <STACK> as PhpUserException\r\n                    il.Emit(OpCodes.Brfalse, clrExceptionLabel);\r\n\r\n                    // if (<STACK> as PhpUserException != null)\r\n                    {\r\n                        il.Emit(OpCodes.Ldfld, Fields.PhpUserException_UserException);\r\n                        il.Emit(OpCodes.Br, wrapEndLabel);\r\n                    }\r\n\r\n                    // else\r\n                    il.MarkLabel(clrExceptionLabel);\r\n                    {\r\n                        il.Emit(OpCodes.Call, Methods.ClrObject_WrapRealObject);\r\n                    }\r\n                    il.MarkLabel(wrapEndLabel);\r\n                    il.Stloc(exception_local);\r\n\r\n                    // emits all PHP catch-blocks processing into a single CLI catch-block:\r\n                    foreach (CatchItem c in node.Catches)\r\n                    {\r\n                        Label next_catch_label = il.DefineLabel();\r\n\r\n                        // IF (exception <instanceOf> <type>);\r\n                        c.Emit(codeGenerator, exception_local, end_label, next_catch_label);\r\n\r\n                        // ELSE\r\n                        il.MarkLabel(next_catch_label);\r\n                    }\r\n\r\n                    il.ReturnTemporaryLocal(exception_local);\r\n\r\n                    // emits the \"else\" branch invoked if the exceptions is not catched:\r\n                    il.Emit(OpCodes.Rethrow);\r\n                }\r\n\r\n                // finally\r\n\r\n                if (node.HasFinallyStatements)\r\n                {\r\n                    node.FinallyItem.Emit(codeGenerator);\r\n                }\r\n\r\n                //\r\n                il.EndExceptionBlock();\r\n\r\n                codeGenerator.ExceptionBlockNestingLevel--;\r\n            }\r\n        }\r\n\r\n        [NodeCompiler(typeof(CatchItem))]\r\n        sealed class CatchItemCompiler : INodeCompiler, ICatchItemCompiler\r\n        {\r\n            private DType resolvedType;\r\n\r\n            public void Analyze(CatchItem/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                ExInfoFromParent info = new ExInfoFromParent(node);\r\n                info.Access = AccessType.Write;\r\n\r\n                TypeRefHelper.Analyze(node.TypeRef, analyzer);\r\n                resolvedType = TypeRefHelper.ResolvedTypeOrUnknown(node.TypeRef);\r\n                //resolvedType = analyzer.ResolveTypeName(node.ClassName, analyzer.CurrentType, analyzer.CurrentRoutine, node.Span, false);\r\n\r\n                node.Variable.Analyze(analyzer, info);\r\n\r\n                analyzer.EnterConditionalCode();\r\n                node.Statements.Analyze(analyzer);\r\n                analyzer.LeaveConditionalCode();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits the catch-block.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">A code generator.</param>\r\n            /// <param name=\"exceptionLocal\">A local variable containing an instance of <see cref=\"Library.SPL.Exception\"/>.</param>\r\n            /// <param name=\"endLabel\">A label in IL stream where the processing of the try-catch blocks ends.</param>\r\n            /// <param name=\"nextCatchLabel\">A label in IL stream where the next catch block processing begins.</param>\r\n            public void Emit(CatchItem/*!*/node, CodeGenerator/*!*/ codeGenerator,\r\n                LocalBuilder/*!*/ exceptionLocal,\r\n                Label endLabel, Label nextCatchLabel)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                codeGenerator.MarkSequencePoint(node.Variable);\r\n\r\n                // IF !InstanceOf(<class name>) GOTO next_catch;\r\n                il.Ldloc(exceptionLocal);\r\n                resolvedType.EmitInstanceOf(codeGenerator, null);\r\n                il.Emit(OpCodes.Brfalse, nextCatchLabel);\r\n\r\n                // variable = exception;\r\n                node.Variable.Emit(codeGenerator);\r\n                il.Ldloc(exceptionLocal);\r\n                SimpleVarUseHelper.EmitAssign(node.Variable, codeGenerator);\r\n\r\n                node.Statements.Emit(codeGenerator);\r\n\r\n                // LEAVE end;\r\n                il.Emit(OpCodes.Leave, endLabel);\r\n            }\r\n        }\r\n\r\n        [NodeCompiler(typeof(FinallyItem), Singleton = true)]\r\n        sealed class FinallyItemCompiler : INodeCompiler, IFinallyItemCompiler\r\n        {\r\n            private void Analyze(FinallyItem/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                analyzer.EnterConditionalCode();\r\n                node.Statements.Analyze(analyzer);\r\n                analyzer.LeaveConditionalCode();\r\n            }\r\n\r\n            private void Emit(FinallyItem/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.IL.BeginFinallyBlock();\r\n                node.Statements.Emit(codeGenerator);\r\n            }\r\n\r\n            #region IFinallyItemCompiler Members\r\n\r\n            void IFinallyItemCompiler.Analyze(FinallyItem node, Analyzer analyzer)\r\n            {\r\n                Analyze(node, analyzer);\r\n            }\r\n\r\n            void IFinallyItemCompiler.Emit(FinallyItem node, CodeGenerator codeGenerator)\r\n            {\r\n                Emit(node, codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        [NodeCompiler(typeof(ThrowStmt), Singleton = true)]\r\n        sealed class ThrowStmtCompiler : StatementCompiler<ThrowStmt>\r\n        {\r\n            internal override Statement Analyze(ThrowStmt node, Analyzer analyzer)\r\n            {\r\n                node.Expression = node.Expression.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                return node;\r\n            }\r\n\r\n            internal override void Emit(ThrowStmt node, CodeGenerator codeGenerator)\r\n            {\r\n                codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                // CALL Operators.Throw(<context>, <expression>);\r\n                codeGenerator.EmitLoadScriptContext();\r\n                node.Expression.Emit(codeGenerator);\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Throw);\r\n            }\r\n        }\r\n    }\r\n\r\n    #region ICatchItemCompiler\r\n\r\n    internal interface ICatchItemCompiler\r\n    {\r\n        void Analyze(CatchItem/*!*/node, Analyzer/*!*/ analyzer);\r\n        void Emit(CatchItem/*!*/node, CodeGenerator/*!*/ codeGenerator, LocalBuilder/*!*/ exceptionLocal, Label endLabel, Label nextCatchLabel);\r\n    }\r\n\r\n    internal static class CatchItemCompilerHelper\r\n    {\r\n        public static void Analyze(this CatchItem/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<ICatchItemCompiler>().Analyze(node, analyzer);\r\n        }\r\n        public static void Emit(this CatchItem/*!*/node, CodeGenerator/*!*/ codeGenerator, LocalBuilder/*!*/ exceptionLocal, Label endLabel, Label nextCatchLabel)\r\n        {\r\n            node.NodeCompiler<ICatchItemCompiler>().Emit(node, codeGenerator, exceptionLocal, endLabel, nextCatchLabel);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IFinallyItemCompiler\r\n\r\n    internal interface IFinallyItemCompiler\r\n    {\r\n        void Analyze(FinallyItem/*!*/node, Analyzer/*!*/ analyzer);\r\n        void Emit(FinallyItem/*!*/node, CodeGenerator codeGenerator);\r\n    }\r\n\r\n    internal static class FinallyItemCompilerHelper\r\n    {\r\n        public static void Analyze(this FinallyItem/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<IFinallyItemCompiler>().Analyze(node, analyzer);\r\n        }\r\n        public static void Emit(this FinallyItem/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<IFinallyItemCompiler>().Emit(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/TypeDecl.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region FormalTypeParam\r\n\r\n        [NodeCompiler(typeof(FormalTypeParam))]\r\n        sealed class FormalTypeParamCompiler : INodeCompiler, IFormalTypeParamCompiler\r\n        {\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            sealed class PhpCustomAttributeProvider : IPhpCustomAttributeProvider\r\n            {\r\n                private readonly FormalTypeParam/*!*/node;\r\n\r\n                public PhpCustomAttributeProvider(FormalTypeParam/*!*/node)\r\n                {\r\n                    this.node = node;\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider Members\r\n\r\n                public PhpAttributeTargets AttributeTarget\r\n                {\r\n                    get { return PhpAttributeTargets.GenericParameter; }\r\n                }\r\n\r\n                public AttributeTargets AcceptsTargets\r\n                {\r\n                    get { return AttributeTargets.GenericParameter; }\r\n                }\r\n\r\n                public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    var attributes = node.Attributes;\r\n                    return (attributes != null) ? attributes.Count(type, selector) : 0;\r\n                }\r\n\r\n                public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    Debug.Fail(\"N/A\");\r\n                }\r\n\r\n                public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n                    node.NodeCompiler<FormalTypeParamCompiler>().parameter.SetCustomAttribute(builder);\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            #endregion\r\n\r\n            private GenericParameter/*! PreAnalyze */ parameter;\r\n\r\n            #region Analysis\r\n\r\n            public void PreAnalyze(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, GenericParameter/*!*/ parameter)\r\n            {\r\n                this.parameter = parameter;\r\n\r\n                PhpRoutine routine = parameter.DeclaringMember as PhpRoutine;\r\n                PhpType type = (routine != null) ? routine.DeclaringType as PhpType : parameter.DeclaringPhpType;\r\n\r\n                parameter.WriteUp(analyzer.ResolveType(node.DefaultType, type, routine, node.Span, false));\r\n            }\r\n\r\n            public bool Merge(FormalTypeParam/*!*/node, ErrorSink/*!*/ errors, FormalTypeParam/*!*/ other)\r\n            {\r\n                if (node.Name != other.Name)\r\n                {\r\n                    PhpType declaring_type = (PhpType)parameter.DeclaringMember;\r\n\r\n                    errors.Add(Errors.PartialDeclarationsDifferInTypeParameter, declaring_type.Declaration.SourceUnit, node.Span, declaring_type.FullName);\r\n\r\n                    return false;\r\n                }\r\n\r\n                CustomAttributes.Merge(node, other.Attributes);\r\n\r\n                return true;\r\n            }\r\n\r\n            public void AnalyzeMembers(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.AnalyzeMembers(analyzer, referringScope);\r\n            }\r\n\r\n            public void Analyze(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Analyze(analyzer, new PhpCustomAttributeProvider(node));\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            /// <summary>\r\n            /// Parameters on generic types.\r\n            /// </summary>\r\n            public void Emit(FormalTypeParam/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Emit(codeGenerator, new PhpCustomAttributeProvider(node));\r\n\r\n                // persists default type to the [TypeHint] attribute: \r\n                if (parameter.DefaultType != null)\r\n                {\r\n                    DTypeSpec spec = parameter.DefaultType.GetTypeSpec(codeGenerator.SourceUnit);\r\n                    parameter.SetCustomAttribute(spec.ToCustomAttributeBuilder());\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region TypeSignature\r\n\r\n        struct TypeSignatureCompiler\r\n        {\r\n            #region Analysis\r\n\r\n            public static void PreAnalyze(TypeSignature/*!*/node, Analyzer/*!*/ analyzer, PhpType/*!*/ declaringType)\r\n            {\r\n                Debug.Assert(analyzer != null && declaringType != null);\r\n\r\n                if (node.TypeParams == null) return;\r\n\r\n                Debug.Assert(declaringType.GenericParams.Length == node.TypeParams.Length);\r\n\r\n                for (int i = 0; i < node.TypeParams.Length; i++)\r\n                    node.TypeParams[i].PreAnalyze(analyzer, declaringType.GetGenericParameter(i));\r\n            }\r\n\r\n            public static void PreAnalyze(TypeSignature/*!*/node, Analyzer/*!*/ analyzer, PhpRoutine/*!*/ declaringRoutine)\r\n            {\r\n                Debug.Assert(analyzer != null && declaringRoutine != null);\r\n\r\n                if (node.TypeParams == null) return;\r\n\r\n                Debug.Assert(declaringRoutine.Signature.GenericParamCount == node.TypeParams.Length);\r\n\r\n                for (int i = 0; i < node.TypeParams.Length; i++)\r\n                    node.TypeParams[i].PreAnalyze(analyzer, declaringRoutine.Signature.GenericParams[i]);\r\n            }\r\n\r\n            public static bool Merge(TypeSignature/*!*/node, ErrorSink/*!*/ errors, PhpType/*!*/ declaringType, TypeSignature other)\r\n            {\r\n                if (node.TypeParams.Length != other.TypeParams.Length)\r\n                {\r\n                    errors.Add(Errors.PartialDeclarationsDifferInTypeParameterCount, declaringType.Declaration.SourceUnit,\r\n                        declaringType.Declaration.Span, declaringType.FullName);\r\n\r\n                    return false;\r\n                }\r\n\r\n                bool result = true;\r\n\r\n                for (int i = 0; i < node.TypeParams.Length; i++)\r\n                    result &= node.TypeParams[i].Merge(errors, other.TypeParams[i]);\r\n\r\n                return result;\r\n            }\r\n\r\n            public static void AnalyzeMembers(TypeSignature/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n            {\r\n                foreach (FormalTypeParam param in node.TypeParams)\r\n                    param.AnalyzeMembers(analyzer, referringScope);\r\n            }\r\n\r\n            public static void Analyze(TypeSignature/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                foreach (FormalTypeParam param in node.TypeParams)\r\n                    param.Analyze(analyzer);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            public static void Emit(TypeSignature/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                foreach (FormalTypeParam param in node.TypeParams)\r\n                    param.Emit(codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region TypeDecl\r\n\r\n        [NodeCompiler(typeof(TypeDecl))]\r\n        sealed class TypeDeclCompiler : StatementCompiler<TypeDecl>, ITypeDeclCompiler, IPhpCustomAttributeProvider, IDeclarationNode\r\n        {\r\n            #region Properties\r\n\r\n            /// <summary>\r\n            /// Type declaration node.\r\n            /// </summary>\r\n            private readonly TypeDecl node;\r\n\r\n            /// <summary>\r\n            /// Whether the node is partial and has been merged to another partial node (arggregate).\r\n            /// </summary>\r\n            private bool IsPartialMergeResiduum(TypeDecl node) { return node.Members == null; }\r\n\r\n            /// <summary>\r\n            /// Item of the table of classes. Partial classes merged to the aggregate has this field <B>null</B>ed.\r\n            /// </summary>\r\n            public PhpType Type { get { return type; } }\r\n            private PhpType type;\r\n\r\n            /// <summary>\r\n            /// Code of the class used when declared deferred in Eval.\r\n            /// </summary>\r\n            private string typeDefinitionCode = null;\r\n\r\n            #endregion\r\n\r\n            #region Construction\r\n\r\n            public TypeDeclCompiler(TypeDecl node)\r\n            {\r\n                this.node = node;\r\n\r\n                // create stuff necessary for inclusion resolving process, other structures are created duirng analysis:\r\n                QualifiedName qn = (node.Namespace != null) ? new QualifiedName(node.Name, node.Namespace.QualifiedName) : new QualifiedName(node.Name);\r\n                this.type = new PhpType(\r\n                    qn, node.MemberAttributes, node.PartialKeyword, node.typeSignature,\r\n                    node.IsConditional, node.Scope, (CompilationSourceUnit)node.SourceUnit, node.Span);\r\n\r\n                //// add alias for private classes (if not added yet by partial declaration):\r\n                //if (type.IsPrivate)\r\n                //    sourceUnit.AddTypeAlias(qn, this.name);\r\n\r\n                // member-analysis needs the node:\r\n                this.type.Declaration.Node = this;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Pre-analysis\r\n\r\n            /// <summary>\r\n            /// Invoked before member-analysis on the primary types.\r\n            /// All types are known at this point.\r\n            /// </summary>\r\n            void IDeclarationNode.PreAnalyze(Analyzer/*!*/ analyzer)\r\n            {\r\n                TypeSignatureCompiler.PreAnalyze(node.typeSignature, analyzer, type);\r\n\r\n                // all types are known:\r\n                DTypeDesc base_type = ResolveBaseType(analyzer);\r\n                List<DTypeDesc> base_interfaces = new List<DTypeDesc>(node.ImplementsList.Length);\r\n                ResolveBaseInterfaces(analyzer, base_interfaces);\r\n\r\n                // pre-analyze the other versions (include partial types merging):\r\n                if (type.Version.Next != null)\r\n                {\r\n                    if (type.Declaration.IsPartial)\r\n                    {\r\n                        var nextPartialDecl = (TypeDeclCompiler)type.Version.Next.Declaration.Node;\r\n                        nextPartialDecl.PreAnalyzePartialDeclaration(analyzer, this,\r\n                            ref base_type, base_interfaces);\r\n\r\n                        // drop the partial type version info:\r\n                        type.Version = new VersionInfo(0, null);\r\n                    }\r\n                    else\r\n                        type.Version.Next.Declaration.Node.PreAnalyze(analyzer);\r\n                }\r\n\r\n                type.TypeDesc.WriteUpBaseType(base_type);\r\n                type.Builder.BaseInterfaces = base_interfaces;\r\n            }\r\n\r\n            private void PreAnalyzePartialDeclaration(Analyzer/*!*/ analyzer, TypeDeclCompiler/*!*/ aggregate,\r\n                ref DTypeDesc aggregateBase, List<DTypeDesc>/*!*/ aggregateInterfaces)\r\n            {\r\n                //\r\n                // little hack, change the sourceUnit in order to match the current partial class declaration with the right file and imported namespaces\r\n                //\r\n                var current_sourceUnit = analyzer.SourceUnit;\r\n                analyzer.SourceUnit = this.type.Declaration.SourceUnit;\r\n                //\r\n                //\r\n                //\r\n\r\n                try\r\n                {\r\n                    bool valid = true;\r\n\r\n                    if (type.IsInterface != aggregate.type.IsInterface)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.IncompatiblePartialDeclarations, type.Declaration.SourceUnit, type.Declaration.Span, type.FullName);\r\n                        analyzer.ErrorSink.Add(Errors.RelatedLocation, aggregate.type.Declaration.SourceUnit, aggregate.type.Declaration.Span);\r\n                        valid = false;\r\n                    }\r\n\r\n                    if (type.Visibility != aggregate.type.Visibility)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.ConflictingPartialVisibility, type.Declaration.SourceUnit, type.Declaration.Span, type.FullName);\r\n                        analyzer.ErrorSink.Add(Errors.RelatedLocation, aggregate.type.Declaration.SourceUnit, aggregate.type.Declaration.Span);\r\n                        valid = false;\r\n                    }\r\n\r\n                    // merge base types:\r\n                    DTypeDesc base_type = ResolveBaseType(analyzer);\r\n                    if (base_type != null)\r\n                    {\r\n                        if (aggregateBase != null)\r\n                        {\r\n                            if (!base_type.Type.Equals(aggregateBase.Type)) //Edited by onny Jan 07 2009 - missing \"!\"?\r\n                            {\r\n                                analyzer.ErrorSink.Add(Errors.PartialDeclarationsDifferInBase, type.Declaration.SourceUnit, type.Declaration.Span, type.FullName);\r\n                                analyzer.ErrorSink.Add(Errors.RelatedLocation, aggregate.type.Declaration.SourceUnit, aggregate.type.Declaration.Span);\r\n                                valid = false;\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            aggregateBase = base_type;\r\n                        }\r\n                    }\r\n\r\n                    TypeSignatureCompiler.PreAnalyze(node.typeSignature, analyzer, type);\r\n\r\n                    // merge generic parameters:\r\n                    valid &= TypeSignatureCompiler.Merge(aggregate.node.typeSignature, analyzer.ErrorSink, this.type, node.typeSignature);\r\n\r\n                    // move members to the aggregate:\r\n                    node.Members.ForEach(member => member.NodeCompiler<ITypeMemberDeclCompiler>().SourceUnit = analyzer.SourceUnit); // override SourceUnit of the members to match the debug information and imported namespaces properly furing the analysis\r\n                    aggregate.node.Members.AddRange(node.Members);\r\n                    node.Members = null;\r\n\r\n                    // move attributes to the aggregate:\r\n                    CustomAttributes.Merge(aggregate.node, node.Attributes);\r\n\r\n                    // merge interfaces:\r\n                    ResolveBaseInterfaces(analyzer, aggregateInterfaces);\r\n\r\n                    // next partial declaration;\r\n                    // (if the declaration is erroneous, stop analysis before reporting more messy errors):\r\n                    if (valid && type.Version.Next != null)\r\n                    {\r\n                        ((TypeDeclCompiler)type.Version.Next.Declaration.Node).PreAnalyzePartialDeclaration(analyzer, aggregate,\r\n                            ref aggregateBase, aggregateInterfaces);\r\n                    }\r\n                }\r\n                finally\r\n                {\r\n                    // cut the AST off the tables:\r\n                    type.Declaration.Node = null;\r\n                    type = null;\r\n\r\n                    //\r\n                    // change the sourceUnit back\r\n                    //\r\n                    analyzer.SourceUnit = current_sourceUnit;\r\n                }\r\n            }\r\n\r\n            private DTypeDesc ResolveBaseType(Analyzer/*!*/ analyzer)\r\n            {\r\n                if (node.BaseClassName.HasValue)\r\n                {\r\n                    DType base_type = analyzer.ResolveTypeName(node.BaseClassName.Value, type, null, node.Span, true);\r\n\r\n                    if (base_type.IsGenericParameter)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.CannotDeriveFromTypeParameter, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                        return null;\r\n                    }\r\n                    else if (base_type.IsIdentityDefinite)\r\n                    {\r\n                        if (base_type.IsInterface)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.NonClassExtended, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                            return null;\r\n                        }\r\n                        else if (base_type.IsFinal)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.FinalClassExtended, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                            // do not remove the base class to make the further error reports consistent\r\n                        }\r\n                    }\r\n\r\n                    return base_type.TypeDesc;\r\n                }\r\n                else\r\n                    return null;\r\n            }\r\n\r\n            private void ResolveBaseInterfaces(Analyzer/*!*/ analyzer, List<DTypeDesc>/*!*/ interfaces)\r\n            {\r\n                var implementsList = node.ImplementsList;\r\n                var implementsSpan = node.ImplementsListPosition;\r\n\r\n                for (int i = 0; i < implementsList.Length; i++)\r\n                {\r\n                    DType base_type = analyzer.ResolveTypeName(implementsList[i], type, null, implementsSpan[i], true);\r\n\r\n                    if (base_type.IsGenericParameter)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.CannotDeriveFromTypeParameter, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                    }\r\n                    else if (base_type.IsIdentityDefinite && !base_type.IsInterface)\r\n                    {\r\n                        if (type.IsInterface)\r\n                            analyzer.ErrorSink.Add(Errors.NonInterfaceExtended, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                        else\r\n                            analyzer.ErrorSink.Add(Errors.NonInterfaceImplemented, analyzer.SourceUnit, node.Span, base_type.FullName);\r\n                    }\r\n                    else\r\n                    {\r\n                        interfaces.Add(base_type.TypeDesc);\r\n                    }\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Member Analysis\r\n\r\n            /// <summary>\r\n            /// Invoked by analyzer after all files are parsed and before the full analysis takes place.\r\n            /// Invoked only on types directly stored on the compilation unit during parsing,\r\n            /// i.e. invoked only on the primary version and not on the others.\r\n            /// All types and their inheritance relationships are known at this point, partial types has already been merged.\r\n            /// </summary>\r\n            void IDeclarationNode.AnalyzeMembers(Analyzer/*!*/ analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    node.Attributes.AnalyzeMembers(analyzer, type.Declaration.Scope);\r\n\r\n                TypeSignatureCompiler.AnalyzeMembers(node.typeSignature, analyzer, type.Declaration.Scope);\r\n\r\n                // let members add themselves to the type:\r\n                for (int i = 0; i < node.Members.Count; i++)\r\n                    node.Members[i].AnalyzeMembers(analyzer, type);\r\n\r\n                type.ValidateMembers(analyzer.ErrorSink);\r\n\r\n                // analyze members of the other versions:\r\n                if (type.Version.Next != null)\r\n                {\r\n                    var nextPartialDecl = type.Version.Next.Declaration.Node;\r\n\r\n                    // little hack, change the SourceUnit during the analysis to match the partial declaration\r\n                    var nextPartialDecl_sourceUnit = ((TypeDeclCompiler)nextPartialDecl).Type.Declaration.SourceUnit;\r\n                    var current_sourceUnit = analyzer.SourceUnit;\r\n\r\n                    analyzer.SourceUnit = nextPartialDecl_sourceUnit;\r\n                    nextPartialDecl.AnalyzeMembers(analyzer);   // analyze partial class members\r\n                    analyzer.SourceUnit = current_sourceUnit;\r\n                }\r\n\r\n                // cut the AST off the tables:\r\n                type.Declaration.Node = null;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Analysis\r\n\r\n            internal override Statement Analyze(TypeDecl node, Analyzer analyzer)\r\n            {\r\n                // remove classes that has been merged to the aggregate from the further processing:\r\n                if (IsPartialMergeResiduum(node))\r\n                    return EmptyStmt.PartialMergeResiduum;\r\n\r\n                // functions in incomplete (not emitted) class can't be emitted\r\n                type.Declaration.IsInsideIncompleteClass = analyzer.IsInsideIncompleteClass();\r\n\r\n                // the ClassDecl is fully analyzed even if it will be replaced in the AST by EvalEx\r\n                // and even if it is unreachable in order to discover all possible errors in compile-time\r\n\r\n                type.Declaration.IsUnreachable = analyzer.IsThisCodeUnreachable();\r\n\r\n                if (type.Declaration.IsUnreachable)\r\n                    analyzer.ReportUnreachableCode(node.Span);\r\n\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Analyze(analyzer, this);\r\n                TypeSignatureCompiler.Analyze(node.typeSignature, analyzer);\r\n\r\n                analyzer.EnterTypeDecl(type);\r\n\r\n                foreach (var member in node.Members)\r\n                {\r\n                    var membercompiler = member.NodeCompiler<ITypeMemberDeclCompiler>();\r\n                    membercompiler.EnterAnalyzer(analyzer);\r\n                    membercompiler.Analyze(member, analyzer);\r\n                    membercompiler.LeaveAnalyzer(analyzer);\r\n                }\r\n\r\n                analyzer.LeaveTypeDecl();\r\n\r\n                // validate the type after all members has been analyzed and validated:\r\n                type.Validate(analyzer.ErrorSink);\r\n\r\n                if (type.Declaration.IsUnreachable)\r\n                {\r\n                    // only a conditional declaration can be unreachable\r\n                    // => not emiting the declaration is ok\r\n\r\n                    return EmptyStmt.Unreachable;\r\n                }\r\n                else if (!type.IsComplete)\r\n                {\r\n                    // mark all functions declared in incomplete class as 'non-compilable'\r\n\r\n                    // convert incomplete class to an eval if applicable:\r\n                    if (analyzer.SourceUnit.CompilationUnit.IsPure && analyzer.CurrentType == null &&\r\n                        analyzer.CurrentRoutine == null)\r\n                    {\r\n                        // error, since there is no place for global code in pure mode:\r\n                        analyzer.ErrorSink.Add(Errors.IncompleteClass, analyzer.SourceUnit, node.Span, node.Name);\r\n                        return node;\r\n                    }\r\n\r\n                    if (analyzer.SourceUnit.CompilationUnit.IsTransient)\r\n                    {\r\n                        TransientCompilationUnit transient_unit = (TransientCompilationUnit)analyzer.SourceUnit.CompilationUnit;\r\n\r\n                        // report an error only for synthetic evals as we are 100% sure that the class cannot be completed;\r\n                        // note that a synthetic eval can be created even in transient code as some base types could be \r\n                        // declared there conditionally:\r\n                        if (transient_unit.EvalKind == EvalKinds.SyntheticEval)\r\n                        {\r\n                            analyzer.ErrorSink.Add(Errors.IncompleteClass, analyzer.SourceUnit, node.Span, node.Name);\r\n                            return node;\r\n                        }\r\n                    }\r\n\r\n                    // report the warning, incomplete_class\r\n                    analyzer.ErrorSink.Add(Warnings.IncompleteClass, analyzer.SourceUnit, node.Span, node.Name);\r\n\r\n                    // TODO: instead of embedding class source code,\r\n                    // embedd serialized AST, so avoid parsing again in runtime\r\n                    this.typeDefinitionCode = analyzer.SourceUnit.GetSourceCode(node.EntireDeclarationSpan);\r\n                    \r\n                    // we emit eval\r\n                    return node;\r\n                }\r\n                else\r\n                {\r\n                    return node;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            internal void EmitDefinition(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                if (type.IsComplete)\r\n                {\r\n                    Debug.Assert(type.IsComplete, \"Incomplete types should be converted to evals.\");\r\n                    Debug.Assert(type.RealTypeBuilder != null, \"A class declared during compilation should have a type builder.\");\r\n\r\n                    var attributes = node.Attributes;\r\n                    if (attributes != null) \r\n                        attributes.Emit(codeGenerator, this);\r\n                    TypeSignatureCompiler.Emit(node.typeSignature, codeGenerator);\r\n\r\n                    codeGenerator.EnterTypeDeclaration(type);\r\n\r\n                    foreach (TypeMemberDecl member in node.Members)\r\n                    {\r\n                        var membercompiler = member.NodeCompiler<ITypeMemberDeclCompiler>();\r\n                        membercompiler.EnterCodegenerator(codeGenerator);\r\n                        membercompiler.Emit(member, codeGenerator);\r\n                        membercompiler.LeaveCodegenerator(codeGenerator);\r\n                    }\r\n\r\n                    // emit stubs for implemented methods & properties that were not declared by this type:\r\n                    codeGenerator.EmitGhostStubs(type);\r\n\r\n                    codeGenerator.LeaveTypeDeclaration();\r\n                }\r\n                else\r\n                {\r\n                    Debug.Assert(this.typeDefinitionCode != null);\r\n\r\n                    // LOAD DynamicCode.Eval(<code>, context, definedVariables, self, includer, source, line, column, evalId)\r\n\r\n                    // wrap Eval into static method\r\n                    MethodBuilder method = codeGenerator.IL.TypeBuilder.DefineMethod(\r\n                        string.Format(\"{0}{1}\", ScriptModule.DeclareHelperNane, type.FullName),\r\n                        MethodAttributes.Private | MethodAttributes.Static | MethodAttributes.SpecialName,\r\n                        Types.Void, Types.ScriptContext);\r\n\r\n                    var il = new ILEmitter(method);\r\n\r\n                    codeGenerator.EnterLambdaDeclaration(il, false, LiteralPlace.Null, new IndexedPlace(PlaceHolder.Argument, 0), LiteralPlace.Null, LiteralPlace.Null);\r\n                    if (true)\r\n                    {\r\n                        var naming  = (node.Namespace != null) ? node.Namespace.Naming : node.SourceUnit.Naming;  // current naming context aliases\r\n                        codeGenerator.EmitEval(\r\n                            EvalKinds.SyntheticEval,\r\n                            LiteralUtils.Create(node.Span, this.typeDefinitionCode, AccessType.Read),\r\n                            node.Span,\r\n                            (node.Namespace != null) ? node.Namespace.QualifiedName : (QualifiedName?)null, naming.Aliases);\r\n                        il.Emit(OpCodes.Pop);\r\n                        il.Emit(OpCodes.Ret);\r\n                    }\r\n                    codeGenerator.LeaveFunctionDeclaration();\r\n\r\n                    //\r\n                    il = codeGenerator.IL;\r\n\r\n                    type.IncompleteClassDeclareMethodInfo = method;\r\n                    type.IncompleteClassDeclarationId = String.Format(\"{0}${1}:{2}\", type.FullName, unchecked((uint)codeGenerator.SourceUnit.SourceFile.ToString().GetHashCode()), node.Span.Start);\r\n\r\n                    // sequence point here\r\n                    codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                    if (type.Declaration.IsConditional)\r\n                    {\r\n                        // CALL <Declare>.<FullName>(<context>)\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, method);\r\n                    }\r\n                    else\r\n                    {\r\n                        // if (!<context>.IncompleteTypeDeclared(<id>))\r\n                        //     CALL <Declare>.<FullName>(<context>)\r\n                        var end_if = il.DefineLabel();\r\n\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Ldstr, type.IncompleteClassDeclarationId);\r\n                        il.Emit(OpCodes.Call, Methods.ScriptContext.IncompleteTypeDeclared);\r\n                        il.Emit(OpCodes.Brtrue, end_if);\r\n                        if (true)\r\n                        {\r\n                            codeGenerator.EmitLoadScriptContext();\r\n                            il.Emit(OpCodes.Call, type.IncompleteClassDeclareMethodInfo);\r\n                        }\r\n                        il.MarkLabel(end_if);\r\n                        il.ForgetLabel(end_if);\r\n                    }\r\n                }\r\n            }\r\n\r\n            internal void EmitDeclaration(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                if (type.IsComplete)\r\n                {\r\n                    Debug.Assert(type.IsComplete, \"Incomplete types should be converted to evals.\");\r\n                    Debug.Assert(type.RealTypeBuilder != null, \"A class declared during compilation should have a type builder.\");\r\n\r\n                    if (type.Declaration.IsConditional)\r\n                    {\r\n                        ILEmitter il = codeGenerator.IL;\r\n\r\n                        codeGenerator.MarkSequencePoint(node.Span);\r\n\r\n                        // this class was conditionally declared, so we'll emit code that activates it:\r\n                        type.EmitAutoDeclareOnScriptContext(il, codeGenerator.ScriptContextPlace);\r\n\r\n                        if (codeGenerator.Context.Config.Compiler.Debug)\r\n                            il.Emit(OpCodes.Nop);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // declared in emitted Eval\r\n                }\r\n            }\r\n\r\n            internal override void Emit(TypeDecl node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"ClassDecl\");\r\n                EmitDeclaration(codeGenerator);\r\n                EmitDefinition(codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IPhpCustomAttributeProvider Members\r\n\r\n            public PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Class; } }\r\n\r\n            public AttributeTargets AcceptsTargets\r\n            {\r\n                get\r\n                {\r\n                    return ((type.IsInterface) ? AttributeTargets.Interface : AttributeTargets.Class)\r\n                        | AttributeTargets.Assembly | AttributeTargets.Module;\r\n                }\r\n            }\r\n\r\n            public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                var attributes = node.Attributes;\r\n                return (attributes != null) ? attributes.Count(type, selector) : 0;\r\n            }\r\n\r\n            public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                switch (kind)\r\n                {\r\n                    case SpecialAttributes.AttributeUsage:\r\n                        type.SetCustomAttributeUsage((AttributeUsageAttribute)attribute);\r\n                        break;\r\n\r\n                    case SpecialAttributes.Export:\r\n                        type.Builder.ExportInfo = (ExportAttribute)attribute;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"N/A\");\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                type.RealTypeBuilder.SetCustomAttribute(builder);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region TypeMemberDecl\r\n\r\n        abstract class TypeMemberDeclCompiler<T> : INodeCompiler, ITypeMemberDeclCompiler where T : TypeMemberDecl\r\n        {\r\n            #region SourceUnit nesting\r\n\r\n            /// <summary>\r\n            /// Overrides current sourceUnit for this TypeMemberDecl. This occurres\r\n            /// when partial class is declared, after preanalysis, when members are\r\n            /// merged into one TypeDecl.\r\n            /// </summary>\r\n            CompilationSourceUnit ITypeMemberDeclCompiler.SourceUnit { get { return this.sourceUnit; } set { this.sourceUnit = value; } }\r\n            private CompilationSourceUnit sourceUnit = null;\r\n\r\n            void ITypeMemberDeclCompiler.EnterAnalyzer(Analyzer/*!*/analyzer)\r\n            {\r\n                if (sourceUnit != null)\r\n                {\r\n                    if (currentSourceUnit != null)\r\n                        throw new InvalidOperationException(\"TypeMemberDecl.EnterAnalyzer does not support nesting.\");\r\n\r\n                    currentSourceUnit = analyzer.SourceUnit;\r\n                    analyzer.SourceUnit = sourceUnit;\r\n                }\r\n            }\r\n            void ITypeMemberDeclCompiler.LeaveAnalyzer(Analyzer/*!*/analyzer)\r\n            {\r\n                if (sourceUnit != null)\r\n                {\r\n                    if (currentSourceUnit == null)\r\n                        throw new InvalidOperationException(\"TypeMemberDecl.EnterAnalyzer was not called before.\");\r\n\r\n                    analyzer.SourceUnit = currentSourceUnit;\r\n                    currentSourceUnit = null;\r\n                }\r\n            }\r\n            void ITypeMemberDeclCompiler.EnterCodegenerator(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                if (sourceUnit != null)\r\n                {\r\n                    if (currentSourceUnit != null)\r\n                        throw new InvalidOperationException(\"TypeMemberDecl.EnterAnalyzer does not support nesting.\");\r\n\r\n                    currentSourceUnit = codeGenerator.SourceUnit;\r\n                    codeGenerator.SourceUnit = sourceUnit;\r\n                }\r\n            }\r\n            void ITypeMemberDeclCompiler.LeaveCodegenerator(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                if (sourceUnit != null)\r\n                {\r\n                    if (currentSourceUnit == null)\r\n                        throw new InvalidOperationException(\"TypeMemberDecl.EnterAnalyzer was not called before.\");\r\n\r\n                    codeGenerator.SourceUnit = currentSourceUnit;\r\n                    currentSourceUnit = null;\r\n                }\r\n            }\r\n            private CompilationSourceUnit currentSourceUnit = null;\r\n\r\n            #endregion\r\n\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            protected abstract class BasePhpCustomAttributeProvider : IPhpCustomAttributeProvider\r\n            {\r\n                protected readonly T node;\r\n\r\n                public BasePhpCustomAttributeProvider(T node)\r\n                {\r\n                    this.node = node;\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider Members\r\n\r\n                public abstract PhpAttributeTargets AttributeTarget { get; }\r\n                public abstract AttributeTargets AcceptsTargets { get; }\r\n\r\n                public abstract void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector);\r\n                public abstract void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector);\r\n\r\n                public int GetAttributeUsageCount(DType/*!*/ type, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    var attributes = node.Attributes;\r\n                    if (attributes != null)\r\n                        return attributes.Count(type, selector);\r\n                    else\r\n                        return 0;\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            protected abstract IPhpCustomAttributeProvider CreatePhpCustomAttributeProvider(T/*!*/node);\r\n\r\n            #endregion\r\n\r\n            internal virtual void AnalyzeMembers(T/*!*/node, Analyzer/*!*/ analyzer, PhpType/*!*/ declaringType)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.AnalyzeMembers(analyzer, declaringType.Declaration.Scope);\r\n            }\r\n\r\n            internal virtual void Analyze(T/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Analyze(analyzer, CreatePhpCustomAttributeProvider(node));\r\n            }\r\n\r\n            internal virtual void Emit(T/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                var attributes = node.Attributes;\r\n                if (attributes != null)\r\n                    attributes.Emit(codeGenerator, CreatePhpCustomAttributeProvider(node));\r\n            }\r\n\r\n            #region ITypeMemberDeclCompiler Members\r\n\r\n            void ITypeMemberDeclCompiler.AnalyzeMembers(TypeMemberDecl node, Analyzer analyzer, PhpType declaringType)\r\n            {\r\n                AnalyzeMembers((T)node, analyzer, declaringType);\r\n            }\r\n\r\n            void ITypeMemberDeclCompiler.Analyze(TypeMemberDecl node, Analyzer analyzer)\r\n            {\r\n                Analyze((T)node, analyzer);\r\n            }\r\n\r\n            void ITypeMemberDeclCompiler.Emit(TypeMemberDecl node, CodeGenerator codeGenerator)\r\n            {\r\n                Emit((T)node, codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        [NodeCompiler(typeof(MethodDecl))]\r\n        sealed class MethodDeclCompiler : TypeMemberDeclCompiler<MethodDecl>\r\n        {\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            sealed class PhpCustomAttributeProvider : BasePhpCustomAttributeProvider\r\n            {\r\n                private readonly PhpMethod method;\r\n\r\n                public PhpCustomAttributeProvider(MethodDecl node, PhpMethod method)\r\n                    :base(node)\r\n                {\r\n                    this.method = method;\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider Members\r\n                \r\n                public override PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Method; } }\r\n\r\n                public override AttributeTargets AcceptsTargets\r\n                {\r\n                    get\r\n                    {\r\n                        return (method.IsConstructor ? AttributeTargets.Constructor : AttributeTargets.Method) |\r\n                          AttributeTargets.ReturnValue;\r\n                    }\r\n                }\r\n\r\n                public override void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    switch (kind)\r\n                    {\r\n                        case SpecialAttributes.Export:\r\n                            Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n                            method.Builder.ExportInfo = (ExportAttribute)attribute;\r\n                            break;\r\n\r\n                        default:\r\n                            Debug.Fail(\"N/A\");\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                public override void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    if (selector == CustomAttribute.TargetSelectors.Return)\r\n                    {\r\n                        method.Builder.ReturnParamBuilder.SetCustomAttribute(builder);\r\n                    }\r\n                    else\r\n                    {\r\n                        Debug.Assert(method.ArgLessInfo is MethodBuilder, \"PHP methods cannot be dynamic\");\r\n                        ((MethodBuilder)method.ArgFullInfo).SetCustomAttribute(builder);\r\n                    }\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            protected override IPhpCustomAttributeProvider CreatePhpCustomAttributeProvider(MethodDecl node)\r\n            {\r\n                return new PhpCustomAttributeProvider(node, method);\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Item in the table of methods or a <B>null</B> reference if added to the type yet or an error occured while adding.\r\n            /// </summary>\r\n            private PhpMethod method = null;\r\n\r\n            #region Analysis\r\n\r\n            internal override void AnalyzeMembers(MethodDecl node, Analyzer analyzer, PhpType declaringType)\r\n            {\r\n                method = declaringType.AddMethod(node.Name, node.Modifiers, node.Body != null,\r\n                    node.Signature, node.TypeSignature, node.Span,\r\n                    analyzer.SourceUnit, analyzer.ErrorSink);\r\n\r\n                // method redeclared:\r\n                if (method == null) return;\r\n\r\n                method.WriteUp(node.TypeSignature.ToPhpRoutineSignature(method));\r\n\r\n                TypeSignatureCompiler.PreAnalyze(node.TypeSignature, analyzer, method);\r\n\r\n                base.AnalyzeMembers(node, analyzer, declaringType);\r\n\r\n                TypeSignatureCompiler.AnalyzeMembers(node.TypeSignature, analyzer, declaringType.Declaration.Scope);\r\n                SignatureCompiler.AnalyzeMembers(node.Signature, analyzer, method);\r\n                method.IsDllImport = this.IsDllImport(node.Attributes);\r\n                if (method.IsDllImport && node.Body.Any())\r\n                    analyzer.ErrorSink.Add(Warnings.BodyOfDllImportedFunctionIgnored, analyzer.SourceUnit, node.Span);\r\n            }\r\n\r\n            internal override void Analyze(MethodDecl node, Analyzer analyzer)\r\n            {\r\n                // method redeclared:\r\n                if (method == null) return;\r\n\r\n                base.Analyze(node, analyzer);\r\n\r\n                PhpType declaring_type = analyzer.CurrentType;\r\n\r\n                analyzer.EnterMethodDeclaration(method);\r\n\r\n                TypeSignatureCompiler.Analyze(node.TypeSignature, analyzer);\r\n                SignatureCompiler.Analyze(node.Signature, analyzer);\r\n\r\n                method.Validate(analyzer.ErrorSink);\r\n\r\n                // note, if the declaring type's base is unknown then it cannot be a CLR type;\r\n                ClrType base_clr_type = method.DeclaringType.Base as ClrType;\r\n\r\n                if (node.BaseCtorParams != null)\r\n                {\r\n                    if (base_clr_type != null)\r\n                    {\r\n                        AnalyzeBaseCtorCallParams(node, analyzer, base_clr_type);\r\n                    }\r\n                    else if (!method.IsConstructor || method.DeclaringType.Base == null || node.Body == null)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.UnexpectedParentCtorInvocation, analyzer.SourceUnit, node.Span);\r\n                        node.BaseCtorParams = null;\r\n                    }\r\n                    else if (method.DeclaringType.Base.Constructor == null)\r\n                    {\r\n                        // base class has no constructor, the default parameterless is silently called (and that does nothing);\r\n                        // report error, if there are any parameters passed to the parameterless ctor:\r\n                        if (node.BaseCtorParams.Length > 0)\r\n                            analyzer.ErrorSink.Add(Errors.UnexpectedParentCtorInvocation, analyzer.SourceUnit, node.Span);\r\n                        node.BaseCtorParams = null;\r\n                    }\r\n                    else\r\n                    {\r\n                        GenericQualifiedName parent_name = new GenericQualifiedName(new QualifiedName(Name.ParentClassName));\r\n                        DirectStMtdCall call_expr = new DirectStMtdCall(\r\n                            node.Span, parent_name, Text.Span.Invalid,\r\n                            method.DeclaringType.Base.Constructor.Name, Text.Span.Invalid,\r\n                            node.BaseCtorParams, TypeRef.EmptyList);\r\n\r\n                        node.Body = ArrayUtils.Concat(new ExpressionStmt(node.Span, call_expr), node.Body);\r\n                        node.BaseCtorParams = null;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // the type immediately extends CLR type with no default ctor, yet there is no call to the base ctor;\r\n                    // note, all constructor overloads reflected from the CLR type are visible as we are in a subclass:\r\n                    if (method.IsConstructor && base_clr_type != null && !base_clr_type.ClrConstructor.HasParameterlessOverload)\r\n                    {\r\n                        analyzer.ErrorSink.Add(Errors.ExpectingParentCtorInvocation, analyzer.SourceUnit, node.Span);\r\n                    }\r\n                }\r\n                if (method.IsDllImport && !method.IsStatic)\r\n                    analyzer.ErrorSink.Add(Errors.DllImportMethodMustBeStatic, analyzer.SourceUnit, node.Span);\r\n                if (method.IsDllImport && method.IsAbstract)\r\n                    analyzer.ErrorSink.Add(Errors.DllImportMethodCannotBeAbstract, analyzer.SourceUnit, node.Span);\r\n\r\n                if (node.Body != null)\r\n                    node.Body.Analyze(analyzer);\r\n\r\n                method.ValidateBody(analyzer.ErrorSink);\r\n\r\n                analyzer.LeaveMethodDeclaration();\r\n\r\n                // add entry point if applicable:\r\n                analyzer.SetEntryPoint(method, node.Span);\r\n            }\r\n\r\n            private void AnalyzeBaseCtorCallParams(MethodDecl node, Analyzer/*!*/ analyzer, ClrType/*!*/ clrBase)\r\n            {\r\n                // we needn't to resolve the ctor here since the base class has to be known CLR type,\r\n                // which has always a known ctor (may be a stub):\r\n                ClrMethod base_ctor = clrBase.ClrConstructor;\r\n\r\n                // create non-generic call signature:\r\n                CallSignature call_sig = new CallSignature(node.BaseCtorParams, TypeRef.EmptyList);\r\n\r\n                RoutineSignature signature;\r\n                int overload_index = base_ctor.ResolveOverload(analyzer, call_sig, node.Span, out signature);\r\n\r\n                if (overload_index == DRoutine.InvalidOverloadIndex)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.ClassHasNoVisibleCtor, analyzer.SourceUnit, node.Span, clrBase.FullName);\r\n                }\r\n                else if (base_ctor.Overloads[overload_index].MandatoryParamCount != call_sig.Parameters.Length)\r\n                {\r\n                    // invalid argument count passed to the base ctor:\r\n                    analyzer.ErrorSink.Add(Errors.InvalidArgumentCount, analyzer.SourceUnit, node.Span);\r\n                }\r\n\r\n                CallSignatureHelpers.Analyze(call_sig, analyzer, signature, AST.ExInfoFromParent.DefaultExInfo, true);\r\n\r\n                // stores the signature on the type builder:\r\n                method.DeclaringPhpType.Builder.BaseCtorCallSignature = call_sig;\r\n                method.DeclaringPhpType.Builder.BaseCtorCallOverloadIndex = overload_index;\r\n\r\n                // we don't need it any more:\r\n                node.BaseCtorParams = null;\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>Gets value indicating if the method is decorated with <see cref=\"System.Runtime.InteropServices.DllImportAttribute\"/></summary>\r\n            internal bool IsDllImport(CustomAttributes attributes)\r\n            {\r\n                if (attributes == null || attributes.Attributes == null)\r\n                    return false;\r\n\r\n                foreach (CustomAttribute attr in attributes.Attributes)\r\n                {\r\n                    if (attr.GetResolvedType() == SpecialCustomAttribute.DllImportAttribute)\r\n                        return true;\r\n                }\r\n\r\n                return false;\r\n            }\r\n\r\n            #region Emission\r\n\r\n            internal override void Emit(MethodDecl node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Class.MethodDecl\");\r\n\r\n                base.Emit(node, codeGenerator);\r\n\r\n                // emit attributes on return value, generic and regular parameters:\r\n                SignatureCompiler.Emit(node.Signature, codeGenerator);\r\n                TypeSignatureCompiler.Emit(node.TypeSignature, codeGenerator);\r\n\r\n                if (method.IsDllImport)\r\n                {\r\n                    //TODO: Support for DllImport\r\n                    Debug.Assert(false, \"DllImport - not supported\");\r\n                }\r\n                else if (!method.IsAbstract)\r\n                {\r\n                    // returns immediately if the method is abstract:\r\n                    codeGenerator.EnterMethodDeclaration(method);\r\n\r\n                    // emits the arg-full overload:\r\n                    codeGenerator.EmitArgfullOverloadBody(method, node.Body, node.EntireDeclarationSpan, node.DeclarationBodyPosition);\r\n\r\n                    // restores original code generator settings:\r\n                    codeGenerator.LeaveMethodDeclaration();\r\n                }\r\n                else\r\n                {\r\n                    // static abstract method is non-abstract in CLR => needs to have a body:\r\n                    if (method.IsStatic)\r\n                    {\r\n                        ILEmitter il = new ILEmitter(method.ArgFullInfo);\r\n                        il.Emit(OpCodes.Ldstr, method.DeclaringType.FullName);\r\n                        il.Emit(OpCodes.Ldstr, method.FullName);\r\n                        codeGenerator.EmitPhpException(il, Methods.PhpException.AbstractMethodCalled);\r\n                        il.Emit(OpCodes.Ldnull);\r\n                        il.Emit(OpCodes.Ret);\r\n                    }\r\n                }\r\n\r\n                // emits stubs for overridden/implemented methods and export stubs:\r\n                codeGenerator.EmitOverrideAndExportStubs(method);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields\r\n\r\n        [NodeCompiler(typeof(FieldDeclList))]\r\n        sealed class FieldDeclListCompiler : TypeMemberDeclCompiler<FieldDeclList>\r\n        {\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            sealed class PhpCustomAttributeProvider : BasePhpCustomAttributeProvider\r\n            {\r\n                public PhpCustomAttributeProvider(FieldDeclList node)\r\n                    : base(node)\r\n                {\r\n                }\r\n\r\n                #region IPhpCustomAttributeProvider Members\r\n\r\n                public override PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Property; } }\r\n\r\n                public override AttributeTargets AcceptsTargets\r\n                {\r\n                    get { return AttributeTargets.Property | AttributeTargets.Field; }\r\n                }\r\n\r\n                public override void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (FieldDecl field in node.Fields)\r\n                        field.ApplyCustomAttribute(kind, attribute, selector);\r\n                }\r\n\r\n                public override void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (FieldDecl field in node.Fields)\r\n                        field.EmitCustomAttribute(builder, selector);\r\n                }\r\n\r\n                #endregion\r\n            }\r\n\r\n            protected override IPhpCustomAttributeProvider CreatePhpCustomAttributeProvider(FieldDeclList node)\r\n            {\r\n                return new PhpCustomAttributeProvider(node);\r\n            }\r\n\r\n            #endregion\r\n\r\n            internal override void AnalyzeMembers(FieldDeclList node, Analyzer analyzer, PhpType declaringType)\r\n            {\r\n                base.AnalyzeMembers(node, analyzer, declaringType);\r\n\r\n                // no fields in interface:\r\n                if (declaringType.IsInterface)\r\n                {\r\n                    analyzer.ErrorSink.Add(Errors.FieldInInterface, analyzer.SourceUnit, node.Span);\r\n                    return;\r\n                }\r\n\r\n                foreach (FieldDecl field in node.Fields)\r\n                {\r\n                    PhpField php_field = declaringType.AddField(field.Name, node.Modifiers, field.HasInitVal, field.Span,\r\n                        analyzer.SourceUnit, analyzer.ErrorSink);\r\n\r\n                    field.AnalyzeMember(analyzer, php_field);\r\n                }\r\n            }\r\n\r\n            internal override void Analyze(FieldDeclList node, Analyzer analyzer)\r\n            {\r\n                base.Analyze(node, analyzer);\r\n\r\n                foreach (FieldDecl field in node.Fields)\r\n                    field.Analyze(analyzer);\r\n            }\r\n\r\n            internal override void Emit(FieldDeclList node, CodeGenerator codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Class.FieldDecl\");\r\n                base.Emit(node, codeGenerator);\r\n\r\n                foreach (FieldDecl field in node.Fields)\r\n                    field.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        [NodeCompiler(typeof(FieldDecl))]\r\n        public sealed class FieldDeclCompiler : INodeCompiler, IFieldDeclCompiler\r\n        {\r\n            /// <summary>\r\n            /// Field representative, set by member analysis.\r\n            /// </summary>\r\n            public PhpField Field { get { return field; } }\r\n            private PhpField field;\r\n\r\n            void IFieldDeclCompiler.AnalyzeMember(FieldDecl/*!*/node, Analyzer/*!*/ analyzer, PhpField/*!*/ field)\r\n            {\r\n                this.field = field;\r\n            }\r\n\r\n            void IFieldDeclCompiler.Analyze(FieldDecl/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                // field redeclared:\r\n                if (field == null) return;\r\n\r\n                if (node.Initializer != null)\r\n                {\r\n                    node.Initializer = node.Initializer.Analyze(analyzer, AST.ExInfoFromParent.DefaultExInfo).Literalize();\r\n                }\r\n            }\r\n\r\n            void IFieldDeclCompiler.Emit(FieldDecl/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                codeGenerator.InitializeField(field, node.Initializer);\r\n                codeGenerator.EmitOverrideAndExportStubs(field);\r\n            }\r\n\r\n            void IFieldDeclCompiler.EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                field.RealFieldBuilder.SetCustomAttribute(builder);\r\n            }\r\n\r\n            void IFieldDeclCompiler.ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                // field redeclared:\r\n                if (field == null) return;\r\n\r\n                switch (kind)\r\n                {\r\n                    case SpecialAttributes.Export:\r\n                        Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n                        field.Builder.ExportInfo = (ExportAttribute)attribute;\r\n                        break;\r\n\r\n                    case SpecialAttributes.AppStatic:\r\n                        field.MemberDesc.MemberAttributes |= PhpMemberAttributes.AppStatic;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"N/A\");\r\n                        throw null;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ConstDeclList\r\n\r\n        [NodeCompiler(typeof(ConstDeclList))]\r\n        sealed class ConstDeclListCompiler : TypeMemberDeclCompiler<ConstDeclList>\r\n        {\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            private class PhpCustomAttributeProvider : BasePhpCustomAttributeProvider\r\n            {\r\n                public PhpCustomAttributeProvider(ConstDeclList node)\r\n                    : base(node)\r\n                {\r\n                }\r\n\r\n                public override PhpAttributeTargets AttributeTarget { get { return PhpAttributeTargets.Constant; } }\r\n\r\n                public override AttributeTargets AcceptsTargets\r\n                {\r\n                    get { return AttributeTargets.Field; }\r\n                }\r\n\r\n                public override void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (ClassConstantDecl cd in node.Constants)\r\n                        cd.ApplyCustomAttribute(kind, attribute, selector);\r\n                }\r\n\r\n                public override void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    foreach (ClassConstantDecl cd in node.Constants)\r\n                        cd.EmitCustomAttribute(builder, selector);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            protected override IPhpCustomAttributeProvider CreatePhpCustomAttributeProvider(ConstDeclList node)\r\n            {\r\n                return new PhpCustomAttributeProvider(node);\r\n            }\r\n\r\n            internal override void AnalyzeMembers(ConstDeclList node, Analyzer analyzer, PhpType declaringType)\r\n            {\r\n                base.AnalyzeMembers(node, analyzer, declaringType);\r\n\r\n                foreach (ClassConstantDecl cd in node.Constants)\r\n                {\r\n                    // the value is filled later by full analysis:\r\n                    ClassConstant php_constant = declaringType.AddConstant(cd.Name, node.Modifiers, cd.Span, analyzer.SourceUnit,\r\n                        analyzer.ErrorSink);\r\n\r\n                    cd.AnalyzeMember(analyzer, php_constant);\r\n                }\r\n            }\r\n\r\n            internal override void Analyze(ConstDeclList node, Analyzer analyzer)\r\n            {\r\n                base.Analyze(node, analyzer);\r\n\r\n                foreach (ClassConstantDecl cd in node.Constants)\r\n                    cd.Analyze(analyzer);\r\n            }\r\n\r\n            internal override void Emit(ConstDeclList node, CodeGenerator codeGenerator)\r\n            {\r\n                base.Emit(node, codeGenerator);\r\n\r\n                foreach (ClassConstantDecl cd in node.Constants)\r\n                    cd.Emit(codeGenerator);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ClassConstantDecl\r\n\r\n        [NodeCompiler(typeof(ClassConstantDecl))]\r\n        sealed class ClassConstantDeclCompiler : ConstantDeclCompiler<ClassConstantDecl>, IClassConstantDeclCompiler\r\n        {\r\n            public override KnownConstant Constant { get { return constant; } }\r\n            internal ClassConstant ClassConstant { get { return constant; } }\r\n            private ClassConstant constant;\r\n\r\n            public void AnalyzeMember(ClassConstantDecl/*!*/node, Analyzer/*!*/ analyzer, ClassConstant/*!*/ constant)\r\n            {\r\n                this.constant = constant;\r\n\r\n                // constant redeclared:\r\n                if (constant == null) return;\r\n\r\n                // initialize constant so that it has no value:\r\n                this.constant.SetNode(node);\r\n            }\r\n\r\n            public void Emit(CodeGenerator/*!*/ codeGenerator)\r\n            {\r\n                Statistics.AST.AddNode(\"Class.ConstantDecl\");\r\n\r\n                codeGenerator.InitializeClassConstant(constant);\r\n                if (constant.IsExported)\r\n                {\r\n                    string name = constant.FullName;\r\n\r\n                    // avoid duplicate export property names\r\n                    while (true)\r\n                    {\r\n                        DPropertyDesc prop_desc = constant.DeclaringPhpType.TypeDesc.GetProperty(new VariableName(name));\r\n                        if (prop_desc != null && prop_desc.PhpField.IsExported)\r\n                        {\r\n                            name = name + \"_const\";\r\n                        }\r\n                        else break;\r\n                    }\r\n\r\n                    PropertyBuilder exported_property = ClrStubBuilder.DefineFieldExport(name, constant);\r\n                    codeGenerator.EmitConstantExportStub(constant, exported_property);\r\n                }\r\n            }\r\n\r\n            public void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                // constant redeclared:\r\n                if (constant == null) return;\r\n\r\n                switch (kind)\r\n                {\r\n                    case SpecialAttributes.Export:\r\n                        Debug.Assert(selector == CustomAttribute.TargetSelectors.Default);\r\n                        constant.ExportInfo = (ExportAttribute)attribute;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Fail(\"N/A\");\r\n                        break;\r\n                }\r\n            }\r\n\r\n            public void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n            {\r\n                constant.RealFieldBuilder.SetCustomAttribute(builder);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Traits\r\n\r\n        [NodeCompiler(typeof(TraitsUse))]\r\n        sealed class TraitsUseCompiler : TypeMemberDeclCompiler<TraitsUse>\r\n        {\r\n            #region IPhpCustomAttributeProvider\r\n\r\n            private class PhpCustomAttributeProvider : BasePhpCustomAttributeProvider\r\n            {\r\n                public PhpCustomAttributeProvider(TraitsUse node)\r\n                    : base(node)\r\n                {\r\n                }\r\n\r\n                public override PhpAttributeTargets AttributeTarget\r\n                {\r\n                    get { return PhpAttributeTargets.Types; }\r\n                }\r\n\r\n                public override AttributeTargets AcceptsTargets\r\n                {\r\n                    get { return (AttributeTargets)0; }\r\n                }\r\n\r\n                public override void EmitCustomAttribute(CustomAttributeBuilder builder, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    // nothing\r\n                }\r\n\r\n                public override void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n                {\r\n                    // nothing\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            protected override IPhpCustomAttributeProvider CreatePhpCustomAttributeProvider(TraitsUse node)\r\n            {\r\n                return new PhpCustomAttributeProvider(node);\r\n            }\r\n            \r\n            internal override void AnalyzeMembers(TraitsUse node, Analyzer analyzer, PhpType declaringType)\r\n            {\r\n                base.AnalyzeMembers(node, analyzer, declaringType);\r\n            }\r\n\r\n            internal override void Analyze(TraitsUse node, Analyzer analyzer)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            internal override void Emit(TraitsUse node, CodeGenerator codeGenerator)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region TraitAdaptation, TraitAdaptationPrecedence, TraitAdaptationAlias\r\n\r\n        abstract class TraitAdaptationCompiler : INodeCompiler\r\n        {\r\n        }\r\n\r\n        [NodeCompiler(typeof(TraitsUse.TraitAdaptationPrecedence))]\r\n        sealed class TraitAdaptationPrecedenceCompiler : TraitAdaptationCompiler\r\n        {\r\n        }\r\n\r\n        [NodeCompiler(typeof(TraitsUse.TraitAdaptationAlias))]\r\n        sealed class TraitAdaptationAliasCompiler : TraitAdaptationCompiler\r\n        {\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region TypeSignatureHelper\r\n\r\n    internal static class TypeSignatureHelper\r\n    {\r\n        /// <summary>\r\n        /// Creates an array of generic parameters. \r\n        /// Used by generic types.\r\n        /// </summary>\r\n        public static GenericParameterDesc[]/*!!*/ ToGenericParameters(this TypeSignature typeSignature, DMember/*!*/ declaringType)\r\n        {\r\n            int mandatory_generic_param_count;\r\n            return typeSignature.ToGenericParameters(declaringType, out mandatory_generic_param_count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a <see cref=\"PhpRoutineSignature\"/> partially initialized with the type parameters of this type signature. \r\n        /// Used by generic routines.\r\n        /// </summary>\r\n        public static PhpRoutineSignature/*!*/ ToPhpRoutineSignature(this TypeSignature typeSignature, DMember/*!*/ declaringRoutine)\r\n        {\r\n            Debug.Assert(declaringRoutine != null);\r\n\r\n            int mandatory_generic_param_count;\r\n            GenericParameterDesc[] descs = typeSignature.ToGenericParameters(declaringRoutine, out mandatory_generic_param_count);\r\n\r\n            GenericParameter[] types = new GenericParameter[descs.Length];\r\n            for (int i = 0; i < descs.Length; i++)\r\n                types[i] = descs[i].GenericParameter;\r\n\r\n            return new PhpRoutineSignature(types, mandatory_generic_param_count);\r\n        }\r\n\r\n        private static GenericParameterDesc[]/*!!*/ ToGenericParameters(this TypeSignature typeSignature, DMember/*!*/ declaringMember, out int mandatoryCount)\r\n        {\r\n            Debug.Assert(declaringMember != null);\r\n\r\n            if (typeSignature.TypeParams.Length == 0)\r\n            {\r\n                mandatoryCount = 0;\r\n                return GenericParameterDesc.EmptyArray;\r\n            }\r\n\r\n            GenericParameterDesc[] result = new GenericParameterDesc[typeSignature.TypeParams.Length];\r\n            mandatoryCount = 0;\r\n            for (int i = 0; i < typeSignature.TypeParams.Length; i++)\r\n            {\r\n                result[i] = new GenericParameter(typeSignature.TypeParams[i].Name, i, declaringMember).GenericParameterDesc;\r\n                if (typeSignature.TypeParams[i].DefaultType == null)\r\n                    mandatoryCount++;\r\n            }\r\n            return result;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IClassConstantDeclCompiler\r\n\r\n    internal interface IClassConstantDeclCompiler\r\n    {\r\n        void AnalyzeMember(ClassConstantDecl/*!*/node, Analyzer/*!*/ analyzer, ClassConstant/*!*/ constant);\r\n        void Emit(CodeGenerator/*!*/ codeGenerator);\r\n        void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector);\r\n        void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector);\r\n    }\r\n\r\n    internal static class ClassConstantDeclCompilerHelper\r\n    {\r\n        public static void AnalyzeMember(this ClassConstantDecl/*!*/node, Analyzer/*!*/ analyzer, ClassConstant/*!*/ constant)\r\n        {\r\n            node.NodeCompiler<IClassConstantDeclCompiler>().AnalyzeMember(node, analyzer, constant);\r\n        }\r\n\r\n        public static void Emit(this ClassConstantDecl/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<IClassConstantDeclCompiler>().Emit(codeGenerator);\r\n        }\r\n\r\n        public static void ApplyCustomAttribute(this ClassConstantDecl/*!*/node, SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n        {\r\n            node.NodeCompiler<IClassConstantDeclCompiler>().ApplyCustomAttribute(kind, attribute, selector);\r\n        }\r\n\r\n        public static void EmitCustomAttribute(this ClassConstantDecl/*!*/node, CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n        {\r\n            node.NodeCompiler<IClassConstantDeclCompiler>().EmitCustomAttribute(builder, selector);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ITypeMemberDeclCompiler\r\n\r\n    internal interface ITypeMemberDeclCompiler\r\n    {\r\n        CompilationSourceUnit SourceUnit { get; set; }\r\n        void AnalyzeMembers(TypeMemberDecl/*!*/node, Analyzer/*!*/ analyzer, PhpType/*!*/ declaringType);\r\n        void Analyze(TypeMemberDecl/*!*/node, Analyzer/*!*/ analyzer);\r\n        void Emit(TypeMemberDecl/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n\r\n        void EnterAnalyzer(Analyzer/*!*/analyzer);\r\n        void LeaveAnalyzer(Analyzer/*!*/analyzer);\r\n        void EnterCodegenerator(CodeGenerator/*!*/ codeGenerator);\r\n        void LeaveCodegenerator(CodeGenerator/*!*/ codeGenerator);\r\n    }\r\n\r\n    internal static class TypeMemberDeclCompilerHelper\r\n    {\r\n        public static void AnalyzeMembers(this TypeMemberDecl/*!*/node, Analyzer/*!*/ analyzer, PhpType/*!*/ declaringType)\r\n        {\r\n            node.NodeCompiler<ITypeMemberDeclCompiler>().AnalyzeMembers(node, analyzer, declaringType);\r\n        }\r\n        public static void Analyze(this TypeMemberDecl/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<ITypeMemberDeclCompiler>().Analyze(node, analyzer);\r\n        }\r\n        public static void Emit(this TypeMemberDecl/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<ITypeMemberDeclCompiler>().Emit(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IFormalTypeParamCompiler\r\n\r\n    internal interface IFormalTypeParamCompiler\r\n    {\r\n        #region Analysis\r\n\r\n        void PreAnalyze(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, GenericParameter/*!*/ parameter);\r\n\r\n        bool Merge(FormalTypeParam/*!*/node, ErrorSink/*!*/ errors, FormalTypeParam/*!*/ other);\r\n\r\n        void AnalyzeMembers(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope);\r\n\r\n        void Analyze(FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer);\r\n\r\n        #endregion\r\n\r\n        #region Emission\r\n\r\n        void Emit(FormalTypeParam/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n\r\n        #endregion\r\n    }\r\n\r\n    internal static class FormalTypeParamCompilerHelper\r\n    {\r\n        #region Analysis\r\n\r\n        public static void PreAnalyze(this FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, GenericParameter/*!*/ parameter)\r\n        {\r\n            node.NodeCompiler<IFormalTypeParamCompiler>().PreAnalyze(node, analyzer, parameter);\r\n        }\r\n\r\n        public static bool Merge(this FormalTypeParam/*!*/node, ErrorSink/*!*/ errors, FormalTypeParam/*!*/ other)\r\n        {\r\n            return node.NodeCompiler<IFormalTypeParamCompiler>().Merge(node, errors, other);\r\n        }\r\n\r\n        public static void AnalyzeMembers(this FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer, Scope referringScope)\r\n        {\r\n            node.NodeCompiler<IFormalTypeParamCompiler>().AnalyzeMembers(node, analyzer, referringScope);\r\n        }\r\n\r\n        public static void Analyze(this FormalTypeParam/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<IFormalTypeParamCompiler>().Analyze(node, analyzer);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Emission\r\n\r\n        public static void Emit(this FormalTypeParam/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<IFormalTypeParamCompiler>().Emit(node, codeGenerator);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IFieldDeclCompiler\r\n\r\n    internal interface IFieldDeclCompiler\r\n    {\r\n        void AnalyzeMember(FieldDecl/*!*/node, Analyzer/*!*/ analyzer, PhpField/*!*/ field);\r\n        void Analyze(FieldDecl/*!*/node, Analyzer/*!*/ analyzer);\r\n        void Emit(FieldDecl/*!*/node, CodeGenerator/*!*/ codeGenerator);\r\n        void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector);\r\n        void ApplyCustomAttribute(SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector);\r\n    }\r\n\r\n    internal static class FieldDeclCompilerHelper\r\n    {\r\n        public static void AnalyzeMember(this FieldDecl/*!*/node, Analyzer/*!*/ analyzer, PhpField/*!*/ field)\r\n        {\r\n            node.NodeCompiler<IFieldDeclCompiler>().AnalyzeMember(node, analyzer, field);\r\n        }\r\n        public static void Analyze(this FieldDecl/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            node.NodeCompiler<IFieldDeclCompiler>().Analyze(node, analyzer);\r\n        }\r\n        public static void Emit(this FieldDecl/*!*/node, CodeGenerator/*!*/ codeGenerator)\r\n        {\r\n            node.NodeCompiler<IFieldDeclCompiler>().Emit(node, codeGenerator);\r\n        }\r\n        public static void EmitCustomAttribute(this FieldDecl/*!*/node, CustomAttributeBuilder/*!*/ builder, CustomAttribute.TargetSelectors selector)\r\n        {\r\n            node.NodeCompiler<IFieldDeclCompiler>().EmitCustomAttribute(builder, selector);\r\n        }\r\n        public static void ApplyCustomAttribute(this FieldDecl/*!*/node, SpecialAttributes kind, Attribute attribute, CustomAttribute.TargetSelectors selector)\r\n        {\r\n            node.NodeCompiler<IFieldDeclCompiler>().ApplyCustomAttribute(kind, attribute, selector);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ITypeDeclCompiler\r\n\r\n    internal interface ITypeDeclCompiler : IStatementCompiler\r\n    {\r\n        PhpType Type { get; }\r\n    }\r\n\r\n    internal static class TypeDeclCompilerHelper\r\n    {\r\n        public static PhpType Type(this TypeDecl node)\r\n        {\r\n            return node.NodeCompiler<ITypeDeclCompiler>().Type;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/TypeRef.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region TypeRef\r\n\r\n        abstract class TypeRefCompiler<T> : ITypeRefCompiler, INodeCompiler where T : TypeRef\r\n        {\r\n            public abstract DType ResolvedType { get; }\r\n\r\n            /// <summary>\r\n            /// Resolves generic arguments.\r\n            /// </summary>\r\n            /// <returns><B>true</B> iff all arguments are resolvable to types or constructed types (none is variable).</returns>\r\n            internal virtual bool Analyze(T/*!*/node, Analyzer/*!*/ analyzer)\r\n            {\r\n                bool result = true;\r\n\r\n                foreach (TypeRef arg in node.GenericParams)\r\n                    result &= TypeRefHelper.Analyze(arg, analyzer);\r\n\r\n                return result;\r\n            }\r\n\r\n            internal abstract void EmitLoadTypeDesc(T node, CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags);\r\n\r\n            /// <summary>\r\n            /// Emits code that loads type descriptors for all generic arguments and a call to \r\n            /// <see cref=\"Operators.MakeGenericTypeInstantiation\"/>.\r\n            /// </summary>\r\n            internal void EmitMakeGenericInstantiation(TypeRef node, CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n            {\r\n                if (node.GenericParams == null || node.GenericParams.Count == 0)\r\n                    return;\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                il.EmitOverloadedArgs(Types.DTypeDesc[0], node.GenericParams.Count, Methods.Operators.MakeGenericTypeInstantiation.ExplicitOverloads, delegate(ILEmitter eil, int i)\r\n                {\r\n                    TypeRefHelper.EmitLoadTypeDesc(node.GenericParams[i], codeGenerator, flags);\r\n                });\r\n\r\n                if (node.GenericParams.Count > 0)\r\n                    il.Emit(OpCodes.Call, Methods.Operators.MakeGenericTypeInstantiation.Overload(node.GenericParams.Count));\r\n            }\r\n\r\n            #region ITypeRefCompiler\r\n\r\n            DType ITypeRefCompiler.ResolvedType\r\n            {\r\n                get { return this.ResolvedType; }\r\n            }\r\n\r\n            bool ITypeRefCompiler.Analyze(TypeRef node, Analyzer analyzer)\r\n            {\r\n                return this.Analyze((T)node, analyzer);\r\n            }\r\n\r\n            void ITypeRefCompiler.EmitLoadTypeDesc(TypeRef node, CodeGenerator codeGenerator, ResolveTypeFlags flags)\r\n            {\r\n                this.EmitLoadTypeDesc((T)node, codeGenerator, flags);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PrimitiveTypeRef\r\n\r\n        [NodeCompiler(typeof(PrimitiveTypeRef))]\r\n        sealed class PrimitiveTypeRefCompiler : TypeRefCompiler<PrimitiveTypeRef>\r\n        {\r\n            public override DType/*!*/ ResolvedType { get { return type; } }\r\n            private PrimitiveType/*!A*/ type;\r\n            public PrimitiveType/*!*/ Type { get { return type; } }\r\n\r\n            internal override bool Analyze(PrimitiveTypeRef node, Analyzer analyzer)\r\n            {\r\n                Debug.Assert(node.QualifiedName.IsPrimitiveTypeName);\r\n\r\n                type = PrimitiveType.GetByName(node.QualifiedName);\r\n\r\n                if (type == null)\r\n                    throw new InvalidOperationException();\r\n                \r\n                //\r\n                return true;\r\n            }\r\n\r\n            internal override void EmitLoadTypeDesc(PrimitiveTypeRef node, CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n            {\r\n                type.EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.SkipGenericNameParsing);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region DirectTypeRef\r\n\r\n        [NodeCompiler(typeof(DirectTypeRef))]\r\n        sealed class DirectTypeRefCompiler : TypeRefCompiler<DirectTypeRef>\r\n        {\r\n            public override DType ResolvedType { get { return resolvedType; } }\r\n            private DType/*!A*/ resolvedType;\r\n\r\n            #region Analysis\r\n\r\n            internal override bool Analyze(DirectTypeRef node, Analyzer analyzer)\r\n            {\r\n                resolvedType = analyzer.ResolveTypeName(node.ClassName, analyzer.CurrentType, analyzer.CurrentRoutine, node.Span, false);\r\n\r\n                // base call must follow the class name resolution:\r\n                bool args_static = base.Analyze(node, analyzer);\r\n\r\n                if (args_static)\r\n                {\r\n                    DTypeDesc[] resolved_arguments = DTypeDesc.EmptyArray;\r\n                    var genericParams = node.GenericParams;\r\n\r\n                    if (genericParams != null && genericParams.Count > 0)\r\n                    {\r\n                        resolved_arguments = new DTypeDesc[genericParams.Count];\r\n                        for (int i = 0; i < genericParams.Count; i++)\r\n                            resolved_arguments[i] = TypeRefHelper.ResolvedType(genericParams[i]).TypeDesc;\r\n                    }\r\n\r\n                    resolvedType = resolvedType.MakeConstructedType(analyzer, resolved_arguments, node.Span);\r\n                }\r\n\r\n                return args_static;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            internal override void EmitLoadTypeDesc(DirectTypeRef node, CodeGenerator codeGenerator, ResolveTypeFlags flags)\r\n            {\r\n                Debug.Assert(resolvedType != null);\r\n\r\n                // disallow generic parameters on generic type which already has generic arguments:\r\n                resolvedType.EmitLoadTypeDesc(codeGenerator, flags |\r\n                          ((node.GenericParams.Count > 0) ? ResolveTypeFlags.SkipGenericNameParsing : 0));\r\n\r\n                // constructed type already emited its generic parameters:\r\n                if (!(resolvedType is ConstructedType))\r\n                    EmitMakeGenericInstantiation(node, codeGenerator, flags);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IndirectTypeRef\r\n\r\n        [NodeCompiler(typeof(IndirectTypeRef), Singleton = true)]\r\n        sealed class IndirectTypeRefCompiler : TypeRefCompiler<IndirectTypeRef>\r\n        {\r\n            public override DType ResolvedType { get { return null; } }\r\n\r\n            #region Analysis\r\n\r\n            internal override bool Analyze(IndirectTypeRef node, Analyzer analyzer)\r\n            {\r\n                node.ClassNameVar.Analyze(analyzer, ExInfoFromParent.DefaultExInfo);\r\n\r\n                // base call must follow the class name resolve:\r\n                base.Analyze(node, analyzer);\r\n\r\n                // indirect:\r\n                return false;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Emission\r\n\r\n            internal override void EmitLoadTypeDesc(IndirectTypeRef node, CodeGenerator codeGenerator, ResolveTypeFlags flags)\r\n            {\r\n                // disallow generic parameters on generic type which already has generic arguments:\r\n                codeGenerator.EmitLoadTypeDescOperator(null, node.ClassNameVar, flags |\r\n                    ((node.GenericParams.Count > 0) ? ResolveTypeFlags.SkipGenericNameParsing : 0));\r\n\r\n                EmitMakeGenericInstantiation(node, codeGenerator, flags);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region ITypeRefCompiler\r\n\r\n    internal static class TypeRefHelper\r\n    {\r\n        public static DType ResolvedType(this TypeRef/*!*/node)\r\n        {\r\n            var nodecompiler = node.NodeCompiler<ITypeRefCompiler>();\r\n            return nodecompiler.ResolvedType;\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"ResolvedType\"/> or new instance of <see cref=\"UnknownType\"/> if the type was not resolved.\r\n        /// </summary>\r\n        public static DType/*!A*/ResolvedTypeOrUnknown(this TypeRef/*!*/node)\r\n        {\r\n            return ResolvedType(node) ?? new UnknownType(string.Empty, node);\r\n        }\r\n\r\n        public static bool Analyze(this TypeRef/*!*/node, Analyzer/*!*/ analyzer)\r\n        {\r\n            var nodecompiler = node.NodeCompiler<ITypeRefCompiler>();\r\n            return nodecompiler.Analyze(node, analyzer);\r\n        }\r\n\r\n        public static void EmitLoadTypeDesc(this TypeRef/*!*/node, CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n        {\r\n            var nodecompiler = node.NodeCompiler<ITypeRefCompiler>();\r\n            nodecompiler.EmitLoadTypeDesc(node, codeGenerator, flags);\r\n        }\r\n    }\r\n\r\n    internal interface ITypeRefCompiler\r\n    {\r\n        DType ResolvedType { get; }\r\n        bool Analyze(TypeRef/*!*/node, Analyzer/*!*/ analyzer);\r\n        void EmitLoadTypeDesc(TypeRef/*!*/node, CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags);\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/UnaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 20013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(UnaryEx))]\r\n        sealed class UnaryExCompiler : ExpressionCompiler<UnaryEx>\r\n        {\r\n            #region Analysis\r\n\r\n            public override Evaluation EvaluatePriorAnalysis(UnaryEx node, CompilationSourceUnit sourceUnit)\r\n            {\r\n                return node.Expr.EvaluatePriorAnalysis(sourceUnit).ReadOnlyEvaluate(node);\r\n            }\r\n\r\n            public override Evaluation Analyze(UnaryEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                access = info.Access;\r\n\r\n                Evaluation result;\r\n\r\n                switch (node.Operation)\r\n                {\r\n                    case Operations.Print:\r\n                    case Operations.Clone:\r\n                    case Operations.ObjectCast:\r\n                    case Operations.ArrayCast:\r\n                        node.Expr = node.Expr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n                        result = new Evaluation(node);\r\n                        break;\r\n\r\n                    default:\r\n                        Expression tmp;\r\n                        result = node.Expr.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Evaluate(node, out tmp);\r\n                        node.Expr = tmp;\r\n                        break;\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            public override object Evaluate(UnaryEx node, object value)\r\n            {\r\n                switch (node.Operation)\r\n                {\r\n                    case Operations.Plus:\r\n                        return Operators.Plus(value);\r\n\r\n                    case Operations.Minus:\r\n                        return Operators.Minus(value);\r\n\r\n                    case Operations.LogicNegation:\r\n                        return !Convert.ObjectToBoolean(value);\r\n\r\n                    case Operations.BitNegation:\r\n                        return Operators.BitNot(value); // allows to return PhpBytes\r\n\r\n                    case Operations.FloatCast:\r\n                    case Operations.DoubleCast:\r\n                        return Convert.ObjectToDouble(value);\r\n\r\n                    case Operations.StringCast:\r\n                    case Operations.UnicodeCast: // TODO\r\n                        return Convert.ObjectToString(value);\r\n\r\n                    case Operations.BinaryCast:\r\n                        return Convert.ObjectToPhpBytes(value);\r\n\r\n                    case Operations.BoolCast:\r\n                        return Convert.ObjectToBoolean(value);\r\n\r\n                    case Operations.AtSign:\r\n                        return (value is bool) ? (bool)value : value;\r\n\r\n                    case Operations.UnsetCast:\r\n                        return null;\r\n\r\n                    case Operations.Int32Cast:\r\n                        return Convert.ObjectToInteger(value);\r\n\r\n                    case Operations.Int8Cast:\r\n                    case Operations.Int16Cast:\r\n                    case Operations.Int64Cast:\r\n                    case Operations.UInt8Cast:\r\n                    case Operations.UInt16Cast:\r\n                    case Operations.UInt32Cast:\r\n                    case Operations.UInt64Cast:\r\n                    case Operations.DecimalCast:\r\n                        Debug.Fail(\"not supported yet\");\r\n                        throw null;\r\n\r\n                    default:\r\n                        Debug.Fail(\"Operation \" + node.Operation + \" shouldn't be evaluated\");\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            public override bool IsDeeplyCopied(UnaryEx node, CopyReason reason, int nestingLevel)\r\n            {\r\n                switch (node.Operation)\r\n                {\r\n                    // respective operators returns immutable values:\r\n                    case Operations.Plus:\r\n                    case Operations.Minus:\r\n                    case Operations.LogicNegation:\r\n                    case Operations.BitNegation:\r\n\r\n                    case Operations.Int8Cast:\r\n                    case Operations.Int16Cast:\r\n                    case Operations.Int32Cast:\r\n                    case Operations.Int64Cast:\r\n                    case Operations.UInt8Cast:\r\n                    case Operations.UInt16Cast:\r\n                    case Operations.UInt32Cast:\r\n                    case Operations.UInt64Cast:\r\n                    case Operations.DecimalCast:\r\n                    case Operations.DoubleCast:\r\n                    case Operations.FloatCast:\r\n                    case Operations.StringCast:\r\n                    case Operations.UnicodeCast:\r\n                    case Operations.BoolCast:\r\n                    case Operations.UnsetCast:\r\n\r\n                    case Operations.Clone:\r\n                    case Operations.Print:\r\n                        return false;\r\n\r\n                    // respective operators don't do a deep copy:\r\n                    case Operations.ObjectCast:\r\n                    case Operations.ArrayCast:\r\n                    case Operations.BinaryCast:\r\n                        return true;\r\n\r\n                    // the result depends on what follows @:\r\n                    case Operations.AtSign:\r\n                        return node.Expr.IsDeeplyCopied(reason, nestingLevel);\r\n\r\n                    default:\r\n                        throw null;\r\n                }\r\n            }\r\n\r\n            public override PhpTypeCode Emit(UnaryEx node, CodeGenerator codeGenerator)\r\n            {\r\n                Debug.Assert(access == AccessType.Read || access == AccessType.None);\r\n                Statistics.AST.AddNode(\"UnaryEx\");\r\n\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                PhpTypeCode returned_typecode, o_typecode;\r\n\r\n                switch (node.Operation)\r\n                {\r\n                    case Operations.AtSign:\t// special arrangement\r\n                        // Template:\r\n                        //\t\tcontext.DisableErrorReporting();\r\n                        //\t\ts;\r\n                        //\t\tcontext.EnableErrorReporting();\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, Methods.ScriptContext.DisableErrorReporting);\r\n                        returned_typecode = node.Expr.Emit(codeGenerator);\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, Methods.ScriptContext.EnableErrorReporting);\r\n                        break;\r\n\r\n                    case Operations.BitNegation:\r\n                        //Template: \"~x\" Operators.BitNot(x)                                     \r\n                        codeGenerator.EmitBoxing(node.Expr.Emit(codeGenerator));\r\n                        il.Emit(OpCodes.Call, Methods.Operators.BitNot);\r\n                        returned_typecode = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case Operations.Clone:\r\n                        // Template: clone x        Operators.Clone(x,DTypeDesc,ScriptContext)\r\n                        codeGenerator.EmitBoxing(node.Expr.Emit(codeGenerator));\r\n                        codeGenerator.EmitLoadClassContext();\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, Methods.Operators.Clone);\r\n                        returned_typecode = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case Operations.LogicNegation:\r\n                        //Template: \"!x\"  !Convert.ObjectToBoolean(x);                              \r\n                        codeGenerator.EmitObjectToBoolean(node.Expr, true);\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.Minus:\r\n                        //Template: \"-x\"  Operators.Minus(x)\r\n                        switch (o_typecode = node.Expr.Emit(codeGenerator))\r\n                        {\r\n                            case PhpTypeCode.Double:\r\n                                il.Emit(OpCodes.Neg);\r\n                                returned_typecode = PhpTypeCode.Double;\r\n                                break;\r\n                            default:\r\n                                codeGenerator.EmitBoxing(o_typecode);\r\n                                returned_typecode = codeGenerator.EmitMethodCall(Methods.Operators.Minus);\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.ObjectCast:\r\n                        //Template: \"(object)x\"   Convert.ObjectToDObject(x,ScriptContext)\r\n                        codeGenerator.EmitBoxing(node.Expr.Emit(codeGenerator));\r\n                        codeGenerator.EmitLoadScriptContext();\r\n                        il.Emit(OpCodes.Call, Methods.Convert.ObjectToDObject);\r\n                        returned_typecode = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case Operations.Plus:\r\n                        //Template: \"+x\"  Operators.Plus(x)\r\n                        codeGenerator.EmitBoxing(node.Expr.Emit(codeGenerator));\r\n                        il.Emit(OpCodes.Call, Methods.Operators.Plus);\r\n                        returned_typecode = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    case Operations.Print:\r\n                        codeGenerator.EmitEcho(node.Expr);\r\n                        // Always returns 1\r\n                        il.Emit(OpCodes.Ldc_I4_1);\r\n                        returned_typecode = PhpTypeCode.Integer;\r\n                        break;\r\n\r\n                    case Operations.BoolCast:\r\n                        //Template: \"(bool)x\"     Convert.ObjectToBoolean(x)\r\n                        codeGenerator.EmitObjectToBoolean(node.Expr, false);\r\n                        returned_typecode = PhpTypeCode.Boolean;\r\n                        break;\r\n\r\n                    case Operations.Int8Cast:\r\n                    case Operations.Int16Cast:\r\n                    case Operations.Int32Cast:\r\n                    case Operations.UInt8Cast:\r\n                    case Operations.UInt16Cast:\r\n                        // CALL int Convert.ObjectToInteger(<node.Expr>)\r\n                        o_typecode = node.Expr.Emit(codeGenerator);\r\n                        if (o_typecode != PhpTypeCode.Integer)\r\n                        {\r\n                            codeGenerator.EmitBoxing(o_typecode);\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToInteger);\r\n                        }\r\n\r\n                        // CONV for unsigned:\r\n                        switch (node.Operation)\r\n                        {\r\n                            case Operations.UInt8Cast: il.Emit(OpCodes.Conv_U1); il.Emit(OpCodes.Conv_I4); break;\r\n                            case Operations.UInt16Cast: il.Emit(OpCodes.Conv_U2); il.Emit(OpCodes.Conv_I4); break;\r\n                        }\r\n\r\n                        returned_typecode = PhpTypeCode.Integer;\r\n                        break;\r\n\r\n                    case Operations.UInt64Cast:\r\n                    case Operations.UInt32Cast:\r\n                    case Operations.Int64Cast:\r\n                        // CALL long Convert.ObjectToLongInteger(<node.Expr>)\r\n                        o_typecode = node.Expr.Emit(codeGenerator);\r\n                        if (o_typecode != PhpTypeCode.LongInteger)\r\n                        {\r\n                            codeGenerator.EmitBoxing(o_typecode);\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToLongInteger);\r\n                        }\r\n\r\n                        // CONV for unsigned:\r\n                        switch (node.Operation)\r\n                        {\r\n                            case Operations.UInt32Cast: il.Emit(OpCodes.Conv_U4); il.Emit(OpCodes.Conv_I8); break;\r\n                            case Operations.UInt64Cast: il.Emit(OpCodes.Conv_U8); il.Emit(OpCodes.Conv_I8); break;\r\n                        }\r\n\r\n                        returned_typecode = PhpTypeCode.LongInteger;\r\n                        break;\r\n\r\n                    case Operations.DecimalCast:\r\n                    case Operations.DoubleCast:\r\n                    case Operations.FloatCast:\r\n                        // CALL double Convert.ObjectToDouble(<node.Expr>)\r\n                        o_typecode = node.Expr.Emit(codeGenerator);\r\n                        if (o_typecode != PhpTypeCode.Double)\r\n                        {\r\n                            codeGenerator.EmitBoxing(o_typecode);\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToDouble);\r\n                        }\r\n                        returned_typecode = PhpTypeCode.Double;\r\n                        break;\r\n\r\n                    case Operations.UnicodeCast: // TODO\r\n                    case Operations.StringCast:\r\n                        if ((returned_typecode = node.Expr.Emit(codeGenerator)) != PhpTypeCode.String)\r\n                        {\r\n                            codeGenerator.EmitBoxing(returned_typecode);\r\n                            //codeGenerator.EmitLoadClassContext();\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToString);\r\n                            returned_typecode = PhpTypeCode.String;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.BinaryCast:\r\n                        if ((returned_typecode = node.Expr.Emit(codeGenerator)) != PhpTypeCode.PhpBytes)\r\n                        {\r\n                            codeGenerator.EmitBoxing(returned_typecode);\r\n                            //codeGenerator.EmitLoadClassContext();\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToPhpBytes);\r\n                            returned_typecode = PhpTypeCode.PhpBytes;\r\n                        }\r\n                        break;\r\n\r\n                    case Operations.ArrayCast:\r\n                        //Template: \"(array)x\"   Convert.ObjectToArray(x)\r\n                        o_typecode = node.Expr.Emit(codeGenerator);\r\n                        if (o_typecode != PhpTypeCode.PhpArray)\r\n                        {\r\n                            codeGenerator.EmitBoxing(o_typecode);\r\n                            il.Emit(OpCodes.Call, Methods.Convert.ObjectToPhpArray);\r\n                        }\r\n                        returned_typecode = PhpTypeCode.PhpArray;\r\n                        break;\r\n\r\n                    case Operations.UnsetCast:\r\n                        // Template: \"(unset)x\"  null\r\n                        il.Emit(OpCodes.Ldnull);\r\n                        returned_typecode = PhpTypeCode.Object;\r\n                        break;\r\n\r\n                    default:\r\n                        Debug.Assert(false, \"illegal type of operation!\");\r\n                        returned_typecode = PhpTypeCode.Void;\r\n                        break;\r\n                }\r\n\r\n                switch (access)\r\n                {\r\n                    case AccessType.Read:\r\n                        // do nothing\r\n                        break;\r\n                    case AccessType.None:\r\n                        // pop operation's result value from stack\r\n                        if (returned_typecode != PhpTypeCode.Void)\r\n                            il.Emit(OpCodes.Pop);\r\n                        return PhpTypeCode.Void;\r\n                }\r\n\r\n                return returned_typecode;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/AST/VariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        #region VariableUse\r\n\r\n        /// <summary>\r\n        /// Base class for variable uses.\r\n        /// </summary>\r\n        abstract class VariableUseCompiler<T> : VarLikeConstructUseCompiler<T>, IVariableUseCompiler where T : VariableUse\r\n        {\r\n            internal abstract PhpTypeCode EmitAssign(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract PhpTypeCode EmitIsset(T/*!*/node, CodeGenerator codeGenerator, bool empty);\r\n            internal abstract void EmitUnset(T/*!*/node, CodeGenerator codeGenerator);\r\n\r\n            #region IVariableUseCompiler Members\r\n\r\n            PhpTypeCode IVariableUseCompiler.EmitAssign(VariableUse node, CodeGenerator codeGenerator)\r\n            {\r\n                return EmitAssign((T)node, codeGenerator);\r\n            }\r\n\r\n            PhpTypeCode IVariableUseCompiler.EmitIsset(VariableUse node, CodeGenerator codeGenerator, bool empty)\r\n            {\r\n                return EmitIsset((T)node, codeGenerator, empty);\r\n            }\r\n\r\n            void IVariableUseCompiler.EmitUnset(VariableUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitUnset((T)node, codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        // possible access values for all VariableUse subclasses: \r\n        // Read, Write, ReadRef, ReadUnknown, WriteRef, None\r\n\r\n        #region CompoundVarUse\r\n\r\n        abstract class CompoundVarUseCompiler<T> : VariableUseCompiler<T> where T : CompoundVarUse\r\n        {\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SimpleVarUse\r\n\r\n        abstract class SimpleVarUseCompiler<T> : CompoundVarUseCompiler<T>, ISimpleVarUseCompiler where T : SimpleVarUse\r\n        {\r\n            /// <summary>\r\n            /// Points to a method that emits code to be placed after the new instance field value has\r\n            /// been loaded onto the evaluation stack.\r\n            /// </summary>\r\n            internal AssignmentCallback assignmentCallback;\r\n\r\n            /// <summary>\r\n            /// A holder of a temporary local variable which is used to obtain address of a variable\r\n            /// stored in runtime variables table when methods from <see cref=\"PHP.Core.Operators\"/>\r\n            /// expecting a ref argument are invoked.\r\n            /// </summary>\r\n            /// <remarks>After the operator is invoked, the result should be stored back to table and this\r\n            /// holder may be released. This holder does not take place in optimalized user functions and methods of\r\n            /// user classes as the address of a variable shoul be obtained directly (variables are defined as\r\n            /// locals).</remarks>\r\n            protected LocalBuilder TabledLocalAddressStorage;\r\n\r\n            internal abstract void EmitName(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract PhpTypeCode EmitLoad(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitLoadAddress(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitLoadAddress_StoreBack(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitLoadAddress_StoreBack(T/*!*/node, CodeGenerator codeGenerator, bool duplicate_value);\r\n            internal abstract void EmitLoadRef(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitStorePrepare(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitStoreAssign(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitStoreRefPrepare(T/*!*/node, CodeGenerator codeGenerator);\r\n            internal abstract void EmitStoreRefAssign(T/*!*/node, CodeGenerator codeGenerator);\r\n\r\n            /// <summary>\r\n            /// Loads the value represented by this object from the runtime variables table,\r\n            /// stores it to a local variable and loads the address of this local.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <remarks>This method is used only in non-optimized user functions and global code.\r\n            /// Specified local variable is obtained from current <see cref=\"ILEmitter\"/> by\r\n            /// <see cref=\"ILEmitter.GetTemporaryLocal\"/> and stored to <see cref=\"TabledLocalAddressStorage\"/>\r\n            /// for later use. Once the local become useless, <see cref=\"ILEmitter.ReturnTemporaryLocal\"/>\r\n            /// should be called.\r\n            /// </remarks>\r\n            /// <param name=\"codeGenerator\">Currently used <see cref=\"CodeGenerator\"/>.</param>\r\n            internal virtual void LoadTabledVariableAddress(T/*!*/node, CodeGenerator codeGenerator)\r\n            {\r\n                // This function should be call only once on every SimpleVarUse object\r\n                // TODO: ASSERTION FAILS (e.g. PhpMyAdmin, common.lib.php)\r\n                // Debug.Assert(this.TabledLocalAddressStorage == null);\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // Load the value represented by this node from the runtime variables table\r\n\r\n                // LOAD Operators.GetVariableUnchecked(<script context>, <local variables table>, <variable name>);\r\n                codeGenerator.EmitLoadScriptContext();\r\n                codeGenerator.EmitLoadRTVariablesTable();\r\n                EmitName(node, codeGenerator);\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.GetVariableUnchecked);\r\n\r\n                // Get local from ILEmitter\r\n                this.TabledLocalAddressStorage = il.GetTemporaryLocal(Types.Object[0]);\r\n                // Store the value\r\n                il.Stloc(this.TabledLocalAddressStorage);\r\n                // Load the address\r\n                il.Ldloca(this.TabledLocalAddressStorage);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stores the value represented by <see cref=\"TabledLocalAddressStorage\"/> to the runtime variables table and \r\n            /// returns the <see cref=\"TabledLocalAddressStorage\"/> back to <c>temporaryLocals</c>.\r\n            /// Duplicates the value if requested.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">Currently used <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"duplicate_value\">If <c>true</c>, the value of specified local is left on the evaluation stack.\r\n            /// </param>\r\n            internal virtual void StoreTabledVariableBack(T/*!*/node, CodeGenerator codeGenerator, bool duplicate_value)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // CALL Operators.SetVariable(<local variables table>,<name>,<TabledLocalAddressStorage>);\r\n                codeGenerator.EmitLoadScriptContext();\r\n                codeGenerator.EmitLoadRTVariablesTable();\r\n                EmitName(node, codeGenerator);\r\n                il.Ldloc(TabledLocalAddressStorage);\r\n                il.Emit(OpCodes.Call, Methods.Operators.SetVariable);\r\n\r\n                // If requested, load the changed value on the evaluation stack\r\n                if (duplicate_value)\r\n                    il.Ldloc(this.TabledLocalAddressStorage);\r\n\r\n                // Release temporary local\r\n                il.ReturnTemporaryLocal(this.TabledLocalAddressStorage);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that read the value of an instance field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"wantRef\">If <B>false</B> the field value should be left on the evaluation stack,\r\n            /// if <B>true</B> the <see cref=\"PhpReference\"/> should be left on the evaluation stack.</param>\r\n            /// <returns>\r\n            /// Nothing is expected on the evaluation stack. A <see cref=\"PhpReference\"/> (if <paramref name=\"wantRef\"/>\r\n            /// is <B>true</B>) or the field value itself (if <paramref name=\"wantRef\"/> is <B>false</B>) is left on the\r\n            /// evaluation stack.\r\n            /// </returns>\r\n            internal virtual PhpTypeCode EmitReadField(T/*!*/node, CodeGenerator codeGenerator, bool wantRef)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                DirectVarUse direct_instance = node.IsMemberOf as DirectVarUse;\r\n                if (direct_instance != null && direct_instance.IsMemberOf == null && direct_instance.VarName.IsThisVariableName)\r\n                {\r\n                    return EmitReadFieldOfThis(node, codeGenerator, wantRef);\r\n                }\r\n\r\n\r\n                if (!wantRef)\r\n                {\r\n                    //codeGenerator.ChainBuilder.Lengthen();\r\n                    //PhpTypeCode type_code = isMemberOf.Emit(codeGenerator);\r\n                    //Debug.Assert(type_code == PhpTypeCode.Object || type_code == PhpTypeCode.DObject);\r\n\r\n                    //// CALL Operators.GetProperty(STACK,<field name>,<type desc>,<quiet>);\r\n                    //EmitName(codeGenerator);\r\n                    //codeGenerator.EmitLoadClassContext();\r\n                    //il.LoadBool(codeGenerator.ChainBuilder.QuietRead);\r\n                    //il.Emit(OpCodes.Call, Methods.Operators.GetProperty);\r\n                    //return PhpTypeCode.Object;\r\n\r\n                    string fieldName = (node is DirectVarUse) ? (node as DirectVarUse).VarName.Value : null;\r\n                    Expression fieldNameExpr = (node is IndirectVarUse) ? (node as IndirectVarUse).VarNameEx : null;\r\n                    bool quietRead = wantRef ? false : codeGenerator.ChainBuilder.QuietRead;\r\n                    return codeGenerator.CallSitesBuilder.EmitGetProperty(\r\n                        codeGenerator, wantRef,\r\n                        node.IsMemberOf, null, null,\r\n                        null,\r\n                        fieldName, fieldNameExpr,\r\n                        quietRead);\r\n                }\r\n\r\n                // call GetProperty/GetObjectPropertyRef\r\n                codeGenerator.ChainBuilder.Lengthen();\r\n                // loads the variable which field is gotten:\r\n                PhpTypeCode var_type_code = node.IsMemberOf.Emit(codeGenerator);\r\n\r\n                if (codeGenerator.ChainBuilder.Exists)\r\n                {\r\n                    Debug.Assert(var_type_code == PhpTypeCode.DObject);\r\n\r\n                    // CALL Operators.GetObjectPropertyRef(STACK,<field name>,<type desc>);\r\n                    EmitName(node, codeGenerator);\r\n                    codeGenerator.EmitLoadClassContext();\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetObjectPropertyRef);\r\n                }\r\n                else\r\n                {\r\n                    Debug.Assert(var_type_code == PhpTypeCode.ObjectAddress);\r\n\r\n                    // CALL Operators.GetPropertyRef(ref STACK,<field name>,<type desc>,<script context>);\r\n                    EmitName(node, codeGenerator);\r\n                    codeGenerator.EmitLoadClassContext();\r\n                    codeGenerator.EmitLoadScriptContext();\r\n                    il.Emit(OpCodes.Call, Methods.Operators.GetPropertyRef);\r\n\r\n                    // stores the value of variable back:\r\n                    SimpleVarUse simple_var = node.IsMemberOf as SimpleVarUse;\r\n                    if (simple_var != null)\r\n                        simple_var.EmitLoadAddress_StoreBack(codeGenerator);\r\n                }\r\n\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that read the value of a field of $this instance.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"wantRef\">If <B>false</B> the field value should be left on the evaluation stack,\r\n            /// if <B>true</B> the <see cref=\"PhpReference\"/> should be left on the evaluation stack.</param>\r\n            /// <returns></returns>\r\n            private PhpTypeCode EmitReadFieldOfThis(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool wantRef)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // $this->a\r\n                switch (codeGenerator.LocationStack.LocationType)\r\n                {\r\n                    case LocationTypes.GlobalCode:\r\n                        {\r\n                            // load $this from one of Main's arguments and check for null\r\n                            Label this_non_null = il.DefineLabel();\r\n                            Label reading_over = il.DefineLabel();\r\n\r\n                            codeGenerator.EmitLoadSelf();\r\n                            il.Emit(OpCodes.Brtrue_S, this_non_null);\r\n                            EmitThisUsedOutOfObjectThrow(codeGenerator, wantRef);\r\n                            il.Emit(OpCodes.Br, reading_over);\r\n                            il.MarkLabel(this_non_null, true);\r\n\r\n                            // call GetObjectProperty/GetObjectPropertyRef\r\n                            EmitGetFieldOfPlace(node, codeGenerator.SelfPlace, codeGenerator, wantRef);\r\n\r\n                            il.MarkLabel(reading_over, true);\r\n\r\n                            break;\r\n                        }\r\n\r\n                    case LocationTypes.FunctionDecl:\r\n                        {\r\n                            EmitThisUsedOutOfObjectThrow(codeGenerator, wantRef);\r\n                            break;\r\n                        }\r\n\r\n                    case LocationTypes.MethodDecl:\r\n                        {\r\n                            CompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                            if (context.Method.IsStatic)\r\n                            {\r\n                                EmitThisUsedOutOfObjectThrow(codeGenerator, wantRef);\r\n                                break;\r\n                            }\r\n\r\n                            // attempt direct field reading (DirectVarUse only)\r\n                            return EmitReadFieldOfThisInInstanceMethod(node, codeGenerator, wantRef);\r\n                        }\r\n                }\r\n\r\n                return wantRef ? PhpTypeCode.PhpReference : PhpTypeCode.Object;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that read the value of a field of $this instance when we know that we\r\n            /// are in an instance method and hence there's a chance of actually resolving the field being read.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"wantRef\">If <B>false</B> the field value should be left on the evaluation stack,\r\n            /// if <B>true</B> the <see cref=\"PhpReference\"/> should be left on the evaluation stack.</param>\r\n            internal virtual PhpTypeCode EmitReadFieldOfThisInInstanceMethod(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool wantRef)\r\n            {\r\n                // the override in DirectVarUse is a bit more sophisticated ;)\r\n                return EmitGetFieldOfPlace(node, codeGenerator.SelfPlace, codeGenerator, wantRef);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits error reporting call when \"this\" variable is used out of object context.\r\n            /// </summary>\r\n            private static void EmitThisUsedOutOfObjectThrow(CodeGenerator/*!*/ codeGenerator, bool wantRef)\r\n            {\r\n                codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                if (wantRef)\r\n                    codeGenerator.IL.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n                else\r\n                    codeGenerator.IL.Emit(OpCodes.Ldnull);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits <see cref=\"Operators.GetObjectProperty\"/> or <see cref=\"Operators.GetObjectPropertyRef\"/>\r\n            /// on a specified argument variable.\r\n            /// </summary>\r\n            private PhpTypeCode EmitGetFieldOfPlace(T/*!*/node, IPlace/*!*/ arg, CodeGenerator/*!*/ codeGenerator, bool wantRef)\r\n            {\r\n                //ILEmitter il = codeGenerator.IL;\r\n\r\n                //arg.EmitLoad(il);\r\n                //EmitName(codeGenerator);\r\n                //codeGenerator.EmitLoadClassContext();\r\n\r\n                //if (wantRef)\r\n                //{\r\n                //    il.Emit(OpCodes.Call, Methods.Operators.GetObjectPropertyRef);\r\n                //    return PhpTypeCode.PhpReference;\r\n                //}\r\n                //else\r\n                //{\r\n                //    il.LoadBool(codeGenerator.ChainBuilder.QuietRead);\r\n                //    il.Emit(OpCodes.Call, Methods.Operators.GetObjectProperty);\r\n                //    return PhpTypeCode.Object;\r\n                //}\r\n\r\n                string fieldName = (node is DirectVarUse) ? (node as DirectVarUse).VarName.Value : null;\r\n                Expression fieldNameExpr = (node is IndirectVarUse) ? (node as IndirectVarUse).VarNameEx : null;\r\n                bool quietRead = wantRef ? false : codeGenerator.ChainBuilder.QuietRead;\r\n\r\n                return codeGenerator.CallSitesBuilder.EmitGetProperty(\r\n                    codeGenerator, wantRef,\r\n                    null, arg, null,\r\n                    null,\r\n                    fieldName, fieldNameExpr,\r\n                    quietRead);\r\n            }\r\n\r\n            private static void EmitCallSetObjectField(CodeGenerator/*!*/ codeGenerator, PhpTypeCode stackTypeCode)\r\n            {\r\n                // CALL Operators.SetObjectProperty(<STACK:instance>,<STACK:field name>,<STACK:field value>, <type desc>)\r\n                codeGenerator.EmitLoadClassContext();\r\n\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.SetObjectProperty);\r\n\r\n                //always when function with void return argument is called it's necesarry to add nop instruction due to debugger\r\n                if (codeGenerator.Context.Config.Compiler.Debug)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Nop);\r\n                }\r\n            }\r\n\r\n            private static void EmitPopValue(CodeGenerator/*!*/ codeGenerator, PhpTypeCode stackTypeCode)\r\n            {\r\n                // just pop the value that was meant to be written\r\n                codeGenerator.IL.Emit(OpCodes.Pop);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that write a value to an instance field.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"writeRef\">If <B>true</B> the value being written is a <see cref=\"PhpReference\"/>\r\n            /// instance, if <B>false</B> it is an <see cref=\"Object\"/> instance.</param>\r\n            /// <returns>Delegate to a method that emits code to be executed when the actual value has been\r\n            /// loaded on the evaluation stack.</returns>\r\n            /// <remarks>\r\n            /// If the field could be resolved at compile time (because <see cref=\"VarLikeConstructUse.IsMemberOf\"/> is <c>$this</c> or a\r\n            /// variable is proved to be of a certain type by type analysis), direct field writing code is emitted.\r\n            /// Otherwise, <see cref=\"Operators.SetProperty\"/> or <see cref=\"Operators.SetObjectProperty\"/> call is emitted.\r\n            /// </remarks>\r\n            internal virtual AssignmentCallback EmitWriteField(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool writeRef)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                DirectVarUse direct_instance = node.IsMemberOf as DirectVarUse;\r\n                if (direct_instance != null && direct_instance.IsMemberOf == null && direct_instance.VarName.IsThisVariableName)\r\n                {\r\n                    return EmitWriteFieldOfThis(node, codeGenerator, writeRef);\r\n                }\r\n\r\n                if (node.IsMemberOf is ItemUse || node.IsMemberOf is StaticFieldUse || node.IsMemberOf.IsMemberOf != null)\r\n                {\r\n                    // we are part of a chain\r\n                    // Lengthen for hop over ->\r\n                    codeGenerator.ChainBuilder.Lengthen();\r\n                    FunctionCall funcCall = node.IsMemberOf as FunctionCall;\r\n                    if (funcCall == null)\r\n                    {\r\n                        node.IsMemberOf.Emit(codeGenerator);\r\n                        EmitName(node, codeGenerator);\r\n                    }\r\n                    else\r\n                    {\r\n                        codeGenerator.ChainBuilder.LoadAddressOfFunctionReturnValue = true;\r\n                        node.IsMemberOf.Emit(codeGenerator);\r\n                        codeGenerator.ChainBuilder.RecastValueReturnedByFunctionCall();\r\n\r\n                        EmitName(node, codeGenerator);\r\n                    }\r\n                    return new AssignmentCallback(EmitCallSetObjectField);\r\n                }\r\n                else\r\n                {\r\n                    return delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n                    {\r\n                        codeGen.ChainBuilder.Lengthen();\r\n\r\n                        // CALL Operators.SetProperty(STACK,ref <instance>,<field name>,<handle>,<script context>);\r\n                        node.IsMemberOf.Emit(codeGen);\r\n                        EmitName(node, codeGen);\r\n                        codeGen.EmitLoadClassContext();\r\n                        codeGen.EmitLoadScriptContext();\r\n\r\n                        // invoke the operator\r\n                        codeGen.IL.Emit(OpCodes.Call, Methods.Operators.SetProperty);\r\n                    };\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that prepare a field of $this for writing.\r\n            /// </summary>\r\n            private AssignmentCallback EmitWriteFieldOfThis(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool writeRef)\r\n            {\r\n                ILEmitter il = codeGenerator.IL;\r\n\r\n                // $this->a\r\n                switch (codeGenerator.LocationStack.LocationType)\r\n                {\r\n                    case LocationTypes.GlobalCode:\r\n                        {\r\n                            // load $this from one of Main's arguments and check for null\r\n                            Label this_non_null = il.DefineLabel();\r\n\r\n                            codeGenerator.EmitLoadSelf();\r\n                            il.Emit(OpCodes.Brtrue_S, this_non_null);\r\n                            codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                            il.Emit(OpCodes.Br, codeGenerator.ChainBuilder.ErrorLabel);\r\n                            il.MarkLabel(this_non_null, true);\r\n\r\n                            // prepare the stack for SetObjectProperty call\r\n                            codeGenerator.EmitLoadSelf();\r\n                            EmitName(node, codeGenerator);\r\n\r\n                            return new AssignmentCallback(EmitCallSetObjectField);\r\n                        }\r\n\r\n                    case LocationTypes.FunctionDecl:\r\n                        {\r\n                            // always throws error\r\n                            codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                            return new AssignmentCallback(EmitPopValue);\r\n                        }\r\n\r\n                    case LocationTypes.MethodDecl:\r\n                        {\r\n                            CompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n                            if (context.Method.IsStatic)\r\n                            {\r\n                                // always throws error\r\n                                codeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n                                return new AssignmentCallback(EmitPopValue);\r\n                            }\r\n\r\n                            // attempt direct field writing (DirectVarUse only)\r\n                            return EmitWriteFieldOfThisInInstanceMethod(node, codeGenerator, writeRef);\r\n                        }\r\n                }\r\n\r\n                Debug.Fail(\"Invalid lcoation type.\");\r\n                return null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Emits IL instructions that write the value of a field of $this instance when we know that we\r\n            /// are in an instance method and hence there's a chance of actually resolving the field being written.\r\n            /// </summary>\r\n            /// <param name=\"node\">Instance.</param>\r\n            /// <param name=\"codeGenerator\">The current <see cref=\"CodeGenerator\"/>.</param>\r\n            /// <param name=\"writeRef\">If <B>true</B> the value being written is a <see cref=\"PhpReference\"/>; if\r\n            /// <B>false</B> the value being written is an <see cref=\"Object\"/>.</param>\r\n            /// <returns></returns>\r\n            internal virtual AssignmentCallback EmitWriteFieldOfThisInInstanceMethod(T/*!*/node, CodeGenerator/*!*/ codeGenerator, bool writeRef)\r\n            {\r\n                // prepare for SetObjectProperty call\r\n                codeGenerator.EmitLoadSelf();\r\n                EmitName(node, codeGenerator);\r\n\r\n                return new AssignmentCallback(EmitCallSetObjectField);\r\n            }\r\n\r\n            #region ISimpleVarUseCompiler Members\r\n\r\n            void ISimpleVarUseCompiler.EmitLoadAddress_StoreBack(SimpleVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitLoadAddress_StoreBack((T)node, codeGenerator);\r\n            }\r\n\r\n            void ISimpleVarUseCompiler.EmitName(SimpleVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitName((T)node, codeGenerator);\r\n            }\r\n\r\n            void ISimpleVarUseCompiler.EmitAssign(SimpleVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitAssign((T)node, codeGenerator);\r\n            }\r\n\r\n            void ISimpleVarUseCompiler.EmitLoadAddress(SimpleVarUse node, CodeGenerator codeGenerator)\r\n            {\r\n                EmitLoadAddress((T)node, codeGenerator);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region IVariableUseCompiler\r\n\r\n    internal interface IVariableUseCompiler\r\n    {\r\n        PhpTypeCode EmitAssign(VariableUse/*!*/node, CodeGenerator codeGenerator);\r\n        PhpTypeCode EmitIsset(VariableUse/*!*/node, CodeGenerator codeGenerator, bool empty);\r\n        void EmitUnset(VariableUse/*!*/node, CodeGenerator codeGenerator);\r\n    }\r\n\r\n    internal static class VariableUseHelper\r\n    {\r\n        public static PhpTypeCode EmitAssign(this VariableUse/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            return node.NodeCompiler<IVariableUseCompiler>().EmitAssign(node, codeGenerator);\r\n        }\r\n        public static PhpTypeCode EmitIsset(this VariableUse/*!*/node, CodeGenerator codeGenerator, bool empty)\r\n        {\r\n            return node.NodeCompiler<IVariableUseCompiler>().EmitIsset(node, codeGenerator, empty);\r\n        }\r\n        public static void EmitUnset(this VariableUse/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<IVariableUseCompiler>().EmitUnset(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ISimpleVarUseCompiler\r\n\r\n    interface ISimpleVarUseCompiler\r\n    {\r\n        void EmitLoadAddress_StoreBack(SimpleVarUse/*!*/node, CodeGenerator codeGenerator);\r\n        void EmitName(SimpleVarUse/*!*/node, CodeGenerator codeGenerator);\r\n        void EmitAssign(SimpleVarUse/*!*/node, CodeGenerator codeGenerator);\r\n        void EmitLoadAddress(SimpleVarUse node, CodeGenerator codeGenerator);\r\n    }\r\n\r\n    static class SimpleVarUseHelper\r\n    {\r\n        public static void EmitLoadAddress_StoreBack(this SimpleVarUse/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISimpleVarUseCompiler>().EmitLoadAddress_StoreBack(node, codeGenerator);\r\n        }\r\n\r\n        public static void EmitName(this SimpleVarUse/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISimpleVarUseCompiler>().EmitName(node, codeGenerator);\r\n        }\r\n\r\n        public static void EmitAssign(this SimpleVarUse/*!*/node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISimpleVarUseCompiler>().EmitAssign(node, codeGenerator);\r\n        }\r\n\r\n        public static void EmitLoadAddress(this SimpleVarUse node, CodeGenerator codeGenerator)\r\n        {\r\n            node.NodeCompiler<ISimpleVarUseCompiler>().EmitLoadAddress(node, codeGenerator);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AST/YieldEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Compiler.AST\r\n{\r\n    partial class NodeCompilers\r\n    {\r\n        [NodeCompiler(typeof(YieldEx))]\r\n        sealed class YieldExCompiler : ExpressionCompiler<YieldEx>\r\n        {\r\n            public override Evaluation Analyze(YieldEx node, Analyzer analyzer, ExInfoFromParent info)\r\n            {\r\n                Statistics.AST.AddNode(\"YieldEx\");\r\n\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public override PhpTypeCode Emit(YieldEx node, CodeGenerator codeGenerator)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/Compiler/Analyzer.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n Copyright (c) 2003-2005 Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Compiler;\r\nusing PHP.Core.Compiler.AST;\r\nusing System.Reflection.Emit;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// A set of possible types that an expression can result to.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// <para>This type is used to annotate <see cref=\"Expression\"/>. \r\n    /// If an element is annotated with this information, we can emit more efficient code.</para>\r\n    /// </remarks>\r\n    public interface IExTypeInfo\r\n    {\r\n        /// <summary>\r\n        /// Enumeration of possible types. \r\n        /// If one of them is <see cref=\"PhpTypeCode.Object\"/>, \r\n        /// then <see cref=\"Types\"/> contains a collection of \r\n        /// possible types of the object.\r\n        /// </summary>\r\n        IEnumerable<PhpTypeCode> TypeCodes { get; }\r\n\r\n        /// <summary>\r\n        /// If <see cref=\"TypeCodes\"/> contains <see cref=\"PhpTypeCode.Object\"/>, \r\n        /// then this enumerates all the possible types of the object reference.\r\n        /// </summary>\r\n        IEnumerable<TypeRef> Types { get; }\r\n\r\n        /// <summary>\r\n        /// If <c>true</c>, then we do not know anything about the type for sure and \r\n        /// <see cref=\"TypeCodes\"/> and <see cref=\"Types\"/> contain undefined data.\r\n        /// </summary>\r\n        bool IsAnyType { get; }\r\n\r\n        /// <summary>\r\n        /// If <c>true</c>, then we don't know anything about this type, \r\n        /// like if <see cref=\"IsAnyType\"/> was <c>true</c>,\r\n        /// but <see cref=\"TypeCodes\"/> and <see cref=\"Types\"/> contain type hints.\r\n        /// </summary>\r\n        /// <remarks>Value of this property really makes sense once <see cref=\"IsAnyType\"/> is <c>true</c>, \r\n        /// otherwise value of <see cref=\"IsTypeHint\"/> should always be <c>false</c>.</remarks>\r\n        bool IsTypeHint { get; }\r\n\r\n        /// <summary>\r\n        /// If <c>true</c>, then for all the <see cref=\"TypeRef\"/> returned by <see cref=\"Types\"/> we \r\n        /// have to consider all their subclasses too.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Value of this only makes sense when <see cref=\"TypeCodes\"/> contain <see cref=\"PhpTypeCode.Object\"/>.\r\n        /// </remarks>\r\n        bool IncludesSubclasses { get; }\r\n\r\n        /// <summary>\r\n        /// This is a shortcut for checking whether <see cref=\"TypeCodes\"/> \r\n        /// collection contains given element. Due to internal implementation details, \r\n        /// using this method might be faster, then constructing the collection in \r\n        /// <see cref=\"TypeCodes\"/> getter.\r\n        /// </summary>\r\n        bool HasTypeCode(PhpTypeCode typeCode);\r\n\r\n        /// <summary>\r\n        /// This is a shortcut for checking whether <see cref=\"Types\"/> \r\n        /// collection contains given element. Due to internal implementation details, \r\n        /// using this method might be faster, then constructing the collection in \r\n        /// <see cref=\"Types\"/> getter.\r\n        /// </summary>\r\n        bool HasType(TypeRef type);\r\n\r\n        /// <summary>\r\n        /// Returns <c>true</c> if both <see cref=\"IsAnyType\"/> and <see cref=\"IsTypeHint\"/> \r\n        /// are <c>false</c> and <see cref=\"TypeCodes\"/> contains only the given type.\r\n        /// </summary>\r\n        bool IsOfType(PhpTypeCode typeCode);\r\n\r\n        /// <summary>\r\n        /// Returns <c>true</c> if both <see cref=\"IsAnyType\"/> and <see cref=\"IsTypeHint\"/> \r\n        /// are <c>false</c>, <see cref=\"TypeCodes\"/> contains only object and <see cref=\"Types\"/> \r\n        /// contains only the given object type. Does not take into account \r\n        /// class hierarchy (<see cref=\"IncludesSubclasses\"/>).\r\n        /// </summary>\r\n        bool IsOfType(TypeRef type);\r\n    }\r\n\r\n\tinternal interface IPostAnalyzable\r\n\t{\r\n\t\tvoid PostAnalyze(Analyzer/*!*/ analyzer);\r\n\t}\r\n\r\n\t#region Evaluation\r\n\r\n\tinternal struct Evaluation\r\n\t{\r\n\t\tpublic object Value;\r\n\t\tpublic bool HasValue;\r\n\t\tpublic Expression Expression;\r\n\r\n\t\tpublic Evaluation(Expression/*!*/ expression)\r\n\t\t\t: this(expression, null, false)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic Evaluation(Expression/*!*/ expression, object value)\r\n\t\t\t: this(expression, value, true)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic Evaluation(Expression/*!*/ expression, object value, bool hasValue)\r\n\t\t{\r\n\t\t\tthis.Expression = expression;\r\n\t\t\tthis.Value = value;\r\n\t\t\tthis.HasValue = hasValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the expression to a literal if we have a value and the expression is not yet a literal.\r\n\t\t/// Returns the converted expression.\r\n\t\t/// Used when the evaluation cannot continue as some other part of the operation is not evaluable.\r\n\t\t/// </summary>\r\n\t\tpublic Expression/*!*/ Literalize()\r\n\t\t{\r\n\t\t\tif (HasValue && !Expression.HasValue())\r\n\t\t\t\treturn Expression = LiteralUtils.Create(Expression.Span, Value, Expression.NodeCompiler<IExpressionCompiler>().Access);\r\n\t\t\telse\r\n\t\t\t\treturn Expression;\r\n\t\t}\r\n\r\n\t\tinternal Evaluation Evaluate(Expression/*!*/ parent, out Expression/*!*/ expr)\r\n\t\t{\r\n\t\t\tif (HasValue)\r\n\t\t\t{\r\n\t\t\t\texpr = Expression;\r\n\t\t\t\treturn new Evaluation(parent, parent.Evaluate(Value));\r\n\t\t\t}\r\n\r\n\t\t\texpr = Literalize();\r\n\t\t\treturn new Evaluation(parent);\r\n\t\t}\r\n\r\n\t\tinternal static Evaluation Evaluate(Expression/*!*/ parent,\r\n            Evaluation eval1, out Expression/*!*/ expr1,\r\n\t\t\tEvaluation eval2, out Expression/*!*/ expr2)\r\n\t\t{\r\n\t\t\tif (eval1.HasValue && eval2.HasValue)\r\n\t\t\t{\r\n\t\t\t\texpr1 = eval1.Expression;\r\n\t\t\t\texpr2 = eval2.Expression;\r\n\t\t\t\treturn new Evaluation(parent, parent.Evaluate(eval1.Value, eval2.Value));\r\n\t\t\t}\r\n\r\n\t\t\texpr1 = eval1.Literalize();\r\n\t\t\texpr2 = eval2.Literalize();\r\n\t\t\treturn new Evaluation(parent);\r\n\t\t}\r\n\r\n\t\tinternal Evaluation ReadOnlyEvaluate(Expression/*!*/ parent)\r\n\t\t{\r\n\t\t\tif (HasValue)\r\n\t\t\t\treturn new Evaluation(parent, parent.Evaluate(Value));\r\n\r\n\t\t\treturn new Evaluation(parent);\r\n\t\t}\r\n\r\n\t\tinternal static Evaluation ReadOnlyEvaluate(Expression/*!*/ parent, Evaluation eval1, Evaluation eval2)\r\n\t\t{\r\n\t\t\tif (eval1.HasValue && eval2.HasValue)\r\n\t\t\t\treturn new Evaluation(parent, parent.Evaluate(eval1.Value, eval2.Value));\r\n\r\n\t\t\treturn new Evaluation(parent);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Analyzes the AST previously built by the Parser. \r\n\t/// Evaluates node attributes that can't be evaluated from down to up during building AST.\r\n\t/// Fills tables.\r\n\t/// Does some basic optimizations like constant expressions evaluating \r\n\t/// and unreachable code eliminating.\r\n\t/// Calls compiling of included source files.\r\n\t/// </summary>\r\n\tpublic sealed class Analyzer : AstVisitor\r\n\t{\r\n\t\tinternal enum States\r\n\t\t{\r\n\t\t\tInitial,\r\n\t\t\tPreAnalysisStarted,\r\n\t\t\tMemberAnalysisStarted,\r\n\t\t\tFullAnalysisStarted,\r\n\t\t\tPostAnalysisStarted,\r\n\t\t}\r\n\r\n\t\tinternal States State { get { return state; } }\r\n\t\tprivate States state;\r\n\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Analyzed AST.\r\n        /// Must be internally modifiable in order to allow partial class declaration to change the sourceUnit during the analysis\r\n\t\t/// </summary>\r\n        public CompilationSourceUnit SourceUnit { get { return sourceUnit; } internal set { sourceUnit = value; } }\r\n        private CompilationSourceUnit sourceUnit; \r\n\r\n\t\t/// <summary>\r\n\t\t/// Current scope. Available only during full analysis.\r\n\t\t/// </summary>\r\n\t\tpublic Scope CurrentScope { get { return currentScope; } set { currentScope = value; } }\r\n\t\tprivate Scope currentScope = Scope.Invalid;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The current compilation context.\r\n\t\t/// </summary>\r\n\t\tpublic override CompilationContext Context { get { return context; } }\r\n\t\tprivate CompilationContext context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The current error sink.\r\n\t\t/// </summary>\r\n\t\tinternal ErrorSink ErrorSink { get { return context.Errors; } }\r\n\r\n\t\tinternal List<IPostAnalyzable>/*!*/ PostAnalyzed { get { return postAnalyzed; } }\r\n\t\tprivate List<IPostAnalyzable>/*!*/ postAnalyzed = new List<IPostAnalyzable>();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tinternal Analyzer(CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tthis.context = context;\r\n\r\n\t\t\tcondLevel = 0;\r\n\t\t\tloopNestingLevel = 0;\r\n\t\t\tstate = States.Initial;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis Entry Points\r\n\r\n\t\tinternal void PreAnalyze(IEnumerable<Declaration>/*!*/ declarations)\r\n\t\t{\r\n\t\t\tstate = States.PreAnalysisStarted;\r\n\r\n\t\t\tforeach (Declaration decl in declarations)\r\n\t\t\t{\r\n\t\t\t\tthis.sourceUnit = decl.SourceUnit;\r\n\r\n\t\t\t\tif (decl.Node != null)\r\n\t\t\t\t\tdecl.Node.PreAnalyze(this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void AnalyzeMembers(IEnumerable<Declaration>/*!*/ declarations)\r\n\t\t{\r\n\t\t\tstate = States.MemberAnalysisStarted;\r\n\r\n\t\t\tforeach (Declaration decl in declarations)\r\n\t\t\t{\r\n\t\t\t\tthis.sourceUnit = decl.SourceUnit;\r\n\r\n\t\t\t\tif (decl.Node != null)\r\n\t\t\t\t\tdecl.Node.AnalyzeMembers(this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Analyzes the AST of the source unit.\r\n\t\t/// </summary>\r\n        internal void Analyze(CompilationSourceUnit/*!*/ sourceUnit)\r\n\t\t{\r\n\t\t\tstate = States.FullAnalysisStarted;\r\n\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t\tthis.currentNamespace = sourceUnit.CurrentNamespace;\r\n\t\t\tthis.currentScope = Scope.Global;\r\n\r\n\t\t\tsourceUnit.Ast.Analyze(this);\r\n\r\n\t\t\tthis.currentScope = Scope.Invalid;\r\n\t\t}\r\n\r\n\t\tinternal void PostAnalyze()\r\n\t\t{\r\n\t\t\tstate = States.PostAnalysisStarted;\r\n\r\n\t\t\tforeach (IPostAnalyzable node in postAnalyzed)\r\n\t\t\t\tnode.PostAnalyze(this);\r\n\r\n\t\t\tpostAnalyzed = null;\r\n\t\t}\r\n\r\n\t\tprivate Parser AstBuilder\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_astBuilder == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t_astBuilder = new Parser();\r\n\t\t\t\t\t_astBuilder.AllowGlobalCode = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn _astBuilder;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate Parser _astBuilder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Builds AST from the given source code string.\r\n\t\t/// Returns <B>null</B> if the AST cannot be built (new declarations appears in the code).\r\n\t\t/// </summary>\r\n        internal Statement[] BuildAst(int positionShift, string/*!*/ sourceCode)\r\n\t\t{\r\n\t\t\tParser.ReductionsCounter counter = new Parser.ReductionsCounter();\r\n\r\n            var ast = BuildAst(positionShift, sourceCode, counter);\r\n\r\n\t\t\tif (counter.FunctionCount + counter.TypeCount + counter.ConstantCount > 0)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn ast.Statements;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Builds AST from the given source code string. Does not check for declarations in the source code.\r\n        /// </summary>\r\n        public AST.GlobalCode BuildAst(int positionShift, string/*!*/ sourceCode, Parser.ReductionsCounter counter)\r\n        {\r\n            StringReader source_reader = new StringReader(sourceCode);\r\n            AST.GlobalCode ast = AstBuilder.Parse(sourceUnit, source_reader, ErrorSink, counter,\r\n                Lexer.LexicalStates.ST_IN_SCRIPTING, context.Config.Compiler.LanguageFeatures, positionShift);\r\n\r\n            return ast;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Nested Types: Locations\r\n\r\n\t\tinternal enum Locations\r\n\t\t{\r\n\t\t\tGlobalCode,\r\n\t\t\tFunctionDecl,\r\n\t\t\tMethodDecl,\r\n\t\t\tTypeDecl,\r\n\t\t\tActualParam,\r\n\t\t\tSwitch\r\n\t\t}\r\n\r\n\t\tprivate abstract class Location\r\n\t\t{\r\n\t\t\tpublic abstract Locations Kind { get; }\r\n\t\t}\r\n\r\n\t\t#region DeclLocation\r\n\r\n\t\tprivate abstract class DeclLocation : Location\r\n\t\t{\r\n\t\t\tinternal int NestingLevel { get { return nestingLevel; } }\r\n\t\t\tprivate int nestingLevel;\r\n\r\n\t\t\tinternal DeclLocation(int nestingLevel)\r\n\t\t\t{\r\n\t\t\t\tthis.nestingLevel = nestingLevel;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region RoutineDeclLoc\r\n\r\n\t\tprivate class RoutineDeclLoc : DeclLocation\r\n\t\t{\r\n\t\t\tinternal PhpRoutine/*!*/ Routine { get { return routine; } }\r\n\t\t\tprivate PhpRoutine/*!*/ routine;\r\n\r\n\t\t\tpublic override Locations Kind\r\n\t\t\t{\r\n\t\t\t\tget { return routine.IsFunction ? Locations.FunctionDecl : Locations.MethodDecl; }\r\n\t\t\t}\r\n\r\n\t\t\tinternal RoutineDeclLoc(PhpRoutine/*!*/ routine, int nestingLevel)\r\n\t\t\t\t: base(nestingLevel)\r\n\t\t\t{\r\n\t\t\t\tthis.routine = routine;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TypeDeclLocation\r\n\r\n\t\tprivate class TypeDeclLocation : DeclLocation\r\n\t\t{\r\n\t\t\tpublic override Locations Kind\r\n\t\t\t{\r\n\t\t\t\tget { return Locations.TypeDecl; }\r\n\t\t\t}\r\n\r\n\t\t\tpublic PhpType/*!*/ Type { get { return type; } }\r\n\t\t\tprivate PhpType/*!*/ type;\r\n\r\n\t\t\tinternal TypeDeclLocation(PhpType/*!*/ type, int nestingLevel)\r\n\t\t\t\t: base(nestingLevel)\r\n\t\t\t{\r\n\t\t\t\tthis.type = type;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ActParamsLoc\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents location in some actual parameter in function call.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It maintains information about formal parameters\r\n\t\t/// declaration and currently analyzed actual parameter index to answer if the\r\n\t\t/// actual parameter shall be passed by reference or not.\r\n\t\t/// </remarks>\r\n\t\tprivate class ActualParamsLocation : Location\r\n\t\t{\r\n\t\t\tpublic override Locations Kind\r\n\t\t\t{\r\n\t\t\t\tget { return Locations.ActualParam; }\r\n\t\t\t}\r\n\r\n\t\t\tprivate int currentParam;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Says which parameter shall be passed by reference.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate RoutineSignature/*!*/ signature;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Actual parameters count (needn't equal to the signature's size).\r\n\t\t\t/// </summary>\r\n\t\t\tprivate int actualParamCount;\r\n\r\n\t\t\tinternal ActualParamsLocation(RoutineSignature/*!*/ signature, int actualParamCount)\r\n\t\t\t{\r\n\t\t\t\tthis.currentParam = -1;\r\n\t\t\t\tthis.signature = signature;\r\n\t\t\t\tthis.actualParamCount = actualParamCount;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Updates information about location.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal void MoveToNextParam()\r\n\t\t\t{\r\n\t\t\t\tcurrentParam++;\r\n\t\t\t\tDebug.Assert(currentParam < actualParamCount);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Says if the just now analyzed actual parameter shall be passed be reference\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>\r\n\t\t\t/// <B>true</B> if the just now analyzed actual parameter shall be passed be reference\r\n\t\t\t/// </returns>\r\n\t\t\tinternal bool ActParamPassedByRef()\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(!signature.IsUnknown);\r\n\t\t\t\treturn signature.IsAlias(currentParam);\r\n\t\t\t}\r\n\r\n\t\t\tinternal bool ActParamDeclIsUnknown()\r\n\t\t\t{\r\n\t\t\t\treturn signature.IsUnknown;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SwitchLoc\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents location in switch statement\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <B>SwitchLoc</B> is used to store information about compile-time known case values\r\n\t\t/// and used default section. That is used to report some warnings.\r\n\t\t/// </remarks>\r\n\t\tprivate class SwitchLocation : Location\r\n\t\t{\r\n\t\t\tpublic override Locations Kind\r\n\t\t\t{\r\n\t\t\t\tget { return Locations.Switch; }\r\n\t\t\t}\r\n\r\n\t\t\tinternal ArrayList ConstCases;\r\n\t\t\tinternal bool ContainsDefault;\r\n\r\n\t\t\tinternal SwitchLocation()\r\n\t\t\t{\r\n\t\t\t\tConstCases = new ArrayList();\r\n\t\t\t\tContainsDefault = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Locations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stack of locations.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Used to maintain information on the actual position \r\n\t\t/// of the analyzer in the AST. It says \"what I am analyzing now\".\r\n\t\t/// </remarks>\r\n\t\tprivate readonly Stack<Location>/*!*/ locationStack = new Stack<Location>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stack of <see cref=\"TypeDeclLocation\"/> instances.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Represents (direct or indirect) nesting of classes declarations.\r\n\t\t/// </remarks>\r\n\t\tprivate readonly Stack<TypeDeclLocation>/*!*/ typeDeclStack = new Stack<TypeDeclLocation>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Routine stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Represents (direct or indirect) nesting of functions/method declarations.\r\n\t\t/// </remarks>\r\n\t\tprivate readonly Stack<RoutineDeclLoc>/*!*/ routineDeclStack = new Stack<RoutineDeclLoc>();\r\n\r\n\t\tpublic QualifiedName? CurrentNamespace { get { return currentNamespace; } }\r\n\t\tprivate QualifiedName? currentNamespace;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Level of code conditionality (zero means an unconditional code).\r\n\t\t/// </summary>\r\n\t\tprivate int condLevel;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets level of right now analyzed piece of code nesting in loops\r\n\t\t/// </summary>\r\n\t\tinternal int LoopNestingLevel { get { return loopNestingLevel; } }\r\n\t\tprivate int loopNestingLevel;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Is currently analyzed code unreachable? (TODO: too simple analysis, needs to be improved due to introduction of goto's)\r\n\t\t/// </summary>\r\n\t\tprivate bool unreachableCode;\r\n\r\n\t\t/// <summary>\r\n\t\t/// This field serves to ensure, that unreachable code warning is not reported on every \r\n\t\t/// statement in unreachable block od statements, but only once\r\n\t\t/// </summary>\r\n\t\tprivate bool unreachableCodeReported;\r\n\r\n\t\tprivate Location CurrentLocation\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn locationStack.Peek();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal PhpType CurrentType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (typeDeclStack.Count > 0) ? typeDeclStack.Peek().Type : null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal PhpRoutine CurrentRoutine\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (routineDeclStack.Count > 0) ? routineDeclStack.Peek().Routine : null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether any of the classes that contains the code is in complete -\r\n\t\t/// this is used for resolving whether function can be declared (in incomplete class\r\n\t\t/// it must be declared later at runtime)\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool IsInsideIncompleteClass()\r\n\t\t{\r\n\t\t\tforeach (TypeDeclLocation loc in typeDeclStack)\r\n\t\t\t{\r\n\t\t\t\tif (!loc.Type.IsComplete) return true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tinternal void AddCurrentRoutineProperty(RoutineProperties property)\r\n\t\t{\r\n\t\t\tif (CurrentRoutine != null)\r\n\t\t\t\tCurrentRoutine.Properties |= property;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the argument passing semantics is by-ref.\r\n\t\t/// </summary>\r\n\t\tinternal bool ActParamPassedByRef()\r\n\t\t{\r\n\t\t\treturn ((ActualParamsLocation)CurrentLocation).ActParamPassedByRef();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the argument passing semantics is known for the current actual argument.\r\n\t\t/// </summary>\r\n\t\tinternal bool ActParamDeclIsUnknown()\r\n\t\t{\r\n\t\t\treturn ((ActualParamsLocation)CurrentLocation).ActParamDeclIsUnknown();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conditional code\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the analyzer, that conditional code is entered.\r\n\t\t/// </summary>\r\n\t\tinternal void EnterConditionalCode()\r\n\t\t{\r\n\t\t\tcondLevel++;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the analyzer, that conditional code is leaved.\r\n\t\t/// </summary>\r\n\t\tinternal void LeaveConditionalCode()\r\n\t\t{\r\n\t\t\tcondLevel--;\r\n\r\n\t\t\t// because the unreachable code is not analyzed, this will unset unreachableCode\r\n\t\t\t// at the end of conditional block of code\r\n\t\t\tLeaveUnreachableCode();\r\n\r\n\t\t\tDebug.Assert(condLevel >= 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Says if right now analyzed code is part of conditional block\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// <B>true</B> if right now analyzed code is part of conditional block\r\n\t\t/// </returns>\r\n\t\tinternal bool IsThisCodeConditional()\r\n\t\t{\r\n\t\t\treturn condLevel > 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Unreachable code\r\n\r\n\t\t/// <summary>\r\n\t\t/// Says if the right now analyzed AST node represents part of conditional code\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// <B>true</B> if the right now analyzed AST node represents part of conditional code\r\n\t\t/// </returns>\r\n\t\tinternal bool IsThisCodeUnreachable()\r\n\t\t{\r\n\t\t\treturn unreachableCode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the Analyzer that unreachable code has been entered\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Unreachable code is code behind <see cref=\"JumpStmt\"/> in the same conditional block \r\n\t\t/// but only if it is not declaration in global code.\r\n\t\t/// Unreachable code is also code in while(false) body and if(false) then statement,\r\n\t\t/// if(true)... else statement etc.\r\n\t\t/// </remarks>\r\n\t\tinternal void EnterUnreachableCode()\r\n\t\t{\r\n\t\t\tunreachableCode = true;\r\n\t\t\tunreachableCodeReported = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the Analyzer that unreachable code has been leaved\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This method is called only from <see cref=\"LeaveConditionalCode\"/> because unreachable code ends \r\n\t\t/// at the end of conditional block and from <see cref=\"GlobalCode\"/>.<c>Analyze</c>.\r\n\t\t/// because unreachable declarations in global code are valid.\r\n\t\t/// </remarks>\r\n\t\tinternal void LeaveUnreachableCode()\r\n\t\t{\r\n\t\t\tunreachableCode = false;\r\n\t\t}\r\n\r\n        internal void ReportUnreachableCode(Text.Span position)\r\n\t\t{\r\n\t\t\tif (!unreachableCodeReported)\r\n\t\t\t{\r\n\t\t\t\tErrorSink.Add(Warnings.UnreachableCodeDetected, SourceUnit, position);\r\n\t\t\t\tunreachableCodeReported = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variables and Labels\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the variables table for the right now analyzed scope.\r\n\t\t/// </summary>\r\n\t\tinternal VariablesTable CurrentVarTable\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (CurrentRoutine != null)\r\n                    return CurrentRoutine.Builder.LocalVariables;\r\n                else\r\n                    return sourceUnit.Ast.GetVarTable();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the variables table for the right now analyzed scope.\r\n\t\t/// </summary>\r\n\t\tinternal Dictionary<VariableName, Statement> CurrentLabels\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (CurrentRoutine != null)\r\n                    return CurrentRoutine.Builder.Labels;\r\n                else\r\n                    return sourceUnit.Ast.GetLabels();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ConstructedTypes\r\n\r\n\t\t// TODO: Should ConstructedTypes be moved to CompilationUnitBase?\r\n\t\t// + DefineConstructedTypesBuilders will be called in DefineBuilders of the CU\r\n\t\t// + if persisted in any way, it should be persisted per CU\r\n\t\t// - duplicates among CUs\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores all constructed types found in the source codes.\r\n\t\t/// </summary>\r\n\t\tprivate readonly Dictionary<DTypeDescs, ConstructedType>/*!*/ constructedTypes = new Dictionary<DTypeDescs, ConstructedType>();\r\n\r\n\t\tinternal ConstructedType/*!*/ CreateConstructedType(DTypeDesc/*!*/ genericType, DTypeDesc[]/*!!*/ arguments, int argCount)\r\n\t\t{\r\n\t\t\tConstructedType result;\r\n\r\n\t\t\tif (genericType.IsUnknown)\r\n\t\t\t{\r\n\t\t\t\tArray.Resize(ref arguments, argCount);\r\n\t\t\t\tresult = new ConstructedType(genericType, arguments);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDTypeDescs tuple = new DTypeDescs(genericType, arguments, argCount);\r\n\r\n\t\t\t\tif (!constructedTypes.TryGetValue(tuple, out result))\r\n\t\t\t\t{\r\n\t\t\t\t\tArray.Resize(ref arguments, argCount);\r\n\t\t\t\t\tresult = new ConstructedType(genericType, arguments);\r\n\t\t\t\t\tconstructedTypes.Add(tuple, result);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Should be called on types which are created during full analysis.\r\n\t\t/// </summary>\r\n\t\tinternal ConstructedType AnalyzeConstructedType(DType type)\r\n\t\t{\r\n\t\t\tConstructedType cted = type as ConstructedType;\r\n\t\t\tif (cted != null)\r\n\t\t\t{\r\n\t\t\t\tcted.Analyze(this);\r\n\t\t\t}\r\n\t\t\treturn cted;\r\n\t\t}\r\n\r\n\t\tinternal void DefineConstructedTypeBuilders()\r\n\t\t{\r\n\t\t\tforeach (ConstructedType type in constructedTypes.Values)\r\n\t\t\t{\r\n\t\t\t\t// perform the analysis on the type if it hasn't been performed previously:\r\n\t\t\t\ttype.Analyze(this);\r\n\r\n\t\t\t\t// define builders:\r\n\t\t\t\ttype.DefineBuilders();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Enter/Leave functions\r\n\r\n\t\tinternal void EnterNamespace(NamespaceDecl ns)\r\n\t\t{\r\n\t\t\tDebug.Assert(!currentNamespace.HasValue, \"Namespace nesting not supported\");\r\n\t\t\tcurrentNamespace = ns.QualifiedName;\r\n\t\t}\r\n\r\n\t\tinternal void LeaveNamespace()\r\n\t\t{\r\n\t\t\tcurrentNamespace = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the analyzer that function declaration is entered.\r\n\t\t/// </summary>\r\n\t\tinternal void EnterFunctionDeclaration(PhpRoutine/*!*/ function)\r\n\t\t{\r\n            Debug.Assert(function.IsFunction);\r\n\r\n\t\t\tRoutineDeclLoc f = new RoutineDeclLoc(function, locationStack.Count);\r\n\t\t\troutineDeclStack.Push(f);\r\n\t\t\tlocationStack.Push(f);\r\n\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\r\n\t\tinternal void LeaveFunctionDeclaration()\r\n\t\t{\r\n\t\t\tDebug.Assert(routineDeclStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Peek() is RoutineDeclLoc);\r\n\t\t\tDebug.Assert(routineDeclStack.Peek() == locationStack.Peek());\r\n\r\n\t\t\troutineDeclStack.Pop();\r\n\t\t\tlocationStack.Pop();\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notices the analyzer that method declaration is entered.\r\n\t\t/// </summary>\r\n\t\tinternal void EnterMethodDeclaration(PhpMethod/*!*/ method)\r\n\t\t{\r\n\t\t\t//function declared within a method is global function \r\n\t\t\t//=> method is only declared direct within a class declaration\r\n\t\t\tDebug.Assert(locationStack.Peek().Kind == Locations.TypeDecl);\r\n\r\n\t\t\tRoutineDeclLoc m = new RoutineDeclLoc(method, locationStack.Count);\r\n\t\t\troutineDeclStack.Push(m);\r\n\t\t\tlocationStack.Push(m);\r\n\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\r\n\t\tinternal void LeaveMethodDeclaration()\r\n\t\t{\r\n\t\t\tDebug.Assert(routineDeclStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Peek() is RoutineDeclLoc);\r\n\t\t\tDebug.Assert(routineDeclStack.Peek() == locationStack.Peek());\r\n\r\n\t\t\troutineDeclStack.Pop();\r\n\t\t\tlocationStack.Pop();\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Notices the analyzer that class declaration is entered.\r\n\t\t/// </summary>\r\n\t\tinternal void EnterTypeDecl(PhpType type)\r\n\t\t{\r\n\t\t\tTypeDeclLocation c = new TypeDeclLocation(type, locationStack.Count);\r\n\t\t\ttypeDeclStack.Push(c);\r\n\t\t\tlocationStack.Push(c);\r\n\t\t}\r\n\r\n\t\tinternal void LeaveTypeDecl()\r\n\t\t{\r\n\t\t\tDebug.Assert(typeDeclStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Count > 0);\r\n\t\t\tDebug.Assert(locationStack.Peek() is TypeDeclLocation);\r\n\t\t\tDebug.Assert(typeDeclStack.Peek() == locationStack.Peek());\r\n\r\n\t\t\ttypeDeclStack.Pop();\r\n\t\t\tlocationStack.Pop();\r\n\t\t}\r\n\r\n\r\n\t\tinternal void EnterActualParams(RoutineSignature/*!*/ signature, int actualParamCount)\r\n\t\t{\r\n\t\t\tlocationStack.Push(new ActualParamsLocation(signature, actualParamCount));\r\n\t\t}\r\n\r\n\t\tinternal void LeaveActualParams()\r\n\t\t{\r\n\t\t\tDebug.Assert(locationStack.Peek() is ActualParamsLocation);\r\n\t\t\tlocationStack.Pop();\r\n\t\t}\r\n\r\n\t\tinternal void EnterActParam()\r\n\t\t{\r\n\t\t\t((ActualParamsLocation)CurrentLocation).MoveToNextParam();\r\n\t\t}\r\n\r\n\t\tinternal void LeaveActParam()\r\n\t\t{\r\n\t\t\t//do nothing\r\n\t\t}\r\n\r\n\t\tinternal void EnterLoopBody()\r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t\tloopNestingLevel++;\r\n\t\t}\r\n\r\n\t\tinternal void LeaveLoopBody()\r\n\t\t{\r\n\t\t\tLeaveConditionalCode();\r\n\t\t\tloopNestingLevel--;\r\n\t\t\tDebug.Assert(loopNestingLevel > -1);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Switch Statement Handling\r\n\r\n\t\tinternal void EnterSwitchBody()\r\n\t\t{\r\n\t\t\tloopNestingLevel++;\r\n\r\n\t\t\tlocationStack.Push(new SwitchLocation());\r\n\t\t}\r\n\r\n\t\tinternal void LeaveSwitchBody()\r\n\t\t{\r\n\t\t\tloopNestingLevel--;\r\n\t\t\tDebug.Assert(loopNestingLevel > -1);\r\n\r\n\t\t\tDebug.Assert(locationStack.Peek() is SwitchLocation);\r\n\t\t\tlocationStack.Pop();\r\n\t\t}\r\n\r\n        internal void AddConstCaseToCurrentSwitch(object value, Text.Span position)\r\n\t\t{\r\n\t\t\tSwitchLocation current_switch = (SwitchLocation)CurrentLocation;\r\n\r\n\t\t\tif (current_switch.ConstCases.IndexOf(value) > -1)\r\n\t\t\t\tErrorSink.Add(Warnings.MultipleSwitchCasesWithSameValue, SourceUnit, position, value);\r\n\t\t\telse\r\n\t\t\t\tcurrent_switch.ConstCases.Add(value);\r\n\t\t}\r\n\r\n        internal void AddDefaultToCurrentSwitch(Text.Span position)\r\n\t\t{\r\n\t\t\tSwitchLocation current_switch = (SwitchLocation)CurrentLocation;\r\n\r\n\t\t\tif (current_switch.ContainsDefault)\r\n\t\t\t\tErrorSink.Add(Warnings.MoreThenOneDefaultInSwitch, SourceUnit, position);\r\n\t\t\telse\r\n\t\t\t\tcurrent_switch.ContainsDefault = true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Name Resolving\r\n\r\n\t\tprivate Scope GetReferringScope(PhpType referringType, PhpRoutine referringRoutine)\r\n\t\t{\r\n\t\t\tif (referringType != null) return referringType.Declaration.Scope;\r\n            if (referringRoutine is PhpFunction) return ((PhpFunction)referringRoutine).Declaration.Scope;\r\n            //if (referringRoutine is PhpLambdaFunction) ...\r\n\r\n\t\t\t// used for global statements during full analysis:\r\n\t\t\tDebug.Assert(currentScope.IsValid, \"Scope is available only during full analysis.\");\r\n\t\t\treturn currentScope;\r\n\t\t}\r\n\r\n        public DRoutine/*!*/ ResolveFunctionName(QualifiedName qualifiedName, Text.Span position)\r\n\t\t{\r\n\t\t\tDebug.Assert(currentScope.IsValid, \"Scope is available only during full analysis.\");\r\n\r\n\t\t\tQualifiedName? alias;\r\n\t\t\tDRoutine result = sourceUnit.ResolveFunctionName(qualifiedName, currentScope, out alias, ErrorSink, position, false);\r\n\r\n\t\t\tif (result.IsUnknown)\r\n\t\t\t{\r\n\t\t\t\tif (alias.HasValue)\r\n\t\t\t\t\tErrorSink.Add(Warnings.UnknownFunctionUsedWithAlias, SourceUnit, position, qualifiedName, alias);\r\n\t\t\t\telse\r\n\t\t\t\t\tErrorSink.Add(Warnings.UnknownFunctionUsed, SourceUnit, position, qualifiedName);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Resolves type based on provided <paramref name=\"typeName\"/>.\r\n        /// </summary>\r\n        /// <param name=\"typeName\">Either <see cref=\"GenericQualifiedName\"/> or <see cref=\"PrimitiveTypeName\"/> or <c>null</c> reference.</param>\r\n        /// <param name=\"referringType\"></param>\r\n        /// <param name=\"referringRoutine\"></param>\r\n        /// <param name=\"position\"></param>\r\n        /// <param name=\"mustResolve\"></param>\r\n        /// <returns></returns>\r\n        internal DType ResolveType(object typeName, PhpType referringType, PhpRoutine referringRoutine,\r\n                Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\tDType result = null;\r\n\r\n            if (typeName != null)\r\n            {\r\n                if (typeName.GetType() == typeof(GenericQualifiedName))\r\n                {\r\n                    result = ResolveTypeName((GenericQualifiedName)typeName,\r\n                        referringType, referringRoutine, position, mustResolve);\r\n                }\r\n                else if (typeName.GetType() == typeof(PrimitiveTypeName))\r\n                {\r\n                    result = PrimitiveType.GetByName((PrimitiveTypeName)typeName);\r\n                }\r\n                else\r\n                {\r\n                    throw new ArgumentException(\"typeName\");\r\n                }\r\n            }\r\n\r\n            return result;\r\n\t\t}\r\n\r\n\t\tpublic DType/*!*/ ResolveTypeName(QualifiedName qualifiedName, PhpType referringType,\r\n            PhpRoutine referringRoutine, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\tDType result;\r\n\r\n\t\t\tif (qualifiedName.IsSelfClassName)\r\n\t\t\t{\r\n\t\t\t\tif (referringType != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = referringType;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// we are sure the self is used incorrectly in function:\r\n\t\t\t\t\tif (referringRoutine != null)\r\n\t\t\t\t\t\tErrorSink.Add(Errors.SelfUsedOutOfClass, SourceUnit, position);\r\n\r\n\t\t\t\t\t// global code can be included to the method:\r\n\t\t\t\t\tresult = UnknownType.UnknownSelf;\r\n\t\t\t\t}\r\n\t\t\t}\r\n            else if (qualifiedName.IsStaticClassName)\r\n            {\r\n                if (referringType != null)\r\n                {\r\n                    if (referringType.IsFinal)\r\n                    {\r\n                        // we are sure the 'static' == 'self'\r\n                        result = referringType;\r\n                    }\r\n                    else\r\n                    {\r\n                        if (referringRoutine != null)\r\n                            referringRoutine.Properties |= RoutineProperties.LateStaticBinding;\r\n\r\n                        result = StaticType.Singleton;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // we are sure the static is used incorrectly in function:\r\n                    //if (referringRoutine != null) // do not allow 'static' in global code:\r\n                        ErrorSink.Add(Errors.StaticUsedOutOfClass, SourceUnit, position);\r\n\r\n                    // global code can be included to the method:\r\n                    result = UnknownType.UnknownStatic;\r\n                }\r\n            }\r\n            else if (qualifiedName.IsParentClassName)\r\n            {\r\n                if (referringType != null)\r\n                {\r\n                    if (referringType.IsInterface)\r\n                    {\r\n                        ErrorSink.Add(Errors.ParentUsedOutOfClass, SourceUnit, position);\r\n                        result = UnknownType.UnknownParent;\r\n                    }\r\n                    else\r\n                    {\r\n                        DType base_type = referringType.Base;\r\n                        if (base_type == null)\r\n                        {\r\n                            ErrorSink.Add(Errors.ClassHasNoParent, SourceUnit, position, referringType.FullName);\r\n                            result = UnknownType.UnknownParent;\r\n                        }\r\n                        else\r\n                        {\r\n                            result = base_type;\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // we are sure the self is used incorrectly when we are in a function:\r\n                    if (referringRoutine != null)\r\n                        ErrorSink.Add(Errors.ParentUsedOutOfClass, SourceUnit, position);\r\n\r\n                    // global code can be included to the method:\r\n                    result = UnknownType.UnknownParent;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // try resolve the name as a type parameter name:\r\n                if (qualifiedName.IsSimpleName)\r\n                {\r\n                    result = ResolveTypeParameterName(qualifiedName.Name, referringType, referringRoutine);\r\n                    if (result != null)\r\n                        return result;\r\n                }\r\n\r\n                Scope referring_scope = GetReferringScope(referringType, referringRoutine);\r\n                QualifiedName? alias;\r\n                result = sourceUnit.ResolveTypeName(qualifiedName, referring_scope, out alias, ErrorSink, position, mustResolve);\r\n\r\n                ReportUnknownType(result, alias, position);\r\n            }\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate GenericParameter ResolveTypeParameterName(Name name, PhpType referringType, PhpRoutine referringRoutine)\r\n\t\t{\r\n\t\t\tGenericParameter result = null;\r\n\r\n\t\t\tif (referringRoutine != null)\r\n\t\t\t{\r\n\t\t\t\tresult = referringRoutine.Signature.GetGenericParameter(name);\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tif (referringType != null)\r\n\t\t\t{\r\n\t\t\t\tresult = referringType.GetGenericParameter(name);\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate void ReportUnknownType(DType/*!*/ type, QualifiedName? alias, Text.Span position)\r\n\t\t{\r\n\t\t\tif (type.IsUnknown)\r\n\t\t\t{\r\n\t\t\t\tif (alias.HasValue)\r\n\t\t\t\t\tErrorSink.Add(Warnings.UnknownClassUsedWithAlias, SourceUnit, position, type.FullName, alias);\r\n\t\t\t\telse\r\n\t\t\t\t\tErrorSink.Add(Warnings.UnknownClassUsed, SourceUnit, position, type.FullName);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic DType/*!*/ ResolveTypeName(GenericQualifiedName genericName, PhpType referringType,\r\n            PhpRoutine referringRoutine, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\tDType type = ResolveTypeName(genericName.QualifiedName, referringType, referringRoutine, position, mustResolve);\r\n            DTypeDesc[] arguments;\r\n\r\n            if (genericName.IsGeneric)\r\n            {\r\n                arguments = new DTypeDesc[genericName.GenericParams.Length];\r\n\r\n                for (int i = 0; i < arguments.Length; i++)\r\n                {\r\n                    arguments[i] = ResolveType(genericName.GenericParams[i], referringType, referringRoutine, position, mustResolve).TypeDesc;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                arguments = DTypeDesc.EmptyArray;\r\n            }\r\n\r\n            return type.MakeConstructedType(this, arguments, position);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the type for specified attribute type name.\r\n\t\t/// </summary>\r\n        public DType/*!*/ ResolveCustomAttributeType(QualifiedName qualifiedName, Scope referringScope, Text.Span position)\r\n\t\t{\r\n\t\t\tif (qualifiedName.IsAppStaticAttributeName)\r\n\t\t\t{\r\n                return SpecialCustomAttribute.AppStaticAttribute;\r\n\t\t\t}\r\n\t\t\telse if (qualifiedName.IsExportAttributeName)\r\n\t\t\t{\r\n                return SpecialCustomAttribute.ExportAttribute;\r\n\t\t\t}\r\n            else if (qualifiedName.IsDllImportAttributeName)\r\n            {\r\n                return SpecialCustomAttribute.DllImportAttribute;\r\n            }\r\n\t\t\telse if (qualifiedName.IsOutAttributeName)\r\n\t\t\t{\r\n                return SpecialCustomAttribute.OutAttribute;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tQualifiedName? alias;\r\n                string attrname = qualifiedName.Name.Value;\r\n                if (!attrname.EndsWith(Name.AttributeNameSuffix)) attrname += Name.AttributeNameSuffix;\r\n\t\t\t\tQualifiedName name = new QualifiedName(new Name(attrname), qualifiedName.Namespaces);\r\n\r\n\t\t\t\tDType type = sourceUnit.ResolveTypeName(name, referringScope, out alias, ErrorSink, position, true);\r\n\r\n\t\t\t\tif (type.IsUnknown)\r\n\t\t\t\t\ttype = sourceUnit.ResolveTypeName(qualifiedName, referringScope, out alias, ErrorSink, position, true);\r\n\r\n\t\t\t\tReportUnknownType(type, alias, position);\r\n\r\n\t\t\t\treturn type;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n        /// <summary>\r\n        /// Resolves a method of given <see cref=\"DType\"/> by its name.\r\n        /// </summary>\r\n        /// <param name=\"type\">The type of routine being resolved.</param>\r\n        /// <param name=\"methodName\">The name of routine to be resolved.</param>\r\n        /// <param name=\"position\">Position of method call used for error reporting.</param>\r\n        /// <param name=\"referringType\">The type where the seached routine is being called. Can be <c>null</c>.</param>\r\n        /// <param name=\"referringRoutine\">The routine where the searched routine is being called. Can be <c>null</c>.</param>\r\n        /// <param name=\"calledStatically\">True if the searched routine is called statically - if it uses static method call syntax.\r\n        /// This affects the __call or __callStatic method lookup.\r\n        /// It affects also the error reporting, where for instance method calls, the bad visibility error is\r\n        /// ignored and falls back to return <see cref=\"UnknownMethod\"/>.</param>\r\n        /// <param name=\"checkVisibilityAtRuntime\">Will determine if the routine call must be checked for visibility at runtime.</param>\r\n        /// <param name=\"isCallMethod\">Will determine if __call or __callStatic magic methods were found instead.</param>\r\n        /// <returns>The resolved routine. Cannot return <c>null</c>.</returns>\r\n        public DRoutine/*!*/ ResolveMethod(DType/*!*/ type, Name methodName, Text.Span position,\r\n\t\t\tPhpType referringType, PhpRoutine referringRoutine, bool calledStatically,\r\n            out bool checkVisibilityAtRuntime, out bool isCallMethod)\r\n\t\t{\r\n\t\t\tcheckVisibilityAtRuntime = false;\r\n            isCallMethod = false;\r\n\r\n\t\t\t// we cannot resolve a method unless we know the inherited members:\r\n\t\t\tif (type.IsDefinite)\r\n\t\t\t{\r\n                //// if the method is a constructor, \r\n                //KnownType known;\r\n                //if (methodName.IsConstructName || (known = type as KnownType) != null && methodName.Equals(known.QualifiedName.Name))\r\n                //    return ResolveConstructor(type, position, referringType, referringRoutine, out checkVisibilityAtRuntime);\r\n\r\n\t\t\t\tDRoutine routine;\r\n\t\t\t\tGetMemberResult member_result;\r\n\r\n\t\t\t\tmember_result = type.GetMethod(methodName, referringType, out routine);\r\n\r\n                // Look for __call or __callStatic magic methods if no method was found:\r\n                // Note: __call when looking for instance method is disabled, since there can be the searched method in some future override.\r\n                if (member_result == GetMemberResult.NotFound && calledStatically)\r\n                {\r\n                    // in PHP, it is possible to call instance methods statically if we are in instance method context.\r\n                    // In such case we have to look for __call instead of __callStatic:\r\n                    \r\n                    // determine the proper call method:\r\n                    // use __call for instance method invocation, including static method invocation within the current type (e.g. A::foo(), parent::foo(), ...)\r\n                    // use __callStatic for static method invocation\r\n                    Name callMethodName =\r\n                        (!calledStatically ||   // just to have complete condition here, always false\r\n                        (referringRoutine != null && referringType != null && !referringRoutine.IsStatic &&  // in non-static method\r\n                        type.TypeDesc.IsAssignableFrom(referringType.TypeDesc)) // {CurrentType} is inherited from or equal {type}\r\n                        ) ? Name.SpecialMethodNames.Call : Name.SpecialMethodNames.CallStatic;\r\n\r\n                    member_result = type.GetMethod(callMethodName, referringType, out routine);\r\n\r\n                    if (member_result != GetMemberResult.NotFound)\r\n                        isCallMethod = true;\r\n                }\r\n\r\n\t\t\t\tswitch (member_result)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\t\treturn routine;\r\n\r\n                    case GetMemberResult.NotFound:\r\n                        {\r\n                            // allow calling CLR constructor:\r\n                            KnownType known;\r\n                            if (/*methodName.IsConstructName || */(known = type as KnownType) != null && methodName.Equals(known.QualifiedName.Name))\r\n                                return ResolveConstructor(type, position, referringType, referringRoutine, out checkVisibilityAtRuntime);\r\n\r\n                            //\r\n                            if (calledStatically) // throw an error only in we are looking for static method, instance method can be defined in some future inherited class\r\n                                ErrorSink.Add(Errors.UnknownMethodCalled, SourceUnit, position, type.FullName, methodName);\r\n                            return new UnknownMethod(type, methodName.Value);\r\n                        }\r\n\r\n\t\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\t\t{\r\n                            if (!calledStatically)    // instance method will check the routine dynamically, there can be some override later\r\n                                return new UnknownMethod(type, methodName.Value);\r\n\r\n\t\t\t\t\t\t\tif (referringType == null && referringRoutine == null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// visibility must be checked at run-time:\r\n\t\t\t\t\t\t\t\tcheckVisibilityAtRuntime = true;\r\n\t\t\t\t\t\t\t\treturn routine;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// definitive error:\r\n\t\t\t\t\t\t\t\tif (routine.IsPrivate)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tErrorSink.Add(Errors.PrivateMethodCalled, SourceUnit, position, type.FullName, methodName.Value,\r\n\t\t\t\t\t\t\t\t\t\treferringType.FullName);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tErrorSink.Add(Errors.ProtectedMethodCalled, SourceUnit, position, type.FullName, methodName.Value,\r\n\t\t\t\t\t  referringType.FullName);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn new UnknownMethod(type, methodName.Value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdefault:\r\n                        throw new InvalidOperationException();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// warning (if any) reported by the type resolver:\r\n\t\t\t\treturn new UnknownMethod(type, methodName.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Resolves constructor of the specified type within the current context (location).\r\n\t\t/// </summary>\r\n        public DRoutine/*!*/ ResolveConstructor(DType/*!*/ type, Text.Span position, PhpType referringType,\r\n\t\t\tPhpRoutine referringRoutine, out bool checkVisibilityAtRuntime)\r\n\t\t{\r\n\t\t\tcheckVisibilityAtRuntime = false;\r\n\t\t\tKnownRoutine ctor;\r\n\r\n\t\t\t// Do resolve ctor despite of the indefiniteness of the type to make error reporting consistent\r\n\t\t\t// when accessing the constructors thru the new operator.\r\n\r\n\t\t\tswitch (type.GetConstructor(referringType, out ctor))\r\n\t\t\t{\r\n\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\treturn ctor;\r\n\r\n\t\t\t\tcase GetMemberResult.NotFound:\r\n\t\t\t\t\t// default ctor to be used:\r\n\t\t\t\t\treturn new UnknownMethod(type);\r\n\r\n\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\tif (referringType == null && referringRoutine == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// visibility must be checked at run-time:\r\n\t\t\t\t\t\tcheckVisibilityAtRuntime = true;\r\n\t\t\t\t\t\treturn ctor;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// definitive error:\r\n\t\t\t\t\t\tif (ctor.IsPrivate)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tErrorSink.Add(Errors.PrivateCtorCalled, SourceUnit, position, type.FullName,\r\n\t\t\t\t\t\t\t\tctor.FullName, referringType.FullName);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tErrorSink.Add(Errors.ProtectedCtorCalled, SourceUnit, position, type.FullName,\r\n\t\t\t\t\t\t\t\tctor.FullName, referringType.FullName);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn new UnknownMethod(type);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n                    throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Resolves static properties.\r\n\t\t/// </summary>\r\n\t\tpublic DProperty/*!*/ ResolveProperty(DType/*!*/ type, VariableName propertyName, Text.Span position, bool staticOnly,\r\n\t\t\tPhpType referringType, PhpRoutine referringRoutine, out bool checkVisibilityAtRuntime)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null);\r\n\r\n\t\t\tcheckVisibilityAtRuntime = false;\r\n\r\n\t\t\t// we cannot resolve a property unless we know the inherited members:\r\n\t\t\tif (type.IsDefinite)\r\n\t\t\t{\r\n\t\t\t\tDProperty property;\r\n\t\t\t\tGetMemberResult member_result = type.GetProperty(propertyName, referringType, out property);\r\n\r\n\t\t\t\tswitch (member_result)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\t\tif (staticOnly && !property.IsStatic) goto case GetMemberResult.NotFound;\r\n\t\t\t\t\t\treturn property;\r\n\r\n\t\t\t\t\tcase GetMemberResult.NotFound:\r\n\t\t\t\t\t\tErrorSink.Add(Errors.UnknownPropertyAccessed, SourceUnit, position, type.FullName, propertyName);\r\n\t\t\t\t\t\treturn new UnknownProperty(type, propertyName.Value);\r\n\r\n\t\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\t\tif (referringType == null && referringRoutine == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// visibility must be checked at run-time:\r\n\t\t\t\t\t\t\tcheckVisibilityAtRuntime = true;\r\n\t\t\t\t\t\t\treturn property;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// definitive error:\r\n\t\t\t\t\t\t\tif (property.IsPrivate)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tErrorSink.Add(Errors.PrivatePropertyAccessed, SourceUnit, position, type.FullName, propertyName.Value,\r\n\t\t\t\t\t\t\t\t\treferringType.FullName);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tErrorSink.Add(Errors.ProtectedPropertyAccessed, SourceUnit, position, type.FullName, propertyName.Value,\r\n\t\t\t\t\t\t\t\t\treferringType.FullName);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn new UnknownProperty(type, propertyName.Value);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdefault:\r\n                        throw new InvalidOperationException();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// warning (if any) reported by the type resolver:\r\n\t\t\t\treturn new UnknownProperty(type, propertyName.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal DConstant ResolveClassConstantName(DType/*!*/ type, VariableName constantName,\r\n            Text.Span position, PhpType referringType, PhpRoutine referringRoutine, out bool checkVisibilityAtRuntime)\r\n\t\t{\r\n\t\t\tcheckVisibilityAtRuntime = false;\r\n\r\n\t\t\t// we cannot resolve a class constant unless we know the inherited members:\r\n\t\t\tif (type.IsDefinite)\r\n\t\t\t{\r\n\t\t\t\tClassConstant constant;\r\n\t\t\t\tGetMemberResult member_result = type.GetConstant(constantName, referringType, out constant);\r\n\r\n\t\t\t\tswitch (member_result)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\t\treturn constant;\r\n\r\n\t\t\t\t\tcase GetMemberResult.NotFound:\r\n\t\t\t\t\t\tErrorSink.Add(Errors.UnknownClassConstantAccessed, SourceUnit, position, type.FullName, constantName);\r\n\t\t\t\t\t\treturn new UnknownClassConstant(type, constantName.Value);\r\n\r\n\t\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\t\tif (referringType == null && referringRoutine == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// visibility must be checked at run-time:\r\n\t\t\t\t\t\t\tcheckVisibilityAtRuntime = true;\r\n\t\t\t\t\t\t\treturn constant;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// definitive error:\r\n\t\t\t\t\t\t\tif (constant.IsPrivate)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tErrorSink.Add(Errors.PrivateConstantAccessed, SourceUnit, position, type.FullName, constantName.Value,\r\n\t\t\t\t  referringType.FullName);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tErrorSink.Add(Errors.ProtectedConstantAccessed, SourceUnit, position, type.FullName, constantName.Value,\r\n\t\t\t\t  referringType.FullName);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn new UnknownClassConstant(type, constantName.Value);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdefault:\r\n                        throw new InvalidOperationException();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// warning (if any) reported by the type resolver:\r\n\t\t\t\treturn new UnknownClassConstant(type, constantName.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal DConstant ResolveGlobalConstantName(QualifiedName qualifiedName, Text.Span position)\r\n\t\t{\r\n\t\t\tDebug.Assert(currentScope.IsValid, \"Scope is available only during full analysis.\");\r\n\r\n\t\t\tQualifiedName? alias;\r\n\t\t\tDConstant result = sourceUnit.ResolveConstantName(qualifiedName, currentScope, out alias, ErrorSink, position, false);\r\n\r\n\t\t\tif (result.IsUnknown)\r\n\t\t\t{\r\n\t\t\t\tif (alias.HasValue)\r\n\t\t\t\t\tErrorSink.Add(Warnings.UnknownConstantUsedWithAlias, SourceUnit, position, qualifiedName, alias);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// TODO:\r\n\t\t\t\t\t// ErrorSink.Add(Warnings.UnknownConstantUsed, SourceUnit, position, qualifiedName);\r\n\t\t\t\t\t// do not report unknown constants (they may be defined by define() as well as added at run-time by Phalanger)\r\n\t\t\t\t\t// future feature: analyzed define()'s and check run-time added constants\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Miscellaneous\r\n\r\n\t\tpublic void AddLambdaFcnDeclaration(FunctionDecl decl)\r\n\t\t{\r\n            var ast = sourceUnit.Ast;\r\n\t\t\tast.Statements = ArrayUtils.Concat(ast.Statements, decl);\r\n\t\t}\r\n\r\n        internal void SetEntryPoint(PhpRoutine/*!*/ routine, Text.Span position)\r\n\t\t{\r\n\t\t\t// pure entry point is a static parameterless \"Main\" method/function:\r\n\t\t\tif (!sourceUnit.CompilationUnit.IsPure || !routine.Name.Equals(PureAssembly.EntryPointName)\r\n\t\t\t  || !routine.IsStatic || routine.Signature.ParamCount > 0)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tPureCompilationUnit pcu = (PureCompilationUnit)sourceUnit.CompilationUnit;\r\n\r\n\t\t\tif (pcu.EntryPoint != null)\r\n\t\t\t{\r\n\t\t\t\tErrorSink.Add(Errors.EntryPointRedefined, SourceUnit, position);\r\n\t\t\t\tErrorSink.Add(Errors.RelatedLocation, pcu.EntryPoint.SourceUnit, pcu.EntryPoint.Span);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tpcu.SetEntryPoint(routine);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static void ValidateLabels(ErrorSink/*!*/ errors, SourceUnit/*!*/ sourceUnit,\r\n\t\t\tDictionary<VariableName, Statement>/*!*/ labels)\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<VariableName, Statement> entry in labels)\r\n\t\t\t{\r\n\t\t\t\tLabelStmt label = entry.Value as LabelStmt;\r\n\t\t\t\tif (label != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!label.IsReferred)\r\n\t\t\t\t\t\terrors.Add(Warnings.UnusedLabel, sourceUnit, label.Span, entry.Key);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.UndefinedLabel, sourceUnit, entry.Value.Span, entry.Key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AppCompiler.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\nusing System.Linq;\r\n\r\nnamespace PHP.Core\r\n{\r\n\tusing Targets = ApplicationCompiler.Targets;\r\n\tusing System.Text;\r\n\tusing System.Configuration;\r\n\r\n\t#region InvalidCommandLineArgumentException\r\n\r\n\tpublic sealed class InvalidCommandLineArgumentException : Exception\r\n\t{\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate readonly string name;\r\n\r\n\t\tpublic string/*!*/ Value { get { return value; } }\r\n\t\tprivate readonly string/*!*/ value;\r\n\r\n\t\tinternal InvalidCommandLineArgumentException(string name, string/*!*/ value, Exception/*!*/ inner)\r\n\t\t\t: base(inner.Message, inner)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\tinternal InvalidCommandLineArgumentException(string name, string/*!*/ value, string/*!*/ message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\tpublic void Report(ErrorSink/*!*/ sink)\r\n\t\t{\r\n\t\t\tif (sink == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"sink\");\r\n\t\t\t\t\r\n\t\t\tif (name != null)\r\n                sink.Add(FatalErrors.InvalidCommandLineArgument, null, Text.Span.Invalid, name, Message);\r\n\t\t\telse\r\n                sink.Add(FatalErrors.InvalidCommandLineArgumentNoName, null, Text.Span.Invalid, Message);\r\n\t\t}\r\n\t}\r\n\t\r\n\t#endregion\r\n\r\n\t#region CompilationParameters\r\n\t\r\n\t[Serializable]\r\n\tpublic sealed class CompilationParameters\r\n    {\r\n        #region Nested struct: ReferenceItem\r\n\r\n        /// <summary>\r\n        /// Represents referenced assembly.\r\n        /// </summary>\r\n        [Serializable]\r\n        public struct ReferenceItem\r\n        {\r\n            public string Reference;\r\n            public string LibraryRoot;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n\t\t/// Targets. Valid targets from command line are \"dll\", \"console\", \"web\" and \"winexe\" (in future versions).\r\n\t\t/// </summary>\r\n\t\tpublic Targets Target { get { return target; } set { target = value; } }\r\n\t\tprivate Targets target = Targets.None;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full paths to source files to be compiled.\r\n\t\t/// </summary>\r\n\t\tpublic List<FullPath> SourcePaths { get { return sourcePaths; } }\r\n\t\tprivate List<FullPath> sourcePaths = new List<FullPath>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full paths to directories to be recursively searched for files.\r\n\t\t/// </summary>\r\n\t\tpublic List<FullPath>/*!*/ SourceDirs { get { return sourceDirs; } }\r\n        private List<FullPath>/*!*/ sourceDirs = new List<FullPath>();\r\n\r\n        /// <summary>\r\n        /// Full paths to directories or files which should be skipped during compilation.\r\n        /// </summary>\r\n        public List<string>/*!*/ SkipPaths { get { return skipPaths; } }\r\n        private List<string>/*!*/ skipPaths = new List<string>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Paths to configuration files.\r\n\t\t/// </summary>\r\n\t\tpublic List<FullPath>/*!*/ ConfigPaths { get { return configPaths; } }\r\n\t\tprivate List<FullPath>/*!*/ configPaths = new List<FullPath>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full path to the output file (for applications targets) or directory (for web targets).\r\n\t\t/// </summary>\r\n\t\tpublic FullPath OutPath { get { return outPath; } set { outPath = value; } }\r\n\t\tprivate FullPath outPath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full path to the documentation file that should be generated.\r\n\t\t/// </summary>\r\n\t\tpublic FullPath DocPath { get { return docPath; } set { docPath = value; } }\r\n\t\tprivate FullPath docPath = FullPath.Empty;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full path to application root directory. All source files paths are relative to this path.\r\n\t\t/// </summary>\r\n\t\tpublic FullPath SourceRoot { get { return sourceRoot; } set { sourceRoot = value; } }\r\n\t\tprivate FullPath sourceRoot;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full path of the script which contains entry point \r\n\t\t/// (only for <see cref=\"Targets.Console\"/> and <see cref=\"Targets.WinApp\"/>).\r\n\t\t/// </summary>\r\n\t\tpublic FullPath StartupFile { get { return startupFile; } set { startupFile = value; } }\r\n\t\tprivate FullPath startupFile;\r\n\r\n\t\tpublic QualifiedName? StartupFunction { get { return startupFunction; } set { startupFunction = value; } }\r\n\t\tprivate QualifiedName? startupFunction;\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Whether to generate debugging information (.pdb files).\r\n\t\t/// </summary>\r\n\t\tpublic bool? Debuggable { get { return debuggable; } set { debuggable = value; } }\r\n\t\tprivate bool? debuggable;\r\n\r\n        /// <summary>\r\n        /// Whether to force saving the resulting assembly with 32BIT+ flag.\r\n        /// </summary>\r\n        /// <remarks>This is useful for debuggers or deployment when 64bit execution is not supported.</remarks>\r\n        public bool Force32Bit { get; set; }\r\n\r\n\t\tpublic bool? StaticInclusions { get { return staticInclusions; } set { staticInclusions = value; } }\r\n\t\tprivate bool? staticInclusions;\r\n\r\n\t\tpublic bool Pure { get { return pure; } set { pure = value; } }\r\n\t\tprivate bool pure;\r\n\r\n\t\tpublic bool IsMTA { get { return isMTA; } set { isMTA = value; } }\r\n\t\tprivate bool isMTA;\r\n\t\t\r\n\t\tpublic LanguageFeatures? LanguageFeatures { get { return languageFeatures; } set { languageFeatures = value; } }\r\n\t\tprivate LanguageFeatures? languageFeatures;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encoding for script files.\r\n\t\t/// </summary>\r\n\t\tpublic Encoding Encoding { get { return encoding; } set { encoding = value; } }\r\n\t\tprivate Encoding encoding;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A key to sign the assembly with or a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tpublic StrongNameKeyPair Key { get { return key; } set { key = value; } }\r\n\t\tprivate StrongNameKeyPair key;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Version of the resuting assembly.\r\n\t\t/// </summary>\r\n\t\tpublic Version Version { get { return version; } set { version = value; } }\r\n\t\tprivate Version version = new Version(1, 0, 0, 0);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Win32 icon to include in the resulting assembly.\r\n\t\t/// </summary>\r\n\t\tpublic Win32IconResource Icon { get { return icon; } set { icon = value; } }\r\n\t\tprivate Win32IconResource icon = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extensions (e.g. php,inc) of files included in the web application.\r\n\t\t/// Empty list means all extensions.\r\n\t\t/// </summary>\r\n\t\tpublic List<string>/*!*/ FileExtensions { get { return fileExtensions; } }\r\n\t\tprivate List<string>/*!*/ fileExtensions = new List<string>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full paths to referenced assemblies.\r\n\t\t/// </summary>\r\n        public List<ReferenceItem>/*!*/ References { get { return references; } }\r\n        private List<ReferenceItem>/*!*/ references = new List<ReferenceItem>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full paths to referenced resources.\r\n\t\t/// </summary>\r\n        /// <remarks>If you want more control over resources, put <see cref=\"ResourceFileReference\"/> here</remarks>\r\n        public List<FileReference> Resources { get { return resources; } }\r\n        private List<FileReference> resources = new List<FileReference>();\r\n\r\n\t\tpublic WarningGroups DisableWarnings { get { return disableWarnings; } set { disableWarnings = value; } }\r\n\t\tprivate WarningGroups disableWarnings = WarningGroups.None;\r\n\r\n\t\tpublic WarningGroups EnableWarnings { get { return enableWarnings; } set { enableWarnings = value; } }\r\n\t\tprivate WarningGroups enableWarnings = WarningGroups.None;\r\n\r\n\t\tpublic int[]/*!*/ DisableWarningNumbers \r\n\t\t{ \r\n\t\t\tget { return disableWarningNumbers; } \r\n\t\t\tset { if (value == null) throw new ArgumentNullException(\"value\"); disableWarningNumbers = value; } \r\n\t\t}\r\n\t\tprivate int[]/*!*/ disableWarningNumbers = ArrayUtils.EmptyIntegers;\r\n\r\n        /// <summary>\r\n        /// Whether warnings will reported as errors, so they will cause compilation process to not finish.\r\n        /// </summary>\r\n        public bool TreatWarningsAsErrors { get; set; }\r\n\t\r\n\t\t#endregion\r\n\t\r\n\t\t#region ApplyToConfiguration\r\n\r\n\t\tpublic void ApplyToConfiguration(CompilerConfiguration/*!*/ compilerConfig)\r\n\t\t{\r\n\t\t\tif (compilerConfig == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"compilerConfig\");\r\n\r\n\t\t\tif (languageFeatures.HasValue)\r\n\t\t\t{\r\n\t\t\t\tcompilerConfig.Compiler.LanguageFeatures = languageFeatures.Value;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// sets the default language features for pure mode if not set yet:\r\n\t\t\t\tif (pure && !compilerConfig.Compiler.LanguageFeaturesSet)\r\n\t\t\t\t\tcompilerConfig.Compiler.LanguageFeatures = Core.LanguageFeatures.PureModeDefault;\r\n\t\t\t}\r\n\r\n\t\t\t// cmd line:\r\n\t\t\tif (debuggable.HasValue)\r\n\t\t\t\tcompilerConfig.Compiler.Debug = (bool)debuggable;\r\n\r\n\t\t\tif (staticInclusions.HasValue)\r\n\t\t\t\tcompilerConfig.Compiler.EnableStaticInclusions = staticInclusions;\r\n\r\n            // paths skipped during compilation are also forced dynamic inclusion paths (otherwise static inclusion could force compilation of these sources files)\r\n            foreach (string path in skipPaths)\r\n            {\r\n                compilerConfig.Compiler.ForcedDynamicInclusionPaths.Add(path);\r\n            }\r\n\r\n\t\t\t// static inclusion will be enabled for non-web applications if not set:\r\n\t\t\tif (!compilerConfig.Compiler.EnableStaticInclusions.HasValue && target != Targets.Web)\r\n\t\t\t\tcompilerConfig.Compiler.EnableStaticInclusions = true;\r\n\r\n\t\t\tif (encoding != null)\r\n\t\t\t\tcompilerConfig.Globalization.PageEncoding = encoding;\r\n\r\n\t\t\t// enable all warnings in pure mode by default:\r\n\t\t\tif (pure)\r\n\t\t\t\tcompilerConfig.Compiler.DisabledWarnings = WarningGroups.None;\r\n\r\n\t\t\t// disableWarnings and enableWarnings sets are disjoint:\r\n\t\t\tcompilerConfig.Compiler.DisabledWarnings |= disableWarnings;\r\n\t\t\tcompilerConfig.Compiler.DisabledWarnings &= ~enableWarnings;\r\n            compilerConfig.Compiler.DisabledWarningNumbers = compilerConfig.Compiler.DisabledWarningNumbers.Concat(disableWarningNumbers).Distinct().ToArray();\r\n\r\n            // Treat Warnings as Errors\r\n            compilerConfig.Compiler.TreatWarningsAsErrors = this.TreatWarningsAsErrors;\r\n\r\n\t\t\t// sets source root (overrides any config setting):\r\n\t\t\tcompilerConfig.Compiler.SourceRoot = new FullPath(sourceRoot);\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\r\n\r\n\t\tinternal void Validate()\r\n\t\t{\r\n\t\t\t// comparing value type with null //if (outPath == null) throw new ArgumentNullException(\"outPath\");// \r\n\t\t\tif (sourcePaths == null) throw new ArgumentNullException(\"sourcePaths\");\r\n\t\t\tif (resources == null) throw new ArgumentNullException(\"resources\");\r\n\t\t\tif (sourceDirs == null) throw new ArgumentNullException(\"sourceDirs\");\r\n\t\t\tif (sourcePaths.Count == 0 && sourceDirs.Count == 0) throw new ArgumentException(\"sourcePaths\");\r\n\t\t\tif (!pure && (target == Targets.Console || target == Targets.WinApp)) startupFile.EnsureNonEmpty(\"startupFile\");\r\n\t\t}\r\n    }\r\n    #region Resources\r\n    /// <summary>General file reference</summary>\r\n    [Serializable]\r\n    public class FileReference {\r\n        /// <summary>Contains value of the <see cref=\"Path\"/> property</summary>\r\n        private readonly FullPath path;\r\n        /// <summary>Full path of file</summary>\r\n        public FullPath Path { get { return path; } }\r\n        /// <summary>\r\n\t\t/// Creates file reference from arbitraray path <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"arbitraryPath\">Arbitrary path.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"arbitraryPath\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n\t\tpublic FileReference(string arbitraryPath){\r\n            this.path = new FullPath(arbitraryPath);\r\n\t\t}\r\n        /// <summary>CTor from <see cref=\"FullPath\"/></summary>\r\n        /// <param name=\"fullPath\"><see cref=\"FullPath\"/> to reference</param>\r\n        public FileReference(FullPath fullPath) {\r\n            this.path = fullPath;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates file reference from relative path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"relativePath\">Arbitrary path.</param>\r\n\t\t/// <param name=\"root\">Root for the path.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"relativePath\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        public FileReference(string/*!*/ relativePath, FullPath root){\r\n\t\t\tthis.path=new FullPath(relativePath,root);\r\n\t\t}\r\n    }\r\n    /// <summary>Points to file that contains resource for assembly</summary>\r\n    [Serializable]\r\n    public sealed class ResourceFileReference:FileReference{\r\n        /// <summary>\r\n        /// Creates resource reference from arbitrary path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"arbitraryPath\">Arbitrary path.</param>\r\n        /// <remarks>Created resource is public and has same name is is name of file</remarks>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"arbitraryPath\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        public ResourceFileReference(string arbitraryPath)\r\n            :base(arbitraryPath) {\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            this.name = base.Path.FileName;\r\n        }\r\n        /// <summary>CTor from <see cref=\"FullPath\"/></summary>\r\n        /// <param name=\"fullPath\"><see cref=\"FullPath\"/> to reference</param>\r\n        /// <remarks>Created resource is public and has same name is is name of file</remarks>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        public ResourceFileReference(FullPath fullPath) :base(fullPath) {\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            this.name = base.Path.FileName;\r\n        }\r\n        /// <summary>\r\n        /// Creates resource reference path from relative path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"relativePath\">Arbitrary path.</param>\r\n        /// <param name=\"root\">Root for the path.</param>\r\n        /// <remarks>Created resource is public and has same name is is name of file</remarks>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"relativePath\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        public ResourceFileReference(string/*!*/ relativePath, FullPath root)\r\n            : base(relativePath, root) {\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            this.name = base.Path.FileName;\r\n        }\r\n        /// <summary>\r\n        /// Creates resource reference from arbitrary path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// With given name and visibility.\r\n        /// </summary>\r\n        /// <param name=\"arbitraryPath\">Arbitrary path.</param>\r\n        /// <param name=\"isPublic\">Indicates if resource is public</param>\r\n        /// <param name=\"name\">Name of resource</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"arbitraryPath\"/> is a <B>null</B> reference. -or- <paramref name=\"name\"/> is null</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        public ResourceFileReference(string arbitraryPath, string name, bool isPublic)\r\n            :base(arbitraryPath){\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            if(name == null) throw new ArgumentNullException(\"name\");\r\n            this.name = name;\r\n            this.isPublic = isPublic;\r\n        }\r\n        /// <summary>\r\n        /// Creates resource reference path from relative path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"relativePath\">Arbitrary path.</param>\r\n        /// <param name=\"root\">Root for the path.</param>\r\n        /// <param name=\"isPublic\">Indicates if resource is public</param>\r\n        /// <param name=\"name\">Name of resource</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"relativePath\"/> is a <B>null</B> reference. -or- <paramref name=\"name\"/> is null</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        public ResourceFileReference(string/*!*/ relativePath, FullPath root, string name, bool isPublic)\r\n            : base(relativePath, root) {\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            if(name == null) throw new ArgumentNullException(\"name\");\r\n            this.name = name;\r\n            this.isPublic = isPublic;\r\n        }\r\n        /// <summary>CTor from <see cref=\"FullPath\"/> and attributes</summary>\r\n        /// <param name=\"fullPath\"><see cref=\"FullPath\"/> to reference</param>\r\n        /// <exception cref=\"FileNotFoundException\">File represented by current path does not exist (or it is directory)</exception>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is null</exception>\r\n        /// <param name=\"isPublic\">Indicates if resource is public</param>\r\n        /// <param name=\"name\">Name of resource</param>\r\n        public ResourceFileReference(FullPath fullPath, string name, bool isPublic)\r\n            : base(fullPath) {\r\n            if(!this.Path.FileExists) throw new FileNotFoundException(\"ResourceFileReference can be constructed only from existing file.\");\r\n            if(name == null) throw new ArgumentNullException(\"name\");\r\n            this.name = name;\r\n            this.isPublic = isPublic;\r\n        }\r\n        /// <summary>Contains value of the <see cref=\"Name\"/> property</summary>\r\n        private string name;\r\n        /// <summary>Contains value of the <see cref=\"IsPublic\"/> property</summary>\r\n        private bool isPublic = true;\r\n        /// <summary>Gets name of the resource</summary>\r\n        public string Name { get { return name; } }\r\n        /// <summary>Gets value indicating is this resource is public</summary>\r\n        public bool IsPublic { get { return isPublic; } }\r\n        /// <summary>Converts list of files and directories to list of resource files</summary>\r\n        /// <param name=\"files\">Files and directories. Directories are parsed recursivelly. Files are added immediatelly. If any item is <see cref=\"ResourceFileReference\"/> it is preserved with no changed.</param>\r\n        /// <returns><see cref=\"List&lt;ResourceFileReference>\"/></returns>\r\n        /// <seealso cref=\"FileSystemUtils.GetAllFiles\"/>\r\n        public static List<ResourceFileReference> FromFiles(IEnumerable<FileReference> files) {\r\n            List<FileReference> allfiles = FileSystemUtils.GetAllFiles(files);\r\n            List<ResourceFileReference> ret = new List<ResourceFileReference>(allfiles.Count);\r\n            foreach (FileReference file in allfiles)\r\n            {\r\n                if(file is ResourceFileReference)\r\n                    ret.Add((ResourceFileReference)file);\r\n                else\r\n                    ret.Add(new ResourceFileReference(file.Path));\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n    #endregion\r\n    #endregion\r\n\t\r\n\t#region CommandLineParser\r\n\r\n\tpublic sealed class CommandLineParser\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\tpublic CommandLineParser(CompilationParameters/*!*/ ps)\r\n\t\t{\r\n\t\t\tif (ps == null)\r\n\t\t\t\tthrow new ArgumentException(\"ps\");\r\n\t\t\r\n\t\t\tthis.ps = ps;\r\n#if DEBUG\r\n\t\t\tverbose = true;\r\n#else\r\n\t\t\tverbose = false;\r\n#endif\r\n\t\t}\r\n\r\n\t\tpublic CommandLineParser()\r\n\t\t\t: this(new CompilationParameters())\r\n\t\t{\r\n\t\t\tps.SourceRoot = FullPath.GetCurrentDirectory();\t\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic CompilationParameters/*!*/ Parameters { get { return ps; } }\r\n\t\tprivate CompilationParameters/*!*/ ps;\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Level of verbosity.\r\n\t\t/// </summary>\r\n\t\tpublic bool Verbose { get { return verbose; } set { verbose = value; } }\r\n\t\tprivate bool verbose;\r\n\r\n\t\tpublic bool ShowHelp { get { return showHelp; } set { showHelp = value; } }\r\n\t\tprivate bool showHelp = false;\r\n\r\n\t\tpublic bool DrawInclusionGraph { get { return drawInclusionGraph; } set { drawInclusionGraph = value; } }\r\n\t\tprivate bool drawInclusionGraph = false;\r\n\r\n\t\tpublic bool RedirectErrors { get { return redirectErrors; } set { redirectErrors = value; } }\r\n\t\tprivate bool redirectErrors = false;\r\n\r\n\t\tpublic bool Quiet { get { return quiet; } set { quiet = value; } }\r\n\t\tprivate bool quiet = false;\r\n\r\n\t\t#region Options\r\n\r\n\t\tprivate static string[] options;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Displays a help.\r\n\t\t/// </summary>\r\n\t\tpublic static KeyValuePair<string, string>[]/*!*/ GetSupportedOptions()\r\n\t\t{\r\n\t\t\tif (options == null)\r\n\t\t\t{\r\n\t\t\t\toptions = new string[]\r\n\t\t\t\t{\r\n\t\t\t\t\t\"/help\", \"help\",\r\n\t\t\t\t\t\"/debug[+|-]\", \"debug\",\r\n\t\t\t\t\t\"/target:web\", \"target_web\",\r\n\t\t\t\t\t\"/target:exe\", \"target_exe\",\r\n\t\t\t\t\t\"/target:dll\", \"target_dll\",\r\n\t\t\t\t\t\"/target:winexe\", \"target_winexe\",\r\n\t\t\t\t\t\"/pure[+|-]\", \"pure\",\r\n\t\t\t\t\t\"/lang:[PHP4|PHP5|PHP6|CLR]\", \"lang\",\r\n\t\t\t\t\t\"/out:<path>\", \"out_path\",\r\n\t\t\t\t\t// TODO:\r\n\t\t\t\t\t// \"/doc\",\"doc\",\r\n\t\t\t\t\t// \"/doc:<path>\",\"doc_path\",\r\n\t\t\t\t\t\"/root:<path>\", \"root_path\",\r\n\t\t\t\t\t\"/config:<path>\", \"config_path\",\r\n\t\t\t\t\t\"/r[eference]:<path>\", \"reference_path\",\r\n\t\t\t\t\t\"/entrypoint:<script>\", \"entrypoint\",\r\n\t\t\t\t\t\"/static[+|-]\", \"static\",\r\n\t\t\t\t\t\"/skip:<path>\", \"skip\",\r\n\t\t\t\t\t\"/recurse:<dir path>\", \"recurse\",\r\n\t\t\t\t\t\"/ext:<extension list>\", \"ext\",\r\n\t\t\t\t\t\"/encoding:<encoding>\", \"encoding\",\r\n\t\t\t\t\t\"/key:<snk file>\", \"key\",\r\n\t\t\t\t\t\"/version:#.#.#.#\", \"version\",\r\n\t\t\t\t\t\"/win32icon:<file>\", \"win32icon\",\r\n\t\t\t\t\t\"/mta[+|-]\", \"mta\",\r\n\t\t\t\t\t\"/res[ource]:<path>[,name[,public|private]]\", \"resource\",\r\n\t\t\t\t\t\"/nowarn:<warning numbers>\", \"nowarn_warning_numbers\",\r\n\t\t\t\t\t\"/dw:DeferredToRuntime\", \"dw_DeferredToRuntime\",\r\n\t\t\t\t\t\"/dw:InclusionsMapping\", \"dw_InclusionsMapping\",\r\n\t\t\t\t\t\"/dw:CompilerStrict\", \"dw_CompilerStrict\",\r\n\t\t\t\t\t\"/dw:AmpModifiers\", \"dw_AmpModifiers\",\r\n\t\t\t\t\t\"/ew:<warning>\", \"ew\",\r\n\t\t\t\t\t\"/verbose[+|-]\", \"verbose\",\r\n\t\t\t\t\t\"/quiet\", \"quiet\",\r\n\t\t\t\t\t\"@<path>\", \"at_path\",\r\n\t\t\t\t};\r\n\r\n\t\t\t\tDebug.Assert(options.Length % 2 == 0);\r\n\r\n\t\t\t\tfor (int i = 1; i < options.Length; i += 2)\r\n\t\t\t\t\toptions[i] = CoreResources.GetString(\"phpc_arg_\" + options[i]);\r\n\t\t\t}\r\n\r\n\t\t\tKeyValuePair<string, string>[] result = new KeyValuePair<string, string>[options.Length / 2];\r\n\t\t\tfor (int i = 0, j = 0; i < options.Length; i += 2, j++)\r\n\t\t\t\tresult[j] = new KeyValuePair<string, string>(options[i], options[i + 1]);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parsing\r\n\r\n\t\t/// <summary>\r\n\t\t/// Currently analyzed option.\r\n\t\t/// </summary>\r\n\t\tprivate static string currentOption;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Currently analyzed option's value.\r\n\t\t/// </summary>\r\n\t\tprivate static string currentValue;\r\n\r\n\t\tprivate InvalidCommandLineArgumentException/*!*/ InvalidValue()\r\n\t\t{\r\n\t\t\treturn new InvalidCommandLineArgumentException(currentOption, currentValue, CoreResources.GetString(\"invalid_value\"));\r\n\t\t}\r\n\r\n\t\tprivate InvalidCommandLineArgumentException/*!*/ Exception(string/*!*/ message)\r\n\t\t{\r\n\t\t\treturn new InvalidCommandLineArgumentException(currentOption, currentValue, message);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Processes command line arguments.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">The command line arguments. The list of arguments may be extended (see @ argument).</param>\r\n\t\t/// <returns>Whether all arguments were processed.</returns>\r\n\t\tpublic bool Parse(List<string>/*!*/ args)\r\n\t\t{\r\n\t\t\tif (args == null)\r\n\t\t\t\tthrow new ArgumentException(\"args\");\r\n\r\n\t\t\tstring option_out = null;\r\n\t\t\tstring option_entry_point = null;\r\n\t\t\tList<string> source_paths = new List<string>();\r\n\t\t\tList<string> source_dirs = new List<string>();\r\n            List<string> skip_paths = new List<string>();\r\n\t\t\tList<string> config_paths = new List<string>();\r\n\t\t\t//bool default_doc_path = false;\r\n\r\n\t\t\tint i = 0;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\twhile (i < args.Count)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (String.IsNullOrEmpty(args[i]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (args[i][0] == '@')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// replaces the i-th argument by a list of arguments loaded from the file:\r\n\t\t\t\t\t\tInsertArgumentsFromFile(args, i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (args[i][0] == '/')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint colon = args[i].IndexOf(':');\r\n\r\n\t\t\t\t\t\tif (colon >= 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// option having format \"/name:value\"\r\n\t\t\t\t\t\t\tcurrentOption = args[i].Substring(1, colon - 1).Trim();\r\n\t\t\t\t\t\t\tcurrentValue = args[i].Substring(colon + 1).Trim();\r\n\r\n\t\t\t\t\t\t\tswitch (currentOption.ToLowerInvariant())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase \"out\":\r\n\t\t\t\t\t\t\t\t\toption_out = currentValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t// TODO:\r\n\t\t\t\t\t\t\t\t//case \"doc\":\r\n\t\t\t\t\t\t\t\t//  // TODO: doesn't consider source root\r\n\r\n\t\t\t\t\t\t\t\t//  docPath = new FullPath(currentValue);\r\n\t\t\t\t\t\t\t\t//  default_doc_path = false;\r\n\r\n\t\t\t\t\t\t\t\t//  Directory.CreateDirectory(Path.GetDirectoryName(docPath));\r\n\t\t\t\t\t\t\t\t//  break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"root\":\r\n\t\t\t\t\t\t\t\t\tps.SourceRoot = new FullPath(currentValue);\r\n\t\t\t\t\t\t\t\t\tif (!ps.SourceRoot.DirectoryExists)\r\n\t\t\t\t\t\t\t\t\t\tthrow Exception(CoreResources.GetString(\"directory_not_found\", currentValue));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"entrypoint\":\r\n\t\t\t\t\t\t\t\t\toption_entry_point = currentValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"target\":\r\n\t\t\t\t\t\t\t\t\tswitch (currentValue)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase \"exe\": ps.Target = Targets.Console; break;\r\n\t\t\t\t\t\t\t\t\t\tcase \"winexe\": ps.Target = Targets.WinApp; break;\r\n\t\t\t\t\t\t\t\t\t\tcase \"dll\": ps.Target = Targets.Dll; break;\r\n\t\t\t\t\t\t\t\t\t\tcase \"web\": ps.Target = Targets.Web; break;\r\n\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\tthrow InvalidValue();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"dw\":\r\n\t\t\t\t\t\t\t\tcase \"ew\":\r\n\t\t\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tWarningGroups wg = (WarningGroups)Enum.Parse(typeof(WarningGroups), currentValue, true);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (currentOption == \"dw\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tps.DisableWarnings |= wg;\r\n\t\t\t\t\t\t\t\t\t\t\tps.EnableWarnings &= ~wg;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tps.DisableWarnings &= ~wg;\r\n\t\t\t\t\t\t\t\t\t\t\tps.EnableWarnings |= wg;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthrow InvalidValue();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"nowarn\":\r\n\t\t\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tps.DisableWarningNumbers = ConfigUtils.ParseIntegerList(currentValue, ',', 1, 10000, null);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tcatch (ConfigurationErrorsException)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthrow InvalidValue();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"config\":\r\n\t\t\t\t\t\t\t\t\tconfig_paths.Add(currentValue);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"encoding\":\r\n\t\t\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tps.Encoding = Encoding.GetEncoding(currentValue);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tcatch (NotSupportedException)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthrow InvalidValue();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"ext\":\r\n\t\t\t\t\t\t\t\t\tps.FileExtensions.AddRange(currentValue.Split(',', ';'));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"reference\":\r\n\t\t\t\t\t\t\t\tcase \"r\":\r\n                                    ps.References.Add(new CompilationParameters.ReferenceItem() { Reference = currentValue });\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"resource\":\r\n\t\t\t\t\t\t\t\tcase \"res\":{\r\n\t\t\t\t\t\t\t\t    // TODO: doesn't consider source root\r\n                                    //TODO: Test commandline resources\r\n                                    List<int> commas = new List<int>();\r\n                                    for(int j = 0;j<currentValue.Length;j++)\r\n                                        if(currentValue[j]==',') commas.Add(j);\r\n                                    FileReference res;\r\n                                    switch(commas.Count){\r\n                                        case 0://Path only\r\n                                            res = new FileReference(currentValue);\r\n                                        break;\r\n                                        case 1://Path and name\r\n                                            res = new ResourceFileReference(currentValue.Substring(0, commas[0]), currentValue.Substring(commas[0] + 1),true);\r\n                                        break;\r\n                                        default://Anything,separated,by,commas,name,visibility\r\n                                            bool @public;\r\n                                            switch(currentValue.Substring(commas[commas.Count - 1] + 1).ToLower()) {\r\n                                                case \"private\": @public=false;\r\n                                                break;\r\n                                                case \"public\": @public=true;\r\n                                                break;\r\n                                                default:\r\n                                                    throw new ApplicationException(CoreResources.GetString(\"invalid_resource_visibility\"));\r\n                                            }\r\n                                            string name = currentValue.Substring(commas[commas.Count - 2] + 1, commas[commas.Count - 1] - commas[commas.Count - 2]);\r\n                                            string path = currentValue.Substring(0, commas[commas.Count - 2]);\r\n                                            res = new ResourceFileReference(path, name, @public);\r\n                                        break;\r\n                                    }\r\n\t\t\t\t\t\t\t\t    ps.Resources.Add(res);\r\n\t\t\t\t\t\t\t\t    break;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tcase \"recurse\":\r\n\t\t\t\t\t\t\t\t\tsource_dirs.Add(currentValue);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n                                case \"skip\":\r\n                                    skip_paths.Add(currentValue);\r\n                                    break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"version\":\r\n\t\t\t\t\t\t\t\t\tps.Version = new Version(currentValue);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"key\":\r\n\t\t\t\t\t\t\t\t\tusing (FileStream file = new FileStream(currentValue, FileMode.Open))\r\n\t\t\t\t\t\t\t\t\t\tps.Key = new StrongNameKeyPair(file);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"win32icon\":\r\n\t\t\t\t\t\t\t\t\tps.Icon = new Win32IconResource(currentValue);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"lang\":\r\n\t\t\t\t\t\t\t\tcase \"language\":\r\n\r\n                                    Core.LanguageFeatures features = (LanguageFeatures)0;\r\n                                    foreach (var value in currentValue.ToUpperInvariant().Split(new char[]{'|'}, StringSplitOptions.RemoveEmptyEntries))\r\n                                        switch (value)\r\n                                        {\r\n                                            case \"4\":\r\n                                            case \"PHP4\":\r\n                                                features |= Core.LanguageFeatures.Php4;\r\n                                                break;\r\n\r\n                                            case \"5\":\r\n                                            case \"PHP5\":\r\n                                                features |= Core.LanguageFeatures.Php5;\r\n                                                break;\r\n\r\n                                            case \"PHP/CLR\":\r\n                                            case \"PHPCLR\":\r\n                                            case \"CLR\":\r\n                                                features |= Core.LanguageFeatures.PhpClr;\r\n                                                break;\r\n                                            default:\r\n                                                features |= (LanguageFeatures)Enum.Parse(typeof(LanguageFeatures), value, true);\r\n                                                break;\r\n                                        }\r\n\r\n                                    if (features != 0)\r\n                                        ps.LanguageFeatures = features;\r\n\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tthrow Exception(CoreResources.GetString(\"invalid_option\", currentOption));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// option having format \"/name\"\r\n\t\t\t\t\t\t\tcurrentOption = args[i].Substring(1).Trim();\r\n\r\n\t\t\t\t\t\t\tswitch (currentOption.ToLower())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase \"debug\":\r\n\t\t\t\t\t\t\t\tcase \"debug+\": ps.Debuggable = true; break;\r\n\t\t\t\t\t\t\t\tcase \"debug-\": ps.Debuggable = false; break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"static\":\r\n\t\t\t\t\t\t\t\tcase \"static+\": ps.StaticInclusions = true; break;\r\n\t\t\t\t\t\t\t\tcase \"static-\": ps.StaticInclusions = false; break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"verbose\":\r\n\t\t\t\t\t\t\t\tcase \"verbose+\": verbose = true; break;\r\n\t\t\t\t\t\t\t\tcase \"verbose-\": verbose = false; break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"pure\":\r\n\t\t\t\t\t\t\t\tcase \"pure+\": ps.Pure = true; break;\r\n\t\t\t\t\t\t\t\tcase \"pure-\": ps.Pure = false; break;\r\n\r\n\t\t\t\t\t\t\t\t//case \"doc\":\r\n\t\t\t\t\t\t\t\t//case \"doc+\": default_doc_path = true; break;\r\n\t\t\t\t\t\t\t\t//case \"doc-\": default_doc_path = false; break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"quiet\": quiet = true; break;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tcase \"mta\":\r\n\t\t\t\t\t\t\t\tcase \"mta+\": ps.IsMTA = true; break;\r\n\t\t\t\t\t\t\t\tcase \"mta-\": ps.IsMTA = false; break;\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tcase \"ig\": drawInclusionGraph = true; break;\r\n\t\t\t\t\t\t\t\tcase \"errors-to-stdout\": redirectErrors = true; break;\r\n\r\n\t\t\t\t\t\t\t\tcase \"?\":\r\n\t\t\t\t\t\t\t\tcase \"help\":\r\n\t\t\t\t\t\t\t\t\tshowHelp = true;\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tthrow Exception(CoreResources.GetString(\"invalid_option\", currentOption));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// source files:\r\n\r\n\t\t\t\t\t\tcurrentOption = null;\r\n\t\t\t\t\t\tsource_paths.Add(args[i]);\r\n\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// target not specified => assume console application:\r\n\t\t\t\tif (ps.Target == Targets.None) ps.Target = Targets.Console;\r\n\r\n\t\t\t\t// script source paths:\r\n\t\t\t\tProcessPaths(source_paths, source_dirs, skip_paths, config_paths);\r\n\r\n\t\t\t\t// output directory:\r\n\t\t\t\tProcessOutOption(option_out);\r\n\r\n\t\t\t\t//// sets default doc path:\r\n\t\t\t\t//if (default_doc_path)\r\n\t\t\t\t//  ps.DocPath = new FullPath(Path.ChangeExtension(ps.OutPath, \".xml\"));\r\n\r\n\t\t\t\t// entry point:\r\n\t\t\t\tif (ps.Target != Targets.Dll && ps.Target != Targets.Web)\r\n\t\t\t\t{\r\n\t\t\t\t\tProcessEntryPointOption(option_entry_point);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// file extensions:\r\n\t\t\t\tProcessFileExtensions();\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (InvalidCommandLineArgumentException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tthrow new InvalidCommandLineArgumentException(currentOption, currentValue, e);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void InsertArgumentsFromFile(List<string>/*!*/ args, int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(args[index][0] == '@');\r\n\r\n\t\t\tstring extra_args = File.ReadAllText(args[index].Substring(1));\r\n\r\n\t\t\t// parse the contents of the file\r\n\t\t\tList<string> arg_list = StringToArgumentList(extra_args);\r\n\r\n\t\t\targs.RemoveAt(index);\r\n\t\t\targs.InsertRange(index, arg_list);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether there are files to be compiled and modifies their paths to make them absolute.\r\n\t\t/// Doesn't check existance of that files since this is done be compiler.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ApplicationException\">Error.</exception>\r\n\t\tprivate void ProcessPaths(List<string>/*!*/ files, List<string>/*!*/ dirs, List<string> skipPaths, List<string>/*!*/ configs)\r\n\t\t{\r\n\t\t\tps.SourceDirs.Capacity = ps.SourceDirs.Count + dirs.Count;\r\n\t\t\tps.SourcePaths.Capacity = ps.SourcePaths.Count + files.Count;\r\n\t\t\tps.ConfigPaths.Capacity = ps.ConfigPaths.Count + configs.Count;\r\n\t\t\t\r\n\t\t\tcurrentOption = null;\r\n\r\n\t\t\tforeach (string file in files)\r\n\t\t\t{\r\n\t\t\t\tcurrentValue = file;\r\n\t\t\t\tFullPath p = new FullPath(file, ps.SourceRoot);\r\n\r\n\t\t\t\tif (!p.FileExists)\r\n\t\t\t\t\tthrow Exception(CoreResources.GetString(\"source_file_not_found\", currentValue));\r\n\r\n\t\t\t\tps.SourcePaths.Add(p);\r\n\t\t\t}\r\n\r\n\t\t\tcurrentOption = \"recurse\";\r\n\r\n\t\t\tforeach (string dir in dirs)\r\n\t\t\t{\r\n\t\t\t\tcurrentValue = dir;\r\n\t\t\t\tFullPath p = new FullPath(dir, ps.SourceRoot);\r\n\r\n\t\t\t\tif (!p.DirectoryExists)\r\n\t\t\t\t\tthrow Exception(CoreResources.GetString(\"directory_not_found\", currentValue));\r\n\r\n\t\t\t\tps.SourceDirs.Add(p);\r\n\t\t\t}\r\n\r\n            currentOption = \"skip\";\r\n\r\n            foreach (string path in skipPaths)\r\n            {\r\n                ps.SkipPaths.Add(path);\r\n            }\r\n\r\n\t\t\tcurrentOption = \"config\";\r\n\r\n\t\t\tforeach (string file in configs)\r\n\t\t\t{\r\n\t\t\t\tcurrentValue = file;\r\n\r\n\t\t\t\tFullPath p = new FullPath(file, ps.SourceRoot);\r\n\t\t\t\t\r\n\t\t\t\tif (!p.FileExists)\r\n\t\t\t\t\tthrow Exception(CoreResources.GetString(\"configuration_file_not_found\", currentValue));\r\n\r\n\t\t\t\tps.ConfigPaths.Add(p);\r\n\t\t\t}\r\n\r\n\t\t\t// no source files nor directories specified => adds default (web) or report error:\r\n\t\t\tif (ps.SourceDirs.Count == 0 && ps.SourcePaths.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tif (ps.Target == Targets.Web)\r\n\t\t\t\t{\r\n\t\t\t\t\tps.SourceDirs.Add(ps.SourceRoot);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow Exception(CoreResources.GetString(\"no_source_files_to_compile\"));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// default config file in source root:\r\n\t\t\tif (ps.ConfigPaths.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tFullPath default_config = new FullPath(\r\n\t\t\t\t\t(ps.Target == Targets.Web) ? ApplicationCompiler.WebConfigFile : ApplicationCompiler.AppConfigFile, ps.SourceRoot);\r\n\r\n\t\t\t\tif (default_config.FileExists)\r\n\t\t\t\t\tps.ConfigPaths.Add(default_config);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a default output file extension depending on value of <see cref=\"CompilationParameters.Target\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The extension, e.g. \".exe\".</returns>\r\n\t\tprivate string GetDefaultOutputFileExtension()\r\n\t\t{\r\n\t\t\tswitch (ps.Target)\r\n\t\t\t{\r\n\t\t\t\tcase Targets.Console:\r\n\t\t\t\tcase Targets.WinApp: return \".exe\";\r\n\t\t\t\tcase Targets.Web:\r\n\t\t\t\tcase Targets.Dll: return \".dll\";\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(\"Invalid target\");\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a default output file name depending on the values of <see cref=\"CompilationParameters.Target\"/> and \r\n\t\t/// <see cref=\"CompilationParameters.SourcePaths\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The file name with extension (e.g. File.exe).</returns>\r\n\t\tprivate string GetDefaultOutputFile()\r\n\t\t{\r\n\t\t\tif (ps.Target != Targets.Web)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(ps.SourcePaths != null && ps.SourceDirs != null && (ps.SourcePaths.Count > 0 || ps.SourceDirs.Count > 0));\r\n\r\n\t\t\t\tif (ps.SourcePaths.Count != 0)\r\n\t\t\t\t\treturn Path.GetFileNameWithoutExtension(ps.SourcePaths[0]) + GetDefaultOutputFileExtension();\r\n\t\t\t\telse\r\n\t\t\t\t\treturn Path.GetFileName(ps.SourceDirs[0]) + GetDefaultOutputFileExtension();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn PhpScript.CompiledWebAppAssemblyName;\r\n\t\t\t}\r\n\t\t}\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Processes \"out\" option and sets <see cref=\"CompilationParameters.OutPath\"/> accordingly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The option's value</param>\r\n\t\tprivate void ProcessOutOption(string value)\r\n\t\t{\r\n\t\t\tDebug.Assert(ps.SourcePaths != null);\r\n\r\n\t\t\tcurrentOption = \"out\";\r\n\t\t\tcurrentValue = value;\r\n\r\n\t\t\tstring dir;\r\n\t\t\tstring out_path;\r\n\r\n\t\t\t// default values:\r\n\t\t\tif (String.IsNullOrEmpty(value))\r\n\t\t\t{\r\n\t\t\t\t// do not override output path if it has been set pior parsing:\r\n\t\t\t\tif (!ps.OutPath.IsEmpty) return;\r\n\t\t\t\t\r\n\t\t\t\tdir = \"bin\";\r\n\r\n\t\t\t\tif (ps.Target == Targets.Web)\r\n\t\t\t\t\tdir = Path.Combine(ps.SourceRoot, dir);\r\n\r\n\t\t\t\tout_path = Path.Combine(dir, GetDefaultOutputFile());\r\n\t\t\t}\r\n\t\t\telse if (ps.Target == Targets.Web)\r\n\t\t\t{\r\n\t\t\t\t// web applications expects a directory name:\r\n\t\t\t\tif (!Path.IsPathRooted(value))\r\n\t\t\t\t\tvalue = Path.Combine(ps.SourceRoot, value);\r\n\r\n\t\t\t\tout_path = Path.Combine(value, PhpScript.CompiledWebAppAssemblyName);\r\n\t\t\t\tdir = value;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// other targets expects a file name:\r\n\r\n\t\t\t\tif (!Path.IsPathRooted(value))\r\n\t\t\t\t\tvalue = Path.Combine(ps.SourceRoot, value);\r\n\r\n\t\t\t\t// extracts directory from the value:\r\n\t\t\t\tdir = Path.GetDirectoryName(value);\r\n\t\t\t\tif (dir == null)                             // \"C:\\\"\r\n\t\t\t\t\tdir = Path.GetPathRoot(value);\r\n\r\n\t\t\t\tif (Path.GetFileName(value) == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\t// if value doesn't specify a file name (e.g. \"C:\\dir\\\"):\r\n\t\t\t\t\tout_path = Path.Combine(value, GetDefaultOutputFile());\r\n\t\t\t\t}\r\n\t\t\t\telse if (Path.GetExtension(value) == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\t// if value doesn't specify an extension (e.g. \"C:\\dir\\f\")\r\n\t\t\t\t\tout_path = value + GetDefaultOutputFileExtension();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tout_path = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// checks path and makes it full:\r\n\t\t\tps.OutPath = new FullPath(out_path);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Processes \"entrypoint\" option and sets <see cref=\"CompilationParameters.StartupFile\"/> accordingly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The option's value</param>\r\n\t\tprivate void ProcessEntryPointOption(string value)\r\n\t\t{\r\n\t\t\t// comparing value type with null //Debug.Assert(ps.SourceRoot != null && ps.SourcePaths != null);\r\n\r\n\t\t\tcurrentOption = \"entrypoint\";\r\n\t\t\tcurrentValue = value;\r\n\r\n\t\t\tif (!String.IsNullOrEmpty(value))\r\n\t\t\t{\r\n\t\t\t\tps.StartupFile = new FullPath(value, ps.SourceRoot);\r\n\t\t\t\tps.SourcePaths.Insert(0, ps.StartupFile);\r\n\t\t\t}\r\n\t\t\telse if (!ps.StartupFile.IsEmpty)\r\n\t\t\t{\r\n\t\t\t\t// nop, startup file has already been set prior parsing\r\n\t\t\t}\r\n\t\t\telse if (ps.SourcePaths.Count != 0)\r\n\t\t\t{\r\n\t\t\t\t// default value - the first source full path:\r\n\t\t\t\tps.StartupFile = ps.SourcePaths[0];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthrow Exception(CoreResources.GetString(\"entrypoint_not_specified\"));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether file extensions are valid.\r\n\t\t/// </summary>\r\n\t\tprivate void ProcessFileExtensions()\r\n\t\t{\r\n\t\t\tforeach (string ext in ps.FileExtensions)\r\n\t\t\t{\r\n\t\t\t\tif (ext.IndexOfAny(Path.GetInvalidPathChars()) >= 0)\r\n\t\t\t\t\tthrow Exception(CoreResources.GetString(\"invalid_file_extension\", ext));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (ps.FileExtensions.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tps.FileExtensions.Add(\"php\");\r\n\t\t\t\tps.FileExtensions.Add(\"inc\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\t\t\r\n\t\tpublic static List<string>/*!*/ StringToArgumentList(string/*!*/ str)\r\n\t\t{\r\n\t\t\tif (str == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"str\");\r\n\r\n\t\t\tList<string> arg_list = new List<string>();\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\tbool in_quotes = false;\r\n\r\n\t\t\tfor (int i = 0; i < str.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (str[i] == '\"')\r\n\t\t\t\t{\r\n\t\t\t\t\tin_quotes = !in_quotes;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (in_quotes || !Char.IsWhiteSpace(str, i))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsb.Append(str[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (sb.Length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\targ_list.Add(sb.ToString());\r\n\t\t\t\t\t\t\tsb.Length = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (sb.Length > 0) arg_list.Add(sb.ToString());\r\n\r\n\t\t\treturn arg_list;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\t\r\n\t#endregion\r\n\r\n\t#region ApplicationCompiler\r\n\t\r\n\t/// <summary>\r\n\t/// PHP application compiler.\r\n\t/// </summary>\r\n\tpublic sealed class ApplicationCompiler : MarshalByRefObject\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// app.config file name.\r\n        /// </summary>\r\n        public const string AppConfigFile = \"App.config\";\r\n\r\n        /// <summary>\r\n        /// web.config file name.\r\n        /// </summary>\r\n\t\tpublic const string WebConfigFile = \"Web.config\";\r\n\t\t\r\n\t\t/// <summary>\r\n        /// Compilation target.\r\n        /// </summary>\r\n        public enum Targets\r\n        {\r\n            None,\r\n            Dll,\r\n            Console,\r\n            WinApp,\r\n            Web,\r\n            Eval\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Current AppDomain. The AppDomain in which the ApplicationCompiler was created.\r\n        /// </summary>\r\n        public AppDomain/*!*/ Domain { get { return domain; } }\r\n        private readonly AppDomain/*!*/ domain;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        public ApplicationCompiler()\r\n\t\t{\r\n\t\t\tthis.domain = AppDomain.CurrentDomain;\r\n        }\r\n\r\n        #endregion\r\n\r\n        public static bool IsPureUnit(string/*!*/ value)\r\n\t\t{\r\n\t\t\treturn value != null && value.ToLower() == \"pure\";\r\n        }\r\n\r\n        #region Compile\r\n\r\n        /// <summary>\r\n\t\t/// Compiles an application.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"applicationContext\">Application context.</param>\r\n\t\t/// <param name=\"config\">Compiler configuration record.</param>\r\n\t\t/// <param name=\"errorSink\">Error sink.</param>\r\n\t\t/// <param name=\"ps\">Parameters.</param>\r\n\t\t/// <exception cref=\"InvalidSourceException\">Cannot read a source file/directory. See the inner exception for details.</exception>\r\n\t\tpublic void Compile(\r\n\t\t\tApplicationContext/*!*/ applicationContext,\r\n\t\t\tCompilerConfiguration/*!*/ config,\r\n\t\t\tErrorSink/*!*/ errorSink,\r\n\t\t\tCompilationParameters/*!*/ ps)\r\n\t\t{\r\n\t\t\tif (applicationContext == null) throw new ArgumentNullException(\"applicationContext\");\r\n\t\t\tif (config == null) throw new ArgumentNullException(\"config\");\r\n\t\t\tif (errorSink == null) throw new ArgumentNullException(\"errorSink\");\r\n\t\t\tps.Validate();\r\n\r\n\t\t\tPhpSourceFile entry_point_file = (ps.StartupFile != null) ? new PhpSourceFile(config.Compiler.SourceRoot, ps.StartupFile) : null;\r\n\t\t\tList<ResourceFileReference> resource_files = ResourceFileReference.FromFiles(ps.Resources);\r\n\r\n\t\t\t// creates directory if not exists:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tDirectory.CreateDirectory(Path.GetDirectoryName(ps.OutPath));\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\terrorSink.Add(FatalErrors.ErrorCreatingFile, null, ErrorPosition.Invalid, ps.OutPath, ex.Message);\r\n\t\t\t}\t\r\n\t\t\t\t\r\n\t\t\tAssemblyKinds kind;\r\n\r\n\t\t\tswitch (ps.Target)\r\n\t\t\t{\r\n\t\t\t\tcase Targets.Dll:\r\n\t\t\t\t\tkind = AssemblyKinds.Library;\r\n\t\t\t\t\tentry_point_file = null;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase Targets.Console:\r\n\t\t\t\t\tkind = AssemblyKinds.ConsoleApplication;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase Targets.WinApp:\r\n\t\t\t\t\tkind = AssemblyKinds.WindowApplication;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase Targets.Web:\r\n\t\t\t\t\tkind = AssemblyKinds.WebPage;\r\n\t\t\t\t\tentry_point_file = null;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n                    throw new ArgumentException();\r\n\t\t\t}\r\n\r\n\t\t\tPhpAssemblyBuilder assembly_builder = PhpAssemblyBuilder.Create(applicationContext, kind, ps.Pure, ps.OutPath,\r\n\t\t\t\tps.DocPath, entry_point_file, ps.Version, ps.Key, ps.Icon, resource_files, config.Compiler.Debug, ps.Force32Bit);\r\n\r\n\t\t\tassembly_builder.IsMTA = ps.IsMTA;\r\n\t\t\t\r\n\t\t\tStatistics.CompilationStarted();\r\n\r\n\t\t\tICompilerManager manager = (!ps.Pure) ? new ApplicationCompilerManager(applicationContext, assembly_builder) : null;\r\n\r\n            try\r\n            {\r\n                CompilationContext context = new CompilationContext(applicationContext, manager, config, errorSink, config.Compiler.SourceRoot);\r\n\r\n                assembly_builder.Build(EnumerateScripts(ps.SourcePaths, ps.SourceDirs, ps.FileExtensions, context), context);\r\n\r\n                if (!context.Errors.AnyError && (ps.Target == Targets.Console || ps.Target == Targets.WinApp))\r\n                    CopyApplicationConfigFile(config.Compiler.SourceRoot, ps.OutPath);\r\n            }\r\n            catch (CompilerException e)\r\n            {\r\n                errorSink.Add(e.ErrorInfo, null, ErrorPosition.Invalid, e.ErrorParams);\r\n            }\r\n            catch (InvalidSourceException e)\r\n            {\r\n                e.Report(errorSink);\r\n            }\r\n            catch (Exception e)\r\n            {\r\n#if DEBUG\r\n                //Console.WriteLine(\"Unexpected error: {0}\", e.ToString());// removed, exception added into the error sink, so it's displayed in the VS Integration too\r\n#endif\r\n                errorSink.AddInternalError(e);  // compilation will fail, error will be displayed in Errors by VS Integration               \r\n            }\r\n\t\t\tfinally\r\n\t\t\t{\r\n#if DEBUG\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tConsole.WriteLine(\"Statistics:\");\r\n\t\t\t\tStatistics.Dump(Console.Out, Path.GetDirectoryName(ps.OutPath));\r\n\t\t\t\tConsole.WriteLine();\r\n#endif\r\n\t\t\t}\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copies App.config files to the target bin directory (desktop apps only).\r\n        /// </summary>\r\n        private static bool CopyApplicationConfigFile(FullPath sourceRoot, FullPath assemblyPath)\r\n        {\r\n            string app_config_src = Path.Combine(sourceRoot, AppConfigFile);\r\n            string app_config_dst = assemblyPath + \".config\";\r\n            try\r\n            {\r\n                if (File.Exists(app_config_src))\r\n                {\r\n                    File.Copy(app_config_src, app_config_dst, true);\r\n                    //message = CoreResources.GetString(\"application_config_file_copied\");\r\n                }\r\n            }\r\n            catch (SystemException)\r\n            {\r\n                //message = CoreResources.GetString(\"cannot_create_config_file\", app_config_dst, e.Message);\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Scripts enumeration\r\n\r\n        private static IEnumerable<PhpSourceFile>/*!*/ EnumerateScripts(\r\n\t\t\tICollection<FullPath>/*!*/ sourcePaths, ICollection<FullPath>/*!*/ sourceDirs,\r\n\t\t\tICollection<string>/*!*/ fileExtensions, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourcePaths != null && sourceDirs != null && fileExtensions != null && context != null);\r\n\t\t\t\r\n\t\t\t// enumerate listed source files:\r\n            foreach (PhpSourceFile file in EnumerateScriptsInDirectory(sourcePaths, ArrayUtils.EmptyStrings, context))\r\n\t\t\t\tyield return file;\r\n\r\n\t\t\t// enumerate source files recursively located in specified directories:\r\n\t\t\tforeach (FullPath dir in sourceDirs)\r\n\t\t\t{\r\n                foreach (PhpSourceFile file in EnumerateScriptsRecursive(dir, fileExtensions, context))\r\n\t\t\t\t\tyield return file;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles a specified collection of scripts within the given compilation context.\r\n\t\t/// </summary>\r\n\t\tprivate static IEnumerable<PhpSourceFile>/*!*/ EnumerateScriptsInDirectory(IEnumerable<FullPath>/*!*/ sourcePaths,\r\n            ICollection<string>/*!*/ fileExtensions, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourcePaths != null && fileExtensions != null && context != null);\r\n\r\n\t\t\tFullPath source_root = context.Config.Compiler.SourceRoot;\r\n\r\n\t\t\tforeach (FullPath path in sourcePaths)\r\n\t\t\t{\r\n\t\t\t\tif (fileExtensions.Count != 0 && !path.HasAnyExtension(fileExtensions))\r\n\t\t\t\t\tcontinue;\r\n\r\n                string pathString = path;\r\n                bool skip = false;\r\n\r\n                foreach (string skipPath in context.Config.Compiler.ForcedDynamicInclusionTranslatedFullPaths)\r\n                    if (pathString.StartsWith(skipPath))\r\n                    {\r\n                        skip = true;\r\n                        break;\r\n                    }\r\n                \r\n                if (skip) continue;\r\n\r\n\t\t\t\tyield return new PhpSourceFile(source_root, path);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Recursively searches a directory for all files matching the web script file pattern.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"InvalidSourceException\">Error reading the directory.</exception>\r\n\t\tprivate static IEnumerable<PhpSourceFile>/*!*/ EnumerateScriptsRecursive(FullPath directory,\r\n            ICollection<string>/*!*/ fileExtensions, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(fileExtensions != null && context != null);\r\n\t\t\tDebug.Assert(!directory.IsEmpty);\r\n\r\n            string pathString = directory;\r\n\r\n            foreach (string skipPath in context.Config.Compiler.ForcedDynamicInclusionTranslatedFullPaths)\r\n                if (pathString.StartsWith(skipPath))\r\n                    yield break;\r\n            \r\n\t\t\tFullPath[] files, directories;\r\n\t\t\t\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tfiles = directory.GetFiles();\r\n\t\t\t\tdirectories = directory.GetDirectories();\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tthrow new InvalidSourceException(directory, e);\r\n\t\t\t}\r\n\r\n\t\t\t// compiles scripts in the current directory:\r\n\t\t\tforeach (PhpSourceFile file in EnumerateScriptsInDirectory(files, fileExtensions, context))\r\n\t\t\t\tyield return file;\r\n\r\n\t\t\t// processes subdirectories:\r\n\t\t\tforeach (FullPath dir in directories)\r\n\t\t\t{\r\n                foreach (PhpSourceFile file in EnumerateScriptsRecursive(dir, fileExtensions, context))\r\n\t\t\t\t\tyield return file;\r\n\t\t\t}\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Configuration loading\r\n\r\n        /// <summary>\r\n        /// Loads configuration from Machine.config, phpc.exe.config, from files specified by command line arguments,\r\n        /// and from command line arguments themselves.\r\n        /// </summary>\r\n        /// <exception cref=\"ConfigurationErrorsException\">An error occured while loading the configuration.</exception>\r\n        public static CompilerConfiguration/*!*/ LoadConfiguration(\r\n            ApplicationContext/*!*/ appContext, List<FullPath>/*!*/ paths, TextWriter output)\r\n        {\r\n            Configuration.IsBuildTime = true;\r\n\r\n            Configuration.Reload(appContext, true);\r\n\r\n            // Machine.config, phpc.exe.config:\r\n            CompilerConfiguration result = new CompilerConfiguration(Configuration.Application);\r\n\r\n            // explicitly specified or default configs:\r\n            foreach (FullPath path in paths)\r\n            {\r\n                if (output != null) output.WriteLine(path);\r\n                result.LoadFromFile(appContext, path);\r\n            }\r\n\r\n            // load libraries lazily\r\n            result.LoadLibraries(appContext);\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region MarshalByRefObject\r\n\r\n        [System.Security.SecurityCritical]\r\n        public override object InitializeLifetimeService()\r\n\t\t{\r\n\t\t\treturn null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Remote Compile\r\n\r\n        //public static void CompileInSeparateDomain(ErrorSink/*!*/ errorSink, CompilationParameters/*!*/ ps)\r\n        //{\r\n        //    if (ps == null) throw new ArgumentNullException(\"ps\");\r\n        //    if (errorSink == null) throw new ArgumentNullException(\"errorSink\");\r\n        //    ps.Validate();\r\n\r\n        //    ApplicationCompiler remote = CreateRemoteCompiler();\r\n        //    try\r\n        //    {\r\n        //        remote.RemoteCompile(ref errorSink, ps);\r\n        //    }\r\n        //    catch (TargetInvocationException e)\r\n        //    {\r\n        //        throw e.InnerException;\r\n        //    }\r\n\r\n        //    AppDomain.Unload(remote.Domain);  // this may cause an exception in the AppDomain thread\r\n        //}\r\n\r\n        public static ApplicationCompiler/*!*/ CreateRemoteCompiler()\r\n\t\t{\r\n            // setup new AppDomain\r\n            // the AppDomain has ShadowCopyFiles enabled to not lock loaded assemblies\r\n            AppDomainSetup setup = new AppDomainSetup();\r\n            setup.ShadowCopyFiles = \"true\";\r\n            \r\n            // create AppDomain\r\n            AppDomain domain = AppDomain.CreateDomain(\"PhalangerCompilationDomain_\" + Guid.NewGuid().ToString(), null, setup);\r\n\r\n            // Wrap the instance of ApplicationCompiler\r\n\t\t\tType type = typeof(ApplicationCompiler);\r\n\r\n\t\t\treturn (ApplicationCompiler)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);\r\n\t\t}\r\n\r\n        public void RemoteCompile(\r\n\t\t\tref ErrorSink/*!*/ errorSink,\r\n\t\t\tCompilationParameters/*!*/ ps)\r\n\t\t{\r\n\t\t\terrorSink = new PassthroughErrorSink(errorSink);\r\n\r\n\t\t\tApplicationContext.DefineDefaultContext(false, true, false);\r\n\t\t\tApplicationContext app_context = ApplicationContext.Default;\r\n\t\t\t\r\n\t\t\tCompilerConfiguration compiler_config;\r\n\r\n\t\t\t// loads entire configuration:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tcompiler_config = LoadConfiguration(app_context, ps.ConfigPaths, null);\t\t\t\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException e)\r\n\t\t\t{\r\n\t\t\t\terrorSink.AddConfigurationError(e);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tps.ApplyToConfiguration(compiler_config);\r\n\r\n\t\t\t// load referenced assemblies:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tapp_context.AssemblyLoader.Load(ps.References);\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException e)\r\n\t\t\t{\r\n\t\t\t\terrorSink.AddConfigurationError(e);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\terrorSink.DisabledGroups = compiler_config.Compiler.DisabledWarnings;\r\n\t\t\t\terrorSink.DisabledWarnings = compiler_config.Compiler.DisabledWarningNumbers;\r\n                errorSink.TreatWarningsAsErrors = compiler_config.Compiler.TreatWarningsAsErrors;\r\n\t\t\t\r\n\t\t\t\t// initializes log:\r\n\t\t\t\tDebugUtils.ConsoleInitialize(Path.GetDirectoryName(ps.OutPath));\r\n\r\n\t\t\t\tCompile(app_context, compiler_config, errorSink, ps);\r\n\t\t\t}\r\n\t\t\tcatch (InvalidSourceException e)\r\n\t\t\t{\r\n\t\t\t\te.Report(errorSink);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\terrorSink.AddInternalError(e);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n\t\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/AstVisitor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Common superclass for <see cref=\"Analyzer\"/> and <see cref=\"CodeGenerator\"/>.\r\n\t/// </summary>\r\n\tpublic abstract class AstVisitor\r\n\t{\r\n\t\tpublic abstract CompilationContext Context { get; }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/CodeGenerator/CallSitesBuilder.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// CallSite fields manager and emitter.\r\n    /// </summary>\r\n    internal class CallSitesBuilder\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// The module that will contain the call sites container.\r\n        /// </summary>\r\n        private readonly ModuleBuilder/*!*/moduleBuilder;\r\n\r\n        /// <summary>\r\n        /// User-friendly call site container name.\r\n        /// </summary>\r\n        private readonly string/*!*/userFriendlyName;\r\n\r\n        /// <summary>\r\n        /// The unique id to name the container class.\r\n        /// </summary>\r\n        private static long nextContainerId = 0;\r\n\r\n        /// <summary>\r\n        /// Lazily initialized class contained static instances of declared call sites.\r\n        /// </summary>\r\n        private TypeBuilder containerClass;\r\n\r\n        /// <summary>\r\n        /// .cctor of the call sites container. Not null if <see cref=\"containerClass\"/> has been initialized.\r\n        /// </summary>\r\n        private ILEmitter staticCtorEmitter;\r\n\r\n        /// <summary>\r\n        /// If known and if it can be emitted in static .cctor, defines the place where the class context can be loaded.\r\n        /// Otherwise <c>null</c>, the class context will be determined in run time and passed to binder.\r\n        /// </summary>\r\n        private IPlace classContextPlace { get { return classContextPlaces.Peek(); } }\r\n        private Stack<IPlace> classContextPlaces = new Stack<IPlace>(2);\r\n\r\n        /// <summary>\r\n        /// Current type declaration to emit site containers properly.\r\n        /// </summary>\r\n        private PhpType classContext { get { return classContexts.Peek(); } }\r\n        private Stack<PhpType> classContexts = new Stack<PhpType>(2);\r\n\r\n        /// <summary>\r\n        /// Amount of emitted call sites. Used to build unique call site field name.\r\n        /// </summary>\r\n        private long callSitesCount = 0;\r\n\r\n        private readonly DelegateBuilder/*!*/delegateBuilder;\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n        /// Create new call sites builder.\r\n        /// </summary>\r\n        /// <param name=\"moduleBuilder\">Module to contain call sites container.</param>\r\n        /// <param name=\"userFriendlyName\">User friendly name used to identify the call sites container by user.</param>\r\n        /// <param name=\"classContextPlace\">If known and if it can be emitted in static .cctor, defines the place where the class context can be loaded. Otherwise <c>null</c> if the class context will be determined in run time.</param>\r\n        public CallSitesBuilder(ModuleBuilder/*!*/moduleBuilder, string/*!*/userFriendlyName, IPlace classContextPlace)\r\n            : this(moduleBuilder, userFriendlyName, classContextPlace, null)\r\n        {\r\n            \r\n        }\r\n\r\n        /// <summary>\r\n        /// Create new call sites builder.\r\n        /// </summary>\r\n        /// <param name=\"moduleBuilder\">Module to contain call sites container.</param>\r\n        /// <param name=\"userFriendlyName\">User friendly name used to identify the call sites container by user.</param>\r\n        /// <param name=\"classContextPlace\">If known and if it can be emitted in static .cctor, defines the place where the class context can be loaded. Otherwise <c>null</c> if the class context will be determined in run time.</param>\r\n        /// <param name=\"classContext\">Current PHP type context.</param>\r\n        public CallSitesBuilder(ModuleBuilder/*!*/moduleBuilder, string/*!*/userFriendlyName, IPlace classContextPlace, PhpType classContext)\r\n        {\r\n            Debug.Assert(moduleBuilder != null && userFriendlyName != null);\r\n\r\n            this.userFriendlyName = userFriendlyName;\r\n            this.moduleBuilder = moduleBuilder;\r\n            this.PushClassContext(classContextPlace, classContext);\r\n            this.delegateBuilder = new DelegateBuilder(moduleBuilder);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Changing class context\r\n\r\n        /// <summary>\r\n        /// Change current class context. Remember the previous ones.\r\n        /// </summary>\r\n        /// <param name=\"classContextPlace\">New class context place.</param>\r\n        /// <param name=\"classContext\">New class context type.</param>\r\n        internal void PushClassContext(IPlace classContextPlace, PhpType classContext)\r\n        {\r\n            this.classContextPlaces.Push(classContextPlace);\r\n            this.classContexts.Push(classContext);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Change current class context to the previous one.\r\n        /// </summary>\r\n        internal void PopClassContext()\r\n        {\r\n            this.classContextPlaces.Pop();\r\n            this.classContexts.Pop();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EnsureContainer, Bake, DefineCallSite\r\n\r\n        /// <summary>\r\n        /// Ensure the call sites container is created and return the <see cref=\"TypeBuilder\"/>.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        private TypeBuilder/*!*/EnsureContainer()\r\n        {\r\n            if (containerClass == null)\r\n            {\r\n                if (this.classContext != null && this.classContext.IsGeneric)\r\n                {\r\n                    // we will emit single call sites in the class context. It is easier than to build generic sites container.\r\n                    Debug.Assert(this.classContext.RealTypeBuilder != null);\r\n                    return this.classContext.RealTypeBuilder;\r\n                }\r\n\r\n                Debug.Assert(staticCtorEmitter == null);\r\n\r\n                var containerClassName = string.Format(\"<{0}>o_Sitescontainer'{1}\", this.userFriendlyName.Replace('.', '_'), System.Threading.Interlocked.Increment(ref nextContainerId));\r\n                containerClass = moduleBuilder.DefineType(containerClassName, TypeAttributes.Sealed | TypeAttributes.Class | TypeAttributes.NotPublic | TypeAttributes.Abstract);\r\n\r\n                staticCtorEmitter = new ILEmitter(containerClass.DefineTypeInitializer());\r\n            }\r\n\r\n            return containerClass;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Bake the container class if any. Close the call sites builder.\r\n        /// </summary>\r\n        public void Bake()\r\n        {\r\n            if (containerClass != null)\r\n            {\r\n                Debug.Assert(staticCtorEmitter != null);\r\n\r\n                // finish static ctor:\r\n                staticCtorEmitter.Emit(OpCodes.Ret);\r\n\r\n                // bake the call sites container:\r\n                containerClass.CreateType();\r\n\r\n                // avoid of using the builders anymore:\r\n                containerClass = null;\r\n                staticCtorEmitter = null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Defines field in callsite's container type.\r\n        /// </summary>\r\n        /// <param name=\"name\">Field name.</param>\r\n        /// <param name=\"type\">Field type.</param>\r\n        /// <param name=\"attributes\">Field attributes.</param>\r\n        /// <returns>Instance of newly defined <see cref=\"FieldInfo\"/>.</returns>\r\n        public FieldBuilder/*!*/DefineField(string name, Type type, FieldAttributes attributes)\r\n        {\r\n            // call sites container \r\n            var typebuilder = EnsureContainer();\r\n\r\n            // define field\r\n            return typebuilder.DefineField(name, type, attributes);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Define new instance of CallSite&lt;<paramref name=\"delegateType\"/>&gt; and initialize it with specified binder.\r\n        /// </summary>\r\n        /// <param name=\"bodyEmitter\"><see cref=\"ILEmitter\"/> of the body that is using this call site. This method may emit initialization of the call site into this <paramref name=\"bodyEmitter\"/>.</param>\r\n        /// <param name=\"userFriendlyName\">User friendly name used as name for the CallSite field.</param>\r\n        /// <param name=\"delegateType\">CallSite type argument.</param>\r\n        /// <param name=\"binderInstanceEmitter\">Function used to emit initialization of the binder from within the call sites container .cctor.</param>\r\n        /// <returns>The <see cref=\"FieldInfo\"/> containing the instance of the created CallSite.</returns>\r\n        public FieldInfo/*!*/DefineCallSite(ILEmitter/*!*/bodyEmitter,string/*!*/userFriendlyName, Type/*!*/delegateType, Action<ILEmitter>/*!*/binderInstanceEmitter)\r\n        {\r\n            Debug.Assert(userFriendlyName != null && delegateType != null && binderInstanceEmitter != null);\r\n\r\n            userFriendlyName += (\"'\" + (callSitesCount++));\r\n\r\n            // ensures call sites container is initialized\r\n            // this ensures, {staticCtorEmitter} is set properly\r\n            var typebuilder = EnsureContainer();\r\n\r\n            // call site type\r\n            var callSiteType = Types.CallSiteGeneric[0].MakeGenericType(delegateType);\r\n\r\n            // define the field:\r\n            // public static readonly CallSite<delegateType> <userFriendlyName>\r\n            var attrs = FieldAttributes.Static | FieldAttributes.InitOnly | ((staticCtorEmitter == null) ? FieldAttributes.Private : FieldAttributes.Assembly);\r\n            var field = this.DefineField(userFriendlyName, callSiteType, attrs);\r\n\r\n            if (staticCtorEmitter == null) // => this.classContext != null\r\n            {\r\n                // emit initialization of the call site just in the body of current method (as it is in C#, we need current generic arguments):\r\n                Debug.Assert(this.classContext != null);\r\n                \r\n                // check if the call site if not null, otherwise initialize it first:\r\n\r\n                // if (<field> == null) <InitializeCallSite>;\r\n                Label ifend = bodyEmitter.DefineLabel();\r\n                bodyEmitter.Emit(OpCodes.Ldsfld, field);\r\n                bodyEmitter.Emit(OpCodes.Brtrue, ifend);\r\n\r\n                // init the field:\r\n                InitializeCallSite(bodyEmitter, callSiteType, field, binderInstanceEmitter);\r\n\r\n                bodyEmitter.MarkLabel(ifend);\r\n            }\r\n            else\r\n            {\r\n                // init the field in .cctor:\r\n                InitializeCallSite(staticCtorEmitter, callSiteType, field, binderInstanceEmitter);\r\n            }\r\n\r\n            //\r\n            return field;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emit the initialization code for defined call site.\r\n        /// </summary>\r\n        /// <param name=\"il\"></param>\r\n        /// <param name=\"callSiteType\"></param>\r\n        /// <param name=\"field\"></param>\r\n        /// <param name=\"binderInstanceEmitter\"></param>\r\n        private static void InitializeCallSite(ILEmitter/*!*/il, Type/*!*/callSiteType, FieldBuilder/*!*/field, Action<ILEmitter>/*!*/binderInstanceEmitter)\r\n        {\r\n            // <field> = CallSite<...>.Create( <BINDER> )\r\n            binderInstanceEmitter(il);\r\n            il.Emit(OpCodes.Call, callSiteType.GetMethod(\"Create\", Types.CallSiteBinder));\r\n            il.Emit(OpCodes.Stsfld, field);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EmitMethodCall\r\n\r\n        /// <summary>\r\n        /// Helper method, returns additional type arguments for delegate used by <see cref=\"EmitMethodCall\"/>.\r\n        /// </summary>\r\n        private static IEnumerable<Type>/*!!*/MethodCallDelegateAdditionalArguments(bool staticCall, bool methodNameIsKnown, bool classContextIsKnown)\r\n        {\r\n            if (staticCall) yield return Types.DTypeDesc[0];\r\n            if (!classContextIsKnown) yield return Types.DTypeDesc[0];\r\n            if (!methodNameIsKnown) yield return Types.Object[0];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Helper method, loads parameters onto evaluation stack.\r\n        /// </summary>\r\n        private static void EmitMethodCallParameters(PHP.Core.CodeGenerator/*!*/cg, CallSignature callSignature)\r\n        {\r\n            foreach (var t in callSignature.GenericParams) t.EmitLoadTypeDesc(cg, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors); // load DTypeDescs on the stack\r\n            foreach (var p in callSignature.Parameters) { cg.EmitBoxing(p.Emit(cg)); }  // load boxed args on the stack            \r\n        }\r\n\r\n        internal static Type/*!*/AccessToReturnType(AccessType access)\r\n        {\r\n            Debug.Assert(\r\n                  access == AccessType.None || access == AccessType.Read || access == AccessType.ReadRef || access == AccessType.ReadUnknown,\r\n                  \"Unhandled access type.\");\r\n\r\n            switch (access)\r\n            {\r\n                case AccessType.None: return Types.Void;\r\n                case AccessType.Read: return Types.Object[0];\r\n                case AccessType.ReadRef:\r\n                case AccessType.ReadUnknown: return Types.PhpReference[0];\r\n                default: throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emit call of the instance/static method. This defines the call site and call it using given parameters.\r\n        /// </summary>\r\n        /// <param name=\"cg\">Current code <see cref=\"CodeGenerator\"/>.</param>\r\n        /// <param name=\"returnType\">Return type of the method call determined by current access of the method call.</param>\r\n        /// <param name=\"targetExpr\">The method call instance expression (the target) if it is an instance method call.</param>\r\n        /// <param name=\"targetType\">The target type if it is a static method call.</param>\r\n        /// <param name=\"methodFullName\">If known at compile time, the method name. Otherwise <c>null</c>.</param>\r\n        /// <param name=\"methodNameExpr\">If the <paramref name=\"methodFullName\"/> is null, this will be the expression giving the method name in run time.</param>\r\n        /// <param name=\"callSignature\">The call signature of the method call.</param>\r\n        /// <returns>The resulting value type code. This value will be pushed onto the evaluation stack.</returns>\r\n        public PhpTypeCode EmitMethodCall(\r\n            PHP.Core.CodeGenerator/*!*/cg, Type returnType,\r\n            Expression/*!*/targetExpr, DType/*!*/targetType,\r\n            string methodFullName, Expression methodNameExpr, CallSignature callSignature)\r\n        {\r\n            Debug.Assert(methodFullName != null ^ methodNameExpr != null);          \r\n\r\n            //\r\n            bool staticCall = (targetExpr == null); // we are going to emit static method call\r\n            //bool methodNameIsKnown = (methodFullName != null);\r\n            //bool classContextIsKnown = (this.classContextPlace != null);\r\n\r\n            //\r\n            // define the call site:\r\n            //\r\n            var delegateType = /*System.Linq.Expressions.Expression.*/delegateBuilder.GetDelegateType(\r\n                MethodCallDelegateTypeArgs(\r\n                    callSignature,\r\n                    staticCall ? Types.DObject[0] : Types.Object[0],\r\n                    MethodCallDelegateAdditionalArguments(staticCall, methodFullName != null, this.classContextPlace != null),\r\n                    returnType),\r\n                callSitesCount);    // (J) do not create dynamic delegates in dynamic modules, so they can be referenced from non-transient assemblies\r\n\r\n            //\r\n            var field = DefineCallSite(cg.IL, string.Format(\"call_{0}\", methodFullName ?? \"$\"), delegateType, (il) =>\r\n            {\r\n                // <LOAD> Binder.{MethodCall|StaticMethodCall}( methodFullName, genericParamsCount, paramsCount, classContext, <returnType> )\r\n                if (methodFullName != null) il.Emit(OpCodes.Ldstr, methodFullName); else il.Emit(OpCodes.Ldnull);\r\n                il.LdcI4(callSignature.GenericParams.Length);\r\n                il.LdcI4(callSignature.Parameters.Length);\r\n                if (this.classContextPlace != null) this.classContextPlace.EmitLoad(il); else il.Emit(OpCodes.Ldsfld, Fields.UnknownTypeDesc.Singleton);\r\n\r\n                il.Emit(OpCodes.Ldtoken, returnType);\r\n                il.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n                \r\n                il.Emit(OpCodes.Call, staticCall ? Methods.Binder.StaticMethodCall : Methods.Binder.MethodCall);\r\n            });\r\n\r\n            //\r\n            // call the CallSite:\r\n            //\r\n\r\n            // <field>.Target( <field>, <targetExpr|self>, <scriptContext>, <callSignature.EmitLoadOnEvalStack>, <targetType>?, (classContext)?, <methodNameExpr>? ):\r\n\r\n            cg.IL.Emit(OpCodes.Ldsfld, field);\r\n            cg.IL.Emit(OpCodes.Ldfld, field.FieldType.GetField(\"Target\"));\r\n            cg.IL.Emit(OpCodes.Ldsfld, field);\r\n            if (staticCall) cg.EmitLoadSelf(); else EmitMethodTargetExpr(cg, targetExpr);\r\n            cg.EmitLoadScriptContext();\r\n            EmitMethodCallParameters(cg, callSignature);\r\n            if (staticCall) targetType.EmitLoadTypeDesc(cg, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n            if (/*!classContextIsKnown*/this.classContextPlace == null) cg.EmitLoadClassContext();\r\n            if (/*!methodNameIsKnown*/methodFullName == null) cg.EmitName(methodFullName/*null*/, methodNameExpr, true);\r\n            \r\n            cg.MarkTransientSequencePoint();\r\n            cg.IL.Emit(OpCodes.Callvirt, delegateType.GetMethod(\"Invoke\"));\r\n            \r\n            cg.MarkTransientSequencePoint();\r\n            \r\n            //\r\n            return PhpTypeCodeEnum.FromType(returnType);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper methods\r\n\r\n        /// <summary>\r\n        /// Emit the target of instance method invocation.\r\n        /// </summary>\r\n        /// <param name=\"cg\"></param>\r\n        /// <param name=\"targetExpr\"></param>\r\n        private static void EmitMethodTargetExpr(PHP.Core.CodeGenerator/*!*/cg, Expression/*!*/targetExpr)\r\n        {\r\n            // start a new operators chain (as the rest of chain is read)\r\n            cg.ChainBuilder.Create();\r\n            cg.ChainBuilder.Begin();\r\n            cg.ChainBuilder.Lengthen(); // for hop over ->\r\n\r\n            // prepare for operator invocation\r\n            cg.EmitBoxing(targetExpr.Emit(cg));\r\n            cg.ChainBuilder.End();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Make an array containing types for CallSite generic type used for method invocation.\r\n        /// </summary>\r\n        /// <param name=\"callSignature\">The method call signature.</param>\r\n        /// <param name=\"targetType\">The type of value passed as method target (object for instance method, DTypeDesc for static method).</param>\r\n        /// <param name=\"additionalArgs\">Additional arguments added after the target expression.</param>\r\n        /// <param name=\"returnType\">The return value type.</param>\r\n        /// <returns></returns>\r\n        private Type[]/*!*/MethodCallDelegateTypeArgs(CallSignature callSignature, Type/*!*/targetType, IEnumerable<Type> additionalArgs, Type/*!*/returnType)\r\n        {\r\n            List<Type> typeArgs = new List<Type>(callSignature.Parameters.Length + callSignature.GenericParams.Length + 6);\r\n\r\n            // Type[]{CallSite, <targetType>, ScriptContext, {argsType}, (DTypeDesc)?, (DTypeDesc)?, (object)?, <returnType>}:\r\n\r\n            // CallSite:\r\n            typeArgs.Add(Types.CallSite[0]);\r\n\r\n            // object instance / target type:\r\n            typeArgs.Add(targetType);\r\n\r\n            // ScriptContext:\r\n            typeArgs.Add(Types.ScriptContext[0]);\r\n\r\n            // parameters:\r\n            foreach (var t in callSignature.GenericParams) typeArgs.Add(Types.DTypeDesc[0]);\r\n            foreach (var p in callSignature.Parameters) typeArgs.Add(Types.Object[0]);\r\n\r\n            // DTypeDesc: (in case of static method call)\r\n            // class context (if not known at compile time):\r\n            // method name (if now known at compile time):\r\n            if (additionalArgs != null) typeArgs.AddRange(additionalArgs);\r\n\r\n            // return type:\r\n            typeArgs.Add(returnType);\r\n\r\n            //\r\n            return typeArgs.ToArray();\r\n        }\r\n\r\n        private Type[]/*!*/GetPropertyDelegateTypeArgs(Type/*!*/targetType, Type[] additionalArgs, Type/*!*/returnType)\r\n        {\r\n            List<Type> typeArgs = new List<Type>(6);\r\n\r\n            // Type[]{CallSite, <targetType|targetTypeDesc>, (DTypeDesc)?, (object)?, (bool)?, <returnType>}:\r\n\r\n            // CallSite:\r\n            typeArgs.Add(Types.CallSite[0]);\r\n\r\n            // target type (object instance / class type):\r\n            typeArgs.Add(targetType);\r\n\r\n            // DTypeDesc: (in case of static method call)\r\n            // class context (if not known at compile time):\r\n            // field name (if now known at compile time):\r\n            if (additionalArgs != null) typeArgs.AddRange(additionalArgs);\r\n\r\n            // return type:\r\n            typeArgs.Add(returnType);\r\n\r\n            //\r\n            return typeArgs.ToArray();\r\n        }\r\n        \r\n        #endregion       \r\n\r\n        #region EmitGetProperty\r\n\r\n        /// <summary>\r\n        /// Create and call <see cref=\"CallSite\"/> for getting property.\r\n        /// </summary>\r\n        /// <param name=\"cg\"><see cref=\"CodeGenerator\"/>.</param>\r\n        /// <param name=\"wantRef\">Wheter <see cref=\"PhpReference\"/> is expected as the result.</param>\r\n        /// <param name=\"targetExpr\">The expression representing the target (object).</param>\r\n        /// <param name=\"targetObjectPlace\">The place representing the target (<see cref=\"DObject\"/>) iff <paramref name=\"targetExpr\"/> is not provided.</param>\r\n        /// <param name=\"targetPlace\">The place representing the target (object) iff <paramref name=\"targetExpr\"/> and <paramref name=\"targetObjectPlace\"/> are not provided.</param>\r\n        /// <param name=\"targetType\">Type of target iff we are getting property statically.</param>\r\n        /// <param name=\"fieldName\">The name of the field. Can be null if the name is not known at compile time (indirect).</param>\r\n        /// <param name=\"fieldNameExpr\">The expression used to get field name in run time (iff <paramref name=\"fieldName\"/> is <c>null</c>.</param>\r\n        /// <param name=\"issetSemantics\">Wheter we are only checking if the property exists. If true, no warnings are thrown during run time.</param>\r\n        /// <returns>Type code of the value that is pushed onto the top of the evaluation stack.</returns>\r\n        public PhpTypeCode EmitGetProperty(\r\n            PHP.Core.CodeGenerator/*!*/cg, bool wantRef,\r\n            Expression targetExpr, IPlace targetObjectPlace, IPlace targetPlace, DType targetType,\r\n            string fieldName, Expression fieldNameExpr,\r\n            bool issetSemantics)\r\n        {\r\n            Debug.Assert(fieldName != null ^ fieldNameExpr != null);\r\n            Debug.Assert(targetExpr != null || targetObjectPlace != null || targetPlace != null || targetType != null);\r\n            \r\n            //\r\n            bool staticCall = (targetExpr == null && targetObjectPlace == null && targetPlace == null); // we are going to access static property\r\n            bool fieldNameIsKnown = (fieldName != null);\r\n            bool classContextIsKnown = (this.classContextPlace != null);\r\n\r\n            //\r\n            // binder flags:\r\n            //\r\n            Type returnType = wantRef ? Types.PhpReference[0] : Types.Object[0];\r\n            \r\n            //\r\n            // define the call site:\r\n            //\r\n\r\n            //\r\n            List<Type> additionalArgs = new List<Type>();\r\n            if (!classContextIsKnown) additionalArgs.Add(Types.DTypeDesc[0]);\r\n            if (!fieldNameIsKnown) additionalArgs.Add(Types.String[0]);\r\n\r\n            var delegateTypeArgs = GetPropertyDelegateTypeArgs(\r\n                staticCall ? Types.DTypeDesc[0] : ((targetObjectPlace != null) ? Types.DObject[0] : Types.Object[0]),   // DTypeDesc of static field's declaring type || DObject if field called on DObject known at compile time || otherwise object\r\n                additionalArgs.ToArray(),\r\n                returnType);\r\n\r\n            var delegateType = /*System.Linq.Expressions.Expression.*/delegateBuilder.GetDelegateType(delegateTypeArgs, callSitesCount);    // (J) do not create dynamic delegates in dynamic modules, so they can be referenced from non-transient assemblies\r\n\r\n            //\r\n            var field = DefineCallSite(cg.IL, string.Format(\"get{0}_{1}\", wantRef ? \"ref\" : string.Empty, fieldName ?? \"$\"), delegateType, (il) =>\r\n            {\r\n                // <LOAD> Binder.{GetProperty|GetStaticProperty}( fieldName, classContext, issetSemantics, <returnType> )\r\n                if (fieldName != null) il.Emit(OpCodes.Ldstr, fieldName); else il.Emit(OpCodes.Ldnull);\r\n                if (this.classContextPlace != null) this.classContextPlace.EmitLoad(il); else il.Emit(OpCodes.Ldsfld, Fields.UnknownTypeDesc.Singleton);\r\n                il.LoadBool(issetSemantics);\r\n\r\n                il.Emit(OpCodes.Ldtoken, returnType);\r\n                il.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n\r\n                il.Emit(OpCodes.Call, staticCall ? Methods.Binder.StaticGetProperty : Methods.Binder.GetProperty);\r\n            });\r\n\r\n            //\r\n            // call the CallSite:\r\n            //\r\n\r\n            // <field>.Target( <field>, <targetExpr|targetType>, (classContext)?, <methodNameExpr>? ):\r\n\r\n            cg.IL.Emit(OpCodes.Ldsfld, field);\r\n            cg.IL.Emit(OpCodes.Ldfld, field.FieldType.GetField(\"Target\"));\r\n            cg.IL.Emit(OpCodes.Ldsfld, field);\r\n            if (staticCall) targetType.EmitLoadTypeDesc(cg, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n            else if (targetExpr != null)\r\n            {\r\n                cg.ChainBuilder.Lengthen(); // for hop over ->\r\n                cg.EmitBoxing(targetExpr.Emit(cg)); // prepare for operator invocation\r\n            }\r\n            else if (targetObjectPlace != null) targetObjectPlace.EmitLoad(cg.IL);\r\n            else if (targetPlace != null) targetPlace.EmitLoad(cg.IL);\r\n            else Debug.Fail(null);\r\n            if (!classContextIsKnown) cg.EmitLoadClassContext();\r\n            if (!fieldNameIsKnown) cg.EmitName(fieldName/*null*/, fieldNameExpr, true, PhpTypeCode.String);\r\n\r\n            cg.MarkTransientSequencePoint();\r\n            cg.IL.Emit(OpCodes.Callvirt, delegateType.GetMethod(\"Invoke\"));\r\n\r\n            cg.MarkTransientSequencePoint();\r\n            \r\n            //\r\n            return PhpTypeCodeEnum.FromType(returnType);\r\n        }\r\n\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/CodeGenerator/Chains.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2003-2006 Martin Maly, Tomas Matousek, Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Collections;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Provides means for building operator chains.\r\n\t/// </summary>\r\n\tinternal sealed class ChainBuilder\r\n\t{\r\n\t\tprivate CodeGenerator codeGenerator;\r\n\r\n\t\tpublic ChainBuilder(CodeGenerator codeGenerator)\r\n\t\t{\r\n\t\t\tthis.codeGenerator = codeGenerator;\r\n\t\t}\r\n\r\n\t\t#region Nested Class: Chain (an item of the stack)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents a single chain being built. Those chains are items of the stack.\r\n\t\t/// </summary>\r\n\t\tprivate class Chain\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Initializes a new empty instance of the <see cref=\"Chain\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"il\">An IL emitter.</param>\r\n\t\t\tpublic Chain(ILEmitter il)\r\n\t\t\t{\r\n\t\t\t\tisChainMember = false;\r\n\t\t\t\tisArrayItem = false;\r\n\t\t\t\tIsLastChainMember = false;\r\n\t\t\t\tlength = 0;\r\n\t\t\t\terrorLabelHasValue = false;\r\n\t\t\t\tthis.il = il;\r\n\t\t\t\tthis.QuietRead = false;\r\n                this.EnsureWritable = false;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets a flag indicating whether the variable being actually emitted \r\n\t\t\t/// is a member of operator's chain.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IsChainMember { get { return isChainMember; } set { isChainMember = value; } }\r\n\t\t\tprivate bool isChainMember;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets a flag indicating whether the variable being actually emitted \r\n\t\t\t/// is an array (see <see cref=\"ItemUse\"/>).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IsArrayItem { get { return isArrayItem; } set { isArrayItem = value; } }\r\n\t\t\tprivate bool isArrayItem;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets a flag indicating whether the the bottom most variable in AST \r\n\t\t\t/// of actually emitted array (see <see cref=\"ItemUse\"/>) is the last member of chain.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IsLastChainMember { get { return isLastChainMember; } set { isLastChainMember = value; } }\r\n\t\t\tprivate bool isLastChainMember;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets a flag indicating whether to force the FunctionCall to place the address of return value\r\n\t\t\t/// in the evaluation stack. The address is consumed by an operator. E.g.:\r\n\t\t\t/// <code>\r\n\t\t\t/// Chain: $z =&amp; $x->f()->y;\r\n\t\t\t/// AST:\r\n\t\t\t///                                             [RAE]\r\n\t\t\t///                                            /  |\r\n\t\t\t///                                         [DVU] |\r\n\t\t\t///                                               |\r\n\t\t\t/// [DVU] +- member of -- [DFC] +- member of -- [DVU]\r\n\t\t\t/// </code>\r\n\t\t\t/// Property set since <see cref=\"Operators.GetObjectPropertyRef\"/> requires the parameter (DFC) to be an address.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool LoadAddressOfFunctionReturnValue\r\n\t\t\t{\r\n\t\t\t\tget { return loadAddressOfFunctionReturnValue; }\r\n\t\t\t\tset { loadAddressOfFunctionReturnValue = value; }\r\n\t\t\t}\r\n\t\t\tprivate bool loadAddressOfFunctionReturnValue;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A value that represents the number of -> and [] operators in the operators chain.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate int length;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets the target <see cref=\"Label\"/> where the control is transfered if an error\r\n\t\t\t/// occure during operators chain processing at runtime. Supports lazy intialization.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Label ErrorLabel           // GENERICS: Label? nullable type\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!errorLabelHasValue)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\terrorLabel = il.DefineLabel();\r\n\t\t\t\t\t\terrorLabelHasValue = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn errorLabel;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\terrorLabel = value;\r\n\t\t\t\t\terrorLabelHasValue = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tprivate Label errorLabel;\r\n\t\t\tprivate bool errorLabelHasValue; // makes errorLabel a nullable structure\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// IL emitter used to generate code for actual operators chain.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate ILEmitter il;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// If set to <c>true</c>, no errors are genereted while emitting isset and unset.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool QuietRead;\r\n\r\n            /// <summary>\r\n            /// If set to <c>true</c>, the chain must not be shared by more variables.\r\n            /// This happens due to the mechanism of lazy copying (<see cref=\"PhpArray\"/>, <see cref=\"PhpBytes\"/>, etc.).\r\n            /// </summary>\r\n            public bool EnsureWritable;\r\n\r\n\t\t\t// obsolete:\r\n\t\t\t//\t\t\tprivate RefErrorLabelInfo refErrorLabelInfo;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Increases the length of the operators chain by one.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Lengthen()\r\n\t\t\t{\r\n\t\t\t\tlength++;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Checks whether operators chain exists (its length is greater than one).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Exist\r\n\t\t\t{\r\n\t\t\t\tget { return length > 1; }\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Begins a new operators chain. Handles the case when the chain is written or read.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Begin()\r\n\t\t\t{\r\n\t\t\t\tisChainMember = true;\r\n\t\t\t\tisArrayItem = false;\r\n\t\t\t\tisLastChainMember = false;\r\n\t\t\t\tloadAddressOfFunctionReturnValue = false;\r\n\t\t\t\t// SHOULD BE 0 !\r\n\t\t\t\tlength = 0;\r\n\t\t\t}\r\n\r\n\t\t\t// obsolete:\r\n\t\t\t//\t\t\t/// <summary>\r\n\t\t\t//\t\t\t/// Begins a new operators chain. Handles the case when the chain is read as a reference.\r\n\t\t\t//\t\t\t/// </summary>\r\n\t\t\t//\t\t\tpublic void BeginRef(RefErrorLabelInfo errorInfo)\r\n\t\t\t//\t\t\t{\r\n\t\t\t//\t\t\t\tthis.Begin();\r\n\t\t\t//\t\t\t\tthis.ErrorLabel = errorInfo.ErrorLabel;\r\n\t\t\t//\t\t\t\tthis.refErrorLabelInfo = errorInfo;\r\n\t\t\t//\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Ends the actuall operators chain. Handles the case when the chain is read and written.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void End()\r\n\t\t\t{\r\n\t\t\t\tisChainMember = false;\r\n\t\t\t\tif (errorLabelHasValue)\r\n\t\t\t\t{\r\n\t\t\t\t\til.MarkLabel(errorLabel, true);\r\n\t\t\t\t\terrorLabelHasValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Ends the actuall operators chain. Handles the case when the chain is read as a reference.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void EndRef(/* TODO: ??? ref RefErrorLabelInfo errorInfo*/)\r\n\t\t\t{\r\n\t\t\t\tisChainMember = false;\r\n\t\t\t\tif (errorLabelHasValue)\r\n\t\t\t\t{\r\n\t\t\t\t\tLabel temp = il.DefineLabel();\r\n\t\t\t\t\til.Emit(OpCodes.Br, temp);\r\n\t\t\t\t\til.MarkLabel(errorLabel, true);\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\t\t\t\t\til.MarkLabel(temp, true);\r\n\t\t\t\t\terrorLabelHasValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Chain Stack\r\n\r\n\t\t/// <summary>\r\n\t\t/// The stack of <see cref=\"Chain\"/> elements which represent contexts for\r\n\t\t/// operator's chains code emmitting.\r\n\t\t/// </summary>\r\n\t\tprivate Stack stack = new Stack(); // GENERICS: Stack<Chain>\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a top item of the <see cref=\"stack\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate Chain TopChain { get { return (Chain)stack.Peek(); } }\r\n\r\n\t\tpublic bool QuietRead\r\n\t\t{\r\n\t\t\tget { return TopChain.QuietRead; }\r\n\t\t\tset { TopChain.QuietRead = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a <B>bool</B> value indicating whether the variable being actually emitted \r\n\t\t/// is a member of operator's chain.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsMember\r\n\t\t{\r\n\t\t\tget { return TopChain.IsChainMember; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether item of the chain is contained in the array subchain.\r\n\t\t/// <code>\r\n\t\t/// -- isMemberOf -- [IU] -- isMemberOf\r\n\t\t///                   /\\\r\n\t\t///                [..] key \r\n\t\t///                 \r\n\t\t/// </code>\r\n\t\t/// All nodes attached to the ItemUse node as children has this flag set to <B>true</B>.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsArrayItem\r\n\t\t{\r\n\t\t\tget { return TopChain.IsArrayItem; }\r\n\t\t\tset { TopChain.IsArrayItem = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a <B>bool</B> value indicating whether the the most bottom variable in AST \r\n\t\t/// of actually emitted array (see <see cref=\"ItemUse\"/>) is the last member of chain.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsLastMember\r\n\t\t{\r\n\t\t\tget { return TopChain.IsLastChainMember; }\r\n\t\t\tset { TopChain.IsLastChainMember = value; }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets or sets value indicating, whether the chain must be ensured to be writable (not shared by more variables).\r\n        /// This happens due to the mechanism of lazy copying (<see cref=\"PhpArray\"/>, <see cref=\"PhpBytes\"/>, etc.).\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// We have to ensure, the array is writable in case where it is marked to be lazy copied and\r\n        /// we are passing it or its item to a library function parameter marked with <see cref=\"PhpRwAttribute\"/>.</remarks>\r\n        public bool EnsureWritable\r\n        {\r\n            get { return TopChain.EnsureWritable; }\r\n            set { TopChain.EnsureWritable = value; }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a <B>bool</B> value indicating whether operators chain exists (its length is greater than one).\r\n\t\t/// </summary>\r\n\t\tpublic bool Exists\r\n\t\t{\r\n\t\t\tget { return TopChain.Exist; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the error label of the current operator chain.\r\n\t\t/// </summary>\r\n\t\tpublic Label ErrorLabel\r\n\t\t{\r\n\t\t\tget { return TopChain.ErrorLabel; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a flag indicating whether to force the FunctionCall to place the address of return value\r\n\t\t/// in the evaluation stack. \r\n\t\t/// </summary>\r\n\t\tpublic bool LoadAddressOfFunctionReturnValue\r\n\t\t{\r\n\t\t\tget { return TopChain.LoadAddressOfFunctionReturnValue; }\r\n\t\t\tset { TopChain.LoadAddressOfFunctionReturnValue = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Increases the length of the operators chain by one.\r\n\t\t/// </summary>\r\n\t\tpublic void Lengthen()\r\n\t\t{\r\n\t\t\tTopChain.Lengthen();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Create, Begin, End, EmitErrorCheck\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a <see cref=\"Chain\"/> item for a new operators chain and pushes it on the stack.\r\n\t\t/// </summary>\r\n\t\tpublic void Create()\r\n\t\t{\r\n\t\t\tstack.Push(new Chain(codeGenerator.IL));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins operators chainining.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This method should precede by a call to <see cref=\"Create\"/> method.\r\n\t\t/// </remarks>\r\n\t\tpublic void Begin()\r\n\t\t{\r\n\t\t\tTopChain.Begin();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends current operator's chain and remove current chain context.\r\n\t\t/// </summary>\r\n\t\tpublic void End()\r\n\t\t{\r\n\t\t\t// terminate current chain\r\n\t\t\tTopChain.End();\r\n\r\n\t\t\t// remove the chain from chain stack\r\n\t\t\tstack.Pop();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends current operator's chain and remove current chain context. Handles the case when operator's chain\r\n\t\t/// is read as a reference.\r\n\t\t/// </summary>\r\n\t\tpublic void EndRef()\r\n\t\t{\r\n\t\t\t// Terminate current chain\r\n\t\t\tTopChain.EndRef(/*TODO: ref this.refErrorLabelInfo*/);\r\n\r\n\t\t\t// Remove the chain from chain stack\r\n\t\t\tstack.Pop();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions to handle the error check after evaluating the chain operator returning \r\n\t\t/// <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>           \r\n\t\t/// <param name=\"isArray\">\r\n\t\t/// Whether the operator's result is of type <see cref=\"PhpArray\"/> (or <see cref=\"PhpObject\"/>).\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// The result value of chain operator method is expected on evaluation stack.\r\n\t\t/// The value is either left on the evaluation stack or the control is branched to error label.\r\n\t\t/// </remarks>\r\n\t\tprivate void EmitErrorCheck(bool isArray)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\tLocalBuilder temp = il.GetTemporaryLocal(isArray ? Types.PhpArray[0] : Types.DObject[0], true);\r\n\r\n\t\t\til.Stloc(temp);\r\n\t\t\til.Ldloc(temp);\r\n\t\t\til.Emit(OpCodes.Brfalse, TopChain.ErrorLabel);\r\n\t\t\til.Ldloc(temp);\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n\t\t#region Nested Class: ObjectFieldLazyEmitInfo\r\n\r\n\t\t/// <summary>\r\n\t\t/// <see cref=\"ObjectFieldLazyEmitInfo\"/> class holds data controling lazy code generation of the\r\n\t\t/// <see cref=\"PHP.Core.AST.ItemUse\"/><c>.IsMemberOf</c> object.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Lazy code generation takes place if <see cref=\"PHP.Core.AST.ItemUse\"/><c>.IsMemberOf</c>\r\n\t\t/// is NOT equal to <B>null</B> which means that the most bottom node in <see cref=\"ItemUse.Array\"/>\r\n\t\t/// objects path should emit <see cref=\"PHP.Core.Operators.EnsurePropertyIsArray\"/> operator call.\r\n\t\t/// </remarks>\r\n\t\tinternal class ObjectFieldLazyEmitInfo\r\n\t\t{\r\n\t\t\tprivate VarLikeConstructUse objectForLazyEmit;\r\n\t\t\tpublic bool Old_IsArrayItem;\r\n\t\t\tpublic bool Old_IsLastMember;\r\n\r\n\t\t\tinternal VarLikeConstructUse ObjectForLazyEmit\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(objectForLazyEmit != null);\r\n\t\t\t\t\treturn objectForLazyEmit;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(value != null);\r\n\t\t\t\t\tobjectForLazyEmit = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic ObjectFieldLazyEmitInfo(VarLikeConstructUse var_object, bool old_IsArrayItem, bool old_IsLastMember)\r\n\t\t\t{\r\n\t\t\t\tthis.objectForLazyEmit = var_object;\r\n\t\t\t\tthis.Old_IsArrayItem = old_IsArrayItem;\r\n\t\t\t\tthis.Old_IsLastMember = old_IsLastMember;\r\n\t\t\t}\r\n\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\tobjectForLazyEmit = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Nested Class: ObjectFieldLazyEmitInfoCache\r\n\r\n\t\t/// <summary>\r\n\t\t/// <see cref=\"ObjectFieldLazyEmitInfoCache\"/> class provides the service for reusing <see cref=\"ObjectFieldLazyEmitInfo\"/> objects once \r\n\t\t/// instantialized.\r\n\t\t/// </summary>\r\n\t\tprivate class ObjectFieldLazyEmitInfoCache\r\n\t\t{\r\n\t\t\tprivate Stack stack;\r\n\r\n\t\t\tpublic ObjectFieldLazyEmitInfoCache()\r\n\t\t\t{\r\n\t\t\t\tstack = new Stack();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets the <see cref=\"ObjectFieldLazyEmitInfo\"/> object stored in collection.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"var_object\"></param>\r\n\t\t\t/// <param name=\"old_IsArrayItem\"></param>\r\n\t\t\t/// <param name=\"old_IsLastMember\"></param>\r\n\t\t\t/// <returns></returns>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This method should only be called from <see cref=\"ChainBuilder.GetObjectForLazyEmit\"/> method.\r\n\t\t\t/// </remarks>\r\n\t\t\tpublic ObjectFieldLazyEmitInfo GetItem(VarLikeConstructUse var_object, bool old_IsArrayItem, bool old_IsLastMember)\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tObjectFieldLazyEmitInfo info = (ObjectFieldLazyEmitInfo)stack.Pop();\r\n\t\t\t\t\tDebug.Assert(info != null);\r\n\t\t\t\t\tinfo.ObjectForLazyEmit = var_object;\r\n\t\t\t\t\tinfo.Old_IsArrayItem = old_IsArrayItem;\r\n\t\t\t\t\tinfo.Old_IsLastMember = old_IsLastMember;\r\n\t\t\t\t}\r\n\t\t\t\treturn new ObjectFieldLazyEmitInfo(var_object, old_IsArrayItem, old_IsLastMember);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Sets the <see cref=\"ObjectFieldLazyEmitInfo\"/> object to the collection.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"info\"></param>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This method should only be called from <see cref=\"ChainBuilder.ReleaseObjectForLazyEmit\"/> method.\r\n\t\t\t/// </remarks>\r\n\t\t\tpublic void SetItem(ObjectFieldLazyEmitInfo info)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(stack != null);\r\n\t\t\t\tinfo.Reset();\r\n\t\t\t\tstack.Push(info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Object Field Lazy Emit\r\n\r\n\t\tprivate ObjectFieldLazyEmitInfoCache objectFieldLazyEmitInfoCache;\r\n\t\tprivate ObjectFieldLazyEmitInfo objectFieldLazyEmitInfo;\r\n\r\n\t\tinternal void SetObjectForLazyEmit(VariableUse object_holder)\r\n\t\t{\r\n\t\t\tDebug.Assert(object_holder is ItemUse);\r\n\t\t\tif (objectFieldLazyEmitInfoCache == null) objectFieldLazyEmitInfoCache = new ObjectFieldLazyEmitInfoCache();\r\n\t\t\tobjectFieldLazyEmitInfo = objectFieldLazyEmitInfoCache.GetItem(object_holder.IsMemberOf, this.IsArrayItem, this.IsLastMember);\r\n\t\t}\r\n\r\n\t\tinternal ObjectFieldLazyEmitInfo GetObjectForLazyEmit()\r\n\t\t{\r\n\t\t\tDebug.Assert(objectFieldLazyEmitInfo != null);\r\n\t\t\tObjectFieldLazyEmitInfo info = objectFieldLazyEmitInfo;\r\n\t\t\tobjectFieldLazyEmitInfo = null;\r\n\t\t\tthis.IsArrayItem = info.Old_IsArrayItem;\r\n\t\t\tthis.IsLastMember = info.Old_IsLastMember;\r\n\t\t\treturn info;\r\n\t\t}\r\n\r\n\t\tinternal void ReleaseObjectForLazyEmit(ObjectFieldLazyEmitInfo info)\r\n\t\t{\r\n\t\t\tobjectFieldLazyEmitInfoCache.SetItem(info);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#region Reading...\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that load a value of the specified property of an object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\"><see cref=\"PHP.Core.AST.VariableUse\"/> class determining the name of the field.</param>\r\n\t\t/// <remarks>Expects that the <see cref=\"PHP.Core.Reflection.DObject\"/> whose property value should be obtained\r\n\t\t/// is loaded on the evaluation stack. The value of the property is left on the evaluation stack.</remarks>\r\n\t\tpublic PhpTypeCode EmitGetProperty(SimpleVarUse variable)\r\n\t\t{\r\n\t\t\tDebug.Assert(variable is DirectVarUse || variable is IndirectVarUse);\r\n\r\n            var il = codeGenerator.IL;\r\n\r\n            // we already have the instance value on top of the stack,\r\n            // it must be stored in local variable first so we can call\r\n            // call CallSite normally.\r\n            \r\n            // <memberOf> = <STACK:variable>:\r\n            var memberOf = il.GetTemporaryLocal(Types.Object[0]);\r\n            il.Stloc(memberOf);\r\n\r\n            // create and call the CallSite:\r\n            string fieldName = (variable is DirectVarUse) ? ((DirectVarUse)variable).VarName.Value : null;\r\n            Expression fieldNameExpr = (variable is IndirectVarUse) ? ((IndirectVarUse)variable).VarNameEx : null;\r\n            \r\n            var result = codeGenerator.CallSitesBuilder.EmitGetProperty(codeGenerator, false,\r\n                null, null, new IndexedPlace(memberOf),\r\n                null,\r\n                fieldName, fieldNameExpr,\r\n                QuietRead);\r\n\r\n            // return temporary variable:\r\n            il.ReturnTemporaryLocal(memberOf);\r\n\r\n            //\r\n            return result;\r\n\r\n            //// CALL object Operators.GetProperty(<STACK:variable>,<field name>,<type desc>);\r\n            //variable.EmitName(codeGenerator);\r\n            //codeGenerator.EmitLoadClassContext();\r\n            //codeGenerator.IL.LoadBool(QuietRead);\r\n            //codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.GetProperty);\r\n\r\n\t\t\t//return PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that load the value of an item of given array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\"><see cref=\"Expression\"/> determining the array.</param>\r\n\t\t/// <param name=\"index\"><see cref=\"Expression\"/> determining the index whose value \r\n\t\t/// should be obtained from the array.</param>\r\n\t\t/// <param name=\"kind\">A kind of getter.</param>\r\n\t\t/// <remarks>Nothing is supposed on the evaluation stack. The value of the item is left\r\n\t\t/// on the evaluation stack.</remarks>\r\n\t\tpublic PhpTypeCode EmitGetItem(Expression/*!*/ array, Expression/*!*/ index, Operators.GetItemKinds kind)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\t\r\n\t\t\t// array:\r\n\t\t\tvar arrayTypeCode = array.Emit(codeGenerator);\r\n\r\n            // ensure the array is writeable is required\r\n            if (EnsureWritable)\r\n                codeGenerator.EmitEnsureWritable(arrayTypeCode);\r\n\r\n\t\t\t// index:\r\n\t\t\tPhpTypeCode index_type_code = codeGenerator.EmitArrayKey(this, index);\r\n\r\n\t\t\t// kind:\r\n\t\t\tif (kind == Operators.GetItemKinds.Get && QuietRead)\r\n\t\t\t\tkind = Operators.GetItemKinds.QuietGet;\r\n\t\t\til.LdcI4((int)kind);\r\n\r\n\t\t\t// CALL Operators.GetItem(<array>, <index>, <kind>)\r\n\t\t\tcodeGenerator.EmitGetItem(index_type_code, index, false);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that loads the value of array's item as a <see cref=\"PHP.Core.PhpReference\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">A simple variable.</param>\r\n\t\t/// <param name=\"index\"><see cref=\"Expression\"/> determining the index.</param> \r\n\t\tpublic PhpTypeCode EmitGetItemRef(SimpleVarUse/*!*/ variable, Expression index)\r\n\t\t{\r\n\t\t\tIsArrayItem = true;\r\n\t\t\tIsLastMember = true;\r\n\t\t\t\r\n\t\t\tPhpTypeCode index_type_code = PhpTypeCode.Invalid;\r\n\r\n\t\t\t// index:\r\n\t\t\tif (index != null)\r\n\t\t\t\tindex_type_code = codeGenerator.EmitArrayKey(this, index);\r\n\r\n\t\t\t// array:\r\n\t\t\tvariable.Emit(codeGenerator);\r\n\r\n\t\t\t// LOAD Operators.GetItemRef([<index>], ref <variable>)\r\n\t\t\tcodeGenerator.EmitGetItem(index_type_code, index, true);\r\n\t\t\t\r\n\t\t\t// store the changed variable into table of variables (do nothing in optimalized functions)\r\n\t\t\tvariable.EmitLoadAddress_StoreBack(codeGenerator);\r\n\r\n\t\t\tIsArrayItem = false;\r\n\r\n\t\t\treturn PhpTypeCode.PhpReference;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Writing...\r\n\r\n\t\t#region Single node (no chains)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that sets the value to an <see cref=\"PHP.Core.PhpArray\"/> item.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This method is used to set the item of an array having the index determined (not <B>null</B>).\r\n\t\t/// This method is called only in simple cases when operators chained are <b>not</b> involved.\r\n\t\t/// See short example of PHP code below.\r\n\t\t/// Expects that the reference to the object whose item should be set, the index and the value\r\n\t\t/// are loaded on the evaluation stack. Nothing is left on the evaluation stack.\r\n\t\t/// stack. \r\n\t\t/// </remarks>\r\n\t\t/// <example>$a[3] = \"foo\"; $a[] = \"foo\";</example>\r\n\t\t/// <example>$x[y] =&amp; p; $x[] =&amp; p;</example>\r\n\t\tpublic void EmitSetItem(PhpTypeCode keyTypeCode, Expression index, bool reference)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitSetItem(keyTypeCode, index, reference);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region First operator (EnsureVariableIsArray, EnsureVariableIsObject, EnsureStaticPropertyIsArray, EnsureStaticPropertyIsObject)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that the specified variable is an instance of <see cref=\"PhpArray\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">Variable's name-index to a table of identifiers.</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method is used in operators chains. Nothing is expected on the evaluation stack. \r\n\t\t/// If the specified variable is an instance of <see cref=\"PhpArray\"/>\r\n\t\t/// it is left on the evaluation stack. Otherwise the control is transfered to the end of \r\n\t\t/// the chain.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitEnsureVariableIsArray(SimpleVarUse variable)\r\n\t\t{\r\n\t\t\t// Template: PhpArray     EnsureVariableIsArray(ref object)\r\n\r\n\t\t\t// Load variable's address\r\n\t\t\t//this.EmitVariableLoadAddress(variable);\r\n\t\t\tvariable.EmitLoadAddress(codeGenerator);\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsArray);\r\n\t\t\t// Store the changed destVar into table of variables (do nothing in optimalized functions)\r\n\t\t\tvariable.EmitLoadAddress_StoreBack(codeGenerator);\r\n\t\t\tEmitErrorCheck(true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that the specified variable is an instance of <see cref=\"PhpObject\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">Variable that should be examined.</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method is used in operators chains. Nothing is expected on the evaluation stack. \r\n\t\t/// If the specified variable is an instance of <see cref=\"PhpObject\"/>\r\n\t\t/// it is left on the evaluation stack. Otherwise the control is transfered to the end of \r\n\t\t/// the chain.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitEnsureVariableIsObject(SimpleVarUse variable)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tDirectVarUse direct_variable = variable as DirectVarUse;\r\n\t\t\tif (direct_variable != null && direct_variable.VarName.IsThisVariableName)\r\n\t\t\t{\r\n\t\t\t\t// special treatment of $this\r\n\t\t\t\tswitch (codeGenerator.LocationStack.LocationType)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase LocationTypes.GlobalCode:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// load $this from one of Main's arguments and check for null\r\n\t\t\t\t\t\t\tLabel this_non_null = il.DefineLabel();\r\n\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Brtrue_S, this_non_null);\r\n\r\n\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\t\t\t\t\t\t\til.MarkLabel(this_non_null, true);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase LocationTypes.FunctionDecl:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// always throws error\r\n\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase LocationTypes.MethodDecl:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tCompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n\t\t\t\t\t\t\tif (context.Method.IsStatic)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// always throws error\r\n\t\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// arg0 or <proxy> in instance methods\r\n\t\t\t\t\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Assert(false, \"Invalid location type.\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Template: PhpObject    EnsureVariableIsObject(ref object,ScriptContext)\r\n\r\n\t\t\t\t// Load variable's address\r\n\t\t\t\t//\t\t\t\tif (variable is FunctionCall)\r\n\t\t\t\t//\t\t\t\t{\r\n\t\t\t\t//\t\t\t\t\tvariable.Emit(this);\r\n\t\t\t\t//\t\t\t\t\tEmitLoadScriptContext();\r\n\t\t\t\t//\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsObject);\r\n\t\t\t\t//\t\t\t\t\t// Store the changed destVar into table of variables (do nothing in optimalized functions)\r\n\t\t\t\t//\t\t\t\t}\r\n\t\t\t\t//\t\t\t\telse\r\n\t\t\t\t//\t\t\t\t{\r\n\t\t\t\tvariable.EmitLoadAddress(codeGenerator);\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsObject);\r\n\t\t\t\t// Store the changed destVar into table of variables (do nothing in optimalized functions)\r\n\t\t\t\tvariable.EmitLoadAddress_StoreBack(codeGenerator);\r\n\t\t\t\t//\t\t\t\t}\r\n\t\t\t\tEmitErrorCheck(false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that the variable on the top of the evaluation stack is an instance of <see cref=\"PhpObject\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This method is used in operators chains to ensure that the variable placed on the top of the evaluation stack by \r\n\t\t/// a function call is of type PhpObject. The address ot the variable to check is expected on the evaluation stack. \r\n\t\t/// If the specified variable is an instance of <see cref=\"PhpObject\"/>\r\n\t\t/// it is left on the evaluation stack. Otherwise the control is transfered to the end of \r\n\t\t/// the chain.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitEnsureVariableIsObject()\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsObject);\r\n\t\t\t// Store the changed destVar into table of variables (do nothing in optimalized functions)\r\n\t\t\tEmitErrorCheck(false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that a static field is of <see cref=\"PhpObject\"/> or <see cref=\"PhpArray\"/>\r\n\t\t/// type. Handles the case when field name is unknown at compile time (see <see cref=\"AST.IndirectStFldUse\"/>).\r\n\t\t/// </summary>\r\n        /// <param name=\"typeRef\">The class name (identifier index).</param>\r\n\t\t/// <param name=\"propertyName\">The property name.</param>\r\n\t\t/// <param name=\"propertyNameExpr\">The expression that evaluates to property name.</param>\r\n\t\t/// <param name=\"ensureArray\">Whether to ensure that static field is an array (or an object).</param>\r\n\t\t/// <remarks>\r\n\t\t/// Nothing is expected on the evaluation stack. A <see cref=\"PhpArray\"/> or <see cref=\"DObject\"/> is left on the\r\n\t\t/// evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpTypeCode EmitEnsureStaticProperty(TypeRef typeRef, VariableName? propertyName,\r\n\t\t\tExpression propertyNameExpr, bool ensureArray)\r\n\t\t{\r\n\t\t\tDebug.Assert(propertyName != null ^ propertyNameExpr != null);\r\n\r\n\t\t\tResolveTypeFlags flags = ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors;\r\n\r\n\t\t\t// LOAD Operators.EnsureStaticFieldIs[Object|Array](<type desc>, <field name>, <type desc>, <context>)\r\n            typeRef.EmitLoadTypeDesc(codeGenerator, flags);\r\n\r\n\t\t\tif (propertyNameExpr != null)\r\n\t\t\t\tcodeGenerator.EmitBoxing(propertyNameExpr.Emit(codeGenerator));\r\n\t\t\telse\r\n\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Ldstr, propertyName.Value.ToString());\r\n\r\n\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\r\n\t\t\tif (ensureArray)\r\n\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.EnsureStaticPropertyIsArray);\r\n\t\t\telse\r\n\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.EnsureStaticPropertyIsObject);\r\n\r\n\t\t\tEmitErrorCheck(ensureArray);\r\n\t\t\treturn (ensureArray) ? PhpTypeCode.PhpArray : PhpTypeCode.DObject;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that a static field is of <see cref=\"PhpObject\"/> or <see cref=\"PhpArray\"/>\r\n\t\t/// type. Handles the case when field name is known at compile time (see <see cref=\"AST.DirectStFldUse\"/>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"property\">The corresponding <see cref=\"DProperty\"/> or <B>null</B>.</param>\r\n        /// <param name=\"typeRef\">The class type reference (identifier index).</param>\r\n\t\t/// <param name=\"fieldName\">The field name (identifier index).</param>\r\n\t\t/// <param name=\"ensureArray\">Whether to ensure that static field is an array (or an object).</param>\r\n\t\t/// <remarks>\r\n\t\t/// Nothing is expected on the evaluation stack. A <see cref=\"PhpObject\"/> or <see cref=\"DObject\"/> is left\r\n\t\t/// on the evaluation stack or the last emitted instruction is unconditional branch to <see cref=\"Chain.ErrorLabel\"/>.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpTypeCode EmitEnsureStaticProperty(DProperty property, TypeRef typeRef,\r\n\t\t\tVariableName fieldName, bool ensureArray)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tPhpField php_field = property as PhpField;\r\n\t\t\tif (php_field != null)\r\n\t\t\t{\r\n\t\t\t\t// HACK HACK\r\n\t\t\t\tEmitEnsureStaticPhpFieldDirect(php_field, ensureArray);\r\n\r\n\t\t\t\tEmitErrorCheck(ensureArray);\r\n\t\t\t\treturn (ensureArray) ? PhpTypeCode.PhpArray : PhpTypeCode.DObject;\r\n\t\t\t}\r\n            else return EmitEnsureStaticProperty(typeRef, fieldName, null, ensureArray);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// I do not like PHP-specific access code emission here. TODO: Move to PhpField\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"phpField\"></param>\r\n\t\t/// <param name=\"ensureArray\"></param>\r\n\t\tvoid EmitEnsureStaticPhpFieldDirect(PhpField phpField, bool ensureArray)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\tMethodInfo static_init_info = ((PhpType)phpField.Implementor).StaticFieldInitMethodInfo;\r\n\r\n\t\t\t// ensure that the field has been initialized for this request by invoking __InitializeStaticFields\r\n\t\t\tif (static_init_info != null && !il.IsFeatureControlFlowPrecedent(phpField.Implementor))\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Call, static_init_info);\r\n\r\n\t\t\t\t// remember that we have just initialized class_entry's static fields\r\n\t\t\t\til.MarkFeature(phpField.Implementor);\r\n\t\t\t}\r\n\r\n\t\t\t// LOAD EnsureVariableIs[Array|Object](ref <field>.value,[<context>]);\r\n\t\t\til.Emit(OpCodes.Ldsfld, phpField.RealField);\r\n\t\t\til.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n\r\n\t\t\tif (ensureArray)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsArray);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsObject);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Middle operators (EnsureItemIsArray, EnsureItemIsObject, EnsurePropertyIsArray, EnsurePropertyIsObject)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that the specified item of specified array is of\r\n\t\t/// type <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">Array which item is examined.</param>\r\n\t\t/// <param name=\"index\">Index determining the item which should be examined (can be <B>null</B>).</param>\r\n\t\t/// <param name=\"ensureArray\">Whether to ensure that static field is an array (or an object).</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method is used in operators chains. Nothing is expected on the evaluation stack. \r\n\t\t/// If the item is of type <see cref=\"PhpArray\"/> and <see cref=\"PhpObject\"/> (respectively) \r\n\t\t/// it is left on the evaluation stack. Otherwise the control is transfered to the end of chain.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpTypeCode EmitEnsureItem(Expression/*!*/ array, Expression index, bool ensureArray)\r\n\t\t{\r\n\t\t\tif (!ensureArray) Lengthen();\r\n\r\n\t\t\tarray.Emit(codeGenerator);\r\n\r\n\t\t\tif (index != null)\r\n\t\t\t{\r\n\t\t\t\t// keyed item:\r\n\t\t\t\tCreate();\r\n\t\t\t\tcodeGenerator.EmitBoxing(index.Emit(codeGenerator));\r\n\t\t\t\tEnd();\r\n\r\n\t\t\t\tif (ensureArray)\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Callvirt, Methods.PhpArray.EnsureItemIsArray_Object);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Callvirt, Methods.PhpArray.EnsureItemIsObject_Object);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// key-less item:\r\n\t\t\t\tif (ensureArray)\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Callvirt, Methods.PhpArray.EnsureItemIsArray);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Callvirt, Methods.PhpArray.EnsureItemIsObject);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tEmitErrorCheck(ensureArray);\r\n\t\t\treturn (ensureArray) ? PhpTypeCode.PhpArray : PhpTypeCode.DObject;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that ensure that the specified property of an object is\r\n\t\t/// of the <see cref=\"PhpArray\"/> type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"varObject\">Represents the instance whose property should be examined.</param>\r\n\t\t/// <param name=\"fieldName\">A <see cref=\"SimpleVarUse\"/> that evaluates to the property name.</param>\r\n\t\t/// <param name=\"ensureArray\">Whether to ensure that static property is an array (or an object).</param>\r\n\t\t/// <remarks>Nothing is expected on the evaluation stack. If the property is of <see cref=\"PhpArray\"/> type\r\n\t\t/// it is left on the evaluation stack. Otherwise the control is transfered to the end of chain.</remarks>\r\n\t\tpublic PhpTypeCode EmitEnsureProperty(VarLikeConstructUse/*!*/ varObject, SimpleVarUse/*!*/ fieldName, bool ensureArray)\r\n\t\t{\r\n\t\t\t// Template: PhpArray EnsurePropertyIsArray(DObject,field,DTypeDesc)\r\n\t\t\tDebug.Assert(varObject != null && fieldName != null);\r\n\t\t\tDebug.Assert(fieldName is DirectVarUse || fieldName is IndirectVarUse);\r\n\r\n\t\t\tLocationTypes location;\r\n\t\t\tDProperty property = ResolveProperty(varObject, fieldName, out location);\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tPhpField php_field = property as PhpField;\r\n\t\t\tif (php_field != null) // we can emit code that manipulates the property directly\r\n\t\t\t{\r\n\t\t\t\t// HACK HACK\r\n\t\t\t\tEmitEnsurePhpFieldDirect(php_field, fieldName, ensureArray);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tswitch (location)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase LocationTypes.GlobalCode:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// call EnsurePropertyIsArray\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\t\t\t\tfieldName.EmitName(codeGenerator);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\r\n\t\t\t\t\t\t\tif (ensureArray)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsArray);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsObject);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase LocationTypes.MethodDecl:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (ensureArray) this.Lengthen(); // for hop over ->\r\n\t\t\t\t\t\t\tFunctionCall func = varObject as FunctionCall;\r\n\t\t\t\t\t\t\tif (func == null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvarObject.Emit(codeGenerator);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.LoadAddressOfFunctionReturnValue = true;\r\n\t\t\t\t\t\t\t\tfunc.Emit(codeGenerator);\r\n\t\t\t\t\t\t\t\tRecastValueReturnedByFunctionCall();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfieldName.EmitName(codeGenerator);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\r\n\t\t\t\t\t\t\tif (ensureArray)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsArray);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsObject);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tEmitErrorCheck(ensureArray);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if the location was FunctionDecl, appropriate code was already generated by GetDProperty\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn (ensureArray ? PhpTypeCode.PhpArray : PhpTypeCode.DObject);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// I do not like PHP-specific access code emission here. TODO: Move to PhpField\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"field\"></param>\r\n\t\t/// <param name=\"fieldName\"></param>\r\n\t\t/// <param name=\"ensureArray\"></param>\r\n\t\tprivate void EmitEnsurePhpFieldDirect(PhpField/*!*/ field, SimpleVarUse/*!*/ fieldName, bool ensureArray)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\t// check whether the field is set\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Emit(OpCodes.Ldfld, field.RealField);\r\n\r\n\t\t\tLabel direct_ensure = il.DefineLabel();\r\n\t\t\tLabel ensuring_over = il.DefineLabel();\r\n\r\n\t\t\t// test whether it is set\r\n\t\t\til.Emit(OpCodes.Callvirt, Properties.PhpReference_IsSet.GetGetMethod());\r\n\t\t\til.Emit(OpCodes.Brtrue, direct_ensure);\r\n\r\n\t\t\t// the field has been unset -> must call operator that handles __get/__set\r\n\t\t\tif (ensureArray) this.Lengthen();  // TODO: ???\r\n\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\tfieldName.EmitName(codeGenerator);\r\n\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\t\t\tif (ensureArray)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsArray);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsurePropertyIsObject);\r\n\t\t\t}\r\n\t\t\til.Emit(OpCodes.Br, ensuring_over);\r\n\r\n\t\t\t// read the field again and call EnsureVariableIsArray\r\n\t\t\til.MarkLabel(direct_ensure, true);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Emit(OpCodes.Ldfld, field.RealField);\r\n\t\t\til.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n\r\n\t\t\tif (ensureArray)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsArray);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.EnsureVariableIsObject);\r\n\t\t\t}\r\n\r\n\t\t\til.MarkLabel(ensuring_over, true);\r\n\t\t\tEmitErrorCheck(ensureArray);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to find an instance of <see cref=\"DProperty\"/> that corresponds to an instance property given by\r\n\t\t/// <paramref name=\"varObject\"/> and <paramref name=\"fieldName\"/>. Currently it is possible only if\r\n\t\t/// <paramref name=\"varObject\"/> represents <B>$this</B> and <paramref name=\"fieldName\"/> is a compile time\r\n\t\t/// known instance property, which is surely accessible from current location.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"varObject\">Represents the left side of <B>-&gt;</B>.</param>\r\n\t\t/// <param name=\"fieldName\">Represents the right side of <B>-&gt;</B>.</param>\r\n\t\t/// <param name=\"location\">Current location, valid only if the return value is <B>null</B>. Used by the caller to\r\n\t\t/// decide what kind of run time access should be emitted.</param>\r\n\t\t/// <returns>A valid non-<B>null</B> <see cref=\"PhpField\"/> if the field was found, <B>null</B> otherwise.</returns>\r\n\t\tinternal DProperty ResolveProperty(VarLikeConstructUse varObject, SimpleVarUse fieldName, out LocationTypes location)\r\n\t\t{\r\n\t\t\tDirectVarUse direct_var = varObject as DirectVarUse;\r\n\t\t\tDirectVarUse direct_field_name;\r\n\r\n\t\t\tif (direct_var != null && (direct_field_name = fieldName as DirectVarUse) != null &&\r\n\t\t\t\tdirect_var.IsMemberOf == null && direct_var.VarName.IsThisVariableName)\r\n\t\t\t{\r\n\t\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\t\tlocation = codeGenerator.LocationStack.LocationType;\r\n\t\t\t\tswitch (location)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase LocationTypes.GlobalCode:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// load $this from one of Main's arguments and check for null\r\n\t\t\t\t\t\t\tLabel this_non_null = il.DefineLabel();\r\n\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Brtrue_S, this_non_null);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\t\t\t\t\t\t\til.MarkLabel(this_non_null, true);\r\n\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase LocationTypes.FunctionDecl:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// always throws error\r\n\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase LocationTypes.MethodDecl:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tCompilerLocationStack.MethodDeclContext context = codeGenerator.LocationStack.PeekMethodDecl();\r\n\t\t\t\t\t\t\tif (context.Method.IsStatic)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// always throws error\r\n\t\t\t\t\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.ThisUsedOutOfObjectContext);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Br, TopChain.ErrorLabel);\r\n\r\n\t\t\t\t\t\t\t\tlocation = LocationTypes.FunctionDecl;\r\n\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tDProperty property;\r\n\t\t\t\t\t\t\t\tif (context.Type.GetProperty(direct_field_name.VarName, context.Type, out property)\r\n\t\t\t\t\t\t\t\t\t== GetMemberResult.OK && !property.IsStatic)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn property;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlocation = LocationTypes.MethodDecl;\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal void RecastValueReturnedByFunctionCall()\r\n\t\t{\r\n\t\t\tthis.EmitEnsureVariableIsObject();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Last operator (GetArrayItem, GetArrayItemRef, GetObjectProperty, GetObjectPropertyRef, SetArrayItem, SetObjectProperty, a function/method call)\r\n\r\n\t\tpublic void EmitGetArrayItemRef(Expression/*!*/ array, Expression index)\r\n\t\t{\r\n\t\t\tarray.Emit(codeGenerator);\r\n\r\n\t\t\tPhpTypeCode index_type_code = PhpTypeCode.Invalid;\r\n\r\n\t\t\tif (index != null)\r\n\t\t\t\tindex_type_code = codeGenerator.EmitArrayKey(this, index);\r\n\r\n\t\t\tcodeGenerator.EmitGetArrayItem(index_type_code, index, true);\r\n\t\t}\r\n\r\n\t\tpublic void EmitSetArrayItem(PhpTypeCode keyTypeCode, Expression index, bool reference)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitSetArrayItem(keyTypeCode, index, reference, false);\r\n\t\t}\r\n\r\n\t\tpublic void EmitSetObjectField()\r\n\t\t{\r\n\t\t\t// CALL Operators.SetObjectProperty(STACK:obj,STACK:name,STACK:value,<type desc>);\r\n\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.SetObjectProperty);\r\n\r\n            //always when function with void return argument is called it's necesarry to add nop instruction due to debugger\r\n            if (codeGenerator.Context.Config.Compiler.Debug)\r\n            {\r\n                codeGenerator.IL.Emit(OpCodes.Nop);\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Runtime Chains\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that create a new empty <see cref=\"PhpRuntimeChain\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Nothing is expected on the evaluation stack, a reference to <see cref=\"PhpRuntimeChain\"/>\r\n\t\t/// is left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitCreateRTChain()\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Newobj, Constructors.PhpRuntimeChain_Object_DTypeDesc);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that add an object field access to the current <see cref=\"PhpRuntimeChain\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"varUse\">AST node representing the field access.</param>\r\n\t\t/// <remarks>\r\n\t\t/// A reference to <see cref=\"PhpRuntimeChain\"/> is expected and left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitRTChainAddField(SimpleVarUse varUse)\r\n\t\t{\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Dup);\r\n\t\t\tvarUse.EmitName(codeGenerator);\r\n\t\t\tcodeGenerator.IL.EmitCall(OpCodes.Call, Methods.PhpRuntimeChain.AddField, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that add an array item access to the current <see cref=\"PhpRuntimeChain\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"itemUse\">AST node representing the item access.</param>\r\n\t\t/// <remarks>\r\n\t\t/// A reference to <see cref=\"PhpRuntimeChain\"/> is expected and left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitRTChainAddItem(ItemUse itemUse)\r\n\t\t{\r\n\t\t\tPhpTypeCode res = itemUse.Array.Emit(codeGenerator);\r\n\r\n\t\t\t// create the runtime chain if it has not been done so\r\n\t\t\tif (res != PhpTypeCode.PhpRuntimeChain)\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitBoxing(res);\r\n\t\t\t\tEmitCreateRTChain();\r\n\t\t\t}\r\n\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Dup);\r\n\r\n\t\t\tif (itemUse.Index != null)\r\n\t\t\t{\r\n\t\t\t\t// [x]\r\n\t\t\t\tCreate();\r\n\t\t\t\tcodeGenerator.EmitBoxing(itemUse.Index.Emit(codeGenerator));\r\n\t\t\t\tEnd();\r\n\t\t\t\tcodeGenerator.IL.EmitCall(OpCodes.Call, Methods.PhpRuntimeChain.AddItem_Object, null);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// []\r\n\t\t\t\tcodeGenerator.IL.EmitCall(OpCodes.Call, Methods.PhpRuntimeChain.AddItem_Void, null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Unset\r\n\r\n\t\tpublic void EmitUnsetItem(Expression array, Expression index)\r\n\t\t{\r\n\t\t\t// Template:\r\n\t\t\t//\t\tvoid UnsetItem(object var,object index)\r\n\r\n\t\t\tarray.Emit(codeGenerator);\r\n\r\n\t\t\tDebug.Assert(index != null);\r\n\r\n\t\t\tCreate();\r\n\t\t\tcodeGenerator.EmitBoxing(index.Emit(codeGenerator));\r\n\t\t\tEnd();\r\n\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.UnsetItem);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/CodeGenerator/CodeGenerator.cs",
    "content": "/*\r\n\r\n  Copyright (c) 2007- DEVSENSE\r\n  Copyright (c) 2003-2006 Tomas Matousek, Ladislav Prosek \r\n  Copyright (c) 2003-2004 Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics.SymbolStore;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Compiler.AST;\r\n\r\nnamespace PHP.Core\r\n{\r\n\tinternal delegate void AssignmentCallback(CodeGenerator/*!*/ codeGenerator, PhpTypeCode stackTypeCode);\r\n\r\n\t/// <summary>\r\n\t/// Manage the process of code generation.\r\n\t/// </summary>\r\n\tinternal sealed class CodeGenerator : AstVisitor\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// <see cref=\"PHP.Core.Emit.ILEmitter\"/> currently used to emit IL instructions.\r\n\t\t/// </summary>\r\n\t\tpublic ILEmitter IL { get { return il; } set { il = value; } }\r\n\t\tprivate ILEmitter il;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The current compilation context.\r\n\t\t/// </summary>\r\n\t\tpublic override CompilationContext Context { get { return context; } }\r\n\t\tprivate CompilationContext context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current source unit. Switched by <see cref=\"GlobalCode\"/>.\r\n        /// Internally modifiable in order to change the sourceUnit during the emission of methods/fields in partial classes.\r\n\t\t/// </summary>\r\n        public CompilationSourceUnit SourceUnit { get { return sourceUnit; } internal set { sourceUnit = value; } }\r\n        private CompilationSourceUnit sourceUnit;\r\n\r\n\t\tpublic CompilationUnitBase CompilationUnit { get { return sourceUnit.CompilationUnit; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a stack that stores information that has to be shared by more AST nodes.\r\n\t\t/// </summary>\r\n\t\tinternal CompilerLocationStack LocationStack { get { return locationStack; } }\r\n\t\tprivate CompilerLocationStack locationStack;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a stack used for branching statements (<B>break</B>, <B>continue</B>).\r\n\t\t/// </summary>\r\n\t\tinternal BranchingStack BranchingStack { get { return branchingStack; } }\r\n\t\tprivate BranchingStack branchingStack;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A builder used for generating chained operators.\r\n\t\t/// </summary>\r\n\t\tinternal ChainBuilder ChainBuilder { get { return chainBuilder; } }\r\n\t\tprivate ChainBuilder chainBuilder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the current function returns by reference.\r\n\t\t/// Used by return statement. Set in enter/leave declaration.\r\n\t\t/// </summary>\r\n\t\tinternal bool ReturnsPhpReference;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Number of nested exception blocks (try and catch blocks are not distinguished).\r\n\t\t/// </summary>\r\n\t\tinternal int ExceptionBlockNestingLevel;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets <see cref=\"PHP.Core.VariablesTable\"/> currently used during code emission. \r\n\t\t/// Holds variables defined in the current local scope.\r\n\t\t/// </summary>\r\n\t\tpublic VariablesTable CurrentVariablesTable { get { return currentVariablesTable; } }\r\n\t\tprivate VariablesTable currentVariablesTable;\r\n\r\n\t\tpublic Dictionary<VariableName, Statement> CurrentLabels { get { return currentLabels; } }\r\n\t\tprivate Dictionary<VariableName, Statement> currentLabels;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the type of access operation to be performed on nodes that has multiple access types.\r\n\t\t/// </summary>\r\n\t\tpublic AccessType AccessSelector { get { return accessSelector; } set { accessSelector = value; } }\r\n\t\tprivate AccessType accessSelector = AccessType.None;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Selects actual access type using the current value of <see cref=\"AccessSelector\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal AccessType SelectAccess(AccessType access)\r\n\t\t{\r\n\t\t\tswitch (access)\r\n\t\t\t{\r\n\t\t\t\tcase AccessType.ReadAndWrite:\r\n\t\t\t\t\tif (accessSelector == AccessType.Read) return AccessType.Read;\r\n\t\t\t\t\tif (accessSelector == AccessType.Write) return AccessType.Write;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.WriteAndReadRef:\r\n\t\t\t\t\tif (accessSelector == AccessType.Write) return AccessType.Write;\r\n\t\t\t\t\tif (accessSelector == AccessType.ReadRef) return AccessType.ReadRef;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.WriteAndReadUnknown:\r\n\t\t\t\t\tif (accessSelector == AccessType.Write) return AccessType.Write;\r\n\t\t\t\t\tif (accessSelector == AccessType.ReadUnknown) return AccessType.ReadUnknown;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.ReadAndWriteAndReadRef:\r\n\t\t\t\t\tif (accessSelector == AccessType.Read) return AccessType.Read;\r\n\t\t\t\t\tif (accessSelector == AccessType.Write) return AccessType.Write;\r\n\t\t\t\t\tif (accessSelector == AccessType.ReadRef) return AccessType.ReadRef;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.ReadAndWriteAndReadUnknown:\r\n\t\t\t\t\tif (accessSelector == AccessType.Read) return AccessType.Read;\r\n\t\t\t\t\tif (accessSelector == AccessType.Write) return AccessType.Write;\r\n\t\t\t\t\tif (accessSelector == AccessType.ReadUnknown) return AccessType.ReadUnknown;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn access;\r\n\t\t\t}\r\n\t\t\tDebug.Fail(\"Invalid access selector\");\r\n\t\t\treturn AccessType.None;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Places: ScriptContext, Self, ClassContext, RTVariablesTable, Result\r\n\r\n\t\t/// <summary>\r\n\t\t/// A place to load <see cref=\"PHP.Core.ScriptContext\"/> from.\r\n\t\t/// </summary>\r\n\t\tpublic IPlace/*!*/ ScriptContextPlace;\r\n\t\tpublic void EmitLoadScriptContext() { ScriptContextPlace.EmitLoad(il); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A place to load <see cref=\"DTypeDesc\"/> representing current class context from.\r\n\t\t/// </summary>\r\n\t\tpublic IPlace/*!*/ TypeContextPlace;\r\n\t\tpublic void EmitLoadClassContext() { TypeContextPlace.EmitLoad(il); }\r\n\r\n        /// <summary>\r\n        /// A place to load late static bind type from.\r\n        /// It may be a local variable with value copied from <see cref=\"PhpStack.LateStaticBindType\"/>.\r\n        /// </summary>\r\n        public IPlace LateStaticBindTypePlace;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A place to load <see cref=\"NamingContext\"/> representing current name context from.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitLoadNamingContext()\r\n\t\t{\r\n\t\t\tif (SourceUnit.NamingContextFieldBuilder != null)\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, SourceUnit.NamingContextFieldBuilder);\r\n\t\t\telse\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// A place to load local run-time variables table from.\r\n\t\t/// </summary>\r\n\t\tpublic IPlace/*!*/ RTVariablesTablePlace;\r\n\t\tpublic void EmitLoadRTVariablesTable() { RTVariablesTablePlace.EmitLoad(il); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A place to load <see cref=\"PhpObject\"/> representing current object context from.\r\n\t\t/// </summary>\r\n\t\tpublic IPlace/*!*/ SelfPlace;\r\n\t\tpublic void EmitLoadSelf() { SelfPlace.EmitLoad(il); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Place to store routine result to.\r\n\t\t/// </summary>\r\n\t\tprivate IPlace ResultPlace;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Label where return statements jumps. \r\n\t\t/// Defined lazily in the time when result place is defined.\r\n\t\t/// </summary>\r\n\t\tprivate Label ReturnLabel;\r\n\r\n\t\t#endregion\r\n\r\n        #region CallSites\r\n\r\n        /// <summary>\r\n        /// Current scope CallSites.\r\n        /// Will not be null within the GlobalCode and its sub-tree.\r\n        /// </summary>\r\n        private CallSitesBuilder callSites = null;\r\n\r\n        /// <summary>\r\n        /// Current scope CallSitesBuilder.\r\n        /// </summary>\r\n        public CallSitesBuilder CallSitesBuilder\r\n        {\r\n            get\r\n            {\r\n                Debug.Assert(callSites != null);    // only null outside of the global code\r\n                return callSites;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n\t\t/// Initializes a new instance of the <see cref=\"PHP.Core.CodeGenerator\"/> class.\r\n\t\t/// </summary>\r\n\t\tpublic CodeGenerator(CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgContext);\r\n\t\t\tTypeContextPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgIncluder);\r\n\r\n\t\t\tthis.context = context;\r\n\r\n\t\t\tthis.il = null;\r\n\t\t\tthis.currentVariablesTable = null;\r\n\t\t\tthis.currentLabels = null;\r\n\t\t\tthis.locationStack = new CompilerLocationStack();\r\n\t\t\tthis.branchingStack = new BranchingStack(this);\r\n\t\t\tthis.chainBuilder = new ChainBuilder(this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversions, Boxing, Copying (Tomas Matousek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that convert the top of evaluation stack to a specified type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Emits a call to one of <see cref=\"PHP.Core.Convert\"/> methods to do the conversion.\r\n\t\t/// The method result is left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tinternal void EmitConversion(Expression/*!*/ expression, PhpTypeCode dst)\r\n\t\t{\r\n\t\t\t// expression is evaluable:\r\n\t\t\tif (expression.HasValue())\r\n\t\t\t{\r\n\t\t\t\tswitch (dst)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldstr, PHP.Core.Convert.ObjectToString(expression.GetValue()));\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Boolean:\r\n                        il.LdcI4(PHP.Core.Convert.ObjectToBoolean(expression.GetValue()) ? 1 : 0);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Integer:\r\n                        il.LdcI4(PHP.Core.Convert.ObjectToInteger(expression.GetValue()));\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Double:\r\n                        il.Emit(OpCodes.Ldc_R8, PHP.Core.Convert.ObjectToDouble(expression.GetValue()));\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Object:\r\n                        il.LoadLiteral(expression.GetValue());\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Conversion not implemented.\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// emits the expression:\r\n\t\t\t\tPhpTypeCode src = expression.Emit(this);\r\n\r\n\t\t\t\t// emits no conversion if types are the same:\r\n\t\t\t\tif (src == dst) return;\r\n\r\n\t\t\t\t// emits boxing if needed (conversion methods takes object):\r\n\t\t\t\tEmitBoxing(src);\r\n\r\n\t\t\t\tswitch (dst)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToString);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Boolean:\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToBoolean);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToBoolean);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Double:\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToDouble);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase PhpTypeCode.Object:\r\n\t\t\t\t\t\t// nop //\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Conversion is not implemented.\");\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that box a literal value into its object representation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\"><see cref=\"PhpTypeCode\"/> of the top item placed on evaluation stack.</param>\r\n\t\t/// <returns>The type code of an item on the top of evaluatuion stack after call.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The <see cref=\"PHP.Core.AST.Literal\"/> to be boxed is expected on the evaluation stack.\r\n\t\t/// The boxed value is left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitBoxing(PhpTypeCode type)\r\n\t\t{\r\n\t\t\til.EmitBoxing(type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that makes a copy of variable placed on the top of evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"reason\">Reason of the copy.</param>\r\n\t\t/// <param name=\"expression\">The <see cref=\"PHP.Core.AST.Expression\"/> to be copied.</param>\r\n\t\t/// <remarks>\r\n\t\t/// The variable's value is expected on the top of evaluation stack.\r\n\t\t/// Calls <see cref=\"PHP.Core.PhpVariable.Copy\"/> method to process the value copying.\r\n\t\t/// The result is left on the evaluation stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitVariableCopy(CopyReason reason, Expression expression)\r\n\t\t{\r\n\t\t\t// checks whether to make a deep copy; starts with level of nesting set to 0:\r\n\t\t\tif (expression == null || expression.IsDeeplyCopied(reason, 0))\r\n\t\t\t{\r\n\t\t\t\t// First parameter should already be placed on the evaluation stack\r\n\t\t\t\til.LdcI4((int)reason);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region InstanceOf, TypeOf, New Direct Code Emission\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that check whether a value on stack is an instance of the provided\r\n\t\t/// <see cref=\"DType\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dtype\">The <see cref=\"DType\"/> to check for.</param>\r\n\t\t/// <remarks>\r\n\t\t/// A value is expected on the top of the evaluation stack. Boolean value is left on the stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitDirectInstanceOf(DType/*!*/ dtype)\r\n\t\t{\r\n\t\t\tDebug.Assert(dtype != null);\r\n\t\t\t\r\n\t\t\tbool is_wrapped;\r\n\r\n\t\t\tPhpType php_type = dtype as PhpType;\r\n\r\n\t\t\tif (php_type != null) is_wrapped = !(php_type.Root is PhpType);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// determine the root ad-hoc\r\n\t\t\t\tDType root = dtype;\r\n\t\t\t\twhile (root.Base != null) root = root.Base;\r\n\r\n\t\t\t\tis_wrapped = !(root is PhpType);\r\n\t\t\t}\r\n\r\n\t\t\tif (!is_wrapped)\r\n\t\t\t{\r\n\t\t\t\t// we can do a direct isinst here only if we know that the instance is not wrapped!\r\n\t\t\t\til.Emit(OpCodes.Isinst, dtype.RealType);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tLabel instanceof_over = il.DefineLabel();\r\n\r\n\t\t\t\til.Emit(OpCodes.Isinst, Types.DObject[0]);\r\n\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\til.Emit(OpCodes.Brfalse_S, instanceof_over);\r\n\t\t\t\til.Emit(OpCodes.Callvirt, Properties.DObject_RealObject.GetGetMethod());\r\n\t\t\t\til.Emit(OpCodes.Isinst, dtype.RealType);\r\n\t\t\t\til.MarkLabel(instanceof_over);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Cgt_Un);\r\n\t\t}\r\n\r\n\t\tpublic void EmitDirectTypeOf(DType/*!*/ dtype)\r\n\t\t{\r\n\t\t\tDebug.Assert(dtype != null);\r\n\t\t\t\r\n\t\t\til.Emit(OpCodes.Ldtoken, dtype.RealType);\r\n\t\t\til.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_WrapRealObject);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Enter/Leave Function and GlobalCode declaration (Martin Maly, Tomas Matousek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.GlobalCode\"/> AST node is entered during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void EnterGlobalCodeDeclaration(VariablesTable variablesTable,\r\n            Dictionary<VariableName, Statement> labels, CompilationSourceUnit/*!*/ sourceUnit)\r\n\t\t{\r\n\t\t\tCompilerLocationStack.GlobalCodeContext gc_context = new CompilerLocationStack.GlobalCodeContext();\r\n\r\n\t\t\t// no need to backup current source unit as it is no longer needed:\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\r\n\t\t\t// set whether access to variables should be generated via locals or table\r\n\t\t\tgc_context.OptimizedLocals = this.OptimizedLocals;\r\n\t\t\tthis.OptimizedLocals = false;\r\n\r\n\t\t\t// global code returns object\r\n\t\t\tgc_context.ReturnsPhpReference = this.ReturnsPhpReference;\r\n\t\t\tthis.ReturnsPhpReference = false;\r\n\r\n            // CallSites\r\n            Debug.Assert(this.callSites == null, \"Unclosed CallSite!\");\r\n            this.callSites = new CallSitesBuilder(\r\n                sourceUnit.CompilationUnit.Module.GlobalType.RealModuleBuilder,\r\n                sourceUnit.SourceFile.RelativePath.ToString(),\r\n                null/*Unknown at compile time*/);\r\n\r\n\t\t\t// set ILEmitter for global code\r\n\t\t\tgc_context.IL = il;\r\n\t\t\til = CompilationUnit.ModuleBuilder.CreateGlobalCodeEmitter();\r\n\r\n\t\t\t// set current variables table (at codeGenerator)\r\n\t\t\tgc_context.CurrentVariablesTable = currentVariablesTable;\r\n\t\t\tcurrentVariablesTable = variablesTable;\r\n\r\n\t\t\t// set current labels table (at codeGenerator)\r\n\t\t\tgc_context.CurrentLabels = currentLabels;\r\n\t\t\tcurrentLabels = labels;\r\n\r\n\t\t\t// set OpCode for loading hashtable with variables at runtime\r\n\t\t\tgc_context.RTVariablesTablePlace = RTVariablesTablePlace;\r\n\t\t\tRTVariablesTablePlace = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\t// set Script Context place\r\n\t\t\tgc_context.ScriptContextPlace = ScriptContextPlace;\r\n\t\t\tScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgContext);\r\n\r\n\t\t\t// set Class Context place\r\n\t\t\tgc_context.ClassContextPlace = TypeContextPlace;\r\n\t\t\tTypeContextPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgIncluder);\r\n\r\n\t\t\t// set Self place\r\n\t\t\tgc_context.SelfPlace = SelfPlace;\r\n\t\t\tSelfPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgSelf);\r\n\r\n            // set late static bind place\r\n            gc_context.LateStaticBindTypePlace = LateStaticBindTypePlace;\r\n            LateStaticBindTypePlace = null;\r\n\r\n\t\t\t// set Result place and return label\r\n\t\t\tgc_context.ResultPlace = ResultPlace;\r\n\t\t\tgc_context.ReturnLabel = ReturnLabel;\r\n\t\t\tResultPlace = null;\r\n\r\n\t\t\t// set exception block nesting:\r\n\t\t\tgc_context.ExceptionBlockNestingLevel = ExceptionBlockNestingLevel;\r\n\t\t\tExceptionBlockNestingLevel = 0;\r\n\r\n\t\t\tlocationStack.PushGlobalCode(gc_context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.GlobalCode\"/> AST node is left during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void LeaveGlobalCodeDeclaration()\r\n\t\t{\r\n\t\t\tCompilerLocationStack.GlobalCodeContext gc_context = locationStack.PeekGlobalCode();\r\n\t\t\tlocationStack.Pop();\r\n\r\n\t\t\t// clear (for convenience):\r\n\t\t\tthis.sourceUnit = null;\r\n\r\n            // close CallSites:\r\n            this.callSites.Bake();\r\n\r\n\t\t\t// restore:\r\n            this.callSites = null;\r\n\t\t\tthis.il = gc_context.IL;\r\n\t\t\tthis.ScriptContextPlace = gc_context.ScriptContextPlace;\r\n\t\t\tthis.TypeContextPlace = gc_context.ClassContextPlace;\r\n            this.LateStaticBindTypePlace = null;\r\n\t\t\tthis.SelfPlace = gc_context.SelfPlace;\r\n\t\t\tthis.ResultPlace = gc_context.ResultPlace;\r\n\t\t\tthis.ReturnLabel = gc_context.ReturnLabel;\r\n\t\t\tthis.currentVariablesTable = gc_context.CurrentVariablesTable;\r\n\t\t\tthis.currentLabels = gc_context.CurrentLabels;\r\n\t\t\tthis.RTVariablesTablePlace = gc_context.RTVariablesTablePlace;\r\n\t\t\tthis.OptimizedLocals = gc_context.OptimizedLocals;\r\n\t\t\tthis.ReturnsPhpReference = gc_context.ReturnsPhpReference;\r\n\t\t\tthis.ExceptionBlockNestingLevel = gc_context.ExceptionBlockNestingLevel;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.FunctionDecl\"/> AST node is entered during the emit phase.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"function\">The function to enter.</param>\r\n\t\t/// <returns><B>true</B> if the function should be emitted, <B>false</B> if it should not be emitted\r\n\t\t/// (an error was emitted instead due to the incorrect declaration).</returns>\r\n        public bool EnterFunctionDeclaration(PhpFunction/*!*/ function)\r\n        {\r\n            return EnterFunctionDeclarationInternal(function, function.QualifiedName);\r\n        }\r\n\r\n        public bool EnterFunctionDeclaration(PhpLambdaFunction/*!*/ function)\r\n        {\r\n            return EnterFunctionDeclarationInternal(function, new QualifiedName(function.Name));\r\n        }\r\n\r\n        private bool EnterFunctionDeclarationInternal(PhpRoutine/*!*/ function, QualifiedName qualifiedName)\r\n\t\t{\r\n            Debug.Assert(function.IsFunction);\r\n\r\n\t\t\tbool is_optimized = (function.Properties & RoutineProperties.HasUnoptimizedLocals) == 0;\r\n\t\t\tbool indirect_local_access = (function.Properties & RoutineProperties.IndirectLocalAccess) != 0;\r\n\r\n\t\t\tCompilerLocationStack.FunctionDeclContext fd_context = new CompilerLocationStack.FunctionDeclContext();\r\n            fd_context.Name = qualifiedName;\r\n\r\n\t\t\t// Set whether access to variables should be generated via locals or table\r\n\t\t\tfd_context.OptimizedLocals = this.OptimizedLocals;\r\n\t\t\tthis.OptimizedLocals = is_optimized;\r\n\r\n\t\t\t// Set the valid method to emit the \"return\" statement\r\n\t\t\tfd_context.ReturnsPhpReference = this.ReturnsPhpReference;\r\n\t\t\tthis.ReturnsPhpReference = function.Signature.AliasReturn;\r\n\r\n            // CallSites\r\n            fd_context.CallSites = null;//fd_context.CallSites = callSites;\r\n            //this.callSites = new Compiler.CodeGenerator.CallSitesBuilder(\r\n            //    sourceUnit.CompilationUnit.Module.GlobalType.RealModuleBuilder,\r\n            //    fd_context.Name.ToString(),\r\n            //    LiteralPlace.Null);\r\n            // keep current site container, just change the class context (to avoid of creating and baking so many types)\r\n            this.callSites.PushClassContext(LiteralPlace.Null, null);\r\n            \r\n            // Set ILEmitter to function's body\r\n\t\t\tfd_context.IL = this.il;\r\n\t\t\tthis.il = new ILEmitter(function.ArgFullInfo);\r\n\r\n\t\t\t// Set current variables table (at codeGenerator)\r\n\t\t\tfd_context.CurrentVariablesTable = this.currentVariablesTable;\r\n\t\t\tthis.currentVariablesTable = function.Builder.LocalVariables;\r\n\r\n\t\t\t// Set current variables table (at codeGenerator)\r\n\t\t\tfd_context.CurrentLabels = this.currentLabels;\r\n\t\t\tthis.currentLabels = function.Builder.Labels;\r\n\r\n\t\t\t// Set place for loading hashtable with variables at runtime\r\n\t\t\tfd_context.RTVariablesTablePlace = this.RTVariablesTablePlace;\r\n\r\n\t\t\tif (indirect_local_access || !is_optimized)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder var_table_local = il.DeclareLocal(PhpVariable.RTVariablesTableType);\r\n\t\t\t\tif (sourceUnit.SymbolDocumentWriter != null)\r\n\t\t\t\t\tvar_table_local.SetLocalSymInfo(\"<locals>\");\r\n\t\t\t\tthis.RTVariablesTablePlace = new Place(var_table_local);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.RTVariablesTablePlace = LiteralPlace.Null;\r\n\r\n\t\t\t// Set ScriptContext\r\n\t\t\tfd_context.ScriptContextPlace = this.ScriptContextPlace;\r\n\t\t\tthis.ScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, FunctionBuilder.ArgContext);\r\n\r\n\t\t\t// Set Class context\r\n\t\t\tfd_context.ClassContextPlace = this.TypeContextPlace;\r\n\t\t\tthis.TypeContextPlace = LiteralPlace.Null;\r\n\r\n\t\t\t// Set Self\r\n\t\t\tfd_context.SelfPlace = this.SelfPlace;\r\n\t\t\tthis.SelfPlace = LiteralPlace.Null;\r\n\r\n            // Set Static\r\n            fd_context.LateStaticBindTypePlace = this.LateStaticBindTypePlace;\r\n            this.LateStaticBindTypePlace = null;\r\n\r\n            // set Result place\r\n\t\t\tfd_context.ResultPlace = this.ResultPlace;\r\n\t\t\tfd_context.ReturnLabel = this.ReturnLabel;\r\n\t\t\tthis.ResultPlace = null;\r\n            \r\n\t\t\t// set exception block nesting:\r\n\t\t\tfd_context.ExceptionBlockNestingLevel = this.ExceptionBlockNestingLevel;\r\n\t\t\tthis.ExceptionBlockNestingLevel = 0;\r\n\r\n            // set current PhpRoutine\r\n            fd_context.PhpRoutine = function;\r\n\r\n            //\r\n\t\t\tlocationStack.PushFunctionDecl(fd_context);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.FunctionDecl\"/> AST node is left during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void LeaveFunctionDeclaration()\r\n\t\t{\r\n\t\t\tCompilerLocationStack.FunctionDeclContext fd_context = locationStack.PeekFunctionDecl();\r\n\t\t\tlocationStack.Pop();\r\n\r\n            // close CallSites:\r\n            //this.callSites.Bake();\r\n            \r\n\t\t\t// restore:\r\n            this.callSites.PopClassContext();//this.callSites = fd_context.CallSites;\r\n            this.il = fd_context.IL;\r\n\t\t\tthis.ScriptContextPlace = fd_context.ScriptContextPlace;\r\n\t\t\tthis.TypeContextPlace = fd_context.ClassContextPlace;\r\n            this.LateStaticBindTypePlace = fd_context.LateStaticBindTypePlace;\r\n\t\t\tthis.SelfPlace = fd_context.SelfPlace;\r\n\t\t\tthis.ResultPlace = fd_context.ResultPlace;\r\n\t\t\tthis.ReturnLabel = fd_context.ReturnLabel;\r\n\t\t\tthis.currentVariablesTable = fd_context.CurrentVariablesTable;\r\n\t\t\tthis.currentLabels = fd_context.CurrentLabels;\r\n\t\t\tthis.RTVariablesTablePlace = fd_context.RTVariablesTablePlace;\r\n\t\t\tthis.OptimizedLocals = fd_context.OptimizedLocals;\r\n\t\t\tthis.ReturnsPhpReference = fd_context.ReturnsPhpReference;\r\n\t\t\tthis.ExceptionBlockNestingLevel = fd_context.ExceptionBlockNestingLevel;\r\n\t\t}\r\n\r\n\t\tpublic bool EnterLambdaDeclaration(ILEmitter il, bool aliasReturn, IPlace/*!*/ rtVariablesTablePlace,\r\n\t\t\tIPlace/*!*/ scriptContextPlace, IPlace/*!*/ classContextPlace, IPlace/*!*/ selfPlace)\r\n\t\t{\r\n\t\t\tCompilerLocationStack.FunctionDeclContext fd_context = new CompilerLocationStack.FunctionDeclContext();\r\n\t\t\tfd_context.Name = QualifiedName.Lambda;\r\n\r\n\t\t\t// Set whether access to variables should be generated via locals or table\r\n\t\t\tfd_context.OptimizedLocals = this.OptimizedLocals;\r\n\t\t\tthis.OptimizedLocals = false;\r\n\r\n\t\t\t// Set the valid method to emit the \"return\" statement\r\n\t\t\tfd_context.ReturnsPhpReference = this.ReturnsPhpReference;\r\n\t\t\tthis.ReturnsPhpReference = aliasReturn;\r\n\r\n            // CallSites\r\n            fd_context.CallSites = null;\r\n            //this.callSites = new Compiler.CodeGenerator.CallSitesBuilder(\r\n            //    sourceUnit.CompilationUnit.Module.GlobalType.RealModuleBuilder,\r\n            //    fd_context.Name.ToString(),\r\n            //    null/*class_context = Unknown (at compile time)*/);\r\n            // keep current site container, to be compatible with LeaveFunctionDeclaration\r\n            this.callSites.PushClassContext(null, null);\r\n            \r\n            // Set ILEmitter to function's body\r\n\t\t\tfd_context.IL = this.il;\r\n\t\t\tthis.il = il;\r\n\r\n\t\t\t// current variables table remains unchanged:\r\n\t\t\tfd_context.CurrentVariablesTable = this.currentVariablesTable;\r\n\r\n\t\t\t// current variables table remains unchanged:\r\n\t\t\tfd_context.CurrentLabels = this.currentLabels;\r\n\r\n\t\t\t// Set place for loading hashtable with variables at runtime\r\n\t\t\tfd_context.RTVariablesTablePlace = this.RTVariablesTablePlace;\r\n\t\t\tthis.RTVariablesTablePlace = rtVariablesTablePlace;\r\n\r\n\t\t\t// Set ScriptContext\r\n\t\t\tfd_context.ScriptContextPlace = this.ScriptContextPlace;\r\n\t\t\tthis.ScriptContextPlace = scriptContextPlace;\r\n\r\n\t\t\t// Set Class context\r\n\t\t\tfd_context.ClassContextPlace = this.TypeContextPlace;\r\n\t\t\tthis.TypeContextPlace = classContextPlace;\r\n\r\n\t\t\t// Set Self\r\n\t\t\tfd_context.SelfPlace = this.SelfPlace;\r\n\t\t\tthis.SelfPlace = selfPlace;\r\n\r\n\t\t\t// set Result place\r\n\t\t\tfd_context.ResultPlace = this.ResultPlace;\r\n\t\t\tfd_context.ReturnLabel = this.ReturnLabel;\r\n            fd_context.LateStaticBindTypePlace = this.LateStaticBindTypePlace;\r\n\t\t\tthis.ResultPlace = null;\r\n            this.LateStaticBindTypePlace = null;\r\n\r\n\t\t\t// set exception block nesting:\r\n\t\t\tfd_context.ExceptionBlockNestingLevel = this.ExceptionBlockNestingLevel;\r\n\t\t\tthis.ExceptionBlockNestingLevel = 0;\r\n\r\n            // set current PhpRoutine\r\n            fd_context.PhpRoutine = null;\r\n\r\n            //\r\n\t\t\tlocationStack.PushFunctionDecl(fd_context);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Class, GetUserEntryPoint, Field and Class Constant declaration (Ladislav Prosek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.TypeDecl\"/> AST node is entered during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void EnterTypeDeclaration(PhpType/*!*/ type)\r\n\t\t{\r\n\t\t\tCompilerLocationStack.TypeDeclContext cd_context = new CompilerLocationStack.TypeDeclContext();\r\n\t\t\tcd_context.Type = type;\r\n\r\n\t\t\tcd_context.TypeContextPlace = TypeContextPlace;\r\n\t\t\tTypeContextPlace = new Place(null, type.TypeDescFieldInfo);\r\n\r\n            // CallSites\r\n            cd_context.CallSites = callSites;\r\n            this.callSites = new CallSitesBuilder(\r\n                sourceUnit.CompilationUnit.Module.GlobalType.RealModuleBuilder,\r\n                type.QualifiedName.ToString(),\r\n                TypeContextPlace, /*class_context = TypeContextPlace, can be used in .cctor of call sites container*/\r\n                type);\r\n\r\n            //\r\n            locationStack.PushTypeDecl(cd_context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.TypeDecl\"/> AST node is left during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void LeaveTypeDeclaration()\r\n\t\t{\r\n\t\t\tCompilerLocationStack.TypeDeclContext context = locationStack.PeekTypeDecl();\r\n            locationStack.Pop();\r\n\r\n            // close CallSites:\r\n            this.callSites.Bake();\r\n\r\n            // restore:\r\n            this.callSites = context.CallSites;\r\n            this.TypeContextPlace = context.TypeContextPlace;\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.MethodDecl\"/> AST node is entered during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void EnterMethodDeclaration(PhpMethod/*!*/ method)\r\n\t\t{\r\n            bool is_optimized = (method.Properties & RoutineProperties.HasUnoptimizedLocals) == 0;\r\n\t\t\tbool rt_variables_table = (method.Properties & RoutineProperties.HasRTVariablesTable) != 0;\r\n\r\n\t\t\tCompilerLocationStack.TypeDeclContext class_context = locationStack.PeekTypeDecl();\r\n\r\n\t\t\tCompilerLocationStack.MethodDeclContext md_context = new CompilerLocationStack.MethodDeclContext();\r\n\t\t\tmd_context.Type = class_context.Type;\r\n\t\t\tmd_context.Method = method;\r\n\r\n\t\t\t// Set whether access to variables should be generated via locals or table\r\n\t\t\tmd_context.OptimizedLocals = this.OptimizedLocals;\r\n\t\t\tOptimizedLocals = is_optimized;\r\n\r\n\t\t\t// set compile-time variables table:\r\n\t\t\tmd_context.CurrentVariablesTable = this.currentVariablesTable;\r\n\t\t\tcurrentVariablesTable = method.Builder.LocalVariables;\r\n\r\n\t\t\t// set compile-time variables table:\r\n\t\t\tmd_context.CurrentLabels = this.currentLabels;\r\n\t\t\tcurrentLabels = method.Builder.Labels;\r\n\r\n\t\t\t// Set the valid method to emit the \"return\" statement\r\n\t\t\tmd_context.ReturnsPhpReference = this.ReturnsPhpReference;\r\n\t\t\tthis.ReturnsPhpReference = method.Signature.AliasReturn;\r\n\r\n            // CallSites (same as in TypeDecl, not changed):\r\n            //md_context.CallSites = callSites;\r\n            //this.callSites = new Compiler.CodeGenerator.CallSites(/*class_context = TypeContextPlace*/);\r\n\r\n            // create new IL emitter for the method:\r\n            md_context.IL = il;\r\n\t\t\til = new ILEmitter(method.ArgFullInfo);\r\n\r\n\t\t\t// set RT variables table place:\r\n\t\t\tmd_context.RTVariablesTablePlace = RTVariablesTablePlace;\r\n\t\t\tif (rt_variables_table)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder var_table_local = il.DeclareLocal(PhpVariable.RTVariablesTableType);\r\n\t\t\t\tif (sourceUnit.SymbolDocumentWriter != null)\r\n\t\t\t\t\tvar_table_local.SetLocalSymInfo(\"<locals>\");\r\n\t\t\t\tRTVariablesTablePlace = new Place(var_table_local);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tRTVariablesTablePlace = LiteralPlace.Null;\r\n\r\n\t\t\t// sets ScriptContext and Self places appropriately:\r\n\t\t\tmd_context.ClassContextPlace = TypeContextPlace;\r\n\t\t\tmd_context.ScriptContextPlace = ScriptContextPlace;\r\n\t\t\tmd_context.SelfPlace = SelfPlace;\r\n            md_context.LateStaticBindTypePlace = LateStaticBindTypePlace;\r\n\r\n\t\t\tif (method.IsStatic)\r\n\t\t\t{\r\n\t\t\t\tScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, FunctionBuilder.ArgContextStatic);\r\n\t\t\t\tSelfPlace = LiteralPlace.Null;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, FunctionBuilder.ArgContextInstance);\r\n\t\t\t\tif (method.DeclaringPhpType.ProxyFieldInfo != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the real this is not a DObject\r\n\t\t\t\t\tSelfPlace = new Place(IndexedPlace.ThisArg, method.DeclaringPhpType.ProxyFieldInfo);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the real this is a DObject\r\n\t\t\t\t\tSelfPlace = IndexedPlace.ThisArg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// set Result place and return label:\r\n\t\t\tmd_context.ResultPlace = ResultPlace;\r\n\t\t\tmd_context.ReturnLabel = ReturnLabel;\r\n\t\t\tResultPlace = null;\r\n            LateStaticBindTypePlace = null;\r\n\r\n\t\t\t// set exception block nesting:\r\n\t\t\tmd_context.ExceptionBlockNestingLevel = ExceptionBlockNestingLevel;\r\n\t\t\tExceptionBlockNestingLevel = 0;\r\n\r\n            // set current PhpRoutine\r\n            md_context.PhpRoutine = method;\r\n\r\n            //\r\n\t\t\tlocationStack.PushMethodDecl(md_context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.MethodDecl\"/> AST node is left during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void LeaveMethodDeclaration()\r\n\t\t{\r\n\t\t\tCompilerLocationStack.MethodDeclContext md_context = locationStack.PeekMethodDecl();\r\n\t\t\tlocationStack.Pop();\r\n\r\n\t\t\t// restore:\r\n            //this.callSites = md_context.CallSite; // the same\r\n\t\t\tthis.il = md_context.IL;\r\n\t\t\tthis.ScriptContextPlace = md_context.ScriptContextPlace;\r\n\t\t\tthis.TypeContextPlace = md_context.ClassContextPlace;\r\n            this.LateStaticBindTypePlace = md_context.LateStaticBindTypePlace;\r\n\t\t\tthis.SelfPlace = md_context.SelfPlace;\r\n\t\t\tthis.ResultPlace = md_context.ResultPlace;\r\n\t\t\tthis.ReturnLabel = md_context.ReturnLabel;\r\n\t\t\tthis.currentVariablesTable = md_context.CurrentVariablesTable;\r\n\t\t\tthis.currentLabels = md_context.CurrentLabels;\r\n\t\t\tthis.RTVariablesTablePlace = md_context.RTVariablesTablePlace;\r\n\t\t\tthis.OptimizedLocals = md_context.OptimizedLocals;\r\n\t\t\tthis.ReturnsPhpReference = md_context.ReturnsPhpReference;\r\n\t\t\tthis.ExceptionBlockNestingLevel = md_context.ExceptionBlockNestingLevel;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.ConstantDecl\"/> AST node is visited during the emit phase.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"constant\">The constant.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Even interface constants are permitted in PHP. These are implemented by <B>static</B> <B>initonly</B>\r\n\t\t/// fields in the interface, which causes some complaints in the .NET Framework 1.1 verifier.\r\n\t\t/// However it is rather a verifier bug - .NET Framework 2.0 verifier is fixed and verifies it OK.\r\n\t\t/// </remarks>\r\n\t\tpublic void InitializeClassConstant(ClassConstant/*!*/ constant)\r\n\t\t{\r\n\t\t\tDebug.Assert(constant != null);\r\n\r\n            // real constant definition\r\n            if (constant.RealField.IsLiteral)\r\n            {\r\n                Debug.Assert(constant.RealFieldBuilder != null);\r\n                constant.RealFieldBuilder.SetConstant(constant.Value);\r\n                return;\r\n            }\r\n\r\n\t\t\t// class constant initialization is emitted into the static constructor\r\n\t\t\tILEmitter old_il = il;\r\n\t\t\tIPlace old_sc_emitter = ScriptContextPlace;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// set il and SC-emitter appropriately\r\n\t\t\t\t\r\n\t\t\t\tif (constant.HasValue)\r\n\t\t\t\t{\r\n\t\t\t\t\til = constant.DeclaringPhpType.Builder.StaticCtorEmitter;\r\n                    il.LoadLiteralBox(constant.Value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    il = new ILEmitter(constant.DeclaringPhpType.StaticFieldInitMethodBuilder);\r\n                    ScriptContextPlace = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgContext);\r\n\r\n\t\t\t\t\t// emit the expression evaluating code\r\n\t\t\t\t\tEmitBoxing(constant.Node.Initializer.Emit(this));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// store it in the field\r\n\t\t\t\til.Emit(OpCodes.Stsfld, constant.RealField);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\t// restore the saved il and SC-emitter\r\n\t\t\t\til = old_il;\r\n\t\t\t\tScriptContextPlace = old_sc_emitter;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when a <see cref=\"PHP.Core.AST.FieldDecl\"/> AST node is visited during the emit phase.\r\n\t\t/// </summary>\r\n\t\tpublic void InitializeField(PhpField/*!*/ field, AST.Expression initVal)\r\n\t\t{\r\n\t\t\tILEmitter cil;\r\n\t\t\tIPlace sc_place;\r\n            \r\n\t\t\tif (field.IsStatic)\r\n\t\t\t{\r\n                // (J) even overiding static field is created again in derivating type\r\n\t\t\t\t// there is no initialization taking place if the implementing CLI field does not live in current class\r\n\t\t\t\t//if (field.Overrides != null) return;\r\n\r\n\t\t\t\tif (field.IsAppStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\t// app-static field initialization is emitted into the static ctor\r\n\t\t\t\t\tcil = field.DeclaringPhpType.Builder.StaticCtorEmitter;\r\n\r\n\t\t\t\t\tsc_place = new LazyLoadSCPlace();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// thread-static field initialization is emitted into the __InitializeStaticFields method\r\n\t\t\t\t\tcil = new ILEmitter(field.DeclaringPhpType.StaticFieldInitMethodBuilder);\r\n\r\n\t\t\t\t\tsc_place = new IndexedPlace(PlaceHolder.Argument, ScriptBuilder.ArgContext);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                if (initVal == null && field.Implementor != field.DeclaringType)\r\n                    return;\r\n\r\n\t\t\t\t// instance field initialization is emitted into the <InitializeInstanceFields> method\r\n\t\t\t\tcil = field.DeclaringPhpType.Builder.InstanceFieldInitEmitter;\r\n\r\n\t\t\t\tsc_place = new IndexedPlace(PlaceHolder.Argument, FunctionBuilder.ArgContextInstance);\r\n\r\n\t\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\t}\r\n\r\n\t\t\tif (initVal != null)\r\n\t\t\t{\r\n\t\t\t\t// emit the expression evaluating code\r\n\t\t\t\tILEmitter old_il = il;\r\n\t\t\t\tIPlace old_sc_place = ScriptContextPlace;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// set il and SC-emitter appropriately\r\n\t\t\t\t\til = cil;\r\n\t\t\t\t\tScriptContextPlace = sc_place;\r\n\r\n\t\t\t\t\tEmitBoxing(initVal.Emit(this));\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\t// restore the saved il and SC-emitter\r\n\t\t\t\t\til = old_il;\r\n\t\t\t\t\tScriptContextPlace = old_sc_place;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcil.Emit(OpCodes.Newobj, Constructors.PhpSmartReference.Object);\r\n\t\t\t}\r\n\t\t\telse cil.Emit(OpCodes.Newobj, Constructors.PhpSmartReference.Void);\r\n\r\n\t\t\t// store it in the field\r\n            Debug.Assert(field.IsStatic == field.RealField.IsStatic);\r\n\t\t\tcil.Emit(field.IsStatic ? OpCodes.Stsfld : OpCodes.Stfld, field.RealField);\r\n\t\t}\r\n\r\n\t\tpublic void EmitConstantExportStub(ClassConstant/*!*/ constant, PropertyBuilder/*!*/ property)\r\n\t\t{\r\n\t\t\tDebug.Assert(constant != null && constant.IsExported && property != null);\r\n\r\n\t\t\tMethodBuilder getter = (MethodBuilder)property.GetGetMethod(true);\r\n\r\n\t\t\t// emit getter:\r\n\t\t\tif (getter != null)\r\n\t\t\t{\r\n\t\t\t\tEmissionContext emission_context = SetupStubPlaces(constant.DeclaringPhpType, getter.IsStatic);\r\n\t\t\t\til = new ILEmitter(getter);\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// read the field\r\n\t\t\t\t\tPhpTypeCode type_code = constant.EmitGet(this, null, false, null);\r\n\r\n\t\t\t\t\t// convert it to the return type\r\n\t\t\t\t\t//ClrOverloadBuilder.EmitConvertToClr(\r\n\t\t\t\t\t//    il,\r\n\t\t\t\t\t//    type_code,\r\n\t\t\t\t\t//    getter.ReturnType);\r\n\r\n\t\t\t\t\til.EmitBoxing(type_code);\r\n\r\n\t\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tRestorePlaces(emission_context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void EmitFieldExportGetter(PhpField/*!*/ field, PropertyBuilder/*!*/ property, MethodBuilder/*!*/ getter)\r\n\t\t{\r\n\t\t\tIPlace instance_place = (field.IsStatic ? null : IndexedPlace.ThisArg);\r\n\r\n\t\t\tEmissionContext emission_context = SetupStubPlaces(field.DeclaringPhpType, getter.IsStatic);\r\n\r\n\t\t\til = new ILEmitter(getter);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// read the field\r\n\t\t\t\tPhpTypeCode type_code = field.EmitGet(this, instance_place, false, null, false);\r\n\r\n\t\t\t\t// convert it to the return type\r\n\t\t\t\tClrOverloadBuilder.EmitConvertToClr(\r\n\t\t\t\t\til,\r\n\t\t\t\t\ttype_code,\r\n\t\t\t\t\tproperty.PropertyType);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tRestorePlaces(emission_context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void EmitFieldExportSetter(PhpField/*!*/ field, PropertyBuilder/*!*/ property, MethodBuilder/*!*/ setter)\r\n\t\t{\r\n\t\t\tIPlace instance_place = (field.IsStatic ? null : IndexedPlace.ThisArg);\r\n\r\n\t\t\tEmissionContext emission_context = SetupStubPlaces(field.DeclaringPhpType, setter.IsStatic);\r\n\r\n\t\t\til = new ILEmitter(setter);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// prepare the field for writing\r\n\t\t\t\tAssignmentCallback callback = field.EmitSet(this, instance_place, false, null, false);\r\n\r\n\t\t\t\t// load and convert the argument\r\n\t\t\t\til.Ldarg(setter.IsStatic ? 0 : 1);\r\n\t\t\t\tPhpTypeCode type_code = ClrOverloadBuilder.EmitConvertToPhp(\r\n\t\t\t\t\til,\r\n\t\t\t\t\tproperty.PropertyType/*,\r\n\t\t\t\t\tScriptContextPlace*/);\r\n\r\n\t\t\t\tEmitBoxing(type_code);\r\n\r\n\t\t\t\t// write the field\r\n\t\t\t\tcallback(this, PhpTypeCode.Object);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tRestorePlaces(emission_context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void EmitFieldExportStubs(PhpField/*!*/ field, PropertyBuilder/*!*/ property)\r\n\t\t{\r\n\t\t\tDebug.Assert(field != null && property != null);\r\n\r\n\t\t\tMethodBuilder getter = (MethodBuilder)property.GetGetMethod(true);\r\n\t\t\tMethodBuilder setter = (MethodBuilder)property.GetSetMethod(true);\r\n\r\n\t\t\t// emit getter:\r\n\t\t\tif (getter != null) EmitFieldExportGetter(field, property, getter);\r\n\r\n\t\t\t// emit setter:\r\n\t\t\tif (setter != null) EmitFieldExportSetter(field, property, setter);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprivate struct EmissionContext\r\n\t\t{\r\n\t\t\tpublic EmissionContext(IPlace scriptContextPlace, IPlace selfPlace, ILEmitter il)\r\n\t\t\t{\r\n\t\t\t\tthis.ScriptContextPlace = scriptContextPlace;\r\n\t\t\t\tthis.SelfPlace = selfPlace;\r\n\t\t\t\tthis.IL = il;\r\n\t\t\t}\r\n\r\n\t\t\tpublic IPlace ScriptContextPlace;\r\n\t\t\tpublic IPlace SelfPlace;\r\n\t\t\tpublic ILEmitter IL;\r\n\t\t}\r\n\r\n\t\tprivate EmissionContext SetupStubPlaces(PhpType/*!*/ type, bool stubIsStatic)\r\n\t\t{\r\n\t\t\tEmissionContext context = new EmissionContext(ScriptContextPlace, SelfPlace, il);\r\n\r\n\t\t\tScriptContextPlace = new LazyLoadSCPlace();\r\n\t\t\tif (stubIsStatic)\r\n\t\t\t{\r\n\t\t\t\tSelfPlace = LiteralPlace.Null;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (type.ProxyFieldInfo != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the real this is not a DObject\r\n\t\t\t\t\tSelfPlace = new Place(IndexedPlace.ThisArg, type.ProxyFieldInfo);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the real this is a DObject\r\n\t\t\t\t\tSelfPlace = IndexedPlace.ThisArg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\tprivate void RestorePlaces(EmissionContext emissionContext)\r\n\t\t{\r\n\t\t\tScriptContextPlace = emissionContext.ScriptContextPlace;\r\n\t\t\tSelfPlace = emissionContext.SelfPlace;\r\n\t\t\til = emissionContext.IL;\r\n\t\t}\r\n\r\n\t\t#region Echo and Print\r\n\r\n        ///// <summary>\r\n        ///// Emits IL instructions for calling the best overload of <see cref=\"PHP.Core.ScriptContext.Echo\"/> method.\r\n        ///// </summary>\r\n        ///// <param name=\"typecode\"><see cref=\"PHP.Core.PhpTypeCode\"/> of the parameter.</param>\r\n        ///// <remarks>GetUserEntryPoint parameters are expected on the evaluation stack. Nothing is left on the evaluation stack.</remarks>\r\n        //private void EmitEchoCall(PhpTypeCode typecode)\r\n        //{\r\n        //    switch (typecode)\r\n        //    {\r\n        //        case PhpTypeCode.Object:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.Object);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.String:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.String);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.PhpBytes:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.PhpBytes);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.Integer:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.Int);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.LongInteger:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.LongInt);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.Double:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.Double);\r\n        //            break;\r\n\r\n        //        case PhpTypeCode.Boolean:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.Bool);\r\n        //            break;\r\n\r\n        //        default:\r\n        //            il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.Object);\r\n        //            break;\r\n        //    }\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Emits IL instructions for calling the best overload of <see cref=\"PHP.Core.ScriptContext.Echo\"/> static method.\r\n        /// </summary>\r\n        /// <param name=\"typecode\"><see cref=\"PHP.Core.PhpTypeCode\"/> of the parameter.</param>\r\n        /// <remarks>Nothing is left on the evaluation stack. Emitted method call expects two parameters on the evaluation stack: (value, ScriptContext).</remarks>\r\n        private void EmitEchoStaticCall(PhpTypeCode typecode)\r\n        {\r\n            switch (typecode)\r\n            {\r\n                case PhpTypeCode.Object:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.Object);\r\n                    break;\r\n\r\n                case PhpTypeCode.String:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.String);\r\n                    break;\r\n\r\n                case PhpTypeCode.PhpBytes:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.PhpBytes);\r\n                    break;\r\n\r\n                case PhpTypeCode.Integer:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.Int);\r\n                    break;\r\n\r\n                case PhpTypeCode.LongInteger:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.LongInt);\r\n                    break;\r\n\r\n                case PhpTypeCode.Double:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.Double);\r\n                    break;\r\n\r\n                case PhpTypeCode.Boolean:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.Bool);\r\n                    break;\r\n\r\n                default:\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.EchoStatic.Object);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emits IL instructions to process the <B>echo</B> and <B>print</B> commands.\r\n        /// </summary>\r\n        /// <param name=\"expressions\">List of expressions to be echoed. They will be evaluated first. The list cannot be null and it must contain at least one element.</param>\r\n        public void EmitEcho(Expression[]/*!*/expressions)\r\n        {\r\n            Debug.Assert(expressions != null);\r\n            Debug.Assert(expressions.Length > 0);\r\n\r\n            // known types of resulting values\r\n            PhpTypeCode[] types = new PhpTypeCode[expressions.Length];\r\n\r\n            // construct the array with values\r\n            // to preserve the proper order of evaluation and output\r\n            il.LdcI4(expressions.Length);\r\n            il.Emit(OpCodes.Newarr, typeof(object));\r\n\r\n            for (int i = 0; i < expressions.Length; ++i)\r\n            {\r\n                // array[<i>] = <expressions[i]>;\r\n                il.Emit(OpCodes.Dup);\r\n                il.LdcI4(i);\r\n                EmitBoxing(types[i] = expressions[i].Emit(this));\r\n                il.Emit(OpCodes.Stelem_Ref);\r\n            }\r\n\r\n            // echo the values\r\n            for (int i = 0; i < expressions.Length; ++i)\r\n            {\r\n                il.Emit(OpCodes.Dup);   // array\r\n                il.LdcI4(i);            // <i>\r\n                il.Emit(OpCodes.Ldelem_Ref);    // object array[<i>]\r\n                il.EmitUnboxingForArg(types[i]);  // UnBox value type, if value-type was boxed here, prepared for method call argument\r\n                // convert object to string or PhpBytes to hold the right type on the stack (valid IL)\r\n                if (types[i] == PhpTypeCode.PhpBytes)   il.Emit(OpCodes.Castclass, Types.PhpBytes[0]);\r\n                else if (types[i] == PhpTypeCode.String) il.Emit(OpCodes.Castclass, Types.String[0]);\r\n                EmitLoadScriptContext();\r\n                // CALL ScriptContext.Echo(<obj>, <ScriptContext>)\r\n                EmitEchoStaticCall(types[i]);\r\n            }\r\n\r\n            il.Emit(OpCodes.Pop);// remove the array from the stack\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions to process the <B>echo</B> and <B>print</B> commands.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameter\">Expression to be sent to output.</param>\r\n\t\tpublic void EmitEcho(Expression parameter)\r\n\t\t{\r\n\t\t\t// Template:\r\n\t\t\t//\tcontext.Echo(value);\r\n\r\n\t\t\tConcatEx concat;\r\n\t\t\t//BinaryEx binary_expr;\r\n\r\n\t\t\tif ((concat = parameter as ConcatEx) != null && concat.Expressions.Length > 1)\r\n\t\t\t{\r\n                //foreach (Expression expr in concat.Expressions)\r\n                //{\r\n                //    EmitLoadScriptContext();\r\n                //    EmitEchoCall(expr.Emit(this));\r\n                //}\r\n\r\n\t\t\t\t// obsolete: (but expressions must be first emitted and processed, then echoed)\r\n                // array = new object[] { expr1, expr2, ..., exprn };\r\n                //LocalBuilder array = EmitObjectArrayPopulation(concat.Expressions, null);\r\n\r\n                //// context.Echo(array);\r\n                //EmitLoadScriptContext();\r\n                //il.Ldloc(array);\r\n                //il.Emit(OpCodes.Call, Methods.ScriptContext.Echo.ObjectArray);\r\n\r\n                EmitEcho(concat.Expressions);\r\n\t\t\t}\r\n            //// obsolete: wrong order of expressions execution (evaluate first, then echo!)\r\n            //else if ((binary_expr = parameter as BinaryEx) != null && binary_expr.Operation == Operations.Concat)\r\n            //{\r\n            //    // context.Echo(<left>)\r\n            //    EmitLoadScriptContext();\r\n            //    EmitEchoCall(binary_expr.LeftExpr.Emit(this));\r\n\r\n            //    // context.Echo(<right>)\r\n            //    EmitLoadScriptContext();\r\n            //    EmitEchoCall(binary_expr.RightExpr.Emit(this));\r\n            //}\r\n\t\t\telse\r\n\t\t\t{\r\n                var typecode = parameter.Emit(this);\r\n\t\t\t\tEmitLoadScriptContext();\r\n                // CALL ScriptContext.Echo(<parameter>, <context>)\r\n                EmitEchoStaticCall(typecode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Load(Ref)/Store(Ref)/Variable support\r\n\r\n\t\t/// <summary>\r\n\t\t/// If set to <B>true</B> the optimized access to locals is emitted. If set to <B>false</B>\r\n\t\t/// the access via variables table is emitted. This flag is controled by in \r\n\t\t/// <see cref=\"EnterGlobalCodeDeclaration\"/> and <see cref=\"EnterFunctionDeclaration\"/> methods.\r\n\t\t/// </summary>\r\n\t\tpublic bool OptimizedLocals;\r\n\r\n\t\t#region Auto-global variables\r\n\r\n\t\tprivate readonly OpCode AutoGlobalLoadOpCode = OpCodes.Ldfld;\r\n\t\tprivate readonly OpCode AutoGlobalStoreOpCode = OpCodes.Stfld;\r\n\r\n\t\tinternal bool VariableIsAutoGlobal(VariableName name)\r\n\t\t{\r\n\t\t\tif (!currentVariablesTable.Contains(name))\r\n\t\t\t{\r\n\t\t\t\tif (name.IsAutoGlobal)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tDebug.Fail(\"DirectVarUse not in table and not auto-global!\");\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits an operation on auto-global variable with a specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the auto-global variable.</param>\r\n\t\t/// <param name=\"opCode\">The operation.</param>\r\n\t\tprivate void EmitAutoGlobalOperation(VariableName name, OpCode opCode)\r\n\t\t{\r\n\t\t\tFieldInfo fld = AutoGlobals.GetFieldForVariable(name);\r\n\t\t\tif (fld != null)\r\n\t\t\t\til.Emit(opCode, fld);\r\n\t\t\telse\r\n\t\t\t\tDebug.Fail(\"Unsupported auto-global variable.\");\r\n\t\t}\r\n\r\n\t\tprivate void EmitLoadAutoGlobals()\r\n\t\t{\r\n\t\t\tEmitLoadScriptContext();\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_AutoGlobals);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalLoad(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitLoadAutoGlobals();\r\n\t\t\tEmitAutoGlobalOperation(variableName, AutoGlobalLoadOpCode);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalLoadAddress(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitLoadAutoGlobals();\r\n\t\t\tEmitAutoGlobalOperation(variableName, AutoGlobalLoadOpCode);\r\n\t\t\til.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalLoadRef(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitLoadAutoGlobals();\r\n\t\t\tEmitAutoGlobalOperation(variableName, AutoGlobalLoadOpCode);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalStorePrepare(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitLoadAutoGlobals();\r\n\t\t\tEmitAutoGlobalOperation(variableName, AutoGlobalLoadOpCode);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalStoreAssign()\r\n\t\t{\r\n\t\t\til.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalStoreRefPrepare(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitLoadAutoGlobals();\r\n\t\t}\r\n\r\n\t\tinternal void EmitAutoGlobalStoreRefAssign(VariableName variableName)\r\n\t\t{\r\n\t\t\tEmitAutoGlobalOperation(variableName, AutoGlobalStoreOpCode);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Support for optimized functions\r\n\r\n\t\tprivate void EmitVariableIssetOptimized(SimpleVarUse variable)\r\n\t\t{\r\n\t\t\t// Template: for DirectVarUse\r\n\r\n\t\t\t//\tISSET($x)\r\n\t\t\t//\t ldloc local\r\n\t\t\t// *** if local is of type PhpReference\r\n\t\t\t// \t ldfld PhpReference.Value\r\n\t\t\t// ***\r\n\t\t\t//\t ldnull\r\n\t\t\t//\t ceq\r\n\t\t\t//\t ldc.i4.0\r\n\t\t\t//\t ceq           \r\n\t\t\tDirectVarUse direct = variable as DirectVarUse;\r\n\t\t\tif (direct != null)\r\n\t\t\t{\r\n\t\t\t\tVariablesTable.Entry entry = currentVariablesTable[direct.VarName];\r\n\r\n\t\t\t\tentry.Variable.EmitLoad(il);\r\n\t\t\t\tif (entry.IsPhpReference)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\t}\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tIndirectVarUse indirect_var = (IndirectVarUse)variable;\r\n\t\t\tindirect_var.EmitSwitch_LoadLocal(this);\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Call, New, InstanceOf, Static Property, Constant Operators Emission\r\n\r\n\t\t// warning: this EmitName does not emit conversion to string\r\n\t\tinternal void EmitName(string fullName, Expression nameExpr, bool createChain)\r\n\t\t{\r\n\t\t\tEmitName(fullName, nameExpr, createChain, PhpTypeCode.Object);\r\n\t\t}\r\n\r\n        internal void EmitName(string fullName, Expression nameExpr, bool createChain, PhpTypeCode dstType)\r\n        {\r\n            Debug.Assert(fullName != null ^ nameExpr != null);\r\n\r\n            if (fullName != null)\r\n            {\r\n                il.Emit(OpCodes.Ldstr, fullName);\r\n            }\r\n            else\r\n            {\r\n                if (createChain) ChainBuilder.Create();\r\n                EmitConversion(nameExpr, dstType);\r\n                if (createChain) ChainBuilder.End();\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a call to a routine with specified name using an operator.\r\n\t\t/// </summary>\r\n        internal PhpTypeCode EmitRoutineOperatorCall(DType type, Expression targetExpr,\r\n            string routineFullName, string fallbackRoutineFullname, Expression routineNameExpr, CallSignature callSignature, AccessType access)\r\n        {\r\n            Debug.Assert(routineFullName != null ^ routineNameExpr != null);\r\n\r\n            MethodInfo operator_method;\r\n            PhpTypeCode return_type_code;\r\n\r\n            // (J) use call sites to call the method:\r\n            if (targetExpr != null /*|| type != null*/)\r\n            {\r\n                Debug.Assert(fallbackRoutineFullname == null);\r\n\r\n                return this.CallSitesBuilder.EmitMethodCall(this, CallSitesBuilder.AccessToReturnType(access), targetExpr, type, routineFullName, routineNameExpr, callSignature);\r\n            }\r\n            else if (targetExpr != null)\r\n            {\r\n                Debug.Assert(fallbackRoutineFullname == null);\r\n\r\n                // LOAD Operators.InvokeMethod(<target>, <method name>, <type desc>, <context>);\r\n\r\n                // start a new operators chain (as the rest of chain is read)\r\n                this.ChainBuilder.Create();\r\n                this.ChainBuilder.Begin();\r\n                this.ChainBuilder.Lengthen(); // for hop over ->\r\n\r\n                // prepare for operator invocation\r\n                this.EmitBoxing(targetExpr.Emit(this));\r\n                this.ChainBuilder.End();\r\n\r\n                this.EmitName(routineFullName, routineNameExpr, true);\r\n                this.EmitLoadClassContext();\r\n                this.EmitLoadScriptContext();\r\n\r\n                if (routineFullName != null)\r\n                    operator_method = Methods.Operators.InvokeMethodStr;\r\n                else\r\n                    operator_method = Methods.Operators.InvokeMethodObj;\r\n\r\n                return_type_code = PhpTypeCode.PhpReference;\r\n            }\r\n            else if (type != null)\r\n            {\r\n                Debug.Assert(fallbackRoutineFullname == null);\r\n\r\n                // LOAD Operators.InvokeStaticMethod(<type desc>, <method name>, <self>, <type desc>, context);\r\n                type.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\r\n                this.EmitName(routineFullName, routineNameExpr, true);\r\n\r\n                this.EmitLoadSelf();\r\n                this.EmitLoadClassContext();\r\n                this.EmitLoadScriptContext();\r\n\r\n                operator_method = Methods.Operators.InvokeStaticMethod;\r\n                return_type_code = PhpTypeCode.PhpReference;\r\n            }\r\n            else\r\n            {\r\n                Debug.Assert(routineNameExpr == null || fallbackRoutineFullname == null);   // (routineNameExpr != null) => (fallbackRoutineFullName == null)\r\n\r\n                // DRoutineDesc <callHint>;\r\n                FieldInfo hintField = this.CallSitesBuilder.DefineField(\r\n                    \"<callHint>'\" + (routineFullName ?? \"indirect\"),\r\n                    typeof(PHP.Core.Reflection.DRoutineDesc),\r\n                    FieldAttributes.Static | FieldAttributes.Assembly);\r\n\r\n                // LOAD ScriptContext.Call{|Void|Value}(<local variables>, <naming context>, <function name>, ref <hint>, context);\r\n                this.EmitLoadRTVariablesTable();\r\n                this.EmitLoadNamingContext();\r\n                this.EmitName(routineFullName, routineNameExpr, true);\r\n                if (fallbackRoutineFullname != null) il.Emit(OpCodes.Ldstr, fallbackRoutineFullname); else il.Emit(OpCodes.Ldnull); // fallback fcn name\r\n                il.Emit(OpCodes.Ldsflda, hintField);\r\n                this.EmitLoadScriptContext();\r\n\r\n                // (J) only necessary copying, dereferencing or reference making:\r\n                if (access == AccessType.None)\r\n                {\r\n                    operator_method = Methods.ScriptContext.CallVoid;\r\n                    return_type_code = PhpTypeCode.Void;\r\n                }\r\n                else if (access == AccessType.Read)\r\n                {\r\n                    operator_method = Methods.ScriptContext.CallValue;\r\n                    return_type_code = PhpTypeCode.Object;\r\n                }\r\n                else\r\n                {\r\n                    operator_method = Methods.ScriptContext.Call;\r\n                    return_type_code = PhpTypeCode.PhpReference;\r\n                }\r\n            }\r\n\r\n            // emits load of parameters to the PHP stack:\r\n            callSignature.EmitLoadOnPhpStack(this);\r\n\r\n            // marks transient sequence point just before the call:\r\n            this.MarkTransientSequencePoint();\r\n\r\n            il.Emit(OpCodes.Call, operator_method);\r\n\r\n            // marks transient sequence point just after the call:\r\n            this.MarkTransientSequencePoint();\r\n\r\n            return return_type_code;\r\n        }\r\n\r\n\t\tprivate void EmitLoadTypeDesc(string typeFullName, TypeRef typeNameRef, DType type, ResolveTypeFlags flags)\r\n\t\t{\r\n            DebugHelper.AssertNonNull(1, typeFullName, typeNameRef, type);\r\n\r\n\t\t\tif (typeFullName != null)\r\n\t\t\t\tEmitLoadTypeDescOperator(typeFullName, null, flags);\r\n\t\t\telse if (typeNameRef != null)\r\n\t\t\t\ttypeNameRef.EmitLoadTypeDesc(this, flags);\r\n\t\t\telse\r\n\t\t\t\ttype.EmitLoadTypeDesc(this, flags);\r\n\t\t}\r\n\r\n\t\tinternal void EmitLoadTypeDesc(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\tDebug.Assert(realType != null);\r\n\r\n\t\t\t// TODO: keep in an internal field? cache the result in a local?\r\n\t\t\t// fields for all types whose type-descs are needed in a method\r\n\t\t\t// initialize at the entry to the method (or lazily...)\r\n\t\t\til.Emit(OpCodes.Ldtoken, realType);\r\n\t\t\til.Emit(OpCodes.Call, Methods.DTypeDesc_Create);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Pushes an array of genericArgs (object[]genericArgs) onto the evaluation stack. Can pushes null only.\r\n        /// The array contains generic arguments of current PhpRoutine.\r\n        /// </summary>\r\n        private void EmitLoadGenericArgsArray()\r\n        {\r\n            var procedure = locationStack.Peek() as CompilerLocationStack.ProcedureDeclContext;\r\n            if (procedure == null || procedure.PhpRoutine == null || procedure.PhpRoutine.Signature.GenericParamCount == 0)\r\n            {\r\n                il.Emit(OpCodes.Ldnull);\r\n            }\r\n            else\r\n            {\r\n                PhpRoutineSignature signature = procedure.PhpRoutine.Signature;\r\n                il.EmitLoadInitializedArray(typeof(object), procedure.PhpRoutine.Signature.GenericParamCount * 2, delegate(ILEmitter _il, int _i)\r\n                {\r\n                    int genericParamIndex = _i / 2;\r\n                    if ((_i&1) == 0)\r\n                    {   // arg name\r\n                        il.Emit(OpCodes.Ldstr, signature.GenericParams[genericParamIndex].Name.Value.ToLowerInvariant());\r\n                    }\r\n                    else\r\n                    {   // DTypeDesc\r\n                        signature.GenericParams[genericParamIndex].EmitLoadTypeDesc(this, ResolveTypeFlags.None/*not used*/ );\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n\t\tinternal void EmitLoadTypeDescOperator(string typeFullName, Expression typeNameExpr, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeFullName != null ^ typeNameExpr != null);\r\n\r\n\t\t\t// LOAD Convert.ObjectToTypeDesc(<name>, <use autoload>, <context type desc>, <script context>, <naming context>/*, <locals>*/);\r\n\t\t\tEmitName(typeFullName, typeNameExpr, false);\r\n\t\t\til.LdcI4((int)flags);\r\n\t\t\tEmitLoadClassContext();\r\n\t\t\tEmitLoadScriptContext();\r\n\t\t\tEmitLoadNamingContext();\r\n            EmitLoadGenericArgsArray();\r\n            il.Emit(OpCodes.Call, (typeFullName != null) ? Methods.Convert.StringToTypeDesc : Methods.Convert.ObjectToTypeDesc);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Loads <see cref=\"DTypeDesc\"/> of runtime type of current method.\r\n        /// </summary>\r\n        /// <param name=\"flags\">Ignored.</param>\r\n        internal void EmitLoadStaticTypeDesc(ResolveTypeFlags flags)\r\n        {\r\n            // if we have a type place, use it:\r\n            if (this.LateStaticBindTypePlace != null)\r\n            {\r\n                this.LateStaticBindTypePlace.EmitLoad(this.il);\r\n            }\r\n            else\r\n            {\r\n                // not handled yet\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n\t\tinternal void EmitNewOperator(string typeFullName, TypeRef typeNameRef, DType type, CallSignature callSignature)\r\n\t\t{\r\n            DebugHelper.AssertNonNull(1, typeFullName, typeNameRef, type);\r\n\r\n\t\t\t// prepare stack frame for the constructor:\r\n\t\t\tcallSignature.EmitLoadOnPhpStack(this);\r\n\r\n\t\t\t// CALL Operators.New(<type desc>, <context type desc>, <context>);\r\n\t\t\tEmitLoadTypeDesc(typeFullName, typeNameRef, type, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\t\t\tthis.EmitLoadClassContext();\r\n\t\t\tthis.EmitLoadScriptContext();\r\n\t\t\tthis.EmitLoadNamingContext();\r\n\t\t\til.Emit(OpCodes.Call, Methods.Operators.New);\r\n\t\t}\r\n\r\n\t\tinternal void EmitInstanceOfOperator(string typeFullName, TypeRef typeNameRef, DType type)\r\n\t\t{\r\n            DebugHelper.AssertNonNull(1, typeFullName, typeNameRef, type);\r\n\r\n\t\t\t// LOAD Operators.InstanceOf(STACK, <type desc>);\r\n\t\t\tEmitLoadTypeDesc(typeFullName, typeNameRef, type, ResolveTypeFlags.None);\r\n\t\t\til.Emit(OpCodes.Call, Methods.Operators.InstanceOf);\r\n\t\t}\r\n\r\n\t\tinternal void EmitTypeOfOperator(string typeFullName, TypeRef typeNameRef, DType type)\r\n\t\t{\r\n            DebugHelper.AssertNonNull(1, typeFullName, typeNameRef, type);\r\n\r\n\t\t\t// LOAD Operators.InstanceOf(STACK, <type desc>, <context type desc>, <script context>);\r\n\t\t\tEmitLoadTypeDesc(typeFullName, typeNameRef, type, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\t\t\til.Emit(OpCodes.Call, Methods.Operators.TypeOf);\r\n\t\t}\r\n\r\n\t\tinternal PhpTypeCode EmitGetStaticPropertyOperator(DType/*!*/ type,\r\n\t\t\tstring propertyFullName, Expression propertyNameExpr, bool getReference)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null && (propertyFullName != null ^ propertyNameExpr != null));\r\n\r\n\t\t\t// LOAD GetStaticProperty[Ref](<type name>, <field name>, <type desc>, <context>, [quiet]);\r\n\t\t\ttype.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\t\t\tEmitName(propertyFullName, propertyNameExpr, false);\r\n\t\t\tEmitLoadClassContext();\r\n\t\t\tEmitLoadScriptContext();\r\n\r\n\t\t\t// invoke the operator\r\n\t\t\tif (getReference)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.GetStaticPropertyRef);\r\n\t\t\t\treturn PhpTypeCode.PhpReference;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\til.LdcI4(this.ChainBuilder.QuietRead ? 1 : 0);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.GetStaticProperty);\r\n\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal AssignmentCallback/*!*/ EmitSetStaticPropertyOperator(DType/*!*/ type,\r\n\t\t\tstring propertyFullName, Expression propertyNameExpr, bool setReference)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null && (propertyFullName != null ^ propertyNameExpr != null));\r\n\r\n\t\t\t// we need to check the visibility => invoke the operator:\r\n\t\t\ttype.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\t\t\tEmitName(propertyFullName, propertyNameExpr, false);\r\n\r\n\t\t\treturn delegate(CodeGenerator/*!*/ codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t{\r\n\t\t\t\tcodeGen.EmitLoadClassContext();\r\n\t\t\t\tcodeGen.EmitLoadScriptContext();\r\n\r\n\t\t\t\t// invoke the operator\r\n\t\t\t\tcodeGen.IL.Emit(OpCodes.Call, Methods.Operators.SetStaticProperty);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tinternal void EmitUnsetStaticPropertyOperator(DType/*!*/ type, string propertyFullName,\r\n\t\t\tExpression propertyNameExpr)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null && (propertyFullName != null ^ propertyNameExpr != null));\r\n\r\n\t\t\t// CALL Operators.UnsetStaticProperty(<type desc>, <field name>, <type desc>, <context>) \r\n\t\t\ttype.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\r\n\t\t\tEmitName(propertyFullName, propertyNameExpr, false);\r\n\t\t\tEmitLoadClassContext();\r\n\t\t\tEmitLoadScriptContext();\r\n\r\n\t\t\til.Emit(OpCodes.Call, Methods.Operators.UnsetStaticProperty);\r\n\t\t}\r\n\r\n\t\tinternal void EmitGetConstantValueOperator(DType type, string/*!*/ constantFullName, string constantFallbackName)\r\n\t\t{\r\n\t\t\tif (type != null)\r\n\t\t\t{\r\n                Debug.Assert(constantFallbackName == null);\r\n\r\n\t\t\t\t// CALL Operators.GetClassConstant(<type desc>, <constant name>, <type context>, <script context>);\r\n\t\t\t\ttype.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ldstr, constantFullName);\r\n\r\n\t\t\t\tEmitLoadClassContext();\r\n\t\t\t\tEmitLoadScriptContext();\r\n\r\n\t\t\t\til.EmitCall(OpCodes.Call, Methods.Operators.GetClassConstant, null);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// CALL context.GetConstantValue(name);\r\n\t\t\t\tEmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Ldstr, constantFullName);\r\n                if (constantFallbackName != null) il.Emit(OpCodes.Ldstr, constantFallbackName); else il.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.GetConstantValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#region Routines Body Emission (Tomas Matousek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a body of an arg-full function or method overload.\r\n\t\t/// </summary>\r\n        public void EmitArgfullOverloadBody(PhpRoutine/*!*/ routine, IEnumerable<Statement>/*!*/ body, Text.Span entirePosition, int declarationBodyPosition)\r\n\t\t{\r\n\t\t\tDebug.Assert(!routine.IsAbstract);\r\n\r\n            if (context.Config.Compiler.Debug)\r\n            {\r\n                if (!routine.IsLambda)\r\n                {\r\n                    MarkSequencePoint(declarationBodyPosition);\r\n                }\r\n                il.Emit(OpCodes.Nop);\r\n\r\n                EmitArgsAwareCheck(routine);\r\n            }\r\n\r\n\t\t\t// declares and initializes real locals (should be before args init):\r\n\t\t\tEmitArgfullLocalsInitialization(routine);\r\n\r\n\t\t\t// initializes locals (from arguments or by empty value):\r\n\t\t\tEmitArgfullArgsInitialization(routine);\r\n\r\n            // remember late static bind type from <stack>\r\n            EmitArgfullLateStaticBindTypeInitialization(routine);\r\n\r\n\t\t\t// define user labels:\r\n\t\t\tDefineLabels(routine.Builder.Labels);\r\n\r\n\t\t\t// emits function's body:\r\n            body.Emit(this);\r\n\r\n\t\t\t// marks ending \"}\" as the last sequence point of the routine:\r\n\t\t\t// (do not mark it in lambda functions as they are created from source code without braces);\r\n\t\t\tif (!routine.IsLambda)\r\n\t\t\t{\r\n\t\t\t\tMarkSequencePoint(entirePosition.End);\r\n\t\t\t}\r\n            else if (context.Config.Compiler.Debug)\r\n            {\r\n                il.Emit(OpCodes.Nop);\r\n            }\r\n\r\n\t\t\tEmitRoutineEpilogue(null, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emit check whether the argsaware routine was called properly with <see cref=\"PhpStack\"/> initialized.\r\n        /// </summary>\r\n        /// <remarks>Emitted code is equivalent to <code>context.Stack.ThrowIfNotArgsaware(routine.Name.Value);</code></remarks>\r\n        private void EmitArgsAwareCheck(PhpRoutine/*!*/ routine)\r\n        {\r\n            if (routine.IsArgsAware)\r\n            {\r\n                //  <context>.Stack.ThrowIfNotArgsaware(routine.Name.Value)\r\n                this.EmitLoadScriptContext();   // <context>\r\n                this.IL.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);    // .Stack\r\n                this.IL.Emit(OpCodes.Ldstr, routine.Name.Value);    // routine.Name.Value\r\n                this.IL.Emit(OpCodes.Call, Methods.PhpStack.ThrowIfNotArgsaware);   // .call ThrowIfNotArgsaware\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declares all locals used in a function.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitArgfullLocalsInitialization(PhpRoutine/*!*/ routine)\r\n\t\t{\r\n\t\t\tbool optimized = (routine.Properties & RoutineProperties.HasUnoptimizedLocals) == 0;\r\n\t\t\tbool rt_var_table = (routine.Properties & RoutineProperties.HasRTVariablesTable) != 0;\r\n\r\n\t\t\t// TODO: MarkSequencePoint(0xFeeFee, 0xFeeFee, 0xFeeFee, 0xFeeFee);\r\n\r\n\t\t\t// emits creation of a new table of variables if it will be used in a function:\r\n\t\t\tif (rt_var_table)\r\n\t\t\t{\r\n\t\t\t\til.LdcI4(routine.Builder.LocalVariables.Count);\r\n\t\t\t\til.Emit(OpCodes.Newobj, PhpVariable.RTVariablesTableCtor);\r\n\t\t\t\tRTVariablesTablePlace.EmitStore(il);\r\n\t\t\t}\r\n\r\n\t\t\tif (optimized)\r\n\t\t\t{\r\n\t\t\t\t// declares and initializes real locals (skips arguments):\r\n\t\t\t\tforeach (VariablesTable.Entry entry in routine.Builder.LocalVariables)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!entry.IsParameter)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLocalBuilder local;\r\n\r\n\t\t\t\t\t\tif (entry.IsPhpReference)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlocal = il.DeclareLocal(Types.PhpReference[0]);\r\n\r\n\t\t\t\t\t\t\t// local = new PhpReference();\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\t\t\t\t\t\t\til.Stloc(local);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlocal = il.DeclareLocal(Types.Object[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// stores local to table:\r\n\t\t\t\t\t\tentry.Variable = new Place(local);\r\n\r\n\t\t\t\t\t\t// gives locals names (if they are not parameters):\r\n\t\t\t\t\t\tif (sourceUnit.SymbolDocumentWriter != null)\r\n\t\t\t\t\t\t\tlocal.SetLocalSymInfo(entry.VariableName.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits initialization of arg-full argument variables.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitArgfullArgsInitialization(PhpRoutine/*!*/ routine)\r\n\t\t{\r\n\t\t\tbool optimized = (routine.Properties & RoutineProperties.HasUnoptimizedLocals) == 0;\r\n\t\t\tbool indirect_local_access = (routine.Properties & RoutineProperties.IndirectLocalAccess) != 0;\r\n\r\n\t\t\tint real_index = routine.FirstPseudoGenericParameterIndex;\r\n\t\t\tint index = 0;\r\n\r\n\t\t\tforeach (GenericParameter param in routine.Signature.GenericParams)\r\n\t\t\t{\r\n\t\t\t\tif (param.DefaultType != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tLabel endif_label = il.DefineLabel();\r\n\r\n\t\t\t\t\t// IF ARG[real_index] == Arg.DefaultType) THEN\r\n\t\t\t\t\til.Ldarg(real_index);\r\n\t\t\t\t\til.Emit(OpCodes.Ldsfld, Fields.Arg_DefaultType);\r\n\t\t\t\t\til.Emit(OpCodes.Bne_Un, endif_label);\r\n\r\n\t\t\t\t\t// ARG[real_index] = <typedesc(param.DefaultType)>;\r\n\t\t\t\t\tparam.DefaultType.EmitLoadTypeDesc(this, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\t\t\t\t\til.Starg(real_index);\r\n\r\n\t\t\t\t\t// ENDIF;\r\n\t\t\t\t\til.MarkLabel(endif_label);\r\n\t\t\t\t}\r\n\r\n                // add the DTypeDesc into locals\r\n                /*{\r\n                    EmitLoadRTVariablesTable();\r\n                    il.Emit(OpCodes.Ldstr, \"!\" + param.Name.ToString().ToLower());\r\n\r\n                    // LOAD ARG[arg_idx];\r\n                    il.Ldarg(real_index);\r\n\r\n                    // stores argument to table:\r\n                    il.Emit(OpCodes.Callvirt, PhpVariable.RTVariablesTableAdder);\r\n                }*/\r\n\r\n\t\t\t\treal_index++;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\r\n\t\t\treal_index = routine.FirstPhpParameterIndex;\r\n\t\t\tindex = 0;\r\n\r\n\t\t\tforeach (FormalParam param in routine.Builder.Signature.FormalParams)\r\n\t\t\t{\r\n\t\t\t\t// sets variables place in the table:\r\n\t\t\t\tVariablesTable.Entry entry = routine.Builder.LocalVariables[param.Name];\r\n\r\n                bool optional = index >= routine.Signature.MandatoryParamCount;\r\n\r\n\t\t\t\t// only variables accessible by function's code are initialized;\r\n\t\t\t\t// these are \r\n\t\t\t\t// - all if function has unoptimized locals or contains indirect access \r\n\t\t\t\t//   (which doesn't imply unoptimized locals)\r\n\t\t\t\t// - those which are directly used \r\n\t\t\t\tif (!optimized || indirect_local_access || entry.IsDirectlyUsed)\r\n\t\t\t\t{\r\n\t\t\t\t\t// if the argument is reference => the local should also be a reference:\r\n\t\t\t\t\tDebug.Assert(!param.PassedByRef || entry.IsPhpReference);\r\n\r\n\t\t\t\t\t// marks a sequence point if a parameter is initialized or type hinted:\r\n\t\t\t\t\tif (optional || param.TypeHint != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.MarkSequencePoint(param.Span);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (optional)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLabel end_label = il.DefineLabel();\r\n\t\t\t\t\t\tLabel else_label = il.DefineLabel();\r\n\r\n\t\t\t\t\t\t// IF (ARG[arg_idx]!=Arg.Default) THEN\r\n\t\t\t\t\t\til.Ldarg(real_index);\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldsfld, Fields.Arg_Default);\r\n\t\t\t\t\t\til.Emit(OpCodes.Beq_S, else_label);\r\n\r\n\t\t\t\t\t\t// emits deep copying (if not reference):\r\n\t\t\t\t\t\tEmitArgumentCopying(real_index, param);\r\n\r\n\t\t\t\t\t\t// ELSE;\r\n\t\t\t\t\t\til.Emit(OpCodes.Br, end_label);\r\n\t\t\t\t\t\til.MarkLabel(else_label);\r\n\r\n\t\t\t\t\t\t// ARG[arg_idx] = <default value>;\r\n\t\t\t\t\t\tEmitLoadArgumentDefaultValue(index, param, routine.FullName);\r\n\t\t\t\t\t\til.Starg(real_index);\r\n\r\n\t\t\t\t\t\t// END IF;\r\n\t\t\t\t\t\til.MarkLabel(end_label);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// emits deep copying (if not reference):\r\n\t\t\t\t\t\tEmitArgumentCopying(real_index, param);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// emits type hint test (if specified):\r\n\t\t\t\t\tparam.EmitTypeHintTest(this);\r\n\r\n\t\t\t\t\t// stores argument value to the local variable or to the table //\r\n\r\n\t\t\t\t\t// prepares evaluation stack for call to <variables_table>.Add(<name>,ARG[arg_idx]):\r\n\t\t\t\t\tif (!optimized)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tEmitLoadRTVariablesTable();\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldstr, param.Name.ToString());\r\n\r\n\t\t\t\t\t\t// LOAD ARG[arg_idx];\r\n\t\t\t\t\t\til.Ldarg(real_index);\r\n\r\n                        // \"box\" to reference (if the local is a reference and argument is not a reference):\r\n\t\t\t\t\t\tif (entry.IsPhpReference && !param.PassedByRef)\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\r\n\t\t\t\t\t\t// stores argument to table:\r\n\t\t\t\t\t\til.Emit(OpCodes.Callvirt, PhpVariable.RTVariablesTableAdder);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (entry.IsPhpReference && !param.PassedByRef)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// local variable is stored in a new reference local:\r\n\t\t\t\t\t\tLocalBuilder local = il.DeclareLocal(typeof(PhpReference));\r\n\t\t\t\t\t\tentry.Variable = new Place(local);\r\n\r\n\t\t\t\t\t\t// \"box\" to reference (if the local is a reference and argument is not a reference):\r\n\t\t\t\t\t\til.Ldarg(real_index);\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\t\t\t\til.Stloc(local);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// local variable is stored in the argument:\r\n\t\t\t\t\t\tentry.Variable = new IndexedPlace(PlaceHolder.Argument, real_index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    if (param.TypeHint != null)\r\n                    {\r\n                        if (optional)\r\n                        {\r\n                            // convert Arg.Default to proper default value (so TypeHint test will check the proper value):\r\n\r\n                            Label is_default = il.DefineLabel();\r\n                            Label end_if = il.DefineLabel();\r\n\r\n                            // if (ARG[arg_idx] = Arg.Default) THEN\r\n                            il.Ldarg(real_index);\r\n                            il.Emit(OpCodes.Ldsfld, Fields.Arg_Default);\r\n                            il.Emit(OpCodes.Beq_S, is_default);\r\n                            il.Emit(OpCodes.Br_S, end_if);\r\n                            {\r\n                                // ARG[arg_idx] = <default value>;\r\n                                il.MarkLabel(is_default);\r\n                                EmitLoadArgumentDefaultValue(index, param, routine.FullName);\r\n                                il.Starg(real_index);\r\n                            }\r\n                            il.MarkLabel(end_if);\r\n                        }\r\n\r\n                        // emits type hint test (if specified):\r\n                        param.EmitTypeHintTest(this);\r\n                    }\r\n\t\t\t\t}\r\n\r\n\t\t\t\treal_index++;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Stores late static binding type information if necessary.\r\n        /// </summary>\r\n        private void EmitArgfullLateStaticBindTypeInitialization(PhpRoutine/*!*/routine)\r\n        {\r\n            if (routine == null || !routine.UsesLateStaticBinding)\r\n                return;\r\n\r\n            if (routine.IsMethod)\r\n            {\r\n                if (routine.IsStatic)\r\n                {\r\n                    // static method,\r\n                    // reads <context>.Stack.LateStaticBindType,\r\n                    // saves it into a local variable:\r\n\r\n                    // <context>.Stack.LateStaticBindType\r\n                    this.EmitLoadScriptContext();\r\n                    this.il.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n                    this.il.Emit(OpCodes.Ldfld, Fields.PhpStack_LateStaticBindType);\r\n\r\n                    // DTypeDesc <loc_lsb> =\r\n                    this.LateStaticBindTypePlace = new IndexedPlace(il.DeclareLocal(Types.DTypeDesc[0]));\r\n                    this.LateStaticBindTypePlace.EmitStore(il);\r\n                }\r\n                else\r\n                {\r\n                    // instance method,\r\n                    // uses ((DObject)this).TypeDesc\r\n                    \r\n                    Debug.Assert(this.SelfPlace != null && this.SelfPlace != LiteralPlace.Null, \"SelfPlace expected to be non-NULL\");\r\n                    this.LateStaticBindTypePlace = new MethodCallPlace(Properties.DObject_TypeDesc.GetGetMethod(), false, this.SelfPlace);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                this.LateStaticBindTypePlace = LiteralPlace.Null;\r\n            }\r\n\r\n            \r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits non-reference argument deep copying.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitArgumentCopying(int idx, FormalParam param)\r\n\t\t{\r\n\t\t\tif (!param.PassedByRef)\r\n\t\t\t{\r\n\t\t\t\t// ARG[idx] = PhpVariable.Copy(ARG[idx],CopyReason.PassedByCopy);\r\n\t\t\t\til.Ldarg(idx);\r\n\t\t\t\til.LdcI4((int)CopyReason.PassedByCopy);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\t\t\t\til.Starg(idx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a default value load of a specified optional argument. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"realIndex\">A real index of the argument starting from 0.</param>\r\n\t\t/// <param name=\"param\">The parameter.</param>\r\n\t\t/// <param name=\"calleeFullName\">A name of the target function or method.</param>\r\n\t\tprivate void EmitLoadArgumentDefaultValue(int realIndex, FormalParam param, string calleeFullName)\r\n\t\t{\r\n\t\t\t// optional argument with a default value:\r\n\t\t\tif (param.InitValue != null)\r\n\t\t\t{\r\n\t\t\t\tEmitBoxing(param.InitValue.Emit(this));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// optional argument without a default value\r\n\r\n\t\t\t\t// CALL PhpException.MissingArgument(<realIndex+1>,<calleeName>);\r\n\t\t\t\til.LdcI4(realIndex + 1);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, calleeFullName);\r\n\t\t\t\tEmitPhpException(Methods.PhpException.MissingArgument);\r\n\r\n\t\t\t\t// LOAD null;\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t}\r\n\r\n\t\t\t// if the param is a references => \"box\" into a reference:\r\n\t\t\tif (param.PassedByRef)\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits instructions to conform a required access type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callExpression\">Expression emitting the call.</param>\r\n\t\t/// <param name=\"loadAddress\">Whether to load an address of the return value.</param>\r\n\t\t/// <param name=\"result\">The type code of a top item of the evaluation stack.</param>\r\n\t\tpublic void EmitReturnValueHandling(Expression/*!*/ callExpression, bool loadAddress, ref PhpTypeCode result)\r\n\t\t{\r\n\t\t\tDebug.Assert(callExpression != null);\r\n\r\n\t\t\tif (loadAddress)\r\n\t\t\t{\r\n                if (result == PhpTypeCode.PhpReference)\r\n\t\t\t\t{\r\n\t\t\t\t\t// LOADADDR STACK.Value;\r\n\t\t\t\t\til.Emit(OpCodes.Ldflda, Fields.PhpReference_Value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    if (result == PhpTypeCode.Void)\r\n                        il.Emit(OpCodes.Ldnull);\r\n                    \r\n                    // local = STACK; \r\n\t\t\t\t\t// LOADADDR local;\r\n\t\t\t\t\tLocalBuilder local = il.GetTemporaryLocal(PhpTypeCodeEnum.ToType(result), true);\r\n\t\t\t\t\til.Stloc(local);\r\n\t\t\t\t\til.Ldloca(local);\r\n\t\t\t\t}\r\n\t\t\t\tresult = PhpTypeCode.ObjectAddress;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (callExpression.GetAccess())\r\n\t\t\t{\r\n\t\t\t\tcase AccessType.None:\r\n\r\n\t\t\t\t\t// return value is discarded:\r\n\t\t\t\t\tif (result != PhpTypeCode.Void)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\t\t\tresult = PhpTypeCode.Void;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.ReadUnknown:\r\n\t\t\t\tcase AccessType.ReadRef:\r\n\r\n\t\t\t\t\tif (result != PhpTypeCode.PhpReference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// return value is \"boxed\" to PhpReference:\r\n\t\t\t\t\t\tif (result != PhpTypeCode.Void)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tEmitBoxing(result);\r\n\t\t\t\t\t\t\tEmitVariableCopy(CopyReason.ReturnedByCopy, callExpression);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tresult = PhpTypeCode.PhpReference;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AccessType.Read:\r\n\r\n\t\t\t\t\tif (result == PhpTypeCode.PhpReference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// return value is dereferenced:\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\t\t\tresult = PhpTypeCode.Object;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (result == PhpTypeCode.Void)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// null value is loaded as a result:\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\t\tresult = PhpTypeCode.Object;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a load of the value stored to the result place if available.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitRoutineEpilogue(GlobalCode globalCode, bool transient)\r\n\t\t{\r\n            IncludingEx appendedInclusion;\r\n            if (globalCode != null && (appendedInclusion = globalCode.NodeCompiler<IGlobalCodeCompiler>().AppendedInclusion) != null)\r\n\t\t\t{\r\n\t\t\t\t// marks the return label, however return value is ignored since it is \r\n\t\t\t\t// overriden by appended script's return value (TODO: HOW DOES PHP BEHAVE?):\r\n\t\t\t\tif (ResultPlace != null)\r\n\t\t\t\t\til.MarkLabel(ReturnLabel);\r\n\r\n\t\t\t\t// IF (<is main script>) LOAD <appended file script>.Main(...):\r\n\t\t\t\tappendedInclusion.Emit(this);\r\n\r\n\t\t\t\t// returns the value retured by the appended script:\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (globalCode != null && !transient)\r\n\t\t\t\t{\r\n\t\t\t\t\t// returns default value of the Main routine:\r\n\t\t\t\t\til.LoadLiteral(ScriptModule.DefaultMainReturnValue);\r\n\t\t\t\t\til.Emit(OpCodes.Box, ScriptModule.DefaultMainReturnValue.GetType());\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// function or method contains no return statement:\r\n\t\t\t\t\tif (ReturnsPhpReference)\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t\tif (ResultPlace != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// there is a return statement branching to the ReturnLabel and returning value\r\n\t\t\t\t\t// stored in the ReturnPlace:\r\n\t\t\t\t\til.MarkLabel(ReturnLabel);\r\n\t\t\t\t\tResultPlace.EmitLoad(il);\r\n\t\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a store of the value on the top of the eval. stack to the result place.\r\n\t\t/// Creates a local variable backing the result place if it hasn't been created yet.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitReturnBranch()\r\n\t\t{\r\n\t\t\t// no return branch has been emitted yet -> declare result and return label:\r\n\t\t\tif (ResultPlace == null)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder result_local;\r\n\t\t\t\tif (ReturnsPhpReference)\r\n\t\t\t\t\tresult_local = il.DeclareLocal(typeof(PhpReference));\r\n\t\t\t\telse\r\n\t\t\t\t\tresult_local = il.DeclareLocal(typeof(object));\r\n\r\n\t\t\t\tResultPlace = new Place(result_local);\r\n\t\t\t\tReturnLabel = il.DefineLabel();\r\n\t\t\t}\r\n\r\n\t\t\t// stores top of the stack to the result place:\r\n\t\t\tResultPlace.EmitStore(il);\r\n\r\n\t\t\t// emit branch or leave:\r\n\t\t\tif (ExceptionBlockNestingLevel > 0)\r\n\t\t\t\til.Emit(OpCodes.Leave, ReturnLabel);\r\n\t\t\telse\r\n\t\t\t\til.Emit(OpCodes.Br, ReturnLabel);\r\n\t\t}\r\n\r\n\t\tinternal void DefineLabels(Dictionary<VariableName, Statement>/*!*/ labels)\r\n\t\t{\r\n\t\t\tforeach (Statement stmt in labels.Values)\r\n\t\t\t\t((LabelStmt)stmt).Label = il.DefineLabel();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#region Ghost GetUserEntryPoint/Property Implement Stub Emission (Ladislav Prosek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits ghost stubs for methods and properties that are declared by a <paramref name=\"type\"/>'s\r\n\t\t/// base type but need to be adapted to a particular CLR signature because of implementing an\r\n\t\t/// interface by the <paramref name=\"type\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The <see cref=\"PhpType\"/> that possibly released ghosts by implementing an interface.\r\n\t\t/// </param>\r\n\t\tpublic void EmitGhostStubs(PhpType/*!*/ type)\r\n\t\t{\r\n\t\t\tList<KeyValuePair<DMemberRef, DMemberRef>> ghosts = type.Builder.GhostImplementations;\r\n\t\t\tif (ghosts != null)\r\n\t\t\t{\r\n\t\t\t\tDictionary<string, MethodBuilder> m_stubs = new Dictionary<string, MethodBuilder>();\r\n\t\t\t\tDictionary<Type, PropertyBuilder> f_stubs = new Dictionary<Type, PropertyBuilder>();\r\n\r\n\t\t\t\tfor (int i = 0; i < ghosts.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpMethod impl_method;\r\n\t\t\t\t\tPhpField impl_field;\r\n\r\n\t\t\t\t\tif ((impl_method = ghosts[i].Value.Member as PhpMethod) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// emit ghost method stub\r\n\t\t\t\t\t\tEmitOverrideStubs(m_stubs, impl_method, ghosts[i].Value.Type, type, ghosts[i].Key, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ((impl_field = ghosts[i].Value.Member as PhpField) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// emit ghost property stub\r\n\t\t\t\t\t\tEmitOverrideStubs(f_stubs, impl_field, type, ghosts[i].Key, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Property Override/Implement/Export Stub Emission (Ladislav Prosek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stubs for overriden/implemented properties and explicit export stubs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"field\">The overriding/implementing/exported field.</param>\r\n\t\tpublic void EmitOverrideAndExportStubs(PhpField/*!*/ field)\r\n\t\t{\r\n\t\t\t// keep track of property types that have already been generated\r\n\t\t\tDictionary<Type, PropertyBuilder> stubs = null;\r\n\r\n\t\t\t// emit explicit export stub\r\n\t\t\t// (note: the property builder is already defined - needed for custom attributes usage)\r\n\r\n\t\t\tif (field.IsExported)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(field.ExportedPropertyBuilder != null);\r\n\r\n\t\t\t\tPropertyBuilder prop_builder = field.ExportedPropertyBuilder;\r\n\t\t\t\tEmitFieldExportStubs(field, prop_builder);\r\n\r\n\t\t\t\tstubs = new Dictionary<Type, PropertyBuilder>();\r\n\t\t\t\tstubs.Add(prop_builder.PropertyType, prop_builder);\r\n\t\t\t}\r\n\t\t\t// emit stubs for overriden property\r\n\r\n\t\t\tif (field.Overrides != null)\r\n\t\t\t{\r\n\t\t\t\tif (stubs == null) stubs = new Dictionary<Type, PropertyBuilder>();\r\n\t\t\t\tEmitOverrideStubs(stubs, field, field.DeclaringPhpType, field.Overrides, false);\r\n\t\t\t}\r\n\r\n\t\t\tif (field.Implements != null)\r\n\t\t\t{\r\n\t\t\t\t// emit stubs(s) for implemented property/ies\r\n\r\n\t\t\t\tfor (int i = 0; i < field.Implements.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (stubs == null) stubs = new Dictionary<Type, PropertyBuilder>();\r\n\t\t\t\t\tEmitOverrideStubs(stubs, field, field.DeclaringPhpType, field.Implements[i], true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits property stubs for a overriden or implemented CLR property.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stubs\">Already generated stubs.</param>\r\n\t\t/// <param name=\"target\">The overriding/implementing field.</param>\r\n\t\t/// <param name=\"declaringType\">The type where the stubs should be emitted.</param>\r\n\t\t/// <param name=\"template\">The property being overriden/implemented.</param>\r\n\t\t/// <param name=\"newSlot\"><B>True</B> if the stub should be assigned a new vtable slot,\r\n\t\t/// <B>false</B> otherwise.</param>\r\n\t\tprivate void EmitOverrideStubs(IDictionary<Type, PropertyBuilder>/*!*/ stubs, PhpField/*!*/ target,\r\n\t\t\tPhpType/*!*/ declaringType, DMemberRef/*!*/ template, bool newSlot)\r\n\t\t{\r\n\t\t\tClrProperty clr_template = template.Member as ClrProperty;\r\n\t\t\tif (clr_template == null) return;\r\n\r\n\t\t\tMethodInfo getter = clr_template.Getter;\r\n\t\t\tMethodInfo setter = clr_template.Setter;\r\n\r\n\t\t\t// we're only interested in non-final virtual getters/setters\r\n\t\t\tif (getter != null && (!getter.IsVirtual || getter.IsFinal)) getter = null;\r\n\t\t\tif (setter != null && (!setter.IsVirtual || setter.IsFinal)) setter = null;\r\n\r\n\t\t\tConstructedType constructed_type = template.Type as ConstructedType;\r\n\r\n\t\t\t// map property type according to constructed type\r\n\t\t\tType property_type = clr_template.RealProperty.PropertyType;\r\n\t\t\tif (constructed_type != null) property_type = constructed_type.MapRealType(property_type);\r\n\r\n\t\t\t// do we already have getter/setter of this type?\r\n\t\t\tPropertyBuilder prop_builder;\r\n\t\t\tif (stubs.TryGetValue(property_type, out prop_builder))\r\n\t\t\t{\r\n\t\t\t\tif (prop_builder.GetGetMethod(true) != null) getter = null;\r\n\t\t\t\tif (prop_builder.GetSetMethod(true) != null) setter = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (getter != null || setter != null)\r\n\t\t\t{\r\n\t\t\t\tif (prop_builder == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the property might already exist - we could be just adding an accessor\r\n\t\t\t\t\tTypeBuilder type_builder = declaringType.RealTypeBuilder;\r\n\r\n\t\t\t\t\tprop_builder = type_builder.DefineProperty(\r\n\t\t\t\t\t\tclr_template.Name.ToString(),\r\n\t\t\t\t\t\tReflection.Enums.ToPropertyAttributes(target.MemberDesc.MemberAttributes),\r\n\t\t\t\t\t\tproperty_type,\r\n\t\t\t\t\t\tType.EmptyTypes);\r\n\r\n\t\t\t\t\tstubs.Add(property_type, prop_builder);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (getter != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// add getter\r\n\t\t\t\t\tMethodBuilder getter_builder = DefineOverrideAccessor(\r\n\t\t\t\t\t\tdeclaringType,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tgetter,\r\n\t\t\t\t\t\tnewSlot,\r\n\t\t\t\t\t\tproperty_type,\r\n\t\t\t\t\t\tType.EmptyTypes);\r\n\r\n\t\t\t\t\tprop_builder.SetGetMethod(getter_builder);\r\n\r\n\t\t\t\t\tEmitFieldExportGetter(target, prop_builder, getter_builder);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (setter != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// add setter\r\n\t\t\t\t\tMethodBuilder setter_builder = DefineOverrideAccessor(\r\n\t\t\t\t\t\tdeclaringType,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tsetter,\r\n\t\t\t\t\t\tnewSlot,\r\n\t\t\t\t\t\tTypes.Void,\r\n\t\t\t\t\t\tnew Type[] { property_type });\r\n\r\n\t\t\t\t\tprop_builder.SetSetMethod(setter_builder);\r\n\r\n\t\t\t\t\tEmitFieldExportSetter(target, prop_builder, setter_builder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a property accessor method and installs an explicit override if necessary.\r\n\t\t/// </summary>\r\n\t\tprivate MethodBuilder/*!*/ DefineOverrideAccessor(PhpType/*!*/ declaringType, PhpField/*!*/ target,\r\n\t\t\tMethodInfo/*!*/ template, bool newSlot, Type/*!*/ returnType, Type[]/*!!*/ paramTypes)\r\n\t\t{\r\n\t\t\tbool changed;\r\n\t\t\tstring name = ClrStubBuilder.GetNonConflictingMethodName(declaringType.TypeDesc, template.Name, out changed);\r\n\r\n\t\t\tMethodAttributes attr;\r\n\r\n\t\t\tif (changed) attr = MethodAttributes.PrivateScope;\r\n\t\t\telse attr = Reflection.Enums.ToMethodAttributes(target.MemberDesc.MemberAttributes);\r\n\r\n\t\t\tattr |= (MethodAttributes.Virtual | MethodAttributes.HideBySig);\r\n\t\t\tif (newSlot) attr |= MethodAttributes.NewSlot;\r\n\r\n\t\t\tMethodBuilder method_builder = declaringType.RealTypeBuilder.DefineMethod(\r\n\t\t\t\tname,\r\n\t\t\t\tattr,\r\n\t\t\t\treturnType,\r\n\t\t\t\tparamTypes);\r\n\r\n\t\t\tif (changed)\r\n\t\t\t{\r\n\t\t\t\tdeclaringType.RealTypeBuilder.DefineMethodOverride(\r\n\t\t\t\t\tmethod_builder,\r\n\t\t\t\t\ttemplate);\r\n\t\t\t}\r\n\r\n\t\t\treturn method_builder;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetUserEntryPoint Override/Implement/Export Stub Emission (Ladislav Prosek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stubs for overridden/implemented methods and explicit export stubs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The overriding/implementing/exported method.</param>\r\n\t\t/// <remarks>\r\n\t\t/// If the <paramref name=\"method\"/> implements or overrides a CLR method (or methods),\r\n\t\t/// appropriate stub(s) are generated and emitted to its declaring type. In addition,\r\n\t\t/// if the method is exported using the <c>Export</c> pseudo-custom attribute, stub(s)\r\n\t\t/// created according to its signature (type hints, default params, etc.) are also\r\n\t\t/// generated.\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitOverrideAndExportStubs(PhpMethod/*!*/ method)\r\n\t\t{\r\n\t\t\t// keep track of the signatures that have already been generated\r\n\t\t\tDictionary<string, MethodBuilder> stubs = null;\r\n\r\n\t\t\t// emit stub(s) for overridden method(s)\r\n\r\n\t\t\tif (method.Overrides != null)\r\n\t\t\t{\r\n\t\t\t\tstubs = new Dictionary<string, MethodBuilder>();\r\n\t\t\t\tEmitOverrideStubs(stubs, method, method.DeclaringPhpType, method.DeclaringPhpType,\r\n\t\t\t\t\tmethod.Overrides, false);\r\n\t\t\t}\r\n\r\n\t\t\tif (method.Implements != null)\r\n\t\t\t{\r\n\t\t\t\t// emit stub(s) for implemented method(s)\r\n\r\n\t\t\t\tfor (int i = 0; i < method.Implements.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (stubs == null) stubs = new Dictionary<string, MethodBuilder>();\r\n\t\t\t\t\tEmitOverrideStubs(stubs, method, method.DeclaringPhpType, method.DeclaringPhpType,\r\n\t\t\t\t\t\tmethod.Implements[i], true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// emit explicit export stubs\r\n\r\n\t\t\tif (method.IsExported)\r\n\t\t\t{\r\n\t\t\t\tif (stubs == null) stubs = new Dictionary<string, MethodBuilder>();\r\n\t\t\t\tEmitExportStubs(stubs, method);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stubs for all overloads of one overridden or implemented method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stubs\">Already generated stubs.</param>\r\n\t\t/// <param name=\"target\">The overriding/implementing method.</param>\r\n\t\t/// <param name=\"targetType\">The type (perhaps constructed) that declared <paramref name=\"target\"/>.</param>\r\n\t\t/// <param name=\"declaringType\">The type where the stubs should be emitted.</param>\r\n\t\t/// <param name=\"template\">The method being overridden/implemented.</param>\r\n\t\t/// <param name=\"newSlot\"><B>True</B> if the stub should be assigned a new vtable slot,\r\n\t\t/// <B>false</B> otherwise.</param>\r\n\t\tprivate void EmitOverrideStubs(IDictionary<string, MethodBuilder>/*!*/ stubs, PhpMethod/*!*/ target,\r\n\t\t\tDType/*!*/ targetType, PhpType/*!*/ declaringType, DMemberRef/*!*/ template, bool newSlot)\r\n\t\t{\r\n\t\t\tClrMethod clr_template = template.Member as ClrMethod;\r\n\t\t\tif (clr_template == null)\r\n\t\t\t{\r\n                if (!target.IsStatic)\r\n\t\t\t\t    EmitOverrideStubsForPhpTemplate(stubs, target, targetType, declaringType, template, newSlot);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n            //\r\n            // following code emits stubs in case of CLR base method\r\n            //\r\n\r\n\t\t\tConstructedType constructed_type = template.Type as ConstructedType;\r\n\t\t\tTypeBuilder type_builder = declaringType.RealTypeBuilder;\r\n\r\n\t\t\t// override all virtual non-final overloads\r\n\t\t\tforeach (ClrMethod.Overload overload in clr_template.Overloads)\r\n\t\t\t{\r\n\t\t\t\tif (overload.Method.IsVirtual && !overload.Method.IsFinal)\r\n\t\t\t\t{\r\n\t\t\t\t\t// map generic type parameters according to the constructed type\r\n\t\t\t\t\tType constructed_return_type;\r\n\t\t\t\t\tParameterInfo[] constructed_params = overload.MakeConstructed(constructed_type, out constructed_return_type);\r\n\r\n\t\t\t\t\t// check whether we have not generated this signature before\r\n\t\t\t\t\tstring clr_sig = ClrMethod.Overload.ClrSignatureToString(\r\n\t\t\t\t\t\toverload.GenericParamCount,\r\n\t\t\t\t\t\tconstructed_params,\r\n\t\t\t\t\t\tconstructed_return_type);\r\n\r\n\t\t\t\t\tif (stubs.ContainsKey(clr_sig)) continue;\r\n\r\n\t\t\t\t\tType[] param_types = new Type[constructed_params.Length];\r\n\r\n\t\t\t\t\tfor (int j = 0; j < param_types.Length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tparam_types[j] = constructed_params[j].ParameterType;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// determine the stub attributes\r\n\t\t\t\t\tMethodAttributes attr;\r\n\t\t\t\t\tstring name;\r\n\r\n\t\t\t\t\tname = overload.Method.Name;\r\n\t\t\t\t\tattr = Reflection.Enums.ToMethodAttributes(target.MemberDesc.MemberAttributes);\r\n\t\t\t\t\tattr |= (MethodAttributes.Virtual | MethodAttributes.HideBySig);\r\n\r\n\t\t\t\t\tif (newSlot) attr |= MethodAttributes.NewSlot;\r\n\r\n\t\t\t\t\tMethodBuilder overload_builder = type_builder.DefineMethod(name, attr);\r\n\r\n\t\t\t\t\tif (overload.MandatoryGenericParamCount > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// define the same generic parameters that are defined for the overridden method\r\n\t\t\t\t\t\t// (the same constraints but possibly having different names)\r\n\t\t\t\t\t\tClrStubBuilder.DefineStubGenericParameters(\r\n\t\t\t\t\t\t\toverload_builder,\r\n\t\t\t\t\t\t\toverload.GenericParameters,\r\n\t\t\t\t\t\t\ttarget.Signature,\r\n\t\t\t\t\t\t\tparam_types);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\toverload_builder.SetReturnType(constructed_return_type);\r\n\t\t\t\t\toverload_builder.SetParameters(param_types);\r\n\r\n\t\t\t\t\t// set parameter names and attributes\r\n\t\t\t\t\tClrStubBuilder.DefineStubParameters(overload_builder,\r\n\t\t\t\t\t\ttarget.Builder.Signature.FormalParams, constructed_params);\r\n\r\n\t\t\t\t\tif (!overload_builder.IsAbstract)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tEmissionContext emission_context = SetupStubPlaces(target.DeclaringPhpType, false);\r\n\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// convert parameters and invoke the target\r\n\t\t\t\t\t\t\tClrStubBuilder.EmitMethodStubBody(\r\n\t\t\t\t\t\t\t\tnew ILEmitter(overload_builder),\r\n\t\t\t\t\t\t\t\tScriptContextPlace,\r\n\t\t\t\t\t\t\t\tconstructed_params,\r\n\t\t\t\t\t\t\t\toverload.GenericParameters,\r\n\t\t\t\t\t\t\t\tconstructed_return_type,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\ttargetType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfinally\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tRestorePlaces(emission_context);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstubs.Add(clr_sig, overload_builder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stubs for one overridden or implemented PHP method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stubs\">Already generated stubs.</param>\r\n\t\t/// <param name=\"target\">The overriding/implementing method.</param>\r\n\t\t/// <param name=\"targetType\">The type (perhaps constructed) that declared <paramref name=\"target\"/>.</param>\r\n\t\t/// <param name=\"declaringType\">The type where the stubs should be emitted.</param>\r\n\t\t/// <param name=\"template\">The method being overridden/implemented (surely PHP).</param>\r\n\t\t/// <param name=\"newSlot\"><B>True</B> if the stub should be assigned a new vtable slot,\r\n\t\t/// <B>false</B> otherwise.</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method handles situations where method overriding/implementing does not work by itself because of\r\n\t\t/// the fact that method names in PHP are case insensitive.\r\n\t\t/// </remarks>\r\n\t\tprivate void EmitOverrideStubsForPhpTemplate(IDictionary<string, MethodBuilder>/*!*/ stubs,\r\n\t\t\tPhpMethod/*!*/ target, DType/*!*/ targetType, PhpType/*!*/ declaringType, DMemberRef/*!*/ template,\r\n\t\t\tbool newSlot)\r\n\t\t{\r\n            PhpMethod php_template = (PhpMethod)template.Member;\r\n\r\n            // Emit method stub if needed here ... (resolve .NET incompatibility of base method and overriding method)\r\n            // \r\n            // Until now, several possible cases or their combination are known:\r\n            // - base and overriding methods match, but their name letter-casing don't (need to define override explicitly to properly Bake the type)\r\n            // - base and overriding methods name match exactly, but overriding methods has additional arguments (with default values) (in PHP it is allowed) (stub needed)\r\n            // - ghost stub, where B extends A implements I, where A contains definition of method in I and casing does not match\r\n            //\r\n            // if signatures don't match, virtual sealed stub must be created, it only calls the target method\r\n            // if signatures match, only explicit override must be stated\r\n\r\n            if (target.Name.ToString() != php_template.Name.ToString() ||           // the names differ (perhaps only in casing)\r\n                target.Signature.ParamCount != php_template.Signature.ParamCount || // signature was extended (additional arguments added, with implicit value only)\r\n                target.Signature.AliasReturn != php_template.Signature.AliasReturn  // returns PhpReference instead of Object\r\n                )\r\n\t\t\t{\r\n\t\t\t\tMethodInfo target_argfull = DType.MakeConstructed(target.ArgFullInfo, targetType as ConstructedType);\r\n\t\t\t\tTypeBuilder type_builder = declaringType.RealTypeBuilder;\r\n\r\n\t\t\t\t// we have to generate a pass-thru override stub that overrides the template based on\r\n\t\t\t\t// name since it is impossible to install an explicit override of a method declared by\r\n\t\t\t\t// a generic type in v2.0 SRE (feedback ID=97425)\r\n\t\t\t\tbool sre_bug_workaround = (template.Type is ConstructedType);\r\n\r\n                if (target.DeclaringType == declaringType && !sre_bug_workaround &&\r\n                    target.Signature.ParamCount == php_template.Signature.ParamCount &&\r\n                    target.Signature.AliasReturn == php_template.Signature.AliasReturn)\r\n\t\t\t\t{\r\n                    // signatures match, just install an explicit override if possible\r\n\t\t\t\t\ttype_builder.DefineMethodOverride(target_argfull,\r\n\t\t\t\t\t\tDType.MakeConstructed(php_template.ArgFullInfo, template.Type as ConstructedType));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tstring stubs_key = null;\r\n\t\t\t\t\tMethodAttributes attrs;\r\n\r\n                    if (sre_bug_workaround)\r\n                    {\r\n                        // check whether we have generated a stub having the template name before\r\n                        if (stubs.ContainsKey(stubs_key = \",\" + php_template.ArgFullInfo.Name)) return;\r\n\r\n                        attrs = php_template.ArgFullInfo.Attributes & ~MethodAttributes.Abstract;\r\n                    }\r\n                    else\r\n                    {\r\n                        attrs = MethodAttributes.PrivateScope | MethodAttributes.Virtual;\r\n                    }\r\n\r\n                    if (newSlot) attrs |= MethodAttributes.NewSlot; \r\n\t\t\t\t\telse attrs &= ~MethodAttributes.NewSlot;\r\n\r\n\t\t\t\t\t// determine stub return and parameters type\r\n\t\t\t\t\tType return_type;\r\n\t\t\t\t\tType[] param_types = php_template.Signature.ToArgfullSignature(1, out return_type);\r\n                    param_types[0] = Types.ScriptContext[0];\r\n\r\n\t\t\t\t\tMethodBuilder override_stub = type_builder.DefineMethod(\r\n                        (sre_bug_workaround ? php_template.ArgFullInfo.Name : \"<Override>\"),\r\n\t\t\t\t\t\tattrs, return_type, param_types);\r\n\r\n\t\t\t\t\tILEmitter il = new ILEmitter(override_stub);\r\n\r\n                    //\r\n                    // return target( [arg1, ...[, default, ...]] );\r\n                    //\r\n\r\n\t\t\t\t\t// pass-thru all arguments, including this (arg0)\r\n                    int pass_args = Math.Min(param_types.Length, target.Signature.ParamCount + 1);\r\n\t\t\t\t\tfor (int i = 0; i <= pass_args; ++i) il.Ldarg(i);  // this, param1, ....\r\n                    for (int i = pass_args; i <= target.Signature.ParamCount; ++i)\r\n                    {\r\n                        // ... // PhpException.MissingArgument(i, target.FullName); // but in some override it can be optional argument \r\n                        il.Emit(OpCodes.Ldsfld, PHP.Core.Emit.Fields.Arg_Default);  // paramN\r\n                    }\r\n                    il.Emit(OpCodes.Callvirt, target_argfull);\r\n\r\n                    // return\r\n                    if (target.Signature.AliasReturn != php_template.Signature.AliasReturn)\r\n                        il.Emit(OpCodes.Call, target.Signature.AliasReturn\r\n                            ? Methods.PhpVariable.Dereference       // PhpVariable.Deference(obj)                   \r\n                            : Methods.PhpVariable.MakeReference);   // PhpVariable.MakeReference(obj)\r\n                    il.Emit(OpCodes.Ret);\r\n\r\n\t\t\t\t\tif (sre_bug_workaround)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstubs.Add(stubs_key, override_stub);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n                        if (!php_template.ArgFullInfo.IsVirtual)\r\n                            throw new InvalidOperationException(string.Format(\"Cannot override non-virtual method '{0}'!\", php_template.ArgFullInfo.Name));\r\n\r\n\t\t\t\t\t\ttype_builder.DefineMethodOverride(override_stub,\r\n\t\t\t\t\t\t\tDType.MakeConstructed(php_template.ArgFullInfo, template.Type as ConstructedType));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stubs for all overloads of one exported method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stubs\">Already generated stubs.</param>\r\n\t\t/// <param name=\"target\">The exported method.</param>\r\n\t\tprivate void EmitExportStubs(IDictionary<string, MethodBuilder>/*!*/ stubs, PhpMethod/*!*/ target)\r\n\t\t{\r\n\t\t\tDebug.Assert(target.IsExported);\r\n\r\n\t\t\tstring clr_sig = null;\r\n\t\t\tMethodAttributes attributes = Reflection.Enums.ToMethodAttributes(target.MemberDesc.MemberAttributes);\r\n\t\t\tattributes |= MethodAttributes.HideBySig;\r\n\r\n\t\t\tforeach (StubInfo stub in ClrStubBuilder.DefineMethodExportStubs(\r\n\t\t\t\ttarget, target.DeclaringPhpType,\r\n\t\t\t\tattributes,\r\n\t\t\t\tfalse,\r\n\t\t\t\tdelegate(string[] genericParamNames, object[] parameterTypes, object returnType)\r\n\t\t\t\t{\r\n\t\t\t\t\t// check whether we have not generated this signature before\r\n\t\t\t\t\tclr_sig = ClrMethod.Overload.ClrSignatureToString(genericParamNames.Length, parameterTypes, returnType);\r\n\t\t\t\t\treturn !stubs.ContainsKey(clr_sig);\r\n\t\t\t\t}))\r\n\t\t\t{\r\n\t\t\t\t// set parameter names and attributes\r\n\t\t\t\tClrStubBuilder.DefineStubParameters(stub.MethodBuilder, null, stub.Parameters);\r\n\r\n\t\t\t\tif (!stub.MethodBuilder.IsAbstract)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmissionContext emission_context = SetupStubPlaces(target.DeclaringPhpType, stub.MethodBuilder.IsStatic);\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// stub body\r\n\t\t\t\t\t\tClrStubBuilder.EmitMethodStubBody(\r\n\t\t\t\t\t\t\tnew ILEmitter(stub.MethodBuilder),\r\n\t\t\t\t\t\t\tScriptContextPlace,\r\n\t\t\t\t\t\t\tstub.Parameters,\r\n\t\t\t\t\t\t\tstub.TypeParameters,\r\n\t\t\t\t\t\t\tstub.ReturnType,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\ttarget.DeclaringType);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfinally\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tRestorePlaces(emission_context);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstubs.Add(clr_sig, stub.MethodBuilder);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#region EmitPhpException, EmitThrow (Tomas Matousek)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call to error reporting method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The error reporting method.</param>\r\n\t\tinternal void EmitPhpException(MethodInfo/*!*/ method)\r\n\t\t{\r\n\t\t\tEmitPhpException(il, method);\r\n\t\t}\r\n\r\n\t\tinternal void EmitPhpException(ILEmitter/*!*/ il, MethodInfo/*!*/ method)\r\n\t\t{\r\n\t\t\t// emits call to a method which reports an error:\r\n\t\t\til.Emit(OpCodes.Call, method);\r\n\r\n\t\t\t// emits nop which makes sequence points working well in stack trace:\r\n\t\t\tif (context.Config.Compiler.Debug)\r\n\t\t\t\til.Emit(OpCodes.Nop);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Script and Debugging Information Emission (Tomas Matousek)\r\n\r\n\t\tprivate int LastTransientLine = -1;\r\n\t\tprivate int LastTransientColumn = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks a sequence point in generated code if symbol writer is defined.\r\n\t\t/// In transient scripts, a code setting special fields of <see cref=\"ScriptContext\"/> is emmitted.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"startLine\">Real first line of the point.</param>\r\n\t\t/// <param name=\"startColumn\">Real first column of the point.</param>\r\n\t\t/// <param name=\"endLine\">Real last line of the point.</param>\r\n\t\t/// <param name=\"endColumn\">Real last column of the point.</param>\r\n\t\tinternal void MarkSequencePoint(int startLine, int startColumn, int endLine, int endColumn)\r\n\t\t{\r\n\t\t\tif (context.Config.Compiler.Debug)\r\n\t\t\t{\r\n\t\t\t\t// ignores #pragma inside the code span:\r\n\t\t\t\tISymbolDocumentWriter symbol_writer = sourceUnit.GetMappedSymbolDocumentWriter(startLine);\r\n\t\t\t\tstartLine = sourceUnit.GetMappedLine(startLine);\r\n\r\n\t\t\t\tif (symbol_writer != null && startLine >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(startLine >= 0 && startColumn >= 0 && endLine >= 0 && endColumn >= 0, \"Invalid position values.\");\r\n\t\t\t\t\til.MarkSequencePoint(symbol_writer, startLine + 1, startColumn + 1, endLine + 1, endColumn + 1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (CompilationUnit.IsTransient)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitEvalInfoCapture(startLine, startColumn, true);\r\n\t\t\t\t\tLastTransientLine = startLine;\r\n\t\t\t\t\tLastTransientColumn = startColumn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Marks a sequence point (see <see cref=\"MarkSequencePoint\"/>) using position of given <paramref name=\"expression\"/>.\r\n        /// </summary>\r\n        /// <param name=\"expression\">Expression which position is used to mark sequence point.</param>\r\n        internal void MarkSequencePoint(Expression/*!*/expression)\r\n        {\r\n            Debug.Assert(expression != null);\r\n            MarkSequencePoint(expression.Span);\r\n        }\r\n\r\n        internal void MarkSequencePoint(List<Expression>/*!*/expressions)\r\n        {\r\n            if (expressions != null && expressions.Count != 0)\r\n            {\r\n                if (expressions.Count == 1)\r\n                {\r\n                    MarkSequencePoint(expressions[0]);\r\n                }\r\n                else\r\n                {\r\n                    var first = expressions[0];\r\n                    var last = expressions.Last();\r\n                    MarkSequencePoint(Text.Span.FromBounds(first.Span.Start, last.Span.End));\r\n                }\r\n            }\r\n        }\r\n\r\n        internal void MarkSequencePoint(Text.Span span)\r\n        {\r\n            if (span.IsValid)\r\n            {\r\n                var position = new Text.TextSpan(SourceUnit.LineBreaks, span);\r\n                MarkSequencePoint(position.FirstLine, position.FirstColumn, position.LastLine, position.LastColumn);\r\n            }\r\n        }\r\n\r\n        internal void MarkSequencePoint(int position)\r\n        {\r\n            if (position >= 0)\r\n                MarkSequencePoint(new Text.Span(position, 0));\r\n        }\r\n\r\n\t\tinternal void MarkTransientSequencePoint()\r\n\t\t{\r\n\t\t\tif (context.Config.Compiler.Debug && CompilationUnit.IsTransient)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(LastTransientLine != -1 && LastTransientColumn != -1);\r\n\t\t\t\tEmitEvalInfoCapture(LastTransientLine, LastTransientColumn, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal void EmitEvalInfoCapture(int position, bool positionOnly)\r\n        {\r\n            int line, column;\r\n            SourceUnit.LineBreaks.GetLineColumnFromPosition(position, out line, out column);\r\n\r\n            EmitEvalInfoCapture(line, column, positionOnly);\r\n        }\r\n\r\n\t\tinternal void EmitEvalInfoCapture(int line, int column, bool positionOnly)\r\n\t\t{\r\n\t\t\tEmitLoadScriptContext();\r\n\t\t\til.LdcI4(line);\r\n\t\t\til.Emit(OpCodes.Stfld, Fields.ScriptContext_EvalLine);\r\n\r\n\t\t\tEmitLoadScriptContext();\r\n\t\t\til.LdcI4(column);\r\n\t\t\til.Emit(OpCodes.Stfld, Fields.ScriptContext_EvalColumn);\r\n\r\n\t\t\tif (!positionOnly)\r\n\t\t\t{\r\n\t\t\t\tEmitLoadScriptContext();\r\n\t\t\t\til.LdcI4(sourceUnit.CompilationUnit.TransientId);\r\n\t\t\t\til.Emit(OpCodes.Stfld, Fields.ScriptContext_EvalId);\r\n\r\n\t\t\t\tEmitLoadScriptContext();\r\n\t\t\t\til.LoadLiteral(sourceUnit.SourceFile.RelativePath.ToString());\r\n\t\t\t\til.Emit(OpCodes.Stfld, Fields.ScriptContext_EvalRelativeSourcePath);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void EmitEvalInfoPass(int line, int column)\r\n\t\t{\r\n\t\t\til.LoadLiteral(sourceUnit.SourceFile.RelativePath.ToString());\r\n\t\t\til.LdcI4(line);\r\n\t\t\til.LdcI4(column);\r\n\t\t\til.LdcI4(sourceUnit.CompilationUnit.TransientId);\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Other stuff\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code which populates an array with values of specified expressions.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expressions\">A list of expressions.</param>\r\n\t\t/// <param name=\"result\">\r\n\t\t/// A local variable where to store the resulting array. \r\n\t\t/// If <B>null</B> then a new local variable is defined.\r\n\t\t/// </param>\r\n\t\t/// <returns>The local variable where the resulting array is stored.</returns>\r\n\t\tpublic LocalBuilder EmitObjectArrayPopulation(Expression[]/*!*/ expressions, LocalBuilder result)\r\n\t\t{\r\n            // constructs the array and pushes it onto the top of the evaluation stack\r\n            EmitObjectArrayPopulation(expressions);\r\n\r\n            // stores the array into the <result> variable\r\n\t\t\tif (result == null)\r\n                result = il.DeclareLocal(typeof(object[]));\r\n\r\n            // <result> = array\r\n            il.Stloc(result);\r\n\r\n            //\r\n            return result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emits code which populates an array with values of specified expressions.\r\n        /// PUshes the array onto the top of the evaluation stack.\r\n        /// </summary>\r\n        /// <param name=\"expressions\">A list of expressions.</param>\r\n        /// <remarks>PUshes the resulting array onto the top of the evaluation stack.</remarks>\r\n        public void EmitObjectArrayPopulation(Expression[]/*!*/ expressions)\r\n        {\r\n            Debug.Assert(expressions != null);\r\n\r\n            il.LdcI4(expressions.Length);\r\n            il.Emit(OpCodes.Newarr, typeof(object));\r\n\r\n            for (int i = 0; i < expressions.Length; i++)\r\n            {\r\n                // array[<i>] = <expressions[i]>;\r\n                il.Emit(OpCodes.Dup);\r\n                il.LdcI4(i);\r\n                EmitBoxing(expressions[i].Emit(this));\r\n                il.Emit(OpCodes.Stelem_Ref);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that uniquely identifies current function, method or class, or returns <B>null</B>\r\n\t\t/// if global code is currently emitted.\r\n\t\t/// </summary>\r\n\t\t/// <returns>String ID or <B>null</B>.</returns>\r\n\t\tpublic string GetLocationId()\r\n\t\t{\r\n\t\t\tswitch (locationStack.LocationType)\r\n\t\t\t{\r\n\t\t\t\tcase LocationTypes.FunctionDecl:\r\n\t\t\t\t\treturn \"F:\" + locationStack.PeekFunctionDecl().Name;\r\n\r\n\t\t\t\tcase LocationTypes.TypeDecl:\r\n\t\t\t\t\treturn \"C:\" + locationStack.PeekTypeDecl().Type.QualifiedName;\r\n\r\n\t\t\t\tcase LocationTypes.MethodDecl:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tCompilerLocationStack.MethodDeclContext method = locationStack.PeekMethodDecl();\r\n\t\t\t\t\t\treturn String.Format(\"M:{0}${1}\", method.Type.QualifiedName, method.Method.FullName);\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call to a method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">A <see cref=\"MethodInfo\"/> of the method to be called.</param>\r\n\t\t/// <returns>A type code of return value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Use if it is hard to keep track of types returned by emitted methods (e.g. in operators).\r\n\t\t/// Do not waste cycles when it is clear what type code the emitted method returns.\r\n\t\t/// </remarks>\r\n\t\tinternal PhpTypeCode EmitMethodCall(MethodInfo method)\r\n\t\t{\r\n\t\t\til.Emit(OpCodes.Call, method);\r\n\t\t\treturn PhpTypeCodeEnum.FromType(method.ReturnType);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Emits call to <see cref=\"ScriptContext.DeclareFunction\"/>.\r\n\t\t/// </summary>\r\n        internal void EmitDeclareFunction(PhpFunction/*!*/ function)\r\n        {\r\n            EmitDeclareFunction(il, ScriptContextPlace, function);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call to <see cref=\"ScriptContext.DeclareFunction\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal static void EmitDeclareFunction(ILEmitter/*!*/il, IPlace/*!*/scriptContextPlace, PhpFunction/*!*/ function)\r\n        {\r\n            Label lbl_fieldinitialized = il.DefineLabel();\r\n\r\n            // private static PhpRoutine <routine>'function = null;\r\n            var attrs = FieldAttributes.Static | FieldAttributes.Private;\r\n            var field = il.TypeBuilder.DefineField(string.Format(\"<routine>'{0}\", function.FullName), typeof(PhpRoutineDesc), attrs);\r\n\r\n            // if (<field> == null)\r\n            il.Emit(OpCodes.Ldsfld, field);\r\n            il.Emit(OpCodes.Brtrue, lbl_fieldinitialized);\r\n            {\r\n                // <field> = new PhpRoutineDesc(<attributes>, new RoutineDelegate(null, <delegate>))\r\n\r\n                // LOAD <attributes>;\r\n                il.LdcI4((int)function.MemberDesc.MemberAttributes);\r\n\r\n                // new RoutineDelegate(null, <delegate>, true)\r\n                il.Emit(OpCodes.Ldnull);\r\n                il.Emit(OpCodes.Ldftn, function.ArgLessInfo);\r\n                il.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n                il.LoadBool(true);\r\n\r\n                // new PhpRoutineDesc:\r\n                il.Emit(OpCodes.Newobj, Constructors.PhpRoutineDesc_Attr_Delegate_Bool);\r\n\r\n                // <field> = <STACK>\r\n                il.Emit(OpCodes.Stsfld, field);\r\n\r\n                // new PurePhpFunction(<field>, fullName, argfull);   // writes desc.Member\r\n                il.Emit(OpCodes.Ldsfld, field);\r\n                il.Emit(OpCodes.Ldstr, function.FullName);\r\n                CodeGenerator.EmitLoadMethodInfo(il, function.ArgFullInfo/*, AssemblyBuilder.DelegateBuilder*/);\r\n                il.Emit(OpCodes.Newobj, Constructors.PurePhpFunction);\r\n                il.Emit(OpCodes.Pop);\r\n                \r\n            }\r\n            il.MarkLabel(lbl_fieldinitialized);\r\n\r\n            // CALL ScriptContent.DeclareFunction(<field>, <name>);\r\n            scriptContextPlace.EmitLoad(il);\r\n            \r\n            // LOAD <field>\r\n            il.Emit(OpCodes.Ldsfld, field);            \r\n\r\n            // LOAD <fullName>\r\n            il.Emit(OpCodes.Ldstr, function.FullName);\r\n\r\n            //\r\n            il.Emit(OpCodes.Call, Methods.ScriptContext.DeclareFunction);\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Emits call to <see cref=\"ScriptContext.DeclareLambda\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"info\">A method info.</param>\r\n\t\tinternal void EmitDeclareLamdaFunction(MethodInfo/*!*/ info)\r\n\t\t{\r\n\t\t\tDebug.Assert(info != null);\r\n\r\n\t\t\t// LOAD ScriptContext.DeclareLamda(<delegate>);\r\n\t\t\tEmitLoadScriptContext();\r\n\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldftn, info);\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.DeclareLambda);\r\n\t\t}\r\n\r\n\t\tinternal void EmitReferenceDereference(ref PhpTypeCode typeCode, bool wantRef)\r\n\t\t{\r\n\t\t\tif (wantRef)\r\n\t\t\t{\r\n\t\t\t\t// make reference:\r\n\t\t\t\tif (typeCode != PhpTypeCode.PhpReference)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitBoxing(typeCode);\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttypeCode = PhpTypeCode.PhpReference;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// dereference:\r\n\t\t\t\tif (typeCode == PhpTypeCode.PhpReference)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\t\ttypeCode = PhpTypeCode.Object;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emits load of <see cref=\"MethodInfo\"/> onto the top of evaluation stack.\r\n        /// </summary>\r\n        /// <param name=\"il\"></param>\r\n        /// <param name=\"mi\"></param>\r\n        internal static void EmitLoadMethodInfo(ILEmitter/*!*/il, MethodInfo/*!*/mi/*, DelegateBuilder dbuild*/)\r\n        {\r\n            if (mi == null)\r\n                throw new ArgumentNullException(\"mi\");\r\n\r\n            if (!mi.IsStatic)\r\n                throw new NotSupportedException();\r\n\r\n            // following code uses hack, where we can create delegate in \"compile time\", and then takes its MethodInfo property.\r\n            // new Func<...>( null, <mi> ).Method\r\n\r\n            //// construct the type\r\n            ////var miArgs = mi.GetParameters();    // THIS FAILS WHEN <mi> IS NOT BAKED YET\r\n            ////Type[] delegateArgs = new Type[1 + miArgs.Length];\r\n            ////delegateArgs[0] = mi.ReturnType;\r\n            ////for (int i = 0; i < miArgs.Length; i++) delegateArgs[i + 1] = miArgs[i].ParameterType;\r\n            //var delegateCtor = DelegateBuilder.GetDelegateCtor(dbuild.GetDelegateType(delegateArgs, il.GetNextUniqueIndex()));\r\n            var delegateCtor = DelegateBuilder.GetDelegateCtor(Types.Action[0]); // NOT NICE\r\n\r\n            //.ldnull\r\n            //.ldftn <mi>\r\n            //.newobj instance void Action::.ctor(object, native int)\r\n            //.call get_Method\r\n\r\n            il.Emit(OpCodes.Ldnull);\r\n            il.Emit(OpCodes.Ldftn, mi);\r\n            il.Emit(OpCodes.Newobj, delegateCtor);\r\n            il.Emit(OpCodes.Call, Properties.Delegate_Method.GetGetMethod());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emit call to <see cref=\"DynamicCode.Assert\"/> or <see cref=\"DynamicCode.Eval\"/>.\r\n        /// </summary>\r\n        internal PhpTypeCode EmitEval(EvalKinds kind, Expression/*!*/code, Text.Span span, QualifiedName? currentNamespace, Dictionary<string, QualifiedName> currentAliases)\r\n        {\r\n            Debug.Assert(code != null);\r\n\r\n            // LOAD DynamicCode.<Eval | Assert>(<code>, context, definedVariables, self, includer, source, line, column, evalId, naming)\r\n            if (kind == EvalKinds.Assert)\r\n            {\r\n                // an argument of the assert is boxed:\r\n                EmitBoxing(code.Emit(this));\r\n            }\r\n            else if (kind == EvalKinds.SyntheticEval)\r\n            {\r\n                Debug.Assert(code.HasValue());\r\n                Debug.Assert(code.GetValue() is string);\r\n\r\n                // an argument of the eval is converted to a string:\r\n                il.Emit(OpCodes.Ldstr, (string)code.GetValue());\r\n                il.Emit(OpCodes.Ldc_I4_1);\r\n            }\r\n            else\r\n            {\r\n                // an argument of the eval is converted to a string:\r\n                EmitConversion(code, PhpTypeCode.String);\r\n                il.Emit(OpCodes.Ldc_I4_0);\r\n            }\r\n\r\n            var position = new Text.TextPoint(this.SourceUnit.LineBreaks, span.Start);\r\n\r\n            EmitLoadScriptContext();\r\n            EmitLoadRTVariablesTable();\r\n            EmitLoadSelf();\r\n            EmitLoadClassContext();\r\n            EmitEvalInfoPass(position.Line, position.Column);\r\n            EmitNamingContext(currentNamespace, currentAliases, span.Start);\r\n\r\n            il.Emit(OpCodes.Call, (kind == EvalKinds.Assert) ? Methods.DynamicCode.Assert : Methods.DynamicCode.Eval);\r\n\r\n            return (kind == EvalKinds.Assert) ? PhpTypeCode.Boolean : PhpTypeCode.Object;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine if <see cref=\"NamingContext \"/> is needed for the current namespace and aliases.\r\n        /// </summary>\r\n        /// <param name=\"currentNamespace\"></param>\r\n        /// <param name=\"aliases\"></param>\r\n        /// <returns>True if current namespace is not global namespace or there are some aliases.</returns>\r\n        private static bool NeedsNamingContext(QualifiedName? currentNamespace, Dictionary<string, QualifiedName> aliases)\r\n        {\r\n            return\r\n                (currentNamespace.HasValue && currentNamespace.Value.Namespaces.Length > 0) ||\r\n                (aliases != null && aliases.Count > 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads (cached) instance of given state of <see cref=\"NamingContext\"/> onto the evaluation stack.\r\n        /// </summary>\r\n        internal void EmitNamingContext(QualifiedName? currentNamespace, Dictionary<string, QualifiedName> currentAliases, int position)\r\n        {\r\n            ILEmitter il = this.IL;\r\n\r\n            if (NeedsNamingContext(currentNamespace, currentAliases))\r\n            {\r\n                // private static NamingContext <id> = null;\r\n                string fname = (this.SourceUnit != null) ? this.SourceUnit.SourceFile.ToString() : string.Empty;\r\n                string id = String.Format(\"<namingContext>{0}${1}\", unchecked((uint)fname.GetHashCode()), position);\r\n\r\n                // create static field for static local index: static int <id>;\r\n                Debug.Assert(il.TypeBuilder != null, \"The method does not have declaring type! (global code in pure mode?)\");\r\n                var fld = il.TypeBuilder.DefineField(id, typeof(NamingContext), System.Reflection.FieldAttributes.Private | System.Reflection.FieldAttributes.Static);\r\n\r\n                // <id> ?? (<id> = NamingContext.<EmitNewNamingContext>)\r\n                Label end = il.DefineLabel();\r\n\r\n                il.Emit(OpCodes.Ldsfld, fld);\r\n                il.Emit(OpCodes.Dup);\r\n                il.Emit(OpCodes.Brtrue, end);\r\n                if (true)\r\n                {\r\n                    il.Emit(OpCodes.Pop);\r\n                    EmitNewNamingContext(il, currentNamespace, currentAliases);\r\n                    il.Emit(OpCodes.Dup);\r\n                    il.Emit(OpCodes.Stsfld, fld);\r\n                }\r\n\r\n                il.MarkLabel(end);\r\n            }\r\n            else\r\n            {\r\n                il.Emit(OpCodes.Ldnull);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emit instantiation and initialization of NamingContext. Leaves reference to new NamingContext on the top of evaluation stack.\r\n        /// </summary>\r\n        /// <param name=\"il\"></param>\r\n        /// <param name=\"currentNamespace\">Namespace to be passed as current namespace to the new instance of <see cref=\"NamingContext\"/>.</param>\r\n        /// <param name=\"aliases\">Aliases to be passed to the new instance of <see cref=\"NamingContext\"/>.</param>\r\n        internal static void EmitNewNamingContext(Emit.ILEmitter/*!*/il, QualifiedName? currentNamespace, Dictionary<string, QualifiedName> aliases)\r\n        {\r\n            if (!NeedsNamingContext(currentNamespace, aliases))\r\n            {\r\n                il.Emit(OpCodes.Ldnull);\r\n                return;\r\n            }\r\n\r\n            //\r\n            // new NamingContext( currentNamespace.NamespacePhpName, aliases.Count )\r\n\r\n            if (currentNamespace.HasValue && currentNamespace.Value.Namespaces.Length > 0)\r\n                il.Emit(OpCodes.Ldstr, currentNamespace.Value.NamespacePhpName);\r\n            else\r\n                il.Emit(OpCodes.Ldnull);\r\n\r\n            il.LdcI4((aliases != null) ? aliases.Count : 0);\r\n\r\n            il.Emit(OpCodes.Newobj, Constructors.NamingContext);\r\n\r\n            // tmp.AddAlias( aliases[i].Key, aliases[i].Value.NamespacePhpName\r\n            if (aliases != null)\r\n            {\r\n                foreach (var alias in aliases)\r\n                {\r\n                    il.Emit(OpCodes.Dup);                                   // the NamingContext instance\r\n                    il.Emit(OpCodes.Ldstr, alias.Key);                      // alias\r\n                    il.Emit(OpCodes.Ldstr, alias.Value.ToString());         // qualifiedName\r\n                    il.Emit(OpCodes.Call, Methods.NamingContext.AddAlias);  // AddAlias( <alias>, <qualifiedName> )\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures the object on top of the evaluation stack is writable,\r\n        /// and so not shared by more PHP variables.\r\n        /// </summary>\r\n        internal void EmitEnsureWritable(PhpTypeCode typeCode)\r\n        {\r\n            switch (typeCode)\r\n            {\r\n                case PhpTypeCode.Boolean:\r\n                case PhpTypeCode.Double:\r\n                case PhpTypeCode.Integer:\r\n                case PhpTypeCode.PhpCallable:\r\n                case PhpTypeCode.PhpResource:\r\n                case PhpTypeCode.PhpReference:\r\n                case PhpTypeCode.String:\r\n                case PhpTypeCode.Void:\r\n                case PhpTypeCode.LongInteger:\r\n                    // these types cannot be lazy copied for sure\r\n                    break;\r\n\r\n                default:\r\n                    // Operators.EnsureObjectIsWritable( <TOP> )\r\n                    this.IL.Emit(OpCodes.Dup);\r\n                    this.EmitBoxing(typeCode);\r\n                    this.IL.Emit(OpCodes.Call, new Action<object>(Operators.EnsureObjectIsWritable).Method);\r\n                    break;\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Array Keys and Operators\r\n\r\n\t\tinternal PhpTypeCode EmitArrayKey(ChainBuilder chain, Expression key)\r\n\t\t{\r\n\t\t\tPhpTypeCode result;\r\n\r\n\t\t\tif (key != null)\r\n\t\t\t{\r\n\t\t\t\tif (chain != null) chain.Create();\r\n\t\t\t\t\r\n                // convert the key into integer if necessary and possible in compile time\r\n                IntStringKey array_key;\r\n                if (key.HasValue() && Convert.ObjectToArrayKey(key.GetValue(), out array_key) && array_key.IsInteger)\r\n                {\r\n                    il.LdcI4(array_key.Integer);\r\n                    result = PhpTypeCode.Integer;\r\n                }\r\n                else\r\n                {\r\n                    // Emit index and box the result\r\n                    switch (result = key.Emit(this))\r\n                    {\r\n                        case PhpTypeCode.Integer:\r\n                            break;\r\n\r\n                        case PhpTypeCode.String:\r\n                            break;\r\n\r\n                        default:\r\n                            EmitBoxing(result);\r\n                            result = PhpTypeCode.Object;\r\n                            break;\r\n                    }\r\n                }\r\n\t\t\t\t\r\n\t\t\t\tif (chain != null) chain.End();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tresult = PhpTypeCode.Invalid;\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t\r\n\t\tprivate bool EmitExactStringKeyHash(PhpTypeCode keyTypeCode, Expression keyExpr)\r\n\t\t{\r\n\t\t\tif (keyExpr != null && keyTypeCode == PhpTypeCode.String && keyExpr.HasValue())\r\n\t\t\t{\r\n                string skey = (string)keyExpr.GetValue();\r\n\t\t\t\tIntStringKey array_key = Convert.StringToArrayKey(skey);\r\n\t\t\t\tif (array_key.IsString && skey == array_key.String) // skey was not converted to int\r\n\t\t\t\t{\r\n                    il.LdcI4(array_key.GetHashCode());  // == array_key.Integer == IntStringKey.StringKeyToArrayIndex(skey) // previously: skey.GetHashCode()\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tinternal void EmitGetArrayItem(PhpTypeCode keyTypeCode, Expression keyExpr, bool reference)\r\n\t\t{\r\n\t\t\tMethodInfo method;\r\n\t\t\tswitch (keyTypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\tmethod = (reference) ? Methods.PhpArray.GetArrayItemRef_Int32 : Methods.PhpArray.GetArrayItem_Int32;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\tif (reference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod = Methods.PhpArray.GetArrayItemRef_String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (EmitExactStringKeyHash(keyTypeCode, keyExpr))\r\n\t\t\t\t\t\t\tmethod = Methods.PhpArray.GetArrayItemExact_String;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tmethod = Methods.PhpArray.GetArrayItem_String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Object:\r\n\t\t\t\t\tmethod = (reference) ? Methods.PhpArray.GetArrayItemRef_Object : Methods.PhpArray.GetArrayItem_Object;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Invalid:\r\n\t\t\t\t\tDebug.Assert(reference);\r\n\t\t\t\t\tmethod = Methods.PhpArray.GetArrayItemRef;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n                    throw new ArgumentException();\r\n\t\t\t}\r\n\t\t\til.Emit(method.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, method);\r\n\t\t}\r\n\r\n\t\tinternal void EmitSetArrayItem(PhpTypeCode keyTypeCode, Expression keyExpr, bool reference, bool ctor)\r\n\t\t{\r\n\t\t\tMethodInfo method; \r\n\t\t\tswitch (keyTypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\tmethod = (reference) ? Methods.PhpArray.SetArrayItemRef_Int32 : Methods.PhpArray.SetArrayItem_Int32;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\tif (reference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod = Methods.PhpArray.SetArrayItemRef_String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (EmitExactStringKeyHash(keyTypeCode, keyExpr))\r\n\t\t\t\t\t\t\tmethod = Methods.PhpArray.SetArrayItemExact_String;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tmethod = Methods.PhpArray.SetArrayItem_String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Object:\r\n                    method = reference ? Methods.PhpArray.SetArrayItemRef_Object : Methods.PhpArray.SetArrayItem_Object;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase PhpTypeCode.Invalid:\r\n\t\t\t\t\tmethod = ctor ? Methods.PhpArray.AddToEnd_Object : Methods.PhpArray.SetArrayItem;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tdefault:\r\n                    throw new ArgumentException();\r\n\t\t\t}\r\n            il.Emit(method.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, method);\r\n\t\t}\r\n\r\n\t\tinternal void EmitGetItem(PhpTypeCode keyTypeCode, Expression keyExpr, bool reference)\r\n\t\t{\r\n\t\t\tMethodInfo method;\r\n\t\t\tswitch (keyTypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\tmethod = (reference) ? Methods.Operators.GetItemRef.Int32 : Methods.Operators.GetItem.Int32;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\r\n\t\t\t\t\tif (reference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod = Methods.Operators.GetItemRef.String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (EmitExactStringKeyHash(keyTypeCode, keyExpr))\r\n\t\t\t\t\t\t\tmethod = Methods.Operators.GetItemExact;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tmethod = Methods.Operators.GetItem.String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Object:\r\n\t\t\t\t\tmethod = (reference) ? Methods.Operators.GetItemRef.Object : Methods.Operators.GetItem.Object;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Invalid:\r\n\t\t\t\t\tDebug.Assert(reference);\r\n\t\t\t\t\tmethod = Methods.Operators.GetItemRef.Keyless;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n                    throw new ArgumentException();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\til.Emit(OpCodes.Call, method);\t\r\n\t\t}\r\n\r\n\t\tinternal void EmitSetItem(PhpTypeCode keyTypeCode, Expression keyExpr, bool reference)\r\n\t\t{\r\n\t\t\tMethodInfo method;\r\n\t\t\tswitch (keyTypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\tmethod = (reference) ? Methods.Operators.SetItemRef.Int32 : Methods.Operators.SetItem.Int32;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\tif (reference)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod = Methods.Operators.SetItemRef.String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\t\t\t\t\t\r\n\t\t\t\t\t\tif (EmitExactStringKeyHash(keyTypeCode, keyExpr))\r\n\t\t\t\t\t\t\tmethod = Methods.Operators.SetItemExact;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tmethod = Methods.Operators.SetItem.String;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Object:\r\n\t\t\t\t\tmethod = (reference) ? Methods.Operators.SetItemRef.Object : Methods.Operators.SetItem.Object;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Invalid:\r\n\t\t\t\t\tmethod = Methods.Operators.SetItem.Keyless;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n                    throw new ArgumentException();\r\n\t\t\t}\r\n\t\t\til.Emit(OpCodes.Call, method);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Operators\r\n\r\n        /// <summary>\r\n        /// Emits most efficient form of equality comparison operator.\r\n        /// </summary>\r\n        /// <param name=\"leftExprEmitter\"></param>\r\n        /// <param name=\"rightExprEmitter\"></param>\r\n        internal PhpTypeCode EmitCompareEq(Func<CodeGenerator, PhpTypeCode>/*!*/leftExprEmitter, Func<CodeGenerator, PhpTypeCode>/*!*/rightExprEmitter)\r\n        {\r\n            Debug.Assert(leftExprEmitter != null && rightExprEmitter != null);\r\n\r\n            this.EmitBoxing(leftExprEmitter(this));      // x = leftExpr\r\n            var right_type = rightExprEmitter(this);     // y = rightExpr\r\n\r\n            switch (right_type)\r\n            {\r\n                case PhpTypeCode.Integer:\r\n                    this.IL.Emit(OpCodes.Call, Methods.CompareEq_object_int);\r\n                    break;\r\n                case PhpTypeCode.String:\r\n                    this.IL.Emit(OpCodes.Call, Methods.CompareEq_object_string);\r\n                    break;\r\n                default:\r\n                    this.EmitBoxing(right_type);\r\n                    this.IL.Emit(OpCodes.Call, Methods.CompareEq_object_object);\r\n                    break;\r\n            }\r\n\r\n            return PhpTypeCode.Boolean;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emits \"!= 0\" operation. This method expects I4 valua on top of evaluation stack.\r\n        /// </summary>\r\n        internal void EmitLogicNegation()\r\n        {\r\n            il.Emit(OpCodes.Ldc_I4_0);\r\n            il.Emit(OpCodes.Ceq);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emits conversion to boolean.\r\n        /// </summary>\r\n        /// <param name=\"expr\">Expression to be converted.</param>\r\n        internal void EmitObjectToBoolean(Expression/*!*/expr)\r\n        {\r\n            EmitObjectToBoolean(expr, false);\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Emits conversion to boolean.\r\n        /// </summary>\r\n        /// <param name=\"expr\">Expression to be converted.</param>\r\n        /// <param name=\"negation\">Whether the result should be logic negation of original conversion.</param>\r\n        internal void EmitObjectToBoolean(Expression/*!*/expr, bool negation)\r\n        {\r\n            // <expr>\r\n            var typecode = expr.Emit(this);\r\n\r\n            //\r\n            switch (typecode)\r\n            {\r\n                case PhpTypeCode.Boolean:\r\n                    if (negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n\r\n                case PhpTypeCode.Integer:\r\n                    // <int> != 0\r\n                    this.EmitLogicNegation();\r\n                    if (!negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n\r\n                case PhpTypeCode.LongInteger:\r\n                    // <long> != 0\r\n                    il.Emit(OpCodes.Ldc_I4_0);\r\n                    il.Emit(OpCodes.Conv_I8);\r\n\t\t\t\t\til.Emit(OpCodes.Ceq);\r\n                    if (!negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n\r\n                case PhpTypeCode.Double:\r\n                    // <double> != 0.0\r\n                    il.Emit(OpCodes.Ldc_R8, 0.0);\r\n                    il.Emit(OpCodes.Ceq);\r\n                    if (!negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n\r\n                case PhpTypeCode.Void:\r\n                    if (negation)\r\n                        il.Emit(OpCodes.Ldc_I4_1);\r\n                    else\r\n                        il.Emit(OpCodes.Ldc_I4_0);\r\n                    break;\r\n\r\n                case PhpTypeCode.String:\r\n                    // StringToBoolean( <string> )\r\n                    IL.Emit(OpCodes.Call, Methods.Convert.StringToBoolean);\r\n                    if (negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n\r\n                default:\r\n                    // ObjectToBoolean( (object)<expr> )\r\n                    EmitBoxing(typecode);\r\n                    IL.Emit(OpCodes.Call, Methods.Convert.ObjectToBoolean);\r\n                    if (negation)\r\n                        this.EmitLogicNegation();\r\n                    break;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/CodeGenerator/Places.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2003-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region LazyLoadSCPlace\r\n\r\n\t/// <summary>\r\n\t/// Contains <see cref=\"PHP.Core.ScriptContext\"/> loading method along with its context.\r\n\t/// </summary>\r\n\tinternal sealed class LazyLoadSCPlace : IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Builder of the local variable in which the <see cref=\"PHP.Core.ScriptContext\"/> is cached.\r\n\t\t/// </summary>\r\n\t\tprivate LocalBuilder localBuilder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads current <see cref=\"PHP.Core.ScriptContext\"/> by calling\r\n\t\t/// <see cref=\"PHP.Core.ScriptContext.CurrentContext\"/> and remembers it in a local.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\"></param>\r\n\t\tpublic void EmitLoad(ILEmitter il)\r\n\t\t{\r\n\t\t\tif (localBuilder == null)\r\n\t\t\t{\r\n\t\t\t\tlocalBuilder = il.DeclareLocal(typeof(ScriptContext));\r\n\t\t\t\til.EmitCall(OpCodes.Call, Methods.ScriptContext.GetCurrentContext, null);\r\n\t\t\t\til.Stloc(localBuilder);\r\n\t\t\t}\r\n\t\t\til.Ldloc(localBuilder);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a type of the place.\r\n\t\t/// </summary>\r\n\t\tpublic Type PlaceType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn typeof(ScriptContext);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void EmitLoadAddress(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic bool HasAddress { get { return false; } }\r\n\r\n\t\tpublic void EmitStore(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region ExpressionPlace\r\n\r\n    /// <summary>\r\n    /// <see cref=\"IPlace\"/> representing an <see cref=\"Expression\"/>. Supports only loading onto the top of evaluation stack.\r\n    /// </summary>\r\n    internal sealed class ExpressionPlace : IPlace\r\n    {\r\n        private CodeGenerator/*!*/ codeGenerator;\r\n        private Expression/*!*/ expression;\r\n\r\n        public PhpTypeCode TypeCode { get { return typeCode; } }\r\n        private PhpTypeCode typeCode;\r\n\r\n        /// <summary>\r\n        /// Get the expression if given place represents ExpressionPlace.\r\n        /// </summary>\r\n        /// <param name=\"place\"></param>\r\n        /// <returns></returns>\r\n        public static Expression GetExpression(IPlace place)\r\n        {\r\n            if (place != null && place.GetType() == typeof(ExpressionPlace))\r\n                return ((ExpressionPlace)place).expression;\r\n            else\r\n                return null;\r\n        }\r\n\r\n        public ExpressionPlace(CodeGenerator/*!*/ codeGenerator, Expression/*!*/ expression)\r\n        {\r\n            this.codeGenerator = codeGenerator;\r\n            this.expression = expression;\r\n            this.typeCode = PhpTypeCode.Invalid;\r\n        }\r\n\r\n        #region IPlace Members\r\n\r\n        public void EmitLoad(ILEmitter/*!*/ il)\r\n        {\r\n            Debug.Assert(ReferenceEquals(il, codeGenerator.IL));\r\n            typeCode = expression.Emit(codeGenerator);\r\n        }\r\n\r\n        public void EmitStore(ILEmitter/*!*/ il)\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        public void EmitLoadAddress(ILEmitter/*!*/ il)\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        public bool HasAddress\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        public Type PlaceType\r\n        {\r\n            get { return (typeCode != PhpTypeCode.Invalid) ? PhpTypeCodeEnum.ToType(typeCode) : null; }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core/Compiler/CodeGenerator/Stacks.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2003-2006 Martin Maly, Ladislav Prosek, Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>Defines relevant location types.</summary>\r\n\tpublic enum LocationTypes { GlobalCode, FunctionDecl, TypeDecl, MethodDecl };\r\n\r\n\t/// <summary>\r\n\t/// Manages a stack of source code locations along with a user-defined context.\r\n\t/// </summary>\r\n\tinternal class LocationStack\r\n\t{\r\n\t\t#region Nested Class: Location\r\n\r\n\t\t/// <summary>\r\n\t\t/// Class of objects stored in the <see cref=\"stack\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected class Location\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Location type.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic LocationTypes Type;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// User-defined context associated with this stack element.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Context;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"Location\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"type\">A location type of the new <see cref=\"Location\"/>.</param>\r\n\t\t\t/// <param name=\"context\">A context of the new <see cref=\"Location\"/>.</param>\r\n\t\t\tpublic Location(LocationTypes type, object context)\r\n\t\t\t{\r\n\t\t\t\tthis.Type = type;\r\n\t\t\t\tthis.Context = context;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new empty <see cref=\"LocationStack\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic LocationStack()\r\n\t\t{\r\n\t\t\tstack = new Stack();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The underlying <see cref=\"Stack\"/> data structure.\r\n\t\t/// </summary>\r\n\t\tprotected Stack stack;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if the element atop the stack is marked with <see cref=\"LocationTypes.GlobalCode\"/>,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool InGlobalCode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count == 0) return false;\r\n\t\t\t\treturn ((Location)stack.Peek()).Type == LocationTypes.GlobalCode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if the element atop the stack is marked with <see cref=\"LocationTypes.FunctionDecl\"/>,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool InFunctionDecl\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count == 0) return false;\r\n\t\t\t\treturn ((Location)stack.Peek()).Type == LocationTypes.FunctionDecl;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if the element atop the stack is marked with <see cref=\"LocationTypes.TypeDecl\"/>,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool InClassDecl\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count == 0) return false;\r\n\t\t\t\treturn ((Location)stack.Peek()).Type == LocationTypes.TypeDecl;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if the element atop the stack is marked with <see cref=\"LocationTypes.MethodDecl\"/>,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool InMethodDecl\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count == 0) return false;\r\n\t\t\t\treturn ((Location)stack.Peek()).Type == LocationTypes.MethodDecl;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if the <see cref=\"stack\"/> is empty, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsEmpty\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn stack.Count == 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns one of the <see cref=\"LocationTypes\"/> of current stack top or <see cref=\"LocationTypes.GlobalCode\"/>\r\n\t\t/// if the stack is empty.\r\n\t\t/// </summary>\r\n\t\tpublic LocationTypes LocationType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stack.Count == 0) return LocationTypes.GlobalCode;\r\n\t\t\t\treturn ((Location)stack.Peek()).Type;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Push, Pop, Peek\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pushes a new <see cref=\"Location\"/> to the stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">A location type of the new <see cref=\"Location\"/>.</param>\r\n\t\t/// <param name=\"context\">A context of the new <see cref=\"Location\"/>.</param>\r\n\t\tpublic void Push(LocationTypes type, object context)\r\n\t\t{\r\n\t\t\tstack.Push(new Location(type, context));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pops a location context from the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The <see cref=\"Location.Context\"/> of the element atop the stack.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic object Pop()\r\n\t\t{\r\n\t\t\treturn ((Location)stack.Pop()).Context;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a location context at the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The <see cref=\"Location.Context\"/> of the element atop the stack.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic object Peek()\r\n\t\t{\r\n\t\t\treturn ((Location)stack.Peek()).Context;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Extends the <see cref=\"LocationStack\"/> with functionality that is specific for the code generator.\r\n\t/// </summary>\r\n\tinternal class CompilerLocationStack : LocationStack\r\n\t{\r\n\t\t#region Nested Classes: GlobalCodeContext, ClassDeclContext, MethodDeclContext, FunctionDeclContext\r\n\r\n\t\t/// <summary>\r\n\t\t/// Routine declaration context. A routine may be either global code, user function, or user method.\r\n\t\t/// </summary>\r\n\t\tpublic abstract class ProcedureDeclContext\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// IL emitter.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic ILEmitter IL;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Place storing the current script context.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic IPlace ScriptContextPlace;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Place where run-time local variables table is stored.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic IPlace RTVariablesTablePlace;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Place where type desc is stored.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic IPlace ClassContextPlace;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Place where self object is stored.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic IPlace SelfPlace;\r\n\r\n            /// <summary>\r\n            /// Place where calling type is stored.\r\n            /// </summary>\r\n            public IPlace LateStaticBindTypePlace;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Place where result of the routine is stored when returning value from the routine.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic IPlace ResultPlace;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Label where return statements branch to.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Label ReturnLabel;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Table of local compile-time variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic VariablesTable CurrentVariablesTable;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Table of local compile-time variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Dictionary<VariableName, Statement> CurrentLabels;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether local variables are optimized.\r\n\t\t\t/// <B>false</B> for global code.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool OptimizedLocals;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the routine returns by reference.\r\n\t\t\t/// <B>false</B> for global code.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool ReturnsPhpReference;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Number of exception nested blocks (both try and catch blocks). \r\n\t\t\t/// </summary>\r\n\t\t\tpublic int ExceptionBlockNestingLevel;\r\n\r\n            /// <summary>\r\n            /// The PhpRoutine of the current location.\r\n            /// Used for obtaining indexes of type arguments (generic functions/methods).\r\n            /// Can be null in case of lambda function.\r\n            /// </summary>\r\n            public PhpRoutine PhpRoutine;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global code context.\r\n\t\t/// </summary>\r\n\t\tpublic sealed class GlobalCodeContext : ProcedureDeclContext\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Class declaration context.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Contains information that need to be kept when generating a class declaration.\r\n\t\t/// </remarks>\r\n\t\tpublic sealed class TypeDeclContext\r\n\t\t{\r\n\t\t\tpublic PhpType Type;\r\n\t\t\tpublic IPlace TypeContextPlace;\r\n\r\n            /// <summary>\r\n            /// CallSite manager and emitter.\r\n            /// </summary>\r\n            public CallSitesBuilder CallSites;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GetUserEntryPoint declaration context.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Contains information that need to be kept when generating a method.\r\n\t\t/// </remarks>\r\n\t\tpublic sealed class MethodDeclContext : ProcedureDeclContext\r\n\t\t{\r\n\t\t\tpublic PhpType Type;\r\n\t\t\tpublic PhpMethod Method;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Function declaration context.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Contains information that need to be kept when generating a function.\r\n\t\t/// </remarks>\r\n\t\tpublic sealed class FunctionDeclContext : ProcedureDeclContext\r\n\t\t{\r\n\t\t\tpublic QualifiedName Name;\r\n\r\n            /// <summary>\r\n            /// CallSite manager and emitter.\r\n            /// </summary>\r\n            public CallSitesBuilder CallSites;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Push\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pushes a <see cref=\"TypeDeclContext\"/> to the stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\tpublic void PushTypeDecl(TypeDeclContext context)\r\n\t\t{\r\n\t\t\tPush(LocationTypes.TypeDecl, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pushes a <see cref=\"GlobalCodeContext\"/> to the stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\tpublic void PushGlobalCode(GlobalCodeContext context)\r\n\t\t{\r\n\t\t\tPush(LocationTypes.GlobalCode, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pushes a <see cref=\"MethodDeclContext\"/> to the stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\tpublic void PushMethodDecl(MethodDeclContext context)\r\n\t\t{\r\n\t\t\tPush(LocationTypes.MethodDecl, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pushes a <see cref=\"FunctionDeclContext\"/> to the stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\tpublic void PushFunctionDecl(FunctionDeclContext context)\r\n\t\t{\r\n\t\t\tPush(LocationTypes.FunctionDecl, context);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Peek\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a <see cref=\"TypeDeclContext\"/> at the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The context.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic TypeDeclContext PeekTypeDecl()\r\n\t\t{\r\n\t\t\tDebug.Assert(InClassDecl);\r\n\t\t\treturn (TypeDeclContext)Peek();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a <see cref=\"GlobalCodeContext\"/> at the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The context.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic GlobalCodeContext PeekGlobalCode()\r\n\t\t{\r\n\t\t\tDebug.Assert(InGlobalCode);\r\n\t\t\treturn (GlobalCodeContext)Peek();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a <see cref=\"MethodDeclContext\"/> at the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The context.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic MethodDeclContext PeekMethodDecl()\r\n\t\t{\r\n\t\t\tDebug.Assert(InMethodDecl);\r\n\t\t\treturn (MethodDeclContext)Peek();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a <see cref=\"FunctionDeclContext\"/> at the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The context.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The stack is empty.</exception>\r\n\t\tpublic FunctionDeclContext PeekFunctionDecl()\r\n\t\t{\r\n\t\t\tDebug.Assert(InFunctionDecl);\r\n\t\t\treturn (FunctionDeclContext)Peek();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// A stack used by <B>continue</B> and <B>break</B> statements code generation to track \r\n\t/// loops and switch statements. Inner class of <see cref=\"CodeGenerator\"/>.\r\n\t/// </summary>\r\n\tinternal class BranchingStack\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the stack associated with a specified generator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"codeGenerator\">The code generator.</param>\r\n\t\tpublic BranchingStack(CodeGenerator codeGenerator)\r\n\t\t{\r\n\t\t\tthis.codeGenerator = codeGenerator;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Owning generator.\r\n\t\t/// </summary>\r\n\t\tprivate CodeGenerator codeGenerator;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Items of the stack. We need to enumerate the stack in well defined way, so\r\n\t\t/// we cannot use <see cref=\"Stack\"/> class as it didn't ensure the order.\r\n\t\t/// </summary>\r\n\t\tprivate ArrayList stack = new ArrayList(); // GENERICS <StackItem>\r\n\r\n\t\t#region Nested Class: StackItem\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents an element of stack collection. Holds <see cref=\"System.Reflection.Emit.Label\"/> items\r\n\t\t/// to manage the code generation of PHP <B>break</B> and <B>continue</B> statements inside loops and switch statement.\r\n\t\t/// </summary>\r\n\t\tprivate class StackItem\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// A target label to which the control is transfered by <B>continue</B> statement.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Label ConditionLabel { get { return this.conditionLabel; } }\r\n\t\t\tprivate Label conditionLabel; // mark the condition (used for continue)\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets a target label to which the control is transfered by <B>break</B> statement.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Label ExitLabel { get { return this.exitLabel; } }\r\n\t\t\tprivate Label exitLabel;  // mark the end of loop (used for break)\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A level of exception block nesting where the loop/switch is located.\r\n\t\t\t/// When enitting <c>break</c> or <c>continue</c> jump, we need to know\r\n\t\t\t/// the nesting level of the branch target which is either begin or \r\n\t\t\t/// end of the loop or end of the switch.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int ExceptionBlockNestingLevel { get { return exceptionBlockNestingLevel; } }\r\n\t\t\tprivate int exceptionBlockNestingLevel;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Initializes a new instance of <see cref=\"StackItem\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"conditionLabel\">\r\n\t\t\t/// The target <see cref=\"Label\"/> for <B>continue</B> statement code generation.\r\n\t\t\t/// </param>\r\n\t\t\t/// <param name=\"exitLabel\">\r\n\t\t\t/// The target <see cref=\"Label\"/> for <B>break</B> statement code generation.\r\n\t\t\t/// </param>\r\n\t\t\t/// <param name=\"exceptionBlockNestingLevel\">\r\n\t\t\t/// Level of exception block nesting.\r\n\t\t\t/// </param>\r\n\t\t\tpublic StackItem(Label conditionLabel, Label exitLabel, int exceptionBlockNestingLevel)\r\n\t\t\t{\r\n\t\t\t\tthis.conditionLabel = conditionLabel;\r\n\t\t\t\tthis.exitLabel = exitLabel;\r\n\t\t\t\tthis.exceptionBlockNestingLevel = exceptionBlockNestingLevel;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region BeginLoop, EndLoop\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins a new scope for loop (<B>for</B> and <B>while</B>) and switch statement code generation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"conditionLabel\">\r\n\t\t/// The target <see cref=\"Label\"/> for <B>continue</B> statement code generation.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"exitLabel\">\r\n\t\t/// The target <see cref=\"Label\"/> for <B>break</B> statement code generation.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"exceptionBlockNestingLevel\">\r\n\t\t/// Level of exception block nesting.\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// This function should be called once at the beginning of each <B>for</B>, <B>while</B> or \r\n\t\t/// <B>switch</B> statement. It adds a new <see cref=\"StackItem\"/> item to the stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void BeginLoop(Label conditionLabel, Label exitLabel, int exceptionBlockNestingLevel)\r\n\t\t{\r\n\t\t\tstack.Add(new StackItem(conditionLabel, exitLabel, exceptionBlockNestingLevel));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends a scope for loop (<B>for</B> and <B>while</B>) and switch statement code generation.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This function should be called once at the end of each <B>for</B>, <B>while</B> \r\n\t\t/// or <B>switch</B> statement. \r\n\t\t/// </remarks>\r\n\t\tpublic void EndLoop()\r\n\t\t{\r\n\t\t\tDebug.Assert(stack.Count > 0);\r\n\r\n\t\t\t// Remove last item\r\n\t\t\tstack.RemoveAt(stack.Count - 1);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitBreak, EmitBreakRuntime\r\n\r\n\t\tprivate void EmitBranch(Label target, int targetExceptionLevel)\r\n\t\t{\r\n\t\t\tif (codeGenerator.ExceptionBlockNestingLevel != targetExceptionLevel)\r\n\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Leave, target);\r\n\t\t\telse\r\n\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Br, target);\r\n\t\t}\r\n\r\n\t\tprivate void EmitBranchToExit(StackItem item)\r\n\t\t{\r\n\t\t\tEmitBranch(item.ExitLabel, item.ExceptionBlockNestingLevel);\r\n\t\t}\r\n\r\n\t\tprivate void EmitBranchToCondition(StackItem item)\r\n\t\t{\r\n\t\t\tEmitBranch(item.ConditionLabel, item.ExceptionBlockNestingLevel);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for parametherless <B>break</B> statement.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This function is used to generate code for <B>break;</B> statement.</remarks>\r\n\t\tpublic void EmitBreak()\r\n\t\t{\r\n\t\t\tDebug.Assert(stack.Count > 0);\r\n\r\n\t\t\t// get the top item\r\n\t\t\tStackItem item = (StackItem)stack[stack.Count - 1];\r\n\r\n\t\t\tDebug.Assert(item != null);\r\n\r\n\t\t\tEmitBranchToExit(item);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for <B>break</B> statement having one <see cref=\"Literal\"/> parameter.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitBreak(int loopsToSkip)\r\n\t\t{\r\n\t\t\tif (loopsToSkip == 0)\r\n\t\t\t\tloopsToSkip = 1;\r\n\r\n\t\t\tDebug.Assert(stack.Count >= loopsToSkip);\r\n\r\n\t\t\t// Get the item to whitch we want to jump\r\n\t\t\tStackItem item = (StackItem)stack[stack.Count - loopsToSkip];\r\n\t\t\tDebug.Assert(item != null);\r\n\r\n\t\t\tEmitBranchToExit(item);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for <B>break</B> statement \r\n\t\t/// having parameter that cannot be evaluated at compile time.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This function is used to generate code for <B>break v;</B> where <i>v</i> is a variable.</remarks>\r\n\t\tpublic void EmitBreakRuntime()\r\n\t\t{\r\n\t\t\tint i;\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\tLabel[] jumpTable = new Label[stack.Count + 1];\r\n\t\t\tLabel exitLabel = il.DefineLabel();\r\n\r\n\t\t\tDebug.Assert(stack.Count != 0);\r\n\r\n\t\t\tfor (i = 0; i <= stack.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tjumpTable[i] = il.DefineLabel();\r\n\t\t\t}\r\n\r\n\t\t\t// The value according to we switch is already present on the evaluation stack\r\n\t\t\tLocalBuilder break_level_count = il.DeclareLocal(typeof(Int32));\r\n\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\til.Stloc(break_level_count);\r\n\t\t\til.Emit(OpCodes.Switch, jumpTable);\r\n\r\n\t\t\t// Default case\r\n\t\t\til.Ldloc(break_level_count);\r\n\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.InvalidBreakLevelCount);\r\n\t\t\til.Emit(OpCodes.Br, exitLabel);\r\n\r\n\t\t\til.MarkLabel(jumpTable[0]);\r\n\t\t\tEmitBranchToExit((StackItem)stack[stack.Count - 1]);\r\n\r\n\t\t\tfor (i = 1; i <= stack.Count; i++)\r\n\t\t\t{\r\n\t\t\t\til.MarkLabel(jumpTable[i]);\r\n\t\t\t\tEmitBranchToExit((StackItem)stack[stack.Count - i]);\r\n\t\t\t}\r\n\r\n\t\t\til.MarkLabel(exitLabel);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitContinue, EmitContinueRuntime\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for parametherless <B>continue</B> statement.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This function is used to generate code for <B>continue;</B> statement.</remarks>\r\n\t\tpublic void EmitContinue()\r\n\t\t{\r\n\t\t\tDebug.Assert(stack.Count != 0);\r\n\r\n\t\t\t// Get the top item\r\n\t\t\tStackItem item = (StackItem)stack[stack.Count - 1];\r\n\r\n\t\t\tDebug.Assert(item != null);\r\n\r\n\t\t\tEmitBranchToCondition(item);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for <B>continue</B> statement\r\n\t\t/// having one <see cref=\"Literal\"/> parameter.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitContinue(int loopsToSkip)\r\n\t\t{\r\n\t\t\tif (loopsToSkip == 0)\r\n\t\t\t\tloopsToSkip = 1;\r\n\r\n\t\t\tDebug.Assert(stack.Count >= loopsToSkip);\r\n\r\n\t\t\t// Get the item to whitch we want to jump\r\n\t\t\tStackItem item = (StackItem)stack[stack.Count - loopsToSkip];\r\n\r\n\t\t\tDebug.Assert(item != null);\r\n\r\n\t\t\tEmitBranchToCondition(item);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits IL instructions that transfer the control to the target label for <B>continue</B> statement \r\n\t\t/// having parameter that cannot be evaluated at compile time.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This function is used to generate code for <B>continue v;</B> where <i>v</i> is a variable.</remarks>\r\n\t\tpublic void EmitContinueRuntime()\r\n\t\t{\r\n\t\t\tint i;\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\tLabel[] jumpTable = new Label[stack.Count + 1];\r\n\t\t\tLabel exitLabel = il.DefineLabel();\r\n\r\n\t\t\tDebug.Assert(stack.Count != 0);\r\n\r\n\t\t\tfor (i = 0; i <= stack.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tjumpTable[i] = il.DefineLabel();\r\n\t\t\t}\r\n\r\n\t\t\t// The value accotding to we switch is already present at IL stack\r\n\t\t\tLocalBuilder continue_level_count = il.DeclareLocal(typeof(Int32));\r\n\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\til.Stloc(continue_level_count);\r\n\t\t\til.Emit(OpCodes.Switch, jumpTable);\r\n\r\n\t\t\t// Default case\r\n\t\t\til.Ldloc(continue_level_count);\r\n\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.InvalidBreakLevelCount);\r\n\t\t\til.Emit(OpCodes.Br, exitLabel);\r\n\t\t\tEmitBranchToCondition((StackItem)stack[stack.Count - 1]);\r\n\t\t\til.MarkLabel(jumpTable[0]);\r\n\r\n\t\t\tfor (i = 1; i <= stack.Count; i++)\r\n\t\t\t{\r\n\t\t\t\til.MarkLabel(jumpTable[i]);\r\n\t\t\t\tEmitBranchToCondition((StackItem)stack[stack.Count - i]);\r\n\t\t\t}\r\n\r\n\t\t\til.MarkLabel(exitLabel);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\t\r\n"
  },
  {
    "path": "Source/Core/Compiler/Managers.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections.Generic;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Resources;\r\nusing System.Configuration.Assemblies;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Manager for a single script compiler.\r\n\t/// </summary>\r\n\tinternal sealed class ApplicationCompilerManager : ICompilerManager\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\tprivate bool successful;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assembly builder.\r\n\t\t/// </summary>\r\n\t\tpublic PhpAssemblyBuilder/*!*/ AssemblyBuilder { get { return assemblyBuilder; } }\r\n\t\tprivate PhpAssemblyBuilder/*!*/ assemblyBuilder;\r\n\r\n        private ApplicationContext applicationContext;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of the manager.\r\n\t\t/// </summary>\r\n\t\tinternal ApplicationCompilerManager(ApplicationContext applicationContext, PhpAssemblyBuilder/*!*/ assemblyBuilder)\r\n\t\t{\r\n\t\t\tDebug.Assert(assemblyBuilder != null);\r\n            Debug.Assert(applicationContext != null);\r\n\r\n\t\t\tthis.successful = true;\r\n\t\t\tthis.assemblyBuilder = assemblyBuilder;\r\n            this.applicationContext = applicationContext;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICompilerManager Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns compiled module if exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <param name=\"ctx\">A compilation context.</param>\r\n\t\t/// <returns>The <see cref=\"PhpModule\"/> or a <B>null</B> reference.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Checks whether a module associated with a <paramref name=\"sourceFile\"/> has already been compiled.\r\n\t\t/// If so returns the respective <see cref=\"PhpModule\"/>. Otherwise a <B>null</B> reference is returned.\r\n\t\t/// Does no locking since application compiler is thread unsafe.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpModule LockForCompiling(PhpSourceFile/*!*/ sourceFile, CompilationContext/*!*/ ctx)\r\n\t\t{\r\n            // take a look into script library first\r\n            if (applicationContext.ScriptLibraryDatabase.ContainsScript(sourceFile.FullPath))\r\n            {\r\n                return applicationContext.ScriptLibraryDatabase.GetScriptModule(sourceFile.FullPath);\r\n            }\r\n\r\n\t\t\treturn assemblyBuilder.Assembly.GetModule(sourceFile);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a new module to application's assembly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"compiledUnit\">Unit being compiled.</param>\r\n\t\t/// <param name=\"ctx\">A compilation context.</param>\r\n\t\t/// <returns>The builder where compiler should emit the resulting code.</returns>\r\n\t\tpublic IPhpModuleBuilder/*!*/ DefineModuleBuilder(CompilationUnitBase/*!*/ compiledUnit, CompilationContext ctx)\r\n\t\t{\r\n\t\t\treturn assemblyBuilder.DefineModule(compiledUnit);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ignored. All modules are stored in a single assembly which is persisted in <see cref=\"Finish\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic void Persist(CompilationUnitBase/*!*/ compiledUnit, CompilationContext/*!*/ ctx)\r\n\t\t{\r\n\t\t\t// nop //\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Remembers whether compilation has been successful.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <param name=\"successful\">Whether compilation was successful.</param>\r\n\t\t/// <param name=\"ctx\">A compilation context.</param>\r\n\t\tpublic void UnlockForCompiling(PhpSourceFile/*!*/ sourceFile, bool successful, CompilationContext/*!*/ ctx)\r\n\t\t{\r\n\t\t\tthis.successful &= successful;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Triggered by the compiler on events such are start of compilation, end of compilation etc.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">A source path to a script being processed.</param>\r\n\t\t/// <param name=\"ctx\">A compilation context.</param>\r\n\t\tpublic void Info(PhpSourceFile/*!*/ sourceFile, CompilationContext/*!*/ ctx)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(sourceFile.RelativePath);\r\n\t\t}\r\n\r\n\t\tpublic void Finish(bool successful)\r\n\t\t{\r\n\t\t\tthis.successful &= successful;\r\n\r\n\t\t\tif (this.successful)\r\n\t\t\t{\r\n\t\t\t\t// TODO: redirect \r\n\t\t\t\tConsole.WriteLine(CoreResources.GetString(\"generating_assembly\"));\r\n\t\t\t\tassemblyBuilder.Save();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/Compiler/Managers.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections.Generic;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Resources;\r\nusing System.Configuration.Assemblies;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region CompilationContext\r\n\r\n\tpublic class CompilationContext\r\n\t{\r\n        public ApplicationContext ApplicationContext { get { return applicationContext; } }\r\n        protected readonly ApplicationContext applicationContext;\r\n\r\n\t\tpublic ICompilerManager/*!*/ Manager { get { return manager; } }\r\n\t\tprotected readonly ICompilerManager/*!*/ manager;\r\n\r\n\t\tpublic CompilerConfiguration/*!*/ Config { get { return config; } }\r\n\t\tprotected readonly CompilerConfiguration/*!*/ config;\r\n\r\n\t\tpublic string/*!*/ WorkingDirectory { get { return workingDirectory; } }\r\n\t\tprivate readonly string/*!*/ workingDirectory;\r\n\r\n\t\tpublic ErrorSink/*!*/ Errors { get { return errors; } }\r\n\t\tprivate readonly ErrorSink/*!*/ errors;\r\n\r\n        /// <summary>\r\n        /// Resulting assembly will be only saved to the file system. It won't be loaded or reflected.\r\n        /// This disallows static inclusions, but allows to recompile scripts while debugging.\r\n        /// </summary>\r\n        /// <remarks><see cref=\"AssemblyBuilder\"/> can be then created with <see cref=\"AssemblyBuilderAccess.Save\"/> parameter only.</remarks>\r\n        public virtual bool SaveOnlyAssembly { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a compilation context.\r\n\t\t/// </summary>\r\n        /// <param name=\"applicationContext\">Application context.</param>\r\n\t\t/// <param name=\"manager\">Manager.</param>\r\n\t\t/// <param name=\"config\">Configuration.</param>\r\n\t\t/// <param name=\"errorSink\">Error sink.</param>\r\n\t\t/// <param name=\"workingDirectory\">Working directory.</param>\r\n        internal CompilationContext(ApplicationContext/*!*/ applicationContext, ICompilerManager manager, CompilerConfiguration/*!*/ config, ErrorSink/*!*/ errorSink,\r\n\t\t\tstring/*!*/ workingDirectory)\r\n\t\t{\r\n            Debug.Assert(applicationContext != null);\r\n\t\t\tDebug.Assert(config != null && workingDirectory != null);\r\n\r\n            this.applicationContext = applicationContext;\r\n\t\t\tthis.manager = manager;\r\n\t\t\tthis.config = config;\r\n\t\t\tthis.errors = errorSink;\r\n\t\t\tthis.workingDirectory = workingDirectory;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ICompilerManager\r\n\r\n\t/// <summary>\r\n\t/// Manages compiler inputs (maps source paths of scripts to modules) and outputs (creates assemblies and modules\r\n\t/// using compiled code and metadata).\r\n\t/// </summary>\r\n\tpublic interface ICompilerManager\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Notifies the CompilerManager that this Compiler is going to compile the assembly, \r\n\t\t/// so other Compilers shouldn't do it.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <param name=\"context\">The current compilation context.</param>\r\n\t\t/// <returns>\r\n\t\t/// Either a loaded module which should be treated as a result of compilation of <paramref name=\"sourceFile\"/>\r\n\t\t/// or a <B>null</B> reference if no such assembly exists. \r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Causes that the next calling LockForCompiling on this assembly \r\n\t\t/// will suspend the calling Compiler until the compilation of the assembly is done\r\n\t\t/// (UnlockForCompiling is called).\r\n\t\t/// </remarks>\r\n\t\tPhpModule LockForCompiling(PhpSourceFile/*!*/ sourceFile, CompilationContext/*!*/ context);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notifies the CompilerManager that the assembly is no longer being compiled.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file to unlock.</param>\r\n\t\t/// <param name=\"successful\">Whether the assembly has been compiled successfuly.</param>\r\n\t\t/// <param name=\"context\">The current compilation context.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Causes that the next calling <see cref=\"LockForCompiling\"/> (or calling that has been suspend)\r\n\t\t/// on this assembly will imediately return the <see cref=\"ScriptModule\"/> just built\r\n\t\t/// (if success was true) or null (if succes was false). \r\n\t\t/// </remarks>\r\n\t\tvoid UnlockForCompiling(PhpSourceFile/*!*/ sourceFile, bool successful, CompilationContext/*!*/ context);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a dynamic module builder prepared to be filled with emitted code and returns its builder.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"compiledUnit\">Unit being compiled.</param>\r\n\t\t/// <param name=\"context\">The current compilation context.</param>\r\n\t\t/// <returns>The builder.</returns>\r\n\t\tIPhpModuleBuilder DefineModuleBuilder(CompilationUnitBase/*!*/ compiledUnit, CompilationContext/*!*/ context);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Persists the compiled unit (if applicable).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"compiledUnit\">Compilation unit to be persisted.</param>\r\n\t\t/// <param name=\"context\">The current compilation context.</param>\r\n\t\tvoid Persist(CompilationUnitBase/*!*/ compiledUnit, CompilationContext/*!*/ context);\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Informs inplementor about specific actions being performed during compilation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <param name=\"context\">The current compilation context.</param>\r\n\t\tvoid Info(PhpSourceFile/*!*/ sourceFile, CompilationContext/*!*/ context);\r\n\r\n\t\tvoid Finish(bool success);\r\n\t}\r\n\r\n\t#endregion\r\n}"
  },
  {
    "path": "Source/Core/Compiler/PhpTypeCode.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// Type codes of Phalanger special variables.\r\n    /// </summary>\r\n    public enum PhpTypeCode : byte\r\n    {\r\n        /// <summary>The type code of the <see cref=\"string\"/> type.</summary>\r\n        String,\r\n        /// <summary>The type code of the <see cref=\"int\"/> type.</summary>\r\n        Integer,\r\n        /// <summary>The type code of the <see cref=\"long\"/> type.</summary>\r\n        LongInteger,\r\n        /// <summary>The type code of the <see cref=\"bool\"/> type.</summary>\r\n        Boolean,\r\n        /// <summary>The type code of the <see cref=\"double\"/> type.</summary>\r\n        Double,\r\n\r\n        /// <summary>The type code of the <see cref=\"object\"/> type and of a <B>null</B> reference.</summary>\r\n        Object,\r\n        /// <summary>The type code of the <see cref=\"object\"/>&amp; type.</summary>\r\n        ObjectAddress,\r\n\r\n        /// <summary>The type code of the <see cref=\"PHP.Core.PhpReference\"/> type.</summary>\r\n        PhpReference,\r\n        /// <summary>The type code of the types assignable to <see cref=\"PHP.Core.PhpArray\"/> type.</summary>\r\n        PhpArray,\r\n        /// <summary>The type code of the types assignable to <see cref=\"PHP.Core.Reflection.DObject\"/> type.</summary>\r\n        DObject,\r\n        /// <summary>The type code of the types assignable to <see cref=\"PHP.Core.PhpResource\"/> type.</summary>\r\n        PhpResource,\r\n        /// <summary>The type code of the <see cref=\"PHP.Core.PhpBytes\"/> type.</summary>\r\n        PhpBytes,\r\n        /// <summary>The type code of the <see cref=\"PHP.Core.PhpString\"/> type.</summary>\r\n        PhpString,\r\n        /// <summary>The type code of the <see cref=\"PHP.Core.PhpRuntimeChain\"/> type.</summary>\r\n        PhpRuntimeChain,\r\n\r\n        /// <summary>The type code of a callable PHP object. Used as a type hint only.</summary>\r\n        PhpCallable,\r\n\r\n        /// <summary>The type code of the types which are not PHP.NET ones.</summary>\r\n        Invalid,\r\n        /// <summary>The type code of the <see cref=\"System.Void\"/> type.</summary>\r\n        Void,\r\n        /// <summary>An unknown type. Means the type cannot or shouldn't be determined.</summary>\r\n        Unknown\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/Statistics.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt,\r\n which can be found in the root of the Phalanger distribution. By using this software\r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n\r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\n\r\nnamespace PHP.Core\r\n{\r\n\tpublic sealed partial class Statistics\r\n\t{\r\n\t\tprivate static DateTime start;\r\n\t\tprivate static TimeSpan duration;\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal static void CompilationStarted()\r\n\t\t{\r\n\t\t\tstart = DateTime.Now;\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal static void CompilationEnd()\r\n\t\t{\r\n\t\t\tduration = DateTime.Now - start;\r\n\t\t}\r\n\r\n\t\t#region AST\r\n\r\n\t\tinternal struct AST\r\n\t\t{\r\n            [ThreadStatic]\r\n\t\t\tprivate static Dictionary<string, int> libraryCalls;\r\n            [ThreadStatic]\r\n            private static Dictionary<QualifiedName, int> unknownCalls;\r\n            [ThreadStatic]\r\n            private static Dictionary<string, int> nodes;\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void AddLibraryFunctionCall(string name, int paramCount)\r\n\t\t\t{\r\n\t\t\t\tif (libraryCalls == null) libraryCalls = new Dictionary<string, int>();\r\n\r\n\t\t\t\tCollectionUtils.IncrementValue(libraryCalls, name + ';' + paramCount, 1);\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void AddUnknownFunctionCall(QualifiedName name)\r\n\t\t\t{\r\n\t\t\t\tif (unknownCalls == null) unknownCalls = new Dictionary<QualifiedName, int>();\r\n\r\n\t\t\t\tCollectionUtils.IncrementValue(unknownCalls, name, 1);\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void AddNode(string name)\r\n\t\t\t{\r\n\t\t\t\tif (nodes == null) nodes = new Dictionary<string, int>();\r\n\t\t\t\tCollectionUtils.IncrementValue(nodes, name, 1);\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void DumpBasic(TextWriter output)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"AST: LibraryFunctionCalls = {0}, UnknownFunctionCalls = {1}\",\r\n\t\t\t\t  (libraryCalls != null) ? libraryCalls.Count : 0,\r\n\t\t\t\t  (unknownCalls != null) ? unknownCalls.Count : 0);\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void DumpLibraryFunctionCalls(TextWriter output)\r\n\t\t\t{\r\n\t\t\t\tif (libraryCalls == null) return;\r\n\r\n\t\t\t\tstring[] keys = new string[libraryCalls.Count];\r\n\t\t\t\tint[] values = new int[libraryCalls.Count];\r\n\r\n\t\t\t\tlibraryCalls.Keys.CopyTo(keys, 0);\r\n\t\t\t\tlibraryCalls.Values.CopyTo(values, 0);\r\n\r\n\t\t\t\t//TODO:Array.Sort(values, keys);\r\n\r\n\t\t\t\toutput.WriteLine(\"name;params;count\");\r\n\t\t\t\tfor (int i = keys.Length - 1; i >= 0; i--)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.WriteLine(keys[i] + \";\" + values[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void DumpUnknownFunctionCalls(TextWriter output)\r\n\t\t\t{\r\n\t\t\t\tif (unknownCalls == null) return;\r\n\r\n\t\t\t\tQualifiedName[] names = new QualifiedName[unknownCalls.Count];\r\n\t\t\t\tunknownCalls.Keys.CopyTo(names, 0);\r\n\r\n\t\t\t\t//TODO:Array.Sort(names);\r\n\r\n\t\t\t\tfor (int i = 0; i < names.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.WriteLine(names[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void DumpNodes(TextWriter output)\r\n\t\t\t{\r\n\t\t\t\tif (nodes == null) return;\r\n\r\n\t\t\t\tstring[] keys = new string[nodes.Count];\r\n\t\t\t\tint[] values = new int[nodes.Count];\r\n\r\n\t\t\t\tnodes.Keys.CopyTo(keys, 0);\r\n\t\t\t\tnodes.Values.CopyTo(values, 0);\r\n\r\n\t\t\t\t//TODO:Array.Sort(values,keys);\r\n\r\n\t\t\t\toutput.WriteLine(\"node;emitted instances\");\r\n\t\t\t\tfor (int i = 0; i < nodes.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.WriteLine(keys[i] + \";\" + values[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal static void Dump(TextWriter/*!*/ output, string path)\r\n\t\t{\r\n\t\t    try\r\n\t\t    {\r\n                CompilationEnd();\r\n                output.WriteLine(\"Compiled in {0}:{1:00}.{2:000}.\", duration.Minutes, duration.Seconds, duration.Milliseconds);\r\n\r\n                AST.DumpBasic(output);\r\n\r\n                using (StreamWriter f = File.CreateText(Path.Combine(path, \"LibraryCalls.csv\")))\r\n                {\r\n                    AST.DumpLibraryFunctionCalls(f);\r\n                }\r\n\r\n                using (StreamWriter f = File.CreateText(Path.Combine(path, \"UnknownCalls.csv\")))\r\n                {\r\n                    AST.DumpUnknownFunctionCalls(f);\r\n                }\r\n\r\n                using (StreamWriter f = File.CreateText(Path.Combine(path, \"EmittedNodes.csv\")))\r\n                {\r\n                    AST.DumpNodes(f);\r\n                }\r\n            }\r\n\t\t    catch (Exception ex)\r\n\t\t    {\r\n                // Log error to stderr and move on.\r\n                Console.Error.WriteLine(\"Error: \" + ex);\r\n\t\t    }\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Compiler/VariablesTable.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n Copyright (c) 2003-2005 Pavel Novak.\r\n \r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.AST;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Table storing information about variables at compile time.\r\n\t/// </summary>\r\n\tinternal class VariablesTable : IEnumerable<VariablesTable.Entry>\r\n\t{\r\n\t\t#region Nested Class: Entry\r\n\r\n\t\t/// <summary>\r\n\t\t/// Class for <seealso cref=\"PHP.Core.VariablesTable\"/>. Instances are stored in that table.\r\n\t\t/// </summary>\r\n\t\tpublic class Entry\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Variable place\r\n\t\t\t/// </summary>\r\n\t\t\tprivate Emit.IPlace variable;\r\n\t\t\tpublic Emit.IPlace Variable { get { return variable; } set { variable = value; } }\r\n\t\r\n\t\t\t/// <summary>\r\n\t\t\t/// Get variable name.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic VariableName VariableName { get { return varName; } }\r\n\t\t\tprivate VariableName varName;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Get or set if current variable is declared as PhpReference (<c>true</c>) or as Object (<c>false</c>).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IsPhpReference { get { return isPhpReference; } set { isPhpReference = value; } }\r\n\t\t\tprivate bool isPhpReference;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Get or set if current variable is function parameter (<c>true</c>) or regular local variable (<c>false</c>).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IsParameter { get { return isParameter; } set { isParameter = value; } }\r\n\t\t\tprivate bool isParameter;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets or sets if this variable is directly used.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>This value is always <c>true</c> for regular local variables, it can be false only if entry\r\n\t\t\t/// represents a parameter.</remarks>\r\n\t\t\tpublic bool IsDirectlyUsed { get { return isDirectlyUsed; } set { isDirectlyUsed = value; } }\r\n\t\t\tprivate bool isDirectlyUsed;\r\n\r\n            /// <summary>\r\n            /// Gets or sets the type of the variable if it can be determined. \r\n            /// Otherwise, it returns <see cref=\"PhpTypeCode.Unknown\"/>.\r\n            /// If it returns <see cref=\"PhpTypeCode.Object\"/>, then the object type \r\n            /// can be retrieved from <see cref=\"TypeRef\"/>.\r\n            /// </summary>\r\n            public PhpTypeCode TypeCode { get; set; }\r\n\r\n            /// <summary>\r\n            /// If <see cref=\"TypeCode\"/> is <see cref=\"PhpTypeCode.Object\"/>, then this gets the type of the object \r\n            /// if it can be determined and <c>null</c> otherwise.\r\n            /// </summary>\r\n            public TypeRef TypeRef { get; set; }\r\n\r\n\t\t\tpublic Entry(VariableName varName, bool isPhpReference)\r\n\t\t\t\t: this(varName, isPhpReference, false)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\tpublic Entry(VariableName varName, bool isPhpReference, bool isParameter)\r\n\t\t\t{\r\n\t\t\t\tthis.varName = varName;\r\n\t\t\t\tthis.isPhpReference = isPhpReference;\r\n\t\t\t\tthis.isParameter = isParameter;\r\n\r\n\t\t\t\t// parameters are not directly used by default\r\n\t\t\t\tthis.isDirectlyUsed = !isParameter;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tinternal const int SuboptimalLocalsCount = 50;\r\n\r\n\t\tprivate Dictionary<VariableName, Entry>/*!*/ variables;\r\n\t\tprivate bool allRef = false;\r\n\r\n\t\tpublic VariablesTable()\r\n\t\t{\r\n\t\t\tvariables = new Dictionary<VariableName, Entry>();\r\n\t\t}\r\n\r\n\t\tpublic VariablesTable(int size)\r\n\t\t{\r\n\t\t\tvariables = new Dictionary<VariableName, Entry>(size);\r\n\t\t}\r\n\r\n\t\t#region Access methods\r\n\r\n\t\tpublic void Set(VariableName varName, bool isPhpReference)\r\n\t\t{\r\n\t\t\tEntry entry;\r\n\t\t\tif (variables.TryGetValue(varName, out entry))\r\n\t\t\t{\r\n\t\t\t\tentry.IsDirectlyUsed = true;\r\n\r\n\t\t\t\tif (allRef || isPhpReference)\r\n\t\t\t\t\tentry.IsPhpReference = true;\r\n\t\t\t}\r\n\t\t\telse if (!varName.IsAutoGlobal)\r\n\t\t\t{\r\n\t\t\t\tvariables.Add(varName, new Entry(varName, allRef || isPhpReference));\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Adds a new entry into the table. \r\n        /// This is used for copying and merging of tables. \r\n        /// The table must not contain an entry with the same name.\r\n        /// </summary>\r\n        internal void Add(Entry entry)\r\n        {\r\n            Debug.Assert(!this.Contains(entry.VariableName),\r\n                \"Adding entry whose key is already used.\");\r\n            variables[entry.VariableName] = entry;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes all the variables. This is used for copying and merging of tables.\r\n        /// </summary>\r\n        internal void Clear()\r\n        {\r\n            this.variables.Clear();\r\n        }\r\n\r\n\t\tpublic bool AddParameter(VariableName paramName, bool isPassedByRef)\r\n\t\t{\r\n\t\t\tEntry entry;\r\n\t\t\tif (variables.TryGetValue(paramName, out entry))\r\n\t\t\t{\r\n\t\t\t\t// parameter with the same name specified twice\r\n                if (entry.IsParameter)\r\n                {\r\n                    //return false;\r\n                }\r\n                else\r\n                {\r\n                    Debug.Fail(null);\r\n                    return true;\r\n                }\r\n\t\t\t}\r\n\t\t\t\r\n            // add variable entry\r\n\t\t\tvariables[paramName] = new Entry(paramName, isPassedByRef, true);   // parameter can be specified twice in PHP, the last one is used\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic void SetAllRef()\r\n\t\t{\r\n\t\t\tallRef = true;\r\n\r\n\t\t\tforeach (Entry variable in variables.Values)\r\n\t\t\t\tvariable.IsPhpReference = true;\r\n\t\t}\r\n\r\n\t\tpublic Entry this[VariableName name]\r\n\t\t{\r\n\t\t\tget { return variables[name]; }\r\n\t\t}\r\n\r\n\t\tpublic bool Contains(VariableName name)\r\n\t\t{\r\n\t\t\treturn variables.ContainsKey(name);\r\n\t\t}\r\n\r\n\t\tpublic int Count { get { return variables.Count; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable<Entry> Members\r\n\r\n\t\tIEnumerator<VariablesTable.Entry> IEnumerable<VariablesTable.Entry>.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn variables.Values.GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tSystem.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn variables.Values.GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/Compiler/WebServerManagers.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.Caching;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections.Specialized;\r\nusing System.Collections.Generic;\r\nusing System.Collections;\r\nusing System.Configuration.Assemblies;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Runtime.Remoting;\r\nusing System.Text.RegularExpressions;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Utilities;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region WebCompilationContext\r\n\r\n    /// <summary>\r\n    /// Compilation context used by the manager.\r\n    /// </summary>\r\n    internal sealed class WebCompilationContext : CompilationContext\r\n    {\r\n        /// <summary>\r\n        /// A timestamp of the current request.\r\n        /// </summary>\r\n        public DateTime RequestTimestampUtc { get { return requestTimestampUtc; } }\r\n        private readonly DateTime requestTimestampUtc;\r\n\r\n        public override bool SaveOnlyAssembly\r\n        {\r\n            get\r\n            {\r\n                return ((WebServerCompilerManager)Manager).SaveOnlyAssembly;   // in debug mode, do not load built assemblies into memory\r\n            }\r\n        }\r\n\r\n        public WebCompilationContext(ApplicationContext applicationContext, ICompilerManager/*!*/ manager, CompilerConfiguration/*!*/ config, string/*!*/ workingDirectory,\r\n          DateTime requestTimestamp)\r\n            : base(applicationContext, manager, config, new WebErrorSink(config.Compiler.DisabledWarnings, config.Compiler.DisabledWarningNumbers), workingDirectory)\r\n        {\r\n            this.requestTimestampUtc = requestTimestamp.ToUniversalTime();\r\n        }\r\n\r\n        #region Assembly Naming\r\n\r\n        /// <summary>\r\n        /// Translates a source path to an assembly coded name.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">Source file.</param>\r\n        /// <param name=\"config\">The compiler configuration.</param>\r\n        /// <returns>\r\n        /// The code name consisting of significant configuration hashcode and source \r\n        /// path relative to the application source root.\r\n        /// Format of the name: <code>{relativized path}(~{level_count})?#{config hash}#</code>\r\n        /// Backslashes and colons are replaced with underscores, underscores are doubled.\r\n        /// </returns>\r\n        public static string GetAssemblyCodedName(PhpSourceFile/*!*/ sourceFile, CompilerConfiguration/*!*/ config)\r\n        {\r\n            RelativePath rp = sourceFile.RelativePath;\r\n            StringBuilder sb = new StringBuilder(rp.Path);\r\n\r\n            if (rp.Level >= 0)\r\n            {\r\n                sb.Append('~');\r\n                sb.Append(rp.Level);\r\n            }\r\n\r\n            sb.Append('#');\r\n            sb.Append(config.Compiler.HashCode.ToString(\"x\"));\r\n            sb.Append('#');\r\n\r\n            return sb.Replace(\"_\", \"__\").Replace('/', '_').Replace('\\\\', '_').Replace(':', '_').ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Translates a source path to an assembly coded name.\r\n        /// </summary>\r\n        public string GetAssemblyCodedName(PhpSourceFile/*!*/ sourceFile)\r\n        {\r\n            return GetAssemblyCodedName(sourceFile, config);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a full name of an assembly in which a specified source script is compiled.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">Source file.</param>\r\n        /// <returns>The assembly full name.</returns>\r\n        /// <remarks>A name of the assembly consists of a hexa-timestamp and a assembly coded name.</remarks>\r\n        public AssemblyName GetAssemblyFullName(PhpSourceFile/*!*/ sourceFile)\r\n        {\r\n            // timestamp ensures there won't be two loaded assemblies of the same name:\r\n            // (consider editing of a source file)\r\n            string stamp = requestTimestampUtc.Ticks.ToString(\"x16\");\r\n\r\n            AssemblyName result = new AssemblyName();\r\n            result.Name = GetAssemblyCodedName(sourceFile, config) + stamp;\r\n            result.Version = new Version(1, 0, 0, 0);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extracts assembly coded name from its full name.\r\n        /// </summary>\r\n        /// <param name=\"name\">The full name of the assembly.</param>\r\n        /// <returns>The coded name.</returns>\r\n        public string ParseAssemblyFullName(AssemblyName/*!*/ name)\r\n        {\r\n            // the last 16 characters contains hexa-timestamp:\r\n            return name.Name.Substring(0, name.Name.Length - 16);\r\n        }\r\n\r\n        public string ParseAssemblyFullName(string/*!*/ name)\r\n        {\r\n            // the last 16 + 4 characters contains hexa-timestamp and extension:\r\n            return name.Substring(0, name.Length - 16 - 4);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Compiler Manager\r\n\r\n    /// <summary>\r\n    /// Manager for a compiling a web aplication by multiple compilers in parallel.\r\n    /// Designed to be able to work in remote appdomain, yet this feature is currently not utilized.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// <para>\r\n    /// Cache maps <I>coded assembly names</I> to <I>assembly file paths</I>.\r\n    /// In addition, a set of dependencies is added to each cache item. These dependencies comprises of\r\n    /// <list type=\"bullet\">\r\n    ///   <item>source script file</item>\r\n    ///   <item>cache items representing included script</item>\r\n    /// </list>\r\n    /// Cache item key should be determined by script source path which is the only information\r\n    /// the compiler provides to the manager. Thus, it equals to the coded name of the assembly got by\r\n    /// <see cref=\"WebCompilationContext.GetAssemblyCodedName\"/>.\r\n    /// </para>\r\n    /// <para>\r\n    /// Assembly name is composed from request timestamp and coded assembly name.\r\n    /// Assembly file name equals to the assembly name suffixed with .dll extension.\r\n    /// <see cref=\"SingleScriptAssemblyBuilder\"/> is used to build assemblies up.\r\n    /// </para>\r\n    /// </remarks>\r\n    /// <threadsafety static=\"true\" instance=\"true\"/>\r\n    internal class WebServerCompilerManager : ICompilerManager\r\n    {\r\n        #region Constants, Fields\r\n\r\n        /// <summary>\r\n        /// The number of attepts which are made to get an assembly which is being compiled by another thread\r\n        /// before this thread starts its own compilaation. Each attempt is limited in time by <see cref=\"CompilationTimeout\"/>.\r\n        /// </summary>\r\n        private const int AttemptsToGetCompiledAssembly = 3;\r\n        private const int CompilationTimeout = 2 * 60 * 1000; // = 2 minutes\r\n\r\n        private const int AttemptsToCompileScript = 5;\r\n        private const string AssemblyExt = \".dll\";\r\n\r\n        private const string TemporaryFilesSearchPattern = \".*\\\\#(?<Stamp>[0-9a-f]*)\\\\.dll\";\r\n\r\n        /// <summary>\r\n        /// Decide whether allow loading built assemblies into memory. This would disallows proper debugging.\r\n        /// </summary>\r\n        public bool SaveOnlyAssembly\r\n        {\r\n            get\r\n            {\r\n                return Configuration.Application.Compiler.Debug;   // in debug mode, do not load built assemblies into memory\r\n                // only when Debugger.IsAttached ?\r\n            }\r\n        }\r\n\r\n        /// <summary> Output directory. </summary>\r\n        private readonly string/*!*/ outDir;\r\n\r\n        public ApplicationContext/*!*/ ApplicationContext { get { return applicationContext; } }\r\n        private readonly ApplicationContext/*!*/ applicationContext;\r\n\r\n        /// <summary>\r\n        /// A table of <see cref=\"ManualResetEvent\"/>s on which threads are waiting when more than one thread \r\n        /// requires to compile one script. \r\n        /// </summary>\r\n        private readonly Dictionary<PhpSourceFile, ManualResetEvent>/*!*/ events;\r\n        private object/*!*/ eventsMutex = new object();\r\n\r\n        private MultiScriptAssembly[] precompiledAssemblies = null;\r\n        private readonly object/*!*/ precompiledLoadMutex = new object();\r\n\r\n        /// <summary>\r\n        /// Maps subnamespaces to the cache entries describing source file timestamps and state.\r\n        /// </summary>\r\n        private Dictionary<string, CacheEntry> cache;\r\n\r\n        private readonly ReaderWriterLockSlim/*!*/cacheLock = new ReaderWriterLockSlim();\r\n\r\n        /// <summary>Source files watcher. Can be <c>null</c> reference if <c>WatchSourceChanges</c> is disabled.</summary>\r\n        private FileSystemWatcher watcher;\r\n\r\n        /// <summary>Searching for precompiled files in ASP.NET temporary files.</summary>\r\n        private static Regex reFileStamp = new Regex(TemporaryFilesSearchPattern, RegexOptions.Compiled);\r\n\r\n        /// <summary>\r\n        /// Time of AppCode assembly was created. Any SSA compiled before this time should be recompiled.\r\n        /// </summary>\r\n        private DateTime appCodeAssemblyCreatedUtc = DateTime.MinValue;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of the manager. \r\n        /// Manager can be instantiated either in dedicated domain or in web AppDomain.\r\n        /// </summary>\r\n        /// <param name=\"appContext\">Application context.</param>\r\n        public WebServerCompilerManager(ApplicationContext/*!*/ appContext)\r\n        {\r\n            Debug.Assert(appContext != null);\r\n\r\n            bool isWebApp = HttpContext.Current != null;    // whether we are running web app or an executable app\r\n\r\n            this.outDir = isWebApp ? HttpRuntime.CodegenDir : Path.GetTempPath();\r\n            this.events = new Dictionary<PhpSourceFile, ManualResetEvent>();\r\n            this.applicationContext = appContext;\r\n\r\n            // On Windows it's case-insensitive, because same file can be accessed with various cases\r\n            cache = new Dictionary<string, CacheEntry>(100, FullPath.StringComparer);\r\n\r\n            // install file system watcher to invalidate cache of files that have been modified:\r\n            if (isWebApp &&\r\n                Configuration.Application.Compiler.WatchSourceChanges &&\r\n                !Configuration.Application.Compiler.OnlyPrecompiledCode)\r\n            {\r\n                watcher = new FileSystemWatcher()\r\n                {\r\n                    // TODO: multiple paths (multiple watchers?):\r\n                    Path = Configuration.Application.Compiler.SourceRoot.ToString(),\r\n                    NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,\r\n                    IncludeSubdirectories = true,\r\n                    EnableRaisingEvents = false,\r\n                };\r\n\r\n                watcher.Changed += OnFileChanged;\r\n                watcher.Renamed += OnFileRenamed;\r\n                watcher.Deleted += OnFileChanged;\r\n            }\r\n            else\r\n            {\r\n                watcher = null;\r\n            }\r\n\r\n            // look for \"App_Code.compiled\" file\r\n            if (isWebApp)\r\n                LoadAppCode(Path.Combine(HttpRuntime.CodegenDir, \"App_Code.compiled\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try to load assembly containing App_Code compiled files.\r\n        /// </summary>\r\n        /// <param name=\"app_code_compiled_path\"><c>App_Code.compiled</c> XML containing path to the assembly. The file is generated by ASP.NET.</param>\r\n        private void LoadAppCode(string app_code_compiled_path)\r\n        {\r\n            if (!File.Exists(app_code_compiled_path))\r\n                return;\r\n\r\n            var xml = new System.Xml.XmlDocument();\r\n            xml.Load(app_code_compiled_path);\r\n            var node = xml.DocumentElement.SelectSingleNode(@\"/preserve[@assembly]\");\r\n            if (node != null)\r\n            {\r\n                var assemblyFile = Path.Combine(Path.GetDirectoryName(app_code_compiled_path), node.Attributes[\"assembly\"].Value + \".dll\");\r\n                appCodeAssemblyCreatedUtc = FileSystemUtils.GetLastModifiedTimeUtc(assemblyFile);\r\n                ApplicationContext.AssemblyLoader.Load(Assembly.LoadFrom(assemblyFile), null);\r\n            }\r\n        }\r\n\r\n        static WebServerCompilerManager()\r\n        {\r\n            // initialize locks used for locking of SSA loading\r\n            tempLoadLocks = new object[32];\r\n            for (int i = 0; i < tempLoadLocks.Length; ++i)\r\n                tempLoadLocks[i] = new object();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ICompilerManager Members\r\n\r\n        /// <summary>\r\n        /// Checks whether a specified source file needs to be (re)compiled and if so locks \r\n        /// it so that any other compiler from the current app domain will wait until this compilation finishes.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">Source file.</param>\r\n        /// <param name=\"ctx\">Compilation context.</param>\r\n        /// <returns>\r\n        /// A compiled module associated with the <paramref name=\"sourceFile\"/> or a <B>null</B> reference\r\n        /// if a compilation of that file is needed.\r\n        /// </returns>\r\n        public PhpModule LockForCompiling(PhpSourceFile/*!*/ sourceFile, CompilationContext/*!*/ ctx)\r\n        {\r\n            Debug.Assert(ctx is WebCompilationContext);\r\n            WebCompilationContext context = (WebCompilationContext)ctx;\r\n\r\n            // take a look into script library first\r\n            if (applicationContext.ScriptLibraryDatabase.ContainsScript(sourceFile.FullPath))\r\n            {\r\n                return applicationContext.ScriptLibraryDatabase.GetScriptModule(sourceFile.FullPath);\r\n            }\r\n\r\n            for (int i = 0; i < AttemptsToGetCompiledAssembly; i++)\r\n            {\r\n                string ns = ScriptModule.GetSubnamespace(sourceFile.RelativePath, false);\r\n\r\n                CacheEntry cache_entry;\r\n\r\n                // TODO: Single script assemblies can be loaded and reflected \r\n                //       but this still have to be done for MSAs\r\n                if (TryLoadCachedEntry(ns, sourceFile, out cache_entry) && !cache_entry.ScriptAssembly.IsMultiScript)\r\n                    return cache_entry.ScriptAssembly.GetModule(sourceFile);\r\n\r\n                // compilation is in progress or not started yet //\r\n                ManualResetEvent compilation_finished;\r\n\r\n                lock (eventsMutex)\r\n                {\r\n                    // if compilation of the target file has not started yet:\r\n                    if (!events.TryGetValue(sourceFile, out compilation_finished))\r\n                    {\r\n                        // adds event which others wait on:\r\n                        events.Add(sourceFile, new ManualResetEvent(false));\r\n\r\n                        return null;\r\n                    }\r\n                }\r\n\r\n                // waits until compilation is finished and assembly has been persisted:\r\n                compilation_finished.WaitOne(CompilationTimeout, false);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of <see cref=\"ScriptBuilder\"/> to be used for compilation of the script's assembly.\r\n        /// </summary>\r\n        /// <param name=\"compiledUnit\">Unit being compiled.</param>\r\n        /// <param name=\"ctx\">The current compilation context.</param>\r\n        /// <returns>The script builder.</returns>\r\n        public IPhpModuleBuilder DefineModuleBuilder(CompilationUnitBase/*!*/ compiledUnit, CompilationContext/*!*/ ctx)\r\n        {\r\n            Debug.Assert(compiledUnit is ScriptCompilationUnit && ctx is WebCompilationContext);\r\n            WebCompilationContext context = (WebCompilationContext)ctx;\r\n            ScriptCompilationUnit unit = (ScriptCompilationUnit)compiledUnit;\r\n\r\n            // creates an assembly name:\r\n            AssemblyName name = context.GetAssemblyFullName(unit.SourceUnit.SourceFile);\r\n\r\n            // creates a script assembly builder:\r\n            SingleScriptAssemblyBuilder builder = new SingleScriptAssemblyBuilder(applicationContext,\r\n                name, outDir, name.Name + AssemblyExt, AssemblyKinds.WebPage, context.Config.Compiler.Debug, false, context.SaveOnlyAssembly, null);\r\n\r\n            return builder.DefineScript(unit);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Persists a built script to a file.\r\n        /// </summary>\r\n        /// <param name=\"compilationUnit\">The unit being compiled.</param>\r\n        /// <param name=\"ctx\">Compilation context.</param>\r\n        public void Persist(CompilationUnitBase/*!*/ compilationUnit, CompilationContext/*!*/ ctx)\r\n        {\r\n            Debug.Assert(compilationUnit is ScriptCompilationUnit && ctx is WebCompilationContext);\r\n\r\n            WebCompilationContext context = (WebCompilationContext)ctx;\r\n            ScriptCompilationUnit unit = (ScriptCompilationUnit)compilationUnit;\r\n            SingleScriptAssemblyBuilder assembly_builder = (SingleScriptAssemblyBuilder)unit.ModuleBuilder.AssemblyBuilder;\r\n\r\n            assembly_builder.Save();\r\n\r\n            string ns = ScriptModule.GetSubnamespace(unit.SourceUnit.SourceFile.RelativePath, false);\r\n\r\n            if (SaveOnlyAssembly)\r\n            {\r\n                // assembly not loaded into memory yet (we need to load from fs to not break debugging)\r\n                string file = assembly_builder.Assembly.Path;\r\n\r\n                CacheEntry entry;\r\n                LoadSSA(ns, file, out entry);\r\n            }\r\n            else\r\n            {\r\n                // We only add the assembly into the cache, if it was built and loaded into memory.\r\n                // Otherwise the assembly has to be reloaded from the disk.\r\n                // This is because of debugging, since we don't want to load dynamic assemblies into memory, which breaks debug symbols.\r\n\r\n                // makes up a list of dependent assembly names:\r\n                string[] includers = new string[unit.Includers.Count];\r\n                int i = 0;\r\n                foreach (StaticInclusion inclusion in unit.Includers)\r\n                    includers[i++] = ScriptModule.GetSubnamespace(inclusion.Includer.SourceUnit.SourceFile.RelativePath, false);\r\n\r\n                // what assemblies are included by this one?\r\n                string[] inclusions = new string[unit.Inclusions.Count];\r\n                int j = 0;\r\n                foreach (StaticInclusion inclusion in unit.Inclusions)\r\n                    inclusions[j++] = ScriptModule.GetSubnamespace(new RelativePath(0, inclusion.Includee.RelativeSourcePath), false);\r\n\r\n                // adds dependencies on the source file and the included assemblies:\r\n                SetCacheEntry(ns,\r\n                    new CacheEntry(\r\n                        assembly_builder.SingleScriptAssembly.GetScriptType(),\r\n                        assembly_builder.SingleScriptAssembly, context.RequestTimestampUtc, includers, inclusions, true), true, true);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wakes up threads waiting for a script compilation finish.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">The compiled script's source file.</param>\r\n        /// <param name=\"successful\">Whether compilation has been successful.</param>\r\n        /// <param name=\"ctx\">A compilation context.</param>\r\n        /// <remarks>Should be called after <see cref=\"Persist\"/>.</remarks>\r\n        public void UnlockForCompiling(PhpSourceFile/*!*/ sourceFile, bool successful, CompilationContext ctx)\r\n        {\r\n            Debug.Assert(sourceFile != null && ctx is WebCompilationContext);\r\n\r\n            ManualResetEvent compilation_finished;\r\n\r\n            lock (eventsMutex)\r\n            {\r\n                if (events.TryGetValue(sourceFile, out compilation_finished))\r\n                    events.Remove(sourceFile);\r\n            }\r\n\r\n            // any waiting thread can access the compiled assembly now:\r\n            if (compilation_finished != null)\r\n                compilation_finished.Set();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called by compiler when information about compiling progress is available.\r\n        /// </summary>\r\n        /// <remarks>Ignored by this manager.</remarks>\r\n        public void Info(PhpSourceFile/*!*/ sourceFile, CompilationContext ctx)\r\n        {\r\n            // nop //\r\n        }\r\n\r\n        public void Finish(bool successfull)\r\n        {\r\n            // nop //\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Cache\r\n\r\n        /// <summary>\r\n        /// Structure that contains loaded scripts. The cache is built while application is \r\n        /// running and is lost when the AppDomain is reloaded.\r\n        /// </summary>\r\n        internal class CacheEntry\r\n        {\r\n            #region Members\r\n\r\n            public ScriptInfo/*!*/ ScriptInfo { get { return scriptInfo; } }\r\n            private readonly ScriptInfo/*!*/ scriptInfo;\r\n\r\n            public ScriptAssembly/*!*/ ScriptAssembly { get { return scriptAssembly; } }\r\n            private readonly ScriptAssembly/*!*/ scriptAssembly;\r\n\r\n            public DateTime BuildTimestampUtc { get { return buildTimeStampUtc; } }\r\n            private readonly DateTime buildTimeStampUtc;\r\n\r\n            /// <summary>\r\n            /// Collection of scripts that include this script - if the item is invalidated\r\n            /// all includers must be invalidated too\r\n            /// </summary>\r\n            public List<string>/*!*/ Includers { get { return includers; } }\r\n            private List<string>/*!*/ includers;\r\n\r\n            /// <summary>\r\n            /// Collection of included scripts - after loading (from temp files or when \r\n            /// application starts) we need to check whether all included files are up-to-date\r\n            /// </summary>\r\n            public List<string>/*!*/ Includees { get { return includees; } }\r\n            private List<string>/*!*/ includees;\r\n\r\n            /// <summary>\r\n            /// Whether the source file time-stamp has been checked. Precompiled source files need to be checked because\r\n            /// thay may have been modified prior to the start of the watcher. Although it would be possible to do so during \r\n            /// assembly load, it could make the load quite slow and files that are even not used may be checked unnecessarily. \r\n            /// Therefore the check is done lazily. \r\n            /// \r\n            /// Source files compiled while the watcher is active needn't to be checked. \r\n            /// </summary>\r\n            public bool FileTimeChecked { get { return fileTimeChecked; } set { fileTimeChecked = value; } }\r\n            private bool fileTimeChecked;\r\n\r\n            public CacheEntry(Type/*!*/ scriptType, ScriptAssembly/*!*/ scriptAssembly, DateTime buildTimeStamp,\r\n                string[]/*!*/ includers, bool fileTimeChecked)\r\n            {\r\n                Debug.Assert(scriptType != null && scriptAssembly != null && includers != null);\r\n\r\n                this.scriptInfo = new ScriptInfo(scriptType);\r\n                this.scriptAssembly = scriptAssembly;\r\n                this.buildTimeStampUtc = buildTimeStamp.ToUniversalTime();\r\n                this.includers = new List<string>(includers);\r\n                this.fileTimeChecked = fileTimeChecked;\r\n                this.includees = new List<string>();\r\n            }\r\n\r\n            public CacheEntry(Type/*!*/ scriptType, ScriptAssembly/*!*/ scriptAssembly, DateTime buildTimeStamp,\r\n                string[]/*!*/ includers, string[]/*!*/ includees, bool fileTimeChecked)\r\n            {\r\n                Debug.Assert(scriptType != null && scriptAssembly != null && includers != null);\r\n                Debug.Assert(buildTimeStampUtc.Kind == DateTimeKind.Utc);\r\n\r\n                this.scriptInfo = new ScriptInfo(scriptType);\r\n                this.scriptAssembly = scriptAssembly;\r\n                this.buildTimeStampUtc = buildTimeStamp.ToUniversalTime();\r\n                this.includers = new List<string>(includers);\r\n                this.fileTimeChecked = fileTimeChecked;\r\n                this.includees = new List<string>(includees);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invalidate cache entry for specified file\r\n        /// </summary>\r\n        private void OnFileChanged(object source, FileSystemEventArgs e)\r\n        {\r\n            InvalidateCacheEntry(e.FullPath);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invalidate cache entry for specified file\r\n        /// </summary>\r\n        private void OnFileRenamed(object source, RenamedEventArgs e)\r\n        {\r\n            InvalidateCacheEntry(e.FullPath);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes entry for specified script (and for all includers of this file) from cache.\r\n        /// </summary>\r\n        /// <param name=\"fullPath\">Path of the modified file</param>\r\n        private void InvalidateCacheEntry(string/*!*/ fullPath)\r\n        {\r\n            FullPath root = Configuration.Application.Compiler.SourceRoot;\r\n            string ns = ScriptModule.GetSubnamespace(new RelativePath(root, new FullPath(fullPath)), false);\r\n\r\n            Debug.WriteLine(\"WATCHER\", \"Checking cache entry '{0}'.\", ns);\r\n\r\n            CacheEntry entry;\r\n            if (TryGetCachedEntry(ns, out entry))\r\n            {\r\n                // remove entry:\r\n                List<ScriptAssembly> removed_assemblies = RemoveCachedEntry(ns, entry);\r\n\r\n                // removes assembly files (do not remove a multiscript assembly):  \r\n                foreach (ScriptAssembly removed_assembly in removed_assemblies)\r\n                {\r\n                    if (!removed_assembly.IsMultiScript && !string.IsNullOrEmpty(removed_assembly.Path))\r\n                    {\r\n                        Debug.WriteLine(\"WATCHER\", \"Deleting file '{0}'.\", removed_assembly.Path);\r\n\r\n                        try\r\n                        {\r\n                            File.Delete(removed_assembly.Path);\r\n                            File.Delete(Path.ChangeExtension(removed_assembly.Path, \".pdb\"));\r\n                        }\r\n                        catch (Exception)\r\n                        {\r\n                            // nop //\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Objects used for locking loading of single SSA from ASP.NET temp.\r\n        /// </summary>\r\n        private static readonly object[] tempLoadLocks;\r\n\r\n        /// <summary>\r\n        /// Loads script from cache (in-memory tables) or from \r\n        /// previously compiled dll in ASP.NET Temporary files.\r\n        /// </summary>\r\n        private bool TryLoadCachedEntry(string/*!*/ ns, PhpSourceFile/*!*/ sourceFile, out CacheEntry cache_entry)\r\n        {\r\n            // first try in-memory cache\r\n            if (TryGetCachedEntry(ns, out cache_entry))\r\n            {\r\n                Debug.WriteLine(\"WSSM\", \"Cache hit.\");\r\n                if (CheckEntryFileTime(ns, cache_entry) || !Configuration.Application.Compiler.WatchSourceChanges)\r\n                    return true;\r\n            }\r\n\r\n            lock (tempLoadLocks[unchecked((uint)ns.GetHashCode()) % tempLoadLocks.Length])\r\n            {\r\n                // double checked lock\r\n                if (TryGetCachedEntry(ns, out cache_entry))\r\n                    return true;    // do not check source time, since it was currently created\r\n\r\n                // try to find previously compiled assembly in temporary files\r\n                if (TryLoadTemporaryCompiledNoLock(ns, sourceFile, out cache_entry))\r\n                {\r\n                    Debug.WriteLine(\"WSSM\", \"Loaded from Temporary files.\");\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Get script for specified namespace from in-memory cache\r\n        /// </summary>\r\n        private bool TryGetCachedEntry(string/*!*/ ns, out CacheEntry entry)\r\n        {\r\n            cacheLock.EnterReadLock();\r\n            try\r\n            {\r\n                return cache.TryGetValue(ns, out entry);\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitReadLock();\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Store entry in the cache\r\n        /// </summary>\r\n        /// <param name=\"ns\">Key (namespace)</param>\r\n        /// <param name=\"entry\">Value (entry)</param>\r\n        /// <param name=\"setIncludees\">Set this file as included in every includer</param>\r\n        /// <param name=\"setIncluders\">Set this file as includer for every included script</param>\r\n        private void SetCacheEntry(string/*!*/ ns, CacheEntry entry, bool setIncludees, bool setIncluders)\r\n        {\r\n            cacheLock.EnterWriteLock();\r\n            try\r\n            {\r\n                SetCacheEntryNoLock(ns, entry, setIncludees, setIncluders);\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitWriteLock();\r\n            }\r\n        }\r\n\r\n        private void SetCacheEntryNoLock(string/*!*/ ns, CacheEntry entry, bool setIncludees, bool setIncluders)\r\n        {\r\n            // new entry -> includers need to know about it:\r\n            if (setIncludees && !cache.ContainsKey(ns))\r\n            {\r\n                foreach (string includer in entry.Includers)\r\n                {\r\n                    CacheEntry incl_entry;\r\n                    if (cache.TryGetValue(includer, out incl_entry)) incl_entry.Includees.Add(ns);\r\n                }\r\n            }\r\n\r\n            if (setIncluders)\r\n            {\r\n                foreach (string includee in entry.Includees)\r\n                {\r\n                    CacheEntry incl_entry;\r\n                    if (cache.TryGetValue(includee, out incl_entry)) incl_entry.Includers.Add(ns);\r\n                }\r\n            }\r\n            cache[ns] = entry;\r\n        }\r\n\r\n        private List<ScriptAssembly>/*!*/ RemoveCachedEntry(string/*!*/ ns, CacheEntry entry)\r\n        {\r\n            List<ScriptAssembly> removed_assemblies = new List<ScriptAssembly>();\r\n\r\n            cacheLock.EnterWriteLock();\r\n            try\r\n            {\r\n                RemoveCachedEntryNoLock(ns, entry, removed_assemblies);\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitWriteLock();\r\n            }\r\n\r\n            return removed_assemblies;\r\n        }\r\n\r\n        private void RemoveCachedEntryNoLock(string/*!*/ ns, CacheEntry entry, List<ScriptAssembly> removedAssemblies)\r\n        {\r\n            if (cache.Remove(ns))\r\n            {\r\n                Debug.WriteLine(\"WATCHER\", \"Cache entry '{0}' removed.\", ns);\r\n\r\n                if (removedAssemblies != null)\r\n                    removedAssemblies.Add(entry.ScriptAssembly);\r\n\r\n                foreach (string includer in entry.Includers)\r\n                {\r\n                    if (cache.TryGetValue(includer, out entry))\r\n                        RemoveCachedEntryNoLock(includer, entry, removedAssemblies);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Updates 'Includee' fields of cache items (it is not possible\r\n        /// to set includees while loading, beacause the key (script namespace) \r\n        /// of includer might not exist when the includee is loaded).\r\n        /// </summary>\r\n        /// <param name=\"inclusionDict\">\r\n        /// Dictionary containing list of includers for every loaded file (key)\r\n        /// </param>\r\n        private void UpdateCacheInclusions(Dictionary<string, string[]>/*!*/ inclusionDict)\r\n        {\r\n            foreach (string entry in inclusionDict.Keys)\r\n            {\r\n                foreach (string includer in inclusionDict[entry])\r\n                {\r\n                    cache[includer].Includees.Add(entry);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Checks whether timestamp of the file in the cache matches timestamp\r\n        /// loded from the compiled assembly - this prevents us from using compiled\r\n        /// assembly when the source file was modified (when the watcher was not running)\r\n        /// </summary>\r\n        private bool CheckEntryFileTime(string/*!*/ ns, CacheEntry entry)\r\n        {\r\n            if (entry.FileTimeChecked)\r\n                return true;\r\n\r\n            return CheckEntryFileTimeInternal(ns, entry);\r\n        }\r\n\r\n        private bool CheckEntryFileTimeInternal(string/*!*/ ns, CacheEntry entry)\r\n        {\r\n            cacheLock.EnterWriteLock();\r\n            try\r\n            {\r\n                return CheckEntryFileTimeNoLock(ns, entry);\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitWriteLock();\r\n            }\r\n        }\r\n\r\n\r\n        private bool CheckEntryFileTimeNoLock(string/*!*/ ns, CacheEntry entry)\r\n        {\r\n            if (entry.FileTimeChecked) return true;\r\n            try\r\n            {\r\n                FullPath source_path = ScriptModule.GetPathFromSubnamespace(ns).ToFullPath(Configuration.Application.Compiler.SourceRoot);\r\n                entry.FileTimeChecked = true;\r\n\r\n                // is compilation obsolete?\r\n                if (entry.BuildTimestampUtc < FileSystemUtils.GetLastModifiedTimeUtc(source_path))\r\n                {\r\n                    RemoveCachedEntryNoLock(ns, entry, null);\r\n                    return false;\r\n                }\r\n            }\r\n            catch\r\n            {\r\n                RemoveCachedEntryNoLock(ns, entry, null);\r\n                return false;\r\n            }\r\n\r\n            // (When checking file first time after application starts)\r\n            // Make sure that all included files (Includees) are up to date\r\n            foreach (string includee in entry.Includees)\r\n            {\r\n                if (cache.TryGetValue(includee, out entry) && !CheckEntryFileTimeNoLock(includee, entry))\r\n                {\r\n                    RemoveCachedEntryNoLock(ns, entry, null);\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Temporary files\r\n\r\n        /// <summary>\r\n        /// Tries to load script from ASP.NET Temporary files - this is useful when \r\n        /// web is not precompiled (so it is compiled into SSAs) and appdomain is reloaded\r\n        /// (which means that we loose the cache)\r\n        /// </summary>\r\n        private bool TryLoadTemporaryCompiledNoLock(string ns, PhpSourceFile/*!*/ sourceFile, out CacheEntry cache_entry)\r\n        {\r\n            CompilerConfiguration config = new CompilerConfiguration(Configuration.Application);\r\n            string name = WebCompilationContext.GetAssemblyCodedName(sourceFile, config);\r\n\r\n            string sourcePath = sourceFile.FullPath.ToString();\r\n            FileInfo sourceInfo = new FileInfo(sourcePath);\r\n            bool sourceExists = sourceInfo.Exists;\r\n            DateTime sourceTimeUtc = sourceExists ? sourceInfo.GetLastModifiedTimeUtc() : DateTime.UtcNow.AddYears(1);   // If file does not exist, fake the sourceTime to NOT load any SSA DLL. Delete them instead.\r\n            DateTime configTimeUtc = Configuration.LastConfigurationModifiedTimeUtc;\r\n\r\n            // here find the max modification of all dependant files (configuration, script itself, other DLLs):\r\n            long sourceStamp = Math.Max(Math.Max(sourceTimeUtc.Ticks, configTimeUtc.Ticks), appCodeAssemblyCreatedUtc.Ticks);\r\n\r\n            // Find specified file in temporary files\r\n\r\n            if (Directory.Exists(outDir))\r\n\r\n                foreach (string file in Directory.GetFiles(outDir, name + \"*.dll\"))\r\n                {\r\n                    Match match = reFileStamp.Match(file);\r\n                    if (!match.Success) continue;\r\n\r\n                    long fileStamp;\r\n                    if (!Int64.TryParse((string)match.Groups[\"Stamp\"].Value, NumberStyles.AllowHexSpecifier,\r\n                        CultureInfo.InvariantCulture, out fileStamp)) continue;\r\n\r\n                    // File is up-to-date\r\n                    if (sourceStamp < fileStamp)\r\n                    {\r\n                        Debug.WriteLine(\"WSSM\", \"Loading from ASP.NET Temporary files.\");\r\n\r\n                        return LoadSSA(ns, file, out cache_entry);\r\n                    }\r\n                }\r\n            cache_entry = default(CacheEntry);\r\n            return false;\r\n        }\r\n\r\n        private bool LoadSSA(string ns, string assemblyfile, out CacheEntry cache_entry)\r\n        {\r\n            // load assembly (ssa)\r\n            Assembly assembly = Assembly.LoadFrom(assemblyfile);\r\n            SingleScriptAssembly ssa = (SingleScriptAssembly)ScriptAssembly.LoadFromAssembly(applicationContext, assembly);\r\n\r\n            // find type <Script>\r\n            var scriptType = ssa.GetScriptType();\r\n\r\n            if (scriptType != null)\r\n            {\r\n                // recursively check (and load) included assemblies\r\n                // (includees and includers are set for all loaded CacheEntries except the \r\n                // inclusion to the currently loaded script - this is set later)\r\n                Dictionary<string, CacheEntry> temporaryCache = new Dictionary<string, CacheEntry>();\r\n                if (LoadIncludeesRecursive(ns, scriptType, ssa.RealModule, false, null, temporaryCache))\r\n                {\r\n                    cache_entry = temporaryCache[ns];   // cached SSA is OK, reuse it\r\n\r\n                    foreach (KeyValuePair<string, CacheEntry> entryTmp in temporaryCache)\r\n                        if (entryTmp.Value != null)\r\n                            SetCacheEntry(entryTmp.Key, entryTmp.Value, false, false);\r\n\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            // otherwise\r\n            cache_entry = default(CacheEntry);\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Recursive function that loads (SSA) assembly and all included assemblies\r\n        /// (included assemblies are required because we need to check whether included files are up-to-date)\r\n        /// </summary>\r\n        /// <param name=\"ns\">Namespace of the script to be loaded (namespace is encoded file name)</param>\r\n        /// <param name=\"type\">Type of the &lt;Script&gt; class</param>\r\n        /// <param name=\"module\">Module of the type - used for token resolving </param>\r\n        /// <param name=\"checkStamp\">Should we check timestamp?</param>\r\n        /// <param name=\"includer\">Namespace of the includer (can be null)</param>\r\n        /// <param name=\"tempCache\">Temporary cache - used only while loading</param>\r\n        /// <returns>Success?</returns>\r\n        private bool LoadIncludeesRecursive(string/*!*/ ns, Type type/*!*/, Module/*!*/ module,\r\n            bool checkStamp, string includer, Dictionary<string, CacheEntry>/*!*/ tempCache)\r\n        {\r\n            //File already processed?\r\n            if (tempCache.ContainsKey(ns))\r\n                return true;\r\n\r\n            tempCache[ns] = null;   // just recursion prevention\r\n\r\n            // find [Script] attribute\r\n            ScriptAttribute script_attr = ScriptAttribute.Reflect(type);\r\n            if (script_attr == null) return false;\r\n\r\n            // check source file timestamp\r\n            if (checkStamp)\r\n            {\r\n                string path = ScriptModule.GetPathFromSubnamespace(ns).\r\n                    ToFullPath(Configuration.Application.Compiler.SourceRoot).ToString();\r\n                DateTime writeStamp = FileSystemUtils.GetLastModifiedTimeUtc(path);  // note: it does not fail if the file does not exists, in such case it returns 12:00 midnight, January 1, 1601 A.D.\r\n                if (writeStamp > script_attr.SourceTimestamp) return false;\r\n            }\r\n\r\n            // find [ScriptIncludees] attribute\r\n            ScriptIncludeesAttribute script_includees = ScriptIncludeesAttribute.Reflect(type);\r\n            string[] inclusionNames;\r\n            if (script_includees != null)\r\n            {\r\n                Type[] inclusionScripts;\r\n\r\n                inclusionNames = new string[script_includees.Inclusions.Length];\r\n                inclusionScripts = new Type[script_includees.Inclusions.Length];\r\n\r\n                // resolve included Scripts tokens:\r\n                for (int i = 0; i < inclusionNames.Length; i++)\r\n                {\r\n                    try\r\n                    {\r\n                        inclusionScripts[i] = module.ResolveType(script_includees.Inclusions[i]);\r\n                        ScriptAttribute sa = ScriptAttribute.Reflect(inclusionScripts[i]);\r\n                        if (sa == null) return false;\r\n                        inclusionNames[i] = ScriptModule.GetSubnamespace(new RelativePath(sa.RelativePath), false);\r\n                    }\r\n                    catch (ArgumentException)\r\n                    {\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                // Try to load all included scripts and check whether files weren't changed\r\n                for (int i = 0; i < inclusionNames.Length; i++)\r\n                {\r\n                    if (!LoadIncludeesRecursive(inclusionNames[i], inclusionScripts[i], inclusionScripts[i].Module, true, ns, tempCache)) return false;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                inclusionNames = ArrayUtils.EmptyStrings;\r\n            }\r\n\r\n            // Load SSA assembly\r\n            SingleScriptAssembly ssa = ScriptAssembly.LoadFromAssembly(applicationContext, type.Assembly) as SingleScriptAssembly;\r\n\r\n            if (ssa != null)\r\n            {\r\n                // Save only to temp cache (other calls to LoadIncludeesRecursive may fail!)\r\n                string[] includers = includer == null ? (ArrayUtils.EmptyStrings) : (new string[] { includer });\r\n                CacheEntry entry = new CacheEntry(type, ssa, script_attr.SourceTimestamp, includers, inclusionNames, true);\r\n                tempCache[ns] = entry;\r\n            }\r\n            else\r\n            {\r\n                // script in MSA was included from SSA, MSA scripts should not be in cache[]\r\n                // leave null in tempCache[ns] (as recursion prevention), it will not process into cache[]\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Precompiled Assembly\r\n\r\n        /// <summary>\r\n        /// Ensures MSA libraries are loaded from Bin folder.\r\n        /// </summary>\r\n        internal MultiScriptAssembly[]/*!!*/GetPrecompiledAssemblies()\r\n        {\r\n            if (precompiledAssemblies == null)\r\n            {\r\n                lock (precompiledLoadMutex)\r\n                {\r\n                    if (precompiledAssemblies == null)\r\n                    {\r\n                        precompiledAssemblies = LoadPrecompiledAssembliesNoLock();\r\n                    }\r\n                }\r\n            }\r\n\r\n            return precompiledAssemblies;\r\n        }\r\n\r\n        private MultiScriptAssembly[] LoadPrecompiledAssembliesNoLock()\r\n        {\r\n            var result = new List<MultiScriptAssembly>();\r\n\r\n            if (HttpContext.Current != null && Directory.Exists(HttpRuntime.BinDirectory))\r\n            {\r\n                // load all script libraries from configuration if not yet\r\n                applicationContext.ScriptLibraryDatabase.EnsureLibrariesReflected();\r\n\r\n                // ignore assemblies already loaded by configuration\r\n                var loadedAssemblies = applicationContext.AssemblyLoader.GetLoadedAssemblies<DAssembly>();\r\n                var loadedAssembliesFileName = new HashSet<string>(\r\n                        loadedAssemblies.Select(ass => ass.Path).Where(path => !string.IsNullOrEmpty(path)),\r\n                        StringComparer.InvariantCultureIgnoreCase);\r\n\r\n                var filenames = Directory.GetFiles(HttpRuntime.BinDirectory, \"*.dll\", SearchOption.TopDirectoryOnly);\r\n                foreach (var fname in filenames)\r\n                {\r\n                    if (!loadedAssembliesFileName.Contains(fname))\r\n                    {\r\n                        var assembly = this.LoadPrecompiledAssemblyNoLock(fname);\r\n                        if (assembly != null)\r\n                            result.Add(assembly);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return result.ToArray();\r\n        }\r\n\r\n        private MultiScriptAssembly LoadPrecompiledAssemblyNoLock(string path)\r\n        {\r\n            Assembly/*!*/assembly;\r\n            try\r\n            {\r\n                assembly = Assembly.LoadFrom(path);\r\n            }\r\n            catch\r\n            {\r\n                return null; // ignore assembly load error\r\n            }\r\n\r\n            var scriptAttr = ScriptAssemblyAttribute.Reflect(assembly);\r\n            if (scriptAttr == null || !scriptAttr.IsMultiScript)\r\n                return null;    // ignore non-Phalanger libraries and SSAs\r\n\r\n            var/*!*/result = (MultiScriptAssembly)ScriptAssembly.Create(applicationContext, assembly, scriptAttr);\r\n            \r\n            // populate precompiled script cache, start watching for the source code:\r\n            Debug.WriteLine(\"WSSM\", \"Starting precompiled script cache population.\");\r\n\r\n            // we need to load all modules before we can set includers\r\n            // (because we also need to set includees so we need all types first)\r\n            Dictionary<string, string[]> includersDict = new Dictionary<string, string[]>();\r\n            result.RealModule.FindTypes(delegate(Type type, object _)\r\n            {\r\n                if (type.Name == ScriptModule.ScriptTypeName)\r\n                {\r\n                    ScriptAttribute script_attr = ScriptAttribute.Reflect(type);\r\n                    if (script_attr == null)\r\n                        throw new ReflectionException(CoreResources.GetString(\"precompiled_assembly_missing_script_attribute\", assembly)); // unexpected: there is a <Script> class without ScriptAttribute\r\n\r\n                    ScriptIncludersAttribute script_includers = ScriptIncludersAttribute.Reflect(type);\r\n                    string[] includers;\r\n                    if (script_includers != null)\r\n                    {\r\n                        includers = new string[script_includers.Includers.Length];\r\n\r\n                        // resolve includers' tokens:\r\n                        for (int i = 0; i < includers.Length; i++)\r\n                        {\r\n                            try\r\n                            {\r\n                                includers[i] = result.RealModule.ResolveType(script_includers.Includers[i]).Namespace;\r\n                            }\r\n                            catch (ArgumentException)\r\n                            {\r\n                                throw new ReflectionException(\r\n                                    CoreResources.GetString(\"precompiled_assembly_corrupted\", assembly, script_includers.Includers[i]));\r\n                            }\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        includers = ArrayUtils.EmptyStrings;\r\n                    }\r\n\r\n                    // store includers in dictionary, so we can set includees later\r\n                    includersDict[type.Namespace] = includers;\r\n                    SetCacheEntryNoLock(\r\n                        type.Namespace,\r\n                        new CacheEntry(type, result, script_attr.SourceTimestamp, includers, false), false, false);\r\n                }\r\n\r\n                return false;\r\n            }, null);\r\n            UpdateCacheInclusions(includersDict);\r\n\r\n            Debug.WriteLine(\"WSSM\", \"Precompiled script cache population finished (#entries = {0}).\", cache.Count);\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Compilation\r\n\r\n        /// <summary>\r\n        /// Retrives a compiled script.\r\n        /// \r\n        /// The method check scripts in following order:\r\n        /// 1. Script Library database.\r\n        /// 2. Modified source file on the file system.\r\n        /// 3. Unmodified source file in precompiled WebPages.dll.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">Script source file.</param>\r\n        /// <param name=\"requestContext\">The current HTTP context. Can be <c>null</c> in case of desktop app.</param>\r\n        /// <returns>The script type or a <B>null</B> reference on failure.</returns>\r\n        /// <remarks>The method do check the script library database.</remarks>\r\n        public ScriptInfo GetCompiledScript(PhpSourceFile/*!*/ sourceFile, RequestContext requestContext)\r\n        {\r\n            Debug.Assert(sourceFile != null);\r\n\r\n            // try to get the script from precompiled script library first\r\n            var scriptLibraryModule = applicationContext.ScriptLibraryDatabase.GetScriptModule(sourceFile.FullPath);\r\n            if (scriptLibraryModule != null)\r\n                return scriptLibraryModule.ScriptInfo;\r\n\r\n            // loads precompiled assembly if exists and not loaded yet:\r\n            GetPrecompiledAssemblies();\r\n\r\n            // enables source code watcher if not enabled yet:\r\n            if (watcher != null && !watcher.EnableRaisingEvents)\r\n            {\r\n                Debug.WriteLine(\"WSSM\", \"Source code watcher is starting.\");\r\n\r\n                watcher.EnableRaisingEvents = true;\r\n            }\r\n\r\n            string ns = ScriptModule.GetSubnamespace(sourceFile.RelativePath, false);\r\n\r\n            CacheEntry cache_entry;\r\n\r\n            if (Configuration.Application.Compiler.OnlyPrecompiledCode)\r\n            {\r\n                // Load script from cache (WebPages.dll)\r\n                if (TryGetCachedEntry(ns, out cache_entry))\r\n                    return cache_entry.ScriptInfo;\r\n                else\r\n                    return null;\r\n            }\r\n            else\r\n            {\r\n                // Load script from cache or from ASP.NET Temporary files\r\n                if (TryLoadCachedEntry(ns, sourceFile, out cache_entry))\r\n                    return cache_entry.ScriptInfo;\r\n\r\n                lock (this)\r\n                {\r\n                    // double checked lock, CompileScript should not be called on more threads\r\n                    if (TryGetCachedEntry(ns, out cache_entry))\r\n                        return cache_entry.ScriptInfo;\r\n\r\n                    Debug.WriteLine(\"WSSM\", \"Compile script '{0}'.\", sourceFile.ToString());\r\n                    return CompileScriptNoLock(ns, sourceFile, requestContext);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Compiles a script.\r\n        /// Called when the script cannot be loaded from pre-compiled assembly and it should be compiled.\r\n        /// </summary>\r\n        /// <returns>The compiled script type.</returns>\r\n        private ScriptInfo CompileScriptNoLock(string ns, PhpSourceFile/*!*/ sourceFile, RequestContext requestContext)\r\n        {\r\n            Debug.Assert(sourceFile != null);\r\n\r\n            CompilerConfiguration config = new CompilerConfiguration(Configuration.Application);\r\n            WebCompilationContext context = new WebCompilationContext(applicationContext, this, config, sourceFile.Directory,\r\n                (requestContext != null) ? requestContext.HttpContext.Timestamp : DateTime.UtcNow);\r\n\r\n            try\r\n            {\r\n                CacheEntry cache_entry;\r\n                if (ScriptAssemblyBuilder.CompileScripts(new PhpSourceFile[] { sourceFile }, context))\r\n                {\r\n                    // assembly should be already added into the cache by Persist() method\r\n                    if (TryGetCachedEntry(ns, out cache_entry))\r\n                        return cache_entry.ScriptInfo;\r\n                }\r\n\r\n                return null;\r\n            }\r\n            catch (CompilerException)\r\n            {\r\n                return null;\r\n            }\r\n            catch (Exception)\r\n            {\r\n                // record stack info to the message if the manager resides in a dedicated domain:\r\n                throw;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Configuration.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.Collections;\r\nusing System.Collections.Specialized;\r\nusing System.Configuration;\r\nusing System.Diagnostics;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Runtime.Remoting.Messaging;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Web;\r\nusing System.Web.Configuration;\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t// library configuration\r\n\r\n\t#region LibraryConfigStore\r\n\r\n\t/// <summary>\r\n\t/// Class that abstracts library configuration - in CLR it is wrapper over\r\n\t/// XmlAttributeCollection.\r\n\t/// </summary>\r\n\tpublic class LibraryConfigStore\r\n\t{\r\n\t\tpublic LibraryConfigStore(XmlNode node)\r\n\t\t{\r\n\t\t\tif (node != null) _attributes = node.Attributes;\r\n\t\t}\r\n\r\n\t\tXmlAttributeCollection _attributes;\r\n\t\tpublic XmlAttributeCollection Attributes { get { return _attributes; } }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Library Configuration Interface\r\n\r\n\t/// <summary>\r\n\t/// Interface implemented by all configuration sections loaded from XML config file.\r\n\t/// </summary>\r\n\tpublic interface IPhpConfigurationSection\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section node having attributes \"name\" and \"value\".\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A value of the \"name\" attribute.</param>\r\n\t\t/// <param name=\"value\">A value of the \"value\" attribute.</param>\r\n\t\t/// <param name=\"node\">The node.</param>\r\n\t\t/// <returns>\r\n\t\t/// Whether the node has been processed by implementor. Depends usually on the <paramref name=\"name\"/> value.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">The value of <paramref name=\"value\"/> is not valid.</exception>\r\n\t\tbool Parse(string name, string value, XmlNode node);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// A base class for configuration contexts.\r\n\t/// </summary>\r\n\tpublic class ConfigContextBase       // GENERICS: <L,G> where L : IPhpConfiguration, new(), G: new()\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Local configuration record or a <B>null</B> if not used by the library.\r\n\t\t/// </summary>\r\n\t\tpublic IPhpConfiguration Local;    // can be null\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global configuration record or a <B>null</B> if not used by the library.\r\n\t\t/// </summary>\r\n\t\tpublic IPhpConfiguration Global;   // can be null\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">Local configuration record or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"global\">Local configuration record or a <B>null</B> reference.</param>\r\n\t\tpublic ConfigContextBase(IPhpConfiguration local, IPhpConfiguration global)\r\n\t\t{\r\n\t\t\tthis.Local = local;\r\n\t\t\tthis.Global = global;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// partial classes - loading (on CLR)\r\n\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration record containing the configuration applicable by user code (PhpPages,ClassLibrary).\r\n\t/// </summary>  \r\n\t[Serializable]\r\n\tpublic sealed partial class LocalConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region Output Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Output control options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class OutputControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"OutputBuffering\":\r\n                        {\r\n                            int ivalue;\r\n                            if (int.TryParse(value, out ivalue))\r\n                                outputBuffering = ivalue != 0;\r\n\t\t\t\t\t\t    else\r\n                                outputBuffering = (value == \"true\");\r\n                        }\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"OutputHandler\":\r\n\t\t\t\t\t\toutputHandler = (value != \"\") ? new PhpCallback(value) : null;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"ImplicitFlush\":\r\n\t\t\t\t\t\timplicitFlush = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"ContentType\":\r\n                        this.contentType = (value != \"\") ? value : null;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"Charset\":\r\n\t\t\t\t\t\tthis.charSet = (value != \"\") ? value : null;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Error Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error control options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class ErrorControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tbool t = value == \"true\";\r\n\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"ReportErrors\":\r\n\t\t\t\t\t\tReportErrors = (PhpErrorSet)ConfigUtils.ParseFlags(node, (int)ReportErrors, typeof(PhpError));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"UserHandler\": UserHandler = (value != String.Empty) ? new PhpCallback(value) : null; break;\r\n\t\t\t\t\tcase \"UserHandlerErrors\":\r\n            UserHandlerErrors = (PhpError)ConfigUtils.ParseFlags(node, (int)UserHandlerErrors, typeof(PhpError));\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"UserExceptionHandler\": UserExceptionHandler = (value != String.Empty) ? new PhpCallback(value) : null; break;\r\n\t\t\t\t\tcase \"DisplayErrors\": DisplayErrors = t; break;\r\n\t\t\t\t\tcase \"LogFile\": LogFile = AbsolutizeLogFile(value, node); break;\r\n\t\t\t\t\tcase \"EnableLogging\": EnableLogging = t; break;\r\n\t\t\t\t\tcase \"SysLog\": SysLog = t; break;\r\n\t\t\t\t\tcase \"ErrorPrependString\": ErrorPrependString = value; break;\r\n\t\t\t\t\tcase \"ErrorAppendString\": ErrorAppendString = value; break;\r\n\t\t\t\t\tcase \"HtmlMessages\": HtmlMessages = t; break;\r\n\t\t\t\t\tcase \"IgnoreAtOperator\": IgnoreAtOperator = t; break;\r\n\t\t\t\t\tcase \"DocRefExtension\": DocRefExtension = value; break;\r\n\r\n\t\t\t\t\tcase \"DocRefRoot\":\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDocRefRoot = (value != \"\") ? new Uri(value) : null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (UriFormatException e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Request Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Request control options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class RequestControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"ExecutionTimeout\":\r\n\t\t\t\t\t\tExecutionTimeout = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"IgnoreUserAbort\":\r\n\t\t\t\t\t\tIgnoreUserAbort = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Assertion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assertion options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class AssertionSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"Callback\": Callback = (value != String.Empty) ? new PhpCallback(value) : null; break;\r\n\t\t\t\t\tcase \"Active\": Active = value == \"true\"; break;\r\n\t\t\t\t\tcase \"ReportWarning\": ReportWarning = value == \"true\"; break;\r\n\t\t\t\t\tcase \"Terminate\": Terminate = value == \"true\"; break;\r\n\t\t\t\t\tcase \"Quiet\": Quiet = value == \"true\"; break;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variables\r\n\r\n\t\t/// <summary>\r\n\t\t/// Variables handling options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class VariablesSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n                    case \"ZendEngineV1Compatible\": throw new NotSupportedException(name); // ZendEngineV1Compatible = (value == \"true\"); break;\r\n\t\t\t\t\tcase \"QuoteRuntimeVariables\": QuoteRuntimeVariables = (value == \"true\"); break;\r\n                    case \"QuoteInDbManner\": /*QuoteInDbManner =*/ if (value == \"true\") throw new ConfigUtils.InvalidAttributeValueException(node, \"value\"); break;\r\n\t\t\t\t\tcase \"DeserializationCallback\": DeserializationCallback = (value != String.Empty) ? new PhpCallback(value) : null; break;\r\n                    case \"AlwaysPopulateRawPostData\": AlwaysPopulateRawPostData = (value == \"true\"); break;\r\n\r\n\t\t\t\t\tcase \"RegisteringOrder\":\r\n\r\n\t\t\t\t\t\tif (!ValidateRegisteringOrder(value))\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"invalid_registering_order\"), node);\r\n\r\n\t\t\t\t\t\tRegisteringOrder = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region File System\r\n\r\n\t\t/// <summary>\r\n\t\t/// File system functions options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class FileSystemSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"AllowUrlFopen\":\r\n\t\t\t\t\t\tAllowUrlFopen = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"UserAgent\":\r\n\t\t\t\t\t\tUserAgent = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"AnonymousFtpPassword\":\r\n\t\t\t\t\t\tAnonymousFtpPassword = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"IncludePaths\":\r\n\t\t\t\t\t\tIncludePaths = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"DefaultSocketTimeout\":\r\n\t\t\t\t\t\tDefaultSocketTimeout = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"DefaultFileOpenMode\":\r\n\t\t\t\t\t\tswitch (value)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase \"b\":\r\n\t\t\t\t\t\t\tcase \"t\": DefaultFileOpenMode = value; break;\r\n\t\t\t\t\t\t\tcase \"\": DefaultFileOpenMode = null; break;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidAttributeValueException(node, name);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\r\n\t\t#region Session\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session management configuration independent of a particular session handler.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class SessionSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// A handler providing persistence for session variables.\r\n\t\t\t/// Can't contain a <B>null</B> reference. Setting the <B>null</B> reference will assign the default handler \r\n\t\t\t/// (<see cref=\"AspNetSessionHandler.Default\"/>).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic SessionHandler/*!*/Handler\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n                    if (handler == null)\r\n                    {\r\n                        // lazily initialize the session handler:\r\n                        if (handler_getter != null)\r\n                        {\r\n                            handler = handler_getter() ?? handler;    // keep old one if handler_getter fails and handler is not null\r\n                            handler_getter = null;  // drop the getter closure\r\n                        }\r\n\r\n                        if (handler == null)\r\n                            handler = AspNetSessionHandler.Default;\r\n                    }\r\n\r\n                    return handler;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\thandler = value;\r\n                    handler_getter = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tprivate SessionHandler handler = null;\r\n\r\n            /// <summary>\r\n            /// One-time handler initializer function.\r\n            /// </summary>\r\n            private Func<SessionHandler> handler_getter = null;\r\n\r\n            /// <summary>\r\n            /// url_rewriter.tags specifies which HTML tags are rewritten to include session id\r\n            /// if transparent sid support is enabled.\r\n            /// Defaults to a=href,area=href,frame=src,input=src,form=,fieldset=  \r\n            ///  \r\n            /// The Dictionary contains the pair of (\"HTML Element\", \"Attribute name\").\r\n            /// Keys and values are in lower case.\r\n            /// \r\n            /// Cannot be null.\r\n            /// </summary>\r\n            public Dictionary<string,string[]>/*!!*/UrlRewriterTags\r\n            {\r\n                get\r\n                {\r\n                    if (urlRewriterTags == null)\r\n                    {\r\n                        urlRewriterTags = new Dictionary<string, string[]>()\r\n                        {\r\n                            { \"a\", new string[]{\"href\"}},\r\n                            { \"area\", new string[]{\"href\"}},\r\n                            { \"frame\", new string[]{\"src\"}},\r\n                            { \"input\", new string[]{\"src\"}},\r\n                            { \"form\", ArrayUtils.EmptyStrings},\r\n                            { \"fieldset\", ArrayUtils.EmptyStrings}\r\n                        };\r\n                    }\r\n                    return urlRewriterTags;\r\n                }\r\n                set\r\n                {\r\n                    urlRewriterTags = value;\r\n                }\r\n            }\r\n\r\n            private Dictionary<string, string[]> urlRewriterTags = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"AutoStart\":\r\n\t\t\t\t\t\tAutoStart = value == \"true\";\r\n\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\tcase \"Handler\":\r\n\t\t\t\t\t\t{\r\n                            // postpone this step until sessions are actually used, also not all the handlers are loaded yet\r\n                            this.handler_getter = () =>\r\n                                {\r\n                                    SessionHandler handler = SessionHandlers.GetHandler(value);\r\n                                    if (handler == null)\r\n                                        PhpException.Throw(PhpError.Warning, string.Format(CoreResources.unknown_session_handler, value));\r\n                                    \r\n                                    return handler;\r\n                                };\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n                    case \"UrlRewriterTags\":\r\n                        {\r\n                            var newUrlRewriterTags = new Dictionary<string, string[]>();\r\n\r\n                            // value = \"a=href,area=href,frame=src,input=src,form=,fieldset=\"\r\n                            string[] tags = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\r\n\r\n                            // enumerate list of tags\r\n                            foreach (string tag in tags)\r\n                            {\r\n                                int ass = tag.IndexOf('='); // find the assignment\r\n\r\n                                if (ass >= 1)   // there is at least one character before the assignment\r\n                                {\r\n                                    string tagName = tag.Remove(ass).ToLower();\r\n                                    string tagValue = tag.Substring(ass + 1).ToLower();\r\n\r\n                                    string[] attrs = null;\r\n                                    newUrlRewriterTags.TryGetValue(tagName, out attrs);\r\n                                    newUrlRewriterTags[tagName] = ArrayUtils.Concat(attrs, tagValue);\r\n                                }\r\n                            }\r\n\r\n                            this.UrlRewriterTags = newUrlRewriterTags;\r\n                            \r\n                            return true;\r\n                        }\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Compiler Configuration\r\n\r\n\t/// <summary>\r\n\t/// Groups configuration related to the compiler. \r\n\t/// Includes <see cref=\"ApplicationConfiguration.CompilerSection\"/> and \r\n\t/// <see cref=\"ApplicationConfiguration.GlobalizationSection\"/>\r\n\t/// sections of global configuration record. \r\n\t/// Used for passing configuration for the purpose of compilation.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed partial class CompilerConfiguration\r\n\t{\r\n\t\t#region Loading\r\n\r\n        /// <summary>\r\n        /// Class libraries collected while parsing configuration files.\r\n        /// </summary>\r\n        private LibrariesConfigurationList/*!*/addedLibraries = new LibrariesConfigurationList();\r\n\r\n        /// <summary>\r\n        /// Load class libraries collected while parsing configuration files.\r\n        /// </summary>\r\n        /// <param name=\"appContext\"></param>\r\n        internal void LoadLibraries(ApplicationContext/*!*/ appContext)\r\n        {\r\n            addedLibraries.LoadLibrariesNoLock(\r\n                    (_assemblyName, _assemblyUrl, _sectionName, /*!*/ _node) =>\r\n                    {\r\n                        appContext.AssemblyLoader.Load(_assemblyName, _assemblyUrl, new LibraryConfigStore(_node));\r\n                        return true;\r\n                    },\r\n                    null // ignore class library sections\r\n                    );\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a XML node and loads the configuration values from it.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"applicationContext\">Context where to load libraries.</param>\r\n\t\t/// <param name=\"section\">The \"phpNet\" section node.</param>\r\n        /// <param name=\"addedLibraries\">List of class libraries to be loaded lazily.</param>\r\n        internal void Parse(ApplicationContext/*!*/ applicationContext, XmlNode/*!*/ section, LibrariesConfigurationList/*!*/addedLibraries)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n\t\t\tforeach (XmlNode node in section.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (node.Name)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase ConfigurationSectionHandler.NodeClassLibrary:\r\n\t\t\t\t\t\t\tConfigUtils.ParseLibraryAssemblyList(\r\n                                node,\r\n                                addedLibraries,\r\n\t\t\t\t\t\t\t\tPaths.Libraries);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n                        case ConfigurationSectionHandler.NodeScriptLibrary:\r\n                            ConfigUtils.ParseScriptLibraryAssemblyList(node, applicationContext.ScriptLibraryDatabase);\r\n                            break;\r\n\r\n\t\t\t\t\t\tcase ConfigurationSectionHandler.NodeCompiler:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, null, Compiler);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase ConfigurationSectionHandler.NodeGlobalization:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, null, Globalization);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ParseSystemWebSection(XmlNode/*!*/ section)\r\n\t\t{\r\n\t\t\tforeach (XmlNode node in section.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (node.Name)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"globalization\":\r\n\t\t\t\t\t\t\tstring value = ConfigUtils.OptionalAttribute(node, \"fileEncoding\");\r\n\r\n\t\t\t\t\t\t\tif (value != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tGlobalization.PageEncoding = (value != String.Empty) ? Encoding.GetEncoding(value) : Encoding.Default;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads compiler configuration values from a specified .config file into a given record.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"appContext\">Application context where to load libraries.</param>\r\n\t\t/// <param name=\"path\">A full path to the .config file.</param>\r\n\t\t/// <returns>The new configuration record.</returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">An error in configuration.</exception>\r\n        public void LoadFromFile(ApplicationContext/*!*/ appContext, FullPath path)\r\n\t\t{\r\n\t\t\tif (appContext == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"appContext\");\r\n\r\n\t\t\tpath.EnsureNonEmpty(\"path\");\r\n\r\n\t\t\tConfigXmlDocument doc = new ConfigXmlDocument();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tdoc.Load(path);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException e)\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(e.Message);\r\n\t\t\t}\r\n\r\n\t\t\tXmlNode root = doc.DocumentElement;\r\n            if (root.Name == \"configuration\")\r\n            {\r\n                ProcessNodes(appContext, root, addedLibraries);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Recursively handles loading of the configuration file sections, to handle the inheritance properly\r\n        /// </summary>\r\n        /// <param name=\"appContext\">Application context where to load libraries.</param>\r\n        /// <param name=\"root\">Root to parse child nodes from</param>\r\n        /// <param name=\"addedLibraries\">List of class libraries that are collected while parsing configuration node.</param>\r\n        private void ProcessNodes(ApplicationContext appContext, XmlNode root, LibrariesConfigurationList/*!*/addedLibraries)\r\n        {\r\n            foreach (XmlNode node in root.ChildNodes) {\r\n                if (node.NodeType == XmlNodeType.Element) {\r\n                    switch (node.Name) {\r\n                        case Configuration.SectionName:\r\n                            Parse(appContext, node, addedLibraries);\r\n                            break;\r\n\r\n                        case Configuration.LocationName:\r\n                            // Recursively parse the Web.config file to include everything in the <location> element\r\n                            ProcessNodes(appContext, node, addedLibraries);\r\n                            break;\r\n\r\n                        case \"system.web\":\r\n                            ParseSystemWebSection(node);\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Application Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration containing per-application configuration. \r\n\t/// The confguration can be defined only in Machine.config and \r\n\t/// some can be changed also in Web.config files in the appliciation root directory or above.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed partial class ApplicationConfiguration\r\n\t{\r\n\t\t#region Compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiler options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class CompilerSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t#region CLR only configuration (inclusions, prepend/append)\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to watch source code for changes. Applicable only on web applications.\r\n\t\t\t/// </summary>\r\n            public bool WatchSourceChanges { get { return watchSourceChanges; } }\r\n\t\t\tprivate bool watchSourceChanges = true;\r\n\r\n            /// <summary>\r\n\t\t\t/// Whether to allow SSAs. Otherwise Phalanger will ignore physical script files completely.\r\n\t\t\t/// </summary>\r\n            public bool OnlyPrecompiledCode { get { return onlyPrecompiledCode; } }\r\n            private bool onlyPrecompiledCode = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Paths searched for statically evaluated inclusion targets.\r\n\t\t\t/// </summary>\r\n            public string StaticIncludePaths { get { return staticIncludePaths; } set { staticIncludePaths = value; } }\r\n\t\t\tprivate string staticIncludePaths = string.Empty;\r\n\r\n            /// <summary>\r\n            /// Paths to script files or directories inclusions of which will be forces to be static.\r\n            /// </summary>\r\n            public List<string>/*!*/ForcedDynamicInclusionPaths { get { return forcedDynamicInclusionPaths ?? (forcedDynamicInclusionPaths = new List<string>()); } }\r\n            private List<string> forcedDynamicInclusionPaths = null;\r\n\r\n            /// <summary>\r\n            /// ForcedDynamicInclusionPaths translated into FullPath using current SourceRoot.\r\n            /// Only existing items are included in the list.\r\n            /// Can be <c>null</c> if no paths are skipped.\r\n            /// </summary>\r\n            public IList<string>/*!*/ForcedDynamicInclusionTranslatedFullPaths\r\n            {\r\n                get\r\n                {\r\n                    if (forcedDynamicInclusionTranslatedFullPaths == null && forcedDynamicInclusionPaths != null)\r\n                    {\r\n                        forcedDynamicInclusionTranslatedFullPaths = new List<string>(forcedDynamicInclusionPaths.Count);\r\n\r\n                        // add only existing files/directories\r\n                        foreach (var skippath in forcedDynamicInclusionPaths)\r\n                        {\r\n                            var fullSkipPath = new FullPath(skippath, this.SourceRoot);\r\n\r\n                            if (fullSkipPath.DirectoryExists || fullSkipPath.FileExists)\r\n                                forcedDynamicInclusionTranslatedFullPaths.Add(fullSkipPath.FullFileName);\r\n                        }\r\n                        \r\n                        // forcedDynamicInclusionPaths should not be changed from now\r\n                    }\r\n\r\n                    // return read only collection of items\r\n                    // if there are no items, use empty string list\r\n                    return (forcedDynamicInclusionTranslatedFullPaths != null) ?\r\n                        forcedDynamicInclusionTranslatedFullPaths.AsReadOnly() :\r\n                        (IList<string>)ArrayUtils.EmptyStrings;\r\n                }\r\n            }\r\n            private List<string> forcedDynamicInclusionTranslatedFullPaths = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// List of regular expressions and replacements to use when converting include expressions.\r\n\t\t\t/// </summary>\r\n            public List<InclusionMapping>/*!*/ InclusionMappings { get { return inclusionMappings ?? (inclusionMappings = new List<InclusionMapping>()); } }\r\n\t\t\tprivate List<InclusionMapping> inclusionMappings = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Adds an inclusion mapping.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"pattern\">A pattern. Should be valid regular expression pattern.</param>\r\n\t\t\t/// <param name=\"replacement\">A replacement.</param>\r\n\t\t\t/// <param name=\"name\">An optional name.</param>\r\n\t\t\t/// <exception cref=\"ArgumentException\"><paramref name=\"pattern\"/> is not a valid regular expression pattern.</exception>\r\n\t\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"pattern\"/> or <paramref name=\"replacement\"/> is <B>null</B>.</exception>\r\n\t\t\tpublic void AddInclusionMapping(string/*!*/ pattern, string/*!*/ replacement, string name)\r\n\t\t\t{\r\n                InclusionMappings.Add(new InclusionMapping(pattern, replacement, name));\r\n\t\t\t\tdirty = true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Removes all inclusion mappings having a specified name.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"name\">A pattern to remove.</param>\r\n\t\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is <B>null</B>.</exception>\r\n\t\t\t/// <returns>The number of mappings that has been found and removed.</returns>\r\n\t\t\tpublic int RemoveInclusionMappingByName(string/*!*/ name)\r\n\t\t\t{\r\n\t\t\t\tif (name == null)\r\n\t\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\t\tint remains_idx = 0;\r\n                for (int i = 0; i < InclusionMappings.Count; i++)\r\n\t\t\t\t{\r\n                    if (InclusionMappings[i].Name != name)\r\n                        InclusionMappings[remains_idx++] = InclusionMappings[i];\r\n\t\t\t\t}\r\n\r\n                int result = InclusionMappings.Count - remains_idx;\r\n\t\t\t\tif (result > 0)\r\n\t\t\t\t{\r\n                    InclusionMappings.RemoveRange(remains_idx, result);\r\n\t\t\t\t\tdirty = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Clears the list of inclusion mappings.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void ClearInclusionMappings()\r\n\t\t\t{\r\n                InclusionMappings.Clear();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// File to be once-included before a script.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string PrependFile { get { return prependFile; } }\r\n\t\t\tprivate string prependFile;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// File to be once-included after a script.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string AppendFile { get { return appendFile; } }\r\n\t\t\tprivate string appendFile;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Significant Options Hash Code\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether significant options has been changed since last hash computation.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool dirty;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets a hash code of options significant for compilation.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal int HashCode\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tif (dirty)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thashcode = 0;\r\n\r\n\t\t\t\t\t\tunchecked\r\n\t\t\t\t\t\t{\r\n                            foreach (InclusionMapping mapping in InclusionMappings)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\thashcode += mapping.Pattern.ToString().GetHashCode();\r\n\t\t\t\t\t\t\t\thashcode += mapping.Replacement.GetHashCode();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\thashcode += debug ? 897987897 : 12;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdirty = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn hashcode;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tprivate int hashcode;\r\n\t\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Defaults\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Initializes fields by default values.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal CompilerSection()\r\n\t\t\t{\r\n\t\t\t\tdirty = true;\r\n\t\t\t\thashcode = 0;\r\n\t\t\t\tdebug = true;\r\n\t\t\t\tdisabledWarnings = WarningGroups.DeferredToRuntime | WarningGroups.CompilerStrict;\r\n\t\t\t\tdisabledWarningNumbers = ArrayUtils.EmptyIntegers;\r\n\r\n\t\t\t\tif (HttpContext.Current != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsourceRoot = new FullPath(HttpRuntime.AppDomainAppPath, false);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the value should be rewritten by the command line compiler:\r\n\t\t\t\t\tsourceRoot = new FullPath(Directory.GetCurrentDirectory(), false);\r\n\t\t\t\t}\r\n\t\t\t\tSourceRootSet = false;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region XML Parsing\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"LanguageFeatures\":\r\n\t\t\t\t\t\tLanguageFeatures = (LanguageFeatures)ConfigUtils.ParseFlags(node, (int)LanguageFeatures, typeof(LanguageFeatures));\r\n\t\t\t\t\t\treturn true;\r\n\r\n                    case \"EnableStaticInclusions\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (Configuration.IsValidInCurrentScope(node))\r\n\t\t\t\t\t\t\t\tEnableStaticInclusions = value == \"true\";\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"StaticIncludePaths\":\r\n\t\t\t\t\t\tStaticIncludePaths = value;\r\n\t\t\t\t\t\treturn true;\r\n\r\n                    case \"ForcedDynamicInclusionPaths\":\r\n                        foreach(XmlNode child in node.ChildNodes)\r\n                        {\r\n                            switch (child.Name)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase \"add\":\r\n                                    ForcedDynamicInclusionPaths.Add(ConfigUtils.MandatoryAttribute(child, \"value\"));\r\n                                    break;\r\n                                case \"remove\":\r\n                                    ForcedDynamicInclusionPaths.Remove(ConfigUtils.MandatoryAttribute(child, \"value\"));\r\n                                    break;\r\n                                case \"clear\":\r\n                                    ForcedDynamicInclusionPaths.Clear();\r\n                                    break;\r\n                                default:\r\n\t\t\t\t\t\t\t\t\tif (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidNodeException(child);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n                            }\r\n                        }\r\n\r\n                        return true;\r\n\r\n\t\t\t\t\tcase \"InclusionMappings\":\r\n\r\n\t\t\t\t\t\tforeach (XmlNode child in node.ChildNodes)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tswitch (child.Name)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase \"add\":\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tAddInclusionMapping(\r\n\t\t\t\t\t\t\t\t\t\t\t\tConfigUtils.MandatoryAttribute(child, \"pattern\"),\r\n\t\t\t\t\t\t\t\t\t\t\t\tConfigUtils.MandatoryAttribute(child, \"value\"),\r\n\t\t\t\t\t\t\t\t\t\t\t\tConfigUtils.OptionalAttribute(child, \"name\"));\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"invalid_regular_expression\"), child);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tcase \"remove\":\r\n\t\t\t\t\t\t\t\t\tRemoveInclusionMappingByName(ConfigUtils.MandatoryAttribute(child, \"name\"));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"clear\":\r\n\t\t\t\t\t\t\t\t\tClearInclusionMappings();\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tif (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidNodeException(child);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\tcase \"Debug\":\r\n\t\t\t\t\t\tdebug = (value == \"true\");\r\n\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\tcase \"WatchSourceChanges\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// applicable only in run-time:\r\n\t\t\t\t\t\t\tif (Configuration.IsBuildTime)\r\n\t\t\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\t\t\tif (HttpContext.Current == null)\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"web_only_option\"), node);\r\n\r\n                            watchSourceChanges = value == \"true\" && !OnlyPrecompiledCode;   // OnlyPrecompiledCode => !WatchSourceChanges\r\n                            \r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n                    case \"OnlyPrecompiledCode\":\r\n                        {\r\n                            // applicable only in run-time:\r\n                            if (Configuration.IsBuildTime)\r\n                                return true;\r\n\r\n                            if (HttpContext.Current == null)\r\n                                throw new ConfigurationErrorsException(CoreResources.GetString(\"web_only_option\"), node);\r\n\r\n                            onlyPrecompiledCode = value == \"true\";\r\n                            if (OnlyPrecompiledCode) watchSourceChanges = false;    // OnlyPrecompiledCode => !WatchSourceChanges\r\n\r\n                            return true;\r\n                        }\r\n\r\n\t\t\t\t\tcase \"DisabledWarnings\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (Configuration.IsValidInCurrentScope(node))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tdisabledWarnings = (WarningGroups)ConfigUtils.ParseFlags(node, (int)disabledWarnings, typeof(WarningGroups));\r\n\r\n\t\t\t\t\t\t\t\tstring numbers = ConfigUtils.OptionalAttribute(node, \"numbers\");\r\n\t\t\t\t\t\t\t\tif (!String.IsNullOrEmpty(numbers))\r\n\t\t\t\t\t\t\t\t\tdisabledWarningNumbers = ConfigUtils.ParseIntegerList(numbers, ',', 1, 10000, node);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// TODO: disabled warning numbers\r\n\r\n\t\t\t\t\tcase \"SourceRoot\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// applicable only in run-time:\r\n\t\t\t\t\t\t\tif (Configuration.IsBuildTime)\r\n\t\t\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\t\t\t// source root option is allowed only in console application configuration:\r\n\t\t\t\t\t\t\tif (HttpContext.Current != null)\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"console_only_option\"), node);\r\n\r\n\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tSourceRoot = new FullPath(value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"PrependFile\":\r\n\t\t\t\t\t\tprependFile = (value != \"\") ? value : null;\r\n\t\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t\tcase \"AppendFile\":\r\n\t\t\t\t\t\tappendFile = (value != \"\") ? value : null;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Globalization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Configuration related to culture.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class GlobalizationSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t#region Loading\r\n\r\n\t\t\tinternal GlobalizationSection()\r\n\t\t\t{\r\n                System.Web.Configuration.GlobalizationSection system_glob = null;\r\n\r\n                try\r\n                {\r\n                    system_glob =\r\n                    WebConfigurationManager.GetSection(\"system.web/globalization\") as System.Web.Configuration.GlobalizationSection;\r\n                }\r\n                catch (Exception)\r\n                { }\r\n\t\t\t\t\r\n\t\t\t\tpageEncoding = (system_glob != null) ? system_glob.FileEncoding : Encoding.Default;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"PageEncoding\":\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPageEncoding = (value != String.Empty) ? Encoding.GetEncoding(value) : Encoding.Default;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Paths\r\n\r\n\t\t/// <summary>\r\n\t\t/// Paths to Phalanger directories and tools.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed class PathsSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Directory path where dynamic wrappers are stored. \r\n\t\t\t/// </summary>\r\n            public FullPath DynamicWrappers { get { return dynamicWrappers; } }\r\n\t\t\tprivate FullPath dynamicWrappers;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Directory path where managed libraries are stored. \r\n\t\t\t/// </summary>\r\n            public FullPath Libraries { get { return libraries; } }\r\n\t\t\tprivate FullPath libraries;\r\n\r\n            /// <summary>\r\n            /// Last determined modification time. Used to invalidate assemblies compiled before this time.\r\n            /// </summary>\r\n            public DateTime LastConfigurationModificationTimeUtc { get; private set; }\r\n\r\n            public PathsSection()\r\n            {\r\n                var http_context = HttpContext.Current;\r\n\r\n                // default paths, used when the configuration does not set its own:\r\n\r\n                string current_app_dir;\r\n                try { current_app_dir = (http_context != null) ? http_context.Server.MapPath(\"/bin\") : \".\"; }  // this can throw on Mono\r\n                catch (InvalidOperationException) { current_app_dir = \"bin\"; }\r\n\r\n                libraries = new FullPath(current_app_dir);\r\n\r\n                string dynamic_path = /*(http_context != null) ? current_app_dir : */Path.GetTempPath();\r\n                dynamicWrappers = new FullPath(dynamic_path);\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads paths from XML configuration node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n                // determine last configuration modification time:\r\n                this.LastConfigurationModificationTimeUtc = ConfigUtils.GetConfigModificationTimeUtc(node, this.LastConfigurationModificationTimeUtc);\r\n\r\n                switch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"DynamicWrappers\": dynamicWrappers = CheckedPath(value, node); return true;\r\n\t\t\t\t\tcase \"Libraries\": libraries = CheckedPath(value, node); return true;\r\n\t\t\t\t\tcase \"ExtWrappers\": /* DEPRECATED */ return true;\r\n                    case \"ExtTypeDefs\": /* DEPRECATED */ return true;\r\n                    case \"ExtNatives\": /* DEPRECATED */ return true;\r\n                    case \"ExtManager\": /* DEPRECATED */ return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tprivate FullPath CheckedPath(string value, XmlNode/*!*/node)\r\n\t\t\t{\r\n                Debug.Assert(node != null);\r\n\r\n\t\t\t\tFullPath result;\r\n\r\n\t\t\t\t// checks path correctness:\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n                    string root = ConfigUtils.GetConfigXmlPath(node.OwnerDocument);\r\n                    if (root != null) value = Path.Combine(Path.GetDirectoryName(root), value);\r\n\r\n\t\t\t\t\tresult = new FullPath(value);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (ArgumentException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// checks directory existance:\r\n\t\t\t\tif (!result.IsEmpty && !Directory.Exists(result))\r\n\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"directory_not_exists\", result), node);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n            internal void Validate()\r\n            {\r\n                \r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration containing script independent configuration options.\r\n\t/// Options are directory dependent - each application subdirectory can define settings applicable for its content.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed partial class GlobalConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region GlobalVariables\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global variables handling options.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class GlobalVariablesSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tbool t = value == \"true\";\r\n\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"RegisterGlobals\": RegisterGlobals = t; break;\r\n\t\t\t\t\tcase \"RegisterArgcArgv\": RegisterArgcArgv = t; break;\r\n\t\t\t\t\tcase \"RegisterLongArrays\": RegisterLongArrays = t; break;\r\n                    case \"QuoteGpcVariables\": /*QuoteGpcVariables = t;*/ if (t) throw new ConfigUtils.InvalidAttributeValueException(node, \"value\"); break;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PostedFiles\r\n\r\n\t\t/// <summary>\r\n\t\t/// Options influencing posting files via HTTP.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed class PostedFilesSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to accept HTTP posted files.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Accept = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Path where to store uploaded files to make them accessible to scripts.\r\n\t\t\t/// Can be a <B>null</B> reference or empty string which means that default path is used.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string TempPath = null;\r\n\r\n\t\t\tpublic string GetTempPath(SafeModeSection/*!*/ safeModeConfig)\r\n\t\t\t{\r\n\t\t\t\tstring result = (TempPath != \"\") ? TempPath : null;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tif (result != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (safeModeConfig.IsPathAllowed(result))\r\n\t\t\t\t\t\t\tDirectory.CreateDirectory(result);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tresult = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (SystemException)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (result == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = Path.Combine(HttpRuntime.CodegenDir, \"Posted Files\");\r\n\t\t\t\t\tDirectory.CreateDirectory(result);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"Accept\":\r\n\t\t\t\t\t\tAccept = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"TempPath\":\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tTempPath = (value == String.Empty) ? null : Path.GetFullPath(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tinternal PostedFilesSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (PostedFilesSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SafeMode\r\n\r\n\t\t/// <summary>\r\n\t\t/// Configuration related to the safe mode.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed partial class SafeModeSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether safe mode is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Enabled = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Directory where programs to be executed are searched in.\r\n\t\t\t/// Applies only if <see cref=\"Enabled\"/> is <B>true</B>.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string ExecutionDirectory = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// List of directory path prefixes where file system functions can open files.\r\n\t\t\t/// A <B>null</B> reference mean all paths are allowed.\r\n\t\t\t/// Not affected by value of <see cref=\"Enabled\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string[] AllowedPathPrefixes = null;\r\n\r\n\t\t\tpublic string/*!*/ GetAllowedPathPrefixesJoin()\r\n\t\t\t{\r\n\t\t\t\treturn (AllowedPathPrefixes != null) ? String.Join(Path.DirectorySeparatorChar.ToString(), AllowedPathPrefixes) : \"\";\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Checks whether a path is allowed to be used by the script.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"path\">The non-empty path to be checked.</param>\r\n\t\t\t/// <returns>\r\n\t\t\t/// <B>true</B> if the path targets a subdirectory of any directory specified in the \r\n\t\t\t/// <see cref=\"AllowedPathPrefixes\"/> or the list is empty.\r\n\t\t\t/// </returns>\r\n\t\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> si a <B>null</B> reference.</exception>\r\n\t\t\tpublic bool IsPathAllowed(string path)\r\n\t\t\t{\r\n\t\t\t\tif (path == null)\r\n\t\t\t\t\tthrow new ArgumentNullException(\"path\");\r\n\r\n\t\t\t\tif (AllowedPathPrefixes == null) return true;\r\n\r\n\t\t\t\tforeach (string prefix in AllowedPathPrefixes)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!String.IsNullOrEmpty(prefix))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (StringUtils.FirstDifferent(path, prefix, true) == prefix.Length)    // GENERICS: StartsWith\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Loads configuration from XML node.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Parse(string/*!*/ name, string/*!*/ value, XmlNode/*!*/ node)\r\n\t\t\t{\r\n\t\t\t\tswitch (name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"Enabled\":\r\n\t\t\t\t\t\tEnabled = value == \"true\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"AllowedPathPrefixes\":\r\n\t\t\t\t\t\tAllowedPathPrefixes = (value != \"\") ? value.Split(new char[] { Path.PathSeparator, Path.AltDirectorySeparatorChar }) : null;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"ExecutionDirectory\":\r\n\t\t\t\t\t\tExecutionDirectory = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tinternal SafeModeSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (SafeModeSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// other stuff..\r\n\r\n\t#region Configuration Context\r\n\r\n    public sealed class LibrariesConfigurationList\r\n    {\r\n        /// <summary>\r\n        /// Information about library being load to be loaded lazily.\r\n        /// </summary>\r\n        private class AddLibraryInfo\r\n        {\r\n            public AddLibraryInfo(string assemblyName, Uri assemblyUrl, string sectionName, XmlNode/*!*/ node)\r\n            {\r\n                Debug.Assert(node != null && (assemblyName != null ^ assemblyUrl != null));\r\n\r\n                this.assemblyName = assemblyName;\r\n                this.assemblyUrl = assemblyUrl;\r\n                this.sectionName = sectionName;\r\n                this.node = node;\r\n            }\r\n\r\n            public readonly string assemblyName;\r\n            public readonly Uri assemblyUrl;\r\n            public readonly string sectionName;\r\n            public readonly XmlNode/*!*/ node;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Libraries to be loaded lazily at the and of parsing of all the configuration sections.\r\n        /// Checks for duplicities, loads libraries using the same configuration after processing all sub-configurations.\r\n        /// </summary>\r\n        private Dictionary<string, AddLibraryInfo> addedLibraries = null;\r\n\r\n        /// <summary>\r\n        /// List of class library sections to be parsed when class libraries are loaded.\r\n        /// </summary>\r\n        private List<XmlNode> sections = null;\r\n\r\n        /// <summary>\r\n        /// Add class library configuration section to the list to be processed once libraries are loaded.\r\n        /// </summary>\r\n        /// <param name=\"sectionNode\"></param>\r\n        public void AddSection(XmlNode/*!*/sectionNode)\r\n        {\r\n            Debug.Assert(sectionNode != null);\r\n            if (this.sections == null)\r\n                this.sections = new List<XmlNode>();\r\n\r\n            this.sections.Add(sectionNode);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds the library to the list of libraries to be loaded lazily.\r\n        /// </summary>\r\n        public bool AddLibrary(string assemblyName, Uri assemblyUrl, string sectionName, XmlNode/*!*/ node)\r\n        {\r\n            if (addedLibraries == null)\r\n                addedLibraries = new Dictionary<string, AddLibraryInfo>();\r\n\r\n            // add the library to be loaded lazily, avoids duplicities in config sections by overwriting previously added library\r\n            addedLibraries[LibraryKey(assemblyName, assemblyUrl)] = new AddLibraryInfo(assemblyName, assemblyUrl, sectionName, node);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Remove given library from the list of libraries that will be loaded.\r\n        /// </summary>\r\n        public bool RemoveLibrary(string assemblyName, Uri assemblyUrl)\r\n        {\r\n            return addedLibraries != null && addedLibraries.Remove(LibraryKey(assemblyName, assemblyUrl));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clear the list of libraries that will be loaded.\r\n        /// </summary>\r\n        public void ClearLibraries()\r\n        {\r\n            addedLibraries = null;\r\n        }\r\n\r\n        private string LibraryKey(string assemblyName, Uri assemblyUrl)\r\n        {\r\n            return string.Format(\"{0}^{1}\",\r\n                (assemblyName != null) ? assemblyName.ToLowerInvariant() : string.Empty,\r\n                (assemblyUrl != null) ? assemblyUrl.ToString().ToLowerInvariant() : string.Empty);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Load libraries specified by <see cref=\"AddLibrary\"/> lazily. Also parses postponed sections.\r\n        /// </summary>\r\n        public void LoadLibrariesNoLock(Func<string,Uri,string,XmlNode,bool>/*!*/callback, Action<XmlNode> parseSectionCallback)\r\n        {\r\n            if (addedLibraries != null)\r\n            {\r\n                foreach (var lib in addedLibraries.Values)\r\n                    callback(lib.assemblyName, lib.assemblyUrl, lib.sectionName, lib.node);\r\n\r\n                addedLibraries = null;\r\n            }\r\n\r\n            if (sections != null)\r\n            {\r\n                if (parseSectionCallback != null)\r\n                    foreach (var section in sections)\r\n                        parseSectionCallback(section);\r\n\r\n                sections = null;\r\n            }\r\n        }\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// Configuration context used when loading configuration from XML files.\r\n\t/// </summary>\r\n\tpublic sealed class PhpConfigurationContext\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Collection of defined sections. Sections can be defined only on the application level or above.\r\n\t\t/// Thus it is not necessary to make copies of this table.\r\n\t\t/// </summary>\r\n\t\tprivate Dictionary<string, LibrarySection>/*!*/ sections;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collection of final sections. Final sections can be defined only on the web application directory level or above.\r\n\t\t/// Thus it is not necessary to make copies of this table. \r\n\t\t/// </summary>\r\n\t\tprivate Dictionary<string, string>/*!*/ sealedSections;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Path to a directory containing the <c>Web.config</c> file or a <B>null</B> reference \r\n\t\t/// meaning <c>Machine.config</c>.\r\n\t\t/// </summary>\r\n\t\tpublic string VirtualPath { get { return virtualPath; } }\r\n\t\tprivate string virtualPath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Local configuration being currently loaded.\r\n\t\t/// </summary>\r\n\t\tinternal LocalConfiguration Local { get { return local; } }\r\n\t\tprivate LocalConfiguration local;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global configuration being currently loaded.\r\n\t\t/// </summary>\r\n\t\tinternal GlobalConfiguration Global { get { return global; } }\r\n\t\tprivate GlobalConfiguration global;\r\n\r\n        private readonly ApplicationContext/*!*/ applicationContext;\r\n\r\n        /// <summary>\r\n\t\t/// Creates an empty configuration context used as a root context.\r\n\t\t/// </summary>\r\n\t\tinternal PhpConfigurationContext(ApplicationContext/*!*/ applicationContext, string virtualPath)\r\n\t\t{\r\n\t\t\tDebug.Assert(applicationContext != null);\r\n\t\t\tthis.virtualPath = virtualPath;\r\n\t\t\tthis.applicationContext = applicationContext;\r\n\r\n\t\t\tthis.sections = new Dictionary<string, LibrarySection>();\r\n\t\t\tthis.sealedSections = new Dictionary<string, string>();\r\n            this.librariesList = new LibrariesConfigurationList();\r\n\r\n\t\t\tthis.local = new LocalConfiguration();\r\n\t\t\tthis.global = new GlobalConfiguration();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a copy (child) of this instance (parent) deeply copying the confgiuration fields.\r\n\t\t/// </summary>\r\n\t\tinternal PhpConfigurationContext(ApplicationContext/*!*/ applicationContext, string virtualPath, \r\n\t\t\tPhpConfigurationContext parent)\r\n\t\t{\r\n\t\t\tDebug.Assert(applicationContext != null);\r\n\t\t\tthis.virtualPath = virtualPath;\r\n\t\t\tthis.applicationContext = applicationContext;\r\n\r\n\t\t\t// section tables are shared:\r\n\t\t\tthis.sections = parent.sections;\r\n\t\t\tthis.sealedSections = parent.sealedSections;\r\n            this.librariesList = parent.librariesList;\r\n\r\n\t\t\t// configuration records are copied:\r\n\t\t\tthis.local = (LocalConfiguration)parent.local.DeepCopy();\r\n\t\t\tthis.global = (GlobalConfiguration)parent.global.DeepCopy();\r\n\t\t}\r\n\r\n        #region Libraries loading\r\n\r\n        internal LibrariesConfigurationList/*!*/librariesList;\r\n\r\n        /// <summary>\r\n        /// Actually loads libraries specified in <see cref=\"librariesList\"/>.\r\n        /// </summary>\r\n        internal void LoadLibrariesNoLock()\r\n        {\r\n            this.librariesList.LoadLibrariesNoLock(this.LoadLibrary, this.ParseSection);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads a library and adds a new section to the list of sections if available.\r\n        /// </summary>\r\n        private bool LoadLibrary(string assemblyName, Uri assemblyUrl, string sectionName, XmlNode/*!*/ node)\r\n        {\r\n            // load the assembly:\r\n            DAssembly assembly = applicationContext.AssemblyLoader.Load(assemblyName, assemblyUrl, new LibraryConfigStore(node));\r\n            PhpLibraryAssembly lib_assembly = assembly as PhpLibraryAssembly;\r\n\r\n            // not a PHP library or the library is loaded for reflection only:\r\n            if (lib_assembly == null)\r\n                return true;\r\n\r\n            PhpLibraryDescriptor descriptor = lib_assembly.Descriptor;\r\n\r\n            // section name not stated or the descriptor is not available (reflected-only assembly):\r\n            if (sectionName == null || descriptor == null)\r\n                return true;\r\n\r\n            if (descriptor.ConfigurationSectionName == sectionName)\r\n            {\r\n                // an assembly has already been assigned a section? => ok\r\n                if (sections.ContainsKey(sectionName)) return true;\r\n\r\n                // TODO (TP): Consider whether this is correct behavior?\r\n                //       This occurs under stress test, because ASP.NET calls \r\n                //       ConfigurationSectionHandler.Create even though we already loaded assemblies\r\n                Debug.WriteLine(\"CONFIG\", \"WARNING: Loading configuration for section '{0}'. \" +\r\n                    \"Library has been loaded, but the section is missing.\", sectionName);\r\n            }\r\n            else if (descriptor.ConfigurationSectionName != null)\r\n            {\r\n                // an assembly has already been loaded with another section name => error:\r\n                throw new ConfigurationErrorsException(CoreResources.GetString(\"cannot_change_library_section\",\r\n                    descriptor.RealAssembly.FullName, descriptor.ConfigurationSectionName), node);\r\n            }\r\n\r\n            // checks whether the section has not been used yet:\r\n            LibrarySection existing_section;\r\n            if (sections.TryGetValue(sectionName, out existing_section))\r\n            {\r\n                Assembly conflicting_assembly = existing_section.Descriptor.RealAssembly;\r\n                throw new ConfigurationErrorsException(CoreResources.GetString(\"library_section_redeclared\",\r\n                        sectionName, conflicting_assembly.FullName), node);\r\n            }\r\n\r\n            // maps section name to the library descriptor:\r\n            descriptor.WriteConfigurationUp(sectionName);\r\n            sections.Add(sectionName, new LibrarySection(descriptor));\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Processes library configuration section.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">Configuration node of the section.</param>\r\n\t\tinternal void ParseSection(XmlNode/*!*/ node)\r\n\t\t{\r\n\t\t\tDebug.Assert(node != null, \"ParseSection precondition failed.\");\r\n\r\n\t\t\t// section not defined by the library => skip:\r\n\t\t\tLibrarySection section;\r\n\t\t\tif (!sections.TryGetValue(node.Name, out section))\r\n\t\t\t\treturn;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// one iteration of extraction:\r\n\t\t\t\tsection.UserContext = section.Descriptor.ParseConfig(section.UserContext, this, node);\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tstring lib_name = section.Descriptor.RealAssembly.FullName;\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"library_config_handler_failed\", lib_name), e);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Finishes and validates the configuration. \r\n\t\t/// Creates an array of library configurations and stores it to local and global config records.\r\n\t\t/// The first validated configuration is the global one, local ones follows in the order in which \r\n\t\t/// the respective libraries has been loaded.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Configuration is invalid.</exception>\r\n\t\tinternal void ValidateNoLock()\r\n\t\t{\r\n\t\t\tList<PhpLibraryAssembly> libraries = new List<PhpLibraryAssembly>(applicationContext.GetLoadedLibraries());\r\n\r\n\t\t\tDebug.WriteLine(\"CONFIG\", \"Context.Validate: #desc = {0}\", libraries.Count);\r\n\r\n\t\t\t// request can use only some of the libraries but we need to allocate space for all to allow\r\n\t\t\t// indexing by unique indices:\r\n\t\t\tIPhpConfiguration[] local_configs = new IPhpConfiguration[libraries.Count];\r\n\t\t\tIPhpConfiguration[] global_configs = new IPhpConfiguration[libraries.Count];\r\n\r\n\t\t\tif (!this.applicationContext.AssemblyLoader.ReflectionOnly)\r\n\t\t\t{\r\n\t\t\t\tforeach (PhpLibraryAssembly library in libraries)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpLibraryDescriptor descriptor = library.Descriptor;\r\n\t\t\t\t\tConfigContextBase cfg_context;\r\n\r\n\t\t\t\t\tif (descriptor.ConfigurationSectionName != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Assert(sections.ContainsKey(descriptor.ConfigurationSectionName));\r\n\t\t\t\t\t\tcfg_context = sections[descriptor.ConfigurationSectionName].UserContext;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// creates a configuration records with default values or \r\n\t\t\t\t\t\t// empty context if the library doesn't use configuration:\r\n\t\t\t\t\t\tcfg_context = descriptor.CreateConfigContext();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdescriptor.Validate(cfg_context);\r\n\r\n\t\t\t\t\tlocal_configs[descriptor.UniqueIndex] = cfg_context.Local;\r\n\t\t\t\t\tglobal_configs[descriptor.UniqueIndex] = cfg_context.Global;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tglobal.Library.SetConfigurations(global_configs);\r\n\t\t\tlocal.Library.SetConfigurations(local_configs);\r\n\r\n\t\t\tglobal.Validate();\r\n\t\t\tlocal.Validate();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a specified option sealed (which prevents it to be modified in lower-level Web.config files).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A name of the option.</param>\r\n\t\tpublic void SealOption(string/*!*/ name)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tsealedSections.Add(name, virtualPath);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified option ha been sealed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A name of the option.</param>\r\n\t\t/// <returns>Whether it has been sealed.</returns>\r\n\t\tpublic bool IsOptionSealed(string/*!*/ name)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\t\t\treturn sealedSections.ContainsKey(name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a virtual path to configuration file where a specified option has been sealed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">A name of the option.</param>\r\n\t\t/// <returns>A virtual path to the Web.config file, \"Machine.config\" string, or a <B>null</B> reference if \r\n\t\t/// the option hasn't been sealed yet.</returns>\r\n\t\tpublic string GetSealingLocation(string/*!*/ name)\r\n\t\t{\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tstring result;\r\n\t\t\treturn (sealedSections.TryGetValue(name, out result)) ? result + \"Web.config\" : \"Machine.config\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the context is associated with Web.config file located lower in hierarchy\r\n\t\t/// than one on the application level (in the web application virtual directory).\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the configuration is specific to an application subdirectory.</returns>\r\n\t\tpublic bool IsSubApplicationConfig()\r\n\t\t{\r\n            string appdomainVirtualPath;\r\n\r\n            return\r\n                virtualPath != null && (appdomainVirtualPath = HttpRuntime.AppDomainAppVirtualPath) != null &&\r\n                virtualPath.Length > appdomainVirtualPath.Length;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the context is associated with the Machine.config file.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the configuration is machine wide.</returns>\r\n\t\tpublic bool IsMachineConfig()\r\n\t\t{\r\n\t\t\treturn virtualPath == null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that the configuration is stated on at least application level since it cannot be \r\n\t\t/// used in sub-application one.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node.</param>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">We are on sub-application level.</exception>\r\n\t\tpublic void EnsureApplicationConfig(XmlNode node)\r\n\t\t{\r\n\t\t\tif (IsSubApplicationConfig())\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"invalid_node_location\", virtualPath,\r\n\t\t\t\t\tCoreResources.GetString(\"defines_app_wide_config\")), node);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures that the configuration is stated on the machine level. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node.</param>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">We are not on machine level.</exception>\r\n\t\tpublic void EnsureMachineConfig(XmlNode node)\r\n\t\t{\r\n\t\t\tif (!IsMachineConfig())\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"invalid_node_location\", virtualPath,\r\n\t\t\t\t\tCoreResources.GetString(\"defines_app_wide_config\")), node);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a configuration section defined in a config file. \r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The section holds the descriptor of the library and it's configuration context.\r\n\t/// The in-process configuration records are contained in the context.\r\n\t/// </remarks>\r\n\tinternal sealed class LibrarySection           // GENERICS: struct\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A descriptor of the library owning the section.\r\n\t\t/// </summary>\r\n\t\tpublic PhpLibraryDescriptor/*!*/ Descriptor;\r\n\r\n\t\t/// <summary>\r\n\t\t/// User configuration context containing values stored in the section.\r\n\t\t/// </summary>\r\n\t\tpublic ConfigContextBase UserContext;\r\n\r\n\t\tpublic LibrarySection(PhpLibraryDescriptor/*!*/ descriptor)\r\n\t\t{\r\n\t\t\tDebug.Assert(descriptor != null);\r\n\r\n\t\t\tthis.Descriptor = descriptor;\r\n\t\t\tthis.UserContext = descriptor.CreateConfigContext();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Configuration Handler\r\n\r\n\t/// <summary>\r\n\t/// The configuration handler used by configuration system to parse \r\n\t/// the phpNet section of Machine.config and Web.config files.\r\n\t/// </summary>\r\n\tpublic sealed class ConfigurationSectionHandler : IConfigurationSectionHandler\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Names of the top-level nodes.\r\n\t\t/// </summary>\r\n\t\tinternal const string NodePaths = \"paths\";\r\n\t\tinternal const string NodeClassLibrary = \"classLibrary\";\r\n        internal const string NodeScriptLibrary = \"scriptLibrary\";\r\n        internal const string NodeCompiler = \"compiler\";\r\n\t\tinternal const string NodeGlobalization = \"globalization\";\r\n\t\tinternal const string NodeVariables = \"variables\";\r\n\t\tinternal const string NodeSafeMode = \"safe-mode\";\r\n\t\tinternal const string NodePostedFiles = \"posted-files\";\r\n\t\tinternal const string NodeAssertion = \"assertion\";\r\n\t\tinternal const string NodeFileSystem = \"file-system\";\r\n\t\tinternal const string NodeSessionControl = \"session-control\";\r\n\t\tinternal const string NodeErrorControl = \"error-control\";\r\n\t\tinternal const string NodeRequestControl = \"request-control\";\r\n\t\tinternal const string NodeOutputControl = \"output-control\";\r\n\r\n\t\tprivate static object/*!*/ loadMutex = new Object();\r\n\t\tprivate static int stamp = 0;\r\n\t\tprivate static ApplicationContext applicationContext;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a configuration context from the ASP.NET cache.\r\n\t\t/// </summary>\r\n\t\tinternal static PhpConfigurationContext GetConfig(ApplicationContext/*!*/ appContext, string/*!*/ sectionName)\r\n\t\t{\r\n\t\t\tDebug.Assert(appContext != null);\r\n\t\t\t\r\n\t\t\tPhpConfigurationContext context;\r\n\r\n\t\t\tlock (loadMutex)\r\n\t\t\t{\r\n\t\t\t\tapplicationContext = appContext;\r\n\t\t\t\t\r\n\t\t\t\tint old_stamp = stamp;\r\n\r\n\t\t\t\t// loads configuration from all relevant .config files using our Configuration Section Handler;\r\n\t\t\t\t// although this way of loading configuration is considered deprecated, the new one is not feasible:\r\n#pragma warning disable 618\r\n                context = (PhpConfigurationContext)ConfigurationManager.GetSection(sectionName);  //ConfigurationSettings.GetConfig(sectionName);\r\n#pragma warning restore 618\r\n\r\n\t\t\t\tint new_stamp = stamp;\r\n\r\n\t\t\t\tif (new_stamp != old_stamp)\r\n\t\t\t\t{\r\n\t\t\t\t\t// a new context has been loaded from .config file //\r\n\r\n\t\t\t\t\t// fills in missing configuration and checks whether the configuration has been loaded properly:\r\n                    if (context != null)\r\n                    {\r\n                        context.LoadLibrariesNoLock();\r\n                        context.ValidateNoLock();\r\n                    }\r\n\r\n\t\t\t\t\t// validates application configuration if it has not been validated yet;\r\n\t\t\t\t\t// the application configuration is shared among all requests (threads); \r\n\t\t\t\t\t// therefore only the first one should validate it:\r\n\t\t\t\t\tConfiguration.application.ValidateNoLock();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// GetUserEntryPoint is called by .NET config system when a configuration is needed to be extracted from a XML config file.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parent\">\r\n\t\t/// The configuration settings in the parent configuration section. \r\n\t\t/// Contains config data from already parsed sections.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"configContext\">\r\n\t\t/// An <see cref=\"HttpConfigurationContext\"/> when called from the ASP.NET config. Otherwise, a null reference. \r\n\t\t/// </param>\r\n\t\t/// <param name=\"section\">Provides direct access to the XML contents of the configuration section. </param>\r\n\t\t/// <returns>Returns LocalConfiguration object with fields set.</returns>\r\n\t\tpublic object Create(object parent, object configContext, XmlNode/*!*/ section)\r\n\t\t{\r\n\t\t\tInterlocked.Increment(ref stamp);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\treturn Create((PhpConfigurationContext)parent, configContext as HttpConfigurationContext, section);\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException)\r\n\t\t\t{\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tcatch (Exception /*e*/)\r\n\t\t\t{\r\n\t\t\t\t// HACK: Retry Create, since sometimes loading failed\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Create((PhpConfigurationContext)parent, configContext as HttpConfigurationContext, section);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception e2)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new ConfigurationErrorsException(e2.Message, section);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate PhpConfigurationContext Create(PhpConfigurationContext parent, HttpConfigurationContext context,\r\n\t\t\tXmlNode/*!*/ section)\r\n\t\t{\r\n\t\t\tPhpConfigurationContext result;\r\n\r\n\t\t\t// determines virtual path to the .config file (null means Machine.config or not applicable):\r\n\t\t\tstring virtual_path = (context != null) ? context.VirtualPath : null;\r\n\r\n\t\t\tDebug.WriteLine(\"CONFIG\", \"Parsing configuration in '{0}'. Parent config is '{1}'\",\r\n\t\t\t\tvirtual_path ?? \"Machine.config\", (parent != null) ? parent.VirtualPath : \"null\");\r\n\r\n\t\t\t// initialization:\r\n\t\t\tif (parent != null)\r\n\t\t\t{\r\n\t\t\t\tresult = new PhpConfigurationContext(applicationContext, virtual_path, parent);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = new PhpConfigurationContext(applicationContext, virtual_path);\r\n\t\t\t}\r\n\r\n\t\t\tGlobalConfiguration global = result.Global;\r\n\t\t\tLocalConfiguration local = result.Local;\r\n\r\n\t\t\t// configuration loading is assumed to be synchronized:\r\n\t\t\tApplicationConfiguration app = Configuration.application;\r\n\r\n            // same with script libraries - these need to be parsed after <sourceRoot>\r\n            XmlNode node_ScriptLibrary = null;\r\n\r\n            // determine configuration modification time:\r\n            result.Global.LastConfigurationModifiedTimeUtc = ConfigUtils.GetConfigModificationTimeUtc(section, result.Global.LastConfigurationModifiedTimeUtc);\r\n            \r\n\t\t\t// parses XML tree:\r\n\t\t\tforeach (XmlNode node in section.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (node.Name)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase NodePaths:\r\n\t\t\t\t\t\t\t// options can be specified only in application root config and above:\r\n\t\t\t\t\t\t\tresult.EnsureApplicationConfig(node);\r\n\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, app.Paths);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeClassLibrary:\r\n\t\t\t\t\t\t\t// libraries can be loaded only in application root config and above:\r\n\t\t\t\t\t\t\tresult.EnsureApplicationConfig(node);\r\n\r\n                            // parses and loads libraries contained in the list (lazy):\r\n                            ConfigUtils.ParseLibraryAssemblyList(\r\n                                node,\r\n                                result.librariesList,\r\n                                app.Paths.Libraries);\r\n                            break;\r\n\r\n                        case NodeScriptLibrary:\r\n                            // script libraries can be loaded only in application root config and above:\r\n                            result.EnsureApplicationConfig(node);\r\n\r\n                            node_ScriptLibrary = node;\r\n\r\n                            break;\r\n\t\t\t\t\t\tcase NodeCompiler:\r\n\t\t\t\t\t\t\t// options can be specified only in application root:\r\n\t\t\t\t\t\t\tresult.EnsureApplicationConfig(node);\r\n\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, app.Compiler);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeGlobalization:\r\n\t\t\t\t\t\t\t// options can be specified only in application root:\r\n\t\t\t\t\t\t\tresult.EnsureApplicationConfig(node);\r\n\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, app.Globalization);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeOutputControl:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.OutputControl);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeRequestControl:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.RequestControl);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeErrorControl:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.ErrorControl);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeSessionControl:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.Session);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeFileSystem:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.FileSystem);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeAssertion:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.Assertion);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeVariables:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, local.Variables, global.GlobalVariables);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodePostedFiles:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, global.PostedFiles);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase NodeSafeMode:\r\n\t\t\t\t\t\t\tConfigUtils.ParseNameValueList(node, result, global.SafeMode);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t// processes library section:\r\n                            result.librariesList.AddSection(node);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            // and script library after that\r\n            if (node_ScriptLibrary != null)\r\n            {\r\n                ConfigUtils.ParseScriptLibraryAssemblyList(node_ScriptLibrary, applicationContext.ScriptLibraryDatabase);\r\n            }\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// Access to config (on CLR)\r\n\r\n\t#region Configuration\r\n\r\n\t/// <summary>\r\n\t/// Provides access to the current configuration records.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class Configuration\r\n\t{\r\n\t\tpublic const string SectionName = \"phpNet\";\r\n        public const string LocationName = \"location\";\r\n\r\n\t\tprivate readonly GlobalConfiguration/*!*/ global;\r\n\t\tprivate readonly LocalConfiguration/*!*/ defaultLocal;\r\n\r\n\t\t[ThreadStatic]\r\n\t\tprivate static Configuration current = null;\r\n\r\n\t\t[ThreadStatic]\r\n\t\tprivate static bool isBeingLoadedToCurrentThread = false;\r\n\r\n        private Configuration(GlobalConfiguration/*!*/ global, LocalConfiguration/*!*/ defaultLocal)\r\n        {\r\n            this.global = global;\r\n            this.defaultLocal = defaultLocal;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads configuration using default <see cref=\"ApplicationContext\"/>.\r\n        /// </summary>\r\n        private static void LoadDefault()\r\n        {\r\n            Load(ApplicationContext.Default);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration and returns configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Configuration is invalid or incomplete.</exception>\r\n\t\tpublic static void Load(ApplicationContext/*!*/ appContext)\r\n\t\t{\r\n\t\t\tif (current == null)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(!isBeingLoadedToCurrentThread, \"Configuration loader triggered next configuration load\");\r\n\t\t\t\tisBeingLoadedToCurrentThread = true;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpConfigurationContext context = ConfigurationSectionHandler.GetConfig(appContext, SectionName);\r\n\r\n\t\t\t\t\tif (context != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcurrent = new Configuration(context.Global, context.Local);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// no configuration loaded from .config files:\r\n\t\t\t\t\t\tcurrent = new Configuration(new GlobalConfiguration(), new LocalConfiguration());\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tisBeingLoadedToCurrentThread = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Drops the configuration associated with the current thread and loads a new one.\r\n\t\t/// Doesn't reload XML data from file (cached configuration records are reused).\r\n\t\t/// The libraries listed in the <c>classLibrary</c> section are therefore not loaded into the context.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The current thread may have been reused to serve a different request with different configuration context.\r\n\t\t/// Therefore, the configuration associated with the thread needs to be dropped and a new one to be loaded.\r\n\t\t/// </remarks>\r\n\t\tpublic static void Reload(ApplicationContext/*!*/ appContext, bool reloadFromFile)\r\n\t\t{\r\n\t\t\tcurrent = null;\r\n\t\t\t\r\n\t\t\tif (reloadFromFile) \r\n\t\t\t\tConfigurationManager.RefreshSection(SectionName);\r\n\t\t\t\t\r\n\t\t\tLoad(appContext);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets application configuration record.\r\n\t\t/// The record is shared among all requests (threads) of the application.\r\n\t\t/// </summary>\r\n\t\tpublic static ApplicationConfiguration Application\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// note: more threads can start loading the configuration, but that ok:\r\n                if (!application.IsLoaded) LoadDefault();\r\n\t\t\t\treturn application;\r\n\t\t\t}\r\n\t\t}\r\n\t\tinternal static ApplicationConfiguration application = new ApplicationConfiguration();\r\n\r\n\t\t/// <summary>\r\n\t\t/// We need the paths during configuration load (e.g. in dynamic wrapper generator).\r\n\t\t/// </summary>\r\n\t\tinternal static ApplicationConfiguration.PathsSection/*!*/ GetPathsNoLoad()\r\n\t\t{\r\n\t\t\tDebug.Assert(current != null || isBeingLoadedToCurrentThread);\r\n\t\t\treturn application.Paths;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global (script independent) configuration.\r\n\t\t/// Different requsts (threads) may have different global configurations as it depends on the \r\n\t\t/// directory the request is targetting. Requests to the same directory share the same record.\r\n\t\t/// </summary>\r\n\t\tpublic static GlobalConfiguration Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                LoadDefault();\r\n\t\t\t\tDebug.Assert(current != null);\r\n\t\t\t\treturn current.global;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default values for local (script dependent) configuration.\r\n\t\t/// Different requsts (threads) may have different global configurations as it depends on the \r\n\t\t/// directory the request is targetting. Requests to the same directory share the same record.\r\n\t\t/// </summary>\r\n\t\tpublic static LocalConfiguration DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                LoadDefault();\r\n\t\t\t\tDebug.Assert(current != null);\r\n\t\t\t\treturn current.defaultLocal;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the current thread has loaded entire relevant configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsLoaded\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn current != null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get whether we are loading configuration right not, but it is not loaded yet.\r\n        /// </summary>\r\n        internal static bool IsBeingLoaded\r\n        {\r\n            get\r\n            {\r\n                return isBeingLoadedToCurrentThread;\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets script local configuration record, which is unique per request.\r\n\t\t/// </summary>\r\n\t\tpublic static LocalConfiguration Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn ScriptContext.CurrentContext.Config;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the application being run is a command line compiler.\r\n\t\t/// Influences a scope of configuration options during their load.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsBuildTime = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether specified node's scope corresponds to the scope defined by <see cref=\"IsBuildTime\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node.</param>\r\n\t\t/// <returns>\r\n\t\t/// <B>True</B>, if scope is \"Any\" or is missing, \r\n\t\t/// <see cref=\"IsBuildTime\"/> is <B>true</B> and scope is \"Build\", or\r\n\t\t/// <see cref=\"IsBuildTime\"/> is <B>false</B> and scope is \"Runtime\". \r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">If scope has invalid value.</exception>\r\n\t\tinternal static bool IsValidInCurrentScope(XmlNode/*!*/ node)\r\n\t\t{\r\n\t\t\tswitch (ConfigUtils.OptionalAttribute(node, \"scope\"))\r\n\t\t\t{\r\n\t\t\t\tcase null:\r\n\t\t\t\tcase \"Any\": return true;\r\n\t\t\t\tcase \"Build\": return IsBuildTime;\r\n\t\t\t\tcase \"Runtime\": return !IsBuildTime;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new ConfigUtils.InvalidAttributeValueException(node, \"scope\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Latest configuration modification time.\r\n        /// If it cannot be determined, it is equal to <see cref=\"DateTime.MinValue\"/>.\r\n        /// </summary>\r\n        public static DateTime LastConfigurationModifiedTimeUtc\r\n        {\r\n            get\r\n            {\r\n                return DateTimeUtils.Max(\r\n                    Application.LastConfigurationModifiedTimeUtc,\r\n                    Global.LastConfigurationModifiedTimeUtc,\r\n                    Local.LastConfigurationModifiedTimeUtc);\r\n            }\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Configuration.CoreCLR.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing PHP.CoreCLR;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t// library configuration\r\n\r\n\t#region LibraryConfigStore\r\n\r\n\t/// <summary>\r\n\t/// Class that abstracts library configuration.\r\n\t/// On CoreCLR it is not used (so far!)\r\n\t/// </summary>\r\n\tpublic class LibraryConfigStore\r\n\t{\r\n\t\tinternal LibraryConfigStore() { }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Library Configuration Interface\r\n\r\n\t/// <summary>\r\n\t/// Interface implemented by all configuration sections loaded from XML config file.\r\n\t/// </summary>\r\n\tpublic interface IPhpConfigurationSection\r\n\t{\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// partial classes with initialization\r\n\r\n\t#region Application Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration containing per-application configuration. \r\n\t/// The confguration can be defined only in Machine.config and \r\n\t/// some can be changed also in Web.config files in the appliciation root directory or above.\r\n\t/// </summary>\r\n\tpublic sealed partial class ApplicationConfiguration\r\n\t{\r\n\t\t#region Compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiler options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class CompilerSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\tpublic CompilerSection()\r\n\t\t\t{\r\n\t\t\t\tdisabledWarningNumbers = new int[0];\r\n\t\t\t\tdisabledWarnings = WarningGroups.None;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Globalization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Configuration related to culture.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class GlobalizationSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\tpublic GlobalizationSection()\r\n\t\t\t{\r\n\t\t\t\tpageEncoding = Encoding.UTF8;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// access to configuration (on CoreCLR)\r\n\r\n\t#region Configuration\r\n\r\n\t/// <summary>\r\n\t/// Provides access to the current configuration records.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class Configuration\r\n\t{\r\n\t\tprivate static Configuration current = null;\r\n\t\tprivate readonly GlobalConfiguration/*!*/ global;\r\n\t\tprivate readonly LocalConfiguration/*!*/ defaultLocal;\r\n\t\tinternal static ApplicationConfiguration application = new ApplicationConfiguration();\r\n\r\n\t\tprivate Configuration(GlobalConfiguration/*!*/ global, LocalConfiguration/*!*/ defaultLocal)\r\n\t\t{\r\n\t\t\tthis.global = global;\r\n\t\t\tthis.defaultLocal = defaultLocal;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration and returns configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Configuration is invalid or incomplete.</exception>\r\n\t\tpublic static void Load(ApplicationContext/*!*/ appContext)\r\n\t\t{\r\n\t\t\tif (current == null)\r\n\t\t\t{\r\n\t\t\t\t// no configuration loaded from .config files:\r\n\t\t\t\tcurrent = new Configuration(new GlobalConfiguration(), new LocalConfiguration());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default values for local (script dependent) configuration.\r\n\t\t/// Different requsts (threads) may have different global configurations as it depends on the \r\n\t\t/// directory the request is targetting. Requests to the same directory share the same record.\r\n\t\t/// </summary>\r\n\t\tpublic static LocalConfiguration DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tLoad(ApplicationContext.Default);\r\n\t\t\t\tDebug.Assert(current != null);\r\n\t\t\t\treturn current.defaultLocal;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets script local configuration record, which is unique per request.\r\n\t\t/// </summary>\r\n\t\tpublic static LocalConfiguration Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn ScriptContext.CurrentContext.Config;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global (script independent) configuration.\r\n\t\t/// Different requsts (threads) may have different global configurations as it depends on the \r\n\t\t/// directory the request is targetting. Requests to the same directory share the same record.\r\n\t\t/// </summary>\r\n\t\tpublic static GlobalConfiguration Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tLoad(ApplicationContext.Default);\r\n\t\t\t\tDebug.Assert(current != null);\r\n\t\t\t\treturn current.global;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets application configuration record.\r\n\t\t/// The record is shared among all requests (threads) of the application.\r\n\t\t/// </summary>\r\n\t\tpublic static ApplicationConfiguration Application\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// note: more threads can start loading the configuration, but that ok:\r\n\t\t\t\tif (!application.IsLoaded) Load(ApplicationContext.Default);\r\n\t\t\t\treturn application;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\tclass ConfigurationContext\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Loads a library and adds a new section to the list of sections if available.\r\n\t\t/// </summary>\r\n\t\tinternal static bool AddLibrary(string assemblyName, Uri assemblyUrl, string sectionName)\r\n\t\t{\r\n\t\t\tDebug.Assert(assemblyName != null ^ assemblyUrl != null);\r\n\r\n\t\t\tDAssembly assembly = ScriptContext.CurrentContext.ApplicationContext.\r\n\t\t\t\tAssemblyLoader.Load(assemblyName, assemblyUrl, new LibraryConfigStore());\r\n\t\t\tPhpLibraryAssembly lib_assembly = assembly as PhpLibraryAssembly;\r\n\r\n\t\t\t// not a PHP library or the library is loaded for reflection only:\r\n\t\t\tif (lib_assembly == null)\r\n\t\t\t\treturn true;\r\n\r\n/*\t\t\tPhpLibraryDescriptor descriptor = lib_assembly.Descriptor;\r\n\r\n\t\t\t// section name not stated or the descriptor is not available (reflected-only assembly):\r\n\t\t\tif (sectionName == null || descriptor == null)\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tif (descriptor.ConfigurationSectionName == sectionName)\r\n\t\t\t{\r\n\t\t\t\t// an assembly has already been assigned a section? => ok\r\n\t\t\t\tif (sections.ContainsKey(sectionName)) return true;\r\n\r\n\t\t\t\t// TODO (TP): Consider whther this is correct behavior?\r\n\t\t\t\t//       This occures under stress test, because ASP.NET calls \r\n\t\t\t\t//       ConfigurationSectionHandler.Create even though we already loaded assemblies\r\n\t\t\t\tDebug.WriteLine(\"CONFIG\", \"WARNING: Loading configuration for section '{0}'. \" +\r\n\t\t\t\t\t\"Library has been loaded, but the section is missing.\", sectionName);\r\n\t\t\t}\r\n\t\t\telse if (descriptor.ConfigurationSectionName != null)\r\n\t\t\t{\r\n\t\t\t\t// an assembly has already been loaded with another section name => error:\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"cannot_change_library_section\",\r\n\t\t\t\t\tdescriptor.RealAssembly.FullName, descriptor.ConfigurationSectionName), node);\r\n\t\t\t}\r\n\r\n\t\t\t// checks whether the section has not been used yet:\r\n\t\t\tLibrarySection existing_section;\r\n\t\t\tif (sections.TryGetValue(sectionName, out existing_section))\r\n\t\t\t{\r\n\t\t\t\tAssembly conflicting_assembly = existing_section.Descriptor.RealAssembly;\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"library_section_redeclared\",\r\n\t\t\t\t\t\tsectionName, conflicting_assembly.FullName), node);\r\n\t\t\t}\r\n\r\n\t\t\t// maps section name to the library descriptor:\r\n\t\t\tdescriptor.WriteConfigurationUp(sectionName);\r\n\t\t\tsections.Add(sectionName, new LibrarySection(descriptor));\r\n\t\t\t*/\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t// library configuration\r\n\r\n\t#region Library Configuration Interface\r\n\r\n\t/// <summary>\r\n\t/// Interface implemented by each configuration record.\r\n\t/// </summary>\r\n\tpublic interface IPhpConfiguration\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Makes a deep copy of the configuration record. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The deep copy.</returns>\r\n\t\t/// <remarks>\r\n        /// Immutable fields such are those of types <see cref=\"string\"/>, <see cref=\"System.Text.RegularExpressions.Regex\"/>, etc.\r\n\t\t/// needn't to be copied deeply, of course. If your configuration record contains immutable \r\n\t\t/// fields only you may implement this method simply by <see cref=\"Object.MemberwiseClone\"/> which \r\n\t\t/// is the usual case.\r\n\t\t/// </remarks>\r\n\t\tIPhpConfiguration DeepCopy();\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Library Configurations Section\r\n\r\n#if !SILVERLIGHT\r\n\t[Serializable]\r\n#endif\r\n    [DebuggerNonUserCode]\r\n    internal sealed class LibraryConfigurationsSection\r\n\t{\r\n\t\tpublic bool IsConfigurationLoaded { get { return _configurations != null; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A list of library configurations. Can contain <B>null</B> references. Initialized after configuration is read.\r\n\t\t/// </summary>\r\n\t\tprivate IPhpConfiguration[] _configurations = null;\r\n\r\n\t\tinternal void SetConfigurations(IPhpConfiguration[]/*!*/ configurations)\r\n\t\t{\r\n\t\t\tDebug.Assert(!IsConfigurationLoaded && configurations != null);\r\n\t\t\tthis._configurations = configurations;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a configuration record for a specified library.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"descriptor\">The descriptor of the library.</param>\r\n\t\t/// <returns>The configuration record or <B>null</B> if there is no record for the library.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Configuration not loaded.</exception>\r\n\t\tpublic IPhpConfiguration GetConfig(PhpLibraryDescriptor/*!*/ descriptor)\r\n\t\t{\r\n\t\t\tif (!IsConfigurationLoaded)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"configuration_not_loaded\"));\r\n\r\n\t\t\t// libraries loaded after closing the configuration have greater unique indices:\r\n\t\t\treturn (descriptor.UniqueIndex < _configurations.Length) ? _configurations[descriptor.UniqueIndex] : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a deep copy of all library configurations.\r\n\t\t/// </summary>\r\n\t\tpublic LibraryConfigurationsSection DeepCopy()\r\n\t\t{\r\n\t\t\tLibraryConfigurationsSection result = new LibraryConfigurationsSection();\r\n\r\n\t\t\tif (IsConfigurationLoaded)\r\n\t\t\t{\r\n\t\t\t\tresult._configurations = new IPhpConfiguration[_configurations.Length];\r\n\t\t\t\tfor (int i = 0; i < _configurations.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this._configurations[i] != null)\r\n\t\t\t\t\t\tresult._configurations[i] = _configurations[i].DeepCopy();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t// configuration (shared funcs.) - loading is in separate files\r\n\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration record containing the configuration applicable by user code (PhpPages,ClassLibrary).\r\n\t/// </summary>  \r\n    [DebuggerNonUserCode]\r\n    public sealed partial class LocalConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region Output Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Output control options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class OutputControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to start output buffering on the beginning of each script execution. \r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool OutputBuffering { get { return outputBuffering; } }\r\n\t\t\tprivate bool outputBuffering = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A user function which will filter buffered output.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback OutputHandler { get { return outputHandler; } }\r\n\t\t\tprivate PhpCallback outputHandler = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to send output to a client after a call of any function which generates output.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool ImplicitFlush { get { return implicitFlush; } }\r\n\t\t\tpublic bool implicitFlush = false;\r\n\r\n            /// <summary>\r\n            /// Overrides <see cref=\"System.Web.HttpResponse.Charset\"/> if not <c>null</c>.\r\n            /// </summary>\r\n            public string CharSet { get { return this.charSet; } }\r\n            private string charSet = null;\r\n\r\n            /// <summary>\r\n            /// Overrides <see cref=\"System.Web.HttpResponse.ContentType\"/> if not <c>null</c>.\r\n            /// </summary>\r\n            public string ContentType { get { return this.contentType; } }\r\n            private string contentType = null;\r\n\r\n\t\t\tinternal OutputControlSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (OutputControlSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Error Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error control options.\r\n\t\t/// </summary>\r\n        [DebuggerNonUserCode]\r\n        public sealed partial class ErrorControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to display errors as a part of the output.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool DisplayErrors = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Which errors are reported.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpErrorSet ReportErrors { get { return reportErrors; } set { reportErrors = value; } }\r\n\t\t\tprivate PhpErrorSet reportErrors = PhpErrorSet.All;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to ignore operator @. <B>true</B> will cause to report errors regardless of the operator @.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IgnoreAtOperator = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether error messages are reported in HTML format or plain text.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool HtmlMessages = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <see cref=\"Uri\"/> specifying the root of PHP manual used in error messages.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Uri DocRefRoot = new Uri(\"http://www.php.net/manual\");\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// An extension of PHP manual documents (should start with a dot character '.').\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string DocRefExtension = \".php\";\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// User defined callback which is called to handle an error.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback UserHandler = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Error which would cause calling user-defined error handler.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpError UserHandlerErrors = (PhpError)PhpErrorSet.None;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// User defined callback which is called to handle an exception.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback UserExceptionHandler = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to log errors to the system Event Log if logging is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool SysLog = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A file where to log errors if logging is enabled. Empty value means errors are not logged into a file.\r\n\t\t\t/// </summary>\r\n            public string LogFile = null;\r\n\r\n            /// <summary>\r\n            /// Ensures the path is rooted.\r\n            /// </summary>\r\n            /// <param name=\"value\">LogFile value.</param>\r\n            /// <param name=\"node\">Configuration element.</param>\r\n            private static string AbsolutizeLogFile(string value, System.Xml.XmlNode/*!*/node)\r\n            {\r\n                if (string.IsNullOrWhiteSpace(value))\r\n                {\r\n                    return null;\r\n                }\r\n                else\r\n                {\r\n                    if (System.IO.Path.IsPathRooted(value))\r\n                    {\r\n                        return value;\r\n                    }\r\n                    else\r\n                    {\r\n                        // relative path provided, make it rooted to config directory\r\n                        return System.IO.Path.Combine(System.IO.Path.GetDirectoryName(ConfigUtils.GetConfigXmlPath(node.OwnerDocument)), value);\r\n                    }\r\n                }\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to log errors.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool EnableLogging = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// String which will be prepended to an error message if it is about to be displayed.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string ErrorPrependString = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// String which will be appended to an error message if it is about to be displayed.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string ErrorAppendString = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Copies values to the target structure.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal ErrorControlSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (ErrorControlSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Request Control\r\n\r\n\t\t/// <summary>\r\n\t\t/// Request control options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class RequestControlSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Timeout in seconds for each phase of user code execution. There are up to three phases: \r\n\t\t\t/// script main execution, shutdown callbacks execution, and session close handler execution.\r\n\t\t\t/// Each phase is aborted if the specified time elapses. The next phase is executed then (if any).\r\n\t\t\t/// Works also for console and Windows applications. \r\n\t\t\t/// Non-positive values are treated as no timeout (<see cref=\"Int32.MaxValue\"/>).\r\n\t\t\t/// </summary>\r\n#if SILVERLIGHT\r\n\t\t\tpublic int ExecutionTimeout = 0;\r\n#else\r\n\t\t\tpublic int ExecutionTimeout = (System.Web.HttpContext.Current != null) ? 30 : 0;\r\n#endif\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets execution timeout in microseconds.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal long ExecutionTimeoutForTimer\r\n\t\t\t{\r\n\t\t\t\tget { return (ExecutionTimeout <= 0) ? Timeout.Infinite : (long)ExecutionTimeout * 1000; }\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether not to abort on client disconnection.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool IgnoreUserAbort = true;\r\n\r\n\r\n\t\t\tinternal RequestControlSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (RequestControlSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Assertion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assertion options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class AssertionSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to evaluate assertions.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Active = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether a warning should be reported on failed assertion.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool ReportWarning = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to terminate script execution on failed assertion.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Terminate = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether assertion evaluation should report errors (including parse errors).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Quiet = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// User callback called on failed assertion. Should have 3 parameters. Can be a <B>null</B> reference.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback Callback = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Copies values to the target structure.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal AssertionSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (AssertionSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variables\r\n\r\n\t\t/// <summary>\r\n\t\t/// Variables handling options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class VariablesSection : IPhpConfigurationSection\r\n\t\t{\r\n            ///// <summary>\r\n            ///// Whether to emulate Zend Engine 1 behavior.\r\n            ///// </summary>\r\n            //public bool ZendEngineV1Compatible = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to quote values returned from some PHP functions.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool QuoteRuntimeVariables = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to quote values in Sybase DB manner, i.e. using '' instead of \\'.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic readonly bool QuoteInDbManner = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// User callback called on failed serialization. Can be empty.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpCallback DeserializationCallback = null;\r\n\r\n            /// <summary>\r\n            /// Always populate the $HTTP_RAW_POST_DATA containing the raw POST data.\r\n            /// However, the preferred method for accessing the raw POST data is php://input.\r\n            /// $HTTP_RAW_POST_DATA is not available with enctype=\"multipart/form-data\". \r\n            /// </summary>\r\n            public bool AlwaysPopulateRawPostData = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The order in which global will be added to <see cref=\"AutoGlobals.Globals\"/> and \r\n\t\t\t/// <see cref=\"AutoGlobals.Request\"/> arrays. Can contain only a permutation of \"EGPCS\" string.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string/*!*/ RegisteringOrder\r\n\t\t\t{\r\n\t\t\t\tget { return registeringOrder; }\r\n\t\t\t\tset { if (ValidateRegisteringOrder(value)) registeringOrder = value; }\r\n\t\t\t}\r\n\t\t\tprivate string/*!*/ registeringOrder = \"EGPCS\";\r\n\r\n            /// <summary>\r\n\t\t\t/// Checks whether a specified value is global valid variables registering order.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"value\">The value.</param>\r\n\t\t\t/// <returns>Whether <paramref name=\"value\"/> contains a permutation of \"EGPCS\".</returns>\r\n\t\t\tpublic static bool ValidateRegisteringOrder(string value)\r\n\t\t\t{\r\n\t\t\t\tif (value == null || value.Length != AutoGlobals.EgpcsCount) return false;\r\n\r\n\t\t\t\tint present = 0;\r\n\t\t\t\tfor (int i = 0; i < value.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (value[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 'E': if ((present & 1) != 0) return false; present |= 1; break;\r\n\t\t\t\t\t\tcase 'G': if ((present & 2) != 0) return false; present |= 2; break;\r\n\t\t\t\t\t\tcase 'P': if ((present & 4) != 0) return false; present |= 4; break;\r\n\t\t\t\t\t\tcase 'C': if ((present & 8) != 0) return false; present |= 8; break;\r\n\t\t\t\t\t\tcase 'S': if ((present & 16) != 0) return false; present |= 16; break;\r\n\t\t\t\t\t\tdefault: return false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Copies values to the target structure.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal VariablesSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (VariablesSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region File System\r\n\r\n\t\t/// <summary>\r\n\t\t/// File system functions options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class FileSystemSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether file names can be specified as URL (and thus allows to use streams).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool AllowUrlFopen = true;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A user agent to send when communicating as client over HTTP.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string UserAgent = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Default timeout for socket based streams.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int DefaultSocketTimeout = 60;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A default file open mode used when it is not specified in <c>fopen</c> function explicitly. \r\n\t\t\t/// You can specify either \"b\" for binary mode or \"t\" for text mode. Any other value is treated as\r\n\t\t\t/// if there is no default value.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string DefaultFileOpenMode = \"b\";\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A password used when logging to FTP server as an anonymous client.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string AnonymousFtpPassword = null;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A list of semicolon-separated separated by ';' where file system functions and dynamic \r\n\t\t\t/// inclusion constructs searches for files. A <B>null</B> or an empty string means empty list.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string IncludePaths = \".\";\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Copies values to the target structure.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal FileSystemSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (FileSystemSection)this.MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Session\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session management configuration independent of a particular session handler.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class SessionSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether a session is started automatically before script execution.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This value should rather be a part of the global configuration since it\r\n\t\t\t/// can't be changed BCL functions. Its potential change by another code \r\n\t\t\t/// have no effect either. The value is stated here to all session handling\r\n\t\t\t/// settings together.\r\n\t\t\t/// </remarks>\r\n\t\t\tpublic bool AutoStart = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Makes a deep copy.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal SessionSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (SessionSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Library Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a configuration associated with the specified library.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"descriptor\">The library descriptor.</param>\r\n\t\t/// <returns>The configuration.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"descriptor\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Configuration has not been initialized yet.</exception>\r\n\t\tpublic IPhpConfiguration GetLibraryConfig(PhpLibraryDescriptor descriptor)\r\n\t\t{\r\n\t\t\tif (descriptor == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"descriptor\");\r\n\r\n\t\t\treturn Library.GetConfig(descriptor);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction, Copying, Validation\r\n\r\n\t\tpublic readonly OutputControlSection OutputControl;\r\n\t\tpublic readonly ErrorControlSection ErrorControl;\r\n\t\tpublic readonly RequestControlSection RequestControl;\r\n\t\tpublic readonly FileSystemSection FileSystem;\r\n\t\tpublic readonly AssertionSection Assertion;\r\n\t\tpublic readonly VariablesSection Variables;\r\n\t\tpublic readonly SessionSection Session;\r\n\t\tinternal readonly LibraryConfigurationsSection Library;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"LocalConfiguration\"/> initialized by default values.\r\n\t\t/// </summary>\r\n\t\tpublic LocalConfiguration()\r\n\t\t{\r\n\t\t\tOutputControl = new OutputControlSection();\r\n\t\t\tErrorControl = new ErrorControlSection();\r\n\t\t\tRequestControl = new RequestControlSection();\r\n\t\t\tFileSystem = new FileSystemSection();\r\n\t\t\tAssertion = new AssertionSection();\r\n\t\t\tVariables = new VariablesSection();\r\n\t\t\tSession = new SessionSection();\r\n\t\t\tLibrary = new LibraryConfigurationsSection();\r\n\r\n            LastConfigurationModifiedTimeUtc = DateTime.MinValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"LocalConfiguration\"/> initialized by values \r\n\t\t/// copied from the specified instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\"></param>\r\n\t\tprivate LocalConfiguration(LocalConfiguration source)\r\n\t\t{\r\n\t\t\tthis.OutputControl = source.OutputControl.DeepCopy();\r\n\t\t\tthis.ErrorControl = source.ErrorControl.DeepCopy();\r\n\t\t\tthis.RequestControl = source.RequestControl.DeepCopy();\r\n\t\t\tthis.FileSystem = source.FileSystem.DeepCopy();\r\n\t\t\tthis.Assertion = source.Assertion.DeepCopy();\r\n\t\t\tthis.Variables = source.Variables.DeepCopy();\r\n\t\t\tthis.Session = source.Session.DeepCopy();\r\n\t\t\tthis.Library = source.Library.DeepCopy();\r\n\r\n            LastConfigurationModifiedTimeUtc = source.LastConfigurationModifiedTimeUtc;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a copy of the configuration.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n\t\t\treturn new LocalConfiguration(this);\r\n\t\t}\r\n\r\n\t\tpublic void Validate()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// .config file (set of .config files) latest modification time.\r\n        /// If it cannot be determined, it is equal to <see cref=\"DateTime.MinValue\"/>.\r\n        /// </summary>\r\n        public DateTime LastConfigurationModifiedTimeUtc { get; internal set; }\r\n\r\n        #endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Compiler Configuration\r\n\r\n\t/// <summary>\r\n\t/// Groups configuration related to the compiler. \r\n\t/// Includes <see cref=\"ApplicationConfiguration.CompilerSection\"/> and \r\n\t/// <see cref=\"ApplicationConfiguration.GlobalizationSection\"/>\r\n\t/// sections of global configuration record. \r\n\t/// Used for passing configuration for the purpose of compilation.\r\n\t/// </summary>\r\n\tpublic sealed partial class CompilerConfiguration\r\n\t{\r\n\t\t#region Fields & Constructor\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiler section.\r\n\t\t/// </summary>\r\n\t\tpublic readonly ApplicationConfiguration.CompilerSection/*!*/ Compiler;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Globalization section.\r\n\t\t/// </summary>\r\n\t\tpublic readonly ApplicationConfiguration.GlobalizationSection/*!*/ Globalization;\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Paths section. Not modified.\r\n\t\t/// </summary>\r\n\t\tprivate readonly ApplicationConfiguration.PathsSection/*!*/ Paths;\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new compiler configuration as a shallow copy of \r\n\t\t/// the relevant sections of the global configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"app\">Application configuration record.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"app\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic CompilerConfiguration(ApplicationConfiguration/*!*/ app)\r\n\t\t{\r\n\t\t\tif (app == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"app\");\r\n\r\n\t\t\tthis.Compiler = app.Compiler;\r\n\t\t\tthis.Globalization = app.Globalization;\r\n#if !SILVERLIGHT\r\n\t\t\tthis.Paths = app.Paths;\r\n#endif\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the configuration data are valid and complete and fills missing information \r\n\t\t/// by defaults or throws an exception.\r\n\t\t/// </summary>\r\n        /// <exception cref=\"System.Configuration.ConfigurationErrorsException\">Configuration is invalid or incomplete.</exception>\r\n\t\tpublic void Validate()\r\n\t\t{\r\n\t\t\tCompiler.Validate();\r\n\t\t\tGlobalization.Validate();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Application Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration containing per-application configuration. \r\n\t/// The confguration can be defined only in Machine.config and \r\n\t/// some can be changed also in Web.config files in the appliciation root directory or above.\r\n\t/// </summary>\r\n    [DebuggerNonUserCode]\r\n    public sealed partial class ApplicationConfiguration\r\n\t{\r\n\t\t#region Compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiler options.\r\n\t\t/// </summary>\r\n        [DebuggerNonUserCode]\r\n        public sealed partial class CompilerSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t#region Debug\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to compile scripts in debug mode.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Debug \r\n\t\t\t{ \r\n\t\t\t\tget { return debug; } \r\n\t\t\t\tset \r\n\t\t\t\t{ \r\n\t\t\t\t\tdebug = value; \r\n#if !SILVERLIGHT\r\n\t\t\t\t\tdirty = true;\r\n#endif\r\n\t\t\t\t} \r\n\t\t\t}\r\n\t\t\tinternal bool debug;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Inclusions\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets a path to source root directory (cannot be empty). \r\n\t\t\t/// A directory to which relative source paths hardcoded into the application IL \r\n\t\t\t/// are absolutized. An application virtual directory in case of Web applications.\r\n\t\t\t/// The directory can be set in a console application configuration if the user\r\n\t\t\t/// wants to display another source path then the one used for compilation.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"Exception\">A value being set is not a valid path.</exception>\r\n\t\t\tpublic FullPath SourceRoot\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn sourceRoot;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\tif (value.IsEmpty)\r\n\t\t\t\t\t\tthrow new ArgumentException(\"value\");     // TODO\r\n\r\n\t\t\t\t\tSourceRootSet = true;\r\n\t\t\t\t\tsourceRoot = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tprivate FullPath sourceRoot;             // GENERICS: non-nullable\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether source root was set (otherwise it has a default value).\r\n\t\t\t/// </summary>\r\n\t\t\tinternal bool SourceRootSet;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether static inclusions are enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool? EnableStaticInclusions { get { return enableStaticInclusions; } set { enableStaticInclusions = value; } }\r\n\t\t\tprivate bool? enableStaticInclusions;\r\n\r\n            #endregion\r\n\r\n\t\t\t#region Simple Options\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.ShortOpenTags\"/> feature is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool ShortOpenTags { get { return (_languageFeatures & LanguageFeatures.ShortOpenTags) != 0; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.AspTags\"/> feature is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool AspTags { get { return (_languageFeatures & LanguageFeatures.AspTags) != 0; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.V5Keywords\"/> feature is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool V5Keywords { get { return (_languageFeatures & LanguageFeatures.V5Keywords) != 0; } }\r\n\r\n            /// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.UnicodeSemantics\"/> feature is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool UnicodeSemantics { get { return (_languageFeatures & LanguageFeatures.UnicodeSemantics) != 0; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.TypeKeywords\"/> feature is enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool TypeKeywords { get { return (_languageFeatures & LanguageFeatures.TypeKeywords) != 0; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether <see cref=\"PHP.Core.LanguageFeatures.ClrSemantics\"/> features are enabled.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool ClrSemantics { get { return (_languageFeatures & LanguageFeatures.ClrSemantics) != 0; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Enabled PHP language features.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic LanguageFeatures LanguageFeatures\r\n\t\t\t{\r\n\t\t\t\tget { return _languageFeatures; }\r\n\t\t\t\tset { _languageFeatures = value; languageFeaturesSet = true; }\r\n\t\t\t}\r\n\t\t\tprivate LanguageFeatures _languageFeatures = LanguageFeatures.Default;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the <see cref=\"LanguageFeatures\"/> has been set after initialized to the default value.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool LanguageFeaturesSet { get { return languageFeaturesSet; } }\r\n\t\t\tprivate bool languageFeaturesSet = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Compiler warnings which should not be reported.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic WarningGroups DisabledWarnings { get { return disabledWarnings; } set { disabledWarnings = value; } }\r\n\t\t\tprivate WarningGroups disabledWarnings;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Numbers of disabled warnings.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int[]/*!*/ DisabledWarningNumbers { get { return disabledWarningNumbers; } set { disabledWarningNumbers = value; } }\r\n\t\t\tprivate int[]/*!*/ disabledWarningNumbers;\r\n\r\n            /// <summary>\r\n            /// Whether to treat warnings as errors, so code containing warnings won't be allowed to be compiled or executed.\r\n            /// </summary>\r\n            public bool TreatWarningsAsErrors { get; set; }\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Validation\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Validates configuration. Throws an exception if any option is invalid.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal void Validate()\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Globalization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Configuration related to culture.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class GlobalizationSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t#region Fields & Validation\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Source code encoding.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Encoding PageEncoding { get { return pageEncoding; } set { pageEncoding = value; } }\r\n\t\t\tprivate Encoding pageEncoding;\r\n\r\n\t\t\tinternal void Validate()\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction and Validation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance.\r\n\t\t/// </summary>\r\n\t\tpublic ApplicationConfiguration()\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\tPaths = new PathsSection();\r\n#endif\r\n\t\t\tCompiler = new CompilerSection();\r\n\t\t\tGlobalization = new GlobalizationSection();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// If extensions are installed all paths should be defined.\r\n\t\t/// </summary>\r\n\t\tinternal void ValidateNoLock()\r\n\t\t{\r\n\t\t\t// validate only if not yet validated:\r\n\t\t\tif (!isLoaded)\r\n\t\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\t\tPaths.Validate();\r\n#endif\r\n\t\t\t\tCompiler.Validate();\r\n\t\t\t\tGlobalization.Validate();\r\n\t\t\t\tisLoaded = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Loading\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether application configuration record has been loaded.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsLoaded { get { return isLoaded; } }\r\n\t\tprivate volatile bool isLoaded = false;\r\n\r\n\t\t#endregion\r\n\r\n        #region Properties\r\n\r\n        public readonly CompilerSection Compiler;\r\n        public readonly GlobalizationSection Globalization;\r\n#if !SILVERLIGHT\r\n        public readonly PathsSection Paths;\r\n#endif\r\n\r\n        /// <summary>\r\n        /// .config file (set of .config files) latest modification time.\r\n        /// If it cannot be determined, it is equal to <see cref=\"DateTime.MinValue\"/>.\r\n        /// </summary>\r\n        public DateTime LastConfigurationModifiedTimeUtc\r\n        {\r\n            get\r\n            {\r\n                return Paths.LastConfigurationModificationTimeUtc;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// The configuration containing script independent configuration options.\r\n\t/// Options are directory dependent - each application subdirectory can define settings applicable for its content.\r\n\t/// </summary>\r\n\tpublic sealed partial class GlobalConfiguration : IPhpConfiguration\r\n\t{\r\n\t\t#region GlobalVariables\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global variables handling options.\r\n\t\t/// </summary>\r\n\t\tpublic sealed partial class GlobalVariablesSection : IPhpConfigurationSection\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether or not to register the EGPCS variables as global variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool RegisterGlobals = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether or not to register the \"argc\" and \"argv\" variables as global variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool RegisterArgcArgv = false;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether or not to register the \"HTTP_*_VARS\" arrays as global variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool RegisterLongArrays = false;\r\n\r\n            /// <summary>\r\n            /// Whether to quote GET/POST/Cookie variables' values when they are added to respective global arrays.\r\n            /// </summary>\r\n            public readonly bool QuoteGpcVariables = false;\r\n\r\n\t\t\tinternal GlobalVariablesSection DeepCopy()\r\n\t\t\t{\r\n\t\t\t\treturn (GlobalVariablesSection)MemberwiseClone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Library Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a configuration associated with the specified library.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"descriptor\">The library descriptor.</param>\r\n\t\t/// <returns>The configuration.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"descriptor\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Configuration has not been initialized yet.</exception>\r\n\t\tpublic IPhpConfiguration GetLibraryConfig(PhpLibraryDescriptor/*!*/ descriptor)\r\n\t\t{\r\n\t\t\tif (descriptor == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"descriptor\");\r\n\r\n\t\t\treturn Library.GetConfig(descriptor);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction, Copying, Validation\r\n\r\n\t\tpublic readonly GlobalVariablesSection GlobalVariables;\r\n\t\tinternal readonly LibraryConfigurationsSection Library;\r\n\r\n#if !SILVERLIGHT\r\n\t\tpublic readonly PostedFilesSection PostedFiles;\r\n\t\tpublic readonly SafeModeSection SafeMode;\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"GlobalConfiguration\"/> initialized by default values.\r\n\t\t/// </summary>\t\t\r\n\t\tpublic GlobalConfiguration()\r\n\t\t{\r\n\t\t\tGlobalVariables = new GlobalVariablesSection();\r\n\t\t\tLibrary = new LibraryConfigurationsSection();\r\n#if !SILVERLIGHT\r\n\t\t\tPostedFiles = new PostedFilesSection();\r\n\t\t\tSafeMode = new SafeModeSection();\r\n#endif\r\n            this.LastConfigurationModifiedTimeUtc = DateTime.MinValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"GlobalConfiguration\"/> initialized by values \r\n\t\t/// copied from the specified instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">The configuration from which to copy values.</param>\r\n\t\tprivate GlobalConfiguration(GlobalConfiguration/*!*/ source)\r\n\t\t{\r\n\t\t\tDebug.Assert(source != null);\r\n\r\n\t\t\tthis.GlobalVariables = source.GlobalVariables.DeepCopy();\r\n\t\t\tthis.Library = source.Library.DeepCopy();\r\n#if !SILVERLIGHT\r\n\t\t\tthis.PostedFiles = source.PostedFiles.DeepCopy();\r\n\t\t\tthis.SafeMode = source.SafeMode.DeepCopy();\r\n#endif\r\n            this.LastConfigurationModifiedTimeUtc = source.LastConfigurationModifiedTimeUtc;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a copy of the configuration.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration/*!*/ DeepCopy()\r\n\t\t{\r\n\t\t\treturn new GlobalConfiguration(this);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the configuration data are valid and complete and fills missing information \r\n\t\t/// by defaults or throws an exception.\r\n\t\t/// </summary>\r\n        /// <exception cref=\"System.Configuration.ConfigurationErrorsException\">Configuration is invalid or incomplete.</exception>\r\n\t\tinternal void Validate()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// .config file (set of .config files) latest modification time.\r\n        /// If it cannot be determined, it is equal to <see cref=\"DateTime.MinValue\"/>.\r\n        /// </summary>\r\n        public DateTime LastConfigurationModifiedTimeUtc { get; internal set; }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Conversions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Reflection;\r\n\r\nusing PHP.Library;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing MathEx = PHP.CoreCLR.MathEx;\r\n#else\r\nusing MathEx = System.Math;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Interfaces\r\n\r\n\t/// <summary>\r\n\t/// Interface provides methods for conversion between PHP.NET types.\r\n\t/// </summary>\r\n\tpublic interface IPhpConvertible\r\n\t{\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"GetTypeCode\"]/*' />\r\n\t\tPhpTypeCode GetTypeCode();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToDouble\"]/*' />\r\n\t\tdouble ToDouble();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToInteger\"]/*' />\r\n\t\tint ToInteger();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToLongInteger\"]/*' />\r\n\t\tlong ToLongInteger();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToBoolean\"]/*' />\r\n\t\tbool ToBoolean();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToPhpBytes\"]/*' />\r\n\t\tPhpBytes ToPhpBytes();\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToNumber\"]/*' />\r\n\t\tConvert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring ToString();\r\n\r\n        /// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring ToString(bool throwOnError, out bool success);\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Implements PHP conversions of arbitrary PHP.NET type to Framework types used as PHP.NET types.\r\n\t/// These are int, double, boolean and string.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic static class Convert\r\n\t{\r\n\t\t#region ClrLiteralToPhpLiteral\r\n\r\n        /// <summary>\r\n        /// Converts the CLR literal object into PHP compatible representation.\r\n        /// </summary>\r\n        /// <param name=\"value\">The literal to be converted.</param>\r\n        /// <returns>PHP (Phalanger) representation of the CLR literal.</returns>\r\n\t\tpublic static object ClrLiteralToPhpLiteral(object value)\r\n\t\t{\r\n            if (value == null ||\r\n                value.GetType() == typeof(int) ||\r\n                value.GetType() == typeof(string) ||\r\n                value.GetType() == typeof(bool) ||\r\n                value.GetType() == typeof(double) ||\r\n                value.GetType() == typeof(long))\r\n\t\t\t\treturn value;\r\n\r\n            // velue != null\r\n\r\n            if (value is Enum) return ClrEnumToPhpLiteral(value);\r\n\t\t\tif (value.GetType() == typeof(sbyte)) return (int)(sbyte)value;\r\n\t\t\tif (value.GetType() == typeof(byte)) return (int)(byte)value;\r\n\t\t\tif (value.GetType() == typeof(short)) return (int)(short)value;\r\n\t\t\tif (value.GetType() == typeof(ushort)) return (int)(ushort)value;\r\n\t\t\tif (value.GetType() == typeof(char)) return ((char)value).ToString();\r\n\t\t\tif (value.GetType() == typeof(float)) return (double)(float)value;\r\n\r\n\t\t\tif (value.GetType() == typeof(uint))\r\n\t\t\t{\r\n\t\t\t\tuint uint_value = (uint)value;\r\n\r\n\t\t\t\tif (uint_value <= Int32.MaxValue)\r\n\t\t\t\t\treturn (int)uint_value;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn (long)uint_value;\r\n\t\t\t}\r\n\r\n\t\t\tif (value.GetType() == typeof(ulong))\r\n\t\t\t{\r\n\t\t\t\tulong ulong_value = (ulong)value;\r\n\r\n\t\t\t\tif (ulong_value <= Int32.MaxValue)\r\n\t\t\t\t\treturn (int)ulong_value;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn unchecked((long)ulong_value);\r\n\t\t\t}\r\n\r\n\t\t\tif (value.GetType() == typeof(decimal))\r\n\t\t\t{\r\n                decimal decimal_value = (decimal)value;\r\n                if (Decimal.Truncate(decimal_value) != decimal_value)\r\n                    return Decimal.ToDouble(decimal_value);\r\n\t\t\t\tif (decimal_value >= Int32.MinValue && decimal_value <= Int32.MaxValue)\r\n\t\t\t\t\treturn Decimal.ToInt32(decimal_value);\r\n\t\t\t\telse if (decimal_value >= Int64.MinValue && decimal_value <= Int64.MaxValue)\r\n\t\t\t\t\treturn Decimal.ToInt64(decimal_value);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn decimal_value.ToString();\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(\"Invalid literal type\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Converts System.Enum to proper PHP (Phalanger) literal object.\r\n        /// </summary>\r\n        /// <param name=\"value\">Enum to be converted. Cannot be null, must be Enum.</param>\r\n        /// <returns>Int32 or Int64 representation of the value.</returns>\r\n        /// <remarks>The Enum is passed as object for easier manipulation inside the method.</remarks>\r\n        internal static object ClrEnumToPhpLiteral(object/*!*/value)\r\n        {\r\n            Debug.Assert(value is Enum, \"value is expected to be Enum and not null!\");\r\n\r\n            Type underlyingType = Enum.GetUnderlyingType(value.GetType());\r\n\r\n            if (underlyingType == typeof(int))\r\n                return (int)value;\r\n            \r\n            if (underlyingType == typeof(sbyte))\r\n                return (int)(sbyte)value;\r\n            \r\n            if (underlyingType == typeof(short))\r\n                return (int)(short)value;\r\n            \r\n            if (underlyingType == typeof(long))\r\n                return (long)value;\r\n            \r\n            if (underlyingType == typeof(uint))\r\n            {\r\n                uint uint_value = (uint)value;\r\n\r\n                if (uint_value <= Int32.MaxValue)\r\n                    return (int)uint_value;\r\n                else\r\n                    return (long)uint_value;\r\n            }\r\n            \r\n            if (underlyingType == typeof(byte))\r\n                return (int)(byte)value;\r\n            \r\n            if (underlyingType == typeof(ushort))\r\n                return (int)(ushort)value;\r\n            \r\n            if (underlyingType == typeof(ulong))\r\n            {\r\n                ulong ulong_value = (ulong)value;\r\n\r\n                if (ulong_value <= Int32.MaxValue)\r\n                    return (int)ulong_value;\r\n                else\r\n                    return unchecked((long)ulong_value);\r\n            }\r\n\r\n            Debug.Fail(\"Invalid literal type\");\r\n            throw null;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ObjectToXxxx\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into Unicode character.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"obj\"/> doesn't consist of a single character. (Warning)</exception>\r\n\t\t[Emitted]\r\n\t\tpublic static char ObjectToChar(object obj)\r\n\t\t{\r\n\t\t\t// we can simply convert the value to the string since we can expect\r\n\t\t\t// that the value is one character long, other lengths are errors anyway\r\n\t\t\t// so no optimization is necessary\r\n\t\t\treturn StringToChar(ObjectToString(obj));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into string value using the same \r\n\t\t/// conversion algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>If <paramref name=\"obj\"/> is null then the <see cref=\"String.Empty\"/> is returned. This method cannot return null.</remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static string ObjectToString(object obj)\r\n\t\t{\r\n\t\t\tif (ReferenceEquals(obj, null)) return String.Empty;\r\n\r\n\t\t\tbool success;\r\n\t\t\tstring result = TryObjectToString(obj, out success);\r\n\r\n\t\t\tif (!success)\r\n\t\t\t{\r\n\t\t\t\t// PhpReference, PhpArray, PhpResource, DObject:\r\n\t\t\t\tIPhpConvertible conv = obj as IPhpConvertible;\r\n\t\t\t\tif (conv != null) return conv.ToString();\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into <see cref=\"PhpBytes\"/> value using the same \r\n\t\t/// conversion algorithms as PHP when converting to string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>If <paramref name=\"obj\"/> is a <B>null</B> then an empty bytes are returned.</remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static PhpBytes ObjectToPhpBytes(object obj)\r\n\t\t{\r\n            if (ReferenceEquals(obj, null)) return PhpBytes.Empty;\r\n\r\n\t\t\tif (obj.GetType() == typeof(PhpBytes))\r\n            {\r\n                return (PhpBytes)obj;\r\n            }\r\n            else if (obj.GetType() == typeof(string))\r\n\t\t\t{\r\n\t\t\t\treturn new PhpBytes((string)obj);\r\n\t\t\t}\r\n            else if (obj.GetType() == typeof(int))\r\n\t\t\t{\r\n\t\t\t\treturn new PhpBytes(((int)obj).ToString());\r\n\t\t\t}\r\n            else if (obj.GetType() == typeof(long))\r\n\t\t\t{\r\n\t\t\t\treturn new PhpBytes(((long)obj).ToString());\r\n\t\t\t}\r\n            else if (obj.GetType() == typeof(double))\r\n\t\t\t{\r\n\t\t\t\t// this is not exactly the same behavior as in PHP, but it's very close: \r\n\t\t\t\treturn new PhpBytes(DoubleToString((double)obj));\r\n\t\t\t}\r\n            else if (obj.GetType() == typeof(bool))\r\n\t\t\t{\r\n\t\t\t\treturn (bool)obj ? new PhpBytes(1) : PhpBytes.Empty;\r\n\t\t\t}\r\n\r\n\t\t\t// PhpReference, PhpArray, PhpResource, PhpObject, PhpBytes, null:\r\n\t\t\tIPhpConvertible php_conv = obj as IPhpConvertible;\r\n\t\t\treturn (php_conv == null) ? PhpBytes.Empty : php_conv.ToPhpBytes();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into boolean value using the same \r\n\t\t/// conversion algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static bool ObjectToBoolean(object obj)\r\n\t\t{\r\n            if (obj == null) return false;\r\n\r\n            if (obj.GetType() == typeof(bool)) return (bool)obj;\r\n            if (obj.GetType() == typeof(int)) return (int)obj != 0;\r\n            if (obj.GetType() == typeof(double)) return (double)obj != 0.0;\r\n            if (obj.GetType() == typeof(long)) return (long)obj != 0;\r\n\t\t\tif (obj.GetType() == typeof(string)) return StringToBoolean((string)obj);\r\n\r\n\t\t\t// PhpReference, PhpArray, PhpResource, DObject, PhpBytes:\r\n\t\t\tIPhpConvertible conv = obj as IPhpConvertible;\r\n\t\t\tif (conv != null) return conv.ToBoolean();\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into integer value using the same \r\n\t\t/// conversion algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static int ObjectToInteger(object obj)\r\n\t\t{\r\n            if (obj == null) return 0;\r\n\r\n            if (obj.GetType() == typeof(int)) return (int)obj;\r\n            if (obj.GetType() == typeof(bool)) return (bool)obj ? 1 : 0;\r\n            if (obj.GetType() == typeof(long)) return unchecked((int)(long)obj);\r\n            if (obj.GetType() == typeof(double)) return unchecked((int)(double)obj);\r\n            if (obj.GetType() == typeof(string)) return StringToInteger((string)obj);\r\n\r\n\t\t\t// PhpString, PhpReference, PhpArray, PhpResource, DObject, PhpBytes:\r\n\t\t\tIPhpConvertible conv = obj as IPhpConvertible;\r\n\t\t\tif (conv != null) return conv.ToInteger();\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into long integer value using the same \r\n\t\t/// conversion algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static long ObjectToLongInteger(object obj)\r\n\t\t{\r\n            if (obj == null) return 0;\r\n\r\n            if (obj.GetType() == typeof(long)) return (long)obj;\r\n            if (obj.GetType() == typeof(int)) return (int)obj;\r\n            if (obj.GetType() == typeof(bool)) return (long)((bool)obj ? 1 : 0);\r\n            if (obj.GetType() == typeof(double)) return unchecked((long)(double)obj);\r\n            if (obj.GetType() == typeof(string)) return StringToLongInteger((string)obj);\r\n\r\n\t\t\t// PhpString, PhpReference, PhpArray, PhpResource, DObject, PhpBytes:\r\n\t\t\tIPhpConvertible conv = obj as IPhpConvertible;\r\n\t\t\tif (conv != null) return conv.ToLongInteger();\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type into double precision floating-point\r\n\t\t/// value using the same conversion algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static double ObjectToDouble(object obj)\r\n\t\t{\r\n            if (obj == null) return 0.0;\r\n            if (obj.GetType() == typeof(double)) return (double)obj;\r\n            return ObjectToDoubleEpilogue(obj);\r\n\t\t}\r\n\r\n        private static double ObjectToDoubleEpilogue(object obj)\r\n        {\r\n            if (obj.GetType() == typeof(int)) return (double)(int)obj;\r\n            if (obj.GetType() == typeof(string)) return StringToDouble((string)obj);\r\n            if (obj.GetType() == typeof(bool)) return (bool)obj ? 1.0 : 0.0;\r\n            if (obj.GetType() == typeof(long)) return (double)(long)obj;\r\n\r\n            // PhpString, PhpReference, PhpArray, PhpResource, DObject, PhpBytes:\r\n            IPhpConvertible conv = obj as IPhpConvertible;\r\n            if (conv != null) return conv.ToDouble();\r\n\r\n            return 0.0;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type into <see cref=\"PhpArray\"/> using the same conversion\r\n\t\t/// algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The value to convert.</param>\r\n\t\t/// <returns>The converted value. Doesn't do a deep copy.</returns>\r\n\t\t/// <remarks>Variables are not implicitly converted to arrays.</remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static PhpArray ObjectToPhpArray(object var)\r\n\t\t{\r\n            if (var == null) return new PhpArray(0);\r\n            \r\n            PhpArray array;\r\n\t\t\tDObject obj;\r\n\r\n            if (var.GetType() == typeof(PhpArray))  // faster type check, otherwise try iherited classes in following check\r\n                return (PhpArray)var;\r\n\r\n            if ((array = var as PhpArray) != null)\r\n                return array;\r\n            \r\n            if ((obj = var as DObject) != null)\r\n\t\t\t\treturn obj.ToPhpArray();\t\t\t\r\n\t\t\t\r\n\t\t\t// Integer, Double, Boolean, String, PhpBytes, PhpResource\r\n\t\t\tPhpArray result = new PhpArray(1);\r\n\t\t\tresult.Add(var);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type into <see cref=\"DObject\"/> using the same conversion\r\n\t\t/// algorithms as PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The value to convert.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Doesn't do a deep copy.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static DObject/*!*/ObjectToDObject(object var, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\t\t\tDObject obj;\r\n\r\n            if ((array = var as PhpArray) != null)\r\n                return PhpArrayToDObject(array, context);\r\n\t\t\t\r\n\t\t\tif (var == null) return new stdClass(context);\r\n\r\n\t\t\tif ((obj = var as DObject) != null) return obj;\r\n\r\n\t\t\t// Integer, Double, Boolean, String, PhpBytes, PhpResource:\r\n\t\t\tobj = new stdClass(context);\r\n            obj.RuntimeFields = new PhpArray();\r\n\t\t\tobj.RuntimeFields.Add(\"scalar\", var);\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type into <see cref=\"PhpCallback\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The value to convert.</param>\r\n\t\t/// <returns>\r\n\t\t/// The converted value or <B>null</B> if <paramref name=\"var\"/> is empty (<see cref=\"PhpVariable.IsEmpty\"/>)\r\n\t\t/// or could not be converted.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">The variable is non-empty but does not have a valid structure to be used\r\n\t\t/// as a callback (Warning).</exception>\r\n\t\t[Emitted]\r\n\t\tpublic static PhpCallback ObjectToCallback(object var)\r\n\t\t{\r\n\t\t\treturn ObjectToCallback(var, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type into <see cref=\"PhpCallback\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The value to convert (real object must be wrapped).</param>\r\n\t\t/// <param name=\"quiet\">If <B>true</B>, no warning should be thrown if <paramref name=\"var\"/> does not have\r\n\t\t/// a valid structure.</param>\r\n\t\t/// <returns>\r\n\t\t/// Either a valid callback, an invalid callback singleton <see cref=\"PhpCallback.Invalid\"/>,\r\n\t\t/// or <B>null</B> if <paramref name=\"var\"/> is empty (<see cref=\"PhpVariable.IsEmpty\"/>).\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"quiet\"/> is <B>false</B> and the variable is non-empty but\r\n\t\t/// does not have a valid structure to be used as a callback (Warning).</exception>\r\n\t\tpublic static PhpCallback ObjectToCallback(object var, bool quiet)\r\n\t\t{\r\n            // empty variable\r\n            if (PhpVariable.IsEmpty(var)) return null;\r\n            \r\n            // function name given as string-like type\r\n\t\t\tstring name = PhpVariable.AsString(var);\r\n\t\t\tif (name != null) return new PhpCallback(name);\r\n\r\n\t\t\t// (instance/class name, method name) pair given as PhpArray\r\n\t\t\tPhpArray array = var as PhpArray;\r\n\t\t\tif (array != null && array.Count == 2)\r\n\t\t\t{\r\n\t\t\t\tobject item1 = PhpVariable.Dereference(array[1]);\r\n\r\n\t\t\t\t// method name given as string-like type\r\n\t\t\t\tname = PhpVariable.AsString(item1);\r\n\t\t\t\tif (name != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject item0 = PhpVariable.Dereference(array[0]);\r\n\r\n\t\t\t\t\t// instance\r\n\t\t\t\t\tDObject instance = item0 as DObject;\r\n\t\t\t\t\tif (instance != null) return new PhpCallback(instance, name);\r\n\r\n\t\t\t\t\t// class name given as string-like type\r\n\t\t\t\t\tstring cls_name = PhpVariable.AsString(item0);\r\n\t\t\t\t\tif (cls_name != null) return new PhpCallback(cls_name, name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            // DObject::__invoke\r\n            DObject obj;\r\n            DRoutineDesc method;\r\n            if ((obj = var as DObject) != null &&\r\n                obj.TypeDesc.GetMethod(Name.SpecialMethodNames.Invoke, null, out method) != GetMemberResult.NotFound)\r\n            {\r\n                // __invoke() does not respect visibilities\r\n                return new PhpCallback(obj, method);\r\n            }\r\n            \r\n            // invalid callback\r\n            if (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_callback\"));\r\n\t\t\treturn PhpCallback.Invalid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP.NET type to a <see cref=\"DTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The value to convert.</param>\r\n\t\t/// <param name=\"resolveFlags\">\r\n\t\t/// Flags. Only <see cref=\"ResolveTypeFlags.UseAutoload\"/>, \r\n\t\t/// <see cref=\"ResolveTypeFlags.SkipGenericNameParsing\"/> and\r\n\t\t/// <see cref=\"ResolveTypeFlags.ThrowErrors\"/> are valid.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <param name=\"context\">Current script context.</param>\r\n\t\t/// <param name=\"nameContext\">Current naming context.</param>\r\n        /// <param name=\"genericArgs\">Array of function type params. Stored in pairs in a form of [(string)name1,(DTypeDescs)type1, .., ..]. Can be null.</param>\r\n        /// <returns>The type desc or <B>null</B> on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The <paramref name=\"var\"/> is not a string or empty string or not <see cref=\"DObject\"/>. (Error)</exception>\r\n\t\t/// <exception cref=\"PhpException\">The class with the given <paramref name=\"var\"/> was not found\r\n        /// (only if <paramref name=\"resolveFlags\"/> has <see cref=\"ResolveTypeFlags.ThrowErrors\"/>). (Error)</exception>\r\n\t\t[Emitted]\r\n\t\tpublic static DTypeDesc ObjectToTypeDesc(object var, ResolveTypeFlags resolveFlags, DTypeDesc caller, ScriptContext/*!*/ context, NamingContext nameContext, object[] genericArgs)\r\n\t\t{\r\n\t\t\tDebug.Assert((resolveFlags & ~(ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors |\r\n\t\t\t\tResolveTypeFlags.SkipGenericNameParsing)) == 0, \"Invalid flags in ObjectToTypeDesc.\");\r\n\r\n\t\t\tDObject obj;\r\n\t\t\tif ((obj = var as DObject) != null)\r\n\t\t\t{\r\n\t\t\t\t// var is an instance\r\n\t\t\t\treturn obj.TypeDesc;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstring name = PhpVariable.AsString(var);\r\n\t\t\t\tif (String.IsNullOrEmpty(name))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"invalid_class_name\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n                return StringToTypeDesc(name, resolveFlags, caller, context, nameContext, genericArgs);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TryObjectToXxx\r\n\r\n\t\t// assumes obj is of a PHP type\r\n\r\n\t\tprivate delegate T TryObjectToTypeDelegate<T>(object obj, out bool success);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores instances of <see cref=\"TryObjectToTypeDelegate{T}\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate static Dictionary<Type, Delegate> conversionRoutines = new Dictionary<Type, Delegate>();\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Boolean TryObjectToBoolean(object obj, out bool success)\r\n\t\t{\r\n            if (obj != null)\r\n            {\r\n                success = true;\r\n\r\n                if (obj.GetType() == typeof(bool)) return (bool)obj;\r\n                if (obj.GetType() == typeof(int)) return (int)obj != 0;\r\n                if (obj.GetType() == typeof(double)) return (double)obj != 0.0;\r\n                if (obj.GetType() == typeof(long)) return (long)obj != 0;\r\n\r\n                // we have to check PHP string types separately from the rest of IPhpConvertibles here\r\n                // as only these strings are \"naturally\" convertible to boolean:\r\n                if (obj.GetType() == typeof(string)) return StringToBoolean((string)obj);\r\n                if (obj.GetType() == typeof(PhpBytes)) return ((PhpBytes)obj).ToBoolean();\r\n                if (obj.GetType() == typeof(PhpString)) return ((PhpString)obj).ToBoolean();\r\n            }\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static SByte TryObjectToInt8(object obj, out bool success)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= SByte.MinValue && result <= SByte.MaxValue;\r\n\t\t\treturn unchecked((SByte)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int16 TryObjectToInt16(object obj, out bool success)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= Int16.MinValue && result <= Int16.MaxValue;\r\n\t\t\treturn unchecked((Int16)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Byte TryObjectToUInt8(object obj, out bool success)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= Byte.MinValue && result <= Byte.MaxValue;\r\n\t\t\treturn unchecked((Byte)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt16 TryObjectToUInt16(object obj, out bool success)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= UInt16.MinValue && result <= UInt16.MaxValue;\r\n\t\t\treturn unchecked((UInt16)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt32 TryObjectToUInt32(object obj, out bool success)\r\n\t\t{\r\n\t\t\tlong result = TryObjectToInt64(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= UInt32.MinValue && result <= UInt32.MaxValue;\r\n\t\t\treturn unchecked((UInt32)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int32 TryObjectToInt32(object obj, out bool success)\r\n\t\t{\r\n\t\t\tif (obj != null)\r\n            {\r\n                success = true;\r\n\r\n                if (obj.GetType() == typeof(int)) return (int)obj;\r\n                if (obj.GetType() == typeof(bool)) return (bool)obj ? 1 : 0;\r\n\r\n                if (obj.GetType() == typeof(long))\r\n                {\r\n                    long lval = (long)obj;\r\n                    success = lval >= Int32.MinValue && lval <= Int32.MaxValue;\r\n                    return unchecked((Int32)lval);\r\n                }\r\n\r\n                if (obj.GetType() == typeof(double))\r\n                {\r\n                    double dval = (double)obj;\r\n                    success = dval >= Int32.MinValue && dval <= Int32.MaxValue;\r\n                    return unchecked((Int32)dval);\r\n                }\r\n\r\n                string s;\r\n                if ((s = PhpVariable.AsString(obj)) != null)\r\n                {\r\n                    int ival;\r\n                    double dval;\r\n                    long lval;\r\n\r\n                    // successfull iff the number encoded in the string fits the Int32:\r\n                    NumberInfo info = StringToNumber(s, out ival, out lval, out dval);\r\n                    if ((info & (NumberInfo.Integer | NumberInfo.IsNumber)) == (NumberInfo.Integer | NumberInfo.IsNumber))\r\n                        return ival;\r\n\r\n                    success = false;\r\n                    return unchecked((Int32)lval);\r\n                }\r\n            }\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int64 TryObjectToInt64(object obj, out bool success)\r\n\t\t{\r\n            if (obj != null)\r\n            {\r\n                success = true;\r\n\r\n                if (obj.GetType() == typeof(int)) return (int)obj;\r\n                if (obj.GetType() == typeof(long)) return (long)obj;\r\n                if (obj.GetType() == typeof(bool)) return (bool)obj ? 1 : 0;\r\n\r\n                if (obj.GetType() == typeof(double))\r\n                {\r\n                    double dval = (double)obj;\r\n                    success = dval >= Int64.MinValue && dval <= Int64.MaxValue;\r\n                    return unchecked((Int32)dval);\r\n                }\r\n\r\n                string s;\r\n                if ((s = PhpVariable.AsString(obj)) != null)\r\n                {\r\n                    int ival;\r\n                    double dval;\r\n                    long lval;\r\n\r\n                    // successfull iff the number encoded in the string fits Int32 or Int64:\r\n                    NumberInfo info = StringToNumber(s, out ival, out lval, out dval);\r\n                    if ((info & NumberInfo.Integer) != 0)\r\n                        return ival;\r\n                    if ((info & NumberInfo.LongInteger) != 0)\r\n                        return lval;\r\n\r\n                    success = false;\r\n                    return unchecked((Int64)dval);\r\n                }\r\n            }\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt64 TryObjectToUInt64(object obj, out bool success)\r\n\t\t{\r\n            if (obj != null)\r\n            {\r\n                success = true;\r\n\r\n                if (obj.GetType() == typeof(int))\r\n                {\r\n                    int ival = (int)obj;\r\n                    success = ival >= 0;\r\n                    return unchecked((UInt64)ival);\r\n                }\r\n\r\n                if (obj.GetType() == typeof(long))\r\n                {\r\n                    long lval = (long)obj;\r\n                    success = lval >= 0;\r\n                    return unchecked((UInt64)lval);\r\n                }\r\n\r\n                if (obj.GetType() == typeof(bool))\r\n                    return (ulong)((bool)obj ? 1 : 0);\r\n\r\n                if (obj.GetType() == typeof(double))\r\n                {\r\n                    double dval = (double)obj;\r\n                    success = dval >= UInt64.MinValue && dval <= UInt64.MaxValue;\r\n                    return unchecked((UInt64)dval);\r\n                }\r\n\r\n                string s;\r\n                if ((s = PhpVariable.AsString(obj)) != null)\r\n                {\r\n                    int ival;\r\n                    double dval;\r\n                    long lval;\r\n\r\n                    // successfull iff the number encoded in the string fits Int32 or Int64:\r\n                    NumberInfo info = StringToNumber(s, out ival, out lval, out dval);\r\n                    if ((info & NumberInfo.Integer) != 0)\r\n                        return unchecked((UInt64)ival);\r\n                    if ((info & NumberInfo.LongInteger) != 0)\r\n                        return unchecked((UInt64)lval);\r\n\r\n                    success = dval >= UInt64.MinValue && dval <= UInt64.MaxValue;\r\n                    return unchecked((UInt64)dval);\r\n                }\r\n            }\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Single TryObjectToSingle(object obj, out bool success)\r\n\t\t{\r\n\t\t\tdouble result = TryObjectToDouble(obj, out success);\r\n\r\n\t\t\tsuccess &= result >= Single.MinValue && result <= Single.MaxValue;\r\n\t\t\treturn unchecked((Single)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Double TryObjectToDouble(object obj, out bool success)\r\n\t\t{\r\n            if (obj != null)\r\n            {\r\n                string s;\r\n                success = true;\r\n\r\n                if (obj.GetType() == typeof(double)) return (double)obj;\r\n                if (obj.GetType() == typeof(int)) return (double)(int)obj;\r\n                if ((s = PhpVariable.AsString(obj)) != null) return StringToDouble(s);\r\n                if (obj.GetType() == typeof(bool)) return (bool)obj ? 1.0 : 0.0;\r\n                if (obj.GetType() == typeof(long)) return (double)(long)obj;\r\n            }\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn 0.0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Decimal TryObjectToDecimal(object obj, out bool success)\r\n\t\t{\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\t\t\tdouble dval;\r\n\r\n\t\t\t// ignores the higher precision of decimal:\r\n\t\t\tswitch (Convert.ObjectToNumber(obj, out ival, out lval, out dval) & NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase NumberInfo.Integer: success = true; return ival;\r\n\t\t\t\tcase NumberInfo.LongInteger: success = true; return lval;\r\n\t\t\t\tcase NumberInfo.Double: success = true; return unchecked((decimal)dval);\r\n\t\t\t\tcase NumberInfo.Unconvertible: success = false; return 0;\r\n                default: throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Char TryObjectToChar(object obj, out bool success)\r\n\t\t{\r\n\t\t\tstring result = TryObjectToString(obj, out success);\r\n\r\n\t\t\tif (result.Length == 1)\r\n\t\t\t\treturn result[0];\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn '\\0';\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static String TryObjectToString(object obj, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = true;\r\n\r\n            if (obj == null) return String.Empty;\r\n            //if ((s = PhpVariable.AsString(obj)) != null) return s;\r\n            if (obj.GetType() == typeof(string)) return (string)obj;\r\n            if (obj.GetType() == typeof(PhpString)) return ((PhpString)obj).ToString();\r\n            if (obj.GetType() == typeof(PhpBytes)) return ((PhpBytes)obj).ToString();\r\n\r\n            if (obj.GetType() == typeof(int)) return obj.ToString();\r\n            if (obj.GetType() == typeof(bool)) return ((bool)obj) ? \"1\" : String.Empty;\r\n            if (obj.GetType() == typeof(double)) return DoubleToString((double)obj);\r\n            if (obj.GetType() == typeof(long)) return obj.ToString();\r\n\r\n\t\t\t// others:\r\n\t\t\tsuccess = false;\r\n\t\t\treturn String.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to convert to <see cref=\"DateTime\"/>.\r\n\t\t/// Conversion is successful if the object is \r\n\t\t/// <list type=\"bullet\">\r\n\t\t///\t\t<term>a number that fits the long integer; the value is treated as number of ticks</term> \r\n\t\t///   <term>a stringified form of such number (e.g. \"1023\"); the value is treated as number of ticks</term>\r\n\t\t///   <term>a string encoding a valid date-time format; the value is parsed by <see cref=\"DateTime.TryParse(string, out DateTime)\"/></term>\r\n\t\t/// </list>\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\"></param>\r\n\t\t/// <param name=\"success\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[Emitted]\r\n\t\tpublic static DateTime TryObjectToDateTime(object obj, out bool success)\r\n\t\t{\r\n\t\t\tstring str = TryObjectToString(obj, out success);\r\n\r\n\t\t\tif (success)\r\n\t\t\t{\r\n\t\t\t\tDateTime result;\r\n#if !SILVERLIGHT\r\n\t\t\t\tsuccess = DateTime.TryParse(str, out result);\r\n#else\r\n\t\t\t\t// TODO: Any way to optimize this?\r\n\t\t\t\tsuccess = true;\r\n\t\t\t\tresult = default(DateTime);\r\n\t\t\t\ttry { result = DateTime.Parse(str); } catch { success = false; }\r\n#endif\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\treturn new DateTime();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts to <see cref=\"DBNull\"/>. \r\n\t\t/// The conversion is always successful and results to the <see cref=\"DBNull.Value\"/> singleton.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static DBNull TryObjectToDBNull(object obj, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = true;\r\n\t\t\treturn DBNull.Value;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToClass<T>(object obj, out bool success)\r\n\t\t\twhere T : class\r\n\t\t{\r\n\t\t\tsuccess = true;\r\n\t\t\tif (obj == null) return null;\r\n\r\n\t\t\tT result = null;\r\n\t\t\tif ((result = PhpVariable.Unwrap(obj) as T) != null && (!(result is IPhpVariable) || result is PhpObject))\r\n\t\t\t{\r\n\t\t\t\t// do not leak out instances implementing IPhpVariable (e.g. if T is object)\r\n\t\t\t\t// TODO: Add IPhpVariable.Unwrap\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn default(T);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToDelegate<T>(object obj, out bool success)\r\n\t\t\twhere T : class\r\n\t\t{\r\n\t\t\tT result = null;\r\n\t\t\tobject bare_obj = PhpVariable.Unwrap(obj);\r\n\t\t\tif (bare_obj == null || (result = bare_obj as T) != null)\r\n\t\t\t{\r\n\t\t\t\tsuccess = true;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t// try to convert the object to PhpCallback\r\n\t\t\tPhpCallback callback = ObjectToCallback(obj, true);\r\n\t\t\tif (callback != null && callback.Bind(true))\r\n\t\t\t{\r\n\t\t\t\t// generate a conversion stub\r\n\t\t\t\tresult = EventClass<T>.GetStub(\r\n\t\t\t\t\tcallback.TargetInstance,\r\n\t\t\t\t\tcallback.TargetRoutine,\r\n\t\t\t\t\tcallback.IsBoundToCaller ? callback.RoutineName : null);\r\n\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn default(T);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T[] TryObjectToArray<T>(object obj, out bool success)\r\n\t\t{\r\n\t\t\tT[] result = PhpVariable.Unwrap(obj) as T[];\r\n\t\t\tif (result != null)\r\n\t\t\t{\r\n\t\t\t\tsuccess = true;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t// try to convert PhpArray to the desired array\r\n\t\t\tPhpArray array = obj as PhpArray;\r\n\t\t\tif (array != null && array.StringCount == 0)\r\n\t\t\t{\r\n\t\t\t\tresult = new T[array.MaxIntegerKey + 1];\r\n\r\n\t\t\t\tfor (int i = 0; i < result.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject item;\r\n\t\t\t\t\tif (array.TryGetValue(i, out item))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// try to convert the item\r\n\t\t\t\t\t\tresult[i] = TryObjectToType<T>(item, out success);\r\n\t\t\t\t\t\tif (!success) return default(T[]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuccess = true;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = false;\r\n\t\t\treturn default(T[]);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToStruct<T>(object obj, out bool success)\r\n\t\t\twhere T : struct\r\n\t\t{\r\n\t\t\tobj = PhpVariable.Unwrap(obj);\r\n\r\n\t\t\tsuccess = obj is T;\r\n\t\t\treturn success ? (T)obj : default(T);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used when the type is unknown at compiler-time, e.g. it is a generic parameter.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToType<T>(object obj, out bool success)\r\n\t\t{\r\n\t\t\tType target_type = typeof(T);\r\n\t\t\tDelegate conversion_routine;\r\n\r\n\t\t\tlock (conversionRoutines)\r\n\t\t\t{\r\n\t\t\t\tif (!conversionRoutines.TryGetValue(target_type, out conversion_routine))\r\n\t\t\t\t{\r\n\t\t\t\t\tconversion_routine = CreateConversionDelegate(target_type);\r\n\t\t\t\t\tconversionRoutines.Add(target_type, conversion_routine);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn ((TryObjectToTypeDelegate<T>)conversion_routine)(obj, out success);\r\n\t\t}\r\n\r\n\t\tprivate static Delegate CreateConversionDelegate(Type targetType)\r\n\t\t{\r\n\t\t\tswitch (Type.GetTypeCode(targetType))\r\n\t\t\t{\r\n\t\t\t\tcase TypeCode.Boolean: return new TryObjectToTypeDelegate<bool>(TryObjectToBoolean);\r\n\t\t\t\tcase TypeCode.SByte: return new TryObjectToTypeDelegate<sbyte>(TryObjectToInt8);\r\n\t\t\t\tcase TypeCode.Int16: return new TryObjectToTypeDelegate<short>(TryObjectToInt16);\r\n\t\t\t\tcase TypeCode.Int32: return new TryObjectToTypeDelegate<int>(TryObjectToInt32);\r\n\t\t\t\tcase TypeCode.Int64: return new TryObjectToTypeDelegate<long>(TryObjectToInt64);\r\n\t\t\t\tcase TypeCode.Byte: return new TryObjectToTypeDelegate<byte>(TryObjectToUInt8);\r\n\t\t\t\tcase TypeCode.UInt16: return new TryObjectToTypeDelegate<ushort>(TryObjectToUInt16);\r\n\t\t\t\tcase TypeCode.UInt32: return new TryObjectToTypeDelegate<uint>(TryObjectToUInt32);\r\n\t\t\t\tcase TypeCode.UInt64: return new TryObjectToTypeDelegate<ulong>(TryObjectToUInt64);\r\n\t\t\t\tcase TypeCode.Single: return new TryObjectToTypeDelegate<float>(TryObjectToSingle);\r\n\t\t\t\tcase TypeCode.Double: return new TryObjectToTypeDelegate<double>(TryObjectToDouble);\r\n\t\t\t\tcase TypeCode.Decimal: return new TryObjectToTypeDelegate<decimal>(TryObjectToDecimal);\r\n\t\t\t\tcase TypeCode.Char: return new TryObjectToTypeDelegate<char>(TryObjectToChar);\r\n\t\t\t\tcase TypeCode.String: return new TryObjectToTypeDelegate<string>(TryObjectToString);\r\n\t\t\t\tcase TypeCode.DateTime: return new TryObjectToTypeDelegate<DateTime>(TryObjectToDateTime);\r\n\t\t\t\tcase TypeCode.DBNull: return new TryObjectToTypeDelegate<DBNull>(TryObjectToDBNull);\r\n\r\n\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tType generic_arg;\r\n\t\t\t\t\t\tMethodInfo generic_method;\r\n\r\n\t\t\t\t\t\tif (targetType.IsValueType)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgeneric_arg = targetType;\r\n\t\t\t\t\t\t\tgeneric_method = Emit.Methods.Convert.TryObjectToStruct;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (targetType.IsArray)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tgeneric_arg = targetType.GetElementType();\r\n\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.Convert.TryObjectToArray;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tgeneric_arg = targetType;\r\n\t\t\t\t\t\t\t\tif (typeof(Delegate).IsAssignableFrom(targetType))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.Convert.TryObjectToDelegate;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.Convert.TryObjectToClass;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// create a new delegate type instantiation and a new delegate instance\r\n\t\t\t\t\t\tType delegate_type = typeof(TryObjectToTypeDelegate<>).MakeGenericType(targetType);\r\n\t\t\t\t\t\treturn Delegate.CreateDelegate(delegate_type, generic_method.MakeGenericMethod(generic_arg));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n                        throw new ArgumentException();\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Narrowing & Coercion\r\n\r\n\t\tpublic static int NarrowToInt32(long value)\r\n\t\t{\r\n\t\t\tif (value < Int32.MinValue)\r\n\t\t\t\treturn Int32.MinValue;\r\n\r\n\t\t\tif (value > Int32.MaxValue)\r\n\t\t\t\treturn Int32.MaxValue;\r\n\r\n\t\t\treturn (int)value;\r\n\t\t}\r\n\r\n\t\tpublic static uint NarrowToUInt32(long value)\r\n\t\t{\r\n\t\t\tif (value > UInt32.MaxValue)\r\n\t\t\t\treturn UInt32.MaxValue;\r\n\r\n\t\t\tif (value < UInt32.MinValue)\r\n\t\t\t\treturn UInt32.MinValue;\r\n\r\n\t\t\treturn (uint)value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region String to Number Conversions\r\n\r\n\t\t[Flags]\r\n\t\tpublic enum NumberInfo\r\n\t\t{\r\n\t\t\tInteger = 1,\r\n\t\t\tLongInteger = 2,\r\n\t\t\tDouble = 4,\r\n\t\t\tUnconvertible = 16,\r\n\r\n\t\t\tTypeMask = Integer | LongInteger | Double | Unconvertible,\r\n\r\n\t\t\tIsNumber = 64,\r\n\t\t\tIsHexadecimal = 128,\r\n\r\n            /// <summary>\r\n            /// The original object was PHP array. This has an effect on most PHP arithmetic operators.\r\n            /// </summary>\r\n            IsPhpArray = 256,\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string to integer value and double value and decides whether it represents a number as a whole.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"s\">The string to convert.</param>\r\n\t\t/// <param name=\"limit\">Maximum zero-based index within given <paramref name=\"s\"/> to be proccessed.\r\n        /// Must be greater than or equal <c>0</c> and less than or equal to string length.</param>\r\n        /// <param name=\"from\">\r\n\t\t/// A position where to start parsing.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"l\">\r\n\t\t/// Returns a position where long-integer-parsing ended \r\n\t\t/// (the first character not included in the resulting double value).\r\n\t\t/// </param>\r\n\t\t/// <param name=\"d\">\r\n\t\t/// Returns a position where double-parsing ended\r\n\t\t/// (the first character not included in the resulting double value).\r\n\t\t/// </param>\r\n\t\t/// <param name=\"intValue\">Result of the conversion to integer.</param>\r\n\t\t/// <param name=\"longValue\">Result of the conversion to long integer.</param>\r\n\t\t/// <param name=\"doubleValue\">Result of the conversion to double.</param>\r\n\t\t/// <returns>\r\n\t\t/// Information about parsed number including its type, which is the narrowest one that fits.\r\n\t\t/// E.g. \r\n\t\t/// IsNumber(\"10 xyz\", ...) includes NumberInfo.Integer,\r\n\t\t/// IsNumber(\"10000000000000 xyz\", ...) includes NumberInfo.LongInteger,\r\n\t\t/// IsNumber(\"10.9 xyz\", ...) includes NumberInfo.Double,\r\n\t\t/// IsNumber(\"10.9\", ...) includes NumberInfo.IsNumber and NumberInfo.Double.\r\n\t\t/// \r\n\t\t/// The return value always includes one of NumberInfo.Integer, NumberInfo.LongInteger, NumberInfo.Double\r\n\t\t/// and never NumberInfo.Unconvertible (as each string is convertible to a number).\r\n\t\t/// </returns>\r\n        internal static NumberInfo IsNumber(string s, int limit, int from, out int l, out int d,\r\n            out int intValue, out long longValue, out double doubleValue)\r\n        {\r\n            if (string.IsNullOrEmpty(s))\r\n            {\r\n                l = d = intValue = 0;\r\n                longValue = 0;\r\n                doubleValue = 0.0;\r\n                return NumberInfo.Integer;\r\n            }\r\n\r\n            // invariant after return: 0 <= i <= l <= d <= p <= old(p) + length - 1.\r\n            NumberInfo result = 0;\r\n\r\n            Debug.Assert(from >= 0);\r\n            //if (from < 0) from = 0;\r\n\r\n            //Debug.Assert(length >= 0 && length <= s.Length - from);\r\n            //if (length < 0 || length > s.Length - from) length = s.Length - from;\r\n\r\n            Debug.Assert(limit >= from && limit <= s.Length);\r\n            //int limit = from + length;\r\n\r\n            // long:\r\n            longValue = 0;                      // long integer value of already read part of the string\r\n            l = -1;                             // last position of an long integer part of the string\r\n\r\n            // double:\r\n            doubleValue = 0.0;                  // double value; initialized at the end\r\n            d = -1;                             // last position where the double has ended\r\n            int e = -1;                         // position where the exponent has started by 'e', 'E', 'd', or 'D'\r\n            \r\n            // common:\r\n            bool contains_digit = false;        // whether a digit is contained in the string (in the integral and fraction part of the nummber, not an exponent)\r\n            bool sign = false;                  // whether a sign of whole number is minus\r\n            int state = 0;                      // automaton state\r\n            int p = from;                       // current index within parsed string\r\n            \r\n            // patterns and states:\r\n            // [:white:]*[+-]?0?[0-9]*[.]?[0-9]*([eE][+-]?[0-9]+)?\r\n            //  0000000   11  2  222   2   333    4444  55   666     \r\n            // [:white:]*[+-]?0(x|X)[0-9A-Fa-f]*    // TODO: PHP does not resolve [+-] at the beginning, however Phalanger does\r\n            //  0000000   11  2 777  888888888  \r\n\r\n            while (p < limit)\r\n            {\r\n                char c = s[p];  // TODO: *fixed, no range check\r\n\r\n                switch (state)\r\n                {\r\n                    case 0: // expecting whitespaces to be skipped\r\n                        {\r\n                            if (!Char.IsWhiteSpace(c))\r\n                            {\r\n                                state = 1;\r\n                                goto case 1;\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 1: // expecting result + or - or .\r\n                        {\r\n                            if (c >= '0' && c <= '9')\r\n                            {\r\n                                state = 2;\r\n                                goto case 2;\r\n                            }\r\n\r\n                            if (c == '-')\r\n                            {\r\n                                sign = true;// -1;\r\n                                state = 2;\r\n                                break;\r\n                            }\r\n\r\n                            if (c == '+')\r\n                            {\r\n                                state = 2;\r\n                                break;\r\n                            }\r\n\r\n                            // ends reading (long) integer:\r\n                            l = p;\r\n                            // doubleValue = 0.0; // already zeroed\r\n\r\n                            // switch to decimals in next turn:\r\n                            if (c == '.')\r\n                            {\r\n                                state = 3;\r\n                                break;\r\n                            }\r\n\r\n                            // unexpected character:\r\n                            goto Done;\r\n                        }\r\n\r\n                    case 2: // expecting result\r\n                        {\r\n                            Debug.Assert(l == -1, \"Reading long.\");\r\n\r\n                            // a single leading zero:\r\n                            if (c == '0' && !contains_digit)\r\n                            {\r\n                                contains_digit = true;\r\n                                state = 7;\r\n                                break;\r\n                            }\r\n\r\n                            if (c >= '0' && c <= '9')\r\n                            {\r\n                                int num = (int)(c - '0');\r\n                                contains_digit = true;\r\n\r\n                                if (longValue < Int64.MaxValue / 10 || (longValue == Int64.MaxValue / 10 && num <= Int64.MaxValue % 10))\r\n                                {\r\n                                    // still fits long\r\n                                    longValue = longValue * 10 + num;\r\n                                    break;\r\n                                }\r\n                                else\r\n                                {\r\n                                    // long not big enough ...\r\n\r\n                                    // last long integer position:\r\n                                    l = p;\r\n                                    \r\n                                    // fix for long.MinValue (which integral part cannot be hold as position long)\r\n                                    if (sign && num == -(Int64.MinValue % 10))\r\n                                    {\r\n                                        // parsed number is still valid long (Int64.MinValue)\r\n                                        ++l; // move the long position after this character\r\n                                    }\r\n\r\n                                    longValue = sign ? Int64.MinValue : Int64.MaxValue;\r\n\r\n                                    // continue reading as double:\r\n                                    state = 3;   // => doubleValue will be initialized at the end\r\n                                    break;\r\n                                }\r\n                            }\r\n\r\n                            // ends reading (long) integer:\r\n\r\n                            // last long integer position:\r\n                            l = p;\r\n                            if (sign) longValue *= -1;\r\n                            \r\n                            // switch to decimals in next turn:\r\n                            if (c == '.')\r\n                            {\r\n                                state = 3;  // => doubleValue will be initialized at the end\r\n                                break;\r\n                            }\r\n\r\n                            // switch to exponent in next turn:\r\n                            if ((c == 'e' || c == 'E') && contains_digit)\r\n                            {\r\n                                e = p;\r\n                                state = 4;  // => doubleValue will be initialized at the end\r\n                                break;\r\n                            }\r\n\r\n                            doubleValue = unchecked((double)longValue);\r\n\r\n                            // unexpected character:\r\n                            goto Done;\r\n                        }\r\n\r\n                    case 3: // expecting decimals\r\n                        {\r\n                            Debug.Assert(l >= 0, \"Reading double.\");\r\n\r\n                            // reading decimals:\r\n                            if (c >= '0' && c <= '9')\r\n                            {\r\n                                contains_digit = true;\r\n                                break;\r\n                            }\r\n\r\n                            // switch to exponent in next turn:\r\n                            if ((c == 'e' || c == 'E') && contains_digit)\r\n                            {\r\n                                e = p;\r\n                                state = 4;\r\n                                break;\r\n                            }\r\n\r\n                            // unexpected character:\r\n                            goto Done;\r\n                        }\r\n\r\n                    case 4: // expecting exponent + or -\r\n                        {\r\n                            Debug.Assert(l >= 0, \"Reading double.\");\r\n\r\n                            // switch to exponent immediately:\r\n                            if (c >= '0' && c <= '9')\r\n                            {\r\n                                state = 6;\r\n                                goto case 6;\r\n                            }\r\n\r\n                            // switch to exponent in next turn:\r\n                            if (c == '-')\r\n                            {\r\n                                //expBase = 0.1;\r\n                                state = 5;\r\n                                break;\r\n                            }\r\n\r\n                            // switch to exponent in next turn:\r\n                            if (c == '+')\r\n                            {\r\n                                state = 5;\r\n                                break;\r\n                            }\r\n\r\n                            // unexpected characters:\r\n                            goto Done;\r\n                        }\r\n\r\n                    case 5: // expecting exponent after the sign\r\n                        {\r\n                            state = 6;\r\n                            goto case 6;\r\n                        }\r\n\r\n                    case 6: // expecting exponent without the sign\r\n                        {\r\n                            if (c >= '0' && c <= '9')\r\n                            {\r\n                                break;\r\n                            }\r\n\r\n                            // unexpected character:\r\n                            goto Done;\r\n                        }\r\n\r\n                    case 7: // a single leading zero read:\r\n                        {\r\n                            // check for hexa integer:\r\n                            if (c == 'x' || c == 'X')\r\n                            {\r\n                                // end of double reading:\r\n                                d = p;\r\n\r\n                                state = 8;\r\n                                break;\r\n                            }\r\n\r\n                            // other cases -> back to integer reading:\r\n                            state = 2;\r\n                            goto case 2;\r\n                        }\r\n\r\n                    case 8: // hexa integer\r\n                        {\r\n                            result |= NumberInfo.IsHexadecimal;\r\n\r\n                            int num = Parsers.Convert.AlphaNumericToDigit(c);\r\n\r\n                            // unexpected character:\r\n                            if (num <= 15)\r\n                            {\r\n                                if (l == -1)\r\n                                {\r\n                                    if (longValue < Int64.MaxValue / 16 || (longValue == Int64.MaxValue / 16 && num <= Int64.MaxValue % 16))\r\n                                    {\r\n                                        longValue = longValue * 16 + num;\r\n                                        break;\r\n                                    }\r\n                                    else\r\n                                    {\r\n                                        // last hexa long integer position:\r\n                                        doubleValue = unchecked((double)longValue);\r\n                                        if (sign)\r\n                                        {\r\n                                            doubleValue = unchecked(-doubleValue);\r\n                                            longValue = Int64.MinValue;\r\n                                        }\r\n                                        else\r\n                                        {\r\n                                            longValue = Int64.MaxValue;\r\n                                        }\r\n                                        // fallback to double behaviour below...\r\n                                    }\r\n                                }\r\n                                \r\n                                l = p;  // last position is advanced even the long is too long?\r\n                                doubleValue = unchecked(doubleValue * 16.0 + (double)num);\r\n\r\n                                break;\r\n                            }\r\n\r\n                            goto Done;\r\n                        }\r\n                }\r\n                p++;\r\n            }\r\n\r\n        Done:\r\n\r\n            // an exponent ends with 'e', 'E', '-', or '+':\r\n            if (state == 4 || state == 5)\r\n            {\r\n                Debug.Assert(l >= 0 && e >= 0, \"Reading exponent of double.\");\r\n\r\n                // shift back:\r\n                p = e;\r\n                state = 3;\r\n            }\r\n\r\n            // if long/integer index hasn't stopped:\r\n            // - the sign hasn't been applied yet\r\n            // - doubleValue hasn't been initialized yet\r\n            if (l == -1)\r\n            {\r\n                l = p;\r\n\r\n                if (sign)\r\n                    longValue = unchecked(-longValue);\r\n\r\n                doubleValue = unchecked((double)longValue);\r\n            }\r\n\r\n            // determine int/long type (try fit long into int):\r\n            intValue = unchecked((int)longValue);\r\n            if (intValue == longValue)\r\n            {\r\n                result |= NumberInfo.Integer;\r\n            }\r\n            else\r\n            {\r\n                result |= NumberInfo.LongInteger;\r\n                intValue = (longValue < 0) ? int.MinValue : int.MaxValue;\r\n            }\r\n\r\n            // double parsing states\r\n            if (state >= 3 && state <= 6)\r\n            {\r\n                Debug.Assert(p >= from);            // something was parsed\r\n                Debug.Assert(doubleValue == 0.0);   // doubleValue not changed yet\r\n\r\n                if (contains_digit) // otherwise 0.0\r\n                    ParseDouble((from == 0 && p == s.Length) ? s : s.Substring(from, p - from), sign, out doubleValue);\r\n            }\r\n\r\n            // if double index hasn't stopped:\r\n            if (d == -1)\r\n            {\r\n                // last double value position:\r\n                d = p;\r\n            }\r\n\r\n            // determine the double type comparing strictly d, l:\r\n            if (d > l)\r\n                result = result & ~NumberInfo.TypeMask | NumberInfo.Double;  // remove Integer|LongInteger, add Double\r\n\r\n            // the string is a number if it was entirely parsed and contains a digit:\r\n            if (contains_digit && p == limit)\r\n                result |= NumberInfo.IsNumber;\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses given string as a <see cref=\"Double\"/>, using invariant culture and proper number styles.\r\n        /// </summary>\r\n        private static void ParseDouble(string str, bool sign, out double doubleValue)\r\n        {\r\n            Debug.Assert(str != null);\r\n\r\n            if (!double.TryParse(\r\n                str,\r\n                NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent | NumberStyles.AllowLeadingWhite,\r\n                CultureInfo.InvariantCulture,\r\n                out doubleValue))\r\n            {\r\n                // overflow: (the only other fail would be format exception which is not possible)\r\n//#if DEBUG\r\n//                try { double.Parse(str, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent | NumberStyles.AllowLeadingWhite, CultureInfo.InvariantCulture); }\r\n//                catch (OverflowException) { /* expected */ }\r\n//                catch { Debug.Fail(\"Unexpected double.Parse() exception!\"); }\r\n//#endif\r\n                doubleValue = sign ? double.NegativeInfinity : double.PositiveInfinity;\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value of an arbitrary PHP/CLR type into integer value, long integer value or double value using \r\n\t\t/// conversion algorithms in a manner of PHP. All returned values are valid.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The value to convert.</param>\r\n\t\t/// <param name=\"doubleValue\">The double value.</param>\r\n\t\t/// <param name=\"longValue\">The long integer value.</param>\r\n\t\t/// <param name=\"intValue\">The integer value.param></param>\r\n\t\t/// <returns>Conversion info.</returns>\r\n\t\tpublic static NumberInfo ObjectToNumber(object obj, out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n            if (obj == null)\r\n            {\r\n                intValue = 0;\r\n                longValue = 0;\r\n                doubleValue = 0.0;\r\n                return NumberInfo.Integer;\r\n            }\r\n            else if (obj.GetType() == typeof(int))\r\n            {\r\n                intValue = (int)obj;\r\n                longValue = intValue;\r\n                doubleValue = intValue;\r\n                return NumberInfo.Integer | NumberInfo.IsNumber;\r\n            }\r\n            else if (obj.GetType() == typeof(double))\r\n            {\r\n                doubleValue = (double)obj;\r\n                intValue = unchecked((int)doubleValue);\r\n                longValue = unchecked((long)doubleValue);\r\n                return NumberInfo.Double | NumberInfo.IsNumber;\r\n            }\r\n            else return ObjectToNumberEpilogue(obj, out intValue, out longValue, out doubleValue);\r\n\t\t}\r\n\r\n        private static NumberInfo ObjectToNumberEpilogue(object/*!*/obj, out int intValue, out long longValue, out double doubleValue)\r\n        {\r\n            Debug.Assert(obj != null);\r\n\r\n            IPhpConvertible php_conv;\r\n\r\n            if (obj.GetType() == typeof(long))\r\n            {\r\n                longValue = (long)obj;\r\n                intValue = NarrowToInt32(longValue);\r\n                doubleValue = (double)longValue;\r\n                return NumberInfo.LongInteger | NumberInfo.IsNumber;\r\n            }\r\n            else if (obj.GetType() == typeof(string))\r\n            {\r\n                return StringToNumber((string)obj, out intValue, out longValue, out doubleValue);\r\n            }\r\n            else if (obj.GetType() == typeof(bool))\r\n            {\r\n                intValue = (bool)obj ? 1 : 0;\r\n                doubleValue = intValue;\r\n                longValue = intValue;\r\n                return NumberInfo.Integer;\r\n            }\r\n            else if ((php_conv = obj as IPhpConvertible) != null)\r\n            {\r\n                return php_conv.ToNumber(out intValue, out longValue, out doubleValue);\r\n            }\r\n            \r\n            intValue = 0;\r\n            longValue = 0;\r\n            doubleValue = 0.0;\r\n            return NumberInfo.Unconvertible;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string into integer, long integer and double value using conversion algorithm in a manner of PHP. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <param name=\"intValue\">The result of conversion to integer.</param>\r\n\t\t/// <param name=\"longValue\">The result of conversion to long integer.</param>\r\n\t\t/// <param name=\"doubleValue\">The result of conversion to double.</param>\r\n\t\t/// <returns><see cref=\"NumberInfo\"/>.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"str\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static NumberInfo StringToNumber(string str, out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n            int l, d;\r\n\t\t\treturn IsNumber(str, (str != null) ? str.Length : 0, 0, out l, out d, out intValue, out longValue, out doubleValue);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string to integer using conversion algorithm in a manner of PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <returns>The result of conversion.</returns>\r\n\t\tpublic static int StringToInteger(string str)\r\n\t\t{\r\n\t\t\tint ival, l, d;\r\n\t\t\tdouble dval;\r\n\t\t\tlong lval;\r\n            IsNumber(str, (str != null) ? str.Length : 0, 0, out l, out d, out ival, out lval, out dval);\r\n\r\n\t\t\treturn ival;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string to long integer using conversion algorithm in a manner of PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <returns>The result of conversion.</returns>\r\n\t\tpublic static long StringToLongInteger(string str)\r\n\t\t{\r\n            int ival, l, d;\r\n\t\t\tdouble dval;\r\n\t\t\tlong lval;\r\n            IsNumber(str, (str != null) ? str.Length : 0, 0, out l, out d, out ival, out lval, out dval);\r\n\r\n\t\t\treturn lval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string to double using conversion algorithm in a manner of PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <returns>The result of conversion.</returns>\r\n\t\tpublic static double StringToDouble(string str)\r\n\t\t{\r\n            int ival, l, d;\r\n\t\t\tdouble dval;\r\n\t\t\tlong lval;\r\n            IsNumber(str, (str != null) ? str.Length : 0, 0, out l, out d, out ival, out lval, out dval);\r\n\r\n\t\t\treturn dval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a part of a string starting on a specified position to a long integer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to be parsed.</param>\r\n\t\t/// <param name=\"length\">Maximal length of the substring to parse.</param>\r\n\t\t/// <param name=\"position\">\r\n\t\t/// The position where to start. Points to the first character after the substring storing the integer\r\n\t\t/// when returned.\r\n\t\t/// </param>\r\n\t\t/// <returns>The integer stored in the <paramref name=\"str\"/>.</returns>\r\n\t\tpublic static long SubstringToLongInteger(string str, int length, ref int position)\r\n\t\t{\r\n            int d;\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\t\t\tdouble dval;\r\n            IsNumber(str, position + length, position, out position, out d, out ival, out lval, out dval);\r\n\r\n\t\t\treturn lval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a part of a string starting on a specified position to a double.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to be parsed. Cannot be <c>null</c>.</param>\r\n\t\t/// <param name=\"length\">Maximal length of the substring to parse.</param>\r\n\t\t/// <param name=\"position\">\r\n\t\t/// The position where to start. Points to the first character after the substring storing the double\r\n\t\t/// when returned.\r\n\t\t/// </param>\r\n\t\t/// <returns>The double stored in the <paramref name=\"str\"/>.</returns>\r\n\t\tpublic static double SubstringToDouble(string/*!*/str, int length, ref int position)\r\n\t\t{\r\n            Debug.Assert(str != null && position + length <= str.Length);\r\n\r\n            int l;\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\t\t\tdouble dval;\r\n            IsNumber(str, position + length, position, out l, out position, out ival, out lval, out dval);\r\n\r\n\t\t\treturn dval;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a substring to almost long integer in a specified base.\r\n\t\t/// Stops parsing if result overflows unsigned integer.\r\n\t\t/// </summary>\r\n\t\tpublic static long SubstringToLongStrict(string str, int length, int @base, long maxValue, ref int position)\r\n\t\t{\r\n\t\t\tif (maxValue <= 0)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"maxValue\");\r\n\r\n\t\t\tif (@base < 2 || @base > 'Z' - 'A' + 1)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"invalid_base\"), \"base\");\r\n\r\n\t\t\tif (str == null) str = \"\";\r\n\t\t\tif (position < 0) position = 0;\r\n\t\t\tif (length < 0 || length > str.Length - position) length = str.Length - position;\r\n\t\t\tif (length == 0) return 0;\r\n\r\n\t\t\tlong result = 0;\r\n\t\t\tint sign = +1;\r\n\r\n\t\t\t// reads a sign:\r\n\t\t\tif (str[position] == '+')\r\n\t\t\t{\r\n\t\t\t\tposition++;\r\n\t\t\t\tlength--;\r\n\t\t\t}\r\n\t\t\telse if (str[position] == '-')\r\n\t\t\t{\r\n\t\t\t\tposition++;\r\n\t\t\t\tlength--;\r\n\t\t\t\tsign = -1;\r\n\t\t\t}\r\n\r\n\t\t\tlong max_div, max_rem;\r\n\t\t\tmax_div = MathEx.DivRem(maxValue, @base, out max_rem);\r\n\r\n\t\t\twhile (length-- > 0)\r\n\t\t\t{\r\n                int digit = Parsers.Convert.AlphaNumericToDigit(str[position]);\r\n\t\t\t\tif (digit >= @base) break;\r\n\r\n\t\t\t\tif (!(result < max_div || (result == max_div && digit <= max_rem)))\r\n\t\t\t\t{\r\n\t\t\t\t\t// reads remaining digits:\r\n                    while (length-- > 0 && Parsers.Convert.AlphaNumericToDigit(str[position]) < @base) position++;\r\n\r\n\t\t\t\t\treturn (sign == -1) ? Int64.MinValue : Int64.MaxValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = result * @base + digit;\r\n\t\t\t\tposition++;\r\n\t\t\t}\r\n\r\n\t\t\treturn result * sign;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Specialized Conversions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts double value to a string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be converted.</param>\r\n\t\t/// <returns>A string representation of the <paramref name=\"value\"/>.</returns>\r\n\t\tpublic static string DoubleToString(double value)\r\n\t\t{\r\n\t\t\treturn value.ToString(\"G\", NumberFormatInfo.InvariantInfo);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string to a single character.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <returns>The first character of the string.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"str\"/> doesn't consist of a single character. (Warning)</exception>\r\n\t\tpublic static char StringToChar(string str)\r\n\t\t{\r\n\t\t\tif (str == null || str.Length != 1)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"string_should_be_single_character\"));\r\n\t\t\t\tif (String.IsNullOrEmpty(str)) return '\\0';\r\n\t\t\t}\r\n\r\n\t\t\treturn str[0];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts string to boolean.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string to convert.</param>\r\n\t\t/// <returns>Whether <paramref name=\"str\"/> is empty or equal to \"0\".</returns>\r\n\t\t/// <remarks>Asserts that <paramref name=\"str\"/> is not null.</remarks>\r\n\t\t[Emitted]\r\n        public static bool StringToBoolean(string str)\r\n\t\t{\r\n\t\t\tif (str == null) return false;\r\n\r\n\t\t\treturn !(str.Length == 0 || (str.Length == 1 && str[0] == '0'));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts an object of arbitrary PHP.NET type to string or integer array key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object ot be converted.</param>\r\n\t\t/// <param name=\"key\">The result. Its validity depends on the value returned.</param>\r\n\t\t/// <returns>Whether <c>obj</c> is a valid key.</returns>\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ObjectToArrayKey\"]/*' />\r\n\t\tpublic static bool ObjectToArrayKey(object obj, out IntStringKey key)\r\n\t\t{\r\n\t\t\tif (obj == null)\r\n\t\t\t{\r\n                key = IntStringKey.EmptyStringKey;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n            if (obj.GetType() == typeof(int))\r\n\t\t\t{\r\n\t\t\t\tkey = new IntStringKey((int)obj);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n            //if ((str = PhpVariable.AsString(obj)) != null)\r\n            //{\r\n            //    key = StringToArrayKey(str);\r\n            //    return true;\t\r\n            //}\r\n            \r\n            if (obj.GetType() == typeof(string))\r\n            {\r\n                key = StringToArrayKey((string)obj);\r\n                return true;\r\n            }\r\n\r\n            if (obj.GetType() == typeof(PhpBytes))\r\n            {\r\n                key = StringToArrayKey(((PhpBytes)obj).ToString());\r\n                return true;\r\n            }\r\n\r\n            if (obj.GetType() == typeof(PhpString))\r\n            {\r\n                key = StringToArrayKey(((PhpString)obj).ToString());\r\n                return true;\r\n            }\r\n\r\n            if (obj.GetType() == typeof(bool))\r\n\t\t\t{\r\n\t\t\t\tkey = new IntStringKey((bool)obj ? 1 : 0);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n            if (obj.GetType() == typeof(double))\r\n\t\t\t{\r\n\t\t\t\tkey = new IntStringKey(unchecked((int)(double)obj));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n            if (obj.GetType() == typeof(long))\r\n\t\t\t{\r\n\t\t\t\tkey = new IntStringKey(unchecked((int)(long)obj));\r\n\t\t\t\treturn true;\r\n\t\t\t}\t\t\t\r\n\r\n\t\t\tPhpResource resource = obj as PhpResource;\r\n\t\t\tif (resource != null)\r\n\t\t\t{\r\n\t\t\t\tkey = new IntStringKey(resource.ToInteger());\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n            // invalid index:\r\n\t\t\tkey = new IntStringKey();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a string to an appropriate integer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string in \"{0 | -?[1-9][0-9]*}\" format.</param>\r\n\t\t/// <returns>The array key (integer or string).</returns>\r\n\t\tpublic static IntStringKey StringToArrayKey(string/*!*/str)\r\n\t\t{\r\n            Debug.Assert(str != null, \"str == null\");\r\n\r\n            // empty string:\r\n            if (str.Length == 0)\r\n                return new IntStringKey(string.Empty);\r\n\r\n            // starts with minus sign?\r\n            bool sign = false;\r\n            int index = 0;\r\n\r\n            // check first character:\r\n            switch (str[0])\r\n            {\r\n                case '-':\r\n                    // negative number starting with zero is always a string key (-0, -0123)\r\n                    if (str.Length == 1 || str[1] == '0')    // str = \"-\" or '-0' or '-0...'\r\n                        return new IntStringKey(str);\r\n\r\n                    // str = \"-...\" // continue to <int> parsing\r\n                    index = 1;\r\n                    sign = true;\r\n                    break;\r\n\r\n                case '0':\r\n                    // (non-negative) number starting with '0' is considered as a string,\r\n                    // iff there is more than just a '0'\r\n                    if (str.Length == 1)\r\n                        return new IntStringKey(0); // just a zero -> convert to int\r\n                    else\r\n                        return new IntStringKey(str);   // number starting with zero -> string key\r\n            }\r\n\r\n            Debug.Assert(index < str.Length, \"str == {\" + str + \"}\");\r\n            \r\n            // simple <int> parser:\r\n            long result = (int)str[index] - '0';\r\n            Debug.Assert(result != 0, \"str == {\" + str + \"}\");\r\n\r\n            if (result < 0 || result > 9)   // not a number\r\n                return new IntStringKey(str);\r\n\r\n            while (++index < str.Length)\r\n            {\r\n                int c = (int)str[index] - '0';\r\n                if (c >= 0 && c <= 9)\r\n                {\r\n                    // update <result>\r\n                    result = unchecked(c + result * 10);\r\n\r\n                    // <int> range check\r\n                    if (NumberUtils.IsInt32(result))\r\n                        continue;   // still in <int> range\r\n                }\r\n                \r\n                //\r\n                return new IntStringKey(str);            \r\n            }\r\n\r\n            if (sign)\r\n            {\r\n                result = -result;\r\n                if (!NumberUtils.IsInt32(result))\r\n                    return new IntStringKey(str);\r\n            }\r\n\r\n            // <int> parsed properly:\r\n            return new IntStringKey(unchecked((int)result));\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Converts a size specified as a string to integer. \r\n        /// </summary>\r\n        /// <param name=\"str\">The size.</param>\r\n        /// <returns>The number of bytes.</returns>\r\n        /// <remarks>\r\n        /// Size may contain either a number of bytes or number of kilo/mega/giga bytes with suffix \"K\"/\"M\"/\"G\".\r\n        /// The first non-white-space character from the end of the string is taken as the suffix.\r\n        /// All numbers may be \"PHP numbers\", i.e. only a prefix containing an integer is taken.\r\n        /// Suffixes are case insensitive.\r\n        /// If integer overflows or underflows the maximal or minimal integer value is returned, respectively.\r\n        /// </remarks>\r\n        public static int StringByteSizeToInteger(string str)\r\n\t\t{\r\n\t\t\tif (str == null || str.Length == 0) return 0;\r\n\t\t\tstr = str.Trim();\r\n\t\t\tif (str.Length == 0) return 0;\r\n\r\n\t\t\tlong result = StringToInteger(str);\r\n\r\n\t\t\tswitch (str[str.Length - 1])\r\n\t\t\t{\r\n\t\t\t\tcase 'K':\r\n\t\t\t\tcase 'k': result <<= 10; break;\r\n\t\t\t\tcase 'M':\r\n\t\t\t\tcase 'm': result <<= 20; break;\r\n\t\t\t\tcase 'G':\r\n\t\t\t\tcase 'g': result <<= 30; break;\r\n\t\t\t}\r\n\r\n\t\t\tif (result >= Int32.MaxValue) return Int32.MaxValue;\r\n\t\t\tif (result <= Int32.MinValue) return Int32.MinValue;\r\n\r\n\t\t\treturn (int)result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Convert elements of given <see cref=\"PhpArray\"/> into a new instance of <see cref=\"stdClass\"/>.\r\n        /// </summary>\r\n        /// <param name=\"array\"><see cref=\"PhpArray\"/> to be read.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>New instance of <see cref=\"DObject\"/> containing fields from <paramref name=\"array\"/>.</returns>\r\n        public static DObject PhpArrayToDObject(PhpArray/*!*/array, ScriptContext/*!*/ context)\r\n        {\r\n            Debug.Assert(array != null, \"Argument 'array' cannot be null!\");\r\n\r\n            //var runtimeFields = new PhpArray(array.Count);\r\n            ////foreach (KeyValuePair<IntStringKey, object> pair in array)\r\n            //using (var enumerator = array.GetFastEnumerator())\r\n            //    while (enumerator.MoveNext())\r\n            //    {\r\n            //        // add elements directly into the hashtable (no duplicity check, since array is already valid)\r\n            //        runtimeFields.Add(enumerator.CurrentKey.Object.ToString(), PhpVariable.Copy(enumerator.CurrentValue, CopyReason.Assigned));\r\n            //    }\r\n\r\n            // create a new stdClass with runtime fields:\r\n            return new stdClass(context)\r\n            {\r\n                RuntimeFields = new PhpArray(array, true)\r\n            };\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc StringToTypeDesc(string name, ResolveTypeFlags resolveFlags, DTypeDesc caller, ScriptContext/*!*/ context, NamingContext nameContext, object[] genericArgs)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(name));\r\n\r\n            resolveFlags |= ResolveTypeFlags.PreserveFrame;\r\n            //if (autoload) flags |= (ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n\r\n            DTypeDesc type = context.ResolveType(name, nameContext, caller, genericArgs, resolveFlags);\r\n\r\n            // fill default type arguments or report an error:\r\n            if (type != null && type.IsGenericDefinition && (resolveFlags & ResolveTypeFlags.SkipGenericNameParsing) == 0)\r\n                type = Operators.MakeGenericTypeInstantiation(type, DTypeDesc.EmptyArray, 0);\r\n\r\n            return type;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region String Quoting (Only for backward compatibility)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Quotes a string according to the current configuration.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">String to quote.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <returns>Quoted or unchanged string.</returns>\r\n\t\tpublic static string Quote(string str, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (str == null || !context.Config.Variables.QuoteRuntimeVariables)\r\n\t\t\t\treturn str;\r\n\r\n\t\t\tif (context.Config.Variables.QuoteInDbManner)\r\n\t\t\t\treturn StringUtils.AddDbSlashes(str);\r\n\t\t\telse\r\n\t\t\t\treturn StringUtils.AddCSlashes(str, true, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Quotes arbitrary data according to the current configuration converting them to a string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">Data to quote.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <returns>Quoted string or unchanged data.</returns>\r\n\t\tpublic static object Quote(object data, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (data == null || !context.Config.Variables.QuoteRuntimeVariables)\r\n\t\t\t\treturn data;\r\n\r\n\t\t\tstring str = ObjectToString(data);\r\n\t\t\tif (context.Config.Variables.QuoteInDbManner)\r\n\t\t\t\treturn StringUtils.AddDbSlashes(str);\r\n\t\t\telse\r\n\t\t\t\treturn StringUtils.AddCSlashes(str, true, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unquotes a string according to the current configuration.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">String to quote.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <returns>Unquoted or unchanged string.</returns>\r\n\t\tpublic static string Unquote(string str, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (str == null || !context.Config.Variables.QuoteRuntimeVariables)\r\n\t\t\t\treturn str;\r\n\r\n\t\t\tif (context.Config.Variables.QuoteInDbManner)\r\n\t\t\t\treturn StringUtils.StripDbSlashes(str);\r\n\t\t\telse\r\n\t\t\t\treturn StringUtils.StripCSlashes(str);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unquotes arbitrary data according to the current configuration converting them to a string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">String to quote.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <returns>Unquoted string or unchanged data.</returns>\r\n\t\tpublic static object Unquote(object data, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (data == null || !context.Config.Variables.QuoteRuntimeVariables)\r\n\t\t\t\treturn data;\r\n\r\n\t\t\tstring str = ObjectToString(data);\r\n\t\t\tif (context.Config.Variables.QuoteInDbManner)\r\n\t\t\t\treturn StringUtils.StripDbSlashes(str);\r\n\t\t\telse\r\n\t\t\t\treturn StringUtils.StripCSlashes(str);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/ConversionsToClr.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing PHP.Library;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Implements PHP conversions of CLR types.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic class ConvertToClr\r\n\t{\r\n\t\t#region TryObjectToXxx\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents \"quality\" of conversion\r\n\t\t/// </summary>\r\n\t\tpublic enum ConversionStrictness : byte\r\n\t\t{\r\n\t\t\t/// <summary> Type was safely converted to matching type: int to int, long to int (in range) </summary>\r\n\t\t\tImplExactMatch = 0,\r\n\t\t\t/// <summary> Type was converted but percision may be lost: double to float, decimal to double </summary>\r\n\t\t\tImplPercisionLost = 1,\r\n\t\t\t/// <summary> Type was converted but value domain is diferent: string to bool, int to bool, null to (T)null</summary>\r\n\t\t\tImplDomainChange = 2,\r\n\t\t\t/// <summary> Type was covnerted using explicit conversion </summary>\r\n\t\t\tExplicit = 3,\t\r\n\t\t\t/// <summary> Type was not converted. </summary>\r\n\t\t\tFailed = 4\t\t\r\n\t\t}\r\n\t\t\r\n\t\t[Emitted]\r\n\t\tpublic static Boolean TryObjectToBoolean(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\t\t\tPhpBytes b;\r\n\t\t\tPhpString ps;\r\n\t\t\t\r\n\t\t\tif (obj is bool) { strictness = ConversionStrictness.ImplExactMatch; return (bool)obj; }\r\n\t\t\tif (obj is int) { strictness = ConversionStrictness.ImplDomainChange; return (int)obj != 0; }\r\n\t\t\tif (obj is double) { strictness = ConversionStrictness.ImplDomainChange; return (double)obj != 0.0; }\r\n\t\t\tif (obj is long) { strictness = ConversionStrictness.ImplDomainChange; return (long)obj != 0; }\r\n\r\n\t\t\t// we have to check PHP string types separately from the rest of IPhpConvertibles here\r\n\t\t\t// as only these strings are \"naturally\" convertible to boolean:\r\n\t\t\tif ((s = obj as string) != null) { strictness = ConversionStrictness.ImplDomainChange; return Convert.StringToBoolean(s); }\r\n\t\t\tif ((b = obj as PhpBytes) != null) { strictness = ConversionStrictness.ImplDomainChange; return b.ToBoolean(); }\r\n\t\t\tif ((ps = obj as PhpString) != null) { strictness = ConversionStrictness.ImplDomainChange; return ps.ToBoolean(); }\r\n\r\n\t\t\t// explicit conversion\r\n\t\t\t// if ((conv = obj as IPhpConvertible) != null) { strictness = ConversionStrictness.Explicit; return conv.ToBoolean(); }\r\n\t\t\t\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static SByte TryObjectToInt8(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out strictness);\r\n\t\t\tif (result < SByte.MinValue || result > SByte.MaxValue) strictness = ConversionStrictness.Failed;\r\n\t\t\treturn unchecked((SByte)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int16 TryObjectToInt16(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out strictness);\r\n\t\t\tif (result < Int16.MinValue || result > Int16.MaxValue) strictness = ConversionStrictness.Failed;\r\n\t\t\treturn unchecked((Int16)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Byte TryObjectToUInt8(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out strictness);\r\n\t\t\tif (result < Byte.MinValue || result > Byte.MaxValue) strictness = ConversionStrictness.Failed; \r\n\t\t\treturn unchecked((Byte)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt16 TryObjectToUInt16(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tint result = TryObjectToInt32(obj, out strictness);\r\n\t\t\tif (result < UInt16.MinValue || result > UInt16.MaxValue) strictness = ConversionStrictness.Failed;\r\n\t\t\treturn unchecked((UInt16)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt32 TryObjectToUInt32(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tlong result = TryObjectToInt64(obj, out strictness);\r\n\t\t\tif (result < UInt32.MinValue || result > UInt32.MaxValue) strictness = ConversionStrictness.Failed;\r\n\t\t\treturn unchecked((UInt32)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int32 TryObjectToInt32(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\r\n\t\t\tif (obj is int) { strictness = ConversionStrictness.ImplExactMatch; return (int)obj; }\r\n\t\t\tif (obj is bool) { strictness = ConversionStrictness.ImplDomainChange; return (bool)obj ? 1 : 0; }\r\n\r\n\t\t\tif (obj is long)\r\n\t\t\t{\r\n\t\t\t\tlong lval = (long)obj;\r\n\t\t\t\tif (lval < Int32.MinValue || lval > Int32.MaxValue)\r\n\t\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\telse\r\n\t\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\treturn unchecked((Int32)lval);\r\n\t\t\t}\r\n\r\n\t\t\tif (obj is double)\r\n\t\t\t{\r\n\t\t\t\tdouble dval = (double)obj;\r\n\t\t\t\tif (dval < Int32.MinValue || dval > Int32.MaxValue)\r\n\t\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\telse\r\n\t\t\t\t\tstrictness = ConversionStrictness.ImplPercisionLost;\r\n\t\t\t\treturn unchecked((Int32)dval);\r\n\t\t\t}\r\n\r\n\t\t\tif ((s = PhpVariable.AsString(obj)) != null)\r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\t// successfull iff the number encoded in the string fits the Int32:\r\n\t\t\t\tConvert.NumberInfo info = Convert.StringToNumber(s, out ival, out lval, out dval);\r\n\t\t\t\tif ((info & Convert.NumberInfo.Integer) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.ImplDomainChange; return ival; } // \"123 hello world\" -> 123 (for example)\r\n\r\n\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((Int32)lval);\r\n\t\t\t}\r\n\r\n\t\t\t// explicit conversion\r\n\t\t\t/*IPhpConvertible conv;\r\n\t\t\tif ((conv = obj as IPhpConvertible) != null) \r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\tConvert.NumberInfo info = conv.ToNumber(out ival, out lval, out dval);\r\n\t\t\t\tif ((info & (Convert.NumberInfo.Integer | Convert.NumberInfo.IsNumber)) ==\r\n\t\t\t\t\t(Convert.NumberInfo.Integer | Convert.NumberInfo.IsNumber))\r\n\t\t\t\t{\r\n\t\t\t\t\tstrictness = ConversionStrictness.Explicit; \r\n\t\t\t\t\treturn ival;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((Int32)lval);\r\n\t\t\t}*/\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Int64 TryObjectToInt64(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\r\n\t\t\tif (obj is int) { strictness = ConversionStrictness.ImplExactMatch; return (int)obj; }\r\n\t\t\tif (obj is long) { strictness = ConversionStrictness.ImplExactMatch; return (long)obj; }\r\n\t\t\tif (obj is bool) { strictness = ConversionStrictness.ImplDomainChange; return (bool)obj ? 1 : 0; }\r\n\r\n\t\t\tif (obj is double)\r\n\t\t\t{\r\n\t\t\t\tdouble dval = (double)obj;\r\n\t\t\t\tif (dval < Int64.MinValue || dval > Int64.MaxValue)\r\n\t\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\telse\r\n\t\t\t\t\tstrictness = ConversionStrictness.ImplPercisionLost;\r\n\t\t\t\treturn unchecked((Int32)dval);\r\n\t\t\t}\r\n\r\n\t\t\tif ((s = PhpVariable.AsString(obj)) != null)\r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\t// successfull iff the number encoded in the string fits Int32 or Int64:\r\n\t\t\t\tConvert.NumberInfo info = Convert.StringToNumber(s, out ival, out lval, out dval);\r\n\t\t\t\tif ((info & Convert.NumberInfo.Integer) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.ImplDomainChange; return ival; }\r\n\t\t\t\tif ((info & Convert.NumberInfo.LongInteger) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.ImplDomainChange; return lval; }\r\n\r\n\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((Int64)dval);\r\n\t\t\t}\r\n\r\n\t\t\t// explicit conversion\r\n\t\t\t/*IPhpConvertible conv;\r\n\t\t\tif ((conv = obj as IPhpConvertible) != null)\r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\tConvert.NumberInfo info = conv.ToNumber(out ival, out lval, out dval);\r\n\t\t\t\tif ((info & Convert.NumberInfo.Integer) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.Explicit; return ival; }\r\n\t\t\t\tif ((info & Convert.NumberInfo.LongInteger) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.Explicit; return lval; }\r\n\r\n\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((Int64)dval);\r\n\t\t\t}*/\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static UInt64 TryObjectToUInt64(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\r\n\t\t\tif (obj is int)\r\n\t\t\t{\r\n\t\t\t\tint ival = (int)obj;\r\n\t\t\t\tstrictness = ival >= 0 ? \r\n\t\t\t\t\tConversionStrictness.ImplExactMatch : ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((UInt64)ival);\r\n\t\t\t}\r\n\r\n\t\t\tif (obj is long)\r\n\t\t\t{\r\n\t\t\t\tlong lval = (long)obj;\r\n\t\t\t\tstrictness = lval >= 0 ? \r\n\t\t\t\t\tConversionStrictness.ImplExactMatch : ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((UInt64)lval);\r\n\t\t\t}\r\n\r\n\t\t\tif (obj is bool)\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.ImplDomainChange;\r\n\t\t\t\treturn (ulong)((bool)obj ? 1 : 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (obj is double)\r\n\t\t\t{\r\n\t\t\t\tdouble dval = (double)obj;\r\n\t\t\t\tstrictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?\r\n\t\t\t\t\tConversionStrictness.ImplPercisionLost : ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((UInt64)dval);\r\n\t\t\t}\r\n\r\n\t\t\tif ((s = PhpVariable.AsString(obj)) != null)\r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\t// successfull iff the number encoded in the string fits Int32 or Int64:\r\n\t\t\t\tConvert.NumberInfo info = Convert.StringToNumber(s, out ival, out lval, out dval);\r\n\t\t\t\tif ((info & Convert.NumberInfo.Integer) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.ImplDomainChange; return unchecked((UInt64)ival); }\r\n\t\t\t\tif ((info & Convert.NumberInfo.LongInteger) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.ImplDomainChange; return unchecked((UInt64)lval); }\r\n\r\n\t\t\t\tstrictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?\r\n\t\t\t\t\tConversionStrictness.ImplPercisionLost : ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((UInt64)dval);\r\n\t\t\t}\r\n\r\n\t\t\t// explicit conversion\r\n\t\t\t/*IPhpConvertible conv;\r\n\t\t\tif ((conv = obj as IPhpConvertible) != null)\r\n\t\t\t{\r\n\t\t\t\tint ival;\r\n\t\t\t\tdouble dval;\r\n\t\t\t\tlong lval;\r\n\r\n\t\t\t\tConvert.NumberInfo info = conv.ToNumber(out ival, out lval, out dval);\r\n\t\t\t\tif ((info & Convert.NumberInfo.Integer) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.Explicit; return unchecked((UInt64)ival); }\r\n\t\t\t\tif ((info & Convert.NumberInfo.LongInteger) != 0)\r\n\t\t\t\t{ strictness = ConversionStrictness.Explicit; return unchecked((UInt64)lval); }\r\n\r\n\t\t\t\tstrictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?\r\n\t\t\t\t\tConversionStrictness.Explicit : ConversionStrictness.Failed;\r\n\t\t\t\treturn unchecked((UInt64)dval);\r\n\t\t\t}*/\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Single TryObjectToSingle(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tdouble result = TryObjectToDouble(obj, out strictness);\r\n\t\t\tstrictness = (ConversionStrictness)Math.Min((byte)ConversionStrictness.ImplPercisionLost, (byte)strictness);\r\n\t\t\tif (result < Single.MinValue && result > Single.MaxValue) strictness = ConversionStrictness.Failed;\r\n\t\t\treturn unchecked((Single)result);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Double TryObjectToDouble(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\r\n\t\t\tif (obj is double) { strictness = ConversionStrictness.ImplExactMatch; return (double)obj; }\r\n\t\t\tif (obj is int) { strictness = ConversionStrictness.ImplExactMatch; return (double)(int)obj; }\r\n\t\t\tif ((s = PhpVariable.AsString(obj)) != null) { strictness = ConversionStrictness.ImplDomainChange; return Convert.StringToDouble(s); }\r\n\t\t\tif (obj is bool) { strictness = ConversionStrictness.ImplDomainChange; return (bool)obj ? 1.0 : 0.0; }\r\n\t\t\tif (obj is long) { strictness = ConversionStrictness.ImplExactMatch; return (double)(long)obj; }\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn 0.0;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Decimal TryObjectToDecimal(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tint ival;\r\n\t\t\tlong lval;\r\n\t\t\tdouble dval;\r\n\r\n\t\t\t// ignores the higher precision of decimal:\r\n\t\t\tdecimal ret = 0;\r\n\t\t\tConvert.NumberInfo ni = Convert.ObjectToNumber(obj, out ival, out lval, out dval);\r\n\t\t\tswitch (ni & Convert.NumberInfo.TypeMask)\r\n\t\t\t{\r\n\t\t\t\tcase Convert.NumberInfo.Integer: { strictness = ConversionStrictness.ImplExactMatch; ret = ival; break; }\r\n\t\t\t\tcase Convert.NumberInfo.LongInteger: { strictness = ConversionStrictness.ImplExactMatch; ret = lval; break; }\r\n\t\t\t\tcase Convert.NumberInfo.Double: { strictness = ConversionStrictness.ImplPercisionLost; ret = unchecked((decimal)dval); break; }\r\n\t\t\t\tcase Convert.NumberInfo.Unconvertible: { strictness = ConversionStrictness.Failed; ret = 0; break; }\r\n                default: throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t\tif (obj is string) strictness = ConversionStrictness.ImplDomainChange;\r\n\t\t\tif (obj is bool) strictness = ConversionStrictness.ImplDomainChange;\r\n\t\t\tif (obj is IPhpConvertible) strictness = ConversionStrictness.Explicit;\r\n\t\t\tif (obj == null) strictness = ConversionStrictness.ImplDomainChange;\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static Char TryObjectToChar(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring result = TryObjectToString(obj, out strictness);\r\n            if (result != null && result.Length == 1) { strictness = ConversionStrictness.ImplExactMatch; return result[0]; }\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn '\\0';\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static String TryObjectToString(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstring s;\r\n\t\t\tPhpReference pr;\r\n\t\t\tIPhpConvertible conv;\r\n\r\n\t\t\tif ((s = PhpVariable.AsString(obj)) != null) { strictness = ConversionStrictness.ImplExactMatch; return s; }\r\n\t\t\tif ((pr = obj as PhpReference) != null) return TryObjectToString(pr.Value, out strictness);\r\n\t\t\tif (obj == null) { strictness = ConversionStrictness.ImplDomainChange; return null; }\r\n\t\t\tif (obj is int) { strictness = ConversionStrictness.ImplDomainChange; return obj.ToString(); }\r\n\t\t\tif (obj is bool) { strictness = ConversionStrictness.ImplDomainChange; return ((bool)obj) ? \"1\" : String.Empty; }\r\n\t\t\tif (obj is double) { strictness = ConversionStrictness.ImplDomainChange; return Convert.DoubleToString((double)obj); }\r\n\t\t\tif (obj is long) { strictness = ConversionStrictness.ImplDomainChange; return obj.ToString(); }\r\n\r\n\t\t\t// explicit conversion\r\n\t\t\tif ((conv = obj as IPhpConvertible) != null)\r\n\t\t\t{\r\n\t\t\t\tbool success;\r\n\t\t\t\tstring ret = conv.ToString(false, out success);\r\n\t\t\t\tstrictness = success?ConversionStrictness.Failed:ConversionStrictness.Explicit;\r\n\t\t\t\treturn ret;\r\n\t\t\t} \r\n\t\t\t\r\n\t\t\tstrictness = ConversionStrictness.Failed; \r\n\t\t\treturn String.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to convert to <see cref=\"DateTime\"/>.\r\n\t\t/// Conversion is successful if the object is \r\n\t\t/// <list type=\"bullet\">\r\n\t\t///\t\t<term>a number that fits the long integer; the value is treated as number of ticks</term> \r\n\t\t///   <term>a stringified form of such number (e.g. \"1023\"); the value is treated as number of ticks</term>\r\n\t\t///   <term>a string encoding a valid date-time format; the value is parsed by <see cref=\"DateTime.TryParse(string, out DateTime)\"/></term>\r\n\t\t/// </list>\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\"></param>\r\n\t\t/// <param name=\"strictness\"></param>\r\n\t\t/// <returns></returns>\r\n\t\t[Emitted]\r\n\t\tpublic static DateTime TryObjectToDateTime(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n            // try wrapped DateTime:\r\n            var exactMatch = obj as Reflection.ClrValue<DateTime>;\r\n            if (exactMatch != null)\r\n            {\r\n                strictness = ConversionStrictness.ImplExactMatch;\r\n                return exactMatch.realValue;\r\n            }\r\n\r\n            // try obj -> String -> DateTime\r\n\t\t\tstring str = TryObjectToString(obj, out strictness);\r\n\r\n\t\t\tif (strictness != ConversionStrictness.Failed)\r\n\t\t\t{\r\n\t\t\t\tDateTime result;\r\n#if !SILVERLIGHT\r\n\t\t\t\tif (DateTime.TryParse(str, out result))\r\n#else\r\n\t\t\t\t// TODO: Any way to optimize this?\r\n\t\t\t\tresult = default(DateTime);\r\n\t\t\t\tbool success = true;\r\n\t\t\t\ttry { result = DateTime.Parse(str); } catch { success = false; }\r\n\t\t\t\tif (success)\r\n#endif\r\n                { strictness = ConversionStrictness.ImplDomainChange; return result; }\r\n\t\t\t}\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn new DateTime();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts to <see cref=\"DBNull\"/>. \r\n\t\t/// The conversion is always successful and results to the <see cref=\"DBNull.Value\"/> singleton.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static DBNull TryObjectToDBNull(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tstrictness = ConversionStrictness.ImplDomainChange;\r\n\t\t\treturn DBNull.Value;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToClass<T>(object obj, out ConversionStrictness strictness)\r\n\t\t\twhere T : class\r\n\t\t{\r\n\t\t\tif (obj == null) { strictness = ConversionStrictness.ImplDomainChange; return null; }\r\n\r\n\t\t\tT result = null;\r\n\t\t\tif ((result = PhpVariable.Unwrap(obj) as T) != null && (!(result is IPhpVariable) || result is PhpObject || result is PhpArray))\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch; \r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn default(T);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToDelegate<T>(object obj, out ConversionStrictness strictness)\r\n\t\t\twhere T : class\r\n\t\t{\r\n\t\t\tT result = null;\r\n\t\t\tobject bare_obj = PhpVariable.Unwrap(obj);\r\n\t\t\tif (bare_obj == null || (result = bare_obj as T) != null)\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t// try to convert the object to PhpCallback\r\n\t\t\tPhpCallback callback = Convert.ObjectToCallback(obj, true);\r\n\t\t\tif (callback != null && callback.Bind(true))\r\n\t\t\t{\r\n\t\t\t\t// generate a conversion stub\r\n\t\t\t\tresult = EventClass<T>.GetStub(\r\n\t\t\t\t\tcallback.TargetInstance,\r\n\t\t\t\t\tcallback.TargetRoutine,\r\n\t\t\t\t\tcallback.IsBoundToCaller ? callback.RoutineName : null);\r\n\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn default(T);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T[] TryObjectToArray<T>(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n\t\t\tT[] result = PhpVariable.Unwrap(obj) as T[];\r\n\t\t\tif (result != null)\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t// try to convert PhpArray to the desired array\r\n\t\t\tPhpArray array = obj as PhpArray;\r\n\t\t\tif (array != null && array.StringCount == 0)\r\n\t\t\t{\r\n\t\t\t\tresult = new T[array.MaxIntegerKey + 1];\r\n\r\n\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\tfor (int i = 0; i < result.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject item;\r\n\t\t\t\t\tif (array.TryGetValue(i, out item))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// try to convert the item\r\n\t\t\t\t\t\tConversionStrictness tmp;\r\n\t\t\t\t\t\tresult[i] = TryObjectToType<T>(item, out tmp);\r\n\t\t\t\t\t\tif (tmp > strictness) strictness = tmp;\r\n\t\t\t\t\t\tif (strictness == ConversionStrictness.Failed) return default(T[]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\treturn default(T[]);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToStruct<T>(object obj, out ConversionStrictness strictness)\r\n\t\t\twhere T : struct\r\n\t\t{\r\n\t\t\tobj = PhpVariable.Unwrap(obj);\r\n\t\t\tif (obj is T)\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.ImplExactMatch;\r\n\t\t\t\treturn (T)obj;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstrictness = ConversionStrictness.Failed;\r\n\t\t\t\treturn default(T);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate delegate T TryObjectToTypeDelegate<T>(object obj, out ConversionStrictness strictness);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used when the type is unknown at compiler-time, e.g. it is a generic parameter.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static T TryObjectToType<T>(object obj, out ConversionStrictness strictness)\r\n\t\t{\r\n            return ((TryObjectToTypeDelegate<T>)GetConversionRoutine(typeof(T)))(obj, out strictness);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Used when the type is unknown at compiler-time, and must be converted during the runtime.\r\n        /// </summary>\r\n        /// <param name=\"obj\"></param>\r\n        /// <param name=\"target_type\"></param>\r\n        /// <returns></returns>\r\n        public static object ObjectToType(object obj, Type target_type)\r\n        {\r\n            if (obj != null && obj.GetType() == target_type)\r\n                return obj;\r\n            \r\n            Delegate conversion_routine = GetConversionRoutine(target_type);\r\n\r\n            object result = conversion_routine.DynamicInvoke(new object[]{obj, null});\r\n            if(obj != null && result == null)\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"target_type\", \"Cannot convert to type \" + target_type.ToString());\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores instances of <see cref=\"TryObjectToTypeDelegate{T}\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate static Dictionary<Type, Delegate> conversionRoutines = new Dictionary<Type, Delegate>();\r\n\r\n        /// <summary>\r\n        /// Get the proper instance of conversion routine delegate for the given type.\r\n        /// </summary>\r\n        /// <param name=\"target_type\">Target type of the conversion.</param>\r\n        /// <returns>Proper instance of conversion routine delegate.</returns>\r\n        private static Delegate GetConversionRoutine(Type target_type)\r\n        {\r\n            Delegate conversion_routine;\r\n\r\n            lock (conversionRoutines)\r\n            {\r\n                if (!conversionRoutines.TryGetValue(target_type, out conversion_routine))\r\n                {\r\n                    conversion_routine = CreateConversionDelegate(target_type);\r\n                    conversionRoutines.Add(target_type, conversion_routine);\r\n                }\r\n            }\r\n\r\n            return conversion_routine;\r\n        }\r\n\r\n\t\tprivate static Delegate CreateConversionDelegate(Type targetType)\r\n\t\t{\r\n\t\t\tswitch (Type.GetTypeCode(targetType))\r\n\t\t\t{\r\n\t\t\t\tcase TypeCode.Boolean: return new TryObjectToTypeDelegate<bool>(TryObjectToBoolean);\r\n\t\t\t\tcase TypeCode.SByte: return new TryObjectToTypeDelegate<sbyte>(TryObjectToInt8);\r\n\t\t\t\tcase TypeCode.Int16: return new TryObjectToTypeDelegate<short>(TryObjectToInt16);\r\n\t\t\t\tcase TypeCode.Int32: return new TryObjectToTypeDelegate<int>(TryObjectToInt32);\r\n\t\t\t\tcase TypeCode.Int64: return new TryObjectToTypeDelegate<long>(TryObjectToInt64);\r\n\t\t\t\tcase TypeCode.Byte: return new TryObjectToTypeDelegate<byte>(TryObjectToUInt8);\r\n\t\t\t\tcase TypeCode.UInt16: return new TryObjectToTypeDelegate<ushort>(TryObjectToUInt16);\r\n\t\t\t\tcase TypeCode.UInt32: return new TryObjectToTypeDelegate<uint>(TryObjectToUInt32);\r\n\t\t\t\tcase TypeCode.UInt64: return new TryObjectToTypeDelegate<ulong>(TryObjectToUInt64);\r\n\t\t\t\tcase TypeCode.Single: return new TryObjectToTypeDelegate<float>(TryObjectToSingle);\r\n\t\t\t\tcase TypeCode.Double: return new TryObjectToTypeDelegate<double>(TryObjectToDouble);\r\n\t\t\t\tcase TypeCode.Decimal: return new TryObjectToTypeDelegate<decimal>(TryObjectToDecimal);\r\n\t\t\t\tcase TypeCode.Char: return new TryObjectToTypeDelegate<char>(TryObjectToChar);\r\n\t\t\t\tcase TypeCode.String: return new TryObjectToTypeDelegate<string>(TryObjectToString);\r\n\t\t\t\tcase TypeCode.DateTime: return new TryObjectToTypeDelegate<DateTime>(TryObjectToDateTime);\r\n\t\t\t\tcase TypeCode.DBNull: return new TryObjectToTypeDelegate<DBNull>(TryObjectToDBNull);\r\n\r\n\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tType generic_arg;\r\n\t\t\t\t\t\tMethodInfo generic_method;\r\n\r\n\t\t\t\t\t\tif (targetType.IsValueType)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgeneric_arg = targetType;\r\n\t\t\t\t\t\t\tgeneric_method = Emit.Methods.ConvertToClr.TryObjectToStruct;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (targetType.IsArray)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tgeneric_arg = targetType.GetElementType();\r\n\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.ConvertToClr.TryObjectToArray;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tgeneric_arg = targetType;\r\n\t\t\t\t\t\t\t\tif (typeof(Delegate).IsAssignableFrom(targetType))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.ConvertToClr.TryObjectToDelegate;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgeneric_method = Emit.Methods.ConvertToClr.TryObjectToClass;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// create a new delegate type instantiation and a new delegate instance\r\n\t\t\t\t\t\tType delegate_type = typeof(TryObjectToTypeDelegate<>).MakeGenericType(targetType);\r\n\t\t\t\t\t\treturn Delegate.CreateDelegate(delegate_type, generic_method.MakeGenericMethod(generic_arg));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n                        throw new ArgumentException();\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Nullable Conversions\r\n\r\n\t\t/// <summary>\r\n\t\t/// This is handled specially in ClrOverloadBuilder...\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static object UnwrapNullable(object obj)\r\n\t\t{\r\n\t\t\tobj = PhpVariable.Unwrap(obj);\r\n\t\t\tif (obj == null) return null;\r\n\r\n\t\t\t// This could be done more efficiently, but it is not used very often...\r\n\t\t\tType ty = obj.GetType();\r\n\t\t\tif (ty.IsGenericType && ty.GetGenericTypeDefinition() == typeof(Nullable<>))\r\n\t\t\t{\r\n\t\t\t\tbool val = (bool)ty.GetProperty(\"HasValue\").GetGetMethod().Invoke(obj, Type.EmptyTypes);\r\n\t\t\t\tif (!val) return null;\r\n\t\t\t\treturn ty.GetProperty(\"Value\").GetGetMethod().Invoke(obj, Type.EmptyTypes);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Core.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</ProjectGuid>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <AssemblyName>PhpNet.Core</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>Core.snk</AssemblyOriginatorKeyFile>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Core</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <NoWarn>$(NoWarn),1591,419</NoWarn>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.ComponentModel.Composition\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Drawing\">\r\n      <Name>System.Drawing</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Runtime.Remoting\">\r\n      <Name>System.Runtime.Remoting</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"ApplicationContext.CLR.cs\" />\r\n    <Compile Include=\"ApplicationContext.cs\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Attributes.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Binders\\Binder.cs\" />\r\n    <Compile Include=\"Binders\\BinderHelper.cs\" />\r\n    <Compile Include=\"Binders\\InteropBinder.cs\" />\r\n    <Compile Include=\"Binders\\PhpRoutineExtensions.cs\" />\r\n    <Compile Include=\"Binders\\PhpDynamicMetaObjects.cs\" />\r\n    <Compile Include=\"Binders\\PhpGetMemberBinder.cs\" />\r\n    <Compile Include=\"Binders\\PhpBinder.cs\" />\r\n    <Compile Include=\"Binders\\PhpInvokeBinderKey.cs\" />\r\n    <Compile Include=\"Binders\\PhpInvokeMemberBinder.cs\" />\r\n    <Compile Include=\"Binders\\PhpOverloadResolver.cs\" />\r\n    <Compile Include=\"Binders\\ReturnArgumentHelpers.cs\" />\r\n    <Compile Include=\"Comparisons.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\Analyzer.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\AppCompiler.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\AST\\ArrayEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\AssignEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\BinaryEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\BuiltInFunctions.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\CallSignature.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\ConcatEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\ConstantUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\PHPDocBlock.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\CustomAttributes.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\DirectVariableUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\EchoStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\FieldUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\FunctionCall.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\FunctionDecl.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\GlobalCode.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\IfStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\IncDecEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\IndirectVariableUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\ItemUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\JumpStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\LambdaFunctionExpr.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\ListEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\LoopStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\NewAndInstanceof.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\ShellEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\Statement.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\SwitchStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\TernaryEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\TryStmt.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\TypeDecl.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\TypeRef.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\UnaryEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\VariableUse.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\YieldEx.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\Literal.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\Expression.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\NodeCompiler.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\NodeCompilers.cs\" />\r\n    <Compile Include=\"Compiler\\AST\\AstNodeExtension.cs\" />\r\n    <Compile Include=\"Compiler\\AstVisitor.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\CodeGenerator\\CallSitesBuilder.cs\" />\r\n    <Compile Include=\"Compiler\\CodeGenerator\\Chains.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\CodeGenerator\\CodeGenerator.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\CodeGenerator\\Places.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\CodeGenerator\\Stacks.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\Managers.CLR.cs\" />\r\n    <Compile Include=\"Compiler\\Managers.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\Statistics.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Compiler\\VariablesTable.cs\" />\r\n    <Compile Include=\"Compiler\\WebServerManagers.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Configuration.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"Conversions.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"DynamicCode.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\AssemblyBuilders.CLR.cs\" />\r\n    <Compile Include=\"Emit\\AssemblyBuilders.cs\" />\r\n    <Compile Include=\"Emit\\ClrOverloadBuilder.cs\" />\r\n    <Compile Include=\"Emit\\ClrStubBuilder.cs\" />\r\n    <Compile Include=\"Emit\\DelegateBuilder.cs\" />\r\n    <Compile Include=\"Emit\\DocFileBuilder.CLR.cs\" />\r\n    <Compile Include=\"Emit\\FunctionBuilder.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\ILEmitter.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\LibraryBuilder.cs\" />\r\n    <Compile Include=\"Emit\\ModuleBuilders.CLR.cs\" />\r\n    <Compile Include=\"Emit\\ModuleBuilders.cs\" />\r\n    <Compile Include=\"Emit\\OverloadsBuilder.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\PhpObjectBuilder.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\PhpStackBuilder.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\Places.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\ReflectionCache.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Emit\\ReflectionCacheGenerator.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ConversionsToClr.cs\" />\r\n    <Compile Include=\"HttpHeaders.CLR.cs\" />\r\n    <Compile Include=\"Library.CLR.cs\" />\r\n    <Compile Include=\"Logger.CLR.cs\" />\r\n    <Compile Include=\"PhpResourceManager.cs\" />\r\n    <Compile Include=\"PhpStream.CLR.cs\" />\r\n    <Compile Include=\"Compiler\\PhpTypeCode.cs\" />\r\n    <Compile Include=\"OrderedDictionary.cs\" />\r\n    <Compile Include=\"Reflection\\Assemblies.CLR.cs\" />\r\n    <Compile Include=\"Reflection\\CompilationUnits.CLR.cs\" />\r\n    <Compile Include=\"Reflection\\CompilationUnits.cs\" />\r\n    <Compile Include=\"Reflection\\Inclusions.CLR.cs\" />\r\n    <Compile Include=\"Reflection\\Inclusions.cs\" />\r\n    <Compile Include=\"Reflection\\Members.cs\" />\r\n    <Compile Include=\"Reflection\\MethodDescs.cs\" />\r\n    <Compile Include=\"Reflection\\Modules.CLR.cs\" />\r\n    <Compile Include=\"Reflection\\Modules.cs\" />\r\n    <Compile Include=\"Reflection\\MetaObject.cs\" />\r\n    <Compile Include=\"Reflection\\PhpLibraryModule.cs\" />\r\n    <Compile Include=\"Errors.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Execution.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Functions.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"GlobalVariables.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Hashtables.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Info.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Library.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LibraryVerifier.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Namespaces.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Operators.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Output.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpArray.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpBytes.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpCallback.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpObject.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpReference.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpResource.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpRuntimeChain.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpStack.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpStream.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpString.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Reflection\\Constants.cs\" />\r\n    <Compile Include=\"Reflection\\Declarations.cs\" />\r\n    <Compile Include=\"Reflection\\Methods.cs\" />\r\n    <Compile Include=\"Reflection\\Assemblies.cs\" />\r\n    <Compile Include=\"Reflection\\Objects.cs\" />\r\n    <Compile Include=\"Reflection\\Properties.cs\" />\r\n    <Compile Include=\"Reflection\\SourceUnit.cs\" />\r\n    <Compile Include=\"Reflection\\TypeDescs.cs\" />\r\n    <Compile Include=\"Reflection\\Types.cs\" />\r\n    <Compile Include=\"RequestContext.CLR.cs\" />\r\n    <Compile Include=\"RequestContext.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RequestHandler.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Script.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ScriptContext.CLR.cs\" />\r\n    <Compile Include=\"ScriptContext.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Serialization.CLR.cs\" />\r\n    <Compile Include=\"Serialization.cs\" />\r\n    <Compile Include=\"SessionHandler.CLR.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\ArrayAccess.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\Closure.cs\" />\r\n    <Compile Include=\"SPL\\Misc.cs\" />\r\n    <Compile Include=\"SPL\\Countable.cs\" />\r\n    <Compile Include=\"SPL\\Exception.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\Iterators.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\Reflection.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\ReflectionClass.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\ReflectionFunction.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\Serializable.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL\\SplObjectStorage.cs\" />\r\n    <Compile Include=\"StackTrace.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Statistics.CLR.cs\" />\r\n    <Compile Include=\"StreamFilters.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"StreamWrappers.CLR.cs\" />\r\n    <Compile Include=\"StreamWrappers.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Utils.CLR.cs\" />\r\n    <Compile Include=\"Utils.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Utilities\\GlobalScope.cs\" />\r\n    <Compile Include=\"Variables.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Content Include=\"Compiler\\AST\\Doc\\Nodes.xml\" />\r\n    <Content Include=\"Doc\\Common.xml\" />\r\n    <Content Include=\"Doc\\Conversions.xml\" />\r\n    <Content Include=\"Doc\\Externals.xml\" />\r\n    <Content Include=\"Doc\\Filters.xml\" />\r\n    <Content Include=\"Doc\\Operators.Overview.xml\" />\r\n    <Content Include=\"Doc\\Operators.xml\" />\r\n    <Content Include=\"Doc\\RootPage.html\" />\r\n    <Content Include=\"Doc\\Streams.xml\" />\r\n    <Content Include=\"Doc\\Wrappers.xml\" />\r\n    <None Include=\"Core.nuspec\" />\r\n    <None Include=\"Core.snk\" />\r\n    <None Include=\"Emit\\AssemblyBuilders.cd\" />\r\n    <None Include=\"Reflection\\DAssembly.cd\" />\r\n    <None Include=\"Reflection\\DMember.cd\" />\r\n    <None Include=\"Reflection\\DMemberDesc.cd\" />\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Core/Core.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Core/Doc/Common.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<docs>\r\n  <method name=\"Compare(x,y)\">\r\n    <param name=\"x\">The first item to compare.</param>\r\n    <param name=\"y\">The second item to compare.</param>\r\n    <returns>\r\n      Negative integer if <paramref name=\"x\"/> is less than <paramref name=\"y\"/>,\r\n      zero if <paramref name=\"x\"/> equals to <paramref name=\"y\"/> and positive integer\r\n      if <paramref name=\"x\"/> is greater than <paramref name=\"y\"/>.\r\n    </returns>\r\n  </method>\r\n\r\n  <method name=\"CompareEntries\">\r\n    <param name=\"keyA\">The key of the first entry.</param>\r\n    <param name=\"valueA\">The value of the first entry.</param>\r\n    <param name=\"keyB\">The key of the second entry.</param>\r\n    <param name=\"valueB\">The value of the second entry.</param>\r\n    <returns>\r\n      Negative integer if (<paramref name=\"keyA\"/>,<paramref name=\"valueA\"/>) is less than (<paramref name=\"keyB\"/>,<paramref name=\"valueB\"/>),\r\n      zero if (<paramref name=\"keyA\"/>,<paramref name=\"valueA\"/>) equals to (<paramref name=\"keyA\"/>,<paramref name=\"valueA\"/>) and positive integer\r\n      if (<paramref name=\"keyA\"/>,<paramref name=\"valueA\"/>) is greater than (<paramref name=\"keyA\"/>,<paramref name=\"valueA\"/>).\r\n    </returns>\r\n  </method>\r\n\r\n  <method name=\"CompareTo(obj,comparer)\">\r\n\t  <param name=\"obj\">An object to compare with this instance.</param>\r\n\t  <param name=\"comparer\">A comparer to be used for comparing items contained in this instance.</param>\r\n    <returns>\r\n      Negative integer if this instance is less than <paramref name=\"obj\"/>,\r\n      zero if this instance equals to <paramref name=\"obj\"/> and positive integer\r\n      if this instance is greater than <paramref name=\"obj\"/>.\r\n    </returns>\r\n    <remarks>\r\n      The <paramref name=\"comparer\"/> is used to compare items which contained in this instance (useful when the instance\r\n      is an array or object etc.).\r\n    </remarks>\r\n  </method>\r\n\r\n  <method name=\"CompareTo(obj)\">\r\n\t  <param name=\"obj\">An object to compare with this instance.</param>\r\n\t  <returns>\r\n      Negative integer if this instance is less than <paramref name=\"obj\"/>,\r\n      zero if this instance equals to <paramref name=\"obj\"/> and positive integer\r\n      if this instance is greater than <paramref name=\"obj\"/>.\r\n    </returns>\r\n    <remarks>\r\n      If the <paramref name=\"obj\"/> is also if type <see cref=\"PhpArray\"/>\r\n      the <see cref=\"PhpComparer.Default\"/> comparer is used for comparing its items. \r\n    </remarks>\r\n  </method>\r\n  \r\n  <method name=\"PhpStack.AddFrame\">\r\n\t\t<summary>\r\n\t\t  Pushes item(s) to the top of a stack.\r\n\t\t</summary>\r\n\t\t<remarks>\r\n\t\t  Sets a size of the current \r\n\t\t</remarks>\r\n\t\t<exception cref=\"IndexOutOfRangeException\">If there is not enough space in the stack.</exception>\r\n  </method>\r\n  \r\n  <method name=\"GetObjectData\">\r\n\t  <summary>\r\n\t    Populates a <see cref=\"SerializationInfo\"/> with the data needed to serialize the target object.\r\n\t  </summary>\r\n\t  <param name=\"info\">The <see cref=\"SerializationInfo\"/> to populate with data. </param>\r\n\t  <param name=\"context\">The destination (see <see cref=\"StreamingContext\"/>) for this serialization.</param>\r\n  </method>\r\n  \r\n  <method name=\"serialization.ctor\">\r\n\t  <summary>\r\n\t    Creates an instance from deserialized data using the specified <see cref=\"SerializationInfo\"/> and <see cref=\"StreamingContext\"/>.\r\n\t  </summary>\r\n\t  <param name=\"info\">The <see cref=\"SerializationInfo\"/> to receive data from.</param>\r\n\t  <param name=\"context\">The source (see <see cref=\"StreamingContext\"/>) for this deserialization.</param>\r\n  </method>\r\n  \r\n  <method name=\"GetRealObject\">\r\n\t  <summary>\r\n\t    Returns the real object that should be deserialized, rather than the object that the serialized stream specifies.\r\n\t  </summary>\r\n\t  <param name=\"context\">The <see cref=\"StreamingContext\"/> from which the current object is deserialized.</param>\r\n\t  <returns>Returns the actual object that is put into the graph.</returns>\r\n  </method>\r\n  \r\n  <method name=\"OnDeserialization\">\r\n\t  <summary>\r\n\t    Runs when the entire object graph has been deserialized.\r\n\t  </summary>\r\n\t  <param name=\"sender\">The object that initiated the callback.</param>\r\n  </method>\r\n  \r\n</docs>"
  },
  {
    "path": "Source/Core/Doc/Conversions.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<docs>\r\n  <method name=\"GetTypeCode\">\r\n    <summary>Returns code of type which implements this interface.</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n  <method name=\"ToDouble\">\r\n    <summary>Converts instance to its <see cref=\"double\" /> representation according to PHP conversion algorithm.</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n  <method name=\"ToInteger\">\r\n    <summary>Converts instance to its <see cref=\"int\" /> representation according to PHP conversion algorithm.</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n\t<method name=\"ToLongInteger\">\r\n\t\t<summary>\r\n\t\t\tConverts instance to its <see cref=\"long\" /> representation according to PHP conversion algorithm.\r\n\t\t</summary>\r\n\t\t<returns>The converted value.</returns>\r\n\t</method>\r\n\t<method name=\"ToBoolean\">\r\n    <summary>Converts instance to its <see cref=\"bool\" /> representation according to PHP conversion algorithm.</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n  <method name=\"ToPhpBytes\">\r\n    <summary>Converts instance to its binary representation (<see cref=\"PhpBytes\"/>).</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n  <method name=\"ToString\">\r\n    <summary>Converts instance to its string representation according to PHP conversion algorithm.</summary>\r\n    <returns>The converted value.</returns>\r\n  </method>\r\n  <method name=\"ToNumber\">\r\n    <summary>Converts instance to a number of type <see cref=\"double\" />, <see cref=\"long\"/> or <see cref=\"int\" />.</summary>\r\n\t\t<param name=\"intValue\">\r\n\t\t\tThe integer value. Valid iff <see cref=\"Convert.NumberInfo.Integer\"/> is returned.\r\n\t\t</param>\r\n\t\t<param name=\"longValue\">\r\n\t\t\tThe long integer value. Valid iff <see cref=\"Convert.NumberInfo.LongInteger\"/> is returned.\r\n\t\t</param>\r\n\t\t<param name=\"doubleValue\">\r\n\t\t\tThe double value. Valid iff <see cref=\"Convert.NumberInfo.Double\"/> is returned.\r\n\t\t</param>\r\n\t\t<returns>Type of the conversion result.</returns>\r\n  </method>\r\n  <method name=\"ObjectToArrayKey\">\r\n    <remarks>\r\n      <para>\r\n        <paramref name=\"obj\" /> is converted to <see cref=\"string\" /> and <see cref=\"int\" />\r\n        returned in <paramref name=\"key\" />.\r\n      </para>\r\n      <list type=\"table\">\r\n        <listheader>\r\n          <term>Actual type of <paramref name=\"obj\" /></term>\r\n          <term>Action</term>\r\n        </listheader>\r\n        <item>\r\n          <term><see cref=\"string\" /> or <see cref=\"PhpBytes\" /></term>\r\n          <description>\r\n            Values {-?[1-9][0-9]*|0} are converted to their numeric equivalents (e.g. \"2\" is converted to 2)\r\n            and returned. The others are returned unchanged.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>\r\n            <see cref=\"bool\" />\r\n          </term>\r\n          <description>\r\n            The <B>true</B> is converted to integer value 1, the <B>false</B> to 0.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>\r\n            <see cref=\"double\" />\r\n          </term>\r\n          <description>\r\n            The value is converted to <see cref=\"int\" /> with the overflow unchecked.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>\r\n            <B>null</B>\r\n          </term>\r\n          <description>\r\n            The <see cref=\"String.Empty\" /> is returned.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>otherwise</term>\r\n          <description>\r\n            The key is considered to be invalid.\r\n          </description>\r\n        </item>\r\n      </list>\r\n    </remarks>\r\n  </method>\r\n</docs>"
  },
  {
    "path": "Source/Core/Doc/Externals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<doc>\r\n    <method name=\"InvokeFunction\">\r\n\t\t<param name=\"moduleName\">The name of the extension where the function is defined (without trailing '.DLL').</param>\r\n\t\t<param name=\"functionName\">The name of the function.</param>\r\n\t\t<param name=\"args\">The parameters of the function.</param>\r\n\t\t<param name=\"refInfo\">Indexes into the <paramref name=\"args\"/> marking parameters that should\r\n\t\tbe passed by reference, and optionally terminated with <c>-1</c> which means that from\r\n\t\tthe last marked parameter on, everything should be passed by reference.</param>\r\n\t\t<returns>The return value of the function.</returns>\r\n    </method>\r\n    <method name=\"InvokeMethod\">\r\n\t\t<param name=\"moduleName\">The name of the extension where the method is defined (without trailing '.DLL').</param>\r\n\t\t<param name=\"className\">The name of the declaring class.</param>\r\n\t\t<param name=\"methodName\">The name of the method.</param>\r\n\t\t<param name=\"self\">The instance on which the method is to be invoked.</param>\r\n\t\t<param name=\"args\">The parameters of the method.</param>\r\n\t\t<param name=\"refInfo\">Indexes into the <paramref name=\"args\"/> marking parameters that should\r\n\t\tbe passed by reference, and optionally terminated with <c>-1</c> which means that from\r\n\t\tthe last marked parameter on, everything should be passed by reference.</param>\r\n\t\t<returns>The return value of the method.</returns>\r\n    </method>\r\n    <method name=\"BindParameter\">\r\n\t\t<param name=\"paramIndex\">The 0-based parameter index.</param>\r\n\t\t<returns>\r\n\t\t\tA <see cref=\"MarshalByRefObject\"/> implementing the <see cref=\"IExternalVariable\"/> interface,\r\n\t\t\tor <B>null</B> if the proxy could not be created.\r\n\t\t</returns>\r\n\t\t<remarks>\r\n\t\t\tThe reason for returning <B>null</B> include:\r\n\t\t\t<list type=\"bullet\">\r\n\t\t\t\t<item>no external function/method invocation has yet been performed by the <c>ExtManager</c></item>\r\n\t\t\t\t<item>the <paramref name=\"paramIndex\"/> is greater or equal to the number of parameters of the last\r\n\t\t\t\tinvocation</item>\r\n\t\t\t\t<item>the external function/method did not increment the corresponding <c>zval</c>'s reference\r\n\t\t\t\tcounter, thus the <c>zval</c> has been released</item>\r\n\t\t\t</list>\r\n\t\t</remarks>\r\n    </method>\r\n    <method name=\"GetStreamWrapper\">\r\n\t\t<param name=\"scheme\">The scheme portion of an URL that a wrapper is requested for.</param>\r\n\t\t<returns>\r\n\t\t\tA <see cref=\"MarshalByRefObject\"/> implementing the <see cref=\"IExternalStreamWrapper\"/> interface,\r\n\t\t\tor <B>null</B> if there is no wrapper for the given <paramref name=\"scheme\"/>.</returns>\r\n\t\t<remarks>\r\n\t\t\tSince PHP stream wrappers are stateless, the returned MBRO's lifetime should be limited only to the\r\n\t\t\tlifetime of the corresponding <c>ExtManager</c> instance.\r\n\t\t</remarks>\r\n    </method>\r\n    <method name=\"GetStreamWrapperSchemes\">\r\n\t\t<returns>The <see cref=\"ICollection\"/> of schemes (for example { &quot;ftp&quot;, &quot;http&quot; }).</returns>\r\n    </method>\r\n    <method name=\"GetStartupErrors\">\r\n\t\t<returns>\r\n\t\t\tAn <see cref=\"ICollection\"/> of strings - error messages of errors that occured during <c>ExtManager</c>(s)\r\n\t\t\tstartup.\r\n\t\t</returns>\r\n    </method>\r\n    <method name=\"PhpInfo\">\r\n\t\t<returns>HTML formatted extension information.</returns>\r\n\t\t<remarks>\r\n\t\t\tCalled as a part of the <c>php_info</c> function processing.\r\n\t\t\t<seealso cref=\"M:PHP.Core.PhpNetInfo.Write(System.IO.TextWriter)\"/>\r\n\t\t</remarks>\r\n    </method>\r\n    <method name=\"GetModules\">\r\n\t\t<param name=\"internalNames\">If <B>true</B>, internal extension names will be returned, if <B>false</B>,\r\n\t\tfile names (without the trailing <c>.DLL</c>) will be returned.</param>\r\n\t\t<returns>An <see cref=\"ICollection\"/> of extension names.</returns>\r\n    </method>\r\n    <method name=\"GetModuleVersion\">\r\n\t\t<param name=\"moduleName\">The name of the extension.</param>\r\n\t\t<param name=\"internalName\">If <B>true</B>, <paramref name=\"moduleName\"/> is an internal extension name,\r\n\t\tif <B>false</B>, <paramref name=\"moduleName\"/> is a file name (without the trailing <c>.DLL</c>).</param>\r\n\t\t<param name=\"loaded\"><B>true</B> if <paramref name=\"moduleName\"/> is loaded, <B>false</B> otherwise.</param>\r\n\t\t<returns>The version if <paramref name=\"moduleName\"/> is loaded and its version is specified,\r\n\t\t<B>null</B> otherwise.</returns>\r\n    </method>\r\n    <method name=\"GetFunctionsByModule\">\r\n\t\t<param name=\"moduleName\">The name of the extension.</param>\r\n\t\t<param name=\"internalName\">If <B>true</B>, <paramref name=\"moduleName\"/> is an internal extension name,\r\n\t\tif <B>false</B>, <paramref name=\"moduleName\"/> is a file name (without the trailing <c>.DLL</c>).</param>\r\n\t\t<returns>An <see cref=\"ICollection\"/> of function names or <B>null</B> if the extension was not found.</returns>\r\n        <remarks>\r\n\t\t\tThe extension must be loaded (there must be <c>load=\"true\"</c> in the corresponding entry in\r\n\t\t\t<c>ExtManager.exe.config</c> file) in order to discover its functions.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"GetClassesByModule\">\r\n\t\t<param name=\"moduleName\">The name of the extension.</param>\r\n\t\t<param name=\"internalName\">If <B>true</B>, <paramref name=\"moduleName\"/> is an internal extension name,\r\n\t\tif <B>false</B>, <paramref name=\"moduleName\"/> is a file name (without the trailing <c>.DLL</c>).</param>\r\n\t\t<returns>An <see cref=\"ICollection\"/> of class names or <B>null</B> if the extension was not found.</returns>\r\n        <remarks>\r\n\t\t\tThe extension must be loaded (there must be <c>load=\"true\"</c> in the corresponding entry in\r\n\t\t\t<c>ExtManager.exe.config</c> file) in order to discover its classes.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"GenerateManagedWrapper\">\r\n\t\t<param name=\"moduleName\">The name of the extension.</param>\r\n\t\t<returns>An error/notice message or <B>null</B> if there was no error or notice.</returns>\r\n\t\t<remarks>\r\n\t\t\tThe extension does not need to be loaded.\r\n\t\t</remarks>\r\n    </method>\r\n    <method name=\"LoadExtension\">\r\n\t\t<param name=\"descriptor\">The library descriptor describing the extension (encapsulates file name, file path,\r\n    earlyInit).</param>\r\n    </method>\r\n    <method name=\"BeginRequest\">\r\n\t\t<remarks/>\r\n    </method>\r\n    <method name=\"EndRequest\">\r\n\t\t<remarks/>\r\n    </method>\r\n    <method name=\"GetInstanceUrl\">\r\n\t\t<param name=\"generalUrl\">The well-known URL through which this method is called.</param>\r\n\t\t<param name=\"appConfig\">Application configuration.</param>\r\n\t\t<param name=\"extConfig\">Extension configuration (collection of <see cref=\"ExtensionLibraryDescriptor\"/>s).</param>\r\n\t\t<returns>The instance (private) URL.</returns>\r\n        <remarks>\r\n\t\t\tEach <c>ExtManager</c> creates two channels. One of them is a channel with a well-known section name.\r\n\t\t\tThe other one has a generated unique section name. <c>RemoteDispatcher</c> can be called\r\n\t\t\tthrough both of them. However, if you use the well-known one, you might be talking to different\r\n\t\t\tinstances of <c>ExtManager</c> every time you make a call. This is alright when there is no request\r\n\t\t\tcontext. If you are operating in a request context, all calls must be served by the same instance\r\n\t\t\tof <c>ExtManager</c>. Therefore, you should first call <see cref=\"M:PHP.Core.IExternals.GetInstanceUrl(System.String)\"/>\r\n\t\t\tto obtain a URL through which you then connect to <c>RemoteDispatcher</c> again. But with this connection,\r\n\t\t\tyou can be sure that as long as your request is active, \"your\" <c>ExtManager</c> doesn't terminate\r\n\t\t\t(unless something terrible happens, of course). <c>ExtManager</c> can be gracefully terminated by\r\n\t\t\tcalling <see cref=\"M:PHP.Core.IExternals.GracefulShutdown\"/>. Usually you will do this after you have changed\r\n\t\t\tconfiguration.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"GracefulShutdown\">\r\n\t\t<remarks/>\r\n    </method>\r\n    <method name=\"IniSet\">\r\n\t\t<param name=\"varName\">The INI entry name.</param>\r\n\t\t<param name=\"newValue\">The new INI entry value.</param>\r\n\t\t<param name=\"oldValue\">Will receive the old INI entry value (valid only if the return value is <B>true</B>).</param>\r\n\t\t<returns><B>true</B> if the entry specified by <paramref name=\"varName\"/> exists, <B>false</B> otherwise.</returns>\r\n        <remarks>\r\n\t\t\tStartup values of extension related INI entries can be configured in <c>ExtManager.exe.config</c>.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"IniGet\">\r\n\t\t<param name=\"varName\">The INI entry name.</param>\r\n\t\t<param name=\"value\">Will receive the INI entry value.</param>\r\n\t\t<returns><B>true</B> if the entry specified by <paramref name=\"varName\"/> exists, <B>false</B> otherwise.</returns>\r\n        <remarks>\r\n\t\t\tStartup values of extension related INI entries can be configured in <c>ExtManager.exe.config</c>.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"IniRestore\">\r\n\t\t<param name=\"varName\">The INI entry name.</param>\r\n\t\t<returns><B>true</B> if the entry specified by <paramref name=\"varName\"/> exists, <B>false</B> otherwise.</returns>\r\n        <remarks>\r\n\t\t\tStartup values of extension related INI entries can be configured in <c>ExtManager.exe.config</c>.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"IniGetAll\">\r\n\t\t<param name=\"extension\">Name of an extension (internal name, for example &quot;sockets&quot;!) or <B>null</B>.</param>\r\n\t\t<returns>All registered configuration options. If <paramref name=\"extension\"/> is not <B>null</B>,\r\n\t\tonly options specific for that extension are returned.</returns>\r\n        <remarks>\r\n\t        Startup values of extension related INI entries can be configured in <c>ExtManager.exe.config</c>.\r\n        </remarks>\r\n    </method>\r\n    <method name=\"IniOptionExists\">\r\n\t\t<param name=\"moduleName\">File name of an extension without '.DLL' (i.e. &quot;php_sockets&quot;).</param>\r\n\t\t<param name=\"varName\">The INI entry name.</param>\r\n\t\t<returns><B>true</B> if the entry specified by <paramref name=\"varName\"/> was registered by the\r\n\t\t<paramref name=\"moduleName\"/>, <B>false</B> otherwise.</returns>\r\n\t\t<remarks>\r\n\t\t\tThe extension does not need to be loaded.\r\n\t\t</remarks>\r\n    </method>\r\n</doc>\r\n"
  },
  {
    "path": "Source/Core/Doc/Filters.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n\r\n</docs>"
  },
  {
    "path": "Source/Core/Doc/Operators.Overview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<overview>\r\n</overview>\r\n"
  },
  {
    "path": "Source/Core/Doc/Operators.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<docs>\r\n  <operator name=\"BitNot\">\r\n    <remarks>\r\n      <list type=\"table\">\r\n        <listheader>\r\n          <term>The type of the <paramref name=\"x\" /></term>\r\n          <description>The action and the result</description>\r\n        </listheader>\r\n        <item>\r\n          <term>\r\n            <see cref=\"Int32\" />\r\n          </term>\r\n          <description>\r\n            The standard ~ operator is applied on <paramref name=\"x\" /> integer. The result is of type <see cref=\"Int32\" />.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>\r\n            <see cref=\"Double\" />\r\n          </term>\r\n          <description>\r\n            <paramref name=\"x\" /> is converted to <see cref=\"Int32\" /> and than the standard ~ operator is applied. \r\n            The result is of type <see cref=\"Int32\" />.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term><see cref=\"Byte\" />[]</term>\r\n          <description>\r\n            The standard ~ operator is applied on each byte of that array. The result is of type <see cref=\"Byte\" />[].\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>\r\n            <see cref=\"String\" />\r\n          </term>\r\n          <description>\r\n            <paramref name=\"x\" /> is converted to <see cref=\"Byte\" />[] and standard ~ operator is applied on each \r\n            byte of that array. The result is of type <see cref=\"Byte\" />[].\r\n          </description>\r\n        </item>\r\n      </list>\r\n    </remarks>\r\n  </operator>\r\n  <operator name=\"GetItem\">\r\n    <remarks>\r\n      <list type=\"table\">\r\n        <listheader>\r\n          <term>Actual type of <paramref name=\"var\" /></term>\r\n          <term>Action</term>\r\n        </listheader>\r\n        <item>\r\n          <term><see cref=\"string\" /> or <see cref=\"PhpBytes\" /></term>\r\n          <description>\r\n            The <paramref name=\"key\"/> is converted to an integer by <see cref=\"Convert.ObjectToInteger\"/>.\r\n            If the result of the conversion is negative or points beyond the last character/byte of the <paramref name=\"var\"/>\r\n            the <B>null</B> is returned (this is slightly different behavior from the PHP but more consistent\r\n            paying attention to the \"isset\" PHP function implementation).\r\n            Otherwise, the <paramref name=\"key\"/>-th character and byte is wrapped into a new string and <see cref=\"PhpBytes\"/>\r\n            instance, respectively, and returned.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term><see cref=\"PhpArray\" /></term>\r\n          <description>\r\n            The value associated with <paramref name=\"key\" /> is returned.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term><see cref=\"PhpObject\" /></term>\r\n          <description>\r\n            It is a fatal error to apply the operator to an instance of <see cref=\"PhpObject\" />.\r\n          </description>\r\n        </item>\r\n        <item>\r\n          <term>otherwise</term>\r\n          <description>\r\n            <B>null</B> is returned.\r\n          </description>\r\n        </item>\r\n      </list>\r\n    </remarks>\r\n  </operator>\r\n  <operator name=\"SetStringItem\">\r\n    <remarks>\r\n      <para>The <paramref name=\"index\" /> is converted to an integer by <see cref=\"Convert.ObjectToInteger\" />.\r\n      If the resulting index is greater than the length of the <paramref name=\"str\" /> string then the \r\n      empty space between the last character of the <paramref name=\"str\" /> and such index is filled by spaces.</para>\r\n      <para><paramref name=\"value\" /> is converted to a string by <see cref=\"Convert.ObjectToString\" />.\r\n      The <paramref name=\"index\" />-th character is set to the first character of that conversion result\r\n      or the '\\0' character if the conversion leads to an empty string.</para>\r\n    </remarks>\r\n  </operator>\r\n  <operator name=\"SetBytesItem\">\r\n    <remarks>\r\n      <para><paramref name=\"value\" /> is converted to a bytes array via the current <see cref=\"Encoding\"/>.\r\n      The new byte which is an item set to is the first byte of the result of that conversion\r\n      or the 0 byte if the conversion leads to an empty array.</para>\r\n      <para>The <paramref name=\"index\" /> is converted to an integer by <see cref=\"Convert.ObjectToInteger\" />.\r\n      If the resulting index is greater than the length of the <paramref name=\"bytes\" /> array then the \r\n      empty space between the last byte of the <paramref name=\"bytes\" /> and such index is filled by 0x20 bytes.</para>\r\n    </remarks>\r\n  </operator>\r\n</docs>"
  },
  {
    "path": "Source/Core/Doc/RootPage.html",
    "content": "<html dir=\"LTR\">\r\n  <head>\r\n    <META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n    <meta name=\"vs_targetSchema\" content=\"http://schemas.microsoft.com/intellisense/ie5\">\r\n    <title>Phalanger Core Reference</title>\r\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"MSDN.css\">\r\n  </head>\r\n  <body id=\"bodyID\" class=\"dtBODY\">\r\n    <div id=\"nsbanner\">\r\n      <div id=\"bannerrow1\">\r\n        <table class=\"bannerparthead\" cellspacing=\"0\" ID=\"Table1\">\r\n          <tr id=\"hdr\">\r\n            <td class=\"runninghead\">Phalanger Core Reference</td>\r\n            <td class=\"product\"></td>\r\n          </tr>\r\n        </table>\r\n      </div>\r\n      <div id=\"TitleRow\">\r\n        <h1 class=\"dtH1\">Phalanger Core Reference</h1>\r\n      </div>\r\n    </div>\r\n    <div id=\"nstext\">\r\n      <p>\r\n        This section contains reference documentation of the public classes that constitute the Phalanger Core.\r\n      </p>\r\n    </div>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "Source/Core/Doc/Streams.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n\r\n<method name=\"Stat\">\r\n  <summary>\r\n  Gives detailed filesystem-relevant information about the stream such as \r\n  size, creatiion and modification dates etc.\r\n  </summary>\r\n  <returns><see cref=\"PhpArray\"/> with the <c>stat</c> results.</returns>\r\n  <exception cref=\"PhpException\">When the stream does not support <c>stat()</c>.</exception>\r\n</method>\r\n\r\n<method name=\"SetParameter\">\r\n  <summary>\r\n  Performs additional operations on the stream. Corresponds to <c>php_stream_ops.set_option()</c>\r\n  except of the format of the operation argument.\r\n  </summary>\r\n  <param name=\"option\">The operation identifier. One of the <see cref=\"StreamParameterOptions\"/>.</param>\r\n  <param name=\"value\">The operation argument.</param>\r\n  <returns><c>true</c> if the operation is supported and was successful, <c>false</c> otherwise.</returns>\r\n</method>\r\n\r\n<method name=\"RawRead\">\r\n  <summary>\r\n  Reads raw byte data from the underlying stream to the given <paramref name=\"buffer\"/>.\r\n  </summary>\r\n  <param name=\"buffer\">The buffer.</param>\r\n  <param name=\"offset\">Starting index in the <paramref name=\"buffer\"/>.</param>  \r\n  <param name=\"count\">How many bytes to read.</param>\r\n  <returns>The number of bytes read or <c>0</c> in case of EOF or <c>-1</c> in case of an error.</returns>\r\n</method>\r\n\r\n<method name=\"RawWrite\">\r\n  <summary>\r\n  Writes the binary data from the <paramref name=\"buffer\"/>to the underlying stream.\r\n  </summary>\r\n  <param name=\"buffer\">The buffer.</param>\r\n  <param name=\"offset\">Starting index in the <paramref name=\"buffer\"/>.</param>  \r\n  <param name=\"count\">How many bytes to write.</param>\r\n  <returns>The number of bytes written or <c>-1</c> in case of an error.</returns>\r\n</method>\r\n\r\n<method name=\"RawFlush\">\r\n  <summary>\r\n  Flushes the underlying stream.\r\n  </summary>\r\n  <returns><c>true</c> on success, <c>false</c> on error.</returns>\r\n</method>\r\n\r\n<property name=\"RawEof\">\r\n  <summary>\r\n  <c>true</c> if the end of the stream was reached, <c>false</c> otherwise.\r\n  </summary>\r\n</property>\r\n\r\n<method name=\"RawTell\">\r\n  <summary>\r\n  Retreives the position in the underlying stream in bytes from the beginning.\r\n  </summary>\r\n  <returns>The position or <c>-1</c> on error.</returns>\r\n  <exception cref=\"PhpException\">When seeking is not supported.</exception>\r\n</method>\r\n\r\n<method name=\"RawSeek\">\r\n\t<summary>\r\n\tChanges the offset in the underlying stream.\r\n\t</summary>\r\n\t<param name=\"offset\">New position from the <paramref name=\"whence\"/> position.</param>\r\n\t<param name=\"whence\">Where to count the <paramref name=\"offset\"/> from. May be one\r\n\tof the <see cref=\"SeekOrigin\"/> options.</param>\r\n  <returns><c>true</c> on success, <c>false</c> on error.</returns>\r\n  <exception cref=\"PhpException\">When seeking is not supported.</exception>\r\n</method>\r\n\r\n<property name=\"RawStream\">\r\n  <summary>\r\n  Casts this instance as the <see cref=\"System.IO.Stream\"/>\r\n  (gives direct acess to the unbuffered and unfiltered raw binary data).\r\n  </summary>\r\n</property>\r\n\r\n<property name=\"CanSeek\">\r\n  <summary>\r\n  <c>true</c> if this stream implements seeking behavior (<c>Seek</c> and <c>Tell</c>).\r\n  </summary>\r\n</property> \r\n\r\n<property name=\"CanCast\">\r\n  <summary>\r\n  <c>true</c> if this stream supports conversion to <see cref=\"System.IO.Stream\"/>.\r\n  </summary>\r\n</property> \r\n\r\n</docs>"
  },
  {
    "path": "Source/Core/Doc/Wrappers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r\n<docs>\r\n\r\n<method name=\"Open\">\r\n  <summary>\r\n  Called by <c>fopen()</c> for the specific wrapper determined by the scheme portion of an URL. \r\n  Override in descendants to make new instances of <see cref=\"PhpStream\"/>s.\r\n  </summary>\r\n  <param name=\"path\">The path passed to <c>fopen()</c> which will be set to the opened absolute path.</param>\r\n  <param name=\"mode\">The mode passed to <c>fopen()</c>.</param>\r\n  <param name=\"options\">Combination of <see cref=\"PHP.Core.StreamOpenOptions\"/>.</param>\r\n  <param name=\"context\">The context provided for the stream wrapper at the call to <c>fopen()</c>.</param>\r\n  <returns>A new instance of <see cref=\"PhpStream\" /> encapsulating the data Stream.\r\n  Returns null in case of failure - will be cast to false for <c>fopen()</c>.\r\n  </returns>\r\n</method>\r\n\r\n<method name=\"Stat\">\r\n  <summary>\r\n  Creates the stat-structure for a specified file.\r\n  </summary>\r\n  <remarks>\r\n  Regarding the stream_wrapper_register(), the stat() is an instance\r\n  method of a stream. Maybe a PhpStream should remember the open-path\r\n  of the contained file for such purposes but currently I can see\r\n  no PHP function requiring stat() on an opened stream.\r\n  </remarks>\r\n  <param name=\"path\">The target filename.</param>\r\n  <param name=\"options\">Additional options.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <param name=\"streamStat\">Wheter to use stream_stat() or url_stat() when invoking user wrapper.</param>\r\n  <returns>A <see cref=\"StatStruct\"/> containing the stat information about the target file \r\n  or with st_size set to <c>-1</c> in case of failure.</returns>\r\n  <exception cref=\"PhpException\">Throws a warning in case of failure.</exception>\r\n</method>\r\n\r\n<method name=\"Unlink\">\r\n  <summary>\r\n  Deletes the specified file using an appropriate stream-wrapper\r\n  depending on the scheme portion of the given <paramref name=\"path\"/>.\r\n  </summary>\r\n  <remarks>\r\n  Only the file and ftp wrappers support file deletion.\r\n  </remarks>\r\n  <param name=\"path\">The URL to the file to be deleted.</param>\r\n  <param name=\"options\">Additional options.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <returns>True if the file was deleted otherwise false.</returns>\r\n</method>\r\n\r\n<method name=\"Listing\">\r\n  <summary>\r\n  Provides an array of filenames used to create a DirectoryListing\r\n  for directory enumeration.\r\n  </summary>\r\n  <param name=\"path\">The directory to be explored.</param>\r\n  <param name=\"options\">This parameter is unused.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <returns>An array of filenames or null in case of failure.</returns>\r\n</method>\r\n\r\n<method name=\"Rename\">\r\n  <summary>\r\n  Renames the file specified by <paramref name=\"fromPath\"/> to <paramref name=\"toPath\"/>.\r\n  Does not work accross wrappers.\r\n  </summary>\r\n  <param name=\"fromPath\">The original filename.</param>\r\n  <param name=\"toPath\">The new filename.</param>\r\n  <param name=\"options\">Unused.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <returns>True in case of success.</returns>\r\n</method>\r\n\r\n<method name=\"MakeDirectory\">\r\n  <summary>\r\n  Creates a directory or a whole branch of directories in the specified path.\r\n  </summary>\r\n  <param name=\"path\">The directory to create (may work recursively).</param>\r\n  <param name=\"accessMode\">Directory access mode (for UNIX systems, defaults to 0777).</param>\r\n  <param name=\"options\">Additional options.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <returns>True in case of success.</returns>\r\n</method>\r\n\r\n<method name=\"RemoveDirectory\">\r\n  <summary>\r\n  Removes the specified directory.\r\n  </summary>\r\n  <param name=\"path\">The directory to remove.</param>\r\n  <param name=\"options\">Unused.</param>\r\n  <param name=\"context\">Wrapper-specific options.</param>\r\n  <returns>True in case of success.</returns>\r\n</method>\r\n\r\n<property name=\"Label\">\r\n  <summary>\r\n  Gets the text identifier of this StreamWrapper used in error messages.\r\n  </summary>\r\n</property>\r\n\r\n<property name=\"Scheme\">\r\n  <summary>\r\n  Gets the protocol portion of URL handled by this wrapper.\r\n  </summary>\r\n</property>\r\n\r\n<property name=\"IsUrl\">\r\n  <summary>\r\n  Gets whether or not this wrapper is affected by the AllowUrlFopen configuration.\r\n  </summary>\r\n</property>\r\n\r\n</docs>"
  },
  {
    "path": "Source/Core/DynamicCode.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Globalization;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region TypesProvider\r\n\r\n\tusing PHP.Core.Reflection;\r\n\tusing ProvidedType = KeyValuePair<string, PHP.Core.Reflection.DTypeDesc>;\r\n\r\n\t/// <summary>\r\n\t/// Provides access to class and interface declarators and \r\n\t/// remembers which of them were provided and so the user depends on them.\r\n\t/// </summary>\r\n\tpublic sealed class TypesProvider\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A current script context in which the declarations are provided.\r\n\t\t/// </summary>\r\n\t\tprivate readonly ScriptContext context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A current type context in which the declarations are provided.\r\n\t\t/// </summary>\r\n\t\tprivate readonly DTypeDesc caller;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A hybrid dictionary of types that has been provided since since the creation of the provider.\r\n\t\t/// </summary>\r\n\t\tpublic List<ProvidedType> ProvidedTypes { get { return providedTypes; } }\r\n\t\tprivate List<ProvidedType> providedTypes;\r\n\r\n\t\t/// <param name=\"context\">A script context to get declarators from.</param>\r\n\t\t/// <param name=\"caller\">A current type context.</param>\r\n\t\tpublic TypesProvider(ScriptContext/*!*/ context, DTypeDesc/*!*/ caller)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null && caller != null);\r\n\r\n\t\t\tthis.context = context;\r\n\t\t\tthis.caller = caller;\r\n\t\t\tDebug.WriteLine(\"PROVIDER\", \"created\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Provides the caller a type of a specified name. The caller is made dependent on the requested type.\r\n\t\t/// Important: the caller is made dependent also on non-existing type (i.e. if the method returns <B>null</B>)! \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of requested file (case insensitive).</param>\r\n\t\t/// <returns>The requested type or <B>null</B> if the type has not been declared on the associated context.</returns>\r\n\t\tpublic DTypeDesc ProvideType(string name)\r\n\t\t{\r\n\t\t\tDTypeDesc type = context.DeclaredTypes[name];\r\n\r\n\t\t\t// remembers phantoms - the types which are not contained in the declarators table:\r\n\t\t\tif (providedTypes == null)\r\n\t\t\t\tprovidedTypes = new List<ProvidedType>();\r\n\r\n\t\t\tprovidedTypes.Add(new ProvidedType(name, type));\r\n\r\n\t\t\tDebug.WriteLine(\"PROVIDER\", \"Added: {0} ({1})\", name, type.RealType.FullName);\r\n\r\n\t\t\treturn type;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a type has been declared on the current context.\r\n\t\t/// Doesn't make the caller dependent on the existance of the declarator!\r\n\t\t/// The caller mustn't use this methods if its result is used in a way establishing a dependency.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The type name.</param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool IsTypeDeclared(string name)\r\n\t\t{\r\n\t\t\treturn context.DeclaredTypes.ContainsKey(name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for type using <see cref=\"ScriptContext.ResolveType\"/>. If the type is found \r\n\t\t/// and has a declarator (is a user type) then the caller is made dependent on it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The type.</returns>\r\n\t\tpublic DTypeDesc FindAndProvideType(string name)\r\n\t\t{\r\n\t\t\t// finds a type - searches in script context and in libraries, may also run __autoload:\r\n\t\t\tDTypeDesc type = context.ResolveType(name, null, caller, null, ResolveTypeFlags.UseAutoload);\r\n\r\n\t\t\t// if the type is a user type then does provide the type:\r\n\t\t\tif (type != null && context.DeclaredTypes.ContainsKey(name))\r\n\t\t\t{\r\n\t\t\t\tif (providedTypes == null)\r\n\t\t\t\t\tprovidedTypes = new List<ProvidedType>();\r\n\r\n\t\t\t\tprovidedTypes.Add(new ProvidedType(name, type));\r\n\r\n\t\t\t\tDebug.WriteLine(\"PROVIDER\", \"Added: {0} ({1})\", name, type.RealType.FullName);\r\n\t\t\t}\r\n\r\n\t\t\treturn type;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Try to load all <paramref name=\"providedTypes\"/>. This can invoke autoloading if necessary.\r\n        /// Check if they were not modified, so calling compilation unit has to be invalidated and recompiled.\r\n        /// </summary>\r\n\t\t/// <param name=\"providedTypes\">a list of provided type declarators. Can be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"target\">The script context to be checked.</param>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n\t\t/// <returns><paramref name=\"providedTypes\"/> are loadable and match in context of <paramref name=\"target\"/>.</returns>\r\n        public static bool LoadAndMatch(List<ProvidedType> providedTypes, ScriptContext/*!*/ target, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tDebug.Assert(target != null);\r\n\r\n            if (providedTypes != null && providedTypes.Count > 0)\r\n\t\t\t{\r\n                //// there is less declarators than we require:\r\n                //if (target.DeclaredTypes.Count < providedTypes.Count) return false;\r\n\r\n\t\t\t\t// looks up each provided declarator in the target context:\r\n\t\t\t\tforeach (ProvidedType declarator in providedTypes)\r\n\t\t\t\t{\r\n                    //DTypeDesc decl_type;\r\n                    //target.DeclaredTypes.TryGetValue(declarator.Key, out decl_type);\r\n\r\n                    // When class is compiled in runtime, autoload is invoked on base class (if isn't already declared). \r\n                    // We have to call autoload on the base class also in transient assembly\r\n                    var decl_type = target.ResolveType(declarator.Key, null, caller, null, ResolveTypeFlags.UseAutoload);\r\n                    if (decl_type == null || decl_type.RealType != declarator.Value.RealType)\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Kinds of eval.\r\n\t/// </summary>\r\n\tpublic enum EvalKinds\r\n\t{\r\n\t\tUnknown,\r\n\t\tExplicitEval,\r\n\t\tSyntheticEval,\r\n\t\tLambdaFunction,\r\n\t\tAssert,\r\n\r\n\t\tDynamicInclude // used on Silverlight\r\n\t}\r\n\r\n\t#region Dynamic Code\r\n\r\n\t/// <summary>\r\n\t/// Provides means for executing code (evals, asserts, lambda functions) dynamically.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic static class DynamicCode\r\n\t{\r\n\t\tinternal const string LambdaFunctionName = \"Lambda_\";\r\n\t\tinternal const string InlinedLambdaFunctionName = \"InlinedLambda\";\r\n\t\tinternal static readonly Type/*!*/ DynamicMethodType = typeof(DynamicCode);\r\n\r\n        /// <summary>\r\n        /// An index used in lambda function name. Common for all threads, increased interlocked.\r\n        /// </summary>\r\n        private static int LambdaFunctionIndex = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a name for a lambda function.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n        internal static string/*!*/ GenerateLambdaName()\r\n\t\t{\r\n            uint index = (uint)Interlocked.Increment(ref LambdaFunctionIndex);\r\n            return LambdaFunctionName + index;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Generates a name for a lambda function.\r\n        /// </summary>\r\n        /// <param name=\"parameters\">Parameters string.</param>\r\n        /// <param name=\"body\">Function body string.</param>\r\n        /// <returns>The name.</returns>\r\n        public static string/*!*/ GenerateLambdaName(string/*!*/ parameters, string/*!*/ body)\r\n        {\r\n            return LambdaFunctionName + \r\n                unchecked((uint)body.GetHashCode()).ToString() + \"_\" + \r\n                unchecked((uint)parameters.GetHashCode()).ToString() + \r\n                (parameters.Length + body.Length).ToString();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets prefixes of lambda function source code.\r\n\t\t/// First prefix is \"function {name}(\", the second is \"function {name}({parameters}){\".\r\n\t\t/// </summary>\r\n\t\tpublic static void GetLamdaFunctionCodePrefixes(string name, string parameters, out string prefix1, out string prefix2)\r\n\t\t{\r\n\t\t\tprefix1 = String.Concat(\"function \", name, \"(\");\r\n\t\t\tprefix2 = String.Concat(prefix1, parameters, \"){\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles a function with a specified parameters and body and adds it to dynamic module. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameters\">The function's parameters (e.g. <c>\"$x, $y = 1, &amp;$z\"</c>).</param>\r\n\t\t/// <param name=\"body\">The function's body.</param>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <param name=\"descriptor\"></param>\r\n\t\t/// <returns>A name of the created function.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Any parameter is a <B>null</B> reference.</exception>\r\n\t\tpublic static string CreateLambdaFunction(string/*!*/ parameters, string/*!*/ body, ScriptContext/*!*/ context,\r\n\t\t\tSourceCodeDescriptor descriptor)\r\n\t\t{\r\n\t\t\tif (parameters == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"parameters\");\r\n\t\t\tif (body == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"body\");\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\tstring name = GenerateLambdaName(parameters, body);\r\n            if (context.DeclaredFunctions != null && context.DeclaredFunctions.ContainsKey(name))\r\n                return name;\r\n\r\n\t\t\tstring prefix1, prefix2;\r\n\t\t\tGetLamdaFunctionCodePrefixes(name, parameters, out prefix1, out prefix2);\r\n\r\n\t\t\tcontext.ClearCapturedSourceCodeDescriptor();\r\n\t\t\tEvalInternal(prefix2, body, \"}\", EvalKinds.LambdaFunction, context, null, null, null, descriptor, false, null); // TODO: naming context in lambda function??\r\n\r\n\t\t\treturn name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements PHP <c>assert</c> construct. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assertion\">The condition to be checked.</param>\r\n\t\t/// <param name=\"context\">The current script context.</param>\r\n\t\t/// <param name=\"definedVariables\">Current scope run-time variables.</param>\r\n\t\t/// <param name=\"self\">The current <see cref=\"PhpObject\"/> in which method the eval is called. Can be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"includer\">A type desc of the current type in where eval is called in its method.</param>\r\n\t\t/// <param name=\"containingSourcePath\">Relative path to the source file of the calling script (used to evaluate __FILE__ and format error messages).</param>\r\n\t\t/// <param name=\"line\">The line where eval is called. Used only when error is reported in debug mode.</param>\r\n\t\t/// <param name=\"column\">The column where eval is called. Used only when error is reported in debug mode.</param>\r\n\t\t/// <param name=\"containerId\">Id of the containing transient module.</param>\r\n        /// <param name=\"namingContext\"></param>\r\n\t\t/// <returns>Whether the <paramref name=\"assertion\"/> doesn't evaluate to <B>false</B>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <paramref name=\"assertion\"/> is converted to string by <see cref=\"PHP.Core.Convert.ObjectToString\"/>,\r\n\t\t/// evaluated by <see cref=\"Eval\"/> and finally compared by == operator (see <see cref=\"PhpComparer.Default\"/>)\r\n\t\t/// for equality with <B>false</B>. Actions taken before evaluation as well as if assertion fails\r\n\t\t/// are defined by the <see cref=\"Configuration.Global\"/>, section \"assertion\".\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static bool Assert(\r\n\t\t\tobject assertion,\r\n\t\t\tScriptContext context,\r\n\t\t\tDictionary<string, object> definedVariables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc includer,\r\n\t\t\tstring containingSourcePath,\r\n\t\t\tint line,\r\n\t\t\tint column,\r\n\t\t\tint containerId,\r\n\t\t\tNamingContext namingContext)\r\n\t\t{\r\n\t\t\tobject result;\r\n\t\t\tstring code;\r\n\r\n\t\t\t// skips asserts if not active:\r\n\t\t\tif (!context.Config.Assertion.Active) return true;\r\n\r\n\t\t\tif ((code = PhpVariable.AsString(assertion)) != null)\r\n\t\t\t{\r\n\t\t\t\t// disables error reporting if eval should be quite:\r\n\t\t\t\tif (context.Config.Assertion.Quiet) context.DisableErrorReporting();\r\n\r\n\t\t\t\tSourceCodeDescriptor descriptor = new SourceCodeDescriptor(containingSourcePath, containerId, line, column);\r\n\r\n\t\t\t\t// evaluates the expression:\r\n\t\t\t\tresult = EvalInternal(\"return \", code, \";\", EvalKinds.Assert, context, definedVariables, self, includer, descriptor, false, namingContext);\r\n\r\n\t\t\t\t// restores error reporting if eval have been quite: \r\n\t\t\t\tif (context.Config.Assertion.Quiet) context.EnableErrorReporting();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = assertion;\r\n\t\t\t}\r\n\r\n\t\t\t// checks the result of assertion:\r\n\t\t\treturn CheckAssertion(result, code, context, containingSourcePath, line, column, namingContext);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static bool PreAssert(ScriptContext context)\r\n\t\t{\r\n\t\t\tif (!context.Config.Assertion.Active) return false;\r\n\r\n\t\t\t// disables error reporting if eval should be quite:\r\n\t\t\tif (context.Config.Assertion.Quiet) context.DisableErrorReporting();\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static void PostAssert(ScriptContext context)\r\n\t\t{\r\n\t\t\t// restores error reporting if eval have been quite: \r\n\t\t\tif (context.Config.Assertion.Quiet) context.EnableErrorReporting();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ckecks the value of an assertion and performs and according action.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assertion\">The value of assertion.</param>\r\n\t\t/// <param name=\"code\">The assertion condition source code.</param>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <param name=\"callerRelativeSourcePath\">A relative path to the source file where the assertion is stated.</param>\r\n\t\t/// <param name=\"line\">The line where the assertion is stated.</param>\r\n\t\t/// <param name=\"column\">The column where the assertion is stated.</param>\r\n        /// <param name=\"namingContext\"></param>\r\n\t\t/// <returns>Whether the assertion succeeded.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static bool CheckAssertion(\r\n\t\t\tobject assertion,\r\n\t\t\tstring code,\r\n\t\t\tScriptContext context,\r\n\t\t\tstring callerRelativeSourcePath,\r\n\t\t\tint line,\r\n\t\t\tint column,\r\n\t\t\tNamingContext namingContext)\r\n\t\t{\r\n\t\t\t// checks assertion:\r\n\t\t\tif (assertion != null && !PhpComparer./*Default.*/CompareEq(assertion, false))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t// calls user callback:\r\n\t\t\tif (context.Config.Assertion.Callback != null)\r\n\t\t\t{\r\n\t\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\t\t\t\tFullPath full_path = new FullPath(callerRelativeSourcePath, app_config.Compiler.SourceRoot);\r\n\t\t\t\tcontext.Config.Assertion.Callback.Invoke(full_path.FullFileName, line, code);\r\n\t\t\t}\r\n\r\n\t\t\t// reports a warning if required:\r\n\t\t\tif (context.Config.Assertion.ReportWarning)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"assertion_failed\", code));\r\n\r\n\t\t\t// terminates script execution if required:\r\n\t\t\tif (context.Config.Assertion.Terminate)\r\n\t\t\t\tthrow new ScriptDiedException(0);\r\n\r\n\t\t\t// assertion failed:\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements PHP <c>eval</c> construct. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"code\">A code to be evaluated.</param>\r\n\t\t/// <param name=\"synthetic\">Whether the eval is synthetic.</param>\r\n\t\t/// <param name=\"context\">The current script context.</param>\r\n\t\t/// <param name=\"definedVariables\">Currently defined variables.</param>\r\n\t\t/// <param name=\"self\">The current <see cref=\"PhpObject\"/> in which method the eval is called. Can be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"referringType\">A type desc of the type whose method is calling the eval.</param>\r\n\t\t/// <param name=\"callerRelativeSourcePath\">\r\n\t\t/// Relative path to the source file of a calling script with respect to the source root \r\n\t\t/// (used to evaluate __FILE__ and format error messages).\r\n\t\t/// </param>\r\n\t\t/// <param name=\"line\">The line where eval is called. Used only when error is reported in debug mode.</param>\r\n\t\t/// <param name=\"column\">The column where eval is called. Used only when error is reported in debug mode.</param>\r\n\t\t/// <param name=\"containerId\">Id of the containing transient module.</param>\r\n        /// <param name=\"namingContext\">Naming context of the caller.</param>\r\n\t\t/// <returns>The result of evaluation.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic static object Eval(\r\n\t\t\tstring code,\r\n\t\t\tbool synthetic,\r\n\t\t\tScriptContext context,\r\n\t\t\tDictionary<string, object> definedVariables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc referringType,\r\n\t\t\tstring callerRelativeSourcePath,\r\n\t\t\tint line,\r\n\t\t\tint column,\r\n\t\t\tint containerId,\r\n\t\t\tNamingContext namingContext)\r\n\t\t{\r\n\t\t\tEvalKinds kind = synthetic ? EvalKinds.SyntheticEval : EvalKinds.ExplicitEval;\r\n                return EvalInternal(\"\", code, \"\", kind, context, definedVariables, self, referringType,\r\n                    new SourceCodeDescriptor(callerRelativeSourcePath, containerId, line, column), false, namingContext);\r\n\t\t}\r\n\r\n#if SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Evaluates an entire PHP script file\r\n\t\t/// </summary>\r\n\t\tpublic static object EvalFile(\r\n\t\t\tstring code,\r\n\t\t\tScriptContext context,\r\n\t\t\tDictionary<string, object> definedVariables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc referringType,\r\n\t\t\tstring callerRelativeSourcePath,\r\n\t\t\tint line,\r\n\t\t\tint column,\r\n\t\t\tint containerId)\r\n\t\t{\r\n\t\t\treturn EvalInternal(\"\", code, \"\", EvalKinds.DynamicInclude, context, definedVariables, self, referringType,\r\n\t\t\t\tnew SourceCodeDescriptor(callerRelativeSourcePath, containerId, line, column), true, null);\r\n\t\t}\r\n#endif\r\n\t\t/// <summary>\r\n\t\t/// Implements PHP <c>eval</c> construct with given code prefix and suffix. \r\n\t\t/// A result of concatanation prefix + code + suffix is compiled.\r\n\t\t/// Prefix should contain no new line characters.\r\n\t\t/// </summary>\r\n\t\tinternal static object EvalInternal(\r\n\t\t\tstring prefix,\r\n\t\t\tstring code,\r\n\t\t\tstring suffix,\r\n\t\t\tEvalKinds kind,\r\n\t\t\tScriptContext/*!*/ scriptContext,\r\n\t\t\tDictionary<string, object> localVariables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc referringType,\r\n\t\t\tSourceCodeDescriptor descriptor,\r\n\t\t\tbool entireFile, \r\n\t\t\tNamingContext namingContext)\r\n\t\t{\r\n\t\t\tDebug.Assert(prefix != null && suffix != null);\r\n\r\n\t\t\t// composes code to be compiled:\r\n\t\t\tcode = String.Concat(prefix, code, suffix);\r\n\r\n\t\t\tTransientAssemblyBuilder assembly_builder = scriptContext.ApplicationContext.TransientAssemblyBuilder;\r\n\r\n\t\t\t// looks up the cache:\r\n\t\t\tTransientModule module = assembly_builder.TransientAssembly.GetModule(scriptContext, referringType, code, descriptor);\r\n\r\n            if (module == null)\r\n                // double checked lock,\r\n                // if module != null, it is definitely completed\r\n                // since module is added into TransientAssembly at the end\r\n                // of assembly_builder.Build\r\n                lock (assembly_builder.TransientAssembly)\r\n                {\r\n                    // lookup again, since it could be added into TransientAssembly while lock\r\n                    module = assembly_builder.TransientAssembly.GetModule(scriptContext, referringType, code, descriptor);\r\n\r\n                    if (module == null)\r\n                    {\r\n                        if (kind == EvalKinds.SyntheticEval)\r\n                            Debug.WriteLine(\"SYN EVAL\", \"Eval cache missed: '{0}'\", code.Substring(0, Math.Max(code.IndexOf('{'), 0)).TrimEnd());\r\n                        else\r\n                            Debug.WriteLine(\"EVAL\", \"Eval cache missed: '{0}'({1},{2})\", descriptor.ContainingSourcePath, descriptor.Line, descriptor.Column);\r\n\r\n                        CompilerConfiguration config = new CompilerConfiguration(Configuration.Application);\r\n\r\n                        CompilationContext context = new CompilationContext(scriptContext.ApplicationContext, null, config,\r\n                            new EvalErrorSink(-prefix.Length, config.Compiler.DisabledWarnings, config.Compiler.DisabledWarningNumbers),\r\n                            scriptContext.WorkingDirectory);\r\n\r\n                        TransientCompilationUnit unit = assembly_builder.Build(code, descriptor, kind, context,\r\n                            scriptContext, referringType, namingContext, entireFile);\r\n\r\n                        // compilation failed:\r\n                        if (unit == null) return false;\r\n                        module = unit.TransientModule;\r\n                    }\r\n                }\r\n\t\t\t\r\n\t\t\t// activates unconditionally declared types, functions and constants: \r\n            module.TransientCompilationUnit.Declare(scriptContext);\r\n\r\n\t\t\treturn module.Main(scriptContext, localVariables, self, referringType, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dumps content of transient assembly.\r\n\t\t/// </summary>\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic static void Dump(ScriptContext/*!*/ context, TextWriter output)\r\n\t\t{\r\n\t\t\tcontext.ApplicationContext.TransientAssemblyBuilder.TransientAssembly.Dump(output);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/AssemblyBuilders.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Resources;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t#region PhpAssemblyBuilder\r\n\r\n\tpublic abstract partial class PhpAssemblyBuilder : PhpAssemblyBuilderBase\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// A kind of assembly file.\r\n\t\t/// </summary>\r\n\t\tpublic AssemblyKinds Kind { get { return kind; } }\r\n\t\tprivate readonly AssemblyKinds kind;\r\n\r\n\t\tpublic bool IsExecutable\r\n\t\t{\r\n\t\t\tget { return kind == AssemblyKinds.ConsoleApplication || kind == AssemblyKinds.WindowApplication; }\r\n\t\t}\r\n\r\n\t\tpublic override bool IsTransient { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the assembly contains debug information.\r\n\t\t/// </summary>\r\n\t\tpublic bool Debuggable { get { return debuggable; } }\r\n\t\tprivate readonly bool debuggable;\r\n\r\n        /// <summary>\r\n        /// Whether saved assembly should be executed as 32-bit process on 64-bit environments.\r\n        /// </summary>\r\n        public bool Force32Bit { get; private set; }\r\n\r\n\t\tpublic string/*!*/ Directory { get { return directory; } }\r\n\t\tprivate readonly string/*!*/ directory;\r\n\r\n\t\tpublic string/*!*/ FileName { get { return fileName; } }\r\n\t\tprivate readonly string/*!*/ fileName;\r\n\r\n\t\tpublic Win32IconResource Icon { get { return icon; } }\r\n\t\tprivate readonly Win32IconResource icon;\r\n\r\n        /// <summary>Contains value of the <see cref=\"Resources\"/> property</summary>\r\n        private ICollection<ResourceFileReference> resources;\r\n        /// <summary>Resources to emed</summary>\r\n        public ICollection<ResourceFileReference> Resources { get { return resources; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Multi-threaded apartment.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsMTA { get { return isMTA; } set { isMTA = value; } }\r\n\t\tprivate bool isMTA;\r\n\r\n\t\tprotected abstract void SetAttributes();\r\n\t\tprotected abstract void EmitEntryPoint(MethodBuilder/*!*/ builder);\r\n        \r\n        protected virtual void EmitAndBakeHelpers() { }\r\n\t\tpublic abstract IPhpModuleBuilder/*!*/ DefineModule(CompilationUnitBase/*!*/ compilationUnit);\r\n\r\n\t\tinternal ExportAttribute ExportInfo { get { return exportInfo; } }\r\n\t\tprivate ExportAttribute exportInfo;\r\n\r\n\t\tpublic override bool IsExported { get { return exportInfo != null; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprotected PhpAssemblyBuilder(PhpAssembly/*!*/ assembly, AssemblyName assemblyName, string moduleName,\r\n            string directory, string fileName, AssemblyKinds kind, ICollection<ResourceFileReference> resources, bool debug,\r\n            bool force32bit, bool saveOnlyAssembly, Win32IconResource icon)\r\n\t\t\t: base(assembly)\r\n\t\t{\r\n\t\t\tthis.kind = kind;\r\n\t\t\tthis.debuggable = debug;\r\n            this.Force32Bit = force32bit;\r\n\t\t\tthis.fileName = fileName;\r\n\t\t\tthis.directory = directory;\r\n\t\t\tthis.icon = icon;\r\n            this.resources = resources;\r\n\r\n#if SILVERLIGHT\r\n\t\t\tAssemblyBuilder assembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);\r\n\t\t\tModuleBuilder module_builder = (ModuleBuilder)assembly_builder.ManifestModule; // SILVERLIGHT: hack? http://silverlight.org/forums/p/1444/3919.aspx#3919\r\n#else\r\n\r\n            AssemblyBuilder assembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, saveOnlyAssembly ? AssemblyBuilderAccess.Save : AssemblyBuilderAccess.RunAndSave, directory);\r\n\t\t\tModuleBuilder module_builder = assembly_builder.DefineDynamicModule(moduleName, fileName, debug);\r\n#endif\r\n\t\t\tDefineGlobalType(module_builder);\r\n\t\t\tassembly.WriteUp(module_builder, Path.Combine(directory, fileName)); // TODO: Combine can be avoided (pass path instead of directory + fileName)\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n#if !SILVERLIGHT\r\n\t\tpublic abstract bool Build(IEnumerable<PhpSourceFile>/*!!*/ sourceFiles, CompilationContext/*!*/ context);\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns name for the global type.\r\n\t\t/// </summary>\r\n\t\tprotected override string GenerateGlobalTypeName()\r\n\t\t{\r\n\t\t\treturn QualifiedName.Global.Name.Value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCustomAttributeProvider Members\r\n\r\n\t\tprivate AST.CustomAttributes attributes = new AST.CustomAttributes(new List<AST.CustomAttribute>());\r\n\r\n\t\tpublic override void CustomAttributeDefined(ErrorSink errors, AST.CustomAttribute/*!*/ customAttribute)\r\n\t\t{\r\n\t\t\tattributes.Attributes.Add(customAttribute);\r\n\t\t}\r\n\r\n\t\tpublic override AttributeTargets AcceptsTargets\r\n\t\t{\r\n\t\t\tget { return AttributeTargets.Assembly | AttributeTargets.Module; }\r\n\t\t}\r\n\r\n\t\tpublic override int GetAttributeUsageCount(DType/*!*/ type, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\treturn attributes.Count(type, selector);\r\n\t\t}\r\n\r\n\t\tpublic override void ApplyCustomAttribute(AST.SpecialAttributes kind, Attribute attribute, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\tswitch (kind)\r\n\t\t\t{\r\n\t\t\t\tcase AST.SpecialAttributes.Export:\r\n\t\t\t\t\tthis.exportInfo = (ExportAttribute)attribute;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic override void EmitCustomAttribute(CustomAttributeBuilder/*!*/ builder, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\tswitch (selector)\r\n\t\t\t{\r\n\t\t\t\tcase AST.CustomAttribute.TargetSelectors.Assembly:\r\n\t\t\t\t\tRealAssemblyBuilder.SetCustomAttribute(builder);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase AST.CustomAttribute.TargetSelectors.Module:\r\n\t\t\t\t\tRealModuleBuilder.SetCustomAttribute(builder);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Create, Save, etc..\r\n\r\n\t\tpublic static PhpAssemblyBuilder/*!*/ Create(ApplicationContext/*!*/ applicationContext, AssemblyKinds kind,\r\n\t\t\tbool pure, FullPath outPath, FullPath docPath, PhpSourceFile entryPoint, Version version,\r\n            StrongNameKeyPair key, Win32IconResource icon, ICollection<ResourceFileReference> resources, bool debug, bool force32bit)\r\n\t\t{\r\n\t\t\tstring out_dir = Path.GetDirectoryName(outPath);\r\n\t\t\tstring out_file = Path.GetFileName(outPath);\r\n\r\n\t\t\tAssemblyName assembly_name = new AssemblyName();\r\n\t\t\tassembly_name.Name = Path.GetFileNameWithoutExtension(outPath);\r\n\t\t\tassembly_name.Version = version;\r\n\t\t\tassembly_name.KeyPair = key;\r\n\r\n            if (pure)\r\n            {\r\n                return new PureAssemblyBuilder(applicationContext, assembly_name, out_dir, out_file,\r\n                    kind, resources, debug, force32bit, icon);\r\n            }\r\n            else\r\n            {\r\n                return new MultiScriptAssemblyBuilder(applicationContext, assembly_name, out_dir, out_file,\r\n                    kind, resources, debug, force32bit, icon, entryPoint);\r\n            }\r\n\t\t}\r\n\r\n\r\n\t\tpublic void Save()\r\n\t\t{\r\n\t\t\tAssemblyBuilder builder = RealAssemblyBuilder;\r\n\r\n\t\t\tEmitAndBakeHelpers();\r\n\r\n\t\t\t// defines and emits the entry point helper:\r\n\t\t\tif (IsExecutable)\r\n\t\t\t\tCreateEntryPoint();\r\n\r\n\t\t\tBakeGlobals();\r\n\r\n\t\t\t// annotates the assembly with Debuggable attribute:\r\n\t\t\tif (debuggable)\r\n\t\t\t{\r\n\t\t\t\tbuilder.SetCustomAttribute(new CustomAttributeBuilder(Constructors.Debuggable,\r\n\t\t\t\t\tnew object[] { true, true }));\r\n\t\t\t}\r\n\r\n            //// annotates the assembly with TargetFramework attribute:\r\n            ////[assembly: TargetFramework(\".NETFramework,Version=v4.0\", FrameworkDisplayName = \".NET Framework 4\")]\r\n            //builder.SetCustomAttribute(new CustomAttributeBuilder(Constructors.TargetFramework,\r\n            //    new object[] { \".NETFramework,Version=v4.0\" },\r\n            //    new PropertyInfo[] { Properties.TargetFrameworkAttribute_FrameworkDisplayName }, new object[] { \".NET Framework 4\" }));\r\n\r\n\t\t\t// adds builder-specific attributes:\r\n\t\t\tSetAttributes();\r\n\r\n\t\t\tstring res_file_path = (icon != null) ? Path.GetTempFileName() : null;\r\n\r\n            try {\r\n                //adds resources\r\n                try {\r\n                    if(resources != null)\r\n                        foreach(ResourceFileReference resource in resources)\r\n                            AddResourceFile(RealModuleBuilder,resource.Name, resource.Path, resource.IsPublic ? ResourceAttributes.Public : ResourceAttributes.Private);\r\n                } catch(Exception ex) {\r\n                    throw new CompilerException(FatalErrors.ErrorCreatingFile, ex, Path.Combine(directory, fileName), ex.Message);\r\n                }\r\n\r\n                try {\r\n                    // adds the icon:\r\n                    if(icon != null)\r\n                        icon.DefineIconResource(builder, res_file_path);\r\n\r\n                    builder.Save(\r\n                        fileName,\r\n                        (Force32Bit) ? (PortableExecutableKinds.ILOnly | PortableExecutableKinds.Required32Bit) : (PortableExecutableKinds.ILOnly),\r\n                        ImageFileMachine.I386);\r\n\r\n                } catch(IOException e) {\r\n                    throw new CompilerException(FatalErrors.ErrorCreatingFile, e, Path.Combine(directory, fileName), e.Message);\r\n                }\r\n            } finally {\r\n                if(res_file_path != null)\r\n                    File.Delete(res_file_path);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>Enbdeds resource into assembly</summary>\r\n        /// <param name=\"builder\"><see cref=\"ModuleBuilder\"/> to embede resource in</param>\r\n        /// <param name=\"name\">Name of the resource</param>\r\n        /// <param name=\"path\">File to obtain resource from</param>\r\n        /// <param name=\"attributes\">Defines resource visibility</param>\r\n\r\n        //DefineResource\r\n        // Exceptions:\r\n        //   System.ArgumentException:\r\n        //     name has been previously defined or if there is another file in the assembly\r\n        //     named fileName.-or- The length of name is zero.-or- The length of fileName\r\n        //     is zero.-or- fileName includes a path.\r\n        //\r\n        //   System.ArgumentNullException:\r\n        //     name or fileName is null.\r\n        //\r\n        //   System.Security.SecurityException:\r\n        //     The caller does not have the required permission.\r\n\r\n        //ResourceReader\r\n        // Exceptions:\r\n        //   System.ArgumentException:\r\n        //     The stream is not readable.\r\n        //\r\n        //   System.ArgumentNullException:\r\n        //     The stream parameter is null.\r\n        //\r\n        //   System.IO.IOException:\r\n        //     An I/O error has occurred while accessing stream.\r\n\r\n        //AddResource\r\n        // Exceptions:\r\n        //   System.ArgumentNullException:\r\n        //     The name parameter is null.\r\n\r\n        //ReadAllBytes\r\n        // Exceptions:\r\n        //   System.ArgumentException:\r\n        //     path is a zero-length string, contains only white space, or contains one\r\n        //     or more invalid characters as defined by System.IO.Path.InvalidPathChars.\r\n        //\r\n        //   System.ArgumentNullException:\r\n        //     path is null.\r\n        //\r\n        //   System.IO.PathTooLongException:\r\n        //     The specified path, file name, or both exceed the system-defined maximum\r\n        //     length. For example, on Windows-based platforms, paths must be less than\r\n        //     248 characters, and file names must be less than 260 characters.\r\n        //\r\n        //   System.IO.DirectoryNotFoundException:\r\n        //     The specified path is invalid (for example, it is on an unmapped drive).\r\n        //\r\n        //   System.IO.IOException:\r\n        //     An I/O error occurred while opening the file.\r\n        //\r\n        //   System.UnauthorizedAccessException:\r\n        //     path specified a file that is read-only.-or- This operation is not supported\r\n        //     on the current platform.-or- path specified a directory.-or- The caller does\r\n        //     not have the required permission.\r\n        //\r\n        //   System.IO.FileNotFoundException:\r\n        //     The file specified in path was not found.\r\n        //\r\n        //   System.NotSupportedException:\r\n        //     path is in an invalid format.\r\n        //\r\n        //   System.Security.SecurityException:\r\n        //     The caller does not have the required permission.\r\n        private void AddResourceFile(ModuleBuilder builder,string name, FullPath path, ResourceAttributes attributes) {\r\n            IResourceWriter rw = builder.DefineResource(path.FileName, name, attributes);\r\n            string ext = path.Extension.ToLower();\r\n            if(ext == \".resources\") {\r\n                ResourceReader rr = new ResourceReader(path);\r\n                using(rr) {\r\n                    System.Collections.IDictionaryEnumerator de = rr.GetEnumerator();\r\n                    while(de.MoveNext()) {\r\n                        string key = de.Key as string;\r\n                        rw.AddResource(key, de.Value);\r\n                    }\r\n                }\r\n            } else {\r\n                rw.AddResource(name, File.ReadAllBytes(path));\r\n            }              \r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry point as a global method.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A method info representing the entry point.</returns>\r\n\t\tprivate MethodInfo CreateEntryPoint()\r\n\t\t{\r\n\t\t\t// public static void Run([string[] args]);\r\n\t\t\tMethodBuilder entry_method = globalTypeEmitter.TypeBuilder.DefineMethod(\r\n\t\t\t\tScriptAssembly.EntryPointHelperName,\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.Static,\r\n\t\t\t\tTypes.Void,\r\n\t\t\t\t(kind == AssemblyKinds.ConsoleApplication) ? new Type[] { typeof(string[]) } : Type.EmptyTypes);\r\n\r\n\r\n\t\t\t// marks entry point as STA/MTA to enable using COM:\r\n\t\t\tentry_method.SetCustomAttribute(new CustomAttributeBuilder(\r\n\t\t\t\tisMTA ? Constructors.MTAThread : Constructors.STAThread, ArrayUtils.EmptyStrings));\r\n\r\n\t\t\tEmitEntryPoint(entry_method);\r\n\r\n\t\t\t// sets assembly entry point:\r\n\t\t\tRealAssemblyBuilder.SetEntryPoint(entry_method, Enums.ToPEFileKind(kind));\r\n\r\n\t\t\t// user entry point can be defined only on module which is in debug mode:\r\n\t\t\tif (debuggable)\r\n\t\t\t\tReflectionUtils.SetUserEntryPoint(RealModuleBuilder, GetUserEntryPointMethod());\r\n\r\n\t\t\treturn entry_method;\r\n\t\t}\r\n\r\n        protected abstract MethodInfo GetUserEntryPointMethod();\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PureAssemblyBuilder\r\n\r\n\tpublic sealed class PureAssemblyBuilder : PhpAssemblyBuilder\r\n\t{\r\n\t\tpublic PureAssembly/*!*/ PureAssembly { get { return (PureAssembly)assembly; } }\r\n\t\tpublic PureModuleBuilder/*!*/ PureModuleBuilder { get { return (PureModuleBuilder)PureAssembly.Module; } }\r\n\r\n\t\tpublic override bool IsPure { get { return true; } }\r\n\r\n\t\tpublic PureAssemblyBuilder(ApplicationContext/*!*/ applicationContext, AssemblyName assemblyName,\r\n            string directory, string fileName, AssemblyKinds kind, ICollection<ResourceFileReference> resources, bool debug, bool force32bit, Win32IconResource icon)\r\n\t\t\t: base(new PureAssembly(applicationContext), assemblyName, PureAssembly.ModuleName, directory,\r\n\t\t\t\t\tfileName, kind, resources, debug, force32bit, false, icon)\r\n\t\t{\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\tpublic override bool Build(IEnumerable<PhpSourceFile>/*!*/ sourceFiles, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tPureCompilationUnit unit = new PureCompilationUnit(false, false);\r\n\r\n\t\t\tbool success = unit.Compile(sourceFiles, this, context, context.Config.Globalization.PageEncoding);\r\n\r\n\t\t\tif (success) Save();\r\n\r\n\t\t\treturn success;\r\n\t\t}\r\n#endif\r\n\r\n\t\tpublic PureModuleBuilder/*!*/ DefineModule(PureCompilationUnit/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\tPureModuleBuilder builder = new PureModuleBuilder(compilationUnit, this);\r\n\t\t\tPureAssembly.Module = builder;\r\n\t\t\treturn builder;\r\n\t\t}\r\n\r\n\t\tpublic override IPhpModuleBuilder/*!*/ DefineModule(CompilationUnitBase/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\treturn DefineModule((PureCompilationUnit)compilationUnit);\r\n\t\t}\r\n\r\n\t\tprotected override void SetAttributes()\r\n\t\t{\r\n\t\t\tAssemblyBuilder builder = (AssemblyBuilder)RealModuleBuilder.Assembly;\r\n\r\n            // try to find any other DAssemblyAttribute that was defined manually in the code;\r\n            // in such case, PurePhpAssemblyAttribute cannot be added (there can be just one DAssemblyAttribute)\r\n            object[] attrs = builder.GetCustomAttributes(typeof(DAssemblyAttribute), false);\r\n            if (attrs != null && attrs.Length > 0)\r\n                return;\r\n            \r\n\t\t\t// stores a list of assemblies whose entries are present in the compiler's tables and thus\r\n\t\t\t// are expected to be dynamically accessible at run-time:\r\n\r\n\t\t\tList<DAssembly> assemblies = assembly.ApplicationContext.GetLoadedAssemblies();\r\n\t\t\tstring[] names = new string[assemblies.Count];\r\n\r\n\t\t\tfor (int i = 0; i < assemblies.Count; i++)\r\n\t\t\t\tnames[i] = assemblies[i].RealAssembly.FullName;\r\n\r\n\t\t\tbuilder.SetCustomAttribute(new CustomAttributeBuilder(Constructors.PurePhpAssembly,\r\n\t\t\t\tnew object[] { names }));\r\n\t\t}\r\n\r\n\t\tprotected override void EmitAndBakeHelpers()\r\n\t\t{\r\n\t\t\tPureModuleBuilder.EmitHelpers();\r\n\t\t}\r\n\r\n\t\tprotected override void EmitEntryPoint(MethodBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\tPureCompilationUnit unit = PureModuleBuilder.PureCompilationUnit;\r\n\r\n\t\t\tDebug.Assert(unit.EntryPoint != null);\r\n\r\n\t\t\tILEmitter il = new ILEmitter(builder);\r\n\r\n\t\t\t// LOAD new RoutineDelegate(<main PHP method>);\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldftn, unit.EntryPoint.ArgLessInfo);\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n\r\n\t\t\t// ScriptContext.RunApplication(<main helper delegate>, null, null);\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.RunApplication);\r\n\r\n\t\t\t// RETURN;\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n        protected override MethodInfo GetUserEntryPointMethod()\r\n        {\r\n            PureCompilationUnit unit = PureModuleBuilder.PureCompilationUnit;\r\n            Debug.Assert(unit.EntryPoint != null);\r\n            return unit.EntryPoint.ArgFullInfo;\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptAssemblyBuilder\r\n\r\n\t/// <summary>\r\n\t/// Provides a functionality common to script assembly builders.\r\n\t/// </summary>\r\n\tpublic abstract class ScriptAssemblyBuilder : PhpAssemblyBuilder\r\n\t{\r\n\t\tpublic override bool IsPure { get { return false; } }\r\n\t\tpublic ScriptAssembly/*!*/ ScriptAssembly { get { return (ScriptAssembly)assembly; } }\r\n\r\n\t\tprotected ScriptAssemblyBuilder(ScriptAssembly/*!*/ assembly, AssemblyName assemblyName, string directory,\r\n            string fileName, AssemblyKinds kind, ICollection<ResourceFileReference> resources, bool debug,\r\n            bool force32bit, bool saveOnlyAssembly, Win32IconResource icon)\r\n\t\t\t: base(assembly, assemblyName, ScriptAssembly.RealModuleName, directory, fileName, kind,resources, debug, force32bit, saveOnlyAssembly, icon)\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\tpublic override bool Build(IEnumerable<PhpSourceFile>/*!!*/ sourceFiles, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\treturn CompileScripts(sourceFiles, context);\r\n\t\t}\r\n#endif\r\n\r\n\t\tpublic static bool CompileScripts(IEnumerable<PhpSourceFile>/*!!*/ sourceFiles, CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tbool success = true;\r\n\t\t\tInclusionGraphBuilder graph_builder = null;\r\n\r\n\t\t\tDebug.WriteLine(\"SAB\", \"CompileScripts()\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tgraph_builder = new InclusionGraphBuilder(context);\r\n\r\n\t\t\t\tforeach (PhpSourceFile source_file in sourceFiles)\r\n\t\t\t\t\tsuccess &= graph_builder.AnalyzeDfsTree(source_file);\r\n\r\n\t\t\t\tif (success)\r\n\t\t\t\t\tgraph_builder.EmitAllUnits(new CodeGenerator(context));\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tif (graph_builder != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tgraph_builder.CleanAllUnits(context, success);\r\n\t\t\t\t\tgraph_builder.Dispose();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontext.Manager.Finish(success);\r\n\t\t\t}\r\n\r\n\t\t\treturn success;\r\n\t\t}\r\n\r\n    \tprotected override void SetAttributes()\r\n\t\t{\r\n\t\t\tAssemblyBuilder builder = (AssemblyBuilder)RealModuleBuilder.Assembly;\r\n\r\n            var ssabuilder = this as SingleScriptAssemblyBuilder;\r\n            var scriptType = (ssabuilder != null) ? ssabuilder.ModuleBuilder.ScriptType : Types.Void; // SAVE THIS TO THE ATTRIBUTE\r\n\r\n\t\t\tbuilder.SetCustomAttribute(new CustomAttributeBuilder(Constructors.ScriptAssembly,\r\n                new object[] { ScriptAssembly.IsMultiScript, scriptType }));\r\n\t\t}\r\n\r\n\t\tprotected abstract ScriptBuilder GetEntryScriptBuilder();\r\n\r\n        protected override void EmitEntryPoint(MethodBuilder/*!*/ methodBuilder)\r\n        {\r\n            ScriptBuilder script_builder = GetEntryScriptBuilder();\r\n            Debug.Assert(script_builder.CompilationUnit is ScriptCompilationUnit);\r\n\r\n            if (script_builder == null)\r\n                throw new InvalidOperationException(CoreResources.GetString(\"entrypoint_not_specified\"));\r\n\r\n            PhpSourceFile entry_file = ((ScriptCompilationUnit)script_builder.CompilationUnit).SourceUnit.SourceFile;\r\n\r\n            ILEmitter il = new ILEmitter(methodBuilder);\r\n\r\n            // LOAD new PhpScript.MainHelperDelegate(Default.Main);\r\n            il.Emit(OpCodes.Ldnull);\r\n            il.Emit(OpCodes.Ldftn, script_builder.MainHelper);\r\n            il.Emit(OpCodes.Newobj, Constructors.MainHelperDelegate);\r\n\r\n            // LOAD <source name>\r\n            il.Emit(OpCodes.Ldstr, entry_file.RelativePath.ToString());\r\n\r\n            // LOAD Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)\r\n            il.Emit(OpCodes.Call, Methods.Assembly.GetEntryAssembly);\r\n            il.Emit(OpCodes.Callvirt, Properties.Assembly_Location.GetGetMethod());\r\n            il.Emit(OpCodes.Call, Methods.Path.GetDirectoryName);\r\n\r\n            // ScriptContext.RunApplication(<main helper delegate>, <source name>, <entry assembly directory> );\r\n            il.Emit(OpCodes.Call, Methods.ScriptContext.RunApplication);\r\n\r\n            // RETURN;\r\n            il.Emit(OpCodes.Ret);\r\n        }\r\n\r\n        protected override MethodInfo GetUserEntryPointMethod()\r\n        {\r\n            ScriptBuilder script_builder = GetEntryScriptBuilder();\r\n\r\n            if (script_builder == null)\r\n                throw new InvalidOperationException(CoreResources.GetString(\"entrypoint_not_specified\"));\r\n\r\n            return script_builder.MainHelper;\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SingleScriptAssemblyBuilder\r\n\r\n\t/// <summary>\r\n\t/// A builder of a script assembly which comprises of a single script module.\r\n\t/// </summary>\r\n\tinternal class SingleScriptAssemblyBuilder : ScriptAssemblyBuilder\r\n\t{\r\n\t\tpublic SingleScriptAssembly/*!*/ SingleScriptAssembly { get { return (SingleScriptAssembly)assembly; } }\r\n\t\tpublic ScriptBuilder ModuleBuilder { get { return (ScriptBuilder)SingleScriptAssembly.Module; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of of single-script assembly builder.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"applicationContext\">Application context.</param>\r\n\t\t/// <param name=\"assemblyName\">Name of the assembly.</param>\r\n\t\t/// <param name=\"directory\">Directory where assembly will be stored.</param>\r\n\t\t/// <param name=\"fileName\">Name of the assembly file including an extension.</param>\r\n\t\t/// <param name=\"kind\">Assembly kind.</param>\r\n\t\t/// <param name=\"debug\">Whether to include debug information.</param>\r\n        /// <param name=\"force32bit\">Whether to force 32bit execution of generated assembly.</param>\r\n        /// <param name=\"saveOnlyAssembly\">Whether to not load the assembly into memory.</param>\r\n        /// <param name=\"icon\">Icon resource or a <B>null</B> reference.</param>\r\n        /// <param name=\"resources\">Resources to embed</param>\r\n\t\tpublic SingleScriptAssemblyBuilder(ApplicationContext/*!*/ applicationContext, AssemblyName assemblyName, string directory, string fileName,\r\n            AssemblyKinds kind, ICollection<ResourceFileReference> resources, bool debug, bool force32bit, bool saveOnlyAssembly, Win32IconResource icon)\r\n            : base(new SingleScriptAssembly(applicationContext), assemblyName, directory, fileName, kind, resources, debug, force32bit, saveOnlyAssembly, icon)\r\n\t\t{\r\n\t\t}\r\n        /// <summary>\r\n        /// Creates an instance of of single-script assembly builder (without resources).\r\n        /// </summary>\r\n        /// <param name=\"applicationContext\">Application context.</param>\r\n        /// <param name=\"assemblyName\">Name of the assembly.</param>\r\n        /// <param name=\"directory\">Directory where assembly will be stored.</param>\r\n        /// <param name=\"fileName\">Name of the assembly file including an extension.</param>\r\n        /// <param name=\"kind\">Assembly kind.</param>\r\n        /// <param name=\"debug\">Whether to include debug information.</param>\r\n        /// <param name=\"force32bit\">Whether to force 32bit execution of generated assembly.</param>\r\n        /// <param name=\"saveOnlyAssembly\">Whether to not load the assembly into memory.</param>\r\n        /// <param name=\"icon\">Icon resource or a <B>null</B> reference.</param>\r\n        public SingleScriptAssemblyBuilder(ApplicationContext/*!*/ applicationContext, AssemblyName assemblyName, string directory, string fileName,\r\n            AssemblyKinds kind, bool debug, bool force32bit, bool saveOnlyAssembly, Win32IconResource icon)\r\n            : base(new SingleScriptAssembly(applicationContext), assemblyName, directory, fileName, kind, null, debug, force32bit, saveOnlyAssembly, icon)\r\n        {\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines one and only script belonging to the assembly builder.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptBuilder/*!*/ DefineScript(ScriptCompilationUnit/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\t// defines a new script:\r\n            string subnamespace = ScriptModule.GetSubnamespace(compilationUnit.SourceUnit.SourceFile.RelativePath, true);\r\n            ScriptBuilder sb = new ScriptBuilder(compilationUnit, this, subnamespace);\r\n\r\n\t\t\t// adds the script into script assembly builder:\r\n\t\t\tthis.SingleScriptAssembly.Module = sb;\r\n\r\n\t\t\treturn sb;\r\n\t\t}\r\n\r\n\t\tpublic override IPhpModuleBuilder DefineModule(CompilationUnitBase/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\treturn DefineModule((CompilationUnit)compilationUnit);\r\n\t\t}\r\n\r\n\t\tprotected override ScriptBuilder GetEntryScriptBuilder()\r\n\t\t{\r\n\t\t\treturn ModuleBuilder;\r\n\t\t}\r\n\r\n\t\tprotected override void EmitAndBakeHelpers()\r\n\t\t{\r\n            //// information is needed when loading SSA from ASP.NET temporary files\r\n            //if (this.Kind == AssemblyKinds.WebPage)\r\n            //    ModuleBuilder.SetScriptAttribute(ScriptBuilder.ScriptAttributeType.RelativeSourceAndIncludees);\r\n            ModuleBuilder.SetScriptAttribute(ScriptBuilder.ScriptAttributes.All);\r\n\r\n\t\t\tModuleBuilder.EmitHelpers();\r\n\t\t\tModuleBuilder.Bake();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region MultiScriptAssemblyBuilder\r\n\r\n\t/// <summary>\r\n\t/// A builder of a script assembly which comprises of multiple script modules.\r\n\t/// </summary>\r\n\tinternal class MultiScriptAssemblyBuilder : ScriptAssemblyBuilder\r\n\t{\r\n\t\tpublic MultiScriptAssembly/*!*/ MultiScriptAssembly { get { return (MultiScriptAssembly)assembly; } }\r\n\r\n\t\tpublic PhpSourceFile EntryPoint { get { return entryPoint; } }\r\n\t\tprivate PhpSourceFile entryPoint;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of of multi-script assembly builder.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"applicationContext\">Application context.</param>\r\n\t\t/// <param name=\"assemblyName\">Name of the assembly.</param>\r\n\t\t/// <param name=\"directory\">Directory where assembly will be stored.</param>\r\n\t\t/// <param name=\"fileName\">Name of the assembly file including an extension.</param>\r\n        /// <param name=\"kind\">Assembly file kind.</param>\r\n\t\t/// <param name=\"debug\">Whether to include debug information.</param>\r\n        /// <param name=\"force32bit\">Whether to force 32bit execution of generated assembly.</param>\r\n\t\t/// <param name=\"entryPoint\">Entry point.</param>\r\n\t\t/// <param name=\"icon\">Icon.</param>\r\n        /// <param name=\"resources\">Resources to embed</param>\r\n        public MultiScriptAssemblyBuilder(ApplicationContext/*!*/ applicationContext, AssemblyName assemblyName,\r\n            string directory, string fileName, AssemblyKinds kind, ICollection<ResourceFileReference> resources,\r\n                        bool debug, bool force32bit, Win32IconResource icon, PhpSourceFile entryPoint)\r\n            : base(new MultiScriptAssembly(applicationContext), assemblyName, directory, fileName, kind, resources, debug, force32bit, false, icon)\r\n        {\r\n            this.entryPoint = entryPoint;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a new script belonging to the multiscript assembly builder.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptBuilder/*!*/ DefineModule(ScriptCompilationUnit/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\tstring subnamespace = ScriptModule.GetSubnamespace(compilationUnit.SourceUnit.SourceFile.RelativePath, true);\r\n\t\t\tScriptBuilder sb = new ScriptBuilder(compilationUnit, this, subnamespace);\r\n\t\t\tMultiScriptAssembly.AddScriptModule(compilationUnit.SourceUnit.SourceFile, sb);\r\n\t\t\treturn sb;\r\n\t\t}\r\n\r\n\t\tpublic override IPhpModuleBuilder DefineModule(CompilationUnitBase/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\treturn DefineModule((ScriptCompilationUnit)compilationUnit);\r\n\t\t}\r\n\r\n\t\tprotected override ScriptBuilder GetEntryScriptBuilder()\r\n\t\t{\r\n\t\t\treturn (ScriptBuilder)MultiScriptAssembly.GetModule(entryPoint);\r\n\t\t}\r\n\r\n\t\tprotected override void EmitAndBakeHelpers()\r\n\t\t{\r\n\t\t\tforeach (ScriptBuilder sb in MultiScriptAssembly.Modules.Values)\r\n\t\t\t{\r\n                //if (this.Kind == AssemblyKinds.WebPage)\r\n                //    sb.SetScriptAttribute(ScriptBuilder.ScriptAttributeType.Includers);\r\n                //else if (this.Kind == AssemblyKinds.Library)\r\n                //    sb.SetScriptAttribute(ScriptBuilder.ScriptAttributeType.RelativeSourceAndIncludees);\r\n                sb.SetScriptAttribute(ScriptBuilder.ScriptAttributes.All);\r\n\r\n\t\t\t\tsb.EmitHelpers();\r\n\t\t\t\tsb.Bake();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// add a dummy type with CLS compliant name to enable static references to the assembly from other languages\r\n\t\t\t// (see ScriptContext.IncludeScript):\r\n\t\t\tthis.RealModuleBuilder.DefineType(StringUtils.ToClsCompliantIdentifier(Path.ChangeExtension(this.FileName, \"\")), \r\n\t\t\t\tTypeAttributes.Class | TypeAttributes.Abstract | TypeAttributes.Sealed | TypeAttributes.Public).CreateType();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/AssemblyBuilders.cd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ClassDiagram MajorVersion=\"1\" MinorVersion=\"1\">\r\n  <Class Name=\"PHP.Core.Emit.PhpAssemblyBuilderBase\">\r\n    <Position X=\"4.75\" Y=\"0.5\" Width=\"2.25\" />\r\n    <TypeIdentifier>\r\n      <HashCode>ACIAAAACAEAAAAAIEAAEAAAAgAgAAIBAAAFAAAMMCAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.cs</FileName>\r\n    </TypeIdentifier>\r\n    <ShowAsAssociation>\r\n      <Field Name=\"assembly\" />\r\n      <Field Name=\"globalTypeEmitter\" />\r\n    </ShowAsAssociation>\r\n    <Lollipop Position=\"0.21\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.TransientAssemblyBuilder\">\r\n    <Position X=\"0.5\" Y=\"6.25\" Width=\"2.25\" />\r\n    <TypeIdentifier>\r\n      <HashCode>ACADAACAgFAAAAAMEAAEAAAIAAAAgAAAAAAAAAMsAAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.PhpAssemblyBuilder\">\r\n    <Position X=\"5.75\" Y=\"6.25\" Width=\"2.25\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAiAJAIpEBQAKAIUAAEAAAABAQAkEEQAUAAAANMIAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.PureAssemblyBuilder\">\r\n    <Position X=\"2.75\" Y=\"15.5\" Width=\"2.25\" />\r\n    <TypeIdentifier>\r\n      <HashCode>ACACAAAIAAAAAAAAAAAAAAAABAIAgAEAAAAAAAAAAIA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.ScriptAssemblyBuilder\">\r\n    <Position X=\"7.25\" Y=\"15.5\" Width=\"2\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gCAQAAAAAAFAAAAAQAAAAAAQBAAAkAEAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.SingleScriptAssemblyBuilder\">\r\n    <Position X=\"5.25\" Y=\"20.25\" Width=\"3\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAACAAAIAAEAEAAAAAAAAAAAAAAAAAAAAAAAIAAAAAI=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.MultiScriptAssemblyBuilder\">\r\n    <Position X=\"8.5\" Y=\"20.25\" Width=\"2.25\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AEACAAAIAAEAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n    <ShowAsAssociation>\r\n      <Field Name=\"entryPoint\" />\r\n    </ShowAsAssociation>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.PhpSourceFile\" Collapsed=\"true\">\r\n    <Position X=\"12.75\" Y=\"20.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>CAAAABAAAAAQACAEgAAgAEAAAABAAIAAAAAAAAgAAAA=</HashCode>\r\n      <FileName>PhpSourceFile.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Emit.ILEmitter\" Collapsed=\"true\">\r\n    <Position X=\"8.5\" Y=\"3.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>xFkAgkWiACQoICMCAADpcJTAWLICgYIAFgSKMZAIQLA=</HashCode>\r\n      <FileName>Emit\\ILEmitter.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpAssembly\" Collapsed=\"true\">\r\n    <Position X=\"12.25\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAEAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DAssembly\" Collapsed=\"true\">\r\n    <Position X=\"12.25\" Y=\"0.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAEEABAABAAAAJAAAACAAAAAAAAAAEAACAAAAAABAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.CodeDom.CodeDomAssembly\" Collapsed=\"true\">\r\n    <Position X=\"10.5\" Y=\"3.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAg=</HashCode>\r\n      <FileName>CodeDom\\CodeDomUnits.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PureAssembly\" Collapsed=\"true\">\r\n    <Position X=\"12.25\" Y=\"3.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAABAAAAAAAAAAAAAAAICADAACAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"14\" Y=\"3.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAIAAEAAABAAAAAAAEAAAgAEIAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.TransientAssembly\" Collapsed=\"true\">\r\n    <Position X=\"15.75\" Y=\"3.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>ACACEAAAgIAAAAQAADAAgAABAABAAEAAAGAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.SingleScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"13\" Y=\"5.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAAAAAAAAAAAEAAAgAAAAAAAACAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.MultiScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"15.25\" Y=\"5.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAgAAAAgAAAAAABIBAAAAAUAAAgAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Enum Name=\"PHP.Core.Emit.AssemblyKinds\">\r\n    <Position X=\"8\" Y=\"0.5\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAQAAAAAAAAAACAgAAAAAAAAAABAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Emit\\AssemblyBuilders.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Enum>\r\n  <Font Name=\"Segoe UI\" Size=\"9\" />\r\n</ClassDiagram>"
  },
  {
    "path": "Source/Core/Emit/AssemblyBuilders.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t#region AssemblyKinds\r\n\r\n\tpublic enum AssemblyKinds\r\n\t{\r\n\t\tConsoleApplication,\r\n\t\tWindowApplication,\r\n\t\tWebPage,\r\n\t\tLibrary\r\n\t}\r\n\r\n\tpublic static partial class Enums\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Converts assembly kind to <see cref=\"PEFileKinds\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic static PEFileKinds ToPEFileKind(AssemblyKinds kind)\r\n\t\t{\r\n\t\t\tswitch (kind)\r\n\t\t\t{\r\n\t\t\t\tcase AssemblyKinds.ConsoleApplication: return PEFileKinds.ConsoleApplication;\r\n\t\t\t\tcase AssemblyKinds.WindowApplication: return PEFileKinds.WindowApplication;\r\n\t\t\t\tdefault: return PEFileKinds.Dll;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpAssemblyBuilderBase\r\n\r\n\tpublic abstract class PhpAssemblyBuilderBase : IPhpCustomAttributeProvider\r\n\t{\r\n\t\tpublic abstract bool IsExported { get; }\r\n\t\tpublic abstract bool IsPure { get; }\r\n\t\tpublic abstract bool IsTransient { get; }\r\n\r\n\t\tpublic AssemblyBuilder/*!*/ RealAssemblyBuilder { get { return (AssemblyBuilder)assembly.RealAssembly; } }\r\n\t\tpublic ModuleBuilder/*!*/ RealModuleBuilder { get { return (ModuleBuilder)assembly.RealModule; } }\r\n        internal DelegateBuilder/*!*/ DelegateBuilder { get { return deleateBuilder ?? (deleateBuilder = new DelegateBuilder(RealModuleBuilder)); } }\r\n        private DelegateBuilder deleateBuilder;\r\n\r\n        /// <summary>\r\n        /// Prevent calling of ReflectionUtils.CreateGlobalType(RealModuleBuilder) more than once.\r\n        /// </summary>\r\n        private bool globalTypeCreated = false;\r\n\r\n\t\tpublic PhpAssembly/*!*/ Assembly { get { return assembly; } }\r\n\t\tprotected readonly PhpAssembly/*!*/ assembly;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global type emitter. Emits naming context definitions, entry-point, etc.\r\n\t\t/// (in transient module it is used for naming contexts only)\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Non-null after 'DefineGlobalType' is called.\r\n\t\t/// </remarks>\r\n\t\tpublic ILEmitter/*!*/ GlobalTypeEmitter { get { return globalTypeEmitter; } }\r\n\t\tprotected ILEmitter/*!*/ globalTypeEmitter;\r\n\r\n\t\tpublic PhpAssemblyBuilderBase(PhpAssembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\tthis.assembly = assembly;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes the 'GlobalTypeEmitter' field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"moduleBuilder\"></param>\r\n\t\tprotected void DefineGlobalType(ModuleBuilder/*!*/ moduleBuilder)\r\n\t\t{\r\n\t\t\tTypeBuilder builder = moduleBuilder.DefineType(GenerateGlobalTypeName(),\r\n                TypeAttributes.Class | TypeAttributes.NotPublic | TypeAttributes.Sealed);\r\n\r\n\t\t\t// empty default ctor:\r\n\t\t\tbuilder.DefineDefaultConstructor(MethodAttributes.PrivateScope);\r\n            \r\n\t\t\t// cctor:\r\n            ConstructorBuilder cctor_builder = builder.DefineTypeInitializer();\r\n\r\n            this.globalTypeEmitter = new ILEmitter(cctor_builder);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates name for the 'global' type that stores information like\r\n\t\t/// entry-points, naming contexts etc. In transient assembly, we need to generate\r\n\t\t/// unique name for every loaded 'Transient' compilation unit.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tprotected abstract string GenerateGlobalTypeName();\r\n\r\n\t\tprotected void BakeGlobals()\r\n\t\t{\r\n\t\t\t// finish initializer:\r\n            globalTypeEmitter.Emit(OpCodes.Ret);\r\n\r\n\t\t\t// bake type:\r\n\t\t\tglobalTypeEmitter.TypeBuilder.CreateType();\r\n\r\n            // bake global functions and <Global Fields> type, only once:\r\n            if (!globalTypeCreated)\r\n            {\r\n                // Bake global CLR type:\r\n\r\n                // Throws No Debug Module if the globals have been already created\r\n                // This is checked in the condition above, the try/catch block is actually not needed.\r\n\r\n                try\r\n                { ReflectionUtils.CreateGlobalType(RealModuleBuilder); }\r\n                catch (Exception)\r\n                {\r\n#if DEBUG\r\n                    throw;\r\n#endif\r\n                }\r\n                globalTypeCreated = true;\r\n            }\r\n\t\t}\r\n\r\n\t\t#region Attributes\r\n\r\n\t\tpublic AST.PhpAttributeTargets AttributeTarget { get { return AST.PhpAttributeTargets.Assembly; } }\r\n\r\n\t\tpublic abstract AttributeTargets AcceptsTargets { get; }\r\n\t\tpublic abstract void ApplyCustomAttribute(AST.SpecialAttributes kind, Attribute attribute, AST.CustomAttribute.TargetSelectors selector);\r\n\t\tpublic abstract void CustomAttributeDefined(ErrorSink errors, AST.CustomAttribute customAttribute);\r\n\t\tpublic abstract void EmitCustomAttribute(CustomAttributeBuilder builder, AST.CustomAttribute.TargetSelectors selector);\r\n\t\tpublic abstract int GetAttributeUsageCount(DType type, AST.CustomAttribute.TargetSelectors selector);\r\n\r\n\t\t#endregion\r\n\r\n\r\n\t\t// TODO:\r\n\t\t//    private void AddResources(ModuleBuilder/*!*/ builder, ICollection resourcePaths, string outDir)\r\n\t\t//    {\r\n\t\t//\t\t  if (resourcePaths != null && resourcePaths.Count > 0)\r\n\t\t//\t\t  {\r\n\t\t//  \t\t  Environment.CurrentDirectory = outDir;\r\n\t\t//\t\t    int i = 0;\r\n\t\t//\t\t    foreach (FullPath path in resourcePaths)\r\n\t\t//\t\t    {\r\n\t\t//\t\t      using (FileStream fs = new FileStream(path, FileMode.Open))\r\n\t\t//\t\t      {\r\n\t\t//\t\t        byte[] buffer = new byte[fs.Length];\r\n\t\t//\t\t        fs.Read(buffer, 0, (int)fs.Length);\r\n\t\t//\t\t        \r\n\t\t//\t\t        IResourceWriter rw = builder.DefineResource(\"x.resource\",\"blah\");\r\n\t\t//\t\t        rw.AddResource(path, \"blah\");\r\n\t\t//\t\t      }  \r\n\t\t//\t\t    }  \r\n\t\t//\t\t  }\r\n\t\t//    }  \r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TransientAssemblyBuilder\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class TransientAssemblyBuilder : PhpAssemblyBuilderBase\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsExported { get { return false; } }\r\n\t\tpublic override bool IsPure { get { return false; } }\r\n\t\tpublic override bool IsTransient { get { return true; } }\r\n\r\n\t\tprivate object initializationMutex = new object();\r\n\t\tprivate volatile bool initialized = false;\r\n\t\tprivate bool debuggable = false;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic TransientAssemblyBuilder(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(new TransientAssembly(applicationContext))\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The argument <paramref name=\"completeSource\" /> determines whether the source code\r\n\t\t/// is complete PHP script file, which is a case in dynamic include in Silverlight\r\n\t\t/// </summary>\r\n\t\tpublic TransientCompilationUnit Build(string/*!*/ sourceCode, SourceCodeDescriptor descriptor,\r\n\t\t\tEvalKinds kind, CompilationContext/*!*/ context, ScriptContext/*!*/ scriptContext,\r\n\t\t\tDTypeDesc referringType, NamingContext namingContext, bool completeSource)\r\n\t\t{\r\n\t\t\tPhpSourceFile source_file = new PhpSourceFile(context.Config.Compiler.SourceRoot,\r\n\t\t\t\tRelativePath.ParseCanonical(descriptor.ContainingSourcePath));\r\n\r\n\t\t\tEncoding encoding = context.Config.Globalization.PageEncoding;\r\n\r\n\t\t\tTransientCompilationUnit result = new TransientCompilationUnit\r\n\t\t\t\t(sourceCode, source_file, encoding, namingContext, descriptor.Line, descriptor.Column, completeSource);\r\n\t\t\tif (!result.PreCompile(context, scriptContext, descriptor, kind, referringType)) return null;\r\n\r\n\t\t\tDefineGlobalType(((TransientModuleBuilder)result.ModuleBuilder).AssemblyBuilder.RealModuleBuilder);\r\n\t\t\tif (!result.Compile(context, kind)) return null;\r\n\r\n\t\t\tBakeGlobals();\r\n\t\t\tresult.PostCompile(descriptor);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate void InitializeRealAssembly(bool debuggable)\r\n\t\t{\r\n\t\t\tif (!initialized)\r\n\t\t\t{\r\n\t\t\t\tlock (initializationMutex)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!initialized)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tAssemblyName assembly_name = new AssemblyName(TransientAssembly.RealAssemblyName);\r\n\r\n\t\t\t\t\t\t// TODO: do we need sync?\r\n\t\t\t\t\t\tAssemblyBuilder assembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly\r\n\t\t\t\t\t\t\t(assembly_name, AssemblyBuilderAccess.Run);\r\n\t\t\t\t\t\tModuleBuilder module_builder = assembly_builder.DefineDynamicModule(TransientAssembly.RealModuleName, debuggable);\r\n\r\n\t\t\t\t\t\tassembly.WriteUp(module_builder, null);\r\n\r\n\t\t\t\t\t\tthis.debuggable = debuggable;\r\n\t\t\t\t\t\tthis.initialized = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic TransientAssembly TransientAssembly { get { return (TransientAssembly)assembly; } }\r\n\r\n\t\tpublic TransientModuleBuilder/*!*/ DefineModule(TransientCompilationUnit/*!*/ compilationUnit, bool debuggable,\r\n\t\t\tint containerId, EvalKinds kind, string sourcePath)\r\n\t\t{\r\n\t\t\tInitializeRealAssembly(debuggable);\r\n\t\t\tDebug.Assert(this.debuggable == debuggable);\r\n\r\n\t\t\treturn TransientAssembly.DefineModule(this, compilationUnit, containerId, kind, sourcePath);\r\n\t\t}\r\n\r\n\t\tinternal bool IsTransientRealType(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\treturn initialized && realType.Assembly.Equals(RealAssemblyBuilder);\r\n\t\t}\r\n\r\n\t\t// Global type counter\r\n\t\tprivate static int globalTypeIndex = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns name for the global type.\r\n\t\t/// </summary>\r\n\t\tprotected override string GenerateGlobalTypeName()\r\n\t\t{\r\n            return string.Format(\"<TransientGlobal_{0}>\", System.Threading.Interlocked.Increment(ref globalTypeIndex));\r\n\t\t}\r\n\r\n\t\t#region CustomAttributes\r\n\r\n\t\tpublic override AttributeTargets AcceptsTargets { get { return 0; } }\r\n\r\n\t\tpublic override void ApplyCustomAttribute(AST.SpecialAttributes kind, Attribute attribute, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Custom attributes cannot be defined on transient assemblies or modules.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override void CustomAttributeDefined(ErrorSink errors, AST.CustomAttribute customAttribute)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Custom attributes cannot be defined on transient assemblies or modules.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override void EmitCustomAttribute(CustomAttributeBuilder builder, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Custom attributes cannot be defined on transient assemblies or modules.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override int GetAttributeUsageCount(DType type, AST.CustomAttribute.TargetSelectors selector)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Custom attributes cannot be defined on transient assemblies or modules.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ClrOverloadBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek and Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//#if SILVERLIGHT\r\n#define EMIT_VERIFIABLE_STUBS\r\n//#endif\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\tusing Overload = ClrMethod.Overload;\r\n\tusing ConversionStrictness = PHP.Core.ConvertToClr.ConversionStrictness;\r\n\t \r\n\t/// <summary>\r\n\t/// </summary>\r\n\t/// <remarks><code>\r\n\t/// switch (#actuals)\r\n\t/// {\r\n\t///    case i:\r\n\t///\t\t\t\t// Conversions for the first overload\r\n\t///       overload_i_1:\r\n\t///\t\t\t\t\tstrictness_i = ImplExactMatch;\r\n\t///         formal_i_1_1 = TryConvertTo{typeof(formal_i_1_1)}(actual_1, out strictness_tmp);\r\n\t///         if (strictness_tmp == Failed) goto overload_i_2;\r\n\t///\t\t\t\t\tstrictness_i += strictness_tmp;\r\n\t///         formal_i_1_2 = TryConvertTo{typeof(formal_i_1_2)}(actual_2, out strictness_tmp);\r\n\t///         if (strictness_tmp == Failed) goto overload_i_2;\r\n\t///\t\t\t\t\tstrictness_i += strictness_tmp;\r\n\t///         ...\r\n\t///         if (strictness_i_1 == ImplExactMatch) goto call_overload_i_1;\r\n\t///\t\t\t\t\tbest_overload = 1;\r\n\t///  \r\n\t///\t\t\t\t// Conversions for the second overload\r\n\t///       overload_i_2:\r\n\t///         formal_i = TryConvertTo{typeof(formal_i)}(actual_i, out strictness_tmp);\r\n\t///         if (strictness_tmp == Failed) goto overload_i_3;\r\n\t///\t\t\t\t\tstrictness_i_2 += strictness_tmp;\r\n\t///         ...\r\n\t///         if (strictness_i_2 == ImplExactMatch) goto call_overload_i_2;\r\n\t///\t\t\t\t\tif (strictness_i_2 &lt; strictness_i_1)\r\n\t///\t\t\t\t\t\tbest_overload = 2;\r\n\t/// \r\n\t///       // ... other overloads\r\n\t/// \r\n\t///\t\t\t\t// select the best overload\r\n\t///\t\t\t\tcall_overload_i:\r\n\t///\t\t\t\tswitch(best_overload)\r\n\t///\t\t\t\t{\r\n\t///\t\t\t\t\tcase 1:\r\n\t///\t\t\t\t\t\treturn overload_i_1(formal_i_1_1, ..., formal_i_1_k);\r\n\t///\t\t\t\t\tcase 2:\r\n\t///\t\t\t\t\t\treturn overload_i_2(formal_i_2_1, ..., formal_i_2_k);\r\n\t///\t\t\t\t\t// ... other calls\r\n\t///\t\t\t\t}\r\n\t///        \r\n\t///    case less than #formals:\r\n\t///       Warning(to few args);\r\n\t///       --- fill missing with default values of their respective types ---\r\n\t///       goto case #min_formals;\r\n\t/// \r\n\t///    case more than #formals:      \r\n\t///        Warning(to many args)\r\n\t///       goto case #max_formals;\r\n\t/// }\r\n\t/// \r\n\t/// error:\r\n\t/// NoSuitableOverload()\r\n\t/// </code></remarks>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrOverloadBuilder\r\n\t{\r\n\t\t#region Fields and types\r\n\r\n\t\t/// <summary>\r\n\t\t/// A delegate used to load a parameter to evaluation stack.\r\n\t\t/// </summary>\r\n\t\tpublic delegate object ParameterLoader(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ parameter);\r\n\r\n\t\tprivate ILEmitter/*!*/ il;\r\n\t\tprivate ClrMethod/*!*/ method;\r\n\t\tprivate ConstructedType constructedType;\r\n\t\tprivate IPlace/*!*/ stack;\r\n\t\tprivate IPlace instance;\r\n\t\tprivate ParameterLoader/*!*/ loadValueArg;\r\n\t\tprivate ParameterLoader/*!*/ loadReferenceArg;\r\n\t\tprivate bool emitParentCtorCall;\r\n\r\n\t\tprivate List<Overload>/*!!*/ overloads;\r\n\t\t//private BitArray argCounts;\r\n\t\tprivate IPlace scriptContext;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Case labels used during by-number resolution\r\n\t\t/// </summary>\r\n\t\tprivate Label[] caseLabels;\r\n\t\tprivate Label noSuitableOverloadErrorLabel;\r\n\t\tprivate Label returnLabel;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marked after the argument load block of the overload with minimal arguments.\r\n\t\t/// </summary>\r\n\t\tprivate Label? minArgOverloadTypeResolutionLabel;\r\n\r\n\t\tprivate int minArgCount;\r\n\t\tprivate int maxArgCount;\r\n\t\tprivate LocalBuilder strictness;\r\n\t\tprivate LocalBuilder[] valLocals;\r\n\t\tprivate LocalBuilder[] refLocals;\r\n\t\tprivate LocalBuilder returnValue;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Constructor\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generic type definition of Nullable&lt;_&gt; type.\r\n\t\t/// </summary>\r\n\t\tstatic Type NullableType;\r\n\r\n\t\tstatic ClrOverloadBuilder()\r\n\t\t{\r\n\t\t\tNullableType = typeof(int?).GetGenericTypeDefinition();\r\n\t\t}\r\n\r\n\t\tpublic ClrOverloadBuilder(ILEmitter/*!*/ il, ClrMethod/*!*/ method, ConstructedType constructedType,\r\n\t\t\tIPlace/*!*/ stack, IPlace/*!*/ instance, bool emitParentCtorCall,\r\n\t\t\tParameterLoader/*!*/ loadValueArg, ParameterLoader/*!*/ loadReferenceArg)\r\n\t\t{\r\n\t\t\tthis.il = il;\r\n\t\t\tthis.method = method;\r\n\t\t\tthis.constructedType = constructedType;\r\n\t\t\tthis.stack = stack;\r\n\t\t\tthis.instance = instance;\r\n\t\t\tthis.loadValueArg = loadValueArg;\r\n\t\t\tthis.loadReferenceArg = loadReferenceArg;\r\n\t\t\tthis.emitParentCtorCall = emitParentCtorCall;\r\n\r\n\t\t\tthis.overloads = new List<Overload>(method.Overloads);\r\n\t\t\tSortOverloads(this.overloads);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utilities\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts overloads in the list - so that we guarantee deterministic overload selection.\r\n\t\t/// Most important thing is to test subtypes first - because both conversions are evaluated as ImplExactMatch.\r\n\t\t/// (sorting also allows some performance tweaks)\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"list\">List to sort</param>\r\n\t\tprivate void SortOverloads(List<Overload> list)\r\n\t\t{\r\n\t\t\tlist.Sort(delegate(Overload first, Overload second)\r\n\t\t\t{\r\n\t\t\t\t// overloads with less parameters are returned first\r\n\t\t\t\tif (first.ParamCount != second.ParamCount)\r\n\t\t\t\t\treturn first.ParamCount - second.ParamCount;\r\n\r\n\t\t\t\t// compare parameter types - we want to test subtypes first, so that when we have A :> B \r\n\t\t\t\t// and foo(A), foo(B) we first test foo(B)\r\n\t\t\t\tfor (int i = 0; i < first.ParamCount; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tType t1 = first.Parameters[i].ParameterType, t2 = second.Parameters[i].ParameterType;\r\n\t\t\t\t\tif (!t1.Equals(t2)) return CompareTypes(t1, t2); // not equal parameter types - sort by this param\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two types. Type <paramref name=\"t1\"/> is less if it is subclass\r\n\t\t/// of <paramref name=\"t2\"/>, or it is array of subclasses (covariant arrays).\r\n\t\t/// Otherwise the types are sorted by name in alphabetical order with an exception\r\n\t\t/// of type string which is greather than any other type (because if we allow explicit\r\n\t\t/// conversions, the conversion to string is slooow!).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"t1\">First type</param>\r\n\t\t/// <param name=\"t2\">Second type</param>\r\n\t\t/// <returns>-1 if first is less, 1 if second is less</returns>\r\n\t\tprivate int CompareTypes(Type t1, Type t2)\r\n\t\t{\r\n\t\t\tif (t1.IsSubclassOf(t2)) return -1;\r\n\t\t\tif (t2.IsSubclassOf(t1)) return +1;\r\n\r\n\t\t\t// array covariance (solves vararg overloads too)\r\n\t\t\t// array is after non-array or compare array types\r\n\t\t\tif (t1.IsArray && t2.IsArray) return CompareTypes(t1.GetElementType(), t2.GetElementType());\r\n\t\t\telse if (t1.IsArray) return 1;\r\n\t\t\telse if (t2.IsArray) return -1;\r\n\r\n\t\t\t// strings should be at the end .. \r\n\t\t\tif (t1.Equals(Types.String[0])) return +1;\r\n\t\t\tif (t2.Equals(Types.String[0])) return -1;\r\n\r\n\t\t\t// not related types.. sort by type name (to make selection deterministic)\r\n\t\t\tif (!t1.Equals(t2)) return String.Compare(t1.Name, t2.Name);\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tprivate static void GetOverloadValRefArgCount(Overload/*!*/ overload, out int byValCount, out int byRefCount)\r\n\t\t{\r\n\t\t\tint byref = 0;\r\n\r\n\t\t\tParameterInfo[] parameters = overload.Parameters;\r\n\t\t\tfor (int i = 0; i < parameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (parameters[i].ParameterType.IsByRef) byref++;\r\n\t\t\t}\r\n\r\n\t\t\tbyValCount = parameters.Length - byref;\r\n\t\t\tbyRefCount = byref;\r\n\t\t}\r\n\r\n\t\tprivate void EmitCreateParamsArray(Type/*!*/ elementType, LocalBuilder/*!*/ local, int count)\r\n\t\t{\r\n\t\t\til.LdcI4(count);\r\n\t\t\til.Emit(OpCodes.Newarr, elementType);\r\n\t\t\til.Stloc(local);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emit LOAD <paramref name=\"instance\"/>.\r\n        /// </summary>ILEmiter\r\n        /// <param name=\"il\"><see cref=\"ILEmitter\"/> object instance.</param>\r\n        /// <param name=\"instance\">The place where to load the instance from.</param>\r\n        /// <param name=\"declaringType\">The type of resulting instance.</param>\r\n        /// <remarks>Instance of value types are wrapped in <see cref=\"ClrValue&lt;T&gt;\"/> object instance.</remarks>\r\n        internal static void EmitLoadInstance(ILEmitter/*!*/il, IPlace/*!*/instance, Type/*!*/declaringType)\r\n        {\r\n            Debug.Assert(il != null && instance != null && declaringType != null, \"ClrOverloadBuilder.EmitLoadInstance() null argument!\");\r\n\r\n            // LOAD <instance>\r\n            instance.EmitLoad(il);\r\n\r\n            if (declaringType.IsValueType)\r\n            {\r\n                var clrValueType = ClrObject.valueTypesCache.Get(declaringType).Item1;\r\n                Debug.Assert(clrValueType != null, \"Specific ClrValue<T> not found!\");\r\n\r\n                // CAST (ClrValue<T>)\r\n                il.Emit(OpCodes.Castclass, clrValueType);\r\n\r\n                // LOAD .realValue\r\n                var realValueField = clrValueType.GetField(\"realValue\");\r\n                Debug.Assert(realValueField != null, \"ClrValue<T>.realValue field not found!\");\r\n                il.Emit(OpCodes.Ldflda, clrValueType.GetField(\"realValue\"));\r\n            }\r\n            else\r\n            {\r\n                // CAST (T)\r\n                il.Emit(OpCodes.Castclass, declaringType);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits overload call\r\n\t\t/// </summary>\r\n\t\tprivate void EmitCall(Overload/*!*/ overload, Label failLabel, LocalBuilder[] formals)\r\n\t\t{\r\n\t\t\tMethodBase overload_base = overload.Method;\r\n\r\n\t\t\t/* CHECK IS DONE IN THE EARLIER PHASE\r\n\t\t\t * (in EmitConversion method)\r\n\t\t\t \r\n\t\t\tif (!emitParentCtorCall && (overload_base.IsFamily || overload_base.IsFamilyOrAssembly))\r\n\t\t\t{\r\n\t\t\t\t// IF (!stack.AllowProtectedCall) THEN GOTO next-overload-or-error;\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_AllowProtectedCall);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, failLabel);\r\n\t\t\t}*/\r\n\r\n            //\r\n            // LOAD <instance>\r\n            //\r\n\r\n            if ((emitParentCtorCall) // calling .ctor on parent\r\n                ||(!overload_base.IsStatic && !overload_base.IsConstructor)// calling method on non-static object\r\n                //||(overload_base.IsConstructor && overload_base.DeclaringType.IsValueType)// calling .ctor on structure (which initializes fields on existing value) (but the ClrValue does not exist yet :-))\r\n                )\r\n\t\t\t{\r\n                EmitLoadInstance(il, instance, overload_base.DeclaringType);\r\n\t\t\t}\r\n\r\n            //\r\n            // LOAD {<args>}\r\n            //\r\n\r\n\t\t\tfor (int i = 0; i < overload.Parameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (overload.Parameters[i].ParameterType.IsByRef) il.Ldloca(formals[i]);\r\n\t\t\t\telse il.Ldloc(formals[i]);\r\n\t\t\t}\r\n\r\n            //\r\n            // CALL <method> or \r\n            //\r\n\r\n            if (!overload_base.IsConstructor)\r\n\t\t\t{\r\n                // method\r\n                MethodInfo info = DType.MakeConstructed((MethodInfo)overload_base, constructedType);\r\n\r\n\t\t\t\t// CALL <method>(args);\r\n\t\t\t\t// TODO: il.Emit(info.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, info);\r\n#if SILVERLIGHT\r\n                il.Emit(info.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, info);\r\n#else\r\n\t\t\t\til.Emit(OpCodes.Call, info);\r\n#endif\r\n\r\n\t\t\t\t// return value conversions:\r\n\t\t\t\tif (info.ReturnType != Types.Void)\r\n\t\t\t\t{\r\n\t\t\t\t\til.EmitBoxing(EmitConvertToPhp(il, info.ReturnType/* scriptContext*/));\r\n\t\t\t\t\til.Stloc(returnValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                // .ctor\r\n\t\t\t\tConstructorInfo ctor = DType.MakeConstructed((ConstructorInfo)overload_base, constructedType);\r\n\r\n                if (emitParentCtorCall)\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL <ctor>(args);\r\n\t\t\t\t\til.Emit(OpCodes.Call, ctor);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// NEW <ctor>(args);\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, ctor);\r\n\r\n                    il.EmitBoxing(EmitConvertToPhp(il, ctor.DeclaringType));    // convert any newly created object to valid PHP object\r\n\t\t\t\t\t/*if (ctor.DeclaringType.IsValueType)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// box value type:\r\n\t\t\t\t\t\til.Emit(OpCodes.Box, ctor.DeclaringType);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!Types.DObject[0].IsAssignableFrom(ctor.DeclaringType))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// convert to ClrObject if not DObject:\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_Wrap);\r\n\t\t\t\t\t}*/\r\n\r\n\t\t\t\t\til.Stloc(returnValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// store ref/out parameters back to their PhpReferences shells\r\n\t\t\tint byref_counter = 0;\r\n\t\t\tfor (int i = 0; i < overload.Parameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tType param_type = overload.Parameters[i].ParameterType;\r\n\t\t\t\tif (param_type.IsByRef)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Ldloc(refLocals[byref_counter++]);\r\n\t\t\t\t\til.Ldloc(formals[i]);\r\n\r\n                    PhpTypeCode php_type_code = EmitConvertToPhp(\r\n\t\t\t\t\t\til,\r\n\t\t\t\t\t\tparam_type.GetElementType()/*,\r\n\t\t\t\t\t\tscriptContext*/);\r\n\r\n\t\t\t\t\til.EmitBoxing(php_type_code);\r\n\r\n\t\t\t\t\til.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Br, returnLabel);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that is invoked when function is passed not enough parameters\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"gotoLabel\">Continue execution at this label</param>\r\n\t\tprivate void EmitMissingParameterCountHandling(Label gotoLabel)\r\n\t\t{\r\n\t\t\t// CALL PhpException.MissingArguments(<type name>, <routine name>, <actual count>, <required count>);\r\n\t\t\til.Emit(OpCodes.Ldstr, method.DeclaringType.FullName);\r\n\r\n\t\t\tif (method.IsConstructor)\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\telse\r\n\t\t\t\til.Emit(OpCodes.Ldstr, method.FullName);\r\n\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\t\t\til.LdcI4(minArgCount);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpException.MissingArguments);\r\n\r\n\t\t\t// initialize all PhpReferences\r\n\t\t\tfor (int i = 0; i < refLocals.Length; i++)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Void);\r\n\t\t\t\til.Stloc(refLocals[i]);\r\n\t\t\t}\r\n\r\n\t\t\t// GOTO next-overload\r\n\t\t\til.Emit(OpCodes.Br, gotoLabel);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that is invoked when function is passed more parameters\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"gotoLabel\">Continue execution at this label</param>\r\n\t\tprivate void EmitMoreParameterCountHandling(Label gotoLabel)\r\n\t\t{\r\n\t\t\t// CALL PhpException.InvalidArgumentCount(<type name>, <routine name>);\r\n\t\t\til.Emit(OpCodes.Ldstr, method.DeclaringType.FullName);\r\n\r\n\t\t\tif (method.IsConstructor)\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\telse\r\n\t\t\t\til.Emit(OpCodes.Ldstr, method.FullName);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpException.InvalidArgumentCount);\r\n\r\n\t\t\t// GOTO next-overload\r\n\t\t\til.Emit(OpCodes.Br, gotoLabel);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Resolution by number\r\n\r\n\t\tprivate void Prepare(int maxArgCount, int maxValArgCount, int maxRefArgCount)\r\n\t\t{\r\n\t\t\tDebug.Assert(maxValArgCount + maxRefArgCount >= maxArgCount);\r\n\r\n\t\t\tthis.noSuitableOverloadErrorLabel = il.DefineLabel();\r\n\t\t\tthis.scriptContext = new Place(stack, Fields.PhpStack_Context);\r\n\t\t\tthis.returnLabel = il.DefineLabel();\r\n\r\n\t\t\t// locals:\r\n\t\t\tthis.valLocals = new LocalBuilder[maxValArgCount];\r\n\t\t\tfor (int i = 0; i < valLocals.Length; i++)\r\n\t\t\t\tvalLocals[i] = il.DeclareLocal(Types.Object[0]);\r\n\r\n\t\t\tthis.refLocals = new LocalBuilder[maxRefArgCount];\r\n\t\t\tfor (int i = 0; i < refLocals.Length; i++)\r\n\t\t\t\trefLocals[i] = il.DeclareLocal(Types.PhpReference[0]);\r\n\r\n\t\t\tthis.returnValue = il.DeclareLocal(Types.Object[0]);\r\n\t\t\tthis.strictness = il.DeclareLocal(typeof(ConversionStrictness));\r\n\t\t}\r\n\r\n\t\tprivate void PrepareResolutionByNumber()\r\n\t\t{\r\n\t\t\tif (overloads.Count == 0) return;\r\n\r\n\t\t\tthis.minArgCount = overloads[0].MandatoryParamCount;\r\n\t\t\tthis.maxArgCount = overloads[overloads.Count - 1].ParamCount;\r\n\r\n\t\t\t// determine maximum number of byval and byref parameters:\r\n\t\t\tint max_val_arg_count = 0;\r\n\t\t\tint max_ref_arg_count = 0;\r\n\t\t\tfor (int i = 0; i < overloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tint byval, byref;\r\n\t\t\t\tGetOverloadValRefArgCount(overloads[i], out byval, out byref);\r\n\r\n\t\t\t\tif (byval > max_val_arg_count) max_val_arg_count = byval;\r\n\t\t\t\tif (byref > max_ref_arg_count) max_ref_arg_count = byref;\r\n\t\t\t}\r\n\r\n\t\t\tint case_count = maxArgCount - minArgCount + 1;\r\n\r\n\t\t\t// labels:\r\n\t\t\tcaseLabels = new Label[case_count];\r\n\t\t\tfor (int i = 0; i < case_count; i++)\r\n\t\t\t\tcaseLabels[i] = il.DefineLabel();\r\n\r\n\t\t\tPrepare(maxArgCount, max_val_arg_count, max_ref_arg_count);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Has to be chosen which method should be called.This method emits the code that \r\n        /// choses which overload to call by number of arguments. After this it calls \r\n        /// EmitResolutionByTypes.\r\n        /// </summary>\r\n\t\tpublic void EmitResolutionByNumber()\r\n\t\t{\r\n\t\t\tPrepareResolutionByNumber();\r\n\r\n\t\t\tif (overloads.Count > 0)\r\n\t\t\t{\r\n\t\t\t\t// SWITCH (stack.ArgCount - <min param count>)\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\t\t\t\tif (minArgCount > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\til.LdcI4(minArgCount);\r\n\t\t\t\t\til.Emit(OpCodes.Sub);\r\n\t\t\t\t}\r\n\t\t\t\til.Emit(OpCodes.Switch, caseLabels);\r\n\r\n\t\t\t\t// DEFAULT:\r\n\t\t\t\tEmitDefaultCase();\r\n\r\n\t\t\t\tint last_success_case_index = -1;\r\n\t\t\t\tint arg_count = minArgCount;\r\n\t\t\t\tfor (int case_index = 0; case_index < caseLabels.Length; case_index++, arg_count++)\r\n\t\t\t\t{\r\n\t\t\t\t\t// CASE <case_index>:\r\n\t\t\t\t\til.MarkLabel(caseLabels[case_index]);\r\n\r\n\t\t\t\t\tList<Overload> arg_count_overloads = GetOverloadsForArgCount(arg_count);\r\n\t\t\t\t\tif (arg_count_overloads.Count == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// no overload with arg_count parameters was found\r\n\t\t\t\t\t\t// report error and jump to the last successful arg count:\r\n\t\t\t\t\t\tEmitMoreParameterCountHandling(caseLabels[last_success_case_index]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tEmitResolutionByTypes(arg_count, arg_count_overloads);\r\n\t\t\t\t\t\tlast_success_case_index = case_index;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tEmitEpilogue();\r\n\t\t}\r\n\r\n\t\tprivate void EmitEpilogue()\r\n\t\t{\r\n\t\t\t// noSuitableOverload:\r\n\t\t\til.MarkLabel(noSuitableOverloadErrorLabel);\r\n\r\n\t\t\t// stack.RemoveFrame\r\n\t\t\tif (!emitParentCtorCall)\r\n\t\t\t{\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ldstr, method.DeclaringType.FullName);\r\n\t\t\til.Emit(OpCodes.Ldstr, method.FullName);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpException.NoSuitableOverload);\r\n\r\n\t\t\tif (emitParentCtorCall)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Throw);\r\n\t\t\t}\r\n\r\n\t\t\t// return:\r\n\t\t\til.MarkLabel(returnLabel);\r\n\r\n\t\t\tif (!emitParentCtorCall)\r\n\t\t\t{\r\n\t\t\t\til.Ldloc(returnValue);\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a list of overloads that can be called with the given argument count on the stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Vararg overloads are at the end of the returned list and are sorted, so that more general \r\n\t\t/// overloads are at the end of the list (for example: params object[] is more general than int,params object[]).\r\n\t\t/// </remarks>\r\n\t\tprivate List<Overload>/*!*/ GetOverloadsForArgCount(int argCount)\r\n\t\t{\r\n\t\t\tList<Overload> result = new List<Overload>();\r\n\t\t\tOverload overload;\r\n\t\t\tint vararg_start_index = 0;\r\n\r\n\t\t\tint i = 0;\r\n\t\t\twhile (i < overloads.Count && (overload = overloads[i]).MandatoryParamCount <= argCount)\r\n\t\t\t{\r\n\t\t\t\t// keep vararg overload at the end of the list - non-vararg overloads should be preferred\r\n\t\t\t\tif (overload.MandatoryParamCount == argCount)\r\n\t\t\t\t\tresult.Insert(vararg_start_index++, overload);\r\n\t\t\t\telse if ((overload.Flags & ClrMethod.OverloadFlags.IsVararg) == ClrMethod.OverloadFlags.IsVararg)\r\n\t\t\t\t\tresult.Add(overload);\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t\tSortVarArgOverloads(result, vararg_start_index);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns overloads including the \"params\" option\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returned overloads are sorted, so that more general overloads are at the end \r\n\t\t/// of the list (for example: params object[] is more general than int,params object[]).\r\n\t\t/// </remarks>\r\n\t\tprivate List<Overload> GetVarArgOverloads(out int maxMandatoryArgCount)\r\n\t\t{\r\n\t\t\tList<Overload> result = null;\r\n\t\t\tmaxMandatoryArgCount = 0;\r\n\t\t\t\r\n\t\t\tfor (int i = 0; i < overloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tif ((overloads[i].Flags & ClrMethod.OverloadFlags.IsVararg) == ClrMethod.OverloadFlags.IsVararg)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (result == null) result = new List<Overload>();\r\n\t\t\t\t\tresult.Add(overloads[i]);\r\n\r\n\t\t\t\t\tif (overloads[i].MandatoryParamCount > maxMandatoryArgCount)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmaxMandatoryArgCount = overloads[i].MandatoryParamCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (result != null) SortVarArgOverloads(result, 0);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// This function sorts vararg overloads so that more general overloads are at the end.\r\n\t\t/// The only difference to algorithm used for sorting overloads during initialization is\r\n\t\t/// that we need overloads with MORE parameters first (because this means we have some more \r\n\t\t/// specific type requirements declared by mandatory parameters).\r\n\t\t/// \r\n\t\t/// Assumes that input is sorted only the blocks with same parameter count needs to be reversed.\r\n\t\t/// \r\n\t\t/// We need to sort parameters like this to prevent conversions to supertypes (like object[]),\r\n\t\t/// becausethis kind of conversion is treated as ImplExactMatch.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">List to be sorted</param>\r\n\t\t/// <param name=\"vararg_start_index\">Vararg overloads start at this index</param>\r\n\t\t/// <remarks>\r\n\t\t/// Sorting should be for example:\r\n\t\t/// #parameters = 2 + 1:\r\n\t\t///\t\tint, string, [params] int[]\r\n\t\t///\t\tint, string, [params] object[]\r\n\t\t/// #parameters = 1 + 1:\r\n\t\t///\t\tint, [params] object[]\r\n\t\t/// #parameters = 0 + 1:\r\n\t\t///\t\t[params] int[]\r\n\t\t///\t\t[params] object[]\r\n\t\t/// </remarks>\r\n\t\tprivate void SortVarArgOverloads(List<Overload>/*!*/ result, int vararg_start_index)\r\n\t\t{\r\n\t\t\t// most common situation..\r\n\t\t\tif (result.Count == 1) return;\r\n\t\t\tif (result.Count == vararg_start_index) return;\r\n\r\n\t\t\tOverload tmp;\r\n\t\t\tint i, j;\r\n\r\n\t\t\t// reverse the list\r\n\t\t\ti = vararg_start_index; j = result.Count - 1;\r\n\t\t\twhile (i < j) { tmp = result[i]; result[i] = result[j]; result[j] = tmp; i++; j--; }\r\n\t\t\t\r\n\t\t\t// now reverse every single block \r\n\t\t\tint pos = 0;\r\n\t\t\twhile (pos < result.Count)\r\n\t\t\t{\r\n\t\t\t\tint block_end = pos, block_pcount = result[pos].ParamCount;\r\n\t\t\t\twhile (block_end < result.Count && result[block_end].ParamCount == block_pcount) block_end++;\r\n\r\n\t\t\t\ti = pos; j = block_end - 1;\r\n\t\t\t\twhile (i < j) { tmp = result[i]; result[i] = result[j]; result[j] = tmp; i++; j--; }\r\n\t\t\t\tpos = block_end;\r\n\t\t\t}\t\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Load arguments from stack and save them to valLocals (by-value) or refLocals (by-reference)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returned bit array specifies whether #i-th parameter is byref or by value</returns>\r\n\t\tprivate BitArray/*!*/ EmitLoadArguments(int argCount, List<Overload>/*!*/ argCountOverloads, bool removeFrame)\r\n\t\t{\r\n\t\t\tBitArray aliases = new BitArray(argCount, false);\r\n\t\t\tfor (int i = 0; i < argCountOverloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\t// \"or\" the byref mask of all argCountOverloads\r\n\t\t\t\tfor (int j = 0; j < argCountOverloads[i].ParamCount; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (argCountOverloads[i].IsAlias(j)) aliases[j] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tint val_counter = 0;\r\n\t\t\tint ref_counter = 0;\r\n\r\n\t\t\tfor (int i = 0; i < argCount; i++)\r\n\t\t\t{\r\n\t\t\t\t// LOAD <actual arg #arg_index>\r\n\t\t\t\tif (aliases[i])\r\n\t\t\t\t{\r\n\t\t\t\t\tloadReferenceArg(il, stack, new LiteralPlace(i + 1));\r\n\t\t\t\t\til.Stloc(refLocals[ref_counter++]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tloadValueArg(il, stack, new LiteralPlace(i + 1));\r\n\t\t\t\t\til.Stloc(valLocals[val_counter++]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (removeFrame && !emitParentCtorCall)\r\n\t\t\t{\r\n\t\t\t\t// remove the frame:\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t}\r\n\r\n\t\t\treturn aliases;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Default case in the by-number resolution switch\r\n\t\t/// </summary>\r\n\t\tprivate void EmitDefaultCase()\r\n\t\t{\r\n\t\t\tLabel else_label = il.DefineLabel();\r\n\t\t\tthis.minArgOverloadTypeResolutionLabel = il.DefineLabel();\r\n\r\n\t\t\t// IF (stack.ArgCount > <max param count>) THEN\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\t\t\til.LdcI4(maxArgCount);\r\n\t\t\til.Emit(OpCodes.Bge, else_label);\r\n\r\n\t\t\tEmitMissingParameterCountHandling(minArgOverloadTypeResolutionLabel.Value);\r\n\r\n\t\t\t// ELSE\r\n\t\t\til.MarkLabel(else_label);\r\n\t\t\t\r\n\t\t\tint max_mandatory_arg_count;\r\n\t\t\tList<Overload> vararg_overloads = GetVarArgOverloads(out max_mandatory_arg_count);\r\n\r\n\t\t\t// do we have any vararg overloads?\r\n\t\t\tif (vararg_overloads != null)\r\n\t\t\t{\r\n\t\t\t\t// load fixed arguments from stack to valLocals and refLocals locals\r\n\t\t\t\tBitArray aliases = EmitLoadArguments(max_mandatory_arg_count, vararg_overloads, false);\r\n\r\n\t\t\t\tLabel callSwitch = il.DefineLabel();\r\n\t\t\t\tList<LocalBuilder[]> formalOverloadParams = new List<LocalBuilder[]>();\r\n\r\n\t\t\t\t// bestOverload = -1\r\n\t\t\t\tLocalBuilder bestOverload = il.DeclareLocal(Types.Int[0]);\r\n\t\t\t\til.LdcI4(-1);\r\n\t\t\t\til.Stloc(bestOverload);\r\n\r\n\t\t\t\t// bestStrictness = Int32.MaxValue\r\n\t\t\t\tLocalBuilder bestStrictness = il.DeclareLocal(typeof(ConversionStrictness));\r\n\t\t\t\til.LdcI4(Int32.MaxValue);\r\n\t\t\t\til.Stloc(bestStrictness);\r\n\r\n\r\n\t\t\t\tfor (int i = 0; i < vararg_overloads.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tLabel jump_on_error = il.DefineLabel();\r\n\t\t\t\t\tOverload current_overload = vararg_overloads[i];\r\n\r\n\t\t\t\t\tBitArray overload_aliases;\r\n\t\t\t\t\tif (current_overload.MandatoryParamCount < max_mandatory_arg_count)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toverload_aliases = new BitArray(aliases);\r\n\t\t\t\t\t\toverload_aliases.Length = current_overload.MandatoryParamCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse \r\n\t\t\t\t\t\toverload_aliases = aliases;\r\n\r\n\t\t\t\t\t// convert mandatory parameters\r\n\t\t\t\t\t// strictness_i = ImplExactMatch;\r\n\t\t\t\t\tLocalBuilder overloadStrictness = il.GetTemporaryLocal(typeof(int), false);\r\n\t\t\t\t\til.LdcI4(0); // ConversionStrictness.ImplExactMatch\r\n\t\t\t\t\til.Stloc(overloadStrictness);\r\n\r\n\t\t\t\t\t// alloc local variables\r\n\t\t\t\t\tLocalBuilder[] formals = new LocalBuilder[current_overload.ParamCount];\r\n\t\t\t\t\tformalOverloadParams.Add(formals);\r\n\t\t\t\t\t// convert parameters and tests after conversion\r\n\t\t\t\t\tEmitConversions(overload_aliases, current_overload, jump_on_error, overloadStrictness, formals, false);\r\n\r\n\t\t\t\t\t// load remaining arguments and construct the params array\r\n\t\t\t\t\tEmitLoadRemainingArgs(current_overload.MandatoryParamCount, \r\n\t\t\t\t\t\tcurrent_overload.Parameters[current_overload.MandatoryParamCount].ParameterType, \r\n\t\t\t\t\t\tjump_on_error, formals, overloadStrictness);\r\n\t\t\t\t\tEmitConversionEpilogue(callSwitch, bestOverload, bestStrictness, i, i == (vararg_overloads.Count - 1), overloadStrictness);\r\n\t\r\n\t\t\t\t\t// reuse locals\r\n\t\t\t\t\til.ReturnTemporaryLocal(overloadStrictness);\r\n\t\t\t\t\til.MarkLabel(jump_on_error);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// stack.RemoveFrame\r\n\t\t\t\tif (!emitParentCtorCall)\r\n\t\t\t\t{\r\n\t\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// call the best overload\r\n\t\t\t\tEmitBestOverloadSelection(vararg_overloads, callSwitch, bestOverload, bestStrictness, formalOverloadParams);\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t\tEmitMoreParameterCountHandling(caseLabels[caseLabels.Length - 1]);\r\n\t\t\t// END IF;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Resolution by type\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a for loop and constructs the array to be passed as the last 'params' argument.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitLoadRemainingArgs(int alreadyLoadedArgs, Type/*!*/ argType, Label failLabel, \r\n\t\t\tLocalBuilder[] formals, LocalBuilder overloadStrictness)\r\n\t\t{\r\n\t\t\tType element_type = argType.GetElementType();\r\n\r\n\t\t\t// array = new argType[stack.ArgCount - alreadyLoadedArgs]\r\n\t\t\tLocalBuilder array = il.GetTemporaryLocal(argType);\r\n\t\t\tLocalBuilder item = il.GetTemporaryLocal(element_type);\r\n\t\t\t\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\r\n\t\t\til.LdcI4(alreadyLoadedArgs);\r\n\t\t\til.Emit(OpCodes.Sub);\r\n\r\n\t\t\til.Emit(OpCodes.Newarr, element_type);\r\n\t\t\til.Stloc(array);\r\n\r\n\t\t\t// FOR (tmp = 0; tmp <= array.Length; tmp++)\r\n\t\t\tLocalBuilder tmp = il.GetTemporaryLocal(Types.Int[0]);\r\n\t\t\tLocalBuilder tmp2 = il.GetTemporaryLocal(Types.Int[0]);\r\n\r\n\t\t\t// tmp = 0\r\n\t\t\til.LdcI4(0);\r\n\t\t\til.Stloc(tmp);\r\n\r\n\t\t\tLabel condition_label = il.DefineLabel();\r\n\t\t\til.Emit(OpCodes.Br_S, condition_label);\r\n\r\n\t\t\tLabel body_label = il.DefineLabel();\r\n\t\t\til.MarkLabel(body_label);\r\n\r\n\t\t\t// FOR LOOP BODY:\r\n\t\t\til.Ldloc(tmp);\r\n\t\t\til.LdcI4(alreadyLoadedArgs + 1);\r\n\t\t\til.Emit(OpCodes.Add);\r\n\t\t\til.Stloc(tmp2);\r\n\t\t\t\r\n\t\t\tloadValueArg(il, stack, new Place(tmp2));\r\n\r\n\t\t\t// item = CONVERT\r\n\t\t\tbool ct_ok = EmitConvertToClr(il, PhpTypeCode.Object, element_type, strictness); //!strictness\r\n\t\t\til.Stloc(item);\r\n\r\n\t\t\tif (!ct_ok)\r\n\t\t\t{\r\n\t\t\t\t// if (strictness == Failed) goto error;\r\n\t\t\t\t// strictness_i += strictness\r\n\t\t\t\til.Ldloc(strictness);\r\n\t\t\t\til.LdcI4((int)ConversionStrictness.Failed);\r\n\t\t\t\til.Emit(OpCodes.Beq, failLabel);\r\n\r\n\t\t\t\til.Ldloc(overloadStrictness);\r\n\t\t\t\til.Ldloc(strictness);\r\n\t\t\t\til.Emit(OpCodes.Add);\r\n\t\t\t\til.Stloc(overloadStrictness);\r\n\t\t\t}\r\n\r\n\t\t\t// array[tmp] = item\r\n\t\t\til.Ldloc(array);\r\n\t\t\til.Ldloc(tmp);\r\n\t\t\til.Ldloc(item);\r\n\t\t\til.Stelem(element_type);\r\n\t\t\t\r\n\t\t\t// tmp++\r\n\t\t\til.Ldloc(tmp);\r\n\t\t\til.LdcI4(1);\r\n\t\t\til.Emit(OpCodes.Add);\r\n\t\t\til.Stloc(tmp);\r\n\r\n\t\t\t// tmp <= array.Length\r\n\t\t\til.MarkLabel(condition_label);\r\n\t\t\til.Ldloc(tmp);\r\n\t\t\til.Ldloc(array);\r\n\t\t\til.Emit(OpCodes.Ldlen);\r\n\t\t\til.Emit(OpCodes.Conv_I4);\r\n\t\t\til.Emit(OpCodes.Blt_S, body_label);\r\n\r\n\t\t\tformals[alreadyLoadedArgs] = array;\r\n\r\n\t\t\til.ReturnTemporaryLocal(tmp);\r\n\t\t\til.ReturnTemporaryLocal(tmp2);\r\n\t\t\til.ReturnTemporaryLocal(item);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emits code that choses overload method based on argument types\r\n        /// </summary>\r\n        /// <param name=\"overloadIndex\"></param>\r\n\t\tpublic void EmitResolutionByTypes(int overloadIndex)\r\n\t\t{\r\n\t\t\tint arg_count = overloads[overloadIndex].MandatoryParamCount;\r\n\t\t\tint max_byref = 0, max_byval = 0;\r\n\r\n\t\t\tint i = overloadIndex;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tint byval, byref;\r\n\t\t\t\tGetOverloadValRefArgCount(overloads[i], out byval, out byref);\r\n\r\n\t\t\t\tif (byval > max_byval) max_byval = byval;\r\n\t\t\t\tif (byref > max_byref) max_byref = byref;\r\n\t\t\t}\r\n\t\t\twhile (++i < overloads.Count && overloads[i].MandatoryParamCount == arg_count);\r\n\r\n\t\t\tPrepare(arg_count, max_byval, max_byref);\r\n\t\t\tEmitResolutionByTypes(arg_count, GetOverloadsForArgCount(arg_count));\r\n\t\t\tEmitEpilogue();\r\n\t\t}\r\n\r\n\r\n        /// <summary>\r\n        /// Emits code that choses overload method based on argument types\r\n        /// </summary>\r\n        /// <param name=\"argCount\">Count of the arguments</param>\r\n        /// <param name=\"argCountOverloads\">Count of overloadesd methods with <paramref name=\"argCount\"/> count of arguments.</param>\r\n\t\tprivate void EmitResolutionByTypes(int argCount, List<Overload> argCountOverloads)\r\n\t\t{\r\n\t\t\t// load arguments from stack to valLocals and refLocals locals\r\n\t\t\tBitArray aliases = EmitLoadArguments(argCount, argCountOverloads, true);\r\n\r\n\t\t\t// mark the label where missing arguments handler should jump:\r\n\t\t\tif (minArgOverloadTypeResolutionLabel.HasValue && argCount == minArgCount)\r\n\t\t\t{\r\n\t\t\t\til.MarkLabel(minArgOverloadTypeResolutionLabel.Value);\r\n\t\t\t}\r\n\r\n\t\t\tLabel callSwitch = il.DefineLabel();\r\n\r\n\t\t\t// bestOverload = -1\r\n\t\t\tLocalBuilder bestOverload = il.DeclareLocal(Types.Int[0]);\r\n\t\t\til.LdcI4(-1);\r\n\t\t\til.Stloc(bestOverload);\r\n\r\n\t\t\t// bestStrictness = Int32.MaxValue\r\n\t\t\tLocalBuilder bestStrictness = il.DeclareLocal(typeof(ConversionStrictness));\r\n\t\t\til.LdcI4(Int32.MaxValue);\r\n\t\t\til.Stloc(bestStrictness);\r\n\r\n\t\t\tList<LocalBuilder[]> formalOverloadParams = new List<LocalBuilder[]>();\r\n\t\t\tfor (int i = 0; i < argCountOverloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tbool is_last = (i + 1 == argCountOverloads.Count);\r\n\t\t\t\tLabel jump_on_error = il.DefineLabel();\r\n\t\t\t\tOverload current_overload = argCountOverloads[i];\r\n\r\n\t\t\t\t// strictness_i = ImplExactMatch;\r\n\t\t\t\tLocalBuilder overloadStrictness = il.GetTemporaryLocal(typeof(int), false);\r\n\t\t\t\til.LdcI4(0); // ConversionStrictness.ImplExactMatch\r\n\t\t\t\til.Stloc(overloadStrictness);\r\n\r\n\t\t\t\t// alloc local variables\r\n\t\t\t\tLocalBuilder[] formals = new LocalBuilder[current_overload.ParamCount];\r\n\t\t\t\tformalOverloadParams.Add(formals);\r\n\t\t\t\t// convert parameters and tests after conversion\r\n\t\t\t\tEmitConversions(aliases, current_overload, jump_on_error, overloadStrictness, formals, true);\r\n\t\t\t\tEmitConversionEpilogue(callSwitch, bestOverload, bestStrictness, i, i == (argCountOverloads.Count - 1), overloadStrictness);\r\n\r\n\t\t\t\t// reuse locals\r\n\t\t\t\til.ReturnTemporaryLocal(overloadStrictness);\r\n\t\t\t\til.MarkLabel(jump_on_error);\r\n\t\t\t}\r\n\r\n\t\t\t// call the best overload\r\n\t\t\tEmitBestOverloadSelection(argCountOverloads, callSwitch, bestOverload, bestStrictness, formalOverloadParams);\r\n\t\t}\r\n\r\n\t\tprivate void EmitBestOverloadSelection(List<Overload> argCountOverloads, Label callSwitch, \r\n\t\t\tLocalBuilder bestOverload, LocalBuilder bestStrictness, List<LocalBuilder[]> formalOverloadParams)\r\n\t\t{\r\n\t\t\til.MarkLabel(callSwitch);\r\n\t\t\tLabel[] cases = new Label[argCountOverloads.Count];\r\n\t\t\tfor (int i = 0; i < argCountOverloads.Count; i++) cases[i] = il.DefineLabel();\r\n\r\n\t\t\til.Ldloc(bestOverload);\r\n\t\t\til.Emit(OpCodes.Switch, cases);\r\n\t\t\til.Emit(OpCodes.Br, noSuitableOverloadErrorLabel);\r\n\r\n\t\t\tfor (int i = 0; i < argCountOverloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\til.MarkLabel(cases[i]);\r\n\t\t\t\tOverload current_overload = argCountOverloads[i];\r\n\r\n\t\t\t\tEmitCall(current_overload, noSuitableOverloadErrorLabel, formalOverloadParams[i]); // TODO: we need to make sure that overload can be called earlier !!! it is too late here\r\n\r\n\t\t\t\t// release variables\r\n\t\t\t\tforeach (LocalBuilder lb in formalOverloadParams[i])\r\n\t\t\t\t\til.ReturnTemporaryLocal(lb);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void EmitConversionEpilogue(Label callSwitch, LocalBuilder bestOverload, \r\n\t\t\tLocalBuilder bestStrictness, int i, bool last, LocalBuilder tmpStrictness)\r\n\t\t{\r\n\t\t\t// if (tmpStrictness < best_strictness) \r\n\t\t\t//\t{ best_overload = i; best_strictness = tmpStrictness; }\r\n\t\t\til.Ldloc(bestStrictness);\r\n\t\t\til.Ldloc(tmpStrictness);\r\n\t\t\tLabel endIf = il.DefineLabel();\r\n\t\t\til.Emit(OpCodes.Ble, endIf);\r\n\t\t\til.Ldloc(tmpStrictness);\r\n\t\t\til.Stloc(bestStrictness);\r\n\t\t\til.LdcI4(i);\r\n\t\t\til.Stloc(bestOverload);\r\n\t\t\til.MarkLabel(endIf);\r\n\r\n\t\t\t// test whether we found 'ImplExactMatch' (the best possible)\r\n\t\t\t// if (tmpStrictness == ImplExactMatch) goto call_overload_i;\r\n\t\t\tif (!last)\r\n\t\t\t{\r\n\t\t\t\til.Ldloc(tmpStrictness);\r\n\t\t\t\til.LdcI4((int)ConversionStrictness.ImplExactMatch);\r\n\t\t\t\til.Emit(OpCodes.Beq, callSwitch);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void EmitConversions(BitArray/*!*/ aliases, Overload/*!*/ overload, Label failLabel,\r\n\t\t\tLocalBuilder overloadStrictness, LocalBuilder[] formals, bool loadAllFormals)\r\n\t\t{\r\n\t\t\tMethodBase overload_base = overload.Method; \r\n\t\t\tif (!emitParentCtorCall && (overload_base.IsFamily || overload_base.IsFamilyOrAssembly))\r\n\t\t\t{\r\n\t\t\t\t// IF (!stack.AllowProtectedCall) THEN GOTO next-overload-or-error;\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_AllowProtectedCall);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, failLabel);\r\n\t\t\t}\r\n\t\t\tif (!emitParentCtorCall && !overload_base.IsStatic && !overload_base.IsConstructor)\r\n\t\t\t{\r\n\t\t\t\t// IF (<instance> == null) THEN GOTO next-overload-or-error;\r\n\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, failLabel);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tParameterInfo[] parameters = overload.Parameters;\r\n\t\t\tint val_counter = 0, ref_counter = 0;\r\n\r\n\t\t\tbool overload_is_vararg = ((overload.Flags & ClrMethod.OverloadFlags.IsVararg) == ClrMethod.OverloadFlags.IsVararg);\r\n\t\t\tbool last_param_is_ambiguous_vararg = (overload_is_vararg && parameters.Length == aliases.Length);\r\n\r\n\t\t\tType params_array_element_type = null;\r\n\r\n\t\t\tfor (int arg_index = 0; arg_index < aliases.Length; arg_index++)\r\n\t\t\t{\r\n\t\t\t\t// ambiguous_vararg = true iff this is the trailing nth [ParamsArray] parameter and we've been\r\n\t\t\t\t// given exactly n arguments - we can accept either the array or one array element\r\n\t\t\t\tbool vararg = false, ambiguous_vararg = false;\r\n\r\n\t\t\t\tType formal_param_type;\r\n\t\t\t\tif (arg_index < parameters.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tformal_param_type = parameters[arg_index].ParameterType;\r\n\t\t\t\t\tif (formal_param_type.IsByRef) formal_param_type = formal_param_type.GetElementType();\r\n\r\n\t\t\t\t\t// if current parameter is [params] array, set vararg to true\r\n\t\t\t\t\tif (arg_index + 1 == parameters.Length) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tambiguous_vararg = last_param_is_ambiguous_vararg;\r\n\t\t\t\t\t\tvararg = overload_is_vararg;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse formal_param_type = null;\r\n\r\n\t\t\t\t// LOAD <actual arg #arg_index>\r\n\t\t\t\t#region Load value or reference depending on parameter in/out settings\r\n\t\t\t\tPhpTypeCode php_type_code;\r\n\r\n\t\t\t\tif (aliases[arg_index])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (arg_index >= parameters.Length || !parameters[arg_index].IsOut)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Ldloc(refLocals[ref_counter++]);\r\n\t\t\t\t\t\tphp_type_code = PhpTypeCode.PhpReference;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// TODO: Completely ignoring actual arg type passed to out params - questionable\r\n\t\t\t\t\t\tformals[arg_index] = il.GetTemporaryLocal(formal_param_type);\r\n\t\t\t\t\t\tref_counter++;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\til.Ldloc(valLocals[val_counter++]);\r\n\t\t\t\t\tphp_type_code = PhpTypeCode.Object;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\t// Switch to mode when parameters are stored in [params] array \r\n\t\t\t\t// (unless we need to try conversion to array first - in case of ambigous vararg)\r\n\t\t\t\tif (formal_param_type != null && vararg && !ambiguous_vararg)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(formal_param_type.IsArray);\r\n\r\n\t\t\t\t\tformals[arg_index] = il.GetTemporaryLocal(formal_param_type); // declare local of the vararg array type\r\n\t\t\t\t\tparams_array_element_type = formal_param_type.GetElementType();\r\n\t\t\t\t\tEmitCreateParamsArray(params_array_element_type, formals[arg_index], aliases.Length - arg_index);\r\n\t\t\t\t\tformal_param_type = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// formal = CONVERT(stack, out success);\r\n\t\t\t\tbool ct_ok = EmitConvertToClr(il, php_type_code, formal_param_type ?? params_array_element_type, strictness);\r\n\r\n\t\t\t\t#region Store converted value in local variable or [params] array\r\n\t\t\t\t// Store returned value in local variable\r\n\t\t\t\tif (formal_param_type != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tformals[arg_index] = il.GetTemporaryLocal(formal_param_type); // declare local of the formal param type\r\n\t\t\t\t\til.Stloc(formals[arg_index]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store returned value in [params] array\r\n\t\t\t\tif (formal_param_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(overload_is_vararg);\r\n\r\n\t\t\t\t\t// _params[n] = formal\r\n\t\t\t\t\tLocalBuilder temp = il.GetTemporaryLocal(params_array_element_type, true);\r\n\t\t\t\t\til.Stloc(temp);\r\n\t\t\t\t\til.Ldloc(formals[parameters.Length - 1]);\r\n\t\t\t\t\til.LdcI4(arg_index - parameters.Length + 1);\r\n\t\t\t\t\til.Ldloc(temp);\r\n\t\t\t\t\til.Stelem(params_array_element_type);\r\n\t\t\t\t}\r\n\t\t\t\t#endregion\r\n\r\n\t\t\t\tif (!ct_ok)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ambiguous_vararg)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if the conversion to array has failed, we should try to convert it to the array element\r\n\t\t\t\t\t\t// this bypasses standard \"strictness\" handling because type can't be convertible to A and A[] at one time..\r\n\t\t\t\t\t\tDebug.Assert(parameters[arg_index].IsDefined(typeof(ParamArrayAttribute), false));\r\n\t\t\t\t\t\tEmitConversionToAmbiguousVararg(arg_index, formal_param_type, strictness, php_type_code,\r\n\t\t\t\t\t\t\t(php_type_code == PhpTypeCode.PhpReference ? refLocals[ref_counter - 1] : valLocals[val_counter - 1]), formals);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if (strictness == Failed) goto error;\r\n\t\t\t\t\t// strictness_i += strictness\r\n\t\t\t\t\til.Ldloc(strictness);\r\n\t\t\t\t\til.LdcI4((int)ConversionStrictness.Failed);\r\n\t\t\t\t\til.Emit(OpCodes.Beq, failLabel);\r\n\t\t\t\t\t\r\n\t\t\t\t\til.Ldloc(overloadStrictness);\r\n\t\t\t\t\til.Ldloc(strictness);\r\n\t\t\t\t\til.Emit(OpCodes.Add);\r\n\t\t\t\t\til.Stloc(overloadStrictness);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (loadAllFormals && parameters.Length > aliases.Length)\r\n\t\t\t{\r\n\t\t\t\t// one more params argument left -> add empty array\r\n\t\t\t\tint arg_index = aliases.Length;\r\n\t\t\t\tType formal_param_type = parameters[arg_index].ParameterType;\r\n\r\n\t\t\t\tDebug.Assert(arg_index + 1 == parameters.Length);\r\n\t\t\t\tDebug.Assert(parameters[arg_index].IsDefined(typeof(ParamArrayAttribute), false));\r\n\t\t\t\tDebug.Assert(formal_param_type.IsArray);\r\n\r\n\t\t\t\tformals[arg_index] = il.GetTemporaryLocal(formal_param_type);\r\n\t\t\t\tEmitCreateParamsArray(formal_param_type.GetElementType(), formals[arg_index], 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void EmitConversionToAmbiguousVararg(int argIndex, Type/*!*/ formalParamType, LocalBuilder/*!*/ tmpStrictness,\r\n\t\t\tPhpTypeCode argLocalTypeCode, LocalBuilder/*!*/ argLocal, LocalBuilder[] formals)\r\n\t\t{\r\n\t\t\tDebug.Assert(formalParamType.IsArray);\r\n\t\t\tType element_type = formalParamType.GetElementType();\r\n\t\t\tLabel success_label = il.DefineLabel();\r\n\r\n\t\t\t// IF (overloadStrictness == ImplExactMatch) GOTO <success_label>\r\n\t\t\til.Ldloc(tmpStrictness); \r\n\t\t\til.LdcI4((int)ConversionStrictness.ImplExactMatch);\r\n\t\t\til.Emit(OpCodes.Beq, success_label);\r\n\r\n\t\t\t// formal = new ELEMENT_TYPE[1] { CONVERT(stack, out strictness) };\r\n\t\t\tEmitCreateParamsArray(element_type, formals[argIndex], 1);\r\n\r\n\t\t\til.Ldloc(formals[argIndex]);\r\n\t\t\til.LdcI4(0);\r\n\r\n\t\t\t// reload the argument\r\n\t\t\til.Ldloc(argLocal);\r\n\r\n\t\t\tbool ct_ok = EmitConvertToClr(il, argLocalTypeCode, element_type, tmpStrictness);\r\n\t\t\til.Stelem(element_type);\r\n\t\t\til.MarkLabel(success_label, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitConvertToClr\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a PHP value to the given CLR type that is a generic parameter.\r\n\t\t/// </summary>\r\n\t\tprivate static void EmitConvertToClrGeneric(ILEmitter/*!*/ il, Type/*!*/ formalType, LocalBuilder/*!*/ strictnessLocal)\r\n\t\t{\r\n\t\t\tDebug.Assert(formalType.IsGenericParameter);\r\n\r\n\t\t\t// f...ing GenericTypeParameterBuilder will not allow us to read its attributes and constraints :(\r\n\t\t\tif (!(formalType is GenericTypeParameterBuilder))\r\n\t\t\t{\r\n\t\t\t\tGenericParameterAttributes attrs = formalType.GenericParameterAttributes;\r\n\t\t\t\tif (Reflection.Enums.GenericParameterAttrTest(attrs, GenericParameterAttributes.NotNullableValueTypeConstraint))\r\n\t\t\t\t{\r\n\t\t\t\t\t// we know that we are converting to a value type\r\n\t\t\t\t\til.Ldloca(strictnessLocal);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.ConvertToClr.TryObjectToStruct.MakeGenericMethod(formalType));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tType[] constraints = formalType.GetGenericParameterConstraints();\r\n\t\t\t\tfor (int i = 0; i < constraints.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (constraints[i].IsClass)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!constraints[i].IsArray && !typeof(Delegate).IsAssignableFrom(constraints[i]))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// we know that we are converting to a class that is not an array nor a delegate\r\n\t\t\t\t\t\t\til.Ldloca(strictnessLocal);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.ConvertToClr.TryObjectToClass.MakeGenericMethod(formalType));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// postpone the conversion to runtime\r\n\t\t\til.Ldloca(strictnessLocal);\r\n\t\t\til.Emit(OpCodes.Call, Methods.Convert.TryObjectToType.MakeGenericMethod(formalType));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a PHP value to the given CLR type (the caller is not interested in the success of the conversion).\r\n\t\t/// </summary>\r\n\t\tpublic static void EmitConvertToClr(ILEmitter/*!*/ il, PhpTypeCode typeCode, Type/*!*/ formalType)\r\n\t\t{\r\n\t\t\tEmitConvertToClr(il, typeCode, formalType, il.GetTemporaryLocal(typeof(ConversionStrictness), true));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a PHP value to the given CLR type (the caller passes a <paramref name=\"strictnessLocal\"/> that will\r\n\t\t/// receive one of the <see cref=\"PHP.Core.ConvertToClr.ConversionStrictness\"/> enumeration values that\r\n\t\t/// describe the conversion result (the Failed value indicates that conversion was not successful).\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> if it the conversion will surely succeed.</returns>\r\n\t\tinternal static bool EmitConvertToClr(ILEmitter/*!*/ il, PhpTypeCode typeCode,\r\n\t\t\tType/*!*/ formalType, LocalBuilder/*!*/ strictnessLocal)\r\n\t\t{\r\n\t\t\tDebug.Assert(strictnessLocal.LocalType == typeof(ConversionStrictness));\r\n\r\n\t\t\t// preprocess the value according to the PHP type code\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.PhpReference:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// dereference\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\t\t\ttypeCode = PhpTypeCode.Object;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase PhpTypeCode.ObjectAddress:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// dereference\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldind_Ref);\r\n\t\t\t\t\t\ttypeCode = PhpTypeCode.Object;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\r\n                case PhpTypeCode.PhpRuntimeChain:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// special treatment for generic parameters\r\n\t\t\tif (formalType.IsGenericParameter)\r\n\t\t\t{\r\n\t\t\t\tEmitConvertToClrGeneric(il, formalType, strictnessLocal);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// convert CLR type\r\n\t\t\treturn EmitConvertObjectToClr(il, typeCode, formalType, strictnessLocal);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts object to CLR type\r\n\t\t/// </summary>\r\n\t\tprivate static bool EmitConvertObjectToClr(ILEmitter il, PhpTypeCode typeCode, Type formalType, LocalBuilder strictnessLocal)\r\n\t\t{\r\n\t\t\tMethodInfo convert_method = null;\r\n\t\t\tswitch (Type.GetTypeCode(formalType))\r\n\t\t\t{\r\n\t\t\t\tcase TypeCode.Boolean: if (typeCode != PhpTypeCode.Boolean)\r\n\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToBoolean; break;\r\n\t\t\t\tcase TypeCode.Int32: if (typeCode != PhpTypeCode.Integer)\r\n\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToInt32; break;\r\n\t\t\t\tcase TypeCode.Int64: if (typeCode != PhpTypeCode.LongInteger)\r\n\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToInt64; break;\r\n\t\t\t\tcase TypeCode.Double: if (typeCode != PhpTypeCode.Double)\r\n\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToDouble; break;\r\n\t\t\t\tcase TypeCode.String: if (typeCode != PhpTypeCode.String)\r\n\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToString; break;\r\n\r\n\t\t\t\tcase TypeCode.SByte: convert_method = Methods.ConvertToClr.TryObjectToInt8; break;\r\n\t\t\t\tcase TypeCode.Int16: convert_method = Methods.ConvertToClr.TryObjectToInt16; break;\r\n\t\t\t\tcase TypeCode.Byte: convert_method = Methods.ConvertToClr.TryObjectToUInt8; break;\r\n\t\t\t\tcase TypeCode.UInt16: convert_method = Methods.ConvertToClr.TryObjectToUInt16; break;\r\n\t\t\t\tcase TypeCode.UInt32: convert_method = Methods.ConvertToClr.TryObjectToUInt32; break;\r\n\t\t\t\tcase TypeCode.UInt64: convert_method = Methods.ConvertToClr.TryObjectToUInt64; break;\r\n\t\t\t\tcase TypeCode.Single: convert_method = Methods.ConvertToClr.TryObjectToSingle; break;\r\n\t\t\t\tcase TypeCode.Decimal: convert_method = Methods.ConvertToClr.TryObjectToDecimal; break;\r\n\t\t\t\tcase TypeCode.Char: convert_method = Methods.ConvertToClr.TryObjectToChar; break;\r\n\t\t\t\tcase TypeCode.DateTime: convert_method = Methods.ConvertToClr.TryObjectToDateTime; break;\r\n\t\t\t\tcase TypeCode.DBNull: convert_method = Methods.ConvertToClr.TryObjectToDBNull; break;\r\n\r\n\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (formalType.IsValueType)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (formalType.IsGenericType && NullableType == formalType.GetGenericTypeDefinition())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// This is an ugly corner case (using generic TryObjectToStruct wouldn't work, because\r\n\t\t\t\t\t\t\t\t// for nullables .IsValueType returns true, but it doesn't match \"T : struct\" constraint)!\r\n\t\t\t\t\t\t\t\t// We have to try converting object to Nullable<T> first and then to T\r\n\t\t\t\t\t\t\t\t// (which requires a new call to 'EmitConvertObjectToClr') \r\n\t\t\t\t\t\t\t\tType nullableArg = formalType.GetGenericArguments()[0];\r\n\t\t\t\t\t\t\t\tType nullableType = NullableType.MakeGenericType(nullableArg);\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tLocalBuilder tmpVar = il.DeclareLocal(typeof(object));\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// This succeeds only for exact match\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.ConvertToClr.UnwrapNullable);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\t\t\t\t\til.Stloc(tmpVar);\r\n\r\n\t\t\t\t\t\t\t\t// <stack_0> = tmpVar = UnwrapNullable(...)\r\n\t\t\t\t\t\t\t\t// if (<stack_0> != null) \r\n\t\t\t\t\t\t\t\tLabel lblNull = il.DefineLabel(), lblDone = il.DefineLabel();\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Beq, lblNull);\r\n\t\t\t\t\t\t\t\t// {\r\n\r\n\t\t\t\t\t\t\t\t// Convert tmpVar to T and wrap it into Nullable<T>\r\n\t\t\t\t\t\t\t\til.Ldloc(tmpVar);\r\n\t\t\t\t\t\t\t\tbool ret = EmitConvertObjectToClr(il, typeCode, nullableArg, strictnessLocal);\r\n\t\t\t\t\t\t\t\t// TODO: use reflection cache?\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, nullableType.GetConstructors()[0]);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Br, lblDone);\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// } else /* == null */ {\r\n\t\t\t\t\t\t\t\til.MarkLabel(lblNull);\r\n\r\n\t\t\t\t\t\t\t\t// return (T?)null;\r\n\t\t\t\t\t\t\t\tLocalBuilder tmpNull = il.DeclareLocal(nullableType);\r\n\t\t\t\t\t\t\t\til.Ldloca(tmpNull);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Initobj, nullableType);\r\n\t\t\t\t\t\t\t\til.Ldloc(tmpNull);\r\n\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\til.MarkLabel(lblDone);\r\n\t\t\t\t\t\t\t\treturn ret;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToStruct.MakeGenericMethod(formalType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (formalType.IsArray)\r\n\t\t\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToArray.MakeGenericMethod(formalType.GetElementType());\r\n\t\t\t\t\t\t\telse if (typeof(Delegate).IsAssignableFrom(formalType))\r\n\t\t\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToDelegate.MakeGenericMethod(formalType);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tconvert_method = Methods.ConvertToClr.TryObjectToClass.MakeGenericMethod(formalType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (convert_method != null)\r\n\t\t\t{\r\n\t\t\t\til.Ldloca(strictnessLocal);\r\n\t\t\t\til.Emit(OpCodes.Call, convert_method);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse return true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitConvertToPhp\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a value of the given CLR type to PHP value.\r\n\t\t/// </summary>\r\n\t\tinternal static PhpTypeCode EmitConvertToPhp(ILEmitter/*!*/ il, Type/*!*/ type)\r\n\t\t{\r\n\t\t\t// box generic parameter\r\n\t\t\tif (type.IsGenericParameter)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Box, type);\r\n\t\t\t\ttype = Types.Object[0];\r\n\t\t\t}\r\n\r\n\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t{\r\n\t\t\t\t// primitives:\r\n\t\t\t\tcase TypeCode.Boolean: return PhpTypeCode.Boolean;\r\n\t\t\t\tcase TypeCode.Int32: return PhpTypeCode.Integer;\r\n\t\t\t\tcase TypeCode.Int64: return PhpTypeCode.LongInteger;\r\n\t\t\t\tcase TypeCode.Double: return PhpTypeCode.Double;\r\n\t\t\t\tcase TypeCode.String: return PhpTypeCode.String;\r\n\r\n\t\t\t\t// coercion:\r\n\t\t\t\tcase TypeCode.SByte:\r\n\t\t\t\tcase TypeCode.Int16:\r\n\t\t\t\tcase TypeCode.Byte:\r\n\t\t\t\tcase TypeCode.UInt16:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Conv_I4);\r\n\t\t\t\t\t\treturn PhpTypeCode.Integer;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase TypeCode.UInt32: EmitConstrainedCoercion(il, typeof(int), typeof(long), Int32.MaxValue); return PhpTypeCode.Object;\r\n\t\t\t\tcase TypeCode.UInt64: EmitConstrainedCoercion(il, typeof(int), typeof(long), Int32.MaxValue); return PhpTypeCode.Object;\r\n\r\n\t\t\t\tcase TypeCode.Single: il.Emit(OpCodes.Conv_R8); return PhpTypeCode.Double;\r\n                case TypeCode.Char:\r\n                    il.Emit(OpCodes.Box, type);\r\n                    il.Emit(OpCodes.Callvirt, Methods.Object_ToString);\r\n                    return PhpTypeCode.String;\r\n\r\n\t\t\t\tcase TypeCode.DBNull:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase TypeCode.Decimal: // TODO: what to do with this guy?\r\n\t\t\t\tcase TypeCode.DateTime:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Box, type);\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_Wrap);\r\n\t\t\t\t\t\treturn PhpTypeCode.DObject;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!typeof(IPhpVariable).IsAssignableFrom(type))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (type.IsValueType)\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Box, type);\r\n\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_WrapDynamic);\r\n\r\n\t\t\t\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse return PhpTypeCodeEnum.FromType(type);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\t\treturn PhpTypeCode.Invalid;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static void EmitConstrainedCoercion(ILEmitter/*!*/ il, Type/*!*/ narrow, Type/*!*/ wide, object threshold)\r\n\t\t{\r\n\t\t\tLabel else_label = il.DefineLabel();\r\n\t\t\tLabel endif_label = il.DefineLabel();\r\n\r\n\t\t\til.Emit(OpCodes.Dup);\r\n\r\n\t\t\t// IF (STACK <= threshold) THEN\r\n\t\t\til.LoadLiteral(threshold);\r\n\t\t\til.Emit(OpCodes.Bgt_S, else_label);\r\n\r\n\t\t\t// LOAD (narrow)STACK\r\n\t\t\til.Conv(narrow, false);\r\n\t\t\til.Emit(OpCodes.Box, narrow);\r\n\r\n\t\t\til.Emit(OpCodes.Br_S, endif_label);\r\n\r\n\t\t\t// ELSE\r\n\t\t\til.MarkLabel(else_label);\r\n\r\n\t\t\t// LOAD (wide)STACK\r\n\r\n\t\t\til.Conv(wide, false);\r\n\t\t\til.Emit(OpCodes.Box, wide);\r\n\r\n\t\t\t// ENDIF\r\n\t\t\til.MarkLabel(endif_label);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ClrStubBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\tinternal class StubParameterInfo : ParameterInfo\r\n\t{\r\n\t\tpublic StubParameterInfo(int position, Type/*!*/ type, ParameterAttributes attributes, string name)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null);\r\n\r\n#if !SILVERLIGHT\r\n\t\t\tthis.ClassImpl = type;\r\n\t\t\tthis.AttrsImpl = attributes;\r\n\t\t\tthis.NameImpl = name;\r\n\t\t\tthis.PositionImpl = position;\r\n#endif\r\n\t\t}\r\n\t}\r\n\r\n\tinternal struct StubInfo\r\n\t{\r\n\t\tpublic static GenericTypeParameterBuilder[] EmptyGenericParameters = new GenericTypeParameterBuilder[0];\r\n\r\n\t\tprivate readonly MethodBase methodBase;\r\n\r\n\t\tpublic readonly ParameterInfo[] Parameters;\r\n\t\tpublic readonly GenericTypeParameterBuilder[] TypeParameters;\r\n\t\tpublic readonly Type ReturnType;\r\n\r\n\t\tpublic MethodBuilder MethodBuilder { get { return (MethodBuilder)methodBase; } }\r\n\t\tpublic ConstructorBuilder ConstructorBuilder { get { return (ConstructorBuilder)methodBase; } }\r\n\r\n\t\tpublic StubInfo(MethodBase methodBase, ParameterInfo[] parameters,\r\n\t\t\tGenericTypeParameterBuilder[] typeParameters, Type returnType)\r\n\t\t{\r\n\t\t\tDebug.Assert(methodBase is MethodBuilder || methodBase is ConstructorBuilder);\r\n\r\n\t\t\tthis.methodBase = methodBase;\r\n\t\t\tthis.Parameters = parameters;\r\n\t\t\tthis.TypeParameters = typeParameters;\r\n\t\t\tthis.ReturnType = returnType;\r\n\t\t}\r\n\t}\r\n\r\n\tinternal delegate bool StubSignatureFilter(string[] genericParameterNames, object[] parameterTypes, object returnType);\r\n\r\n\t/// <summary>\r\n\t/// Provides services related to building CLR stubs of PHP methods, fields, and constants.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Three areas that make use of CLR stubs have been identified so far:\r\n\t/// <list type=\"1\">\r\n\t/// <item>Override/implement stubs - <see cref=\"CodeGenerator.EmitOverrideStubs\"/></item>\r\n\t/// <item>Dynamic delegate stubs - <see cref=\"Core.Reflection.ClrDelegateDesc.DelegateStubBuilder\"/></item>\r\n\t/// <item>Export stubs - <see cref=\"CodeGenerator.EmitExportStubs\"/></item>\r\n\t/// </list>\r\n\t/// </remarks>\r\n\tinternal class ClrStubBuilder\r\n\t{\r\n\t\tprivate ILEmitter/*!*/ il;\r\n\t\tprivate IPlace scriptContextPlace;\r\n\r\n\t\tprivate int paramOffset;\r\n\r\n\t\tprivate LocalBuilder[] referenceLocals;\r\n\r\n\t\tpublic ClrStubBuilder(ILEmitter/*!*/ il, IPlace/*!*/ scriptContextPlace, int paramCount, int paramOffset)\r\n\t\t{\r\n\t\t\tthis.il = il;\r\n\t\t\tthis.scriptContextPlace = scriptContextPlace;\r\n\t\t\tthis.paramOffset = paramOffset;\r\n\r\n\t\t\tthis.referenceLocals = new LocalBuilder[paramCount];\r\n\t\t}\r\n\r\n\t\t#region EmitLoadClrParameter, EmitStoreClrParameter, EmitConvertReturnValue\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads a specified parameter on the evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"paramInfo\">The parameter to load.</param>\r\n\t\t/// <param name=\"requiredTypeCode\">Specifies whether <see cref=\"PhpReference\"/>\r\n\t\t/// (<see cref=\"PhpTypeCode.PhpReference\"/>), <see cref=\"object\"/> (<see cref=\"PhpTypeCode.Object\"/>),\r\n\t\t/// or the most fitting of these two should be loaded.</param>\r\n\t\tpublic void EmitLoadClrParameter(ParameterInfo/*!*/ paramInfo, PhpTypeCode requiredTypeCode)\r\n\t\t{\r\n\t\t\tif (paramInfo.IsOut) il.Emit(OpCodes.Ldnull);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\til.Ldarg(paramInfo.Position + paramOffset);\r\n\r\n\t\t\t\t// dereference ref param\r\n\t\t\t\tType param_type = paramInfo.ParameterType;\r\n\t\t\t\tif (param_type.IsByRef)\r\n\t\t\t\t{\r\n\t\t\t\t\tparam_type = param_type.GetElementType();\r\n\r\n\t\t\t\t\til.Ldind(param_type);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// convert the parameter to PHP type\r\n\t\t\t\tPhpTypeCode type_code = ClrOverloadBuilder.EmitConvertToPhp(\r\n\t\t\t\t\til,\r\n\t\t\t\t\tparam_type/*,\r\n\t\t\t\t\tscriptContextPlace*/);\r\n\r\n\t\t\t\til.EmitBoxing(type_code);\r\n\t\t\t}\r\n\r\n\t\t\t// check whether we have to create a PhpReference\r\n\t\t\tif (requiredTypeCode == PhpTypeCode.Object ||\r\n\t\t\t\t(requiredTypeCode == PhpTypeCode.Unknown && !paramInfo.ParameterType.IsByRef)) return;\r\n\r\n\t\t\tif (paramInfo.ParameterType.IsByRef)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder ref_local = il.DeclareLocal(Types.PhpReference[0]);\r\n\r\n\t\t\t\t// remember the PhpReference in a local\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\til.Stloc(ref_local);\r\n\r\n\t\t\t\treferenceLocals[paramInfo.Position] = ref_local;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// no reference store-back is necessary\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that stores a <see cref=\"PhpReference\"/>'s value back to a ref/out parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"paramInfo\">The parameter to store back.</param>\r\n\t\tpublic void EmitStoreClrParameter(ParameterInfo/*!*/ paramInfo)\r\n\t\t{\r\n\t\t\tif (paramInfo.ParameterType.IsByRef && referenceLocals[paramInfo.Position] != null)\r\n\t\t\t{\r\n\t\t\t\til.Ldarg(paramInfo.Position + paramOffset);\r\n\r\n\t\t\t\tType param_type = paramInfo.ParameterType.GetElementType();\r\n\r\n\t\t\t\t// load the new parameter value\r\n\t\t\t\til.Ldloc(referenceLocals[paramInfo.Position]);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\r\n\t\t\t\t// convert it to CLR type\r\n\t\t\t\tClrOverloadBuilder.EmitConvertToClr(\r\n\t\t\t\t\til,\r\n\t\t\t\t\tPhpTypeCode.Object,\r\n\t\t\t\t\tparam_type);\r\n\r\n\t\t\t\t// store it back\r\n\t\t\t\til.Stind(param_type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void EmitConvertReturnValue(Type/*!*/ returnType, PhpTypeCode expectedTypeCode)\r\n\t\t{\r\n\t\t\tif (returnType == Types.Void) il.Emit(OpCodes.Pop);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (expectedTypeCode == PhpTypeCode.PhpReference)\r\n\t\t\t\t{\r\n\t\t\t\t\t// dereference\r\n\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\t\texpectedTypeCode = PhpTypeCode.Object;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tClrOverloadBuilder.EmitConvertToClr(\r\n\t\t\t\t\til,\r\n\t\t\t\t\texpectedTypeCode,\r\n\t\t\t\t\treturnType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitLoadArgfullParameters, EmitLoadArglessParameters\r\n\r\n\t\tprivate void EmitLoadArgfullParameters(ParameterInfo[]/*!*/ stubParameters,\r\n\t\t\tType[]/*!*/ stubTypeParameters, PhpMethod/*!*/ target)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < target.Signature.GenericParamCount; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i < stubTypeParameters.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldtoken, stubTypeParameters[i]);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.DTypeDesc_Create);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// optional type parameter, whose value is not supplied\r\n\t\t\t\t\til.Emit(OpCodes.Ldsfld, Fields.Arg_DefaultType);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < target.Signature.ParamCount; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i < stubParameters.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitLoadClrParameter(\r\n\t\t\t\t\t\tstubParameters[i],\r\n\t\t\t\t\t\ttarget.Signature.IsAlias(i) ? PhpTypeCode.PhpReference : PhpTypeCode.Object);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// optional parameter, whose value is not supplied\r\n\t\t\t\t\til.Emit(OpCodes.Ldsfld, Fields.Arg_Default);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void EmitLoadArglessParameters(ParameterInfo[]/*!*/ stubParameters,\r\n\t\t\tType[]/*!*/ stubTypeParameters, PhpMethod/*!*/ target)\r\n\t\t{\r\n\t\t\tPhpStackBuilder.EmitAddFrame(il, scriptContextPlace, stubTypeParameters.Length, stubParameters.Length,\r\n\t\t\t\tdelegate(ILEmitter eil, int i)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldtoken, stubTypeParameters[i]);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.DTypeDesc_Create);\r\n\t\t\t\t},\r\n\t\t\t\tdelegate(ILEmitter eil, int i)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitLoadClrParameter(stubParameters[i], PhpTypeCode.Unknown);\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region DefineFieldExport\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a property that &quot;exports;&quot; a given field or constant.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the property.</param>\r\n\t\t/// <param name=\"member\">A <see cref=\"PhpField\"/> or <see cref=\"ClassConstant\"/>.</param>\r\n\t\t/// <returns>The export property builder.</returns>\r\n\t\tpublic static PropertyBuilder/*!*/ DefineFieldExport(string name, DMember/*!*/ member)\r\n\t\t{\r\n\t\t\tDebug.Assert(member is PhpField || member is ClassConstant);\r\n\r\n\t\t\tDTypeDesc declaring_type_desc = member.DeclaringType.TypeDesc;\r\n\t\t\tTypeBuilder type_builder = member.DeclaringPhpType.RealTypeBuilder;\r\n\r\n\t\t\t// determine name and type\r\n\t\t\tType type = Types.Object[0]; // TODO: field/constant type hints?\r\n\r\n\t\t\tPropertyBuilder prop_builder = type_builder.DefineProperty(\r\n\t\t\t\tname,\r\n\t\t\t\tReflection.Enums.ToPropertyAttributes(member.MemberDesc.MemberAttributes),\r\n\t\t\t\ttype,\r\n\t\t\t\tType.EmptyTypes);\r\n\r\n\t\t\tMethodAttributes accessor_attrs = Reflection.Enums.ToMethodAttributes(member.MemberDesc.MemberAttributes);\r\n\t\t\tbool changed;\r\n\r\n\t\t\t// define getter\r\n\t\t\tMethodBuilder getter = type_builder.DefineMethod(\r\n\t\t\t\tGetNonConflictingMethodName(declaring_type_desc, \"get_\" + name, out changed),\r\n\t\t\t\taccessor_attrs,\r\n\t\t\t\ttype,\r\n\t\t\t\tType.EmptyTypes);\r\n\r\n\t\t\tgetter.SetCustomAttribute(AttributeBuilders.DebuggerHidden);\r\n\t\t\tprop_builder.SetGetMethod(getter);\r\n\r\n\t\t\t// generate setter\r\n\t\t\tif (member is PhpField)\r\n\t\t\t{\r\n\t\t\t\tMethodBuilder setter = type_builder.DefineMethod(\r\n\t\t\t\t\tGetNonConflictingMethodName(declaring_type_desc, \"set_\" + name, out changed),\r\n\t\t\t\t\taccessor_attrs,\r\n\t\t\t\t\tTypes.Void,\r\n\t\t\t\t\tnew Type[] { type });\r\n\r\n\t\t\t\tsetter.SetCustomAttribute(AttributeBuilders.DebuggerHidden);\r\n\t\t\t\tprop_builder.SetSetMethod(setter);\r\n\t\t\t}\r\n\r\n\t\t\treturn prop_builder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a name based on <paramref name=\"str\"/> that does not clash with any methods in the given type desc.\r\n\t\t/// </summary>\r\n\t\tinternal static string/*!*/ GetNonConflictingMethodName(DTypeDesc/*!*/ typeDesc, string/*!*/ str, out bool changed)\r\n\t\t{\r\n\t\t\tName name = new Name(str);\r\n\r\n\t\t\tchanged = false;\r\n\t\t\twhile (typeDesc.GetMethod(name) != null)\r\n\t\t\t{\r\n                name = new Name(name.Value + \"_\");\r\n\t\t\t\tchanged = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EmitStubBody, DefineStubParameters, DefineStubTypeParameters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits stub for one overridden/implemented/exported CLR overload.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\"></param>\r\n\t\t/// <param name=\"scriptContextPlace\"></param>\r\n\t\t/// <param name=\"stubParameters\">The overload parameters.</param>\r\n\t\t/// <param name=\"stubTypeParameters\">The overload type parameters.</param>\r\n\t\t/// <param name=\"stubReturnType\">The overload return type.</param>\r\n\t\t/// <param name=\"target\">The overriding/implementing/exporting method.</param>\r\n\t\t/// <param name=\"targetType\">The type (perhaps constructed) that declared <paramref name=\"target\"/>.</param>\r\n\t\tpublic static void EmitMethodStubBody(ILEmitter/*!*/ il, IPlace/*!*/ scriptContextPlace,\r\n\t\t\tParameterInfo[]/*!*/ stubParameters, Type[]/*!*/ stubTypeParameters,\r\n\t\t\tType/*!*/ stubReturnType, PhpMethod/*!*/ target, DType/*!*/ targetType)\r\n\t\t{\r\n\t\t\tbool stub_is_static = il.MethodBase.IsStatic;\r\n\r\n\t\t\tClrStubBuilder stub_builder =\r\n\t\t\t\tnew ClrStubBuilder(il, scriptContextPlace, stubParameters.Length, (stub_is_static ? 0 : 1));\r\n\r\n\t\t\tif (stubParameters.Length >= target.Signature.MandatoryParamCount &&\r\n\t\t\t\tstubTypeParameters.Length >= target.Signature.MandatoryGenericParamCount &&\r\n\t\t\t\t(target.Properties & RoutineProperties.IsArgsAware) == 0)\r\n\t\t\t{\r\n\t\t\t\t// we can directly call the target argful\r\n\r\n\t\t\t\tif (!stub_is_static) il.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\t\tscriptContextPlace.EmitLoad(il);\r\n\r\n\t\t\t\tstub_builder.EmitLoadArgfullParameters(stubParameters, stubTypeParameters, target);\r\n\r\n\t\t\t\t// invoke the target (virtually if it's not static)\r\n\t\t\t\til.Emit(stub_is_static ? OpCodes.Call : OpCodes.Callvirt,\r\n\t\t\t\t\tDType.MakeConstructed(target.ArgFullInfo, targetType as ConstructedType));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// we have to take the argless way\r\n\r\n\t\t\t\tstub_builder.EmitLoadArglessParameters(stubParameters, stubTypeParameters, target);\r\n\r\n\t\t\t\t// invoke the target's argless\r\n\t\t\t\t// TODO: this is not behaving 100% correct, because we're losing virtual dispatch here\r\n\t\t\t\tif (stub_is_static) il.Emit(OpCodes.Ldnull);\r\n\t\t\t\telse il.Ldarg(FunctionBuilder.ArgThis);\r\n\r\n\t\t\t\tscriptContextPlace.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, DType.MakeConstructed(target.ArgLessInfo, targetType as ConstructedType));\r\n\t\t\t}\r\n\r\n\t\t\t// do not keep it on stack needlessly\r\n\t\t\tif (stubReturnType == Types.Void) il.Emit(OpCodes.Pop);\r\n\r\n\t\t\t// convert ref/out parameters back to CLR type\r\n\t\t\tfor (int i = 0; i < stubParameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstub_builder.EmitStoreClrParameter(stubParameters[i]);\r\n\t\t\t}\r\n\r\n\t\t\tif (stubReturnType != Types.Void)\r\n\t\t\t{\r\n\t\t\t\t// convert the return parameter back to CLR type\r\n\t\t\t\tstub_builder.EmitConvertReturnValue(\r\n\t\t\t\t\tstubReturnType,\r\n\t\t\t\t\ttarget.Signature.AliasReturn ? PhpTypeCode.PhpReference : PhpTypeCode.Object);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets attributes of generated override/implement/export stub parameters.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stub\">The stub method builder.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"formalParams\">Formal parameters of the implementing PHP method.</param>\r\n\t\t/// <param name=\"templateParams\">Parameters of the overload being overriden/implemented/exported.</param>\r\n\t\tpublic static void DefineStubParameters(MethodBuilder/*!*/ stub,\r\n\t\t\tPHP.Core.AST.FormalParam[] formalParams, ParameterInfo[]/*!*/ templateParams)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < templateParams.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring name;\r\n\r\n\t\t\t\t// take the overriding parameter name if available\r\n\t\t\t\tif (formalParams != null && i < formalParams.Length) name = formalParams[i].Name.ToString();\r\n\t\t\t\telse name = templateParams[i].Name;\r\n\r\n\t\t\t\tstub.DefineParameter(i + 1, templateParams[i].Attributes, name);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets attributes of generated override/implement/export stub parameters.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stub\">The stub constructor builder.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"formalParams\">Formal parameters of the implementing PHP method.</param>\r\n\t\t/// <param name=\"templateParams\">Parameters of the overload being overriden/implemented/exported.</param>\r\n\t\tpublic static void DefineStubParameters(ConstructorBuilder/*!*/ stub,\r\n\t\t\tPHP.Core.AST.FormalParam[] formalParams, ParameterInfo[]/*!*/ templateParams)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < templateParams.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring name;\r\n\r\n\t\t\t\t// take the overriding parameter name if available\r\n\t\t\t\tif (formalParams != null && i < formalParams.Length) name = formalParams[i].Name.ToString();\r\n\t\t\t\telse name = templateParams[i].Name;\r\n\r\n\t\t\t\tstub.DefineParameter(i + 1, templateParams[i].Attributes, name);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines generic parameters according to the given template and re-maps relevant parameters.\r\n\t\t/// </summary>\r\n\t\tpublic static void DefineStubGenericParameters(MethodBuilder/*!*/ stub, Type[]/*!!*/ genericParameters,\r\n\t\t\tPhpRoutineSignature/*!*/ targetSignature, Type[]/*!!*/ parameters)\r\n\t\t{\r\n\t\t\t// determine generic parameter names\r\n\t\t\tstring[] generic_param_names = new string[genericParameters.Length];\r\n\t\t\tfor (int j = 0; j < generic_param_names.Length; j++)\r\n\t\t\t{\r\n\t\t\t\tif (j < targetSignature.GenericParamCount)\r\n\t\t\t\t{\r\n\t\t\t\t\tgeneric_param_names[j] = targetSignature.GenericParams[j].Name.ToString();\r\n\t\t\t\t}\r\n\t\t\t\telse generic_param_names[j] = genericParameters[j].Name;\r\n\t\t\t}\r\n\t\t\tGenericTypeParameterBuilder[] generic_params = stub.DefineGenericParameters(generic_param_names);\r\n\r\n\t\t\t// determine generic parameter attributes and constraints\r\n\t\t\tfor (int j = 0; j < generic_params.Length; j++)\r\n\t\t\t{\r\n\t\t\t\tType template_type = genericParameters[j];\r\n\r\n\t\t\t\t// attributes\r\n\t\t\t\tgeneric_params[j].SetGenericParameterAttributes(template_type.GenericParameterAttributes);\r\n\r\n\t\t\t\t// constraints\r\n\t\t\t\tType[] template_constraints = template_type.GetGenericParameterConstraints();\r\n\r\n\t\t\t\tList<Type> interface_constraints = new List<Type>();\r\n\t\t\t\tfor (int k = 0; k < template_constraints.Length; k++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (template_constraints[k].IsClass) generic_params[j].SetBaseTypeConstraint(template_constraints[k]);\r\n\t\t\t\t\telse interface_constraints.Add(template_constraints[k]);\r\n\t\t\t\t}\r\n\t\t\t\tgeneric_params[j].SetInterfaceConstraints(interface_constraints.ToArray());\r\n\t\t\t}\r\n\r\n\t\t\t// re-map base method generic parameters to the newly defined generic parameters\r\n\t\t\tfor (int j = 0; j < parameters.Length; j++)\r\n\t\t\t{\r\n\t\t\t\tif (parameters[j].IsGenericParameter && parameters[j].DeclaringMethod != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// method generic parameter\r\n\t\t\t\t\tparameters[j] = generic_params[parameters[j].GenericParameterPosition];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprivate static object[] GetStubParameterTypes(\r\n\t\t\tint paramCount,\r\n\t\t\tint typeParamCount,\r\n\t\t\tPhpRoutineSignature/*!*/ signature,\r\n\t\t\tPHP.Core.AST.FormalTypeParam[]/*!*/ formalTypeParams)\r\n\t\t{\r\n\t\t\tobject[] parameter_types = new object[paramCount];\r\n\t\t\tfor (int i = 0; i < paramCount; i++)\r\n\t\t\t{\r\n\t\t\t\tDType type_hint = signature.TypeHints[i];\r\n\t\t\t\tif (type_hint != null && !type_hint.IsUnknown)\r\n\t\t\t\t{\r\n\t\t\t\t\tGenericParameter gen_type_hint = type_hint as GenericParameter;\r\n\t\t\t\t\tif (gen_type_hint != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// this is a generic parameter - declared by either the method or type\r\n\t\t\t\t\t\tif (gen_type_hint.DeclaringMember is PhpRoutine)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (gen_type_hint.Index < typeParamCount)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// unknown at this point - fixed-up later\r\n\t\t\t\t\t\t\t\tparameter_types[i] = gen_type_hint.Index;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// default generic parameter\r\n                                var typeparam = formalTypeParams[gen_type_hint.Index].DefaultType;\r\n                                \r\n                                DType default_type = typeparam as DType;\r\n                                if (default_type == null && typeparam is GenericQualifiedName)\r\n                                    default_type = PrimitiveType.GetByName((GenericQualifiedName)typeparam);\r\n\r\n\t\t\t\t\t\t\t\tparameter_types[i] = (default_type == null ? Types.Object[0] : default_type.RealType);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse parameter_types[i] = gen_type_hint.RealGenericTypeParameterBuilder;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse parameter_types[i] = type_hint.RealType;\r\n\t\t\t\t}\r\n\t\t\t\telse parameter_types[i] = Types.Object[0];\r\n\r\n\t\t\t\t// make it byref if declared with &\r\n\t\t\t\tif (signature.AliasMask[i])\r\n\t\t\t\t{\r\n\t\t\t\t\tType type = parameter_types[i] as Type;\r\n\t\t\t\t\tif (type != null) parameter_types[i] = type.MakeByRefType();\r\n\t\t\t\t\telse parameter_types[i] = -((int)parameter_types[i] + 1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tDebug.Assert(parameter_types[i] != null);\r\n\t\t\t}\r\n\r\n\t\t\treturn parameter_types;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumerates all export overloads for the given target PHP method.\r\n\t\t/// </summary>\r\n\t\tpublic static IEnumerable<StubInfo> DefineMethodExportStubs(\r\n\t\t\tPhpRoutine/*!*/ target, PhpType/*!*/ declaringType,\r\n\t\t\tMethodAttributes attributes,\r\n\t\t\tbool defineConstructors,\r\n\t\t\tStubSignatureFilter/*!*/ signatureFilter)\r\n\t\t{\r\n            Debug.Assert(target.Builder != null);\r\n\r\n            Type return_type = Types.Object[0];\r\n\r\n            PhpRoutineSignature signature = target.Signature;\r\n\t\t\tAST.FormalParam[] formal_params = target.Builder.Signature.FormalParams;\r\n\t\t\tAST.FormalTypeParam[] formal_type_params = target.Builder.TypeSignature.TypeParams;\r\n\r\n\t\t\tint gen_sig_count = signature.GenericParamCount - signature.MandatoryGenericParamCount + 1;\r\n\t\t\tint arg_sig_count = signature.ParamCount - signature.MandatoryParamCount + 1;\r\n\r\n\t\t\t// TODO: return type hints\r\n\t\t\t// HACK: change return type to void for methods that are apparently event handlers\r\n\t\t\tif (signature.GenericParamCount == 0 && arg_sig_count == 1 && signature.ParamCount == 2 &&\r\n\t\t\t\t(signature.TypeHints[0] == null || signature.TypeHints[0].RealType == Types.Object[0]) &&\r\n\t\t\t\t(signature.TypeHints[1] != null && typeof(EventArgs).IsAssignableFrom(signature.TypeHints[1].RealType)))\r\n\t\t\t{\r\n\t\t\t\treturn_type = Types.Void;\r\n\t\t\t}\r\n\r\n\t\t\tfor (int gen_sig = 0; gen_sig < gen_sig_count; gen_sig++)\r\n\t\t\t{\r\n\t\t\t\tfor (int arg_sig = 0; arg_sig < arg_sig_count; arg_sig++)\r\n\t\t\t\t{\r\n\t\t\t\t\t// determine parameter types (except for method mandatory generic parameters)\r\n\t\t\t\t\tobject[] parameter_types = GetStubParameterTypes(\r\n\t\t\t\t\t\targ_sig + signature.MandatoryParamCount,\r\n\t\t\t\t\t\tgen_sig + signature.MandatoryGenericParamCount,\r\n\t\t\t\t\t\tsignature,\r\n\t\t\t\t\t\tformal_type_params);\r\n\r\n\t\t\t\t\t// determine generic parameter names\r\n\t\t\t\t\tstring[] generic_param_names = new string[target.Signature.MandatoryGenericParamCount + gen_sig];\r\n\t\t\t\t\tfor (int i = 0; i < generic_param_names.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tgeneric_param_names[i] = formal_type_params[i].Name.ToString();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// are we allowed to generate this signature?\r\n\t\t\t\t\tif (!signatureFilter(generic_param_names, parameter_types, return_type)) continue;\r\n\r\n\t\t\t\t\tGenericTypeParameterBuilder[] generic_params = StubInfo.EmptyGenericParameters;\r\n\t\t\t\t\tMethodBase method_base = null;\r\n\t\t\t\t\tMethodBuilder method = null;\r\n\r\n\t\t\t\t\tif (!defineConstructors)\r\n\t\t\t\t\t{\r\n                        method = declaringType.RealTypeBuilder.DefineMethod(target.FullName, attributes);\r\n\r\n\t\t\t\t\t\t// determine generic parameters\r\n\t\t\t\t\t\tif (generic_param_names.Length > 0) generic_params = method.DefineGenericParameters(generic_param_names);\r\n\r\n\t\t\t\t\t\tmethod_base = method;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tParameterInfo[] parameters = new ParameterInfo[parameter_types.Length];\r\n\r\n\t\t\t\t\t// fill in parameter infos\r\n\t\t\t\t\tType[] real_parameter_types = new Type[parameters.Length];\r\n\t\t\t\t\tfor (int i = 0; i < parameters.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tType type = parameter_types[i] as Type;\r\n\r\n\t\t\t\t\t\t// generic method parameter fixup\r\n\t\t\t\t\t\tif (type == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint index = (int)parameter_types[i];\r\n\t\t\t\t\t\t\tif (index < 0) type = generic_params[-(index + 1)].MakeByRefType();\r\n\t\t\t\t\t\t\telse type = generic_params[index];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstring param_name;\r\n\t\t\t\t\t\tParameterAttributes param_attrs;\r\n\t\t\t\t\t\tif (i < formal_params.Length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tparam_name = formal_params[i].Name.ToString();\r\n\t\t\t\t\t\t\tparam_attrs = (formal_params[i].IsOut ? ParameterAttributes.Out : ParameterAttributes.None);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tparam_name = \"args\" + (i + 1);\r\n\t\t\t\t\t\t\tparam_attrs = ParameterAttributes.None;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tparameters[i] = new StubParameterInfo(i, type, param_attrs, param_name);\r\n\t\t\t\t\t\treal_parameter_types[i] = type;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (method != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmethod.SetParameters(real_parameter_types);\r\n\t\t\t\t\t\tmethod.SetReturnType(return_type);\r\n\r\n\t\t\t\t\t\tmethod.SetCustomAttribute(AttributeBuilders.DebuggerHidden);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// constructor is never a generic method\r\n\t\t\t\t\t\tattributes |= MethodAttributes.SpecialName | MethodAttributes.RTSpecialName;\r\n\t\t\t\t\t\tattributes &= ~MethodAttributes.Virtual;\r\n\r\n                        ConstructorBuilder constructor = declaringType.RealTypeBuilder.DefineConstructor(\r\n\t\t\t\t\t\t\tattributes, CallingConventions.Standard, real_parameter_types);\r\n\t\t\t\t\t\tconstructor.SetCustomAttribute(AttributeBuilders.DebuggerHidden);\r\n\r\n\t\t\t\t\t\tmethod_base = constructor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tyield return new StubInfo(method_base, parameters, generic_params, return_type);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/DelegateBuilder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n    internal class DelegateBuilder\r\n    {\r\n        #region Fields\r\n\r\n        public static readonly Type[] DelegateCtorSignature = new Type[] { typeof(object), typeof(IntPtr) };\r\n\r\n        private ModuleBuilder/*!*/moduleBuilder;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        public DelegateBuilder(ModuleBuilder/*!*/moduleBuilder)\r\n        {\r\n            Debug.Assert(moduleBuilder != null);\r\n\r\n            this.moduleBuilder = moduleBuilder;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Cache\r\n\r\n        /// <summary>\r\n        /// Cache of created delegate types.\r\n        /// </summary>\r\n        private List<Tuple<Type[], Type>> delegateTypesCache = null;\r\n\r\n        /// <summary>\r\n        /// Try to find created delegate from <see cref=\"delegateTypesCache\"/>.\r\n        /// </summary>\r\n        /// <param name=\"types\">Delegate type args.</param>\r\n        /// <returns><see cref=\"Type\"/> matching <paramref name=\"types\"/> or <c>null</c>.</returns>\r\n        private Type GetDelegateTypeFromCache(Type[]/*!*/types)\r\n        {\r\n            Tuple<Type[], Type> find;\r\n            if (delegateTypesCache != null && (find = delegateTypesCache.Find(x => ArrayUtils.Equals(x.Item1, types))) != null)\r\n                return find.Item2;\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add given delegate type into the <see cref=\"delegateTypesCache\"/>.\r\n        /// </summary>\r\n        /// <param name=\"types\"></param>\r\n        /// <param name=\"delegateType\"></param>\r\n        /// <returns><paramref name=\"delegateType\"/>.</returns>\r\n        private Type/*!*/AddDelegateTypeToCache(Type[]/*!*/types, Type/*!*/delegateType)\r\n        {\r\n            if (delegateTypesCache == null) delegateTypesCache = new List<Tuple<Type[], Type>>();\r\n            delegateTypesCache.Add(new Tuple<Type[], Type>(types, delegateType));\r\n\r\n            return delegateType;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetDelegateType\r\n\r\n        /// <summary>\r\n        /// Gets a System.Linq.Expressions.Expression.Type object that represents a generic\r\n        /// System.Func or System.Action delegate type that has specific type arguments.\r\n        /// \r\n        /// For <paramref name=\"types\"/> longer than 17 items, current module's <see cref=\"TypeBuilder\"/> is used instead of Transient one.\r\n        /// This avoids of \"Unable to make a reference to a transient module from a non-transient module.\" exception.\r\n        /// \r\n        /// For less or equal than 17 items, <see cref=\"System.Linq.Expressions.Expression.GetDelegateType\"/> is used.\r\n        /// </summary>\r\n        /// <param name=\"types\">The type arguments of the delegate.</param>\r\n        /// <param name=\"uniqueId\">A number used to name new delegate.</param>\r\n        /// <returns>The delegate type.</returns>\r\n        public Type/*!*/GetDelegateType(Type[]/*!*/types, long uniqueId)\r\n        {\r\n            Debug.Assert(types != null);\r\n\r\n            if (moduleBuilder.IsTransient() ||  // we are in transient module (so dynamically created types can be referenced)\r\n                (types.Length <= 17 && !types.Any((Type t) => t.IsByRef)))    // OR less or equal 17 items and none of them is by reference\r\n                return System.Linq.Expressions.Expression.GetDelegateType(types);\r\n\r\n            // else, Action or Func cannot be used, make the delegate:\r\n            return\r\n                GetDelegateTypeFromCache(types) ??      // try to find in cache first\r\n                AddDelegateTypeToCache(                 // create the delegate type\r\n                    types,\r\n                    CreateDelegateType(moduleBuilder, types, string.Format(\"Delegate{0}'{1}\", types.Length, uniqueId)));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create the delegate type.\r\n        /// </summary>\r\n        /// <param name=\"moduleBuilder\"></param>\r\n        /// <param name=\"types\">Delegate type args.</param>\r\n        /// <param name=\"delegateTypeName\">Unique name of the type.</param>\r\n        /// <returns>Delegate type.</returns>\r\n        private static Type/*!*/CreateDelegateType(ModuleBuilder/*!*/moduleBuilder, Type[]/*!*/types, string delegateTypeName)\r\n        {\r\n            // make the delegate:\r\n            TypeBuilder typeBuilder = moduleBuilder.DefineType(delegateTypeName, TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.AutoClass, typeof(MulticastDelegate));\r\n\r\n            Type returnType = types[types.Length - 1];\r\n            Type[] parameterTypes = ArrayUtils.RemoveLast<Type>(types);\r\n\r\n            typeBuilder.DefineConstructor(MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.RTSpecialName, CallingConventions.Standard, DelegateCtorSignature).SetImplementationFlags(MethodImplAttributes.CodeTypeMask);\r\n            typeBuilder.DefineMethod(\"Invoke\", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.VtableLayoutMask, returnType, parameterTypes).SetImplementationFlags(MethodImplAttributes.CodeTypeMask);\r\n            return typeBuilder.CreateType();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetDelegateCtor\r\n\r\n        public static ConstructorInfo/*!*/GetDelegateCtor(Type/*!*/delegateType)\r\n        {\r\n            return delegateType.GetConstructor(DelegateCtorSignature);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/DocFileBuilder.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// Implements generator of XML documentation.\r\n\t/// </summary>\r\n\tpublic sealed class XmlDocFileBuilder\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Full canonical path to the generated file.\r\n\t\t/// </summary>\r\n\t\tprivate string/*!*/ path;\r\n\r\n\t\tprivate XmlTextWriter/*!*/ writer;\r\n\r\n\t\tpublic XmlDocFileBuilder(string/*!*/ path, string /*!*/assemblyName)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null && assemblyName != null);\r\n\r\n\t\t\tthis.path = path;\r\n\t\t\twriter = new XmlTextWriter(path, Encoding.UTF8);\r\n\t\t\twriter.WriteStartDocument();\r\n\r\n\t\t\twriter.Formatting = Formatting.Indented;\r\n\t\t\twriter.Indentation = 1;\r\n\t\t\twriter.IndentChar = '\\t';\r\n\r\n\t\t\twriter.WriteStartElement(\"doc\");\r\n\r\n\t\t\t// assembly info:\r\n\t\t\twriter.WriteStartElement(\"assembly\");\r\n\t\t\twriter.WriteElementString(\"name\", assemblyName);\r\n\t\t\twriter.WriteEndElement();\r\n\r\n\t\t\twriter.WriteStartElement(\"members\");\r\n\t\t}\r\n\r\n\t\tprivate void StartMember(string/*!*/ id)\r\n\t\t{\r\n\t\t\twriter.WriteStartElement(\"member\");\r\n\t\t\twriter.WriteAttributeString(\"name\", id);\r\n\t\t}\r\n\r\n\t\tpublic void WriteFunction(string/*!*/ clrName, string/*!*/ comment)\r\n\t\t{\r\n\t\t\tStartMember(String.Concat(\"M:\", clrName));\r\n\t\t\tProcessPhpDoc(comment);\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void WriteType(string/*!*/ clrName, string/*!*/ comment)\r\n\t\t{\r\n\t\t\tStartMember(String.Concat(\"T:\", clrName));\r\n\t\t\tProcessPhpDoc(comment);\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void WriteMethod(string/*!*/ clrName, string/*!*/ comment)\r\n\t\t{\r\n\t\t\tStartMember(String.Concat(\"M:\", clrName));\r\n\t\t\tProcessPhpDoc(comment);\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void WriteField(string/*!*/ clrName, string/*!*/ comment)\r\n\t\t{\r\n\t\t\tStartMember(String.Concat(\"F:\", clrName));\r\n\t\t\tProcessPhpDoc(comment);\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void WriteClassConstant(string/*!*/ clrName, string/*!*/ comment)\r\n\t\t{\r\n\t\t\tStartMember(String.Concat(\"F:\", clrName));\r\n\t\t\tProcessPhpDoc(comment);\r\n\t\t\twriter.WriteEndElement();\r\n\t\t}\r\n\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\twriter.WriteEndElement(); // </members>\r\n\t\t\twriter.WriteEndElement(); // </doc>\r\n\t\t\twriter.WriteEndDocument();\r\n\r\n\t\t\twriter.Close();\r\n\t\t}\r\n\r\n\t\t#region PHPdoc Parsing\r\n\r\n\t\tprivate void ReadEoln(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\tif (str[pos] == '\\n') pos++;\r\n\t\t\telse if (str[pos] == '\\r' && str[pos + 1] == '\\n') pos += 2;\r\n\t\t}\r\n\r\n\t\tprivate void ReadSpaces(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\twhile (Char.IsWhiteSpace(str, pos) && str[pos] != '\\n' && str[pos] != '\\r') pos++;\r\n\t\t}\r\n\r\n\t\tprivate string ReadWord(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\tReadSpaces(str, ref pos);\r\n\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length - 2 && !Char.IsWhiteSpace(str, pos)) pos++;\r\n\t\t\treturn str.Substring(begin, pos - begin);\r\n\t\t}\r\n\r\n\t\tprivate string ReadWord(string/*!*/ str, char first, ref int pos)\r\n\t\t{\r\n\t\t\tReadSpaces(str, ref pos);\r\n\r\n\t\t\tif (str[pos] != first) return null;\r\n\r\n\t\t\tpos++;\r\n\t\t\tint begin = pos;\r\n\t\t\twhile (pos < str.Length - 2 && !Char.IsWhiteSpace(str, pos)) pos++;\r\n\t\t\treturn str.Substring(begin, pos - begin);\r\n\t\t}\r\n\r\n\t\tprivate string ReadLineToken(string/*!*/ str, ref int pos, out bool wholeLine)\r\n\t\t{\r\n\t\t\t// eats initial whitespace and optional '*':\r\n\t\t\tReadSpaces(str, ref pos);\r\n\t\t\tif (str[pos] == '*') pos++;\r\n\t\t\tReadSpaces(str, ref pos);\r\n\r\n\t\t\t// '@' at the beginning of the line means tag:\r\n\t\t\tif (str[pos] == '@')\r\n\t\t\t{\r\n\t\t\t\twholeLine = false;\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\r\n\t\t\t// reads non-whitespace to substring [begin,end] and all whitespace up to the end of the line:\r\n\t\t\tint begin = pos;\r\n\t\t\tint end = pos - 1;\r\n\t\t\twhile (pos < str.Length - 2 && str[pos] != '\\n' && str[pos] != '\\r')\r\n\t\t\t{\r\n\t\t\t\t// found inlined tag:\r\n\t\t\t\t// TODO:\r\n\t\t\t\t//        if (str[pos]=='{' && str[pos+1]=='@')\r\n\t\t\t\t//        {\r\n\t\t\t\t//          wholeLine = false;\r\n\t\t\t\t//          return str.Substring(begin,end - begin + 1);\r\n\t\t\t\t//        }  \r\n\r\n\t\t\t\tif (!Char.IsWhiteSpace(str[pos])) end = pos;\r\n\t\t\t\tpos++;\r\n\t\t\t}\r\n\r\n\t\t\tReadEoln(str, ref pos);\r\n\t\t\twholeLine = true;\r\n\r\n\t\t\tDebug.Assert(begin < str.Length);\r\n\t\t\treturn str.Substring(begin, end - begin + 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads and writes until empty line or tag appear. Processes inlined tags as well.\r\n\t\t/// </summary>\r\n\t\tprivate void ProcessText(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\tbool first_text = true;\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tbool whole_line;\r\n\t\t\t\tstring line = ReadLineToken(str, ref pos, out whole_line);\r\n\t\t\t\tif (whole_line)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (line == \"\") break;\r\n\t\t\t\t\tif (!first_text) writer.WriteWhitespace(\" \"); else first_text = false;\r\n\t\t\t\t\twriter.WriteRaw(line);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (str[pos] == '@') break;\r\n\t\t\t\t\tProcessInlineTag(str, ref pos);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ProcessTag(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\tDebug.Assert(str[pos] == '@');\r\n\r\n\t\t\tint begin = pos;\r\n\t\t\tstring tag = ReadWord(str, '@', ref pos);\r\n\t\t\tDebug.Assert(tag != null);\r\n\r\n\t\t\tswitch (tag)\r\n\t\t\t{\r\n\t\t\t\tcase \"param\":  \t// @param type $varname description\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twriter.WriteStartElement(\"param\");\r\n\r\n\t\t\t\t\t\tstring type = ReadWord(str, ref pos); // TODO: check validity \r\n\t\t\t\t\t\tstring name = ReadWord(str, '$', ref pos); // TODO: check validity\r\n\r\n\t\t\t\t\t\tif (name == null) name = \"\"; // TODO\r\n\r\n\t\t\t\t\t\twriter.WriteAttributeString(\"name\", name);\r\n\t\t\t\t\t\twriter.WriteAttributeString(\"type\", type);\r\n\r\n\t\t\t\t\t\tProcessText(str, ref pos);\r\n\t\t\t\t\t\twriter.WriteEndElement();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase \"return\": \t// @return type description\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twriter.WriteStartElement(\"returns\");\r\n\r\n\t\t\t\t\t\tstring type = ReadWord(str, ref pos); // TODO: check validity \r\n\t\t\t\t\t\tProcessText(str, ref pos);\r\n\r\n\t\t\t\t\t\twriter.WriteEndElement();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase \"access\": \t// @access [public|protected|private]\r\n\t\t\t\t\t// TODO check with real access\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"see\":\t\t      // @see element(,element)*\r\n\t\t\t\tcase \"link\":        // @link url\r\n\t\t\t\t\t// TODO\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"version\":\t    // @version text\r\n\t\t\t\tcase \"copyright\":\t  // @copyright text\r\n\t\t\t\tcase \"author\": \t    // @author text\r\n\t\t\t\tcase \"since\":  \t    // @since text\r\n\t\t\t\tcase \"deprecated\":\t// @deprecated text\r\n\t\t\t\tcase \"deprec\":\t    // @deprec text\r\n\t\t\t\tcase \"magic\":\t      // @magic text\r\n\t\t\t\tcase \"todo\":\t\t    // @todo text\r\n\t\t\t\tcase \"exception\":\t  // @exception text\r\n\t\t\t\tcase \"throws\":  \t  // @throws text\r\n\t\t\t\tcase \"var\":\t\t      // @var type\r\n\t\t\t\tcase \"package\":\t    // @package text\r\n\t\t\t\tcase \"subpackage\":\t// @subpackage text\r\n\t\t\t\t\twriter.WriteStartElement(tag);\r\n\t\t\t\t\tProcessText(str, ref pos);\r\n\t\t\t\t\twriter.WriteEndElement();\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:   // unknown tag: (warning?)\r\n\t\t\t\t\twriter.WriteStartElement(tag);\r\n\t\t\t\t\tProcessText(str, ref pos);\r\n\t\t\t\t\twriter.WriteEndElement();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ProcessInlineTag(string/*!*/ str, ref int pos)\r\n\t\t{\r\n\t\t\tDebug.Assert(str[pos] == '{' && str[pos + 1] == '@');\r\n\r\n\t\t\tpos++;\r\n\r\n\t\t\tswitch (ReadWord(str, '@', ref pos))\r\n\t\t\t{\r\n\t\t\t\tcase \"link\":\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"see\":\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ProcessPhpDoc(string/*!*/ comment)\r\n\t\t{\r\n\t\t\tconst string start_mark = \"/**\";\r\n\t\t\tconst string end_mark = \"*/\";\r\n\t\t\tconst int state_init = -1;\r\n\t\t\tconst int state_summary = 0;\r\n\t\t\tconst int state_remarks = 1;\r\n\t\t\tconst int state_tags = 2;\r\n\r\n\t\t\tDebug.Assert(comment != null && comment.Length >= start_mark.Length + end_mark.Length);\r\n\t\t\tDebug.Assert(comment.StartsWith(start_mark) && comment.EndsWith(end_mark));\r\n\r\n\t\t\tint pos = start_mark.Length;\r\n\t\t\tint state = state_init;\r\n\t\t\tint last_state = state_init;\r\n\t\t\tbool tag_open = false;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tbool whole_line;\r\n\t\t\t\tstring line = ReadLineToken(comment, ref pos, out whole_line);\r\n\r\n\t\t\t\tif (whole_line)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (state)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase state_init:\r\n\t\t\t\t\t\t\tif (line != \"\")\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\t\t\tstate = state_summary;\r\n\t\t\t\t\t\t\t\tgoto case state_summary;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase state_summary:\r\n\t\t\t\t\t\t\tif (line != \"\")\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (last_state != state_summary)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (tag_open) writer.WriteEndElement();\r\n\t\t\t\t\t\t\t\t\twriter.WriteStartElement(\"summary\");\r\n\t\t\t\t\t\t\t\t\ttag_open = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\twriter.WriteWhitespace(\" \");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twriter.WriteRaw(line);\r\n\r\n\t\t\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\t\t\tstate = state_summary;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// switch to remarks:\r\n\t\t\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\t\t\tstate = state_remarks;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase state_remarks:\r\n\t\t\t\t\t\t\tif (line != \"\")\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (last_state != state_remarks)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (tag_open) writer.WriteEndElement();\r\n\t\t\t\t\t\t\t\t\twriter.WriteStartElement(\"remarks\");\r\n\t\t\t\t\t\t\t\t\ttag_open = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\twriter.WriteWhitespace(\" \");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twriter.WriteRaw(line);\r\n\r\n\t\t\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\t\t\tstate = state_summary;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase state_tags:\r\n\t\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\t\tstate = state_remarks;\r\n\t\t\t\t\t\t\tgoto case state_remarks;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (comment[pos] == '@')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// close current summary/remarks:\r\n\t\t\t\t\t\tif (tag_open)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twriter.WriteEndElement();\r\n\t\t\t\t\t\t\ttag_open = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// switch to tags:\r\n\t\t\t\t\t\tlast_state = state;\r\n\t\t\t\t\t\tstate = state_tags;\r\n\r\n\t\t\t\t\t\tProcessTag(comment, ref pos);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tProcessInlineTag(comment, ref pos);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\twhile (pos < comment.Length - 2);\r\n\r\n\t\t\t// close any open tag:\r\n\t\t\tif (tag_open) writer.WriteEndElement();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/FunctionBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// Emits PHP functions implementations.\r\n\t/// </summary>\r\n\tinternal class FunctionBuilder\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// An index of \"this\" argument in PHP user instance methods. \r\n\t\t/// </summary>\r\n\t\tpublic const int ArgThis = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"context\" argument in PHP user functions.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgContext = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"context\" argument in PHP user instance methods.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgContextInstance = 1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"context\" argument in PHP user static methods.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgContextStatic = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"stack\" argument in arg-less static method stubs.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgStackStatic = 1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"stack\" argument in PHP user instance method stubs.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgStackInstance = 1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A stack place (used by arg-less overload emitter).\r\n\t\t/// </summary>\r\n\t\tprivate IndexedPlace stack = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ILEmitter.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek and Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\n/*\r\n\r\n  Designed and implemented by Ladislav Prosek and Tomas Matousek.\r\n\r\n*/\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// <see cref=\"ILGenerator\"/> wrapper providing many useful services concerning MSIL emission.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\" instance=\"false\"/>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ILEmitter\r\n\t{\r\n\t\tpublic enum Containers\r\n\t\t{\r\n\t\t\tMethodBuilder,\r\n\t\t\tConstructorBuilder,\r\n\t\t\tDynamicMethod\r\n\t\t}\r\n\r\n\t\tpublic Containers Container { get { return container; } }\r\n\t\tprivate Containers container;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents a distinguished position in the Microsoft intermediate language (MSIL) stream where a &quot;feature&quot;\r\n\t\t/// has been marked.\r\n\t\t/// </summary>\r\n\t\tprivate sealed class FeaturePoint\r\n\t\t{\r\n\t\t\t#region Fields and properties\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Determines whether the Microsoft intermediate language (MSIL) stream's current position is unconditionally\r\n\t\t\t/// preceded by the position where this <see cref=\"FeaturePoint\"/> was defined.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks><seealso cref=\"ILEmitter.IsFeatureControlFlowPrecedent\"/></remarks>\r\n\t\t\tpublic bool IsControlFlowPrecedent\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// if there were no unresolved branch targets when this feature point was marked, then the marking\r\n\t\t\t\t\t// position was \"unskippable\" so no matter what happened after the feature point, the 'unconditionally\r\n\t\t\t\t\t// precedes' condition is satisfied\r\n\t\t\t\t\tif (unresolvedBranches.Count == 0) return true;\r\n\r\n\t\t\t\t\t// if a branch target was resolved (marked) - one that was unresolved when this feature point was marked -\r\n\t\t\t\t\t// then we have a possible forward branch pointing between marking position and current position so\r\n\t\t\t\t\t// the 'unconditionally precedes' condition is not satisfied\r\n\t\t\t\t\tif (forwardBranchResolved) return false;\r\n\r\n\t\t\t\t\t// finally check for possible backward branches\r\n\t\t\t\t\treturn (branchTargets == null || branchTargets.Count == 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Collection of <see cref=\"Label\"/>s marked and not forgotten since this <see cref=\"FeaturePoint\"/> was created\r\n\t\t\t/// (keyed by <see cref=\"Label\"/>s, values unused).\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks><seealso cref=\"MarkLabel\"/></remarks>\r\n\t\t\tprivate Dictionary<Label, object> branchTargets;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Collection of <see cref=\"Label\"/>s - targets of branch instructions that had been emitted when this\r\n\t\t\t/// <see cref=\"FeaturePoint\"/> was marked - that had not been marked at that time.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// This is a snapshot of <see cref=\"ILEmitter.unresolvedBranches\"/> at the time this <see cref=\"FeaturePoint\"/>\r\n\t\t\t/// was marked.\r\n\t\t\t/// <seealso cref=\"Emit(OpCode,Label)\"/><seealso cref=\"MarkLabel\"/>\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate Dictionary<Label, object> unresolvedBranches;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>null</B> if a branch target was resolved (marked) - one that was unresolved when this <see cref=\"FeaturePoint\"/>\r\n\t\t\t/// - was marked.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool forwardBranchResolved;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"FeaturePoint\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic FeaturePoint(Dictionary<Label, object> unresolvedBranches)\r\n\t\t\t{\r\n\t\t\t\tthis.unresolvedBranches = new Dictionary<Label, object>(unresolvedBranches);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region MarkLabel, ForgetLabel\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Notifies this <see cref=\"FeaturePoint\"/> that a <see cref=\"Label\"/> has been marked.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"loc\">The label.</param>\r\n\t\t\t/// <remarks><seealso cref=\"ILEmitter.MarkLabel\"/></remarks>\r\n\t\t\tpublic void MarkLabel(Label loc)\r\n\t\t\t{\r\n\t\t\t\tif (unresolvedBranches.ContainsKey(loc)) forwardBranchResolved = true;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (branchTargets == null) branchTargets = new Dictionary<Label, object>();\r\n\t\t\t\t\tbranchTargets.Add(loc, null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Notifies this <see cref=\"FeaturePoint\"/> that a <see cref=\"Label\"/> has been forgotten.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"loc\">The label.</param>\r\n\t\t\t/// <remarks><seealso cref=\"ILEmitter.ForgetLabel\"/></remarks>\r\n\t\t\tpublic void ForgetLabel(Label loc)\r\n\t\t\t{\r\n\t\t\t\tif (branchTargets != null) branchTargets.Remove(loc);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#region Fields and properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The <see cref=\"ILGenerator\"/> wrapped by this instance;\r\n\t\t/// </summary>\r\n\t\tprivate ILGenerator/*!*/ il;\r\n\r\n\t\t/// <summary>\r\n\t\t/// GetUserEntryPoint whose body is being emitted by this emitter.\r\n\t\t/// </summary>\r\n\t\tpublic ConstructorBuilder ConstructorBuilder { get { return method as ConstructorBuilder; } }\r\n\t\tpublic MethodBuilder MethodBuilder { get { return method as MethodBuilder; } }\r\n\t\tpublic DynamicMethod DynamicMethod { get { return method as DynamicMethod; } }\r\n\t\tpublic MethodBase MethodBase { get { return method; } }\r\n\t\tprivate MethodBase/*!*/ method;\r\n\r\n\t\tpublic TypeBuilder TypeBuilder { get { return (TypeBuilder)method.DeclaringType; } }\r\n\r\n        /// <summary>\r\n        /// Gets the current offset, in bytes, in the Microsoft intermediate language (MSIL) stream\r\n        /// that is being emitted by the System.Reflection.Emit.ILGenerator.\r\n        /// Returns the offset in the MSIL stream at which the next instruction will be emitted.\r\n        /// </summary>\r\n        public int ILOffset { get { return il.ILOffset; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The last <see cref=\"OpCode\"/> emitted by this <see cref=\"ILEmitter\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate OpCode lastEmittedOpCode;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if a <see cref=\"Label\"/> was marked at the current position, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tprivate bool isPositionLabeled;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collection of temporary local variables available for reuse (lazy init).\r\n\t\t/// </summary>\r\n\t\tprivate LinkedList<LocalBuilder> temporaryLocals;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collection of <see cref=\"FeaturePoint\"/>s marked so far (keyed by <see cref=\"Object\"/>s, lazy init).\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"MarkFeature\"/></remarks>\r\n\t\tprivate Dictionary<object, FeaturePoint> featurePoints;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collection of <see cref=\"Label\"/>s - targets of branch instructions emitted so far - that have not been\r\n\t\t/// marked yet.\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"Emit(OpCode,Label)\"/><seealso cref=\"MarkLabel\"/></remarks>\r\n\t\tprivate Dictionary<Label, object> unresolvedBranches;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collection of <see cref=\"Label\"/>s marked and not forgotten so far (keyed by <see cref=\"Label\"/>s, values unused).\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"MarkLabel\"/></remarks>\r\n\t\tprivate Dictionary<Label, object> branchTargets;\r\n\r\n#if DEBUG\r\n\t\t/// <summary>\r\n\t\t/// Collection of <see cref=\"Label\"/>s forgotten so far (keyed by <see cref=\"Label\"/>s, values unused).\r\n\t\t/// </summary>\r\n\t\tprivate Dictionary<Label, object> forgottenTargets;\r\n#endif\r\n\r\n\t\tprivate int uniqueIndex = 0;\r\n\r\n\t\tpublic int GetNextUniqueIndex()\r\n\t\t{\r\n\t\t\treturn ++uniqueIndex;\r\n\t\t}\r\n\r\n\t\tpublic int GetCurrentUniqueIndex()\r\n\t\t{\r\n\t\t\treturn uniqueIndex;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the last <see cref=\"OpCode\"/> emitted by this <see cref=\"ILEmitter\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic OpCode LastEmittedOpCode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return lastEmittedOpCode; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if a <see cref=\"Label\"/> was marked at the current position, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsPositionLabeled\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return isPositionLabeled; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"ILEmitter\"/> by wrapping an <see cref=\"ILGenerator\"/>\r\n\t\t/// </summary>\r\n\t\tprivate ILEmitter(ILGenerator/*!*/ il, Containers container)\r\n\t\t{\r\n\t\t\tthis.il = il;\r\n\t\t\tthis.container = container;\r\n\t\t\tthis.branchTargets = new Dictionary<Label, object>();\r\n\t\t\tthis.unresolvedBranches = new Dictionary<Label, object>();\r\n\r\n#if DEBUG\r\n\t\t\tforgottenTargets = new Dictionary<Label, object>();\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"ILEmitter\"/> for a given <see cref=\"MethodBuilder\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"methodBuilder\">The <see cref=\"MethodBuilder\"/> to emit to.</param>\r\n\t\tpublic ILEmitter(MethodBuilder/*!*/ methodBuilder)\r\n\t\t\t: this(methodBuilder.GetILGenerator(), Containers.MethodBuilder)\r\n\t\t{\r\n\t\t\tthis.method = methodBuilder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"ILEmitter\"/> for a given <see cref=\"ConstructorBuilder\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"constructorBuilder\">The <see cref=\"ConstructorBuilder\"/> to emit to.</param>\r\n\t\tpublic ILEmitter(ConstructorBuilder/*!*/ constructorBuilder)\r\n\t\t\t: this(constructorBuilder.GetILGenerator(), Containers.ConstructorBuilder)\r\n\t\t{\r\n\t\t\tthis.method = constructorBuilder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"ILEmitter\"/> for a given <see cref=\"DynamicMethod\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dynamicMethod\">The <see cref=\"DynamicMethod\"/> to emit to.</param>\r\n\t\tpublic ILEmitter(DynamicMethod/*!*/ dynamicMethod)\r\n\t\t\t: this(dynamicMethod.GetILGenerator(), Containers.DynamicMethod)\r\n\t\t{\r\n\t\t\tthis.method = dynamicMethod;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"ILEmitter\"/> for a given <see cref=\"MethodBuilder\"/> or <see cref=\"DynamicMethod\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The <see cref=\"MethodBuilder\"/> or <see cref=\"DynamicMethod\"/> to emit to.</param>\r\n\t\tpublic ILEmitter(MethodInfo/*!*/ method)\r\n\t\t\t: this(\r\n\t\t\t\t(method is MethodBuilder) ? ((MethodBuilder)method).GetILGenerator() : ((DynamicMethod)method).GetILGenerator(),\r\n\t\t\t\t(method is MethodBuilder) ? Containers.MethodBuilder : Containers.DynamicMethod)\r\n\t\t{\r\n\t\t\tthis.method = method;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Pass-thru methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins a catch block.\r\n\t\t/// </summary>\r\n\t\tpublic void BeginCatchBlock(Type exceptionType)\r\n\t\t{ il.BeginCatchBlock(exceptionType); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins an exception block for a filtered exception.\r\n\t\t/// </summary>\r\n\t\tpublic void BeginExceptFilterBlock()\r\n\t\t{ il.BeginExceptFilterBlock(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins an exception block for a non-filtered exception.\r\n\t\t/// </summary>\r\n\t\tpublic Label BeginExceptionBlock()\r\n\t\t{ return il.BeginExceptionBlock(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins an exception fault block in the Microsoft intermediate language (MSIL) stream.\r\n\t\t/// </summary>\r\n\t\tpublic void BeginFaultBlock()\r\n\t\t{ il.BeginFaultBlock(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins a finally block in the Microsoft intermediate language (MSIL) instruction stream.\r\n\t\t/// </summary>\r\n\t\tpublic void BeginFinallyBlock()\r\n\t\t{ il.BeginFinallyBlock(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits an instruction to throw an exception.\r\n\t\t/// </summary>\r\n\t\tpublic void ThrowException(Type type)\r\n\t\t{ il.ThrowException(type); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Begins a lexical scope.\r\n\t\t/// </summary>\r\n\t\tpublic void BeginScope()\r\n\t\t{ il.BeginScope(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declares a local variable.\r\n\t\t/// </summary>\r\n\t\tpublic LocalBuilder DeclareLocal(Type localType)\r\n\t\t{ return il.DeclareLocal(localType); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declares a new label.\r\n\t\t/// </summary>\r\n\t\tpublic Label DefineLabel()\r\n\t\t{ return il.DefineLabel(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends an exception block.\r\n\t\t/// </summary>\r\n\t\tpublic void EndExceptionBlock()\r\n\t\t{ il.EndExceptionBlock(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends a lexical scope.\r\n\t\t/// </summary>\r\n\t\tpublic void EndScope()\r\n\t\t{ il.EndScope(); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks a sequence point in the Microsoft intermediate language (MSIL) stream.\r\n\t\t/// </summary>\r\n\t\tpublic void MarkSequencePoint(ISymbolDocumentWriter document, int startLine, int startColumn, int endLine,\r\n\t\t\tint endColumn)\r\n\t\t{ il.MarkSequencePoint(document, startLine, startColumn, endLine, endColumn); }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Specifies the namespace to be used in evaluating locals and watches for the current active lexical scope.\r\n\t\t/// </summary>\r\n\t\tpublic void UsingNamespace(string usingNamespace)\r\n\t\t{ il.UsingNamespace(usingNamespace); }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emits\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, null)) il.Emit(opcode);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and character argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, byte arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and metadata token for the specified constructor onto the Microsoft\r\n\t\t/// intermediate language (MSIL) stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, ConstructorInfo con)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, con)) il.Emit(opcode, con);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and numerical argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, double arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and metadata token for the specified field onto the Microsoft intermediate\r\n\t\t/// language (MSIL) stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, FieldInfo field)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, field)) il.Emit(opcode, field);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and numerical argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, short arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and numerical argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, int arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and numerical argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, long arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream and leaves space\r\n\t\t/// to include a label when fixes are done.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, Label label)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, label)) il.Emit(opcode, label);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream and leaves space\r\n\t\t/// to include a label when fixes are done.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, Label[] labels)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, labels)) il.Emit(opcode, labels);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream followed by the\r\n\t\t/// index of the given local variable.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, LocalBuilder local)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, local)) il.Emit(opcode, local);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream followed by the\r\n\t\t/// metadata token for the given method.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, MethodInfo meth)\r\n\t\t{\r\n            //Debug.Assert(opcode != OpCodes.Callvirt || meth.IsVirtual, \"Non-Virtual method called as virtual!\");\r\n            if (opcode == OpCodes.Callvirt && !meth.IsVirtual)\r\n                opcode = OpCodes.Call;\r\n            \r\n\t\t\tif (InterceptEmit(opcode, meth)) il.Emit(opcode, meth);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and character argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, sbyte arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and a signature token onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, SignatureHelper signature)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, signature)) il.Emit(opcode, signature);\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction and numerical argument onto the Microsoft intermediate language (MSIL)\r\n\t\t/// stream of instructions.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, float arg)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, arg)) il.Emit(opcode, arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream followed by the\r\n\t\t/// metadata token for the given string.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, string str)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, str)) il.Emit(opcode, str);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the specified instruction onto the Microsoft intermediate language (MSIL) stream followed by the\r\n\t\t/// metadata token for the given type.\r\n\t\t/// </summary>\r\n\t\tpublic void Emit(OpCode opcode, Type cls)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, cls)) il.Emit(opcode, cls);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts a call or callvirt instruction onto the Microsoft intermediate language (MSIL) stream.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[] optionalParameterTypes)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, methodInfo)) il.EmitCall(opcode, methodInfo, optionalParameterTypes);\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Puts a Calli instruction onto the Microsoft intermediate language (MSIL) stream, specifying an unmanaged\r\n\t\t/// calling convention for the indirect call.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv, Type returnType, Type[] parameterTypes)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, null)) il.EmitCalli(opcode, unmanagedCallConv, returnType, parameterTypes);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts a Calli instruction onto the Microsoft intermediate language (MSIL) stream, specifying a managed calling\r\n\t\t/// convention for the indirect call.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitCalli(OpCode opcode, CallingConventions callingConvention, Type returnType, Type[] parameterTypes,\r\n\t\t\tType[] optionalParameterTypes)\r\n\t\t{\r\n\t\t\tif (InterceptEmit(opcode, null)) il.EmitCalli(opcode, callingConvention, returnType, parameterTypes,\r\n\t\t\t\t\t\t\t\t\t\t\t\t optionalParameterTypes);\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region MarkLabel, ForgetLabel, InterceptEmit\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks the Microsoft intermediate language (MSIL) stream's current position with the given label.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"loc\">The label for which to set an index.</param>\r\n\t\t/// <param name=\"forget\"><B>true</B> if the label should be forgotten right away, <B>false</B> otherwise.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Intercepting the <see cref=\"ILGenerator.MarkLabel\"/> call is important for control flow analysis.\r\n\t\t/// </remarks>\r\n\t\tpublic void MarkLabel(Label loc, bool forget)\r\n\t\t{\r\n\t\t\tisPositionLabeled = true;\r\n\t\t\til.MarkLabel(loc);\r\n\r\n\t\t\tif (!forget) branchTargets.Add(loc, null);\r\n\t\t\tunresolvedBranches.Remove(loc);\r\n\r\n\t\t\tif (featurePoints != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (FeaturePoint point in featurePoints.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tpoint.MarkLabel(loc);\r\n\t\t\t\t\tif (forget) point.ForgetLabel(loc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n#if DEBUG\r\n\t\t\tif (forget) forgottenTargets[loc] = null;\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks the Microsoft intermediate language (MSIL) stream's current position with the given label.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"loc\">The label for which to set an index.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Intercepting the <see cref=\"ILGenerator.MarkLabel\"/> call is important for control flow analysis.\r\n\t\t/// </remarks>\r\n\t\tpublic void MarkLabel(Label loc)\r\n\t\t{\r\n\t\t\tMarkLabel(loc, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notifies this <see cref=\"ILEmitter\"/> that there will be no more branches to the given label.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"loc\">The label that is surely not going to be the target of any consequent branch instruction.\r\n\t\t/// </param>\r\n\t\tpublic void ForgetLabel(Label loc)\r\n\t\t{\r\n\t\t\tbranchTargets.Remove(loc);\r\n\r\n\t\t\tif (featurePoints != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (FeaturePoint point in featurePoints.Values) point.ForgetLabel(loc);\r\n\t\t\t}\r\n\r\n#if DEBUG\r\n\t\t\tforgottenTargets[loc] = null;\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Intercepts opcode emission.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"opcode\">The <see cref=\"OpCode\"/> being emitted.</param>\r\n\t\t/// <param name=\"arg\">The operand.</param>\r\n\t\t/// <returns><B>null</B> if the <paramref name=\"opcode\"/> should be emitted, <B>false</B> otherwise.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// This method is consulted before emitting any IL instruction.\r\n\t\t/// </remarks>\r\n\t\tprivate bool InterceptEmit(OpCode opcode, object arg)\r\n\t\t{\r\n\t\t\t//Debug.WriteLine(\"{0} {1}\", opcode.ToString(), arg == null ? String.Empty : arg.ToString());\r\n\r\n\t\t\tlastEmittedOpCode = opcode;\r\n\t\t\tisPositionLabeled = false;\r\n\r\n\t\t\tif (opcode.FlowControl == FlowControl.Branch || opcode.FlowControl == FlowControl.Cond_Branch)\r\n\t\t\t{\r\n\t\t\t\t// the argument is either Label or an array of Labels\r\n\t\t\t\tif (arg is Label) InterceptBranch(opcode, (Label)arg);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tLabel[] targets = (Label[])arg;\r\n\t\t\t\t\tfor (int i = 0; i < targets.Length; i++) InterceptBranch(opcode, targets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate void InterceptBranch(OpCode opcode, Label target)\r\n\t\t{\r\n#if DEBUG\r\n\t\t\tDebug.Assert(!forgottenTargets.ContainsKey(target), \"Attempt to branch to a forgotten label. \" +\r\n\t\t\t\t\"Invalid control-flow hint was given.\");\r\n#endif\r\n\r\n\t\t\t// if the branch target is unknown, remember it\r\n\t\t\tif (!branchTargets.ContainsKey(target)) unresolvedBranches[target] = null;\r\n\r\n\t\t\tif (OpCodes.Leave.Equals(opcode) || OpCodes.Leave_S.Equals(opcode))\r\n\t\t\t{\r\n\t\t\t\t// we do not do detailed exception handling control flow analysis now\r\n\t\t\t\tif (featurePoints != null) featurePoints.Clear();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region MarkFeature, IsFeatureControlFlowPrecedent\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks the Microsoft intermediate language (MSIL) stream's current position as a distinguished control flow point\r\n\t\t/// related to a &quot;feature&quot;.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"featureId\">An arbitrary non-<B>null</B> reference.</param>\r\n\t\t/// <remarks><seealso cref=\"IsFeatureControlFlowPrecedent\"/></remarks>\r\n\t\tpublic void MarkFeature(object featureId)\r\n\t\t{\r\n\t\t\tif (featureId == null) throw new ArgumentNullException(\"featureId\");\r\n\r\n\t\t\tif (featurePoints == null) featurePoints = new Dictionary<object, FeaturePoint>();\r\n\t\t\tfeaturePoints[featureId] = new FeaturePoint(unresolvedBranches);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether the Microsoft intermediate language (MSIL) stream's current position is unconditionally\r\n\t\t/// preceded by a previously marked &quot;feature&quot;.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"featureId\">The feature ID passed earlier to <see cref=\"MarkFeature\"/> (non-<B>null</B>).</param>\r\n\t\t/// <returns><B>null</B> if current position surely uncoditionally follows the position identified by\r\n\t\t/// <paramref name=\"featureId\"/>, <B>false</B> otherwise.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// This method returns <B>null</B> if it is possible to prove that whenever IL execution reaches current position,\r\n\t\t/// it has already reached the position marked by <see cref=\"MarkFeature\"/>(<paramref name=\"featureId\"/>).\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// These are the sufficient conditions used by this implementation (inclusive or):\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <item>All branch instructions before the feature point have their targets before the feature point, and there\r\n\t\t/// is no <see cref=\"OpCodes.Leave\"/> instruction between the feature point and current position.</item>\r\n\t\t/// <item>There is no branch target between the feature point and current position that is referenced before the\r\n\t\t/// feature point or left open (unforgotten) at current positionn and there is no <see cref=\"OpCodes.Leave\"/>\r\n\t\t/// instruction between the feature point and current position.</item>\r\n\t\t/// </list>\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tpublic bool IsFeatureControlFlowPrecedent(object featureId)\r\n\t\t{\r\n\t\t\tif (featureId == null) throw new ArgumentNullException(\"featureId\");\r\n\r\n\t\t\tif (featurePoints == null) return false;\r\n\r\n\t\t\tFeaturePoint point;\r\n\t\t\treturn (featurePoints.TryGetValue(featureId, out point) && point.IsControlFlowPrecedent);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetTemporaryLocal\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"LocalBuilder\"/> of a temporary local variable of a specified <see cref=\"Type\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The requested <see cref=\"Type\"/> of the local.</param>\r\n\t\t/// <param name=\"immediateReturn\"><B>True</B> to immediately return the local builder to the pool of locals\r\n\t\t/// available for reuse (no need to call <see cref=\"ReturnTemporaryLocal\"/>).</param>\r\n\t\t/// <returns>The <see cref=\"LocalBuilder\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If a <see cref=\"LocalBuilder\"/> of the given <see cref=\"Type\"/> has already been declared and returned\r\n\t\t/// to the pool, this local is reused. Otherwise, a new local is declared. Use this method to obtain a\r\n\t\t/// short-lived temporary local. If <paramref name=\"immediateReturn\"/> is <B>false</B>, return the local\r\n\t\t/// to the pool of locals available for reuse by calling <see cref=\"ReturnTemporaryLocal\"/>.\r\n\t\t/// </remarks>\r\n\t\tpublic LocalBuilder/*!*/ GetTemporaryLocal(Type/*!*/ type, bool immediateReturn)\r\n\t\t{\r\n\t\t\tif (temporaryLocals != null)\r\n\t\t\t\tfor (LinkedListNode<LocalBuilder> node = temporaryLocals.First; node != null; node = node.Next)\r\n\t\t\t\t\tif (node.Value.LocalType == type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!immediateReturn) temporaryLocals.Remove(node);\r\n\t\t\t\t\t\treturn node.Value;\r\n\t\t\t\t\t}\r\n\t\t\t\r\n\t\t\tLocalBuilder builder = DeclareLocal(type);\r\n\t\t\tif (immediateReturn) ReturnTemporaryLocal(builder);\r\n\r\n\t\t\treturn builder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"LocalBuilder\"/> of a temporary local variable of a specified <see cref=\"Type\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The requested <see cref=\"Type\"/> of the local.</param>\r\n\t\t/// <returns>The <see cref=\"LocalBuilder\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If a <see cref=\"LocalBuilder\"/> of the given <see cref=\"Type\"/> has already been declared and returned\r\n\t\t/// to the pool, this local is reused. Otherwise, a new local is declared. Use this method to obtain a\r\n\t\t/// short-lived temporary local. Return the local to the pool of locals available for reuse by calling\r\n\t\t/// <see cref=\"ReturnTemporaryLocal\"/>.\r\n\t\t/// </remarks>\r\n\t\tpublic LocalBuilder/*!*/ GetTemporaryLocal(Type/*!*/ type)\r\n\t\t{\r\n\t\t\treturn GetTemporaryLocal(type, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"LocalBuilder\"/> previously obtained from <see cref=\"GetTemporaryLocal\"/> to the\r\n\t\t/// pool of locals available for reuse.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"builder\">The <see cref=\"LocalBuilder\"/> to return to the pool.</param>\r\n\t\tpublic void ReturnTemporaryLocal(LocalBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\tDebug.Assert(builder != null);\r\n\r\n\t\t\tif (temporaryLocals == null) temporaryLocals = new LinkedList<LocalBuilder>();\r\n\r\n\t\t\t// try to do it LIFO \r\n\t\t\ttemporaryLocals.AddFirst(builder);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Patterns\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>ldc_i4</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The constant to be loaded.</param>\r\n\t\tpublic void LdcI4(int i)\r\n\t\t{\r\n\t\t\tswitch (i)\r\n\t\t\t{\r\n\t\t\t\tcase -1: Emit(OpCodes.Ldc_I4_M1); break;\r\n\t\t\t\tcase 0: Emit(OpCodes.Ldc_I4_0); break;\r\n\t\t\t\tcase 1: Emit(OpCodes.Ldc_I4_1); break;\r\n\t\t\t\tcase 2: Emit(OpCodes.Ldc_I4_2); break;\r\n\t\t\t\tcase 3: Emit(OpCodes.Ldc_I4_3); break;\r\n\t\t\t\tcase 4: Emit(OpCodes.Ldc_I4_4); break;\r\n\t\t\t\tcase 5: Emit(OpCodes.Ldc_I4_5); break;\r\n\t\t\t\tcase 6: Emit(OpCodes.Ldc_I4_6); break;\r\n\t\t\t\tcase 7: Emit(OpCodes.Ldc_I4_7); break;\r\n\t\t\t\tcase 8: Emit(OpCodes.Ldc_I4_8); break;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (i >= SByte.MinValue && i <= SByte.MaxValue)\r\n\t\t\t\t\t\tEmit(OpCodes.Ldc_I4_S, (sbyte)i);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tEmit(OpCodes.Ldc_I4, i);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of loading 64bit integer on evaluation stack.\r\n\t\t/// </summary>\r\n\t\tpublic void LdcI8(long i)\r\n\t\t{\r\n\t\t\tif (i >= int.MinValue && i <= int.MaxValue)\r\n\t\t\t{\r\n\t\t\t\tLdcI4((int)i);\r\n\t\t\t\tEmit(OpCodes.Conv_I8);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tEmit(OpCodes.Ldc_I8, i);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of <c>ldloc</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of a local variable to be loaded.</param>\r\n\t\tpublic void Ldloc(int i)\r\n\t\t{\r\n\t\t\tswitch (i)\r\n\t\t\t{\r\n\t\t\t\tcase 0: Emit(OpCodes.Ldloc_0); break;\r\n\t\t\t\tcase 1: Emit(OpCodes.Ldloc_1); break;\r\n\t\t\t\tcase 2: Emit(OpCodes.Ldloc_2); break;\r\n\t\t\t\tcase 3: Emit(OpCodes.Ldloc_3); break;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (i >= SByte.MinValue && i <= SByte.MaxValue)\r\n\t\t\t\t\t\tEmit(OpCodes.Ldloc_S, (sbyte)i);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tEmit(OpCodes.Ldloc, (short)i);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of <c>ldloc</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">The local variable to be loaded.</param>\r\n\t\tpublic void Ldloc(LocalBuilder/*!*/ local)\r\n\t\t{\r\n\t\t\tLdloc(local.LocalIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>ldloca</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of a local variable whose address to load.</param>\r\n\t\tpublic void Ldloca(int i)\r\n\t\t{\r\n\t\t\tif (i >= Byte.MinValue && i <= Byte.MaxValue)\r\n\t\t\t\tEmit(OpCodes.Ldloca_S, (byte)i);\r\n\t\t\telse\r\n\t\t\t\tEmit(OpCodes.Ldloca, (short)i);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>ldloca</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">The local variable whose address to load.</param>\r\n\t\tpublic void Ldloca(LocalBuilder/*!*/ local)\r\n\t\t{\r\n\t\t\tLdloca(local.LocalIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>ldarg</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of an argument to be loaded.</param>\r\n\t\tpublic void Ldarg(int i)\r\n\t\t{\r\n\t\t\tswitch (i)\r\n\t\t\t{\r\n\t\t\t\tcase 0: Emit(OpCodes.Ldarg_0); break;\r\n\t\t\t\tcase 1: Emit(OpCodes.Ldarg_1); break;\r\n\t\t\t\tcase 2: Emit(OpCodes.Ldarg_2); break;\r\n\t\t\t\tcase 3: Emit(OpCodes.Ldarg_3); break;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (i >= SByte.MinValue && i <= SByte.MaxValue)\r\n\t\t\t\t\t\tEmit(OpCodes.Ldarg_S, (sbyte)i);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tEmit(OpCodes.Ldarg, (short)i);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>ldarga</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of an argument whose address to load.</param>\r\n\t\tpublic void Ldarga(int i)\r\n\t\t{\r\n\t\t\tif (i >= Byte.MinValue && i <= Byte.MaxValue)\r\n\t\t\t\tEmit(OpCodes.Ldarga_S, (byte)i);\r\n\t\t\telse\r\n\t\t\t\tEmit(OpCodes.Ldarga, (short)i);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>starg</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of argument to be stored.</param>\r\n\t\tpublic void Starg(int i)\r\n\t\t{\r\n\t\t\tif (i >= Byte.MinValue && i <= Byte.MaxValue)\r\n\t\t\t\tEmit(OpCodes.Starg_S, (byte)i);\r\n\t\t\telse\r\n\t\t\t\tEmit(OpCodes.Starg, (short)i);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>stloc</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of a local variable to be stored.</param>\r\n\t\tpublic void Stloc(int i)\r\n\t\t{\r\n\t\t\tswitch (i)\r\n\t\t\t{\r\n\t\t\t\tcase 0: Emit(OpCodes.Stloc_0); break;\r\n\t\t\t\tcase 1: Emit(OpCodes.Stloc_1); break;\r\n\t\t\t\tcase 2: Emit(OpCodes.Stloc_2); break;\r\n\t\t\t\tcase 3: Emit(OpCodes.Stloc_3); break;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (i >= SByte.MinValue && i <= SByte.MaxValue)\r\n\t\t\t\t\t\tEmit(OpCodes.Stloc_S, (sbyte)i);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tEmit(OpCodes.Stloc, (short)i);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits the most efficient form of the <c>stloc</c> IL instruction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">The local variable to be stored.</param>\r\n\t\tpublic void Stloc(LocalBuilder/*!*/ local)\r\n\t\t{\r\n\t\t\tStloc(local.LocalIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dereferences an address on the stack by emitting one of <c>Ldind</c> or <c>Ldobj</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">Type of the referenced value.</param>\r\n\t\tpublic void Ldind(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tDebug.Assert(!type.IsByRef);\r\n\r\n\t\t\tif (type.IsGenericParameter)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Ldobj, type);\r\n\t\t\t}\r\n\t\t\telse if (type.IsValueType)\r\n\t\t\t{\r\n\t\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t\t{\r\n\t\t\t\t\t// signed ints:\r\n\t\t\t\t\tcase TypeCode.SByte:\r\n\t\t\t\t\tcase TypeCode.Boolean: Emit(OpCodes.Ldind_I1); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int16: Emit(OpCodes.Ldind_I2); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int32: Emit(OpCodes.Ldind_I4); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int64:\r\n\t\t\t\t\tcase TypeCode.UInt64: Emit(OpCodes.Ldind_I8); break;\r\n\r\n\t\t\t\t\t// unsigned ints:\r\n\t\t\t\t\tcase TypeCode.Byte: Emit(OpCodes.Ldind_U1); break;\r\n\r\n\t\t\t\t\tcase TypeCode.UInt16:\r\n\t\t\t\t\tcase TypeCode.Char: Emit(OpCodes.Ldind_U2); break;\r\n\r\n\t\t\t\t\tcase TypeCode.UInt32: Emit(OpCodes.Ldind_U4); break;\r\n\r\n\t\t\t\t\t// floats:\r\n\t\t\t\t\tcase TypeCode.Single: Emit(OpCodes.Ldind_R4); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Double: Emit(OpCodes.Ldind_R8); break;\r\n\r\n\t\t\t\t\t// other value types:\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (type == typeof(IntPtr)) Emit(OpCodes.Ldind_I);\r\n\t\t\t\t\t\t\telse Emit(OpCodes.Ldobj, type);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse Emit(OpCodes.Ldind_Ref);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores a value to an address on the stack by emitting one of <c>Stind</c> or <c>Stobj</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">Type of the referenced value.</param>\r\n\t\tpublic void Stind(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tDebug.Assert(!type.IsByRef);\r\n\r\n\t\t\tif (type.IsGenericParameter)\r\n\t\t\t{\r\n\t\t\t\tEmit(OpCodes.Stobj, type);\r\n\t\t\t}\r\n\t\t\telse if (type.IsValueType)\r\n\t\t\t{\r\n\t\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t\t{\r\n\t\t\t\t\t// ints:\r\n\t\t\t\t\tcase TypeCode.Byte:\r\n\t\t\t\t\tcase TypeCode.SByte:\r\n\t\t\t\t\tcase TypeCode.Boolean: Emit(OpCodes.Stind_I1); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int16:\r\n\t\t\t\t\tcase TypeCode.Char: Emit(OpCodes.Stind_I2); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int32:\r\n\t\t\t\t\tcase TypeCode.UInt32: Emit(OpCodes.Stind_I4); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Int64:\r\n\t\t\t\t\tcase TypeCode.UInt64: Emit(OpCodes.Stind_I8); break;\r\n\r\n\t\t\t\t\t// floats:\r\n\t\t\t\t\tcase TypeCode.Single: Emit(OpCodes.Stind_R4); break;\r\n\r\n\t\t\t\t\tcase TypeCode.Double: Emit(OpCodes.Stind_R8); break;\r\n\r\n\t\t\t\t\t// other value types:\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (type == typeof(IntPtr)) Emit(OpCodes.Stind_I);\r\n\t\t\t\t\t\t\telse Emit(OpCodes.Stobj, type);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse Emit(OpCodes.Stind_Ref);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts value on the stack to the provided <paramref name=\"type\"/> using a <c>conv</c> or\r\n\t\t/// <c>conv.ovf</c> instruction variant.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The target type.</param>\r\n\t\t/// <param name=\"overflow\"><B>True</B> if a <c>ovf</c> variant should be used.</param>\r\n\t\tpublic void Conv(Type/*!*/ type, bool overflow)\r\n\t\t{\r\n\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t{\r\n\t\t\t\tcase TypeCode.Boolean:\r\n\t\t\t\tcase TypeCode.Byte: Emit(overflow ? OpCodes.Conv_Ovf_I1 : OpCodes.Conv_I1); break;\r\n\t\t\t\tcase TypeCode.SByte: Emit(overflow ? OpCodes.Conv_Ovf_U1 : OpCodes.Conv_U1); break;\r\n\r\n\t\t\t\tcase TypeCode.Char:\r\n\t\t\t\tcase TypeCode.Int16: Emit(overflow ? OpCodes.Conv_Ovf_I2 : OpCodes.Conv_I2); break;\r\n\t\t\t\tcase TypeCode.UInt16: Emit(overflow ? OpCodes.Conv_Ovf_U2 : OpCodes.Conv_U2); break;\r\n\r\n\t\t\t\tcase TypeCode.Int32: Emit(overflow ? OpCodes.Conv_Ovf_I4 : OpCodes.Conv_I4); break;\r\n\t\t\t\tcase TypeCode.UInt32: Emit(overflow ? OpCodes.Conv_Ovf_U4 : OpCodes.Conv_U4); break;\r\n\r\n\t\t\t\tcase TypeCode.Int64: Emit(overflow ? OpCodes.Conv_Ovf_I8 : OpCodes.Conv_I8); break;\r\n\t\t\t\tcase TypeCode.UInt64: Emit(overflow ? OpCodes.Conv_Ovf_U8 : OpCodes.Conv_U8); break;\r\n\r\n\t\t\t\tcase TypeCode.Single: Emit(OpCodes.Conv_R4); break;\r\n\t\t\t\tcase TypeCode.Double: Emit(OpCodes.Conv_R8); break;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (type == typeof(IntPtr)) Emit(overflow ? OpCodes.Conv_Ovf_I : OpCodes.Conv_I);\r\n\t\t\t\t\t\telse Debug.Fail(null);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a literal to the evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be loaded. Should be of literal type.</param>\r\n\t\t/// <returns>The type of the <paramref name=\"value\"/>.</returns>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid <paramref name=\"value\"/> type.</exception>\r\n\t\tpublic Type LoadLiteral(object value)\r\n\t\t{\r\n\t\t\treturn LoadLiteral(value, false);\r\n\t\t}\r\n\r\n\t\tpublic Type LoadLiteralBox(object value)\r\n\t\t{\r\n\t\t\treturn LoadLiteral(value, true);\r\n\t\t}\r\n\r\n\t\tpublic Type LoadLiteral(object value, bool box)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t{\r\n\t\t\t\tEmit(OpCodes.Ldnull);\r\n\t\t\t\treturn typeof(object);\r\n\t\t\t}\r\n\r\n\t\t\tType type = value.GetType();\r\n\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t{\r\n\t\t\t\tcase TypeCode.SByte: LdcI4((sbyte)value); break;\r\n\t\t\t\tcase TypeCode.Byte: LdcI4((byte)value); break;\r\n\t\t\t\tcase TypeCode.Int16: LdcI8((short)value); break;\r\n\t\t\t\tcase TypeCode.UInt16: LdcI8((ushort)value); break;\r\n\t\t\t\tcase TypeCode.Char: LdcI4((int)(char)value); break;\r\n\t\t\t\tcase TypeCode.Int32: LdcI4((int)value); break;\r\n\t\t\t\tcase TypeCode.UInt32: LdcI4(unchecked((int)(uint)value)); break;\r\n\t\t\t\tcase TypeCode.Int64: LdcI8((long)value); break;\r\n\t\t\t\tcase TypeCode.UInt64: LdcI8(unchecked((long)(ulong)value)); break;\r\n\t\t\t\tcase TypeCode.Boolean: LoadBool((bool)value); break;\r\n\t\t\t\tcase TypeCode.Double: Emit(OpCodes.Ldc_R8, (double)value); break;\r\n\t\t\t\tcase TypeCode.Single: Emit(OpCodes.Ldc_R4, (float)value); break;\r\n\t\t\t\tcase TypeCode.String:\r\n                    Emit(OpCodes.Ldstr, (string)value);\r\n                    break;\r\n\t\t\t\tcase TypeCode.Object:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpBytes bytes = value as PhpBytes;\r\n\t\t\t\t\t\tif (bytes != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tEmitLoadPhpBytes(bytes);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgoto default;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new ArgumentException(\"value\");\r\n\t\t\t}\r\n\r\n\t\t\tif (type.IsValueType && box)\r\n\t\t\t\til.Emit(OpCodes.Box, type);\r\n\r\n\t\t\treturn type;\r\n\t\t}\r\n\r\n        internal FieldBuilder/*!*/DefineInitializedData(string name, byte[] data, FieldAttributes attributes)\r\n        {\r\n            // TODO: cache values, reuse existing PhpBytes or datafld\r\n            \r\n            // regular function, we have a type builder:\r\n            if (TypeBuilder != null)\r\n                return TypeBuilder.DefineInitializedData(name, data, attributes);\r\n\r\n            // global function in pure mode:\r\n            var moduleBuilder = this.MethodBuilder.Module as ModuleBuilder;\r\n            if (moduleBuilder != null)\r\n                return moduleBuilder.DefineInitializedData(name, data, attributes);\r\n\r\n            //\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"value\"></param>\r\n        /// <remarks>TODO: move to CodeGenerator.</remarks>\r\n\t\tinternal void EmitLoadPhpBytes(PhpBytes/*!*/ value)\r\n\t\t{\r\n            Debug.Assert(value != null);\r\n\r\n            // create array of bytes\r\n            LdcI4(value.Length);\r\n            Emit(OpCodes.Newarr, typeof(byte));\r\n\r\n            if (value.Length > 0)   // not valid for zero-length byte arrays\r\n            {\r\n                FieldBuilder datafld = this.DefineInitializedData(\r\n                        string.Concat(\"byte'\", value.ReadonlyData.Length.ToString(\"x\"), \"'\", value.ReadonlyData.GetHashCode().ToString()),\r\n                        value.ReadonlyData,\r\n                        FieldAttributes.Assembly | FieldAttributes.Static);\r\n\r\n                Emit(OpCodes.Dup);\r\n                Emit(OpCodes.Ldtoken, datafld);\r\n                Emit(OpCodes.Call, Methods.InitializeArray);\r\n            }\r\n\r\n\t\t\tEmit(OpCodes.Newobj, Constructors.PhpBytes_ByteArray);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a bool literal on the evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The literal to load.</param>\r\n\t\tpublic void LoadBool(bool value)\r\n\t\t{\r\n\t\t\tEmit(value ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads local variable, field, place or emits parameterless opcode.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">\r\n\t\t/// An instance of <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/> or <see cref=\"IPlace\"/>.\r\n\t\t/// </param>\r\n\t\tpublic void Load(object source)\r\n\t\t{\r\n\t\t\tLocalBuilder local;\r\n\t\t\tFieldInfo field;\r\n\t\t\tIPlace place;\r\n\t\t\tMethodInfo method;\r\n\t\t\tPropertyInfo property;\r\n\t\t\t//Type type;\r\n\r\n\t\t\tif ((local = source as LocalBuilder) != null)\r\n\t\t\t{\r\n\t\t\t\tLdloc(local);\r\n\t\t\t}\r\n\t\t\telse if ((field = source as FieldInfo) != null)\r\n\t\t\t{\r\n\t\t\t\tEmit(field.IsStatic ? OpCodes.Ldsfld : OpCodes.Ldfld, field);\r\n\t\t\t}\r\n\t\t\telse if ((place = source as IPlace) != null)\r\n\t\t\t{\r\n\t\t\t\tplace.EmitLoad(this);\r\n\t\t\t}\r\n\t\t\telse if ((method = source as MethodInfo) != null)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(method.GetParameters().Length == 0 && method.IsStatic);\r\n\t\t\t\tEmit(OpCodes.Call, method);\r\n\t\t\t}\r\n\t\t\telse if ((property = source as PropertyInfo) != null)\r\n\t\t\t{\r\n\t\t\t\tmethod = property.GetGetMethod();\r\n\t\t\t\tEmit(method.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, method);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthrow new ArgumentException(\"source\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads address of local variable, field or place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">\r\n\t\t/// An instance of <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/> or <see cref=\"IPlace\"/>.\r\n\t\t/// </param>\r\n\t\tpublic void LoadAddress(object source)\r\n\t\t{\r\n\t\t\tLocalBuilder local;\r\n\t\t\tFieldInfo field;\r\n\t\t\tIPlace place;\r\n\r\n\t\t\tif ((local = source as LocalBuilder) != null)\r\n\t\t\t{\r\n\t\t\t\tLdloca(local);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tif ((field = source as FieldInfo) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmit(field.IsStatic ? OpCodes.Ldsflda : OpCodes.Ldflda, field);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tif ((place = source as IPlace) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tplace.EmitLoadAddress(this);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new ArgumentException(\"source\");\r\n\t\t\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the place has an address.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">\r\n\t\t/// An instance of <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/> or <see cref=\"IPlace\"/>.\r\n\t\t/// </param>\r\n\t\t/// <returns>Whether the place is addressable.</returns>\r\n\t\tpublic static bool HasAddress(object source)\r\n\t\t{\r\n\t\t\tIPlace place;\r\n\r\n\t\t\tif (source is LocalBuilder || source is FieldInfo)\r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse if ((place = source as IPlace) != null)\r\n\t\t\t{\r\n\t\t\t\treturn place.HasAddress;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores local variable, field, place or emits paramereless opcode.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"destination\">\r\n\t\t/// An instance of <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/> or <see cref=\"IPlace\"/>.\r\n\t\t/// </param>\r\n\t\tpublic void Store(object destination)\r\n\t\t{\r\n\t\t\tLocalBuilder local;\r\n\t\t\tFieldInfo field;\r\n\t\t\tIPlace place;\r\n\r\n\t\t\tif ((local = destination as LocalBuilder) != null)\r\n\t\t\t{\r\n\t\t\t\tStloc(local);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tif ((field = destination as FieldInfo) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmit(field.IsStatic ? OpCodes.Stsfld : OpCodes.Stfld, field);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tif ((place = destination as IPlace) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tplace.EmitStore(this);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new ArgumentException(\"destination\");\r\n\t\t\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits oprator ++ on local variable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">The local variable builder.</param>\r\n\t\t/// <remarks>The original value of the local variable remains on the stack.</remarks>\r\n\t\tpublic void IncLoc(LocalBuilder local)\r\n\t\t{\r\n\t\t\tLdloc(local);\r\n\t\t\tEmit(OpCodes.Dup);\r\n\t\t\tEmit(OpCodes.Ldc_I4_1);\r\n\t\t\tEmit(OpCodes.Add);\r\n\t\t\tStloc(local);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits comparison of the top of the stack (TOS) with <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Loads a boolean <B>true</B> (TOS is not equal to <B>null</B>) or <B>false</B> \r\n\t\t/// (TOS is equal to <B>null</B>) on the top of the stack.\r\n\t\t/// </remarks>\r\n\t\tpublic void CmpNotNull()\r\n\t\t{\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores an element into the array which should be on the top of the evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type of the element.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">Invalid <paramref name=\"type\"/>.</exception>\r\n\t\tpublic void Stelem(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (type.IsGenericParameter)\r\n\t\t\t{\r\n\t\t\t\tEmit(OpCodes.Stelem);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (type.IsValueType)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (Type.GetTypeCode(type))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase TypeCode.Byte:\r\n\t\t\t\t\t\tcase TypeCode.SByte: Emit(OpCodes.Stelem_I1); break;\r\n\t\t\t\t\t\tcase TypeCode.Char:\r\n\t\t\t\t\t\tcase TypeCode.UInt16:\r\n\t\t\t\t\t\tcase TypeCode.Int16: Emit(OpCodes.Stelem_I2); break;\r\n\t\t\t\t\t\tcase TypeCode.UInt32:\r\n\t\t\t\t\t\tcase TypeCode.Int32: Emit(OpCodes.Stelem_I4); break;\r\n\t\t\t\t\t\tcase TypeCode.UInt64:\r\n\t\t\t\t\t\tcase TypeCode.Int64: Emit(OpCodes.Stelem_I8); break;\r\n\t\t\t\t\t\tcase TypeCode.Double: Emit(OpCodes.Stelem_R8); break;\r\n\t\t\t\t\t\tcase TypeCode.Single: Emit(OpCodes.Stelem_R4); break;\r\n\t\t\t\t\t\tcase TypeCode.Object: Emit(OpCodes.Stelem, type); break;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tthrow new ArgumentException(\"type\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tEmit(OpCodes.Stelem_Ref);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a value from a specified place on the evaluation stack and boxes it if it is of a value type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"place\">The place where to load a value from.</param>\r\n\t\tpublic void LoadBoxed(IPlace/*!*/ place)\r\n\t\t{\r\n\t\t\tType type = place.PlaceType;\r\n\r\n\t\t\tplace.EmitLoad(this);\r\n\t\t\tif (type.IsValueType)\r\n\t\t\t\til.Emit(OpCodes.Box, type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits a new vector creation and initialization. The resulting array is pushed onto the top of evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"elementType\">Element type.</param>\r\n\t\t/// <param name=\"length\">Array length.</param>\r\n\t\t/// <param name=\"emitItem\">Action emitting an array item.</param>\r\n\t\tpublic void EmitInitializedArray(Type/*!*/ elementType, int length, Action<ILEmitter, int>/*!*/ emitItem)\r\n\t\t{\r\n\t\t\tDebug.Assert(elementType != null && emitItem != null);\r\n\r\n\t\t\t//LocalBuilder tmp = GetTemporaryLocal(elementType.MakeArrayType());\r\n\r\n\t\t\t// tmp = new string[<length>];\r\n\t\t\tLdcI4(length);\r\n\t\t\tEmit(OpCodes.Newarr, elementType);\r\n\t\t\t//Stloc(tmp);\r\n\r\n\t\t\tfor (int i = 0; i < length; ++i)\r\n\t\t\t{\r\n\t\t\t\t// tmp[<i>] = <item[i]>;\r\n                il.Emit(OpCodes.Dup);//Ldloc(tmp);\r\n\t\t\t\tLdcI4(i);\r\n\t\t\t\temitItem(this, i);\r\n\t\t\t\tStelem(elementType);\r\n\t\t\t}\r\n\r\n\t\t\t//return tmp;\r\n\t\t}\r\n        /// <summary>\r\n        /// Emits a new vector creation and initialization. The resulting array is on the top of the stack. Not stored in any local variable!\r\n        /// </summary>\r\n        /// <param name=\"elementType\">Element type.</param>\r\n        /// <param name=\"length\">Array length.</param>\r\n        /// <param name=\"emitItem\">Action emitting an array item.</param>\r\n        public void EmitLoadInitializedArray(Type/*!*/ elementType, int length, Action<ILEmitter, int>/*!*/ emitItem)\r\n        {\r\n            Debug.Assert(elementType != null && emitItem != null);\r\n\r\n            // new type[<length>];\r\n            LdcI4(length);\r\n            Emit(OpCodes.Newarr, elementType);\r\n            \r\n            for (int i = 0; i < length; ++i)\r\n            {\r\n                // tmp[<i>] = <item[i]>;\r\n                Emit(OpCodes.Dup);\r\n                LdcI4(i);\r\n                emitItem(this, i);\r\n                Stelem(elementType);\r\n            }\r\n        }\r\n\r\n        /*\r\n        /// <summary>\r\n        /// Emits a new vector of byte creation and initialization. The resulting array is pushed onto the top of the evaluation stack.\r\n        /// </summary>\r\n        /// <param name=\"data\">source array to be used</param>\r\n        /// <returns>The resulting array is pushed onto the top of the evaluation stack.</returns>\r\n        public void EmitInitializedArray(byte[] data)\r\n        {\r\n            Debug.Assert(data != null);\r\n\r\n            //LocalBuilder tmp = GetTemporaryLocal(typeof(byte[]));\r\n\r\n            // tmp = new byte[data.length];\r\n            LdcI4(data.Length);\r\n            Emit(OpCodes.Newarr, typeof(byte));\r\n            //Stloc(tmp);\r\n\r\n            for (int i = 0; i < data.Length; ++i)\r\n            {\r\n                // tmp[<i>] = data[i];\r\n                il.Emit(OpCodes.Dup);//Ldloc(tmp);\r\n                LdcI4(i);\r\n                LdcI4(data[i]);\r\n                Emit(OpCodes.Stelem_I1);    \r\n            }\r\n\r\n            //return tmp;\r\n        }*/\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits either an array of items or the items themselves depending on their number.\r\n\t\t/// Useful for emitting arguments of optimized overloads.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"elementType\">Arguments type.</param>\r\n\t\t/// <param name=\"argCount\">Number of actual arguments to be emitted.</param>\r\n\t\t/// <param name=\"explicitOverloads\">Maximal number of arguments for which an explicit overload exists.</param>\r\n\t\t/// <param name=\"emitArg\">Argument emitter.</param>\r\n\t\tpublic void EmitOverloadedArgs(Type/*!*/ elementType, int argCount, int explicitOverloads,\r\n\t\t\tAction<ILEmitter, int>/*!*/ emitArg)\r\n\t\t{\r\n\t\t\tDebug.Assert(elementType != null && emitArg != null);\r\n\r\n\t\t\tif (argCount > explicitOverloads)\r\n\t\t\t{\r\n\t\t\t\t// emit array:\r\n\t\t\t\tEmitInitializedArray(elementType, argCount, emitArg);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// emit separate arguments:\r\n\t\t\t\tfor (int i = 0; i < argCount; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\temitArg(this, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetAssignmentLocal\r\n\r\n\t\t/// <summary>\r\n\t\t/// Holds a <see cref=\"LocalBuilder\"/> used as a storage for a source value of an assignment.\r\n\t\t/// </summary>\r\n\t\tprivate LocalBuilder assignmentLocalBuilder;\r\n\t\tprivate LocalBuilder assignmentLocalBuilderRef;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"LocalBuilder\"/> used as a storage for a source value of an assignment.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The <see cref=\"LocalBuilder\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Returns a <see cref=\"LocalBuilder\"/> of type <see cref=\"System.Object\"/>. The local is declared\r\n\t\t/// with the first call of this method.\r\n\t\t/// </remarks>\r\n\t\tpublic LocalBuilder GetAssignmentLocal()\r\n\t\t{\r\n\t\t\tif (this.assignmentLocalBuilder == null)\r\n\t\t\t\tassignmentLocalBuilder = il.DeclareLocal(typeof(object));\r\n\t\t\treturn assignmentLocalBuilder;\r\n\t\t}\r\n\r\n\t\tpublic LocalBuilder GetAssignmentLocalRef()\r\n\t\t{\r\n\t\t\tif (this.assignmentLocalBuilderRef == null)\r\n\t\t\t\tassignmentLocalBuilderRef = il.DeclareLocal(typeof(PhpReference));\r\n\t\t\treturn assignmentLocalBuilderRef;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetAddressStorageLocal\r\n\r\n\t\t// Obsolete:\r\n\t\t// <summary>\r\n\t\t// A <see cref=\"Stack{T}\"/> class that stores temporarily used variables. See Remarks for more information.\r\n\t\t// </summary>\r\n\t\t// <remarks>This stack stores locals that are used to obtain address of a variable stored in\r\n\t\t// a runtime variables table while calling methods from <see cref=\"PHP.Core.Operators\"/> having\r\n\t\t// a <c>ref</c> argument. Those variables are not so short-live to be obtained by <see cref=\"GetTemporaryLocal\"/>,\r\n\t\t// but can be reused within a defining scope under certain circumstances.\r\n\t\t// When <see cref=\"GetAddressStorageLocal\"/> method is called, the temporary\r\n\t\t// local is either popped from the cache or a new local is defined if the cache is empty.\r\n\t\t// If the variable become useless, <see cref=\"ReturnAddressStorageLocal\"/> method should\r\n\t\t// be called to push the variable back to cache. Once the variable is returned to cache it must not have\r\n\t\t// been used unless it is obtained again by <see cref=\"GetAddressStorageLocal\"/> method.\r\n\t\t// The cache is created when the first local is returned.\r\n\t\t// </remarks>\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PHP Specific\r\n\r\n\t\tinternal void EmitBoxing(PhpTypeCode type)\r\n\t\t{\r\n\t\t\tswitch (type)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\til.Emit(OpCodes.Box, typeof(Int32));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.LongInteger:\r\n\t\t\t\t\til.Emit(OpCodes.Box, typeof(Int64));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Double:\r\n\t\t\t\t\til.Emit(OpCodes.Box, typeof(Double));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Boolean:\r\n\t\t\t\t\til.Emit(OpCodes.Box, typeof(Boolean));\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Void:\r\n\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// UnBox object containing value-type.\r\n        /// </summary>\r\n        /// <param name=\"type\">Type of object to UnBox.</param>\r\n        /// <remarks>Extracts the value contained within obj (of type O), it is equivalent to unbox followed by ldobj.</remarks>\r\n        internal void EmitUnboxingForArg(PhpTypeCode type)\r\n        {\r\n            switch (type)\r\n            {\r\n                case PhpTypeCode.Integer:\r\n                    il.Emit(OpCodes.Unbox_Any, typeof(Int32));\r\n                    break;\r\n\r\n                case PhpTypeCode.LongInteger:\r\n                    il.Emit(OpCodes.Unbox_Any, typeof(Int64));\r\n                    break;\r\n\r\n                case PhpTypeCode.Double:\r\n                    il.Emit(OpCodes.Unbox_Any, typeof(Double));\r\n                    break;\r\n\r\n                case PhpTypeCode.Boolean:\r\n                    il.Emit(OpCodes.Unbox_Any, typeof(Boolean));\r\n                    break;\r\n\r\n                case PhpTypeCode.Void:\r\n                    il.Emit(OpCodes.Pop);\r\n                    break;\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/LibraryBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\tpublic static class LibraryBuilder\r\n\t{\r\n\t\tprivate const TypeAttributes DynamicTypeAttributes =\r\n\t\t  TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public;\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Creates a dynamic wrapper of a specified assembly.\r\n\t\t/// </summary>\r\n\t\tpublic static string CreateDynamicWrapper(Assembly/*!*/ assembly, string directory, string filename)\r\n\t\t{\r\n\t\t\treturn CreateDynamicWrapper(null, assembly, directory, filename);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a dynamic wrapper of a specified assembly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assembly\">The assembly which wrapper to create.</param>\r\n\t\t/// <param name=\"directory\">A target directory. A <B>null</B> reference means CL dynamic directory.</param>\r\n\t\t/// <param name=\"attr\">Specifies a type of the 'ImplementsFunction' attribute. If it\r\n\t\t/// ios set to null, the type from the current assembly is used.</param>\r\n        /// <param name=\"filename\">File name of the resulting dynamic wrapper.</param>\r\n\t\t/// <returns>The generated assembly file path.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Called either by utility or when indirect call or callback is to be made but \r\n\t\t/// target is not found in cache and dynamic wrapper doesn't exists. \r\n\t\t/// This implies that functions table has to be populated. \r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Functions table is traversed and all methods declared in <paramref name=\"assembly\"/>\r\n\t\t/// is added to a new dynamic wrapper.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"Exception\">Something went wrong during assembly building.</exception>\r\n\t\tpublic static string CreateDynamicWrapper(Type/*!*/ attr, Assembly/*!*/ assembly, string directory, string filename)\r\n\t\t{\r\n\t\t\treturn CreateDynamicWrapperInternal(attr, assembly, directory, filename);\r\n\t\t}\r\n#endif\r\n\r\n\t\t// Ugly silverlight hacking\r\n#if SILVERLIGHT\r\n\t\tprivate static Assembly CreateDynamicWrapperInternal(Type/*!*/ attr, Assembly/*!*/ assembly, string directory, string filename)\r\n#else\r\n        private static string CreateDynamicWrapperInternal(Type/*!*/ attr, Assembly/*!*/ assembly, string directory, string filename)\r\n#endif\r\n\t\t{\r\n\t\t\tstring assembly_base_name;\r\n\t\t\tAssemblyBuilder assembly_builder;\r\n\t\t\tModuleBuilder module_builder;\r\n\t\t\tTypeBuilder type_builder;\r\n\t\t\tMethodBuilder method_builder;\r\n\r\n\t\t\tIndexedPlace stack_place = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\t\t\t\r\n\t\t\t// TODO: if function requires this reference, we need to pass it somehow\r\n\t\t\tIPlace self_ref = LiteralPlace.Null;\r\n            IPlace script_context = new Place(stack_place, Fields.PhpStack_Context);\r\n\t\t\tIPlace rt_variables = new Place(stack_place, Fields.PhpStack_Variables);\r\n\t\t\tIPlace naming_context = new Place(stack_place, Fields.PhpStack_NamingContext);\r\n            IPlace class_context = new Place(null, Fields.UnknownTypeDesc.Singleton);\r\n\r\n#if !SILVERLIGHT\r\n\t\t\tif (directory == null)\r\n\t\t\t\tdirectory = Configuration.GetPathsNoLoad().DynamicWrappers;\r\n\t\t\tDirectory.CreateDirectory(directory);\r\n#endif\r\n\r\n\t\t\tDictionary<string, List<PhpLibraryFunction.Overload>> functions = GetLibraryFunctions(attr, assembly);\r\n\r\n\t\t\tOverloadsBuilder overloads_builder = new OverloadsBuilder(\r\n\t\t\t\tfalse,\r\n\t\t\t\tstack_place,\r\n\t\t\t\tnew OverloadsBuilder.ParameterLoader(PhpStackBuilder.EmitValuePeekUnchecked),\r\n\t\t\t\tnew OverloadsBuilder.ParameterLoader(PhpStackBuilder.EmitReferencePeekUnchecked),\r\n\t\t\t\tnew OverloadsBuilder.ParametersLoader(PhpStackBuilder.EmitPeekAllArguments));\r\n\r\n#if SILVERLIGHT\r\n\t\t\tint commaIdx = assembly.FullName.IndexOf(',');\r\n\t\t\tassembly_base_name = commaIdx == -1 ? assembly.FullName : assembly.FullName.Substring(0, commaIdx);\r\n#else\r\n\t\t\t// securitycritical\r\n\t\t\tassembly_base_name = assembly.GetName().Name;\r\n#endif\r\n\r\n\t\t\t// appends assembly name with the suffix:\r\n\t\t\tAssemblyName name = new AssemblyName();\r\n#if !SILVERLIGHT\r\n\t\t\tname.Version = assembly.GetName().Version;\r\n#endif\r\n\t\t\tname.Name = assembly_base_name + PhpLibraryModule.DynamicAssemblySuffix;\r\n\r\n#if SILVERLIGHT\r\n\r\n            // defines assembly with storage in the dynamic code path:\r\n            assembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);\r\n\r\n            // defines a module:\r\n            module_builder = assembly_builder.DefineDynamicModule(PhpLibraryModule.DynamicWrapperModuleName);\r\n\r\n#else\r\n\t\t\t// defines assembly with storage in the dynamic code path:\r\n\t\t\tassembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save, directory);\r\n\r\n\t\t\t// defines a module:\r\n            module_builder = assembly_builder.DefineDynamicModule(PhpLibraryModule.DynamicWrapperModuleName, filename);\r\n#endif\r\n\r\n\t\t\t// defines type which will contain all mathods:  \r\n\t\t\ttype_builder = module_builder.DefineType(Namespaces.LibraryStubs + Type.Delimiter + assembly_base_name, DynamicTypeAttributes);\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<string, List<PhpLibraryFunction.Overload>> function in functions)\r\n\t\t\t\t{\r\n\t\t\t\t\t// defines method:\r\n\t\t\t\t\tmethod_builder = type_builder.DefineMethod(function.Key, MethodAttributes.Public | MethodAttributes.Static,\r\n\t\t\t\t\t\tTypes.Object[0], Types.Object_PhpStack);\r\n\r\n\t\t\t\t\tILEmitter il = new ILEmitter(method_builder);\r\n\t\t\t\t\toverloads_builder.IL = il;\r\n\t\t\t\t\toverloads_builder.Aux = stack_place;\r\n\t\t\t\t\toverloads_builder.FunctionName = new Name(function.Key);\r\n\r\n\t\t\t\t\t// if run-time variables are needed by the overload sets a place where they are stored up:\r\n                    overloads_builder.EmitCallSwitch(self_ref, script_context, rt_variables, naming_context, class_context, function.Value);\r\n\r\n\t\t\t\t\t// RETURN:\r\n\t\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"A\", e.ToString());\r\n\t\t\t}\r\n\t\t\ttype_builder.CreateType();\r\n\r\n#if SILVERLIGHT\r\n\t\t\treturn assembly_builder;\r\n#else\r\n            assembly_builder.Save(filename);\r\n            return Path.Combine(directory, filename);\r\n#endif\r\n\t\t}\r\n\r\n\t\tprivate static Dictionary<string, List<PhpLibraryFunction.Overload>>/*!*/ GetLibraryFunctions(Type attr, Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\tDictionary<string, List<PhpLibraryFunction.Overload>> result =\r\n\t\t\t\tnew Dictionary<string, List<PhpLibraryFunction.Overload>>(500);\r\n\r\n\t\t\tforeach (Type type in assembly.GetTypes())\r\n\t\t\t{\r\n\t\t\t\tif (PhpLibraryModule.IsLibraryType(type))\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!method.IsGenericMethodDefinition)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tImplementsFunctionAttribute impl_func = \r\n\t\t\t\t\t\t\t\t(attr == null)?\r\n\t\t\t\t\t\t\t\t\tImplementsFunctionAttribute.Reflect(method):\r\n\t\t\t\t\t\t\t\t\tImplementsFunctionAttribute.ReflectDynamic(attr, method);\r\n\r\n\t\t\t\t\t\t\tif (impl_func != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tList<PhpLibraryFunction.Overload> overloads;\r\n\t\t\t\t\t\t\t\tif (!result.TryGetValue(impl_func.Name, out overloads))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\toverloads = new List<PhpLibraryFunction.Overload>();\r\n\t\t\t\t\t\t\t\t\tresult.Add(impl_func.Name, overloads);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (PhpLibraryFunction.AddOverload(overloads, method, impl_func.Options) == DRoutine.InvalidOverloadIndex)\r\n\t\t\t\t\t\t\t\t\tthrow new ReflectionException(CoreResources.GetString(\"invalid_class_library\", assembly.CodeBase));\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n#if SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Generates dynamic wrapper and returns a dynamic assembly.\r\n\t\t/// This is used by Silverlight version where we can't save the assembly to the disk.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"real_assembly\">Assembly with the library</param>\r\n\t\t/// <returns>Dynamic wrapper generated dynamically</returns>\r\n\t\tinternal static Assembly CreateDynamicWrapper(Assembly real_assembly)\r\n\t\t{\r\n\t\t\treturn CreateDynamicWrapperInternal(null, real_assembly);\r\n\t\t}\r\n#endif\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/Linq.txt",
    "content": "-------------------------\r\nRule #1\r\n-------------------------\r\n\r\nA query that contains an into clause\r\n\r\nq1 into x q2\r\n\r\nis translated into\r\n\r\nfrom x in ( q1 ) q2     ...    add new Generator(q1, x) to q2\r\n\r\n-------------------------\r\nRule #2\r\n-------------------------\r\n\r\nA from clause with multiple generators\r\n\r\nfrom g1 , g2 ,  gn\r\n\r\nis translated into\r\n\r\nfrom g1 from g2  from gn\r\n\r\n-------------------------\r\nRule #3\r\n-------------------------\r\n\r\nA from clause immediately followed by a where clause\r\n\r\nfrom x in e where f\r\n\r\nis translated into\r\n\r\nfrom x in (( e ) . Where ( x => f ))\r\n\r\n-------------------------\r\nRule #4 (multiple from clauses)\r\n-------------------------\r\n\r\nA query expression with multiple from clauses, an orderby clause, and a select clause\r\n\r\nfrom x1 in e1 from x2 in e2  orderby k1 , k2  select v\r\n\r\nis translated into\r\n\r\n( from x1 in e1 from x2 in e2  select new { k1 = k1 , k2 = k2  , v = v } )\r\n. OrderBy ( x => x . k1 ) . ThenBy ( x => x . k2 )  . Select ( x => x . v )\r\n\r\n-------------------------\r\nRule #5 (multiple from clauses)\r\n-------------------------\r\n\r\nA query expression with multiple from clauses, an orderby clause, and a group clause\r\n\r\nfrom x1 in e1 from x2 in e2  orderby k1 , k2  group v by g\r\n\r\nis translated into\r\n\r\n( from x1 in e1 from x2 in e2  select new { k1 = k1 , k2 = k2  , v = v , g = g } )\r\n. OrderBy ( x => x . k1 ) . ThenBy ( x => x . k2 )  . GroupBy ( x => x . g , x => x . v )\r\n\r\n-------------------------\r\nRule #6 (multiple from clauses)\r\n-------------------------\r\n\r\nA query expression with multiple from clauses and a select clause\r\n\r\nfrom x in e from x1 in e1  select v\r\n\r\nis translated into \r\n\r\n( e ) . SelectMany ( x => from x1 in e1  select v )\r\n\r\n-------------------------\r\nRule #7 (multiple from clauses)\r\n-------------------------\r\n\r\nA query expression with multiple from clauses and a group clause\r\n\r\nfrom x in e from x1 in e1  group v by g\r\n\r\nis translated into \r\n\r\n( e ) . SelectMany ( x => from x1 in e1  group v by g )\r\n\r\n-------------------------\r\nRule #8 (single from clause)\r\n-------------------------\r\n\r\nA query expression with a single from clause, no orderby clause, and a select clause\r\n\r\nfrom x in e select v\r\n\r\nis translated into\r\n\r\n( e ) . Select ( x => v )\r\n\r\nexcept when v is the identifier x, the translation is simply\r\n\r\n( e )\r\n\r\n-------------------------\r\nRule #9 (single from clause)\r\n-------------------------\r\n\r\nA query expression with a single from clause, no orderby clause, and a group clause\r\n\r\nfrom x in e group v by g\r\n\r\nis translated into\r\n\r\n( e ) . GroupBy ( x => g , x => v )\r\n\r\nexcept when v is the identifier x, the translation is\r\n\r\n( e ) . GroupBy ( x => g )\r\n\r\n-------------------------\r\nRule #10 (single from clause)\r\n-------------------------\r\n\r\nA query expression with a single from clause, an orderby clause, and a select clause\r\n\r\nfrom x in e orderby k1 , k2  select v\r\n\r\nis translated into\r\n\r\n( e ) . OrderBy ( x => k1 ) . ThenBy ( x => k2 )  . Select ( x => v )\r\n\r\nexcept when v is the identifier x, the translation is simply\r\n\r\n( e ) . OrderBy ( x => k1 ) . ThenBy ( x => k2 ) \r\n\r\n-------------------------\r\nRule #11 (single from clause)\r\n-------------------------\r\n\r\nA query expression with a single from clause, an orderby clause, and a group clause\r\n\r\nfrom x in e orderby k1 , k2  group v by g\r\n\r\nis translated into\r\n\r\n( e ) . OrderBy ( x => k1 ) . ThenBy ( x => k2 )  . GroupBy ( x => g , x => v )\r\n\r\nexcept when v is the identifier x, the translation is\r\n\r\n( e ) . OrderBy ( x => k1 ) . ThenBy ( x => k2 )  . GroupBy ( x => g )\r\n"
  },
  {
    "path": "Source/Core/Emit/ModuleBuilders.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t#region PureModuleBuilder\r\n\r\n\tpublic sealed class PureModuleBuilder : PureModule, IPhpModuleBuilder\r\n\t{\r\n\t\tpublic PureCompilationUnit/*!*/ PureCompilationUnit { get { return (PureCompilationUnit)CompilationUnit; } }\r\n\r\n\t\tpublic PhpAssemblyBuilderBase/*!*/ AssemblyBuilder { get { return assemblyBuilder; } }\r\n\r\n\t\tpublic PureAssemblyBuilder/*!*/ PureAssemblyBuilder { get { return assemblyBuilder; } }\r\n\t\tprivate readonly PureAssemblyBuilder/*!*/ assemblyBuilder;\r\n\r\n\t\tpublic MethodBuilder DeclareHelperBuilder { get { return declareHelperBuilder; } }\r\n\t\tprivate MethodBuilder declareHelperBuilder;\r\n\r\n\t\tpublic PureModuleBuilder(PureCompilationUnit/*!*/ compilationUnit, PureAssemblyBuilder/*!*/ assemblyBuilder)\r\n\t\t\t: base(compilationUnit, assemblyBuilder.PureAssembly)\r\n\t\t{\r\n\t\t\tthis.assemblyBuilder = assemblyBuilder;\r\n\t\t\tDefineBuilders();\r\n\t\t}\r\n\r\n\t\t#region Helpers\r\n\r\n\t\tpublic TypeBuilder/*!*/ DefineRealType(string/*!*/ fullName, TypeAttributes attributes)\r\n\t\t{\r\n\t\t\treturn assemblyBuilder.RealModuleBuilder.DefineType(fullName, attributes);\r\n\t\t}\r\n\r\n\t\tpublic MethodInfo/*!*/ DefineRealFunction(string/*!*/ name, MethodAttributes attributes, Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\tDebug.Assert((attributes & MethodAttributes.Static) != 0, \"Only static functions can be defined by DefineRealFunction\");\r\n\t\t\treturn assemblyBuilder.RealModuleBuilder.DefineGlobalMethod(name, attributes, returnType, parameterTypes);\r\n\t\t}\r\n\r\n\t\tpublic ILEmitter CreateGlobalCodeEmitter()\r\n\t\t{\r\n\t\t\t// no emitter for global code\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal void DefineBuilders()\r\n\t\t{\r\n\t\t\tdeclareHelperBuilder = PureAssemblyBuilder.GlobalTypeEmitter.TypeBuilder.DefineMethod(\r\n\t\t\t\tName.DeclareHelperName.Value, MethodAttributes.Assembly | MethodAttributes.Static,\r\n\t\t\t\tTypes.Void, new Type[] { typeof(ApplicationContext) });\r\n\r\n\t\t\t// sets the type builder to null, which makes functions and global constants defined globally on the module:\r\n\t\t\tthis.globalType.TypeDesc.DefineBuilder((TypeBuilder)null);\r\n\t\t}\r\n\r\n\t\tinternal void EmitHelpers()\r\n\t\t{\r\n\t\t\tEmitDeclareHelper();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits helper declaring all single-declared functions and classes in the script being built.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// For each function and class emits a call to <see cref=\"ApplicationContext.DeclareFunction\"/> and \r\n        /// <see cref=\"ApplicationContext.DeclareType\"/>, respectively, which declares it.\r\n\t\t/// The helper is called as the first instruction of Main helper. \r\n\t\t/// </remarks>\t\t\r\n\t\tprivate void EmitDeclareHelper()\r\n\t\t{\r\n\t\t\tPureCompilationUnit unit = this.PureCompilationUnit;\r\n\t\t\tILEmitter il = new ILEmitter(declareHelperBuilder);\r\n\t\t\tIndexedPlace app_context_place = new IndexedPlace(PlaceHolder.Argument, 0);\r\n            TypeBuilder publicsContainer = null;    // container type for public stubs of global declarations (which are inaccessible from other assemblies)\r\n\r\n\t\t\tforeach (PhpFunction function in unit.GetDeclaredFunctions())\r\n\t\t\t{\r\n\t\t\t\tif (function.IsDefinite)\r\n\t\t\t\t{\r\n\t\t\t\t\tapp_context_place.EmitLoad(il);\r\n\r\n\t\t\t\t\t// NEW RoutineDelegate(<static method>);\r\n\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\til.Emit(OpCodes.Ldftn, function.ArgLessInfo);\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n\r\n\t\t\t\t\t// LOAD <full name>;\r\n\t\t\t\t\til.Emit(OpCodes.Ldstr, function.FullName);\r\n\r\n\t\t\t\t\t// LOAD <attributes>;\r\n\t\t\t\t\til.LdcI4((int)function.MemberDesc.MemberAttributes);\r\n\r\n                    // LOAD <argfull>\r\n                    if (function.ArgFullInfo != null)\r\n                        CodeGenerator.EmitLoadMethodInfo(\r\n                            il,\r\n                            (function.ArgFullInfo.DeclaringType != null)\r\n                                ? function.ArgFullInfo\r\n                                : EmitPhpFunctionPublicStub(ref publicsContainer, function) // function.ArgFullInfo is real global method not accessible from other assemblies, must be wrapped\r\n                            /*, AssemblyBuilder.DelegateBuilder*/);\r\n                    else\r\n                        il.Emit(OpCodes.Ldnull);\r\n                    \r\n\t\t\t\t\t// CALL <application context>.DeclareFunction(<stub>, <name>, <member attributes>, <argfull>)\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.ApplicationContext.DeclareFunction);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tforeach (PhpType type in unit.GetDeclaredTypes())\r\n\t\t\t{\r\n\t\t\t\tif (type.IsDefinite)\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL <application context>.DeclareType(<type desc>, <name>);\r\n\t\t\t\t\ttype.EmitAutoDeclareOnApplicationContext(il, app_context_place);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tforeach (GlobalConstant constant in unit.GetDeclaredConstants())\r\n\t\t\t{\r\n\t\t\t\tif (constant.IsDefinite)\r\n\t\t\t\t{\r\n\t\t\t\t\tapp_context_place.EmitLoad(il);\r\n\r\n\t\t\t\t\t// CALL <application context>.DeclareConstant(<name>, <value>);\r\n\t\t\t\t\til.Emit(OpCodes.Ldstr, constant.FullName);\r\n                    //il.Emit(OpCodes.Ldsfld, constant.RealField);\r\n                    //if (constant.RealField.FieldType.IsValueType) il.Emit(OpCodes.Box, constant.RealField.FieldType);\r\n                    il.LoadLiteralBox(constant.Value);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.ApplicationContext.DeclareConstant);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n            // complete the publicsContainer type, if created:\r\n            if (publicsContainer != null)\r\n                publicsContainer.CreateType();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emit publically accessible stub that just calls argfull of <paramref name=\"function\"/>.\r\n        /// </summary>\r\n        /// <returns><see cref=\"MethodInfo\"/> of newly created function stub.</returns>\r\n        private MethodInfo/*!*/EmitPhpFunctionPublicStub(ref TypeBuilder publicsContainer, PhpFunction/*!*/function)\r\n        {\r\n            Debug.Assert(function != null);\r\n            Debug.Assert(function.ArgFullInfo != null, \"!function.ArgFullInfo\");\r\n\r\n            if (publicsContainer == null)\r\n            {\r\n                publicsContainer = PureAssemblyBuilder.RealModuleBuilder.DefineType(\r\n                    string.Format(\"{1}<{0}>\",\r\n                        StringUtils.ToClsCompliantIdentifier(Path.ChangeExtension(PureAssemblyBuilder.FileName, \"\")),\r\n                        QualifiedName.Global.ToString()),\r\n                    TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Class | TypeAttributes.SpecialName);\r\n            }\r\n\r\n            Type returnType;\r\n            var parameterTypes = function.Signature.ToArgfullSignature(1, out returnType);\r\n            parameterTypes[0] = Types.ScriptContext[0];\r\n\r\n            var mi = publicsContainer.DefineMethod(function.GetFullName(), MethodAttributes.Public | MethodAttributes.Static, returnType, parameterTypes);\r\n            var il = new ILEmitter(mi);\r\n\r\n            // load arguments\r\n            for (int i = 0; i < parameterTypes.Length; i++)\r\n            {\r\n                if (function.Builder != null)\r\n                    mi.DefineParameter(i + 1, ParameterAttributes.None, function.Builder.ParameterBuilders[i].Name);\r\n\r\n                il.Ldarg(i);\r\n            }\r\n            \r\n            // call function.ArgFullInfo\r\n            il.Emit(OpCodes.Call, function.ArgFullInfo);\r\n            \r\n            // .ret\r\n            il.Emit(OpCodes.Ret);\r\n\r\n            //\r\n            return mi;\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptBuilder\r\n\r\n\t/// <summary>\r\n\t/// Provides means for building scripts.\r\n\t/// </summary>\r\n\tpublic sealed partial class ScriptBuilder : ScriptModule, IPhpModuleBuilder\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tpublic TypeBuilder ScriptTypeBuilder { get { return (TypeBuilder)scriptInfo.Script; } }\r\n\t\tPhpAssemblyBuilderBase/*!*/ IPhpModuleBuilder.AssemblyBuilder { get { return assemblyBuilder; } }\r\n\r\n\t\tpublic ScriptAssemblyBuilder/*!*/ AssemblyBuilder { get { return assemblyBuilder; } }\r\n\t\tprivate readonly ScriptAssemblyBuilder/*!*/ assemblyBuilder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the Main helper/Main static method builder.\r\n\t\t/// </summary>\r\n\t\tpublic MethodBuilder MainHelperBuilder { get { return (MethodBuilder)MainHelper; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets declare helper builder.\r\n\t\t/// </summary>\r\n\t\tinternal MethodBuilder DeclareHelperBuilder { get { return declareHelper; } }\r\n\t\tprivate MethodBuilder declareHelper;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Timestamp of the source file when the script builder is created.\r\n\t\t/// </summary>\r\n        public DateTime SourceTimestampUtc { get { return sourceTimestampUtc; } }\r\n\t\tprivate DateTime sourceTimestampUtc;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new script builder.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"unit\">Compilation unit.</param>\r\n\t\t/// <param name=\"assemblyBuilder\">Script assembly builder.</param>\r\n\t\t/// <param name=\"subnamespace\">The script's subnamespace ending with a type delimiter or a <B>null</B> reference.</param>\r\n\t\t/// <returns>New instance.</returns>\r\n\t\tpublic ScriptBuilder(ScriptCompilationUnit/*!*/ unit, ScriptAssemblyBuilder/*!*/ assemblyBuilder, string subnamespace)\r\n\t\t\t: base(unit, assemblyBuilder.ScriptAssembly, subnamespace)\r\n\t\t{\r\n\t\t\tDebug.Assert(unit != null && assemblyBuilder != null);\r\n\r\n\t\t\tthis.assemblyBuilder = assemblyBuilder;\r\n\r\n\t\t\t// remembers a timestamp of the source file:\r\n\t\t\tthis.sourceTimestampUtc = FileSystemUtils.GetLastModifiedTimeUtc(unit.SourceUnit.SourceFile.FullPath);\r\n\r\n\t\t\tDefineBuilders(subnamespace);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Helpers\r\n\r\n\t\tpublic ILEmitter/*!*/ CreateGlobalCodeEmitter()\r\n\t\t{\r\n\t\t\treturn new ILEmitter(MainHelperBuilder);\r\n\t\t}\r\n\r\n\t\tpublic TypeBuilder/*!*/ DefineRealType(string/*!*/ fullName, TypeAttributes attributes)\r\n\t\t{\r\n\t\t\treturn assemblyBuilder.RealModuleBuilder.DefineType(UserTypesNamespace + fullName, attributes);\r\n\t\t}\r\n\r\n\t\tpublic MethodInfo/*!*/ DefineRealFunction(string/*!*/ name, MethodAttributes attributes, Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\tDebug.Assert((attributes & MethodAttributes.Static) != 0, \"Only static functions can be defined by DefineRealFunction\");\r\n\t\t\treturn ScriptTypeBuilder.DefineMethod(name, attributes, returnType, parameterTypes);\r\n\t\t}\r\n\r\n\t\tprivate void DefineBuilders(string subnamespace)\r\n\t\t{\r\n\t\t\t// defines script type (implements IPhpScript marking interface):\r\n\t\t\tTypeBuilder script_builder = assemblyBuilder.RealModuleBuilder.DefineType(\r\n\t\t\t\tassemblyBuilder.ScriptAssembly.GetQualifiedScriptTypeName(subnamespace),\r\n\t\t\t\t TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Class | TypeAttributes.SpecialName,\r\n\t\t\t\tTypes.Object[0],\r\n\t\t\t\tnew Type[] { typeof(IPhpScript) });\r\n\r\n\t\t\t// prevents scripts instantiation:\r\n\t\t\tscript_builder.DefineDefaultConstructor(MethodAttributes.PrivateScope);\r\n\r\n            this.scriptInfo = new ScriptInfo(script_builder, DefineMainHelper(script_builder));\r\n\r\n\t\t\tthis.declareHelper = DefineDeclareHelper(script_builder);\r\n\r\n\t\t\t// associates the script type builder with the module's global type so that \r\n\t\t\t// functions and global constants will be defined on the script type builder:\r\n\t\t\tthis.globalType.TypeDesc.DefineBuilder(script_builder);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines script type members - helpers and constructors.\r\n\t\t/// </summary>\r\n\t\tprivate MethodBuilder/*!*/ DefineMainHelper(TypeBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\t// public static object <Main>(ScriptContext context,IDictionary variables, DObject self, DTypeDesc includer, bool request);\r\n\t\t\tMethodBuilder result = builder.DefineMethod(\r\n\t\t\t\tMainHelperName,\r\n\t\t\tMethodAttributes.Public | MethodAttributes.Static | MethodAttributes.SpecialName,\r\n\t\t\ttypeof(object),\r\n\t\t\t\tMainHelperArgTypes);\r\n\r\n\t\t\t// gives arguments names (for comfortable debugging):\r\n            result.DefineParameter(1, ParameterAttributes.None, PhpRoutine.ContextParamName);\r\n            result.DefineParameter(2, ParameterAttributes.None, PhpRoutine.LocalVariablesTableName);\r\n            result.DefineParameter(3, ParameterAttributes.None, \"<self>\");\r\n            result.DefineParameter(4, ParameterAttributes.None, \"<includer>\");\r\n            result.DefineParameter(5, ParameterAttributes.None, \"<request>\");\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate MethodBuilder/*!*/ DefineDeclareHelper(TypeBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\t// public static void <Declare>(ScriptContext context);\r\n\t\t\tMethodBuilder result = builder.DefineMethod(\r\n\t\tDeclareHelperNane,\r\n\t\tMethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName,\r\n\t\tTypes.Void,\r\n\t\t\t\tDeclareHelperArgTypes);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal void EmitHelpers()\r\n\t\t{\r\n\t\t\tCompilationUnit unit = this.CompilationUnit;\r\n\t\t\tILEmitter il = new ILEmitter(DeclareHelperBuilder);\r\n\t\t\tIndexedPlace script_context_place = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\r\n\t\t\tforeach (PhpFunction function in unit.GetDeclaredFunctions())\r\n\t\t\t{\r\n\t\t\t\tif (function.IsDefinite)\r\n\t\t\t\t{\r\n                    CodeGenerator.EmitDeclareFunction(il, script_context_place, function);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tforeach (PhpType type in unit.GetDeclaredTypes())\r\n\t\t\t{\r\n\t\t\t\tif (type.IsDefinite)\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL <context>.DeclareType(<type desc>, <name>);\r\n\t\t\t\t\ttype.EmitAutoDeclareOnScriptContext(il, script_context_place);\r\n\t\t\t\t}\r\n                else if (!type.IsComplete)\r\n                {\r\n                    if (type.IncompleteClassDeclareMethodInfo != null)\r\n                    {\r\n                        // check whether base class is known at this point of execution,\r\n                        // if so, declare this incomplete class immediately. As PHP does.\r\n\r\n                        type.EmitDeclareIncompleteOnScriptContext(il, script_context_place);\r\n                    }\r\n                }\r\n\t\t\t}\r\n\r\n            foreach (GlobalConstant constant in unit.GetDeclaredConstants())\r\n            {\r\n                if (constant.IsDefinite)\r\n                {\r\n                    var field = constant.RealField;\r\n                    Debug.Assert(field != null);\r\n                    Debug.Assert(field.IsStatic);\r\n\r\n                    // CALL <context>.DeclareConstant(<name>, <value>);\r\n                    script_context_place.EmitLoad(il);\r\n\r\n                    il.Emit(OpCodes.Ldstr, constant.FullName);\r\n                    il.LoadLiteralBox(constant.Value);  //il.Emit(OpCodes.Ldsfld, field);   // const field cannot be referenced in IL\r\n                    il.Emit(OpCodes.Call, Methods.ScriptContext.DeclareConstant);\r\n                }\r\n            }\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\tinternal void Bake()\r\n\t\t{\r\n\t\t\tscriptInfo = new ScriptInfo(ScriptTypeBuilder.CreateType(), null);\r\n\t\t\t//FastReflect();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region LEGACY: Attributes\r\n\r\n\t\t///// <summary>\r\n\t\t///// Adds meta-information about a static script inclusion into the script being built by this script builder.\r\n\t\t///// </summary>\r\n\t\t///// <param name=\"inclusion\">Contains information about the inclusion.</param>\r\n\t\t//public void AddInclusionMetadata(StaticInclusion/*!*/ inclusion)\r\n\t\t//{\r\n\t\t//  // TODO:\r\n\t\t//  // Debug.Assert(!IsTransient(),\"Inclusion metadata shouldn't be added in transient scripts.\");\r\n\r\n\t\t//  //// adds an attribute to the module:\r\n\t\t//  //RelativePath rp = inclusion.Includee.SourceFile.RelativePath;\r\n\t\t//  //CustomAttributeBuilder ca = new CustomAttributeBuilder(Constructors.Includes, new object[] \r\n\t\t//  //  { rp.Path, rp.Level, inclusion.IsConditional, Reflection.Enums.IsOnceInclusion(inclusion.InclusionType) });\r\n\r\n\t\t//  //ScriptTypeBuilder.SetCustomAttribute(ca);\r\n\t\t//}\r\n\r\n\t\t///// <summary>\r\n\t\t///// Marks the script type with attributes.\r\n\t\t///// Adds <see cref=\"PhpEvalIdAttribute\"/> is added if the assembly being built is transient.\r\n\t\t///// Adds <see cref=\"ScriptAttribute\"/> otherwise.\r\n\t\t///// </summary>\r\n\t\t//private void AnnotateScriptType()\r\n\t\t//{\r\n\t\t//  // TODO:\r\n\t\t//  //if (IsTransient())\r\n\t\t//  //{ \r\n\t\t//  //  // eval id of transient code has to be valid:\r\n\t\t//  //  Debug.Assert(evalId!=EvalCompilerManager.InvalidEvalId);\r\n\r\n\t\t//  //  CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.PhpEvalId,\r\n\t\t//  //    new object[] { evalId }); \r\n\r\n\t\t//  //  ScriptTypeBuilder.SetCustomAttribute(cab);\r\n\t\t//  //}  \r\n\t\t//  //else\r\n\t\t//  //{\r\n\t\t//  //  CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.Script, \r\n\t\t//  //    new object[] { sourceTimestamp.ToFileTime() }); \r\n\r\n\t\t//  //  ScriptTypeBuilder.SetCustomAttribute(cab);\r\n\t\t//  //}    \r\n\t\t//}\r\n\r\n\t\t#endregion\r\n\r\n        [Flags]\r\n        internal enum ScriptAttributes\r\n        {\r\n            /// <summary>\r\n            /// Time stamp and file name.\r\n            /// </summary>\r\n            Script = 1,\r\n\r\n            /// <summary>\r\n            /// List of Scripts that statically include this Script.\r\n            /// </summary>\r\n            ScriptIncluders = 2,\r\n\r\n            /// <summary>\r\n            /// List of Scripts that are statically included by this Script.\r\n            /// </summary>\r\n            ScriptIncludees = 4,\r\n\r\n            /// <summary>\r\n            /// List of PHP types fully and statically declared by this Script.\r\n            /// </summary>\r\n            ScriptDeclares = 8,\r\n\r\n            /// <summary>\r\n            /// All the available info is emitted.\r\n            /// </summary>\r\n            All = Script | ScriptIncluders | ScriptIncludees | ScriptDeclares\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emit the Script attribute with includes,includers,relativePath and timeStamp info.\r\n        /// </summary>\r\n        /// <param name=\"emitAttributes\">Specifies single infos to emit.</param>\r\n\t\tinternal void SetScriptAttribute(ScriptAttributes emitAttributes)\r\n\t\t{\r\n            // module to resolve type tokens from:\r\n            ModuleBuilder real_builder = this.AssemblyBuilder.RealModuleBuilder;\r\n\r\n            // [Script(timeStamp, relativePath)]\r\n            if ((emitAttributes & ScriptAttributes.Script) != 0)\r\n            {\r\n                // construct the [Script] attribute:\r\n                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.Script, new object[] { sourceTimestampUtc.Ticks, CompilationUnit.RelativeSourcePath });\r\n                ScriptTypeBuilder.SetCustomAttribute(cab);\r\n            }\r\n\r\n            // [ScriptIncluders(int[])]\r\n            if ((emitAttributes & ScriptAttributes.ScriptIncluders) != 0 && CompilationUnit.Includers.Count > 0)\r\n            {\r\n                // determine includers type token, remove duplicities:\r\n                int[] includers = ArrayUtils.Unique(Array.ConvertAll(CompilationUnit.Includers.ToArray(), x => real_builder.GetTypeToken(x.Includer.ScriptBuilder.ScriptType).Token)).ToArray();\r\n            \r\n                // construct the [ScriptIncluders] attribute:\r\n                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncluders, new object[] { includers });\r\n                ScriptTypeBuilder.SetCustomAttribute(cab);\r\n            }\r\n\r\n            // [ScriptIncludees(int[],byte[])]\r\n            if ((emitAttributes & ScriptAttributes.ScriptIncludees) != 0 && CompilationUnit.Inclusions.Count > 0)\r\n            {\r\n                // determine inclusions type token, group by the token to remove duplicities:\r\n                var inclusionsGroup = ArrayUtils.Group(CompilationUnit.Inclusions.ToArray(), x => real_builder.GetTypeToken(x.Includee.ScriptClassType).Token);\r\n                // determine if single includees are at least once included unconditionally:\r\n                int[] inclusions = new int[inclusionsGroup.Count];\r\n                bool[] inclusionsConditionalFlag = new bool[inclusions.Length];\r\n\r\n                int i = 0;\r\n                foreach(var includee in inclusionsGroup)\r\n                {\r\n                    // find any unconditional inclusion to mark this unified inclusion as unconditional\r\n                    inclusionsConditionalFlag[i] = ArrayUtils.LogicalAnd(includee.Value, x => x.IsConditional);\r\n                    //\r\n                    inclusions[i] = includee.Key;\r\n                    ++i;\r\n                }\r\n\r\n                // construct the [ScriptIncluders] attribute:\r\n                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncludees, new object[] { inclusions, ScriptIncludeesAttribute.ConvertBoolsToBits(inclusionsConditionalFlag) });\r\n                ScriptTypeBuilder.SetCustomAttribute(cab);\r\n            }\r\n\r\n            // [ScriptDeclares(int[])]\r\n            if ((emitAttributes & ScriptAttributes.ScriptDeclares) != 0)\r\n            {\r\n                List<int> declaredTypesToken = new List<int>();\r\n\r\n                foreach (PhpType type in CompilationUnit.GetDeclaredTypes())\r\n                {\r\n                    if (type.IsComplete && type.RealType != null)\r\n                    {\r\n                        declaredTypesToken.Add(real_builder.GetTypeToken(type.RealType).Token);\r\n                    }\r\n                }\r\n\r\n                if (declaredTypesToken.Count > 0)\r\n                {\r\n                    // construct the [ScriptDeclares] attribute:\r\n                    CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptDeclares, new object[] { declaredTypesToken.ToArray() });\r\n                    ScriptTypeBuilder.SetCustomAttribute(cab);\r\n                }\r\n            }\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ModuleBuilders.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\tpublic interface IPhpModuleBuilder\r\n\t{\r\n\t\tPhpAssemblyBuilderBase/*!*/ AssemblyBuilder { get; }\r\n\t\tILEmitter CreateGlobalCodeEmitter();\r\n\r\n\t\tTypeBuilder/*!*/ DefineRealType(string/*!*/ fullName, TypeAttributes attributes);\r\n\t\tMethodInfo/*!*/ DefineRealFunction(string/*!*/ name, MethodAttributes attributes, Type/*!*/ returnType, Type[]/*!*/ parameterTypes);\r\n\t}\r\n\r\n\t#region TransientModuleBuilder\r\n\r\n\t/// <summary>\r\n\t/// Provides means for building transient modules.\r\n\t/// </summary>\r\n\tpublic sealed class TransientModuleBuilder : TransientModule, IPhpModuleBuilder\r\n\t{\r\n\t\tPhpAssemblyBuilderBase/*!*/ IPhpModuleBuilder.AssemblyBuilder { get { return assemblyBuilder; } }\r\n\r\n\t\tpublic TransientAssemblyBuilder/*!*/ AssemblyBuilder { get { return assemblyBuilder; } }\r\n\t\tprivate readonly TransientAssemblyBuilder/*!*/ assemblyBuilder;\r\n\r\n\t\tprivate MethodInfo mainMethod;\r\n\t\tprivate TypeBuilder globalBuilder;\r\n\r\n\t\tinternal TransientModuleBuilder(int id, EvalKinds kind, TransientCompilationUnit/*!*/ compilationUnit,\r\n\t\t\tTransientAssemblyBuilder/*!*/ assemblyBuilder, TransientModule containingModule, string sourcePath)\r\n            : base(id, kind, compilationUnit, assemblyBuilder.TransientAssembly, containingModule, sourcePath)\r\n\t\t{\r\n\t\t\tthis.assemblyBuilder = assemblyBuilder;\r\n\r\n\t\t\tif (!compilationUnit.IsDynamic)\r\n\t\t\t{\r\n\t\t\t\tthis.globalBuilder = assemblyBuilder.RealModuleBuilder.DefineType(MakeName(\"<Global>\", true),\r\n\t\t\t\t\tTypeAttributes.SpecialName | TypeAttributes.Class | TypeAttributes.Public);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.globalBuilder = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic ILEmitter/*!*/ CreateGlobalCodeEmitter()\r\n\t\t{\r\n\t\t\tstring name = MakeName(ScriptModule.MainHelperName, true);\r\n\r\n\t\t\tif (globalBuilder != null)\r\n\t\t\t{\r\n\t\t\t\tmainMethod = globalBuilder.DefineMethod(name,\r\n\t\t\t\t\tMethodAttributes.Public | MethodAttributes.Static | MethodAttributes.SpecialName,\r\n\t\t\t\t\tTypes.Object[0], ScriptModule.MainHelperArgTypes);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmainMethod = new DynamicMethod(name, PhpFunctionUtils.DynamicStubAttributes,\r\n\t\t\t\t\tCallingConventions.Standard, Types.Object[0], ScriptModule.MainHelperArgTypes, DynamicCode.DynamicMethodType, false);\r\n\t\t\t}\r\n\r\n\t\t\treturn new ILEmitter(mainMethod);\r\n\t\t}\r\n\r\n\t\tpublic TypeBuilder/*!*/ DefineRealType(string/*!*/ fullName, TypeAttributes attributes)\r\n\t\t{\r\n\t\t\tTypeBuilder result = assemblyBuilder.RealModuleBuilder.DefineType(\r\n\t\t\t\tthis.MakeName(fullName, false), attributes);\r\n\r\n\t\t\tif ((attributes & TypeAttributes.Interface) == 0)\r\n\t\t\t{\r\n\t\t\t\t// mark type with eval-id (used by stack tracer):\r\n\t\t\t\tresult.SetCustomAttribute(new CustomAttributeBuilder(Constructors.PhpEvalId, new object[] { this.Id }));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic MethodInfo/*!*/ DefineRealFunction(string/*!*/ name, MethodAttributes attributes, Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\tDebug.Assert((attributes & MethodAttributes.Static) != 0, \"Only static functions can be defined by DefineRealFunction\");\r\n\r\n\t\t\t// encode specialname attribute to the name (DM doesn't support it directly):\r\n\t\t\tname = MakeName(name, (attributes & MethodAttributes.SpecialName) != 0);\r\n\r\n\t\t\tif (globalBuilder != null)\r\n\t\t\t{\r\n\t\t\t\treturn globalBuilder.DefineMethod(name, attributes, returnType, parameterTypes);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn new DynamicMethod(name, PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard, returnType, parameterTypes,\r\n\t\t\t\t\tDynamicCode.DynamicMethodType, false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void Bake()\r\n\t\t{\r\n\t\t\tif (globalBuilder != null)\r\n\t\t\t{\r\n\t\t\t\tType baked = globalBuilder.CreateType();\r\n\t\t\t\tmainMethod = baked.GetMethod(mainMethod.Name, BindingFlags.Public | BindingFlags.Static);\r\n\t\t\t\tthis.main = (MainRoutineDelegate)Delegate.CreateDelegate(typeof(MainRoutineDelegate), mainMethod);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.main = (MainRoutineDelegate)((DynamicMethod)mainMethod).CreateDelegate(typeof(MainRoutineDelegate));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptBuilder\r\n\r\n\t/// <summary>\r\n\t/// Provides means for building scripts.\r\n\t/// </summary>\r\n\tpublic sealed partial class ScriptBuilder \r\n\t{\r\n\t\t#region Statics\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"context\" argument in all helpers.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgContext = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"variables\" argument in all helpers.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgVariables = 1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"self\" argument used in some helpers.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgSelf = 2;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"includer\" argument used in some helpers.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgIncluder = 3;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of \"isMain\" argument in Main helper.\r\n\t\t/// </summary>\r\n\t\tpublic const int ArgIsMain = 4;\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/OverloadsBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\n/*\r\n  FUTURE VERSION:\r\n   - inline callbacks if evaluable at compile time (create a new callback with given delegate)\r\n   - save return values into variable so that emitted code would be nicer (disassembler would be happier)\r\n   \r\n*/\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// Builder of overloads-aware library functions indirect calls.\r\n\t/// </summary>\r\n\tinternal class OverloadsBuilder\r\n    {\r\n        #region Nested Class: OverloadTreeNode\r\n        /// <summary>\r\n        /// Node in overload decision tree\r\n        /// </summary>\r\n        private class OverloadTreeNode\r\n        {\r\n            /// <summary>\r\n            /// Object representing overload of a library function. This is null if the node is not a leaf in the tree.\r\n            /// </summary>\r\n            private PhpLibraryFunction.Overload overload;\r\n\r\n            /// <summary>\r\n            /// Dictionary of child node pairs.\r\n            /// </summary>\r\n            private Dictionary<Type, OverloadTreeNode> childNodes;\r\n\r\n            /// <summary>\r\n            /// Initializes new decision tree using supplied overload array. \r\n            /// </summary>\r\n            /// <param name=\"overloads\"></param>\r\n            public OverloadTreeNode(PhpLibraryFunction.Overload[] overloads) : this(0, overloads)\r\n            {\r\n            }\r\n\r\n            /// <summary>\r\n            /// Initializes new decisin tree using supplied overload array and decision index.\r\n            /// </summary>\r\n            /// <param name=\"index\">Argument index which to start at.</param>\r\n            /// <param name=\"overloads\">Array of overloads.</param>\r\n            private OverloadTreeNode(int index, PhpLibraryFunction.Overload[] overloads)\r\n            {            \r\n                //assumptions\r\n                Debug.Assert(index >= 0);\r\n                Debug.Assert(overloads != null && overloads.Length > 0);\r\n                Debug.Assert(index < overloads[0].ParamCount - 1 || overloads.Length == 1);\r\n\r\n                childNodes = new Dictionary<Type,OverloadTreeNode>();\r\n\r\n                if (overloads.Length == 1)\r\n                {\r\n                    overload = overloads[0];\r\n                    return;\r\n                }\r\n\r\n                while(true)\r\n                {\r\n                    Debug.Assert(index < overloads[0].ParamCount);\r\n\r\n                    bool decisionPoint = TestDecisionPoint(index, overloads);\r\n\r\n                    if (decisionPoint)\r\n                    {\r\n                        foreach(var branch in DivideOverloads(index, overloads))\r\n                        {\r\n                            childNodes.Add(branch.Key, new OverloadTreeNode(index + 1, SortOverloads(index, branch.Value)));\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        index++;\r\n\r\n                        if (index == overloads[0].ParamCount)\r\n                        {\r\n                            Debug.Fail(null);\r\n                            overload = overloads[0];\r\n                            childNodes = new Dictionary<Type,OverloadTreeNode>();                            \r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Tests whether an argument index is a decision point on a set of overloads.\r\n            /// </summary>\r\n            /// <param name=\"index\">Argument index.</param>\r\n            /// <param name=\"overloads\">Array of overloads.</param>\r\n            /// <returns>True if decision is present on the index, otherwise false.</returns>\r\n            private bool TestDecisionPoint(int index, PhpLibraryFunction.Overload[] overloads)\r\n            {\r\n                Type first = null;\r\n\r\n                foreach (var overload in overloads)\r\n                {\r\n                    Type paramType = overload.RealParameters[index].ParameterType;                    \r\n\r\n                    if (first == null) first = paramType;\r\n                    else if (first != paramType) return true;\r\n                }\r\n\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Topological sort of types for their partial order. Sort is in-place. Specialized types come first, generic last.\r\n            /// </summary>\r\n            /// <param name=\"index\">Index of argument which will be used for sorting.</param>\r\n            /// <param name=\"overloads\">Array of overloads.</param>\r\n            /// <returns>Returns the same reference as it gets in \"overloads\" argument.</returns>\r\n            private PhpLibraryFunction.Overload[] SortOverloads(int index, PhpLibraryFunction.Overload[] overloads)\r\n            {\r\n                for (int i = 0; i >= overloads.Length; i++)\r\n                {\r\n                    int k = i;\r\n\r\n                    for (int j = i - 1; j >= 0; j--)\r\n                    {\r\n                        if (overloads[j].RealParameters[index].ParameterType.IsSubclassOf(overloads[k].RealParameters[index].ParameterType))\r\n                        {\r\n                            PhpLibraryFunction.Overload temp = overloads[j];\r\n                            overloads[j] = overloads[k];\r\n                            overloads[k] = temp;\r\n                            k = j;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return overloads;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Takes array of overloads and divides them into groups. Takes into account argument index (depth) of this node.\r\n            /// </summary>\r\n            /// <param name=\"index\"></param>\r\n            /// <param name=\"overloads\">Array of overload descriptors.</param>\r\n            /// <returns>Dictionary of </returns>\r\n            private Dictionary<Type, PhpLibraryFunction.Overload[]> DivideOverloads(int index, PhpLibraryFunction.Overload[] overloads)\r\n            {\r\n                var dict = new Dictionary<Type,List<PhpLibraryFunction.Overload>>();\r\n\r\n                foreach (var overload in overloads)\r\n                {\r\n                    List<PhpLibraryFunction.Overload> list;\r\n                    Type paramType = overload.RealParameters[index].ParameterType;\r\n\r\n                    if (dict.ContainsKey(paramType))\r\n                    {\r\n                        list = dict[paramType];\r\n                    }\r\n                    else\r\n                    {\r\n                        list = new List<PhpLibraryFunction.Overload>();\r\n                        dict.Add(paramType, list);\r\n                    }\r\n\r\n                    list.Add(overload);\r\n                }\r\n\r\n                var ret = new Dictionary<Type, PhpLibraryFunction.Overload[]>();\r\n\r\n                foreach(Type t in dict.Keys)\r\n                {\r\n                    ret.Add(t, dict[t].ToArray());\r\n                }\r\n\r\n                return ret;\r\n            }\r\n\r\n            private void Emit(ILEmitter il)\r\n            {\r\n            }\r\n        }\r\n        #endregion\r\n\r\n        #region Nested Class: OverloadForest\r\n        /// <summary>\r\n        /// Represents collection of overload decision trees, each representing one count of arguments.\r\n        /// </summary>\r\n        private class OverloadForest\r\n        {\r\n            private Dictionary<int, OverloadTreeNode> overloadTrees;\r\n\r\n            public OverloadForest(List<PhpLibraryFunction.Overload>/*!!*/ overloads)\r\n            {\r\n                // we divide overloads by argument count\r\n                var dividedOverloads = new Dictionary<int, List<PhpLibraryFunction.Overload>>();\r\n\r\n                foreach (var overload in overloads)\r\n                {\r\n                    if (!dividedOverloads.ContainsKey(overload.ParamCount))\r\n                    {\r\n                        dividedOverloads.Add(overload.ParamCount, new List<PhpLibraryFunction.Overload>());\r\n                    }\r\n\r\n                    dividedOverloads[overload.ParamCount].Add(overload);\r\n                }\r\n\r\n                overloadTrees = new Dictionary<int, OverloadTreeNode>();\r\n\r\n                foreach (var division in dividedOverloads)\r\n                {\r\n                    overloadTrees.Add(division.Key, new OverloadTreeNode(division.Value.ToArray()));\r\n                }\r\n            }\r\n        }\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// A delegate used to load a parameter to evaluation stack.\r\n\t\t/// </summary>\r\n        internal delegate object ParameterLoader(ILEmitter/*!*/ il, int/*!*/ index, object aux, ParameterInfo param);\r\n\r\n\t\tinternal delegate void ParametersLoader(OverloadsBuilder builder, int start, ParameterInfo param, IPlace argCount);\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"OverloadsBuilder\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"debug\">\r\n\t\t/// Whether the emitted code is to be debuggable.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"stack\">\r\n\t\t/// Place where the <see cref=\"PhpStack\"/> instance can be loaded from.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"loadValueParam\">\r\n\t\t/// Delegate called when value parameter is to be loaded on evaluation stack.\r\n\t\t/// The target method should guarantee that a value is loaded on evaluation stack.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"loadReferenceParam\">\r\n\t\t/// Delegate called when PHP reference parameter is to be loaded on evaluation stack.\r\n\t\t/// The target method should guarantee that the object reference of type <see cref=\"PhpReference\"/> \r\n\t\t/// is loaded on the evaluation stack. This object reference should not be a <B>null</B>.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"loadOptParams\">\r\n\t\t/// Delegate called when an array of optional arguments is to be loaded on evaluation stack.\r\n\t\t/// The target method should load that array on the evaluation stack.\r\n\t\t/// </param>\r\n\t\tpublic OverloadsBuilder(bool debug, IPlace stack,\r\n\t\t\tParameterLoader loadValueParam, ParameterLoader loadReferenceParam, ParametersLoader loadOptParams)\r\n\t\t{\r\n\t\t\tthis.loadValueParam = loadValueParam;\r\n\t\t\tthis.loadReferenceParam = loadReferenceParam;\r\n\t\t\tthis.loadOptParams = loadOptParams;\r\n\t\t\tthis.stack = stack;\r\n\t\t\tthis.debug = debug;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate bool debug;\r\n\r\n\t\tpublic IPlace Stack { get { return stack; } }\r\n\t\tprivate IPlace stack;\r\n\r\n\t\t// parameter loaders:\r\n\t\tprivate ParameterLoader loadValueParam;\r\n\t\tprivate ParameterLoader loadReferenceParam;\r\n\t\tprivate ParametersLoader loadOptParams;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An auxiliary object which builder doesn't care about.\r\n\t\t/// </summary>\r\n\t\tpublic object Aux { get { return aux; } set { aux = value; } }\r\n\t\tprivate object aux;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The IL generator used to emit code.\r\n\t\t/// </summary>\r\n\t\tpublic ILEmitter IL { get { return il; } set { il = value; } }\r\n\t\tprivate ILEmitter il;\r\n\r\n\t\t/// <summary>\r\n        /// An action used to emit jump onto the end of overload call - after the overload method call.\r\n        /// A value must be put onto the evaluation stack and jump must be performed.\r\n        /// </summary>\r\n        private Action<ILEmitter> overloadCallSkipEmitter = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The number of arguments that has been pushed on the evaluation stack so far.\r\n\t\t/// </summary>\r\n\t\tprivate int pushedArgsCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the function currently emitted.\r\n\t\t/// </summary>\r\n\t\tpublic Name FunctionName { get { return functionName; } set { functionName = value; } }\r\n\t\tprivate Name functionName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A list of local variable builders holding values of arguments passed by reference.\r\n\t\t/// </summary>\r\n\t\tprivate ArrayList refHolders = new ArrayList(3);   // GENERICS: <LocalBuilder>\r\n\r\n\t\t/// <summary>\r\n\t\t/// A list of local variable builders where arguments passed by reference are stored.\r\n\t\t/// </summary>\r\n\t\tprivate ArrayList refReferences = new ArrayList(3);   // GENERICS: <LocalBuilder>\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Call Switch Emitter\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits calls to specified overloads and a switch statement which calls appropriate overload \r\n\t\t/// according to the current value of <see cref=\"PhpStack.ArgCount\"/> field of the current stack. \r\n\t\t/// </summary>\r\n        /// <param name=\"thisRef\">Reference to self.</param>\r\n        /// <param name=\"script_context\">Current script context.</param>\r\n\t\t/// <param name=\"rtVariables\">\r\n\t\t/// Place where a run-time variables table can be loaded from.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"namingContext\">Naming context load-from place.</param>\r\n        /// <param name=\"classContext\">Class context load.</param>\r\n\t\t/// <param name=\"overloads\">The overload list.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Example: given overloads (2,5,7,9+), i.e. there are four overloads having 2, 5, 7 and 9 PHP parameters,\r\n\t\t/// respectively, and the last overload is marked as vararg,\r\n\t\t/// the method emits the following code:\r\n\t\t/// <code>\r\n\t\t/// switch(ArgCount - 2)                  // 2 = minimum { arg count of overload }\r\n\t\t/// {\r\n\t\t///   case 0: return call #2;             // call to the 2nd overload with appropriate arg. and return value handling\r\n\t\t///   case 1: goto case error;\r\n\t\t///   case 2: goto case error;\r\n\t\t///   case 3: return call #5;\r\n\t\t///   case 4: goto case error;\r\n\t\t///   case 5: return call #7;\r\n\t\t///   case 6: goto case error;\r\n\t\t/// \r\n\t\t/// #if vararg \r\n\t\t///   case 7: goto default; \r\n\t\t///   default: return call #vararg (9 mandatory args,optional args);break;\r\n\t\t/// #elif\r\n\t\t///   case 7: return call #9;\r\n\t\t///   default: goto case error;\r\n\t\t/// #endif\r\n\t\t///\r\n\t\t///   case error: PhpException.InvalidArgumentCount(null, functionName); break;\r\n\t\t/// }\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\tpublic void EmitCallSwitch(IPlace/*!*/ thisRef, IPlace/*!*/script_context, IPlace/*!*/ rtVariables, IPlace/*!*/ namingContext, IPlace/*!*/classContext, List<PhpLibraryFunction.Overload>/*!!*/ overloads)\r\n\t\t{\r\n            DebugHelper.AssertAllNonNull(overloads);\r\n\r\n\t\t\tint last = overloads.Count - 1;\r\n\t\t\tint min = overloads[0].ParamCount;\r\n\t\t\tint max = overloads[last].ParamCount;\r\n\r\n            var flags = overloads[last].Flags;\r\n\r\n            // if function is not supported, just throw the warning:\r\n            if ((flags & PhpLibraryFunction.OverloadFlags.NotSupported) != 0)\r\n            {\r\n                // stack.RemoveFrame();\r\n                if (stack != null)\r\n                {\r\n                    stack.EmitLoad(il);\r\n                    il.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n                }\r\n\r\n                // PhpException.FunctionNotSupported( <FullName> );\r\n                il.Emit(OpCodes.Ldstr, FunctionName.Value);\r\n                il.Emit(OpCodes.Call, Methods.PhpException.FunctionNotSupported_String);\r\n                if (debug) il.Emit(OpCodes.Nop);\r\n\r\n                // load methods default value\r\n                il.EmitBoxing(OverloadsBuilder.EmitLoadDefault(il, overloads[last].Method));\r\n                return;\r\n            }\r\n\r\n            bool is_vararg = (flags & PhpLibraryFunction.OverloadFlags.IsVararg) != 0;\r\n\r\n            if ((flags & PhpLibraryFunction.OverloadFlags.NeedsScriptContext) == 0)\r\n                script_context = null;\r\n\r\n\t\t\tif ((flags & PhpLibraryFunction.OverloadFlags.NeedsThisReference) == 0)\r\n\t\t\t\tthisRef = null;\r\n\r\n\t\t\tif ((flags & PhpLibraryFunction.OverloadFlags.NeedsVariables) == 0)\r\n\t\t\t\trtVariables = null;\r\n\r\n\t\t\tif ((flags & PhpLibraryFunction.OverloadFlags.NeedsNamingContext) == 0)\r\n\t\t\t\tnamingContext = null;\r\n\r\n            if ((flags & (PhpLibraryFunction.OverloadFlags.NeedsClassContext | PhpLibraryFunction.OverloadFlags.NeedsLateStaticBind)) == 0)\r\n                classContext = null;\r\n\r\n\t\t\tLabel end_label = il.DefineLabel();\r\n\t\t\tLabel error_label = il.DefineLabel();\r\n\t\t\tLabel[] cases = new Label[max - min + 1];\r\n\t\t\tMethodInfo method;\r\n\r\n\t\t\t// fills cases with \"goto case error\":\r\n\t\t\tfor (int i = 0; i < cases.Length; i++)\r\n\t\t\t\tcases[i] = error_label;\r\n\r\n\t\t\t// define labels for valid cases:\r\n\t\t\tfor (int i = 0; i < overloads.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tint count = overloads[i].ParamCount;\r\n\t\t\t\tcases[count - min] = il.DefineLabel();\r\n\t\t\t}\r\n\r\n\t\t\t// LOAD(stack.ArgCount - min);\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\t\t\til.LdcI4(min);\r\n\t\t\til.Emit(OpCodes.Sub);\r\n\r\n\t\t\t// SWITCH(tmp)\r\n\t\t\til.Emit(OpCodes.Switch, cases);\r\n\r\n\t\t\t// CASE >=N or <0 (underflows);\r\n\t\t\t// if the last overload is vararg:\r\n\t\t\tif (is_vararg)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder opt_arg_count_local = il.DeclareLocal(typeof(int));\r\n\r\n\t\t\t\t// CASE N: \r\n\t\t\t\til.MarkLabel(cases[cases.Length - 1]);\r\n\r\n\t\t\t\t// opt_arg_count = stack.ArgCount - max;\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_ArgCount);\r\n\t\t\t\til.LdcI4(max);\r\n\t\t\t\til.Emit(OpCodes.Sub);\r\n\t\t\t\til.Stloc(opt_arg_count_local);\r\n\r\n\t\t\t\t// IF(tmp<0) GOTO CASE error;\r\n\t\t\t\til.Ldloc(opt_arg_count_local);\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\til.Emit(OpCodes.Blt, error_label);\r\n\r\n\t\t\t\t// emits argument loading, stack frame removal, method call, return value conversion:\r\n\t\t\t\tmethod = overloads[last].Method;\r\n                Type return_type = EmitOverloadCall(method, overloads[last].RealParameters, max, script_context,\r\n                    rtVariables, namingContext, classContext, new Place(opt_arg_count_local), thisRef, false);\r\n\r\n\t\t\t\t// loads boxed return value:\r\n                if (return_type != Types.Void)\r\n                {\r\n                    //il.LoadBoxed(return_value);\r\n                    if (return_type.IsValueType)\r\n                        il.Emit(OpCodes.Box, return_type);\r\n                }\r\n                else\r\n                    il.Emit(OpCodes.Ldnull);\r\n\r\n\t\t\t\t// RETURN;\r\n\t\t\t\til.Emit(OpCodes.Ret);  //bug in Reflector: il.Emit(OpCodes.Br,end_label);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// GOTO CASE error;\r\n\t\t\t\til.Emit(OpCodes.Br, error_label);\r\n\t\t\t}\r\n\r\n\t\t\t// emits all valid cases which are not vararg:\r\n\t\t\tint j = 0;\r\n\t\t\tfor (int i = min; i <= max - (is_vararg ? 1 : 0); i++)\r\n\t\t\t{\r\n\t\t\t\tif (overloads[j].ParamCount == i)\r\n\t\t\t\t{\r\n\t\t\t\t\t// CASE <i>;\r\n\t\t\t\t\til.MarkLabel(cases[i - min]);\r\n\r\n\t\t\t\t\t// emits argument loading, stack frame removal, method call, return value conversion:\r\n\t\t\t\t\tmethod = overloads[j].Method;\r\n                    Type return_type = EmitOverloadCall(method, overloads[j].RealParameters, i, script_context, rtVariables, namingContext, classContext, null, thisRef, false);\r\n\r\n\t\t\t\t\t// loads boxed return value:\r\n                    if (return_type != Types.Void)\r\n                    {\r\n                        //il.LoadBoxed(return_value);\r\n                        if (return_type.IsValueType)\r\n                            il.Emit(OpCodes.Box, return_type);\r\n                    }\r\n                    else\r\n                        il.Emit(OpCodes.Ldnull);\r\n\r\n\t\t\t\t\t// RETURN;\r\n\t\t\t\t\til.Emit(OpCodes.Ret);  //bug in Reflector: il.Emit(OpCodes.Br,end_label);\r\n\r\n\t\t\t\t\tj++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tDebug.Assert(j + (is_vararg ? 1 : 0) == overloads.Count);\r\n\r\n\t\t\t// ERROR:\r\n\t\t\til.MarkLabel(error_label);\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldstr, this.functionName.ToString());\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpException.InvalidArgumentCount);\r\n\t\t\tif (debug) il.Emit(OpCodes.Nop);\r\n\r\n\t\t\t// RETURN null:\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.MarkLabel(end_label);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Overload Call Emitter\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call to specified overload.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The overload implementor.</param>\r\n\t\t/// <param name=\"ps\">Formal parameters of the <paramref name=\"method\"/>.</param>\r\n\t\t/// <param name=\"phpParamCount\">The number of PHP arguments of the overload.</param>\r\n        /// <param name=\"scriptContext\">A place where current script context should be loaded from.</param>\r\n\t\t/// <param name=\"rtVariables\">A place where run-time variables table should be loaded from.</param>\r\n\t\t/// <param name=\"namingContext\">A place where the naming can be load from.</param>\r\n        /// <param name=\"classContext\">A place where the class context can be load from.</param>\r\n\t\t/// <param name=\"optArgs\">A place where the number of optional arguments should be loaded from.</param>\r\n\t\t/// <param name=\"selfRef\">A place where reference to 'self' ($this) can be loaded from.</param>\r\n        /// <param name=\"ignoringReturnValue\">True if the return value of the function call is not used then.</param>\r\n\t\t/// <returns>A type of value stored on the top of the evaluation stack. In case of value type, it is NOT boxed.</returns>\r\n\t\tpublic Type EmitOverloadCall(\r\n\t\t\tMethodInfo method,\r\n\t\t\tParameterInfo[] ps,\r\n\t\t\tint phpParamCount,\r\n            IPlace scriptContext,\r\n\t\t\tIPlace rtVariables,\r\n\t\t\tIPlace namingContext,\r\n            IPlace classContext,\r\n\t\t\tIPlace optArgs,\r\n\t\t\tIPlace selfRef,\r\n            bool ignoringReturnValue)\r\n\t\t{\r\n\t\t\tpushedArgsCount = 0;\r\n\r\n            Label overloadCallEndLabel = il.DefineLabel();\r\n            Type/*!*/return_type = method.ReturnType;\r\n\r\n            // the routine used to skip the method call in case of invalid parameter cast\r\n            overloadCallSkipEmitter = (ile) =>\r\n                {\r\n                    if (return_type != Types.Void)\r\n                    {\r\n                        // emit the value; because the method call was skipped, value must be loaded here\r\n                        if (return_type.IsValueType)\r\n                            ile.LoadLiteral(Activator.CreateInstance(return_type), false);    // value is not boxed\r\n                        else\r\n                            ile.Emit(OpCodes.Ldnull);\r\n                    }\r\n\r\n                    // goto the end label\r\n                    il.Emit(OpCodes.Br, overloadCallEndLabel);\r\n                };\r\n\r\n            if (scriptContext != null)\r\n            {\r\n                // LOAD(<context>);\r\n                scriptContext.EmitLoad(il);\r\n                pushedArgsCount++;\r\n            }\r\n\r\n\t\t\tif (selfRef != null)\r\n\t\t\t{\r\n\t\t\t\t// LOAD(<this>);\r\n\t\t\t\tselfRef.EmitLoad(il);\r\n\t\t\t\tpushedArgsCount++;\r\n\t\t\t}\r\n\r\n\t\t\tif (rtVariables != null)\r\n\t\t\t{\r\n\t\t\t\t// LOAD(<defined variables>);\r\n\t\t\t\trtVariables.EmitLoad(il);\r\n\t\t\t\tpushedArgsCount++;\r\n\t\t\t}\r\n\r\n\t\t\tif (namingContext != null)\r\n\t\t\t{\r\n\t\t\t\t// LOAD(<naming context>);\r\n\t\t\t\tnamingContext.EmitLoad(il);\r\n\t\t\t\tpushedArgsCount++;\r\n\t\t\t}\r\n\r\n            if (classContext != null)\r\n            {\r\n                // LOAD(<class_context>)\r\n                classContext.EmitLoad(il);\r\n                pushedArgsCount++;\r\n            }\r\n\r\n\t\t\t// loads mandatory arguments:\r\n\t\t\tfor (int i = 0; i < phpParamCount; i++)\r\n\t\t\t{\r\n\t\t\t\tEmitMandatoryArgumentLoad(i, ps[pushedArgsCount]);\r\n\t\t\t\tpushedArgsCount++;\r\n\t\t\t}\r\n\r\n\t\t\t// loads optional arguments:\r\n\t\t\tif (optArgs != null)\r\n\t\t\t{\r\n\t\t\t\tloadOptParams(this, phpParamCount, ps[ps.Length - 1], optArgs);\r\n\t\t\t\tpushedArgsCount++;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(pushedArgsCount == ps.Length);\r\n\r\n\t\t\t// all class library functions are args-unaware => remove frame if using stack:\r\n\t\t\tif (stack != null)\r\n\t\t\t{\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t}\r\n\r\n\t\t\t// CALL STATIC <overload>(items on STACK);\r\n\t\t\til.Emit(OpCodes.Call, method);\r\n\r\n            // the result value is on the top of the evaluation stack\r\n\r\n\t\t\t//IPlace return_value = null;\r\n\r\n\t\t\t// stores return value an tmp. variable:\r\n            //if (method.ReturnType != Types.Void)\r\n            //{\r\n            //    LocalBuilder loc = il.DeclareLocal(method.ReturnType);\r\n            //    return_value = new Place(loc);\r\n\r\n            //    // stores the result of a call to local:\r\n            //    il.Stloc(loc);\r\n            //}\r\n\r\n\t\t\t// updates arguments passed by reference:\r\n\t\t\tEmitReferencesLoad();\r\n\r\n            // An argument loader can jump here if method call should be skipped.\r\n\t\t\t// In such a case return_value local will have default value (since locals are initialized).\r\n\t\t\til.MarkLabel(overloadCallEndLabel);\r\n\r\n            // [CastToFalse] or [PhpDeepCopy]\r\n            if (!ignoringReturnValue)\r\n            {\r\n                // converts return value (deep copy, cast to false):\r\n                EmitReturnValueConversion(method, ref return_type);\r\n            }\r\n            \r\n            // free the skip emitter, to not be used incidentally again\r\n            overloadCallSkipEmitter = null;\r\n\r\n            return return_type;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Argument Loading\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits load of a specified mandatory argument and appropriate conversions on it.\r\n\t\t/// Leaves the result on the evaluation stack so it can be later passed as an argument to a method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"index\">The index of the parameter counted from zero.</param>\r\n\t\t/// <param name=\"param\">The parameter.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Arguments passed by object reference (ref/out) are handled in the manner of in/out semantics.\r\n\t\t/// If the argument is passed by object reference a holder local variable of the smae type is created.\r\n\t\t/// A reference passed as the actual argument is peeked from PHP stack, converted to the target type by \r\n\t\t/// <see cref=\"EmitArgumentConversion\"/> and stored in the holder. Then the holder's address is passed\r\n\t\t/// to the overload. On the return from the overload each holder's value is stored back to \r\n\t\t/// the actual argument by <see cref=\"EmitReferencesLoad\"/>. In order to do so holder local variable builders\r\n\t\t/// and the local variables builders storing the actual argument are added to <see cref=\"refHolders\"/> and \r\n\t\t/// <see cref=\"refReferences\"/>, respectively, by this method.\r\n\t\t/// </remarks>\r\n\t\tprivate void EmitMandatoryArgumentLoad(int index, ParameterInfo param)\r\n\t\t{\r\n\t\t\tType formal_type = param.ParameterType;\r\n\r\n\t\t\tif (formal_type.IsByRef)\r\n\t\t\t{\r\n\t\t\t\t// declares holder:\r\n\t\t\t\tType elem_type = formal_type.GetElementType();\r\n\t\t\t\tLocalBuilder ref_loc = il.DeclareLocal(Types.PhpReference[0]);\r\n\t\t\t\tLocalBuilder holder_loc = il.DeclareLocal(elem_type);\r\n\r\n\t\t\t\t// emits reference argument peeking:\r\n\t\t\t\t// ref = <load reference parameter>\r\n\t\t\t\tloadReferenceParam(il, index, this.aux, param);\r\n\t\t\t\til.Stloc(ref_loc);\r\n\r\n\t\t\t\t// loads a value to the holder if parameter is not out-only:\r\n\t\t\t\tif (!param.IsOut)\r\n\t\t\t\t{\r\n\t\t\t\t\t// gets referenced value (loadReferenceParam guarantees that the reference is not null):\r\n\t\t\t\t\t// LOAD(ref.value);\r\n\t\t\t\t\til.Ldloc(ref_loc);\r\n\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\r\n\t\t\t\t\t// emits conversion stuff, loads to holder (actual type is always object);\r\n\t\t\t\t\t// implicit cast of types PhpArray, PhpObject, and PhpResource is allowed and not checked:\r\n\t\t\t\t\tEmitArgumentConversion(elem_type, typeof(object), true, param);\r\n\t\t\t\t\til.Stloc(holder_loc);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// LOAD(&holder);\r\n\t\t\t\til.Ldloca(holder_loc);\r\n\r\n\t\t\t\t// adds holder to the list of holders:\r\n\t\t\t\trefHolders.Add(holder_loc);\r\n\t\t\t\trefReferences.Add(ref_loc);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobject type_or_value;\r\n\t\t\t\tif (formal_type == typeof(PhpReference))\r\n\t\t\t\t{\r\n\t\t\t\t\t// LOAD <load reference parameter>\r\n\t\t\t\t\ttype_or_value = loadReferenceParam(il, index, this.aux, param);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// LOAD <load value parameter>\r\n                    type_or_value = loadValueParam(il, index, this.aux, param);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// emits conversion stuff:\r\n\t\t\t\tEmitArgumentConversion(formal_type, type_or_value, false, param);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code loading values stored in holder variables into respective references.\r\n\t\t/// </summary>\r\n\t\tpublic void EmitReferencesLoad()\r\n\t\t{\r\n\t\t\tDebug.Assert(refHolders.Count == refReferences.Count);\r\n\r\n\t\t\tfor (int i = 0; i < refHolders.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder holder_loc = (LocalBuilder)refHolders[i];\r\n\t\t\t\tLocalBuilder ref_loc = (LocalBuilder)refReferences[i];\r\n\r\n\t\t\t\t// ref.value = {holder | BOX(holder)};\r\n\t\t\t\til.Ldloc(ref_loc);\r\n\t\t\t\til.Ldloc(holder_loc);\r\n\r\n\t\t\t\tif (holder_loc.LocalType.IsValueType)\r\n\t\t\t\t\til.Emit(OpCodes.Box, holder_loc.LocalType);\r\n\r\n\t\t\t\til.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n\t\t\t}\r\n\r\n\t\t\trefHolders.Clear();\r\n\t\t\trefReferences.Clear();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Argument Conversion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code converting argument on the evaluation stack to a specified type using PHP.NET library conversions. \r\n\t\t/// Used for conversion of elements of params array optional arguments,\r\n\t\t/// for conversion of a content of mandatory by-ref holder, and\r\n\t\t/// for conversion of mandatory in argument.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dstType\">\r\n\t\t/// The type of the formal argument. Shouldn't be <see cref=\"Type.IsByRef\"/>.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"srcTypeOrValue\">\r\n\t\t/// The type of the formal argument or its value if it is a literal.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"allowImplicitCast\">Whether to allow implicit cast of types PhpArray, PhpObject, PhpResource.</param>\r\n\t\t/// <param name=\"param\">The formal argument description.</param>\r\n        /// <param name=\"additionalValuesOnStackCount\">Amount of values pushed on stackl, that have to be cleaned up in case of failed conversion.</param>\r\n\t\tinternal void EmitArgumentConversion(Type dstType, object srcTypeOrValue, bool allowImplicitCast, ParameterInfo param, int additionalValuesOnStackCount = 0)\r\n\t\t{\r\n\t\t\tDebug.Assert(!dstType.IsByRef);\r\n\r\n\t\t\tType src_type = srcTypeOrValue as Type;\r\n\r\n\t\t\t// passing void parameter is the same as passing null reference:\r\n\t\t\tif (src_type == Types.Void)\r\n\t\t\t{\r\n\t\t\t\tsrcTypeOrValue = null;\r\n\t\t\t\tsrc_type = null;\r\n\t\t\t}\r\n\r\n\t\t\t// unites treatment of enums and ints:\r\n\t\t\tif (src_type != null && src_type.IsEnum) src_type = typeof(int);\r\n\t\t\tif (dstType.IsEnum) dstType = typeof(int);\r\n\r\n\t\t\t// no conversions needed:\r\n\t\t\tif (dstType == src_type)\r\n\t\t\t{\r\n\t\t\t\t// deep copy if needed (doesn't produce unnecessary copying):\r\n\t\t\t\tif (param.IsDefined(typeof(PhpDeepCopyAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL (<dstType>)PhpVariable.Copy(STACK,CopyReason.PassedByCopy);\r\n\t\t\t\t\til.LdcI4((int)CopyReason.PassedByCopy);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\r\n\t\t\t\t\tif (dstType != typeof(object))\r\n\t\t\t\t\t\til.Emit(OpCodes.Castclass, dstType);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// if dst type is reference then src type should be also a reference \r\n\t\t\t// (reference - reference combination was eliminated in previous statement):\r\n\t\t\tDebug.Assert(dstType != typeof(PhpReference), \"Formal type cannot be reference if actual is not.\");\r\n\r\n\t\t\t// dereferences a reference:\r\n\t\t\tif (src_type == typeof(PhpReference))\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\tsrc_type = typeof(object);\r\n\t\t\t}\r\n\r\n\t\t\t#region dst is integer, long integer, bool, double, string, PhpBytes, char\r\n\r\n\t\t\t// to integer (can be loaded from literal):\r\n\t\t\tif (dstType == typeof(int))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.LdcI4(Convert.ObjectToInteger(srcTypeOrValue));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToInteger);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// to long integer (can be loaded from literal):\r\n\t\t\tif (dstType == typeof(long))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.LdcI8(Convert.ObjectToLongInteger(srcTypeOrValue));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToLongInteger);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// to boolean (can be loaded from literal):\r\n\t\t\tif (dstType == typeof(bool))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.LdcI4(Convert.ObjectToBoolean(srcTypeOrValue) ? 1 : 0);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToBoolean);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// to double (can be loaded from literal):\r\n\t\t\tif (dstType == typeof(double))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_R8, Convert.ObjectToDouble(srcTypeOrValue));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToDouble);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// to string (can be loaded from literal):\r\n\t\t\tif (dstType == typeof(string))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldstr, Convert.ObjectToString(srcTypeOrValue));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToString);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n            // to bytes:\r\n            if (dstType == typeof(PhpBytes))\r\n            {\r\n                if (src_type == null)\r\n                {\r\n                    il.EmitLoadPhpBytes(Convert.ObjectToPhpBytes(srcTypeOrValue));\r\n                }\r\n                else\r\n                {\r\n                    // boxing and conversion:\r\n                    if (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n                    il.Emit(OpCodes.Call, Methods.Convert.ObjectToPhpBytes);\r\n                }\r\n                return;\r\n            }\r\n\r\n            // to char:\r\n\t\t\tif (dstType == typeof(char))\r\n\t\t\t{\r\n\t\t\t\tif (src_type == null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.LdcI4((int)Convert.ObjectToChar(srcTypeOrValue));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// boxing and conversion:\r\n\t\t\t\t\tif (src_type.IsValueType) il.Emit(OpCodes.Box, src_type);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToChar);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t// further conversions doesn't work with empty stack => loads literal on eval stack:\r\n\t\t\tif (src_type == null)\r\n\t\t\t\tsrc_type = il.LoadLiteral(srcTypeOrValue);\r\n\r\n\t\t\tif (src_type.IsValueType)\r\n\t\t\t\til.Emit(OpCodes.Box, src_type);\r\n\r\n\t\t\t// to callback:\r\n\t\t\tif (dstType == typeof(PhpCallback))\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Convert.ObjectToCallback);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(!dstType.IsValueType);\r\n\r\n\t\t\tif (param.IsDefined(typeof(PhpDeepCopyAttribute), false))\r\n\t\t\t{\r\n\t\t\t\t// do not copy literals:\r\n\t\t\t\tif (!src_type.IsValueType && src_type != typeof(string))\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL (<src_type>)PhpVariable.Copy(STACK,CopyReason.PassedByCopy);\r\n\t\t\t\t\til.LdcI4((int)CopyReason.PassedByCopy);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\r\n\t\t\t\t\t// src_type was on the eval. stack before copy was called:\r\n\t\t\t\t\tif (src_type != typeof(object))\r\n\t\t\t\t\t\til.Emit(OpCodes.Castclass, src_type);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// to object:\r\n\t\t\tif (dstType == typeof(object)) return;\r\n\r\n            //\r\n            // cast the value to the target type\r\n            //\r\n            if (allowImplicitCast)\r\n            {\r\n                // cast the value, without the checking of the success\r\n                il.Emit(OpCodes.Isinst, dstType);\r\n            }\r\n            else\r\n            {\r\n                // if implicit cast is not allowed => a condition checking the result of the cast\r\n                // is emitted (conditional call to InvalidImplicitCast)\r\n\r\n                // conversion of array, object, and resource:\r\n                string type_name = PhpVariable.GetAssignableTypeName(dstType);\r\n\r\n                Label endif_label = il.DefineLabel();\r\n                Label endblock_label = il.DefineLabel();\r\n\r\n                //LocalBuilder loc_typed = null;\r\n                bool needsCast;\r\n                LocalBuilder loc_obj = il.DeclareLocal(typeof(object));\r\n                il.Emit(OpCodes.Dup);\r\n                il.Stloc(loc_obj);\r\n                \r\n                // IF (obj == null) goto ENDIF;\r\n                il.Emit(OpCodes.Dup);\r\n                il.Emit(OpCodes.Ldnull);\r\n                il.Emit(OpCodes.Beq_S, endblock_label);\r\n\r\n                // (obj) on top of eval stack, eat it:\r\n\r\n                if (dstType.IsSealed)\r\n                {\r\n                    needsCast = true;\r\n                    // if (<obj>.GetType() == typeof(<dstType>)) goto ENDIF;    // little JIT hack\r\n                    il.Emit(OpCodes.Dup);                \r\n                    il.Emit(OpCodes.Callvirt, Methods.Object_GetType);\r\n                    il.Emit(OpCodes.Ldtoken, dstType);\r\n                    il.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n                    il.Emit(OpCodes.Call, Methods.Equality_Type_Type);\r\n                    il.Emit(OpCodes.Brtrue, endif_label);\r\n                    \r\n                    // (object)<obj> on stack\r\n                }\r\n                else\r\n                {\r\n                    needsCast = false;\r\n\r\n                    //loc_typed = il.DeclareLocal(dstType);\r\n\r\n                    // <loc_typed> = <obj> as <dstType>:\r\n                    il.Emit(OpCodes.Isinst, dstType);\r\n                    //il.Stloc(loc_typed);\r\n\r\n                    // (obj as dstType) is on top of the evaluation stack\r\n\r\n                    // IF (obj!=null) goto ENDIF;\r\n                    il.Emit(OpCodes.Dup);\r\n                    il.Emit(OpCodes.Brtrue_S, endif_label);\r\n\r\n                    // (<obj> as <dstType>) on stack\r\n                }\r\n\r\n                if (true)\r\n                {\r\n                    il.Emit(OpCodes.Pop);   // pops <obj> from stack\r\n\r\n                    // CALL PhpException.InvalidImplicitCast(obj,<PhpTypeName>,<functionName>);\r\n                    il.Ldloc(loc_obj);      // pushes original <obj>\r\n                    il.Emit(OpCodes.Ldstr, type_name);\r\n                    il.Emit(OpCodes.Ldstr, this.functionName.ToString());\r\n                    il.Emit(OpCodes.Call, Methods.PhpException.InvalidImplicitCast);\r\n                    \r\n                    if (debug)\r\n                        il.Emit(OpCodes.Nop);\r\n\r\n                    // pops all arguments already pushed:\r\n                    int popsCount = pushedArgsCount + additionalValuesOnStackCount;\r\n                    for (int i = 0; i < popsCount; ++i)\r\n                        il.Emit(OpCodes.Pop);\r\n                    \r\n                    Debug.Assert(overloadCallSkipEmitter != null);\r\n\r\n                    // GOTO <end of call>;\r\n                    //il.Emit(OpCodes.Br, overloadCallEndLabel);\r\n                    overloadCallSkipEmitter(il);\r\n                }\r\n\r\n                // ENDIF;\r\n                il.MarkLabel(endif_label);\r\n\r\n                // load <obj>\r\n                if (needsCast)\r\n                {\r\n                    // cast <obj> from top of the stack\r\n                    il.Emit(OpCodes.Castclass, dstType);\r\n                }\r\n\r\n                // ENDBLOCK:\r\n                il.MarkLabel(endblock_label);\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Return Value Conversion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code handling return value conversions. The value is on the top of the evaluation stack.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The method which return value conversion to emit.</param>\r\n        /// <param name=\"return_type\">A type of return value (that is on the top of evaluation stack) to be converted.</param>\r\n        public void EmitReturnValueConversion(MethodInfo method, ref Type/*!*/return_type)\r\n\t\t{\r\n            if (return_type == null || return_type == Types.Void)\r\n                return; // nothing to be converted\r\n\r\n\t\t\t// whether to emit cast to false:\r\n\t\t\tif (method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false))\r\n\t\t\t{\r\n\t\t\t\tLabel else_label = il.DefineLabel();\r\n\t\t\t\tLabel endif_label = il.DefineLabel();\r\n\r\n\t\t\t\t// IF(return_value==-1 or null) THEN\r\n\t\t\t\t//returnValue.EmitLoad(il);\r\n                il.Emit(OpCodes.Dup);\r\n                EmitCastShortBranch(return_type, else_label);\r\n\t\t\t\tif (true)\r\n\t\t\t\t{\r\n                    // pop value\r\n                    il.Emit(OpCodes.Pop);\r\n\r\n\t\t\t\t\t// BOX false;\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\t\til.Emit(OpCodes.Box, typeof(bool));\r\n\r\n\t\t\t\t\t// BR endif;\r\n\t\t\t\t\til.Emit(OpCodes.Br_S, endif_label);\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.MarkLabel(else_label);\r\n\r\n\t\t\t\t// ELSE\r\n\r\n\t\t\t\t//il.LoadBoxed(returnValue);\r\n                if (return_type.IsValueType)\r\n                    il.Emit(OpCodes.Box, return_type);\r\n\r\n\t\t\t\til.MarkLabel(endif_label);\r\n\r\n\t\t\t\t// END IF;\r\n\r\n\t\t\t\t// STORE returnValue,STACK\r\n                //LocalBuilder loc_return_value = il.DeclareLocal(typeof(object));\r\n                //il.Stloc(loc_return_value);\r\n                //returnValue = new Place(loc_return_value);\r\n\r\n                return_type = typeof(object);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t// deep copy:\r\n                if (method.ReturnTypeCustomAttributes.IsDefined(typeof(PhpDeepCopyAttribute), false) && !return_type.IsValueType)\r\n\t\t\t\t{\r\n\t\t\t\t\t// returnValue = (<returnType>)PhpVariable.Copy(returnValue,CopyReason.ReturnedByCopy);\r\n\r\n\t\t\t\t\t//returnValue.EmitLoad(il);\r\n                    il.LdcI4((int)CopyReason.ReturnedByCopy);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\r\n                    if (return_type != typeof(object))\r\n                        il.Emit(OpCodes.Castclass, return_type);\r\n                    \r\n                    //returnValue.EmitStore(il);\r\n\t\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits casting to false branch. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"returnType\">A return type.</param>\r\n\t\t/// <param name=\"noCastLabel\">The label where to jump if the cast doesn't take place.</param>\r\n\t\tprivate void EmitCastShortBranch(Type returnType, Label noCastLabel)\r\n\t\t{\r\n\t\t\tif (returnType == typeof(int))\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_M1);                   // load -1\r\n\t\t\t\til.Emit(OpCodes.Bne_Un_S, noCastLabel);       // branch if not equal\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Brtrue_S, noCastLabel);       // branch if not null\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emits load of default value assuming given method fails.\r\n        /// </summary>\r\n        /// <param name=\"il\">ILEmitter.</param>\r\n        /// <param name=\"method\">Method which default return value have to be loaded.</param>\r\n        /// <returns></returns>\r\n        public static PhpTypeCode EmitLoadDefault(ILEmitter/*!*/il, MethodInfo/*!*/method)\r\n        {\r\n            if (method.ReturnType == Types.Bool[0] || method.ReturnTypeCustomAttributes.IsDefined(typeof(CastToFalseAttribute), false))\r\n            {\r\n                il.LoadBool(false);\r\n                return PhpTypeCode.Boolean;\r\n            }\r\n\r\n            if (method.ReturnType == Types.Int[0])\r\n            {\r\n                il.LdcI4(0);\r\n                return PhpTypeCode.Integer;\r\n            }\r\n\r\n            return PhpTypeCode.Void;\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/PhpObjectBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing PHP.Core.AST;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// Utilities for emitting PHP classes.\r\n\t/// </summary>\r\n\tpublic static class PhpObjectBuilder\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Used by the <c>WrapperGen</c> to generate the <see cref=\"PopulateTypeDescMethodName\"/> method.\r\n\t\t/// </summary>\r\n\t\tpublic struct InfoWithAttributes<T> where T : MemberInfo\r\n\t\t{\r\n\t\t\tpublic InfoWithAttributes(T info, PhpMemberAttributes attributes)\r\n\t\t\t{\r\n\t\t\t\tthis.Info = info;\r\n\t\t\t\tthis.Attributes = attributes;\r\n\t\t\t}\r\n\r\n\t\t\tpublic T Info;\r\n\t\t\tpublic PhpMemberAttributes Attributes;\r\n\t\t}\r\n\r\n\t\t#region Helper member names\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the method that initializes (thread) static fields.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This name does not have the &lt;x&gt; format in order to be a valid C# identifier.</remarks>\r\n\t\tpublic const string StaticFieldInitMethodName = \"__InitializeStaticFields\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the method that populates the typedesc corresponding to the type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>This name does not have the &lt;x&gt; format in order to be a valid C# identifier.</remarks>\r\n\t\tpublic const string PopulateTypeDescMethodName = \"__PopulateTypeDesc\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the method that initializes instance fields.\r\n\t\t/// </summary>\r\n\t\tpublic const string InstanceFieldInitMethodName = \"<InitializeInstanceFields>\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the field that contains reference to the corresponding <see cref=\"PhpTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeDescFieldName = \"<typeDesc>\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the field that contains reference to the corresponding <see cref=\"ClrObject\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string ProxyFieldName = \"<proxy>\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Constructors\r\n\r\n\t\tinternal const MethodAttributes DefaultConstructorAttributes = MethodAttributes.Public | MethodAttributes.SpecialName |\r\n\t\t\tMethodAttributes.RTSpecialName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attributes used while creating the short constructor of the class.\r\n\t\t/// </summary>\r\n\t\tinternal const MethodAttributes ShortConstructorAttributes = MethodAttributes.Public | MethodAttributes.SpecialName |\r\n\t\t\tMethodAttributes.RTSpecialName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parameter types of the short constructor.\r\n\t\t/// </summary>\r\n\t\tinternal static readonly Type[] ShortConstructorParamTypes = Types.ScriptContext_Bool;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attributes used while creating the long constructor of the class.\r\n\t\t/// </summary>\r\n\t\tinternal const MethodAttributes LongConstructorAttributes = MethodAttributes.Public | MethodAttributes.SpecialName |\r\n\t\t\tMethodAttributes.RTSpecialName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parameter types of the long constructor.\r\n\t\t/// </summary>\r\n\t\tinternal static readonly Type[] LongConstructorParamTypes = Types.ScriptContext_DTypeDesc;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attributes used while creating the deserializing constructor of the class.\r\n\t\t/// </summary>\r\n\t\tinternal const MethodAttributes DeserializingConstructorAttributes = MethodAttributes.Family |\r\n\t\t\tMethodAttributes.SpecialName | MethodAttributes.RTSpecialName;\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Parameter types of the deserializing constructor.\r\n\t\t/// </summary>\r\n\t\tinternal static readonly Type[] DeserializingConstructorParamTypes = Types.SerializationInfo_StreamingContext;\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits constructors into a class.\r\n\t\t/// </summary>\r\n\t\tinternal static void EmitClassConstructors(PhpType/*!*/ phpType)\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\tEmitDeserializingConstructor(phpType);\r\n#endif\r\n\t\t\tEmitShortConstructor(phpType);\r\n\t\t\tEmitLongConstructor(phpType);\r\n\r\n            EmitFinalizer(phpType);\r\n\r\n\t\t\t// emit CLR-friendly constructors based on the PHP constructor method effective for the type\r\n\t\t\tif (phpType.IsExported)\r\n\t\t\t\tEmitExportedConstructors(phpType);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emit the PhpType finalizer. The finalizer is emitted only if there is __destruct() function\r\n        /// and there is no finalizer in any base class already. The finalizer calls this.Dispose() which\r\n        /// calls __destruct() function directly.\r\n        /// </summary>\r\n        /// <param name=\"phpType\"></param>\r\n        private static void EmitFinalizer(PhpType/*!*/phpType)\r\n        {\r\n            // only if __destruct was now defined in some base class, no need to override existing definition on Finalize\r\n            DRoutine basedestruct;\r\n            DRoutineDesc destruct;\r\n            if ((destruct = phpType.TypeDesc.GetMethod(Name.SpecialMethodNames.Destruct)) != null && (phpType.Base == null ||\r\n                phpType.Base.GetMethod(Name.SpecialMethodNames.Destruct, phpType, out basedestruct) == GetMemberResult.NotFound))\r\n            {\r\n                MethodBuilder finalizer_builder = phpType.RealTypeBuilder.DefineMethod(\"Finalize\", MethodAttributes.HideBySig | MethodAttributes.Virtual | MethodAttributes.Family, typeof(void), Type.EmptyTypes);\r\n                \r\n                ILEmitter dil = new ILEmitter(finalizer_builder);\r\n\r\n                // exact Finalize() method pattern follows:\r\n\r\n                // try\r\n                dil.BeginExceptionBlock();\r\n\r\n                // this.Dispose(false)\r\n                dil.Emit(OpCodes.Ldarg_0);\r\n                dil.Emit(OpCodes.Ldc_I4_0);\r\n                dil.Emit(OpCodes.Callvirt, PHP.Core.Emit.Methods.DObject_Dispose);\r\n\r\n                // finally\r\n                dil.BeginFinallyBlock();\r\n\r\n                // Object.Finalize()\r\n                dil.Emit(OpCodes.Ldarg_0);\r\n                dil.Emit(OpCodes.Call, PHP.Core.Emit.Methods.Object_Finalize);\r\n\r\n                dil.EndExceptionBlock();\r\n\r\n                dil.Emit(OpCodes.Ret);\r\n            }\r\n        }\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Emits deserializing (SerializiationInfo, StreamingContext) constructor.\r\n\t\t/// </summary>\r\n\t\tprivate static void EmitDeserializingConstructor(PhpType/*!*/ phpType)\r\n\t\t{\r\n\t\t\t// (SerializationInfo, StreamingContext) constructor\r\n\t\t\tConstructorBuilder ctor_builder = phpType.DeserializingConstructorBuilder;\r\n\r\n\t\t\tif (ctor_builder != null)\r\n\t\t\t{\r\n\t\t\t\tILEmitter cil = new ILEmitter(ctor_builder);\r\n\r\n\t\t\t\tif (phpType.Base == null) EmitInvokePhpObjectDeserializingConstructor(cil);\r\n\t\t\t\telse phpType.Base.EmitInvokeDeserializationConstructor(cil, phpType, null);\r\n\r\n\t\t\t\t// [ __InitializeStaticFields(context) ]\r\n\t\t\t\tcil.Emit(OpCodes.Call, Methods.ScriptContext.GetCurrentContext);\r\n\r\n\t\t\t\tcil.EmitCall(OpCodes.Call, phpType.StaticFieldInitMethodInfo, null);\r\n\t\t\t\tcil.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits (ScriptContext, bool) constructor.\r\n\t\t/// </summary>\r\n\t\tprivate static void EmitShortConstructor(PhpType/*!*/ phpType)\r\n\t\t{\r\n\t\t\t// (ScriptContext,bool) constructor\r\n\t\t\tConstructorBuilder ctor_builder = phpType.ShortConstructorBuilder;\r\n\r\n\t\t\tctor_builder.DefineParameter(1, ParameterAttributes.None, \"context\");\r\n\t\t\tctor_builder.DefineParameter(2, ParameterAttributes.None, \"newInstance\");\r\n\t\t\tILEmitter cil = new ILEmitter(ctor_builder);\r\n\r\n\t\t\t// invoke base constructor\r\n\t\t\tif (phpType.Base == null) EmitInvokePhpObjectConstructor(cil);\r\n\t\t\telse phpType.Base.EmitInvokeConstructor(cil, phpType, null);\r\n\r\n\t\t\t// perform fast DObject.<typeDesc> init if we are in its subclass\r\n\t\t\tif (phpType.Root is PhpType)\r\n\t\t\t{\r\n\t\t\t\t// [ if (GetType() == typeof(self)) this.typeDesc = self.<typeDesc> ]\r\n\t\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\t\tcil.Emit(OpCodes.Call, Methods.Object_GetType);\r\n\t\t\t\tcil.Emit(OpCodes.Ldtoken, phpType.RealTypeBuilder);\r\n\t\t\t\tcil.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n\r\n\t\t\t\tLabel label = cil.DefineLabel();\r\n\t\t\t\tcil.Emit(OpCodes.Bne_Un_S, label);\r\n                if (true)\r\n                {\r\n                    cil.Ldarg(FunctionBuilder.ArgThis);\r\n                    cil.Emit(OpCodes.Ldsfld, phpType.TypeDescFieldInfo);\r\n                    cil.Emit(OpCodes.Stfld, Fields.DObject_TypeDesc);\r\n                    cil.MarkLabel(label);\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\t// register this instance for finalization if it introduced the __destruct method\r\n\t\t\tDRoutine destruct;\r\n            if (phpType.TypeDesc.GetMethod(Name.SpecialMethodNames.Destruct) != null && (phpType.Base == null ||\r\n                phpType.Base.GetMethod(Name.SpecialMethodNames.Destruct, phpType, out destruct) == GetMemberResult.NotFound))\r\n\t\t\t{\r\n\t\t\t\tcil.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\r\n\t\t\t\tif (phpType.ProxyFieldInfo != null) cil.Emit(OpCodes.Ldfld, phpType.ProxyFieldInfo);\r\n\r\n\t\t\t\tcil.Emit(OpCodes.Call, Methods.ScriptContext.RegisterDObjectForFinalization);\r\n\t\t\t}\r\n\r\n\t\t\t// [ <InitializeInstanceFields>(arg1) ]\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\tcil.EmitCall(OpCodes.Call, phpType.Builder.InstanceFieldInit, null);\r\n\r\n\t\t\t// [ __InitializeStaticFields(arg1) ]\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\tcil.EmitCall(OpCodes.Call, phpType.StaticFieldInitMethodInfo, null);\r\n\r\n\t\t\tcil.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits (ScriptContext, DTypeDesc) constructor.\r\n\t\t/// </summary>\r\n\t\tprivate static void EmitLongConstructor(PhpType/*!*/ phpType)\r\n\t\t{\r\n\t\t\t// (ScriptContext, DTypeDesc) constructor\r\n\t\t\tConstructorBuilder ctor_builder = phpType.LongConstructorBuilder;\r\n\r\n\t\t\tctor_builder.DefineParameter(1, ParameterAttributes.None, \"context\");\r\n\t\t\tctor_builder.DefineParameter(2, ParameterAttributes.None, \"caller\");\r\n\r\n\t\t\t// [ this(arg1,true) ]\r\n\t\t\tILEmitter cil = new ILEmitter(ctor_builder);\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\tcil.LdcI4(1);\r\n\t\t\tcil.Emit(OpCodes.Call, phpType.ShortConstructorInfo);\r\n\r\n\t\t\tif (phpType.ProxyFieldInfo != null)\r\n\t\t\t{\r\n\t\t\t\t// [ <proxy>.InvokeConstructor(args) ]\r\n\t\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\t\tcil.Emit(OpCodes.Ldfld, phpType.ProxyFieldInfo);\r\n\t\t\t\tcil.Ldarg(1);\r\n\t\t\t\tcil.Ldarg(2);\r\n\t\t\t\tcil.Emit(OpCodes.Call, Methods.DObject_InvokeConstructor);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                // try to find constructor method and call it directly\r\n                // if it is publically visible without any reason to throw a warning in runtime\r\n                \r\n                DRoutineDesc construct = null; // = found constructor; if not null, can be called statically without runtime checks\r\n                bool constructorFound = false;\r\n\r\n                // try to find constructor\r\n                for (DTypeDesc type_desc = phpType.TypeDesc; type_desc != null; type_desc = type_desc.Base)\r\n                {\r\n                    construct = type_desc.GetMethod(Name.SpecialMethodNames.Construct);\r\n                    if (construct == null)\r\n                        construct = type_desc.GetMethod(new Name(type_desc.MakeSimpleName()));\r\n\r\n                    if (construct != null)\r\n                    {\r\n                        constructorFound = true;\r\n\r\n                        if (!construct.IsPublic || construct.IsStatic || construct.PhpRoutine == null || construct.PhpRoutine.ArgLessInfo == null)\r\n                            construct = null; // invalid constructor found, fall back to dynamic behavior\r\n                        \r\n                        break;\r\n                    }\r\n                }\r\n\r\n                // emit constructor call\r\n                if (construct != null)\r\n                {\r\n                    // publically visible not static constructor, can be called statically anywhere\r\n\r\n                    // [ __construct( this, context.Stack ) ]\r\n                    cil.Ldarg(FunctionBuilder.ArgThis);                         // this\r\n                    cil.Ldarg(1);\r\n                    cil.Emit(OpCodes.Ldfld, Emit.Fields.ScriptContext_Stack);   // context.Stack\r\n                    cil.Emit(OpCodes.Call, construct.PhpRoutine.ArgLessInfo);   // __construct\r\n                    cil.Emit(OpCodes.Pop);\r\n                }\r\n                else if (!constructorFound)  // there is no ctor at all\r\n                {\r\n                    // [ context.Stack.RemoveFrame() ]\r\n                    cil.Ldarg(1);\r\n                    cil.Emit(OpCodes.Ldfld, Emit.Fields.ScriptContext_Stack);       // context.Stack\r\n                    cil.Emit(OpCodes.Callvirt, Emit.Methods.PhpStack.RemoveFrame);  // .RemoveFrame\r\n                }\r\n                else\r\n                {\r\n                    // constructor should be checked in runtime (various visibility cases)\r\n                    // warnings can be displayed\r\n\r\n                    // [ InvokeConstructor(arg2) ]\r\n                    cil.Ldarg(FunctionBuilder.ArgThis);\r\n                    cil.Ldarg(1);\r\n                    cil.Ldarg(2);\r\n                    cil.Emit(OpCodes.Call, Methods.DObject_InvokeConstructor);\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\tcil.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\tprivate static void EmitExportedConstructor(PhpType/*!*/ phpType, ConstructorBuilder/*!*/ ctorStubBuilder,\r\n\t\t\tPhpMethod phpCtor, ParameterInfo[]/*!*/ parameters)\r\n\t\t{\r\n\t\t\t// set parameter names and attributes\r\n\t\t\tif (phpCtor != null)\r\n\t\t\t{\r\n\t\t\t\tClrStubBuilder.DefineStubParameters(\r\n\t\t\t\t\tctorStubBuilder,\r\n\t\t\t\t\tphpCtor.Builder.Signature.FormalParams,\r\n\t\t\t\t\tparameters);\r\n\t\t\t}\r\n\r\n\t\t\t// emit ctor body\r\n\t\t\tILEmitter cil = new ILEmitter(ctorStubBuilder);\r\n\r\n\t\t\t// [ this(ScriptContext.CurrentContext ]\r\n\t\t\tcil.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\tcil.EmitCall(OpCodes.Call, Methods.ScriptContext.GetCurrentContext, null);\r\n\r\n\t\t\tLocalBuilder sc_local = cil.DeclareLocal(Types.ScriptContext[0]);\r\n\t\t\tcil.Stloc(sc_local);\r\n\t\t\tcil.Ldloc(sc_local);\r\n\r\n\t\t\tcil.LdcI4(1);\r\n\t\t\tcil.Emit(OpCodes.Call, phpType.ShortConstructorInfo);\r\n\r\n\t\t\tif (phpCtor != null)\r\n\t\t\t{\r\n\t\t\t\t// invoke the PHP ctor method\r\n\t\t\t\tClrStubBuilder.EmitMethodStubBody(\r\n\t\t\t\t\tcil,\r\n\t\t\t\t\tnew Place(sc_local),\r\n\t\t\t\t\tparameters,\r\n\t\t\t\t\tnew GenericTypeParameterBuilder[0],\r\n\t\t\t\t\tTypes.Void,\r\n\t\t\t\t\tphpCtor,\r\n\t\t\t\t\tphpCtor.DeclaringType);\r\n\t\t\t}\r\n\t\t\telse cil.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\tprivate static void EmitExportedConstructors(PhpType/*!*/ phpType)\r\n\t\t{\r\n\t\t\tPhpMethod ctor = phpType.GetConstructor() as PhpMethod;\r\n\r\n\t\t\tforeach (StubInfo info in phpType.Builder.ClrConstructorStubs)\r\n\t\t\t{\r\n\t\t\t\tEmitExportedConstructor(\r\n\t\t\t\t\tphpType,\r\n\t\t\t\t\tinfo.ConstructorBuilder,\r\n\t\t\t\t\tctor,\r\n\t\t\t\t\tinfo.Parameters);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines CLR-friendly constructors based on a PHP &quot;constructor&quot; method.\r\n\t\t/// </summary>\r\n\t\tpublic static void DefineExportedConstructors(PhpType/*!*/ phpType)\r\n\t\t{\r\n            phpType.Builder.ClrConstructorStubs = new List<StubInfo>();\r\n\t\t\tPhpMethod ctor = phpType.GetConstructor() as PhpMethod;\r\n\r\n\t\t\tif (ctor == null)\r\n\t\t\t{\r\n\t\t\t\t// the class defines (nor inherits) no constructor -> create a parameter-less CLR constructor\r\n\t\t\t\tConstructorBuilder ctor_builder =\r\n\t\t\t\t\tphpType.RealTypeBuilder.DefineConstructor(\r\n\t\t\t\t\t\tDefaultConstructorAttributes,\r\n\t\t\t\t\t\tCallingConventions.Standard,\r\n\t\t\t\t\t\tType.EmptyTypes);\r\n\r\n\t\t\t\tphpType.ClrConstructorInfos = new ConstructorInfo[] { ctor_builder };\r\n\r\n\t\t\t\tphpType.Builder.ClrConstructorStubs.Add(\r\n\t\t\t\t\tnew StubInfo(ctor_builder, new ParameterInfo[0], StubInfo.EmptyGenericParameters, null));\r\n\t\t\t}\r\n            else if (!ctor.IsAbstract)\r\n            {\r\n                Debug.Assert(!ctor.IsStatic && ctor.Signature.GenericParamCount == 0);\r\n\r\n                if (ctor.Builder == null)\r\n                {\r\n                    // contructor not defined in this class\r\n                    phpType.ClrConstructorInfos = new ConstructorInfo[0];\r\n                    return;\r\n                }            \r\n\r\n                // infer constructor visibility\r\n                List<ConstructorInfo> ctor_infos = new List<ConstructorInfo>();\r\n                \r\n                MethodAttributes attr = Reflection.Enums.ToMethodAttributes(ctor.RoutineDesc.MemberAttributes);\r\n\r\n                foreach (StubInfo info in ClrStubBuilder.DefineMethodExportStubs(\r\n                    ctor, phpType,\r\n                    attr,\r\n                    true,\r\n                    delegate(string[] genericParamNames, object[] parameterTypes, object returnType)\r\n                    {\r\n                        // accept all overloads\r\n                        return true;\r\n                    }))\r\n                {\r\n                    phpType.Builder.ClrConstructorStubs.Add(info);\r\n\r\n                    // infos are returned in ascending order w.r.t. parameter count\r\n                    ctor_infos.Add(info.ConstructorBuilder);\r\n                }\r\n\r\n                phpType.ClrConstructorInfos = ctor_infos.ToArray();\r\n            }\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Generates the (<see cref=\"SerializationInfo\"/>, <see cref=\"StreamingContext\"/>) constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeBuilder\">The type builder.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Part of the constructor body - containing a call to parent's deserializing constructor - is generated.\r\n\t\t/// At least a <see cref=\"OpCodes.Ret\"/> has to be emitted to make the constructor complete.\r\n\t\t/// </remarks>\r\n\t\tpublic static ConstructorBuilder DefineDeserializingConstructor(TypeBuilder typeBuilder)\r\n\t\t{\r\n\t\t\tConstructorBuilder ctor_builder = typeBuilder.DefineConstructor(DeserializingConstructorAttributes,\r\n\t\t\t\tCallingConventions.Standard, DeserializingConstructorParamTypes);\r\n\r\n\t\t\t// define parameter names\r\n\t\t\tctor_builder.DefineParameter(1, ParameterAttributes.None, \"info\");\r\n\t\t\tctor_builder.DefineParameter(2, ParameterAttributes.None, \"context\");\r\n\r\n\t\t\t// call the base type's deserializing constructor\r\n\t\t\tILEmitter il = new ILEmitter(ctor_builder);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\t\t\til.Emit(OpCodes.Ldarg_2);\r\n\t\t\til.Emit(OpCodes.Call, typeBuilder.BaseType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance,\r\n\t\t\t\tnull, DeserializingConstructorParamTypes, null));\r\n\r\n\t\t\treturn ctor_builder;\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates the (<see cref=\"ScriptContext\"/>, <see cref=\"DTypeDesc\"/>) constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeBuilder\">The type builder.</param>\r\n\t\t/// <param name=\"shortConstructor\">This type's short constructor.</param>\r\n\t\t/// <returns>The constructor builder.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The entire constructor is generated. See <see cref=\"PHP.Core.PhpObject(PHP.Core.ScriptContext,DTypeDesc)\"/>.\r\n\t\t/// </remarks>\r\n\t\tpublic static ConstructorBuilder GenerateLongConstructor(TypeBuilder typeBuilder, ConstructorInfo shortConstructor)\r\n\t\t{\r\n\t\t\tConstructorBuilder ctor_builder = typeBuilder.DefineConstructor(LongConstructorAttributes,\r\n\t\t\t\tCallingConventions.Standard, LongConstructorParamTypes);\r\n\r\n\t\t\t// annotate with EditorBrowsable attribute\r\n#if !SILVERLIGHT // Not available on Silverlight\r\n\t\t\tctor_builder.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n\t\t\t// define parameter names\r\n\t\t\tctor_builder.DefineParameter(1, ParameterAttributes.None, \"context\");\r\n\t\t\tctor_builder.DefineParameter(2, ParameterAttributes.None, \"caller\");\r\n\r\n\t\t\t// call this type's short constructor\r\n\t\t\tILEmitter il = new ILEmitter(ctor_builder);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\til.LdcI4(1);\r\n\t\t\til.Emit(OpCodes.Call, shortConstructor);\r\n\r\n\t\t\t// call PhpObject.InvokeConstructor\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Ldarg(1);\r\n\t\t\til.Ldarg(2);\r\n\t\t\til.Emit(OpCodes.Call, Methods.DObject_InvokeConstructor);\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\treturn ctor_builder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines the (<see cref=\"ScriptContext\"/>) constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeBuilder\">The type builder.</param>\r\n\t\t/// <returns>The constructor builder.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Part of the constructor body - containing a call to parent's short constructor - is generated.\r\n\t\t/// At least an <see cref=\"OpCodes.Ret\"/> has to be emitted to make the constructor complete.\r\n\t\t/// </remarks>\r\n\t\tpublic static ConstructorBuilder DefineShortConstructor(TypeBuilder typeBuilder)\r\n\t\t{\r\n\t\t\tConstructorBuilder ctor_builder = typeBuilder.DefineConstructor(ShortConstructorAttributes,\r\n\t\t\t\tCallingConventions.Standard, ShortConstructorParamTypes);\r\n\r\n\t\t\t// annotate with EditorBrowsable attribute\r\n#if !SILVERLIGHT // Not available on Silverlight\r\n\t\t\tctor_builder.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n\t\t\t// define parameter names\r\n\t\t\tctor_builder.DefineParameter(1, ParameterAttributes.None, \"context\");\r\n\t\t\tctor_builder.DefineParameter(2, ParameterAttributes.None, \"newInstance\");\r\n\r\n\t\t\t// call the base type's short constructor\r\n\t\t\tILEmitter il = new ILEmitter(ctor_builder);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\til.Ldarg(2);\r\n\t\t\til.Emit(OpCodes.Call, typeBuilder.BaseType.GetConstructor(ShortConstructorParamTypes));\r\n\r\n\t\t\treturn ctor_builder;\r\n\t\t}\r\n\r\n\t\tprivate static void EmitInvokePhpObjectConstructor(ILEmitter/*!*/ il)\r\n\t\t{\r\n\t\t\t// [ base(arg1,arg2) ]\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Ldarg(FunctionBuilder.ArgContextInstance);\r\n\t\t\til.Ldarg(2);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Constructors.PhpObject.ScriptContext_Bool);\r\n\t\t}\r\n\r\n\t\tprivate static void EmitInvokePhpObjectDeserializingConstructor(ILEmitter/*!*/ il)\r\n\t\t{\r\n#if SILVERLIGHT // Not available on Silverlight\r\n\t\t\tDebug.Fail(\"Deserialization not supported!\");\r\n\t\t\tthrow new NotSupportedException(\"Deserialization not supported!\");\r\n#else\r\n\t\t\t// [ base(arg0, arg1, arg2) ]\r\n\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\t\t\til.Emit(OpCodes.Ldarg_2);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Constructors.PhpObject.SerializationInfo_StreamingContext);\r\n#endif\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Init field helpers\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits init field helpers (<c>__lastContext</c> field, <c>&lt;InitializeInstanceFields&gt;</c>\r\n\t\t/// method and <c>__InitializeStaticFields</c> into a class.\r\n\t\t/// </summary>\r\n\t\tinternal static void EmitInitFieldHelpers(PhpType phpType)\r\n\t\t{\r\n            //\r\n            // <InitializeInstanceFields>\r\n            //\r\n\r\n\t\t\t// <InitializeInstanceFields> method - will contain instance field initialization\r\n\t\t\tphpType.Builder.InstanceFieldInit = phpType.RealTypeBuilder.DefineMethod(\r\n\t\t\t\tInstanceFieldInitMethodName,\r\n#if SILVERLIGHT\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.HideBySig,\r\n#else\r\n\t\t\t\tMethodAttributes.Private | MethodAttributes.HideBySig,\r\n#endif\r\n\t\t\t\tCallingConventions.Standard,\r\n\t\t\t\tTypes.Void,\r\n\t\t\t\tTypes.ScriptContext);\r\n\t\t\tphpType.Builder.InstanceFieldInitEmitter = new ILEmitter(phpType.Builder.InstanceFieldInit);\r\n\r\n            //\r\n            // <InitializeStaticFields>\r\n            //\r\n\r\n\t\t\t// <InitializeStaticFields> method has already been defined during the analysis phase - will contain (thread)\r\n\t\t\t// static field initialization\r\n\t\t\tILEmitter cil = new ILEmitter(phpType.StaticFieldInitMethodBuilder);\r\n\r\n            if (phpType.Builder.HasThreadStaticFields)\r\n\t\t\t{\r\n\t\t\t\t// __lastContext thread-static field - will contain the last SC that inited static fields for this thread\r\n\t\t\t\tFieldBuilder last_context = phpType.RealTypeBuilder.DefineField(\r\n\t\t\t\t\t\"<lastScriptContext>\",\r\n\t\t\t\t\tTypes.ScriptContext[0],\r\n\t\t\t\t\tFieldAttributes.Private | FieldAttributes.Static);\r\n\r\n\t\t\t\t// SILVERLIGHT: Not sure what this does & what would be the right behavior...\r\n#if !SILVERLIGHT \r\n\t\t\t\tlast_context.SetCustomAttribute(AttributeBuilders.ThreadStatic);\r\n#endif\r\n                //\r\n                Label init_needed_label = cil.DefineLabel();\r\n\t\t\t\t// [ if (arg0 == __lastContext) ret ]\r\n\t\t\t\tcil.Emit(OpCodes.Ldarg_0);\r\n\t\t\t\tcil.Emit(OpCodes.Ldsfld, last_context);\r\n\t\t\t\tcil.Emit(OpCodes.Bne_Un_S, init_needed_label);\r\n\t\t\t\tcil.Emit(OpCodes.Ret);\r\n\t\t\t\t// [ __lastContext = arg0 ]\r\n\t\t\t\tcil.MarkLabel(init_needed_label);\r\n\t\t\t\tcil.Emit(OpCodes.Ldarg_0);\r\n\t\t\t\tcil.Emit(OpCodes.Stsfld, last_context);\r\n\r\n\t\t\t\t// the rest of the method is created when fields are emitted\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Type desc population\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates a <c>&lt;PopulateTypeDesc&gt;</c> method that populates a <see cref=\"DTypeDesc\"/>\r\n\t\t/// at runtime (instead of reflecting the class).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"phpType\">The class representation used in the compiler.</param>\r\n\t\tinternal static void GenerateTypeDescPopulation(PhpType phpType)\r\n\t\t{\r\n\t\t\tMethodBuilder populator = DefinePopulateTypeDescMethod(phpType.RealTypeBuilder);\r\n\t\t\tILEmitter il = new ILEmitter(populator);\r\n\r\n\t\t\t// methods\r\n\t\t\tforeach (KeyValuePair<Name, DRoutineDesc> pair in phpType.TypeDesc.Methods)\r\n\t\t\t{\r\n\t\t\t\tif (!pair.Value.IsAbstract)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitAddMethod(il, pair.Key.ToString(), pair.Value.MemberAttributes,\r\n\t\t\t\t\t\tpair.Value.PhpMethod.ArgLessInfo);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// fields\r\n\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in phpType.TypeDesc.Properties)\r\n\t\t\t{\r\n\t\t\t\tPhpField field = pair.Value.PhpField;\r\n\r\n\t\t\t\t// determine whether we need to add this field\r\n\t\t\t\tif (field.Implementor == field.DeclaringPhpType || field.UpgradesVisibility)\r\n\t\t\t\t{\r\n\t\t\t\t\tEmitAddProperty(il, phpType.Builder.RealOpenType, pair.Key.ToString(),\r\n\t\t\t\t\t\tpair.Value.MemberAttributes, field.RealField);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// constants\r\n\t\t\tforeach (KeyValuePair<VariableName, DConstantDesc> pair in phpType.TypeDesc.Constants)\r\n\t\t\t{\r\n\t\t\t\tEmitAddConstant(il, pair.Key.ToString(), pair.Value.ClassConstant);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Generates a <c>__PopulateTypeDesc</c> method that populates a <see cref=\"DTypeDesc\"/>\r\n        /// at runtime (instead of reflecting the class).\r\n        /// </summary>\r\n        /// <param name=\"typeBuilder\">The target <see cref=\"TypeBuilder\"/>.</param>\r\n        /// <param name=\"methods\">The methods to add to the type desc.</param>\r\n        /// <param name=\"fields\">The fields to add to the type desc.</param>\r\n        /// <param name=\"constants\">The constants to add to the type desc. Together with their value. (Consts are public static literal fields)</param>\r\n        /// <remarks>Used by WrapperGen.</remarks>\r\n        public static void GenerateTypeDescPopulation(TypeBuilder typeBuilder,\r\n            ICollection<InfoWithAttributes<MethodInfo>> methods,\r\n            ICollection<InfoWithAttributes<FieldInfo>> fields,\r\n            ICollection<KeyValuePair<FieldInfo, Object>> constants)\r\n        {\r\n            MethodBuilder populator = DefinePopulateTypeDescMethod(typeBuilder);\r\n            ILEmitter il = new ILEmitter(populator);\r\n\r\n            // methods\r\n            if (methods != null)\r\n            {\r\n                foreach (InfoWithAttributes<MethodInfo> info in methods)\r\n                {\r\n                    EmitAddMethod(il, info.Info.Name, info.Attributes, info.Info);\r\n                }\r\n            }\r\n\r\n            // fields\r\n            if (fields != null)\r\n            {\r\n                foreach (InfoWithAttributes<FieldInfo> info in fields)\r\n                {\r\n                    EmitAddProperty(il, info.Info.DeclaringType, info.Info.Name, info.Attributes, info.Info);\r\n                }\r\n            }\r\n\r\n            // constants\r\n            if (constants != null)\r\n            {\r\n                foreach (var info in constants)\r\n                {\r\n                    EmitAddConstant(il, info.Key.Name, info.Value);\r\n                }\r\n            }\r\n            il.Emit(OpCodes.Ret);\r\n        }\r\n\r\n\t\tprivate static void EmitAddMethod(ILEmitter il, string name, PhpMemberAttributes attributes, MethodInfo argless)\r\n\t\t{\r\n\t\t\t// [ typeDesc.AddMethod(\"method\", attributes, new RoutineDelegate(method)) ]\r\n\r\n\t\t\til.Ldarg(0);\r\n\t\t\til.Emit(OpCodes.Ldstr, name);\r\n\t\t\til.LdcI4((int)attributes);\r\n\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldftn, argless);\r\n\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.RoutineDelegate);\r\n\t\t\til.Emit(OpCodes.Call, Methods.AddMethod);\r\n\t\t}\r\n\r\n\t\tprivate static void EmitAddProperty(ILEmitter il, Type realOpenType, string name, PhpMemberAttributes attributes,\r\n\t\t\tFieldInfo field)\r\n\t\t{\r\n\t\t\t// [ typeDesc.AddProperty(\"field\", attributes, new GetterDelegate(getter), new SetterDelegate(setter)) ]\r\n\r\n\t\t\til.Ldarg(0);\r\n\t\t\til.Emit(OpCodes.Ldstr, name);\r\n\t\t\til.LdcI4((int)attributes);\r\n\r\n\t\t\tMethodInfo getter, setter;\r\n\t\t\tEmitFieldAccessors(\r\n\t\t\t\t(TypeBuilder)il.MethodBase.DeclaringType,\r\n\t\t\t\trealOpenType,\r\n\t\t\t\tfield,\r\n\t\t\t\tout getter,\r\n\t\t\t\tout setter);\r\n\r\n\t\t\t// getter\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldftn, getter);\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.GetterDelegate);\r\n\r\n\t\t\t// setter\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ldftn, setter);\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.SetterDelegate);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Methods.AddProperty);\r\n\t\t}\r\n\r\n        private static void EmitAddConstant(ILEmitter il, string name, object value)\r\n        {\r\n            // [ typeDesc.AddConstant(\"constant\", value) ]\r\n\r\n            //Debug.Assert(constant.IsStatic);\r\n\r\n            il.Ldarg(0);\r\n            il.Emit(OpCodes.Ldstr, name);\r\n            il.LoadLiteralBox(value);  // for non dynamic literal fields\r\n            //il.Emit(OpCodes.Ldsfld, constant);    // for non literal field only !\r\n\r\n            il.Emit(OpCodes.Call, Methods.AddConstant);\r\n        }\r\n\r\n\t\tprivate static void EmitAddConstant(ILEmitter/*!*/il, string/*!*/name, ClassConstant/*!*/constant)\r\n        {\r\n            // [ typeDesc.AddConstant(\"constant\", value) ]\r\n\r\n            il.Ldarg(0);\r\n            il.Emit(OpCodes.Ldstr, name);\r\n\r\n            if (constant.HasValue && constant.RealField.IsLiteral)\r\n            {\r\n                il.LoadLiteralBox(constant.Value);  // for non dynamic literal fields\r\n            }\r\n            else\r\n            {\r\n                il.Emit(OpCodes.Ldsfld, constant.RealField);    // for non literal field only !\r\n            }\r\n\r\n            il.Emit(OpCodes.Call, Methods.AddConstant);\r\n        }\r\n\r\n\t\tprivate static void EmitFieldAccessors(TypeBuilder typeBuilder, Type realOpenType, FieldInfo field,\r\n\t\t\tout MethodInfo getter, out MethodInfo setter)\r\n\t\t{\r\n\t\t\t// getter\r\n\t\t\tMethodBuilder getter_builder = typeBuilder.DefineMethod(\r\n\t\t\t\t\"<^Getter>\",\r\n#if SILVERLIGHT\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.Static,\r\n#else\r\n\t\t\t\tMethodAttributes.PrivateScope | MethodAttributes.Static,\r\n#endif\r\n\t\t\t\tTypes.Object[0],\r\n\t\t\t\tTypes.Object);\r\n\r\n\t\t\tgetter_builder.DefineParameter(1, ParameterAttributes.None, \"instance\");\r\n\r\n\t\t\tPhpFieldBuilder.EmitGetterStub(new ILEmitter(getter_builder), field, realOpenType);\r\n\r\n\t\t\t// setter\r\n\t\t\tMethodBuilder setter_builder = typeBuilder.DefineMethod(\r\n\t\t\t\t\"<^Setter>\",\r\n#if SILVERLIGHT\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.Static,\r\n#else\r\n\t\t\t\tMethodAttributes.PrivateScope | MethodAttributes.Static,\r\n#endif\r\n\t\t\t\tTypes.Void,\r\n\t\t\t\tTypes.Object_Object);\r\n\r\n\t\t\tsetter_builder.DefineParameter(1, ParameterAttributes.None, \"instance\");\r\n\t\t\tsetter_builder.DefineParameter(2, ParameterAttributes.None, \"value\");\r\n\r\n\t\t\tPhpFieldBuilder.EmitSetterStub(new ILEmitter(setter_builder), field, realOpenType);\r\n\r\n\t\t\tgetter = getter_builder;\r\n\t\t\tsetter = setter_builder;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utilities\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines the <c>__InitializeStaticFields</c> static method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeBuilder\">The <see cref=\"TypeBuilder\"/> to define the method in.</param>\r\n\t\t/// <returns>The <see cref=\"MethodBuilder\"/>.</returns>\r\n\t\tinternal static MethodBuilder DefineStaticFieldInitMethod(TypeBuilder typeBuilder)\r\n\t\t{\r\n\t\t\tMethodBuilder method_builder = typeBuilder.DefineMethod(\r\n\t\t\t\tStaticFieldInitMethodName,\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.Static,\r\n\t\t\t\tCallingConventions.Standard,\r\n\t\t\t\tTypes.Void,\r\n\t\t\t\tTypes.ScriptContext);\r\n\r\n#if !SILVERLIGHT \r\n\t\t\tmethod_builder.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\t\t\tmethod_builder.DefineParameter(1, ParameterAttributes.None, \"context\");\r\n\r\n\t\t\treturn method_builder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines the <c>__PopulateTypeDesc</c> static method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeBuilder\">The <see cref=\"TypeBuilder\"/> to define the method in.</param>\r\n\t\t/// <returns>The <see cref=\"MethodBuilder\"/>.</returns>\r\n\t\tinternal static MethodBuilder DefinePopulateTypeDescMethod(TypeBuilder typeBuilder)\r\n\t\t{\r\n\t\t\tMethodBuilder method_builder = typeBuilder.DefineMethod(\r\n\t\t\t\tPopulateTypeDescMethodName,\r\n#if SILVERLIGHT\r\n\t\t\t\tMethodAttributes.Public | MethodAttributes.Static,\r\n#else\r\n\t\t\t\tMethodAttributes.Private | MethodAttributes.Static,\r\n#endif\r\n\t\t\t\tTypes.Void,\r\n\t\t\t\tTypes.PhpTypeDesc);\r\n\r\n\t\t\treturn method_builder;\r\n\t\t}\r\n\r\n        #endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/PhpStackBuilder.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <summary>\r\n\t/// Methods used for emitting <see cref=\"PhpStack\"/> operations.\r\n\t/// </summary>\r\n\tinternal static class PhpStackBuilder\r\n\t{\r\n\t\tpublic static void EmitAddFrame(ILEmitter/*!*/ il, IPlace/*!*/ scriptContextPlace, int typeArgCount, int argCount,\r\n\t\t  Action<ILEmitter, int> typeArgEmitter, Action<ILEmitter, int>/*!*/ argEmitter)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeArgCount == 0 || typeArgEmitter != null);\r\n\r\n\t\t\t// type args:\r\n\t\t\tif (typeArgCount > 0)\r\n\t\t\t{\r\n\t\t\t\tscriptContextPlace.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\r\n\t\t\t\til.EmitOverloadedArgs(Types.DTypeDesc[0], typeArgCount, Methods.PhpStack.AddTypeFrame.ExplicitOverloads, typeArgEmitter);\r\n\t\t\t}\r\n\r\n\t\t\t// args:\r\n\t\t\tscriptContextPlace.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\r\n\t\t\til.EmitOverloadedArgs(Types.Object[0], argCount, Methods.PhpStack.AddFrame.ExplicitOverloads, argEmitter);\r\n\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.AddFrame.Overload(argCount));\r\n\r\n\t\t\t// AddFrame adds empty type frame by default, so if there are no type parameters, we can skip AddTypeFrame call:\r\n\t\t\tif (typeArgCount > 0)\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.AddTypeFrame.Overload(typeArgCount));\r\n\t\t}\r\n\r\n\t\tpublic static void EmitArgFullPreCall(ILEmitter/*!*/ il, IPlace/*!*/ stack, bool argsAware,\r\n\t\t  int formalParamCount, int formalTypeParamCount, out LocalBuilder locArgsCount)\r\n\t\t{\r\n\t\t\tif (argsAware)\r\n\t\t\t{\r\n\t\t\t\tlocArgsCount = il.DeclareLocal(typeof(int));\r\n\r\n\t\t\t\t// locArgsCount = stack.MakeArgsAware(<formal tpye param count | formal param count>);\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.LdcI4((formalTypeParamCount << 16) | formalParamCount);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.MakeArgsAware);\r\n\t\t\t\til.Stloc(locArgsCount);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tlocArgsCount = null;\r\n\r\n\t\t\t\t// CALL stack.RemoveFrame();\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static void EmitArgFullPostCall(ILEmitter/*!*/ il, IPlace/*!*/ stack, LocalBuilder locArgsCount)\r\n\t\t{\r\n\t\t\t// args-aware:\r\n\t\t\tif (locArgsCount != null)\r\n\t\t\t{\r\n\t\t\t\t// CALL stack.RemoveArgsAwareFrame(count);\r\n\t\t\t\tstack.EmitLoad(il);\r\n\t\t\t\til.Ldloc(locArgsCount);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveArgsAwareFrame);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//public static MethodCallPlace/*!*/ MakePeekValuePlace(IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t//{\r\n\t\t//  Debug.Assert(stack != null && index != null);\r\n\t\t//  return new MethodCallPlace(Methods.PhpStack.PeekValue, false, stack, index);\r\n\t\t//}\r\n\r\n\t\t//public static MethodCallPlace/*!*/ MakeValuePeekUncheckedPlace(IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t//{\r\n\t\t//  Debug.Assert(stack != null && index != null);\r\n\t\t//  return new MethodCallPlace(Methods.PhpStack.PeekValueUnchecked, false, stack, index);\r\n\t\t//}\r\n\r\n\t\t//public static MethodCallPlace/*!*/ MakeReferencePeekPlace(IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t//{\r\n\t\t//  Debug.Assert(stack != null && index != null);\r\n\t\t//  return new MethodCallPlace(Methods.PhpStack.PeekReference, false, stack, index);\r\n\t\t//}\r\n\r\n\t\t//public static MethodCallPlace/*!*/ MakeReferencePeekUncheckedPlace(IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t//{\r\n\t\t//  Debug.Assert(stack != null && index != null);\r\n\t\t//  return new MethodCallPlace(Methods.PhpStack.PeekReferenceUnchecked, false, stack, index);\r\n\t\t//}\r\n\r\n\r\n\t\tpublic static object EmitValuePeek(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stack != null && index != null);\r\n\r\n\t\t\t// CALL stack.PeekValue(<index+1>);\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\tindex.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValue);\r\n\r\n\t\t\treturn typeof(object);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitValuePeekUnchecked(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stack != null && index != null);\r\n\r\n\t\t\t// CALL stack.PeekValueUnchecked(<index+1>);\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\tindex.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValueUnchecked);\r\n\r\n\t\t\treturn typeof(object);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitReferencePeek(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stack != null && index != null);\r\n\r\n\t\t\t// LOAD stack.PeekReference(<index+1>);\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\tindex.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReference);\r\n\r\n\t\t\treturn typeof(PhpReference);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitReferencePeekUnchecked(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ index)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stack != null && index != null);\r\n\r\n\t\t\t// LOAD stack.PeekReferenceUnchecked(<index+1>);\r\n\t\t\tstack.EmitLoad(il);\r\n\t\t\tindex.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReferenceUnchecked);\r\n\r\n\t\t\treturn typeof(PhpReference);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitValuePeek(ILEmitter/*!*/ il, int index, object/*!*/ stackPlace)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stackPlace != null);\r\n\r\n\t\t\t// CALL stack.PeekValue(<index+1>);\r\n\t\t\t((IPlace)stackPlace).EmitLoad(il);\r\n\t\t\til.LdcI4(index + 1);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValue);\r\n\r\n\t\t\treturn typeof(object);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitValuePeekUnchecked(ILEmitter/*!*/ il, int index, object/*!*/ stackPlace, ParameterInfo param)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stackPlace != null);\r\n\r\n\t\t\t// CALL stack.PeekValueUnchecked(<index+1>);\r\n\t\t\t((IPlace)stackPlace).EmitLoad(il);\r\n\t\t\til.LdcI4(index + 1);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValueUnchecked);\r\n\r\n\t\t\treturn typeof(object);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitReferencePeek(ILEmitter/*!*/ il, int index, object/*!*/ stackPlace)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stackPlace != null);\r\n\r\n\t\t\t// LOAD stack.PeekReference(<index+1>);\r\n\t\t\t((IPlace)stackPlace).EmitLoad(il);\r\n\t\t\til.LdcI4(index + 1);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReference);\r\n\r\n\t\t\treturn typeof(PhpReference);\r\n\t\t}\r\n\r\n\t\tpublic static object EmitReferencePeekUnchecked(ILEmitter/*!*/ il, int index, object/*!*/ stackPlace, ParameterInfo param)\r\n\t\t{\r\n\t\t\tDebug.Assert(il != null && stackPlace != null);\r\n\r\n\t\t\t// LOAD stack.PeekReferenceUnchecked(<index+1>);\r\n\t\t\t((IPlace)stackPlace).EmitLoad(il);\r\n\t\t\til.LdcI4(index + 1);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReferenceUnchecked);\r\n\r\n\t\t\treturn typeof(PhpReference);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits load of an array where all optional arguments are stored.\r\n\t\t/// Each optional argument is peeked from the PHP stack and converted before stored to the array.\r\n\t\t/// The resulting array is pushed on evaluation stack so it can be later passed as an argument to a method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"builder\">The builder.</param>\r\n\t\t/// <param name=\"start\">The index of the first argument to be loaded.</param>\r\n\t\t/// <param name=\"param\">The last parameter of the overload (should be an array).</param>\r\n\t\t/// <param name=\"optArgCount\">The place where the number of optional arguments is stored.</param>\r\n\t\t/// <remarks>Assumes that the non-negative number of optional arguments has been stored to \r\n\t\t/// <paramref name=\"optArgCount\"/> place.</remarks>\r\n\t\tpublic static void EmitPeekAllArguments(OverloadsBuilder/*!*/ builder, int start, ParameterInfo param, IPlace optArgCount)\r\n\t\t{\r\n\t\t\tDebug.Assert(start >= 0 && optArgCount != null && param != null);\r\n\r\n\t\t\tILEmitter il = builder.IL;\r\n\t\t\tType elem_type = param.ParameterType.GetElementType();\r\n\t\t\tType array_type = Type.GetType(elem_type.FullName + \"[]\", true);\r\n\t\t\tType actual_type;\r\n\r\n\t\t\t// declares aux. variables:\r\n\t\t\tLocalBuilder loc_array = il.DeclareLocal(array_type);\r\n\t\t\tLocalBuilder loc_i = il.DeclareLocal(typeof(int));\r\n\t\t\tLocalBuilder loc_elem = il.DeclareLocal(elem_type);\r\n\r\n\t\t\t// creates an array for the arguments \r\n\t\t\t// array = new <elem_type>[opt_arg_count]:\r\n\t\t\toptArgCount.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Newarr, elem_type);\r\n\t\t\til.Stloc(loc_array);\r\n\r\n\t\t\tLabel for_end_label = il.DefineLabel();\r\n\t\t\tLabel condition_label = il.DefineLabel();\r\n\r\n\t\t\t// i = 0;\r\n\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\til.Stloc(loc_i);\r\n\r\n\t\t\t// FOR (i = 0; i < opt_arg_count; i++)\r\n\t\t\tif (true)\r\n\t\t\t{\r\n\t\t\t\til.MarkLabel(condition_label);\r\n\r\n\t\t\t\t// condition (i < opt_arg_count):\r\n\t\t\t\til.Ldloc(loc_i);\r\n\t\t\t\toptArgCount.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Bge, for_end_label);\r\n\r\n\t\t\t\t// LOAD stack, i + start+1>:\r\n\t\t\t\tbuilder.Stack.EmitLoad(il);\r\n\t\t\t\til.Ldloc(loc_i);\r\n\t\t\t\til.LdcI4(start + 1);\r\n\t\t\t\til.Emit(OpCodes.Add);\r\n\r\n\t\t\t\tif (elem_type == typeof(PhpReference))\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL stack.PeekReferenceUnchecked(STACK);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReferenceUnchecked);\r\n\t\t\t\t\tactual_type = typeof(PhpReference);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// CALL stack.PeekValueUnchecked(STACK);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValueUnchecked);\r\n\t\t\t\t\tactual_type = typeof(object);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// emits a conversion stuff (loads result into \"elem\" local variable):\r\n\t\t\t\tbuilder.EmitArgumentConversion(elem_type, actual_type, false, param);\r\n\t\t\t\til.Stloc(loc_elem);\r\n\r\n\t\t\t\t// array[i] = elem;\r\n\t\t\t\til.Ldloc(loc_array);\r\n\t\t\t\til.Ldloc(loc_i);\r\n\t\t\t\til.Ldloc(loc_elem);\r\n\t\t\t\til.Stelem(elem_type);\r\n\r\n\t\t\t\t// i = i + 1;\r\n\t\t\t\til.Ldloc(loc_i);\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_1);\r\n\t\t\t\til.Emit(OpCodes.Add);\r\n\t\t\t\til.Stloc(loc_i);\r\n\r\n\t\t\t\t// GOTO condition;\r\n\t\t\t\til.Emit(OpCodes.Br, condition_label);\r\n\t\t\t}\r\n\t\t\t// END FOR\r\n\r\n\t\t\til.MarkLabel(for_end_label);\r\n\r\n\t\t\t// loads array to stack - consumed by the method call:\r\n\t\t\til.Ldloc(loc_array);\r\n\t\t}\r\n\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/Places.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t#region PlaceHolder, IPlace\r\n\r\n\t/// <summary>\r\n\t/// Type of the place where a value is stored.\r\n\t/// </summary>\r\n\tinternal enum PlaceHolder\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The value has no storage, it is a direct value.\r\n\t\t/// </summary>\r\n\t\tNone,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The value is stored in a method argument.\r\n\t\t/// </summary>\r\n\t\tArgument,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The value is stored in a local variable.\r\n\t\t/// </summary>\r\n\t\tLocal,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The value is stored in a field.\r\n\t\t/// </summary>\r\n\t\tField\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Interface supported by storage places.\r\n\t/// </summary>\r\n\tpublic interface IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads the value from this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tvoid EmitLoad(ILEmitter il);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that stores a value to this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tvoid EmitStore(ILEmitter il);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads address of this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tvoid EmitLoadAddress(ILEmitter il);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the place has an address.\r\n\t\t/// </summary>\r\n\t\tbool HasAddress { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"Type\"/> of the value stored in this storage place.\r\n\t\t/// </summary>\r\n\t\tType PlaceType { get; }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IndexedPlace\r\n\r\n\t/// <summary>\r\n\t/// A storage place that represents a local variable or a method argument given by their index,\r\n\t/// or a direct integer value.\r\n\t/// </summary>\r\n\tinternal sealed class IndexedPlace : IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The type of this place - can be either <see cref=\"PlaceHolder.None\"/>, <see cref=\"PlaceHolder.Argument\"/> or\r\n\t\t/// <see cref=\"PlaceHolder.Local\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate PlaceHolder holder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets or gets the index (direct value).\r\n\t\t/// </summary>\r\n\t\tpublic int Index { get { return index; } set { index = value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The index/direct value.\r\n\t\t/// </summary>\r\n\t\tprivate int index;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A special read-only <see cref=\"IndexedPlace\"/> that loads <B>this</B> (0th argument).\r\n\t\t/// </summary>\r\n\t\tpublic static readonly IndexedPlace ThisArg = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"IndexedPlace\"/> of a given type and with a given index/direct value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"holder\">The place type. Should be either <see cref=\"PlaceHolder.None\"/>,\r\n\t\t/// <see cref=\"PlaceHolder.Argument\"/> or <see cref=\"PlaceHolder.Local\"/>.</param>\r\n\t\t/// <param name=\"index\">The index (direct value).</param>\r\n\t\tpublic IndexedPlace(PlaceHolder holder, int index)\r\n\t\t{\r\n\t\t\tif (holder != PlaceHolder.None && holder != PlaceHolder.Argument && holder != PlaceHolder.Local)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"holder\");\r\n\r\n\t\t\tthis.holder = holder;\r\n\t\t\tthis.index = index;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"IndexedPlace\"/> of given local variable.\r\n        /// </summary>\r\n        /// <param name=\"local\">Local variable to be used.</param>\r\n        public IndexedPlace(LocalBuilder/*!*/local)\r\n            :this(PlaceHolder.Local, local.LocalIndex)\r\n        {\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads the value from this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitLoad(ILEmitter il)\r\n\t\t{\r\n\t\t\tswitch (holder)\r\n\t\t\t{\r\n\t\t\t\tcase PlaceHolder.Local: il.Ldloc(index); break;\r\n\t\t\t\tcase PlaceHolder.Argument: il.Ldarg(index); break;\r\n\t\t\t\tcase PlaceHolder.None: il.LdcI4(index); break;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads address of this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitLoadAddress(ILEmitter il)\r\n\t\t{\r\n\t\t\tswitch (holder)\r\n\t\t\t{\r\n\t\t\t\tcase PlaceHolder.Local: il.Ldloca(index); break;\r\n\t\t\t\tcase PlaceHolder.Argument: il.Ldarga(index); break;\r\n\t\t\t\tcase PlaceHolder.None: throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the place has an address.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasAddress\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tswitch (holder)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PlaceHolder.Local:\r\n\t\t\t\t\tcase PlaceHolder.Argument: return true;\r\n\t\t\t\t\tdefault: return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that stores a value to this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitStore(ILEmitter il)\r\n\t\t{\r\n\t\t\tswitch (holder)\r\n\t\t\t{\r\n\t\t\t\tcase PlaceHolder.Local: il.Stloc(index); break;\r\n\t\t\t\tcase PlaceHolder.Argument: il.Starg(index); break;\r\n\t\t\t\tcase PlaceHolder.None: throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"Type\"/> of the value stored in this storage place.\r\n\t\t/// </summary>\r\n\t\tpublic Type PlaceType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tswitch (holder)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase PlaceHolder.Local: throw new InvalidOperationException();\r\n\t\t\t\t\tcase PlaceHolder.Argument: throw new InvalidOperationException();\r\n\t\t\t\t\tcase PlaceHolder.None: return typeof(int);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TokenPlace\r\n\r\n\t/// <summary>\r\n\t/// A read-only storage place that represents a metadata token.\r\n\t/// </summary>\r\n\tinternal sealed class TokenPlace : IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Runtime representation of the token.\r\n\t\t/// </summary>\r\n\t\tprivate MemberInfo source;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"TokenPlace\"/> given a <see cref=\"MemberInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">The <see cref=\"MemberInfo\"/>.</param>\r\n\t\tpublic TokenPlace(MemberInfo source)\r\n\t\t{\r\n\t\t\tthis.source = source;\r\n\t\t}\r\n\r\n\t\t#region IPlace Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads the value from this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitLoad(ILEmitter il)\r\n\t\t{\r\n\t\t\tMethodInfo method;\r\n\t\t\tFieldInfo field;\r\n\t\t\tType type;\r\n\r\n\t\t\tif ((type = source as Type) != null)\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Ldtoken, type);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tif ((method = source as MethodInfo) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldtoken, method);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tif ((field = source as FieldInfo) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldtoken, field);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic void EmitLoadAddress(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic bool HasAddress { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that stores a value to this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitStore(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"Type\"/> of the value stored in this storage place.\r\n\t\t/// </summary>\r\n\t\tpublic Type PlaceType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tMethodInfo method;\r\n\t\t\t\tFieldInfo field;\r\n\t\t\t\tType type;\r\n\r\n\t\t\t\tif ((type = source as Type) != null) return typeof(RuntimeTypeHandle);\r\n\t\t\t\telse\r\n\t\t\t\t\tif ((method = source as MethodInfo) != null) return typeof(RuntimeMethodHandle);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tif ((field = source as FieldInfo) != null) return typeof(RuntimeFieldHandle);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthrow new InvalidOperationException();\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Place\r\n\r\n\t/// <summary>\r\n\t/// A storage place that represents a local variable, a field, or a property given by their\r\n\t/// <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/>, or <see cref=\"PropertyInfo\"/>.\r\n\t/// </summary>\r\n\tinternal sealed class Place : IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Holder of the field or a <B>null</B> reference (a local variable or a static field).\r\n\t\t/// </summary>\r\n\t\tprivate IPlace holder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The <see cref=\"LocalBuilder\"/>, <see cref=\"FieldInfo\"/>, or <see cref=\"PropertyInfo\"/>\r\n\t\t/// where the value is stored.\r\n\t\t/// </summary>\r\n\t\tprivate object/*!*/ source;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"Place\"/> given an <see cref=\"IPlace\"/> representing an instance\r\n\t\t/// and a <see cref=\"FieldInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"holder\">The instance <see cref=\"IPlace\"/> (<B>null</B> for static fields).</param>\r\n\t\t/// <param name=\"field\">The <see cref=\"FieldInfo\"/>.</param>\r\n\t\tpublic Place(IPlace holder, FieldInfo/*!*/ field)\r\n\t\t{\r\n\t\t\tDebug.Assert(field != null && (holder == null) == field.IsStatic);\r\n\r\n\t\t\tthis.holder = holder;\r\n\t\t\tthis.source = field;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"Place\"/> given an <see cref=\"IPlace\"/> representing an instance\r\n\t\t/// and a <see cref=\"PropertyInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"holder\">The instance <see cref=\"IPlace\"/> (<B>null</B> for static properties).</param>\r\n\t\t/// <param name=\"property\">The <see cref=\"PropertyInfo\"/>.</param>\r\n\t\tpublic Place(IPlace holder, PropertyInfo/*!*/ property)\r\n\t\t{\r\n\t\t\tDebug.Assert(property != null && (holder == null) == property.GetGetMethod().IsStatic);\r\n\r\n\t\t\tthis.holder = holder;\r\n\t\t\tthis.source = property;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"Place\"/> given a <see cref=\"LocalBuilder\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"local\">The <see cref=\"LocalBuilder\"/>.</param>\r\n\t\tpublic Place(LocalBuilder/*!*/ local)\r\n\t\t{\r\n\t\t\tDebug.Assert(local != null);\r\n\r\n\t\t\tholder = null;\r\n\t\t\tsource = local;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPlace Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads the value from this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitLoad(ILEmitter il)\r\n\t\t{\r\n\t\t\tif (holder != null) il.Load(holder);\r\n\t\t\til.Load(source);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that stores a value to this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitStore(ILEmitter il)\r\n\t\t{\r\n\t\t\tif (holder != null) il.Store(holder);\r\n\t\t\til.Store(source);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code that loads address of this storage place.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\">The <see cref=\"ILEmitter\"/> to emit the code to.</param>\r\n\t\tpublic void EmitLoadAddress(ILEmitter il)\r\n\t\t{\r\n            if (holder != null) il.Load(holder);\r\n\t\t\til.LoadAddress(source);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the place has an address.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasAddress\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn ILEmitter.HasAddress(source);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"Type\"/> of the value stored in this storage place.\r\n\t\t/// </summary>\r\n\t\tpublic Type PlaceType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder local;\r\n\t\t\t\tFieldInfo field;\r\n\r\n\t\t\t\tif ((local = source as LocalBuilder) != null)\r\n\t\t\t\t\treturn local.LocalType;\r\n\t\t\t\telse if ((field = source as FieldInfo) != null)\r\n\t\t\t\t\treturn field.FieldType;\r\n\t\t\t\telse\r\n\t\t\t\t\treturn ((PropertyInfo)source).PropertyType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region LiteralPlace\r\n\r\n\t/// <summary>\r\n\t/// Represents a literal.\r\n\t/// </summary>\r\n\tinternal sealed class LiteralPlace : IPlace\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Literal represented by the place.\r\n\t\t/// </summary>\r\n\t\tprivate object literal;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A special read-only <see cref=\"Place\"/> that loads <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly LiteralPlace Null = new LiteralPlace(null);\r\n\r\n\t\tpublic LiteralPlace(object literal)\r\n\t\t{\r\n\t\t\tthis.literal = literal;\r\n\t\t}\r\n\r\n\t\tpublic void EmitLoad(ILEmitter il)\r\n\t\t{\r\n\t\t\til.LoadLiteral(literal);\r\n\t\t}\r\n\r\n\t\tpublic void EmitStore(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic void EmitLoadAddress(ILEmitter il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic bool HasAddress\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic Type PlaceType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (literal != null) ? literal.GetType() : null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region MethodCallPlace\r\n\r\n\tinternal sealed class MethodCallPlace : IPlace\r\n\t{\r\n\t\tprivate MethodInfo/*!*/ methodInfo;\r\n\t\tprivate IPlace[]/*!!*/ argumentPlaces;\r\n\t\tprivate bool virtualCall;\r\n\r\n\t\tpublic MethodCallPlace(MethodInfo/*!*/ methodInfo, bool virtualCall, params IPlace[]/*!!*/ argumentPlaces)\r\n\t\t{\r\n\t\t\tDebug.Assert(methodInfo.ReturnParameter.ParameterType != Types.Void);\r\n\t\t\tthis.methodInfo = methodInfo;\r\n\t\t\tthis.argumentPlaces = argumentPlaces;\r\n\t\t\tthis.virtualCall = virtualCall;\r\n\t\t}\r\n\r\n\t\t#region IPlace Members\r\n\r\n\t\tpublic void EmitLoad(ILEmitter/*!*/ il)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < argumentPlaces.Length; i++)\r\n\t\t\t\targumentPlaces[i].EmitLoad(il);\r\n\r\n\t\t\til.Emit((virtualCall) ? OpCodes.Callvirt : OpCodes.Call, methodInfo);\r\n\t\t}\r\n\r\n\t\tpublic void EmitStore(ILEmitter/*!*/ il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic void EmitLoadAddress(ILEmitter/*!*/ il)\r\n\t\t{\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic bool HasAddress\r\n\t\t{\r\n\t\t\tget { return false; }\r\n\t\t}\r\n\r\n\t\tpublic Type/*!*/ PlaceType\r\n\t\t{\r\n\t\t\tget { return methodInfo.ReturnType; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region NewobjPlace\r\n\r\n    internal sealed class NewobjPlace : IPlace\r\n    {\r\n        private ConstructorInfo/*!*/ ctorInfo;\r\n        private IPlace[]/*!!*/ argumentPlaces;\r\n\r\n        public NewobjPlace(ConstructorInfo/*!*/ ctorInfo, params IPlace[]/*!!*/ argumentPlaces)\r\n        {\r\n            Debug.Assert(argumentPlaces.Length == ctorInfo.GetParameters().Length);\r\n\r\n            this.ctorInfo = ctorInfo;\r\n            this.argumentPlaces = argumentPlaces;\r\n        }\r\n\r\n        #region IPlace Members\r\n\r\n        public void EmitLoad(ILEmitter/*!*/ il)\r\n        {\r\n            for (int i = 0; i < argumentPlaces.Length; ++i)\r\n                argumentPlaces[i].EmitLoad(il);\r\n\r\n            il.Emit(OpCodes.Newobj, ctorInfo);\r\n        }\r\n\r\n        public void EmitStore(ILEmitter/*!*/ il)\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        public void EmitLoadAddress(ILEmitter/*!*/ il)\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        public bool HasAddress\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        public Type/*!*/ PlaceType\r\n        {\r\n            get { return ctorInfo.DeclaringType; }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ReflectionCache.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing Serialization = System.Runtime.Serialization;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing Core = PHP.Core;\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t/// <exclude/>\r\n\tpublic static class Types\r\n\t{\r\n\t\t// singles:\r\n        public static Type Void { get { return typeof(void); } }\r\n\r\n\t\tpublic static Type RoutineDelegate { get { return typeof(PHP.Core.RoutineDelegate); } }\r\n        public static Type DebuggerHiddenAttribute { get { return typeof(System.Diagnostics.DebuggerHiddenAttribute); } }\r\n\r\n        public static Type ImplementsTypeAttribute { get { return typeof(ImplementsTypeAttribute); } }\r\n        public static Type ImplementsMethodAttribute { get { return typeof(ImplementsMethodAttribute); } }\r\n        public static Type ImplementsFunctionAttribute { get { return typeof(ImplementsFunctionAttribute); } }\r\n\r\n\t\t// singletons:\r\n\t\tpublic static readonly Type[] Bool = new Type[] { typeof(bool) };\r\n\t\tpublic static readonly Type[] Double = new Type[] { typeof(double) };\r\n\t\tpublic static readonly Type[] Int = new Type[] { typeof(int) };\r\n\t\tpublic static readonly Type[] LongInt = new Type[] { typeof(long) };\r\n\t\tpublic static readonly Type[] Object = new Type[] { typeof(object) };\r\n\t\tpublic static readonly Type[] String = new Type[] { typeof(string) };\r\n\t\tpublic static readonly Type[] ObjectRef = new Type[] { typeof(object).MakeByRefType() };\r\n\t\tpublic static readonly Type[] ScriptContext = new Type[] { typeof(PHP.Core.ScriptContext) };\r\n\t\tpublic static readonly Type[] PhpReference = new Type[] { typeof(PHP.Core.PhpReference) };\r\n        public static readonly Type[] PhpSmartReference = new Type[] { typeof(PHP.Core.PhpSmartReference) };\r\n        public static readonly Type[] PhpRuntimeChain = new Type[] { typeof(PHP.Core.PhpRuntimeChain) };\r\n\t\tpublic static readonly Type[] ObjectArray = new Type[] { typeof(object[]) };\r\n\t\tpublic static readonly Type[] StringArray = new Type[] { typeof(string[]) };\r\n\t\tpublic static readonly Type[] PhpReferenceArray = new Type[] { typeof(PhpReference[]) };\r\n\t\tpublic static readonly Type[] IPhpEnumerable = new Type[] { typeof(PHP.Core.IPhpEnumerable) };\r\n\t\tpublic static readonly Type[] PhpStack = new Type[] { typeof(PHP.Core.PhpStack) };\r\n\t\tpublic static readonly Type[] PhpArray = new Type[] { typeof(PHP.Core.PhpArray) };\r\n        public static readonly Type[] PhpBytes = new Type[] { typeof(PHP.Core.PhpBytes) };\r\n\t\tpublic static readonly Type[] PhpObject = new Type[] { typeof(PHP.Core.PhpObject) };\r\n\t\tpublic static readonly Type[] DObject = new Type[] { typeof(PHP.Core.Reflection.DObject) };\r\n\t\tpublic static readonly Type[] RoutineProperties = new Type[] { typeof(PHP.Core.Reflection.RoutineProperties) };\r\n\t\tpublic static readonly Type[] DTypeDesc = new Type[] { typeof(PHP.Core.Reflection.DTypeDesc) };\r\n\t\tpublic static readonly Type[] PhpTypeDesc = new Type[] { typeof(PHP.Core.Reflection.PhpTypeDesc) };\r\n        public static readonly Type[] CallSiteBinder = new Type[] { typeof(CallSiteBinder) };\r\n        public static readonly Type[] CallSite = new Type[] { typeof(CallSite) };\r\n        public static readonly Type[] CallSiteGeneric = new Type[] { typeof(CallSite<>) };\r\n        public static readonly Type[] Action = new Type[] { typeof(Action) };\r\n\r\n        public static readonly Type[] Float = new Type[] { typeof(float) };\r\n\r\n\t\t// doublets:\r\n\t\tpublic static readonly Type[] Int_Int = new Type[] { typeof(int), typeof(int) };\r\n\t\tpublic static readonly Type[] Int_Object = new Type[] { typeof(int), typeof(object) };\r\n        public static readonly Type[] Object_Int = new Type[] { typeof(object), typeof(int) };\r\n\t\tpublic static readonly Type[] Object_Object = new Type[] { typeof(object), typeof(object) };\r\n\t\tpublic static readonly Type[] String_Bool = new Type[] { typeof(string), typeof(bool) };\r\n\t\tpublic static readonly Type[] String_Object = new Type[] { typeof(string), typeof(object) };\r\n\t\tpublic static readonly Type[] ObjectRef_Object = new Type[] { ObjectRef[0], typeof(object) };\r\n\t\tpublic static readonly Type[] Object_ObjectRef = new Type[] { typeof(object), ObjectRef[0] };\r\n\t\tpublic static readonly Type[] Object_PhpStack = new Type[] { typeof(object), typeof(PhpStack) };\r\n\r\n\t\tpublic static readonly Type[] PhpError_String = new Type[] { typeof(PhpError), typeof(string) };\r\n\t\tpublic static readonly Type[] Object_ScriptContext = new Type[] { typeof(object), typeof(PHP.Core.ScriptContext) };\r\n\t\tpublic static readonly Type[] ScriptContext_IDictionary = new Type[] { typeof(PHP.Core.ScriptContext), typeof(IDictionary) };\r\n\t\tpublic static readonly Type[] ScriptContext_Bool = new Type[] { typeof(PHP.Core.ScriptContext), typeof(bool) };\r\n\r\n        public static readonly Type[] Object_DTypeDesc = new Type[] { typeof(object), typeof(PHP.Core.Reflection.DTypeDesc) };\r\n\t\tpublic static readonly Type[] ScriptContext_DTypeDesc = new Type[] { typeof(PHP.Core.ScriptContext), typeof(PHP.Core.Reflection.DTypeDesc) };\r\n\t\tpublic static readonly Type[] DelegateCtorArgs = new Type[] { typeof(object), typeof(IntPtr) };\r\n\r\n\t\t// triplets:\r\n\t\tpublic static readonly Type[] String_Object_Bool = new Type[] { typeof(string), typeof(object), typeof(bool) };\r\n\t\tpublic static readonly Type[] String_Bool_Bool = new Type[] { typeof(string), typeof(bool), typeof(bool) };\r\n\t\tpublic static readonly Type[] Object_Object_Bool = new Type[] { typeof(object), typeof(object), typeof(bool) };\r\n\t\tpublic static readonly Type[] PhpArray_Object_Object = new Type[] { typeof(PhpArray), typeof(object), typeof(object) };\r\n\t\tpublic static readonly Type[] Object_Object_ObjectRef = new Type[] { typeof(object), typeof(object), ObjectRef[0] };\r\n\t\tpublic static readonly Type[] Object_Object_Object = new Type[] { typeof(object), typeof(object), typeof(object) };\r\n\r\n\t\t// CLR only\r\n#if !SILVERLIGHT\r\n\t\t// singles:\r\n        public static Type EditorBrowsableAttribute { get { return typeof(System.ComponentModel.EditorBrowsableAttribute); } }\r\n\r\n\t\t// doublets:\r\n\t\tpublic static readonly Type[] SerializationInfo_StreamingContext = new Type[] { typeof(System.Runtime.Serialization.SerializationInfo), typeof(System.Runtime.Serialization.StreamingContext) };\r\n#endif\r\n\t}\r\n\r\n\t// pattern:\r\n\t// {[a-zA-Z0-9]+}\r\n\t// public static MethodInfo \\1 { get { if (_\\1==null) _\\1 = _this.GetMethod(\"\\1\"); return _\\1; } }\r\n\t/// <exclude/>\r\n    public static class Methods\r\n    {\r\n        #region Operators\r\n\r\n        // automatically generated by MethodsGenerator:\r\n        public struct Operators\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.Operators); } }\r\n            static MethodInfo _Minus, _Plus, _Increment, _Decrement, _BitOperation, _BitNot, _ShiftLeft, _ShiftRight,\r\n                _UnsetItem, _GetVariableUnchecked, _GetVariable, _GetVariableRef, _SetVariable, _UnsetVariable, _SetVariableRef, _IsEmptyForEnsure,\r\n                _EnsureVariableIsArray, _EnsureVariableIsObject, _EnsurePropertyIsObject, _EnsurePropertyIsArray, _EnsureStaticPropertyIsArray,\r\n                _EnsureStaticPropertyIsObject, _GetProperty, _GetObjectProperty, _GetPropertyRef, _GetObjectPropertyRef, _SetProperty,\r\n                _SetObjectProperty, _UnsetProperty, _InvokeMethodObj, _InvokeMethodStr, _Clone, _GetClassConstant, _GetStaticProperty, _GetStaticPropertyRef,\r\n                _SetStaticProperty, _UnsetStaticProperty, _InvokeStaticMethod, _New, _NewClr, _InstanceOf, _TypeOf, _StrictEquality, _StrictEmptyPhpArrayEquality, _StrictEmptyPhpArrayEquality_PhpArray, _Throw,\r\n                _SetObjectFieldDirect, _SetObjectFieldDirectRef, _GetObjectFieldDirectRef, _GetObjectFieldDirect, _ToAbsoluteSourcePath,\r\n                _GetItemExact, _SetItemExact,\r\n\r\n                _GetFullyQualifiedName,\r\n                _IsCallable;\r\n\r\n            public struct Add\r\n            {\r\n                static MethodInfo _Object_Object, _Object_Int32, _Object_Double, _Double_Object;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object,object,object>(PHP.Core.Operators.Add).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_Int32 { get { if (_Object_Int32 == null) _Object_Int32 = new Func<object, int, object>(PHP.Core.Operators.Add).Method; return _Object_Int32; } }\r\n                public static MethodInfo Object_Double { get { if (_Object_Double == null) _Object_Double = new Func<object, double, double>(PHP.Core.Operators.Add).Method; return _Object_Double; } }\r\n                public static MethodInfo Double_Object { get { return _Double_Object ?? (_Double_Object = new Func<double, object, double>(PHP.Core.Operators.Add).Method); } }\r\n            }\r\n\r\n            public struct Subtract\r\n            {\r\n                static MethodInfo _Object_Object, _Object_Int, _Int32_Object, _Double_Object;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Subtract).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_Int { get { return _Object_Int ?? (_Object_Int = new Func<object, int, object>(PHP.Core.Operators.Subtract).Method); } }\r\n                public static MethodInfo Int32_Object { get { if (_Int32_Object == null) _Int32_Object = new Func<int, object, object>(PHP.Core.Operators.Subtract).Method; return _Int32_Object; } }\r\n                public static MethodInfo Double_Object { get { if (_Double_Object == null) _Double_Object = new Func<double, object, double>(PHP.Core.Operators.Subtract).Method; return _Double_Object; } }\r\n            }\r\n\r\n            public static MethodInfo Minus { get { if (_Minus == null) _Minus = new Func<object, object>(PHP.Core.Operators.Minus).Method; return _Minus; } }\r\n            public static MethodInfo Plus { get { if (_Plus == null) _Plus = new Func<object, object>(PHP.Core.Operators.Plus).Method; return _Plus; } }\r\n            public struct Divide\r\n            {\r\n                static MethodInfo _Object_Object, _Object_Int32, _Object_Double, _Int32_Object, _Double_Object;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Divide).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_Int32 { get { if (_Object_Int32 == null) _Object_Int32 = new Func<object, int, object>(PHP.Core.Operators.Divide).Method; return _Object_Int32; } }\r\n                public static MethodInfo Object_Double { get { if (_Object_Double == null) _Object_Double = new Func<object, double, double>(PHP.Core.Operators.Divide).Method; return _Object_Double; } }\r\n                public static MethodInfo Int32_Object { get { if (_Int32_Object == null) _Int32_Object = new Func<int, object, object>(PHP.Core.Operators.Divide).Method; return _Int32_Object; } }\r\n                public static MethodInfo Double_Object { get { if (_Double_Object == null) _Double_Object = new Func<double, object, object>(PHP.Core.Operators.Divide).Method; return _Double_Object; } }\r\n            }\r\n\r\n            public struct Multiply\r\n            {\r\n                static MethodInfo _Object_Object, _Object_Int32, _Object_Double, _Double_Object;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Multiply).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_Int32 { get { if (_Object_Int32 == null) _Object_Int32 = new Func<object, int, object>(PHP.Core.Operators.Multiply).Method; return _Object_Int32; } }\r\n                public static MethodInfo Object_Double { get { if (_Object_Double == null) _Object_Double = new Func<object, double, double>(PHP.Core.Operators.Multiply).Method; return _Object_Double; } }\r\n                public static MethodInfo Double_Object { get { return _Double_Object ?? (_Double_Object = new Func<double, object, double>(PHP.Core.Operators.Multiply).Method); } }\r\n            }\r\n\r\n            public struct Pow\r\n            {\r\n                static MethodInfo _Object_Object;\r\n\r\n                public static MethodInfo Object_Object { get { return _Object_Object ?? (_Object_Object = new Func<object, object, object>(PHP.Core.Operators.Pow).Method); } }\r\n            }\r\n\r\n            public struct Remainder\r\n            {\r\n                static MethodInfo _Object_Object, _Object_Int32;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Remainder).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_Int32 { get { if (_Object_Int32 == null) _Object_Int32 = new Func<object, int, object>(PHP.Core.Operators.Remainder).Method; return _Object_Int32; } }\r\n            }\r\n\r\n            public static MethodInfo Increment { get { if (_Increment == null) _Increment = new Func<object, object>(PHP.Core.Operators.Increment).Method; return _Increment; } }\r\n            public static MethodInfo Decrement { get { if (_Decrement == null) _Decrement = new Func<object, object>(PHP.Core.Operators.Decrement).Method; return _Decrement; } }\r\n            public static MethodInfo BitOperation { get { if (_BitOperation == null) _BitOperation = new Func<object, object, PHP.Core.Operators.BitOp, object>(PHP.Core.Operators.BitOperation).Method; return _BitOperation; } }\r\n            public static MethodInfo BitNot { get { if (_BitNot == null) _BitNot = new Func<object, object>(PHP.Core.Operators.BitNot).Method; return _BitNot; } }\r\n            public static MethodInfo ShiftLeft { get { if (_ShiftLeft == null) _ShiftLeft = new Func<object, object, object>(PHP.Core.Operators.ShiftLeft).Method; return _ShiftLeft; } }\r\n            public static MethodInfo ShiftRight { get { if (_ShiftRight == null) _ShiftRight = new Func<object, object, object>(PHP.Core.Operators.ShiftRight).Method; return _ShiftRight; } }\r\n            public struct Concat\r\n            {\r\n                static MethodInfo _Object_Object, _Object_String, _String_Object, _ObjectArray;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Concat).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_String { get { if (_Object_String == null) _Object_String = new Func<object, string, object>(PHP.Core.Operators.Concat).Method; return _Object_String; } }\r\n                public static MethodInfo String_Object { get { if (_String_Object == null) _String_Object = new Func<string, object, object>(PHP.Core.Operators.Concat).Method; return _String_Object; } }\r\n                public static MethodInfo ObjectArray { get { if (_ObjectArray == null) _ObjectArray = new Func<object[], object>(PHP.Core.Operators.Concat).Method; return _ObjectArray; } }\r\n            }\r\n\r\n            public struct Append\r\n            {\r\n                static MethodInfo _Object_Object, _Object_String, _Object_ObjectArray;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Append).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_String { get { if (_Object_String == null) _Object_String = new Func<object, string, object>(PHP.Core.Operators.Append).Method; return _Object_String; } }\r\n                public static MethodInfo Object_ObjectArray { get { if (_Object_ObjectArray == null) _Object_ObjectArray = new Func<object, object[], object>(PHP.Core.Operators.Append).Method; return _Object_ObjectArray; } }\r\n            }\r\n\r\n            public struct Prepend\r\n            {\r\n                static MethodInfo _Object_Object, _Object_String, _Object_ObjectArray;\r\n\r\n                public static MethodInfo Object_Object { get { if (_Object_Object == null) _Object_Object = new Func<object, object, object>(PHP.Core.Operators.Prepend).Method; return _Object_Object; } }\r\n                public static MethodInfo Object_String { get { if (_Object_String == null) _Object_String = new Func<object, string, object>(PHP.Core.Operators.Prepend).Method; return _Object_String; } }\r\n                public static MethodInfo Object_ObjectArray { get { if (_Object_ObjectArray == null) _Object_ObjectArray = new Func<object, object[], object>(PHP.Core.Operators.Prepend).Method; return _Object_ObjectArray; } }\r\n            }\r\n\r\n            public struct GetItem\r\n            {\r\n                static MethodInfo _Object, _Int32, _String;\r\n\r\n                public static MethodInfo Object { get { if (_Object == null) _Object = new Func<object, object, Core.Operators.GetItemKinds, object>(PHP.Core.Operators.GetItem).Method; return _Object; } }\r\n                public static MethodInfo Int32 { get { if (_Int32 == null) _Int32 = new Func<object, int, Core.Operators.GetItemKinds, object>(PHP.Core.Operators.GetItem).Method; return _Int32; } }\r\n                public static MethodInfo String { get { if (_String == null) _String = new Func<object, string, Core.Operators.GetItemKinds, object>(PHP.Core.Operators.GetItem).Method; return _String; } }\r\n            }\r\n\r\n            public static MethodInfo GetItemExact { get { if (_GetItemExact == null) _GetItemExact = new Func<object, string, Core.Operators.GetItemKinds, int, object>(PHP.Core.Operators.GetItemExact).Method; return _GetItemExact; } }\r\n\r\n            public struct GetItemRef\r\n            {\r\n                static MethodInfo _Keyless, _Object, _Int32, _String;\r\n\r\n                public static MethodInfo Keyless { get { if (_Keyless == null) _Keyless = _this.GetMethod(\"GetItemRef\", new Type[] { Types.ObjectRef[0] }); return _Keyless; } }\r\n                public static MethodInfo Object { get { if (_Object == null) _Object = _this.GetMethod(\"GetItemRef\", new Type[] { Types.Object[0], Types.ObjectRef[0] }); return _Object; } }\r\n                public static MethodInfo Int32 { get { if (_Int32 == null) _Int32 = _this.GetMethod(\"GetItemRef\", new Type[] { Types.Int[0], Types.ObjectRef[0] }); return _Int32; } }\r\n                public static MethodInfo String { get { if (_String == null) _String = _this.GetMethod(\"GetItemRef\", new Type[] { Types.String[0], Types.ObjectRef[0] }); return _String; } }\r\n            }\r\n\r\n            public struct SetItem\r\n            {\r\n                static MethodInfo _Keyless, _Object, _Int32, _String;\r\n\r\n                public static MethodInfo Keyless { get { if (_Keyless == null) _Keyless = _this.GetMethod(\"SetItem\", new Type[] { Types.Object[0], Types.ObjectRef[0] }); return _Keyless; } }\r\n                public static MethodInfo Object { get { if (_Object == null) _Object = _this.GetMethod(\"SetItem\", new Type[] { Types.Object[0], Types.Object[0], Types.ObjectRef[0] }); return _Object; } }\r\n                public static MethodInfo Int32 { get { if (_Int32 == null) _Int32 = _this.GetMethod(\"SetItem\", new Type[] { Types.Object[0], Types.Int[0], Types.ObjectRef[0] }); return _Int32; } }\r\n                public static MethodInfo String { get { if (_String == null) _String = _this.GetMethod(\"SetItem\", new Type[] { Types.Object[0], Types.String[0], Types.ObjectRef[0] }); return _String; } }\r\n            }\r\n\r\n            public static MethodInfo SetItemExact { get { if (_SetItemExact == null) _SetItemExact = _this.GetMethod(\"SetItemExact\", new Type[] { Types.Object[0], Types.String[0], Types.ObjectRef[0], typeof(int) }); return _SetItemExact; } }\r\n\r\n            public struct SetItemRef\r\n            {\r\n                static MethodInfo _Object, _Int32, _String;\r\n\r\n                public static MethodInfo Object { get { if (_Object == null) _Object = _this.GetMethod(\"SetItemRef\", new Type[] { Types.PhpReference[0], Types.Object[0], Types.ObjectRef[0] }); return _Object; } }\r\n                public static MethodInfo Int32 { get { if (_Int32 == null) _Int32 = _this.GetMethod(\"SetItemRef\", new Type[] { Types.PhpReference[0], Types.Int[0], Types.ObjectRef[0] }); return _Int32; } }\r\n                public static MethodInfo String { get { if (_String == null) _String = _this.GetMethod(\"SetItemRef\", new Type[] { Types.PhpReference[0], Types.String[0], Types.ObjectRef[0] }); return _String; } }\r\n            }\r\n\r\n            public static MethodInfo UnsetItem { get { if (_UnsetItem == null) _UnsetItem = _this.GetMethod(\"UnsetItem\"); return _UnsetItem; } }\r\n            public static MethodInfo GetVariableUnchecked { get { if (_GetVariableUnchecked == null) _GetVariableUnchecked = _this.GetMethod(\"GetVariableUnchecked\"); return _GetVariableUnchecked; } }\r\n            public static MethodInfo GetVariable { get { if (_GetVariable == null) _GetVariable = _this.GetMethod(\"GetVariable\"); return _GetVariable; } }\r\n            public static MethodInfo GetVariableRef { get { if (_GetVariableRef == null) _GetVariableRef = _this.GetMethod(\"GetVariableRef\"); return _GetVariableRef; } }\r\n            public static MethodInfo SetVariable { get { if (_SetVariable == null) _SetVariable = _this.GetMethod(\"SetVariable\"); return _SetVariable; } }\r\n            public static MethodInfo SetVariableRef { get { if (_SetVariableRef == null) _SetVariableRef = _this.GetMethod(\"SetVariableRef\"); return _SetVariableRef; } }\r\n            public static MethodInfo UnsetVariable { get { if (_UnsetVariable == null) _UnsetVariable = _this.GetMethod(\"UnsetVariable\"); return _UnsetVariable; } }\r\n            public static MethodInfo IsEmptyForEnsure { get { if (_IsEmptyForEnsure == null) _IsEmptyForEnsure = _this.GetMethod(\"IsEmptyForEnsure\"); return _IsEmptyForEnsure; } }\r\n            public static MethodInfo EnsureVariableIsArray { get { if (_EnsureVariableIsArray == null) _EnsureVariableIsArray = _this.GetMethod(\"EnsureVariableIsArray\"); return _EnsureVariableIsArray; } }\r\n            public static MethodInfo EnsureVariableIsObject { get { if (_EnsureVariableIsObject == null) _EnsureVariableIsObject = _this.GetMethod(\"EnsureVariableIsObject\"); return _EnsureVariableIsObject; } }\r\n            public static MethodInfo EnsurePropertyIsObject { get { if (_EnsurePropertyIsObject == null) _EnsurePropertyIsObject = _this.GetMethod(\"EnsurePropertyIsObject\"); return _EnsurePropertyIsObject; } }\r\n            public static MethodInfo EnsurePropertyIsArray { get { if (_EnsurePropertyIsArray == null) _EnsurePropertyIsArray = _this.GetMethod(\"EnsurePropertyIsArray\"); return _EnsurePropertyIsArray; } }\r\n            public static MethodInfo EnsureStaticPropertyIsArray { get { if (_EnsureStaticPropertyIsArray == null) _EnsureStaticPropertyIsArray = _this.GetMethod(\"EnsureStaticPropertyIsArray\"); return _EnsureStaticPropertyIsArray; } }\r\n            public static MethodInfo EnsureStaticPropertyIsObject { get { if (_EnsureStaticPropertyIsObject == null) _EnsureStaticPropertyIsObject = _this.GetMethod(\"EnsureStaticPropertyIsObject\"); return _EnsureStaticPropertyIsObject; } }\r\n            public static MethodInfo GetProperty { get { if (_GetProperty == null) _GetProperty = _this.GetMethod(\"GetProperty\"); return _GetProperty; } }\r\n            public static MethodInfo GetObjectProperty { get { if (_GetObjectProperty == null) _GetObjectProperty = _this.GetMethod(\"GetObjectProperty\"); return _GetObjectProperty; } }\r\n            public static MethodInfo GetPropertyRef { get { if (_GetPropertyRef == null) _GetPropertyRef = _this.GetMethod(\"GetPropertyRef\"); return _GetPropertyRef; } }\r\n            public static MethodInfo GetObjectPropertyRef { get { if (_GetObjectPropertyRef == null) _GetObjectPropertyRef = _this.GetMethod(\"GetObjectPropertyRef\"); return _GetObjectPropertyRef; } }\r\n            public static MethodInfo SetProperty { get { if (_SetProperty == null) _SetProperty = _this.GetMethod(\"SetProperty\"); return _SetProperty; } }\r\n            public static MethodInfo SetObjectProperty { get { if (_SetObjectProperty == null) _SetObjectProperty = _this.GetMethod(\"SetObjectProperty\"); return _SetObjectProperty; } }\r\n            public static MethodInfo SetObjectFieldDirect { get { if (_SetObjectFieldDirect == null) _SetObjectFieldDirect = _this.GetMethod(\"SetObjectFieldDirect\"); return _SetObjectFieldDirect; } }\r\n            public static MethodInfo SetObjectFieldDirectRef { get { if (_SetObjectFieldDirectRef == null) _SetObjectFieldDirectRef = _this.GetMethod(\"SetObjectFieldDirectRef\"); return _SetObjectFieldDirectRef; } }\r\n            public static MethodInfo GetObjectFieldDirect { get { if (_GetObjectFieldDirect == null) _GetObjectFieldDirect = _this.GetMethod(\"GetObjectFieldDirect\"); return _GetObjectFieldDirect; } }\r\n            public static MethodInfo GetObjectFieldDirectRef { get { if (_GetObjectFieldDirectRef == null) _GetObjectFieldDirectRef = _this.GetMethod(\"GetObjectFieldDirectRef\"); return _GetObjectFieldDirectRef; } }\r\n            public static MethodInfo UnsetProperty { get { if (_UnsetProperty == null) _UnsetProperty = _this.GetMethod(\"UnsetProperty\"); return _UnsetProperty; } }\r\n            public static MethodInfo InvokeMethodObj { get { if (_InvokeMethodObj == null) _InvokeMethodObj = _this.GetMethod(\"InvokeMethod\", new Type[] { Types.Object[0], Types.Object[0], Types.DTypeDesc[0], Types.ScriptContext[0] }); return _InvokeMethodObj; } }\r\n            public static MethodInfo InvokeMethodStr { get { if (_InvokeMethodStr == null) _InvokeMethodStr = _this.GetMethod(\"InvokeMethod\", new Type[] { Types.Object[0], Types.String[0], Types.DTypeDesc[0], Types.ScriptContext[0] }); return _InvokeMethodStr; } }\r\n            public static MethodInfo Clone { get { if (_Clone == null) _Clone = _this.GetMethod(\"Clone\"); return _Clone; } }\r\n            public static MethodInfo GetClassConstant { get { if (_GetClassConstant == null) _GetClassConstant = _this.GetMethod(\"GetClassConstant\"); return _GetClassConstant; } }\r\n            public static MethodInfo GetStaticProperty { get { if (_GetStaticProperty == null) _GetStaticProperty = _this.GetMethod(\"GetStaticProperty\"); return _GetStaticProperty; } }\r\n            public static MethodInfo GetStaticPropertyRef { get { if (_GetStaticPropertyRef == null) _GetStaticPropertyRef = _this.GetMethod(\"GetStaticPropertyRef\"); return _GetStaticPropertyRef; } }\r\n            public static MethodInfo SetStaticProperty { get { if (_SetStaticProperty == null) _SetStaticProperty = _this.GetMethod(\"SetStaticProperty\"); return _SetStaticProperty; } }\r\n            public static MethodInfo UnsetStaticProperty { get { if (_UnsetStaticProperty == null) _UnsetStaticProperty = _this.GetMethod(\"UnsetStaticProperty\"); return _UnsetStaticProperty; } }\r\n            public static MethodInfo InvokeStaticMethod { get { if (_InvokeStaticMethod == null) _InvokeStaticMethod = _this.GetMethod(\"InvokeStaticMethod\"); return _InvokeStaticMethod; } }\r\n            public static MethodInfo New { get { if (_New == null) _New = _this.GetMethod(\"New\"); return _New; } }\r\n            public static MethodInfo NewClr { get { if (_NewClr == null) _NewClr = _this.GetMethod(\"NewClr\"); return _NewClr; } }\r\n            public static MethodInfo InstanceOf { get { if (_InstanceOf == null) _InstanceOf = _this.GetMethod(\"InstanceOf\"); return _InstanceOf; } }\r\n            public static MethodInfo TypeOf { get { if (_TypeOf == null) _TypeOf = _this.GetMethod(\"TypeOf\"); return _TypeOf; } }\r\n            public static MethodInfo StrictEquality { get { return _StrictEquality ?? (_StrictEquality = new Func<object, object, bool>(Core.Operators.StrictEquality).Method); } }\r\n            public static MethodInfo StrictEmptyPhpArrayEquality { get { return _StrictEmptyPhpArrayEquality ?? (_StrictEmptyPhpArrayEquality = new Func<object,bool>(Core.Operators.StrictEmptyPhpArrayEquality).Method); } }\r\n            public static MethodInfo StrictEmptyPhpArrayEquality_PhpArray { get { return _StrictEmptyPhpArrayEquality_PhpArray ?? (_StrictEmptyPhpArrayEquality_PhpArray = new Func<Core.PhpArray, bool>(Core.Operators.StrictEmptyPhpArrayEquality).Method); } }\r\n            public static MethodInfo Throw { get { if (_Throw == null) _Throw = _this.GetMethod(\"Throw\"); return _Throw; } }\r\n            public static MethodInfo ToAbsoluteSourcePath { get { if (_ToAbsoluteSourcePath == null) _ToAbsoluteSourcePath = _this.GetMethod(\"ToAbsoluteSourcePath\"); return _ToAbsoluteSourcePath; } }\r\n            public static MethodInfo IsCallable { get { return _IsCallable ?? (_IsCallable = _this.GetMethod(\"IsCallable\")); } }\r\n            public static MethodInfo GetFullyQualifiedName { get { return _GetFullyQualifiedName ?? (_GetFullyQualifiedName = new Func<DTypeDesc, string>(PHP.Core.Operators.GetFullyQualifiedName).Method); } }\r\n\r\n            public static class MakeGenericTypeInstantiation\r\n            {\r\n                private static MethodInfo _1, _2, _3, _4, _N;\r\n                public const int ExplicitOverloads = 4;\r\n\r\n                public static MethodInfo Overload(int i)\r\n                {\r\n                    Type d = Types.DTypeDesc[0];\r\n                    switch (i)\r\n                    {\r\n                        case 1: if (_1 == null) _1 = _this.GetMethod(\"MakeGenericTypeInstantiation\", new Type[] { d, d }); return _1;\r\n                        case 2: if (_2 == null) _2 = _this.GetMethod(\"MakeGenericTypeInstantiation\", new Type[] { d, d, d }); return _2;\r\n                        case 3: if (_3 == null) _3 = _this.GetMethod(\"MakeGenericTypeInstantiation\", new Type[] { d, d, d, d }); return _3;\r\n                        case 4: if (_4 == null) _4 = _this.GetMethod(\"MakeGenericTypeInstantiation\", new Type[] { d, d, d, d, d }); return _4;\r\n\r\n                        default:\r\n                            Debug.Assert(i > 4);\r\n                            return N;\r\n                    }\r\n                }\r\n\r\n                public static MethodInfo N { get { if (_N == null) _N = _this.GetMethod(\"MakeGenericTypeInstantiation\", new Type[] { Types.DTypeDesc[0], typeof(Reflection.DTypeDesc[]) }); return _N; } }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Application Context\r\n\r\n        public static class ApplicationContext\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.ApplicationContext); } }\r\n            static MethodInfo _DeclareType_TypeDesc, _DeclareType_Handle, _DeclareFunction, _DeclareConstant;\r\n\r\n            public static MethodInfo DeclareType_TypeDesc { get { if (_DeclareType_TypeDesc == null) _DeclareType_TypeDesc = _this.GetMethod(\"DeclareType\", new Type[] { Types.DTypeDesc[0], Types.String[0] }); return _DeclareType_TypeDesc; } }\r\n            public static MethodInfo DeclareType_Handle { get { if (_DeclareType_Handle == null) _DeclareType_Handle = _this.GetMethod(\"DeclareType\", new Type[] { typeof(RuntimeTypeHandle), Types.String[0] }); return _DeclareType_Handle; } }\r\n            public static MethodInfo DeclareFunction { get { if (_DeclareFunction == null) _DeclareFunction = _this.GetMethod(\"DeclareFunction\"); return _DeclareFunction; } }\r\n            public static MethodInfo DeclareConstant { get { if (_DeclareConstant == null) _DeclareConstant = _this.GetMethod(\"DeclareConstant\"); return _DeclareConstant; } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ScriptContext\r\n\r\n        public static class ScriptContext\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.ScriptContext); } }\r\n\r\n            /*public struct Echo\r\n            {\r\n                static MethodInfo _bool, _double, _int, _longInt, _object, _string, _PhpBytes, _ObjectArray;\r\n\r\n                public static MethodInfo Bool { get { if (_bool == null)   _bool = _this.GetMethod(\"Echo\", Types.Bool); return _bool; } }\r\n                public static MethodInfo Double { get { if (_double == null) _double = _this.GetMethod(\"Echo\", Types.Double); return _double; } }\r\n                public static MethodInfo Int { get { if (_int == null)    _int = _this.GetMethod(\"Echo\", Types.Int); return _int; } }\r\n                public static MethodInfo LongInt { get { if (_longInt == null)_longInt = _this.GetMethod(\"Echo\", Types.LongInt); return _longInt; } }\r\n                public static MethodInfo Object { get { if (_object == null) _object = _this.GetMethod(\"Echo\", Types.Object); return _object; } }\r\n                public static MethodInfo String { get { if (_string == null) _string = _this.GetMethod(\"Echo\", Types.String); return _string; } }\r\n                public static MethodInfo PhpBytes { get { if (_PhpBytes == null) _PhpBytes = _this.GetMethod(\"Echo\", Types.PhpBytes); return _PhpBytes; } }\r\n                public static MethodInfo ObjectArray { get { if (_ObjectArray == null) _ObjectArray = _this.GetMethod(\"Echo\", Types.ObjectArray); return _ObjectArray; } }\r\n            }*/\r\n\r\n            /// <summary>\r\n            /// Same as Echo.*, but methods are static and the ScriptContext argument is the second one.\r\n            /// </summary>\r\n            public struct EchoStatic\r\n            {\r\n                static MethodInfo _bool, _double, _int, _longInt, _object, _string, _phpBytes;\r\n\r\n                public static MethodInfo Bool { get { return _bool ?? (_bool = new Action<bool, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo Double { get { return _double ?? (_double = new Action<double, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo Int { get { return _int ?? (_int = new Action<int, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo LongInt { get { return _longInt ?? (_longInt = new Action<long, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo Object { get { return _object ?? (_object = new Action<object, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo String { get { return _string?? (_string = new Action<string, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n                public static MethodInfo PhpBytes { get { return _phpBytes ?? (_phpBytes = new Action<PHP.Core.PhpBytes, PHP.Core.ScriptContext>(PHP.Core.ScriptContext.Echo).Method); } }\r\n            }\r\n\r\n            static MethodInfo\r\n                _DisableErrorReporting, _EnableErrorReporting,\r\n                _GetCurrentContext, _Die, _StaticInclude, _DynamicInclude, _GetStaticLocal, _GetStaticLocalId, _AddStaticLocal, _RunApplication,\r\n                _IsConstantDefined, _GetConstantValue, _DeclareConstant, _RegisterDObjectForFinalization,\r\n                _DeclareFunction, _DeclareLambda, _Call, _CallValue, _CallVoid, _DeclareType_TypeDesc, _DeclareType_Handle, _DeclareIncompleteTypeHelper, _IncompleteTypeDeclared,\r\n                _GetWorkingDirectory;\r\n\r\n            public static MethodInfo RunApplication { get { if (_RunApplication == null) _RunApplication = _this.GetMethod(\"RunApplication\", new Type[] { typeof(Delegate), typeof(string), typeof(string) }); return _RunApplication; } }\r\n            public static MethodInfo GetCurrentContext { get { if (_GetCurrentContext == null) _GetCurrentContext = _this.GetMethod(\"get_CurrentContext\"); return _GetCurrentContext; } }\r\n            public static MethodInfo GetWorkingDirectory { get { if (_GetWorkingDirectory == null) _GetWorkingDirectory = _this.GetMethod(\"get_WorkingDirectory\"); return _GetWorkingDirectory; } }\r\n            public static MethodInfo Die { get { if (_Die == null) _Die = _this.GetMethod(\"Die\"); return _Die; } }\r\n\r\n            public static MethodInfo StaticInclude { get { return _StaticInclude ?? (_StaticInclude = _this.GetMethod(\"StaticInclude\")); } }\r\n            public static MethodInfo DynamicInclude { get { if (_DynamicInclude == null) _DynamicInclude = _this.GetMethod(\"DynamicInclude\"); return _DynamicInclude; } }\r\n\r\n            public static MethodInfo DisableErrorReporting { get { if (_DisableErrorReporting == null) _DisableErrorReporting = _this.GetMethod(\"DisableErrorReporting\"); return _DisableErrorReporting; } }\r\n            public static MethodInfo EnableErrorReporting { get { if (_EnableErrorReporting == null) _EnableErrorReporting = _this.GetMethod(\"EnableErrorReporting\"); return _EnableErrorReporting; } }\r\n\r\n            public static MethodInfo GetStaticLocal { get { if (_GetStaticLocal == null) _GetStaticLocal = _this.GetMethod(\"GetStaticLocal\"); return _GetStaticLocal; } }\r\n            public static MethodInfo GetStaticLocalId { get { return _GetStaticLocalId ?? (_GetStaticLocalId = _this.GetMethod(\"GetStaticLocalId\")); } }\r\n            public static MethodInfo AddStaticLocal { get { if (_AddStaticLocal == null) _AddStaticLocal = _this.GetMethod(\"AddStaticLocal\"); return _AddStaticLocal; } }\r\n            \r\n            public static MethodInfo GetConstantValue { get { if (_GetConstantValue == null) _GetConstantValue = _this.GetMethod(\"GetConstantValue\", new Type[] { typeof(string), typeof(string) }); return _GetConstantValue; } }\r\n            public static MethodInfo IsConstantDefined { get { if (_IsConstantDefined == null) _IsConstantDefined = _this.GetMethod(\"IsConstantDefined\", new Type[] { typeof(string) }); return _IsConstantDefined; } }\r\n            public static MethodInfo DeclareConstant { get { return _DeclareConstant ?? (_DeclareConstant = _this.GetMethod(\"DeclareConstant\", new Type[] { typeof(string), typeof(object) })); } }\r\n\r\n            public static MethodInfo RegisterDObjectForFinalization { get { if (_RegisterDObjectForFinalization == null) _RegisterDObjectForFinalization = _this.GetMethod(\"RegisterDObjectForFinalization\"); return _RegisterDObjectForFinalization; } }\r\n\r\n            public static MethodInfo DeclareFunction { get { if (_DeclareFunction == null) _DeclareFunction = _this.GetMethod(\"DeclareFunction\"); return _DeclareFunction; } }\r\n            public static MethodInfo DeclareLambda { get { if (_DeclareLambda == null) _DeclareLambda = _this.GetMethod(\"DeclareLambda\"); return _DeclareLambda; } }\r\n            \r\n            public static MethodInfo Call { get { if (_Call == null) _Call = _this.GetMethod(\"Call\", new Type[] { typeof(Dictionary<string, object>), typeof(PHP.Core.NamingContext), typeof(object), typeof(string), typeof(DRoutineDesc).MakeByRefType(), typeof(PHP.Core.ScriptContext) }); return _Call; } }\r\n            public static MethodInfo CallValue { get { return _CallValue ?? (_CallValue = _this.GetMethod(\"CallValue\", new Type[] { typeof(Dictionary<string, object>), typeof(PHP.Core.NamingContext), typeof(object), typeof(string), typeof(DRoutineDesc).MakeByRefType(), typeof(PHP.Core.ScriptContext) })); } }\r\n            public static MethodInfo CallVoid { get { return _CallVoid ?? (_CallVoid = _this.GetMethod(\"CallVoid\", new Type[] { typeof(Dictionary<string, object>), typeof(PHP.Core.NamingContext), typeof(object), typeof(string), typeof(DRoutineDesc).MakeByRefType(), typeof(PHP.Core.ScriptContext) })); } }\r\n\r\n            public static MethodInfo DeclareType_Handle { get { if (_DeclareType_Handle == null) _DeclareType_Handle = _this.GetMethod(\"DeclareType\", new Type[] { typeof(RuntimeTypeHandle), Types.String[0] }); return _DeclareType_Handle; } }\r\n            public static MethodInfo DeclareType_TypeDesc { get { if (_DeclareType_TypeDesc == null) _DeclareType_TypeDesc = _this.GetMethod(\"DeclareType\", new Type[] { Types.PhpTypeDesc[0], Types.String[0] }); return _DeclareType_TypeDesc; } }\r\n            public static MethodInfo DeclareIncompleteTypeHelper { get { return _DeclareIncompleteTypeHelper ?? (_DeclareIncompleteTypeHelper = _this.GetMethod(\"DeclareIncompleteTypeHelper\")); } }\r\n            public static MethodInfo IncompleteTypeDeclared { get { return _IncompleteTypeDeclared ?? (_IncompleteTypeDeclared = _this.GetMethod(\"IncompleteTypeDeclared\")); } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpVariable\r\n\r\n        public struct PhpVariable\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.PhpVariable); } }\r\n            static MethodInfo _Copy, _IsEmpty, _IsString, _MakeReference, _AsString, _Dereference, _Unwrap;\r\n\r\n            public static MethodInfo Copy { get { if (_Copy == null) _Copy = _this.GetMethod(\"Copy\"); return _Copy; } }\r\n            public static MethodInfo IsEmpty { get { if (_IsEmpty == null) _IsEmpty = _this.GetMethod(\"IsEmpty\"); return _IsEmpty; } }\r\n            public static MethodInfo IsString { get { if (_IsString == null) _IsString = _this.GetMethod(\"IsString\"); return _IsString; } }\r\n            public static MethodInfo AsString { get { if (_AsString == null) _AsString = _this.GetMethod(\"AsString\"); return _AsString; } }\r\n            public static MethodInfo MakeReference { get { if (_MakeReference == null) _MakeReference = _this.GetMethod(\"MakeReference\"); return _MakeReference; } }\r\n            public static MethodInfo Dereference { get { return _Dereference ?? (_Dereference = _this.GetMethod(\"Dereference\", Types.Object)); } }\r\n            public static MethodInfo Unwrap { get { return _Unwrap ?? (_Unwrap = _this.GetMethod(\"Unwrap\")); } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Conversions\r\n\r\n        // automatically generated by MethodsGenerator:\r\n        // removed: \r\n        //   ByteArrayToCharArray\r\n        public struct Convert\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.Convert); } }\r\n            static MethodInfo _ObjectToString, _ObjectToChar, _ObjectToPhpBytes, _ObjectToBoolean, _ObjectToInteger, _ObjectToLongInteger,\r\n                _ObjectToDouble, _ObjectToPhpArray, _ObjectToDObject, _ObjectToCallback, _ObjectToTypeDesc,\r\n                _TryObjectToBoolean, _TryObjectToInt8, _TryObjectToInt16, _TryObjectToInt32, _TryObjectToInt64, _TryObjectToUInt8,\r\n                _TryObjectToUInt16, _TryObjectToUInt32, _TryObjectToUInt64, _TryObjectToSingle, _TryObjectToDouble, _TryObjectToDecimal,\r\n                _TryObjectToChar, _TryObjectToString, _TryObjectToDateTime, _TryObjectToDBNull, _TryObjectToClass, _TryObjectToStruct,\r\n                _TryObjectToDelegate, _TryObjectToArray, _TryObjectToType, _StringToTypeDesc, _StringToBoolean;\r\n\r\n            public static MethodInfo ObjectToString { get { if (_ObjectToString == null) _ObjectToString = _this.GetMethod(\"ObjectToString\", Types.Object); return _ObjectToString; } }\r\n            public static MethodInfo ObjectToChar { get { if (_ObjectToChar == null) _ObjectToChar = _this.GetMethod(\"ObjectToChar\"); return _ObjectToChar; } }\r\n            public static MethodInfo ObjectToPhpBytes { get { if (_ObjectToPhpBytes == null) _ObjectToPhpBytes = _this.GetMethod(\"ObjectToPhpBytes\"); return _ObjectToPhpBytes; } }\r\n            public static MethodInfo ObjectToBoolean { get { if (_ObjectToBoolean == null) _ObjectToBoolean = _this.GetMethod(\"ObjectToBoolean\"); return _ObjectToBoolean; } }\r\n            public static MethodInfo ObjectToInteger { get { if (_ObjectToInteger == null) _ObjectToInteger = _this.GetMethod(\"ObjectToInteger\"); return _ObjectToInteger; } }\r\n            public static MethodInfo ObjectToLongInteger { get { if (_ObjectToLongInteger == null) _ObjectToLongInteger = _this.GetMethod(\"ObjectToLongInteger\"); return _ObjectToLongInteger; } }\r\n            public static MethodInfo ObjectToDouble { get { if (_ObjectToDouble == null) _ObjectToDouble = _this.GetMethod(\"ObjectToDouble\"); return _ObjectToDouble; } }\r\n            public static MethodInfo ObjectToPhpArray { get { if (_ObjectToPhpArray == null) _ObjectToPhpArray = _this.GetMethod(\"ObjectToPhpArray\"); return _ObjectToPhpArray; } }\r\n            public static MethodInfo ObjectToDObject { get { if (_ObjectToDObject == null) _ObjectToDObject = _this.GetMethod(\"ObjectToDObject\"); return _ObjectToDObject; } }\r\n            public static MethodInfo ObjectToCallback { get { if (_ObjectToCallback == null) _ObjectToCallback = _this.GetMethod(\"ObjectToCallback\", Types.Object); return _ObjectToCallback; } }\r\n            public static MethodInfo ObjectToTypeDesc { get { if (_ObjectToTypeDesc == null) _ObjectToTypeDesc = _this.GetMethod(\"ObjectToTypeDesc\"); return _ObjectToTypeDesc; } }\r\n            \r\n            public static MethodInfo StringToTypeDesc { get { return _StringToTypeDesc ?? (_StringToTypeDesc = new Func<string, ResolveTypeFlags, DTypeDesc, Core.ScriptContext, Core.NamingContext, object[], DTypeDesc>(Core.Convert.StringToTypeDesc).Method); } }\r\n            public static MethodInfo StringToBoolean { get { return _StringToBoolean ?? (_StringToBoolean = new Func<string, bool>(Core.Convert.StringToBoolean).Method); } }\r\n\r\n            public static MethodInfo TryObjectToBoolean { get { if (_TryObjectToBoolean == null) _TryObjectToBoolean = _this.GetMethod(\"TryObjectToBoolean\"); return _TryObjectToBoolean; } }\r\n            public static MethodInfo TryObjectToInt8 { get { if (_TryObjectToInt8 == null) _TryObjectToInt8 = _this.GetMethod(\"TryObjectToInt8\"); return _TryObjectToInt8; } }\r\n            public static MethodInfo TryObjectToInt16 { get { if (_TryObjectToInt16 == null) _TryObjectToInt16 = _this.GetMethod(\"TryObjectToInt16\"); return _TryObjectToInt16; } }\r\n            public static MethodInfo TryObjectToInt32 { get { if (_TryObjectToInt32 == null) _TryObjectToInt32 = _this.GetMethod(\"TryObjectToInt32\"); return _TryObjectToInt32; } }\r\n            public static MethodInfo TryObjectToInt64 { get { if (_TryObjectToInt64 == null) _TryObjectToInt64 = _this.GetMethod(\"TryObjectToInt64\"); return _TryObjectToInt64; } }\r\n            public static MethodInfo TryObjectToUInt8 { get { if (_TryObjectToUInt8 == null) _TryObjectToUInt8 = _this.GetMethod(\"TryObjectToUInt8\"); return _TryObjectToUInt8; } }\r\n            public static MethodInfo TryObjectToUInt16 { get { if (_TryObjectToUInt16 == null) _TryObjectToUInt16 = _this.GetMethod(\"TryObjectToUInt16\"); return _TryObjectToUInt16; } }\r\n            public static MethodInfo TryObjectToUInt32 { get { if (_TryObjectToUInt32 == null) _TryObjectToUInt32 = _this.GetMethod(\"TryObjectToUInt32\"); return _TryObjectToUInt32; } }\r\n            public static MethodInfo TryObjectToUInt64 { get { if (_TryObjectToUInt64 == null) _TryObjectToUInt64 = _this.GetMethod(\"TryObjectToUInt64\"); return _TryObjectToUInt64; } }\r\n            public static MethodInfo TryObjectToSingle { get { if (_TryObjectToSingle == null) _TryObjectToSingle = _this.GetMethod(\"TryObjectToSingle\"); return _TryObjectToSingle; } }\r\n            public static MethodInfo TryObjectToDouble { get { if (_TryObjectToDouble == null) _TryObjectToDouble = _this.GetMethod(\"TryObjectToDouble\"); return _TryObjectToDouble; } }\r\n            public static MethodInfo TryObjectToDecimal { get { if (_TryObjectToDecimal == null) _TryObjectToDecimal = _this.GetMethod(\"TryObjectToDecimal\"); return _TryObjectToDecimal; } }\r\n            public static MethodInfo TryObjectToChar { get { if (_TryObjectToChar == null) _TryObjectToChar = _this.GetMethod(\"TryObjectToChar\"); return _TryObjectToChar; } }\r\n            public static MethodInfo TryObjectToString { get { if (_TryObjectToString == null) _TryObjectToString = _this.GetMethod(\"TryObjectToString\"); return _TryObjectToString; } }\r\n            public static MethodInfo TryObjectToDateTime { get { if (_TryObjectToDateTime == null) _TryObjectToDateTime = _this.GetMethod(\"TryObjectToDateTime\"); return _TryObjectToDateTime; } }\r\n            public static MethodInfo TryObjectToDBNull { get { if (_TryObjectToDBNull == null) _TryObjectToDBNull = _this.GetMethod(\"TryObjectToDBNull\"); return _TryObjectToDBNull; } }\r\n            public static MethodInfo TryObjectToClass { get { if (_TryObjectToClass == null) _TryObjectToClass = _this.GetMethod(\"TryObjectToClass\"); return _TryObjectToClass; } }\r\n            public static MethodInfo TryObjectToStruct { get { if (_TryObjectToStruct == null) _TryObjectToStruct = _this.GetMethod(\"TryObjectToStruct\"); return _TryObjectToStruct; } }\r\n            public static MethodInfo TryObjectToDelegate { get { if (_TryObjectToDelegate == null) _TryObjectToDelegate = _this.GetMethod(\"TryObjectToDelegate\"); return _TryObjectToDelegate; } }\r\n            public static MethodInfo TryObjectToArray { get { if (_TryObjectToArray == null) _TryObjectToArray = _this.GetMethod(\"TryObjectToArray\"); return _TryObjectToArray; } }\r\n            public static MethodInfo TryObjectToType { get { if (_TryObjectToType == null) _TryObjectToType = _this.GetMethod(\"TryObjectToType\"); return _TryObjectToType; } }\r\n        }\r\n\r\n        // automatically generated by MethodsGenerator:\r\n        public struct ConvertToClr\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.ConvertToClr); } }\r\n            static MethodInfo _TryObjectToClass, _TryObjectToDelegate, _TryObjectToArray, _TryObjectToStruct, _TryObjectToType, _TryObjectToBoolean, _TryObjectToInt8, _TryObjectToInt16, _TryObjectToUInt8, _TryObjectToUInt16, _TryObjectToUInt32, _TryObjectToInt32, _TryObjectToInt64, _TryObjectToUInt64, _TryObjectToSingle, _TryObjectToDouble, _TryObjectToDecimal, _TryObjectToChar, _TryObjectToString, _TryObjectToDateTime, _TryObjectToDBNull, _UnwrapNullable;\r\n\r\n            public static MethodInfo TryObjectToClass { get { if (_TryObjectToClass == null) _TryObjectToClass = _this.GetMethod(\"TryObjectToClass\"); return _TryObjectToClass; } }\r\n            public static MethodInfo TryObjectToDelegate { get { if (_TryObjectToDelegate == null) _TryObjectToDelegate = _this.GetMethod(\"TryObjectToDelegate\"); return _TryObjectToDelegate; } }\r\n            public static MethodInfo TryObjectToArray { get { if (_TryObjectToArray == null) _TryObjectToArray = _this.GetMethod(\"TryObjectToArray\"); return _TryObjectToArray; } }\r\n            public static MethodInfo TryObjectToStruct { get { if (_TryObjectToStruct == null) _TryObjectToStruct = _this.GetMethod(\"TryObjectToStruct\"); return _TryObjectToStruct; } }\r\n            public static MethodInfo UnwrapNullable { get { if (_UnwrapNullable == null) _UnwrapNullable = _this.GetMethod(\"UnwrapNullable\"); return _UnwrapNullable; } }\r\n            public static MethodInfo TryObjectToType { get { if (_TryObjectToType == null) _TryObjectToType = _this.GetMethod(\"TryObjectToType\"); return _TryObjectToType; } }\r\n            public static MethodInfo TryObjectToBoolean { get { if (_TryObjectToBoolean == null) _TryObjectToBoolean = _this.GetMethod(\"TryObjectToBoolean\"); return _TryObjectToBoolean; } }\r\n            public static MethodInfo TryObjectToInt8 { get { if (_TryObjectToInt8 == null) _TryObjectToInt8 = _this.GetMethod(\"TryObjectToInt8\"); return _TryObjectToInt8; } }\r\n            public static MethodInfo TryObjectToInt16 { get { if (_TryObjectToInt16 == null) _TryObjectToInt16 = _this.GetMethod(\"TryObjectToInt16\"); return _TryObjectToInt16; } }\r\n            public static MethodInfo TryObjectToUInt8 { get { if (_TryObjectToUInt8 == null) _TryObjectToUInt8 = _this.GetMethod(\"TryObjectToUInt8\"); return _TryObjectToUInt8; } }\r\n            public static MethodInfo TryObjectToUInt16 { get { if (_TryObjectToUInt16 == null) _TryObjectToUInt16 = _this.GetMethod(\"TryObjectToUInt16\"); return _TryObjectToUInt16; } }\r\n            public static MethodInfo TryObjectToUInt32 { get { if (_TryObjectToUInt32 == null) _TryObjectToUInt32 = _this.GetMethod(\"TryObjectToUInt32\"); return _TryObjectToUInt32; } }\r\n            public static MethodInfo TryObjectToInt32 { get { if (_TryObjectToInt32 == null) _TryObjectToInt32 = _this.GetMethod(\"TryObjectToInt32\"); return _TryObjectToInt32; } }\r\n            public static MethodInfo TryObjectToInt64 { get { if (_TryObjectToInt64 == null) _TryObjectToInt64 = _this.GetMethod(\"TryObjectToInt64\"); return _TryObjectToInt64; } }\r\n            public static MethodInfo TryObjectToUInt64 { get { if (_TryObjectToUInt64 == null) _TryObjectToUInt64 = _this.GetMethod(\"TryObjectToUInt64\"); return _TryObjectToUInt64; } }\r\n            public static MethodInfo TryObjectToSingle { get { if (_TryObjectToSingle == null) _TryObjectToSingle = _this.GetMethod(\"TryObjectToSingle\"); return _TryObjectToSingle; } }\r\n            public static MethodInfo TryObjectToDouble { get { if (_TryObjectToDouble == null) _TryObjectToDouble = _this.GetMethod(\"TryObjectToDouble\"); return _TryObjectToDouble; } }\r\n            public static MethodInfo TryObjectToDecimal { get { if (_TryObjectToDecimal == null) _TryObjectToDecimal = _this.GetMethod(\"TryObjectToDecimal\"); return _TryObjectToDecimal; } }\r\n            public static MethodInfo TryObjectToChar { get { if (_TryObjectToChar == null) _TryObjectToChar = _this.GetMethod(\"TryObjectToChar\"); return _TryObjectToChar; } }\r\n            public static MethodInfo TryObjectToString { get { if (_TryObjectToString == null) _TryObjectToString = _this.GetMethod(\"TryObjectToString\"); return _TryObjectToString; } }\r\n            public static MethodInfo TryObjectToDateTime { get { if (_TryObjectToDateTime == null) _TryObjectToDateTime = _this.GetMethod(\"TryObjectToDateTime\"); return _TryObjectToDateTime; } }\r\n            public static MethodInfo TryObjectToDBNull { get { if (_TryObjectToDBNull == null) _TryObjectToDBNull = _this.GetMethod(\"TryObjectToDBNull\"); return _TryObjectToDBNull; } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Comparisons\r\n\r\n        static MethodInfo _CompareEq_object_object, _CompareEq_object_int, _CompareEq_object_string, _CompareOp_object_object_bool, _CompareOp_int_int, _CompareOp_object_int_bool, _CompareOp_int_object_bool;\r\n\r\n        public static MethodInfo CompareEq_object_object { get { return _CompareEq_object_object ?? (_CompareEq_object_object = new Func<object,object,bool>(PHP.Core.PhpComparer.CompareEq).Method); } }\r\n        public static MethodInfo CompareEq_object_int { get { return _CompareEq_object_int ?? (_CompareEq_object_int = new Func<object, int, bool>(PHP.Core.PhpComparer.CompareEq).Method); } }\r\n        public static MethodInfo CompareEq_object_string { get { return _CompareEq_object_string ?? (_CompareEq_object_string = new Func<object, string, bool>(PHP.Core.PhpComparer.CompareEq).Method); } }\r\n        public static MethodInfo CompareOp_object_object_bool { get { return _CompareOp_object_object_bool ?? (_CompareOp_object_object_bool = typeof(PHP.Core.PhpComparer).GetMethod(\"CompareOp\", Types.Object_Object_Bool)); } }\r\n        public static MethodInfo CompareOp_int_int { get { return _CompareOp_int_int ?? (_CompareOp_int_int = typeof(PHP.Core.PhpComparer).GetMethod(\"CompareOp\", Types.Int_Int)); } }\r\n        public static MethodInfo CompareOp_object_int_bool { get { return _CompareOp_object_int_bool ?? (_CompareOp_object_int_bool = typeof(PHP.Core.PhpComparer).GetMethod(\"CompareOp\", new Type[] { typeof(object), typeof(int), typeof(bool) })); } }\r\n        public static MethodInfo CompareOp_int_object_bool { get { return _CompareOp_int_object_bool ?? (_CompareOp_int_object_bool = typeof(PHP.Core.PhpComparer).GetMethod(\"CompareOp\", new Type[] { typeof(int), typeof(object), typeof(bool) })); } }\r\n\r\n        #endregion\r\n\r\n        #region PhpStack\r\n\r\n        public struct PhpStack\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.PhpStack); } }\r\n            static MethodInfo _RemoveFrame, _RemoveArgsAwareFrame, _PeekValue, _PeekValueOptional,\r\n              _PeekReference, _PeekReferenceOptional, _PeekReferenceUnchecked, _PeekValueUnchecked,\r\n              _MakeArgsAware, _PeekType, _PeekTypeOptional, _ThrowIfNotArgsaware;\r\n\r\n\r\n            public static class AddFrame\r\n            {\r\n                private static MethodInfo _0, _1, _2, _3, _4, _5, _6, _7, _8, _N;\r\n                public const int ExplicitOverloads = 8;\r\n\r\n                public static MethodInfo Overload(int i)\r\n                {\r\n                    Type t = Types.Object[0];\r\n                    switch (i)\r\n                    {\r\n                        case 0: if (_0 == null) _0 = _this.GetMethod(\"AddFrame\", Type.EmptyTypes/*new Type[] {}*/); return _0;\r\n                        case 1: if (_1 == null) _1 = _this.GetMethod(\"AddFrame\", Types.Object/*new Type[] {t}*/); return _1;\r\n                        case 2: if (_2 == null) _2 = _this.GetMethod(\"AddFrame\", new Type[] { t, t }); return _2;\r\n                        case 3: if (_3 == null) _3 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t }); return _3;\r\n                        case 4: if (_4 == null) _4 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t, t }); return _4;\r\n                        case 5: if (_5 == null) _5 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t, t, t }); return _5;\r\n                        case 6: if (_6 == null) _6 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t, t, t, t }); return _6;\r\n                        case 7: if (_7 == null) _7 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t, t, t, t, t }); return _7;\r\n                        case 8: if (_8 == null) _8 = _this.GetMethod(\"AddFrame\", new Type[] { t, t, t, t, t, t, t, t }); return _8;\r\n\r\n                        default:\r\n                            return N;\r\n                    }\r\n                }\r\n\r\n                public static MethodInfo N { get { if (_N == null) _N = _this.GetMethod(\"AddFrame\", new Type[] { typeof(object[]) }); return _N; } }\r\n            }\r\n\r\n            public static class AddTypeFrame\r\n            {\r\n                private static MethodInfo _0, _1, _2, _3, _4, _5, _6, _7, _8, _N;\r\n                public const int ExplicitOverloads = 8;\r\n\r\n                public static MethodInfo Overload(int i)\r\n                {\r\n                    Type t = Types.DTypeDesc[0];\r\n                    switch (i)\r\n                    {\r\n                        case 0: if (_0 == null) _0 = _this.GetMethod(\"AddTypeFrame\", Type.EmptyTypes/*new Type[] {}*/); return _0;\r\n                        case 1: if (_1 == null) _1 = _this.GetMethod(\"AddTypeFrame\", Types.DTypeDesc/*new Type[] {t}*/); return _1;\r\n                        case 2: if (_2 == null) _2 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t }); return _2;\r\n                        case 3: if (_3 == null) _3 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t }); return _3;\r\n                        case 4: if (_4 == null) _4 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t, t }); return _4;\r\n                        case 5: if (_5 == null) _5 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t, t, t }); return _5;\r\n                        case 6: if (_6 == null) _6 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t, t, t, t }); return _6;\r\n                        case 7: if (_7 == null) _7 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t, t, t, t, t }); return _7;\r\n                        case 8: if (_8 == null) _8 = _this.GetMethod(\"AddTypeFrame\", new Type[] { t, t, t, t, t, t, t, t }); return _8;\r\n\r\n                        default:\r\n                            return N;\r\n                    }\r\n                }\r\n\r\n                public static MethodInfo N { get { if (_N == null) _N = _this.GetMethod(\"AddTypeFrame\", new Type[] { typeof(Reflection.DTypeDesc[]) }); return _N; } }\r\n            }\r\n\r\n            public static MethodInfo PeekValue { get { if (_PeekValue == null) _PeekValue = _this.GetMethod(\"PeekValue\"); return _PeekValue; } }\r\n            public static MethodInfo PeekValueOptional { get { if (_PeekValueOptional == null) _PeekValueOptional = _this.GetMethod(\"PeekValueOptional\"); return _PeekValueOptional; } }\r\n            public static MethodInfo PeekValueUnchecked { get { if (_PeekValueUnchecked == null) _PeekValueUnchecked = _this.GetMethod(\"PeekValueUnchecked\"); return _PeekValueUnchecked; } }\r\n            public static MethodInfo PeekReference { get { if (_PeekReference == null) _PeekReference = _this.GetMethod(\"PeekReference\"); return _PeekReference; } }\r\n            public static MethodInfo PeekReferenceOptional { get { if (_PeekReferenceOptional == null) _PeekReferenceOptional = _this.GetMethod(\"PeekReferenceOptional\"); return _PeekReferenceOptional; } }\r\n            public static MethodInfo PeekReferenceUnchecked { get { if (_PeekReferenceUnchecked == null) _PeekReferenceUnchecked = _this.GetMethod(\"PeekReferenceUnchecked\"); return _PeekReferenceUnchecked; } }\r\n            public static MethodInfo PeekType { get { if (_PeekType == null) _PeekType = _this.GetMethod(\"PeekType\"); return _PeekType; } }\r\n            public static MethodInfo PeekTypeOptional { get { if (_PeekTypeOptional == null) _PeekTypeOptional = _this.GetMethod(\"PeekTypeOptional\"); return _PeekTypeOptional; } }\r\n            public static MethodInfo RemoveFrame { get { if (_RemoveFrame == null) _RemoveFrame = _this.GetMethod(\"RemoveFrame\"); return _RemoveFrame; } }\r\n            public static MethodInfo RemoveArgsAwareFrame { get { if (_RemoveArgsAwareFrame == null) _RemoveArgsAwareFrame = _this.GetMethod(\"RemoveArgsAwareFrame\"); return _RemoveArgsAwareFrame; } }\r\n            public static MethodInfo MakeArgsAware { get { if (_MakeArgsAware == null) _MakeArgsAware = _this.GetMethod(\"MakeArgsAware\"); return _MakeArgsAware; } }\r\n            public static MethodInfo ThrowIfNotArgsaware { get { return _ThrowIfNotArgsaware ?? (_ThrowIfNotArgsaware = _this.GetMethod(\"ThrowIfNotArgsaware\")); } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpException\r\n\r\n        public struct PhpException\r\n        {\r\n            static MethodInfo _Throw, _MissingArgument, _MissingTypeArgument, _MissingArguments, _InvalidForeachArgument,\r\n                      _InvalidImplicitCast, _InvalidBreakLevelCount,\r\n                      _InvalidArgumentCount, _UndefinedVariable, _CannotReassignThis, _InvalidArgumentType, _ThisUsedOutOfObjectContext,\r\n                      _StaticPropertyUnset, _AbstractMethodCalled, _NoSuitableOverload, _PropertyTypeMismatch, _UndefinedMethodCalled,\r\n                      _FunctionNotSupported_String;\r\n\r\n            public static MethodInfo Throw { get { if (_Throw == null) _Throw = new Action<PhpError,string>(Core.PhpException.Throw).Method; return _Throw; } }\r\n            public static MethodInfo MissingArgument { get { if (_MissingArgument == null) _MissingArgument = new Action<int, string>(Core.PhpException.MissingArgument).Method; return _MissingArgument; } }\r\n            public static MethodInfo MissingTypeArgument { get { if (_MissingTypeArgument == null) _MissingTypeArgument = new Action<int, string>(Core.PhpException.MissingTypeArgument).Method; return _MissingTypeArgument; } }\r\n            public static MethodInfo MissingArguments { get { if (_MissingArguments == null) _MissingArguments = new Action<string,string,int,int>(Core.PhpException.MissingArguments).Method; return _MissingArguments; } }\r\n            public static MethodInfo InvalidArgumentCount { get { if (_InvalidArgumentCount == null) _InvalidArgumentCount = new Action<string, string>(Core.PhpException.InvalidArgumentCount).Method; return _InvalidArgumentCount; } }\r\n            public static MethodInfo InvalidForeachArgument { get { if (_InvalidForeachArgument == null) _InvalidForeachArgument = new Action(Core.PhpException.InvalidForeachArgument).Method; return _InvalidForeachArgument; } }\r\n            public static MethodInfo InvalidImplicitCast { get { if (_InvalidImplicitCast == null) _InvalidImplicitCast = new Action<object,string,string>(Core.PhpException.InvalidImplicitCast).Method; return _InvalidImplicitCast; } }\r\n            public static MethodInfo InvalidBreakLevelCount { get { if (_InvalidBreakLevelCount == null) _InvalidBreakLevelCount = new Action<int>(Core.PhpException.InvalidBreakLevelCount).Method; return _InvalidBreakLevelCount; } }\r\n            public static MethodInfo UndefinedVariable { get { if (_UndefinedVariable == null) _UndefinedVariable = new Action<string>(Core.PhpException.UndefinedVariable).Method; return _UndefinedVariable; } }\r\n            public static MethodInfo AbstractMethodCalled { get { if (_AbstractMethodCalled == null) _AbstractMethodCalled = new Action<string, string>(Core.PhpException.AbstractMethodCalled).Method; return _AbstractMethodCalled; } }\r\n            public static MethodInfo CannotReassignThis { get { if (_CannotReassignThis == null) _CannotReassignThis = new Action(Core.PhpException.CannotReassignThis).Method; return _CannotReassignThis; } }\r\n            public static MethodInfo InvalidArgumentType { get { if (_InvalidArgumentType == null) _InvalidArgumentType = new Action<string, string>(Core.PhpException.InvalidArgumentType).Method; return _InvalidArgumentType; } }\r\n            public static MethodInfo ThisUsedOutOfObjectContext { get { if (_ThisUsedOutOfObjectContext == null) _ThisUsedOutOfObjectContext = new Action(Core.PhpException.ThisUsedOutOfObjectContext).Method; return _ThisUsedOutOfObjectContext; } }\r\n            public static MethodInfo StaticPropertyUnset { get { if (_StaticPropertyUnset == null) _StaticPropertyUnset = new Action<string, string>(Core.PhpException.StaticPropertyUnset).Method; return _StaticPropertyUnset; } }\r\n            public static MethodInfo NoSuitableOverload { get { if (_NoSuitableOverload == null) _NoSuitableOverload = new Action<string, string>(Core.PhpException.NoSuitableOverload).Method; return _NoSuitableOverload; } }\r\n            public static MethodInfo PropertyTypeMismatch { get { if (_PropertyTypeMismatch == null) _PropertyTypeMismatch = new Action<string, string>(Core.PhpException.PropertyTypeMismatch).Method; return _PropertyTypeMismatch; } }\r\n            public static MethodInfo UndefinedMethodCalled { get { if (_UndefinedMethodCalled == null) _UndefinedMethodCalled = new Action<string, string>(Core.PhpException.UndefinedMethodCalled).Method; return _UndefinedMethodCalled; } }\r\n            public static MethodInfo FunctionNotSupported_String { get { return _FunctionNotSupported_String ?? (_FunctionNotSupported_String = new Action<string>(Core.PhpException.FunctionNotSupported).Method); } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SPL.Exception\r\n\r\n\r\n\r\n        #endregion\r\n\r\n        #region PhpRuntimeChain\r\n\r\n        public struct PhpRuntimeChain\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.PhpRuntimeChain); } }\r\n            static MethodInfo _AddField, _AddItem_Object, _AddItem_Void, _GetValue, _GetReference;\r\n\r\n            public static MethodInfo AddField { get { if (_AddField == null) _AddField = _this.GetMethod(\"AddField\"); return _AddField; } }\r\n            public static MethodInfo AddItem_Object { get { if (_AddItem_Object == null) _AddItem_Object = _this.GetMethod(\"AddItem\", Types.Object); return _AddItem_Object; } }\r\n            public static MethodInfo AddItem_Void { get { if (_AddItem_Void == null) _AddItem_Void = _this.GetMethod(\"AddItem\", Type.EmptyTypes); return _AddItem_Void; } }\r\n\r\n            public static MethodInfo GetValue { get { if (_GetValue == null) _GetValue = _this.GetMethod(\"GetValue\"); return _GetValue; } }\r\n            public static MethodInfo GetReference { get { if (_GetReference == null) _GetReference = _this.GetMethod(\"GetReference\"); return _GetReference; } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpArray\r\n\r\n        public struct PhpArray\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.PhpArray); } }\r\n\r\n            static MethodInfo\r\n                _GetArrayItem_Object,\r\n                _GetArrayItem_Int32,\r\n                _GetArrayItem_String,\r\n                _GetArrayItemExact_String,\r\n\r\n                _GetArrayItemRef,\r\n                _GetArrayItemRef_Object,\r\n                _GetArrayItemRef_Int32,\r\n                _GetArrayItemRef_String,\r\n\r\n                _SetArrayItem,\r\n                _SetArrayItem_Object,\r\n                _SetArrayItem_Int32,\r\n                _SetArrayItem_String,\r\n                _SetArrayItemExact_String,\r\n\r\n                _AddToEnd_Object,\r\n\r\n                _SetArrayItemRef_Object,\r\n                _SetArrayItemRef_Int32,\r\n                _SetArrayItemRef_String,\r\n\r\n                _EnsureItemIsArray,\r\n                _EnsureItemIsArray_Object,\r\n\r\n                _EnsureItemIsObject,\r\n                _EnsureItemIsObject_Object\r\n\r\n            ;\r\n\r\n            public static MethodInfo GetArrayItem_Object { get { if (_GetArrayItem_Object == null) _GetArrayItem_Object = _this.GetMethod(\"GetArrayItem\", new Type[] { typeof(object), typeof(bool) }); return _GetArrayItem_Object; } }\r\n            public static MethodInfo GetArrayItem_Int32 { get { if (_GetArrayItem_Int32 == null) _GetArrayItem_Int32 = _this.GetMethod(\"GetArrayItem\", new Type[] { typeof(int), typeof(bool) }); return _GetArrayItem_Int32; } }\r\n            public static MethodInfo GetArrayItem_String { get { if (_GetArrayItem_String == null) _GetArrayItem_String = _this.GetMethod(\"GetArrayItem\", new Type[] { typeof(string), typeof(bool) }); return _GetArrayItem_String; } }\r\n            public static MethodInfo GetArrayItemExact_String { get { if (_GetArrayItemExact_String == null) _GetArrayItemExact_String = _this.GetMethod(\"GetArrayItemExact\", new Type[] { typeof(string), typeof(bool), typeof(int) }); return _GetArrayItemExact_String; } }\r\n\r\n            public static MethodInfo GetArrayItemRef { get { if (_GetArrayItemRef == null) _GetArrayItemRef = _this.GetMethod(\"GetArrayItemRef\", Type.EmptyTypes); return _GetArrayItemRef; } }\r\n            public static MethodInfo GetArrayItemRef_Object { get { if (_GetArrayItemRef_Object == null) _GetArrayItemRef_Object = _this.GetMethod(\"GetArrayItemRef\", Types.Object); return _GetArrayItemRef_Object; } }\r\n            public static MethodInfo GetArrayItemRef_Int32 { get { if (_GetArrayItemRef_Int32 == null) _GetArrayItemRef_Int32 = _this.GetMethod(\"GetArrayItemRef\", Types.Int); return _GetArrayItemRef_Int32; } }\r\n            public static MethodInfo GetArrayItemRef_String { get { if (_GetArrayItemRef_String == null) _GetArrayItemRef_String = _this.GetMethod(\"GetArrayItemRef\", Types.String); return _GetArrayItemRef_String; } }\r\n\r\n            public static MethodInfo SetArrayItem { get { if (_SetArrayItem == null) _SetArrayItem = _this.GetMethod(\"SetArrayItem\", Types.Object); return _SetArrayItem; } }\r\n            public static MethodInfo SetArrayItem_Object { get { if (_SetArrayItem_Object == null) _SetArrayItem_Object = _this.GetMethod(\"SetArrayItem\", new Type[] { typeof(object), typeof(object) }); return _SetArrayItem_Object; } }\r\n            public static MethodInfo SetArrayItem_Int32 { get { if (_SetArrayItem_Int32 == null) _SetArrayItem_Int32 = _this.GetMethod(\"SetArrayItem\", new Type[] { typeof(int), typeof(object) }); return _SetArrayItem_Int32; } }\r\n            public static MethodInfo SetArrayItem_String { get { if (_SetArrayItem_String == null) _SetArrayItem_String = _this.GetMethod(\"SetArrayItem\", new Type[] { typeof(string), typeof(object) }); return _SetArrayItem_String; } }\r\n            public static MethodInfo SetArrayItemExact_String { get { if (_SetArrayItemExact_String == null) _SetArrayItemExact_String = _this.GetMethod(\"SetArrayItemExact\", new Type[] { typeof(string), typeof(object), typeof(int) }); return _SetArrayItemExact_String; } }\r\n\r\n            public static MethodInfo AddToEnd_Object { get { return _AddToEnd_Object ?? (_AddToEnd_Object = _this.GetMethod(\"AddToEnd\", Types.Object)); } }\r\n\r\n            public static MethodInfo SetArrayItemRef_Object { get { if (_SetArrayItemRef_Object == null) _SetArrayItemRef_Object = _this.GetMethod(\"SetArrayItemRef\", new Type[] { typeof(object), typeof(PhpReference) }); return _SetArrayItemRef_Object; } }\r\n            public static MethodInfo SetArrayItemRef_Int32 { get { if (_SetArrayItemRef_Int32 == null) _SetArrayItemRef_Int32 = _this.GetMethod(\"SetArrayItemRef\", new Type[] { typeof(int), typeof(PhpReference) }); return _SetArrayItemRef_Int32; } }\r\n            public static MethodInfo SetArrayItemRef_String { get { if (_SetArrayItemRef_String == null) _SetArrayItemRef_String = _this.GetMethod(\"SetArrayItemRef\", new Type[] { typeof(string), typeof(PhpReference) }); return _SetArrayItemRef_String; } }\r\n\r\n            public static MethodInfo EnsureItemIsArray { get { if (_EnsureItemIsArray == null) _EnsureItemIsArray = _this.GetMethod(\"EnsureItemIsArray\", Type.EmptyTypes); return _EnsureItemIsArray; } }\r\n            public static MethodInfo EnsureItemIsArray_Object { get { if (_EnsureItemIsArray_Object == null) _EnsureItemIsArray_Object = _this.GetMethod(\"EnsureItemIsArray\", Types.Object); return _EnsureItemIsArray_Object; } }\r\n\r\n            public static MethodInfo EnsureItemIsObject { get { if (_EnsureItemIsObject == null) _EnsureItemIsObject = _this.GetMethod(\"EnsureItemIsObject\", Types.ScriptContext); return _EnsureItemIsObject; } }\r\n            public static MethodInfo EnsureItemIsObject_Object { get { if (_EnsureItemIsObject_Object == null) _EnsureItemIsObject_Object = _this.GetMethod(\"EnsureItemIsObject\", Types.Object_ScriptContext); return _EnsureItemIsObject_Object; } }\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpBytes\r\n\r\n        public struct PhpBytes\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.PhpBytes); } }\r\n\r\n            static MethodInfo\r\n                _Concat_PhpBytes_PhpBytes, _Concat_PhpBytes_Object, _Concat_Object_PhpBytes, _Append_Object_PhpBytes\r\n            ;\r\n\r\n            public static MethodInfo Concat_PhpBytes_PhpBytes { get { if (_Concat_PhpBytes_PhpBytes == null) _Concat_PhpBytes_PhpBytes = _this.GetMethod(\"Concat\", new Type[] { typeof(PHP.Core.PhpBytes), typeof(PHP.Core.PhpBytes) }); return _Concat_PhpBytes_PhpBytes; } }\r\n            public static MethodInfo Concat_PhpBytes_Object { get { if (_Concat_PhpBytes_Object == null) _Concat_PhpBytes_Object = _this.GetMethod(\"Concat\", new Type[] { typeof(PHP.Core.PhpBytes), typeof(Object) }); return _Concat_PhpBytes_Object; } }\r\n            public static MethodInfo Concat_Object_PhpBytes { get { if (_Concat_Object_PhpBytes == null) _Concat_Object_PhpBytes = _this.GetMethod(\"Concat\", new Type[] { typeof(Object), typeof(PHP.Core.PhpBytes) }); return _Concat_Object_PhpBytes; } }\r\n\r\n            public static MethodInfo Append_Object_PhpBytes { get { if (_Append_Object_PhpBytes == null) _Append_Object_PhpBytes = _this.GetMethod(\"Append\", new Type[] { typeof(Object), typeof(PHP.Core.PhpBytes) }); return _Append_Object_PhpBytes; } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Binder\r\n\r\n        public struct Binder\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.Binders.Binder); } }\r\n\r\n            static MethodInfo _MethodCall, _StaticMethodCall, _GetProperty, _StaticGetProperty;\r\n\r\n            public static MethodInfo MethodCall { get { return _MethodCall ?? (_MethodCall = _this.GetMethod(\"MethodCall\")); } }\r\n            public static MethodInfo StaticMethodCall { get { return _StaticMethodCall ?? (_StaticMethodCall = _this.GetMethod(\"StaticMethodCall\")); } }\r\n\r\n            public static MethodInfo GetProperty { get { return _GetProperty ?? (_GetProperty = _this.GetMethod(\"GetProperty\")); } }\r\n            public static MethodInfo StaticGetProperty { get { return _StaticGetProperty ?? (_StaticGetProperty = _this.GetMethod(\"StaticGetProperty\")); } }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Others\r\n\r\n        static MethodInfo _GetTypeFromHandle, _Equality_Type_Type, _Object_Equals, _SetStaticInit, _AddConstant, _AddProperty, _AddMethod,\r\n            _ShellExec, _IPhpEnumerable_GetForeachEnumerator,\r\n            _String_IsInterned, _String_Concat_String_String, _IEnumerator_MoveNext, _DTypeDesc_Create,\r\n            _PhpTypeDesc_Create, _ClrObject_Wrap, _ClrObject_WrapDynamic, _ClrObject_WrapRealObject, _ClrObject_Create, _Object_GetType,\r\n            _Object_ToString, _Object_Finalize, _DObject_InvokeMethod, _DObject_InvokeConstructor, _DObject_Dispose, _DObject_GetRuntimeField, _DObject_SetProperty,\r\n            _DRoutineDesc_Invoke, _PhpHashtable_Add, _InitializeArray, _ArrayCopy, _ArrayCopyTo, _PhpCallback_Invoke;\r\n\r\n        public static MethodInfo GetTypeFromHandle { get { if (_GetTypeFromHandle == null)  _GetTypeFromHandle = typeof(Type).GetMethod(\"GetTypeFromHandle\"); return _GetTypeFromHandle; } }\r\n        public static MethodInfo Equality_Type_Type { get { return _Equality_Type_Type ?? (_Equality_Type_Type = typeof(Type).GetMethod(\"op_Equality\")); } }\r\n\r\n        public static MethodInfo Object_Equals { get { if (_Object_Equals == null)  _Object_Equals = Types.Object[0].GetMethod(\"Equals\", Types.Object); return _Object_Equals; } }\r\n        public static MethodInfo Object_GetType { get { if (_Object_GetType == null)  _Object_GetType = Types.Object[0].GetMethod(\"GetType\", Type.EmptyTypes); return _Object_GetType; } }\r\n        public static MethodInfo Object_ToString { get { if (_Object_ToString == null)  _Object_ToString = Types.Object[0].GetMethod(\"ToString\", Type.EmptyTypes); return _Object_ToString; } }\r\n        public static MethodInfo Object_Finalize { get { return _Object_Finalize ?? (_Object_Finalize = Types.Object[0].GetMethod(\"Finalize\", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null)); } }\r\n\r\n        public static MethodInfo SetStaticInit { get { if (_SetStaticInit == null)   _SetStaticInit = typeof(Reflection.PhpTypeDesc).GetMethod(\"SetStaticInit\"); return _SetStaticInit; } }\r\n        public static MethodInfo AddConstant { get { if (_AddConstant == null)     _AddConstant = typeof(Reflection.PhpTypeDesc).GetMethod(\"AddConstant\", Types.String_Object); return _AddConstant; } }\r\n        public static MethodInfo AddProperty { get { if (_AddProperty == null)     _AddProperty = typeof(Reflection.PhpTypeDesc).GetMethod(\"AddProperty\", new Type[] { Types.String[0], typeof(PhpMemberAttributes), typeof(GetterDelegate), typeof(SetterDelegate) }); return _AddProperty; } }\r\n        public static MethodInfo AddMethod { get { if (_AddMethod == null)       _AddMethod = typeof(Reflection.PhpTypeDesc).GetMethod(\"AddMethod\", new Type[] { Types.String[0], typeof(PhpMemberAttributes), typeof(RoutineDelegate) }); return _AddMethod; } }\r\n\r\n        public static MethodInfo DTypeDesc_Create { get { if (_DTypeDesc_Create == null)   _DTypeDesc_Create = Types.DTypeDesc[0].GetMethod(\"Create\", new Type[] { typeof(RuntimeTypeHandle) }); return _DTypeDesc_Create; } }\r\n        public static MethodInfo PhpTypeDesc_Create { get { if (_PhpTypeDesc_Create == null) _PhpTypeDesc_Create = Types.PhpTypeDesc[0].GetMethod(\"Create\"); return _PhpTypeDesc_Create; } }\r\n\r\n        public static MethodInfo ClrObject_Wrap { get { if (_ClrObject_Wrap == null) _ClrObject_Wrap = typeof(ClrObject).GetMethod(\"Wrap\", Types.Object); return _ClrObject_Wrap; } }\r\n        public static MethodInfo ClrObject_WrapDynamic { get { if (_ClrObject_WrapDynamic == null) _ClrObject_WrapDynamic = typeof(ClrObject).GetMethod(\"WrapDynamic\", Types.Object); return _ClrObject_WrapDynamic; } }\r\n        public static MethodInfo ClrObject_WrapRealObject { get { if (_ClrObject_WrapRealObject == null) _ClrObject_WrapRealObject = typeof(ClrObject).GetMethod(\"WrapRealObject\", Types.Object); return _ClrObject_WrapRealObject; } }\r\n\r\n        public static MethodInfo ClrObject_Create { get { if (_ClrObject_Create == null) _ClrObject_Create = typeof(ClrObject).GetMethod(\"Create\"); return _ClrObject_Create; } }\r\n        public static MethodInfo DObject_InvokeConstructor { get { if (_DObject_InvokeConstructor == null) _DObject_InvokeConstructor = Types.DObject[0].GetMethod(\"InvokeConstructor\"); return _DObject_InvokeConstructor; } }\r\n        public static MethodInfo DObject_InvokeMethod { get { if (_DObject_InvokeMethod == null) _DObject_InvokeMethod = Types.DObject[0].GetMethod(\"InvokeMethod\"); return _DObject_InvokeMethod; } }\r\n        public static MethodInfo DObject_Dispose { get { return _DObject_Dispose ?? (_DObject_Dispose = Types.DObject[0].GetMethod(\"Dispose\", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, null, Types.Bool, null)); } }\r\n        public static MethodInfo DObject_GetRuntimeField { get { return _DObject_GetRuntimeField ?? (_DObject_GetRuntimeField = Types.DObject[0].GetMethod(\"GetRuntimeField\")); } }\r\n        public static MethodInfo DObject_SetProperty { get { return _DObject_SetProperty ?? (_DObject_SetProperty = Types.DObject[0].GetMethod(\"SetProperty\")); } }\r\n        public static MethodInfo DRoutineDesc_Invoke { get { if (_DRoutineDesc_Invoke == null) _DRoutineDesc_Invoke = typeof(DRoutineDesc).GetMethod(\"Invoke\", new Type[] { Types.DObject[0], Types.PhpStack[0] }); return _DRoutineDesc_Invoke; } }\r\n        \r\n        public static MethodInfo InitializeArray { get { if (_InitializeArray == null) _InitializeArray = typeof(RuntimeHelpers).GetMethod(\"InitializeArray\"); return _InitializeArray; } }\r\n        public static MethodInfo ArrayCopy { get { if (_ArrayCopy == null)       _ArrayCopy = typeof(Array).GetMethod(\"Copy\", new Type[] { typeof(Array), typeof(Int32), typeof(Array), typeof(Int32), typeof(Int32) }); return _ArrayCopy; } }\r\n        public static MethodInfo ArrayCopyTo { get { if (_ArrayCopyTo == null)     _ArrayCopyTo = typeof(Array).GetMethod(\"CopyTo\", new Type[] { typeof(Array), typeof(Int32) }); return _ArrayCopyTo; } }\r\n\r\n        public static MethodInfo IPhpEnumerable_GetForeachEnumerator { get { if (_IPhpEnumerable_GetForeachEnumerator == null) _IPhpEnumerable_GetForeachEnumerator = typeof(PHP.Core.IPhpEnumerable).GetMethod(\"GetForeachEnumerator\"); return _IPhpEnumerable_GetForeachEnumerator; } }\r\n        public static MethodInfo IEnumerator_MoveNext { get { if (_IEnumerator_MoveNext == null) _IEnumerator_MoveNext = typeof(System.Collections.IEnumerator).GetMethod(\"MoveNext\"); return _IEnumerator_MoveNext; } }\r\n\r\n        public static MethodInfo String_IsInterned { get { if (_String_IsInterned == null) _String_IsInterned = Types.String[0].GetMethod(\"IsInterned\"); return _String_IsInterned; } }\r\n        public static MethodInfo String_Concat_String_String { get { if (_String_Concat_String_String == null) _String_Concat_String_String = Types.String[0].GetMethod(\"Concat\", new Type[] { Types.String[0], Types.String[0] }); return _String_Concat_String_String; } }\r\n\r\n#if !SILVERLIGHT\r\n        public static MethodInfo ShellExec { get { if (_ShellExec == null) _ShellExec = typeof(PHP.Core.Execution).GetMethod(\"ShellExec\", Types.String); return _ShellExec; } }\r\n#endif\r\n\r\n        public static MethodInfo PhpHashtable_Add { get { if (_PhpHashtable_Add == null) _PhpHashtable_Add = typeof(PHP.Core.PhpHashtable).GetMethod(\"Add\", Types.Object); return _PhpHashtable_Add; } }\r\n\r\n        public static MethodInfo PhpCallback_Invoke { get { if (_PhpCallback_Invoke == null) _PhpCallback_Invoke = typeof(PHP.Core.PhpCallback).GetMethod(\"Invoke\",Types.ObjectArray); return _PhpCallback_Invoke; } }\r\n\r\n        public struct DynamicCode\r\n        {\r\n            static Type _this { get { return typeof(PHP.Core.DynamicCode); } }\r\n            static MethodInfo _Eval, _Assert, _PreAssert, _PostAssert, _CheckAssertion;\r\n\r\n            public static MethodInfo Eval { get { if (_Eval == null) _Eval = _this.GetMethod(\"Eval\"); return _Eval; } }\r\n            public static MethodInfo Assert { get { if (_Assert == null) _Assert = _this.GetMethod(\"Assert\"); return _Assert; } }\r\n            public static MethodInfo PreAssert { get { if (_PreAssert == null) _PreAssert = _this.GetMethod(\"PreAssert\"); return _PreAssert; } }\r\n            public static MethodInfo PostAssert { get { if (_PostAssert == null) _PostAssert = _this.GetMethod(\"PostAssert\"); return _PostAssert; } }\r\n            public static MethodInfo CheckAssertion { get { if (_CheckAssertion == null) _CheckAssertion = _this.GetMethod(\"CheckAssertion\"); return _CheckAssertion; } }\r\n        }\r\n\r\n        public struct Path\r\n        {\r\n            static MethodInfo _GetDirectoryName;\r\n\r\n            public static MethodInfo GetDirectoryName { get { return _GetDirectoryName ?? (_GetDirectoryName = typeof(System.IO.Path).GetMethod(\"GetDirectoryName\", Types.String)); } }\r\n        }\r\n\r\n        public struct Assembly\r\n        {\r\n            static MethodInfo _GetEntryAssembly;\r\n\r\n            public static MethodInfo GetEntryAssembly { get { return _GetEntryAssembly ?? (_GetEntryAssembly = typeof(System.Reflection.Assembly).GetMethod(\"GetEntryAssembly\", Type.EmptyTypes)); } }\r\n        }\r\n\r\n        public struct NamingContext\r\n        {\r\n            static MethodInfo _AddAlias;\r\n\r\n            public static MethodInfo AddAlias { get { return _AddAlias ?? (_AddAlias = typeof(PHP.Core.NamingContext).GetMethod(\"AddAlias\", new[] { Types.String[0], Types.String[0] })); } }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t// TODO: mark following by [Emitted]\r\n\r\n\t/// <exclude/>\r\n\tpublic static class Constructors\r\n\t{\r\n\t\t#region Attributes\r\n\r\n        static ConstructorInfo _ImplementsConstant, _ImplementsFunction, _CastToFalse,\r\n            _Script, _ScriptIncluders, _ScriptIncludees, _ScriptDeclares,\r\n\t\t\t_ParamArray, _NeedsVariables, _Includes, _DTypeSpec_IntArray, _DTypeSpec_IntInt, _Debuggable, _Routine,\r\n\t\t\t_PhpEvalId, _ScriptAssembly, _PurePhpAssembly, _PhpPublicField,\r\n            _DTypeSpec_IntArray_ByteArray, _DTypeSpec_IntInt_ByteArray, _UnknownTypeDesc;\r\n\r\n\t\tpublic static ConstructorInfo ImplementsConstant { get { if (_ImplementsConstant == null)  _ImplementsConstant = typeof(ImplementsConstantAttribute).GetConstructor(Types.String); return _ImplementsConstant; } }\r\n\t\tpublic static ConstructorInfo ImplementsFunction { get { if (_ImplementsFunction == null)  _ImplementsFunction = typeof(ImplementsFunctionAttribute).GetConstructor(Types.String); return _ImplementsFunction; } }\r\n\t\tpublic static ConstructorInfo CastToFalse { get { if (_CastToFalse == null)         _CastToFalse = typeof(CastToFalseAttribute).GetConstructor(Type.EmptyTypes); return _CastToFalse; } }\r\n\t\tpublic static ConstructorInfo ParamArray { get { if (_ParamArray == null)          _ParamArray = typeof(ParamArrayAttribute).GetConstructor(Type.EmptyTypes); return _ParamArray; } }\r\n\t\tpublic static ConstructorInfo NeedsVariables { get { if (_NeedsVariables == null)      _NeedsVariables = typeof(NeedsVariablesAttribute).GetConstructor(Type.EmptyTypes); return _NeedsVariables; } }\r\n\t\tpublic static ConstructorInfo Includes { get { if (_Includes == null)            _Includes = typeof(IncludesAttribute).GetConstructor(new Type[] { typeof(string), typeof(sbyte), typeof(bool), typeof(bool) }); return _Includes; } }\r\n\t\tpublic static ConstructorInfo DTypeSpec_IntInt { get { if (_DTypeSpec_IntInt == null) _DTypeSpec_IntInt = typeof(DTypeSpecAttribute).GetConstructor(Types.Int_Int); return _DTypeSpec_IntInt; } }\r\n\t\tpublic static ConstructorInfo DTypeSpec_IntInt_ByteArray { get { if (_DTypeSpec_IntInt_ByteArray == null) _DTypeSpec_IntInt_ByteArray = typeof(DTypeSpecAttribute).GetConstructor(new Type[] { typeof(int), typeof(int), typeof(byte[]) }); return _DTypeSpec_IntInt_ByteArray; } }\r\n\t\tpublic static ConstructorInfo DTypeSpec_IntArray { get { if (_DTypeSpec_IntArray == null) _DTypeSpec_IntArray = typeof(DTypeSpecAttribute).GetConstructor(new Type[] { typeof(int[]) }); return _DTypeSpec_IntArray; } }\r\n\t\tpublic static ConstructorInfo DTypeSpec_IntArray_ByteArray { get { if (_DTypeSpec_IntArray_ByteArray == null) _DTypeSpec_IntArray_ByteArray = typeof(DTypeSpecAttribute).GetConstructor(new Type[] { typeof(int[]), typeof(byte[]) }); return _DTypeSpec_IntArray_ByteArray; } }\r\n\t\tpublic static ConstructorInfo Debuggable { get { if (_Debuggable == null)          _Debuggable = typeof(DebuggableAttribute).GetConstructor(new Type[] { typeof(bool), typeof(bool) }); return _Debuggable; } }\r\n        public static ConstructorInfo Script { get { return _Script ?? (_Script = typeof(ScriptAttribute).GetConstructor(new Type[] { typeof(long), typeof(string) })); } }\r\n        public static ConstructorInfo ScriptIncluders { get { return _ScriptIncluders ?? (_ScriptIncluders = typeof(ScriptIncludersAttribute).GetConstructor(new Type[] { typeof(int[]) })); } }\r\n        public static ConstructorInfo ScriptIncludees { get { return _ScriptIncludees ?? (_ScriptIncludees = typeof(ScriptIncludeesAttribute).GetConstructor(new Type[] { typeof(int[]), typeof(byte[]) })); } }\r\n        public static ConstructorInfo ScriptDeclares { get { return _ScriptDeclares ?? (_ScriptDeclares = typeof(ScriptDeclaresAttribute).GetConstructor(new Type[] { typeof(int[]) })); } }\r\n\t\tpublic static ConstructorInfo PhpRoutineProperties { get { if (_Routine == null)             _Routine = typeof(RoutineAttribute).GetConstructor(Types.RoutineProperties); return _Routine; } }\r\n\t\tpublic static ConstructorInfo PhpEvalId { get { if (_PhpEvalId == null)           _PhpEvalId = typeof(PhpEvalIdAttribute).GetConstructor(Types.Int); return _PhpEvalId; } }\r\n        public static ConstructorInfo ScriptAssembly { get { return _ScriptAssembly ?? (_ScriptAssembly = typeof(ScriptAssemblyAttribute).GetConstructor(new Type[] { typeof(bool), typeof(Type) })); } }\r\n\t\tpublic static ConstructorInfo PurePhpAssembly { get { if (_PurePhpAssembly == null)    _PurePhpAssembly = typeof(PurePhpAssemblyAttribute).GetConstructor(new Type[] { typeof(string[]) }); return _PurePhpAssembly; } }\r\n\t\tpublic static ConstructorInfo PhpPublicField { get { if (_PhpPublicField == null)    _PhpPublicField = typeof(PhpPublicFieldAttribute).GetConstructor(Types.String_Bool_Bool); return _PhpPublicField; } }\r\n        public static ConstructorInfo UnknownTypeDesc { get { return _UnknownTypeDesc ?? (_UnknownTypeDesc = typeof(UnknownTypeDesc).GetConstructor(Type.EmptyTypes)); } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Attributes - CLR only\r\n#if !SILVERLIGHT\r\n\t\tstatic ConstructorInfo _EditorBrowsable, _ThreadStatic, _STAThread, _MTAThread;\r\n\r\n\t\tpublic static ConstructorInfo EditorBrowsable { get { return _EditorBrowsable ?? (_EditorBrowsable = typeof(EditorBrowsableAttribute).GetConstructor(new Type[] { typeof(EditorBrowsableState) })); } }\r\n\t\tpublic static ConstructorInfo ThreadStatic { get { if (_ThreadStatic == null)        _ThreadStatic = typeof(ThreadStaticAttribute).GetConstructor(Type.EmptyTypes); return _ThreadStatic; } }\r\n\t\tpublic static ConstructorInfo STAThread { get { if (_STAThread == null)           _STAThread = typeof(STAThreadAttribute).GetConstructor(Type.EmptyTypes); return _STAThread; } }\r\n\t\tpublic static ConstructorInfo MTAThread { get { if (_MTAThread == null)           _MTAThread = typeof(MTAThreadAttribute).GetConstructor(Type.EmptyTypes); return _MTAThread; } }\r\n#endif\r\n\t\t#endregion\r\n\r\n\t\t#region Others\r\n\r\n\t\tstatic ConstructorInfo _PhpReference_Void, _PhpReference_Object,\r\n\t\t\t_PhpBytes_ByteArray, _StdClass_ScriptContext, _PhpRuntimeChain_Object_DTypeDesc,\r\n            _RoutineDelegate, _PhpRoutineDesc_Attr_Delegate, _GetterDelegate, _SetterDelegate, _PhpScript_MainHelperDelegate, _NamingContext,\r\n            _Action_ScriptContext, _PurePhpFunction;\r\n\r\n\t\tpublic static ConstructorInfo RoutineDelegate { get { if (_RoutineDelegate == null) _RoutineDelegate = typeof(RoutineDelegate).GetConstructor(Types.DelegateCtorArgs); return _RoutineDelegate; } }\r\n\t\tpublic static ConstructorInfo GetterDelegate { get { if (_GetterDelegate == null) _GetterDelegate = typeof(GetterDelegate).GetConstructor(Types.DelegateCtorArgs); return _GetterDelegate; } }\r\n\t\tpublic static ConstructorInfo SetterDelegate { get { if (_SetterDelegate == null) _SetterDelegate = typeof(SetterDelegate).GetConstructor(Types.DelegateCtorArgs); return _SetterDelegate; } }\r\n\r\n\t\tpublic static ConstructorInfo MainHelperDelegate { get { if (_PhpScript_MainHelperDelegate == null) _PhpScript_MainHelperDelegate = typeof(MainRoutineDelegate).GetConstructor(Types.DelegateCtorArgs); return _PhpScript_MainHelperDelegate; } }\r\n\r\n\t\tpublic static ConstructorInfo PhpReference_Void { get { if (_PhpReference_Void == null) _PhpReference_Void = typeof(PhpReference).GetConstructor(Type.EmptyTypes); return _PhpReference_Void; } }\r\n\t\tpublic static ConstructorInfo PhpReference_Object { get { if (_PhpReference_Object == null) _PhpReference_Object = typeof(PhpReference).GetConstructor(Types.Object); return _PhpReference_Object; } }\r\n\t\tpublic static ConstructorInfo PhpBytes_ByteArray { get { if (_PhpBytes_ByteArray == null) _PhpBytes_ByteArray = typeof(PhpBytes).GetConstructor(new Type[] { typeof(byte[]) }); return _PhpBytes_ByteArray; } }\r\n        public static ConstructorInfo PhpRoutineDesc_Attr_Delegate_Bool { get { if (_PhpRoutineDesc_Attr_Delegate == null) _PhpRoutineDesc_Attr_Delegate = typeof(PhpRoutineDesc).GetConstructor(new Type[] { typeof(PhpMemberAttributes), typeof(RoutineDelegate), typeof(bool) }); return _PhpRoutineDesc_Attr_Delegate; } }\r\n\r\n\t\tpublic static ConstructorInfo StdClass_ScriptContext { get { if (_StdClass_ScriptContext == null) _StdClass_ScriptContext = typeof(PHP.Library.stdClass).GetConstructor(Types.ScriptContext); return _StdClass_ScriptContext; } }\r\n        public static ConstructorInfo NamingContext { get { return _NamingContext ?? (_NamingContext = typeof(PHP.Core.NamingContext).GetConstructor(new[] { Types.String[0], Types.Int[0] })); } }\r\n\r\n\t\tpublic static ConstructorInfo Action_ScriptContext { get { if (_Action_ScriptContext == null) _Action_ScriptContext = typeof(Action<ScriptContext>).GetConstructor(Types.DelegateCtorArgs); return _Action_ScriptContext; } }\r\n        public static ConstructorInfo PurePhpFunction { get { return _PurePhpFunction ?? (_PurePhpFunction = typeof(PurePhpFunction).GetConstructor(new Type[] { typeof(PhpRoutineDesc), Types.String[0], typeof(MethodInfo) })); } }\r\n\r\n\t\tpublic struct PhpArray\r\n\t\t{\r\n\t\t\tstatic ConstructorInfo _Int32_Int32, _Void;\r\n\r\n\t\t\tpublic static ConstructorInfo Int32_Int32 { get { if (_Int32_Int32 == null) _Int32_Int32 = typeof(PHP.Core.PhpArray).GetConstructor(new Type[] { typeof(int), typeof(int) }); return _Int32_Int32; } }\r\n\t\t\tpublic static ConstructorInfo Void { get { if (_Void == null) _Void = typeof(PHP.Core.PhpArray).GetConstructor(Type.EmptyTypes); return _Void; } }\r\n\t\t}\r\n\r\n\t\tpublic struct PhpSmartReference\r\n\t\t{\r\n\t\t\tstatic ConstructorInfo _Void, _Object;\r\n\r\n\t\t\tpublic static ConstructorInfo Void { get { if (_Void == null) _Void = typeof(PHP.Core.PhpSmartReference).GetConstructor(Type.EmptyTypes); return _Void; } }\r\n\t\t\tpublic static ConstructorInfo Object { get { if (_Object == null) _Object = typeof(PHP.Core.PhpSmartReference).GetConstructor(Types.Object); return _Object; } }\r\n\t\t}\r\n\r\n\t\tpublic struct PhpObject\r\n\t\t{\r\n\t\t\tstatic ConstructorInfo _ScriptContext_Bool, _SerializationInfo_StreamingContext;\r\n\r\n\t\t\tpublic static ConstructorInfo ScriptContext_Bool { get { if (_ScriptContext_Bool == null) _ScriptContext_Bool = typeof(PHP.Core.PhpObject).GetConstructor(Types.ScriptContext_Bool); return _ScriptContext_Bool; } }\r\n#if !SILVERLIGHT\r\n\t\t\tpublic static ConstructorInfo SerializationInfo_StreamingContext { get { if (_SerializationInfo_StreamingContext == null) _SerializationInfo_StreamingContext = typeof(PHP.Core.PhpObject).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Types.SerializationInfo_StreamingContext, null); return _SerializationInfo_StreamingContext; } }\r\n#endif\r\n\t\t}\r\n\r\n\t\tpublic static ConstructorInfo PhpRuntimeChain_Object_DTypeDesc { get { if (_PhpRuntimeChain_Object_DTypeDesc == null) _PhpRuntimeChain_Object_DTypeDesc = typeof(PHP.Core.PhpRuntimeChain).GetConstructor(new Type[] { typeof(object), typeof(PHP.Core.Reflection.DTypeDesc) }); return _PhpRuntimeChain_Object_DTypeDesc; } }\r\n\t\t\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <exclude/>\r\n\tpublic static class Fields\r\n\t{\r\n\t\tstatic FieldInfo _DObject_TypeDesc, _PhpReference_Value, _ScriptContext_Stack,\r\n\t\t\t_ScriptContext_Default, _ScriptContext_AutoGlobals, _ScriptContext_HttpVarsArrays,\r\n            _PhpStack_ArgCount, _PhpStack_Context, _PhpStack_Variables, _PhpStack_NamingContext, _PhpStack_AllowProtectedCall, _PhpStack_LateStaticBindType,\r\n\t        _PhpStack_CalleeName, _Arg_Default, _Arg_DefaultType, _ScriptContext_EvalId, _ScriptContext_EvalRelativeSourcePath,\r\n\t\t\t_ScriptContext_EvalLine, _ScriptContext_EvalColumn, _PhpUserException_UserException,\r\n\t\t\t_PhpVariable_LiteralNull, _PhpVariable_LiteralTrue, _PhpVariable_LiteralFalse;\r\n\r\n\t\tpublic static FieldInfo ScriptContext_Stack { get { if (_ScriptContext_Stack == null)  _ScriptContext_Stack = typeof(ScriptContext).GetField(\"Stack\"); return _ScriptContext_Stack; } }\r\n\t\tpublic static FieldInfo ScriptContext_Default { get { if (_ScriptContext_Default == null)_ScriptContext_Default = typeof(ScriptContext).GetField(\"Default\"); return _ScriptContext_Default; } }\r\n\t\tpublic static FieldInfo ScriptContext_AutoGlobals { get { if (_ScriptContext_AutoGlobals == null)  _ScriptContext_AutoGlobals = typeof(ScriptContext).GetField(\"AutoGlobals\"); return _ScriptContext_AutoGlobals; } }\r\n\t\tpublic static FieldInfo ScriptContext_HttpVarsArrays { get { if (_ScriptContext_HttpVarsArrays == null)  _ScriptContext_HttpVarsArrays = typeof(ScriptContext).GetField(\"HttpVarsArrays\"); return _ScriptContext_HttpVarsArrays; } }\r\n\r\n\t\t#region AutoGlobals\r\n\r\n\t\tpublic struct AutoGlobals\r\n\t\t{\r\n            static Type _this { get { return typeof(PHP.Core.AutoGlobals); } }\r\n\r\n\t\t\tstatic FieldInfo _Globals;\r\n\t\t\tpublic static FieldInfo Globals { get { if (_Globals == null) _Globals = _this.GetField(\"Globals\"); return _Globals; } }\r\n\t\t\t\r\n#if !SILVERLIGHT\r\n            static FieldInfo _Server, _Env, _Request, _Get, _Post, _Cookie, _Files, _Session, _HttpRawPostData;\r\n\t\t\t\r\n\t\t\tpublic static FieldInfo Server { get { if (_Server == null) _Server = _this.GetField(\"Server\"); return _Server; } }\r\n\t\t\tpublic static FieldInfo Env { get { if (_Env == null) _Env = _this.GetField(\"Env\"); return _Env; } }\r\n\t\t\tpublic static FieldInfo Request { get { if (_Request == null) _Request = _this.GetField(\"Request\"); return _Request; } }\r\n\t\t\tpublic static FieldInfo Get { get { if (_Get == null) _Get = _this.GetField(\"Get\"); return _Get; } }\r\n\t\t\tpublic static FieldInfo Post { get { if (_Post == null) _Post = _this.GetField(\"Post\"); return _Post; } }\r\n\t\t\tpublic static FieldInfo Cookie { get { if (_Cookie == null) _Cookie = _this.GetField(\"Cookie\"); return _Cookie; } }\r\n\t\t\tpublic static FieldInfo Files { get { if (_Files == null) _Files = _this.GetField(\"Files\"); return _Files; } }\r\n\t\t\tpublic static FieldInfo Session { get { if (_Session == null) _Session = _this.GetField(\"Session\"); return _Session; } }\r\n            public static FieldInfo HttpRawPostData { get { return _HttpRawPostData ?? (_HttpRawPostData = _this.GetField(\"HttpRawPostData\")); } }\r\n#else\r\n\t\t\tstatic FieldInfo _Canvas;\r\n\t\t\tpublic static FieldInfo Canvas { get { if (_Canvas == null) _Canvas = _this.GetField(\"Canvas\"); return _Canvas; } }\r\n\r\n            static FieldInfo _Addr;\r\n            public static FieldInfo Addr { get { if (_Addr == null) _Addr = _this.GetField(\"Addr\"); return _Addr; } }\r\n#endif\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic static FieldInfo Arg_Default { get { if (_Arg_Default == null)          _Arg_Default = typeof(Arg).GetField(\"Default\"); return _Arg_Default; } }\r\n\t\tpublic static FieldInfo Arg_DefaultType { get { if (_Arg_DefaultType == null)          _Arg_DefaultType = typeof(Arg).GetField(\"DefaultType\"); return _Arg_DefaultType; } }\r\n\t\tpublic static FieldInfo DObject_TypeDesc { get { if (_DObject_TypeDesc == null)     _DObject_TypeDesc = typeof(DObject).GetField(\"typeDesc\", BindingFlags.Instance | BindingFlags.NonPublic); return _DObject_TypeDesc; } }\r\n\t\tpublic static FieldInfo PhpReference_Value { get { if (_PhpReference_Value == null)   _PhpReference_Value = typeof(PhpReference).GetField(\"value\"); return _PhpReference_Value; } }\r\n\r\n\t\tpublic static FieldInfo PhpStack_Context { get { if (_PhpStack_Context == null)     _PhpStack_Context = typeof(PhpStack).GetField(\"Context\"); return _PhpStack_Context; } }\r\n\t\tpublic static FieldInfo PhpStack_ArgCount { get { if (_PhpStack_ArgCount == null)    _PhpStack_ArgCount = typeof(PhpStack).GetField(\"ArgCount\"); return _PhpStack_ArgCount; } }\r\n\t\tpublic static FieldInfo PhpStack_Variables { get { if (_PhpStack_Variables == null)   _PhpStack_Variables = typeof(PhpStack).GetField(\"Variables\"); return _PhpStack_Variables; } }\r\n\t\tpublic static FieldInfo PhpStack_NamingContext { get { if (_PhpStack_NamingContext == null)   _PhpStack_NamingContext = typeof(PhpStack).GetField(\"NamingContext\"); return _PhpStack_NamingContext; } }\r\n\t\tpublic static FieldInfo PhpStack_CalleeName { get { if (_PhpStack_CalleeName == null)  _PhpStack_CalleeName = typeof(PhpStack).GetField(\"CalleeName\"); return _PhpStack_CalleeName; } }\r\n\t\tpublic static FieldInfo PhpStack_AllowProtectedCall { get { if (_PhpStack_AllowProtectedCall == null)   _PhpStack_AllowProtectedCall = typeof(PhpStack).GetField(\"AllowProtectedCall\"); return _PhpStack_AllowProtectedCall; } }\r\n        public static FieldInfo PhpStack_LateStaticBindType { get { return _PhpStack_LateStaticBindType ?? (_PhpStack_LateStaticBindType = typeof(PhpStack).GetField(\"LateStaticBindType\")); } }\r\n\r\n\t\tpublic static FieldInfo ScriptContext_EvalLine { get { if (_ScriptContext_EvalLine == null) _ScriptContext_EvalLine = typeof(ScriptContext).GetField(\"EvalLine\"); return _ScriptContext_EvalLine; } }\r\n\t\tpublic static FieldInfo ScriptContext_EvalColumn { get { if (_ScriptContext_EvalColumn == null) _ScriptContext_EvalColumn = typeof(ScriptContext).GetField(\"EvalColumn\"); return _ScriptContext_EvalColumn; } }\r\n\t\tpublic static FieldInfo ScriptContext_EvalId { get { if (_ScriptContext_EvalId == null) _ScriptContext_EvalId = typeof(ScriptContext).GetField(\"EvalId\"); return _ScriptContext_EvalId; } }\r\n\t\tpublic static FieldInfo ScriptContext_EvalRelativeSourcePath { get { if (_ScriptContext_EvalRelativeSourcePath == null) _ScriptContext_EvalRelativeSourcePath = typeof(ScriptContext).GetField(\"EvalRelativeSourcePath\"); return _ScriptContext_EvalRelativeSourcePath; } }\r\n\r\n\t\tpublic static FieldInfo PhpUserException_UserException { get { if (_PhpUserException_UserException == null) _PhpUserException_UserException = typeof(PhpUserException).GetField(\"UserException\"); return _PhpUserException_UserException; } }\r\n\r\n\t\tpublic static FieldInfo PhpVariable_LiteralNull { get { if (_PhpVariable_LiteralNull == null) _PhpVariable_LiteralNull = typeof(PhpVariable).GetField(\"LiteralNull\"); return _PhpVariable_LiteralNull; } }\r\n\t\tpublic static FieldInfo PhpVariable_LiteralTrue { get { if (_PhpVariable_LiteralTrue == null) _PhpVariable_LiteralTrue = typeof(PhpVariable).GetField(\"LiteralTrue\"); return _PhpVariable_LiteralTrue; } }\r\n\t\tpublic static FieldInfo PhpVariable_LiteralFalse { get { if (_PhpVariable_LiteralFalse == null) _PhpVariable_LiteralFalse = typeof(PhpVariable).GetField(\"LiteralFalse\"); return _PhpVariable_LiteralFalse; } }\r\n\r\n\t\tpublic static class DTypeDesc\r\n\t\t{\r\n            private static Type _this { get { return typeof(Reflection.DTypeDesc); } }\r\n\t\t\tprivate static FieldInfo _BooleanTypeDesc, _IntergerTypeDesc, _LongIntegerTypeDesc, _DoubleTypeDesc, _StringTypeDesc,\r\n\t\t\t  _ResourceTypeDesc, _ArrayTypeDesc, _ObjectTypeDesc;\r\n\r\n\r\n\t\t\tpublic static FieldInfo BooleanTypeDesc { get { if (_BooleanTypeDesc == null) _BooleanTypeDesc = _this.GetField(\"BooleanTypeDesc\"); return _BooleanTypeDesc; } }\r\n\t\t\tpublic static FieldInfo IntegerTypeDesc { get { if (_IntergerTypeDesc == null) _IntergerTypeDesc = _this.GetField(\"IntegerTypeDesc\"); return _IntergerTypeDesc; } }\r\n\t\t\tpublic static FieldInfo LongIntegerTypeDesc { get { if (_LongIntegerTypeDesc == null) _LongIntegerTypeDesc = _this.GetField(\"LongIntegerTypeDesc\"); return _LongIntegerTypeDesc; } }\r\n\t\t\tpublic static FieldInfo DoubleTypeDesc { get { if (_DoubleTypeDesc == null) _DoubleTypeDesc = _this.GetField(\"DoubleTypeDesc\"); return _DoubleTypeDesc; } }\r\n\t\t\tpublic static FieldInfo StringTypeDesc { get { if (_StringTypeDesc == null) _StringTypeDesc = _this.GetField(\"StringTypeDesc\"); return _StringTypeDesc; } }\r\n\t\t\tpublic static FieldInfo ResourceTypeDesc { get { if (_ResourceTypeDesc == null) _ResourceTypeDesc = _this.GetField(\"ResourceTypeDesc\"); return _ResourceTypeDesc; } }\r\n\t\t\tpublic static FieldInfo ArrayTypeDesc { get { if (_ArrayTypeDesc == null) _ArrayTypeDesc = _this.GetField(\"ArrayTypeDesc\"); return _ArrayTypeDesc; } }\r\n\t\t\tpublic static FieldInfo ObjectTypeDesc { get { if (_ObjectTypeDesc == null) _ObjectTypeDesc = _this.GetField(\"ObjectTypeDesc\"); return _ObjectTypeDesc; } }\r\n\t\t}\r\n\r\n        public static class UnknownTypeDesc\r\n        {\r\n            private static Type _this { get { return typeof(Reflection.UnknownTypeDesc); } }\r\n            private static FieldInfo _Singleton;\r\n\r\n            public static FieldInfo Singleton { get { return _Singleton ?? (_Singleton = _this.GetField(\"Singleton\")); } }\r\n        }\r\n\t}\r\n\r\n\t/// <exclude/>\r\n\tpublic static class Properties\r\n\t{\r\n\t\tstatic PropertyInfo _ImplementsConstantCase, _PhpReference_IsSet, _PhpReference_IsAliased,\r\n          _IDictionaryEnumerator_Key, _IDictionaryEnumerator_Value, _Type_TypeHandle, _DObject_RealObject, _DObject_RealType, _DObject_TypeDesc,\r\n          _ClrTypeDesc_Constructor, _ScriptContext_CurrentContext, _Assembly_Location, _InsideCaller, _Delegate_Method,\r\n          _PhpHashtable_Count,\r\n          _PhpArray_InplaceCopyOnReturn;\r\n\r\n\t\tpublic static PropertyInfo ImplementsConstantCase { get { if (_ImplementsConstantCase == null) _ImplementsConstantCase = typeof(ImplementsConstantAttribute).GetProperty(\"CaseInsensitive\"); return _ImplementsConstantCase; } }\r\n\t\tpublic static PropertyInfo PhpReference_IsSet { get { if (_PhpReference_IsSet == null) _PhpReference_IsSet = typeof(PhpReference).GetProperty(\"IsSet\"); return _PhpReference_IsSet; } }\r\n\t\tpublic static PropertyInfo PhpReference_IsAliased { get { if (_PhpReference_IsAliased == null) _PhpReference_IsAliased = typeof(PhpReference).GetProperty(\"IsAliased\"); return _PhpReference_IsAliased; } }\r\n\r\n\t\tpublic static PropertyInfo IDictionaryEnumerator_Key { get { if (_IDictionaryEnumerator_Key == null) _IDictionaryEnumerator_Key = typeof(System.Collections.IDictionaryEnumerator).GetProperty(\"Key\"); return _IDictionaryEnumerator_Key; } }\r\n\t\tpublic static PropertyInfo IDictionaryEnumerator_Value { get { if (_IDictionaryEnumerator_Value == null) _IDictionaryEnumerator_Value = typeof(System.Collections.IDictionaryEnumerator).GetProperty(\"Value\"); return _IDictionaryEnumerator_Value; } }\r\n\r\n\t\tpublic static PropertyInfo Type_TypeHandle { get { if (_Type_TypeHandle == null) _Type_TypeHandle = typeof(System.Type).GetProperty(\"TypeHandle\"); return _Type_TypeHandle; } }\r\n\r\n\t\tpublic static PropertyInfo DObject_RealObject { get { if (_DObject_RealObject == null) _DObject_RealObject = typeof(DObject).GetProperty(\"RealObject\"); return _DObject_RealObject; } }\r\n        public static PropertyInfo DObject_RealType { get { return _DObject_RealType ?? (_DObject_RealType = typeof(DObject).GetProperty(\"RealType\")); } }\r\n        public static PropertyInfo DObject_InsideCaller { get { if (_InsideCaller == null) _InsideCaller = typeof(DObject).GetProperty(\"insideCaller\",BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); return _InsideCaller; } }\r\n        public static PropertyInfo DObject_TypeDesc { get { return _DObject_TypeDesc ?? (_DObject_TypeDesc = typeof(DObject).GetProperty(\"TypeDesc\", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)); } }\r\n\r\n        public static PropertyInfo ClrTypeDesc_Constructor { get { if (_ClrTypeDesc_Constructor == null) _ClrTypeDesc_Constructor = typeof(ClrTypeDesc).GetProperty(\"Constructor\"); return _ClrTypeDesc_Constructor; } }\r\n\r\n\t\tpublic static PropertyInfo ScriptContext_CurrentContext { get { if (_ScriptContext_CurrentContext == null) _ScriptContext_CurrentContext = typeof(ScriptContext).GetProperty(\"CurrentContext\"); return _ScriptContext_CurrentContext; } }\r\n\r\n        public static PropertyInfo Assembly_Location { get { return _Assembly_Location ?? (_Assembly_Location = typeof(System.Reflection.Assembly).GetProperty(\"Location\")); } }\r\n\r\n        public static PropertyInfo Delegate_Method { get { return _Delegate_Method ?? (_Delegate_Method = typeof(System.Delegate).GetProperty(\"Method\")); } }\r\n\r\n        public static PropertyInfo PhpArray_InplaceCopyOnReturn { get { return _PhpArray_InplaceCopyOnReturn ?? (_PhpArray_InplaceCopyOnReturn = typeof(PhpArray).GetProperty(\"InplaceCopyOnReturn\")); } }\r\n        public static PropertyInfo PhpHashtable_Count { get { return _PhpHashtable_Count ?? (_PhpHashtable_Count = typeof(PhpHashtable).GetProperty(\"Count\")); } }\r\n\t}\r\n\r\n\t/// <exclude/>\r\n\tpublic class AttributeBuilders\r\n\t{\r\n\t\tprivate static CustomAttributeBuilder _PhpFinal, _PhpAbstract,\r\n            _ImplementsTrait,\r\n\t\t\t_PhpHasInitValue, _ImplementsType, _DebuggerNonUserCode, _DebuggerHidden, _ParamArray, _Optional;\r\n\r\n\t\tpublic static CustomAttributeBuilder PhpFinal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _PhpFinal ?? (_PhpFinal = new CustomAttributeBuilder(typeof(PhpFinalAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder PhpAbstract\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _PhpAbstract ?? (_PhpAbstract = new CustomAttributeBuilder(typeof(PhpAbstractAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder PhpHasInitValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _PhpHasInitValue ?? (_PhpHasInitValue = new CustomAttributeBuilder(typeof(PhpHasInitValueAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n            }\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder ImplementsType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _ImplementsType ?? (_ImplementsType = new CustomAttributeBuilder(typeof(ImplementsTypeAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n            }\r\n\t\t}\r\n\r\n        public static CustomAttributeBuilder ImplementsTrait\r\n        {\r\n            get\r\n            {\r\n                return _ImplementsTrait ?? (_ImplementsTrait = new CustomAttributeBuilder(typeof(PhpTraitAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n            }\r\n        }\r\n\r\n\t\tpublic static CustomAttributeBuilder DebuggerNonUserCode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _DebuggerNonUserCode ?? (_DebuggerNonUserCode = new CustomAttributeBuilder(typeof(DebuggerNonUserCodeAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder DebuggerHidden\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _DebuggerHidden ?? (_DebuggerHidden = new CustomAttributeBuilder(typeof(DebuggerHiddenAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder ParamArray\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn _ParamArray ?? (_ParamArray = new CustomAttributeBuilder(typeof(ParamArrayAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder Optional\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn _Optional ?? (_Optional = new CustomAttributeBuilder(typeof(System.Runtime.InteropServices.OptionalAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// CLR Only\r\n\r\n#if !SILVERLIGHT\r\n\t\tprivate static CustomAttributeBuilder _EditorBrowsableNever, _ThreadStatic;\r\n\r\n\t\tpublic static CustomAttributeBuilder EditorBrowsableNever\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _EditorBrowsableNever ?? (_EditorBrowsableNever = new CustomAttributeBuilder(Constructors.EditorBrowsable, new object[] { EditorBrowsableState.Never }));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static CustomAttributeBuilder ThreadStatic\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _ThreadStatic ?? (_ThreadStatic = new CustomAttributeBuilder(Constructors.ThreadStatic, ArrayUtils.EmptyObjects));\r\n\t\t\t}\r\n\t\t}\r\n#endif\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ReflectionCacheGenerator.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing PHP.Core;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n#if DEBUG\r\n\r\n\tpublic class MethodsGenerator\r\n\t{\r\n\t\tprivate static void GenerateParams(MethodInfo m, out string params1, out string params2)\r\n\t\t{\r\n\t\t\tStringBuilder ps1 = new StringBuilder();\r\n\t\t\tStringBuilder ps2 = new StringBuilder();\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tforeach (ParameterInfo p in m.GetParameters())\r\n\t\t\t{\r\n\t\t\t\tif (i > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tps1.Append('_');\r\n\t\t\t\t\tps2.Append(',');\r\n\t\t\t\t}\r\n\t\t\t\tif (p.ParameterType.IsByRef)\r\n\t\t\t\t{\r\n\t\t\t\t\tps1.AppendFormat(\"{0}Ref\", p.ParameterType.GetElementType().Name);\r\n\t\t\t\t\tps2.AppendFormat(\"Type.GetType(\\\"{0}\\\") \", p.ParameterType.FullName);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tif (p.ParameterType.IsArray)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tps1.AppendFormat(\"{0}Array\", p.ParameterType.GetElementType().Name);\r\n\t\t\t\t\t\tps2.AppendFormat(\"typeof({0})\", p.ParameterType.Name);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tps1.Append(p.ParameterType.Name);\r\n\t\t\t\t\t\tps2.AppendFormat(\"typeof({0})\", p.ParameterType.Name);\r\n\t\t\t\t\t}\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tparams1 = ps1.ToString();\r\n\t\t\tparams2 = ps2.ToString();\r\n\t\t}\r\n\r\n\t\tpublic static Hashtable GetOverloadCounts(MethodInfo[] methods)\r\n\t\t{\r\n\t\t\tHashtable result = new Hashtable();\r\n\t\t\tforeach (MethodInfo m in methods)\r\n\t\t\t{\r\n\t\t\t\tresult[m.Name] = (result[m.Name] == null) ? 1 : result[m.Name] = (int)result[m.Name] + 1;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic static void Generate(Type type, BindingFlags binding)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"// automatically generated by MethodsGenerator:\");\r\n\t\t\tConsole.WriteLine(\"public struct {0}\", type.Name);\r\n\t\t\tConsole.WriteLine(\"{\");\r\n            Console.WriteLine(\"  static Type _this { get { return typeof({0}); } }\", type.FullName);\r\n\r\n\t\t\tConsole.Write(\"  static MethodInfo \");\r\n\r\n\t\t\tMethodInfo[] methods = type.GetMethods(binding);\r\n\t\t\tHashtable ht = GetOverloadCounts(methods);\r\n\r\n\t\t\t// private fields:\r\n\t\t\tint i = 0;\r\n\t\t\tforeach (MethodInfo m in methods)\r\n\t\t\t{\r\n\t\t\t\tif ((int)ht[m.Name] == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i > 0) Console.Write(',');\r\n\t\t\t\t\ti++;\r\n\t\t\t\t\tConsole.Write('_');\r\n\t\t\t\t\tConsole.Write(m.Name);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\";\");\r\n\t\t\tConsole.WriteLine();\r\n\r\n\t\t\t// methods or structures of overloads:\r\n\t\t\tint k = 0;\r\n\t\t\twhile (k < methods.Length)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo m = methods[k];\r\n\r\n\t\t\t\tif ((int)ht[m.Name] == 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"  public static MethodInfo {0} {{ get {{ return _{0} ?? (_{0} = _this.GetMethod(\\\"{0}\\\")); }} }}\", m.Name);\r\n\t\t\t\t\tk++;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint overload_count = (int)ht[m.Name];\r\n\r\n\t\t\t\t\tConsole.WriteLine(\"  public struct {0}\", m.Name);\r\n\t\t\t\t\tConsole.WriteLine(\"  {\");\r\n\r\n\t\t\t\t\tConsole.Write(\"    static MethodInfo \");\r\n\t\t\t\t\ti = 0;\r\n\t\t\t\t\tfor (int j = 0; j < overload_count; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstring ps1, ps2;\r\n\t\t\t\t\t\tGenerateParams(methods[k + j], out ps1, out ps2);\r\n\t\t\t\t\t\tif (i > 0) Console.Write(',');\r\n\t\t\t\t\t\tConsole.Write('_');\r\n\t\t\t\t\t\tConsole.Write(ps1);\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tConsole.WriteLine(';');\r\n\t\t\t\t\tConsole.WriteLine();\r\n\r\n\t\t\t\t\tfor (int j = 0; j < overload_count; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstring ps1, ps2;\r\n\t\t\t\t\t\tGenerateParams(methods[k + j], out ps1, out ps2);\r\n\r\n\t\t\t\t\t\tConsole.WriteLine(\r\n\t\t\t\t\t\t  \"    public static MethodInfo {1} {{ get {{ return _{1} ?? (_{1} = _this.GetMethod(\\\"{0}\\\", new Type[] {{{2}}})); }} }}\",\r\n\t\t\t\t\t\t  m.Name, ps1, ps2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tConsole.WriteLine(\"  }\");\r\n\t\t\t\t\tConsole.WriteLine();\r\n\r\n\t\t\t\t\tk += overload_count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"}\");\r\n\r\n\t\t}\r\n\t}\r\n\r\n#endif\r\n}\r\n"
  },
  {
    "path": "Source/Core/Emit/ScriptAssembly.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\n\r\n/*\r\n \r\n  Designed and implemented by Tomas Matousek.\r\n\r\n*/\r\n\r\nnamespace PHP.Core.Emit\r\n{\r\n\t#region ScriptAssembly\r\n\r\n\tpublic class InvalidScriptAssemblyException : Exception\r\n\t{\r\n\t\tinternal InvalidScriptAssemblyException(Assembly/*!*/ assembly)\r\n\t\t\t: base(CoreResources.GetString(\"invalid_script_assembly\", assembly.Location))\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Interface implemented by the script assembly. \r\n\t/// Replaces multiple inheritance.\r\n\t/// </summary>\r\n\tinternal interface IScriptAssembly\r\n\t{\r\n\t\tbool Namespacing { get; }\r\n\t\tbool IsMultiScript { get; }\r\n\t\tstring GetUserTypeNamespace(string subnamespace);\r\n\t\tstring GetQualifiedScriptTypeName(string subnamespace);\r\n\t\tType GetScriptType(PhpSourceFile sourceFile);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// An abstract base class representing general script assembly.\r\n\t/// </summary>\r\n\tinternal abstract class ScriptAssembly\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the CLR module.\r\n\t\t/// </summary>\r\n\t\tprotected const string moduleName = \"PhpScriptModule\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// A CLR module where all scripts of this script assembly are contained in.\r\n\t\t/// </summary>\r\n\t\tpublic Module Module { get { return module; } }\r\n\t\tprotected Module module;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A CLR assembly where all scripts of this script assembly are contained in.\r\n\t\t/// </summary>\r\n\t\tpublic Assembly Assembly { get { return module.Assembly; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether namespacing is applied on PHP types in this script assembly.\r\n\t\t/// </summary>\r\n\t\tpublic bool Namespacing { get { return namespacing; } }\r\n\t\tprotected bool namespacing;\r\n\r\n\t\tpublic abstract bool IsMultiScript { get; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprotected ScriptAssembly() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"ScriptAssembly\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"module\">The CLR module.</param>\r\n\t\t/// <param name=\"namespacing\">Whether namespacing is applied.</param>\r\n\t\tpublic ScriptAssembly(Module/*!*/ module, bool namespacing)\r\n\t\t{\r\n\t\t\tDebug.Assert(module != null);\r\n\r\n\t\t\tthis.module = module;\r\n\t\t\tthis.namespacing = namespacing;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a script assembly using a specified CLR assembly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assembly\">The assembly to be reflected.</param>\r\n\t\t/// <returns>The script assembly.</returns>\r\n\t\t/// <exception cref=\"InvalidScriptAssemblyException\">The assembly is invalid.</exception>\r\n\t\tpublic static ScriptAssembly LoadFromAssembly(Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\tDebug.Assert(assembly != null);\r\n\r\n\t\t\tScriptAssembly result;\r\n\t\t\tScriptAssemblyAttribute attr = GetAttribute(assembly);\r\n\r\n\t\t\tif (attr.IsMultiScript)\r\n\t\t\t\tresult = new MultiScriptAssembly();\r\n\t\t\telse\r\n\t\t\t\tresult = new SingleScriptAssembly();\r\n\r\n\t\t\tresult.namespacing = attr.Namespacing;\r\n\t\t\tresult.module = GetModule(assembly);\r\n\t\t\tresult.LoadedFromAssembly(assembly);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the script assembly is loaded from a specified CLR assembly.\r\n\t\t/// </summary>\r\n\t\tprotected abstract void LoadedFromAssembly(Assembly/*!*/ assembly);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a script module associated with a specified source path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <returns>A script module.</returns>\r\n\t\tpublic abstract ScriptModule GetScriptModule(PhpSourceFile sourceFile);\r\n\r\n\t\tpublic abstract Type GetScriptType(PhpSourceFile sourceFile);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a CLR module where the script is stored.\r\n\t\t/// </summary>\r\n\t\tpublic static Module GetModule(Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\treturn assembly.GetModule(moduleName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a namespace where user types should be stored in.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"subnamespace\">The subnamespace ending with a type delimiter or a <B>null</B> reference.</param>\r\n\t\t/// <returns>The namespace ending with a type delimiter.</returns>\r\n\t\tpublic string GetUserTypeNamespace(string subnamespace)\r\n\t\t{\r\n\t\t\tDebug.Assert(subnamespace == null || subnamespace == String.Empty || subnamespace[subnamespace.Length - 1] == Type.Delimiter);\r\n\r\n\t\t\treturn Namespaces.User + Type.Delimiter + ((namespacing) ? subnamespace : null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type name of the script type given a subnamespace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"subnamespace\">The subnamespace or a <B>null</B> reference.</param>\r\n\t\t/// <returns>Full name of the type.</returns>\r\n\t\tpublic string GetQualifiedScriptTypeName(string subnamespace)\r\n\t\t{\r\n\t\t\tDebug.Assert(subnamespace == null || subnamespace == String.Empty || subnamespace[subnamespace.Length - 1] == Type.Delimiter);\r\n\r\n\t\t\tif (namespacing)\r\n\t\t\t\treturn String.Concat(Namespaces.User + Type.Delimiter, subnamespace, PhpScript.ScriptTypeName);\r\n\t\t\telse\r\n\t\t\t\treturn String.Concat(Namespaces.User + Type.Delimiter + PhpScript.ScriptTypeName + Type.Delimiter, subnamespace, PhpScript.ScriptTypeName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts metadata information associtated with the CLR assembly.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"InvalidScriptAssemblyException\">The assembly is invalid.</exception>\r\n\t\tinternal static ScriptAssemblyAttribute GetAttribute(Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\tobject[] attrs = assembly.GetCustomAttributes(typeof(ScriptAssemblyAttribute), false);\r\n\r\n\t\t\tif (attrs.Length != 1)\r\n\t\t\t\tthrow new InvalidScriptAssemblyException(assembly);\r\n\r\n\t\t\treturn (ScriptAssemblyAttribute)attrs[0];\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SingleScriptAssembly\r\n\r\n\t/// <summary>\r\n\t/// Represents a script assembly comprising of a single script module.\r\n\t/// </summary>\r\n\tinternal class SingleScriptAssembly : ScriptAssembly, IScriptAssembly\r\n\t{\r\n\t\tinternal SingleScriptAssembly() { }\r\n\r\n\t\tprotected ScriptModule script;\r\n\r\n\t\tpublic override bool IsMultiScript { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when the script assembly is being loaded from CLR assembly.\r\n\t\t/// </summary>\r\n\t\tprotected override void LoadedFromAssembly(Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t\tscript = new ScriptModule(this, \"\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the script module contained in the assembly.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The one and only script module of the assembly.</returns>\r\n\t\tpublic override ScriptModule GetScriptModule(PhpSourceFile dummy)\r\n\t\t{\r\n\t\t\treturn script;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script type stored in a specified single-script assembly.\r\n\t\t/// </summary>\r\n\t\tpublic override Type GetScriptType(PhpSourceFile dummy)\r\n\t\t{\r\n\t\t\treturn GetScriptType();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script type stored in a specified single-script assembly.\r\n\t\t/// </summary>\r\n\t\tpublic Type GetScriptType()\r\n\t\t{\r\n\t\t\treturn module.GetType(GetQualifiedScriptTypeName(null), false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region MultiScriptAssembly\r\n\r\n\t/// <summary>\r\n\t/// Represents a script assembly comprising of multiple script modules.\r\n\t/// </summary>\r\n\tinternal class MultiScriptAssembly : ScriptAssembly, IScriptAssembly\r\n\t{\r\n\t\tinternal MultiScriptAssembly() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source file to module mapping.\r\n\t\t/// </summary>\r\n\t\tprotected readonly Dictionary<PhpSourceFile, ScriptModule> /*!*/ scripts = new Dictionary<PhpSourceFile, ScriptModule>();\r\n\r\n\t\tpublic override bool IsMultiScript { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when the script assembly is being loaded from CLR assembly.\r\n\t\t/// </summary>\r\n\t\tprotected override void LoadedFromAssembly(Assembly/*!*/ assembly)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script module associated with a specified source file.\r\n\t\t/// </summary>\r\n\t\tpublic override ScriptModule GetScriptModule(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n\t\t\tScriptModule result;\r\n\t\t\tscripts.TryGetValue(sourceFile, out result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script type stored in a specified multi-script assembly.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <returns>The script type.</returns>\r\n\t\tpublic override Type GetScriptType(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceFile != null);\r\n\r\n\t\t\treturn module.GetType(GetQualifiedScriptTypeName(sourceFile), false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a full qualified name of a script type given a sub-namespace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <returns>The qualified name.</returns>\r\n\t\tpublic string GetQualifiedScriptTypeName(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceFile != null);\r\n\r\n\t\t\treturn GetQualifiedScriptTypeName(ScriptModule.GetSubnamespace(sourceFile));\r\n\t\t}\r\n\r\n\t\tinternal bool ScriptExists(FullPath fullPath)\r\n\t\t{\r\n\t\t\tPhpSourceFile source_file = new PhpSourceFile(Configuration.Application.Compiler.SourceRoot, fullPath);\r\n\t\t\treturn GetScriptType(source_file) != null;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}"
  },
  {
    "path": "Source/Core/Errors.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Runtime.Serialization;\r\nusing System.Configuration;\r\nusing System.Xml;\r\nusing System.Text;\r\nusing System.Resources;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#else\r\nusing System.Web; // ReportError(config, HttpContext.Current.Response.Output, error, id, info, message);\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region Enumerations\r\n\r\n    /// <summary>\r\n    /// Types of errors caused by PHP class library functions.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum PhpError : int\r\n    {\r\n        /// <summary>Error.</summary>\r\n        Error = 1,\r\n        /// <summary>Warning.</summary>\r\n        Warning = 2,\r\n        /// <summary>Notice.</summary>\r\n        Notice = 8,\r\n\r\n        /// <summary>User error.</summary>\r\n        UserError = 256,\r\n        /// <summary>User warning.</summary>\r\n        UserWarning = 512,\r\n        /// <summary>User notice.</summary>\r\n        UserNotice = 1024,\r\n\r\n        /// <summary>Parse error.</summary>\r\n        ParseError = 4,\r\n\r\n        /// <summary>Core error.</summary>\r\n        CoreError = 16,\r\n        /// <summary>Core warning.</summary>\r\n        CoreWarning = 32,\r\n\r\n        /// <summary>Compile error.</summary>\r\n        CompileError = 64,\r\n        /// <summary>Compile warning.</summary>\r\n        CompileWarning = 128,\r\n\r\n        /// <summary>Strict notice (PHP 5.0+).</summary>\r\n        Strict = 2048,\r\n\r\n        /// <summary>PHP 5.2+</summary>\r\n        RecoverableError = 4096,\r\n\r\n        /// <summary>Deprecated (PHP 5.3+)</summary>\r\n        Deprecated = 8192,\r\n        UserDeprecated = 16384,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Sets of error types.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum PhpErrorSet : int\r\n    {\r\n        /// <summary>Empty error set.</summary>\r\n        None = 0,\r\n\r\n        /// <summary>Standard errors used by Core and Class Library.</summary>\r\n        Standard = PhpError.Error | PhpError.Warning | PhpError.Notice | PhpError.Deprecated,\r\n\r\n        /// <summary>User triggered errors.</summary>\r\n        User = PhpError.UserError | PhpError.UserWarning | PhpError.UserNotice | PhpError.UserDeprecated,\r\n\r\n        /// <summary>Core system errors.</summary>\r\n        System = PhpError.ParseError | PhpError.CoreError | PhpError.CoreWarning | PhpError.CompileError | PhpError.CompileWarning | PhpError.RecoverableError,\r\n\r\n        /// <summary>All possible errors except for the strict ones.</summary>\r\n        AllButStrict = Standard | User | System,\r\n\r\n        /// <summary>All possible errors. 30719 in PHP 5.3</summary>\r\n        All = AllButStrict | PhpError.Strict,\r\n\r\n        /// <summary>Errors which can be handled by the user defined routine.</summary>\r\n        Handleable = (User | Standard) & ~PhpError.Error,\r\n\r\n        /// <summary>Errors which causes termination of a running script.</summary>\r\n        Fatal = PhpError.Error | PhpError.CompileError | PhpError.CoreError | PhpError.UserError\r\n    }\r\n\r\n    /// <summary>\r\n    /// Type of action being performed when PhpException static handlers (Throw, InvalidArgument, ...) are called. \r\n    /// </summary>\r\n    public enum PhpErrorAction\r\n    {\r\n        /// <summary>An action specified by the current configuration is taken.</summary>\r\n        Default,\r\n        /// <summary>An exception is thrown.</summary>\r\n        Throw,\r\n        /// <summary>Do nothing but setting the flag.</summary>\r\n        None\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// Represents information about an error got from the stack.\r\n    /// </summary>\r\n    public struct ErrorStackInfo\r\n    {\r\n        /// <summary>\r\n        /// The name of the source file.\r\n        /// </summary>\r\n        public string File;\r\n\r\n        /// <summary>\r\n        /// The name of the PHP function which caused an error.\r\n        /// </summary>\r\n        public string Caller;\r\n\r\n        /// <summary>\r\n        /// Whether a caller is a library function.\r\n        /// </summary>\r\n        public bool LibraryCaller;\r\n\r\n        /// <summary>\r\n        /// A number of a line in a source file where an error occured.\r\n        /// </summary>\r\n        public int Line;\r\n\r\n        /// <summary>\r\n        /// A number of a column in a source file where an error occured.\r\n        /// </summary>\r\n        public int Column;\r\n\r\n        /// <summary>\r\n        /// Initializes <see cref=\"ErrorStackInfo\"/> by given values.\r\n        /// </summary>\r\n        /// <param name=\"file\">Full path to a source file.</param>\r\n        /// <param name=\"caller\">Name of a calling PHP funcion.</param>\r\n        /// <param name=\"line\">Line in a source file.</param>\r\n        /// <param name=\"column\">Column in a source file.</param>\r\n        /// <param name=\"libraryCaller\">Whether a caller is a library function.</param>\r\n        public ErrorStackInfo(string file, string caller, int line, int column, bool libraryCaller)\r\n        {\r\n            File = file;\r\n            Caller = caller;\r\n            Line = line;\r\n            Column = column;\r\n            LibraryCaller = libraryCaller;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Represents exceptions thrown by PHP class library functions.\r\n    /// </summary>\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    public class PhpException : System.Exception\r\n    {\r\n        #region Frequently reported errors\r\n\r\n        /// <summary>\r\n        /// Invalid argument error.\r\n        /// </summary>\r\n        /// <param name=\"argument\">The name of the argument being invalid.</param>\r\n        public static void InvalidArgument(string argument)\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"invalid_argument\", argument));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invalid argument error with a description of a reason. \r\n        /// </summary>\r\n        /// <param name=\"argument\">The name of the argument being invalid.</param>\r\n        /// <param name=\"message\">The message - what is wrong with the argument. Must contain \"{0}\" which is replaced by argument's name.\r\n        /// </param>\r\n        public static void InvalidArgument(string argument, string message)\r\n        {\r\n            Throw(PhpError.Warning, String.Format(CoreResources.GetString(\"invalid_argument_with_message\") + message, argument));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Argument null error. Thrown when argument can't be null but it is.\r\n        /// </summary>\r\n        /// <param name=\"argument\">The name of the argument.</param>\r\n        public static void ArgumentNull(string argument)\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"argument_null\", argument));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reference argument null error. Thrown when argument which is passed by reference is null.\r\n        /// </summary>\r\n        /// <param name=\"argument\">The name of the argument.</param>\r\n        public static void ReferenceNull(string argument)\r\n        {\r\n            Throw(PhpError.Error, CoreResources.GetString(\"reference_null\", argument));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called library function is not supported.\r\n        /// </summary>\r\n        public static void FunctionNotSupported()\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"function_not_supported\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called library function is not supported.\r\n        /// </summary>\r\n        /// <param name=\"function\">Not supported function name.</param>\r\n        [Emitted]\r\n        public static void FunctionNotSupported(string/*!*/function)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(function));\r\n\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"notsupported_function_called\", function));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calles library function is not supported.\r\n        /// </summary>\r\n        /// <param name=\"severity\">A severity of the error.</param>\r\n        public static void FunctionNotSupported(PhpError severity)\r\n        {\r\n            Throw(severity, CoreResources.GetString(\"function_not_supported\"));\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Called library function is deprecated.\r\n        ///// </summary>\r\n        //public static void FunctionDeprecated()\r\n        //{\r\n        //    ErrorStackInfo info = PhpStackTrace.TraceErrorFrame(ScriptContext.CurrentContext);\r\n        //    FunctionDeprecated(info.LibraryCaller ? info.Caller : null);\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Called library function is deprecated.\r\n        /// </summary>\r\n        public static void FunctionDeprecated(string functionName)\r\n        {\r\n            Throw(PhpError.Deprecated, CoreResources.GetString(\"function_is_deprecated\", functionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls by the Class Library methods which need variables but get a <b>null</b> reference.\r\n        /// </summary>\r\n        public static void NeedsVariables()\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"function_needs_variables\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// The value of an argument is not invalid but unsupported.\r\n        /// </summary>\r\n        /// <param name=\"argument\">The argument which value is unsupported.</param>\r\n        /// <param name=\"value\">The value which is unsupported.</param>\r\n        public static void ArgumentValueNotSupported(string argument, object value)\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"argument_value_not_supported\", value, argument));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Throw by <see cref=\"PhpStack\"/> when a peeked argument should be passed by reference but it is not.\r\n        /// </summary>\r\n        /// <param name=\"index\">An index of the argument.</param>\r\n        /// <param name=\"calleeName\">A name of the function or method being called. Can be a <B>null</B> reference.</param>\r\n        public static void ArgumentNotPassedByRef(int index, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                Throw(PhpError.Error, CoreResources.GetString(\"argument_not_passed_byref_to\", index, calleeName));\r\n            else\r\n                Throw(PhpError.Error, CoreResources.GetString(\"argument_not_passed_byref\", index));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to a user function/method call which has less actual arguments than it's expected to have.\r\n        /// </summary>\r\n        /// <param name=\"index\">An index of the parameter.</param>\r\n        /// <param name=\"calleeName\">A name of the function or method being called. Can be a <B>null</B> reference.</param>\r\n        [Emitted]\r\n        public static void MissingArgument(int index, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"missing_argument_for\", index, calleeName));\r\n            else\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"missing_argument\", index));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to a user function/method call which has less actual type arguments than it's expected to have.\r\n        /// </summary>\r\n        /// <param name=\"index\">An index of the type parameter.</param>\r\n        /// <param name=\"calleeName\">A name of the function or method being called. Can be a <B>null</B> reference.</param>\r\n        [Emitted]\r\n        public static void MissingTypeArgument(int index, string calleeName)\r\n        {\r\n            if (calleeName != null)\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"missing_type_argument_for\", index, calleeName));\r\n            else\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"missing_type_argument\", index));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void MissingArguments(string typeName, string methodName, int actual, int required)\r\n        {\r\n            if (typeName != null)\r\n            {\r\n                if (methodName != null)\r\n                    Throw(PhpError.Warning, CoreResources.GetString(\"too_few_method_params\", typeName, methodName, required, actual));\r\n                else\r\n                    Throw(PhpError.Warning, CoreResources.GetString(\"too_few_ctor_params\", typeName, required, actual));\r\n            }\r\n            else\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"too_few_function_params\", methodName, required, actual));\r\n        }\r\n\r\n        public static void UnsupportedOperandTypes()\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"unsupported_operand_types\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to a library function call which has invalid actual argument count.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static void InvalidArgumentCount(string typeName, string methodName)\r\n        {\r\n            if (methodName != null)\r\n            {\r\n                if (typeName != null)\r\n                    Throw(PhpError.Warning, CoreResources.GetString(\"invalid_argument_count_for_method\", typeName, methodName));\r\n                else\r\n                    Throw(PhpError.Warning, CoreResources.GetString(\"invalid_argument_count_for_function\", methodName));\r\n            }\r\n            else\r\n                Throw(PhpError.Warning, CoreResources.GetString(\"invalid_argument_count\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to the foreach statement if the variable to be enumerated doesn't implement \r\n        /// the <see cref=\"IPhpEnumerable\"/> interface.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static void InvalidForeachArgument()\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"invalid_foreach_argument\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to the function call if an argument cannot be implicitly casted.\r\n        /// </summary>\r\n        /// <param name=\"argument\">The argument which is casted.</param>\r\n        /// <param name=\"targetType\">The type to which is casted.</param>\r\n        /// <param name=\"functionName\">The name of the function called.</param>\r\n        [Emitted]\r\n        public static void InvalidImplicitCast(object argument, string targetType, string functionName)\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"invalid_implicit_cast\",\r\n              PhpVariable.GetTypeName(argument),\r\n              targetType,\r\n              functionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to the code on the places where invalid number of breaking levels is used.\r\n        /// </summary>\r\n        /// <param name=\"levelCount\">The number of levels.</param>\r\n        [Emitted]\r\n        public static void InvalidBreakLevelCount(int levelCount)\r\n        {\r\n            Throw(PhpError.Error, CoreResources.GetString(\"invalid_break_level_count\", levelCount));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reported by operators when they found that a undefined variable is acceesed.\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the variable.</param>\r\n        [Emitted]\r\n        public static void UndefinedVariable(string name)\r\n        {\r\n            Throw(PhpError.Notice, CoreResources.GetString(\"undefined_variable\", name));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted instead of the assignment of to the \"$this\" variable.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static void CannotReassignThis()\r\n        {\r\n            Throw(PhpError.Error, CoreResources.GetString(\"cannot_reassign_this\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// An argument violates a type hint.\r\n        /// </summary>\r\n        /// <param name=\"argName\">The name of the argument.</param>\r\n        /// <param name=\"typeName\">The name of the hinted type.</param>\r\n        [Emitted]\r\n        public static void InvalidArgumentType(string argName, string typeName)\r\n        {\r\n            Throw(PhpError.Error, CoreResources.GetString(\"invalid_argument_type\", argName, typeName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Array operators reports this error if an value of illegal type is used for indexation.\r\n        /// </summary>\r\n        public static void IllegalOffsetType()\r\n        {\r\n            Throw(PhpError.Warning, CoreResources.GetString(\"illegal_offset_type\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Array does not contain given <paramref name=\"key\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key which was not found in the array.</param>\r\n        public static void UndefinedOffset(object key)\r\n        {\r\n            Throw(PhpError.Notice, CoreResources.GetString(\"undefined_offset\", key));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Emitted to the script's Main() routine. Thrown when an unexpected exception is catched.\r\n        /// </summary>\r\n        /// <param name=\"e\">The catched exception.</param>\r\n        public static void InternalError(Exception e)\r\n        {\r\n            throw new PhpNetInternalException(e.Message, e);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reports an error when a variable should be PHP array but it is not.\r\n        /// </summary>\r\n        /// <param name=\"reference\">Whether a reference modifier (=&amp;) is used.</param>\r\n        /// <param name=\"var\">The variable which was misused.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is <see cref=\"PhpArray\"/> (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is scalar type (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a string (Warning).</exception>\r\n        public static void VariableMisusedAsArray(object var, bool reference)\r\n        {\r\n            Debug.Assert(var != null);\r\n\r\n            DObject obj;\r\n\r\n            if ((obj = var as DObject) != null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"object_used_as_array\", obj.TypeName));\r\n            }\r\n            else if (PhpVariable.IsString(var))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(reference ? \"string_item_used_as_reference\" : \"string_used_as_array\"));\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"scalar_used_as_array\", PhpVariable.GetTypeName(var)));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reports an error when a variable should be PHP object but it is not.\r\n        /// </summary>\r\n        /// <param name=\"reference\">Whether a reference modifier (=&amp;) is used.</param>\r\n        /// <param name=\"var\">The variable which was misused.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is <see cref=\"PhpArray\"/> (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is scalar type (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a string (Warning).</exception>\r\n        public static void VariableMisusedAsObject(object var, bool reference)\r\n        {\r\n            Debug.Assert(var != null);\r\n\r\n            if (var is PhpArray)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"array_used_as_object\"));\r\n            }\r\n            else if (PhpVariable.IsString(var))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(reference ? \"string_item_used_as_reference\" : \"string_used_as_object\"));\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"scalar_used_as_object\", PhpVariable.GetTypeName(var)));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Thrown when \"this\" special variable is used out of class.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static void ThisUsedOutOfObjectContext()\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"this_used_out_of_object\"));\r\n        }\r\n\r\n        public static void UndeclaredStaticProperty(string className, string fieldName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undeclared_static_property_accessed\", className, fieldName));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void StaticPropertyUnset(string className, string fieldName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"static_property_unset\", className, fieldName));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void UndefinedMethodCalled(string className, string methodName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_method_called\", className, methodName));\r\n        }\r\n\r\n        public static void AbstractMethodCalled(string className, string methodName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"abstract_method_called\", className, methodName));\r\n        }\r\n\r\n        public static void ConstantNotAccessible(string className, string constName, string context, bool isProtected)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\r\n                      isProtected ? \"protected_constant_accessed\" : \"private_constant_accessed\", className, constName, context));\r\n        }\r\n\r\n        public static void PropertyNotAccessible(string className, string fieldName, string context, bool isProtected)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\r\n                      isProtected ? \"protected_property_accessed\" : \"private_property_accessed\", className, fieldName, context));\r\n        }\r\n\r\n        public static void MethodNotAccessible(string className, string methodName, string context, bool isProtected)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\r\n                      isProtected ? \"protected_method_called\" : \"private_method_called\", className, methodName, context));\r\n        }\r\n\r\n        public static void CannotInstantiateType(string typeName, bool isInterface)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\r\n              isInterface ? \"interface_instantiated\" : \"abstract_class_instantiated\", typeName));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void NoSuitableOverload(string className, string/*!*/ methodName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\r\n                      (className != null) ? \"no_suitable_method_overload\" : \"no_suitable_function_overload\",\r\n                      className, methodName));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void PropertyTypeMismatch(string/*!*/ className, string/*!*/ propertyName)\r\n        {\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"property_type_mismatch\",\r\n                className, propertyName));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Error handling stuff\r\n\r\n        /// <summary>\r\n        /// Delegate used to catch any thrown PHP exception. Used in compile time to catch PHP runtime exceptions.\r\n        /// </summary>\r\n        [ThreadStatic]\r\n        internal static Action<PhpError, string> ThrowCallbackOverride = null;\r\n\r\n        /// <summary>\r\n        /// Reports a PHP error. \r\n        /// </summary>\r\n        /// <param name=\"error\">The error type</param>\r\n        /// <param name=\"message\">The error message.</param>    \r\n        public static void Throw(PhpError error, string message)\r\n        {\r\n            if (ThrowCallbackOverride != null)\r\n            {\r\n                ThrowCallbackOverride(error, message);\r\n                return;\r\n            }\r\n\r\n            ErrorStackInfo info = new ErrorStackInfo();\r\n            bool info_loaded = false;\r\n\r\n            // gets the current script context and config:\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n            LocalConfiguration config = context.Config;\r\n\r\n            // determines whether the error will be reported and whether it is handleable:\r\n            bool is_error_reported = ((PhpErrorSet)error & config.ErrorControl.ReportErrors) != 0 && !context.ErrorReportingDisabled;\r\n            bool is_error_handleable = ((PhpErrorSet)error & PhpErrorSet.Handleable & (PhpErrorSet)config.ErrorControl.UserHandlerErrors) != 0;\r\n            bool is_error_fatal = ((PhpErrorSet)error & PhpErrorSet.Fatal) != 0;\r\n            bool do_report = true;\r\n\r\n            // remember last error info\r\n            context.LastErrorType = error;\r\n            context.LastErrorMessage = message;\r\n            context.LastErrorFile = null;   // only if we are getting ErrorStackInfo, see PhpStackTrace.TraceErrorFrame\r\n            context.LastErrorLine = 0;     // only if we are getting ErrorStackInfo, see PhpStackTrace.TraceErrorFrame\r\n\r\n            // calls a user defined handler if available:\r\n            if (is_error_handleable && config.ErrorControl.UserHandler != null)\r\n            {\r\n                // loads stack info:\r\n                Func<ErrorStackInfo> func = () =>\r\n                {\r\n                    if (!info_loaded)\r\n                    {\r\n                        info = PhpStackTrace.TraceErrorFrame(context, true);\r\n                        info_loaded = true;\r\n                    }\r\n                    return info;\r\n                };\r\n\r\n                do_report = CallUserErrorHandler(context, error, func, message);\r\n            }\r\n\r\n            // reports error to output and logs:\r\n            if (do_report && is_error_reported &&\r\n                (config.ErrorControl.DisplayErrors || config.ErrorControl.EnableLogging))   // check if the error will be displayed to avoid stack trace loading\r\n            {\r\n                // loads stack info:\r\n                if (!info_loaded) { info = PhpStackTrace.TraceErrorFrame(context, false); info_loaded = true; }\r\n\r\n                ReportError(config, context.Output, error, -1, info, message);\r\n            }\r\n\r\n            // Throws an exception if the error is fatal and throwing is enabled.\r\n            // PhpError.UserError is also fatal, but can be cancelled by user handler => handler call must precede this line.\r\n            // Error displaying must also precede this line because the error should be displayed before an exception is thrown.\r\n            if (is_error_fatal && context.ThrowExceptionOnError)\r\n            {\r\n                // loads stack info:\r\n                if (!info_loaded) { info = PhpStackTrace.TraceErrorFrame(context, false); info_loaded = true; }\r\n\r\n                throw new PhpException(error, message, info);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reports an error to log file, event log and to output (as configured).\r\n        /// </summary>\r\n        private static void ReportError(LocalConfiguration config, TextWriter output, PhpError error, int id,\r\n            ErrorStackInfo info, string message)\r\n        {\r\n            string formatted_message = FormatErrorMessageOutput(config, error, id, info, message);\r\n\r\n            // logs error if logging is enabled:\r\n            if (config.ErrorControl.EnableLogging)\r\n            {\r\n#if SILVERLIGHT\r\n\t\t\t\tthrow new NotSupportedException(\"Logging is not supported on Silverlight. Set EnableLogging to false.\");\r\n#else\r\n                // adds a message to log file:\r\n                if (config.ErrorControl.LogFile != null)\r\n                    try\r\n                    {\r\n                        // <error>: <caller>(): <message> in <file> on line <line>\r\n                        string caller = (info.Caller != null) ? (info.Caller + \"(): \") : null;\r\n                        string place = (info.Line > 0 && info.Column > 0) ? CoreResources.GetString(\"error_place\", info.File, info.Line, info.Column) : null;\r\n\r\n                        Logger.AppendLine(config.ErrorControl.LogFile, string.Concat(error, \": \", caller, message, place));\r\n                    }\r\n                    catch (Exception) { }\r\n\r\n                // adds a message to event log:\r\n                if (config.ErrorControl.SysLog)\r\n                    try { Logger.AddToEventLog(message); }\r\n                    catch (Exception) { }\r\n#endif\r\n            }\r\n\r\n            // displays an error message if desired:\r\n            if (config.ErrorControl.DisplayErrors)\r\n            {\r\n                output.Write(config.ErrorControl.ErrorPrependString);\r\n                output.Write(formatted_message);\r\n                output.Write(config.ErrorControl.ErrorAppendString);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls user error handler. \r\n        /// </summary>\r\n        /// <returns>Whether to report error by default handler (determined by handler's return value).</returns>\r\n        /// <exception cref=\"ScriptDiedException\">Error handler dies.</exception>\r\n        private static bool CallUserErrorHandler(ScriptContext context, PhpError error, Func<ErrorStackInfo> info, string message)\r\n        {\r\n            LocalConfiguration config = context.Config;\r\n\r\n            try\r\n            {\r\n                object result = PhpVariable.Dereference(config.ErrorControl.UserHandler.Invoke(new PhpReference[] \r\n        { \r\n          new PhpReference((int)error),\r\n          new PhpReference(message),\r\n          new PhpReference(new LazyStackInfo(info, true)),\r\n          new PhpReference(new LazyStackInfo(info, false)),\r\n          new PhpReference() // global variables list is not supported\r\n        }));\r\n\r\n                // since PHP5 an error is reported by default error handler if user handler returns false:\r\n                return result is bool && (bool)result == false;\r\n            }\r\n            catch (ScriptDiedException)\r\n            {\r\n                // user handler has cancelled the error via script termination:\r\n                throw;\r\n            }\r\n            catch (PhpUserException)\r\n            {\r\n                // rethrow user exceptions:\r\n                throw;\r\n            }\r\n            catch (Exception)\r\n            {\r\n            }\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reports error thrown from inside eval.\r\n        /// </summary>\r\n        internal static void ThrowByEval(PhpError error, string sourceFile, int line, int column, string message)\r\n        {\r\n            // obsolete:\r\n            //      ErrorStackInfo info = new ErrorStackInfo(sourceFile,null,line,column,false);\r\n            //      \r\n            //      if (ScriptContext.CurrentContext.Config.ErrorControl.HtmlMessages)\r\n            //        message = CoreResources.GetString(\"error_message_html_eval\",message,info.Line,info.Column); else\r\n            //        message = CoreResources.GetString(\"error_message_plain_eval\",message,info.Line,info.Column);\r\n\r\n            Throw(error, message);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reports error thrown by compiler.\r\n        /// </summary>\r\n        internal static void ThrowByWebCompiler(PhpError error, int id, string sourceFile, int line, int column, string message)\r\n        {\r\n            ErrorStackInfo info = new ErrorStackInfo(sourceFile, null, line, column, false);\r\n\r\n            // gets the current script context and config:\r\n            LocalConfiguration config = Configuration.Local;\r\n\r\n#if !SILVERLIGHT\r\n            ReportError(config, HttpContext.Current.Response.Output, error, id, info, message);\r\n#else\r\n\t\t\tReportError(config, new StreamWriter(ScriptContext.CurrentContext.OutputStream), error, id, info, message);\r\n#endif\r\n\r\n            if (((PhpErrorSet)error & PhpErrorSet.Fatal) != 0)\r\n                throw new PhpException(error, message, info);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the error type text, to be displayed on output.\r\n        /// </summary>\r\n        /// <param name=\"error\"></param>\r\n        /// <param name=\"id\"></param>\r\n        /// <returns>Error text.</returns>\r\n        internal static string PhpErrorText(PhpError error, int id)\r\n        {\r\n            if (id > 0)\r\n            {\r\n                return String.Format(\"{0} ({1})\", error, id);\r\n            }\r\n            else\r\n            {\r\n                switch (error)\r\n                {\r\n                    // errors with spaces in the name\r\n                    case PhpError.Strict:\r\n                        return \"Strict Standards\";\r\n\r\n                    // user errors reported as normal errors (without \"User\")\r\n                    case PhpError.UserNotice:\r\n                        return PhpError.Notice.ToString();\r\n                    case PhpError.UserError:\r\n                        return PhpError.Error.ToString();\r\n                    case PhpError.UserWarning:\r\n                        return PhpError.Warning.ToString();\r\n\r\n                    // error string as it is\r\n                    default:\r\n                        return error.ToString(); ;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"info\"></param>\r\n        /// <param name=\"config\"></param>\r\n        /// <returns>Returns caller name with () or null. Formatted for the current output capabilities.</returns>\r\n        internal static string FormatErrorCallerName(ErrorStackInfo info, LocalConfiguration config)\r\n        {\r\n            if (info.Caller == null)\r\n                return null;\r\n\r\n            if (config.ErrorControl.HtmlMessages && config.ErrorControl.DocRefRoot != null && info.LibraryCaller)\r\n            {   // able to display HTML\r\n                return String.Format(\"<a href='{0}/function.{1}{2}'>{3}()</a>\",\r\n                      config.ErrorControl.DocRefRoot,\r\n                      info.Caller.Replace('_', '-').ToLower(),\r\n                      config.ErrorControl.DocRefExtension,\r\n                      info.Caller);\r\n            }\r\n            else\r\n            {\r\n                return info.Caller + \"()\";\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Modifies the error message and caller display text, depends on error type.\r\n        /// In case of different PHP behavior.\r\n        /// </summary>\r\n        /// <param name=\"error\">error type.</param>\r\n        /// <param name=\"message\">Error message, in default without any change.</param>\r\n        /// <param name=\"caller\">Caller text, in default will be modified to \"foo(): \".</param>\r\n        internal static void FormatErrorMessageText(PhpError error, ref string message, ref string caller)\r\n        {\r\n            switch (error)\r\n            {\r\n                case PhpError.Deprecated:\r\n                case PhpError.UserNotice:\r\n                    caller = null;  // the caller is not displayed in PHP\r\n                    return;\r\n                default:\r\n                    if (caller != null)\r\n                        caller += \": \";\r\n                    return;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Formats error message.\r\n        /// </summary>\r\n        /// <param name=\"config\">A configuration.</param>\r\n        /// <param name=\"error\">A type of the error.</param>\r\n        /// <param name=\"id\">Error id or -1.</param>\r\n        /// <param name=\"info\">A stack information about the error.</param>\r\n        /// <param name=\"message\">A message.</param>\r\n        /// <returns>A formatted plain text or HTML message depending on settings in <paramref name=\"config\"/>.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramren name=\"config\"/> is a <B>null</B> reference.</exception>\r\n        public static string FormatErrorMessageOutput(LocalConfiguration config, PhpError error, int id, ErrorStackInfo info, string message)\r\n        {\r\n            if (config == null)\r\n                throw new ArgumentNullException(\"config\");\r\n\r\n            string error_str = PhpErrorText(error, id); // the error type (Warning, Error, ...)\r\n            bool show_place = info.Line > 0 && info.Column > 0; // we are able to report error position\r\n            string caller = FormatErrorCallerName(info, config);    // current function name \"foo()\" or null\r\n\r\n            // change the message or caller, based on the error type\r\n            FormatErrorMessageText(error, ref message, ref caller);\r\n\r\n            // error message\r\n            string ErrorFormatString =\r\n                config.ErrorControl.HtmlMessages ?\r\n                (show_place ? CoreResources.error_message_html_debug : CoreResources.error_message_html) :\r\n                (show_place ? CoreResources.error_message_plain_debug : CoreResources.error_message_plain);\r\n\r\n            if (show_place)\r\n                return string.Format(ErrorFormatString,\r\n                    error_str, caller, message, info.File, info.Line, info.Column);\r\n            else\r\n                return string.Format(ErrorFormatString,\r\n                    error_str, caller, message);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts exception message (ending by dot) to error message (not ending by a dot).\r\n        /// </summary>\r\n        /// <param name=\"exceptionMessage\">The exception message.</param>\r\n        /// <returns>The error message.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"exceptionMessage\"/> is a <B>null</B> reference.</exception>\r\n        public static string ToErrorMessage(string exceptionMessage)\r\n        {\r\n            if (exceptionMessage == null) throw new ArgumentNullException(\"exceptionMessage\");\r\n            return exceptionMessage.TrimEnd(new char[] { '.' });\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Exception handling stuff\r\n\r\n        /// <summary>\r\n        /// Exception constructor.\r\n        /// </summary>\r\n        internal PhpException()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exception constructor.\r\n        /// </summary>\r\n        /// <param name=\"error\">The type of PHP error.</param>\r\n        /// <param name=\"message\">The error message.</param>\r\n        /// <param name=\"info\">Information about an error gained from a stack.</param>\r\n        private PhpException(PhpError error, string message, ErrorStackInfo info)\r\n            : base(message)\r\n        {\r\n            this.info = info;\r\n            this.error = error;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Error seriousness.\r\n        /// </summary>\r\n        public PhpError Error { get { return error; } }\r\n        private PhpError error;\r\n\r\n        /// <summary>\r\n        /// Error debug info (caller, source file, line and column).\r\n        /// </summary>\r\n        public ErrorStackInfo DebugInfo { get { return info; } }\r\n        private ErrorStackInfo info;\r\n\r\n        /// <summary>\r\n        /// Converts the exception to a string message.\r\n        /// </summary>\r\n        /// <returns>The formatted message.</returns>\r\n        public override string ToString()\r\n        {\r\n            return FormatErrorMessageOutput(ScriptContext.CurrentContext.Config, error, -1, info, Message);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the PhpException class with serialized data. This constructor is used\r\n        /// when an exception is thrown in a remotely called method. Such an exceptions needs to be serialized,\r\n        /// transferred back to the caller and then rethrown using this constructor.\r\n        /// </summary>\r\n        /// <param name=\"info\">The SerializationInfo that holds the serialized object data about the exception \r\n        /// being thrown.</param>\r\n        /// <param name=\"context\">The StreamingContext that contains contextual information about the source or \r\n        /// destination.</param>\r\n        protected PhpException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n            this.error = (PhpError)info.GetValue(\"error\", typeof(PhpError));\r\n            this.info = new ErrorStackInfo(\r\n              (string)info.GetString(\"file\"),\r\n              (string)info.GetString(\"caller\"),\r\n              (int)info.GetInt32(\"line\"),\r\n              (int)info.GetInt32(\"column\"),\r\n              (bool)info.GetBoolean(\"libraryCaller\"));\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Sets the SerializationInfo with information about the exception. This method is called when a skeleton\r\n        /// catches PhpException thrown in a remotely called method.\r\n        /// </summary>\r\n        /// <param name=\"info\">The SerializationInfo that holds the serialized object data.</param>\r\n        /// <param name=\"context\">The StreamingContext that contains contextual information about the source or \r\n        /// destination.</param>\r\n        [System.Security.SecurityCritical]\r\n        public override void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            base.GetObjectData(info, context);\r\n            info.AddValue(\"error\", error);\r\n            info.AddValue(\"caller\", this.info.Caller);\r\n            info.AddValue(\"file\", this.info.File);\r\n            info.AddValue(\"line\", this.info.Line);\r\n            info.AddValue(\"column\", this.info.Column);\r\n        }\r\n#endif\r\n\r\n        #endregion\r\n    }\r\n\r\n    internal class LazyStackInfo : IPhpVariable\r\n    {\r\n        private PhpReference value;\r\n        private Func<ErrorStackInfo> info;\r\n        private readonly bool file;\r\n\r\n        private PhpReference Value\r\n        {\r\n            get\r\n            {\r\n                if (value == null)\r\n                    value = file ? new PhpReference(info().File) : new PhpReference(info().Line);\r\n                return value;\r\n            }\r\n        }\r\n\r\n        public LazyStackInfo(Func<ErrorStackInfo> info, bool file)\r\n        {\r\n            this.info = info;\r\n            this.file = file;\r\n        }\r\n\r\n        public PhpTypeCode GetTypeCode()\r\n        {\r\n            return Value.GetTypeCode();\r\n        }\r\n\r\n        public double ToDouble()\r\n        {\r\n            return Value.ToDouble();\r\n        }\r\n\r\n        public int ToInteger()\r\n        {\r\n            return Value.ToInteger();\r\n        }\r\n\r\n        public long ToLongInteger()\r\n        {\r\n            return Value.ToLongInteger();\r\n        }\r\n\r\n        public bool ToBoolean()\r\n        {\r\n            return Value.ToBoolean();\r\n        }\r\n\r\n        public PhpBytes ToPhpBytes()\r\n        {\r\n            return Value.ToPhpBytes();\r\n        }\r\n\r\n        public Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n        {\r\n            return Value.ToNumber(out intValue, out longValue, out doubleValue);\r\n        }\r\n\r\n        public string ToString(bool throwOnError, out bool success)\r\n        {\r\n            return ((IPhpConvertible)Value).ToString(throwOnError, out success);\r\n        }\r\n\r\n        public void Print(TextWriter output)\r\n        {\r\n            Value.Print(output);\r\n        }\r\n\r\n        public void Dump(TextWriter output)\r\n        {\r\n            Value.Dump(output);\r\n        }\r\n\r\n        public void Export(TextWriter output)\r\n        {\r\n            Value.Export(output);\r\n        }\r\n\r\n        public object DeepCopy()\r\n        {\r\n            return Value.DeepCopy();\r\n        }\r\n\r\n        public object Copy(CopyReason reason)\r\n        {\r\n            return this;\r\n        }\r\n\r\n        public int CompareTo(object obj)\r\n        {\r\n            return Value.CompareTo(obj);\r\n        }\r\n\r\n        public int CompareTo(object obj, IComparer comparer)\r\n        {\r\n            return Value.CompareTo(obj, comparer);\r\n        }\r\n\r\n        public bool IsEmpty()\r\n        {\r\n            return Value.IsEmpty();\r\n        }\r\n\r\n        public bool IsScalar()\r\n        {\r\n            return Value.IsScalar();\r\n        }\r\n\r\n        public string GetTypeName()\r\n        {\r\n            return Value.GetTypeName();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            if (Value.Value == null)\r\n                return string.Empty;\r\n            return Value.Value.ToString();\r\n        }\r\n    }\r\n\r\n    internal static class ErrorSeverityHelper\r\n    {\r\n        public static PhpError ToPhpCompileError(this ErrorSeverity severity)\r\n        {\r\n            return (severity.Value == ErrorSeverity.Values.Warning)\r\n                ? PhpError.CompileWarning\r\n                : PhpError.CompileError;\r\n        }\r\n    }\r\n\r\n    // TODO:\r\n    internal sealed class EvalErrorSink : ErrorSink\r\n    {\r\n        private readonly int firstLineColumnDisplacement;\r\n\r\n        public EvalErrorSink(int firstLineColumnDisplacement, WarningGroups disabledGroups, int[]/*!*/ disabledWarnings)\r\n            : base(disabledGroups, disabledWarnings)\r\n        {\r\n            this.firstLineColumnDisplacement = firstLineColumnDisplacement;\r\n        }\r\n\r\n        protected override bool Add(int id, string message, ErrorSeverity severity, int group, string/*!*/ fullPath,\r\n            ErrorPosition pos)\r\n        {\r\n            Debug.Assert(fullPath != null);\r\n\r\n            // first line column adjustment:\r\n            if (pos.FirstLine == 1) pos.FirstColumn += firstLineColumnDisplacement;\r\n\r\n            Debug.WriteLine(\"!!!3\", message);\r\n\r\n            PhpException.ThrowByEval(severity.ToPhpCompileError(), fullPath, pos.FirstLine, pos.FirstColumn, message);\r\n\r\n            return true;\r\n        }\r\n    }\r\n\r\n    internal sealed class WebErrorSink : ErrorSink\r\n    {\r\n        public WebErrorSink(WarningGroups disabledGroups, int[]/*!*/ disabledWarnings)\r\n            : base(disabledGroups, disabledWarnings)\r\n        {\r\n\r\n        }\r\n\r\n        protected override bool Add(int id, string message, ErrorSeverity severity, int group, string/*!*/ fullPath,\r\n            ErrorPosition pos)\r\n        {\r\n            Debug.Assert(fullPath != null);\r\n            PhpException.ThrowByWebCompiler(severity.ToPhpCompileError(), id, fullPath, pos.FirstLine, pos.FirstColumn, message);\r\n            return true;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown when data are not found found in call context or are not valid.\r\n    /// </summary>\r\n    [Serializable]\r\n    public class InvalidCallContextDataException : ApplicationException\r\n    {\r\n        internal InvalidCallContextDataException(string slot)\r\n            : base(CoreResources.GetString(\"invalid_call_context_data\", slot)) { }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown by exit/die language constructs to cause immediate termination of a script being executed.\r\n    /// </summary>\r\n    [Serializable]\r\n    public class ScriptDiedException : ApplicationException\r\n    {\r\n        internal ScriptDiedException(object status)\r\n        {\r\n            this.status = status;\r\n        }\r\n\r\n        internal ScriptDiedException() : this(255) { }\r\n\r\n        public object Status { get { return status; } set { status = value; } }\r\n        private object status;\r\n\r\n        #region Serializable\r\n\r\n#if !SILVERLIGHT\r\n\r\n        public ScriptDiedException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n            if (info != null)\r\n            {\r\n                this.Status = info.GetValue(\"Status\", typeof(object));\r\n            }\r\n\r\n        }\r\n\r\n        [System.Security.SecurityCritical]\r\n        public override void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            base.GetObjectData(info, context);\r\n\r\n            if (info != null)\r\n            {\r\n                info.AddValue(\"Status\", Status);\r\n            }\r\n        }\r\n#endif\r\n\r\n        #endregion\r\n\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown when user attempts to create two types with same name in one assembly.\r\n    /// </summary>\r\n    internal class DuplicateTypeNames : ApplicationException\r\n    {\r\n        public DuplicateTypeNames(string name)\r\n        {\r\n            this.name = name;\r\n        }\r\n\r\n        public readonly string name;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown when an unexpected exception is thrown during a script execution.\r\n    /// </summary>\r\n    [Serializable]\r\n    public class PhpNetInternalException : ApplicationException\r\n    {\r\n        internal PhpNetInternalException(string message, Exception inner) : base(message, inner) { }\r\n#if !SILVERLIGHT\r\n        protected PhpNetInternalException(SerializationInfo info, StreamingContext context) : base(info, context) { }\r\n#endif\r\n\r\n        /// <summary>\r\n        /// Exception details. Contains also details of <see cref=\"Exception.InnerException\"/> to pass this into event logs.\r\n        /// </summary>\r\n        public override string Message\r\n        {\r\n            get\r\n            {\r\n                StringBuilder result = new StringBuilder(base.Message);\r\n\r\n                //for (var ex = this.InnerException; ex != null; ex = ex.InnerException)\r\n                var ex = this.InnerException;\r\n                if (ex != null)\r\n                {\r\n                    result.AppendLine();\r\n                    result.AppendFormat(\"InnerException: {0}\\nat {1}\\n\", ex.Message, ex.StackTrace);\r\n                }\r\n\r\n                return result.ToString();\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Holder for an instance of <see cref=\"Library.SPL.Exception\"/>.\r\n    /// For internal purposes only.\r\n    /// </summary>\r\n    public class PhpUserException : ApplicationException\r\n    {\r\n        public readonly Library.SPL.Exception UserException;\r\n\r\n        public PhpUserException(Library.SPL.Exception inner)\r\n            : base(Convert.ObjectToString(inner.getMessage(ScriptContext.CurrentContext)))\r\n        {\r\n            UserException = inner;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// An implementation of a method doesn't behave correctly.\r\n    /// </summary>\r\n    public class InvalidMethodImplementationException : ApplicationException\r\n    {\r\n        public InvalidMethodImplementationException(string methodName)\r\n            : base(CoreResources.GetString(\"invalid_method_implementation\", methodName))\r\n        { }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Execution.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing System.Security;\r\n\r\n#if !SILVERLIGHT\r\nusing System.Web.Configuration;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Provides functionality related to process execution.\r\n\t/// </summary>\r\n\tpublic class Execution\r\n\t{\r\n\t\tprivate Execution() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// How to handle external process output.\r\n\t\t/// </summary>\r\n\t\tpublic enum OutputHandling\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Split the result into lines and add them to the specified collection.\r\n\t\t\t/// </summary>\r\n\t\t\tArrayOfLines,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Return entire output as a string.\r\n\t\t\t/// </summary>\r\n\t\t\tString,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Write each line to the current output and flush the output after each line.\r\n\t\t\t/// </summary>\r\n\t\t\tFlushLinesToScriptOutput,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Redirect all output to binary sink of the current output.\r\n\t\t\t/// </summary>\r\n\t\t\tRedirectToScriptOutput\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Executes a <c>cmd.exe</c> and passes it a specified command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to be passed.</param>\r\n\t\t/// <returns>A string containing the entire output.</returns>\r\n\t\t/// <remarks>Implements backticks operator (i.e. <code>`command`</code>).</remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static string ShellExec(string command)\r\n\t\t{\r\n\t\t\tstring result;\r\n\t\t\tShellExec(command, OutputHandling.String, null, out result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a <c>cmd.exe</c> and passes it a specified command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to be passed.</param>\r\n\t\t/// <param name=\"handling\">How to handle the output.</param>\r\n\t\t/// <param name=\"arrayOutput\">\r\n\t\t/// A list where output lines will be added if <paramref name=\"handling\"/> is <see cref=\"OutputHandling.ArrayOfLines\"/>.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"stringOutput\">\r\n\t\t/// A string containing the entire output in if <paramref name=\"handling\"/> is <see cref=\"OutputHandling.String\"/>\r\n\t\t/// or the last line of the output if <paramref name=\"handling\"/> is <see cref=\"OutputHandling.ArrayOfLines\"/> or\r\n\t\t/// <see cref=\"OutputHandling.FlushLinesToScriptOutput\"/>. \r\n\t\t/// </param>\r\n\t\t/// <returns>Exit code of the process.</returns>\r\n\t\tpublic static int ShellExec(string command, OutputHandling handling, IList arrayOutput, out string stringOutput)\r\n\t\t{\r\n\t\t\tif (!MakeCommandSafe(ref command))\r\n\t\t\t{\r\n\t\t\t\tstringOutput = \"\";\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\r\n\t\t\tusing (Process p = new Process())\r\n\t\t\t{\r\n                IdentitySection identityConfig = null;\r\n\r\n                try { identityConfig = WebConfigurationManager.GetSection(\"system.web/identity\") as IdentitySection; }\r\n                catch { }\r\n\r\n                if (identityConfig != null)\r\n                {\r\n                    p.StartInfo.UserName = identityConfig.UserName;\r\n                    if (identityConfig.Password != null)\r\n                    {\r\n                        p.StartInfo.Password = new SecureString();\r\n                        foreach (char c in identityConfig.Password) p.StartInfo.Password.AppendChar(c);\r\n                        p.StartInfo.Password.MakeReadOnly();\r\n                    }                    \r\n                }\r\n\r\n\t\t\t\tp.StartInfo.FileName = \"cmd.exe\";\r\n\t\t\t\tp.StartInfo.Arguments = \"/c \" + command;\r\n\t\t\t\tp.StartInfo.UseShellExecute = false;\r\n\t\t\t\tp.StartInfo.CreateNoWindow = true;\r\n\t\t\t\tp.StartInfo.RedirectStandardOutput = true;\r\n\t\t\t\tp.Start();\r\n\r\n\t\t\t\tstringOutput = null;\r\n\t\t\t\tswitch (handling)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase OutputHandling.String:\r\n\t\t\t\t\t\tstringOutput = p.StandardOutput.ReadToEnd();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase OutputHandling.ArrayOfLines:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstring line;\r\n\t\t\t\t\t\t\twhile ((line = p.StandardOutput.ReadLine()) != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tstringOutput = line;\r\n\t\t\t\t\t\t\t\tif (arrayOutput != null) arrayOutput.Add(line);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase OutputHandling.FlushLinesToScriptOutput:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\t\t\t\t\tstring line;\r\n\t\t\t\t\t\t\twhile ((line = p.StandardOutput.ReadLine()) != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tstringOutput = line;\r\n\t\t\t\t\t\t\t\tcontext.Output.WriteLine(line);\r\n\t\t\t\t\t\t\t\tcontext.Output.Flush();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase OutputHandling.RedirectToScriptOutput:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\t\t\t\t\tbyte[] buffer = new byte[1024];\r\n\t\t\t\t\t\t\tint count;\r\n\t\t\t\t\t\t\twhile ((count = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcontext.OutputStream.Write(buffer, 0, count);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tp.WaitForExit();\r\n\r\n\t\t\t\treturn p.ExitCode;\r\n\t\t\t}\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Escape shell metacharacters in a specified shell command.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">The command to excape.</param>\r\n\t\t/// <para>\r\n\t\t/// On Windows platform, each occurance of a character that might be used to trick a shell command\r\n\t\t/// is replaced with space. These characters are \r\n\t\t/// <c>\", ', #, &amp;, ;, `, |, *, ?, ~, &lt;, &gt;, ^, (, ), [, ], {, }, $, \\, \\u000A, \\u00FF, %</c>.\r\n\t\t/// </para>\r\n\t\tpublic static string EscapeCommand(string command)\r\n\t\t{\r\n\t\t\tif (command == null) return String.Empty;\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder(command);\r\n\r\n\t\t\t// GENERICS:\r\n\t\t\t//\t\t\tif (Environment.OSVersion.Platform!=PlatformID.Unix)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < sb.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (sb[i])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase '\"':\r\n\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\tcase '#':\r\n\t\t\t\t\t\tcase '&':\r\n\t\t\t\t\t\tcase ';':\r\n\t\t\t\t\t\tcase '`':\r\n\t\t\t\t\t\tcase '|':\r\n\t\t\t\t\t\tcase '*':\r\n\t\t\t\t\t\tcase '?':\r\n\t\t\t\t\t\tcase '~':\r\n\t\t\t\t\t\tcase '<':\r\n\t\t\t\t\t\tcase '>':\r\n\t\t\t\t\t\tcase '^':\r\n\t\t\t\t\t\tcase '(':\r\n\t\t\t\t\t\tcase ')':\r\n\t\t\t\t\t\tcase '[':\r\n\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\tcase '{':\r\n\t\t\t\t\t\tcase '}':\r\n\t\t\t\t\t\tcase '$':\r\n\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\tcase '\\u000A':\r\n\t\t\t\t\t\tcase '\\u00FF':\r\n\t\t\t\t\t\tcase '%':\r\n\t\t\t\t\t\t\tsb[i] = ' ';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//      else\r\n\t\t\t//      {\r\n\t\t\t//        // ???\r\n\t\t\t//        PhpException.FunctionNotSupported();\r\n\t\t\t//      } \r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes command safe in similar way PHP does.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"command\">Potentially unsafe command.</param>\r\n\t\t/// <returns>Safe command.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If safe mode is enabled, command is split by the first space into target path \r\n\t\t/// and arguments (optionally) components. The target path must not contain '..' substring.\r\n\t\t/// A file name is extracted from the target path and combined with \r\n\t\t/// <see cref=\"GlobalConfiguration.SafeModeSection.ExecutionDirectory\"/>.\r\n\t\t/// The resulting path is checked for invalid path characters (Phalanger specific).\r\n\t\t/// Finally, arguments are escaped by <see cref=\"EscapeCommand\"/> and appended to the path.\r\n\t\t/// If safe mode is disabled, the command remains unchanged.\r\n\t\t/// </remarks>\r\n\t\tpublic static bool MakeCommandSafe(ref string command)\r\n\t\t{\r\n\t\t\tif (command == null) return false;\r\n#if SILVERLIGHT\r\n\t\t\treturn true;\r\n#else\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\r\n\t\t\tif (!global.SafeMode.Enabled) return true;\r\n\r\n\t\t\tint first_space = command.IndexOf(' ');\r\n\t\t\tif (first_space == -1) first_space = command.Length;\r\n\r\n\t\t\tif (command.IndexOf(\"..\", 0, first_space) >= 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, \"dotdot_not_allowed_in_path\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstring file_name = Path.GetFileName(command.Substring(0, first_space));\r\n\t\t\t\tstring target_path = Path.Combine(global.SafeMode.ExecutionDirectory, file_name);\r\n\r\n\t\t\t\t// <execution directory>/<file name> <escaped arguments>\r\n\t\t\t\tcommand = String.Concat(target_path, EscapeCommand(command.Substring(first_space)));\r\n\t\t\t}\r\n\t\t\tcatch (ArgumentException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, \"path_contains_invalid_characters\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n#endif\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Functions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Threading;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Delegates\r\n\r\n\t/// <summary>\r\n\t/// A delegate used to call functions and methods indirectly.\r\n\t/// </summary>\r\n\t[Emitted]\r\n\tpublic delegate object RoutineDelegate(object instance, PhpStack/*!*/ stack);\r\n\r\n\t/// <summary>\r\n    /// The delegate to the Script's Main helper method.\r\n    /// </summary>\r\n    /// <param name=\"context\">A script context.</param>\r\n    /// <param name=\"localVariables\">A table of defined variables.</param>\r\n    /// <param name=\"self\">PHP object context.</param>\r\n    /// <param name=\"includer\">PHP class context.</param>\r\n    /// <param name=\"isMain\">Whether the target script is the main script.</param>\r\n    /// <returns>The return value of the Main method.</returns>\r\n    [Emitted]\r\n\tpublic delegate object MainRoutineDelegate(ScriptContext/*!*/ context, Dictionary<string, object> localVariables,\r\n\t\tDObject self, DTypeDesc includer, bool isMain);\r\n\r\n\t[Emitted]\r\n\tpublic delegate object GetterDelegate(object instance);\r\n\r\n\t[Emitted]\r\n\tpublic delegate void SetterDelegate(object instance, object value);\r\n\r\n\t#endregion\r\n\r\n\t#region Default Argument Substitute\r\n\r\n\t/// <summary>\r\n\t/// Substitutes for default arguments and default type arguments.\r\n\t/// </summary>\r\n\tpublic static class Arg\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Default type argument.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly DTypeDesc/*!*/ DefaultType = DTypeDesc.Create(typeof(Arg));\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton substituting default argument.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpReference/*!*/ Default = new PhpReference();\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpFunctionUtils\r\n\r\n\t/// <summary>\r\n\t/// Provides means to work with PHP functions and methods.\r\n\t/// </summary>\r\n\tpublic sealed class PhpFunctionUtils\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// SpecialName should be here, but unfortunately CLR blocks it :(\r\n\t\t/// </summary>\r\n\t\tinternal const MethodAttributes DynamicStubAttributes = MethodAttributes.Public | MethodAttributes.Static;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assumed maximal number of overloads in all libraries.\r\n\t\t/// </summary>\r\n\t\tinternal const int AssumedMaxOverloadCount = 10;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a mandatory parameter is passed by alias.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"paramType\">The parameter type.</param>\r\n\t\t/// <returns>\r\n\t\t/// Returns whether the parameter is passed either by object reference (ref/out) or is <see cref=\"PhpReference\"/>.\r\n\t\t/// </returns>\r\n\t\tinternal static bool IsParameterByAlias(Type/*!*/ paramType)\r\n\t\t{\r\n\t\t\treturn paramType.IsByRef || paramType == typeof(PhpReference);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflects a CLR method representing user routine and extracts information about the signature.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">GetUserEntryPoint info.</param>\r\n\t\t/// <param name=\"parameters\">Parameter infos.</param>\r\n\t\t/// <returns>Count of mandatory parameters.</returns>\r\n\t\tinternal static RoutineSignature GetUserRoutineSignature(MethodInfo/*!*/ method, ParameterInfo[]/*!*/ parameters)\r\n\t\t{\r\n\t\t\t// TODO:\r\n\t\t\treturn null;\r\n\r\n\t\t\t//// static methods has one hidden argument - the script context:\r\n\t\t\t//int hidden_count = method.IsStatic ? 1 : 0;\r\n\t\t\t//int param_count = parameters.Length - hidden_count;\r\n\r\n\t\t\t//Debug.Assert(param_count >= 0);\r\n\t\t\t//Debug.Assert(hidden_count==0 || parameters[0].ParameterType == typeof(ScriptContext));\r\n\r\n\t\t\t//int last_mandatory_param_index = -1;\r\n\t\t\t//BitArray alias_mask = new BitArray(param_count, false);\r\n\t\t\t//GenericQualifiedName[] type_hints = new GenericQualifiedName[param_count];\r\n\r\n\t\t\t//int j = 0;\r\n\t\t\t//for (int i = hidden_count; i < parameters.Length; i++, j++)\r\n\t\t\t//{\r\n\t\t\t//  // mandatory:\r\n\t\t\t//  if (!parameters[i].IsOptional) \r\n\t\t\t//    last_mandatory_param_index = j;\r\n\r\n\t\t\t//  // alias:\r\n\t\t\t//  if (parameters[i].ParameterType == typeof(PhpReference))\r\n\t\t\t//    alias_mask[j] = true;\r\n\r\n\t\t\t//  // type hint:\r\n\t\t\t//  object[] attrs = parameters[i].GetCustomAttributes(typeof(TypeHintAttribute), false);\r\n\t\t\t//  if (attrs.Length > 0) // TODO\r\n\t\t\t//    type_hints[j] = new GenericQualifiedName(new QualifiedName(new Name(((TypeHintAttribute)attrs[0]).TypeName)), null);  \r\n\t\t\t//}\r\n\r\n\t\t\t//return new RoutineSignature(\r\n\t\t\t//  method.ReturnType == Emit.Types.PhpReference[0],\r\n\t\t\t//  alias_mask,\r\n\t\t\t//  type_hints,\r\n\t\t\t//  last_mandatory_param_index + 1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified library function implies args-aware property of the calling function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the function.</param>\r\n\t\t/// <returns>Whether call to function <paramref name=\"name\"/> implies args-awareness of the caller.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">If <paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\tinternal static bool ImpliesArgsAwareness(Name name)\r\n\t\t{\r\n\t\t\t// TODO\r\n\t\t\treturn false;\r\n\t\t\t// library table lookup (std: func_get_arg, func_get_args, func_num_args):\r\n\t\t\t// return (Functions.GetFunctionImplOptions(name) & FunctionImplOptions.NeedsFunctionArguments)!=0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified library function needs defined variables to be passed as its first argument.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the function.</param>\r\n\t\t/// <returns>Whether call to function <paramref name=\"name\"/> implies args-awareness of the caller.</returns>\r\n\t\tinternal static bool NeedsDefinedVariables(Name name)\r\n\t\t{\r\n\t\t\t// TODO\r\n\t\t\treturn false;\r\n\t\t\t// library table lookup (std: extract, compact, get_defined_vars, import_request_variables):\r\n\t\t\t//  return (Functions.GetFunctionImplOptions(name) & FunctionImplOptions.NeedsVariables) != 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified name is valid constant name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name.</param>\r\n\t\t/// <seealso cref=\"PhpVariable.IsValidName\"/>\r\n\t\tpublic static bool IsValidName(string name)\r\n\t\t{\r\n\t\t\t// TODO: qualified names are valid as well\r\n\t\t\treturn PhpVariable.IsValidName(name);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Checks whether function name is conditionally defined.\r\n        /// </summary>\r\n        /// <param name=\"realName\">Internal name of the function.</param>\r\n        /// <returns>True if the function name represents conditionally defined function, otherwise false.</returns>\r\n        public static bool IsRealConditionalDefinition(string/*!*/ realName)\r\n        {\r\n            return realName.IndexOf('#') > 0;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a specified method is an arg-less stub.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The method.</param>\r\n\t\t/// <param name=\"parameters\">GetUserEntryPoint parameters (optimization). Can be <B>null</B> reference.</param>\r\n\t\t/// <returns>Whether a specified method is an arg-less stub.</returns>\r\n\t\tinternal static bool IsArglessStub(MethodInfo/*!*/ method, ParameterInfo[] parameters)\r\n\t\t{\r\n\t\t\tDebug.Assert(method != null);\r\n\r\n\t\t\tif (method.ReturnType == Emit.Types.Object[0])\r\n\t\t\t{\r\n\t\t\t\tif (parameters == null) parameters = method.GetParameters();\r\n\t\t\t\treturn (parameters.Length == 2 &&\r\n\t\t\t\t\tparameters[0].ParameterType == Emit.Types.Object[0] &&\r\n\t\t\t\t\tparameters[1].ParameterType == Emit.Types.PhpStack[0]);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a specified method is an arg-full overload.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The method.</param>\r\n\t\t/// <param name=\"parameters\">GetUserEntryPoint parameters (optimization). Can be <B>null</B> reference.</param>\r\n\t\t/// <returns>Whether a specified method is an arg-full overload.</returns>\r\n\t\tinternal static bool IsArgfullOverload(MethodInfo/*!*/ method, ParameterInfo[] parameters)\r\n\t\t{\r\n\t\t\tDebug.Assert(method != null);\r\n\r\n\t\t\tType type = method.ReturnType;\r\n\t\t\tif (type != Emit.Types.Object[0] && type != Emit.Types.PhpReference[0]) return false;\r\n\r\n\t\t\t// argfulls should have either EditorBrowsable or ImplementsMethod\r\n\t\t\t// (on Silverlight the 'EditorBrowsable' is not supported)\r\n#if !SILVERLIGHT\r\n\t\t\tif (!method.IsDefined(Emit.Types.EditorBrowsableAttribute, false) &&\r\n\t\t\t\t!method.IsDefined(Emit.Types.ImplementsMethodAttribute, false)) return false;\r\n#endif\r\n\r\n\t\t\t// check parameters\r\n\t\t\tif (parameters == null) parameters = method.GetParameters();\r\n\t\t\tif (parameters.Length == 0 || parameters[0].ParameterType != Emit.Types.ScriptContext[0]) return false;\r\n\r\n\t\t\tbool past_gen_params = false;\r\n\t\t\tfor (int i = 1; i < parameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\ttype = parameters[i].ParameterType;\r\n\t\t\t\tif (type != Emit.Types.Object[0] && type != Emit.Types.PhpReference[0])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (past_gen_params || type != Emit.Types.DTypeDesc[0]) return false;\r\n\t\t\t\t}\r\n\t\t\t\telse past_gen_params = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#region Routines Enumeration\r\n\r\n\t\t// GENERICS: iterator (filter)\r\n\r\n\t\tinternal delegate void RoutineEnumCallback(MethodInfo/*!*/ argless, MethodInfo/*!*/ argfull,\r\n\t\t  ParameterInfo[]/*!*/ parameters);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumerates PHP routines contained in the specified method list. Filters out methods that\r\n\t\t/// didn't implement PHP routines (they are not argless or argfull overloads).\r\n\t\t/// </summary>\r\n\t\tinternal static void EnumerateRoutines(MethodInfo[]/*!*/ methods, RoutineEnumCallback/*!*/ callback)\r\n\t\t{\r\n\t\t\t// TODO: can be done in a better way\r\n\r\n\t\t\tDictionary<string, MethodInfo> arg_less_table = new Dictionary<string, MethodInfo>(\r\n\t\t\t  methods.Length / 2, // at most one half of all methods are supposed to be user routines\r\n\t\t\t  StringComparer.OrdinalIgnoreCase);\r\n\r\n\t\t\t// adds arg-less overloads to the hashtable:\r\n\t\t\tforeach (MethodInfo method in methods)\r\n\t\t\t{\r\n\t\t\t\tif (PhpFunctionUtils.IsArglessStub(method, null))\r\n\t\t\t\t\targ_less_table[method.Name] = method;\r\n\t\t\t}\r\n\r\n\t\t\t// searches for matching argfulls:\r\n\t\t\tforeach (MethodInfo method in methods)\r\n\t\t\t{\r\n\t\t\t\tParameterInfo[] parameters = method.GetParameters();\r\n\r\n\t\t\t\t// skips arg-less overloads:\r\n\t\t\t\tif (PhpFunctionUtils.IsArglessStub(method, parameters))\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t// skips methods that hasn't a matching arg-less overload:\r\n\t\t\t\tMethodInfo argless;\r\n\t\t\t\tif (!arg_less_table.TryGetValue(method.Name, out argless))\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t// yields the pair:\r\n\t\t\t\tcallback(argless, method, parameters);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        ///// <summary>\r\n        ///// Invokes a user method (either argless or argfull).\r\n        ///// </summary>\r\n        ///// <param name=\"method\">A method info of the stub.</param>\r\n        ///// <param name=\"target\">An object.</param>\r\n        ///// <param name=\"args\">Arguments.</param>\r\n        ///// <returns>The result of the called method.</returns>\r\n        ///// <exception cref=\"PhpException\">Fatal error.</exception>\r\n        ///// <exception cref=\"PhpUserException\">Uncaught user exception.</exception>\r\n        ///// <exception cref=\"ScriptDiedException\">Script died or exit.</exception>\r\n        ///// <exception cref=\"TargetInvocationException\">An internal error thrown by the target.</exception>\r\n        //internal static object Invoke(MethodInfo method, object target, params object[] args)\r\n        //{\r\n        //    Debug.Assert(method != null && args != null);\r\n\r\n        //    try\r\n        //    {\r\n        //        return method.Invoke(target, args);\r\n        //    }\r\n        //    catch (TargetInvocationException e)\r\n        //    {\r\n        //        if (e.InnerException is PhpException ||\r\n        //            e.InnerException is PhpUserException ||\r\n        //            e.InnerException is ScriptDiedException ||\r\n        //            e.InnerException is System.Threading.ThreadAbortException)\r\n        //            throw e.InnerException;\r\n\r\n        //        throw;\r\n        //    }\r\n        //}\r\n\r\n        #region Constructor invocation\r\n\r\n        ///// <summary>\r\n        ///// Creates a new instance of a type by invoking its constructor.\r\n        ///// </summary>\r\n        ///// <param name=\"type\">The type to instantiate.</param>\r\n        ///// <param name=\"args\">Arguments.</param>\r\n        ///// <returns>The result of the called method.</returns>\r\n        ///// <exception cref=\"PhpException\">Fatal error.</exception>\r\n        ///// <exception cref=\"PhpUserException\">Uncaught user exception.</exception>\r\n        ///// <exception cref=\"ScriptDiedException\">Script died or exit.</exception>\r\n        ///// <exception cref=\"TargetInvocationException\">An internal error thrown by the target.</exception>\r\n        //internal static DObject InvokeConstructor(DTypeDesc type, params object[] args)\r\n        //{\r\n        //    Debug.Assert(type != null && args != null);\r\n\r\n        //    try\r\n        //    {\r\n        //        return ClrObject.Wrap(Activator.CreateInstance(type.RealType, args));\r\n        //    }\r\n        //    catch (TargetInvocationException e)\r\n        //    {\r\n        //        if (e.InnerException is PhpException ||\r\n        //            e.InnerException is PhpUserException ||\r\n        //            e.InnerException is ScriptDiedException ||\r\n        //            e.InnerException is System.Threading.ThreadAbortException)\r\n        //            throw e.InnerException;\r\n\r\n        //        throw;\r\n        //    }\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of a type by invoking its constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type to instantiate.</param>\r\n        /// <param name=\"context\">ScriptContext to be passed to the <c>type</c> constructor.</param>\r\n        /// <param name=\"newInstance\">Bool to be passed to the <c>type</c> constructor.</param>\r\n\t\t/// <returns>New instance of <c>type</c> created using specified constructor.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Fatal error.</exception>\r\n\t\t/// <exception cref=\"PhpUserException\">Uncaught user exception.</exception>\r\n\t\t/// <exception cref=\"ScriptDiedException\">Script died or exit.</exception>\r\n\t\t/// <exception cref=\"TargetInvocationException\">An internal error thrown by the target.</exception>\r\n\t\tinternal static DObject InvokeConstructor(DTypeDesc/*!*/type, ScriptContext context, bool newInstance)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null);\r\n\t\t\t\r\n\t\t\ttry\r\n\t\t\t{\r\n                var newobj = type.RealTypeCtor_ScriptContext_Bool;\r\n                if (newobj == null)\r\n                    lock (type)\r\n                        if ((newobj = type.RealTypeCtor_ScriptContext_Bool) == null)\r\n                        {\r\n                            // emit the type creation:\r\n                            newobj = type.RealTypeCtor_ScriptContext_Bool = (DTypeDesc.Ctor_ScriptContext_Bool)BuildNewObj<DTypeDesc.Ctor_ScriptContext_Bool>(type.RealType, Emit.Types.ScriptContext_Bool);\r\n                        }\r\n\r\n\t\t\t\treturn ClrObject.Wrap(newobj(context, newInstance));\r\n\t\t\t}\r\n\t\t\tcatch (TargetInvocationException e)\r\n\t\t\t{\r\n\t\t\t\tif (e.InnerException is PhpException ||\r\n\t\t\t\t\te.InnerException is PhpUserException ||\r\n\t\t\t\t\te.InnerException is ScriptDiedException ||\r\n\t\t\t\t\te.InnerException is System.Threading.ThreadAbortException)\r\n\t\t\t\t\tthrow e.InnerException;\r\n\r\n\t\t\t\tthrow;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of a type by invoking its constructor.\r\n        /// </summary>\r\n        /// <param name=\"type\">The type to instantiate.</param>\r\n        /// <param name=\"context\">ScriptContext to be passed to the <c>type</c> constructor.</param>\r\n        /// <param name=\"caller\">DTypeDesc to be passed to the <c>type</c> constructor.</param>\r\n        /// <returns>New instance of <c>type</c> created using specified constructor.</returns>\r\n        /// <exception cref=\"PhpException\">Fatal error.</exception>\r\n        /// <exception cref=\"PhpUserException\">Uncaught user exception.</exception>\r\n        /// <exception cref=\"ScriptDiedException\">Script died or exit.</exception>\r\n        /// <exception cref=\"TargetInvocationException\">An internal error thrown by the target.</exception>\r\n        internal static DObject InvokeConstructor(DTypeDesc/*!*/type, ScriptContext context, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(type != null);\r\n\r\n            try\r\n            {\r\n                var newobj = type.RealTypeCtor_ScriptContext_DTypeDesc;\r\n                if (newobj == null)\r\n                    lock(type)\r\n                        if ((newobj = type.RealTypeCtor_ScriptContext_DTypeDesc) == null)\r\n                        {\r\n                            // emit the type creation:\r\n                            newobj = type.RealTypeCtor_ScriptContext_DTypeDesc = (DTypeDesc.Ctor_ScriptContext_DTypeDesc)BuildNewObj<DTypeDesc.Ctor_ScriptContext_DTypeDesc>(type.RealType, Emit.Types.ScriptContext_DTypeDesc);\r\n                        }\r\n                \r\n                return ClrObject.Wrap(newobj(context, caller));\r\n            }\r\n            catch (TargetInvocationException e)\r\n            {\r\n                if (e.InnerException is PhpException ||\r\n                    e.InnerException is PhpUserException ||\r\n                    e.InnerException is ScriptDiedException ||\r\n                    e.InnerException is System.Threading.ThreadAbortException)\r\n                    throw e.InnerException;\r\n\r\n                throw;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create dynamic method that instantiates given <c>realType</c> using constructor with given <c>types</c>.\r\n        /// If given <c>realType</c> does not define wanted constructor, dynamic method that throws InvalidOperationException is created.\r\n        /// </summary>\r\n        /// <typeparam name=\"D\">The typed delegate the create.</typeparam>\r\n        /// <param name=\"realType\">The type to be instantiated by dynamic method.</param>\r\n        /// <param name=\"types\">Types of parameters of wanted constructor to be called.</param>\r\n        /// <returns>Delegate to dynamic method that creates specified type or throws an exception. The method cannot return null.</returns>\r\n        private static Delegate/*!*/BuildNewObj<D>(Type/*!*/realType, Type[] types) where D : class\r\n        {\r\n            Debug.Assert(realType != null);\r\n\r\n            ConstructorInfo ctor_info = realType.GetConstructor(\r\n                        BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,\r\n                        null, types, null);\r\n\r\n            DynamicMethod method = new DynamicMethod(string.Format(\"<{0}>.ctor\", realType.Name), Emit.Types.Object[0], types);\r\n            Emit.ILEmitter il = new PHP.Core.Emit.ILEmitter(method);\r\n\r\n            if (ctor_info != null)\r\n            {\r\n                // new T(arg1, arg2, ...);\r\n                for (int i = 0; i < types.Length; ++i)\r\n                    il.Ldarg(i);\r\n                il.Emit(OpCodes.Newobj, ctor_info);\r\n            }\r\n            else\r\n            {\r\n                var invalid_ctor = typeof(InvalidOperationException).GetConstructor(Type.EmptyTypes);\r\n                Debug.Assert(invalid_ctor != null);\r\n\r\n                // new InvalidOperationException();\r\n                il.Emit(OpCodes.Newobj, invalid_ctor);\r\n            }\r\n\r\n            // return\r\n            il.Emit(OpCodes.Ret);\r\n\r\n            //\r\n            return method.CreateDelegate(typeof(D));\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/GlobalVariables.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\nusing System.Collections.Specialized;\r\nusing System.Reflection;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Declares auto-global variables stored in the script context.\r\n\t/// </summary>\r\n\tpublic sealed class AutoGlobals\r\n\t{\r\n\t\tinternal const int EgpcsCount = 5;\r\n\t\tinternal const int MaxCount = 9;\r\n\t\tinternal const int EstimatedUserGlobalVariableCount = 15;\r\n\r\n\t\t#region Enumeration\r\n\r\n\t\t/// <summary>\r\n\t\t/// File upload errors.\r\n\t\t/// </summary>\r\n\t\tpublic enum PostedFileError\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// No error.\r\n\t\t\t/// </summary>\r\n\t\t\tNone,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The uploaded file exceeds the \"upload_max_filesize\" configuration option. Not supported.\r\n\t\t\t/// Request is not processed when exceeding maximal size of posted file set in ASP.NET config.\r\n\t\t\t/// </summary>\r\n\t\t\tSizeExceededOnServer,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The uploaded file exceeds the \"MAX_FILE_SIZE\" value specified in the form. Not supported.\r\n\t\t\t/// </summary>\r\n\t\t\tSizeExceededOnClient,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The uploaded file was only partially uploaded. Not supported.\r\n\t\t\t/// </summary>\r\n\t\t\tPartial,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// No file was uploaded.\r\n\t\t\t/// </summary>\r\n\t\t\tNoFile\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// <para>\r\n\t\t/// If server context is available contains server variables ($_SERVER).\r\n\t\t/// Moreover, it contains <c>PHP_SELF</c> - a virtual path to the executing script and\r\n\t\t/// if <see cref=\"GlobalConfiguration.GlobalVariablesSection.RegisterArgcArgv\"/> is set it contains also\r\n\t\t/// <c>argv</c> (an array containing a query string as its one and only element) and \r\n\t\t/// <c>argc</c> which is set to zero.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// If server context is not available contains empty array (unlike PHP which does fill it with <see cref=\"Env\"/>\r\n\t\t/// and then adds some empty items).\r\n\t\t/// </para>\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Server = new PhpReference();\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Environment variables ($_ENV).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Env = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global variables ($GLOBALS). \r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Globals = new PhpReference();\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Request variables ($_REQUEST) copied from $_GET, $_POST and $_COOKIE arrays.\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Request = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Variables passed by HTTP GET method ($_GET).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Get = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Variables passed by HTTP POST method ($_POST).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Post = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Cookies ($_COOKIE).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Cookie = new PhpReference();\r\n\r\n        /// <summary>\r\n        /// Raw POST data ($HTTP_RAW_POST_DTA). Equivalent to file_get_contents(\"php://input\").\r\n        /// </summary>\r\n        public PhpReference/*!*/ HttpRawPostData = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Uploaded files information ($_FILES).\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Files = new PhpReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session variables ($_SESSION). Initialized on session start.\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Session = new PhpReference();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variable Addition\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a variable to auto-global array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array.</param>\r\n\t\t/// <param name=\"name\">A unparsed name of variable.</param>\r\n\t\t/// <param name=\"value\">A value to be added.</param>\r\n\t\t/// <param name=\"subname\">A name of intermediate array inserted before the value.</param>\r\n\t\tprivate static void AddVariable(\r\n\t\t  PhpArray/*!*/ array,\r\n\t\t  string name,\r\n\t\t  object value,\r\n\t\t  string subname)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"array\");\r\n\t\t\tif (name == null)\r\n\t\t\t\tname = String.Empty;\r\n\r\n            string key;\r\n\r\n\t\t\t// current left and right square brace positions:\r\n\t\t\tint left, right;\r\n\r\n\t\t\t// checks pattern {var_name}[{key1}][{key2}]...[{keyn}] where var_name is [^[]* and keys are [^]]*:\r\n\t\t\tleft = name.IndexOf('[');\r\n\t\t\tif (left > 0 && left < name.Length - 1 && (right = name.IndexOf(']', left + 1)) >= 0)\r\n\t\t\t{\r\n\t\t\t\t// the variable name is a key to the \"array\", dots are replaced by underscores in top-level name:\r\n                key = EncodeTopLevelName(name.Substring(0, left));\r\n\r\n\t\t\t\t// ensures that all [] operators in the chain except for the last one are applied on an array:\r\n\t\t\t\tfor (;;)\r\n\t\t\t\t{\r\n\t\t\t\t\t// adds a level keyed by \"key\":\r\n\t\t\t\t\tarray = Operators.EnsureItemIsArraySimple(array, key);\r\n\r\n\t\t\t\t\t// adds a level keyed by \"subname\" (once only):\r\n\t\t\t\t\tif (subname != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarray = Operators.EnsureItemIsArraySimple(array, subname);\r\n\t\t\t\t\t\tsubname = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// next key:\r\n\t\t\t\t\tkey = name.Substring(left + 1, right - left - 1);\r\n\r\n\t\t\t\t\t// breaks if ']' is not followed by '[':\r\n\t\t\t\t\tleft = right + 1;\r\n\t\t\t\t\tif (left == name.Length || name[left] != '[') break;\r\n\r\n\t\t\t\t\t// the next right brace:\r\n\t\t\t\t\tright = name.IndexOf(']', left + 1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (key.Length > 0)\r\n\t\t\t\t\tarray.SetArrayItem(key, value);\r\n\t\t\t\telse\r\n\t\t\t\t\tarray.Add(value);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// no array pattern in variable name, \"name\" is a top-level key:\r\n                name = EncodeTopLevelName(name);\r\n\r\n\t\t\t\t// inserts a subname on the next level:\r\n\t\t\t\tif (subname != null)\r\n\t\t\t\t\tOperators.EnsureItemIsArraySimple(array, name)[subname] = value;\r\n\t\t\t\telse\r\n\t\t\t\t\tarray[name] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Fixes top level variable name to not contain spaces and dots (as it is in PHP);\r\n        /// </summary>\r\n        private static string EncodeTopLevelName(string/*!*/name)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            return name.Replace('.', '_').Replace(' ', '_');\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns <see cref=\"HttpUtility.UrlDecode\"/>  of <paramref name=\"value\"/> if it is a string.\r\n        /// </summary>\r\n        private static string UrlDecodeValue(string value)\r\n        {\r\n            return HttpUtility.UrlDecode(value, Configuration.Application.Globalization.PageEncoding);\r\n        }\r\n\r\n        //private static object GpcEncodeValue(object value, LocalConfiguration config)\r\n        //{\r\n        //    if (value != null && value.GetType() == typeof(string))\r\n        //    {\r\n        //         // url-decodes the values: (COOKIES ONLY)\r\n        //        string svalue = HttpUtility.UrlDecode((string)value, Configuration.Application.Globalization.PageEncoding);\r\n\r\n        //        // quotes the values:\r\n        //        if (Configuration.Global.GlobalVariables.QuoteGpcVariables)\r\n        //        {\r\n        //            if (config.Variables.QuoteInDbManner)\r\n        //                svalue = StringUtils.AddDbSlashes(svalue);\r\n        //            svalue = StringUtils.AddCSlashes(svalue, true, true);\r\n        //        }\r\n\r\n        //        //\r\n        //        value = svalue;\r\n        //    }\r\n\r\n        //    return value;\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds variables from one auto-global array to another.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dst\">The target array.</param>\r\n\t\t/// <param name=\"src\">The source array.</param>\r\n\t\t/// <remarks>Variable values are deeply copied.</remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"dst\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"src\"/> is a <B>null</B> reference.</exception>\r\n\t\tprivate static void AddVariables(PhpArray/*!*/ dst, PhpArray/*!*/ src)\r\n\t\t{\r\n\t\t\tDebug.Assert(dst != null && src != null);\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in src)\r\n\t\t\t\tdst[entry.Key] = PhpVariable.DeepCopy(entry.Value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds variables from one auto-global array to another.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dst\">A PHP reference to the target array.</param>\r\n\t\t/// <param name=\"src\">A PHP reference to the source array.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Variable values are deeply copied. \r\n\t\t/// If either reference is a <B>null</B> reference or doesn't contain an array, no copying takes place.\r\n\t\t/// </remarks>\r\n\t\tinternal static void AddVariables(PhpReference/*!*/ dst, PhpReference/*!*/ src)\r\n\t\t{\r\n\t\t\tif (dst != null && src != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray adst = dst.Value as PhpArray;\r\n\t\t\t\tPhpArray asrc = src.Value as PhpArray;\r\n\t\t\t\tif (adst != null && asrc != null)\r\n\t\t\t\t\tAddVariables(adst, asrc);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads variables from a collection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">An array where to add variables stored in the collection.</param>\r\n\t\t/// <param name=\"collection\">The collection.</param>\r\n\t\tpublic static void LoadFromCollection(PhpArray result, NameValueCollection collection)\r\n\t\t{\r\n\t\t\tforeach (string name in collection)\r\n\t\t\t{\r\n\t\t\t\t// gets all values associated with the name:\r\n\t\t\t\tstring[] values = collection.GetValues(name);\r\n\r\n                if (values == null)\r\n                    continue;   // http://phalanger.codeplex.com/workitem/30132\r\n\r\n\t\t\t\t// adds all items:\r\n\t\t\t\tif (name != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (string value in values)\r\n                        AddVariable(result, name, value, null);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// if name is null, only name of the variable is stated:\r\n\t\t\t\t\t// e.g. for GET variables, URL looks like this: ...&test&...\r\n\t\t\t\t\t// we add the name of the variable and an emtpy string to get what PHP gets:\r\n                    foreach (string value in values)\r\n                        AddVariable(result, value, String.Empty, null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Initialization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes all auto-global variables.\r\n\t\t/// </summary>\r\n\t\tinternal void Initialize(LocalConfiguration config/*!*/, HttpContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(config != null);\r\n\t\t\tHttpRequest request = (context != null) ? context.Request : null;\r\n\r\n\t\t\t// $_ENV:\r\n\t\t\tInitializeEnvironmentVariables(config);\r\n\r\n\t\t\t// $_SERVER:\r\n\t\t\tInitializeServerVariables(config, context);\r\n\r\n\t\t\t// $_GET, $_POST, $_COOKIE, $_REQUEST, $HTTP_RAW_POST_DATA:\r\n\t\t\tInitializeGetPostCookieRequestVariables(config, request);\r\n\r\n\t\t\t// $_SESSION (initialized by session_start)\r\n\r\n\t\t\t// $_FILE:\r\n\t\t\tInitializeFileVariables(config, request, context);\r\n\r\n\t\t\t// $GLOBALS:\r\n\t\t\tInitializeGlobals(config, request);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $_ENV from Environment.GetEnvironmentVariables().\r\n\t\t/// </summary>\r\n\t\tprivate void InitializeEnvironmentVariables(LocalConfiguration/*!*/ config)\r\n\t\t{\r\n\t\t\tDebug.Assert(config != null);\r\n\r\n\t\t\tIDictionary env_vars = Environment.GetEnvironmentVariables();\r\n\t\t\tPhpArray array = new PhpArray(0, env_vars.Count);\r\n\r\n\t\t\tforeach (DictionaryEntry entry in env_vars)\r\n\t\t\t\tAddVariable(array, entry.Key as string, entry.Value as string, null);\r\n\r\n\t\t\tEnv.Value = array;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $_SERVER from HttpRequest.ServerVariables.\r\n\t\t/// </summary>\r\n\t\tprivate void InitializeServerVariables(LocalConfiguration/*!*/ config, HttpContext context)\r\n\t\t{\r\n            if (context == null)\r\n            {\r\n                Server.Value = new PhpArray();\r\n                return;\r\n            }\r\n\r\n            Debug.Assert(config != null);            \r\n\r\n\t\t\tPhpArray array, argv;\r\n\r\n            var request = context.Request;\r\n            var serverVariables = request.ServerVariables;\r\n\r\n            Server.Value = array = new PhpArray(0, /*serverVariables.Count*/64);\r\n\r\n\t\t\t// adds variables defined by ASP.NET and IIS:\r\n            LoadFromCollection(array, serverVariables);\r\n\r\n\t\t\t// adds argv, argc variables:\r\n\t\t\tif (Configuration.Global.GlobalVariables.RegisterArgcArgv)\r\n\t\t\t{\r\n                array[\"argv\"] = argv = new PhpArray(1) { request.QueryString };\r\n                array[\"argc\"] = 0;\r\n\t\t\t}\r\n\r\n\t\t\t// additional variables defined in PHP manual:\r\n            array[\"PHP_SELF\"] = request.Path;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n                array[\"DOCUMENT_ROOT\"] = request.MapPath(\"/\"); // throws exception under mod_aspdotnet\r\n\t\t\t}\r\n\t\t\tcatch\r\n\t\t\t{\r\n\t\t\t\tarray[\"DOCUMENT_ROOT\"] = null;\r\n\t\t\t}\r\n\r\n            array[\"SERVER_ADDR\"] = serverVariables[\"LOCAL_ADDR\"];\r\n            array[\"REQUEST_URI\"] = request.RawUrl;\r\n\t\t\tarray[\"REQUEST_TIME\"] = DateTimeUtils.UtcToUnixTimeStamp(context.Timestamp.ToUniversalTime());\r\n            array[\"SCRIPT_FILENAME\"] = request.PhysicalPath;\r\n\r\n\t\t\t//IPv6 is the default in IIS7, convert to an IPv4 address (store the IPv6 as well)\r\n            if (request.UserHostAddress.Contains(\":\"))\r\n\t\t\t{\r\n                array[\"REMOTE_ADDR_IPV6\"] = request.UserHostAddress;\r\n\r\n                if (request.UserHostAddress == \"::1\")\r\n                {\r\n                    array[\"REMOTE_ADDR\"] = array[\"SERVER_ADDR\"] = \"127.0.0.1\";\r\n                }\r\n                else foreach (IPAddress IPA in Dns.GetHostAddresses(request.UserHostAddress))\r\n                    {\r\n                        if (IPA.AddressFamily.ToString() == \"InterNetwork\")\r\n                        {\r\n                            array[\"REMOTE_ADDR\"] = IPA.ToString();\r\n                            break;\r\n                        }\r\n                    }\r\n\t\t\t}\r\n\r\n            // PATH_INFO\r\n            // should contain partial path information only\r\n            // note: IIS has AllowPathInfoForScriptMappings property that do the thing ... but ISAPI does not work then\r\n            // hence it must be done here manually\r\n\r\n            if (array.ContainsKey(\"PATH_INFO\"))\r\n            {\r\n                string path_info = (string)array[\"PATH_INFO\"];\r\n                string script_name = (string)array[\"SCRIPT_NAME\"];\r\n                    \r\n                // 'ORIG_PATH_INFO'\r\n                // Original version of 'PATH_INFO' before processed by PHP. \r\n                array[\"ORIG_PATH_INFO\"] = path_info;\r\n                    \r\n                // 'PHP_INFO'\r\n                // Contains any client-provided pathname information trailing the actual script filename\r\n                // but preceding the query string, if available. For instance, if the current script was\r\n                // accessed via the URL http://www.example.com/php/path_info.php/some/stuff?foo=bar,\r\n                // then $_SERVER['PATH_INFO'] would contain /some/stuff. \r\n                    \r\n                // php-5.3.2\\sapi\\isapi\\php5isapi.c:\r\n                // \r\n                // strncpy(path_info_buf, static_variable_buf + scriptname_len - 1, sizeof(path_info_buf) - 1);    // PATH_INFO = PATH_INFO.SubString(SCRIPT_NAME.Length);\r\n\r\n\r\n                array[\"PATH_INFO\"] = (script_name.Length <= path_info.Length) ? path_info.Substring(script_name.Length) : string.Empty;\r\n            }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n        /// Loads $_GET, $_POST, $_COOKIE, $HTTP_RAW_POST_DATA, and $_REQUEST arrays.\r\n\t\t/// </summary>\r\n\t\tprivate void InitializeGetPostCookieRequestVariables(LocalConfiguration/*!*/ config, HttpRequest request)\r\n\t\t{\r\n\t\t\tDebug.Assert(config != null);\r\n\r\n\t\t\tPhpArray get_array, post_array, cookie_array, request_array;\r\n            string httprawpostdata_bytes;\r\n\r\n            InitializeGetPostVariables(config, request, out get_array, out post_array, out httprawpostdata_bytes);\r\n\t\t\tInitializeCookieVariables(config, request, out cookie_array);\r\n\t\t\tInitializeRequestVariables(request, config.Variables.RegisteringOrder,\r\n\t\t\t  get_array, post_array, cookie_array, out request_array);\r\n\r\n\t\t\tGet.Value = get_array;\r\n\t\t\tPost.Value = post_array;\r\n\t\t\tCookie.Value = cookie_array;\r\n\t\t\tRequest.Value = request_array;\r\n            HttpRawPostData.Value = httprawpostdata_bytes;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $_GET, $_POST arrays from HttpRequest.QueryString and HttpRequest.Form.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"config\">Local configuration.</param>\r\n\t\t/// <param name=\"request\">HTTP request instance or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"getArray\">Resulting $_GET array.</param>\r\n\t\t/// <param name=\"postArray\">Resulting $_POST array.</param>\r\n        /// <param name=\"httprawpostdataBytes\">$HTTP_RAW_POST_DATA variable.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paranref name=\"config\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static void InitializeGetPostVariables(LocalConfiguration/*!*/ config, HttpRequest request,\r\n          out PhpArray getArray, out PhpArray postArray, out string httprawpostdataBytes)\r\n\t\t{\r\n\t\t\tif (config == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"config\");\r\n\r\n            if (request != null)\r\n            {\r\n                if (request.RequestType == \"GET\")\r\n                {\r\n                    getArray = new PhpArray(0, request.QueryString.Count + request.Form.Count);\r\n                    postArray = new PhpArray(0, 0);\r\n\r\n                    // loads Form variables to GET array:\r\n                    LoadFromCollection(getArray, request.Form);\r\n                }\r\n                else\r\n                {\r\n                    getArray = new PhpArray(0, request.QueryString.Count);\r\n                    postArray = new PhpArray(0, request.Form.Count);\r\n\r\n                    // loads Form variables to POST array:\r\n                    LoadFromCollection(postArray, request.Form);\r\n                }\r\n\r\n                // loads Query variables to GET array:\r\n                LoadFromCollection(getArray, request.QueryString);\r\n\r\n                // HTTP_RAW_POST_DATA   // when always_populate_raw_post_data option is TRUE, however using \"php://input\" is preferred. For \"multipart/form-data\" it is not available.\r\n                try\r\n                {\r\n                    httprawpostdataBytes =\r\n                       (config.Variables.AlwaysPopulateRawPostData && !request.ContentType.StartsWith(\"multipart/form-data\")) ?\r\n                       new StreamReader(request.InputStream).ReadToEnd() :\r\n                       null;\r\n                }\r\n                catch\r\n                {\r\n                    httprawpostdataBytes = null;    // unable to read the input stream, unreachable\r\n                }\r\n            }\r\n            else\r\n            {\r\n                getArray = new PhpArray(0, 0);\r\n                postArray = new PhpArray(0, 0);\r\n                httprawpostdataBytes = null;\r\n            }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $_COOKIE arrays from HttpRequest.Cookies.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"config\">Local configuration.</param>\r\n\t\t/// <param name=\"request\">HTTP request instance or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"cookieArray\">Resulting $_COOKIE array.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paranref name=\"config\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static void InitializeCookieVariables(LocalConfiguration/*!*/ config, HttpRequest request,\r\n\t\t  out PhpArray cookieArray)\r\n\t\t{\r\n            Debug.Assert(config != null);\r\n\r\n\t\t\tif (request != null)\r\n\t\t\t{\r\n                var cookies = request.Cookies;\r\n                Debug.Assert(cookies != null, \"cookies == null\");\r\n\r\n                int count = cookies.Count;\r\n\t\t\t\tcookieArray = new PhpArray(0, count);\r\n\r\n                for (int i = 0; i < count; i++)\r\n                {\r\n                    HttpCookie cookie = cookies.Get(i);\r\n\t\t\t\t\tAddVariable(cookieArray, cookie.Name, UrlDecodeValue(cookie.Value), null);\r\n\r\n\t\t\t\t\t// adds a copy of cookie with the same key as the session name;\r\n\t\t\t\t\t// the name gets encoded and so $_COOKIE[session_name()] doesn't work then:\r\n\t\t\t\t\tif (cookie.Name == AspNetSessionHandler.AspNetSessionName)\r\n\t\t\t\t\t\tcookieArray[AspNetSessionHandler.AspNetSessionName] = UrlDecodeValue(cookie.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcookieArray = new PhpArray(0, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $_REQUEST from $_GET, $_POST and $_COOKIE arrays.\r\n\t\t/// </summary>\r\n\t\tprivate static void InitializeRequestVariables(HttpRequest request, string/*!*/ gpcOrder,\r\n\t\t  PhpArray/*!*/ getArray, PhpArray/*!*/ postArray, PhpArray/*!*/ cookieArray, out PhpArray requestArray)\r\n\t\t{\r\n\t\t\tDebug.Assert(gpcOrder != null && getArray != null && postArray != null && cookieArray != null);\r\n\r\n\t\t\tif (request != null)\r\n\t\t\t{\r\n\t\t\t\trequestArray = new PhpArray(0, getArray.Count + postArray.Count + cookieArray.Count);\r\n\r\n\t\t\t\t// adds items from GET, POST, COOKIE arrays in the order specified by RegisteringOrder config option:\r\n\t\t\t\tfor (int i = 0; i < gpcOrder.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (Char.ToUpperInvariant(gpcOrder[i]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 'G': AddVariables(requestArray, getArray); break;\r\n\t\t\t\t\t\tcase 'P': AddVariables(requestArray, postArray); break;\r\n\t\t\t\t\t\tcase 'C': AddVariables(requestArray, cookieArray); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\trequestArray = new PhpArray(0, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Loads $_FILES from HttpRequest.Files.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <list type=\"bullet\">\r\n\t\t///   <item>$_FILES[{var_name}]['name'] - The original name of the file on the client machine.</item>\r\n\t\t///   <item>$_FILES[{var_name}]['type'] - The mime type of the file, if the browser provided this information. An example would be \"image/gif\".</item>\r\n\t\t///   <item>$_FILES[{var_name}]['size'] - The size, in bytes, of the uploaded file.</item> \r\n\t\t///   <item>$_FILES[{var_name}]['tmp_name'] - The temporary filename of the file in which the uploaded file was stored on the server.</item>\r\n\t\t///   <item>$_FILES[{var_name}]['error'] - The error code associated with this file upload.</item> \r\n\t\t/// </list>\r\n\t\t/// </remarks>\r\n        private void InitializeFileVariables(LocalConfiguration/*!*/ config, HttpRequest request, HttpContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(config != null);\r\n\t\t\tPhpArray files;\r\n\t\t\tint count;\r\n\r\n\t\t\tGlobalConfiguration global_config = Configuration.Global;\r\n\r\n\t\t\tif (request != null && global_config.PostedFiles.Accept && (count = request.Files.Count) > 0)\r\n\t\t\t{\r\n                Debug.Assert(context != null);\r\n                Debug.Assert(RequestContext.CurrentContext != null, \"PHP.Core.RequestContext not initialized!\");\r\n\r\n\t\t\t\tfiles = new PhpArray(0, count);\r\n\r\n\t\t\t\t// gets a path where temporary files are stored:\r\n\t\t\t\tvar temppath = global_config.PostedFiles.GetTempPath(global_config.SafeMode);\r\n                // temporary file name (first part)\r\n                var basetempfilename = string.Concat(\"php_\", context.Timestamp.Ticks.ToString(\"x\"), \"-\");\r\n                var basetempfileid = this.GetHashCode();\r\n\r\n\t\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring name = request.Files.GetKey(i);\r\n\t\t\t\t\tstring file_path, type, file_name;\r\n\t\t\t\t\tHttpPostedFile file = request.Files[i];\r\n\t\t\t\t\tPostedFileError error = PostedFileError.None;\r\n\r\n\t\t\t\t\tif (!string.IsNullOrEmpty(file.FileName))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttype = file.ContentType;\r\n\r\n                        var tempfilename = string.Concat(basetempfilename, (basetempfileid++).ToString(\"X\"), \".tmp\");\r\n                        file_path = Path.Combine(temppath, tempfilename);\r\n\t\t\t\t\t\tfile_name = Path.GetFileName(file.FileName);\r\n\r\n\t\t\t\t\t\t// registers the temporary file for deletion at request end:\r\n\t\t\t\t\t\tRequestContext.CurrentContext.AddTemporaryFile(file_path);\r\n\r\n\t\t\t\t\t\t// saves uploaded content to the temporary file:\r\n\t\t\t\t\t\tfile.SaveAs(file_path);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfile_path = type = file_name = String.Empty;\r\n\t\t\t\t\t\terror = PostedFileError.NoFile;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tAddVariable(files, name, file_name, \"name\");\r\n\t\t\t\t\tAddVariable(files, name, type, \"type\");\r\n\t\t\t\t\tAddVariable(files, name, file_path, \"tmp_name\");\r\n\t\t\t\t\tAddVariable(files, name, (int)error, \"error\");\r\n\t\t\t\t\tAddVariable(files, name, file.ContentLength, \"size\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfiles = new PhpArray(0, 0);\r\n\t\t\t}\r\n\r\n\t\t\tFiles.Value = files;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds file variables from $_FILE array to $GLOBALS array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"globals\">$GLOBALS array.</param>\r\n\t\t/// <param name=\"files\">$_FILES array.</param>\r\n\t\tprivate void AddFileVariablesToGlobals(PhpArray/*!*/ globals, PhpArray/*!*/ files)\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in files)\r\n\t\t\t{\r\n\t\t\t\tPhpArray file_info = (PhpArray)entry.Value;\r\n\r\n\t\t\t\tglobals[entry.Key] = file_info[\"tmp_name\"];\r\n\t\t\t\tglobals[entry.Key.ToString() + \"_name\"] = file_info[\"name\"];\r\n\t\t\t\tglobals[entry.Key.ToString() + \"_type\"] = file_info[\"type\"];\r\n\t\t\t\tglobals[entry.Key.ToString() + \"_size\"] = file_info[\"size\"];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads $GLOBALS from $_ENV, $_REQUEST, $_SERVER and $_FILES.\r\n\t\t/// </summary>\r\n\t\tprivate void InitializeGlobals(LocalConfiguration/*!*/ config, HttpRequest/*!*/ request)\r\n\t\t{\r\n\t\t\tDebug.Assert(config != null && Request.Value != null && Env.Value != null && Server.Value != null && Files.Value != null);\r\n\r\n\t\t\tPhpArray globals;\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\r\n\t\t\t// estimates the initial capacity of $GLOBALS array:\r\n\t\t\tint count = EstimatedUserGlobalVariableCount + AutoGlobals.MaxCount;\r\n\t\t\tif (global.GlobalVariables.RegisterLongArrays) count += AutoGlobals.MaxCount;\r\n\r\n\t\t\t// adds EGPCS variables as globals:\r\n\t\t\tif (global.GlobalVariables.RegisterGlobals)\r\n\t\t\t{\r\n\t\t\t\tPhpArray env_array = (PhpArray)Env.Value;\r\n\t\t\t\tPhpArray get_array = (PhpArray)Get.Value;\r\n\t\t\t\tPhpArray post_array = (PhpArray)Post.Value;\r\n\t\t\t\tPhpArray files_array = (PhpArray)Files.Value;\r\n\t\t\t\tPhpArray cookie_array = (PhpArray)Cookie.Value;\r\n\t\t\t\tPhpArray server_array = (PhpArray)Server.Value;\r\n\t\t\t\tPhpArray request_array = (PhpArray)Request.Value;\r\n\r\n\t\t\t\tif (request != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tglobals = new PhpArray(0, count + env_array.Count + request_array.Count + server_array.Count + files_array.Count * 4);\r\n\r\n\t\t\t\t\t// adds items in the order specified by RegisteringOrder config option (overwrites existing):\r\n\t\t\t\t\tstring order = config.Variables.RegisteringOrder;\r\n\t\t\t\t\tfor (int i = 0; i < order.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch (order[i])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase 'E': AddVariables(globals, env_array); break;\r\n\t\t\t\t\t\t\tcase 'G': AddVariables(globals, get_array); break;\r\n\r\n\t\t\t\t\t\t\tcase 'P':\r\n\t\t\t\t\t\t\t\tAddVariables(globals, post_array);\r\n\t\t\t\t\t\t\t\tAddFileVariablesToGlobals(globals, files_array);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase 'C': AddVariables(globals, cookie_array); break;\r\n\t\t\t\t\t\t\tcase 'S': AddVariables(globals, server_array); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tglobals = new PhpArray(0, count + env_array.Count);\r\n\t\t\t\t\tAddVariables(globals, env_array);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tglobals = new PhpArray(0, count);\r\n\t\t\t}\r\n\r\n\t\t\t// command line argc, argv:\r\n\t\t\tif (request == null)\r\n\t\t\t{\r\n\t\t\t\tstring[] args = Environment.GetCommandLineArgs();\r\n\t\t\t\tPhpArray argv = new PhpArray(0, args.Length);\r\n\r\n\t\t\t\t// adds all arguments to the array (the 0-th argument is not '-' as in PHP but the program file):\r\n\t\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t\t\targv.Add(i, args[i]);\r\n\r\n\t\t\t\tglobals[\"argv\"] = argv;\r\n\t\t\t\tglobals[\"argc\"] = args.Length;\r\n\t\t\t}\r\n\r\n\t\t\t// adds auto-global variables (overwrites potential existing variables in $GLOBALS):\r\n            globals[VariableName.GlobalsName] = Globals;\r\n            globals[VariableName.EnvName] = Env;\r\n            globals[VariableName.GetName] = Get;\r\n            globals[VariableName.PostName] = Post;\r\n            globals[VariableName.CookieName] = Cookie;\r\n            globals[VariableName.RequestName] = Request;\r\n            globals[VariableName.ServerName] = Server;\r\n            globals[VariableName.FilesName] = Files;\r\n            globals[VariableName.SessionName] = Session;\r\n            globals[VariableName.HttpRawPostDataName] = HttpRawPostData;\r\n\r\n\t\t\t// adds long arrays:\r\n\t\t\tif (Configuration.Global.GlobalVariables.RegisterLongArrays)\r\n\t\t\t{\r\n\t\t\t\tglobals.Add(\"HTTP_ENV_VARS\", new PhpReference(((PhpArray)Env.Value).DeepCopy()));\r\n\t\t\t\tglobals.Add(\"HTTP_GET_VARS\", new PhpReference(((PhpArray)Get.Value).DeepCopy()));\r\n\t\t\t\tglobals.Add(\"HTTP_POST_VARS\", new PhpReference(((PhpArray)Post.Value).DeepCopy()));\r\n\t\t\t\tglobals.Add(\"HTTP_COOKIE_VARS\", new PhpReference(((PhpArray)Cookie.Value).DeepCopy()));\r\n\t\t\t\tglobals.Add(\"HTTP_SERVER_VARS\", new PhpReference(((PhpArray)Server.Value).DeepCopy()));\r\n\t\t\t\tglobals.Add(\"HTTP_POST_FILES\", new PhpReference(((PhpArray)Files.Value).DeepCopy()));\r\n\r\n\t\t\t\t// both session array references the same array:\r\n\t\t\t\tglobals.Add(\"HTTP_SESSION_VARS\", Session);\r\n\t\t\t}\r\n\r\n\t\t\tGlobals.Value = globals;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emit Support\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns 'FieldInfo' representing field in AutoGlobals for given global variable name.\r\n\t\t/// </summary>\r\n\t\tinternal static FieldInfo GetFieldForVariable(VariableName name)\r\n\t\t{\r\n\t\t\tswitch (name.ToString())\r\n\t\t\t{\r\n\t\t\t\tcase VariableName.CookieName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Cookie;\r\n                case VariableName.EnvName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Env;\r\n                case VariableName.FilesName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Files;\r\n                case VariableName.GetName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Get;\r\n                case VariableName.GlobalsName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Globals;\r\n                case VariableName.PostName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Post;\r\n                case VariableName.RequestName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Request;\r\n                case VariableName.ServerName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Server;\r\n                case VariableName.SessionName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Session;\r\n                case VariableName.HttpRawPostDataName:\r\n                    return Fields.AutoGlobals.HttpRawPostData;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/GlobalVariables.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing PHP.Core.Emit;\r\nusing System.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Declares auto-global variables stored in the script context.\r\n\t/// </summary>\r\n\tpublic sealed class AutoGlobals\r\n\t{\r\n\t\tinternal const int EgpcsCount = 5;\r\n\t\tinternal const int MaxCount = 9;\r\n\t\tinternal const int EstimatedUserGlobalVariableCount = 15;\r\n\r\n\t\t#region Fields & Initialization\r\n\r\n        /// <summary>\r\n        /// Addr variable ($_ADDR). \r\n        /// </summary>\r\n        public PhpReference/*!*/ Addr = new PhpReference();\r\n        public const string AddrName = \"_ADDR\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Global variables ($GLOBALS). \r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Globals = new PhpReference();\r\n\t\tpublic const string GlobalsName = \"GLOBALS\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Canvas variable ($_CANVAS). Initialized on start.\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference/*!*/ Canvas = new PhpReference();\r\n\t\tpublic const string CanvasName = \"_CANVAS\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes all auto-global variables.\r\n\t\t/// </summary>\r\n\t\tinternal void Initialize()\r\n\t\t{\r\n\t\t\tGlobals.Value = new PhpArray(0, 0);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IsAutoGlobal\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified name is the name of an auto-global variable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name.</param>\r\n\t\t/// <returns>Whether <paramref name=\"name\"/> is auto-global.</returns>\r\n\t\tpublic static bool IsAutoGlobal(string name)\r\n\t\t{\r\n\t\t\treturn name == \"GLOBALS\" || name == \"_CANVAS\" || name == \"_ADDR\";\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variable Addition\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds variables from one auto-global array to another.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dst\">The target array.</param>\r\n\t\t/// <param name=\"src\">The source array.</param>\r\n\t\t/// <remarks>Variable values are deeply copied.</remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"dst\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"src\"/> is a <B>null</B> reference.</exception>\r\n\t\tprivate static void AddVariables(PhpArray/*!*/ dst, PhpArray/*!*/ src)\r\n\t\t{\r\n\t\t\tDebug.Assert(dst != null && src != null);\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in src)\r\n\t\t\t\tdst[entry.Key] = PhpVariable.DeepCopy(entry.Value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds variables from one auto-global array to another.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dst\">A PHP reference to the target array.</param>\r\n\t\t/// <param name=\"src\">A PHP reference to the source array.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Variable values are deeply copied. \r\n\t\t/// If either reference is a <B>null</B> reference or doesn't contain an array, no copying takes place.\r\n\t\t/// </remarks>\r\n\t\tinternal static void AddVariables(PhpReference/*!*/ dst, PhpReference/*!*/ src)\r\n\t\t{\r\n\t\t\tif (dst != null && src != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray adst = dst.Value as PhpArray;\r\n\t\t\t\tPhpArray asrc = src.Value as PhpArray;\r\n\t\t\t\tif (adst != null && asrc != null)\r\n\t\t\t\t\tAddVariables(adst, asrc);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emit Support\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns 'FieldInfo' representing field in AutoGlobals for given global variable name.\r\n\t\t/// </summary>\r\n\t\tinternal static FieldInfo GetFieldForVariable(VariableName name)\r\n\t\t{\r\n\t\t\tswitch (name.ToString())\r\n\t\t\t{\r\n\t\t\t\tcase AutoGlobals.GlobalsName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Globals;\r\n\t\t\t\tcase AutoGlobals.CanvasName:\r\n\t\t\t\t\treturn Fields.AutoGlobals.Canvas;\r\n                case AutoGlobals.AddrName:\r\n                    return Fields.AutoGlobals.Addr;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Hashtables.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\nusing System.Collections.Generic;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\n/*\r\n\r\n  NOTES:\r\n   - operations on intrinsic operator forces it to be unbreakable\r\n   \r\n  FUTURE VERSION:\r\n   - OrderdHashtable.SortToList\r\n     - sorts hashtable and stores result into a list \r\n     - usefull for some methods which needs to iterate over sorted table\r\n\r\n  COPY ON WRITE:\r\n   - problem: enumerators\r\n     - read/only enums  - can operate on a single version, version changes => enum unusable\r\n     - read/write enums - operates on different versions, creation == write operation => copy made, version++\r\n     - enumerator wrapper for PhpHT - cannot use OHT enumerator directly (must have reference to PhpHT + version)\r\n*/\r\n\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Implemented operations.\r\n\t/// </summary>\r\n\tpublic enum SetOperations\r\n\t{\r\n\t\tDifference,\r\n\t\tIntersection\r\n\t}\r\n\r\n\t#region DualDictionary<K,V>\r\n\r\n    /// <summary>\r\n    /// DualDictionary contains two dictionaries that each one has its own comparer, but behaves as one dictionary\r\n    /// </summary>\r\n    /// <typeparam name=\"K\"></typeparam>\r\n    /// <typeparam name=\"V\"></typeparam>\r\n    /// <remarks>\r\n    /// It is used for example to store constants, because some constants ignores case and others don't\r\n    /// </remarks>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class DualDictionary<K, V> : IEnumerable<KeyValuePair<K, V>>\r\n\t{\r\n\t\tprivate Dictionary<K, V>/*!*/ primary;\r\n\t\tprivate Dictionary<K, V>/*!*/ secondary;\r\n\r\n\t\tpublic DualDictionary(DualDictionary<K, V>/*!*/ dictionary)\r\n\t\t{\r\n\t\t\tif (dictionary == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"dictionary\");\r\n\r\n\t\t\tthis.primary = new Dictionary<K, V>(dictionary.primary, dictionary.primary.Comparer);\r\n\t\t\tthis.secondary = new Dictionary<K, V>(dictionary.secondary, dictionary.secondary.Comparer);\r\n\t\t}\r\n\r\n\t\tpublic DualDictionary(IEqualityComparer<K> primaryComparer, IEqualityComparer<K> secondaryComparer)\r\n\t\t{\r\n\t\t\tthis.primary = new Dictionary<K, V>(primaryComparer);\r\n\t\t\tthis.secondary = new Dictionary<K, V>(secondaryComparer);\r\n\t\t}\r\n\r\n\t\tpublic int Count\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn primary.Count + secondary.Count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic V this[K/*!*/ key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tV result;\r\n\t\t\t\tif (this.TryGetValue(key, out result))\r\n\t\t\t\t\treturn result;\r\n\t\t\t\telse\r\n\t\t\t\t\tthrow new KeyNotFoundException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic V this[K/*!*/ key, bool isPrimary]\r\n\t\t{\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\t(isPrimary ? primary : secondary)[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tpublic bool TryGetValue(K/*!*/ key, out V result)\r\n\t\t{\r\n\t\t\treturn primary.TryGetValue(key, out result) || secondary.TryGetValue(key, out result);\r\n\t\t}\r\n\r\n\t\tpublic bool TryGetValue(K key, out V result, out bool isSensitive)\r\n\t\t{\r\n\t\t\treturn (isSensitive = primary.TryGetValue(key, out result)) || secondary.TryGetValue(key, out result);\r\n\t\t}\r\n\r\n\t\tpublic bool ContainsKey(K/*!*/ key)\r\n\t\t{\r\n\t\t\treturn primary.ContainsKey(key) || secondary.ContainsKey(key);\r\n\t\t}\r\n\r\n\t\tpublic void Add(K/*!*/ key, V value, bool ignoreCase)\r\n\t\t{\r\n\t\t\t(ignoreCase ? secondary : primary).Add(key, value);\r\n\t\t}\r\n\r\n\t\tpublic bool Remove(K/*!*/ key)\r\n\t\t{\r\n\t\t\treturn primary.Remove(key) || secondary.Remove(key);\r\n\t\t}\r\n\r\n\t\tpublic IEnumerator<KeyValuePair<K, V>>/*!*/ GetEnumerator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<K, V> entry in primary)\r\n\t\t\t\tyield return entry;\r\n\r\n\t\t\tforeach (KeyValuePair<K, V> entry in secondary)\r\n\t\t\t\tyield return entry;\r\n\t\t}\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<K, V> entry in primary)\r\n\t\t\t\tyield return new DictionaryEntry(entry.Key, entry.Value);\r\n\r\n\t\t\tforeach (KeyValuePair<K, V> entry in secondary)\r\n\t\t\t\tyield return new DictionaryEntry(entry.Key, entry.Value);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region OrderedHashtable<K>\r\n\r\n    /// <summary>The hash table with an additional memory of an order in which elements have been added.</summary>\r\n\t/// <remarks>\r\n\t/// <para>\r\n\t/// The Enumerator enumerates through items in that order. \r\n\t/// Unlike <see cref=\"System.Collections.Hashtable\"/>'s enumerator this one doesn't get broken by changing \r\n\t/// the underlying hashtable.\r\n\t/// </para>\r\n\t/// <para>The order of entries is maintained by a bidirectional circular list with a head.</para>\r\n\t/// </remarks>\r\n\t[DebuggerNonUserCode]\r\n#if !SILVERLIGHT\r\n\t[Serializable]\r\n#endif\r\n\tpublic sealed class OrderedHashtable<K> : IDictionary<K, object>, IDictionary, ICloneable, ISerializable\r\n\t{\r\n\t\t#region Fields & Specific Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Expose the dictionary to item getters on <see cref=\"PhpArray\"/> to make them a little bit faster.\r\n\t\t/// </summary>\r\n        internal readonly Dictionary<K, Element>/*!*/dict;\r\n\r\n\t\t/// <summary>The head of the cyclic list.</summary>\r\n        internal readonly Element/*!*/head;\r\n\r\n        #endregion\r\n\r\n\t\t#region Constructors\r\n\r\n        public OrderedHashtable()\r\n            : this(null, 0)\r\n        {\r\n        }\r\n\r\n        public OrderedHashtable(int capacity)\r\n            :this(null, capacity)\r\n        {\r\n        }\r\n\r\n        public OrderedHashtable(PhpHashtable owner)\r\n            :this(owner,0)\r\n\t\t{\r\n\t\t}\r\n\r\n        public OrderedHashtable(PhpHashtable owner, int capacity)\r\n            : this(owner, capacity, /*(typeof(K) == typeof(IntStringKey)) ? (IEqualityComparer<K>)IntStringKey.EqualityComparer.Default :*/ null)\r\n        {\r\n        }\r\n\r\n        public OrderedHashtable(PhpHashtable owner, int capacity, IEqualityComparer<K> comparer)\r\n        {\r\n            this.dict = new Dictionary<K, Element>(capacity, comparer);\r\n            this.head = new Element(this);\r\n            //this.owner = owner;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        //#region Share, Unshare, CheckNotShared\r\n\r\n        ///// <summary>\r\n        ///// Marks this instance as shared (<see cref=\"IsShared\"/>) and returns itself.\r\n        ///// </summary>\r\n        ///// <returns></returns>\r\n        //public OrderedHashtable<K>/*!*/Share()\r\n        //{\r\n        //    ++_refCount;\r\n        //    return this;\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Get back shared instance of internal data.\r\n        ///// </summary>\r\n        //public void Unshare()\r\n        //{\r\n        //    --_refCount;\r\n\r\n        //    Debug.Assert(_refCount >= 0, \"Too many Unshare() calls!\");\r\n        //}\r\n\r\n        [Conditional(\"DEBUG\")]\r\n        private void CheckNotShared()\r\n        {\r\n            ////Debug.Assert(!this.IsShared, \"Cannot modify shared OrderedHashtable.\");\r\n            //if (this.IsShared)\r\n            //    throw new AccessViolationException(\"Cannot modify shared OrderedHashtable.\");\r\n        }\r\n\r\n        //#endregion\r\n\r\n        #region Inner class: Element\r\n\r\n        /// <summary>\r\n\t\t/// An element stored in the table.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n        [DebuggerNonUserCode]\r\n        public sealed class Element\r\n\t\t{\r\n\t\t\tinternal OrderedHashtable<K> Table;\r\n\t\t\tinternal Element Next;\r\n\t\t\tinternal Element Prev;\r\n\r\n            ///// <summary>\r\n            ///// The unique ID of Element within the <see cref=\"Table\"/>.\r\n            ///// </summary>\r\n            //internal ulong ID;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Key associated with the element. <see cref=\"InvalidItem\"/> in head.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic K Key\r\n\t\t\t{\r\n\t\t\t\tget { return _key; }\r\n\t\t\t\tinternal set { _key = value; }  // ReindexIntegers\r\n\t\t\t}\r\n\t\t\tprivate K _key;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Value associated with the element.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Value\r\n            {\r\n                get\r\n                {\r\n                    return this._value;\r\n                }\r\n                set\r\n                {\r\n                    Table.CheckNotShared();\r\n                    this._value = value;\r\n                }\r\n            }\r\n\t\t\tprivate object _value;\r\n\r\n\t\t\tpublic KeyValuePair<K, object> Entry { get { return new KeyValuePair<K, object>(_key, _value); } }\r\n\r\n\t\t\tinternal Element(OrderedHashtable<K> table)\r\n\t\t\t{\r\n\t\t\t\tTable = table;\r\n\r\n\t\t\t\tNext = this;\r\n\t\t\t\tPrev = this;\r\n                //ID = table.elementsId ++;\r\n\r\n\t\t\t\tthis._value = InvalidItem.Default;                \r\n\t\t\t}\r\n\r\n            internal Element(OrderedHashtable<K> table, K key, object value, Element next, Element prev)\r\n            {\r\n                // reverse order of arguments so they are served on top of the stack ?\r\n                Prev = prev;\r\n                Next = next;\r\n\r\n                this._value = value;\r\n                this._key = key;\r\n\r\n                Table = table;\r\n\r\n                //ID = table.elementsId++;\r\n            }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets whether the element is a head of the list.\r\n\t\t\t/// </summary>\r\n            /// <exception cref=\"NullReferenceException\">When called on a deleted element.</exception>\r\n            internal bool IsHead { get { return this.Table.head == this; } }\r\n\r\n            /// <summary>\r\n            /// Gets whether the element was deleted from the array.\r\n            /// </summary>\r\n            internal bool IsDeleted { get { return this.Table == null; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Boxes the value to a reference if it is not already a reference.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>The boxed value.</returns>\r\n\t\t\tpublic PhpReference/*!*/ MakeValueReference()\r\n\t\t\t{\r\n\t\t\t\tPhpReference result = _value as PhpReference;\r\n\t\t\t\tif (result == null)\r\n\t\t\t\t{\r\n                    Table.CheckNotShared();\r\n\r\n\t\t\t\t\t// it is correct to box the Value without making a deep copy since there was a single pointer on Value\r\n\t\t\t\t\t// before this operation (by invariant) and there will be a single one after the operation as well:\r\n\t\t\t\t\tresult = new PhpReference(_value);\r\n\t\t\t\t\t_value = result;\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inner class: Enumerator\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unbreakable enumerator which iterates through a hashtable in the order in which elements were added.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// If the enumerator reaches a head of a list it stops enumeration (<see cref=\"MoveNext\"/> \r\n\t\t/// returns <b>false</b>) and \r\n\t\t/// has to be restarted in order to enumerate the list again from the beginning.\r\n\t\t/// Before it is done so both <c>Value</c> and <c>Key</c> properties return a reference to \r\n\t\t/// <see cref=\"InvalidItem\"/> internal singleton which cannot be accessed except for checinkg its type.\r\n\t\t/// Note, a key of an entry can never be a <B>null</B> reference. \r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Items can be deleted from an underlying Ordered Hashtable during an enumeration.\r\n\t\t/// When an item is removed is is immediately deleted from the underlying \r\n\t\t/// hashtable and remains only connected to the list to allow enumeration continuation.\r\n\t\t/// Since deleted items are skipped by all enumerator's operations (<see cref=\"Current\"/>, \r\n\t\t/// <see cref=\"MoveNext\"/>, ...) such an item cannot be accessed once it is deleted.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Thanks to above two properties there is no exception thrown by this enumerator.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t[Serializable]\r\n\t\tpublic sealed class Enumerator : IEnumerator<KeyValuePair<K, object>>, IDictionaryEnumerator, IPhpEnumerator, IDisposable\r\n\t\t{\r\n\t\t\t#region Fields\r\n\r\n            ///// <summary>\r\n            ///// Reference to the hashtable that owns this enumerator. Can be null.\r\n            ///// If <see cref=\"OrderedHashtable&lt;K&gt;\"/> is changed (due to lazy copy),\r\n            ///// the <see cref=\"Enumerator\"/> can relink <see cref=\"head\"/> and <see cref=\"current\"/> accordingly.\r\n            ///// </summary>\r\n            //private readonly PhpHashtable hashtable;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Reference to head of the list.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal Element/*!*/ head;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Reference to the current element in the list.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal Element/*!*/ current;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the enumertor is starting a new enumeration of the list.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// Set on construction and by <see cref=\"Reset\"/> and unset by each <see cref=\"MoveNext\"/>.\r\n\t\t\t/// Allows to distinguish two different states of enumerator in both of which the <c>current</c>\r\n\t\t\t/// element is a head of a list.\r\n\t\t\t/// </remarks>\r\n\t\t\tprivate bool starting;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the enumerator should return <c>KeyValuePair{K, object}</c> when used as <see cref=\"IEnumerator\"/>.\r\n\t\t\t/// If <B>false</B> it will return <see cref=\"DictionaryEntry\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate readonly bool isGeneric;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Constructors\r\n\r\n\t\t\tinternal Enumerator(OrderedHashtable<K>/*!*/ hashtable, bool isGeneric)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(hashtable != null, \"hashtable cannot be null!\");\r\n\r\n                this.head = hashtable.head;\r\n\t\t\t\tthis.current = head;\r\n\t\t\t\tthis.starting = true;\r\n\t\t\t\tthis.isGeneric = isGeneric;\r\n\r\n\t\t\t\tDebug.Assert(head.Value == InvalidItem.Default && !head.IsDeleted, \"Unexpected head state!\");\r\n\t\t\t}\r\n\r\n            ///// <summary>\r\n            ///// Create the enumerator aware of PhpHashtable container. Enumerator checks if the internal table\r\n            ///// has been lazily copied and then updates links to the new one if necessary.\r\n            ///// </summary>\r\n            ///// <param name=\"hashtable\">The <see cref=\"PhpHashtable\"/> container. Cannot be null.</param>\r\n            ///// <param name=\"isGeneric\">True iff <see cref=\"IEnumerator\"/> if being used. False in case of <see cref=\"IDictionaryEnumerator\"/>.</param>\r\n            //internal Enumerator(PhpHashtable/*!*/hashtable, bool isGeneric)\r\n            //    : this(hashtable.table as OrderedHashtable<K>, isGeneric)\r\n            //{\r\n            //    // store the table container to allow internal table update check:\r\n            //    this.hashtable = hashtable;\r\n\r\n            //    // register the enumerator object:\r\n            //    hashtable.RegisterEnumerator(this as OrderedHashtable<IntStringKey>.Enumerator);\r\n            //}\r\n\r\n\t\t\t#endregion\r\n\r\n            #region Misc: SkipDeletedForward, SkipDeletedBackward, EnsureCurrentTable\r\n\r\n            /// <summary>\r\n            /// Move <see cref=\"current\"/> iterator over the deleted element (follows Next reference).\r\n            /// </summary>\r\n            /// <returns>The <see cref=\"current\"/> iterator.</returns>\r\n            internal Element SkipDeletedForward()\r\n            {\r\n                if (current.Table != null)\r\n                    return current;\r\n\r\n                return SkipDeletedForwardInternal();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Second part of <see cref=\"SkipDeletedForward\"/>. The method is separated to enhance\r\n            /// the call to <see cref=\"SkipDeletedForward\"/>, the code contained in this method is rarely called.\r\n            /// </summary>\r\n            /// <returns>The <see cref=\"current\"/> iterator.</returns>\r\n            private Element SkipDeletedForwardInternal()\r\n            {\r\n                while (current.IsDeleted) current = current.Next;\r\n                return current;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Move <see cref=\"current\"/> iterator over the deleted element backwards (follows Prev reference).\r\n            /// </summary>\r\n            /// <returns>The <see cref=\"current\"/> iterator.</returns>\r\n            private Element SkipDeletedBackward()\r\n            {\r\n                while (current.IsDeleted) current = current.Prev;\r\n                return current;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IPhpEnumerator Members\r\n\r\n            /// <summary>\r\n\t\t\t/// Moves enumerator to the last element in the list if exists. \r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>Whether there is any item in the list.</returns>\r\n\t\t\tpublic bool MoveLast()\r\n\t\t\t{\r\n                current = head.Prev;\r\n\t\t\t\treturn SkipDeletedBackward() != head;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Moves enumerator to the first element in the list if exists. \r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>Whether there is any item in the list.</returns>\r\n\t\t\tpublic bool MoveFirst()\r\n\t\t\t{\r\n                current = head.Next;\r\n                starting = false;\r\n\t\t\t\treturn SkipDeletedForward() != head;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Moves the enumerator to the previous element of the hashtable's list.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <return>\r\n\t\t\t/// <B>true</B> if the enumerator was successfully moved to the previous element; \r\n\t\t\t/// <B>false</B> if the enumerator has passed the beginning or end of the list.\r\n\t\t\t/// </return>       \r\n\t\t\tpublic bool MovePrevious()\r\n\t\t\t{\r\n                // ensures the table first and skips deleted items:\r\n                SkipDeletedForward();   // note: forward really  // note (J): this really have to be called first\r\n                \r\n                // we are at the end of the list and not ready to start iteration:\r\n\t\t\t\tif (current == head && !starting) return false;\r\n\t\t\t\tstarting = false;\r\n\r\n                // move prev, and skips deleted elements backward:\r\n                current = current.Prev;\r\n                return SkipDeletedBackward() != head;\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool AtEnd\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// if the enumerator is in starting state, it's not considered to be at the end:\r\n\t\t\t\t\tif (starting) return false;\r\n\r\n                    // iterate while pointing to a deleted element:\r\n\t\t\t\t\treturn SkipDeletedForward() == head;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator<KeyValuePair<K, object>> Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets current pair.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic KeyValuePair<K, object> Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n                    // skip deleted elements (forward) and return current:\r\n\t\t\t\t\treturn SkipDeletedForward().Entry;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IDisposable Members\r\n\r\n\t\t\tpublic void Dispose()\r\n\t\t\t{\r\n                //// remove from the list of active enumerators:\r\n                //if (hashtable != null)\r\n                //    hashtable.UnregisterEnumerator(this as OrderedHashtable<IntStringKey>.Enumerator);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets current key-value pair or dictionary entry.\r\n\t\t\t/// </summary>\r\n\t\t\tobject IEnumerator.Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n                    return isGeneric ? Current : (object)((IDictionaryEnumerator)this).Entry;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Advances the enumerator to the next element of the hashtable's list.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <return>\r\n\t\t\t/// <B>true</B> if the enumerator was successfully advanced to the next element; \r\n\t\t\t/// <B>false</B> if the enumerator has passed the end or the beginning of the list.\r\n\t\t\t/// </return>  \r\n\t\t\tpublic bool MoveNext()\r\n\t\t\t{\r\n\t\t\t\t// we are at the end of the list and not ready to start iteration:\r\n                if (!starting)\r\n                {\r\n                    if (current == head)\r\n                        return false;\r\n                }\r\n                else\r\n                {\r\n                    starting = false;\r\n                }\r\n\r\n                // skips deleted items:\r\n                SkipDeletedForward(); // note (J): this really have to be called first\r\n                \r\n                // current ++, SkipDeletedForward();\r\n                do { current = current.Next; } while (current.IsDeleted);\r\n\r\n                // iterates while the \"current\" refereces a deleted element:\r\n                return current != head;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Moves the enumerator to the head of the list (i.e. before the first element) and enables new iteration.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n                // no need to ensure the table, head is head\r\n\r\n\t\t\t\tcurrent = head;\r\n\t\t\t\tstarting = true;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IDictionaryEnumerator Members\r\n\r\n\t\t\tDictionaryEntry IDictionaryEnumerator.Entry\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tKeyValuePair<K, object> pair = Current;\r\n\t\t\t\t\treturn new DictionaryEntry(pair.Key, pair.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tobject IDictionaryEnumerator.Key\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n                    return SkipDeletedForward().Key;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tobject IDictionaryEnumerator.Value\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n                    return SkipDeletedForward().Value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region List operations: LinkNextsByPrevs, LinkPrevsByNexts, ReversePrevLinks, ReverseNextLinks\r\n\r\n\t\t/// <summary>\r\n\t\t/// Links <see cref=\"Element.Next\"/> links according to <see cref=\"Element.Prev\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"head\">The head of the list.</param>\r\n\t\tinternal static void LinkNextsByPrevs(Element/*!*/ head)\r\n\t\t{\r\n\t\t\tElement iterator_next = head;\r\n\t\t\tElement iterator = head.Prev;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\titerator.Next = iterator_next;\r\n\t\t\t\titerator_next = iterator;\r\n\t\t\t\titerator = iterator.Prev;\r\n\t\t\t}\r\n\t\t\twhile (iterator_next != head);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Links <see cref=\"Element.Prev\"/> links according to <see cref=\"Element.Next\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"head\">The head of the list.</param>\r\n\t\tinternal static void LinkPrevsByNexts(Element/*!*/ head)\r\n\t\t{\r\n\t\t\tElement iterator_prev = head;\r\n\t\t\tElement iterator = head.Next;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\titerator.Prev = iterator_prev;\r\n\t\t\t\titerator_prev = iterator;\r\n\t\t\t\titerator = iterator.Next;\r\n\t\t\t}\r\n\t\t\twhile (iterator_prev != head);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reverses <see cref=\"Element.Prev\"/> links.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"head\">The head of the list.</param>\r\n\t\tinternal static void ReversePrevLinks(Element head)\r\n\t\t{\r\n            Element iterator_next = head;\r\n\t\t\tElement iterator = head.Prev;\r\n\t\t\tElement prev;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tprev = iterator.Prev;\r\n\t\t\t\titerator.Prev = iterator_next;\r\n\t\t\t\titerator_next = iterator;\r\n\t\t\t\titerator = prev;\r\n\t\t\t}\r\n\t\t\twhile (iterator_next != head);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Special Operations: AddBefore, AddAfter, Delete, Prepend, GetElement, SetElement, RemoveFirst, RemoveLast\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry pair into the table before a specified element. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"element\">The element before which to add new entry.</param>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tinternal Element/*!*/AddBefore(Element element, K key, object value)\r\n\t\t{\r\n            var new_element = new Element(this, key, value, element, element.Prev);\r\n            dict.Add(key, new_element);\r\n            new_element.Prev.Next = new_element;\r\n            new_element.Next.Prev = new_element;\r\n\r\n            return new_element;\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Adds deleted entry into the linked list only. There is no value and the element is marked as deleted immediately.\r\n        ///// </summary>\r\n        ///// <param name=\"element\">Element to add before.</param>\r\n        ///// <param name=\"key\">The key to be added.</param>\r\n        ///// <returns>Added element.</returns>\r\n        //internal Element/*!*/AddDeletedBefore(Element element, K key)\r\n        //{\r\n        //    var new_element = new Element(this, key, null, element, element.Prev);\r\n        //    new_element.Table = null;\r\n        //    new_element.Prev.Next = new_element;\r\n        //    new_element.Next.Prev = new_element;\r\n            \r\n        //    return new_element;\r\n        //}\r\n\r\n        /// <summary>\r\n\t\t/// Adds an entry pair into the table after a specified element. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"element\">The element before which to add new entry.</param>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tprivate void AddAfter(Element element, K key, object value)\r\n\t\t{\r\n\t\t\tElement new_element = new Element(this, key, value, element.Next, element);\r\n\t\t\tdict.Add(key, new_element);\r\n\t\t\tnew_element.Prev.Next = new_element;\r\n\t\t\tnew_element.Next.Prev = new_element;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disconnects an element from the list an marks it as deleted.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"element\">The element to be deleted.</param>\r\n\t\tinternal void Delete(Element element)\r\n\t\t{\r\n            // disconnects (unilaterally):\r\n            element.Prev.Next = element.Next;\r\n            element.Next.Prev = element.Prev;\r\n\r\n            // drop the value:\r\n            element.Value = null;\r\n\r\n\t\t\t// marks item as deleted:\r\n\t\t\telement.Table = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a key-value pair into the table at its logical beginning.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Prepend(K key, object value)\r\n\t\t{\r\n            this.CheckNotShared();\r\n\t\t\tAddAfter(head, key, value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an element representing the key-value pair in the table.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <returns>The element.</returns>\r\n\t\tpublic Element GetElement(K key)\r\n\t\t{\r\n\t\t\tElement element;\r\n\t\t\treturn dict.TryGetValue(key, out element) ? element : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets an element representing the key-value pair in the table.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"element\">The element.</param>\r\n\t\tinternal void RehashElement(Element/*!*/ element)\r\n\t\t{\r\n\t\t\tdict[element.Key] = element;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the last entry of the array and returns it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The last entry of the array.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n\t\tpublic KeyValuePair<K, object> RemoveLast()\r\n\t\t{\r\n\t\t\tif (this.Count == 0)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"item_removed_from_empty_array\"));\r\n\r\n            this.CheckNotShared();\r\n\r\n            var entry = head.Prev;\r\n            //// skip deleted\r\n            //while (entry.IsDeleted) entry = entry.Prev;\r\n\r\n            KeyValuePair<K, object> last_entry = entry.Entry;\r\n            Remove(entry.Key);\r\n\t\t\treturn last_entry;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the first entry of the array and returns it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The first entry of the array.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n\t\tpublic KeyValuePair<K, object> RemoveFirst()\r\n\t\t{\r\n\t\t\tif (this.Count == 0)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"item_removed_from_empty_array\"));\r\n\r\n            this.CheckNotShared();\r\n\r\n            var entry = head.Next;\r\n            //// skip deleted\r\n            //while (entry.IsDeleted) entry = entry.Next;\r\n\r\n            //\r\n\t\t\tKeyValuePair<K, object> first_entry = entry.Entry;\r\n\t\t\tRemove(entry.Key);\r\n\t\t\treturn first_entry;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICloneable\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a shallow copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The new hashtable.</returns>\r\n\t\t/// <remarks>This instance should not be interconnected with the other.</remarks>\r\n\t\t/// <exception cref=\"InvalidOperationException\">This table is interconnected with the other.</exception>\r\n\t\tpublic object Clone()\r\n\t\t{\r\n\t\t\tOrderedHashtable<K> result = new OrderedHashtable<K>(null, this.Count);\r\n\r\n\t\t\tfor (var iterator = head.Next; iterator != head; iterator = iterator.Next)\r\n            {\r\n                result.Add(iterator.Key, iterator.Value);\r\n\r\n            }\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDictionary<K,object> Members\r\n\r\n\t\tpublic bool TryGetValue(K key, out object value)\r\n\t\t{\r\n\t\t\tElement element;\r\n\t\t\tif (dict.TryGetValue(key, out element))\r\n\t\t\t{\r\n\t\t\t\tvalue = element.Value;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvalue = null;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a value associated with a key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key whose value to get or set.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\tpublic object this[K key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tElement element;\r\n\t\t\t\treturn dict.TryGetValue(key, out element) ? element.Value : null;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tElement element;\r\n\r\n\t\t\t\t// adds new element or changes an existing one:\r\n\t\t\t\tif (dict.TryGetValue(key, out element))\r\n\t\t\t\t\telement.Value = value;\r\n\t\t\t\telse\r\n\t\t\t\t\tAdd(key, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic bool ContainsKey(K key)\r\n\t\t{\r\n\t\t\treturn dict.ContainsKey(key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical end. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Add(K key, object value)\r\n\t\t{\r\n            this.CheckNotShared();\r\n\r\n\t\t\tAddBefore(head, key, value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes an entry pair from the table.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <returns>Whether the key was contained in the dictionary prior removal.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic bool Remove(K key)\r\n\t\t{\r\n\t\t\tElement element;\r\n\t\t\tif (dict.TryGetValue(key, out element))\r\n\t\t\t{\r\n                this.CheckNotShared();\r\n\r\n\t\t\t\t// removes from hashtable:\r\n\t\t\t\tdict.Remove(key);\r\n\r\n\t\t\t\t// removes from list:\r\n\t\t\t\tDelete(element);\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a collection of keys.\r\n\t\t/// </summary>\r\n\t\tpublic ICollection<K>/*!*/ Keys\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _keys ?? (_keys = new KeyCollection(this));\r\n\t\t\t}\r\n\t\t}\r\n\t\t[NonSerialized]\r\n\t\tprivate KeyCollection _keys;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a collection of values. \r\n\t\t/// </summary>\r\n\t\tpublic ICollection<object>/*!*/ Values\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn _values ?? (_values = new ValueCollection(this));\r\n\t\t\t}\r\n\t\t}\r\n\t\t[NonSerialized]\r\n\t\tprivate ValueCollection _values;\r\n\r\n\t\t#region Inner class: KeyCollection\r\n\r\n\t\t[Serializable]\r\n\t\tpublic sealed class KeyCollection : ICollection<K>, ICollection\r\n\t\t{\r\n\t\t\tprivate readonly OrderedHashtable<K>/*!*/ hashtable;\r\n\r\n\t\t\tinternal KeyCollection(OrderedHashtable<K>/*!*/ hashtable)\r\n\t\t\t{\r\n\t\t\t\tthis.hashtable = hashtable;\r\n\t\t\t}\r\n\r\n\t\t\t#region ICollection<K> Members\r\n\r\n\t\t\tpublic bool Contains(K item)\r\n\t\t\t{\r\n\t\t\t\treturn hashtable.ContainsKey(item);\r\n\t\t\t}\r\n\r\n\t\t\tpublic void CopyTo(K[]/*!*/ array, int index)\r\n\t\t\t{\r\n\t\t\t\tArrayUtils.CheckCopyTo(array, index, hashtable.Count);\r\n\r\n\t\t\t\t//foreach (KeyValuePair<K, object> entry in hashtable)\r\n                for (var p = hashtable.head.Next; p != hashtable.head; p = p.Next)\r\n                    //if (!p.IsDeleted)\r\n\t\t\t\t\t    array[index++] = p.Key;\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool IsReadOnly { get { return true; } }\r\n\r\n\t\t\tpublic void Add(K item)\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\tpublic void Clear()\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool Remove(K item)\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region ICollection Members\r\n\r\n\t\t\tpublic int Count { get { return hashtable.Count; } }\r\n\r\n\t\t\tpublic bool IsSynchronized { get { return false; } }\r\n\r\n\t\t\tpublic object SyncRoot { get { return this; } }\r\n\r\n            void ICollection.CopyTo(Array/*!*/ array, int index)\r\n            {\r\n                CopyTo((K[])array, index);\r\n            }\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerable<K> Members\r\n\r\n\t\t\tpublic IEnumerator<K> GetEnumerator()\r\n\t\t\t{\r\n\t\t\t\t//foreach (KeyValuePair<K, object> pair in hashtable)\r\n                for (var p = hashtable.head.Next; p != hashtable.head; p = p.Next)\r\n                    //if (!p.IsDeleted)\r\n\t\t\t\t\t    yield return p.Key;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerable Members\r\n\r\n\t\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t\t{\r\n\t\t\t\treturn GetEnumerator();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inner class: ValueCollection\r\n\r\n\t\t/// <summary>\r\n\t\t/// Auxiliary collection used for manipulating keys or values of PhpHashtable.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tpublic sealed class ValueCollection : ICollection<object>, ICollection\r\n\t\t{\r\n\t\t\tprivate readonly OrderedHashtable<K>/*!*/ hashtable;\r\n\r\n\t\t\tinternal ValueCollection(OrderedHashtable<K>/*!*/ hashtable)\r\n\t\t\t{\r\n\t\t\t\tthis.hashtable = hashtable;\r\n\t\t\t}\r\n\r\n\t\t\t#region ICollection<object> Members\r\n\r\n\t\t\tpublic bool Contains(object item)\r\n\t\t\t{\r\n                for (var p = hashtable.head.Next; p != hashtable.head; p = p.Next)\r\n                    //if (!p.IsDeleted)\r\n                        if (p.Value == item)\r\n                            return true;\r\n\r\n                return false;\r\n\t\t\t}\r\n\r\n\t\t\tpublic void CopyTo(object[]/*!*/ array, int index)\r\n\t\t\t{\r\n\t\t\t\tArrayUtils.CheckCopyTo(array, index, hashtable.Count);\r\n\r\n\t\t\t\tfor (var p = hashtable.head.Next; p != hashtable.head; p = p.Next)\r\n                    //if (!p.IsDeleted)\r\n                        array[index++] = p.Value;\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool IsReadOnly { get { return true; } }\r\n\r\n\t\t\tpublic void Add(object item)\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\tpublic void Clear()\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool Remove(object item)\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region ICollection Members\r\n\r\n\t\t\tpublic int Count { get { return hashtable.Count; } }\r\n\r\n\t\t\tpublic bool IsSynchronized { get { return false; } }\r\n\r\n\t\t\tpublic object SyncRoot { get { return this; } }\r\n\r\n\t\t\tpublic void CopyTo(Array/*!*/ array, int index)\r\n\t\t\t{\r\n\t\t\t\tCopyTo((object[])array, index);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerable<object> Members\r\n\r\n\t\t\tpublic IEnumerator<object> GetEnumerator()\r\n\t\t\t{\r\n                //foreach (KeyValuePair<K, object> pair in hashtable)\r\n\t\t\t\tfor (var p = hashtable.head.Next; p != hashtable.head; p = p.Next)\r\n                    //if (!p.IsDeleted)\r\n                        yield return p.Value;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerable Members\r\n\r\n\t\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t\t{\r\n\t\t\t\treturn GetEnumerator();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICollection<KeyValuePair<K,object>> Members\r\n\r\n\t\tpublic void CopyTo(KeyValuePair<K, object>[]/*!*/ array, int index)\r\n\t\t{\r\n\t\t\tArrayUtils.CheckCopyTo(array, index, this.Count);\r\n\r\n\t\t\tElement iterator = head.Next;\r\n\t\t\twhile (iterator != head)\r\n\t\t\t{\r\n\t\t\t\tarray[index] = iterator.Entry;\r\n\t\t\t\titerator = iterator.Next;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvoid ICollection<KeyValuePair<K, object>>.Add(KeyValuePair<K, object> item)\r\n\t\t{\r\n\t\t\tAdd(item.Key, item.Value);\r\n\t\t}\r\n\r\n\t\tbool ICollection<KeyValuePair<K, object>>.Contains(KeyValuePair<K, object> item)\r\n\t\t{\r\n\t\t\tobject value;\r\n\t\t\treturn TryGetValue(item.Key, out value) && EqualityComparer<object>.Default.Equals(value, item.Value);\r\n\t\t}\r\n\r\n\t\tpublic bool IsReadOnly\r\n\t\t{\r\n\t\t\tget { return false; }\r\n\t\t}\r\n\r\n\t\tbool ICollection<KeyValuePair<K, object>>.Remove(KeyValuePair<K, object> item)\r\n\t\t{\r\n\t\t\tobject value;\r\n\t\t\tif (TryGetValue(item.Key, out value) && EqualityComparer<object>.Default.Equals(value, item.Value))\r\n\t\t\t{\r\n\t\t\t\tRemove(item.Key);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable<KeyValuePair<K,object>> Members\r\n\r\n\t\tIEnumerator<KeyValuePair<K, object>>/*!*/ IEnumerable<KeyValuePair<K, object>>.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn new Enumerator(this, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tIEnumerator/*!*/ IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn new Enumerator(this, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDictionary Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes all elements from the table.\r\n\t\t/// </summary>\r\n\t\tpublic void Clear()\r\n\t\t{\r\n            this.CheckNotShared();\r\n\r\n\t\t\tdict.Clear();\r\n\t\t\thead.Next = head;\r\n\t\t\thead.Prev = head;\r\n\t\t}\r\n\r\n\t\tpublic bool IsFixedSize { get { return false; } }\r\n\r\n\t\tICollection IDictionary.Keys { get { return (ICollection)dict.Keys; } }\r\n\r\n\t\tICollection IDictionary.Values { get { return (ICollection)this.Values; } }\r\n\r\n\t\tvoid IDictionary.Add(object key, object value)\r\n\t\t{\r\n\t\t\tthis.Add((K)key, value);\r\n\t\t}\r\n\r\n\t\tbool IDictionary.Contains(object key)\r\n\t\t{\r\n\t\t\treturn dict.ContainsKey((K)key);\r\n\t\t}\r\n\r\n\t\tIDictionaryEnumerator IDictionary.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn new Enumerator(this, false);\r\n\t\t}\r\n\r\n\t\tvoid IDictionary.Remove(object key)\r\n\t\t{\r\n\t\t\tthis.Remove((K)key);\r\n\t\t}\r\n\r\n\t\tobject IDictionary.this[object key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this[(K)key];\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis[(K)key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICollection Members\r\n\r\n\t\tpublic int Count { get { return dict.Count; } }\r\n\r\n\t\tpublic bool IsSynchronized { get { return false; } }\r\n\r\n\t\tpublic object SyncRoot { get { return ((ICollection)dict).SyncRoot; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copies values stored in this table and the interconnected table to a given array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array where to copy values. The array is expected to be already allocated.</param>\r\n\t\t/// <param name=\"index\">The index to the <paramref name=\"array\"/> where the first value stored in the hashtable will be copied to.</param>\r\n\t\tvoid ICollection.CopyTo(Array/*!*/ array, int index)\r\n\t\t{\r\n\t\t\tArrayUtils.CheckCopyTo(array, index, this.Count);\r\n\r\n\t\t\tKeyValuePair<K, object>[] pairs = array as KeyValuePair<K, object>[];\r\n\t\t\tif (pairs != null)\r\n\t\t\t{\r\n\t\t\t\tCopyTo(pairs, index);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tDictionaryEntry[] entries = array as DictionaryEntry[];\r\n\t\t\tif (entries != null)\r\n\t\t\t{\r\n\t\t\t\tCopyTo(entries, index);\r\n\t\t\t}\r\n\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tprivate void CopyTo(DictionaryEntry[]/*!*/ array, int index)\r\n\t\t{\r\n\t\t\tElement iterator = head.Next;\r\n\t\t\twhile (iterator != head)\r\n\t\t\t{\r\n\t\t\t\tarray[index] = new DictionaryEntry(iterator.Key, iterator.Value);\r\n\t\t\t\titerator = iterator.Next;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Enumerator\r\n\r\n\t\tpublic Enumerator/*!*/ GetEnumerator()\r\n\t\t{\r\n\t\t\treturn new Enumerator(this, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t// CLR only //\r\n\r\n\t\t#region ISerializable (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tinfo.AddValue(\"dict\", dict);\r\n\t\t\tinfo.AddValue(\"head\", head);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprivate OrderedHashtable(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tdict = (Dictionary<K, Element>)info.GetValue(\"dict\", typeof(Dictionary<K, Element>));\r\n\t\t\thead = (Element)info.GetValue(\"head\", typeof(Element));\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\r\n\t\t// Advanced Operations //\r\n\r\n\t\t#region Sorting\r\n\r\n\t\t/// <remarks>\r\n\t\t/// Stably sorts a portion of a list of <see cref=\"Element\"/>s.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"comparer\">The comparer used to sort elements.</param>\r\n\t\t/// <param name=\"count\">The length of the portion of elements to sort.</param>\r\n\t\t/// <param name=\"first\">The first element in the portion.</param>\r\n\t\t/// <param name=\"next\">The element following the last element of the portion before a call is made.</param>\r\n\t\t/// <param name=\"successor\">The element which will be set as successor of the last element of the list.</param>\r\n\t\t/// <returns>The sorted portion. Reference to the first element of unidirectional list.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>The list's first element is referenced by the <paramref name=\"first\"/> parameter.</para>\r\n\t\t/// <para>The portion is <paramref name=\"count\"/> elements long. A reference to an element which has immediately \r\n\t\t/// followed the last element of the sorted portion before the method had been called will be returned \r\n\t\t/// in the <paramref name=\"next\"/>.</para>\r\n\t\t/// <para>The portion is sorted and the resulting unidirectional list is returned. Elements\r\n\t\t/// are joined only in one direction - <see cref=\"Element.Next\"/> fields of elements are connected. \r\n\t\t/// <see cref=\"Element.Prev\"/> fields have to be connected subsequently as well as the head of the list.</para>\r\n\t\t/// <para>The sort is stable, key-value associations are preserved as well as <see cref=\"Element.Prev\"/> references.</para>\r\n\t\t/// </remarks>\r\n\t\tprivate static Element MergeSortRecursive(IComparer<KeyValuePair<K, object>>/*!*/ comparer, Element/*!*/ successor,\r\n\t\t\tint count, Element/*!*/ first, out Element/*!*/ next)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null && successor != null && first != null);\r\n\r\n\t\t\t// only one element remains:\r\n\t\t\tif (count == 1)\r\n\t\t\t{\r\n\t\t\t\tnext = first.Next;\r\n\r\n\t\t\t\t// store the successor here - all references to the successor will be \r\n\t\t\t\t// overwritten by sorting expcept for the one which will be the very \r\n\t\t\t\t// last in the sorted list (that's what we want):\r\n\t\t\t\tfirst.Next = successor;\r\n\r\n\t\t\t\treturn first;\r\n\t\t\t}\r\n\r\n\t\t\tint alen = count >> 1;\r\n\t\t\tint blen = count - alen;\r\n\t\t\tDebug.Assert(alen <= blen && alen > 0);\r\n\r\n\t\t\t// divides the portion into two lists (a and b) and sorts them:\r\n\t\t\tElement result;\r\n\t\t\tElement a = MergeSortRecursive(comparer, successor, alen, first, out result);\r\n\t\t\tElement b = MergeSortRecursive(comparer, successor, blen, result, out next);\r\n\r\n\t\t\t// initializes merging - sets the first element of the result list:\r\n\t\t\tif (comparer.Compare(a.Entry, b.Entry) <= 0)\r\n\t\t\t{\r\n\t\t\t\t// if there is exactly one element in the a list returns (a,b) list:\r\n\t\t\t\tif (--alen == 0) { a.Next = b; return a; }\r\n\t\t\t\tresult = a;\r\n\t\t\t\ta = a.Next;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// if there is exactly one element in the b list returns (a,b) list:\r\n\t\t\t\tif (--blen == 0) { b.Next = a; return b; }\r\n\t\t\t\tresult = b;\r\n\t\t\t\tb = b.Next;\r\n\t\t\t}\r\n\r\n\t\t\t// merges \"a\" and \"b\" lists into the \"result\";\r\n\t\t\t// \"iterator\" points to the last element added to the \"result\", \r\n\t\t\t// \"a\" and \"b\" references moves along the respective lists:\r\n\t\t\tElement iterator = result;\r\n\t\t\tDebug.Assert(alen > 0 && blen > 0);\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tif (comparer.Compare(a.Entry, b.Entry) <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// adds element from list \"a\" to the \"result\":\r\n\t\t\t\t\titerator = iterator.Next = a;\r\n\r\n\t\t\t\t\tif (--alen == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// adds remaining elements to the result: \r\n\t\t\t\t\t\tif (blen > 0) iterator.Next = b;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// advances \"a\" pointer:\r\n\t\t\t\t\ta = a.Next;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// adds element from list \"b\" to the \"result\":\r\n\t\t\t\t\titerator = iterator.Next = b;\r\n\r\n\t\t\t\t\tif (--blen == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// adds remaining elements to the result: \r\n\t\t\t\t\t\tif (alen > 0) iterator.Next = a;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// advances \"a\" pointer:\r\n\t\t\t\t\tb = b.Next;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Interconnects elements of given lists into a grid using their <see cref=\"Element.Prev\"/> fields.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"iterators\">Elements referencing heads of the lists at the beginning and at the end as well.</param>\r\n\t\t/// <param name=\"count\">The number of elements in each and every list.</param>\r\n\t\t/// <remarks>\r\n\t\t/// The grid: <BR/>\r\n\t\t/// <PRE>\r\n\t\t///  H H H\r\n\t\t///  | | |\r\n\t\t/// ~o~o~o~\r\n\t\t///  | | |   ~ = Prev (right to left), cyclic without a head (necessary)\r\n\t\t/// ~o~o~o~  - = Next (top to bottom), cyclic with a head (not necessary)\r\n\t\t///  | | |\r\n\t\t/// </PRE>\r\n\t\t/// </remarks>\r\n\t\tinternal static void InterconnectGrid(int count, Element[]/*!!*/ iterators)\r\n\t\t{\r\n\t\t\tint last = iterators.Length - 1;\r\n\r\n\t\t\t// moves all iterators to the respective first elements:\r\n\t\t\tfor (int i = 0; i <= last; i++)\r\n\t\t\t\titerators[i] = iterators[i].Next;\r\n\r\n\t\t\twhile (count-- > 0)\r\n\t\t\t{\r\n\t\t\t\t// sets Prev field of the first iterator:\r\n\t\t\t\titerators[0].Prev = iterators[last];\r\n\r\n\t\t\t\t// all iterators except for the last one:\r\n\t\t\t\tfor (int i = 0; i < last; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\titerators[i + 1].Prev = iterators[i];\r\n\t\t\t\t\titerators[i] = iterators[i].Next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// advances the last iterator:\r\n\t\t\t\titerators[last] = iterators[last].Next;\r\n\t\t\t}\r\n\r\n\t\t\t// all iterators are on the respective heads now:\r\n\t\t\tfor (int i = 0; i <= last; i++)\r\n\t\t\t\tDebug.Assert(iterators[i].IsHead);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disconnects elements of lists each from other.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"count\">The number of elements in each and every list.</param>\r\n\t\t/// <param name=\"iterators\">Elements referencing heads of the lists at the beginning and at the end as well.</param>\r\n\t\tinternal static void DisconnectGrid(int count, Element[] iterators)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < iterators.Length; i++)\r\n\t\t\t{\r\n\t\t\t\t// restores Prev references in all elements of the i-th list except for the head:\r\n\t\t\t\tElement iterator = iterators[i];\r\n\t\t\t\tfor (int j = 0; j <= count; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\titerator.Next.Prev = iterator;\r\n\t\t\t\t\titerator = iterator.Next;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reorders a minor list according to the major one. \"Straightens\" horizontal interconnection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"count\">The number of elements in each and every list.</param>\r\n\t\t/// <param name=\"minorHead\">The head of a minor list.</param>\r\n\t\t/// <param name=\"majorHead\">The head of a major list.</param>\r\n\t\tinternal static void ReorderList(int count, Element minorHead, Element majorHead)\r\n\t\t{\r\n\t\t\tElement major = majorHead.Next;\r\n\t\t\tElement minor = minorHead;\r\n\r\n\t\t\twhile (count-- > 0)\r\n\t\t\t{\r\n\t\t\t\tminor.Next = major.Prev;\r\n\t\t\t\tminor = minor.Next;\r\n\t\t\t\tmajor = major.Next;\r\n\t\t\t}\r\n\r\n\t\t\tminor.Next = minorHead;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts multiple lists given comparer for each hashtable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"count\">The number of items in each and every list.</param>\r\n\t\t/// <param name=\"heads\">Heads of lists.</param>\r\n\t\t/// <param name=\"comparers\">Comperers to be used for lexicographical comparison.</param>\r\n\t\tinternal static void Sort(int count, Element[]/*!!*/ heads, IComparer<KeyValuePair<K, object>>[]/*!!*/ comparers)\r\n\t\t// TODO: IComparer<KeyValuePair<K, object>>\r\n\t\t{\r\n\t\t\tElement next;\r\n\t\t\tint length = heads.Length;\r\n\t\t\tint last = length - 1;\r\n\r\n            // nothing to do:\r\n            if (count == 0) return;\r\n\r\n\t\t\t// interconnects all lists into a grid, heads are unchanged:\r\n\t\t\tInterconnectGrid(count, heads);\r\n\r\n\t\t\t// lists are only single-linked cyclic and \"heads\" are unchanged from here on:\r\n\t\t\tfor (int i = last; i > 0; i--)\r\n\t\t\t{\r\n\t\t\t\t// sorts i-th list (doesn't modify Prev and keeps the list cyclic):\r\n\t\t\t\theads[i].Next = MergeSortRecursive(comparers[i], heads[i], count, heads[i].Next, out next);\r\n\t\t\t\tDebug.Assert(next == heads[i]);\r\n\r\n\t\t\t\t// reorders the (i-1)-the list according to the the i-th one:\r\n\t\t\t\tReorderList(count, heads[i - 1], heads[i]);\r\n\t\t\t}\r\n\r\n\t\t\t// sorts the 0-th list (its order will determine the order of whole grid rows):\r\n\t\t\theads[0].Next = MergeSortRecursive(comparers[0], heads[0], count, heads[0].Next, out next);\r\n\t\t\tDebug.Assert(next == heads[0]);\r\n\r\n\t\t\t// reorders the last list according to the 0-th one:\r\n\t\t\tReorderList(count, heads[last], heads[0]);\r\n\r\n\t\t\t// reorders remaining lists (if any):\r\n\t\t\tfor (int i = last; i >= 2; i--)\r\n\t\t\t\tReorderList(count, heads[i - 1], heads[i]);\r\n\r\n\t\t\t// disconnects lists from each other and reconstructs their double-linked structure:\r\n\t\t\tDisconnectGrid(count, heads);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts elements of the hashtable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer used for sorting.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Changes only the prev/next references of elements contained. \r\n\t\t/// Entries are neither copied nor modified.\r\n\t\t/// Affects interconnected table's items as well.\r\n\t\t/// </remarks>\r\n\t\tpublic void Sort(IComparer<KeyValuePair<K, object>>/*!*/ comparer)\r\n\t\t{\r\n\t\t\t// total number of elements (interconnected table has to be taken into consideration): \r\n\t\t\tint count = this.Count;\r\n\t\t\tif (count <= 1) return;\r\n\r\n            this.CheckNotShared();\r\n\r\n\t\t\t// sort whole list of elements:\r\n\t\t\tElement next;\r\n\t\t\thead.Next = MergeSortRecursive(comparer, head, count, head.Next, out next);\r\n\t\t\tDebug.Assert(next == head);\r\n\r\n\t\t\t// links Prevs according to Nexts:\r\n\t\t\tLinkPrevsByNexts(head);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Sorts multiple hashtables given comparer for each hashtable.\r\n        ///// </summary>\r\n        ///// <param name=\"hashtables\">Collection of Ordered Hashtables. All these tables has to be of the same length.</param> \r\n        ///// <param name=\"comparers\">\r\n        ///// Array of comparers.\r\n        ///// The number of comparers has to be the same as the number of <paramref name=\"hashtables\"/>.\r\n        ///// </param>\r\n        ///// <remarks>\r\n        ///// Sorts lexicographically all <paramref name=\"hashtables\"/> from the first to the last one using \r\n        ///// <paramref name=\"comparers\"/> successively. Changes only order of entries in <paramref name=\"hashtables\"/>.\r\n        ///// </remarks>\r\n        ///// <exception cref=\"ArgumentNullException\"><paramref name=\"hashtables\"/> or <paramref name=\"comparers\"/> is a <B>null</B> reference.</exception>\r\n        //public static void Sort(ICollection<OrderedHashtable<K>>/*!*/ hashtables,\r\n        //    IComparer<KeyValuePair<K, object>>[]/*!!*/ comparers)\r\n        //{\r\n        //    #region requires (hashtables && comparer && comparers.Length==hashtables.Length)\r\n\r\n        //    if (hashtables == null)\r\n        //        throw new ArgumentNullException(\"hashtables\");\r\n        //    if (comparers == null)\r\n        //        throw new ArgumentNullException(\"comparers\");\r\n        //    if (hashtables.Count != comparers.Length)\r\n        //        throw new ArgumentException(CoreResources.GetString(\"lengths_are_different\", \"hashtables\", \"comparers\"));\r\n\r\n        //    #endregion\r\n\r\n        //    if (comparers.Length == 0) return;\r\n\r\n        //    IEnumerator<OrderedHashtable<K>> iterator = hashtables.GetEnumerator();\r\n        //    iterator.MoveNext();\r\n\r\n        //    int count = iterator.Current.Count;\r\n        //    Element[] heads = new Element[hashtables.Count];\r\n        //    for (int i = 0; i < hashtables.Count; i++)\r\n        //    {\r\n        //        if (count != iterator.Current.Count)\r\n        //            throw new ArgumentException(CoreResources.GetString(\"lengths_are_different\", \"hashtables[0]\", String.Format(\"hashtables[{0}]\", i)), \"hashtables\");\r\n\r\n        //        heads[i] = iterator.Current.head;\r\n        //        iterator.MoveNext();\r\n        //    }\r\n\r\n        //    Sort(count, heads, comparers);\r\n        //}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Set Operations: Difference and Intersection\r\n\r\n        ///// <summary>\r\n        ///// Enumerates over a collection of ordered hashtables using specified enumerator \r\n        ///// returning heads of visited hashtables.\r\n        ///// </summary>\r\n        //internal class HeadsProvider : IEnumerator                                             // GENERICS: IEnumerator<Element>\r\n        //{\r\n        //    private IEnumerator hashtables;                                                      // GENERICS: IEnumerator<OrderedHashtable>\r\n\r\n        //    public HeadsProvider(IEnumerator hashtables) { this.hashtables = hashtables; }\r\n        //    public void Reset() { hashtables.Reset(); }\r\n        //    public bool MoveNext() { return hashtables.MoveNext(); }\r\n\r\n        //    public object Current\r\n        //    {\r\n        //        get\r\n        //        {\r\n        //            return (hashtables.Current != null) ? ((OrderedHashtable<IntStringKey>)hashtables.Current).head : null;\r\n        //        }\r\n        //    }\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs diff operation on the list of this instance and the other list.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"op\">The operation.</param>\r\n\t\t/// <param name=\"otherHead\">A head of the other list.</param>\r\n\t\t/// <param name=\"comparer\">A comparer.</param>\r\n        /// <remarks>Updates only <see cref=\"Element.Next\"/> link. <see cref=\"Element.Prev\"/> is preserved so the operation can be eventually reverted.</remarks>\r\n\t\tprivate void SetOperation(SetOperations op, Element/*!*/ otherHead, IComparer<KeyValuePair<K, object>>/*!*/ comparer)\r\n\t\t{\r\n\t\t\tDebug.Assert(otherHead != null && comparer != null);\r\n\r\n\t\t\tElement other_iterator = otherHead.Next;\r\n\t\t\tElement iterator = head.Next;\r\n\t\t\tElement iterator_prev = head;\r\n\r\n\t\t\twhile (iterator != head && other_iterator != otherHead)\r\n\t\t\t{\r\n\t\t\t\tKeyValuePair<K, object> entry = iterator.Entry;\r\n\t\t\t\tKeyValuePair<K, object> other_entry = other_iterator.Entry;\r\n\r\n\t\t\t\tint cmp = comparer.Compare(entry, other_entry);\r\n\t\t\t\tif (cmp > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// advance the other list iterator:\r\n\t\t\t\t\tother_iterator = other_iterator.Next;\r\n\t\t\t\t}\r\n\t\t\t\telse if (cmp < 0 ^ op == SetOperations.Difference)\r\n\t\t\t\t{\r\n\t\t\t\t\t// marks and skips the current element in the instance list, advances iterator:\r\n\t\t\t\t\titerator_prev.Next = iterator.Next;\r\n\t\t\t\t\titerator.Next = null;\r\n\t\t\t\t\titerator = iterator_prev.Next;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// advance this instance list iterator:\r\n\t\t\t\t\titerator_prev = iterator;\r\n\t\t\t\t\titerator = iterator.Next;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// marks the remaining elements:\r\n\t\t\tif (op == SetOperations.Intersection)\r\n\t\t\t{\r\n\t\t\t\twhile (iterator != head)\r\n\t\t\t\t{\r\n\t\t\t\t\t// marks and skips the current element in the instance list, advances iterator:\r\n\t\t\t\t\titerator_prev.Next = iterator.Next;\r\n\t\t\t\t\titerator.Next = null;\r\n\t\t\t\t\titerator = iterator_prev.Next;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the difference of this instance elemens and elements of the specified lists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"op\">The operation.</param>\r\n\t\t/// <param name=\"heads\">The <see cref=\"IEnumerator\"/> of heads of lists to take away from this instance.</param>\r\n\t\t/// <param name=\"comparer\">The comparer of entries.</param>\r\n\t\t/// <param name=\"result\">The <see cref=\"IDictionary\"/> where to add remaining items.</param>\r\n\t\tinternal void SetOperation(SetOperations op, IEnumerable<Element>/*!*/ heads,\r\n\t\t\tIComparer<KeyValuePair<K, object>>/*!*/ comparer, IDictionary<K, object>/*!*/ result)\r\n\t\t{\r\n\t\t\tDebug.Assert(heads != null && comparer != null && result != null);\r\n\r\n\t\t\tElement next, iterator;\r\n\t\t\tint count = this.Count;\r\n\r\n\t\t\t// nothing to do:\r\n\t\t\tif (count == 0) return;\r\n\r\n\t\t\t// sorts this instance list (doesn't modify Prevs and keeps list cyclic):\r\n\t\t\thead.Next = MergeSortRecursive(comparer, head, count, head.Next, out next);\r\n\t\t\tDebug.Assert(next == head);\r\n\r\n\t\t\tforeach (Element other_head in heads)\r\n\t\t\t{\r\n\t\t\t\t// total number of elements in diff list:\r\n\t\t\t\tcount = (other_head != null) ? other_head.Table.Count : 0;\r\n\r\n\t\t\t\t// result is empty - either the list is differentiated with itself or intersected with an empty set:\r\n\t\t\t\tif (other_head == head && op == SetOperations.Difference || count == 0 && op == SetOperations.Intersection)\r\n\t\t\t\t{\r\n\t\t\t\t\t// reconstructs double linked list skipping elements marked as deleted:\r\n\t\t\t\t\tLinkNextsByPrevs(head);\r\n\r\n\t\t\t\t\t// the result is empty:\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// skip operation (nothing new can be added):\r\n\t\t\t\tif (other_head == head && op == SetOperations.Intersection || count == 0 && op == SetOperations.Difference)\r\n\t\t\t\t\tcontinue;\r\n\r\n\t\t\t\t// sorts other_head's list (doesn't modify Prevs and keeps list cyclic):\r\n\t\t\t\tother_head.Next = MergeSortRecursive(comparer, other_head, count, other_head.Next, out next);\r\n\t\t\t\tDebug.Assert(next == other_head);\r\n\r\n\t\t\t\t// applies operation on the instance list and the other list:\r\n\t\t\t\tSetOperation(op, other_head, comparer);\r\n\r\n\t\t\t\t// rolls mergesort back:\r\n\t\t\t\tLinkNextsByPrevs(other_head);\r\n\r\n\t\t\t\t// instance list is empty:\r\n\t\t\t\tif (head.Next == head) break;\r\n\t\t\t}\r\n\r\n\t\t\tReversePrevLinks(head);\r\n\r\n\t\t\t// adds remaining elements to a dictionary:\r\n\t\t\titerator = head.Prev;\r\n\t\t\twhile (iterator != head)\r\n\t\t\t{\r\n\t\t\t\tif (iterator.Next != null)\r\n\t\t\t\t\tresult.Add(iterator.Key, iterator.Value);\r\n\t\t\t\titerator = iterator.Prev;\r\n\t\t\t}\r\n\r\n\t\t\tReversePrevLinks(head);\r\n\r\n\t\t\t// reconstructs double linked list skipping elements marked as deleted:\r\n\t\t\tLinkNextsByPrevs(head);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Computes the difference or intersection of specified Ordered Hashtables.\r\n        ///// </summary>\r\n        ///// <param name=\"op\">The operation to be performed.</param>\r\n        ///// <param name=\"hashtables\">The <see cref=\"ICollection\"/> of <see cref=\"PhpHashtable\"/>s.</param>\r\n        ///// <param name=\"comparer\">The comparer used to compare entries of <paramref name=\"hashtables\"/>.</param>\r\n        ///// <param name=\"result\">The dictionary where to add remaining elements.</param>\r\n        ///// <remarks>\r\n        ///// Preserves order of the entries in this instance. \r\n        ///// </remarks>\r\n        ///// <exception cref=\"ArgumentNullException\"><paramref name=\"hashtables\"/> or <paramref name=\"comparer\"/> or <paramref name=\"result\"/> is a <B>null</B> reference.</exception>\r\n        ///// <exception cref=\"ArgumentException\"><paramref name=\"result\"/> references this instance.</exception>\r\n        //public void SetOperation(SetOperations op, ICollection<OrderedHashtable<K>>/*!*/ hashtables,\r\n        //        IComparer<KeyValuePair<K, object>>/*!*/ comparer, IDictionary<K, object>/*!*/ result)\r\n        //{\r\n        //    #region Requires (hashtables && comparer && result && result!=this)\r\n\r\n        //    if (hashtables == null)\r\n        //        throw new ArgumentNullException(\"hashtables\");\r\n        //    if (comparer == null)\r\n        //        throw new ArgumentNullException(\"comparers\");\r\n        //    if (result == null)\r\n        //        throw new ArgumentNullException(\"result\");\r\n        //    if (result == this)\r\n        //        throw new ArgumentException(CoreResources.GetString(\"argument_equals\", \"result\", \"this\"));\r\n\r\n        //    #endregion\r\n\r\n        //    if (hashtables.Count == 0) return;\r\n\r\n        //    SetOperation(op, EnumerateHeads(hashtables), comparer, result);\r\n        //}\r\n\r\n        //private IEnumerable<Element>/*!*/ EnumerateHeads(ICollection<OrderedHashtable<K>>/*!*/ hashtables)\r\n        //{\r\n        //    foreach (OrderedHashtable<K> hashtable in hashtables)\r\n        //    {\r\n        //        yield return (hashtable != null) ? hashtable.head : null;\r\n        //    }\r\n        //}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reverse, Shuffle\r\n\r\n        ///// <summary>\r\n        ///// Reverses an order of items in the hashtable.\r\n        ///// </summary>\r\n        ///// <remarks>\r\n        ///// Changes only the prev/next references of elements contained. \r\n        ///// Entries are neither copied nor modified.\r\n        ///// Affects interconnected table's items as well.\r\n        ///// </remarks>\r\n        //public void Reverse()\r\n        //{\r\n        //    this.CheckNotShared();\r\n\r\n        //    Element iterator, next;\r\n\r\n        //    // exchanges prev and next references in head:\r\n        //    iterator = head.Next;\r\n        //    head.Next = head.Prev;\r\n        //    head.Prev = iterator;\r\n\r\n        //    while (iterator != head)\r\n        //    {\r\n        //        // exchanges prev and next references:\r\n        //        next = iterator.Next;\r\n        //        iterator.Next = iterator.Prev;\r\n        //        iterator.Prev = next;\r\n\r\n        //        iterator = next;\r\n        //    }\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shuffles order of elements in the hashtable at random.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"generator\">Some initialized random number generator.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Changes only the prev/next references of elements contained. \r\n\t\t/// Entries are neither copied nor modified.\r\n\t\t/// Affects interconnected table's items as well.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"generator\"/> is a <b>null</b> reference.</exception>\r\n\t\tpublic void Shuffle(Random generator)\r\n\t\t{\r\n\t\t\tif (generator == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"generator\");\r\n\r\n            // total number of elements (interconnected table has to be taken into consideration): \r\n\t\t\tint count = this.Count;\r\n\t\t\tif (count <= 1) return;\r\n\r\n            this.CheckNotShared(); \r\n            \r\n            int i, p, n;\r\n\t\t\tElement element;\r\n\t\t\tElement[] elements = new Element[count + 2];\r\n\r\n\t\t\t// stores references to elements into an array (0 is head, 1..count are elements, count+1 is head):\r\n\t\t\telement = head;\r\n\t\t\tfor (i = 0; i <= count + 1; i++)\r\n\t\t\t{\r\n\t\t\t\telements[i] = element;\r\n\t\t\t\telement = element.Next;\r\n\t\t\t}\r\n\r\n\t\t\t// Takes n-th element from the array at random with probability 1/i\r\n\t\t\t// and exchanges it with the one on the i-th position.\r\n\t\t\t// Thus a random permutation is formed in the second part of an array (from i to count)\r\n\t\t\t// and the set of remaining elements is stored in the first part.\r\n\t\t\tfor (i = count; i > 1; i--)\r\n\t\t\t{\r\n\t\t\t\tn = generator.Next(i) + 1;\r\n\r\n\t\t\t\telement = elements[i];\r\n\t\t\t\telements[i] = elements[n];\r\n\t\t\t\telements[n] = element;\r\n\t\t\t}\r\n\r\n\t\t\t// connects elements into cyclic bidirectional list:\r\n\t\t\tfor (p = 0, i = 1, n = 2; i <= count; i++)\r\n\t\t\t{\r\n\t\t\t\telements[i].Next = elements[n++];\r\n\t\t\t\telements[i].Prev = elements[p++];\r\n\t\t\t}\r\n\t\t\thead.Next = elements[1];\r\n\t\t\thead.Prev = elements[count];\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Rehashing\r\n\r\n\t\tinternal void BaseClear()\r\n\t\t{\r\n\t\t\tdict.Clear();\r\n\t\t}\r\n\r\n        //internal void BaseRemove(K key)\r\n        //{\r\n        //    dict.Remove(key);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Rehashes elements of the list associated with this table to the underlying hashtable  \r\n        ///// using keys stored in the list for hashing.\r\n        ///// </summary>\r\n        ///// <param name=\"clear\">Whether to clear the underlying hashtable before rehashing.</param>\r\n        ///// <remarks>\r\n        ///// <para>\r\n        ///// Items which belongs to interconnected table as well as deleted items are skipped.\r\n        ///// </para>\r\n        ///// <para>\r\n        ///// Used on tables which are in inconsistent state - keys in elements of the list \r\n        ///// don't correspond those in hashtable. That's why this method should not be public.\r\n        ///// </para>    \r\n        ///// </remarks>\r\n        //internal void Rehash(bool clear)\r\n        //{\r\n        //    // clears items in the underlying hashtable, no changes to the list are made: \r\n        //    if (clear) Clear();\r\n\r\n        //    // adds items stored in the list to the underlying hashtable; \r\n        //    // overwrites items already contained in the table:\r\n        //    for (Element element = head.Next; element != head; element = element.Next)\r\n        //    {\r\n        //        // skips deleted items and items belonging to the other table:\r\n        //        RehashElement(element);\r\n        //    }\r\n        //}\r\n\r\n\t\t///// <summary>\r\n\t\t///// Rehashes all elements of the list to the underlying hashtable (this or the interconnected one) \r\n\t\t///// using keys stored in the list for hashing.\r\n\t\t///// </summary>\r\n\t\t///// <param name=\"clear\">Whether to clear this hashtables before rehashing.</param>\r\n\t\t///// <param name=\"clearInterconnected\">Whether to clear the interconnected hashtable before rehashing.</param>\r\n\t\t///// <remarks>\r\n\t\t///// <para>\r\n\t\t///// Used on tables which are in inconsistent state - keys in elements of the list \r\n\t\t///// don't correspond those in hashtable. That's why this method should not be public.\r\n\t\t///// </para>    \r\n\t\t///// </remarks>\r\n\t\t//internal void RehashAll(bool clear,bool clearInterconnected)\r\n\t\t//{\r\n\t\t//  // clears items in underlying hashtables, no changes to the list are made: \r\n\t\t//  if (clear) dict.Clear();\r\n\t\t//  if (clearInterconnected && interconnectedWith!=null) interconnectedWith.BaseClear();\r\n\r\n\t\t//  // adds items stored in the list to the underlying hashtables: \r\n\t\t//  for (Element element = head.Next;element!=head;element = element.Next)\r\n\t\t//  {\r\n\t\t//    element.Table.SetElement(element.Key,element);\r\n\t\t//  }    \r\n\t\t//}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IntStringKey\r\n\r\n\t[Serializable]\r\n    [DebuggerNonUserCode]\r\n    public struct IntStringKey : IEquatable<IntStringKey>, IComparable<IntStringKey>\r\n\t{\r\n        /// <summary>\r\n        /// <pre>new IntStringKey( \"\" )</pre>\r\n        /// </summary>\r\n        internal readonly static IntStringKey EmptyStringKey = new IntStringKey(string.Empty);\r\n        \r\n        [Serializable]\r\n        [DebuggerNonUserCode]\r\n        public class EqualityComparer : IEqualityComparer<IntStringKey>\r\n\t\t{\r\n\t\t\tpublic static readonly EqualityComparer/*!*/ Default = new EqualityComparer();\r\n\t\t\t\r\n\t\t\tpublic bool Equals(IntStringKey x, IntStringKey y)\r\n\t\t\t{\r\n\t\t\t\treturn x.ikey == y.ikey && x.skey == y.skey;\r\n\t\t\t}\r\n\r\n\t\t\tpublic int GetHashCode(IntStringKey x)\r\n\t\t\t{\r\n\t\t\t\treturn x.ikey;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Computes the hash code of the given string. The function returns the same result on all platforms.\r\n        /// Resulting value is different using different string keys as it is in case of string.GetHashCode().\r\n        /// </summary>\r\n        /// <param name=\"s\">The string key to be used to compute the hash.</param>\r\n        /// <returns>The unique integer value corresponsing to the given string key.</returns>\r\n        /// <remarks>Unsafe x64 implementation of String.GetHashCode(). But it returns the same results on all platforms.\r\n        /// Phalanger needs the same results in case of compiling on one platform (and .NET version) and running on another platform.\r\n        /// Phalanger computes the hashes during compilation time to speedup the runtime.</remarks>\r\n        public static unsafe int StringKeyToArrayIndex(string s)\r\n        {\r\n            unchecked\r\n            {\r\n                fixed (char* str = s)\r\n                {\r\n                    int* numPtr = (int*)str;\r\n                    int num = 0x15051505;\r\n                    int num2 = num;\r\n                    for (int i = s.Length; i > 0; i -= 4)\r\n                    {\r\n                        num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];\r\n                        if (i <= 2)\r\n                        {\r\n                            break;\r\n                        }\r\n                        num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];\r\n                        numPtr += 2;\r\n                    }\r\n                    return (num + (num2 * 0x5d588b65));\r\n                }\r\n            }\r\n        }\r\n\r\n\t\tpublic object Object { get { return skey ?? (object)ikey; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Integer value iff <see cref=\"IsString\"/> return <B>false</B>.\r\n\t\t/// </summary>\r\n\t\tpublic int Integer { get { return ikey; } }\r\n        private int ikey; // Holds string hashcode if skey != null, computed using Convert.StringKeyToArrayIndex(skey).\r\n\r\n\t\t/// <summary>\r\n\t\t/// String value iff <see cref=\"IsString\"/> return <B>true</B>.\r\n\t\t/// </summary>\r\n\t\tpublic string String { get { return skey; } }\r\n\t\tprivate string skey;\r\n\r\n        public IntStringKey(object key)\r\n        {\r\n            ikey = ((skey = key as string) == null) ? (int)key : StringKeyToArrayIndex(skey);\r\n        }\r\n\r\n\t\tpublic IntStringKey(int key)\r\n\t\t{\r\n\t\t\tikey = key;\r\n\t\t\tskey = null;\r\n\t\t}\r\n\r\n\t\tpublic IntStringKey(string/*!*/ key)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null);\r\n\r\n            ikey = StringKeyToArrayIndex((skey = key));// key.GetHashCode();\r\n\t\t}\r\n\t\t\r\n        /// <summary>\r\n        /// Initialize the IntStringKey with precomputed hashCode.\r\n        /// </summary>\r\n        /// <param name=\"key\">The string key.</param>\r\n        /// <param name=\"hashcode\">The hashCode computed using Convert.StringKeyToArrayIndex(key) method !</param>\r\n\t\tinternal IntStringKey(string/*!*/ key, int hashcode)\r\n\t\t{\r\n\t\t\t//Debug.Assert(key != null && key.GetHashCode() == hashcode);\r\n            Debug.Assert(key != null && StringKeyToArrayIndex(key) == hashcode);\r\n\t\t\t\r\n\t\t\tthis.skey = key;\r\n\t\t\tthis.ikey = hashcode;\r\n\t\t}\r\n\r\n\t\tpublic bool IsString\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn skey != null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic bool IsInteger\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return skey == null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn ikey;\r\n\t\t}\r\n\r\n\t\tpublic bool Equals(IntStringKey other)\r\n\t\t{\r\n\t\t\treturn ikey == other.ikey && skey == other.skey;\r\n\t\t}\r\n\r\n        public bool Equals(ref IntStringKey other)\r\n        {\r\n            return ikey == other.ikey && skey == other.skey;\r\n        }\r\n\r\n        public bool Equals(int ikey)\r\n        {\r\n            return this.ikey == ikey && this.skey == null;\r\n        }\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn (skey == null) ? ikey.ToString() : skey;\r\n\t\t}\r\n\r\n\t\tpublic int CompareTo(IntStringKey other)\r\n\t\t{\r\n\t\t\tif (this.IsString)\r\n\t\t\t{\r\n\t\t\t\tif (other.IsString)\r\n\t\t\t\t\treturn String.CompareOrdinal(this.skey, other.skey);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn String.CompareOrdinal(this.skey, other.ikey.ToString());\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (other.IsString)\r\n\t\t\t\t\treturn String.CompareOrdinal(this.ikey.ToString(), other.skey);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn (this.ikey == other.ikey) ? 0 : (this.ikey < other.ikey ? -1 : +1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t#endregion\r\n\r\n    #region IntStringKeyDictionary : IDictionary<IntStringKey>\r\n\r\n    #endregion\r\n\r\n    #region PhpHashtable\r\n\r\n    /// <summary>\r\n\t/// The hashtable storing entries with <see cref=\"string\"/> and <see cref=\"int\"/> keys in a manner of PHP.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    [DebuggerNonUserCode]\r\n    public class PhpHashtable : IDictionary<IntStringKey, object>, IList, IDictionary, ICloneable\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether this instance has been visited during recursive pass of some structure containing <see cref=\"PhpArray\"/>s.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Must be set to <B>false</B> immediately after the pass.\r\n\t\t/// </remarks>\r\n\t\tpublic bool Visited { get { return visited; } set { visited = value; } }\r\n        [NonSerialized]\r\n        private bool visited = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A field used by <see cref=\"RecursiveEnumerator\"/> to store an enumerator of respective recursion level.\r\n\t\t/// </summary>\r\n        [NonSerialized]\r\n        private OrderedDictionary.Enumerator recursiveEnumerator;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ordered hashtable where integers are stored.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Expose the table to item getters on <see cref=\"PhpArray\"/> to make them a little bit faster.\r\n\t\t/// </remarks>\r\n        internal OrderedDictionary/*!*/ table;\r\n\r\n        /// <summary>\r\n        /// Max integer key in the array.\r\n        /// Returns <c>-1</c> if there are no integer keys.\r\n        /// </summary>\r\n        public int MaxIntegerKey\r\n        {\r\n            get\r\n            {\r\n                if (nextNewIndex < 0)\r\n                    RefreshMaxIntegerKeyInternal();\r\n\r\n                return nextNewIndex - 1;\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// Index for next new element when key is not specified.\r\n        /// </summary>\r\n        private int nextNewIndex = 0;\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves the number of items with integer keys in this instance.\r\n\t\t/// </summary>\r\n\t\tpublic int IntegerCount { get { return intCount; } }\r\n\t\tprivate int intCount = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the number of items with string keys in this instance.\r\n\t\t/// </summary>\r\n\t\tpublic int StringCount { get { return stringCount; } }\r\n\t\tprivate int stringCount = 0;\r\n\r\n        #region active enumerators\r\n\r\n        /// <summary>\r\n        /// Callback methods for entry deletion event.\r\n        /// </summary>\r\n        [NonSerialized]\r\n        internal OrderedDictionary.Enumerator activeEnumerators = null;\r\n\r\n        /// <summary>\r\n        /// Add given <paramref name=\"enumerator\"/> into <see cref=\"activeEnumerators\"/> list.\r\n        /// </summary>\r\n        /// <param name=\"enumerator\">New enumerator.</param>\r\n        internal void RegisterEnumerator(OrderedDictionary.Enumerator/*!*/enumerator)\r\n        {\r\n            Debug.Assert(enumerator != null, \"Argument null!\");\r\n            Debug.Assert(enumerator.next == null, \"Enumerator already enlisted somewhere!\");\r\n            Debug.Assert(enumerator.table == this.table, \"Enumerator was not associated with this PhpHashtable!\");\r\n\r\n            enumerator.next = this.activeEnumerators;\r\n            this.activeEnumerators = enumerator;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Remove given <paramref name=\"enumerator\"/> from <see cref=\"activeEnumerators\"/> list.\r\n        /// </summary>\r\n        /// <param name=\"enumerator\"><see cref=\"OrderedDictionary.Enumerator\"/> to be removed from the list of active enumerators.</param>\r\n        internal void UnregisterEnumerator(OrderedDictionary.Enumerator/*!*/enumerator)\r\n        {\r\n            Debug.Assert(enumerator != null, \"Argument null!\");\r\n            Debug.Assert(enumerator.table == this.table, \"Enumerator was not associated with this PhpHashtable!\");\r\n\r\n            if (this.activeEnumerators == enumerator)\r\n            {\r\n                this.activeEnumerators = enumerator.next; // remove the first item from the list, most recent case\r\n            }\r\n            else\r\n            {\r\n                for (var e = this.activeEnumerators; e != null; e = e.next)\r\n                    if (e.next == enumerator)\r\n                    {\r\n                        e.next = enumerator.next;\r\n                        break;\r\n                    }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region EnsureWritable\r\n\r\n        /// <summary>\r\n        /// Ensures the internal <see cref=\"OrderedDictionary\"/> will be writable (not shared).\r\n        /// </summary>\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        internal void EnsureWritable()\r\n        {\r\n            if (table.IsShared)\r\n                Unshare();\r\n        }\r\n\r\n        private void Unshare()\r\n        {\r\n            Debug.Assert(table.IsShared);\r\n\r\n            this.table.Unshare();\r\n\r\n            var oldowner = this.table.owner;\r\n\r\n            this.table = new OrderedDictionary(this, table);\r\n            this.table._deep_copy_inplace(oldowner, this);   // deep copy values, replace references to original array into this\r\n\r\n            for (var e = this.activeEnumerators; e != null; e = e.next)\r\n                e.TableChanged();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <c>PhpHashtable</c> class.\r\n        /// </summary>\r\n        public PhpHashtable() : this(0) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the <c>PhpHashtable</c> class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"capacity\">Initial capacity.</param>\r\n\t\tpublic PhpHashtable(int capacity)\r\n\t\t{\r\n            table = new OrderedDictionary(this, capacity);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the <c>PhpHashtable</c> class filled by values from specified array. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\">Values to be added.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Adds all pairs key-value where the value is an item of <v>values</v> array \r\n\t\t/// and the key is its index in the array.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpHashtable(Array values) : this(values, 0, values.Length) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the <c>PhpHashtable</c> class filled by values from specified array. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\">Values to be added.</param>\r\n\t\t/// <param name=\"index\">The starting index.</param>\r\n\t\t/// <param name=\"length\">The number of items to add.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Adds at most <c>length</c> pairs key-value where the value is an item of <v>values</v> array \r\n\t\t/// and the key is its index in the array starting from the <c>index</c>.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpHashtable(Array values, int index, int length)\r\n\t\t\t: this(length)\r\n\t\t{\r\n\t\t\tint end = index + length;\r\n\t\t\tint max = values.Length;\r\n\t\t\tif (end > max) end = max;\r\n\r\n\t\t\tfor (int i = index; i < end; i++)\r\n\t\t\t\tAdd(i, values.GetValue(i));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the <see cref=\"PhpHashtable\"/> class filled by values from specified array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\">An array of values to be added to the table.</param>\r\n\t\t/// <param name=\"start\">An index of the first item from <paramref name=\"values\"/> to add.</param>\r\n\t\t/// <param name=\"length\">A number of items to add.</param>\r\n\t\t/// <param name=\"value\">A value to be filtered.</param>\r\n\t\t/// <param name=\"doFilter\">Wheter to add all items but <paramref name=\"value\"/> (<b>true</b>) or \r\n\t\t/// all items with the value <paramref name=\"value\"/> (<b>false</b>).</param>\r\n\t\tpublic PhpHashtable(int[] values, int start, int length, int value, bool doFilter)\r\n\t\t\t: this(length)\r\n\t\t{\r\n\t\t\tint end = start + length;\r\n\t\t\tint max = values.Length;\r\n\t\t\tif (end > max) end = max;\r\n\r\n\t\t\tif (doFilter)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = start; i < end; i++) if (values[i] != value) Add(i, values[i]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = start; i < end; i++) if (values[i] == value) Add(i, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates PhpHashtable that shares internal <see cref=\"table\"/> with another array.\r\n        /// </summary>\r\n        /// <param name=\"array\">The table to be shared.</param>\r\n        /// <param name=\"preserveMaxInt\">True to copy the <see cref=\"PhpHashtable.MaxIntegerKey\"/> from <paramref name=\"array\"/>.\r\n        /// Otherwise the value will be recomputed when needed.</param>\r\n        public PhpHashtable(PhpHashtable/*!*/array, bool preserveMaxInt)\r\n        {\r\n            this.table = array.table.Share();\r\n            this.nextNewIndex = preserveMaxInt ? (array.nextNewIndex) : (-1); // TODO: (preserveMaxInt || array.table.DOES_NOT_HAVE_ANY_DELETIONS)\r\n            this.intCount = array.IntegerCount;\r\n            this.stringCount = array.StringCount;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inner class: RecursiveEnumerator\r\n\r\n\t\t/// <summary>\r\n\t\t/// Recursively enumerates <see cref=\"PhpHashtable\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Enumerator starts enumeration with a <see cref=\"PhpHashtable\"/> specified in its constructor and \r\n\t\t/// enumerates its items by instance of <see cref=\"IDictionaryEnumerator\"/> retrieved via \r\n\t\t/// <see cref=\"PhpHashtable.GetEnumerator\"/>. This enumerator is supposed to be unbreakable.\r\n\t\t/// If an enumerated item value is <see cref=\"PhpHashtable\"/>  (or <see cref=\"PhpReference\"/> and its \r\n\t\t/// <see cref=\"PhpReference.value\"/> is <see cref=\"PhpHashtable\"/> and <see cref=\"FollowReferences\"/>\r\n\t\t/// property is <B>true</B>) then this item is returned by Current and Entry\r\n\t\t/// like any other item but the enumerator continues with enumeration of that item when it is moved by\r\n\t\t/// <see cref=\"MoveNext\"/>. The <see cref=\"Level\"/> of recursion is increased and the previous hashtable\r\n\t\t/// is pushed in the internal stack. When enumerator finishes the enumeration of the current level hashtable\r\n\t\t/// and the level of recursion is not zero it pops hashtable stored in the stack and continues with\r\n\t\t/// enumeration on the item immediately following the item which caused the recursion.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Before the level of recursion is raised enumerator checks whether the next level hashtable\r\n\t\t/// was not already visited by any recursive enumerator. If that is the case such hashtable is skipped to\r\n\t\t/// prevent infinite recursion. Note, that you should not use more than one <see cref=\"RecursiveEnumerator\"/>\r\n\t\t/// on the same <see cref=\"PhpHashtable\"/>. This is not checked automatically but it is left to the user\r\n\t\t/// to avoid such usage. One can check whether the current item will cause a recursion by inspecting\r\n\t\t/// <see cref=\"InfiniteRecursion\"/> property.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// <B>Warning</B>: Enumerator should be disposed!\r\n\t\t/// It temporarily stores information to each hashtable pushed \r\n\t\t/// on the stack. This information is needed to prevent the recursion and it is cleared immediately after\r\n\t\t/// the return from the respective level of recursion (when popping a hashtable).\r\n\t\t/// Hence, if enumeration ends when the level of recursion is greater than zero (i.e. stack is non-empty),  \r\n\t\t/// some information may remain in visited arrays and the next enumeration will skip them.\r\n\t\t/// That's why it is recommanded to call <see cref=\"Dispose\"/> method whenever an enumeration ends using\r\n\t\t/// the following pattern:\r\n\t\t/// <code>\r\n\t\t///   using(PhpHashtable.RecursiveEnumerator e = ht.GetRecursiveEnumerator())\r\n\t\t///   {\r\n\t\t///     while (e.MoveNext()) \r\n\t\t///     { \r\n\t\t///       /* do something useful */\r\n\t\t///     }\r\n\t\t///   }\r\n\t\t/// </code>\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Enumerator is unbreakable (i.e. enumerated hashtables may be changed while enumerating them).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tpublic sealed class RecursiveEnumerator : IEnumerator<KeyValuePair<IntStringKey, object>>, IDictionaryEnumerator, IDisposable\r\n\t\t{\r\n\t\t\t#region Fields and Properties\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A stack for visited arrays. The currently enumerated array is not there.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate Stack<PhpHashtable>/*!*/ stack;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The currently enumerated array.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic PhpHashtable/*!*/ CurrentTable { get { return currentTable; } }\r\n\t\t\tprivate PhpHashtable/*!*/ currentTable;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The current level hashtable enumerator.\r\n\t\t\t/// </summary>\r\n            private OrderedDictionary.Enumerator/*!*/ current;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The level of recursion starting from zero (the top level).\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int Level { get { return stack.Count; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether to follow <see cref=\"PhpReference\"/>s when resolving next level of recursion.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool FollowReferences { get { return followReferences; } set { followReferences = value; } }\r\n\t\t\tprivate bool followReferences = false;\r\n\r\n            /// <summary>\r\n            /// Wheter the enumerator is used to read the array items only.\r\n            /// </summary>\r\n            private readonly bool readsOnly;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the current value causes infinite recursion.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tpublic bool InfiniteRecursion\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tobject val = current.Current.Value;\r\n\r\n\t\t\t\t\t// dereferences PHP reference if required:\r\n\t\t\t\t\tif (followReferences)\r\n\t\t\t\t\t\tval = PhpVariable.Dereference(val);\r\n\r\n\t\t\t\t\t// checks whether the value is visited array: \r\n\t\t\t\t\tPhpHashtable array = val as PhpHashtable;\r\n\t\t\t\t\treturn array != null && array.recursiveEnumerator != null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Constructors\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates an instance of <see cref=\"RecursiveEnumerator\"/>.\r\n\t\t\t/// </summary>\r\n            internal RecursiveEnumerator(PhpHashtable/*!*/ array, bool followReferences, bool readsOnly)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(array != null);\r\n\r\n                this.stack = new Stack<PhpHashtable>();\r\n\t\t\t\tthis.followReferences = followReferences;\r\n                this.readsOnly = readsOnly;\r\n\r\n                // the array may be accessed for writing, ensure its child items/arrays are ready:\r\n                if (!readsOnly)\r\n                    array.EnsureWritable();\r\n\r\n\t\t\t\t// store the current array and the current enumerator:\r\n\t\t\t\tthis.currentTable = array;\r\n\t\t\t\tthis.current = currentTable.GetPhpEnumerator();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region ReturnFromRecursion, ReturnFromRecursionAtEnd\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns from recursion on a specified level.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"targetLevel\">The level where to continue with enumeration.</param>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tprivate void ReturnFromRecursion(int targetLevel)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(targetLevel >= 0);\r\n\r\n\t\t\t\twhile (stack.Count > targetLevel)\r\n\t\t\t\t{\r\n                    // leave and Dispose the current array (visited = false):\r\n                    current.Dispose();\r\n\t\t\t\t\tcurrentTable.recursiveEnumerator = null;\r\n\r\n                    // returns back:\r\n\t\t\t\t\tcurrentTable = stack.Pop();\r\n\t\t\t\t\tcurrent = currentTable.recursiveEnumerator;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns from recursion while the current enumerator is at the end of the list it enumerates.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>Whether we are not at the definite end of enumeration.</returns>\r\n\t\t\tprivate bool ReturnFromRecursionAtEnd()\r\n\t\t\t{\r\n\t\t\t\twhile (current.AtEnd)\r\n\t\t\t\t{\r\n\t\t\t\t\t// leave and Dispose the current array (visited = false):\r\n                    current.Dispose();\r\n                    currentTable.recursiveEnumerator = null;\r\n\r\n\t\t\t\t\t// the top list (real end):\r\n\t\t\t\t\tif (stack.Count == 0) return false;\r\n\r\n\t\t\t\t\t// returns back:\r\n\t\t\t\t\tcurrentTable = stack.Pop();\r\n\t\t\t\t\tcurrent = currentTable.recursiveEnumerator;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IDictionaryEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The current key.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tobject IDictionaryEnumerator.Key\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips deleted items (if any) with possible return from recursion:\r\n\t\t\t\t\tReturnFromRecursionAtEnd();\r\n\t\t\t\t\treturn current.Current.Key.Object;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The current value.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tobject IDictionaryEnumerator.Value\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips deleted items (if any) with possible return from recursion:\r\n\t\t\t\t\tReturnFromRecursionAtEnd();\r\n\t\t\t\t\treturn current.Current.Value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The current entry.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tDictionaryEntry IDictionaryEnumerator.Entry\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips deleted items (if any) with possible return from recursion:\r\n\t\t\t\t\tReturnFromRecursionAtEnd();\r\n\t\t\t\t\treturn new DictionaryEntry(current.Current.Key, current.Current.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns the current entry.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tobject IEnumerator.Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn ((IDictionaryEnumerator)this).Entry;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Resets enumerator i.e. returns from recursion to the top level and resets top level enumerator.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\tReturnFromRecursion(0);\r\n\t\t\t\tcurrent.Reset();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Moves to the next element recursively.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>Whether an enumeration has ended.</returns>\r\n\t\t\t/// <exception cref=\"NullReferenceException\">If enumerator has been disposed.</exception>\r\n\t\t\tpublic bool MoveNext()\r\n\t\t\t{\r\n\t\t\t\tPhpHashtable array;\r\n\r\n\t\t\t\tobject value = current.Current.Value;\r\n\r\n\t\t\t\t// moves to the next item in the current level:\r\n\t\t\t\tcurrent.MoveNext();\r\n\r\n\t\t\t\t// dereferences the value if following references:\r\n\t\t\t\tif (followReferences)\r\n\t\t\t\t\tvalue = PhpVariable.Dereference(value);\r\n\r\n\t\t\t\tif ((array = value as PhpHashtable) != null)\r\n\t\t\t\t{\r\n                    // the array may be accessed for writing, ensure its child items/arrays are ready:\r\n                    if (!readsOnly)\r\n                        array.EnsureWritable();\r\n\r\n\t\t\t\t\t// mark the current table as visited and store there the current enumerator:\r\n\t\t\t\t\tcurrentTable.recursiveEnumerator = current;\r\n\r\n\t\t\t\t\t// skips arrays which are already on the stack (prevents infinite recursion)  \r\n\t\t\t\t\t// and those which doesn't contain any item (optimization):\r\n\t\t\t\t\tif (array.recursiveEnumerator == null && array.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// stores the current level:\r\n\t\t\t\t\t\tstack.Push(currentTable);\r\n\r\n\t\t\t\t\t\t// next level of recursion:\r\n                        currentTable = array;\r\n\r\n\t\t\t\t\t\t// creates a new enumerator (visited = true):\r\n\t\t\t\t\t\tcurrent = currentTable.GetPhpEnumerator();\r\n\r\n\t\t\t\t\t\t// starts enumerating next level:\r\n\t\t\t\t\t\tcurrent.MoveNext();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// check whether we are at the definite end:\r\n\t\t\t\treturn ReturnFromRecursionAtEnd();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IDisposable Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Clears information stored in each array on the stack.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Dispose()\r\n\t\t\t{\r\n\t\t\t\t// if not disposed yet:\r\n\t\t\t\tif (stack != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tReturnFromRecursion(0);\r\n\r\n                    // cleanup the last enumerator:\r\n                    if (currentTable != null) currentTable.recursiveEnumerator = null;\r\n                    currentTable = null;\r\n\r\n                    if (current != null) current.Dispose();\r\n                    current = null;\r\n\t\t\t\t\t\r\n                    stack = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator<KeyValuePair<IntStringKey,object>> Members\r\n\r\n\t\t\tpublic KeyValuePair<IntStringKey, object> Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips deleted items (if any) with possible return from recursion:\r\n\t\t\t\t\tReturnFromRecursionAtEnd();\r\n\t\t\t\t\treturn current.Current;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PHP Enumeration\r\n\r\n        /// <summary>\r\n        /// Throw an exception if this instance is not <see cref=\"PhpArray\"/> or <see cref=\"PhpHashtable\"/>.\r\n        /// This should avoid using features that are not available in special derived arrays yet.\r\n        /// </summary>\r\n        /// <exception cref=\"NotImplementedException\">This instance does not support the operation yet. Method has to be marked as virtual, and functionality has to be implemented in derived type.</exception>\r\n        [Conditional(\"DEBUG\")]\r\n        protected void ThrowIfNotPhpArrayHelper()\r\n        {\r\n            if (this.GetType() == typeof(PhpHashtable) || this.GetType() == typeof(PhpArray))\r\n                return;\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a recursive enumerator of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"followReferences\">Whether <see cref=\"PhpReference\"/>s are followed by recursion.</param>\r\n        /// <param name=\"readOnly\">True if the array items will be read only. Lazy copy is not necessary.</param>\r\n\t\t/// <returns>The <see cref=\"RecursiveEnumerator\"/>.</returns>\r\n\t\tpublic RecursiveEnumerator/*!*/ GetRecursiveEnumerator(bool followReferences, bool readOnly)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n            return new RecursiveEnumerator(this, followReferences, readOnly);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Retrieves a recursive enumerator of this instance.\r\n        ///// </summary>\r\n        ///// <returns>The <see cref=\"RecursiveEnumerator\"/> not following PHP references.</returns>\r\n        //public RecursiveEnumerator/*!*/ GetRecursiveEnumerator()\r\n        //{\r\n        //    return new RecursiveEnumerator(this, false, false);\r\n        //}\r\n\r\n        public OrderedDictionary.Enumerator/*!*/ GetPhpEnumerator()\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n            return new OrderedDictionary.Enumerator(this, true); //(IPhpEnumerator)table.GetEnumerator();\r\n\t\t}\r\n\r\n        public OrderedDictionary.Enumerator/*!*/ GetBaseEnumerator()\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n            return new OrderedDictionary.Enumerator(this, true); //table.GetEnumerator();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get fast enumerator structure to be used internally.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public OrderedDictionary.FastEnumerator GetFastEnumerator()\r\n        {\r\n            ThrowIfNotPhpArrayHelper();\r\n            return table.GetFastEnumerator();\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable<KeyValuePair<IntStringKey, object>> Members\r\n\r\n\t\tpublic virtual IEnumerator<KeyValuePair<IntStringKey, object>>/*!*/ GetEnumerator()\r\n\t\t{\r\n            if (this.Count == 0)\r\n                return OrderedDictionary.EmptyEnumerator.SingletonInstance;\r\n\r\n            return new OrderedDictionary.Enumerator(this, true); //table.GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n            if (this.Count == 0)\r\n                return OrderedDictionary.EmptyEnumerator.SingletonInstance;\r\n\r\n            return new OrderedDictionary.Enumerator(this, true); //(IEnumerator)table.GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICollection Members\r\n\r\n\t\t/// <summary>Retrieves the number of items in this instance.</summary>\r\n\t\tpublic virtual int Count { get { return table.Count; } }\r\n\r\n\t\t/// <summary>This property is always false.</summary>\r\n\t\tpublic bool IsSynchronized { get { return false; } }\r\n\r\n\t\t/// <summary>This property always refers to this instance.</summary>\r\n\t\tpublic object SyncRoot { get { return table.SyncRoot; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copies the <see cref=\"PhpHashtable\"/> or a portion of it to a one-dimensional array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The one-dimensional array.</param>\r\n\t\t/// <param name=\"index\">The zero-based index in array at which copying begins.</param>\r\n\t\tpublic void CopyTo(Array/*!*/ array, int index)\r\n\t\t{\r\n\t\t\t((ICollection)table).CopyTo(array, index);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDictionary Members\r\n\r\n        #region IDictionaryAdapter\r\n\r\n        [Serializable]\r\n        public class IDictionaryAdapter : IDictionaryEnumerator\r\n        {\r\n            #region Fields\r\n\r\n            /// <summary>\r\n            /// Currently pointed element.\r\n            /// </summary>\r\n            private OrderedDictionary.FastEnumerator enumerator;\r\n\r\n            #endregion\r\n\r\n            #region Construction\r\n\r\n            public IDictionaryAdapter(PhpHashtable/*!*/table)\r\n            {\r\n                Debug.Assert(table != null);\r\n                this.enumerator = table.GetFastEnumerator();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IDictionaryEnumerator Members\r\n\r\n            public DictionaryEntry Entry\r\n            {\r\n                get { return new DictionaryEntry(Key, Value); }\r\n            }\r\n\r\n            public object Key\r\n            {\r\n                get\r\n                {\r\n                    return this.enumerator.CurrentKey.Object;\r\n                }\r\n            }\r\n\r\n            public object Value\r\n            {\r\n                get\r\n                {\r\n                    return this.enumerator.CurrentValue;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerator Members\r\n\r\n            public object Current\r\n            {\r\n                get { return this.Entry; }\r\n            }\r\n\r\n            public bool MoveNext()\r\n            {\r\n                return this.enumerator.MoveNext();\r\n            }\r\n\r\n            public void Reset()\r\n            {\r\n                this.enumerator.Reset();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>This property is always false.</summary>\r\n\t\tpublic bool IsFixedSize { get { return false; } }\r\n\r\n        /// <summary>This property is always false.</summary>\r\n\t\tpublic bool IsReadOnly { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an enumerator which iterates through values in this instance in order as they were added in it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The enumerator.</returns>\r\n\t\tIDictionaryEnumerator/*!*/ IDictionary.GetEnumerator()\r\n\t\t{\r\n            if (this.Count == 0)\r\n                return OrderedDictionary.EmptyEnumerator.SingletonInstance;\r\n\r\n            return new IDictionaryAdapter(this); // new GenericDictionaryAdapter<object, object>(GetDictionaryEnumerator(), false);\r\n\t\t}\r\n\r\n        //private IEnumerator<KeyValuePair<object, object>>/*!*/ GetDictionaryEnumerator()\r\n        //{\r\n        //    foreach (KeyValuePair<IntStringKey, object> entry in table)\r\n        //    {\r\n        //        yield return new KeyValuePair<object, object>(entry.Key.Object, entry.Value);\r\n        //    }\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes all elements from this instance.\r\n\t\t/// </summary>\r\n\t\tpublic virtual void Clear()\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n\t\t\ttable.Clear();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an element with the specified key is in this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <returns>Whether an element with the <paramref name=\"key\"/> key is in the table.</returns>\r\n\t\t/// <exception cref=\"InvalidCastException\">The <paramref name=\"key\"/> is neither <see cref=\"int\"/> nor <see cref=\"string\"/>.</exception>\r\n\t\tpublic bool Contains(object key)\r\n\t\t{\r\n            return this.ContainsKey(new IntStringKey(key));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical end. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\t/// <exception cref=\"InvalidCastException\">The <paramref name=\"key\"/> is neither <see cref=\"int\"/> nor not null <see cref=\"string\"/>.</exception>\r\n\t\tpublic void Add(object key, object value)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\t\t\tthis.Add(new IntStringKey(key), value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a value associated with a key.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>If the key doesn't exist in table the new entry is added.</remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"InvalidCastException\">The <paramref name=\"key\"/> is neither <see cref=\"int\"/> nor not null <see cref=\"string\"/>.</exception>\r\n\t\tpublic object this[object key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this[new IntStringKey(key)];\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis[new IntStringKey(key)] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes an entry having the specified key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <exception cref=\"InvalidCastException\">The <paramref name=\"key\"/> is neither <see cref=\"int\"/> nor not null <see cref=\"string\"/>.</exception>\r\n\t\tpublic void Remove(object key)\r\n\t\t{\r\n\t\t\tRemove(new IntStringKey(key));\r\n\t\t}\r\n\r\n\t\tICollection/*!*/ IDictionary.Keys\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_keys == null) _keys = new KeyCollection(this);\r\n\t\t\t\treturn _keys;\r\n\t\t\t}\r\n\t\t}\r\n\t\t[NonSerialized]\r\n\t\tprivate KeyCollection _keys;\r\n\r\n\t\tICollection/*!*/ IDictionary.Values\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (ICollection)table.Values;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#region Inner class: KeyCollection\r\n\r\n\t\t[Serializable]\r\n\t\tpublic class KeyCollection : ICollection\r\n\t\t{\r\n\t\t\tprivate readonly PhpHashtable/*!*/ hashtable;\r\n\r\n\t\t\tinternal KeyCollection(PhpHashtable/*!*/ hashtable)\r\n\t\t\t{\r\n\t\t\t\tthis.hashtable = hashtable;\r\n\t\t\t}\r\n\r\n\t\t\t#region ICollection Members\r\n\r\n\t\t\tpublic int Count { get { return hashtable.Count; } }\r\n\r\n\t\t\tpublic bool IsSynchronized { get { return false; } }\r\n\r\n\t\t\tpublic object SyncRoot { get { return this; } }\r\n\r\n\t\t\tvoid ICollection.CopyTo(Array/*!*/ array, int index)\r\n\t\t\t{\r\n\t\t\t\tArrayUtils.CheckCopyTo(array, index, hashtable.Count);\r\n\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in hashtable)\r\n\t\t\t\t\tarray.SetValue(entry.Key.Object, index++);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerable Members\r\n\r\n\t\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> pair in hashtable)\r\n\t\t\t\t\tyield return pair.Key.Object;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n\t\t#endregion\r\n\r\n\t\t#region IList Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical end. The key is generated automatically.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be added.</param>\r\n\t\t/// <return>\r\n\t\t/// 1 if the entry has been added, 0 otherwise. Note, this differs from <see cref=\"IList.Add\"/>\r\n\t\t/// because <see cref=\"PhpHashtable\"/> doesn't support fast retrieval of the element's index.\r\n\t\t/// </return>\r\n\t\t/// <remarks>\r\n\t\t/// The key will be the maximal value of an integer key ever added into this instance plus one\r\n\t\t/// provided the result of addition fits into an 32-bit integer. Otherwise, the entry is not added\r\n\t\t/// and <b>false</b> is returned.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic int Add(object value)\r\n\t\t{\r\n\t\t\t//if (MaxIntegerKey < int.MaxValue)\r\n\t\t\t{\r\n                this.EnsureWritable();\r\n\r\n                if (nextNewIndex < 0) RefreshMaxIntegerKeyInternal();\r\n                AddToEnd(value);\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\t//return 0;\r\n\t\t}\r\n\r\n\t\tpublic void RemoveAt(int index)\r\n\t\t{\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\tpublic void Insert(int index, object value)\r\n\t\t{\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\tpublic int IndexOf(object value)\r\n\t\t{\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDictionary<IntStringKey,object> Members\r\n\r\n\t\tpublic void Add(IntStringKey key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n\t\t\ttable.Add(key, value);\r\n\t\t\tKeyAdded(ref key);\r\n\t\t}\r\n\r\n\t\tpublic bool ContainsKey(IntStringKey key)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\t\t\treturn table.ContainsKey(key);\r\n\t\t}\r\n\r\n\t\tpublic virtual bool Remove(IntStringKey key)\r\n\t\t{\r\n            //if (key.Integer == this.nextNewIndex - 1)\r\n            //{\r\n            //    // copy of this array has to find new max int\r\n            //}\r\n\r\n            this.EnsureWritable();\r\n            return this.table._del_key_or_index(ref key, this.activeEnumerators);\r\n\t\t}\r\n\r\n\t\tpublic bool TryGetValue(IntStringKey key, out object value)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\t\t\treturn table.TryGetValue(key, out value);\r\n\t\t}\r\n\r\n\t\tpublic ICollection<IntStringKey>/*!*/ Keys\r\n\t\t{\r\n            get { ThrowIfNotPhpArrayHelper(); return table.Keys; }\r\n\t\t}\r\n\r\n\t\tpublic ICollection<object>/*!*/ Values\r\n\t\t{\r\n            get { ThrowIfNotPhpArrayHelper(); return table.Values; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICollection<KeyValuePair<IntStringKey,object>> Members\r\n\r\n\t\tpublic void Add(KeyValuePair<IntStringKey, object> item)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\r\n            this.EnsureWritable();\r\n\r\n\t\t\ttable.Add(item.Key, item.Value);\r\n\t\t\tKeyAdded(item.Key);\r\n\t\t}\r\n\r\n\t\tpublic bool Contains(KeyValuePair<IntStringKey, object> item)\r\n\t\t{\r\n\t\t\treturn ((ICollection<KeyValuePair<IntStringKey, object>>)table).Contains(item);\r\n\t\t}\r\n\r\n\t\tpublic void CopyTo(KeyValuePair<IntStringKey, object>[] array, int arrayIndex)\r\n\t\t{\r\n            table.CopyTo(array, arrayIndex);\r\n\t\t}\r\n\r\n\t\tpublic bool Remove(KeyValuePair<IntStringKey, object> item)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\r\n            this.EnsureWritable();\r\n\r\n\t\t\treturn ((ICollection<KeyValuePair<IntStringKey, object>>)table).Remove(item);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Specific Members: Add, Prepend, this[], Remove, RemoveLast, RemoveFirst, AddRange\r\n\r\n        /// <summary>\r\n        /// Simple wrapper to allow call KeyAdded without ref.\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        private void KeyAdded(IntStringKey key)\r\n        {\r\n            KeyAdded(ref key);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when new item is added into the collection. It just updates the <see cref=\"stringCount\"/> or <see cref=\" intCount\"/> and <see cref=\"nextNewIndex\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n\t\tinternal void KeyAdded(ref IntStringKey key)\r\n\t\t{\r\n\t\t\tif (key.IsInteger)\r\n\t\t\t    KeyAdded(key.Integer);\r\n\t\t\telse\r\n                KeyAdded(key.String);\r\n\t\t}\r\n\r\n\t\tinternal void KeyAdded(int key)\r\n\t\t{\r\n            if (nextNewIndex < 0) RefreshMaxIntegerKeyInternal();\r\n            if (key >= nextNewIndex) nextNewIndex = key + 1;\r\n\t\t\t++intCount;\r\n\t\t}\r\n\r\n\t\tprivate void KeyAdded(string key)\r\n\t\t{\r\n\t\t\t++stringCount;\r\n\t\t}\r\n\r\n\t\t#region Contains\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an element with the specified key is in this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <returns>Whether an element with the <paramref name=\"key\"/> key is in the table.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The <paramref name=\"key\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic bool ContainsKey(string key)\r\n\t\t{\r\n\t\t\treturn table.ContainsKey(new IntStringKey(key));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an element with the specified key is in this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <returns>Whether an element with the <paramref name=\"key\"/> key is in the table.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The <paramref name=\"key\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic bool ContainsKey(int key)\r\n\t\t{\r\n\t\t\treturn table.ContainsKey(new IntStringKey(key));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Add, AddToEnd\r\n\r\n        /// <summary>\r\n        /// Add an item onto the end of this array.\r\n        /// </summary>\r\n        /// <param name=\"value\">Value to be added.</param>\r\n        /// <remarks>This method is supposed to be called on newly created arrays. Several checks are not performed to enhance performance of arrays initialization.</remarks>\r\n        [Emitted]\r\n        public void AddToEnd(object value)\r\n        {\r\n            Debug.Assert(nextNewIndex >= 0, \"This method is supposed to be called on newly created arrays which have [nextNewIndex] field initialized!\");\r\n            Debug.Assert(!this.table.IsShared, \"This method is supposed to be called on newly created arrays which cannot be shared!\");\r\n            Debug.Assert(this.GetType() == typeof(PhpArray), \"This method is not supposed to be called on PHpArray's inherited class!\");\r\n\r\n            table._add_last(nextNewIndex++, value);\r\n            ++intCount;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical end. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Add(int key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n\t\t\ttable.Add(new IntStringKey(key), value);\r\n\t\t\tKeyAdded(key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical end. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Add(string key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n\t\t\ttable.Add(new IntStringKey(key), value);\r\n\t\t\tKeyAdded(key);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Prepend\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical beginning. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Prepend(string key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n            this.table._add_first(new IntStringKey(key), value);\r\n\t\t\tKeyAdded(key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical beginning. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Prepend(int key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n            this.table._add_first(new IntStringKey(key), value);\r\n\t\t\tKeyAdded(key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical beginning. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\tpublic void Prepend(IntStringKey key, object value)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\r\n            this.table._add_first(key, value);\r\n\t\t\tKeyAdded(ref key);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an entry into the table at its logical beginning. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key.</param>\r\n\t\t/// <param name=\"value\">The value.</param>\r\n\t\t/// <exception cref=\"ArgumentException\">An element with the same key already exists in this instance.</exception>\r\n\t\t/// <exception cref=\"InvalidCastException\">The <paramref name=\"key\"/> is neither <see cref=\"int\"/> nor <see cref=\"string\"/>.</exception>\r\n        public void Prepend(object key, object value)\r\n        {\r\n            this.EnsureWritable();\r\n\r\n            IntStringKey iskey;\r\n            this.table._add_first((iskey = new IntStringKey(key)), value);\r\n            KeyAdded(ref iskey);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Remove, RemoveFirst, RemoveLast\r\n\r\n\t\t//  NOTE:\r\n\t\t//  - RemoveLast/RemoveFirst returns removed entry while Remove does not.\r\n\t\t//   This is because a caller of RemoveLast/RemoveFirst knows neither a key nor a value while\r\n\t\t//   a caller of Remove knows at least a key.\r\n\r\n        ///// <summary>\r\n        ///// Removes an entry having the specified <see cref=\"string\"/> key.\r\n        ///// </summary>\r\n        ///// <param name=\"key\">The key.</param>\r\n        //public virtual void Remove(int key)\r\n        //{\r\n        //    this.EnsureWritable();\r\n        //    var iskey = new IntStringKey(key);\r\n        //    table._del_key_or_index(ref iskey, this.onDeleteEntry);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Removes an entry having the specified <see cref=\"int\"/> key.\r\n        ///// </summary>\r\n        ///// <param name=\"key\">The key.</param>\r\n        ///// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n        //public virtual void Remove(string key)\r\n        //{\r\n        //    this.EnsureWritable();\r\n        //    var iskey = new IntStringKey(key);\r\n        //    table._del_key_or_index(ref iskey, this.onDeleteEntry);\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the last entry of the array and returns it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The last entry of the array.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n\t\tpublic KeyValuePair<IntStringKey, object> RemoveLast()\r\n\t\t{\r\n            this.EnsureWritable();\r\n            return table._remove_last(this.activeEnumerators);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the first entry of the array and returns it.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The first entry of the array.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n\t\tpublic KeyValuePair<IntStringKey, object> RemoveFirst()\r\n\t\t{\r\n            this.EnsureWritable();\r\n            return table._remove_first(this.activeEnumerators);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region this[], TryGetValue\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a value associated with a key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The <see cref=\"String\"/> key.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"key\"/> is a null reference.</exception>\r\n\t\t/// <remarks>If the key doesn't exist in table the new entry is added.</remarks>\r\n\t\tpublic object this[string key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn table[new IntStringKey(key)];\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n                this.EnsureWritable();\r\n\r\n\t\t\t\ttable[new IntStringKey(key)] = value;\r\n\t\t\t\tKeyAdded(key);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a value associated with a key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The <see cref=\"Int32\"/> key.</param>\r\n\t\t/// <remarks>If the key doesn't exist in table the new entry is added.</remarks>\r\n\t\tpublic object this[int key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn table[new IntStringKey(key)];\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n                this.EnsureWritable();\r\n\r\n\t\t\t\ttable[new IntStringKey(key)] = value;\r\n\t\t\t\tKeyAdded(key);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a value associated with a key.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The <see cref=\"Int32\"/> key.</param>\r\n\t\t/// <remarks>If the key doesn't exist in table the new entry is added.</remarks>\r\n\t\tpublic object this[IntStringKey key]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn table[key];\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n                this.EnsureWritable();\r\n\r\n\t\t\t\ttable[key] = value;\r\n\t\t\t\tKeyAdded(ref key);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic bool TryGetValue(string key, out object value)\r\n\t\t{\r\n\t\t\treturn table.TryGetValue(new IntStringKey(key), out value);\r\n\t\t}\r\n\r\n\t\tpublic bool TryGetValue(int key, out object value)\r\n\t\t{\r\n\t\t\treturn table.TryGetValue(new IntStringKey(key), out value);\r\n\t\t}\r\n\r\n\t\tpublic bool TryGetValue(object key, out object value)\r\n\t\t{\r\n\t\t\treturn table.TryGetValue(new IntStringKey(key), out value);\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n\t\t#endregion\r\n\r\n        #region Clone, InplaceDeepCopy, AddTo, CopyValuesTo\r\n\r\n        /// <summary>\r\n\t\t/// Creates a shallow copy of the hashtable.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A copy of the hashtable.</returns>\r\n\t\tpublic virtual object Clone()\r\n\t\t{\r\n            var clone = new PhpHashtable(this, true);\r\n            clone.EnsureWritable();\r\n            return clone;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Replaces values in the table with their deep copies.\r\n\t\t/// </summary>\r\n        public void InplaceDeepCopy()\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n            Debug.Assert(!this.table.IsShared);\r\n            this.table._deep_copy_inplace();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds items of this instance to a specified instance resetting integer keys.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dst\">Destination table.</param>\r\n\t\t/// <param name=\"deepCopy\">Whether to make deep copies of added items.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"dst\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic void AddTo(PhpHashtable/*!*/dst, bool deepCopy)\r\n\t\t{\r\n            ThrowIfNotPhpArrayHelper();\r\n\r\n\t\t\tif (dst == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"dst\");\r\n\r\n            using (var enumerator = this.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    object val = enumerator.CurrentValue;\r\n                    if (deepCopy) val = PhpVariable.DeepCopy(val);\r\n\r\n                    if (enumerator.CurrentKey.IsInteger)\r\n                        dst.Add(val);\r\n                    else\r\n                        dst.Add(enumerator.CurrentKey, val);\r\n                }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Copy values of this array into \r\n        /// </summary>\r\n        /// <param name=\"dst\"></param>\r\n        /// <param name=\"offset\"></param>\r\n        public void CopyValuesTo(object[]/*!*/dst, int offset)\r\n        {\r\n            Debug.Assert(dst != null);\r\n            Debug.Assert(dst.Length - offset >= this.Count);\r\n            Debug.Assert(offset >= 0);\r\n\r\n            using (var enumerator = this.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    dst[offset++] = enumerator.CurrentValue;\r\n                }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Misc methods: Sort, Diff, Reverse, Shuffle, Unite\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts this instance using specified comparer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer to be used to compare array items.</param>\r\n\t\tpublic void Sort(IComparer<KeyValuePair<IntStringKey, object>>/*!*/ comparer)\r\n\t\t{\r\n\t\t\tif (comparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"comparer\");\r\n\r\n            this.EnsureWritable();\r\n            OrderedDictionary.sortops._sort(this.table, comparer);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sorts multiple hashtables given comparer for each hashtable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"hashtables\">\r\n\t\t/// The <see cref=\"ICollection\"/> of <see cref=\"PhpHashtable\"/>s. \r\n\t\t/// All these tables has to be of the same length which has to be .\r\n\t\t/// </param> \r\n\t\t/// <param name=\"comparers\">\r\n\t\t/// An array of <see cref=\"IDictionaryComparer\"/>s.\r\n\t\t/// The number of comparers has to be the same as the number of <paramref name=\"hashtables\"/>.\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// Sorts lexicographically all <paramref name=\"hashtables\"/> from the first to the last one using \r\n\t\t/// <paramref name=\"comparers\"/> successively. Changes only order of entries in <paramref name=\"hashtables\"/>.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"hashtables\"/> or <paramref name=\"comparers\"/> is a <B>null</B>reference.</exception>\r\n\t\tpublic static void Sort(PhpHashtable[]/*!*/ hashtables,\r\n\t\t\tIComparer<KeyValuePair<IntStringKey, object>>[]/*!*/ comparers)\r\n\t\t{\r\n\t\t\t#region requires (hashtables && comparer && comparers.Length==hashtables.Length)\r\n\r\n\t\t\tif (hashtables == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"hashtables\");\r\n\t\t\tif (comparers == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"comparers\");\r\n\t\t\tif (hashtables.Length != comparers.Length)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"lengths_are_different\", \"hashtables\", \"comparers\"));\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\tif (comparers.Length == 0) return;\r\n\r\n            // prepare tables (check they are the same length and make them writable):\r\n            int count = -1;\r\n            for (int i = 0; i < hashtables.Length; i++)\r\n            {\r\n                var table = hashtables[i];\r\n\r\n                if (i == 0) count = table.Count;\r\n                else if (table.Count != count)\r\n                {\r\n                    throw new ArgumentException(CoreResources.GetString(\"lengths_are_different\", \"hashtables[0]\",\r\n                        String.Format(\"hashtables[{0}]\", i)), \"hashtables\");\r\n                }\r\n\r\n                table.EnsureWritable();\r\n            }\r\n\r\n            OrderedDictionary.sortops._multisort(count, hashtables, comparers);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs a set operation <see cref=\"PhpHashtable\"/>s.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"op\">The operation.</param>\r\n\t\t/// <param name=\"hashtables\">The <see cref=\"ICollection\"/> of <see cref=\"PhpHashtable\"/>s.</param>\r\n\t\t/// <param name=\"comparer\">The <see cref=\"IDictionaryComparer\"/> used to compare entries of <paramref name=\"hashtables\"/>.</param>\r\n\t\t/// <param name=\"result\">The <see cref=\"IDictionary\"/> where to add remaining elements.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Entries that will remain in this instance if a difference was made are stored into \r\n\t\t/// the <paramref name=\"result\"/> in the same order they are stored in this instance. \r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"hashtables\"/> or <paramref name=\"comparer\"/> or <paramref name=\"result\"/> is a <B>null</B> reference.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\"><paramref name=\"result\"/> references this instance.</exception>\r\n\t\tpublic void SetOperation(SetOperations op, PhpHashtable[]/*!*/ hashtables,\r\n\t\t\tIComparer<KeyValuePair<IntStringKey, object>>/*!*/ comparer, /*IDictionary<IntStringKey, object>*/PhpArray/*!*/ result)\r\n\t\t{\r\n\t\t\t#region Requires (hashtables && comparer && result && result!=this)\r\n\r\n\t\t\tif (hashtables == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"hashtables\");\r\n\t\t\tif (comparer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"comparers\");\r\n\t\t\tif (result == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"result\");\r\n\t\t\tif (result == this)\r\n\t\t\t\tthrow new ArgumentException(CoreResources.GetString(\"argument_equals\", \"result\", \"this\"));\r\n\r\n\t\t\t#endregion\r\n\r\n            if (hashtables.Length == 0) return;\r\n\r\n            this.EnsureWritable();\r\n            this.table._set_operation(op, hashtables, comparer, result);\r\n\t\t}\r\n\r\n        //private IEnumerable<OrderedHashtable<IntStringKey>.Element>/*!*/ EnumerateHeads(IEnumerable<PhpHashtable>/*!*/ hashtables)\r\n        //{\r\n        //    foreach (PhpHashtable hashtable in hashtables)\r\n        //        yield return hashtable.table.head;\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Reverses order of entries in this instance.\r\n        /// </summary>\r\n        public void Reverse()\r\n        {\r\n            this.EnsureWritable();\r\n            this.table._reverse();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shuffles order of elements in the hashtable at random.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"generator\"/> is a <b>null</b> reference.</exception>\r\n\t\tpublic void Shuffle(Random generator)\r\n\t\t{\r\n            this.EnsureWritable();\r\n\t\t\ttable._shuffle_data(generator);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unites an <paramref name=\"array\"/> with this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">An <see cref=\"PhpArray\"/> of items to be united with this instance.</param>\r\n\t\t/// <returns>Reference to this instance.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Thrown when <paramref name=\"array\"/> is null reference.</exception>\r\n\t\t/// <remarks>\r\n\t\t/// All keys are preserved. Values associated with existing string keys will not be overwritten.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpHashtable Unite(PhpHashtable array)\r\n\t\t{\r\n\t\t\tif (array == null) throw new ArgumentNullException(\"array\");\r\n\t\t\tif (array.table == this.table) return this;\r\n\r\n            using (var enumerator = array.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    if (!this.table.ContainsKey(enumerator.CurrentKey))\r\n                        this[enumerator.CurrentKey] = enumerator.CurrentValue;  // TODO: DeepCopy value ?\r\n                }\r\n\t\t\t\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region RefreshMaxIntegerKey, ReindexAll, ReindexIntegers, ReindexAndReplace\r\n\r\n        /// <summary>\r\n        /// Ensure the internal maximal key value will be updated.\r\n        /// </summary>\r\n\t\tpublic void RefreshMaxIntegerKey()\r\n\t\t{\r\n            this.nextNewIndex = -1;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Recalculates <see cref=\"nextNewIndex\"/> value.\r\n        /// </summary>\r\n        private void RefreshMaxIntegerKeyInternal()\r\n        {\r\n            this.nextNewIndex = (this.intCount == 0) ? 0 : this.table._find_max_int_key() + 1;\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Sets all keys to increasing integers according to their respective order in the list.\r\n\t\t/// </summary>\r\n        public void ReindexAll()\r\n        {\r\n            this.EnsureWritable();\r\n\r\n            // updates the list:\r\n            int i = 0;\r\n\r\n            using (var enumerator = this.table.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    enumerator.ModifyCurrentEntryKey(new IntStringKey(i++));\r\n                }\r\n\r\n            //\r\n            this.nextNewIndex = i;\r\n\r\n            //\r\n            this.table._rehash();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets all keys to increasing integers according to their respective order in the list.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"startIndex\">An index from which to start indexing.</param>\r\n\t\t/// <remarks>If indexing overflows a capacity of integer type it continues with <see cref=\"int.MinValue\"/>.</remarks>\r\n        public void ReindexIntegers(int startIndex)\r\n        {\r\n            this.EnsureWritable();\r\n\r\n            // updates the list:\r\n            int i = startIndex;\r\n            \r\n            using (var enumerator = this.table.GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                {\r\n                    if (enumerator.CurrentKey.IsInteger)\r\n                    {\r\n                        enumerator.ModifyCurrentEntryKey(new IntStringKey(i++));\r\n                    }\r\n                }\r\n            \r\n            //\r\n            this.nextNewIndex = i;\r\n            \r\n            //\r\n            this.table._rehash();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Replaces a part of the hashtable with specified item(s) and reindexes all integer keys in result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"offset\">\r\n\t\t/// The ordinary number of the first item to be replaced. \r\n\t\t/// <paramref name=\"offset\"/> should be at least zero and at most equal as the number of items in the array.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"length\">\r\n\t\t/// The number of items to be replaced. Should be at least zero and at most equal \r\n\t\t/// to the number of items in the array.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"replacementValues\">\r\n\t\t/// The enumerable collection of values by which items in the range specified by\r\n\t\t/// <paramref name=\"offset\"/> and <paramref name=\"length\"/> is replaced.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"replaced\">\r\n\t\t/// The hashtable where removed values will be placed. Keys are successive integers starting from zero.\r\n\t\t/// </param>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><pararef name=\"offset\"/> or <paramref name=\"length\"/> has invalid value.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"replaced\"/> is a <b>null</b> reference.</exception>\r\n\t\tpublic void ReindexAndReplace(int offset, int length, IEnumerable replacementValues, PhpHashtable/*!*/ replaced)\r\n\t\t{\r\n            int count = this.Count;\r\n\r\n            if (offset < 0 || offset > count)\r\n                throw new ArgumentOutOfRangeException(\"first\");\r\n            if (length < 0 || offset + length > count)\r\n                throw new ArgumentOutOfRangeException(\"length\");\r\n            if (replaced == null)\r\n                throw new ArgumentNullException(\"replaced\");\r\n\r\n            this.EnsureWritable();  // ensure values are deeply copied\r\n            \r\n            int ikey = 0;\r\n\r\n            // reindexes integer keys of elements before the first replaced item:\r\n            int i = 0;\r\n            using (var enumerator = this.GetFastEnumerator())\r\n            {\r\n                // reindex first [offset] entries (whose key is integer):\r\n                while (i++ < offset && enumerator.MoveNext())\r\n                {\r\n                    if (enumerator.CurrentKey.IsInteger)\r\n                        enumerator.ModifyCurrentEntryKey(new IntStringKey(ikey++));\r\n                }\r\n\r\n                // [enumerator] points to last reindexed entry, have to be advanced to the next\r\n                enumerator.MoveNext();\r\n\r\n                // removes items with ordinal number in interval [first,last]:\r\n                int jkey = 0;\r\n                i = 0;\r\n                while (i++ < length/* && enumerator.MoveNext()*/)\r\n                {\r\n                    Debug.Assert(enumerator.IsValid);\r\n\r\n                    if (enumerator.CurrentKey.IsInteger)\r\n                    {\r\n                        replaced.Add(jkey++, enumerator.CurrentValue);\r\n                    }\r\n                    else\r\n                    {\r\n                        replaced.Add(enumerator.CurrentKey, enumerator.CurrentValue);\r\n                    }\r\n\r\n                    // remove item from the list:\r\n                    enumerator.DeleteCurrentEntryAndMove(this.activeEnumerators);\r\n                }\r\n\r\n                // adds new elements before \"enumerator\" element:\r\n                if (replacementValues != null)\r\n                {\r\n                    foreach (object value in replacementValues)\r\n                        enumerator.InsertBeforeCurrentEntry(new IntStringKey(ikey++), value);\r\n                }\r\n\r\n                // reindexes integer keys of the rest elements:\r\n                if (enumerator.IsValid)\r\n                {\r\n                    do\r\n                    {\r\n                        if (enumerator.CurrentKey.IsInteger)\r\n                            enumerator.ModifyCurrentEntryKey(new IntStringKey(ikey++));\r\n\r\n                    } while (enumerator.MoveNext());\r\n                }\r\n            }\r\n\r\n            // rehashes the table (updates bucket lists)\r\n            this.table._rehash();\r\n\r\n            // updates max integer value in table:\r\n            this.nextNewIndex = ikey;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Static PhpHashtable/Dictionary Switching (useful for local/global variables dictionaries)\r\n\r\n\t\tpublic static bool TryGetValue(PhpHashtable hashtable, Dictionary<string, object> dictionary, string key, out object value)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\treturn hashtable.TryGetValue(key, out value);\r\n\t\t\telse if (dictionary != null)\r\n\t\t\t\treturn dictionary.TryGetValue(key, out value);\r\n            else\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tpublic static bool ContainsKey(PhpHashtable hashtable, Dictionary<string, object> dictionary, string key)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\treturn hashtable.ContainsKey(key);\r\n\t\t\telse if (dictionary != null)\r\n\t\t\t\treturn dictionary.ContainsKey(key);\r\n            else\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tpublic static void Add(PhpHashtable hashtable, Dictionary<string, object> dictionary, string key, object value)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\thashtable.Add(key, value);\r\n            else if (dictionary != null)\r\n\t\t\t\tdictionary.Add(key, value);\r\n            else\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tpublic static void Set(PhpHashtable hashtable, Dictionary<string, object> dictionary, string key, object value)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\thashtable[key] = value;\r\n\t\t\telse if (dictionary != null)\r\n\t\t\t\tdictionary[key] = value;\r\n            else\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tpublic static void Remove(PhpHashtable hashtable, Dictionary<string, object> dictionary, string key)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\thashtable.Remove(key);\r\n\t\t\telse if (dictionary != null)\r\n\t\t\t\tdictionary.Remove(key);\r\n            else\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tpublic static IEnumerable<KeyValuePair<string, object>>/*!*/ GetEnumerator(PhpArray hashtable,\r\n\t\t\tDictionary<string, object> dictionary)\r\n\t\t{\r\n\t\t\tif (hashtable != null)\r\n\t\t\t\treturn hashtable.GetStringKeyEnumerable();\r\n\t\t\telse if (dictionary != null)\r\n\t\t\t\treturn (IEnumerable<KeyValuePair<string, object>>)dictionary;\r\n\t\t\telse\r\n                throw new ArgumentNullException(\"hashtable\");\r\n\t\t}\r\n\r\n\t\tprivate IEnumerable<KeyValuePair<string, object>>/*!*/ GetStringKeyEnumerable()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in this)\r\n\t\t\t\tyield return new KeyValuePair<string, object>(entry.Key.ToString(), entry.Value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/HttpHeaders.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007 Tomas Petricek\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Text;\r\nusing System.Web;\r\n\r\nusing PHP.Library;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n    /// Used for proper handling of setting/getting current response headers.\r\n    /// \r\n    /// In case of IIS Classic Mode, headers must be cached and flushed in 'PreSendRequestHeaders' event, because .NET doesn't allow this behavior.\r\n    /// In case of IIS Integrated Pipeline, request headers can be accessed (set/modified/removed) within HttpRequest object in any time.\r\n\t/// </summary>\r\n    public class HttpHeaders : IEnumerable<KeyValuePair<string, string>>\r\n    {\r\n        protected readonly HttpContext/*!*/httpContext;\r\n        \r\n        #region Initialization\r\n\r\n        #region HttpRuntime.UsingIntegratedPipeline helper\r\n\r\n        /// <summary>\r\n        /// Equivalent to <c>HttpRuntime.UsingIntegratedPipeline</c> if this property exists. Otherwise it returns <b>false</b>.\r\n        /// </summary>\r\n        public static readonly bool UsingIntegratedPipeline = UsingIntegratedPipelineHelper;\r\n\r\n        /// <summary>\r\n        /// Helper that dynamically calls getter of <b>HttpRuntime</b>.<b>UsingIntegratedPipeline</b>.\r\n        /// It cannot be used in compile time since .NET 2.0 (without SP) and Mono does not have this method defined at all.\r\n        /// </summary>\r\n        private static bool UsingIntegratedPipelineHelper\r\n        {\r\n            get\r\n            {\r\n                var p = typeof(HttpRuntime).GetProperty(\"UsingIntegratedPipeline\");\r\n\r\n                return (p != null) ? (bool)p.GetGetMethod().Invoke(null, ArrayUtils.EmptyObjects) : false;\r\n            }\r\n        }\r\n        \r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Create proper HttpHeaders object based on the current HttpRuntime environment.\r\n        /// </summary>\r\n        /// <returns>Instance of HttpHeaders object.</returns>\r\n        public static HttpHeaders Create()\r\n        {\r\n            if (UsingIntegratedPipeline)\r\n                return new IntegratedPipelineHeaders();\r\n            \r\n            return new HttpHeaders(true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try to attach the Headers object into the HttpRuntime.\r\n        /// Do not allow instantiating this class from outside.\r\n        /// </summary>\r\n        private HttpHeaders(bool attach)\r\n        {\r\n            this.httpContext = HttpContext.Current;\r\n                \r\n            if (attach)\r\n            {\r\n                if (this.httpContext != null)\r\n                    TryAttachApplication(this.httpContext.ApplicationInstance);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PreSendRequestHeaders event\r\n\r\n        /// <summary>\r\n        /// Determines if the PreSendRequestHeaders event was already set.\r\n        /// </summary>\r\n        static bool attached = false;\r\n\r\n        private static void TryAttachApplication(HttpApplication hta)\r\n        {\r\n            if (!attached && hta != null)\r\n            {\r\n                hta.PreSendRequestHeaders += new EventHandler(PreSendRequestHeaders);\r\n\r\n                //\r\n                attached = true;\r\n            }\r\n        }\r\n\r\n        private static void PreSendRequestHeaders(object sender, EventArgs e)\r\n        {\r\n            HttpContext ctx = ((HttpApplication)sender).Context;\r\n            ScriptContext.CurrentContext.Headers.Flush(ctx);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Headers, special headers\r\n\r\n        /// <summary>\r\n        /// Represents the current encoding that was set by string or Encoding instance.\r\n        /// </summary>\r\n        protected class StringEncoding\r\n        {\r\n            protected Encoding encoding;\r\n            protected string encodingAsString;\r\n\r\n            public Encoding Encoding\r\n            {\r\n                get\r\n                {\r\n                    return encoding ?? ((encodingAsString != null) ? Encoding.GetEncoding(encodingAsString) : null);\r\n                }\r\n                set\r\n                {\r\n                    encodingAsString = null;\r\n                    encoding = value;\r\n                }\r\n            }\r\n            public string String\r\n            {\r\n                get\r\n                {\r\n                    return encodingAsString ?? ((encoding != null) ? encoding.HeaderName : null);\r\n                }\r\n                set\r\n                {\r\n                    encoding = null;\r\n                    encodingAsString = value;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Set the encoding into the HttpResponse object.\r\n            /// </summary>\r\n            /// <param name=\"response\"></param>\r\n            public virtual void SetEncoding(HttpResponse/*!*/response)\r\n            {\r\n                if (IsSpecial(encodingAsString))\r\n                    response.AppendHeader(\"content-encoding\", encodingAsString);\r\n                // by default, set the Encoding properly\r\n                else\r\n                    response.ContentEncoding = this.Encoding;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Special encodings, that should be added as header (not via ContentEncoding property, since it is not real encoding).\r\n            /// </summary>\r\n            /// <param name=\"encodingAsString\">Encoding as string.</param>\r\n            /// <returns>Tru if encoding should be set via headers.</returns>\r\n            protected static bool IsSpecial(string encodingAsString)\r\n            {\r\n                    // following values must be set as a string,\r\n                    // it cannot be converted to proper Encoding\r\n                return encodingAsString == \"gzip\" || encodingAsString == \"deflate\";\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Current content-encoding header if set.\r\n        /// </summary>\r\n        protected StringEncoding contentEncoding\r\n        {\r\n            get { return _contentEncoding ?? (_contentEncoding = CreateStringEncoding()); }\r\n            set { _contentEncoding = value; }\r\n        }\r\n        private StringEncoding _contentEncoding;\r\n\r\n        /// <summary>\r\n        /// Create StringEncoding object according to the current implementation of Headers.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        protected virtual StringEncoding CreateStringEncoding()\r\n        {\r\n            return new StringEncoding();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Current location header if set.\r\n        /// </summary>\r\n        protected string location;\r\n\r\n        /// <summary>\r\n        /// Current content-type header if set.\r\n        /// </summary>\r\n        protected string contentType;\r\n\r\n        /// <summary>\r\n        /// All the other headers that was set by PHP application.\r\n        /// </summary>\r\n        internal readonly Dictionary<string, string> headers = new Dictionary<string, string>();\r\n\r\n        #endregion\r\n\r\n        #region public headers methods\r\n\r\n        /// <summary>\r\n        /// Get or Set any header to be sent within response.\r\n        /// </summary>\r\n        /// <param name=\"header\">Header name, case insensitive.</param>\r\n        /// <returns>The header value, or null if the header was not set.</returns>\r\n        public virtual string this[string header]\r\n        {\r\n            get\r\n            {\r\n                header = header.ToLower();\r\n\r\n                switch (header)\r\n                {\r\n                    case \"location\":\r\n                        return location;\r\n                    case \"content-type\":\r\n                        return contentType;\r\n                    case \"content-encoding\":\r\n                        return (_contentEncoding != null) ? contentEncoding.String : null;\r\n                    default:\r\n                        {\r\n                            string value;\r\n                            if (headers.TryGetValue(header, out value))\r\n                                return value;\r\n                            else\r\n                                return null;\r\n                        }\r\n                }\r\n            }\r\n            set\r\n            {\r\n                header = header.ToLower();\r\n\r\n                switch (header)\r\n                {\r\n                    case \"location\":\r\n                        OnLocationSet(value);\r\n                        location = value;\r\n                        break;\r\n                    case \"content-type\":\r\n                        contentType = value;\r\n                        contentEncoding.Encoding = ContentTypeEncoding(value);\r\n                        break;\r\n                    case \"content-encoding\":\r\n                        if (value != null)\r\n                            contentEncoding.String = value;\r\n                        else\r\n                            contentEncoding = null; // clear the encoding\r\n                        break;\r\n                    default:\r\n                        if (value != null)\r\n                            headers[header] = value;\r\n                        else\r\n                            headers.Remove(header);\r\n\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clear all headers if null is given.\r\n        /// </summary>\r\n        public virtual void Clear()\r\n        {\r\n            if (location != null)\r\n            {\r\n                HttpResponse response = this.httpContext.Response;\r\n                if (response.StatusCode == 302)\r\n                    response.StatusCode = 200;\r\n\r\n                location = null;\r\n            }\r\n\r\n            contentEncoding.Encoding = RequestContext.CurrentContext.DefaultResponseEncoding;\r\n            contentType = null;\r\n            headers.Clear();\r\n        }\r\n\r\n        #region IEnumerable\r\n\r\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n        {\r\n            foreach (KeyValuePair<string, string> header in this)\r\n                yield return header;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEnumerable<string, string>\r\n\r\n        /// <summary>\r\n        /// Returns all headers currently set by the web application.\r\n        /// Including content-type, content-encoding, location, ...\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public virtual IEnumerator<KeyValuePair<string, string>> GetEnumerator()\r\n        {\r\n            if (location != null)\r\n                yield return new KeyValuePair<string, string>(\"location\", location);\r\n\r\n            if (_contentEncoding != null)\r\n                yield return new KeyValuePair<string, string>(\"content-encoding\", contentEncoding.String);\r\n\r\n            if (contentType != null)\r\n                yield return new KeyValuePair<string, string>(\"content-type\", contentType);\r\n\r\n            //if (this.httpContext != null)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        HttpResponse response = this.httpContext.Response;\r\n            //        foreach (string key in response.Headers.Keys)\r\n            //        {\r\n            //            string values = response.Headers[key];\r\n            //            if (values != null)\r\n            //                foreach (var value in values.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))\r\n            //                    mergedheaders[key.ToLower()] = value;\r\n            //        }\r\n            //    }\r\n            //    catch{}\r\n            //}\r\n\r\n            foreach (KeyValuePair<string, string> pair in headers)\r\n                yield return pair;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Flushing headers into Response\r\n\r\n        /// <summary>\r\n        /// If headers were flushed already.\r\n        /// </summary>\r\n        protected bool flushed = false;\r\n\r\n        /// <summary>\r\n        /// Write headers to ASP.NET HttpContext. Can be called multiple times, it will be flushed only once.\r\n        /// </summary>\r\n        public virtual void Flush(HttpContext ctx)\r\n        {\r\n            if (flushed) return;\r\n            flushed = true;\r\n\r\n            try\r\n            {\r\n                if (location != null)\r\n                    ctx.Response.Redirect(location, false);\r\n\r\n                if (_contentEncoding != null)\r\n                    contentEncoding.SetEncoding(ctx.Response);\r\n\r\n                if (contentType != null)\r\n                    ctx.Response.ContentType = contentType;\r\n\r\n                foreach (KeyValuePair<string, string> pair in headers)\r\n                {\r\n                    try\r\n                    {\r\n                        ctx.Response.AppendHeader(pair.Key, pair.Value);\r\n                    }\r\n                    catch (HttpException e)\r\n                    {\r\n                        PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_header\", pair.Key + \": \" + pair.Value, e.Message));\r\n                    }\r\n                }\r\n            }\r\n            catch (HttpException e)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, e.Message);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region helper headers methods\r\n\r\n        /// <summary>\r\n        /// Update the status code when location is set.\r\n        /// </summary>\r\n        /// <param name=\"location\"></param>\r\n        protected virtual void OnLocationSet(string location)\r\n        {\r\n            // set status code 302 unless the 201 or a 3xx status code has already been set \r\n            HttpResponse response = this.httpContext.Response;\r\n            if (location != null && response.StatusCode != 201 && (response.StatusCode < 300 || response.StatusCode >= 400))\r\n                response.StatusCode = 302;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get content encoding depending on the content type.\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        /// <returns></returns>\r\n        protected virtual Encoding ContentTypeEncoding(string contentType)\r\n        {\r\n            if (contentType == null || CultureInfo.InvariantCulture.TextInfo.ToLower(contentType).StartsWith(\"text/\"))\r\n                return RequestContext.CurrentContext.DefaultResponseEncoding;\r\n            else\r\n                return Configuration.Application.Globalization.PageEncoding;\r\n                \r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Integrated Pipeline\r\n\r\n        private class IntegratedPipelineHeaders : HttpHeaders\r\n        {\r\n            #region Fields\r\n\r\n            /// <summary>\r\n            /// Value of \"X-Powered-By\" header.\r\n            /// </summary>\r\n            private static readonly string/*!*/PoweredByHeader = PhalangerVersion.ProductName + \" \" + PhalangerVersion.Current;\r\n\r\n            #endregion\r\n\r\n            #region ctor\r\n\r\n            public IntegratedPipelineHeaders()\r\n                :base(false)\r\n            {\r\n                if (httpContext != null)\r\n                    httpContext.Response.Headers[\"X-Powered-By\"] = PoweredByHeader;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region StringEncoding (for Integrated pipeline)\r\n\r\n            private class IntegratedPipelineStringEncoding : StringEncoding\r\n            {\r\n                public override void SetEncoding(HttpResponse response)\r\n                {\r\n                    if (IsSpecial(encodingAsString))\r\n                        response.Headers[\"content-encoding\"] = encodingAsString;\r\n                    // by default, set the Encoding properly\r\n                    else\r\n                        base.SetEncoding(response);\r\n                }\r\n            }\r\n            protected override StringEncoding CreateStringEncoding()\r\n            {\r\n                return new IntegratedPipelineStringEncoding();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region HttpHeaders\r\n\r\n            /// <summary>\r\n            /// Set/remove the header in integrated pipeline mode.\r\n            /// </summary>\r\n            /// <param name=\"header\">The header name. Case insensitive.</param>\r\n            /// <returns>The header value.</returns>\r\n            /// <exception cref=\"System.FormatException\">Given expires header has invalid format.</exception>\r\n            public override string this[string header]\r\n            {\r\n                get\r\n                {\r\n                    return base[header] ?? httpContext.Response.Headers[header];\r\n                }\r\n                set\r\n                {\r\n                    base[header] = value;\r\n\r\n                    // store the header immediately into the buffered response\r\n                    //header = header.ToLowerInvariant();\r\n                    var response = httpContext.Response;\r\n\r\n                    if (header.EqualsOrdinalIgnoreCase(\"location\"))\r\n                    {\r\n                        response.RedirectLocation = location;\r\n                    }\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"content-type\"))\r\n                    {\r\n                        response.ContentType = contentType;\r\n                        response.ContentEncoding = contentEncoding.Encoding;\r\n                    }\r\n                    //else if (header.EqualsOrdinalIgnoreCase(\"set-cookie\"))\r\n                    //{\r\n                    //    response.AddHeader(header, value);\r\n                    //}\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"content-length\"))\r\n                    {\r\n                        // ignore content-length header, it is set correctly by IIS. If set by the app, mostly it is not correct value (strlen() issue).\r\n                    }\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"content-encoding\"))\r\n                    {\r\n                        if (_contentEncoding != null) _contentEncoding.SetEncoding(response);// on IntegratedPipeline, set immediately to Headers\r\n                        else response.ContentEncoding = RequestContext.CurrentContext.DefaultResponseEncoding;\r\n                    }\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"expires\"))\r\n                    {\r\n                        SetExpires(response, value);\r\n                    }\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"cache-control\"))\r\n                    {\r\n                        CacheLimiter(response, value, null);// ignore invalid cache limiter?\r\n                    }\r\n                    else if (header.EqualsOrdinalIgnoreCase(\"set-cookie\"))\r\n                    {\r\n                        if (value != null)\r\n                            response.AddHeader(header, value);\r\n                    }\r\n                    else\r\n                    {\r\n                        if (value != null) response.Headers[header] = value;\r\n                        else response.Headers.Remove(header);\r\n                    }\r\n                }\r\n            }\r\n\r\n            public override void Flush(HttpContext ctx)\r\n            {\r\n                flushed = true;\r\n                // do not flush on Integrated Pipeline\r\n            }\r\n\r\n            public override void Clear()\r\n            {\r\n                base.Clear();\r\n\r\n                HttpResponse response = httpContext.Response;\r\n\r\n                response.RedirectLocation = null;\r\n                response.ContentEncoding = RequestContext.CurrentContext.DefaultResponseEncoding;\r\n                response.ContentType = null;\r\n                response.Headers.Clear();\r\n            }\r\n\r\n            //public override IEnumerator<KeyValuePair<string, string>> GetEnumerator()\r\n            //{\r\n            //    if (!flushed)\r\n            //    {\r\n            //        // yield return buffered headers\r\n            //        IEnumerator<KeyValuePair<string, string>> bufferedHeaders = base.GetEnumerator();\r\n            //        while (bufferedHeaders.MoveNext())\r\n            //            yield return bufferedHeaders.Current;\r\n            //    }\r\n            //    else\r\n            //    {\r\n            //        // return flushed headers from HttpContext (may be also set by ASP application)\r\n\r\n            //        var context = httpContext;\r\n            //        if (context != null)\r\n            //        {\r\n            //            HttpResponse response = context.Response;\r\n\r\n            //            foreach (string key in response.Headers.Keys)\r\n            //            {\r\n            //                string values = response.Headers[key];\r\n            //                if (values != null)\r\n            //                    foreach (var value in values.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))\r\n            //                        yield return new KeyValuePair<string, string>(key, value);\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //}\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Cache-Control\r\n\r\n        /// <summary>\r\n        /// Parse given cache-control header value and set it properly into the HttpContext.Response.Cache object.\r\n        /// </summary>\r\n        /// <param name=\"response\">Current <see cref=\"HttpContext.Response\"/>.</param>\r\n        /// <param name=\"newLimiter\">String value of response cache-header.</param>\r\n        /// <param name=\"invalidCacheLimiterCallback\">Callback function called when invalid cache-limiter value is found. Can be null to take no action.</param>\r\n        public static void CacheLimiter(HttpResponse/*!*/response, string newLimiter, Action<string> invalidCacheLimiterCallback)\r\n        {\r\n            if (string.IsNullOrEmpty(newLimiter))\r\n                return;\r\n\r\n            Debug.Assert(response != null);\r\n\r\n            // store the header into HttpHeaders.headers dictionary (because of classic pipeline and to allow reading of the CacheLimiter value later)\r\n            var context = ScriptContext.CurrentContext;\r\n            if (context != null && context.Headers != null)\r\n                context.Headers.headers[\"cache-control\"] = newLimiter;\r\n            \r\n            //\r\n            var compareInfo = CultureInfo.CurrentCulture.CompareInfo;\r\n\r\n            if (newLimiter.IndexOf(',') < 0)\r\n            {\r\n                CacheLimiterInternal(response, newLimiter, invalidCacheLimiterCallback, compareInfo);\r\n            }\r\n            else\r\n            {\r\n                foreach (var singleLimiter in newLimiter.Split(','))\r\n                    CacheLimiterInternal(response, singleLimiter, invalidCacheLimiterCallback, compareInfo);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Updates the cache control of the given HttpContext.\r\n        /// </summary>\r\n        /// <param name=\"response\">Current HttpResponse instance.</param>\r\n        /// <param name=\"singleLimiter\">Cache limiter passed to the session_cache_limiter() PHP function.</param>\r\n        /// <param name=\"compareInfo\">The current compare info used internally.</param>\r\n        /// <param name=\"invalidCacheLimiterCallback\">Function called when invalid limiter is found.</param>\r\n        private static void CacheLimiterInternal(HttpResponse response, string/*!*/singleLimiter, Action<string> invalidCacheLimiterCallback, CompareInfo/*!*/compareInfo)\r\n        {\r\n            Debug.Assert(singleLimiter != null);\r\n\r\n            singleLimiter = singleLimiter.Trim();\r\n\r\n            if (singleLimiter.Length == 0)\r\n                return;\r\n\r\n            if (compareInfo.Compare(singleLimiter, \"private\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetCacheability(HttpCacheability.Private);\r\n            else if (compareInfo.Compare(singleLimiter, \"public\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetCacheability(HttpCacheability.Public);\r\n            else if (compareInfo.Compare(singleLimiter, \"no-cache\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetCacheability(HttpCacheability.NoCache);\r\n            else if (compareInfo.Compare(singleLimiter, \"private_no_expire\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetCacheability(HttpCacheability.Private);\r\n            else if (compareInfo.Compare(singleLimiter, \"nocache\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetCacheability(HttpCacheability.NoCache);\r\n            else if (compareInfo.Compare(singleLimiter, \"must-revalidate\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);\r\n            else if (compareInfo.Compare(singleLimiter, \"no-store\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetNoStore();\r\n            else if (compareInfo.Compare(singleLimiter, \"no-transform\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetNoTransforms();\r\n            else if (compareInfo.Compare(singleLimiter, \"proxy-revalidate\", CompareOptions.IgnoreCase) == 0)\r\n                response.Cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);\r\n            else\r\n            {\r\n                // <key = value> pairs\r\n                int eqindex = 0;\r\n                if ((eqindex = singleLimiter.IndexOf('=')) > 0 && eqindex < singleLimiter.Length - 1)// does not allow '=' at start or end\r\n                {\r\n                    string key = singleLimiter.Substring(0, eqindex).TrimEnd();\r\n                    string value = singleLimiter.Substring(eqindex + 1).TrimStart();\r\n\r\n                    int intvalue;\r\n\r\n                    if (compareInfo.Compare(key, \"max-age\", CompareOptions.IgnoreCase) == 0 && int.TryParse(value, out intvalue))\r\n                    {\r\n                        response.Cache.SetMaxAge(new TimeSpan(0, 0, intvalue));// \"max-age=seconds\"\r\n                        return;\r\n                    }\r\n                    else if (compareInfo.Compare(key, \"s-maxage\", CompareOptions.IgnoreCase) == 0 && int.TryParse(value, out intvalue))\r\n                    {\r\n                        response.Cache.SetProxyMaxAge(new TimeSpan(0, 0, intvalue));// \"s-maxage=seconds\"\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                // not valid cache-control header\r\n                if (invalidCacheLimiterCallback != null)\r\n                    invalidCacheLimiterCallback(singleLimiter);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Expires\r\n\r\n        /// <summary>\r\n        /// Set the Expires HTTP header properly. Parse the given string.\r\n        /// </summary>\r\n        /// <param name=\"response\">HttpResponse to set the Expires header to.</param>\r\n        /// <param name=\"value\">The raw value of Expires header.</param>\r\n        private static void SetExpires(HttpResponse/*!*/response, string value)\r\n        {\r\n            if (value != null)\r\n            {\r\n                int intvalue;\r\n                if (int.TryParse(value, out intvalue))\r\n                {\r\n                    response.Expires = intvalue;\r\n                }\r\n                else\r\n                {\r\n                    DateTime date;\r\n                    if (!DateTime.TryParse(value, out date))\r\n                    {\r\n                        Func<string, string[], string> remover = (/*!*/str, /*!*/prefixes) =>\r\n                            {\r\n                                foreach (var prefix in prefixes)\r\n                                    if (str.StartsWith(prefix))\r\n                                        return str.Substring(prefix.Length);\r\n                                return str;\r\n                            };\r\n                        // remove(ignore) the day of week\r\n                        value = remover(value, new string[] { \"Mon,\", \"Tue,\", \"Wed,\", \"Thu,\", \"Fri,\", \"Sat,\", \"Sun,\" });\r\n                        if (!DateTime.TryParse(value, out date))\r\n                        {\r\n                            throw new ArgumentException(\"Not a valid DateTime!\", \"value\");\r\n                        }\r\n                    }\r\n\r\n                    response.ExpiresAbsolute = date;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                response.Expires = -1;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Info.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\n\r\n#if !SILVERLIGHT\r\nusing System.Web;\r\n#else\r\nusing System.Windows.Browser;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Manages displaying of information about Phalanger and external PHP modules.\r\n\t/// </summary>\r\n\tpublic static class PhpNetInfo\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Sections of Phalanger information. \r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tpublic enum Sections\r\n\t\t{\r\n\t\t\tGeneral = 1,\r\n\t\t\tCredits = 2,\r\n\t\t\tConfiguration = 4,\r\n\t\t\tExtensions = 8,\r\n\t\t\tEnvironment = 16,\r\n\t\t\tVariables = 32,\r\n\t\t\tLicense = 64,\r\n\t\t\tAll = -1\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes all information about Phalanger and external PHP modules to output.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">An output where to write information.</param>\r\n\t\t/// <param name=\"sections\">A mask of sections which to write.</param>\r\n\t\tpublic static void Write(Sections/*!*/ sections, TextWriter/*!*/ output)\r\n\t\t{\r\n\t\t\toutput.Write(htmlPrologue);\r\n\t\t\toutput.Write(htmlStyle, htmlCss);\r\n\r\n\t\t\tif ((sections & Sections.General) != 0)\r\n\t\t\t{\r\n\t\t\t\tWriteLogo(output);\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & (Sections.Configuration | Sections.General)) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_config\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\tWriteConfiguration(output);\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & Sections.Credits) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_credits\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\tWriteCredits(output);\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & Sections.Extensions) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_loaded_extensions\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\t// TODO: loaded extensions\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & Sections.Environment) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_environment_variables\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\tWriteEnvironmentVariables(output);\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & Sections.Variables) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_global_variables\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\tWriteGlobalVariables(output);\r\n\t\t\t}\r\n\r\n\t\t\tif ((sections & Sections.License) != 0)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<h2>\");\r\n\t\t\t\toutput.Write(CoreResources.GetString(\"info_license\"));\r\n\t\t\t\toutput.Write(\"</h2>\");\r\n\t\t\t\tWriteLicense(output);\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write(htmlEpilogue);\r\n\t\t}\r\n\r\n\t\t#region Private HTML constructs\r\n\r\n\t\tprivate const string htmlTableStart = \"<table cellpadding='3' align='center'>\";\r\n\t\tprivate const string htmlTableEnd = \"</table>\";\r\n\t\tprivate const string htmlTableBoxStart = \"<tr><td>\";\r\n\t\tprivate const string htmlTableHeaderBoxStart = \"<tr class='header'><td>\";\r\n\t\tprivate const string htmlTableBoxEnd = \"</tr></td>\";\r\n\t\tprivate const string htmlHorizontalLine = \"<hr/>\";\r\n\t\tprivate const string htmlTableColspanHeader = \"<tr><td class='colHeader' colspan={0}>{1}</td></tr>\";\r\n\t\tprivate const string htmlSectionCaption = \"<h3>{0}</h3>\";\r\n\t\tprivate const string htmlPrologue = \"<div class='PhpNetInfo' align='center'>\";\r\n\t\tprivate const string htmlEpilogue = \"</div>\";\r\n\t\tprivate const string htmlStyle = \"<style type='text/css'>\\n {0} \\n</style>\";\r\n\t\tprivate const string htmlCss =\r\n\t\t  \"div.PhpNetInfo { font-family:sans-serif; background-color:white; color:black; text-align:center; }\\n\" +\r\n\t\t  \"div.PhpNetInfo pre { margin:0px; font-family:monospace; }\\n\" +\r\n\t\t  \"div.PhpNetInfo a:link { color:#000099; text-decoration:none; }\\n\" +\r\n\t\t  \"div.PhpNetInfo a:hover { text-decoration: underline; }\\n\" +\r\n\t\t  \"div.PhpNetInfo table { width:600px; border-collapse:collapse; text-align:left; }\\n\" +\r\n\t\t  \"div.PhpNetInfo th { text-align: center; !important }\\n\" +\r\n\t\t  \"div.PhpNetInfo td, div.PhpNetInfo th { border:1px solid black; font-size:75%; vertical-align:baseline; }\\n\" +\r\n\t\t  \"div.PhpNetInfo td { background-color:#cccccc; }\\n\" +\r\n\t\t  \"div.PhpNetInfo td.rowHeader { background-color:#ccccff; font-weight:bold; }\\n\" +\r\n\t\t  \"div.PhpNetInfo tr.colHeader { background-color:#9999cc; font-weight:bold; }\\n\" +\r\n\t\t  \"div.PhpNetInfo i { color:#666666; }\\n\" +\r\n\t\t  \"div.PhpNetInfo img { float: right; border:0px; }\\n\" +\r\n\t\t  \"div.PhpNetInfo hr { width:600px; align:center; background-color:#cccccc; border:0px; height:1px; }\\n\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a table row containing given <c>cells</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doEscape\">Do escape HTML entities (tag markers etc.)?</param>\r\n\t\t/// <param name=\"cells\">The content of cells of the written row.</param>\r\n\t\t/// <returns>The row in HTML.</returns>\r\n\t\tprivate static string HtmlRow(bool doEscape, params string[] cells)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\r\n\t\t\tresult.AppendFormat(\"<tr><td class='rowHeader'>{0}</td>\", cells[0]);\r\n\t\t\tfor (int i = 1; i < cells.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring cell = cells[i];\r\n\t\t\t\tif (cell == null || cell == \"\") cell = \"<i>no value</i>\";\r\n\t\t\t\telse\r\n\t\t\t\t\tif (doEscape) cell = HttpUtility.HtmlEncode(cell);\r\n\r\n\t\t\t\tresult.AppendFormat(\"<td>{0}</td>\", cell);\r\n\t\t\t}\r\n\t\t\tresult.AppendFormat(\"</tr>\");\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Outputs a table row containing a variable dump.\r\n\t\t/// </summary>\r\n\t\tprivate static void HtmlVarRow(TextWriter output, string array, object name, object variable)\r\n\t\t{\r\n\t\t\tstring s;\r\n\r\n\t\t\toutput.Write(\"<tr><td class='rowHeader'>{0}[\\\"\", array);\r\n\r\n\t\t\t// name:\r\n\t\t\tif ((s = name as string) != null)\r\n\t\t\t\toutput.Write((string)StringUtils.AddCSlashes(s, false, true));\r\n\t\t\telse\r\n\t\t\t\toutput.Write((int)name);\r\n\r\n\t\t\t// printed value:\r\n\t\t\toutput.Write(\"\\\"]</td><td>\");\r\n\r\n\t\t\tIPhpPrintable printable;\r\n\r\n\t\t\tif (variable == null || (variable as string) == String.Empty)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"<i>no value</i>\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tif ((printable = variable as IPhpPrintable) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(\"<pre>\");\r\n\t\t\t\t\tStringWriter str_output = new StringWriter();\r\n\t\t\t\t\tprintable.Print(str_output);\r\n                    output.Write(HttpUtility.HtmlEncode(str_output.ToString()));\r\n\t\t\t\t\toutput.Write(\"</pre>\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(Convert.ObjectToString(variable));\r\n\t\t\t\t}\r\n\r\n\t\t\toutput.Write(\"</td></tr>\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a table header row containing given <c>cells</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"cells\">The content of cells of the written row.</param>\r\n\t\t/// <returns>The row in HTML.</returns>\r\n\t\tprivate static string HtmlHeaderRow(params string[] cells)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder(\"<tr class='colHeader'>\");\r\n\r\n\t\t\tforeach (string cell in cells)\r\n\t\t\t\tresult.AppendFormat(\"<th>{0}</th>\", (cell == null || cell == \"\") ? \" \" : cell);\r\n\r\n\t\t\tresult.Append(\"</tr>\");\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\tprivate static string HtmlEntireRowHeader(string text, int count)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder(\"<tr class='colHeader'>\");\r\n\r\n\t\t\tresult.AppendFormat(\"<th colspan='{0}' align='center'>{1}</th>\", count, text);\r\n\r\n\t\t\tresult.Append(\"</tr>\");\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts option's value to string to be displayed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value of the option.</param>\r\n\t\t/// <returns>String representation of the option's value.</returns>\r\n\t\tprivate static string OptionValueToString(object value)\r\n\t\t{\r\n\t\t\t// lists:\r\n\t\t\tIList list = value as IList;\r\n\t\t\tif (list != null)\r\n\t\t\t{\r\n\t\t\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\t\tfor (int i = 0; i < list.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (list[i] != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (i > 0) sb.Append(\"; \");\r\n\t\t\t\t\t\tsb.Append(list[i].ToString());\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn sb.ToString();\r\n\t\t\t}\r\n\r\n\t\t\t// convertible:\r\n\t\t\tIPhpConvertible conv = value as IPhpConvertible;\r\n\t\t\tif (conv != null)\r\n\t\t\t\treturn conv.ToString();\r\n\r\n\t\t\tEncoding encoding = value as Encoding;\r\n\t\t\tif (encoding != null)\r\n\t\t\t\treturn encoding.WebName;\r\n\r\n\t\t\t// others:  \r\n\t\t\treturn (value == null) ? String.Empty : value.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Info Writers\r\n\r\n\t\tprivate static void WriteLogo(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(\"<h1>Phalanger {0}{1} {2}</h1>\",\r\n                PhalangerVersion.Current,\r\n#if DEBUG\r\n                \", DEBUG,\",\r\n#else\r\n                null,\r\n#endif\r\n                (Environment.Is64BitProcess ? \"x64\" : \"x86\"));\r\n\t\t\toutput.Write(\"<h4>The PHP language compiler for .NET Framework</h4>\");\r\n\t\t}\r\n\r\n\t\tprivate static void WriteLicense(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(\"<tr><td>\");\r\n\t\t\toutput.Write(\r\n\t\t\t\"<p align='center'>\" +\r\n            \"<b>Copyright (c) Jan Benda, Miloslav Beno, Martin Maly, Tomas Matousek, Jakub Misek, Pavel Novak, Vaclav Novak, and Ladislav Prosek.</b>\" +\r\n\t\t\t\"</p>\");\r\n\t\t\toutput.Write(CoreResources.GetString(\"info_license_text\"));\r\n\t\t\toutput.Write(\"</td></tr>\");\r\n\t\t\toutput.Write(htmlTableEnd);\r\n\t\t}\r\n\r\n\t\tprivate static void WriteCredits(TextWriter output)\r\n\t\t{\r\n\t\t\tstring contribution = CoreResources.GetString(\"credits_contribution\");\r\n\t\t\tstring authors = CoreResources.GetString(\"credits_authors\");\r\n\r\n\t\t\toutput.Write(htmlSectionCaption, CoreResources.GetString(\"credits_design\"));\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(HtmlHeaderRow(contribution, authors));\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_overall_concept\"), \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_specific_features_compilation\"), \"Tomas Matousek, Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_oo_features_compilation\"), \"Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_php_clr\"), \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_overall_compiler_design\"), \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_code_analysis\"), \"Tomas Matousek, Vaclav Novak\"));\r\n            output.Write(HtmlRow(false, \"Core\", \"Tomas Matousek, Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, \"Class Library\", \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_extmgr_wrappers\"), \"Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_ast\"), \"Vaclav Novak, Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_compiler_tables\"), \"Tomas Matousek, Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_code_generator\"), \"Tomas Matousek, Ladislav Prosek, Martin Maly\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_configuration\"), \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_aspnet\"), \"Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_automatic_tests\"), \"Pavel Novak\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_interactive_tests\"), \"Jan Benda, Jakub Misek\"));\r\n\r\n            output.Write(htmlTableEnd);\r\n\r\n            output.Write(htmlSectionCaption, CoreResources.GetString(\"credits_implementation\"));\r\n            output.Write(htmlTableStart);\r\n            output.Write(HtmlHeaderRow(contribution, authors));\r\n\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_core_functionality\"), \"Tomas Matousek, Ladislav Prosek, Tomas Petricek, Daniel Balas, Jakub Misek, Miloslav Beno\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_lexical_syntactic_analysis\"), \"Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_semantic_analysis\"), \"Tomas Matousek, Vaclav Novak\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_code_generation\"), \"Tomas Matousek, Ladislav Prosek, Martin Maly, Jakub Misek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_clr_features\"), \"Ladislav Prosek, Tomas Matousek\"));\r\n            output.Write(HtmlRow(false, \"Class Library\", \"Tomas Matousek, Ladislav Prosek, Jan Benda, Pavel Novak, Tomas Petricek, Daniel Balas, Miloslav Beno, Jakub Misek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_extensions_management\"), \"Ladislav Prosek, Daniel Balas, Jakub Misek\"));\r\n            output.Write(HtmlRow(false, \"SHM Channel\", \"Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_aspnet\"), \"Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_vsnet\"), \"Tomas Matousek, Tomas Petricek, Jakub Misek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_streams\"), \"Jan Benda\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_interactive_tests\"), \"Jan Benda\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_automatic_tester\"), \"Pavel Novak, Jakub Misek, Miloslav Beno\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_utilities\"), \"Tomas Matousek, Ladislav Prosek\"));\r\n            output.Write(HtmlRow(false, CoreResources.GetString(\"credits_installation\"), \"Ladislav Prosek, Jakub Misek\"));\r\n\r\n\t\t\toutput.Write(htmlTableEnd);\r\n\t\t}\r\n\r\n\t\tprivate const BindingFlags ConfigBindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance;\r\n\r\n\t\tprivate static void ReflectConfigSection(TextWriter output, string prefix, Type type, object config1, object config2)\r\n\t\t{\r\n\t\t\tFieldInfo[] fields = type.GetFields(ConfigBindingFlags);\r\n\t\t\tPropertyInfo[] properties = type.GetProperties(ConfigBindingFlags);\r\n\t\t\tstring[] cells = new string[(config2 != null) ? 3 : 2];\r\n\r\n\t\t\t// fields which contains sections:\r\n\t\t\tfor (int i = 0; i < fields.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (fields[i].IsDefined(typeof(NoPhpInfoAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\tfields[i] = null;\r\n\t\t\t\t}\r\n\t\t\t\telse if (typeof(IPhpConfigurationSection).IsAssignableFrom(fields[i].FieldType))\r\n\t\t\t\t{\r\n\t\t\t\t\tReflectConfigSection(output, prefix + fields[i].Name + \".\", fields[i].FieldType,\r\n\t\t\t\t\t  fields[i].GetValue(config1), (config2 != null) ? fields[i].GetValue(config2) : null);\r\n\r\n\t\t\t\t\tfields[i] = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// remaining fields:\r\n\t\t\tfor (int i = 0; i < fields.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (fields[i] != null)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcells[0] = prefix + fields[i].Name;\r\n\t\t\t\t\t\tcells[1] = OptionValueToString(fields[i].GetValue(config1));\r\n\t\t\t\t\t\tif (config2 != null) cells[2] = OptionValueToString(fields[i].GetValue(config2));\r\n\r\n\t\t\t\t\t\toutput.Write(HtmlRow(true, cells));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcells[1] = e.Message;\r\n\t\t\t\t\t\tif (config2 != null) cells[2] = null;\r\n\t\t\t\t\t\toutput.Write(HtmlRow(true, cells));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// properties:\r\n\t\t\tforeach (PropertyInfo property in properties)\r\n\t\t\t{\r\n\t\t\t\tif (!property.IsDefined(typeof(NoPhpInfoAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcells[0] = prefix + property.Name;\r\n\t\t\t\t\t\tcells[1] = OptionValueToString(property.GetValue(config1, null));\r\n\t\t\t\t\t\tif (config2 != null) cells[2] = OptionValueToString(property.GetValue(config2, null));\r\n\r\n\t\t\t\t\t\toutput.Write(HtmlRow(true, cells));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcells[1] = e.Message;\r\n\t\t\t\t\t\tif (config2 != null) cells[2] = null;\r\n\t\t\t\t\t\toutput.Write(HtmlRow(true, cells));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes core configuration to given output.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Configuration is traversed by reflection methods and all fields and its values are formatted to table.\r\n\t\t/// </remarks>\r\n\t\tprivate static void WriteConfiguration(TextWriter/*!*/ output)\r\n\t\t{\r\n\t\t\tApplicationContext app_context = ScriptContext.CurrentContext.ApplicationContext;\r\n\t\t\tDebug.Assert(!app_context.AssemblyLoader.ReflectionOnly);\r\n\t\t\t\r\n\t\t\tstring directive = CoreResources.GetString(\"info_directive\");\r\n\r\n\t\t\t// script dependent configuration //\r\n\r\n\t\t\toutput.Write(htmlSectionCaption, CoreResources.GetString(\"info_script_dependent\"));\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(HtmlEntireRowHeader(\"Core\", 3));\r\n\t\t\toutput.Write(HtmlHeaderRow(directive, CoreResources.GetString(\"info_script_value\"), CoreResources.GetString(\"info_master_value\")));\r\n\r\n\t\t\t// core:\r\n\t\t\tReflectConfigSection(output, \"\", typeof(LocalConfiguration), Configuration.Local, Configuration.DefaultLocal);\r\n\r\n\t\t\t// libraries:\r\n\t\t\tforeach (PhpLibraryAssembly lib_assembly in app_context.GetLoadedLibraries())\r\n\t\t\t{\r\n\t\t\t\tIPhpConfiguration local = Configuration.Local.GetLibraryConfig(lib_assembly.Descriptor);\r\n\t\t\t\tIPhpConfiguration @default = Configuration.DefaultLocal.GetLibraryConfig(lib_assembly.Descriptor);\r\n\r\n\t\t\t\tif (local != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!local.GetType().IsDefined(typeof(NoPhpInfoAttribute), false))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.Write(HtmlEntireRowHeader(HttpUtility.HtmlEncode(lib_assembly.Properties.Name), 3));\r\n\t\t\t\t\t\toutput.Write(HtmlHeaderRow(directive, CoreResources.GetString(\"info_script_value\"), CoreResources.GetString(\"info_master_value\")));\r\n\t\t\t\t\t\tReflectConfigSection(output, \"\", local.GetType(), local, @default);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write(htmlTableEnd);\r\n\r\n\t\t\t// script independent configuration //\r\n\r\n\t\t\toutput.Write(htmlSectionCaption, CoreResources.GetString(\"info_shared\"));\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(HtmlEntireRowHeader(\"Core\", 2));\r\n\t\t\toutput.Write(HtmlHeaderRow(directive, CoreResources.GetString(\"info_value\")));\r\n\r\n\t\t\t// core:\r\n\t\t\tReflectConfigSection(output, \"\", typeof(GlobalConfiguration), Configuration.Global, null);\r\n\r\n\t\t\t// libraries:\r\n\t\t\tforeach (PhpLibraryAssembly lib_assembly in app_context.GetLoadedLibraries())\r\n\t\t\t{\r\n\t\t\t\tobject config = Configuration.Global.GetLibraryConfig(lib_assembly.Descriptor);\r\n\r\n\t\t\t\tif (config != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!config.GetType().IsDefined(typeof(NoPhpInfoAttribute), false))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.Write(HtmlEntireRowHeader(HttpUtility.HtmlEncode(lib_assembly.Properties.Name), 2));\r\n\t\t\t\t\t\toutput.Write(HtmlHeaderRow(directive, CoreResources.GetString(\"info_value\")));\r\n\t\t\t\t\t\tReflectConfigSection(output, \"\", config.GetType(), config, null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write(htmlTableEnd);\r\n\t\t}\r\n\r\n\t\tprivate static void WriteAutoGlobal(TextWriter output, ScriptContext context, string name, PhpReference autoglobal)\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\r\n\t\t\tif ((array = autoglobal.Value as PhpArray) != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t\t\tHtmlVarRow(output, name, entry.Key.Object, entry.Value);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tprivate static void WriteGlobalVariables(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(HtmlHeaderRow(CoreResources.GetString(\"info_variable\"), CoreResources.GetString(\"info_value\")));\r\n\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n#if !SILVERLIGHT\r\n\t\t\tWriteAutoGlobal(output, context, VariableName.GetName, context.AutoGlobals.Get);\r\n            WriteAutoGlobal(output, context, VariableName.PostName, context.AutoGlobals.Post);\r\n            WriteAutoGlobal(output, context, VariableName.CookieName, context.AutoGlobals.Cookie);\r\n            WriteAutoGlobal(output, context, VariableName.FilesName, context.AutoGlobals.Files);\r\n            WriteAutoGlobal(output, context, VariableName.SessionName, context.AutoGlobals.Session);\r\n            WriteAutoGlobal(output, context, VariableName.ServerName, context.AutoGlobals.Server);\r\n            WriteAutoGlobal(output, context, VariableName.EnvName, context.AutoGlobals.Env);\r\n#endif\r\n\r\n\t\t\toutput.Write(htmlTableEnd);\r\n\t\t}\r\n\r\n\t\tprivate static void WriteEnvironmentVariables(TextWriter output)\r\n\t\t{\r\n#if !SILVERLIGHT\r\n\t\t\toutput.Write(htmlTableStart);\r\n\t\t\toutput.Write(HtmlHeaderRow(CoreResources.GetString(\"info_variable\"), CoreResources.GetString(\"info_value\")));\r\n\r\n\t\t\tIDictionary env_vars = Environment.GetEnvironmentVariables();\r\n\t\t\tforeach (DictionaryEntry entry in env_vars)\r\n\t\t\t\toutput.Write(HtmlRow(true, entry.Key as string, entry.Value as string));\r\n\r\n\t\t\toutput.Write(htmlTableEnd);\r\n#endif\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region External callbacks\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints the section caption. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\">If true, the section caption is sent to output and returned, if false,\r\n\t\t/// the section caption is returned.</param>\r\n\t\t/// <param name=\"caption\">The caption.</param>\r\n\t\t/// <returns>The section caption.</returns>\r\n\t\t[ExternalCallback(\"SECTION\")]\r\n\t\tpublic static string PrintSectionCaption(bool print, string caption)\r\n\t\t{\r\n\t\t\tstring ret = String.Format(htmlSectionCaption, caption);\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints the table starting tag.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\"> If true, the tag is sent to output and returned, if false, the tag\r\n\t\t/// is returned.</param>\r\n\t\t/// <returns>The table starting tag.</returns>\r\n\t\t[ExternalCallback(\"php_info_print_table_start\")]\r\n\t\tpublic static string PrintTableStart(bool print)\r\n\t\t{\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(htmlTableStart);\r\n\t\t\treturn htmlTableStart;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints the table ending tag.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\"> If true, the tag is sent to output and returned, if false, the tag\r\n\t\t/// is returned.</param>\r\n\t\t/// <returns>The table ending tag.</returns>\r\n\t\t[ExternalCallback(\"php_info_print_table_end\")]\r\n\t\tpublic static string PrintTableEnd(bool print)\r\n\t\t{\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(htmlTableEnd);\r\n\t\t\treturn htmlTableEnd;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints table row (tr) starting tag and the first column starting tag (td).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\"> If true, the tags are sent to output and returned, if false, \r\n\t\t/// the tags are returned.</param>\r\n\t\t/// <param name=\"isHeader\">Nonzero if the row is a header row.</param>\r\n\t\t/// <returns>Table row (tr) starting tag and the first column starting tag (td).</returns>\r\n\t\t[ExternalCallback(\"php_info_box_start\")]\r\n\t\tpublic static string PrintBoxStart(bool print, int isHeader)\r\n\t\t{\r\n\t\t\tstring ret = (isHeader == 0) ? htmlTableBoxStart : htmlTableHeaderBoxStart;\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints td and tr ending tags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\"> If true, the tags are sent to output and returned, if false, \r\n\t\t/// the tags are returned.</param>\r\n\t\t/// <returns>Td and tr ending tags.</returns>\r\n\t\t[ExternalCallback(\"php_info_box_end\")]\r\n\t\tpublic static string PrintBoxEnd(bool print)\r\n\t\t{\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(htmlTableBoxEnd);\r\n\t\t\treturn htmlTableBoxEnd;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints horizontal line (hr) tag.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\"> If true, the tag is sent to output and returned, if false, the tag\r\n\t\t/// is returned.</param>\r\n\t\t/// <returns>Horizontal line (hr) tag.</returns>\r\n\t\t[ExternalCallback(\"php_info_hr\")]\r\n\t\tpublic static string PrintHr(bool print)\r\n\t\t{\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(htmlHorizontalLine);\r\n\t\t\treturn htmlHorizontalLine;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints table header occupying given number of columns.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\">If true, the header is sent to output and returned, if false, the\r\n\t\t/// header is returned.</param>\r\n\t\t/// <param name=\"columnCount\">The number of columns.</param>\r\n\t\t/// <param name=\"caption\">The caption printed.</param>\r\n\t\t/// <returns>The table header.</returns>\r\n\t\t[ExternalCallback(\"php_info_print_table_colspan_header\")]\r\n\t\tpublic static string PrintTableColspanHeader(bool print, int columnCount, string caption)\r\n\t\t{\r\n\t\t\tstring ret = String.Format(htmlTableColspanHeader, columnCount, caption);\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints table header having several columns. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\">If true, the header is sent to output and returned, if false, the\r\n\t\t/// header is returned.</param>\r\n\t\t/// <param name=\"cells\">Captions of columns.</param>\r\n\t\t/// <returns>The table header.</returns>\r\n\t\t[ExternalCallback(\"php_info_print_table_header\")]\r\n\t\tpublic static string PrintTableHeader(bool print, params string[] cells)\r\n\t\t{\r\n\t\t\tstring ret = HtmlHeaderRow(cells);\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints table row having several columns. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"print\">If true, the row is sent to output and returned, if false, the\r\n\t\t/// row is returned.</param>\r\n\t\t/// <param name=\"cells\">Cells' content.</param>\r\n\t\t/// <returns>The table row.</returns>\r\n\t\t[ExternalCallback(\"php_info_print_table_row\")]\r\n\t\tpublic static string PrintTableRow(bool print, params string[] cells)\r\n\t\t{\r\n\t\t\tstring ret = HtmlRow(true, cells);\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t[ExternalCallback(\"php_info_print_css\")]\r\n\t\tpublic static string PrintCss(bool print)\r\n\t\t{\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(htmlCss);\r\n\t\t\treturn htmlCss;\r\n\t\t}\r\n\r\n\t\t[ExternalCallback(\"php_info_print_style\")]\r\n\t\tpublic static string PrintStyle(bool print)\r\n\t\t{\r\n\t\t\tstring ret = String.Format(htmlStyle, htmlCss);\r\n\t\t\tif (print) ScriptContext.CurrentContext.Output.Write(ret);\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#region Version\r\n\r\n    /// <summary>\r\n    /// Provides version information of Phalanger runtime.\r\n    /// </summary>\r\n    public static class PhalangerVersion\r\n    {\r\n        /// <summary>\r\n        /// Current Phalanger version obtained from <see cref=\"AssemblyFileVersionAttribute\"/> or version of this assembly.\r\n        /// </summary>\r\n        public static readonly string/*!*/Current;\r\n\r\n        /// <summary>\r\n        /// Phalanger name obtained from <see cref=\"AssemblyProductAttribute\"/>.\r\n        /// </summary>\r\n        public static readonly string/*!*/ProductName;\r\n\r\n        static PhalangerVersion()\r\n        {\r\n            var/*!*/ass = typeof(PhalangerVersion).Assembly;\r\n\r\n            object[] attrsPhalangerVer = ass.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);\r\n            Current = attrsPhalangerVer.Length > 0\r\n                ? ((AssemblyFileVersionAttribute)attrsPhalangerVer[0]).Version\r\n                : ass.GetName().Version.ToString(4);\r\n\r\n            object[] attrsPhalangerProduct = ass.GetCustomAttributes(typeof(AssemblyProductAttribute), false);\r\n            Debug.Assert(attrsPhalangerProduct.Length > 0);\r\n            ProductName = ((AssemblyProductAttribute)attrsPhalangerProduct[0]).Product;\r\n        }\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// Provides means for working with PHP version as well as the currently supported version.\r\n\t/// </summary>\r\n\tpublic sealed class PhpVersion\r\n\t{\r\n        /// <summary>\r\n        /// Currently supported PHP major version.\r\n        /// </summary>\r\n        public const int Major = 5;\r\n\r\n        /// <summary>\r\n        /// Currently supported PHP minor version.\r\n        /// </summary>\r\n        public const int Minor = 3;\r\n\r\n        /// <summary>\r\n        /// Currently supported PHP release version.\r\n        /// </summary>\r\n        public const int Release = 10;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Currently supported PHP version.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly string Current = Major + \".\" + Minor + \".\" + Release;\r\n\r\n        /// <summary>\r\n        /// Extra version string.\r\n        /// </summary>\r\n        public const string Extra = \"phalanger\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Currently supported Zend Engine version.\r\n\t\t/// </summary>\r\n\t\tpublic const string Zend = \"2.0.0\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares parts of varsions delimited by '.'.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"part1\">A part of the first version.</param>\r\n\t\t/// <param name=\"part2\">A part of the second version.</param>\r\n\t\t/// <returns>The result of parts comparison (-1,0,+1).</returns>\r\n\t\tprivate static int CompareParts(string part1, string part2)\r\n\t\t{\r\n\t\t\tstring[] parts = { \"dev\", \"alpha\", \"a\", \"beta\", \"b\", \"RC\", \" \", \"#\", \"pl\", \"p\" };\r\n\t\t\tint[] order = { -1, 0, 1, 1, 2, 2, 3, 4, 5, 6, 6 };\r\n\r\n\t\t\t// GENERICS:\r\n\t\t\tint i = Array.IndexOf(parts, part1);\r\n\t\t\tint j = Array.IndexOf(parts, part2);\r\n\t\t\treturn Math.Sign(order[i + 1] - order[j + 1]);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a version and splits it into an array of parts.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"version\">The version to be parsed (can be a <B>null</B> reference).</param>\r\n\t\t/// <returns>An array of parts.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Non-alphanumeric characters are eliminated.\r\n\t\t/// The version is split in between a digit following a non-digit and by   \r\n\t\t/// characters '.', '-', '+', '_'. \r\n\t\t/// </remarks>\r\n\t\tprivate static string[] VersionToArray(string version)\r\n\t\t{\r\n\t\t\tif (version == null || version.Length == 0)\r\n\t\t\t\treturn ArrayUtils.EmptyStrings;\r\n\r\n\t\t\tStringBuilder sb = new StringBuilder(version.Length);\r\n\t\t\tchar last = '\\0';\r\n\r\n\t\t\tfor (int i = 0; i < version.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (version[i] == '-' || version[i] == '+' || version[i] == '_' || version[i] == '.')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last != '.') sb.Append(last = '.');\r\n\t\t\t\t}\r\n\t\t\t\telse if (i > 0 && (Char.IsDigit(version[i]) ^ Char.IsDigit(version[i - 1])))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last != '.') sb.Append('.');\r\n\t\t\t\t\tsb.Append(last = version[i]);\r\n\t\t\t\t}\r\n\t\t\t\telse if (Char.IsLetterOrDigit(version[i]))\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(last = version[i]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last != '.') sb.Append(last = '.');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (last == '.') sb.Length--;\r\n\r\n\t\t\treturn sb.ToString().Split('.');\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two PHP versions.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ver1\">The first version.</param>\r\n\t\t/// <param name=\"ver2\">The second version.</param>\r\n\t\t/// <returns>The result of comparison (-1,0,+1).</returns>\r\n\t\tpublic static int Compare(string ver1, string ver2)\r\n\t\t{\r\n\t\t\tstring[] v1 = VersionToArray(ver1);\r\n\t\t\tstring[] v2 = VersionToArray(ver2);\r\n\t\t\tint result;\r\n\r\n\t\t\tfor (int i = 0; i < Math.Max(v1.Length, v2.Length); i++)\r\n\t\t\t{\r\n\t\t\t\tstring item1 = (i < v1.Length) ? v1[i] : \" \";\r\n\t\t\t\tstring item2 = (i < v2.Length) ? v2[i] : \" \";\r\n\r\n\t\t\t\tif (Char.IsDigit(item1[0]) && Char.IsDigit(item2[0]))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = PhpComparer.CompareInteger(Convert.StringToInteger(v1[i]), Convert.StringToInteger(item2));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = CompareParts(Char.IsDigit(item1[0]) ? \"#\" : item1, Char.IsDigit(item2[0]) ? \"#\" : item2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (result != 0)\r\n\t\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two PHP versions using a specified operator.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ver1\">The first version.</param>\r\n\t\t/// <param name=\"ver2\">The second version.</param>\r\n\t\t/// <param name=\"op\">\r\n\t\t/// The operator (supported are: \"&lt;\",\"lt\";\"&lt;=\",\"le\";\"&gt;\",\"gt\";\"&gt;=\",\"ge\";\"==\",\"=\",\"eq\";\"!=\",\"&lt;&gt;\",\"ne\").\r\n\t\t/// </param>\r\n\t\t/// <returns>The result of the comparison.</returns>\r\n\t\tpublic static object Compare(string ver1, string ver2, string op) // GENERICS: return value: bool?\r\n\t\t{\r\n\t\t\tswitch (op)\r\n\t\t\t{\r\n\t\t\t\tcase \"<\":\r\n\t\t\t\tcase \"lt\": return Compare(ver1, ver2) < 0;\r\n\r\n\t\t\t\tcase \"<=\":\r\n\t\t\t\tcase \"le\": return Compare(ver1, ver2) <= 0;\r\n\r\n\t\t\t\tcase \">\":\r\n\t\t\t\tcase \"gt\": return Compare(ver1, ver2) > 0;\r\n\r\n\t\t\t\tcase \">=\":\r\n\t\t\t\tcase \"ge\": return Compare(ver1, ver2) >= 0;\r\n\r\n\t\t\t\tcase \"==\":\r\n\t\t\t\tcase \"=\":\r\n\t\t\t\tcase \"eq\": return Compare(ver1, ver2) == 0;\r\n\r\n\t\t\t\tcase \"!=\":\r\n\t\t\t\tcase \"<>\":\r\n\t\t\t\tcase \"ne\": return Compare(ver1, ver2) != 0;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG\r\n\r\n\t\tpublic static void Test()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Version to array:\");\r\n\t\t\tstring[] vers = { \"4.0.4\", \"5.0-1RC\", \"abc099sdf2-+........3...\", \"4.3.2RC1\" };\r\n\t\t\tforeach (string ver in vers)\r\n\t\t\t\tConsole.WriteLine(String.Join(\";\", VersionToArray(ver)));\r\n\r\n\t\t\tConsole.WriteLine(\"\\nComparation of Parts:\");\r\n\t\t\tstring[] parts = { \"#\", \"RC\", \"p\", \"dev\", \"devxxx\", \"ssss\" };\r\n\t\t\tforeach (string part1 in parts)\r\n\t\t\t\tforeach (string part2 in parts)\r\n\t\t\t\t{\r\n\t\t\t\t\tint r = CompareParts(part1, part2);\r\n\t\t\t\t\tConsole.WriteLine(\"{0}{1}{2}\", part1, (r < 0) ? \"<\" : (r > 0) ? \">\" : \"==\", part2);\r\n\t\t\t\t}\r\n\r\n\t\t\tConsole.WriteLine(\"\\nComparation of Versions:\");\r\n\t\t\tvers = new string[] { \"4.0.4\", \"5.0.1RC\", \"3\", \"5.0.1beta\", \"5.0.1\", \"5.0.1.0.0.0.0\" };\r\n\t\t\tforeach (string ver1 in vers)\r\n\t\t\t\tforeach (string ver2 in vers)\r\n\t\t\t\t{\r\n\t\t\t\t\tint r = CompareParts(ver1, ver2);\r\n\t\t\t\t\tConsole.WriteLine(\"{0}{1}{2}\", ver1, (r < 0) ? \"<\" : (r > 0) ? \">\" : \"==\", ver2);\r\n\t\t\t\t}\r\n\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Library.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Configuration;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Threading;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Base class for Phalanger library descriptors.\r\n\t/// </summary>\r\n\tpublic abstract partial class PhpLibraryDescriptor\r\n\t{\r\n\t\t#region Methods to be implemented by subclasses\r\n\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when library loading is finished and descriptor is initialized.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assemblyAttribute\">\r\n\t\t/// A metadata attribute defined on library assembly or a <B>null</B> reference.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"configStore\">\r\n\t\t/// A collection of XML attributes used in configuration file to add the assembly to the Class Library\r\n\t\t/// or a <B>null</B> reference.\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// Library is load when configuration reader finds out a node defining the library.\r\n\t\t/// After library is loaded the reader continues with configuration reading and calls <see cref=\"ParseConfig\"/>\r\n\t\t/// when it reaches the section belonging to the library.\r\n\t\t/// </remarks>\r\n\t\tinternal protected virtual void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tDebug.WriteLine(\"CONFIG\", \"Library loaded: idx={0}, assembly={1}\", UniqueIndex, RealAssembly.FullName);\r\n\r\n            this.assemblyAttribute = assemblyAttribute;\r\n\t\t}\r\n\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"userContext\">\r\n\t\t/// User specified configuration context. Contains a <B>null</B> reference if the method is called for the first time\r\n\t\t/// or an instance of the user configuration type partially filled with configuration values which has\r\n\t\t/// been already processed.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"context\">The Core configuration context.</param>\r\n\t\t/// <param name=\"section\">XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>\r\n\t\t/// The library configuration context which is is passed to the next iteration of the method if any.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// The method is called for each configuration file and each XML node containing configuration of the library\r\n\t\t/// as they are processed by .NET configuration loader. Note that the method may not be called at all. \r\n\t\t/// </remarks>\r\n\t\tinternal protected abstract ConfigContextBase ParseConfig(ConfigContextBase userContext,\r\n\t\t\tPhpConfigurationContext context, XmlNode section);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// An initialized configuration context. Should not be a <B>null</B> reference.\r\n\t\t/// Creates an empty context for libraries that doesn't use configuration.\r\n\t\t/// </returns>\r\n\t\tinternal protected virtual ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\t// GENERICS: not needed, since factories can be written via generics\r\n\t\t\treturn new ConfigContextBase(null, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Validates configuration after it has been completely read.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"userContext\">The configuration context.</param>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Configuration is invalid.</exception>\r\n\t\tinternal protected virtual void Validate(ConfigContextBase userContext)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\tinternal sealed partial class DefaultLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\tinternal protected override ConfigContextBase ParseConfig(ConfigContextBase userContext, PhpConfigurationContext context, System.Xml.XmlNode section)\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal protected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\treturn new ConfigContextBase(null, null);\r\n\t\t}\r\n\t}\r\n\r\n}"
  },
  {
    "path": "Source/Core/Library.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Configuration;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Threading;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Base class for Phalanger library descriptors.\r\n\t/// </summary>\r\n\tpublic abstract partial class PhpLibraryDescriptor\r\n\t{\r\n\t\t#region Methods to be implemented by subclasses\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when library loading is finished and descriptor is initialized.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assemblyAttribute\">\r\n\t\t/// A metadata attribute defined on library assembly or a <B>null</B> reference.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"configAttributes\">\r\n\t\t/// A collection of XML attributes used in configuration file to add the assembly to the Class Library\r\n\t\t/// or a <B>null</B> reference.\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// Library is load when configuration reader finds out a node defining the library.\r\n\t\t/// After library is loaded the reader continues with configuration reading and calls <see cref=\"ParseConfig\"/>\r\n\t\t/// when it reaches the section belonging to the library.\r\n\t\t/// </remarks>\r\n\t\tinternal protected virtual void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tDebug.WriteLine(\"CONFIG\", \"Library loaded: idx={0}, assembly={1}\", UniqueIndex, RealAssembly.FullName);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/Library.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Configuration;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Threading;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Base class for Phalanger library descriptors.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic abstract partial class PhpLibraryDescriptor\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic Assembly RealAssembly { get { return module.Assembly.RealAssembly; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Module representing the library. \r\n\t\t/// Written up when the library is loaded.\r\n\t\t/// </summary>\r\n\t\tpublic DModule Module { get { return module; } }\r\n\t\t[NonSerialized] // TODO? MarshalByRef?\r\n\t\tprivate DModule module;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unique index assigned to the library. \r\n\t\t/// Written up when the library is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal int UniqueIndex { get { return uniqueIndex; } }\r\n\t\tprivate int uniqueIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the section in the configuration file or a <B>null</B> reference if no section is used or \r\n\t\t/// the section name has not been set yet (e.g. during <see cref=\"Loaded\"/> callback).\r\n\t\t/// Written up when the confgiuration is loaded.\r\n\t\t/// </summary>\r\n\t\tpublic string ConfigurationSectionName { get { return configurationSectionName; } }\r\n\t\tprivate string configurationSectionName;\r\n\r\n        ///// <summary>\r\n        ///// Returns a list of names of extensions which are implemented by the library.\r\n        ///// </summary>\r\n        ///// <returns>An array of names.</returns>\r\n        ///// <remarks>The first item (if any) is considered to be default extension for the library.</remarks>\r\n        //public /*virtual*/ string[] ImplementedExtensions\r\n        //{\r\n        //    get\r\n        //    {\r\n        //        Debug.Assert(assemblyAttribute != null);\r\n\r\n        //        return assemblyAttribute.ImplementsExtensions;\r\n        //    }\r\n        //}\r\n\r\n        protected PhpLibraryAttribute assemblyAttribute;\r\n\r\n        ///// <summary>\r\n        ///// Returns a name of default extension which is implemented by the library.\r\n        ///// </summary>\r\n        ///// <remarks>The first item (if any) is considered to be default extension for the library.</remarks>\r\n        //public string DefaultExtension\r\n        //{\r\n        //    get { \r\n\r\n        //        string[] extensions = this.ImplementedExtensions;\r\n\r\n        //        if (extensions.Length > 0)\r\n        //            return extensions[0];\r\n        //        else\r\n        //            return null;\r\n        //    }\r\n        //}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Subclasses should have a parameter-less constructor.\r\n\t\t/// </summary>\r\n\t\tprotected PhpLibraryDescriptor()\r\n\t\t{\r\n\t\t\tthis.module = null;\r\n\t\t\tthis.uniqueIndex = -1;\r\n\t\t\tthis.configurationSectionName = null;\r\n\t\t}\r\n\r\n\t\tinternal void WriteUp(DModule/*!*/ module, int uniqueIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.module == null, \"Already written up\");\r\n\t\t\tDebug.Assert(module != null);\r\n\r\n\t\t\tthis.module = module;\r\n\t\t\tthis.uniqueIndex = uniqueIndex;\r\n\t\t\tthis.configurationSectionName = null; // to be written up by configuration\r\n\t\t}\r\n\r\n\t\tinternal void WriteConfigurationUp(string sectionName)\r\n\t\t{\r\n\t\t\t// TODO (TP): Consider whther this is correct behavior?\r\n\t\t\t//       This occures under stress test, because ASP.NET calls \r\n\t\t\t//       ConfigurationSectionHandler.Create even though we already loaded assemblies\r\n\t\t\t// Debug.Assert(this.configurationSectionName == null, \"Already written up\");\r\n\r\n\t\t\tDebug.Assert(sectionName != null);\r\n\r\n\t\t\tthis.configurationSectionName = sectionName;\r\n\t\t}\r\n\r\n\t\tinternal void Invalidate()\r\n\t\t{\r\n\t\t\tthis.configurationSectionName = null;\r\n\t\t\tthis.module = null;\r\n\t\t\tthis.uniqueIndex = -1;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Factory\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of descriptor given its type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type of the descriptor to create.</param>\r\n\t\t/// <returns>The new instance.</returns>\r\n\t\t/// <exception cref=\"LibraryLoadFailedException\"><paramref name=\"type\"/> is not valid descriptor type.</exception>\r\n\t\tinternal static PhpLibraryDescriptor CreateInstance(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tPhpLibraryDescriptor result;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult = (PhpLibraryDescriptor)Activator.CreateInstance(type);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tthrow new LibraryLoadFailedException(type.Assembly.FullName, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic void Dump(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.WriteLine(\"{0}: assembly = {1}\", UniqueIndex, RealAssembly.FullName);\r\n\t\t\toutput.WriteLine(\"   section = {0}, config = {1}\", configurationSectionName,\r\n\t\t\t\tConfiguration.Local.GetLibraryConfig(this));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\tinternal sealed partial class DefaultLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t}\r\n\r\n\tinternal sealed class LibraryLoadFailedException : ApplicationException\r\n\t{\r\n\t\tpublic LibraryLoadFailedException(string assemblyName, string message)\r\n\t\t\t: base(CoreResources.GetString(\"library_load_failed\", assemblyName, message))\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic LibraryLoadFailedException(string assemblyName, Exception/*!*/ inner)\r\n\t\t\t: base(CoreResources.GetString(\"library_load_failed\", assemblyName, inner.Message))\r\n\t\t{\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/LibraryVerifier.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t// TODO:\r\n\t///// <summary>\r\n\t///// Summary description for ClassLibraryVerifier.\r\n\t///// </summary>\r\n\t//public class PhpLibraryVerifier\r\n\t//{\r\n\t//  private PhpLibraryVerifier() {}\r\n\r\n\t//  /// <summary>\r\n\t//  /// Checks whether a type is acceptable for type of Class Library function argument.\r\n\t//  /// </summary>\r\n\t//  /// <param name=\"type\">The type to be checked.</param>\r\n\t//  /// <param name=\"params\">Whether <see cref=\"ParamArrayAttribute\"/> is applied to the argument.</param>\r\n\t//  /// <param name=\"deepCopy\">Whether the argument is marked by <see cref=\"PhpDeepCopyAttribute\"/>.</param>\r\n\t//  /// <returns>Whether <paramref name=\"type\"/> is allowed to be a type of an argument of a Class Library function.</returns>\r\n\t//  internal static bool VerifyArgumentType(Type type,bool @params,bool deepCopy)\r\n\t//  {\r\n\t//    // out/ref arguments:\r\n\t//    if (type.IsByRef)\r\n\t//    {\r\n\t//      // dereferences type:\r\n\t//      type = type.GetElementType();\r\n\t//    }\r\n\r\n\t//    // CLR arrays:\r\n\t//    if (type.IsArray)\r\n\t//    {\r\n\t//      // allowed only as vararg params:\r\n\t//      if (!@params) return false;\r\n\r\n\t//      // gets element type:\r\n\t//      type = type.GetElementType();\r\n\t//    }  \r\n\r\n\t//    // object is allowed:\r\n\t//    if (type==typeof(object)) return true;\r\n\r\n\t//    // boolean, integer, double, string, char are allowed, shouldn't be deep copied: \r\n\t//    if (PhpVariable.IsLiteralPrimitiveType(type) || type == typeof(char)) return !deepCopy;\r\n\r\n\t//    // any implementor of IPhpVariable is allowed:\r\n\t//    if (typeof(IPhpVariable).IsAssignableFrom(type)) return true;\r\n\r\n\t//    // can be PhpArray assigned to the argument?\r\n\t//    if (type.IsAssignableFrom(typeof(PhpArray))) return true;\r\n\r\n\t//    // PhpCallback:\r\n\t//    if (type==typeof(PhpCallback)) return !deepCopy;\r\n\r\n\t//    // others:\r\n\t//    return false;    \r\n\t//  }    \r\n\r\n\t//  /// <summary>\r\n\t//  /// Checks whether a type is acceptable for type of Class Library function return value.\r\n\t//  /// </summary>\r\n\t//  /// <param name=\"type\">The type to be checked.</param>\r\n\t//  /// <param name=\"deepCopy\">Whether the return value is marked by <see cref=\"PhpDeepCopyAttribute\"/>.</param>\r\n\t//  /// <returns>Whether <paramref name=\"type\"/> is allowed to be a type of a return value of a Class Library function.</returns>\r\n\t//  internal static bool VerifyReturnType(Type type,bool deepCopy)\r\n\t//  {\r\n\t//    bool cast = type.IsDefined(typeof(CastToFalseAttribute),false);\r\n\r\n\t//    // cast to false on value type which is not integer:\r\n\t//    if (cast && type.IsValueType && type!=typeof(int)) return false;\r\n\r\n\t//    // void, booleans, integers, doubles, strings are allowed:\r\n\t//    if (type == Types.Void || PhpVariable.IsLiteralPrimitiveType(type)) return !deepCopy;\r\n\r\n\t//    // object is ok:\r\n\t//    if (type == typeof(object)) return true;\r\n\r\n\t//    // any implementor of IPhpVariable is allowed (including PhpReference):\r\n\t//    if (typeof(IPhpVariable).IsAssignableFrom(type)) return true;\r\n\r\n\t//    // PhpCallback and others are not allowed:\r\n\t//    return false;\r\n\t//  }\r\n\r\n\t//  /// <summary>\r\n\t//  /// Checks whether all library functions has well-declared overloads.\r\n\t//  /// </summary>\r\n\t//  /// <param name=\"errors\">The array where to report errors.</param>\r\n\t//  /// <param name=\"functions\">The table of declared functions.</param>\r\n\t//  internal static void VerifyOverloadsLists(ArrayList errors, PhpFunctionsTable functions)\r\n\t//  {\r\n\t//    IDictionaryEnumerator iterator = functions.GetEnumerator();\r\n\t//    while (iterator.MoveNext())\r\n\t//    {\r\n\t//      OverloadInfo[] overloads = (OverloadInfo[])iterator.Value;\r\n\r\n\t//      Debug.Assert(overloads.Length>0);\r\n\r\n\t//      FunctionImplOptions options = overloads[0].Options;\r\n\t//      for(int i=0;i<overloads.Length;i++)\r\n\t//      {\r\n\t//        MethodInfo method = overloads[i].GetUserEntryPoint;\r\n\r\n\t//        // options should be same in all overloads:\r\n\t//        if (overloads[i].Options!=options)\r\n\t//        {\r\n\t//          errors.Add(CoreResources.GetString(\"overload_has_different_impl_options\",method.DeclaringType.FullName,method.Name,iterator.Key)); \r\n\t//        }\r\n\r\n\t//        // vararg should be set only on the last overload:\r\n\t//        if (i<overloads.Length-1 && (overloads[i].Flags & OverloadFlags.IsVararg)!=0)\r\n\t//        {\r\n\t//          errors.Add(CoreResources.GetString(\"overload_has_lesser_param_count\",method.DeclaringType.FullName,method.Name,iterator.Key)); \r\n\t//        }\r\n\t//      }\r\n\t//    }\r\n\t//  }\r\n\r\n\t//  /// <summary>\r\n\t//  /// Verifies an assembly against demands on Phalanger class library.\r\n\t//  /// </summary>\r\n\t//  /// <param name=\"assembly\">The assembly to be verified.</param>\r\n\t//  /// <param name=\"errors\">An <see cref=\"ArrayList\"/> of error messages</param>\r\n\t//  /// <param name=\"warnings\">An <see cref=\"ArrayList\"/> of warning messages</param>\r\n\t//  public static void VerifyLibrary(Assembly assembly,out ArrayList errors,out ArrayList warnings)\r\n\t//  {\r\n\t//    errors = new ArrayList();\r\n\t//    warnings = new ArrayList();\r\n\t//    object[] attrs;\r\n\t//    bool vararg,deep_copy;\r\n\t//    Name? name;\r\n\t//    bool contains_implementation;    \r\n\t//    PhpConstantsTable implemented_constants = new PhpConstantsTable();\r\n\t//    PhpFunctionsTableBuilder ft_builder = new PhpFunctionsTableBuilder(PhpFunctionUtils.AssumedMaxOverloadCount);\r\n\r\n\t//    foreach (Type type in assembly.GetTypes())\r\n\t//    {\r\n\t//      // whethe the type contains implementation of function or method:\r\n\t//      contains_implementation = false;\r\n\r\n\t//      // checks methods:\r\n\t//      foreach (MethodInfo method in type.GetMethods())\r\n\t//      {\r\n\t//        attrs = method.GetCustomAttributes(Emit.Types.ImplementsFunctionAttribute,false);\r\n\t//        if (attrs.Length>0)\r\n\t//        {\r\n\t//          ImplementsFunctionAttribute ifa = (ImplementsFunctionAttribute)attrs[0];\r\n\r\n\t//          // skips not supported functions:\r\n\t//          if ((ifa.Options & FunctionImplOptions.NotSupported)!=0) continue;\r\n\r\n\t//          contains_implementation = true;\r\n\r\n\t//          name = new Name(ifa.Name);\r\n\r\n\t//          // checks the name:\r\n\t//          if (!PhpFunctionUtils.IsValidName(name.ToString()))\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_function_name\", type.FullName, method.Name, ifa.Name)); \r\n\r\n\t//            name = null;  \r\n\t//          }\r\n\r\n\t//          // checks \"public static\":\r\n\t//          if (!method.IsStatic || !method.IsPublic)\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_method_modifiers\",type.FullName,method.Name));\r\n\t//          }\r\n\r\n\t//          ParameterInfo[] ps = method.GetParameters();\r\n\r\n\t//          // checks NeedsVariable option:\r\n\t//          if ((ifa.Options & FunctionImplOptions.NeedsVariables)!=0)\r\n\t//          {\r\n\t//            if (ps.Length==0 || ps[0].ParameterType!=typeof(IDictionary))\r\n\t//              errors.Add(CoreResources.GetString(\"first_param_not_dictionary\",type.FullName,method.Name));\r\n\t//          }\r\n\r\n\t//          // parameters:\r\n\t//          foreach (ParameterInfo param in ps)\r\n\t//          {\r\n\t//            vararg = param.IsDefined(typeof(ParamArrayAttribute),false);\r\n\t//            deep_copy = param.IsDefined(typeof(PhpDeepCopyAttribute),false);\r\n\r\n\t//            if (!VerifyArgumentType(param.ParameterType,vararg,deep_copy))\r\n\t//            {\r\n\t//              errors.Add(CoreResources.GetString(\"invalid_parameter_type\",type.FullName,method.Name,param.Name,param.ParameterType.FullName));\r\n\t//            }    \r\n\t//          }\r\n\r\n\t//          // return value:\r\n\t//          deep_copy = method.ReturnType.IsDefined(typeof(PhpDeepCopyAttribute),false);\r\n\r\n\t//          if (!VerifyReturnType(method.ReturnType,deep_copy))\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_return_type\",type.FullName,method.Name,method.ReturnType.FullName));\r\n\t//          }\r\n\r\n\t//          // checks overloads:\r\n\t//          if (name.HasValue)\r\n\t//          {\r\n\t//            MethodInfo prev_method = ft_builder.AddInternal(name.Value, method, ps, ifa.Options);\r\n\t//            if (prev_method!=null)\r\n\t//            {\r\n\t//              errors.Add(CoreResources.GetString(\"function_reimplemented\",\r\n\t//                type.FullName,method.Name,\r\n\t//                ifa.Name,\r\n\t//                prev_method.DeclaringType.FullName,prev_method.Name)); \r\n\t//            }\r\n\t//            if (ft_builder.Modified)\r\n\t//            {\r\n\t//              warnings.Add(CoreResources.GetString(\"overloads_not_contiguous\",\r\n\t//                type.FullName,method.Name,\r\n\t//                ifa.Name));\r\n\t//            }\r\n\t//          }  \r\n\t//        }  \r\n\t//      }\r\n\r\n\t//      // checks constant fields:\r\n\t//      foreach (FieldInfo field in type.GetFields())\r\n\t//      {\r\n\t//        attrs = field.GetCustomAttributes(typeof(ImplementsConstantAttribute),false);\r\n\t//        if (attrs.Length>0)\r\n\t//        {\r\n\t//          contains_implementation = true;\r\n\r\n\t//          ImplementsConstantAttribute ica = (ImplementsConstantAttribute)attrs[0];\r\n\r\n\t//          // checks the name:\r\n\t//          if (!ClassConstant.IsValidName(ica.Name))\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_constant_name\",\r\n\t//              type.FullName,field.Name,ica.Name)); \r\n\t//          }\r\n\r\n\t//          // checks field attributes:\r\n\t//          if (!field.IsLiteral || !field.IsPublic)\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_constant_field\",\r\n\t//              type.FullName,field.Name)); \r\n\t//          }\r\n\r\n\t//          // checks field type:\r\n\t//          if (!PhpVariable.IsLiteralPrimitiveType(field.FieldType))\r\n\t//          {\r\n\t//            errors.Add(CoreResources.GetString(\"invalid_constant_type\",\r\n\t//              type.FullName,field.Name,field.FieldType.FullName));\r\n\t//          } \r\n\r\n\t//          // checks existence:\r\n\t//          if (!implemented_constants.Add(ica.Name,field,ica.CaseInsensitive))\r\n\t//          {\r\n\t//            bool exists;\r\n\t//            FieldInfo prev_field = (FieldInfo)implemented_constants.Get(ica.Name,out exists);\r\n\t//            Debug.Assert(exists);\r\n\r\n\t//            errors.Add(CoreResources.GetString(\"constant_reimplemented\",\r\n\t//              type.FullName,field.Name,\r\n\t//              ica.Name,\r\n\t//              prev_field.DeclaringType.FullName,prev_field.Name)); \r\n\t//          }\r\n\t//        }  \r\n\t//      }\r\n\r\n\t//      // ckecks type itself:\r\n\t//      if (contains_implementation)\r\n\t//      {\r\n\t//        if (!type.IsPublic && !(type.IsNestedPublic && type.IsEnum))\r\n\t//          errors.Add(CoreResources.GetString(\"invalid_type_visibility\",type.FullName));\r\n\r\n\t//        if (!type.Namespace.StartsWith(Namespaces.Library))\r\n\t//          errors.Add(CoreResources.GetString(\"invalid_type_namespace\",type.FullName,Namespaces.Library));\r\n\t//      }\r\n\t//    }\r\n\r\n\t//    PhpFunctionsTable implemented_functions = ft_builder.ToFunctionsTable();\r\n\t//    VerifyOverloadsLists(errors,implemented_functions);\r\n\t//  }\r\n\r\n\t//}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Localizations/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:2.0.50727.1433\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Core.Localizations {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Core.Localizations.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (related location).\r\n        /// </summary>\r\n        internal static string _related_location_ {\r\n            get {\r\n                return ResourceManager.GetString(\"(related_location)\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method {0}::{1}() cannot contain body.\r\n        /// </summary>\r\n        internal static string abstract_bodyful_method {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_bodyful_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate abstract class &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string abstract_class_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_class_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Instantiation of abstract class or interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string abstract_class_or_interface_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_class_or_interface_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method cannot be declared final.\r\n        /// </summary>\r\n        internal static string abstract_final_method_declared {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_final_method_declared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot call abstract method {0}::{1}().\r\n        /// </summary>\r\n        internal static string abstract_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Names of the abstract method {0}::{1}() and its implementation {2}::{3}() must be the same (case sensitively) in the current version of Phalanger.\r\n        /// </summary>\r\n        internal static string abstract_method_name_not_matching_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_name_not_matching_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; doesn&apos;t implement abstract method {1}::{2}().\r\n        /// </summary>\r\n        internal static string abstract_method_not_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_not_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method cannot be declared private.\r\n        /// </summary>\r\n        internal static string abstract_private_method_declared {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_private_method_declared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; doesn&apos;t implement abstract property {1}::${2}.\r\n        /// </summary>\r\n        internal static string abstract_property_not_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_property_not_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;&amp;&apos; modifier ignored in the function call, use &apos;&amp;&apos; modifier in function declaration to pass the argument by reference.\r\n        /// </summary>\r\n        internal static string act_param_with_ampersand {\r\n            get {\r\n                return ResourceManager.GetString(\"act_param_with_ampersand\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous constant name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string ambiguous_constant_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_constant_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous file access mode (binary mode assumed). Specify either &apos;{0}b&apos; or &apos;{0}t&apos; or set Phalanger configuration option DefaultFileOpenMode in file-system section of .config file..\r\n        /// </summary>\r\n        internal static string ambiguous_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous function name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string ambiguous_function_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_function_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string ambiguous_name_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_name_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous type name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string ambiguous_type_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_type_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Application configuration file copied..\r\n        /// </summary>\r\n        internal static string application_config_file_copied {\r\n            get {\r\n                return ResourceManager.GetString(\"application_config_file_copied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argless stub for populated method &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        internal static string argless_stub_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"argless_stub_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument {0} cannot be equal to {1}..\r\n        /// </summary>\r\n        internal static string argument_equals {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_equals\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment variable name cannot contain equal character..\r\n        /// </summary>\r\n        internal static string Argument_IllegalEnvVarName {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_IllegalEnvVarName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment variable name or value is too long..\r\n        /// </summary>\r\n        internal static string Argument_LongEnvVarValue {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_LongEnvVarValue\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be passed by reference.\r\n        /// </summary>\r\n        internal static string argument_not_passed_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be passed to {1}() by reference.\r\n        /// </summary>\r\n        internal static string argument_not_passed_byref_to {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_byref_to\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} not passed to the function/method.\r\n        /// </summary>\r\n        internal static string argument_not_passed_to_function {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_to_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; should not be NULL.\r\n        /// </summary>\r\n        internal static string argument_null {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The first char in the string is the null character..\r\n        /// </summary>\r\n        internal static string Argument_StringFirstCharIsZero {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_StringFirstCharIsZero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String cannot be of zero length..\r\n        /// </summary>\r\n        internal static string Argument_StringZeroLength {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_StringZeroLength\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Specified value of argument &apos;{0}&apos; is not supported.\r\n        /// </summary>\r\n        internal static string argument_value_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_value_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arguments.\r\n        /// </summary>\r\n        internal static string Arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"Arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arrays are not allowed in class constants.\r\n        /// </summary>\r\n        internal static string array_in_cls_const {\r\n            get {\r\n                return ResourceManager.GetString(\"array_in_cls_const\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array to string conversion.\r\n        /// </summary>\r\n        internal static string array_to_string_conversion {\r\n            get {\r\n                return ResourceManager.GetString(\"array_to_string_conversion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An array used as an object.\r\n        /// </summary>\r\n        internal static string array_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"array_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script &apos;{0}&apos; inclusion failed. Script type &apos;{1}&apos; not found in the application&apos;s assembly.\r\n        /// </summary>\r\n        internal static string assembly_script_inclusion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"assembly_script_inclusion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assertion &apos;{0}&apos; failed.\r\n        /// </summary>\r\n        internal static string assertion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"assertion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library function &apos;{0}&apos; called with wrong number of parameters.\r\n        /// </summary>\r\n        internal static string bad_system_fcn_params_count {\r\n            get {\r\n                return ResourceManager.GetString(\"bad_system_fcn_params_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compiling {0} ....\r\n        /// </summary>\r\n        internal static string begin_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"begin_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Buffering level couldn&apos;t be decresed below zero.\r\n        /// </summary>\r\n        internal static string buffering_level_decreased_under_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"buffering_level_decreased_under_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Buffers must not be empty..\r\n        /// </summary>\r\n        internal static string buffers_must_not_be_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"buffers_must_not_be_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not change the section of loaded library. The library &apos;{0}&apos; has already been bound to configuration section &apos;{1}&apos;..\r\n        /// </summary>\r\n        internal static string cannot_change_library_section {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_change_library_section\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Changing the target instance is unsupported if the callback is already bound..\r\n        /// </summary>\r\n        internal static string cannot_change_target_instance {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_change_target_instance\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot create configuration file &apos;{0}&apos;. Error: {1}.\r\n        /// </summary>\r\n        internal static string cannot_create_config_file {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_create_config_file\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot derive from &apos;{0}&apos; because it is a generic type parameter.\r\n        /// </summary>\r\n        internal static string cannot_derive_from_type_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_derive_from_type_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option cannot be modified here since it has been prevented to so by &apos;allowOverride&apos; attribute in configuration file &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string cannot_modify_option {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_modify_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot re-assign $this.\r\n        /// </summary>\r\n        internal static string cannot_reassign_this {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_reassign_this\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot unset string offsets.\r\n        /// </summary>\r\n        internal static string cannot_unset_string_offsets {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_unset_string_offsets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name &apos;{0}&apos; is reserved and cannot be used here.\r\n        /// </summary>\r\n        internal static string cannot_use_reserved_name {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_use_reserved_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t clone system classes table..\r\n        /// </summary>\r\n        internal static string cant_clone_sys_table {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_clone_sys_table\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t create types for system classes..\r\n        /// </summary>\r\n        internal static string cant_create_sys_class_types {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_create_sys_class_types\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t generate builders for system classes..\r\n        /// </summary>\r\n        internal static string cant_generate_sys_class_builders {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_generate_sys_class_builders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This stream does not support casting as System.IO.Stream..\r\n        /// </summary>\r\n        internal static string casting_to_stream_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"casting_to_stream_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Index is not within catch clausules.\r\n        /// </summary>\r\n        internal static string cdp_index_not_within_catch_calusules {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_index_not_within_catch_calusules\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There is not enough items in list.\r\n        /// </summary>\r\n        internal static string cdp_not_enough_items_in_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_not_enough_items_in_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Start must be greater than or equal to zero.\r\n        /// </summary>\r\n        internal static string cdp_start_greater_than_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_greater_than_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to start canot be less than zero.\r\n        /// </summary>\r\n        internal static string cdp_start_less_than_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_less_than_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Start must be less than number of conditions.\r\n        /// </summary>\r\n        internal static string cdp_start_must_be_less_tahn_number_of_conditions {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_must_be_less_tahn_number_of_conditions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Statement not found.\r\n        /// </summary>\r\n        internal static string cdp_statement_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_statement_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Two static variables with same name.\r\n        /// </summary>\r\n        internal static string cdp_unsup_2_stat_vars_with_same_name {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_2_stat_vars_with_same_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add anything into delegate.\r\n        /// </summary>\r\n        internal static string cdp_unsup_anything_delegate {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_anything_delegate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array items passed by reference are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_array_item_reference {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_array_item_reference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PHP associative array initialization cannot be done in place where additional statements cannot be inserted..\r\n        /// </summary>\r\n        internal static string cdp_unsup_assoc_arr_init_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_assoc_arr_init_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CodeTargetRequest supports only break and continue.\r\n        /// </summary>\r\n        internal static string cdp_unsup_break_continue_only {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_break_continue_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The break statement with non-constant argument is not supported fro PHP-toCodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_break_non_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_break_non_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CodeVariableReferenceExpression was expected as result of TranslateVariableUse for DirectVarUse. Note: Static variables are not supported as DirectVarUse (e.g. Catch statement exception variable)..\r\n        /// </summary>\r\n        internal static string cdp_unsup_CodeVariableReferenceExpression_excpected {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_CodeVariableReferenceExpression_excpected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;else&apos; clausule must be last clausule of if statement..\r\n        /// </summary>\r\n        internal static string cdp_unsup_else_last {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_else_last\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot translate &apos;else&apos; clausule separatelly..\r\n        /// </summary>\r\n        internal static string cdp_unsup_else_separatelly {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_else_separatelly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Empty expressions are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_empty_ex {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_empty_ex\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot translate empty expression list.\r\n        /// </summary>\r\n        internal static string cdp_unsup_empty_ex_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_empty_ex_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Eval is not supported.\r\n        /// </summary>\r\n        internal static string cdp_unsup_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add field into interface.\r\n        /// </summary>\r\n        internal static string cdp_unsup_filed_delegate {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_filed_delegate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global constants are not supported for generating CodeDOM.\r\n        /// </summary>\r\n        internal static string cdp_unsup_global_constants {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_constants\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Functions declared at global- or method-level are not supported for generating CodeDOM.\r\n        /// </summary>\r\n        internal static string cdp_unsup_global_method_func {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_method_func\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global PHP statement is not supported for generating CodeDOM.\r\n        /// </summary>\r\n        internal static string cdp_unsup_global_statement {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_statement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only constant static fields can be added into enumerations.\r\n        /// </summary>\r\n        internal static string cdp_unsup_in_enum {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_in_enum\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only fields can be added into enumerations.\r\n        /// </summary>\r\n        internal static string cdp_unsup_in_enum_other {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_in_enum_other\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Includes and requires are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_include_require {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_include_require\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Indirect type references are not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_indirect_type_ref {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_indirect_type_ref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid expression for event translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_invalid_event {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_invalid_event\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to isset with no variable is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_isset_no_var {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_isset_no_var\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of levels to break must be 1 or more.\r\n        /// </summary>\r\n        internal static string cdp_unsup_levels_0 {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_levels_0\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to LINQ is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_LINQ {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_LINQ\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to List expressions cannot be created in places outside methods.\r\n        /// </summary>\r\n        internal static string cdp_unsup_list_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_list_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add local variable at this level (eg. namespace or class).\r\n        /// </summary>\r\n        internal static string cdp_unsup_loc_var_class_namespace {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_loc_var_class_namespace\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Local variable declarations are not supported at this level (e.g. namespace or class)..\r\n        /// </summary>\r\n        internal static string cdp_unsup_loc_var_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_loc_var_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Containing block returned no label to jump to for break statement.\r\n        /// </summary>\r\n        internal static string cdp_unsup_no_jump_label {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_no_jump_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function calls that are not members of object cannot be translated..\r\n        /// </summary>\r\n        internal static string cdp_unsup_nonobj_func {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_nonobj_func\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not allowed at block-statement level.\r\n        /// </summary>\r\n        internal static string cdp_unsup_not_allowed_at_block_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_block_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at file level.\r\n        /// </summary>\r\n        internal static string cdp_unsup_not_allowed_at_file_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_file_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not allowed at method level.\r\n        /// </summary>\r\n        internal static string cdp_unsup_not_allowed_at_method_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_method_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at namespace level.\r\n        /// </summary>\r\n        internal static string cdp_unsup_not_allowed_at_namespace_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_namespace_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There is not enough expressions in list.\r\n        /// </summary>\r\n        internal static string cdp_unsup_not_enough_expressions_in_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_enough_expressions_in_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to use.IsMemberOf must not be null..\r\n        /// </summary>\r\n        internal static string cdp_unsup_null {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only loops can provide jump labels.\r\n        /// </summary>\r\n        internal static string cdp_unsup_only_loop_jump {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_only_loop_jump\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported type of pseudo-constant {0} ({1}) reached. This type is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_pseudoconstant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_pseudoconstant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reference assignments are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_ref_assign {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_ref_assign\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Static variables can be used only inside methods that are members of clases.\r\n        /// </summary>\r\n        internal static string cdp_unsup_static_var {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_static_var\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add static variables when not in method.\r\n        /// </summary>\r\n        internal static string cdp_unsup_static_var_otside_method {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_static_var_otside_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array item of unknown type {0} reached. This kind of array item is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_array_item_type {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_array_item_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown event operation reached. Only Add and Remove operations are supported..\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_event_op {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_event_op\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of type reference {0} reached. This type reference is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_ref_kind {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_ref_kind\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown PHP statement {0} is not supported for generating CodeDOM.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_statement {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_statement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown switch statement item {0}. This kind of switch items is not supported fro PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_switch {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_switch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of variable use {0} reached. This kind of variable use is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_var_kind {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_var_kind\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of variabele-like construct use {0} reached. This kind of use is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unknown_varlike_construct_use {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_varlike_construct_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported assign operator {0} ({1}) reached. Not an assign operator?.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsup_assign {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_assign\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported binary operator {0} ({1}) reached. Not a binary operator?.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsup_binop {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_binop\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported delegate creation reached. Delegate must be created using NewEx with only one parameter type ArrayEx that consits of 2 ValueItem-s without index where ValueExpr of 2nd item is StringLiteral..\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsup_delegate_creartion {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_delegate_creartion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported type of expression {0} reached. This type of expression is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsup_ex {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_ex\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported unary operator {0:F} ({0:D} reached. This operator is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsup_unop {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_unop\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at type level.\r\n        /// </summary>\r\n        internal static string cdp_unsup_unsupported_at_type_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsupported_at_type_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t use function/method return value in write context.\r\n        /// </summary>\r\n        internal static string check_varuse_fault {\r\n            get {\r\n                return ResourceManager.GetString(\"check_varuse_fault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular class inheritance dependency involving &apos;{0}&apos; and &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string circular_base_class_dependency {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_base_class_dependency\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular interface inheritance dependency involving &apos;{0}&apos; and &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string circular_base_interface_dependency {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_base_interface_dependency\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular constant definition involving class constant &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        internal static string circular_constant_definition_class {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_constant_definition_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular constant definition involving global constant &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string circular_constant_definition_global {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_constant_definition_global\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of the class &apos;{0}&apos; in PHP code is not recommended as the resulting effect will probably be different than expected.\r\n        /// </summary>\r\n        internal static string class_behavior_may_be_unexpected {\r\n            get {\r\n                return ResourceManager.GetString(\"class_behavior_may_be_unexpected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The class &apos;{0}&apos; has no parent.\r\n        /// </summary>\r\n        internal static string class_has_no_parent {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_parent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class {0} has no unserializer.\r\n        /// </summary>\r\n        internal static string class_has_no_unserializer {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_unserializer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; has no visible constructor.\r\n        /// </summary>\r\n        internal static string class_has_no_visible_ctor {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_visible_ctor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to instantiate class &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string class_instantiation_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"class_instantiation_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; not found.\r\n        /// </summary>\r\n        internal static string class_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"class_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A class or an interface &apos;{0}&apos; is redeclared in the assembly scope.\r\n        /// </summary>\r\n        internal static string class_redeclared_in_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_in_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare class/interface {0}.\r\n        /// </summary>\r\n        internal static string class_redeclared_runtime {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_runtime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion redeclares class/interface {0}.\r\n        /// </summary>\r\n        internal static string class_redeclared_runtime_include {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_runtime_include\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to __clone method called on non-object.\r\n        /// </summary>\r\n        internal static string clone_called_on_non_object {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_called_on_non_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Clone method {0}::__clone() cannot be static.\r\n        /// </summary>\r\n        internal static string clone_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Clone method {0}::__clone() cannot accept any arguments.\r\n        /// </summary>\r\n        internal static string clone_cannot_take_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_cannot_take_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error occured during assembly generation: {0}.\r\n        /// </summary>\r\n        internal static string code_generation_error {\r\n            get {\r\n                return ResourceManager.GetString(\"code_generation_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Declaration of {0} {1} will issue a run-time error if executed since the {0} will already be declared here.\r\n        /// </summary>\r\n        internal static string conditionally_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"conditionally_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion will issue a run-time error if executed - a redeclaration of {0} {1}.\r\n        /// </summary>\r\n        internal static string conditionally_redeclared_by_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"conditionally_redeclared_by_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration error: {0}.\r\n        /// </summary>\r\n        internal static string configuration_error {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        internal static string configuration_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration has not been loaded yet..\r\n        /// </summary>\r\n        internal static string configuration_not_loaded {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_not_loaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration record is read only..\r\n        /// </summary>\r\n        internal static string configuration_record_read_only {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_record_read_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        internal static string conflicting_constant_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_constant_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        internal static string conflicting_function_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_function_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same visibility.\r\n        /// </summary>\r\n        internal static string conflicting_partial_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_partial_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        internal static string conflicting_type_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_type_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The option is valid only in console application configuration..\r\n        /// </summary>\r\n        internal static string console_only_option {\r\n            get {\r\n                return ResourceManager.GetString(\"console_only_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare constant {0}::{1}.\r\n        /// </summary>\r\n        internal static string constant_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempt to redefine constant &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string constant_redefined {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_redefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Constant &apos;{2}&apos; is reimplemented. Previously implemented by {3}.{4}..\r\n        /// </summary>\r\n        internal static string constant_reimplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_reimplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot define value which is neither scalar nor NULL as a constant.\r\n        /// </summary>\r\n        internal static string constant_value_neither_scalar_nor_null {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_value_neither_scalar_nor_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        internal static string construct_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"construct_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;{0}&apos; construct is not supported.\r\n        /// </summary>\r\n        internal static string construct_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"construct_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        internal static string constructor_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"constructor_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate class &apos;{0}&apos; because it has no visible constructor.\r\n        /// </summary>\r\n        internal static string constructor_less_type_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"constructor_less_type_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Stream-Context resource.\r\n        /// </summary>\r\n        internal static string context_expected {\r\n            get {\r\n                return ResourceManager.GetString(\"context_expected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not create event..\r\n        /// </summary>\r\n        internal static string could_not_create_event {\r\n            get {\r\n                return ResourceManager.GetString(\"could_not_create_event\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not load extension: .\r\n        /// </summary>\r\n        internal static string could_not_load_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"could_not_load_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ASP.NET Integration, CodeDom.\r\n        /// </summary>\r\n        internal static string credits_aspnet {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_aspnet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract Syntax Tree.\r\n        /// </summary>\r\n        internal static string credits_ast {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_ast\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Authors.\r\n        /// </summary>\r\n        internal static string credits_authors {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_authors\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Automatic Tester.\r\n        /// </summary>\r\n        internal static string credits_automatic_tester {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_automatic_tester\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Automatic Tests.\r\n        /// </summary>\r\n        internal static string credits_automatic_tests {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_automatic_tests\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CLR Features Integration.\r\n        /// </summary>\r\n        internal static string credits_clr_features {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_clr_features\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Analysis.\r\n        /// </summary>\r\n        internal static string credits_code_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Generation.\r\n        /// </summary>\r\n        internal static string credits_code_generation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_generation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Generator.\r\n        /// </summary>\r\n        internal static string credits_code_generator {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_generator\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compiler&apos;s Tables.\r\n        /// </summary>\r\n        internal static string credits_compiler_tables {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_compiler_tables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration.\r\n        /// </summary>\r\n        internal static string credits_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Contribution.\r\n        /// </summary>\r\n        internal static string credits_contribution {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_contribution\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Core Functionality.\r\n        /// </summary>\r\n        internal static string credits_core_functionality {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_core_functionality\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Design.\r\n        /// </summary>\r\n        internal static string credits_design {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_design\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extensions Management.\r\n        /// </summary>\r\n        internal static string credits_extensions_management {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_extensions_management\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extensions Manager and Wrappers.\r\n        /// </summary>\r\n        internal static string credits_extmgr_wrappers {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_extmgr_wrappers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Implementation.\r\n        /// </summary>\r\n        internal static string credits_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Installation.\r\n        /// </summary>\r\n        internal static string credits_installation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_installation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interactive Tests.\r\n        /// </summary>\r\n        internal static string credits_interactive_tests {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_interactive_tests\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Lexical and Syntactic Analysis.\r\n        /// </summary>\r\n        internal static string credits_lexical_syntactic_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_lexical_syntactic_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object Oriented PHP Language Features Compilation.\r\n        /// </summary>\r\n        internal static string credits_oo_features_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_oo_features_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Overall Compiler Design.\r\n        /// </summary>\r\n        internal static string credits_overall_compiler_design {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_overall_compiler_design\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Overall Concept.\r\n        /// </summary>\r\n        internal static string credits_overall_concept {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_overall_concept\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PHP/CLR Language Extensions.\r\n        /// </summary>\r\n        internal static string credits_php_clr {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_php_clr\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Semantic Analysis.\r\n        /// </summary>\r\n        internal static string credits_semantic_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_semantic_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Specific PHP Language Features Compilation.\r\n        /// </summary>\r\n        internal static string credits_specific_features_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_specific_features_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Streams, IO Wrappers, and Filters.\r\n        /// </summary>\r\n        internal static string credits_streams {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_streams\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Utilities.\r\n        /// </summary>\r\n        internal static string credits_utilities {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_utilities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to VS.NET Integration.\r\n        /// </summary>\r\n        internal static string credits_vsnet {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_vsnet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cyclic inclusion between files &apos;{0}&apos; and &apos;{1}&apos; detected, inclusion of file &apos;{0}&apos; deferred to runtime.\r\n        /// </summary>\r\n        internal static string cyclic_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"cyclic_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown exception.\r\n        /// </summary>\r\n        internal static string default_exception_message {\r\n            get {\r\n                return ResourceManager.GetString(\"default_exception_message\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Creating default object from empty value.\r\n        /// </summary>\r\n        internal static string default_object_created {\r\n            get {\r\n                return ResourceManager.GetString(\"default_object_created\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method is no longer supported. Use TypeBuilder.DefineMethod instead..\r\n        /// </summary>\r\n        internal static string define_method_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"define_method_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to it defines application wide configuration.\r\n        /// </summary>\r\n        internal static string defines_app_wide_config {\r\n            get {\r\n                return ResourceManager.GetString(\"defines_app_wide_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to it defines machine wide configuration.\r\n        /// </summary>\r\n        internal static string defines_machine_wide_config {\r\n            get {\r\n                return ResourceManager.GetString(\"defines_machine_wide_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object instance must be given for non-static method &apos;{1}::{2}&apos; when creating delegate &apos;{0}&apos;. Use array($instance, &quot;{2}&quot;).\r\n        /// </summary>\r\n        internal static string delegate_target_instance_missing {\r\n            get {\r\n                return ResourceManager.GetString(\"delegate_target_instance_missing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized constructor arguments were given to delegate &apos;{0}&apos;. Use &quot;function&quot;, array($instance, &quot;method&quot;), or array(&quot;class&quot;, &quot;method&quot;).\r\n        /// </summary>\r\n        internal static string delegate_unrecognized_ctor_args {\r\n            get {\r\n                return ResourceManager.GetString(\"delegate_unrecognized_ctor_args\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::__destruct() cannot be static.\r\n        /// </summary>\r\n        internal static string destruct_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"destruct_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::__destruct() cannot take arguments.\r\n        /// </summary>\r\n        internal static string destruct_cannot_take_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"destruct_cannot_take_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        internal static string destructor_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"destructor_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory &apos;{0}&apos; does not exist..\r\n        /// </summary>\r\n        internal static string directory_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"directory_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        internal static string directory_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"directory_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Division by zero.\r\n        /// </summary>\r\n        internal static string division_by_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"division_by_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No &apos;..&apos; components allowed in path.\r\n        /// </summary>\r\n        internal static string dotdot_not_allowed_in_path {\r\n            get {\r\n                return ResourceManager.GetString(\"dotdot_not_allowed_in_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate attribute &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string duplicate_attribute_usage {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_attribute_usage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate generic type parameter.\r\n        /// </summary>\r\n        internal static string duplicate_generic_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_generic_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate parameter name &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string duplicate_parameter_name {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_parameter_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Dynamic wrapper &apos;{0}&apos; could not be loaded..\r\n        /// </summary>\r\n        internal static string dynamic_wrapper_loading_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"dynamic_wrapper_loading_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied file access mode is empty.\r\n        /// </summary>\r\n        internal static string empty_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use [] for reading.\r\n        /// </summary>\r\n        internal static string empty_index_in_read_context {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_index_in_read_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path must not be empty..\r\n        /// </summary>\r\n        internal static string empty_path {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An empty variable used as an array.\r\n        /// </summary>\r\n        internal static string empty_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An empty variable used as an object.\r\n        /// </summary>\r\n        internal static string empty_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} compiled successfully.\r\n        /// </summary>\r\n        internal static string end_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"end_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entry point has already been defined.\r\n        /// </summary>\r\n        internal static string entry_point_redefined {\r\n            get {\r\n                return ResourceManager.GetString(\"entry_point_redefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entry point script not specified..\r\n        /// </summary>\r\n        internal static string entrypoint_not_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"entrypoint_not_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Specified enumerator doesn&apos;t reference this table..\r\n        /// </summary>\r\n        internal static string enumerator_not_referencing_this_table {\r\n            get {\r\n                return ResourceManager.GetString(\"enumerator_not_referencing_this_table\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected error creating file &apos;{0}&apos;: {1}.\r\n        /// </summary>\r\n        internal static string error_creating_file {\r\n            get {\r\n                return ResourceManager.GetString(\"error_creating_file\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;b&gt;{0}&lt;/b&gt;: {1} {2}.&lt;br/&gt;&lt;br/&gt;.\r\n        /// </summary>\r\n        internal static string error_message_html {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;b&gt;{0}&lt;/b&gt;: {1} {2} in &lt;b&gt;{3}&lt;/b&gt; at expression on line &lt;b&gt;{4}&lt;/b&gt;, column &lt;b&gt;{5}&lt;/b&gt;.&lt;br/&gt;&lt;br/&gt;.\r\n        /// </summary>\r\n        internal static string error_message_html_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} inside {1}.\r\n        /// </summary>\r\n        internal static string error_message_html_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to inside {0} (on line &lt;b&gt;{1}&lt;/b&gt;, column &lt;b&gt;{2}&lt;/b&gt;).\r\n        /// </summary>\r\n        internal static string error_message_html_eval_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_eval_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}:{1} {2}.\r\n        ///.\r\n        /// </summary>\r\n        internal static string error_message_plain {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}:{1} {2} in {3} at expression on line {4}, column {5}.\r\n        ///.\r\n        /// </summary>\r\n        internal static string error_message_plain_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} inside {1}.\r\n        /// </summary>\r\n        internal static string error_message_plain_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to inside {0} (on line {1}, column {2}).\r\n        /// </summary>\r\n        internal static string error_message_plain_eval_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_eval_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Event &apos;{0}::{1}&apos; has no Add accessor method.\r\n        /// </summary>\r\n        internal static string event_has_no_add_accessor {\r\n            get {\r\n                return ResourceManager.GetString(\"event_has_no_add_accessor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Event &apos;{0}::{1}&apos; has no Remove accessor method.\r\n        /// </summary>\r\n        internal static string event_has_no_remove_accessor {\r\n            get {\r\n                return ResourceManager.GetString(\"event_has_no_remove_accessor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot write to event {0}::${1}, use {0}::${1}-&gt;Add() and {0}::${1}-&gt;Remove() to add or remove an event handler.\r\n        /// </summary>\r\n        internal static string event_written {\r\n            get {\r\n                return ResourceManager.GetString(\"event_written\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exception cannot be thrown here: {0}.\r\n        /// </summary>\r\n        internal static string exception_cannot_be_thrown {\r\n            get {\r\n                return ResourceManager.GetString(\"exception_cannot_be_thrown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Maximum execution time of {0} seconds exceeded.\r\n        /// </summary>\r\n        internal static string execution_timed_out {\r\n            get {\r\n                return ResourceManager.GetString(\"execution_timed_out\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expecting parent constructor call.\r\n        /// </summary>\r\n        internal static string expecting_parent_ctor_invocation {\r\n            get {\r\n                return ResourceManager.GetString(\"expecting_parent_ctor_invocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;Export&apos; can be used only in pure unit.\r\n        /// </summary>\r\n        internal static string export_attribute_in_non_pure {\r\n            get {\r\n                return ResourceManager.GetString(\"export_attribute_in_non_pure\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extension &apos;{0}&apos; (file &apos;{1}&apos;) has alredy been loaded..\r\n        /// </summary>\r\n        internal static string extension_already_loaded {\r\n            get {\r\n                return ResourceManager.GetString(\"extension_already_loaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error while loading library (extension) classes: .\r\n        /// </summary>\r\n        internal static string extension_loading_error {\r\n            get {\r\n                return ResourceManager.GetString(\"extension_loading_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Native PHP extensions are not installed or properly configured.\r\n        /// </summary>\r\n        internal static string extensions_not_installed {\r\n            get {\r\n                return ResourceManager.GetString(\"extensions_not_installed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined external function &apos;{0}&apos;, extension &apos;{1}&apos; - native PHP extensions are not installed or properly configured.\r\n        /// </summary>\r\n        internal static string extensions_not_installed_in_invoke {\r\n            get {\r\n                return ResourceManager.GetString(\"extensions_not_installed_in_invoke\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to At least one extension is to be run in isolated mode but ExtManager path is not configured..\r\n        /// </summary>\r\n        internal static string extmanager_path_not_configured {\r\n            get {\r\n                return ResourceManager.GetString(\"extmanager_path_not_configured\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A field with the same name already exists in this object..\r\n        /// </summary>\r\n        internal static string field_already_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"field_already_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reflected field &apos;{0}&apos; has unknown implementor. PhpPublicFieldAttribute incorrect usage..\r\n        /// </summary>\r\n        internal static string field_implementor_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"field_implementor_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interfaces cannot have properties.\r\n        /// </summary>\r\n        internal static string field_in_interface {\r\n            get {\r\n                return ResourceManager.GetString(\"field_in_interface\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File &apos;{0}&apos; does not exist..\r\n        /// </summary>\r\n        internal static string file_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"file_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot inherit from final class &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string final_class_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"final_class_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: First parameter should be of type IDictionary due to NeedsVariables option..\r\n        /// </summary>\r\n        internal static string first_param_not_dictionary {\r\n            get {\r\n                return ResourceManager.GetString(\"first_param_not_dictionary\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} is intended for internal usage only..\r\n        /// </summary>\r\n        internal static string for_internal_usage_only {\r\n            get {\r\n                return ResourceManager.GetString(\"for_internal_usage_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The function already has parametr {0}.\r\n        /// </summary>\r\n        internal static string formal_param_redeclaration {\r\n            get {\r\n                return ResourceManager.GetString(\"formal_param_redeclaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function needs a table of defined variables.\r\n        /// </summary>\r\n        internal static string function_needs_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"function_needs_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function is not supported.\r\n        /// </summary>\r\n        internal static string function_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"function_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare function &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string function_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"function_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Function &apos;{2}&apos; is reimplemented. Previously implemented by {3}.{4}..\r\n        /// </summary>\r\n        internal static string function_reimplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"function_reimplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generating assembly ....\r\n        /// </summary>\r\n        internal static string generating_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"generating_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use generic arguments when calling a library function.\r\n        /// </summary>\r\n        internal static string generic_call_to_library_function {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_call_to_library_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type parameter &apos;{0}&apos; has the same name as the containing class/interface.\r\n        /// </summary>\r\n        internal static string generic_parameter_collides_with_declarer {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_collides_with_declarer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type parameter must be an identifier different from &apos;self&apos; and &apos;parent&apos; in this context.\r\n        /// </summary>\r\n        internal static string generic_parameter_is_reserved_identifier {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_is_reserved_identifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic parameter must refer to a type in this context.\r\n        /// </summary>\r\n        internal static string generic_parameter_must_be_type {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_must_be_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic parameters cannot be defined on constructor.\r\n        /// </summary>\r\n        internal static string generic_parameters_disallowed_on_ctor {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameters_disallowed_on_ctor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Objects returned by {0}::getIterator() must be traversable or implement interface Iterator.\r\n        /// </summary>\r\n        internal static string getiterator_must_return_traversable {\r\n            get {\r\n                return ResourceManager.GetString(\"getiterator_must_return_traversable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global code is not allowed in the pure unit..\r\n        /// </summary>\r\n        internal static string global_code_in_pure_unit {\r\n            get {\r\n                return ResourceManager.GetString(\"global_code_in_pure_unit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal type returned from {0}::key().\r\n        /// </summary>\r\n        internal static string illegal_key_return_type {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_key_return_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal offset type.\r\n        /// </summary>\r\n        internal static string illegal_offset_type {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_offset_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal string offset &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string illegal_string_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_string_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be of the same type as this instance..\r\n        /// </summary>\r\n        internal static string incarnation_type_mismatch {\r\n            get {\r\n                return ResourceManager.GetString(\"incarnation_type_mismatch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion of file &apos;{0}&apos; deferred to runtime because: {1}.\r\n        /// </summary>\r\n        internal static string inclusion_deferred_to_runtime {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_deferred_to_runtime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusions are not allowed in the pure unit..\r\n        /// </summary>\r\n        internal static string inclusion_in_pure_unit {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_in_pure_unit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No inclusion pattern does match expression &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string inclusion_replacement_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_replacement_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arrays which are incomparable have been compared..\r\n        /// </summary>\r\n        internal static string incomparable_arrays_compared {\r\n            get {\r\n                return ResourceManager.GetString(\"incomparable_arrays_compared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Incomparable objects have been compared.\r\n        /// </summary>\r\n        internal static string incomparable_objects_compared {\r\n            get {\r\n                return ResourceManager.GetString(\"incomparable_objects_compared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Partial declarations of &apos;{0}&apos; must be all classes or all interfaces.\r\n        /// </summary>\r\n        internal static string incompatible_partial_declarations {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_partial_declarations\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class/interface &apos;{0}&apos; is incompatible with the constraints imposed on the generic type argument #{1} (&apos;{2}&apos;) by method &apos;{3}&apos;.\r\n        /// </summary>\r\n        internal static string incompatible_type_parameter_constraints_method {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_type_parameter_constraints_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class/interface &apos;{0}&apos; is incompatible with the constraints imposed on the generic type argument #{1} (&apos;{2}&apos;) by type &apos;{3}&apos;.\r\n        /// </summary>\r\n        internal static string incompatible_type_parameter_constraints_type {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_type_parameter_constraints_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The class &apos;{0}&apos; is incomplete - its base class or interface is unknown.\r\n        /// </summary>\r\n        internal static string incomplete_class {\r\n            get {\r\n                return ResourceManager.GetString(\"incomplete_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path &apos;{0}&apos; is incomplete. The path is relative or drive specification is missing..\r\n        /// </summary>\r\n        internal static string incomplete_path {\r\n            get {\r\n                return ResourceManager.GetString(\"incomplete_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration.\r\n        /// </summary>\r\n        internal static string info_config {\r\n            get {\r\n                return ResourceManager.GetString(\"info_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Credits.\r\n        /// </summary>\r\n        internal static string info_credits {\r\n            get {\r\n                return ResourceManager.GetString(\"info_credits\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directive.\r\n        /// </summary>\r\n        internal static string info_directive {\r\n            get {\r\n                return ResourceManager.GetString(\"info_directive\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment.\r\n        /// </summary>\r\n        internal static string info_environment_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"info_environment_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global Variables.\r\n        /// </summary>\r\n        internal static string info_global_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"info_global_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to License.\r\n        /// </summary>\r\n        internal static string info_license {\r\n            get {\r\n                return ResourceManager.GetString(\"info_license\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to \r\n        ///    &lt;p align=&apos;justify&apos;&gt;\r\n        ///      This program can be used and distributed only under the terms of the Microsoft Shared Source Permissive License \r\n        ///      included in the distribution in the file License.txt and also published on\r\n        ///      &lt;a href=&quot;http://www.codeplex.com/Project/License.aspx?ProjectName=Phalanger&quot;&gt;http://www.codeplex.com/Project/License.aspx?ProjectName=Phalanger&lt;/a&gt;.\r\n        ///    &lt;/p&gt;\r\n        ///    &lt;p align=&apos;justify&apos;&gt;\r\n        ///      The software is licensed &quot;as-is&quot;. You bear the risk of using it. The Licensor\r\n        ///gives n [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string info_license_text {\r\n            get {\r\n                return ResourceManager.GetString(\"info_license_text\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Loaded Native Extensions.\r\n        /// </summary>\r\n        internal static string info_loaded_extensions {\r\n            get {\r\n                return ResourceManager.GetString(\"info_loaded_extensions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Master Value.\r\n        /// </summary>\r\n        internal static string info_master_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_master_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script Dependent.\r\n        /// </summary>\r\n        internal static string info_script_dependent {\r\n            get {\r\n                return ResourceManager.GetString(\"info_script_dependent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script&apos;s Value.\r\n        /// </summary>\r\n        internal static string info_script_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_script_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shared.\r\n        /// </summary>\r\n        internal static string info_shared {\r\n            get {\r\n                return ResourceManager.GetString(\"info_shared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value.\r\n        /// </summary>\r\n        internal static string info_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Variable.\r\n        /// </summary>\r\n        internal static string info_variable {\r\n            get {\r\n                return ResourceManager.GetString(\"info_variable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot inherit constant {0}::{1} previously declared in interface &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string inheriting_previously_inherited_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"inheriting_previously_inherited_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The instance has already been disposed.\r\n        /// </summary>\r\n        internal static string instance_disposed {\r\n            get {\r\n                return ResourceManager.GetString(\"instance_disposed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add item to array - integer key reached maximal possible value (2^31-1).\r\n        /// </summary>\r\n        internal static string integer_key_reached_max_value {\r\n            get {\r\n                return ResourceManager.GetString(\"integer_key_reached_max_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interface method {0}::{1}() cannot contain body.\r\n        /// </summary>\r\n        internal static string interface_bodyful_method {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_bodyful_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string interface_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Access type for interface method {0}::{1}() must be omitted or declared public.\r\n        /// </summary>\r\n        internal static string interface_method_non_public {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_method_non_public\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal error! \r\n        ///Please, report this bug via {0}.\r\n        ///Additional information: \r\n        ///{1}.\r\n        /// </summary>\r\n        internal static string internal_error {\r\n            get {\r\n                return ResourceManager.GetString(\"internal_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count.\r\n        /// </summary>\r\n        internal static string invalid_argument_count {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count in a call to the function &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument_count_for_function {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count_for_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count in a call to the method &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument_count_for_method {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count_for_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; must be of type &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{1}&apos; is invalid for argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_argument_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument: .\r\n        /// </summary>\r\n        internal static string invalid_argument_with_message {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_with_message\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid array rank..\r\n        /// </summary>\r\n        internal static string invalid_array_rank {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_array_rank\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An attribute argument must be a constant expression.\r\n        /// </summary>\r\n        internal static string invalid_attribute_expression {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_expression\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;{0}&apos; cannot be used in configuration file located on virtual path &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_attribute_location {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_location\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid attribute target selector (specify one of &apos;return&apos;, &apos;assembly&apos;, &apos;module&apos;).\r\n        /// </summary>\r\n        internal static string invalid_attribute_target_selector {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_target_selector\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid use of attribute &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_attribute_usage {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_usage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The value of attribute &apos;{0}&apos; is invalid..\r\n        /// </summary>\r\n        internal static string invalid_attribute_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid base..\r\n        /// </summary>\r\n        internal static string invalid_base {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_base\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot break/continue {0} level(s).\r\n        /// </summary>\r\n        internal static string invalid_break_level_count {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_break_level_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid call context data in slot {0}..\r\n        /// </summary>\r\n        internal static string invalid_call_context_data {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_call_context_data\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid callback.\r\n        /// </summary>\r\n        internal static string invalid_callback {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_callback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The library &apos;{0}&apos; is not a valid Phalanger Class Library..\r\n        /// </summary>\r\n        internal static string invalid_class_library {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_library\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The dynamic wrapper for the library, file &apos;{0}&apos;, is invalid. Delete the wrapper file so that it could be regenerated automatically during the next request..\r\n        /// </summary>\r\n        internal static string invalid_class_library_wrapper {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_library_wrapper\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class name must be a valid object or a string.\r\n        /// </summary>\r\n        internal static string invalid_class_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{0}&apos; doesn&apos;t encode a valid Unicode character.\r\n        /// </summary>\r\n        internal static string invalid_code_point {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_code_point\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{0}&apos; doesn&apos;t encode a valid Unicode character name.\r\n        /// </summary>\r\n        internal static string invalid_code_point_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_code_point_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid command line argument &apos;/{0}&apos;: {1}.\r\n        /// </summary>\r\n        internal static string invalid_command_line_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_command_line_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid command line argument(s): {0}.\r\n        /// </summary>\r\n        internal static string invalid_command_line_argument_noname {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_command_line_argument_noname\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Field implementing PHP constant should be public literal..\r\n        /// </summary>\r\n        internal static string invalid_constant_field {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid constant name &apos;{2}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_constant_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid constant type ({2})..\r\n        /// </summary>\r\n        internal static string invalid_constant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid format of dynamic wrapper &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_dynamic_wrapper_format {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_dynamic_wrapper_format\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Escape sequence &apos;{0}&apos; requires exactly {1} hexadecimal digits.\r\n        /// </summary>\r\n        internal static string invalid_escape_sequence_length {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_escape_sequence_length\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exceptions must be valid objects derived from the Exception base class.\r\n        /// </summary>\r\n        internal static string invalid_exception_object {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_exception_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid file extension &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_file_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_file_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied file access mode ({0}) is not valid.\r\n        /// </summary>\r\n        internal static string invalid_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to create filter ({0}).\r\n        /// </summary>\r\n        internal static string invalid_filter_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_filter_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument supplied for foreach statement.\r\n        /// </summary>\r\n        internal static string invalid_foreach_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_foreach_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function name must be a string.\r\n        /// </summary>\r\n        internal static string invalid_function_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_function_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Header &apos;{0}&apos; is invalid: {1}.\r\n        /// </summary>\r\n        internal static string invalid_header {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_header\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The icon has an invalid format..\r\n        /// </summary>\r\n        internal static string invalid_icon_format {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_icon_format\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid identifier; an identifier cannot be non-empty and cannot contain any of the characters &apos;&lt;&apos;, &apos;&gt;&apos; and &apos;#&apos;..\r\n        /// </summary>\r\n        internal static string invalid_identifier {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_identifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot convert {0} to {1} implicitly in a call to function {2}().\r\n        /// </summary>\r\n        internal static string invalid_implicit_cast {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_implicit_cast\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modifier cannot be applied on the interface.\r\n        /// </summary>\r\n        internal static string invalid_interface_modifier {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_interface_modifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid library contant type &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_library_contant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_library_contant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Line pragma has an invalid value.\r\n        /// </summary>\r\n        internal static string invalid_line_pragma {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_line_pragma\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid implementation of method &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_method_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Method implementing PHP function should be public and static..\r\n        /// </summary>\r\n        internal static string invalid_method_modifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_modifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method name must be a string.\r\n        /// </summary>\r\n        internal static string invalid_method_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid node..\r\n        /// </summary>\r\n        internal static string invalid_node {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_node\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Node cannot be used in configuration file located on virtual path &apos;{0}&apos; because {1}..\r\n        /// </summary>\r\n        internal static string invalid_node_location {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_node_location\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid option &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_option {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid parameter &apos;{2}&apos; type ({3})..\r\n        /// </summary>\r\n        internal static string invalid_parameter_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_parameter_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path is not valid..\r\n        /// </summary>\r\n        internal static string invalid_path {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid query source.\r\n        /// </summary>\r\n        internal static string invalid_query_source {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_query_source\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid global variables registering order..\r\n        /// </summary>\r\n        internal static string invalid_registering_order {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_registering_order\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid regular expression..\r\n        /// </summary>\r\n        internal static string invalid_regular_expression {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_regular_expression\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid resource visibility. Must be private or public.\r\n        /// </summary>\r\n        internal static string invalid_resource_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_resource_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid return type ({2})..\r\n        /// </summary>\r\n        internal static string invalid_return_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_return_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The assembly &apos;{0}&apos; is not a valid Phalanger compiled script assembly.\r\n        /// </summary>\r\n        internal static string invalid_script_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_script_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Socket Stream resource.\r\n        /// </summary>\r\n        internal static string invalid_socket_stream_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_socket_stream_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid source file or directory: {0}.\r\n        /// </summary>\r\n        internal static string invalid_source {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_source\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Stream resource.\r\n        /// </summary>\r\n        internal static string invalid_stream_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_stream_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}: Type implementing PHP function or constant should be in namespace {1} or its subnamespace..\r\n        /// </summary>\r\n        internal static string invalid_type_namespace {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_type_namespace\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}: Type implementing PHP function or constant should be public..\r\n        /// </summary>\r\n        internal static string invalid_type_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_type_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid value &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string invalid_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot remove item from empty array..\r\n        /// </summary>\r\n        internal static string item_removed_from_empty_array {\r\n            get {\r\n                return ResourceManager.GetString(\"item_removed_from_empty_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Key element cannot be a reference.\r\n        /// </summary>\r\n        internal static string key_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"key_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The label &apos;{0}&apos; is already declared.\r\n        /// </summary>\r\n        internal static string label_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"label_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The last must be greater than or equal to the first..\r\n        /// </summary>\r\n        internal static string last_is_less_than_first {\r\n            get {\r\n                return ResourceManager.GetString(\"last_is_less_than_first\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The number of items in {0} should be the same as in {1}.\r\n        /// </summary>\r\n        internal static string lengths_are_different {\r\n            get {\r\n                return ResourceManager.GetString(\"lengths_are_different\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library assembly &apos;{0}&apos; could not be loaded..\r\n        /// </summary>\r\n        internal static string library_assembly_loading_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_assembly_loading_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare library class/interface {0}.\r\n        /// </summary>\r\n        internal static string library_class_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_class_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion will issue a run-time error if executed as it redeclares library class/interface {0}.\r\n        /// </summary>\r\n        internal static string library_class_redeclared_by_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"library_class_redeclared_by_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The configuration handler of the library &apos;{0}&apos; has failed..\r\n        /// </summary>\r\n        internal static string library_config_handler_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_config_handler_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare library function &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string library_func_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_func_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library &apos;{0}&apos; cannot be loaded; {1}.\r\n        /// </summary>\r\n        internal static string library_load_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_load_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library configuration section &apos;{0}&apos; has already been bound to the library &apos;{1}&apos;..\r\n        /// </summary>\r\n        internal static string library_section_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_section_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Loaded libraries.\r\n        /// </summary>\r\n        internal static string loaded_libraries {\r\n            get {\r\n                return ResourceManager.GetString(\"loaded_libraries\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make non-static method {0}::{1}() static in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string make_nonstatic_method_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_nonstatic_method_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare non-static property {0}::${1} as static {2}::${1} (non-static declared in &apos;{3}&apos;).\r\n        /// </summary>\r\n        internal static string make_nonstatic_property_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_nonstatic_property_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make static method {0}::{1}() non-static in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string make_static_method_non_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_static_method_non-static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare static property {0}::${1} as non static {2}::${1} (static declared in &apos;{3}&apos;).\r\n        /// </summary>\r\n        internal static string make_static_property_nonstatic {\r\n            get {\r\n                return ResourceManager.GetString(\"make_static_property_nonstatic\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mandatory parametr &apos;{0}&apos; declared behind optional parameter.\r\n        /// </summary>\r\n        internal static string mandatory_behind_optional_param {\r\n            get {\r\n                return ResourceManager.GetString(\"mandatory_behind_optional_param\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method declared in interface cannot have body.\r\n        /// </summary>\r\n        internal static string method_body_in_interface {\r\n            get {\r\n                return ResourceManager.GetString(\"method_body_in_interface\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to a member function {0}() on a non-object.\r\n        /// </summary>\r\n        internal static string method_called_on_non_object {\r\n            get {\r\n                return ResourceManager.GetString(\"method_called_on_non_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method {0}::{1}() declaration must be compatible with that of abstract method {2}::{1}().\r\n        /// </summary>\r\n        internal static string method_not_compatible {\r\n            get {\r\n                return ResourceManager.GetString(\"method_not_compatible\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare method {0}::{1}.\r\n        /// </summary>\r\n        internal static string method_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"method_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing argument #{0}.\r\n        /// </summary>\r\n        internal static string missing_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing argument #{0} for {1}().\r\n        /// </summary>\r\n        internal static string missing_argument_for {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_argument_for\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing attribute &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string missing_attribute {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_attribute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option {0} has not been defined..\r\n        /// </summary>\r\n        internal static string missing_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing constructor - class &apos;{0}&apos; extends a CLR type without a default constructor and therefore must implement a constructor.\r\n        /// </summary>\r\n        internal static string missing_ctor_in_clr_subclass {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_ctor_in_clr_subclass\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing entry point; no static parameterless method or function &apos;{0}&apos; found.\r\n        /// </summary>\r\n        internal static string missing_entry_point {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_entry_point\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expecting kind of imported subject (specify one of &apos;namespace&apos;, &apos;class&apos;, &apos;interface&apos;, &apos;function&apos;, &apos;const&apos;).\r\n        /// </summary>\r\n        internal static string missing_imported_entity {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_imported_entity\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing &apos;partial&apos; modifier on declaration of class/interface &apos;{0}&apos; - another partial declaration of this type exists.\r\n        /// </summary>\r\n        internal static string missing_partial_modifier {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_partial_modifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing generic type argument #{0}.\r\n        /// </summary>\r\n        internal static string missing_type_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing generic type argument #{0} for {1}().\r\n        /// </summary>\r\n        internal static string missing_type_argument_for {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument_for\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of type &apos;{0}&apos; requires generic type parameter #{1} (&apos;{2}&apos;) to be specified (no default type applicable).\r\n        /// </summary>\r\n        internal static string missing_type_argument_in_type_use {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument_in_type_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;case&apos; label with value {0} has already been declared.\r\n        /// </summary>\r\n        internal static string more_switch_cases_with_same_value {\r\n            get {\r\n                return ResourceManager.GetString(\"more_switch_cases_with_same_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;switch&apos; already contains a &apos;default&apos; section.\r\n        /// </summary>\r\n        internal static string more_then_one_default_in_switch {\r\n            get {\r\n                return ResourceManager.GetString(\"more_then_one_default_in_switch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assertion contains multiple statements but only the first one is relevant.\r\n        /// </summary>\r\n        internal static string multiple_statements_in_assertion {\r\n            get {\r\n                return ResourceManager.GetString(\"multiple_statements_in_assertion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Multiple access type modifiers are not allowed.\r\n        /// </summary>\r\n        internal static string multiple_visibility_modifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"multiple_visibility_modifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must reflect an instance field of PhpReference type declared in the class assignable from the class associated with this table..\r\n        /// </summary>\r\n        internal static string must_be_associated_instance_field {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_instance_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to an instance method of the class associated with this table..\r\n        /// </summary>\r\n        internal static string must_be_associated_instance_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_instance_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to a method of the class associated with this table..\r\n        /// </summary>\r\n        internal static string must_be_associated_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to a static method of the class associated with this table..\r\n        /// </summary>\r\n        internal static string must_be_associated_static_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_static_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be an instance of DeclaringType..\r\n        /// </summary>\r\n        internal static string must_be_declaringtype_instance {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_declaringtype_instance\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be an IPhpMemberHandle..\r\n        /// </summary>\r\n        internal static string must_be_iphpmemberhandle {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_iphpmemberhandle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be a class derived from PhpObject..\r\n        /// </summary>\r\n        internal static string must_be_phpobject_subclass {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_phpobject_subclass\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be static..\r\n        /// </summary>\r\n        internal static string must_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must target an instance method..\r\n        /// </summary>\r\n        internal static string must_target_instance_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_target_instance_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to NetworkUtils are not supported on this system..\r\n        /// </summary>\r\n        internal static string networkutils_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"networkutils_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; has no constructor defined - using default constructor and ignoring arguments.\r\n        /// </summary>\r\n        internal static string no_ctor_defined {\r\n            get {\r\n                return ResourceManager.GetString(\"no_ctor_defined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Called from the global scope - no function context.\r\n        /// </summary>\r\n        internal static string no_function_context {\r\n            get {\r\n                return ResourceManager.GetString(\"no_function_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No source files to compile..\r\n        /// </summary>\r\n        internal static string no_source_files_to_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"no_source_files_to_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No accessible overload of function &apos;{1}&apos; is compatible with the specified arguments.\r\n        /// </summary>\r\n        internal static string no_suitable_function_overload {\r\n            get {\r\n                return ResourceManager.GetString(\"no_suitable_function_overload\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No accessible overload of method &apos;{0}::{1}&apos; is compatible with the specified arguments.\r\n        /// </summary>\r\n        internal static string no_suitable_method_overload {\r\n            get {\r\n                return ResourceManager.GetString(\"no_suitable_method_overload\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot extend &apos;{0}&apos; because it is not a class.\r\n        /// </summary>\r\n        internal static string non_class_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"non_class_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos; cannot be used with generic type arguments.\r\n        /// </summary>\r\n        internal static string non_generic_type_used_with_type_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"non_generic_type_used_with_type_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot extend &apos;{0}&apos; because it is not an interface.\r\n        /// </summary>\r\n        internal static string non_interface_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"non_interface_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot implement &apos;{0}&apos; because it is not an interface.\r\n        /// </summary>\r\n        internal static string non_interface_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"non_interface_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Non-abstract method {0}::{1}() must contain body.\r\n        /// </summary>\r\n        internal static string nonabstract_bodyless_method {\r\n            get {\r\n                return ResourceManager.GetString(\"nonabstract_bodyless_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make non-abstract method {0}::{1}() abstract in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string nonabstract_method_overridden_with_abstract {\r\n            get {\r\n                return ResourceManager.GetString(\"nonabstract_method_overridden_with_abstract\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A callback &apos;{0}&apos; specified in the argument &apos;{1}&apos; is not callable.\r\n        /// </summary>\r\n        internal static string noncallable_callback {\r\n            get {\r\n                return ResourceManager.GetString(\"noncallable_callback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Non-static method {0}::{1}() should not be called statically.\r\n        /// </summary>\r\n        internal static string nonstatic_method_called_statically {\r\n            get {\r\n                return ResourceManager.GetString(\"nonstatic_method_called_statically\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only variables can be passed by reference.\r\n        /// </summary>\r\n        internal static string nonvar_passed_by_ref {\r\n            get {\r\n                return ResourceManager.GetString(\"nonvar_passed_by_ref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated constants have been reflected..\r\n        /// </summary>\r\n        internal static string not_all_constants_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_constants_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated fields have been reflected..\r\n        /// </summary>\r\n        internal static string not_all_fields_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_fields_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated methods have been reflected..\r\n        /// </summary>\r\n        internal static string not_all_methods_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_methods_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a custom attribute class.\r\n        /// </summary>\r\n        internal static string not_custom_attribute_class {\r\n            get {\r\n                return ResourceManager.GetString(\"not_custom_attribute_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not enought space in the target array..\r\n        /// </summary>\r\n        internal static string not_enought_space_in_target_array {\r\n            get {\r\n                return ResourceManager.GetString(\"not_enought_space_in_target_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of class {0} to string conversion.\r\n        /// </summary>\r\n        internal static string object_to_string_conversion {\r\n            get {\r\n                return ResourceManager.GetString(\"object_to_string_conversion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An object of type &apos;{0}&apos; used as an array.\r\n        /// </summary>\r\n        internal static string object_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"object_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method offsetGet() of objects used with [] operator followed by increment, decrement, assignment to reference, or another [] operators must return by reference.\r\n        /// </summary>\r\n        internal static string offsetGet_must_return_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"offsetGet_must_return_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to AllowedPathPrefixes restriction in effect. File({0}) is not within the allowed path(s): ({1}).\r\n        /// </summary>\r\n        internal static string open_basedir_effect {\r\n            get {\r\n                return ResourceManager.GetString(\"open_basedir_effect\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use [] for reading.\r\n        /// </summary>\r\n        internal static string operator___used_for_reading {\r\n            get {\r\n                return ResourceManager.GetString(\"operator[]_used_for_reading\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to option.\r\n        /// </summary>\r\n        internal static string option {\r\n            get {\r\n                return ResourceManager.GetString(\"option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;Out&apos; can be used only on parameters passed by reference; add &apos;&amp;&apos; modifier to the parameter &apos;${0}&apos;.\r\n        /// </summary>\r\n        internal static string out_attribute_on_byval_param {\r\n            get {\r\n                return ResourceManager.GetString(\"out_attribute_on_byval_param\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value should be between {0} and {1} including..\r\n        /// </summary>\r\n        internal static string out_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"out_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Output buffering is disabled.\r\n        /// </summary>\r\n        internal static string output_buffering_disabled {\r\n            get {\r\n                return ResourceManager.GetString(\"output_buffering_disabled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: This overload of &apos;{2}&apos; has different implementation options than the others..\r\n        /// </summary>\r\n        internal static string overload_has_different_impl_options {\r\n            get {\r\n                return ResourceManager.GetString(\"overload_has_different_impl_options\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Overload has lesser mandatory parameter count than another one, even though it has optional arguments..\r\n        /// </summary>\r\n        internal static string overload_has_lesser_param_count {\r\n            get {\r\n                return ResourceManager.GetString(\"overload_has_lesser_param_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Suboptimal implementation. Overloads of &apos;{2}&apos; are not placed one following the other in metadata table..\r\n        /// </summary>\r\n        internal static string overloads_not_contiguous {\r\n            get {\r\n                return ResourceManager.GetString(\"overloads_not_contiguous\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot override final method {0}::{1}().\r\n        /// </summary>\r\n        internal static string override_final_method {\r\n            get {\r\n                return ResourceManager.GetString(\"override_final_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot override constant &apos;{0}&apos; defined in interface &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string overriding_interface_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_interface_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::{1}() must be at least as visible as &apos;{2}&apos; specified in class/interface &apos;{3}&apos;.\r\n        /// </summary>\r\n        internal static string overriding_method_restrict_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_method_restrict_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::${1} must be at least as visible as &apos;{2}&apos; specified in class/interface &apos;{3}&apos;.\r\n        /// </summary>\r\n        internal static string overriding_property_restrict_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_property_restrict_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot change initial value of property static protected {0}::${1} in class &apos;{2}&apos; (previously declared in {3}).\r\n        /// </summary>\r\n        internal static string overriding_protected_static_with_init_value {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_protected_static_with_init_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare property static &apos;{3}&apos; {0}::${1} in class &apos;{2}&apos; (previously declared in &apos;{4}&apos;).\r\n        /// </summary>\r\n        internal static string overriding_static_field_with_static {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_static_field_with_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to instantiate page &apos;{0}&apos;..\r\n        /// </summary>\r\n        internal static string page_instantiation_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"page_instantiation_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; must be passed by reference.\r\n        /// </summary>\r\n        internal static string parameter_must_be_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"parameter_must_be_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access parent:: when current class scope has no parent.\r\n        /// </summary>\r\n        internal static string parent_accessed_in_parentless_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_accessed_in_parentless_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access parent:: when no class scope is active.\r\n        /// </summary>\r\n        internal static string parent_accessed_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_accessed_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;parent&apos; used out of class declaration.\r\n        /// </summary>\r\n        internal static string parent_used_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_used_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier cannot be used on a conditional declaration.\r\n        /// </summary>\r\n        internal static string partial_conditional_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_conditional_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must not specify different base classes.\r\n        /// </summary>\r\n        internal static string partial_declarations_differ_in_base {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_base\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same type parameter definitions.\r\n        /// </summary>\r\n        internal static string partial_declarations_differ_in_type_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_type_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same number of type parameters.\r\n        /// </summary>\r\n        internal static string partial_declarations_differ_in_type_parameter_count {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_type_parameter_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier can be used only in pure unit.\r\n        /// </summary>\r\n        internal static string partial_impure_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_impure_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier cannot be used in an evaluated code.\r\n        /// </summary>\r\n        internal static string partial_transient_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_transient_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path argument can not be empty.\r\n        /// </summary>\r\n        internal static string path_argument_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"path_argument_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path contains invalid characters.\r\n        /// </summary>\r\n        internal static string path_contains_invalid_characters {\r\n            get {\r\n                return ResourceManager.GetString(\"path_contains_invalid_characters\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Performing compilation.\r\n        /// </summary>\r\n        internal static string performing_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"performing_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;?php_track_vars?&gt; is not supported.\r\n        /// </summary>\r\n        internal static string php_track_vars_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"php_track_vars_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Replace this argument by arguments stated in a specified file..\r\n        /// </summary>\r\n        internal static string phpc_arg_at_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_at_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A path to a configuration file to load and process before the compilation. Multiple options can be specified. The order of processed configuration settings:\r\n        ///1. settings in Machine.config\r\n        ///2. settings in phpc.exe.config\r\n        ///3. settings in the file(s) specified by this option if specified\r\n        ///4. App.config/Web.config file located in the application source root if exists and no /config options specified..\r\n        /// </summary>\r\n        internal static string phpc_arg_config_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_config_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compile in debug mode (debug information is generated to .pdb files, asserts are ignored)..\r\n        /// </summary>\r\n        internal static string phpc_arg_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generate documentation into XML file named as the resulting assembly and placed to the same directory..\r\n        /// </summary>\r\n        internal static string phpc_arg_doc {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_doc\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generate documentation into a specified XML file..\r\n        /// </summary>\r\n        internal static string phpc_arg_doc_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_doc_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnigs regarding ampersand modifiers (references). Automatically disabled when /dw:CompilerStrict specified..\r\n        /// </summary>\r\n        internal static string phpc_arg_dw_AmpModifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_AmpModifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables strict compiler warnings such as unreachable code, using &amp; modifier in function calls, etc..\r\n        /// </summary>\r\n        internal static string phpc_arg_dw_CompilerStrict {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_CompilerStrict\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnings related to deferred compilation..\r\n        /// </summary>\r\n        internal static string phpc_arg_dw_DeferredToRuntime {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_DeferredToRuntime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnings reported when inclusion mapping fails. Automatically disabled when /dw:DeferredToRuntime specified..\r\n        /// </summary>\r\n        internal static string phpc_arg_dw_InclusionsMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_InclusionsMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Encoding of the scripts. Examples: UTF-8, Windows-1250, Latin1, Latin2, etc. See also method System.Text.Encoding.GetEncoding(string)..\r\n        /// </summary>\r\n        internal static string phpc_arg_encoding {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_encoding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to That one of compiled scripts which will be used as an entry point of a console application..\r\n        /// </summary>\r\n        internal static string phpc_arg_entrypoint {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_entrypoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enables specified warning(s) (same options as /dw)..\r\n        /// </summary>\r\n        internal static string phpc_arg_ew {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_ew\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Comma separated list of file extensions which to add to compilation when recursively searching directories. Default value is &apos;php,inc&apos;..\r\n        /// </summary>\r\n        internal static string phpc_arg_ext {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_ext\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Displays this usage message..\r\n        /// </summary>\r\n        internal static string phpc_arg_help {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_help\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File containing key pair generated by sn utility. Makes resulting assembly strongly named..\r\n        /// </summary>\r\n        internal static string phpc_arg_key {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_key\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enable language features of the specified PHP language version..\r\n        /// </summary>\r\n        internal static string phpc_arg_lang {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_lang\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Indicates that the COM threading model for the application is multithreaded apartment. Disabled by default..\r\n        /// </summary>\r\n        internal static string phpc_arg_mta {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_mta\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables one or more warnings by number. Separate multiple warning numbers with a commas..\r\n        /// </summary>\r\n        internal static string phpc_arg_nowarn_warning_numbers {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_nowarn_warning_numbers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If the target is a web application specifies a directory where the resulting assembly should be stored in.\r\n        ///Otherwise, specifies a name of the resulting application assembly..\r\n        /// </summary>\r\n        internal static string phpc_arg_out_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_out_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a pure PHP/CLR application..\r\n        /// </summary>\r\n        internal static string phpc_arg_pure {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_pure\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Suppresses display of any messages..\r\n        /// </summary>\r\n        internal static string phpc_arg_quiet {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_quiet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory which to recursively search for files to compile. Can be specified repeatedly..\r\n        /// </summary>\r\n        internal static string phpc_arg_recurse {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_recurse\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path to a referenced PHP library assembly. More these options can be stated..\r\n        /// </summary>\r\n        internal static string phpc_arg_reference_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_reference_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File or directory to embed to the resulting assembly as a managed resource (if a directory is specified its content is embedded recursively). Can be specified repeatedly. Optionally can contain specification fo resource name and visibiliy - only for files. Default name is filename and visibility is public..\r\n        /// </summary>\r\n        internal static string phpc_arg_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A path to a root directory of the compiled web/console/win application or library. Defaults to the current directory..\r\n        /// </summary>\r\n        internal static string phpc_arg_root_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_root_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enable static inclusions..\r\n        /// </summary>\r\n        internal static string phpc_arg_static {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a library..\r\n        /// </summary>\r\n        internal static string phpc_arg_target_dll {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_dll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build an executable console application..\r\n        /// </summary>\r\n        internal static string phpc_arg_target_exe {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_exe\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a web application..\r\n        /// </summary>\r\n        internal static string phpc_arg_target_web {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_web\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a Windows application..\r\n        /// </summary>\r\n        internal static string phpc_arg_target_winexe {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_winexe\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Whether to report additional infromation about the compilation process..\r\n        /// </summary>\r\n        internal static string phpc_arg_verbose {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_verbose\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Version of the resulting assembly. Default version is 1.0.0.0..\r\n        /// </summary>\r\n        internal static string phpc_arg_version {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_version\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File containing an Win32 icon (or multiple icons) that will be included to the resulting assembly..\r\n        /// </summary>\r\n        internal static string phpc_arg_win32icon {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_win32icon\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Paths to scripts to be compiled should be specified on the command line following the options. The paths can be either absolute or relative to the /root directory.\r\n        ///If no files are specified nor /recurse option is specified the /root directory is recursively searched for scripts to compile..\r\n        /// </summary>\r\n        internal static string phpc_other_args {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_other_args\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Precompiled assembly &apos;{0}&apos; is corrupted (unable to resolve type token 0x{1:X8})..\r\n        /// </summary>\r\n        internal static string precompiled_assembly_corrupted {\r\n            get {\r\n                return ResourceManager.GetString(\"precompiled_assembly_corrupted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Precompiled assembly &apos;{0}&apos; was not built to support source code watching..\r\n        /// </summary>\r\n        internal static string precompiled_assembly_no_source_watching {\r\n            get {\r\n                return ResourceManager.GetString(\"precompiled_assembly_no_source_watching\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare a private class in the global namespace.\r\n        /// </summary>\r\n        internal static string private_class_in_global_ns {\r\n            get {\r\n                return ResourceManager.GetString(\"private_class_in_global_ns\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access private constant {0}::{1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string private_constant_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"private_constant_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to private constructor {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string private_ctor_called {\r\n            get {\r\n                return ResourceManager.GetString(\"private_ctor_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to private method {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string private_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"private_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access private property {0}::${1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string private_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"private_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Properties cannot be declared abstract.\r\n        /// </summary>\r\n        internal static string property_declared_abstract {\r\n            get {\r\n                return ResourceManager.GetString(\"property_declared_abstract\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Properties cannot be declared final.\r\n        /// </summary>\r\n        internal static string property_declared_final {\r\n            get {\r\n                return ResourceManager.GetString(\"property_declared_final\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare property {0}::${1}.\r\n        /// </summary>\r\n        internal static string property_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"property_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to assign the specified value to &apos;{0}::{1}&apos;. There is no suitable conversion..\r\n        /// </summary>\r\n        internal static string property_type_mismatch {\r\n            get {\r\n                return ResourceManager.GetString(\"property_type_mismatch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access protected constant {0}::{1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string protected_constant_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_constant_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to protected constructor {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string protected_ctor_called {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_ctor_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to protected method {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string protected_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access protected property {0}::${1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string protected_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reading configuration.\r\n        /// </summary>\r\n        internal static string reading_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"reading_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot write to read-only property {0}::${1}.\r\n        /// </summary>\r\n        internal static string readonly_property_written {\r\n            get {\r\n                return ResourceManager.GetString(\"readonly_property_written\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare {0} &apos;{1}&apos; previously declared in {2}{3}.\r\n        /// </summary>\r\n        internal static string redeclared_previous_decl {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclared_previous_decl\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion of &apos;{2}{3}&apos; redeclares {0} &apos;{1}&apos; declared in {2}{3}.\r\n        /// </summary>\r\n        internal static string redeclared_previous_decl_include {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclared_previous_decl_include\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare inherited constant &apos;{0}&apos; from interface &apos;{1}&apos; in class/interface &apos;{2}&apos;.\r\n        /// </summary>\r\n        internal static string redeclaring_inherited_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclaring_inherited_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; is passed by reference and hence should not be NULL.\r\n        /// </summary>\r\n        internal static string reference_null {\r\n            get {\r\n                return ResourceManager.GetString(\"reference_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A scalar of type &apos;{0}&apos; used as an array.\r\n        /// </summary>\r\n        internal static string scalar_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"scalar_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A scalar of type &apos;{0}&apos; used as an object.\r\n        /// </summary>\r\n        internal static string scalar_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"scalar_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script &apos;{0}&apos; inclusion failed. Cause: {1} Search paths: include_path is &apos;{2}&apos;, working directory is &apos;{3}&apos; .\r\n        /// </summary>\r\n        internal static string script_inclusion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"script_inclusion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        internal static string script_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"script_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access self:: when no class scope is active.\r\n        /// </summary>\r\n        internal static string self_accessed_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"self_accessed_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;self&apos; used out of class declaration.\r\n        /// </summary>\r\n        internal static string self_used_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"self_used_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Semicolon ignored, using it in this context is possible in PHP 5, but depracated in PHP.NET.\r\n        /// </summary>\r\n        internal static string semicolon_ignored {\r\n            get {\r\n                return ResourceManager.GetString(\"semicolon_ignored\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::serialize() must return a string or NULL.\r\n        /// </summary>\r\n        internal static string serialize_must_return_null_or_string {\r\n            get {\r\n                return ResourceManager.GetString(\"serialize_must_return_null_or_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Session state not available, session operation cannot be performed.\r\n        /// </summary>\r\n        internal static string session_state_unavailable {\r\n            get {\r\n                return ResourceManager.GetString(\"session_state_unavailable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compilation of {0} skipped, file is already compiled.\r\n        /// </summary>\r\n        internal static string skip_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"skip_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to __sleep should return an array containing the names of instance-variables to serialize.\r\n        /// </summary>\r\n        internal static string sleep_must_return_array {\r\n            get {\r\n                return ResourceManager.GetString(\"sleep_must_return_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; returned as member variable from __sleep() but does not exist.\r\n        /// </summary>\r\n        internal static string sleep_returned_bad_field {\r\n            get {\r\n                return ResourceManager.GetString(\"sleep_returned_bad_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Source file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        internal static string source_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"source_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempt to unset static property {0}::${1}.\r\n        /// </summary>\r\n        internal static string static_property_unset {\r\n            get {\r\n                return ResourceManager.GetString(\"static_property_unset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified directory does not exist.\r\n        /// </summary>\r\n        internal static string stream_bad_directory {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_directory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified file does not exist.\r\n        /// </summary>\r\n        internal static string stream_bad_filename {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_filename\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to find the wrapper &apos;{0}&apos; - did you forget to enable it when you configured PHP?.\r\n        /// </summary>\r\n        internal static string stream_bad_wrapper {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_wrapper\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Permission denied.\r\n        /// </summary>\r\n        internal static string stream_directory_access_denied {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_access_denied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Directory not empty or read-only.\r\n        /// </summary>\r\n        internal static string stream_directory_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Use recursive mode to create more than one directory at a time.\r\n        /// </summary>\r\n        internal static string stream_directory_make_parent {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_make_parent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Can not create root directory.\r\n        /// </summary>\r\n        internal static string stream_directory_make_root {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_make_root\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified directory does not exist ({0}).\r\n        /// </summary>\r\n        internal static string stream_directory_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not access resource ({0}): {1}.\r\n        /// </summary>\r\n        internal static string stream_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to access ({0}): Permission denied.\r\n        /// </summary>\r\n        internal static string stream_file_access_denied {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_access_denied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified file already exists ({0}).\r\n        /// </summary>\r\n        internal static string stream_file_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified filename is invalid.\r\n        /// </summary>\r\n        internal static string stream_file_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}) due to I/O error: {1}.\r\n        /// </summary>\r\n        internal static string stream_file_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified file does not exist ({0}).\r\n        /// </summary>\r\n        internal static string stream_file_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to access ({0}): The filename is invalid.\r\n        /// </summary>\r\n        internal static string stream_filename_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_filename_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to open {0} for reading.\r\n        /// </summary>\r\n        internal static string stream_open_read_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_open_read_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to open {0} for writing.\r\n        /// </summary>\r\n        internal static string stream_open_write_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_open_write_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified path does not exist ({0}).\r\n        /// </summary>\r\n        internal static string stream_path_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_path_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured when reading from stream: {0}.\r\n        /// </summary>\r\n        internal static string stream_read_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An I/O error occured when reading from stream: {0}.\r\n        /// </summary>\r\n        internal static string stream_read_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The stream was not opened for reading.\r\n        /// </summary>\r\n        internal static string stream_read_off {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_off\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not rename &apos;{0}&apos; to &apos;{1}&apos;: target file exists.\r\n        /// </summary>\r\n        internal static string stream_rename_file_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_rename_file_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not remove directory ({0}): directory not empty.\r\n        /// </summary>\r\n        internal static string stream_rmdir_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_rmdir_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Seeking in a {0} stream! It may lead to unpredictable results..\r\n        /// </summary>\r\n        internal static string stream_seek_filtered {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_seek_filtered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Socket error: {0}.\r\n        /// </summary>\r\n        internal static string stream_socket_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_socket_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to stat ({0}) - invalid filename.\r\n        /// </summary>\r\n        internal static string stream_stat_invalid_path {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_stat_invalid_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}): unexpected error.\r\n        /// </summary>\r\n        internal static string stream_unlink_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}): The specified filename is invalid.\r\n        /// </summary>\r\n        internal static string stream_unlink_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}) due to I/O error: {1}.\r\n        /// </summary>\r\n        internal static string stream_unlink_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified URL is invalid.\r\n        /// </summary>\r\n        internal static string stream_url_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_url_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified request method is invalid.\r\n        /// </summary>\r\n        internal static string stream_url_method_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_url_method_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured when writing to stream: {0}.\r\n        /// </summary>\r\n        internal static string stream_write_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to write to stream (only {0} bytes of {1} written).\r\n        /// </summary>\r\n        internal static string stream_write_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An I/O error occured when writing to stream: {0}.\r\n        /// </summary>\r\n        internal static string stream_write_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The stream was not opened for writing.\r\n        /// </summary>\r\n        internal static string stream_write_off {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_off\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string item used as a reference.\r\n        /// </summary>\r\n        internal static string string_item_used_as_reference {\r\n            get {\r\n                return ResourceManager.GetString(\"string_item_used_as_reference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String should consist of a single character.\r\n        /// </summary>\r\n        internal static string string_should_be_single_character {\r\n            get {\r\n                return ResourceManager.GetString(\"string_should_be_single_character\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string used as an array.\r\n        /// </summary>\r\n        internal static string string_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"string_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string used as an object.\r\n        /// </summary>\r\n        internal static string string_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"string_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to exception &apos;{0}&apos; with message &apos;{1}&apos;\r\n        ///Stack trace:\r\n        ///{2}.\r\n        /// </summary>\r\n        internal static string stringified_exception {\r\n            get {\r\n                return ResourceManager.GetString(\"stringified_exception\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to exception &apos;{0}&apos; with message &apos;{1}&apos; in {2}:{3}:{4}\r\n        ///Stack trace:\r\n        ///{5}.\r\n        /// </summary>\r\n        internal static string stringified_exception_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"stringified_exception_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Syntax error: {0}.\r\n        /// </summary>\r\n        internal static string syntax_error {\r\n            get {\r\n                return ResourceManager.GetString(\"syntax_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The variable $this used in write context.\r\n        /// </summary>\r\n        internal static string this_in_write_context {\r\n            get {\r\n                return ResourceManager.GetString(\"this_in_write_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The variable $this used out of method.\r\n        /// </summary>\r\n        internal static string this_out_of_method {\r\n            get {\r\n                return ResourceManager.GetString(\"this_out_of_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Using $this when not in object context.\r\n        /// </summary>\r\n        internal static string this_used_out_of_object {\r\n            get {\r\n                return ResourceManager.GetString(\"this_used_out_of_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Timeout when waiting for ExtManager to start up..\r\n        /// </summary>\r\n        internal static string timeout_waiting_for_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"timeout_waiting_for_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The integer number {0} is too big, converting to double instead.\r\n        /// </summary>\r\n        internal static string too_big_int_conversion {\r\n            get {\r\n                return ResourceManager.GetString(\"too_big_int_conversion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of the class &apos;{0}&apos; constructor - at least {1} required but only {2} provided.\r\n        /// </summary>\r\n        internal static string too_few_ctor_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_ctor_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of &apos;{0}&apos; - at least {1} required but only {2} provided.\r\n        /// </summary>\r\n        internal static string too_few_function_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_function_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of &apos;{0}::{1}&apos; - at least {2} required but only {3} provided.\r\n        /// </summary>\r\n        internal static string too_few_method_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_method_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Too little data buffered..\r\n        /// </summary>\r\n        internal static string too_little_data_buffered {\r\n            get {\r\n                return ResourceManager.GetString(\"too_little_data_buffered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; declares too many local variables ({1}) which may lead to suboptimal performace.\r\n        /// </summary>\r\n        internal static string too_many_local_variables_function {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_local_variables_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method &apos;{0}::{1}&apos; declares too many local variables ({2}) which may lead to suboptimal performace.\r\n        /// </summary>\r\n        internal static string too_many_local_variables_method {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_local_variables_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of type &apos;{0}&apos; requires at most {1} generic type arguments.\r\n        /// </summary>\r\n        internal static string too_many_type_arguments_in_type_use {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_type_arguments_in_type_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method {0}::__toString() must return a string value.\r\n        /// </summary>\r\n        internal static string tostring_must_return_string {\r\n            get {\r\n                return ResourceManager.GetString(\"tostring_must_return_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type argument #{0} not passed to the function/method.\r\n        /// </summary>\r\n        internal static string type_argument_not_passed_to_function {\r\n            get {\r\n                return ResourceManager.GetString(\"type_argument_not_passed_to_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare class/interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string type_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"type_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to connect to ExtManager..\r\n        /// </summary>\r\n        internal static string unable_to_connect_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_connect_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to find extension &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string unable_to_find_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_find_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to launch ExtManager..\r\n        /// </summary>\r\n        internal static string unable_to_launch_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_launch_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to resolve script type (source path &apos;{0}&apos;, referential type &apos;{1}&apos;).\r\n        /// </summary>\r\n        internal static string unable_to_resolve_script_type {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_resolve_script_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Uncaught {0}.\r\n        /// </summary>\r\n        internal static string uncaught_exception {\r\n            get {\r\n                return ResourceManager.GetString(\"uncaught_exception\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Access to undeclared static property: {0}::${1}.\r\n        /// </summary>\r\n        internal static string undeclared_static_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"undeclared_static_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined class constant &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        internal static string undefined_class_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_class_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined constant &apos;{0}&apos; - the default value &quot;{0}&quot; is used instead.\r\n        /// </summary>\r\n        internal static string undefined_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined external function &apos;{0}&apos;, extension &apos;{1}&apos; - check configuration.\r\n        /// </summary>\r\n        internal static string undefined_external_function_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_external_function_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined function: &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string undefined_function_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_function_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of undefined label &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string undefined_label {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined method: {0}::{1}().\r\n        /// </summary>\r\n        internal static string undefined_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined offset ({0}).\r\n        /// </summary>\r\n        internal static string undefined_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined property: {0}::${1}.\r\n        /// </summary>\r\n        internal static string undefined_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access undefined property for object with overloaded property access.\r\n        /// </summary>\r\n        internal static string undefined_property_when_access_overloaded {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_property_when_access_overloaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined variable &apos;${0}&apos;.\r\n        /// </summary>\r\n        internal static string undefined_variable {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_variable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected parent constructor call (such call is allowed only in the constructor of the class extending a CLR type).\r\n        /// </summary>\r\n        internal static string unexpected_parent_ctor_invocation {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_parent_ctor_invocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to unexpected token &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string unexpected_token {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_token\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String offset &apos;{0}&apos; hasn&apos;t been initialized.\r\n        /// </summary>\r\n        internal static string uninitialized_string_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"uninitialized_string_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_class_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_class_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_class_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_class_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_constant_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_constant_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_constant_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_constant_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown custom attribute; neither of types &apos;{0}&apos; and &apos;{1}&apos; exists.\r\n        /// </summary>\r\n        internal static string unknown_custom_attribute {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_custom_attribute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_function_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_function_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        internal static string unknown_function_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_function_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; does not contain definition of method &apos;{1}&apos;.\r\n        /// </summary>\r\n        internal static string unknown_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Session handler &apos;{0}&apos; is unknown. It hasn&apos;t been registered by any loaded library..\r\n        /// </summary>\r\n        internal static string unknown_session_handler {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_session_handler\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown error &quot;{0}&quot;..\r\n        /// </summary>\r\n        internal static string UnknownError_Num {\r\n            get {\r\n                return ResourceManager.GetString(\"UnknownError_Num\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unreachable code detected.\r\n        /// </summary>\r\n        internal static string unreachable_code {\r\n            get {\r\n                return ResourceManager.GetString(\"unreachable_code\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function {0}() hasn&apos;t defined the class it was called for.\r\n        /// </summary>\r\n        internal static string unserialize_callback_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"unserialize_callback_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported operand type.\r\n        /// </summary>\r\n        internal static string unsupported_operand_type {\r\n            get {\r\n                return ResourceManager.GetString(\"unsupported_operand_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported operand types.\r\n        /// </summary>\r\n        internal static string unsupported_operand_types {\r\n            get {\r\n                return ResourceManager.GetString(\"unsupported_operand_types\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unterminated comment starting line {0}.\r\n        /// </summary>\r\n        internal static string unterminated_comment {\r\n            get {\r\n                return ResourceManager.GetString(\"unterminated_comment\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The label &apos;{0}&apos; is defined but not used within the current scope.\r\n        /// </summary>\r\n        internal static string unused_label {\r\n            get {\r\n                return ResourceManager.GetString(\"unused_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to URL file-access is disabled in the server configuration.\r\n        /// </summary>\r\n        internal static string url_fopen_disabled {\r\n            get {\r\n                return ResourceManager.GetString(\"url_fopen_disabled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No URL resource specified.\r\n        /// </summary>\r\n        internal static string url_resource_missing {\r\n            get {\r\n                return ResourceManager.GetString(\"url_resource_missing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The option is valid only in web application configuration..\r\n        /// </summary>\r\n        internal static string web_only_option {\r\n            get {\r\n                return ResourceManager.GetString(\"web_only_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Web server context is not available..\r\n        /// </summary>\r\n        internal static string web_server_not_available {\r\n            get {\r\n                return ResourceManager.GetString(\"web_server_not_available\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} operation is not supported by this stream wrapper.\r\n        /// </summary>\r\n        internal static string wrapper_op_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"wrapper_op_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot read from write-only property {0}::${1}.\r\n        /// </summary>\r\n        internal static string writeonly_property_read {\r\n            get {\r\n                return ResourceManager.GetString(\"writeonly_property_read\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Localizations/Strings.cs-CZ.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"Argument_StringZeroLength\" xml:space=\"preserve\">\r\n    <value>Řetězec nesmí být prázdný.</value>\r\n  </data>\r\n  <data name=\"Argument_IllegalEnvVarName\" xml:space=\"preserve\">\r\n    <value>Proměnná prostředí nesmí obsahovat znak \"rovná se\" (=).</value>\r\n  </data>\r\n  <data name=\"Argument_LongEnvVarValue\" xml:space=\"preserve\">\r\n    <value>Jméno a hodnota proměnné prostředí jsou přílíš dlouhé.</value>\r\n  </data>\r\n  <data name=\"Argument_StringFirstCharIsZero\" xml:space=\"preserve\">\r\n    <value>První znak v řetězci je nulový.</value>\r\n  </data>\r\n  <data name=\"UnknownError_Num\" xml:space=\"preserve\">\r\n    <value>Neznámá chyba \"{0}\".</value>\r\n  </data>\r\n  <data name=\"invalid_array_rank\" xml:space=\"preserve\">\r\n    <value>Chybný rozměr pole.</value>\r\n  </data>\r\n  <data name=\"invalid_field_reference\" xml:space=\"preserve\">\r\n    <value>Neplatná reference na vlastnost.</value>\r\n  </data>\r\n  <data name=\"field_not_exists\" xml:space=\"preserve\">\r\n    <value>Vlastnost '{0}' neexistuje.</value>\r\n  </data>\r\n  <data name=\"not_enought_space_in_target_array\" xml:space=\"preserve\">\r\n    <value>V cílovém poli není dost místa.</value>\r\n  </data>\r\n  <data name=\"item_removed_from_empty_array\" xml:space=\"preserve\">\r\n    <value>Nemohu odstranit položku z prázdného pole</value>\r\n  </data>\r\n  <data name=\"enumerator_not_referencing_this_table\" xml:space=\"preserve\">\r\n    <value>Specifikovaný enumerátor nereferencuje tuto tabulku.</value>\r\n  </data>\r\n  <data name=\"argument_equals\" xml:space=\"preserve\">\r\n    <value>Argument {0} nesmí být roven {1}.</value>\r\n  </data>\r\n  <data name=\"for_internal_usage_only\" xml:space=\"preserve\">\r\n    <value>{0} je určen pouze k internímu použití.</value>\r\n  </data>\r\n  <data name=\"invalid_node\" xml:space=\"preserve\">\r\n    <value>Neplatný uzel.</value>\r\n  </data>\r\n  <data name=\"missing_attribute\" xml:space=\"preserve\">\r\n    <value>Chybějící atribut '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_value\" xml:space=\"preserve\">\r\n    <value>Hodnota atributu '{0}' je neplatná.</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_location\" xml:space=\"preserve\">\r\n    <value>Atribut '{0}' namůže být použit v konfiguračním souboru nacházejícím se na virtuální cestě '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_node_location\" xml:space=\"preserve\">\r\n    <value>Uzel nemůže být použit v konfiguračním souboru nacházejícím se na virtuální cestě '{0}' protože {1}.</value>\r\n  </data>\r\n  <data name=\"defines_app_wide_config\" xml:space=\"preserve\">\r\n    <value>definuje konfiguraci na úrovni aplikace</value>\r\n  </data>\r\n  <data name=\"defines_machine_wide_config\" xml:space=\"preserve\">\r\n    <value>definuje konfiguraci na úrovni počítače</value>\r\n  </data>\r\n  <data name=\"invalid_library_descriptor\" xml:space=\"preserve\">\r\n    <value>Typ '{0}' je neplatný popisovač knihovny.</value>\r\n  </data>\r\n  <data name=\"library_section_redeclared\" xml:space=\"preserve\">\r\n    <value>Seklce konfigurace knihoven '{0}' již byla přifařena ke knihovně '{1}'.</value>\r\n  </data>\r\n  <data name=\"cannot_change_library_section\" xml:space=\"preserve\">\r\n    <value>Nemohu změnit část načtené knihovny. Knihovna '{0}' již byla načtena do konfigurační sekce '{1}'.</value>\r\n  </data>\r\n  <data name=\"library_assembly_loading_failed\" xml:space=\"preserve\">\r\n    <value>Sestavení knihovny '{0}' nemůže být načteno.</value>\r\n  </data>\r\n  <data name=\"dynamic_wrapper_loading_failed\" xml:space=\"preserve\">\r\n    <value>Dynamický wrapper '{0}' nemohl být načten.</value>\r\n  </data>\r\n  <data name=\"referenced_assembly_loading_failed\" xml:space=\"preserve\">\r\n    <value>Odkazované PHP sestavení '{0}' nelze načíst.</value>\r\n  </data>\r\n  <data name=\"constant_reimplemented\" xml:space=\"preserve\">\r\n    <value>Konstanta '{0}' implemetována {1}.{2} již byla implementována jinde.</value>\r\n  </data>\r\n  <data name=\"function_reimplemented\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' implementovaná {1}.{2} již byla implementována jinde se stejným počtem parametrů.</value>\r\n  </data>\r\n  <data name=\"invalid_call_context_data\" xml:space=\"preserve\">\r\n    <value>Neplatný kontext volání ve slotu {0}.</value>\r\n  </data>\r\n  <data name=\"last_is_less_than_first\" xml:space=\"preserve\">\r\n    <value>Poslední musí být větší nebo roven prvnímu.</value>\r\n  </data>\r\n  <data name=\"page_instantiation_failed\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit instanci stránky '{0}'.</value>\r\n  </data>\r\n  <data name=\"directory_not_exists\" xml:space=\"preserve\">\r\n    <value>Adresář '{0}' neexistuje.</value>\r\n  </data>\r\n  <data name=\"incomplete_path\" xml:space=\"preserve\">\r\n    <value>Cesta '{0}' je nekompletní. Cesta je relativní nebo neobsahuje specifikaci disku.</value>\r\n  </data>\r\n  <data name=\"file_not_exists\" xml:space=\"preserve\">\r\n    <value>Soubor '{0}' neexistuje.</value>\r\n  </data>\r\n  <data name=\"invalid_regular_expression\" xml:space=\"preserve\">\r\n    <value>Neplatný regulární výraz.</value>\r\n  </data>\r\n  <data name=\"invalid_registering_order\" xml:space=\"preserve\">\r\n    <value>Neplatné pořadí registrace globálních proměnných.</value>\r\n  </data>\r\n  <data name=\"invalid_library_contant_type\" xml:space=\"preserve\">\r\n    <value>Neplatný typ konstanty knihovny '{0}'.</value>\r\n  </data>\r\n  <data name=\"missing_configuration\" xml:space=\"preserve\">\r\n    <value>Konfigurační volba {0} nebyla definována.</value>\r\n  </data>\r\n  <data name=\"console_only_option\" xml:space=\"preserve\">\r\n    <value>Tato volba je platná jen pro konfiguraci konzolové aplikace.</value>\r\n  </data>\r\n  <data name=\"web_only_option\" xml:space=\"preserve\">\r\n    <value>Volba je platná jen v konfiguraci webové aplikace.</value>\r\n  </data>\r\n  <data name=\"script_not_found\" xml:space=\"preserve\">\r\n    <value>Soubor skriptu '{0}' nenalezen.</value>\r\n  </data>\r\n  <data name=\"error_creating_file\" xml:space=\"preserve\">\r\n    <value>Neoučekávaná chyba při vytváření souboru '{0}': {1}</value>\r\n  </data>\r\n  <data name=\"library_config_handler_failed\" xml:space=\"preserve\">\r\n    <value>Handler konfigurace knihovny '{0}' selhal.</value>\r\n  </data>\r\n  <data name=\"out_of_range\" xml:space=\"preserve\">\r\n    <value>Hodnota by měla být mezi {0} a {1} včetně.</value>\r\n  </data>\r\n  <data name=\"invalid_base\" xml:space=\"preserve\">\r\n    <value>Neplatný základ.</value>\r\n  </data>\r\n  <data name=\"configuration_not_loaded\" xml:space=\"preserve\">\r\n    <value>Konfigurace nebyla ještě načtena</value>\r\n  </data>\r\n  <data name=\"cannot_modify_option\" xml:space=\"preserve\">\r\n    <value>Konfigurační volba zde nemůže být změněna, protože to bylo znemožněno atributem 'allowOverride' v konfiguračním souboru '{0}'.</value>\r\n  </data>\r\n  <data name=\"unknown_session_handler\" xml:space=\"preserve\">\r\n    <value>Session handler '{0}' je neznámý. Nebyl registrován žádnou z načtených knihoven.</value>\r\n  </data>\r\n  <data name=\"invalid_main_routine\" xml:space=\"preserve\">\r\n    <value>Neplatná rutina main.</value>\r\n  </data>\r\n  <data name=\"invalid_method_implementation\" xml:space=\"preserve\">\r\n    <value>Neplatná implementace metody '{0}'.</value>\r\n  </data>\r\n  <data name=\"cant_generate_sys_class_builders\" xml:space=\"preserve\">\r\n    <value>Nemohu generovat buildera pro systémové třídy.</value>\r\n  </data>\r\n  <data name=\"cant_create_sys_class_types\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit typ ze systémové třídy.</value>\r\n  </data>\r\n  <data name=\"cant_clone_sys_table\" xml:space=\"preserve\">\r\n    <value>Nemohu klonovat systémovou tabulku tříd.</value>\r\n  </data>\r\n  <data name=\"unable_to_connect_extmanager\" xml:space=\"preserve\">\r\n    <value>Nemohu se připojit k ExtManageru.</value>\r\n  </data>\r\n  <data name=\"unable_to_launch_extmanager\" xml:space=\"preserve\">\r\n    <value>Nemohu spustit ExtManager.</value>\r\n  </data>\r\n  <data name=\"could_not_create_event\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit událost.</value>\r\n  </data>\r\n  <data name=\"timeout_waiting_for_extmanager\" xml:space=\"preserve\">\r\n    <value>Timeout při čekání na spuštění ExtManagera.</value>\r\n  </data>\r\n  <data name=\"cannot_change_target_instance\" xml:space=\"preserve\">\r\n    <value>Změna císlové instance nenív podporována pokud cíl byl již určen.</value>\r\n  </data>\r\n  <data name=\"must_target_instance_method\" xml:space=\"preserve\">\r\n    <value>Musí cílit na instanční metodu.</value>\r\n  </data>\r\n  <data name=\"must_be_static\" xml:space=\"preserve\">\r\n    <value>Musí být statická.</value>\r\n  </data>\r\n  <data name=\"must_be_phpobject_subclass\" xml:space=\"preserve\">\r\n    <value>Musí být řída odvozená od PhpObject.</value>\r\n  </data>\r\n  <data name=\"must_be_iphpmemberhandle\" xml:space=\"preserve\">\r\n    <value>Musí být IPhpMemberHandle.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_instance_method\" xml:space=\"preserve\">\r\n    <value>Musí být přifařeno instanční metodě třídy asociované s touto tabulkou.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_method\" xml:space=\"preserve\">\r\n    <value>Musí být přifařeno metodě třídy asociované s touto tabulkou.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_static_method\" xml:space=\"preserve\">\r\n    <value>Musí být přifařeno statické metodě asociované s touto tabulkou.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_instance_field\" xml:space=\"preserve\">\r\n    <value>Je potřeba reflektovat instanční proměnnou typu PhpReference deklarovanou ve třídě přiřaditelní ze třídy asociovatelné s touto tabulkou.</value>\r\n  </data>\r\n  <data name=\"must_be_declaringtype_instance\" xml:space=\"preserve\">\r\n    <value>Musí být instance DeclaringType.</value>\r\n  </data>\r\n  <data name=\"class_instantiation_failed\" xml:space=\"preserve\">\r\n    <value>Nemohu instanciovat třídu '{0}'.</value>\r\n  </data>\r\n  <data name=\"incarnation_type_mismatch\" xml:space=\"preserve\">\r\n    <value>Musí být stejného typu jako tato instance.</value>\r\n  </data>\r\n  <data name=\"field_already_exists\" xml:space=\"preserve\">\r\n    <value>Proměnná se stejným názvem již existuje na úrovni tohoto objektu.</value>\r\n  </data>\r\n  <data name=\"buffers_must_not_be_empty\" xml:space=\"preserve\">\r\n    <value>Buffery musí být neprázdné.</value>\r\n  </data>\r\n  <data name=\"too_little_data_buffered\" xml:space=\"preserve\">\r\n    <value>Příliš málo dat nabufferováno.</value>\r\n  </data>\r\n  <data name=\"casting_to_stream_unsupported\" xml:space=\"preserve\">\r\n    <value>Tento stream není možno přetypovat na System.IO.Stream.</value>\r\n  </data>\r\n  <data name=\"set_return_custom_attr_unsupported\" xml:space=\"preserve\">\r\n    <value>Metoda není nadále podporována. Použijte raději MethodBuilder.DefineParameter.</value>\r\n  </data>\r\n  <data name=\"define_method_unsupported\" xml:space=\"preserve\">\r\n    <value>Metoda již není podporána. Použijte TypeBuilder.DefineMethod namísto ní.</value>\r\n  </data>\r\n  <data name=\"networkutils_unsupported\" xml:space=\"preserve\">\r\n    <value>NetworkUtils nejsou na tomto systému podporovány.</value>\r\n  </data>\r\n  <data name=\"class_has_no_unserializer\" xml:space=\"preserve\">\r\n    <value>Třída {0} nemá deinicializátor</value>\r\n  </data>\r\n  <data name=\"invalid_script_assembly\" xml:space=\"preserve\">\r\n    <value>Setavení '{0}' není platné kompilované sestavení skriptů Phalanger</value>\r\n  </data>\r\n  <data name=\"unable_to_resolve_script_type\" xml:space=\"preserve\">\r\n    <value>Nemohu odhalit typ skriptu (zdrojová adresa '{0}', referenční typ '{1}')</value>\r\n  </data>\r\n  <data name=\"instance_disposed\" xml:space=\"preserve\">\r\n    <value>Instance již byla uvolněna</value>\r\n  </data>\r\n  <data name=\"session_state_unavailable\" xml:space=\"preserve\">\r\n    <value>Session state nedostupný, operace se sezením nemůže být provedena</value>\r\n  </data>\r\n  <data name=\"empty_path\" xml:space=\"preserve\">\r\n    <value>Cesta musí být neprázdná</value>\r\n  </data>\r\n  <data name=\"invalid_path\" xml:space=\"preserve\">\r\n    <value>Cesta není platná.</value>\r\n  </data>\r\n  <data name=\"no_source_files_to_compile\" xml:space=\"preserve\">\r\n    <value>Nebyly specifikovány soubory ke kompilaci.</value>\r\n  </data>\r\n  <data name=\"configuration_file_not_found\" xml:space=\"preserve\">\r\n    <value>Konfigurační soubor '{0}' nenalezen.</value>\r\n  </data>\r\n  <data name=\"referenced_assembly_not_found\" xml:space=\"preserve\">\r\n    <value>Odkaz na assembly je chybný - cílová assembly neexistuje.</value>\r\n  </data>\r\n  <data name=\"source_file_not_found\" xml:space=\"preserve\">\r\n    <value>Zdrojový soubor nenalezen.</value>\r\n  </data>\r\n  <data name=\"directory_not_found\" xml:space=\"preserve\">\r\n    <value>Adresář nenalezen.</value>\r\n  </data>\r\n  <data name=\"invalid_value\" xml:space=\"preserve\">\r\n    <value>Chybná hodnota.</value>\r\n  </data>\r\n  <data name=\"invalid_option\" xml:space=\"preserve\">\r\n    <value>Chybná volba.</value>\r\n  </data>\r\n  <data name=\"application_config_file_copied\" xml:space=\"preserve\">\r\n    <value>Konfigurační soubor aplikace zkopírován.</value>\r\n  </data>\r\n  <data name=\"entrypoint_not_specified\" xml:space=\"preserve\">\r\n    <value>Vstupní bod (entry-point) aplikace nebyl specifikován.</value>\r\n  </data>\r\n  <data name=\"invalid_file_extension\" xml:space=\"preserve\">\r\n    <value>Chybná přípona souboru.</value>\r\n  </data>\r\n  <data name=\"cannot_create_config_file\" xml:space=\"preserve\">\r\n    <value>Nelze vytvořit konfigurační soubor '{0}'. Chyba: {1}</value>\r\n  </data>\r\n  <data name=\"loaded_libraries\" xml:space=\"preserve\">\r\n    <value>Načtené knihovny</value>\r\n  </data>\r\n  <data name=\"configuration_error\" xml:space=\"preserve\">\r\n    <value>Chyba konfigurace</value>\r\n  </data>\r\n  <data name=\"performing_compilation\" xml:space=\"preserve\">\r\n    <value>Kompiluji</value>\r\n  </data>\r\n  <data name=\"Arguments\" xml:space=\"preserve\">\r\n    <value>Volby</value>\r\n  </data>\r\n  <data name=\"Error\" xml:space=\"preserve\">\r\n    <value>Chyba</value>\r\n  </data>\r\n  <data name=\"value\" xml:space=\"preserve\">\r\n    <value>hodnota</value>\r\n  </data>\r\n  <data name=\"option\" xml:space=\"preserve\">\r\n    <value>volba</value>\r\n  </data>\r\n  <data name=\"phpc_arg:help\" xml:space=\"preserve\">\r\n    <value>Zobrazí informace o použití.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:debug\" xml:space=\"preserve\">\r\n    <value>Zkompilovat v režimu ladění (ladící informace jsou vygenerovány do .pdb souborů, asserty jsou ignorovány).</value>\r\n  </data>\r\n  <data name=\"phpc_arg:target_web\" xml:space=\"preserve\">\r\n    <value>Sestaví web aplikaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:target_exe\" xml:space=\"preserve\">\r\n    <value>Sestaví spustitelnou konzolovou aplikaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:target_dll\" xml:space=\"preserve\">\r\n    <value>Sestaví knihovnu.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:target_winexe\" xml:space=\"preserve\">\r\n    <value>Sestaví Windows aplikaci</value>\r\n  </data>\r\n  <data name=\"phpc_arg:out_path\" xml:space=\"preserve\">\r\n    <value>Pro webové aplikace definuje adresář, do kterého je uložena výsledná assembly.\\nPro ostatní aplikace specifikuje jmnéno výsledné assembly.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:doc\" xml:space=\"preserve\">\r\n    <value>Generovat XML dokumantaci do XML souboru pojmenovaného jako výsledné sestavení a umístěného do stejné složky.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:doc_path\" xml:space=\"preserve\">\r\n    <value>Generovat XML dokumentaci do specifikovaného XML souboru.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:root_path\" xml:space=\"preserve\">\r\n    <value>Cesta ke kořenové složce kompilované webové/konzolové/okenní aplikace nebo knihovny. Jako výchozí hodnota je použit aktuální adresář.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:config_path\" xml:space=\"preserve\">\r\n    <value>Cesta ke konfiguračnímu souboru pro načtení a zpracování před kompilací. Více voleb může být specifikováno. Pořadí zpracování konfiguračních nastavení:\\n1. nastavení z Machine.config\\n2. nastavení z phpc.exe.config\\n3. nastavení ze souborů specifikovaných touto volbou (pokud specifikováno)\\n4. soubory App.config/Web.config k kořenu zdroje aplikace pokud existují a žádné volby /config nejsou specifikovány.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:reference_path\" xml:space=\"preserve\">\r\n    <value>Cesta k referencovanému sestavení knihovny PHP. Těchto voleb může být použito více.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:entrypoint\" xml:space=\"preserve\">\r\n    <value>Ten z kompilovaných skriptů, který bude použit jako vstupní bod konzolové aplikce.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:namespaces\" xml:space=\"preserve\">\r\n    <value>Předpojit před názvy generovaných typů jmenné prostory odvozené od názvů souborů.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:static\" xml:space=\"preserve\">\r\n    <value>Povolit statické inkluze.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:recurse\" xml:space=\"preserve\">\r\n    <value>Složka, které bude rekurzivně prohledáhna za účelem nalezení souborů ke kompilaci. Může být specifikována opakovaně.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:ext\" xml:space=\"preserve\">\r\n    <value>Čárkou oddělený seznam přípon souborů, které budou přikompilovány během rekurzivního procházení složek. Výchozí hodnota je 'php,inc'.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:encoding\" xml:space=\"preserve\">\r\n    <value>Kódování skriptů. Např.: UTF-8, Windows-1250, Latin1, Latin2 atd. Viz metoda System.Text.Encoding.GetEncoding(string).</value>\r\n  </data>\r\n  <data name=\"phpc_arg:key\" xml:space=\"preserve\">\r\n    <value>Soubor obsahujíc pár klíčů generovaný utilitou sn. Zapříčiní, že výsledné sestavení bude silně pojmenované.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:version\" xml:space=\"preserve\">\r\n    <value>Verze výsledného sestavení. Výchozí je 1.0.0.0.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:win32icon\" xml:space=\"preserve\">\r\n    <value>Soubor obsahující ikonu Win32 (nebo více ikon), který bude vložen do výsledného sestavení.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:dw_warning_number\" xml:space=\"preserve\">\r\n    <value>Vypne varování se specifickým číslem.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:dw_DeferredToRuntime\" xml:space=\"preserve\">\r\n    <value>Vypnout varování spojená s odloženou kompilací.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:dw_InclusionsMapping\" xml:space=\"preserve\">\r\n    <value>Vypnout varování generované když selže mapování inkluze. Automaticky vypnuto, když je specifikováno /dw:DeferredToRuntime.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:dw_CompilerStrict\" xml:space=\"preserve\">\r\n    <value>Vypnout striktní varování kompilátorujako nedosažitelný kód, použití modifikátoru &amp; ve volání funkcí atp.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:dw_AmpModifiers\" xml:space=\"preserve\">\r\n    <value>Vypnout varování ohledně modifikátorů ampersand (reference). Automaticky vypnuty, pokud je specifikováno /dw:CompilerStrict.</value>\r\n  </data>\r\n  <data name=\"phpc_arg:ew\" xml:space=\"preserve\">\r\n    <value>Povolit specifická varování (stejné volby jako /dw).</value>\r\n  </data>\r\n  <data name=\"phpc_arg:verbose\" xml:space=\"preserve\">\r\n    <value>Zobrazovat doplňující informace o procesu kompilace?</value>\r\n  </data>\r\n  <data name=\"phpc_other_args\" xml:space=\"preserve\">\r\n    <value>Cesta ke skriptům, které mají být zkompilovány, by měla být uvedena na příkazové řádce za volbami. Cesty mohou být absolutní nebo relativní ke složce /root.\\nPokud žádné soubory nejsou specifikovány ale je použita volba /recurse, složka /root je rekurzivně prohledána pátrajíce po skriptech ke kompilaci.</value>\r\n  </data>\r\n  <data name=\"default_exception_message\" xml:space=\"preserve\">\r\n    <value>Neznámá výjimka</value>\r\n  </data>\r\n  <data name=\"stringified_exception_debug\" xml:space=\"preserve\">\r\n    <value>výjimka '{0}' se zprávou '{1}' v {2}:{3}:{4}\r\nVýpis zásobníku:\r\n{5}</value>\r\n  </data>\r\n  <data name=\"stringified_exception\" xml:space=\"preserve\">\r\n    <value>výjimika '{0}' se zprávou '{1}'\r\nVýpis zásobníku:\r\n{2}</value>\r\n  </data>\r\n  <data name=\"getiterator_must_return_traversable\" xml:space=\"preserve\">\r\n    <value>Objekty vrácené {0}::getIterator() musí být procházitelné nebo implementovat rozhraní Iterator</value>\r\n  </data>\r\n  <data name=\"uncaught_exception\" xml:space=\"preserve\">\r\n    <value>Nezachyceno {0}</value>\r\n  </data>\r\n  <data name=\"exception_cannot_be_thrown\" xml:space=\"preserve\">\r\n    <value>Výjimka nemůže být vyhozena zde: {0}</value>\r\n  </data>\r\n  <data name=\"serialize_must_return_null_or_string\" xml:space=\"preserve\">\r\n    <value>{0}::serialize() musí vrátit řetězec nebo NULL</value>\r\n  </data>\r\n  <data name=\"(related_location)\" xml:space=\"preserve\">\r\n    <value>(předružené umístění)</value>\r\n  </data>\r\n  <data name=\"property_gotten_on_non_object\" xml:space=\"preserve\">\r\n    <value>Pokus o získání vlastnosti ne-objektu</value>\r\n  </data>\r\n  <data name=\"property_assigned_to_non_object\" xml:space=\"preserve\">\r\n    <value>Pokus o přiřazení vlastnosti ne-objektu</value>\r\n  </data>\r\n  <data name=\"method_called_on_non_object\" xml:space=\"preserve\">\r\n    <value>Volání členské funkce {0}() neobjektu</value>\r\n  </data>\r\n  <data name=\"clone_called_on_non_object\" xml:space=\"preserve\">\r\n    <value>Metoda __clone volána na ne-objektu</value>\r\n  </data>\r\n  <data name=\"default_object_created\" xml:space=\"preserve\">\r\n    <value>Vytvářím defaultní objekt z prázdné hodnoty</value>\r\n  </data>\r\n  <data name=\"undefined_method_called\" xml:space=\"preserve\">\r\n    <value>Volání nedefinované metody: {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"protected_method_called\" xml:space=\"preserve\">\r\n    <value>Volání protected metody {0}::{1}() z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"private_method_called\" xml:space=\"preserve\">\r\n    <value>Volání privátní metody {0}::{1}() z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"undefined_property_accessed\" xml:space=\"preserve\">\r\n    <value>Nedefinovaná vlastnost: {0}::${1}</value>\r\n  </data>\r\n  <data name=\"protected_property_accessed\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k protected vlastnosti {0}::${1}</value>\r\n  </data>\r\n  <data name=\"private_property_accessed\" xml:space=\"preserve\">\r\n    <value>Nelze přistupovat k privátní vlastnosti {0}::${1}</value>\r\n  </data>\r\n  <data name=\"undefined_property_when_access_overloaded\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k nedefinované vlastnosti objaktu s přetíženým přístupem k vlastnostem</value>\r\n  </data>\r\n  <data name=\"sleep_must_return_array\" xml:space=\"preserve\">\r\n    <value>__sleep by měla vracet pole názvů instančních proměnných k serializaci</value>\r\n  </data>\r\n  <data name=\"tostring_must_return_string\" xml:space=\"preserve\">\r\n    <value>Metoda {0}::__toString() musí vracet jedinou hodnotu</value>\r\n  </data>\r\n  <data name=\"clone_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Klonovací metoda {0}::__clone() nesmí být statická</value>\r\n  </data>\r\n  <data name=\"constructor_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Konstruktor {0}::{1}() nemůže být statický</value>\r\n  </data>\r\n  <data name=\"destructor_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Destruktor {0}::{1}() nemůže být statický</value>\r\n  </data>\r\n  <data name=\"invalid_class_name\" xml:space=\"preserve\">\r\n    <value>Název třídy musí být platný objekt nebo řetězec</value>\r\n  </data>\r\n  <data name=\"invalid_method_name\" xml:space=\"preserve\">\r\n    <value>Název metody musí být žetězec</value>\r\n  </data>\r\n  <data name=\"abstract_method_called\" xml:space=\"preserve\">\r\n    <value>Nemohu volat abstraktní metodu {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"interface_instantiated\" xml:space=\"preserve\">\r\n    <value>Nemohu vtyvořit instanci rozhraní '{0}'</value>\r\n  </data>\r\n  <data name=\"abstract_class_instantiated\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit instanci abstraktní třídy {0}</value>\r\n  </data>\r\n  <data name=\"class_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu znovudeklarovat třídu/rozhraní '{0}'</value>\r\n  </data>\r\n  <data name=\"class_not_found\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' nenalezena</value>\r\n  </data>\r\n  <data name=\"this_used_out_of_object\" xml:space=\"preserve\">\r\n    <value>Použití $this mimo kontext objektu</value>\r\n  </data>\r\n  <data name=\"unserialize_callback_failed\" xml:space=\"preserve\">\r\n    <value>Funkce {0}() nedefinovala třídu, pro kterou byla volána</value>\r\n  </data>\r\n  <data name=\"undefined_class_constant\" xml:space=\"preserve\">\r\n    <value>Nedefinovaná třídní konstanta '{0}'</value>\r\n  </data>\r\n  <data name=\"nonstatic_method_called_statically\" xml:space=\"preserve\">\r\n    <value>Nestatická metoda {0}::{1}() by neměla být volána staticky</value>\r\n  </data>\r\n  <data name=\"self_accessed_out_of_class\" xml:space=\"preserve\">\r\n    <value>Nelze přistoupit k self::, když není aktivní žádný rozsah třídy</value>\r\n  </data>\r\n  <data name=\"parent_accessed_out_of_class\" xml:space=\"preserve\">\r\n    <value>parent:: je nepřístupný, když žádný rozsah třídy není aktivní</value>\r\n  </data>\r\n  <data name=\"parent_accessed_in_parentless_class\" xml:space=\"preserve\">\r\n    <value>parent:: je nepřístupný, když rozsah třídy nemáv žádného rodiče</value>\r\n  </data>\r\n  <data name=\"undeclared_static_property_accessed\" xml:space=\"preserve\">\r\n    <value>Přístup k nedefinované statické vlastnosti: {0}::${1}</value>\r\n  </data>\r\n  <data name=\"static_property_unset\" xml:space=\"preserve\">\r\n    <value>Pokus odnastavit statickou vlastnost {0}::${1}</value>\r\n  </data>\r\n  <data name=\"cannot_reassign_this\" xml:space=\"preserve\">\r\n    <value>Nemohu znovupřiřadit $this</value>\r\n  </data>\r\n  <data name=\"incomparable_objects_compared\" xml:space=\"preserve\">\r\n    <value>Neporovnatelné objekty porovnány</value>\r\n  </data>\r\n  <data name=\"illegal_key_return_type\" xml:space=\"preserve\">\r\n    <value>Špatný typ vrácený z {0}::key()</value>\r\n  </data>\r\n  <data name=\"dotdot_not_allowed_in_path\" xml:space=\"preserve\">\r\n    <value>Žádné části '..' nejsou v cestě povoleny</value>\r\n  </data>\r\n  <data name=\"path_contains_invalid_characters\" xml:space=\"preserve\">\r\n    <value>Cesta obsahuje neplatné znaky</value>\r\n  </data>\r\n  <data name=\"constant_value_neither_scalar_nor_null\" xml:space=\"preserve\">\r\n    <value>Nemohu definovat hodnotu, která není ani skalární ani NULL jako konstantu</value>\r\n  </data>\r\n  <data name=\"constant_redefined\" xml:space=\"preserve\">\r\n    <value>Pokus o redefinici konstanty '{0}'</value>\r\n  </data>\r\n  <data name=\"undefined_variable\" xml:space=\"preserve\">\r\n    <value>Nedefinovaná proměnná '{0}'</value>\r\n  </data>\r\n  <data name=\"undefined_constant\" xml:space=\"preserve\">\r\n    <value>Nedefinovaná konstanta '{0}' - výchozí hodnota \"{0}\" použita namísto ní</value>\r\n  </data>\r\n  <data name=\"object_used_as_array\" xml:space=\"preserve\">\r\n    <value>Objekt typu '{0}' použit jako pole</value>\r\n  </data>\r\n  <data name=\"string_used_as_array\" xml:space=\"preserve\">\r\n    <value>Řetězec použit jako pole</value>\r\n  </data>\r\n  <data name=\"scalar_used_as_array\" xml:space=\"preserve\">\r\n    <value>Skalár typu '{0}' použit jako pole</value>\r\n  </data>\r\n  <data name=\"empty_used_as_array\" xml:space=\"preserve\">\r\n    <value>Prázdná proměnná použita jako pole</value>\r\n  </data>\r\n  <data name=\"array_used_as_object\" xml:space=\"preserve\">\r\n    <value>Pole použito jako objekt</value>\r\n  </data>\r\n  <data name=\"string_used_as_object\" xml:space=\"preserve\">\r\n    <value>Řetězec použitý jako objekt</value>\r\n  </data>\r\n  <data name=\"scalar_used_as_object\" xml:space=\"preserve\">\r\n    <value>Skalár typu '{0}' použit jako objekt</value>\r\n  </data>\r\n  <data name=\"empty_used_as_object\" xml:space=\"preserve\">\r\n    <value>Prázdná proměnná použita jako objekt</value>\r\n  </data>\r\n  <data name=\"string_item_used_as_reference\" xml:space=\"preserve\">\r\n    <value>Položka typu řetězec použita jako reference</value>\r\n  </data>\r\n  <data name=\"invalid_implicit_cast\" xml:space=\"preserve\">\r\n    <value>Nemohu konvertovat {0} na {1} implicitně při volání funkce {2}()</value>\r\n  </data>\r\n  <data name=\"array_to_string_conversion\" xml:space=\"preserve\">\r\n    <value>Konverze pole a řetězec</value>\r\n  </data>\r\n  <data name=\"function_not_supported\" xml:space=\"preserve\">\r\n    <value>Funkce není podporována</value>\r\n  </data>\r\n  <data name=\"undefined_function_called\" xml:space=\"preserve\">\r\n    <value>Volání nedefonované funkce: '{0}'</value>\r\n  </data>\r\n  <data name=\"undefined_external_function_called\" xml:space=\"preserve\">\r\n    <value>Volání nedefinované externí funkce '{0}', rozšíření '{1}' - zkontrolujte konfiguraci</value>\r\n  </data>\r\n  <data name=\"no_function_context\" xml:space=\"preserve\">\r\n    <value>Voláno z globálního rozsahu, žádný kontext funkce</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_to_function\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' nepředán funkci</value>\r\n  </data>\r\n  <data name=\"invalid_callback\" xml:space=\"preserve\">\r\n    <value>Neplatné zpětné volání</value>\r\n  </data>\r\n  <data name=\"invalid_function_name\" xml:space=\"preserve\">\r\n    <value>Název funkce musí být řetězec</value>\r\n  </data>\r\n  <data name=\"function_redeclared_rt\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat funkci '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument\" xml:space=\"preserve\">\r\n    <value>Neplatný argument '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_value\" xml:space=\"preserve\">\r\n    <value>Hodnota '{1}' je pro argument '{0}' neplatná</value>\r\n  </data>\r\n  <data name=\"invalid_argument_with_message\" xml:space=\"preserve\">\r\n    <value>Neplatný argument:</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count_for\" xml:space=\"preserve\">\r\n    <value>Špatný počet argumentů pro {0}()</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count\" xml:space=\"preserve\">\r\n    <value>Špatný počet argumentů</value>\r\n  </data>\r\n  <data name=\"invalid_argument_type\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' musí být typu '{1}'</value>\r\n  </data>\r\n  <data name=\"argument_null\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' by neměl být NULL</value>\r\n  </data>\r\n  <data name=\"reference_null\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' je předáván odkazem, pročež by neměl být NULL</value>\r\n  </data>\r\n  <data name=\"noncallable_callback\" xml:space=\"preserve\">\r\n    <value>Callback '{0}' specifikovaný v argumentu '{1}' není volatelný</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_byref\" xml:space=\"preserve\">\r\n    <value>Argument #{0} by měl být předáván odkazem</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_byref_to\" xml:space=\"preserve\">\r\n    <value>Argument #{0} gby měl do {1}() být předáván odkazem</value>\r\n  </data>\r\n  <data name=\"missing_argument\" xml:space=\"preserve\">\r\n    <value>Chybějící argument #{0}</value>\r\n  </data>\r\n  <data name=\"missing_argument_for\" xml:space=\"preserve\">\r\n    <value>Chybějící argument #{0} pro {1}()</value>\r\n  </data>\r\n  <data name=\"parameter_must_be_byref\" xml:space=\"preserve\">\r\n    <value>Parametr '{0}' musí být předán odkazem</value>\r\n  </data>\r\n  <data name=\"argument_value_not_supported\" xml:space=\"preserve\">\r\n    <value>Určená hodnota argumentu '{0}' není podporována</value>\r\n  </data>\r\n  <data name=\"operator[]_used_for_reading\" xml:space=\"preserve\">\r\n    <value>Není možno použít [] pro čtení</value>\r\n  </data>\r\n  <data name=\"integer_key_reached_max_value\" xml:space=\"preserve\">\r\n    <value>Nemohu přidat položku do pole - celočíselný klíč dosáhl své maximální hodnoty (2^31-1)</value>\r\n  </data>\r\n  <data name=\"illegal_offset_type\" xml:space=\"preserve\">\r\n    <value>Špatný typ offsetu</value>\r\n  </data>\r\n  <data name=\"undefined_offset\" xml:space=\"preserve\">\r\n    <value>Nedefinovaný offset ({0})</value>\r\n  </data>\r\n  <data name=\"illegal_string_offset\" xml:space=\"preserve\">\r\n    <value>Špatný offset v řetězci '{0}'</value>\r\n  </data>\r\n  <data name=\"uninitialized_string_offset\" xml:space=\"preserve\">\r\n    <value>Offset řetězce '{0}' nebyl inicializován</value>\r\n  </data>\r\n  <data name=\"unsupported_operand_types\" xml:space=\"preserve\">\r\n    <value>Nepodporované typy operandů</value>\r\n  </data>\r\n  <data name=\"unsupported_operand_type\" xml:space=\"preserve\">\r\n    <value>Nepodporovaný typ operandu</value>\r\n  </data>\r\n  <data name=\"cannot_unset_string_offsets\" xml:space=\"preserve\">\r\n    <value>Nemohu odnastavit offset v řetězci</value>\r\n  </data>\r\n  <data name=\"invalid_exception_object\" xml:space=\"preserve\">\r\n    <value>Výjimky musí být platné objekty zděděné od třídy Exception</value>\r\n  </data>\r\n  <data name=\"offsetGet_must_return_byref\" xml:space=\"preserve\">\r\n    <value>Metoda offsetGet() objektu použita bez operátoru [] následovaného inkrementací, dekrementací, přiřazením do reference, nebo dalšími operátory [], které musejí vracet referenci</value>\r\n  </data>\r\n  <data name=\"context_expected\" xml:space=\"preserve\">\r\n    <value>Poskytnutý zdroj není platným zdrojem v kontextu streamu</value>\r\n  </data>\r\n  <data name=\"wrapper_op_unsupported\" xml:space=\"preserve\">\r\n    <value>{0} operace není tímto stream wrapperem podporována</value>\r\n  </data>\r\n  <data name=\"stream_read_io_error\" xml:space=\"preserve\">\r\n    <value>Nastala V/V chyba při čtení ze streamu: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_io_error\" xml:space=\"preserve\">\r\n    <value>V/V chyba při zápisu do streamu: {0}</value>\r\n  </data>\r\n  <data name=\"stream_read_error\" xml:space=\"preserve\">\r\n    <value>Nastala chyba při čtení ze streamu: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_error\" xml:space=\"preserve\">\r\n    <value>Chyba při zápisu do streamu: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_failed\" xml:space=\"preserve\">\r\n    <value>Nemohu zapisovat do streamu (zapsáno jen {0} z {1} bytů)</value>\r\n  </data>\r\n  <data name=\"stream_read_off\" xml:space=\"preserve\">\r\n    <value>Tento stream nebyl otevřen pro čtení.</value>\r\n  </data>\r\n  <data name=\"stream_write_off\" xml:space=\"preserve\">\r\n    <value>Stream nebyl otevřen pro zápis.</value>\r\n  </data>\r\n  <data name=\"stream_bad_wrapper\" xml:space=\"preserve\">\r\n    <value>Nemuhu nalézt wrapper '{0}' - zapoměl jsi jej povolit při konfiguraci PHP?</value>\r\n  </data>\r\n  <data name=\"url_fopen_disabled\" xml:space=\"preserve\">\r\n    <value>Přístup k souborům pomocí URL je zakázán konfigurací serveru.</value>\r\n  </data>\r\n  <data name=\"stream_bad_filename\" xml:space=\"preserve\">\r\n    <value>Selhalo otevření streamu ({0}): Specifikovaný soubor neexistuje</value>\r\n  </data>\r\n  <data name=\"stream_bad_directory\" xml:space=\"preserve\">\r\n    <value>Selhalo otevření streamu ({0}): Specifikovaná složka neexistuje</value>\r\n  </data>\r\n  <data name=\"stream_open_read_unsupported\" xml:space=\"preserve\">\r\n    <value>Nemohu otevřít {0} pro čtení</value>\r\n  </data>\r\n  <data name=\"stream_open_write_unsupported\" xml:space=\"preserve\">\r\n    <value>Nemohu otevřít {0} pro zápis</value>\r\n  </data>\r\n  <data name=\"ambiguous_file_mode\" xml:space=\"preserve\">\r\n    <value>Nejednoznačný způsob přístupu k souboru (předpokládám binární). Specifikujte buďto '{0}b' nebo '{0}t'</value>\r\n  </data>\r\n  <data name=\"empty_file_mode\" xml:space=\"preserve\">\r\n    <value>Poskytnutý způsob přístupu k souboru je prázdný</value>\r\n  </data>\r\n  <data name=\"invalid_file_mode\" xml:space=\"preserve\">\r\n    <value>Poskytnutý způsob přístupu k souboru ({0}) je neplatný</value>\r\n  </data>\r\n  <data name=\"url_resource_missing\" xml:space=\"preserve\">\r\n    <value>Nebyl specifikován URL zdroje</value>\r\n  </data>\r\n  <data name=\"open_basedir_effect\" xml:space=\"preserve\">\r\n    <value>Omezení AllowedPathPrefixes v akci. Soubor ({0}) není mezi povolenými cestami: ({1})</value>\r\n  </data>\r\n  <data name=\"invalid_filter_name\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit filtr ({0})</value>\r\n  </data>\r\n  <data name=\"stream_filename_invalid\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k ({0}): Jméno souboru je neplatné</value>\r\n  </data>\r\n  <data name=\"stream_file_access_denied\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k ({0}): Přídtup odepřen</value>\r\n  </data>\r\n  <data name=\"stream_file_invalid\" xml:space=\"preserve\">\r\n    <value>Otevření streamu selhalo ({0}): Specifikované jméno souboru je neplatné</value>\r\n  </data>\r\n  <data name=\"stream_url_invalid\" xml:space=\"preserve\">\r\n    <value>Otevření streamu selhalo ({0}): Specifikovaný URL je neplatný</value>\r\n  </data>\r\n  <data name=\"stream_url_method_invalid\" xml:space=\"preserve\">\r\n    <value>Otevření streamu selhalo ({0}): Specifikovaná žádací metoda je neplatná</value>\r\n  </data>\r\n  <data name=\"stream_file_io_error\" xml:space=\"preserve\">\r\n    <value>Otevření streamu selhalo ({0}) z důvodů V/V chyby: {1}</value>\r\n  </data>\r\n  <data name=\"stream_file_not_exists\" xml:space=\"preserve\">\r\n    <value>Specifikovaný soibor neexistuje ({0})</value>\r\n  </data>\r\n  <data name=\"stream_directory_not_exists\" xml:space=\"preserve\">\r\n    <value>Specifikovaný adresář neexistuje ({0})</value>\r\n  </data>\r\n  <data name=\"stream_path_not_exists\" xml:space=\"preserve\">\r\n    <value>Specifikovaná cesta neexistuje ({0})</value>\r\n  </data>\r\n  <data name=\"stream_file_exists\" xml:space=\"preserve\">\r\n    <value>Specifikovaný soubor již existuje ({0})</value>\r\n  </data>\r\n  <data name=\"stream_stat_invalid_path\" xml:space=\"preserve\">\r\n    <value>Selhání stat ({0}) - neplatné jméno souboru</value>\r\n  </data>\r\n  <data name=\"stream_unlink_file_not_found\" xml:space=\"preserve\">\r\n    <value>Nemohu provést unlink souboru ({0}): Uvedené jméno souboru je neplatné</value>\r\n  </data>\r\n  <data name=\"stream_unlink_io_error\" xml:space=\"preserve\">\r\n    <value>Nemohu provést unlink souboru ({0}) z důvodu V/V chyby: {1}</value>\r\n  </data>\r\n  <data name=\"stream_unlink_error\" xml:space=\"preserve\">\r\n    <value>Nemohu provést unlink souboru ({0}): nepředpokládaná chyba</value>\r\n  </data>\r\n  <data name=\"stream_rmdir_io_error\" xml:space=\"preserve\">\r\n    <value>Nemohu odstranit složku ({0}): složka není prázdná</value>\r\n  </data>\r\n  <data name=\"stream_rename_file_exists\" xml:space=\"preserve\">\r\n    <value>Nelze přejmenovat '{0}' na '{1}': cílový soubor existuje</value>\r\n  </data>\r\n  <data name=\"stream_error\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat ke zdroji ({0}): neočekávaná chyba</value>\r\n  </data>\r\n  <data name=\"stream_socket_error\" xml:space=\"preserve\">\r\n    <value>Chyba soketu: {0}</value>\r\n  </data>\r\n  <data name=\"stream_directory_access_denied\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit složku ({0}): Přístup odepřen</value>\r\n  </data>\r\n  <data name=\"stream_directory_error\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit složku ({0}): Složka není prázdná nebo je jen ke čtení</value>\r\n  </data>\r\n  <data name=\"stream_directory_make_root\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit složku ({0}): Nemohu vytvořit kořenovou složku</value>\r\n  </data>\r\n  <data name=\"stream_directory_make_parent\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit složku ({0}): Použijte rekurzivní režim k vytvoření více než jedné složky najednou</value>\r\n  </data>\r\n  <data name=\"path_argument_empty\" xml:space=\"preserve\">\r\n    <value>Argument Path nemůže být prázdný</value>\r\n  </data>\r\n  <data name=\"stream_seek_filtered\" xml:space=\"preserve\">\r\n    <value>Posouvání ve streamu {0}! To může způsobit nepředpokládané výsledky.</value>\r\n  </data>\r\n  <data name=\"error_message_html_debug\" xml:space=\"preserve\">\r\n    <value>&lt;strong&gt;{0}&lt;/strong&gt;: {1} {2} in &lt;strong&gt;{3}&lt;/strong&gt; ve výrazu na řádce &lt;strong&gt;{4}&lt;/strong&gt;, sloupec &lt;strong&gt;{5}&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;</value>\r\n  </data>\r\n  <data name=\"error_message_plain_debug\" xml:space=\"preserve\">\r\n    <value>{0}:{1} {2} v {3} ve výrazu na řádce {4}, sloupec {5}.\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_html\" xml:space=\"preserve\">\r\n    <value>&lt;strong&gt;{0}&lt;/strong&gt;: {1} {2}.&lt;br/&gt;&lt;br/&gt;</value>\r\n  </data>\r\n  <data name=\"error_message_plain\" xml:space=\"preserve\">\r\n    <value>{0}:{1} {2}.\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_html_eval_debug\" xml:space=\"preserve\">\r\n    <value>v {0} (na řádce &lt;strong&gt;{1}&lt;/strong&gt;, sloupec &lt;strong&gt;{2}&lt;/strong&gt;)</value>\r\n  </data>\r\n  <data name=\"error_message_plain_eval_debug\" xml:space=\"preserve\">\r\n    <value>v {0} (na řádce {1}, sloupec {2})</value>\r\n  </data>\r\n  <data name=\"error_message_html_eval\" xml:space=\"preserve\">\r\n    <value>{0} v {0}</value>\r\n  </data>\r\n  <data name=\"error_message_plain_eval\" xml:space=\"preserve\">\r\n    <value>{0} v {0}</value>\r\n  </data>\r\n  <data name=\"extensions_not_installed\" xml:space=\"preserve\">\r\n    <value>Nativní PHP rozšíření nejsou instalována nebo správně nakonfigurována</value>\r\n  </data>\r\n  <data name=\"extensions_not_installed_in_invoke\" xml:space=\"preserve\">\r\n    <value>Volání nedefinované externí funkce '{0}', rozšíření '{1}' - nativní PHP rozšíření nejsou instalována nebo správně nakonfigurována</value>\r\n  </data>\r\n  <data name=\"buffering_level_decreased_under_zero\" xml:space=\"preserve\">\r\n    <value>Úroveň bufferování nemůže být snížena pod nulu</value>\r\n  </data>\r\n  <data name=\"output_buffering_disabled\" xml:space=\"preserve\">\r\n    <value>Bufferování výstupu je vypnuto.</value>\r\n  </data>\r\n  <data name=\"object_to_string_conversion\" xml:space=\"preserve\">\r\n    <value>Konverze objektu třídy {0} na řetězec</value>\r\n  </data>\r\n  <data name=\"invalid_foreach_argument\" xml:space=\"preserve\">\r\n    <value>Neplatný argument pro příkaz foreach</value>\r\n  </data>\r\n  <data name=\"incomparable_arrays_compared\" xml:space=\"preserve\">\r\n    <value>Neporovnatelná pole porovnána.</value>\r\n  </data>\r\n  <data name=\"lengths_are_different\" xml:space=\"preserve\">\r\n    <value>Počet položek v {0} by měl být stejný jako v {1}</value>\r\n  </data>\r\n  <data name=\"assertion_failed\" xml:space=\"preserve\">\r\n    <value>Přiřazení '{0}' selhalo</value>\r\n  </data>\r\n  <data name=\"invalid_break_level_count\" xml:space=\"preserve\">\r\n    <value>Nemohu provést brek/continue přes {0} úrovní</value>\r\n  </data>\r\n  <data name=\"could_not_load_extension\" xml:space=\"preserve\">\r\n    <value>Nemohu načíst rozšíření:</value>\r\n  </data>\r\n  <data name=\"unable_to_find_extension\" xml:space=\"preserve\">\r\n    <value>Nemohu najít rozšíření '{0}'</value>\r\n  </data>\r\n  <data name=\"web_server_not_available\" xml:space=\"preserve\">\r\n    <value>Kontext webového serveru není dostupný.</value>\r\n  </data>\r\n  <data name=\"script_inclusion_failed\" xml:space=\"preserve\">\r\n    <value>Inkluze skriptu '{0}' Selhala. Důvod: {1} Vyhledávací cesty: include_path je '{2}', working pracovní adresář '{3}' </value>\r\n  </data>\r\n  <data name=\"assembly_script_inclusion_failed\" xml:space=\"preserve\">\r\n    <value>Inkluzev '{0}' skriptu selhala. Typ skriptu '{1}' nebyl nalezen v sestavení aplikace</value>\r\n  </data>\r\n  <data name=\"function_needs_variables\" xml:space=\"preserve\">\r\n    <value>Funkce potřebuje tabulku zděděných proměnných</value>\r\n  </data>\r\n  <data name=\"execution_timed_out\" xml:space=\"preserve\">\r\n    <value>Maximální čas vykonávání {0} sekund překročen</value>\r\n  </data>\r\n  <data name=\"generating_assembly\" xml:space=\"preserve\">\r\n    <value>Generuji sestavení ...</value>\r\n  </data>\r\n  <data name=\"info_directive\" xml:space=\"preserve\">\r\n    <value>Direktiva</value>\r\n  </data>\r\n  <data name=\"info_script_dependent\" xml:space=\"preserve\">\r\n    <value>Skript závislý</value>\r\n  </data>\r\n  <data name=\"info_shared\" xml:space=\"preserve\">\r\n    <value>Sdílený</value>\r\n  </data>\r\n  <data name=\"info_script_value\" xml:space=\"preserve\">\r\n    <value>Hodnota skriptu</value>\r\n  </data>\r\n  <data name=\"info_master_value\" xml:space=\"preserve\">\r\n    <value>Master hodnota</value>\r\n  </data>\r\n  <data name=\"info_value\" xml:space=\"preserve\">\r\n    <value>Hodnota</value>\r\n  </data>\r\n  <data name=\"info_variable\" xml:space=\"preserve\">\r\n    <value>Proměnná</value>\r\n  </data>\r\n  <data name=\"info_config\" xml:space=\"preserve\">\r\n    <value>Konfigurace</value>\r\n  </data>\r\n  <data name=\"info_credits\" xml:space=\"preserve\">\r\n    <value>Zásluhy</value>\r\n  </data>\r\n  <data name=\"info_loaded_extensions\" xml:space=\"preserve\">\r\n    <value>Načtená nativní rozšíření</value>\r\n  </data>\r\n  <data name=\"info_environment_variables\" xml:space=\"preserve\">\r\n    <value>Prostředí</value>\r\n  </data>\r\n  <data name=\"info_global_variables\" xml:space=\"preserve\">\r\n    <value>Globální proměnné</value>\r\n  </data>\r\n  <data name=\"info_license\" xml:space=\"preserve\">\r\n    <value>Licence</value>\r\n  </data>\r\n  <data name=\"info_license_text\" xml:space=\"preserve\">\r\n    <value>\r\n    &lt;p style='text-align:justify'&gt;\r\n      Tento program může být používán a distribuován jen podle podmínek licence Phalager, která se nachází v distribuovaném souboru License.txt a je též k sipozici na\r\n      &lt;a href=\"http://www.php-compiler.net/License.txt\"&gt;http://www.php-compiler.net/License.txt&lt;/a&gt;.\r\n    &lt;/p&gt;\r\n    &lt;p style='text-aling:justify'&gt;\r\n      TENTO SOFTWARE JE AUTORY POSKYTOVÁN TAK, JAK JE BEZ JAKÝCHKOLI VÝSLOVNÝCH ČI PŘEDPOKLÁDANÝCH ZÁRUK VČETNĚ, ALE NIKOLI VÝHRADNĚ, PŘEDPOKLÁDANÝCH ZÁRUK VZTAHUJÍCÍCH SE K OBCHODOVATELNOSTI A VHODNOSTI PRO URČITÝ ÚČEL.\r\n    &lt;/p&gt;\r\n    &lt;p align='justify'&gt;\r\n      AUTOŘI NENESOU V ŽÁDNÉM PŘÍPADĚ ODPOVĚDNOST ZA JAKÉKOLI PŘÍMÉ, NEPŘÍMÉ, NÁHODNÉ, ZVLÁŠTNÍ, TĚŽKÉ ANI NÁSLEDNÉ ŠKODY (VČETNĚ, ALE NIKOLI VÝHRADNĚ, OBSTARÁNÍ NÁHRADNÍHO ZBOŽÍ NEBO SLUŽEB, ZTRÁTY MOŽNOSTI POUŽÍVÁNÍ, DAT NEBO ZISKŮ, ČI PŘERUŠENÍ OBCHODNÍ ČINNOSTI) JAKKOLI ZPŮSOBENÝCH A VZNIKLÝCH PŘI POUŽÍVÁNÍ TOHOTO SOFTWARU NA ZÁKLADĚ JAKÉKOLI TEORETICKÉ ODPOVĚDNOSTI, AŤ SE JEDNÁ O SMLUVNÍ, ABSOLUTNÍ NEBO TRESTNĚPRÁVNÍ ODPOVĚDNOST (VČETNĚ NEDBALOSTNÍ ČI JINÉ), I PŘES UPOZORNĚNÍ NA MOŽNOST TAKOVÉ ŠKODY.\r\n    &lt;/p&gt;\r\n    </value>\r\n  </data>\r\n  <data name=\"credits_overall_concept\" xml:space=\"preserve\">\r\n    <value>Základní koncept</value>\r\n  </data>\r\n  <data name=\"credits_specific_features_compilation\" xml:space=\"preserve\">\r\n    <value>Kompilace specifických vlastností jazyka PHP</value>\r\n  </data>\r\n  <data name=\"credits_oo_features_compilation\" xml:space=\"preserve\">\r\n    <value>Kompilace objektově orientovaných vlastností jazyka PHP</value>\r\n  </data>\r\n  <data name=\"credits_overall_compiler_design\" xml:space=\"preserve\">\r\n    <value>Základní návrh kompilátoru</value>\r\n  </data>\r\n  <data name=\"credits_code_analysis\" xml:space=\"preserve\">\r\n    <value>Analýza kódu</value>\r\n  </data>\r\n  <data name=\"credits_extmgr_wrappers\" xml:space=\"preserve\">\r\n    <value>Správa rozšíření a wrappery</value>\r\n  </data>\r\n  <data name=\"credits_ast\" xml:space=\"preserve\">\r\n    <value>Abstraktní syntaktický strom</value>\r\n  </data>\r\n  <data name=\"credits_compiler_tables\" xml:space=\"preserve\">\r\n    <value>Tabulky kompilátoru</value>\r\n  </data>\r\n  <data name=\"credits_code_generator\" xml:space=\"preserve\">\r\n    <value>Generátor kódu</value>\r\n  </data>\r\n  <data name=\"credits_configuration\" xml:space=\"preserve\">\r\n    <value>Konfigurace</value>\r\n  </data>\r\n  <data name=\"credits_aspnet\" xml:space=\"preserve\">\r\n    <value>Kooperace s ASP.NET</value>\r\n  </data>\r\n  <data name=\"credits_automatic_tests\" xml:space=\"preserve\">\r\n    <value>Automatické testy</value>\r\n  </data>\r\n  <data name=\"credits_interactive_tests\" xml:space=\"preserve\">\r\n    <value>Interaktivní testy</value>\r\n  </data>\r\n  <data name=\"credits_documentation\" xml:space=\"preserve\">\r\n    <value>Dokumantace</value>\r\n  </data>\r\n  <data name=\"credits_core_functionality\" xml:space=\"preserve\">\r\n    <value>Funkcionalita jádra</value>\r\n  </data>\r\n  <data name=\"credits_lexical_syntactic_analisis\" xml:space=\"preserve\">\r\n    <value>Lexikální a syntaktická analýza</value>\r\n  </data>\r\n  <data name=\"credits_semantic_analisis\" xml:space=\"preserve\">\r\n    <value>Sémantická analýza</value>\r\n  </data>\r\n  <data name=\"credits_code_generation\" xml:space=\"preserve\">\r\n    <value>Generování kódu</value>\r\n  </data>\r\n  <data name=\"credits_extensions_management\" xml:space=\"preserve\">\r\n    <value>Správa rozšíření</value>\r\n  </data>\r\n  <data name=\"credits_vsnet\" xml:space=\"preserve\">\r\n    <value>Intergrace pro Visual Studio</value>\r\n  </data>\r\n  <data name=\"credits_streams\" xml:space=\"preserve\">\r\n    <value>Streamy, V/V wrappery, a filtry</value>\r\n  </data>\r\n  <data name=\"credits_automatic_tester\" xml:space=\"preserve\">\r\n    <value>Automatický tester</value>\r\n  </data>\r\n  <data name=\"credits_utilities\" xml:space=\"preserve\">\r\n    <value>Utility</value>\r\n  </data>\r\n  <data name=\"credits_installation\" xml:space=\"preserve\">\r\n    <value>Instalace</value>\r\n  </data>\r\n  <data name=\"credits_implementation\" xml:space=\"preserve\">\r\n    <value>Implementace</value>\r\n  </data>\r\n  <data name=\"credits_design\" xml:space=\"preserve\">\r\n    <value>Design</value>\r\n  </data>\r\n  <data name=\"credits_authors\" xml:space=\"preserve\">\r\n    <value>Autoři</value>\r\n  </data>\r\n  <data name=\"credits_contribution\" xml:space=\"preserve\">\r\n    <value>Spolupráce</value>\r\n  </data>\r\n  <data name=\"property_declared_abstract\" xml:space=\"preserve\">\r\n    <value>Vlastnosti nemohou být deklarovány jako abstraktní</value>\r\n  </data>\r\n  <data name=\"property_declared_final\" xml:space=\"preserve\">\r\n    <value>Vlastnosti nemohou být deklarovány jako finální</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared_warning\" xml:space=\"preserve\">\r\n    <value>{0} {1} deklarováno podmíněnně, ale zde je nepodmíněná deklarace {2}{3}</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared_warning_include\" xml:space=\"preserve\">\r\n    <value>{0} '{1}' v {2}{3} deklarováno podmíněně, ale zde je nepodmíněná deklarace {4}{5}</value>\r\n  </data>\r\n  <data name=\"redeclared_previous_decl\" xml:space=\"preserve\">\r\n    <value>Nemohu bpředeklarovat {0} '{1}', dříve deklarováno v{2}{3}</value>\r\n  </data>\r\n  <data name=\"redeclared_previous_decl_include\" xml:space=\"preserve\">\r\n    <value>Inkluze '{2}{3}' předeklarovává {0} '{1}' dříve deklarované v {4}{5}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_runtime\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat třídu/rozhraní {0}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_runtime_include\" xml:space=\"preserve\">\r\n    <value>Inkluze redeklarovává třídu/rozhraní {0} v {1}{2}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_system\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat systémovou třídu/rozhraní {0}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_system_include\" xml:space=\"preserve\">\r\n    <value>Inkluze předeklarovává systémovou třídu/rozhraní {0} v {1}{2}</value>\r\n  </data>\r\n  <data name=\"method_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat metodu {0}::{1} dříve deklarovanou na {2}</value>\r\n  </data>\r\n  <data name=\"field_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovařt vlastnost {0}::${1} dříve deklarovanou na {2}</value>\r\n  </data>\r\n  <data name=\"constant_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat konstantu {0}::{1} dřiva deklarovanou na {2}</value>\r\n  </data>\r\n  <data name=\"class_name_reserved\" xml:space=\"preserve\">\r\n    <value>Nemohu použít {0} jako jméno třídy, protože toto jméno je rezervováno</value>\r\n  </data>\r\n  <data name=\"non_interface_implemented\" xml:space=\"preserve\">\r\n    <value>{0} nemůže implementovat {1} - není to rozhraní (deklarováno v {2}{3})</value>\r\n  </data>\r\n  <data name=\"final_class_extended\" xml:space=\"preserve\">\r\n    <value>Třída {0} nemůže dědit od finální třídy ({1} deklarované v {2}{3})</value>\r\n  </data>\r\n  <data name=\"abstract_final_method_declared\" xml:space=\"preserve\">\r\n    <value>Abstraktní metoda nemůže být deklerována final</value>\r\n  </data>\r\n  <data name=\"abstract_private_method_declared\" xml:space=\"preserve\">\r\n    <value>Abstraktní metoda nemůže být deklarována jako privátní</value>\r\n  </data>\r\n  <data name=\"clone_cannot_take_arguments\" xml:space=\"preserve\">\r\n    <value>Klonovací metoda {0}::__clone() musí být bez argumentů</value>\r\n  </data>\r\n  <data name=\"destruct_cannot_take_arguments\" xml:space=\"preserve\">\r\n    <value>Destruktor {0}::__destruct() nemůže mít argumenty</value>\r\n  </data>\r\n  <data name=\"destruct_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Destruktor {0}::__destruct() nemůže být statický</value>\r\n  </data>\r\n  <data name=\"construct_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Konstruktor {0}::{1}() nemůže být statický</value>\r\n  </data>\r\n  <data name=\"interface_method_non_public\" xml:space=\"preserve\">\r\n    <value>Viditelnost metody rozhraní {0}::{1}() musí být vynechána nebo deklarována jako veřejná</value>\r\n  </data>\r\n  <data name=\"class_implements_class\" xml:space=\"preserve\">\r\n    <value>{0} nemůže implementovat {1} - protože to není rozhraní (deklarováno v {2}{3})</value>\r\n  </data>\r\n  <data name=\"override_final_method\" xml:space=\"preserve\">\r\n    <value>není možno předefinovat finální metodu {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"make_static_method_non-static\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit statickou metodu {0}::{1}() nestatickou ve třídě {2}</value>\r\n  </data>\r\n  <data name=\"make_non-static_method_static\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit nestatickou metodu {0}::{1}() statickou ve třídě {2}</value>\r\n  </data>\r\n  <data name=\"non-abstract_method_overridden_with_abstract\" xml:space=\"preserve\">\r\n    <value>Nemohu udělat neabstraktní metodu {0}::{1}() abstraktní ve třídě {2}</value>\r\n  </data>\r\n  <data name=\"overriding_method_restrict_visibility\" xml:space=\"preserve\">\r\n    <value>Viditelnost {0}::{1}() musí být nanejvýše '{2}' (jako ve třídě {3})</value>\r\n  </data>\r\n  <data name=\"make_static_field_non-static\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat statické {0}::${1} jako nestatické {2}::${1} statické deklarováno v {3})</value>\r\n  </data>\r\n  <data name=\"make_non-static_field_static\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat nestatické {0}::${1} na statické {2}::${1} (nestatické deklarováno v {3})</value>\r\n  </data>\r\n  <data name=\"overriding_field_restrict_visibility\" xml:space=\"preserve\">\r\n    <value>Viditelnost {0}::${1} musí být {2} (jako ve třídě {3} deklarované v {4}) [nebo větší]</value>\r\n  </data>\r\n  <data name=\"overriding_static_field_with_static\" xml:space=\"preserve\">\r\n    <value>Není možno redeklarovat statickou vlastnost {3} {0}::${1} ve třídě {2} (dříve deklarovanou v {4})</value>\r\n  </data>\r\n  <data name=\"overriding_interface_constant\" xml:space=\"preserve\">\r\n    <value>Není možno předefinovat konstantu {0} definovanou v rozhraní {1}</value>\r\n  </data>\r\n  <data name=\"inheriting_previously_inherited_constant\" xml:space=\"preserve\">\r\n    <value>Nemohu zdědit konstantu {0}::{1} dřícve deklarovanou v rozhraní {2}</value>\r\n  </data>\r\n  <data name=\"redeclaring_inherited_constant\" xml:space=\"preserve\">\r\n    <value>Nemohu deklarovat zděděnou konstantu {0} z rozhraní {1} ve třídě/rozhraní {2}</value>\r\n  </data>\r\n  <data name=\"redeclaring_abstract_method\" xml:space=\"preserve\">\r\n    <value>Nemohu zdědit abstraktní metodu {0}::{1}() dříve deklarovanou jako abstraktní v {2}</value>\r\n  </data>\r\n  <data name=\"overriding_protected_static_with_init_value\" xml:space=\"preserve\">\r\n    <value>Není možno změnit výchozí hodnotu statické pčrotected vlastnosti {0}::${1} ve třídě {2} (dříve deklarované v {3})</value>\r\n  </data>\r\n  <data name=\"class_redeclared_in_assembly\" xml:space=\"preserve\">\r\n    <value>Třída nebo rozhraní '{0}' je předeklarováváno v rozsahu setavení</value>\r\n  </data>\r\n  <data name=\"method_not_compatible\" xml:space=\"preserve\">\r\n    <value>Deklarace metody {0}::{1}() musí být kompatibilní s deklarací abstraktní metody {2}::{1}()</value>\r\n  </data>\r\n  <data name=\"abstract_method_not_implemented\" xml:space=\"preserve\">\r\n    <value>Třída {0} neimplementuje abstraktní metodu {1}::{2}()</value>\r\n  </data>\r\n  <data name=\"extension_loading_error\" xml:space=\"preserve\">\r\n    <value>Chyba při načítání knihovny (rozšíření) tříd: </value>\r\n  </data>\r\n  <data name=\"library_func_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemožno předeklarovat knihovní funkci '{0}'</value>\r\n  </data>\r\n  <data name=\"nonabstract_bodyless_method\" xml:space=\"preserve\">\r\n    <value>Neabstraktní metoda {0}::{1}() musí mít tělo</value>\r\n  </data>\r\n  <data name=\"abstract_bodyful_method\" xml:space=\"preserve\">\r\n    <value>Abstraktní metoda {0}::{1}() nesmí mít tělo</value>\r\n  </data>\r\n  <data name=\"interface_bodyful_method\" xml:space=\"preserve\">\r\n    <value>Metoda rozhraní {0}::{1}() nesmí mít tělo</value>\r\n  </data>\r\n  <data name=\"abstract_method_name_not_matching_implementation\" xml:space=\"preserve\">\r\n    <value>Jména abstraktní metody {0}::{1}() a její implementace {2}::{3}() musí být stejná (case-sensitive) v této verzi Phalangeru</value>\r\n  </data>\r\n  <data name=\"parameter_specified_twice\" xml:space=\"preserve\">\r\n    <value>Parametr '{0}' je f deklaraci funkce/metody specifikován 2×</value>\r\n  </data>\r\n  <data name=\"construct_not_supported\" xml:space=\"preserve\">\r\n    <value>Konstrukt {0} není zatím podporován</value>\r\n  </data>\r\n  <data name=\"key_alias\" xml:space=\"preserve\">\r\n    <value>Položka klíče nemůže být reference.</value>\r\n  </data>\r\n  <data name=\"multiple_visibility_modifiers\" xml:space=\"preserve\">\r\n    <value>Vícenásobné modifikátory viditelnosti nejsou povoleny</value>\r\n  </data>\r\n  <data name=\"act_param_with_ampersand\" xml:space=\"preserve\">\r\n    <value>Modifikátor '&amp;' ignorován při volání funkce ,použijte modifikátor '&amp;' v deklaraci funkce k předávání parametrů odkazem</value>\r\n  </data>\r\n  <data name=\"semicolon_ignored\" xml:space=\"preserve\">\r\n    <value>Středník ignorován, použití tohoto kontextu je možné v PHP 5, ale zastaralé v PHP.NET</value>\r\n  </data>\r\n  <data name=\"unexpected_char\" xml:space=\"preserve\">\r\n    <value>Neočekávaný vstupní znak: '{0}' (ASCII={1}) stav={2}</value>\r\n  </data>\r\n  <data name=\"unterminated_comment\" xml:space=\"preserve\">\r\n    <value>Neukončený komentář začínající na řádku {0}</value>\r\n  </data>\r\n  <data name=\"hex_number_too_big\" xml:space=\"preserve\">\r\n    <value>Hexačíslo {0} je příliš velké, namísto něj bude použit maximální integer</value>\r\n  </data>\r\n  <data name=\"too_big_int_conversion\" xml:space=\"preserve\">\r\n    <value>Celé číslo {0} je příliš velké, převedeno na desetinné číslo s dvojitou přesností</value>\r\n  </data>\r\n  <data name=\"php_track_vars_not_supported\" xml:space=\"preserve\">\r\n    <value>&lt;?php_track_vars?&gt; není podporováno</value>\r\n  </data>\r\n  <data name=\"check_varuse_fault\" xml:space=\"preserve\">\r\n    <value>Návratová hodnota funkce/metody namůže být použita v kontextu zápisu</value>\r\n  </data>\r\n  <data name=\"field_in_interface\" xml:space=\"preserve\">\r\n    <value>Rozhraní nemohou mít vlastnosti</value>\r\n  </data>\r\n  <data name=\"nonvar_passed_by_ref\" xml:space=\"preserve\">\r\n    <value>Jen proměnné mohou být předávány odkazem</value>\r\n  </data>\r\n  <data name=\"assign_to_autoglobal\" xml:space=\"preserve\">\r\n    <value>Autoglobal {0} nemůže být přiřazeno do</value>\r\n  </data>\r\n  <data name=\"method_body_in_interface\" xml:space=\"preserve\">\r\n    <value>Metoda deklarovaná v rozhraní nesmí mít tělo</value>\r\n  </data>\r\n  <data name=\"empty_index_in_read_context\" xml:space=\"preserve\">\r\n    <value>Není nmožno použít [] pro čtení</value>\r\n  </data>\r\n  <data name=\"self_out_of_method\" xml:space=\"preserve\">\r\n    <value>'self' použito mimo metodu</value>\r\n  </data>\r\n  <data name=\"parent_out_of_method\" xml:space=\"preserve\">\r\n    <value>'parent' použit mimo metodu</value>\r\n  </data>\r\n  <data name=\"no_parent\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' nemá rodiče</value>\r\n  </data>\r\n  <data name=\"array_in_cls_const\" xml:space=\"preserve\">\r\n    <value>Pole nejsou povolena jako třídní konstanty</value>\r\n  </data>\r\n  <data name=\"formal_param_redeclaration\" xml:space=\"preserve\">\r\n    <value>Funkce již má parametr {0}</value>\r\n  </data>\r\n  <data name=\"unknown_class_in_eval\" xml:space=\"preserve\">\r\n    <value>Nadřazená třída nebo rozhraní třídy '{0}' není na tomto místě známo</value>\r\n  </data>\r\n  <data name=\"wrong_break_or_continue_param\" xml:space=\"preserve\">\r\n    <value>Nemohu provést break/continue přes {0} úrovní</value>\r\n  </data>\r\n  <data name=\"unknown_st_mtd\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' neobsahuje definici metody '{1}'</value>\r\n  </data>\r\n  <data name=\"too_much_st_mtd_params\" xml:space=\"preserve\">\r\n    <value>Metoda {0} staticky volána s {1} parametry ale deklarována s {2} parametry</value>\r\n  </data>\r\n  <data name=\"too_few_st_mtd_params\" xml:space=\"preserve\">\r\n    <value>Metoda {0} staticky volána s {1} parametry ale deklarována s {2} povinnými parametry</value>\r\n  </data>\r\n  <data name=\"too_much_ctor_params\" xml:space=\"preserve\">\r\n    <value>Konstruktor třídy '{0}' volán s {1} parametry ale deklarován s {2} parametry</value>\r\n  </data>\r\n  <data name=\"too_few_ctor_params\" xml:space=\"preserve\">\r\n    <value>Konstruktor třídy '{0}' volán s {1} parametry ale deklarován s {2} povinnými paramtery</value>\r\n  </data>\r\n  <data name=\"too_much_usr_fcn_params\" xml:space=\"preserve\">\r\n    <value>Uživatelská funkce '{0}' volaná s {1} parametry ale deklarovaná s {2} parametry</value>\r\n  </data>\r\n  <data name=\"too_few_usr_fcn_params\" xml:space=\"preserve\">\r\n    <value>Uživatelská funkce '{0}' volána s {1} parametry ale deklarováhna s {2} povinnými parametry</value>\r\n  </data>\r\n  <data name=\"too_many_local_variables\" xml:space=\"preserve\">\r\n    <value>Uživatelská funkce nebo metoda '{0}' deklaruje příliš mnoho lokálních proměnných ({1}), což může vést k neoptimálbnímu výkonu</value>\r\n  </data>\r\n  <data name=\"bad_system_fcn_params_count\" xml:space=\"preserve\">\r\n    <value>Knihovní funkce '{0}' volaná se špatným počtem argumentů</value>\r\n  </data>\r\n  <data name=\"more_switch_cases_with_same_value\" xml:space=\"preserve\">\r\n    <value>Návěští  'case' s hodnotou {0} již bylo deklarováno</value>\r\n  </data>\r\n  <data name=\"more_then_one_default_in_switch\" xml:space=\"preserve\">\r\n    <value>'switch' již obsahuje sekci 'default'</value>\r\n  </data>\r\n  <data name=\"unknown_class_used\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' je na tomto místě v době kompilace neznámá</value>\r\n  </data>\r\n  <data name=\"unknown_fcn_used\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' je na tomto místě v době kompilace neznámá</value>\r\n  </data>\r\n  <data name=\"unknown_base_cls_or_interface\" xml:space=\"preserve\">\r\n    <value>Nadřazená třída nebo rozhraní třídy '{0}' není v době kompilace na tomto místě známo, kompilace odložena na dobu běhu</value>\r\n  </data>\r\n  <data name=\"unreachable_code\" xml:space=\"preserve\">\r\n    <value>Detekován nedosažitelný kód</value>\r\n  </data>\r\n  <data name=\"no_ctor_defined\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' nemá žádný definovaný konstruktor</value>\r\n  </data>\r\n  <data name=\"inclusion_deferred_to_runtime\" xml:space=\"preserve\">\r\n    <value>Inkluze souboru '{0}' odložena na dobu běhu protože: {1}</value>\r\n  </data>\r\n  <data name=\"inclusion_replacement_failed\" xml:space=\"preserve\">\r\n    <value>Žádný model inkluze neodpovídá výrazu '{0}'</value>\r\n  </data>\r\n  <data name=\"cyclic_inclusion\" xml:space=\"preserve\">\r\n    <value>Cyklická inkluze mezi soubory '{0}' a '{1}' detekována, inkluze souboru '{0}' odložena na dobu běhu</value>\r\n  </data>\r\n  <data name=\"static_in_global_code\" xml:space=\"preserve\">\r\n    <value>Konstrukt 'static' použit v globálním kódu</value>\r\n  </data>\r\n  <data name=\"mandatory_behind_optional_param\" xml:space=\"preserve\">\r\n    <value>Povinný parametr '{0}' deklarovaný za volitelným parametrem</value>\r\n  </data>\r\n  <data name=\"abstract_class_or_interface_instantiated\" xml:space=\"preserve\">\r\n    <value>Instanciace abstraktní třídy nebo rozhraní '{0}'</value>\r\n  </data>\r\n  <data name=\"this_out_of_method\" xml:space=\"preserve\">\r\n    <value>Proměnné $this použita mimo metodu</value>\r\n  </data>\r\n  <data name=\"this_in_write_context\" xml:space=\"preserve\">\r\n    <value>Proměnná $this použita v kontextu zápisu</value>\r\n  </data>\r\n  <data name=\"begin_compile\" xml:space=\"preserve\">\r\n    <value>Kompiluji {0} ...</value>\r\n  </data>\r\n  <data name=\"end_compile\" xml:space=\"preserve\">\r\n    <value>{0} úspěšně zkompilováno</value>\r\n  </data>\r\n  <data name=\"skip_compile\" xml:space=\"preserve\">\r\n    <value>Kompilace {0} přeskočena, soubor je již kompilován</value>\r\n  </data>\r\n  <data name=\"invalid_resource_visibility\" xml:space=\"preserve\">\r\n    <value>Neplatná viditelnost zdroje. Muí být private nebo public</value>\r\n  </data>\r\n  <data name=\"phpc_arg_resource\" xml:space=\"preserve\">\r\n    <value>Soubor nebo složka, který/á bude vložen do výsledného sestavení jako spravovaný zdroj (složka bude vložena tak, že bude vložen rekurzivně celý její obsah). Může být použito vícekrát. Volitelně může obsahovat specifikaci jména zdroje a jeho viditelnosti - jen pro soubory. Výchozí jméno je jméno souboru a viditelnost veřejná.</value>\r\n  </data>\r\n  <data name=\"configuration_record_read_only\" xml:space=\"preserve\">\r\n    <value>Nastavení je jen pro čtení.</value>\r\n  </data>\r\n  <data name=\"invalid_icon_format\" xml:space=\"preserve\">\r\n    <value>Ikona má neplatný formát.</value>\r\n  </data>\r\n  <data name=\"library_load_failed\" xml:space=\"preserve\">\r\n    <value>Knihovna '{0}' nemůže být načtena; {1}</value>\r\n  </data>\r\n  <data name=\"extension_already_loaded\" xml:space=\"preserve\">\r\n    <value>Rozšíření '{0}' (soubor '{1}') již bylo načteno.</value>\r\n  </data>\r\n  <data name=\"extmanager_path_not_configured\" xml:space=\"preserve\">\r\n    <value>Alespoň jedno z rozčíření je konfigurováno pro běh v izolovaném režimu, ale cesta k ExtManageru není nastavena.</value>\r\n  </data>\r\n  <data name=\"no_suitable_method_overload\" xml:space=\"preserve\">\r\n    <value>Žádné dostupné přetížení metody '{0}:::{1}' není kompatibilní s danými argumenty</value>\r\n  </data>\r\n  <data name=\"no_suitable_function_overload\" xml:space=\"preserve\">\r\n    <value>Žádné dostupné přetížení funkce '{1}' není kompatibilní s danými argumenty</value>\r\n  </data>\r\n  <data name=\"property_type_mismatch\" xml:space=\"preserve\">\r\n    <value>Nemohu přiřadit danou hodnotu do '{0}:::{1}'. Neexistuje žádná vhodná konverze.</value>\r\n  </data>\r\n  <data name=\"invalid_dynamic_wrapper_format\" xml:space=\"preserve\">\r\n    <value>Neplatný formát dynamického wrapperu '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_class_library\" xml:space=\"preserve\">\r\n    <value>Knihovna '{0}' není platnou knihovnou tříd Phalanger.</value>\r\n  </data>\r\n  <data name=\"invalid_class_library_wrapper\" xml:space=\"preserve\">\r\n    <value>Dynamický wrapper knihovny, soubor '{0}', je neplatný. Smažte soubory wrapperu, aby mohl být znovu automaticky vytvořen během příštího požadavku.</value>\r\n  </data>\r\n  <data name=\"argless_stub_not_found\" xml:space=\"preserve\">\r\n    <value>Bezparametrový stub metody '{0}' nebyl nalezen.</value>\r\n  </data>\r\n  <data name=\"field_implementor_not_found\" xml:space=\"preserve\">\r\n    <value>Odkazovaná proměnná '{0}' má neznámou implementaci. Nesprávné použití PhpPublicFieldAttribute.</value>\r\n  </data>\r\n  <data name=\"not_all_methods_reflected\" xml:space=\"preserve\">\r\n    <value>Ne všechny vyplněné metody byly odkázány.</value>\r\n  </data>\r\n  <data name=\"not_all_fields_reflected\" xml:space=\"preserve\">\r\n    <value>Ne všechny vyplněné proměnné byly odkázány.</value>\r\n  </data>\r\n  <data name=\"not_all_constants_reflected\" xml:space=\"preserve\">\r\n    <value>Ne všechny vyplněné konstanty byly odkázány.</value>\r\n  </data>\r\n  <data name=\"precompiled_assembly_corrupted\" xml:space=\"preserve\">\r\n    <value>Předkompilované sestavní '{0}' je poškozeno (není možno rozlišit token typu 0x{1:X8}).</value>\r\n  </data>\r\n  <data name=\"precompiled_assembly_no_source_watching\" xml:space=\"preserve\">\r\n    <value>Předkompilované sestavení '{0}' nebylo zkomilováno s podporou sledování zdrojového kódu.</value>\r\n  </data>\r\n  <data name=\"overload_has_different_impl_options\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Toto přetížení metody '{2}' má odlišné volby implementace než ostatní přetížení.</value>\r\n  </data>\r\n  <data name=\"overload_has_lesser_param_count\" xml:space=\"preserve\">\r\n    <value>{0}.{1}. Přetížení má menší počet povinných parametrů než ostatní, přesto však má volitelné argumenty.</value>\r\n  </data>\r\n  <data name=\"invalid_method_modifiers\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: metoda implementující PHP funkci by měla být veřejná a statická.</value>\r\n  </data>\r\n  <data name=\"first_param_not_dictionary\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: První parametr by měl být typu IDictionary kvůli volbě NeedsVariables.</value>\r\n  </data>\r\n  <data name=\"invalid_parameter_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Neplatný parametr '{2} typu ({3}).</value>\r\n  </data>\r\n  <data name=\"invalid_return_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Neplatný návratový typ ({2}).</value>\r\n  </data>\r\n  <data name=\"overloads_not_contiguous\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Neoptimální implementace. Přetížení metody '{2}' nejsou v tabulce metadat umístěna za sebou.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_name\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Neplatné jméno konstanty '{2}'.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_field\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Proměná implementující PHP konstantu by měla být veřejný literál.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Neplatný typ konstanty ({2}).</value>\r\n  </data>\r\n  <data name=\"invalid_type_visibility\" xml:space=\"preserve\">\r\n    <value>{0}: Typ implementující PHP funkci nebo konstantu by měl být veřejný.</value>\r\n  </data>\r\n  <data name=\"invalid_type_namespace\" xml:space=\"preserve\">\r\n    <value>{0}: Typ implementující PHP funkci nebo konstantu by měl být ve jmenném prostoru {1} nebo vněkterém z vnořených jmenných prostorů.</value>\r\n  </data>\r\n  <data name=\"reading_configuration\" xml:space=\"preserve\">\r\n    <value>Načítání nastavení</value>\r\n  </data>\r\n  <data name=\"invalid_command_line_argument\" xml:space=\"preserve\">\r\n    <value>Neplatný parametr příkazové řádky '/{0}': {1}</value>\r\n  </data>\r\n  <data name=\"invalid_command_line_argument_noname\" xml:space=\"preserve\">\r\n    <value>Neplatné parametry příkazové řádky: {0}</value>\r\n  </data>\r\n  <data name=\"invalid_source\" xml:space=\"preserve\">\r\n    <value>Neplatný zdrohový soubor nebo složka: {0}</value>\r\n  </data>\r\n  <data name=\"code_generation_error\" xml:space=\"preserve\">\r\n    <value>Během generování sestavení došlo k chybě: {0}</value>\r\n  </data>\r\n  <data name=\"internal_error\" xml:space=\"preserve\">\r\n    <value>Vnitřní chyba!\r\nOznamte tuto chybu prostřednictvím {0}, prosím.\r\nDalší informace:\r\n{1}</value>\r\n  </data>\r\n  <data name=\"phpc_arg_help\" xml:space=\"preserve\">\r\n    <value>Zobrazí tuto informaci o použití.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_debug\" xml:space=\"preserve\">\r\n    <value>Zkomilovat v režimu ladění (ladicí informace jsou vygenerovány do .pdb souborů, asserty jsou ignorovány).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_web\" xml:space=\"preserve\">\r\n    <value>Zkompilovat webovou aplikaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_exe\" xml:space=\"preserve\">\r\n    <value>Zkompilovat spustitelnou konzolovou aplikaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_dll\" xml:space=\"preserve\">\r\n    <value>Zkompilovat kniihovnu.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_winexe\" xml:space=\"preserve\">\r\n    <value>Zkompilovat aplikaci pro Windows.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_lang\" xml:space=\"preserve\">\r\n    <value>Povolit vlastnosti jazyka specifické pro danou verzi PHP.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_pure\" xml:space=\"preserve\">\r\n    <value>Zkompilovat čistou PHP/CLR aplikaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_mta\" xml:space=\"preserve\">\r\n    <value>Určuje, že model vláken COM pro aplikaci bude mjultithreaded apartment. Vypnuto ve výchozím nastavení.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_out_path\" xml:space=\"preserve\">\r\n    <value>Pokud cílem je webová aplikace, určuje složku, kde bude výsledné sestavení uloženo.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_doc\" xml:space=\"preserve\">\r\n    <value>Vygenerovat dokumantaci do XML souboru pojmenovaného stejně jako výsledné sestavení a uloženého ve stejné složce.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_doc_path\" xml:space=\"preserve\">\r\n    <value>Vygenerovat dokumentaci do zadaného XML souboru.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_root_path\" xml:space=\"preserve\">\r\n    <value>Cesta ke kořenové složce kompilované webové/konzolové/Windows aplikace nebo knihovny. Výchozí je aktuální složka.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_config_path\" xml:space=\"preserve\">\r\n    <value>Cesta ke konfiguračnímu souboru, který bud enačten a zpracován před kompilací. Může být určeno i více voleb. Konfigurační nastavení jsou zpracovávána v následujícím pořadí:\r\n1. nastavení v machine.config\r\n2. nasvaení v phpc.exe.comfig\r\n3. nastavení v souborech určených touto volbou (pokud jsou určeny)\r\n4. App.config/Web.config nacházející se v kořenové složce zdrojového kódu aplikace, pokud existuje a žádná volba /config není určena</value>\r\n  </data>\r\n  <data name=\"phpc_arg_reference_path\" xml:space=\"preserve\">\r\n    <value>Cesta k odkazovanému sestavní PHP knihovny. Více než jedna volba může být použita.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_entrypoint\" xml:space=\"preserve\">\r\n    <value>Jeden z kompilovaných skriptů, který bude použit jako vstupní bod aplikace.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_static\" xml:space=\"preserve\">\r\n    <value>Povolit statické includy.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_recurse\" xml:space=\"preserve\">\r\n    <value>Složka, která budev rekutzivně prohledána na soubory ke kompilaci. Může být určena opakovaně.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_ext\" xml:space=\"preserve\">\r\n    <value>Čárkou oddělený seznam přípon souborů, které budou přidány do kompilace při rekurzivním prohledávání složek. Výchozí nastavení je 'php,inc'.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_encoding\" xml:space=\"preserve\">\r\n    <value>Kódování skriptů. Příklady: UTF-8, Windows-1250, Latin1, Latin2 atd. Viz metoda System.TextEncoding.GetEncoding(string).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_key\" xml:space=\"preserve\">\r\n    <value>Soubor s párem klíčů vygenerovaným utilitou sn. Zapříčiní, že výsledné sestavení bude silně pojmenované.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_version\" xml:space=\"preserve\">\r\n    <value>Verze cílového sestavní. Výchozí hodnota je 1.0.0.0.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_win32icon\" xml:space=\"preserve\">\r\n    <value>Soubor obsahující Win32 ikonu (nebo více ikon), které budou vloženy do výsledného sestavení.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_nowarn_warning_numbers\" xml:space=\"preserve\">\r\n    <value>Vypíná jedno či více varování podle čísel. Více čísel varování oddělte čárkou.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_DeferredToRuntime\" xml:space=\"preserve\">\r\n    <value>Vypíná varování vztahující se k odložené kompilaci.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_InclusionsMapping\" xml:space=\"preserve\">\r\n    <value>Vypíná varování ohledně selhání mapování includů. Automaticky vypnuto, pokud je použito /dw:DefferedToRuntime.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_CompilerStrict\" xml:space=\"preserve\">\r\n    <value>Vypíná striktní varování kompilátoru jako nedsažitelný kód, použití modifikátoru &amp; při volání funkce atp.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_AmpModifiers\" xml:space=\"preserve\">\r\n    <value>Vypíná varování vztahující se k modifikátoru andpresand (referencím). Automaticky vypnuto pokud je použito /dw:CompilerStrict.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_ew\" xml:space=\"preserve\">\r\n    <value>Povolit zadaná varování (stejné volby jako /dw).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_verbose\" xml:space=\"preserve\">\r\n    <value>Zobrazovat doplňující informace o procesu kompilace?</value>\r\n  </data>\r\n  <data name=\"phpc_arg_at_path\" xml:space=\"preserve\">\r\n    <value>Nakradit tyto argumenty argumenty ze zadaného souboru.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_quiet\" xml:space=\"preserve\">\r\n    <value>Nezobrazovat žádné hlášky.</value>\r\n  </data>\r\n  <data name=\"invalid_header\" xml:space=\"preserve\">\r\n    <value>Hklavička '{0}' je neplatná: {1}</value>\r\n  </data>\r\n  <data name=\"protected_ctor_called\" xml:space=\"preserve\">\r\n    <value>Volání chráněného konstruktoru {0}::{1}() z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"private_ctor_called\" xml:space=\"preserve\">\r\n    <value>Volání privátního konstruktoru {0}::{1}() z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"circular_base_class_dependency\" xml:space=\"preserve\">\r\n    <value>Kruhová závislost dědičnosti tříd pro '{0}' a '{1}'</value>\r\n  </data>\r\n  <data name=\"circular_base_interface_dependency\" xml:space=\"preserve\">\r\n    <value>Kruhová závislost dědičnosti rozhraní pro '{0}' a '{1}'</value>\r\n  </data>\r\n  <data name=\"readonly_property_written\" xml:space=\"preserve\">\r\n    <value>Nemohu zapsat do vlastnosti jen pro četní {0}::${1}</value>\r\n  </data>\r\n  <data name=\"writeonly_property_read\" xml:space=\"preserve\">\r\n    <value>Nemohu číst z vlastnosti jen pro zápis {0}::${1}</value>\r\n  </data>\r\n  <data name=\"event_written\" xml:space=\"preserve\">\r\n    <value>Namohu zapistovat do události {0}::${1}, použijte {0}::${1}-&gt;Add() a {0}::${1}-&gt;Remove() pro přidání a odebrání ovladače události.</value>\r\n  </data>\r\n  <data name=\"protected_constant_accessed\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k chráněné konstantě {0}::{1} z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"private_constant_accessed\" xml:space=\"preserve\">\r\n    <value>Nemohu přistupovat k privátní konstantě {0}::{1} z kontextu '{2}'</value>\r\n  </data>\r\n  <data name=\"sleep_returned_bad_field\" xml:space=\"preserve\">\r\n    <value>'{0}' bylo navráceno jako členská proměnná z __sleep(), ale neexistuje</value>\r\n  </data>\r\n  <data name=\"constructor_less_type_instantiated\" xml:space=\"preserve\">\r\n    <value>Nemohu vytvořit instanci třídy '{0}', protože nemá žádný viditelný konstruktor</value>\r\n  </data>\r\n  <data name=\"class_has_no_visible_ctor\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' nemá žádný viditelný konstruktor</value>\r\n  </data>\r\n  <data name=\"type_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu znovu deklarovat třídu/rozhraní '{0}'</value>\r\n  </data>\r\n  <data name=\"function_redeclared\" xml:space=\"preserve\">\r\n    <value>Nemohu znovu deklarovat funkci '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_name_match\" xml:space=\"preserve\">\r\n    <value>Duplicitní název: '{1}' a '{2}' jsou importovány jako '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_type_match\" xml:space=\"preserve\">\r\n    <value>Duplicitní název typu: '{1}' a '{2}' jsou importovány jako '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_function_match\" xml:space=\"preserve\">\r\n    <value>Duplicitní název funkce: '{1}' a '{2}' jsou importovány jako '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_constant_match\" xml:space=\"preserve\">\r\n    <value>Duplicitiní název konstanty: '{1}' a '{2}' jsou importovány jako '{0}'</value>\r\n  </data>\r\n  <data name=\"circular_constant_definition_global\" xml:space=\"preserve\">\r\n    <value>Kruhová definice konstanty zakrnující globální konstantu '{0}'</value>\r\n  </data>\r\n  <data name=\"circular_constant_definition_class\" xml:space=\"preserve\">\r\n    <value>Kruhová definice konstanty zahrnující třídní konstantu '{0}::{1}'</value>\r\n  </data>\r\n  <data name=\"generic_call_to_library_function\" xml:space=\"preserve\">\r\n    <value>Př volání knihovní funkce nelze použít generické argumenty</value>\r\n  </data>\r\n  <data name=\"generic_parameters_disallowed_on_ctor\" xml:space=\"preserve\">\r\n    <value>Generické parametry nelze definova pro konstruktor</value>\r\n  </data>\r\n  <data name=\"missing_entry_point\" xml:space=\"preserve\">\r\n    <value>Chybějící vstupní bod; žádná statická metoda nebo funkce '{0}' bez parametrů nebyla nalezena</value>\r\n  </data>\r\n  <data name=\"entry_point_redefined\" xml:space=\"preserve\">\r\n    <value>Vstupní bod již byl definován</value>\r\n  </data>\r\n  <data name=\"delegate_unrecognized_ctor_args\" xml:space=\"preserve\">\r\n    <value>Nerozpoznané argumenty konstruktoru byly předány delegátu '{0}'. Použijte \"function\", array($instance,\"method\") nebo array(\"class\",\"method\")</value>\r\n  </data>\r\n  <data name=\"delegate_target_instance_missing\" xml:space=\"preserve\">\r\n    <value>Instance objektu musí být předána nestatické metodě '{1}::{2}', při vytváření delegáta '{0}'. Použijte array($instance,\"{2}\")</value>\r\n  </data>\r\n  <data name=\"event_has_no_add_accessor\" xml:space=\"preserve\">\r\n    <value>Událost '{0}::{1}' nemá metodu Add</value>\r\n  </data>\r\n  <data name=\"event_has_no_remove_accessor\" xml:space=\"preserve\">\r\n    <value>Událost '{0}::{1}' nemá metody Remove</value>\r\n  </data>\r\n  <data name=\"string_should_be_single_character\" xml:space=\"preserve\">\r\n    <value>Řetězes by se měl stávat z jediného znaku</value>\r\n  </data>\r\n  <data name=\"type_argument_not_passed_to_function\" xml:space=\"preserve\">\r\n    <value>Generický typový argument #{0} nebyl metodě/funkci předán</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count_for_function\" xml:space=\"preserve\">\r\n    <value>Neplatný počet argumentů při volání funkce '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count_for_method\" xml:space=\"preserve\">\r\n    <value>Neplatný počet argumentů při volání metody '{0}::{1}'</value>\r\n  </data>\r\n  <data name=\"missing_type_argument\" xml:space=\"preserve\">\r\n    <value>Chybějící generický typový argument #{0}</value>\r\n  </data>\r\n  <data name=\"missing_type_argument_for\" xml:space=\"preserve\">\r\n    <value>Chybějíc generický typový argument #{0} pro {1}()</value>\r\n  </data>\r\n  <data name=\"too_many_type_arguments_in_type_use\" xml:space=\"preserve\">\r\n    <value>Použití typu '{0}' vyžaduje nanejvýše {1} generických typových argumentů</value>\r\n  </data>\r\n  <data name=\"missing_type_argument_in_type_use\" xml:space=\"preserve\">\r\n    <value>Použití typu '{0}' vyžaduje, aby generický typový argument #{1} ('{2}') byl určen (výchozí typ nelze použít)</value>\r\n  </data>\r\n  <data name=\"non_generic_type_used_with_type_arguments\" xml:space=\"preserve\">\r\n    <value>Typ '{0}' nemůže být použit s generickými typovými argumenty</value>\r\n  </data>\r\n  <data name=\"incompatible_type_parameter_constraints_type\" xml:space=\"preserve\">\r\n    <value>Třída/rozhraní '{0}' je nekompatibilní s omezením pro generický typováý argument #{1} ('{2}') typem '{3}'</value>\r\n  </data>\r\n  <data name=\"incompatible_type_parameter_constraints_method\" xml:space=\"preserve\">\r\n    <value>Třída/rozhraní '{0}' není kompatibilní s omezením pro generický typový argument #{1} ('{2}') metodou '{3}'</value>\r\n  </data>\r\n  <data name=\"division_by_zero\" xml:space=\"preserve\">\r\n    <value>Dělení nulou</value>\r\n  </data>\r\n  <data name=\"invalid_query_source\" xml:space=\"preserve\">\r\n    <value>Neplatný zdroj dotazu</value>\r\n  </data>\r\n  <data name=\"invalid_stream_resource\" xml:space=\"preserve\">\r\n    <value>Dodaný zdroj není platný zdroj proudu</value>\r\n  </data>\r\n  <data name=\"invalid_socket_stream_resource\" xml:space=\"preserve\">\r\n    <value>Dodaný zdroj není platný zdroj soketového proudu</value>\r\n  </data>\r\n  <data name=\"multiple_statements_in_assertion\" xml:space=\"preserve\">\r\n    <value>Assert obsahuje více příkazů, ale jen první z nich je relevantní</value>\r\n  </data>\r\n  <data name=\"credits_php_clr\" xml:space=\"preserve\">\r\n    <value>Rozčíření jazyka PHP/CLR</value>\r\n  </data>\r\n  <data name=\"credits_lexical_syntactic_analysis\" xml:space=\"preserve\">\r\n    <value>Lexikální a syntaktická analýza§</value>\r\n  </data>\r\n  <data name=\"credits_semantic_analysis\" xml:space=\"preserve\">\r\n    <value>Sémantická analýza</value>\r\n  </data>\r\n  <data name=\"credits_clr_features\" xml:space=\"preserve\">\r\n    <value>Integrace vlastností CLR</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared\" xml:space=\"preserve\">\r\n    <value>Deklarace {0} {1} způsobí chybu při běhu, když bude vykonána, protože {0} byla již deklarována zde</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared_by_inclusion\" xml:space=\"preserve\">\r\n    <value>Inkluze způsobí chybu za běhu, když bude vykonána - redeklarace {0} {1}</value>\r\n  </data>\r\n  <data name=\"library_class_redeclared\" xml:space=\"preserve\">\r\n    <value>Nelze předeklarovat knihovní třídu/rozhraní {0}</value>\r\n  </data>\r\n  <data name=\"library_class_redeclared_by_inclusion\" xml:space=\"preserve\">\r\n    <value>Inkluze způsobí chybu za běhu, když bude vykonána, protože předeklarovává knihovní třídu/rozhraní {0}</value>\r\n  </data>\r\n  <data name=\"property_redeclared\" xml:space=\"preserve\">\r\n    <value>Nelze znovu deklarovat vlastnost {0}::${1}</value>\r\n  </data>\r\n  <data name=\"cannot_use_reserved_name\" xml:space=\"preserve\">\r\n    <value>Název '{0}' je rezervovaný a nemůže být použit na tomto místě</value>\r\n  </data>\r\n  <data name=\"non_interface_extended\" xml:space=\"preserve\">\r\n    <value>Nemohu dědit od '{0}' protože to není rozhraní</value>\r\n  </data>\r\n  <data name=\"non_class_extended\" xml:space=\"preserve\">\r\n    <value>Nemohu dědit od '{0}' protože to není třída</value>\r\n  </data>\r\n  <data name=\"make_nonstatic_method_static\" xml:space=\"preserve\">\r\n    <value>Nemohu z nestatické metody {0}::{1}() udělat statickou ve třídě '{2}'</value>\r\n  </data>\r\n  <data name=\"nonabstract_method_overridden_with_abstract\" xml:space=\"preserve\">\r\n    <value>Nemohu dělat z neabstraktní metody {0}::{1}() abstraktní ve třídě '{2}'</value>\r\n  </data>\r\n  <data name=\"make_static_property_nonstatic\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat statickou vlastnost {0}::${1} jako nestatickou {2}::${1} (statická deklarována v '{3}')</value>\r\n  </data>\r\n  <data name=\"make_nonstatic_property_static\" xml:space=\"preserve\">\r\n    <value>Nemohu předeklarovat nestatickou vlastnost {0}::${1} jako statickou {2}::${1} (nestatická deklarována v '{3}')</value>\r\n  </data>\r\n  <data name=\"overriding_property_restrict_visibility\" xml:space=\"preserve\">\r\n    <value>{0}::${1} musí mít viditelnost alespoň jako '{2}' definovanou v třídě/rozhraní '{3}'</value>\r\n  </data>\r\n  <data name=\"abstract_property_not_implemented\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' neimplementuje abstraktní vlastnost {1}::${2}</value>\r\n  </data>\r\n  <data name=\"conflicting_type_aliases\" xml:space=\"preserve\">\r\n    <value>Typ '{0}' již byl importován</value>\r\n  </data>\r\n  <data name=\"conflicting_function_aliases\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' již byla importována</value>\r\n  </data>\r\n  <data name=\"conflicting_constant_aliases\" xml:space=\"preserve\">\r\n    <value>Konstanta '{0}' již byla importována</value>\r\n  </data>\r\n  <data name=\"expecting_parent_ctor_invocation\" xml:space=\"preserve\">\r\n    <value>Očkáváno volání konstruktoru rodičovské třídy</value>\r\n  </data>\r\n  <data name=\"unexpected_parent_ctor_invocation\" xml:space=\"preserve\">\r\n    <value>Neočekávané volání konstruktoru rodičovské třídy (tato volání sjou možná v konstruktorech tříd dědících od CLR typů)</value>\r\n  </data>\r\n  <data name=\"missing_ctor_in_clr_subclass\" xml:space=\"preserve\">\r\n    <value>Chybějící konstruktor - třída '{0}' dědí od CLR typu bez výchozího konstruktoru takže musí implementovat konstruktor</value>\r\n  </data>\r\n  <data name=\"missing_imported_entity\" xml:space=\"preserve\">\r\n    <value>Očekáván typ předmětu importu (zadejte 'namespace', 'class', 'interface', 'function' nebo 'const')</value>\r\n  </data>\r\n  <data name=\"duplicate_parameter_name\" xml:space=\"preserve\">\r\n    <value>Duplicitní název parametru '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_escape_sequence_length\" xml:space=\"preserve\">\r\n    <value>Escapovací sekvence '{0}' požaduje přesně {1} hexačísel</value>\r\n  </data>\r\n  <data name=\"invalid_code_point\" xml:space=\"preserve\">\r\n    <value>Hodnota '{0}' nekóduje platný Unicode znak</value>\r\n  </data>\r\n  <data name=\"invalid_code_point_name\" xml:space=\"preserve\">\r\n    <value>Hodnota '{0}' nekóduje platný Unicode znak pro jméno</value>\r\n  </data>\r\n  <data name=\"inclusion_in_pure_unit\" xml:space=\"preserve\">\r\n    <value>Includy nejsou v čistém kódu dovoleny.</value>\r\n  </data>\r\n  <data name=\"invalid_line_pragma\" xml:space=\"preserve\">\r\n    <value>Line pragma má neplatnou hodnotu</value>\r\n  </data>\r\n  <data name=\"global_code_in_pure_unit\" xml:space=\"preserve\">\r\n    <value>Globální kód není povolen v čistém kódu</value>\r\n  </data>\r\n  <data name=\"invalid_interface_modifier\" xml:space=\"preserve\">\r\n    <value>Modifikátor nelze aplikovat na rozhraní</value>\r\n  </data>\r\n  <data name=\"generic_parameter_must_be_type\" xml:space=\"preserve\">\r\n    <value>Generický parametr musí odkazovat na typ v tomto kontextu</value>\r\n  </data>\r\n  <data name=\"generic_parameter_is_reserved_identifier\" xml:space=\"preserve\">\r\n    <value>Generický typový parametr musí být identifikátor jiný než 'self' nebo 'parent' v tomto kontextu</value>\r\n  </data>\r\n  <data name=\"duplicate_generic_parameter\" xml:space=\"preserve\">\r\n    <value>Duplicitní generický typový parametr</value>\r\n  </data>\r\n  <data name=\"generic_parameter_collides_with_declarer\" xml:space=\"preserve\">\r\n    <value>Generický typový parametr '{0}' má stejné jméno jako obsahující tříd/rozhraní</value>\r\n  </data>\r\n  <data name=\"cannot_derive_from_type_parameter\" xml:space=\"preserve\">\r\n    <value>Nemohu zdědit od '{0}' protože to hje generický typový parametr</value>\r\n  </data>\r\n  <data name=\"private_class_in_global_ns\" xml:space=\"preserve\">\r\n    <value>Nelze deklarovat privátní třídu v globální jmenném prostoru</value>\r\n  </data>\r\n  <data name=\"missing_partial_modifier\" xml:space=\"preserve\">\r\n    <value>Chybějící modifikátor 'partial' u deklarace třídy/rozhraní '{0}' - existuje jiná částečná deklrarace tohoto typu </value>\r\n  </data>\r\n  <data name=\"partial_transient_declaration\" xml:space=\"preserve\">\r\n    <value>Modifikátor 'partial' nerní povolen v kódu pro eval()</value>\r\n  </data>\r\n  <data name=\"partial_conditional_declaration\" xml:space=\"preserve\">\r\n    <value>Modifikátor 'partial' nelze použít v podmíněné deklaraci</value>\r\n  </data>\r\n  <data name=\"partial_impure_declaration\" xml:space=\"preserve\">\r\n    <value>Modifikátor 'partialˇlze použít jen v čistém kódu</value>\r\n  </data>\r\n  <data name=\"incompatible_partial_declarations\" xml:space=\"preserve\">\r\n    <value>Částečné deklarace '{0}'  musí být všechny třídy nebo rozhraní</value>\r\n  </data>\r\n  <data name=\"conflicting_partial_visibility\" xml:space=\"preserve\">\r\n    <value>Všechny částečné deklarace '{0}' musí mít všechny stejnou viditelnost</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_base\" xml:space=\"preserve\">\r\n    <value>Částečné deklarace '{0}' nemohou určovat různé bázové třídy</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_type_parameter\" xml:space=\"preserve\">\r\n    <value>Všechny částečné deklarace '{0}' musí mít stejné definice typových parametrů</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_type_parameter_count\" xml:space=\"preserve\">\r\n    <value>Všchny částečné deklarace '{0}' musí mít stejný počet typových parametrů</value>\r\n  </data>\r\n  <data name=\"unknown_custom_attribute\" xml:space=\"preserve\">\r\n    <value>Neznámí uživatelský atribut; ani jeden z typů '{0}', '{1}' neexistuje</value>\r\n  </data>\r\n  <data name=\"not_custom_attribute_class\" xml:space=\"preserve\">\r\n    <value>'{0}' není třídou uživatelského atributu</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_usage\" xml:space=\"preserve\">\r\n    <value>Neplatné použití atributu '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_target_selector\" xml:space=\"preserve\">\r\n    <value>'{0}' ne neplatný selektor cíle uživatelského strubutu (zadejte 'return', 'assembly', nebo 'module')</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_expression\" xml:space=\"preserve\">\r\n    <value>Argument atributu musí být konstantní výraz</value>\r\n  </data>\r\n  <data name=\"duplicate_attribute_usage\" xml:space=\"preserve\">\r\n    <value>Duplicitní atribut '{0}'</value>\r\n  </data>\r\n  <data name=\"out_attribute_on_byval_param\" xml:space=\"preserve\">\r\n    <value>Atribut 'Out' může být použit jen s parametry předávanými odkazem; přidejte modifikátor '&amp;' k parametru '${0}'</value>\r\n  </data>\r\n  <data name=\"export_attribute_in_non_pure\" xml:space=\"preserve\">\r\n    <value>Atribut 'Export' lze použít jen v čistém kódu</value>\r\n  </data>\r\n  <data name=\"class_behavior_may_be_unexpected\" xml:space=\"preserve\">\r\n    <value>Použití třídy '{0}' v PHP kódu není doporučována, protože výsledný efekt bude pravděpodobně jiný než očekáváte</value>\r\n  </data>\r\n  <data name=\"syntax_error\" xml:space=\"preserve\">\r\n    <value>Syntaktická chyba: {0}</value>\r\n  </data>\r\n  <data name=\"unexpected_token\" xml:space=\"preserve\">\r\n    <value>neočekávaný token '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_identifier\" xml:space=\"preserve\">\r\n    <value>'{0}' není platný identifikátor; identifikátor nemůže být prázdný a nesmí obsahovat žádný ze znaků '&lt;', '&gt;' a '#'</value>\r\n  </data>\r\n  <data name=\"self_used_out_of_class\" xml:space=\"preserve\">\r\n    <value>'self' použito mimo deklaraci třídy</value>\r\n  </data>\r\n  <data name=\"parent_used_out_of_class\" xml:space=\"preserve\">\r\n    <value>'parent' použito mimo deklaraci třídy</value>\r\n  </data>\r\n  <data name=\"class_has_no_parent\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' nemá žádného rodiče</value>\r\n  </data>\r\n  <data name=\"incomplete_class\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' je nekompletní - její bázová třída nebo rozhraní je neznámé</value>\r\n  </data>\r\n  <data name=\"unknown_method_called\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' neobsahuje definici metody '{1}'</value>\r\n  </data>\r\n  <data name=\"too_few_method_params\" xml:space=\"preserve\">\r\n    <value>Chybějící parametry volání '{0}::{1}' - alespoň {2} parametry jsou požadována, ale jen {3} předány</value>\r\n  </data>\r\n  <data name=\"too_few_function_params\" xml:space=\"preserve\">\r\n    <value>Cgybějící parametry volání '{0}' - alespoň {1} parameztry požadovány, ale jen {2} předány</value>\r\n  </data>\r\n  <data name=\"too_many_local_variables_function\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' deklaruje tak moc lokálních proměnných ({1}), že to může vést ke snížení výkonnosti</value>\r\n  </data>\r\n  <data name=\"too_many_local_variables_method\" xml:space=\"preserve\">\r\n    <value>Metoda '{0}::{1}' deklaruje tak moc lokálních proměnných ({2}), že to může vést ke snížení výkonnosti</value>\r\n  </data>\r\n  <data name=\"unused_label\" xml:space=\"preserve\">\r\n    <value>Návěští '{0}' je deklarováno, ale není v tomto rozsahu použito</value>\r\n  </data>\r\n  <data name=\"undefined_label\" xml:space=\"preserve\">\r\n    <value>Použití nedefinovaného návěští '{0}'</value>\r\n  </data>\r\n  <data name=\"label_redeclared\" xml:space=\"preserve\">\r\n    <value>Návěští '{0}' je již deklarováno</value>\r\n  </data>\r\n  <data name=\"unknown_class_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Třída '{0}' (importována jako '{1}') je na tomto místě neznámá v době kompilace</value>\r\n  </data>\r\n  <data name=\"unknown_function_used\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' je na tomto místě neznámá v době kompilace</value>\r\n  </data>\r\n  <data name=\"unknown_function_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Funkce '{0}' (importována jako '{1}') je na tomto místě naznámá v době kompilace</value>\r\n  </data>\r\n  <data name=\"unknown_constant_used\" xml:space=\"preserve\">\r\n    <value>Konstante '{0}' je na tomto místě naznámá v době kompice</value>\r\n  </data>\r\n  <data name=\"unknown_constant_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Konstanta '{0}' (importována jako '{1}')v je na tomto místě neznámá v době kompilace</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_method_func\" xml:space=\"preserve\">\r\n    <value>Funkce deklarované na úrovni globálního kódu nebo v metodách nejsou podporována při generování CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_constants\" xml:space=\"preserve\">\r\n    <value>Globální konstanty nejsou podporovány pro generování CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_statement\" xml:space=\"preserve\">\r\n    <value>PHP příkaz global není podporován pro generování CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_statement\" xml:space=\"preserve\">\r\n    <value>Neznámý PHP příkaz {0} není podporován pro generování CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_start_must_be_less_tahn_number_of_conditions\" xml:space=\"preserve\">\r\n    <value>Start musí být menší než počet podmínek</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_else_separatelly\" xml:space=\"preserve\">\r\n    <value>Klauzule 'else' nemůže být přeložena samostatně.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_else_last\" xml:space=\"preserve\">\r\n    <value>Klauzule 'else' musí být poslední klauzulí příkazu if.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_ref_assign\" xml:space=\"preserve\">\r\n    <value>Přiřazení referencí není podporováno při překladu z PHO do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_empty_ex\" xml:space=\"preserve\">\r\n    <value>Prázdné výrazy nejsou podporovány při překladu z PHP do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_eval\" xml:space=\"preserve\">\r\n    <value>Eval není podporováno</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_include_require\" xml:space=\"preserve\">\r\n    <value>Includy a requirey nejsou podporovány pře překladu z PHP do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_LINQ\" xml:space=\"preserve\">\r\n    <value>LINQ není podporován při překladu z PHP do COdeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_ex\" xml:space=\"preserve\">\r\n    <value>Dosažen nepodporovaný typ výrazu {0}. Tento typ výrazu není podporován při překladu z PHP do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_binop\" xml:space=\"preserve\">\r\n    <value>Dosažen nepodporovaný binární operátor {0} ({1}). Jedná se vůbec o binární výraz?</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_assign\" xml:space=\"preserve\">\r\n    <value>Dosažen nepodporovaný operátor přiřazení {0} ({1}). Jedná se vůbec o operátor přiřazení?</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_unop\" xml:space=\"preserve\">\r\n    <value>Dosažen nepodporovaný unární operítor {0:F} ({0:D}). Tento operátor není podporován při překladu z PHO do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_delegate_creartion\" xml:space=\"preserve\">\r\n    <value>Dosaženo nepodporované vytvoření delegáta. Delegát musí být vytvořen pomocí NewEx s jediným parametrem typu ArrayEx, který má 2 ValueItem bez indexu, kde ValueExpr 2. položky je StringLiteral.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_CodeVariableReferenceExpression_excpected\" xml:space=\"preserve\">\r\n    <value>Očekávaným výsledkem TranslateVariableUse pro DirectVarUse bylo CodeVariableReferenceException. Poznámka: Statické proměnné nejsou podporovány jako DirectVarUse (např. proměnná pro výjímku klauzule Catch příkazuv Try).</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_static_var\" xml:space=\"preserve\">\r\n    <value>Statické proměnné mohou být použity jen uvnitř metod, které jsou čelny tříd.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_var_kind\" xml:space=\"preserve\">\r\n    <value>Dosažen neznámý typ použití proměnné {0}. tento typ ppoužití proměnné není podporován při překladu z PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_null\" xml:space=\"preserve\">\r\n    <value>use.IsMemberOf nesmí být null.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_nonobj_func\" xml:space=\"preserve\">\r\n    <value>Volání funkcí, které nejsou čelyn objektů nelze přeložit.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_varlike_construct_use\" xml:space=\"preserve\">\r\n    <value>Dsoažen neznámý typ použití konstruktu podobného proměnné {0}. Tento typ použití není podporován při překladu z PHP do DoceDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_array_item_reference\" xml:space=\"preserve\">\r\n    <value>Položky polí předávané odkazem nejsou podporovány při překladu PHP do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_array_item_type\" xml:space=\"preserve\">\r\n    <value>DOsažen neznámý ty položky pole {0}. Tento typ položky pole není podporován při překladu z PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_assoc_arr_init_context\" xml:space=\"preserve\">\r\n    <value>Inicializace asociativního pole PHP nemůže být provedena v místě, kde není možno vkládat další příkazy.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_pseudoconstant_type\" xml:space=\"preserve\">\r\n    <value>Dsažen nepodporovaný typ presudo-konstanty {0} ({1}). Tento typ není podporován při překladu PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_list_context\" xml:space=\"preserve\">\r\n    <value>ýrazy typu list není možné použít mimo metody.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_isset_no_var\" xml:space=\"preserve\">\r\n    <value>isset bez jediné proměnné, není možno přeložit z PHP do CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_not_enough_items_in_list\" xml:space=\"preserve\">\r\n    <value>V seznamu není dostatek položek</value>\r\n  </data>\r\n  <data name=\"cdp_start_less_than_zero\" xml:space=\"preserve\">\r\n    <value>start nemůže být nižší než 0</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_enough_expressions_in_list\" xml:space=\"preserve\">\r\n    <value>V seznamu není dostatek položek</value>\r\n  </data>\r\n  <data name=\"cdp_start_greater_than_zero\" xml:space=\"preserve\">\r\n    <value>Začátek musí být vyšší nebo roven nule</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_empty_ex_list\" xml:space=\"preserve\">\r\n    <value>Nemohu přeložit prázdný seznam výrazů</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_indirect_type_ref\" xml:space=\"preserve\">\r\n    <value>Nepřímé odkazy na typy nejsou při překladu PHP do CodeDOM podporovány.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_ref_kind\" xml:space=\"preserve\">\r\n    <value>Dosažen neznámý typ reference na typ {0}. Tato reference na typ není podporována při překladu PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_switch\" xml:space=\"preserve\">\r\n    <value>Dosažena neznámá položka příkazu switch {0}. Tento typ položek příkazu switch není podporován při překladu z PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_event_op\" xml:space=\"preserve\">\r\n    <value>Dosažena naznámá operace s událostí. Podporovány jsou jen operace Add a Remove.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_invalid_event\" xml:space=\"preserve\">\r\n    <value>Neplatný výraz pro překlad události.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_break_non_constant\" xml:space=\"preserve\">\r\n    <value>Příkaz break s nekonstantním agumentem není podporován při překladu z PHP do CodeDOM.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_no_jump_label\" xml:space=\"preserve\">\r\n    <value>Obsahující blok nevrátil žádné návěští pro skok příkazu break</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_2_stat_vars_with_same_name\" xml:space=\"preserve\">\r\n    <value>Dvě statické proměnné se stejným názvem</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_static_var_otside_method\" xml:space=\"preserve\">\r\n    <value>Nemohu přidat statickou proměnnou, když nejsem v metodě</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_loc_var_context\" xml:space=\"preserve\">\r\n    <value>Deklarace lokálních proměnných nejsou podporovány na této úrovni (např. jmenný prostor nebo třída)</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_loc_var_class_namespace\" xml:space=\"preserve\">\r\n    <value>Nemohu přidat lokální proměnnou na této úrovni (např. jmenný protor nebo třída)</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_levels_0\" xml:space=\"preserve\">\r\n    <value>Počel úrovní příkazo break musí být 1 či více</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_break_continue_only\" xml:space=\"preserve\">\r\n    <value>CodeTargetRequest podporuje jen break a continue</value>\r\n  </data>\r\n  <data name=\"cdp_statement_not_found\" xml:space=\"preserve\">\r\n    <value>Příkaz nenalezen</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_block_level\" xml:space=\"preserve\">\r\n    <value>Objekt typu {0} není povolen na úrovni blokového příkazu</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_only_loop_jump\" xml:space=\"preserve\">\r\n    <value>Jen smyčky mohou poskytovat návěští pro skok</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_method_level\" xml:space=\"preserve\">\r\n    <value>Objekt typu {0} není povolen na úrovni metody</value>\r\n  </data>\r\n  <data name=\"cdp_index_not_within_catch_calusules\" xml:space=\"preserve\">\r\n    <value>Index neukazuje mezi klauzule catch</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_file_level\" xml:space=\"preserve\">\r\n    <value>Objekt typu {0} není podporován na úrovni souboru</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_namespace_level\" xml:space=\"preserve\">\r\n    <value>Objekt typu {0} není podporován na úrovni jmenného prostoru</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_anything_delegate\" xml:space=\"preserve\">\r\n    <value>Do delegáta není možné nic přidat</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_filed_delegate\" xml:space=\"preserve\">\r\n    <value>Nemohu přidat proměnnou do rozhraní</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_in_enum\" xml:space=\"preserve\">\r\n    <value>Jen konstantní statické proměnné mohou být přidávány do výčtů</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_in_enum_other\" xml:space=\"preserve\">\r\n    <value>Jen proměnné mohou být přidávány do výčtů</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsupported_at_type_level\" xml:space=\"preserve\">\r\n    <value>Objekt typu {0} není podporován na úrovni typu</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Core/Logger.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Hanldes logging to a file and event log.\r\n\t/// <threadsafety static=\"true\"/>\r\n\t/// </summary>\r\n\tpublic sealed class Logger\r\n\t{\r\n\t\tprivate Logger() { }\r\n\r\n\t\tprivate const string mutexNamePrefix = \"PhpNetErrorLogMutex_\";\r\n\t\tprivate const int mutexTimeout = 1000;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Appends a line into the specified log file synchronizing the access via a named mutex.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">The name of a log file.</param>\r\n\t\t/// <param name=\"message\">The message to be appended.</param>\r\n\t\t/// <exception cref=\"IOException\">An I/O error occurs.</exception>\r\n\t\t/// <remarks>\r\n\t\t/// <para>If the file doesn't exists it will be created.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"IOException\">Unexpected IO error occured.</exception>\r\n\t\tpublic static void AppendLine(string fileName, string message)\r\n\t\t{\r\n\t\t\tmessage = DateTime.Now.ToString(\"[dd-MMM-yyyy HH:mm:ss] \") + message;\r\n\r\n\t\t\tbool mutex_created;\r\n\t\t\tusing (Mutex m = new Mutex(true, mutexNamePrefix + fileName.GetHashCode(), out mutex_created))\r\n\t\t\t{\r\n\t\t\t\t// try to acquire the mutex if not acquired yet:\r\n\t\t\t\tif (!mutex_created && !m.WaitOne(mutexTimeout, false))\r\n\t\t\t\t\tthrow new IOException();\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tusing (StreamWriter sw = File.AppendText(fileName))\r\n\t\t\t\t\t\tsw.WriteLine(message);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new IOException();\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tm.ReleaseMutex();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds error message to system Event log.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"message\"></param>\r\n\t\tpublic static void AddToEventLog(string message)\r\n\t\t{\r\n\t\t\tEventLog.WriteEntry(\"Phalanger\", message, EventLogEntryType.Error);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Namespaces.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Namespaces used by Phalanger.\r\n\t/// </summary>\r\n\tpublic class Namespaces\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Library functions, classes, and interfaces (including extensions).\r\n\t\t/// </summary>\r\n\t\tpublic const string Library = \"PHP.Library\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Arg-less stubs of library functions.\r\n\t\t/// </summary>\r\n\t\tpublic const string LibraryStubs = \"PHP.Dynamic\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Core.\r\n\t\t/// </summary>\r\n\t\tpublic const string Core = \"PHP.Core\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Core subnamespace containing AST nodes.\r\n\t\t/// </summary>\r\n\t\tpublic const string CoreAst = \"PHP.Core.AST\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Core subnamespace containing code emitting stuff.\r\n\t\t/// </summary>\r\n\t\tpublic const string CoreEmit = \"PHP.Core.Emit\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extensions manager.\r\n\t\t/// </summary>\r\n\t\tpublic const string ExtManager = \"PHP.ExtManager\";\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/Operators.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.ComponentModel;\r\n\r\nusing PHP.Library;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing MathEx = PHP.CoreCLR.MathEx;\r\nusing ArrayEx = PHP.CoreCLR.ArrayEx;\r\n#else\r\nusing MathEx = System.Math;\r\nusing ArrayEx = System.Array;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region Overview\r\n    /// <summary>\r\n    /// Operators used by PHP language.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// <para>\r\n    /// The compiler keeps track of whether or not a variable is a reference but doesn't do so in\r\n    /// the case of a property or an array item. Moreover, a <see cref=\"PhpReference\"/> variable cannot be <B>null</B>.\r\n    /// Thus\r\n    /// <list type=\"bullet\">\r\n    ///   <item>an operator returning an item of an array or a property of an object dereferences return value itself,</item>\r\n    ///   <item>operands of type <see cref=\"object\"/> should not be of type <see cref=\"PhpReference\"/>,</item>\r\n    ///   <item>an operator returning a <see cref=\"PhpReference\"/> should never return a <B>null</B> reference.</item>\r\n    /// </list>\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// In the following tables <c>p</c>, <c>q</c> are references while <c>x</c>, <c>y</c>, <c>z</c>, <c>u</c>, <c>v</c> \r\n    /// are not (if a corresponding variable is a <see cref=\"PhpReference\"/> then <see cref=\"PhpReference.value\"/> \r\n    /// is used instead). The <c>context</c> is the current <see cref=\"ScriptContext\"/> and the \r\n    /// <c>type</c> is the current <see cref=\"DTypeDesc\"/> as described in the following paragraph.\r\n    /// </para>\r\n    /// <para>\r\n    /// Operators working on <see cref=\"DObject\"/> have a <see cref=\"DTypeDesc\"/> parameter named \r\n    /// <c>caller</c>. When such an operator is used in a PHP function, <B>null</B> is supplied.\r\n    /// When the operator is used in a PHP method, the <see cref=\"DTypeDesc\"/> of the class\r\n    /// this method belongs to is supplied.\r\n    /// Finally, when the operator is used in a script's Main() method,\r\n    /// the <see cref=\"DTypeDesc\"/> that comes as one of Main()'s parameters is supplied.\r\n    /// </para>\r\n    /// \r\n    /// <!-- simple operators ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <para>\r\n    /// <list type=\"table\">\r\n    /// <listheader><term>Simple operators</term><term>Implementation</term></listheader>\r\n    ///   <item><term><c>x &amp;&amp; y</c></term><term><c><see cref=\"Convert.ObjectToBoolean\"/>(x) &amp;&amp; <see cref=\"Convert.ObjectToBoolean\"/>(y)</c></term></item>\r\n    ///   <item><term><c>x || y</c></term><term><c><see cref=\"Convert.ObjectToBoolean\"/>(x) || <see cref=\"Convert.ObjectToBoolean\"/>(y)</c></term></item>\r\n    ///   <item><term><c>x xor y</c></term><term><c><see cref=\"Convert.ObjectToBoolean\"/>(x) xor <see cref=\"Convert.ObjectToBoolean\"/>(y)</c></term></item>\r\n    ///   <item><term><c>!x</c></term><term><c>!<see cref=\"Convert.ObjectToBoolean\"/>(x);</c></term></item>\r\n    ///   <item><term><c>x &amp; y</c></term><term><c><see cref=\"BitOperation\"/>(x,y,BitOp.<see cref=\"BitOp.And\"/>)</c></term></item>\r\n    ///   <item><term><c>x | y</c></term><term><c><see cref=\"BitOperation\"/>(x,y,BitOp.<see cref=\"BitOp.Or\"/>)</c></term></item>\r\n    ///   <item><term><c>x ^ y</c></term><term><c><see cref=\"BitOperation\"/>(x,y,BitOp.<see cref=\"BitOp.Xor\"/>)</c></term></item>\r\n    ///   <item><term><c>~x</c></term><term><c><see cref=\"BitNot\"/>(x)</c></term></item>\r\n    ///   <item><term><c>x++</c></term><term><c>x = <see cref=\"Increment\"/>(x)</c></term></item>\r\n    ///   <item><term><c>x--</c></term><term><c>x = <see cref=\"Decrement\"/>(x)</c></term></item>\r\n    ///   <item><term><c>x + y</c></term><term><c><see cref=\"Add\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x - y</c></term><term><c><see cref=\"Subtract\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x * y</c></term><term><c><see cref=\"Multiply\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x / y</c></term><term><c><see cref=\"Divide\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x % y</c></term><term><c><see cref=\"Remainder\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x &lt;&lt; y</c></term><term><c><see cref=\"ShiftLeft\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x &gt;&gt; y</c></term><term><c><see cref=\"ShiftRight\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>-x</c></term><term><c><see cref=\"Minus\"/>(x)</c></term></item>\r\n    ///   <item><term><c>+x</c></term><term><c><see cref=\"Plus\"/>(x)</c></term></item>\r\n    ///   <item><term><c>x . y</c></term><term><c><see cref=\"Concat\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>a . </c>...<c> . z</c></term><term><c><see cref=\"Concat\"/>(<B>new</B> object[] {a,...,z})</c></term></item>\r\n    ///   <item><term><c>x == y</c></term><term><c>PhpComparer.Default.<see cref=\"PhpComparer.CompareEq\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x != y</c></term><term><c>!PhpComparer.Default.<see cref=\"PhpComparer.CompareEq\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x === y</c></term><term><c><see cref=\"StrictEquality\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x !== y</c></term><term><c>!<see cref=\"StrictEquality\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x &lt;= y</c></term><term><c>PhpComparer.Default.<see cref=\"PhpComparer.Compare\"/>(x,y) &lt;= 0</c></term></item>\r\n    ///   <item><term><c>x &gt;= y</c></term><term><c>PhpComparer.Default.<see cref=\"PhpComparer.Compare\"/>(x,y) &gt;= 0</c></term></item>\r\n    ///   <item><term><c>x &lt; y</c></term><term><c>PhpComparer.Default.<see cref=\"PhpComparer.Compare\"/>(x,y) &lt; 0</c></term></item>\r\n    ///   <item><term><c>x &gt; y</c></term><term><c>PhpComparer.Default.<see cref=\"PhpComparer.Compare\"/>(x,y) > 0</c></term></item>\r\n    ///   <item><term><c>x = y</c></term><term><c>x = PhpVariable.<see cref=\"PhpVariable.Copy\"/>(y,CopyReason.<see cref=\"CopyReason.Assigned\"/>);</c></term></item>\r\n    ///   <item><term><c>p =&amp; q</c></term><term><c>p = q</c></term></item>\r\n    ///   <item><term><c>isset(x)</c></term><term><c>x != <B>null</B></c><SUP>1</SUP></term></item>\r\n    ///   <item><term><c>unset(x)</c></term><term><c>x = <B>null</B></c></term></item>\r\n    ///   <item><term><c>unset(p)</c></term><term><c>p.value = <B>null</B></c></term></item>\r\n    ///   <item><term><c>({int|integer})x</c></term><term><c><see cref=\"Convert.ObjectToInteger\"/>(x)</c></term></item>\r\n    ///   <item><term><c>({bool|boolean})x</c></term><term><c><see cref=\"Convert.ObjectToBoolean\"/>(x)</c></term></item>\r\n    ///   <item><term><c>({float|real|double})x</c></term><term><c><see cref=\"Convert.ObjectToDouble\"/>(x)</c></term></item>\r\n    ///   <item><term><c>(string)x</c></term><term><c><see cref=\"Convert.ObjectToString\"/>(x)</c></term></item>\r\n    ///   <item><term><c>(array)x</c></term><term><c><see cref=\"Convert.ObjectToPhpArray\"/>(x)</c></term></item>\r\n    ///   <item><term><c>(object)x</c></term><term><c><see cref=\"Convert.ObjectToDObject\"/>(x,context)</c></term></item>\r\n    ///   <item><term><c>(unset)x</c></term><term><c><B>null</B></c></term></item>\r\n    ///   <item><term><c>`x`</c></term><term><c>Execution.<see cref=\"Execution.ShellExec\"/>(x)</c></term></item>\r\n    ///   <item><term><c>@s</c></term><term><c>context.<see cref=\"ScriptContext.DisableErrorReporting\"/>(); s; context.<see cref=\"ScriptContext.EnableErrorReporting\"/>();</c></term></item>\r\n    ///   <item><term><c>new A</c></term><term><c><see cref=\"New\"/>(\"A\",type_handle,context)</c></term></item>\r\n    ///   <item><term><c>c?s:t</c></term><term><c>if (c) {s} else {t};</c></term></item>\r\n    ///   <item><term><c>clone(x)</c></term><term><c><see cref=\"Clone\"/>(x)</c></term></item>\r\n    ///   <item><term><c>x instanceOf A</c></term><term><c><see cref=\"InstanceOf\"/>(x,\"A\",type_handle,context)</c></term></item>\r\n    /// </list>\r\n    /// <SUP>1</SUP> <c>isset</c> doesn't distinguish between a <b>null</b> and uninitialized variable<BR/>\r\n    /// </para>\r\n    /// \r\n    /// <!-- item and property operators ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <para>\r\n    /// <list type=\"table\">\r\n    /// <listheader><term>Item and property operators<SUP>2</SUP></term><term>Implementation</term></listheader>\r\n    ///   <item><term><c>x[] = z</c></term><term><c><see cref=\"SetItem\"/>(PhpVariable.<see cref=\"PhpVariable.Copy\"/>(z,CopyReason.<see cref=\"CopyReason.Assigned\"/>),<B>ref</B> x)</c></term></item>    \r\n    ///   <item><term><c>x[] =&amp; p</c></term><term><c><see cref=\"SetItem\"/>(p,<B>ref</B> x)</c></term></item>\r\n    ///   <item><term><c>p =&amp; x[]</c></term><term><c><see cref=\"SetItem\"/>(p = <B>new</B> PhpReference(),<B>ref</B> x)</c></term></item>\r\n    ///   <item><term><c>x[y]</c></term><term><c><see cref=\"GetItem\"/>(x,y,<B>false</B>)</c></term></item>\r\n    ///   <item><term><c>x[y] = z</c></term><term><c><see cref=\"SetItem\"/>(y,PhpVariable.<see cref=\"PhpVariable.Copy\"/>(z,CopyReason.<see cref=\"CopyReason.Assigned\"/>),<B>ref</B> x)</c></term></item>\r\n    ///   <item><term><c>x[y] =&amp; p</c></term><term><c><see cref=\"SetItemRef\"/>(y,p,<B>ref</B> x)</c></term></item>\r\n    ///   <item><term><c>p =&amp; x[y]</c></term><term><c>p = <see cref=\"GetItemRef\"/>(y,<B>ref</B> x)</c></term></item>\r\n    ///   <item><term><c>isset(x[])</c></term><term><c>error - operator [] without key cannot be used for reading</c></term></item>\r\n    ///   <item><term><c>isset(x[y])</c></term><term><c><see cref=\"GetItem\"/>(x,y,<B>true</B>)!=<B>null</B></c></term></item>\r\n    ///   <item><term><c>unset(x[y])</c></term><term><c><see cref=\"UnsetItem\"/>(x,y)</c></term></item>\r\n    ///   <item><term><c>x-&gt;y</c></term><term><c><see cref=\"GetProperty\"/>(x,y,type_handle,<B>false</B>)</c></term></item>\r\n    ///   <item><term><c>x-&gt;y = z</c></term><term><c><see cref=\"SetProperty\"/>(z,<B>ref</B> x,y,PhpVariable.<see cref=\"PhpVariable.Copy\"/>(y,CopyReason.<see cref=\"CopyReason.Assigned\"/>),type_handle,context)</c></term></item>\r\n    ///   <item><term><c>x-&gt;y =&amp; p</c></term><term><c><see cref=\"SetProperty\"/>(p,<B>ref</B> x,y,type_handle,context)</c><SUP>3</SUP></term></item>\r\n    ///   <item><term><c>p =&amp; x-&gt;y</c></term><term><c><see cref=\"GetPropertyRef\"/>(<B>ref</B> x,y,type_handle,context)</c></term></item>\r\n    ///   <item><term><c>isset(x-&gt;y)</c></term><term><c><see cref=\"GetProperty\"/>(x,y,type_handle,<B>true</B>)</c></term></item>\r\n    ///   <item><term><c>unset(x-&gt;y)</c></term><term><c><see cref=\"UnsetProperty\"/>(x,y,type_handle)</c></term></item>\r\n    ///   <item><term><c>A::$y</c></term><term><c><see cref=\"GetStaticProperty\"/>(\"A\",y,type_handle,context,<B>false</B>)</c></term></item>\r\n    ///   <item><term><c>A::$y = z</c></term><term><c><see cref=\"SetStaticProperty\"/>(\"A\",PhpVariable.<see cref=\"PhpVariable.Copy\"/>(y,CopyReason.<see cref=\"CopyReason.Assigned\"/>),type_handle,context)</c></term></item>\r\n    ///   <item><term><c>A::$y =&amp; p</c></term><term><c><see cref=\"SetStaticProperty\"/>(\"A\",y,p,type_handle,context)</c></term></item>\r\n    ///   <item><term><c>p =&amp; A::$y</c></term><term><c><see cref=\"GetStaticPropertyRef\"/>(\"A\",y,type_handle,context)</c></term></item>\r\n    ///   <item><term><c>isset(A::$y)</c></term><term><c><see cref=\"GetStaticProperty\"/>(\"A\",y,type_handle,context,<B>true</B>)</c></term></item>\r\n    ///   <item><term><c>unset(A::$y)</c></term><term><c><see cref=\"UnsetStaticProperty\"/>(\"A\",y,type_handle,context)</c><SUP>4</SUP></term></item>\r\n    ///   <item><term><c>A::x</c></term><term><c><see cref=\"GetClassConstant\"/>(\"A\",x,type_handle,context)</c></term></item>\r\n    /// </list>\r\n    /// <SUP>2</SUP> Note, operator <c>x{y}</c> is implemented in the same way as <c>x[y]</c>.<BR/>\r\n    /// <SUP>3</SUP> Note, there is no -Ref suffix here.<BR/>\r\n    /// <SUP>4</SUP> It is an error to unset static property.\r\n    /// </para>\r\n    /// \r\n    /// <!-- function and method calls ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <para>\r\n    /// <list type=\"table\">\r\n    /// <listheader><term>Function and method calls</term><term>Implementation</term></listheader>\r\n    ///   <item><term><c>x-&gt;f(args)</c></term><term><c><see cref=\"InvokeMethod\"/>(x,\"f\",type_handle)</c></term></item>\r\n    ///   <item><term><c>A::f(args)</c></term><term><c><see cref=\"InvokeStaticMethod\"/>(\"A\",\"f\",type_handle)</c></term></item>\r\n    ///   <item><term><c>$f(args)</c></term><term><c>PhpFunction.<see cref=\"ScriptContext.Call\"/>(\"f\",context)</c></term></item>\r\n    /// </list>\r\n    /// Before a function or a method is called arguments are pushed <c>context.<see cref=\"ScriptContext.Stack\"/></c>\r\n    /// by <see cref=\"PhpStack.AddFrame\"/>. Operators stated in the table above are used only if the function/method\r\n    /// being called is not known at the compile time. Otherwise, direct call to the function/method is emitted.\r\n    /// </para>\r\n    /// \r\n    /// <!-- chained operators ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <B>Chained operators</B>\r\n    /// \r\n    /// <para>\r\n    /// Several patterns are possible:\r\n    /// <list type=\"number\">\r\n    ///   <item><c>x = chain</c> - chain is <I>read</I>,</item>\r\n    ///   <item><c>chain = y</c> - chain is <I>written</I>,</item>\r\n    ///   <item><c>x =&amp; chain</c> - chain is <I>written</I>,</item>\r\n    ///   <item><c>chain =&amp; y</c> - chain is <I>written</I>,</item>\r\n    /// </list>\r\n    /// where <c>chain</c> is a sequence of item and/or member operators <c>[u]</c>, <c>[]</c>, <c>{u}</c>, <c>->v</c>\r\n    /// at least 2 operators long. The first operator can also be a function call operator or a static property access \r\n    /// operator. The last operator can be method call operator.\r\n    /// As of PHP 5 method call operator <c>()</c> can be also chained and a static method call can be the first\r\n    /// operation in the chain.\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// It's suitable to decompose a chain into three parts for its compilation.\r\n    /// </para>\r\n    /// \r\n    /// Possible occurences of operators in the chain:\r\n    /// <DIV class=\"tablediv\" id=\"\">\r\n    /// <TABLE class=\"dtTABLE\" cellspacing=\"0\">\r\n    ///   <TR>\r\n    ///     <TH></TH>\r\n    ///     <TH>Chain is <I>read</I></TH>\r\n    ///     <TH>Chain is <I>written</I></TH>\r\n    ///   </TR>\r\n    ///   <TR>\r\n    ///     <TD>first</TD>\r\n    ///     <TD><c>x[y], x{y}, x->y, x->f(), f(), A::$x, A::f()</c></TD>\r\n    ///     <TD><c>x[], x[y], x{y}, x->y, x->f(), f(), A::$x, A::f()</c></TD>\r\n    ///   </TR>    \r\n    ///   <TR>\r\n    ///     <TD>middle</TD>\r\n    ///     <TD><c>x[y], x{y}, x->y, x->f()</c></TD>\r\n    ///     <TD><c>x[], x[y], x{y}, x->y, x->f()</c></TD>\r\n    ///   </TR>    \r\n    ///   <TR>\r\n    ///     <TD>last</TD>\r\n    ///     <TD><c>x[y], x{y}, x->y, x->f()</c></TD>\r\n    ///     <TD><c>x[], x[y], x{y}, x->y</c></TD>\r\n    ///   </TR>    \r\n    /// </TABLE>\r\n    /// </DIV>\r\n    /// \r\n    /// <para>\r\n    /// Example 1: <code>a[k1][k2]->k3->k4</code>\r\n    /// Example 2: <code>a[k1][]->k2->k3[k4]</code>\r\n    /// Example 3: <code>A::$x[k1]->f(arg)->x</code>\r\n    /// Example 4: <code>g()->x->h()</code>\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// If a chain is <I>read</I> and if any item/property listed doesn't exist in the appropriate array/object the result \r\n    /// will be a <B>null</B> reference. In the case the chain is <I>written</I> and some item or property should \r\n    /// be an array (bacause it is followed by <c>[]</c> or <c>{}</c> operator in the chain) but it is \r\n    /// empty in the terms of <see cref=\"IsEmptyForEnsure\"/> then such item/property is replaced by a new empty array.\r\n    /// If some item or property should be a PHP object (bacause it is followed by <c>-&gt;</c> operator in the chain) but it is \r\n    /// empty in the terms of <see cref=\"IsEmptyForEnsure\"/> then such item/property is replaced by a new instance of \r\n    /// <see cref=\"PHP.Library.stdClass\"/>. However, a static property is not created if doesn't exist (an error is reported).\r\n    /// </para>\r\n    /// \r\n    /// <!-- chain reading ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// Chain reading:\r\n    /// <para>\r\n    /// It is a fatal error if there is a [] operator without a key in a chain which is read.\r\n    /// If the chain doesn't contain any such operator it is compiled as a sequence of <see cref=\"GetItem\"/>, \r\n    /// <see cref=\"GetProperty\"/>, <see cref=\"GetStaticProperty\"/> operators and function and method calls.\r\n    /// </para>\r\n    /// \r\n    /// The chain from the first example will be compiled as follows (<c>x = a[k1][k2]->k3->k4</c>):\r\n    /// <code>\r\n    /// x = PhpVariable.Copy(\r\n    ///     GetProperty(\r\n    ///     GetProperty(\r\n    ///     GetItem(\r\n    ///     GetItem(a,k1,false),k2,false),k3,type_handle,false),k4,type_handle,false),CopyReason.Assigned);\r\n    /// </code>\r\n    /// \r\n    /// The chain in the fourth example stated above is compiled as follows (<c>x = g()->x->h()</c>,\r\n    /// assuming declarations <c>function g() {...}</c> and <c>function h() {...}</c> for example):\r\n    /// <code>\r\n    /// x = PhpVariable.Copy(\r\n    ///     Operators.InvokeMethod(\r\n    ///     Operators.GetProperty(\r\n    ///     g(),\"x\",type_handle),\"h\",type_handle),CopyReason.Assigned);\r\n    /// </code>\r\n    /// \r\n    /// <!-- chain writting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// Chain writing:\r\n    /// <para>\r\n    /// Chain which is written and contains function/method calls can be divided into subchains which \r\n    /// doesn't contain function calls in the middle. Subchaines are compiled separately as described below.\r\n    /// Because subchains and chains not containing function/method calls are compiled in the same way,\r\n    /// only the compilation of chains is described below.\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// Lets follow the chain decomposition:\r\n    /// <list type=\"bullet\">\r\n    ///   <item>\r\n    ///     The first operator in the chain ensures that a variable or a static property which it is applied on is \r\n    ///     an array or an object. It is implemented by <see cref=\"EnsureVariableIsArray\"/>, \r\n    ///     <see cref=\"EnsureVariableIsObject\"/>, <see cref=\"EnsureStaticPropertyIsArray\"/> or \r\n    ///     <see cref=\"EnsureStaticPropertyIsObject\"/>.\r\n    ///   </item>\r\n    ///   <item>\r\n    ///     The next operators up to the last but one ensures that an item or a property on which it is used is an \r\n    ///     array or an object and is implemented by <see cref=\"PhpArray.EnsureItemIsArray\"/>, <see cref=\"PhpArray.EnsureItemIsObject\"/>,\r\n    ///     <see cref=\"EnsurePropertyIsArray\"/>, or <see cref=\"EnsurePropertyIsObject\"/>. \r\n    ///   </item>\r\n    ///   <item>\r\n    ///     The last operator sets or gets the resulting value of the chain. It is implemented by \r\n    ///     <see cref=\"PhpArray.GetArrayItem\"/>, <see cref=\"PhpArray.GetArrayItemRef\"/>, <see cref=\"GetObjectProperty\"/>, \r\n    ///     <see cref=\"GetObjectPropertyRef\"/>, <see cref=\"PhpArray.SetArrayItem\"/>, <see cref=\"PhpArray.SetArrayItemRef\"/>, \r\n    ///     <see cref=\"SetObjectProperty\"/>, by a function/method call.\r\n    ///     These methods takes an argument of a particular type which is determined by the previous operator.\r\n    ///   </item>\r\n    /// </list>\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// Each \"Ensure\" operator returns the requested item/property (possibly creates a new one if not exists or the existing \r\n    /// is empty in the terms of <see cref=\"IsEmptyForEnsure\"/>). This returned value is passed to the next operator \r\n    /// in the chain. PhpArray.<see cref=\"PhpHashtable.Add(object)\"/> operator always adds a new item to an array on \r\n    /// which is applied. The result passed to the next is the item added. The pattern is \r\n    /// <code>array.Add({result} = new PhpArray());</code>\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// The chain in the second example stated above is compiled as follows (<c>a[k1][]->k2->k3[k4] = x</c>):\r\n    /// <code>\r\n    /// PhpArray a1,a2; \r\n    /// DObject o1,o2;\r\n    /// a1 = Operators.EnsureVariableIsArray(ref a);       \r\n    /// if (a1 == null) goto end;\r\n    /// a1 = Operators.EnsureItemIsArray(a1,k1);\r\n    /// if (a1 == null) goto end;\r\n    /// a1.Add(o2 = stdClass.CreateDefaultObject(context));  \r\n    /// o1 = Operators.EnsurePropertyIsObject(o2,k2,context);\r\n    /// if (o1 == null) goto end;\r\n    /// a2 = Operators.EnsurePropertyIsArray(o1,k3);\r\n    /// if (a2 == null) goto end;\r\n    /// Operators.SetArrayItem(a2,k4,PhpVariable.Copy(x,CopyReason.Assignment));\r\n    /// end:\r\n    /// </code>\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// The chain in the third example stated above is compiled as follows (<c>A::$x[k1]->f(arg)->x =&amp; x</c>,\r\n    /// assuming declaration <c>function&amp; f($a) {...}</c> for example):\r\n    /// <code>\r\n    /// // the first subchain:\r\n    /// PhpArray a1;\r\n    /// DObject o1;\r\n    /// a1 = Operators.EnsureStaticPropertyIsArray(\"A\",\"x\",type_handle,context);\r\n    /// if (a1 == null) goto end;\r\n    /// o1 = a1.EnsureItemIsObject(k1,context);\r\n    /// if (o1 == null) goto end;\r\n    /// \r\n    /// // an ordinary PHP method call:\r\n    /// PhpReference r1;\r\n    /// context.Stack.AddFrame(arg);\r\n    /// r1 = Operators.InvokeMethod(o1,\"f\",type_handle);\r\n    /// \r\n    /// // the second subchain:\r\n    /// DObject o2;\r\n    /// o2 = Operators.EnsureVariableIsObject(ref r1.value,context);\r\n    /// if (o2 == null) goto end;\r\n    /// Operators.SetObjectProperty(o2,\"x\",x,type_handle);\r\n    /// end:\r\n    /// </code>\r\n    /// </para> \r\n    /// \r\n    /// <!-- array ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <B>Array construction</B>\r\n    /// <para>\r\n    /// The array keyword is used to create a new instance of PHP array (<see cref=\"PhpArray\"/>).\r\n    /// It takes a sequence of key-value pairs and/or single values. Both keys and values \r\n    /// can be expressions. Moreover, a value can be preceded by the reference modifier (&amp;) \r\n    /// allowing values to be added to the resulting array as references.\r\n    /// </para>\r\n    /// \r\n    /// <para>\r\n    /// The <c>array</c> construct is implemented by construction a new <see cref=\"PhpArray\"/> <c>a</c> in which\r\n    /// entries are added as described in the following table.\r\n    /// <list type=\"table\">\r\n    /// <listheader><term>Array construction element</term><description>Implementation</description></listheader>\r\n    ///   <item><term><c>x => y</c></term><term><c><see cref=\"PhpArray.SetArrayItem\"/>(a,x,PhpVariable.<see cref=\"PhpVariable.Copy\"/>(y,CopyReason.<see cref=\"CopyReason.Assigned\"/>))</c></term></item>\r\n    ///   <item><term><c>x =>&amp; p</c></term><term><c><see cref=\"PhpArray.SetArrayItemRef\"/>(a,x,p)</c></term></item>\r\n    ///   <item><term><c>x</c></term><term><c>a.<see cref=\"PhpHashtable.Add(object)\"/>(PhpVariable.<see cref=\"PhpVariable.Copy\"/>(x,CopyReason.<see cref=\"CopyReason.Assigned\"/>))</c></term></item>\r\n    /// </list> \r\n    /// </para>\r\n    /// \r\n    /// <!-- list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <B>List language construct</B>\r\n    /// <para>\r\n    /// The <c>list</c> language construct is a shorthand for several assignments of array items.\r\n    /// It can be used only on the left hand side of the = operator.\r\n    /// Statement \r\n    /// <code>list(&lt;rw_expr_1&gt;,...,&lt;rw_expr_k&gt;) = &lt;expression&gt;</code>\r\n    /// is implemented as a sequence of <see cref=\"PhpArray.GetArrayItem(object, bool)\"/> and \r\n    /// PHP assignments if the rhs is an array (see operators = on variable, array item and object property in tables above).\r\n    /// Otherwise, a <B>null</B> reference is assigned to each expression on the lhs.\r\n    /// Sequence is in reverse order then it is stated in the list \"arguments\", i.e. the first\r\n    /// item assigned is the last one in the list. Right hand side expression is evaluated\r\n    /// once before assignments take place.\r\n    /// </para>\r\n    /// \r\n    /// <!-- $$x ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->\r\n    /// \r\n    /// <para>\r\n    /// <list type=\"table\">\r\n    /// <listheader><term>Indirect variable access</term><description>Implementation</description></listheader>\r\n    ///   <item><term><c>$$x</c></term><term><c><see cref=\"Operators.GetVariable\"/>(variables_table,x)</c></term></item>\r\n    ///   <item><term><c>$$x = y</c></term><term><c><see cref=\"Operators.SetVariable\"/>(variables_table,x,PhpVariable.<see cref=\"PhpVariable.Copy\"/>(y,CopyReason.<see cref=\"CopyReason.Assigned\"/>))</c></term></item>\r\n    ///   <item><term><c>$$x =&amp; p</c></term><term><c><see cref=\"Operators.SetVariableRef\"/>(variables_table,x,p)</c></term></item>\r\n    ///   <item><term><c>p =&amp; $$x</c></term><term><c>p = <see cref=\"Operators.GetVariableRef\"/>(variables_table,x)</c></term></item>\r\n    ///   <item><term><c>isset($$x)</c></term><term><c><see cref=\"Operators.GetVariableUnchecked\"/>(variables_table,x) != null</c></term></item>\r\n    ///   <item><term><c>unset($$x)</c></term><term><c>variables_table.<see cref=\"IDictionary.Remove(object)\"/>(x)</c></term></item>\r\n    /// </list>\r\n    /// </para>\r\n    ///     \r\n    /// </remarks>\r\n    #endregion\r\n    [DebuggerNonUserCode]\r\n    public static class Operators\r\n    {\r\n        #region Arithmetic operators\r\n\r\n        #region Addition\r\n\r\n        /// <summary>\r\n        /// Bit mask corresponding to the sign in <see cref=\"long\"/> value.\r\n        /// </summary>\r\n        private const long LONG_SIGN_MASK = (1L << (8 * sizeof(long) - 1));\r\n\r\n        /// <summary>\r\n        /// Implements '+' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The result of type <see cref=\"PhpArray\"/>, <see cref=\"int\"/> or <see cref=\"double\"/>.\r\n        /// If both operands are of type <see cref=\"PhpArray\"/> the result is their union made by \r\n        /// <see cref=\"PhpHashtable.Unite\"/> on deep copies. \r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Addition is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static object Add(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            double dx, dy;\r\n            int ix, iy;\r\n            long lx, ly;\r\n            Convert.NumberInfo info, o1, o2;\r\n\r\n            // converts x and y to numbers:\r\n            info = (o1 = Convert.ObjectToNumber(x, out ix, out lx, out dx)) | (o2 = Convert.ObjectToNumber(y, out iy, out ly, out dy));\r\n\r\n            if ((info & (Convert.NumberInfo.IsPhpArray | Convert.NumberInfo.Unconvertible)) != 0)\r\n            {\r\n                if (\r\n                    // one of operands is unconvertible\r\n                    ((info & Convert.NumberInfo.Unconvertible) != 0) ||\r\n                    // one of operands is PhpArray\r\n                    ((o1 & Convert.NumberInfo.IsPhpArray) != (o2 & Convert.NumberInfo.IsPhpArray))\r\n                    )\r\n                {\r\n                    PhpException.UnsupportedOperandTypes();\r\n                    return 0;\r\n                }\r\n\r\n                // both are PhpArray\r\n                Debug.Assert(x is PhpArray && y is PhpArray);\r\n                return ((PhpArray)((PhpArray)x).DeepCopy()).Unite((PhpArray)((PhpArray)y).DeepCopy());\r\n            }\r\n\r\n            // at least one operand is convertible to a double:\r\n            if ((info & Convert.NumberInfo.Double) != 0)\r\n                return dx + dy;\r\n\r\n            // \r\n            long rl = unchecked(lx + ly);\r\n\r\n            if ((lx & LONG_SIGN_MASK) != (rl & LONG_SIGN_MASK) &&   // result has different sign than x\r\n                (lx & LONG_SIGN_MASK) == (ly & LONG_SIGN_MASK)      // x and y have the same sign                \r\n                )\r\n            {\r\n                // overflow:\r\n                return dx + dy;\r\n            }\r\n            else\r\n            {\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n\t            if ( il == rl )\r\n                    return il;\r\n                    \r\n                // we need long\r\n                return rl;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements '+' operator optimized for addition with integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Addition is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static object Add(object x, int y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            Convert.NumberInfo info_x;\r\n\r\n            // converts x to a number:\r\n            info_x = Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            if ((info_x & (Convert.NumberInfo.Unconvertible|Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            if ((info_x & Convert.NumberInfo.Double) != 0)\r\n                return dx + y;\r\n\r\n            try\r\n            {\r\n                long rl = lx + y;\r\n\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n                if (il == rl)\r\n                    return il;\r\n\r\n                // we need long\r\n                return rl;\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                return dx + y;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements '+' operator optimized for addition with double literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The result of addition.\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Addition is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static double Add(object x, double y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n\r\n            // converts x to a number:\r\n            if ((Convert.ObjectToNumber(x, out ix, out lx, out dx) & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            return dx + y;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements '+' operator optimized for addition with double literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The result of addition.\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Addition is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static double Add(double x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n\r\n            // converts x to a number:\r\n            if ((Convert.ObjectToNumber(y, out iy, out ly, out dy) & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            return x + dy;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Subtraction\r\n\r\n        /// <summary>\r\n        /// Implements binary '-' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Subtraction is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static object Subtract(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            double dx, dy;\r\n            int ix, iy;\r\n            long lx, ly;\r\n            Convert.NumberInfo info;\r\n\r\n            // converts x and y to numbers:\r\n            info = Convert.ObjectToNumber(x, out ix, out lx, out dx) | Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            if ((info & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            // at least one operand is convertible to a double:\r\n            if ((info & Convert.NumberInfo.Double) != 0)\r\n                return dx - dy;\r\n\r\n            // \r\n            long rl = unchecked(lx - ly);\r\n\r\n            if ((lx & LONG_SIGN_MASK) != (rl & LONG_SIGN_MASK) &&   // result has different sign than x\r\n                (lx & LONG_SIGN_MASK) != (ly & LONG_SIGN_MASK)      // x and y have the same sign                \r\n                )\r\n            {\r\n                // overflow:\r\n                return dx - dy;\r\n            }\r\n            else\r\n            {\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n                if (il == rl)\r\n                    return il;\r\n\r\n                // we need long\r\n                return rl;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '-' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"iy\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Subtraction is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static object Subtract(object x, int iy)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            Convert.NumberInfo info;\r\n\r\n            // converts x and y to numbers:\r\n            info = Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            if ((info & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            // at least one operand is convertible to a double:\r\n            if ((info & Convert.NumberInfo.Double) != 0)\r\n                return dx - (double)iy;\r\n\r\n            // \r\n            long rl = unchecked(lx - iy);\r\n\r\n            if ((lx & LONG_SIGN_MASK) != (rl & LONG_SIGN_MASK) &&   // result has different sign than x\r\n                (lx & LONG_SIGN_MASK) != ((long)iy & LONG_SIGN_MASK)      // x and y have the same sign                \r\n                )\r\n            {\r\n                // overflow:\r\n                return dx - (double)iy;\r\n            }\r\n            else\r\n            {\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n                if (il == rl)\r\n                    return il;\r\n\r\n                // we need long\r\n                return rl;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '-' operator optimized for subtraction from an integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Subtraction is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static object Subtract(int x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n            Convert.NumberInfo info_y;\r\n\r\n            // converts x to a number:\r\n            info_y = Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            if ((info_y & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            if ((info_y & Convert.NumberInfo.Double) != 0)\r\n                return (double)x - dy;\r\n\r\n            try\r\n            {\r\n                long rl = (long)x - ly;\r\n\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n                if (il == rl)\r\n                    return il;\r\n\r\n                // we need long\r\n                return rl;\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                return (double)x - dy;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '-' operator optimized for subtraction from a double literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <exception cref=\"PhpException\">Subtraction is not supported on the types of operands specified.</exception>\r\n        [Emitted]\r\n        public static double Subtract(double x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n\r\n            // converts x to a number:\r\n            if ((Convert.ObjectToNumber(y, out iy, out ly, out dy) & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            return x - dy;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Unary plus & minus\r\n\r\n        /// <summary>\r\n        /// Implements unary '-' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static object Minus(object x)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            \r\n            switch (Convert.ObjectToNumber(x, out ix, out lx, out dx) & (Convert.NumberInfo.TypeMask | Convert.NumberInfo.IsPhpArray))  // IsPhpArray causes unsupported_operand_types\r\n            {\r\n                case Convert.NumberInfo.Integer:\r\n                    if (ix == Int32.MinValue)\r\n                        return -(long)Int32.MinValue;\r\n                    else\r\n                        return -ix;\r\n\r\n                case Convert.NumberInfo.LongInteger:\r\n                    if (lx == Int64.MinValue)\r\n                        return -(double)Int64.MinValue;\r\n                    else\r\n                    {\r\n                        if (lx == (-(long)Int32.MinValue))\r\n                            return (int)Int32.MinValue;\r\n\r\n                        return -lx;\r\n                    }\r\n\r\n                case Convert.NumberInfo.Double:\r\n                    return -dx;\r\n            }\r\n\r\n            PhpException.UnsupportedOperandTypes();\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements unary '+' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static object Plus(object x)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n              // IsPhpArray causes unsupported_operand_types\r\n            switch (Convert.ObjectToNumber(x, out ix, out lx, out dx) & (Convert.NumberInfo.TypeMask | Convert.NumberInfo.IsPhpArray))  // IsPhpArray causes unsupported_operand_types\r\n            {\r\n                case Convert.NumberInfo.Integer: return ix;\r\n                case Convert.NumberInfo.LongInteger: return lx;\r\n                case Convert.NumberInfo.Double: return dx;\r\n            }\r\n\r\n            PhpException.UnsupportedOperandTypes();\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Division\r\n\r\n        /// <summary>\r\n        /// Implements the binary '/' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Division is not supported on the types of operands specified.</exception>\r\n        /// <exception cref=\"PhpException\">Division by zero.</exception>\r\n        [Emitted]\r\n        public static object Divide(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            double dx, dy;\r\n            int ix, iy;\r\n            long lx, ly;\r\n            Convert.NumberInfo info;\r\n\r\n            info = Convert.ObjectToNumber(x, out ix, out lx, out dx) | Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            if ((info & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            // at least one operand was converted to double:\r\n            if ((info & Convert.NumberInfo.Double) != 0)\r\n                return dx / dy;\r\n\r\n            // division by zero:\r\n            if (iy == 0)\r\n            {\r\n                Debug.Assert(ly == 0);\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"division_by_zero\"));\r\n                return false;\r\n            }\r\n\r\n            // overflow to double:\r\n            if (iy == -1 && lx == Int64.MinValue)\r\n                return -(double)Int64.MinValue;\r\n\r\n            long reminder;\r\n            long result = MathEx.DivRem(lx, ly, out reminder);\r\n\r\n            if (reminder != 0)\r\n                return dx / dy;\r\n\r\n            // int to long overflow check\r\n            int il = unchecked((int)result);\r\n            if (il == result)\r\n                return il;\r\n\r\n            // we need long\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements the binary '/' operator optimized for division by an integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Division is not supported on the types of operands specified.</exception>\r\n        /// <exception cref=\"DivideByZeroException\">Division by zero.</exception>\r\n        [Emitted]\r\n        public static object Divide(object x, int y)\r\n        {\r\n            Debug.Assert(y != 0, \"Compiler should check this\");\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            Convert.NumberInfo info_x;\r\n\r\n            info_x = Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            // at least one operand was converted to double:\r\n            if ((info_x & Convert.NumberInfo.Double) != 0)\r\n                return dx / y;\r\n\r\n            if ((info_x & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {   // test PhpArray, after Double (PhpArray is not converted to Double and we may spare this test)\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n            \r\n            // overflow to double:\r\n            if (y == -1 && lx == Int64.MinValue)\r\n                return -(double)Int64.MinValue;\r\n\r\n            long reminder;\r\n            long result = MathEx.DivRem(lx, y, out reminder);\r\n\r\n            if (reminder != 0)\r\n                return dx / y;\r\n\r\n            // int to long overflow check\r\n            int il = unchecked((int)result);\r\n            if (il == result)\r\n                return il;\r\n\r\n            // we need long\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements the binary '/' operator optimized for division by a double literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of division.</returns>\r\n        /// <exception cref=\"PhpException\">Division is not supported on the types of operands specified.</exception>\r\n        /// <exception cref=\"PhpException\">Division by zero.</exception>\r\n        [Emitted]\r\n        public static double Divide(object x, double y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n\r\n            if ((Convert.ObjectToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            return dx / y;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements the binary '/' operator optimized for division of an integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">Division is not supported on the types of operands specified.</exception>\r\n        /// <exception cref=\"PhpException\">Division by zero.</exception>\r\n        [Emitted]\r\n        public static object Divide(int x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n            Convert.NumberInfo info_y;\r\n\r\n            info_y = Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            // at least one operand was converted to double:\r\n            if ((info_y & Convert.NumberInfo.Double) != 0)\r\n                return (double)x / dy;\r\n\r\n            if ((info_y & Convert.NumberInfo.IsPhpArray) != 0)  // test PhpArray (after test for Double, PhpArray cannot be double, and it is rare case)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            long reminder;\r\n\r\n            // division by zero:\r\n            if (iy == 0)\r\n            {\r\n                Debug.Assert(ly == 0);\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"division_by_zero\"));\r\n                return false;\r\n            }\r\n            long result = MathEx.DivRem(x, ly, out reminder);\r\n\r\n            if (reminder != 0)\r\n                return (double)x / dy;\r\n\r\n            // int to long overflow check\r\n            int il = unchecked((int)result);\r\n            if (il == result)\r\n                return il;\r\n\r\n            // we need long\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements the binary '/' operator optimized for division of a double literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <exception cref=\"PhpException\">Division is not supported on the types of operands specified.</exception>\r\n        /// <exception cref=\"PhpException\">Division by zero.</exception>\r\n        [Emitted]\r\n        public static object Divide(double x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n\r\n            if ((Convert.ObjectToNumber(y, out iy, out ly, out dy) & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            return x / dy;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Multiplication\r\n\r\n        /// <summary>\r\n        /// Implements binary '*' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static object Multiply(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            double dx, dy;\r\n            int ix, iy;\r\n            long lx, ly;\r\n            Convert.NumberInfo info;\r\n\r\n            // converts x and y to numbers:\r\n            info = Convert.ObjectToNumber(x, out ix, out lx, out dx) | Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            if ((info & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            // at least one operand is convertible to a double:\r\n            if ((info & Convert.NumberInfo.Double) != 0)\r\n                return dx * dy;\r\n\r\n            long rl;\r\n            try\r\n            {\r\n                rl = lx * ly;\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                // we need double\r\n                return dx * dy;\r\n            }\r\n\r\n            // int to long overflow check\r\n            int il = unchecked((int)rl);\r\n            if (il == rl)\r\n                return il;\r\n\r\n            // we need long\r\n            return rl;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '*' operator optimized for multiplication with an integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result of type <see cref=\"int\"/> or <see cref=\"double\"/>.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static object Multiply(object x, int y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            Convert.NumberInfo info_x;\r\n\r\n            // converts x to a number:\r\n            info_x = Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            if ((info_x & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            if ((info_x & Convert.NumberInfo.Double) != 0)\r\n                return dx * y;\r\n\r\n            try\r\n            {\r\n                long rl = lx * y;\r\n\r\n                // int to long overflow check\r\n                int il = unchecked((int)rl);\r\n                if (il == rl)\r\n                    return il;\r\n\r\n                // we need long\r\n                return rl;\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                return dx * y;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '*' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static double Multiply(object x, double y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n\r\n            // converts x to a number:\r\n            if ((Convert.ObjectToNumber(x, out ix, out lx, out dx) & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            return dx * y;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '*' operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>The result.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static double Multiply(double x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            double dy;\r\n            int iy;\r\n            long ly;\r\n\r\n            // converts x to a number:\r\n            if ((Convert.ObjectToNumber(y, out iy, out ly, out dy) & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0.0;\r\n            }\r\n\r\n            return x * dy;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Pow\r\n\r\n        [Emitted]\r\n        public static object Pow(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            double dx, dy;\r\n            int ix, iy;\r\n            long lx, ly;\r\n            Convert.NumberInfo info;\r\n\r\n            // converts x and y to numbers:\r\n            info = Convert.ObjectToNumber(x, out ix, out lx, out dx) | Convert.ObjectToNumber(y, out iy, out ly, out dy);\r\n\r\n            if ((info & (Convert.NumberInfo.Unconvertible | Convert.NumberInfo.IsPhpArray)) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            // at least one operand is convertible to a double:\r\n            if ((info & Convert.NumberInfo.Double) != 0 || dy < 0.0)\r\n                return Math.Pow(dx, dy);\r\n\r\n            if (ly == 0) return 1;\r\n            if (lx == 0) return 0;\r\n\r\n            long rl = 1;\r\n            try\r\n            {\r\n                while (ly >= 1)\r\n                {\r\n                    if ((ly & 1) != 0)\r\n                    {\r\n                        --ly;\r\n                        rl *= lx;\r\n                    }\r\n                    else\r\n                    {\r\n                        ly /= 2;\r\n                        lx *= lx;\r\n                    }\r\n                }\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                // we need double\r\n                return Math.Pow(dx, dy);\r\n            }\r\n\r\n            // int to long overflow check\r\n            int il = unchecked((int)rl);\r\n            if (il == rl)\r\n                return il;\r\n\r\n            // we need long\r\n            return rl;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Remainder\r\n\r\n        /// <summary>\r\n        /// Implements binary % operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand of an arbitrary Phalanger type except for <see cref=\"PhpArray\"/> and <see cref=\"DObject\"/>.</param>\r\n        /// <param name=\"y\">The second operand of an arbitrary Phalanger type except for <see cref=\"PhpArray\"/> and <see cref=\"DObject\"/>.</param>\r\n        /// <returns>The result.</returns>\r\n        /// <remarks>\r\n        /// Both operands are converted to integers by <see cref=\"Convert.ObjectToInteger\"/> and then the remainder is computed.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        [Emitted]\r\n        public static object Remainder(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            int iy, ix;\r\n            long ly, lx;\r\n            double dy, dx;\r\n\r\n            if ((Convert.ObjectToNumber(y, out iy, out ly, out dy) & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return false;\r\n            }\r\n\r\n            if (iy == 0)\r\n            {\r\n                Debug.Assert(ly == 0);\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"division_by_zero\"));\r\n                return false;\r\n            }\r\n\r\n            // prevents OverflowException:\r\n            if (iy == -1)\r\n            {\r\n                Debug.Assert(ly == -1);\r\n                return 0;\r\n            }\r\n\r\n            if ((Convert.ObjectToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return false;\r\n            }\r\n\r\n            long result = lx % ly;\r\n            // int to long overflow check\r\n            int il = unchecked((int)result);\r\n            if (il == result)\r\n                return il;\r\n\r\n            // we need long\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements binary '%' operator optimized for division by an integer literal.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand of an arbitrary Phalanger type except for <see cref=\"PhpArray\"/> and <see cref=\"DObject\"/>.</param>\r\n        /// <param name=\"y\">The second operand of an arbitrary Phalanger type except for <see cref=\"PhpArray\"/> and <see cref=\"DObject\"/>.</param>\r\n        /// <returns>Both operands are converted to integers by <see cref=\"Convert.ObjectToInteger\"/> and then the remainder is computed.</returns>\r\n        /// <exception cref=\"PhpException\">The operator is not supported on the type of operand specified.</exception>\r\n        /// <exception cref=\"DivideByZeroException\"><paramref name=\"y\"/> is 0.</exception>\r\n        [Emitted]\r\n        public static object Remainder(object x, int y)\r\n        {\r\n            //Debug.Assert(y != 0, \"Compiler should check this.\");\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            int ix;\r\n            long lx;\r\n            double dx;\r\n\r\n            if (y == 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"division_by_zero\"));\r\n                return false;\r\n            }\r\n\r\n            // prevents OverflowException:\r\n            if (y == -1) return 0;\r\n\r\n            if ((Convert.ObjectToNumber(x, out ix, out lx, out dx) & Convert.NumberInfo.IsPhpArray) != 0)\r\n            {\r\n                PhpException.UnsupportedOperandTypes();\r\n                return 0;\r\n            }\r\n\r\n            long result = lx % y;\r\n            // int to long overflow check\r\n            int il = unchecked((int)result);\r\n            if (il == result)\r\n                return il;\r\n\r\n            // we need long\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Incrementing/decrementing operators\r\n\r\n        /// <summary>\r\n        /// Implements '++' unary operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The operand.</param>\r\n        /// <returns>\r\n        /// The incremented value of type <see cref=\"int\"/>, <see cref=\"double\"/> or <see cref=\"string\"/>.\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Incrementing is not supported on the type of operand specified. (Error)</exception>\r\n        /// <remarks>\r\n        /// Split to fast path (int32) and other types (<see cref=\"IncrementNonInt\"/>) to be small enough\r\n        /// to be inlined by JIT.\r\n        /// </remarks>\r\n        [Emitted]\r\n        public static object Increment(object x)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            if (x != null && x.GetType() == typeof(int))\r\n            {\r\n                int i = (int)x;\r\n                return (i == int.MaxValue) ? (object)((long)int.MaxValue + 1) : (i+1);\r\n            }\r\n            else\r\n            {\r\n                return IncrementNonInt(x);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Increments an operand which is surely not <see cref=\"int\"/>.\r\n        /// </summary>\r\n        private static object IncrementNonInt(object x)\r\n        {\r\n            if (x == null)\r\n                return 1;\r\n\r\n            if (x.GetType() == typeof(long))\r\n            {\r\n                long i;\r\n                return ((i = (long)x) == long.MaxValue) ? (object)((double)long.MaxValue + 1.0) : (object)unchecked(i + 1);\r\n            }\r\n\r\n            if (x.GetType() == typeof(double))\r\n                return (double)x + 1;\r\n\r\n            string s;\r\n            if ((s = PhpVariable.AsString(x)) != null)\r\n                return StringUtils.Increment(s);\r\n\r\n            // PHP really doesn't do anything here:\r\n            if (x.GetType() == typeof(bool))\r\n                return x;\r\n\r\n            // Other types are not supported (PHP returns x, but we want to prevent copying).\r\n            // Although, it would be possible to return a deep copy of x it is quite strange to increment objects or arrays: \r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"unsupported_operand_type\"));\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements '--' unary operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The operand.</param>\r\n        /// <returns>\r\n        /// The incremented value of type <see cref=\"int\"/>, <see cref=\"double\"/> or <see cref=\"string\"/>.\r\n        /// </returns>\r\n        /// <exception cref=\"PhpException\">Decrementing is not supported on the type of operand specified. (Error)</exception>\r\n        [Emitted]\r\n        public static object Decrement(object x)\r\n        {\r\n            string s;\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            if (x == null)\r\n                return null;\r\n\r\n            if (x.GetType() == typeof(int))\r\n            {\r\n                int i = (int)x;\r\n                if (i == int.MinValue)\r\n                    return (long)i - 1.0;\r\n                else\r\n                    return i - 1;\r\n            }\r\n\r\n            if (x.GetType() == typeof(long))\r\n            {\r\n                long i = (long)x;\r\n                if (i == long.MinValue)\r\n                    return (double)i - 1.0;\r\n                else\r\n                    return i - 1;\r\n            }\r\n\r\n            if (x.GetType() == typeof(double))\r\n                return (double)x - 1.0;\r\n\r\n            if ((s = PhpVariable.AsString(x)) != null)\r\n                return DecrementString(s);\r\n\r\n            // PHP really doesn't do anything here:\r\n            if (x.GetType() == typeof(bool))\r\n                return x;\r\n\r\n            // Other types are not supported (PHP returns x, but we want to prevent copying).\r\n            // Although, it would be possible to return a deep copy of x it is quite strange to increment objects or arrays: \r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"unsupported_operand_type\"));\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Decrements a string.\r\n        /// </summary>\r\n        /// <param name=\"s\">The string to decrement.</param>\r\n        /// <returns>The result.</returns>\r\n        private static object DecrementString(string/*!*/ s)\r\n        {\r\n            Debug.Assert(s != null);\r\n\r\n            double dx;\r\n            int ix;\r\n            long lx;\r\n            Convert.NumberInfo info;\r\n\r\n            info = Convert.StringToNumber(s, out ix, out lx, out dx);\r\n\r\n            if ((info & Convert.NumberInfo.IsNumber) != 0)\r\n            {\r\n                switch (info & Convert.NumberInfo.TypeMask)\r\n                {\r\n                    case Convert.NumberInfo.Double: return dx - 1.0;\r\n\r\n                    case Convert.NumberInfo.Integer:\r\n                        if (ix == int.MinValue)\r\n                            return lx - 1.0;\r\n                        else\r\n                            return ix - 1;\r\n\r\n                    case Convert.NumberInfo.LongInteger:\r\n                        if (lx == long.MinValue)\r\n                            return dx - 1.0;\r\n                        else\r\n                            return ix - 1;\r\n                }\r\n            }\r\n\r\n            // does nothing with the \"s\":\r\n            return s;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Bitwise operators\r\n\r\n        /// <summary>\r\n        /// Type of bitwise operation.\r\n        /// </summary>\r\n        public enum BitOp\r\n        {\r\n            /// <summary>Bitwise and binary operation.</summary>\r\n            And,\r\n            /// <summary>Bitwise or binary operation.</summary>\r\n            Or,\r\n            /// <summary>Bitwise xor binary operation.</summary>\r\n            Xor\r\n        };\r\n\r\n        /// <summary>\r\n        /// Performs bitwise binary operators.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand of an arbitrary PHP.NET type.</param>\r\n        /// <param name=\"y\">The sencond operand of an arbitrary PHP.NET type.</param>\r\n        /// <param name=\"op\">The type of the operation.</param>\r\n        /// <returns>See the following table.</returns>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If the type of any operand is neither <see cref=\"String\"/> nor <see cref=\"Byte\"/>[] and it isn't convertible to an integer.\r\n        /// </exception>\r\n        [Emitted]\r\n        public static object BitOperation(object x, object y, BitOp op)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            PhpBytes bx, by;\r\n\r\n            if ((bx = PhpVariable.AsBytes(x)) == null || (by = PhpVariable.AsBytes(y)) == null)\r\n            {\r\n                // at least one of the operands is not string of characters nor string of bytes:\r\n                long lx = Convert.ObjectToLongInteger(x);\r\n                long ly = Convert.ObjectToLongInteger(y);\r\n                long result;\r\n\r\n                switch (op)\r\n                {\r\n                    case BitOp.And: result = lx & ly; break;\r\n                    case BitOp.Or: result = lx | ly; break;\r\n                    case BitOp.Xor: result = lx ^ ly; break;\r\n                    default:\r\n                        throw new ArgumentOutOfRangeException(\"op\");\r\n                }\r\n\r\n                // int to long overflow check\r\n                int il = unchecked((int)result);\r\n                if (il == result)\r\n                    return il;\r\n\r\n                // we need long\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                byte[] result;\r\n                int length = (op == BitOp.Or) ? Math.Max(bx.Length, by.Length) : Math.Min(bx.Length, by.Length);\r\n\r\n                // chooses the resulting array allocating a new one only if necessary;\r\n                // if x or y has been converted from string to bytes and has the max. length it can be used for\r\n                // storing a resulting array:\r\n                if (!ReferenceEquals(bx, x) && bx.Length == length)\r\n                    result = bx.Data;// bx is temporary PhpBytes instance, its internal data can be reused\r\n                else if (!ReferenceEquals(by, y) && by.Data.Length == length)\r\n                    result = by.Data;// by is temporary PhpBytes instance, its internal data can be reused\r\n                else\r\n                    result = new byte[length];\r\n\r\n                return new PhpBytes(BitOperation(result, bx.ReadonlyData, by.ReadonlyData, op));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs specified binary operation on arrays of bytes.\r\n        /// </summary>\r\n        /// <param name=\"result\">An array where to store the result. Data previously stored here will be overwritten.</param>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand</param>\r\n        /// <param name=\"op\">The operation to perform.</param>\r\n        /// <returns>The reference to the the <paramref name=\"result\"/> array.</returns>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"op\"/> has invalid value.</exception>\r\n        private static byte[] BitOperation(byte[]/*!*/ result, byte[]/*!*/ x, byte[]/*!*/ y, BitOp op)\r\n        {\r\n            int min_length = Math.Min(x.Length, y.Length);\r\n\r\n            Debug.Assert(result != null && x != null && y != null && result.Length >= min_length);\r\n\r\n            switch (op)\r\n            {\r\n                case BitOp.And:\r\n\r\n                    for (int i = 0; i < min_length; i++)\r\n                        result[i] = unchecked((byte)(x[i] & y[i]));\r\n\r\n                    // remaining bytes are ignored //          \r\n                    break;\r\n\r\n                case BitOp.Or:\r\n\r\n                    for (int i = 0; i < min_length; i++)\r\n                        result[i] = unchecked((byte)(x[i] | y[i]));\r\n\r\n                    // copies remaining bytes from longer array:\r\n                    if (x.Length > min_length)\r\n                    {\r\n                        if (x != result) Buffer.BlockCopy(x, min_length, result, min_length, result.Length - min_length);\r\n                    }\r\n                    else\r\n                    {\r\n                        if (y != result) Buffer.BlockCopy(y, min_length, result, min_length, result.Length - min_length);\r\n                    }\r\n                    break;\r\n\r\n                case BitOp.Xor:\r\n\r\n                    for (int i = 0; i < min_length; i++)\r\n                        result[i] = unchecked((byte)(x[i] ^ y[i]));\r\n\r\n                    // remaining bytes are ignored //\r\n                    break;\r\n\r\n                default:\r\n                    throw new ArgumentOutOfRangeException(\"op\");\r\n            }\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs the '~' unary operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The operand of type <see cref=\"Double\"/>, <see cref=\"Int32\"/>, <see cref=\"String\"/> or <see cref=\"Byte\"/>[].</param>\r\n        /// <returns>See the following table.</returns>\r\n        /// <include file='Doc/Operators.xml' path='docs/operator[@name=\"BitNot\"]/*'/>\r\n        /// <exception cref=\"PhpException\">If <paramref name=\"x\"/> has illegal type.</exception>\r\n        [Emitted]\r\n        public static object BitNot(object x)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            if (x == null)\r\n                return null;\r\n\r\n            PhpBytes bx;\r\n\r\n            if (x.GetType() == typeof(int))\r\n                return ~(int)x;\r\n\r\n            if (x.GetType() == typeof(long))\r\n                return ~(long)x;\r\n\r\n            if (x.GetType() == typeof(double))\r\n                return ~unchecked((long)(double)x);\r\n\r\n            if ((bx = PhpVariable.AsBytes(x)) != null)\r\n            {\r\n                // allocates an array for result if it is needed:\r\n                PhpBytes result = (ReferenceEquals(x, bx)) ? new PhpBytes(new byte[bx.Length]) : bx;\r\n\r\n                for (int i = 0; i < result.Length; i++)\r\n                    result.Data[i] = unchecked((byte)~bx.ReadonlyData[i]);\r\n\r\n                return result;\r\n            }\r\n\r\n\r\n            PhpException.UnsupportedOperandTypes();\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs shift left binary operation.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first argument of an arbitrary PHP.NET type.</param>\r\n        /// <param name=\"y\">The second argument of an arbitrary PHP.NET type.</param>\r\n        /// <returns>The <paramref name=\"x\"/> shifted by <paramref name=\"y\"/> modulo 32 bits.</returns>\r\n        [Emitted]\r\n        public static object ShiftLeft(object x, object y)\r\n        {\r\n            int ix;\r\n            long lx;\r\n            double dx;\r\n\r\n            int iy = Convert.ObjectToInteger(y);\r\n            Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            long rl = unchecked(lx << iy);\r\n\r\n            // int -> long overflow?\r\n            int il = unchecked((int)rl);\r\n            if (il == rl)\r\n                return il;  // int is enought\r\n            \r\n            return rl;      // long result\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs shift right binary operation.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first argument of an arbitrary PHP.NET type.</param>\r\n        /// <param name=\"y\">The second argument of an arbitrary PHP.NET type.</param>\r\n        /// <returns>The <paramref name=\"x\"/> shifted by <paramref name=\"y\"/> modulo 32 bits.</returns>\r\n        [Emitted]\r\n        public static object ShiftRight(object x, object y)\r\n        {\r\n            int ix;\r\n            long lx;\r\n            double dx;\r\n\r\n            int iy = Convert.ObjectToInteger(y);\r\n            Convert.ObjectToNumber(x, out ix, out lx, out dx);\r\n\r\n            long rl = unchecked(lx >> iy);\r\n\r\n            // long -> int?\r\n            int il = unchecked((int)rl);\r\n            if (il == rl)\r\n                return il;  // int is enought\r\n\r\n            return rl;      // long result\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region String operators\r\n\r\n        #region Concat\r\n\r\n        /// <summary>\r\n        /// Converts <paramref name=\"x\"/> to most suitable PHP representation of string.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        /// <returns></returns>\r\n        private static object AsAnyString(object x)\r\n        {\r\n            if (x == null) return string.Empty;\r\n            if (x.GetType() == typeof(string) ||\r\n                x.GetType() == typeof(PhpBytes) ||\r\n                x.GetType() == typeof(PhpString))\r\n                return x;\r\n\r\n            return Convert.ObjectToString(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates two strings or strings of bytes.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>A concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).</returns>\r\n        [Emitted]\r\n        public static object Concat(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            // catch null references:\r\n            if (x == null) return AsAnyString(y);\r\n            if (y == null) return AsAnyString(x);\r\n\r\n            // concatenate surely not null values:\r\n            if (x.GetType() == typeof(string) && y.GetType() == typeof(string))\r\n                return string.Concat((string)x, (string)y);\r\n\r\n            if (x.GetType() == typeof(PhpBytes))\r\n            {\r\n                if (y.GetType() == typeof(PhpBytes))\r\n                    return PhpBytes.Concat((PhpBytes)x, (PhpBytes)y);\r\n\r\n                // bytes.object\r\n                return PhpBytes.Concat((PhpBytes)x, Convert.ObjectToPhpBytes(y));\r\n            }\r\n            else if (y.GetType() == typeof(PhpBytes))\r\n            {\r\n                // object.bytes\r\n                return PhpBytes.Concat(Convert.ObjectToPhpBytes(x), (PhpBytes)y);\r\n            }\r\n            else\r\n            {\r\n                // object.object:\r\n                return String.Concat(Convert.ObjectToString(x), Convert.ObjectToString(y));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates strings or strings of bytes optimized for concatenation with a string.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Concat(object x, string y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n            Debug.Assert(y != null);\r\n\r\n            if (x == null)\r\n                return y;\r\n\r\n            if (x.GetType() == typeof(string))\r\n                return String.Concat((string)x, y);\r\n\r\n            if (x.GetType() == typeof(PhpBytes))\r\n                return PhpBytes.Concat((PhpBytes)x, new PhpBytes(y));\r\n\r\n            if (x.GetType() == typeof(PhpString))\r\n            {\r\n                var bld = ((PhpString)x).StringBuilder;\r\n                if (bld.Length == 0) return y;\r\n                return String.Concat(bld.ToString(), y);\r\n            }\r\n            \r\n            return String.Concat(Convert.ObjectToString(x), y);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates two strings or strings of bytes optimized for concatenation with a string.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Concat(string x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n            Debug.Assert(x != null);\r\n\r\n            if (y == null)\r\n                return x;\r\n\r\n            if (y.GetType() == typeof(string))\r\n                return String.Concat(x, (string)y);\r\n            \r\n            if (y.GetType() == typeof(PhpBytes))\r\n                return PhpBytes.Concat(new PhpBytes(x), (PhpBytes)y);\r\n            \r\n            return String.Concat(x, Convert.ObjectToString(y));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates objects contained in a specified array.\r\n        /// </summary>\r\n        /// <param name=\"args\">An array of objects to concatenate.</param>\r\n        /// <returns>\r\n        /// If any of the arguments are of type <see cref=\"PhpBytes\"/> the result is also of type <see cref=\"PhpBytes\"/>, \r\n        /// otherwise each argument is converted to a string by <see cref=\"Convert.ObjectToString\"/> and \r\n        /// the result is a string.\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Concat(params object[]/*!*/args)\r\n        {\r\n            int count = args.Length;\r\n            if (count == 0) return null;\r\n\r\n            int startIndex = ArrayUtils.TakeWhileCount(args, obj => obj == null);// skip nulls\r\n            if (startIndex >= count) return null;\r\n\r\n            // if some element is PhpBytes:\r\n            if (ArrayEx.Exists(args, (obj) => (obj != null && obj.GetType() == typeof(PhpBytes))))\r\n            {\r\n                // converts all items to PhpBytes (or nulls) and concatenate:\r\n                return PhpBytes.Concat(ArrayEx.ConvertAll<object, PhpBytes>(args, x =>\r\n                {\r\n                    return (x != null) ? Convert.ObjectToPhpBytes(x) : null;\r\n                }), startIndex, count - startIndex);\r\n            }\r\n\r\n            // none of the elements is PhpBytes,\r\n            // convert all items to string and sum their total length:\r\n            int length = 0;\r\n            string[] args_string = ArrayEx.ConvertAll<object, string>(args, x =>\r\n            {\r\n                if (x != null)\r\n                {\r\n                    string str;\r\n                    length += (str = Convert.ObjectToString(x)).Length;\r\n                    return str;\r\n                }\r\n                else\r\n                    return null;\r\n            });\r\n\r\n            if (length == 0)\r\n                return string.Empty;\r\n\r\n            // concatenate items via StringBuilder:\r\n            StringBuilder sb = new StringBuilder(length, length);\r\n            foreach (string str in args_string)\r\n                sb.Append(str);\r\n\r\n            return sb.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Append\r\n\r\n        /// <summary>\r\n        /// Concatenates two strings or strings of bytes.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand which will be appended to.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A single-referenced concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Append(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            // catch null references:\r\n            if (x == null) return y;\r\n            if (y == null) return AsAnyString(x);\r\n\r\n            //\r\n            if (x.GetType() == typeof(PhpBytes))\r\n            {\r\n                if (y.GetType() == typeof(PhpBytes))\r\n                {\r\n                    // bytes.bytes:\r\n                    return PhpBytes.Concat((PhpBytes)x, (PhpBytes)y);\r\n                }\r\n\r\n                // bytes.object:\r\n                return PhpBytes.Concat((PhpBytes)x, Convert.ObjectToPhpBytes(y));\r\n            }\r\n            else if (y.GetType() == typeof(PhpBytes))\r\n            {\r\n                // object.bytes:\r\n                return PhpBytes.Concat(Convert.ObjectToPhpBytes(x), (PhpBytes)y);\r\n            }\r\n            else if (x.GetType() == typeof(PhpString))\r\n            {\r\n                // builder.string:\r\n                return ((PhpString)x).Append(Convert.ObjectToString(y));\r\n            }\r\n            else\r\n            {\r\n                // object.object:\r\n                return new PhpString(Convert.ObjectToString(x), Convert.ObjectToString(y));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates two strings or strings of bytes optimized for concatenation with a string.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The single-referenced concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Append(object x, string y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            if (object.ReferenceEquals(x, null)) return y;\r\n\r\n            if (x.GetType() == typeof(PhpString))\r\n            {\r\n                // builder.string:\r\n                return ((PhpString)x).Append(y);\r\n            }\r\n            else if (x.GetType() == typeof(PhpBytes))\r\n            {\r\n                return PhpBytes.Concat((PhpBytes)x, new PhpBytes(y));\r\n            }\r\n            else\r\n            {\r\n                // object.string:\r\n                return new PhpString(Convert.ObjectToString(x), y);\r\n            }\r\n        }\r\n\r\n        public static object Append(object x, params object[] args)\r\n        {\r\n            // todo\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Prepend\r\n\r\n        /// <summary>\r\n        /// Prepends one value with the other.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A single-referenced concatenation of the <paramref name=\"y\"/> and <paramref name=\"x\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Prepend(object x, object y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && !(y is PhpReference));\r\n\r\n            PhpString sx;\r\n            PhpBytes bx, by;\r\n\r\n            if ((bx = x as PhpBytes) != null)\r\n            {\r\n                if ((by = y as PhpBytes) != null)\r\n                {\r\n                    // bytes.bytes:\r\n                    return PhpBytes.Concat(by, bx);\r\n                }\r\n                else\r\n                {\r\n                    // bytes.object:\r\n                    return PhpBytes.Concat(Convert.ObjectToPhpBytes(y), bx);\r\n                }\r\n            }\r\n            else if ((by = y as PhpBytes) != null)\r\n            {\r\n                // object.bytes:\r\n                return PhpBytes.Concat(by, Convert.ObjectToPhpBytes(x));\r\n            }\r\n            if ((sx = x as PhpString) != null)\r\n            {\r\n                // builder.string:\r\n                return sx.Prepend(Convert.ObjectToString(y));\r\n            }\r\n            else\r\n            {\r\n                // object.object:\r\n                return new PhpString(Convert.ObjectToString(y), Convert.ObjectToString(x));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Prepends one value with the other.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The single-referenced concatenation of the <paramref name=\"y\"/> and <paramref name=\"x\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static object Prepend(object x, string y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n            PhpString sx;\r\n            PhpBytes bx;\r\n\r\n            if ((sx = x as PhpString) != null)\r\n            {\r\n                // builder.string:\r\n                return sx.Prepend(y);\r\n            }\r\n            else if ((bx = x as PhpBytes) != null)\r\n            {\r\n                return PhpBytes.Concat(new PhpBytes(y), bx);\r\n            }\r\n            {\r\n                // object.string:\r\n                return new PhpString(y, Convert.ObjectToString(x));\r\n            }\r\n        }\r\n\r\n        public static object Prepend(object x, params object[] args)\r\n        {\r\n            // todo\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Variables Table Access Operators\r\n\r\n        [Emitted]\r\n        public static object GetVariableUnchecked(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name)\r\n        {\r\n            Debug.Assert(name != null);\r\n            object item;\r\n\r\n            if (locals != null)\r\n            {\r\n                // global code included into a method => use the locals table only:\r\n                if (locals.TryGetValue(name, out item))\r\n                    return PhpVariable.Dereference(item);\r\n                else\r\n                    return null;\r\n            }\r\n            else\r\n            {\r\n                // true global code => work with globals:\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n\r\n                if (globals != null && globals.TryGetValue(name, out item))\r\n                    return PhpVariable.Dereference(item);\r\n                else\r\n                    return null;\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static object GetVariable(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name)\r\n        {\r\n            Debug.Assert(name != null);\r\n            object item;\r\n\r\n            if (locals != null)\r\n            {\r\n                // included in method //\r\n\r\n                if (locals.TryGetValue(name, out item))\r\n                    return PhpVariable.Dereference(item);\r\n            }\r\n            else\r\n            {\r\n                // true global code //\r\n\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n\r\n                if (globals != null && globals.TryGetValue(name, out item))\r\n                    return PhpVariable.Dereference(item);\r\n            }\r\n\r\n            // variable is undefined:\r\n            PhpException.UndefinedVariable(name);\r\n            return null;\r\n        }\r\n\r\n        [Emitted]\r\n        public static PhpReference GetVariableRef(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            if (locals != null)\r\n            {\r\n                // included in method //\r\n\r\n                PhpReference result;\r\n\r\n                object item;\r\n                if (locals.TryGetValue(name, out item))\r\n                {\r\n                    result = item as PhpReference;\r\n\r\n                    if (result != null)\r\n                        return result;\r\n                }\r\n                else\r\n                {\r\n                    item = null;\r\n                }\r\n\r\n                // it is correct to box the item without making a deep copy since there was a single pointer on item\r\n                // before this operation (by invariant) and there will be a single one after the operation as well:\r\n                locals[name] = result = new PhpReference(item);\r\n\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                // true global code //\r\n\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n                PhpReference result;\r\n                object item = null;\r\n\r\n                if (globals == null)\r\n                {\r\n                    context.AutoGlobals.Globals.Value = globals = new PhpArray();\r\n                }\r\n                else if (globals.TryGetValue(name, out item))\r\n                {\r\n                    result = item as PhpReference;\r\n\r\n                    if (result != null)\r\n                        return result;\r\n                }\r\n\r\n                // it is correct to box the item without making a deep copy since there was a single pointer on item\r\n                // before this operation (by invariant) and there will be a single one after the operation as well:\r\n                globals[name] = result = new PhpReference(item);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetVariable(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name, object value)\r\n        {\r\n            Debug.Assert(name != null && !(value is PhpReference));\r\n\r\n            if (locals != null)\r\n            {\r\n                // included in method //\r\n\r\n                object item;\r\n                PhpReference ref_item;\r\n                if (locals.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null)\r\n                    ref_item.Value = value;\r\n                else\r\n                    locals[name] = value;\r\n            }\r\n            else\r\n            {\r\n                // true global code //\r\n\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n\r\n                if (globals == null)\r\n                {\r\n                    context.AutoGlobals.Globals.Value = globals = new PhpArray();\r\n                    globals.Add(name, value);\r\n                    return;\r\n                }\r\n\r\n                object item;\r\n                PhpReference ref_item;\r\n                if (globals.TryGetValue(name, out item) && (ref_item = item as PhpReference) != null)\r\n                    ref_item.Value = value;\r\n                else\r\n                    globals[name] = value;\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetVariableRef(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name, PhpReference reference)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            if (locals != null)\r\n            {\r\n                locals[name] = reference;\r\n            }\r\n            else\r\n            {\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n\r\n                if (globals == null)\r\n                    context.AutoGlobals.Globals.Value = globals = new PhpArray();\r\n\r\n                globals[name] = reference;\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static void UnsetVariable(ScriptContext/*!*/ context, Dictionary<string, object> locals,\r\n            string/*!*/ name)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            if (locals != null)\r\n            {\r\n                locals.Remove(name);\r\n            }\r\n            else\r\n            {\r\n                PhpArray globals = context.AutoGlobals.Globals.Value as PhpArray;\r\n\r\n                if (globals != null)\r\n                    globals.Remove(name);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helpers: IsEmptyForEnsure, CheckStringIndexRange, IsCallable\r\n\r\n        /// <summary>\r\n        /// Decides whether a variable is empty i.e. should be replaced by new array or object.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// A variable is considered to be empty for ensure routines and item and property operators if \r\n        /// it is either <B>null</B> reference, an empty string, an empty string of bytes,\r\n        /// <B>false</B>, 0 or 0.0 (PHP5 treats 0 and 0.0 as non-empty-for-ensure but it will probably change).\r\n        /// </remarks>\r\n        public static bool IsEmptyForEnsure(object var)\r\n        {\r\n            return\r\n                var == null ||\r\n                (var.GetType() == typeof(string) && (string)var == string.Empty) ||\r\n                (var.GetType() == typeof(bool) && (bool)var == false) ||\r\n                (var.GetType() == typeof(PhpString) && ((PhpString)var).Length == 0) ||\r\n                (var.GetType() == typeof(PhpBytes) && ((PhpBytes)var).Length == 0) ||\r\n                (var.GetType() == typeof(int) && (int)var == 0) ||\r\n                (var.GetType() == typeof(double) && (double)var == 0.0) ||\r\n                (var.GetType() == typeof(long) && (long)var == 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Verifies that the contents of a variable can be called as a function.\r\n        /// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        /// <param name=\"variable\">The variable.</param>\r\n        /// <param name=\"syntaxOnly\">If <B>true</B>, it is only checked that has <pararef name=\"variable\"/>\r\n        /// a valid structure to be used as a callback. if <B>false</B>, the existence of the function (or\r\n        /// method) is also verified.</param>\r\n        /// <returns><B>true</B> if <paramref name=\"variable\"/> denotes a function, <B>false</B>\r\n        /// otherwise.</returns>\r\n        [Emitted]\r\n        public static bool IsCallable(object variable, DTypeDesc caller, bool syntaxOnly)\r\n        {\r\n            PhpCallback callback = PHP.Core.Convert.ObjectToCallback(variable, true);\r\n            if (callback == null || callback.IsInvalid) return false;\r\n\r\n            return (syntaxOnly ? true : callback.Bind(true, caller, null));\r\n        }\r\n\r\n        public static bool CheckStringIndexRange(int index, int length, bool quiet)\r\n        {\r\n            // index is negative => notice:\r\n            if (index < 0)\r\n            {\r\n                if (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"illegal_string_offset\", index));\r\n                return false;\r\n            }\r\n\r\n            // index is greater than length: \r\n            if (index >= length)\r\n            {\r\n                if (!quiet) PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"uninitialized_string_offset\", index));\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Item Operators\r\n\r\n        #region GetItem\r\n\r\n        /// <summary>\r\n        /// Kinds of <see cref=\"GetItem\"/> operator.\r\n        /// </summary>\r\n        public enum GetItemKinds\r\n        {\r\n            /// <summary>Item getter with notice reporting.</summary>\r\n            Get,\r\n            /// <summary>Quite item getter.</summary>\r\n            QuietGet,\r\n            /// <summary>Item is loaded to be checked by \"isset\".</summary>\r\n            Isset,\r\n            /// <summary>Item is loaded to be checked by \"empty\".</summary>\r\n            Empty\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets an item of an array or a character of a string. Used in the read context chain.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable which item to get.</param>\r\n        /// <param name=\"key\">The index of the item.</param>\r\n        /// <param name=\"kind\">The kind of operator.</param>\r\n        /// <returns>The item.</returns>\r\n        /// <remarks><para>Pattern: ... = var[index]</para></remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a string and <paramref name=\"key\"/> is negative integer (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is an array and <paramref name=\"key\"/> is an illegal (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is an array and <paramref name=\"key\"/> is not contained in it (Notice).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a string and <paramref name=\"key\"/> is greater or equal to its length (Notice).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is an <see cref=\"DObject\"/> (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a scalar (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is empty (Notice).</exception>\r\n        /// <include file='Doc/Operators.xml' path='docs/operator[@name=\"GetItem\"]/*'/>\r\n        [Emitted]\r\n        public static object GetItem(object var, object key, GetItemKinds kind)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(key is PhpReference));\r\n\r\n            // an item of a PhpArray (fast check):\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // derived types checked in Epilogue\r\n                return ((PhpArray)var).GetArrayItem(key, kind != GetItemKinds.Get);\r\n            else\r\n                return GetItemNonPhpArray(var, key, kind);\r\n        }\r\n\r\n        private static object GetItemNonPhpArray(object var, object key, GetItemKinds kind)\r\n        {\r\n            // handle null reference:\r\n            if (var == null)\r\n                return null;\r\n\r\n            bool quiet = kind != GetItemKinds.Get;\r\n            int index;\r\n\r\n            // a character of a string:\r\n            if (var.GetType() == typeof(string))\r\n                return (CheckStringIndexRange(index = Convert.ObjectToInteger(key), ((string)var).Length, quiet)) ? ((string)var)[index].ToString() : null;\r\n\r\n            // a character of a PhpString:\r\n            if (var.GetType() == typeof(PhpString))\r\n                return (CheckStringIndexRange(index = Convert.ObjectToInteger(key), ((PhpString)var).Length, quiet)) ? ((PhpString)var).GetCharUnchecked(index).ToString() : null;\r\n\r\n            // a byte of a string of bytes:\r\n            if (var.GetType() == typeof(PhpBytes))\r\n                return (CheckStringIndexRange(index = Convert.ObjectToInteger(key), ((PhpBytes)var).Length, quiet)) ? new PhpBytes(new byte[] { ((PhpBytes)var)[index] }) : null;\r\n\r\n            return GetItemEpilogue(var, key, kind);\r\n        }\r\n\r\n        [Emitted]\r\n        public static object GetItem(object var, int key, GetItemKinds kind)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // derived types checked later in Epilogue\r\n                // an item of a PhpArray:\r\n                return ((PhpArray)var).GetArrayItem(key, kind != GetItemKinds.Get);\r\n            else\r\n                // the rest:\r\n                return GetItemEpilogue(var, key, kind);\r\n        }\r\n\r\n        private static object GetItemEpilogue(object var, int key, GetItemKinds kind)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(var == null || var.GetType() != typeof(PhpArray));\r\n\r\n            // handle null reference:\r\n            if (var == null)\r\n                return null;\r\n\r\n            //\r\n            bool quiet = kind != GetItemKinds.Get;\r\n\r\n            // a character of a string:\r\n            if (var.GetType() == typeof(string))\r\n                return (CheckStringIndexRange(key, ((string)var).Length, quiet)) ? ((string)var)[key].ToString() : null;\r\n\r\n            // a character of a PhpString:\r\n            if (var.GetType() == typeof(PhpString))\r\n                return (CheckStringIndexRange(key, ((PhpString)var).Length, quiet)) ? ((PhpString)var).GetCharUnchecked(key).ToString() : null;\r\n\r\n            // a byte of a string of bytes:\r\n            if (var.GetType() == typeof(PhpBytes))\r\n                return (CheckStringIndexRange(key, ((PhpBytes)var).Length, quiet)) ? new PhpBytes(new byte[] { ((PhpBytes)var)[key] }) : null;\r\n\r\n            // general GetItem epilogue:\r\n            return GetItemEpilogue(var, (object)key, kind);\r\n        }\r\n\r\n        [Emitted]\r\n        public static object GetItem(object var, string/*!*/ key, GetItemKinds kind)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && key != null);\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // derived types checked in Epilogue\r\n                return ((PhpArray)var).GetArrayItem(key, kind != GetItemKinds.Get);\r\n\r\n            return GetStringItemEpilogue(var, key, kind);\r\n        }\r\n\r\n        [Emitted]\r\n        public static object GetItemExact(object var, string/*!*/ key, GetItemKinds kind, int hashcode)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && key != null);\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // derived types checked in Epilogue\r\n                return ((PhpArray)var).GetArrayItemExact(key, kind != GetItemKinds.Get, hashcode);\r\n\r\n            return GetStringItemEpilogue(var, key, kind);\r\n        }\r\n\r\n        private static object GetStringItemEpilogue(object var, string key, GetItemKinds kind)\r\n        {\r\n            bool quiet = kind != GetItemKinds.Get;\r\n            int index;\r\n\r\n            if (var == null)\r\n                return null;\r\n\r\n            // a character of a string:\r\n            if (var.GetType() == typeof(string))\r\n                return (CheckStringIndexRange(index = Convert.StringToInteger(key), ((string)var).Length, quiet)) ? ((string)var)[index].ToString() : null;\r\n\r\n            // a character of a PhpString:\r\n            if (var.GetType() == typeof(PhpString))\r\n                return (CheckStringIndexRange(index = Convert.StringToInteger(key), ((PhpString)var).Length, quiet)) ? ((PhpString)var).GetCharUnchecked(index).ToString() : null;\r\n\r\n            // a byte of a string of bytes:\r\n            if (var.GetType() == typeof(PhpBytes))\r\n                return (CheckStringIndexRange(index = Convert.StringToInteger(key), ((PhpBytes)var).Length, quiet)) ? new PhpBytes(new byte[] { ((PhpBytes)var)[index] }) : null;\r\n\r\n            return GetItemEpilogue(var, key, kind);\r\n        }\r\n\r\n        //Similar to ArrayAccess.GetUserArrayItem, but getting access to a C# IDictionary\r\n        internal static object GetDictionaryItem(IDictionary arrayAccess, object key, Operators.GetItemKinds kind)\r\n        {\r\n            switch (kind)\r\n            {\r\n                case Operators.GetItemKinds.Isset:\r\n                    // pass isset() \"\"/null to say true/false depending on the value returned from \"offsetExists\":\r\n                    return arrayAccess.Contains(key) ? \"\" : null;\r\n\r\n                case Operators.GetItemKinds.Empty:\r\n                    // if \"offsetExists\" returns false, the empty()/isset() returns false (pass null to say true/false): \r\n                    // otherwise, \"offsetGet\" is called to retrieve the value, which is passed to isset():\r\n                    if (!arrayAccess.Contains(key))\r\n                        return null;\r\n                    else\r\n                        goto default;\r\n\r\n                default:\r\n                    // regular getter:\r\n                    return ClrObject.WrapDynamic(PhpVariable.Dereference(arrayAccess[key]));\r\n            }\r\n\r\n        }\r\n\r\n        //Similar to ArrayAccess.GetUserArrayItem, but getting access to a C# IDictionary\r\n        internal static object GetListItem(IList arrayAccess, object key, Operators.GetItemKinds kind)\r\n        {\r\n            int index = Convert.ObjectToInteger(key);   // index used as key in IList\r\n\r\n            switch (kind)\r\n            {\r\n                case Operators.GetItemKinds.Isset:\r\n                    // pass isset() \"\"/null to say true/false depending on the value returned from \"offsetExists\":\r\n                    return (index >= 0 && index < arrayAccess.Count) ? \"\" : null;\r\n\r\n                case Operators.GetItemKinds.Empty:\r\n                    // if \"offsetExists\" returns false, the empty()/isset() returns false (pass null to say true/false): \r\n                    // otherwise, \"offsetGet\" is called to retrieve the value, which is passed to isset():\r\n                    if (index < 0 || index >= arrayAccess.Count)\r\n                        return null;\r\n                    else\r\n                        goto default;\r\n\r\n                default:\r\n                    // regular getter:\r\n                    return ClrObject.WrapDynamic(PhpVariable.Dereference(arrayAccess[index]));\r\n            }\r\n\r\n        }\r\n\r\n        private static object GetItemEpilogue(object var, object key, GetItemKinds kind)\r\n        {\r\n            bool quiet = kind != GetItemKinds.Get;\r\n\r\n            // empty:\r\n            if (PhpVariable.IsEmpty(var))\r\n            {\r\n                /* silently returns null, see PHP specs, issue 22019 */\r\n                //if (!quiet) PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"empty_used_as_array\"));\r\n\r\n                return null;\r\n            }\r\n\r\n            // an item of a PhpArray (check inherited types):\r\n            PhpArray array;\r\n            if ((array = var as PhpArray) != null)\r\n                return array.GetArrayItem(key, quiet);\r\n\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null)\r\n            {\r\n                var realObject = dobj.RealObject;\r\n\r\n                if (realObject is Library.SPL.ArrayAccess)\r\n                    return Library.SPL.PhpArrayObject.GetUserArrayItem(dobj, key, kind);\r\n\r\n                if (realObject is IList)\r\n                    return GetListItem((IList)realObject, key, kind);\r\n\r\n                if (realObject is IDictionary)\r\n                    return GetDictionaryItem((IDictionary)realObject, key, kind);\r\n            }\r\n\r\n            // warnings (DObject, scalar type):\r\n            /* silently returns null, see PHP specs, issue 22019 */\r\n            //PhpException.VariableMisusedAsArray(var, false);\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetItemRef\r\n\r\n        /// <summary>\r\n        /// Adds a new reference item to the array. \r\n        /// Implements key-less [] operator applied on a variable in read reference context.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable.</param>\r\n        /// <returns>The new reference item added to the array.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        [Emitted]\r\n        public static PhpReference GetItemRef(ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n\r\n            // PhpArray:\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // fast check for PhpArray, not derived types\r\n                return ((PhpArray)var).GetArrayItemRef();\r\n\r\n            // creates a new reference and adds it to an a new array:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                PhpArray array;\r\n                var = array = new PhpArray(1, 0);\r\n                PhpReference result = new PhpReference();\r\n                array.Add(result);\r\n                return result;\r\n            }\r\n\r\n            return GetItemRefEpilogue(null, ref var);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a reference on keyed item of an array.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable.</param>\r\n        /// <param name=\"key\">The index.</param>\r\n        /// <returns>The reference.</returns>\r\n        /// <remarks>\r\n        /// <para>Retrieves an instance of <see cref=\"PhpReference\"/> which is an item of the array.\r\n        /// If respective item doesn't exist or is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/> \r\n        /// a new instance of <see cref=\"PhpReference\"/> is created in its place.</para>\r\n        /// <para>Pattern: ... =&amp; var[index]</para></remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        [Emitted]\r\n        public static PhpReference/*!*/ GetItemRef(object key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(key is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            // PhpArray:\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // fast vcheck for PhpArray, not derived types\r\n                return ((PhpArray)var).GetArrayItemRef(key);\r\n\r\n            // creates a new reference and adds it to an a new array:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                PhpArray array;\r\n                var = array = new PhpArray(1, 0);\r\n                PhpReference result = new PhpReference();\r\n                array.SetArrayItemRef(key, result);\r\n                return result;\r\n            }\r\n\r\n            return GetItemRefEpilogue(key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static PhpReference/*!*/ GetItemRef(int key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            // PhpArray:\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // fast vcheck for PhpArray, not derived types\r\n                return ((PhpArray)var).GetArrayItemRef(key);\r\n\r\n            // creates a new reference and adds it to an a new array:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                PhpArray array;\r\n                var = array = new PhpArray(1, 0);\r\n                PhpReference result = new PhpReference();\r\n                array.SetArrayItemRef(key, result);\r\n                return result;\r\n            }\r\n\r\n            return GetItemRefEpilogue(key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static PhpReference/*!*/ GetItemRef(string key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            // PhpArray:\r\n            if (var != null && var.GetType() == typeof(PhpArray))   // fast check for PhpArray, not derived types\r\n                return ((PhpArray)var).GetArrayItemRef(key);\r\n\r\n            // creates a new reference and adds it to an a new array:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                PhpArray array;\r\n                var = array = new PhpArray(0, 1);\r\n                PhpReference result = new PhpReference();\r\n                array.SetArrayItemRef(key, result);\r\n                return result;\r\n            }\r\n\r\n            return GetItemRefEpilogue(key, ref var);\r\n        }\r\n\r\n        private static PhpReference/*!*/ GetItemRefEpilogue(object key, ref object/*!*/var)\r\n        {\r\n            Debug.Assert(var != null);\r\n\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null && dobj.RealObject is Library.SPL.ArrayAccess)\r\n                return Library.SPL.PhpArrayObject.GetUserArrayItemRef(dobj, key, ScriptContext.CurrentContext);\r\n\r\n            // PhpArray (derived types):\r\n            PhpArray array;\r\n            if ((array = var as PhpArray) != null)\r\n                return array.GetArrayItemRef(key);\r\n\r\n            // errors:\r\n            PhpException.VariableMisusedAsArray(var, true);\r\n            return new PhpReference();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SetItem\r\n\r\n        /// <summary>\r\n        /// Adds a new item (value or reference) to an array or sets a character of a string.\r\n        /// </summary>\r\n        /// <param name=\"var\">The array.</param>\r\n        /// <param name=\"value\">The value or reference of added item.</param>\r\n        /// <remarks>\r\n        /// <para>Patterns: var[] = value, var[] =&amp; value</para>\r\n        /// <para>If <paramref name=\"var\"/> is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/> \r\n        /// its value is replaced by a new instance of <see cref=\"PhpArray\"/>.</para>\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">A new key cannot be generated because it reached maximal value (<see cref=\"int.MaxValue\"/>).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        [Emitted]\r\n        public static void SetItem(object value, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))\r\n                ((PhpArray)var).Add(value); // Add never returns 0 now\r\n            else\r\n                SetItemEpilogue(value, ref var);            \r\n        }\r\n\r\n        private static void SetItemEpilogue(object value, ref object var)\r\n        {\r\n            Debug.Assert(var == null || var.GetType() != typeof(PhpArray));\r\n\r\n            PhpArray array;\r\n            \r\n            // creates a new array and stores it into a new item which is added to the array:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                array = new PhpArray(1, 0);\r\n                array.Add(value);\r\n                var = array;\r\n                return;\r\n            }\r\n            \r\n            // PhpArray derivates:\r\n            if ((array = var as PhpArray) != null)\r\n            {\r\n                if (array.Add(value) == 0)\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"integer_key_reached_max_value\"));\r\n\r\n                return;\r\n            }\r\n\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null && dobj.RealObject is Library.SPL.ArrayAccess)\r\n            {\r\n                //PhpStack stack = ScriptContext.CurrentContext.Stack;\r\n                //stack.AddFrame(null, value);\r\n                //dobj.InvokeMethod(Library.SPL.PhpArrayObject.offsetSet, null, stack.Context);\r\n                ((Library.SPL.ArrayAccess)dobj.RealObject).offsetSet(ScriptContext.CurrentContext, null, value);\r\n                return;\r\n            }\r\n\r\n            // errors:\r\n            PhpException.VariableMisusedAsArray(var, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets an item of an array or a character of a string.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable whose item to set.</param>\r\n        /// <param name=\"key\">The index of the item.</param>\r\n        /// <param name=\"value\">The new value of item.</param>\r\n        /// <remarks>\r\n        /// <para>Pattern: var[index] = value, var{index} = value.</para>\r\n        /// <para>If <paramref name=\"var\"/> is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/> \r\n        /// its value is replaced by a new instance of <see cref=\"PhpArray\"/>.</para>\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is <see cref=\"DObject\"/> (Error).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is a scalar (Error).</exception>\r\n        [Emitted]\r\n        public static void SetItem(object value, object key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(key is PhpReference) && !(value is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            if (var != null)\r\n            {\r\n                int index;\r\n\r\n                // PhpArray:\r\n                if (var.GetType() == typeof(PhpArray))\r\n                {\r\n                    ((PhpArray)var).SetArrayItem(key, value);\r\n                    return;\r\n                }\r\n\r\n                // string:\r\n                if (var.GetType() == typeof(string) && (string)var != \"\")\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.ObjectToInteger(key), Int32.MaxValue, false))\r\n                        var = SetStringItem(new PhpString((string)var), index, value);\r\n                    return;\r\n                }\r\n\r\n                // string builder:\r\n                if (var.GetType() == typeof(PhpString) && ((PhpString)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.ObjectToInteger(key), Int32.MaxValue, false))\r\n                        SetStringItem((PhpString)var, index, value);\r\n                    return;\r\n                }\r\n\r\n                // PhpBytes:\r\n                if (var.GetType() == typeof(PhpBytes) && ((PhpBytes)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.ObjectToInteger(key), Int32.MaxValue, false))\r\n                        SetBytesItem((PhpBytes)var, index, value);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            SetItemEpilogue(value, key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetItem(object value, int key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(value is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))\r\n                // PhpArray:\r\n                ((PhpArray)var).SetArrayItem(key, value);\r\n            else\r\n                // the rest:\r\n                SetItemEpilogue(value, key, ref var);\r\n        }\r\n\r\n        private static void SetItemEpilogue(object value, int key, ref object var)\r\n        {\r\n            Debug.Assert(var == null || var.GetType() != typeof(PhpArray));\r\n\r\n            if (var != null)\r\n            {\r\n                // string:\r\n                if (var.GetType() == typeof(string) && (string)var != \"\")\r\n                {\r\n                    if (CheckStringIndexRange(key, Int32.MaxValue, false))\r\n                        var = SetStringItem(new PhpString((string)var), key, value);\r\n                    return;\r\n                }\r\n\r\n                // string builder:\r\n                if (var.GetType() == typeof(PhpString) && ((PhpString)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(key, Int32.MaxValue, false))\r\n                        SetStringItem((PhpString)var, key, value);\r\n                    return;\r\n                }\r\n\r\n                // PhpBytes:\r\n                if (var.GetType() == typeof(PhpBytes) && ((PhpBytes)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(key, Int32.MaxValue, false))\r\n                        SetBytesItem((PhpBytes)var, key, value);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            SetItemEpilogue(value, (object)key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetItem(object value, string key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(value is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))\r\n                ((PhpArray)var).SetArrayItem(key, value);\r\n            else\r\n                SetItemEpilogue(value, (object)key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetItemExact(object value, string key, ref object var, int hashcode)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(value is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            if (var != null && var.GetType() == typeof(PhpArray))\r\n                ((PhpArray)var).SetArrayItemExact(key, value, hashcode);\r\n            else\r\n                SetStringItemEpilogue(value, key, ref var);\r\n        }\r\n\r\n        private static void SetStringItemEpilogue(object value, string key, ref object var)\r\n        {\r\n            if (var != null)\r\n            {\r\n                int index;\r\n\r\n                // string:\r\n                if (var.GetType() == typeof(string) && (string)var != \"\")\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.StringToInteger(key), Int32.MaxValue, false))\r\n                        var = SetStringItem(new PhpString((string)var), index, value);\r\n                    return;\r\n                }\r\n\r\n                // string builder:\r\n                if (var.GetType() == typeof(PhpString) && ((PhpString)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.StringToInteger(key), Int32.MaxValue, false))\r\n                        SetStringItem((PhpString)var, index, value);\r\n                    return;\r\n                }\r\n\r\n                // PhpBytes:\r\n                if (var.GetType() == typeof(PhpBytes) && ((PhpBytes)var).Length != 0)\r\n                {\r\n                    if (CheckStringIndexRange(index = Convert.StringToInteger(key), Int32.MaxValue, false))\r\n                        SetBytesItem((PhpBytes)var, index, value);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            SetItemEpilogue(value, (object)key, ref var);\r\n        }\r\n\r\n        private static void SetItemEpilogue(object value, object key, ref object var)\r\n        {\r\n            // empty:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                PhpArray var_array = new PhpArray(0, 1);\r\n                var_array.SetArrayItem(key, value);\r\n                var = var_array;\r\n                return;\r\n            }\r\n\r\n            // PhpArray (derived types):\r\n            PhpArray array;\r\n            if ((array = var as PhpArray) != null)\r\n            {\r\n                array.SetArrayItem(key, value);\r\n                return;\r\n            }\r\n\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null)\r\n            {\r\n                var realObject = dobj.RealObject;\r\n\r\n                if (realObject is Library.SPL.ArrayAccess)\r\n                {\r\n                    //PhpStack stack = ScriptContext.CurrentContext.Stack;\r\n                    //stack.AddFrame(key, value);\r\n                    //dobj.InvokeMethod(Library.SPL.PhpArrayObject.offsetSet, null, stack.Context);\r\n                    ((Library.SPL.ArrayAccess)realObject).offsetSet(ScriptContext.CurrentContext, key, value);\r\n                    return;\r\n                }\r\n\r\n                if (realObject is IList)\r\n                {\r\n                    ((IList)realObject)[Convert.ObjectToInteger(key)] = value;\r\n                    return;\r\n                }\r\n\r\n                if (realObject is IDictionary)\r\n                {\r\n                    ((IDictionary)realObject)[key] = value;\r\n                    return;\r\n                }\r\n            }\r\n            \r\n            // errors - DObject, scalars:\r\n            PhpException.VariableMisusedAsArray(var, false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SetStringItem, SetBytesItem\r\n\r\n        /// <summary>\r\n        /// Implements oprators [],{} on a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string builder which character to set.</param>\r\n        /// <param name=\"index\">The index of an item.</param>\r\n        /// <param name=\"value\">The new value of an item.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"index\"/> converted to integer by <see cref=\"Convert.ObjectToInteger\"/> is negative. (Warning)</exception>\r\n        /// <include file='Doc/Operators.xml' path='docs/operator[@name=\"SetStringItem\"]/*'/>\r\n        internal static PhpString/*!*/ SetStringItem(PhpString/*!*/ str, int index, object value)\r\n        {\r\n            Debug.Assert(str != null);\r\n\r\n            // the new character will be the first character of the value converted to string or the '\\0'\r\n            // if the length of the converted value is zero; dereferencing is also done:\r\n            char c = Convert.ObjectToChar(value);\r\n\r\n            if (index >= str.Length)\r\n            {\r\n                // if index is greater than the string length the string is padded by spaces:\r\n                str.Append(' ', index - str.Length);\r\n                str.Append(c);\r\n            }\r\n            else\r\n            {\r\n                // otherwise, the respective character of the string is replaced by the new one:\r\n                str.SetCharUnchecked(index, c);\r\n            }\r\n\r\n            return str;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements oprators [],{} on a byte array.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The variable which item to set.</param>\r\n        /// <param name=\"index\">The index of an item.</param>\r\n        /// <param name=\"value\">The new value of an item.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"index\"/> converted to integer by <see cref=\"Convert.ObjectToInteger\"/> is negative. (Warning)</exception>\r\n        /// <include file='Doc/Operators.xml' path='docs/operator[@name=\"SetBytesItem\"]/*'/>\r\n        internal static void SetBytesItem(PhpBytes/*!*/ bytes, int index, object value)\r\n        {\r\n            Debug.Assert(bytes != null && bytes.Length > 0);\r\n\r\n            // the new byte will be the first byte of the value converted to byte[] or zero byte\r\n            // if the length of the converted value is zero; dereferencing is also done:\r\n            byte[] bval = Convert.ObjectToPhpBytes(value).ReadonlyData;\r\n            byte b = (bval.Length == 0) ? (byte)0 : bval[0];\r\n\r\n            // if index is greater than the data length the array is padded by space bytes (0x20):\r\n            if (index >= bytes.Length)\r\n            {\r\n                // TODO (J): optimize by using elastic array (some future implementation PhpString)\r\n                byte[] new_bytes = new byte[index + 1];\r\n\r\n                Buffer.BlockCopy(bytes.ReadonlyData, 0, new_bytes, 0, bytes.Length);\r\n                ArrayUtils.Fill(new_bytes, 0x20, bytes.Length, index - bytes.Length);\r\n                new_bytes[index] = b;\r\n\r\n                bytes.Data = new_bytes;\r\n            }\r\n            else\r\n            {\r\n                // otherwise, the respective byte of the array is replaced by the new one: \r\n                bytes.Data[index] = b;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SetItemRef\r\n\r\n        /// <summary>\r\n        /// Sets a reference keyed item of an array.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable.</param>\r\n        /// <param name=\"key\">The index.</param>\r\n        /// <param name=\"value\">The reference to be assigned to the item.</param>\r\n        /// <remarks>\r\n        /// <para>Pattern: var[index] =&amp; value</para>\r\n        /// <para>If <paramref name=\"var\"/> is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/> \r\n        /// its value is replaced by a new instance of <see cref=\"PhpArray\"/>.</para>\r\n        /// <para>This method provides no more functionality than <see cref=\"SetItem\"/> for arrays.\r\n        /// However, if applied on strings its behavior is different.</para>\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        [Emitted]\r\n        public static void SetItemRef(PhpReference value, object key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(key is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            PhpArray array;\r\n\r\n            // PhpArray:\r\n            if ((array = var as PhpArray) != null)\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                array.SetArrayItemRef(key, value);\r\n                return;\r\n            }\r\n\r\n            // null, empty string or empty string of bytes\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                PhpArray var_array = new PhpArray();\r\n                var_array.SetArrayItemRef(key, value);\r\n                var = var_array;\r\n                return;\r\n            }\r\n\r\n            SetItemRefEpilogue(value, key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetItemRef(PhpReference value, int key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            PhpArray array;\r\n\r\n            // PhpArray:\r\n            if ((array = var as PhpArray) != null)\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                array.SetArrayItemRef(key, value);\r\n                return;\r\n            }\r\n\r\n            // null, empty string or empty string of bytes\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                PhpArray var_array = new PhpArray();\r\n                var_array.SetArrayItemRef(key, value);\r\n                var = var_array;\r\n                return;\r\n            }\r\n\r\n            SetItemRefEpilogue(value, key, ref var);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetItemRef(PhpReference value, string key, ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            PhpArray array;\r\n\r\n            // PhpArray:\r\n            if ((array = var as PhpArray) != null)\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                array.SetArrayItemRef(key, value);\r\n                return;\r\n            }\r\n\r\n            // null, empty string or empty string of bytes\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                // a reference in \"value\" is directly assigned to the array's item:\r\n                PhpArray var_array = new PhpArray();\r\n                var_array.SetArrayItemRef(key, value);\r\n                var = var_array;\r\n                return;\r\n            }\r\n\r\n            SetItemRefEpilogue(value, key, ref var);\r\n        }\r\n\r\n        private static void SetItemRefEpilogue(PhpReference value, object key, ref object var)\r\n        {\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null && dobj.RealObject is Library.SPL.ArrayAccess)\r\n            {\r\n                PhpStack stack = ScriptContext.CurrentContext.Stack;\r\n                stack.AddFrame(key, value);\r\n                dobj.InvokeMethod(Library.SPL.PhpArrayObject.offsetSet, null, stack.Context);\r\n                return;\r\n            }\r\n\r\n            // errors - non-empty string, DObject, scalar:\r\n            PhpException.VariableMisusedAsArray(var, true);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region UnsetItem\r\n\r\n        /// <summary>\r\n        /// Implements <c>unset</c> construct used along with [] operator.\r\n        /// </summary>\r\n        /// <param name=\"var\">The object which item to unset.</param>\r\n        /// <param name=\"index\">The index of an item ot unset.</param>\r\n        /// <remarks>\r\n        /// <para>Pattern: unset(var[index])</para>\r\n        /// <para>\r\n        /// If <paramref name=\"var\"/> is of type <see cref=\"PhpArray\"/> then the <paramref name=\"index\"/>\r\n        /// is converted to array key by <see cref=\"Convert.ObjectToArrayKey\"/> and an entry with such key is \r\n        /// removed from the <paramref name=\"var\"/> array.\r\n        /// </para>\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is <see cref=\"PhpArray\"/> and <paramref name=\"index\"/> is an illegal array key (Warning).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is <see cref=\"string\"/> or <see cref=\"DObject\"/> (Error).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"string\"/> nor <see cref=\"DObject\"/> nor <see cref=\"PhpArray\"/> (Notice).</exception>\r\n        [Emitted]\r\n        public static void UnsetItem(object var, object index)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && !(index is PhpReference));\r\n            Debug.Assert(!(var is PhpArrayString), \"ensures and end-of-chain operators only\");\r\n\r\n            // removes an entry from the array:\r\n            PhpArray array = var as PhpArray;\r\n            if (array != null)\r\n            {\r\n                IntStringKey array_key;\r\n                if (!Convert.ObjectToArrayKey(index, out array_key))\r\n                    PhpException.IllegalOffsetType();\r\n                else\r\n                    array.Remove(array_key);\r\n\r\n                return;\r\n            }\r\n\r\n            // object behaving as array:\r\n            DObject dobj = var as DObject;\r\n            if (dobj != null && dobj.RealObject is Library.SPL.ArrayAccess)\r\n            {\r\n                PhpStack stack = ScriptContext.CurrentContext.Stack;\r\n                stack.AddFrame(index);\r\n                dobj.InvokeMethod(Library.SPL.PhpArrayObject.offsetUnset, null, stack.Context);\r\n                return;\r\n            }\r\n\r\n            // if variable is not set:\r\n            if (PhpVariable.IsEmpty(var))\r\n                return;\r\n\r\n            // string item cannot be unset:\r\n            if (PhpVariable.IsString(var))\r\n            {\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"cannot_unset_string_offsets\"));\r\n                return;\r\n            }\r\n\r\n            // warnings:\r\n            PhpException.VariableMisusedAsArray(var, false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Chaining Operators\r\n\r\n        #region EnsureVariableIsArray, EnsureVariableIsObject\r\n\r\n        /// <summary>\r\n        /// Ensures specified variable is an instance of <see cref=\"PhpArray\"/>. \r\n        /// </summary>\r\n        /// <param name=\"var\">The variable which should be an array.</param>\r\n        /// <returns>The <paramref name=\"var\"/>, its new value or <b>null</b> on error.</returns>\r\n        /// <remarks>A new instance of <see cref=\"PhpArray\"/> is assigned to the item if it is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/>.</remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        [Emitted]\r\n        public static PhpArray EnsureVariableIsArray(ref object var)\r\n        {\r\n            Debug.Assert(!(var is PhpReference));\r\n            \r\n            if (var != null && var.GetType() == typeof(PhpArray))\r\n                return (PhpArray)var;\r\n\r\n            object new_var;\r\n            var wrappedarray = EnsureObjectIsArray(var, out new_var);\r\n            if (wrappedarray != null)\r\n            {\r\n                if (new_var != null) var = new_var;\r\n                return wrappedarray;\r\n            }\r\n            \r\n            // warnings - variable is a DObject, a scalar:\r\n            PhpException.VariableMisusedAsArray(var, false);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that a variable is an instance of <see cref=\"DObject\"/>.\r\n        /// </summary>\r\n        /// <param name=\"var\">Address of the variable to check.</param>\r\n        /// <param name=\"context\">The <see cref=\"ScriptContext\"/> in which potential new object will be created.</param>\r\n        /// <returns>The <paramref name=\"var\"/>, its new value or <B>null</B> on error.</returns>\r\n        /// <remarks>A new instance of <see cref=\"stdClass\"/> is assigned to the item if it is empty in a meaning of <see cref=\"IsEmptyForEnsure\"/>.</remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"DObject\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is empty and new <see cref=\"stdClass\"/> instance is created (Strict).</exception>\r\n        [Emitted]\r\n        public static DObject EnsureVariableIsObject(ref object var, ScriptContext/*!*/ context)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && context != null);\r\n\r\n            // if var is DObject, nothing has to be done:\r\n            DObject obj = var as DObject;\r\n            if (obj != null) return obj;\r\n\r\n            // if x is empty creates a new stdClass:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                var = obj = stdClass.CreateDefaultObject(context);\r\n                return obj;\r\n            }\r\n\r\n            // errors - variable is a scalar, a non-empty string or a PhpArray:\r\n            PhpException.VariableMisusedAsObject(var, false);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EnsureItemIsArraySimple\r\n\r\n        /// <summary>\r\n        /// Ensures a specified array item is an instance of <see cref=\"PhpArray\"/>. \r\n        /// </summary>\r\n        /// <param name=\"array\">The <see cref=\"PhpArray\"/> which item should be an array.</param>\r\n        /// <param name=\"key\">The key identifying which item should be an array.</param>\r\n        /// <remarks>\r\n        /// A new instance of <see cref=\"PhpArray\"/> is assigned to the item if it is not an array yet.\r\n        /// Array is expected to contain no <see cref=\"PhpReference\"/>.\r\n        /// Treats empty key as a missing key.\r\n        /// </remarks>\r\n        internal static PhpArray EnsureItemIsArraySimple(PhpArray/*!*/ array, string key)\r\n        {\r\n            Debug.Assert(array != null);\r\n            Debug.Assert(!(array is PhpArrayString) && !(array is Library.SPL.PhpArrayObject));\r\n\r\n            // treats empty key as a missing key:\r\n            if (key == String.Empty)\r\n            {\r\n                PhpArray array_item = new PhpArray();\r\n                array.Add(array_item);\r\n                return array_item;\r\n            }\r\n\r\n            IntStringKey array_key = Core.Convert.StringToArrayKey(key);\r\n\r\n            return array.table._ensure_item_array(ref array_key, array);\r\n            //element = array.GetElement(array_key);\r\n\r\n            //// creates a new array if an item is not one:\r\n            //array_item = (element != null) ? element.Value as PhpArray : null;\r\n            //if (array_item == null)\r\n            //{\r\n            //    array_item = new PhpArray();\r\n            //    if (element != null)\r\n            //    {\r\n            //        if (array.table.IsShared)\r\n            //        {\r\n            //            // we are going to change the internal array, it must be writable\r\n            //            array.EnsureWritable();\r\n            //            element = array.table.dict[array_key]; // get the item again\r\n            //        }\r\n\r\n            //        element.Value = array_item;\r\n            //    }\r\n            //    else\r\n            //        array.Add(array_key, array_item);\r\n            //}\r\n\r\n            //return array_item;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EnsurePropertyIsArray, EnsurePropertyIsObject\r\n\r\n        /// <summary>\r\n        /// Ensures that a property value is of <see cref=\"PhpArray\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object whose property is to be checked.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"Type\"/> of the object that request the operation.</param>\r\n        /// <param name=\"propValue\">The property value (might get updated).</param>\r\n        /// <returns>The new property value (dereferenced) or <B>null</B> if evaluation of this compound\r\n        /// statement should not proceed.</returns>\r\n        internal static PhpArray EnsurePropertyIsArrayInternal(DObject obj, string name, DTypeDesc caller, ref object propValue)\r\n        {\r\n            PhpArray result;\r\n            PhpReference reference = propValue as PhpReference;\r\n\r\n            object value;\r\n            if (reference != null && !reference.IsSet)\r\n            {\r\n                // this CT property has been unset\r\n                if (obj.TypeDesc.GetMethod(Name.SpecialMethodNames.Set) != null &&\r\n                    obj.TypeDesc.RealType.Namespace != null &&\r\n                    obj.TypeDesc.RealType.Namespace.StartsWith(Namespaces.Library))\r\n                {\r\n                    ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n                    // create a chain of arguments to be passed to the setter\r\n                    context.BeginSetterChain(obj);\r\n                    context.ExtendSetterChain(new RuntimeChainProperty(name));\r\n\r\n                    return ScriptContext.SetterChainSingletonArray;\r\n                }\r\n\r\n                // try to invoke __get\r\n                bool getter_exists;\r\n                reference = obj.InvokeGetterRef(name, caller, out getter_exists);\r\n                if (!getter_exists)\r\n                {\r\n                    result = new PhpArray();\r\n                    propValue = new PhpReference(result);\r\n                    return result;\r\n                }\r\n                else if (reference == null) return null; // error\r\n\r\n                value = reference.Value;\r\n            }\r\n            else value = PhpVariable.Dereference(propValue);\r\n\r\n            // try to wrap into PhpArray:\r\n            object new_value;\r\n            var wrappedarray = EnsureObjectIsArray(value, out new_value);\r\n            if (wrappedarray != null)\r\n            {\r\n                if (new_value != null)\r\n                {\r\n                    if (reference != null) reference.Value = new_value;\r\n                    else propValue = new_value;\r\n                }\r\n                return wrappedarray;\r\n            }\r\n\r\n            // error - the property is a scalar or a PhpObject:\r\n            PhpException.VariableMisusedAsArray(value, false);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that an instance property is of <see cref=\"PhpArray\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object whose property is to be checked.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the operation.</param>\r\n        /// <returns>The new value of the <paramref name=\"name\"/> property or <B>null</B> if evaluation of this compound\r\n        /// statement should not proceed.</returns>\r\n        /// <remarks>PHP also allows <B>false</B> to be converted to an empty <see cref=\"PhpArray\"/> but we consider this behavior\r\n        /// to be inconsistent.</remarks>\r\n        /// <exception cref=\"PhpException\">The property is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The property is undefined and <c>__get</c> or <c>__set</c> exists in <paramref name=\"obj\"/>\r\n        /// (Error).</exception>\r\n        [Emitted]\r\n        public static PhpArray EnsurePropertyIsArray(DObject obj, string name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject))\r\n            {\r\n                ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n                // extend the setter chain if one already exists\r\n                context.ExtendSetterChain(new RuntimeChainProperty(name));\r\n\r\n                return ScriptContext.SetterChainSingletonArray;\r\n            }\r\n\r\n            // search in CT properties\r\n            DPropertyDesc property;\r\n            GetMemberResult get_res =\r\n                obj.TypeDesc.GetProperty(new VariableName(name), caller, out property);\r\n\r\n            if (get_res == GetMemberResult.BadVisibility)\r\n            {\r\n                DObject.ThrowPropertyVisibilityError(name, property, caller);\r\n                return null;\r\n            }\r\n\r\n            PhpArray ret_val;\r\n            object old_val, value;\r\n\r\n            // was a CT property found?\r\n            if (get_res == GetMemberResult.OK)\r\n            {\r\n                old_val = property.Get(obj);\r\n                value = old_val;\r\n                ret_val = EnsurePropertyIsArrayInternal(obj, name, caller, ref value);\r\n\r\n                if (!Object.ReferenceEquals(value, old_val)) property.Set(obj, value);\r\n            }\r\n            else\r\n            {\r\n                // search in RT fields\r\n                var namekey = new IntStringKey(name);\r\n                if (obj.RuntimeFields != null && obj.RuntimeFields.TryGetValue(namekey, out old_val))\r\n                {\r\n                    // old_val\r\n                }\r\n                else\r\n                {\r\n                    PhpReference reference = new PhpSmartReference();\r\n                    reference.IsSet = false;\r\n                    old_val = reference;\r\n                }\r\n\r\n                value = old_val;\r\n                ret_val = EnsurePropertyIsArrayInternal(obj, name, caller, ref value);\r\n\r\n                if (!Object.ReferenceEquals(value, old_val))\r\n                {\r\n                    if (obj.RuntimeFields == null) obj.RuntimeFields = new PhpArray();\r\n                    \r\n                    obj.RuntimeFields[namekey] = value;\r\n                }\r\n            }\r\n\r\n            return ret_val;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that a property value is of <see cref=\"DObject\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object whose property is to be checked.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"Type\"/> of the object that request the operation.</param>\r\n        /// <param name=\"propValue\">The property value (might get updated).</param>\r\n        /// <param name=\"context\">The current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The new property value (dereferenced) or <B>null</B> if evaluation of this compound\r\n        /// statement should not proceed.</returns>\r\n        internal static DObject EnsurePropertyIsObjectInternal(DObject obj, string name, DTypeDesc caller, ref object propValue,\r\n            ScriptContext context)\r\n        {\r\n            DObject result;\r\n            PhpReference reference = propValue as PhpReference;\r\n\r\n            object value;\r\n            if (reference != null && !reference.IsSet)\r\n            {\r\n                // this CT property has been unset\r\n                if (obj.TypeDesc.GetMethod(Name.SpecialMethodNames.Set) != null &&\r\n                    obj.TypeDesc.RealType.Namespace != null &&\r\n                    obj.TypeDesc.RealType.Namespace.StartsWith(Namespaces.Library))\r\n                {\r\n                    // create a chain of arguments to be passed to the setter\r\n                    context.BeginSetterChain(obj);\r\n                    context.ExtendSetterChain(new RuntimeChainProperty(name));\r\n\r\n                    return ScriptContext.SetterChainSingletonObject;\r\n                }\r\n\r\n                // try to invoke __get\r\n                bool getter_exists;\r\n                reference = obj.InvokeGetterRef(name, caller, out getter_exists);\r\n                if (!getter_exists)\r\n                {\r\n                    result = stdClass.CreateDefaultObject(context);\r\n                    propValue = new PhpReference(result);\r\n                    return result;\r\n                }\r\n                else if (reference == null) return null; // error\r\n\r\n                value = reference.Value;\r\n            }\r\n            else value = PhpVariable.Dereference(propValue);\r\n\r\n            // if property value is a DObject, nothing has to be done\r\n            result = value as DObject;\r\n            if (result != null) return result;\r\n\r\n            // if the property is \"empty\"?\r\n            if (IsEmptyForEnsure(value))\r\n            {\r\n                // create a new stdClass and update the reference\r\n                result = stdClass.CreateDefaultObject(context);\r\n                if (reference != null)\r\n                {\r\n                    reference.Value = result;\r\n                    reference.IsSet = true;\r\n                }\r\n                else propValue = result;\r\n                return result;\r\n            }\r\n\r\n            // error - the property is a scalar or a PhpArray or a non-empty string\r\n            PhpException.VariableMisusedAsObject(value, false);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that an instance property is of <see cref=\"DObject\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object whose property is to be checked.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">The context in which a new instance of <see cref=\"stdClass\"/> is possibly created.</param>\r\n        /// <returns>The new value of the <paramref name=\"name\"/> property or <B>null</B> if evaluation of this\r\n        /// compound statement should not proceed.</returns>\r\n        /// <remarks>PHP also allows <B>false</B> to be converted to an empty <see cref=\"stdClass\"/> but we consider\r\n        /// this behavior to be inconsistent.</remarks>\r\n        /// <exception cref=\"PhpException\">The property is neither <see cref=\"DObject\"/> nor empty (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The property is undefined and <c>__get</c> or <c>__set</c> exists in <paramref name=\"obj\"/>\r\n        /// (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is empty and new <see cref=\"stdClass\"/> instance is created (Strict).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static DObject EnsurePropertyIsObject(DObject obj, string name, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            Debug.Assert(name != null);\r\n\r\n            if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject))\r\n            {\r\n                // extend the setter chain if one already exists\r\n                context.ExtendSetterChain(new RuntimeChainProperty(name));\r\n\r\n                return ScriptContext.SetterChainSingletonObject;\r\n            }\r\n\r\n            // search in CT properties\r\n            DPropertyDesc property;\r\n            GetMemberResult get_res =\r\n                obj.TypeDesc.GetProperty(new VariableName(name), caller, out property);\r\n\r\n            if (get_res == GetMemberResult.BadVisibility)\r\n            {\r\n                DObject.ThrowPropertyVisibilityError(name, property, caller);\r\n                return null;\r\n            }\r\n\r\n            DObject ret_val;\r\n            object old_val, value;\r\n\r\n            // was a CT property found?\r\n            if (get_res == GetMemberResult.OK)\r\n            {\r\n                old_val = property.Get(obj);\r\n                value = old_val;\r\n                ret_val = EnsurePropertyIsObjectInternal(obj, name, caller, ref value, context);\r\n\r\n                if (!Object.ReferenceEquals(value, old_val)) property.Set(obj, value);\r\n            }\r\n            else\r\n            {\r\n                // search in RT fields\r\n\r\n                var namekey = new IntStringKey(name);\r\n                if (obj.RuntimeFields != null && obj.RuntimeFields.TryGetValue(namekey, out old_val))\r\n                {\r\n                    //old_val = element.Value;\r\n                }\r\n                else\r\n                {\r\n                    PhpReference reference = new PhpSmartReference();\r\n                    reference.IsSet = false;\r\n                    old_val = reference;\r\n                }\r\n\r\n                value = old_val;\r\n                ret_val = EnsurePropertyIsObjectInternal(obj, name, caller, ref value, context);\r\n\r\n                if (!Object.ReferenceEquals(value, old_val))\r\n                {\r\n                    if (obj.RuntimeFields == null) obj.RuntimeFields = new PhpArray();\r\n                    \r\n                    obj.RuntimeFields[name] = value;\r\n                }\r\n            }\r\n\r\n            return ret_val;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region EnsureStaticPropertyIsArray, EnsureStaticPropertyIsObject\r\n\r\n        /// <summary>\r\n        /// Ensures that a static property is of <see cref=\"PhpArray\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type whose property is to be checked.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The new value of the <paramref name=\"propertyName\"/> property or <B>null</B> if evaluation of this compound\r\n        /// statement should not proceed.</returns>\r\n        /// <remarks>PHP also allows <B>false</B> to be converted to an empty <see cref=\"PhpArray\"/> but we consider this behavior\r\n        /// to be inconsistent.</remarks>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is neither <see cref=\"PhpArray\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static PhpArray EnsureStaticPropertyIsArray(DTypeDesc type, object propertyName, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            DPropertyDesc property = GetStaticPropertyDesc(type, propertyName, caller, context, false);\r\n            if (property == null) return null;\r\n\r\n            object property_value = property.Get(null);\r\n            PhpReference property_value_ref = PhpVariable.Dereference(ref property_value);\r\n\r\n            // convert obj to array or wrap obj into new array if possible:\r\n            object new_value;\r\n            var wrappedarray = EnsureObjectIsArray(property_value, out new_value);\r\n            if (wrappedarray != null)\r\n            {\r\n                if (new_value != null)\r\n                {\r\n                    if (property_value_ref != null) property_value_ref.Value = new_value;\r\n                    else property.Set(null, new_value);\r\n                }\r\n\r\n                return wrappedarray;\r\n            }\r\n\r\n            // error - the property is a scalar or a DObject:\r\n            PhpException.VariableMisusedAsArray(property_value, false);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that a static property is of <see cref=\"DObject\"/> type.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type whose property is to be checked.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The new value of the <paramref name=\"propertyName\"/> property or <B>null</B> if evaluation of this compound\r\n        /// statement should not proceed.</returns>\r\n        /// <remarks>PHP also allows <B>false</B> to be converted to an empty <see cref=\"stdClass\"/> but we consider this\r\n        /// behavior to be inconsistent.</remarks>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is neither <see cref=\"DObject\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static DObject EnsureStaticPropertyIsObject(DTypeDesc type, object propertyName, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            DPropertyDesc property = GetStaticPropertyDesc(type, propertyName, caller, context, false);\r\n            if (property == null) return null;\r\n\r\n            object property_value = property.Get(null);\r\n            PhpReference property_value_ref = PhpVariable.Dereference(ref property_value);\r\n\r\n            // if the property is DObject, nothing has to be done\r\n            DObject result = property_value as DObject;\r\n            if (result != null) return result;\r\n\r\n            // if the property is \"empty\"?\r\n            if (IsEmptyForEnsure(property_value))\r\n            {\r\n                // create a new stdClass and update the PhpReference\r\n                result = stdClass.CreateDefaultObject(context);\r\n                if (property_value_ref != null) property_value_ref.Value = result;\r\n                else property.Set(null, result);\r\n\r\n                return result;\r\n            }\r\n\r\n            // error - the property is a scalar or a PhpArray or a non-empty string\r\n            PhpException.VariableMisusedAsObject(property_value, false);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Wraps <c>null</c>, <see cref=\"string\"/>, <see cref=\"PhpString\"/>, <see cref=\"PhpBytes\"/>, <c>EmptyForEnsure</c> and others into an instance assignable to <see cref=\"PhpArray\"/>.\r\n        /// </summary>\r\n        /// <param name=\"obj\">An object which has to be accessed as <see cref=\"PhpArray\"/>.</param>\r\n        /// <param name=\"convertedobj\">In case <paramref name=\"obj\"/> was converted (upgraded, e.g. from read-only to read/write), contains an instance of new object.\r\n        /// Can be <c>null</c> reference if <paramref name=\"obj\"/> was not changed.</param>\r\n        /// <remarks>Note <c>null</c> reference is converted to new instance of <see cref=\"PhpArray\"/>.</remarks>\r\n        public static PhpArray EnsureObjectIsArray(object obj, out object convertedobj)\r\n        {\r\n            convertedobj = null;\r\n\r\n            // PhpArray instance already:\r\n            PhpArray arrayobj;\r\n            if ((arrayobj = obj as PhpArray) != null)\r\n                return arrayobj;\r\n\r\n            // empty variable:\r\n            if (IsEmptyForEnsure(obj))\r\n            {\r\n                PhpArray tmparray = new PhpArray();\r\n                convertedobj = tmparray;\r\n                return tmparray;\r\n            }\r\n\r\n            // ensure for optimizations below:\r\n            Debug.Assert(typeof(PhpString).IsSealed);\r\n            Debug.Assert(typeof(PhpBytes).IsSealed);\r\n\r\n            // non-empty immutable string:\r\n            if (obj.GetType() == typeof(string)) return new PhpArrayString(convertedobj = new PhpString((string)obj));\r\n\r\n            // non-empty mutable string:\r\n            if (obj.GetType() == typeof(PhpString)) return new PhpArrayString((PhpString)obj);\r\n            if (obj.GetType() == typeof(PhpBytes)) return new PhpArrayString((PhpBytes)obj);\r\n\r\n            // checks an object behaving like an array:\r\n            DObject dobj;\r\n            if ((dobj = obj as DObject) != null)\r\n            {\r\n                var realObject = dobj.RealObject;\r\n                if (realObject is Library.SPL.ArrayAccess)\r\n                    return new Library.SPL.PhpArrayObject(dobj);\r\n\r\n                // TODO: IList, IDictionary\r\n                if (realObject is IList)\r\n                    throw new NotImplementedException();\r\n\r\n                if (realObject is IDictionary)\r\n                    throw new NotImplementedException();\r\n            }\r\n\r\n            // obj cannot be accessed as an array:\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures the object is writeable,\r\n        /// and so not shared by more PHP variables.\r\n        /// </summary>\r\n        public static void EnsureObjectIsWritable(object obj)\r\n        {\r\n            if (obj != null)\r\n            {\r\n                if (obj.GetType() == typeof(PhpArray))\r\n                    ((PhpArray)obj).EnsureWritable();\r\n                //else if (obj.GetType() == typeof(PhpBytes))\r\n                //    ((PhpBytes)obj).EnsureWritable();\r\n                // ...\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Object Operators\r\n\r\n        #region GetProperty, GetObjectProperty, GetPropertyRef, GetObjectPropertyRef\r\n\r\n        /// <summary>\r\n        /// Gets the value of an instance property of an object.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable to get the property of.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the retrieval.</param>\r\n        /// <param name=\"quiet\">Disables notices reporting. Used for implementation of <c>isset</c> operator.</param>\r\n        /// <returns>The value of the instance property.</returns>\r\n        /// <exception cref=\"PhpReference\">If <paramref name=\"var\"/> is not an instance of <see cref=\"DObject\"/> (Notice).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is empty (Notice).</exception>\r\n        [Emitted]\r\n        public static object GetProperty(object var, string name, DTypeDesc caller, bool quiet)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && name != null);\r\n\r\n            DObject obj;\r\n\r\n            // a property of a DObject:\r\n            if ((obj = var as DObject) != null)\r\n                return GetObjectProperty(obj, name, caller, quiet);\r\n\r\n            // warnings:\r\n            if (!quiet) // not in isset() operator only\r\n            {\r\n                if (PhpVariable.IsEmpty(var))\r\n                    // empty:\r\n                    PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"empty_used_as_object\"));\r\n                else\r\n                    // PhpArray, string, scalar type:\r\n                    PhpException.VariableMisusedAsObject(var, false);\r\n            }\r\n\r\n            // property does not exist\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a reference on a property of an object.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable to get the property of.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">The context in which a new instance of <see cref=\"stdClass\"/> is possibly created.</param>\r\n        /// <returns>The reference.</returns>\r\n        /// <remarks>Retrieves the instance of <see cref=\"PhpReference\"/> which is the property of a <see cref=\"DObject\"/>\r\n        /// if already exists and is of type <see cref=\"PhpReference\"/>, otherwise replaces the property by a new\r\n        /// instance of <see cref=\"PhpReference\"/> referencing the original property.</remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"DObject\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The property is undefined and <c>__get</c> or <c>__set</c> exists in <paramref name=\"var\"/>\r\n        /// (Error).</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is empty and a new <see cref=\"stdClass\"/> instance is\r\n        /// created (Strict).</exception>\r\n        [Emitted]\r\n        public static PhpReference GetPropertyRef(ref object var, string name, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && name != null);\r\n\r\n            DObject obj;\r\n            PhpReference result;\r\n\r\n            // DObject\r\n            if ((obj = var as DObject) != null)\r\n                return GetObjectPropertyRef(obj, name, caller);\r\n\r\n            // creates a new stdClass and adds a new property referencing null value\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                result = new PhpReference();\r\n                stdClass var_object = stdClass.CreateDefaultObject(context);\r\n                SetObjectProperty(var_object, name, result, caller);\r\n                var = var_object;\r\n                return result;\r\n            }\r\n\r\n            // errors - PhpArray, a scalar, string\r\n            PhpException.VariableMisusedAsObject(var, true);\r\n            return new PhpReference();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the value of an instance property of an object.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the retrieval.</param>\r\n        /// <param name=\"quiet\">Disables reporting errors. Used for implementation of <c>isset</c> operator.</param>\r\n        /// <returns>The value of the instance property (eventual <see cref=\"PhpReference\"/> is dereferenced).</returns>\r\n        /// <remarks>Assumes that <paramref name=\"obj\"/> is not null.</remarks>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static object GetObjectProperty(DObject/*!*/ obj, string name, DTypeDesc caller, bool quiet)\r\n        {\r\n            Debug.Assert(obj != null && name != null);\r\n\r\n            object property = obj.GetProperty(name, caller, quiet);\r\n\r\n            return PhpVariable.Dereference(property);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a reference on a property of an object.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object to get the property of.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <returns>The reference.</returns>\r\n        /// <remarks>Assumes that <paramref name=\"obj\"/> is not null.</remarks>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static PhpReference GetObjectPropertyRef(DObject/*!*/ obj, string name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(obj != null && name != null);\r\n\r\n            if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject))\r\n            {\r\n                ScriptContext.CurrentContext.AbortSetterChain(false);\r\n                return new PhpReference();\r\n            }\r\n\r\n            return obj.GetPropertyRef(name, caller);\r\n        }\r\n\r\n        [Emitted]\r\n        public static object GetObjectFieldDirect(DObject/*!*/ obj, PhpReference/*!*/ field,\r\n            string/*!*/ name, DTypeDesc caller, bool quiet)\r\n        {\r\n            Debug.Assert(obj != null && field != null && name != null);\r\n\r\n            if (field.IsSet)\r\n            {\r\n                return field.Value;\r\n            }\r\n            else\r\n            {\r\n                return GetObjectProperty(obj, name, caller, quiet);\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static PhpReference GetObjectFieldDirectRef(DObject/*!*/ obj, PhpReference/*!*/ field,\r\n            string/*!*/ name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(obj != null && field != null && name != null);\r\n\r\n            if (field.IsSet)\r\n            {\r\n                field.IsAliased = true;\r\n                return field;\r\n            }\r\n            else\r\n            {\r\n                return GetObjectPropertyRef(obj, name, caller);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SetProperty, SetObjectProperty\r\n\r\n        /// <summary>\r\n        /// Sets the value of an instance property of an object.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable to set the property of.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"value\">The new property value (can be a <see cref=\"PhpReference\"/>).</param>\r\n        /// <param name=\"context\">The context in which a new instance of <see cref=\"stdClass\"/> is possibly created.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is neither <see cref=\"DObject\"/> nor empty (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"var\"/> is empty and new <see cref=\"stdClass\"/> instance is created\r\n        /// (Strict).</exception>\r\n        [Emitted]\r\n        public static void SetProperty(object value, ref object var, string name, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            Debug.Assert(!(var is PhpReference) && name != null);\r\n\r\n            DObject obj;\r\n\r\n            // DObject:\r\n            if ((obj = var as DObject) != null)\r\n            {\r\n                SetObjectProperty(obj, name, value, caller);\r\n                return;\r\n            }\r\n\r\n            // empty variable:\r\n            if (IsEmptyForEnsure(var))\r\n            {\r\n                stdClass var_object = stdClass.CreateDefaultObject(context);\r\n                SetObjectProperty(var_object, name, value, caller);\r\n                var = var_object;\r\n                return;\r\n            }\r\n\r\n            // errors - variable is a scalar, a PhpArray or a non-empty string:\r\n            PhpException.VariableMisusedAsObject(var, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the value of an instance property of an object.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"value\">The new property value (can be a <see cref=\"PhpReference\"/>).</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <remarks>Assumes that <paramref name=\"obj\"/> is not null.</remarks>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static void SetObjectProperty(DObject/*!*/ obj, string name, object value, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(obj != null && name != null);\r\n\r\n            if (ReferenceEquals(obj, ScriptContext.SetterChainSingletonObject))\r\n            {\r\n                ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n                if (value is PhpReference)\r\n                {\r\n                    context.AbortSetterChain(false);\r\n                    return;\r\n                }\r\n\r\n                // extend and finish the setter chain\r\n                context.ExtendSetterChain(new RuntimeChainProperty(name));\r\n                context.FinishSetterChain(value);\r\n                return;\r\n            }\r\n\r\n            obj.SetProperty(name, value, caller);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetObjectFieldDirect(object value, DObject/*!*/ obj, PhpReference/*!*/ field,\r\n            string/*!*/ name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(obj != null && field != null && name != null && !(value is PhpReference));\r\n\r\n            if (field.IsSet)\r\n            {\r\n                field.Value = value;\r\n            }\r\n            else\r\n            {\r\n                SetObjectProperty(obj, name, value, caller);\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n        public static void SetObjectFieldDirectRef(PhpReference value, DObject/*!*/ obj, ref PhpReference/*!*/ field,\r\n            string/*!*/ name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(obj != null && field != null && name != null);\r\n\r\n            if (field.IsSet)\r\n            {\r\n                field = value;\r\n            }\r\n            else\r\n            {\r\n                SetObjectProperty(obj, name, value, caller);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region UnsetProperty\r\n\r\n        /// <summary>\r\n        /// Unsets an instance property.\r\n        /// </summary>\r\n        /// <param name=\"x\">The variable to unset the property of.</param>\r\n        /// <param name=\"name\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <remarks><para>Pattern: unset(x->name)</para></remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"x\"/> is non-null and is not <see cref=\"DObject\"/> (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static void UnsetProperty(object x, string name, DTypeDesc caller)\r\n        {\r\n            Debug.Assert(!(x is PhpReference) && name != null);\r\n\r\n            DObject obj = x as DObject;\r\n            if (obj == null)\r\n            {\r\n                // PHP doesn't report any error but we do:\r\n                if (x != null) PhpException.VariableMisusedAsObject(x, false);\r\n                return;\r\n            }\r\n\r\n            obj.UnsetProperty(name, caller);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region InvokeMethod\r\n\r\n        /// <summary>\r\n        /// Performs the &quot;instance style&quot; invocation (<c>$x->f()</c>) of a method.\r\n        /// </summary>\r\n        /// <param name=\"x\">The object to invoke the method on.</param>\r\n        /// <param name=\"methodName\">The name of the method.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the invocation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The method's return value (always a <see cref=\"PhpReference\"/>).</returns>\r\n        /// <remarks>\r\n        /// Invokes both <c>instance</c> and <c>static</c> methods on a given object.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"methodName\"/> is not a string. (Error)</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"x\"/> is not an instance of <see cref=\"DObject\"/>. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The method is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static PhpReference InvokeMethod(object x, object methodName, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            // verify that methodName is a string\r\n            string name = PhpVariable.AsString(methodName);\r\n            if (name == null)\r\n            {\r\n                context.Stack.RemoveFrame();\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"invalid_method_name\"));\r\n                return new PhpReference();\r\n            }\r\n\r\n            return InvokeMethod(x, name, caller, context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs the &quot;instance style&quot; invocation (<c>$x->f()</c>) of a method (optimized version to be used\r\n        /// when the name is surely a string).\r\n        /// </summary>\r\n        /// <param name=\"x\">The object to invoke the method on.</param>\r\n        /// <param name=\"methodName\">The name of the method.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the invocation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The method's return value (always a <see cref=\"PhpReference\"/>).</returns>\r\n        /// <remarks>\r\n        /// Invokes both <c>instance</c> and <c>static</c> methods on a given object.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"x\"/> is not an instance of <see cref=\"DObject\"/>. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The method is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static PhpReference InvokeMethod(object x, string methodName, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            DObject obj = x as DObject;\r\n            if (obj == null)\r\n            {\r\n                if (x != null && Configuration.Application.Compiler.ClrSemantics)\r\n                {\r\n                    // TODO: some normalizing conversions (PhpString, PhpBytes -> string):\r\n                    obj = ClrObject.WrapRealObject(x);\r\n                }\r\n                else\r\n                {\r\n                    context.Stack.RemoveFrame();\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"method_called_on_non_object\", methodName));\r\n                    return new PhpReference();\r\n                }\r\n            }\r\n\r\n            object result = obj.InvokeMethod(methodName, caller, context);\r\n\r\n            // boxes a copy of the result:\r\n            return PhpVariable.MakeReference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Clone\r\n\r\n        /// <summary>\r\n        /// Implementation of the <c>clone</c> operator.\r\n        /// </summary>\r\n        /// <param name=\"x\">The object to clone.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The clone or <B>null</B> on an error.</returns>\r\n        /// <exception cref=\"PhpException\">If <paramref name=\"x\"/> is not an instance of <see cref=\"DObject\"/>. (Warning)</exception>\r\n        [Emitted]\r\n        public static object Clone(object x, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            DObject obj = x as DObject;\r\n            if (obj == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"clone_called_on_non_object\"));\r\n                return null;\r\n            }\r\n\r\n            return obj.CloneObject(caller, context, false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Class Operators\r\n\r\n        #region GetClassConstant\r\n\r\n        /// <summary>\r\n        /// Gets the value of a constant of a class or interface.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type to get the constant of.</param>\r\n        /// <param name=\"constantName\">The constant name</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the access.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The value of the constant.</returns>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the constant at\r\n        /// compile time. Otherwise, the appropriate direct access IL instructions are directly emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The constant denoted by <paramref name=\"constantName\"/> was not found. (Error)</exception>\r\n        [Emitted]\r\n        public static object GetClassConstant(DTypeDesc type, string constantName, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            if (type == null) return null;\r\n\r\n            // lookup the constant desc\r\n            DConstantDesc constant;\r\n            switch (type.GetConstant(new VariableName(constantName), caller, out constant))\r\n            {\r\n                case GetMemberResult.NotFound:\r\n                    {\r\n                        PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_class_constant\",\r\n                            type.MakeFullName(), constantName));\r\n                        return null;\r\n                    }\r\n\r\n                case GetMemberResult.BadVisibility:\r\n                    {\r\n                        PhpException.ConstantNotAccessible(\r\n                            constant.DeclaringType.MakeFullName(),\r\n                            constantName,\r\n                            (caller == null ? String.Empty : caller.MakeFullName()),\r\n                            constant.IsProtected);\r\n                        return null;\r\n                    }\r\n            }\r\n\r\n            // make sure that the constant has been initialized for this request\r\n            return PhpVariable.Dereference(constant.GetValue(context));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetStaticPropertyDesc\r\n\r\n        /// <summary>\r\n        /// Gets the <see cref=\"DPropertyDesc\"/> of a static property of a class.\r\n        /// </summary>\r\n        /// <param name=\"type\">The class to get the property of.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the retrieval.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"quiet\">If <B>true</B>, the &quot;property not found&quot; exception should not be thrown.</param>\r\n        /// <returns>The <see cref=\"DPropertyDesc\"/> representing the static property or <B>null</B> if an error occurs.</returns>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        internal static DPropertyDesc GetStaticPropertyDesc(DTypeDesc type, object propertyName, DTypeDesc caller,\r\n            ScriptContext context, bool quiet)\r\n        {\r\n            if (type == null) return null;\r\n\r\n            // convert propertyName to string\r\n            string name = (propertyName == null ? String.Empty : Convert.ObjectToString(propertyName));\r\n\r\n            // find the property\r\n            DPropertyDesc property;\r\n            switch (type.GetProperty(new VariableName(name), caller, out property))\r\n            {\r\n                case GetMemberResult.NotFound:\r\n                    {\r\n                        if (!quiet) PhpException.UndeclaredStaticProperty(type.MakeFullName(), name);\r\n                        return null;\r\n                    }\r\n\r\n                case GetMemberResult.BadVisibility:\r\n                    {\r\n                        if (!quiet)\r\n                        {\r\n                            PhpException.PropertyNotAccessible(\r\n                                property.DeclaringType.MakeFullName(),\r\n                                name,\r\n                                (caller == null ? String.Empty : caller.MakeFullName()),\r\n                                property.IsProtected);\r\n                        }\r\n                        return null;\r\n                    }\r\n\r\n                case GetMemberResult.OK:\r\n                    {\r\n                        if (!property.IsStatic) goto case GetMemberResult.NotFound;\r\n                        break;\r\n                    }\r\n            }\r\n\r\n            // make sure that the property has been initialized for this request\r\n            property.EnsureInitialized(context);\r\n\r\n            return property;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetStaticProperty, GetStaticPropertyRef\r\n\r\n        /// <summary>\r\n        /// Gets the value of a static property of a class.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type to get the property of.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the retrieval.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"quiet\">If <B>true</B>, the &quot;property not found&quot; exception should not be thrown.</param>\r\n        /// <returns>The value of the static property.</returns>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the property or the calling type desc at\r\n        /// compile time. Otherwise, appropriate IL instructions that access the property directly are emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static object GetStaticProperty(DTypeDesc type, object propertyName, DTypeDesc caller,\r\n            ScriptContext context, bool quiet)\r\n        {\r\n            DPropertyDesc property = GetStaticPropertyDesc(type, propertyName, caller, context, quiet);\r\n            if (property == null) return null;\r\n\r\n            return PhpVariable.Dereference(property.Get(null));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a reference to a static property of a class.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type to get the property of.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The reference.</returns>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the property or the calling type desc at\r\n        /// compile time. Otherwise, appropriate IL instructions that access the property directly are emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static PhpReference GetStaticPropertyRef(DTypeDesc type, object propertyName, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            DPropertyDesc property = GetStaticPropertyDesc(type, propertyName, caller, context, false);\r\n            if (property == null) return new PhpReference();\r\n\r\n            object property_value = property.Get(null);\r\n            PhpReference property_value_ref = PhpVariable.Dereference(ref property_value);\r\n\r\n            if (property_value_ref == null) return new PhpReference(property_value);\r\n            else\r\n            {\r\n                property_value_ref.IsAliased = true;\r\n                return property_value_ref;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SetStaticProperty\r\n\r\n        /// <summary>\r\n        /// Sets the value of a static property of a class.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type to set the property of.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"value\">The new property value (can be a <see cref=\"PhpReference\"/>).</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the property or the calling type desc at\r\n        /// compile time. Otherwise, appropriate IL instructions that access the property directly are emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The property denoted by <paramref name=\"propertyName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The property is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static void SetStaticProperty(DTypeDesc type, object propertyName, object value, DTypeDesc caller,\r\n            ScriptContext context)\r\n        {\r\n            DPropertyDesc property = GetStaticPropertyDesc(type, propertyName, caller, context, false);\r\n            if (property == null) return;\r\n\r\n            property.Set(null, value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region UnsetStaticProperty\r\n\r\n        /// <summary>\r\n        /// Throws the &quot;Attempt to unset static property&quot; error.\r\n        /// </summary>\r\n        /// <param name=\"type\">Represents the type to &quot;unset&quot; the property of.</param>\r\n        /// <param name=\"propertyName\">The property name.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the operation.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the property or the calling type desc at\r\n        /// compile time. Otherwise, the error throwing code is directly emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">Static properties cannot be unset (Error).</exception>\r\n        [Emitted]\r\n        public static void UnsetStaticProperty(DTypeDesc type, object propertyName, DTypeDesc caller, ScriptContext context)\r\n        {\r\n            // convert propertyName to string\r\n            string name = (propertyName == null ? String.Empty : Convert.ObjectToString(propertyName));\r\n\r\n            // throw the error\r\n            PhpException.StaticPropertyUnset(type.MakeFullName(), name);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetStaticMethodDesc, InvokeStaticMethod\r\n\r\n        /// <summary>\r\n        /// Attemps to find a method desc according to a given class name and method name. Used when\r\n        /// a non-virtual dispatch is about to be performed and when a <c>array(class, method)</c>\r\n        /// callback is being bound.\r\n        /// </summary>\r\n        /// <param name=\"requestedType\">The type whose method should be returned.</param>\r\n        /// <param name=\"methodName\">The method name.</param>\r\n        /// <param name=\"self\">Current <c>$this</c>. Will be set to an instance, on which the resulting\r\n        /// CLR method should be invoked (<B>null</B> if the CLR method is static).</param>\r\n        /// <param name=\"caller\"><see cref=\"Type\"/> of the object that request the lookup.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"quiet\">If <B>true</B>, no exceptions will be thrown if an error occurs.</param>\r\n        /// <param name=\"removeFrame\">If <B>true</B>, <see cref=\"PhpStack.RemoveFrame\"/> will be called\r\n        /// before throwing an exception.</param>\r\n        /// <param name=\"isCallerMethod\">Will be set to true, if required method was not found but __callStatic was.</param>\r\n        /// <returns>The <see cref=\"DRoutineDesc\"/> or <B>null</B> on error.</returns>\r\n        internal static DRoutineDesc GetStaticMethodDesc(DTypeDesc requestedType, string methodName, ref DObject self,\r\n            DTypeDesc caller, ScriptContext context, bool quiet, bool removeFrame, out bool isCallerMethod)\r\n        {\r\n            Debug.Assert(requestedType != null);\r\n\r\n            isCallerMethod = false;\r\n\r\n            DRoutineDesc method;\r\n            GetMemberResult result = requestedType.GetMethod(new Name(methodName), caller, out method);\r\n\r\n            if (result == GetMemberResult.NotFound)\r\n            {\r\n                // if not found, perform __callStatic or __call 'magic' method lookup\r\n                Name callMethod = (self != null && requestedType.IsAssignableFrom(self.TypeDesc)) ?\r\n                    Name.SpecialMethodNames.Call : Name.SpecialMethodNames.CallStatic;\r\n\r\n                if ((result = requestedType.GetMethod(callMethod, caller, out method)) != GetMemberResult.NotFound)\r\n                {\r\n                    isCallerMethod = true;\r\n                }\r\n                else\r\n                {\r\n                    // there is no such method in the class\r\n                    if (removeFrame) context.Stack.RemoveFrame();\r\n                    if (!quiet) PhpException.UndefinedMethodCalled(requestedType.MakeFullName(), methodName);\r\n\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            if (result == GetMemberResult.BadVisibility)\r\n            {\r\n                if (removeFrame) context.Stack.RemoveFrame();\r\n                if (!quiet)\r\n                {\r\n                    PhpException.MethodNotAccessible(\r\n                        method.DeclaringType.MakeFullName(),\r\n                        method.MakeFullName(),\r\n                        (caller == null ? String.Empty : caller.MakeFullName()),\r\n                        method.IsProtected);\r\n                }\r\n                return null;\r\n            }\r\n\r\n            // check whether the method is abstract\r\n            if (method.IsAbstract)\r\n            {\r\n                if (removeFrame) context.Stack.RemoveFrame();\r\n                if (!quiet) PhpException.AbstractMethodCalled(method.DeclaringType.MakeFullName(), method.MakeFullName());\r\n\r\n                return null;\r\n            }\r\n\r\n            if (method.IsStatic)\r\n            {\r\n                self = null;\r\n            }\r\n            else\r\n            {\r\n                // check whether self is of acceptable type\r\n                if (self != null && !method.DeclaringType.RealType.IsInstanceOfType(self.RealObject)) self = null;\r\n\r\n\r\n                /*\r\n                // PHP allows for static invocations of instance method\r\n\t\t\t\tif (self == null &&\r\n\t\t\t\t\t(requestedType.IsAbstract || !(requestedType is PhpTypeDesc)) &&\r\n\t\t\t\t\t(method.DeclaringType.IsAbstract || !(method.DeclaringType is PhpTypeDesc)))\r\n\t\t\t\t{\r\n\t\t\t\t\t// calling instance methods declared in abstract classes statically through abstract classes\r\n\t\t\t\t\t// is unsupported -  passing null as 'this' to such instance method could result in\r\n\t\t\t\t\t// NullReferenceException even if the method does not touch $this\r\n\t\t\t\t\tif (removeFrame) context.Stack.RemoveFrame();\r\n\t\t\t\t\tif (!quiet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"nonstatic_method_called_statically\",\r\n\t\t\t\t\t\t\tmethod.DeclaringType.MakeFullName(), method.MakeFullName()));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (self == null)\r\n\t\t\t\t{\r\n                    if (!quiet && !context.Config.Variables.ZendEngineV1Compatible)\r\n                    {\r\n                        PhpException.Throw(PhpError.Strict, CoreResources.GetString(\"nonstatic_method_called_statically\",\r\n                            method.DeclaringType.MakeFullName(), method.MakeFullName()));\r\n                    }\r\n\r\n\t\t\t\t\t// create a dummy instance to be passed as 'this' to the instance method\r\n\t\t\t\t\tDTypeDesc dummy_type =\r\n\t\t\t\t\t\t(!requestedType.IsAbstract && requestedType is PhpTypeDesc) ? requestedType : method.DeclaringType;\r\n\r\n\t\t\t\t\tself = PhpFunctionUtils.InvokeConstructor(\r\n                        dummy_type,\r\n                        //Emit.Types.ScriptContext_Bool,\r\n                        context, false);\r\n\t\t\t\t}*/\r\n\r\n\r\n                //\r\n                // The code above was commented and replaced with following.\r\n                //\r\n                // We can call instance method, and pass null as 'this', and expect\r\n                // it can fail with NullReferenceException (even if the method does not touch $this).\r\n                // \r\n                // Note this solution has no side effect as above - invoking constructor of dummy instance.\r\n                //\r\n\r\n                // !! self can be null !!\r\n\r\n                if (self == null)\r\n                {\r\n                    if (!quiet /*&& !context.Config.Variables.ZendEngineV1Compatible*/)\r\n                    {\r\n                        PhpException.Throw(PhpError.Strict, CoreResources.GetString(\"nonstatic_method_called_statically\",\r\n                            method.DeclaringType.MakeFullName(), method.MakeFullName()));\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            return method;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs the &quot;static style&quot; invocation (<c>A::f()</c>) of a method.\r\n        /// </summary>\r\n        /// <param name=\"type\"><see cref=\"DTypeDesc\"/> representing the type to invoke the method on.</param>\r\n        /// <param name=\"methodName\">The method name.</param>\r\n        /// <param name=\"self\">Current object context. If an instance method is invoked in another instance method statically,\r\n        /// it is passed current <c>$this</c> and no notice is thrown.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the invocation. Should not be unknown.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The method's return value (always a <see cref=\"PhpReference\"/>).</returns>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the method or the calling type desc at\r\n        /// compile time. Otherwise, the <c>OpCodes.Call</c> IL instruction is directly emitted.\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"methodName\"/> is not a string. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The method denoted by <paramref name=\"methodName\"/> was not found. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The method is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        /// <exception cref=\"PhpException\">The method is abstract (Error).</exception>\r\n        /// <exception cref=\"PhpException\">The method is not static (Error or Strict).</exception>\r\n        [Emitted]\r\n        public static PhpReference InvokeStaticMethod(DTypeDesc type, object methodName, DObject self,\r\n            DTypeDesc caller, ScriptContext context)\r\n        {\r\n            if (type == null)\r\n            {\r\n                // error thrown earlier\r\n                return new PhpReference();\r\n            }\r\n\r\n            // verify that methodName is a string\r\n            string name = PhpVariable.AsString(methodName);\r\n            if (String.IsNullOrEmpty(name))\r\n            {\r\n                context.Stack.RemoveFrame();\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"invalid_method_name\"));\r\n                return new PhpReference();\r\n            }\r\n\r\n            // find the method desc\r\n            bool isCallStaticMethod;\r\n            DRoutineDesc method = GetStaticMethodDesc(type, name, ref self, caller, context, false, true, out isCallStaticMethod);\r\n\r\n            if (method == null) return new PhpReference();\r\n\r\n            // invoke the method\r\n            object result;\r\n            var stack = context.Stack;\r\n            stack.LateStaticBindType = type;\r\n               \r\n            if (isCallStaticMethod)\r\n            {\r\n                // __callStatic was found instead, not {methodName}\r\n                PhpArray args = stack.CollectFrame();   // get array with args, remove the previous stack\r\n\r\n                // original parameters are passed to __callStatic in an array as the second parameter\r\n                stack.AddFrame(methodName, args);\r\n                result = method.Invoke(self, stack, caller);\r\n            }\r\n            else\r\n            {\r\n//                try\r\n//                {\r\n                    result = method.Invoke(self, stack, caller);\r\n//                }\r\n//                catch (NullReferenceException)\r\n//                {\r\n//                    if (self == null && !method.IsStatic)\r\n//                    {   // $this was null, it is probably caused by accessing $this\r\n//#if DEBUG\r\n//                        throw;\r\n//#else\r\n//                    PhpException.ThisUsedOutOfObjectContext();\r\n//                    result = null;\r\n//#endif\r\n//                    }\r\n//                    else\r\n//                    {\r\n//                        throw;  // $this was not null, this should not be handled here\r\n//                    }\r\n//                }\r\n            }\r\n\r\n            return PhpVariable.MakeReference(PhpVariable.Copy(result, CopyReason.ReturnedByCopy));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region New, InstanceOf, MakeGenericTypeInstantiation\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of a given type.\r\n        /// </summary>\r\n        /// <param name=\"type\"><see cref=\"DTypeDesc\"/> representing the type to instantiate.</param>\r\n        /// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the instantiation.\r\n        /// </param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <param name=\"nameContext\">Current <see cref=\"NamingContext\"/>.</param>\r\n        /// <returns>The new instance or <B>null</B> if an error occurs.</returns>\r\n        /// <remarks>\r\n        /// <para>\r\n        /// This operator expects that constructor parameters have been pushed onto <see cref=\"ScriptContext.Stack\"/>.\r\n        /// </para>\r\n        /// <para>\r\n        /// Note that this operator is used only when it is impossible to resolve the class at compile time. Otherwise,\r\n        /// the <c>OpCodes.Newobj</c> IL instruction is directly emitted.\r\n        /// </para>\r\n        /// </remarks>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"type\"/> denotes an interface. (Error)</exception>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"type\"/> denotes an abstract class. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">A constructor is inaccessible due to its protected or private visibility level (Error).\r\n        /// </exception>\r\n        [Emitted]\r\n        public static object New(DTypeDesc type, DTypeDesc caller, ScriptContext context, NamingContext nameContext)\r\n        {\r\n            // error has been thrown by Convert.ObjectToTypeDesc or MakeGenericTypeInstantiation\r\n            if (type == null)\r\n            {\r\n                context.Stack.RemoveFrame();\r\n                return null;\r\n            }\r\n\r\n            // interfaces and abstract classes cannot be instantiated\r\n            if (type.IsAbstract)\r\n            {\r\n                context.Stack.RemoveFrame();\r\n                PhpException.CannotInstantiateType(type.MakeFullName(), type.IsInterface);\r\n                return null;\r\n            }\r\n\r\n            return type.New(context.Stack, caller, nameContext);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of a given CLR type.\r\n        /// </summary>\r\n        /// <param name=\"clrType\"><see cref=\"ClrTypeDesc\"/> representing the type to instantiate.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The new instance or <B>null</B> if an error occurs.</returns>\r\n        [Emitted]\r\n        public static object NewClr(DTypeDesc clrType, ScriptContext context)\r\n        {\r\n            PhpStack stack = context.Stack;\r\n            if (clrType == null)\r\n            {\r\n                stack.RemoveFrame();\r\n                return null;\r\n            }\r\n\r\n            // invoke constructor argless stub, which will instantiate the type\r\n            stack.AllowProtectedCall = true;\r\n            return /*(DObject)*/((ClrTypeDesc)clrType).Constructor.Invoke(null, stack);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether a variable is an instance of a given type.\r\n        /// </summary>\r\n        /// <param name=\"var\">The variable to check.</param>\r\n        /// <param name=\"type\"><see cref=\"DTypeDesc\"/> representing the given type.</param>\r\n        /// <returns><B>true</B> if <paramref name=\"var\"/> is an instance of a class or interface given by\r\n        /// <paramref name=\"type\"/>, <B>false</B> otherwise.</returns>\r\n        /// <remarks>\r\n        /// Note that this operator is used only when it is impossible to resolve the class at compile time. Otherwise,\r\n        /// the <c>OpCodes.Isinst</c> IL instruction is directly emitted.\r\n        /// </remarks>\r\n        [Emitted]\r\n        public static bool InstanceOf(object var, DTypeDesc type)\r\n        {\r\n            return (type != null) ? type.RealType.IsInstanceOfType(PhpVariable.Unwrap(var)) : false;\r\n        }\r\n\r\n        [Emitted]\r\n        public static DObject TypeOf(DTypeDesc type)\r\n        {\r\n            return (type != null) ? ClrObject.WrapRealObject(type.RealType) : null;\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc arg1)\r\n        {\r\n            return MakeGenericTypeInstantiation(genericType, new DTypeDesc[] { arg1 });\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc arg1, DTypeDesc arg2)\r\n        {\r\n            return MakeGenericTypeInstantiation(genericType, new DTypeDesc[] { arg1, arg2 });\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3)\r\n        {\r\n            return MakeGenericTypeInstantiation(genericType, new DTypeDesc[] { arg1, arg2, arg3 });\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4)\r\n        {\r\n            return MakeGenericTypeInstantiation(genericType, new DTypeDesc[] { arg1, arg2, arg3, arg4 });\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc[]/*!*/ args)\r\n        {\r\n            return MakeGenericTypeInstantiation(genericType, args, args.Length);\r\n        }\r\n\r\n        [Emitted]\r\n        public static DTypeDesc MakeGenericTypeInstantiation(DTypeDesc genericType, DTypeDesc[]/*!*/ args, int argCount)\r\n        {\r\n            // error already reported:\r\n            if (genericType == null) return null;\r\n\r\n            // checks the arguments and substitutes the default types to the missing ones if applicable:\r\n            if (!genericType.MakeGenericArguments(ref args, ref argCount, _ReportErrorMakingInstantiation))\r\n            {\r\n                // some mandatory arguments are missing:\r\n                return null;\r\n            }\r\n\r\n            Type[] real_args = new Type[argCount];\r\n            for (int i = 0; i < argCount; i++)\r\n            {\r\n                // error already reported:\r\n                if (args[i] == null) return null;\r\n                real_args[i] = args[i].RealType;\r\n            }\r\n\r\n            Type instantiation = genericType.RealType.MakeGenericType(real_args);\r\n\r\n            return DTypeDesc.Create(instantiation);\r\n        }\r\n\r\n        private static void ReportErrorMakingInstantiation(DTypeDesc.MakeGenericArgumentsResult/*!*/ error,\r\n            DTypeDesc/*!*/ genericType, DTypeDesc argument, GenericParameterDesc/*!*/ parameter)\r\n        {\r\n            switch (error)\r\n            {\r\n                case DTypeDesc.MakeGenericArgumentsResult.IncompatibleConstraint:\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"incompatible_type_parameter_constraints_type\",\r\n                        argument.MakeFullName(), parameter.RealType.GenericParameterPosition, parameter.RealType.Name));\r\n                    break;\r\n\r\n                case DTypeDesc.MakeGenericArgumentsResult.MissingArgument:\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"missing_type_argument_in_type_use\",\r\n                        genericType.MakeFullName(), parameter.RealType.GenericParameterPosition, parameter.RealType.Name));\r\n                    break;\r\n\r\n                case DTypeDesc.MakeGenericArgumentsResult.TooManyArguments:\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"too_many_type_arguments_in_type_use\",\r\n                        genericType.MakeFullName(), genericType.GenericParameters.Length));\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private static readonly Action<DTypeDesc.MakeGenericArgumentsResult, DTypeDesc, DTypeDesc, GenericParameterDesc>/*!*/ _ReportErrorMakingInstantiation =\r\n            new Action<DTypeDesc.MakeGenericArgumentsResult, DTypeDesc, DTypeDesc, GenericParameterDesc>(ReportErrorMakingInstantiation);\r\n\r\n        #endregion\r\n\r\n        #region Class name resolution\r\n\r\n        /// <summary>\r\n        /// Gets fully qualified class name.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static string GetFullyQualifiedName(DTypeDesc type)\r\n        {\r\n            if (type == null)\r\n                return string.Empty;\r\n\r\n            return type.MakeFullName();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Strict Equality Operator\r\n\r\n        /// <summary>\r\n        /// Compares two objects for strict equality in a manner of the PHP.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first object.</param>\r\n        /// <param name=\"y\">The second object.</param>\r\n        /// <returns>Whether the values and types of operands are the same.</returns>\r\n        [Emitted]\r\n        public static bool StrictEquality(object x, object y)\r\n        {\r\n            if (x == null || y == null) return x == y;\r\n\r\n            // objects are strictly equal in a terms of ZE2 iff references are the same:\r\n            DObject objx = x as DObject;\r\n            if (objx != null)\r\n            {\r\n                //if (!ScriptContext.CurrentContext.Config.Variables.ZendEngineV1Compatible)\r\n                //{\r\n                return Object.ReferenceEquals(x, y);\r\n                //}\r\n\r\n                //DObject objy = y as DObject;\r\n                //return (objy != null && objx.TypeDesc == objy.TypeDesc && PhpComparer./*Default.*/CompareEq(x, y));\r\n            }\r\n\r\n            // compares arrays strictly:\r\n            PhpArray ax, ay;\r\n            if ((ax = x as PhpArray) != null)\r\n            {\r\n                return ((ay = y as PhpArray) != null) ? ax.StrictCompareEq(ay) : false;\r\n            }\r\n\r\n            Type xtype;\r\n            Type ytype;\r\n\r\n            if (x.GetType() == typeof(PhpBytes) || x.GetType() == typeof(PhpString)) xtype = typeof(string); else xtype = x.GetType();\r\n            if (y.GetType() == typeof(PhpBytes) || y.GetType() == typeof(PhpString)) ytype = typeof(string); else ytype = y.GetType();\r\n\r\n            return xtype == ytype && PhpComparer./*Default.*/CompareEq(x, y);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares given object for strict equality with empty PHP array.\r\n        /// </summary>\r\n        /// <param name=\"x\">Object to compare.</param>\r\n        /// <returns>Whether <paramref name=\"x\"/> is an empty PHP array.</returns>\r\n        [Emitted]\r\n        public static bool StrictEmptyPhpArrayEquality(object x)\r\n        {\r\n            return x != null && x.GetType() == typeof(PhpArray) && ((PhpArray)x).Count == 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares given array for strict equality with empty PHP array.\r\n        /// </summary>\r\n        /// <param name=\"x\">Object to compare.</param>\r\n        /// <returns>Whether <paramref name=\"x\"/> is an empty PHP array.</returns>\r\n        [Emitted]\r\n        public static bool StrictEmptyPhpArrayEquality(PhpArray x)\r\n        {\r\n            return x != null && x.Count == 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Exception Handling\r\n\r\n        /// <summary>\r\n        /// Throws an exception.\r\n        /// </summary>\r\n        /// <param name=\"context\">A script context.</param>\r\n        /// <param name=\"variable\">An object representing the exception to throw.</param>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"variable\"/> is not valid exception object (Error).</exception>\r\n        /// <exception cref=\"PhpUserException\">The required exception thrown.</exception>\r\n        [Emitted]\r\n        [DebuggerNonUserCode]\r\n        public static void Throw(ScriptContext context, object variable)\r\n        {\r\n            Library.SPL.Exception splexception;\r\n            ClrObject clrobj;\r\n            System.Exception clrexception;\r\n\r\n            if ((splexception = variable as Library.SPL.Exception) != null)\r\n            {\r\n                throw new PhpUserException(splexception);\r\n            }\r\n            else if ((clrobj = variable as ClrObject) != null && (clrexception = clrobj.RealObject as System.Exception) != null)\r\n            {\r\n                throw clrexception;\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Error, CoreResources.invalid_exception_object);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Paths\r\n\r\n        /// <summary>\r\n        /// Converts relative path to absolute using source root. For internal use only.\r\n        /// </summary>\r\n        public static string ToAbsoluteSourcePath(sbyte level, string/*!*/ path)\r\n        {\r\n            Debug.Assert(path != null);\r\n            return new RelativePath(level, path).ToFullPath(Configuration.Application.Compiler.SourceRoot).ToString();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/OrderedDictionary.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing System.Diagnostics;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// Dictionary preserving order of entries.\r\n    /// Defines additional methods for ordering and for PHP library functions support.\r\n    /// </summary>\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public sealed class OrderedDictionary : IDictionary<IntStringKey, object>, IDictionary, ISerializable, ICloneable\r\n    {\r\n        #region Fields\r\n\r\n        private int tableMask;\t\t\t// Mask = (tableSize - 1)\r\n        private int tableSize;\t\t\t// Table size = (1 << n)\r\n        private int count,              // Used entries (0..count)\r\n                    freeCount,\t        // Amount of free entries within (0..count)\r\n                    freeList;           // first free Entry\r\n        //private int nextNewIndex;\t    // Index for next new element   // TODO: to be moved to PhpArray\r\n        private int listHead;\t\t\t// first Entry\r\n        private int listTail;\t\t\t// last Entry\r\n        private int[]/*!*/buckets;\t\t// indexes to Entries (buckets[ hash & tableMask ])\r\n        private Entry[] entries;        // initialized lazily\r\n\r\n        /// <summary>\r\n        /// Used as intial value for <see cref=\"buckets\"/> if array is empty.\r\n        /// With this as buckets, all the operators work and they do not have to check whether the collection is empty.\r\n        /// </summary>\r\n        private readonly static int[] emptyBuckets = new int[] { -1 };\r\n\r\n        // TODO: int flags = 0; // heuristics\r\n        /* e.g.:\r\n         * DeletionPerformed (whether nextNewIndex has to be recomputed when DeepCopied)\r\n         * HasDeepCopiableObjects (whether DeepCopy of values is necessary when cloned)\r\n         * IsSorted (only if all the items were added by [] operator or as a collection in ctor)\r\n         */\r\n\r\n        /// <summary>\r\n        /// Keep track of additional references. Increased when a copy is made, decreased is a copy is released.\r\n        /// </summary>\r\n        private int copiesCount = 0;\r\n\r\n        /// <summary>\r\n        /// Additional information about this instance creator.\r\n        /// </summary>\r\n        internal readonly object owner;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// Initialize new instance of <see cref=\"OrderedDictionary\"/> as a duplicate of given <paramref name=\"copyfrom\"/>.\r\n        /// </summary>\r\n        /// <param name=\"owner\">Instance creator.</param>\r\n        /// <param name=\"copyfrom\">Instance of an existing <see cref=\"OrderedDictionary\"/>.</param>\r\n        internal OrderedDictionary(object owner, OrderedDictionary/*!*/copyfrom)\r\n        {\r\n            Debug.Assert(copyfrom != null);\r\n\r\n            // duplicate internal structure as it is,\r\n            // there are no references, so walk through the array is not necessary,\r\n            // also rehashing is not necessary.\r\n\r\n            this.tableSize = copyfrom.tableSize;\r\n            this.tableMask = copyfrom.tableMask;\r\n            if (copyfrom.buckets != emptyBuckets)\r\n            {\r\n                this.buckets = new int[this.tableSize];\r\n                Buffer.BlockCopy(copyfrom.buckets, 0, this.buckets, 0, this.tableSize * sizeof(int));\r\n                //Array.Copy(copyfrom.buckets, 0, this.buckets, 0, this.tableSize);\r\n                // TODO: check whether Array.Copy is faster\r\n            }\r\n            else\r\n            {\r\n                this.buckets = emptyBuckets;\r\n            }\r\n            this.listHead = copyfrom.listHead;\r\n            this.listTail = copyfrom.listTail;\r\n            this.count = copyfrom.count;\r\n            this.freeCount = copyfrom.freeCount;\r\n            this.freeList = copyfrom.freeList;\r\n            //this.nextNewIndex = copyfrom.nextNewIndex;\r\n            if (copyfrom.entries != null)\r\n            {\r\n                this.entries = new Entry[this.tableSize];\r\n                Array.Copy(copyfrom.entries, 0, this.entries, 0, this.count);\r\n            }\r\n            else\r\n            {\r\n                this.entries = null;\r\n            }\r\n\r\n            //\r\n            this.owner = owner;\r\n\r\n            //\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        public OrderedDictionary(object owner, int size)\r\n        {\r\n            this.tableSize = CalculatetableSize(size);\r\n            this.tableMask = 0;\t/* 0 means that this.buckets is uninitialized */\r\n            this.buckets = emptyBuckets;  // proper instance initialized lazily\r\n            this.listHead = -1;\r\n            this.listTail = -1;\r\n            this.count = this.freeCount = 0;\r\n            this.freeList = -1;\r\n            //this.nextNewIndex = 0;\r\n            this.entries = null;    // initialized lazily\r\n            this.owner = owner;     // instance creator\r\n\r\n            //\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private int CalculatetableSize(int size)\r\n        {\r\n            if (size < (1 << 30))\r\n            {\r\n                int i = (1 << 2);   // how big is our smallest possible array? \"1\" is min, do not put \"0\" here! Smaller number makes initialization faster, but slows down expanding. However the size is known mostly ...\r\n                while (i < size)\r\n                    i <<= 1;\r\n\r\n                return i;\r\n            }\r\n\r\n            /* prevent overflow */\r\n            return (1 << 30);\r\n        }\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void EnsureInitialized()\r\n        {\r\n            if (this.tableMask == 0)\r\n                InitializeBuckets();\r\n        }\r\n        private void InitializeBuckets()\r\n        {\r\n            Debug.Assert(this.entries == null, \"Initialized already!\");\r\n\r\n            int[] _buckets;\r\n\r\n            this.buckets = _buckets = new int[this.tableSize];\n\t\t    this.tableMask = this.tableSize - 1;\r\n            this.entries = new Entry[this.tableSize];\r\n\r\n            for (int i = 0; i < _buckets.Length; i++)\r\n                _buckets[i] = -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Inner class: Entry\r\n\r\n        /// <summary>\r\n        /// An element stored in the table.\r\n        /// </summary>\r\n        [Serializable]\r\n        private struct Entry\r\n        {\r\n            /// <summary>\r\n            /// Key associated with the element.\r\n            /// </summary>\r\n            public IntStringKey Key { get { return _key; } set { _key = value; } }\r\n            internal IntStringKey _key;\r\n            \r\n            // linked list of entries:\r\n            internal int\r\n                next, last,             // within bucket\r\n                listNext, listLast;     // within the whole ordered dictionary list\r\n            \r\n            /// <summary>\r\n            /// Value associated with the element.\r\n            /// </summary>\r\n            public object Value { get { return _value; } set { _value = value; } }\r\n            private object _value;\r\n\r\n            //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n            public bool KeyEquals(ref IntStringKey other)\r\n            {\r\n                return _key.Equals(ref other);\r\n            }\r\n\r\n            //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n            public bool KeyEquals(int ikey)\r\n            {\r\n                return _key.Equals(ikey);\r\n            }\r\n\r\n            public KeyValuePair<IntStringKey, object> KeyValuePair { get { return new KeyValuePair<IntStringKey, object>(_key, _value); } }\r\n\r\n            /// <summary>\r\n            /// Wraps <see cref=\"Value\"/> into new instance of <see cref=\"PhpReference\"/>.\r\n            /// </summary>\r\n            /// <returns>New instance of <see cref=\"PhpReference\"/> assigned to <see cref=\"Value\"/>.</returns>\r\n            internal PhpReference/*!*/MakeValueReferenceNoCheck()\r\n            {\r\n                return new PhpReference(ref this._value);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n                \r\n        #region Inner class: Enumerator\r\n\r\n        [Serializable]\r\n        public sealed class Enumerator : IEnumerator<KeyValuePair<IntStringKey, object>>, IDictionaryEnumerator, IDisposable, IPhpEnumerator\r\n        {\r\n            /// <summary>\r\n            /// Enumerated table.\r\n            /// </summary>\r\n            internal OrderedDictionary/*!*/table;\r\n\r\n            /// <summary>\r\n            /// Reference to associated <see cref=\"PhpHashtable\"/>. Used to unregister enumerator.\r\n            /// </summary>\r\n            internal readonly PhpHashtable hashtable;\r\n\r\n            /// <summary>\r\n            /// Current element index.\r\n            /// </summary>\r\n            private int element;\r\n\r\n            /// <summary>\r\n            /// Fetched element data.\r\n            /// </summary>\r\n            private KeyValuePair<IntStringKey, object> current;\r\n\r\n            /// <summary>\r\n            /// Whether enumeration is on the start.\r\n            /// </summary>\r\n            bool start;\r\n\r\n            /// <summary>\r\n            /// Whether the enumerator should return <c>KeyValuePair{K, object}</c> when used as <see cref=\"IEnumerator\"/>.\r\n            /// If <B>false</B> it will return <see cref=\"DictionaryEntry\"/>.\r\n            /// </summary>\r\n            private readonly bool isGeneric;\r\n\r\n            /// <summary>\r\n            /// A reference to another <see cref=\"Enumerator\"/>, allows to link existing enumerators into a linked list.\r\n            /// </summary>\r\n            internal Enumerator next;\r\n\r\n            public Enumerator(OrderedDictionary/*!*/table, bool isGeneric)\r\n            {\r\n                Debug.Assert(table != null);\r\n\r\n                this.table = table;\r\n                this.element = -1;\r\n                this.current = new KeyValuePair<IntStringKey, object>();\r\n                this.start = true;\r\n                this.isGeneric = isGeneric;\r\n            }\r\n\r\n            public Enumerator(PhpHashtable/*!*/hashtable, bool isGeneric)\r\n                : this(hashtable.table, isGeneric)\r\n            {\r\n                this.hashtable = hashtable;\r\n                hashtable.RegisterEnumerator(this);\r\n            }\r\n\r\n            public object CurrentValue { get { return current.Value; } }\r\n            public IntStringKey CurrentKey { get { return current.Key; } }\r\n            private bool FetchCurrent()\r\n            {\r\n                if (element >= 0)\r\n                {\r\n                    current = new KeyValuePair<IntStringKey, object>(table.entries[element]._key, table.entries[element].Value);\r\n                    return true;\r\n                }\r\n\r\n                current = new KeyValuePair<IntStringKey, object>();\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Callback method caled by <see cref=\"_del_key_or_index\"/> when an entry has been deleted.\r\n            /// </summary>\r\n            /// <param name=\"entry_index\">Deleted entry index.</param>\r\n            /// <param name=\"next_entry_index\">Next entry index as a replacement.</param>\r\n            //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n            internal void EntryDeleted(int entry_index, int next_entry_index)\r\n            {\r\n                if (entry_index == this.element)\r\n                {\r\n                    this.element = next_entry_index;\r\n                    FetchCurrent();\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Called when underlaying table has been changed (Unshare() called).\r\n            /// </summary>\r\n            internal void TableChanged()\r\n            {\r\n                Debug.Assert(this.hashtable != null, \"Enumerator was not registered!\");\r\n                Debug.Assert(this.table != this.hashtable.table, \"Table was not changed!\");\r\n\r\n                this.table = this.hashtable.table;\r\n            }\r\n\r\n            #region IEnumerator<KeyValuePair<IntStringKey, object>>\r\n\r\n            public KeyValuePair<IntStringKey, object> Current\r\n            {\r\n                get\r\n                {\r\n                    return current;\r\n                }\r\n            }\r\n\r\n            object System.Collections.IEnumerator.Current\r\n            {\r\n                get { return isGeneric ? current : (object)((IDictionaryEnumerator)this).Entry; }\r\n            }\r\n\r\n            public bool MoveNext()\r\n            {\r\n                Debug.Assert(this.hashtable == null || this.hashtable.table == this.table, \"Underlaying table has been changed without updating Enumerator!\");\r\n\r\n                if (element >= 0)\r\n                {\r\n                    element = table.entries[element].listNext;\r\n                }\r\n                else if (start)\r\n                {\r\n                    element = table.listHead;\r\n                    start = false;\r\n                }\r\n\r\n                return FetchCurrent();\r\n            }\r\n\r\n            public void Reset()\r\n            {\r\n                element = -1;\r\n                start = true;\r\n            }\r\n\r\n            #endregion\r\n            \r\n            #region IDisposable\r\n\r\n            public void Dispose()\r\n            {\r\n                element = -1;\r\n                current = new KeyValuePair<IntStringKey, object>();\r\n\r\n                if (this.hashtable != null)\r\n                {\r\n                    this.hashtable.UnregisterEnumerator(this);\r\n                    //this.hashtable = null;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IDictionaryEnumerator Members\r\n\r\n            DictionaryEntry IDictionaryEnumerator.Entry { get { return new DictionaryEntry(current.Key, current.Value); } }\r\n            object IDictionaryEnumerator.Key { get { return current.Key; } }\r\n            object IDictionaryEnumerator.Value { get { return current.Value; } }\r\n\r\n            #endregion\r\n\r\n            #region IPhpEnumerator\r\n\r\n            public bool MoveLast()\r\n            {\r\n                start = false;\r\n                element = table.listTail;\r\n                return FetchCurrent();\r\n            }\r\n\r\n            public bool MoveFirst()\r\n            {\r\n                start = false;\r\n                element = table.listHead;\r\n                return FetchCurrent();\r\n            }\r\n\r\n            public bool MovePrevious()\r\n            {\r\n                if (element >= 0)\r\n                {\r\n                    element = table.entries[element].listLast;\r\n                }\r\n                else if (start)\r\n                {\r\n                    element = table.listTail;\r\n                    start = false;\r\n                }\r\n\r\n                return FetchCurrent();\r\n            }\r\n\r\n            public bool AtEnd\r\n            {\r\n                get\r\n                {\r\n                    // if the enumerator is in starting state, it's not considered to be at the end:\r\n                    if (start) return false;\r\n\r\n                    return (element < 0);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Inner class: EmptyEnumerator\r\n\r\n        /// <summary>\r\n        /// An enumerator representing an empty collection. Single instance can be reused.\r\n        /// </summary>\r\n        internal sealed class EmptyEnumerator : IEnumerator<KeyValuePair<IntStringKey, object>>, IDictionaryEnumerator, IDisposable, IPhpEnumerator\r\n        {\r\n            /// <summary>\r\n            /// Singleton instance of this class. Can be reused.\r\n            /// </summary>\r\n            internal readonly static EmptyEnumerator/*!*/SingletonInstance = new EmptyEnumerator();\r\n\r\n            private EmptyEnumerator()\r\n            {\r\n            }\r\n\r\n            public object CurrentValue { get { throw new InvalidOperationException(); } }\r\n            public IntStringKey CurrentKey { get { throw new InvalidOperationException(); } }\r\n            \r\n            #region IEnumerator<KeyValuePair<IntStringKey, object>>\r\n\r\n            public KeyValuePair<IntStringKey, object> Current { get { throw new InvalidOperationException(); } }\r\n\r\n            object System.Collections.IEnumerator.Current { get { throw new InvalidOperationException(); } }\r\n\r\n            public bool MoveNext()\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public void Reset()\r\n            {\r\n                // nothing\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IDisposable\r\n\r\n            public void Dispose()\r\n            {\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IDictionaryEnumerator Members\r\n\r\n            DictionaryEntry IDictionaryEnumerator.Entry { get { throw new InvalidOperationException(); } }\r\n            object IDictionaryEnumerator.Key { get { throw new InvalidOperationException(); } }\r\n            object IDictionaryEnumerator.Value { get { throw new InvalidOperationException(); } }\r\n\r\n            #endregion\r\n\r\n            #region IPhpEnumerator\r\n\r\n            public bool MoveLast()\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public bool MoveFirst()\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public bool MovePrevious()\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public bool AtEnd\r\n            {\r\n                get\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Inner class: FastEnumerator\r\n\r\n        internal FastEnumerator GetFastEnumerator()\r\n        {\r\n            return new FastEnumerator(this);\r\n        }\r\n\r\n        public struct FastEnumerator : IDisposable\r\n        {\r\n            private readonly OrderedDictionary/*!*/table;\r\n            private int currentEntry;\r\n            private KeyValuePair<IntStringKey, object> current;\r\n\r\n            public FastEnumerator(OrderedDictionary/*!*/table)\r\n            {\r\n                Debug.Assert(table != null);\r\n\r\n                this.table = table;\r\n                this.currentEntry = -1;\r\n                this.current = new KeyValuePair<IntStringKey, object>();\r\n            }\r\n\r\n            public bool MoveNext()\r\n            {\r\n                int next;\r\n                if (currentEntry >= 0)\r\n                    currentEntry = next = table.entries[currentEntry].listNext;\r\n                else\r\n                    currentEntry = next = table.listHead;  // start // note after unsuccessful MoveNext() enumerator is restarted\r\n\r\n                if (next >= 0)\r\n                {\r\n                    this.current = table.entries[next].KeyValuePair;\r\n                    return true;\r\n                }\r\n                \r\n                this.current = new KeyValuePair<IntStringKey, object>();\r\n                return false;\r\n            }\r\n\r\n            public IntStringKey CurrentKey { get { return current.Key; } }\r\n            public object CurrentValue\r\n            {\r\n                get\r\n                {\r\n                    return current.Value;\r\n                }\r\n                set\r\n                {\r\n                    ModifyCurrentValue(value);\r\n                    // current.Value is not updated for performance reasons\r\n                }\r\n            }\r\n            public KeyValuePair<IntStringKey, object> Current { get { return current; } }\r\n\r\n            public void Reset()\r\n            {\r\n                this.currentEntry = -1;\r\n                this.current = new KeyValuePair<IntStringKey, object>();\r\n            }\r\n\r\n            #region IDisposable\r\n\r\n            public void Dispose()\r\n            {\r\n                currentEntry = -1;\r\n                current = new KeyValuePair<IntStringKey, object>();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region internal: Helper methods\r\n\r\n            /// <summary>\r\n            /// Checks whether enumerator points to an entry.\r\n            /// </summary>\r\n            internal bool IsValid { get { return this.currentEntry >= 0; } }\r\n\r\n            /// <summary>\r\n            /// Gets or sets current entry's <see cref=\"Entry.listLast\"/> field.\r\n            /// </summary>\r\n            internal int CurrentEntryListLast\r\n            {\r\n                get { Debug.Assert(this.IsValid); return this.table.entries[this.currentEntry].listLast; }\r\n                set\r\n                {\r\n                    Debug.Assert(this.IsValid);\r\n                    this.table.entries[this.currentEntry].listLast = value;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets or sets current entry's <see cref=\"Entry.listNext\"/> field or <see cref=\"OrderedDictionary.listHead\"/> if enumerator is not started yet.\r\n            /// </summary>\r\n            internal int CurrentEntryListNext\r\n            {\r\n                get\r\n                {\r\n                    if (this.IsValid)\r\n                        return this.table.entries[this.currentEntry].listNext;\r\n                    else\r\n                        return this.table.listHead;\r\n                }\r\n                set\r\n                {\r\n                    if (this.IsValid)\r\n                        this.table.entries[this.currentEntry].listNext = value;\r\n                    else\r\n                        this.table.listHead = value;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Modifies key of current entry in the table.\r\n            /// </summary>\r\n            /// <param name=\"newkey\">New key for the current entry.</param>\r\n            /// <remarks>This function does not change the <see cref=\"CurrentKey\"/> and <see cref=\"Current\"/>, since both there values are already fetched.\r\n            /// Note the table must be rehashed manually after this operation.</remarks>\r\n            internal void ModifyCurrentEntryKey(IntStringKey newkey)\r\n            {\r\n                Debug.Assert(this.IsValid);\r\n                this.table.entries[this.currentEntry]._key = newkey;\r\n            }\r\n\r\n            internal void ModifyCurrentValue(object newvalue)\r\n            {\r\n                Debug.Assert(IsValid);\r\n                this.table.entries[this.currentEntry].Value = newvalue;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Delete current entry from the table and advances enumerator to the next entry.\r\n            /// </summary>\r\n            /// <param name=\"activeEnumerators\">List of active enumerators so they can be updated.</param>\r\n            /// <returns>Whether there is another entry in the table.</returns>\r\n            internal bool DeleteCurrentEntryAndMove(OrderedDictionary.Enumerator activeEnumerators)\r\n            {\r\n                Debug.Assert(this.IsValid);\r\n                int p = this.currentEntry;\r\n                int nIndex = this.CurrentKey.Integer & this.table.tableMask;\r\n                bool hasMore = this.MoveNext();\r\n\r\n                this.table._remove_entry(ref this.table.entries[p], p, nIndex, activeEnumerators);\r\n\r\n                return hasMore;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Insert new entry before current entry.\r\n            /// </summary>\r\n            /// <param name=\"key\">New item key.</param>\r\n            /// <param name=\"value\">New item value.</param>\r\n            internal void InsertBeforeCurrentEntry(IntStringKey key, object value)\r\n            {\r\n                this.table._add_before(ref key, value, this.currentEntry);  // is not this.IsValid, new entry is added at the end.\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets current entry index within the <see cref=\"OrderedDictionary.entries\"/> array.\r\n            /// </summary>\r\n            internal int CurrentEntryIndex\r\n            {\r\n                get { return this.currentEntry; }\r\n                set\r\n                {\r\n                    this.currentEntry = value;\r\n\r\n                    // fetch current entry:\r\n                    if (value >= 0)\r\n                        this.current = table.entries[value].KeyValuePair;\r\n                    else\r\n                        this.current = new KeyValuePair<IntStringKey, object>();\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n        \r\n        #region table operations\r\n\r\n        #region _enlist_*, _debug_check_consistency\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _enlist_to_bucket(ref Entry entry, int entry_index, int list_head)\r\n        {\r\n            entry.last = -1;\r\n            entry.next = list_head;\r\n            if (list_head >= 0)\r\n                this.entries[list_head].last = entry_index;\r\n        }\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _enlist_to_global(ref Entry entry, int entry_index)\r\n        {\r\n            entry.listNext = -1;\r\n            entry.listLast = this.listTail;\r\n\r\n            if (this.listTail >= 0)\r\n                this.entries[this.listTail].listNext = entry_index;\r\n\r\n            this.listTail = entry_index; \r\n            if (this.listHead < 0)\r\n                this.listHead = entry_index;\r\n        }\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _enlist(ref Entry entry, int entry_index, int list_head)\r\n        {\r\n            //this._enlist_to_bucket(ref entry, entry_index, list_head);\r\n            //this._enlist_to_global(ref entry, entry_index);\r\n\r\n            entry.next = list_head;\r\n            entry.last = -1;\r\n            entry.listNext = -1;\r\n            entry.listLast = this.listTail;\r\n            \r\n            if (list_head >= 0)\r\n                this.entries[list_head].last = entry_index;\r\n            \r\n            if (this.listTail >= 0)\r\n                this.entries[this.listTail].listNext = entry_index;\r\n\r\n            this.listTail = entry_index;\r\n            if (this.listHead < 0)\r\n                this.listHead = entry_index;                        \r\n        }\r\n\r\n        /// <summary>\r\n        /// Enlists <paramref name=\"element\"/> before given <paramref name=\"p\"/>.\r\n        /// </summary>\r\n        /// <param name=\"element\"></param>\r\n        /// <param name=\"elementIndex\"></param>\r\n        /// <param name=\"p\"></param>\r\n        /// <param name=\"pIndex\"></param>\r\n        private void _enlist_to_global_before(ref Entry element, int elementIndex, ref Entry p, int pIndex)\r\n        {\r\n            element.listLast = p.listLast;\r\n            element.listNext = pIndex;\r\n\r\n            if (p.listLast >= 0)\r\n                this.entries[p.listLast].listNext = elementIndex;\r\n            else\r\n                this.listHead = elementIndex;\r\n            p.listLast = elementIndex;\r\n        }\r\n\r\n        [Conditional(\"DEBUG\")]\r\n        internal void _debug_check_consistency()\r\n        {\r\n            Debug.Assert((this.listHead >= 0 && this.listTail >= 0) || (this.listHead < 0 && this.listTail < 0), \"listHead, listTail\");\r\n            Debug.Assert(this.entries == null || this.entries.Length == this.tableSize, \"this.entries.Length != this.tableSize\");\r\n\r\n            var _entries = this.entries;\r\n            var _buckets = this.buckets;\r\n\r\n            // check global list\r\n            int count = 0;\r\n            int last = -1;\r\n            for (int p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n            {\r\n                Debug.Assert(last != p, \"global list cycled!\");\r\n                Debug.Assert(_entries[p].listLast == last, \"_entries[p].listLast != last\");\r\n                last = p;\r\n                ++count;\r\n            }\r\n            Debug.Assert(last == this.listTail, \"last == this.listTail\");\r\n            Debug.Assert(count == this.Count, \"count != this.Count\");\r\n\r\n            // check bucket lists\r\n            count = 0;\r\n            for (int i = 0; i < _buckets.Length; i++)\r\n            {\r\n                last = -1;\r\n                for (int p = _buckets[i]; p >= 0; p = _entries[p].next)\r\n                {\r\n                    Debug.Assert(last != p, \"bucket list cycled!\");\r\n                    Debug.Assert(_entries[p].last == last, \"_entries[p].last != last\");\r\n                    last = p;\r\n                    ++count;\r\n                }\r\n            }\r\n            Debug.Assert(count == this.Count, \"count != this.Count (sum of bucket lists)\");\r\n\r\n            // check free list\r\n            if (this.freeCount > 0)\r\n            {\r\n                last = -1;\r\n                Debug.Assert(this.freeList >= 0, \"this.freeCount > 0 && this.freeList < 0\");\r\n                for (int p = this.freeList; p >= 0; p = _entries[p].next)\r\n                {\r\n                    Debug.Assert(last != p, \"freeList cycled!\");\r\n                    Debug.Assert(_entries[p].Value == null, \"free entry has not disposed value\");\r\n                    last = p;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Debug.Assert(this.freeList < 0, \"this.freeCount == 0 && this.freeList >= 0\");\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _do_resize, _rehash\r\n\r\n        /// <summary>\r\n        /// Double the size of internal structures. Rehash entries.\r\n        /// </summary>\r\n        /// <remarks><see cref=\"entries\"/> has to be initialized already.</remarks>\r\n        /// <exception cref=\"OverflowException\">Table size cannot be doubled more.</exception>\r\n        private void _do_resize()\r\n        {\r\n            Debug.Assert(this.entries != null);\r\n\r\n            // double the table size:\r\n            int new_size = checked(this.tableSize << 1);\r\n            int new_mask = new_size - 1;\r\n            \r\n            var new_buckets = new int[new_size];\r\n            for (int i = 0; i < new_buckets.Length; i++)    // JIT optimization\r\n                new_buckets[i] = -1;\r\n\r\n            var new_entries = new Entry[new_size];\r\n            Array.Copy(this.entries, 0, new_entries, 0, this.count);\r\n\r\n            // \r\n            this.tableSize = new_size;\r\n            this.tableMask = new_mask;\r\n            this.buckets = new_buckets;\r\n            this.entries = new_entries;\r\n\r\n            // _rehash():\r\n            int nIndex;\r\n            for (var p = this.listHead; p >= 0; p = new_entries[p].listNext)\r\n            {\r\n                nIndex = new_entries[p]._key.Integer & new_mask;\r\n                this._enlist_to_bucket(ref new_entries[p], p, new_buckets[nIndex]);\r\n                new_buckets[nIndex] = p;\r\n            }\r\n\r\n            // check\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Rehashes all the entries according to their current key. Preserves the order.\r\n        /// </summary>\r\n        internal void _rehash()\r\n        {\r\n            // use locals instead of fields:\r\n            var _buckets = this.buckets;\r\n            var _mask = this.tableMask;\r\n            var _entries = this.entries;\r\n\r\n            // empty buckets\r\n            for (int i = 0; i < _buckets.Length; i++)\r\n                _buckets[i] = -1;\r\n\r\n            // rehash all the entries:\r\n            int nIndex;\r\n            for (var p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n            {\r\n                nIndex = _entries[p]._key.Integer & _mask;\r\n                this._enlist_to_bucket(ref _entries[p], p, _buckets[nIndex]);\r\n                _buckets[nIndex] = p;\r\n            }\r\n\r\n            // check\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _add_or_update, _add_first, _add_last\r\n\r\n        /// <summary>\r\n        /// Set <paramref name=\"value\"/> onto given <paramref name=\"key\"/> position.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the item to be added or upudated.</param>\r\n        /// <param name=\"value\">Value of the item.</param>\r\n        /// <remarks>If <paramref name=\"key\"/> is not contained in the table yet, newly added entry is added at the end.</remarks>\r\n        public void _add_or_update(IntStringKey key, object value/*, bool add*/)\r\n        {\r\n            //ulong h;// = key.Integer\r\n            \r\n            EnsureInitialized();\r\n\r\n            int nIndex = key.Integer & this.tableMask;// index(ref key);\r\n            var _entries = this.entries;\r\n\r\n            // find\r\n            int p;\r\n            for (p = this.buckets[nIndex]; p >= 0; p = _entries[p].next) // TODO: unsafe\r\n            {\r\n                if (_entries[p].KeyEquals(ref key))\r\n                {\r\n                    //if (add)\r\n                    //    return;// false;\r\n\r\n                    _entries[p].Value = value;\r\n                    return;// true;\r\n                }\r\n            }\r\n\r\n            // not found, _add_last:\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n                    \r\n                    // update locals affected by resize:\r\n                    nIndex = key.Integer & this.tableMask;// index(ref key);    // new index\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            _entries[p]._key = key;\r\n            this._enlist(ref _entries[p], p, this.buckets[nIndex]);\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n            \r\n            //// update nextNewIndex: // moved to PhpArray\r\n            //if (key.IsInteger && key.Integer >= this.nextNewIndex)\r\n            //    this.nextNewIndex = key.Integer + 1;\r\n\r\n            return;// true;\r\n        }\r\n\r\n        //private void _add_no_check(int intKey, object value)\r\n        //{\r\n        //    \r\n        //}\r\n\r\n        /// <summary>\r\n        /// Add new entry at the begining of the array.\r\n        /// </summary>\r\n        /// <param name=\"key\">Entry key.</param>\r\n        /// <param name=\"value\">Entry value.</param>\r\n        /// <exception cref=\"ArgumentException\">An element with the same key already exists.</exception>\r\n        internal void _add_first(IntStringKey key, object value)\r\n        {\r\n            if (_findEntry(ref key) >= 0)\r\n                throw new ArgumentException();\r\n\r\n            EnsureInitialized();\r\n\r\n            int nIndex = key.Integer & this.tableMask;// index(ref key);\r\n            var _entries = this.entries;\r\n\r\n            // add:\r\n            int p; // index of entry to be used for new item\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    nIndex = key.Integer & this.tableMask;// index(ref key);    // new index\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            _entries[p]._key = key;\r\n\r\n            // enlist into bucket\r\n            this._enlist_to_bucket(ref _entries[p], p, this.buckets[nIndex]);\r\n            \r\n            // enlist into global\r\n            _entries[p].listLast = -1;\r\n            _entries[p].listNext = this.listHead;\r\n            if (this.listHead >= 0)\r\n                _entries[this.listHead].listLast = p;\r\n            if (this.listTail < 0)\r\n                this.listTail = p;\r\n            this.listHead = p;\r\n\r\n            this.buckets[nIndex] = p;\r\n            _entries[p].Value = value;\r\n            \r\n            //// update nextNewIndex: // moved to PhpArray\r\n            //if (key.IsInteger && key.Integer >= this.nextNewIndex)\r\n            //    this.nextNewIndex = key.Integer + 1;\r\n\r\n            return;// true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add specified item at the end of the array.\r\n        /// </summary>\r\n        /// <param name=\"key\">New item key.</param>\r\n        /// <param name=\"value\">New item value.</param>\r\n        /// <remarks>The function does not check if the item already exists.</remarks>\r\n        private void _add_last(ref IntStringKey key, object value)\r\n        {\r\n            Debug.Assert(!this._contains(ref key), \"Item with given key already exists!\");\r\n\r\n            var _entries = this.entries;\r\n            int p;\r\n            \r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);\r\n\r\n            _entries[p]._key = key;\r\n            this._enlist(ref _entries[p], p, this.buckets[nIndex]);\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n\r\n            //// update nextNewIndex: // moved to PhpArray\r\n            //if (key.IsInteger && key.Integer >= this.nextNewIndex)\r\n            //    this.nextNewIndex = key.Integer + 1;\r\n\r\n            return;// true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add specified item at the end of the array.\r\n        /// </summary>\r\n        /// <param name=\"ikey\">New item key.</param>\r\n        /// <param name=\"value\">New item value.</param>\r\n        /// <remarks>The function does not check if the item already exists.</remarks>\r\n        internal void _add_last(int ikey, object value)\r\n        {\r\n            Debug.Assert(!this.ContainsKey(new IntStringKey(ikey)), \"Item with given key already exists!\");\r\n\r\n            this.EnsureInitialized();\r\n\r\n            var _entries = this.entries;\r\n            int p;\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            var nIndex = ikey & this.tableMask;// index(ref key);\r\n\r\n            _entries[p]._key = new IntStringKey(ikey);\r\n            this._enlist(ref _entries[p], p, this.buckets[nIndex]);\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n\r\n            //// update nextNewIndex: // moved to PhpArray\r\n            //if (key.IsInteger && key.Integer >= this.nextNewIndex)\r\n            //    this.nextNewIndex = key.Integer + 1;\r\n\r\n            return;// true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add new entry before given <paramref name=\"entry_index\"/>. If <paramref name=\"entry_index\"/> is invalid, new item is added at the end of the table.\r\n        /// Note given <paramref name=\"key\"/> must not exist in the table yet.\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <param name=\"value\"></param>\r\n        /// <param name=\"entry_index\"></param>\r\n        private void _add_before(ref IntStringKey key, object value, int entry_index)\r\n        {\r\n            this.EnsureInitialized();\r\n\r\n            if (entry_index < 0)\r\n            {\r\n                _add_last(ref key, value);\r\n                return;\r\n            }\r\n\r\n            var _entries = this.entries;\r\n            int p;\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);\r\n\r\n            _entries[p]._key = key;\r\n            // enlist to bucket:\r\n            this._enlist_to_bucket(ref _entries[p], p, this.buckets[nIndex]);\r\n\r\n            // enlist to global\r\n            this._enlist_to_global_before(ref _entries[p], p, ref _entries[entry_index], entry_index);\r\n\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _del_key_or_index, _remove_first, _remove_last\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _remove_entry(ref Entry entry, int entry_index, int bucket_index, Enumerator active_enumerators)\r\n        {\r\n#if DEBUG\r\n            Debug.Assert(entry._key.Equals(ref this.entries[entry_index]._key), \"entry != entries[entry_index\");\r\n            int p;\r\n            for (p = this.buckets[bucket_index]; p >= 0; p = this.entries[p].next)\r\n                if (p == entry_index)\r\n                    break;\r\n            Debug.Assert(p >= 0, \"entry_index not found\");\r\n            Debug.Assert(freeCount > 0 || freeList < 0, \"freeCount == 0 && freeList >= 0,\");\r\n#endif\r\n\r\n            // update active enumerators, so they won't point to the item being deleted:\r\n            for (; active_enumerators != null; active_enumerators = active_enumerators.next)\r\n                active_enumerators.EntryDeleted(entry_index, entry.listNext);\r\n\r\n            // unlink entry from the bucket list:\r\n            if (entry.last >= 0)\r\n                this.entries[entry.last].next = entry.next;\r\n            else\r\n                this.buckets[bucket_index] = entry.next;                \r\n\r\n            if (entry.next >= 0)\r\n                this.entries[entry.next].last = entry.last;\r\n\r\n            // unlink entry from global list:\r\n            if (entry.listLast >= 0)\r\n                this.entries[entry.listLast].listNext = entry.listNext;\r\n            else // Deleting the head of the list\r\n                this.listHead = entry.listNext;\r\n\r\n            if (entry.listNext >= 0)\r\n                this.entries[entry.listNext].listLast = entry.listLast;\r\n            else\r\n                this.listTail = entry.listLast;\r\n\r\n            // link entry to freeList:\r\n            entry.next = this.freeList;\r\n            //ignoring: entry.last, entry.listNext, entry.listLast\r\n            entry.Value = null;\r\n            this.freeList = entry_index;\r\n            ++this.freeCount;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes given <paramref name=\"key\"/> from the collection.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key to be removed from the collection.</param>\r\n        /// <param name=\"active_enumerators\">List of active enumerators so they can be updated if they point to the item being deleted.</param>\r\n        /// <returns><c>True</c> if specified key was found and the item removed.</returns>\r\n        /// <remarks>This operation can invalidate an existing enumerator. You can prevent this\r\n        /// by passing <paramref name=\"active_enumerators\"/>List of active enumerators do they can be updated.</remarks>\r\n        public bool _del_key_or_index(ref IntStringKey key, Enumerator active_enumerators)\r\n        {\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = this.entries[p].next)\r\n                if (this.entries[p].KeyEquals(ref key))\r\n                {\r\n                    this._remove_entry(ref this.entries[p], p, nIndex, active_enumerators);\r\n                    return true;\r\n                }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes specified entry from the array.\r\n        /// </summary>\r\n        /// <param name=\"p\">Index of the entry within the <see cref=\"entries\"/> array.</param>\r\n        /// <param name=\"active_enumerators\">List of active enumerators so they can be updated if they point to the item being deleted.</param>\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _remove_entry(int p, Enumerator active_enumerators)\r\n        {\r\n            _remove_entry(ref this.entries[p], p, this.entries[p].Key.Integer & this.tableMask, active_enumerators);   // remove the entry\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes the last entry of the array and returns it.\r\n\t\t/// </summary>\r\n        /// <param name=\"active_enumerators\">List of active enumerators so they can be updated if they point to deleted item.</param>\r\n\t\t/// <returns>The last entry of the array.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n        public KeyValuePair<IntStringKey, object> _remove_last(Enumerator active_enumerators)\r\n        {\r\n            var p = this.listTail;  // entry to be removed from the collection\r\n            if (p < 0)\r\n                throw new InvalidOperationException();\r\n\r\n            var result = this.entries[p].KeyValuePair;\r\n            _remove_entry(p, active_enumerators);\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes the first entry of the array and returns it.\r\n        /// </summary>\r\n        /// <param name=\"active_enumerators\">List of active enumerators so they can be updated if they point to deleted item.</param>\r\n        /// <returns>The first entry of the array.</returns>\r\n        /// <exception cref=\"InvalidOperationException\">The table is empty.</exception>\r\n        public KeyValuePair<IntStringKey, object> _remove_first(Enumerator active_enumerators)\r\n        {\r\n            var p = this.listHead;  // entry to be removed from the collection\r\n            if (p < 0)\r\n                throw new InvalidOperationException();\r\n\r\n            var result = this.entries[p].KeyValuePair;\r\n            _remove_entry(p, active_enumerators);\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _findEntry, _tryGetValue, _get, _contains\r\n\r\n        private int _findEntry(ref IntStringKey key)\r\n        {\r\n            var nIndex = key.Integer & this.tableMask;  // index(ref key);// h & ht->nTableMask;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = entries[p].next)\r\n                if (entries[p].KeyEquals(ref key))\r\n                    return p;\r\n\r\n            return -1;\r\n        }\r\n\r\n        private bool _tryGetValue(IntStringKey key, out object value)\r\n        {\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);// h & ht->nTableMask;\r\n            var/*!*/_entries = this.entries;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = _entries[p].next)\r\n                if (_entries[p].KeyEquals(ref key))\r\n                {\r\n                    value = _entries[p].Value;\r\n                    return true;\r\n                }\r\n\r\n            value = default(object);\r\n            return false;\r\n        }\r\n\r\n        private bool _tryGetValue(int ikey, out object value)\r\n        {\r\n            var nIndex = ikey & this.tableMask;// index(ref key);// h & ht->nTableMask;\r\n            var/*!*/_entries = this.entries;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = _entries[p].next)\r\n                if (_entries[p].KeyEquals(ikey))\r\n                {\r\n                    value = _entries[p].Value;\r\n                    return true;\r\n                }\r\n\r\n            value = default(object);\r\n            return false;\r\n        }\r\n\r\n        private object _get(ref IntStringKey key)\r\n        {\r\n            var _entries = this.entries;\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);// h & ht->nTableMask;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = _entries[p].next)\r\n                if (_entries[p].KeyEquals(ref key))\r\n                    return _entries[p].Value;\r\n\r\n            // not found:\r\n            return null;// throw new KeyNotFoundException();\r\n        }\r\n        private bool _contains(ref IntStringKey key)\r\n        {\r\n            return _findEntry(ref key) >= 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _clear, _shuffle_data, _merge_sort, _sort, _reverse, _find_max_int_key, _merge_sort\r\n\r\n        /// <summary>\r\n        /// Reset internal data structure (fast).\r\n        /// </summary>\r\n        private void _clear()\r\n        {\r\n            // nullify entries, so their values can be disposed:\r\n            if (this.count > 0)\r\n                Array.Clear(this.entries, 0, this.count);\r\n\r\n            // destroy lists, reset counts:\r\n            this.listHead = -1;\r\n            this.listTail = -1;\r\n            this.count = this.freeCount = 0;\r\n            //this.nextNewIndex = 0;\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Shuffles entries order, while keys and data are preserved.\r\n        /// </summary>\r\n        /// <param name=\"generator\">Random number generator used to randomize the order.</param>\r\n        public void _shuffle_data(Random/*!*/generator)\r\n        {\r\n            if (generator == null)\r\n                throw new ArgumentNullException(\"generator\");\r\n\r\n            var n_elems = this.Count;\r\n            if (n_elems <= 1)\r\n                return;\r\n\r\n            var elems = new int[n_elems];\r\n            var n_left = n_elems;\r\n            int j, p;\r\n            var _entries = this.entries;\r\n\r\n            // store indices of active entries\r\n            for (j = 0, p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n                elems[j++] = p;\r\n\r\n            // shuffle indices randomly\r\n            while ((--n_left) > 0)\r\n            {\r\n                // swap elems[n_left] randomly with another entry:\r\n                int rnd = generator.Next(0, n_left + 1);\r\n                if (rnd < n_left)\r\n                {\r\n                    p = elems[n_left];\r\n                    elems[n_left] = elems[rnd];\r\n                    elems[rnd] = p;\r\n                }\r\n            }\r\n\r\n            // reconnect the global list\r\n            this.listHead = elems[0];\r\n            this.listTail = -1;\r\n            // TODO: reset instrict enumerators within the shuffle() operation\r\n\r\n            for (j = 0; j < elems.Length; j++)  // JIT optimization\r\n            {\r\n                var elems_j = elems[j];\r\n                this._enlist_to_global(ref _entries[elems_j], elems_j);\r\n\r\n                //if (this.listTail >= 0)\r\n                //    _entries[this.listTail].listNext = elems_j;\r\n\r\n                //entries[elems_j].listLast = this.listTail;\r\n                //entries[elems_j].listNext = -1;\r\n                //this.listTail = elems_j;\r\n            }\r\n\r\n            // check\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reverses entries order.\r\n        /// </summary>\r\n        public void _reverse()\r\n        {\r\n            var _entries = this.entries;\r\n\r\n            int tmp;\r\n            \r\n            for (var p = this.listHead; p >= 0; p = _entries[p].listLast)\r\n            {\r\n                // swap prev/next\r\n                tmp = _entries[p].listNext;\r\n                _entries[p].listNext = _entries[p].listLast;\r\n                _entries[p].listLast = tmp;\r\n            }\r\n\r\n            // swap head/tail\r\n            tmp = this.listHead;\r\n            this.listHead = this.listTail;\r\n            this.listTail = tmp;\r\n\r\n            //\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Iterate through the array and find the max integer key.\r\n        /// </summary>\r\n        /// <returns>Max integer key or <c>-1</c> if no positive integer key is found.</returns>\r\n        public int _find_max_int_key()\r\n        {\r\n            var _entries = this.entries;\r\n\r\n            // TODO: check flags, whether it is a simple sorted array (0..N)\r\n\r\n            int max_key = -1;\r\n            // iterate backwards, find the max faster\r\n            for (int p = this.listTail; p >= 0; p = _entries[p].listLast)\r\n            {\r\n                if (_entries[p]._key.Integer > max_key && _entries[p]._key.IsInteger)\r\n                    max_key = _entries[p]._key.Integer;\r\n            }\r\n\r\n            //\r\n            return max_key;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sort sequence of entries using merge sort. Only changes <see cref=\"Entry.listNext\"/> fields, <see cref=\"Entry.listLast\"/> are not modified at all.\r\n        /// </summary>\r\n        /// <param name=\"comparer\">Comparer.</param>\r\n        /// <param name=\"entries\"><see cref=\"OrderedDictionary.entries\"/> of table being sorted.</param>\r\n        /// <param name=\"first\">Index of an entry to start sorting from.</param>\r\n        /// <param name=\"count\">Amount if entries to sort.</param>\r\n        /// <param name=\"after\">Index of the entry after the sorted sequence.</param>\r\n        /// <returns>New first entry index.</returns>\r\n        private static int _merge_sort(IComparer<KeyValuePair<IntStringKey, object>>/*!*/ comparer, Entry[] entries, int first, int count, out int after)\r\n        {\r\n            Debug.Assert(first >= 0 && count > 0);\r\n\r\n            // recursion end:\r\n            if (count == 1)\r\n            {\r\n                after = entries[first].listNext;\r\n                entries[first].listNext = -1;\r\n                return first;\r\n            }\r\n\r\n            // sort recursively:\r\n            int alen = count >> 1;\r\n            int blen = count - alen;\r\n            Debug.Assert(alen <= blen && alen > 0);\r\n\r\n            // divides the portion into two lists (a and b) and sorts them:\r\n            int result;\r\n            var a = _merge_sort(comparer, entries, first, alen, out result);\r\n            var b = _merge_sort(comparer, entries, result, blen, out after);\r\n\r\n            // initializes merging - sets the first element of the result list:\r\n            if (comparer.Compare(entries[a].KeyValuePair, entries[b].KeyValuePair) <= 0)\r\n            {\r\n                // if there is exactly one element in the \"a\" list returns (a,b) list:\r\n                if (--alen == 0) { entries[a].listNext = b; return a; }\r\n                result = a;\r\n                a = entries[a].listNext;\r\n            }\r\n            else\r\n            {\r\n                // if there is exactly one element in the \"b\" list returns (b,a) list:\r\n                if (--blen == 0) { entries[b].listNext = a; return b; }\r\n                result = b;\r\n                b = entries[b].listNext;\r\n            }\r\n\r\n            // merges \"a\" and \"b\" lists into the \"result\";\r\n            // \"iterator\" points to the last element added to the \"result\", \r\n            // \"a\" and \"b\" references moves along the respective lists:\r\n            var iterator = result;\r\n            Debug.Assert(alen > 0 && blen > 0);\r\n            for (; ; )\r\n            {\r\n                if (comparer.Compare(entries[a].KeyValuePair, entries[b].KeyValuePair) <= 0)\r\n                {\r\n                    // adds element from list \"a\" to the \"result\":\r\n                    iterator = entries[iterator].listNext = a;\r\n\r\n                    if (--alen == 0)\r\n                    {\r\n                        // adds remaining elements to the result: \r\n                        if (blen > 0) entries[iterator].listNext = b;\r\n                        break;\r\n                    }\r\n\r\n                    // advances \"a\" pointer:\r\n                    a = entries[a].listNext;\r\n                }\r\n                else\r\n                {\r\n                    // adds element from list \"b\" to the \"result\":\r\n                    iterator = entries[iterator].listNext = b;\r\n\r\n                    if (--blen == 0)\r\n                    {\r\n                        // adds remaining elements to the result: \r\n                        if (alen > 0) entries[iterator].listNext = a;\r\n                        break;\r\n                    }\r\n\r\n                    // advances \"a\" pointer:\r\n                    b = entries[b].listNext;\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n        \r\n        #endregion\r\n\r\n        #region sortops: _sort, _multisort\r\n\r\n        internal struct sortops\r\n        {\r\n            /// <summary>\r\n            /// Sorts items according to given <paramref name=\"comparer\"/>. This changes only the order of items.\r\n            /// </summary>\r\n            /// <param name=\"table\"><see cref=\"OrderedDictionary\"/> instance to be sorted.</param>\r\n            /// <param name=\"comparer\">Comparer used to sort items.</param>\r\n            internal static void _sort(OrderedDictionary/*!*/table, IComparer<KeyValuePair<IntStringKey, object>>/*!*/ comparer)\r\n            {\r\n                Debug.Assert(table != null);\r\n                Debug.Assert(comparer != null);\r\n\r\n                var count = table.Count;\r\n                if (count <= 1) return;\r\n\r\n                int after;\r\n                table.listHead = _merge_sort(comparer, table.entries, table.listHead, count, out after);\r\n                Debug.Assert(after < 0);\r\n\r\n                // update double-linked list (prev):\r\n                table._link_prevs_by_nexts();\r\n\r\n                // check\r\n                table._debug_check_consistency();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Sorts multiple lists given comparer for each hashtable.\r\n            /// </summary>\r\n            /// <param name=\"count\">The number of items in each and every list.</param>\r\n            /// <param name=\"hashtables\">The lists.</param>\r\n            /// <param name=\"comparers\">Comparers to be used for lexicographical comparison.</param>\r\n            internal static void _multisort(int count, PhpHashtable[]/*!!*/ hashtables, IComparer<KeyValuePair<IntStringKey, object>>[]/*!!*/ comparers)\r\n            {\r\n                int next;\r\n                int length = hashtables.Length;\r\n                int last = length - 1;\r\n\r\n                OrderedDictionary table;\r\n\r\n                // nothing to do:\r\n                if (count == 0 || hashtables.Length <= 1) return;\r\n\r\n                // interconnects all lists into a grid, heads are unchanged:\r\n                InterconnectGrid(count, hashtables);\r\n\r\n                // lists are only single-linked cyclic and \"heads\" are unchanged from here on:\r\n                for (int i = last; i > 0; i--)\r\n                {\r\n                    table = hashtables[i].table;\r\n                    // sorts i-th list (doesn't modify Prev and keeps the list cyclic):\r\n                    table.listHead = _merge_sort(comparers[i], table.entries, table.listHead, count, out next);\r\n                    Debug.Assert(next < 0);\r\n\r\n                    // reorders the (i-1)-the list according to the the i-th one:\r\n                    ReorderList(count, hashtables[i - 1].table, hashtables[i].table);\r\n                }\r\n\r\n                // sorts the 0-th list (its order will determine the order of whole grid rows):\r\n                table = hashtables[0].table;\r\n                table.listHead = _merge_sort(comparers[0], table.entries, table.listHead, count, out next);\r\n                Debug.Assert(next < 0);\r\n\r\n                // reorders the last list according to the 0-th one:\r\n                ReorderList(count, hashtables[last].table, hashtables[0].table);\r\n\r\n                // reorders remaining lists (if any):\r\n                for (int i = last; i >= 2; i--)\r\n                    ReorderList(count, hashtables[i - 1].table, hashtables[i].table);\r\n\r\n                // disconnects lists from each other and reconstructs their double-linked structure:\r\n                DisconnectGrid(count, hashtables);\r\n\r\n                //\r\n#if DEBUG\r\n                for (int i = 0; i < hashtables.Length; i++)\r\n                    hashtables[i].table._debug_check_consistency();\r\n#endif\r\n            }\r\n\r\n            /// <summary>\r\n            /// Interconnects elements of given lists into a grid using their <see cref=\"Entry.listLast\"/> fields. <see cref=\"OrderedDictionary.listHead\"/> is preserved.\r\n            /// </summary>\r\n            /// <param name=\"count\">The number of elements in each and every list.</param>\r\n            /// <param name=\"hashtables\">Lists to be interconnected.</param>\r\n            /// <remarks>\r\n            /// The grid: <BR/>\r\n            /// <PRE>\r\n            ///  H H H\r\n            ///  | | |\r\n            /// ~o~o~o~\r\n            ///  | | |   ~ = Prev (right to left), cyclic without a head (necessary)\r\n            /// ~o~o~o~  - = Next (top to bottom), cyclic with a head (not necessary)\r\n            ///  | | |\r\n            /// </PRE>\r\n            /// </remarks>\r\n            private static void InterconnectGrid(int count, PhpHashtable[]/*!!*/ hashtables)\r\n            {\r\n                int last = hashtables.Length - 1;\r\n\r\n                var enumerators = new FastEnumerator[hashtables.Length];\r\n\r\n                // initialize enumerators and moves them to the respective first elements:\r\n                for (int i = 0; i < enumerators.Length; i++)\r\n                {\r\n                    enumerators[i] = hashtables[i].GetFastEnumerator();\r\n                    enumerators[i].MoveNext();  // advance enumerator to first entry\r\n                }\r\n\r\n                while (count-- > 0)\r\n                {\r\n                    // sets Prev field of the first iterator:\r\n                    enumerators[0].CurrentEntryListLast = enumerators[last].CurrentEntryIndex;\r\n\r\n                    // all iterators except for the last one:\r\n                    for (int i = 0; i < last; i++)\r\n                    {\r\n                        enumerators[i + 1].CurrentEntryListLast = enumerators[i].CurrentEntryIndex;\r\n                        enumerators[i].MoveNext();\r\n                    }\r\n\r\n                    // advances the last iterator:\r\n                    enumerators[last].MoveNext();\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Disconnects elements of lists each from other.\r\n            /// </summary>\r\n            /// <param name=\"count\">The number of elements in each and every list.</param>\r\n            /// <param name=\"hashtables\">The lists.</param>\r\n            private static void DisconnectGrid(int count, PhpHashtable[]/*!!*/hashtables)\r\n            {\r\n                for (int i = 0; i < hashtables.Length; i++)\r\n                {\r\n                    // restores Prev references in all elements of the i-th list except for the head:\r\n                    hashtables[i].table._link_prevs_by_nexts();\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Reorders a minor list according to the major one. \"Straightens\" horizontal interconnection.\r\n            /// </summary>\r\n            /// <param name=\"count\">The number of elements in each and every list.</param>\r\n            /// <param name=\"minorHead\">The head of a minor list (i).</param>\r\n            /// <param name=\"majorHead\">The head of a major list (i + 1).</param>\r\n            /// <remarks><paramref name=\"minorHead\"/> is the array before <paramref name=\"majorHead\"/>.</remarks>\r\n            private static void ReorderList(int count, OrderedDictionary minorHead, OrderedDictionary majorHead)\r\n            {\r\n                var major = majorHead.GetFastEnumerator(); major.MoveNext();\r\n                var minor = minorHead.GetFastEnumerator();\r\n\r\n                while (count-- > 0)\r\n                {\r\n                    minor.CurrentEntryListNext = major.CurrentEntryListLast;    // major.listLast points to minor, so we can set these links\r\n                    minor.MoveNext();\r\n                    major.MoveNext();\r\n                }\r\n\r\n                minor.CurrentEntryListNext = -1;\r\n            }\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region private: _link_prevs_by_nexts, _link_nexts_by_prevs, _reverse_prev_links\r\n\r\n        /// <summary>\r\n        /// Update <see cref=\"Entry.listLast\"/> and <see cref=\"listTail\"/> according to <see cref=\"Entry.listNext\"/>s.\r\n        /// </summary>\r\n        /// <remarks>Makes global list valid.</remarks>\r\n        private void _link_prevs_by_nexts()\r\n        {\r\n            var _entries = this.entries;\r\n            int last = -1;\r\n            for (int p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n            {\r\n                _entries[p].listLast = last;\r\n                last = p;\r\n            }\r\n            this.listTail = last;\r\n\r\n            // global list is valid now\r\n        }\r\n\r\n        /// <summary>\r\n        /// Update <see cref=\"Entry.listNext\"/> and <see cref=\"listHead\"/> according to <see cref=\"Entry.listLast\"/>s.\r\n        /// </summary>\r\n        /// <remarks>Makes global list valid.</remarks>\r\n        private void _link_nexts_by_prevs()\r\n        {\r\n            var _entries = this.entries;\r\n            int next = -1;\r\n            for (int p = this.listTail; p >= 0; p = _entries[p].listLast)\r\n            {\r\n                _entries[p].listNext = next;\r\n                next = p;\r\n            }\r\n            this.listHead = next;\r\n\r\n            // global list is valid now\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reverses <see cref=\"Entry.listLast\"/> links.\r\n        /// </summary>\r\n        /// <remarks>Global list won't be valid after this operation. However this operation reverts itself when called twice.</remarks>\r\n        private void _reverse_prev_links()\r\n        {\r\n            var _entries = this.entries;\r\n            int p, next = -1, prev;\r\n\r\n            // reverse the listLast links\r\n            for (p = this.listTail; p >= 0; p = prev)\r\n            {\r\n                prev = _entries[p].listLast;\r\n                _entries[p].listLast = next;\r\n                next = p;\r\n            }\r\n\r\n            // listTail now points to previously first entry\r\n            this.listTail = next;            \r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _deep_copy_*\r\n\r\n        /// <summary>\r\n        /// Perform inplace deep copy of all values.\r\n        /// </summary>\r\n        public void _deep_copy_inplace()\r\n        {\r\n            var _entries = this.entries;\r\n            for (var p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n                _deep_copy_entry_value(ref _entries[p]);\r\n        }\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _deep_copy_entry_value(ref Entry entry)\r\n        {\r\n            entry.Value = PhpVariable.DeepCopy(entry.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Perform inplace deep copy of all values.\r\n        /// This overload replaces <paramref name=\"oldref\"/> with <paramref name=\"newref\"/>\r\n        /// within <see cref=\"PhpReference\"/> values; only of <paramref name=\"oldref\"/> os not <c>null</c>.\r\n        /// </summary>\r\n        public void _deep_copy_inplace(object oldref, object newref)\r\n        {\r\n            if (oldref == null)\r\n            {\r\n                _deep_copy_inplace();\r\n            }\r\n            else\r\n            {\r\n                var _entries = this.entries;\r\n                for (var p = this.listHead; p >= 0; p = _entries[p].listNext)\r\n                    _deep_copy_entry_value(oldref, newref, ref _entries[p]);\r\n            }\r\n        }\r\n\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        private void _deep_copy_entry_value(object oldref, object newref, ref Entry entry)\r\n        {\r\n            if (entry.Value is PhpReference && ((PhpReference)entry.Value).Value == oldref)\r\n                entry.Value = new PhpReference(newref);\r\n            else\r\n                entry.Value = PhpVariable.DeepCopy(entry.Value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _ensure_item_ref, _add_or_update_preserve_ref, _ensure_item_array\r\n\r\n        /// <summary>\r\n        /// Checks if the updated entry contains <see cref=\"PhpReference\"/>\r\n        /// and if so, it updates its value instead of entry's value.\r\n        /// \r\n        /// Otherwise new item is added at the end of the array.\r\n        /// </summary>\r\n        /// <param name=\"array\">Caller array.</param>\r\n        /// <param name=\"key\"></param>\r\n        /// <param name=\"value\"></param>\r\n        public void _add_or_update_preserve_ref(PhpArray/*!*/array, ref IntStringKey key, object value)\r\n        {\r\n            Debug.Assert(!(value is PhpReference));\r\n\r\n            this.ThrowIfShared();\r\n            EnsureInitialized();\r\n\r\n            int nIndex = key.Integer & this.tableMask;// index(ref key);\r\n            var _entries = this.entries;\r\n\r\n            // find\r\n            int p;\r\n            for (p = this.buckets[nIndex]; p >= 0; p = _entries[p].next) // TODO: unsafe\r\n            {\r\n                if (_entries[p].KeyEquals(ref key))\r\n                {\r\n                    PhpReference valueref;\r\n                    if ((valueref = _entries[p].Value as PhpReference) != null) // TODO: x != null && x.GetType() == typeof(PhpReference)\r\n                        valueref.Value = value;\r\n                    else\r\n                        _entries[p].Value = value;\r\n\r\n                    return;// true;\r\n                }\r\n            }\r\n\r\n            // not found, _add_last:\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    nIndex = key.Integer & this.tableMask;// index(ref key);    // new index\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            _entries[p]._key = key;\r\n            this._enlist(ref _entries[p], p, this.buckets[nIndex]);\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n\r\n            array.KeyAdded(ref key);\r\n\r\n            return;// true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if the updated entry contains <see cref=\"PhpReference\"/>\r\n        /// and if so, it updates its value instead of entry's value.\r\n        /// \r\n        /// Otherwise new item is added at the end of the array.\r\n        /// </summary>\r\n        /// <param name=\"array\">Caller array.</param>\r\n        /// <param name=\"ikey\"></param>\r\n        /// <param name=\"value\"></param>\r\n        public void _add_or_update_preserve_ref(PhpArray/*!*/array, int ikey, object value)\r\n        {\r\n            Debug.Assert(!(value is PhpReference));\r\n\r\n            this.ThrowIfShared();\r\n            EnsureInitialized();\r\n\r\n            int nIndex = ikey & this.tableMask;// index(ref key);\r\n            var _entries = this.entries;\r\n\r\n            // find\r\n            int p;\r\n            for (p = this.buckets[nIndex]; p >= 0; p = _entries[p].next) // TODO: unsafe\r\n            {\r\n                if (_entries[p].KeyEquals(ikey))\r\n                {\r\n                    PhpReference valueref;\r\n                    if ((valueref = _entries[p].Value as PhpReference) != null) // TODO: x != null && x.GetType() == typeof(PhpReference)\r\n                        valueref.Value = value;\r\n                    else\r\n                        _entries[p].Value = value;\r\n\r\n                    return;// true;\r\n                }\r\n            }\r\n\r\n            // not found, _add_last:\r\n\r\n            // find an empty Entry to be used\r\n            if (this.freeCount > 0)\r\n            {\r\n                p = this.freeList;\r\n                this.freeList = _entries[p].next;\r\n                --this.freeCount;\r\n            }\r\n            else\r\n            {\r\n                if (this.count == _entries.Length)\r\n                {\r\n                    this._do_resize();  // double the capacity\r\n\r\n                    // update locals affected by resize:\r\n                    nIndex = ikey & this.tableMask;// index(ref key);    // new index\r\n                    _entries = this.entries;\r\n                }\r\n                p = this.count++;\r\n            }\r\n\r\n            //\r\n            _entries[p]._key = new IntStringKey(ikey);\r\n            this._enlist(ref _entries[p], p, this.buckets[nIndex]);\r\n            _entries[p].Value = value;\r\n            this.buckets[nIndex] = p;\r\n\r\n            array.KeyAdded(ikey);\r\n\r\n            return;// true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wrap specified item into <see cref=\"PhpReference\"/> if not yet.\r\n        /// If there is no such item, new is created.\r\n        /// </summary>\r\n        /// <param name=\"key\">Index of item to be checked.</param>\r\n        /// <param name=\"array\">Caller. Used to lazy copy if necessary.</param>\r\n        /// <returns><see cref=\"PhpReference\"/> of specified item.</returns>\r\n        public PhpReference/*!*/_ensure_item_ref(ref IntStringKey key, PhpArray/*!*/array)\r\n        {\r\n            Debug.Assert(array != null, \"array == null\");\r\n            Debug.Assert(array.table == this, \"array.table != this\");\r\n\r\n            PhpReference valueref;\r\n            \r\n            var _entries = this.entries;\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);// h & ht->nTableMask;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = _entries[p].next)\r\n                if (_entries[p].KeyEquals(ref key))\r\n                {\r\n                    var value = _entries[p].Value;\r\n                    valueref = value as PhpReference;\r\n                    if (valueref != null)   // value != null && value.GetType() == typeof(PhpReference)) valueref = (PhpReference)value\r\n                    {\r\n                        // if valueref references the array itself, array must be lazily copied:\r\n                        if (this.IsShared && valueref.value == this.owner)\r\n                        {\r\n                            // shared table references itself, must be deepcopied:\r\n                            array.EnsureWritable();\r\n                            // \"this\" is not \"array.table\" anymore!\r\n                            Debug.Assert(!array.table.IsShared, \"array.table.IsShared\");\r\n                            Debug.Assert(array.table.entries[p].Value is PhpReference, \"array.table.entries[p].Value is not PhpReference\");\r\n                            Debug.Assert(array.table != this, \"array.table == this; but it shouldn't after deep copying!\");\r\n                            valueref = (PhpReference)array.table.entries[p].Value;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // value is not PhpReference,\r\n                        // make the value PhpReference:\r\n                        if (this.IsShared)\r\n                        {\r\n                            // we have to unshare this, so we can modify the content:\r\n                            array.EnsureWritable();\r\n                            // \"this\" is not \"array.table\" anymore!\r\n                            _entries = array.table.entries;                            \r\n                        }\r\n\r\n                        // wrap _entries[p].Value into PhpReference\r\n                        valueref = _entries[p].MakeValueReferenceNoCheck();\r\n                    }\r\n\r\n                    //\r\n                    return valueref;\r\n                }\r\n\r\n            // not found, create new item:\r\n            valueref = new PhpReference();\r\n            array.Add(key, valueref);    // we have to adjust maxIntKey and make the array writable; do not call _add_last directly\r\n            return valueref;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures specified item is <see cref=\"PhpArray\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <param name=\"array\">Caler.</param>\r\n        /// <returns></returns>\r\n        public PhpArray/*!*/_ensure_item_array(ref IntStringKey key, PhpArray/*!*/array)\r\n        {\r\n            Debug.Assert(array != null, \"array == null\");\r\n            Debug.Assert(array.table == this, \"array.table != this\");\r\n\r\n            PhpArray valuearray;\r\n\r\n            var _entries = this.entries;\r\n            var nIndex = key.Integer & this.tableMask;// index(ref key);// h & ht->nTableMask;\r\n            for (var p = this.buckets[nIndex]; p >= 0; p = _entries[p].next)\r\n                if (_entries[p].KeyEquals(ref key))\r\n                {\r\n                    var value = _entries[p].Value;\r\n                    valuearray = value as PhpArray;\r\n\r\n                    if (valuearray == null)\r\n                    {\r\n                        valuearray = new PhpArray();\r\n\r\n                        // value is not PhpReference,\r\n                        // make the value PhpReference:\r\n                        if (this.IsShared)\r\n                        {\r\n                            // we have to unshare this, so we can modify the content:\r\n                            array.EnsureWritable();\r\n                            // \"this\" is not \"array.table\" anymore!\r\n                            array.table.entries[p].Value = valuearray;\r\n                        }\r\n                        else\r\n                        {\r\n                            _entries[p].Value = valuearray;\r\n                        }\r\n                    }\r\n\r\n                    //\r\n                    return valuearray;\r\n                }\r\n\r\n            // not found, create new item:\r\n            valuearray = new PhpArray();\r\n            array.Add(key, valuearray);    // we have to adjust maxIntKey and make the array writable; do not call _add_last directly\r\n            return valuearray;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region _set_operation\r\n\r\n        /// <summary>\r\n        /// Performs diff operation on the list of this instance and the other list.\r\n        /// </summary>\r\n        /// <param name=\"op\">The operation.</param>\r\n        /// <param name=\"other\">The other list.</param>\r\n        /// <param name=\"comparer\">A comparer.</param>\r\n        /// <param name=\"deleted_dummy_next\">Value to be assigned to <see cref=\"Entry.listNext\"/> to be marked as deleted.</param>\r\n        /// <remarks>Updates only <see cref=\"Entry.listNext\"/> links. <see cref=\"Entry.listLast\"/>s are preserved so the operation can be reverted eventually.</remarks>\r\n        private void _set_operation(SetOperations op, OrderedDictionary/*!*/ other, IComparer<KeyValuePair<IntStringKey, object>>/*!*/comparer, int deleted_dummy_next)\r\n        {\r\n            Debug.Assert(other != null && comparer != null);\r\n            Debug.Assert(deleted_dummy_next < -1, \"deleted_dummy_next has to be different than end-of-list value!\");\r\n\r\n            var _entries = this.entries;\r\n\r\n            var other_iterator = other.GetFastEnumerator(); \r\n            var iterator = this.GetFastEnumerator();\r\n            int iterator_prev_entry = -1;\r\n            \r\n            // advances iterators onto the first element:\r\n            iterator.MoveNext();\r\n            other_iterator.MoveNext();\r\n            \r\n            while (iterator.IsValid && other_iterator.IsValid)\r\n            {\r\n                int cmp = comparer.Compare(iterator.Current, other_iterator.Current);\r\n                if (cmp > 0)\r\n                {\r\n                    // advance the other list iterator:\r\n                    other_iterator.MoveNext();\r\n                }\r\n                else if (cmp < 0 ^ op == SetOperations.Difference)\r\n                {\r\n                    var next = iterator.CurrentEntryListNext;\r\n\r\n                    // marks and skips the current element in the instance list, advances iterator:\r\n                    if (iterator_prev_entry < 0) this.listHead = next;\r\n                    else _entries[iterator_prev_entry].listNext = next;\r\n\r\n                    iterator.CurrentEntryListNext = deleted_dummy_next;\r\n                    iterator.CurrentEntryIndex = next;\r\n                }\r\n                else\r\n                {\r\n                    // advance this instance list iterator:\r\n                    iterator_prev_entry = iterator.CurrentEntryIndex;\r\n                    iterator.MoveNext();\r\n                }\r\n            }\r\n\r\n            // marks the remaining elements:\r\n            if (op == SetOperations.Intersection)\r\n            {\r\n                while (iterator.IsValid)\r\n                {\r\n                    var next = _entries[iterator.CurrentEntryIndex].listNext;\r\n\r\n                    // marks and skips the current element in the instance list, advances iterator:\r\n                    if (iterator_prev_entry < 0) this.listHead = next;\r\n                    else _entries[iterator_prev_entry].listNext = next;\r\n\r\n                    iterator.CurrentEntryListNext = deleted_dummy_next;\r\n                    iterator.CurrentEntryIndex = next;\r\n                }\r\n            }\r\n\r\n            //// dispose enumerators:\r\n            //iterator.Dispose();\r\n            //other_iterator.Dispose();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the difference of this instance elemens and elements of the specified lists.\r\n        /// </summary>\r\n        /// <param name=\"op\">The operation.</param>\r\n        /// <param name=\"arrays\">Array of arrays take away from this instance.</param>\r\n        /// <param name=\"comparer\">The comparer of entries.</param>\r\n        /// <param name=\"result\">The <see cref=\"IDictionary\"/> where to add remaining items.</param>\r\n        internal void _set_operation(SetOperations op, PhpHashtable[]/*!*/ arrays,\r\n            IComparer<KeyValuePair<IntStringKey, object>>/*!*/ comparer, /*IDictionary<IntStringKey, object>*/PhpArray/*!*/ result)\r\n        {\r\n            Debug.Assert(arrays != null && comparer != null && result != null);\r\n\r\n            int next;\r\n            int count = this.Count;\r\n\r\n            // nothing to do:\r\n            if (count == 0) return;\r\n\r\n            var _entries = this.entries;\r\n            const int deleted_dummy_next = -3;\r\n            \r\n            // sorts this instance list (doesn't modify Prevs and keeps list cyclic):\r\n            this.listHead = _merge_sort(comparer, _entries, this.listHead, count, out next);\r\n            Debug.Assert(next < 0);\r\n\r\n            OrderedDictionary other_table;\r\n\r\n            foreach (var other_array in arrays)\r\n            {\r\n                // total number of elements in diff list:\r\n                if (other_array != null)\r\n                {\r\n                    count = other_array.Count;\r\n                    other_table = other_array.table;\r\n                }\r\n                else\r\n                {\r\n                    count = 0;\r\n                    other_table = null;\r\n                }\r\n\r\n                // result is empty - either the list is differentiated with itself or intersected with an empty set:\r\n                if (other_table == this && op == SetOperations.Difference || count == 0 && op == SetOperations.Intersection)\r\n                {\r\n                    // reconstructs double linked list skipping elements marked as deleted:\r\n                    this._link_nexts_by_prevs();\r\n\r\n                    // the result is empty:\r\n                    return;\r\n                }\r\n\r\n                // skip operation (nothing new can be added):\r\n                if (other_table == this && op == SetOperations.Intersection || count == 0 && op == SetOperations.Difference)\r\n                    continue;\r\n\r\n                Debug.Assert(other_table != null);\r\n\r\n                // sorts other_head's list (doesn't modify Prevs and keeps list cyclic):\r\n                other_table.listHead = _merge_sort(comparer, other_table.entries, other_table.listHead, count, out next);\r\n                Debug.Assert(next < 0);\r\n\r\n                // applies operation on the instance list and the other list:\r\n                this._set_operation(op, other_table, comparer, deleted_dummy_next);\r\n\r\n                // rolls mergesort back:\r\n                other_table._link_nexts_by_prevs();\r\n\r\n                // instance list is empty:\r\n                if (this.listHead < 0) break;\r\n            }\r\n\r\n            this._reverse_prev_links();\r\n\r\n            // adds remaining elements to a dictionary:\r\n            for (var iterator = this.listTail; iterator >= 0; iterator = _entries[iterator].listLast)\r\n            {\r\n                if (_entries[iterator].listNext != deleted_dummy_next)\r\n                    result.Add(_entries[iterator].Key, _entries[iterator].Value);\r\n            }\r\n\r\n            this._reverse_prev_links();\r\n\r\n            // reconstructs double linked list skipping elements marked as deleted:\r\n            this._link_nexts_by_prevs();\r\n\r\n            //\r\n            this._debug_check_consistency();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Public: IsShared, Share, Unshare, ThrowIfShared, InplaceCopyOnReturn\r\n\r\n        /// <summary>\r\n        /// True iff the data structure is shared by more PhpHashtable instances and must not be modified.\r\n        /// </summary>\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public bool IsShared { get { return this.copiesCount > 0; } }\r\n\r\n        /// <summary>\r\n        /// Remember whether this instance and its owner (<see cref=\"PhpArray\"/>) can be recycled upon returning by value from a function.\r\n        /// </summary>\r\n        internal bool InplaceCopyOnReturn { get { return this.copiesCount < 0; } set { this.copiesCount = value ? -1 : 0; } }\r\n\r\n        /// <summary>\r\n        /// Marks this instance as shared (<see cref=\"IsShared\"/>) and returns itself.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public OrderedDictionary/*!*/Share()\r\n        {\r\n            ++copiesCount;\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Release shared instance of internal data.\r\n        /// </summary>\r\n        //[MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public void Unshare()\r\n        {\r\n            Debug.Assert(copiesCount >= 0, \"Too many Unshare() calls!\");    // 0 is allowed, so noone needs this table anymore\r\n            --copiesCount;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Helper method that throws if current instance is marked as shared.\r\n        /// </summary>\r\n        /// <exception cref=\"InvalidOperationException\">If this instance is marked as shared.</exception>\r\n        [Conditional(\"DEBUG\")]\r\n        private void ThrowIfShared()\r\n        {\r\n            if (this.IsShared)\r\n                throw new InvalidOperationException(\"The instance is not modifiable.\");\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDictionary<IntStringKey, object>\r\n\r\n        public void Add(IntStringKey key, object value)\r\n        {\r\n            _add_or_update(key, value/*, false*/);\r\n        }\r\n\r\n        public bool ContainsKey(IntStringKey key)\r\n        {\r\n            return _contains(ref key);\r\n        }\r\n\r\n        public ICollection<IntStringKey> Keys\r\n        {\r\n            get\r\n            {\r\n                if (this._keys == null)\r\n                    this._keys = new KeyCollection(this);\r\n\r\n                return this._keys;\r\n            }\r\n        }\r\n        private KeyCollection _keys;\r\n\r\n        public bool Remove(IntStringKey key)\r\n        {\r\n            return _del_key_or_index(ref key, null);\r\n        }\r\n\r\n        public bool TryGetValue(IntStringKey key, out object value)\r\n        {\r\n            return _tryGetValue(key, out value);\r\n        }\r\n\r\n        public bool TryGetValue(int ikey, out object value)\r\n        {\r\n            return _tryGetValue(ikey, out value);\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Gets a collection of values. \r\n        /// </summary>\r\n        public ICollection<object>/*!*/ Values\r\n        {\r\n            get\r\n            {\r\n                if (this._values == null)\r\n                    this._values = new ValueCollection(this);\r\n\r\n                return this._values;\r\n            }\r\n        }\r\n        [NonSerialized]\r\n        private ValueCollection _values;\r\n\r\n        #region Inner class: ValueCollection\r\n\r\n        /// <summary>\r\n        /// Auxiliary collection used for manipulating keys or values of PhpHashtable.\r\n        /// </summary>\r\n        [Serializable]\r\n        public sealed class ValueCollection : ICollection<object>, ICollection\r\n        {\r\n            private readonly OrderedDictionary/*!*/ hashtable;\r\n\r\n            internal ValueCollection(OrderedDictionary/*!*/ hashtable)\r\n            {\r\n                this.hashtable = hashtable;\r\n            }\r\n\r\n            #region ICollection<object> Members\r\n\r\n            public bool Contains(object item)\r\n            {\r\n                using(var enumerator = hashtable.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        if (enumerator.CurrentValue == item)\r\n                            return true;\r\n\r\n                return false;\r\n            }\r\n\r\n            public void CopyTo(object[]/*!*/ array, int index)\r\n            {\r\n                using (var enumerator = hashtable.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        array[index ++] = enumerator.CurrentValue;\r\n            }\r\n\r\n            public bool IsReadOnly { get { return true; } }\r\n\r\n            public void Add(object item)\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            public void Clear()\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            public bool Remove(object item)\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region ICollection Members\r\n\r\n            public int Count { get { return hashtable.Count; } }\r\n\r\n            public bool IsSynchronized { get { return false; } }\r\n\r\n            public object SyncRoot { get { return this; } }\r\n\r\n            public void CopyTo(Array/*!*/ array, int index)\r\n            {\r\n                CopyTo((object[])array, index);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerable<object> Members\r\n\r\n            public IEnumerator<object> GetEnumerator()\r\n            {\r\n                var enumerator = hashtable.GetFastEnumerator();\r\n                while (enumerator.MoveNext())\r\n                    yield return enumerator.CurrentValue;\r\n                enumerator.Dispose();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerable Members\r\n\r\n            IEnumerator IEnumerable.GetEnumerator()\r\n            {\r\n                return GetEnumerator();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Inner class: KeyCollection\r\n\r\n        /// <summary>\r\n        /// Auxiliary collection used for manipulating keys or values of PhpHashtable.\r\n        /// </summary>\r\n        [Serializable]\r\n        public sealed class KeyCollection : ICollection<IntStringKey>, ICollection\r\n        {\r\n            private readonly OrderedDictionary/*!*/ hashtable;\r\n\r\n            internal KeyCollection(OrderedDictionary/*!*/ hashtable)\r\n            {\r\n                this.hashtable = hashtable;\r\n            }\r\n\r\n            #region ICollection<object> Members\r\n\r\n            public bool Contains(IntStringKey item)\r\n            {\r\n                using (var enumerator = hashtable.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        if (enumerator.CurrentKey.Equals(ref item))\r\n                            return true;\r\n\r\n                return false;\r\n            }\r\n\r\n            public void CopyTo(IntStringKey[]/*!*/ array, int index)\r\n            {\r\n                using (var enumerator = hashtable.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        array[index ++] = enumerator.CurrentKey;\r\n            }\r\n\r\n            public bool IsReadOnly { get { return true; } }\r\n\r\n            public void Add(IntStringKey item)\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            public void Clear()\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            public bool Remove(IntStringKey item)\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region ICollection Members\r\n\r\n            public int Count { get { return hashtable.Count; } }\r\n\r\n            public bool IsSynchronized { get { return false; } }\r\n\r\n            public object SyncRoot { get { return this; } }\r\n\r\n            public void CopyTo(Array/*!*/ array, int index)\r\n            {\r\n                CopyTo((IntStringKey[])array, index);\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerable<object> Members\r\n\r\n            public IEnumerator<IntStringKey> GetEnumerator()\r\n            {\r\n                var enumerator = hashtable.GetFastEnumerator();\r\n                while (enumerator.MoveNext())\r\n                    yield return enumerator.CurrentKey;\r\n                enumerator.Dispose();\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerable Members\r\n\r\n            IEnumerator IEnumerable.GetEnumerator()\r\n            {\r\n                return GetEnumerator();\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        public object this[IntStringKey key]\r\n        {\r\n            get\r\n            {\r\n                return _get(ref key);\r\n            }\r\n            set\r\n            {\r\n                _add_or_update(key, value/*, false*/);\r\n            }\r\n        }\r\n\r\n        public void Add(KeyValuePair<IntStringKey, object> item)\r\n        {\r\n            var key = item.Key;\r\n            _add_or_update(key, item.Value/*, true*/);\r\n        }\r\n\r\n        public void Clear()\r\n        {\r\n            _clear();\r\n        }\r\n\r\n        public bool Contains(KeyValuePair<IntStringKey, object> item)\r\n        {\r\n            object value;\r\n            return _tryGetValue(item.Key, out value) && (value == item.Value);\r\n        }\r\n\r\n        public void CopyTo(KeyValuePair<IntStringKey, object>[] array, int arrayIndex)\r\n        {\r\n            if (array == null || arrayIndex < 0 || (arrayIndex + this.Count) > array.Length)\r\n                throw new ArgumentException();\r\n\r\n            using (var enumerator = GetFastEnumerator())\r\n                while (enumerator.MoveNext())\r\n                    array[arrayIndex++] = enumerator.Current;\r\n        }\r\n\r\n        public int Count\r\n        {\r\n            get { return this.count - this.freeCount; }\r\n        }\r\n\r\n        public bool IsReadOnly\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        public bool Remove(KeyValuePair<IntStringKey, object> item)\r\n        {\r\n            var key = item.Key;\r\n            return _del_key_or_index(ref key, null);\r\n        }\r\n\r\n        public IEnumerator<KeyValuePair<IntStringKey, object>>/*!*/GetEnumerator()\r\n        {\r\n            return new Enumerator(this, true);\r\n        }\r\n\r\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n        {\r\n            return new Enumerator(this, true);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ISerializable (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Handles serialization and deserialization of <see cref=\"OrderedDictionary\"/>.\r\n        /// </summary>\r\n        [Serializable]\r\n        private class SerializationHelper : ISerializable, IDeserializationCallback, IObjectReference\r\n        {\r\n            /// <summary>\r\n            /// An instance of <see cref=\"OrderedDictionary\"/> lazily created.\r\n            /// </summary>\r\n            private OrderedDictionary instance;\r\n\r\n            /// <summary>\r\n            /// Internal data from <see cref=\"SerializationInfo\"/>.\r\n            /// </summary>\r\n            private readonly KeyValuePair<IntStringKey, object>[]/*!!*/array;\r\n\r\n            /// <summary>\r\n            /// Name of value field within <see cref=\"SerializationInfo\"/> containing serialized array of keys and objects.\r\n            /// </summary>\r\n            private const string InfoValueName = \"KeyValuePairs\";\r\n\r\n            /// <summary>\r\n            /// Beginning of the deserialization.\r\n            /// </summary>\r\n            /// <param name=\"info\"></param>\r\n            /// <param name=\"context\"></param>\r\n            private SerializationHelper(SerializationInfo/*!*/info, StreamingContext context)\r\n            {\r\n                // careful - the array received here may not be fully deserialized yet\r\n                // wait until until OnDeserialization to use it\r\n                this.array = (KeyValuePair<IntStringKey, object>[])info.GetValue(InfoValueName, typeof(KeyValuePair<IntStringKey, object>[]));\r\n            }\r\n\r\n            [System.Security.SecurityCritical]\r\n            internal static void GetObjectData(OrderedDictionary/*!*/instance, SerializationInfo info, StreamingContext context)\r\n            {\r\n                Debug.Assert(instance != null);\r\n                Debug.Assert(info != null);\r\n\r\n                info.SetType(typeof(SerializationHelper));\r\n\r\n                var array = new KeyValuePair<IntStringKey, object>[instance.Count];\r\n                instance.CopyTo(array, 0);\r\n                info.AddValue(InfoValueName, array);\r\n            }\r\n\r\n            public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n            {\r\n                // should never be called\r\n                throw new InvalidOperationException();\r\n            }\r\n\r\n            public object GetRealObject(StreamingContext context)\r\n            {\r\n                return this.instance ?? (this.instance = new OrderedDictionary(null, (this.array != null) ? this.array.Length : 0 ));\r\n            }\r\n\r\n            public virtual void OnDeserialization(object sender)\r\n            {\r\n                Debug.Assert(this.instance != null);\r\n\r\n                var data = this.array;\r\n                if (data != null)\r\n                {\r\n                    for (int i = 0; i < data.Length; i++)\r\n                        this.instance.Add(data[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            SerializationHelper.GetObjectData(this, info, context);\r\n        }\r\n\r\n#endif\r\n\t\t#endregion\r\n\r\n        #region ICloneable\r\n\r\n        /// <summary>\r\n        /// Perform fast clone.\r\n        /// </summary>\r\n        /// <returns>Clone of <c>this</c>.</returns>\r\n        public object Clone()\r\n        {\r\n            return new OrderedDictionary(this.owner, this);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDictionary\r\n\r\n        public void Add(object key, object value) { this.Add((IntStringKey)key, value); }\r\n        public bool Contains(object key) { return this.Contains((IntStringKey)key); }\r\n        IDictionaryEnumerator IDictionary.GetEnumerator() { return new Enumerator(this, false); }\r\n        public bool IsFixedSize { get { return false; } }\r\n        ICollection IDictionary.Keys { get { return (ICollection)this.Keys; } }\r\n        public void Remove(object key){this.Remove((IntStringKey)key);}\r\n        ICollection IDictionary.Values{get { return (ICollection)this.Values; }        }\r\n        public object this[object key]\r\n        {\r\n            get { return this[(IntStringKey)key]; }\r\n            set { this[(IntStringKey)key] = value; }\r\n        }\r\n        public void CopyTo(Array array, int index)\r\n        {\r\n            // KeyValuePair<IntStringKey, object>[]\r\n            var pairs = array as KeyValuePair<IntStringKey, object>[];\r\n            if (pairs != null)\r\n            {\r\n                CopyTo(pairs, index);\r\n                return;\r\n            }\r\n\r\n            // DictionaryEntry[];\r\n            var entries = array as DictionaryEntry[];\r\n            if (entries != null)\r\n            {\r\n                using (var enumerator = GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        entries[index++] = new DictionaryEntry(enumerator.CurrentKey, enumerator.CurrentValue);\r\n                return;\r\n            }\r\n\r\n            // object[]\r\n            var objects = array as object[];\r\n            if (objects != null)\r\n            {\r\n                using (var enumerator = GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        objects[index++] = enumerator.Current;\r\n                return;\r\n            }\r\n\r\n            // otherwise\r\n            throw new ArgumentException(\"array\");\r\n        }\r\n        public bool IsSynchronized { get { return false; } }\r\n        public object SyncRoot { get { return this; } }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Output.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing PHP;\r\nusing PHP.Core;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Provides output buffering functionality. \r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic class BufferedOutput : TextWriter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Position of a chunk of buffered data. \r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tpublic enum ChunkPosition\r\n\t\t{\r\n\t\t\tFirst = 1,\r\n\t\t\tMiddle = 2,\r\n\t\t\tLast = 4\r\n\t\t}\r\n\r\n\t\t#region Nested Classes: BufferElement, LevelElement\r\n\r\n\t\t// data chunk on one level of buffering:\r\n\t\tprivate class BufferElement\r\n\t\t{\r\n\t\t\tinternal int size;                   // the number of valid bytes/chars of the data array\r\n\t\t\tinternal System.Array data;          // array containing buffered data\r\n\t\t}\r\n\r\n\t\t// representation of one level of buffering:\r\n\t\tprivate class LevelElement\r\n\t\t{\r\n\t\t\tinternal LevelElement(int index)\r\n\t\t\t{\r\n\t\t\t\tthis.index = index;\r\n\t\t\t\tthis.buffers = new ArrayList();\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Copies index, name and filter from the element.\r\n            /// </summary>\r\n            /// <param name=\"element\"></param>\r\n            internal LevelElement(LevelElement/*!*/element)\r\n                :this(element.index)\r\n            {\r\n                filter = element.filter;\r\n                levelName = element.levelName;\r\n                userData = element.userData;\r\n            }\r\n\r\n\t\t\tpublic readonly int index;         // the index of the level in levels array list\r\n\t\t\tpublic int size;                   // the size (chars + bytes) of all data stored in the buffers list\r\n\t\t\tpublic int[] freeSpace = { 0, 0 };    // the number of free bytes/chars in the last byte/char buffer of buffers\r\n\t\t\tpublic ArrayList buffers;          // the list of buffers where data are stored\r\n\t\t\tpublic bool containsByteData;      // whether any buffer in the buffers list is of type byte[]\r\n\t\t\tpublic bool containsCharData;      // whether any buffer in the buffers list is of type char[]\r\n\t\t\tpublic PhpCallback filter;         // user supplied filtering callback\r\n\t\t\tpublic object userData;            // arbitrary data supplied by the user\r\n            public string levelName;           // the PHP name of the level, can be null\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t// the list of LevelElements:\r\n\t\tprivate ArrayList levels;            // GENERICS: List<LevelElements>\r\n\r\n\t\t// the current level of buffering (usually the last one); null iff the buffering is disabled\r\n\t\tprivate LevelElement level;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Minimal sizes of buffers. \r\n\t\t/// </summary>\r\n\t\tinternal readonly int[] minBufferSize = { 2 * 1024, 20 * 1024 };\r\n\r\n\t\t/// <summary>\r\n\t\t/// The writer through which character data will be written.\r\n\t\t/// </summary>\r\n\t\tpublic TextWriter CharSink { get { return charSink; } set { charSink = value; } }\r\n\t\tprivate TextWriter charSink;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The stream through which binary data will be written.\r\n\t\t/// </summary>\r\n\t\tpublic Stream ByteSink { get { return byteSink; } set { byteSink = value; } }\r\n\t\tprivate Stream byteSink;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Encoding used by <see cref=\"GetContentAsString\"/> converting binary data to a string.\r\n\t\t/// </summary>\r\n\t\tpublic override Encoding Encoding { get { return encoding; } }\r\n\t\tprivate Encoding encoding;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The buffered binary stream used as for loading binary data to buffers.\r\n\t\t/// </summary>\r\n\t\tpublic BufferedOutputStream Stream { get { return stream; } }\r\n\t\tprivate BufferedOutputStream stream;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current buffer level starting from 1. Zero if buffering is disabled.\r\n\t\t/// </summary>\r\n\t\tpublic int Level { get { return (level != null) ? level.index + 1 : 0; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The total length of data written to the current level of buffering.\r\n\t\t/// Returns -1 if buffering is disabled.\r\n\t\t/// </summary>\r\n\t\tpublic int Length { get { return (level != null) ? level.size : -1; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates buffered output with specified sinks.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"enableBuffering\">Whether to immediately enable buffering, i.e. increase the level.</param>\r\n\t\t/// <param name=\"charSink\">A writer through which character data will be written.</param>\r\n\t\t/// <param name=\"byteSink\">A stream through which binary data will be written.</param>\r\n\t\t/// <param name=\"encoding\">A encoding used to transform binary data to strings.</param>\r\n\t\tpublic BufferedOutput(bool enableBuffering, TextWriter charSink, Stream byteSink, Encoding encoding)\r\n\t\t{\r\n\t\t\tthis.charSink = charSink;\r\n\t\t\tthis.byteSink = byteSink;\r\n\t\t\tthis.encoding = encoding;\r\n\t\t\tstream = new BufferedOutputStream(this);\r\n\t\t\tlevels = new ArrayList();\r\n\r\n\t\t\tif (enableBuffering)\r\n\t\t\t\tIncreaseLevel();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"BufferedOutput\"/> having enabled buffering and with sinks set to null sinks.\r\n\t\t/// </summary>\r\n\t\tpublic BufferedOutput()\r\n\t\t\t: this(true, TextWriter.Null, System.IO.Stream.Null, Configuration.Application.Globalization.PageEncoding)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Buffer allocation, level changing\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a buffer where data of requested size and type can be stored. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sizeNeeded\">The number of characters or bytes to be allocated.</param>\r\n\t\t/// <param name=\"binary\">Whether allocated data are bytes or chars.</param>\r\n\t\t/// <param name=\"buffer\">Returns the buffer where data can be written to.</param>\r\n\t\t/// <param name=\"position\">Returns the position where data can be written on.</param>\r\n\t\t/// <returns>The number of allocated characters or bytes.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The buffer may already exist or new one may be created.\r\n\t\t/// Works on the current level of buffering.\r\n\t\t/// </remarks>\r\n\t\tprivate int AllocateBuffer(int sizeNeeded, bool binary, out System.Array buffer, out int position)\r\n\t\t{\r\n\t\t\tDebug.Assert(level != null);\r\n\r\n\t\t\tBufferElement element;\r\n\t\t\tint chunk;\r\n\t\t\tint kind = binary ? 1 : 0;\r\n\r\n\t\t\t// close binary buffer:\r\n\t\t\tlevel.freeSpace[1 - kind] = 0;\r\n\r\n\t\t\tif (binary) level.containsByteData = true; else level.containsCharData = true;\r\n\r\n\t\t\t// no free space for characters found (no buffer exists, the top buffer isn't a character buffer\r\n\t\t\t// or the top buffer is full character buffer):\r\n\t\t\tif (level.freeSpace[kind] == 0)\r\n\t\t\t{\r\n\t\t\t\t// computes the size of buffer to be allocated as min{sizeNeeded,dafaultBufferSize}:\r\n\t\t\t\tint size = sizeNeeded;\r\n\t\t\t\tif (size < minBufferSize[kind])\r\n\t\t\t\t{\r\n\t\t\t\t\tsize = minBufferSize[kind];\r\n\t\t\t\t\tlevel.freeSpace[kind] = size - sizeNeeded;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tlevel.freeSpace[kind] = 0; // all space in allocated buffer will be occupied\r\n\r\n\t\t\t\t// allocates a new buffer element for data:\r\n\t\t\t\telement = new BufferElement();\r\n\t\t\t\tif (binary) buffer = new byte[size]; else buffer = new char[size];\r\n\t\t\t\telement.data = buffer;\r\n\t\t\t\telement.size = sizeNeeded;   //sizeNeeded <= (buffer size)\r\n\t\t\t\tlevel.buffers.Add(element);\r\n\r\n\t\t\t\tposition = 0;\r\n\t\t\t\tchunk = sizeNeeded;\r\n\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t// some free space found:\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(level.buffers.Count > 0);\r\n\r\n\t\t\t\t// available space:\r\n\t\t\t\tchunk = (level.freeSpace[kind] < sizeNeeded) ? level.freeSpace[kind] : sizeNeeded;\r\n\r\n\t\t\t\telement = (BufferElement)level.buffers[level.buffers.Count - 1];\r\n\t\t\t\tbuffer = element.data;\r\n\t\t\t\tposition = element.data.Length - level.freeSpace[kind];\r\n\t\t\t\telement.size += chunk;\r\n\t\t\t\tlevel.freeSpace[kind] -= chunk;\r\n\t\t\t}\r\n\t\t\tlevel.size += chunk;\r\n\t\t\treturn chunk;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a new level of buffering on the top of the levels stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Returns the new level index.</remarks>\r\n\t\tpublic int IncreaseLevel()\r\n\t\t{\r\n\t\t\treturn levels.Add(level = new LevelElement(levels.Count));\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Destroys the top level of buffering. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"flush\">Whether to flush data on the current level. Data will be discarded if not set.</param>\r\n\t\t/// <remarks>Returns the current level index after decreasing.</remarks>\r\n\t\tpublic int DecreaseLevel(bool flush)\r\n\t\t{\r\n\t\t\tif (level == null) throw new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tif (flush) InternalFlush();\r\n\r\n\t\t\tint top = levels.Count - 1;\r\n\t\t\tlevels.RemoveAt(top);\r\n\r\n\t\t\tif (top != 0)\r\n\t\t\t{\r\n\t\t\t\tlevel = (LevelElement)levels[top - 1];\r\n\t\t\t\treturn top - 1;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tlevel = null;\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Filtering\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assignes an arbitrary data to the specified level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">Null reference clears assigned data.</param>\r\n\t\t/// <param name=\"levelIndex\">The level of buffering which the filter to associate with.</param>\r\n\t\t/// <remarks>Data are filtered when flushed.</remarks>\r\n\t\tpublic void SetUserData(object data, int levelIndex)\r\n\t\t{\r\n\t\t\tif (levelIndex < 0 || levelIndex >= levels.Count) throw new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n\t\t\t((LevelElement)levels[levelIndex]).userData = data;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assignes the arbitrary data to the current level of buffering. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The reference to data.</param>\r\n\t\t/// <remarks>Data are filtered when flushed.</remarks>\r\n\t\tpublic void SetUserData(object data)\r\n\t\t{\r\n\t\t\tif (level == null) throw new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\t\t\tlevel.userData = data;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assignes the filtering callback to the specified level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filter. Null reference means no filter.</param>\r\n\t\t/// <param name=\"levelIndex\">The level of buffering which the filter to associate with.</param>\r\n\t\t/// <remarks>Data are filtered when flushed.</remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"levelIndex\"/> is out of range.</exception>\r\n\t\tpublic void SetFilter(PhpCallback filter, int levelIndex)\r\n\t\t{\r\n\t\t\tif (levelIndex < 0 || levelIndex >= levels.Count)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n\t\t\t((LevelElement)levels[levelIndex]).filter = filter;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Assignes the filtering callback to the current level of buffering. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filter. Null reference means no filter.</param>\r\n\t\t/// <remarks>Data are filtered when flushed.</remarks>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Output buffering is disabled.</exception>\r\n\t\tpublic void SetFilter(PhpCallback filter)\r\n\t\t{\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tlevel.filter = filter;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the filtering callback defined on the specified level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"levelIndex\">The level of buffering which the filter to associate with.</param>\r\n\t\t/// <returns>The callback or <B>null</B> if no filter has been defined.</returns>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"levelIndex\"/> is out of range.</exception>\r\n\t\tpublic PhpCallback GetFilter(int levelIndex)\r\n\t\t{\r\n\t\t\tif (levelIndex < 0 || levelIndex >= levels.Count)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n\t\t\treturn ((LevelElement)levels[levelIndex]).filter;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the filtering callback defined on the current level of buffering.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The callback or <B>null</B> if no filter has been defined.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Output buffering is disabled.</exception>\r\n\t\tpublic PhpCallback GetFilter()\r\n\t\t{\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\treturn level.filter;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Set the level name.\r\n        /// </summary>\r\n        /// <param name=\"levelIndex\">Index of the level from 1.</param>\r\n        /// <param name=\"levelName\">New name of the level.</param>\r\n        public void SetLevelName(int levelIndex, string levelName)\r\n        {\r\n            if (levelIndex < 0 || levelIndex >= Level)\r\n                throw new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n            LevelElement element = (LevelElement)levels[levelIndex];\r\n\r\n            element.levelName = levelName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the name of the level. If the level name is null, the filter.ToString() is used.\r\n        /// </summary>\r\n        /// <param name=\"levelIndex\">Index of the level from 1.</param>\r\n        /// <returns></returns>\r\n        public string GetLevelName(int levelIndex)\r\n        {\r\n            if (levelIndex < 0 || levelIndex >= Level)\r\n                throw new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n            LevelElement element = (LevelElement)levels[levelIndex];\r\n\r\n            string levelName = element.levelName;\r\n\r\n            if (levelName == null)\r\n            {\r\n\t\t\t    PhpCallback filter = element.filter;\r\n                levelName = (filter != null) ? ((IPhpConvertible)filter).ToString() : \"default output handler\";\r\n            }\r\n\r\n            return levelName;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Clean, Flush, FlushAll\r\n\r\n\t\t/// <summary>\r\n\t\t/// Discards data on the current level of buffering.\r\n\t\t/// </summary>\r\n\t\tpublic void Clean()\r\n\t\t{\r\n\t\t\tif (level == null) return;\r\n\r\n\t\t\tlevels[level.index] = level = new LevelElement(level);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes all data from all buffers to sinks. Discards all data and all levels of buffering.\r\n\t\t/// Disables output buffering.\r\n\t\t/// </summary>\r\n\t\tpublic void FlushAll()\r\n\t\t{\r\n\t\t\tfor (int i = levels.Count - 1; i >= 0; i--)\r\n\t\t\t{\r\n\t\t\t\tlevel = (LevelElement)levels[i];\r\n\t\t\t\tInternalFlush();\r\n\t\t\t}\r\n\t\t\tlevels.Clear();\r\n\t\t\tlevel = null;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes data on current level of buffering to sinks or to the previous level and discards them.\r\n\t\t/// </summary>\r\n\t\tpublic override void Flush()\r\n\t\t{\r\n\t\t\tif (level == null) return;\r\n\t\t\tInternalFlush();\r\n            Clean();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes data on current level of buffering to the sinks or to the previous level.\r\n\t\t/// The current level clean up MUST follow this method's call.\r\n\t\t/// </summary>\r\n\t\tinternal void InternalFlush()\r\n\t\t{\r\n\t\t\tDebug.Assert(level != null);\r\n\r\n\t\t\tif (level.filter != null)\r\n\t\t\t{\r\n\t\t\t\tChunkPosition chunk_position = ChunkPosition.First | ChunkPosition.Middle | ChunkPosition.Last;\r\n\r\n\t\t\t\t// writes data to the current level of buffering or to sinks depending on the level count:\r\n\t\t\t\tif (level.index > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// gets data from user's callback:\r\n\t\t\t\t\tobject data = level.filter.Invoke(GetContent(), chunk_position);\r\n\r\n\t\t\t\t\t// store level to allow its restore:\r\n\t\t\t\t\tLevelElement old_level = level;\r\n\r\n\t\t\t\t\t// temporarily decreases the level of buffering toredirect writes to the lower level:\r\n\t\t\t\t\tlevel = (LevelElement)levels[level.index - 1];\r\n\r\n\t\t\t\t\t// checks whether the filtered data are binary at first; if not so, converts them to a string:\r\n\t\t\t\t\tPhpBytes bin = data as PhpBytes;\r\n\t\t\t\t\tif (bin != null)\r\n\t\t\t\t\t\tstream.Write(bin.ReadonlyData, 0, bin.Length);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis.Write(PHP.Core.Convert.ObjectToString(data));\r\n\r\n\t\t\t\t\t// restore the level of buffering:\r\n\t\t\t\t\tlevel = old_level;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// gets data from user's callback:\r\n\t\t\t\t\tobject data = level.filter.Invoke(GetContent(), chunk_position);\r\n\r\n\t\t\t\t\t// checks whether the filtered data are binary at first; if not so, converts them to a string:\r\n\t\t\t\t\tPhpBytes bin = data as PhpBytes;\r\n\t\t\t\t\tif (bin != null)\r\n\t\t\t\t\t{\r\n                        if (bin.Length > 0) byteSink.Write(bin.ReadonlyData, 0, bin.Length);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tcharSink.Write(PHP.Core.Convert.ObjectToString(data));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (level.index > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// joins levels (data are not copied => the current level MUST be cleaned up after the return from this method):\r\n\t\t\t\t\tif (level.size > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLevelElement lower_level = (LevelElement)levels[level.index - 1];\r\n\r\n\t\t\t\t\t\tlower_level.buffers.AddRange(level.buffers);\r\n\t\t\t\t\t\tlower_level.size += level.size;\r\n\t\t\t\t\t\tlower_level.freeSpace = level.freeSpace;      // free space in the last buffer of the level\r\n\t\t\t\t\t\tlower_level.containsByteData |= level.containsByteData;\r\n\t\t\t\t\t\tlower_level.containsCharData |= level.containsCharData;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// writes top-level data to sinks:\r\n\t\t\t\t\tfor (int i = 0; i < level.buffers.Count; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBufferElement element = (BufferElement)level.buffers[i];\r\n\r\n\t\t\t\t\t\tbyte[] bytes = element.data as byte[];\r\n\t\t\t\t\t\tif (bytes != null)\r\n\t\t\t\t\t\t\tbyteSink.Write(bytes, 0, element.size);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tcharSink.Write((char[])element.data, 0, element.size);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetContent\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a content of buffers on current buffering level converted to string regardless of its type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// The content converted to a string. Binary data are converted using <see cref=\"Encoding\"/>.\r\n\t\t/// </returns>\r\n\t\tpublic string GetContentAsString()\r\n\t\t{\r\n\t\t\tif (level == null) return null;\r\n\r\n\t\t\tStringBuilder result = new StringBuilder(level.size, level.size);\r\n\r\n\t\t\tfor (int i = 0; i < level.buffers.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tBufferElement element = (BufferElement)level.buffers[i];\r\n\r\n\t\t\t\tbyte[] bytes = element.data as byte[];\r\n\t\t\t\tif (bytes != null)\r\n\t\t\t\t\tresult.Append(encoding.GetString(bytes, 0, element.size));\r\n\t\t\t\telse\r\n\t\t\t\t\tresult.Append((char[])element.data, 0, element.size);\r\n\t\t\t}\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a content of buffers on current buffering level.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The content as <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> or a \r\n\t\t/// <b>null</b> reference if output buffering is disable.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Character data are returned unchanged, binary data are converted to string by \r\n\t\t/// the <see cref=\"System.Text.Encoding.GetString\"/> method of the current encoding.\r\n\t\t/// </remarks>\r\n\t\tpublic object GetContent()\r\n\t\t{\r\n\t\t\tif (level == null) return null;\r\n\t\t\tif (level.size == 0) return String.Empty;\r\n\r\n\t\t\t// contains characters only:\r\n\t\t\tif (!level.containsByteData)\r\n\t\t\t{\r\n\t\t\t\tStringBuilder result = new StringBuilder(level.size, level.size);\r\n\r\n\t\t\t\tfor (int i = 0; i < level.buffers.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tBufferElement element = (BufferElement)level.buffers[i];\r\n\t\t\t\t\tresult.Append((char[])element.data, 0, element.size);\r\n\t\t\t\t}\r\n\t\t\t\treturn result.ToString();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t// contains bytes only:\r\n\t\t\t\tif (!level.containsCharData)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar result = new byte[level.size];\r\n\r\n\t\t\t\t\tfor (int i = 0, k = 0; i < level.buffers.Count; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBufferElement element = (BufferElement)level.buffers[i];\r\n\t\t\t\t\t\tArray.Copy(element.data, 0, result, k, element.size);\r\n\t\t\t\t\t\tk += element.size;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn new PhpBytes(result);\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t// contains both bytes and characters:\r\n\t\t\t\t{\r\n\t\t\t\t\treturn GetContentAsString();\r\n\t\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Write, WriteBytes\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes an array of bytes to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">Bytes to be written.</param>\r\n\t\tpublic void WriteBytes(byte[] value)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"value\");\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tWriteInternal(value, true, 0, value.Length);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a subarray of bytes to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">Bytes to be written.</param>\r\n\t\t/// <param name=\"index\">Starting index in the array.</param>\r\n\t\t/// <param name=\"count\">The number of characters to write.</param>\r\n\t\tpublic void WriteBytes(byte[] value, int index, int count)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"value\");\r\n\t\t\tif (index < 0 || index + count > value.Length)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"index\");\r\n\t\t\tif (count < 0)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"count\");\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tWriteInternal(value, true, index, count);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a subarray of characters to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">Characters to be written.</param>\r\n\t\tpublic override void Write(char[] value)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"value\");\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tWriteInternal(value, false, 0, value.Length);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a subarray of characters to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be written.</param>\r\n\t\t/// <param name=\"index\">Starting index in the array.</param>\r\n\t\t/// <param name=\"count\">The number of characters to write.</param>\r\n\t\tpublic override void Write(char[] value, int index, int count)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"value\");\r\n\t\t\tif (index < 0 || index + count > value.Length)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"index\");\r\n\t\t\tif (count < 0)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"count\");\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tWriteInternal(value, false, index, count);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a subarray to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be written.</param>\r\n\t\t/// <param name=\"binary\">The type of items in array (byte/char).</param>\r\n\t\t/// <param name=\"index\">Starting index in the array.</param>\r\n\t\t/// <param name=\"count\">The number of items to write.</param>\r\n\t\tinternal void WriteInternal(Array value, bool binary, int index, int count)\r\n\t\t{\r\n\t\t\tint position;\r\n\t\t\tSystem.Array buffer;\r\n\t\t\tint length = count;\r\n\t\t\tint chunk;\r\n\r\n\t\t\t// writes initial sequence of characters to buffer:\r\n\t\t\tchunk = AllocateBuffer(length, binary, out buffer, out position);\r\n\t\t\tlength -= chunk;\r\n\t\t\tArray.Copy(value, index, buffer, position, chunk);\r\n\r\n\t\t\t// if not all characters has been written writes the rest to the next buffer:\r\n\t\t\tif (length > 0)\r\n\t\t\t{\r\n\t\t\t\tAllocateBuffer(length, binary, out buffer, out position);\r\n\t\t\t\tArray.Copy(value, index + chunk, buffer, position, length);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a single character to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be written.</param>\r\n\t\tpublic override void Write(char value)\r\n\t\t{\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tint position;\r\n\t\t\tArray buffer;\r\n\r\n\t\t\tAllocateBuffer(1, false, out buffer, out position);\r\n\t\t\t((char[])buffer)[position] = value;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes a string value to the output buffer.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be written.</param>\r\n\t\tpublic override void Write(string value)\r\n\t\t{\r\n\t\t\tif (level == null)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"output_buffering_disabled\"));\r\n\r\n\t\t\tif (value == null) value = String.Empty;\r\n\r\n\t\t\tint position;\r\n\t\t\tArray buffer;\r\n\t\t\tint length = value.Length;\r\n\t\t\tint chunk;\r\n\r\n\t\t\t// writes initial sequence of characters to buffer:\r\n\t\t\tchunk = AllocateBuffer(length, false, out buffer, out position);\r\n\t\t\tlength -= chunk;\r\n\t\t\tvalue.CopyTo(0, (char[])buffer, position, chunk);\r\n\r\n\t\t\t// if not all characters written then writes the rest to the next buffer:\r\n\t\t\tif (length > 0)\r\n\t\t\t{\r\n\t\t\t\tAllocateBuffer(length, false, out buffer, out position);\r\n\t\t\t\tvalue.CopyTo(chunk, (char[])buffer, position, length);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetLevelInfo\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets some information about a specified level.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"levelIndex\">Level index starting from 1.</param>\r\n\t\t/// <param name=\"filter\">Filtering callback (if any).</param>\r\n\t\t/// <param name=\"size\">Data size.</param>\r\n\t\tpublic void GetLevelInfo(int levelIndex, out PhpCallback filter, out int size)\r\n\t\t{\r\n\t\t\tif (levelIndex < 1 || levelIndex > Level)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"levelIndex\");\r\n\r\n\t\t\tLevelElement element = (LevelElement)levels[levelIndex - 1];\r\n\t\t\tfilter = element.filter;\r\n\t\t\tsize = element.size;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Find level index by the filter callback.\r\n        /// </summary>\r\n        /// <param name=\"filter\"></param>\r\n        /// <returns></returns>\r\n        public int FindLevelByFilter(PhpCallback filter)\r\n        {\r\n            if (levels != null && filter != null)\r\n                for (int i = 0; i < Level; ++i)\r\n                    if (((LevelElement)levels[i]).filter == filter)\r\n                        return i;\r\n\r\n            return -1;\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\r\n\t/// <summary>\r\n\t/// Provides output buffering of streams.\r\n\t/// </summary>\r\n\tpublic class BufferedOutputStream : Stream\r\n\t{\r\n\t\tprivate BufferedOutput output;\r\n\r\n\t\tpublic BufferedOutputStream(BufferedOutput output)\r\n\t\t{\r\n\t\t\tthis.output = output;\r\n\t\t}\r\n\r\n\t\tpublic override bool CanRead { get { return false; } }\r\n\t\tpublic override bool CanSeek { get { return false; } }\r\n\t\tpublic override bool CanWrite { get { return true; } }\r\n\r\n\t\tpublic override void Flush()\r\n\t\t{\r\n\t\t\toutput.Flush();\r\n\t\t}\r\n\r\n\t\tpublic override void Write(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\toutput.WriteBytes(buffer, offset, count);\r\n\t\t}\r\n\r\n\r\n\t\t#region Unsupported functionality\r\n\r\n\t\tpublic override long Length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic override long Position\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic override void SetLength(long value)\r\n\t\t{\r\n\t\t\tthrow new NotSupportedException();\r\n\t\t}\r\n\r\n\t\tpublic override long Seek(long offset, SeekOrigin origin)\r\n\t\t{\r\n\t\t\tthrow new NotSupportedException();\r\n\t\t}\r\n\r\n\t\tpublic override int Read(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\tthrow new NotSupportedException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpArray.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\n/*\r\n  FUTURE VERSION:\r\n   - use OrderedHashtable.SortToList in CompareArrays\r\n   - seal PhpArray (solve better PhpArrayString and SPL.PhpArrayObject)\r\n  \r\n*/\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents PHP associative ordered array.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\t[DebuggerDisplay(\"Count = {Count}\", Type = PhpArray.PhpTypeName)]\r\n#if !SILVERLIGHT\r\n\t[DebuggerTypeProxy(typeof(PhpArrayDebugView))]\r\n#endif\r\n\tpublic class PhpArray : PhpHashtable, ICloneable, IPhpVariable, IPhpEnumerable, IPhpObjectGraphNode\r\n    {\r\n        #region Fields, Properties, Constants\r\n\r\n        /// <summary>\r\n        /// Used in all PHP functions determining the type name. (var_dump, ...)\r\n        /// </summary>\r\n\t\tpublic const string PhpTypeName = \"array\";\r\n\r\n        /// <summary>\r\n        /// Used in print_r function.\r\n        /// </summary>\r\n        public const string PrintablePhpTypeName = \"Array\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Representation of \"array\" string in a form of bytes.\r\n\t\t/// </summary>\r\n\t\tprivate static readonly PhpBytes/*!*/toBytes =\r\n\t\t\tnew PhpBytes(new byte[] { (byte)'a', (byte)'r', (byte)'r', (byte)'a', (byte)'y' });\r\n\r\n        /// <summary>\r\n\t\t/// If this flag is <B>true</B> the array will be copied inplace by the immediate <see cref=\"Copy\"/> call.\r\n\t\t/// </summary>\r\n        [Emitted]\r\n        public bool InplaceCopyOnReturn { get { return this.table.InplaceCopyOnReturn; } set { this.table.InplaceCopyOnReturn = value; } }\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Intrinsic enumerator associated with the array. Initialized lazily.\r\n\t\t/// </summary>\r\n        protected OrderedDictionary.Enumerator intrinsicEnumerator;\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpArray\"/> with specified capacities for integer and string keys respectively.\r\n\t\t/// </summary>\r\n\t\tpublic PhpArray() : base() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpArray\"/> with specified capacities for integer and string keys respectively.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"capacity\"></param>\r\n\t\tpublic PhpArray(int capacity) : base(capacity) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpArray\"/> with specified capacities for integer and string keys respectively.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"intCapacity\"></param>\r\n\t\t/// <param name=\"stringCapacity\"></param>\r\n\t\tpublic PhpArray(int intCapacity, int stringCapacity) : base(intCapacity + stringCapacity) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpArray\"/> initialized with all values from <see cref=\"System.Array\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\"></param>\r\n\t\tpublic PhpArray(Array values) : base(values) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpArray\"/> initialized with a portion of <see cref=\"System.Array\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\"></param>\r\n\t\t/// <param name=\"index\"></param>\r\n\t\t/// <param name=\"length\"></param>\r\n\t\tpublic PhpArray(Array values, int index, int length) : base(values, index, length) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the <see cref=\"PhpArray\"/> class filled by values from specified array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\">An array of values to be added to the table.</param>\r\n\t\t/// <param name=\"start\">An index of the first item from <paramref name=\"values\"/> to add.</param>\r\n\t\t/// <param name=\"length\">A number of items to add.</param>\r\n\t\t/// <param name=\"value\">A value to be filtered.</param>\r\n\t\t/// <param name=\"doFilter\">Wheter to add all items but <paramref name=\"value\"/> (<b>true</b>) or \r\n\t\t/// all items with the value <paramref name=\"value\"/> (<b>false</b>).</param>\r\n\t\tpublic PhpArray(int[] values, int start, int length, int value, bool doFilter)\r\n\t\t\t: base(values, start, length, value, doFilter) { }\r\n\r\n\t\t/// <summary>\r\n        /// Creates a new instance of <see cref=\"PhpArray\"/> filled by data from an enumerator.\r\n        /// </summary>\r\n        /// <param name=\"data\">The enumerator containing values added to the new instance.</param>\r\n        public PhpArray(IEnumerable data)\r\n            : base((data is ICollection) ? ((ICollection)data).Count : 0)\r\n        {\r\n            if (data != null)\r\n            {\r\n                foreach (object value in data)\r\n                    this.AddToEnd(value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copy constructor. Creates <see cref=\"PhpArray\"/> that shares internal data table with another <see cref=\"PhpArray\"/>.\r\n        /// </summary>\r\n        /// <param name=\"array\">Table to be shared.</param>\r\n        /// <param name=\"preserveMaxInt\">True to copy the <see cref=\"PhpHashtable.MaxIntegerKey\"/> from <paramref name=\"array\"/>.\r\n        /// Otherwise the value will be recomputed when needed. See http://phalanger.codeplex.com/workitem/31484 for more details.</param>\r\n        public PhpArray(PhpArray/*!*/array, bool preserveMaxInt)\r\n            : base(array, preserveMaxInt)\r\n        {\r\n\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"PhpArray\"/> filled by given values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"values\">Values to be added to the new instance. \r\n\t\t/// Keys will correspond order of values in the array.</param>\r\n\t\tpublic static PhpArray New(params object[] values)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(values.Length, 0);\r\n\t\t\tforeach (object value in values)\r\n\t\t\t\tresult.Add(value);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of <see cref=\"PhpArray\"/> filled by given entries.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keysValues\">Keys and values (alternating) or values only.</param>\r\n\t\t/// <remarks>If the length of <paramref name=\"keysValues\"/> is odd then its last item is added without a key.</remarks>\r\n\t\tpublic static PhpArray Keyed(params object[] keysValues)\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray();\r\n\t\t\tint length = keysValues.Length;\r\n\t\t\tint remainder = length % 2;\r\n\r\n\t\t\tfor (int i = 0; i < length - remainder; i += 2)\r\n\t\t\t\tresult.Add(keysValues[i], keysValues[i + 1]);\r\n\r\n\t\t\tif (remainder > 0)\r\n\t\t\t\tresult.Add(keysValues[length - 1]);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Cast given <paramref name=\"arrayobj\"/> to <see cref=\"PhpArray\"/>. Depends on current implementation of <see cref=\"PhpArray\"/>.\r\n        /// </summary>\r\n        /// <param name=\"arrayobj\"><see cref=\"Object\"/> to be casted to <see cref=\"PhpArray\"/>.</param>\r\n        /// <returns>Casted object or <c>null</c>.</returns>\r\n        public static PhpArray AsPhpArray(object arrayobj)\r\n        {\r\n            return arrayobj as PhpArray;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints an array in a human readable form.\r\n\t\t/// </summary>\r\n\t\tpublic void Print(TextWriter output)\r\n\t\t{\r\n\t\t\tint len = output.NewLine.Length;\r\n\t\t\tint count = this.Count;\r\n\r\n\t\t\t// prevents recursion:\r\n\t\t\tif (this.Visited)\r\n\t\t\t{\r\n                output.WriteLine(PrintablePhpTypeName);\r\n                output.Write(\" *RECURSION*\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Visited = true;\r\n\r\n\t\t\t\t// handles an empty array:\r\n                //if (count == 0)\r\n                //{\r\n                //    output.Write(PhpTypeName);\r\n                //    output.Write(\" [empty]\");\r\n                //}\r\n                //else\r\n\t\t\t\t{\r\n                    output.WriteLine(PrintablePhpTypeName);\r\n\r\n                    //PhpVariable.PrintIndentationLevel += 1;\r\n\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\toutput.WriteLine('(');\r\n\r\n                    PhpVariable.PrintIndentationLevel += 2;\r\n\r\n\t\t\t\t\t// iterates through array items and prints them:\r\n\t\t\t\t\t//IDictionaryEnumerator iterator = this.GetEnumerator();\r\n\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in this)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n                        PhpVariable.PrintIndentationLevel += 2;\r\n\r\n\t\t\t\t\t\t// prints a key:\r\n\t\t\t\t\t\toutput.Write(\"[{0}] => \", entry.Key.ToString());\r\n\r\n\t\t\t\t\t\t// prints a value:\r\n\t\t\t\t\t\tPhpVariable.Print(output, entry.Value);\r\n                        output.WriteLine();\r\n                        PhpVariable.PrintIndentationLevel -= 2;\r\n\t\t\t\t\t}\r\n\r\n                    PhpVariable.PrintIndentationLevel -= 2;\r\n\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\toutput.Write(')');\r\n                    //PhpVariable.PrintIndentationLevel -= 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// prevents recursion - marks the array as visited:\r\n\t\t\t\tthis.Visited = false;\r\n\r\n                output.WriteLine();\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints an array along with item types in human readable form. \r\n\t\t/// </summary>\r\n\t\tpublic void Dump(TextWriter output)\r\n\t\t{\r\n\t\t\tint len = output.NewLine.Length;\r\n\t\t\tint count = this.Count;\r\n\r\n\t\t\t// prevents recursion:\r\n\t\t\tif (this.Visited)\r\n\t\t\t{\r\n                output.Write(PhpTypeName);\r\n                output.Write(\"({0}) *RECURSION*\", count);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Visited = true;\r\n\r\n\t\t\t\t// handles an empty array:\r\n                //if (count == 0)\r\n                //{\r\n                //    output.Write(PhpTypeName);\r\n                //    output.Write(\"(0) [empty]\");\r\n                //}\r\n                //else\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(PhpTypeName);\r\n\t\t\t\t\toutput.WriteLine(\"({0}) {{\", count);\r\n\t\t\t\t\t//PhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t//output.WriteLine('{');\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentationLevel++;\r\n\r\n\t\t\t\t\t// iterates through array items and dumps them:\r\n\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in this)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\r\n\t\t\t\t\t\t// prints key discriminating string and integer ones by quotes:\r\n\t\t\t\t\t\tif (entry.Key.IsString)\r\n\t\t\t\t\t\t\toutput.WriteLine(\"[\\\"{0}\\\"]=>\", entry.Key.String);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\toutput.WriteLine(\"[{0}]=>\", entry.Key.Integer);\r\n\r\n\t\t\t\t\t\t// marks a reference by an ampersand:\r\n                        PhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t\t\r\n                        // dumps a value:\r\n                        PhpVariable.Dump(output, entry.Value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentationLevel--;\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\toutput.Write('}');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.Visited = false;\r\n\t\t\t}\r\n\t\t\toutput.WriteLine();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints an array in form of declaration in PHP. \r\n\t\t/// </summary>\r\n\t\tpublic void Export(TextWriter output)\r\n\t\t{\r\n\t\t\tint len = output.NewLine.Length;\r\n\t\t\tint count = this.Count;\r\n\r\n\t\t\t// prevents recursion:\r\n\t\t\tif (this.Visited)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(PhpTypeName);\r\n\t\t\t\toutput.Write(\"(/* recursion */)\", count);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Visited = true;\r\n\r\n\t\t\t\t// handles an empty array:\r\n\t\t\t\tif (count == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(PhpTypeName);\r\n\t\t\t\t\toutput.Write(\"()\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(PhpTypeName);\r\n\t\t\t\t\toutput.WriteLine(\" (\");\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentationLevel++;\r\n\r\n\t\t\t\t\t// iterates through array items and exports them:\r\n\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in this)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\r\n\t\t\t\t\t\t// key:\r\n                        if (entry.Key.IsInteger) output.Write(entry.Key.Integer);\r\n                        else output.Write(\"'{0}'\", StringUtils.AddCSlashes(entry.Key.ToString(), true, false));\r\n                        output.Write(\" => \");\r\n\r\n\t\t\t\t\t\t// marks a reference by a comment:\r\n\t\t\t\t\t\tif (entry.Value is PhpReference)\r\n\t\t\t\t\t\t\toutput.Write(\"/* reference */ \");\r\n\r\n\t\t\t\t\t\t// dumps a value:\r\n\t\t\t\t\t\tPhpVariable.Export(output, entry.Value);\r\n\r\n\t\t\t\t\t\t// prints commas after each item // note: (J) including the last one:\r\n\t\t\t\t\t\t/*if (--count > 0) */output.Write(',');\r\n\t\t\t\t\t\toutput.WriteLine();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentationLevel--;\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\toutput.Write(')');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// marks array as visited to prevent recursion:\r\n\t\t\t\tthis.Visited = false;\r\n\t\t\t}\r\n\r\n\t\t\t// the top of the recursion:\r\n\t\t\t//if (PhpVariable.PrintIndentationLevel == 0)\r\n\t\t\t//\toutput.WriteLine();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a Phalanger type code of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The PHP.NET type code.</returns>\r\n\t\tpublic PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.PhpArray;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to an integer value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The number of items in this instance.</returns>\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n\t\t\treturn Count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <c>0</c>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>0</c></returns>\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a double value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The number of items in this instance.</returns>\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn Count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a boolean value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the number of items in this instance is not zero.</returns>\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn Count != 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a <see cref=\"PhpBytes\"/> value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns \"array\" string converted to bytes.</returns>\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn toBytes;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts instance to a number of type <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doubleValue\">The number of items in this instance.</param>\r\n\t\t/// <param name=\"intValue\">The number of items in this instance.</param>\r\n\t\t/// <param name=\"longValue\">The number of items in this instance.</param>\r\n\t\t/// <returns><see cref=\"Convert.NumberInfo.Integer\"/>.</returns>\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\tdoubleValue = Count;\r\n\t\t\tintValue = Count;\r\n\t\t\tlongValue = Count;\r\n\t\t\treturn Convert.NumberInfo.Integer | Convert.NumberInfo.IsPhpArray;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a string value.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns \"array\" string.</returns>\r\n\t\tstring IPhpConvertible.ToString()\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Notice, CoreResources.GetString(\"array_to_string_conversion\"));\r\n            return PrintablePhpTypeName;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts this instance to a string value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"throwOnError\">Throw 'notice' when conversion fails?</param>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <returns>Returns \"array\" string.</returns>\r\n\t\tstring IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n\t\t\tif (throwOnError)\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, CoreResources.GetString(\"array_to_string_conversion\"));\r\n\t\t\tsuccess = false;\r\n            return PrintablePhpTypeName;\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn String.Format(\"array({0})\", this.Count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a shallow copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic override object Clone()\r\n\t\t{\r\n            return new PhpArray(this, true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic object DeepCopy()\r\n\t\t{\r\n            var clone = new PhpArray(this, true);\r\n            clone.EnsureWritable();\r\n            return clone;\r\n\t\t}\r\n\r\n\t\tpublic object Copy(CopyReason reason)\r\n\t\t{\r\n            if (reason == CopyReason.ReturnedByCopy && this.InplaceCopyOnReturn)\r\n\t\t\t{\r\n                this.table.InplaceCopyOnReturn = false; // copiesCount = 0\r\n                this.table.Share();                     // copiesCount = 1 => underlaying table is shared and its values will be copied lazily if necessary\r\n\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                // create lazy copied PhpArray,\r\n                // preserve MaxIntegerKey if array was not passed as an argument or within assignment expression:\r\n                return new PhpArray(this, (reason != CopyReason.PassedByCopy && reason != CopyReason.Assigned));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>Empty array is equal to the null reference.</para>\r\n\t\t/// <para>Non empty array is greater than the null reference.</para>\r\n\t\t/// <para>If <paramref name=\"obj\"/> is of type <see cref=\"bool\"/> then \r\n\t\t/// the comparison is performed between the boolean term \"the number of items in this instance is positive\" \r\n\t\t/// and <paramref name=\"obj\"/>.</para>\r\n\t\t/// <para>If <paramref name=\"obj\"/> is of type <see cref=\"PhpArray\"/> then the item counts are compared at first,\r\n\t\t/// the corresponding keys then and finally the corresponding values are compared. Values comparison \r\n\t\t/// is performed by specified <paramref name=\"comparer\"/> and can be recursive. Never-ending recursion is prevented.</para>\r\n\t\t/// </remarks>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj, IComparer comparer)\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\r\n\t\t\tif (obj == null) return Count;\r\n\t\t\tif (obj is bool) return (Count > 0 ? 2 : 1) - ((bool)obj ? 2 : 1);\r\n\r\n\t\t\tif ((array = obj as PhpArray) != null)\r\n\t\t\t{\r\n                // compare elements:\r\n\t\t\t\tbool incomparable;\r\n\t\t\t\tint result = CompareArrays(this, array, comparer, out incomparable);\r\n\t\t\t\tif (incomparable)\r\n\t\t\t\t{\r\n\t\t\t\t\t//PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_arrays_compared\"));\r\n                    throw new ArgumentException();  // according to the IComparable remarks\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two instances of <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer.</param>\r\n\t\t/// <param name=\"incomparable\">Whether arrays are incomparable \r\n\t\t/// (no difference is found before both arrays enters an infinite recursion). \r\n\t\t/// Returns zero then.</param>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tprivate static int CompareArrays(PhpArray x, PhpArray y, IComparer comparer, out bool incomparable)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tincomparable = false;\r\n\r\n            // if both operands point to the same internal dictionary:\r\n            if (object.ReferenceEquals(x.table, y.table))\r\n                return 0;\r\n\r\n            //\r\n\t\t\tobject child_x, child_y;\r\n\t\t\tPhpArray array_x, array_y;\r\n\t\t\tPhpArray sorted_x, sorted_y;\r\n\t\t\tIEnumerator<KeyValuePair<IntStringKey, object>> iter_x, iter_y;\r\n\r\n\t\t\t// if numbers of elements differs:\r\n\t\t\tint result = x.Count - y.Count;\r\n\t\t\tif (result != 0) return result;\r\n\r\n\t\t\t// comparing with the same instance:\r\n\t\t\tif (x == y) return 0;\r\n\r\n\t\t\t// marks arrays as visited (will be always restored to false value before return):\r\n\t\t\tx.Visited = true;\r\n\t\t\ty.Visited = true;\r\n\r\n\t\t\t// it will be more effective to implement OrderedHashtable.ToOrderedList method and use it here (in future version):\r\n\t\t\tsorted_x = (PhpArray)x.Clone();\r\n\t\t\tsorted_x.Sort(KeyComparer.ArrayKeys);\r\n\t\t\tsorted_y = (PhpArray)y.Clone();\r\n\t\t\tsorted_y.Sort(KeyComparer.ArrayKeys);\r\n\r\n\t\t\titer_x = sorted_x.GetEnumerator();\r\n\t\t\titer_y = sorted_y.GetEnumerator();\r\n\r\n\t\t\tresult = 0;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// compares corresponding elements (keys first values then):\r\n\t\t\t\twhile (iter_x.MoveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\titer_y.MoveNext();\r\n\r\n\t\t\t\t\t// compares keys:\r\n\t\t\t\t\tresult = iter_x.Current.Key.CompareTo(iter_y.Current.Key);\r\n\t\t\t\t\tif (result != 0) break;\r\n\r\n\t\t\t\t\t// dereferences childs if they are references:\r\n\t\t\t\t\tchild_x = PhpVariable.Dereference(iter_x.Current.Value);\r\n\t\t\t\t\tchild_y = PhpVariable.Dereference(iter_y.Current.Value);\r\n\r\n\t\t\t\t\t// compares values:\r\n\t\t\t\t\tif ((array_x = child_x as PhpArray) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((array_y = child_y as PhpArray) != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// at least one child has not been visited yet => continue with recursion:\r\n\t\t\t\t\t\t\tif (!array_x.Visited || !array_y.Visited)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tresult = CompareArrays(array_x, array_y, comparer, out incomparable);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tincomparable = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// infinity recursion has been detected:\r\n\t\t\t\t\t\t\tif (incomparable) break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// compares an array with a non-array:\r\n                            array_x.CompareTo(child_y, comparer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// compares unknown item with a non-array:\r\n\t\t\t\t\t\tresult = -comparer.Compare(child_y, child_x);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (result != 0) break;\r\n\t\t\t\t} // while\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tx.Visited = false;\r\n\t\t\t\ty.Visited = false;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Strict Comparison\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with another <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"array\">The array to be strictly compared.</param>\r\n\t\t/// <returns>Whether this instance strictly equals to <paramref name=\"array\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Arrays are strictly equal if all entries are strictly equal and in the same order in both arrays.\r\n\t\t/// Entries are strictly equal if keys are the same and values are strictly equal \r\n\t\t/// in the terms of operator <see cref=\"Operators.StrictEquality\"/>.\r\n\t\t/// </remarks>\r\n\t\tpublic bool StrictCompareEq(PhpArray array)\r\n\t\t{\r\n\t\t\tbool incomparable, result;\r\n\r\n            result = StrictCompareArrays(this, array, out incomparable);\r\n\t\t\tif (incomparable)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_arrays_compared\"));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two instances of <see cref=\"PhpArray\"/> for strict equality.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"incomparable\">Whether arrays are incomparable \r\n\t\t/// (no difference is found before both arrays enters an infinite recursion). \r\n\t\t/// Returns <B>true</B> then.</param>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tprivate static bool StrictCompareArrays(PhpArray x, PhpArray y, out bool incomparable)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tincomparable = false;\r\n\r\n            // if both operands point to the same internal dictionary:\r\n            if (object.ReferenceEquals(x.table, y.table))\r\n                return true;\r\n\r\n            //\r\n\t\t\tobject child_x, child_y;\r\n\t\t\tPhpArray array_x, array_y;\r\n\t\t\tPhpReference r;\r\n\t\t\tIEnumerator<KeyValuePair<IntStringKey, object>> iter_x, iter_y;\r\n\r\n\t\t\t// if numbers of elements differs:\r\n\t\t\tif (x.Count != y.Count) return false;\r\n\r\n\t\t\t// comparing with the same instance:\r\n\t\t\tif (x == y) return true;\r\n\r\n\t\t\titer_x = x.GetEnumerator();\r\n\t\t\titer_y = y.GetEnumerator();\r\n\r\n\t\t\t// marks arrays as visited (will be always restored to false value before return):\r\n\t\t\tx.Visited = true;\r\n\t\t\ty.Visited = true;\r\n\r\n\t\t\tbool result = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// compares corresponding elements (keys first values then):\r\n\t\t\t\twhile (iter_x.MoveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\titer_y.MoveNext();\r\n\r\n\t\t\t\t\t// compares keys:\r\n\t\t\t\t\tif (!iter_x.Current.Key.Equals(iter_y.Current.Key))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// dereferences x child if it is a reference:\r\n\t\t\t\t\tchild_x = iter_x.Current.Value;\r\n\t\t\t\t\tif ((r = child_x as PhpReference) != null) child_x = r.Value;\r\n\r\n\t\t\t\t\t// dereferences y child if it is a reference:\r\n\t\t\t\t\tchild_y = iter_y.Current.Value;\r\n\t\t\t\t\tif ((r = child_y as PhpReference) != null) child_y = r.Value;\r\n\r\n\t\t\t\t\t// compares values:\r\n\t\t\t\t\tif ((array_x = child_x as PhpArray) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((array_y = child_y as PhpArray) != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// at least one child has not been visited yet => continue with recursion:\r\n\t\t\t\t\t\t\tif (!array_x.Visited || !array_y.Visited)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tresult = StrictCompareArrays(array_x, array_y, out incomparable);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tincomparable = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// infinity recursion has been detected:\r\n\t\t\t\t\t\t\tif (incomparable) break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// an array with a non-array comparison:\r\n\t\t\t\t\t\t\tresult = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// compares unknown item with a non-array:\r\n\t\t\t\t\t\tresult = Operators.StrictEquality(child_x, child_y);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!result) break;\r\n\t\t\t\t} // while\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tx.Visited = false;\r\n\t\t\t\ty.Visited = false;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpVariable\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines emptiness of the <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether this instance contains no element.</returns>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\treturn Count == 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether <see cref=\"PhpArray\"/> is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>false</B></returns>\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a name of declaring type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n\t\tpublic string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpEnumerable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Intrinsic enumerator associated with the array. Initialized lazily when read for the first time.\r\n\t\t/// The enumerator points to the first item of the array immediately after the initialization if exists,\r\n\t\t/// otherwise it points to an invalid item and <see cref=\"IPhpEnumerator.AtEnd\"/> is <B>true</B>.\r\n\t\t/// </summary>\r\n\t\tpublic IPhpEnumerator/*!*/ IntrinsicEnumerator\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// initializes enumerator:\r\n\t\t\t\tif (intrinsicEnumerator == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tintrinsicEnumerator = this.GetPhpEnumerator();\r\n\t\t\t\t\tintrinsicEnumerator.MoveNext();\r\n\t\t\t\t}\r\n\t\t\t\treturn intrinsicEnumerator;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Restarts intrinsic enumerator - moves it to the first item.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If the intrinsic enumerator has never been used on this instance nothing happens.\r\n\t\t/// </remarks>\r\n\t\tpublic void RestartIntrinsicEnumerator()\r\n\t\t{\r\n\t\t\tif (intrinsicEnumerator != null)\r\n\t\t\t    intrinsicEnumerator.MoveFirst();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an enumerator used in foreach statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keyed\">Whether the foreach statement uses keys.</param>\r\n\t\t/// <param name=\"aliasedValues\">Whether the values returned by enumerator are assigned by reference.</param>\r\n\t\t/// <param name=\"caller\">Type <see cref=\"Reflection.DTypeDesc\"/> of the caller (ignored).</param>\r\n\t\t/// <returns>The dictionary enumerator.</returns>\r\n\t\t/// <remarks>Used for internal purposes only!</remarks>\r\n        public virtual IDictionaryEnumerator GetForeachEnumerator(bool keyed, bool aliasedValues, Reflection.DTypeDesc caller)\r\n        {\r\n            if (this.Count == 0)\r\n                return OrderedDictionary.EmptyEnumerator.SingletonInstance;\r\n\r\n            if (aliasedValues)\r\n                return new ForeachEnumeratorAliased(this, keyed);\r\n            else\r\n                return new ForeachEnumeratorValues(this/*, keyed*/);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region Nested class: ForeachEnumeratorValues\r\n\r\n        /// <summary>\r\n\t\t/// An enumerator used (only) for foreach statement.\r\n\t\t/// </summary>\r\n\t\tprivate sealed class ForeachEnumeratorValues : IDictionaryEnumerator, IDisposable\r\n\t\t{\r\n\r\n            /// <summary>\r\n            /// The internal enumerator used to iterate through the read only copy of array.\r\n            /// </summary>\r\n            private readonly OrderedDictionary.Enumerator/*!*/enumerator;\r\n\r\n            /// <summary>\r\n            /// Wheter the internal enumerator was disposed.\r\n            /// </summary>\r\n            private bool disposed = false;\r\n \r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new instance of the enumerator.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"array\">The array to iterate over.</param>\r\n\t\t\tpublic ForeachEnumeratorValues(PhpArray/*!*/ array)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(array != null);\r\n\r\n                // share the table to iterate through readonly array,\r\n                // get the enumerator, have to be disposed at the end of enumeration, otherwise deep copy will be performed probably\r\n\r\n                // note (J): this will not result in registering the enumerator in the PhpArray object, not needed, faster\r\n                this.enumerator = (OrderedDictionary.Enumerator)array.table.Share().GetEnumerator();\r\n\t\t\t}\r\n\r\n\t\t\t#region IDictionaryEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets a current key.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Key\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// deep copy is not needed because a key is immutable,\r\n                    // we can access .current directly, the underlaying table is read only:\r\n                    return enumerator.CurrentKey.Object;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Gets a current value. Returns either a deep copy of a value if values are not aliased or \r\n\t\t\t/// a <see cref=\"PhpReference\"/> otherwise. In the latter case, the reference item is added to the array\r\n\t\t\t/// if there is not one.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Value\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// a deep copy of value stored in the original array should be returned,\r\n                    // we can access .current directly, the underlaying table is read only:\r\n                    return PhpVariable.Copy(PhpVariable.Dereference(enumerator.CurrentValue), CopyReason.Assigned);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            public DictionaryEntry Entry { get { throw new NotSupportedException(); } }\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Resets enumerator.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Moves to the next entry.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns>Whether we can continue.</returns>\r\n\t\t\tpublic bool MoveNext()\r\n\t\t\t{\r\n                // move the internal enumerator forward\r\n                if (!enumerator.MoveNext())\r\n                {\r\n                    // dispose on the end of enumeration\r\n                    Dispose();\r\n\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Not supported.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new NotSupportedException();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n            #region IDisposable Members\r\n\r\n            /// <summary>\r\n            /// Unshare the underlaying table and dispose enumerator resources if any.\r\n            /// </summary>\r\n            /// <remarks>If this method is not called at least once, the underlaying table may be lazily copied later in some cases.</remarks>\r\n            public void Dispose()\r\n            {\r\n                if (!disposed)\r\n                {\r\n                    disposed = true;                    // do not dispose again\r\n                    enumerator.table.Unshare();         // return back the table so it can be writable again in most cases\r\n                    enumerator.Dispose();               // disable the enumerator, free resources if any\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region Nested class: ForeachEnumeratorAliased\r\n\r\n        /// <summary>\r\n        /// An enumerator used (only) for aliased foreach statement.\r\n        /// </summary>\r\n        private sealed class ForeachEnumeratorAliased : IDictionaryEnumerator, IDisposable\r\n        {\r\n            /// <summary>\r\n            /// Array to get values from.\r\n            /// </summary>\r\n            private readonly OrderedDictionary.Enumerator/*!*/enumerator;\r\n            private readonly PhpArray/*!*/array;\r\n\r\n            /// <summary>\r\n            /// Remember the last key (right after <see cref=\"MoveNext\"/>) to detect whether current entry has been deleted during foreach body.\r\n            /// </summary>\r\n            private IntStringKey currentKey;\r\n\r\n            /// <summary>\r\n            /// Creates a new instance of the enumerator.\r\n            /// </summary>\r\n            /// <param name=\"array\">The array to iterate over.</param>\r\n            /// <param name=\"keyed\">Whether keys are interesting.</param>\r\n            public ForeachEnumeratorAliased(PhpArray/*!*/ array, bool keyed)\r\n            {\r\n                Debug.Assert(array != null);\r\n\r\n                this.array = array;\r\n                this.enumerator = new OrderedDictionary.Enumerator(array, true);\r\n\r\n                // ForeachEnumeratorAliased can leave an undisposed enumerator registered in the array object\r\n                // (only in case a break; was called inside an aliased foreach loop).\r\n            }\r\n\r\n            #region IDictionaryEnumerator Members\r\n\r\n            /// <summary>\r\n            /// Gets a current key.\r\n            /// </summary>\r\n            public object Key\r\n            {\r\n                get\r\n                {\r\n                    // deep copy is not needed because a key is immutable:\r\n                    return currentKey.Object;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets a current value. Returns either a deep copy of a value if values are not aliased or \r\n            /// a <see cref=\"PhpReference\"/> otherwise. In the latter case, the reference item is added to the array\r\n            /// if there is not one.\r\n            /// </summary>\r\n            public object Value\r\n            {\r\n                get\r\n                {\r\n                    var key = enumerator.CurrentKey;\r\n                    return array.table._ensure_item_ref(ref key, array);\r\n                }\r\n            }\r\n\r\n            public DictionaryEntry Entry { get { throw new NotSupportedException(); } }\r\n\r\n            #endregion\r\n\r\n            #region IEnumerator Members\r\n\r\n            /// <summary>\r\n            /// Resets enumerator.\r\n            /// </summary>\r\n            public void Reset()\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Moves to the next entry.\r\n            /// </summary>\r\n            /// <returns>Whether we can continue.</returns>\r\n            public bool MoveNext()\r\n            {\r\n                bool hasMore;\r\n\r\n                if (enumerator.CurrentKey.Equals(ref currentKey))\r\n                {\r\n                    // advance to the next position\r\n                    hasMore = enumerator.MoveNext();\r\n                }\r\n                else\r\n                {\r\n                    hasMore = !enumerator.AtEnd;   // user deleted current entry and enumerator was already advanced to the next position\r\n                }\r\n\r\n                this.currentKey = enumerator.CurrentKey;\r\n\r\n                if (!hasMore)\r\n                    this.Dispose(); // dispose underlaying Enumerator so it can be unregistered from active enumerators list\r\n                \r\n                return hasMore;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Not supported.\r\n            /// </summary>\r\n            public object Current\r\n            {\r\n                get\r\n                {\r\n                    throw new NotSupportedException();\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IDisposable Members\r\n\r\n            private bool disposed = false;\r\n\r\n            public void Dispose()\r\n            {\r\n                if (!disposed)\r\n                {\r\n                    disposed = true;\r\n                    enumerator.Dispose();\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t#region IPhpObjectGraphNode Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <returns>The <paramref name=\"callback\"/>'s result.</returns>\r\n\t\tpublic void Walk(PHP.Core.PhpWalkCallback callback, ScriptContext context)\r\n\t\t{\r\n\t\t\t// prevents recursion:\r\n\t\t\tif (!this.Visited)\r\n\t\t\t{\r\n\t\t\t\tthis.Visited = true;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// iterates through array items and invokes the callback:\r\n\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in this)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIPhpObjectGraphNode node = entry.Value as IPhpObjectGraphNode;\r\n\t\t\t\t\t\tif (node != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tobject res = callback(node, context);\r\n\t\t\t\t\t\t\tif (res != entry.Value) this[entry.Key] = res;\r\n\r\n\t\t\t\t\t\t\tif ((node = res as IPhpObjectGraphNode) != null) node.Walk(callback, context);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Visited = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t\t\r\n\t\t#region Operators\r\n\r\n\t\t#region GetItem\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an item from an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">The key of arbitrary PHP.NET type.</param>\r\n\t\t/// <param name=\"quiet\">Disables reporting of notices and warnings.</param>\r\n\t\t/// <returns>The item.</returns>\r\n\t\t/// <exception cref=\"PhpException\"><paramref name=\"key\"/> is not a legal key (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The <paramref name=\"key\"/> is not contained in <see cref=\"PhpArray\"/> (Notice).</exception>\r\n\t\t[Emitted]\r\n\t\tpublic object GetArrayItem(object key, bool quiet)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(key is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    object value;\r\n                    if (this.table.TryGetValue(array_key, out value))\r\n                        return PhpVariable.Dereference(value);\r\n                }\r\n                else\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }                \r\n            }\r\n\r\n            return GetArrayItemOverride(key, quiet);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic object GetArrayItem(int key, bool quiet)\r\n\t\t{\r\n            //if (this.GetType() == typeof(PhpArray))   // otherwise just this.table.TryGetValue returns false\r\n            {\r\n                object value;\r\n                if (this.table.TryGetValue(key, out value))\r\n                    return PhpVariable.Dereference(value);\r\n            }\r\n            \r\n            return GetArrayItemOverride(key, quiet);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Gets item of the array associated with a specified key of string type (a conversion to integer key may take place).\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic object GetArrayItem(string/*!*/ key, bool quiet)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null);\r\n\r\n            //if (this.GetType() == typeof(PhpArray))   // otherwise just this.table.TryGetValue returns false\r\n            {\r\n                object value;\r\n                if (this.table.TryGetValue(Core.Convert.StringToArrayKey(key), out value))\r\n                    return PhpVariable.Dereference(value);\r\n            }\r\n            \r\n            return GetArrayItemOverride(key, quiet);\r\n\t\t}\r\n\r\n        [Emitted]\r\n        public object GetArrayItemExact(string/*!*/ key, bool quiet, int hashcode)\r\n        {\r\n            Debug.Assert(key != null);\r\n\r\n            //if (this.GetType() == typeof(PhpArray))   // otherwise just this.table.TryGetValue returns false\r\n            {\r\n                object value;\r\n                if (this.table.TryGetValue(new IntStringKey(key, hashcode), out value))\r\n                    return PhpVariable.Dereference(value);\r\n            }\r\n            \r\n            return GetArrayItemOverride(key, quiet);\r\n        }\r\n\r\n        #region protected virtual: GetArrayItemOverride\r\n\r\n        /// <summary>\r\n        /// Handles undefined offset when getting a value from the array or derivet PhpArray types. Can be overriden.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key.</param>\r\n        /// <param name=\"quiet\">Whether a notice should not be displayed.</param>\r\n        /// <returns><c>null</c> reference or an actual value in overriden class.</returns>\r\n        protected virtual object GetArrayItemOverride(object key, bool quiet)\r\n        {\r\n            if (!quiet)\r\n                PhpException.UndefinedOffset(key);\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region GetItemRef\r\n\r\n        /// <summary>\r\n\t\t/// Retrieves a reference on new item of the array.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference/*!*/ GetArrayItemRef()\r\n\t\t{\r\n            PhpReference result;\r\n            if (this.GetType() == typeof(PhpArray))\r\n                Add(result = new PhpReference());\r\n            else\r\n                result = GetArrayItemRefOverride();\r\n            \r\n            return result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Retrieves a reference on an item of the array.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the item.</param>\r\n        /// <returns><see cref=\"PhpReference\"/> of the item.</returns>\r\n        /// <exception cref=\"PhpException\"><paramref name=\"key\"/> is not a legal key (Warning).</exception>\r\n        [Emitted]\r\n        public PhpReference/*!*/ GetArrayItemRef(object key)\r\n        {\r\n            Debug.Assert(!(key is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (!Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return new PhpReference();\r\n                }\r\n\r\n                return GetArrayItemRef(array_key);\r\n            }\r\n            else\r\n            {\r\n                return GetArrayItemRefOverride(key);\r\n            }\r\n        }\r\n\r\n        [Emitted]\r\n\t\tpublic PhpReference/*!*/ GetArrayItemRef(int key)\r\n\t\t{\r\n            if (this.GetType() == typeof(PhpArray))\r\n                return GetArrayItemRef(new IntStringKey(key));\r\n            else\r\n                return GetArrayItemRefOverride(key);\r\n\t\t}\r\n\r\n        [Emitted]\r\n\t\tpublic PhpReference/*!*/ GetArrayItemRef(string/*!*/ key)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null);\r\n\t\t\t\r\n\t\t\t// the key cannot be converted by compiler using StringToArrayKey as the compiler doesn't know\r\n\t\t\t// whether the array is not actually ArrayAccess unless it performs som type analysis\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n                return GetArrayItemRef(Convert.StringToArrayKey(key));\r\n            else\r\n                return GetArrayItemRefOverride(key);\t\t\t\r\n\t\t}\r\n\r\n        private PhpReference/*!*/ GetArrayItemRef(IntStringKey key)\r\n\t\t{\r\n            return this.table._ensure_item_ref(ref key, this);\r\n\t\t}\r\n\r\n        #region protected virtual: GetArrayItemRefOverride\r\n\r\n        protected virtual PhpReference/*!*/GetArrayItemRefOverride()\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual PhpReference/*!*/ GetArrayItemRefOverride(object key)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual PhpReference/*!*/ GetArrayItemRefOverride(int key)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual PhpReference/*!*/ GetArrayItemRefOverride(string/*!*/ key)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region SetArrayItem\r\n\r\n        /// <summary>\r\n\t\t/// Sets a value to an item of a <see cref=\"PhpArray\"/>. Implements the last keyed [] operator in the chain.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The value to be set to a new item (value or <see cref=\"PhpReference\"/>).</param>\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItem(object value)\r\n\t\t{\r\n            if (this.GetType() == typeof(PhpArray))\r\n                this.Add(value);\r\n            else\r\n                this.SetArrayItemOverride(value);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItem(object key, object value)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(key is PhpReference) && !(value is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (Convert.ObjectToArrayKey(key, out array_key))\r\n                    SetArrayItem(array_key, value);\r\n                else\r\n                    PhpException.IllegalOffsetType();\r\n            }\r\n            else\r\n            {\r\n                SetArrayItemOverride(key, value);\r\n            }\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItem(int key, object value)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(value is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                this.EnsureWritable();\r\n                this.table._add_or_update_preserve_ref(this, key, value);\r\n            }\r\n            else\r\n                SetArrayItemOverride(key, value);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItem(string/*!*/ key, object value)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null && !(value is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n                // the key cannot be converted by compiler using StringToArrayKey as the compiler doesn't know\r\n                // whether the array is not actually ArrayAccess unless it performs som type analysis\r\n                SetArrayItem(Convert.StringToArrayKey(key), value);\r\n            else\r\n                SetArrayItemOverride(key, value);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItemExact(string/*!*/ key, object value, int hashcode)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null && !(value is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n                SetArrayItem(new IntStringKey(key, hashcode), value);\r\n            else\r\n                SetArrayItemOverride(key, value);\r\n\t\t}\r\n\r\n\t\tprivate void SetArrayItem(IntStringKey key, object value)\r\n\t\t{\r\n            Debug.Assert(this.GetType() == typeof(PhpArray));\r\n\r\n            this.EnsureWritable();\r\n            this.table._add_or_update_preserve_ref(this, ref key, value);\r\n\t\t}\r\n\r\n        #region protected virtual: SetArrayItemOverride\r\n\r\n        protected virtual void SetArrayItemOverride(object value)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual void SetArrayItemOverride(object key, object value)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n        protected virtual void SetArrayItemOverride(int key, object value)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n        protected virtual void SetArrayItemOverride(string key, object value)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region SetArrayItemRef\r\n\r\n        [Emitted]\r\n\t\tpublic void SetArrayItemRef(object key, PhpReference value)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(key is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (Convert.ObjectToArrayKey(key, out array_key))\r\n                    this[array_key] = value;\r\n                else\r\n                    PhpException.IllegalOffsetType();                \r\n            }\r\n            else\r\n                SetArrayItemRefOverride(key, value);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItemRef(int key, PhpReference value)\r\n\t\t{\r\n            if (this.GetType() == typeof(PhpArray))\r\n                this[key] = value;\r\n            else\r\n                SetArrayItemRefOverride(key, value);\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic void SetArrayItemRef(string/*!*/ key, PhpReference value)\r\n\t\t{\r\n\t\t\tDebug.Assert(key != null);\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n                // the key cannot be converted by compiler using StringToArrayKey as the compiler doesn't know\r\n                // whether the array is not actually ArrayAccess unless it performs som type analysis\r\n                this[Convert.StringToArrayKey(key)] = value;\r\n            else\r\n                SetArrayItemRefOverride(key, value);\r\n\t\t}\r\n\r\n        #region protected virtual: SetArrayItemRefOverride\r\n\r\n        protected virtual void SetArrayItemRefOverride(object key, PhpReference value)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Ensure\r\n\r\n        /// <summary>\r\n\t\t/// Ensures a specified array item is an instance of <see cref=\"PhpArray\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>A new instance of <see cref=\"PhpArray\"/> is assigned to the item if it is empty in a meaning of <see cref=\"Operators.IsEmptyForEnsure\"/>.</remarks>\r\n\t\t/// <returns>The item associated with a key after it might be replaced by a new instance of <see cref=\"PhpArray\"/>.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic PhpArray EnsureItemIsArray()\r\n\t\t{\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                PhpArray result;\r\n                Add(result = new PhpArray());\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                return EnsureItemIsArrayOverride();\r\n            }\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ensures specified array item is an instance of <see cref=\"DObject\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The <see cref=\"ScriptContext\"/> in which potential new object will be created.</param>\r\n\t\t/// <remarks>A new instance of <see cref=\"PHP.Library.stdClass\"/> is assigned to the item if it is empty in a meaning of <see cref=\"Operators.IsEmptyForEnsure\"/>.</remarks>\r\n\t\t/// <returns>The item associated with a key after the potential replacement by a new instance of <see cref=\"PHP.Library.stdClass\"/>.</returns>\r\n\t\t[Emitted]\r\n\t\tpublic DObject EnsureItemIsObject(ScriptContext/*!*/ context)\r\n\t\t{\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                PHP.Library.stdClass result;\r\n                Add(result = PHP.Library.stdClass.CreateDefaultObject(context));\r\n                return result;\r\n            }\r\n            else\r\n            {\r\n                return EnsureItemIsObjectOverride(context);\r\n            }\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic PhpArray EnsureItemIsArray(object key)\r\n\t\t{\r\n            Debug.Assert(!(key is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (!Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }\r\n\r\n                // TODO: set writable only if item is not reference\r\n                this.EnsureWritable();   // if we are not writing here, we can in some child array, MUST be set as writable now\r\n\r\n                //OrderedHashtable<IntStringKey>.Element element = GetElement(array_key);\r\n\r\n                object item = this.table[array_key];// = (element != null) ? element.Value : null;\r\n\r\n                // dereferences item if it is a reference:\r\n                PhpReference ref_item = item as PhpReference;\r\n                if (ref_item != null) item = ref_item.Value;\r\n\r\n                // convert obj to array or wrap obj into new array if possible:\r\n                object new_item;\r\n                var wrappedarray = Operators.EnsureObjectIsArray(item, out new_item);\r\n                if (wrappedarray != null)\r\n                {\r\n                    if (new_item != null)\r\n                    {\r\n                        // if there was a reference then its value is replaced, \r\n                        // the value of element is replaced otherwise:\r\n                        if (ref_item != null) ref_item.Value = new_item;\r\n                        else this[array_key] = new_item;\r\n                    }\r\n                    return wrappedarray;\r\n                }\r\n\r\n                // error - the item is a scalar, a DObject:\r\n                PhpException.VariableMisusedAsArray(item, false);\r\n                return null;\r\n\r\n            }\r\n            else\r\n            {\r\n                return EnsureItemIsArrayOverride(key);\r\n            }\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic DObject EnsureItemIsObject(object key, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(key is PhpReference));\r\n\r\n            if (this.GetType() == typeof(PhpArray))\r\n            {\r\n                IntStringKey array_key;\r\n                if (!Convert.ObjectToArrayKey(key, out array_key))\r\n                {\r\n                    PhpException.IllegalOffsetType();\r\n                    return null;\r\n                }\r\n\r\n                // TODO: set writable only if item is not reference\r\n                this.EnsureWritable();   // if we are not writing here, we can in some child array, MUST be set as writable now\r\n\r\n                //OrderedHashtable<IntStringKey>.Element element = GetElement(array_key);\r\n                object item = table[array_key]; //(element != null) ? element.Value : null;\r\n\r\n                // dereferences item if it is a reference:\r\n                PhpReference ref_item = item as PhpReference;\r\n                if (ref_item != null) item = ref_item.Value;\r\n\r\n                // the item is already an object:\r\n                DObject object_item = item as DObject;\r\n                if (object_item != null) return object_item;\r\n\r\n                // an item is empty => creates a new array:\r\n                if (Operators.IsEmptyForEnsure(item))\r\n                {\r\n                    object_item = PHP.Library.stdClass.CreateDefaultObject(context);\r\n\r\n                    // if there was a reference then its value is replaced, the item of array is replaced otherwise:\r\n                    if (ref_item != null)\r\n                        ref_item.Value = object_item;\r\n                    else\r\n                        this[array_key] = object_item;\r\n\r\n                    return object_item;\r\n                }\r\n\r\n                // error - the item is a scalar, a PhpArray or a non-empty string:\r\n                PhpException.VariableMisusedAsObject(item, false);\r\n                return null;\r\n            }\r\n            else\r\n            {\r\n                return EnsureItemIsObjectOverride(key, context);\r\n            }\r\n        }\r\n\r\n        #region protected virtual: EnsureItemIs*Override\r\n\r\n        protected virtual PhpArray EnsureItemIsArrayOverride()\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual DObject EnsureItemIsObjectOverride(ScriptContext/*!*/ context)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual PhpArray EnsureItemIsArrayOverride(object key)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        protected virtual DObject EnsureItemIsObjectOverride(object key, ScriptContext/*!*/ context)\r\n        {\r\n            Debug.Fail(\"This method has to be overriden!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#region Debug View\r\n\r\n\t[DebuggerDisplay(\"Count = {array.Count}\", Type = \"array\")]\r\n\tinternal sealed class PhpArrayDebugView\r\n\t{\r\n\t\tprivate readonly PhpArray array;\r\n\r\n\t\tpublic PhpArrayDebugView(PhpArray/*!*/ array)\r\n\t\t{\r\n\t\t\tif (array == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"array\");\r\n\r\n\t\t\tthis.array = array;\r\n\t\t}\r\n\r\n\t\t[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n\t\tpublic PhpHashEntryDebugView[] Items\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpHashEntryDebugView[] result = new PhpHashEntryDebugView[array.Count];\r\n\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in array)\r\n\t\t\t\t\tresult[i++] = new PhpHashEntryDebugView(entry.Key, entry.Value);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t[DebuggerDisplay(\"{Value}\", Name = \"{Key}\", Type = \"{KeyType,nq} => {ValueType,nq}\")]\r\n\tinternal sealed class PhpHashEntryDebugView\r\n\t{\r\n\t\t[DebuggerDisplay(\"{Key}\", Name = \"Key\", Type = \"{KeyType,nq}\")]\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public object Key { get { return key.Object; } }\r\n\r\n\t\t[DebuggerDisplay(\"{this.value}\", Name = \"Value\", Type = \"{ValueType,nq}\")]\r\n        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n        public object Value { get { return value; } }\r\n\r\n\t\t[DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tprivate IntStringKey key;\r\n\r\n\t\t[DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tprivate object value;\r\n\r\n\t\t[DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tpublic string KeyType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn key.IsInteger ? PhpVariable.TypeNameInteger : PhpVariable.TypeNameString;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tpublic string ValueType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn PhpVariable.GetTypeName(value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic PhpHashEntryDebugView(IntStringKey key, object value)\r\n\t\t{\r\n\t\t\tthis.key = key;\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core/PhpBytes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents binary data in PHP language.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\t[DebuggerNonUserCode]\r\n\t[DebuggerTypeProxy(typeof(DebuggerProxy))]\r\n\t[DebuggerDisplay(\"\\\"{this.DebugView(),nq}\\\"\", Type = \"binary({Length})\")]\r\n\tpublic sealed class PhpBytes : IPhpVariable, IPhpObjectGraphNode, ICloneable         // GENERICS: IEquatable<PhpBytes>\r\n\t{\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tpublic const string PhpTypeName = PhpVariable.TypeNameString;\r\n\r\n        #region DataContainer\r\n\r\n        /// <summary>\r\n        /// Internal data structure holds the byte array.\r\n        /// The data can be marked as read only. This tells the runtime if the internal data structure can be reused to avoid of copying.\r\n        /// </summary>\r\n        [Serializable]\r\n        private sealed class DataContainer\r\n        {\r\n            #region Fields\r\n\r\n            /// <summary>\r\n            /// True iff the internal data structure is shared and should not be modified.\r\n            /// </summary>\r\n            public bool IsShared\r\n            {\r\n                get { return _refCount > 1; }\r\n            }\r\n            private int _refCount;\r\n\r\n            /// <summary>\r\n            /// Internal byte array representing the data.\r\n            /// </summary>\r\n            public byte[]/*!*/Data { get { return _data; } }\r\n            private readonly byte[]/*!*/_data;\r\n\r\n            /// <summary>\r\n            /// The length of internal byte array.\r\n            /// </summary>\r\n            public int Length { get { return _data.Length; } }\r\n\r\n            #endregion\r\n\r\n            #region Constructors\r\n\r\n            /// <summary>\r\n            /// Initialize the instance of <see cref=\"Data\"/> with byte array. The data are not marked as <see cref=\"IsShared\"/>.\r\n            /// </summary>\r\n            /// <param name=\"data\">The byte array reference used internally.</param>\r\n            public DataContainer(params byte[]/*!*/ data)\r\n                : this(1, data)\r\n            {\r\n            }\r\n\r\n            /// <summary>\r\n            /// Initialize the instance of <see cref=\"Data\"/> with byte array.\r\n            /// </summary>\r\n            /// <param name=\"refCount\">Number of references to this class. By default 1.</param>\r\n            /// <param name=\"data\">The byte array reference used internally.</param>\r\n            public DataContainer(int refCount, params byte[]/*!*/ data)\r\n            {\r\n                Debug.Assert(data != null);\r\n                this._refCount = refCount;\r\n                this._data = data;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Share, Unshare\r\n\r\n            /// <summary>\r\n            /// Marks this instance as shared (<see cref=\"IsShared\"/>) and returns itself.\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            internal DataContainer/*!*/Share()\r\n            {\r\n                ++_refCount;\r\n                return this;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Get back shared instance of internal <see cref=\"byte\"/> array.\r\n            /// </summary>\r\n            internal void Unshare()\r\n            {\r\n                --_refCount;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region this[]\r\n\r\n            /// <summary>\r\n            /// Get byte on specified index.\r\n            /// </summary>\r\n            /// <param name=\"i\"></param>\r\n            /// <returns></returns>\r\n            public byte this[int i]\r\n            {\r\n                get\r\n                {\r\n                    return _data[i];\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Empty bytes. Not a single instance with zero length.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public static readonly PhpBytes Empty = new PhpBytes(ArrayUtils.EmptyBytes);\r\n\r\n        /// <summary>\r\n        /// Get the internal byte array for read only purposes.\r\n        /// The returned array must not be modified! It is modifiable only because of the performance.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public byte[]/*!*/ReadonlyData { get { return _data.Data; } }\r\n\r\n        /// <summary>\r\n\t\t/// Data contained in this instance. If internal byte array is shared with other <see cref=\"PhpBytes\"/> objects,\r\n        /// internal byte array is cloned.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public byte[]/*!*/ Data\r\n\t\t{\r\n\t\t\tget\r\n            {\r\n                if (_data.IsShared)\r\n                {   // performs clone of internal byte array\r\n                    _data.Unshare();\r\n                    _data = new DataContainer((byte[])_data.Data.Clone());\r\n                }\r\n\r\n                return _data.Data;\r\n            }\r\n\t\t\tset\r\n            {\r\n                if (value == null) throw new ArgumentNullException(\"value\");\r\n\r\n                if (_data.IsShared)\r\n                    _data.Unshare();\r\n                \r\n                _data = new DataContainer(value);\r\n            }\r\n\t\t}\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        private DataContainer/*!*/_data;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets data length.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\tpublic int Length { get { return _data.Length; } }\r\n\r\n        /// <summary>\r\n        /// The i-th byte from the internal byte array;\r\n        /// </summary>\r\n        /// <param name=\"i\"></param>\r\n        /// <returns></returns>\r\n        public byte this[int i] { get { return _data[i]; } }\r\n\r\n        #endregion\r\n\r\n        #region DebugView, DumpTo\r\n\r\n        /// <summary>\r\n        /// Dumps internal data, escapes non-ASCII characters.\r\n        /// </summary>\r\n        /// <param name=\"output\">Output to dump to.</param>\r\n        private void DumpTo(System.IO.TextWriter/*!*/output)\r\n        {\r\n            Debug.Assert(output != null);\r\n\r\n            const string hex_digs = \"0123456789abcdef\";\r\n            char[] patch = new char[4] { '\\\\', 'x', '0', '0' };\r\n\r\n            foreach (byte b in ReadonlyData)\r\n            {\r\n                // printable characters are outputted normally\r\n                if (b < 0x7f)\r\n                {\r\n                    output.Write((char)b);\r\n                }\r\n                else\r\n                {\r\n                    patch[2] = hex_digs[(b & 0xf0) >> 4];\r\n                    patch[3] = hex_digs[(b & 0x0f)];\r\n\r\n                    output.Write(patch);\r\n                }\r\n            }\r\n        }\r\n\r\n        private string DebugView()\r\n        {\r\n            var output = new System.IO.StringWriter();\r\n            const string hex_digs = \"0123456789ABCDEF\";\r\n            var isBinary = false;\r\n            var data = ReadonlyData;\r\n            foreach (var b in data)\r\n            {\r\n                if (b < 32)\r\n                {\r\n                    isBinary = true;\r\n                    break;\r\n                }\r\n            }\r\n            if (isBinary)\r\n            {\r\n                output.Write(\"0x\");\r\n                foreach (byte b in data)\r\n                {\r\n                    output.Write(hex_digs[(b & 0xf0) >> 4]);\r\n                    output.Write(hex_digs[(b & 0x0f)]);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                output.Write(ToString());\r\n            }\r\n            return output.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n\t\t/// Creates a new instance of the <see cref=\"PhpBytes\"/> class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The array of bytes.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"data\"/> is a <B>null</B> reference.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic PhpBytes(params byte[]/*!*/ data)\r\n\t\t{\r\n\t\t\tif (data == null) throw new ArgumentNullException(\"data\");\r\n            this._data = new DataContainer(data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the <see cref=\"PhpBytes\"/> class with its data converted from a string using \r\n\t\t/// encoding from the <see cref=\"Configuration.Global\"/> configuration.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">The string.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"str\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic PhpBytes(string/*!*/ str)\r\n\t\t{\r\n\t\t\tif (str == null) throw new ArgumentNullException(\"str\");\r\n            this._data = new DataContainer(Configuration.Application.Globalization.PageEncoding.GetBytes(str));\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of the <see cref=\"PhpBytes\"/> class that shares internal byte array\r\n        /// with another <see cref=\"PhpBytes\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"data\">The original bytes array.</param>\r\n        public PhpBytes(PhpBytes/*!*/data)\r\n        {\r\n            if (data == null) throw new ArgumentNullException(\"data\");\r\n            this._data = data._data.Share();\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region explicit string conversion\r\n\r\n        ///// <summary>\r\n        ///// Converts given PhpBytes object into string using current Phalanger PageEncoding\r\n        ///// (see Configuration.Application.Globalization.PageEncoding).\r\n        ///// </summary>\r\n        ///// <param name=\"bytes\">Object to convert.</param>\r\n        ///// <returns>New string encoded from given PhpBytes.</returns>\r\n        //public static explicit operator string(PhpBytes bytes)\r\n        //{\r\n        //    return ((IPhpConvertible)bytes).ToString();\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Convert given string into PhpBytes, using ctor of PhpBytes.\r\n        ///// (see Configuration.Application.Globalization.PageEncoding).\r\n        ///// </summary>\r\n        ///// <param name=\"str\">String to convert.</param>\r\n        ///// <returns>Returns new PhpBytes(str).</returns>\r\n        //public static explicit operator PhpBytes(string str)\r\n        //{\r\n        //    return new PhpBytes(str);\r\n        //}\r\n\r\n        #endregion\r\n\r\n\t\t#region IPhpConvertible Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the type code of the Phalanger type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The <see cref=\"PhpTypeCode.PhpBytes\"/> type code.</returns>\r\n\t\tpublic PHP.Core.PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.PhpBytes;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrives a content of this instance converted to the <see cref=\"double\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The double precision floating point number.</returns>\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn Convert.StringToDouble(((IPhpConvertible)this).ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrives a content of this instance converted to the <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The integer number.</returns>\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n            return Convert.StringToInteger(((IPhpConvertible)this).ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrives a content of this instance converted to the <see cref=\"long\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The integer number.</returns>\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n            return Convert.StringToInteger(((IPhpConvertible)this).ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrives a content of this instance converted to the <see cref=\"bool\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>True iff this instance contains nothing or one zero byte.</returns>\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n            return !(_data.Length == 0 || (_data.Length == 1 && _data[0] == (byte)'0'));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrives a content of this instance converted to the <see cref=\"byte\"/>[].\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array of bytes.</returns>\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a number of type <see cref=\"int\"/> or <see cref=\"double\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doubleValue\">The double value.</param>\r\n\t\t/// <param name=\"intValue\">The integer value.</param>\r\n\t\t/// <param name=\"longValue\">The long integer value.</param>\r\n\t\t/// <returns>Value of <see cref=\"Convert.NumberInfo\"/>.</returns>\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\treturn Convert.StringToNumber(((IPhpConvertible)this).ToString(), out intValue, out longValue, out doubleValue);\r\n\t\t}\r\n\r\n        public override string ToString()\r\n        {\r\n            return ((IPhpConvertible)this).ToString();\r\n        }\r\n\r\n        string IPhpConvertible.ToString()\r\n        {\r\n            return Configuration.Application.Globalization.PageEncoding.GetString(this.ReadonlyData, 0, this.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts instance to its string representation according to PHP conversion algorithm.\r\n        /// </summary>\r\n        /// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n        /// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n        /// <returns>The converted value.</returns>\r\n        string IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n        {\r\n            success = false;\r\n            return ((IPhpConvertible)this).ToString();\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable Members\r\n\r\n        /// <summary>\r\n\t\t/// Prints a content of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\tpublic void Print(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(\"\\\"\");\r\n            DumpTo(output);\r\n            output.WriteLine(\"\\\"\");            \r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a content of this instance along with its type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\tpublic void Dump(System.IO.TextWriter output)\r\n\t\t{\r\n            output.Write(PhpTypeName + \"[binary]({0}) \", this.Length);\r\n            this.Print(output);\r\n            //if (data.Length > 0)\r\n            //    output.WriteLine(PhpTypeName + \"[binary]({0}) \\\"\\\\x{1}\\\"\", data.Length, StringUtils.BinToHex(data, \"\\\\x\"));\r\n            //else\r\n            //    output.WriteLine(PhpTypeName + \"[binary](0) \\\"\\\"\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a PHP declaration of a content of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\tpublic void Export(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(\"\\\"\\\\x{0}\\\"\", StringUtils.BinToHex(this.ReadonlyData, \"\\\\x\"));\r\n\r\n\t\t\tif (PhpVariable.PrintIndentationLevel == 0)\r\n\t\t\t\toutput.WriteLine();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a lazy deep copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A copy that shares the internal byte array with another <see cref=\"PhpBytes\"/>.</returns>\r\n\t\tpublic object DeepCopy()\r\n\t\t{\r\n\t\t\t// duplicates data lazily:\r\n\t\t\treturn new PhpBytes(this);\r\n\t\t}\r\n\r\n\t\tpublic object Copy(CopyReason reason)\r\n\t\t{\r\n\t\t\treturn DeepCopy();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj, IComparer/*!*/ comparer)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null);\r\n\r\n            // try to compare two PhpBytes instances\r\n            if (obj != null && obj.GetType() == typeof(PhpBytes))\r\n            {\r\n                var other = (PhpBytes)obj;\r\n\r\n                // if both PhpByte instances share the same internal byte array:\r\n                if (this._data == other._data) return 0;\r\n\r\n                if (object.ReferenceEquals(comparer, PhpComparer.Default) &&\r\n                    !(StringUtils.IsConvertableToNumber(this.ReadonlyData) && StringUtils.IsConvertableToNumber(other.ReadonlyData)))\r\n                {\r\n                    // we don't have to convert bytes to string:\r\n                    return ArrayUtils.Compare(this.ReadonlyData, other.ReadonlyData);\r\n                }\r\n                else\r\n                {\r\n                    // user comparers can handle this operation differently:\r\n                    return comparer.Compare(((IPhpConvertible)this).ToString(), ((IPhpConvertible)other).ToString());\r\n                }\r\n            }\r\n\r\n            // compare this as string with obj\r\n            return comparer.Compare(((IPhpConvertible)this).ToString(), obj);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a shallow copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A shallow copy.</returns>\r\n\t\tpublic object Clone()\r\n\t\t{\r\n\t\t\treturn new PhpBytes((byte[])ReadonlyData.Clone());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpVariable\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines emptiness on <see cref=\"PhpBytes\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the inscance contains empty byte array or byte array containing the single zero byte.</returns>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\tint length = this.Length;\r\n\t\t\treturn length == 0 || (length == 1 && _data[0] == (byte)'0');\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether <see cref=\"PhpBytes\"/> is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B></returns>\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a name of declaring type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n\t\tpublic string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Concat\r\n\r\n\t\t/// <summary>\r\n\t\t/// Concats two strings of bytes.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"x\">The first string of bytes to be concatenated. Cannot be <c>null</c>.</param>\r\n        /// <param name=\"y\">The second string of bytes to be concatenated. Cannot be <c>null</c>.</param>\r\n\t\t/// <returns>The concatenation of <paramref name=\"x\"/> and <paramref name=\"y\"/>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Bytes are not encoded nor decoded from their respective encodings. \r\n\t\t/// Instead, data are copied without any changes made and the result's encoding is set to the encoding \r\n\t\t/// of the <paramref name=\"x\"/>.</remarks>\r\n        [Emitted]\r\n\t\tpublic static PhpBytes Concat(PhpBytes/*!*/x, PhpBytes/*!*/y)\r\n\t\t{\r\n\t\t\tif (x == null) throw new ArgumentNullException(\"x\");\r\n\t\t\tif (y == null) throw new ArgumentNullException(\"y\");\r\n\r\n\t\t\tint lx = x.Length;\r\n\t\t\tint ly = y.Length;\r\n\r\n            byte[] result = new byte[lx + ly];\r\n\t\t\t\r\n\t\t\tBuffer.BlockCopy(x.ReadonlyData, 0, result, 0, lx);\r\n            Buffer.BlockCopy(y.ReadonlyData, 0, result, lx, ly);\r\n\r\n\t\t\treturn new PhpBytes(result);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Concatenates strings or strings of bytes optimized for concatenation with a PhpBytes.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static PhpBytes Concat(PhpBytes x, object y)\r\n        {\r\n            Debug.Assert(!(y is PhpReference));\r\n\r\n            return PhpBytes.Concat(x, Convert.ObjectToPhpBytes(y));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenates strings or strings of bytes optimized for concatenation with a PhpBytes.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// A concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static PhpBytes Concat(object x, PhpBytes y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            return PhpBytes.Concat(Convert.ObjectToPhpBytes(x), y);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenate list of PhpBytes. Given array can contain nulls.\r\n        /// </summary>\r\n        /// <param name=\"args\">List of PhpArray objects. Can contain null.</param>\r\n        /// <returns>PhpBytes with concatenated args.</returns>\r\n        public static PhpBytes Concat(params PhpBytes[]/*!*/args)\r\n        {\r\n            return Concat(args, 0, args.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concatenate list of PhpBytes. Given array can contain nulls.\r\n        /// </summary>\r\n        /// <param name=\"args\">List of PhpArray objects. Can contain null.</param>\r\n        /// <param name=\"startIndex\">First element in args to start concatenation from.</param>\r\n        /// <param name=\"count\">Amount of element to concatenate from the startIndex index.</param>\r\n        /// <returns>PhpBytes with concatenated args.</returns>\r\n        public static PhpBytes Concat(PhpBytes[]/*!*/args, int startIndex, int count)\r\n        {\r\n            int num = startIndex + count;\r\n\r\n            Debug.Assert(args != null);\r\n            Debug.Assert(startIndex >= 0);\r\n            Debug.Assert(count >= 0);\r\n            Debug.Assert(num <= args.Length);\r\n\r\n            // computes the length of the result:\r\n            int length = 0;\r\n            for (int i = startIndex; i < num; ++i)\r\n                if (args[i] != null)\r\n                    length += args[i].Length;\r\n\r\n            if (length == 0)\r\n                return PhpBytes.Empty;\r\n\r\n            var result = new byte[length];\r\n\r\n            // copies data to the result array:\r\n            int pos = 0;\r\n            for (int i = startIndex; i < num; ++i)\r\n                if (args[i] != null)\r\n                {\r\n                    byte[] bytes = args[i].ReadonlyData;\r\n                    Buffer.BlockCopy(bytes, 0, result, pos, bytes.Length);\r\n                    pos += bytes.Length;\r\n                }\r\n\r\n            return new PhpBytes(result);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region Append\r\n\r\n        /// <summary>\r\n        /// Concatenates two strings or strings of bytes optimized for concatenation with a string.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first operand.</param>\r\n        /// <param name=\"y\">The second operand.</param>\r\n        /// <returns>\r\n        /// The single-referenced concatenation of the <paramref name=\"x\"/> and <paramref name=\"y\"/> (no copy needed).\r\n        /// </returns>\r\n        [Emitted]\r\n        public static PhpBytes Append(object x, PhpBytes y)\r\n        {\r\n            Debug.Assert(!(x is PhpReference));\r\n\r\n            return PhpBytes.Concat(Convert.ObjectToPhpBytes(x), y);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IPhpObjectGraphNode Members\r\n\r\n        /// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Walk(PHP.Core.PhpWalkCallback callback, ScriptContext context)\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetHashCode, Equals\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\tint result = -218974311;\r\n\r\n\t\t\tfor (int i = 0; i < this.Length; i++)\r\n\t\t\t\tresult = unchecked((result << 1) ^ this._data[i]);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n            if (ReferenceEquals(obj, this))\r\n                return true;\r\n\r\n            if (obj != null && obj.GetType() == typeof(PhpBytes))\r\n                return Equals((PhpBytes)obj);\r\n            else\r\n                return false;\r\n\t\t}\r\n\r\n        public bool Equals(PhpBytes/*!*/other)\r\n        {\r\n            Debug.Assert(other != null);\r\n\r\n            return\r\n                this._data == other._data ||    // compare internal data structures if they are shared first\r\n                (\r\n                    this._data.Length == other._data.Length &&  // arrays have to be the same length\r\n                    ArrayUtils.Compare(this.ReadonlyData, other.ReadonlyData) == 0 // compare byte by byte\r\n                );\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region Nested class: DebuggerProxy\r\n\r\n        private sealed class DebuggerProxy\r\n\t\t{\r\n\t\t\tprivate readonly PhpBytes _phpBytes;\r\n\r\n\t\t\tpublic DebuggerProxy(PhpBytes phpBytes)\r\n\t\t\t{\r\n\t\t\t\t_phpBytes = phpBytes;\r\n\t\t\t}\r\n\r\n\t\t\tpublic string String\r\n\t\t\t{\r\n\t\t\t\tget { return _phpBytes.ToString(); }\r\n\t\t\t}\r\n\r\n\t\t\tpublic byte[] Binary\r\n\t\t\t{\r\n\t\t\t\tget { return _phpBytes.ReadonlyData; }\r\n\t\t\t}\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpCallback.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents a callback designation passed to a system function.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <seealso cref=\"Convert.ObjectToCallback\"/>\r\n\t/// </remarks>\r\n\t[Serializable]\r\n\tpublic class PhpCallback : ISerializable, IPhpConvertible\r\n\t{\r\n\t\t#region State\r\n\r\n\t\t/// <summary>\r\n\t\t/// State of a <see cref=\"PhpCallback\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic enum State\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Unresolved function name (<see cref=\"PhpCallback.targetName\"/>) is known.\r\n\t\t\t/// </summary>\r\n\t\t\tUnboundFunction = 0,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Unresolved class name (<see cref=\"PhpCallback.className\"/>) and method name (<see cref=\"PhpCallback.targetName\"/>)\r\n\t\t\t/// are known.\r\n\t\t\t/// </summary>\r\n\t\t\tUnboundStaticMethod = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// A <see cref=\"PhpObject\"/> instance (<see cref=\"PhpCallback.instance\"/>) and an unresolved method name\r\n\t\t\t/// (<see cref=\"PhpCallback.targetName\"/>) are known.\r\n\t\t\t/// </summary>\r\n\t\t\tUnboundInstanceMethod = 2,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The callback has been resolved into a <see cref=\"DRoutineDesc\"/> (<see cref=\"PhpCallback.routineDesc\"/>).\r\n\t\t\t/// </summary>\r\n\t\t\tBound = 16,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The callback has been resolved into a <see cref=\"DRoutineDesc\"/> pointing to the <c>__call</c> method.\r\n\t\t\t/// </summary>\r\n\t\t\tBoundToCaller = 17\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The state of the callback.\r\n\t\t/// </summary>\r\n\t\tprivate State state;\r\n\r\n\t\t/// <summary>A handle of the target PHP method.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Valid if <see cref=\"state\"/> is <see cref=\"State.Bound\"/>, otherwise <B>null</B>.\r\n\t\t/// </remarks>\r\n\t\tprivate DRoutineDesc routineDesc;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Script context the <see cref=\"routineDesc\"/> should be called with.\r\n\t\t/// </summary>\r\n\t\tprivate ScriptContext context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the target function or method for unbound callback.\r\n\t\t/// </summary>\r\n\t\tprivate string targetName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the target class for unbound callback.\r\n\t\t/// </summary>\r\n\t\tprivate string className;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The target instance.\r\n\t\t/// </summary>\r\n\t\tprivate DObject instance;\r\n\r\n        /// <summary>\r\n        /// Type used to call this routine.\r\n        /// Used for late static binding.\r\n        /// </summary>\r\n        private DTypeDesc lateStaticBindType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if <see cref=\"instance\"/> is just a dummy instance created ad-hoc to be able to call an instance method\r\n\t\t/// statically, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tprivate bool dummyInstance;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Type context (determined at bind time).\r\n\t\t/// </summary>\r\n\t\tprivate DTypeDesc callingContext;\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if this callback is bound, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsBound\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn ((state & State.Bound) != 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Returns <B>true</B> if this callback is bound to a <c>__call</c> or <c>__callStatic</c> method, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsBoundToCaller\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (state == State.BoundToCaller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> if this <see cref=\"PhpCallback\"/> is &quot;invalid&quot;, <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsInvalid\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (this == Invalid);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the target routine name (this is the real name even if bound to <c>__call</c>).\r\n\t\t/// </summary>\r\n\t\tpublic string RoutineName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return targetName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the target <see cref=\"DObject\"/> if this <see cref=\"PhpCallback\"/> references an instance method,\r\n\t\t/// <B>null</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic DObject TargetInstance\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (dummyInstance ? null : instance);\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (IsBound) throw new InvalidOperationException(CoreResources.GetString(\"cannot_change_target_instance\"));\r\n\t\t\t\tinstance = value;\r\n\r\n                if (instance != null)\r\n                    lateStaticBindType = instance.TypeDesc;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the target routine to which this callback is bound.\r\n\t\t/// </summary>\r\n\t\tpublic DRoutineDesc TargetRoutine\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return routineDesc; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invalid <see cref=\"PhpCallback\"/> singleton.\r\n\t\t/// </summary>\r\n\t\tpublic static PhpCallback Invalid = new PhpCallback();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an invalid <see cref=\"PhpCallback\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate PhpCallback()\r\n\t\t{ }\r\n\r\n\t\tpublic PhpCallback(RoutineDelegate functionDelegate, ScriptContext context)\r\n\t\t{\r\n\t\t\t// create a new DRoutineDesc based on the passed delegate\r\n\t\t\troutineDesc = new PhpRoutineDesc(PhpMemberAttributes.Static | PhpMemberAttributes.NamespacePrivate, functionDelegate, false);\r\n\r\n\t\t\tthis.context = context;\r\n\t\t\tthis.state = State.Bound;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a callback bound to the specified PHP method represented by a <see cref=\"DRoutineDesc\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The target PHP object.</param>\r\n\t\t/// <param name=\"handle\">The handle of the target PHP method.</param>\r\n\t\t/// <param name=\"context\">The script context to call the method with.</param>\r\n\t\tpublic PhpCallback(DObject instance, DRoutineDesc handle, ScriptContext context)\r\n\t\t{\r\n\t\t\tif (handle == null) throw new ArgumentNullException(\"handle\");\r\n            if (!handle.IsStatic)\r\n            {\r\n\t\t\t\tif (instance == null) throw new ArgumentNullException(\"instance\");\r\n\t\t\t\tthis.instance = instance;\r\n\t\t\t}\r\n\r\n\t\t\tthis.context = context;\r\n\t\t\tthis.routineDesc = handle;\r\n\t\t\tthis.state = State.Bound;\r\n\r\n            if (instance != null)\r\n                this.lateStaticBindType = instance.TypeDesc;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an unbound PHP function callback given a function name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"functionName\">The target PHP function name.</param>\r\n        public PhpCallback(string functionName)\r\n        {\r\n            if (functionName == null) throw new ArgumentNullException(\"functionName\");\r\n\r\n            this.state =\r\n                (Name.IsClassMemberSyntax(functionName, out this.className, out this.targetName))\r\n                ? this.state = State.UnboundStaticMethod\r\n                : this.state = State.UnboundFunction;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an unbound PHP function callback given a function name and <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"functionName\">The target PHP function name.</param>\r\n\t\t/// <param name=\"context\">The script context to call the function with.</param>\r\n\t\tpublic PhpCallback(string functionName, ScriptContext context)\r\n            :this(functionName)\r\n\t\t{\r\n\t\t\tif (context == null) throw new ArgumentNullException(\"context\");\r\n\t\t\tthis.context = context;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an unbound PHP static method callback given a class name and method name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"className\">The target PHP class name.</param>\r\n\t\t/// <param name=\"methodName\">The target PHP method name.</param>\r\n\t\tpublic PhpCallback(string className, string methodName)\r\n\t\t{\r\n\t\t\tif (className == null) throw new ArgumentNullException(\"className\");\r\n\t\t\tif (methodName == null) throw new ArgumentNullException(\"methodName\");\r\n\r\n\t\t\tthis.className = className;\r\n\t\t\tthis.targetName = methodName;\r\n\t\t\tthis.state = State.UnboundStaticMethod;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an unbound PHP static method callback given a class name, method name and <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"className\">The target PHP class name.</param>\r\n\t\t/// <param name=\"methodName\">The target PHP method name.</param>\r\n\t\t/// <param name=\"context\">The script context to call the method with.</param>\r\n\t\tpublic PhpCallback(string className, string methodName, ScriptContext context)\r\n            :this(className, methodName)\r\n\t\t{\r\n\t\t\tif (context == null) throw new ArgumentNullException(\"context\");\r\n\t\t\tthis.context = context;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an unbound PHP instance method callback given a <see cref=\"PhpObject\"/> instance and a method name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The target PHP object.</param>\r\n\t\t/// <param name=\"targetName\">The target PHP function name.</param>\r\n\t\tpublic PhpCallback(DObject instance, string targetName)\r\n\t\t{\r\n\t\t\tif (instance == null) throw new ArgumentNullException(\"instance\");\r\n\t\t\tif (targetName == null) throw new ArgumentNullException(\"targetName\");\r\n\r\n\t\t\tthis.instance = instance;\r\n\t\t\tthis.targetName = targetName;\r\n\t\t\tthis.state = State.UnboundInstanceMethod;\r\n            this.lateStaticBindType = instance.TypeDesc;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates bounded PHP instance method callback. Used when we already know the routine.\r\n        /// </summary>\r\n        /// <param name=\"instance\">The target PHP object.</param>\r\n        /// <param name=\"routine\">The target PHP method.</param>\r\n        internal PhpCallback(DObject instance, DRoutineDesc routine)\r\n        {\r\n            Debug.Assert(instance != null);\r\n            Debug.Assert(routine != null);\r\n\r\n            this.instance = instance;\r\n            this.targetName = routine.Member.FullName;\r\n            this.state = State.Bound;\r\n            this.routineDesc = routine;\r\n            this.lateStaticBindType = instance.TypeDesc;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Binding\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attempts to bind this callback to its target with no naming context.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> if the callback was successfully bound, <B>false</B> if an error occured.</returns>\r\n\t\tpublic bool Bind()\r\n\t\t{\r\n\t\t\treturn Bind(false, UnknownTypeDesc.Singleton, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attempts to bind this callback to its target with no naming context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"quiet\"><B>true</B> of no errors should be thrown, <B>false</B> otherwise.</param>\r\n\t\t/// <returns><B>True</B> if the callback was successfully bound, <B>false</B> if an error occured.</returns>\r\n\t\tpublic bool Bind(bool quiet)\r\n\t\t{\r\n            return Bind(quiet, UnknownTypeDesc.Singleton, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Attempts to bind this callback to its target.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"quiet\"><B>true</B> of no errors should be thrown, <B>false</B> otherwise.</param>\r\n\t\t/// <param name=\"nameContext\">Current <see cref=\"NamingContext\"/> for function and class name resolution.</param>\r\n\t\t/// <param name=\"caller\">Current class context or a <see cref=\"UnknownTypeDesc\"/> if the class context\r\n\t\t/// should be determined ad-hoc.</param>\r\n\t\t/// <returns><B>True</B> if the callback was successfully bound, <B>false</B> if an error occured.</returns>\r\n\t\tpublic bool Bind(bool quiet, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\tif (IsInvalid) return false;\r\n\r\n\t\t\tswitch (state)\r\n\t\t\t{\r\n\t\t\t\tcase State.UnboundFunction:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (context == null) context = ScriptContext.CurrentContext;\r\n\r\n\t\t\t\t\t\troutineDesc = context.ResolveFunction(targetName, nameContext, quiet);\r\n\t\t\t\t\t\tif (routineDesc == null) return false;\r\n\r\n\t\t\t\t\t\tstate = State.Bound;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase State.UnboundStaticMethod:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (context == null) context = ScriptContext.CurrentContext;\r\n\r\n                        if (caller != null && caller.IsUnknown) callingContext = PhpStackTrace.GetClassContext();\r\n                        else callingContext = caller;\r\n\r\n\t\t\t\t\t\t// try to find the CLR method\r\n\r\n\t\t\t\t\t\t// find the class according to className\r\n\t\t\t\t\t\tResolveTypeFlags flags = ResolveTypeFlags.UseAutoload;\r\n\t\t\t\t\t\tif (!quiet) flags |= ResolveTypeFlags.ThrowErrors;\r\n\r\n\t\t\t\t\t\tDTypeDesc type = context.ResolveType(className, nameContext, callingContext, null, flags);\r\n\t\t\t\t\t\tif (type == null) return false;\r\n\r\n\t\t\t\t\t\t// find the method\r\n                        bool is_caller_method;\r\n                        lateStaticBindType = type;\r\n\t\t\t\t\t\troutineDesc = Operators.GetStaticMethodDesc(type, targetName,\r\n                            ref instance, callingContext, context, quiet, false, out is_caller_method);\r\n\r\n\t\t\t\t\t\tif (routineDesc == null) return false;\r\n\r\n\t\t\t\t\t\tif (instance != null) dummyInstance = true;\r\n                        state = is_caller_method ? State.BoundToCaller : State.Bound;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase State.UnboundInstanceMethod:\r\n\t\t\t\t\t{\r\n                        if (caller != null && caller.IsUnknown) callingContext = PhpStackTrace.GetClassContext();\r\n                        else callingContext = caller;\r\n\r\n\t\t\t\t\t\t// ask the instance for a handle to the method\r\n\t\t\t\t\t\tbool is_caller_method;\r\n\t\t\t\t\t\troutineDesc = instance.GetMethodDesc(targetName, callingContext, quiet, out is_caller_method);\r\n\t\t\t\t\t\tif (routineDesc == null) return false;\r\n\r\n\t\t\t\t\t\tstate = (is_caller_method ? State.BoundToCaller : State.Bound);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n        public void SwitchContext(ScriptContext/*!*/ newContext)\r\n\t\t{\r\n\t\t\tif (state != State.Bound && state != State.BoundToCaller)\r\n\t\t\t\tthrow new InvalidOperationException();\r\n\r\n\t\t\tthis.context = newContext;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Invocation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes this callback.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">Arguments to be passed to target function or method (can be <see cref=\"PhpReference\"/>s).</param>\r\n\t\t/// <returns>The value returned by the called function or method (can be a <see cref=\"PhpReference\"/>).</returns>\r\n        [Emitted]\r\n\t\tpublic object Invoke(params object[] args)\r\n\t\t{\r\n\t\t\tif (!IsBound && !Bind()) return null;\r\n\t\t\treturn InvokeInternal(args);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Invokes this callback. Can be used if DTypeDesc of caller's class context is known without an overhead of determining it.\r\n        /// </summary>\r\n        /// <param name=\"caller\">DTypeDesc of the caller's class context.</param>\r\n        /// <param name=\"args\">Arguments to be passed to target function or method (can be <see cref=\"PhpReference\"/>s).</param>\r\n        /// <returns>The value returned by the called function or method (can be a <see cref=\"PhpReference\"/>).</returns>\r\n        public object Invoke(DTypeDesc caller, params object[] args)\r\n        {\r\n            if (!IsBound && !Bind(false, caller, null)) return null;\r\n            return InvokeInternal(args);\r\n        }\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes this callback (must be bound).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">Arguments to be passed to target function or method (can be <see cref=\"PhpReference\"/>s).</param>\r\n\t\t/// <returns>The value returned by the called function or method (can be a <see cref=\"PhpReference\"/>).</returns>\r\n\t\tinternal object InvokeInternal(params object[] args)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsBound, \"Callback must be bound.\");\r\n\t\t\tDebug.Assert(routineDesc != null);// Since it's possible to call non static method statically we can't use this condition in the assert && (routineDesc.IsStatic || instance != null));\r\n\r\n\t\t\t// push args to PHP stack and invoke the desc\r\n\t\t\tPhpStack stack = (context != null ? context.Stack : ScriptContext.CurrentContext.Stack);\r\n\r\n\t\t\tif (state == State.BoundToCaller)\r\n\t\t\t{\r\n\t\t\t\t// push the real target name and args as a PhpArray\r\n\t\t\t\tstack.AddFrame(targetName, new PhpArray(args));\r\n\t\t\t}\r\n\t\t\telse stack.AddFrame(args);\r\n\r\n\t\t\tstack.Callback = true;\r\n            stack.LateStaticBindType = this.lateStaticBindType;\r\n\t\t\treturn routineDesc.Invoke(instance, stack, callingContext);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible Members, ToPhpRepresentation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"PhpTypeCode.Invalid\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><see cref=\"PhpTypeCode.Invalid\"/></returns>\r\n\t\tpublic PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.Invalid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <c>0</c>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>0</c></returns>\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn 0.0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <c>0</c>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>0</c></returns>\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <c>0</c>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>0</c></returns>\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>false</B>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>false</B></returns>\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a number of type <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\tdoubleValue = 0.0;\r\n\t\t\tintValue = 0;\r\n\t\t\tlongValue = 0;\r\n\t\t\treturn Convert.NumberInfo.Integer;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"PhpBytes\"/> representation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn new PhpBytes(((IPhpConvertible)this).ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"String\"/> representation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring IPhpConvertible.ToString()\r\n\t\t{\r\n\t\t\tswitch (state)\r\n\t\t\t{\r\n\t\t\t\tcase State.UnboundFunction: return targetName;\r\n\t\t\t\tcase State.UnboundStaticMethod: return String.Format(\"{0}::{1}\", className, targetName);\r\n\t\t\t\tcase State.UnboundInstanceMethod: return String.Format(\"{0}::{1}\", instance.TypeName, targetName);\r\n\r\n\t\t\t\tcase State.Bound:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (instance == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn String.Format(\"{0}::{1}\", routineDesc.DeclaringType.MakeFullName(), routineDesc.MakeFullName());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn String.Format(\"{0}::{1}\", instance.TypeName, routineDesc.MakeFullName());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase State.BoundToCaller:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (instance == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn String.Format(\"{0}::{1}\", routineDesc.DeclaringType.MakeFullName(), targetName);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn String.Format(\"{0}::{1}\", instance.TypeName, targetName);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(null); return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = false;\r\n            return ((IPhpConvertible)this).ToString();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns PHP representation of this callback (either a string or a <see cref=\"PhpArray\"/>\r\n\t\t/// with two items denoting the class/instance and method name).\r\n\t\t/// </summary>\r\n\t\t/// <returns>A string or <see cref=\"PhpArray\"/> containing the two items.</returns>\r\n\t\tpublic object ToPhpRepresentation()\r\n\t\t{\r\n\t\t\tPhpArray array;\r\n\r\n\t\t\tswitch (state)\r\n\t\t\t{\r\n\t\t\t\t// function_name\r\n\t\t\t\tcase State.UnboundFunction:\r\n\t\t\t\t\treturn targetName;\r\n\r\n\t\t\t\t// array(class_name, method_name)\r\n\t\t\t\tcase State.UnboundStaticMethod:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarray = new PhpArray();\r\n\t\t\t\t\t\tarray.Add(className);\r\n\t\t\t\t\t\tarray.Add(targetName);\r\n\t\t\t\t\t\treturn array;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// array(instance, method_name)\r\n\t\t\t\tcase State.UnboundInstanceMethod:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarray = new PhpArray();\r\n\t\t\t\t\t\tarray.Add(instance);\r\n\t\t\t\t\t\tarray.Add(targetName);\r\n\t\t\t\t\t\treturn array;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// function_name\r\n\t\t\t\tcase State.Bound:\r\n\t\t\t\tcase State.BoundToCaller:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (routineDesc.DeclaringType.IsGlobal) return routineDesc.MakeFullName(); // function\r\n\r\n\t\t\t\t\t\tarray = new PhpArray();\r\n\t\t\t\t\t\tif (instance != null && !dummyInstance) array.Add(instance);\r\n\t\t\t\t\t\telse array.Add(routineDesc.DeclaringType.MakeFullName());\r\n\r\n\t\t\t\t\t\tif (state == State.BoundToCaller) array.Add(targetName);\r\n\t\t\t\t\t\telse array.Add(routineDesc.MakeFullName());\r\n\r\n\t\t\t\t\t\treturn array;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(null); return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialization & ISerializable (CLR only)\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected PhpCallback(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tclassName = info.GetString(\"className\");\r\n\t\t\ttargetName = info.GetString(\"targetName\");\r\n\t\t\tinstance = (PhpObject)info.GetValue(\"instance\", typeof(PhpObject));\r\n\t\t\tstate = (State)info.GetValue(\"state\", typeof(State));\r\n\r\n            if (instance != null)\r\n                lateStaticBindType = instance.TypeDesc;\r\n\t\t}\r\n\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetObjectData\"]/*'/>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tinfo.AddValue(\"className\", className);\r\n\t\t\tinfo.AddValue(\"targetName\", targetName);\r\n\t\t\tinfo.AddValue(\"instance\", dummyInstance ? null : instance);\r\n\r\n\t\t\t// serialize an unbound callback (if possible)\r\n\t\t\tState new_state = state;\r\n\t\t\tif (new_state == State.Bound)\r\n\t\t\t{\r\n\t\t\t\tif (className != null) new_state = State.UnboundStaticMethod;\r\n\t\t\t\telse if (instance != null && !dummyInstance) new_state = State.UnboundInstanceMethod;\r\n\t\t\t\telse if (targetName != null) new_state = State.UnboundFunction;\r\n\t\t\t}\r\n\t\t\tinfo.AddValue(\"state\", new_state);\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\t#region PhpCallbackParameterized\r\n\r\n\t/// <summary>\r\n\t/// Represents a callback along with the arguments that will be used for invocation.\r\n\t/// </summary>\r\n\tpublic struct PhpCallbackParameterized\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The callback. Cannot be a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tpublic PhpCallback/*!*/ Callback { get { return callback; } }\r\n\t\tPhpCallback callback;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The parameters. Can be a <B>null</B> reference.\r\n\t\t/// </summary>\r\n\t\tpublic object[] Parameters { get { return parameters; } }\r\n\t\tobject[] parameters;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates parameterized callback.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback.</param>\r\n\t\t/// <param name=\"parameters\">The parameters.</param>\r\n\t\tpublic PhpCallbackParameterized(PhpCallback/*!*/ callback, params object[] parameters)\r\n\t\t{\r\n\t\t\tthis.callback = callback;\r\n\t\t\tthis.parameters = parameters;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes the callback with the parameters.\r\n\t\t/// </summary>\r\n\t\tpublic void Invoke()\r\n\t\t{\r\n            Invoke(UnknownTypeDesc.Singleton);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Invokes the callback with the parameters.\r\n        /// </summary>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        public void Invoke(DTypeDesc caller)\r\n        {\r\n            callback.Invoke(caller, parameters);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpObject.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Collections.Generic;\r\nusing D = System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\n/*\r\n\r\n  Designed and implemented by Ladislav Prosek and Tomas Matousek.\r\n  \r\n*/\r\n\r\nnamespace PHP.Library\r\n{\r\n\t#region stdClass\r\n\r\n\t/// <summary>\r\n\t/// &quot;Standard&quot; built-in PHP class.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// This class contains no CT fields and no methods. It is implicitly instantiated when you apply\r\n\t/// certain field access operators (-&gt;) on an empty variable.\r\n\t/// </remarks>\r\n\t[Serializable, ImplementsType]\r\n\tpublic class stdClass : PhpObject\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of this class.\r\n\t\t/// </summary>\r\n\t\tpublic const string ClassName = \"stdClass\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"stdClass\"/>.\r\n\t\t/// <seealso cref=\"PHP.Core.PhpObject(PHP.Core.ScriptContext,DTypeDesc)\"/>\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic stdClass(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, true)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"stdClass\"/>.\r\n\t\t/// <seealso cref=\"PHP.Core.PhpObject(PHP.Core.ScriptContext,bool)\"/>\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic stdClass(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"stdClass\"/> (<c>newInstance</c> is <B>false</B>).\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic stdClass(ScriptContext context)\r\n\t\t\t: this(context, false)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"stdClass\"/> with current <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic stdClass()\r\n\t\t\t: this(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an empty <see cref=\"stdClass\"/> and throws the &quot;Creating default object from empty value&quot;\r\n\t\t/// strict message.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The <see cref=\"ScriptContext\"/> to create the <see cref=\"stdClass\"/> with.</param>\r\n\t\t/// <returns>The created <see cref=\"stdClass\"/> instance.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Always (Strict).</exception>\r\n\t\tpublic static stdClass CreateDefaultObject(ScriptContext context)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Strict, CoreResources.GetString(\"default_object_created\"));\r\n\t\t\treturn new stdClass(context);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region __PopulateTypeDesc\r\n\r\n\t\tinternal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n\t\t{\r\n\t\t\t// the method is empty, which means that stdClass has no methods or CT properties;\r\n\t\t\t// existence of this method however avoids the slow reflection when creating its DTypeDesc\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected stdClass(SerializationInfo info, StreamingContext context)\r\n\t\t\t\t: base(info, context)\r\n\t\t{ }\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region __PHP_Incomplete_Class\r\n\r\n\t/// <summary>\r\n\t/// Type of the result of failed deserialization.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Instances of this class are created when an attempts is made to deserialize an object whose class\r\n\t/// is undefined for the current script.\r\n\t/// </remarks>\r\n\t[Serializable, ImplementsType]\r\n\tpublic class __PHP_Incomplete_Class : PhpObject\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of this class.\r\n\t\t/// </summary>\r\n\t\tpublic const string ClassName = \"__PHP_Incomplete_Class\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the field that holds name of the class that was originally serialized.\r\n\t\t/// </summary>\r\n\t\tpublic const string ClassNameFieldName = \"__PHP_Incomplete_Class_Name\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Holds name of the class that was originally serialized.\r\n\t\t/// </summary>\r\n\t\tpublic PhpReference __PHP_Incomplete_Class_Name = new PhpSmartReference();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"__PHP_Incomplete_Class\"/>.\r\n\t\t/// <seealso cref=\"PHP.Core.PhpObject(PHP.Core.ScriptContext,DTypeDesc)\"/>\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic __PHP_Incomplete_Class(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, true)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"__PHP_Incomplete_Class\"/>.\r\n\t\t/// <seealso cref=\"PHP.Core.PhpObject(PHP.Core.ScriptContext, bool)\"/>\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic __PHP_Incomplete_Class(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"__PHP_Incomplete_Class\"/> with current <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic __PHP_Incomplete_Class()\r\n\t\t\t: this(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected __PHP_Incomplete_Class(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{ }\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region __PopulateTypeDesc & Stubs\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeDesc\">The type desc to populate.</param>\r\n\t\tinternal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n\t\t{\r\n\t\t\ttypeDesc.AddProperty(ClassNameFieldName, PhpMemberAttributes.Public,\r\n                (instance) => ((__PHP_Incomplete_Class)instance).__PHP_Incomplete_Class_Name,\r\n                (instance, value) => ((__PHP_Incomplete_Class)instance).__PHP_Incomplete_Class_Name = (PhpReference)value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region EventClass<>\r\n\r\n\t/// <summary>\r\n\t/// Represents a CLR event acquired using the property-getting syntax.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Event handler type (a delegate).</typeparam>\r\n\t[Serializable, ImplementsType]\r\n\tpublic sealed class EventClass<T> : PhpObject where T : class\r\n\t//where T : Delegate (does anyone know the reason why this constraint is not permitted?)\r\n\t{\r\n\t\t[Serializable]\r\n\t\tpublic delegate void HookDelegate(T del);\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The desc of the CLR event's delegate type.\r\n\t\t/// </summary>\r\n\t\tprivate static ClrDelegateDesc/*!*/ delegateDesc = (ClrDelegateDesc)DTypeDesc.Create(typeof(T));\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the CLR event.\r\n\t\t/// </summary>\r\n\t\tprivate string/*!*/ eventName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Delegate pointing to the event's add method (may be <B>null</B>).\r\n\t\t/// </summary>\r\n\t\tprivate HookDelegate addMethod;\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Delegate pointing to the event's remove method (may be <B>null</B>).\r\n\t\t/// </summary>\r\n\t\tprivate HookDelegate removeMethod;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n#if DEBUG\r\n\t\tstatic EventClass()\r\n\t\t{\r\n\t\t\tDebug.Assert(typeof(Delegate).IsAssignableFrom(typeof(T)));\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"EventClass{T}\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"eventName\">Name of the CLR event.</param>\r\n\t\t/// <param name=\"addMethod\">Delegate pointing to the event's add method (may be <B>null</B>).</param>\r\n\t\t/// <param name=\"removeMethod\">Delegate pointing to the event's remove method (may be <B>null</B>).</param>\r\n\t\t/// <remarks>\r\n\t\t/// At least one of <paramref name=\"addMethod\"/> and <paramref name=\"removeMethod\"/> must be non-<B>null</B>.\r\n\t\t/// </remarks>\r\n\t\tprivate EventClass(ScriptContext/*!*/ context, string/*!*/ eventName, HookDelegate addMethod, HookDelegate removeMethod)\r\n\t\t\t: this(context, true)\r\n\t\t{\r\n\t\t\tDebug.Assert(addMethod != null || removeMethod != null);\r\n\r\n\t\t\tthis.eventName = eventName;\r\n\t\t\tthis.addMethod = addMethod;\r\n\t\t\tthis.removeMethod = removeMethod;\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprivate EventClass(SerializationInfo/*!*/ info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{ }\r\n#endif\r\n\r\n\t\t[Emitted]\r\n\t\tpublic static EventClass<T> Wrap(ScriptContext/*!*/context, string eventName,\r\n\t\t\tHookDelegate addMethod, HookDelegate removeMethod)\r\n\t\t{\r\n\t\t\t// cache the result?\r\n\t\t\t// it would support things like:\r\n\t\t\t// $x = $y->EventName->runtimeField = \"test\";\r\n\t\t\t// echo $y->EventName->runtimeField;\r\n\t\t\treturn new EventClass<T>(context, eventName, addMethod, removeMethod);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Add, Remove\r\n\r\n\t\tpublic void Add(T @delegate)\r\n\t\t{\r\n\t\t\t// pass the call to the real add accessor method\r\n\t\t\tif (addMethod != null) addMethod(@delegate);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// removeMethod is surely non-null\r\n\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"event_has_no_add_accessor\",\r\n\t\t\t\t\tDTypeDesc.Create(removeMethod.Method.DeclaringType).MakeFullName(), eventName));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void Remove(T @delegate)\r\n\t\t{\r\n\t\t\t// pass the call to the real remove accessor method\r\n\t\t\tif (removeMethod != null) removeMethod(@delegate);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// addMethod is surely non-null\r\n\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"event_has_no_remove_accessor\",\r\n\t\t\t\t\tDTypeDesc.Create(addMethod.Method.DeclaringType).MakeFullName(), eventName));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetStub\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns delegate of T type to CLR stub of the given target-routine pair.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"target\">The target instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"routine\">The target routine desc.</param>\r\n\t\t/// <param name=\"realCalleeName\">Real callee name if <paramref name=\"routine\"/> is in fact <c>__call</c>,\r\n\t\t/// or <B>null</B> if <paramref name=\"routine\"/> if the real callee.</param>\r\n\t\t/// <returns>\r\n\t\t/// Delegate to the stub or <B>null</B> if stub for this target-routine pair cannot be generated.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// This method is used in cases when delegate type T is known at compile-time. By caching the corresponding\r\n\t\t/// delegate type desc in a static field (see <see cref=\"delegateDesc\"/>), repeated type desc lookups are\r\n\t\t/// completely avoided.\r\n\t\t/// </remarks>\r\n\t\tinternal static T GetStub(DObject target, DRoutineDesc/*!*/ routine, string realCalleeName)\r\n\t\t{\r\n\t\t\treturn (T)(object)delegateDesc.StubBuilder.GetStub(target, routine, realCalleeName);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PHP Methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Private <c>__construct</c> prevents instantiation from PHP.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tprivate object __construct(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the instance to a string.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The string containing formatted trace.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object __toString(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\treturn eventName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a delegate to the event's invocation list.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object Add(ScriptContext/*!*/ context, object handler)\r\n\t\t{\r\n\t\t\tbool success;\r\n\t\t\tT @delegate = Core.Convert.TryObjectToDelegate<T>(handler, out success);\r\n\r\n\t\t\tif (success) Add(@delegate);\r\n\t\t\telse PhpException.InvalidArgumentType(\"handler\", delegateDesc.MakeFullName());\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a delegate from the event's invocation list.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object Remove(ScriptContext/*!*/ context, object handler)\r\n\t\t{\r\n\t\t\tbool success;\r\n\t\t\tT @delegate = Core.Convert.TryObjectToDelegate<T>(handler, out success);\r\n\r\n\t\t\tif (success) Remove(@delegate);\r\n\t\t\telse PhpException.InvalidArgumentType(\"handler\", delegateDesc.MakeFullName());\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Implementation Details\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeDesc\">The type desc to populate.</param>\r\n\t\tinternal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n\t\t{\r\n\t\t\ttypeDesc.AddMethod(\"__construct\", PhpMemberAttributes.Private, __construct);\r\n\t\t\ttypeDesc.AddMethod(\"__toString\", PhpMemberAttributes.Public, __toString);\r\n\t\t\ttypeDesc.AddMethod(\"Add\", PhpMemberAttributes.Public, Add);\r\n\t\t\ttypeDesc.AddMethod(\"Remove\", PhpMemberAttributes.Public, Remove);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"EventClass{T}\"/>.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic EventClass(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, true)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"EventClass{T}\"/>.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic EventClass(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{ }\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object __construct(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((EventClass<T>)instance).__construct(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object __toString(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((EventClass<T>)instance).__toString(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object Add(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tobject arg = stack.PeekValue(1);\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((EventClass<T>)instance).Add(stack.Context, arg);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object Remove(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tobject arg = stack.PeekValue(1);\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((EventClass<T>)instance).Remove(stack.Context, arg);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region IPhpDestructable\r\n\r\n    /// <summary>\r\n    /// Interface specifying PHP object with __destruct function defined. Used when PHP class is being emitted.\r\n    /// </summary>\r\n    public interface IPhpDestructable\r\n    {\r\n        /// <summary>\r\n        /// PHP class destructor.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        object __destruct(ScriptContext context);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region PhpObject\r\n\r\n    /// <summary>\r\n\t/// Serves as a base for user defined PHP classes.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    [D.DebuggerNonUserCodeAttribute]\r\n#if !SILVERLIGHT\r\n    [D.DebuggerTypeProxy(typeof(PhpObject.DebugView))]\r\n    [D.DebuggerDisplay(\"object ({this.TypeName,nq})\", Type = \"{this.TypeName,nq}\")]\r\n#endif\r\n    public abstract class PhpObject : DObject\r\n\t{\r\n        #region Debug View\r\n\r\n        [D.DebuggerDisplay(\"object ({this.obj.TypeName,nq})\", Type = \"{this.obj.TypeName,nq}\")]\r\n        internal sealed class DebugView\r\n        {\r\n            [D.DebuggerBrowsable(D.DebuggerBrowsableState.Never)]\r\n            private readonly PhpObject obj;\r\n\r\n            public DebugView(PhpObject obj)\r\n            {\r\n                this.obj = obj;\r\n            }\r\n\r\n            [D.DebuggerBrowsable(D.DebuggerBrowsableState.RootHidden)]\r\n            public PhpHashEntryDebugView[] Items\r\n            {\r\n                get\r\n                {\r\n                    List<PhpHashEntryDebugView> result = new List<PhpHashEntryDebugView>();\r\n\r\n                    for (DTypeDesc desc = obj.TypeDesc; desc != null; desc = desc.Base)\r\n                    {\r\n                        foreach (var field in desc.Properties)\r\n                        {\r\n                            //if (field.Key.Value == PhpObjectBuilder.ProxyFieldName ||\r\n                            //    field.Key.Value == PhpObjectBuilder.TypeDescFieldName)\r\n                            //    continue;\r\n\r\n                            var fielddesc = field.Value;\r\n\r\n                            object value = fielddesc.Get(obj);\r\n                            if (value is PhpReference && !((PhpReference)value).IsAliased) value = ((PhpReference)value).Value;\r\n\r\n                            result.Add(new PhpHashEntryDebugView(new IntStringKey(field.Key.Value), value));\r\n                        }\r\n                    }\r\n\r\n                    if (obj.RuntimeFields != null)\r\n                        foreach (var field in obj.RuntimeFields)\r\n                            result.Add(new PhpHashEntryDebugView(field.Key, field.Value));\r\n\r\n                    return result.ToArray();\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// <see cref=\"PhpObject\"/> is its own real object.\r\n\t\t/// </summary>\r\n        [System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]\r\n        public override object/*!*/ RealObject { get { return this; } }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PhpObject\"/> is passed to its method and property invokes.\r\n        /// </summary>\r\n        [System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]\r\n        public override object InstanceObject { get { return this; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction and initialization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <c>PhpObject</c> and calls its PHP constructors (<c>__construct</c> or PHP 4 style constructor).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The <see cref=\"ScriptContext\"/> to create the instance with.</param>\r\n\t\t/// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the construction.\r\n\t\t/// </param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// This constructor should be used when instantiating PHP classes by the Phalanger compiler. Derived classes must\r\n\t\t/// also contain a constructor with this signature.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// In fact, this very constructor will never be called and is included here just to show how constructors\r\n\t\t/// with this signature whould work in derived classes. Firstly, the <see cref=\"PhpObject(ScriptContext,bool)\"/>\r\n\t\t/// constructor of the same class is invoked in order to initialize all fields along the inheritance hierarchy.\r\n\t\t/// Then the <see cref=\"DObject.InvokeConstructor\"/> method is called in order to locate and invoke a PHP constructor.\r\n\t\t/// There is no <c>base(context, callingTypeHandle)</c> upcall, in particular.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tpublic PhpObject(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: this(context, true)\r\n\t\t{\r\n\t\t\tInvokeConstructor(context, caller);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <c>PhpObject</c> without calling its PHP constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The <see cref=\"ScriptContext\"/> to create the instance with.</param>\r\n\t\t/// <param name=\"newInstance\">Determines whether this instance was created using the <c>new</c> construct\r\n\t\t/// (<B>true</B>), or just as a clone of another instance (<B>false</B>).</param>\r\n\t\t/// <remarks>\r\n\t\t/// This constructor is used when PHP constructors must not be called - when cloning <see cref=\"PhpObject\"/>s\r\n\t\t/// (<paramref name=\"newInstance\"/> is <B>false</B>) and when the caller is going to invoke a PHP constructor\r\n\t\t/// (<paramref name=\"newInstance\"/> is <B>true</B>). Derived classes must also contain a constructor with this\r\n\t\t/// signature.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpObject(ScriptContext context, bool newInstance)\r\n\t\t{\r\n\t\t\tif (newInstance)\r\n\t\t\t{\r\n\t\t\t\t// notify derived classes that a new instance has just been created\r\n\t\t\t\tInstanceCreated(context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Notifies derived classes that this instance has just been created.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Called before <c>__construct</c> is invoked. When overriding, make sure you call the\r\n\t\t/// overriden method (<c>base.InstanceCreated(context)</c>).\r\n\t\t/// </remarks>\r\n\t\tprotected virtual void InstanceCreated(ScriptContext context)\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ToString\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the string representation of this instance.\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected PhpObject(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{ }\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpReference.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n\t/// Represents a PHP reference.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    [DebuggerDisplay(\"&{this.Value}\", Type = \"&{PHP.Core.PhpVariable.GetTypeName(this.Value),nq}\")]\r\n    [DebuggerNonUserCode]\r\n\t[DebuggerTypeProxy(typeof(DebuggerProxy))]\r\n\tpublic class PhpReference : IPhpVariable, ICloneable, IPhpObjectGraphNode\r\n\t{\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public const string PhpTypeName = \"reference\";\r\n\r\n\t    private string DebugView()\r\n\t    {\r\n\t\t    if (Value == null)\r\n\t\t\t    return null;\r\n\t\t    return Value.ToString();\r\n\t    }\r\n\r\n\t    #region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// Referenced object.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n        public object Value\r\n\t\t{\r\n\t\t\t[Emitted]\r\n\t\t\tget { return value; }\r\n\t\t\t[Emitted]\r\n\t\t\tset { Debug.Assert(!(value is PhpReference)); this.value = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Referenced object. For internal use only. Use property <see cref=\"Value\"/> to access the value.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n\t\t[Emitted]\r\n\t\tpublic object value; // an address is required to be taken\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference()\r\n\t\t{\r\n\t\t\tthis.value = null;\r\n\t\t}\r\n\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference(object value)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(value is PhpReference));\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\tinternal PhpReference(object value, bool supressDoubleRefCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(supressDoubleRefCheck || !(value is PhpReference));\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"PhpReference\"/> and\r\n        /// assigns this new instance into <paramref name=\"value\"/>.\r\n        /// </summary>\r\n        /// <param name=\"value\">Value to be wrapped into new instance of <see cref=\"PhpReference\"/> and\r\n        /// then it will be overwritten by the reference to this new instance.</param>\r\n        internal PhpReference(ref object value)\r\n            :this(value)\r\n        {\r\n            value = this;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IsAliased, IsSet\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B>. Overriden in <see cref=\"PhpSmartReference\"/>.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public virtual bool IsAliased\r\n\t\t{\r\n\t\t\tget { return true; }\r\n\t\t\t[Emitted]\r\n\t\t\tset { Debug.Assert(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B>. Overriden in <see cref=\"PhpSmartReference\"/>.\r\n\t\t/// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public virtual bool IsSet\r\n\t\t{\r\n\t\t\t[Emitted]\r\n\t\t\tget { return true; }\r\n\t\t\t[Emitted]\r\n\t\t\tset { Debug.Assert(value); }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible Members\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"GetTypeCode\"]/*' />\r\n\t\tpublic PHP.Core.PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.PhpReference;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToDouble\"]/*' />\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToDouble(value);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToInteger\"]/*' />\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToInteger(value);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToInteger\"]/*' />\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToLongInteger(value);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToBoolean\"]/*' />\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToBoolean(value);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToPhpBytes\"]/*' />\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToPhpBytes(value);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToNumber\"]/*' />\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\treturn Convert.ObjectToNumber(value, out intValue, out longValue, out doubleValue);\r\n\t\t}\r\n\r\n\t\tstring IPhpConvertible.ToString()\r\n\t\t{\r\n            return Convert.ObjectToString(value);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = false;\r\n            return ((IPhpConvertible)this).ToString();\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"&\" + ((value != null) ? value.ToString() : PhpVariable.TypeNameNull);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable Members\r\n\r\n\t\t/*\r\n\t\t  NOTES:\r\n\t\t  - We don't print an ampersand nor other text before a referenced value because \r\n\t\t\tPHP doesn't do so and, most importantly, a compiler uses variables of type PhpReferences \r\n\t\t\te.g. for global variables which may never be used as a reference by a user \r\n\t\t\t(via =& operator). If references were not transparent user may be confused by \r\n\t\t\tmarking them by an ampersand.\r\n\t\t  - Hence references are marked by ampersand by PhpArrays and PhpObjects on their own.\r\n\t\t*/\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a value which is referenced by this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output where the value is printed.</param>\r\n\t\tpublic void Print(System.IO.TextWriter output)\r\n\t\t{\r\n         \tPhpVariable.Print(output, value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dumps a value which is referenced by this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output where the value is printed.</param>\r\n\t\tpublic void Dump(System.IO.TextWriter output)\r\n\t\t{\r\n            output.Write(\"&\");\r\n\t\t\tPhpVariable.Dump(output, value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Exports a value which is referenced by this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output where the value is printed.</param>\r\n\t\tpublic void Export(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tPhpVariable.Export(output, value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a copy of this instance. \r\n\t\t/// </summary>\r\n\t\t/// <returns>This instance.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Actually, references are not copied and this instance is returned instead.\r\n\t\t/// That is because deep-copying stops on references in PHP.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual object DeepCopy()\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a copy of this instance. \r\n\t\t/// </summary>\r\n\t\t/// <returns>This instance.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Actually references are not copied and this instance is returned instead.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual object Copy(CopyReason reason)\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICloneable Members\r\n\r\n\t\tpublic object Clone()\r\n\t\t{\r\n\t\t\tICloneable cloneable = value as ICloneable;\r\n\t\t\treturn new PhpReference((cloneable != null) ? cloneable.Clone() : value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares a referenced object with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Compares a referenced object with <paramref name=\"obj\"/> and returns the result.\r\n\t\t/// </remarks>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj, System.Collections.IComparer comparer)\r\n\t\t{\r\n            return comparer.Compare(value, obj);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Compares a referenced object with <paramref name=\"obj\"/> and returns the result.\r\n\t\t/// </remarks>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpVariable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether this instance is empty.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether a referenced object is empty.</returns>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\treturn PhpVariable.IsEmpty(value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether <see cref=\"PhpReference\"/> is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether a referenced object is a scalar.</returns>\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn PhpVariable.IsScalar(value);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a name of declaring type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n\t\tpublic string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpVariable.GetTypeName(value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpObjectGraphNode Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Walk(PhpWalkCallback callback, ScriptContext context)\r\n\t\t{\r\n\t\t\tIPhpObjectGraphNode node = value as IPhpObjectGraphNode;\r\n\t\t\tif (node != null)\r\n\t\t\t{\r\n\t\t\t\tvalue = callback(node, context);\r\n\t\t\t\tnode = value as IPhpObjectGraphNode;\r\n\r\n\t\t\t\tif (node != null) node.Walk(callback, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Helpers\r\n\r\n        public static T AsType<T>(PhpReference variable) where T : class\r\n        {\r\n            return (variable != null) ? variable.Value as T : null;\r\n        }\r\n\r\n        public static PhpArray AsPhpArray(PhpReference variable)\r\n        {\r\n            return AsType<PhpArray>(variable);\r\n        }\r\n\r\n\t\tpublic static void SetValue(ref PhpReference variable, object value)\r\n\t\t{\r\n\t\t\tif (variable == null)\r\n\t\t\t\tvariable = new PhpReference(value);\r\n\t\t\telse\r\n\t\t\t\tvariable.Value = value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t    private class DebuggerProxy\r\n\t    {\r\n\t\t\t\tprivate PhpReference _reference;\r\n\t\t    public DebuggerProxy(PhpReference reference)\r\n\t\t    {\r\n\t\t\t    _reference = reference;\r\n\t\t    }\r\n\t\t\t\t[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n\t\t\t\tpublic object Value { get { return _reference.Value; } }\r\n\t    }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a PHP reference that remembers whether it is pointed to by more than one location\r\n\t/// (i.e. whether it really is a reference).\r\n\t/// </summary>\r\n\t[Serializable, DebuggerNonUserCodeAttribute]\r\n\tpublic sealed class PhpSmartReference : PhpReference\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t[Flags]\r\n\t\tprivate enum ReferenceFlags : byte\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>true</B> if this <see cref=\"PhpSmartReference\"/> is referenced from more than one location,\r\n\t\t\t/// <B>false</B> otherwise.\r\n\t\t\t/// </summary>\r\n\t\t\tIsAliased = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>true</B> if the <see cref=\"PhpReference.value\"/> of this <see cref=\"PhpSmartReference\"/> is set,\r\n\t\t\t/// <B>false</B> otherwise.\r\n\t\t\t/// </summary>\r\n\t\t\tIsSet = 2\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Contains the <see cref=\"ReferenceFlags.IsAliased\"/> and <see cref=\"ReferenceFlags.IsSet\"/> flags.\r\n\t\t/// </summary>\r\n\t\tprivate ReferenceFlags flags;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic PhpSmartReference()\r\n\t\t\t: base()\r\n\t\t{ flags = ReferenceFlags.IsSet; }\r\n\r\n\t\tpublic PhpSmartReference(object value)\r\n\t\t\t: base(value)\r\n\t\t{ flags = ReferenceFlags.IsSet; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IsAliased, IsSet\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if this <see cref=\"PhpSmartReference\"/> is referenced from more than one location,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsAliased\r\n\t\t{\r\n\t\t\tget { return ((flags & ReferenceFlags.IsAliased) != 0); }\r\n\t\t\tset { if (value) flags |= ReferenceFlags.IsAliased; else flags &= ~ReferenceFlags.IsAliased; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if the <see cref=\"PhpReference.value\"/> of this <see cref=\"PhpSmartReference\"/> is set,\r\n\t\t/// <B>false</B> otherwise.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsSet\r\n\t\t{\r\n\t\t\tget { return ((flags & ReferenceFlags.IsSet) != 0); }\r\n\t\t\tset { if (value) flags |= ReferenceFlags.IsSet; else flags &= ~ReferenceFlags.IsSet; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Overriden Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a deep copy of this instance. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If this <see cref=\"PhpSmartReference\"/> <see cref=\"IsAliased\"/>, this instance is returned without copying.\r\n\t\t/// That is because deep copying stops on references in PHP. If this instance's <see cref=\"IsAliased\"/> is\r\n\t\t/// <B>false</B>, a new <see cref=\"PhpSmartReference\"/> referencing a deep copy of the current value is returned.\r\n\t\t/// </remarks>\r\n\t\tpublic override object DeepCopy()\r\n\t\t{\r\n            return IsAliased ? this : new PhpSmartReference(PhpVariable.DeepCopy(value));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a copy of this instance. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If this <see cref=\"PhpSmartReference\"/> <see cref=\"IsAliased\"/>, this instance is returned without copying.\r\n\t\t/// That is because (deep) copying stops on references in PHP. If this instance is not <see cref=\"IsAliased\"/>,\r\n\t\t/// a new <see cref=\"PhpSmartReference\"/> referencing a copy of the current value is returned.\r\n\t\t/// </remarks>\r\n\t\tpublic override object Copy(CopyReason reason)\r\n\t\t{\r\n            return IsAliased ? this : new PhpSmartReference(PhpVariable.Copy(value, reason));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpResource.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Collections;\r\nusing System.Runtime.Serialization;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Base class for PHP Resources - both built-in and extension-resources.\r\n\t/// Resources rely on GC Finalization - override FreeManaged for cleanup.\r\n\t/// When printing a resource variable in PHP, \"Resource id #x\" prints out.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic class PhpResource : IDisposable, IPhpVariable, ISerializable, IPhpObjectGraphNode\r\n\t{\r\n\t\t/// <summary>The name of this variable type.</summary>\r\n\t\tpublic const string PhpTypeName = \"resource\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Handles deserialization of <see cref=\"PhpResource\"/> instances in cases when the instance was serialized\r\n\t\t/// with <see cref=\"StreamingContextStates.Persistence\"/>\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n\t\tinternal class Deserializer : IObjectReference\r\n\t\t{\r\n\t\t\t#region IObjectReference Members\r\n\r\n\t\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetRealObject\"]/*'/>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// All PHP resources are deserialized as integer 0.\r\n\t\t\t/// </remarks>\r\n\t\t\tpublic object GetRealObject(StreamingContext context)\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Allocate a unique identifier for a resource.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Internal resources are given even numbers while resources\r\n\t\t/// allocated by extensions get odd numbers to minimize the communication\r\n\t\t/// between internal and external resource managers.\r\n\t\t/// </remarks>\r\n\t\t/// <returns>The unique identifier of an internal resource (even number starting from 2).</returns>\r\n\t\tprivate static int RegisterInternalInstance()\r\n\t\t{\r\n\t\t\tInterlocked.Increment(ref PhpResource.ResourceIdCounter);\r\n\r\n\t\t\t// Even numbers are reserved for internal use (odd for externals)\r\n\t\t\treturn PhpResource.ResourceIdCounter * 2;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a new instance with the given Id. Used by <see cref=\"PhpExternalResource\"/>s.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resourceId\">Unique resource identifier (odd for external resources).</param>\r\n\t\t/// <param name=\"resourceTypeName\">The type to be reported to use when dumping a resource.</param>\r\n        /// <param name=\"registerInReqContext\">Whether to register this instance in current <see cref=\"RequestContext\"/>. Should be <c>false</c> for static resources.</param>\r\n\t\tprotected PhpResource(int resourceId, String resourceTypeName, bool registerInReqContext)\r\n\t\t{\r\n\t\t\tthis.mResourceId = resourceId;\r\n\t\t\tthis.mTypeName = resourceTypeName;\r\n\r\n            if (registerInReqContext)\r\n            {\r\n                // register this resource into PhpResourceManager,\r\n                // so the resource will be automatically disposed at the request end.\r\n                this.reqContextRegistrationNode = PhpResourceManager.RegisterResource(this);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Create a new instance with the given Id. Used by <see cref=\"PhpExternalResource\"/>s.\r\n        /// </summary>\r\n        /// <param name=\"resourceId\">Unique resource identifier (odd for external resources).</param>\r\n        /// <param name=\"resourceTypeName\">The type to be reported to use when dumping a resource.</param>\r\n        protected PhpResource(int resourceId, String resourceTypeName)\r\n            : this(resourceId, resourceTypeName, true) { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create a new instance of a given Type and Name.\r\n\t\t/// The instance Id is auto-incrementing starting from 1.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resourceTypeName\">The type to be reported to use when dumping a resource.</param>\r\n        public PhpResource(String resourceTypeName)\r\n            : this(resourceTypeName, true) { }\r\n\r\n        /// <summary>\r\n        /// Create a new instance of a given Type and Name.\r\n        /// The instance Id is auto-incrementing starting from 1.\r\n        /// </summary>\r\n        /// <param name=\"resourceTypeName\">The type to be reported to use when dumping a resource.</param>\r\n        /// <param name=\"registerInReqContext\">Whether to register this instance in current <see cref=\"RequestContext\"/>. Should be <c>false</c> for static resources.</param>\r\n        public PhpResource(String resourceTypeName, bool registerInReqContext)\r\n            : this(PhpResource.RegisterInternalInstance(), resourceTypeName, registerInReqContext)\r\n        { }\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected PhpResource(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tmDisposed = info.GetBoolean(\"mDisposed\");\r\n\t\t\tmResourceId = info.GetInt32(\"mResourceId\");\r\n\t\t\tmTypeName = info.GetString(\"mTypeName\");\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new invalid resource.\r\n\t\t/// </summary>\r\n\t\tinternal PhpResource()\r\n\t\t{\r\n\t\t\tmDisposed = true;\r\n\t\t\tmTypeName = DisposedTypeName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a string that represents the current PhpResource.\r\n\t\t/// </summary>\r\n\t\t/// <returns>'Resource id #ID'</returns>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn String.Concat(PhpTypeName + \" id #\", this.mResourceId.ToString());\r\n\t\t}\r\n\r\n\t\t#region Finalization & Dispose Pattern\r\n\r\n\t\t/// <summary>\r\n\t\t/// The finalizer.\r\n\t\t/// </summary>\r\n\t\t~PhpResource()\r\n\t\t{\r\n\t\t\tDispose(false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// An alias of <see cref=\"Dispose\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic virtual void Close()\r\n\t\t{\r\n\t\t\tDispose();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dosposes the resource.\r\n\t\t/// </summary>\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\tGC.SuppressFinalize(this);\r\n\t\t\tDispose(true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Cleans-up the resource.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// When disposing non-deterministically, only unmanaged resources should be freed. \r\n\t\t/// <seealso cref=\"FreeUnmanaged\"/>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"disposing\">Whether the resource is disposed deterministically.</param>\r\n\t\tprivate void Dispose(bool disposing)\r\n\t\t{\r\n\t\t\tif (!this.mDisposed)\r\n\t\t\t{\r\n\t\t\t\tthis.mDisposed = true;\r\n\r\n\t\t\t\t// dispose managed resources:\r\n\t\t\t\tif (disposing)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.FreeManaged();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// dispose unmanaged resources (\"unfinalized\"):\r\n\t\t\t\tthis.FreeUnmanaged();\r\n\r\n                // unregister from the RequestContext\r\n                this.UnregisterResource();\r\n\t\t\t}\r\n\r\n\t\t\t// shows the user this Resource is no longer valid:\r\n\t\t\tthis.mTypeName = PhpResource.DisposedTypeName;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Unregister this instance of <see cref=\"PhpResource\"/> from current <see cref=\"RequestContext\"/>.\r\n        /// </summary>\r\n        private void UnregisterResource()\r\n        {\r\n            if (this.reqContextRegistrationNode != null)\r\n            {\r\n                PhpResourceManager.UnregisterResource(this.reqContextRegistrationNode);\r\n                this.reqContextRegistrationNode = null;\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Override this virtual method in your descendants to perform \r\n\t\t/// cleanup of Managed resources - those having a Finalizer of their own.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Note that when Disposing explicitly, both FreeManaged and FreeUnmanaged are called.\r\n\t\t/// </remarks>\r\n\t\tprotected virtual void FreeManaged()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Override this virtual method to cleanup the contained unmanaged objects.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Note that when Dispose(false) is called from the Finalizer,\r\n\t\t/// the order of finalization is random. In other words, contained\r\n\t\t/// managed objects may have been already finalized - don't reference them.\r\n\t\t/// </remarks>\r\n\t\tprotected virtual void FreeUnmanaged()\r\n\t\t{\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>Identifier of a PhpResource instance. Unique index starting at 1</summary>\r\n\t\tpublic int Id { get { return mResourceId; } }\r\n\r\n\t\t// <summary>Type of PhpResource - used by extensions and get_resource_type()</summary>\r\n\t\t//REMoved public int Type { get { return mType; }}\r\n\r\n\t\t/// <summary>Type resource name - string to be reported to user when dumping a resource.</summary>\r\n\t\tpublic String TypeName { get { return mTypeName; } }\r\n\r\n\t\t/// <summary>false if the resource has been already disposed</summary>\r\n\t\tpublic bool IsValid { get { return !this.mDisposed; } }\r\n\r\n\t\t/// <summary>Unique resource identifier (even for internal resources, odd for external ones).</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Internal resources are given even numbers while resources\r\n\t\t/// allocated by extensions get odd numbers to minimize the communication\r\n\t\t/// between internal and external resource managers.\r\n\t\t/// </remarks>\r\n\t\tprotected int mResourceId;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Type resource name - string to be reported to user when dumping a resource.\r\n\t\t/// </summary>\r\n\t\tprotected String mTypeName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set in Dispose to avoid multiple cleanup attempts.\r\n\t\t/// </summary>\r\n\t\tprivate bool mDisposed = false;\r\n\r\n        /// <summary>\r\n        /// If this resource is registered into <see cref=\"RequestContext\"/>, this points into linked list containing registered resources.\r\n        /// </summary>\r\n        private System.Collections.Generic.LinkedListNode<WeakReference> reqContextRegistrationNode;\r\n\r\n\t\t/// <summary>Static counter for unique PhpResource instance Id's</summary>\r\n\t\tprivate static int ResourceIdCounter = 0;\r\n\r\n\t\t/// <summary>The resources' TypeName to be displayed after call to Dispose</summary>\r\n\t\tprivate static String DisposedTypeName = \"Unknown\";\r\n\r\n\t\t#region IPhpVariable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines emptiness of the <see cref=\"PhpResource\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>false</B>. A valid resource is never empty.</returns>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\treturn !this.IsValid;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether <see cref=\"PhpResource\"/> is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>false</B></returns>\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a name of declaring type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n\t\tpublic string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\t/// <summary>Creates a copy of this instance.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Instances of the PhpResource class are never cloned.\r\n\t\t/// When assigning a resource to another variable in a script,\r\n\t\t/// only a shallow copy is performed.\r\n\t\t/// </remarks>\r\n\t\t/// <returns>The copy of this instance.</returns>\r\n\t\tpublic object Copy(CopyReason reason)\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t/// <summary>Creates a copy of this instance.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Instances of the PhpResource class are never cloned.\r\n\t\t/// When assigning a resource to another variable in a script,\r\n\t\t/// only a shallow copy is performed.\r\n\t\t/// </remarks>\r\n\t\t/// <returns>The copy of this instance.</returns>\r\n\t\tpublic object DeepCopy()\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// When compared with other PHP variables, PhpResource behaves like \r\n\t\t/// its integer representation, i.e. the resource ID (except of the === operator).\r\n\t\t/// </remarks>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*' />\r\n\t\tpublic int CompareTo(object obj, IComparer/*!*/ comparer)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null);\r\n            return comparer.Compare(this.mResourceId, obj);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable interface\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints values only.\r\n\t\t/// 'Resource id #ID'\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\tpublic void Print(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.WriteLine(ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints types and values.\r\n\t\t/// 'resource(ID) of type(TYPE)'\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\tpublic void Dump(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.WriteLine(\"resource({0}) of type ({1})\", this.mResourceId, this.mTypeName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints object's definition in PHP language.\r\n\t\t/// 'NULL' - unexportable\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\tpublic void Export(TextWriter output)\r\n\t\t{\r\n\t\t\toutput.Write(\"NULL\");\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible Members\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"GetTypeCode\"]/*' />\r\n\t\tpublic PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.PhpResource;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToInteger\"]/*' />\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n\t\t\treturn this.IsValid ? this.mResourceId : 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <c>0</c>.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>0</c></returns>\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n\t\t\treturn this.IsValid ? this.mResourceId : 0;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToDouble\"]/*' />\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn this.IsValid ? this.mResourceId : 0;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToBoolean\"]/*' />\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn this.IsValid;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Conversions.xml' path='docs/method[@name=\"ToPhpBytes\"]/*' />\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn new PhpBytes(ToString());\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = false;\r\n\t\t\treturn ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts instance to a number of type <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doubleValue\">The resource id.</param>\r\n\t\t/// <param name=\"intValue\">The resource id.</param>\r\n\t\t/// <param name=\"longValue\">The resource id.</param>\r\n\t\t/// <returns><see cref=\"Convert.NumberInfo.Integer\"/>.</returns>\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\tdoubleValue = this.mResourceId;\r\n\t\t\tintValue = this.mResourceId;\r\n\t\t\tlongValue = this.mResourceId;\r\n\t\t\treturn Convert.NumberInfo.Integer;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ISerializable Members\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetObjectData\"]/*'/>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tif ((context.State & StreamingContextStates.Persistence) == StreamingContextStates.Persistence\r\n\t\t\t\t|| !typeof(PhpExternalResource).IsInstanceOfType(this))\r\n\t\t\t{\r\n\t\t\t\t// serialization is requested by user via the serialize() PHP function\r\n\t\t\t\tinfo.SetType(typeof(Deserializer));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// serialization is requested by Remoting and this this is a PhpExternalResource\r\n\t\t\t\tinfo.AddValue(\"mDisposed\", mDisposed);\r\n\t\t\t\tinfo.AddValue(\"mResourceId\", mResourceId);\r\n\t\t\t\tinfo.AddValue(\"mTypeName\", mTypeName);\r\n\t\t\t}\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpObjectGraphNode Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Walk(PhpWalkCallback callback, ScriptContext context)\r\n\t\t{\r\n\t\t\t// PhpResources have no child objects, however as they constitute an interesting PHP type,\r\n\t\t\t// IPhpObjectGraphNode is implemented\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a resource that was created by an extension and lives in <c>ExtManager</c>.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic class PhpExternalResource : PhpResource\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpExternalResource\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resourceId\">The resource ID assigned by the external resource manager.</param>\r\n\t\t/// <param name=\"typeName\">The resource type name.</param>\r\n\t\tpublic PhpExternalResource(int resourceId, string typeName)\r\n\t\t\t: base(resourceId * 2 + 1, typeName)\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the resource ID given when creating this instance.\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"PhpExternalResource(int,string)\"/></remarks>\r\n\t\t/// <returns>The resource ID.</returns>\r\n\t\tpublic int GetId()\r\n\t\t{\r\n\t\t\treturn mResourceId / 2;\r\n\t\t}\r\n\r\n\t\t#region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected PhpExternalResource(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{ }\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpResourceManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// Manages active <see cref=\"PhpResource\"/> instances across the current thread.\r\n    /// </summary>\r\n    internal sealed class PhpResourceManager\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Lazily initialized list of <see cref=\"PhpResource\"/>s created during this web request.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// The resources are disposed of when the request is over.\r\n        /// <seealso cref=\"RegisterResource\"/><seealso cref=\"CleanUpResources\"/>\r\n        /// </remarks>\r\n        [ThreadStatic]\r\n        private static LinkedList<WeakReference> resources;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        static PhpResourceManager()\r\n        {\r\n            // Registers the cleanup function to the request end event,\r\n            // so any pending resources will be automatically closed.\r\n            RequestContext.RequestEnd += CleanUpResources;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region RegisterResource, UnregisterResource, CleanupResources\r\n\r\n        /// <summary>\r\n        /// Registers a resource that should be disposed of when the request is over.\r\n        /// </summary>\r\n        /// <param name=\"res\">The resource.</param>\r\n        internal static LinkedListNode<WeakReference> RegisterResource(PhpResource/*!*/res)\r\n        {\r\n            Debug.Assert(res != null);\r\n            //Debug.Assert(this method can only be called on the request thread)\r\n\r\n            if (resources == null)\r\n                resources = new LinkedList<WeakReference>();\r\n\r\n            return resources.AddFirst(new WeakReference(res));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unregisters disposed resource.\r\n        /// </summary>\r\n        internal static void UnregisterResource(LinkedListNode<WeakReference>/*!*/node)\r\n        {\r\n            Debug.Assert(node != null);\r\n            \r\n            node.List.Remove(node); // node.list == resources\r\n        }\r\n\r\n        /// <summary>\r\n        /// Disposes of <see cref=\"PhpResource\"/>s created during this web request.\r\n        /// </summary>\r\n        internal static void CleanUpResources()\r\n        {\r\n            if (resources != null)\r\n            {\r\n                for (var p = resources.First; p != null; )\r\n                {\r\n                    var next = p.Next;\r\n                    if (p.Value.IsAlive)\r\n                    {\r\n                        var phpresource = (PhpResource)p.Value.Target;\r\n                        if (phpresource != null)\r\n                            phpresource.Close();\r\n                    }\r\n                    p = next;\r\n                }\r\n\r\n                resources = null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpRuntimeChain.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region RuntimeChainElement\r\n\r\n\t/// <summary>\r\n\t/// An abstract element of <see cref=\"PhpRuntimeChain\"/>.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic abstract class RuntimeChainElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Applies the element on a given variable (<B>Read</B> semantics).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"caller\">Class context.</param>\r\n\t\t/// <returns>The resulting value.</returns>\r\n\t\tpublic abstract object Get(object var, ScriptContext context, DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the element on a given variable (<B>ReadRef</B> semantics).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"caller\">Class context.</param>\r\n\t\t/// <returns>The resulting value.</returns>\r\n\t\tpublic abstract PhpReference GetRef(ref object var, ScriptContext context, DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs the ensure operation on an variable to make it suitable for current element application.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"caller\">Class context.</param>\r\n\t\t/// <returns>The new variable value.</returns>\r\n\t\tpublic abstract object EnsureVariable(ref object var, ScriptContext context, DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n        /// Performs the ensure operation on this element to make it suitable for <see cref=\"Next\"/> element\r\n\t\t/// application.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"caller\">Class context.</param>\r\n\t\t/// <returns>The new element value.</returns>\r\n\t\tpublic abstract object Ensure(object var, ScriptContext context, DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the element on a given variable (<B>ReadRef</B> semantics) that has already been ensured to have\r\n\t\t/// the suitable type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"caller\">Class context.</param>\r\n\t\t/// <returns>The resulting value.</returns>\r\n\t\tpublic abstract PhpReference GetEnsuredRef(object var, ScriptContext context, DTypeDesc caller);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the chain element.\r\n\t\t/// </summary>\r\n\t\tpublic abstract object Name\r\n\t\t{\r\n\t\t\tget;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Next <see cref=\"RuntimeChainElement\"/> in the chain.\r\n\t\t/// </summary>\r\n\t\tpublic RuntimeChainElement Next;\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RuntimeChainProperty\r\n\r\n\t/// <summary>\r\n\t/// Represents an object property access (<B>-&gt;</B>).\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic class RuntimeChainProperty : RuntimeChainElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"RuntimeChainProperty\"/> with a given name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The field name.</param>\r\n\t\tpublic RuntimeChainProperty(string name)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the field access on a given variable (<B>Read</B> semantics).\r\n\t\t/// </summary>\r\n\t\tpublic override object Get(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.GetProperty(var, name, caller, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the field access on a given variable (<B>ReadRef</B> semantics).\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetRef(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.GetPropertyRef(ref var, name, caller, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs the ensure operation on an variable to make it a <see cref=\"DObject\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override object EnsureVariable(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.EnsureVariableIsObject(ref var, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Performs the ensure operation on this field to make it suitable for <see cref=\"RuntimeChainElement.Next\"/> element\r\n\t\t/// application.\r\n\t\t/// </summary>\r\n\t\tpublic override object Ensure(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tDebug.Assert(Next is RuntimeChainProperty || Next is RuntimeChainItem || Next is RuntimeChainNewItem);\r\n\r\n\t\t\tif (Next is RuntimeChainProperty) return Operators.EnsurePropertyIsObject((DObject)var, name, caller, context);\r\n\t\t\telse return Operators.EnsurePropertyIsArray((DObject)var, name, caller);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the field access on a given variable (<B>ReadRef</B> semantics) that has already been ensured to\r\n\t\t/// be <see cref=\"DObject\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetEnsuredRef(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.GetObjectPropertyRef((DObject)var, name, caller);\r\n\t\t}\r\n\r\n\t\t/// <summary>The name of the property.</summary>\r\n\t\tprivate string name;\r\n\r\n\t\t/// <summary>Returns the name of the property.</summary>\r\n\t\tpublic override object Name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return name; }\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RuntimeChainItem\r\n\r\n\t/// <summary>\r\n\t/// Represents an array item access (<B>[x]</B>).\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic class RuntimeChainItem : RuntimeChainElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the item (index).\r\n\t\t/// </summary>\r\n\t\tpublic override object Name \r\n\t\t{ \r\n\t\t\tget { return key.Object; } \r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// The key.\r\n\t\t/// </summary>\r\n\t\tprivate IntStringKey key;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"RuntimeChainItem\"/> with a given key.\r\n\t\t/// </summary>\r\n\t\tpublic RuntimeChainItem(IntStringKey key)\r\n\t\t{\r\n\t\t\tthis.key = key;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the item access on a given variable (<B>Read</B> semantics).\r\n\t\t/// </summary>\r\n\t\tpublic override object Get(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tif (key.IsString)\r\n\t\t\t\treturn Operators.GetItem(var, key.String, Operators.GetItemKinds.Get);\r\n\t\t\telse\r\n\t\t\t\treturn Operators.GetItem(var, key.Integer, Operators.GetItemKinds.Get);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the item access on a given variable (<B>ReadRef</B> semantics).\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetRef(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.GetItemRef(Name, ref var);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs the ensure operation on an variable to make it a <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override object EnsureVariable(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.EnsureVariableIsArray(ref var);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Performs the ensure operation on this item to make it suitable for <see cref=\"RuntimeChainElement.Next\"/> element\r\n\t\t/// application.\r\n\t\t/// </summary>\r\n\t\tpublic override object Ensure(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tDebug.Assert(Next is RuntimeChainProperty || Next is RuntimeChainItem || Next is RuntimeChainNewItem);\r\n\r\n\t\t\tif (Next is RuntimeChainProperty) \r\n\t\t\t\treturn ((PhpArray)var).EnsureItemIsObject(Name, context);\r\n\t\t\telse \r\n\t\t\t\treturn ((PhpArray)var).EnsureItemIsArray(Name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the item access on a given variable (<B>ReadRef</B> semantics) that has already been ensured to\r\n\t\t/// be <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetEnsuredRef(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn ((PhpArray)var).GetArrayItemRef(Name);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RuntimeChainNewItem\r\n\r\n\t/// <summary>\r\n\t/// Represents an array item access (<B>[]</B>).\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic class RuntimeChainNewItem : RuntimeChainElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"RuntimeChainNewItem\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic RuntimeChainNewItem()\r\n\t\t{ }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws an error because <B>[]</B> cannot be used in read context.\r\n\t\t/// </summary>\r\n\t\tpublic override object Get(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Error, CoreResources.operator_array_access_used_for_reading);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the new item access on a given variable (<B>ReadRef</B> semantics).\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetRef(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tPhpReference reference = new PhpReference();\r\n\t\t\tOperators.SetItem(reference, ref var);\r\n\t\t\treturn reference;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs the ensure operation on an variable to make it a <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override object EnsureVariable(ref object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn Operators.EnsureVariableIsArray(ref var);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Performs the ensure operation on the new item to make it suitable for <see cref=\"RuntimeChainElement.Next\"/> element\r\n\t\t/// application.\r\n\t\t/// </summary>\r\n\t\tpublic override object Ensure(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tDebug.Assert(Next is RuntimeChainProperty || Next is RuntimeChainItem || Next is RuntimeChainNewItem);\r\n\r\n\t\t\tif (Next is RuntimeChainProperty)\r\n\t\t\t{\r\n\t\t\t\tDObject std = Library.stdClass.CreateDefaultObject(context);\r\n\t\t\t\t((PhpArray)var).Add(std);\r\n\t\t\t\treturn std;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpArray arr = new PhpArray();\r\n\t\t\t\t((PhpArray)var).Add(arr);\r\n\t\t\t\treturn arr;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Applies the new item access on a given variable (<B>ReadRef</B> semantics) that has already been ensured to\r\n\t\t/// be <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override PhpReference GetEnsuredRef(object var, ScriptContext context, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tPhpReference reference = new PhpReference();\r\n\t\t\t((PhpArray)var).Add(reference);\r\n\t\t\treturn reference;\r\n\t\t}\r\n\r\n\t\t/// <summary>Returns <B>null</B> as new item (<B>[]</B>) has no name.</summary>\r\n\t\tpublic override object Name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpRuntimeChain\r\n\t\r\n\t/// <summary>\r\n\t/// Represents an operator chain at runtime.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// When a compile-time unknown function invocation is encountered and it has a complex parameter consisting of\r\n\t/// an operator chain, evaluation of the chain must be postponed to run-time. Only at run-time it becomes\r\n\t/// clear whether the chain's outcome should be an object or a <see cref=\"PhpReference\"/> (formal parameter\r\n\t/// equipped with the <B>&amp;</B>) which leads to somewhat different evaluation procedure.\r\n\t/// </remarks>\r\n\t[Serializable]\r\n\tpublic class PhpRuntimeChain\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpRuntimeChain\"/> operating on a given variable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\tpublic PhpRuntimeChain(object var)\r\n\t\t{\r\n\t\t\tthis.Variable = var;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"PhpRuntimeChain\"/> operating on a given variable in a given class context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The variable.</param>\r\n\t\t/// <param name=\"caller\">The class context.</param>\r\n\t\tpublic PhpRuntimeChain(object var, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tthis.Variable = var;\r\n\t\t\tthis.Caller = caller;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extends this chain with an object field access.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the field.</param>\r\n\t\t[Emitted]\r\n\t\tpublic void AddField(string name)\r\n\t\t{\r\n\t\t\tif (lastElement != null)\r\n\t\t\t{\r\n\t\t\t\tRuntimeChainElement element = new RuntimeChainProperty(name);\r\n\t\t\t\tlastElement.Next = element;\r\n\t\t\t\tlastElement = element;\r\n\t\t\t}\r\n\t\t\telse Chain = lastElement = new RuntimeChainProperty(name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extends this chain with an array item access.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the item (index).</param>\r\n\t\t[Emitted]\r\n\t\tpublic void AddItem(object name)\r\n\t\t{\r\n\t\t\tIntStringKey key;\r\n\t\t\tif (Convert.ObjectToArrayKey(name, out key))\r\n\t\t\t{\r\n\t\t\t\tif (lastElement != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tRuntimeChainElement element = new RuntimeChainItem(key);\r\n\t\t\t\t\tlastElement.Next = element;\r\n\t\t\t\t\tlastElement = element;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tChain = lastElement = new RuntimeChainItem(key);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tPhpException.IllegalOffsetType();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extends this chain with a &quot;new field item&quot; (<B>[]</B>) access.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic void AddItem()\r\n\t\t{\r\n\t\t\tif (lastElement != null)\r\n\t\t\t{\r\n\t\t\t\tRuntimeChainElement element = new RuntimeChainNewItem();\r\n\t\t\t\tlastElement.Next = element;\r\n\t\t\t\tlastElement = element;\r\n\t\t\t}\r\n\t\t\telse Chain = lastElement = new RuntimeChainNewItem();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extends this chain with a <see cref=\"RuntimeChainElement\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"element\">The element.</param>\r\n\t\tpublic void Add(RuntimeChainElement element)\r\n\t\t{\r\n\t\t\tif (lastElement != null)\r\n\t\t\t{\r\n\t\t\t\tlastElement.Next = element;\r\n\t\t\t\tlastElement = element;\r\n\t\t\t}\r\n\t\t\telse Chain = lastElement = element;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Evaluates this chain as if it had the <see cref=\"PHP.Core.Compiler.AST.AccessType.Read\"/> access type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current script context.</param>\r\n\t\t/// <returns>The result of chain evaluation.</returns>\r\n\t\tpublic object GetValue(ScriptContext context)\r\n\t\t{\r\n\t\t\t// dereference the PhpReference\r\n\t\t\tobject var = PhpVariable.Dereference(Variable);\r\n\r\n\t\t\tRuntimeChainElement element = Chain;\r\n\t\t\twhile (element != null)\r\n\t\t\t{\r\n\t\t\t\t// GetProperty/GetItem\r\n\t\t\t\tvar = element.Get(var, context, Caller);\r\n\t\t\t\telement = element.Next;\r\n\t\t\t}\r\n\t\t\treturn var;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Evaluates this chain as if it had the <see cref=\"PHP.Core.Compiler.AST.AccessType.ReadRef\"/> access type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current script context.</param>\r\n\t\t/// <returns>The result of chain evaluation.</returns>\r\n\t\tpublic PhpReference GetReference(ScriptContext context)\r\n\t\t{\r\n\t\t\tPhpReference reference;\r\n\r\n\t\t\tRuntimeChainElement element = Chain;\r\n\t\t\tif (element == null)\r\n\t\t\t{\r\n\t\t\t\t// if we are just wrapping the variable with a PhpReference, make a copy\r\n\t\t\t\treference = Variable as PhpReference;\r\n\t\t\t\tif (reference == null) reference = new PhpReference(PhpVariable.Copy(Variable, CopyReason.Unknown));\r\n\r\n\t\t\t\treturn reference;\r\n\t\t\t}\r\n\r\n\t\t\t// make sure that we have a PhpReference\r\n\t\t\treference = PhpVariable.MakeReference(Variable);\r\n\r\n\t\t\tif (element == lastElement)\r\n\t\t\t{\r\n\t\t\t\t// GetPropertyRef/GetItemRef\r\n\t\t\t\treturn element.GetRef(ref reference.value, context, Caller);\r\n\t\t\t}\r\n\r\n\t\t\t// EnsureVariableIsObject/EnsureVariableIsArray\r\n\t\t\tobject var = element.EnsureVariable(ref reference.value, context, Caller);\r\n\t\t\tif (var == null) return new PhpReference();\r\n\r\n\t\t\twhile (element.Next != null)\r\n\t\t\t{\r\n\t\t\t\t// Ensure{Field,Item}Is{Object,Array}\r\n\t\t\t\tvar = element.Ensure(var, context, Caller);\r\n\t\t\t\tif (var == null) return new PhpReference();\r\n\r\n\t\t\t\telement = element.Next;\r\n\t\t\t}\r\n\r\n\t\t\t// GetObjectPropertyRef/GetArrayItemRef\r\n\t\t\treturn element.GetEnsuredRef(var, context, Caller);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The variable on which the chain is applied.\r\n\t\t/// </summary>\r\n\t\tinternal object Variable;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The class context in which the chain should be evaluated.\r\n\t\t/// </summary>\r\n\t\tinternal DTypeDesc Caller;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Head of the linked list of <see cref=\"RuntimeChainElement\"/>s representing field and item names\r\n\t\t/// applied to the <see cref=\"Variable\"/> in the lexical order.\r\n\t\t/// </summary>\r\n\t\tinternal RuntimeChainElement Chain;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The lastly added element or <B>null</B> if there are no elements yet.\r\n\t\t/// </summary>\r\n\t\tprivate RuntimeChainElement lastElement;\r\n\t}\r\n\r\n\t#endregion\r\n\t\r\n\t#region PhpSetterChainArray Proxy\r\n\t\r\n\t[Serializable]\r\n\tinternal sealed class PhpSetterChainArray : PhpArray\r\n\t{\r\n\t\tinternal PhpSetterChainArray()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#region Operators\r\n\r\n        protected override object GetArrayItemOverride(object key, bool quiet)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\t\t\r\n\t\tprotected override void SetArrayItemOverride(object key, object value)\r\n\t\t{\r\n\t\t\tIntStringKey array_key;\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext; // TODO: context -> field \r\n\t\t\t\r\n\t\t\t// extend and finish the setter chain if one already exists\r\n\t\t\tif (!Convert.ObjectToArrayKey(key, out array_key))\r\n\t\t\t{\r\n\t\t\t\tPhpException.IllegalOffsetType();\r\n\t\t\t\tcontext.AbortSetterChain(true);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcontext.ExtendSetterChain(new RuntimeChainItem(array_key));\r\n\t\t\tcontext.FinishSetterChain(value);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride()\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride(object key)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride(int key)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride(string key)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(object value)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(int key, object value)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(string key, object value)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemRefOverride(object key, PhpReference value)\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t}\r\n\r\n        protected override PhpArray EnsureItemIsArrayOverride()\r\n\t\t{\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        protected override DObject EnsureItemIsObjectOverride(ScriptContext context)\r\n\t\t{\r\n\t\t\t// setter chain:\r\n\t\t\tScriptContext.CurrentContext.AbortSetterChain(false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t\r\n\t\tprotected override PhpArray EnsureItemIsArrayOverride(object key)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tIntStringKey array_key;\r\n\t\t\t\r\n\t\t\tif (!Convert.ObjectToArrayKey(key, out array_key))\r\n\t\t\t{\r\n\t\t\t\tPhpException.IllegalOffsetType();\r\n\t\t\t\tcontext.AbortSetterChain(true);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// extend the setter chain if one already exists:\r\n\t\t\tcontext.ExtendSetterChain(new RuntimeChainItem(array_key));\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n        protected override DObject EnsureItemIsObjectOverride(object key, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tIntStringKey array_key;\r\n\r\n\t\t\tif (!Convert.ObjectToArrayKey(key, out array_key))\r\n\t\t\t{\r\n\t\t\t\tPhpException.IllegalOffsetType();\r\n\t\t\t\tcontext.AbortSetterChain(true);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// extend the setter chain if one already exists\r\n\t\t\tcontext.ExtendSetterChain(new RuntimeChainItem(array_key));\r\n\r\n\t\t\treturn ScriptContext.SetterChainSingletonObject;\r\n\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\t}\r\n\t\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpStack.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// A stack used to perform indirect calls of user funcions and to call argument-aware functions.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <para>\r\n\t/// A stack is used for calling m-decl and args-aware PHP functions/methods.\r\n\t/// 1. Caller of such function pushes all arguments into this stack, sets ArgCount\r\n\t/// to the argument count pushed and calls argument-less overload. \r\n\t/// If a method is called a caller invokes\r\n\t/// Operators.InvokeMethod method and this one calls argument-less overload.\r\n\t/// 2. Argument-less overload reads ArgCount arguments from the stack, pushes \r\n\t/// them to the evalution stack and calls argument-full overload.\r\n\t/// If the callee is args-aware function/method arguments are kept on the stack\r\n\t/// until callee returns and are popped afterwards. Moreover, the number of arguments\r\n\t/// is boxed and pushed on the top of the stack in order to be used by \r\n\t/// class library funcions working with arguments (such are func_get_args etc.).\r\n\t/// Otherwise, if the function/method is args-unaware, stack frame is deleted before\r\n\t/// the function/method is called.  \r\n\t/// </para>\r\n\t/// <para>\r\n\t/// Protocol for args-unaware excluding Class Library Stubs: \r\n\t///   AddFrame; arg-less { (PeekValue + PeekReference + PeekValueOptional + PeekReferenceOptional)*; RemoveFrame; arg-full; }\r\n\t/// Protocol for Class Library stubs: \r\n\t///   AddFrame; arg-less { (PeekValueUnchecked + PeekReferenceUnchecked)*; RemoveFrame; arg-full; }\r\n\t/// Protocol for args-aware:   \r\n\t///   AddFrame; arg-less { (PeekValue + PeekReference + PeekValueOptional + PeekReferenceOptional)*; MakeArgsAware; arg-full; RemoveArgsAwareFrame; }\r\n\t/// </para>\r\n\t/// </remarks>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class PhpStack\r\n\t{\r\n\t\t#region Fields, Construction, ResizeItems\r\n\r\n\t\t/// <summary>\r\n\t\t/// Array representing stack.\r\n\t\t/// </summary>\r\n\t\tprivate object[]/*!*/ Items;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Array representing generic parameters.\r\n\t\t/// </summary>\r\n\t\tprivate DTypeDesc[]/*!*/ Types;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The <see cref=\"ScriptContext\"/> which the stack is associated to.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic readonly ScriptContext/*!*/ Context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of the current top item + 1 (points immediately above the top item). \r\n\t\t/// </summary>\r\n\t\tprivate int Top;\r\n\r\n\t\tprivate int TypesTop;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of <see cref=\"PhpStack\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The script context.</param>\r\n\t\tinternal PhpStack(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null);\r\n\r\n\t\t\tthis.Items = new object[25];\r\n\t\t\tthis.Types = new DTypeDesc[10];\r\n\t\t\tthis.Top = 0;\r\n\t\t\tthis.TypesTop = 0;\r\n\t\t\tthis.Context = context;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// ResizeItemss args stack to maximum of a given size and a double of the current size.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"size\">The minimal required size.</param>\r\n\t\tprivate void ResizeItems(int size)\r\n\t\t{\r\n\t\t\tint new_size = (size > 2 * Items.Length) ? size : 2 * Items.Length;\r\n\r\n\t\t\t// doubles the items array:\r\n\t\t\tobject[] new_items = new object[new_size];\r\n\t\t\tArray.Copy(Items, 0, new_items, 0, Top);\r\n\t\t\tItems = new_items;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// ResizeItemss types stack to maximum of a given size and a double of the current size.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"size\">The minimal required size.</param>\r\n\t\tprivate void ResizeTypes(int size)\r\n\t\t{\r\n\t\t\tint new_size = (size > 2 * Items.Length) ? size : 2 * Items.Length;\r\n\r\n\t\t\t// doubles the items array:\r\n\t\t\tDTypeDesc[] new_types = new DTypeDesc[new_size];\r\n\t\t\tArray.Copy(Types, 0, new_types, 0, Top);\r\n\t\t\tTypes = new_types;\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic void Dump(TextWriter/*!*/ output)\r\n\t\t{\r\n\t\t\toutput.WriteLine(\"<pre>\");\r\n\t\t\toutput.WriteLine(\"Stack (args_Length = {0}, types_Length = {5}, args_Top = {1}, types_Top = {6}, \" +\r\n\t\t\t\t\"argc = {2}, typec = {7}, callee = {3}, callback = {4}):\", Items.Length, Top, ArgCount, CalleeName, Callback,\r\n\t\t\t\tTypes.Length, TypesTop, TypeArgCount);\r\n\r\n\t\t\toutput.WriteLine(\"Args:\");\r\n\r\n\t\t\tfor (int i = 0; i < Top; i++)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"{0}:\", i);\r\n\t\t\t\tPhpVariable.Dump(output, Items[i]);\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine(\"Types:\");\r\n\r\n\t\t\tfor (int i = 0; i < TypesTop; i++)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"{0}:\", i);\r\n\t\t\t\toutput.WriteLine(Types[i]);\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine(\"</pre>\");\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Call State\r\n\r\n\t\t/// <summary>\r\n\t\t/// Data used in arg-less stub during a single call.\r\n\t\t/// </summary>\r\n\t\tinternal struct CallState\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// The number of items in the last stack frame.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int ArgCount;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The number of types in the last stack frame.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic int TypeCount;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Defined variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic Dictionary<string, object> Variables;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Defined variables.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic NamingContext NamingContext;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The name of called function or method. Set up before peeking of values or references.\r\n\t\t\t/// Used for error reporting.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic string CalleeName;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Set by PhpCallback.Invoke if a function is called via a callback. \r\n\t\t\t/// Changes slightly the behavior of method <see cref=\"PeekReference\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic bool Callback;\r\n\r\n\t\t\tpublic bool AllowProtectedCall;\r\n\r\n            public DTypeDesc LateStaticBindType;\r\n\r\n\t\t\tpublic CallState(int argCount, int typeCount, Dictionary<string, object> variables, NamingContext namingContext,\r\n\t\t\t\tstring calleeName, bool callback, bool allowProtectedCall, DTypeDesc lateStaticBindType)\r\n\t\t\t{\r\n\t\t\t\tthis.ArgCount = argCount;\r\n\t\t\t\tthis.TypeCount = typeCount;\r\n\t\t\t\tthis.Variables = variables;\r\n\t\t\t\tthis.NamingContext = namingContext;\r\n\t\t\t\tthis.CalleeName = calleeName;\r\n\t\t\t\tthis.Callback = callback;\r\n\t\t\t\tthis.AllowProtectedCall = allowProtectedCall;\r\n                this.LateStaticBindType = lateStaticBindType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The number of items in the last stack frame.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic int ArgCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The number of items in the last stack frame.\r\n\t\t/// </summary>\r\n\t\tpublic int TypeArgCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defined variables.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic Dictionary<string, object> Variables;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of called function or method. Set up before peeking of values or references.\r\n\t\t/// Used for error reporting.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic string CalleeName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set by PhpCallback.Invoke if a function is called via a callback. \r\n\t\t/// Changes slightly the behavior of method <see cref=\"PeekReference\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic bool Callback;\r\n\r\n        /// <summary>\r\n        /// Type used to call currently evaluated method.\r\n        /// </summary>\r\n        [Emitted]\r\n        public DTypeDesc LateStaticBindType;\r\n\r\n\t\t[Emitted]\r\n\t\tpublic NamingContext NamingContext;\r\n\r\n\t\t[Emitted]\r\n\t\tpublic bool AllowProtectedCall;\r\n\r\n\t\tinternal CallState SaveCallState()\r\n\t\t{\r\n\t\t\treturn new CallState(ArgCount, TypeArgCount, Variables, NamingContext, CalleeName, Callback, AllowProtectedCall, LateStaticBindType);\r\n\t\t}\r\n\r\n\t\tinternal void RestoreCallState(CallState old)\r\n\t\t{\r\n\t\t\tTypeArgCount = old.TypeCount;\r\n\t\t\tArgCount = old.ArgCount;\r\n\t\t\tCallback = old.Callback;\r\n\t\t\tCalleeName = old.CalleeName;\r\n\t\t\tVariables = old.Variables;\r\n\t\t\tNamingContext = old.NamingContext;\r\n\t\t\tAllowProtectedCall = old.AllowProtectedCall;\r\n            LateStaticBindType = old.LateStaticBindType;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region User Argument Access\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the number of arguments passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> if called from outside of user-function context.</returns>\r\n\t\t/// <exception cref=\"PhpException\">If called from outside of user-function context (Warning).</exception>\r\n\t\tpublic bool GetArgCount(out int argCount, out int typeArgCount)\r\n\t\t{\r\n\t\t\t// if stack is empty:\r\n\t\t\tif (Top == 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"no_function_context\"));\r\n\t\t\t\targCount = typeArgCount = 0;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// fetches the number of arguments from the stack's top;\r\n\t\t\t// each args-aware function should push it there by MakeArgsAware;\r\n\t\t\t// Items[Top] = null, Items[Top - 1] = <arg count>, Items[Top - 2] = <1st arg>, ...\r\n\t\t\t// <arg count> encodes type arg count and regular arg count {type #} << 16 | {regular #};\r\n\t\t\tint encoded_result = (int)Items[Top - 1];\r\n\r\n\t\t\targCount = encoded_result & 0xffff;\r\n\t\t\ttypeArgCount = encoded_result >> 16;\r\n\r\n\t\t\tDebug.Assert(argCount >= 0 && argCount <= Top);\r\n\t\t\tDebug.Assert(typeArgCount >= 0 && typeArgCount <= TypesTop);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an argument passed to the current user-function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"index\">The index of the argument to get (starting from zero).</param>\r\n\t\t/// <returns>\r\n\t\t/// The value of the <paramref name=\"index\"/>-th argument or <b>false</b> on error.\r\n\t\t/// The value is returned as is, i.e. no copy is made. That should be done by library function.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">If <paramref name=\"index\"/> is negative (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">If <paramref name=\"index\"/> is greater than the current \r\n\t\t/// user-function's actual parameter count (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">If called from outside of user-function context (Warning).</exception>\r\n\t\tpublic object GetArgument(int index)\r\n\t\t{\r\n\t\t\t// checks correctness of the argument:\r\n\t\t\tif (index < 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"index\", \"arg:negative\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tint arg_count, type_arg_count;\r\n\t\t\tif (!GetArgCount(out arg_count, out type_arg_count))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t// invalid argument:\r\n\t\t\tif (index >= arg_count)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"argument_not_passed_to_function\", index));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Items[Top] = null, Items[Top - 1] = <arg count>, Items[Top - 2] = <1st arg>, ...\r\n\t\t\treturn Items[Top - 2 - index];\r\n\t\t}\r\n\r\n\t\tpublic DTypeDesc GetTypeArgument(int index)\r\n\t\t{\r\n\t\t\t// checks correctness of the argument:\r\n\t\t\tif (index < 0)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"index\", \"arg:negative\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tint arg_count, type_arg_count;\r\n\t\t\tif (!GetArgCount(out arg_count, out type_arg_count))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t// invalid argument:\r\n\t\t\tif (index >= type_arg_count)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"type_argument_not_passed_to_function\", index));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// Types[TypesTop] = null, Types[TypesTop - 1] = <1st arg>, Types[TypesTop - 2] = <2nd arg>, ...\r\n\t\t\treturn Types[TypesTop - 1 - index];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of arguments of the current user-defined function. \r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// The array of arguments which values contains arguments' values and keys are their indices or\r\n\t\t/// <b>null</b> on error.\r\n\t\t/// Values in array are returned as is, i.e. no copy is made. That should be done by library function.\r\n\t\t/// </returns>\r\n\t\t/// <exception cref=\"PhpException\">If called from outside of user-function context (Warning).</exception>\r\n\t\tpublic PhpArray GetArguments()\r\n\t\t{\r\n\t\t\tint arg_count, type_arg_count;\r\n\r\n\t\t\tif (!GetArgCount(out arg_count, out type_arg_count))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t// fills an array: \r\n\t\t\t// Items[Top] = null, Items[Top - 1] = <arg count>, Items[Top - 2] = <1st arg>, ...\r\n\t\t\tPhpArray result = new PhpArray(arg_count, 0);\r\n\t\t\tfor (int i = 0; i < arg_count; i++)\r\n\t\t\t\tresult[i] = Items[Top - 2 - i];\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic DTypeDesc[] GetTypeArguments()\r\n\t\t{\r\n\t\t\tint arg_count, type_arg_count;\r\n\r\n\t\t\tif (!GetArgCount(out arg_count, out type_arg_count))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t// fills an array: \r\n\t\t\t// Types[TypesTop] = null, Types[TypesTop - 1] = <1st arg>, Types[TypesTop - 2] = <2nd arg>, ...\r\n\t\t\tDTypeDesc[] result = new DTypeDesc[type_arg_count];\r\n\t\t\tfor (int i = 0; i < type_arg_count; i++)\r\n\t\t\t\tresult[i] = Types[TypesTop - 1 - i];\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region AddFrame\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame()\r\n\t\t{\r\n\t\t\tArgCount = 0;\r\n\t\t\tTypeArgCount = 0;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg)\r\n\t\t{\r\n\t\t\tint new_top = Top + 1;\r\n\t\t\tArgCount = 1;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top] = arg;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2)\r\n\t\t{\r\n\t\t\tint new_top = Top + 2;\r\n\t\t\tArgCount = 2;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 1] = arg1;\r\n\t\t\tItems[Top + 0] = arg2;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3)\r\n\t\t{\r\n\t\t\tint new_top = Top + 3;\r\n\t\t\tArgCount = 3;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 2] = arg1;\r\n\t\t\tItems[Top + 1] = arg2;\r\n\t\t\tItems[Top + 0] = arg3;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3, object arg4)\r\n\t\t{\r\n\t\t\tint new_top = Top + 4;\r\n\t\t\tArgCount = 4;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 3] = arg1;\r\n\t\t\tItems[Top + 2] = arg2;\r\n\t\t\tItems[Top + 1] = arg3;\r\n\t\t\tItems[Top + 0] = arg4;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3, object arg4, object arg5)\r\n\t\t{\r\n\t\t\tint new_top = Top + 5;\r\n\t\t\tArgCount = 5;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 4] = arg1;\r\n\t\t\tItems[Top + 3] = arg2;\r\n\t\t\tItems[Top + 2] = arg3;\r\n\t\t\tItems[Top + 1] = arg4;\r\n\t\t\tItems[Top + 0] = arg5;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6)\r\n\t\t{\r\n\t\t\tint new_top = Top + 6;\r\n\t\t\tArgCount = 6;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 5] = arg1;\r\n\t\t\tItems[Top + 4] = arg2;\r\n\t\t\tItems[Top + 3] = arg3;\r\n\t\t\tItems[Top + 2] = arg4;\r\n\t\t\tItems[Top + 1] = arg5;\r\n\t\t\tItems[Top + 0] = arg6;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7)\r\n\t\t{\r\n\t\t\tint new_top = Top + 7;\r\n\t\t\tArgCount = 7;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 6] = arg1;\r\n\t\t\tItems[Top + 5] = arg2;\r\n\t\t\tItems[Top + 4] = arg3;\r\n\t\t\tItems[Top + 3] = arg4;\r\n\t\t\tItems[Top + 2] = arg5;\r\n\t\t\tItems[Top + 1] = arg6;\r\n\t\t\tItems[Top + 0] = arg7;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7, object arg8)\r\n\t\t{\r\n\t\t\tint new_top = Top + 8;\r\n\t\t\tArgCount = 8;\r\n\t\t\tTypeArgCount = 0;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\t\t\tItems[Top + 7] = arg1;\r\n\t\t\tItems[Top + 6] = arg2;\r\n\t\t\tItems[Top + 5] = arg3;\r\n\t\t\tItems[Top + 4] = arg4;\r\n\t\t\tItems[Top + 3] = arg5;\r\n\t\t\tItems[Top + 2] = arg6;\r\n\t\t\tItems[Top + 1] = arg7;\r\n\t\t\tItems[Top + 0] = arg8;\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t/// <param name=\"args\">Arguments to add to a new frame.</param>\r\n\t\t[Emitted]\r\n\t\tpublic void AddFrame(object[]/*!*/ args)\r\n\t\t{\r\n\t\t\tArgCount = args.Length;\r\n\t\t\tTypeArgCount = 0;\r\n\t\t\tint new_top = Top + ArgCount;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\r\n\t\t\tfor (int i = 0, stack_offset = new_top - 1; i < args.Length; i++, stack_offset--)\r\n\t\t\t{\r\n\t\t\t\tItems[stack_offset] = args[i];\r\n\t\t\t}\r\n\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddFrame\"]/*'/>\r\n\t\t/// <param name=\"args\">Arguments to add to a new frame.</param>\r\n\t\tpublic void AddFrame(ICollection args)\r\n\t\t{\r\n\t\t\tif (args == null) return;\r\n\r\n\t\t\tArgCount = args.Count;\r\n\t\t\tTypeArgCount = 0;\r\n\t\t\tint new_top = Top + ArgCount;\r\n\r\n\t\t\tif (new_top > Items.Length) ResizeItems(new_top);\r\n\r\n\t\t\tint i = new_top;\r\n\t\t\tIEnumerator iterator = args.GetEnumerator();\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tItems[--i] = iterator.Current;\r\n\t\t\t}\r\n\r\n\t\t\tTop = new_top;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region AddTypeFrame\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame()\r\n\t\t{\r\n\t\t\tTypeArgCount = 0;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 1;\r\n\t\t\tTypeArgCount = 1;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop] = arg;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 2;\r\n\t\t\tTypeArgCount = 2;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 1] = arg1;\r\n\t\t\tTypes[TypesTop + 0] = arg2;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 3;\r\n\t\t\tTypeArgCount = 3;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 2] = arg1;\r\n\t\t\tTypes[TypesTop + 1] = arg2;\r\n\t\t\tTypes[TypesTop + 0] = arg3;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 4;\r\n\t\t\tTypeArgCount = 4;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 3] = arg1;\r\n\t\t\tTypes[TypesTop + 2] = arg2;\r\n\t\t\tTypes[TypesTop + 1] = arg3;\r\n\t\t\tTypes[TypesTop + 0] = arg4;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4, DTypeDesc arg5)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 5;\r\n\t\t\tTypeArgCount = 5;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 4] = arg1;\r\n\t\t\tTypes[TypesTop + 3] = arg2;\r\n\t\t\tTypes[TypesTop + 2] = arg3;\r\n\t\t\tTypes[TypesTop + 1] = arg4;\r\n\t\t\tTypes[TypesTop + 0] = arg5;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4, DTypeDesc arg5, DTypeDesc arg6)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 6;\r\n\t\t\tTypeArgCount = 6;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 5] = arg1;\r\n\t\t\tTypes[TypesTop + 4] = arg2;\r\n\t\t\tTypes[TypesTop + 3] = arg3;\r\n\t\t\tTypes[TypesTop + 2] = arg4;\r\n\t\t\tTypes[TypesTop + 1] = arg5;\r\n\t\t\tTypes[TypesTop + 0] = arg6;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4, DTypeDesc arg5, DTypeDesc arg6, DTypeDesc arg7)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 7;\r\n\t\t\tTypeArgCount = 7;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeTypes(new_top);\r\n\t\t\tTypes[TypesTop + 6] = arg1;\r\n\t\t\tTypes[TypesTop + 5] = arg2;\r\n\t\t\tTypes[TypesTop + 4] = arg3;\r\n\t\t\tTypes[TypesTop + 3] = arg4;\r\n\t\t\tTypes[TypesTop + 2] = arg5;\r\n\t\t\tTypes[TypesTop + 1] = arg6;\r\n\t\t\tTypes[TypesTop + 0] = arg7;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc arg1, DTypeDesc arg2, DTypeDesc arg3, DTypeDesc arg4, DTypeDesc arg5, DTypeDesc arg6, DTypeDesc arg7, DTypeDesc arg8)\r\n\t\t{\r\n\t\t\tint new_top = TypesTop + 8;\r\n\t\t\tTypeArgCount = 8;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeItems(new_top);\r\n\t\t\tItems[TypesTop + 7] = arg1;\r\n\t\t\tItems[TypesTop + 6] = arg2;\r\n\t\t\tItems[TypesTop + 5] = arg3;\r\n\t\t\tItems[TypesTop + 4] = arg4;\r\n\t\t\tItems[TypesTop + 3] = arg5;\r\n\t\t\tItems[TypesTop + 2] = arg6;\r\n\t\t\tItems[TypesTop + 1] = arg7;\r\n\t\t\tItems[TypesTop + 0] = arg8;\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"PhpStack.AddTypeFrame\"]/*'/>\r\n\t\t[Emitted]\r\n\t\tpublic void AddTypeFrame(DTypeDesc[]/*!*/ args)\r\n\t\t{\r\n\t\t\tTypeArgCount = args.Length;\r\n\t\t\tint new_top = TypesTop + TypeArgCount;\r\n\r\n\t\t\tif (new_top > Types.Length) ResizeItems(new_top);\r\n\r\n\t\t\tfor (int i = 0, stack_offset = new_top - 1; i < args.Length; i++, stack_offset--)\r\n\t\t\t{\r\n\t\t\t\tTypes[stack_offset] = args[i];\r\n\t\t\t}\r\n\r\n\t\t\tTypesTop = new_top;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region ExpandFrame\r\n\r\n        /// <summary>\r\n        /// Adds additional arguments before arguments currently on stack.\r\n        /// Used for expanding 'use' parameters of lambda function.\r\n        /// </summary>\r\n        internal void ExpandFrame(PhpArray useParams)\r\n        {\r\n            if (useParams != null && useParams.Count > 0)\r\n            {\r\n                ArgCount += useParams.Count;\r\n                int new_top = Top + useParams.Count;\r\n\r\n                if (new_top > Items.Length) ResizeItems(new_top);\r\n\r\n                var stack_offset = new_top - 1;\r\n\r\n                using (var enumerator = useParams.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                    {\r\n                        Items[stack_offset--] = enumerator.CurrentValue;\r\n                    }\r\n\r\n                Top = new_top;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region RemoveFrame, MakeArgsAware, CollectFrame, AddIndirection\r\n\r\n        /// <summary>\r\n\t\t/// Removes the current open args-unaware frame from the stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Called by args-unaware stubs before executing the arg-full function/method.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"PhpException\">Some actual arguments are missing (Warning).</exception>\r\n\t\t/// <exception cref=\"PhpException\">Some actual arguments are not references and a function is not called from callback (Error).</exception>\r\n\t\t[Emitted]\r\n\t\tpublic void RemoveFrame()\r\n\t\t{\r\n\t\t\tTop -= ArgCount;\r\n\t\t\tTypesTop -= TypeArgCount;\r\n\t\t\tArgCount = 0;\r\n\t\t\tTypeArgCount = 0;\r\n\t\t\tCallback = false;\r\n\t\t\tVariables = null;\r\n\t\t\tNamingContext = null;\r\n            //LateStaticBindType = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes the closed args-aware frame from the top of the stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Called by args-aware stubs before returning.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic void RemoveArgsAwareFrame(int encodedActualCount)\r\n\t\t{\r\n\t\t\tTop -= (encodedActualCount & 0xffff) + 1;  // +1 for encoded args count\r\n\t\t\tTypesTop -= (encodedActualCount >> 16);\r\n            //LateStaticBindType = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the stack up so it is prepared for the arg-full overload call.\r\n\t\t/// Called in args-aware stubs after peeking all arguments and before calling the arg-full overload.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"encodedFormalCount\">{type param count} * 0x1000 + {param count}.</param>\r\n\t\t/// <returns>The number of arguments pushed on the stack.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// An args-aware stub is usually called when the caller doesn't know which arguments \r\n\t\t/// are references and which not. Therefore, the stub should dereference all that \r\n\t\t/// arguments which are not references. Those arguments on the stack corresponding \r\n\t\t/// with formal ones are dereferenced by <see cref=\"PeekValue\"/> and <see cref=\"PeekValueOptional\"/>\r\n\t\t/// methods. Others are dereferenced here.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic int MakeArgsAware(int encodedFormalCount)\r\n\t\t{\r\n\t\t\tint param_count = encodedFormalCount & 0xffff;\r\n\r\n\t\t\tPeekAllValues(param_count);\r\n\t\t\tint encoded_args_count = TypeArgCount << 16 | ArgCount;\r\n\r\n\t\t\t// store encoded formal param count on the top of the items stack:\r\n\t\t\tif (Top + 1 > Items.Length) ResizeItems(Top + 1);\r\n\t\t\tItems[Top++] = encoded_args_count;\r\n\r\n\t\t\tArgCount = 0;\r\n\t\t\tTypeArgCount = 0;\r\n\t\t\tCallback = false;\r\n\t\t\tVariables = null;\r\n\t\t\tNamingContext = null;\r\n            return encoded_args_count;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dereferences all arguments on the stack starting from the given one.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"formalParamCount\">The number of formal arguments.</param>\r\n\t\tprivate void PeekAllValues(int formalParamCount)\r\n\t\t{\r\n\t\t\tfor (int i = formalParamCount + 1; i <= ArgCount; i++)\r\n\t\t\t{\r\n\t\t\t\t// peeks the value:\r\n\t\t\t\tobject result = PeekValueUnchecked(i);\r\n\r\n\t\t\t\t// stores the value:\r\n\t\t\t\tItems[Top - i] = result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Collects arguments of the current open frame to the new instance of <see cref=\"PhpArray\"/> and removes the frame.\r\n\t\t/// Peeks all arguments as values and does no deep-copying.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array containing all arguments.</returns>\r\n\t\tinternal PhpArray CollectFrame()\r\n\t\t{\r\n\t\t\tPhpArray result = new PhpArray(ArgCount, 0);\r\n\r\n\t\t\tfor (int i = 1; i <= ArgCount; i++)\r\n\t\t\t\tresult.Add(PeekValueUnchecked(i));\r\n\r\n\t\t\tRemoveFrame();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a level of indirection to a specified argument.\r\n\t\t/// Supresses checks that disables a reference to containe another reference.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">An index of argument starting from 1.</param>\r\n\t\tinternal void AddIndirection(int i)\r\n\t\t{\r\n\t\t\t// preserves \"no duplicate pointers\" invariant:\r\n\t\t\tItems[Top - i] = new PhpReference(Items[Top - i], true);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PeekValue, PeekReference\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The value passed as the <paramref name=\"i\"/>-th actual argument.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If argument is a <see cref=\"PhpReference\"/> then it is dereferenced.\r\n\t\t/// Do set <see cref=\"CalleeName\"/> before calling this method since the name is used for reporting errors.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic object PeekValue(int i)\r\n\t\t{\r\n\t\t\tobject result;\r\n\r\n\t\t\tif (ArgCount >= i)\r\n\t\t\t{\r\n\t\t\t\t// peeks the value:\r\n\t\t\t\tresult = PeekValueUnchecked(i);\r\n\r\n\t\t\t\t// stores the value back to the stack so that user args functions can work with it:\r\n\t\t\t\tItems[Top - i] = result;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = null;\r\n\r\n\t\t\t\t// warning (can invoke user code => we have to save and restore callstate):\r\n\t\t\t\tCallState call_state = SaveCallState();\r\n\t\t\t\tPhpException.MissingArgument(i, CalleeName);\r\n\t\t\t\tRestoreCallState(call_state);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an optional argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The value passed as the <paramref name=\"i\"/>-th actual argument.</returns>\r\n\t\t/// <remarks>If argument is a <see cref=\"PhpReference\"/> then it is dereferenced.</remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic object PeekValueOptional(int i)\r\n\t\t{\r\n\t\t\tobject result;\r\n\r\n\t\t\tif (ArgCount >= i)\r\n\t\t\t{\r\n\t\t\t\t// peeks the value:\r\n\t\t\t\tresult = PeekValueUnchecked(i);\r\n\r\n\t\t\t\t// stores the value back to the stack so that user args functions can work with it:\r\n\t\t\t\tItems[Top - i] = result;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// default value:\r\n\t\t\t\tresult = Arg.Default;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an argument from the current frame without checking range.\r\n\t\t/// Used also by library arg-less stubs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The value passed as the <paramref name=\"i\"/>-th actual argument.</returns>\r\n\t\t/// <remarks>If argument is a <see cref=\"PhpReference\"/> then it is dereferenced.</remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic object PeekValueUnchecked(int i)\r\n\t\t{\r\n\t\t\tPhpRuntimeChain php_chain;\r\n\r\n\t\t\t// caller may have pushed a reference even if a formal argument is not reference => dereference it:\r\n\t\t\tobject result = PhpVariable.Dereference(Items[Top - i]);\r\n\r\n\t\t\t// caller may have pushed a runtime chain => evaluate it:\r\n\t\t\tif ((php_chain = result as PhpRuntimeChain) != null)\r\n\t\t\t{\r\n\t\t\t\t// call state has to be stored since chain can call arbitrary user code:\r\n\t\t\t\tCallState call_state = SaveCallState();\r\n\t\t\t\tresult = php_chain.GetValue(Context);\r\n\t\t\t\tRestoreCallState(call_state);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a reference argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The reference passed as the <paramref name=\"i\"/>-th actual argument. Never <B>null</B>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Do set <see cref=\"CalleeName\"/> before calling this method since the name is used for reporting errors.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference PeekReference(int i)\r\n\t\t{\r\n\t\t\tPhpReference result;\r\n\r\n\t\t\tif (ArgCount >= i)\r\n\t\t\t{\r\n\t\t\t\t// peeks the reference:\r\n\t\t\t\tresult = PeekReferenceUnchecked(i);\r\n\r\n\t\t\t\t// stores the value back to the stack so that user args functions can work with it:\r\n\t\t\t\tItems[Top - i] = result;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = new PhpReference();\r\n\r\n\t\t\t\t// warning (can invoke user code => we have to save and restore callstate):\r\n\t\t\t\tCallState call_state = SaveCallState();\r\n\t\t\t\tPhpException.MissingArgument(i, CalleeName);\r\n\t\t\t\tRestoreCallState(call_state);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a reference optional argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The reference passed as the <paramref name=\"i\"/>-th actual argument. Never <B>null</B>.</returns>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference PeekReferenceOptional(int i)\r\n\t\t{\r\n\t\t\tPhpReference result;\r\n\r\n\t\t\tif (ArgCount >= i)\r\n\t\t\t{\r\n\t\t\t\t// peeks the reference:\r\n\t\t\t\tresult = PeekReferenceUnchecked(i);\r\n\r\n\t\t\t\t// stores the value back to the stack so that user args functions can work with it:\r\n\t\t\t\tItems[Top - i] = result;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// default value:\r\n\t\t\t\tresult = Arg.Default;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Peeks a reference argument from the current frame without range check. \r\n\t\t/// Used by library arg-less stubs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The reference passed as the <paramref name=\"i\"/>-th actual argument. Never <B>null</B>.</returns>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic PhpReference PeekReferenceUnchecked(int i)\r\n\t\t{\r\n\t\t\tobject item = Items[Top - i];\r\n\t\t\tPhpReference result;\r\n\t\t\tPhpRuntimeChain php_chain;\r\n\r\n\t\t\t// the caller may not pushed a reference although the formal argument is a reference:\r\n\t\t\t// it doesn't matter if called by callback:\r\n\t\t\tif ((result = item as PhpReference) == null)\r\n\t\t\t{\r\n\t\t\t\t// caller may have pushed a runtime chain => evaluate it:\r\n\t\t\t\tif ((php_chain = item as PhpRuntimeChain) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// call state has to be stored since chain can call arbitrary user code:\r\n\t\t\t\t\tCallState call_state = SaveCallState();\r\n\t\t\t\t\tresult = php_chain.GetReference(Context);\r\n\t\t\t\t\tRestoreCallState(call_state);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the reason of copy is not exactly known (it may be returning by copy as well as passing by copy):\r\n\t\t\t\t\tresult = new PhpReference(PhpVariable.Copy(item, CopyReason.Unknown));\r\n\r\n\t\t\t\t\t// Reports an error in the case that we are not called by callback.\r\n\t\t\t\t\t// Although, this error is fatal one can switch throwing exceptions off.\r\n\t\t\t\t\t// If this is the case the afterwards behavior will be the same as if callback was called.\r\n\t\t\t\t\tif (!Callback)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// warning (can invoke user code => we have to save and restore callstate):\r\n\t\t\t\t\t\tCallState call_state = SaveCallState();\r\n\r\n\t\t\t\t\t\tPhpException.ArgumentNotPassedByRef(i, CalleeName);\r\n\t\t\t\t\t\tRestoreCallState(call_state);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PeekType, PeekTypeOptional\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a type argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the type argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The <see cref=\"DTypeDesc\"/> passed as the <paramref name=\"i\"/>-th actual type argument.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Do set <see cref=\"CalleeName\"/> before calling this method since the name is used for reporting errors.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic DTypeDesc/*!*/ PeekType(int i)\r\n\t\t{\r\n\t\t\tif (TypeArgCount >= i)\r\n\t\t\t{\r\n\t\t\t\t// peeks the value:\r\n\t\t\t\treturn Types[TypesTop - i];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// warning (can invoke user code => we have to save and restore callstate):\r\n\t\t\t\tCallState call_state = SaveCallState();\r\n\t\t\t\tPhpException.MissingTypeArgument(i, CalleeName);\r\n\t\t\t\tRestoreCallState(call_state);\r\n\r\n\t\t\t\treturn DTypeDesc.ObjectTypeDesc;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves an optional type argument from the current frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">The index of the argument starting from 1 (the last pushed argument).</param>\r\n\t\t/// <returns>The value passed as the <paramref name=\"i\"/>-th actual argument.</returns>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"i\"/> is invalid.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic DTypeDesc/*!*/ PeekTypeOptional(int i)\r\n\t\t{\r\n\t\t\treturn (TypeArgCount >= i) ? Types[TypesTop - i] : Arg.DefaultType;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region ThrowIfNotArgsaware\r\n\r\n        /// <summary>\r\n        /// Check whether current <see cref=\"CalleeName\"/> matches currently called function.\r\n        /// </summary>\r\n        /// <param name=\"routineName\">Currently called function name.</param>\r\n        /// <exception cref=\"InvalidOperationException\">If currently caled function does not match <see cref=\"CalleeName\"/>.</exception>\r\n        public void ThrowIfNotArgsaware(string/*!*/routineName)\r\n        {\r\n            //if (CalleeName != routineName)\r\n            //if (Top == 0 && CalleeName == null)\r\n            //    throw new InvalidOperationException(string.Format(CoreResources.argsaware_routine_needs_args, routineName));\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpStream.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Net.Sockets;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region PhpStream (partial) class\r\n\r\n\t/// <summary>\r\n\t/// Abstraction of streaming behavior for PHP.\r\n\t/// PhpStreams are opened by StreamWrappers on a call to fopen().\r\n\t/// </summary>\r\n\tpublic abstract partial class PhpStream : PhpResource\r\n\t{\r\n\t\tpublic virtual bool CanReadWithoutLock()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic virtual bool CanWriteWithoutLock()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#region Stat (optional)\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"Stat\"]/*'/>\r\n\t\tpublic virtual StatStruct Stat()\r\n\t\t{\r\n\t\t\tif (this.Wrapper != null)\r\n\t\t\t{\r\n\t\t\t\treturn this.Wrapper.Stat(OpenedPath, StreamStatOptions.Empty, StreamContext.Default, true);\r\n\t\t\t}\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Stat\"));\r\n\t\t\tStatStruct rv = new StatStruct();\r\n\t\t\trv.st_size = -1;\r\n\t\t\treturn rv;\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region Opening utilities\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Merges the path with the current working directory\r\n\t\t/// to get a canonicalized absolute pathname representing the same file.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This method is an analogy of <c>main/safe_mode.c: php_checkuid</c>.\r\n\t\t/// Looks for the file in the <c>include_path</c> and checks for <c>open_basedir</c> restrictions.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">An absolute or relative path to a file.</param>\r\n\t\t/// <param name=\"wrapper\">The wrapper found for the specified file or <c>null</c> if the path resolution fails.</param>\r\n\t\t/// <param name=\"mode\">The checking mode of the <see cref=\"CheckAccess\"/> method (file, directory etc.).</param>\r\n\t\t/// <param name=\"options\">Additional options for the <see cref=\"CheckAccess\"/> method.</param>\r\n\t\t/// <returns><c>true</c> if all the resolution and checking passed without an error, <b>false</b> otherwise.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Security violation - when the target file \r\n\t\t/// lays outside the tree defined by <c>open_basedir</c> configuration option.</exception>\r\n\t\tpublic static bool ResolvePath(ref string path, out StreamWrapper wrapper, CheckAccessMode mode, CheckAccessOptions options)\r\n\t\t{\r\n\t\t\t// Path will contain the absolute path without file:// or the complete URL; filename is the relative path.\r\n\t\t\tstring filename, scheme = GetSchemeInternal(path, out filename);\r\n\t\t\twrapper = StreamWrapper.GetWrapper(scheme, (StreamOptions)options);\r\n\t\t\tif (wrapper == null) return false;\r\n\r\n\t\t\tif (wrapper.IsUrl)\r\n\t\t\t{\r\n\t\t\t\t// Note: path contains the whole URL, filename the same without the scheme:// portion.\r\n\t\t\t\t// What to check more?\r\n\t\t\t}\r\n\t\t\telse if (scheme != \"php\")\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// Filename contains the original path without the scheme:// portion, check for include path.\r\n\t\t\t\t\tbool isInclude = false;\r\n\t\t\t\t\tif ((options & CheckAccessOptions.UseIncludePath) > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tisInclude = CheckIncludePath(filename, ref path);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Path will now contain an absolute path (either to an include or actual directory).\r\n\t\t\t\t\tif (!isInclude)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpath = Path.GetFullPath(Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, filename));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n                    if ((options & CheckAccessOptions.Quiet) == 0)\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_filename_invalid\",\r\n\t\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tGlobalConfiguration global_config = Configuration.Global;\r\n\r\n\t\t\t\t// Note: extensions check open_basedir too -> double check..\r\n\t\t\t\tif (!global_config.SafeMode.IsPathAllowed(path))\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((options & CheckAccessOptions.Quiet) == 0)\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"open_basedir_effect\",\r\n\t\t\t\t\t\t\tpath, global_config.SafeMode.GetAllowedPathPrefixesJoin()));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Replace all '/' with '\\'.\r\n\t\t\t\t// path = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);\r\n                Debug.Assert(\r\n                    path.IndexOf(Path.AltDirectorySeparatorChar) == -1 ||\r\n                    (Path.AltDirectorySeparatorChar == Path.DirectorySeparatorChar),    // on Mono, so ignore it\r\n                    string.Format(\"'{0}' should not contain '{1}' char.\", path, Path.AltDirectorySeparatorChar));\r\n\r\n\t\t\t\t// The file wrapper expects an absolute path w/o the scheme, others expect the scheme://url.\r\n\t\t\t\tif (scheme != \"file\")\r\n\t\t\t\t{\r\n\t\t\t\t\tpath = String.Format(\"{0}://{1}\", scheme, path);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check if the path lays inside of the directory tree specified \r\n\t\t/// by the <c>open_basedir</c> configuration option and return the resulting <paramref name=\"absolutePath\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"relativePath\">The filename to search for.</param>\r\n\t\t/// <param name=\"absolutePath\">The combined absolute path (either in the working directory \r\n\t\t/// or in an include path wherever it has been found first).</param>\r\n\t\t/// <returns><c>true</c> if the file was found in an include path.</returns>\r\n\t\tprivate static bool CheckIncludePath(string relativePath, ref string absolutePath)\r\n\t\t{\r\n\t\t\t// Note: If the absolutePath exists, it overtakse the include_path search.\r\n\t\t\tif (Path.IsPathRooted(relativePath)) return false;\r\n\t\t\tif (File.Exists(absolutePath)) return false;\r\n\r\n\t\t\tstring paths = ScriptContext.CurrentContext.Config.FileSystem.IncludePaths;\r\n\t\t\tif (paths == null) return false;\r\n\r\n\t\t\tforeach (string s in paths.Split(new char[] { Path.PathSeparator }))\r\n\t\t\t{\r\n\t\t\t\tif ((s == null) || (s == string.Empty)) continue;\r\n\t\t\t\tstring abs = Path.GetFullPath(Path.Combine(s, relativePath));\r\n\t\t\t\tif (File.Exists(abs))\r\n\t\t\t\t{\r\n\t\t\t\t\tabsolutePath = abs;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs all checks on a path passed to a PHP function.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// This method performs a check similar to <c>safe_mode.c: php_checkuid_ex()</c>\r\n\t\t/// together with <c>open_basedir</c> check.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// The <paramref name=\"filename\"/> may be one of the following:\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <item>A relative path. The path is resolved regarding the <c>include_path</c> too if required\r\n\t\t/// and checking continues as in the next case.</item>\r\n\t\t/// <item>An absolute path. The file or directory is checked for existence and for access permissions<sup>1</sup>\r\n\t\t/// according to the given <paramref name=\"mode\"/>.</item>\r\n\t\t/// </list>\r\n\t\t/// <sup>1</sup> Regarding the <c>open_basedir</c> configuration option. \r\n\t\t/// File access permissions are checked at the time of file manipulation\r\n\t\t/// (opening, copying etc.).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"filename\">A resolved path. Must be an absolute path to a local file.</param>\r\n\t\t/// <param name=\"mode\">One of the <see cref=\"CheckAccessMode\"/>.</param>\r\n\t\t/// <param name=\"options\"><c>true</c> to suppress error messages.</param>\r\n\t\t/// <returns><c>true</c> if the function may continue with file access,\r\n\t\t/// <c>false</c>to fail.</returns>\r\n\t\t/// <exception cref=\"PhpException\">If the file can not be accessed\r\n\t\t/// and the <see cref=\"CheckAccessOptions.Quiet\"/> is not set.</exception>\r\n\t\tpublic static bool CheckAccess(string filename, CheckAccessMode mode, CheckAccessOptions options)\r\n\t\t{\r\n\t\t\tDebug.Assert(Path.IsPathRooted(filename));\r\n\t\t\tstring url = FileSystemUtils.StripPassword(filename);\r\n\t\t\tbool quiet = (options & CheckAccessOptions.Quiet) > 0;\r\n\r\n\t\t\tswitch (mode)\r\n\t\t\t{\r\n\t\t\t\tcase CheckAccessMode.FileMayExist:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CheckAccessMode.FileExists:\r\n\t\t\t\t\tif (!File.Exists(filename))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_not_exists\", url));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CheckAccessMode.FileNotExists:\r\n\t\t\t\t\tif (File.Exists(filename))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_exists\", url));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CheckAccessMode.FileOrDirectory:\r\n\t\t\t\t\tif ((!Directory.Exists(filename)) && (!File.Exists(filename)))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_path_not_exists\", url));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase CheckAccessMode.Directory:\r\n\t\t\t\t\tif (!Directory.Exists(filename))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!quiet) PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_directory_not_exists\", url));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Assert(false);\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SocketStream class\r\n\r\n\t/// <summary>\r\n\t/// An implementation of <see cref=\"PhpStream\"/> as an encapsulation \r\n\t/// of System.Net.Socket transports.\r\n\t/// </summary>\r\n\tpublic class SocketStream : PhpStream\r\n\t{\r\n\t\tpublic override bool CanReadWithoutLock()\r\n\t\t{\r\n\t\t\treturn socket.Available > 0 && (currentTask == null || currentTask.IsCompleted);\r\n\t\t}\r\n\r\n\t\tpublic override bool CanWriteWithoutLock()\r\n\t\t{\r\n\t\t\treturn currentTask == null || currentTask.IsCompleted;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The encapsulated network socket.\r\n\t\t/// </summary>\r\n\t\tprotected Socket socket;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Result of the last read/write operation.\r\n\t\t/// </summary>\r\n\t\tprotected bool eof;\r\n\r\n\t\tprivate bool isAsync;\r\n\t\tprivate Task currentTask;\r\n\r\n\t\t#region PhpStream overrides\r\n\r\n\t\tpublic SocketStream(Socket socket, string openedPath, StreamContext context, bool isAsync = false)\r\n\t\t\t: base(null, StreamAccessOptions.Read | StreamAccessOptions.Write, openedPath, context)\r\n\t\t{\r\n\t\t\tDebug.Assert(socket != null);\r\n\t\t\tthis.socket = socket;\r\n\t\t\tthis.IsWriteBuffered = false;\r\n\t\t\tthis.eof = false;\r\n\t\t\tthis.isAsync = isAsync;\r\n\t\t\tthis.IsReadBuffered = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PhpResource.FreeManaged overridden to get rid of the contained context on Dispose.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\tbase.FreeManaged();\r\n\t\t\tsocket.Close();\r\n\t\t\tsocket = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Raw byte access (mandatory)\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawRead\"]/*'/>\r\n\t\tprotected override int RawRead(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\tif (currentTask != null)\r\n\t\t\t\tcurrentTask.Wait();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tint rv = socket.Receive(buffer, offset, count, SocketFlags.None);\r\n\t\t\t\teof = rv == 0;\r\n\t\t\t\treturn rv;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_socket_error\", e.Message));\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawWrite\"]/*'/>\r\n\t\tprotected override int RawWrite(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (isAsync)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (currentTask != null)\r\n\t\t\t\t\t\tcurrentTask.Wait();\r\n\t\t\t\t\tcurrentTask = new Task(() =>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint rv = socket.Send(buffer, offset, count, SocketFlags.None);\r\n\t\t\t\t\t\teof = rv == 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcurrentTask.Start();\r\n\t\t\t\t\treturn count;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint rv = socket.Send(buffer, offset, count, SocketFlags.None);\r\n\t\t\t\t\teof = rv == 0;\r\n\t\t\t\t\treturn rv;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_socket_error\", e.Message));\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawFlush\"]/*'/>\r\n\t\tprotected override bool RawFlush()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawEof\"]/*'/>\r\n\t\tprotected override bool RawEof\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn eof;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic override bool SetParameter(StreamParameterOptions option, object value)\r\n\t\t{\r\n\t\t\tif (option == StreamParameterOptions.ReadTimeout)\r\n\t\t\t{\r\n                int timeout = (int)(Convert.ObjectToDouble(value) * 1000.0);\r\n\t\t\t\tsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, timeout);\r\n\t\t\t\tsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, timeout);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn base.SetParameter(option, value);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversion to .NET native Stream (NS)\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawStream\"]/*'/>\r\n\t\tpublic override Stream RawStream\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tthrow new NotImplementedException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tnew public static SocketStream GetValid(PhpResource handle)\r\n\t\t{\r\n\t\t\tSocketStream result = handle as SocketStream;\r\n\t\t\tif (result == null)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_socket_stream_resource\"));\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpStream.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region PhpStream (partial) class\r\n\r\n\t/// <summary>\r\n\t/// Abstraction of streaming behavior for PHP.\r\n\t/// PhpStreams are opened by StreamWrappers on a call to fopen().\r\n\t/// </summary>\r\n\tpublic abstract partial class PhpStream : PhpResource\r\n\t{\r\n\t\t#region Opening utilities\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Merges the path with the current working directory\r\n\t\t/// to get a canonicalized absolute pathname representing the same file.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This method is an analogy of <c>main/safe_mode.c: php_checkuid</c>.\r\n\t\t/// Looks for the file in the <c>include_path</c> and checks for <c>open_basedir</c> restrictions.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"path\">An absolute or relative path to a file.</param>\r\n\t\t/// <param name=\"wrapper\">The wrapper found for the specified file or <c>null</c> if the path resolution fails.</param>\r\n\t\t/// <param name=\"mode\">The checking mode of the <see cref=\"CheckAccess\"/> method (file, directory etc.).</param>\r\n\t\t/// <param name=\"options\">Additional options for the <see cref=\"CheckAccess\"/> method.</param>\r\n\t\t/// <returns><c>true</c> if all the resolution and checking passed without an error, <b>false</b> otherwise.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Security violation - when the target file \r\n\t\t/// lays outside the tree defined by <c>open_basedir</c> configuration option.</exception>\r\n\t\tpublic static bool ResolvePath(ref string path, out StreamWrapper wrapper, CheckAccessMode mode, CheckAccessOptions options)\r\n\t\t{\r\n\t\t\t// Path will contain the absolute path without file:// or the complete URL; filename is the relative path.\r\n\t\t\tstring filename, scheme = GetSchemeInternal(path, out filename);\r\n\t\t\twrapper = StreamWrapper.GetWrapper(scheme, (StreamOptions)options);\r\n\t\t\tif (wrapper == null) return false;\r\n\r\n\t\t\tif (wrapper.IsUrl)\r\n\t\t\t{\r\n\t\t\t\t// Note: path contains the whole URL, filename the same without the scheme:// portion.\r\n\t\t\t\t// What to check more?\r\n\t\t\t}\r\n\t\t\telse if (scheme != \"php\")\r\n\t\t\t{\r\n\t\t\t\t// SILVERLIGHT: ?? what to do here ??\r\n\t\t\t\t// PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\", path));\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpStream.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Net;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Stream Context\r\n\r\n\t/// <summary>\r\n\t/// Resource type used for associating additional options with stream wrappers.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Stream Contexts are stored in a Resource to save useless deep-copying\r\n\t/// of the contained constant array.\r\n\t/// </remarks>\r\n\tpublic class StreamContext : PhpResource\r\n\t{\r\n        /// <summary>\r\n        /// Default StreamContext. Cannot be null.\r\n        /// </summary>\r\n\t\tpublic static readonly StreamContext/*!*/Default = new StreamContext(null, false);\r\n\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The contained context array (2D associative array: first wrapper, then options).\r\n\t\t/// </summary>\r\n\t\tpublic PhpArray Data\r\n\t\t{\r\n\t\t\tget { return data; }\r\n\t\t\tset { data = value; }\r\n\t\t}\r\n\t\tprotected PhpArray data;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The additional parameters (currently only a notification callback).\r\n\t\t/// </summary>\r\n\t\tpublic PhpArray Parameters\r\n\t\t{\r\n\t\t\tget { return this.parameters; }\r\n\t\t\tset { this.parameters = value; }\r\n\t\t}\r\n\t\tprotected PhpArray parameters;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The type name displayed when printing a variable of type StreamContext.\r\n\t\t/// </summary>\r\n\t\tpublic const string StreamContextTypeName = \"stream-context\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Constructors\r\n\r\n\t\t/// <summary>\r\n\t\t/// Create an empty StreamContext (allows lazy PhpArray instantiation).\r\n\t\t/// </summary>\r\n\t\tpublic StreamContext() : this(null, true) { }\r\n\r\n        /// <summary>\r\n\t\t/// Create a new context resource from an array of wrapper options.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">A 2-dimensional array of wrapper options</param>\r\n        public StreamContext(PhpArray data)\r\n            : this(data, true) { }\r\n\r\n        /// <summary>\r\n        /// Create a new context resource from an array of wrapper options.\r\n        /// </summary>\r\n        /// <param name=\"data\">A 2-dimensional array of wrapper options</param>\r\n        /// <param name=\"registerInReqContext\">Whether to register this instance in current <see cref=\"RequestContext\"/>. Should be <c>false</c> for static resources.</param>\r\n        private StreamContext(PhpArray data, bool registerInReqContext)\r\n            : base(StreamContextTypeName, registerInReqContext)\r\n        {\r\n            this.data = data;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Checks the context for validity, throws a warning it is not.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Resource which should contain a StreamContext.</param>\r\n\t\t/// <returns>The given resource cast to <see cref=\"StreamContext\"/> or <c>null</c> if invalid.</returns>\r\n\t\t/// <exception cref=\"PhpException\">In case the context is invalid.</exception>\r\n\t\tpublic static StreamContext GetValid(PhpResource context)\r\n        {\r\n            return GetValid(context, false);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks the context for validity, throws a warning it is not.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Resource which should contain a StreamContext.</param>\r\n        /// <param name=\"allowNull\"><c>True</c> to allow <c>NULL</c> context, that will be without any warning converted to Default <see cref=\"StreamContext\"/>.</param>\r\n        /// <returns>The given resource cast to <see cref=\"StreamContext\"/> or <c>null</c> if invalid and <c>allowNull</c> is <c>false</c>.</returns>\r\n\t\t/// <exception cref=\"PhpException\">In case the context is invalid.</exception>\r\n\t\tpublic static StreamContext GetValid(PhpResource context, bool allowNull)\r\n\t\t{\r\n            // implicit default from NULL\r\n            if (allowNull && context == null)\r\n                return StreamContext.Default;\r\n\r\n            // try to cast to StreamContext\r\n\t\t\tStreamContext result = context as StreamContext;\r\n\t\t\tif (result != null /* TODO: Why is default context disposed? && result.IsValid*/) return result;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_context_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a wrapper-specific option identified by the scheme and the option name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"scheme\">The target wrapper scheme.</param>\r\n\t\t/// <param name=\"option\">The option name.</param>\r\n\t\t/// <returns>The specific option or <b>null</b> if no such option exists.</returns>\r\n\t\tpublic object GetOption(string scheme, string option)\r\n\t\t{\r\n\t\t\tif ((data != null) && (data.ContainsKey(scheme)))\r\n\t\t\t{\r\n\t\t\t\tPhpArray options = data[scheme] as PhpArray;\r\n\t\t\t\tif ((options != null) && (options.ContainsKey(option)))\r\n\t\t\t\t\treturn options[option];\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Shortcuts for the short overload of PhpStream.Open\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum StreamOpenMode\r\n\t{\r\n\t\t/// <summary>Open for reading</summary>\r\n\t\tRead = ReadText,\r\n\t\t/// <summary>Open for writing</summary>\r\n\t\tWrite = WriteText,\r\n\t\t/// <summary>Open for reading (text mode)</summary>\r\n\t\tReadText = 0,\r\n\t\t/// <summary>Open for writing (text mode)</summary>\r\n\t\tWriteText = 1,\r\n\t\t/// <summary>Open for reading (binary mode)</summary>\r\n\t\tReadBinary = 2,\r\n\t\t/// <summary>Open for writing (binary mode)</summary>\r\n\t\tWriteBinary = 3\r\n\t}\r\n\r\n\t#region PhpStream Class\r\n\r\n\t#region Enumerations (StreamParameterOptions, CheckAccessMode, CheckAccessOptions)\r\n\t/// <summary>\r\n\t/// Parameter identifier for <see cref=\"PhpStream.SetParameter\"/>.\r\n\t/// </summary>\r\n\tpublic enum StreamParameterOptions\r\n\t{\r\n\t\t/// <summary>Set the synchronous/asynchronous operation mode (<c>value</c> is <see cref=\"bool\"/>.</summary>\r\n\t\tBlockingMode = 1,\r\n\t\t/// <summary>Set the read buffer size (<c>value</c> is <see cref=\"int\"/>).</summary>\r\n\t\tReadBufferSize = 2,\r\n\t\t/// <summary>Set the write buffer size (<c>value</c> is <see cref=\"int\"/>).</summary>\r\n\t\tWriteBufferSize = 3,\r\n\t\t/// <summary>Set the read timeout in seconds (<c>value</c> is <see cref=\"double\"/>).</summary>\r\n\t\tReadTimeout = 4,\r\n\t\t/// <summary>Set the read chunk size (<c>value</c> is <see cref=\"int\"/>).</summary>\r\n\t\tSetChunkSize = 5,\r\n\t\t/// <summary>Set file locking (<c>value</c> is <see cref=\"int\"/>).</summary>\r\n\t\tLocking = 6,\r\n\t\t/// <summary>Set memory mapping. Unimplemented.</summary>\r\n\t\tMemoryMap = 9,\r\n\t\t/// <summary>Truncate the stream at the current position.</summary>\r\n\t\tTruncate = 10\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Mode selector of <see cref=\"PhpStream.CheckAccess\"/>.\r\n\t/// </summary>\r\n\tpublic enum CheckAccessMode\r\n\t{\r\n\t\t/// <summary>Return invalid <c>false</c> if file does not exist (<c>fopen()</c>).</summary>\r\n\t\tFileExists = 0,\r\n\t\t/// <summary>Return valid <c>true</c> if file does not exist (for example <c>rename()</c>.</summary>\r\n\t\tFileNotExists = 1,\r\n\t\t/// <summary>If file does not exist, check directory (for example <c>stat()</c>).</summary>\r\n\t\tFileOrDirectory = 2,\r\n\t\t/// <summary>Only check directory (needed for <c>mkdir</c>, <c>opendir</c>).</summary>\r\n\t\tDirectory = 3,\r\n\t\t/// <summary>Only check file.</summary>\r\n\t\tFileMayExist = 5\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Additional options for <see cref=\"PhpStream.CheckAccess\"/>.\r\n\t/// </summary>\r\n\tpublic enum CheckAccessOptions\r\n\t{\r\n\t\t/// <summary>Empty option (default).</summary>\r\n\t\tEmpty = 0,\r\n\t\t/// <summary>If <c>true</c> then the include paths are searched for the file too (1).</summary>\r\n\t\tUseIncludePath = StreamOptions.UseIncludePath,\r\n\t\t/// <summary>Suppress display of error messages (2).</summary>\r\n\t\tQuiet = StreamStatOptions.Quiet\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\r\n\t/// <summary>\r\n\t/// Abstraction of streaming behavior for PHP.\r\n\t/// PhpStreams are opened by StreamWrappers on a call to fopen().\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <para>\r\n\t/// PhpStream is a descendant of PhpResource,\r\n\t/// it contains a StreamContext (may be empty) and two ordered lists of StreamFilters\r\n\t/// (input and output filters).\r\n\t/// PhpStream may be cast to a .NET stream (using its RawStream property).\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// Various stream types are defined by overriding the <c>Raw*</c> methods\r\n\t/// that provide direct access to the underlying physical stream.\r\n\t/// Corresponding public methods encapsulate these accessors with\r\n\t/// buffering and filtering. Raw stream access is performed at the <c>byte[]</c> level.\r\n\t/// ClassLibrary functions may use either the <c>Read/WriteBytes</c>\r\n\t/// or <c>Read/WriteString</c> depending on the nature of the PHP function.\r\n\t/// Data are converted using the <see cref=\"ApplicationConfiguration.GlobalizationSection.PageEncoding\"/>\r\n\t/// as necessary.\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// When reading from a stream, the stream data is read in binary format\r\n\t/// in chunks of predefined size (8kB). Stream filters (if any) are then applied\r\n\t/// in a cascade to the whole block. Filtered blocks are stored in a\r\n\t/// <see cref=\"Queue\"/> of either strings or PhpBytes depending on the last\r\n\t/// filter output (note that after filtering not all blocks have necessarily\r\n\t/// the original chunk size; when appending a filter to the filter-chain\r\n\t/// all the buffered data is passed through this one too). The input queue is being \r\n\t/// filled until the required data length is available. The <see cref=\"readPosition\"/> \r\n\t/// property holds the index into the first chunk of data. When this chunk is \r\n\t/// entirely consumed it is dequeued.\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// Writing to a stream is buffered too (unless it is disabled using <c>stream_set_write_buffer</c>). \r\n\t/// When the data passes through the filter-chain it is appended to the \r\n\t/// write buffer (using the <see cref=\"writePosition\"/> property). \r\n\t/// When the write buffer is full it is flushed to the underlying stream.\r\n\t/// </para>\r\n\t/// </remarks>\r\n\tpublic abstract partial class PhpStream : PhpResource\r\n\t{\r\n\t\t#region PhpStream Opening\r\n\r\n\t\t/// <summary>\r\n\t\t/// Simple version of the stream opening function\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">URI or filename of the resource to be opened</param>\r\n\t\t/// <param name=\"mode\">File access mode</param>\r\n\t\t/// <returns></returns>\r\n\t\tinternal static PhpStream Open(string path, StreamOpenMode mode)\r\n\t\t{\r\n\t\t\tstring modeStr = null;\r\n\t\t\tswitch (mode)\r\n\t\t\t{\r\n\t\t\t\tcase StreamOpenMode.ReadBinary: modeStr = \"rb\"; break;\r\n\t\t\t\tcase StreamOpenMode.WriteBinary: modeStr = \"wb\"; break;\r\n\t\t\t\tcase StreamOpenMode.ReadText: modeStr = \"rt\"; break;\r\n\t\t\t\tcase StreamOpenMode.WriteText: modeStr = \"wt\"; break;\r\n\t\t\t}\r\n\t\t\tDebug.Assert(modeStr != null);\r\n\t\t\treturn Open(path, modeStr, StreamOpenOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\r\n\t\tpublic static PhpStream Open(string path, string mode)\r\n\t\t{\r\n\t\t\treturn Open(path, mode, StreamOpenOptions.Empty, StreamContext.Default);\r\n\t\t}\r\n\r\n\t\tpublic static PhpStream Open(string path, string mode, StreamOpenOptions options)\r\n\t\t{\r\n\t\t\treturn Open(path, mode, options, StreamContext.Default);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if the given path is a filesystem path or an URL and returns the corresponding scheme.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The path to be canonicalized.</param>\r\n\t\t/// <param name=\"filename\">The filesystem path before canonicalization (may be both relative or absolute).</param>\r\n\t\t/// <returns>The protocol portion of the given URL or <c>\"file\"</c>o for local files.</returns>\r\n\t\tinternal static string GetSchemeInternal(string path, out string filename)\r\n\t\t{\r\n\t\t\tint colon_index = path.IndexOf(':');\r\n\t\t\tif (colon_index == -1)\r\n\t\t\t{\r\n\t\t\t\t// No scheme, no root directory, it's a relative path.\r\n\t\t\t\tfilename = path;\r\n\t\t\t\treturn \"file\";\r\n\t\t\t}\r\n\r\n\t\t\tif (Path.IsPathRooted(path))\r\n\t\t\t{\r\n\t\t\t\t// It already is an absolute path.\r\n\t\t\t\tfilename = path;\r\n\t\t\t\treturn \"file\";\r\n\t\t\t}\r\n\r\n\t\t\tif (path.Length < colon_index + 3 || path[colon_index + 1] != '/' || path[colon_index + 2] != '/')\r\n\t\t\t{\r\n\t\t\t\t// There is no \"//\" following the colon.\r\n\t\t\t\tfilename = path;\r\n\t\t\t\treturn \"file\";\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise it is an URL (including file://), set the filename and return the scheme.\r\n\t\t\tfilename = path.Substring(colon_index + \"://\".Length);\r\n\t\t\treturn path.Substring(0, colon_index);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Openes a PhpStream using the appropriate StreamWrapper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">URI or filename of the resource to be opened.</param>\r\n\t\t/// <param name=\"mode\">A file-access mode as passed to the PHP function.</param>\r\n\t\t/// <param name=\"options\">A combination of <see cref=\"StreamOpenOptions\"/>.</param>\r\n\t\t/// <param name=\"context\">A valid StreamContext. Must not be <c>null</c>.</param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic static PhpStream Open(string path, string mode, StreamOpenOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\tStreamWrapper wrapper;\r\n\t\t\tif (!PhpStream.ResolvePath(ref path, out wrapper, CheckAccessMode.FileMayExist, (CheckAccessOptions)options))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn wrapper.Open(ref path, mode, options, context);\r\n\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Flushes the stream before closing.\r\n\t\t/// </summary>\r\n\t\t~PhpStream()\r\n\t\t{\r\n\t\t\tif (!this.IsPersistent) this.Flush();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PhpResource override methods\r\n\t\t/// <summary>\r\n\t\t/// PhpStream is created by a StreamWrapper together with the\r\n\t\t/// encapsulated RawStream (the actual file opening is handled \r\n\t\t/// by the wrapper).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This class newly implements the auto-remove behavior too\r\n\t\t/// (see <see cref=\"StreamAccessOptions.Temporary\"/>).\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"openingWrapper\">The parent instance.</param>\r\n\t\t/// <param name=\"accessOptions\">The additional options parsed from the <c>fopen()</c> mode.</param>\r\n\t\t/// <param name=\"openedPath\">The absolute path to the opened resource.</param>\r\n\t\t/// <param name=\"context\">The stream context passed to fopen().</param>\r\n\t\tpublic PhpStream(StreamWrapper openingWrapper, StreamAccessOptions accessOptions, string openedPath, StreamContext context)\r\n\t\t\t: base(PhpStreamTypeName)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null);\r\n\r\n\t\t\tthis.context = context;\r\n\t\t\tthis.Wrapper = openingWrapper;\r\n\t\t\tthis.OpenedPath = openedPath;\r\n\r\n\t\t\t// Stream modifiers (defined in open-time).\r\n\t\t\tthis.Options = accessOptions;\r\n\r\n\t\t\t// Allocate the text conversion filters for this stream.\r\n\t\t\tif ((accessOptions & StreamAccessOptions.UseText) > 0)\r\n\t\t\t{\r\n\t\t\t\tif ((accessOptions & StreamAccessOptions.Read) > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\ttextReadFilter = new TextReadFilter();\r\n\t\t\t\t}\r\n\t\t\t\tif ((accessOptions & StreamAccessOptions.Write) > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\ttextWriteFilter = new TextWriteFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.readTimeout = ScriptContext.CurrentContext.Config.FileSystem.DefaultSocketTimeout;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PhpResource.FreeManaged overridden to get rid of the contained context on Dispose.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\t// Flush the underlying stream before closing.\r\n\t\t\tif ((writeFilters != null) && (writeFilters.Count > 0))\r\n\t\t\t{\r\n\t\t\t\t// Pass an empty data with closing == true through all the filters.\r\n\t\t\t\tWriteData(PhpBytes.Empty, true);\r\n\t\t\t}\r\n\t\t\tFlush();\r\n\r\n\r\n\t\t\tif (context != null)\r\n\t\t\t{\r\n\t\t\t\tcontext.Close();\r\n\t\t\t\tcontext = null;\r\n\t\t\t}\r\n\r\n            writeBuffer = null; // http://phalanger.codeplex.com/workitem/31272\r\n\t\t\t\t\t\t\r\n\t\t\tbase.FreeManaged();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PhpResource.FreeUnmanaged overridden to remove a temporary file on Dispose.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeUnmanaged()\r\n\t\t{\r\n\t\t\t// Note: this method is called after FreeManaged, so the stream is already closed.\r\n\t\t\tbase.FreeUnmanaged();\r\n\t\t\tif (this.IsTemporary)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Wrapper.Unlink(OpenedPath, StreamUnlinkOptions.Empty, StreamContext.Default);\r\n\t\t\t\t\t// File.Delete(this.OpenedPath);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region Raw byte access (mandatory)\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawRead\"]/*'/>\r\n\t\tprotected abstract int RawRead(byte[] buffer, int offset, int count);\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawWrite\"]/*'/>\r\n\t\tprotected abstract int RawWrite(byte[] buffer, int offset, int count);\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawFlush\"]/*'/>\r\n\t\tprotected abstract bool RawFlush();\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawEof\"]/*'/>\r\n\t\tprotected abstract bool RawEof { get; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Seeking (optional)\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"CanSeek\"]/*'/>\r\n\t\tpublic virtual bool CanSeek { get { return false; } }\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawTell\"]/*'/>\r\n\t\tprotected virtual int RawTell()\r\n\t\t{\r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawSeek\"]/*'/>\r\n\t\tprotected virtual bool RawSeek(int offset, SeekOrigin whence)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the length of the stream.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Count of bytes in the stream or <c>-1</c> if seek is not supported.</returns>\r\n\t\tprotected virtual int RawLength()\r\n\t\t{\r\n\t\t\tif (!CanSeek) return -1;\r\n\t\t\tint current = RawTell();\r\n\t\t\tif ((current < 0) || !RawSeek(0, SeekOrigin.End)) return -1;\r\n\t\t\tint rv = RawTell();\r\n\t\t\tif ((rv < 0) || !RawSeek(current, SeekOrigin.Begin)) return -1;\r\n\t\t\treturn rv;\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region SetParameter (optional)\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"SetParameter\"]/*'/>\r\n\t\tpublic virtual bool SetParameter(StreamParameterOptions option, object value)\r\n\t\t{\r\n\t\t\t// Do not display error messages here, the caller will.\r\n\t\t\t// EX: will have to distinguish between failed and unsupported.\r\n\t\t\t// (use additional message when fails)\r\n\r\n\t\t\t// Descendants may call this default implementation for unhandled options\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n\t\t\t\tcase StreamParameterOptions.BlockingMode:\r\n\t\t\t\t\t// Unimplemented in Win32 PHP.\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.ReadBufferSize:\r\n\t\t\t\t\t// Unused option (only turns buffering off)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.WriteBufferSize:\r\n\t\t\t\t\tif (value is int)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Let the write buffer reset on next write operation.\r\n\t\t\t\t\t\tFlushWriteBuffer();\r\n\t\t\t\t\t\twriteBuffer = null;\r\n\t\t\t\t\t\t// Set the new size (0 to disable write buffering).\r\n\t\t\t\t\t\twriteBufferSize = (int)value;\r\n\t\t\t\t\t\tif (writeBufferSize < 0) writeBufferSize = 0;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.ReadTimeout:\r\n\t\t\t\t\t// Set the read timeout for network-based streams (overrides DefaultTimeout).\r\n\t\t\t\t\tthis.readTimeout = (double)value;\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.SetChunkSize:\r\n\t\t\t\t\tif (value is int)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// This setting will affect reading after the buffers are emptied.\r\n\t\t\t\t\t\treadChunkSize = (int)value;\r\n\t\t\t\t\t\tif (readChunkSize < 1) readChunkSize = 1;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.Locking:\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.MemoryMap:\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tcase StreamParameterOptions.Truncate:\r\n\t\t\t\t\t// EX: [Truncate] Override SetParameter in NativeStream to truncate a local file.\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Assert(false); // invalid option\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region High-level Stream Access (Buffering and Filtering)\r\n\r\n\t\t#region High-level Reading\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawEof\"]/*'/>\r\n\t\tpublic bool Eof\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                // The raw stream reached EOF and all the data is processed.\r\n\t\t\t\tif (RawEof)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Check the buffers as quickly as possible.\r\n\t\t\t\t\tif ((readBuffers == null) || (readBuffers.Count == 0)) return true;\r\n\r\n\t\t\t\t\t// There is at least one buffer, check position.\r\n\t\t\t\t\tint firstLength = GetDataLength(readBuffers.Peek());\r\n\t\t\t\t\tif (firstLength > readPosition) return false;\r\n\r\n\t\t\t\t\tif (ReadBufferLength == 0) return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#region Buffered Reading\r\n\r\n\t\tprivate int ReadBufferScan(out int nlpos)\r\n\t\t{\r\n\t\t\tint total = 0;\r\n\t\t\tnlpos = -1;\r\n\t\t\tif (readBuffers == null) return 0;\r\n\r\n\t\t\t// Yields to 0 for empty readBuffers.\r\n\t\t\tforeach (object o in readBuffers)\r\n\t\t\t{\r\n\t\t\t\tstring str = o as String;\r\n\t\t\t\tPhpBytes bin = o as PhpBytes;\r\n\r\n\t\t\t\tint read = 0;\r\n\t\t\t\tif (str != null) read = str.Length;\r\n\t\t\t\telse if (bin != null) read = bin.Length;\r\n\t\t\t\telse Debug.Assert(false);\r\n\r\n\t\t\t\tif ((nlpos == -1) && (total <= readPosition) && (total + read > readPosition))\r\n\t\t\t\t{\r\n\t\t\t\t\t// Find the first occurence of \\n.\r\n\t\t\t\t\tnlpos = total + FindEoln(o, readPosition - total);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttotal += read;\r\n\t\t\t}\r\n\r\n\t\t\t// Substract the count of data already processed.\r\n\t\t\ttotal -= readPosition;\r\n\t\t\treturn total;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of <c>byte</c>s or <c>char</c>s available\r\n\t\t/// in the <see cref=\"readBuffers\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected int ReadBufferLength\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tint nlpos;\r\n\t\t\t\treturn ReadBufferScan(out nlpos);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fills the <see cref=\"readBuffers\"/> with more data from the underlying stream\r\n\t\t/// passed through all the stream filters. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"chunkSize\">Maximum number of bytes to be read from the stream.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing the \r\n\t\t/// data as returned from the last stream filter or <b>null</b> in case of an error or <c>EOF</c>.</returns>\r\n\t\tprotected object ReadFiltered(int chunkSize)\r\n\t\t{\r\n\t\t\tbyte[] chunk = new byte[chunkSize];\r\n\t\t\tobject filtered = null;\r\n\r\n\t\t\twhile (filtered == null)\r\n\t\t\t{\r\n\t\t\t\t// Read data until there is an output or error or EOF.\r\n\t\t\t\tif (RawEof) return null;\r\n\t\t\t\tint read = RawRead(chunk, 0, chunkSize);\r\n\t\t\t\tif (read <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Error or EOF.\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (read < chunkSize)\r\n\t\t\t\t{\r\n\t\t\t\t\tbyte[] sub = new byte[read];\r\n\t\t\t\t\tArray.Copy(chunk, 0, sub, 0, read);\r\n\t\t\t\t\tchunk = sub;\r\n\t\t\t\t}\r\n\t\t\t\tfiltered = new PhpBytes(chunk);\r\n\r\n\t\t\t\tbool closing = RawEof;\r\n\r\n\t\t\t\tif (textReadFilter != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// First use the text-input filter if any.\r\n\t\t\t\t\tfiltered = textReadFilter.Filter(filtered, closing);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (readFilters != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// After that apply the user-filters.\r\n\t\t\t\t\tforeach (IFilter f in readFilters)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (filtered == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// This is the last chance to output something. Give chance to all filters.\r\n\t\t\t\t\t\t\tif (closing) filtered = PhpBytes.Empty;\r\n\t\t\t\t\t\t\telse break; // Continue with next RawRead()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfiltered = f.Filter(filtered, closing);\r\n\t\t\t\t\t} // foreach\r\n\t\t\t\t} // if\r\n\t\t\t} // while \r\n\r\n\t\t\treturn filtered;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Put a buffer at the end of the <see cref=\"readBuffers\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The buffer to append.</param>\r\n\t\tinternal void EnqueueReadBuffer(object data)\r\n\t\t{\r\n\t\t\tDebug.Assert((data is string) || (data is PhpBytes));\r\n\r\n\t\t\t// This may be the first access to the buffers.\r\n\t\t\tif (readBuffers == null)\r\n\t\t\t\treadBuffers = new Queue(2);\r\n\r\n\t\t\t// Append the filtered output to the buffers.\r\n\t\t\treadBuffers.Enqueue(data);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Remove the (entirely consumed) read buffer from the head of the read buffer queue.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>true</c> if there are more buffers in the queue.</returns>\r\n\t\tprotected bool DropReadBuffer()\r\n\t\t{\r\n\t\t\tDebug.Assert(readBuffers != null);\r\n\t\t\tDebug.Assert(readBuffers.Count > 0);\r\n\r\n\t\t\tobject data = readBuffers.Dequeue();\r\n\t\t\tint length = GetDataLength(data);\r\n\t\t\tDebug.Assert(length > 0);\r\n\r\n\t\t\t// Add the new offset to the total one.\r\n\t\t\treadOffset += length;\r\n\r\n\t\t\treadPosition = 0;\r\n\t\t\treturn readBuffers.Count > 0;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Joins the read buffers to get at least <paramref name=\"length\"/> characters\r\n\t\t/// in a <see cref=\"string\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It is assumed that there already is length bytes in the buffers.\r\n\t\t/// Otherwise an InvalidOperationException is raised.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"length\">The desired maximum result length.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> dequeued from the buffer or <c>null</c> if the buffer is empty.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">If the buffers don't contain enough data.</exception>\r\n\t\tprotected string ReadTextBuffer(int length)\r\n\t\t{\r\n\t\t\tif (length == 0) return string.Empty;\r\n\r\n\t\t\tstring peek = readBuffers.Peek() as string;\r\n\t\t\tif (peek == null) throw new InvalidOperationException(CoreResources.GetString(\"buffers_must_not_be_empty\"));\r\n\t\t\tDebug.Assert(peek.Length >= readPosition);\r\n\r\n\t\t\tif (peek.Length - readPosition >= length)\r\n\t\t\t{\r\n\t\t\t\t// Great! We can just take a substring.\r\n\t\t\t\tstring res = peek.Substring(readPosition, length);\r\n\t\t\t\treadPosition += length;\r\n\r\n\t\t\t\tif (peek.Length == readPosition)\r\n\t\t\t\t{\r\n\t\t\t\t\t// We just consumed the entire string. Dequeue it.\r\n\t\t\t\t\tDropReadBuffer();\r\n\t\t\t\t}\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Start building the string from the remainder in the buffer.\r\n\t\t\t\tStringBuilder sb = new StringBuilder(peek, readPosition, peek.Length - readPosition, length);\r\n\t\t\t\tlength -= peek.Length - readPosition;\r\n\r\n\t\t\t\t// We just consumed the entire string. Dequeue it.\r\n\t\t\t\tDropReadBuffer();\r\n\r\n\t\t\t\twhile (length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tpeek = readBuffers.Peek() as string;\r\n\t\t\t\t\tif (peek == null) throw new InvalidOperationException(CoreResources.GetString(\"too_little_data_buffered\"));\r\n\t\t\t\t\tif (peek.Length > length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// This string is long enough. It is the last one.\r\n\t\t\t\t\t\tsb.Append(peek, 0, length);\r\n\t\t\t\t\t\treadPosition = length;\r\n\t\t\t\t\t\tlength = 0;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Append just another whole buffer to the StringBuilder.\r\n\t\t\t\t\t\tsb.Append(peek);\r\n\t\t\t\t\t\tlength -= peek.Length;\r\n\t\t\t\t\t\tDropReadBuffer();\r\n\r\n\t\t\t\t\t\t// When this is the last buffer (it's probably an EOF), return.\r\n\t\t\t\t\t\tif (readBuffers.Count == 0)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} // while\r\n\r\n\t\t\t\tDebug.Assert(sb.Length > 0);\r\n\t\t\t\treturn sb.ToString();\r\n\t\t\t} // else\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Joins the read buffers to get at least <paramref name=\"length\"/> bytes\r\n\t\t/// in a <see cref=\"PhpBytes\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"length\">The desired maximum result length.</param>\r\n\t\t/// <returns>A <see cref=\"PhpBytes\"/> dequeued from the buffer or <c>null</c> if the buffer is empty.</returns>\r\n\t\tprotected PhpBytes ReadBinaryBuffer(int length)\r\n\t\t{\r\n\t\t\tif (length == 0) return PhpBytes.Empty;\r\n\r\n\t\t\tPhpBytes peek = (PhpBytes)readBuffers.Peek();\r\n\t\t\tDebug.Assert(peek.Length >= readPosition);\r\n\r\n\t\t\tif (peek.Length - readPosition >= length)\r\n\t\t\t{\r\n\t\t\t\t// Great! We can just take a sub-data.\r\n\t\t\t\tbyte[] data = new byte[length];\r\n                Array.Copy(peek.ReadonlyData, readPosition, data, 0, length);\r\n\t\t\t\tPhpBytes res = new PhpBytes(data);\r\n\t\t\t\treadPosition += length;\r\n\r\n\t\t\t\tif (peek.Length == readPosition)\r\n\t\t\t\t{\r\n\t\t\t\t\t// We just consumed the entire string. Dequeue it.\r\n\t\t\t\t\tDropReadBuffer();\r\n\t\t\t\t}\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Start building the data from the remainder in the buffer.\r\n\t\t\t\tint buffered = this.ReadBufferLength;\r\n\t\t\t\tif (buffered < length) length = buffered;\r\n\t\t\t\tbyte[] data = new byte[length];\r\n\t\t\t\tint copied = peek.Length - readPosition;\r\n                Array.Copy(peek.ReadonlyData, readPosition, data, 0, copied); readPosition += copied;\r\n\t\t\t\tlength -= copied;\r\n\r\n\t\t\t\t// We just consumed the entire data. Dequeue it.\r\n\t\t\t\tDropReadBuffer();\r\n\r\n\t\t\t\twhile (length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tpeek = readBuffers.Peek() as PhpBytes;\r\n\t\t\t\t\tif (peek.Length > length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// This data is long enough. It is the last one.\r\n                        Array.Copy(peek.ReadonlyData, 0, data, copied, length);\r\n\t\t\t\t\t\treadPosition = length;\r\n\t\t\t\t\t\tlength = 0;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Append just another whole buffer to the array.\r\n                        Array.Copy(peek.ReadonlyData, 0, data, copied, peek.Length);\r\n\t\t\t\t\t\tlength -= peek.Length;\r\n\t\t\t\t\t\tcopied += peek.Length;\r\n\t\t\t\t\t\tDropReadBuffer();\r\n\r\n\t\t\t\t\t\t// When this is the last buffer (it's probably an EOF), return.\r\n\t\t\t\t\t\tif (readBuffers.Count == 0)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} // while\r\n\r\n\t\t\t\tDebug.Assert(copied > 0);\r\n\t\t\t\tif (copied < length)\r\n\t\t\t\t{\r\n\t\t\t\t\tbyte[] sub = new byte[copied];\r\n\t\t\t\t\tArray.Copy(data, 0, sub, 0, copied);\r\n\t\t\t\t\treturn new PhpBytes(sub);\r\n\t\t\t\t}\r\n\t\t\t\treturn new PhpBytes(data);\r\n\t\t\t} // else\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Data Block Conversions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the length of a block of data (either a <see cref=\"String\"/> or <see cref=\"PhpBytes\"/>).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">A <see cref=\"String\"/> or <see cref=\"PhpBytes\"/> to be measured.</param>\r\n\t\t/// <returns>The length of the block or <c>-1</c> if the type is neither <see cref=\"String\"/> nor <see cref=\"PhpBytes\"/>.\r\n\t\t/// </returns>\r\n\t\tpublic static int GetDataLength(object data)\r\n\t\t{\r\n\t\t\tstring str;\r\n\t\t\tPhpBytes bin;\r\n\r\n            if ((str = data as string) != null) return str.Length;\r\n            else if ((bin = data as PhpBytes) != null) return bin.Length;\r\n\r\n\t\t\t// Must be either \r\n\t\t\tDebug.Assert(false);\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts the input parameter as <see cref=\"PhpBytes\"/>, converting it\r\n\t\t/// using the page encoding if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">The input passed to the filter. Must not be <c>null</c>.</param>\r\n\t\t/// <returns>The input cast to <see cref=\"PhpBytes\"/> or <see cref=\"PhpBytes.Empty\"/> for empty input.</returns>\r\n\t\tpublic static PhpBytes AsBinary(object input)\r\n\t\t{\r\n\t\t\treturn Core.Convert.ObjectToPhpBytes(input);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts the input parameter as <see cref=\"string\"/>, converting it\r\n\t\t/// using the page encoding if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">The input passed to the filter. Must not be <c>null</c>.</param>\r\n\t\t/// <param name=\"count\">The maximum count of input entities to convert.</param>\r\n\t\t/// <returns>The input cast to <see cref=\"PhpBytes\"/> or <see cref=\"PhpBytes.Empty\"/> for empty input.</returns>\r\n\t\tpublic static PhpBytes AsBinary(object input, int count)\r\n\t\t{\r\n\t\t\tif (input == null) return PhpBytes.Empty;\r\n\r\n\t\t\t// Use only the necessary portion of the string\r\n\t\t\tstring str = input as string;\r\n\t\t\tif (str != null)\r\n\t\t\t{\r\n\t\t\t\tif (count > str.Length)\r\n\t\t\t\t\treturn new PhpBytes(Configuration.Application.Globalization.PageEncoding.GetBytes(str));\r\n\r\n\t\t\t\tbyte[] sub = new byte[count];\r\n\t\t\t\tConfiguration.Application.Globalization.PageEncoding.GetBytes(str, 0, count, sub, 0);\r\n\t\t\t\treturn new PhpBytes(sub);\r\n\t\t\t}\r\n\r\n\t\t\t// All other types treat as one case.\r\n\t\t\tPhpBytes bin = Core.Convert.ObjectToPhpBytes(input);\r\n\t\t\tif (count >= bin.Length) return bin;\r\n\t\t\tbyte[] sub2 = new byte[count];\r\n\t\t\tArray.Copy(bin.ReadonlyData, 0, sub2, 0, count);\r\n\t\t\treturn new PhpBytes(sub2);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts the input parameter as <see cref=\"string\"/>, converting it\r\n\t\t/// using the page encoding if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">The input passed to the filter.</param>\r\n\t\t/// <returns>The input cast to <see cref=\"string\"/> or <see cref=\"string.Empty\"/> for empty input.</returns>\r\n\t\tpublic static string AsText(object input)\r\n\t\t{\r\n\t\t\treturn Core.Convert.ObjectToString(input);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts the input parameter as <see cref=\"string\"/>, converting it\r\n\t\t/// using the page encoding if necessary.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"input\">The input passed to the filter.</param>\r\n\t\t/// <param name=\"count\">The count of input entities to convert.</param>\r\n\t\t/// <returns>The input cast to <see cref=\"string\"/> or <see cref=\"string.Empty\"/> for empty input.</returns>\r\n\t\tpublic static string AsText(object input, int count)\r\n\t\t{\r\n\t\t\tif (input == null) return string.Empty;\r\n\r\n\t\t\t// Use only the necessary portion of the PhpBytes\r\n\t\t\tPhpBytes bin = input as PhpBytes;\r\n\t\t\tif (bin != null)\r\n\t\t\t{\r\n\t\t\t\tif (count > bin.Length) count = bin.Length;\r\n                return Configuration.Application.Globalization.PageEncoding.GetString(bin.ReadonlyData, 0, count);\r\n\t\t\t}\r\n\r\n\t\t\tstring str = Core.Convert.ObjectToString(input);\r\n\t\t\tif (count >= str.Length) return str;\r\n\t\t\treturn str.Substring(0, count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\r\n\r\n\t\t#region Block Reading\r\n\t\t/// <summary>\r\n\t\t/// Reads a block of data from the stream up to <paramref name=\"length\"/>\r\n\t\t/// characters or up to EOLN if <paramref name=\"length\"/> is negative.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// ReadData first looks for data into the <see cref=\"readBuffers\"/>. \r\n\t\t/// While <paramref name=\"length\"/> is not satisfied, new data from the underlying stream are processed.\r\n\t\t/// The data is buffered as either <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>\r\n\t\t/// but consistently. The type of the first buffer thus specifies the return type.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"length\">The number of bytes to return, when set to <c>-1</c>\r\n\t\t/// reading carries on up to EOLN or EOF.</param>\r\n\t\t/// <param name=\"ending\">If <c>true</c>, the buffers are first searched for \\n.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing the \r\n\t\t/// data as returned from the last stream filter or <b>null</b> in case of an error or <c>EOF</c>.</returns>\r\n\t\tpublic object ReadData(int length, bool ending)\r\n\t\t{\r\n\t\t\tif (length == 0) return null;\r\n\r\n\t\t\t// Allow length to be -1 for ReadLine.\r\n\t\t\tDebug.Assert((length > 0) || ending);\r\n\t\t\tDebug.Assert(length >= -1);\r\n\r\n\t\t\t// Set file access to reading\r\n\t\t\tCurrentAccess = FileAccess.Read;\r\n\t\t\tif (!CanRead) return null;\r\n\r\n\t\t\t// If (length < 0) read up to \\n, otherwise up to length bytes      \r\n\t\t\t// Unbuffered works only for Read not for ReadLine (blocks).\r\n\t\t\tif (!IsReadBuffered && (readBuffers == null))\r\n\t\t\t{\r\n\t\t\t\t// The stream is a \"pure\" unbuffered. Read just the first packet.\r\n\t\t\t\tobject packet = null;\r\n\t\t\t\tbool done = false;\r\n\t\t\t\twhile (!done)\r\n\t\t\t\t{\r\n\t\t\t\t\tint count = (length > 0) ? length : readChunkSize;\r\n\t\t\t\t\tpacket = ReadFiltered(count);\r\n\t\t\t\t\tif (packet == null) return null;\r\n\r\n\t\t\t\t\tint filteredLength = GetDataLength(packet);\r\n\t\t\t\t\tdone = filteredLength > 0;\r\n\t\t\t\t\treadFilteredCount += filteredLength;\r\n\r\n\t\t\t\t\tif (length < 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// If the data contains the EOLN, store the rest into the buffers, otherwise return the whole packet.\r\n\t\t\t\t\t\tint eoln = FindEoln(packet, 0);\r\n\t\t\t\t\t\tif (eoln > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tobject rv, enq;\r\n\t\t\t\t\t\t\tSplitData(packet, eoln, out rv, out enq);\r\n\t\t\t\t\t\t\tif (enq != null) EnqueueReadBuffer(enq);\r\n\t\t\t\t\t\t\treturn rv;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn packet;\r\n\t\t\t}\r\n\r\n\t\t\t// Try to fill the buffers with enough data (to satisfy length).\r\n\t\t\tint nlpos, buffered = ReadBufferScan(out nlpos), read = 0, newLength = length;\r\n\t\t\tobject data = null;\r\n\r\n\t\t\tif (ending && (nlpos >= readPosition))\r\n\t\t\t{\r\n\t\t\t\t// Found a \\n in the buffered data (return the line inluding the EOLN).\r\n\t\t\t\t// Network-based streams may be satisfied too.\r\n\t\t\t\tnewLength = nlpos - readPosition + 1;\r\n\t\t\t}\r\n\t\t\telse if ((length > 0) && (buffered >= length))\r\n\t\t\t{\r\n\t\t\t\t// Great! Just take some of the data in the buffers.\r\n\t\t\t\t// NOP\r\n\t\t\t}\r\n\t\t\telse if (!IsReadBuffered && (buffered > 0))\r\n\t\t\t{\r\n\t\t\t\t// Use the first available packet for network-based streams.\r\n\t\t\t\tnewLength = buffered;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// There is not enough data in the buffers, read more.\r\n\t\t\t\tfor (; ; )\r\n\t\t\t\t{\r\n\t\t\t\t\tdata = ReadFiltered(readChunkSize);\r\n\t\t\t\t\tif (data == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// There is an EOF, return as much data as possible.\r\n\t\t\t\t\t\tnewLength = buffered;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tread = GetDataLength(data);\r\n\t\t\t\t\treadFilteredCount += read;\r\n\t\t\t\t\tif (read > 0) EnqueueReadBuffer(data);\r\n\t\t\t\t\tbuffered += read;\r\n\r\n\t\t\t\t\t// For unbuffered streams accept the first packet and go check for EOLN.\r\n\t\t\t\t\tif (!IsReadBuffered) newLength = buffered;\r\n\r\n\t\t\t\t\t// First check for satisfaciton of the ending.\r\n\t\t\t\t\tif (ending && (data != null))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Find the EOLN in the most recently read buffer.\r\n\t\t\t\t\t\tint eoln = FindEoln(data, 0);\r\n\t\t\t\t\t\tif (eoln >= 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Read all the data up to (and including) the EOLN.\r\n\t\t\t\t\t\t\tnewLength = buffered - read + eoln + 1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Check if there is enough data in the buffers (first packet etc).\r\n\t\t\t\t\tif (length > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (buffered >= length) break;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Apply the restriction of available data size or newline position\r\n\t\t\tif ((newLength < length) || (length == -1)) length = newLength;\r\n\r\n\t\t\t// Eof?\r\n\t\t\tif ((readBuffers == null) || (readBuffers.Count == 0))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\t// Read the rest of the buffered data if no \\n is found and there is an EOF.\r\n\t\t\tif (length < 0) length = buffered;\r\n\r\n\t\t\tif (this.IsText)\r\n\t\t\t\treturn ReadTextBuffer(length);\r\n\t\t\telse\r\n\t\t\t\treturn ReadBinaryBuffer(length);\r\n\t\t\t// Data may only be a string or PhpBytes (and consistently throughout all the buffers).\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads binary data from the stream. First looks for data into the \r\n\t\t/// <see cref=\"readBuffers\"/>. When <paramref name=\"length\"/> is not\r\n\t\t/// satisfied, new data from the underlying stream are processed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"length\">The number of bytes to return.</param>\r\n\t\t/// <returns><see cref=\"PhpBytes\"/> containing the binary data read from the stream.</returns>\r\n\t\tpublic PhpBytes ReadBytes(int length)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.IsBinary);\r\n\t\t\t// Data may only be a string or PhpBytes.\r\n\t\t\tobject data = ReadData(length, false);\r\n\t\t\tif (data == null)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn AsBinary(data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads text data from the stream. First looks for data into the \r\n\t\t/// <see cref=\"readBuffers\"/>. When <paramref name=\"length\"/> is not\r\n\t\t/// satisfied, new data from the underlying stream are processed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"length\">The number of characters to return.</param>\r\n\t\t/// <returns><see cref=\"string\"/> containing the text data read from the stream.</returns>\r\n\t\tpublic string ReadString(int length)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.IsText);\r\n\t\t\t// Data may only be a string or PhpBytes.\r\n\t\t\tobject data = ReadData(length, false);\r\n\t\t\tif (data == null)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\treturn AsText(data);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finds the '\\n' in a string or PhpBytes and returns its offset or <c>-1</c>\r\n\t\t/// if not found.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">Data to scan.</param>\r\n\t\t/// <param name=\"from\">Index of the first character to scan.</param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate static int FindEoln(object data, int from)\r\n\t\t{\r\n            Debug.Assert(data != null);\r\n\t\t\t//if (this.IsText)\r\n            if (data.GetType() == typeof(string))\r\n\t\t\t{\r\n                return ((string)data).IndexOf('\\n', from);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                Debug.Assert(data is PhpBytes);\r\n                return ArrayUtils.IndexOf(((PhpBytes)data).ReadonlyData, (byte)'\\n', from);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Split a <see cref=\"String\"/> or <see cref=\"PhpBytes\"/> to \"upto\" bytes at left and the rest or <c>null</c> at right.\r\n\t\t/// </summary>\r\n\t\tprivate static void SplitData(object data, int upto, out object left, out object right)\r\n\t\t{\r\n\t\t\tDebug.Assert(data != null);\r\n\t\t\tDebug.Assert(upto >= 0);\r\n\t\t\t//if (this.IsText)\r\n            if (data.GetType() == typeof(string))\r\n\t\t\t{\r\n                string s = (string)data;\r\n\t\t\t\tDebug.Assert(s != null);\r\n\t\t\t\tif (upto < s.Length - 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tleft = s.Substring(0, upto + 1);\r\n\t\t\t\t\tright = s.Substring(upto + 2);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tleft = s;\r\n\t\t\t\t\tright = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                Debug.Assert(data is PhpBytes);\r\n\t\t\t\tPhpBytes bin = (PhpBytes)data;\r\n\t\t\t\tif (upto < bin.Length - 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tbyte[] l = new byte[upto + 1], r = new byte[bin.Length - upto - 1];\r\n                    Array.Copy(bin.ReadonlyData, 0, l, 0, upto + 1);\r\n                    Array.Copy(bin.ReadonlyData, upto + 1, r, 0, bin.Length - upto - 1);\r\n\t\t\t\t\tleft = new PhpBytes(l);\r\n\t\t\t\t\tright = new PhpBytes(r);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tleft = bin;\r\n\t\t\t\t\tright = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Maximum Block Reading\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of bytes or characters in the first read-buffer or next chunk size.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The number of bytes or characters the next call to ReadMaximumData would return.</returns>\r\n\t\tpublic int GetNextDataLength()\r\n\t\t{\r\n\t\t\tif ((readBuffers != null) && (readBuffers.Count > 0))\r\n\t\t\t{\r\n\t\t\t\treturn GetDataLength(readBuffers.Peek());\r\n\t\t\t}\r\n\t\t\telse return readChunkSize;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Most effecient access to the buffered stream consuming one whole buffer at a time.\r\n\t\t/// Performs no unnecessary conversions (although attached stream filters may do so).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Use the <see cref=\"readChunkSize\"/> member to affect the amount of data returned at a time.\r\n\t\t/// </remarks>\r\n\t\t/// <returns>A <see cref=\"string\"/> or <see cref=\"PhpBytes\"/> containing data read from the stream.</returns>\r\n\t\tpublic object ReadMaximumData()\r\n\t\t{\r\n\t\t\t// Set file access to reading\r\n\t\t\tCurrentAccess = FileAccess.Read;\r\n\t\t\tif (!CanRead) return null;\r\n\r\n\t\t\tobject data = null;\r\n\t\t\tif ((readBuffers == null) || (readBuffers.Count == 0))\r\n\t\t\t{\r\n\t\t\t\t// Read one block without storing it in the buffers.\r\n\t\t\t\tdata = ReadFiltered(readChunkSize);\r\n\t\t\t\tint filteredLength = (data != null) ? GetDataLength(data) : 0;\r\n\t\t\t\treadFilteredCount += filteredLength;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Dequeue one whole buffer.\r\n\t\t\t\tdata = readBuffers.Peek();\r\n\t\t\t\tDropReadBuffer();\r\n\t\t\t}\r\n\r\n\t\t\tif (data == null) return null;\r\n\t\t\tDebug.Assert((data is string) || (data is PhpBytes));\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Effecient access to the buffered and filtered stream consuming one whole buffer at a time.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A <see cref=\"PhpBytes\"/> containing data read from the stream.</returns>\r\n\t\tpublic PhpBytes ReadMaximumBytes()\r\n\t\t{\r\n\t\t\treturn AsBinary(ReadMaximumData());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Effecient access to the buffered and filtered stream consuming one whole buffer at a time.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A <see cref=\"string\"/> containing data read from the stream.</returns>\r\n\t\tpublic string ReadMaximumString()\r\n\t\t{\r\n\t\t\treturn AsText(ReadMaximumData());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Entire Stream Reading\r\n\r\n\t\tpublic object ReadContents()\r\n\t\t{\r\n\t\t\treturn ReadContents(-1, -1);\r\n\t\t}\r\n\r\n\t\tpublic object ReadContents(int maxLength)\r\n\t\t{\r\n\t\t\treturn ReadContents(maxLength, -1);\r\n\t\t}\r\n\r\n\t\tpublic object ReadContents(int maxLength, int offset)\r\n\t\t{\r\n\t\t\tif (offset > -1 && !Seek(offset, SeekOrigin.Begin))\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tif (IsText)\r\n\t\t\t\treturn ReadStringContents(maxLength);\r\n\t\t\telse\r\n\t\t\t\treturn ReadBinaryContents(maxLength);\r\n\t\t}\r\n\r\n\t\tpublic string ReadStringContents(int maxLength)\r\n\t\t{\r\n\t\t\tif (!CanRead) return null;\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\r\n\t\t\tif (maxLength >= 0)\r\n\t\t\t{\r\n\t\t\t\twhile (maxLength > 0 && !Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring data = ReadString(maxLength);\r\n\t\t\t\t\tif (data == null && data.Length > 0) break; // EOF or error.\r\n\t\t\t\t\tmaxLength -= data.Length;\r\n\t\t\t\t\tresult.Append(data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\twhile (!Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring data = ReadMaximumString();\r\n\t\t\t\t\tif (data == null) break; // EOF or error.\r\n\t\t\t\t\tresult.Append(data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\tpublic PhpBytes ReadBinaryContents(int maxLength)\r\n\t\t{\r\n\t\t\tif (!CanRead) return null;\r\n\t\t\tMemoryStream result = new MemoryStream();\r\n\r\n\t\t\tif (maxLength >= 0)\r\n\t\t\t{\r\n\t\t\t\twhile (maxLength > 0 && !Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpBytes data = ReadBytes(maxLength);\r\n\t\t\t\t\tif (data == null && data.Length > 0) break; // EOF or error.\r\n\t\t\t\t\tmaxLength -= data.Length;\r\n                    result.Write(data.ReadonlyData, 0, data.Length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\twhile (!Eof)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpBytes data = ReadMaximumBytes();\r\n\t\t\t\t\tif (data == null) break; // EOF or error.\r\n                    result.Write(data.ReadonlyData, 0, data.Length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn new PhpBytes(result.ToArray());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parsed Reading (ReadLine)\r\n\t\t/// <summary>\r\n\t\t/// Reads one line (text ending with the <paramref name=\"ending\"/> delimiter)\r\n\t\t/// from the stream up to <paramref name=\"length\"/> characters long.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"length\">Maximum length of the returned <see cref=\"string\"/> or <c>-1</c> for unlimited reslut.</param>\r\n\t\t/// <param name=\"ending\">Delimiter of the returned line or <b>null</b> to use the system default.</param>\r\n\t\t/// <returns>A <see cref=\"string\"/> containing one line from the input stream.</returns>\r\n\t\tpublic string ReadLine(int length, string ending)\r\n\t\t{\r\n\t\t\t// A length has to be specified if we want to use the delimiter.\r\n\t\t\tDebug.Assert((length > 0) || (ending == null));\r\n\r\n\t\t\tobject data = ReadData(length, ending == null); // null ending => use \\n\r\n\t\t\tstring str = AsText(data);\r\n\r\n\t\t\tif (ending != null)\r\n\t\t\t{\r\n\t\t\t\tint pos = (ending.Length == 1) ? str.IndexOf(ending[0]) : str.IndexOf(ending);\r\n\t\t\t\tif (pos >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject left, right;\r\n\t\t\t\t\tSplitData(str, pos + ending.Length - 1, out left, out right);\r\n\t\t\t\t\tDebug.Assert(left is string);\r\n\t\t\t\t\tDebug.Assert(right is string);\r\n                    int returnedLength = ((string)right).Length;\r\n\t\t\t\t\tif (this.IsBinary) right = AsBinary(right);\r\n\r\n\t\t\t\t\tif (readBuffers.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// EX: Damn. Have to put the data to the front of the queue :((\r\n\t\t\t\t\t\t// Better first look into the buffers for the ending..\r\n\t\t\t\t\t\tQueue newBuffers = new Queue(readBuffers.Count + 2);\r\n\t\t\t\t\t\tnewBuffers.Enqueue(right);\r\n\t\t\t\t\t\tforeach (object o in readBuffers)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnewBuffers.Enqueue(o);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treadBuffers = newBuffers;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treadBuffers.Enqueue(right);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Update the offset as the data gets back.\r\n\t\t\t\t\treadOffset -= returnedLength;\r\n\t\t\t\t\treturn (string)left;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// ReadLine now works on binary files too but only for the \\n ending.\r\n\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Filter Chains\r\n\t\t/// <summary>\r\n\t\t/// Adds a filter to one of the read or write filter chains.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The filter.</param>\r\n\t\t/// <param name=\"where\">The position in the chain.</param>\r\n\t\tpublic void AddFilter(IFilter filter, FilterChainOptions where)\r\n\t\t{\r\n\t\t\tDebug.Assert((where & FilterChainOptions.ReadWrite) != FilterChainOptions.ReadWrite);\r\n\t\t\tArrayList list = null;\r\n\r\n\t\t\t// Which chain.\r\n\t\t\tif ((where & FilterChainOptions.Read) > 0)\r\n\t\t\t{\r\n\t\t\t\tif (readFilters == null) readFilters = new ArrayList();\r\n\t\t\t\tlist = readFilters;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (writeFilters == null) writeFilters = new ArrayList();\r\n\t\t\t\tlist = writeFilters;\r\n\t\t\t}\r\n\r\n\t\t\t// Position in the chain.\r\n\t\t\tif ((where & FilterChainOptions.Tail) > 0)\r\n\t\t\t{\r\n\t\t\t\tlist.Add(filter);\r\n\t\t\t\tif ((list == readFilters) && (ReadBufferLength > 0))\r\n\t\t\t\t{\r\n\t\t\t\t\t// Process all the data in the read buffers.\r\n\t\t\t\t\tQueue q = new Queue();\r\n\t\t\t\t\tforeach (object o in readBuffers)\r\n\t\t\t\t\t\tq.Enqueue(filter.Filter(o, false));\r\n\t\t\t\t\treadBuffers = q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tlist.Insert(0, filter);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get enumerator of chained read/write filters.\r\n        /// </summary>\r\n        public System.Collections.Generic.IEnumerable<PhpFilter> StreamFilters\r\n        {\r\n            get\r\n            {\r\n                if (readFilters != null)\r\n                    foreach (PhpFilter f in readFilters)\r\n                        yield return f;\r\n\r\n                if (writeFilters != null)\r\n                    foreach (PhpFilter f in writeFilters)\r\n                        yield return f;\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region High-level Writing\r\n\t\t#region Buffered Writing\r\n\t\t/// <summary>\r\n\t\t/// Write all the output buffer to the underlying stream and flush it.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on error.</returns>\r\n\t\tpublic bool Flush()\r\n\t\t{\r\n\t\t\treturn FlushWriteBuffer() && RawFlush();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes all the output buffer to the underlying stream.\r\n\t\t/// </summary>\r\n\t\t/// <returns><c>true</c> on success, <c>false</c> on error.</returns>\r\n\t\tprotected bool FlushWriteBuffer()\r\n\t\t{\r\n\t\t\t// Stream may not have been used for output yet.\r\n\t\t\tif ((writeBufferSize == 0) || (writeBuffer == null)) return true;\r\n\r\n\t\t\tint flushPosition = 0;\r\n\t\t\twhile (flushPosition < writePosition)\r\n\t\t\t{\r\n\t\t\t\t// Send as much data as possible to the underlying stream.\r\n\t\t\t\tint written = RawWrite(writeBuffer, flushPosition, writePosition - flushPosition);\r\n\r\n\t\t\t\tif (written <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// An error occured. Clear flushed data and return.\r\n\t\t\t\t\tif (flushPosition > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbyte[] buf = new byte[writeBufferSize];\r\n\t\t\t\t\t\tArray.Copy(writeBuffer, flushPosition, buf, 0, writePosition - flushPosition);\r\n\t\t\t\t\t\twriteBuffer = buf;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning,\r\n\t\t\t\t\t\tCoreResources.GetString(\"stream_write_failed\", flushPosition, writePosition));\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// Move for the next chunk.\r\n\t\t\t\t\tflushPosition += written;\r\n\t\t\t\t\twriteOffset += written;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// All the data has been successfully flushed.\r\n\t\t\twritePosition = 0;\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region Block Writing\r\n\t\t/// <summary>\r\n\t\t/// Passes the data through output filter-chain to the output buffer. \r\n\t\t/// When the buffer is full or buffering is disabled, passes the data to the low-level stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The data to store (filters will handle the type themselves).</param>\r\n\t\t/// <returns>Number of character entities successfully written or <c>-1</c> on an error.</returns>\r\n\t\tpublic int WriteData(object data)\r\n\t\t{\r\n\t\t\treturn WriteData(data, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Apppends the binary data to the output buffer passing through the output filter-chain. \r\n\t\t/// When the buffer is full or buffering is disabled, pass the data to the low-level stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The <see cref=\"PhpBytes\"/> to store.</param>\r\n\t\t/// <returns>Number of bytes successfully written or <c>-1</c> on an error.</returns>\r\n\t\tpublic int WriteBytes(PhpBytes data)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.IsBinary);\r\n\t\t\treturn WriteData(data, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Apppends the text data to the output buffer passing through the output filter-chain. \r\n\t\t/// When the buffer is full or buffering is disabled, pass the data to the low-level stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The <see cref=\"string\"/> to store.</param>\r\n\t\t/// <returns>Number of characters successfully written or <c>-1</c> on an error.</returns>\r\n\t\tpublic int WriteString(string data)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.IsText);\r\n\t\t\treturn WriteData(data, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Passes the data through output filter-chain to the output buffer. \r\n\t\t/// When the buffer is full or buffering is disabled, passes the data to the low-level stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The data to store (filters will handle the type themselves).</param>\r\n\t\t/// <param name=\"closing\"><c>true</c> when this method is called from <c>close()</c>\r\n\t\t/// to prune all the pending filters with closing set to <c>true</c>.</param>\r\n\t\t/// <returns>Number of character entities successfully written or <c>-1</c> on an error.</returns>\r\n\t\tprotected int WriteData(object data, bool closing)\r\n\t\t{\r\n\t\t\t// Set file access to writing\r\n\t\t\tCurrentAccess = FileAccess.Write;\r\n\t\t\tif (!CanWrite) return -1;\r\n\r\n\t\t\tDebug.Assert((data is string) || (data is PhpBytes));\r\n\r\n\t\t\tint consumed = GetDataLength(data);\r\n\t\t\twriteFilteredCount += consumed;\r\n\t\t\tif (writeFilters != null)\r\n\t\t\t{\r\n\t\t\t\t// Process the data through the custom write filters first.\r\n\t\t\t\tforeach (IFilter f in writeFilters)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (data == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// When closing, feed all the filters with data.\r\n\t\t\t\t\t\tif (closing) data = PhpBytes.Empty;\r\n\t\t\t\t\t\telse return consumed; // Eaten all\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdata = f.Filter(data, closing);\r\n\t\t\t\t\tif (closing) f.OnClose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (textWriteFilter != null)\r\n\t\t\t{\r\n\t\t\t\t// Then pass it through the text-conversion filter if any.\r\n\t\t\t\tdata = textWriteFilter.Filter(data, closing);\r\n\t\t\t}\r\n\r\n\t\t\t// From now on, the data is treated just as binary\r\n            byte[] bin = AsBinary(data).ReadonlyData;\r\n\t\t\tif (bin.Length == 0)\r\n\t\t\t\treturn consumed;\r\n\r\n\t\t\t// Append the resulting data to the output buffer if any.\r\n\t\t\tif (IsWriteBuffered)\r\n\t\t\t{\r\n\t\t\t\t// Is this the first access?\r\n\t\t\t\tif (writeBuffer == null)\r\n\t\t\t\t{\r\n\t\t\t\t\twriteBuffer = new byte[writeBufferSize];\r\n\t\t\t\t\twritePosition = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// The whole binary data fits in the buffer, great!\r\n\t\t\t\tif (writeBufferSize - writePosition > bin.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tArray.Copy(bin, 0, writeBuffer, writePosition, bin.Length);\r\n\t\t\t\t\twritePosition += bin.Length;\r\n\t\t\t\t\treturn consumed;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tint copied = 0;\r\n\r\n\t\t\t\t// Use the buffer for small data only\r\n\t\t\t\tif (writeBufferSize > bin.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Otherwise fill the buffer and flush it.\r\n\t\t\t\t\tcopied = writeBufferSize - writePosition;\r\n\t\t\t\t\tArray.Copy(bin, 0, writeBuffer, writePosition, copied);\r\n\t\t\t\t\twritePosition += copied;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Flush the buffer\r\n\t\t\t\tif ((writePosition > 0) && (!FlushWriteBuffer()))\r\n\t\t\t\t\treturn (copied > 0) ? copied : -1; // It is an error but still some output was written.\r\n\r\n\t\t\t\tif (bin.Length - copied >= writeBufferSize)\r\n\t\t\t\t{\r\n\t\t\t\t\t// If the binary data is really big, write it directly to stream.\r\n\t\t\t\t\twhile (copied < bin.Length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint written = RawWrite(bin, copied, bin.Length - copied);\r\n\t\t\t\t\t\tif (written <= 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning,\r\n\t\t\t\t\t\t\t\tCoreResources.GetString(\"stream_write_failed\", copied, bin.Length));\r\n\t\t\t\t\t\t\treturn (copied > 0) ? copied : -1; // It is an error but still some output was written.\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcopied += written;\r\n\t\t\t\t\t\twriteOffset += written;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// Otherwise just start a new buffer with the rest of the data.\r\n\t\t\t\t\tArray.Copy(bin, copied, writeBuffer, 0, bin.Length - copied);\r\n\t\t\t\t\twritePosition = bin.Length - copied;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn consumed;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// No write buffer. Write the data directly.\r\n\t\t\t\tint copied = 0;\r\n\t\t\t\twhile (copied < bin.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tint written = RawWrite(bin, copied, bin.Length - copied);\r\n\t\t\t\t\tif (written <= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning,\r\n\t\t\t\t\t\t\tCoreResources.GetString(\"stream_write_failed\", copied, bin.Length));\r\n\t\t\t\t\t\treturn (copied > 0) ? copied : -1; // ERROR but maybe some was written.\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcopied += written;\r\n\t\t\t\t\twriteOffset += written;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn consumed;\r\n\t\t\t}\r\n\t\t}\r\n\t\t#endregion\r\n\t\t#endregion\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the read/write pointer in the stream to a new position.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"offset\">The offset from the position denoted by <paramref name=\"whence\"/>.</param>\r\n\t\t/// <param name=\"whence\">One of the <see cref=\"SeekOrigin\"/> flags.</param>\r\n\t\t/// <returns><c>true</c> if the operation was successful.</returns>\r\n\t\tpublic bool Seek(int offset, SeekOrigin whence)\r\n\t\t{\r\n\t\t\tif (!CanSeek)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// This is supported by any stream.\r\n\t\t\tint current = Tell();\r\n\t\t\tint newpos = -1;\r\n\t\t\tif (whence == SeekOrigin.Begin) newpos = offset;\r\n\t\t\telse if (whence == SeekOrigin.Current) newpos = current + offset;\r\n\t\t\telse if (whence == SeekOrigin.End)\r\n\t\t\t{\r\n\t\t\t\tint len = RawLength();\r\n\t\t\t\tif (len >= 0) newpos = len + offset;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (CurrentAccess)\r\n\t\t\t{\r\n\t\t\t\tcase FileAccess.ReadWrite:\r\n\t\t\t\t\t// Stream not R/W accessed yet. Prepare location and offset.\r\n\t\t\t\t\treturn SeekInternal(offset, current, whence);\r\n\r\n\t\t\t\tcase FileAccess.Read:\r\n\t\t\t\t\t// Maybe we will be able to seek inside the buffers.\r\n\t\t\t\t\tif ((newpos >= readOffset) && (newpos < readOffset + ReadBufferLength))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tint streamPosition = readOffset + ReadPosition;\r\n\t\t\t\t\t\tif (newpos > streamPosition)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Seek forward\r\n\t\t\t\t\t\t\t// This asserts that ReadBufferLength > 0.\r\n\t\t\t\t\t\t\tint len = GetDataLength(readBuffers.Peek());\r\n\t\t\t\t\t\t\twhile (newpos - readOffset >= len)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tDropReadBuffer();\r\n\t\t\t\t\t\t\t\tlen = GetDataLength(readBuffers.Peek());\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tDebug.Assert(readBuffers.Count > 0);\r\n\r\n\t\t\t\t\t\t\t// All superfluous buffers are dropped, seek in the head one.\r\n\t\t\t\t\t\t\treadPosition = newpos - readOffset;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (newpos < streamPosition)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// The required position is still in the first buffer\r\n\t\t\t\t\t\t\t//. Debug.Assert(streamPosition == readOffset + readPosition);\r\n\t\t\t\t\t\t\treadPosition = newpos - readOffset;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Drop all the read buffers and proceed to the actual seeking.\r\n\t\t\t\t\t\treadBuffers = null;\r\n\r\n\t\t\t\t\t\t// Notice that for a filtered stream, seeking is not a good idea\r\n\t\t\t\t\t\tif (IsReadFiltered)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Notice,\r\n\t\t\t\t\t\t\t\tCoreResources.GetString(\"stream_seek_filtered\", (textReadFilter != null) ? \"text\" : \"filtered\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn SeekInternal(offset, current, whence);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase FileAccess.Write:\r\n                    // The following does not currently work since other methods do not take unempty writebuffer into account\r\n\r\n                    //// Maybe we can seek inside of the buffer but we allow only backward skips.\r\n                    //if ((newpos >= writeOffset) && (newpos < writeOffset + writePosition))\r\n                    //{\r\n                    //    // We are inside the current buffer, great.\r\n                    //    writePosition = newpos - writeOffset;\r\n                    //}\r\n                    //else\r\n                    //{\r\n\r\n\t\t\t\t\t// Flush write buffers and proceed to the default handling.\r\n\t\t\t\t\tFlushWriteBuffer();\r\n\r\n\t\t\t\t\t// Notice that for a filtered stream, seeking is not a good idea\r\n\t\t\t\t\tif (IsWriteFiltered)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Notice,\r\n\t\t\t\t\t\t\tCoreResources.GetString(\"stream_seek_filtered\", (textWriteFilter != null) ? \"text\" : \"filtered\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn SeekInternal(offset, current, whence);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t\t// CHECKME: [PhpStream.Seek]\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Perform the actual seek on the stream. Report errors.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"offset\">New position in the stream.</param>\r\n\t\t/// <param name=\"current\">Current position in the stream.</param>\r\n\t\t/// <param name=\"whence\">Where to count from.</param>\r\n\t\t/// <returns><c>true</c> if successful</returns>\r\n\t\t/// <exception cref=\"PhpException\">In case that Seek is not supported by this stream type.</exception>\r\n\t\tinternal bool SeekInternal(int offset, int current, SeekOrigin whence)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (!CanSeek)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!RawSeek(offset, whence)) return false;\r\n\t\t\t\tint expectedOffset = 0, absoluteOffset = RawTell();\r\n\r\n\t\t\t\tswitch (whence)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase SeekOrigin.Begin:\r\n\t\t\t\t\t\texpectedOffset = offset;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase SeekOrigin.Current:\r\n\t\t\t\t\t\texpectedOffset = current + offset;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase SeekOrigin.End:\r\n\t\t\t\t\t\texpectedOffset = RawLength() + offset;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_argument_value\", \"whence\", whence));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treadOffset = writeOffset = absoluteOffset;\r\n\r\n\t\t\t\t// No data should be buffered when seeking the underlying stream!\r\n\t\t\t\tDebug.Assert(readBuffers == null);\r\n\t\t\t\tDebug.Assert(writeBuffer == null || writePosition == 0);\r\n\t\t\t\treadPosition = writePosition = 0;\r\n\r\n\t\t\t\t// EX: This is inaccurate, but there is no better information avalable (w/o processing the whole stream)\r\n\t\t\t\treadFilteredCount = readOffset;\r\n\t\t\t\twriteFilteredCount = readOffset;\r\n\r\n\t\t\t\treturn absoluteOffset == expectedOffset;\r\n\t\t\t\t// Seek is successful if the two values match.\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the current position in the stream.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <newpara>\r\n\t\t/// The problem with tell() in PHP is that although the write offset \r\n\t\t/// is calculated in the raw byte stream (just before buffering)\r\n\t\t/// the read one is calculated in the filtered string buffers.\r\n\t\t/// </newpara>\r\n\t\t/// <newpara>\r\n\t\t/// In other words the value returned by tell() for output streams\r\n\t\t/// is the real position in the raw stream but may differ from the\r\n\t\t/// number of characters written. On the other hand the value returned for\r\n\t\t/// input streams corresponds with the number of characters retreived \r\n\t\t/// but not with the position in the raw stream. It is important\r\n\t\t/// to remember that seeking on a filtered stream (such as a file\r\n\t\t/// opened with a \"rt\" mode) has undefined behavior.\r\n\t\t/// </newpara>\r\n\t\t/// </remarks>\r\n\t\t/// <returns>The position in the filtered or raw stream depending on last \r\n\t\t/// read or write access type respectively or -1 if the stream does not support seeking.</returns>\r\n\t\tpublic int Tell()\r\n\t\t{\r\n\t\t\tif (!CanSeek)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tswitch (currentAccess)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// Stream not yet R/W accessed (but maybe with Seek).\r\n\t\t\t\t\treturn readOffset;\r\n\t\t\t\tcase FileAccess.Read:\r\n\t\t\t\t\treturn ReadPosition;\r\n\t\t\t\tcase FileAccess.Write:\r\n\t\t\t\t\treturn WritePosition;\r\n\t\t\t}\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region Conversions\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawStream\"]/*'/>\r\n\t\t/// <exception cref=\"InvalidCastException\">When casting is not supported.</exception>\r\n\t\tpublic virtual Stream RawStream\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tthrow new InvalidCastException(CoreResources.GetString(\"casting_to_stream_unsupported\"));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Check that the resource handle contains a valid\r\n\t\t/// PhpStream resource and cast the handle to PhpStream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\">A PhpResource passed to the PHP function.</param>\r\n\t\t/// <returns>The handle cast to PhpStream.</returns>\r\n\t\tpublic static PhpStream GetValid(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpStream result = handle as PhpStream;\r\n\t\t\tif (result != null && result.IsValid) return result;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_stream_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic static PhpStream GetValid(PhpResource handle, FileAccess desiredAccess)\r\n\t\t{\r\n\t\t\tPhpStream result = GetValid(handle);\r\n\r\n\t\t\tif (result != null)\r\n\t\t\t{\r\n\t\t\t\tif ((desiredAccess & FileAccess.Write) != 0 && !result.CanWrite)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_write_off\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((desiredAccess & FileAccess.Read) != 0 && !result.CanRead)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_read_off\"));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Stream properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// The stream context options resource.\r\n\t\t/// </summary>\r\n\t\tpublic StreamContext Context\r\n\t\t{\r\n\t\t\tget { return context; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The stream context options resource.\r\n\t\t/// </summary>\r\n\t\tprotected StreamContext context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the Auto-remove option of this stream.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsTemporary\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (Options & StreamAccessOptions.Temporary) > 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the read fragmentation behavior.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Network and console input streams return immediately after a nonempty data is read from the underlying stream.\r\n\t\t/// Buffered streams try to fill the whole given buffer while the underlying stream is providing data\r\n\t\t/// to satisfy the caller-specified length or <see cref=\"readChunkSize\"/>.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Still the input buffer may contain valid data even for unbuffered streams.\r\n\t\t/// This may happen for example when a <c>fgets</c> has to return unconsumed data\r\n\t\t/// (following the first <c>EOL</c>) back to the stream.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tpublic bool IsReadBuffered\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn isReadBuffered;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tisReadBuffered = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the write fragmentation behavior.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// When the write is not buffered then all the fwrite calls\r\n\t\t/// pass the data immediately to the underlying stream.\r\n\t\t/// </remarks>\r\n\t\tpublic bool IsWriteBuffered\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn writeBufferSize > 0;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (value) writeBufferSize = DefaultBufferSize;\r\n\t\t\t\telse writeBufferSize = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the filtering status of this stream. \r\n\t\t/// <c>true</c> when there is at least one input filter on the stream.\r\n\t\t/// </summary>\r\n\t\tprotected bool IsReadFiltered\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (((readFilters != null) && (readFilters.Count > 0))\r\n\t\t\t\t\t|| (textReadFilter != null));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the filtering status of this stream. \r\n\t\t/// <c>true</c> when there is at least one output filter on the stream.\r\n\t\t/// </summary>\r\n\t\tprotected bool IsWriteFiltered\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (((writeFilters != null) && (writeFilters.Count > 0))\r\n\t\t\t\t\t|| (textWriteFilter != null));\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>Gets or sets the current Read/Write access mode.</summary>\r\n\t\tprotected FileAccess CurrentAccess\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn currentAccess;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tswitch (value)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase FileAccess.Read:\r\n\t\t\t\t\t\tif (!CanRead)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_read_off\"));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ((currentAccess == FileAccess.Write) && CanSeek)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Flush the write buffers, switch to reading at the write position\r\n\t\t\t\t\t\t\tint offset = Tell();\r\n\t\t\t\t\t\t\tFlushWriteBuffer();\r\n\t\t\t\t\t\t\twriteOffset = writePosition = 0;\r\n\t\t\t\t\t\t\tcurrentAccess = value;\r\n\t\t\t\t\t\t\tSeek(offset, SeekOrigin.Begin);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentAccess = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase FileAccess.Write:\r\n\t\t\t\t\t\tif (!CanWrite)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_write_off\"));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ((currentAccess == FileAccess.Read) && CanSeek)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Drop the read buffers, switch to writing at the read position\r\n\t\t\t\t\t\t\tint offset = Tell();\r\n\t\t\t\t\t\t\t//DropReadBuffer();\r\n\t\t\t\t\t\t\treadBuffers = null;\r\n\t\t\t\t\t\t\treadOffset = readPosition = 0;\r\n\t\t\t\t\t\t\tcurrentAccess = value;\r\n\t\t\t\t\t\t\tSeek(offset, SeekOrigin.Begin);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcurrentAccess = value;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tthrow new ArgumentException();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// CHECKME: [CurrentAccess]\r\n\t\t}\r\n\r\n\t\t/// <summary>Gets the writing pointer position in the buffered stream.</summary>\r\n\t\tpublic int WritePosition\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (CurrentAccess != FileAccess.Write) return -1;\r\n\r\n\t\t\t\t// Data passed via filters to output buffers (not filtered yet!)\r\n                return writeFilteredCount;\r\n                //try\r\n                //{\r\n                //  return RawTell() + this.writePosition;\r\n                //}\r\n                //catch (Exception)\r\n                //{\r\n                //  return this.writeOffset + this.writePosition;\r\n                //}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Gets the reading pointer position in the buffered stream.</summary>\r\n\t\tpublic int ReadPosition\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (CurrentAccess != FileAccess.Read) return -1;\r\n\r\n\t\t\t\t// Data physically read - data still in buffers\r\n                return readFilteredCount - ReadBufferLength;\r\n                //try\r\n                //{\r\n                //  return RawTell() - ReadBufferLength;\r\n                //  // The position in the stream minus the data remaining in the buffers\r\n                //}\r\n                //catch (Exception)\r\n                //{\r\n                //  return this.readOffset + this.readPosition;\r\n                //}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>The lists of StreamFilters associated with this stream.</summary>\r\n\t\tprotected ArrayList readFilters = null, writeFilters = null;\r\n\r\n\t\t/// <summary>The text-mode conversion filter of this stream used for reading.</summary>\r\n\t\tprotected IFilter textReadFilter = null;\r\n\r\n\t\t/// <summary>The text-mode conversion filter of this stream used for writing.</summary>\r\n\t\tprotected IFilter textWriteFilter = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The StreamWrapper responsible for opening this stream.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Used for example to access the correct section of context\r\n\t\t/// and for wrapper-notifications too.\r\n\t\t/// </remarks>\r\n\t\tpublic readonly StreamWrapper Wrapper;\r\n\r\n        /// <summary>\r\n        /// PHP wrapper specific data. See GetMetaData, wrapper_data array item.\r\n        /// Can be null.\r\n        /// </summary>\r\n        public object WrapperSpecificData\r\n        {\r\n            get;\r\n            internal set;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The absolute path to the resource.\r\n\t\t/// </summary>\r\n\t\tpublic readonly string OpenedPath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>true</c> if the stream was opened for writing.\r\n\t\t/// </summary>\r\n\t\tpublic bool CanWrite\r\n\t\t{\r\n\t\t\tget { return (Options & StreamAccessOptions.Write) > 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>true</c> if the stream was opened for reading.\r\n\t\t/// </summary>\r\n\t\tpublic bool CanRead\r\n\t\t{\r\n\t\t\tget { return (Options & StreamAccessOptions.Read) > 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>true</c> if the stream was opened in the text access-mode.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsText\r\n\t\t{\r\n\t\t\tget { return (Options & StreamAccessOptions.UseText) > 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>true</c> if the stream was opened in the binary access-mode.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsBinary\r\n\t\t{\r\n\t\t\tget { return (Options & StreamAccessOptions.UseText) == 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <c>true</c> if the stream persists accross multiple scripts.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsPersistent\r\n\t\t{\r\n\t\t\tget { return (Options & StreamAccessOptions.Persistent) != 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Additional stream options defined at open-time.\r\n\t\t/// </summary>\r\n\t\tpublic readonly StreamAccessOptions Options;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the type of last stream access (initialized to FileAccess.ReadWrite if not accessed yet).\r\n\t\t/// </summary>\r\n\t\tprotected FileAccess currentAccess = FileAccess.ReadWrite;\r\n\r\n\t\t/// <summary>\r\n\t\t/// For <c>fgetss()</c> to handle multiline tags.\r\n\t\t/// </summary>\r\n\t\tpublic int StripTagsState\r\n\t\t{\r\n\t\t\tget { return fgetssState; }\r\n\t\t\tset { fgetssState = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>For <c>fgetss()</c> to handle multiline tags.</summary>\r\n\t\tprotected int fgetssState = 0;\r\n\r\n\t\t/// <summary>For future use. Persistent streams are not implemented so far.</summary>\r\n\t\tprotected bool isPersistent = false;\r\n\r\n\t\t/// <summary>The default size of read/write buffers.</summary>\r\n\t\tpublic const int DefaultBufferSize = 8 * 1024;\r\n\r\n\t\t/// <summary>The default size of a single read chunk in the readBuffers.</summary>\r\n\t\tprotected int readChunkSize = DefaultBufferSize;\r\n\r\n\t\t/// <summary>Whether the read operations are interated for a single <c>fread</c> call.</summary>\r\n\t\tprotected bool isReadBuffered = true;\r\n\r\n\t\t/// <summary>The maximum count of buffered output bytes. <c>0</c> to disable buffering.</summary>\r\n\t\tprotected int writeBufferSize = DefaultBufferSize;\r\n\r\n\t\t/// <summary>Store the filtered input data queued as either <see cref=\"String\"/>s or <see cref=\"PhpBytes\"/>.</summary>\r\n\t\tprotected Queue readBuffers = null;\r\n\r\n\t\t/// <summary>Store the filtered output data in a <c>byte[]</c> up to <see cref=\"writeBufferSize\"/> bytes.</summary>\r\n\t\tprotected byte[] writeBuffer = null;\r\n\r\n\t\t/// <summary>The offset from the beginning of the raw stream to the\r\n\t\t/// first byte stored in the <see cref=\"readBuffers\"/>.</summary>\r\n\t\t/// <remarks>This offset is incremented when a consumed buffer is dropped.</remarks>\r\n\t\tprotected int readOffset = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The offset from the beginning of the raw stream to the\r\n\t\t/// first byte of the <see cref=\"writeBuffer\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This offset is incremented when the buffer is being flushed\r\n\t\t/// or the data is written to a non-buffered stream.\r\n\t\t/// </remarks>\r\n\t\tprotected int writeOffset = 0;\r\n\r\n\t\t/// <summary>The position in the first buffer in the <see cref=\"readBuffers\"/>.</summary>\r\n\t\tprotected int readPosition = 0;\r\n\r\n\t\t/// <summary>Total bytes passed through the ReadData function (after input filtering)</summary>\r\n\t\tprotected int readFilteredCount = 0;\r\n\r\n\t\t/// <summary>Total bytes passed through the WriteData function (before output filtering)</summary>\r\n\t\tprotected int writeFilteredCount = 0;\r\n\r\n\t\t/// <summary>The actual write position in the <see cref=\"writeBuffer\"/>.</summary>\r\n\t\tprotected int writePosition = 0;\r\n\r\n\t\t/// <summary>Timeout for network-based streams in seconds.</summary>\r\n\t\tprotected double readTimeout = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The type name displayed when printing a variable of type PhpStream.\r\n\t\t/// </summary>\r\n\t\tpublic const string PhpStreamTypeName = \"stream\";\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region NativeStream class\r\n\r\n\t/// <summary>\r\n\t/// An implementation of <see cref=\"PhpStream\"/> as a simple\r\n\t/// encapsulation of a .NET <see cref=\"System.IO.Stream\"/> class\r\n\t/// which is directly accessible via the RawStream property.\r\n\t/// </summary>\r\n\tpublic class NativeStream : PhpStream\r\n\t{\r\n\t\t#region PhpStream overrides\r\n\r\n\t\tpublic NativeStream(Stream nativeStream, StreamWrapper openingWrapper, StreamAccessOptions accessOptions, string openedPath, StreamContext context)\r\n\t\t\t: base(openingWrapper, accessOptions, openedPath, context)\r\n\t\t{\r\n\t\t\tDebug.Assert(nativeStream != null);\r\n\t\t\tthis.stream = nativeStream;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PhpResource.FreeManaged overridden to get rid of the contained context on Dispose.\r\n\t\t/// </summary>\r\n\t\tprotected override void FreeManaged()\r\n\t\t{\r\n\t\t\tbase.FreeManaged();\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstream.Close();\r\n\t\t\t}\r\n\t\t\tcatch (NotSupportedException)\r\n\t\t\t{\r\n\t\t\t}\r\n\t\t\tif ( Wrapper != null )\t//Can be php://output\r\n\t\t\t\tWrapper.Dispose();\r\n\t\t\tstream = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Raw byte access (mandatory)\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawRead\"]/*'/>\r\n\t\tprotected override int RawRead(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tint read = stream.Read(buffer, offset, count);\r\n\t\t\t\tif (read == 0) reportEof = true;\r\n\t\t\t\treturn read;\r\n\t\t\t}\r\n\t\t\tcatch (NotSupportedException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Read\"));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_read_io_error\", e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\t// For example WebException (timeout)\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_read_error\", e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawWrite\"]/*'/>\r\n\t\tprotected override int RawWrite(byte[] buffer, int offset, int count)\r\n\t\t{\r\n\t\t\tlong position = stream.CanSeek ? stream.Position : -1;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstream.Write(buffer, offset, count);\r\n\t\t\t\treturn stream.CanSeek ? unchecked((int)(stream.Position - position)) : count;\r\n\t\t\t}\r\n\t\t\tcatch (NotSupportedException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Write\"));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_write_io_error\", e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_write_error\", e.Message));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawFlush\"]/*'/>\r\n\t\tprotected override bool RawFlush()\r\n\t\t{\r\n\t\t\tif (stream.CanWrite) stream.Flush();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawEof\"]/*'/>\r\n\t\tprotected override bool RawEof\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stream.CanSeek) return stream.Position == stream.Length;\r\n\t\t\t\telse return reportEof;\r\n\t\t\t\t// Otherwise there is no apriori information - will be revealed at next read...\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>EOF stored at the time of the last read.</summary>\r\n\t\tprivate bool reportEof = false;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Raw Seeking (optional)\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"CanSeek\"]/*'/>\r\n\t\tpublic override bool CanSeek { get { return stream.CanSeek; } }\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawTell\"]/*'/>\r\n\t\tprotected override int RawTell()\r\n\t\t{\r\n\t\t\treturn unchecked((int)stream.Position);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawSeek\"]/*'/>\r\n\t\tprotected override bool RawSeek(int offset, SeekOrigin whence)\r\n\t\t{\r\n\t\t\t// Store the current position to be able to check for seek()'s success.\r\n\t\t\tlong position = stream.Position;\r\n\t\t\treturn stream.Seek(offset, (SeekOrigin)whence)\r\n\t\t\t\t== SeekExpects(position, stream.Length, offset, whence);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the Length property of the underlying stream.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tprotected override int RawLength()\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\treturn unchecked((int)stream.Length);\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the expected position in the stream to check for Seek() failure.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"position\">Actual position in the stream.</param>\r\n\t\t/// <param name=\"length\">The length of the stream.</param>\r\n\t\t/// <param name=\"offset\">The offset for the seek() operation.</param>\r\n\t\t/// <param name=\"whence\">Where to count the new position from.</param>\r\n\t\t/// <returns>The expected new position.</returns>\r\n\t\tprotected long SeekExpects(long position, long length, long offset, SeekOrigin whence)\r\n\t\t{\r\n\t\t\tswitch (whence)\r\n\t\t\t{\r\n\t\t\t\tcase SeekOrigin.Begin:\r\n\t\t\t\t\treturn offset;\r\n\t\t\t\tcase SeekOrigin.Current:\r\n\t\t\t\t\treturn position + offset;\r\n\t\t\t\tcase SeekOrigin.End:\r\n\t\t\t\t\treturn length + offset;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversion to .NET native Stream\r\n\t\t//    /// <include file='Doc/Streams.xml' path='docs/property[@name=\"CanCast\"]/*'/>\r\n\t\t//    public override bool CanCast { get { return true; } }\r\n\r\n\t\t/// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawStream\"]/*'/>\r\n\t\tpublic override Stream RawStream\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn stream;\r\n\t\t\t}\r\n\t\t}\r\n\t\t#endregion\r\n\r\n\t\t#region NativeStream properties\r\n\r\n\t\t/// <summary>The encapsulated native stream.</summary>\r\n\t\tprotected Stream stream;\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PhpUserStream class\r\n\r\n    /// <summary>\r\n    /// An implementation of <see cref=\"PhpStream\"/> as a simple\r\n    /// encapsulation of a .NET <see cref=\"System.IO.Stream\"/> class\r\n    /// which is directly accessible via the RawStream property.\r\n    /// </summary>\r\n    public class PhpUserStream : PhpStream\r\n    {\r\n        #region names of user wrapper methods\r\n\r\n        public const string USERSTREAM_OPEN = \"stream_open\";\r\n        public const string USERSTREAM_CLOSE = \"stream_close\";\r\n        public const string USERSTREAM_READ = \"stream_read\";\r\n        public const string USERSTREAM_WRITE = \"stream_write\";\r\n        public const string USERSTREAM_FLUSH = \"stream_flush\";\r\n        public const string USERSTREAM_SEEK = \"stream_seek\";\r\n        public const string USERSTREAM_TELL = \"stream_tell\";\r\n        public const string USERSTREAM_EOF = \"stream_eof\";\r\n        public const string USERSTREAM_STAT = \"stream_stat\";\r\n        public const string USERSTREAM_STATURL = \"url_stat\";\r\n        public const string USERSTREAM_UNLINK = \"unlink\";\r\n        public const string USERSTREAM_RENAME = \"rename\";\r\n        public const string USERSTREAM_MKDIR = \"mkdir\";\r\n        public const string USERSTREAM_RMDIR = \"rmdir\";\r\n        public const string USERSTREAM_DIR_OPEN = \"dir_opendir\";\r\n        public const string USERSTREAM_DIR_READ = \"dir_readdir\";\r\n        public const string USERSTREAM_DIR_REWIND = \"dir_rewinddir\";\r\n        public const string USERSTREAM_DIR_CLOSE = \"dir_closedir\";\r\n        public const string USERSTREAM_LOCK = \"stream_lock\";\r\n        public const string USERSTREAM_CAST = \"stream_cast\";\r\n        public const string USERSTREAM_SET_OPTION = \"stream_set_option\";\r\n        public const string USERSTREAM_TRUNCATE = \"stream_truncate\";\r\n        public const string USERSTREAM_METADATA = \"stream_metadata\";\r\n\r\n        #endregion\r\n\r\n        #region PhpStream overrides\r\n\r\n        public PhpUserStream(UserStreamWrapper/*!*/openingWrapper, StreamAccessOptions accessOptions, string openedPath, StreamContext context)\r\n            : base(openingWrapper, accessOptions, openedPath, context)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// PhpResource.FreeManaged overridden to get rid of the contained context on Dispose.\r\n        /// </summary>\r\n        protected override void FreeManaged()\r\n        {\r\n            // stream_close\r\n            if (UserWrapper != null)\r\n                UserWrapper.OnClose(this);\r\n\r\n            // free\r\n            base.FreeManaged();\r\n            if (Wrapper != null)\t//Can be php://output\r\n                Wrapper.Dispose();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Raw byte access (mandatory)\r\n        \r\n        /// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawRead\"]/*'/>\r\n        protected override int RawRead(byte[] buffer, int offset, int count)\r\n        {\r\n            // stream_read:\r\n            object result = UserWrapper.InvokeWrapperMethod(USERSTREAM_READ, count);\r\n\r\n            if (result != null)\r\n            {\r\n                PhpBytes bytes = Convert.ObjectToPhpBytes(result);\r\n                int readbytes = bytes.Length;\r\n                if (readbytes > count)\r\n                {\r\n                    //php_error_docref(NULL TSRMLS_CC, E_WARNING, \"%s::\" USERSTREAM_READ \" - read %ld bytes more data than requested (%ld read, %ld max) - excess data will be lost\",\r\n                    //    us->wrapper->classname, (long)(didread - count), (long)didread, (long)count);\r\n                    readbytes = count;\r\n                }\r\n\r\n                if (readbytes > 0)\r\n                    Array.Copy(bytes.ReadonlyData, 0, buffer, offset, readbytes);\r\n                \r\n                return readbytes;\r\n            }\r\n\r\n            //\r\n            return 0;\r\n        }\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawWrite\"]/*'/>\r\n        protected override int RawWrite(byte[] buffer, int offset, int count)\r\n        {\r\n            PhpBytes bytes;\r\n            if (count == 0)\r\n            {\r\n                bytes = PhpBytes.Empty;\r\n            }\r\n            if (offset == 0 && count == buffer.Length)\r\n            {\r\n                bytes = new PhpBytes(buffer);\r\n            }\r\n            else\r\n            {\r\n                byte[] data = new byte[count];\r\n                Array.Copy(buffer, offset, data, 0, count);\r\n                bytes = new PhpBytes(data);\r\n            }\r\n\r\n            object result = UserWrapper.InvokeWrapperMethod(USERSTREAM_WRITE, bytes);\r\n\r\n            int byteswrote = Convert.ObjectToInteger(result);\r\n            if (byteswrote > count)\r\n            {\r\n                //php_error_docref(NULL TSRMLS_CC, E_WARNING, \"%s::\" USERSTREAM_WRITE \" wrote %ld bytes more data than requested (%ld written, %ld max)\",\r\n                //us->wrapper->classname, (long)(didwrite - count), (long)didwrite, (long)count);\r\n                byteswrote = count;\r\n            }\r\n\r\n            return byteswrote;\r\n        }\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawFlush\"]/*'/>\r\n        protected override bool RawFlush()\r\n        {\r\n            return Convert.ObjectToBoolean(UserWrapper.InvokeWrapperMethod(USERSTREAM_FLUSH));\r\n        }\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/property[@name=\"RawEof\"]/*'/>\r\n        protected override bool RawEof\r\n        {\r\n            get\r\n            {\r\n                // stream_eof:\r\n                if (Convert.ObjectToBoolean(UserWrapper.InvokeWrapperMethod(USERSTREAM_EOF)))\r\n                    return true;\r\n                // TODO: if USERSTREAM_EOF not implemented, assume EOF too\r\n\r\n                return false;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Raw Seeking (optional)\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/property[@name=\"CanSeek\"]/*'/>\r\n        public override bool CanSeek { get { return true; } }\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawTell\"]/*'/>\r\n        protected override int RawTell()\r\n        {\r\n            return Convert.ObjectToInteger(UserWrapper.InvokeWrapperMethod(USERSTREAM_TELL));\r\n                \r\n        }\r\n\r\n        /// <include file='Doc/Streams.xml' path='docs/method[@name=\"RawSeek\"]/*'/>\r\n        protected override bool RawSeek(int offset, SeekOrigin whence)\r\n        {\r\n            // stream_seek:\r\n            return Convert.ObjectToBoolean(UserWrapper.InvokeWrapperMethod(USERSTREAM_SEEK, offset, (int)whence));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the Length property of the underlying stream.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        protected override int RawLength()\r\n        {\r\n            try\r\n            {\r\n                return -1;\r\n            }\r\n            catch (Exception)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Seek\"));\r\n                return -1;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpUserStream properties\r\n\r\n        /// <summary><see cref=\"UserStreamWrapper\"/>.</summary>\r\n        protected UserStreamWrapper/*!*/UserWrapper { get { return (UserStreamWrapper)Wrapper; } }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/PhpString.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing PHP.Core.Reflection;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// String representation that uses <see cref=\"StringBuilder\"/> internally to improve\r\n    /// performance of modifications such as Append, Prepend and singe character change.\r\n\t/// </summary>\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    [DebuggerDisplay(\"{ToString()}\", Type = PhpString.PhpTypeName)]\r\n    public sealed class PhpString : IPhpVariable, IPhpObjectGraphNode, IComparable, ISerializable\r\n\t{\r\n        /// <summary>\r\n        /// PhpStrings PHP type name (string).\r\n        /// </summary>\r\n\t\tpublic const string PhpTypeName = PhpVariable.TypeNameString;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Copy-on-write aware string builder.\r\n\t\t/// </summary>\r\n\t\tprivate CowStringBuilder/*!*/cow;\r\n\r\n        /// <summary>\r\n        /// Internal <see cref=\"StringBuilder\"/> containing string data. Note: Can be shared.\r\n        /// </summary>\r\n        internal StringBuilder/*!*/StringBuilder { get { return this.cow.Builder; } }\r\n\r\n\t\t#region Nested Class: CowStringBuilder\r\n\r\n        /// <summary>\r\n        /// StringBuilder that can be marked both as read only (shared, immutable) or writable.\r\n        /// </summary>\r\n\t\tprivate sealed class CowStringBuilder\r\n        {\r\n            #region Fields & Properties\r\n\r\n            /// <summary>\r\n            /// <see cref=\"StringBuilder\"/> containing the string (Unicode) data.\r\n            /// </summary>\r\n            public StringBuilder/*!*/Builder { get { return _builder; } }\r\n\t\t\tprivate readonly StringBuilder/*!*/_builder;\r\n\r\n            /// <summary>\r\n            /// True iff the internal data structure is shared and should not be modified.\r\n            /// </summary>\r\n            public bool IsShared\r\n            {\r\n                get\r\n                {\r\n                    return _refCount > 1;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Keep track of \"reference count\". Only increased when copied, and decreased when shared instance is modified.\r\n            /// Sometimes it really avoids copying.\r\n            /// </summary>\r\n            private int _refCount = 1;\r\n\r\n            #endregion\r\n\r\n            #region Contstruction\r\n\r\n            /// <summary>\r\n            /// Initialize the instance with string value.\r\n            /// </summary>\r\n            /// <param name=\"str\">String value.</param>\r\n\t\t\tpublic CowStringBuilder(string str)\r\n\t\t\t{\r\n                _builder = new StringBuilder(str);\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Initialize the instance with string and expected capacity.\r\n            /// </summary>\r\n            /// <param name=\"str\">String value.</param>\r\n            /// <param name=\"capacity\">Expected capacity.</param>\r\n\t\t\tpublic CowStringBuilder(string str, int capacity)\r\n\t\t\t{\r\n                _builder = new StringBuilder(str, capacity);\r\n\t\t\t}\r\n\r\n            /// <summary>\r\n            /// Initialize the instance with twi string values that will be concatenated.\r\n            /// </summary>\r\n            /// <param name=\"str1\"></param>\r\n            /// <param name=\"str2\"></param>\r\n\t\t\tpublic CowStringBuilder(string str1, string str2)\r\n\t\t\t{\r\n\t\t\t\tif (str1 == null)\r\n\t\t\t\t{\r\n                    _builder = new StringBuilder(str2);\r\n\t\t\t\t}\r\n\t\t\t\telse if (str2 == null)\r\n\t\t\t\t{\r\n                    _builder = new StringBuilder(str1);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    _builder = new StringBuilder(str1, str1.Length + str2.Length);\r\n                    _builder.Append(str2);\r\n\t\t\t\t}\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Share, Unshare\r\n\r\n            /// <summary>\r\n            /// Mark this instance as shared (read only, immutable).\r\n            /// </summary>\r\n            /// <returns></returns>\r\n            internal CowStringBuilder/*!*/Share()\r\n            {\r\n                ++_refCount;\r\n                return this;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Get back shared instance of <see cref=\"CowStringBuilder\"/>.\r\n            /// </summary>\r\n            internal void Unshare()\r\n            {\r\n                --_refCount;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Lazy copy construction.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"phps\"></param>\r\n\t\tprivate PhpString(PhpString phps)\r\n\t\t{\r\n\t\t\tthis.cow = phps.cow.Share();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initialize PhpString with string value.\r\n        /// </summary>\r\n        /// <param name=\"str\">String value.</param>\r\n\t\tpublic PhpString(string str)\r\n\t\t{\r\n\t\t\tthis.cow = new CowStringBuilder(str);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initialize PhpString with two string values that will be concatenated.\r\n        /// </summary>\r\n        /// <param name=\"str1\">First string value.</param>\r\n        /// <param name=\"str2\">Second string value.</param>\r\n\t\tpublic PhpString(string str1, string str2)\r\n\t\t{\r\n\t\t\tthis.cow = new CowStringBuilder(str1, str2);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpVariable Members\r\n\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n            int length = this.Length;\r\n            return length == 0 || (length == 1 && cow.Builder[0] == '0');\r\n\t\t}\r\n\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible Members\r\n\r\n\t\tpublic PHP.Core.PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.PhpString;\r\n\t\t}\r\n\r\n\t\tpublic double ToDouble()\r\n\t\t{\r\n\t\t\treturn Convert.StringToDouble(cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic int ToInteger()\r\n\t\t{\r\n\t\t\treturn Convert.StringToInteger(cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic long ToLongInteger()\r\n\t\t{\r\n\t\t\treturn Convert.StringToLongInteger(cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic bool ToBoolean()\r\n\t\t{\r\n            int length = this.Length;\r\n\t\t\treturn length != 0 && (length != 1 || cow.Builder[0] != 0);\r\n\t\t}\r\n\r\n\t\tpublic PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn new PhpBytes(cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\treturn Convert.StringToNumber(cow.Builder.ToString(), out intValue, out longValue, out doubleValue);\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn cow.Builder.ToString();\r\n\t\t}\r\n\r\n\t\tstring IPhpConvertible.ToString()\r\n\t\t{\r\n\t\t\treturn ToString();\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts instance to its string representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <param name=\"throwOnError\">Throw out 'Notice' when conversion wasn't successful?</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tstring IPhpConvertible.ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n\t\t\tsuccess = true;\r\n\t\t\treturn ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable Members\r\n\r\n\t\tpublic void Print(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tPhpVariable.Print(output, cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic void Dump(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tPhpVariable.Dump(output, cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\tpublic void Export(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tPhpVariable.Export(output, cow.Builder.ToString());\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\tpublic object DeepCopy()\r\n\t\t{\r\n\t\t\treturn new PhpString(this);\r\n\t\t}\r\n\r\n\t\tpublic object Copy(PHP.Core.CopyReason reason)\r\n\t\t{\r\n\t\t\treturn new PhpString(this);\r\n\t\t}\r\n\r\n\t\tpublic PhpString Copy()\r\n\t\t{\r\n\t\t\treturn new PhpString(this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\tpublic int CompareTo(object obj, IComparer/*!*/ comparer)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null);\r\n\r\n            // compare internal structures if possible\r\n            PhpString phps;\r\n            if ((phps = obj as PhpString) != null)\r\n            {\r\n                if (object.ReferenceEquals(this.cow, phps.cow))\r\n                    return 0;\r\n\r\n                // as we know the second operand is PhpString, compare as strings directly\r\n                return comparer.Compare(this.cow.Builder.ToString(), phps.cow.Builder.ToString());\r\n            }\r\n\r\n            // compare as strings\r\n            return comparer.Compare(cow.Builder.ToString(), obj);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Read Operations\r\n\r\n\t\tpublic int Length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn cow.Builder.Length;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal char GetCharUnchecked(int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(index >= 0 && index < cow.Builder.Length);\r\n\t\t\treturn cow.Builder[index];\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Write Operations\r\n\r\n\t\tpublic PhpString/*!*/ Append(string str)\r\n\t\t{\r\n            if (cow.IsShared)\r\n            {\r\n                cow.Unshare();\r\n            \tcow = new CowStringBuilder(cow.Builder.ToString(), str);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcow.Builder.Append(str);\r\n\t\t\t}\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tpublic PhpString/*!*/ Append(char c)\r\n\t\t{\r\n            if (cow.IsShared)\r\n            {\r\n                cow.Unshare();\r\n\t\t\t\tcow = new CowStringBuilder(cow.Builder.ToString(), cow.Builder.Length + 1);\r\n\t\t\t}\r\n\r\n\t\t\tcow.Builder.Append(c);\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tpublic PhpString/*!*/ Append(char c, int count)\r\n\t\t{\r\n\t\t\tif (count < 0)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"count\");\r\n\r\n            if (count > 0)\r\n            {\r\n                if (cow.IsShared)\r\n                {\r\n                    cow.Unshare();\r\n                    cow = new CowStringBuilder(cow.Builder.ToString(), cow.Builder.Length + count);\r\n                }\r\n\r\n                cow.Builder.Append(c, count);\r\n            }\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tpublic PhpString/*!*/ Prepend(string str)\r\n\t\t{\r\n            if (cow.IsShared)\r\n            {\r\n                cow.Unshare();\r\n\t\t\t\tcow = new CowStringBuilder(str, cow.Builder.ToString());\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcow.Builder.Insert(0, str);\r\n\t\t\t}\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tinternal void SetCharUnchecked(int index, char value)\r\n\t\t{\r\n            Debug.Assert(index >= 0 && index < this.Length);\r\n\r\n            if (cow.IsShared)\r\n            {\r\n                cow.Unshare();\r\n\t\t\t\tcow = new CowStringBuilder(cow.Builder.ToString());\r\n\t\t\t}\r\n\r\n\t\t\tcow.Builder[index] = value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpObjectGraphNode Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Walk(PHP.Core.PhpWalkCallback callback, ScriptContext context)\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (obj != null && obj.GetType() == typeof(PhpString))\r\n                return this.cow.Builder.Equals(((PhpString)obj).cow.Builder);\r\n            return false;\r\n        }\r\n        public override int GetHashCode()\r\n        {\r\n            return this.cow.Builder.Length;\r\n        }\r\n\r\n        #region ISerializable (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Handles serialization and deserialization of <see cref=\"PhpString\"/>.\r\n        /// </summary>\r\n        /// <remarks>Deserialization converts this object into <see cref=\"string\"/>.</remarks>\r\n        [Serializable]\r\n        private class SerializationHelper : ISerializable, IDeserializationCallback, IObjectReference\r\n        {\r\n            /// <summary>\r\n            /// Name of value field within <see cref=\"SerializationInfo\"/> containing serialized string.\r\n            /// </summary>\r\n            private const string InfoValueName = \"Value\";\r\n\r\n            /// <summary>\r\n            /// Deserialized string value.\r\n            /// </summary>\r\n            private readonly string value;\r\n\r\n            /// <summary>\r\n            /// Beginning of the deserialization.\r\n            /// </summary>\r\n            /// <param name=\"info\"></param>\r\n            /// <param name=\"context\"></param>\r\n            private SerializationHelper(SerializationInfo/*!*/info, StreamingContext context)\r\n            {\r\n                this.value = (string)info.GetValue(InfoValueName, typeof(string));\r\n            }\r\n\r\n            [System.Security.SecurityCritical]\r\n            internal static void GetObjectData(PhpString/*!*/instance, SerializationInfo info, StreamingContext context)\r\n            {\r\n                Debug.Assert(instance != null);\r\n                Debug.Assert(info != null);\r\n\r\n                info.SetType(typeof(SerializationHelper));\r\n                info.AddValue(InfoValueName, instance.ToString());\r\n            }\r\n\r\n            public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n            {\r\n                // should never be called\r\n                throw new InvalidOperationException();\r\n            }\r\n\r\n            public object GetRealObject(StreamingContext context)\r\n            {\r\n                return this.value;\r\n            }\r\n\r\n            public virtual void OnDeserialization(object sender)\r\n            {\r\n                \r\n            }\r\n        }\r\n\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            SerializationHelper.GetObjectData(this, info, context);\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n\t#region Array Proxy\r\n\r\n\t/// <summary>\r\n\t/// Created by ensuring operators (i.e. when a chain is written) if the ensured value is a non-empty string.\r\n\t/// Holds a string container (<see cref=\"PhpString\"/> or <see cref=\"PhpBytes\"/>).\r\n\t/// The operator immediately following the ensuring operator either raises an error if it is an ensuring operator\r\n\t/// or modifies byte/character in the string if it is a <see cref=\"PhpArray.SetArrayItem\"/> operator.\r\n\t/// </summary>\r\n\tinternal sealed class PhpArrayString : PhpArray // TODO: Bytes/String\r\n\t{\r\n\t\tinternal PhpString String { get { return (PhpString)obj; } }\r\n\t\tinternal PhpBytes Bytes { get { return (PhpBytes)obj; } }\r\n\t\tinternal object Object { get { return obj; } }\r\n\r\n\t\treadonly private object obj/*!*/;\r\n\r\n\t\tinternal PhpArrayString(object obj)\r\n\t\t{\r\n\t\t\tDebug.Assert(obj is PhpString || obj is PhpBytes);\r\n\t\t\tthis.obj = obj;\r\n\t\t}\r\n\t\t\r\n\t\t#region Operators\r\n\r\n        protected override object GetArrayItemOverride(object key, bool quiet)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A: written chains only\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride()\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, true);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride(object key)\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, true);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride(int key)\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, true);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride(string key)\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, true);\r\n\t\t\treturn new PhpReference();\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(object value)\r\n        {\r\n            PhpException.VariableMisusedAsArray(obj, false);\r\n        }\r\n\r\n        protected override void SetArrayItemOverride(object key, object value)\r\n        {\r\n            int index;\r\n            if (Operators.CheckStringIndexRange(index = Convert.ObjectToInteger(key), Int32.MaxValue, false))\r\n            {\r\n                if (obj.GetType() == typeof(PhpString))\r\n                    Operators.SetStringItem((PhpString)obj, index, value);\r\n                else\r\n                    Operators.SetBytesItem((PhpBytes)obj, index, value);\r\n            }\r\n        }\r\n\r\n        protected override void SetArrayItemOverride(int key, object value)\r\n        {\r\n            PhpException.VariableMisusedAsArray(obj, true);\r\n        }\r\n\r\n        protected override void SetArrayItemOverride(string key, object value)\r\n        {\r\n            PhpException.VariableMisusedAsArray(obj, true);\r\n        }\r\n\r\n        protected override void SetArrayItemRefOverride(object key, PhpReference value)\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, true);\r\n\t\t}\r\n\r\n        protected override PhpArray EnsureItemIsArrayOverride(object key)\r\n\t\t{\r\n\t\t\t// error (postponed error, which cannot be reported by the previous operator):  \r\n\t\t\tPhpException.VariableMisusedAsArray(obj, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        protected override PhpArray EnsureItemIsArrayOverride()\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsArray(obj, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        protected override DObject EnsureItemIsObjectOverride(object key, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\t// error (postponed error, which cannot be reported by the previous operator):  \r\n\t\t\tPhpException.VariableMisusedAsObject(obj, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        protected override DObject EnsureItemIsObjectOverride(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tPhpException.VariableMisusedAsObject(obj, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Assemblies.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006-2012 Tomas Matousek, DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Xml;\r\nusing System.Threading;\r\nusing System.Reflection.Emit;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region PureAssembly\r\n\r\n\tpublic sealed class PureAssembly : PhpAssembly\r\n\t{\r\n\t\tinternal const string ModuleName = \"PurePhpModule\";\r\n\t\tpublic static readonly Name EntryPointName = new Name(\"Main\");\r\n\r\n\t\tinternal override DModule/*!*/ ExportModule { get { return module; } }\r\n\r\n\t\tpublic PureModule/*!*/ Module { get { return module; } internal /* friend PAB */ set { module = value; } }\r\n\t\tprivate PureModule/*!*/ module;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the loader.\r\n\t\t/// </summary>\r\n\t\tinternal PureAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly,\r\n\t\t\tPurePhpAssemblyAttribute/*!*/ attribute, LibraryConfigStore configStore)\r\n\t\t\t: base(applicationContext, realAssembly)\r\n\t\t{\r\n\t\t\tmodule = new PureModule(this);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the builder.\r\n\t\t/// </summary>\r\n\t\tinternal PureAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\t\t\t// to be written-up\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override PhpModule GetModule(PhpSourceFile name)\r\n\t\t{\r\n\t\t\treturn module;\r\n\t\t}\r\n\r\n\t\tinternal override void LoadCompileTimeReferencedAssemblies(AssemblyLoader/*!*/ loader)\r\n\t\t{\r\n\t\t\tbase.LoadCompileTimeReferencedAssemblies(loader);\r\n\r\n\t\t\tforeach (string full_name in GetAttribute().ReferencedAssemblies)\r\n\t\t\t\tloader.Load(full_name, null, null);\r\n\t\t}\r\n\r\n\t\tprivate PurePhpAssemblyAttribute GetAttribute()\r\n\t\t{\r\n\t\t\treturn PurePhpAssemblyAttribute.Reflect(RealAssembly);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptAssembly\r\n\r\n    [Serializable]\r\n    public sealed class InvalidScriptAssemblyException : Exception\r\n    {\r\n        internal InvalidScriptAssemblyException(Assembly/*!*/ assembly)\r\n            : base(CoreResources.GetString(\"invalid_script_assembly\", assembly.Location))\r\n        {\r\n        }\r\n\r\n        #region Serializable\r\n\r\n        public InvalidScriptAssemblyException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n            \r\n        }\r\n\r\n        [System.Security.SecurityCritical]\r\n        public override void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            base.GetObjectData(info, context);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t/// <summary>\r\n\t/// An abstract base class representing general script assembly.\r\n\t/// </summary>\r\n\tpublic abstract class ScriptAssembly : PhpAssembly\r\n\t{\r\n\t\tinternal const string RealModuleName = \"PhpScriptModule\";\r\n\t\tinternal const string EntryPointHelperName = \"Run\";\r\n        \r\n\t\tpublic abstract bool IsMultiScript { get; }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by assembly loader.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptAssembly(ApplicationContext/*!*/ applicationContext, Module/*!*/ realModule)\r\n\t\t\t: base(applicationContext, realModule)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by assembly loader.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly)\r\n\t\t\t: this(applicationContext, realAssembly.ManifestModule)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by builders (written-up).\r\n\t\t/// </summary>\r\n\t\tprotected ScriptAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\t\t}\r\n\r\n        internal static ScriptAssembly/*!*/ Create(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly,\r\n            ScriptAssemblyAttribute/*!*/ scriptAttribute)\r\n        {\r\n            return Create(applicationContext, realAssembly, scriptAttribute, null);\r\n        }\r\n\r\n\t\tinternal static ScriptAssembly/*!*/ Create(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly,\r\n            ScriptAssemblyAttribute/*!*/ scriptAttribute, string libraryRoot)\r\n\t\t{\r\n            if (scriptAttribute.IsMultiScript)\r\n                return new MultiScriptAssembly(applicationContext, realAssembly, libraryRoot);\r\n            else\r\n                return new SingleScriptAssembly(applicationContext, realAssembly, libraryRoot);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a script assembly using a specified CLR assembly.\r\n\t\t/// </summary>\r\n        public static ScriptAssembly/*!*/ LoadFromAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly)\r\n\t\t{\r\n            return LoadFromAssembly(applicationContext, realAssembly, null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Loads a script assembly using a specified CLR assembly with specified offset path.\r\n        /// </summary>\r\n        public static ScriptAssembly/*!*/ LoadFromAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly, string libraryRoot)\r\n        {\r\n            return Create(applicationContext, realAssembly, GetAttribute(realAssembly), libraryRoot);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic abstract IEnumerable<ScriptModule> GetModules();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type name of the script type given a subnamespace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"subnamespace\">The subnamespace or a <B>null</B> reference.</param>\r\n\t\t/// <returns>Full name of the type.</returns>\r\n\t\tpublic string GetQualifiedScriptTypeName(string subnamespace)\r\n\t\t{\r\n\t\t\tDebug.Assert(String.IsNullOrEmpty(subnamespace) || subnamespace[subnamespace.Length - 1] == Type.Delimiter);\r\n\r\n\t\t\treturn String.Concat(subnamespace, ScriptModule.ScriptTypeName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts metadata information associtated with the CLR assembly.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"InvalidScriptAssemblyException\">The assembly is invalid.</exception>\r\n\t\tprivate static ScriptAssemblyAttribute/*!*/ GetAttribute(Assembly/*!*/ realAssembly)\r\n\t\t{\r\n\t\t\tScriptAssemblyAttribute result = ScriptAssemblyAttribute.Reflect(realAssembly); \r\n\t\t\t\r\n\t\t\tif (result == null)\r\n\t\t\t\tthrow new InvalidScriptAssemblyException(realAssembly);\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SingleScriptAssembly\r\n\r\n\t/// <summary>\r\n\t/// Represents a script assembly comprising of a single script module.\r\n\t/// </summary>\r\n\tpublic sealed class SingleScriptAssembly : ScriptAssembly\r\n\t{\r\n\t\tpublic ScriptModule Module { get { return module; } internal /* friend SSAB */ set { module = value; } }\r\n\t\tprivate ScriptModule module;\r\n        private Type scriptType;\r\n\r\n\t\tpublic override bool IsMultiScript { get { return false; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the loader.\r\n\t\t/// </summary>\r\n        /// <param name=\"applicationContext\">Current application context.</param>\r\n        /// <param name=\"realAssembly\">Underlying real assembly.</param>\r\n        /// <param name=\"libraryRoot\">Offset path for scripts.</param>\r\n        internal SingleScriptAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly, string libraryRoot)\r\n            : base(applicationContext, realAssembly)\r\n        {\r\n            var scriptType = this.GetScriptType();\r\n            var subnamespace = string.IsNullOrEmpty(scriptType.Namespace) ? string.Empty : (scriptType.Namespace + \".\");\r\n\r\n            this.module = new ScriptModule(libraryRoot, scriptType, this, subnamespace);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the builder, written-up.\r\n\t\t/// </summary>\r\n\t\tinternal SingleScriptAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\t\t\tthis.module = null; // to be set by the builder\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the script module contained in the assembly.\r\n\t\t/// </summary>\r\n        public override PhpModule GetModule(PhpSourceFile name)\r\n        {\r\n            return this.module;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script type stored in a specified single-script assembly.\r\n\t\t/// </summary>\r\n        internal Type/*!*/GetScriptType()\r\n\t\t{\r\n            if (this.scriptType == null)\r\n            {\r\n                var attr = ScriptAssemblyAttribute.Reflect(RealModule.Assembly);\r\n                Debug.Assert(attr != null);\r\n                Debug.Assert(!attr.IsMultiScript);\r\n                Debug.Assert(attr.SSAScriptType != null);\r\n\r\n                this.scriptType = attr.SSAScriptType;\r\n                Debug.Assert(this.scriptType != null);\r\n            }\r\n            return this.scriptType;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets an enumerator of script module stored in this single-script assembly.\r\n        /// </summary>\r\n        public override IEnumerable<ScriptModule> GetModules()\r\n        {\r\n            yield return this.module;\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region MultiScriptAssembly\r\n\r\n\t/// <summary>\r\n\t/// Represents a script assembly comprising of multiple script modules.\r\n\t/// </summary>\r\n\tpublic sealed class MultiScriptAssembly : ScriptAssembly\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Source files to modules mapping.\r\n\t\t/// </summary>\r\n\t\tinternal Dictionary<PhpSourceFile, ScriptModule> Modules { get { return modules; } }\r\n\t\tprivate Dictionary<PhpSourceFile, ScriptModule> modules;\r\n\r\n        /// <summary>\r\n        /// Root path to script in this library.\r\n        /// </summary>\r\n        private string libraryRoot;\r\n\r\n\t\tpublic override bool IsMultiScript { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by assembly loader.\r\n\t\t/// </summary>\r\n        /// <param name=\"applicationContext\">Current application context.</param>\r\n        /// <param name=\"realAssembly\">Underlying real assembly.</param>\r\n        /// <param name=\"libraryRoot\">Relative path of root of the library scripts.</param>\r\n        internal MultiScriptAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly, string libraryRoot)\r\n            : base(applicationContext, realAssembly)\r\n\t\t{\r\n            this.libraryRoot = libraryRoot;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the builder (real assembly is written up).\r\n\t\t/// </summary>\r\n\t\tinternal MultiScriptAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\t\t\tthis.modules = new Dictionary<PhpSourceFile, ScriptModule>();\r\n\t\t}\r\n\r\n        private void EnsureLibraryReflected()\r\n        {\r\n            if (modules == null)\r\n                lock(this)\r\n                    if (modules == null) \r\n                        ReflectAssemblyNoLock();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reflects the assembly and creates ScriptModules.\r\n        /// </summary>\r\n        private void ReflectAssemblyNoLock()\r\n        {\r\n            // TODO: this should be changed into ScriptAttribute resolution when all assemblies have this attribute correctly generated\r\n            // (same as WebCompilerManager does that)\r\n            this.modules = new Dictionary<PhpSourceFile, ScriptModule>();\r\n\r\n            // go through all types in the assembly\r\n            foreach (Type type in RealAssembly.GetTypes()/*GetExportedTypes()*/)\r\n            {\r\n                //bool isScript = false;\r\n\r\n                ////check whether type implements IPhpScript interface\r\n                //foreach (Type iface in type.GetInterfaces())\r\n                //{\r\n                //    if (iface == typeof(IPhpScript))\r\n                //    {\r\n                //        isScript = true;\r\n                //        break;\r\n                //    }\r\n                //}\r\n\r\n                //if (!isScript) continue;\r\n                if (type.IsVisible && type.Name == ScriptModule.ScriptTypeName)\r\n                {\r\n                    //customary . is required\r\n                    string subnamespace = type.Namespace + \".\";\r\n                    \r\n                    //get script's arbitrary path\r\n                    string scriptPath = ScriptModule.GetPathFromSubnamespace(subnamespace).ToString();\r\n                    if (libraryRoot != null)\r\n                        scriptPath = System.IO.Path.Combine(libraryRoot, scriptPath);\r\n\r\n                    modules.Add(new PhpSourceFile(Configuration.Application.Compiler.SourceRoot, new RelativePath(scriptPath)), new ScriptModule(scriptPath, type, this, subnamespace));\r\n                }\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a script module associated with a specified source file.\r\n\t\t/// </summary>\r\n\t\tpublic override PhpModule GetModule(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n            Debug.Assert(sourceFile != null);\r\n\r\n            EnsureLibraryReflected();\r\n\r\n\t\t\tScriptModule result;\r\n\t\t\tmodules.TryGetValue(sourceFile, out result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a new script module. Used by builder.\r\n\t\t/// </summary>\r\n\t\tinternal void AddScriptModule(PhpSourceFile/*!*/ sourceFile, ScriptModule/*!*/ module)\r\n\t\t{\r\n\t\t\tmodules.Add(sourceFile, module);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a full qualified name of a script type given a sub-namespace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Source file.</param>\r\n\t\t/// <returns>The qualified name.</returns>\r\n\t\tpublic string GetQualifiedScriptTypeName(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceFile != null);\r\n\r\n\t\t\treturn GetQualifiedScriptTypeName(ScriptModule.GetSubnamespace(sourceFile.RelativePath, true));\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Determine if script specified by <paramref name=\"fullPath\"/> is loaded in script library.\r\n        /// </summary>\r\n        /// <param name=\"fullPath\">The script path.</param>\r\n        /// <returns>True if given script is loaded.</returns>\r\n\t\tinternal bool ScriptExists(FullPath fullPath)\r\n\t\t{\r\n            EnsureLibraryReflected();\r\n\r\n\t\t\tPhpSourceFile source_file = new PhpSourceFile(Configuration.Application.Compiler.SourceRoot, fullPath);\r\n            return modules.ContainsKey(source_file);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets an enumerator of script modules stored in this multi-script assembly.\r\n        /// </summary>\r\n        public override IEnumerable<ScriptModule> GetModules()\r\n        {\r\n            EnsureLibraryReflected();\r\n\r\n            return modules.Values;\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Assemblies.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Xml;\r\nusing System.Threading;\r\nusing System.Reflection.Emit;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\tusing ProvidedType = KeyValuePair<string, DTypeDesc>;\r\n\tusing PHP.Core.Emit;\r\n\r\n\t#region DAssembly\r\n\r\n\tpublic abstract class DAssembly\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The application context which the assembly has been loaded to.\r\n\t\t/// </summary>\r\n\t\tpublic ApplicationContext/*!*/ ApplicationContext { get { return applicationContext; } }\r\n\t\tprivate readonly ApplicationContext/*!*/ applicationContext;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Primary real module of the assembly. <B>null</B> only for unknown assembly.\r\n\t\t/// </summary>\r\n\t\tpublic Module RealModule { get { return realModule; } }\r\n\t\tprivate Module realModule;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the real assembly. <B>null</B> only for unknown assembly.\r\n\t\t/// </summary>\r\n\t\tpublic Assembly RealAssembly { get { return (realModule != null) ? realModule.Assembly : null; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the module containing types, functions and constants exported to the referencing assembly.\r\n\t\t/// Returns <B>null</B> if the assembly doesn't export any entries (e.g. script assembly do so).\r\n\t\t/// </summary>\r\n\t\tinternal virtual DModule ExportModule { get { return null; } }\r\n\r\n\t\tpublic abstract string/*!*/ DisplayName { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Path to the assembly file or <B>null</B> for transient assemblies.\r\n\t\t/// </summary>\r\n\t\tpublic string Path { get { return path; } }\r\n\t\tprivate string path;\r\n\t\r\n\t\t#region Construction\r\n\r\n\t\tprotected DAssembly(ApplicationContext/*!*/ applicationContext, Module/*!*/ realModule)\r\n\t\t{\r\n\t\t\tDebug.Assert(applicationContext != null && realModule != null);\r\n\r\n\t\t\tthis.applicationContext = applicationContext;\r\n\t\t\tthis.realModule = realModule;\r\n\t\t}\r\n\r\n\t\tprotected DAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly)\r\n\t\t{\r\n\t\t\tDebug.Assert(applicationContext != null && realAssembly != null);\r\n\r\n\t\t\tthis.applicationContext = applicationContext;\r\n\t\t\tthis.realModule = realAssembly.ManifestModule;\r\n#if !SILVERLIGHT\r\n\t\t\tthis.path = realAssembly.CodeBase;\r\n#else\r\n\t\t\tthis.path = null;\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by builders (write-up) and unknown assemblies.\r\n\t\t/// </summary>\r\n\t\tprotected DAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t{\r\n\t\t\tthis.applicationContext = applicationContext;\r\n\r\n\t\t\trealModule = null;\r\n\t\t}\r\n\r\n\t\tinternal void WriteUp(Module/*!*/ realModule, string path)\r\n\t\t{\r\n\t\t\tthis.realModule = realModule;\r\n\t\t\tthis.path = path;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the loader.\r\n\t\t/// </summary>\r\n\t\tinternal static DAssembly/*!*/ CreateNoLock(ApplicationContext/*!*/ applicationContext,\r\n\t\t\tAssembly/*!*/ realAssembly, LibraryConfigStore config)\r\n\t\t{\r\n\t\t\t// gets a name of the descriptor:\r\n\t\t\tDAssemblyAttribute attr = DAssemblyAttribute.Reflect(realAssembly);\r\n\t\t\tif (attr != null)\r\n\t\t\t{\r\n\t\t\t\tPhpLibraryAttribute lib;\r\n\t\t\t\tPurePhpAssemblyAttribute pure;\r\n                \r\n\t\t\t\tif ((lib = attr as PhpLibraryAttribute) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// PHP library or extension: \r\n\t\t\t\t\treturn new PhpLibraryAssembly(applicationContext, realAssembly, lib, config);\r\n\t\t\t\t}\r\n\t\t\t\telse if ((pure = attr as PurePhpAssemblyAttribute) != null)\r\n\t\t\t\t{\r\n#if SILVERLIGHT\r\n\t\t\t\t\tthrow new NotSupportedException(\"Loading of pre-compiled pure assemblies is not supported!\");\r\n#else\r\n\t\t\t\t\t// compiled pure PHP assembly:\r\n\t\t\t\t\treturn new PureAssembly(applicationContext, realAssembly, pure, config);\r\n#endif\r\n\t\t\t\t}\r\n                else \r\n                {\r\n#if SILVERLIGHT\r\n\t\t\t\t\tthrow new NotSupportedException(\"Loading of pre-compiled script assemblies is not supported!\");\r\n#else\r\n                    // compiled PHP script assembly:\r\n                    return ScriptAssembly.Create(applicationContext, realAssembly, (ScriptAssemblyAttribute)attr);\r\n#endif\r\n                }\r\n\t\t\t}\r\n            else\r\n\t\t\t{\r\n                // CLR assembly:\r\n\t\t\t\treturn new ClrAssembly(applicationContext, realAssembly, config);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads assemblies that are not explicitly referenced by the metadata, yet were referenced by the compiler\r\n\t\t/// when the assembly was being built.\r\n\t\t/// </summary>\r\n\t\tinternal virtual void LoadCompileTimeReferencedAssemblies(AssemblyLoader/*!*/ loader)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpAssembly\r\n\r\n\tpublic abstract class PhpAssembly : DAssembly\r\n\t{\r\n\t\tpublic abstract PhpModule GetModule(PhpSourceFile name);\r\n\r\n\t\tpublic override string/*!*/ DisplayName { get { return RealAssembly.FullName; } }\r\n\r\n\t\tpublic PhpAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly)\r\n\t\t\t: base(applicationContext, realAssembly)\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n\t\tpublic PhpAssembly(ApplicationContext/*!*/ applicationContext, Module/*!*/ realModule)\r\n\t\t\t: base(applicationContext, realModule)\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by builder.\r\n\t\t/// </summary>\r\n\t\tprotected PhpAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\t\t\t// to be written-up\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TransientAssembly\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class TransientAssembly : PhpAssembly\r\n\t{\r\n\t\t#region Nested Types: Key, Value\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiled code depends on its source code, source file, and position.\r\n\t\t/// </summary>\r\n        [DebuggerNonUserCode]\r\n        private struct Key : IEquatable<Key>\r\n\t\t{\r\n\t\t\tprivate readonly string/*!*/ code;\r\n\t\t\tprivate readonly SourceCodeDescriptor descriptor;\r\n\r\n\t\t\tpublic Key(string/*!*/ code, SourceCodeDescriptor descriptor)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(code != null);\r\n\r\n\t\t\t\tthis.code = code;\r\n\t\t\t\tthis.descriptor = descriptor;\r\n\t\t\t}\r\n\r\n\t\t\t#region IEquatable<Key> Members\r\n\r\n\t\t\tpublic bool Equals(Key other)\r\n\t\t\t{\r\n\t\t\t\treturn this.descriptor.Equals(other.descriptor) && this.code == other.code;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\tpublic override bool Equals(object obj)\r\n\t\t\t{\r\n\t\t\t\tif (!(obj is Key)) return false;\r\n\t\t\t\treturn Equals((Key)obj);\r\n\t\t\t}\r\n\r\n\t\t\tpublic override int GetHashCode()\r\n\t\t\t{\r\n\t\t\t\treturn code.GetHashCode() ^ descriptor.GetHashCode();\r\n\t\t\t}\r\n\r\n\t\t\t#region Debug\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic void Dump(TextWriter o)\r\n\t\t\t{\r\n\t\t\t\to.WriteLine(\"{0}#{1}({2},{3})\", descriptor.ContainingSourcePath,\r\n\t\t\t\t\tdescriptor.ContainingTransientModuleId, descriptor.Line, descriptor.Column);\r\n\t\t\t\to.WriteLine(\"- code ------------------------------\");\r\n\t\t\t\to.Write(code);\r\n\t\t\t\to.WriteLine();\r\n\t\t\t\to.WriteLine(\"-------------------------------------\");\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Values stored in the cache.\r\n\t\t/// </summary>\r\n        [DebuggerNonUserCode]\r\n        private struct Value\r\n\t\t{\r\n\t\t\tpublic readonly TransientModule/*!*/ Module;\r\n\t\t\tpublic readonly List<ProvidedType>/*!*/ TypeDependencies;\r\n\r\n\t\t\tpublic Value(TransientModule/*!*/ module, List<ProvidedType>/*!*/ typeDependencies)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(module != null && typeDependencies != null);\r\n\r\n\t\t\t\tthis.Module = module;\r\n\t\t\t\tthis.TypeDependencies = typeDependencies;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tinternal const string RealAssemblyName = \"TransientAssembly\";\r\n\t\tinternal const string RealModuleName = \"TransientModule\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// An invalid eval id. All eval ids are indices to the eval list so -1 is invalid value indeed.\r\n\t\t/// </summary>\r\n\t\tpublic const int InvalidEvalId = -1;\r\n\r\n\t\tinternal override DModule ExportModule { get { return null; } }\r\n\r\n\t\tpublic override string/*!*/ DisplayName { get { return RealAssemblyName; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Protects both <see cref=\"cache\"/> and <see cref=\"modules\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate readonly ReaderWriterLockSlim/*!*/rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Maps transient source code to its compiled form - an instance of <see cref=\"ScriptModule\"/> class.\r\n\t\t/// </summary>\r\n\t\tprivate readonly Dictionary<Key, Value>/*!*/ cache = new Dictionary<Key, Value>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of modules. Can contain <B>null</B> slots if two threads are compiling the same code. The slower\r\n\t\t/// may reserve the slot but it doesn't fill it (the redundant compiled code is thrown away).\r\n\t\t/// </summary>\r\n\t\tprivate readonly List<TransientModule>/*!*/ modules = new List<TransientModule>();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tinternal TransientAssembly(ApplicationContext/*!*/ applicationContext)\r\n\t\t\t: base(applicationContext)\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Modules\r\n\r\n\t\tinternal TransientModule GetModule(ScriptContext/*!*/ context, DTypeDesc caller, string/*!*/ code, SourceCodeDescriptor descriptor)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null && code != null);\r\n\r\n\t\t\tKey key = new Key(code, descriptor);\r\n\t\t\tValue value;\r\n\r\n            rwLock.EnterUpgradeableReadLock();\r\n\r\n            try\r\n            {\r\n                if (cache.TryGetValue(key, out value))\r\n                {\r\n                    if (TypesProvider.LoadAndMatch(value.TypeDependencies, context, caller))\r\n                    {\r\n#if !SILVERLIGHT\r\n                        Performance.Increment(Performance.DynamicCacheHits);\r\n#endif\r\n                        return value.Module;\r\n                    }\r\n                    else\r\n                    {\r\n                        // invalidate the cache entry, because type dependencies were changed:\r\n                        rwLock.EnterWriteLock();\r\n\r\n                        try\r\n                        {\r\n                            cache.Remove(key);\r\n                        }\r\n                        finally\r\n                        {\r\n                            rwLock.ExitWriteLock();\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                rwLock.ExitUpgradeableReadLock();\r\n            }            \r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override PhpModule GetModule(PhpSourceFile name)\r\n\t\t{\r\n            throw new NotSupportedException();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets eval info.\r\n\t\t/// </summary>\r\n\t\tpublic TransientModule GetModule(int id)\r\n\t\t{\r\n\t\t\t// not synchronized - the modules are not removed from the list\r\n\r\n\t\t\tif (id == InvalidEvalId) return null;\r\n\r\n\t\t\tDebug.Assert(id >= 0 && id < modules.Count, \"Eval id has invalid value.\");\r\n\r\n\t\t\treturn modules[id];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a root eval for a specified eval.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The eval id.</param>\r\n\t\t/// <returns>An id of root eval.</returns>\r\n\t\tpublic TransientModule GetRootModule(int id)\r\n\t\t{\r\n\t\t\t// not synchronized - the modules are not removed\r\n\r\n\t\t\tif (id == InvalidEvalId) return null;\r\n\r\n\t\t\tDebug.Assert(id >= 0 && id < modules.Count, \"Eval id has invalid value.\");\r\n\r\n\t\t\tTransientModule module = modules[id];\r\n\r\n\t\t\twhile (module.ContainingModule != null)\r\n\t\t\t\tmodule = module.ContainingModule;\r\n\r\n\t\t\treturn module;\r\n\t\t}\r\n\r\n\t\tinternal TransientModuleBuilder/*!*/ DefineModule(TransientAssemblyBuilder/*!*/ assemblyBuilder,\r\n\t\t\tTransientCompilationUnit/*!*/ compilationUnit, int containerId, EvalKinds kind, string sourcePath)\r\n\t\t{\r\n\t\t\tTransientModule container = GetModule(containerId);\r\n\r\n\t\t\tint new_id;\r\n\r\n            rwLock.EnterWriteLock();\r\n\r\n            try\r\n\t\t\t{\r\n\t\t\t\t// reserve slot in the module list:\r\n\t\t\t\tnew_id = modules.Count;\r\n\t\t\t\tmodules.Add(null);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n                rwLock.ExitWriteLock();\r\n\t\t\t}\r\n\r\n\t\t\treturn new TransientModuleBuilder(new_id, kind, compilationUnit, assemblyBuilder, container, sourcePath);\r\n\t\t}\r\n\r\n\t\tinternal TransientModule/*!*/ AddModule(TransientModule/*!*/ module, List<ProvidedType>/*!*/ dependentTypes,\r\n\t\t\tstring code, SourceCodeDescriptor descriptor)\r\n\t\t{\r\n\t\t\tKey key = new Key(code, descriptor);\r\n\t\t\tValue value = new Value(module, dependentTypes);\r\n\r\n\t\t\t// adds item to the cache and the list if it is not there:\r\n            \r\n            rwLock.EnterWriteLock();\r\n            try\r\n\t\t\t{\r\n                Value existing;\r\n\t\t\t\tif (!cache.TryGetValue(key, out existing))\r\n\t\t\t\t{\r\n\t\t\t\t\tcache.Add(key, value);\r\n\r\n\t\t\t\t\tDebug.Assert(module.Id < modules.Count, \"Slot should have been reserved.\");\r\n\t\t\t\t\tmodules[module.Id] = module;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tmodule = existing.Module;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n                rwLock.ExitWriteLock();\r\n\t\t\t}\r\n\r\n\t\t\treturn module;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fills a list by an eval trace starting with an eval of a specified id.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"evalId\">The id of the eval which to start with.</param>\r\n\t\t/// <param name=\"result\">The list of <see cref=\"ErrorStackInfo\"/> to fill. </param>\r\n\t\tpublic void GetEvalFullTrace(int evalId, List<ErrorStackInfo>/*!*/ result)\r\n\t\t{\r\n\t\t\tTransientModule module = GetModule(evalId);\r\n\r\n\t\t\tDebug.Assert(module != null);\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tSourceCodeUnit source_unit = module.TransientCompilationUnit.SourceUnit;\r\n\r\n\t\t\t\tresult.Add(new ErrorStackInfo(source_unit.SourceFile.FullPath, module.GetErrorString(),\r\n\t\t\t\t\tsource_unit.Line, source_unit.Column, false));\r\n\r\n\t\t\t\tmodule = module.ContainingModule;\r\n\t\t\t}\r\n\t\t\twhile (module != null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dumps cache.\r\n\t\t/// </summary>\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal void Dump(TextWriter o)\r\n\t\t{\r\n            rwLock.EnterReadLock();\r\n\r\n            try\r\n\t\t\t{\r\n                foreach (KeyValuePair<Key, Value> entry in cache)\r\n\t\t\t\t{\r\n\t\t\t\t\tentry.Key.Dump(o);\r\n\t\t\t\t\tif (entry.Value.TypeDependencies != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\to.WriteLine(\"dependent types:\");\r\n\t\t\t\t\t\tforeach (ProvidedType type in entry.Value.TypeDependencies)\r\n\t\t\t\t\t\t\to.Write(type.Key.ToString() + \" \");\r\n\t\t\t\t\t\to.WriteLine();\r\n\t\t\t\t\t\to.WriteLine();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n                rwLock.ExitReadLock();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrAssembly\r\n\r\n\tpublic sealed class ClrAssembly : DAssembly\r\n\t{\r\n\t\tinternal override DModule ExportModule { get { return module; } }\r\n\r\n\t\tpublic ClrModule/*!*/ Module { get { return module; } }\r\n\t\tprivate readonly ClrModule/*!*/ module;\r\n\r\n\t\tpublic override string/*!*/ DisplayName { get { return RealAssembly.FullName; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the loader.\r\n\t\t/// </summary>\r\n\t\tinternal ClrAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly,\r\n\t\t\tLibraryConfigStore configStore)\r\n\t\t\t: base(applicationContext, realAssembly)\r\n\t\t{\r\n\t\t\tthis.module = new ClrModule(this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PhpLibraryAssembly\r\n\r\n    public sealed class PhpLibraryAssembly : DAssembly\r\n\t{\r\n\t\tinternal static int LoadedLibraryCount { get { return uniqueIndex; } }\r\n\t\tprivate static int uniqueIndex = 0;\r\n\r\n\t\tinternal override DModule ExportModule { get { return module; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Library descriptor. Available only if the library is not loaded for reflection only.\r\n\t\t/// </summary>\r\n\t\tpublic PhpLibraryDescriptor Descriptor { get { return descriptor; } }\r\n\t\tprivate PhpLibraryDescriptor descriptor;\r\n\r\n        #region PhpLibrary properties (the library attribute)\r\n\r\n        /// <summary>\r\n        /// The PhpLibrary attribute of the library.\r\n        /// Custom attribute describing library properties.\r\n\t\t/// </summary>\r\n\t\tpublic PhpLibraryAttribute/*!*/ Properties { get { return properties; } }\r\n\t\tprivate readonly PhpLibraryAttribute/*!*/ properties;\r\n\r\n        /// <summary>\r\n        /// Returns a list of names of extensions which are implemented by the library.\r\n        /// </summary>\r\n        /// <returns>An array of names.</returns>\r\n        /// <remarks>The first item (if any) is considered to be default extension for the library.</remarks>\r\n        public string[]/*!*/ImplementedExtensions { get { return properties.ImplementsExtensions; } }\r\n\r\n        /// <summary>\r\n        /// Returns a name of default extension which is implemented by the library.\r\n        /// </summary>\r\n        /// <remarks>The first item (if any) is considered to be default extension for the library.</remarks>\r\n        public string DefaultExtension\r\n        {\r\n            get\r\n            {\r\n\r\n                string[] extensions = this.ImplementedExtensions;\r\n\r\n                if (extensions.Length > 0)\r\n                    return extensions[0];\r\n                else\r\n                    return null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        public DModule/*!*/ Module { get { return module; } }\r\n\t\tprivate readonly DModule/*!*/ module;\r\n\r\n\t\tpublic override string/*!*/ DisplayName\r\n\t\t{\r\n\t\t\tget \r\n\t\t\t{\r\n\t\t\t\treturn String.Format(\"{0} ({1})\", properties.Name, RealAssembly.GetName().Name); \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the loader. \r\n\t\t/// Thread unsafe. Has to be called only in a critical section preventing any other calls.\r\n\t\t/// </summary>\r\n\t\tinternal PhpLibraryAssembly(ApplicationContext/*!*/ applicationContext, Assembly/*!*/ realAssembly,\r\n\t\t\tPhpLibraryAttribute/*!*/ properties, LibraryConfigStore configStore)\r\n\t\t\t: base(applicationContext, realAssembly)\r\n\t\t{\r\n\t\t\tDebug.Assert(applicationContext != null && realAssembly != null && properties != null);\r\n\t\t\t\r\n\t\t\tthis.properties = properties;\r\n\r\n\t\t\tif (properties.IsPure)\r\n#if SILVERLIGHT\r\n\t\t\t\tthrow new NotSupportedException(\"Loading of pure PHP Libraries on Silverlight is not supported!\");\r\n#else\r\n\t\t\t\tthis.module = new PureModule(this);\r\n#endif\r\n\t\t\telse\r\n\t\t\t\tthis.module = new PhpLibraryModule(this);\r\n\r\n\t\t\tif (!applicationContext.AssemblyLoader.ReflectionOnly)\r\n\t\t\t{\r\n\t\t\t\t// creates an instance of library descriptor:\r\n\t\t\t\tif (properties.Descriptor != null)\r\n\t\t\t\t\tdescriptor = PhpLibraryDescriptor.CreateInstance(properties.Descriptor);\r\n\t\t\t\telse\r\n\t\t\t\t\tdescriptor = new DefaultLibraryDescriptor();\r\n\r\n\t\t\t\tdescriptor.WriteUp(module, uniqueIndex++);\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// notify descriptor that it has been initialized:\r\n\t\t\t\t\tdescriptor.Loaded(properties, configStore);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception e)\r\n\t\t\t\t{\r\n\t\t\t\t\tuniqueIndex--;\r\n\t\t\t\t\tdescriptor.Invalidate();\r\n\r\n\t\t\t\t\tthrow new LibraryLoadFailedException(realAssembly.FullName, e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tdescriptor = null;\r\n\t\t\t}\t\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownAssembly\r\n\r\n\tpublic sealed class UnknownAssembly : DAssembly\r\n\t{\r\n\t\tpublic static readonly UnknownAssembly RuntimeAssembly = new UnknownAssembly();\r\n\t\tpublic override string/*!*/ DisplayName { get { return String.Empty; } }\r\n\r\n\t\tpublic UnknownAssembly()\r\n\t\t\t: base(ApplicationContext.Empty)\r\n\t\t{\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/CompilationUnits.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.IO;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region CompilationUnit\r\n\r\n\t/// <summary>\r\n\t/// Base class for standard PHP script compilation unit\r\n\t/// </summary>\r\n\tpublic abstract class CompilationUnit : CompilationUnitBase\r\n\t{\r\n\t\t#region Constructor\r\n\r\n\t\tpublic CompilationUnit()\r\n\t\t{\r\n\t\t\t// nop\r\n\t\t}\r\n\r\n\t\tpublic CompilationUnit(PhpModule/*!*/ module)\r\n\t\t\t: base(module)\r\n\t\t{\r\n\t\t\t// nop\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region State\r\n\r\n\t\tpublic enum States\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Compilation unit has just been created.\r\n\t\t\t/// </summary>\r\n\t\t\tInitial,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// There is an error in the unit.\r\n\t\t\t/// </summary>\r\n\t\t\tErroneous,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Source files of the unit have been parsed and the AST is available.\r\n\t\t\t/// </summary>\r\n\t\t\tParsed,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Tables needn't to be complete (the node may be involved in MPF).\r\n\t\t\t/// </summary>\r\n\t\t\tProcessed,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The unit has been compiled, AST is not available any more, tables are.\r\n\t\t\t/// </summary>\r\n\t\t\tCompiled,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The unit has been reflected, AST is not available, tables are.\r\n\t\t\t/// </summary>\r\n\t\t\tReflected,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Pre-analysis performed.\r\n\t\t\t/// </summary>\r\n\t\t\tPreAnalyzed,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Member analysis performed.\r\n\t\t\t/// </summary>\r\n\t\t\tMembersAnalyzed,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Full analysis performed.\r\n\t\t\t/// </summary>\r\n\t\t\tAnalyzed,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Builders defined.\r\n\t\t\t/// </summary>\r\n\t\t\tBuildersDefined,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// AST emitted.\r\n\t\t\t/// </summary>\r\n\t\t\tEmitted\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsPure { get { return false; } }\r\n\t\tpublic override bool IsTransient { get { return false; } }\r\n\r\n\t\tpublic States State { get { return state; } internal /* InclusionGraphBuilder */ set { state = value; } }\r\n\t\tprotected States state;\r\n\r\n\t\tpublic List<StaticInclusion>/*!*/ Inclusions { get { return inclusions; } }\r\n\t\tprotected readonly List<StaticInclusion>/*!*/ inclusions = new List<StaticInclusion>();\r\n\r\n\t\tpublic List<StaticInclusion>/*!*/ Includers { get { return includers; } }\r\n\t\tprotected readonly List<StaticInclusion>/*!*/ includers = new List<StaticInclusion>();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Clean-up\r\n\r\n\t\tpublic abstract void CleanUp(CompilationContext/*!*/ context, bool successful);\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Referenced by compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source file path to be used when emiting inclusion.\r\n\t\t/// </summary>\r\n\t\tpublic abstract string RelativeSourcePath { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// System.Type of the main module class\r\n\t\t/// </summary>\r\n\t\tpublic abstract Type ScriptClassType { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// MethodInfo of the main module 'Main' method\r\n\t\t/// </summary>\r\n\t\tpublic abstract MethodInfo MainHelper { get; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Abstract methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflect types, functions and constants in compilation unit\r\n\t\t/// </summary>\r\n\t\tpublic abstract void Reflect();\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging type tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared types</returns>\r\n\t\tpublic abstract IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DType>>> GetVisibleTypes();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging function tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared functions</returns>\r\n\t\tpublic abstract IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DRoutine>>> GetVisibleFunctions();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging constant tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared constants</returns>\r\n\t\tpublic abstract IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DConstant>>> GetVisibleConstants();\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ReflectedCompilationUnit\r\n\r\n\t/// <summary>\r\n\t/// This compilation unit is used while reflecting compiled SSA or MSA assembly.\r\n\t/// </summary>\r\n\tpublic sealed class ReflectedCompilationUnit : CompilationUnit\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by reflection.\r\n\t\t/// </summary>\r\n\t\tpublic ReflectedCompilationUnit(ScriptModule/*!*/ module)\r\n\t\t\t: base(module)\r\n\t\t{\r\n\t\t\tDebug.Assert(module != null);\r\n\r\n\t\t\tthis.state = States.Compiled;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields\r\n\r\n\t\t// filled by reflect method\r\n        private string relativePath;\r\n\t\tprivate Type scriptClassType;\r\n\t\tprivate MethodInfo mainHelper;\r\n\r\n\t\tprivate Dictionary<QualifiedName, DRoutine> functions;\r\n\t\tprivate Dictionary<QualifiedName, DType> types;\r\n\t\tprivate Dictionary<QualifiedName, DConstant> constants;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Declaration Look-up\r\n\r\n\t\tpublic override DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\tDebug.Assert(functions != null);\r\n\r\n\t\t\tDRoutine ret;\r\n\t\t\tif (functions.TryGetValue(qualifiedName, out ret)) return ret;\r\n\r\n\t\t\t// this won't be used because tables are merged\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\tpublic override DType GetVisibleType(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope,\r\n\t\t\tbool mustResolve)\r\n\t\t{\r\n\t\t\tDebug.Assert(types != null);\r\n\r\n\t\t\tDType ret;\r\n\t\t\tif (types.TryGetValue(qualifiedName, out ret)) return ret;\r\n\r\n\t\t\t// this won't be used because tables are merged\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\tpublic override DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\tDebug.Assert(constants != null);\r\n\r\n\t\t\tDConstant ret;\r\n\t\t\tif (constants.TryGetValue(qualifiedName, out ret)) return ret;\r\n\r\n\t\t\t// this won't be used because tables are merged\r\n\t\t\tthrow new NotImplementedException();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging type tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared types</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DType>>> GetVisibleTypes()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<QualifiedName, DType> it in types)\r\n\t\t\t\tyield return new KeyValuePair<QualifiedName, ScopedDeclaration<DType>>(\r\n\t\t\t\t\tit.Key, new ReflectedScopedDeclaration<DType>(Scope.Global, it.Value));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging function tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared functions</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DRoutine>>> GetVisibleFunctions()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<QualifiedName, DRoutine> it in functions)\r\n\t\t\t\tyield return new KeyValuePair<QualifiedName, ScopedDeclaration<DRoutine>>(\r\n\t\t\t\t\tit.Key, new ReflectedScopedDeclaration<DRoutine>(Scope.Global, it.Value));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging constant tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared constants</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DConstant>>> GetVisibleConstants()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<QualifiedName, DConstant> it in constants)\r\n\t\t\t\tyield return new KeyValuePair<QualifiedName, ScopedDeclaration<DConstant>>(\r\n\t\t\t\t\tit.Key, new ReflectedScopedDeclaration<DConstant>(Scope.Global, it.Value));\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns declared types - in reflected unit we don't return anything\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<PhpType>/*!*/ GetDeclaredTypes()\r\n\t\t{\r\n\t\t\tyield break;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns declared functions - in reflected unit we don't return anything\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<PhpFunction>/*!*/ GetDeclaredFunctions()\r\n\t\t{\r\n\t\t\tyield break;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns declared constants - in reflected unit we don't return anything\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<GlobalConstant>/*!*/ GetDeclaredConstants()\r\n\t\t{\r\n\t\t\tyield break;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\t/// <summary>\r\n\t\t/// Perform reflection on the compiled assembly\r\n\t\t/// </summary>\r\n\t\tpublic override void Reflect()\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.Compiled);\r\n\r\n\t\t\t// temporary dictionaries\r\n\t\t\tDictionary<string, DTypeDesc> typesTmp = new Dictionary<string, DTypeDesc>();\r\n\t\t\tDictionary<string, DRoutineDesc> functionsTmp = new Dictionary<string, DRoutineDesc>();\r\n\t\t\tDualDictionary<string, DConstantDesc> constantsTmp = new DualDictionary<string, DConstantDesc>\r\n\t\t\t\t(null, StringComparer.OrdinalIgnoreCase);\r\n\r\n\t\t\t// call reflect method of the module (and its includees)\r\n\t\t\tScriptModule scriptModule = (ScriptModule)module;\r\n\t\t\tscriptModule.Reflect(false, typesTmp, functionsTmp, constantsTmp);\r\n\r\n\t\t\t// build local dictionaries\r\n\t\t\tfunctions = new Dictionary<QualifiedName, DRoutine>();\r\n\t\t\ttypes = new Dictionary<QualifiedName, DType>();\r\n            constants = new Dictionary<QualifiedName, DConstant>(ConstantQualifiedNameComparer.Singleton);\r\n\r\n\t\t\t// get the <Script> class\r\n\t\t\tscriptClassType = scriptModule.ScriptType;\r\n\t\t\tif (scriptClassType == null)\r\n\t\t\t\tthrow new ReflectionException(\"The compiled assembly doesn't contain main script class!\");\r\n\r\n\t\t\tScriptAttribute sa = ScriptAttribute.Reflect(scriptClassType);\r\n            if (sa != null)\r\n            {\r\n                relativePath = sa.RelativePath;\r\n            }\r\n            else\r\n            {\r\n                // TODO: this needs to be revised after script library DLLs are somewhat united with SSA's and WebPages.dll\r\n                //       (i.e. after all have ScriptAttribute)\r\n                relativePath = ((ScriptModule)module).RelativeSourcePath;\r\n\r\n                if (relativePath == null)\r\n                {\r\n                    throw new ReflectionException(\"Script in the compiled assembly doesn't contain ScriptAttribute!\");\r\n                }\r\n            }\r\n\r\n\t\t\tmainHelper = scriptModule.MainHelper;\r\n\r\n\t\t\tforeach (KeyValuePair<string, DTypeDesc> val in typesTmp)\r\n                types.Add(ClrNotationUtils.FromClrNotation(val.Value.RealType), val.Value.Type);   // TODO: parse the val.Key\r\n\t\t\tforeach (KeyValuePair<string, DConstantDesc> val in constantsTmp)\r\n                constants.Add(ClrNotationUtils.FromClrNotation(val.Key, true), val.Value.GlobalConstant);// TODO: parse the val.Key\r\n\t\t\tforeach (KeyValuePair<string, DRoutineDesc> val in functionsTmp)\r\n                functions.Add(ClrNotationUtils.FromClrNotation(val.Key, true), val.Value.Routine);// TODO: parse the val.Key\r\n\r\n\t\t\tstate = States.Reflected;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Clean-up\r\n\r\n\t\tpublic override void CleanUp(CompilationContext/*!*/ context, bool successful)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Referenced by compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source file path to be used when emiting inclusion\r\n\t\t/// </summary>\r\n\t\tpublic override string RelativeSourcePath\r\n\t\t{\r\n\t\t\tget { return relativePath; }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// System.Type of the main module class\r\n\t\t/// </summary>\r\n\t\tpublic override Type ScriptClassType\r\n\t\t{\r\n\t\t\tget { return scriptClassType; }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// MethodInfo of the main module 'Main' method\r\n\t\t/// </summary>\r\n\t\tpublic override MethodInfo MainHelper\r\n\t\t{\r\n\t\t\tget { return mainHelper; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PureCompilationUnit\r\n\r\n\t/// <summary>\r\n\t/// Pure units: \r\n\t/// no inclusions, \r\n\t/// no global code except top-level statements (function decl, class decl, namespace decl, global constant decl)\r\n\t/// </summary>\r\n\tpublic sealed class PureCompilationUnit : CompilationUnitBase, IReductionsSink\r\n\t{\r\n\t\tpublic override bool IsPure { get { return true; } }\r\n\t\tpublic override bool IsTransient { get { return false; } }\r\n\r\n\t\tpublic PureModule PureModule { get { return (PureModule)module; } }\r\n\r\n\t\tprivate Dictionary<QualifiedName, Declaration> types = null;\r\n\t\tprivate Dictionary<QualifiedName, Declaration> functions = null;\r\n\t\tprivate Dictionary<QualifiedName, Declaration> constants = null;\r\n\r\n\t\tpublic PhpRoutine EntryPoint { get { return entryPoint; } }\r\n\t\tprivate PhpRoutine entryPoint;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the unit is only parsed, not compiled.\r\n\t\t/// </summary>\r\n\t\tprivate bool parsingOnly;\r\n\r\n\t\t/// <summary>\r\n\t\t/// For parsed-only units, skips errors related to purity violations.\r\n\t\t/// </summary>\r\n\t\tprivate bool relaxPurity;\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic PureCompilationUnit(bool parsingOnly, bool relaxPurity)\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.parsingOnly = parsingOnly;\r\n\r\n\t\t\tif (parsingOnly)\r\n\t\t\t{\r\n\t\t\t\tPureAssembly a = new PureAssembly(ApplicationContext.Default);\r\n\t\t\t\tthis.module = a.Module = new PureModule(a);\r\n\t\t\t\tthis.relaxPurity = relaxPurity;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (relaxPurity) throw new InvalidOperationException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Declarations: look-up and enumeration\r\n\r\n\t\tpublic override DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\t// scope is ignored here\r\n\r\n\t\t\tDeclaration result;\r\n\t\t\tif (functions.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (PhpFunction)result.Declaree;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetFunction(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\tpublic override DType GetVisibleType(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope,\r\n\t\t\tbool mustResolve)\r\n\t\t{\r\n\t\t\t// scope is ignored here\r\n\r\n\t\t\tDeclaration result;\r\n\t\t\tif (types.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (PhpType)result.Declaree;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetType(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\tpublic override DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\t// scope is ignored here\r\n\r\n\t\t\tDeclaration result;\r\n\t\t\tif (constants.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (GlobalConstant)result.Declaree;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetConstant(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<PhpType>/*!*/ GetDeclaredTypes()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<PhpType>(types.Values);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<PhpFunction>/*!*/ GetDeclaredFunctions()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<PhpFunction>(functions.Values);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<GlobalConstant>/*!*/ GetDeclaredConstants()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<GlobalConstant>(constants.Values);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parsing\r\n\r\n\t\tpublic S[] ParseSourceFiles<S>(IEnumerable<S>/*!*/ sourceUnits, ErrorSink/*!*/ errors,\r\n\t\t\tLanguageFeatures languageFeatures)\r\n\t\t\twhere S : SourceUnit\r\n\t\t{\r\n\t\t\tif (sourceUnits == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"sourceFiles\");\r\n\t\t\tif (errors == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"errors\");\r\n\r\n\t\t\tfunctions = new Dictionary<QualifiedName, Declaration>();\r\n\t\t\ttypes = new Dictionary<QualifiedName, Declaration>();\r\n\t\t\tconstants = new Dictionary<QualifiedName, Declaration>();\r\n\r\n\t\t\tDictionary<PhpSourceFile, S> files = new Dictionary<PhpSourceFile, S>();\r\n\r\n\t\t\tbool success = true;\r\n\t\t\tforeach (S source_unit in sourceUnits)\r\n\t\t\t{\r\n\t\t\t\tPhpSourceFile source_file = source_unit.SourceFile;\r\n\r\n\t\t\t\tif (!files.ContainsKey(source_file))\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsource_unit.Parse(errors, this, languageFeatures);\r\n\t\t\t\t\t\tfiles[source_file] = source_unit;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (CompilerException)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfiles[source_file] = null;\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfinally\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// do not close opened source units now as their source might be used later by analyzer\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!success)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tS[] result = new S[files.Count];\r\n\t\t\tfiles.Values.CopyTo(result, 0);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal void SetEntryPoint(PhpRoutine/*!*/ routine)\r\n\t\t{\r\n\t\t\tDebug.Assert(entryPoint == null);\r\n\t\t\tentryPoint = routine;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Compilation\r\n\r\n\t\tprivate IEnumerable<SourceFileUnit>/*!*/ GenerateSourceFileUnits(IEnumerable<PhpSourceFile>/*!*/ sourceFiles,\r\n\t\t\tEncoding/*!*/ encoding)\r\n\t\t{\r\n\t\t\tforeach (PhpSourceFile source_file in sourceFiles)\r\n\t\t\t\tyield return new SourceFileUnit(this, source_file, encoding);\r\n\t\t}\r\n\r\n\t\tpublic bool Compile(IEnumerable<PhpSourceFile>/*!*/ sourceFiles, PureAssemblyBuilder/*!*/ assemblyBuilder,\r\n\t\t\tCompilationContext/*!*/ context, Encoding/*!*/ encoding)\r\n\t\t{\r\n\t\t\tif (parsingOnly)\r\n\t\t\t\tthrow new InvalidOperationException();\r\n\r\n\t\t\tDebug.Assert(sourceFiles != null && assemblyBuilder != null && context != null && encoding != null);\r\n\r\n\t\t\tPureModuleBuilder module_builder = assemblyBuilder.DefineModule(this);\r\n\t\t\tthis.module = module_builder;\r\n\r\n\t\t\tPureAssemblyBuilder assembly_builder = module_builder.PureAssemblyBuilder;\r\n\r\n\t\t\tAnalyzer analyzer = null;\r\n\t\t\tSourceFileUnit[] source_units = null;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// parse all files:\r\n\r\n\t\t\t\tsource_units = ParseSourceFiles(GenerateSourceFileUnits(sourceFiles, encoding), context.Errors,\r\n\t\t\t\t\tcontext.Config.Compiler.LanguageFeatures);\r\n\r\n\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\tDebug.Assert(source_units != null);\r\n\r\n\t\t\t\tanalyzer = new Analyzer(context);\r\n\r\n\t\t\t\t// perform pre-analysis on types and functions:\r\n\r\n\t\t\t\tanalyzer.PreAnalyze(types.Values);\r\n\t\t\t\tanalyzer.PreAnalyze(functions.Values);\r\n\r\n\t\t\t\t// perform member analysis on types and functions:\r\n\r\n\t\t\t\tanalyzer.AnalyzeMembers(types.Values);\r\n\t\t\t\tanalyzer.AnalyzeMembers(functions.Values);\r\n\r\n\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t// perform full analysis:\r\n\r\n\t\t\t\tforeach (var source_unit in source_units)\r\n\t\t\t\t\tanalyzer.Analyze(source_unit);\r\n\r\n\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t// perform post analysis:\r\n\t\t\t\tanalyzer.PostAnalyze();\r\n\r\n\t\t\t\t// check entry point presence:\r\n\t\t\t\tif (assembly_builder.IsExecutable && entryPoint == null)\r\n\t\t\t\t\tcontext.Errors.Add(Errors.MissingEntryPoint, null, Text.Span.Invalid, PureAssembly.EntryPointName);\r\n\t\t\t}\r\n\t\t\tcatch (CompilerException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\t// close opened streams (analyzer may need to read the source code due to conditional class declarations):\r\n\t\t\t\tif (source_units != null)\r\n\t\t\t\t{\r\n                    foreach (var source_unit in source_units)\r\n\t\t\t\t\t\tsource_unit.Close();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// do not emit anything if there was parse/analysis error:\r\n\t\t\tif (context.Errors.AnyError) return false;\r\n\r\n\t\t\tDefineBuilders();\r\n\r\n\t\t\t// define constructed types:\r\n\t\t\tanalyzer.DefineConstructedTypeBuilders();\r\n\r\n\t\t\tCodeGenerator cg = new CodeGenerator(context);\r\n\r\n            foreach (var source_unit in source_units)\r\n\t\t\t{\r\n\t\t\t\tsource_unit.Emit(cg);\r\n\t\t\t}\r\n\r\n\t\t\tBake();\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate void DefineBuilders()\r\n\t\t{\r\n            foreach (Declaration declaration in types.Values)\r\n\t\t\t{\r\n                ((PhpType)declaration.Declaree).DefineBuilders();\r\n\t\t\t}\r\n\r\n            foreach (Declaration declaration in types.Values)\r\n            {\r\n                var phptype = (PhpType)declaration.Declaree;\r\n                if (phptype.IsExported)\r\n                    PhpObjectBuilder.DefineExportedConstructors(phptype);\r\n            }\r\n\r\n\t\t\tforeach (Declaration declaration in functions.Values)\r\n\t\t\t{\r\n\t\t\t\t((PhpFunction)declaration.Declaree).DefineBuilders();\r\n\t\t\t}\r\n\r\n\t\t\tforeach (Declaration declaration in constants.Values)\r\n\t\t\t{\r\n\t\t\t\t((GlobalConstant)declaration.Declaree).DefineBuilders();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void Bake()\r\n\t\t{\r\n\t\t\tforeach (Declaration declaration in types.Values)\r\n\t\t\t{\r\n\t\t\t\t((PhpType)declaration.Declaree).Bake();\r\n\t\t\t}\r\n\r\n\t\t\tforeach (Declaration declaration in functions.Values)\r\n\t\t\t{\r\n\t\t\t\t((PhpFunction)declaration.Declaree).Bake();\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: constants:\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IReductionsSink Members\r\n\r\n\t\tpublic void InclusionReduced(Parser/*!*/ parser, AST.IncludingEx/*!*/ node)\r\n\t\t{\r\n\t\t\tif (!relaxPurity)\r\n\t\t\t\tparser.ErrorSink.Add(Errors.InclusionInPureUnit, parser.SourceUnit, node.Span);\r\n\t\t}\r\n\r\n\t\tpublic void FunctionDeclarationReduced(Parser/*!*/ parser, AST.FunctionDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tAddDeclaration(parser.ErrorSink, node.GetFunction(), functions);\r\n\t\t}\r\n\r\n\t\tpublic void TypeDeclarationReduced(Parser/*!*/ parser, AST.TypeDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tAddDeclaration(parser.ErrorSink, node.Type(), types);\r\n\t\t}\r\n\r\n\t\tpublic void GlobalConstantDeclarationReduced(Parser/*!*/ parser, AST.GlobalConstantDecl/*!*/ node)\r\n\t\t{\r\n            AddDeclaration(parser.ErrorSink, node.GetGlobalConstant(), constants);\r\n\t\t}\r\n\r\n        public void NamespaceDeclReduced(Parser parser, AST.NamespaceDecl decl)\r\n        {\r\n        }\r\n\r\n        public void LambdaFunctionReduced(Parser parser, AST.LambdaFunctionExpr decl)\r\n        {\r\n        }\r\n\r\n\t\tprivate void AddDeclaration(ErrorSink/*!*/ errors, IDeclaree/*!*/ member, Dictionary<QualifiedName, Declaration>/*!*/ table)\r\n\t\t{\r\n\t\t\tDeclaration existing;\r\n\t\t\tDeclaration current = member.Declaration;\r\n\r\n\t\t\tif (table.TryGetValue(member.QualifiedName, out existing))\r\n\t\t\t{\r\n\t\t\t\tif (CheckDeclaration(errors, member, existing))\r\n\t\t\t\t\tAddVersionToGroup(current, existing);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (current.IsConditional)\r\n\t\t\t\t\tmember.Version = new VersionInfo(1, null);\r\n\r\n\t\t\t\t// add a new declaration to the table:\r\n\t\t\t\ttable.Add(member.QualifiedName, current);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptCompilationUnit\r\n\r\n\t/// <summary>\r\n\t/// This compilation unit is used while compiling PHP script\r\n\t/// </summary>\r\n\tpublic sealed class ScriptCompilationUnit : CompilationUnit, IReductionsSink\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic ScriptModule ScriptModule { get { return (ScriptModule)module; } }\r\n\t\tpublic ScriptBuilder ScriptBuilder { get { return (ScriptBuilder)module; } }\r\n\r\n\t\tprivate readonly Dictionary<QualifiedName, ScopedDeclaration<DType>>/*!*/ visibleTypes =\r\n\t\t\tnew Dictionary<QualifiedName, ScopedDeclaration<DType>>();\r\n\t\tprivate readonly Dictionary<QualifiedName, ScopedDeclaration<DRoutine>>/*!*/ visibleFunctions =\r\n\t\t\tnew Dictionary<QualifiedName, ScopedDeclaration<DRoutine>>();\r\n\t\tprivate readonly Dictionary<QualifiedName, ScopedDeclaration<DConstant>>/*!*/ visibleConstants =\r\n            new Dictionary<QualifiedName, ScopedDeclaration<DConstant>>(ConstantQualifiedNameComparer.Singleton);\r\n\r\n\t\tprivate Scope currentScope = new Scope(0);\r\n\r\n\t\tpublic List<AST.IncludingEx> InclusionExpressions { get { return inclusionExpressions; } }\r\n\t\tprivate List<AST.IncludingEx> inclusionExpressions = new List<AST.IncludingEx>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source unit or <B>null</B> for reflected units.\r\n\t\t/// </summary>\r\n        public CompilationSourceUnit SourceUnit { get { return sourceUnit; } set { sourceUnit = value; } }\r\n        private CompilationSourceUnit sourceUnit;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptCompilationUnit()\r\n\t\t{\r\n\t\t\tthis.state = States.Initial;\r\n\t\t\tthis.sourceUnit = null;       // to be set explicitly\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Declaration Look-up\r\n\r\n\t\t/// <summary>\r\n\t\t/// Search for a declaration by its qualified name\r\n\t\t/// </summary>\r\n\t\tpublic override DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\tScopedDeclaration<DRoutine> decl;\r\n\r\n\t\t\tif (visibleFunctions.TryGetValue(qualifiedName, out decl) && decl.Scope.Start <= currentScope.Start)\r\n\t\t\t\treturn decl.Member;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetFunction(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Search for a declaration by its qualified name\r\n\t\t/// </summary>\r\n\t\tpublic override DType GetVisibleType(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope,\r\n\t\t\tbool mustResolve)\r\n\t\t{\r\n\t\t\tScopedDeclaration<DType> decl;\r\n\t\t\tif (visibleTypes.TryGetValue(qualifiedName, out decl) && decl.Scope.Start <= currentScope.Start)\r\n\t\t\t\treturn decl.Member;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetType(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Search for a declaration by its qualified name\r\n\t\t/// </summary>\r\n\t\tpublic override DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\tScopedDeclaration<DConstant> decl;\r\n\t\t\tif (visibleConstants.TryGetValue(qualifiedName, out decl) && decl.Scope.Start <= currentScope.Start)\r\n\t\t\t\treturn decl.Member;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetConstant(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging type tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared types</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DType>>> GetVisibleTypes()\r\n\t\t{\r\n\t\t\treturn visibleTypes;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging function tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared functions</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DRoutine>>> GetVisibleFunctions()\r\n\t\t{\r\n\t\t\treturn visibleFunctions;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for merging constant tables (in ScriptCompilationUnit)\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns all reflected or declared constants</returns>\r\n\t\tpublic override IEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<DConstant>>> GetVisibleConstants()\r\n\t\t{\r\n\t\t\treturn visibleConstants;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Return only declared types that should be emited while compiling\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<PhpType>/*!*/ GetDeclaredTypes()\r\n\t\t{\r\n\t\t\treturn DeclaredOnly<PhpType, DType>(visibleTypes.Values);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Return only declared functions that should be emited while compiling\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<PhpFunction>/*!*/ GetDeclaredFunctions()\r\n\t\t{\r\n\t\t\treturn DeclaredOnly<PhpFunction, DRoutine>(visibleFunctions.Values);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Return only declared constants that should be emited while compiling\r\n\t\t/// </summary>\r\n\t\tpublic override IEnumerable<GlobalConstant>/*!*/ GetDeclaredConstants()\r\n\t\t{\r\n\t\t\treturn DeclaredOnly<GlobalConstant, DConstant>(visibleConstants.Values);\r\n\t\t}\r\n\r\n\t\tinternal IEnumerable<Declaration>/*!*/ DeclaredOnly<TCol>(IEnumerable<ScopedDeclaration<TCol>>/*!*/ table)\r\n\t\t\twhere TCol : DMember\r\n\t\t{\r\n\t\t\tforeach (ScopedDeclaration<TCol> decl in table)\r\n\t\t\t{\r\n\t\t\t\tKnownScopedDeclaration<TCol> known = decl as KnownScopedDeclaration<TCol>;\r\n\t\t\t\tif (known == null) continue;\r\n\r\n\t\t\t\tif (ReferenceEquals(known.Declaration.SourceUnit.CompilationUnit, this))\r\n\t\t\t\t\tyield return known.Declaration;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal IEnumerable<T>/*!*/ DeclaredOnly<T, TCol>(IEnumerable<ScopedDeclaration<TCol>>/*!*/ table)\r\n\t\t\twhere T : IDeclaree, TCol\r\n\t\t\twhere TCol : DMember\r\n\t\t{\r\n\t\t\tforeach (ScopedDeclaration<TCol> decl in table)\r\n\t\t\t{\r\n\t\t\t\tKnownScopedDeclaration<TCol> known = decl as KnownScopedDeclaration<TCol>;\r\n\t\t\t\tif (known == null) continue;\r\n\r\n\t\t\t\tif (ReferenceEquals(known.Declaration.SourceUnit.CompilationUnit, this))\r\n\t\t\t\t\tyield return (T)known.Member;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Parsing\r\n\r\n\t\tinternal void Parse(CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.Initial);\r\n\t\t\tDebug.Assert(context != null);\r\n\r\n\t\t\tcontext.Manager.Info(sourceUnit.SourceFile, context);\r\n\r\n\t\t\t// prepended and appended inclusions (TODO: do this better, the included compilation units can be prepared)\r\n\t\t\tAST.IncludingEx prepend = null, append = null;\r\n\r\n\t\t\t// prepend inclusion:\r\n#if !SILVERLIGHT\r\n\t\t\tif (context.Config.Compiler.PrependFile != null)\r\n\t\t\t{\r\n                prepend = new AST.IncludingEx(sourceUnit, new Scope(1), false, Text.Span.FromBounds(0, 0), InclusionTypes.Prepended,\r\n                    new AST.StringLiteral(Text.Span.FromBounds(0, 0), context.Config.Compiler.PrependFile));\r\n\r\n\t\t\t\tinclusionExpressions.Add(prepend);\r\n\t\t\t}\r\n#endif\r\n\r\n\t\t\t// parse:\r\n\r\n\t\t\tthis.module = (PhpModule)context.Manager.DefineModuleBuilder(this, context);\r\n\r\n\t\t\tParseSourceFile(this.sourceUnit, context.Errors, context.Config.Compiler.LanguageFeatures);\r\n\r\n            if (context.Errors.AnyFatalError)\r\n            {\r\n                this.state = States.Erroneous;\r\n                throw new CompilerException();\r\n            }\r\n\r\n\t\t\t// append inclusion:\r\n#if !SILVERLIGHT\r\n\t\t\tif (context.Config.Compiler.AppendFile != null)\r\n\t\t\t{\r\n                append = new AST.IncludingEx(sourceUnit, new Scope(Int32.MaxValue), false, Text.Span.FromBounds(0, 0), InclusionTypes.Appended,\r\n                    new AST.StringLiteral(Text.Span.FromBounds(0, 0), context.Config.Compiler.AppendFile));\r\n\r\n\t\t\t\tinclusionExpressions.Add(append);\r\n\t\t\t}\r\n#endif\r\n            var astcompiler = sourceUnit.Ast.NodeCompiler<IGlobalCodeCompiler>();\r\n            astcompiler.PrependedInclusion = prepend;\r\n            astcompiler.AppendedInclusion = append;\r\n\r\n\t\t\tthis.state = States.Parsed;\r\n\t\t}\r\n\r\n\t\tpublic bool ParseSourceFile(SourceUnit/*!*/ sourceUnit, ErrorSink/*!*/ errors, LanguageFeatures languageFeatures)\r\n\t\t{\r\n\t\t\tif (sourceUnit == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"sourceUnit\");\r\n\r\n\t\t\tif (errors == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"errors\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tsourceUnit.Parse(errors, this, languageFeatures);\r\n\t\t\t}\r\n\t\t\tcatch (CompilerException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Table Population\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges the content of all tables.\r\n\t\t/// Returns the number of added items.\r\n\t\t/// </summary>\r\n\t\tinternal int MergeTables(StaticInclusion/*!*/ inclusion)\r\n\t\t{\r\n\t\t\t// skip conditional inclusions (TODO):\r\n\t\t\tif (inclusion.IsConditional) return 0;\r\n\r\n\t\t\t// \r\n\t\t\tCompilationUnit cu = inclusion.Includee;\r\n\t\t\treturn\r\n\t\t\t\tMergeTable<DRoutine>(inclusion, visibleFunctions, cu.GetVisibleFunctions()) +\r\n\t\t\t\tMergeTable<DType>(inclusion, visibleTypes, cu.GetVisibleTypes()) +\r\n\t\t\t\tMergeTable<DConstant>(inclusion, visibleConstants, cu.GetVisibleConstants());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges the content of specified tables.\r\n\t\t/// Returns the number of added items.\r\n\t\t/// </summary>\r\n\t\tprivate static int MergeTable<T>(StaticInclusion/*!*/ inclusion,\r\n\t\t\tDictionary<QualifiedName, ScopedDeclaration<T>> dstTable,\r\n\t\t\tIEnumerable<KeyValuePair<QualifiedName, ScopedDeclaration<T>>> srcTable)\r\n\t\t\twhere T : DMember\r\n\t\t{\r\n\t\t\tint added_count = 0;\r\n\r\n            Dictionary<QualifiedName, ScopedDeclaration<T>> dstTableOverwrites = null;\r\n\r\n\t\t\tforeach (KeyValuePair<QualifiedName, ScopedDeclaration<T>> entry in srcTable)\r\n\t\t\t{\r\n\t\t\t\tScopedDeclaration<T> existing;\r\n\r\n\t\t\t\t// treat all inclusions like once-inclusions (TODO):\r\n\t\t\t\tif (!dstTable.TryGetValue(entry.Key, out existing))\r\n\t\t\t\t{\r\n\t\t\t\t\t// add the declaration to the includer with the scope of the inclusion:\r\n\t\t\t\t\tdstTable.Add(entry.Key, entry.Value.CloneWithScope(inclusion.Scope));\r\n\t\t\t\t\tadded_count++;\r\n\t\t\t\t}\r\n                else if (existing.Scope.Start > inclusion.Scope.Start && inclusion.Scope.IsValid)  // better Scope level?\r\n                {\r\n                    if (existing.Member == entry.Value.Member ||                    // mostly DMember is the same reference, just in different Scope level\r\n                        !entry.Value.Member.IsUnknown || existing.Member.IsUnknown) // otherwise, we don't want to overwrite a Known member with an Unknown!\r\n                    {\r\n                        // overwrite the existing declaration with better inclusion scope:\r\n                        if (dstTableOverwrites == null)\r\n                            dstTableOverwrites = new Dictionary<QualifiedName, ScopedDeclaration<T>>();\r\n                        dstTableOverwrites[entry.Key] = entry.Value.CloneWithScope(inclusion.Scope);\r\n                    }\r\n                }\r\n\t\t\t}\r\n\r\n            // merge overwrites into dstTable // to avoid changing of enumerated collection above\r\n            if (dstTableOverwrites != null)\r\n                foreach (var entry in dstTableOverwrites)\r\n                    dstTable[entry.Key] = entry.Value;\r\n\r\n            //\r\n\t\t\treturn added_count;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tinternal void PreAnalyzeRecursively(Analyzer/*!*/ analyzer)\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.Processed);\r\n\r\n\t\t\t// TODO: declared only\r\n\t\t\tanalyzer.PreAnalyze(DeclaredOnly<DType>(visibleTypes.Values));\r\n\t\t\tanalyzer.PreAnalyze(DeclaredOnly<DRoutine>(visibleFunctions.Values));\r\n\r\n\t\t\tstate = States.PreAnalyzed;\r\n\r\n\t\t\tforeach (StaticInclusion inclusion in inclusions)\r\n\t\t\t{\r\n\t\t\t\tScriptCompilationUnit s = inclusion.Includee as ScriptCompilationUnit;\r\n\t\t\t\tif (s == null) continue;\r\n\t\t\t\tif (s.State == States.Processed) s.PreAnalyzeRecursively(analyzer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void AnalyzeMembersRecursively(Analyzer/*!*/ analyzer)\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.PreAnalyzed);\r\n\r\n\t\t\t// TODO: declared only\r\n\t\t\tanalyzer.AnalyzeMembers(DeclaredOnly<DType>(visibleTypes.Values));\r\n\t\t\tanalyzer.AnalyzeMembers(DeclaredOnly<DRoutine>(visibleFunctions.Values));\r\n\r\n\t\t\tstate = States.MembersAnalyzed;\r\n\r\n\t\t\tforeach (StaticInclusion inclusion in inclusions)\r\n\t\t\t{\r\n\t\t\t\tScriptCompilationUnit s = inclusion.Includee as ScriptCompilationUnit;\r\n\t\t\t\tif (s == null) continue;\r\n\t\t\t\tif (s.State == States.PreAnalyzed) s.AnalyzeMembersRecursively(analyzer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void AnalyzeRecursively(Analyzer/*!*/ analyzer)\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.MembersAnalyzed);\r\n\t\t\tDebug.Assert(sourceUnit != null);\r\n\r\n\t\t\tanalyzer.Analyze(sourceUnit);\r\n\r\n\t\t\t// source stream is not needed any more:\r\n\t\t\tsourceUnit.Close();\r\n\r\n\t\t\tstate = States.Analyzed;\r\n\r\n\t\t\tforeach (StaticInclusion inclusion in inclusions)\r\n\t\t\t{\r\n\t\t\t\tScriptCompilationUnit s = inclusion.Includee as ScriptCompilationUnit;\r\n\t\t\t\tif (s == null) continue;\r\n\t\t\t\tif (s.State == States.MembersAnalyzed) s.AnalyzeRecursively(analyzer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal void DefineBuilders(CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\t// TODO: optimize - go thru declared only (list to the ScopedDeclaration?)\r\n\r\n\t\t\tforeach (PhpType type in DeclaredOnly<PhpType, DType>(visibleTypes.Values))\r\n\t\t\t\ttype.DefineBuilders();\r\n\r\n\t\t\tforeach (PhpFunction function in DeclaredOnly<PhpFunction, DRoutine>(visibleFunctions.Values))\r\n\t\t\t\tfunction.DefineBuilders();\r\n\r\n\t\t\tforeach (GlobalConstant constant in DeclaredOnly<GlobalConstant, DConstant>(visibleConstants.Values))\r\n\t\t\t\tconstant.DefineBuilders();\r\n\r\n\t\t\tthis.State = States.BuildersDefined;\r\n\t\t}\r\n\r\n\t\tinternal void Emit(CodeGenerator/*!*/ codeGenerator)\r\n\t\t{\r\n\t\t\tsourceUnit.Emit(codeGenerator);\r\n\t\t\tthis.state = States.Emitted;\r\n\t\t}\r\n\r\n\t\tinternal void Bake()\r\n\t\t{\r\n\t\t\tforeach (PhpType type in DeclaredOnly<PhpType, DType>(visibleTypes.Values))\r\n\t\t\t\ttype.Bake();\r\n\r\n\t\t\tforeach (PhpFunction function in DeclaredOnly<PhpFunction, DRoutine>(visibleFunctions.Values))\r\n\t\t\t\tfunction.Bake();\r\n\r\n\t\t\tthis.state = States.Compiled;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Clean-up\r\n\r\n\t\tpublic override void CleanUp(CompilationContext/*!*/ context, bool successful)\r\n\t\t{\r\n\t\t\tif (state != States.Reflected && state != States.Compiled)\r\n\t\t\t\tstate = States.Initial;\r\n\r\n\t\t\t// if the unit has been parsed and compiled:\r\n\t\t\tif (sourceUnit != null)\r\n\t\t\t{\r\n\t\t\t\t// close opened stream:\r\n\t\t\t\tsourceUnit.Close();\r\n\r\n\t\t\t\t// unlock:\r\n\t\t\t\tcontext.Manager.UnlockForCompiling(sourceUnit.SourceFile, successful, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IReductionsSink\r\n\r\n\t\tpublic void InclusionReduced(Parser/*!*/ parser, AST.IncludingEx node)\r\n\t\t{\r\n\t\t\t// just add to list and resolve later (prevents seeking there and back):\r\n\t\t\tinclusionExpressions.Add(node);\r\n\t\t}\r\n\r\n\t\tpublic void FunctionDeclarationReduced(Parser/*!*/ parser, AST.FunctionDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tAddDeclaration<DRoutine>(parser.ErrorSink, node.GetFunction(), visibleFunctions);\r\n\t\t}\r\n\r\n\t\tpublic void TypeDeclarationReduced(Parser/*!*/ parser, AST.TypeDecl/*!*/ node)\r\n\t\t{\r\n            AddDeclaration<DType>(parser.ErrorSink, node.Type(), visibleTypes);\r\n\t\t}\r\n\r\n\t\tpublic void GlobalConstantDeclarationReduced(Parser/*!*/ parser, AST.GlobalConstantDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tAddDeclaration<DConstant>(parser.ErrorSink, node.GetGlobalConstant(), visibleConstants);\r\n\t\t}\r\n\r\n        public void NamespaceDeclReduced(Parser parser, NamespaceDecl decl)\r\n        {\r\n        }\r\n\r\n        public void LambdaFunctionReduced(Parser parser, LambdaFunctionExpr decl)\r\n        {\r\n        }\r\n\r\n\t\tprivate void AddDeclaration<T>(ErrorSink/*!*/ errors, IDeclaree/*!*/ member,\r\n\t\t\tDictionary<QualifiedName, ScopedDeclaration<T>>/*!*/ table)\r\n\t\t\twhere T : DMember\r\n\t\t{\r\n\t\t\tKnownScopedDeclaration<T> existing;\r\n\t\t\tKnownScopedDeclaration<T> current;\r\n\r\n\t\t\tif (member.Declaration.IsConditional)\r\n\t\t\t\tcurrent = new KnownScopedDeclaration<T>(member.Declaration.Scope, member.Declaration);\r\n\t\t\telse\r\n\t\t\t\tcurrent = new KnownScopedDeclaration<T>(new Scope(0), member.Declaration);\r\n\r\n\t\t\tScopedDeclaration<T> unkExisting;\r\n\t\t\tif (table.TryGetValue(member.QualifiedName, out unkExisting))\r\n\t\t\t{\r\n\t\t\t\t// shouldn't be called after analysis\r\n\t\t\t\tDebug.Assert(unkExisting is KnownScopedDeclaration<T>);\r\n\r\n\t\t\t\texisting = (KnownScopedDeclaration<T>)unkExisting;\r\n\t\t\t\tif (CheckDeclaration(errors, member, existing.Declaration))\r\n\t\t\t\t\tAddVersionToGroup(current.Declaration, existing.Declaration);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (member.Declaration.IsConditional)\r\n\t\t\t\t\tmember.Version = new VersionInfo(1, null);\r\n\r\n\t\t\t\t// add a new declaration to the table:\r\n\t\t\t\ttable.Add(member.QualifiedName, current);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tpublic override void Reflect()\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.Compiled);\r\n\r\n\t\t\t// TODO: What should we do here?\r\n\r\n\t\t\tstate = States.Reflected;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Referenced by compiler\r\n\r\n\t\t/// <summary>\r\n\t\t/// Source file path to be used when emiting inclusion\r\n\t\t/// </summary>\r\n\t\tpublic override string RelativeSourcePath\r\n\t\t{\r\n\t\t\tget { return SourceUnit.SourceFile.RelativePath.ToString(); }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// System.Type of the main module class\r\n\t\t/// </summary>\r\n\t\tpublic override Type ScriptClassType\r\n\t\t{\r\n\t\t\tget { return ScriptModule.ScriptType; }\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// MethodInfo of the main module 'Main' method\r\n\t\t/// </summary>\r\n\t\tpublic override MethodInfo MainHelper\r\n\t\t{\r\n\t\t\tget { return ScriptModule.MainHelper; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inclusion Expression Translation\r\n\r\n\t\tinternal void ResolveInclusions(InclusionGraphBuilder/*!*/ graphBuilder)\r\n\t\t{\r\n\t\t\tDebug.Assert(state == States.Parsed);\r\n\r\n\t\t\tforeach (var inclusion in inclusionExpressions)\r\n\t\t\t{\r\n\t\t\t\tCharacteristic characteristic;\r\n\t\t\t\tPhpSourceFile target_file;\r\n\r\n\t\t\t\tResolveInclusion(inclusion.InclusionType, inclusion, graphBuilder.Context, out characteristic, out target_file);\r\n                var inclusionCompiler = inclusion.NodeCompiler<IIncludingExCompiler>();\r\n\r\n\t\t\t\tif (target_file != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tCompilationUnit includee = graphBuilder.GetNode(target_file);\r\n\t\t\t\t\tStaticInclusion static_inclusion = new StaticInclusion(this, includee, inclusion.Scope, inclusion.IsConditional, inclusion.InclusionType);\r\n\r\n\t\t\t\t\t// adds an edge:\r\n\t\t\t\t\tthis.Inclusions.Add(static_inclusion);\r\n\t\t\t\t\tincludee.Includers.Add(static_inclusion);\r\n\r\n\t\t\t\t\tinclusionCompiler.Inclusion = static_inclusion;\r\n\t\t\t\t\tinclusionCompiler.Characteristic = characteristic;\r\n\r\n\t\t\t\t\tgraphBuilder.EdgeAdded(static_inclusion);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tinclusionCompiler.Inclusion = null;\r\n\t\t\t\t\tinclusionCompiler.Characteristic = Characteristic.Dynamic;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tinclusionExpressions = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines characteristics and target source path according to the analysis of the inclusion expression.\r\n\t\t/// </summary>\r\n\t\tprivate void ResolveInclusion(InclusionTypes inclusionType, AST.IncludingEx/*!*/ inclusionExpr,\r\n\t\t\tCompilationContext/*!*/ context, out Characteristic characteristic, out PhpSourceFile targetFile)\r\n\t\t{\r\n\t\t\ttargetFile = null;\r\n\t\t\tcharacteristic = Characteristic.Dynamic;\r\n\r\n\t\t\t// inclusions in dynamic code are dynamic: \r\n\t\t\tif (InclusionTypesEnum.IsAutoInclusion(inclusionType))\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(inclusionExpr.Target.HasValue());\r\n\r\n\t\t\t\t// auto-inclusions contain explicit path:\r\n\t\t\t\ttargetFile = DetermineStaticTarget((string)inclusionExpr.Target.GetValue(), inclusionExpr.Target, context);\r\n\t\t\t\tif (targetFile != null) characteristic = Characteristic.StaticAutoInclusion;\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (!context.SaveOnlyAssembly && (context.Config.Compiler.EnableStaticInclusions ?? false))\r\n\t\t\t\t{\r\n\t\t\t\t\t// replacement //\r\n\r\n\t\t\t\t\tif (context.Config.Compiler.InclusionMappings.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// tries to match the pattern:\r\n\t\t\t\t\t\tstring source_code = sourceUnit.GetSourceCode(inclusionExpr.Target.Span);\r\n\t\t\t\t\t\tstring translated_path = InclusionMapping.TranslateExpression(context.Config.Compiler.InclusionMappings,\r\n                            source_code, context.Config.Compiler.SourceRoot.FullFileName);\r\n\r\n\t\t\t\t\t\t// succeeded:\r\n\t\t\t\t\t\tif (translated_path != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttargetFile = DetermineStaticTarget(translated_path, inclusionExpr.Target, context);\r\n\t\t\t\t\t\t\tif (targetFile != null) characteristic = Characteristic.StaticArgReplaced;\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcontext.Errors.Add(Warnings.InclusionReplacementFailed, SourceUnit, inclusionExpr.Span, source_code);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// evaluation //\r\n\r\n\t\t\t\t\tEvaluation eval = inclusionExpr.Target.EvaluatePriorAnalysis((CompilationSourceUnit)inclusionExpr.SourceUnit);\r\n\t\t\t\t\tif (eval.HasValue)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttargetFile = DetermineStaticTarget(Convert.ObjectToString(eval.Value), inclusionExpr.Target, context);\r\n\t\t\t\t\t\tif (targetFile != null) characteristic = Characteristic.StaticArgEvaluated;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the file defined by the path which is about to be set exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"translatedPath\">The path to set. Can be either relative or absolute, canonical or not.</param>\r\n\t\t/// <param name=\"target\"></param>\r\n\t\t/// <param name=\"context\">Source unit.</param>\r\n\t\t/// <returns>Target source file a <B>null</B> reference if it cannot be statically determined.</returns>\r\n\t\tprivate PhpSourceFile DetermineStaticTarget(string translatedPath, AST.Expression target, CompilationContext/*!*/ context)\r\n\t\t{\r\n            // searches for file in the following order: \r\n\t\t\t// - incomplete absolute path => combines with RootOf(SourceRoot)\r\n\t\t\t// - relative path => searches in SourceRoot then in the script source directory\r\n\t\t\tstring warning;\r\n\r\n            // create file existance checking predicate,\r\n            // while searching for the script existance, check the script library and file system:\r\n            Predicate<FullPath> fileExists = null;\r\n            if (context.ApplicationContext.ScriptLibraryDatabase != null && context.ApplicationContext.ScriptLibraryDatabase.Count > 0)\r\n                fileExists = fileExists.OrElse(path => context.ApplicationContext.ScriptLibraryDatabase.ContainsScript(path));\r\n            fileExists = fileExists.OrElse(path => path.FileExists);\r\n\r\n            // try to find the inclusion target:\r\n\t\t\tFullPath full_path = PhpScript.FindInclusionTargetPath(\r\n                new InclusionResolutionContext(\r\n                    context.ApplicationContext,\r\n\t\t\t\t    sourceUnit.SourceFile.Directory,\r\n\t\t\t\t    context.Config.Compiler.SourceRoot,\r\n\t\t\t\t    context.Config.Compiler.StaticIncludePaths\r\n                    ),\r\n\t\t\t\ttranslatedPath,\r\n                fileExists,\r\n                out warning);\r\n\r\n\t\t\tDebug.Assert(full_path.IsEmpty == (warning != null));   // full_path can be empty iff warning string was set\r\n\r\n            if (full_path.IsEmpty)\r\n\t\t\t{\r\n\t\t\t\tcontext.Errors.Add(Warnings.InclusionDeferredToRuntime, SourceUnit, target.Span,\r\n\t\t\t\t\ttranslatedPath, warning);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n            else\r\n            {\r\n                // list of files/directories to be skipped within static inclusion\r\n                // only existing files/directories are included\r\n                \r\n                // if file is in ignore list, we will defer inclusion to runtime but not report warning\r\n                foreach (var path in context.Config.Compiler.ForcedDynamicInclusionTranslatedFullPaths)\r\n                    if (full_path.FullFileName.StartsWith(path))\r\n                        return null;\r\n            }\r\n\r\n\t\t\treturn new PhpSourceFile(context.Config.Compiler.SourceRoot, full_path);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/CompilationUnits.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region CompilationUnitBase\r\n\r\n\tpublic abstract class CompilationUnitBase\r\n\t{\r\n        /// <summary>Identifies vendor Micorosft (used by debugger)</summary>\r\n        public const string MicrosoftVendorGuid = \"994B45C4-E6E9-11D2-903F-00C04FA302A1\";\r\n        /// <summary>Identifies Phalanger language (used by debugger)</summary>\r\n        public const string PhalangerLanguageGuid = \"47414A73-A544-4f5c-8684-C461D16FF58A\";\r\n\t\t/// <summary>\r\n\t\t/// Module or module builder associated with the compilation unit (one-to-one).\r\n\t\t/// Filled by reflection or emission.\r\n\t\t/// </summary>\r\n\t\tpublic IPhpModuleBuilder ModuleBuilder { get { return (IPhpModuleBuilder)module; } }\r\n\t\tpublic PhpModule Module { get { return module; } }\r\n\t\tprotected PhpModule module;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the unit represents an eval et. al.\r\n\t\t/// </summary>\r\n\t\tpublic abstract bool IsTransient { get; }\r\n\t\tpublic abstract bool IsPure { get; }\r\n\r\n\t\tpublic virtual int TransientId { get { return TransientAssembly.InvalidEvalId; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Symbol document writers for source files used in the compilation unit.\r\n\t\t/// Maps a source file name (needn't to be a PHP source file nor even a valid file name!) to the symbol document.\r\n\t\t/// </summary>\r\n\t\tprivate Dictionary<string, ISymbolDocumentWriter> symbolDocumentWriters; // lazy\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprotected CompilationUnitBase()\r\n\t\t{\r\n\t\t\t// nop\r\n\t\t}\r\n\r\n\t\tprotected CompilationUnitBase(PhpModule/*!*/ module)\r\n\t\t{\r\n\t\t\tthis.module = module;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic abstract DType GetVisibleType(QualifiedName qualifiedName, ref string/*!*/ fullName, Scope currentScope,\r\n\t\t\tbool mustResolve);\r\n\t\tpublic abstract DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string/*!*/ fullName, Scope currentScope);\r\n\t\tpublic abstract DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string/*!*/ fullName, Scope currentScope);\r\n\r\n\t\tpublic abstract IEnumerable<PhpType>/*!*/ GetDeclaredTypes();\r\n\t\tpublic abstract IEnumerable<PhpFunction>/*!*/ GetDeclaredFunctions();\r\n\t\tpublic abstract IEnumerable<GlobalConstant>/*!*/ GetDeclaredConstants();\r\n\r\n\t\t#region Declarations\r\n\r\n\t\tprotected void AddVersionToGroup(Declaration/*!*/ current, Declaration/*!*/ existing)\r\n\t\t{\r\n\t\t\tif (existing.Group == null)\r\n\t\t\t\texisting.Group = new DeclarationGroup(existing.IsConditional, existing.IsPartial);\r\n\r\n\t\t\tcurrent.Group = existing.Group;\r\n\r\n\t\t\t// add the new version to the list as a second item:\r\n\t\t\tint primary_index = (existing.Declaree.Version.Index > 0) ? existing.Declaree.Version.Index + 1 : 2;\r\n\t\t\tcurrent.Declaree.Version = new VersionInfo(primary_index - 1, existing.Declaree.Version.Next);\r\n\t\t\texisting.Declaree.Version = new VersionInfo(primary_index, current.Declaree);\r\n\r\n\t\t\texisting.Group.AddDeclaration(current.IsConditional, current.IsPartial);\r\n\t\t}\r\n\r\n\t\tprotected bool CheckDeclaration(ErrorSink/*!*/ errors, IDeclaree/*!*/ member, Declaration/*!*/ existing)\r\n\t\t{\r\n\t\t\tDeclaration current = member.Declaration;\r\n\r\n\t\t\tif (existing.IsPartial ^ current.IsPartial)\r\n\t\t\t{\r\n\t\t\t\tTryFixPartial(errors, current, existing);\r\n\t\t\t\tTryFixPartial(errors, existing, current);\r\n\t\t\t}\r\n\r\n\t\t\tif ((!existing.IsPartial || !current.IsPartial) && (!existing.IsConditional || !current.IsConditional))\r\n\t\t\t{\r\n\t\t\t\t// report fatal error (do not throw an exception, just don't let the analysis continue):\r\n\t\t\t\tmember.ReportRedeclaration(errors);\r\n\t\t\t\terrors.Add(FatalErrors.RelatedLocation, existing.SourceUnit, existing.Span);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate void TryFixPartial(ErrorSink/*!*/ errors, Declaration/*!*/ first, Declaration/*!*/ second)\r\n\t\t{\r\n\t\t\tif (!first.IsPartial && !first.IsConditional)\r\n\t\t\t{\r\n\t\t\t\t// report error and mark the declaration partial:\r\n\t\t\t\terrors.Add(Errors.MissingPartialModifier, first.SourceUnit, first.Span, first.Declaree.FullName);\r\n\t\t\t\terrors.Add(Errors.RelatedLocation, second.SourceUnit, second.Span);\r\n\r\n\t\t\t\tfirst.IsPartial = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Symbol Documents\r\n\r\n\t\tinternal ISymbolDocumentWriter GetSymbolDocumentWriter(string/*!*/ fullPath)\r\n\t\t{\r\n\t\t\tModuleBuilder module_builder = ModuleBuilder.AssemblyBuilder.RealModuleBuilder;\r\n\t\t\tISymbolDocumentWriter result = null;\r\n\r\n\r\n#if !SILVERLIGHT\r\n\t\t\tif (module_builder.GetSymWriter() != null)\r\n\t\t\t{\r\n\t\t\t\tif (symbolDocumentWriters == null || !symbolDocumentWriters.TryGetValue(fullPath, out result))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (symbolDocumentWriters == null)\r\n\t\t\t\t\t\tsymbolDocumentWriters = new Dictionary<string, ISymbolDocumentWriter>();\r\n\r\n\t\t\t\t\tresult = module_builder.DefineDocument(fullPath, new Guid(PhalangerLanguageGuid) , new Guid(MicrosoftVendorGuid), Guid.Empty);\r\n\r\n                    symbolDocumentWriters.Add(fullPath, result);\r\n\t\t\t\t}\r\n\t\t\t}\r\n#endif\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TransientCompilationUnit\r\n\r\n\tpublic sealed class TransientCompilationUnit : CompilationUnitBase, IReductionsSink\r\n\t{\r\n\t\tpublic override bool IsPure { get { return false; } }\r\n\t\tpublic override bool IsTransient { get { return true; } }\r\n\r\n\t\tpublic override int TransientId { get { return TransientModule.Id; } }\r\n\r\n\t\tpublic TransientModule TransientModule { get { return (TransientModule)module; } }\r\n\r\n\t\tpublic SourceCodeUnit/*!*/ SourceUnit { get { return sourceUnit; } }\r\n\t\tprivate readonly SourceCodeUnit/*!*/ sourceUnit;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores types, functions and constants during compilation.\r\n\t\t/// Dropped when the module is being baked to free the emission resources.\r\n\t\t/// Only descriptors of the baked elements are accessible (via <c>bakedXxx</c> lists).\r\n\t\t/// </summary>\r\n\t\tprivate Dictionary<QualifiedName, Declaration> types = null;\r\n\t\tprivate Dictionary<QualifiedName, Declaration> functions = null;\r\n\t\tprivate Dictionary<QualifiedName, Declaration> constants = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Baked type, function and constant descriptors and their full names. \r\n\t\t/// Available after the compilation. Used for activations each time \r\n\t\t/// the transient unit is executed (via eval).\r\n\t\t/// Contains only unconditionally declared entities.\r\n\t\t/// </summary>\r\n\t\tprivate KeyValuePair<string, PhpTypeDesc>[] bakedTypes = null;\r\n\t\tprivate KeyValuePair<string, PhpRoutineDesc>[] bakedFunctions = null;\r\n\t\tprivate KeyValuePair<string, DConstantDesc>[] bakedConstants = null;\r\n\t\t\r\n\t\tpublic EvalKinds EvalKind { get { return evalKind; } set { evalKind = value; } }\r\n\t\tprivate EvalKinds evalKind;\r\n\r\n\t\tprivate ScriptContext/*!*/ resolvingScriptContext;\r\n\t\tprivate DTypeDesc referringType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the functions and main code of the transient module is emitted to DynamicMethods.\r\n\t\t/// Note that DMs don't support references to *Builders so if there are any declarations in the code,\r\n\t\t/// the unit cannot be dynamic.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsDynamic { get { return isDynamic; } }\r\n\t\tprivate bool isDynamic = false;\r\n\r\n\t\tpublic TransientCompilationUnit(string/*!*/ sourceCode, PhpSourceFile/*!*/ sourceFile, Encoding/*!*/ encoding, NamingContext namingContext, int line, int column, bool client)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceCode != null && sourceFile != null && encoding != null);\r\n\t\t\tDebug.Assert(!client);\r\n\t\t\tthis.sourceUnit = new SourceCodeUnit(this, sourceCode, sourceFile, encoding, line, column);\r\n            this.sourceUnit.Naming = namingContext ?? new NamingContext(null, null);    // cant be null\r\n\t\t}\r\n\r\n\t\t#region Declaration look-up\r\n\r\n\t\tpublic override DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\t// try unconditional types declared within the same eval (doesn't make a dependency):\r\n\t\t\tDeclaration result;\r\n\t\t\tif (functions != null && functions.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (PhpFunction)result.Declaree;\r\n\r\n\t\t\t// try functions declared on AC (doesn't make dependency):\r\n\t\t\treturn module.Assembly.ApplicationContext.GetFunction(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\tpublic override DType GetVisibleType(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope,\r\n\t\t\tbool mustResolve)\r\n\t\t{\r\n\t\t\t// try unconditional types declared within the same eval (doesn't make a dependency):\r\n\t\t\tDeclaration result;\r\n\t\t\tif (types != null && types.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (PhpType)result.Declaree;\r\n\r\n\t\t\t// search application context (doens't make a dependency):\r\n\t\t\tDType type = module.Assembly.ApplicationContext.GetType(qualifiedName, ref fullName);\r\n\t\t\tif (type != null)\r\n\t\t\t\treturn type;\r\n\r\n\t\t\t// do not add a dependency if not necessary:\r\n\t\t\tif (!mustResolve) return null;\r\n\r\n\t\t\t// try types declared on SC (makes a dependency);\r\n\t\t\t// use referring type to allow resolving self and parent; autoload is available here;\r\n            DTypeDesc desc = resolvingScriptContext.ResolveType(fullName, null, referringType, null, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.SkipGenericNameParsing);\r\n\r\n\t\t\tif (desc != null)\r\n\t\t\t{\r\n\t\t\t\t// TODO: remember the dependency\r\n\t\t\t\treturn desc.Type;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string fullName/*!*/, Scope currentScope)\r\n\t\t{\r\n\t\t\t// try unconditional constants declared within the same eval (doesn't make a dependency):\r\n\t\t\tDeclaration result;\r\n\t\t\tif (constants != null && constants.TryGetValue(qualifiedName, out result))\r\n\t\t\t\treturn (GlobalConstant)result.Declaree;\r\n\r\n\t\t\t// search application context:\r\n\t\t\treturn module.Assembly.ApplicationContext.GetConstant(qualifiedName, ref fullName);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<PhpType>/*!*/ GetDeclaredTypes()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<PhpType>(types.Values);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<PhpFunction>/*!*/ GetDeclaredFunctions()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<PhpFunction>(functions.Values);\r\n\t\t}\r\n\r\n\t\tpublic override IEnumerable<GlobalConstant>/*!*/ GetDeclaredConstants()\r\n\t\t{\r\n\t\t\t// filtering is not necessary, however, we may reuse the iterator:\r\n\t\t\treturn Declaration.GetDeclarees<GlobalConstant>(constants.Values);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Compilation\r\n\r\n\t\tTransientAssemblyBuilder assembly_builder;\r\n\t\tTransientModuleBuilder module_builder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called before 'Compile' to initialize module &amp; assembly builders, so they can be used by the caller.\r\n\t\t/// </summary>\r\n\t\tinternal bool PreCompile(CompilationContext/*!*/ context, ScriptContext/*!*/ scriptContext,\r\n\t\t\tSourceCodeDescriptor descriptor, EvalKinds kind, DTypeDesc referringType)\r\n\t\t{\r\n            Debug.Assert(descriptor.Line == this.sourceUnit.Line);\r\n            Debug.Assert(descriptor.Column == this.sourceUnit.Column);\r\n\r\n\t\t\tthis.resolvingScriptContext = scriptContext;\r\n\t\t\tthis.referringType = referringType;\r\n\r\n\t\t\t// TODO: isDynamic is tricky...\r\n\t\t\t//  .. we need to define module_builder before any type/etc.. is reduced from the parser\r\n\t\t\t//  .. but we don't know whether it will be dynamic in advance!\r\n\r\n\t\t\tthis.assembly_builder = scriptContext.ApplicationContext.TransientAssemblyBuilder;\r\n\t\t\tthis.module_builder = assembly_builder.DefineModule(this, context.Config.Compiler.Debug,\r\n\t\t\t\tdescriptor.ContainingTransientModuleId, kind, descriptor.ContainingSourcePath);\r\n\t\t\tthis.module = module_builder;\r\n\t\t\tthis.evalKind = kind;\r\n\r\n            sourceUnit.Parse(\r\n                context.Errors, this,\r\n                context.Config.Compiler.LanguageFeatures);\r\n\r\n\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t// any declaration implies non-dynamicity:\r\n\t\t\t// TODO: this mode needs to be checked...\r\n\t\t\t// isDynamic = types == null && functions == null && constants == null;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles the transient unit. 'PreCompile' should be called first!\r\n\t\t/// </summary>\r\n\t\tinternal bool Compile(CompilationContext/*!*/ context, EvalKinds kind)\r\n\t\t{\r\n\t\t\tAnalyzer analyzer = null;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tanalyzer = new Analyzer(context);\r\n\r\n\t\t\t\t// perform pre-analysis on types and functions:\r\n\t\t\t\tif (types != null)\r\n\t\t\t\t\tanalyzer.PreAnalyze(types.Values);\r\n\r\n\t\t\t\tif (functions != null)\r\n\t\t\t\t\tanalyzer.PreAnalyze(functions.Values);\r\n\r\n\t\t\t\t// perform member analysis on types and functions:\r\n\t\t\t\tif (types != null)\r\n\t\t\t\t\tanalyzer.AnalyzeMembers(types.Values);\r\n\t\t\t\tif (functions != null)\r\n\t\t\t\t\tanalyzer.AnalyzeMembers(functions.Values);\r\n\t\t\t\t\r\n\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t// perform full analysis:\r\n\t\t\t\tanalyzer.Analyze(sourceUnit);\r\n\r\n\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t// perform post analysis:\r\n\t\t\t\tanalyzer.PostAnalyze();\r\n\t\t\t}\r\n\t\t\tcatch (CompilerException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tresolvingScriptContext = null;\r\n\t\t\t\treferringType = null;\r\n\t\t\t}\r\n\r\n\t\t\t// do not emit anything if there was parse/analysis error:\r\n\t\t\tif (context.Errors.AnyError) return false;\r\n\r\n\t\t\tDefineBuilders();\r\n\r\n\t\t\t// define constructed types:\r\n\t\t\tanalyzer.DefineConstructedTypeBuilders();\r\n\r\n\t\t\tCodeGenerator cg = new CodeGenerator(context);\r\n\t\t\tsourceUnit.Emit(cg);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n        internal void PostCompile(SourceCodeDescriptor descriptor)\r\n        {\r\n            module_builder.Bake();\r\n            Bake();\r\n\r\n            // TODO: analyzer.GetTypeDependencies();\r\n            var dependentTypes = new List<KeyValuePair<string, DTypeDesc>>(bakedTypes != null ? bakedTypes.Length : 0);\r\n            if (bakedTypes != null)\r\n                foreach (var type in bakedTypes)\r\n                {\r\n                    // add base as this type dependency:\r\n                    AddDependentType(type.Value, dependentTypes, type.Value.Base);\r\n\r\n                    // do the same for type.Value.Interfaces\r\n                    var ifaces = type.Value.Interfaces;\r\n                    if (ifaces != null && ifaces.Length > 0)\r\n                        for (int i = 0; i < ifaces.Length; i++)\r\n                            AddDependentType(type.Value, dependentTypes, ifaces[i]);\r\n                }\r\n\r\n            //\r\n            module = assembly_builder.TransientAssembly.AddModule(module_builder, dependentTypes, sourceUnit.Code, descriptor);\r\n        }\r\n\r\n        private static void AddDependentType(PhpTypeDesc/*!*/selfType, List<KeyValuePair<string, DTypeDesc>>/*!*/dependentTypes, DTypeDesc dependentType)\r\n        {\r\n            if (dependentType != null && dependentType is PhpTypeDesc && !IsSameCompilationUnit(selfType, dependentType))\r\n                dependentTypes.Add(new KeyValuePair<string, DTypeDesc>(dependentType.MakeFullName(), dependentType));\r\n        }\r\n\r\n        private static bool IsSameCompilationUnit(PhpTypeDesc/*!*/selfType, DTypeDesc dependentType)\r\n        {\r\n            Debug.Assert(selfType != null && dependentType != null);\r\n\r\n            if (object.ReferenceEquals(dependentType.RealType.Module, selfType.RealType.Module))\r\n            {\r\n                int selfTransientId, dependentTransientId;\r\n                string selfFileName, dependentFileName;\r\n                string selfTypeName, dependentTypeName;\r\n\r\n                ReflectionUtils.ParseTypeId(selfType.RealType, out selfTransientId, out selfFileName, out selfTypeName);\r\n                if (selfTransientId != PHP.Core.Reflection.TransientAssembly.InvalidEvalId) // always true, => TransientCompilationUnit\r\n                {\r\n                    ReflectionUtils.ParseTypeId(dependentType.RealType, out dependentTransientId, out dependentFileName, out dependentTypeName);\r\n                    // transient modules, must have same ids\r\n                    return selfTransientId == dependentTransientId;\r\n                }\r\n                else\r\n                {\r\n                    // same module, not transient modules\r\n                    return true;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // different modules => different units for sure\r\n                return false;\r\n            }\r\n        }\r\n\r\n\t\tprivate void DefineBuilders()\r\n\t\t{\r\n\t\t\tif (types != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (Declaration declaration in types.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\t((PhpType)declaration.Declaree).DefineBuilders();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (functions != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (Declaration declaration in functions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\t((PhpFunction)declaration.Declaree).DefineBuilders();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// TODO (constants that are not evaluable needs to be converted to DM):\r\n\t\t\tif (constants != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (Declaration declaration in constants.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\t((GlobalConstant)declaration.Declaree).DefineBuilders();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void Bake()\r\n\t\t{\r\n\t\t\tif (types != null)\r\n\t\t\t{\r\n\t\t\t\tbakedTypes = new KeyValuePair<string, PhpTypeDesc>[types.Count];\r\n\t\t\t\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tforeach (Declaration declaration in types.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpType type = (PhpType)declaration.Declaree;\r\n\r\n\t\t\t\t\t// store full name before calling Bake() as it nulls the PhpType:\r\n\t\t\t\t\tstring full_name = type.FullName;\r\n\t\t\t\t\tPhpTypeDesc baked = type.Bake();\r\n\r\n\t\t\t\t\t// baked is null if the type is indefinite \r\n\t\t\t\t\t// (its base class may be evaluated when the module's main method is executed):\r\n\t\t\t\t\tif (baked != null && !declaration.IsConditional)\r\n\t\t\t\t\t\tbakedTypes[i++] = new KeyValuePair<string, PhpTypeDesc>(full_name, baked);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// trim:\r\n\t\t\t\tArray.Resize(ref bakedTypes, i);\r\n\t\t\t\t\r\n\t\t\t\ttypes = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (functions != null)\r\n\t\t\t{\r\n\t\t\t\tbakedFunctions = new KeyValuePair<string, PhpRoutineDesc>[functions.Count];\r\n\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tforeach (Declaration declaration in functions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpFunction function = (PhpFunction)declaration.Declaree;\r\n\r\n\t\t\t\t\tstring full_name = function.FullName;\r\n\t\t\t\t\tPhpRoutineDesc baked = function.Bake();\r\n\r\n\t\t\t\t\tif (!declaration.IsConditional)\r\n\t\t\t\t\t\tbakedFunctions[i++] = new KeyValuePair<string, PhpRoutineDesc>(full_name, baked);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// trim:\r\n\t\t\t\tArray.Resize(ref bakedFunctions, i);\r\n\t\t\t\t\r\n\t\t\t\tfunctions = null;\r\n\t\t\t}\r\n\r\n\t\t\tif (constants != null)\r\n\t\t\t{\r\n\t\t\t\tbakedConstants = new KeyValuePair<string, DConstantDesc>[constants.Count];\r\n\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tforeach (Declaration declaration in constants.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tGlobalConstant constant = (GlobalConstant)declaration.Declaree;\r\n\r\n\t\t\t\t\tstring full_name = constant.FullName;\r\n\t\t\t\t\tDConstantDesc baked = constant.Bake();\r\n\r\n\t\t\t\t\tif (!declaration.IsConditional)\r\n\t\t\t\t\t\tbakedConstants[i++] = new KeyValuePair<string, DConstantDesc>(full_name, baked);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// trim:\r\n\t\t\t\tArray.Resize(ref bakedConstants, i);\r\n\t\t\t\t\r\n\t\t\t\tconstants = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Declares types unconditionally declared in this module on the given <see cref=\"ScriptContext\"/>.\r\n\t\t/// Although, we can emit the Declare helper, it is not necessary as we can do it here for types \r\n\t\t/// and functions. Only constants, which cannot be evaluated at compile time (they are dependent \r\n\t\t/// on other eval-time evaluated constants are emitted (TODO).\r\n\t\t/// </summary>\r\n        public void Declare(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (bakedTypes != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<string, PhpTypeDesc> entry in bakedTypes)\r\n\t\t\t\t{\r\n\t\t\t\t\t//// checks for conflict on AC:\r\n\t\t\t\t\t//if (module.Assembly.ApplicationContext.Types.ContainsKey(entry.Key))\r\n\t\t\t\t\t//  PhpException.Throw(PhpError.Error, CoreResources.GetString(\"type_redeclared\", entry.Key));\r\n\r\n\t\t\t\t\t// checks for conflict on SC:\r\n\t\t\t\t\tif (entry.Value.IsGeneric)\r\n\t\t\t\t\t\tcontext.DeclareGenericType(entry.Value, entry.Key);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tcontext.DeclareType(entry.Value, entry.Key);\r\n\r\n                    // moved to TypesProvider.FindAndProvideType\r\n                    //\r\n                    //// When class is compiled in runtime, autoload is invoked on base class (if isn't already declared). \r\n                    //// We have to call autoload on the base class also in transient assembly\r\n                    //if (entry.Value.Base is PhpTypeDesc)\r\n                    //{\r\n                    //    var baseDesc = context.ResolveType(entry.Value.Base.MakeSimpleName(), null, caller, null, ResolveTypeFlags.UseAutoload);\r\n                    //    // if (baseDesc != entry.Value.Base) we have to invalidate the cache\r\n                    //}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (bakedFunctions != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<string, PhpRoutineDesc> entry in bakedFunctions)\r\n\t\t\t\t{\r\n\t\t\t\t\t//// checks for conflict on AC:\r\n\t\t\t\t\t//if (module.Assembly.ApplicationContext.Functions.ContainsKey(entry.Key))\r\n\t\t\t\t\t//  PhpException.Throw(PhpError.Error, CoreResources.GetString(\"type_redeclared\", entry.Value));\r\n\r\n\t\t\t\t\t// checks for conflict on SC:\r\n\t\t\t\t\tcontext.DeclareFunction(new PhpRoutineDesc(entry.Value.MemberAttributes, entry.Value.ArglessStub, false), entry.Key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            if (bakedConstants != null)\r\n            {\r\n                foreach (var entry in this.bakedConstants)\r\n                {\r\n                    // checks for conflict on SC:\r\n                    //if (constant.HasValue)\r\n                    context.DeclareConstant(entry.Key, entry.Value.LiteralValue);\r\n                }\t\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IReductionsSink Members\r\n\r\n\t\tpublic void InclusionReduced(Parser/*!*/ parser, AST.IncludingEx/*!*/ node)\r\n\t\t{\r\n\t\t\t// make all inclusions dynamic:\r\n#if !SILVERLIGHT\r\n            var nodecompiler = node.NodeCompiler<IIncludingExCompiler>();\r\n            nodecompiler.Inclusion = null;\r\n            nodecompiler.Characteristic = Characteristic.Dynamic;\r\n#endif\r\n\t\t}\r\n\r\n\t\tpublic void FunctionDeclarationReduced(Parser/*!*/ parser, AST.FunctionDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tif (functions == null) functions = new Dictionary<QualifiedName, Declaration>();\r\n\t\t\tAddDeclaration(parser.ErrorSink, node.GetFunction(), functions);\r\n\t\t}\r\n\r\n\t\tpublic void TypeDeclarationReduced(Parser/*!*/ parser, AST.TypeDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tif (types == null) types = new Dictionary<QualifiedName, Declaration>();\r\n            AddDeclaration(parser.ErrorSink, node.Type(), types);\r\n\t\t}\r\n\r\n\t\tpublic void GlobalConstantDeclarationReduced(Parser/*!*/ parser, AST.GlobalConstantDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tif (constants == null) constants = new Dictionary<QualifiedName, Declaration>();\r\n\t\t\tAddDeclaration(parser.ErrorSink, node.GetGlobalConstant(), constants);\r\n\t\t}\r\n\r\n        public void NamespaceDeclReduced(Parser parser, NamespaceDecl decl)\r\n        {\r\n        }\r\n\r\n        public void LambdaFunctionReduced(Parser parser, LambdaFunctionExpr decl)\r\n        {\r\n        }\r\n\r\n\t\tprivate void AddDeclaration(ErrorSink/*!*/ errors, IDeclaree/*!*/ member, Dictionary<QualifiedName, Declaration>/*!*/ table)\r\n\t\t{\r\n\t\t\tDeclaration existing;\r\n\t\t\tDeclaration current = member.Declaration;\r\n\r\n\t\t\tif (table.TryGetValue(member.QualifiedName, out existing))\r\n\t\t\t{\r\n\t\t\t\t// partial declarations are not allowed in transient code => nothing to check;\r\n\t\t\t\tif (CheckDeclaration(errors, member, existing))\r\n\t\t\t\t\tAddVersionToGroup(current, existing);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// add a new declaration to the table:\r\n\t\t\t\ttable.Add(member.QualifiedName, current);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Constants.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region DConstantDesc\r\n\r\n\tpublic sealed class DConstantDesc : DMemberDesc\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Written-up by the analyzer if the value is evaluable (literals only).\r\n\t\t/// </summary>\r\n\t\tpublic object LiteralValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                Debug.Assert(!ValueIsDeferred, \"This constant's literal value cannot be accessed directly. You have to read its realField in runtime after you initialize static fields.\");\r\n\t\t\t\treturn literalValue;\r\n\t\t\t}\r\n\t\t\tinternal /* friend DConstant */ set\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(value is int || value is string || value == null || value is bool || value is double || value is long);\r\n\t\t\t\tthis.literalValue = value;\r\n                this.ValueIsDeferred = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate object literalValue;\r\n\r\n        public GlobalConstant GlobalConstant { get { return (GlobalConstant)Member; } }\r\n\t\tpublic ClassConstant ClassConstant { get { return (ClassConstant)Member; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for global constants.\r\n\t\t/// </summary>\r\n\t\tpublic DConstantDesc(DModule/*!*/ declaringModule, PhpMemberAttributes memberAttributes, object literalValue)\r\n\t\t\t: base(declaringModule.GlobalType.TypeDesc, memberAttributes | PhpMemberAttributes.Static)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringModule != null);\r\n\t\t\tthis.literalValue = literalValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for class constants.\r\n\t\t/// </summary>\r\n\t\tpublic DConstantDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes, object literalValue)\r\n\t\t\t: base(declaringType, memberAttributes | PhpMemberAttributes.Static)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t\tthis.literalValue = literalValue;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Not Supported\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n            Debug.Fail(\"Not Supported\");\r\n\t\t\treturn null;\r\n        }\r\n\r\n        #region Run-Time Operations\r\n\r\n        /// <summary>\r\n        /// <c>True</c> if value of this constant is deferred to runtime; hence it must be read from corresponding static field every time.\r\n        /// </summary>\r\n        internal bool ValueIsDeferred { get; set; }\r\n\r\n        /// <summary>\r\n        /// Read value of this constant.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        public object GetValue(ScriptContext/*!*/ context)\r\n        {\r\n            if (ValueIsDeferred)\r\n            {\r\n                if (Member.GetType() == typeof(ClassConstant) && DeclaringType.GetType() == typeof(PhpTypeDesc))\r\n                {\r\n                    ((PhpTypeDesc)DeclaringType).EnsureThreadStaticFieldsInitialized(context);\r\n                    return ((ClassConstant)Member).GetValue();\r\n                }\r\n\r\n                if (memberAttributes.GetType() == typeof(GlobalConstant))\r\n                {\r\n                    // TODO: initialize deferred global constant\r\n                    return ((ClassConstant)Member).GetValue();\r\n                }\r\n\r\n                Debug.Fail(\"Uncaught constant type.\");\r\n            }\r\n\r\n            //\r\n            return this.LiteralValue;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region DConstant\r\n\r\n\tpublic abstract class DConstant : DMember\r\n\t{\r\n\t\tpublic sealed override bool IsDefinite { get { return IsIdentityDefinite; } }\r\n\r\n\t\tpublic DConstantDesc/*!*/ ConstantDesc { get { return (DConstantDesc)memberDesc; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the value of the constant is known and stored in the constant-desc.\r\n\t\t/// </summary>\r\n\t\tpublic abstract bool HasValue { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constant value. Valid only if <see cref=\"HasValue\"/> is <B>true</B>.\r\n\t\t/// </summary>\r\n\t\tpublic object Value { get { return ConstantDesc.LiteralValue; } }\r\n\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by known constant subclasses.\r\n\t\t/// </summary>\r\n\t\tpublic DConstant(DConstantDesc/*!*/ constantDesc)\r\n\t\t\t: base(constantDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(constantDesc != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by unknown constants subclasses.\r\n\t\t/// </summary>\r\n\t\tpublic DConstant(string/*!*/ fullName)\r\n\t\t\t: base(null, fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsUnknown);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tinternal virtual void ReportCircularDefinition(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tinternal abstract PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n            bool runtimeVisibilityCheck, string fallbackName);\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownClassConstant, UnknownGlobalConstant\r\n\r\n\tpublic sealed class UnknownClassConstant : DConstant\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\t\tpublic override bool HasValue { get { return false; } }\r\n\r\n\t\tpublic override DType/*!*/ DeclaringType { get { return declaringType; } }\r\n\t\tprivate readonly DType/*!*/ declaringType;\r\n\r\n\t\tpublic UnknownClassConstant(DType/*!*/ declaringType, string/*!*/ fullName)\r\n\t\t\t: base(fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullName != null);\r\n\t\t\tthis.declaringType = declaringType;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn FullName;\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t\tbool runtimeVisibilityCheck, string fallbackName)\r\n\t\t{\r\n            Debug.Assert(fallbackName == null);\r\n\r\n            codeGenerator.EmitGetConstantValueOperator(declaringType, this.FullName, null);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic sealed class UnknownGlobalConstant : DConstant\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\t\tpublic override bool HasValue { get { return false; } }\r\n\r\n\t\tpublic UnknownGlobalConstant(string/*!*/ fullName)\r\n\t\t\t: base(fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullName != null);\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn FullName;\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n            bool runtimeVisibilityCheck, string fallbackName)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitGetConstantValueOperator(null, this.FullName, fallbackName);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region KnownConstant\r\n\r\n\tpublic abstract class KnownConstant : DConstant, IPhpMember\r\n\t{\r\n\t\tpublic sealed override bool IsUnknown { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the value of the constant is known and stored in the constant-desc.\r\n\t\t/// </summary>\r\n        public sealed override bool HasValue { get { return node == null && !ConstantDesc.ValueIsDeferred; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Real storage of the constant (a field).\r\n\t\t/// </summary>\r\n\t\tpublic FieldInfo RealField { get { return realField; } }\r\n\t\tpublic FieldBuilder RealFieldBuilder { get { return (FieldBuilder)realField; } }\r\n\t\tprotected FieldInfo realField;\r\n\r\n        private Func<object>/*!*/GetterStub { get { if (getterStub == null) GenerateGetterStub(); return getterStub; } }\r\n        private Func<object>/*!*/getterStub = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// AST node representing the constant. Used for evaluation only.\r\n\t\t/// </summary>\r\n\t\tinternal AST.ConstantDecl Node { get { return node; } }\r\n\t\tprivate AST.ConstantDecl node;\r\n\r\n        public abstract Text.Span Span { get; }\r\n\t\tpublic abstract SourceUnit SourceUnit { get; }\r\n\r\n\t\tinternal ExportAttribute ExportInfo { get { return exportInfo; } set { exportInfo = value; } }\r\n\t\tinternal /* protected */ ExportAttribute exportInfo;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the constant is exported.\r\n\t\t/// </summary>\r\n\t\tinternal abstract bool IsExported { get; }\r\n\r\n\t\tpublic KnownConstant(DConstantDesc/*!*/ constantDesc)\r\n\t\t\t: base(constantDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(constantDesc != null);\r\n\t\t\tthis.node = null;\r\n\t\t}\r\n\r\n\t\tinternal void SetValue(object value)\r\n\t\t{\r\n\t\t\tthis.ConstantDesc.LiteralValue = value;\r\n\t\t\tthis.node = null;\r\n\t\t}\r\n\r\n\t\tinternal void SetNode(AST.ConstantDecl/*!*/ node)\r\n\t\t{\r\n\t\t\tthis.ConstantDesc.LiteralValue = null;\r\n\t\t\tthis.node = node;\r\n\t\t}\r\n\r\n        private void GenerateGetterStub()\r\n        {\r\n            Debug.Assert(this.realField != null);\r\n            Debug.Assert(this.realField.FieldType == typeof(object));\r\n\r\n            DynamicMethod stub = new DynamicMethod(\"<^GetterStub>\", this.realField.FieldType, Type.EmptyTypes, true);\r\n            ILEmitter il = new ILEmitter(stub);\r\n\r\n            il.Emit(OpCodes.Ldsfld, this.realField);\r\n            il.Emit(OpCodes.Ret);\r\n            this.getterStub = (Func<object>)stub.CreateDelegate(typeof(Func<object>));\r\n        }\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n            bool runtimeVisibilityCheck, string fallbackName)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (HasValue)\r\n\t\t\t{\r\n\t\t\t\til.LoadLiteral(Value);\r\n                return PhpTypeCodeEnum.FromObject(Value);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(realField != null);\r\n\r\n                il.Emit(OpCodes.Ldsfld, DType.MakeConstructed(realField, constructedType));\r\n                return PhpTypeCodeEnum.FromType(realField.FieldType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region Run-Time Operations\r\n\r\n        internal object GetValue()\r\n        {\r\n            Debug.Assert(realField != null);\r\n            return GetterStub();\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GlobalConstant\r\n\r\n\t/// <summary>\r\n\t/// Pure mode global constants, namespace constants, CLR constants, library constants.\r\n\t/// </summary>\r\n\tpublic sealed class GlobalConstant : KnownConstant, IDeclaree\r\n\t{\r\n\t\t#region Statics\r\n\r\n\t\tpublic static readonly GlobalConstant Null;\r\n\t\tpublic static readonly GlobalConstant False;\r\n\t\tpublic static readonly GlobalConstant True;\r\n\r\n        public static readonly GlobalConstant PhpIntSize;\r\n        public static readonly GlobalConstant PhpIntMax;\r\n\r\n\t\tstatic GlobalConstant()\r\n\t\t{\r\n\t\t\tif (UnknownModule.RuntimeModule == null) UnknownModule.RuntimeModule = new UnknownModule();\r\n\r\n            Null = new GlobalConstant(QualifiedName.Null, Fields.PhpVariable_LiteralNull);\r\n\t\t\tNull.SetValue(null);\r\n            False = new GlobalConstant(QualifiedName.False, Fields.PhpVariable_LiteralFalse);\r\n\t\t\tFalse.SetValue(false);\r\n            True = new GlobalConstant(QualifiedName.True, Fields.PhpVariable_LiteralTrue);\r\n\t\t\tTrue.SetValue(true);\r\n\r\n            PhpIntSize = new GlobalConstant(new QualifiedName(new Name(\"PHP_INT_SIZE\")), typeof(PhpVariable).GetField(\"LiteralIntSize\"));\r\n            PhpIntSize.SetValue(PhpVariable.LiteralIntSize);\r\n            PhpIntMax = new GlobalConstant(new QualifiedName(new Name(\"PHP_INT_MAX\")), typeof(int).GetField(\"MaxValue\"));\r\n            PhpIntMax.SetValue(int.MaxValue);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsIdentityDefinite\r\n\t\t{\r\n\t\t\tget { return declaration == null || !declaration.IsConditional; }\r\n\t\t}\r\n\r\n\t\tpublic IPhpModuleBuilder DeclaringModuleBuilder { get { return (IPhpModuleBuilder)DeclaringModule; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Note: the base name is case-sensitive.\r\n\t\t/// </summary>\r\n\t\tpublic QualifiedName QualifiedName { get { return qualifiedName; } }\r\n\t\tprivate readonly QualifiedName qualifiedName;\r\n\r\n\t\tpublic Declaration Declaration { get { return declaration; } }\r\n\t\tprivate Declaration declaration;\r\n\r\n\t\tpublic VersionInfo Version { get { return version; } set { version = value; } }\r\n\t\tprivate VersionInfo version;\r\n\r\n        public override Text.Span Span { get { return declaration.Span; } }\r\n\t\tpublic override SourceUnit SourceUnit { get { return declaration.SourceUnit; } }\r\n\r\n        /// <summary>\r\n        /// If constant defined within &lt;script&gt; type, remember its builder to define constant field there.\r\n        /// In case of pure or transient module, this is null. If this is null, the constant is declared in as CLR global.\r\n        /// </summary>\r\n        private TypeBuilder scriptTypeBuilder = null;\r\n\r\n        /// <summary>\r\n        /// Name of the extension where this global constant was defined.\r\n        /// </summary>\r\n        public string Extension\r\n        {\r\n            get\r\n            {\r\n                PhpLibraryModule libraryModule = DeclaringModule as PhpLibraryModule;\r\n\r\n                if (libraryModule != null)\r\n                    return libraryModule.GetImplementedExtension(realField.DeclaringType);\r\n                else\r\n                    return null;\r\n            }\r\n        }\r\n\r\n\t\tinternal override bool IsExported\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn exportInfo != null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n        /// <summary>\r\n        /// Used for constants created by run-time, but with known declaring module\r\n        /// </summary>\r\n        internal GlobalConstant(DModule/*!*/ declaringModule, QualifiedName qualifiedName, FieldInfo info)\r\n            : base(new DConstantDesc(declaringModule, PhpMemberAttributes.None, null))\r\n        {\r\n            this.realField = info;\r\n            this.qualifiedName = qualifiedName;\r\n        }\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used for constants created by run-time.\r\n\t\t/// </summary>\r\n\t\tinternal GlobalConstant(QualifiedName qualifiedName, FieldInfo info)\r\n\t\t\t: base(new DConstantDesc(UnknownModule.RuntimeModule, PhpMemberAttributes.None, null))\r\n\t\t{\r\n\t\t\tthis.realField = info;\r\n            this.qualifiedName = qualifiedName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler.\r\n\t\t/// </summary>\r\n\t\tpublic GlobalConstant(QualifiedName qualifiedName, PhpMemberAttributes memberAttributes,\r\n            CompilationSourceUnit/*!*/ sourceUnit, bool isConditional, Scope scope, Text.Span position)\r\n\t\t\t: base(new DConstantDesc(sourceUnit.CompilationUnit.Module, memberAttributes, null))\r\n\t\t{\r\n            Debug.Assert(sourceUnit != null);\r\n\r\n\t\t\tthis.qualifiedName = qualifiedName;\r\n\t\t\tthis.declaration = new Declaration(sourceUnit, this, false, isConditional, scope, position);\r\n            //this.origin = origin;\r\n\r\n            if (sourceUnit.CompilationUnit is ScriptCompilationUnit)    // J: place the constant into <script> type so it can be reflected properly\r\n                scriptTypeBuilder = ((ScriptCompilationUnit)sourceUnit.CompilationUnit).ScriptBuilder.ScriptTypeBuilder;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn qualifiedName.ToString();\r\n\t\t}\r\n\r\n\t\tinternal override void ReportCircularDefinition(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\terrors.Add(Errors.CircularConstantDefinitionGlobal, SourceUnit, Span, FullName);\r\n\t\t}\r\n\r\n\t\tpublic void ReportRedeclaration(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\terrors.Add(FatalErrors.ConstantRedeclared, SourceUnit, Span, FullName);\r\n\t\t}\r\n\r\n\t\tinternal void DefineBuilders()\r\n\t\t{\r\n\t\t\tif (realField == null)\r\n\t\t\t{\r\n                // resolve attributes\r\n                FieldAttributes field_attrs = Enums.ToFieldAttributes(memberDesc.MemberAttributes);\r\n                field_attrs |= FieldAttributes.Literal;\r\n\r\n                Debug.Assert((field_attrs & FieldAttributes.Static) != 0);\r\n\r\n                // convert name to CLR notation:\r\n                var clrName = qualifiedName.ToClrNotation(0, 0);\r\n\r\n                // type\r\n                Type type = Types.Object[0];\r\n                if (this.HasValue && this.Value != null)\r\n                    type = this.Value.GetType();\r\n\r\n                // define public static const field:\r\n                if (scriptTypeBuilder != null)  // const in SSA or MSA\r\n                {\r\n                    realField = scriptTypeBuilder.DefineField(clrName, type, field_attrs);\r\n                }\r\n                else // const in Pure or Transient\r\n                {\r\n                    ModuleBuilder module_builder = this.DeclaringModuleBuilder.AssemblyBuilder.RealModuleBuilder;\r\n\r\n                    // represent the class constant as a static initonly field\r\n\r\n                    realField = ReflectionUtils.DefineGlobalField(module_builder, clrName, type, field_attrs);\r\n                }\r\n\r\n                Debug.Assert(realField != null);\r\n\r\n                // set value\r\n                if (this.HasValue)\r\n                    ((FieldBuilder)realField).SetConstant(this.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal DConstantDesc Bake()\r\n\t\t{\r\n\t\t\t// TODO: rereflection\r\n\t\t\treturn this.ConstantDesc;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClassConstant\r\n\r\n\tpublic sealed class ClassConstant : KnownConstant\r\n\t{\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate readonly VariableName name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting.\r\n\t\t/// <see cref=\"ShortPosition.Invalid\"/> for reflected PHP methods.\r\n\t\t/// </summary>\r\n        public override Text.Span Span { get { return span; } }\r\n        private readonly Text.Span span;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting (for partial classes).\r\n\t\t/// <B>null</B> for reflected PHP methods.\r\n\t\t/// </summary>\r\n\t\tpublic override SourceUnit SourceUnit { get { return sourceUnit; } }\r\n\t\tprivate SourceUnit sourceUnit;\r\n\r\n\t\tinternal override bool IsExported\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return exportInfo != null || this.DeclaringPhpType.IsExported; }\r\n\t\t}\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler.\r\n\t\t/// </summary>\r\n\t\tpublic ClassConstant(VariableName name, DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n            SourceUnit/*!*/ sourceUnit, Text.Span position)\r\n\t\t\t: base(new DConstantDesc(declaringType, memberAttributes, null))\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.span = position;\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect (CLR).\r\n\t\t/// </summary>\r\n\t\tpublic ClassConstant(VariableName name, DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(new DConstantDesc(declaringType, memberAttributes, null))\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\r\n\t\t\tthis.name = name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect (PHP).\r\n\t\t/// </summary>\r\n\t\tpublic ClassConstant(VariableName name, DConstantDesc/*!*/ constantDesc, FieldInfo/*!*/ fieldInfo)\r\n\t\t\t: base(constantDesc)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.realField = fieldInfo;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\tinternal override void ReportCircularDefinition(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\terrors.Add(Errors.CircularConstantDefinitionClass, SourceUnit, Span, DeclaringType.FullName, FullName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified name is valid constant name. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The constant name.</param>\r\n\t\t/// <seealso cref=\"PhpVariable.IsValidName\"/>\r\n\t\tpublic static bool IsValidName(string name)\r\n\t\t{\r\n\t\t\treturn PhpVariable.IsValidName(name);\r\n\t\t}\r\n\r\n\t\tpublic void Validate(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\t// nop\r\n\t\t}\r\n\r\n\t\tinternal void DefineBuilders()\r\n\t\t{\r\n\t\t\tif (realField == null)\r\n\t\t\t{\r\n\t\t\t\tTypeBuilder type_builder = this.DeclaringPhpType.RealTypeBuilder;\r\n\r\n\t\t\t\t// represent the class constant as a static initonly field\r\n\t\t\t\tFieldAttributes field_attrs = Enums.ToFieldAttributes(memberDesc.MemberAttributes);\r\n                Type field_type = Types.Object[0];\r\n                if (this.HasValue)\r\n                {\r\n                    var value = this.Value;\r\n                    if (value == null || value is int || value is double || value is string || value is long || value is bool)\r\n                    {\r\n                        if (value != null)\r\n                            field_type = value.GetType();\r\n\r\n                        field_attrs |= FieldAttributes.Literal;\r\n                    }\r\n                    else\r\n                    {\r\n                        field_attrs |= FieldAttributes.InitOnly;\r\n                    }\r\n                }\r\n                \r\n\t\t\t\tstring name = FullName;\r\n\t\t\t\tif (IsExported) name += \"#\";\r\n\r\n\t\t\t\tFieldBuilder fb = type_builder.DefineField(name, field_type, field_attrs);\r\n\r\n\t\t\t\t// [EditorBrowsable(Never)] for user convenience - not on silverlight\r\n                // [ThreadStatic] for deferred constants\r\n#if !SILVERLIGHT\r\n\t\t\t\tif (IsExported)\r\n\t\t\t\t\tfb.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n                if (!this.HasValue) // constant initialized for every request separatelly (same as static PHP field)\r\n                    fb.SetCustomAttribute(AttributeBuilders.ThreadStatic);\r\n#endif\r\n\r\n\t\t\t\trealField = fb;\r\n\t\t\t}\r\n        }\r\n\r\n        #region Emission\r\n\r\n        internal override PhpTypeCode EmitGet(CodeGenerator codeGenerator, ConstructedType constructedType, bool runtimeVisibilityCheck, string fallbackName)\r\n        {\r\n            if (!HasValue)\r\n            {\r\n                // __InitializeStaticFields to ensure, this deferred constant has been initialized (same as thread static field):\r\n                DeclaringPhpType.EmitThreadStaticInit(codeGenerator, constructedType);\r\n            }\r\n\r\n            return base.EmitGet(codeGenerator, constructedType, runtimeVisibilityCheck, fallbackName);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/DAssembly.cd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ClassDiagram MajorVersion=\"1\" MinorVersion=\"1\">\r\n  <Class Name=\"PHP.Core.Reflection.DAssembly\" Collapsed=\"true\">\r\n    <Position X=\"10.75\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAEEABAABAAAAJAAAACAAAAAAAAAAEAACAAAAAABAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpAssembly\" Collapsed=\"true\">\r\n    <Position X=\"9\" Y=\"3\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAEAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrAssembly\" Collapsed=\"true\">\r\n    <Position X=\"11.5\" Y=\"3\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpLibraryAssembly\" Collapsed=\"true\">\r\n    <Position X=\"13.75\" Y=\"3\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAIAEAAAAEAAAABAAAAAAAAAAAAAAAAAACAACAAKAgg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownAssembly\" Collapsed=\"true\">\r\n    <Position X=\"16\" Y=\"3\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.CodeDom.CodeDomAssembly\" Collapsed=\"true\">\r\n    <Position X=\"5.5\" Y=\"4.5\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAg=</HashCode>\r\n      <FileName>CodeDom\\CodeDomUnits.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PureAssembly\" Collapsed=\"true\">\r\n    <Position X=\"8\" Y=\"4.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAABAAAAAAAAAAAAAAAICADAACAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"10\" Y=\"4.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAACIAAEAAABAAAAAAAEAAAgAEIAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.TransientAssembly\" Collapsed=\"true\">\r\n    <Position X=\"12.25\" Y=\"4.5\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>ACACEAAAgIAAAAQAADAAgAABAABAAEAAAGAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.SingleScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"9\" Y=\"6\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAgAAAAAAAAAAAAAAEAAAgAAAAAAAACAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.MultiScriptAssembly\" Collapsed=\"true\">\r\n    <Position X=\"11.25\" Y=\"6\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAgAAAAgAAAAAABIBAAAAAUAAAgAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Assemblies.CLR.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Font Name=\"Segoe UI\" Size=\"9\" />\r\n</ClassDiagram>"
  },
  {
    "path": "Source/Core/Reflection/DMember.cd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ClassDiagram MajorVersion=\"1\" MinorVersion=\"1\">\r\n  <Class Name=\"PHP.Core.Reflection.DMember\" Collapsed=\"true\">\r\n    <Position X=\"25\" Y=\"0.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gEEQAAAISBABAIjEACAAoAIIEKAAAAAIAAAAAEgAAAg=</HashCode>\r\n      <FileName>Reflection\\Members.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DConstant\" Collapsed=\"true\">\r\n    <Position X=\"4.75\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAIAAAAAAAAAAAAIAABIAgAAAAAAAgAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DRoutine\" Collapsed=\"true\">\r\n    <Position X=\"16\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAgBCCQACAAAAAAAIAAEAAAAAABAMAAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DProperty\" Collapsed=\"true\">\r\n    <Position X=\"28.25\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAIAAAAAAAAAAAAIAAAoAAAAAAAAAAAEIAEAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DType\" Collapsed=\"true\">\r\n    <Position X=\"41.75\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>eRgBCEAAAKbCgAAAoSBAJIAwIYCoQMAAAIRAQYBIRAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownType\" Collapsed=\"true\">\r\n    <Position X=\"35\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oRACAEAAAIACAAAAgABgpAAAAAAAAAAIAAAAQAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.KnownType\" Collapsed=\"true\">\r\n    <Position X=\"41.75\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAIAAAAAAAAgAAAAAAIAAAAAAAIAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ConstructedType\" Collapsed=\"true\">\r\n    <Position X=\"48.5\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>qRABAAAAAIICAAAAgABApIAAIICoAQCoIIUAQCkCAAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownClassConstant\" Collapsed=\"true\">\r\n    <Position X=\"1.25\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>iAAAAAAAIAAAAAAAAAAAgAAABAAAAAAIAAAAAAgAAAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownGlobalConstant\" Collapsed=\"true\">\r\n    <Position X=\"3.5\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAAAAAAAIAAAAAAAAAAAgAAABAAAAAAIAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.KnownConstant\" Collapsed=\"true\">\r\n    <Position X=\"7\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AQIBAAAAJAAAAgAgEAEAgAAABAAAAQAAAAAAAAEAAQA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.KnownRoutine\" Collapsed=\"true\">\r\n    <Position X=\"13.75\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>EAIAAAAAAAAAAAAQAAEAoAYAAAAAQAAAAAgAAAACAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownFunction\" Collapsed=\"true\">\r\n    <Position X=\"19.25\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAAAAAAAAAAgACCQAAAAgAAAAAAAEAAIAAAAAIAAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownMethod\" Collapsed=\"true\">\r\n    <Position X=\"21.5\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>iAAAACAAAAAgACCQAAAAgAAAAAAAEAAIAAAAAIgAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.KnownProperty\" Collapsed=\"true\">\r\n    <Position X=\"27.25\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAAAAAAAAAoAQAAAAEAAAIAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownProperty\" Collapsed=\"true\">\r\n    <Position X=\"32.75\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>iAAAAAAAIAAAAAAAAAAAgIAAAgAAAAAIAAAAAAoAAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.GlobalType\" Collapsed=\"true\">\r\n    <Position X=\"37.25\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oRAAAAAAAIACAAAAAABApAAQAAAAAAIAAABAQAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PrimitiveType\" Collapsed=\"true\">\r\n    <Position X=\"39.5\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oRAAAAAAIYAKCAQgQABApAAAAAAKAgAAAAAAQAAAAAg=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.GenericParameter\" Collapsed=\"true\">\r\n    <Position X=\"41.75\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oZAABAAAEIACAAAAAABApAQAAAAAQIEBAIVAUAgJQEA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrType\" Collapsed=\"true\">\r\n    <Position X=\"44\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>qRAAAEAQAIQCEAAAIQBApAAAAQAIAAAIAAAAQAAAgAA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpType\" Collapsed=\"true\">\r\n    <Position X=\"46.25\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>+RBBIOAU5KWCEDABsAxgpI6QNQCIAFIgBIEAYBcAQQA=</HashCode>\r\n      <FileName>Reflection\\Types.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.GlobalConstant\" Collapsed=\"true\">\r\n    <Position X=\"5.75\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oABBACAIQACAAAAgEAEIEIIICAAAAAIIAAoEAAAAQAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClassConstant\" Collapsed=\"true\">\r\n    <Position X=\"8\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAABAAAAAACAAQAgEAEAIIQAAAAEAAAIAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpRoutine\" Collapsed=\"true\">\r\n    <Position X=\"11.5\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAABgQAYAAAhCSCgEAkEBEgQAQQJEEEAAEAEARAAAgE=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpLibraryFunction\" Collapsed=\"true\">\r\n    <Position X=\"14.75\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gUAAAAAAAAAgBCCAAAAAAAQAAAAEEAgIAAAAAIFAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrMethod\" Collapsed=\"true\">\r\n    <Position X=\"17\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gQAAAAgAAAAlACCQAAAAhAQgAAgEEAgIAAAAAIEAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpField\" Collapsed=\"true\">\r\n    <Position X=\"23.75\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAIFAQAAJRCRAQGgEgEBIIoAEggYQAAMAEABQAIAAQA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrPropertyBase\" Collapsed=\"true\">\r\n    <Position X=\"28.25\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrProperty\" Collapsed=\"true\">\r\n    <Position X=\"26\" Y=\"6.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AABAQAAAIAABAAQAAIAAAIAAAgAAAARAAAAACAIAQAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrField\" Collapsed=\"true\">\r\n    <Position X=\"28.25\" Y=\"6.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAAAAIAAIAAAAAAAAAAAAIAAAgAAAAAAAAAAAAIAAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrEvent\" Collapsed=\"true\">\r\n    <Position X=\"30.5\" Y=\"6.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAoABAAAIAABAAABAAAABIAAAgAAAAAIACAACAIIAAE=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpFunction\" Collapsed=\"true\">\r\n    <Position X=\"10.25\" Y=\"6.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>oABBACAIQACgASAgEAEgAAcIEAAAAAAIAAAAAYAAQAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n    <Lollipop Position=\"0.2\" />\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpMethod\" Collapsed=\"true\">\r\n    <Position X=\"12.5\" Y=\"6.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gAABAAAAAQCBASEgECEAIAQAEAgUAAAIACAAAYAAAAA=</HashCode>\r\n      <FileName>Reflection\\Methods.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Font Name=\"Segoe UI\" Size=\"9\" />\r\n</ClassDiagram>"
  },
  {
    "path": "Source/Core/Reflection/DMemberDesc.cd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ClassDiagram MajorVersion=\"1\" MinorVersion=\"1\">\r\n  <Class Name=\"PHP.Core.Reflection.DMemberDesc\" Collapsed=\"true\">\r\n    <Position X=\"15.75\" Y=\"0.5\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>CEEQAAAIQBAAAADEAAAAAAAIACAogAAAKAAAACgAAAA=</HashCode>\r\n      <FileName>Reflection\\Members.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DConstantDesc\" Collapsed=\"true\">\r\n    <Position X=\"1.75\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAIAAAAAAAAAAAAAAAAAAAAggAAACAAAIAgAAAA=</HashCode>\r\n      <FileName>Reflection\\Constants.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DRoutineDesc\" Collapsed=\"true\">\r\n    <Position X=\"6.5\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAIBAkABAAIIAgQAAAgAAELAAAAAAAIAAAkAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\MethodDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DPropertyDesc\" Collapsed=\"true\">\r\n    <Position X=\"11.25\" Y=\"1.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>IAAIABAAAAACBABAAAEAABEAAAEhiAAAAEAQAQABAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"22\" Y=\"1.75\" Width=\"1.5\" />\r\n    <NestedTypes>\r\n      <Delegate Name=\"PHP.Core.Reflection.DTypeDesc.GetMemberDictionary&lt;N, T&gt;\" Collapsed=\"true\">\r\n        <TypeIdentifier>\r\n          <NewMemberFileName>Reflection\\TypeDescs.cs</NewMemberFileName>\r\n        </TypeIdentifier>\r\n      </Delegate>\r\n      <Enum Name=\"PHP.Core.Reflection.DTypeDesc.LookupFlags\" Collapsed=\"true\">\r\n        <TypeIdentifier>\r\n          <NewMemberFileName>Reflection\\TypeDescs.cs</NewMemberFileName>\r\n        </TypeIdentifier>\r\n      </Enum>\r\n      <Enum Name=\"PHP.Core.Reflection.DTypeDesc.MakeGenericArgumentsResult\" Collapsed=\"true\">\r\n        <TypeIdentifier>\r\n          <NewMemberFileName>Reflection\\TypeDescs.cs</NewMemberFileName>\r\n        </TypeIdentifier>\r\n      </Enum>\r\n    </NestedTypes>\r\n    <TypeIdentifier>\r\n      <HashCode>GaICYqgAFQbAgrAASwkEwAkFgQBgxWoKATAoSYcTSNA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.UnknownTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"13.5\" Y=\"3.25\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAACAAQgAAwAABAAAAAAAAAAAAAAAAAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.GlobalTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"16\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAEAAAAAAAAAACAAQgAAQAAFAAAAAAAAAAAAAAABAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.GenericParameterDesc\" Collapsed=\"true\">\r\n    <Position X=\"18.25\" Y=\"3.25\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAACAAQhAAQAAFAAAAQAEBEAAAAQAAAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ConstructedTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"20.75\" Y=\"3.25\" Width=\"1.75\" />\r\n    <TypeIdentifier>\r\n      <HashCode>CAAIEAAAAAAAACAAQgAAwAABAAAgAAAAIAAAAAgAAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpTypeCompletionDesc\" Collapsed=\"true\">\r\n    <Position X=\"23.25\" Y=\"3.25\" Width=\"2\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAQADAAUgAAwAABAAAAABAAAAAQAAAAAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PrimitiveTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"26\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAABACAACQAQgAAwAABAAAIgAAAAAAAAAAAAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"28.25\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AIAAAAIIAAAQQGABQggBQAABAABAAEAoAAAQAQEFA4A=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrTypeDesc\" Collapsed=\"true\">\r\n    <Position X=\"30.5\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>gIAgAEAAAAAAgCAgwgAAYIgBAAFABAAAAAAAgAAGAIA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpRoutineDesc\" Collapsed=\"true\">\r\n    <Position X=\"4\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAAQAAAAAAAAABAAAggAAAAAAAABAAAAA=</HashCode>\r\n      <FileName>Reflection\\MethodDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.PhpLibraryFunctionDesc\" Collapsed=\"true\">\r\n    <Position X=\"6.25\" Y=\"3.25\" Width=\"2\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAAAAAAAAAAAABAAAggAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\MethodDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrMethodDesc\" Collapsed=\"true\">\r\n    <Position X=\"9\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAAAAAAAAAAAABAAAggAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\MethodDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.DPhpFieldDesc\" Collapsed=\"true\">\r\n    <Position X=\"11.25\" Y=\"3.25\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>IAAAAAAAAAAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\Properties.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrGenericMethodDesc\" Collapsed=\"true\">\r\n    <Position X=\"9\" Y=\"4.75\" Width=\"2\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAAAAAAAAAAAAAAAABAAAAAggAAAAAABAAQAA=</HashCode>\r\n      <FileName>Reflection\\MethodDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Class Name=\"PHP.Core.Reflection.ClrDelegateDesc\" Collapsed=\"true\">\r\n    <Position X=\"30.5\" Y=\"4.75\" Width=\"1.5\" />\r\n    <TypeIdentifier>\r\n      <HashCode>AAAAAAAAQAAAACAAAAAAAIAAAAAAAAAAAAAAAAAAAAA=</HashCode>\r\n      <FileName>Reflection\\TypeDescs.cs</FileName>\r\n    </TypeIdentifier>\r\n  </Class>\r\n  <Font Name=\"Segoe UI\" Size=\"9\" />\r\n</ClassDiagram>"
  },
  {
    "path": "Source/Core/Reflection/Declarations.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\tpublic enum DeclarationKind\r\n\t{\r\n\t\tType,\r\n\t\tFunction,\r\n\t\tConstant\r\n\t}\r\n\r\n\tpublic interface IDeclaree\r\n\t{\r\n\t\tQualifiedName QualifiedName { get; }\r\n\t\tVersionInfo Version { get; set; }\r\n\t\tDeclaration/*!*/ Declaration { get; }\r\n\t\tstring/*!*/ FullName { get; }\r\n\r\n\t\tvoid ReportRedeclaration(ErrorSink/*!*/ errors);\r\n\t}\r\n\r\n\tpublic sealed class DeclarationGroup\r\n\t{\r\n\t\tpublic int UnconditionalCount { get { return unconditionalCount; } }\r\n\t\tprivate int unconditionalCount;\r\n\r\n\t\tpublic int ConditionalCount { get { return conditionalCount; } }\r\n\t\tprivate int conditionalCount;\r\n\r\n\t\tpublic int PartialCount { get { return partialCount; } }\r\n\t\tprivate int partialCount;\r\n\r\n\t\tpublic Declaration Aggregate { get { return aggregate; } set { aggregate = value; } }\r\n\t\tprivate Declaration aggregate;\r\n\r\n\t\tpublic DeclarationGroup(bool isConditional, bool isPartial)\r\n\t\t{\r\n\t\t\tthis.conditionalCount = 0;\r\n\t\t\tthis.unconditionalCount = 0;\r\n\t\t\tthis.partialCount = 0;\r\n\t\t\tthis.aggregate = null;\r\n\r\n\t\t\tAddDeclaration(isConditional, isPartial);\r\n\t\t}\r\n\r\n\t\tpublic void AddDeclaration(bool isConditional, bool isPartial)\r\n\t\t{\r\n\t\t\tDebug.Assert(!(isPartial && isConditional), \"partial cannot be conditional\");\r\n\r\n\t\t\tif (isPartial) partialCount++;\r\n\t\t\telse if (isConditional) conditionalCount++;\r\n\t\t\telse unconditionalCount++;\r\n\t\t}\r\n\t}\r\n\r\n\tinternal interface IDeclarationNode\r\n\t{\r\n\t\tvoid PreAnalyze(Analyzer/*!*/ analyzer);\r\n\t\tvoid AnalyzeMembers(Analyzer/*!*/ analyzer);\r\n\t}\r\n\r\n\tpublic sealed class Declaration\r\n\t{\r\n\t\tpublic bool IsConditional { get { return isConditional; } }\r\n\t\tprivate bool isConditional;\r\n\r\n        public CompilationSourceUnit/*!*/ SourceUnit { get { return sourceUnit; } }\r\n        private readonly CompilationSourceUnit/*!*/ sourceUnit;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compile-time non-pure only. Used when added to the containing compilation unit.\r\n\t\t/// </summary>\r\n\t\tpublic Scope Scope { get { return scope; } internal set /* friend PureCompilationUnit */ { scope = value; } }\r\n\t\tprivate Scope scope;\r\n\r\n\t\tpublic IDeclaree/*!*/ Declaree { get { return declaree; } }\r\n\t\tprivate readonly IDeclaree/*!*/ declaree;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Types stores their AST nodes here to allow fast member-analysis.\r\n\t\t/// Should be nulled by the analysis (to cut AST off).\r\n\t\t/// </summary>\r\n\t\tinternal IDeclarationNode Node { get { return node; } /* friend ClassDecl */  set { node = value; } }\r\n\t\tprivate IDeclarationNode node;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declaration group or null if there is only single declaration.\r\n\t\t/// Can be non-null for both conditional and unconditional decls (during merging).\r\n\t\t/// </summary>\r\n\t\tpublic DeclarationGroup Group { get { return group; } set { group = value; } }\r\n\t\tprivate DeclarationGroup group;\r\n\r\n        public Text.Span Span { get { return span; } }\r\n        private readonly Text.Span span;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set by analyzer.\r\n\t\t/// </summary>\r\n        public bool IsUnreachable { get { return isUnreachable; } internal set { isUnreachable = value; } }\r\n        private bool isUnreachable = true;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set by analyzer.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsSynthetic { get { return isSynthetic; } internal set { isSynthetic = value; } }\r\n\t\tprivate bool isSynthetic = false;\r\n\r\n\t\tpublic bool IsPartial { get { return isPartial; } internal /* friend PureCompilationUnit */ set { isPartial = value; } }\r\n\t\tprivate bool isPartial = false;\r\n\r\n\t\t// if function is inside unknown class it can't be declared at compile time\r\n\t\tprivate bool isInsideIncompleteClass = false;\r\n\t\tpublic bool IsInsideIncompleteClass { get { return isInsideIncompleteClass; } internal set { isInsideIncompleteClass = value; } }\r\n\r\n        public Declaration(CompilationSourceUnit/*!*/ sourceUnit, IDeclaree/*!*/ declaree, bool isPartial, bool isConditional,\r\n            Scope scope, Text.Span position)\r\n\t\t{\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t\tthis.declaree = declaree;\r\n\t\t\tthis.scope = scope;\r\n\t\t\tthis.span = position;\r\n\t\t\tthis.isPartial = isPartial;\r\n\t\t\tthis.isConditional = isConditional;\r\n\t\t}\r\n\r\n\t\tpublic Declaration GetExactVersion(Declaration/*!*/ declaration)\r\n\t\t{\r\n\t\t\tIDeclaree declaree = this.declaree;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tif (ReferenceEquals(declaree, declaration.Declaree))\r\n\t\t\t\t\treturn declaree.Declaration;\r\n\r\n\t\t\t\tdeclaree = declaree.Version.Next;\r\n\t\t\t}\r\n\t\t\twhile (declaree != null);\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic object GetNode()\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new InvalidOperationException();\r\n\r\n\t\t\treturn node;\r\n\t\t}\r\n\r\n\t\tinternal static IEnumerable<T> GetDeclarees<T>(IEnumerable<Declaration>/*!*/ table)\r\n\t\t\twhere T : IDeclaree\r\n\t\t{\r\n\t\t\tforeach (Declaration decl in table)\r\n\t\t\t\tyield return (T)decl.Declaree;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Inclusions.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Text.RegularExpressions;\r\nusing System.CodeDom.Compiler;\r\nusing System.CodeDom;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\tinternal enum Characteristic\r\n\t{\r\n\t\tStaticArgEvaluated,\r\n\t\tStaticArgReplaced,\r\n\t\tStaticAutoInclusion,\r\n\t\tDynamic\r\n\t}\r\n\r\n\t#region InclusionMapping\r\n\r\n\t/// <summary>\r\n\t/// Defines an inclusion mapping.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic struct InclusionMapping\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Name identifying the mapping.\r\n\t\t/// </summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate string name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Replacement.\r\n\t\t/// </summary>\r\n\t\tpublic string Replacement { get { return replacement; } }\r\n\t\tprivate string/*!*/ replacement;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pattern.\r\n\t\t/// </summary>\r\n\t\tpublic Regex Pattern { get { return pattern; } }\r\n\t\tprivate Regex/*!*/ pattern;\r\n\r\n        /// <summary>\r\n        /// Group name interpreted as the source root of application, <see cref=\"ApplicationConfiguration.CompilerSection.SourceRoot\"/>.\r\n        /// </summary>\r\n        private const string SourceRootGroupName = \"${SourceRoot}\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an inclusion mapping.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ArgumentException\"><paramref name=\"pattern\"/> is not a valid regular expression pattern.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"pattern\"/> or <paramref name=\"replacement\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic InclusionMapping(string/*!*/ pattern, string/*!*/ replacement, string name)\r\n\t\t{\r\n\t\t\tif (pattern == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"pattern\");\r\n\t\t\tif (replacement == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"replacement\");\r\n\r\n\t\t\tthis.pattern = new Regex(pattern, RegexOptions.IgnoreCase);\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.replacement = replacement;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Translates expression (a parameter of include/require) according to the pattern specified in the configuration.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expression\">The expression to be translated via regexp pattern.</param>\r\n\t\t/// <param name=\"mappings\">A list of mappings.</param>\r\n        /// <param name=\"sourceRoot\">The <see cref=\"ApplicationConfiguration.CompilerSection.SourceRoot\"/> used to patch <see cref=\"InclusionMapping.Replacement\"/> string.</param>\r\n\t\tinternal static string TranslateExpression(IEnumerable<InclusionMapping>/*!*/ mappings, string/*!*/ expression, string sourceRoot)\r\n\t\t{\r\n\t\t\tDebug.Assert(mappings != null && expression != null);\r\n\t\t\tstring trimmed_expression = expression.Trim();\r\n\r\n\t\t\tforeach (InclusionMapping mapping in mappings)\r\n\t\t\t{\r\n\t\t\t\t// the regex not empty => perform translation:\r\n\t\t\t\tMatch m = mapping.Pattern.Match(trimmed_expression);\r\n\r\n\t\t\t\t// regex matches:\r\n                if (m.Success)\r\n                    return m.Result(mapping.Replacement.Replace(SourceRootGroupName, sourceRoot));\r\n\t\t\t}\r\n\r\n\t\t\t// no regex does match:\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region InclusionGraphBuilder\r\n\r\n\tinternal sealed class InclusionGraphBuilder : IDisposable\r\n\t{\r\n\t\tpublic CompilationContext/*!*/ Context { get { return context; } }\r\n\t\tprivate readonly CompilationContext/*!*/ context;\r\n\r\n\t\tpublic Dictionary<PhpSourceFile, CompilationUnit> Nodes { get { return nodes; } }\r\n\t\tprivate readonly Dictionary<PhpSourceFile, CompilationUnit> nodes = new Dictionary<PhpSourceFile, CompilationUnit>();\r\n\r\n\t\tpublic List<StaticInclusion> PendingInclusions { get { return pendingInclusions; } }\r\n\t\tprivate readonly List<StaticInclusion> pendingInclusions = new List<StaticInclusion>();\r\n\r\n\t\tpublic InclusionGraphBuilder(CompilationContext/*!*/ context)\r\n\t\t{\r\n\t\t\tthis.context = context;\r\n\t\t\tStatistics.Inclusions.InitializeGraph();\r\n\t\t}\r\n\r\n\t\t#region Graph Building Operations\r\n\r\n\t\tinternal void NodeAdded(CompilationUnit/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\tStatistics.Inclusions.AddNode(compilationUnit);\r\n\t\t}\r\n\r\n\t\tinternal void EdgeAdded(StaticInclusion/*!*/ staticInclusion)\r\n\t\t{\r\n\t\t\tStatistics.Inclusions.AddEdge(staticInclusion);\r\n\t\t}\r\n\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\tStatistics.Inclusions.BakeGraph();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic bool AnalyzeDfsTree(PhpSourceFile/*!*/ rootSourceFile)\r\n\t\t{\r\n\t\t\tCompilationUnit root = GetNode(rootSourceFile);\r\n\r\n\t\t\tScriptCompilationUnit rootScript = root as ScriptCompilationUnit;\r\n\t\t\tif (rootScript != null && rootScript.State == CompilationUnit.States.Initial)\r\n\t\t\t{\r\n\t\t\t\tAnalyzer analyzer = null;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// builds the tree of parsed units via DFS:\r\n\t\t\t\t\tProcessNode(rootScript);\r\n\r\n\t\t\t\t\t// finishes pending inclusions via MFP:\r\n\t\t\t\t\tProcessPendingInclusions();\r\n\r\n\t\t\t\t\tanalyzer = new Analyzer(context);\r\n\r\n\t\t\t\t\t// pre-analysis:\r\n\t\t\t\t\trootScript.PreAnalyzeRecursively(analyzer);\r\n\r\n\t\t\t\t\t// member analysis:\r\n\t\t\t\t\trootScript.AnalyzeMembersRecursively(analyzer);\r\n\r\n\t\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t\t// full analysis:\r\n\t\t\t\t\trootScript.AnalyzeRecursively(analyzer);\r\n\r\n\t\t\t\t\tif (context.Errors.AnyFatalError) return false;\r\n\r\n\t\t\t\t\t// perform post analysis:\r\n\t\t\t\t\tanalyzer.PostAnalyze();\r\n\r\n\t\t\t\t\tif (context.Errors.AnyError) return false;\r\n\r\n\t\t\t\t\t// TODO:\r\n\t\t\t\t\t// define constructed types:\r\n\t\t\t\t\tanalyzer.DefineConstructedTypeBuilders();\r\n\t\t\t\t}\r\n\t\t\t\tcatch (CompilerException)\r\n\t\t\t\t{\r\n\t\t\t\t\troot.State = CompilationUnit.States.Erroneous;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (context.Errors.AnyError) return false;\r\n\t\t\t}\r\n\t\t\telse if (root.State != CompilationUnit.States.Analyzed && root.State != CompilationUnit.States.Reflected)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic void EmitAllUnits(CodeGenerator/*!*/ codeGenerator)\r\n\t\t{\r\n#if DEBUG\r\n\t\t\tConsole.WriteLine(\"Generating code ...\");\r\n#endif\r\n\r\n\t\t\tforeach (ScriptCompilationUnit unit in SelectNonReflectedUnits(nodes.Values))\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"IG\", \"DefineBuilders: \" + unit.SourceUnit.SourceFile);\r\n\t\t\t\tunit.DefineBuilders(context);\r\n\t\t\t}\r\n\r\n\t\t\tforeach (ScriptCompilationUnit unit in SelectNonReflectedUnits(nodes.Values))\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"IG\", \"Emit: \" + unit.SourceUnit.SourceFile);\r\n\t\t\t\tunit.Emit(codeGenerator);\r\n\t\t\t}\r\n\r\n\t\t\tforeach (ScriptCompilationUnit unit in SelectNonReflectedUnits(nodes.Values))\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"IG\", \"Bake: \" + unit.SourceUnit.SourceFile);\r\n\t\t\t\tunit.Bake();\r\n\t\t\t}\r\n\r\n\t\t\tforeach (ScriptCompilationUnit unit in SelectNonReflectedUnits(nodes.Values))\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"IG\", \"Persist: \" + unit.SourceUnit.SourceFile);\r\n\t\t\t\tcodeGenerator.Context.Manager.Persist(unit, codeGenerator.Context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Selects only units that are in other than 'Reflected' state. This prevents us from \r\n\t\t/// trying to build 'Reflected' units (which is of course impossible)\r\n\t\t/// </summary>\r\n\t\tprivate IEnumerable<ScriptCompilationUnit> SelectNonReflectedUnits(Dictionary<PhpSourceFile, \r\n\t\t\tCompilationUnit>.ValueCollection values)\r\n\t\t{\r\n\t\t\tforeach (CompilationUnit unit in values)\r\n\t\t\t\tif (unit.State != CompilationUnit.States.Reflected) yield return (ScriptCompilationUnit)unit;\r\n\t\t}\r\n        \r\n\t\tpublic void CleanAllUnits(CompilationContext/*!*/ context, bool successful)\r\n\t\t{\r\n\t\t\tforeach (CompilationUnit unit in nodes.Values)\r\n\t\t\t\tunit.CleanUp(context, successful);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the node of the graph associated with the specified source file.\r\n\t\t/// First, look up the table of processed nodes. \r\n\t\t/// If not there, check compiled units maintained by the manager.\r\n\t\t/// If it is not found in the manager's cache the source file is locked so that other compilers will \r\n\t\t/// wait until we finish compilation of the node. The new node is created if the compilation unit doesn't exist for it.\r\n\t\t/// </summary>\r\n\t\tinternal CompilationUnit GetNode(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n\t\t\tCompilationUnit result;\r\n\t\t\tif (!nodes.TryGetValue(sourceFile, out result))\r\n\t\t\t{\r\n\t\t\t\tScriptModule module;\r\n\r\n                module = (ScriptModule)context.Manager.LockForCompiling(sourceFile, context);\r\n\r\n\t\t\t\tif (module != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = module.CompilationUnit;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tScriptCompilationUnit scriptResult = new ScriptCompilationUnit();\r\n\t\t\t\t\tscriptResult.SourceUnit = new SourceFileUnit(scriptResult, sourceFile, context.Config.Globalization.PageEncoding);\r\n\t\t\t\t\tresult = scriptResult;\r\n\t\t\t\t}\r\n\t\t\t\tnodes.Add(sourceFile, result);\r\n\t\t\t\tNodeAdded(result);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate void ProcessNode(ScriptCompilationUnit/*!*/ node)\r\n\t\t{\r\n\t\t\tDebug.Assert(node.State == CompilationUnit.States.Initial);\r\n\r\n\t\t\t// parses the unit and fills its tables:\r\n\t\t\tnode.Parse(context);\r\n\r\n\t\t\t// resolves outgoing edges:\r\n\t\t\tnode.ResolveInclusions(this);\r\n\r\n\t\t\t// follow DFS tree edges:\r\n\t\t\tforeach (StaticInclusion edge in node.Inclusions)\r\n\t\t\t{\r\n\t\t\t\tswitch (edge.Includee.State)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase CompilationUnit.States.Initial:\r\n\t\t\t\t\t\tDebug.Assert(edge.Includee is ScriptCompilationUnit);\r\n\r\n\t\t\t\t\t\t// recursive descent:\r\n\t\t\t\t\t\tProcessNode((ScriptCompilationUnit)edge.Includee); // TODO: consider!\r\n\t\t\t\t\t\tnode.MergeTables(edge);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CompilationUnit.States.Parsed:\r\n\t\t\t\t\t\t// edge closing a cycle:\r\n\t\t\t\t\t\tpendingInclusions.Add(edge);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CompilationUnit.States.Processed:\r\n\t\t\t\t\t\t// transverse edge to already processed subtree:\r\n\t\t\t\t\t\tnode.MergeTables(edge);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CompilationUnit.States.Compiled:\r\n\t\t\t\t\t\t// descent edge to the compiled node:\r\n\t\t\t\t\t\tedge.Includee.Reflect();\r\n\t\t\t\t\t\tnode.MergeTables(edge);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CompilationUnit.States.Analyzed:\r\n\t\t\t\t\tcase CompilationUnit.States.Reflected:\r\n\t\t\t\t\t\t// descent or transverse edge to already analyzed or compiled and reflected node:\r\n\t\t\t\t\t\tnode.MergeTables(edge);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Unexpected CU state\");\r\n\t\t\t\t\t\tthrow null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tnode.State = CompilationUnit.States.Processed;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Minimal fixpoint algorithm.\r\n\t\t/// </summary>\r\n\t\tprivate void ProcessPendingInclusions()\r\n\t\t{\r\n\t\t\twhile (pendingInclusions.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tStaticInclusion inclusion = pendingInclusions[pendingInclusions.Count - 1];\r\n\t\t\t\tpendingInclusions.RemoveAt(pendingInclusions.Count - 1);\r\n\r\n\t\t\t\tDebug.Assert(inclusion.Includer.State == CompilationUnit.States.Processed);\r\n\t\t\t\tDebug.Assert(inclusion.Includee.State == CompilationUnit.States.Processed);\r\n\r\n\t\t\t\tif (inclusion.Includer.MergeTables(inclusion) > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (StaticInclusion incoming in inclusion.Includer.Includers)\r\n\t\t\t\t\t\tpendingInclusions.Add(incoming);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region StaticInclusion\r\n\r\n\tpublic sealed class StaticInclusion\r\n\t{\r\n\t\tpublic ScriptCompilationUnit/*!*/ Includer { get { return includer; } }\r\n\t\tprivate readonly ScriptCompilationUnit/*!*/ includer;\r\n\r\n\t\tpublic CompilationUnit/*!*/ Includee { get { return includee; } }\r\n\t\tprivate readonly CompilationUnit/*!*/ includee;\r\n\r\n\t\tpublic Scope Scope { get { return scope; } }\r\n\t\tprivate readonly Scope scope;\r\n\r\n\t\tpublic InclusionTypes InclusionType { get { return inclusionType; } }\r\n\t\tprivate readonly InclusionTypes inclusionType;\r\n\r\n\t\tpublic bool IsConditional { get { return isConditional; } }\r\n\t\tprivate bool isConditional;\r\n\r\n\t\tpublic StaticInclusion(ScriptCompilationUnit/*!*/ includer, CompilationUnit/*!*/ includee, Scope scope,\r\n\t\t\tbool isConditional, InclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\tthis.scope = scope;\r\n\t\t\tthis.inclusionType = inclusionType;\r\n\t\t\tthis.includee = includee;\r\n\t\t\tthis.includer = includer;\r\n\t\t\tthis.isConditional = isConditional;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Inclusions.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\nusing System.Text.RegularExpressions;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Inclusions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Text.RegularExpressions;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t/// <summary>\r\n\t/// Represents declaration in the compilation unit. \r\n\t/// Declaration can be either known (when compiling) or \r\n\t/// reflected (when reflecting)\r\n\t/// </summary>\r\n\tpublic abstract class ScopedDeclaration<T> where T : DMember\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tprotected ScopedDeclaration(Scope scope)\r\n\t\t{\r\n\t\t\tthis.scope = scope;\r\n\t\t}\r\n\r\n\t\tpublic Scope Scope { get { return scope; } }\r\n\t\tprivate Scope scope;\r\n\r\n\t\tpublic abstract T Member { get; }\r\n\t\tpublic abstract ScopedDeclaration<T> CloneWithScope(Scope scope);\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Known declaration - used by ScriptCompilationUnit\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"{Scope}: {Declaration.Declaree.FullName} (known)\")]\r\n\tpublic class KnownScopedDeclaration<T> : ScopedDeclaration<T> \r\n\t\twhere T : DMember\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tpublic Declaration/*!*/ Declaration { get { return declaration; } }\r\n\t\tprivate Declaration/*!*/ declaration;\r\n\t\tpublic override T Member { get { return (T)declaration.Declaree; } }\r\n\r\n\t\tpublic KnownScopedDeclaration(Scope scope, Declaration/*!*/ declaration) : base(scope)\r\n\t\t{\r\n\t\t\tthis.declaration = declaration;\r\n\t\t}\r\n\r\n\t\tpublic override ScopedDeclaration<T> CloneWithScope(Scope scope)\r\n\t\t{\r\n\t\t\treturn new KnownScopedDeclaration<T>(scope, declaration);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Reflected declaration - used by ReflectedCompilationUnit\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"{Scope}: {Declaration.Member.Name} (reflected)\")]\r\n\tpublic class ReflectedScopedDeclaration<T> : ScopedDeclaration<T>\r\n\t\twhere T : DMember\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tpublic override T/*!*/ Member { get { return member; } }\r\n\t\tprivate T/*!*/ member;\r\n\r\n\t\tpublic ReflectedScopedDeclaration(Scope scope, T/*!*/ member)\r\n\t\t\t: base(scope)\r\n\t\t{\r\n\t\t\tthis.member = member;\r\n\t\t}\r\n\r\n\t\tpublic override ScopedDeclaration<T> CloneWithScope(Scope scope)\r\n\t\t{\r\n\t\t\treturn new ReflectedScopedDeclaration<T>(scope, member);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#region InclusionTypesEnum\r\n\r\n\t[DebuggerNonUserCode]\r\n    public static partial class InclusionTypesEnum\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Returns whether a specified inclusion is \"once-inclusion\".\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsOnceInclusion(InclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\treturn inclusionType == InclusionTypes.IncludeOnce || inclusionType == InclusionTypes.RequireOnce;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether a specified inclusion is auto-inclusion (auto-prepended/appended file).\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsAutoInclusion(InclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\treturn inclusionType == InclusionTypes.Prepended || inclusionType == InclusionTypes.Appended;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether a specified inclusion must succeed.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsMustInclusion(InclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\treturn inclusionType != InclusionTypes.IncludeOnce && inclusionType != InclusionTypes.Include;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Members.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t/// <summary>\r\n\t/// Return type of <see cref=\"DTypeDesc.GetMember\"/>.\r\n\t/// </summary>\r\n\tpublic enum GetMemberResult\r\n\t{\r\n\t\t/// <summary>The member was found and is visible for the caller.</summary>\r\n\t\tOK,\r\n\r\n\t\t/// <summary>The member was not found.</summary>\r\n\t\tNotFound,\r\n\r\n\t\t/// <summary>The member was found but is invisible for the caller.</summary>\r\n\t\tBadVisibility,\r\n\t}\r\n\r\n    [DebuggerNonUserCode]\r\n    public static partial class Enums\r\n    {\r\n        #region GetUserEntryPoint Attributes\r\n\r\n        public static PhpMemberAttributes GetMemberAttributes(MethodInfo/*!*/ info)\r\n        {\r\n            PhpMemberAttributes value = PhpMemberAttributes.None;\r\n\r\n            if (info.IsPublic) value |= PhpMemberAttributes.Public;\r\n            else if (info.IsFamily) value |= PhpMemberAttributes.Protected;\r\n            else if (info.IsPrivate) value |= PhpMemberAttributes.Private;\r\n\r\n            if (info.IsStatic)\r\n            {\r\n                value |= (PhpMemberAttributes.Static | PhpMemberAttributes.AppStatic);\r\n            }\r\n\r\n            // \"finalness\" and \"abstractness\" is stored as attributes, if the method is static, not in MethodInfo\r\n            // (static+abstract, static+final are not allowed in CLR)\r\n            //Debug.Assert(!(info.IsStatic && (info.IsFinal || info.IsAbstract)), \"User static method cannot have CLR final or abstract modifier.\");\r\n\r\n            if (info.IsAbstract || info.IsDefined(typeof(PhpAbstractAttribute), false))\r\n                value |= PhpMemberAttributes.Abstract;\r\n\r\n            if (info.IsFinal || info.IsDefined(typeof(PhpFinalAttribute), false))\r\n                value |= PhpMemberAttributes.Final;\r\n\r\n            return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// <para>Returns <see cref=\"MethodAttributes\"/> that are used while emitting the method.</para>\r\n        /// <para>NOTE: Combinations static/final and static/abstract can be returned. Such methods are\r\n        /// not allowed in CLI, so final or abstract flag must be removed and PhpFinalAttribute or\r\n        /// PhpAbstractAttribute added instead.</para>\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static MethodAttributes ToMethodAttributes(PhpMemberAttributes value)\r\n        {\r\n            MethodAttributes result = 0;\r\n            PhpMemberAttributes visibility = value & PhpMemberAttributes.VisibilityMask;\r\n\r\n            if (visibility == PhpMemberAttributes.Public) result |= MethodAttributes.Public;\r\n            else if (visibility == PhpMemberAttributes.Private) result |= MethodAttributes.Private;\r\n            else if (visibility == PhpMemberAttributes.Protected) result |= MethodAttributes.Family;\r\n\r\n            if ((value & PhpMemberAttributes.Final) != 0)\r\n                result |= MethodAttributes.Final;\r\n\r\n            if ((value & PhpMemberAttributes.Static) != 0)\r\n            {\r\n                result |= MethodAttributes.Static;\r\n\r\n                // abstract statics are not allowed in CLR => custom attribute is added\r\n                // final statics as well\r\n            }\r\n            else\r\n            {\r\n                result |= MethodAttributes.Virtual;\r\n\r\n                if ((value & PhpMemberAttributes.Abstract) != 0)\r\n                    result |= MethodAttributes.Abstract;\r\n            }\r\n\r\n            Debug.Assert((value & PhpMemberAttributes.Interface) == 0);\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static void DefineCustomAttributes(PhpMemberAttributes attrs, MethodInfo/*!*/ method)\r\n        {\r\n            Debug.Assert(method != null);\r\n\r\n            if ((attrs & PhpMemberAttributes.Static) != 0)\r\n            {\r\n                if ((attrs & PhpMemberAttributes.Abstract) != 0)\r\n                    ReflectionUtils.SetCustomAttribute(method, AttributeBuilders.PhpAbstract);\r\n\r\n                if ((attrs & PhpMemberAttributes.Final) != 0)\r\n                    ReflectionUtils.SetCustomAttribute(method, AttributeBuilders.PhpFinal);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Property Attributes\r\n\r\n        public static PropertyAttributes ToPropertyAttributes(PhpMemberAttributes value)\r\n        {\r\n            return PropertyAttributes.None;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Field Attributes\r\n\r\n        public static PhpMemberAttributes GetMemberAttributes(FieldInfo/*!*/ info)\r\n        {\r\n            PhpMemberAttributes value = PhpMemberAttributes.None;\r\n\r\n            if (info.IsPublic) value |= PhpMemberAttributes.Public;\r\n            else if (info.IsFamily) value |= PhpMemberAttributes.Protected;\r\n            else if (info.IsPrivate) value |= PhpMemberAttributes.Private;\r\n\r\n            if (info.IsStatic)\r\n            {\r\n                value |= PhpMemberAttributes.Static;\r\n\r\n                // AppStatic == Static on Silverlight\r\n#if !SILVERLIGHT\r\n                if (!info.IsDefined(typeof(ThreadStaticAttribute), false))\r\n                    value |= PhpMemberAttributes.AppStatic;\r\n#else\r\n\t\t\t\tvalue |= PhpMemberAttributes.AppStatic;\r\n#endif\r\n            }\r\n\r\n            return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines lowest accessibility of all property accessors and other member attributes.\r\n        /// </summary>\r\n        public static PhpMemberAttributes GetPropertyAttributes(PropertyInfo/*!*/info)\r\n        {\r\n            var accessors = info.GetAccessors(true);\r\n            PhpMemberAttributes attributes = PhpMemberAttributes.None;\r\n\r\n            // find lowest visibility in all property accessors:\r\n            for (int i = 0; i < accessors.Length; i++)\r\n            {\r\n                if (accessors[i].IsStatic)\r\n                    attributes |= PhpMemberAttributes.Static;\r\n\r\n                if (accessors[i].IsPrivate)\r\n                    attributes |= PhpMemberAttributes.Private;\r\n                else if (accessors[i].IsFamily)\r\n                    attributes |= PhpMemberAttributes.Protected;\r\n                //else if (accessors[i].IsPublic)\r\n                //    visibility |= PhpMemberAttributes.Public;\r\n            }\r\n\r\n            return attributes;\r\n        }\r\n\r\n        public static FieldAttributes ToFieldAttributes(PhpMemberAttributes value)\r\n        {\r\n            FieldAttributes result = 0;\r\n            PhpMemberAttributes visibility = value & PhpMemberAttributes.VisibilityMask;\r\n\r\n            if (visibility == PhpMemberAttributes.Public) result |= FieldAttributes.Public;\r\n            else if (visibility == PhpMemberAttributes.Private) result |= FieldAttributes.Private;\r\n            else if (visibility == PhpMemberAttributes.Protected) result |= FieldAttributes.Family;\r\n\r\n            if ((value & PhpMemberAttributes.Static) != 0)\r\n                result |= FieldAttributes.Static;\r\n\r\n            Debug.Assert((value & PhpMemberAttributes.Interface) == 0);\r\n            Debug.Assert((value & PhpMemberAttributes.Abstract) == 0);\r\n            Debug.Assert((value & PhpMemberAttributes.Final) == 0);\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static void DefineCustomAttributes(PhpMemberAttributes attrs, FieldBuilder/*!*/ fieldBuilder)\r\n        {\r\n            Debug.Assert(fieldBuilder != null);\r\n\r\n            // AppStatic == Static on Silverlight\r\n#if !SILVERLIGHT\r\n            // static but not app-static => thread static\r\n            if ((attrs & PhpMemberAttributes.AppStatic) == PhpMemberAttributes.Static)\r\n                fieldBuilder.SetCustomAttribute(AttributeBuilders.ThreadStatic);\r\n#endif\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Type Attributes\r\n\r\n        public static PhpMemberAttributes GetMemberAttributes(Type/*!*/ type)\r\n        {\r\n            PhpMemberAttributes value = PhpMemberAttributes.None;\r\n\r\n            if (type.IsDefined(typeof(PhpNamespacePrivateAttribute), false))\r\n                value |= PhpMemberAttributes.NamespacePrivate;\r\n            else\r\n                value |= PhpMemberAttributes.Public;\r\n\r\n            if (type.IsSealed)\r\n            {\r\n                value |= PhpMemberAttributes.Final;\r\n            }\r\n            else\r\n            {\r\n                if (type.IsInterface) value |= PhpMemberAttributes.Interface | PhpMemberAttributes.Abstract;\r\n                else if (type.IsAbstract) value |= PhpMemberAttributes.Abstract;\r\n\r\n                if (type.IsDefined(typeof(PhpTraitAttribute), false))\r\n                    value |= PhpMemberAttributes.Trait;\r\n            }\r\n\r\n            return value;\r\n        }\r\n\r\n        public static TypeAttributes ToTypeAttributes(PhpMemberAttributes attrs)\r\n        {\r\n            TypeAttributes result = TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit;\r\n\r\n            result = TypeAttributes.Public;\r\n\r\n            Debug.Assert((attrs & PhpMemberAttributes.VisibilityMask) != PhpMemberAttributes.Protected);\r\n\r\n            if ((attrs & PhpMemberAttributes.Abstract) != 0)\r\n                result |= TypeAttributes.Abstract;\r\n\r\n            if ((attrs & PhpMemberAttributes.Interface) != 0)\r\n                result |= TypeAttributes.Interface;\r\n            else\r\n                result |= TypeAttributes.Class | TypeAttributes.Serializable;\r\n\r\n            if ((attrs & PhpMemberAttributes.Final) != 0)\r\n                result |= TypeAttributes.Sealed;\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static void DefineCustomAttributes(PhpMemberAttributes attrs, TypeBuilder/*!*/ typeBuilder)\r\n        {\r\n            Debug.Assert(typeBuilder != null);\r\n\r\n            if ((attrs & PhpMemberAttributes.Trait) != 0)\r\n                typeBuilder.SetCustomAttribute(AttributeBuilders.ImplementsTrait);\r\n            // no attributes so far\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Visibility\r\n\r\n        public static string VisibilityToString(PhpMemberAttributes value)\r\n        {\r\n            PhpMemberAttributes visibility = value & PhpMemberAttributes.VisibilityMask;\r\n\r\n            if (visibility == PhpMemberAttributes.Public) return \"public\";\r\n            else if (visibility == PhpMemberAttributes.Protected) return \"protected\";\r\n            else if (visibility == PhpMemberAttributes.Private) return \"private\";\r\n\r\n            Debug.Fail(null);\r\n            return null;\r\n        }\r\n\r\n        public static bool VisibilityEquals(PhpMemberAttributes attr1, PhpMemberAttributes attr2)\r\n        {\r\n            return ((attr1 & PhpMemberAttributes.VisibilityMask) == (attr2 & PhpMemberAttributes.VisibilityMask));\r\n        }\r\n\r\n        public static bool GenericParameterAttrTest(GenericParameterAttributes parameterAttrs,\r\n            GenericParameterAttributes testAttrs)\r\n        {\r\n            return ((parameterAttrs & testAttrs) == testAttrs);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Debug\r\n\r\n#if DEBUG\r\n\r\n        internal static void Print(PhpMemberAttributes value, TextWriter output)\r\n        {\r\n            if ((value & PhpMemberAttributes.Abstract) != 0) output.Write(\"abstract \");\r\n            if ((value & PhpMemberAttributes.Final) != 0) output.Write(\"final \");\r\n\r\n            output.Write(VisibilityToString(value));\r\n\r\n            if ((value & PhpMemberAttributes.AppStatic) != 0) output.Write(\"appstatic \");\r\n            else if ((value & PhpMemberAttributes.Static) != 0) output.Write(\"static \");\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n\t#region IPhpMember\r\n\r\n\tpublic interface IPhpMember\r\n\t{\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region MemberDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DMemberDesc\r\n\t{\r\n\t\tpublic PhpMemberAttributes MemberAttributes { get { return memberAttributes; } set { memberAttributes = value; } }\r\n\t\tprotected PhpMemberAttributes memberAttributes;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>null</B> for run-time created (or fast-reflected) descriptors.\r\n\t\t/// Doesn't trigger the reflection (only <see cref=\"DTypeDesc.Type\"/> trigger the reflection).\r\n\t\t/// </summary>\r\n\t\tpublic DMember Member { get { return member; } internal /* friend DMember, PhpFunction, DTypeDesc */ set { member = value; } }\r\n\t\tprivate DMember member;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declaring type - a global type in the case of types, functions and global constants.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Run-time type descriptors points to a common singleton (global type of the <see cref=\"UnknownModule\"/>).\r\n\t\t/// </remarks>\r\n\t\tpublic DTypeDesc/*!*/ DeclaringType { get { return declaringType; } }\r\n\t\tprotected readonly DTypeDesc/*!*/ declaringType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the <see cref=\"DModule\"/> declaring the type. Forwarded to <see cref=\"GlobalTypeDesc\"/>.\r\n\t\t/// Descriptors created at run-time refers to the singleton of the <see cref=\"UnknownModule\"/> class.\r\n\t\t/// </summary>\r\n\t\tpublic virtual DModule/*!*/ DeclaringModule { get { return declaringType.DeclaringModule; } }\r\n\r\n\t\tpublic bool IsPublic { get { return (memberAttributes & PhpMemberAttributes.VisibilityMask) == PhpMemberAttributes.Public; } }\r\n\t\tpublic bool IsPrivate { get { return (memberAttributes & PhpMemberAttributes.VisibilityMask) == PhpMemberAttributes.Private; } }\r\n\t\tpublic bool IsProtected { get { return (memberAttributes & PhpMemberAttributes.VisibilityMask) == PhpMemberAttributes.Protected; } }\r\n\t\tpublic PhpMemberAttributes Visibility { get { return memberAttributes & PhpMemberAttributes.VisibilityMask; } }\r\n\r\n\t\tpublic bool IsStatic { get { return (memberAttributes & PhpMemberAttributes.Static) != 0; } }\r\n\t\tpublic bool IsAppStatic { get { return (memberAttributes & PhpMemberAttributes.AppStatic) == PhpMemberAttributes.AppStatic; } }\r\n\t\tpublic bool IsThreadStatic { get { return (memberAttributes & PhpMemberAttributes.StaticMask) == PhpMemberAttributes.Static; } }\r\n\t\tpublic bool IsAbstract { get { return (memberAttributes & PhpMemberAttributes.Abstract) != 0; } }\r\n\t\tpublic bool IsFinal { get { return (memberAttributes & PhpMemberAttributes.Final) != 0; } }\r\n\r\n\t\tpublic abstract string MakeFullName();\r\n\t\tpublic abstract string MakeFullGenericName();\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by all subclasses except for <see cref=\"GlobalTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected DMemberDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\r\n\t\t\tthis.declaringType = declaringType;\r\n\t\t\tthis.memberAttributes = memberAttributes;\r\n\t\t\tthis.member = null; // to be filled by DMember or at run-time (if applicable)\r\n\t\t}\r\n\r\n\t\tprotected DMemberDesc()\r\n\t\t{\r\n\t\t\tthis.declaringType = (DTypeDesc)this;\r\n\t\t\tthis.memberAttributes = PhpMemberAttributes.None;\r\n\t\t\tthis.member = null; // to be filled by DMember (if applicable)\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug\r\n\r\n#if DEBUG\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn (member != null) ? member.ToString() : base.ToString();\r\n\t\t}\r\n\r\n#endif\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DMember\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DMember\r\n\t{\r\n\t\tpublic DMemberDesc/*!*/ MemberDesc { get { return memberDesc; } }\r\n\t\tprotected DMemberDesc/*!*/ memberDesc;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declaring type of the member.\r\n\t\t/// </summary>\r\n\t\tpublic virtual DType DeclaringType { get { return memberDesc.DeclaringType.Type; } }\r\n\t\tpublic PhpType DeclaringPhpType { get { return (PhpType)DeclaringType; } }\r\n\r\n\t\tpublic DModule DeclaringModule { get { return ((GlobalTypeDesc)memberDesc.DeclaringType).DeclaringModule; } }\r\n\r\n\t\tpublic abstract bool IsUnknown { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the analyzer can be sure about the identity of the member.\r\n\t\t/// That is for types, whether the analyzer can refer to the modifiers, generic parameters\r\n\t\t/// and the members declared directly by the type (inherited members needn't to be definite).\r\n\t\t/// \r\n\t\t/// For functions, whether the analyzer can refer to the signature of the function.\r\n\t\t/// \r\n\t\t/// Class constants, fields, and methods are identity definite iff they are known (identity definiteness\r\n\t\t/// of the type's member is relative to the declaring type). The analyzer can refer to the modifiers and \r\n\t\t/// signatures of the identity definite methods.\r\n\t\t/// \r\n\t\t/// Constructed types are identity definite iff the generic type is identity definite as the members \r\n\t\t/// of the constructed types are same as ones of the generic types and only the type parameter substitution\r\n\t\t/// needn't to be known.\r\n\t\t/// \r\n\t\t/// Generic parameters are not identity definite as their substitute is unknown.\r\n\t\t/// </summary>\r\n\t\tpublic abstract bool IsIdentityDefinite { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the analyzer and code generator can be sure about the entire structure of the member, i.e.\r\n\t\t/// whether the member is identity definite and all members that influences its structure (e.g. all base types) \r\n\t\t/// are definite.\r\n\t\t/// </summary>\r\n\t\tpublic abstract bool IsDefinite { get; }\r\n\r\n\t\tpublic bool IsPublic { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsPublic; } }\r\n\t\tpublic bool IsPrivate { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsPrivate; } }\r\n\t\tpublic bool IsProtected { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsProtected; } }\r\n\t\tpublic PhpMemberAttributes Visibility { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.Visibility; } }\r\n\r\n\r\n\t\tpublic bool IsStatic { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsStatic; } }\r\n\t\tpublic bool IsAppStatic { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsAppStatic; } }\r\n\t\tpublic bool IsThreadStatic { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsThreadStatic; } }\r\n\t\tpublic bool IsAbstract { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsAbstract; } }\r\n\t\tpublic bool IsFinal { get { Debug.Assert(!IsUnknown, \"Undefined\"); return memberDesc.IsFinal; } }\r\n\r\n\t\tpublic string FullName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_fullName == null) _fullName = GetFullName();\r\n\t\t\t\treturn _fullName;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate string _fullName = null;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for unknown members without descriptors (methods, functions), for generic parameters, and \r\n\t\t/// for unknown members with descriptor.\r\n\t\t/// </summary>\r\n\t\tprotected DMember(DMemberDesc memberDesc, string/*!*/ fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullName != null);\r\n\r\n\t\t\tthis.memberDesc = memberDesc;\r\n\t\t\tif (memberDesc != null)\r\n\t\t\t\tmemberDesc.Member = this;\r\n\r\n\t\t\tthis._fullName = fullName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for known members and unknown members with descriptor (types).\r\n\t\t/// </summary>\r\n\t\tprotected DMember(DMemberDesc/*!*/ memberDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(memberDesc != null);\r\n\r\n\t\t\tthis.memberDesc = memberDesc;\r\n\t\t\tmemberDesc.Member = this;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic abstract string GetFullName();\r\n\r\n\t\tinternal virtual void AddAbstractOverride(DMemberRef/*!*/ abstractMember)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal virtual DMemberRef GetImplementationInSuperTypes(DType/*!*/ type, bool searchSupertypes, ref bool inSupertype)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal virtual void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n\t\t{\r\n\t\t\t// to be implemented when source file and position are known\r\n\t\t}\r\n\r\n\t\tinternal virtual void ReportAbstractNotImplemented(ErrorSink/*!*/ errors, DType/*!*/ declaringType, PhpType/*!*/ referringType)\r\n\t\t{\r\n\t\t\t// to be implemented by methods and properties\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n        internal virtual void ReportMethodNotCompatible(ErrorSink/*!*/ errors, DType/*!*/ declaringType, PhpType/*!*/ referringType)\r\n        {\r\n            // to be implemented by methods and properties\r\n            Debug.Fail(null);\r\n            throw null;\r\n        }\r\n\r\n\t\t#region Debug\r\n\r\n#if DEBUG\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn ((DeclaringType != null) ? DeclaringType.FullName + Name.ClassMemberSeparator : null) + FullName;\r\n\t\t}\r\n\r\n#endif\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DMemberRef\r\n\r\n\t/// <summary>\r\n\t/// Represents a member-type pair.\r\n\t/// </summary>\r\n\tinternal sealed class DMemberRef\r\n\t{\r\n\t\tpublic static DMemberRef[]/*!*/ EmptyArray = new DMemberRef[0];\r\n\r\n\t\tpublic DMember/*!*/ Member { get { return member; } }\r\n\t\tprivate readonly DMember/*!*/ member;\r\n\r\n\t\tpublic DType/*!*/ Type { get { return type; } }\r\n\t\tprivate readonly DType/*!*/ type;\r\n\r\n\t\tpublic DMemberRef(DMember/*!*/ member, DType/*!*/ type)\r\n\t\t{\r\n\t\t\tDebug.Assert(member != null && type != null);\r\n\r\n\t\t\tthis.member = member;\r\n\t\t\tthis.type = type;\r\n\t\t}\r\n\r\n\t\tinternal void ReportAbstractNotImplemented(ErrorSink/*!*/ errors, PhpType/*!*/ referringType)\r\n\t\t{\r\n\t\t\tmember.ReportAbstractNotImplemented(errors, type, referringType);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/MetaObject.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing System.Linq.Expressions;\r\nusing PHP.Core.Binders;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n    //for now only for interoperability\r\n    public class DMetaObject: DynamicMetaObject\r\n    {\r\n        public new DObject Value\r\n        {\r\n            get\r\n            {\r\n                return (DObject)base.Value;\r\n            }\r\n        }\r\n\r\n        public DMetaObject(Expression expression, DObject value)\n            : base(expression, BindingRestrictions.Empty, value) {\n        }\r\n\r\n\r\n        public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)\r\n        {\r\n            return InteropBinder.InvokeMember.Bind(binder, this, args, binder.FallbackInvokeMember);\r\n        }\r\n\r\n        public override DynamicMetaObject BindGetMember(GetMemberBinder binder)\r\n        {\r\n            return InteropBinder.GetMember.Bind(binder, this, binder.FallbackGetMember);\r\n        }\r\n\r\n        public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)\r\n        {\r\n            return InteropBinder.SetMember.Bind(binder, this, value, binder.FallbackSetMember);\r\n        }\r\n\r\n        public override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args)\r\n        {\r\n            return InteropBinder.Invoke.Bind( binder, this, args);\r\n        }\r\n\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/MethodDescs.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n#if !SILVERLIGHT\r\n//#define DEBUG_METHOD_STUBS\r\n#endif\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region DRoutineDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DRoutineDesc : DMemberDesc\r\n\t{\r\n\t\tpublic DRoutine Routine { get { return (DRoutine)Member; } }\r\n\t\tpublic KnownRoutine KnownRoutine { get { return (KnownRoutine)Member; } }\r\n\t\tpublic PhpRoutine PhpRoutine { get { return (PhpRoutine)Member; } }\r\n\t\tpublic PhpMethod PhpMethod { get { return (PhpMethod)Member; } }\r\n\t\tpublic PhpFunction PhpFunction { get { return (PhpFunction)Member; } }\r\n\t\tpublic PhpLibraryFunction PhpLibraryFunction { get { return (PhpLibraryFunction)Member; } }\r\n\t\tpublic ClrMethod ClrMethod { get { return (ClrMethod)Member; } }\r\n\r\n\t\tpublic bool IsConstructor { get { return (memberAttributes & PhpMemberAttributes.Constructor) != 0; } }\r\n\r\n\t\tprotected bool AllowProtectedCall(DTypeDesc/*!*/ caller) \r\n\t\t{ \r\n\t\t\treturn (!IsProtected || DeclaringType.IsRelatedTo(caller));\r\n\t\t}\r\n\r\n\t\tprotected internal RoutineDelegate ArglessStub\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return _arglessStub ?? (_arglessStub = GenerateArglessStub());\r\n\t\t\t}\r\n\t\t\t// used by ClrMethod for defining CLR method stubs\r\n\t\t\t// used by PhpRoutine for baking dynamic methods\r\n\t\t\tinternal set\r\n\t\t\t{\r\n\t\t\t\t_arglessStub = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate RoutineDelegate _arglessStub = null;\r\n\r\n        /// <summary>\r\n        /// <see cref=\"MethodInfo\"/> to be called thru .call IL OpCode.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// By default, it is the Method of <see cref=\"ArglessStub\"/> delegate. In case of emitted <see cref=\"DynamicMethod\"/>,\r\n        /// we need to remember the original <see cref=\"DynamicMethod\"/> so it can be called within DLR.\r\n        /// </remarks>\r\n        internal virtual MethodInfo ArglessStubMethod { get { return this.ArglessStub.Method; } }\r\n\r\n        /// <summary>\r\n        /// Internal index used for call cache.\r\n        /// </summary>\r\n        internal int Index = -1;\r\n        internal static int LastIndex = -1;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler through subclasses (<paramref name=\"arglessStub\"/> is <B>null</B> then).\r\n\t\t/// Called by a declaring helper at run-time.\r\n\t\t/// </summary>\r\n        /// <param name=\"declaringType\">The declaring type. Can be null.</param>\r\n        /// <param name=\"memberAttributes\">Attributes of the function.</param>\r\n        /// <param name=\"arglessStub\">The stub to be called. Cannot be null.</param>\r\n        /// <param name=\"needsIndex\">True to allocate <see cref=\"Index\"/>. Usable for preserved descs, for global functions that can be reused.</param>\r\n\t\tinternal DRoutineDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes, RoutineDelegate arglessStub, bool needsIndex)\r\n\t\t\t: base(declaringType, memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t\tthis._arglessStub = arglessStub;\r\n\r\n            // allocate an index, only for preserved descs\r\n            if (needsIndex) // assign an index only if needed (save indexes, since they cause prealocation of larger BitArray)\r\n                this.Index = System.Threading.Interlocked.Increment(ref LastIndex);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tinternal static StringBuilder/*!*/ GetFullName(MethodInfo/*!*/ realMethod, StringBuilder/*!*/ result)\r\n\t\t{\r\n\t\t\tDebug.Assert(realMethod != null && result != null);\r\n\r\n\t\t\tint name_start = GetNameStartIndex(realMethod.Name);\r\n\t\t\tint hash = realMethod.Name.IndexOf('#', name_start);\r\n\t\t\tint name_end = (hash > 0) ? hash : realMethod.Name.Length;\r\n\r\n\t\t\tresult.Append(realMethod.Name.Substring(name_start, name_end - name_start).Replace('.', QualifiedName.Separator));\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal static StringBuilder/*!*/ GetFullGenericName(MethodInfo/*!*/ realMethod, StringBuilder/*!*/ result)\r\n\t\t{\r\n\t\t\tDebug.Assert(realMethod != null && result != null);\r\n\r\n\t\t\tGetFullName(realMethod, result);\r\n\r\n\t\t\tif (!realMethod.IsGenericMethod)\r\n\t\t\t\treturn result;\r\n\r\n\t\t\tConstructedTypeDesc.GenericArgumentsToString(realMethod.GetGenericArguments(), result);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate static int GetNameStartIndex(string/*!*/ name)\r\n\t\t{\r\n\t\t\tDebug.Assert(name != null);\r\n\r\n\t\t\t// format: <hidden>.namespace.name.#n\r\n\t\t\tif (name.Length > 0 && name[0] == '<')\r\n\t\t\t{\r\n\t\t\t\tint closing = name.IndexOf('>');\r\n\t\t\t\treturn (closing != -1 && closing < name.Length - 1) ? closing + 2 : 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tinternal static string/*!*/ GetSpecialName(MethodBase/*!*/ realMethod)\r\n\t\t{\r\n\t\t\tDebug.Assert(realMethod != null);\r\n\r\n\t\t\tint name_start = GetNameStartIndex(realMethod.Name);\r\n\t\t\treturn realMethod.Name.Substring(name_start);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprotected abstract RoutineDelegate GenerateArglessStub();\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\t[Emitted]\r\n\t\tpublic object Invoke(DObject instance, PhpStack stack)\r\n\t\t{\r\n\t\t\treturn ArglessStub(instance == null ? null : instance.InstanceObject, stack);\r\n\t\t}\r\n\r\n\t\tpublic object Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tstack.AllowProtectedCall = AllowProtectedCall(caller);\r\n\t\t\treturn Invoke(instance, stack);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpRoutineDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class PhpRoutineDesc : DRoutineDesc\r\n\t{\r\n\t\tpublic bool IsFunction { get { return declaringType.IsGlobal; } }\r\n\t\tpublic bool IsMethod { get { return !declaringType.IsGlobal; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for functions.\r\n\t\t/// </summary>\r\n\t\tinternal PhpRoutineDesc(DModule/*!*/ declaringModule, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule.GlobalType.TypeDesc, memberAttributes, null, false)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringModule != null);\r\n\t\t\tDebug.Assert((memberAttributes & PhpMemberAttributes.Static) != 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler for methods.\r\n\t\t/// </summary>\r\n\t\tinternal PhpRoutineDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringType, memberAttributes, null, false)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a descriptor for specified PHP method at run-time if argless stub delegate is available.\r\n\t\t/// Called by declaring helper emitted on PHP types.\r\n\t\t/// </summary>\r\n\t\tinternal PhpRoutineDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes, RoutineDelegate/*!*/ arglessStub)\r\n\t\t\t: base(declaringType, memberAttributes, arglessStub, false)\r\n\t\t{\r\n\t\t\tDebug.Assert(arglessStub != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a descriptor for specified PHP function at run-time if argless stub delegate is available.\r\n\t\t/// Called by declaring helpers emitted on script or when a callback is created.\r\n\t\t/// </summary>\r\n        public PhpRoutineDesc(PhpMemberAttributes memberAttributes, RoutineDelegate/*!*/ arglessStub, bool needsIndex)\r\n            : base(UnknownModule.RuntimeModule.GlobalType.TypeDesc, memberAttributes, arglessStub, needsIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(arglessStub != null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprotected override RoutineDelegate GenerateArglessStub()\r\n\t\t{\r\n\t\t\treturn (RoutineDelegate)Delegate.CreateDelegate(typeof(RoutineDelegate), this.PhpRoutine.ArgLessInfo);\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n            if (fullName != null)\r\n                return fullName;\r\n\r\n\t\t\tif (Member != null)\r\n                return fullName = Member.FullName;\r\n\r\n\t\t\tif (IsMethod)\r\n                return fullName = ArglessStub.Method.Name;\r\n\r\n            return fullName = GetFullName(ArglessStub.Method, new StringBuilder()).ToString();\r\n\t\t}\r\n        private string fullName;\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n\t\t\t// TODO:\r\n\t\t\t//if (Member != null) \r\n\t\t\t//  return Member.FullName;\r\n\r\n\t\t\treturn GetFullGenericName(ArglessStub.Method, new StringBuilder()).ToString();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpLibraryRoutineDesc\r\n\r\n\tpublic sealed class PhpLibraryFunctionDesc : DRoutineDesc\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Used by both fast and full reflectors.\r\n\t\t/// </summary>\r\n\t\tinternal PhpLibraryFunctionDesc(PhpLibraryModule/*!*/ declaringModule, RoutineDelegate/*!*/ arglessStub)\r\n\t\t\t: base(declaringModule.GlobalType.TypeDesc, PhpMemberAttributes.Public | PhpMemberAttributes.Static, arglessStub, true)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringModule != null && arglessStub != null);\r\n\t\t}\r\n\r\n\t\tprotected override RoutineDelegate GenerateArglessStub()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"delegate already created\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n\t\t\treturn ArglessStub.Method.Name;\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n\t\t\t// library functions cannot have generic arguments\r\n\t\t\treturn MakeFullName();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrMethodDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents a non-generic CLR method.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic class ClrMethodDesc : DRoutineDesc\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler and full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrMethodDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringType, memberAttributes, null, false)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n\t\t\tDebug.Assert(Member != null);\r\n\t\t\treturn Member.FullName;\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n\t\t\tDebug.Assert(Member != null);\r\n\r\n\t\t\t// TODO: generic arguments\r\n\t\t\treturn Member.FullName;\r\n\t\t}\r\n        \r\n        protected override RoutineDelegate GenerateArglessStub()\r\n\t\t{\r\n\t\t\tClrMethod clr_method = ClrMethod;\r\n\t\t\tDebug.Assert(clr_method != null, \"CLR method should be fully reflected\");\r\n\r\n#if DEBUG_METHOD_STUBS\r\n\t\t\tAssemblyName name = new AssemblyName(\"MethodStub_\" + clr_method.ToString().Replace(':','_'));\r\n\t\t\tAssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save, \"C:\\\\Temp\");\r\n\t\t\tModuleBuilder mb = ab.DefineDynamicModule(name.Name, name.Name + \".dll\");\r\n\t\t\tTypeBuilder tb = mb.DefineType(clr_method.Name.ToString());\r\n\t\t\tMethodBuilder mmb = tb.DefineMethod(\"<^MethodStub>\", PhpFunctionUtils.DynamicStubAttributes,\r\n\t\t\t\tCallingConventions.Standard, Types.Object[0], Types.Object_PhpStack);\r\n\r\n\t\t\tILEmitter tmpil = new ILEmitter(mmb);\r\n\r\n\t\t\tIndexedPlace tmpinstance = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\t\tIndexedPlace tmpstack = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\tclr_method.EmitArglessStub(tmpil, tmpstack, tmpinstance);\r\n\r\n\t\t\ttb.CreateType();\r\n\t\t\tab.Save(name.Name + \".dll\");\r\n#endif\r\n\r\n#if SILVERLIGHT\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^>.\" + clr_method.Name.Value, Types.Object[0], Types.Object_PhpStack);\r\n#else\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^>.\" + clr_method.Name.Value, PhpFunctionUtils.DynamicStubAttributes,\r\n\t\t\t\tCallingConventions.Standard, Types.Object[0], Types.Object_PhpStack, this.declaringType.RealType, true);\r\n#endif\r\n            ILEmitter il = new ILEmitter(stub);\r\n\r\n\t\t\tIndexedPlace instance = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\t\tIndexedPlace stack = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\tclr_method.EmitArglessStub(il, stack, instance);\r\n\r\n\t\t\t// TODO: is it possible to drop the member?\r\n\t\t\t// the compiler may get activated:\r\n\t\t\t// member = null; \r\n\r\n            this.arglessStubMethod = stub;\r\n            return (RoutineDelegate)stub.CreateDelegate(typeof(RoutineDelegate));\r\n\t\t}\r\n\r\n        private MethodInfo arglessStubMethod = null;\r\n        internal override MethodInfo ArglessStubMethod\r\n        {\r\n            get\r\n            {\r\n                var argless = this.ArglessStub; // ensure argless is generated\r\n                return arglessStubMethod;\r\n            }\r\n        }\r\n\r\n\t\t// TODO: caller == null when IsProtected == true ?\r\n\r\n\t\t//protected override bool AllowProtectedCall(DTypeDesc/*!*/ caller) \r\n\t\t//{ \r\n\t\t//\treturn DeclaringType.IsRelatedTo(caller);\r\n\t\t//}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a generic CLR method.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrGenericMethodDesc : ClrMethodDesc\r\n\t{\r\n\t\tprivate Dictionary<DTypeDescs, ClrMethodDesc>/*!*/ instantiations = new Dictionary<DTypeDescs, ClrMethodDesc>();\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrGenericMethodDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringType, memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        internal override MethodInfo ArglessStubMethod { get { return this.ArglessStub.Method; } }  // ArglessPreStub MethodInfo\r\n\r\n\t\tprotected override RoutineDelegate GenerateArglessStub()\r\n\t\t{\r\n\t\t\t// always make the delegate point to ArglessPreStub\r\n\t\t\treturn new RoutineDelegate(ArglessPreStub);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dispatches the invocation to a constructed method according to type arguments on the stack.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Constructed methods are cached in the <see cref=\"instantiations\"/> dictionary.\r\n\t\t/// </remarks>\r\n\t\tprivate object ArglessPreStub(object instance, PhpStack/*!*/ stack)\r\n\t\t{\r\n\t\t\t// get type arguments from the stack\r\n\t\t\tDTypeDescs type_args = new DTypeDescs(stack);\r\n\r\n\t\t\tClrMethodDesc method_desc;\r\n\t\t\tlock (instantiations)\r\n\t\t\t{\r\n\t\t\t\tif (!instantiations.TryGetValue(type_args, out method_desc))\r\n\t\t\t\t{\r\n\t\t\t\t\tmethod_desc = ConstructMethodDesc(type_args);\r\n\t\t\t\t\tif (method_desc == null) return null;\r\n\r\n\t\t\t\t\tinstantiations.Add(type_args, method_desc);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn method_desc.ArglessStub(instance, stack);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a constructed method desc for the given type arguments.\r\n\t\t/// </summary>\r\n\t\tprivate ClrMethodDesc ConstructMethodDesc(DTypeDescs/*!*/ typeArgs)\r\n\t\t{\r\n\t\t\tClrMethod generic_method = ClrMethod;\r\n\t\t\tClrMethod constructed_method = new ClrMethod(generic_method.Name, declaringType, memberAttributes, 1, false);\r\n\r\n\t\t\t// add overloads which have an exact match\r\n\t\t\tAddCompatibleOverloads(constructed_method, generic_method, typeArgs, true);\r\n\r\n\t\t\tif (constructed_method.Overloads.Count == 0)\r\n\t\t\t{\r\n\t\t\t\t// now try overloads whose additional type parameters can by substituted by System.Object\r\n\t\t\t\tAddCompatibleOverloads(constructed_method, generic_method, typeArgs, false);\r\n\r\n\t\t\t\tif (constructed_method.Overloads.Count == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// sorry, bad luck\r\n\t\t\t\t\tPhpException.NoSuitableOverload(generic_method.DeclaringType.FullName, generic_method.FullName);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn constructed_method.ClrMethodDesc;\r\n\t\t}\r\n\r\n\t\tprivate void AddCompatibleOverloads(ClrMethod/*!*/ constructedMethod, ClrMethod/*!*/ genericMethod,\r\n\t\t\tDTypeDescs/*!*/ typeArgs, bool exactMatch)\r\n\t\t{\r\n\t\t\tforeach (ClrMethod.Overload overload in genericMethod.Overloads)\r\n\t\t\t{\r\n\t\t\t\t// add the overloads that are compatible with typeArgs\r\n\t\t\t\tint gen_count = overload.GenericParamCount;\r\n\t\t\t\tif (exactMatch ? gen_count == typeArgs.Count : gen_count > typeArgs.Count)\r\n\t\t\t\t{\r\n\t\t\t\t\tbool compatible = true;\r\n\r\n\t\t\t\t\tfor (int i = 0; i < gen_count; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDTypeDesc desc = (i < typeArgs.Count ? typeArgs[i] : PrimitiveTypeDesc.SystemObjectTypeDesc);\r\n\t\t\t\t\t\tif (!desc.IsCompatibleWithGenericParameter(overload.GenericParameters[i]))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcompatible = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (compatible)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// make generic method\r\n\t\t\t\t\t\tType[] real_type_args;\r\n\t\t\t\t\t\tif (exactMatch) real_type_args = typeArgs.GetRealTypes();\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treal_type_args = new Type[gen_count];\r\n\r\n\t\t\t\t\t\t\ttypeArgs.GetRealTypes(real_type_args, 0);\r\n\t\t\t\t\t\t\tfor (int i = typeArgs.Count; i < gen_count; i++) real_type_args[i] = Types.Object[0];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tMethodInfo info = ((MethodInfo)overload.Method).MakeGenericMethod(real_type_args);\r\n\r\n\t\t\t\t\t\tClrMethod.Overload constructed_overload;\r\n\t\t\t\t\t\tconstructedMethod.AddOverload(info, out constructed_overload);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Methods.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\n//#define DEBUG_DYNAMIC_STUBS\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region RoutineProperties\r\n\r\n\t/// <summary>\r\n\t/// Properties of a PHP user function.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum RoutineProperties : int\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// No significant properties.\r\n\t\t/// </summary>\r\n\t\tNone = 0,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains ${expr}() construct.\r\n\t\t/// </summary>\r\n\t\tContainsIndirectFcnCall = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains eval or assert.\r\n\t\t/// </summary>\r\n\t\tContainsEval = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains include (either dynamic or static).\r\n\t\t/// </summary>\r\n\t\tContainsInclude = 4,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains ${expr}.\r\n\t\t/// </summary>\r\n\t\tIndirectLocalAccess = 8,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains call to a class library method with <see cref=\"FunctionImplOptions.NeedsVariables\"/> option.\r\n\t\t/// </summary>\r\n\t\tContainsLocalsWorker = 16,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains call to system function which manipulates arguments on PHP stack.\r\n\t\t/// (e.g. func_get_arg, func_get_args...)\r\n\t\t/// </summary>\r\n\t\tUseVarArgs = 32,\r\n\r\n        /// <summary>\r\n        /// A function contains late static binding call (use of <c>static</c> keyword referring to current runtime type).\r\n        /// </summary>\r\n        LateStaticBinding = 64,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function uses arguments from <see cref=\"PhpStack\"/>.\r\n\t\t/// </summary>\r\n        IsArgsAware = ContainsIndirectFcnCall | ContainsEval | ContainsInclude | UseVarArgs,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function local variable accesses can be optimized.\r\n\t\t/// </summary>\r\n\t\tHasUnoptimizedLocals = ContainsEval | ContainsInclude | ContainsIndirectFcnCall | ContainsLocalsWorker,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A function contains a table of run-time variables.\r\n\t\t/// </summary>\r\n\t\tHasRTVariablesTable = HasUnoptimizedLocals | IndirectLocalAccess\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RoutineSignature\r\n\r\n\tpublic abstract class RoutineSignature\r\n\t{\r\n\t\tpublic abstract bool IsUnknown { get; }\r\n\r\n\t\tpublic abstract DType GetTypeHint(int index);\r\n\r\n\t\tpublic abstract bool IsAlias(int index);\r\n\t\tpublic abstract bool AliasReturn { get; }\r\n\r\n\t\tpublic abstract int MandatoryParamCount { get; }\r\n\t\tpublic abstract int ParamCount { get; }\r\n\t\tpublic abstract int MandatoryGenericParamCount { get; }\r\n\t\tpublic abstract int GenericParamCount { get; }\r\n\r\n        #region Utils\r\n\r\n        /// <summary>\r\n        /// Determines whether this signature can override given signature.\r\n        /// Parameters count, type hints and names must match.\r\n        /// </summary>\r\n        /// <param name=\"sig\"></param>\r\n        /// <returns></returns>\r\n        internal virtual bool CanOverride(RoutineSignature sig)\r\n        {\r\n            // additional parameters must have default value\r\n            // all arguments in base method with default value has the default value in overriding (this) method\r\n                \r\n            return (sig != null && sig.AliasReturn == this.AliasReturn && sig.ParamCount <= this.ParamCount && sig.MandatoryParamCount == this.MandatoryParamCount);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region DRoutine, KnownRoutine\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DRoutine : DMember\r\n\t{\r\n\t\tpublic const int InvalidOverloadIndex = -1;\r\n\r\n\t\tpublic sealed override bool IsDefinite { get { return IsIdentityDefinite; } }\r\n\r\n\t\tpublic abstract bool IsLambda { get; }\r\n\t\tpublic abstract bool IsConstructor { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the deep-copy-testing code (if applicable) is emitted by <see cref=\"EmitCall\"/> method and thus\r\n\t\t/// the AST node emitter needn't to care any more.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It is better to make test on need for a deep-copy in the caller than in the callee\r\n\t\t/// since the callee doesn't know whether the copying is really necessary.\r\n\t\t/// </remarks>\r\n\t\tpublic abstract bool ReturnValueDeepCopyEmitted { get; }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by subclasses when creating known routines.\r\n\t\t/// </summary>\r\n\t\tpublic DRoutine(DMemberDesc/*!*/ memberDesc)\r\n\t\t\t: base(memberDesc)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by subclasses when creating unknown routines.\r\n\t\t/// </summary>\r\n\t\tpublic DRoutine(string/*!*/ fullName)\r\n\t\t\t: base(null, fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsUnknown);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic abstract RoutineSignature/*!*/ GetSignature(int overloadIndex);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets <see cref=\"RoutineProperties\"/> that each PHP caller of this routine is required to satisfy.\r\n\t\t/// </summary>\r\n\t\tpublic virtual RoutineProperties GetCallerRequirements()\r\n\t\t{\r\n\t\t\treturn RoutineProperties.None;\r\n\t\t}\r\n\r\n\t\tinternal override void ReportAbstractNotImplemented(ErrorSink/*!*/ errors, DType/*!*/ declaringType, PhpType/*!*/ referringType)\r\n\t\t{\r\n\t\t\terrors.Add(Errors.AbstractMethodNotImplemented, referringType.Declaration.SourceUnit,\r\n\t\t\t\treferringType.Declaration.Span,\r\n                referringType.FullName, declaringType.MakeFullGenericName(), this.FullName);\r\n\r\n\t\t\t//ReportError(errors, Errors.RelatedLocation);\r\n\t\t}\r\n\r\n        internal override void ReportMethodNotCompatible(ErrorSink errors, DType declaringType, PhpType referringType)\r\n        {\r\n            errors.Add(Errors.MethodNotCompatible, referringType.Declaration.SourceUnit,\r\n                referringType.Declaration.Span,\r\n                referringType.FullName, this.FullName, declaringType.MakeFullGenericName(), this.FullName);\r\n\r\n            //ReportError(errors, Errors.RelatedLocation);\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        /// <summary>\r\n        /// Emits the call of DRoutine.\r\n        /// </summary>\r\n        /// <param name=\"codeGenerator\">Used code generator.</param>\r\n        /// <param name=\"fallbackQualifiedName\">Fallback function name to call, if the origin one does not exist.</param>\r\n        /// <param name=\"callSignature\">Call signature.</param>\r\n        /// <param name=\"instance\">IPlace containing instance of object in case of non static method call.</param>\r\n        /// <param name=\"runtimeVisibilityCheck\">True to check visibility during runtime.</param>\r\n        /// <param name=\"overloadIndex\">The index of overload (used in case of PhpLibraryFunction).</param>\r\n        /// <param name=\"type\">Type used to resolve this routine.</param>\r\n        /// <param name=\"position\">Position of the call expression.</param>\r\n        /// <param name=\"access\">Access type of the routine call. Used to determine wheter the caller does not need return value. In such case additional operations (like CastToFalse) should not be emitted.</param>\r\n        /// <param name=\"callVirt\">True to call the instance method virtually, using <c>.callvirt</c> instruction. This is used when current routine is non-static routine called on instance, not statically.</param>\r\n        /// <returns>PhpTypeCode of the resulting value that is on the top of the evaluation stack after the DRoutine call. Value types are not boxed.</returns>\r\n        internal abstract PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finds most suitable overload. Returns <see cref=\"InvalidOverloadIndex\"/> and \r\n\t\t/// <see cref=\"UnknownSignature.Default\"/> in <c>overloadSignature</c> if no suitable overload exists.\r\n\t\t/// </summary>\r\n        internal abstract int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature);\r\n\r\n\t}\r\n\r\n\t//[DebuggerNonUserCode]\r\n\tpublic abstract class KnownRoutine : DRoutine\r\n\t{\r\n\t\tpublic static readonly KnownRoutine[]/*!*/ EmptyArray = new KnownRoutine[0];\r\n\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsConstructor { get { return (memberDesc.MemberAttributes & PhpMemberAttributes.Constructor) != 0; } }\r\n\r\n\t\tpublic DRoutineDesc/*!*/ RoutineDesc { get { return (DRoutineDesc)memberDesc; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Simple name of the routine.\r\n\t\t/// </summary>\r\n\t\tpublic abstract Name Name { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiled functions/methods: Set during analysis.\r\n\t\t/// </summary>\r\n\t\tpublic RoutineProperties Properties { get { return properties; } set { properties = value; } }\r\n\t\tprotected RoutineProperties properties;\r\n\r\n\t\tpublic MethodInfo ArgLessInfo { get { return argless; } }\r\n\t\tprotected MethodInfo argless;\r\n\r\n\t\tpublic MethodInfo ArgFullInfo { get { return argfull; } }\r\n\t\tprotected MethodInfo argfull;\r\n\r\n        /// <summary>\r\n        /// Whether the routine contains use of late static binding.\r\n        /// </summary>\r\n        public bool UsesLateStaticBinding { get { return (properties & RoutineProperties.LateStaticBinding) != 0; } }\r\n\r\n        /// <summary>\r\n        /// Whether the routine should be called via argless stub. (Needs PhpStack).\r\n        /// </summary>\r\n        public bool IsArgsAware { get { return (properties & RoutineProperties.IsArgsAware) != 0 || (IsStatic && UsesLateStaticBinding); } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler and the reflector.\r\n\t\t/// </summary>\r\n\t\tpublic KnownRoutine(DRoutineDesc/*!*/ routineDesc)\r\n\t\t\t: base(routineDesc)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tinternal override DMemberRef GetImplementationInSuperTypes(DType/*!*/ type, bool searchSupertypes, ref bool inSupertype)\r\n\t\t{\r\n\t\t\tif (type == null || type.IsUnknown)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tKnownRoutine result = type.GetDeclaredMethod<KnownRoutine>(Name);\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// private members are not visible from subtype:\r\n\t\t\t\t\tif (result.IsPrivate && inSupertype) break;\r\n\r\n\t\t\t\t\treturn new DMemberRef(result, type);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinSupertype = true;\r\n\t\t\t\ttype = type.Base;\r\n\t\t\t}\r\n\t\t\twhile (type != null && !type.IsUnknown && searchSupertypes);\r\n\r\n\t\t\tinSupertype = false;\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownFunction, UnknownMethod, UnknownSignature\r\n\r\n\tpublic sealed class UnknownFunction : DRoutine\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsLambda { get { return false; } }\r\n\t\tpublic override bool ReturnValueDeepCopyEmitted { get { return true; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\r\n\t\tpublic override bool IsConstructor { get { return false; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic UnknownFunction(string/*!*/ fullName)\r\n\t\t\t: base(fullName)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override RoutineSignature GetSignature(int overloadIndex)\r\n\t\t{\r\n\t\t\treturn UnknownSignature.Default;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"full name is set by ctor\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature)\r\n\t\t{\r\n\t\t\toverloadSignature = UnknownSignature.Default;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n\t\t\treturn codeGenerator.EmitRoutineOperatorCall(null, null, FullName, fallbackQualifiedName, null, callSignature, access);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic sealed class UnknownMethod : DRoutine\r\n\t{\r\n\t\tprivate const string CtorName = \"\";\r\n\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsLambda { get { return false; } }\r\n\t\tpublic override bool ReturnValueDeepCopyEmitted { get { return true; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\r\n\t\tpublic override bool IsConstructor { get { return FullName == CtorName; } }\r\n\r\n\t\tpublic override DType/*!*/ DeclaringType { get { return declaringType; } }\r\n\t\tprivate readonly DType/*!*/ declaringType;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler for unresolved methods.\r\n\t\t/// </summary>\r\n\t\tpublic UnknownMethod(DType/*!*/ declaringType, string/*!*/ name)\r\n\t\t\t: base(name)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null && name != null);\r\n\r\n\t\t\tthis.declaringType = declaringType;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler for unresolved ctors.\r\n\t\t/// </summary>\r\n\t\tpublic UnknownMethod(DType/*!*/ declaringType)\r\n\t\t\t: base(CtorName)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\r\n\t\t\tthis.declaringType = declaringType;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override RoutineSignature/*!*/ GetSignature(int overloadIndex)\r\n\t\t{\r\n\t\t\treturn UnknownSignature.Default;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"full name set in ctor\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature)\r\n\t\t{\r\n\t\t\t// no ctor defined => default is to be used => should have no parameters;\r\n\t\t\t// do not report errors if the declaring type is open type (constructed or a generic parameter);\r\n            if (declaringType.IsDefinite && IsConstructor && declaringType.IsClosed && callSignature.Parameters.Any())\r\n\t\t\t{\r\n\t\t\t\tanalyzer.ErrorSink.Add(Warnings.NoCtorDefined, analyzer.SourceUnit, position, declaringType.FullName);\r\n\t\t\t\tdeclaringType.ReportError(analyzer.ErrorSink, Warnings.RelatedLocation);\r\n\t\t\t}\r\n\r\n\t\t\toverloadSignature = UnknownSignature.Default;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n            Debug.Assert(instance == null || instance is ExpressionPlace);\r\n            Debug.Assert(fallbackQualifiedName == null);\r\n\r\n            return codeGenerator.EmitRoutineOperatorCall(declaringType, ExpressionPlace.GetExpression(instance), FullName, null, null, callSignature, access);\r\n\r\n\t\t\t// TODO: check operators: should deep-copy return value if PhpRoutine is called\r\n\t\t}\r\n\t}\r\n\r\n\tpublic sealed class UnknownSignature : RoutineSignature\r\n\t{\r\n\t\tpublic static readonly UnknownSignature/*!*/ Default = new UnknownSignature(0, 0);\r\n\t\tpublic static readonly UnknownSignature/*!*/ Delegate = new UnknownSignature(0, 1);\r\n\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> as parameters should be passed to the stack by reference since\r\n\t\t/// we don't know whether they are passed by ref in the real signature.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsAlias(int index) { return true; }\r\n\t\tpublic override bool AliasReturn { get { return true; } }\r\n\r\n\t\tpublic override int MandatoryParamCount { get { return paramCount; } }\r\n\t\tpublic override int ParamCount { get { return paramCount; } }\r\n\t\tpublic override int GenericParamCount { get { return genericParamCount; } }\r\n\t\tpublic override int MandatoryGenericParamCount { get { return genericParamCount; } }\r\n\r\n\t\tpublic override DType GetTypeHint(int index) { return null; }\r\n\r\n\t\tprivate int paramCount;\r\n\t\tprivate int genericParamCount;\r\n\r\n\t\tprivate UnknownSignature(int genericParamCount, int paramCount)\r\n\t\t{\r\n\t\t\tthis.genericParamCount = genericParamCount;\r\n\t\t\tthis.paramCount = paramCount;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpRoutineSignature\r\n\r\n\t/// <summary>\r\n\t/// Represents PHP routine signature. Immutable.\r\n\t/// </summary>\r\n\tpublic sealed class PhpRoutineSignature : RoutineSignature\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t//^ invariant typeHints.Length == aliasMaks.Length;\r\n\t\t//^ invariant mandatoryParamCount >= 0 && mandatoryParamCount <= typeHints.Length;\r\n\t\t//^ invariant mandatoryGenericParamCount >= 0 && mandatoryGenericParamCount <= genericParams.Length;\r\n\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Type parameters.\r\n\t\t/// </summary>\r\n\t\tpublic GenericParameter[]/*!!*/ GenericParams { get { return genericParams; } }\r\n\t\tprivate readonly GenericParameter[]/*!!*/ genericParams;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of mandatory type parameters.\r\n\t\t/// </summary>\r\n\t\tpublic override int MandatoryGenericParamCount { get { return mandatoryGenericParamCount; } }\r\n\t\tprivate readonly int mandatoryGenericParamCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets alias mask, i.e. the bitmask where a flag is set iff the respective formal parameter aliased.\r\n\t\t/// </summary>\r\n\t\tpublic BitArray/*!W*/ AliasMask { get { return aliasMask; } }\r\n\t\tprivate BitArray aliasMask;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets type hints. Array, int, bool, etc. hints are represented by special DTypeDesc.\r\n\t\t/// </summary>\r\n\t\tpublic DType[]/*!!W*/ TypeHints { get { return typeHints; } }\r\n\t\tprivate DType[]/*!!W*/ typeHints;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the routine returns by alias.\r\n\t\t/// </summary>\r\n\t\tpublic override bool AliasReturn { get { return aliasReturn; } }\r\n\t\tprivate bool aliasReturn;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of mandatory parameters.\r\n\t\t/// </summary>\r\n\t\tpublic override int MandatoryParamCount { get { return mandatoryParamCount; } }\r\n\t\tprivate int mandatoryParamCount;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of all parameters.\r\n\t\t/// </summary>\r\n\t\tpublic override int ParamCount { get { return typeHints.Length; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of all type parameters.\r\n\t\t/// </summary>\r\n\t\tpublic override int GenericParamCount { get { return genericParams.Length; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a signature partially initialized with type parameters. \r\n\t\t/// Rationale for partial initialization: \r\n\t\t/// When analyzing a routine, the analyzer needs to know about type parameters prior to the analysis of actual parameters.\r\n\t\t/// </summary>\r\n\t\tpublic PhpRoutineSignature(GenericParameter[]/*!!*/ genericParams, int mandatoryGenericParamCount)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericParams != null);\r\n\t\t\tDebug.Assert(mandatoryGenericParamCount >= 0 && mandatoryGenericParamCount <= genericParams.Length);\r\n\r\n\t\t\tthis.genericParams = genericParams;\r\n\t\t\tthis.mandatoryGenericParamCount = mandatoryGenericParamCount;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Completes the signature with information on actual parameters and return value. \r\n\t\t/// Returns this instance for convenience.\r\n\t\t/// </summary>\r\n\t\tpublic PhpRoutineSignature/*!*/ WriteUp(bool aliasReturn, BitArray/*!*/ aliasMask, DType[]/*!*/ typeHints, int mandatoryParamCount)\r\n\t\t{\r\n\t\t\tDebug.Assert(aliasMask != null && typeHints != null);\r\n\t\t\tDebug.Assert(aliasMask.Length == typeHints.Length);\r\n\t\t\tDebug.Assert(mandatoryParamCount >= 0 && mandatoryParamCount <= typeHints.Length);\r\n\r\n\t\t\tthis.aliasReturn = aliasReturn;\r\n\t\t\tthis.aliasMask = aliasMask;\r\n\t\t\tthis.typeHints = typeHints;\r\n\t\t\tthis.mandatoryParamCount = mandatoryParamCount;\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Misc\r\n\r\n\t\tpublic override DType GetTypeHint(int index)\r\n\t\t{\r\n\t\t\treturn (index < typeHints.Length) ? typeHints[index] : null;\r\n\t\t}\r\n\r\n\t\tpublic GenericParameter GetGenericParameter(Name name)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < genericParams.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (genericParams[i].Name.Equals(name))\r\n\t\t\t\t\treturn genericParams[i];\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether a index-th parameter has by-ref semantics.\r\n\t\t/// Can be called with index greater than the number of parameters. \r\n\t\t/// Return <B>false</B> in such cases as the arguments behind the last formal parameter cannot be \r\n\t\t/// returned to the caller modified.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsAlias(int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(index >= 0);\r\n\t\t\treturn (index < aliasMask.Count) ? aliasMask[index] : false;\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Determines whether specified signatures are compatible, i.e.\r\n        ///// one of them is unknown or their param. counts are the same and type hints are the same.\r\n        ///// </summary>\r\n        //public static bool AreCompatible(PhpRoutineSignature sig1, PhpRoutineSignature sig2)\r\n        //{\r\n        //  // signature not known => assume ok (for some system methods):\r\n        //  if (sig1 == null || sig2 == null) return true;\r\n\r\n        //  // different return types:\r\n        //  if (sig1.AliasReturn != sig2.AliasReturn) return false;\r\n\r\n        //  // different parameter counts:\r\n        //  if (sig1.ParamCount != sig2.ParamCount) return false;\r\n\r\n        //  for (int i = 0; i < sig1.ParamCount; i++)\r\n        //  {\r\n        //    if (sig1.aliasMask[i] != sig2.aliasMask[i] || sig1.typeHints[i] != sig2.typeHints[i])\r\n        //      return false;\r\n        //  }\r\n\r\n        //  return true;\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Determines whether this signature can override given signature.\r\n        /// Parameters count, type hints and names must match.\r\n        /// </summary>\r\n        /// <param name=\"sig\"></param>\r\n        /// <returns>True if method with this signature can override method with given signature.</returns>\r\n        internal override bool CanOverride( RoutineSignature sig )\r\n        {\r\n            if (!base.CanOverride(sig))\r\n                return false;\r\n\r\n            PhpRoutineSignature phpsig = sig as PhpRoutineSignature;\r\n\r\n            if (phpsig != null)\r\n            {\r\n                if (this.TypeHints.Length < phpsig.TypeHints.Length)\r\n                    return false;\r\n\r\n                // parameters by ref as it is in base declaration ?\r\n                for (int i = 0; i < phpsig.AliasMask.Count; ++i)\r\n                    if (this.IsAlias(i) != phpsig.IsAlias(i))\r\n                        return false;\r\n\r\n                // different type hints?\r\n                for (int i = 0; i < phpsig.TypeHints.Length; ++i)\r\n                {\r\n                    DType hintType = this.TypeHints[i];\r\n                    DType hintBaseType = phpsig.GetTypeHint(i);\r\n\r\n                    if (hintType == null || hintBaseType == null)\r\n                        continue;   // skip this now, we don't know some type hint, or it has not been specified ...\r\n                    // TODO: in some cases Phalanger does not remember type hints (e.g. abstract class in external file ?)\r\n\r\n                    string hintName = (hintType != null) ? hintType.FullName.ToLower() : null;\r\n                    string hintBaseName = (hintBaseType != null) ? hintBaseType.FullName.ToLower() : null;\r\n\r\n                    if (hintName != hintBaseName)\r\n                        return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an array of types according to the alias mask of the signature (for argfull use).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"hiddenParamCount\">\r\n\t\t/// Number of hidden parameters preceding the parameters captured by alias mask.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"returnType\">Return type.</param>\r\n\t\t/// <returns>\r\n\t\t/// Argfull overload CLR parameter types. Contains <B>null</B> references in places of hidden params.\r\n\t\t/// </returns>\r\n\t\tpublic Type[] ToArgfullSignature(int hiddenParamCount, out Type returnType)\r\n\t\t{\r\n\t\t\tType[] result = new Type[hiddenParamCount + GenericParamCount + ParamCount];\r\n\r\n\t\t\tint arg_idx = hiddenParamCount;\r\n\r\n\t\t\tfor (int i = 0; i < GenericParamCount; i++)\r\n\t\t\t{\r\n\t\t\t\tresult[arg_idx++] = Emit.Types.DTypeDesc[0];\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < ParamCount; i++)\r\n\t\t\t{\r\n\t\t\t\tresult[arg_idx++] = (aliasMask[i]) ? Emit.Types.PhpReference[0] : Emit.Types.Object[0];\r\n\t\t\t}\r\n\r\n\t\t\treturnType = aliasReturn ? Emit.Types.PhpReference[0] : Emit.Types.Object[0];\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"PhpRoutineSignature\"/> for the specified argfull <see cref=\"MethodInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"ReflectionException\">Invalid argfull.</exception>\r\n\t\tpublic static PhpRoutineSignature/*!*/ FromArgfullInfo(PhpRoutine/*!*/ routine, MethodInfo/*!*/ argfull)\r\n\t\t{\r\n\t\t\t// determine aliasReturn\r\n\t\t\tbool alias_return = false;\r\n\r\n\t\t\tif (argfull.ReturnType != Types.Object[0])\r\n\t\t\t{\r\n\t\t\t\tif (argfull.ReturnType == Types.PhpReference[0]) alias_return = true;\r\n\t\t\t\telse throw new ReflectionException(\"TODO\");\r\n\t\t\t}\r\n\r\n\t\t\tParameterInfo[] parms = argfull.GetParameters();\r\n\r\n\t\t\tint parms_length = parms.Length;\r\n\t\t\tint parms_offset = 1;\r\n\r\n\t\t\tif (--parms_length < 0 || parms[0].ParameterType != Types.ScriptContext[0])\r\n\t\t\t{\r\n\t\t\t\t// TODO: resource\r\n\t\t\t\tthrow new ReflectionException(\"Invalid static argfull signature of method \" + routine.FullName);\r\n\t\t\t}\r\n\r\n\t\t\t// process pseudo-generic parameters:\r\n\t\t\tint j = parms_offset;\r\n\t\t\twhile (j < parms.Length && parms[j].ParameterType == Types.DTypeDesc[0]) j++;\r\n\t\t\tint generic_param_count = j - parms_offset;\r\n\r\n\t\t\tint mandatory_generic_param_count = 0;\r\n\t\t\tGenericParameter[] generic_params = (generic_param_count > 0) ? new GenericParameter[generic_param_count] : GenericParameter.EmptyArray;\r\n\r\n\t\t\tfor (int i = 0; i < generic_param_count; i++)\r\n\t\t\t{\r\n\t\t\t\tParameterInfo pinfo = parms[i + parms_offset];\r\n\t\t\t\tgeneric_params[i] = new GenericParameter(new Name(pinfo.Name), i, routine);\r\n\r\n\t\t\t\tDTypeSpecAttribute default_type = DTypeSpecAttribute.Reflect(pinfo);\r\n\t\t\t\tif (default_type != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// TODO:\r\n\t\t\t\t\t// generic_params[i].WriteUp(default_type.TypeSpec.GetTypeDesc(null, null, null, null).Type);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tgeneric_params[i].WriteUp(null);\r\n\r\n\t\t\t\t\tif (mandatory_generic_param_count < i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// TODO: resource\r\n\t\t\t\t\t\tthrow new ReflectionException(\"Invalid signature\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tmandatory_generic_param_count++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparms_offset += generic_param_count;\r\n\t\t\tparms_length -= generic_param_count;\r\n\r\n\t\t\t// set up genericParams, aliasMask, typeHints, and mandatoryParamCount:\r\n\t\t\tBitArray alias_mask = new BitArray(parms_length, false);\r\n\t\t\tDType[] type_hints = new DType[parms_length];\r\n\t\t\tint mandatory_param_count = 0;\r\n\r\n\t\t\tfor (int i = 0; i < parms_length; i++)\r\n\t\t\t{\r\n\t\t\t\tParameterInfo pinfo = parms[i + parms_offset];\r\n\r\n\t\t\t\tif (pinfo.ParameterType != Types.Object[0])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pinfo.ParameterType == Types.PhpReference[0])\r\n\t\t\t\t\t\talias_mask[i] = true;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tDTypeSpecAttribute type_hint = DTypeSpecAttribute.Reflect(pinfo);\r\n\t\t\t\tif (type_hint != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// TODO:\r\n\t\t\t\t\t// type_hints[i] = type_hint.TypeSpec.GetTypeDesc(null, null, null, null).Type;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!pinfo.IsOptional)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (mandatory_param_count < i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// invalid optional parameters\r\n\t\t\t\t\t\tthrow new ReflectionException(\"Invalid signature\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse mandatory_param_count++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn new PhpRoutineSignature(generic_params, mandatory_generic_param_count).\r\n\t\t\t  WriteUp(alias_return, alias_mask, type_hints, mandatory_param_count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug\r\n\r\n#if DEBUG\r\n\t\tinternal void Print(string name)\r\n\t\t{\r\n\t\t\tConsole.Write(aliasReturn ? \"ref \" : \"obj \");\r\n\t\t\tConsole.Write(name + \"(\");\r\n\t\t\tforeach (bool is_ref in aliasMask)\r\n\t\t\t\tConsole.Write(is_ref ? \"ref \" : \"obj \");\r\n\t\t\tConsole.WriteLine(\")\");\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpRoutine, PhpRoutineBuilder\r\n\r\n\tpublic abstract class PhpRoutine : KnownRoutine, IPhpMember\r\n\t{\r\n\t\tpublic const string ContextParamName = \"<context>\";\r\n\t\tpublic const string LocalVariablesTableName = \"<locals>\";\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic PhpRoutineDesc/*!*/ PhpRoutineDesc { get { return (PhpRoutineDesc)memberDesc; } }\r\n\t\t\r\n\t\tpublic abstract bool IsFunction { get; }\r\n\t\tpublic bool IsMethod { get { return !IsFunction; } }\r\n        public virtual bool IsLambdaFunction { get { return false; } }\r\n\r\n        public abstract CompilationSourceUnit SourceUnit { get; }\r\n        public abstract Text.Span Span { get; }\r\n\r\n        /// <summary>Contains value of the <see cref=\"IsDllImport\"/> property</summary>\r\n        private bool isDllImport = false;\r\n        /// <summary>Indicates if this method is decorated with <see cref=\"System.Runtime.InteropServices.DllImportAttribute\"/></summary>\r\n        public bool IsDllImport{\r\n            get{return isDllImport;}\r\n            protected internal set { isDllImport = value; }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Written up, not null after that.\r\n\t\t/// </summary>\r\n\t\tpublic PhpRoutineSignature/*!W*/ Signature { get { return signature; } }\r\n\t\tprotected PhpRoutineSignature/*!W*/ signature;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Auxiliary fields used for emission, <B>null</B> for reflected types.\r\n\t\t/// </summary>\r\n\t\tpublic PhpRoutineBuilder Builder { get { return builder; } }\r\n\t\tprotected PhpRoutineBuilder builder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B>, if the method has generic arguments. \r\n\t\t/// Valid since write-up.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsGeneric { get { return signature.GenericParamCount > 0; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of hidden arguments of the arg-full overload.\r\n\t\t/// Valid since write-up.\r\n\t\t/// </summary>\r\n\t\tinternal int FirstPhpParameterIndex\r\n\t\t{\r\n\t\t\tget { return FirstPseudoGenericParameterIndex + signature.GenericParamCount; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an index of the first pseudo-generic argument.\r\n\t\t/// Methods and functions use the 0-th argument for passing the <see cref=\"ScriptContext\"/>.\r\n\t\t/// In instance methods, the 0-th argument is \"this\".\r\n\t\t/// </summary>\r\n\t\tinternal int FirstPseudoGenericParameterIndex\r\n\t\t{\r\n\t\t\tget { return (IsStatic ? 1 : 2); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP routine result should be checked for deep-copy.\r\n\t\t/// </summary>\r\n\t\tpublic override bool ReturnValueDeepCopyEmitted { get { return false; } }\r\n\r\n\t\tinternal abstract bool IsExported { get; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler.\r\n\t\t/// </summary>\r\n\t\tinternal PhpRoutine(DRoutineDesc/*!*/ functionDesc, Signature astSignature, TypeSignature astTypeSignature)\r\n\t\t\t: base(functionDesc)\r\n\t\t{\r\n\t\t\tthis.signature = null; // to be written up\r\n\t\t\tthis.builder = new PhpRoutineBuilder(this, astSignature, astTypeSignature);\r\n\t\t}\r\n\r\n\t\tinternal void WriteUp(PhpRoutineSignature/*!*/ signature)\r\n\t\t{\r\n\t\t\tDebug.Assert(signature != null);\r\n\t\t\tDebug.Assert(this.signature == null, \"Already written up.\");\r\n\r\n\t\t\tthis.signature = signature;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the reflection.\r\n\t\t/// </summary>\r\n\t\tpublic PhpRoutine(DRoutineDesc/*!*/ functionDesc)\r\n\t\t\t: base(functionDesc)\r\n\t\t{\r\n\t\t\tthis.signature = null; // to be written up\r\n\t\t\tthis.builder = null; // unused\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override RoutineSignature/*!*/ GetSignature(int overloadIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(signature != null);\r\n\t\t\treturn signature;\r\n\t\t}\r\n\r\n\t\tpublic abstract string GetFullClrName();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n        internal void ValidateBody(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\t// checks whether there are too many local variables (warning only):\r\n\t\t\tif (builder.LocalVariables.Count > VariablesTable.SuboptimalLocalsCount)\r\n\t\t\t{\r\n\t\t\t\tproperties |= RoutineProperties.HasUnoptimizedLocals;\r\n\r\n\t\t\t\tif (IsMethod)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Warnings.TooManyLocalVariablesInMethod, SourceUnit, Span,\r\n\t\t\t\t\t\tDeclaringType.FullName, FullName, builder.LocalVariables.Count.ToString());\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Warnings.TooManyLocalVariablesInFunction, SourceUnit, Span,\r\n\t\t\t\t\t\tFullName, builder.LocalVariables.Count.ToString());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// check labels:\r\n\t\t\tAnalyzer.ValidateLabels(errors, SourceUnit, builder.Labels);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\t#region DefineBuilders\r\n\r\n        /// <summary>\r\n        /// Defines real method on routine declaring type.\r\n        /// </summary>\r\n        protected virtual MethodInfo/*!*/DefineRealMethod(string/*!*/realMethodName, MethodAttributes attrs, Type/*!*/returnType, Type[]/*!!*/parametersType)\r\n        {\r\n            Debug.Assert(realMethodName != null);\r\n\r\n            return this.DeclaringType.DefineRealMethod(realMethodName, attrs, returnType, parametersType);\r\n        }\r\n\r\n\t\tinternal virtual void DefineBuilders()\r\n\t\t{\r\n\t\t\tMethodAttributes attrs = Enums.ToMethodAttributes(memberDesc.MemberAttributes);\r\n\r\n\t\t\tstring clr_name;\r\n\r\n\t\t\tif (IsLambda)\r\n\t\t\t{\r\n\t\t\t\tclr_name = Name.LambdaFunctionName.Value;\r\n\t\t\t\tattrs &= ~MethodAttributes.MemberAccessMask;\r\n\t\t\t\tattrs |= MethodAttributes.PrivateScope | MethodAttributes.SpecialName;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tclr_name = this.GetFullClrName();\r\n\t\t\t}\r\n\r\n\t\t\tDefineArglessOverload(attrs, clr_name);\r\n\t\t\tDefineArgfullOverload(attrs, clr_name);\r\n\r\n\t\t\t// we can emit argless overload here as it requires argfull method info only:\r\n\t\t\tif (ArgLessInfo != null) EmitArglessOverload();\r\n\t\t}\r\n\r\n\t\tprivate void DefineArglessOverload(MethodAttributes attrs, string/*!*/ realMethodName)\r\n\t\t{\r\n\t\t\tif (!IsAbstract)\r\n\t\t\t{\r\n\t\t\t\t// defines overload (even instance methods have static argless overloads):\r\n\t\t\t\t// mark argless as having a special name to enable fast removal from the stack trace:\r\n\t\t\t\tattrs |= MethodAttributes.Static | MethodAttributes.SpecialName;\r\n\t\t\t\tattrs &= ~(MethodAttributes.Virtual | MethodAttributes.Final);\r\n\r\n\t\t\t\tthis.argless = DefineRealMethod(realMethodName, attrs, Types.Object[0], Types.Object_PhpStack);\r\n\r\n\t\t\t\t// [EditorBrowsable(Never)] for user convenience - not available on SL:\r\n#if !SILVERLIGHT\r\n\t\t\t\tif (IsExported)\r\n\t\t\t\t\tReflectionUtils.SetCustomAttribute(argless, AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n\t\t\t\t// [DebuggerHidden] drives the stack tracer to skip the frame:\r\n\t\t\t\t// ReflectionUtils.SetCustomAttribute(argless, AttributeBuilders.DebuggerHidden);\t\t\t\t\t\r\n\r\n\t\t\t\t// we need to name the arguments as ASP.NET's binding reflection requires named args:\r\n\t\t\t\tMethodBuilder method_builder = argless as MethodBuilder;\r\n\t\t\t\tif (method_builder != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tmethod_builder.DefineParameter(1, ParameterAttributes.None, \"instance\");\r\n\t\t\t\t\tmethod_builder.DefineParameter(2, ParameterAttributes.None, \"stack\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.argless = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        private void DefineArgfullOverload(MethodAttributes attrs, string/*!*/ realMethodName)\r\n\t\t{\r\n\t\t\tType return_type;\r\n            Type[] param_types;\r\n\r\n            param_types = signature.ToArgfullSignature(1, out return_type);\r\n            param_types[0] = Types.ScriptContext[0];\r\n\r\n\t\t\t// defines overload:\r\n\t\t\tthis.argfull = DefineRealMethod(realMethodName, attrs, return_type, param_types);\r\n\r\n\t\t\tDefineParameterBuildersOnArgFull();\r\n\r\n\t\t\t// needs to be emitted to distinguish arg-full from exported:\r\n\t\t\t// [EditorBrowsable(Never)] - not available on SL\r\n#if !SILVERLIGHT\r\n\t\t\tReflectionUtils.SetCustomAttribute(argfull, AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n            // [NeedsArglessAttribute] to mark the function if it should be called via argless stub\r\n            if ((this.Properties & RoutineProperties.IsArgsAware) != 0)  // function requires PhpStack to be loaded\r\n                ReflectionUtils.SetCustomAttribute(argfull,\r\n                    new CustomAttributeBuilder(typeof(NeedsArglessAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n\r\n            // [UsesLateStaticBindingAttribute] to mark the function if it needs type used to call method statically\r\n            if (this.UsesLateStaticBinding)  // function requires PhpStack to be loaded\r\n                ReflectionUtils.SetCustomAttribute(argfull,\r\n                    new CustomAttributeBuilder(typeof(UsesLateStaticBindingAttribute).GetConstructor(Type.EmptyTypes), ArrayUtils.EmptyObjects));\r\n            \r\n            // [PhpAbstract][PhpFinal] if needed\r\n\t\t\tEnums.DefineCustomAttributes(MemberDesc.MemberAttributes, this.argfull);\r\n\t\t}\r\n\r\n\t\tprivate void DefineParameterBuildersOnArgFull()\r\n\t\t{\r\n\t\t\tbuilder.ReturnParamBuilder = ReflectionUtils.DefineParameter(argfull, 0, ParameterAttributes.None, null);\r\n\r\n\t\t\t// include \"this\" and \"context\" parameters as well (0-th parameters):\r\n\t\t\tint real_param_count = this.FirstPhpParameterIndex + signature.ParamCount;\r\n\t\t\tbuilder.ParameterBuilders = new ParameterBuilder[real_param_count];\r\n\r\n\t\t\t// names the first argument of the static argfull overload - the context:\r\n\t\t\tif (IsStatic)\r\n                builder.ParameterBuilders[0] = ReflectionUtils.DefineParameter(argfull, 1, ParameterAttributes.None, PhpRoutine.ContextParamName);\r\n\r\n\t\t\t// pseudo-generic parameters:\r\n\t\t\tforeach (GenericParameter param in signature.GenericParams)\r\n\t\t\t\tparam.DefineBuildersWithinMethod();\r\n\r\n\t\t\t// PHP parameters:\r\n            for (int i = 0, real_index = FirstPhpParameterIndex; i < signature.ParamCount; i++, real_index++)\r\n            {\r\n                ParameterBuilder param_builder;\r\n\r\n                string argName = builder.Signature.FormalParams[i].Name.Value;\r\n\r\n\r\n                builder.ParameterBuilders[real_index] = param_builder = ReflectionUtils.DefineParameter(\r\n                    argfull,\r\n                    (IsStatic ? 1 : 0) + real_index,\r\n                    (i < signature.MandatoryParamCount) ? ParameterAttributes.None : ParameterAttributes.Optional,\r\n                    argName);\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Argless\r\n\r\n\t\t// argless signature: static object <name>(object instance, PhpStack stack);\r\n\t\tprivate static readonly IndexedPlace/*!*/ arglessInstancePlace = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\tprivate static readonly IndexedPlace/*!*/ arglessStackPlace = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\tprivate void EmitArglessOverload()\r\n\t\t{\r\n\t\t\tbool args_aware = (properties & RoutineProperties.IsArgsAware) != 0;\r\n\r\n\t\t\t// we need a mediator only to make the code verifiable, which is not applicable on dynamic methods:\r\n            MethodInfo call_target = ArgFullInfo; // (IsStatic || ArgLessInfo is DynamicMethod) ? ArgFullInfo : BuildNonVirtualMediator();\r\n\t\t\tILEmitter il = new ILEmitter(ArgLessInfo);\r\n\r\n\t\t\tLocalBuilder loc_count;\r\n\r\n\t\t\t// PhpStack.CalleeName = <name>;\r\n\t\t\targlessStackPlace.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldstr, IsLambda ? DynamicCode.InlinedLambdaFunctionName : FullName);\r\n\t\t\til.Emit(OpCodes.Stfld, Fields.PhpStack_CalleeName);\r\n\r\n\t\t\tif (!IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// LOAD <instance>;\r\n\t\t\t\targlessInstancePlace.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Castclass, DeclaringPhpType.Builder.RealOpenType);\r\n\t\t\t}\r\n\r\n\t\t\t// LOAD <script context>;\r\n\t\t\targlessStackPlace.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpStack_Context);\r\n\r\n\t\t\t// peek pseudo-generic arguments:\r\n\t\t\tfor (int i = 0; i < signature.GenericParamCount; i++)\r\n\t\t\t\tEmitPeekPseudoGenericArgument(il, i);\r\n\r\n\t\t\t// peek regular arguments:\r\n\t\t\tfor (int i = 0; i < signature.ParamCount; i++)\r\n\t\t\t\tEmitPeekArgument(il, i);\r\n\r\n            // emits pre call code (alters a frame if a function is args-aware removes it otherwise):\r\n\t\t\tPhpStackBuilder.EmitArgFullPreCall(il, arglessStackPlace, args_aware, signature.ParamCount,\r\n\t\t\t  signature.GenericParamCount, out loc_count);\r\n\r\n\t\t\t// emits call to the arg-full overload non-virtually;\r\n\t\t\t// the return value is left on the stack until return:\r\n\t\t\til.Emit(OpCodes.Call, call_target);\r\n\r\n\t\t\t// emits post call code (removes a frame if the function is args-aware):\r\n\t\t\tPhpStackBuilder.EmitArgFullPostCall(il, arglessStackPlace, loc_count);\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n        private void EmitPeekPseudoGenericArgument(ILEmitter/*!*/ il, int index)\r\n\t\t{\r\n\t\t\tbool optional = index >= signature.MandatoryGenericParamCount;\r\n\t\t\tint stack_offset = index + 1;\r\n\r\n\t\t\t// LOAD stack.PeekType[Optional](<stack_offset>, [default_value]);\r\n\t\t\targlessStackPlace.EmitLoad(il);                           // stack\r\n\t\t\til.LdcI4(stack_offset);                                   // offset on stack\r\n\r\n\t\t\tif (optional)\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekTypeOptional);\r\n\t\t\telse\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekType);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits code which pops argument from the <see cref=\"PhpStack\"/> and pushes it on the evaluation stack.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitPeekArgument(ILEmitter/*!*/ il, int index)\r\n\t\t{\r\n\t\t\tbool optional = index >= signature.MandatoryParamCount;\r\n\t\t\tint stack_offset = index + 1;\r\n\r\n\t\t\tif (signature.IsAlias(index))\r\n\t\t\t{\r\n\t\t\t\t// LOAD stack.PeekReference[Optional](<stack_offset>, [default_value]);\r\n\t\t\t\targlessStackPlace.EmitLoad(il);                           // stack\r\n\t\t\t\til.LdcI4(stack_offset);                                   // offset on stack\r\n\r\n\t\t\t\tif (optional)\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReferenceOptional);\r\n\t\t\t\telse\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekReference);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// LOAD stack.PeekValue[Optional](<stack_offset>);\r\n\t\t\t\targlessStackPlace.EmitLoad(il);                           // stack\r\n\t\t\t\til.LdcI4(stack_offset);                                   // offset on stack\r\n\r\n\t\t\t\tif (optional)\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValueOptional);\r\n\t\t\t\telse\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.PeekValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Call\r\n\r\n        /// <summary>\r\n        /// Emit load <paramref name=\"instance\"/> in top of the evaluation stack. Unwraps the value if &lt;proxy&gt; is used instead of <c>this</c>.\r\n        /// </summary>\r\n        /// <param name=\"codeGenerator\"></param>\r\n        /// <param name=\"instance\"></param>\r\n        private static void EmitLoadInstanceUnwrapped(CodeGenerator/*!*/ codeGenerator, IPlace instance)\r\n        {\r\n            if (instance != null)\r\n            {\r\n                // just detect DirectVarUse holding $this in context of Type with <proxy> property:\r\n                var targetExpression = ExpressionPlace.GetExpression(instance);\r\n\r\n                // pass RealObject instead of DObject when using <proxy>:   // J: ASP.NET code behind fix // ArgLesses expect RealObject too\r\n                if (targetExpression != null &&\r\n                    codeGenerator.LocationStack.InMethodDecl && codeGenerator.LocationStack.PeekMethodDecl().Type.ProxyFieldInfo != null &&    // current type has \"<proxy>\" property\r\n                    targetExpression is DirectVarUse && ((DirectVarUse)targetExpression).VarName.IsThisVariableName && ((DirectVarUse)targetExpression).IsMemberOf == null)   // we are accessing \"this\"\r\n                    instance = IndexedPlace.ThisArg;    // \"this\" instead of \"this.<proxy>\"\r\n\r\n                //\r\n                instance.EmitLoad(codeGenerator.IL);\r\n            }\r\n        }\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n            if (IsStatic != (instance == null) || runtimeVisibilityCheck)\r\n\t\t\t{\r\n                Expression targetExpression = null;\r\n                if (instance != null)\r\n                {\r\n                    targetExpression = ExpressionPlace.GetExpression(instance); // the instance expression, $this would be determined in runtime\r\n                    Debug.Assert(targetExpression != null || instance == IndexedPlace.ThisArg,\r\n                        \"Unexpected instance IPlace type\" + this.Name.Value);\r\n                }\r\n\r\n                // call the operator if we could not provide an appropriate instance or the visibility has to be checked:\r\n                return codeGenerator.EmitRoutineOperatorCall(this.UsesLateStaticBinding ? type : this.DeclaringType, targetExpression, this.FullName, fallbackQualifiedName, null, callSignature, access);\r\n\t\t\t}\r\n\r\n            Debug.Assert(IsStatic == (instance == null));\r\n\r\n            if (IsStatic) callVirt = false; // never call static method virtually\r\n            \r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\tvar constructedType = type as ConstructedType;\r\n\r\n            // load the instance reference if we have one:\r\n            // Just here we need RealObject if possible. When calling CLR method on $this,\r\n            // Phalanger has \"this.<proxy>\" in \"codeGenerator.SelfPlace\". We need just \"this\".\r\n\t\t\tEmitLoadInstanceUnwrapped(codeGenerator, instance);\r\n\r\n            // arg-full overload may not be present in the case of classes declared Class Library where\r\n\t\t\t// we do not require the user to specify both overloads\r\n\t\t\tif (IsArgsAware || ArgFullInfo == null)\r\n\t\t\t{\r\n\t\t\t\t// args-aware routines //\r\n                Debug.Assert(callVirt == false, \"Cannot call ArgLess stub virtually!\");\r\n\r\n\t\t\t\t// all arg-less stubs have the 'instance' parameter\r\n\t\t\t\tif (instance == null) il.Emit(OpCodes.Ldnull);\r\n\r\n\t\t\t\t// emits load of parameters to the PHP stack:\r\n\t\t\t\tcallSignature.EmitLoadOnPhpStack(codeGenerator);\r\n\r\n                // CALL <routine>(context.Stack)\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\r\n                if (this.UsesLateStaticBinding)\r\n                {\r\n                    // <stack>.LateStaticBindType = <type>\r\n                    il.Emit(OpCodes.Dup);\r\n                    type.EmitLoadTypeDesc(codeGenerator, ResolveTypeFlags.None);\r\n                    il.Emit(OpCodes.Stfld, Fields.PhpStack_LateStaticBindType);\r\n                }\r\n\r\n                il.Emit(OpCodes.Call, DType.MakeConstructed(ArgLessInfo, constructedType));\r\n\r\n\t\t\t\t// arg-less overload's return value has to be type-cast to a reference if it returns one:\r\n\t\t\t\tif (signature == null || signature.AliasReturn)\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Castclass, typeof(PhpReference));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// args-unaware routines //\r\n\r\n\t\t\t\t// CALL <routine>(context, <argumens>)\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\tcallSignature.EmitLoadOnEvalStack(codeGenerator, this);\r\n                il.Emit(callVirt ? OpCodes.Callvirt : OpCodes.Call, DType.MakeConstructed(ArgFullInfo, constructedType));\r\n\t\t\t}\r\n\r\n\t\t\t// marks transient sequence point just after the call:\r\n\t\t\tcodeGenerator.MarkTransientSequencePoint();\r\n\r\n\t\t\treturn ((signature == null || signature.AliasReturn) ? PhpTypeCode.PhpReference : PhpTypeCode.Object);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\tpublic sealed class PhpRoutineBuilder\r\n\t{\r\n\t\tpublic PhpRoutine/*!*/ Routine { get { return routine; } }\r\n\t\tprivate readonly PhpRoutine/*!*/ routine;\r\n\r\n\t\tinternal ExportAttribute ExportInfo\r\n\t\t{\r\n\t\t\tget { return exportInfo; }\r\n\t\t\tset /* FunctionDecl, MethodDecl */ { exportInfo = value; }\r\n\t\t}\r\n\t\tprivate ExportAttribute exportInfo;\r\n\r\n\t\tinternal Signature Signature { get { return signature; } }\r\n\t\tprivate readonly Signature signature;\r\n\r\n\t\tinternal TypeSignature TypeSignature { get { return typeSignature; } }\r\n\t\tprivate readonly TypeSignature typeSignature;\r\n\r\n\t\tinternal VariablesTable/*!*/ LocalVariables { get { return localVariables; } }\r\n\t\tprivate readonly VariablesTable/*!*/ localVariables;\r\n\r\n\t\t/// <summary>\r\n\t\t/// TODO: lazy creation\r\n\t\t/// </summary>\r\n\t\tinternal Dictionary<VariableName, Statement>/*!*/ Labels { get { return labels; } }\r\n\t\tprivate Dictionary<VariableName, Statement>/*!*/ labels;\r\n\r\n\t\tinternal ParameterBuilder ReturnParamBuilder { get { return returnParamBuilder; } set { returnParamBuilder = value; } }\r\n\t\tprivate ParameterBuilder returnParamBuilder = null;\r\n\r\n\t\tpublic ParameterBuilder[] ParameterBuilders { get { return parameterBuilders; } set { parameterBuilders = value; } }\r\n\t\tprivate ParameterBuilder[] parameterBuilders;\r\n\r\n\t\tinternal PhpRoutineBuilder(PhpRoutine/*!*/ routine, Signature signature, TypeSignature typeSignature)\r\n\t\t{\r\n\t\t\tthis.routine = routine;\r\n\t\t\tthis.signature = signature;\r\n\t\t\tthis.typeSignature = typeSignature;\r\n\t\t\tthis.localVariables = new VariablesTable(10);\r\n\t\t\tthis.labels = new Dictionary<VariableName, Statement>(1);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpFunction\r\n\r\n\tpublic sealed class PhpFunction : PhpRoutine, IDeclaree\r\n\t{\r\n\t\tpublic override bool IsFunction { get { return true; } }\r\n\r\n\t\tpublic override bool IsIdentityDefinite\r\n\t\t{\r\n\t\t\tget { return declaration == null || !declaration.IsConditional; }\r\n\t\t}\r\n\r\n\t\tpublic override Name Name { get { return qualifiedName.Name; } }\r\n\r\n\t\tpublic QualifiedName QualifiedName { get { return qualifiedName; } }\r\n\t\tprivate QualifiedName qualifiedName;\r\n\r\n\t\tpublic VersionInfo Version { get { return version; } set { version = value; } }\r\n\t\tprivate VersionInfo version;\r\n\r\n\t\tpublic Declaration/*!*/ Declaration { get { return declaration; } }\r\n\t\tprivate Declaration/*!*/ declaration;\r\n\r\n        public override CompilationSourceUnit SourceUnit { get { return declaration.SourceUnit; } }\r\n        public override Text.Span Span { get { return declaration.Span; } }\r\n\r\n\t\tpublic override bool IsLambda { get { return isLambda; } }\r\n\t\tprivate bool isLambda;\r\n\r\n\t\tinternal override bool IsExported\r\n\t\t{\r\n\t\t\tget { return builder.ExportInfo != null; }\r\n\t\t}\r\n\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by compiler.\r\n\t\t/// </summary>\r\n\t\tinternal PhpFunction(QualifiedName qualifiedName, PhpMemberAttributes memberAttributes,\r\n\t\t\tSignature astSignature, TypeSignature astTypeSignature, bool isConditional, Scope scope,\r\n            CompilationSourceUnit/*!*/ sourceUnit, Text.Span position)\r\n\t\t\t: base(new PhpRoutineDesc(sourceUnit.CompilationUnit.Module, memberAttributes), astSignature, astTypeSignature)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceUnit != null && position.IsValid);\r\n\r\n\t\t\tthis.declaration = new Declaration(sourceUnit, this, false, isConditional, scope, position);\r\n\t\t\tthis.qualifiedName = qualifiedName;\r\n\t\t\tthis.version = new VersionInfo();\r\n\t\t\tthis.signature = null; // to be written up\r\n\t\t}\r\n\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tinternal PhpFunction(QualifiedName name, PhpRoutineDesc/*!*/ routineDesc, MethodInfo/*!*/ argfull, MethodInfo argless)\r\n\t\t\t: base(routineDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(argless != null);\r\n\r\n\t\t\tthis.qualifiedName = name;\r\n\t\t\tthis.argfull = argfull;\r\n\t\t\tthis.argless = argless;\r\n\r\n            // if the function needs to be called via argless stub, update the property\r\n            if (NeedsArglessAttribute.IsSet(argfull))\r\n                this.Properties |= RoutineProperties.UseVarArgs;    // the function calls some arg-aware class-library function so it has to be called with PhpStack\r\n\r\n            Debug.Assert(!UsesLateStaticBindingAttribute.IsSet(argfull), \"Function cannot use late static binding! Only methods can.\");\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic void ConvertToLambda()\r\n\t\t{\r\n\t\t\tisLambda = true;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn qualifiedName.ToString();\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullClrName()\r\n\t\t{\r\n\t\t\treturn qualifiedName.ToClrNotation(0, version.Index);\r\n\t\t}\r\n\r\n\t\tinternal override void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n\t\t{\r\n\t\t\tif (declaration != null)\r\n\t\t\t\tsink.Add(error, declaration.SourceUnit, declaration.Span);\r\n\t\t}\r\n\r\n\t\tpublic void ReportRedeclaration(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaration != null);\r\n\t\t\terrors.Add(FatalErrors.FunctionRedeclared, declaration.SourceUnit, declaration.Span, FullName);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tinternal void Validate(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\t// TODO: check special functions (__autoload)\r\n\t\t}\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature)\r\n\t\t{\r\n\t\t\tif (callSignature.Parameters.Length < signature.MandatoryParamCount)\r\n\t\t\t{\r\n\t\t\t\tanalyzer.ErrorSink.Add(Warnings.TooFewFunctionParameters, analyzer.SourceUnit, position,\r\n\t\t\t\t\tqualifiedName, signature.MandatoryParamCount, callSignature.Parameters.Length);\r\n\t\t\t}\r\n\r\n\t\t\toverloadSignature = signature;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override void DefineBuilders()\r\n\t\t{\r\n\t\t\tDebug.Assert(declaration != null);\r\n\r\n\t\t\t// don't define builders for unreachable functions and functions in incomplete class\r\n\t\t\t// (but we need to process next version)\r\n\t\t\tif (!declaration.IsUnreachable && !declaration.IsInsideIncompleteClass) \r\n\t\t\t\tbase.DefineBuilders();\r\n\r\n\t\t\t// define builders for the other versions:\r\n\t\t\tif (version.Next != null)\r\n\t\t\t\t((PhpFunction)version.Next).DefineBuilders();\r\n\t\t}\r\n\r\n\t\tinternal PhpRoutineDesc Bake()\r\n\t\t{\r\n\t\t\tDynamicMethod dynamic_argless = argless as DynamicMethod;\r\n\t\t\tif (dynamic_argless != null)\r\n\t\t\t{\r\n\t\t\t\tRoutineDesc.ArglessStub = (RoutineDelegate)dynamic_argless.CreateDelegate(Types.RoutineDelegate);\r\n\r\n\t\t\t\t// nulls member to cut the PhpRoutine off (we need to rereflect it):\r\n\t\t\t\targless = null;\r\n\t\t\t}\r\n\t\t\telse if (argless != null)\r\n\t\t\t{\r\n\t\t\t\t// rereflect:\r\n\r\n\t\t\t\t// TODO (this is an incredible hacking :-) ):\r\n\t\t\t\tif (argless.DeclaringType != null && DeclaringModule.Assembly is TransientAssembly)\r\n\t\t\t\t{\r\n\t\t\t\t\tType type = DeclaringModule.Assembly.RealModule.GetType(argless.DeclaringType.FullName);\r\n\r\n\t\t\t\t\tif (type != null /*&& !(type is TypeBuilder)*/ &&\r\n                        (!(type is TypeBuilder) || ((TypeBuilder)type).IsCreated())) // TODO: order of baking in persistent units (1.script type then functions)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\targless = type.GetMethod(argless.Name, BindingFlags.DeclaredOnly |\r\n\t\t\t\t\t\t\tBindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public,\r\n\t\t\t\t\t\t\tnull, ReflectionUtils.GetParameterTypes(argless.GetParameters()), null);\r\n\r\n\t\t\t\t\t\tRoutineDesc.ArglessStub = (RoutineDelegate)Delegate.CreateDelegate(Types.RoutineDelegate, argless);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tRoutineDesc.Member = null;\r\n\t\t\t\r\n\t\t\treturn this.PhpRoutineDesc;\r\n\t\t}\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n\t\t\tDebug.Assert(instance == null && !runtimeVisibilityCheck);\r\n            Debug.Assert(callVirt == false);\r\n\r\n\t\t\tif (!IsDefinite)\r\n\t\t\t{\r\n\t\t\t\treturn codeGenerator.EmitRoutineOperatorCall(null, null, this.FullName, null, null, callSignature, access);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn base.EmitCall(codeGenerator, fallbackQualifiedName, callSignature, null, false, overloadIndex, null, position, access, callVirt);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpMethod\r\n\r\n\tpublic sealed class PhpMethod : PhpRoutine\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsFunction { get { return false; } }\r\n\t\tpublic override bool IsLambda { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\tpublic override Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting.\r\n\t\t/// <c>Position.Invalid</c> for reflected PHP methods.\r\n\t\t/// </summary>\r\n        public override Text.Span Span { get { return span; } }\r\n        private readonly Text.Span span;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting (for partial classes).\r\n\t\t/// <B>null</B> for reflected PHP methods.\r\n\t\t/// </summary>\r\n\t\tpublic override CompilationSourceUnit SourceUnit { get { return sourceUnit; } }\r\n        private CompilationSourceUnit sourceUnit;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Methods only.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasBody { get { return hasBody; } }\r\n\t\tprivate readonly bool hasBody;\r\n\r\n\t\tinternal DMemberRef Overrides { get { return overrides; } set /* PhpType.Validate */ { overrides = value; } }\r\n\t\tprivate DMemberRef overrides;\r\n\r\n\t\tinternal List<DMemberRef> Implements { get { return implements; } }\r\n\t\tprivate List<DMemberRef> implements;\r\n\r\n\t\tinternal override bool IsExported\r\n\t\t{\r\n\t\t\tget { return builder.ExportInfo != null || this.DeclaringPhpType.IsExported; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler.\r\n\t\t/// </summary>\r\n\t\tinternal PhpMethod(PhpType/*!*/ declaringType, Name name, PhpMemberAttributes memberAttributes, bool hasBody,\r\n      Signature astSignature, TypeSignature astTypeSignature, CompilationSourceUnit/*!*/ sourceUnit, Text.Span position)\r\n\t\t\t: base(new PhpRoutineDesc(declaringType.TypeDesc, memberAttributes), astSignature, astTypeSignature)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null && sourceUnit != null && position.IsValid);\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.span = position;\r\n\t\t\tthis.hasBody = hasBody;\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tinternal PhpMethod(Name name, PhpRoutineDesc/*!*/ routineDesc, MethodInfo/*!*/ argfull, MethodInfo argless)\r\n\t\t\t: base(routineDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(argless != null ^ IsAbstract);\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.argfull = argfull;\r\n\t\t\tthis.argless = argless;\r\n\r\n            // if the function needs to be called via argless stub, update the properties\r\n            if (NeedsArglessAttribute.IsSet(argfull))\r\n                this.Properties |= RoutineProperties.UseVarArgs;    // the function calls some arg-aware class-library function so it has to be called with PhpStack\r\n\r\n            if (UsesLateStaticBindingAttribute.IsSet(argfull))\r\n                this.Properties |= RoutineProperties.LateStaticBinding;    // this method uses late static binding\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullClrName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature)\r\n\t\t{\r\n            if (callSignature.Parameters.Length < signature.MandatoryParamCount)\r\n\t\t\t{\r\n\t\t\t\tif (IsConstructor)\r\n\t\t\t\t{\r\n\t\t\t\t\tanalyzer.ErrorSink.Add(Warnings.TooFewCtorParameters, analyzer.SourceUnit, position,\r\n                        DeclaringType.FullName, signature.MandatoryParamCount, callSignature.Parameters.Length);\r\n\t\t\t\t}\r\n\t\t\t\telse if (IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\tanalyzer.ErrorSink.Add(Warnings.TooFewMethodParameters, analyzer.SourceUnit, position,\r\n\t\t\t\t\t\tDeclaringType.FullName, this.FullName, signature.MandatoryParamCount.ToString(),\r\n                        callSignature.Parameters.Length.ToString());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toverloadSignature = signature;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tinternal override void AddAbstractOverride(DMemberRef/*!*/ abstractMethod)\r\n\t\t{\r\n\t\t\tif (abstractMethod.Member.DeclaringType.IsInterface)\r\n\t\t\t{\r\n\t\t\t\tif (implements == null)\r\n\t\t\t\t\timplements = new List<DMemberRef>();\r\n\r\n\t\t\t\timplements.Add(abstractMethod);\r\n\r\n\t\t\t\tDebug.WriteLine(\"F-ANALYSIS\", \"GetUserEntryPoint '{0}::{1}': implemens += '{2}::{3}'\",\r\n\t\t\t\t\tDeclaringType.FullName, FullName, abstractMethod.Type.MakeFullGenericName(), abstractMethod.Member.FullName);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toverrides = abstractMethod;\r\n\t\t\t\tDebug.WriteLine(\"F-ANALYSIS\", \"GetUserEntryPoint '{0}::{1}': overrides = '{2}::{3}'\",\r\n\t\t\t\t\tDeclaringType.FullName, FullName, overrides.Type.MakeFullGenericName(), overrides.Member.FullName);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\tinternal void Validate(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tif (hasBody)\r\n\t\t\t{\r\n\t\t\t\t// make sure that interface methods have no bodies:\r\n\t\t\t\tif (DeclaringType.IsInterface)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.InterfaceMethodWithBody, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\t}\r\n\t\t\t\telse if (IsAbstract) // all methods in interfaces are abstract\r\n\t\t\t\t{\r\n\t\t\t\t\t// make sure that abstract methods have no bodies\r\n\t\t\t\t\terrors.Add(Errors.AbstractMethodWithBody, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\t\tMemberDesc.MemberAttributes &= ~PhpMemberAttributes.Abstract;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// make sure that non-abstract methods have bodies\r\n\t\t\t\tif (!IsAbstract)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.NonAbstractMethodWithoutBody, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\t\tMemberDesc.MemberAttributes |= PhpMemberAttributes.Abstract;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.IsConstructor)\r\n\t\t\t{\r\n\t\t\t\t// constructor non-staticness:\r\n\t\t\t\tif (IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.ConstructCannotBeStatic, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\t\tMemberDesc.MemberAttributes &= ~PhpMemberAttributes.Static;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// no generic parameters on ctor:\r\n\t\t\t\tif (signature.GenericParamCount > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.ConstructorWithGenericParameters, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\t\t// generic arguments needn't to be removed\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.Name.IsCloneName)\r\n\t\t\t{\r\n\t\t\t\t// clone argumentless-ness\r\n\t\t\t\tif (signature != null && signature.ParamCount > 0)\r\n\t\t\t\t\terrors.Add(Errors.CloneCannotTakeArguments, sourceUnit, span, DeclaringType.FullName);\r\n\r\n\t\t\t\t// clone non-staticness\r\n\t\t\t\tif (IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.CloneCannotBeStatic, sourceUnit, span, DeclaringType.FullName);\r\n\t\t\t\t\tRoutineDesc.MemberAttributes &= ~PhpMemberAttributes.Final;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.Name.IsDestructName)\r\n\t\t\t{\r\n\t\t\t\t// destructor argumentless-ness\r\n\t\t\t\tif (signature != null && signature.ParamCount > 0)\r\n\t\t\t\t\terrors.Add(Errors.DestructCannotTakeArguments, sourceUnit, span, DeclaringType.FullName);\r\n\r\n\t\t\t\t// destructor non-staticness\r\n\t\t\t\tif (IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.DestructCannotBeStatic, sourceUnit, span, DeclaringType.FullName);\r\n\t\t\t\t\tMemberDesc.MemberAttributes &= ~PhpMemberAttributes.Static;\r\n\t\t\t\t}\r\n\t\t\t}\r\n            else if (this.Name.IsCallName || this.Name.IsCallStaticName)\r\n            {\r\n                // check visibility & staticness\r\n                if (this.Name.IsCallName && (this.IsStatic || !this.IsPublic))\r\n                    errors.Add(Warnings.MagicMethodMustBePublicNonStatic, sourceUnit, span, this.Name.Value);\r\n\r\n                if (this.Name.IsCallStaticName && (!this.IsStatic || !this.IsPublic))\r\n                    errors.Add(Warnings.CallStatMustBePublicStatic, sourceUnit, span);\r\n\r\n                // check args count\r\n                if (signature != null && signature.ParamCount != 2)\r\n                {\r\n                    errors.Add(FatalErrors.MethodMustTakeExacArgsCount, sourceUnit, span, this.DeclaringType.FullName, this.Name.Value, 2);\r\n                }\r\n            }\r\n            else if (this.Name.IsToStringName)\r\n            {\r\n                if (IsStatic || !IsPublic)\r\n                    errors.Add(Warnings.MagicMethodMustBePublicNonStatic, sourceUnit, span, this.Name.Value);\r\n\r\n                if (signature != null && signature.ParamCount != 0)\r\n                    errors.Add(Errors.MethodCannotTakeArguments, sourceUnit, span, this.DeclaringType.FullName, this.Name.Value);\r\n            }\r\n\r\n\t\t\t// no final abstract member:\r\n\t\t\tif (IsAbstract && IsFinal)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.AbstractFinalMethodDeclared, sourceUnit, span);\r\n\t\t\t\tMemberDesc.MemberAttributes &= ~((hasBody) ? PhpMemberAttributes.Final : PhpMemberAttributes.Abstract);\r\n\t\t\t}\r\n\r\n\t\t\t// no private abstract member:\r\n\t\t\tif (IsAbstract && IsPrivate)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.AbstractPrivateMethodDeclared, sourceUnit, span);\r\n\t\t\t\tMemberDesc.MemberAttributes &= ~((hasBody) ? PhpMemberAttributes.Private : PhpMemberAttributes.Abstract);\r\n\t\t\t}\r\n\r\n\t\t\t// no non-public interface methods\r\n\t\t\tif (DeclaringType.IsInterface && (IsPrivate || IsProtected))\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.InterfaceMethodNotPublic, sourceUnit, span, DeclaringType.FullName, this.FullName);\r\n\t\t\t\tMemberDesc.MemberAttributes &= ~PhpMemberAttributes.VisibilityMask;\r\n\t\t\t\tMemberDesc.MemberAttributes |= PhpMemberAttributes.Public;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void ValidateOverride(ErrorSink/*!*/ errors, KnownRoutine/*!*/ overridden)\r\n        {\r\n            Debug.Assert(errors != null && overridden != null);\r\n            Debug.Assert(sourceUnit != null, \"Not applicable on reflected routines\");\r\n\r\n            // final method cannot be overridden:\r\n            if (overridden.IsFinal)\r\n            {\r\n                errors.Add(Errors.OverrideFinalMethod, SourceUnit, span, DeclaringType.FullName, this.FullName);\r\n                overridden.ReportError(errors, Errors.RelatedLocation);\r\n            }\r\n\r\n            // cannot override non-abstract method by abstract:\r\n            if (this.IsAbstract && !overridden.IsAbstract)\r\n            {\r\n                errors.Add(Errors.OverridingNonAbstractMethodByAbstract, SourceUnit, span,\r\n                    overridden.DeclaringType.FullName, overridden.FullName, DeclaringType.FullName);\r\n\r\n                overridden.ReportError(errors, Errors.RelatedLocation);\r\n            }\r\n\r\n            // restricting method visibility:\r\n            if ((overridden.IsPublic && !IsPublic ||\r\n                    overridden.IsProtected && !this.IsProtected && !this.IsPublic) &&\r\n                // visibility of .ctor in CLR base can be restricted:\r\n                    !(overridden.DeclaringType.IsClrType && overridden.IsConstructor))\r\n            {\r\n                errors.Add(Errors.OverridingMethodRestrictsVisibility, SourceUnit, span,\r\n                    DeclaringType.FullName, this.FullName, Enums.VisibilityToString(overridden.MemberDesc.MemberAttributes),\r\n                    overridden.DeclaringType.FullName);\r\n\r\n                overridden.ReportError(errors, Errors.RelatedLocation);\r\n            }\r\n\r\n            // method staticness non-overridable:\r\n            if (overridden.IsStatic && !this.IsStatic)\r\n            {\r\n                errors.Add(Errors.MakeStaticMethodNonStatic, SourceUnit, span,\r\n                    overridden.DeclaringType.FullName, overridden.FullName, DeclaringType.FullName);\r\n\r\n                overridden.ReportError(errors, Errors.RelatedLocation);\r\n            }\r\n\r\n            // method non-staticness non-overridable:\r\n            if (!overridden.IsStatic && this.IsStatic)\r\n            {\r\n                errors.Add(Errors.MakeNonStaticMethodStatic, SourceUnit, span,\r\n                    overridden.DeclaringType.FullName, overridden.FullName, DeclaringType.FullName);\r\n\r\n                overridden.ReportError(errors, Errors.RelatedLocation);\r\n            }\r\n\r\n            // strict standards: function reference\r\n            // Declaration of bar::a() should be compatible with that of foo::a()\r\n            // This check is not performed for __construct() function in PHP.\r\n            if (!Signature.CanOverride(overridden.GetSignature(0)) && !this.Name.IsConstructName)\r\n            {\r\n                errors.Add(Warnings.DeclarationShouldBeCompatible, SourceUnit, span,\r\n                    DeclaringType.FullName, this.FullName, overridden.DeclaringType.FullName, overridden.FullName);\r\n                /*PhpException.Throw(PhpError.Strict,\r\n                    CoreResources.GetString(\"declaration_should_be_compatible\",\r\n                        DeclaringType.FullName, this.FullName, overridden.DeclaringType.FullName, overridden.FullName));*/\r\n            }\r\n        }\r\n\r\n\t\tinternal override void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n\t\t{\r\n\t\t\tif (sourceUnit != null)\r\n\t\t\t\tsink.Add(error, SourceUnit, span);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override void DefineBuilders()\r\n\t\t{\r\n\t\t\tbase.DefineBuilders();\r\n\t\t}\r\n\r\n        internal override PhpTypeCode EmitCall(\r\n            CodeGenerator codeGenerator, string fallbackQualifiedName, CallSignature callSignature, IPlace instance,\r\n            bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n        {\r\n            Debug.Assert(fallbackQualifiedName == null, \"Methods do not have fallbacks\");\r\n\r\n            // private PHP methods called directly, ignoring overrides\r\n            if (IsPrivate || IsFinal || DeclaringType.IsFinal)\r\n                callVirt = false;\r\n            \r\n            if ((Properties & RoutineProperties.IsArgsAware) != 0 || ArgFullInfo == null)\r\n                runtimeVisibilityCheck = true;  // force dynamic call when the method routine cannot be called virtually\r\n\r\n            // when calling an instance virtual method, and some passed arguments would be ignored,\r\n            // force dynamic call in case there will be an overload that takes more arguments\r\n            else if (callVirt\r\n                && callSignature.Parameters.Length > 0   // some overload may accept less arguments, and its overload more, so we may loose some passed arguments; only if we are not passing any, we are safe\r\n                //&& callSignature.Parameters.Length != this.Signature.ParamCount     // TODO: only if 'Declaration should be compatible' warning would be considered as error, or overrides must not have less arguments than base overriden method\r\n                ) runtimeVisibilityCheck = true;\r\n            \r\n            // emit the routine call\r\n            return base.EmitCall(codeGenerator, fallbackQualifiedName, callSignature, instance, runtimeVisibilityCheck, overloadIndex, type, position, access, callVirt);\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PhpLambdaFunction\r\n\r\n    public sealed class PhpLambdaFunction : PhpRoutine\r\n    {\r\n        #region Properties\r\n\r\n        public override bool IsFunction { get { return true; } }\r\n        public override bool IsLambda { get { return true; } } // but different lambda\r\n        public override bool IsLambdaFunction { get { return true; } }\r\n        public override bool IsIdentityDefinite { get { return true; } }\r\n\r\n        public override Name Name { get { return Name.ClosureFunctionName; } }\r\n\r\n        public override Text.Span Span { get { return span; } }\r\n        private readonly Text.Span span;\r\n\r\n        public override CompilationSourceUnit SourceUnit { get { return sourceUnit; } }\r\n        private CompilationSourceUnit sourceUnit;\r\n\r\n        internal override bool IsExported { get { return false; } }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Used by the compiler.\r\n        /// </summary>\r\n        internal PhpLambdaFunction(Signature astSignature, CompilationSourceUnit/*!*/ sourceUnit, Text.Span position)\r\n            : base(\r\n            new PhpRoutineDesc(\r\n                DTypeDesc.Create(typeof(PHP.Library.SPL.Closure)),\r\n                PhpMemberAttributes.Private | PhpMemberAttributes.Static | PhpMemberAttributes.Final),\r\n            astSignature,\r\n            new TypeSignature(FormalTypeParam.EmptyList))\r\n        {\r\n            Debug.Assert(sourceUnit != null && position.IsValid);\r\n\r\n            this.span = position;\r\n            this.sourceUnit = sourceUnit;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Utils\r\n\r\n        public override string GetFullName()\r\n        {\r\n            return Name.Value;\r\n        }\r\n\r\n        public override string GetFullClrName()\r\n        {\r\n            return Name.Value;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Analysis\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n            out RoutineSignature overloadSignature)\r\n        {\r\n            overloadSignature = signature;\r\n            return 0;\r\n        }\r\n\r\n        internal override void AddAbstractOverride(DMemberRef/*!*/ abstractMethod)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Validation\r\n\r\n        internal override void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n        {\r\n            if (sourceUnit != null)\r\n                sink.Add(error, SourceUnit, span);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Emission\r\n\r\n        private TypeBuilder/*!*/typeBuilder;\r\n        protected override MethodInfo DefineRealMethod(string realMethodName, MethodAttributes attrs, Type returnType, Type[] parametersType)\r\n        {\r\n            return typeBuilder.DefineMethod(realMethodName, attrs, returnType, parametersType);\r\n        }\r\n        internal override void DefineBuilders()\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n        public void DefineBuilders(TypeBuilder/*!*/typeBuilder)\r\n        {\r\n            this.typeBuilder = typeBuilder;\r\n            base.DefineBuilders();\r\n        }\r\n\r\n        internal override PhpTypeCode EmitCall(\r\n            CodeGenerator codeGenerator, string fallbackQualifiedName, CallSignature callSignature, IPlace instance,\r\n            bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n        {\r\n            // calling closured function directly is not handled yet (not needed without type inference),\r\n            // anyway in future, this will be probably handled thru Closure::__invoke( instance, stack ).\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n\t#region PhpLibraryFunction\r\n\r\n\tpublic sealed class PhpLibraryFunction : KnownRoutine\r\n\t{\r\n\t\t#region Overload\r\n\r\n\t\t/// <summary>\r\n\t\t/// Additional overload flags.\r\n\t\t/// </summary>\r\n        [Flags]\r\n        public enum OverloadFlags : byte\r\n        {\r\n            /// <summary>\r\n            /// None.\r\n            /// </summary>\r\n            None = 0,\r\n\r\n            /// <summary>\r\n            /// Needs local variables of caller\r\n            /// </summary>\r\n            NeedsVariables = 1,\r\n\r\n            /// <summary>\r\n            /// Needs $this reference of caller\r\n            /// </summary>\r\n            NeedsThisReference = 2,\r\n\r\n            NeedsNamingContext = 4,\r\n\r\n            /// <summary>\r\n            /// Needs DTypeDesc class context of the caller.\r\n            /// </summary>\r\n            NeedsClassContext = 8,\r\n\r\n            /// <summary>Overload has \"params\" array as its last argument.</summary>\r\n            IsVararg = 16,\r\n\r\n            /// <summary>\r\n            /// The overload has the ScriptContext as the first parameter. It will be passed automatically.\r\n            /// </summary>\r\n            NeedsScriptContext = 32,\r\n\r\n            /// <summary>\r\n            /// Function is not supported.\r\n            /// </summary>\r\n            NotSupported = 64,\r\n            \r\n            /// <summary>\r\n            /// Needs DTypeDesc class context of the late static binding.\r\n            /// </summary>\r\n            NeedsLateStaticBind = 128,\r\n        }\r\n\r\n\t\tpublic sealed class Overload : RoutineSignature\r\n\t\t{\r\n\t\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Parameters.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic ParameterInfo[]/*!!*/ RealParameters { get { return parameters; } }\r\n\t\t\tprivate readonly ParameterInfo[]/*!!*/ parameters;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The method implementing the overload.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic MethodInfo/*!*/ Method { get { return method; } }\r\n\t\t\tprivate readonly MethodInfo/*!*/ method;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Mandatory PHP parameters count. \r\n\t\t\t/// Auxiliary parameters such are the defined variable table and \"params\" array are not included.\r\n\t\t\t/// Example:\r\n\t\t\t///   f(VarTable, p1, p2, params[])  -> 2\r\n\t\t\t/// </summary>\r\n\t\t\tpublic override int MandatoryParamCount { get { return paramCount; } }\r\n\t\t\tpublic override int ParamCount { get { return paramCount; } }\r\n\t\t\tpublic override int GenericParamCount { get { return 0; } }\r\n\t\t\tpublic override int MandatoryGenericParamCount { get { return 0; } }\r\n\r\n\t\t\tprivate readonly short paramCount;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Additional flags.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic OverloadFlags Flags { get { return flags; } }\r\n\t\t\tprivate readonly OverloadFlags flags;\r\n\r\n\t\t\tprivate Overload(MethodInfo/*!*/ method, ParameterInfo[]/*!!*/ parameters, short paramCount, OverloadFlags flags)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(method != null && parameters != null);\r\n\r\n\t\t\t\tthis.method = method;\r\n\t\t\t\tthis.paramCount = paramCount;\r\n\t\t\t\tthis.flags = flags;\r\n\t\t\t\tthis.parameters = parameters;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates an overload of the function. May return <B>null</B> on error.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal static Overload Create(MethodInfo/*!*/ realOverload, FunctionImplOptions options)\r\n\t\t\t{\r\n\t\t\t\tParameterInfo[] parameters = realOverload.GetParameters();\r\n\r\n\t\t\t\tOverloadFlags flags = OverloadFlags.None;\r\n\t\t\t\tshort param_count = (short)parameters.Length;\r\n\r\n                if (parameters.Length >= 1 && parameters[0].ParameterType == Types.ScriptContext[0])\r\n                {\r\n                    flags |= OverloadFlags.NeedsScriptContext;\r\n                    param_count--;\r\n                }\r\n\r\n\t\t\t\tif (parameters.Length > 0 && parameters[parameters.Length - 1].IsDefined(typeof(ParamArrayAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\tflags |= OverloadFlags.IsVararg;\r\n\t\t\t\t\tparam_count--;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((options & FunctionImplOptions.NeedsThisReference) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tparam_count--;\r\n\t\t\t\t\tflags |= OverloadFlags.NeedsThisReference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((options & FunctionImplOptions.NeedsVariables) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tparam_count--;\r\n\t\t\t\t\tflags |= OverloadFlags.NeedsVariables;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((options & FunctionImplOptions.NeedsNamingContext) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tparam_count--;\r\n\t\t\t\t\tflags |= OverloadFlags.NeedsNamingContext;\r\n\t\t\t\t}\r\n\r\n                if ((options & FunctionImplOptions.NeedsClassContext) != 0)\r\n                {\r\n                    param_count--;\r\n                    flags |= OverloadFlags.NeedsClassContext;\r\n                }\r\n\r\n                if ((options & FunctionImplOptions.NeedsLateStaticBind) != 0)\r\n                {\r\n                    param_count--;\r\n                    flags |= OverloadFlags.NeedsLateStaticBind;\r\n                }\r\n\r\n                if ((options & FunctionImplOptions.NotSupported) != 0)\r\n                {\r\n                    flags |= OverloadFlags.NotSupported;\r\n                }\r\n\r\n\t\t\t\treturn new Overload(realOverload, parameters, param_count, flags);\r\n\t\t\t}\r\n\r\n\t\t\tpublic override bool AliasReturn\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn method.ReturnParameter.ParameterType == Types.PhpReference[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic override DType GetTypeHint(int index)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tpublic int GetHiddenParameterCount()\r\n\t\t\t{\r\n\t\t\t\treturn\r\n                    ((flags & OverloadFlags.NeedsScriptContext) != 0 ? 1 : 0) +\r\n                    ((flags & OverloadFlags.NeedsThisReference) != 0 ? 1 : 0) + \r\n                    ((flags & OverloadFlags.NeedsVariables) != 0 ? 1 : 0) +\r\n\t\t\t\t\t((flags & OverloadFlags.NeedsNamingContext) != 0 ? 1 : 0) +\r\n                    ((flags & OverloadFlags.NeedsLateStaticBind) != 0 ? 1 : 0) +\r\n                    ((flags & OverloadFlags.NeedsClassContext) != 0 ? 1 : 0);\r\n\t\t\t}\r\n            \r\n            /// <summary>\r\n\t\t\t/// Returns <B>true</B> if the <c>index</c>-th formal parameter of the PHP signature is by-ref.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic override bool IsAlias(int index)\r\n\t\t\t{\r\n\t\t\t\tif (index < paramCount)\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips the auxiliary parameters (storing defined variables or eval info):\r\n\t\t\t\t\tint real_index = index + GetHiddenParameterCount();\r\n\r\n\t\t\t\t\tType type = RealParameters[real_index].ParameterType;\r\n\t\t\t\t\treturn type.IsByRef || type == Types.PhpReference[0];\r\n\t\t\t\t}\r\n\t\t\t\telse if ((flags & OverloadFlags.IsVararg) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(RealParameters.Length > 0);\r\n\t\t\t\t\treturn RealParameters[RealParameters.Length - 1].ParameterType == Types.PhpReferenceArray[0];\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsLambda { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Library function does deep-copy according to the <see cref=\"PhpDeepCopyAttribute\"/>.\r\n\t\t/// The call itself emits the deep-copy, so the outer code needn't to care.\r\n\t\t/// </summary>\r\n\t\tpublic override bool ReturnValueDeepCopyEmitted { get { return true; } }\r\n\r\n\t\tpublic override Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Options associated with the function (all overloads have to have the same options associated).\r\n\t\t/// </summary>\r\n\t\tpublic FunctionImplOptions Options { get { return options; } }\r\n\t\tprivate readonly FunctionImplOptions options;\r\n\r\n\t\tpublic List<Overload>/*!!*/ Overloads { get { return overloads; } }\r\n\t\tprivate readonly List<Overload>/*!!*/ overloads;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic PhpLibraryFunction(PhpLibraryFunctionDesc/*!*/ functionDesc, Name name, FunctionImplOptions options,\r\n\t\t\tint estimatedOverloadCount)\r\n\t\t\t: base(functionDesc)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.options = options;\r\n\t\t\tthis.overloads = new List<Overload>(estimatedOverloadCount);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\t#region Analysis Helpers\r\n\r\n\t\tpublic override RoutineProperties GetCallerRequirements()\r\n\t\t{\r\n\t\t\tRoutineProperties result = RoutineProperties.None;\r\n\r\n\t\t\tif ((options & FunctionImplOptions.NeedsFunctionArguments) != 0)\r\n\t\t\t\tresult |= RoutineProperties.UseVarArgs;\r\n\r\n\t\t\tif ((options & FunctionImplOptions.NeedsVariables) != 0)\r\n\t\t\t\tresult |= RoutineProperties.ContainsLocalsWorker;\r\n\r\n            if ((options & FunctionImplOptions.NeedsLateStaticBind) != 0)\r\n                result |= RoutineProperties.LateStaticBinding;\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Overloads\r\n\r\n\t\tpublic override RoutineSignature/*!*/ GetSignature(int overloadIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(overloadIndex >= 0 && overloadIndex < overloads.Count);\r\n\t\t\treturn overloads[overloadIndex];\r\n\t\t}\r\n\r\n\t\tinternal int AddOverload(MethodInfo/*!*/ realOverload, out Overload overload)\r\n\t\t{\r\n\t\t\tint index = AddOverload(overloads, realOverload, options);\r\n\t\t\toverload = (index >= 0) ? overloads[index] : null;\r\n\t\t\treturn index;\r\n\t\t}\r\n\r\n\t\tinternal static int AddOverload(List<Overload>/*!!*/ overloads, MethodInfo/*!*/ realOverload, FunctionImplOptions options)\r\n\t\t{\r\n\t\t\tOverload overload = Overload.Create(realOverload, options);\r\n\t\t\tif (overload == null) return DRoutine.InvalidOverloadIndex;\r\n\r\n\t\t\tint i = 0;\r\n\t\t\twhile (i < overloads.Count && overloads[i].ParamCount < overload.ParamCount) i++;\r\n\r\n\t\t\toverloads.Insert(i, overload);\r\n\r\n\t\t\treturn i;\r\n\t\t}\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature overloadSignature)\r\n\t\t{\r\n            if (callSignature.GenericParams.Any())\r\n\t\t\t{\r\n\t\t\t\tanalyzer.ErrorSink.Add(Errors.GenericCallToLibraryFunction, analyzer.SourceUnit, position);\r\n\t\t\t\tcallSignature = new CallSignature(callSignature.Parameters);\r\n\t\t\t}\r\n\r\n\t\t\tbool exact_match;\r\n            int result = ResolveOverload(callSignature.Parameters.Length, out exact_match);\r\n\r\n\t\t\tif (!exact_match)\r\n\t\t\t{\r\n\t\t\t\t// library function with wrong number of actual arguments:\r\n\t\t\t\tanalyzer.ErrorSink.Add(Errors.InvalidArgumentCountForFunction, analyzer.SourceUnit, position, FullName);\r\n\t\t\t}\r\n\r\n\t\t\toverloadSignature = overloads[result];\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finds an overload whose parameter count matches the specified one.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"argumentCount\">The number of parameters.</param>\r\n\t\t/// <param name=\"exactMatch\">Whether the exactly required overload has been found.</param>\r\n\t\t/// <returns>The resulting overload index (always valid).</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If the last overload (when sorted by parameter counts) has <see cref=\"OverloadFlags\"/> \r\n\t\t/// flag set and <paramref name=\"argumentCount\"/> is greater than this overload's parameter count\r\n\t\t/// then the last overload is returned. If there is no exactly matching overload returns first \r\n        /// which has more arguments than specified by <paramref name=\"argumentCount\"/>.\r\n\t\t/// </remarks>\r\n\t\tprivate int ResolveOverload(int argumentCount, out bool exactMatch)\r\n\t\t{\r\n\t\t\tDebug.Assert(overloads.Count > 0);\r\n\r\n\t\t\t// searches for the exactly matching parameter count:\r\n\t\t\tint i = 0;\r\n\t\t\twhile (i < overloads.Count && overloads[i].ParamCount < argumentCount) i++;\r\n\r\n\t\t\t// if requested parameter count is greater than any overload's one:\r\n\t\t\tif (i == overloads.Count)\r\n\t\t\t{\r\n\t\t\t\texactMatch = (overloads[i - 1].Flags & OverloadFlags.IsVararg) != 0;\r\n\t\t\t\treturn i - 1;\r\n\t\t\t}\r\n\r\n\t\t\t// if exactly matching overload has been found:\r\n\t\t\texactMatch = overloads[i].ParamCount == argumentCount;\r\n\r\n\t\t\t// the \"nearest greater\" overload (having >= paramCount parameters):\r\n\t\t\treturn i;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n\t\t\tOverload overload = overloads[overloadIndex];\r\n\t\t\tStatistics.AST.AddLibraryFunctionCall(FullName, overload.ParamCount);\r\n\r\n            if ((overload.Flags & OverloadFlags.NotSupported) != 0)\r\n            {\r\n                codeGenerator.IL.Emit(OpCodes.Ldstr, FullName);\r\n                codeGenerator.IL.Emit(OpCodes.Call, Methods.PhpException.FunctionNotSupported_String);\r\n                if (codeGenerator.Context.Config.Compiler.Debug)\r\n                    codeGenerator.IL.Emit(OpCodes.Nop);\r\n\r\n                return OverloadsBuilder.EmitLoadDefault(codeGenerator.IL, overload.Method);\r\n            }\r\n\r\n            //IPlace return_value;\r\n            IPlace script_context = null;\r\n\t\t\tIPlace opt_arg_count = null;\r\n            IPlace self_ref = null;\r\n            IPlace rt_variables = null;\r\n\t\t\tIPlace naming_context = null;\r\n            IPlace class_context = null;\r\n\r\n            // \r\n\r\n\t\t\t// captures eval info:\r\n\t\t\tif ((options & FunctionImplOptions.CaptureEvalInfo) != 0)\r\n\t\t\t{\r\n                codeGenerator.EmitEvalInfoCapture(position.Start, false);\r\n\t\t\t}\r\n\r\n            // current ScriptContext:\r\n            if ((overload.Flags & OverloadFlags.NeedsScriptContext) != 0)\r\n            {\r\n                script_context = codeGenerator.ScriptContextPlace;\r\n            }\r\n\r\n\t\t\t// number of optional arguments passed to a function (empty or a literal place):\r\n\t\t\tif ((overload.Flags & OverloadFlags.IsVararg) != 0)\r\n\t\t\t{\r\n\t\t\t\topt_arg_count = new IndexedPlace(PlaceHolder.None, callSignature.Parameters.Length - overload.ParamCount);\r\n\t\t\t}\r\n\r\n\t\t\t// this reference?\r\n\t\t\tif ((options & FunctionImplOptions.NeedsThisReference) != 0)\r\n\t\t\t{\r\n\t\t\t\tself_ref = codeGenerator.SelfPlace;\r\n\t\t\t}\r\n\r\n\t\t\t// run-time variables table:\r\n\t\t\tif ((options & FunctionImplOptions.NeedsVariables) != 0)\r\n\t\t\t{\r\n\t\t\t\trt_variables = codeGenerator.RTVariablesTablePlace;\r\n\t\t\t}\r\n\r\n\t\t\t// naming context\r\n\t\t\tif ((options & FunctionImplOptions.NeedsNamingContext) != 0)\r\n\t\t\t{\r\n                naming_context =\r\n                    (codeGenerator.SourceUnit.NamingContextFieldBuilder != null) ?\r\n                        (IPlace)new Place(null, codeGenerator.SourceUnit.NamingContextFieldBuilder) : (IPlace)LiteralPlace.Null;\r\n\t\t\t}\r\n\r\n            // call context\r\n            if ((options & FunctionImplOptions.NeedsClassContext) != 0)\r\n            {\r\n                class_context = codeGenerator.TypeContextPlace;\r\n            }\r\n\r\n            // late static binding context\r\n            if ((options & FunctionImplOptions.NeedsLateStaticBind) != 0)\r\n            {\r\n                Debug.Assert(class_context == null, \"NeedsClassContext and NeedsLateStaticBind cannot be used concurently!\");\r\n                class_context = codeGenerator.LateStaticBindTypePlace;\r\n            }\r\n\r\n\t\t\tOverloadsBuilder.ParameterLoader param_loader = new OverloadsBuilder.ParameterLoader(callSignature.EmitLibraryLoadArgument);\r\n\t\t\tOverloadsBuilder.ParametersLoader opt_param_loader = new OverloadsBuilder.ParametersLoader(callSignature.EmitLibraryLoadOptArguments);\r\n\r\n\t\t\tOverloadsBuilder builder = new OverloadsBuilder(\r\n\t\t\t\tcodeGenerator.Context.Config.Compiler.Debug,\r\n\t\t\t\tnull,                           // PHP stack is not used\r\n\t\t\t\tparam_loader,                   // value parameter loader\r\n\t\t\t\tparam_loader,                   // reference parameter loader\r\n\t\t\t\topt_param_loader);              // optional parameter array loader\r\n\r\n\t\t\t// setups builder:\r\n\t\t\tbuilder.Aux = codeGenerator;\r\n\t\t\tbuilder.IL = codeGenerator.IL;\r\n\t\t\tbuilder.FunctionName = name;\r\n\r\n\t\t\t// emits overload call:\r\n            Type/*!*/return_type = builder.EmitOverloadCall(overload.Method, overload.RealParameters, overload.ParamCount,\r\n\t\t\t\tscript_context, rt_variables, naming_context, class_context, opt_arg_count, self_ref, access == AccessType.None);\r\n\r\n            //if (return_value != null)\r\n            //{\r\n            //    // loads value on the stack:\r\n            //    return_value.EmitLoad(codeGenerator.IL);\r\n\r\n            //    return PhpTypeCodeEnum.FromType(return_value.PlaceType);\r\n            //}\r\n            if (return_type != Types.Void)\r\n            {\r\n                return PhpTypeCodeEnum.FromType(return_type);\r\n            }\r\n            else\r\n            {\r\n                if (codeGenerator.Context.Config.Compiler.Debug)\r\n                {\r\n                    codeGenerator.IL.Emit(OpCodes.Nop);\r\n                }\r\n                return PhpTypeCode.Void;\r\n            }\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrMethod\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrMethod : KnownRoutine\r\n\t{\r\n\t\t#region Nested Type: Overload\r\n\r\n\t\t/// <summary>\r\n\t\t/// Additional overload flags.\r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tpublic enum OverloadFlags : byte\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// None.\r\n\t\t\t/// </summary>\r\n\t\t\tNone = 0,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Overload has \"params\" array as its last argument.\r\n\t\t\t/// </summary>\r\n\t\t\tIsVararg = 1\r\n\t\t}\r\n\r\n\t\tpublic class Overload : RoutineSignature\r\n\t\t{\r\n\t\t\tpublic const int Invalid = -1;\r\n\r\n\t\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The method implementing the overload.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic MethodBase/*!*/ Method { get { return method; } }\r\n\t\t\tprivate readonly MethodBase/*!*/ method;\r\n\r\n\t\t\tpublic ParameterInfo[]/*!!*/ Parameters { get { return parameters; } }\r\n\t\t\tprivate readonly ParameterInfo[]/*!!*/ parameters;\r\n\r\n\t\t\tpublic Type[]/*!!*/ GenericParameters { get { return genericParameters; } }\r\n\t\t\tprivate readonly Type[]/*!!*/ genericParameters;\r\n\r\n\t\t\tpublic OverloadFlags Flags { get { return flags; } }\r\n\t\t\tprivate OverloadFlags flags;\r\n\r\n\t\t\tpublic override bool AliasReturn\r\n\t\t\t{\r\n\t\t\t\tget { return false; }\r\n\t\t\t}\r\n\r\n\t\t\tpublic override bool IsAlias(int index)\r\n\t\t\t{\r\n\t\t\t\treturn (index < parameters.Length) ? parameters[index].ParameterType.IsByRef : false;\r\n\t\t\t}\r\n\r\n\t\t\tpublic override DType/*!*/ GetTypeHint(int index)\r\n\t\t\t{\r\n\t\t\t\tDebug.Fail(\"Type hints are currently used only for PHP routine body emission\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Mandatory parameter count. \r\n\t\t\t/// Same as total parameter count as the default parameters are currently not supported.\r\n\t\t\t/// Differs from parameters.Length if the last argument is param-array in which case, the last parameter is not counted.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic override int MandatoryParamCount { get { return paramCount; } }\r\n\t\t\tpublic override int ParamCount { get { return parameters.Length; } }\r\n\t\t\tprivate int paramCount;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Mandatory type parameter count.\r\n\t\t\t/// Same as total parameter count as CLR doesn't use concept of default type parameters.\r\n\t\t\t/// Same as the number of genericParameters.Length.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic override int MandatoryGenericParamCount { get { return genericParameters.Length; } }\r\n\t\t\tpublic override int GenericParamCount { get { return genericParameters.Length; } }\r\n\r\n\t\t\tpublic Overload(MethodBase/*!*/ method, Type[]/*!!*/ genericParameters, ParameterInfo[]/*!!*/ parameters)\r\n\t\t\t{\r\n\t\t\t\tthis.method = method;\r\n\t\t\t\tthis.parameters = parameters;\r\n\t\t\t\tthis.genericParameters = genericParameters;\r\n\r\n\t\t\t\tflags = OverloadFlags.None;\r\n\r\n\t\t\t\tif (parameters.Length > 0 && parameters[parameters.Length - 1].IsDefined(typeof(ParamArrayAttribute), false))\r\n\t\t\t\t\tflags |= OverloadFlags.IsVararg;\r\n\r\n\t\t\t\tthis.paramCount = parameters.Length - ((flags & OverloadFlags.IsVararg) != 0 ? 1 : 0);\r\n\t\t\t}\r\n\r\n\t\t\tinternal static Overload Create(MethodBase/*!*/ realOverload)\r\n\t\t\t{\r\n\t\t\t\tif (realOverload.IsPrivate || realOverload.CallingConvention == CallingConventions.VarArgs)\r\n\t\t\t\t\treturn null;\r\n\r\n\t\t\t\tParameterInfo[] parameters = realOverload.GetParameters();\r\n\r\n\t\t\t\tforeach (ParameterInfo parameter in parameters)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (parameter.ParameterType.IsPointer)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tType[] generic_params;\r\n\t\t\t\tif (realOverload.IsGenericMethodDefinition)\r\n\t\t\t\t\tgeneric_params = realOverload.GetGenericArguments();\r\n\t\t\t\telse\r\n\t\t\t\t\tgeneric_params = Type.EmptyTypes;\r\n\r\n\t\t\t\treturn new Overload(realOverload, generic_params, parameters);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Stringifies this signature for easier equality checks.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic override string/*!*/ ToString()\r\n\t\t\t{\r\n\t\t\t\tMethodInfo mi = method as MethodInfo;\r\n\t\t\t\tType return_type = (mi != null ? mi.ReturnType : Types.Void);\r\n\r\n\t\t\t\treturn ClrSignatureToString(genericParameters.Length, parameters, return_type);\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Stringifies a CLR method signature for easier equality checks.\r\n\t\t\t/// </summary>\r\n\t\t\tinternal static string/*!*/ ClrSignatureToString(int genParamCount, ParameterInfo[]/*!*/ parameters,\r\n\t\t\t\tType/*!*/ returnType)\r\n\t\t\t{\r\n\t\t\t\tStringBuilder sb = new StringBuilder(parameters.Length * 32);\r\n\r\n\t\t\t\tfor (int i = 0; i < parameters.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tType type = parameters[i].ParameterType;\r\n\t\t\t\t\tif (type.IsGenericParameter && type.DeclaringMethod != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (type.IsByRef) sb.Append(-(type.GenericParameterPosition + 1));\r\n\t\t\t\t\t\telse sb.Append(type.GenericParameterPosition);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse sb.Append(type.ToString());\r\n\t\t\t\t\tsb.Append(',');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (returnType.IsGenericParameter && returnType.DeclaringMethod != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(returnType.GenericParameterPosition);\r\n\t\t\t\t}\r\n\t\t\t\telse sb.Append(returnType.ToString());\r\n\r\n\t\t\t\tsb.Append('`');\r\n\t\t\t\tsb.Append(genParamCount);\r\n\r\n\t\t\t\treturn sb.ToString();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Stringifies a CLR method signature for easier equality checks.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <remarks>\r\n\t\t\t/// Elements of <paramref name=\"parameters\"/> and <paramref name=\"returnType\"/> are either <see cref=\"Type\"/>s\r\n\t\t\t/// or integeres denoting generic method type parameter indexes. Negative index means byref parameter.\r\n\t\t\t/// </remarks>\r\n\t\t\tinternal static string/*!*/ ClrSignatureToString(int genParamCount, object[]/*!*/ parameters, object/*!*/ returnType)\r\n\t\t\t{\r\n\t\t\t\tStringBuilder sb = new StringBuilder(parameters.Length * 32);\r\n\r\n\t\t\t\tfor (int i = 0; i < parameters.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(parameters[i].ToString());\r\n\t\t\t\t\tsb.Append(',');\r\n\t\t\t\t}\r\n\t\t\t\tsb.Append(returnType.ToString());\r\n\r\n\t\t\t\tsb.Append('`');\r\n\t\t\t\tsb.Append(genParamCount);\r\n\r\n\t\t\t\treturn sb.ToString();\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns parameters and return type remapped according to a constructed type.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic ParameterInfo[]/*!*/ MakeConstructed(ConstructedType constructedType, out Type/*!*/ returnType)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo method_info = method as MethodInfo;\r\n\t\t\t\treturnType = (method_info != null ? method_info.ReturnType : Types.Void);\r\n\r\n\t\t\t\tif (constructedType != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturnType = constructedType.MapRealType(returnType);\r\n\r\n\t\t\t\t\tParameterInfo[] new_params = new ParameterInfo[parameters.Length];\r\n\t\t\t\t\tfor (int i = 0; i < new_params.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tParameterInfo param_info = parameters[i];\r\n\r\n\t\t\t\t\t\tnew_params[i] = new StubParameterInfo(\r\n\t\t\t\t\t\t\tparam_info.Position,\r\n\t\t\t\t\t\t\tconstructedType.MapRealType(param_info.ParameterType),\r\n\t\t\t\t\t\t\tparam_info.Attributes,\r\n\t\t\t\t\t\t\tparam_info.Name);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn new_params;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn parameters;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic ClrMethodDesc/*!*/ ClrMethodDesc { get { return (ClrMethodDesc)memberDesc; } }\r\n\r\n\t\tpublic override bool IsLambda { get { return false; } }\r\n\t\tpublic override bool ReturnValueDeepCopyEmitted { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\tpublic override Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Array of overloads represented by the <see cref=\"ClrMethod\"/>.\r\n\t\t/// Sorted by the number of mandatory parameters.\r\n\t\t/// Contrary to <see cref=\"PhpLibraryFunction\"/>, there may be more overloads with the same parameter count.\r\n\t\t/// </summary>\r\n\t\tpublic List<Overload>/*!!*/ Overloads { get { return overloads; } }\r\n\t\tprivate readonly List<Overload>/*!!*/ overloads;\r\n\r\n\t\tpublic BitArray ArgCounts { get { return argCounts; } internal /* friend ClrOverloadBuilder */ set { argCounts = value; } }\r\n\t\tprivate BitArray argCounts;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrMethod(Name name, DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n\t\t\tint estimatedOverloadCount, bool isGeneric)\r\n\t\t\t: base(isGeneric ?\r\n\t\t\t\tnew ClrGenericMethodDesc(declaringType, memberAttributes) :\r\n\t\t\t\tnew ClrMethodDesc(declaringType, memberAttributes))\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.overloads = new List<Overload>(estimatedOverloadCount);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect (<see cref=\"DTypeDesc\"/>).\r\n\t\t/// </summary>\r\n\t\tinternal static ClrMethod/*!*/ CreateConstructor(ClrTypeDesc/*!*/ declaringType)\r\n\t\t{\r\n\t\t\tClrMethod result;\r\n\r\n\t\t\tif (declaringType is ClrDelegateDesc)\r\n\t\t\t{\r\n\t\t\t\t// the real constructor should not be accessible from PHP code\r\n\t\t\t\tresult = new ClrMethod(Name.ClrCtorName, declaringType, PhpMemberAttributes.Constructor, 1, false);\r\n\t\t\t\tresult.ClrMethodDesc.ArglessStub = new RoutineDelegate(declaringType._NoConstructorErrorStub);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConstructorInfo[] realOverloads = declaringType.RealType.GetConstructors(\r\n\t\t\t\tBindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n\t\t\t\t//// TODO (less restrictive?):\r\n\t\t\t\tPhpMemberAttributes attrs = PhpMemberAttributes.Constructor;\r\n\r\n\t\t\t\tint visible_count = 0;\r\n\t\t\t\tfor (int i = 0; i < realOverloads.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ClrTypeDesc.IsMethodVisible(realOverloads[i]))\r\n\t\t\t\t\t\tvisible_count++;\r\n\t\t\t\t}\r\n\r\n                if (declaringType.RealType.IsValueType) // add an empty .ctor\r\n                    visible_count++;\r\n\r\n\r\n\t\t\t\tif (visible_count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = new ClrMethod(Name.ClrCtorName, declaringType, attrs, visible_count, false);\r\n\r\n\t\t\t\t\tforeach (MethodBase real_overload in realOverloads)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (ClrTypeDesc.IsMethodVisible(real_overload))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tOverload overload;\r\n\t\t\t\t\t\t\tresult.AddOverload(real_overload, out overload);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n                    if (declaringType.RealType.IsValueType) // add an empty .ctor\r\n                    {\r\n                        Overload overload;\r\n                        result.AddOverload(BuildDefaultValueCtor(declaringType.RealType), out overload);\r\n                    }\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tresult = new ClrMethod(Name.ClrCtorName, declaringType, PhpMemberAttributes.Constructor, 1, false);\r\n\t\t\t\t\tresult.ClrMethodDesc.ArglessStub = new RoutineDelegate(declaringType._NoConstructorErrorStub);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: Overloads\r\n\r\n\t\tpublic override RoutineSignature/*!*/ GetSignature(int overloadIndex)\r\n\t\t{\r\n\t\t\treturn overloads[overloadIndex];\r\n\t\t}\r\n\r\n\t\tinternal bool HasParameterlessOverload\r\n\t\t{\r\n\t\t\tget { return overloads.Count > 0 && overloads[0].MandatoryParamCount == 0; }\r\n\t\t}\r\n\r\n\t\tinternal bool HasOverload\r\n\t\t{\r\n\t\t\tget { return overloads.Count > 0; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an overload by reflecting the specified real overload.\r\n\t\t/// Returns <see cref=\"DRoutine.InvalidOverloadIndex\"/> and <B>null</B> in <paramref name=\"overload\"/>\r\n\t\t/// if the reflection fails.\r\n\t\t/// </summary>\r\n\t\tinternal int AddOverload(MethodBase/*!*/ realOverload, out Overload overload)\r\n\t\t{\r\n\t\t\toverload = Overload.Create(realOverload);\r\n\t\t\tif (overload == null) return DRoutine.InvalidOverloadIndex;\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tint params_sum = overload.MandatoryParamCount + overload.ParamCount;\r\n\t\t\twhile (i < overloads.Count && params_sum >= overloads[i].MandatoryParamCount + overloads[i].ParamCount)\r\n\t\t\t{\r\n\t\t\t\t// varargs (>= n params) are between (n params) and (n + 1 params)\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t\toverloads.Insert(i, overload);\r\n\r\n\t\t\t// ClrMethod is static if at least one overload is static\r\n\t\t\tif (overload.Method.IsStatic) memberDesc.MemberAttributes |= PhpMemberAttributes.Static;\r\n\r\n\t\t\t// ClrMethod is public if at least one overload is public\r\n\t\t\tif (overload.Method.IsPublic)\r\n\t\t\t{\r\n\t\t\t\tmemberDesc.MemberAttributes &= ~PhpMemberAttributes.VisibilityMask;\r\n\t\t\t\tmemberDesc.MemberAttributes |= PhpMemberAttributes.Public;\r\n\t\t\t}\r\n\r\n\t\t\t// ClrMethod has a generic method desc if at least one overload is generic\r\n\t\t\tif (overload.GenericParamCount > 0 && !(memberDesc is ClrGenericMethodDesc))\r\n\t\t\t{\r\n\t\t\t\tmemberDesc = new ClrGenericMethodDesc(memberDesc.DeclaringType, memberDesc.MemberAttributes);\r\n\t\t\t}\r\n\r\n\t\t\treturn i;\r\n\t\t}\r\n\r\n        internal override int ResolveOverload(Analyzer/*!*/ analyzer, CallSignature callSignature, Text.Span position,\r\n\t\t\tout RoutineSignature/*!*/ overloadSignature)\r\n\t\t{\r\n\t\t\tif (overloads.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tif (DeclaringType.TypeDesc is ClrDelegateDesc)\r\n\t\t\t\t{\r\n\t\t\t\t\toverloadSignature = UnknownSignature.Delegate;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// structures without ctor:\r\n\t\t\t\tif (DeclaringType.TypeDesc.RealType.IsValueType)\r\n\t\t\t\t{\r\n\t\t\t\t\toverloadSignature = UnknownSignature.Default;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tDebug.Assert(this.IsConstructor, \"Only constructors can have no overload.\");\r\n\t\t\t\toverloadSignature = UnknownSignature.Default;\r\n\t\t\t\treturn DRoutine.InvalidOverloadIndex;\r\n\t\t\t}\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tbool found = false;\r\n\r\n\t\t\tOverload overload;\r\n\t\t\twhile (i < overloads.Count && (overload = overloads[i]).MandatoryParamCount <= callSignature.Parameters.Length)\r\n\t\t\t{\r\n                if (overload.MandatoryParamCount == callSignature.Parameters.Length ||\r\n\t\t\t\t\t(overload.Flags & OverloadFlags.IsVararg) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: by type resolving\r\n\t\t\t// evaluate arguments?\r\n\r\n\t\t\tif (!found)\r\n\t\t\t{\r\n\t\t\t\tanalyzer.ErrorSink.Add(Warnings.InvalidArgumentCountForMethod, analyzer.SourceUnit, position,\r\n\t\t\t\t\tthis.DeclaringType.FullName, this.FullName);\r\n\r\n\t\t\t\tif (i > 0) i--;\r\n\t\t\t\toverloadSignature = overloads[i];\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\r\n\t\t\toverloadSignature = overloads[i];\r\n\t\t\treturn i;\r\n\t\t}\r\n\r\n\t\tinternal BitArray/*!*/ ResolveArgCounts()\r\n\t\t{\r\n\t\t\tif (argCounts != null)\r\n\t\t\t\treturn argCounts;\r\n\r\n\t\t\treturn null;\r\n\r\n\t\t\t// TODO:\r\n\t\t\t//int case_count = 1;\r\n\t\t\t//Overload previous = null;\r\n\t\t\t//foreach (Overload current in overloads)\r\n\t\t\t//{\r\n\t\t\t//  if (previous != null)\r\n\t\t\t//  {\r\n\t\t\t//    if (previous.MandatoryParamCount != current.MandatoryParamCount)\r\n\t\t\t//      case_count++;\r\n\t\t\t//  }\r\n\t\t\t//  else\r\n\t\t\t//  {\r\n\t\t\t//    this.minArgCount = current.MandatoryParamCount;\r\n\t\t\t//  }\r\n\r\n\t\t\t//  previous = current;\r\n\t\t\t//  overload_count++;\r\n\t\t\t//}\r\n\r\n\t\t\t//this.maxArgCount = previous.MandatoryParamCount;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: Overrides\r\n\r\n\t\tinternal override void AddAbstractOverride(DMemberRef/*!*/ abstractMethod)\r\n\t\t{\r\n\t\t\t// nop, we don't need to maintain information about abstract overrides\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n        internal override PhpTypeCode EmitCall(CodeGenerator/*!*/ codeGenerator, string fallbackQualifiedName, CallSignature callSignature,\r\n            IPlace instance, bool runtimeVisibilityCheck, int overloadIndex, DType type, Text.Span position,\r\n            AccessType access, bool callVirt)\r\n\t\t{\r\n#if DEBUG_DYNAMIC_STUBS\r\n\t\t\t\r\n\t\t\tMethodBuilder mb = codeGenerator.IL.TypeBuilder.DefineMethod(DeclaringType.FullName + \"::\" + FullName,\r\n\t\t\t\tMethodAttributes.PrivateScope | MethodAttributes.Static, typeof(object), Types.Object_PhpStack);\r\n\r\n\t\t\tILEmitter il = new ILEmitter(mb);\r\n\t\t\tIndexedPlace instance2 = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\t\tIndexedPlace stack = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\tEmitArglessStub(il, stack, instance2);\r\n\t\t\t\r\n#endif\r\n            Debug.Assert(instance == null || instance is ExpressionPlace || instance == IndexedPlace.ThisArg);\r\n            Debug.Assert(fallbackQualifiedName == null);\r\n\t\t\treturn codeGenerator.EmitRoutineOperatorCall(DeclaringType, ExpressionPlace.GetExpression(instance), this.FullName, null, null, callSignature, access);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Run-time argless-stub emission.\r\n\t\t/// </summary>\r\n\t\tinternal void EmitArglessStub(ILEmitter/*!*/ il, IPlace/*!*/ stack, IPlace/*!*/ instance)\r\n\t\t{\r\n\t\t\tClrOverloadBuilder builder = new ClrOverloadBuilder(il, this, null /* !!! TODO !!! */, stack, instance, false,\r\n\t\t\t\tnew ClrOverloadBuilder.ParameterLoader(PhpStackBuilder.EmitValuePeekUnchecked),\r\n\t\t\t\tnew ClrOverloadBuilder.ParameterLoader(PhpStackBuilder.EmitReferencePeekUnchecked));\r\n\r\n\t\t\tbuilder.EmitResolutionByNumber();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Emit static method that creates an instance of given value type using default ctor.\r\n        /// </summary>\r\n        /// <param name=\"valueType\">Value type to be instantiated by resulting method.</param>\r\n        /// <returns>The method that returns value boxed into new instance of <see cref=\"ClrValue&lt;T&gt;\"/>.</returns>\r\n        private static MethodBase BuildDefaultValueCtor(Type/*!*/valueType)\r\n        {\r\n            Debug.Assert(valueType != null && valueType.IsValueType, \"Argument 'valueType' must not be null and must represent a value type!\");\r\n\r\n            DynamicMethod method = new DynamicMethod(valueType.Name + \"..ctor\", Types.Object[0], Type.EmptyTypes);\r\n            Emit.ILEmitter il = new PHP.Core.Emit.ILEmitter(method);\r\n\r\n            // local 0\r\n            // ldloca.s 0\r\n            // initobj <valueType>\r\n            \r\n            var loc = il.DeclareLocal(valueType);\r\n\r\n            il.Emit(OpCodes.Ldloca_S, loc);\r\n            il.Emit(OpCodes.Initobj, valueType);\r\n            \r\n            // LOAD <loc>\r\n            // box ConvertToPhp <valueType>\r\n\r\n            il.Emit(OpCodes.Ldloc, loc);\r\n            il.EmitBoxing(ClrOverloadBuilder.EmitConvertToPhp(il, valueType));\r\n\r\n            // return\r\n            il.Emit(OpCodes.Ret);\r\n\r\n            // done\r\n            return method;\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PurePhpFunction\r\n\r\n    /// <summary>\r\n    /// Represents runtime global PHP function declared in &lt;Declare&gt; helper method.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    public sealed class PurePhpFunction : PhpRoutine\r\n    {\r\n        #region Properties\r\n\r\n        public override bool IsLambda { get { return false; } }\r\n        public override bool ReturnValueDeepCopyEmitted { get { return false; } }\r\n        public override bool IsIdentityDefinite { get { return true; } }\r\n\r\n        public override Name Name { get { return name; } }\r\n        private readonly Name name;\r\n\r\n        public override bool IsFunction { get { return true; } }\r\n\r\n        public override CompilationSourceUnit SourceUnit { get { throw new NotSupportedException(); } }\r\n        public override Text.Span Span { get { throw new NotSupportedException(); } }\r\n\r\n        internal override bool IsExported { get { return false; } }\r\n\r\n        public override string GetFullClrName() { return Name.Value; }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Used by full-reflect.\r\n        /// </summary>\r\n        public PurePhpFunction(PhpRoutineDesc/*!*/routine, string name, MethodInfo/*!*/argfull)\r\n            : base(routine)\r\n        {\r\n            Debug.Assert(routine != null);\r\n            Debug.Assert(argfull != null);\r\n\r\n            this.name = new Name(name);\r\n            this.argfull = argfull;\r\n            this.signature = PhpRoutineSignature.FromArgfullInfo(this, argfull);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Utils\r\n\r\n        public override string GetFullName()\r\n        {\r\n            return name.Value;\r\n        }\r\n\r\n        internal override int ResolveOverload(Analyzer analyzer, CallSignature callSignature, Text.Span position, out RoutineSignature overloadSignature)\r\n        {\r\n            overloadSignature = signature;\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        \r\n    }\r\n\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core/Reflection/Modules.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Threading;\r\nusing PHP.Core.Emit;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region PureModule\r\n\r\n\tpublic class PureModule : PhpModule\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the loader. The module can be loaded to <see cref=\"PureAssembly\"/> or \r\n\t\t/// <see cref=\"PhpLibraryAssembly\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal PureModule(DAssembly/*!*/ assembly)\r\n\t\t\t: base(assembly)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the builder.\r\n\t\t/// </summary>\r\n\t\tinternal PureModule(PureCompilationUnit/*!*/ compilationUnit, PureAssembly/*!*/ assembly)\r\n\t\t\t: base(compilationUnit, assembly)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tprotected override CompilationUnitBase/*!*/ CreateCompilationUnit()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Compilation unit is never created for a loaded pure module.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprivate bool AutoPopulate()\r\n\t\t{\r\n\t\t\tType global_type = this.Assembly.RealModule.GetType(QualifiedName.Global.Name.Value);\r\n\t\t\tif (global_type != null)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo declare_helper = global_type.GetMethod(Name.DeclareHelperName.Value,\r\n\t\t\t\t\tBindingFlags.NonPublic | BindingFlags.Static);\r\n\r\n\t\t\t\tif (declare_helper != null)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdeclare_helper.Invoke(null, new object[] { this.assembly.ApplicationContext });\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tpublic override void Reflect(bool full,\r\n\t\t\tDictionary<string, DTypeDesc>/*!*/ types,\r\n\t\t\tDictionary<string, DRoutineDesc>/*!*/ functions,\r\n\t\t\tDualDictionary<string, DConstantDesc>/*!*/ constants)\r\n\t\t{\r\n\t\t\tif (AutoPopulate()) return;\r\n\r\n\t\t\t// types:\r\n\t\t\tClrModule.ReflectTypes(this.Assembly.RealAssembly, types);\r\n\r\n\t\t\t// TODO:\r\n\r\n\t\t\t// functions and global constants:\r\n\t\t\tforeach (Module module in this.Assembly.RealAssembly.GetModules())\r\n\t\t\t{\r\n\t\t\t\t//ClrTypeDesc.ReflectMethods(module.GetMethods(), globalType.TypeDesc,\r\n\t\t\t\t//\tdelegate(Name name, ClrMethodDesc/*!*/ function) { functions.Add(name.Value, function); });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ScriptModule\r\n\r\n\t/// <summary>\r\n\t/// Represents a script virtual module.\r\n\t/// </summary>\r\n\tpublic partial class ScriptModule : PhpModule\r\n\t{\r\n\t\t#region Statics\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declare functions helper argument types.\r\n\t\t/// </summary>\r\n\t\tinternal static readonly Type[] DeclareHelperArgTypes = Types.ScriptContext;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The name of the class containing script functions and helpers.\r\n\t\t/// </summary>\r\n\t\tinternal const string ScriptTypeName = \"<Script>\";\r\n\r\n\t\tinternal const string DeclareHelperNane = \"<Declare>\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Value returned from skipped include construct.\r\n\t\t/// </summary>\r\n\t\tinternal const bool SkippedIncludeReturnValue = true;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and properties\r\n\r\n\t\tpublic new CompilationUnit CompilationUnit { get { return (CompilationUnit)base.CompilationUnit; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A script assembly where the script belongs to.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptAssembly ScriptAssembly { get { return (ScriptAssembly)assembly; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a namespace where user classes and interfaces are declared in.\r\n\t\t/// Ends with a <see cref=\"Type.Delimiter\"/> (a dot) for convenience.\r\n\t\t/// </summary>\r\n\t\tpublic string UserTypesNamespace { get { return userTypesNamespace; } }\r\n\t\tprivate string userTypesNamespace;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the script type.\r\n\t\t/// </summary>\r\n        public Type ScriptType\r\n        {\r\n            get\r\n            {\r\n                return scriptInfo.Script;\r\n            }\r\n            //internal set\r\n            //{\r\n            //    scriptInfo = new ScriptInfo(value);\r\n            //}\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the script info containing the type and Main delegate.\r\n        /// </summary>\r\n        public ScriptInfo ScriptInfo { get { return scriptInfo; } }\r\n        protected ScriptInfo scriptInfo;\r\n\r\n        /// <summary>\r\n        /// MainHelper method, which is called when inclusion is made.\r\n        /// </summary>\r\n        public MethodInfo MainHelper { get { return ScriptInfo.MainHelper; } /*set { ScriptInfo.MainHelper = value; }*/ }\r\n\r\n        /// <summary>\r\n        /// Gets the relative path of the source file represented by this ScriptModule.\r\n        /// </summary>\r\n        public string RelativeSourcePath { get { return relativeSourcePath; } }\r\n        private readonly string relativeSourcePath;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the builder.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptModule(CompilationUnit/*!*/ unit, ScriptAssembly/*!*/ scriptAssembly, string subnamespace)\r\n\t\t\t: base(unit, scriptAssembly)\r\n\t\t{\r\n\t\t\tDebug.Assert(unit != null && scriptAssembly != null);\r\n\r\n\t\t\tthis.userTypesNamespace = subnamespace;\r\n\t\t\tthis.scriptInfo = null;\r\n            this.relativeSourcePath = unit.RelativeSourcePath;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the loader.\r\n\t\t/// </summary>\r\n        /// <param name=\"relativeSourcePath\">Path to the source file which is represented by this script.</param>\r\n        /// <param name=\"scriptType\">Type which represents script. Implements IPhpScript interface.</param>\r\n        /// <param name=\"scriptAssembly\">Script assembly this script module belongs to.</param>\r\n        /// <param name=\"subnamespace\">Namespace where all types statically declared in this script are contained.</param>\r\n        public ScriptModule(string/*!*/ relativeSourcePath, Type/*!*/ scriptType, ScriptAssembly/*!*/ scriptAssembly, string subnamespace)\r\n\t\t\t: base(scriptAssembly)\r\n\t\t{\r\n\t\t\tDebug.Assert(scriptAssembly != null);\r\n\r\n\t\t\tthis.scriptInfo = new ScriptInfo(scriptType);\r\n\t\t\tthis.userTypesNamespace = subnamespace;\r\n            this.relativeSourcePath = relativeSourcePath;\r\n\r\n\t\t\t//FastReflect();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// This method is used when module is reflected (and is not intended\r\n\t\t/// to be compiled).\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns new instance of ReflectedCompilationUnit.</returns>\r\n\t\tprotected override CompilationUnitBase/*!*/ CreateCompilationUnit()\r\n\t\t{\r\n\t\t\treturn new ReflectedCompilationUnit(this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Getters\r\n\r\n\t\tpublic virtual object[] GetInclusionAttributes()\r\n\t\t{\r\n\t\t\treturn ScriptType.GetCustomAttributes(typeof(IncludesAttribute), false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Translates a source path to a namespace using the current source root from configuration.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The namespace optionally ending with a dot.</returns>\r\n\t\tpublic static string/*!*/ GetSubnamespace(RelativePath rp, bool appendDot)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder(rp.Path.Length);\r\n\t\t\t\r\n\t\t\tresult.Append('<');\r\n\t\t\t\r\n\t\t\t// external script's file which can be reached via relative path:\r\n\t\t\tif (rp.Level > 0)\r\n\t\t\t{\r\n\t\t\t\tresult.Append(\"$L\");\r\n\t\t\t\tresult.Append((char)(rp.Level + 'a'));\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < rp.Path.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tswitch (rp.Path[i])\r\n\t\t\t\t{\r\n\t\t\t\t\tcase '\\\\': result.Append('/'); break;\r\n\t\t\t\t\tcase '$': result.Append(\"$$\"); break;\r\n\t\t\t\t\tcase '[': result.Append(\"$A\"); break;\r\n\t\t\t\t\tcase ']': result.Append(\"$B\"); break;\r\n\t\t\t\t\tcase '+': result.Append(\"$C\"); break;\r\n\t\t\t\t\tcase ',': result.Append(\"$D\"); break;\r\n\t\t\t\t\tcase '&': result.Append(\"$E\"); break;\r\n\t\t\t\t\tcase '#': result.Append(\"$F\"); break;\r\n\t\t\t\t\tcase '`': result.Append(\"$G\"); break;\r\n\t\t\t\t\tdefault: result.Append(rp.Path[i]); break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tresult.Append('>');\r\n\t\t\tif (appendDot) result.Append('.');\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Translates namespace name to file path.\r\n\t\t/// (Decodes namespace names encoded using <see cref=\"GetSubnamespace\"/> method).\r\n\t\t/// </summary>\r\n\t\tpublic static RelativePath GetPathFromSubnamespace(string/*!*/ subnamespace)\r\n\t\t{\r\n\t\t\tif (subnamespace == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"subnamespace\");\r\n\r\n\t\t\tif (subnamespace.Length < 2 || subnamespace[0] != '<')\r\n\t\t\t\tthrow new ArgumentException();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tStringBuilder result = new StringBuilder(subnamespace.Length);\r\n\t\t\t\tsbyte level = 0;\r\n\r\n\t\t\t\tint i = 1; \r\n\t\t\t\twhile (subnamespace[i] != '>')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (subnamespace[i] == '$')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tDebug.Assert(i < subnamespace.Length);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tswitch (subnamespace[i])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '$': result.Append('$'); break;\r\n\t\t\t\t\t\t\tcase 'A': result.Append('['); break;\r\n\t\t\t\t\t\t\tcase 'B': result.Append(']'); break;\r\n\t\t\t\t\t\t\tcase 'C': result.Append('+'); break;\r\n\t\t\t\t\t\t\tcase 'D': result.Append(','); break;\r\n\t\t\t\t\t\t\tcase 'E': result.Append('&'); break;\r\n\t\t\t\t\t\t\tcase 'F': result.Append('#'); break;\r\n\t\t\t\t\t\t\tcase 'G': result.Append('`'); break;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcase 'L':\r\n\t\t\t\t\t\t\t\tlevel = (sbyte)(subnamespace[++i] - 'a');\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tdefault: \r\n\t\t\t\t\t\t\t\tthrow new ArgumentException(); \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresult.Append(subnamespace[i]);\r\n\t\t\t\t\t\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn new RelativePath(level, result.ToString());\r\n\t\t\t}\r\n\t\t\tcatch\r\n\t\t\t{\r\n\t\t\t\tthrow new ArgumentException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflect types, functions and constants in compiled CU\r\n\t\t/// </summary>\r\n        /// <param name=\"full\">Not used.</param>\r\n        /// <param name=\"functions\">Will contain reflected functions.</param>\r\n        /// <param name=\"types\">Will contain reflected classes.</param>\r\n        /// <param name=\"constants\">Not used.</param>\r\n\t\tpublic override void Reflect(bool full,\r\n\t\t\tDictionary<string, DTypeDesc>/*!*/ types,\r\n\t\t\tDictionary<string, DRoutineDesc>/*!*/ functions,\r\n\t\t\tDualDictionary<string, DConstantDesc>/*!*/ constants)\r\n\t\t{\r\n            // pairs of <assembly, list of namespaces>\r\n            // each namespace represents relative path to the script containing functions/PHP classes\r\n            var reachedScripts = new Dictionary<Type, bool>();\r\n\r\n            CollectIncludees(ScriptType, reachedScripts);\r\n\r\n            // reflect functions/classes from reachedScripts\r\n            foreach (var scriptType in reachedScripts.Keys)\r\n            {\r\n                Debug.Assert(scriptType.Name == ScriptModule.ScriptTypeName);\r\n\r\n                ReflectScriptTypeFunctions(scriptType, functions);\r\n                ReflectScriptTypeClasses(scriptType, types);\r\n                ReflectScriptTypeConstants(scriptType, constants);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Collect scripts to reflect from.\r\n        /// </summary>\r\n        /// <param name=\"scriptType\">The Script type to collect.</param>\r\n        /// <param name=\"reachedScripts\">Scripts reached using static inclusions. Used also as recursion prevention.</param>\r\n        private static void CollectIncludees(Type scriptType, Dictionary<Type,bool> reachedScripts)\r\n        {\r\n            Debug.Assert(scriptType.Name == ScriptModule.ScriptTypeName);\r\n            \r\n            // recursion prevention\r\n            if (reachedScripts.ContainsKey(scriptType)) return;\r\n            reachedScripts.Add(scriptType, false);\r\n              \r\n            //\r\n            // reflect statically included script types recursively\r\n            //\r\n            var sa = ScriptIncludeesAttribute.Reflect(scriptType);\r\n            if (sa != null && sa.Inclusions.Length > 0)\r\n            {\r\n                var module = scriptType.Module;\r\n                var conditionalFlags = sa.InclusionsConditionalFlags;\r\n                // recursively reflect statically included scripts\r\n                for (int i = 0; i < sa.Inclusions.Length; ++i )\r\n                    if (!conditionalFlags[i])   // allow reflecting of included script only if it is not conditional include\r\n                    {\r\n                        Type includedScript = module.ResolveType(sa.Inclusions[i]);\r\n\r\n                        if (includedScript != null)\r\n                            CollectIncludees(includedScript, reachedScripts);\r\n                    }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reflect PHP classes declared statically in the given script <c>type</c>.\r\n        /// </summary>\r\n        /// <param name=\"scriptType\">Script type to reflect.</param>\r\n        /// <param name=\"types\">List of types to reflect to.</param>\r\n        private static void ReflectScriptTypeClasses(Type scriptType,\r\n            Dictionary<string, DTypeDesc>/*!*/ types)\r\n        {\r\n            ScriptDeclaresAttribute script_declares = ScriptDeclaresAttribute.Reflect(scriptType);\r\n            if (script_declares == null) return;\r\n\r\n            var module = scriptType.Module;\r\n\r\n            foreach (var typeToken in script_declares.DeclaredTypes)\r\n            {\r\n                Type type = module.ResolveType(typeToken);\r\n\r\n                // reflect PHP class, skip PHP types that were declared conditionally\r\n                if (PhpType.IsPhpRealType(type) && !PhpType.IsRealConditionalDefinition(type))\r\n                {\r\n                    // converts CLR namespaces and nested types to PHP namespaces:\r\n                    string full_name = ClrNotationUtils.FromClrNotation(type.FullName, true).ToString();\r\n\r\n                    // Creating PhpTypeDesc with cache lookup since this type can be in the cache already:\r\n                    // Also force PHP type, because we already checked PhpType.IsPhpRealType(type)\r\n                    PhpTypeDesc phpType = (PhpTypeDesc)DTypeDesc.Create(type.TypeHandle);\r\n\r\n                    DTypeDesc existing;\r\n                    if (types.TryGetValue(full_name, out existing))\r\n                    {\r\n                        // TODO (TP): can be generic overload!!\r\n                        existing.MemberAttributes |= PhpMemberAttributes.Ambiguous;\r\n                    }\r\n                    types.Add(full_name, phpType);\r\n                }\r\n            }            \r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t///\treflect global functions in &lt;Script&gt; class\r\n\t\t/// TODO: consider merging with PhpTypeDesc.FullReflectMethods\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"functions\">Dictionary for functions</param>\r\n        /// <param name=\"scriptType\">The type to reflect from.</param>\r\n        private static void ReflectScriptTypeFunctions(Type scriptType, Dictionary<string, DRoutineDesc> functions)\r\n\t\t{\r\n            MethodInfo[] real_methods = scriptType.GetMethods(DTypeDesc.MembersReflectionBindingFlags);\r\n\t\t\tDictionary<string, MethodInfo> argless_stubs = new Dictionary<string, MethodInfo>(real_methods.Length / 3);\r\n\r\n\t\t\t// first pass - fill argless_stubs\r\n\t\t\tfor (int i = 0; i < real_methods.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo info = real_methods[i];\r\n\t\t\t\tif ((info.Attributes & MethodAttributes.MemberAccessMask) != MethodAttributes.PrivateScope)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (PhpFunctionUtils.IsArglessStub(info, null))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\targless_stubs.Add(info.Name, info);\r\n\t\t\t\t\t\treal_methods[i] = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse real_methods[i] = null; // expunge private scope methods\r\n\t\t\t}\r\n\r\n\t\t\t// second pass - match argfulls\r\n            foreach (MethodInfo info in real_methods)\r\n            {\r\n                // argfull detection:\r\n                if (info == null || !PhpFunctionUtils.IsArgfullOverload(info, null))\r\n                    continue;\r\n\r\n                // TODO: namespaces!!\r\n\r\n                if (functions.ContainsKey(info.Name))\r\n                    throw new InvalidOperationException(\"Function '\" + info.Name + \"' redeclaration.\");   // compilation unit contains more functions with the same name\r\n\r\n                // find the argless:\r\n                MethodInfo argless_info = null;\r\n                if (!argless_stubs.TryGetValue(info.Name, out argless_info))\r\n                {\r\n                    // argless has to be generated on-the-fly\r\n                    throw new NotImplementedException(\"Generating argless stubs for imported PHP types is not yet implemented\");\r\n                }\r\n\r\n                if (!PhpFunctionUtils.IsRealConditionalDefinition(info.Name))\r\n                {\r\n                    Name name = new Name(info.Name);\r\n                    DRoutineDesc func_desc;\r\n                    PhpMemberAttributes attrs = Enums.GetMemberAttributes(info);\r\n\r\n                    // this method has not been populated -> create a new PhpRoutineDesc\r\n                    func_desc = new PhpRoutineDesc(attrs, (RoutineDelegate)Delegate.CreateDelegate(Types.RoutineDelegate, argless_info), true);\r\n                    functions.Add(info.Name, func_desc);\r\n\r\n                    //\r\n                    if (func_desc.Member == null)\r\n                    {\r\n                        PhpFunction func = new PhpFunction(new QualifiedName(name), (PhpRoutineDesc)func_desc, info, argless_info);\r\n                        func.WriteUp(PhpRoutineSignature.FromArgfullInfo(func, info));\r\n                        func_desc.Member = func;\r\n                    }\r\n                }\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Reflect global constants in &lt;script&gt; class.\r\n        /// </summary>\r\n        /// <param name=\"scriptType\">The type representing single script.</param>\r\n        /// <param name=\"constants\">Dictionary for constants.</param>\r\n        private void ReflectScriptTypeConstants(Type scriptType, DualDictionary<string, DConstantDesc>/*!*/ constants)\r\n        {\r\n            foreach (var field in scriptType.GetFields(BindingFlags.Public | BindingFlags.Static))\r\n            {\r\n                // TODO: namespaces!!\r\n\r\n                GlobalConstant constant = new GlobalConstant(this, ClrNotationUtils.FromClrNotation(field.Name, true), field);\r\n                constant.SetValue(Convert.ClrLiteralToPhpLiteral(field.GetValue(null)));\r\n                constants.Add(field.Name, constant.ConstantDesc, false);\r\n            }            \r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Modules.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Threading;\r\nusing PHP.Core.Emit;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Text.RegularExpressions;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n    #region DModule\r\n\r\n    /// <remarks>\r\n    /// REFLECTION: Reflection should add reflected items to the compilation unit. \r\n    /// When ScriptModule is reflected, the scope in the CU's tables is set to arbitrary > 0 value for\r\n    /// conditional items ($mdeclN). N may encode the scope (if useful). Thus it is not necessary to\r\n    /// create any kind of Declaration instances for the reflected items.\r\n    /// </remarks>\r\n    public abstract class DModule\r\n    {\r\n        #region  Fields\r\n\r\n        public DAssembly/*!*/ Assembly { get { return assembly; } }\r\n        protected readonly DAssembly/*!*/ assembly;\r\n\r\n        public GlobalType/*!*/ GlobalType { get { return globalType; } }\r\n        protected readonly GlobalType/*!*/ globalType;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Used by the loader.\r\n        /// </summary>\r\n        protected DModule(DAssembly/*!*/ assembly)\r\n        {\r\n            this.globalType = new GlobalType(this);\r\n            this.assembly = assembly;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used by <see cref=\"UnknownModule\"/>.\r\n        /// </summary>\r\n        protected DModule()\r\n        {\r\n            this.globalType = new GlobalType(this);\r\n            this.assembly = UnknownAssembly.RuntimeAssembly;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Reflection\r\n\r\n        public abstract void Reflect(bool full,\r\n            Dictionary<string, DTypeDesc>/*!*/ types,\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants);\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region PhpModule\r\n\r\n    public abstract class PhpModule : DModule\r\n    {\r\n        public CompilationUnitBase/*!*/ CompilationUnit\r\n        {\r\n            get\r\n            {\r\n                if (_compilationUnit == null)\r\n                    _compilationUnit = CreateCompilationUnit();\r\n\r\n                return _compilationUnit;\r\n            }\r\n        }\r\n        private CompilationUnitBase _compilationUnit;\r\n\r\n        protected abstract CompilationUnitBase/*!*/ CreateCompilationUnit();\r\n\r\n        /// <summary>\r\n        /// Used by the builder.\r\n        /// </summary>\r\n        protected PhpModule(CompilationUnitBase/*!*/ compilationUnit, PhpAssembly/*!*/ assembly)\r\n            : base(assembly)\r\n        {\r\n            this._compilationUnit = compilationUnit;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used by the loader.\r\n        /// </summary>\r\n        protected PhpModule(DAssembly/*!*/ assembly)\r\n            : base(assembly)\r\n        {\r\n            this._compilationUnit = null; // lazy init or unused\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region TransientModule\r\n\r\n    /// <summary>\r\n    /// Represents a script virtual module.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    public class TransientModule : PhpModule\r\n    {\r\n        #region Members\r\n\r\n        /// <summary>\r\n        /// Characters separating <see cref=\"TransientModule.sourcePath\"/> and <see cref=\"TransientModule.Id\"/>.\r\n        /// Character at <c>0</c> is for special names.\r\n        /// Character at <c>1</c> is for normal names.\r\n        /// </summary>\r\n        internal static readonly char[]/*!*/IdDelimiters = new[] { '^', '?' };\r\n        \r\n        public TransientCompilationUnit TransientCompilationUnit { get { return (TransientCompilationUnit)base.CompilationUnit; } }\r\n\r\n        public MainRoutineDelegate Main { get { return main; } }\r\n        protected MainRoutineDelegate main;\r\n\r\n        public TransientModule ContainingModule { get { return containingModule; } }\r\n        private readonly TransientModule containingModule;\r\n\r\n        public int Id { get { return id; } }\r\n        private readonly int id;\r\n\r\n        private readonly string sourcePath;\r\n\r\n        internal EvalKinds Kind { get { return kind; } }\r\n        private readonly EvalKinds kind;\r\n\r\n        /// <summary>\r\n        /// Used by the builder.\r\n        /// </summary>\r\n        public TransientModule(int id, EvalKinds kind, TransientCompilationUnit/*!*/ unit, TransientAssembly/*!*/ scriptAssembly,\r\n            TransientModule containingModule, string sourcePath)\r\n            : base(unit, scriptAssembly)\r\n        {\r\n            Debug.Assert(unit != null && scriptAssembly != null);\r\n\r\n            this.id = id;\r\n            this.sourcePath = sourcePath;\r\n            this.kind = kind;\r\n            this.containingModule = containingModule;\r\n        }\r\n\r\n        internal string/*!*/ MakeName(string /*!*/ name, bool isSpecialName)\r\n        {\r\n            // <> ensures, the eval-id is removed from the name\r\n            // '?'/'^' distinguish from the file path used by MSA and among regular and special names\r\n            return String.Concat(\r\n                \"<\",\r\n                    this.sourcePath,\r\n                    isSpecialName ? IdDelimiters[0] : IdDelimiters[1],\r\n                    this.Id.ToString(),\r\n                \">.\",\r\n                name);\r\n        }\r\n\r\n        private static int ParseEvalId(string/*!*/ name)\r\n        {\r\n            Debug.Assert(name != null && name.Length > 0 && name[0] == '<');\r\n\r\n            int id;\r\n            string typename;\r\n            string src;\r\n            ReflectionUtils.ParseTypeId(name, out id, out src, out typename);\r\n            return id;\r\n        }\r\n\r\n        internal static int GetEvalId(ApplicationContext/*!*/ applicationContext, MethodBase/*!*/ method)\r\n        {\r\n            // gets [PhpEvalId] attribute defined on the type:\r\n            if (method.DeclaringType != null && applicationContext.IsTransientRealType(method.DeclaringType))\r\n                return ParseEvalId(method.DeclaringType.Namespace);\r\n\r\n            if (method.Name.Length > 3 && method.Name[0] == '<' && method.Name.IndexOfAny(IdDelimiters, 1) != -1)\r\n                return ParseEvalId(method.Name);\r\n\r\n            return TransientAssembly.InvalidEvalId;\r\n        }\r\n\r\n        internal static bool IsSpecialName(string/*!*/ name)\r\n        {\r\n            return name.Length > 1 && name[0] == '<' && name.IndexOf(IdDelimiters[0], 1) != -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a string appearing in error messages.\r\n        /// </summary>\r\n        /// <returns>The string.</returns>\r\n        internal string GetErrorString()\r\n        {\r\n            switch (kind)\r\n            {\r\n                case EvalKinds.Assert: return \"assert\";\r\n                case EvalKinds.ExplicitEval: return \"eval\";\r\n                case EvalKinds.LambdaFunction: return \"runtime-created function\";\r\n            }\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region N/A\r\n\r\n        protected override CompilationUnitBase CreateCompilationUnit()\r\n        {\r\n            Debug.Fail(null);\r\n            throw null;\r\n        }\r\n\r\n        public override void Reflect(bool full, Dictionary<string, DTypeDesc> types, Dictionary<string, DRoutineDesc> functions, DualDictionary<string, DConstantDesc> constants)\r\n        {\r\n            Debug.Fail(null);\r\n            throw null;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ClrModule\r\n\r\n    /// <summary>\r\n    /// Represents CLR loaded assembly (not a <see cref=\"System.Reflection.Module\"/>).\r\n    /// </summary>\r\n    public sealed class ClrModule : DModule\r\n    {\r\n        public ClrAssembly/*!*/ ClrAssembly { get { return (ClrAssembly)assembly; } }\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Called by the loader via <see cref=\"ClrAssembly\"/>.\r\n        /// </summary>\r\n        internal ClrModule(ClrAssembly/*!*/ assembly)\r\n            : base(assembly)\r\n        {\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Reflection\r\n\r\n        public override void Reflect(bool full,\r\n            Dictionary<string, DTypeDesc>/*!*/ types,\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants)\r\n        {\r\n            ReflectTypes(assembly.RealAssembly, types);\r\n            ReflectFunctions(assembly.RealAssembly, globalType.TypeDesc, functions);\r\n            ReflectConstants(assembly.RealAssembly, this, constants);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used by CLR modules and PHP pure modules.\r\n        /// </summary>\r\n        internal static void ReflectTypes(Assembly/*!*/ realAssembly, Dictionary<string, DTypeDesc>/*!*/ types)\r\n        {\r\n            // types:\r\n            foreach (Type type in realAssembly.GetTypes())\r\n            {\r\n                if (type.IsVisible)\r\n                {\r\n                    // skip PHP types that were declared conditionally:\r\n                    if (PhpType.IsPhpRealType(type) && PhpType.IsRealConditionalDefinition(type))\r\n                        continue;\r\n\r\n                    // converts CLR namespaces and nested types to PHP namespaces:\r\n                    string full_name = ClrNotationUtils.FromClrNotation(type.FullName, true).ToString();\r\n\r\n                    DTypeDesc existing;\r\n                    if (types.TryGetValue(full_name, out existing))\r\n                    {\r\n                        ClrTypeDesc existing_clr = existing as ClrTypeDesc;\r\n                        if (existing_clr != null && (existing_clr.GenericOverloads.Count > 0 || type.IsGenericTypeDefinition))\r\n                        {\r\n                            ClrTypeDesc new_clr = DTypeDesc.Create(type) as ClrTypeDesc;\r\n                            if (new_clr != null)\r\n                            {\r\n                                // type is overloaded by the number of generic parameters:\r\n                                existing_clr.AddGenericOverload(new_clr);\r\n                            }\r\n                            else\r\n                            {\r\n                                // do not add, just mark existing with the flag:\r\n                                existing.MemberAttributes |= PhpMemberAttributes.Ambiguous;\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            // do not add, just mark existing with the flag:\r\n                            existing.MemberAttributes |= PhpMemberAttributes.Ambiguous;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        types[full_name] = DTypeDesc.Create(type);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        internal static void ReflectFunctions(Assembly/*!*/ realAssembly, DTypeDesc/*!*/ declaringType,\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions)\r\n        {\r\n            Debug.Assert(realAssembly != null && declaringType != null && functions != null);\r\n\r\n            foreach (Module module in realAssembly.GetModules())\r\n            {\r\n                foreach (MethodInfo real_function in module.GetMethods(BindingFlags.Public | BindingFlags.Static))\r\n                {\r\n                    if ((real_function.Attributes & MethodAttributes.FamANDAssem) != 0)    // skip some methods that should not be accessible\r\n                        continue;\r\n\r\n                    ReflectFunction(declaringType, real_function, functions);\r\n                }\r\n            }\r\n        }\r\n\r\n        internal static void ReflectFunction(DTypeDesc declaringType, MethodInfo real_function, Dictionary<string, DRoutineDesc> functions)\r\n        {\r\n            if (!real_function.IsSpecialName)\r\n            {\r\n                QualifiedName qualified_name = ClrNotationUtils.FromClrNotation(real_function.Name, true);\r\n                string full_name = qualified_name.ToString();\r\n\r\n                ClrMethod clr_function = null;\r\n\r\n                DRoutineDesc existing;\r\n                if (functions.TryGetValue(full_name, out existing))\r\n                {\r\n                    if (existing.DeclaringType.Equals(declaringType))\r\n                    {\r\n                        Debug.Assert(existing is ClrMethodDesc, \"CLR module should contain CLR methods only\");\r\n\r\n                        // an overload of existing CLR function:\r\n                        clr_function = existing.ClrMethod;\r\n                    }\r\n                    else\r\n                    {\r\n                        // ambiguous:\r\n                        clr_function = null;\r\n                        existing.MemberAttributes |= PhpMemberAttributes.Ambiguous;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // new entry:\r\n                    clr_function = new ClrMethod(qualified_name.Name, declaringType, Enums.GetMemberAttributes(real_function), 1,\r\n                            real_function.ContainsGenericParameters);\r\n\r\n                    functions.Add(full_name, clr_function.ClrMethodDesc);\r\n                }\r\n\r\n                if (clr_function != null)\r\n                {\r\n                    ClrMethod.Overload overload;\r\n                    clr_function.AddOverload(real_function, out overload);\r\n                }\r\n            }\r\n        }\r\n\r\n        internal static void ReflectConstants(Assembly/*!*/ realAssembly, DModule/*!*/ declaringModule,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants)\r\n        {\r\n            Debug.Assert(realAssembly != null && constants != null);\r\n\r\n            foreach (FieldInfo real_field in ReflectionUtils.GetGlobalFields(realAssembly, BindingFlags.Public | BindingFlags.Static))\r\n            {\r\n                if (real_field.IsLiteral && !real_field.IsSpecialName)\r\n                {\r\n                    string full_name = ClrNotationUtils.FromClrNotation(real_field.Name, true).ToString();\r\n\r\n                    DConstantDesc existing;\r\n                    if (constants.TryGetValue(full_name, out existing))\r\n                    {\r\n                        // can be already loaded from different module (CRL or CLib):\r\n                        existing.MemberAttributes |= PhpMemberAttributes.Ambiguous;\r\n                    }\r\n                    else\r\n                    {\r\n                        object value = real_field.GetValue(null);\r\n                        DConstantDesc const_desc = new DConstantDesc(declaringModule, PhpMemberAttributes.Public | PhpMemberAttributes.Static, value);\r\n                        constants.Add(full_name, const_desc, false);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region UnknownModule\r\n\r\n    public sealed class UnknownModule : DModule\r\n    {\r\n        #region Members\r\n\r\n        internal static UnknownModule/*!*/ RuntimeModule;\r\n\r\n        static void UnknowModule()\r\n        {\r\n            // the field may be initialized by DTypeDesc .cctor as it is needed for creating predefined type desc:\r\n            if (RuntimeModule == null) RuntimeModule = new UnknownModule();\r\n        }\r\n\r\n        internal UnknownModule()\r\n            : base()\r\n        {\r\n        }\r\n\r\n        public override void Reflect(bool full,\r\n            Dictionary<string, DTypeDesc>/*!*/ types,\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants)\r\n        {\r\n            Debug.Fail(null);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ScriptModule\r\n\r\n    /// <summary>\r\n    /// Represents a script virtual module.\r\n    /// </summary>\r\n    public partial class ScriptModule\r\n    {\r\n        #region Statics\r\n\r\n        /// <summary>\r\n        /// Main helper argument types.\r\n        /// </summary>\r\n        internal static readonly Type[] MainHelperArgTypes = new Type[] \r\n    { \r\n      typeof(ScriptContext),              // context \r\n      typeof(Dictionary<string, object>), // variables\r\n      typeof(DObject),                    // self\r\n      typeof(DTypeDesc),                  // includer\r\n      typeof(bool)                        // request\r\n    };\r\n\r\n        /// <summary>\r\n        /// Value returned from script's Main() method if no return value is specified.\r\n        /// </summary>\r\n        internal const int DefaultMainReturnValue = 1;\r\n\r\n        /// <summary>\r\n        /// The name of the main helper method (containing global code). \r\n        /// </summary>\r\n        internal const string MainHelperName = \"<Main>\";\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core/Reflection/Objects.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Dynamic;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP.Core.Emit;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t[Serializable]\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DObject : IPhpComparable, IPhpConvertible, IPhpCloneable, IPhpPrintable,\r\n\t\tIPhpVariable, IDisposable, IPhpObjectGraphNode, IPhpEnumerable, ISerializable,\r\n\t\tIDeserializationCallback , IDynamicMetaObjectProvider\r\n\t{\r\n        #region ObjectFlags\r\n\r\n\t\t/// <summary>\r\n\t\t/// Instance flags grouped into an enum to conserve space.\r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tprivate enum ObjectFlags : byte\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Marks visited <see cref=\"DObject\"/> instances when printing variable contents or comparing\r\n\t\t\t/// <see cref=\"DObject\"/>s.\r\n\t\t\t/// </summary>\r\n\t\t\tVisited = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>True</B> means there is <c>__get</c> in current call stack (used to prevent getter recursion).\r\n\t\t\t/// </summary>\r\n\t\t\tInsideGetter = 2,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>True</B> means there is <c>__set</c> in current call stack (used to prevent setter recursion).\r\n\t\t\t/// </summary>\r\n\t\t\tInsideSetter = 4,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>True</B> means there is <c>__call</c> in current call stack (used to prevent caller recursion).\r\n\t\t\t/// </summary>\r\n\t\t\tInsideCaller = 8,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>True</B> means there is <c>__unset</c> in current call stack (used to prevent caller recursion).\r\n\t\t\t/// </summary>\r\n\t\t\tInsideUnsetter = 16,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <B>True</B> means there is <c>__isset</c> in current call stack (used to prevent caller recursion).\r\n\t\t\t/// </summary>\r\n\t\t\tInsideIssetter = 32\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region AttributedValue\r\n\r\n\t\tprotected struct AttributedValue\r\n\t\t{\r\n\t\t\tpublic readonly object Value;\r\n\t\t\tpublic readonly PhpMemberAttributes Attributes;\r\n\r\n            public string DeclaringTypeName { get { return (DeclaringType != null) ? DeclaringType.MakeSimpleName() : null; } }\r\n            private readonly DTypeDesc DeclaringType;\r\n\r\n            public AttributedValue(object value, PhpMemberAttributes attributes, DTypeDesc DeclaringType)\r\n\t\t\t{\r\n\t\t\t\tthis.Value = value;\r\n\t\t\t\tthis.Attributes = attributes;\r\n                this.DeclaringType = DeclaringType; // needed only when value is private\r\n\t\t\t}\r\n\r\n            public AttributedValue(object value)\r\n                :this(value, PhpMemberAttributes.None, null)\r\n            {\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Provides the <see cref=\"IDictionaryEnumerator\"/> interface by wrapping a user-implemeted\r\n\t\t/// <see cref=\"Library.SPL.Iterator\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Instances of this class are iterated when <c>foreach</c> is used on object of a class\r\n\t\t/// that implements <see cref=\"Library.SPL.Iterator\"/> or <see cref=\"Library.SPL.IteratorAggregate\"/>.\r\n\t\t/// </remarks>\r\n\t\t[Serializable]\r\n\t\tpublic class PhpIteratorEnumerator : IDictionaryEnumerator\r\n\t\t{\r\n\t\t\t#region Fields\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The underlying user iterator.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate DObject/*!*/ iterator;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Current script context.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate ScriptContext/*!*/ context;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Whether the enumerator should return values as <see cref=\"PhpReference\"/>s.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool aliasedValues;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// <b>true</b> if <see cref=\"iterator\"/> points to the first element.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate bool firstElement;\r\n\r\n\t\t\tprivate const string iteratorRewind = \"rewind\";\r\n\t\t\tprivate const string itetatorNext = \"next\";\r\n\t\t\tprivate const string iteratorValid = \"valid\";\r\n\t\t\tprivate const string iteratorKey = \"key\";\r\n\t\t\tprivate const string iteratorCurrent = \"current\";\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"PhpIteratorEnumerator\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"iterator\">The underlying user iterator.</param>\r\n\t\t\t/// <param name=\"context\">Current script context.</param>\r\n\t\t\t/// <param name=\"aliasedValues\">Whether the enumerator should return values as <see cref=\"PhpReference\"/>s.</param>\r\n\t\t\tinternal PhpIteratorEnumerator(DObject/*!*/ iterator, ScriptContext/*!*/ context, bool aliasedValues)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(iterator != null && iterator.RealObject is Library.SPL.Iterator);\r\n\r\n\t\t\t\tthis.iterator = iterator;\r\n\t\t\t\tthis.context = context;\r\n\t\t\t\tthis.aliasedValues = aliasedValues;\r\n\t\t\t\tReset();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IDictionaryEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns the key of the current dictionary entry.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Key\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// call Iterator::key\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\tobject obj = iterator.InvokeMethod(iteratorKey, null, context);\r\n\r\n\t\t\t\t\t// dereference the result\r\n\t\t\t\t\tobj = PhpVariable.Dereference(obj);\r\n\r\n\t\t\t\t\t// special to-int & to-string conversion\r\n\t\t\t\t\tif (obj == null) return 0;\r\n\t\t\t\t\tif (PhpVariable.IsString(obj)) return obj;\r\n\t\t\t\t\tif (obj is int) return obj;\r\n                    if (obj is long) return obj;\r\n\t\t\t\t\tif (obj is bool) return ((bool)obj ? 1 : 0);\r\n\t\t\t\t\tif (obj is double) return unchecked((int)(double)obj);\r\n\r\n\t\t\t\t\tPhpResource resource = obj as PhpResource;\r\n\t\t\t\t\tif (resource != null) return resource.ToInteger();\r\n\r\n\t\t\t\t\t// PhpArray, PhpObject\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"illegal_key_return_type\", iterator.TypeName));\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns the value of the current dictionary entry.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Value\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\t// call Iterator::current\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\tobject obj = iterator.InvokeMethod(iteratorCurrent, null, context);\r\n\r\n\t\t\t\t\tPhpReference reference = obj as PhpReference;\r\n\r\n\t\t\t\t\t// copy the value when creating a new PhpReference to prevent the \"phantom reference\"\r\n\t\t\t\t\tif (aliasedValues)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn (reference != null ?\r\n\t\t\t\t\t\t\treference : new PhpReference(PhpVariable.Copy(obj, CopyReason.Assigned)));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return PhpVariable.Copy((reference != null ? reference.Value : obj), CopyReason.Assigned);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns both the key (field name) and the value (field value) of the current dictionary entry.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic DictionaryEntry Entry\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{ return new DictionaryEntry(Key, Value); }\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region IEnumerator Members\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns both the key (field name) and the value (field value) of the current dictionary entry.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic object Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{ return new DictionaryEntry(Key, Value); }\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Sets the enumerator to its initial position, which is before the first element in the collection.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\t// call Iterator::rewind\r\n\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\titerator.InvokeMethod(iteratorRewind, null, context);\r\n\r\n\t\t\t\tfirstElement = true;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Advances the enumerator to the next element of the collection.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <returns><B>true</B> if the enumerator was successfully advanced to the next element; <B>false</B>\r\n\t\t\t/// if the enumerator has passed the end of the collection.</returns>\r\n\t\t\tpublic bool MoveNext()\r\n\t\t\t{\r\n\t\t\t\tif (!firstElement)\r\n\t\t\t\t{\r\n\t\t\t\t\t// call Iterator::next\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\titerator.InvokeMethod(itetatorNext, null, context);\r\n\t\t\t\t}\r\n\t\t\t\telse firstElement = false;\r\n\r\n\t\t\t\t// call Iterator::valid\r\n\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\treturn !PhpVariable.IsEmpty(iterator.InvokeMethod(iteratorValid, null, context));\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ordered hashtable containing fields added at runtime (so called RT fields).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This field is initialized in a lazy manner. It is <B>null</B> until the first RT field is created.\r\n\t\t/// </remarks>\r\n\t\tpublic PhpArray RuntimeFields;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> iff this instance has already been disposed off.\r\n\t\t/// </summary>\r\n\t\tinternal bool IsDisposed { get { return (disposed != 0); } }\r\n\r\n\t\t[NonSerialized]\r\n\t\tprotected int disposed;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> iff this instance can be finalized.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If a derived class practices resurrection, this property must be overriden in order to\r\n\t\t/// prevent this class's finalizer from calling <c>__destruct</c>\r\n\t\t/// </remarks>\r\n\t\tprotected virtual bool ReadyForDisposal { get { return true; } }\r\n\r\n\t\tpublic DTypeDesc/*!*/ TypeDesc\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (typeDesc == null) typeDesc = DTypeDesc.Create(RealObject.GetType());\r\n\t\t\t\treturn typeDesc;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Real <see cref=\"Type\"/> of the object.\r\n        /// </summary>\r\n        public Type/*!*/RealType { get { return TypeDesc.RealType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Caches the type desc describing this instance's type.\r\n\t\t/// </summary>\r\n\t\t[NonSerialized]\r\n\t\tprotected DTypeDesc typeDesc;\r\n\r\n        /// <summary>\r\n        /// The real CLR object contained by the DObject.\r\n        /// </summary>\r\n\t\tpublic abstract object/*!*/ RealObject { get; }\r\n\r\n        /// <summary>\r\n        /// The instance passed to method and property invocation.\r\n        /// </summary>\r\n        public abstract object/*!*/ InstanceObject { get; }\r\n\r\n\t\tpublic string TypeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn TypeDesc.MakeFullName();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name of this type. Default result of to-string conversion.\r\n\t\t/// </summary>\r\n\t\tpublic const string PhpTypeName = \"object\";\r\n\r\n        /// <summary>\r\n        /// Used by print_r.\r\n        /// </summary>\r\n        public const string PrintablePhpTypeName = \"Object\";\r\n\r\n\t\t#region PHP-specific Object Flags\r\n\r\n\t\t[NonSerialized]\r\n\t\tprivate ObjectFlags flags;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Marks visited <see cref=\"DObject\"/> instances when printing variable contents or comparing\r\n\t\t/// <see cref=\"DObject\"/>s.\r\n\t\t/// </summary>\r\n\t\tprivate bool visited\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.Visited) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.Visited; else flags &= ~ObjectFlags.Visited; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> means there is <c>__get</c> in current call stack (used to prevent getter recursion).\r\n\t\t/// </summary>\r\n\t\tprivate bool insideGetter\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.InsideGetter) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.InsideGetter; else flags &= ~ObjectFlags.InsideGetter; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> means there is <c>__set</c> in current call stack (used to prevent setter recursion).\r\n\t\t/// </summary>\r\n\t\tprivate bool insideSetter\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.InsideSetter) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.InsideSetter; else flags &= ~ObjectFlags.InsideSetter; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> means there is <c>__call</c> in current call stack (used to prevent caller recursion).\r\n\t\t/// </summary>\r\n\t\tpublic bool insideCaller/*TODO:(MB) change back to private when IDynamicMetaObjectProvider implemented on DObject*/\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.InsideCaller) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.InsideCaller; else flags &= ~ObjectFlags.InsideCaller; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> means there is <c>__unset</c> in current call stack (used to prevent setter recursion).\r\n\t\t/// </summary>\r\n\t\tprivate bool insideUnsetter\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.InsideUnsetter) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.InsideUnsetter; else flags &= ~ObjectFlags.InsideUnsetter; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> means there is <c>__isset</c> in current call stack (used to prevent setter recursion).\r\n\t\t/// </summary>\r\n\t\tprivate bool insideIssetter\r\n\t\t{\r\n\t\t\tget { return (flags & ObjectFlags.InsideIssetter) != 0; }\r\n\t\t\tset { if (value) flags |= ObjectFlags.InsideIssetter; else flags &= ~ObjectFlags.InsideIssetter; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprotected DObject()\r\n\t\t{ }\r\n\r\n\t\tprotected DObject(DTypeDesc/*!*/ typeDesc)\r\n\t\t{\r\n\t\t\tthis.typeDesc = typeDesc;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region InvokeConstructor, InvokeMethod, GetMethodHandle\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes a PHP constructor (<c>__construct</c> or PHP 4 style constructor) of this instance's class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that requests the invocation.\r\n\t\t/// </param>\r\n        [Emitted]\r\n        public void InvokeConstructor(ScriptContext context, DTypeDesc caller)\r\n        {\r\n            // search for __construct and the PHP 4 style constructor - a method with the same name as its declaring class\r\n            PhpStack stack = context.Stack;\r\n\r\n            DRoutineDesc method = null; // constructor candidate\r\n\r\n            bool seen_context = false;\r\n            GetMemberResult get_res = GetMemberResult.NotFound;\r\n\r\n            for (DTypeDesc type_desc = TypeDesc; type_desc != null; type_desc = type_desc.Base as PhpTypeDesc)\r\n            {\r\n                if (type_desc == caller) seen_context = true;\r\n\r\n                method = type_desc.GetMethod(Name.SpecialMethodNames.Construct);\r\n                if (method == null)\r\n                    method = type_desc.GetMethod(new Name(type_desc.MakeSimpleName()));\r\n\r\n                if (method == null)\r\n                    continue;   // try the base class\r\n\r\n                if (method.IsPublic)\r\n                {\r\n                    get_res = GetMemberResult.OK;\r\n                }\r\n                else if (method.IsProtected)\r\n                {\r\n                    if (seen_context || (caller != null && type_desc.IsRelatedTo(caller)))\r\n                        get_res = GetMemberResult.OK;\r\n                    else\r\n                        get_res = GetMemberResult.BadVisibility;\r\n                }\r\n                else if (method.IsPrivate)\r\n                {\r\n                    if (caller == type_desc)\r\n                        get_res = GetMemberResult.OK;\r\n                    else\r\n                        get_res = GetMemberResult.BadVisibility;\r\n                }\r\n\r\n                // constructor must not be static (this error is reported first on PHP)\r\n                if (method.IsStatic)\r\n                {\r\n                    stack.RemoveFrame();\r\n\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"constructor_cannot_be_static\", method.DeclaringType.MakeFullName(), method.MakeFullName()));\r\n                    return;\r\n                }\r\n\r\n                // check the visibility flag\r\n                if (get_res == GetMemberResult.BadVisibility)\r\n                {\r\n                    stack.RemoveFrame();\r\n\r\n                    ThrowMethodVisibilityError(method, caller);\r\n                    return;\r\n                }\r\n\r\n                // ok\r\n                method.Invoke(this, stack, caller);\r\n                return;\r\n            }\r\n\r\n            // no 'constructor' method was found\r\n            stack.RemoveFrame();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes a method (both instance and static) on this object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the method to invoke.</param>\r\n\t\t/// <param name=\"caller\">The <see cref=\"Type\"/> of the object that request the invocation or <B>null</B>\r\n\t\t/// if it should be determined lazily.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <returns>The return value of the method (might be a <see cref=\"PhpReference\"/>).</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Arguments are expected on the current <see cref=\"PHP.Core.ScriptContext.Stack\"/>.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic object InvokeMethod(string name, DTypeDesc caller, ScriptContext context)\r\n\t\t{\r\n\t\t\t// obtain the appropriate method table\r\n\t\t\tstring caller_arg = null;\r\n\t\t\tDTypeDesc type_desc = TypeDesc;\r\n\r\n\t\t\t// perform method lookup\r\n\t\t\tDRoutineDesc method;\r\n\t\t\tGetMemberResult result = type_desc.GetMethod(new Name(name), caller, out method);\r\n\r\n\t\t\tPhpStack stack = context.Stack;\r\n\r\n\t\t\tif (result == GetMemberResult.NotFound)\r\n\t\t\t{\r\n\t\t\t\t// if not found, perform __call 'magic' method lookup, but not if we are already inside a __call\r\n\t\t\t\tif (insideCaller ||\r\n\t\t\t\t\t(result = type_desc.GetMethod(Name.SpecialMethodNames.Call, caller, out method)) ==\r\n\t\t\t\t\tGetMemberResult.NotFound)\r\n\t\t\t\t{\r\n\t\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\t\tPhpException.UndefinedMethodCalled(TypeName, name);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcaller_arg = name;\r\n\t\t\t}\r\n\r\n\t\t\t// throw an error if the method was found but the caller is not allowed to call it due to its visibility\r\n\t\t\tif (result == GetMemberResult.BadVisibility)\r\n\t\t\t{\r\n\t\t\t\tstack.RemoveFrame();\r\n\t\t\t\tThrowMethodVisibilityError(method, caller);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (caller_arg != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray args = stack.CollectFrame();\r\n\r\n\t\t\t\t// original parameters are passed to __call in an array as the second parameter\r\n\t\t\t\tstack.AddFrame(caller_arg, args);\r\n\t\t\t\tobject ret_val = null;\r\n\r\n\t\t\t\tinsideCaller = true;\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tret_val = method.Invoke(this, stack, caller);\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tinsideCaller = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn ret_val;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// we are invoking the method\r\n\t\t\t\treturn method.Invoke(this, stack, caller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a handle to this object's method or <B>null</B> if an error (not found or bad visibility) occurs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the method.</param>\r\n\t\t/// <param name=\"caller\">The <see cref=\"Type\"/> of the object that request the operation or <B>null</B>\r\n\t\t/// if it should be determined lazily.</param>\r\n\t\t/// <param name=\"quiet\">If <B>true</B>, no errors should be thrown.</param>\r\n\t\t/// <param name=\"isCallerMethod\">Receives <B>true</B> if the returned <see cref=\"DRoutineDesc\"/> represents\r\n\t\t/// the <c>__call</c> method, <B>false</B> otherwise.</param>\r\n\t\t/// <returns>The handle or <B>null</B>.</returns>\r\n\t\tpublic DRoutineDesc GetMethodDesc(string name, DTypeDesc caller, bool quiet, out bool isCallerMethod)\r\n\t\t{\r\n\t\t\tisCallerMethod = false;\r\n\t\t\tDTypeDesc type_desc = TypeDesc;\r\n\r\n\t\t\t// perform method lookup\r\n\t\t\tDRoutineDesc method;\r\n\t\t\tGetMemberResult result = type_desc.GetMethod(new Name(name), caller, out method);\r\n\r\n\t\t\tif (result == GetMemberResult.NotFound)\r\n\t\t\t{\r\n\t\t\t\t// if not found, perform __call 'magic' method lookup\r\n\t\t\t\tif ((result = type_desc.GetMethod(Name.SpecialMethodNames.Call, caller, out method)) ==\r\n\t\t\t\t\tGetMemberResult.NotFound)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!quiet) PhpException.UndefinedMethodCalled(TypeName, name);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tisCallerMethod = true;\r\n\t\t\t}\r\n\r\n\t\t\t// throw an error if the method was found but the caller is not allowed to call it due to its visibility\r\n\t\t\tif (result == GetMemberResult.BadVisibility)\r\n\t\t\t{\r\n\t\t\t\tif (!quiet) ThrowMethodVisibilityError(method, caller);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn method;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PropertyReadHandler, PropertyWriteHandler, PropertyUnsetHandler, PropertyIssetHandler\r\n\r\n\t\tprivate object InvokeSpecialMethod(Name methodName, ObjectFlags recursionFlag, DTypeDesc caller,\r\n\t\t\tout bool found, params object[] args)\r\n\t\t{\r\n\t\t\t// perform the 'magic' method lookup, but not if we are already inside it\r\n\t\t\tDRoutineDesc method;\r\n\t\t\tGetMemberResult result;\r\n\r\n\t\t\tif ((flags & recursionFlag) == recursionFlag ||\r\n\t\t\t\t(result = TypeDesc.GetMethod(methodName, caller, out method)) == GetMemberResult.NotFound)\r\n\t\t\t{\r\n\t\t\t\tfound = false;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfound = true;\r\n\r\n\t\t\t// throw an error if the method was found but the caller is not allowed to call it due to its visibility\r\n\t\t\tif (result == GetMemberResult.BadVisibility)\r\n\t\t\t{\r\n\t\t\t\tThrowMethodVisibilityError(method, caller);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\t\t\tstack.AddFrame(args);\r\n\r\n\t\t\t// invoke the getter\r\n\t\t\tflags |= recursionFlag;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\treturn method.Invoke(this, stack, caller);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tflags &= ~recursionFlag;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when an unknown property is read.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Override in order to get custom property reading behavior.</remarks>\r\n\t\tprotected virtual object PropertyReadHandler(string name, DTypeDesc caller, out bool handled)\r\n\t\t{\r\n\t\t\treturn InvokeSpecialMethod(Name.SpecialMethodNames.Get, ObjectFlags.InsideGetter, caller, out handled, name);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when an unknown property is written (<paramref name=\"name\"/> can be a <see cref=\"RuntimeChainElement\"/>).\r\n\t\t/// </summary>\r\n\t\tprotected virtual bool PropertyWriteHandler(object name, object value, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tbool handled;\r\n\t\t\tInvokeSpecialMethod(Name.SpecialMethodNames.Set, ObjectFlags.InsideSetter, caller, out handled, name, value);\r\n\r\n\t\t\treturn handled;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when an unknown property is unset.\r\n\t\t/// </summary>\r\n\t\tprotected virtual bool PropertyUnsetHandler(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tbool handled;\r\n\t\t\tInvokeSpecialMethod(Name.SpecialMethodNames.Unset, ObjectFlags.InsideUnsetter, caller, out handled, name);\r\n\r\n\t\t\treturn handled;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when an unknown property is tested for being set.\r\n\t\t/// </summary>\r\n\t\tpublic virtual object PropertyIssetHandler(string name, DTypeDesc caller, out bool handled)\r\n\t\t{\r\n            return InvokeSpecialMethod(Name.SpecialMethodNames.Isset, ObjectFlags.InsideIssetter, caller, out handled, name);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetProperty, GetPropertyRef, GetRuntimeField, InvokeGetterRef\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of an instance property (both CT and RT).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the retrieval.</param>\r\n\t\t/// <returns>The property value.</returns>\r\n\t\tpublic object GetProperty(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn GetProperty(name, caller, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of an instance property (both CT and RT).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the retrieval.</param>\r\n\t\t/// <param name=\"issetSemantics\">If <B>true</B>, the operation should have the <c>isset</c> semantics - \r\n\t\t/// it should try to call <c>__isset</c> instead of <c>__get</c> and throw any exceptions when the property\r\n\t\t/// is not found.</param>\r\n\t\t/// <returns>The property value.</returns>\r\n\t\tpublic object GetProperty(string name, DTypeDesc caller, bool issetSemantics)\r\n\t\t{\r\n\t\t\t// perform property lookup\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tGetMemberResult result = TypeDesc.GetInstanceProperty(new VariableName(name), caller, out property);\r\n\r\n\t\t\tswitch (result)\r\n\t\t\t{\r\n\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t{\r\n\t\t\t\t\tobject value = property.Get(this);\r\n\t\t\t\t\tPhpReference reference = value as PhpReference;\r\n\r\n\t\t\t\t\tif (reference != null && !reference.IsSet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// the property is CT but has been unset\r\n\t\t\t\t\t\tif (issetSemantics)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool handled;\r\n\t\t\t\t\t\t\treturn PropertyIssetHandler(name, caller, out handled);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse return GetRuntimeField(name, caller);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.NotFound:\r\n\t\t\t\t{\r\n\t\t\t\t\tif (issetSemantics)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar namekey = new IntStringKey(name);\r\n                        object value;\r\n\t\t\t\t\t\tif (RuntimeFields != null && RuntimeFields.TryGetValue(namekey, out value))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool handled;\r\n\t\t\t\t\t\t\treturn PropertyIssetHandler(name, caller, out handled);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return GetRuntimeField(name, caller);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t{\r\n\t\t\t\t\t// throw an error if the property was found but the caller is not allowed to access it due to its visibility\r\n\t\t\t\t\tThrowPropertyVisibilityError(name, property, caller);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of an instance property (both CT and RT) as a <see cref=\"PhpReference\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the retrieval.</param>\r\n\t\t/// <returns>The property value (never <B>null</B>).</returns>\r\n\t\tpublic PhpReference/*!*/ GetPropertyRef(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tPhpReference reference;\r\n\t\t\tobject value;\r\n\t\t\tbool getter_exists;\r\n\r\n\t\t\t// search in CT fields\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tGetMemberResult result = TypeDesc.GetInstanceProperty(new VariableName(name), caller, out property);\r\n\r\n\t\t\tif (result == GetMemberResult.BadVisibility)\r\n\t\t\t{\r\n\t\t\t\tThrowPropertyVisibilityError(name, property, caller);\r\n\t\t\t\treturn new PhpReference();\r\n\t\t\t}\r\n\r\n\t\t\t// if the CT property a PhpReference?\r\n\t\t\tif (result == GetMemberResult.OK)\r\n\t\t\t{\r\n\t\t\t\tvalue = property.Get(this);\r\n\t\t\t\treference = value as PhpReference;\r\n\r\n\t\t\t\tif (reference != null && reference.IsSet)\r\n\t\t\t\t{\r\n\t\t\t\t\treference.IsAliased = true;\r\n\t\t\t\t\treturn reference;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the CT property has been unset -> try to invoke __get\r\n\t\t\t\tPhpReference get_ref = InvokeGetterRef(name, caller, out getter_exists);\r\n\t\t\t\tif (getter_exists) return (get_ref == null ? new PhpReference() : get_ref);\r\n\r\n\t\t\t\tif (reference == null)\r\n\t\t\t\t{\r\n\t\t\t\t\treference = new PhpReference(value);\r\n\t\t\t\t\tproperty.Set(this, reference);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treference.IsAliased = true;\r\n\t\t\t\t\treference.IsSet = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn reference;\r\n\t\t\t}\r\n\r\n\t\t\t// search in RT fields\r\n\r\n\t\t\tif (RuntimeFields != null && RuntimeFields.ContainsKey(name))\r\n            {\r\n                var namekey = new IntStringKey(name);\r\n                return RuntimeFields.table._ensure_item_ref(ref namekey, RuntimeFields);\r\n            }\r\n\r\n\t\t\t// property is not present -> try to invoke __get\r\n\t\t\treference = InvokeGetterRef(name, caller, out getter_exists);\r\n\t\t\tif (getter_exists) return (reference == null) ? new PhpReference() : reference;\r\n\r\n\t\t\t// (no notice/warning/error thrown by PHP)\r\n\r\n\t\t\t// add the field\r\n\t\t\treference = new PhpReference();\r\n            if (RuntimeFields == null) RuntimeFields = new PhpArray();\r\n\t\t\tRuntimeFields[name] = reference;\r\n\r\n\t\t\treturn reference;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of an instance field when CT property lookup has failed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The field name.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the retrieval.</param>\r\n\t\t/// <returns>The field value.</returns>\r\n\t\t/// <remarks>This is merely a helper method called from <see cref=\"GetProperty\"/>.</remarks>\r\n\t\tpublic object GetRuntimeField(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tobject value;\r\n            var namekey = new IntStringKey(name);\r\n            if (RuntimeFields == null || !RuntimeFields.table.TryGetValue(namekey, out value))\r\n            {\r\n                // invoke __get\r\n                bool handled;\r\n                value = PropertyReadHandler(name, caller, out handled);\r\n\r\n                if (!handled)\r\n                {\r\n                    PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"undefined_property_accessed\",\r\n                        TypeName, name));\r\n                    return null;\r\n                }\r\n            }\r\n            \r\n            return value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes the <c>__get</c> handler of this instance and returns a reference.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the property whose value is requested.</param>\r\n\t\t/// <param name=\"caller\">The class context, in which the operation should be performed.</param>\r\n\t\t/// <param name=\"getterExists\">When this method returns, contains <B>true</B> if the getter exists and\r\n\t\t/// an attempt was made to invoke it, and <B>false</B> if this instance does not define the getter.</param>\r\n\t\t/// <returns>A reference representing the value returned by getter or <B>null</B> if an error occured or\r\n\t\t/// this instance does not have the overloaded field getter (<c>__get</c>).</returns>\r\n\t\t/// <remarks>This method is called by <c>*Ref</c> operators to retrieve a reference to a field\r\n\t\t/// when the instance has an overloaded field getter.</remarks>\r\n\t\tinternal PhpReference InvokeGetterRef(string name, DTypeDesc caller, out bool getterExists)\r\n\t\t{\r\n\t\t\tobject ret_val = PropertyReadHandler(name, caller, out getterExists);\r\n\t\t\tif (getterExists)\r\n\t\t\t{\r\n\t\t\t\tPhpReference reference = ret_val as PhpReference;\r\n\t\t\t\treturn (reference != null ? reference : new PhpSmartReference(ret_val));\r\n\t\t\t}\r\n\t\t\telse return null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SetProperty, SetPropertyDirect, SetRuntimeField, InvokeSetter\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of an instance property (both CT and RT).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"value\">The new property value.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the operation.</param>\r\n\t\tpublic void SetProperty(string name, object value, DTypeDesc caller)\r\n\t\t{\r\n\t\t\t// perform field lookup\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tGetMemberResult result = TypeDesc.GetInstanceProperty(new VariableName(name), caller, out property);\r\n\r\n\t\t\tPhpReference reference = null;\r\n\t\t\tswitch (result)\r\n\t\t\t{\r\n\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((reference = property.Set(this, value)) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// the property is CT but has been unset\r\n\t\t\t\t\t\tgoto case GetMemberResult.NotFound;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.NotFound:\r\n\t\t\t\t{\r\n\t\t\t\t\tSetRuntimeField(name, value, property, reference, caller);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t{\r\n\t\t\t\t\t// throw an error if the field was found but the caller is not allowed to access it due to its visibility\r\n\t\t\t\t\tThrowPropertyVisibilityError(name, property, caller);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of an instance property (both CT and RT) without visibility checks and without attempting\r\n\t\t/// to invoke <c>__set</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"value\">The new property value.</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method is useful for deserialization and marshaling purposes.\r\n\t\t/// </remarks>\r\n\t\tpublic void SetPropertyDirect(object name, object value)\r\n\t\t{\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tstring name_str = Convert.ObjectToString(name);\r\n\r\n\t\t\t// check whether it is a CT property\r\n\t\t\tif (TypeDesc.GetInstanceProperty(new VariableName(name_str), TypeDesc, out property)\r\n\t\t\t\t!= GetMemberResult.OK)\r\n\t\t\t{\r\n\t\t\t\t// no, it is an RT field\r\n                if (RuntimeFields == null) RuntimeFields = new PhpArray();\r\n\t\t\t\tRuntimeFields[name_str] = value;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// yes, it is a CT property\r\n\t\t\tPhpReference reference = value as PhpReference;\r\n\t\t\tif (reference != null)\r\n\t\t\t{\r\n\t\t\t\tproperty.Set(this, reference);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobject old_value = property.Get(this);\r\n\r\n\t\t\t\tif (reference != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treference.Value = value;\r\n\t\t\t\t\treference.IsSet = true;\r\n\t\t\t\t}\r\n\t\t\t\telse property.Set(this, new PhpSmartReference(value));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of an instance field when CT property lookup has failed.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The field name.</param>\r\n\t\t/// <param name=\"value\">The new field value.</param>\r\n\t\t/// <param name=\"ctCandidate\">CT property candidate (may be <B>null</B>).</param>\r\n\t\t/// <param name=\"ctCandidateValue\">CT property candidate value (is <B>null</B> iff <paramref name=\"ctCandidate\"/>\r\n\t\t/// is <B>null</B>).</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the retrieval.</param>\r\n\t\t/// <remarks>This is merely a helper method called from <see cref=\"SetProperty\"/>.</remarks>\r\n\t\tinternal void SetRuntimeField(string name, object value, DPropertyDesc ctCandidate, PhpReference ctCandidateValue,\r\n\t\t\tDTypeDesc caller)\r\n\t\t{\r\n\t\t\tPhpReference reference = value as PhpReference;\r\n\r\n            object elementvalue;\r\n            if (RuntimeFields == null || !RuntimeFields.TryGetValue(name, out elementvalue))\r\n\t\t\t{\r\n\t\t\t\tif (reference != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// here comes the controversial part - let's mimic PHP and make it clear with the Zend guys\r\n\t\t\t\t\tbool getter_exists;\r\n\t\t\t\t\tPhpReference get_ref = InvokeGetterRef(name, caller, out getter_exists);\r\n\r\n\t\t\t\t\tif (getter_exists)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (get_ref != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tget_ref.Value = reference.value;\r\n\t\t\t\t\t\t\tget_ref.IsSet = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!PropertyWriteHandler(name, value, caller))\r\n\t\t\t\t{\r\n\t\t\t\t\t// not handled -> revive a CT property or add a runtime field\r\n\t\t\t\t\tif (ctCandidate != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tctCandidateValue.IsSet = true;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (reference != null) ctCandidate.Set(this, reference);\r\n\t\t\t\t\t\telse ctCandidateValue.Value = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n                        if (RuntimeFields == null) RuntimeFields = new PhpArray();\r\n\t\t\t\t\t\tRuntimeFields[name] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// if the new value is a PhpReference, it is always directly written to the RuntimeFields table\r\n\t\t\t\tif (reference != null) RuntimeFields[name] = reference;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// if the new value is not a PhpReference, check has to be made whether the original field value\r\n\t\t\t\t\t// was a PhpReference\r\n                    reference = elementvalue as PhpReference;\r\n\t\t\t\t\tif (reference != null) reference.Value = value;\r\n                    else RuntimeFields[name] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invokes the <c>__set</c> handler of this instance with a &quot;setter chain&quot;.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"chain\">A linked list of <see cref=\"RuntimeChainElement\"/>s that should be passed\r\n\t\t/// to the setter.</param>\r\n\t\t/// <param name=\"value\">A value that should be assigned to the last chain element.</param>\r\n\t\t/// <returns><B>true</B> if the setter was successfully called, <B>false</B> otherwise.</returns>\r\n\t\t/// <remarks>This method is intended for system classes, especially for classes in managed wrappers.</remarks>\r\n\t\tinternal bool InvokeSetter(RuntimeChainElement chain, object value)\r\n\t\t{\r\n\t\t\treturn PropertyWriteHandler(chain, value, TypeDesc);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region UnsetProperty\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unsets an instance property (both CT and RT).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The property name.</param>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the operation.</param>\r\n\t\tpublic void UnsetProperty(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\t// search in CT properties\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tGetMemberResult get_res = TypeDesc.GetInstanceProperty(new VariableName(name), caller, out property);\r\n\r\n\t\t\tif (get_res == GetMemberResult.BadVisibility)\r\n\t\t\t{\r\n\t\t\t\tThrowPropertyVisibilityError(name, property, caller);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// was a CT property found?\r\n\t\t\tif (get_res == GetMemberResult.OK)\r\n\t\t\t{\r\n\t\t\t\t// set the new reference's IsSet property to false\r\n\t\t\t\tPhpSmartReference new_ref = new PhpSmartReference();\r\n\t\t\t\tnew_ref.IsSet = false;\r\n\t\t\t\tproperty.Set(this, new_ref);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// search in RT fields\r\n\t\t\t\tif (RuntimeFields == null || !RuntimeFields.table.Remove(new IntStringKey(name)))\r\n\t\t\t\t{\r\n\t\t\t\t\t// invoke the unset handler (will call the __unset special method)\r\n\t\t\t\t\tPropertyUnsetHandler(name, caller);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region CloneObject\r\n\r\n\t\tprotected virtual DObject CloneObjectInternal(DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tDTypeDesc type_desc = TypeDesc;\r\n\r\n\t\t\tDObject copy = (DObject)type_desc.New(context);\r\n\r\n\t\t\t// copy CT properties\r\n\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in type_desc.EnumerateProperties())\r\n\t\t\t{\r\n\t\t\t\tif (pair.Value.IsStatic) continue;\r\n\t\t\t\tobject value = pair.Value.Get(this);\r\n\r\n\t\t\t\tif (deepCopyFields) value = PhpVariable.DeepCopy(value);\r\n\t\t\t\telse value = PhpVariable.Copy(value, CopyReason.Assigned);\r\n\r\n\t\t\t\tpair.Value.Set(copy, value);\r\n\t\t\t}\r\n\r\n\t\t\t// copy RT fields\r\n\t\t\tif (RuntimeFields != null)\r\n\t\t\t{\r\n                copy.RuntimeFields = new PhpArray(RuntimeFields.Count);\r\n                using (var fields = RuntimeFields.GetFastEnumerator())\r\n                    while (fields.MoveNext())\r\n\t\t\t\t    {\r\n\t\t\t\t\t    copy.RuntimeFields.Add(fields.CurrentKey,\r\n                            deepCopyFields ?\r\n\t\t\t\t\t\t        PhpVariable.DeepCopy(fields.CurrentValue) :\r\n                                PhpVariable.Copy(fields.CurrentValue, CopyReason.Assigned));\r\n\t\t\t\t    }\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a clone of this instance, which is either a deep copy or a <c>clone</c>-style\r\n\t\t/// copy according to the <paramref name=\"deepCopyFields\"/> parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"caller\">Class context of the code that requests the lookup.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"deepCopyFields\">If <B>true</B>, fields will be deep-copied, if <B>false</B>,\r\n\t\t/// fields will be copied by assignment.</param>\r\n\t\t/// <returns>The clone.</returns>\r\n\t\tpublic object CloneObject(DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tDObject copy;\r\n\r\n\t\t\tICloneable cloneable = RealObject as ICloneable;\r\n\t\t\tif (cloneable != null)\r\n\t\t\t{\r\n\t\t\t\t// use real object's Clone if available\r\n\t\t\t\tcopy = ClrObject.WrapDynamic(cloneable.Clone()) as DObject;\r\n\t\t\t}\r\n\t\t\telse copy = CloneObjectInternal(caller, context, deepCopyFields);\r\n\r\n\t\t\tif (copy != null)\r\n\t\t\t{\r\n\t\t\t\t// try to invoke __clone on the copy\r\n\t\t\t\tDRoutineDesc method;\r\n                switch (copy.TypeDesc.GetMethod(Name.SpecialMethodNames.Clone, caller, out method))\r\n\t\t\t\t{\r\n\t\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tThrowMethodVisibilityError(method, caller);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// __clone must not be static\r\n\t\t\t\t\t\tif (method.IsStatic)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"clone_cannot_be_static\",\r\n\t\t\t\t\t\t\t\tmethod.DeclaringType.MakeFullName()));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmethod.Invoke(copy, context.Stack, caller);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if not found, nothing happens\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ThrowMethodVisibilityError, ThrowPropertyVisibilityError\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws a 'Protected method called' or 'Private method called' <see cref=\"PhpException\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The <see cref=\"DRoutineDesc\"/>.</param>\r\n\t\t/// <param name=\"caller\">The caller that was passed to method lookup or <B>null</B>\r\n\t\t/// if it should be determined by this method (by tracing the stack.</param>\r\n\t\t/// <remarks>\r\n\t\t/// This method is intended to be called after <see cref=\"DTypeDesc.GetMethod\"/> has returned\r\n\t\t/// <see cref=\"GetMemberResult.BadVisibility\"/> while performing a method lookup.\r\n\t\t/// </remarks>\r\n\t\tinternal static void ThrowMethodVisibilityError(DRoutineDesc method, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tif (method.IsProtected)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"protected_method_called\",\r\n\t\t\t\t\tmethod.DeclaringType.MakeFullName(),\r\n\t\t\t\t\tmethod.MakeFullName(),\r\n\t\t\t\t\t(caller == null ? String.Empty : caller.MakeFullName())));\r\n\t\t\t}\r\n\t\t\telse if (method.IsPrivate)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"private_method_called\",\r\n\t\t\t\t\tmethod.DeclaringType.MakeFullName(),\r\n\t\t\t\t\tmethod.MakeFullName(),\r\n\t\t\t\t\t(caller == null ? String.Empty : caller.MakeFullName())));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws a 'Cannot access protected property' or 'Cannot access private property' <see cref=\"PhpException\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the field.</param>\r\n\t\t/// <param name=\"property\">The <see cref=\"DPropertyDesc\"/>.</param>\r\n\t\t/// <param name=\"caller\">The caller.</param>\r\n\t\tinternal static void ThrowPropertyVisibilityError(string/*!*/ name, DPropertyDesc/*!*/ property, DTypeDesc/*!*/ caller)\r\n\t\t{\r\n\t\t\tPhpException.PropertyNotAccessible(\r\n\t\t\t\tproperty.DeclaringType.MakeFullName(),\r\n\t\t\t\tname.ToString(),\r\n\t\t\t\t(caller == null ? String.Empty : caller.MakeFullName()),\r\n\t\t\t\tproperty.IsProtected);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Sleep, Wakeup\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to invoke <c>__wakeup</c> on this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"caller\"><see cref=\"Type\"/> of the object that requests the invocation or <B>null</B> if\r\n\t\t/// it should be determined lazily.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Wakeup(DTypeDesc caller, ScriptContext context)\r\n\t\t{\r\n\t\t\tDRoutineDesc method;\r\n            switch (TypeDesc.GetMethod(Name.SpecialMethodNames.Wakeup, caller, out method))\r\n\t\t\t{\r\n\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t{\r\n\t\t\t\t\tThrowMethodVisibilityError(method, caller);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t{\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\tmethod.Invoke(this, context.Stack, caller);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to invoke <c>__sleep</c> on this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"caller\"><see cref=\"Type\"/> of the object that requests the invocation or <B>null</B> if\r\n\t\t/// it should be determined lazily.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"sleepCalled\">Receives <B>true</B> if <c>__sleep</c> was called, <B>false</B> otherwise.</param>\r\n\t\t/// <returns>The <c>__sleep</c> result (an array containing names of fields that should be preserved) or\r\n\t\t/// <B>null</B> if <c>__sleep</c> was not callable or did not return an array.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// There are three possible results of this method. If <paramref name=\"sleepCalled\"/> is <B>false</B>,\r\n\t\t/// then <c>__sleep</c> was not called because it was not found or invisible for the <paramref name=\"caller\"/>.\r\n\t\t/// Otherwise, the return value is valid and can be either <B>null</B> (<c>__sleep</c> did not return\r\n\t\t/// an array) or a <see cref=\"PhpArray\"/> (<c>__sleep</c> returned an array).\r\n\t\t/// </remarks>\r\n\t\tpublic PhpArray Sleep(DTypeDesc caller, ScriptContext context, out bool sleepCalled)\r\n\t\t{\r\n\t\t\tsleepCalled = false;\r\n\t\t\tPhpArray sleep_result = null;\r\n\r\n\t\t\tDRoutineDesc method;\r\n            switch (TypeDesc.GetMethod(Name.SpecialMethodNames.Sleep, caller, out method))\r\n\t\t\t{\r\n\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t{\r\n\t\t\t\t\tThrowMethodVisibilityError(method, caller);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t{\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\tsleep_result = PhpVariable.Dereference(method.Invoke(this, context.Stack, caller)) as PhpArray;\r\n\t\t\t\t\tsleepCalled = true;\r\n\t\t\t\t\tif (sleep_result == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Notice, CoreResources.GetString(\"sleep_must_return_array\"));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn sleep_result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpComparable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj)\"]/*'/>\r\n\t\tpublic int CompareTo(object obj)\r\n\t\t{\r\n\t\t\treturn CompareTo(obj, PhpComparer.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares this instance with an object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"CompareTo(obj,comparer)\"]/*'/>\r\n\t\t/// </remarks>\r\n\t\tpublic virtual int CompareTo(object obj, IComparer/*!*/ comparer)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null);\r\n\r\n\t\t\tDObject php_obj;\r\n\r\n\t\t\tif (obj == null) return 1;                      // 1 > null\r\n            if (obj is bool) return ((bool)obj ? 0 : 1);    // 1 == true, 1 > false\r\n\r\n\t\t\tif ((php_obj = obj as DObject) != null)\r\n\t\t\t{\r\n\t\t\t\tbool incomparable;\r\n\t\t\t\tint result = CompareObjects(this, php_obj, comparer, out incomparable);\r\n\t\t\t\tif (incomparable)\r\n\t\t\t\t{\r\n\t\t\t\t\t//PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"incomparable_objects_compared\"));\r\n                    throw new ArgumentException();  // according to the IComparable remarks\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compares two instances of <see cref=\"PhpObject\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"comparer\">The comparer.</param>\r\n\t\t/// <param name=\"incomparable\">Whether objects are incomparable (no difference is found before both objects enter\r\n\t\t/// an infinite recursion). Returns zero then.</param>\r\n\t\t/// <include file='Doc/Common.xml' path='docs/method[@name=\"Compare(x,y)\"]/*'/>\r\n\t\tprivate static int CompareObjects(DObject x, DObject y, IComparer comparer, out bool incomparable)\r\n\t\t{\r\n\t\t\tDebug.Assert(x != null && y != null);\r\n\r\n\t\t\tincomparable = false;\r\n\r\n\t\t\t// check for same instance\r\n\t\t\tif (ReferenceEquals(x, y)) return 0;\r\n\r\n\t\t\t// check for different number of fields\r\n\t\t\tint result = x.Count - y.Count;\r\n\t\t\tif (result != 0) return result;\r\n\r\n\t\t\t// check for different types\r\n\t\t\tDTypeDesc type_x = x.TypeDesc;\r\n\t\t\tDTypeDesc type_y = y.TypeDesc;\r\n\t\t\tif (type_x != type_y)\r\n\t\t\t{\r\n\t\t\t\tif (type_x.IsSubclassOf(type_y)) return -1;\r\n\t\t\t\tif (type_y.IsSubclassOf(type_x)) return 1;\r\n\r\n\t\t\t\tincomparable = true;\r\n\t\t\t\treturn 1; // they really are 'incomparable' so what to return?\r\n\t\t\t}\r\n\r\n\t\t\t// marks objects as visited (will be always restored to false before return)\r\n\t\t\tx.visited = true;\r\n\t\t\ty.visited = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// compare CT properties\r\n\t\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in type_x.EnumerateProperties())\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pair.Value.IsStatic) continue;\r\n\r\n\t\t\t\t\tresult = CompareObjectsCore(\r\n\t\t\t\t\t\tPhpVariable.Dereference(pair.Value.Get(x)),\r\n\t\t\t\t\t\tPhpVariable.Dereference(pair.Value.Get(y)),\r\n\t\t\t\t\t\tcomparer,\r\n\t\t\t\t\t\tout incomparable);\r\n\r\n\t\t\t\t\tif (incomparable || result != 0) return result;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// compare RT fields\r\n\t\t\t\tif (x.RuntimeFields != null && y.RuntimeFields != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar enum_x = x.RuntimeFields.GetFastEnumerator();\r\n\t\t\t\t\tvar enum_y = y.RuntimeFields.GetFastEnumerator();\r\n\r\n\t\t\t\t\twhile (enum_x.MoveNext())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tenum_y.MoveNext();\r\n\r\n\t\t\t\t\t\t// compare keys\r\n\t\t\t\t\t\tresult = PhpArrayKeysComparer.Default.Compare(enum_x.CurrentKey, enum_y.CurrentKey);\r\n\t\t\t\t\t\tif (result != 0) return result;\r\n\r\n\t\t\t\t\t\t// compare values\r\n\t\t\t\t\t\tresult = CompareObjectsCore(\r\n\t\t\t\t\t\t\tPhpVariable.Dereference(enum_x.CurrentValue),\r\n\t\t\t\t\t\t\tPhpVariable.Dereference(enum_y.CurrentValue),\r\n\t\t\t\t\t\t\tcomparer,\r\n\t\t\t\t\t\t\tout incomparable);\r\n\r\n\t\t\t\t\t\tif (incomparable || result != 0) return result;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tx.visited = false;\r\n\t\t\t\ty.visited = false;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tprivate static int CompareObjectsCore(object propValue_x, object propValue_y, IComparer/*!*/ comparer,\r\n\t\t\tout bool incomparable)\r\n\t\t{\r\n\t\t\tDebug.Assert(comparer != null);\r\n\r\n\t\t\tincomparable = false;\r\n\t\t\tDObject object_x, object_y;\r\n\r\n\t\t\t// compare values\r\n\t\t\tif ((object_x = propValue_x as DObject) != null)\r\n\t\t\t{\r\n\t\t\t\tif ((object_y = propValue_y as DObject) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// at least one child has not been visited yet => continue with recursion:\r\n\t\t\t\t\tif (!object_x.visited || !object_y.visited)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn CompareObjects(object_x, object_y, comparer, out incomparable);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse return 0;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// compare the array with a non-object\r\n                    return object_x.CompareTo(propValue_y, comparer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// compares unknown item with a non-object\r\n                return -comparer.Compare(propValue_y, propValue_x);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpConvertible Members, ToString, ToPhpArray\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns Phalanger type code.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The type code.</returns>\r\n\t\tpublic PhpTypeCode GetTypeCode()\r\n\t\t{\r\n\t\t\treturn PhpTypeCode.DObject;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"int\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The result is <c>1</c> if there is at least one field in this instance, <c>0</c> otherwise.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual int ToInteger()\r\n\t\t{\r\n            PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"object_could_not_be_converted\", TypeName, PhpVariable.TypeNameInt));\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"long\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The result is <c>1</c> if there is at least one field in this instance, <c>0</c> otherwise.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual long ToLongInteger()\r\n\t\t{\r\n            PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"object_could_not_be_converted\", TypeName, PhpVariable.TypeNameInt));\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"double\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The result is <c>1.0</c> if there is at least one field in this instance, <c>0.0</c> otherwise.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual double ToDouble()\r\n\t\t{\r\n            PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"object_could_not_be_converted\", TypeName, PhpVariable.TypeNameDouble));\r\n\t\t\treturn 1.0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"bool\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The result is <B>true</B> if there is at least one field in this instance, <B>false</B> otherwise.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"PhpBytes\"/> representation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If this object contains the <c>__toString</c> method, it is invoked and its result returned.\r\n\t\t/// Otherwise, <see cref=\"Object.ToString\"/> is invoked on the real object.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual PhpBytes ToPhpBytes()\r\n\t\t{\r\n            GetMemberResult lookup_result;\r\n            object result = InvokeToString(out lookup_result);\r\n\r\n            if (lookup_result != GetMemberResult.NotFound)\r\n            {\r\n                // ignoring __toString() visibility as it is in PHP:\r\n                var bytes = PhpVariable.AsBytes(result);\r\n                if (bytes != null)\r\n                    return bytes;\r\n\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"tostring_must_return_string\", TypeName));\r\n            }\r\n\r\n            return new PhpBytes();\r\n\t\t}\r\n\r\n\t\tprivate object InvokeToString(out GetMemberResult lookupResult)\r\n\t\t{\r\n\t\t\tDRoutineDesc method;\r\n            if ((lookupResult = TypeDesc.GetMethod(Name.SpecialMethodNames.Tostring, null/*ignoring visibility*/, out method)) != GetMemberResult.NotFound)\r\n            {\r\n                // ignoring __toString() visibility as it is in PHP:\r\n                PhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\r\n                stack.AddFrame();\r\n                return method.Invoke(this, stack);\r\n            }\r\n\r\n\t\t\t// __toString() not found:\r\n            // \"Object of class %s could not be converted to %s\"\r\n            PhpException.Throw(PhpError.RecoverableError, CoreResources.GetString(\"object_could_not_be_converted\", TypeName, PhpVariable.TypeNameString));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to a number of type <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doubleValue\">Not applicable.</param>\r\n\t\t/// <param name=\"intValue\">This instance converted to integer.</param>\r\n\t\t/// <param name=\"longValue\">Not applicable.</param>\r\n\t\t/// <returns><see cref=\"Convert.NumberInfo.Integer\"/>.</returns>\r\n\t\tpublic virtual Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n\t\t{\r\n\t\t\tintValue = 1;\r\n\t\t\tdoubleValue = 1.0;\r\n\t\t\tlongValue = 1;\r\n            PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"object_could_not_be_converted\", TypeName, PhpVariable.TypeNameInt));\r\n\t\t\treturn Convert.NumberInfo.Integer;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"string\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If this object contains the __toString method, it is invoked and its result returned.\r\n\t\t/// Otherwise, &quot;Object&quot; is returned.\r\n\t\t/// </remarks>\r\n\t\tstring IPhpConvertible.ToString()\r\n\t\t{\r\n            bool b;\r\n            return ((IPhpConvertible)this).ToString(true, out b);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"string\"/> representation according to PHP conversion algorithm.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"throwOnError\">\r\n\t\t/// Should the method throw 'object_to_string_conversion' notice when no conversion method is found?\r\n\t\t/// </param>\r\n\t\t/// <param name=\"success\">Indicates whether conversion was successful.</param>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If this object contains the __toString method, it is invoked and its result returned.\r\n\t\t/// Otherwise, &quot;Object&quot; is returned.\r\n\t\t/// </remarks>\r\n\t\tpublic virtual string ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n            GetMemberResult lookup_result;\r\n            object result = InvokeToString(out lookup_result);\r\n            success = true;\r\n\r\n            if (lookup_result != GetMemberResult.NotFound)\r\n            {\r\n                // ignoring __toString() visibility as it is in PHP:\r\n\r\n                string str = PhpVariable.AsString(result);\r\n                if (str != null)\r\n                    return str;\r\n\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"tostring_must_return_string\", TypeName));\r\n            }\r\n            return string.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts this instance to its <see cref=\"PhpArray\"/> representation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The converted value.</returns>\r\n\t\tpublic virtual PhpArray ToPhpArray()\r\n\t\t{\r\n\t\t\tPhpArray array = new PhpArray();\r\n\r\n\t\t\t// if the real object is CLR enumerable, use it to populate the array\r\n\t\t\tIDictionaryEnumerator enumerator = GetClrEnumerator(false, false);\r\n\t\t\tif (enumerator != null)\r\n\t\t\t{\r\n\t\t\t\twhile (enumerator.MoveNext())\r\n\t\t\t\t{\r\n                    if (enumerator.Key != null)\r\n                        array.Add(enumerator.Key, enumerator.Value);\r\n\t\t\t\t\telse\r\n                        array.Add(enumerator.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// convert CT properties\r\n\t\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties())\r\n\t\t\t\t{\r\n\t\t\t\t\tDPropertyDesc property = pair.Value;\r\n\r\n                    if ((property.MemberAttributes & PhpMemberAttributes.AppStatic) != 0)\r\n                        continue;   // skip static properties\r\n\r\n                    object property_value = property.Get(this);\r\n\t\t\t\t\tPhpReference property_value_ref = property_value as PhpReference;\r\n\r\n                    //\r\n                    // in PHP once aliased reference is copied into new array as the same reference\r\n                    //\r\n\t\t\t\t\tobject item_value;\r\n\t\t\t\t\tif (property_value_ref != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (property_value_ref.IsAliased) item_value = property_value_ref;\r\n\t\t\t\t\t\telse item_value = property_value_ref.Value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse item_value = property_value;\r\n\r\n\t\t\t\t\t// add new array item\r\n\t\t\t\t\tswitch (property.MemberAttributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Public:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarray.Add(pair.Key.ToString(), item_value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Protected:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarray.Add(\" * \" + pair.Key.ToString(), item_value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Private:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarray.Add(String.Format(\" {0} {1}\", property.DeclaringType.MakeFullName(),\r\n\t\t\t\t\t\t\t\tpair.Key.ToString()), item_value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// convert RT fields\r\n\t\t\t\tif (RuntimeFields != null)\r\n\t\t\t\t{\r\n                    using (var fields = RuntimeFields.GetFastEnumerator())\r\n                        while (fields.MoveNext())\r\n                            array[fields.CurrentKey] = fields.CurrentValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn array;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpCloneable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic object DeepCopy()\r\n\t\t{\r\n            //ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            //if (context.Config.Variables.ZendEngineV1Compatible)\r\n            //    return CloneObject(null, context, true);\r\n            //else\r\n                return this;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"reason\">The copy reason.</param>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic object Copy(CopyReason reason)\r\n\t\t{\r\n\t\t\treturn DeepCopy();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpPrintable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Iterator used for <see cref=\"Print\"/>, <see cref=\"Dump\"/>, and <see cref=\"Export\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Override this to get a different print/dump/export behavior.</remarks>\r\n\t\tprotected virtual IEnumerable<KeyValuePair<VariableName, AttributedValue>> PropertyIterator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties())\r\n\t\t\t{\r\n\t\t\t\tDPropertyDesc property = pair.Value;\r\n\t\t\t\tif (property.IsStatic) continue;\r\n\r\n\t\t\t\tobject property_value;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tproperty_value = property.DumpGet(this);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception e)\r\n\t\t\t\t{\r\n\t\t\t\t\tproperty_value = String.Format(\"{0}: \\\"{1}\\\"\", e.GetType().Name, e.Message);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tyield return new KeyValuePair<VariableName, AttributedValue>\r\n\t\t\t\t\t(pair.Key, new AttributedValue(property_value, property.MemberAttributes, property.DeclaringType));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints this instance's fields in a human readable form. Mimics the <c>print_r</c> PHP function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The <see cref=\"System.IO.TextWriter\"/> to print to.</param>\r\n\t\tpublic void Print(System.IO.TextWriter output)\r\n\t\t{\r\n            string type_name = TypeName + \" \" + PrintablePhpTypeName;\r\n\r\n\t\t\tif (visited)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(type_name + \" [recursion]\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine(type_name);\r\n\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\toutput.WriteLine('(');\r\n\r\n\t\t\tPhpVariable.PrintIndentationLevel+=2;\r\n\t\t\tvisited = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// print CT properties\r\n\t\t\t\tforeach (KeyValuePair<VariableName, AttributedValue> pair in PropertyIterator())\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpReference property_value_ref = pair.Value.Value as PhpReference;\r\n\r\n\t\t\t\t\tif (property_value_ref == null || property_value_ref.IsSet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t\tswitch (pair.Value.Attributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase PhpMemberAttributes.Public: output.Write(\"[{0}] => \", pair.Key); break;\r\n\t\t\t\t\t\t\tcase PhpMemberAttributes.Protected: output.Write(\"[{0}:protected] => \", pair.Key); break;\r\n                            case PhpMemberAttributes.Private: output.Write(\"[{0}:{1}:private] => \", pair.Key, pair.Value.DeclaringTypeName); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tPhpVariable.Print(output, pair.Value.Value);\r\n                        output.WriteLine();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// print RT fields\r\n\t\t\t\tif (RuntimeFields != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var pair in RuntimeFields)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t\toutput.Write(\"[{0}] => \", pair.Key.Object);\r\n\t\t\t\t\t\tPhpVariable.Print(output, pair.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tvisited = false;\r\n\t\t\t\tPhpVariable.PrintIndentationLevel-=2;\r\n\r\n\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\toutput.WriteLine(')');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dumps this instance's fields in a human readable form including types.\r\n\t\t/// Mimics the <c>var_dump</c> PHP function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The <see cref=\"System.IO.TextWriter\"/> to dump to.</param>\r\n\t\tpublic void Dump(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tList<KeyValuePair<string, object>> ct_props = new List<KeyValuePair<string, object>>();\r\n\r\n\t\t\tPhpReference property_value_ref;\r\n\r\n\t\t\t// enumerate CT properties\r\n\t\t\tforeach (KeyValuePair<VariableName, AttributedValue> pair in PropertyIterator())\r\n\t\t\t{\r\n\t\t\t\tproperty_value_ref = pair.Value.Value as PhpReference;\r\n\r\n\t\t\t\tif (property_value_ref == null || property_value_ref.IsSet)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring prop_name = null;\r\n\t\t\t\t\tswitch (pair.Value.Attributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Public: prop_name = String.Format(\"[\\\"{0}\\\"]=>\", pair.Key); break;\r\n                        case PhpMemberAttributes.Protected: prop_name = String.Format(\"[\\\"{0}\\\":protected]=>\", pair.Key); break;\r\n                        case PhpMemberAttributes.Private: prop_name = String.Format(\"[\\\"{0}\\\":\\\"{1}\\\":private]=>\", pair.Key, pair.Value.DeclaringTypeName); break;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tct_props.Add(new KeyValuePair<string, object>(prop_name, pair.Value.Value));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// print the header\r\n\t\t\tint count = ct_props.Count;\r\n\t\t\tif (RuntimeFields != null) count += RuntimeFields.Count;\r\n\r\n            string type_name = string.Format(\"object({0})#{2} ({1})\", TypeDesc.MakeFullGenericName(), count, unchecked((uint)this.GetHashCode()));\r\n\r\n\t\t\tif (visited)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(type_name + \" [recursion]\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toutput.Write(type_name);\r\n            output.WriteLine(\" {\");\r\n\t\t\t//PhpVariable.PrintIndentation(output);\r\n\t\t\t\r\n\t\t\tPhpVariable.PrintIndentationLevel+=1;\r\n\t\t\tvisited = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// print CT properties\r\n\t\t\t\tfor (int i = 0; i < ct_props.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tKeyValuePair<string, object> pair = ct_props[i];\r\n\r\n\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\toutput.WriteLine(pair.Key);\r\n\r\n                    PhpVariable.PrintIndentation(output);\r\n\t\t\t\t\tproperty_value_ref = pair.Value as PhpReference;\r\n\t\t\t\t\tif (property_value_ref != null && !property_value_ref.IsAliased)\r\n                        PhpVariable.Dump(output, property_value_ref.Value); // skip \"&\" at the beginning if field is not aliased\r\n\t\t\t\t\telse\r\n                        PhpVariable.Dump(output, pair.Value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// print RT fields\r\n\t\t\t\tif (RuntimeFields != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var pair in RuntimeFields)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t\toutput.WriteLine(\"[\\\"{0}\\\"]=>\", pair.Key.String);\r\n\r\n                        PhpVariable.PrintIndentation(output);\r\n\t\t\t\t\t\tproperty_value_ref = pair.Value as PhpReference;\r\n                        if (property_value_ref != null && !property_value_ref.IsAliased)\r\n                            PhpVariable.Dump(output, property_value_ref.Value); // skip \"&\" at the beginning if field is not aliased\r\n                        else\r\n                            PhpVariable.Dump(output, pair.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tvisited = false;\r\n\t\t\t\tPhpVariable.PrintIndentationLevel-=1;\r\n\r\n\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\toutput.WriteLine(\"}\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Exports this instance's fields in a human readable form including types.\r\n\t\t/// Mimics the <c>var_export</c> PHP function.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The <see cref=\"System.IO.TextWriter\"/> to export to.</param>\r\n\t\tpublic void Export(System.IO.TextWriter output)\r\n\t\t{\r\n\t\t\tstring type_name = \"class \" + TypeName;\r\n\r\n\t\t\tif (visited)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(type_name + \" {/* recursion */}\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine(type_name);\r\n\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\toutput.WriteLine(\"{\");\r\n\r\n\t\t\tPhpVariable.PrintIndentationLevel++;\r\n\t\t\tvisited = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tbool first = true;\r\n\r\n\t\t\t\t// print CT properties\r\n\t\t\t\tforeach (KeyValuePair<VariableName, AttributedValue> pair in PropertyIterator())\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpReference property_value_ref = pair.Value.Value as PhpReference;\r\n\r\n\t\t\t\t\tif (property_value_ref == null || property_value_ref.IsSet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!first) output.WriteLine(String.Empty);\r\n\t\t\t\t\t\telse first = false;\r\n\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\r\n\t\t\t\t\t\tswitch (pair.Value.Attributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase PhpMemberAttributes.Public: output.Write(\"public ${0} = \", pair.Key); break;\r\n\t\t\t\t\t\t\tcase PhpMemberAttributes.Protected: output.Write(\"protected ${0} = \", pair.Key); break;\r\n\t\t\t\t\t\t\tcase PhpMemberAttributes.Private: output.Write(\"private ${0} = \", pair.Key); break;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tPhpVariable.Export(output, pair.Value.Value);\r\n\t\t\t\t\t\toutput.Write(';');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// print RT fields\r\n\t\t\t\tif (RuntimeFields != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var pair in RuntimeFields)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!first) output.WriteLine(String.Empty);\r\n\t\t\t\t\t\telse first = false;\r\n\r\n\t\t\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\r\n\t\t\t\t\t\toutput.Write(\"public ${0} = \", pair.Key.String);\r\n\r\n\t\t\t\t\t\tPhpVariable.Export(output, pair.Value);\r\n\t\t\t\t\t\toutput.Write(';');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tvisited = false;\r\n\t\t\t\tPhpVariable.PrintIndentationLevel--;\r\n\r\n\t\t\t\toutput.WriteLine(String.Empty);\r\n\t\t\t\tPhpVariable.PrintIndentation(output);\r\n\t\t\t\toutput.Write('}');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpVariable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines emptiness of the <see cref=\"PhpObject\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An instance is never empty.</returns>\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\t// obsolete since PHP 5.1.0: return Count == 0;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether <see cref=\"PhpObject\"/> is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>false</B></returns>\r\n\t\tpublic bool IsScalar()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a name of declaring type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name.</returns>\r\n\t\tpublic virtual string GetTypeName()\r\n\t\t{\r\n\t\t\treturn PhpTypeName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpObjectGraphNode Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback method.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic void Walk(PhpWalkCallback callback, ScriptContext context)\r\n\t\t{\r\n\t\t\t// prevents recursion:\r\n\t\t\tif (!this.visited)\r\n\t\t\t{\r\n\t\t\t\t// marks this instance as visited:\r\n\t\t\t\tthis.visited = true;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// walks CT properties:\r\n\t\t\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDPropertyDesc property = pair.Value;\r\n\t\t\t\t\t\tobject property_value = property.Get(this);\r\n\t\t\t\t\t\tPhpReference property_value_ref = property_value as PhpReference;\r\n\r\n\t\t\t\t\t\tif (property_value_ref != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (property_value_ref.IsSet)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (property_value_ref.IsAliased)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t// the reference is 'real'\r\n\t\t\t\t\t\t\t\t\tobject res = callback(property_value_ref, context);\r\n\t\t\t\t\t\t\t\t\tPhpReference new_ref = res as PhpReference;\r\n\t\t\t\t\t\t\t\t\tif (new_ref == null) new_ref = new PhpSmartReference(res);\r\n\r\n\t\t\t\t\t\t\t\t\tproperty.Set(this, new_ref);\r\n\t\t\t\t\t\t\t\t\tnew_ref.Walk(callback, context);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse property_value_ref.Walk(callback, context);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// the property is not a PhpReference\r\n\t\t\t\t\t\t\tIPhpObjectGraphNode node = property_value as IPhpObjectGraphNode;\r\n\t\t\t\t\t\t\tif (node != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tobject res = callback(node, context);\r\n\t\t\t\t\t\t\t\tif (!Object.ReferenceEquals(res, property_value)) property.Set(this, res);\r\n\t\t\t\t\t\t\t\tif ((node = res as IPhpObjectGraphNode) != null) node.Walk(callback, context);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// walks RT fields:\r\n\t\t\t\t\tif (RuntimeFields != null)\r\n\t\t\t\t\t{\r\n                        using (var fields = RuntimeFields.GetFastEnumerator())\r\n                            while (fields.MoveNext())\r\n                            {\r\n                                IPhpObjectGraphNode node = fields.CurrentValue as IPhpObjectGraphNode;\r\n                                if (node != null)\r\n                                {\r\n                                    object res = callback(node, context);\r\n                                    if (!Object.ReferenceEquals(res, fields.CurrentValue)) fields.ModifyCurrentValue(res);\r\n                                    if ((node = res as IPhpObjectGraphNode) != null) node.Walk(callback, context);\r\n                                }\r\n                            }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.visited = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IPhpEnumerable Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported in objects.\r\n\t\t/// </summary>\r\n\t\tpublic IPhpEnumerator IntrinsicEnumerator\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ throw new NotSupportedException(); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an enumerator used in the <c>foreach</c> statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keyed\">Whether the foreach statement uses keys.</param>\r\n\t\t/// <param name=\"aliasedValues\">Whether the values returned by enumerator are assigned by reference.</param>\r\n\t\t/// <param name=\"caller\">Type <see cref=\"DTypeDesc\"/> of the class in whose context the caller operates.</param>\r\n\t\t/// <returns>The dictionary enumerator.</returns>\r\n\t\tpublic IDictionaryEnumerator GetForeachEnumerator(bool keyed, bool aliasedValues, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tIDictionaryEnumerator result;\r\n\r\n\t\t\t// does this instance implement SPL.Iterator or SPL.IteratorAggregate?\r\n\t\t\tresult = GetSplEnumerator(keyed, aliasedValues);\r\n\r\n\t\t\tif (result == null)\r\n\t\t\t{\r\n\t\t\t\t// does this instance implement one of the CLR enumerating interfaces?\r\n\t\t\t\tresult = GetClrEnumerator(keyed, aliasedValues);\r\n\r\n\t\t\t\tif (result == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// fall back to standard PHP property enumeration\r\n\t\t\t\t\tresult = new GenericDictionaryAdapter<object, object>(InstancePropertyIterator(caller, aliasedValues), false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate IDictionaryEnumerator GetSplEnumerator(bool keyed, bool aliasedValues)\r\n\t\t{\r\n\t\t\tScriptContext context = null;\r\n\r\n\t\t\tDObject obj = this;\r\n\t\t\tif (!(RealObject is Library.SPL.Iterator))\r\n\t\t\t{\r\n\t\t\t\tif (!(RealObject is Library.SPL.IteratorAggregate))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\telse context = ScriptContext.CurrentContext;\r\n\r\n\t\t\t\tDObject last_obj;\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tlast_obj = obj;\r\n\r\n\t\t\t\t\t// call IteratorAggregate::getIterator & dereference the return value\r\n\t\t\t\t\tcontext.Stack.AddFrame();\r\n\t\t\t\t\tobj = PhpVariable.Dereference(obj.InvokeMethod(\"getIterator\", null, context)) as DObject;\r\n\r\n\t\t\t\t\t// check whether another IteratorAggregate was returned\r\n\t\t\t\t}\r\n\t\t\t\twhile (obj != null && obj.RealObject is Library.SPL.IteratorAggregate);\r\n\r\n\t\t\t\tif (obj == null || !(obj.RealObject is Library.SPL.Iterator))\r\n\t\t\t\t{\r\n                    Library.SPL.Exception.ThrowSplException(\r\n                        _ctx => new Library.SPL.Exception(_ctx, true),\r\n                        context,\r\n                        string.Format(CoreResources.getiterator_must_return_traversable, last_obj.TypeName), 0, null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse context = ScriptContext.CurrentContext;\r\n\r\n\t\t\treturn new PhpIteratorEnumerator(obj, context, aliasedValues);\r\n\t\t}\r\n\r\n\t\tprivate IDictionaryEnumerator GetClrEnumerator(bool keyed, bool aliasedValues)\r\n\t\t{\r\n\t\t\t// IDictionary\r\n\t\t\tIDictionary dictionary = RealObject as IDictionary;\r\n\t\t\tif (dictionary != null)\r\n\t\t\t{\r\n\t\t\t\treturn new GenericDictionaryAdapter<object, object>(IDictionaryIterator(dictionary), true);\r\n\t\t\t}\r\n\r\n\t\t\t// IEnumerable<KeyValuePair<object, object>> (fast path, used by LINQ)\r\n\t\t\tIEnumerable<KeyValuePair<object, object>> gendict = RealObject as IEnumerable<KeyValuePair<object, object>>;\r\n\t\t\tif (gendict != null)\r\n\t\t\t{\r\n\t\t\t\treturn new GenericDictionaryAdapter<object, object>(gendict.GetEnumerator(), true);\r\n\t\t\t}\r\n\r\n            if (!keyed)\r\n\t\t\t{\r\n\t\t\t\t// IEnumerable\r\n\t\t\t\tIEnumerable enumerable = RealObject as IEnumerable;\r\n\t\t\t\tif (enumerable != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn new GenericEnumerableAdapter<object>(IEnumerableIterator(enumerable), true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// IEnumerable<object> (fast path, used by LINQ)\r\n\t\t\t\tIEnumerable<object> genenum = RealObject as IEnumerable<object>;\r\n\t\t\t\tif (genenum != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn new GenericEnumerableAdapter<object>(genenum.GetEnumerator(), true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// IEnumerable<T>\r\n\t\t\t// IEnumerable<KeyValuePair<T, S>>\r\n\r\n\t\t\tforeach (Type iface_type in GetType().GetInterfaces())\r\n\t\t\t{\r\n\t\t\t\tif (iface_type.IsGenericType && iface_type.GetGenericTypeDefinition() == typeof(IEnumerable<>))\r\n\t\t\t\t{\r\n\t\t\t\t\tType item_type = iface_type.GetGenericArguments()[0];\r\n\r\n\t\t\t\t\tif (item_type.IsGenericType && item_type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// IEnumerable<KeyValuePair<T, S>>\r\n\t\t\t\t\t\tType iterator_type = typeof(GenericDictionaryAdapter<,>).MakeGenericType(item_type.GetGenericArguments());\r\n\t\t\t\t\t\treturn (IDictionaryEnumerator)Activator.CreateInstance(iterator_type, RealObject, true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!keyed)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// IEnumerable<T>\r\n\t\t\t\t\t\tType iterator_type = typeof(GenericEnumerableAdapter<>).MakeGenericType(item_type);\r\n\t\t\t\t\t\treturn (IDictionaryEnumerator)Activator.CreateInstance(iterator_type, RealObject, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprivate IEnumerator<KeyValuePair<object, object>> IDictionaryIterator(IDictionary dictionary)\r\n\t\t{\r\n\t\t\tforeach (DictionaryEntry entry in dictionary)\r\n\t\t\t{\r\n\t\t\t\tyield return new KeyValuePair<object, object>(entry.Key, entry.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate IEnumerator<object> IEnumerableIterator(IEnumerable enumerable)\r\n\t\t{\r\n\t\t\tforeach (object value in enumerable)\r\n\t\t\t{\r\n\t\t\t\tyield return value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// An PHP style iterator for <see cref=\"DObject\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This iterator returns instance property names as keys and instance property values as values. Only\r\n\t\t/// properties that are visible for the <paramref name=\"caller\"/> are enumerated - both CT and RT, CT first.\r\n\t\t/// </remarks>\r\n\t\tinternal IEnumerator<KeyValuePair<object, object>> InstancePropertyIterator(DTypeDesc caller, bool aliasedValues)\r\n\t\t{\r\n\t\t\tobject value;\r\n\t\t\tPhpReference reference;\r\n\r\n\t\t\t// enumerate CT properties\r\n\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties(caller))\r\n\t\t\t{\r\n                if (pair.Value.IsStatic)\r\n                    continue;  // ignore static fields here\r\n\r\n\t\t\t\tstring key = pair.Key.ToString();\r\n\r\n\t\t\t\tvalue = pair.Value.Get(this);\r\n\t\t\t\tif (aliasedValues)\r\n\t\t\t\t{\r\n\t\t\t\t\treference = value as PhpReference;\r\n\t\t\t\t\tif (reference == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// create a new reference and store it back\r\n\t\t\t\t\t\tvalue = new PhpReference(value);\r\n\t\t\t\t\t\tpair.Value.Set(this, value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse value = PhpVariable.Copy(PhpVariable.Dereference(value), CopyReason.Assigned);\r\n\r\n\t\t\t\tyield return new KeyValuePair<object, object>(key, value);\r\n\t\t\t}\r\n\r\n\t\t\t// enumerate RT fields\r\n\t\t\tif (RuntimeFields != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (var pair in RuntimeFields)\r\n\t\t\t\t{\r\n\t\t\t\t\tvalue = pair.Value;\r\n\r\n\t\t\t\t\tif (aliasedValues)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treference = value as PhpReference;\r\n\t\t\t\t\t\tif (reference == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// create a new reference and store it back\r\n\t\t\t\t\t\t\tvalue = new PhpReference(value);\r\n\t\t\t\t\t\t\tRuntimeFields[pair.Key] = value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse value = PhpVariable.Copy(PhpVariable.Dereference(value), CopyReason.Assigned);\r\n\r\n\t\t\t\t\tyield return new KeyValuePair<object, object>(pair.Key.Object, value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDictionary-like Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a runtime instance field with the provided name and value.\r\n\t\t/// </summary>\r\n\t\tpublic void Add(object name, object value)\r\n\t\t{\r\n\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\t\t\tif (Contains(name)) throw new ArgumentException(CoreResources.GetString(\"field_already_exists\"));\r\n\r\n\t\t\tif (RuntimeFields == null) RuntimeFields = new PhpArray();\r\n\t\t\tRuntimeFields.Add(Convert.ObjectToString(name), value);\r\n\t\t}\r\n\r\n        public void AddRange( IEnumerable<KeyValuePair<string,object>> members )\r\n        {\r\n            if (members == null)\r\n                return;\r\n\r\n            if (RuntimeFields == null)\r\n                RuntimeFields = new PhpArray();\r\n\r\n            foreach (var member in members)\r\n            {\r\n                if (member.Key == null) throw new ArgumentNullException(\"members[].Key\");\r\n                if (Contains(member.Key)) throw new ArgumentException(CoreResources.GetString(\"field_already_exists\"));\r\n\r\n                RuntimeFields.Add(member.Key, member.Value);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unsets all runtime fields.\r\n\t\t/// </summary>\r\n\t\tpublic void Clear()\r\n\t\t{\r\n\t\t\tif (RuntimeFields != null) RuntimeFields.Clear();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this instance contains an instance property with the specified name.\r\n\t\t/// </summary>\r\n\t\tpublic bool Contains(object name)\r\n\t\t{\r\n\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\r\n\t\t\tstring sname = Convert.ObjectToString(name);\r\n\r\n\t\t\t// check CT properties\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tif (TypeDesc.GetInstanceProperty(new VariableName(sname), TypeDesc, out property) !=\r\n\t\t\t\tGetMemberResult.NotFound) return true;\r\n\r\n\t\t\t// check RT fields\r\n\t\t\tif (RuntimeFields == null) return false;\r\n\t\t\treturn RuntimeFields.ContainsKey(sname);\r\n\t\t}\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Returns an enumerator that enumerates instance properties visible in the current class context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The enumerator.</returns>\r\n        [Obsolete(\"This method has performance issue. Use GetEnumerator(DTypeDesc caller) with a caller already determined.\")] \r\n\t\tpublic IDictionaryEnumerator GetEnumerator()\r\n\t\t{\r\n\t\t\treturn GetEnumerator(PhpStackTrace.GetClassContext());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an enumerator that enumerates instance properties visible in a given class context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"caller\"><see cref=\"DTypeDesc\"/> of the object that request the enumeration.</param>\r\n\t\t/// <returns>The enumerator.</returns>\r\n\t\tpublic IDictionaryEnumerator GetEnumerator(DTypeDesc caller)\r\n\t\t{\r\n\t\t\treturn GetForeachEnumerator(true, false, caller);\r\n\t\t}\r\n\r\n\t\tpublic void Remove(object key)\r\n\t\t{\r\n\t\t\tthrow new Exception(\"The method or operation is not implemented.\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets an instance property with the specified name.\r\n\t\t/// </summary>\r\n\t\tpublic object this[object name]\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\r\n\t\t\t\tDTypeDesc caller = PhpStackTrace.GetClassContext();\r\n\t\t\t\treturn Operators.GetObjectProperty(this, Convert.ObjectToString(name), caller, false);\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\r\n\t\t\t\tDTypeDesc caller = PhpStackTrace.GetClassContext();\r\n\t\t\t\tOperators.SetObjectProperty(this, Convert.ObjectToString(name), value, caller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of (set) instance properties contained in this <see cref=\"DObject\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic int Count\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tint count = 0;\r\n\t\t\t\t\r\n\t\t\t\t// enumerate CT properties\r\n\t\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties())\r\n\t\t\t\t{\r\n\t\t\t\t\tDPropertyDesc property = pair.Value;\r\n\t\t\t\t\tif (property.IsStatic) continue;\r\n\r\n\t\t\t\t\tif (!(property is DPhpFieldDesc)) count++;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// PHP fields can be unset!\r\n\t\t\t\t\t\tPhpReference property_value_ref = property.Get(this) as PhpReference;\r\n\t\t\t\t\t\tif (property_value_ref == null || property_value_ref.IsSet) count++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// add RT fields\r\n\t\t\t\tif (RuntimeFields != null) count += RuntimeFields.Count;\r\n\r\n\t\t\t\treturn count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Returns <B>true</B> is this instance contains at least one instance property that is not unset.\r\n        ///// </summary>\r\n        //public bool HasSetInstanceProperties\r\n        //{\r\n        //    get\r\n        //    {\r\n        //        if (RuntimeFields != null && RuntimeFields.Count > 0) return true;\r\n\r\n        //        // enumerate CT properties\r\n        //        foreach (KeyValuePair<VariableName, DPropertyDesc> pair in TypeDesc.EnumerateProperties())\r\n        //        {\r\n        //            DPropertyDesc property = pair.Value;\r\n        //            if (property.IsStatic) continue;\r\n\r\n        //            if (!(property is DPhpFieldDesc)) return true;\r\n        //            else\r\n        //            {\r\n        //                // PHP fields can be unset!\r\n        //                PhpReference property_value_ref = property.Get(this) as PhpReference;\r\n        //                if (property_value_ref == null || property_value_ref.IsSet) return true;\r\n        //            }\r\n        //        }\r\n\r\n        //        return false;\r\n        //    }\r\n        //}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialization - CLR Only (ISerializable & IDeserializationCallback)\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected DObject(SerializationInfo/*!*/ info, StreamingContext context)\r\n\t\t{\r\n\t\t\tSerializationSurrogate.Instance.SetObjectData(this, info, context, null);\r\n\t\t}\r\n\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetObjectData\"]/*'/>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tSerializationSurrogate.Instance.GetObjectData(this, info, context);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs when the entire object graph has been deserialized.\r\n\t\t/// </summary>\r\n\t\tpublic void OnDeserialization(object sender)\r\n\t\t{\r\n\t\t\tSerializationSurrogate.Instance.OnDeserialization(this);\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\r\n\t\t#region IDisposable Members, ~DObject\r\n\r\n\t\t/// <summary>\r\n\t\t/// Disposes of unmanaged and optionally also managed resources.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"disposing\">If <B>true</B>, both managed and unmanaged resources should be released.\r\n\t\t/// If <B>false</B> only unmanaged resources should be released.</param>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// User defined destructor (<c>__destruct</c>) can only be called, when <parameref name=\"disposing\"/>\r\n\t\t/// is <B>true</B>, because the destructor may (and probably will) manipulate managed resources which is\r\n\t\t/// forbidden when this method is called by the runtime with <parameref name=\"disposing\"/> set to\r\n\t\t/// <B>false</B>).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tprotected virtual void Dispose(bool disposing)\r\n\t\t{\r\n\t\t\tif (ReadyForDisposal && System.Threading.Interlocked.Exchange(ref disposed, 1) == 0)\r\n\t\t\t{\r\n                // only PHP types with public non static __destruct() function are IPhpDestructable\r\n                IPhpDestructable obj = this as IPhpDestructable;\r\n                if (obj != null)\r\n                {\r\n                    obj.__destruct(ScriptContext.CurrentContext);\r\n                    return;\r\n                }\r\n\r\n\t\t\t\t// perform __destruct method lookup and runtime check\r\n\t\t\t\tDRoutineDesc method;\r\n                switch (TypeDesc.GetMethod(Name.SpecialMethodNames.Destruct, TypeDesc, out method))\r\n\t\t\t\t{\r\n\t\t\t\t\tcase GetMemberResult.BadVisibility:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tThrowMethodVisibilityError(method, TypeDesc);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase GetMemberResult.OK:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// destructor must not be static\r\n\t\t\t\t\t\tif (method.IsStatic)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"destructor_cannot_be_static\",\r\n\t\t\t\t\t\t\t  method.DeclaringType.MakeFullName(), Name.SpecialMethodNames.Destruct));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\r\n\t\t\t\t\t\tstack.AddFrame();\r\n\t\t\t\t\t\tmethod.Invoke(this, stack);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}                \r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Standard <see cref=\"IDisposable.Dispose\"/> implementation.\r\n\t\t/// </summary>\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\tDispose(true);\r\n\t\t\tGC.SuppressFinalize(this);\r\n\t\t}\r\n\r\n        // Finalizer emitted only in PHP types with __destruct() function\r\n\t\t///// <summary>\r\n\t\t///// Overriden <see cref=\"Object.Finalize\"/>.\r\n\t\t///// </summary>\r\n\t\t//~DObject()\r\n\t    //{\r\n\t\t//\tDispose(false);\r\n\t\t//}\r\n\r\n\t\t#endregion\r\n\r\n\r\n        #region IDynamicMetaObjectProvider Members\r\n\r\n        public DynamicMetaObject GetMetaObject(System.Linq.Expressions.Expression parameter)\r\n        {\r\n            return new DMetaObject(parameter, this);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region ClrObject\r\n\r\n\t/// <summary>\r\n\t/// Represents a non-PHP object at runtime.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// TODO: Should override conversion routines and delegate to real object's ToString, IConvertible, ...\r\n\t/// </remarks>\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    [DebuggerDisplay(\"{realObject}\", Type = \"{TypeName,nq}\")]\r\n    public sealed class ClrObject : DObject\r\n    {\r\n        #region Fields and Properties\r\n\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        private static readonly WeakCache<ClrObject>/*!*/ cache = new WeakCache<ClrObject>();\r\n\r\n        /// <summary>\r\n        /// The real object contained by this ClrObject wrapper.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public override object/*!*/ RealObject { get { return realObject; } }\r\n        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n        private object/*!*/ realObject;\r\n\r\n        /// <summary>\r\n        /// The reference passed to the methods and properties.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public override object InstanceObject { get { return realObject; } }\r\n\r\n        /// <summary>\r\n        /// To be used by serialization only.\r\n        /// </summary>\r\n        internal void SetRealObject(object obj)\r\n        {\r\n            Debug.Assert(obj != null && typeDesc == null);\r\n            this.realObject = obj;\r\n        }\r\n\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        protected override bool ReadyForDisposal\r\n        {\r\n            get\r\n            {\r\n                lock (cache)\r\n                {\r\n                    return !cache.ContainsKey(realObject);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction and Finalization\r\n\r\n        private ClrObject(object/*!*/ realObject)\r\n            : base()\r\n        {\r\n            Debug.Assert(realObject != null);\r\n            this.realObject = realObject;\r\n        }\r\n\r\n        private ClrObject(object/*!*/ realObject, DTypeDesc/*!*/ typeDesc)\r\n            : base(typeDesc)\r\n        {\r\n            Debug.Assert(realObject != null);\r\n            this.realObject = realObject;\r\n        }\r\n\r\n        ~ClrObject()\r\n        {\r\n            // if the real object is still held in the cache, resurrect this instance\r\n            lock (cache)\r\n            {\r\n                try\r\n                {\r\n                    if (cache.ContainsKey(realObject))\r\n                    {\r\n                        cache.Resurrect(realObject, this);\r\n                        GC.ReRegisterForFinalize(this);\r\n                    }\r\n                }\r\n                catch (System.Runtime.Remoting.RemotingException)\r\n                {\r\n                    // do not ressurect dead remote objects\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs \"dynamic\" type check and wraps only if the type is not primitive\r\n        /// </summary>\r\n        /// <param name=\"instance\">Object to be converted to PHP world.</param>\r\n        /// <returns>PHP type variable.</returns>\r\n        [Emitted]\r\n        public static object WrapDynamic(object instance)\r\n        {\r\n            // keep PHP literals\r\n            if (PhpVariable.HasPrimitiveType(instance)) return instance;\r\n\r\n            // keep DObject\r\n            if (instance is DObject) return instance;\r\n\r\n            // convert byte[] into PhpBytes\r\n            byte[] bytes;\r\n            if ((bytes = instance as byte[]) != null) return new PhpBytes(bytes);\r\n\r\n            // convert MulticastDelegate into callable PHP object\r\n            if (instance is MulticastDelegate) return WrapDelegate((MulticastDelegate)instance);\r\n\r\n            // create ClrObject from instance\r\n            return WrapRealObject(instance);\r\n        }\r\n\r\n        [Emitted]\r\n        public static DObject Wrap(object instance)\r\n        {\r\n            DObject obj;\r\n            if ((obj = instance as DObject) != null) return obj;\r\n\r\n            return WrapRealObject(instance);\r\n        }\r\n\r\n        [Emitted]\r\n        public static DObject WrapRealObject(object instance)\r\n        {\r\n            if (instance == null) return null;\r\n\r\n            Debug.Assert(!PhpVariable.HasPrimitiveType(instance));\r\n            Debug.Assert(!(instance is DObject));\r\n\r\n            ClrObject result;\r\n\r\n            lock (cache)\r\n            {\r\n                if (!cache.TryGetValue(instance, out result))\r\n                {\r\n                    return Create(instance);\r\n                }\r\n            }\r\n            return result;\r\n        }\r\n\r\n        #region MulticastDelegate wrapping\r\n\r\n        [ImplementsType]\r\n        public class DelegateClosure : PhpObject\r\n        {\r\n            /// <summary>\r\n            /// Delegate to be called when this object is converted into <see cref=\"PhpCallback\"/> and invoked.\r\n            /// </summary>\r\n            private readonly MulticastDelegate/*!*/function;\r\n\r\n            /// <summary>\r\n            /// Cache args count of the <see cref=\"function\"/>.\r\n            /// </summary>\r\n            private System.Reflection.ParameterInfo[] functionParams = null;\r\n\r\n            internal DelegateClosure(MulticastDelegate/*!*/function)\r\n                : base(ScriptContext.CurrentContext, true)\r\n            {\r\n                Debug.Assert(function != null);\r\n                this.function = function;\r\n            }\r\n\r\n            [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\r\n            public static object __invoke(object instance, PhpStack stack)\r\n            {\r\n                // prepare args array\r\n                object[] args = new object[stack.ArgCount];\r\n                for (int i = 0; i < args.Length; i++)\r\n                    args[i] = stack.PeekValue(i + 1);\r\n\r\n                // call __invoke\r\n                stack.RemoveFrame();\r\n                return ((DelegateClosure)instance).invokeDelegate(args);\r\n            }\r\n\r\n\r\n            [ImplementsMethod, System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\r\n            public object __invoke(ScriptContext/*!*/context)\r\n            {\r\n                return invokeDelegate();\r\n            }\r\n\r\n            /// <summary>\r\n            /// Check the <paramref name=\"args\"/> to correspond to <see cref=\"function\"/>.\r\n            /// </summary>\r\n            /// <param name=\"args\"></param>\r\n            /// <returns></returns>\r\n            private object[] CheckArgs(object[]/*!*/args)\r\n            {\r\n                if (functionParams == null)\r\n                    functionParams = function.Method.GetParameters();\r\n\r\n                if (args.Length != functionParams.Length)\r\n                {\r\n                    if (args.Length < functionParams.Length)\r\n                    {\r\n                        // Warning: InvalidArgumentCount\r\n                        PhpException.InvalidArgumentCount(\r\n                            (function.Target == null) ? null : function.Target.GetType().ToString().Replace('.', QualifiedName.Separator),\r\n                            function.Method.Name);\r\n                    }\r\n\r\n                    var args2 = new object[functionParams.Length];  // valid params count\r\n                    int copiedArgs = Math.Min(args2.Length, args.Length);\r\n                    Array.Copy(args, args2, copiedArgs);    // copy passed params\r\n                    args = args2;\r\n\r\n                    // default value for missing args\r\n                    for (int i = copiedArgs; i < args.Length; i++)\r\n                        args[i] = /*functionParams[i].DefaultValue ?? */ReflectionUtils.GetDefault(functionParams[i].ParameterType);\r\n                }\r\n\r\n                return args;\r\n            }\r\n\r\n            /// <summary>\r\n            /// \r\n            /// </summary>\r\n            /// <param name=\"args\">Arguments to be unwrapped and passed to <see cref=\"function\"/>.</param>\r\n            /// <returns></returns>\r\n            private object invokeDelegate(params object[] args)\r\n            {\r\n                // check args count\r\n                args = CheckArgs(args);\r\n\r\n                // unwraps arguments\r\n                for (int i = 0; i < args.Length; i++)\r\n                    args[i] = PhpVariable.Unwrap(args[i]);\r\n\r\n                // invoke the .NET delegate\r\n                return ClrObject.WrapDynamic(this.function.DynamicInvoke(args));\r\n            }\r\n\r\n            /// <summary>\r\n            /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n            /// </summary>\r\n            /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n            private static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n            {\r\n                typeDesc.AddMethod(\"__invoke\", PhpMemberAttributes.Public, __invoke);\r\n\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// Wrap <see cref=\"MulticastDelegate\"/> into PHP invokable object.\r\n        /// </summary>\r\n        /// <param name=\"function\">.NET <see cref=\"MulticastDelegate\"/> to be wrapped.</param>\r\n        /// <returns>PHP callable object.</returns>\r\n        public static DObject/*!*/WrapDelegate(MulticastDelegate/*!*/function)\r\n        {\r\n            return new DelegateClosure(function);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Called by compiled code when a new real object is being constructed.\r\n        /// </summary>\r\n        [Emitted]\r\n        public static DObject/*!*/ Create(object/*!*/ realObject)\r\n        {\r\n            var type = realObject.GetType();\r\n            if (type.IsValueType) // wrapped boxed value types are not cached\r\n                return (DObject)valueTypesCache.Get(type).Item2.DynamicInvoke(realObject);\r\n            \r\n            ClrObject result = new ClrObject(realObject);\r\n\r\n            lock (cache)\r\n            {\r\n                // realObject is a fresh new object which is surely not in the cache\r\n                cache.Add(realObject, result);\r\n            }\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ClrValue<> creation\r\n\r\n        /// <summary>\r\n        /// Cache of <see cref=\"ClrValue&lt;T&gt;\"/> and its <see cref=\"ClrValue&lt;T&gt;.Create\"/> method associated with specific value type.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        internal static readonly SynchronizedCache<Type, Tuple<Type, Delegate>>/*!*/valueTypesCache =\r\n            new SynchronizedCache<Type, Tuple<Type, Delegate>>(type =>\r\n            {\r\n                Debug.Assert(type != null, \"type must not be null!\");\r\n                Debug.Assert(type.IsValueType, \"type must be a value type!\");\r\n\r\n                var generictype = typeof(ClrValue<>).MakeGenericType(new Type[] { type });\r\n                var create = Delegate.CreateDelegate(\r\n                    System.Linq.Expressions.Expression.GetFuncType(new Type[] { type, generictype }),\r\n                    generictype.GetMethod(\"Create\"));\r\n\r\n                return new Tuple<Type, Delegate>(generictype, create);\r\n            });\r\n\r\n        #endregion\r\n\r\n        #region Misc\r\n\r\n        public override string GetTypeName()\r\n        {\r\n            return realObject.GetType().Name;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return realObject.ToString();\r\n        }\r\n\r\n#if DEBUG\r\n        public static int GetCacheSize()\r\n        {\r\n            return cache.Count;\r\n        }\r\n#endif\r\n\r\n        #endregion\r\n\r\n        #region PHP Operators\r\n\r\n        /// <summary>\r\n        /// Overrides basic string conversion of CLR object by calling its <c>ToString</c> method.\r\n        /// </summary>\r\n        public override string ToString(bool throwOnError, out bool success)\r\n        {\r\n            success = true;\r\n            return this.realObject.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides basic string conversion of CLR object by calling its <c>ToString</c> method.\r\n        /// </summary>\r\n        public override PhpBytes ToPhpBytes()\r\n        {\r\n            return new PhpBytes(this.realObject.ToString());\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n        private ClrObject(SerializationInfo/*!*/ info, StreamingContext context)\r\n            : base(info, context)\r\n        { }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ClrValue<T>\r\n\r\n    /// <summary>\r\n    /// An interface identifying ClrValue&lt;T&gt; instance object.\r\n    /// </summary>\r\n    public interface IClrValue { }\r\n\r\n    /// <summary>\r\n    /// Represents non-PHP value typed object at runtime.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\"></typeparam>\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    [DebuggerDisplay(\"{realValue}\", Type = \"{TypeName,nq}\")]\r\n    internal sealed class ClrValue<T> : DObject, IClrValue where T : struct\r\n    {\r\n        #region Fields and properties\r\n\r\n        /// <summary>\r\n        /// The CLR value represented by this <see cref=\"ClrValue&lt;T&gt;\"/> instance.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]\r\n        public T realValue;\r\n\r\n        /// <summary>\r\n        /// The CLR value represented by this <see cref=\"ClrValue&lt;T&gt;\"/> instance. The returned value is boxed.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public override object RealObject { get { return (object)realValue; } } // box the realValue\r\n\r\n        /// <summary>\r\n        /// The object passed as an instance to called methods and properties of this value type.\r\n        /// The whole <see cref=\"ClrValue&lt;T&gt;\"/> is returned too not box the wrapped value. Therefore the value\r\n        /// can be modified in-place by the called method or property.\r\n        /// </summary>\r\n        [DebuggerBrowsable(DebuggerBrowsableState.Never)]\r\n        public override object InstanceObject { get { return this; } }  // pass the whole ClrValue into the method/property stub\r\n        \r\n        #endregion\r\n\r\n        #region Construction and Finalization\r\n\r\n        private ClrValue(T/*!*/ realValue)\r\n\t\t\t: base()\r\n\t\t{\r\n            Debug.Assert(realValue.GetType().IsValueType);\r\n            this.realValue = realValue;\r\n\t\t}\r\n\r\n        private ClrValue(T/*!*/ realValue, DTypeDesc/*!*/ typeDesc)\r\n\t\t\t: base(typeDesc)\r\n\t\t{\r\n            Debug.Assert(realValue.GetType().IsValueType);\r\n            this.realValue = realValue;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Create the instance of <see cref=\"ClrValue&lt;T&gt;\"/>.\r\n        /// </summary>\r\n        /// <param name=\"value\">The value to be wrapped into <see cref=\"ClrValue&lt;T&gt;\"/>.</param>\r\n        /// <returns>New instance of <see cref=\"ClrValue&lt;T&gt;\"/> containing <paramref name=\"value\"/> as its <see cref=\"RealObject\"/>.</returns>\r\n        public static ClrValue<T> Create(T value)\r\n        {\r\n            return new ClrValue<T>(value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Misc\r\n\r\n        public override string GetTypeName()\r\n        {\r\n            return realValue.GetType().Name;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return realValue.ToString();\r\n        }\r\n        \r\n        #endregion\r\n\r\n        #region PHP Operators\r\n\r\n        /// <summary>\r\n        /// Overrides basic string conversion of CLR object by calling its <c>ToString</c> method.\r\n        /// </summary>\r\n        public override string ToString(bool throwOnError, out bool success)\r\n        {\r\n            success = true;\r\n            return this.realValue.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides basic string conversion of CLR object by calling its <c>ToString</c> method.\r\n        /// </summary>\r\n        public override PhpBytes ToPhpBytes()\r\n        {\r\n            return new PhpBytes(this.realValue.ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides default double cast of CLR object in case of <see cref=\"decimal\"/> type.\r\n        /// </summary>\r\n        public override double ToDouble()\r\n        {\r\n            if (typeof(T) == typeof(decimal))\r\n                return (double)(decimal)this.RealObject;\r\n            if (typeof(T) == typeof(byte))\r\n                return (byte)this.RealObject;\r\n            if (typeof(T) == typeof(float))\r\n                return (float)this.RealObject;\r\n            if (typeof(T) == typeof(short))\r\n                return (short)this.RealObject;\r\n            if (typeof(T) == typeof(ushort))\r\n                return (ushort)this.RealObject;\r\n            if (typeof(T) == typeof(sbyte))\r\n                return (sbyte)this.RealObject;\r\n            if (typeof(T) == typeof(uint))\r\n                return (uint)this.RealObject;\r\n            if (typeof(T) == typeof(ulong))\r\n                return (ulong)this.RealObject;\r\n\r\n            return base.ToDouble();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides default number conversion of CLR object in of <see cref=\"decimal\"/> type.\r\n        /// </summary>\r\n        public override Convert.NumberInfo ToNumber(out int intValue, out long longValue, out double doubleValue)\r\n        {\r\n            if (typeof(T) == typeof(decimal))\r\n            {\r\n                doubleValue = (double)(decimal)this.RealObject;\r\n                intValue = unchecked((int)doubleValue);\r\n                longValue = unchecked((long)doubleValue);\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(byte))\r\n            {\r\n                intValue = (byte)this.RealObject;\r\n                doubleValue = intValue;\r\n                longValue = intValue;\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(float))\r\n            {\r\n                doubleValue = (float)this.RealObject;\r\n                intValue = unchecked((int)doubleValue);\r\n                longValue = unchecked((long)doubleValue);\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(short))\r\n            {\r\n                intValue = (short)this.RealObject;\r\n                doubleValue = intValue;\r\n                longValue = intValue;\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(ushort))\r\n            {\r\n                intValue = (ushort)this.RealObject;\r\n                doubleValue = intValue;\r\n                longValue = intValue;\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(sbyte))\r\n            {\r\n                intValue = (sbyte)this.RealObject;\r\n                doubleValue = intValue;\r\n                longValue = intValue;\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(uint))\r\n            {\r\n                longValue = (uint)this.RealObject;\r\n                intValue = unchecked((int)longValue);\r\n                doubleValue = intValue;\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n            if (typeof(T) == typeof(ulong))\r\n            {\r\n                var real = (ulong)this.RealObject;\r\n                longValue = unchecked((long)real);\r\n                doubleValue = real;\r\n                intValue = unchecked((int)longValue);\r\n                return Convert.NumberInfo.Double | Convert.NumberInfo.IsNumber;\r\n            }\r\n\r\n            return base.ToNumber(out intValue, out longValue, out doubleValue);\r\n        }\r\n\r\n        public override int CompareTo(object obj, IComparer comparer)\r\n        {\r\n            if (typeof(T) == typeof(decimal))\r\n            {\r\n                return comparer.Compare((double)(decimal)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(byte))\r\n            {\r\n                return comparer.Compare((int)(byte)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(float))\r\n            {\r\n                return comparer.Compare((double)(float)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(short))\r\n            {\r\n                return comparer.Compare((int)(short)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(ushort))\r\n            {\r\n                return comparer.Compare((int)(ushort)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(sbyte))\r\n            {\r\n                return comparer.Compare((int)(sbyte)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(uint))\r\n            {\r\n                return comparer.Compare((long)(uint)this.RealObject, obj);\r\n            }\r\n            if (typeof(T) == typeof(ulong))\r\n            {\r\n                return comparer.Compare((double)(ulong)this.RealObject, obj);\r\n            }\r\n\r\n            return base.CompareTo(obj, comparer);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Clone\r\n\r\n        /// <summary>\r\n        /// Clone the value typed object and create new <see cref=\"ClrValue&lt;T&gt;\"/> instance containing copy of <see cref=\"realValue\"/>.\r\n        /// </summary>\r\n        /// <param name=\"caller\">Current class contetext. Ignored.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>. Ignored.</param>\r\n        /// <param name=\"deepCopyFields\"></param>\r\n        /// <returns>New instance of <see cref=\"ClrValue&lt;T&gt;\"/>.</returns>\r\n        protected override DObject CloneObjectInternal(DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n        {\r\n            return Create(realValue);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/PhpLibraryModule.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing PHP.Core.Emit;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t/// <summary>\r\n\t/// Represents loaded PHP library. Provides its configuration, implemented extensions list, etc.\r\n\t/// </summary>\r\n\tpublic sealed class PhpLibraryModule : DModule\r\n\t{\r\n\t\t#region Constants\r\n\r\n        /// <summary>\r\n        /// Suffix for dynamically generated wrapper assemblies.\r\n        /// </summary>\r\n        internal const string DynamicAssemblySuffix = \".dynamic\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// A name of the primary module of dynamic library wrappers.\r\n\t\t/// </summary>\r\n\t\tinternal const string DynamicWrapperModuleName = \"DynamicWrapper\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic PhpLibraryAssembly/*!*/ PhpLibraryAssembly { get { return (PhpLibraryAssembly)assembly; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dynamic wrapper, lazy explicit.\r\n\t\t/// </summary>\r\n\t\tpublic Assembly DynamicWrapper { get { return dynamicWrapper; } }\r\n\t\tprivate Assembly dynamicWrapper;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the loader thru <see cref=\"PhpLibraryAssembly\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal PhpLibraryModule(PhpLibraryAssembly/*!*/ assembly)\r\n\t\t\t: base(assembly)\r\n\t\t{\r\n\t\t\tthis.dynamicWrapper = null; // lazy load\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tpublic override void Reflect(bool full,\r\n\t\t\tDictionary<string, DTypeDesc>/*!*/ types,\r\n\t\t\tDictionary<string, DRoutineDesc>/*!*/ functions,\r\n\t\t\tDualDictionary<string, DConstantDesc>/*!*/ constants)\r\n\t\t{\r\n\t\t\t// TODO: functions' lazy reflection doesn't work\r\n\t\t\tfull = true;\r\n\r\n\t\t\tif (dynamicWrapper == null)\r\n\t\t\t\tthis.LoadDynamicWrapper();\r\n\r\n            Type[] real_types;\r\n\r\n            if (dynamicWrapper == null)\r\n            {\r\n                Debug.Assert(!Configuration.IsLoaded && !Configuration.IsBeingLoaded, \"No dynamic wrappers are allowed only for configuration-less reflection!\");\r\n                real_types = Assembly.RealAssembly.GetTypes();\r\n\r\n                // functions\r\n                // only argfulls\r\n            }\r\n            else\r\n            {\r\n                real_types = dynamicWrapper.GetTypes();\r\n\r\n                // functions (scan arglesses in the dynamic wrapper - full reflect needs this info as well):\r\n                foreach (Type type in real_types)\r\n                {\r\n                    if (type.Namespace == Namespaces.LibraryStubs)\r\n                        ReflectArglesses(functions, type);\r\n                }\r\n\r\n                // types are in the real assembly\r\n                if (dynamicWrapper != Assembly.RealAssembly)\r\n                    real_types = Assembly.RealAssembly.GetTypes();\r\n            }\r\n            \r\n            foreach (Type type in real_types)\r\n\t\t\t{\r\n                ReflectArgfulls(types, functions, constants, type, full);\r\n\t\t\t}\r\n\r\n            //// reflect <Module>\r\n            //if (Assembly.RealModule != null)\r\n            //{\r\n            //    ReflectGlobals(functions, constants, Assembly.RealModule);\r\n            //}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Reflect argless function stubs from the given <c>type</c>.\r\n        /// </summary>\r\n        /// <param name=\"functions\">Dictionary of functions where newly discovered functions will be placed.</param>\r\n        /// <param name=\"type\">The type to reflect function from.</param>\r\n        private void ReflectArglesses(Dictionary<string, DRoutineDesc>/*!*/functions, Type/*!*/type)\r\n        {\r\n            if (type.IsGenericTypeDefinition)\r\n                throw new ReflectionException(CoreResources.GetString(\"invalid_dynamic_wrapper_format\", dynamicWrapper.CodeBase));\r\n\r\n            foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))\r\n                AddArglessStub(functions, method, method.Name);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add the argless stub <c>method</c> into the list of functions.\r\n        /// </summary>\r\n        /// <param name=\"functions\">Dictionary of functions to insert the stub into.</param>\r\n        /// <param name=\"method\">The method of the stub.</param>\r\n        /// <param name=\"functionName\">The PHP name representing the function.</param>\r\n        private DRoutineDesc AddArglessStub(Dictionary<string, DRoutineDesc>/*!*/functions, MethodInfo/*!*/method, string/*!*/functionName)\r\n        {\r\n            RoutineDelegate argless_stub;\r\n\r\n            try\r\n            {\r\n                argless_stub = (RoutineDelegate)Delegate.CreateDelegate(typeof(RoutineDelegate), method, true);\r\n            }\r\n            catch (Exception)\r\n            {\r\n                throw new ReflectionException(CoreResources.GetString(\"invalid_dynamic_wrapper_format\", dynamicWrapper.CodeBase));\r\n            }\r\n\r\n            DRoutineDesc desc;\r\n\r\n            try\r\n            {\r\n                desc = new PhpLibraryFunctionDesc(this, argless_stub);\r\n                functions.Add(functionName, desc);\r\n                return desc;\r\n            }\r\n            catch (ArgumentNullException)\r\n            {\r\n                throw new ArgumentNullException(\"Function with <null> name passed.\");\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                throw new ArgumentException(\"Function '\" + method.Name + \"' reflected before.\");\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Reflect argfull function, PHP types and constants from given <c>type</c>.\r\n        /// </summary>\r\n        /// <param name=\"types\">Dictionary of types where newly discovered PHP types will be placed. (Types having [ImplementsType] attribute.)</param>\r\n        /// <param name=\"functions\">Dictionary of reflected functions.</param>\r\n        /// <param name=\"constants\">Dictionary of reflected constants.</param>\r\n        /// <param name=\"type\">The type to reflect functions from.</param>\r\n        /// <param name=\"full\">Whether to perform full function reflect.</param>\r\n        private void ReflectArgfulls(\r\n            Dictionary<string, DTypeDesc>/*!*/ types,\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants,\r\n            Type/*!*/type, bool full)\r\n        {\r\n            // skip generic types:\r\n            if (type.IsGenericTypeDefinition)\r\n                return;\r\n\r\n            if (PhpType.IsPhpRealType(type))\r\n            {\r\n                var dtype = PhpTypeDesc.Create(type);\r\n                types[dtype.MakeSimpleName()] = dtype;\r\n            }\r\n            \r\n            // reflect even if it is PhpType to find global functions [ImplementsFunction] and constants [ImplementsConstant]\r\n            if (IsLibraryType(type))\r\n            {\r\n                ReflectLibraryType(functions, constants, type, full);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Assuming the given <c>type</c> is Library type, reflect argfull function stubs, PHP types and constants from given <c>type</c>.\r\n        /// </summary>\r\n        /// <param name=\"functions\">Dictionary of reflected functions.</param>\r\n        /// <param name=\"constants\">Dictionary of reflected constants.</param>\r\n        /// <param name=\"type\">The type to reflect functions from.</param>\r\n        /// <param name=\"full\">Whether to perform full function reflect.</param>\r\n        private void ReflectLibraryType(\r\n            Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            DualDictionary<string, DConstantDesc>/*!*/ constants,\r\n            Type/*!*/type, bool full)\r\n        {\r\n            // functions (argfulls):\r\n            if (full && !type.IsEnum)\r\n                FullReflectFunctions(type.GetMethods(BindingFlags.Public | BindingFlags.Static), functions, true);\r\n\r\n            // constants:\r\n            ReflectConstants(type.GetFields(BindingFlags.Public | BindingFlags.Static), constants);\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Reflect <c>Module</c> with global declarations.\r\n        ///// </summary>\r\n        ///// <param name=\"functions\">Dictionary of reflected functions.</param>\r\n        ///// <param name=\"constants\">Dictionary of reflected constants.</param>\r\n        ///// <param name=\"module\">The module to reflect functions and constants from.</param>\r\n        //private void ReflectGlobals(\r\n        //    //Dictionary<string, DTypeDesc>/*!*/ types,\r\n        //    Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n        //    DualDictionary<string, DConstantDesc>/*!*/ constants,\r\n        //    Module/*!*/module)\r\n        //{\r\n        //    // functions (arglesses & argfulls):\r\n        //    FullReflectFunctions(module.GetMethods(BindingFlags.Public | BindingFlags.Static), functions, true);\r\n\r\n        //    // constants:\r\n        //    ReflectConstants(module.GetFields(BindingFlags.Public | BindingFlags.Static), constants);\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Find the MethodInfo representing argless stub for the specified method. If the method\r\n        /// is found, it will be added using <c>AddArglessStub</c>.\r\n        /// </summary>\r\n        /// <param name=\"realMethods\">List of MethodInfos to search from.</param>\r\n        /// <param name=\"functions\">Dictionary of reflected functions.</param>\r\n        /// <param name=\"method\">Argfull overload which argless stub is searched.</param>\r\n        /// <param name=\"impl_func\">ImplementsFunction attribute of tjhe <c>method</c>.</param>\r\n        /// <returns>DRoutineDesc of argless stub or null if it was not found.</returns>\r\n        private DRoutineDesc FindArglessStub(\r\n            MethodInfo[]/*!!*/ realMethods, Dictionary<string, DRoutineDesc>/*!*/ functions,\r\n            MethodInfo/*!*/method, ImplementsFunctionAttribute/*!*/impl_func)\r\n        {\r\n            foreach (var argless in realMethods)\r\n                if (argless.Name == method.Name && argless != method &&\r\n                    PhpFunctionUtils.IsArglessStub(argless, null))\r\n                {\r\n                    // we have found the argless stub for the impl_func in the realMethods list\r\n                    return AddArglessStub(functions, argless, impl_func.Name);\r\n                }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add empty argless stub just to allow initialization without dynamic wrappers.\r\n        /// </summary>\r\n        /// <param name=\"functions\"></param>\r\n        /// <param name=\"functionName\"></param>\r\n        /// <returns></returns>\r\n        private DRoutineDesc/*!*/AddEmptyArglessStub(Dictionary<string, DRoutineDesc>/*!*/functions, string functionName)\r\n        {\r\n            var desc = new PhpLibraryFunctionDesc(this, (instance, stack) => { throw new NotImplementedException(\"empty argless!\"); });\r\n            functions.Add(functionName, desc);\r\n            return desc;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reflect argfull stubs from the list of given methods.\r\n        /// </summary>\r\n        /// <param name=\"realMethods\">List of MethodInfos to reflect.</param>\r\n        /// <param name=\"functions\">Dictionary of reflected functions.</param>\r\n        /// <param name=\"lookForArgless\">True to look for argless stub in <c>realMethods</c> if argless stub was not found in <c>functions</c>.</param>\r\n\t\tprivate void FullReflectFunctions(MethodInfo[]/*!!*/ realMethods, Dictionary<string, DRoutineDesc>/*!*/ functions, bool lookForArgless)\r\n\t\t{\r\n\t\t\tint i = 0;\r\n\t\t\twhile (i < realMethods.Length)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo method = realMethods[i];\r\n\r\n\t\t\t\tif (!method.IsGenericMethodDefinition)\r\n\t\t\t\t{\r\n\t\t\t\t\tImplementsFunctionAttribute impl_func = ImplementsFunctionAttribute.Reflect(method);\r\n\t\t\t\t\tif (impl_func != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDRoutineDesc desc;\r\n\r\n                        // argless is reflected already\r\n                        // or argless was not reflected yet and can be found in realMethods list,\r\n                        // otherwise an exception is thrown:\r\n                        if (functions.TryGetValue(impl_func.Name, out desc) ||  \r\n                            (lookForArgless && (desc = FindArglessStub(realMethods, functions, method, impl_func)) != null) ||\r\n                            (!Configuration.IsLoaded && !Configuration.IsBeingLoaded && (desc = AddEmptyArglessStub(functions, impl_func.Name)) != null))\r\n                        {\r\n                            if (desc.Member == null)\r\n                            {\r\n                                // first argfull overload occurrence //\r\n\r\n                                // estimate overload count by counting subsequent methods with the same CLR name (heuristics):\r\n                                int j = i + 1;\r\n                                while (j < realMethods.Length && realMethods[j].Name == method.Name) j++;\r\n                                int estimated_overload_count = j - i;\r\n\r\n                                new PhpLibraryFunction((PhpLibraryFunctionDesc)desc, new Name(impl_func.Name), impl_func.Options,\r\n                                    estimated_overload_count);\r\n                            }\r\n\r\n                            PhpLibraryFunction.Overload overload;\r\n                            desc.PhpLibraryFunction.AddOverload(method, out overload);\r\n\r\n                            //if (NeedsArglessAttribute.IsSet(method))\r\n                            //{/* function should be called via argless stub, occurs only if library function is defined in PHP library and calls arg-aware function inside */}\r\n                        }\r\n                        else\r\n                        {\r\n                            throw new ReflectionException(CoreResources.GetString(\"invalid_class_library_wrapper\", dynamicWrapper.CodeBase));\r\n                        }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ReflectConstants(FieldInfo[]/*!!*/ realFields, DualDictionary<string, DConstantDesc>/*!*/ constants)\r\n\t\t{\r\n\t\t\tforeach (FieldInfo field in realFields)\r\n\t\t\t{\r\n                // reflect only fields with [ImplementsConstant] attribute:\r\n                ImplementsConstantAttribute impl_const = ImplementsConstantAttribute.Reflect(field);\r\n\t\t\t\tif (impl_const != null)\r\n                {\r\n                    object value;\r\n\r\n                    try\r\n                    {\r\n                        // expect the constant have literal value, otherwise crash\r\n                        value = Convert.ClrLiteralToPhpLiteral(field.GetValue(null));\r\n                    }\t\r\n                    catch(Exception)\r\n                    {\r\n                        throw new InvalidCastException();\r\n                    }\r\n\r\n                    GlobalConstant constant = new GlobalConstant(this ,new QualifiedName(new Name(impl_const.Name)), field);\r\n                    constant.SetValue(value);\r\n\r\n\t\t\t\t\tconstants[impl_const.Name, impl_const.CaseInsensitive] = constant.ConstantDesc;\r\n                }\r\n                    \r\n\r\n                //// accepts literals of PHP/CLR primitive types only:\r\n                //if (field.IsLiteral && (PhpVariable.IsLiteralPrimitiveType(field.FieldType) || field.FieldType.IsEnum))\r\n                //{\r\n                //    if (impl_const != null)\t\t\t\t\t\t\t\t\r\n                //    {\r\n                //        // ...\r\n                //    }\r\n                //}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified type is valid class library type that can contain function declarations.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsLibraryType(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (type == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"type\");\r\n\r\n\t\t\treturn (type.IsPublic || type.IsNestedPublic) && type.Namespace != null &&\r\n\t\t\t\ttype.Namespace.StartsWith(Namespaces.Library) && !type.IsGenericTypeDefinition;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Dynamic Wrapper Loading\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a dynamic wrapper of a specified library assembly.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The dynamic wrapper assembly.</returns>\r\n\t\t/// <remarks>Thread safe.</remarks>\r\n\t\tpublic void LoadDynamicWrapper()\r\n\t\t{\r\n\t\t\tif (dynamicWrapper != null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tAssembly real_assembly = PhpLibraryAssembly.RealAssembly;\r\n\t\t\t\r\n\t\t\tif (PhpLibraryAssembly.Properties.ContainsDynamicStubs)\r\n\t\t\t{\r\n\t\t\t\tdynamicWrapper = real_assembly;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n#if SILVERLIGHT\r\n\t\t\tthis.dynamicWrapper = LibraryBuilder.CreateDynamicWrapper(real_assembly);\r\n#else\r\n            if (!Configuration.IsLoaded && !Configuration.IsBeingLoaded) { return; } // continue without wrappers !! (VS Integration does not need it)\r\n\t\t\tstring wrappers_dir = Configuration.GetPathsNoLoad().DynamicWrappers;\r\n\r\n            // determine wrapper file name,\r\n            // we are looking for an up-to-date wrapper or a writable location:\r\n            string wrapper_file = DetermineDynamicWrapperFileName(wrappers_dir, real_assembly);\r\n            string wrapper_fullfile = Path.Combine(wrappers_dir, wrapper_file);\r\n\r\n            // \r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// builds wrapper if it doesn't exist:\r\n                if (!IsDynamicWrapperUpToDate(real_assembly, wrapper_fullfile))\r\n\t\t\t\t{\r\n                    Mutex mutex = new Mutex(false, String.Concat(@\"Global\\\", wrapper_fullfile.ToLowerInvariant().Replace('\\\\', '/').Replace(':', '+')));   // do not use \\ and : characters, to not confuse Mutex with file system which may not be accessible in this moment\r\n\t\t\t\t\tmutex.WaitOne();\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if the file still does not exist, we are in charge!\r\n                        if (!IsDynamicWrapperUpToDate(real_assembly, wrapper_fullfile))\r\n                            LibraryBuilder.CreateDynamicWrapper(real_assembly, wrappers_dir, wrapper_file);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfinally\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmutex.ReleaseMutex();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// loads wrapper:\r\n                this.dynamicWrapper = System.Reflection.Assembly.LoadFrom(wrapper_fullfile);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n                throw new DynamicWrapperLoadException(wrapper_fullfile, e);\r\n\t\t\t}\r\n#endif\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// An exception thrown when dynamic wrapper cannot be loaded.\r\n\t\t/// </summary>\r\n\t\tpublic class DynamicWrapperLoadException : Exception\r\n\t\t{\r\n\t\t\tinternal DynamicWrapperLoadException(string wrapperName, Exception inner)\r\n\t\t\t\t: base(CoreResources.GetString(\"dynamic_wrapper_loading_failed\", wrapperName), inner)\r\n\t\t\t{\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Supporting Stuff\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified type implements some extension in this library and returns its name if so.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type.</param>\r\n\t\t/// <returns>A name of the extension which is partly or entirely implemented by the <paramref name=\"type\"/>.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"type\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic string GetImplementedExtension(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (type == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"type\");\r\n\r\n            // make sure this type belongs to this library\r\n            if (!PhpLibraryModule.IsLibraryType(type))\r\n                return null;\r\n\r\n            do\r\n            {\r\n\t\t\t    object[] attrs = type.GetCustomAttributes(typeof(ImplementsExtensionAttribute), false);\r\n\t\t\t    \r\n                if (attrs.Length == 1) \r\n                    return ((ImplementsExtensionAttribute)attrs[0]).Name;\r\n\r\n                type = type.DeclaringType;\r\n            }\r\n            while (type != null);//loop because of nested enum types ( e.g. in ClassLibrary )\r\n\r\n            return PhpLibraryAssembly.DefaultExtension;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get the dynamic wrapper file name based on the given extension assembly.\r\n        /// </summary>\r\n        /// <param name=\"ass\">Extension assembly which dynamic wrapper file is needed.</param>\r\n        /// <param name=\"version\">Wrapper version to to be appended to the file name.</param>\r\n        /// <returns>Dynamic wrapper assembly file name corresponding to given <paramref name=\"ass\"/>.</returns>\r\n        public static string/*!*/DynamicWrapperFileName(Assembly/*!*/ass, int version)\r\n        {\r\n            var name = ass.GetName(false);\r\n            return String.Concat(name.Name, DynamicAssemblySuffix, (version > 0) ? version.ToString() : string.Empty  ,\".dll\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine file name to be use for dynamic wrapper. The resulting file has to not exists, be writable or up-to-date.\r\n        /// </summary>\r\n        /// <param name=\"wrappers_dir\">Directory with dynamic wrappers.</param>\r\n        /// <param name=\"ass\">Class library assembly.</param>\r\n        /// <returns>File name (relatively to <paramref name=\"wrappers_dir\"/>) for dyamic wrapper.</returns>\r\n        private static string/*!*/DetermineDynamicWrapperFileName(string/*!*/wrappers_dir, Assembly/*!*/ass)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(wrappers_dir));\r\n            Debug.Assert(ass != null);\r\n\r\n            for (int version = 0; ; version++)\r\n            {\r\n                var fname = DynamicWrapperFileName(ass, version);\r\n                var fullname = Path.Combine(wrappers_dir, fname);\r\n\r\n                if (!File.Exists(fullname) || IsDynamicWrapperUpToDate(ass, fullname) || FileIsWritable(fullname))\r\n                    return fname;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine whether given <paramref name=\"filename\"/> can be overwritten.\r\n        /// </summary>\r\n        /// <param name=\"filename\">Full file name to be checked.</param>\r\n        /// <returns><c>True</c> if file can be overwritten.</returns>\r\n        private static bool FileIsWritable(string/*!*/filename)\r\n        {\r\n            try\r\n            {\r\n                using (var stream = File.OpenWrite(filename))\r\n                { }\r\n                return true;\r\n            }\r\n            catch(IOException){}    // how else determine the file is writable ??\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check wheter dynamic wrapper for given <see cref=\"Assembly\"/> <paramref name=\"ass\"/> does exist and is up to date.\r\n        /// </summary>\r\n        /// <param name=\"ass\">Class library assembly.</param>\r\n        /// <param name=\"wrapper_name\">Wrapper file name corresponding to the given assembly <paramref name=\"ass\"/>.</param>\r\n        /// <returns>True iff there is a valid up-to-date dynamic wrapper for given assembly.</returns>\r\n        private static bool IsDynamicWrapperUpToDate(Assembly/*!*/ass, string/*!*/wrapper_name)\r\n        {\r\n            Debug.Assert(ass != null);\r\n            Debug.Assert(wrapper_name != null);\r\n\r\n            if (File.Exists(wrapper_name))\r\n            {\r\n                if (FileSystemUtils.GetLastModifiedTimeUtc(ass.Location) < FileSystemUtils.GetLastModifiedTimeUtc(wrapper_name))\r\n                    return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Properties.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n#if !SILVERLIGHT\r\n    //#define DEBUG_DYNAMIC_STUBS\r\n#endif\r\n#define EMIT_VERIFIABLE_STUBS\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region DPropertyDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic class DPropertyDesc : DMemberDesc\r\n\t{\r\n\t\tpublic DProperty Property { get { return (DProperty)Member; } }\r\n\t\tpublic PhpField PhpField { get { return (PhpField)Member; } }\r\n\t\tpublic ClrProperty ClrProperty { get { return (ClrProperty)Member; } }\r\n\t\tpublic ClrField ClrField { get { return (ClrField)Member; } }\r\n\r\n\t\tprotected GetterDelegate GetterStub\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_getterStub == null) _getterStub = GenerateGetterStub();\r\n\t\t\t\treturn _getterStub;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected GetterDelegate _getterStub = null;\r\n\r\n\t\tprotected SetterDelegate SetterStub\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_setterStub == null) _setterStub = GenerateSetterStub();\r\n\t\t\t\treturn _setterStub;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected SetterDelegate _setterStub = null;\r\n\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler and full-reflect.\r\n\t\t/// </summary>\r\n\t\tinternal DPropertyDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringType, memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\t\t\tthis._getterStub = null; // to be generated on demand\r\n\t\t\tthis._setterStub = null; // to be generated on demand\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Error-throwing setters and getters\r\n\r\n        private void EventSetter(object instance, object value)\r\n        {\r\n            PhpException.Throw(\r\n                PhpError.Error,\r\n                string.Format(CoreResources.event_written, DeclaringType.MakeFullName(), MakeFullName()));\r\n        }\r\n\r\n        private void MissingSetter(object instance, object value)\r\n        {\r\n            PhpException.Throw(\r\n                PhpError.Error,\r\n                string.Format(CoreResources.readonly_property_written, DeclaringType.MakeFullName(), MakeFullName()));\r\n        }\r\n\r\n        private object MissingGetter(object instance)\r\n        {\r\n            PhpException.Throw(\r\n                PhpError.Error,\r\n                string.Format(CoreResources.writeonly_property_read, DeclaringType.MakeFullName(), MakeFullName()));\r\n\r\n            return null;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal void EmitSetConversion(ILEmitter/*!*/ il, PhpTypeCode sourceTypeCode, Type/*!*/ targetType)\r\n\t\t{\r\n\t\t\tLocalBuilder strictness = il.GetTemporaryLocal(typeof(PHP.Core.ConvertToClr.ConversionStrictness));\r\n\t\t\tif (!ClrOverloadBuilder.EmitConvertToClr(il, sourceTypeCode, targetType, strictness))\r\n\t\t\t{\r\n\t\t\t\tLabel label_ok = il.DefineLabel();\r\n\r\n\t\t\t\til.Ldloc(strictness);\r\n\t\t\t\til.LdcI4((int)PHP.Core.ConvertToClr.ConversionStrictness.Failed);\r\n\t\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, label_ok);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ldstr, Property.DeclaringType.FullName);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, Property.FullName);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpException.PropertyTypeMismatch);\r\n\r\n\t\t\t\til.MarkLabel(label_ok, true);\r\n\t\t\t}\r\n\t\t\til.ReturnTemporaryLocal(strictness);\r\n\t\t}\r\n\r\n\t\tprotected virtual GetterDelegate/*!*/ GenerateGetterStub()\r\n\t\t{\r\n#if SILVERLIGHT\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^GetterStub>\", Types.Object[0], Types.Object);\r\n#else\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^GetterStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n\t\t\t\tTypes.Object[0], Types.Object, this.declaringType.RealType, true);\r\n#endif\r\n\r\n\t\t\tILEmitter il = new ILEmitter(stub);\r\n\r\n\t\t\tClrEvent clr_event;\r\n\t\t\tClrProperty clr_property;\r\n\r\n\t\t\tType result_type;\r\n\r\n\t\t\tif ((clr_event = Member as ClrEvent) != null)\r\n\t\t\t{\r\n                Debug.Assert(!declaringType.RealType.IsValueType, \"Value type with ClrEvent not handled! TODO: arg(0) is ClrValue<T>.\");\r\n\r\n\t\t\t\tLocalBuilder temp = il.DeclareLocal(declaringType.RealType);\r\n\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Emit(OpCodes.Castclass, declaringType.RealType);\r\n\t\t\t\til.Stloc(temp);\r\n\r\n\t\t\t\tclr_event.EmitGetEventObject(il, new Place(null, Properties.ScriptContext_CurrentContext),\r\n\t\t\t\t\tnew Place(temp), true);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif ((clr_property = Member as ClrProperty) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// return error-throwing getter if the property is write-only\r\n\t\t\t\t\tif (!clr_property.HasGetter) return new GetterDelegate(MissingGetter);\r\n\r\n\t\t\t\t\tif (!clr_property.Getter.IsStatic)\r\n\t\t\t\t\t{\r\n                        ClrOverloadBuilder.EmitLoadInstance(il, IndexedPlace.ThisArg, declaringType.RealType);\r\n//                        il.Emit(OpCodes.Ldarg_0);\r\n\t\t\t\t\t\t\r\n//                        if (declaringType.RealType.IsValueType) \r\n//                            il.Emit(OpCodes.Unbox, declaringType.RealType);\r\n//#if EMIT_VERIFIABLE_STUBS\r\n//                        else\r\n//                            il.Emit(OpCodes.Castclass, this.declaringType.RealType);\r\n//#endif\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\til.Emit(OpCodes.Call, clr_property.Getter);\r\n\r\n\t\t\t\t\tresult_type = clr_property.Getter.ReturnType;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tClrField clr_field = ClrField;\r\n\r\n\t\t\t\t\tif (!clr_field.FieldInfo.IsStatic)\r\n\t\t\t\t\t{\r\n                        ClrOverloadBuilder.EmitLoadInstance(il, IndexedPlace.ThisArg, declaringType.RealType);\r\n                        //il.Emit(OpCodes.Ldarg_0);\r\n                        ////il.Emit(OpCodes.Castclass, this.declaringType.RealType);\r\n\r\n                        //if (declaringType.RealType.IsValueType) il.Emit(OpCodes.Unbox, declaringType.RealType);\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldfld, clr_field.FieldInfo);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldsfld, clr_field.FieldInfo);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult_type = clr_field.FieldInfo.FieldType;\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.EmitBoxing(ClrOverloadBuilder.EmitConvertToPhp(il, result_type/*, null*/));\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\treturn (GetterDelegate)stub.CreateDelegate(typeof(GetterDelegate));\r\n\t\t}\r\n\r\n\t\tprotected virtual SetterDelegate/*!*/ GenerateSetterStub()\r\n\t\t{\r\n\t\t\tif (Member is ClrEvent) return new SetterDelegate(EventSetter);\r\n\r\n#if SILVERLIGHT\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^SetterStub>\", Types.Void, Types.Object_Object);\r\n\r\n            /*DynamicMethod stub = new DynamicMethod(\"<^SetterStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n                Types.Void, Types.Object_Object, this.declaringType.RealType, true);*/\r\n#else\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^SetterStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n\t\t\t\tTypes.Void, Types.Object_Object, this.declaringType.RealType, true);\r\n#endif\r\n#if DEBUG_DYNAMIC_STUBS\r\n\r\n\t\t\t// Debugging - save the generated stub to TEMP\r\n\t\t\tAssemblyName name = new AssemblyName(\"SetterStub_\" + Property.FullName.ToString().Replace(':', '_'));\r\n\t\t\tAssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save, \"C:\\\\Temp\");\r\n\t\t\tModuleBuilder mb = ab.DefineDynamicModule(name.Name, name.Name + \".dll\");\r\n\t\t\tTypeBuilder tb = mb.DefineType(\"Stub\");\r\n\t\t\tMethodBuilder meb = tb.DefineMethod(DeclaringType.ToString() + \"::\" + Property.FullName,\r\n\t\t\t\tMethodAttributes.PrivateScope | MethodAttributes.Static, Types.Void, Types.Object_Object);\r\n\r\n\t\t\tILEmitter il_dbg = new ILEmitter(meb);\r\n\t\t\tIndexedPlace instance2 = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\t\tIndexedPlace stack = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\tClrProperty clr_property_dbg = Member as ClrProperty;\r\n\t\t\tif (clr_property_dbg != null && clr_property_dbg.HasSetter)\r\n\t\t\t{\r\n\t\t\t\tif (!clr_property_dbg.Setter.IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\til_dbg.Emit(OpCodes.Ldarg_0);\r\n                    if (declaringType.RealType.IsValueType)\r\n                        il_dbg.Emit(OpCodes.Unbox, declaringType.RealType);\r\n#if EMIT_VERIFIABLE_STUBS\r\n                    else\r\n                        il_dbg.Emit(OpCodes.Castclass, declaringType.RealType);\r\n#endif\r\n\t\t\t\t}\r\n\t\t\t\til_dbg.Emit(OpCodes.Ldarg_1);\r\n\t\t\t\tEmitSetConversion(il_dbg, PhpTypeCode.Object, clr_property_dbg.Setter.GetParameters()[0].ParameterType);\r\n\t\t\t\til_dbg.Emit(OpCodes.Call, clr_property_dbg.Setter);\r\n\t\t\t}\r\n\r\n\t\t\til_dbg.Emit(OpCodes.Ret);\r\n\t\t\ttb.CreateType();\r\n\t\t\tab.Save(\"SetterStub_\" + Property.FullName.ToString().Replace(':', '_') + \".dll\");\r\n#endif\r\n\r\n\t\t\tILEmitter il = new ILEmitter(stub);\r\n\r\n\t\t\tClrProperty clr_property = Member as ClrProperty;\r\n\t\t\tType arg_type;\r\n\r\n\t\t\tif (clr_property != null)\r\n\t\t\t{\r\n\t\t\t\t// return error-throwing setter if the property is read-only\r\n\t\t\t\tif (!clr_property.HasSetter) return new SetterDelegate(MissingSetter);\r\n\r\n\t\t\t\tif (!clr_property.Setter.IsStatic)\r\n\t\t\t\t{\r\n                    ClrOverloadBuilder.EmitLoadInstance(il, IndexedPlace.ThisArg, declaringType.RealType);\r\n//                    il.Emit(OpCodes.Ldarg_0);\r\n\r\n//                    if (declaringType.RealType.IsValueType) \r\n//                        il.Emit(OpCodes.Unbox, declaringType.RealType);\r\n//#if EMIT_VERIFIABLE_STUBS\r\n//                    else\r\n//                        il.Emit(OpCodes.Castclass, declaringType.RealType);\r\n//#endif\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\r\n\t\t\t\targ_type = clr_property.Setter.GetParameters()[0].ParameterType;\r\n\t\t\t\tEmitSetConversion(il, PhpTypeCode.Object, arg_type);\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, clr_property.Setter);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tClrField clr_field = ClrField;\r\n\r\n\t\t\t\t// return error-throwing setter if the field is initonly\r\n\t\t\t\tif (clr_field.FieldInfo.IsInitOnly) return new SetterDelegate(MissingSetter);\r\n\r\n\t\t\t\tif (!clr_field.FieldInfo.IsStatic)\r\n\t\t\t\t{\r\n                    ClrOverloadBuilder.EmitLoadInstance(il, IndexedPlace.ThisArg, declaringType.RealType);\r\n                    //il.Emit(OpCodes.Ldarg_0);\r\n                    ////il.Emit(OpCodes.Castclass, this.declaringType.RealType);\r\n\r\n                    //if (declaringType.RealType.IsValueType) il.Emit(OpCodes.Unbox, declaringType.RealType);\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\r\n\t\t\t\targ_type = clr_field.FieldInfo.FieldType;\r\n\t\t\t\tEmitSetConversion(il, PhpTypeCode.Object, arg_type);\r\n\r\n\t\t\t\til.Emit((clr_field.FieldInfo.IsStatic ? OpCodes.Stsfld : OpCodes.Stfld), clr_field.FieldInfo);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\treturn (SetterDelegate)stub.CreateDelegate(typeof(SetterDelegate));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic virtual object Get(DObject instance)\r\n\t\t{\r\n            return GetterStub((instance == null ? null : instance.InstanceObject));\r\n\t\t}\r\n\r\n        #region nested class: ClrPrintableValue\r\n\r\n        /// <summary>\r\n        /// Get operation used for <see cref=\"IPhpPrintable\"/> operations.\r\n        /// </summary>\r\n        /// <param name=\"instance\">Reference to <c>self</c> instance.</param>\r\n        /// <returns>Value of this property.</returns>\r\n        /// <remarks>Value of CLR properties are wrapped into <see cref=\"ClrPrintableValue\"/> avoiding infinite recursion and displaying values converted to string if necessary.</remarks>\r\n        public virtual object DumpGet(DObject instance)\r\n        {\r\n            var value = this.Get(instance);\r\n\r\n            if (this.Member is ClrProperty)\r\n                return new ClrPrintableValue(value);\r\n            else\r\n                return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wraps CLR property value to stop recursion and display the value as a string. Same as VisualStudio's Immediate Window.\r\n        /// </summary>\r\n        private class ClrPrintableValue : IPhpPrintable\r\n        {\r\n            #region Fields & Properties\r\n\r\n            private readonly object value;\r\n\r\n            /// <summary>\r\n            /// Determines whether <see cref=\"value\"/> is primitive type and can be printed as it is. Otherwise the <see cref=\"value\"/> should be evaluated to string to be printed.\r\n            /// </summary>\r\n            private bool OverridePrint { get { return value != null && !PhpVariable.IsPrimitiveType(value.GetType()); } }\r\n\r\n            /// <summary>\r\n            /// Converts <see cref=\"value\"/> to string enclosed with { and }.\r\n            /// </summary>\r\n            private string ValueString { get { if (value == null) throw new ArgumentNullException(\"value\"); return string.Format(\"{{{0}}}\", value.ToString()); } }\r\n\r\n            #endregion\r\n\r\n            #region constructor\r\n\r\n            public ClrPrintableValue(object value)\r\n            {\r\n                this.value = value;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region IPhpPrintable\r\n\r\n            public void Print(System.IO.TextWriter output)\r\n            {\r\n                if (OverridePrint)\r\n                    output.WriteLine(ValueString);\r\n                else\r\n                    PhpVariable.Print(value);\r\n            }\r\n\r\n            public void Dump(System.IO.TextWriter output)\r\n            {\r\n                if (OverridePrint)\r\n                    output.WriteLine(ValueString);\r\n                else\r\n                    PhpVariable.Dump(value);\r\n            }\r\n\r\n            public void Export(System.IO.TextWriter output)\r\n            {\r\n                if (OverridePrint)\r\n                    output.Write(ValueString);\r\n                else\r\n                    PhpVariable.Export(value);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// If the property is an unset <see cref=\"PhpReference\"/>, it is returned (no modification takes place),\r\n\t\t/// otherwise <B>null</B> is returned (and the new value is written to the property).\r\n\t\t/// </summary>\r\n\t\tpublic virtual PhpReference Set(DObject instance, object value)\r\n\t\t{\r\n            SetterStub((instance == null ? null : instance.InstanceObject), value);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic virtual void EnsureInitialized(ScriptContext/*!*/ context)\r\n\t\t{ }\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n            var knownProperty = this.Member as KnownProperty;\r\n            return (knownProperty != null) ? knownProperty.FullName : LookupFullName();\r\n\t\t}\r\n\r\n        private string LookupFullName()\r\n        {\r\n            // TODO:\r\n            // didn't work:\r\n            //return (_setterStub != null) ?\r\n            //    _setterStub.GetUserEntryPoint.Name.Substring(\"set_\".Length) : _getterStub.GetUserEntryPoint.Name.Substring(\"get_\".Length); \r\n\r\n            // brute force:\r\n            foreach (KeyValuePair<VariableName, DPropertyDesc> pair in DeclaringType.Properties)\r\n            {\r\n                if (pair.Value == this) return pair.Key.ToString();\r\n            }\r\n\r\n            return \"<Unknown>\";\r\n        }\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n\t\t\t// properties cannot have generic parameters:\r\n\t\t\treturn MakeFullName();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DPhpFieldDesc\r\n\r\n    [DebuggerNonUserCode]\r\n    public sealed class DPhpFieldDesc : DPropertyDesc\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by type population.\r\n\t\t/// </summary>\r\n\t\tinternal DPhpFieldDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n\t\t\tGetterDelegate getterStub, SetterDelegate setterStub)\r\n\t\t\t: base(declaringType, memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null && (getterStub != null || setterStub != null));\r\n\r\n\t\t\tthis._getterStub = getterStub;\r\n\t\t\tthis._setterStub = setterStub;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full reflection.\r\n\t\t/// </summary>\r\n\t\tinternal DPhpFieldDesc(DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringType, memberAttributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null);\r\n\r\n\t\t\t// stubs generated on-demand as dynamic methods\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission (runtime getter/setter stubs)\r\n\r\n\t\tprotected override GetterDelegate GenerateGetterStub()\r\n\t\t{\r\n#if SILVERLIGHT\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^GetterStub>\", Types.Object[0], Types.Object);\r\n#else\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^GetterStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n\t\t\t\tTypes.Object[0], Types.Object, this.declaringType.RealType, true);\r\n#endif\r\n\r\n            Debug.Assert(Member != null, \"Populated field does not have a member!\");\r\n\r\n            if (this.Member is PhpField)\r\n                PhpFieldBuilder.EmitGetterStub(new ILEmitter(stub), PhpField.RealField, declaringType.RealType);\r\n            else if (this.Member is PhpVisibleProperty)\r\n                PhpFieldBuilder.EmitGetterStub(new ILEmitter(stub), ((PhpVisibleProperty)Member).RealProperty, declaringType.RealType);\r\n            else\r\n                throw new NotImplementedException();\r\n\r\n\t\t\treturn (GetterDelegate)stub.CreateDelegate(typeof(GetterDelegate));\r\n\t\t}\r\n\r\n\t\tprotected override SetterDelegate GenerateSetterStub()\r\n\t\t{\r\n\t\t\tDynamicMethod stub = new DynamicMethod(\"<^SetterStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n\t\t\t\tTypes.Void, Types.Object_Object, this.declaringType.RealType, true);\r\n\r\n            Debug.Assert(Member != null, \"Populated field does not have a member!\");\r\n\r\n            if (this.Member is PhpField)\r\n\t\t\t    PhpFieldBuilder.EmitSetterStub(new ILEmitter(stub), PhpField.RealField, declaringType.RealType);\r\n            else if (this.Member is PhpVisibleProperty)\r\n                PhpFieldBuilder.EmitSetterStub(new ILEmitter(stub), ((PhpVisibleProperty)Member).RealProperty, declaringType.RealType);\r\n            else\r\n                throw new NotImplementedException();\r\n\r\n\t\t\treturn (SetterDelegate)stub.CreateDelegate(typeof(SetterDelegate));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic override PhpReference Set(DObject instance, object value)\r\n\t\t{\r\n\t\t\tPhpReference reference = value as PhpReference;\r\n\t\t\tif (reference != null)\r\n\t\t\t{\r\n\t\t\t\tbase.Set(instance, reference);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treference = base.Get(instance) as PhpReference;\r\n\r\n\t\t\t\tif (reference != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!reference.IsSet) return reference;\r\n\r\n\t\t\t\t\treference.Value = value;\r\n\t\t\t\t\treference.IsSet = true;\r\n\t\t\t\t}\r\n\t\t\t\telse base.Set(instance, new PhpSmartReference(value));\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override void EnsureInitialized(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (IsThreadStatic)\r\n\t\t\t{\r\n\t\t\t\tPhpTypeDesc php_desc = (PhpTypeDesc)declaringType;\r\n\r\n\t\t\t\tif (IsPrivate) php_desc.EnsureThreadStaticFieldsInitialized(context);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// invoke __InitializeStaticFields on all PHP base classes, since we don't know which\r\n\t\t\t\t\t// of them implements this field\r\n\t\t\t\t\tdo\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tphp_desc.EnsureThreadStaticFieldsInitialized(context);\r\n\t\t\t\t\t\tphp_desc = php_desc.Base as PhpTypeDesc;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (php_desc != null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DProperty\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DProperty : DMember\r\n\t{\r\n\t\tpublic sealed override bool IsDefinite { get { return IsIdentityDefinite; } }\r\n\r\n\t\tpublic DPropertyDesc/*!*/ PropertyDesc { get { return (DPropertyDesc)memberDesc; } }\r\n\r\n\t\tpublic abstract MemberInfo RealMember { get; }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by subclasses when creating known routines.\r\n\t\t/// </summary>\r\n\t\tpublic DProperty(DPropertyDesc/*!*/ propertyDesc)\r\n\t\t\t: base(propertyDesc)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by subclasses when creating unknown routines.\r\n\t\t/// </summary>\r\n\t\tpublic DProperty(string/*!*/ fullName)\r\n\t\t\t: base(null, fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsUnknown);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tinternal override void ReportAbstractNotImplemented(ErrorSink/*!*/ errors, DType/*!*/ declaringType, PhpType/*!*/ referringType)\r\n\t\t{\r\n\t\t\terrors.Add(Errors.AbstractPropertyNotImplemented, referringType.Declaration.SourceUnit,\r\n\t\t\t\treferringType.Declaration.Span, referringType.FullName, declaringType.MakeFullGenericName(), this.FullName);\r\n\r\n\t\t\tReportError(errors, Errors.RelatedLocation);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal abstract PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck);\r\n\r\n\t\tinternal abstract AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck);\r\n\r\n\t\tinternal abstract void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace/*!*/ instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck);\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region KnownProperty\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class KnownProperty : DProperty\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate VariableName name;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by subclasses.\r\n\t\t/// </summary>\r\n\t\tprotected KnownProperty(DPropertyDesc/*!*/ propertyDesc, VariableName name)\r\n\t\t\t: base(propertyDesc)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\r\n\t\t\t// TODO\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn name.Value;\r\n\t\t}\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tinternal override DMemberRef GetImplementationInSuperTypes(DType/*!*/ type, bool searchSupertypes, ref bool inSupertype)\r\n\t\t{\r\n\t\t\twhile (type != null && !type.IsUnknown)\r\n\t\t\t{\r\n\t\t\t\tKnownProperty result = type.GetDeclaredProperty<KnownProperty>(this.Name);\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// private members are not visible from subtype:\r\n\t\t\t\t\tif (result.IsPrivate && inSupertype) break;\r\n\r\n\t\t\t\t\treturn new DMemberRef(result, type);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!searchSupertypes) break;\r\n\t\t\t\tinSupertype = true;\r\n\t\t\t\ttype = type.Base;\r\n\t\t\t}\r\n\r\n\t\t\tinSupertype = false;\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownProperty\r\n\r\n\tpublic sealed class UnknownProperty : DProperty\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\r\n\t\tpublic override MemberInfo RealMember { get { return null; } }\r\n\r\n\t\tpublic override DType/*!*/ DeclaringType { get { return declaringType; } }\r\n\t\tprivate readonly DType/*!*/ declaringType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler for unresolved properties.\r\n\t\t/// </summary>\r\n\t\tpublic UnknownProperty(DType/*!*/ declaringType, string/*!*/ name)\r\n\t\t\t: base(name)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringType != null && name != null);\r\n\r\n\t\t\tthis.declaringType = declaringType;\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Full name is set by .ctor\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\treturn codeGenerator.EmitGetStaticPropertyOperator(declaringType, this.FullName, null, wantRef);\r\n\t\t}\r\n\r\n\t\tinternal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\treturn codeGenerator.EmitSetStaticPropertyOperator(declaringType, this.FullName, null, isRef);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitUnsetStaticPropertyOperator(declaringType, this.FullName, null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpField, PhpFieldBuilder, PhpVisibleProperty\r\n\r\n\tpublic sealed class PhpField : KnownProperty, IPhpMember\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\tpublic override MemberInfo RealMember { get { return realField; } }\r\n\r\n\t\tpublic FieldInfo RealField { get { return realField; } }\r\n\t\tpublic FieldBuilder RealFieldBuilder { get { return (FieldBuilder)realField; } }\r\n\t\tprivate FieldInfo realField;\r\n\r\n\t\tpublic PropertyInfo ExportedProperty { get { return exportedProperty; } }\r\n\t\tpublic PropertyBuilder ExportedPropertyBuilder { get { return (PropertyBuilder)exportedProperty; } }\r\n\t\tprivate PropertyInfo exportedProperty;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Should be used internally for validation only. Valid fields doesn't have these attributes.\r\n\t\t/// </summary>\r\n\t\tprivate new bool IsAbstract { get { return memberDesc.IsAbstract; } }\r\n\t\tprivate new bool IsFinal { get { return memberDesc.IsFinal; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting.\r\n\t\t/// <c>Position.Invalid</c> for reflected PHP fields.\r\n\t\t/// </summary>\r\n        public Text.Span Span { get { return span; } }\r\n        private readonly Text.Span span;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Error reporting (for partial classes).\r\n\t\t/// <B>null</B> for reflected PHP fields.\r\n\t\t/// </summary>\r\n\t\tpublic SourceUnit SourceUnit { get { return sourceUnit; } }\r\n\t\tprivate readonly SourceUnit sourceUnit;\r\n\r\n\t\tpublic bool HasInitialValue { get { return hasInitialValue; } }\r\n\t\tprivate readonly bool hasInitialValue;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"PhpType\"/> that implements this field, i.e. provides storage for it.\r\n\t\t/// </summary>\r\n\t\tpublic PhpType/*!*/ Implementor\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (implementor == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(builder != null);\r\n\r\n                    PhpField overriding;\r\n\t\t\t\t\t\r\n                    // Find the type, that provides storage for the field\r\n                    if (this.IsStatic || overrides == null ||\r\n                        (overriding = overrides.Member as PhpField) == null || overriding.IsPrivate)\r\n                        implementor = DeclaringPhpType;         // use/create FieldInfo in declaring type\r\n\t\t\t\t\telse\r\n                        implementor = overriding.Implementor;   // use FieldInfo from derivated type\r\n\t\t\t\t}\r\n\t\t\t\treturn implementor;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate PhpType implementor;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B> iff this is a public field overriding a protected field.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>Valid after <see cref=\"DefineBuilders\"/>.</remarks>\r\n\t\tpublic bool UpgradesVisibility { get { return upgradesVisibility; } }\r\n\t\tprivate bool upgradesVisibility;\r\n\r\n\t\tinternal DMemberRef Overrides { get { return overrides; } set /* PhpType.Validate */ { overrides = value; } }\r\n\t\tprivate DMemberRef overrides;\r\n\r\n\t\tinternal List<DMemberRef> Implements { get { return implements; } }\r\n\t\tprivate List<DMemberRef> implements;\r\n\r\n\t\tinternal PhpFieldBuilder Builder { get { return builder; } }\r\n\t\tprivate readonly PhpFieldBuilder builder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the field is exported.\r\n\t\t/// </summary>\r\n\t\tinternal bool IsExported { get { return builder.ExportInfo != null || this.DeclaringPhpType.IsExported; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by compiler.\r\n\t\t/// </summary>\r\n\t\tpublic PhpField(VariableName name, DTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n            bool hasInitialValue, SourceUnit/*!*/ sourceUnit, Text.Span position)\r\n\t\t\t: base(new DPhpFieldDesc(declaringType, memberAttributes), name)\r\n\t\t{\r\n\t\t\tthis.hasInitialValue = hasInitialValue;\r\n\t\t\tthis.span = position;\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t\tthis.builder = new PhpFieldBuilder(this);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full reflection.\r\n\t\t/// </summary>\r\n\t\tpublic PhpField(VariableName name, DPropertyDesc/*!*/ fieldDesc, FieldInfo/*!*/ fieldInfo,\r\n\t\t\tPropertyInfo exportedProperty)\r\n\t\t\t: base(fieldDesc, name)\r\n\t\t{\r\n\t\t\tDebug.Assert(fieldDesc is DPhpFieldDesc);\r\n\r\n\t\t\tthis.realField = fieldInfo;\r\n\t\t\tthis.exportedProperty = exportedProperty;\r\n\t\t\tthis.hasInitialValue = realField.IsDefined(typeof(PhpHasInitValueAttribute), false);\r\n\t\t\tthis.builder = null;\r\n\r\n\t\t\tthis.implementor = DeclaringPhpType;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full reflection for fields that are not implemented by their declaring type.\r\n\t\t/// <seealso cref=\"PhpPublicFieldAttribute\"/>\r\n\t\t/// </summary>\r\n\t\tpublic PhpField(VariableName name, DPropertyDesc/*!*/ fieldDesc, DPropertyDesc/*!*/ implementingFieldDesc,\r\n\t\t\tbool hasInitialValue, PropertyInfo exportedProperty)\r\n\t\t\t: base(fieldDesc, name)\r\n\t\t{\r\n\t\t\tDebug.Assert(fieldDesc is DPhpFieldDesc);\r\n\r\n\t\t\tthis.realField = implementingFieldDesc.PhpField.RealField;\r\n\t\t\tthis.exportedProperty = exportedProperty;\r\n\t\t\tthis.hasInitialValue = hasInitialValue;\r\n\t\t\tthis.builder = null;\r\n\r\n\t\t\tthis.implementor = implementingFieldDesc.DeclaringType.PhpType;\r\n\t\t\tthis.upgradesVisibility = (IsPublic && implementingFieldDesc.IsProtected);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tinternal override void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n\t\t{\r\n\t\t\tif (sourceUnit != null)\r\n\t\t\t\tsink.Add(error, SourceUnit, span);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tinternal override void AddAbstractOverride(DMemberRef/*!*/ abstractProperty)\r\n\t\t{\r\n\t\t\tif (abstractProperty.Member.DeclaringType.IsInterface)\r\n\t\t\t{\r\n\t\t\t\tif (implements == null)\r\n\t\t\t\t\timplements = new List<DMemberRef>();\r\n\r\n\t\t\t\timplements.Add(abstractProperty);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\toverrides = abstractProperty;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\tinternal void Validate(SourceUnit/*!*/ sourceUnit, ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDebug.Assert(span.IsValid);\r\n\r\n\t\t\t// no abstract fields:\r\n\t\t\tif (IsAbstract)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PropertyDeclaredAbstract, SourceUnit, span);\r\n\t\t\t\tmemberDesc.MemberAttributes &= ~PhpMemberAttributes.Abstract;\r\n\t\t\t}\r\n\r\n\t\t\t// no final fields:\r\n\t\t\tif (IsFinal)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PropertyDeclaredFinal, SourceUnit, span);\r\n\t\t\t\tmemberDesc.MemberAttributes &= ~PhpMemberAttributes.Final;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void ValidateOverride(ErrorSink/*!*/ errors, KnownProperty/*!*/ overridden)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceUnit != null, \"Not applicable on reflected properties\");\r\n\r\n\t\t\t// TODO:\r\n\t\t\t//  string overridden_field_pos = String.Concat(overridden_field.Class.FullSourcePath, overridden_field.Position);\r\n\r\n            // static field cannot be made non static\r\n            if (overridden.IsStatic && !this.IsStatic)\r\n            {\r\n                errors.Add(Errors.MakeStaticPropertyNonStatic, SourceUnit, Span,\r\n                  overridden.DeclaringType.FullName, this.Name.ToString(), this.DeclaringType.FullName);\r\n            }\r\n\r\n            // decrease visibility is prohibited\r\n            if ((overridden.IsPublic && (this.IsPrivate || this.IsProtected)) ||\r\n                (overridden.IsProtected && (this.IsPrivate)))\r\n            {\r\n                errors.Add(Errors.OverridingFieldRestrictsVisibility, SourceUnit, Span,\r\n                  overridden.DeclaringType.FullName, this.Name.ToString(), overridden.Visibility.ToString().ToLowerInvariant(), this.DeclaringType.FullName);\r\n            }\r\n\r\n\t\t\t//  // field non-staticness non-overridable\r\n\t\t\t//  if (!overridden_field.FieldModifiers.IsStatic && field.FieldModifiers.IsStatic)\r\n\t\t\t//  {\r\n\t\t\t//    classesTable.Errors.Add(Errors.MakeNonStaticFieldStatic, classesTable.SourceFile, field.Position,\r\n\t\t\t//      overridden_field_class.Name.ToString(), field.FieldName.ToString(), Name.ToString(), overridden_field_pos);\r\n\t\t\t//  }\r\n\r\n\t\t\t//  // overriding field visibility\r\n\t\t\t//  if ((overridden_field.FieldModifiers.IsPublic && !field.FieldModifiers.IsPublic)\r\n\t\t\t//    || (overridden_field.FieldModifiers.IsProtected && !field.FieldModifiers.IsProtected && !field.FieldModifiers.IsPublic))\r\n\t\t\t//  {\r\n\t\t\t//    classesTable.Errors.Add(Errors.OverridingFieldRestrictsVisibility, classesTable.SourceFile, field.Position,\r\n\t\t\t//      Name.ToString(), field.FieldName.ToString(), overridden_field.FieldModifiers.VisibilityToString(), overridden_field_class.Name.ToString(), overridden_field_pos);\r\n\t\t\t//  }\r\n\r\n\t\t\t//  // protected and public static field overriding\r\n\t\t\t//  if (overridden_field.FieldModifiers.IsStatic && field.FieldModifiers.IsStatic\r\n\t\t\t//    && ((overridden_field.FieldModifiers.IsProtected && field.FieldModifiers.IsProtected)\r\n\t\t\t//    || (overridden_field.FieldModifiers.IsPublic && field.FieldModifiers.IsPublic)))\r\n\t\t\t//  {\r\n\t\t\t//    classesTable.Errors.Add(Errors.OverridingStaticFieldByStatic, classesTable.SourceFile, field.Position, overridden_field_class.Name.ToString(),\r\n\t\t\t//      field.FieldName.ToString(), Name.ToString(), field.FieldModifiers.VisibilityToString(), overridden_field_pos);\r\n\t\t\t//  }\r\n\r\n\t\t\t//  // protected static field initial value\r\n\t\t\t//  // we can check only first field overrided in the hierarchy. If the overrided field is protected,\r\n\t\t\t//  // this field must be public (otherwise previous exception has been thrown), so there is not other\r\n\t\t\t//  // protected field in the hierarchy above.\r\n\t\t\t//  if (field.FieldModifiers.IsStatic && field.HasInitValue && field.FieldModifiers.IsPublic &&\r\n\t\t\t//    overridden_field.FieldModifiers.IsStatic && overridden_field.HasInitValue && overridden_field.FieldModifiers.IsProtected)\r\n\t\t\t//  {\r\n\t\t\t//    classesTable.Errors.Add(Errors.OverridingProtectedStaticWithInitValue, classesTable.SourceFile, field.Position,\r\n\t\t\t//      overridden_field_class.Name.ToString(), field.FieldName.ToString(), Name.ToString(), overridden_field_pos);\r\n\t\t\t//  }\r\n\r\n\t\t\t//  // if this field increases visibility of inherited field, set class from where is the field accessible from IL\r\n\t\t\t//  if (field.FieldModifiers.IsPublic && overridden_field.FieldModifiers.IsProtected)\r\n\t\t\t//    field.SetImplementClass(overridden_field_class);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal void DefineBuilders()\r\n\t\t{\r\n\t\t\tTypeBuilder type_builder = this.DeclaringPhpType.RealTypeBuilder;\r\n\r\n\t\t\tif (this.Implementor == this.DeclaringPhpType)\r\n\t\t\t{\r\n\t\t\t\t// represent the field as a PhpReference field\r\n\t\t\t\tFieldAttributes field_attrs = Enums.ToFieldAttributes(memberDesc.MemberAttributes);\r\n\r\n\t\t\t\tstring name = FullName;\r\n\t\t\t\tif (IsExported) name += \"#\";\r\n\r\n\t\t\t\tFieldBuilder fb = type_builder.DefineField(name, Types.PhpReference[0], field_attrs);\r\n\r\n\t\t\t\t// custom attributes implied by member attributes (thread static):\r\n\t\t\t\tEnums.DefineCustomAttributes(memberDesc.MemberAttributes, fb);\r\n\r\n\t\t\t\t// [EditorBrowsable(Never)]\r\n#if !SILVERLIGHT\r\n\t\t\t\tfb.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n\t\t\t\t// [PhpHasInitValue]\r\n\t\t\t\tif (hasInitialValue) fb.SetCustomAttribute(AttributeBuilders.PhpHasInitValue);\r\n\r\n\t\t\t\trealField = fb;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tPhpField overriden_field = (PhpField)overrides.Member;\r\n\t\t\t\trealField = overriden_field.RealField;\r\n\r\n\t\t\t\t// does this field declaration increase visibility of the field?\r\n\t\t\t\tif (IsPublic && overriden_field.IsProtected)\r\n\t\t\t\t{\r\n\t\t\t\t\tupgradesVisibility = true;\r\n\r\n\t\t\t\t\t// yes, set attribute that marks that the class has a public field declaration that increases\r\n\t\t\t\t\t// visibility of previous declaration\r\n\t\t\t\t\ttype_builder.SetCustomAttribute(new CustomAttributeBuilder(\r\n\t\t\t\t\t\tConstructors.PhpPublicField,\r\n\t\t\t\t\t\tnew object[] { Name.ToString(), IsStatic, hasInitialValue }));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (IsExported) exportedProperty = ClrStubBuilder.DefineFieldExport(FullName, this);\r\n\t\t}\r\n\r\n\t\tprivate void AdjustConstructedType(ref ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (constructedType == null) return;\r\n\r\n\t\t\tDTypeDesc implementor_desc = Implementor.TypeDesc;\r\n\r\n\t\t\t// adjust constructed type according to the implementor\r\n\t\t\t// TODO: this does not work\r\n\r\n\t\t\twhile (constructedType.GenericType != implementor_desc)\r\n\t\t\t{\r\n\t\t\t\tconstructedType = constructedType.Base as ConstructedType;\r\n\t\t\t\tif (constructedType == null) return;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate PhpTypeCode EmitGetInternal(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck, bool setAliasedFlag)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\tif (runtimeVisibilityCheck || UpgradesVisibility)\r\n\t\t\t\t{\r\n\t\t\t\t\t// let the operator to check the visibility:\r\n\t\t\t\t\treturn codeGenerator.EmitGetStaticPropertyOperator(DeclaringType, this.FullName, null, wantRef);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!IsAppStatic) Implementor.EmitThreadStaticInit(codeGenerator, constructedType);\r\n\r\n\t\t\t\t// retrieve field value\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, DType.MakeConstructed(RealField, constructedType));\r\n\t\t\t\tif (wantRef)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (setAliasedFlag)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// set IsAliased to true\r\n\t\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldc_I4_1);\r\n\t\t\t\t\t\til.EmitCall(OpCodes.Callvirt, Properties.PhpReference_IsAliased.GetSetMethod(), null);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn PhpTypeCode.PhpReference;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\r\n\t\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// LOAD Operators.GetObjectFieldDirect[Ref](this,this.<field>,<name>,<type desc>,[<quiet>]);\r\n\t\t\t\tcodeGenerator.EmitLoadSelf();\r\n\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, DType.MakeConstructed(RealField, constructedType));\r\n\t\t\t\til.Emit(OpCodes.Ldstr, Name.ToString());\r\n\t\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\r\n\t\t\t\tif (wantRef)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.GetObjectFieldDirectRef);\r\n\r\n\t\t\t\t\treturn PhpTypeCode.PhpReference;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\til.LoadBool(codeGenerator.ChainBuilder.QuietRead);\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.GetObjectFieldDirect);\r\n\r\n\t\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\tAdjustConstructedType(ref constructedType);\r\n\t\t\treturn EmitGetInternal(codeGenerator, instance, wantRef, constructedType, runtimeVisibilityCheck, true);\r\n\t\t}\r\n\r\n\t\tinternal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\tAdjustConstructedType(ref constructedType);\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// check the visibility at runtime by the operator:\r\n\t\t\t\tif (runtimeVisibilityCheck || UpgradesVisibility)\r\n\t\t\t\t\treturn codeGenerator.EmitSetStaticPropertyOperator(DeclaringType, this.FullName, null, isRef);\r\n\r\n\t\t\t\tif (isRef)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!IsAppStatic) Implementor.EmitThreadStaticInit(codeGenerator, constructedType);\r\n\r\n\t\t\t\t\t// just write the PhpReference to the field upon assignment\r\n\t\t\t\t\treturn delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcodeGen.IL.Emit(OpCodes.Stsfld, DType.MakeConstructed(RealField, constructedType));\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// read the PhpReference stored in the field\r\n\t\t\t\t\tEmitGetInternal(codeGenerator, null, true, constructedType, false, false);\r\n\r\n\t\t\t\t\t// finish the assignment by writing to its Value field\r\n\t\t\t\t\treturn delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcodeGen.IL.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// direct access is possible, however, we have to be prepared for actually calling\r\n\t\t\t\t// the operator if the field proves to have been unset\r\n\r\n\t\t\t\treturn delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t\t{\r\n\t\t\t\t\tILEmitter il = codeGen.IL;\r\n\r\n\t\t\t\t\tcodeGen.EmitLoadSelf();\r\n\t\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t\t\til.Emit(isRef ? OpCodes.Ldflda : OpCodes.Ldfld, DType.MakeConstructed(RealField, constructedType));\r\n\t\t\t\t\til.Emit(OpCodes.Ldstr, Name.ToString());\r\n\t\t\t\t\tcodeGen.EmitLoadClassContext();\r\n\r\n\t\t\t\t\tif (isRef)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// CALL Operators.SetObjectFieldDirectRef(STACK,<target>,ref <field>,<field name>,<type desc>)\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.SetObjectFieldDirectRef);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// CALL Operators.SetObjectFieldDirect(STACK,<target>,<field>,<field name>,<type desc>)\r\n\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.SetObjectFieldDirect);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace/*!*/ instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// emit error (whether or not the property is visible):\r\n\t\t\t\til.Emit(OpCodes.Ldstr, DeclaringType.FullName);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, this.FullName);\r\n\t\t\t\tcodeGenerator.EmitPhpException(Methods.PhpException.StaticPropertyUnset);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// replace the field with a new PhpSmartReference with IsSet false\r\n\t\t\tinstance.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpSmartReference.Void);\r\n\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\r\n\t\t\til.LoadBool(false);\r\n\t\t\til.Emit(OpCodes.Callvirt, Properties.PhpReference_IsSet.GetSetMethod());\r\n\r\n\t\t\til.Emit(OpCodes.Stfld, DType.MakeConstructed(RealField, constructedType));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\tinternal sealed class PhpFieldBuilder\r\n\t{\r\n\t\tpublic PhpField/*!*/ Field { get { return field; } }\r\n\t\tprivate PhpField/*!*/ field;\r\n\r\n\t\tinternal ExportAttribute ExportInfo\r\n\t\t{\r\n\t\t\tget { return exportInfo; }\r\n\t\t\tset /* FieldDecl */ { exportInfo = value; }\r\n\t\t}\r\n\t\tprivate ExportAttribute exportInfo;\r\n\r\n\t\tpublic PhpFieldBuilder(PhpField/*!*/ field)\r\n\t\t{\r\n\t\t\tthis.field = field;\r\n\t\t}\r\n\r\n\t\tinternal static void EmitGetterStub(ILEmitter/*!*/ il, FieldInfo/*!*/ fieldInfo, Type/*!*/ declaringType)\r\n\t\t{\r\n\t\t\tif (fieldInfo.IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// [ return <real_field> ]\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, fieldInfo);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// [ return ((self)<instance>).<real_field> ]\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Emit(OpCodes.Castclass, declaringType);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, fieldInfo);\r\n\t\t\t}\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\tinternal static void EmitSetterStub(ILEmitter/*!*/ il, FieldInfo/*!*/ fieldInfo, Type/*!*/ declaringType)\r\n\t\t{\r\n\t\t\tDebug.Assert(fieldInfo.FieldType == Types.PhpReference[0]);\r\n\r\n\t\t\tif (fieldInfo.IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// [ <real_field> = (PhpReference)value ]\r\n\t\t\t\til.Ldarg(1);\r\n\t\t\t\til.Emit(OpCodes.Castclass, Types.PhpReference[0]);\r\n\t\t\t\til.Emit(OpCodes.Stsfld, fieldInfo);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// [ ((self)<instance>).<real_field> = (PhpReference)value ]\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Emit(OpCodes.Castclass, declaringType);\r\n\t\t\t\til.Ldarg(1);\r\n\t\t\t\til.Emit(OpCodes.Castclass, Types.PhpReference[0]);\r\n\t\t\t\til.Emit(OpCodes.Stfld, fieldInfo);\r\n\t\t\t}\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n        internal static void EmitGetterStub(ILEmitter/*!*/ il, PropertyInfo/*!*/ propertyInfo, Type/*!*/ declaringType)\r\n        {\r\n            var getter = propertyInfo.GetGetMethod(true);\r\n\r\n            if (getter == null)\r\n            {\r\n                il.Emit(OpCodes.Ldstr, declaringType.Name);\r\n                il.Emit(OpCodes.Ldstr, \"get_\" + propertyInfo.Name);\r\n                il.Emit(OpCodes.Call, Methods.PhpException.UndefinedMethodCalled);\r\n                il.Emit(OpCodes.Ldnull);\r\n\r\n                il.Emit(OpCodes.Ret);\r\n                return;\r\n            }\r\n\r\n            if (getter.IsStatic)\r\n            {\r\n                // [ return getter() ]\r\n                il.Emit(OpCodes.Call, getter);\r\n            }\r\n            else\r\n            {\r\n                // [ return ((self)<instance>).getter() ]\r\n                il.Ldarg(0);\r\n                il.Emit(OpCodes.Castclass, declaringType);\r\n                il.Emit(OpCodes.Call, getter);\r\n            }\r\n\r\n            // box\r\n            il.EmitBoxing(PhpTypeCodeEnum.FromType(getter.ReturnType));\r\n\r\n            //\r\n            il.Emit(OpCodes.Ret);\r\n        }\r\n\r\n        internal static void EmitSetterStub(ILEmitter/*!*/ il, PropertyInfo/*!*/ propertyInfo, Type/*!*/ declaringType)\r\n        {\r\n            var setter = propertyInfo.GetSetMethod(/*false*/);\r\n\r\n            if (setter == null)\r\n            {\r\n                il.Emit(OpCodes.Ldstr, declaringType.Name);\r\n                il.Emit(OpCodes.Ldstr, \"set_\" + propertyInfo.Name);\r\n                il.Emit(OpCodes.Call, Methods.PhpException.UndefinedMethodCalled);  // CoreResources.readonly_property_written\r\n                \r\n                il.Emit(OpCodes.Ret);\r\n                return;\r\n            }\r\n\r\n            var parameters = setter.GetParameters();\r\n            Debug.Assert(parameters.Length == 1 /*&& parameters[0].ParameterType == Types.PhpReference[0]*/);\r\n\r\n            if (!setter.IsStatic)\r\n            {\r\n                // [ ((self)<instance>). ]\r\n                il.Ldarg(0);\r\n                il.Emit(OpCodes.Castclass, declaringType);\r\n            }\r\n            \r\n            // [ setter((object)value) ]\r\n            il.Ldarg(1);\r\n            il.Emit(OpCodes.Castclass, parameters[0].ParameterType);\r\n            il.Emit(OpCodes.Call, setter);\r\n            \r\n            //\r\n            il.Emit(OpCodes.Ret);\r\n        }\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Used by full reflection for class properties marked with [PhpVisible] attribute.\r\n    /// </summary>\r\n    public sealed class PhpVisibleProperty : KnownProperty\r\n    {\r\n        #region Fields and Properties\r\n\r\n        public override bool IsIdentityDefinite { get { return true; } }\r\n        public override MemberInfo RealMember { get { return realProperty; } }\r\n\r\n        public PropertyInfo/*!*/RealProperty { get { return realProperty; } }\r\n        private PropertyInfo/*!*/realProperty;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Used by full reflection.\r\n        /// </summary>\r\n        public PhpVisibleProperty(VariableName name, DPropertyDesc/*!*/ fieldDesc, PropertyInfo/*!*/ propertyInfo)\r\n            : base(fieldDesc, name)\r\n        {\r\n            Debug.Assert(fieldDesc is DPhpFieldDesc);\r\n            Debug.Assert(propertyInfo != null);\r\n\r\n            this.realProperty = propertyInfo;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Emission (during compilation)\r\n\r\n        /// <summary>\r\n        /// Emit (stack_top dup).IsAliased = true;\r\n        /// </summary>\r\n        /// <param name=\"il\"></param>\r\n        private void EmitIsAliased(ILEmitter/*!*/il)\r\n        {\r\n            // set IsAliased to true\r\n            il.Emit(OpCodes.Dup);\r\n            il.Emit(OpCodes.Ldc_I4_1);\r\n            il.EmitCall(OpCodes.Callvirt, Properties.PhpReference_IsAliased.GetSetMethod(), null);\r\n        }\r\n\r\n        internal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n            ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n        {\r\n            Debug.Assert(IsStatic == (instance == null));\r\n\r\n            ILEmitter il = codeGenerator.IL;\r\n            var getter = RealProperty.GetGetMethod();\r\n\r\n            if (getter == null)\r\n                throw new MissingMethodException(string.Format(\"'{0}.get_{1}' not implemented!\", RealProperty.DeclaringType.Name, RealProperty.Name));\r\n\r\n            // <this>.\r\n            if (!IsStatic)\r\n                instance.EmitLoad(il);\r\n\r\n            // getter()\r\n            il.Emit(OpCodes.Call, getter);\r\n            \r\n            // handle references\r\n            if (wantRef)\r\n            {\r\n                // make reference\r\n                if (Types.PhpReference[0].IsAssignableFrom(getter.ReturnType))\r\n                {\r\n                    EmitIsAliased(il);\r\n                }\r\n                else\r\n                {\r\n                    throw new NotImplementedException();\r\n                }\r\n                //\r\n                return PhpTypeCode.PhpReference;\r\n            }\r\n            else\r\n            {\r\n                // dereference\r\n                if (Types.PhpReference[0].IsAssignableFrom(getter.ReturnType))\r\n                {\r\n                    EmitIsAliased(il);\r\n                    il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                }\r\n                else\r\n                {\r\n                    il.EmitBoxing(PhpTypeCodeEnum.FromType(getter.ReturnType));\r\n                }\r\n                //\r\n                return PhpTypeCode.Object;\r\n            }\r\n        }\r\n\r\n        internal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n            ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n        {\r\n            ILEmitter il = codeGenerator.IL;\r\n            var setter = RealProperty.GetSetMethod();\r\n\r\n            if (setter == null)\r\n                throw new MissingMethodException(string.Format(\"'{0}.set_{1}' not implemented!\", RealProperty.DeclaringType.Name, RealProperty.Name));\r\n\r\n            // <this>.\r\n            if (!IsStatic)\r\n                instance.EmitLoad(il);\r\n\r\n            // setter()\r\n            return delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n            {\r\n                var parameters = setter.GetParameters();\r\n\r\n                if (isRef && parameters[0].ParameterType != Types.PhpReference[0])\r\n                {\r\n                    // .setter(<stack>.Value)\r\n                    codeGen.IL.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                    codeGen.IL.Emit(OpCodes.Call, setter);\r\n                }\r\n                else if (!isRef && parameters[0].ParameterType == Types.PhpReference[0])\r\n                {\r\n                    // .getter().Value = <stack>\r\n                    codeGen.IL.Emit(OpCodes.Call, RealProperty.GetGetMethod());\r\n                    codeGen.IL.Emit(OpCodes.Stfld, Fields.PhpReference_Value);\r\n                }\r\n                else\r\n                {\r\n                    // .setter(<stack>)\r\n                    codeGen.IL.Emit(OpCodes.Call, setter);\r\n                }\r\n            };\r\n        }\r\n\r\n        internal override void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace/*!*/ instance, ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n        {\r\n            ILEmitter il = codeGenerator.IL;\r\n\r\n            if (IsStatic)\r\n            {\r\n                // emit error (whether or not the property is visible):\r\n                il.Emit(OpCodes.Ldstr, DeclaringType.FullName);\r\n                il.Emit(OpCodes.Ldstr, this.FullName);\r\n                codeGenerator.EmitPhpException(Methods.PhpException.StaticPropertyUnset);\r\n                return;\r\n            }\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region ClrPropertyBase\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class ClrPropertyBase : KnownProperty\r\n\t{\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrPropertyBase(DPropertyDesc/*!*/ propertyDesc, VariableName name)\r\n\t\t\t: base(propertyDesc, name)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrProperty\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrProperty : ClrPropertyBase\r\n\t{\r\n\t\tpublic override MemberInfo/*!*/ RealMember { get { return realProperty; } }\r\n\r\n\t\tpublic PropertyInfo/*!*/ RealProperty { get { return realProperty; } }\r\n\t\tprivate PropertyInfo/*!*/ realProperty;\r\n\r\n\t\tpublic bool HasGetter { get { return hasGetter; } }\r\n\t\tprivate readonly bool hasGetter;\r\n\r\n\t\tpublic bool HasSetter { get { return hasSetter; } }\r\n\t\tprivate readonly bool hasSetter;\r\n\r\n\t\tpublic MethodInfo Getter { get { return (hasGetter) ? realProperty.GetGetMethod(true) : null; } }\r\n\t\tpublic MethodInfo Setter { get { return (hasSetter) ? realProperty.GetSetMethod(true) : null; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrProperty(VariableName name, ClrTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n\t\t\tPropertyInfo/*!*/ realProperty, bool hasGetter, bool hasSetter)\r\n\t\t\t: base(new DPropertyDesc(declaringType, memberAttributes), name)\r\n\t\t{\r\n\t\t\tDebug.Assert(realProperty != null);\r\n\r\n\t\t\tthis.realProperty = realProperty;\r\n\t\t\tthis.hasGetter = hasGetter;\r\n\t\t\tthis.hasSetter = hasSetter;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: Overrides\r\n\r\n\t\tinternal override void AddAbstractOverride(DMemberRef/*!*/ abstractMethod)\r\n\t\t{\r\n\t\t\t// nop, we don't need to maintain information about abstract overrides\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\t\t\tDebug.Assert(hasGetter, \"TODO\");\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\tif (runtimeVisibilityCheck)\r\n\t\t\t\t{\r\n\t\t\t\t\t// let the operator to check the visibility:\r\n\t\t\t\t\treturn codeGenerator.EmitGetStaticPropertyOperator(DeclaringType, this.FullName, null, wantRef);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t}\r\n\r\n\t\t\tMethodInfo getter = this.Getter;\r\n\r\n\t\t\til.Emit(getter.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, getter);\r\n\r\n\t\t\tPhpTypeCode result = ClrOverloadBuilder.EmitConvertToPhp(il, getter.ReturnType/*, codeGenerator.ScriptContextPlace*/);\r\n\r\n\t\t\tcodeGenerator.EmitReferenceDereference(ref result, wantRef);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\t//Debug.Assert(hasSetter, \"TODO\");\r\n            if (!hasSetter)\r\n            {\r\n                throw new CompilerException(\r\n                    new ErrorInfo(\r\n                           0,\r\n                           \"readonly_property_written\",\r\n                           ErrorSeverity.Error),\r\n                    new string[]{DeclaringType.FullName, this.Name.Value}\r\n                    );\r\n            }\r\n\r\n            //\r\n            \r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// check the visibility at runtime by the operator:\r\n\t\t\t\tif (runtimeVisibilityCheck)\r\n\t\t\t\t\treturn codeGenerator.EmitSetStaticPropertyOperator(DeclaringType, this.FullName, null, isRef);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// load target instance:\r\n\t\t\t\tinstance.EmitLoad(codeGenerator.IL);\r\n\t\t\t}\r\n\r\n\t\t\treturn delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t{\r\n\t\t\t\tMethodInfo setter = this.Setter;\r\n\r\n\t\t\t\t// TODO: can we get different PhpTypeCode?\r\n\t\t\t\tILEmitter il = codeGen.IL;\r\n\t\t\t\tPropertyDesc.EmitSetConversion(il, stackTypeCode, setter.GetParameters()[0].ParameterType);\r\n\r\n\t\t\t\til.Emit(setter.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, setter);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tinternal override void EmitUnset(CodeGenerator codeGenerator/*!*/, IPlace/*!*/ instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\t// TODO:\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrField\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrField : ClrPropertyBase\r\n\t{\r\n\t\tpublic override MemberInfo/*!*/ RealMember { get { return fieldInfo; } }\r\n\r\n\t\tpublic FieldInfo/*!*/ FieldInfo { get { return fieldInfo; } }\r\n\t\tprivate readonly FieldInfo/*!*/ fieldInfo;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrField(VariableName/*!*/ name, ClrTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n\t\t\tFieldInfo/*!*/ fieldInfo)\r\n\t\t\t: base(new DPropertyDesc(declaringType, memberAttributes), name)\r\n\t\t{\r\n\t\t\tthis.fieldInfo = fieldInfo;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\tif (runtimeVisibilityCheck)\r\n\t\t\t\t{\r\n\t\t\t\t\t// let the operator to check the visibility:\r\n\t\t\t\t\treturn codeGenerator.EmitGetStaticPropertyOperator(DeclaringType, this.FullName, null, wantRef);\r\n\t\t\t\t}\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, fieldInfo);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, fieldInfo);\r\n\t\t\t}\r\n\r\n\t\t\tPhpTypeCode result = ClrOverloadBuilder.EmitConvertToPhp(il, fieldInfo.FieldType/*, codeGenerator.ScriptContextPlace*/);\r\n\r\n\t\t\tcodeGenerator.EmitReferenceDereference(ref result, wantRef);\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\tif (IsStatic)\r\n\t\t\t{\r\n\t\t\t\t// check the visibility at runtime by the operator:\r\n\t\t\t\tif (runtimeVisibilityCheck)\r\n\t\t\t\t\treturn codeGenerator.EmitSetStaticPropertyOperator(DeclaringType, this.FullName, null, isRef);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// load target instance:\r\n\t\t\t\tinstance.EmitLoad(codeGenerator.IL);\r\n\t\t\t}\r\n\r\n\t\t\treturn delegate(CodeGenerator codeGen, PhpTypeCode stackTypeCode)\r\n\t\t\t{\r\n\t\t\t\t// TODO: can we get different PhpTypeCode?\r\n\t\t\t\tILEmitter il = codeGen.IL;\r\n\t\t\t\tPropertyDesc.EmitSetConversion(il, stackTypeCode, fieldInfo.FieldType);\r\n\r\n\t\t\t\til.Emit(IsStatic ? OpCodes.Stsfld : OpCodes.Stfld, fieldInfo);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tinternal override void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace/*!*/ instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\t// TODO:\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrEvent\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrEvent : ClrPropertyBase\r\n\t{\r\n\t\tpublic override MemberInfo/*!*/ RealMember { get { return realEvent; } }\r\n\r\n\t\tpublic EventInfo/*!*/ RealEvent { get { return realEvent; } }\r\n\t\tprivate EventInfo/*!*/ realEvent;\r\n\r\n\t\tpublic Type/*!*/ HandlerType { get { return realEvent.EventHandlerType; } }\r\n\r\n\t\tpublic bool HasAddMethod { get { return hasAddMethod; } }\r\n\t\tprivate readonly bool hasAddMethod;\r\n\r\n\t\tpublic bool HasRemoveMethod { get { return hasRemoveMethod; } }\r\n\t\tprivate readonly bool hasRemoveMethod;\r\n\r\n\t\tpublic MethodInfo AddMethod { get { return (hasAddMethod) ? realEvent.GetAddMethod(true) : null; } }\r\n\t\tpublic MethodInfo RemoveMethod { get { return (hasRemoveMethod) ? realEvent.GetRemoveMethod(true) : null; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect.\r\n\t\t/// </summary>\r\n\t\tpublic ClrEvent(VariableName name, ClrTypeDesc/*!*/ declaringType, PhpMemberAttributes memberAttributes,\r\n\t\t\tEventInfo/*!*/ realEvent, bool hasAddMethod, bool hasRemoveMethod)\r\n\t\t\t: base(new DPropertyDesc(declaringType, memberAttributes), name)\r\n\t\t{\r\n\t\t\tthis.realEvent = realEvent;\r\n\t\t\tthis.hasAddMethod = hasAddMethod;\r\n\t\t\tthis.hasRemoveMethod = hasRemoveMethod;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: Overrides\r\n\r\n\t\tinternal override void AddAbstractOverride(DMemberRef/*!*/ abstractMethod)\r\n\t\t{\r\n\t\t\t// nop, we don't need to maintain information about abstract overrides\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitGet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool wantRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(IsStatic == (instance == null));\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsStatic && runtimeVisibilityCheck)\r\n\t\t\t{\r\n\t\t\t\t// let the operator to check the visibility:\r\n\t\t\t\treturn codeGenerator.EmitGetStaticPropertyOperator(DeclaringType, this.FullName, null, wantRef);\r\n\t\t\t}\r\n\r\n\t\t\tEmitGetEventObject(il, codeGenerator.ScriptContextPlace, instance, false);\r\n\r\n\t\t\tif (wantRef) il.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\t\t\treturn (wantRef ? PhpTypeCode.PhpReference : PhpTypeCode.DObject);\r\n\t\t}\r\n\r\n\t\tinternal void EmitGetEventObject(ILEmitter/*!*/ il, IPlace/*!*/ contextPlace, IPlace instance, bool dynamicStub)\r\n\t\t{\r\n\t\t\t// [ ClrEventObject<handlerType>.Wrap(<SC>, <event name>, <addMethod>, <removeMethod>) ]\r\n\r\n\t\t\tcontextPlace.EmitLoad(il);\r\n\t\t\til.Emit(OpCodes.Ldstr, FullName);\r\n\r\n\t\t\tConstructorInfo hook_ctor = typeof(Library.EventClass<>.HookDelegate).MakeGenericType(HandlerType).\r\n\t\t\t\tGetConstructor(Types.DelegateCtorArgs);\r\n\r\n\t\t\t// create delegates to the add and remove methods\r\n\t\t\tEmitLoadAccessorDelegate(il, hook_ctor, instance, dynamicStub, AddMethod);\r\n\t\t\tEmitLoadAccessorDelegate(il, hook_ctor, instance, dynamicStub, RemoveMethod);\r\n\r\n\t\t\tMethodInfo wrap_method = typeof(Library.EventClass<>).MakeGenericType(HandlerType).GetMethod(\"Wrap\");\r\n\t\t\til.Emit(OpCodes.Call, wrap_method);\r\n\t\t}\r\n\r\n\t\tprivate void EmitLoadAccessorDelegate(ILEmitter/*!*/ il, ConstructorInfo/*!*/ delegateCtor,\r\n\t\t\tIPlace instance, bool dynamicStub, MethodInfo accessor)\r\n\t\t{\r\n\t\t\tif (accessor != null)\r\n\t\t\t{\r\n\t\t\t\tif (instance != null) instance.EmitLoad(il); else il.Emit(OpCodes.Ldnull);\r\n\t\t\t\tif (!dynamicStub && accessor.IsVirtual)\r\n\t\t\t\t{\r\n\t\t\t\t\tinstance.EmitLoad(il);\r\n\t\t\t\t\til.Emit(OpCodes.Ldvirtftn, accessor);\r\n\t\t\t\t}\r\n\t\t\t\telse il.Emit(OpCodes.Ldftn, accessor);\r\n\r\n\t\t\t\til.Emit(OpCodes.Newobj, delegateCtor);\r\n\t\t\t}\r\n\t\t\telse il.Emit(OpCodes.Ldnull);\r\n\t\t}\r\n\r\n\t\tinternal override AssignmentCallback EmitSet(CodeGenerator/*!*/ codeGenerator, IPlace instance, bool isRef,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitUnset(CodeGenerator/*!*/ codeGenerator, IPlace/*!*/ instance,\r\n\t\t\tConstructedType constructedType, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/SourceUnit.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007 Tomas Petricek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\n\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region SourceCodeUnit\r\n\r\n\t/// <summary>\r\n\t/// Represents a source code that is stored in a string, but contains\r\n\t/// a complete PHP script file including the initial marks\r\n\t/// </summary>\r\n\tpublic sealed class ClientSourceCodeUnit : SourceCodeUnit\r\n\t{\r\n\t\tpublic ClientSourceCodeUnit(TransientCompilationUnit/*!*/ compilationUnit, string/*!*/ code, PhpSourceFile/*!*/ sourceFile,\r\n\t\t\tEncoding/*!*/ encoding, int line, int column)\r\n\t\t\t: base(compilationUnit, code, sourceFile, encoding, line, column)\r\n\t\t{\r\n\t\t\tthis.initialState = Lexer.LexicalStates.INITIAL;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/SourceUnit.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Text;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n    #region CompilationSourceUnit\r\n\r\n    public abstract class CompilationSourceUnit : SourceUnit\r\n\t{\r\n        public override bool IsPure { get { return this.CompilationUnit.IsPure; } }\r\n\r\n        public override bool IsTransient { get { return this.CompilationUnit.IsTransient; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Containing compilation unit.\r\n\t\t/// </summary>\r\n\t\tpublic CompilationUnitBase/*!*/ CompilationUnit { get { return compilationUnit; } }\r\n\t\tprotected readonly CompilationUnitBase/*!*/ compilationUnit;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Place where this unit's <see cref=\"NamingContext\"/> is stored (<B>null</B> if there are no imports).\r\n\t\t/// Not an <see cref=\"IPlace\"/> as we need to encode it to the <see cref=\"DTypeSpec\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic FieldBuilder NamingContextFieldBuilder { get { return namingContextFieldBuilder; } }\r\n\t\tprivate FieldBuilder namingContextFieldBuilder;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Symbol document writer associated with the unit.\r\n\t\t/// </summary>\r\n\t\tpublic ISymbolDocumentWriter SymbolDocumentWriter { get { return symbolDocumentWriter; } }\r\n\t\tprivate ISymbolDocumentWriter symbolDocumentWriter;\r\n\r\n\t\t#region Construction\r\n\r\n        public CompilationSourceUnit(CompilationUnitBase/*!*/ compilationUnit, PhpSourceFile/*!*/ sourceFile, Encoding/*!*/ encoding, ILineBreaks/*!*/lineBreaks)\r\n            : base(sourceFile, encoding, lineBreaks)\r\n\t\t{\r\n\t\t\tDebug.Assert(compilationUnit != null);\r\n\r\n\t\t\tthis.compilationUnit = compilationUnit;\r\n\t\t\tthis.namingContextFieldBuilder = null;   // to be filled during compilation just before the unit gets emitted\r\n\t\t\tthis.symbolDocumentWriter = null; // to be filled during compilation just before the unit gets emitted\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic ISymbolDocumentWriter GetMappedSymbolDocumentWriter(int realLine)\r\n\t\t{\r\n\t\t\treturn compilationUnit.GetSymbolDocumentWriter(GetMappedFullSourcePath(realLine));\r\n\t\t}\r\n\r\n        #region Name Resolving\r\n\r\n\t\t/// <summary>\r\n\t\t/// Resolves a function or type name using aliases and imported namespaces of the source unit.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"qualifiedName\">Function qualified name to resolve. Doesn't resolve special names (\"self\", \"parent\").</param>\r\n\t\t/// <param name=\"kind\">Declaration kind.</param>\r\n\t\t/// <param name=\"currentScope\">Current scope.</param>\r\n\t\t/// <param name=\"alias\">\r\n\t\t/// <B>null</B>, if the function name is resolved immediately.\r\n\t\t/// Otherwise, if the <paramref name=\"qualifiedName\"/> is simple and an alias exists, contains its qualified target.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"errors\">Error sink or <B>null</B> if errors shouldn't be reported.</param>\r\n\t\t/// <param name=\"position\">Position where to report an error.</param>\r\n\t\t/// <param name=\"mustResolve\">Whether name must be resolved if possible.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resolved member, the unknown member, or <B>null</B> if error reporting is disabled (errors == null).\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// If the name is simple, is not resolved and has an alias then the run-time resolve should be run on the alias.\r\n\t\t/// If the name is simple, is not resolved and hasn't an alias, the run-time resolve should be run on the name\r\n\t\t///\t\twithin the naming context of the source unit (i.e. imported namespaces should be considered).\r\n\t\t/// If the name is fully qualified and is not resolved then then the run-time resolve should be run on the name itself.\r\n\t\t/// </remarks>\r\n\t\tprivate DMember ResolveName(QualifiedName qualifiedName, DeclarationKind kind, Scope currentScope,\r\n            out QualifiedName? alias, ErrorSink errors, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\tstring full_name = null;\r\n\t\t\tDMember result;\r\n\t\t\talias = null;\r\n\r\n\t\t\t// try exact match:\r\n\t\t\tresult = ResolveExactName(qualifiedName, ref full_name, kind, currentScope, mustResolve);\r\n\t\t\tif (result != null)\r\n\t\t\t\treturn result;\r\n\r\n            // try imported namespaces:\r\n            if (!qualifiedName.IsFullyQualifiedName && HasImportedNamespaces)\r\n\t\t\t{\r\n\t\t\t\tresult = null;\r\n\r\n\t\t\t\tforeach (QualifiedName imported_ns in this.ImportedNamespaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tQualifiedName combined_qualified_name = new QualifiedName(qualifiedName, imported_ns);\r\n\t\t\t\t\tfull_name = null;\r\n\r\n\t\t\t\t\tDMember candidate = ResolveExactName(combined_qualified_name, ref full_name, kind, currentScope, mustResolve);\r\n\t\t\t\t\tif (candidate != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (result != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (errors != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tErrorInfo error;\r\n\t\t\t\t\t\t\t\tswitch (kind)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase DeclarationKind.Type: error = Errors.AmbiguousTypeMatch; break;\r\n\t\t\t\t\t\t\t\t\tcase DeclarationKind.Function: error = Errors.AmbiguousFunctionMatch; break;\r\n\t\t\t\t\t\t\t\t\tcase DeclarationKind.Constant: error = Errors.AmbiguousConstantMatch; break;\r\n\t\t\t\t\t\t\t\t\tdefault: throw null;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\terrors.Add(error, this, position, result.FullName, candidate.FullName, qualifiedName.Name);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tresult = candidate;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (result != null)\r\n\t\t\t\t\treturn result;\r\n\t\t\t}\r\n            \r\n\t\t\t// unknown qualified name:\r\n\t\t\tif (errors != null)\r\n\t\t\t{\r\n\t\t\t\tswitch (kind)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase DeclarationKind.Type: result = new UnknownType(qualifiedName.ToString()); break;\r\n\t\t\t\t\tcase DeclarationKind.Function: result = new UnknownFunction(qualifiedName.ToString()); break;\r\n\t\t\t\t\tcase DeclarationKind.Constant: result = new UnknownGlobalConstant(qualifiedName.ToString()); break;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprivate DMember ResolveExactName(QualifiedName qualifiedName, ref string/*!*/ fullName,\r\n\t\t\tDeclarationKind kind, Scope currentScope, bool mustResolve)\r\n\t\t{\r\n\t\t\tswitch (kind)\r\n\t\t\t{\r\n\t\t\t\tcase DeclarationKind.Type:\r\n\t\t\t\t\treturn compilationUnit.GetVisibleType(qualifiedName, ref fullName, currentScope, mustResolve);\r\n\r\n\t\t\t\tcase DeclarationKind.Function:\r\n\t\t\t\t\treturn compilationUnit.GetVisibleFunction(qualifiedName, ref fullName, currentScope);\r\n\r\n\t\t\t\tcase DeclarationKind.Constant:\r\n\t\t\t\t\treturn compilationUnit.GetVisibleConstant(qualifiedName, ref fullName, currentScope);\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\tthrow null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic DRoutine ResolveFunctionName(QualifiedName qualifiedName, Scope currentScope, out QualifiedName? alias,\r\n            ErrorSink errors, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\treturn (DRoutine)ResolveName(qualifiedName, DeclarationKind.Function, currentScope, out alias, errors, position, mustResolve);\r\n\t\t}\r\n\r\n\t\tpublic DType ResolveTypeName(QualifiedName qualifiedName, Scope currentScope, out QualifiedName? alias,\r\n\t\t\tErrorSink errors, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\treturn (DType)ResolveName(qualifiedName, DeclarationKind.Type, currentScope, out alias, errors, position, mustResolve);\r\n\t\t}\r\n\r\n\t\tpublic DConstant ResolveConstantName(QualifiedName qualifiedName, Scope currentScope, out QualifiedName? alias,\r\n            ErrorSink errors, Text.Span position, bool mustResolve)\r\n\t\t{\r\n\t\t\treturn (DConstant)ResolveName(qualifiedName, DeclarationKind.Constant, currentScope, out alias, errors, position, mustResolve);\r\n\t\t}\r\n\r\n\t\tinternal ClassConstant TryResolveClassConstantGlobally(GenericQualifiedName typeName, VariableName constantName)\r\n\t\t{\r\n\t\t\tif (typeName.IsGeneric) return null;\r\n\r\n\t\t\tQualifiedName? alias;\r\n            DType type = ResolveTypeName(typeName.QualifiedName, Scope.Global, out alias, null, Text.Span.Invalid, false);\r\n\r\n\t\t\tClassConstant constant;\r\n\t\t\tif (type != null && type.IsDefinite && type.GetConstant(constantName, null, out constant) == GetMemberResult.OK)\r\n\t\t\t\treturn constant;\r\n\t\t\telse\r\n\t\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal DConstant TryResolveGlobalConstantGlobally(QualifiedName qualifiedName)\r\n\t\t{\r\n\t\t\tQualifiedName? alias;\r\n            return ResolveConstantName(qualifiedName, Scope.Global, out alias, null, Text.Span.Invalid, false);\r\n\t\t}\r\n\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal void Emit(CodeGenerator/*!*/codeGenerator)\r\n\t\t{\r\n\t\t\tif (!compilationUnit.IsTransient || ((TransientCompilationUnit)compilationUnit).EvalKind == EvalKinds.SyntheticEval)\r\n\t\t\t\tthis.symbolDocumentWriter = compilationUnit.GetSymbolDocumentWriter(sourceFile.FullPath);\r\n\r\n\t\t\t// emit naming context:\r\n\t\t\tthis.namingContextFieldBuilder = EmitInitNamingContext();\r\n\r\n\t\t\t// emit AST content:\r\n            ast.Emit(codeGenerator);\r\n\t\t}\r\n\r\n\t\tprivate FieldBuilder EmitInitNamingContext()\r\n\t\t{\r\n            /*\r\n\t\t\tif (importedNamespaces != null && importedNamespaces.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tILEmitter il = ((PhpAssemblyBuilderBase)compilationUnit.ModuleBuilder.AssemblyBuilder).GlobalTypeEmitter;\r\n\r\n\t\t\t\t// naming the field by a number makes it possible to store it efficiently in the d-type-spec:\r\n\t\t\t\tstring field_name = il.GetNextUniqueIndex().ToString();\r\n\r\n\t\t\t\tFieldBuilder result = il.TypeBuilder.DefineField(field_name, typeof(NamingContext),\r\n\t\t\t\t\tFieldAttributes.Assembly | FieldAttributes.Static | FieldAttributes.InitOnly);\r\n\r\n\t\t\t\t// tmp = new string[<importedNamespaces.Count>] { ... };\r\n\t\t\t\t//LocalBuilder tmp = \r\n                il.EmitInitializedArray(Types.String[0], importedNamespaces.Count, (_il, i) =>\r\n\t\t\t\t{\r\n\t\t\t\t\t_il.Emit(OpCodes.Ldstr, importedNamespaces[i].ToString());\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// instantiate NamingContext\r\n\t\t\t\t//il.Ldloc(tmp);\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.NamingContext);\r\n\t\t\t\til.Emit(OpCodes.Stsfld, result);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\telse\r\n            */\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SourceFileUnit\r\n\r\n\tpublic sealed class SourceFileUnit : CompilationSourceUnit, IScannerHandler\r\n\t{\r\n\t\tpublic FileStream Stream { get { return stream; } }\r\n\t\tprivate FileStream stream;\r\n\r\n        /// <summary>\r\n        /// Gets inner line breaks as ExpandableLineBreaks.\r\n        /// </summary>\r\n        private ExpandableLineBreaks ExpandableLineBreaks { get { return (ExpandableLineBreaks)innerLineBreaks; } }\r\n\r\n        public SourceFileUnit(CompilationUnitBase/*!*/ compilationUnit, PhpSourceFile/*!*/ sourceFile, Encoding/*!*/ encoding)\r\n\t\t\t: base(compilationUnit, sourceFile, encoding, new ExpandableLineBreaks())\r\n\t\t{\r\n\t\t\tDebug.Assert(!(compilationUnit is TransientCompilationUnit) && encoding != null && sourceFile != null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Keeps stream open.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"InvalidSourceException\">Source file cannot be opened for reading.</exception>\r\n        public override void Parse(ErrorSink errors, IReductionsSink reductionsSink, LanguageFeatures features)\r\n\t\t{\r\n\t\t\tParser parser = new Parser();\r\n\t\t\tStreamReader source_reader;\r\n\r\n            try\r\n            {\r\n                stream = new FileStream(sourceFile.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read);\r\n                source_reader = new StreamReader(stream, encoding, true);\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new InvalidSourceException(sourceFile.FullPath, e);\r\n            }\r\n\r\n\t\t\tast = parser.Parse(this, source_reader, errors, reductionsSink, Lexer.LexicalStates.INITIAL, features);\r\n\t\t}\r\n\r\n        public override void Close()\r\n\t\t{\r\n\t\t\tif (stream != null)\r\n\t\t\t{\r\n\t\t\t\tstream.Close();\r\n\t\t\t\tstream = null;\r\n\t\t\t}\r\n\r\n            if (innerLineBreaks.GetType() == typeof(ExpandableLineBreaks))\r\n                innerLineBreaks = this.ExpandableLineBreaks.Finalize();\r\n\t\t}\r\n\r\n        public override string GetSourceCode(Text.Span span)\r\n        {\r\n            stream.Seek(0, SeekOrigin.Begin);\r\n            var source_reader = new StreamReader(stream, encoding, true);\r\n            var buffer = new char[1024];\r\n            \r\n            // seek to span.Start\r\n            for (int toread = span.Start; toread > 0; toread -= buffer.Length)\r\n                source_reader.Read(buffer, 0, Math.Min(toread, buffer.Length));\r\n\r\n            // read desired span\r\n            buffer = new char[span.Length];\r\n            source_reader.Read(buffer, 0, buffer.Length);\r\n\r\n            return new string(buffer);\r\n\r\n            //byte[] buf = new byte[length];\r\n            //stream.Seek(position.FirstOffset, SeekOrigin.Begin);\r\n            //int real_length = stream.Read(buf, 0, length);\r\n\r\n            //Debug.Assert(real_length == length);\r\n\r\n            //return Encoding.GetString(buf, 0, real_length);\r\n        }\r\n\r\n        #region IScannerHandler Members\r\n\r\n        void IScannerHandler.OnNextToken(Tokens token, char[] buffer, int tokenStart, int tokenLength)\r\n        {\r\n            // update internal ILineBreaks\r\n            Debug.Assert(innerLineBreaks is ExpandableLineBreaks);\r\n            this.ExpandableLineBreaks.Expand(buffer, tokenStart, tokenLength);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region SourceCodeUnit\r\n\r\n    /// <summary>\r\n    /// Source unit from string representation of code.\r\n    /// The code is expected to not contain opening and closing script tags.\r\n    /// </summary>\r\n\tpublic class SourceCodeUnit : CompilationSourceUnit\r\n\t{\r\n\t\tpublic string/*!*/ Code { get { return code; } }\r\n\t\tprivate string/*!*/ code;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Line position in the immediately containing source code.\r\n\t\t/// </summary>\r\n\t\tpublic int Line { get { return line; } }\r\n\t\tprivate int line;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Column position in the immediately containing source code.\r\n\t\t/// </summary>\r\n\t\tpublic int Column { get { return column; } }\r\n\t\tprivate int column;\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Initial state of the lexer\r\n\t\t/// </summary>\r\n\t\tprotected Lexer.LexicalStates initialState;\r\n\r\n\t\tpublic SourceCodeUnit(CompilationUnitBase/*!*/ compilationUnit, string/*!*/ code, PhpSourceFile/*!*/ sourceFile,\r\n\t\t\tEncoding/*!*/ encoding, int line, int column)\r\n\t\t\t: base(compilationUnit, sourceFile, encoding, Text.LineBreaks.Create(code))\r\n\t\t{\r\n\t\t\tthis.code = code;\r\n\t\t\tthis.line = line;\r\n\t\t\tthis.column = column;\r\n\r\n            // opening and closing script tags are not present\r\n\t\t\tthis.initialState = Lexer.LexicalStates.ST_IN_SCRIPTING;\r\n\t\t}\r\n\r\n        public override void Parse(ErrorSink/*!*/ errors, IReductionsSink/*!*/ reductionsSink, LanguageFeatures features)\r\n\t\t{\r\n            Parser parser = new Parser();\r\n\r\n\t\t\tusing (StringReader source_reader = new StringReader(code))\r\n\t\t\t{\r\n                ast = parser.Parse(this, source_reader, errors, reductionsSink, initialState, features);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        public override string GetSourceCode(Text.Span span)\r\n\t\t{\r\n            return span.GetText(code);\r\n\t\t}\r\n\r\n\t\tpublic override void Close()\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n        #region ILineBreaks Members\r\n\r\n        public override int GetLineFromPosition(int position)\r\n        {\r\n            // shift the position\r\n            return base.GetLineFromPosition(position) + this.Line;\r\n        }\r\n\r\n        public override void GetLineColumnFromPosition(int position, out int line, out int column)\r\n        {\r\n            // shift the position\r\n            base.GetLineColumnFromPosition(position, out line, out column);\r\n            if (line == 0)\r\n                column += this.Column;\r\n            line += this.Line;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n    #region PhpScriptSourceUnit\r\n\r\n    /// <summary>\r\n\t/// Represents a source code that is stored in a string, but contains\r\n\t/// a complete PHP script file including the initial marks\r\n\t/// </summary>\r\n\tpublic sealed class PhpScriptSourceUnit : SourceCodeUnit\r\n\t{\r\n\t\tpublic PhpScriptSourceUnit(CompilationUnitBase/*!*/ compilationUnit, string/*!*/ code, PhpSourceFile/*!*/ sourceFile,\r\n\t\t\tEncoding/*!*/ encoding, int line, int column)\r\n\t\t\t: base(compilationUnit, code, sourceFile, encoding, line, column)\r\n\t\t{\r\n\t\t\tthis.initialState = Lexer.LexicalStates.INITIAL;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region VirtualSourceFileUnit\r\n\r\n\tpublic sealed class VirtualSourceFileUnit : CompilationSourceUnit\r\n\t{\r\n\t\tpublic string/*!*/ Code { get { return code; } }\r\n\t\tprivate string/*!*/ code;\r\n\r\n\t\tpublic bool AllowGlobalCode { get { return allowGlobalCode; } set { allowGlobalCode = value; } }\r\n\t\tprivate bool allowGlobalCode = true;\r\n\r\n\t\tpublic VirtualSourceFileUnit(CompilationUnitBase/*!*/ compilationUnit, string/*!*/ code,\r\n\t\t\tPhpSourceFile/*!*/ sourceFile, Encoding/*!*/ encoding)\r\n            : base(compilationUnit, sourceFile, encoding, Text.LineBreaks.Create(code))\r\n\t\t{\r\n\t\t\tthis.code = code;\r\n\t\t}\r\n\r\n        public override void Parse(ErrorSink/*!*/ errors, IReductionsSink/*!*/ reductionsSink, LanguageFeatures features)\r\n\t\t{\r\n\t\t\tParser parser = new Parser();\r\n\t\t\tparser.AllowGlobalCode = this.allowGlobalCode;\r\n\r\n\t\t\tusing (StringReader reader = new StringReader(code))\r\n\t\t\t{\r\n\t\t\t\tast = parser.Parse(this, reader, errors, reductionsSink,\r\n\t\t\t\t\tLexer.LexicalStates.INITIAL, features);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        public override string GetSourceCode(Text.Span span)\r\n\t\t{\r\n            return span.GetText(code);\r\n\t\t}\r\n\r\n\t\tpublic override void Close()\r\n\t\t{\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SourceCodeDescriptor\r\n\r\n\t/// <summary>\r\n\t/// Uniquely identifies a piece of compiled source code.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic struct SourceCodeDescriptor : IEquatable<SourceCodeDescriptor>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Relative path to the containing source file.\r\n\t\t/// </summary>\r\n\t\tpublic string/*!*/ ContainingSourcePath { get { return containingSourcePath; } }\r\n\t\tprivate readonly string/*!*/ containingSourcePath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Column where the code is positioned relatively to the containing code.\r\n\t\t/// </summary>\r\n\t\tpublic int ContainingTransientModuleId { get { return containerId; } }\r\n\t\tprivate readonly int containerId;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Line where the code located relatively to the containing code.\r\n\t\t/// </summary>\r\n\t\tpublic int Line { get { return line; } }\r\n\t\tprivate readonly int line;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Column where the code is positioned relatively to the containing code.\r\n\t\t/// </summary>\r\n\t\tpublic int Column { get { return column; } }\r\n\t\tprivate readonly int column;\r\n\r\n\t\tinternal SourceCodeDescriptor(string/*!*/ containingSourcePath, int containerId, int line, int column)\r\n\t\t{\r\n\t\t\tthis.containingSourcePath = containingSourcePath;\r\n\t\t\tthis.containerId = containerId;\r\n\t\t\tthis.line = line;\r\n\t\t\tthis.column = column;\r\n\t\t}\r\n\r\n\t\t#region IEquatable<SourceCodeDescriptor> Members\r\n\r\n\t\tpublic bool Equals(SourceCodeDescriptor other)\r\n\t\t{\r\n\t\t\treturn this.line == other.line && this.column == other.column && this.containerId == other.containerId &&\r\n\t\t\t\t this.containingSourcePath == other.containingSourcePath;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn unchecked(containingSourcePath.GetHashCode() ^ (containerId << 24) ^ (line << 16) ^ column);\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tif (!(obj is SourceCodeDescriptor)) return false;\r\n\t\t\treturn Equals((SourceCodeDescriptor)obj);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/TypeDescs.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//#define DEBUG_DELEGATE_STUBS\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.Emit;\r\nusing System.Threading;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing ArrayEx = PHP.CoreCLR.ArrayEx;\r\n#else\r\nusing System.Runtime.Serialization;\r\nusing ArrayEx = System.Array;\r\n#endif\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region DTypeDesc\r\n\r\n\t/// <summary>\r\n\t/// The representative of a dynamic type.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic abstract class DTypeDesc : DMemberDesc\r\n\t{\r\n\t\t#region Statics\r\n\r\n\t\tpublic static readonly DTypeDesc[]/*!*/ EmptyArray = new DTypeDesc[0];\r\n\r\n\t\tinternal const BindingFlags MembersReflectionBindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Instance |\r\n\t\t\tBindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public;\r\n\r\n\t\tinternal const BindingFlags AllMembersReflectionBindingFlags = BindingFlags.Instance |\r\n\t\t\tBindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Open-instance delegate that returns the appropriate member dictionary for the specified\r\n\t\t/// <see cref=\"DTypeDesc\"/> instance.\r\n\t\t/// </summary>\r\n\t\tprivate delegate Dictionary<N, T> GetMemberDictionary<N, T>(DTypeDesc typeDesc);\r\n\r\n        /// <summary>\r\n        /// Cache of <see cref=\"RuntimeTypeHandle\"/> mapping into <see cref=\"DTypeDesc\"/>.\r\n        /// </summary>\r\n        private readonly static SynchronizedCache<RuntimeTypeHandle, DTypeDesc>/*!*/cache\r\n            = new SynchronizedCache<RuntimeTypeHandle, DTypeDesc>(CreateNoLockInternal);\r\n\r\n\t\tpublic static readonly DTypeDesc/*!*/ SystemObjectTypeDesc;\r\n\t\tpublic static readonly DTypeDesc/*!*/ DelegateTypeDesc;\r\n\t\tpublic static readonly DTypeDesc/*!*/ AttributeTypeDesc;\r\n\t\tpublic static readonly DTypeDesc/*!*/ AttributeUsageAttributeTypeDesc;\r\n\t\tpublic static readonly DTypeDesc/*!*/ InterlockedTypeDesc;\r\n\r\n\t\t// emitted:\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ BooleanTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ IntegerTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ LongIntegerTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ DoubleTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ StringTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ ResourceTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ ArrayTypeDesc;\r\n\t\tpublic static readonly PrimitiveTypeDesc/*!*/ ObjectTypeDesc;\r\n        public static readonly PrimitiveTypeDesc/*!*/ CallableTypeDesc;\r\n\r\n\t\tprivate static readonly GetMemberDictionary<VariableName, DConstantDesc> getConstantDictionary;\r\n\t\tprivate static readonly GetMemberDictionary<VariableName, DPropertyDesc> getPropertyDictionary;\r\n\t\tprivate static readonly GetMemberDictionary<Name, DRoutineDesc> getMethodDictionary;\r\n\r\n\t\tstatic DTypeDesc()\r\n\t\t{\r\n\t\t\tgetConstantDictionary = (GetMemberDictionary<VariableName, DConstantDesc>)\r\n\t\t\t\tDelegate.CreateDelegate(typeof(GetMemberDictionary<VariableName, DConstantDesc>), null,\r\n\t\t\t\ttypeof(DTypeDesc).GetProperty(\"Constants\", BindingFlags.Public | BindingFlags.Instance).GetGetMethod(true));\r\n\r\n\t\t\tgetPropertyDictionary = (GetMemberDictionary<VariableName, DPropertyDesc>)\r\n\t\t\t\tDelegate.CreateDelegate(typeof(GetMemberDictionary<VariableName, DPropertyDesc>), null,\r\n                typeof(DTypeDesc).GetProperty(\"Properties\", BindingFlags.Public | BindingFlags.Instance).GetGetMethod(true));\r\n\r\n\t\t\tgetMethodDictionary = (GetMemberDictionary<Name, DRoutineDesc>)\r\n\t\t\t\tDelegate.CreateDelegate(typeof(GetMemberDictionary<Name, DRoutineDesc>), null,\r\n                typeof(DTypeDesc).GetProperty(\"Methods\", BindingFlags.Public | BindingFlags.Instance).GetGetMethod(true));\r\n\r\n\t\t\tif (UnknownModule.RuntimeModule == null)\r\n\t\t\t\tUnknownModule.RuntimeModule = new UnknownModule();\r\n\r\n            SystemObjectTypeDesc = Create(typeof(System.Object));\r\n            DelegateTypeDesc = Create(typeof(System.Delegate));\r\n            AttributeTypeDesc = Create(typeof(System.Attribute));\r\n            AttributeUsageAttributeTypeDesc = Create(typeof(System.AttributeUsageAttribute));\r\n            InterlockedTypeDesc = Create(typeof(System.Threading.Interlocked));\r\n\r\n\t\t\tBooleanTypeDesc = new PrimitiveTypeDesc(typeof(bool), PhpTypeCode.Boolean);\r\n\t\t\tIntegerTypeDesc = new PrimitiveTypeDesc(typeof(int), PhpTypeCode.Integer);\r\n\t\t\tLongIntegerTypeDesc = new PrimitiveTypeDesc(typeof(long), PhpTypeCode.LongInteger);\r\n\t\t\tDoubleTypeDesc = new PrimitiveTypeDesc(typeof(double), PhpTypeCode.Double);\r\n\t\t\tStringTypeDesc = new PrimitiveTypeDesc(typeof(string), PhpTypeCode.String);\r\n\t\t\tResourceTypeDesc = new PrimitiveTypeDesc(typeof(PhpResource), PhpTypeCode.PhpResource);\r\n\t\t\tArrayTypeDesc = new PrimitiveTypeDesc(typeof(PhpArray), PhpTypeCode.PhpArray);\r\n\t\t\tObjectTypeDesc = new PrimitiveTypeDesc(typeof(DObject), PhpTypeCode.DObject);\r\n            CallableTypeDesc = new PrimitiveTypeDesc(typeof(void)/*not used*/, PhpTypeCode.PhpCallable);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic virtual bool IsGlobal { get { return false; } }\r\n\t\tpublic virtual bool IsUnknown { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Triggers full-reflect when accessed and is <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic DType Type\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (Member == null) lock (this) if (Member == null) { Member = Reflect(); }\r\n\t\t\t\treturn (DType)Member;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Triggers full-reflect when accessed and is <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic KnownType KnownType { get { return (KnownType)Type; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Triggers full-reflect when accessed and is <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic PhpType PhpType { get { return (PhpType)Type; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Triggers full-reflect when accessed and is <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic ClrType ClrType { get { return (ClrType)Type; } }\r\n\r\n\t\tpublic bool IsInterface { get { return (memberAttributes & PhpMemberAttributes.Interface) != 0; } }\r\n        public bool IsTrait { get { return (memberAttributes & PhpMemberAttributes.Trait) != 0; } }\r\n\t\tpublic virtual bool IsValueType { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// For generated types, this is <B>null</B> before the type builder is defined.\r\n\t\t/// </summary>\r\n\t\tpublic Type RealType { get { return realType; } }\r\n\t\tprivate Type realType;\r\n\r\n        /// <summary>\r\n        /// Delegate that calls {.newobj .ctor(ScriptContext, bool)} of the <c>RealType</c>.\r\n        /// </summary>\r\n        internal Ctor_ScriptContext_Bool RealTypeCtor_ScriptContext_Bool = null;\r\n        internal delegate object Ctor_ScriptContext_Bool(ScriptContext context, bool newInstance);\r\n        \r\n        /// <summary>\r\n        /// Delegate that calls {.newobj .ctor(ScriptContext, DTypeDesc)} of the <c>RealType</c>.\r\n        /// </summary>\r\n        internal Ctor_ScriptContext_DTypeDesc RealTypeCtor_ScriptContext_DTypeDesc = null;\r\n        internal delegate object Ctor_ScriptContext_DTypeDesc(ScriptContext context, DTypeDesc caller);\r\n        \r\n\t\t/// <summary>\r\n\t\t/// <B>null</B> for types without a base type (PHP types only).\r\n\t\t/// </summary>\r\n\t\tpublic DTypeDesc Base { get { return baseDesc; } }\r\n\t\tprivate DTypeDesc baseDesc;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generic definition for this type or <B>null</B> if the type is non-generic or unknown.\r\n\t\t/// Generic definitions points to themselves, instantiations shares a single instance of generic definition.\r\n\t\t/// </summary>\r\n\t\tpublic GenericTypeDefinition GenericDefinition { get { return genericDefinition; } }\r\n\t\tprotected GenericTypeDefinition genericDefinition;\r\n\r\n\t\tpublic bool IsGeneric\r\n\t\t{\r\n\t\t\tget { return genericDefinition != null; }\r\n\t\t}\r\n\r\n\t\tpublic virtual bool IsGenericDefinition\r\n\t\t{\r\n\t\t\tget { return genericDefinition != null && ReferenceEquals(genericDefinition.GenericType, this); }\r\n\t\t}\r\n\r\n\t\tpublic GenericParameterDesc[]/*!!*/ GenericParameters\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (genericDefinition != null) ? genericDefinition.GenericParameters : GenericParameterDesc.EmptyArray;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Tables\r\n\r\n\t\t//\r\n\t\t// WARNING: Do not make following tables public as their readonly-ness is not imposed!\r\n\t\t// NOTE: The tables may be shared among multiple type-descs.\r\n\t\t//\r\n\r\n        /// <summary>\r\n        /// Reflection is pending. Tables should not be used until <c>pendingReflection</c> is <c>true</c>.\r\n        /// </summary>\r\n        private bool pendingReflection = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// All implemented interfaces (including inherited ones).\r\n\t\t/// It is impossible to get rid of inherited interfaces due to lack of support from CLR.\r\n\t\t/// For PHP types being compiled, this array is filled by inheritance hierarchy analysis.\r\n\t\t/// </summary>\r\n\t\tinternal DTypeDesc[]/*!!*/ Interfaces\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (interfaces == null || pendingReflection)\r\n                    lock(this)\r\n                        if (interfaces == null)\r\n                        {\r\n                            pendingReflection = true;\r\n                            ReflectInterfaces();\r\n                            Debug.Assert(interfaces != null);\r\n                            pendingReflection = false;\r\n                        }\r\n\r\n\t\t\t\treturn interfaces;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected DTypeDesc[] interfaces;\r\n\r\n\t\tpublic Dictionary<Name, DRoutineDesc> Methods\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (methods == null || pendingReflection)\r\n                    lock (this)\r\n                        if (methods == null)\r\n                        {\r\n                            pendingReflection = true;\r\n                            ReflectMethods();\r\n                            Debug.Assert(methods != null);\r\n                            pendingReflection = false;\r\n                        }\r\n\r\n\t\t\t\treturn methods;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected Dictionary<Name, DRoutineDesc> methods;\r\n\r\n\t\t// TODO: OrderedHashtable\r\n\t\tpublic Dictionary<VariableName, DPropertyDesc> Properties\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (properties == null || pendingReflection)\r\n                    lock(this)\r\n                        if (properties == null)\r\n                        {\r\n                            pendingReflection = true;\r\n                            ReflectProperties();\r\n                            Debug.Assert(properties != null);\r\n                            pendingReflection = false;\r\n                        }\r\n\r\n\t\t\t\treturn properties;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected Dictionary<VariableName, DPropertyDesc> properties;\r\n\r\n\t\tpublic Dictionary<VariableName, DConstantDesc> Constants\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (constants == null || pendingReflection)\r\n                    lock(this)\r\n                        if (constants == null)\r\n                        {\r\n                            pendingReflection = true;\r\n                            ReflectConstants();\r\n                            Debug.Assert(constants != null);\r\n                            pendingReflection = false;\r\n                        }\r\n\r\n\t\t\t\treturn constants;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprotected Dictionary<VariableName, DConstantDesc> constants;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n\t\t/// Used only by <see cref=\"GlobalTypeDesc\"/>, <see cref=\"UnknownTypeDesc\"/>, <see cref=\"GenericParameterDesc\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected DTypeDesc()\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.genericDefinition = null;\r\n\t\t\tthis.baseDesc = null;\r\n\t\t\tthis.realType = null;\r\n\t\t\tthis.methods = null;\r\n\t\t\tthis.properties = null;\r\n\t\t\tthis.constants = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used only by <see cref=\"ConstructedTypeDesc\"/> and <see cref=\"PhpTypeCompletionDesc\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected DTypeDesc(DTypeDesc baseDesc, Type realType, GenericTypeDefinition genericDefinition)\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.genericDefinition = genericDefinition;\r\n\t\t\tthis.baseDesc = baseDesc;\r\n\t\t\tthis.realType = realType;\r\n\t\t\tthis.methods = null;\r\n\t\t\tthis.properties = null;\r\n\t\t\tthis.constants = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler.\r\n\t\t/// </summary>\r\n\t\tpublic DTypeDesc(DModule/*!*/ declaringModule, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule.GlobalType.TypeDesc, memberAttributes)\r\n\t\t{\r\n\t\t\tthis.realType = null;            // to be defined later\r\n\t\t\tthis.genericDefinition = null;   // to be written up\r\n\t\t\tthis.baseDesc = null;            // to be written up\r\n\t\t\tthis.interfaces = null;          // to be written up\r\n\t\t\tthis.methods = new Dictionary<Name, DRoutineDesc>();\r\n\t\t\tthis.properties = new Dictionary<VariableName, DPropertyDesc>();\r\n\t\t\tthis.constants = new Dictionary<VariableName, DConstantDesc>();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler after the type has been analyzed. First write up.\r\n\t\t/// Used also at run-time.\r\n\t\t/// </summary>\r\n\t\tinternal void WriteUpGenericDefinition(GenericTypeDefinition genericDefinition)\r\n\t\t{\r\n\t\t\tthis.genericDefinition = genericDefinition;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler after the type has been analyzed. Second write up.\r\n\t\t/// </summary>\r\n\t\tinternal void WriteUpBaseType(DTypeDesc baseDesc)\r\n\t\t{\r\n\t\t\tthis.baseDesc = baseDesc;\r\n\t\t}\r\n\r\n\t\tinternal void WriteUpInterfaces(DTypeDesc[]/*!!*/ interfaces)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.interfaces == null && interfaces != null);\r\n\r\n\t\t\tthis.interfaces = interfaces;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the compiler when the type is being defined.\r\n\t\t/// A <B>null</B> reference means that the type has no own real builder (e.g. <see cref=\"GlobalType\"/>).\r\n\t\t/// </summary>\r\n\t\tinternal void DefineBuilder(TypeBuilder typeBuilder)\r\n\t\t{\r\n\t\t\tthis.realType = typeBuilder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the compiler when the type parameter is being defined.\r\n\t\t/// A <B>null</B> reference means that the type parameter has no own real builder (generic methods).\r\n\t\t/// </summary>\r\n\t\tinternal void DefineBuilder(GenericTypeParameterBuilder genericTypeParameterBuilder)\r\n\t\t{\r\n\t\t\tthis.realType = genericTypeParameterBuilder;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the compiler when the type is being baked.\r\n\t\t/// </summary>\r\n\t\tinternal void Bake(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\tDebug.Assert(realType != null);\r\n\r\n\t\t\tthis.realType = realType;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the reflection.\r\n\t\t/// </summary>\r\n\t\tprotected DTypeDesc(Type/*!*/ realType, GenericTypeDefinition genericDefinition)\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.realType = realType;\r\n\t\t\tthis.genericDefinition = genericDefinition;\r\n\t\t\tthis.methods = null;\r\n\t\t\tthis.properties = null;\r\n\t\t\tthis.constants = null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by reflection and run-time.\r\n\t\t/// </summary>\r\n\t\tpublic DTypeDesc(DModule/*!*/ declaringModule, Type/*!*/ realType, DTypeDesc/*!*/ baseDesc,\r\n\t\t\tPhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule.GlobalType.TypeDesc, memberAttributes)\r\n\t\t{\r\n\t\t\tthis.realType = realType;\r\n\t\t\tthis.baseDesc = baseDesc;\r\n\t\t\tthis.genericDefinition = null;    // to be written up\r\n\t\t\tthis.methods = null;              // to be filled later\r\n\t\t\tthis.properties = null;           // to be filled later\r\n\t\t\tthis.constants = null;            // to be filled later\r\n\t\t}\r\n\r\n        #region Create proper DTypeDesc\r\n\r\n        /// <summary>\r\n\t\t/// To be used at run-time for getting <see cref=\"DTypeDesc\"/> from <see cref=\"Type\"/>.\r\n\t\t/// </summary>\r\n        public static DTypeDesc Create(Type realType)\r\n\t\t{\r\n            if (object.ReferenceEquals(realType, null))\r\n                return null;\r\n\r\n            return Create(realType.TypeHandle);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// To be used at run-time for getting <see cref=\"DTypeDesc\"/> from <see cref=\"RuntimeTypeHandle\"/>.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static DTypeDesc/*!*/ Create(RuntimeTypeHandle realTypeHandle)\r\n\t\t{\r\n            return cache.Get(realTypeHandle);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Create the new <see cref=\"DTypeDesc\"/> of given type.\r\n        /// </summary>\r\n        /// <param name=\"realTypeHandle\">The type handle.</param>\r\n        /// <param name=\"forcePhptype\">True to force create <see cref=\"PhpTypeDesc\"/>.</param>\r\n        /// <returns>New <see cref=\"DTypeDesc\"/>.</returns>\r\n        /// <remarks>The newly created <see cref=\"DTypeDesc\"/> is added into the cache.</remarks>\r\n        internal static DTypeDesc/*!*/ Recreate(RuntimeTypeHandle realTypeHandle, bool forcePhptype)\r\n        {\r\n            return cache.Update(realTypeHandle, (key) => { return CreateNoLockInternal(key, forcePhptype); });\r\n        }\r\n\r\n        private static DTypeDesc/*!*/ CreateNoLockInternal(RuntimeTypeHandle realTypeHandle)\r\n        {\r\n            return CreateNoLockInternal(realTypeHandle, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create <see cref=\"DTypeDesc\"/> of given type.\r\n        /// </summary>\r\n        /// <param name=\"realTypeHandle\">Runtime type handle of the type.</param>\r\n        /// <param name=\"forcePhpType\">True to force to create <see cref=\"PhpTypeDesc\"/>.</param>\r\n        /// <returns>New <see cref=\"DTypeDesc\"/> wrapping the given <paramref name=\"realTypeHandle\"/>.</returns>\r\n        /// <remarks>The method is not thread safe and it does not lock or cache anything.</remarks>\r\n        private static DTypeDesc/*!*/ CreateNoLockInternal(RuntimeTypeHandle realTypeHandle, bool forcePhpType)\r\n\t\t{\r\n\t\t\tDTypeDesc result;\r\n\t\t\tType real_type = System.Type.GetTypeFromHandle(realTypeHandle);\r\n\t\t\tPhpMemberAttributes member_attrs = Enums.GetMemberAttributes(real_type);\r\n\r\n\t\t\tif (forcePhpType || PhpType.IsPhpRealType(real_type))\r\n\t\t\t{\r\n\t\t\t\tDTypeDesc base_desc = (real_type.BaseType == typeof(PhpObject)) ? null : Create(real_type.BaseType);\r\n\t\t\t\tresult = new PhpTypeDesc(UnknownModule.RuntimeModule, real_type, base_desc, member_attrs);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDTypeDesc base_desc = DTypeDesc.Create(real_type.BaseType);\r\n\r\n\t\t\t\tif (!real_type.IsAbstract && base_desc != null && base_desc.IsSubclassOf(DelegateTypeDesc))\r\n\t\t\t\t\tresult = new ClrDelegateDesc(UnknownModule.RuntimeModule, real_type, base_desc, member_attrs);\r\n\t\t\t\telse\r\n\t\t\t\t\tresult = new ClrTypeDesc(UnknownModule.RuntimeModule, real_type, base_desc, member_attrs);\r\n\t\t\t}\r\n\r\n\t\t\t// associated the generic definition:\r\n\t\t\tif (real_type.IsGenericTypeDefinition)\r\n\t\t\t\tresult.WriteUpGenericDefinition(new GenericTypeDefinition(result));\r\n\t\t\telse if (real_type.IsGenericType)\r\n\t\t\t\tresult.WriteUpGenericDefinition(Create(real_type.GetGenericTypeDefinition().TypeHandle).GenericDefinition);\r\n\r\n            return result;\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Utility\r\n\r\n        /// <summary>\r\n        /// Name of the class excluding namespace name.\r\n        /// </summary>\r\n        public string/*!*/ MakeSimpleName()\r\n        {\r\n            if (simpleName == null)\r\n            {\r\n                if (this.Member != null && Member.FullName != null)\r\n                {\r\n                    int lastSeparator = this.Member.FullName.LastIndexOf(QualifiedName.Separator);\r\n                    simpleName = (lastSeparator == -1) ? this.Member.FullName : this.Member.FullName.Substring(lastSeparator + 1);\r\n                }\r\n                else\r\n                {\r\n                    simpleName = MakeSimpleName(RealType);\r\n                }\r\n            }\r\n            return simpleName;\r\n        }\r\n        private string simpleName = null;\r\n\r\n        private static string/*!*/ MakeSimpleName(Type/*!*/realType)\r\n        {\r\n            var phpTypeAttr = ImplementsTypeAttribute.Reflect(realType);\r\n            if (phpTypeAttr != null && phpTypeAttr.PHPTypeName != null)\r\n                return phpTypeAttr.PHPTypeName;\r\n            else\r\n                return ClrNotationUtils.SubstringWithoutBackquoteAndHash(realType.Name, 0, realType.Name.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Full name of the type, including namespace name. Uses PHP namespace separator.\r\n        /// </summary>\r\n        public override string/*!*/ MakeFullName()\r\n        {\r\n            if (Member != null)\r\n                return Member.FullName;\r\n\r\n            return GetFullName(RealType, new StringBuilder()).ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Full name of the type, including namespace name and generic parameters. Uses PHP namespace separator.\r\n        /// </summary>\r\n        public override string/*!*/ MakeFullGenericName()\r\n        {\r\n            return GetFullGenericName(RealType, new StringBuilder()).ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Full name of the type, including namespace name and generic parameters. Uses PHP namespace separator.\r\n        /// </summary>\r\n        internal static StringBuilder/*!*/ GetFullGenericName(Type/*!*/ realType, StringBuilder/*!*/ result)\r\n        {\r\n            Debug.Assert(realType != null && result != null);\r\n\r\n            GetFullName(realType, result);\r\n\r\n            if (!realType.IsGenericType)\r\n                return result;\r\n\r\n            ConstructedTypeDesc.GenericArgumentsToString(realType.GetGenericArguments(), result);\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static StringBuilder/*!*/ GetFullName(Type/*!*/ realType, StringBuilder/*!*/ result)\r\n        {\r\n            Debug.Assert(realType != null && result != null);\r\n\r\n            // TODO: do this better\r\n            // proposed solution: RuntimeModule will convert lazily itself to a DModule \r\n            // DModule will then implement its policy of naming conventions and unmangling methods\r\n\r\n            // primitive types first:\r\n            string primitive_name = PrimitiveTypeDesc.GetPrimitiveName(realType);\r\n            if (primitive_name != null)\r\n                return result.Append(primitive_name);\r\n\r\n            // naming policy of PhpLibraryModule is PHP.Library.library_namespace.type_name#n`m:\r\n            // namespace is ignored\r\n            if (!String.IsNullOrEmpty(realType.Namespace) && !realType.Namespace.StartsWith(Namespaces.Library))\r\n            {\r\n                if (realType.Namespace[0] == '<')\r\n                {\r\n                    // naming policy of ScriptModule is <coded_file_name>.user_namespace_clr.type_name#n`m:\r\n                    int closing = realType.Namespace.IndexOf('>') + 2;\r\n                    if (closing > 1 && closing < realType.Namespace.Length)\r\n                    {\r\n                        result.Append(realType.Namespace.Substring(closing).Replace('.', QualifiedName.Separator));\r\n                        result.Append(QualifiedName.Separator);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // naming policy of Pure Module is user_namespace_clr.type_name#n`m:\r\n                    result.Append(realType.Namespace.Replace('.', QualifiedName.Separator));\r\n                    result.Append(QualifiedName.Separator);\r\n                }\r\n            }\r\n\r\n            if (realType.DeclaringType != null)\r\n                GetNestedTypeNames(realType.DeclaringType, result);\r\n\r\n            result.Append(MakeSimpleName(realType));\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static void GetNestedTypeNames(Type/*!*/ type, StringBuilder/*!*/ result)\r\n        {\r\n            Debug.Assert(type != null && result != null);\r\n\r\n            // depth first:\r\n            if (type.DeclaringType != null)\r\n                GetNestedTypeNames(type.DeclaringType, result);\r\n\r\n            result.Append(ClrNotationUtils.SubstringWithoutBackquoteAndHash(type.Name, 0, type.Name.Length));\r\n            result.Append(QualifiedName.Separator);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this instance contains a given <see cref=\"DTypeDesc\"/>\r\n\t\t/// in its inheritance hierarchy or vice-versa.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"anotherTypeDesc\">Another <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <returns><B>True</B> if the two types are related, <B>false</B> otherwise.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The (a &lt;: b || b &lt;: a) plays an important role in member accessibility checks.\r\n\t\t/// </remarks>\r\n\t\tpublic bool IsRelatedTo(DTypeDesc/*!*/ anotherTypeDesc)\r\n\t\t{\r\n\t\t\t// try to guess the shorter order\r\n\t\t\tif (IsInterface)\r\n\t\t\t{\r\n\t\t\t\treturn (IsAssignableFrom(anotherTypeDesc) || anotherTypeDesc.IsAssignableFrom(this));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn (anotherTypeDesc.IsAssignableFrom(this) || IsAssignableFrom(anotherTypeDesc));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this instance is in the iheritance hierarchy (i.e. bases and implemented interfaces)\r\n\t\t/// of a given <see cref=\"DTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"anotherTypeDesc\">Another <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <returns><B>True</B> if this instance is one of <paramref name=\"anotherTypeDesc\"/>'s\r\n\t\t/// base types or implemented interfaces, <B>false</B> otherwise.</returns>\r\n\t\tpublic bool IsAssignableFrom(DTypeDesc/*!*/ anotherTypeDesc)\r\n\t\t{\r\n\t\t\t// Note, querying real type (Type.IsAssignableFrom) is slower than traversing our own hierarchy.\r\n\t\t\t// Besides, our implementation works also for descriptors whose real types have not yet been created.\r\n\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tif (ReferenceEquals(anotherTypeDesc, this))\r\n                    return true;\r\n\r\n\t\t\t\tif (IsInterface)\r\n\t\t\t\t{\r\n\t\t\t\t\t// search in interfaces implemented by the other type desc\r\n\t\t\t\t\tforeach (var iface in anotherTypeDesc.Interfaces)\r\n\t\t\t\t\t\tif (IsAssignableFrom(iface))\r\n                            return true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tanotherTypeDesc = anotherTypeDesc.Base;\r\n\t\t\t}\r\n\t\t\twhile (anotherTypeDesc != null);\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this instance is a subclass of a given <see cref=\"DTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"superTypeDesc\">Another <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <returns><B>True</B> if this instance is one of <paramref name=\"superTypeDesc\"/>'s\r\n\t\t/// base types or implemented interfaces, <B>false</B> otherwise.</returns>\r\n\t\tpublic bool IsSubclassOf(DTypeDesc/*!*/ superTypeDesc)\r\n\t\t{\r\n\t\t\t// Note, querying real type (Type.IsSubclassOf) is slower than traversing our own hierarchy.\r\n\t\t\t// Besides, our implementation works also for descriptors whose real types have not yet been created.\r\n\r\n\t\t\tDTypeDesc desc = this;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tif (ReferenceEquals(desc, superTypeDesc)) return true;\r\n\t\t\t\tdesc = desc.Base;\r\n\t\t\t}\r\n\t\t\twhile (desc != null);\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this instance can be used as a generic argument for the specified generic parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameter\">The generic parameter type.</param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool IsCompatibleWithGenericParameter(Type/*!*/ parameter)\r\n\t\t{\r\n\t\t\tDebug.Assert(parameter.IsGenericParameter);\r\n\r\n\t\t\tGenericParameterAttributes attrs = parameter.GenericParameterAttributes;\r\n\r\n\t\t\t// check default ctor constraint\r\n\t\t\tif (Enums.GenericParameterAttrTest(attrs, GenericParameterAttributes.DefaultConstructorConstraint))\r\n\t\t\t{\r\n\t\t\t\tif (!Type.HasDefaultConstructor) return false;\r\n\t\t\t}\r\n\r\n\t\t\t// check ref/value type constraints\r\n\t\t\tif (Enums.GenericParameterAttrTest(attrs, GenericParameterAttributes.ReferenceTypeConstraint))\r\n\t\t\t{\r\n\t\t\t\tif (Type.IsValueType) return false;\r\n\t\t\t}\r\n\t\t\telse if (Enums.GenericParameterAttrTest(attrs, GenericParameterAttributes.NotNullableValueTypeConstraint))\r\n\t\t\t{\r\n\t\t\t\tif (!Type.IsValueType) return false;\r\n\t\t\t}\r\n\r\n\t\t\tType[] constraints = parameter.GetGenericParameterConstraints();\r\n\r\n\t\t\tif (realType != null)\r\n\t\t\t{\r\n\t\t\t\t// perform the check using real types\r\n\t\t\t\tfor (int i = 0; i < constraints.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!constraints[i].IsAssignableFrom(realType)) return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// build type descs out of the constraints\r\n\t\t\t\tfor (int i = 0; i < constraints.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tDTypeDesc constraint_desc = DTypeDesc.Create(constraints[i]);\r\n\t\t\t\t\tif (constraint_desc.IsAssignableFrom(this)) return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic static bool IsSystemObjectCompatibleWithGenericParameter(Type/*!*/ parameter)\r\n\t\t{\r\n\t\t\tif (Enums.GenericParameterAttrTest(parameter.GenericParameterAttributes, GenericParameterAttributes.NotNullableValueTypeConstraint))\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: Is it possible for constraints to contain System.Object?\r\n\t\t\t// Is it possible that the types repeat in the constraints array?\r\n\t\t\t// If not, this can be optimized (ask for emptyness or single Object item):\r\n\t\t\tforeach (Type type in parameter.GetGenericParameterConstraints())\r\n\t\t\t{\r\n\t\t\t\tif (type != Types.Object[0]) return false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic DTypeDesc[]/*!!*/ GetImplementedInterfaces()\r\n\t\t{\r\n\t\t\treturn (DTypeDesc[])Interfaces.Clone();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected abstract DType/*!*/ Reflect();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflectes generic parameters of the generic type definition. Assumes no parameters if not overriden.\r\n\t\t/// </summary>\r\n\t\tinternal virtual GenericParameterDesc[]/*!!*/ ReflectGenericParameters(DTypeDesc referringType, DRoutineDesc referringRoutine,\r\n\t\t\tResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tDebug.Assert(this.IsGenericDefinition, \"Only a generic type definition can reflect generic parameters.\");\r\n\t\t\treturn GenericParameterDesc.EmptyArray;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initialize the <c>interfaces</c> property with an array of items.\r\n        /// This method is not thread safe. It assumes <c>interfaces</c> are not reflected yet.\r\n        /// </summary>\r\n\t\tprotected abstract void ReflectInterfaces();\r\n        /// <summary>\r\n        /// Initialize the <c>methods</c> property with an array of items.\r\n        /// This method is not thread safe. It assumes <c>methods</c> are not reflected yet.\r\n        /// </summary>\r\n        protected abstract void ReflectMethods();\r\n        /// <summary>\r\n        /// Initialize the <c>properties</c> property with an array of items.\r\n        /// This method is not thread safe. It assumes <c>properties</c> are not reflected yet.\r\n        /// </summary>\r\n        protected abstract void ReflectProperties();\r\n        /// <summary>\r\n        /// Initialize the <c>constants</c> property with an array of items.\r\n        /// This method is not thread safe. It assumes <c>constants</c> are not reflected yet.\r\n        /// </summary>\r\n        protected abstract void ReflectConstants();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Lookup\r\n\r\n\t\t#region Universal Lookup\r\n\r\n\t\t[Flags]\r\n\t\tprivate enum LookupFlags\r\n\t\t{\r\n\t\t\tNone = 0,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Specifies whether private members are reported as non-accessible by subtypes.\r\n\t\t\t/// </summary>\r\n\t\t\tInheritPrivate = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Specifies whether interfaces should be included in the lookup.\r\n\t\t\t/// </summary>\r\n\t\t\tSearchInterfaces = 2,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Specifies whether only instance members should be searched.\r\n\t\t\t/// </summary>\r\n\t\t\tIgnoreStaticMembers = 4 // have to be checked explicitly\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for a member with the specified <paramref name=\"name\"/> by walking up the inheritance hierarchy.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"N\">Type of member dictionary keys.</typeparam>\r\n\t\t/// <typeparam name=\"T\">Type of member dictionary values.</typeparam>\r\n\t\t/// <param name=\"dictionary\">Delegate that returns the member dictionary for a given <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <param name=\"name\">Member name.</param>\r\n\t\t/// <param name=\"context\">Caller context.</param>\r\n\t\t/// <param name=\"flags\">Flags that adjust the lookup.</param>\r\n\t\t/// <param name=\"member\">Receives the member on success (<see cref=\"GetMemberResult.OK\"/>) and on bad visiblity\r\n\t\t/// (<see cref=\"GetMemberResult.BadVisibility\"/>).</param>\r\n\t\t/// <returns>The lookup result. If difference from <see cref=\"GetMemberResult.NotFound\"/>, <paramref name=\"member\"/>\r\n\t\t/// is non-<B>null</B>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// This method strives to incorporate all the PHP member lookup nuances. At the same time, all visibility\r\n\t\t/// combinations that are introduced by CLR members due to overloading must be supported.\r\n\t\t/// </remarks>\r\n\t\tprivate GetMemberResult GetMember<N, T>(GetMemberDictionary<N, T> dictionary, N name, DTypeDesc context,\r\n\t\t\tLookupFlags flags, out T member) where T : DMemberDesc\r\n\t\t{\r\n\t\t\tmember = null;\r\n\t\t\tbool include_statics = ((flags & LookupFlags.IgnoreStaticMembers) == 0);\r\n            bool static_used_as_nonstatic_reported = false;\r\n            bool seen_context = ReferenceEquals(this, context);\r\n\r\n\t\t\t// start searching in this class\r\n\t\t\tDTypeDesc declarer = this;\r\n            do\r\n\t\t\t{\r\n\t\t\t\t// get the dictionary of members for the current type desc\r\n\t\t\t\tDictionary<N, T> members = dictionary(declarer);\r\n\r\n\t\t\t\tT candidate;\r\n\t\t\t\tif (members.TryGetValue(name, out candidate))\r\n\t\t\t\t{\r\n                    if (include_statics || !candidate.IsStatic)\r\n                    {\r\n                        if ((candidate.IsPublic && context == null) ||\r\n                            (candidate.IsPrivate && declarer == context)) // (1)\r\n                        {\r\n                            // if candidate is public and we surely won't hit the exact private match,\r\n                            // or we are in the declarer's context, no further visibility checks are\r\n                            // necessary (this is the fast path)\r\n                            member = candidate;\r\n                            return GetMemberResult.OK;\r\n                        }\r\n                        \r\n                        if (candidate.IsPublic && (member == null || !member.IsPublic))\r\n                        {\r\n                            member = candidate;\r\n                        }\r\n                        \r\n                        if (member == null)\r\n                        {\r\n                            member = candidate; // remember the first candidate encountered\r\n\r\n                            // non-private members are always inherited\r\n                            if (candidate.IsProtected &&\r\n                                (seen_context || (context != null && declarer.IsRelatedTo(context))))\r\n                            {\r\n                                return GetMemberResult.OK;\r\n                            }\r\n                        }\r\n                        else if (candidate.IsProtected && declarer is ClrTypeDesc)\r\n                        {\r\n                            // looser lookup rules for CLR members!!!\r\n                            if (seen_context || (context != null && declarer.IsRelatedTo(context)))\r\n                            {\r\n                                member = candidate;\r\n                                return GetMemberResult.OK;\r\n                            }\r\n                        }\r\n                    }\r\n                    else //if (!include_statics && candidate.IsStatic)\r\n                    {\r\n                        if (!static_used_as_nonstatic_reported)\r\n                        {\r\n                            static_used_as_nonstatic_reported = true;\r\n\r\n                            PhpException.Throw(\r\n                                PhpError.Strict,\r\n                                CoreResources.GetString(\"static_property_as_nonstatic\",\r\n                                        candidate.DeclaringType.MakeFullName(), candidate.MakeFullName()));\r\n                        }\r\n                    }\r\n\t\t\t\t}\r\n                else if (ReferenceEquals(declarer, context))\r\n                {\r\n                    seen_context = true;\r\n                }\r\n\r\n\t\t\t\t// search implemented interfaces recursively (useful only for constants)\r\n\t\t\t\tif ((flags & LookupFlags.SearchInterfaces) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (var iface in declarer.Interfaces)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tGetMemberResult result = iface.GetMember<N, T>(dictionary, name, context, flags, out candidate);\r\n\t\t\t\t\t\tif (result != GetMemberResult.NotFound)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmember = candidate;\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// move up along the hierarchy\r\n\t\t\t\tdeclarer = declarer.Base;\r\n\t\t\t}\r\n\t\t\twhile (declarer != null);\r\n\r\n\t\t\tif (member == null) return GetMemberResult.NotFound;\r\n\r\n\t\t\tif (member.IsPublic) return GetMemberResult.OK;\r\n\r\n\t\t\t// now member contains the lower-most non-public member that was found -> perform visibility check\r\n\t\t\t// (this member is surely not public)\r\n\t\t\tif (member.IsProtected)\r\n\t\t\t{\r\n\t\t\t\tif (seen_context || (context != null && member.DeclaringType.IsRelatedTo(context))) return GetMemberResult.OK;\r\n\t\t\t\treturn GetMemberResult.BadVisibility;\r\n\t\t\t}\r\n\r\n\t\t\t// no more check are necessary for private members - they would have been approved in (1)\r\n\t\t\t// return value in this case is different for methods and for properties\r\n            if ((flags & LookupFlags.InheritPrivate) != 0 ||\r\n                member.DeclaringType == this)\r\n            {\r\n                return GetMemberResult.BadVisibility;\r\n            }\r\n            else return GetMemberResult.NotFound;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches only in declared constants.\r\n\t\t/// </summary>\r\n\t\tpublic DConstantDesc GetConstant(VariableName constantName)\r\n\t\t{\r\n\t\t\tDConstantDesc constant;\r\n\t\t\treturn (Constants.TryGetValue(constantName, out constant) ? constant : null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches in all bases and interfaces.\r\n\t\t/// </summary>\r\n\t\tpublic GetMemberResult GetConstant(VariableName constantName, DTypeDesc context, out DConstantDesc constant)\r\n\t\t{\r\n\t\t\treturn GetMember<VariableName, DConstantDesc>\r\n\t\t\t\t(getConstantDictionary, constantName, context, LookupFlags.SearchInterfaces |\r\n\t\t\t\tLookupFlags.InheritPrivate, out constant);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches only in declared properties.\r\n\t\t/// </summary>\r\n\t\tpublic DPropertyDesc GetProperty(VariableName propertyName)\r\n\t\t{\r\n\t\t\tDPropertyDesc property;\r\n\t\t\treturn (Properties.TryGetValue(propertyName, out property) ? property : null);\r\n\t\t}\r\n\r\n\t\t//private struct MemberCacheKey<T> : IEquatable<MemberCacheKey<T>>\r\n\t\t//{\r\n\t\t//    public readonly T Name;\r\n\t\t//    public readonly DTypeDesc Context;\r\n\r\n\t\t//    public MemberCacheKey(T name, DTypeDesc context)\r\n\t\t//    {\r\n\t\t//        this.Name = name;\r\n\t\t//        this.Context = context;\r\n\t\t//    }\r\n\r\n\t\t//    public bool Equals(MemberCacheKey<T> other)\r\n\t\t//    {\r\n\t\t//        return Object.ReferenceEquals(Context, other.Context) && Name.Equals(other.Name);\r\n\t\t//    }\r\n\r\n\t\t//    public override int GetHashCode()\r\n\t\t//    {\r\n\t\t//        /*if (Context == null)*/ return Name.GetHashCode();\r\n\t\t//        //return Name.GetHashCode() ^ Context.GetType().GetHashCode();\r\n\t\t//    }\r\n\t\t//}\r\n\r\n\t\t//private struct MemberCacheValue<T>\r\n\t\t//{\r\n\t\t//    public T Member;\r\n\t\t//    public GetMemberResult Result;\r\n\t\t//}\r\n\r\n\t\t//private Dictionary<MemberCacheKey<VariableName>, MemberCacheValue<DPropertyDesc>> _cache =\r\n\t\t//    new Dictionary<MemberCacheKey<VariableName>, MemberCacheValue<DPropertyDesc>>();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches in all bases.\r\n\t\t/// </summary>\r\n\t\tpublic GetMemberResult GetProperty(VariableName propertyName, DTypeDesc context, out DPropertyDesc property)\r\n\t\t{\r\n\t\t\treturn GetMember<VariableName, DPropertyDesc>\r\n\t\t\t\t(getPropertyDictionary, propertyName, context, LookupFlags.None, out property);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches in all bases. Ignores static properties.\r\n\t\t/// </summary>\r\n\t\tpublic GetMemberResult GetInstanceProperty(VariableName propertyName, DTypeDesc context, out DPropertyDesc property)\r\n\t\t{\r\n\t\t\treturn GetMember<VariableName, DPropertyDesc>\r\n\t\t\t\t    (getPropertyDictionary, propertyName, context, LookupFlags.IgnoreStaticMembers, out property);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches only in declared methods.\r\n\t\t/// </summary>\r\n\t\tpublic DRoutineDesc GetMethod(Name methodName)\r\n\t\t{\r\n\t\t\tDRoutineDesc method;\r\n\t\t\treturn (Methods.TryGetValue(methodName, out method) ? method : null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches in all bases.\r\n\t\t/// </summary>\r\n\t\tpublic GetMemberResult GetMethod(Name methodName, DTypeDesc context, out DRoutineDesc method)\r\n\t\t{\r\n            return GetMember<Name, DRoutineDesc>\r\n\t\t\t\t(getMethodDictionary, methodName, context, LookupFlags.InheritPrivate, out method);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets the generic parameter with the specified name.\r\n        /// </summary>\r\n        /// <param name=\"lowercaseFullName\">Lowercase name.</param>\r\n        /// <returns>Generic parameter or <B>null</B> if not found.</returns>\r\n        public GenericParameterDesc GetGenericParameter(string lowercaseFullName)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < GenericParameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (GenericParameters[i].RealType.Name.ToLower() == lowercaseFullName)\r\n\t\t\t\t\treturn GenericParameters[i];\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Enumeration\r\n\r\n\t\t#region Generic Enumeration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumerates all members from the entire inheritance hierarchy regardless of visibility.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"T\">Type of member dictionary keys.</typeparam>\r\n\t\t/// <typeparam name=\"N\">Type of member dictionary values.</typeparam>\r\n\t\t/// <param name=\"dictionary\">Delegate that returns the member dictionary for a given <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <param name=\"flags\">Flags that adjust the enumeration.</param>\r\n\t\t/// <returns>The members.</returns>\r\n\t\tprivate IEnumerable<KeyValuePair<N, T>> EnumerateMembers<N, T>(GetMemberDictionary<N, T>/*!*/ dictionary,\r\n\t\t\tLookupFlags flags) where T : DMemberDesc\r\n\t\t{\r\n\t\t\tDTypeDesc type_desc = this;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tforeach (KeyValuePair<N, T> pair in dictionary(type_desc)) yield return pair;\r\n\r\n\t\t\t\t// enumerate implemented interfaces recursively\r\n\t\t\t\tif ((flags & LookupFlags.SearchInterfaces) == LookupFlags.SearchInterfaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int i = 0; i < type_desc.Interfaces.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (KeyValuePair<N, T> pair in type_desc.Interfaces[i].EnumerateMembers<N, T>(dictionary, flags))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyield return pair;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttype_desc = type_desc.Base;\r\n\t\t\t}\r\n\t\t\twhile (type_desc != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumarates all members from the entire inheritance hierarchy that are visible in the specified\r\n\t\t/// <paramref name=\"context\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"T\">Type of member dictionary keys.</typeparam>\r\n\t\t/// <typeparam name=\"N\">Type of member dictionary values.</typeparam>\r\n\t\t/// <param name=\"dictionary\">Delegate that returns the member dictionary for a given <see cref=\"DTypeDesc\"/>.</param>\r\n\t\t/// <param name=\"context\">Caller context.</param>\r\n\t\t/// <param name=\"flags\">Flags that adjust the enumeration.</param>\r\n\t\t/// <returns>The members.</returns>\r\n\t\tprivate IEnumerable<KeyValuePair<N, T>> EnumerateMembers<N, T>(GetMemberDictionary<N, T>/*!*/ dictionary,\r\n\t\t\tDTypeDesc context, LookupFlags flags) where T : DMemberDesc\r\n\t\t{\r\n\t\t\tbool context_related = (context != null && IsRelatedTo(context));\r\n\r\n\t\t\tDTypeDesc type_desc = this;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tbool in_context = (type_desc == context);\r\n\r\n\t\t\t\tforeach (KeyValuePair<N, T> pair in dictionary(type_desc))\r\n\t\t\t\t{\r\n\t\t\t\t\t// check the member's visibility\r\n\t\t\t\t\tswitch (pair.Value.MemberAttributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Public: break;\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Protected:\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (context_related) break;\r\n\t\t\t\t\t\t\t\telse continue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase PhpMemberAttributes.Private:\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (in_context) break;\r\n\t\t\t\t\t\t\t\telse continue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tyield return pair;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// enumerate implemented interfaces recursively\r\n\t\t\t\tif ((flags & LookupFlags.SearchInterfaces) == LookupFlags.SearchInterfaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int i = 0; i < type_desc.Interfaces.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (KeyValuePair<N, T> pair in\r\n\t\t\t\t\t\t\ttype_desc.Interfaces[i].EnumerateMembers<N, T>(dictionary, context, flags))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyield return pair;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttype_desc = type_desc.Base;\r\n\t\t\t}\r\n\t\t\twhile (type_desc != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes overriden members from an enumeration.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"N\"></typeparam>\r\n\t\t/// <typeparam name=\"T\"></typeparam>\r\n\t\t/// <param name=\"members\">The member enumeration starting from the most derived type.</param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate static IEnumerable<KeyValuePair<N, T>> RemoveOverridenMembers<N, T>(IEnumerable<KeyValuePair<N, T>> members)\r\n\t\t\twhere T : DMemberDesc\r\n\t\t{\r\n\t\t\tDictionary<N, T> cache = new Dictionary<N, T>();\r\n\r\n\t\t\tforeach (KeyValuePair<N, T> pair in members)\r\n\t\t\t{\r\n\t\t\t\tif (pair.Value.IsPublic || pair.Value.IsProtected)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!cache.ContainsKey(pair.Key))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// return only the members that have not been overriden\r\n\t\t\t\t\t\tcache.Add(pair.Key, pair.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse continue;\r\n\t\t\t\t}\r\n\t\t\t\tyield return pair;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumerates all properties declared by this type and its bases.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic IEnumerable<KeyValuePair<VariableName, DPropertyDesc>> EnumerateProperties()\r\n\t\t{\r\n\t\t\treturn RemoveOverridenMembers(\r\n\t\t\t\tEnumerateMembers<VariableName, DPropertyDesc>(getPropertyDictionary, LookupFlags.None));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns properties visible in the given <paramref name=\"context\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic IEnumerable<KeyValuePair<VariableName, DPropertyDesc>> EnumerateProperties(DTypeDesc context)\r\n\t\t{\r\n\t\t\treturn RemoveOverridenMembers(\r\n\t\t\t\tEnumerateMembers<VariableName, DPropertyDesc>(getPropertyDictionary, context, LookupFlags.None));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enumerates all methods declared by this type and its bases.\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic IEnumerable<KeyValuePair<Name, DRoutineDesc>> EnumerateMethods()\r\n\t\t{\r\n\t\t\treturn RemoveOverridenMembers(\r\n\t\t\t\tEnumerateMembers<Name, DRoutineDesc>(getMethodDictionary, LookupFlags.None));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns methods visible in the given <paramref name=\"context\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The caller.</param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic IEnumerable<KeyValuePair<Name, DRoutineDesc>> EnumerateMethods(DTypeDesc context)\r\n\t\t{\r\n\t\t\treturn RemoveOverridenMembers(\r\n\t\t\t\tEnumerateMembers<Name, DRoutineDesc>(getMethodDictionary, context, LookupFlags.None));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic abstract object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext context);\r\n\t\tpublic abstract object New(ScriptContext/*!*/ context);\r\n\r\n\t\tinternal enum MakeGenericArgumentsResult\r\n\t\t{\r\n\t\t\tIncompatibleConstraint,\r\n\t\t\tMissingArgument,\r\n\t\t\tTooManyArguments\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Substitutes missing arguments by the default types where possible and reports error otherwise.\r\n\t\t/// Updates the specified array and sets the specified argument count to the parameter count.\r\n\t\t/// Expands the arguments array if needed.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether some arguments are missing.</returns>\r\n\t\tinternal bool MakeGenericArguments(ref DTypeDesc[]/*!*/ arguments, ref int argCount,\r\n\t\t  Action<MakeGenericArgumentsResult, DTypeDesc, DTypeDesc, GenericParameterDesc> onError)\r\n\t\t{\r\n\t\t\tGenericParameterDesc[] parameters = GenericParameters;\r\n\r\n\t\t\tfor (int i = 0; i < parameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tDTypeDesc default_type;\r\n\r\n\t\t\t\tif (i < argCount)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (arguments[i] != null && !parameters[i].IsSubstitutableBy(arguments[i]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// report error and continue:\r\n\t\t\t\t\t\tif (onError != null)\r\n\t\t\t\t\t\t\tonError(MakeGenericArgumentsResult.IncompatibleConstraint, this, arguments[i], parameters[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if ((default_type = GetGenericParameterDefaultType(i)) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i >= arguments.Length)\r\n\t\t\t\t\t\tArray.Resize(ref arguments, parameters.Length);\r\n\r\n\t\t\t\t\targuments[i] = default_type;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (onError != null)\r\n\t\t\t\t\t\tonError(MakeGenericArgumentsResult.MissingArgument, this, null, parameters[i]);\r\n\r\n\t\t\t\t\targCount = parameters.Length;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (argCount > parameters.Length)\r\n\t\t\t\tonError(MakeGenericArgumentsResult.TooManyArguments, this, null, null);\r\n\r\n\t\t\targCount = parameters.Length;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a default type-desc associated with the index-th generic parameter.\r\n\t\t/// Overridden by <see cref=\"PhpTypeCompletionDesc\"/>, which carries run-time resolved default types.\r\n\t\t/// </summary>\r\n\t\tinternal virtual DTypeDesc GetGenericParameterDefaultType(int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(index >= 0 && index < GenericParameters.Length);\r\n\t\t\treturn GenericParameters[index].DefaultType;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DTypeDescs\r\n\r\n\t/// <summary>\r\n\t/// Immutable <see cref=\"DTypeDesc\"/> array with overriden <see cref=\"GetHashCode\"/> and <see cref=\"Equals\"/>.\r\n\t/// </summary>\r\n\tinternal struct DTypeDescs : IEquatable<DTypeDescs>\r\n\t{\r\n\t\tpublic DTypeDesc[]/*!!*/ Types { get { return types; } }\r\n\t\tprivate readonly DTypeDesc[]/*!!*/ types;\r\n\r\n\t\tprivate readonly int hashCode;\r\n\r\n\t\tpublic int Count { get { return types.Length; } }\r\n\t\tpublic DTypeDesc/*!*/ this[int i] { get { return types[i]; } }\r\n\r\n\t\tpublic DTypeDescs(DType[]/*!*/ types)\r\n\t\t{\r\n\t\t\tthis.hashCode = 0;\r\n\t\t\tthis.types = new DTypeDesc[types.Length];\r\n\r\n\t\t\tfor (int i = 0; i < types.Length; i++)\r\n\t\t\t\tthis.types[i] = types[i].TypeDesc;\r\n\r\n\t\t\tthis.hashCode = CalculateHashCode(this.types);\r\n\t\t}\r\n\r\n\t\tpublic DTypeDescs(DTypeDesc/*!*/ type, DTypeDesc[]/*!*/ types, int typeCount)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeCount >= 0 && typeCount <= types.Length);\r\n\r\n\t\t\tthis.hashCode = 0;\r\n\t\t\tthis.types = new DTypeDesc[1 + typeCount];\r\n\r\n\t\t\tthis.types[0] = type;\r\n\t\t\tfor (int i = 0; i < typeCount; i++)\r\n\t\t\t\tthis.types[i + 1] = types[i];\r\n\r\n\t\t\tthis.hashCode = CalculateHashCode(this.types);\r\n\t\t}\r\n\r\n\t\tpublic DTypeDescs(PhpStack/*!*/ stack)\r\n\t\t{\r\n\t\t\tthis.hashCode = 0;\r\n\t\t\tthis.types = new DTypeDesc[stack.TypeArgCount];\r\n\r\n\t\t\tfor (int i = 0; i < this.types.Length; i++)\r\n\t\t\t\tthis.types[i] = stack.PeekType(i + 1);\r\n\r\n\t\t\tthis.hashCode = CalculateHashCode(this.types);\r\n\t\t}\r\n\r\n\t\tprivate static int CalculateHashCode(DTypeDesc[]/*!!*/ types)\r\n\t\t{\r\n\t\t\tint result = 1254645177;\r\n\r\n\t\t\tfor (int i = 0; i < types.Length; i++)\r\n\t\t\t\tresult ^= types[i].GetHashCode();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn hashCode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the types to real <see cref=\"Type\"/> array.\r\n\t\t/// </summary>\r\n\t\tpublic Type[]/*!!*/ GetRealTypes()\r\n\t\t{\r\n\t\t\tType[] result = new Type[types.Length];\r\n\t\t\tfor (int i = 0; i < types.Length; i++)\r\n\t\t\t\tresult[i] = types[i].RealType;\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts real types to a provided <see cref=\"Type\"/> array.\r\n\t\t/// </summary>\r\n\t\tpublic Type[]/*!*/ GetRealTypes(Type[]/*!*/ realTypes, int offset)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < types.Length; i++)\r\n\t\t\t\trealTypes[i + offset] = types[i].RealType;\r\n\r\n\t\t\treturn realTypes;\r\n\t\t}\r\n\r\n\t\t#region IEquatable<DTypeDescs> Members\r\n\r\n\t\tpublic bool Equals(DTypeDescs other)\r\n\t\t{\r\n\t\t\tif (other.types.Length != this.types.Length) return false;\r\n\r\n\t\t\tfor (int i = 0; i < types.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (!ReferenceEquals(other.types[i], this.types[i])) return false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tif (!(obj is DTypeDescs)) return false;\r\n\t\t\treturn Equals((DTypeDescs)obj);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DTypeSpec\r\n\r\n\tinternal delegate DTypeDesc ResolverDelegate(string/*!*/ name, NamingContext namingContext, DTypeDesc caller);\r\n\r\n\t/// <summary>\r\n\t/// Encodes a dynamic type.\r\n\t/// </summary>\r\n\tinternal struct DTypeSpec\r\n\t{\r\n\t\tprivate const int PrimitiveType = 0;\r\n\t\tprivate const int GenericMethodParam = 1;\r\n\t\tprivate const int GenericTypeParam = 2;\r\n\t\tprivate const int RealType = 3;\r\n\t\tprivate const int ConstructedTypeStart = 4;\r\n\t\tprivate const int ConstructedTypeEnd = 5;\r\n\t\tprivate const int NamedType = 10;\r\n\t\t\r\n\t\tprivate readonly int[]/*!*/ data;\r\n\t\tprivate readonly byte[] stringData;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// The array shouldn't be modified by the caller.\r\n\t\t/// </summary>\r\n\t\tinternal DTypeSpec(int[]/*!*/ data)\r\n\t\t{\r\n\t\t\tthis.data = data;\r\n\t\t\tthis.stringData = null;\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpec(PhpTypeCode primitiveTypeCode)\r\n\t\t{\r\n\t\t\tdata = new int[] { PrimitiveType, (int)primitiveTypeCode };\r\n\t\t\tstringData = null;\r\n\t\t}\r\n\r\n\t\tinternal DTypeSpec(int[]/*!*/ data, byte[] strings)\r\n\t\t{\r\n\t\t\tthis.data = data;\r\n\t\t\tthis.stringData = strings;\r\n\t\t}\r\n\t\t\r\n\t\tpublic DTypeSpec(int genericParamIndex, MemberTypes memberType)\r\n\t\t{\r\n\t\t\tdata = new int[] \r\n      { \r\n        (memberType == MemberTypes.TypeInfo) ? GenericMethodParam : GenericTypeParam,\r\n        genericParamIndex\r\n      };\r\n\t\t\tstringData = null;\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpec(Type/*!*/ realType, ModuleBuilder/*!*/ moduleBuilder)\r\n\t\t{\r\n\t\t\tdata = new int[] { RealType, moduleBuilder.GetTypeToken(realType).Token };\r\n\t\t\tstringData = null;\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpec(string/*!*/ indefiniteTypeName, FieldBuilder namingContext, ModuleBuilder/*!*/ moduleBuilder)\r\n\t\t{\r\n\t\t\tDebug.Assert(indefiniteTypeName != null && moduleBuilder != null);\r\n\r\n\t\t\tstringData = ArrayUtils.Concat(Encoding.UTF8.GetBytes(indefiniteTypeName), new byte[] { 0 });\r\n\t\t\tdata = new int[] \r\n\t\t\t{ \r\n\t\t\t\tNamedType, \r\n\t\t\t\tnamingContext != null ? Int32.Parse(namingContext.Name) : 0,\r\n\t\t\t};\r\n\r\n\t\t\t// On Silverlight 'GetStringConstant' can't be used, because 'ResolveString' isn't available\r\n\t\t\t/* \r\n\t\t\tdata = new int[2] \r\n      {\r\n        moduleBuilder.GetStringConstant(indefiniteTypeName).Token,\r\n        namingContext != null ? Int32.Parse(namingContext.Name) : 0\r\n      };\r\n\t\t\t*/\r\n\t\t}\r\n\r\n\t\tpublic DTypeSpec(DTypeSpec genericType, DTypeSpec[]/*!*/ arguments)\r\n\t\t{\r\n\t\t\t// start marker + generic type code + end marker\r\n\t\t\tint size = 1 + 2 + 1;\r\n\r\n\t\t\tfor (int i = 0; i < arguments.Length; i++)\r\n\t\t\t\tsize += arguments[i].data.Length;\r\n\r\n\t\t\tdata = new int[size];\r\n\r\n\t\t\tdata[0] = ConstructedTypeStart;\r\n\t\t\tdata[1] = genericType.data[0];\r\n\t\t\tdata[2] = genericType.data[1];\r\n\r\n\t\t\tList<byte> stringList = new List<byte>();\r\n\t\t\tif (genericType.stringData != null)\r\n\t\t\t\tstringList.AddRange(genericType.stringData);\r\n\r\n\t\t\tint offset = 3;\r\n\t\t\tfor (int i = 0; i < arguments.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tArray.Copy(arguments[i].data, 0, data, offset, arguments[i].data.Length);\r\n\t\t\t\t// Buffer.BlockCopy(arguments[i].data, 0, data, offset, arguments[i].data.Length);\r\n\t\t\t\toffset += arguments[i].data.Length;\r\n\r\n\t\t\t\tif (arguments[i].stringData != null)\r\n\t\t\t\t\tstringList.AddRange(arguments[i].stringData);\r\n\t\t\t}\r\n\r\n\t\t\tdata[offset] = ConstructedTypeEnd;\r\n\t\t\tstringData = stringList.ToArray();\r\n\t\t\tDebug.Assert(offset == size - 1);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversion to Attribute\r\n\r\n\t\tpublic CustomAttributeBuilder/*!*/ ToCustomAttributeBuilder()\r\n\t\t{\r\n\t\t\tif (stringData == null)\r\n\t\t\t{\r\n\t\t\t\tif (data.Length == 2)\r\n\t\t\t\t\treturn new CustomAttributeBuilder(Emit.Constructors.DTypeSpec_IntInt, new object[] { data[0], data[1] });\r\n\t\t\t\telse\r\n\t\t\t\t\treturn new CustomAttributeBuilder(Emit.Constructors.DTypeSpec_IntArray, new object[] { data });\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (data.Length == 2)\r\n\t\t\t\t\treturn new CustomAttributeBuilder(Emit.Constructors.DTypeSpec_IntInt_ByteArray, new object[] { data[0], data[1], stringData });\r\n\t\t\t\telse\r\n\t\t\t\t\treturn new CustomAttributeBuilder(Emit.Constructors.DTypeSpec_IntArray_ByteArray, new object[] { data, stringData });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Conversion to DTypeDesc\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decodes the type-spec to the type-desc within a given context (referring type, routine, and real module).\r\n\t\t/// If the type encoded in the type-spec was unknown when encoding, the specified resolver is called.\r\n\t\t/// Returns <B>null</B> if the data of type-spec are incorrect.\r\n\t\t/// Returns see cref=\"UnknownTypeSpec\" instance if the type is currently unresolvable (or no resolver specified).\r\n\t\t/// </summary>\r\n\t\tpublic DTypeDesc GetTypeDesc(Module/*!*/ referringModule, DTypeDesc referringType, DRoutineDesc referringRoutine,\r\n\t\t  ResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tif (data.Length < 2) return null;\r\n\r\n\t\t\tint sptr = 0;\r\n\t\t\tif (data[0] == ConstructedTypeStart)\r\n\t\t\t{\r\n\t\t\t\tint i = 1;\r\n\t\t\t\treturn GetConstructedTypeDesc(ref i, ref sptr, referringModule, referringType, referringRoutine, resolver);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn GetTypeDesc(data[0], data[1], ref sptr, referringModule, referringType, referringRoutine, resolver);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate DTypeDesc GetTypeDesc(int data0, int data1, ref int stringPtr, Module/*!*/ referringModule, \r\n\t\t\tDTypeDesc referringType, DRoutineDesc referringRoutine, ResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tswitch (data0)\r\n\t\t\t{\r\n\t\t\t\tcase PrimitiveType:\r\n\t\t\t\t\treturn PrimitiveTypeDesc.GetByTypeCode((PhpTypeCode)data1);\r\n\r\n\t\t\t\tcase GenericMethodParam:\r\n\t\t\t\t\t// TODO: currentRoutine\r\n\t\t\t\t\treturn null;\r\n\r\n\t\t\t\tcase GenericTypeParam:\r\n\t\t\t\t\tif (referringType == null || data1 < 0 && data1 >= referringType.GenericParameters.Length) return null;\r\n\r\n\t\t\t\t\treturn referringType.GenericParameters[data1];\r\n\r\n\t\t\t\tcase RealType:\r\n\t\t\t\t\tType type;\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttype = referringModule.ResolveType(data1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (ArgumentException)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn DTypeDesc.Create(type);\r\n\r\n\t\t\t\tcase ConstructedTypeStart:\r\n\t\t\t\tcase ConstructedTypeEnd:\r\n\t\t\t\t\tDebug.Fail(null);\r\n\t\t\t\t\tthrow null;\r\n\r\n\t\t\t\tcase NamedType:\r\n\t\t\t\t\tstring name;\r\n\t\t\t\t\tNamingContext naming_context = null;\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Silverlight - no ResolveString\r\n\t\t\t\t\t\t// name = referringModule.ResolveString(data0);\r\n\t\t\t\t\t\tname = ReadNextString(stringData, ref stringPtr);\r\n\t\t\t\t\t\tif (name == null) return null;\r\n\r\n\t\t\t\t\t\tType global_type = referringModule.GetType(QualifiedName.Global.Name.ToString(), false, false);\r\n\t\t\t\t\t\tif (global_type == null) return null;\r\n\r\n\t\t\t\t\t\t// fields are named by numbers:\r\n\t\t\t\t\t\tif (data1 != 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tFieldInfo naming_context_fld = global_type.GetField(data1.ToString(), BindingFlags.Static | BindingFlags.NonPublic);\r\n\r\n\t\t\t\t\t\t\tif (naming_context_fld != null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnaming_context = naming_context_fld.GetValue(null) as NamingContext;\r\n\t\t\t\t\t\t\t\tif (naming_context == null) return null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (Exception)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (resolver != null) ? resolver(name, naming_context, referringType) : null;\r\n\t\t\t\t\t// TODO: new UnknownTypeSpec(name, naming_context);\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tDebug.Fail(\"TypeSpec - decoding an unknown type!\");\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate string ReadNextString(byte[] stringData, ref int stringPtr)\r\n\t\t{\r\n\t\t\tint start = stringPtr;\r\n\t\t\twhile (stringData[stringPtr] != 0) stringPtr++;\r\n\t\t\tstring res = Encoding.UTF8.GetString(stringData, start, stringPtr - start);\r\n\t\t\tstringPtr++;\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\t\tprivate DTypeDesc GetConstructedTypeDesc(ref int i, ref int sptr, Module/*!*/ referringModule, DTypeDesc referringType,\r\n\t\t  DRoutineDesc referringRoutine, ResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tif (i + 1 == data.Length) return null;\r\n\t\t\tDTypeDesc generic_type = GetTypeDesc(data[i], data[i + 1], ref sptr, referringModule, referringType, referringRoutine, resolver);\r\n\t\t\tif (generic_type == null) return null;\r\n\r\n\t\t\tList<DTypeDesc> args = new List<DTypeDesc>(generic_type.GenericParameters.Length);\r\n\t\t\twhile (i + 1 < data.Length && data[i] != ConstructedTypeEnd)\r\n\t\t\t{\r\n\t\t\t\tDTypeDesc arg;\r\n\r\n\t\t\t\tif (data[i] == ConstructedTypeStart)\r\n\t\t\t\t{\r\n\t\t\t\t\ti++;\r\n\t\t\t\t\targ = GetConstructedTypeDesc(ref i, ref sptr, referringModule, referringType, referringRoutine, resolver);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\targ = GetTypeDesc(data[i], data[i + 1], ref sptr, referringModule, referringType, referringRoutine, resolver);\r\n\t\t\t\t\ti += 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (arg == null) return null;\r\n\t\t\t\targs.Add(arg);\r\n\t\t\t}\r\n\r\n\t\t\tif (data[i] != ConstructedTypeEnd)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\ti++;\r\n\t\t\treturn Operators.MakeGenericTypeInstantiation(generic_type, args.ToArray(), args.Count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownTypeDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents a descriptor for unknown type.\r\n\t/// Necessary when unknown types are held in lists of descriptors (such as implemented interface list).\r\n\t/// </summary>\r\n\tpublic sealed class UnknownTypeDesc : DTypeDesc\r\n\t{\r\n        /// <summary>\r\n        /// Singleton instance to be used wherever it is needed.\r\n        /// </summary>\r\n        public static readonly UnknownTypeDesc/*!*/Singleton = new UnknownTypeDesc();\r\n\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\r\n\t\tpublic UnknownTypeDesc()\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#region Not Supported\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tpublic override object New(PhpStack stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext context)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GlobalTypeDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents a pseudo-type declaring all global functions and types.\r\n\t/// </summary>\r\n\tpublic sealed class GlobalTypeDesc : DTypeDesc\r\n\t{\r\n\t\tpublic override bool IsGlobal { get { return true; } }\r\n\r\n\t\tpublic override DModule DeclaringModule { get { return declaringModule; } }\r\n\t\tprivate readonly DModule/*!*/ declaringModule;\r\n\r\n\t\tpublic GlobalTypeDesc(DModule/*!*/ declaringModule)\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.declaringModule = declaringModule;\r\n\r\n\t\t\t// we don't need to create tables per module, all entities are stored on ApplicationContext:\r\n\t\t\tthis.methods = null;\r\n\t\t\tthis.properties = null;\r\n\t\t\tthis.constants = null;\r\n\t\t}\r\n\r\n\t\t#region Not Supported\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tpublic override object New(PhpStack stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext context)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GericParameterDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents a pseudo-type declaring all global functions and types.\r\n\t/// </summary>\r\n\tpublic sealed class GenericParameterDesc : DTypeDesc\r\n\t{\r\n\t\tpublic static new readonly GenericParameterDesc[]/*!*/ EmptyArray = new GenericParameterDesc[0];\r\n\r\n\t\tpublic GenericParameter GenericParameter { get { return (GenericParameter)Type; } }\r\n\r\n\t\tpublic override bool IsGlobal { get { return true; } }\r\n\r\n\t\tpublic DTypeDesc DefaultType { get { return defaultType; } }\r\n\t\tprivate DTypeDesc defaultType;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler.\r\n\t\t/// </summary>\r\n\t\tinternal GenericParameterDesc()\r\n\t\t\t: base()\r\n\t\t{\r\n\t\t\tthis.defaultType = null;  // to be written up\r\n\t\t}\r\n\r\n\t\tinternal void WriteUp(DTypeDesc defaultType)\r\n\t\t{\r\n\t\t\tthis.defaultType = defaultType;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the reflection.\r\n\t\t/// </summary>\r\n\t\tpublic GenericParameterDesc(Type/*!*/ realType, DTypeDesc defaultType)\r\n\t\t\t: base(realType, null)\r\n\t\t{\r\n\t\t\tthis.defaultType = defaultType;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the argument can be substituted for this parameters.\r\n\t\t/// </summary>\r\n\t\tinternal bool IsSubstitutableBy(DTypeDesc/*!*/ argument)\r\n\t\t{\r\n\t\t\t// if real type is null, the parameter is a PHP generic parameter, which can define no constraints:\r\n\t\t\treturn (this.RealType == null) || argument.IsCompatibleWithGenericParameter(this.RealType);\r\n\t\t}\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Runtime Operations\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GenericTypeDefinition\r\n\r\n\t/// <summary>\r\n\t/// Shared by all instantiations of the generic type and the type itself.\r\n\t/// </summary>\r\n\tpublic sealed class GenericTypeDefinition\r\n\t{\r\n\t\tpublic DTypeDesc/*!*/ GenericType { get { return genericType; } }\r\n\t\tprivate readonly DTypeDesc/*!*/ genericType;\r\n\r\n\t\tpublic GenericParameterDesc[]/*!!*/ GenericParameters\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_genericParameters == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t_genericParameters = genericType.ReflectGenericParameters(null, null, null);\r\n                    DebugHelper.AssertAllNonNull(_genericParameters);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn _genericParameters;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate GenericParameterDesc[] _genericParameters;\r\n\r\n\t\tpublic GenericTypeDefinition(DTypeDesc/*!*/ genericType)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericType != null);\r\n\r\n\t\t\tthis.genericType = genericType;\r\n\t\t\tthis._genericParameters = null;\r\n\t\t}\r\n\r\n\t\tpublic GenericTypeDefinition(DTypeDesc/*!*/ genericType, GenericParameterDesc[]/*!!*/ genericParameters)\r\n\t\t{\r\n            DebugHelper.AssertAllNonNull(genericParameters);\r\n\t\t\tDebug.Assert(genericType != null && genericParameters.Length > 0);\r\n\r\n\t\t\tthis.genericType = genericType;\r\n\t\t\tthis._genericParameters = genericParameters;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ConstructedTypeDesc\r\n\r\n\tpublic sealed class ConstructedTypeDesc : DTypeDesc\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\tpublic DTypeDesc/*!*/ GenericType { get { return genericType; } }\r\n\t\tprivate readonly DTypeDesc/*!*/ genericType;\r\n\r\n\t\tpublic DTypeDesc[]/*!!*/ Arguments { get { return arguments; } }\r\n\t\tprivate readonly DTypeDesc[]/*!!*/ arguments;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by <see cref=\"ConstructedType\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal ConstructedTypeDesc(DTypeDesc/*!*/ genericType, DTypeDesc[]/*!!*/ arguments)\r\n\t\t\t: base(genericType.Base, null, genericType.GenericDefinition)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericType != null && arguments != null && arguments.Length > 0);\r\n\r\n\t\t\tthis.memberAttributes = genericType.MemberAttributes;\r\n\t\t\tthis.genericType = genericType;\r\n\t\t\tthis.arguments = arguments;\r\n\t\t}\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"Constructed types cannot be created at run-time. Instantiations are.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tthis.interfaces = genericType.Interfaces;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tthis.methods = genericType.Methods;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tthis.properties = genericType.Properties;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tthis.constants = genericType.Constants;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tinternal static string MakeGenericFullName(DTypeDesc GenericType, DTypeDesc[] Arguments)\r\n\t\t{\r\n\t\t\tthrow new Exception(\"The method or operation is not implemented.\");\r\n\t\t}\r\n\r\n\t\tinternal static void GenericArgumentsToString(Type[]/*!!*/ arguments, StringBuilder/*!*/ result)\r\n\t\t{\r\n\t\t\tDebug.Assert(arguments != null && result != null);\r\n\r\n\t\t\tresult.Append(\"<:\");\r\n\r\n\t\t\tfor (int i = 0; i < arguments.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i > 0) result.Append(',');\r\n\t\t\t\tGetFullGenericName(arguments[i], result);\r\n\t\t\t}\r\n\r\n\t\t\tresult.Append(\":>\");\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RuntimePhpTypeDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class PhpTypeCompletionDesc : DTypeDesc\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\tpublic override bool IsGenericDefinition\r\n\t\t{\r\n\t\t\tget { return genericDefinition != null && ReferenceEquals(genericDefinition.GenericType, incompleteType); }\r\n\t\t}\r\n\r\n\t\tpublic PhpTypeDesc/*!*/ IncompleteType { get { return incompleteType; } }\r\n\t\tprivate readonly PhpTypeDesc/*!*/ incompleteType;\r\n\r\n\t\tpublic GenericParameterDesc[]/*!!*/ CompleteGenericParameters { get { return completeGenericParameters; } }\r\n\t\tprivate readonly GenericParameterDesc[]/*!!*/ completeGenericParameters;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by <c>ScriptContext.DeclareType</c>.\r\n\t\t/// </summary>\r\n\t\tinternal PhpTypeCompletionDesc(PhpTypeDesc/*!*/ incompleteType, GenericParameterDesc[]/*!!*/ completeGenericParameters)\r\n\t\t\t: base(incompleteType.Base, incompleteType.RealType, incompleteType.GenericDefinition)\r\n\t\t{\r\n\t\t\tDebug.Assert(incompleteType != null && completeGenericParameters != null);\r\n\r\n\t\t\tthis.memberAttributes = incompleteType.MemberAttributes;\r\n\t\t\tthis.incompleteType = incompleteType;\r\n\t\t\tthis.completeGenericParameters = completeGenericParameters;\r\n\t\t}\r\n\r\n\t\tinternal override DTypeDesc GetGenericParameterDefaultType(int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(index >= 0 && index < completeGenericParameters.Length);\r\n\t\t\treturn completeGenericParameters[index].DefaultType;\r\n\t\t}\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\treturn incompleteType.Type; // TODO:\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tthis.interfaces = incompleteType.Interfaces;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tthis.methods = incompleteType.Methods;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tthis.properties = incompleteType.Properties;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tthis.constants = incompleteType.Constants;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\treturn incompleteType.New(stack, caller, nameContext);\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\treturn incompleteType.New(context);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PrimitiveTypeDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n    public sealed class PrimitiveTypeDesc : DTypeDesc\r\n\t{\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\r\n\t\tpublic PhpTypeCode TypeCode { get { return typeCode; } }\r\n\t\tprivate readonly PhpTypeCode typeCode;\r\n\r\n\t\tinternal PrimitiveTypeDesc(Type/*!*/ realType, PhpTypeCode typeCode)\r\n\t\t\t: base(UnknownModule.RuntimeModule, realType, null, PhpMemberAttributes.Public | PhpMemberAttributes.Final)\r\n\t\t{\r\n\t\t\tthis.typeCode = typeCode;\r\n\t\t\tthis.WriteUpBaseType(null);\r\n\t\t\tthis.WriteUpInterfaces(DTypeDesc.EmptyArray);\r\n\t\t}\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override string MakeFullName()\r\n\t\t{\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: return PhpVariable.TypeNameBool;\r\n\t\t\t\tcase PhpTypeCode.Integer: return PhpVariable.TypeNameInt;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: return PhpVariable.TypeNameLongInteger;\r\n\t\t\t\tcase PhpTypeCode.Double: return PhpVariable.TypeNameDouble;\r\n\t\t\t\tcase PhpTypeCode.String: return PhpVariable.TypeNameString;\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return PhpResource.PhpTypeName;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return PhpArray.PhpTypeName;\r\n\t\t\t\tcase PhpTypeCode.DObject: return PhpObject.PhpTypeName;\r\n\t\t\t\tdefault: throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static string GetPrimitiveName(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\tDebug.Assert(realType != null);\r\n\r\n\t\t\tswitch (System.Type.GetTypeCode(realType))\r\n\t\t\t{\r\n\t\t\t\tcase System.TypeCode.Object:\r\n\r\n\t\t\t\t\tif (realType == typeof(PhpArray)) return PhpArray.PhpTypeName;\r\n\r\n\t\t\t\t\tif (realType == typeof(PhpBytes)) return PhpBytes.PhpTypeName;\r\n\t\t\t\t\tif (realType == typeof(PhpString)) return PhpString.PhpTypeName;\r\n\r\n\t\t\t\t\tif (realType == typeof(PhpObject)) return PhpObject.PhpTypeName;\r\n\t\t\t\t\tif (realType == typeof(DObject)) return DObject.PhpTypeName;\r\n\t\t\t\t\tif (realType == typeof(ClrObject)) return ClrObject.PhpTypeName;\r\n\r\n\t\t\t\t\tif (realType.IsSubclassOf(typeof(PhpResource))) return PhpResource.PhpTypeName;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase System.TypeCode.Double: return PhpVariable.TypeNameDouble;\r\n\t\t\t\tcase System.TypeCode.Int32: return PhpVariable.TypeNameInt;\r\n\t\t\t\tcase System.TypeCode.Int64: return PhpVariable.TypeNameLongInteger;\r\n\t\t\t\tcase System.TypeCode.Boolean: return PhpVariable.TypeNameBool;\r\n\t\t\t\tcase System.TypeCode.String: return PhpVariable.TypeNameString;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: return PrimitiveType.Boolean;\r\n\t\t\t\tcase PhpTypeCode.Integer: return PrimitiveType.Integer;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: return PrimitiveType.LongInteger;\r\n\t\t\t\tcase PhpTypeCode.Double: return PrimitiveType.Double;\r\n\t\t\t\tcase PhpTypeCode.String: return PrimitiveType.String;\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return PrimitiveType.Resource;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return PrimitiveType.Array;\r\n\t\t\t\tcase PhpTypeCode.DObject: return PrimitiveType.Object;\r\n\t\t\t\tdefault: throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tinterfaces = DTypeDesc.EmptyArray;\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\t// TODO: fill methods\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\t// TODO: fill properties\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\t// TODO: fill constants\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Runtime Operations\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\treturn this.New(null);\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext context)\r\n\t\t{\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: return false;\r\n\t\t\t\tcase PhpTypeCode.Integer: return 0;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: return (long)0;\r\n\t\t\t\tcase PhpTypeCode.Double: return (double)0.0;\r\n\t\t\t\tcase PhpTypeCode.String: return \"\";\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return null;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return new PhpArray();\r\n\t\t\t\tcase PhpTypeCode.DObject:\r\n\t\t\t\t\tif (Configuration.Application.Compiler.ClrSemantics)\r\n\t\t\t\t\t\treturn ClrObject.Create(new object());\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn new Library.stdClass(context);\r\n\r\n\t\t\t\tdefault: throw null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Statics\r\n\r\n\t\tpublic static PrimitiveTypeDesc GetByTypeCode(PhpTypeCode typeCode)\r\n\t\t{\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: return BooleanTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.Integer: return IntegerTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: return LongIntegerTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.Double: return DoubleTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.String: return StringTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return ResourceTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return ArrayTypeDesc;\r\n\t\t\t\tcase PhpTypeCode.DObject: return ObjectTypeDesc;\r\n\t\t\t\tdefault: return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpTypeDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents PHP type, generic PHP type template, or PHP type instantiation.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class PhpTypeDesc : DTypeDesc\r\n\t{\r\n        ///// <summary>\r\n        ///// If <B>true</B>, the real type does not contain the <c>__PopulateTypeDesc</c> method and\r\n        ///// further attempts to find it should be avoided.\r\n        ///// </summary>\r\n        //private bool hasNoPopulateMethod;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> iff methods have been fully reflected (every <see cref=\"DRoutineDesc\"/> in\r\n\t\t/// <see cref=\"DTypeDesc.methods\"/> has its <see cref=\"PhpMethod\"/>).\r\n\t\t/// </summary>\r\n\t\tprivate bool methodsReflected;\r\n\r\n        /// <summary>\r\n\t\t/// <B>True</B> iff fields and class constants have been fully reflected (every <see cref=\"DPropertyDesc\"/> in\r\n\t\t/// <see cref=\"DTypeDesc.properties\"/> has its <see cref=\"PhpField\"/> and every <see cref=\"DConstantDesc\"/> in\r\n\t\t/// <see cref=\"DTypeDesc.constants\"/> has its <see cref=\"ClassConstant\"/>).\r\n\t\t/// </summary>\r\n\t\tprivate bool fieldsAndConstantsReflected;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Points to this type's <c>__InitializeStaticFields</c> method.\r\n\t\t/// </summary>\r\n\t\tprivate Action<ScriptContext> initializeStaticFields;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by compiler.\r\n\t\t/// </summary>\r\n\t\tpublic PhpTypeDesc(DModule/*!*/ declaringModule, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule, memberAttributes)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by run-time reflection.\r\n\t\t/// </summary>\r\n\t\tpublic PhpTypeDesc(DModule/*!*/ declaringModule, Type/*!*/ realType, DTypeDesc baseDesc, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule, realType, baseDesc, memberAttributes)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used at run-time.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static new PhpTypeDesc/*!*/ Create(RuntimeTypeHandle realTypeHandle)\r\n\t\t{\r\n\t\t\treturn (PhpTypeDesc)DTypeDesc.Create(realTypeHandle);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\t// this type-desc represents non-generic type or the generic definition => create the ClrType for it:\r\n\t\t\tif (!RealType.IsGenericType || RealType.IsGenericTypeDefinition)\r\n\t\t\t\treturn new PhpType(this, ClrNotationUtils.FromClrNotation(RealType));\r\n\r\n\t\t\t// this type-desc represents a generic type instantiation; \r\n\t\t\t// all instantiations of a single generic type share the same ClrType => do not create new ClrType;\r\n\t\t\t// note: we could do this faster if each type-desc had a reference to the generic type-desc.\r\n\t\t\treturn DTypeDesc.Create(RealType.GetGenericTypeDefinition()).Type;\r\n\t\t}\r\n\r\n\t\tinternal void FullReflect()\r\n\t\t{\r\n\t\t\t// members might have been fully reflected before\r\n            if (!methodsReflected)\r\n                lock (this) { FullReflectMethodsNoLock(); }\r\n\r\n            if (!fieldsAndConstantsReflected)\r\n                lock (this) { FullReflectFieldsAndConstantsNoLock(); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by PhpType constructor invoked via <see cref=\"Reflect\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate void FullReflectMethodsNoLock()\r\n\t\t{\r\n            // make sure that methods are at least fast reflected\r\n\t\t\tDictionary<Name, DRoutineDesc> methods = this.Methods;\r\n\r\n            if (methodsReflected)\r\n                return;\r\n\r\n            try\r\n            {\r\n                MethodInfo[] real_methods = RealType.GetMethods(MembersReflectionBindingFlags);\r\n\r\n                Dictionary<string, MethodInfo> argless_stubs = new Dictionary<string, MethodInfo>(real_methods.Length / 3);\r\n\r\n                // first pass - fill argless_stubs\r\n                for (int i = 0; i < real_methods.Length; i++)\r\n                {\r\n                    MethodInfo info = real_methods[i];\r\n\r\n                    if ((info.Attributes & MethodAttributes.MemberAccessMask) != MethodAttributes.PrivateScope)\r\n                    {\r\n                        if (PhpFunctionUtils.IsArglessStub(info, null))\r\n                        {\r\n                            argless_stubs.Add(info.Name, info);\r\n                            real_methods[i] = null;\r\n                        }\r\n                    }\r\n                    else real_methods[i] = null; // expunge private scope methods\r\n                }\r\n\r\n                // second pass - match argfulls\r\n                int methods_created = 0;\r\n                for (int i = 0; i < real_methods.Length; i++)\r\n                {\r\n                    MethodInfo info = real_methods[i];\r\n\r\n                    // argfulls detection:\r\n                    if (info != null && PhpFunctionUtils.IsArgfullOverload(info, null))\r\n                    {\r\n                        string name_str = info.Name;\r\n                        Name name = new Name(name_str);\r\n\r\n                        DRoutineDesc method_desc;\r\n                        MethodInfo argless_info = null;\r\n\r\n                        PhpMemberAttributes attrs = Enums.GetMemberAttributes(info);\r\n\r\n                        if (methods.TryGetValue(name, out method_desc))\r\n                        {\r\n                            // this method has been populated -> we have a PhpRoutineDesc\r\n\r\n                            if ((attrs & PhpMemberAttributes.Abstract) != PhpMemberAttributes.Abstract &&\r\n                                !argless_stubs.TryGetValue(name_str, out argless_info))\r\n                            {\r\n                                throw new ReflectionException(CoreResources.GetString(\"argless_stub_not_found\", name_str));\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            // this method has not been populated -> create a new PhpRoutineDesc\r\n\r\n                            if ((attrs & PhpMemberAttributes.Abstract) != PhpMemberAttributes.Abstract &&\r\n                                !argless_stubs.TryGetValue(name_str, out argless_info))\r\n                            {\r\n                                // argless has to be generated on-the-fly\r\n                                throw new NotImplementedException(\"Generating argless stubs for imported PHP types is not yet implemented\");\r\n                            }\r\n\r\n                            if (argless_info == null)\r\n                            {\r\n                                // abstract methods have no argless\r\n                                method_desc = new PhpRoutineDesc(this, attrs);\r\n                            }\r\n                            else\r\n                            {\r\n                                method_desc = new PhpRoutineDesc(\r\n                                    this,\r\n                                    attrs,\r\n                                    (RoutineDelegate)Delegate.CreateDelegate(Types.RoutineDelegate, argless_info));\r\n                            }\r\n\r\n                            methods.Add(name, method_desc);\r\n                        }\r\n\r\n                        if (method_desc.Member == null)\r\n                        {\r\n                            PhpMethod method = new PhpMethod(name, (PhpRoutineDesc)method_desc, info, argless_info);\r\n                            method.WriteUp(PhpRoutineSignature.FromArgfullInfo(method, info));\r\n                            method_desc.Member = method;\r\n\r\n                            methods_created++;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (methods_created != methods.Count) throw new ReflectionException(CoreResources.GetString(\"not_all_methods_reflected\"));\r\n            }\r\n            finally\r\n            {\r\n                methodsReflected = true;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by PhpType constructor invoked via <see cref=\"Reflect\"/>.\r\n\t\t/// </summary>\r\n        private void FullReflectFieldsAndConstantsNoLock()\r\n\t\t{\r\n            // make sure that props and consts are at least fast reflected\r\n\t\t\tDictionary<VariableName, DPropertyDesc> properties = this.Properties;\r\n\t\t\tDictionary<VariableName, DConstantDesc> constants = this.Constants;\r\n\r\n\t\t\tif (fieldsAndConstantsReflected)\r\n                return;\r\n\r\n            try\r\n            {\r\n                // get all real properties (fields and constants are exported to properties)\r\n                Dictionary<string, PropertyInfo> real_properties = new Dictionary<string, PropertyInfo>();\r\n\r\n                int fields_created = 0, constants_created = 0;\r\n\r\n                // faster than GetProperties\r\n                RealType.FindMembers(\r\n                    MemberTypes.Property,\r\n                    MembersReflectionBindingFlags,\r\n                    delegate(MemberInfo m, object _)\r\n                    {\r\n                        var info = (PropertyInfo)m;\r\n\r\n                        if (PhpVisibleAttribute.Reflect(info) != null)\r\n                        {\r\n                            // currently reflected just because of XmlDom extension, properties are not static and public\r\n\r\n                            var name = new VariableName(info.Name.TrimEnd('#'));\r\n                            DPropertyDesc property_desc;\r\n                            if (properties.TryGetValue(name, out property_desc))\r\n                                return false;\r\n\r\n                            // create DPropertyDesc\r\n                            property_desc = new DPhpFieldDesc(this, Enums.GetPropertyAttributes(info));\r\n                            properties.Add(name, property_desc);\r\n\r\n                            // remember PropertyInfo\r\n                            property_desc.Member = new PhpVisibleProperty(name, property_desc, info);\r\n\r\n                            fields_created++;\r\n                        }\r\n                        else\r\n                        {\r\n                            // checked later as an exported property\r\n                            real_properties[m.Name] = info;\r\n                        }\r\n                        return false;\r\n                    },\r\n                    null);\r\n\r\n                // faster than GetFields\r\n                RealType.FindMembers(\r\n                    MemberTypes.Field,\r\n                    MembersReflectionBindingFlags,\r\n                    delegate(MemberInfo m, object _)\r\n                    {\r\n                        FieldInfo info = (FieldInfo)m;\r\n\r\n                        if (IsPhpField(info))\r\n                        {\r\n                            // field\r\n                            VariableName name = new VariableName(info.Name.TrimEnd('#'));\r\n\r\n                            DPropertyDesc property_desc;\r\n                            if (!properties.TryGetValue(name, out property_desc))\r\n                            {\r\n                                // this property has not been populated -> create a new DPhpFieldDesc\r\n\r\n                                property_desc = new DPhpFieldDesc(this, Enums.GetMemberAttributes(info));\r\n                                properties.Add(name, property_desc);\r\n                            }\r\n\r\n                            if (property_desc.Member == null)\r\n                            {\r\n                                PropertyInfo exported_prop;\r\n                                real_properties.TryGetValue(name.Value, out exported_prop);\r\n\r\n                                property_desc.Member = new PhpField(name, property_desc, info, exported_prop);\r\n                                fields_created++;\r\n                            }\r\n                        }\r\n                        else if (IsPhpConstant(info))\r\n                        {\r\n                            // class constant\r\n                            VariableName name = new VariableName(info.Name.TrimEnd('#'));\r\n\r\n                            DConstantDesc constant_desc;\r\n                            if (!constants.TryGetValue(name, out constant_desc))\r\n                            {\r\n                                // this constant has not been populated -> create a new DConstantDesc\r\n\r\n                                constant_desc = new DConstantDesc(\r\n                                    this,\r\n                                    PhpMemberAttributes.Public | PhpMemberAttributes.Static,\r\n                                    info.GetValue(null));\r\n\r\n                                if (!info.IsInitOnly && !info.IsLiteral)    // deferred constant value\r\n                                    constant_desc.ValueIsDeferred = true;\r\n\r\n                                constants.Add(name, constant_desc);\r\n                            }\r\n\r\n                            if (constant_desc.Member == null)\r\n                            {\r\n                                constant_desc.Member = new ClassConstant(name, constant_desc, info);\r\n                                constants_created++;\r\n                            }\r\n                        }\r\n\r\n                        return false;\r\n                    },\r\n                    null);\r\n\r\n                // reflect fields that are not implemented by this type but are declared and \"visibility-upgraded\"\r\n                object[] attrs = RealType.GetCustomAttributes(typeof(PhpPublicFieldAttribute), false);\r\n                for (int i = 0; i < attrs.Length; i++)\r\n                {\r\n                    PhpPublicFieldAttribute pubf_attr = (PhpPublicFieldAttribute)attrs[i];\r\n\r\n                    VariableName name = new VariableName(pubf_attr.FieldName);\r\n\r\n                    // try to find the implementor\r\n                    DPropertyDesc implementing_property_desc;\r\n                    if (Base != null && Base.GetProperty(name, this, out implementing_property_desc) == GetMemberResult.OK)\r\n                    {\r\n                        DPropertyDesc property_desc;\r\n                        if (!properties.TryGetValue(name, out property_desc))\r\n                        {\r\n                            // this property has not been populated -> create a new DPhpFieldDesc\r\n\r\n                            PhpMemberAttributes member_attrs = implementing_property_desc.MemberAttributes;\r\n                            member_attrs &= ~(PhpMemberAttributes.Protected | PhpMemberAttributes.Private);\r\n                            member_attrs |= PhpMemberAttributes.Public;\r\n\r\n                            property_desc = new DPhpFieldDesc(this, member_attrs);\r\n                            properties.Add(name, property_desc);\r\n                        }\r\n\r\n                        if (property_desc.Member == null)\r\n                        {\r\n                            PropertyInfo exported_prop;\r\n                            real_properties.TryGetValue(name.Value, out exported_prop);\r\n\r\n                            property_desc.Member = new PhpField(\r\n                                name,\r\n                                property_desc,\r\n                                implementing_property_desc,\r\n                                pubf_attr.HasInitValue,\r\n                                exported_prop);\r\n\r\n                            fields_created++;\r\n                        }\r\n                    }\r\n                    else throw new ReflectionException(CoreResources.GetString(\"field_implementor_not_found\"));\r\n                }\r\n\r\n                //if (fields_created != properties.Count) throw new ReflectionException(CoreResources.GetString(\"not_all_fields_reflected\"));\r\n                //if (constants_created != constants.Count) throw new ReflectionException(CoreResources.GetString(\"not_all_constants_reflected\"));\r\n\r\n            }\r\n            finally\r\n            {\r\n                fieldsAndConstantsReflected = true;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <para>\r\n\t\t/// Reflectes generic parameters of a generic definition within a specified script context at run-time.\r\n\t\t/// </para>\r\n\t\t/// \r\n\t\t/// <para>\r\n\t\t/// Note, that all PHP generic type definitions have to reflect their generic parameters at the time of\r\n\t\t/// their declaration and not lazily (as they must resolve type names in the appropriate state of the script context).\r\n\t\t/// </para> \r\n\t\t/// </summary>\r\n\t\tinternal override GenericParameterDesc[]/*!!*/ ReflectGenericParameters(DTypeDesc referringType, DRoutineDesc referringRoutine,\r\n\t\t\tResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tif (this.IsGenericDefinition)\r\n\t\t\t{\r\n\t\t\t\tType[] real_params = RealType.GetGenericArguments();\r\n\t\t\t\tGenericParameterDesc[] descs = new GenericParameterDesc[real_params.Length];\r\n\r\n\t\t\t\tfor (int i = 0; i < real_params.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tDTypeDesc default_type;\r\n\t\t\t\t\tDTypeSpecAttribute default_type_attr = DTypeSpecAttribute.Reflect(real_params[i]);\r\n\t\t\t\t\tif (default_type_attr != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdefault_type = default_type_attr.TypeSpec.GetTypeDesc(RealType.Module, referringType,\r\n\t\t\t\t\t\t\treferringRoutine, resolver);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdefault_type = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdescs[i] = new GenericParameterDesc(real_params[i], default_type);\r\n\t\t\t\t}\r\n\t\t\t\treturn descs;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn GenericParameterDesc.EmptyArray;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static bool IsRealInterfaceHidden(Type/*!*/ realType, Type/*!*/ realInterface)\r\n\t\t{\r\n\t\t\t// non public:\r\n\t\t\tif (!realInterface.IsPublic)\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t// Core interfaces:\r\n\t\t\tif (realInterface.Namespace == Namespaces.Core)\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t// Note: on silverlight we're using \"stubs\"\r\n\t\t\tbool isPhpObjectInterface = (realInterface == typeof(System.IDisposable) ||\r\n\t\t\t\trealInterface == typeof(ISerializable) ||\r\n\t\t\t\trealInterface == typeof(IDeserializationCallback) ||\r\n                realInterface == typeof(System.Dynamic.IDynamicMetaObjectProvider));\r\n\r\n\t\t\t// interfaces implemented by PhpObject/DObject:\r\n\t\t\tif (isPhpObjectInterface)\r\n\t\t\t{\r\n\t\t\t\tInterfaceMapping map = realType.GetInterfaceMap(realInterface);\r\n\r\n\t\t\t\tfor (int i = 0; i < map.TargetMethods.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(map.TargetMethods[i] != null, \"Interface method is always implemented, at least by DObject\");\r\n\t\t\t\t\tDebug.Assert(map.TargetMethods[i].DeclaringType != typeof(PhpObject), \"PhpObject shouldn't implement any method of any interface\");\r\n\r\n\t\t\t\t\tif (map.TargetMethods[i].DeclaringType == typeof(DObject))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n        protected override void ReflectInterfaces()\r\n        {\r\n            Type[] real_interfaces = RealType.GetInterfaces();\r\n            if (real_interfaces == null || real_interfaces.Length == 0)\r\n            {\r\n                this.interfaces = DTypeDesc.EmptyArray;\r\n            }\r\n            else\r\n            {\r\n                List<DTypeDesc> iface_list = null;\r\n\r\n                for (int i = 0; i < real_interfaces.Length; i++)\r\n                {\r\n                    if (!IsRealInterfaceHidden(RealType, real_interfaces[i]))\r\n                    {\r\n                        if (iface_list == null)\r\n                            iface_list = new List<DTypeDesc>(real_interfaces.Length - i);\r\n\r\n                        iface_list.Add(DTypeDesc.Create(real_interfaces[i]));\r\n                    }\r\n                }\r\n\r\n                interfaces = (iface_list != null) ? iface_list.ToArray() : DTypeDesc.EmptyArray;\r\n            }\r\n        }\r\n\r\n        protected override void ReflectMethods()\r\n        {\r\n            if (methods == null)\r\n                if (!AutoPopulateNoLock())\r\n                {\r\n                    methods = new Dictionary<Name, DRoutineDesc>();\r\n\r\n                    // fall back to reflection (and make it full)\r\n                    FullReflectMethodsNoLock();\r\n                }\r\n        }\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tReflectFieldsAndConstants();\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tReflectFieldsAndConstants();\r\n\t\t}\r\n\r\n        private void ReflectFieldsAndConstants()\r\n        {\r\n            if (properties == null || constants == null)\r\n                if (!AutoPopulateNoLock())\r\n                {\r\n                    properties = new Dictionary<VariableName, DPropertyDesc>();\r\n                    constants = new Dictionary<VariableName, DConstantDesc>();\r\n\r\n                    // fall back to reflection (and make it full)\r\n                    FullReflectFieldsAndConstantsNoLock();\r\n                }\r\n        }\r\n\r\n        private bool IsPhpConstant(FieldInfo/*!*/ info)\r\n        {\r\n            return (info.IsStatic && info.IsPublic && (info.IsLiteral || info.IsInitOnly || info.FieldType == typeof(object)/*lazily initialized non-literal constant*/) &&\r\n                (\r\n                    info.FieldType == typeof(object) ||\r\n                    info.FieldType == typeof(int) ||\r\n                    info.FieldType == typeof(long) ||\r\n                    info.FieldType == typeof(bool) ||\r\n                    info.FieldType == typeof(double) ||\r\n                    info.FieldType == typeof(string)\r\n                ));\r\n        }\r\n\r\n\t\tprivate bool IsPhpField(FieldInfo/*!*/ info)\r\n\t\t{\r\n\t\t\tFieldAttributes attrs_mask = FieldAttributes.InitOnly;\r\n\t\t\tFieldAttributes attrs_value = 0;\r\n\r\n\t\t\treturn ((info.Attributes & attrs_mask) == attrs_value && info.FieldType == Types.PhpReference[0]);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Auto population\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tries to populate methods, properties, and constants by invoking the <c>__PopulateTypeDesc</c> method.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> if this instance was successfully populated, <B>false</B> otherwise.</returns>\r\n\t\tprivate bool AutoPopulateNoLock()\r\n\t\t{\r\n            return false;/* // (JM) we really need to reflect it; to get MethodInfo or aglesses and argfulls (can be done through the metadata token, but it is the same)\r\n            if (RealType == null || hasNoPopulateMethod) return false;\r\n\r\n            if (methods == null)\r\n            {\r\n                MethodInfo populator = null;\r\n                try\r\n                {\r\n                    populator = RealType.GetMethod(\r\n                        PhpObjectBuilder.PopulateTypeDescMethodName,\r\n                        BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.DeclaredOnly,\r\n                        null,\r\n                        Types.PhpTypeDesc,\r\n                        null);\r\n                }\r\n                catch (AmbiguousMatchException)\r\n                { }\r\n\r\n                if (populator != null)\r\n                {\r\n                    methods = new Dictionary<Name, DRoutineDesc>();\r\n                    properties = new Dictionary<VariableName, DPropertyDesc>();\r\n                    constants = new Dictionary<VariableName, DConstantDesc>();\r\n\r\n                    populator.Invoke(null, new object[] { this });\r\n\r\n                    return true;\r\n                }\r\n                else\r\n                {\r\n                    hasNoPopulateMethod = true;\r\n                    return false;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                return true;\r\n            }*/\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be called by the generated <c>__PopulateTypeDesc</c>.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic void SetStaticInit(Action<ScriptContext> staticInit)\r\n\t\t{\r\n\t\t\tinitializeStaticFields = staticInit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be called by the generated <c>__PopulateTypeDesc</c>.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic void AddMethod(string name, PhpMemberAttributes attrs, RoutineDelegate arglessStub)\r\n\t\t{\r\n\t\t\tDRoutineDesc method = new PhpRoutineDesc(this, attrs, arglessStub);\r\n\t\t\tmethods.Add(new Name(name), method);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be called by the generated <c>__PopulateTypeDesc</c>.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic void AddProperty(string name, PhpMemberAttributes attrs, GetterDelegate getter, SetterDelegate setter)\r\n\t\t{\r\n\t\t\tDPropertyDesc property = new DPhpFieldDesc(this, attrs, getter, setter);\r\n\t\t\tproperties.Add(new VariableName(name), property);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be called by generated helpers.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic void AddConstant(string name, object value)\r\n\t\t{\r\n            //Debug.Fail(\"Add      public static readonly object \" + name + \" = \" + \"(int)\" + value.ToString() + \"; instead of AddConstant usage.\");\r\n\r\n\t\t\tDConstantDesc constant = new DConstantDesc(this, PhpMemberAttributes.Public | PhpMemberAttributes.Static, value);\r\n\t\t\tconstants.Add(new VariableName(name), constant);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic override object New(PhpStack stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\t// note that that this method may actually return a ClrObject\r\n\t\t\tDObject result = PhpFunctionUtils.InvokeConstructor(this, /*Types.ScriptContext_DTypeDesc,*/\r\n\t\t\t\tstack.Context, caller);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext context)\r\n\t\t{\r\n\t\t\tif (typeof(PhpObject).IsAssignableFrom(RealType))\r\n\t\t\t{\r\n\t\t\t\t// this type is a PhpObject descendant -> no unwanted CLR constructor is in our way\r\n\t\t\t\treturn PhpFunctionUtils.InvokeConstructor(this, /*Types.ScriptContext_Bool,*/ context, false);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n#if SILVERLIGHT\r\n\t\t\t\t// SILVERLIGHT: TODO...?\r\n\t\t\t\tthrow new NotSupportedException(\"PhpTypeDesc.New - creating uninitalized object is not supported\");\r\n#else\r\n\t\t\t\t// return a clean new instance of this type without executing any of its constructors\r\n\t\t\t\tobject real_object = System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(RealType);\r\n\t\t\t\treturn ClrObject.WrapDynamic(real_object);\r\n#endif\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void EnsureThreadStaticFieldsInitialized(ScriptContext context)\r\n\t\t{\r\n            if (initializeStaticFields != null)\r\n                initializeStaticFields(context);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrTypeDesc\r\n\r\n\t/// <summary>\r\n\t/// Represents CLR type, generic CLR type template, or CLR type instantiation.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\tpublic class ClrTypeDesc : DTypeDesc\r\n\t{\r\n\t\tinternal static readonly List<ClrTypeDesc>/*!*/ EmptyList = new List<ClrTypeDesc>(1);\r\n\r\n\t\tpublic override bool IsValueType { get { return RealType.IsValueType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Instance constructor.\r\n\t\t/// </summary>\r\n\t\tpublic ClrMethodDesc/*!*/ Constructor\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_constructor == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t_constructor = ClrMethod.CreateConstructor(this).ClrMethodDesc;\r\n\t\t\t\t}\r\n\t\t\t\treturn _constructor;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate ClrMethodDesc/*!*/ _constructor;\r\n\r\n\t\tpublic int GenericParameterCount\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn RealType.GetGenericArguments().Length; // TODO:\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of all type parameter overloads. Empty for non-generic type.\r\n\t\t/// Otherwise, shared by all overloads and containing the type itself.\r\n\t\t/// Unsorted.\r\n\t\t/// </summary>\r\n\t\tpublic List<ClrTypeDesc>/*!*/ GenericOverloads { get { return genericOverloads; } }\r\n\t\tprivate List<ClrTypeDesc>/*!*/ genericOverloads;\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by run-time reflection.\r\n\t\t/// </summary>\r\n\t\tpublic ClrTypeDesc(DModule/*!*/ declaringModule, Type/*!*/ realType, DTypeDesc baseDesc, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule, realType, baseDesc, memberAttributes)\r\n\t\t{\r\n\t\t\t// initialize with an empty array, the ClrModule reflection takes care:\r\n\t\t\tgenericOverloads = ClrTypeDesc.EmptyList;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tinternal void AddGenericOverload(ClrTypeDesc/*!*/ desc)\r\n\t\t{\r\n\t\t\tif (genericOverloads.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tgenericOverloads = new List<ClrTypeDesc>(2);\r\n\t\t\t\tgenericOverloads.Add(this);\r\n\t\t\t\tgenericOverloads.Add(desc);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tgenericOverloads.Add(desc);\r\n\t\t\t}\r\n\r\n\t\t\tdesc.genericOverloads = this.genericOverloads;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflects the type itself.\r\n\t\t/// Members will be reflected lazily on per member table basis.\r\n\t\t/// </summary>\r\n\t\tprotected override DType/*!*/ Reflect()\r\n\t\t{\r\n\t\t\t// this type-desc represents non-generic type or the generic definition => create the ClrType for it:\r\n\t\t\tif (!RealType.IsGenericType || RealType.IsGenericTypeDefinition)\r\n\t\t\t\treturn new ClrType(this, ClrNotationUtils.FromClrNotation(RealType.FullName, true));\r\n\r\n\t\t\t// this type-desc represents a generic type instantiation; \r\n\t\t\t// all instantiations of a single generic type share the same ClrType => do not create new ClrType;\r\n\t\t\t// note: we could do this faster if each type-desc had a reference to the generic type-desc.\r\n\t\t\treturn DTypeDesc.Create(RealType.GetGenericTypeDefinition()).Type;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reflectes generic parameters if the type is generic type definition.\r\n\t\t/// </summary>\r\n\t\tinternal override GenericParameterDesc[]/*!!*/ ReflectGenericParameters(DTypeDesc referringType, DRoutineDesc referringRoutine,\r\n\t\t\tResolverDelegate resolver)\r\n\t\t{\r\n\t\t\tif (RealType.IsGenericTypeDefinition)\r\n\t\t\t{\r\n\t\t\t\tType[] real_params = RealType.GetGenericArguments();\r\n\t\t\t\tGenericParameterDesc[] descs = new GenericParameterDesc[real_params.Length];\r\n\r\n\t\t\t\t// fills the default types going from the last one to the first and filling System.Object until \r\n\t\t\t\t// a constraint disallows this substitution:\r\n\t\t\t\tbool defaults_enabled = true;\r\n\t\t\t\tfor (int i = real_params.Length - 1; i >= 0; i--)\r\n\t\t\t\t{\r\n\t\t\t\t\tDTypeDesc default_type = null;\r\n\r\n\t\t\t\t\tif (defaults_enabled)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (IsSystemObjectCompatibleWithGenericParameter(real_params[i]))\r\n\t\t\t\t\t\t\tdefault_type = DTypeDesc.SystemObjectTypeDesc;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tdefaults_enabled = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdescs[i] = new GenericParameterDesc(real_params[i], default_type);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn descs;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn GenericParameterDesc.EmptyArray;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectInterfaces()\r\n\t\t{\r\n\t\t\tType[] real_interfaces = RealType.GetInterfaces();\r\n\r\n\t\t\tList<DTypeDesc> iface_list = new List<DTypeDesc>();\r\n\r\n\t\t\tfor (int i = 0; i < real_interfaces.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (real_interfaces[i].IsPublic)\r\n\t\t\t\t{\r\n\t\t\t\t\tiface_list.Add(DTypeDesc.Create(real_interfaces[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tinterfaces = iface_list.ToArray();\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectMethods()\r\n\t\t{\r\n\t\t\tMethodInfo[] real_methods = RealType.GetMethods(MembersReflectionBindingFlags);\r\n\r\n\t\t\t// We need all methods to add inherited methods with same name to clr overloads\r\n\t\t\tMethodInfo[] tm = RealType.GetMethods(AllMembersReflectionBindingFlags);\r\n\r\n/*#if SILVERLIGHT\r\n\t\t\t// SILVERLIGHT: TODO .. we need better solution here \r\n\t\t\t// (also we should check when exactly is the MethodAccess exception thrown..)\r\n\t\t\tIEnumerable<MethodInfo> tmf = CollectionUtils.Filter(tm, delegate(MethodInfo m) {\r\n                if (m.GetCustomAttributes(typeof(System.Security.SecurityCriticalAttribute), true).Length != 0) return false;\r\n                \r\n                // TODO: This has to be done better - depending on the caller\r\n                return m.IsPublic;\r\n            });\r\n#else*/\r\n\t\t\tIEnumerable<MethodInfo> tmf = tm;\r\n//#endif\r\n\r\n            IDictionary<string, IList<MethodInfo>> all_methods = CollectionUtils.BuildListDictionary<string, MethodInfo>\r\n                (tmf.Select(_m => _m.Name), tmf);\r\n\r\n\t\t\t// TODO: statistics: how many visible overloads in AVG?\r\n\t\t\tDictionary<Name, DRoutineDesc> methods = new Dictionary<Name, DRoutineDesc>(real_methods.Length / 2);\r\n\r\n\t\t\tReflectMethods(real_methods, all_methods, this, methods);\r\n\r\n\t\t\tthis.methods = methods;\r\n\t\t}\r\n\r\n\t\tprivate static void ReflectMethods(MethodInfo[]/*!!*/ realMethods, IDictionary<string, IList<MethodInfo>>/*!!*/ all_methods,\r\n\t\t\tDTypeDesc/*!*/ declaringType, Dictionary<Name, DRoutineDesc>/*!*/ methods)\r\n\t\t{\r\n\t\t\tDebug.Assert(realMethods != null && declaringType != null && methods != null && all_methods != null);\r\n\t\t\t\r\n\t\t\t// is set to true after first loop when type contains method that may be explicit interface implementation\r\n\t\t\tbool have_explicit_impl = false;\r\n\r\n\t\t\tforeach (MethodInfo real_method in realMethods)\r\n\t\t\t{\r\n\t\t\t\t// TODO: indexer support\r\n\t\t\t\tif (IsMethodVisible(real_method))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!real_method.IsSpecialName || real_method.Name == \"get_Item\" || real_method.Name == \"set_Item\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// method names are not mangled in any way in CLR:\r\n\t\t\t\t\t\tReflectMethod(real_method, new Name(real_method.Name), Enums.GetMemberAttributes(real_method),\r\n\t\t\t\t\t\t\tdeclaringType, methods, all_methods[real_method.Name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (!have_explicit_impl && DoesMethodLookLikeExplicitImpl(real_method)) have_explicit_impl = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (have_explicit_impl)\r\n\t\t\t{\r\n\t\t\t\t// determine explicit interface method implementations according to the interface map\r\n\t\t\t\tforeach (Type iface_type in declaringType.RealType.GetInterfaces())\r\n\t\t\t\t{\r\n\t\t\t\t\tInterfaceMapping mapping = declaringType.RealType.GetInterfaceMap(iface_type);\r\n\r\n\t\t\t\t\tfor (int i = 0; i < mapping.TargetMethods.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tMethodInfo real_method = mapping.TargetMethods[i];\r\n\t\t\t\t\t\tif (!IsMethodVisible(real_method))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tMethodInfo iface_method = mapping.InterfaceMethods[i];\r\n\r\n\t\t\t\t\t\t\tPhpMemberAttributes attrs = Enums.GetMemberAttributes(real_method) | PhpMemberAttributes.Final;\r\n\r\n                            // reflect the method twice - under the iface method name and under the\r\n                            // compound iface.method name\r\n                            ReflectMethod(real_method, new Name(iface_method.Name), attrs, declaringType, methods, null);\r\n                            ReflectMethod(real_method, new Name(iface_type.Name + \".\" + iface_method.Name), attrs, declaringType, methods, null);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add method and its overloads to the table\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"realMethod\">First found methodinfo</param>\r\n\t\t/// <param name=\"name\">Name of the method</param>\r\n\t\t/// <param name=\"attributes\">Attributes</param>\r\n\t\t/// <param name=\"declaringType\">Owner type</param>\r\n\t\t/// <param name=\"methods\">Collection with already added methods</param>\r\n\t\t/// <param name=\"overloads\">All visible methods with the same name (including inherited)</param>\r\n\t\tprivate static void ReflectMethod(MethodInfo/*!*/ realMethod, Name name, PhpMemberAttributes attributes,\r\n\t\t\tDTypeDesc/*!*/ declaringType, Dictionary<Name, DRoutineDesc>/*!*/ methods, IList<MethodInfo> overloads)\r\n\t\t{\r\n\t\t\tClrMethod clr_method;\r\n\t\t\t\r\n\t\t\t// overloads are added when the first method with same name is found\r\n\t\t\tif (methods.ContainsKey(name)) return;\r\n\t\t\t\r\n\t\t\t// new method:\r\n\t\t\tclr_method = new ClrMethod(name, declaringType, attributes, 1, realMethod.ContainsGenericParameters);\r\n\t\t\tmethods.Add(name, clr_method.ClrMethodDesc);\r\n\t\t\tif (overloads == null)\r\n\t\t\t{\r\n\t\t\t\tClrMethod.Overload overload;\r\n\t\t\t\tclr_method.AddOverload(realMethod, out overload);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforeach (MethodInfo ovrInfo in overloads)\r\n\t\t\t\t{\r\n#if SILVERLIGHT\r\n                    // Maybe we should include this check in non-Silverlight version too - \r\n                    //   ensures that overload is also visible\r\n                    if (!IsMethodVisible(ovrInfo)) continue;\r\n#endif\r\n\t\t\t\t\tClrMethod.Overload overload;\r\n\t\t\t\t\tclr_method.AddOverload(ovrInfo, out overload);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectProperties()\r\n\t\t{\r\n\t\t\tReflectPropertiesAndConstants();\r\n\t\t}\r\n\r\n\t\tprotected override void ReflectConstants()\r\n\t\t{\r\n\t\t\tReflectPropertiesAndConstants();\r\n\t\t}\r\n\r\n\t\tprivate void ReflectPropertiesAndConstants()\r\n\t\t{\r\n\t\t\tPropertyInfo[] real_properties = RealType.GetProperties(MembersReflectionBindingFlags);\r\n\t\t\tEventInfo[] real_events = RealType.GetEvents(MembersReflectionBindingFlags);\r\n\t\t\tFieldInfo[] real_fields = RealType.GetFields(MembersReflectionBindingFlags);\r\n\r\n\t\t\tint est_property_count, est_constant_count;\r\n\r\n\t\t\tif (RealType.IsEnum)\r\n\t\t\t{\r\n\t\t\t\test_property_count = 0;\r\n\t\t\t\test_constant_count = real_fields.Length - 1; // one __value field\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// there is usually no many visible constants defined in non-enum types, \r\n\t\t\t\t// majority of properties are visible, majority of fields are invisible:\r\n\t\t\t\test_property_count = real_properties.Length + 2;\r\n\t\t\t\test_constant_count = 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.properties = new Dictionary<VariableName, DPropertyDesc>(est_property_count);\r\n\t\t\tthis.constants = new Dictionary<VariableName, DConstantDesc>(est_constant_count);\r\n\r\n\t\t\t// Reflect properties\r\n\t\t\t// is set to true after first loop when type contains method that may be explicit interface implementation\r\n\t\t\tbool have_explicit_impl = false;\r\n\r\n\t\t\t// associates setter/getter with property for explicit interface impl.\r\n\t\t\tDictionary<MethodInfo, PropertyInfo> explicit_properties = new Dictionary<MethodInfo, PropertyInfo>();\r\n\r\n\t\t\tforeach (PropertyInfo real_prop in real_properties)\r\n\t\t\t{\r\n\t\t\t\tif (!real_prop.IsSpecialName)\r\n\t\t\t\t{\r\n\t\t\t\t\tMethodInfo getter = real_prop.GetGetMethod(true);\r\n\t\t\t\t\tMethodInfo setter = real_prop.GetSetMethod(true);\r\n\r\n\t\t\t\t\t// Explicit interface implementation?\r\n\t\t\t\t\tif (getter != null && DoesMethodLookLikeExplicitImpl(getter))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\texplicit_properties.Add(getter, real_prop);\r\n\t\t\t\t\t\thave_explicit_impl |= true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (setter != null && DoesMethodLookLikeExplicitImpl(setter)) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\texplicit_properties.Add(setter, real_prop);\r\n\t\t\t\t\t\thave_explicit_impl |= true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Add property\r\n\t\t\t\t\tbool has_visible_getter = getter != null && IsMethodVisible(getter);\r\n\t\t\t\t\tbool has_visible_setter = setter != null && IsMethodVisible(setter);\r\n\r\n\t\t\t\t\tif (has_visible_getter || has_visible_setter)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tParameterInfo[] index_params = real_prop.GetIndexParameters();\r\n\r\n\t\t\t\t\t\tif (index_params.Length == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tVariableName name = new VariableName(real_prop.Name);\r\n\r\n\t\t\t\t\t\t\tDebug.Assert(!properties.ContainsKey(name));\r\n\r\n\t\t\t\t\t\t\t// TODO: how to combine attrs?\r\n\t\t\t\t\t\t\tPhpMemberAttributes attrs = PhpMemberAttributes.None;\r\n\t\t\t\t\t\t\tif (has_visible_getter) attrs |= Enums.GetMemberAttributes(getter);\r\n                            if (has_visible_setter) attrs |= Enums.GetMemberAttributes(setter);\r\n\r\n\t\t\t\t\t\t\tReflectProperty(name, attrs, real_prop, has_visible_getter, has_visible_setter);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// TODO: indexers currently not supported => skip\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check explicitly implemented interfaces\r\n\t\t\tif (have_explicit_impl)\r\n\t\t\t{\r\n\t\t\t\t// determine explicit interface method implementations according to the interface map\r\n\t\t\t\tforeach (Type iface_type in RealType.GetInterfaces())\r\n\t\t\t\t{\r\n\t\t\t\t\tInterfaceMapping mapping = RealType.GetInterfaceMap(iface_type);\r\n\t\t\t\t\tIDictionary<MethodInfo, MethodInfo> mappingDict = CollectionUtils.JoinDictionary(mapping.InterfaceMethods, mapping.TargetMethods);\r\n\r\n\t\t\t\t\tforeach (PropertyInfo real_property in iface_type.GetProperties())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tMethodInfo getter = real_property.GetGetMethod(false);\r\n\t\t\t\t\t\tMethodInfo setter = real_property.GetSetMethod(false);\r\n\t\t\t\t\t\tif ((getter != null && !IsMethodVisible(mappingDict[getter])) ||\r\n\t\t\t\t\t\t\t(setter != null && !IsMethodVisible(mappingDict[setter])))\r\n\t\t\t\t\t\t{\r\n                            ParameterInfo[] index_params = real_property.GetIndexParameters();\r\n\r\n                            if (index_params.Length == 0)\r\n                            {\r\n                                // TODO: how to combine attrs?\r\n                                PhpMemberAttributes attrs = PhpMemberAttributes.None;\r\n                                if (getter != null) attrs = Enums.GetMemberAttributes(getter);\r\n                                if (setter != null) attrs = Enums.GetMemberAttributes(setter);\r\n\r\n                                bool get_vis = getter != null && IsMethodVisible(getter);\r\n                                bool set_vis = setter != null && IsMethodVisible(setter);\r\n\r\n                                // add property under the iface property name and under the compound iface.property name\r\n                                ReflectProperty(new VariableName(real_property.Name), attrs, real_property, get_vis, set_vis);\r\n                                ReflectProperty(new VariableName(iface_type.Name + \".\" + real_property.Name), attrs, real_property, get_vis, set_vis);\r\n                            }\r\n                            else\r\n                            {\r\n                                // TODO: indexers currently not supported => TODO, problems ?\r\n                            }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Reflect Events\r\n\t\t\tforeach (EventInfo real_event in real_events)\r\n\t\t\t{\r\n\t\t\t\tif (!real_event.IsSpecialName)\r\n\t\t\t\t{\r\n\t\t\t\t\tMethodInfo adder = real_event.GetAddMethod(true);\r\n\t\t\t\t\tMethodInfo remover = real_event.GetRemoveMethod(true);\r\n\r\n\t\t\t\t\tbool has_visible_adder = adder != null && IsMethodVisible(adder);\r\n\t\t\t\t\tbool has_visible_remover = remover != null && IsMethodVisible(remover);\r\n\r\n\t\t\t\t\tif (has_visible_adder || has_visible_remover)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tVariableName name = new VariableName(real_event.Name);\r\n\r\n\t\t\t\t\t\tDebug.Assert(!properties.ContainsKey(name));\r\n\r\n\t\t\t\t\t\tPhpMemberAttributes attrs = PhpMemberAttributes.None;\r\n\r\n\t\t\t\t\t\tif (adder != null) attrs = Enums.GetMemberAttributes(adder);\r\n\t\t\t\t\t\tif (remover != null) attrs = Enums.GetMemberAttributes(remover);\r\n\r\n\t\t\t\t\t\t// TODO: how to combine attrs?\r\n\r\n\t\t\t\t\t\tClrEvent clr_event = new ClrEvent(name, this, attrs, real_event, has_visible_adder, has_visible_remover);\r\n\t\t\t\t\t\tproperties.Add(name, clr_event.PropertyDesc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tforeach (FieldInfo real_field in real_fields)\r\n\t\t\t{\r\n\t\t\t\tif (IsFieldVisible(real_field) && !real_field.IsSpecialName)\r\n\t\t\t\t{\r\n\t\t\t\t\tVariableName name = new VariableName(real_field.Name);\r\n\t\t\t\t\tPhpMemberAttributes attrs = Enums.GetMemberAttributes(real_field);\r\n\r\n\t\t\t\t\tif (real_field.IsLiteral)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// constant //\r\n\r\n\t\t\t\t\t\tDebug.Assert(real_field.IsStatic && !constants.ContainsKey(name));\r\n\r\n\t\t\t\t\t\tobject value = real_field.GetValue(null);\r\n\t\t\t\t\t\tClassConstant class_const = new ClassConstant(name, this, attrs);\r\n\t\t\t\t\t\tclass_const.SetValue(Convert.ClrLiteralToPhpLiteral(value));\r\n\t\t\t\t\t\tconstants.Add(name, class_const.ConstantDesc);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// field backed property (from the PHP point of view) //\r\n\r\n\t\t\t\t\t\tDebug.Assert(!properties.ContainsKey(name));\r\n\r\n\t\t\t\t\t\tClrField clr_field = new ClrField(name, this, attrs, real_field);\r\n\t\t\t\t\t\tproperties.Add(name, clr_field.PropertyDesc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ReflectProperty(VariableName vname, PhpMemberAttributes attrs, PropertyInfo real_property, bool get_vis, bool set_vis)\r\n\t\t{\r\n\t\t\tif (properties.ContainsKey(vname)) return;\r\n\r\n\t\t\tClrProperty clr_property = new ClrProperty(vname, this, attrs, real_property, get_vis, set_vis);\r\n\t\t\tproperties.Add(vname, clr_property.PropertyDesc);\r\n\t\t}\r\n\r\n\t\tinternal static bool IsMethodVisible(MethodBase/*!*/ method)\r\n\t\t{\r\n#if SILVERLIGHT\r\n            //if (method.GetCustomAttributes(typeof(System.Security.SecurityCriticalAttribute), true).Length != 0) return false;\r\n            return (method.IsPublic || method.IsFamily || method.IsFamilyOrAssembly);\r\n#else\r\n\t\t\treturn (method.IsPublic || method.IsFamily || method.IsFamilyOrAssembly);\r\n#endif\r\n\t\t}\r\n\r\n\t\tinternal static bool DoesMethodLookLikeExplicitImpl(MethodBase/*!*/ method)\r\n\t\t{\r\n\t\t\treturn (method.IsFinal && method.IsVirtual && method.IsPrivate);\r\n\t\t}\r\n\r\n\t\tinternal static bool IsFieldVisible(FieldInfo/*!*/ field)\r\n\t\t{\r\n\t\t\treturn (field.IsPublic || field.IsFamily || field.IsFamilyOrAssembly);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Run-time Operations\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\t// visibility test performed by the stub\r\n\t\t\treturn ClrObject.WrapDynamic(Constructor.Invoke(null, stack, caller));\r\n\t\t}\r\n\r\n\t\tpublic override object New(ScriptContext/*!*/ context)\r\n\t\t{\r\n#if SILVERLIGHT\r\n\t\t\t\t// SILVERLIGHT: TODO...?\r\n\t\t\t\tthrow new NotSupportedException(\"PhpTypeDesc.New - creating uninitalized object is not supported\");\r\n#else\r\n\t\t\t// return a clean new instance of this type without executing any of its constructors\r\n\t\t\tobject real_object = System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(RealType);\r\n\t\t\treturn ClrObject.WrapDynamic(real_object);\r\n#endif\r\n\t\t}\r\n\r\n\t\tinternal ClrTypeDesc/*!*/ ResolveGenericOverload(int argumentCount, out bool success)\r\n\t\t{\r\n\t\t\tList<ClrTypeDesc> overloads = genericOverloads;\r\n\r\n\t\t\tif (overloads.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(overloads.Count > 1);\r\n\t\t\t\toverloads.Sort(delegate(ClrTypeDesc x, ClrTypeDesc y)\r\n\t\t\t\t{\r\n\t\t\t\t\tint lx = x.GenericParameterCount;\r\n\t\t\t\t\tint ly = y.GenericParameterCount;\r\n\r\n\t\t\t\t\treturn (lx == ly) ? 0 : ((lx < ly) ? -1 : +1);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tint overload_idx = 0;\r\n\t\t\t\twhile (overload_idx < overloads.Count && argumentCount > overloads[overload_idx].GenericParameterCount)\r\n\t\t\t\t\toverload_idx++;\r\n\r\n\t\t\t\tif (overload_idx == overloads.Count)\r\n\t\t\t\t{\r\n\t\t\t\t\t// too many args:\r\n\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\treturn overloads[overload_idx - 1];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// less or equal:\r\n\t\t\t\tsuccess = true;\r\n\t\t\t\treturn overloads[overload_idx];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tsuccess = (argumentCount <= this.GenericParameterCount);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Argless stub used as a fake CLR constructor if there is no such constructor.\r\n\t\t/// </summary>\r\n\t\tinternal object _NoConstructorErrorStub(object instance, PhpStack/*!*/ stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"constructor_less_type_instantiated\", this.MakeFullName()));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrDelegateDesc\r\n\r\n\t[DebuggerNonUserCode]\r\n\tpublic sealed class ClrDelegateDesc : ClrTypeDesc\r\n\t{\r\n\t\tinternal class DelegateStubBuilder\r\n\t\t{\r\n\t\t\t#region Fields\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Per delegate type stub cache.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate Dictionary<DRoutineDesc, DynamicMethod> stubCache = new Dictionary<DRoutineDesc, DynamicMethod>();\r\n\r\n\t\t\tprivate ParameterInfo[]/*!*/ delegateParameters;\r\n\t\t\tprivate Type/*!*/ stubReturnType;\r\n\t\t\tprivate Type[]/*!*/ stubParamTypes;\r\n\r\n\t\t\tprivate ClrDelegateDesc/*!*/ delegateDesc;\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region Construction\r\n\r\n\t\t\tpublic DelegateStubBuilder(ClrDelegateDesc/*!*/ delegateDesc)\r\n\t\t\t{\r\n\t\t\t\t// our generated stubs must have the same signature as the delegate (i.e. its Invoke method)\r\n\t\t\t\t// enriched with the first DObject parameter representing the target instance (to be closed)\r\n\r\n\t\t\t\tthis.delegateDesc = delegateDesc;\r\n\r\n\t\t\t\tDRoutineDesc invoke_desc = delegateDesc.GetMethod(Name.ClrInvokeName);\r\n\r\n\t\t\t\tif (invoke_desc != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tMethodInfo invoke_info = (MethodInfo)invoke_desc.ClrMethod.Overloads[0].Method;\r\n\t\t\t\t\tdelegateParameters = invoke_desc.ClrMethod.Overloads[0].Parameters;\r\n\r\n\t\t\t\t\t// determine parameter types and return type\r\n\t\t\t\t\tstubReturnType = invoke_info.ReturnType;\r\n\t\t\t\t\tstubParamTypes = new Type[delegateParameters.Length + 1];\r\n\r\n\t\t\t\t\tstubParamTypes[0] = Types.DObject[0];\r\n\t\t\t\t\tfor (int i = 0; i < delegateParameters.Length; i++) stubParamTypes[i + 1] = delegateParameters[i].ParameterType;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Fail(\"Creating non-specific delegates is not supported yet.\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region GetStub & Friends\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Returns delegate to CLR stub of the given target-routine pair.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"target\">The target instance or <B>null</B>.</param>\r\n\t\t\t/// <param name=\"routine\">The target routine desc.</param>\r\n\t\t\t/// <param name=\"realCalleeName\">Real callee name if <paramref name=\"routine\"/> is in fact <c>__call</c>,\r\n\t\t\t/// or <B>null</B> if <paramref name=\"routine\"/> if the real callee.</param>\r\n\t\t\t/// <returns>\r\n\t\t\t/// Delegate to the stub or <B>null</B> if stub for this target-routine pair cannot be generated.\r\n\t\t\t/// </returns>\r\n\t\t\tpublic Delegate GetStub(DObject target, DRoutineDesc/*!*/ routine, string realCalleeName)\r\n\t\t\t{\r\n\t\t\t\tif (target == null && !routine.IsStatic) return null;\r\n\r\n\t\t\t\tDynamicMethod stub;\r\n\r\n\t\t\t\t// storing stubs (not delegates) in the cache allows us to reuse the same stub for different targets\r\n\r\n\t\t\t\tlock (stubCache)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!stubCache.TryGetValue(routine, out stub))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstub = GenerateStub(routine, realCalleeName);\r\n\t\t\t\t\t\tstubCache.Add(routine, stub);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn stub.CreateDelegate(delegateDesc.RealType, target);\r\n\t\t\t}\r\n\r\n\t\t\tprivate IPlace/*!*/ GetScriptContextPlace(ILEmitter/*!*/ il, bool haveTarget)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder context = il.DeclareLocal(Types.ScriptContext[0]);\r\n\r\n\t\t\t\t// [ context = ScriptContent.CurrentContext ]\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, Emit.Methods.ScriptContext.GetCurrentContext);\r\n\t\t\t\til.Stloc(context);\r\n\r\n\t\t\t\treturn new Place(context);\r\n\t\t\t}\r\n\r\n\t\t\tprivate DynamicMethod/*!*/ GenerateStub(DRoutineDesc/*!*/ routine, string realCalleeName)\r\n\t\t\t{\r\n#if DEBUG_DELEGATE_STUBS\r\n\t\t\t\tAssemblyName name = new AssemblyName(\"DelegateStub_\" + routine.MakeFullName());\r\n\t\t\t\tAssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save, \"C:\\\\Temp\");\r\n\t\t\t\tModuleBuilder mb = ab.DefineDynamicModule(name.Name, name.Name + \".dll\");\r\n\t\t\t\tTypeBuilder tb = mb.DefineType(routine.MakeFullName());\r\n\t\t\t\tMethodBuilder mmb = tb.DefineMethod(\"<^DelegateStub>\", MethodAttributes.Public | MethodAttributes.Static,\r\n\t\t\t\t\tstubReturnType, stubParamTypes);\r\n\r\n\t\t\t\tEmitStubBody(new ILEmitter(mmb), routine, realCalleeName);\r\n\r\n\t\t\t\ttb.CreateType();\r\n\t\t\t\tab.Save(name.Name + \".dll\");\r\n#endif\r\n\r\n#if SILVERLIGHT\r\n\t\t\t\tDynamicMethod dm = new DynamicMethod(\"<^DelegateStub>\", stubReturnType, stubParamTypes);\r\n#else\r\n\t\t\t\tDynamicMethod dm = new DynamicMethod(\"<^DelegateStub>\", PhpFunctionUtils.DynamicStubAttributes, CallingConventions.Standard,\r\n\t\t\t\t\tstubReturnType, stubParamTypes, routine.ArglessStub.Method.DeclaringType, true);\r\n#endif\r\n\t\t\t\tEmitStubBody(new ILEmitter(dm), routine, realCalleeName);\r\n\r\n\t\t\t\treturn dm;\r\n\t\t\t}\r\n\r\n\t\t\tprivate void EmitStubBody(ILEmitter/*!*/ il, DRoutineDesc/*!*/ routine, string realCalleeName)\r\n\t\t\t{\r\n\t\t\t\tIPlace context_place = GetScriptContextPlace(il, !routine.IsStatic);\r\n\t\t\t\tClrStubBuilder stub_builder = new ClrStubBuilder(il, context_place, delegateParameters.Length, 1);\r\n\r\n\t\t\t\tif (realCalleeName != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStackBuilder.EmitAddFrame(il, context_place, 0, 2, null, delegate(ILEmitter _il, int arg_idx)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (arg_idx == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// push real callee name\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Ldstr, realCalleeName);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// create PHP array containing all converted CLR parameters\r\n\t\t\t\t\t\t\til.LdcI4(delegateParameters.Length);\r\n\t\t\t\t\t\t\til.LdcI4(0);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpArray.Int32_Int32);\r\n\r\n\t\t\t\t\t\t\t// load CLR parameters, convert them to PHP, and add them to the PHP array\r\n\t\t\t\t\t\t\tfor (int i = 0; i < delegateParameters.Length; i++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\t\t\t\t\tstub_builder.EmitLoadClrParameter(delegateParameters[i], PhpTypeCode.Unknown);\r\n\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Call, Emit.Methods.PhpHashtable_Add);\r\n\t\t\t\t\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStackBuilder.EmitAddFrame(il, context_place, 0, delegateParameters.Length, null, delegate(ILEmitter _il, int i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstub_builder.EmitLoadClrParameter(delegateParameters[i], PhpTypeCode.Unknown);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tLabel target_is_null = il.DefineLabel();\r\n\r\n\t\t\t\t// invoke the routine\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Emit(OpCodes.Brfalse_S, target_is_null);\r\n\t\t\t\til.Emit(OpCodes.Callvirt, Emit.Properties.DObject_RealObject.GetGetMethod());\r\n\t\t\t\til.MarkLabel(target_is_null, true);\r\n\r\n\t\t\t\tcontext_place.EmitLoad(il);\r\n\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\r\n\t\t\t\t// beware the \"reflection\" here, IMHO better than going via KnownRoutine.ArglessInfo\r\n\t\t\t\til.Emit(OpCodes.Call, routine.ArglessStub.Method);\r\n\r\n\t\t\t\t// convert ref/out parameters back from PHP to CLR\r\n\t\t\t\tfor (int i = 0; i < delegateParameters.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tstub_builder.EmitStoreClrParameter(delegateParameters[i]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// convert return value from PHP to CLR\r\n\t\t\t\tstub_builder.EmitConvertReturnValue(stubReturnType, PhpTypeCode.Object);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Lazily initialized stub builder.\r\n\t\t/// </summary>\r\n\t\tprivate volatile DelegateStubBuilder _stubBuilder;\r\n\r\n\t\tinternal DelegateStubBuilder StubBuilder\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_stubBuilder == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tlock (this)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (_stubBuilder == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t_stubBuilder = new DelegateStubBuilder(this);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn _stubBuilder;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by run-time reflection.\r\n\t\t/// </summary>\r\n\t\tpublic ClrDelegateDesc(DModule/*!*/ declaringModule, Type/*!*/ realType, DTypeDesc baseDesc, PhpMemberAttributes memberAttributes)\r\n\t\t\t: base(declaringModule, realType, baseDesc, memberAttributes)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override object New(PhpStack/*!*/ stack, DTypeDesc caller, NamingContext nameContext)\r\n\t\t{\r\n\t\t\t// try to convert the value on the stack to a delegate of the type represented by this instance\r\n\r\n\t\t\tif (stack.ArgCount == 1)\r\n\t\t\t{\r\n\t\t\t\t// TODO: allow other syntax as well?\r\n\t\t\t\t// e.g.: new SomeDelegate($instance, \"MethodName\")\r\n\r\n\t\t\t\tobject arg = stack.PeekValueUnchecked(1);\r\n\t\t\t\tstack.RemoveFrame();\r\n\r\n\t\t\t\tPhpCallback callback = Convert.ObjectToCallback(arg, false);\r\n\t\t\t\tif (callback != null && callback.Bind(false, caller, nameContext))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (callback.TargetInstance == null && !callback.TargetRoutine.IsStatic)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"delegate_target_instance_missing\",\r\n\t\t\t\t\t\t\tMakeFullName(),\r\n\t\t\t\t\t\t\tcallback.TargetRoutine.DeclaringType.MakeFullName(),\r\n\t\t\t\t\t\t\tcallback.TargetRoutine.MakeFullName()));\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tDelegate result = StubBuilder.GetStub(\r\n\t\t\t\t\t\tcallback.TargetInstance,\r\n\t\t\t\t\t\tcallback.TargetRoutine,\r\n\t\t\t\t\t\tcallback.IsBoundToCaller ? callback.RoutineName : null);\r\n\r\n\t\t\t\t\t// we have a delegate\r\n\t\t\t\t\treturn ClrObject.Wrap(result);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstack.RemoveFrame();\r\n\r\n\t\t\t\tPhpException.Throw(PhpError.Error, CoreResources.GetString(\"delegate_unrecognized_ctor_args\",\r\n\t\t\t\t\tMakeFullName()));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Reflection/Types.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek and Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//#define DEBUG_DYNAMIC_CTOR_STUBS\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Compiler.AST;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing System.IO;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Reflection\r\n{\r\n\t#region VersionInfo\r\n\r\n\tpublic struct VersionInfo\r\n\t{\r\n\t\tpublic const int Unconditional = 0;\r\n\t\tpublic const int ReflectedRuntimeActivated = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Versions are numbered starting from zero. Unconditionally declared entities has a single version #0.\r\n\t\t/// Conditionally declared entities have index > 0.\r\n\t\t/// </summary>\r\n\t\tpublic int Index { get { return index; } internal /* PhpType, PhpFunction reflection */ set { index = value; } }\r\n\t\tprivate int index;\r\n\r\n\t\tpublic IDeclaree Next { get { return next; } }\r\n\t\tprivate IDeclaree next;\r\n\r\n\t\tpublic VersionInfo(int index, IDeclaree next)\r\n\t\t{\r\n\t\t\tthis.index = index;\r\n\t\t\tthis.next = next;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DType\r\n\r\n\t/// <summary>\r\n\t/// Represents a type. For generic types, this instance represents the generic template\r\n\t/// all instantiations (represented by DTypeDesc) are sharing.\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"{MakeFullGenericName()}\")]\r\n\tpublic abstract class DType : DMember, IEquatable<DType>\r\n    {\r\n        #region Enum DfsStates\r\n\r\n        protected enum DfsStates\r\n        {\r\n            Initial,\r\n            Entered,\r\n            Done\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        public static readonly DType[]/*!*/ EmptyArray = new DType[0];\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether all base types are definite. Note that the type itself needn't to be definite nor identity definite.\r\n\t\t/// </summary>\r\n\t\tpublic abstract bool IsComplete { get; }\r\n\r\n\t\tpublic abstract bool IsOpen { get; }\r\n\t\tpublic bool IsClosed { get { return !IsOpen; } }\r\n\r\n\t\tpublic virtual bool IsGeneric { get { return false; } }\r\n\r\n\t\tpublic abstract bool ClrVerified { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the type can be definitely emitted in the resulting compulation unit, i.e.\r\n\t\t/// whether it is a completely declared type or it is a reflected type.\r\n\t\t/// \r\n\t\t/// Note that a reflected type is always complete.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsDefinite { get { return IsIdentityDefinite && IsComplete; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if the type is PHP type or a constructed type of PHP generic type.\r\n\t\t/// </summary>\r\n\t\tpublic virtual bool IsPhpType { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if the type is CLR type or a constructed type of CLR type.\r\n\t\t/// </summary>\r\n\t\tpublic virtual bool IsClrType { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> if the type is generic parameter or a constructed type of generic parameter.\r\n\t\t/// </summary>\r\n\t\tpublic virtual bool IsGenericParameter { get { return false; } }\r\n\r\n\t\tpublic DTypeDesc TypeDesc { get { return (DTypeDesc)memberDesc; } }\r\n\r\n\t\tpublic DType Base { get { return (TypeDesc.Base != null) ? TypeDesc.Base.Type : null; } }\r\n\t\tpublic TypeBuilder RealTypeBuilder { get { return (TypeBuilder)RealType; } }\r\n\t\tpublic Type RealType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(TypeDesc.RealType == null || !TypeDesc.RealType.IsGenericType || TypeDesc.RealType.IsGenericTypeDefinition\r\n\t\t\t\t  || TypeDesc is ConstructedTypeDesc, \"The DType (except for ConstructedType) shouldn't represent generic type instantiations\");\r\n\t\t\t\treturn TypeDesc.RealType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic bool IsInterface { get { return TypeDesc.IsInterface; } }\r\n\t\tpublic bool IsValueType { get { return TypeDesc.IsValueType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Abstract methods and properties (declared or inherited) not implemented by the type.\r\n\t\t/// Computed lazily during full analysis.\r\n\t\t/// </summary>\r\n\t\tinternal DMemberRef[] AllAbstracts { get { return allAbstracts; } }\r\n\t\tinternal /* protected */ DMemberRef[] allAbstracts = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets constructor of this type (if any).\r\n\t\t/// </summary>\r\n\t\tpublic virtual KnownRoutine Constructor { get { return null; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether this type exposes a public parameterless constructor.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasDefaultConstructor\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tKnownRoutine ctor = GetConstructor();\r\n\t\t\t\tif (ctor == null) return true;\r\n\r\n\t\t\t\t// PHP constructor\r\n\t\t\t\tPhpRoutine php_routine = ctor as PhpRoutine;\r\n\t\t\t\tif (php_routine != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn (php_routine.IsPublic && php_routine.Signature.MandatoryParamCount == 0);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// CLR constructor\r\n\t\t\t\t\tClrMethod clr_method = (ClrMethod)ctor;\r\n\t\t\t\t\treturn (clr_method.HasParameterlessOverload && clr_method.Overloads[0].Method.IsPublic);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B>, if the type defines a custom attribute class.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsCustomAttributeType\r\n\t\t{\r\n\t\t\tget { return TypeDesc.IsSubclassOf(DTypeDesc.AttributeTypeDesc) && !IsGeneric && !(this is ConstructedType); }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Known types.\r\n\t\t/// </summary>\r\n\t\tprotected DType(DTypeDesc/*!*/ typeDesc)\r\n\t\t\t: base(typeDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeDesc != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For unknown types and generic type parameters.\r\n\t\t/// </summary>\r\n\t\tprotected DType(DTypeDesc typeDesc, string/*!*/ fullName)\r\n\t\t\t: base(typeDesc, fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullName != null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Lookup\r\n\r\n\t\tpublic virtual T GetDeclaredMethod<T>(Name methodName) where T : KnownRoutine\r\n\t\t{\r\n\t\t\tDebug.Assert(!IsUnknown);\r\n\r\n\t\t\tDRoutineDesc desc;\r\n\t\t\tif (TypeDesc.Methods.TryGetValue(methodName, out desc))\r\n\t\t\t\treturn (T)desc.Member;\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic virtual T GetDeclaredProperty<T>(VariableName propertyName) where T : KnownProperty\r\n\t\t{\r\n\t\t\tDebug.Assert(!IsUnknown);\r\n\r\n\t\t\tDPropertyDesc desc;\r\n\t\t\tif (TypeDesc.Properties.TryGetValue(propertyName, out desc))\r\n\t\t\t\treturn (T)desc.Member;\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic GetMemberResult GetMethod(Name methodName, PhpType context, out DRoutine routine)\r\n\t\t{\r\n\t\t\tDRoutineDesc desc;\r\n\t\t\tGetMemberResult result;\r\n\r\n\t\t\tresult = TypeDesc.GetMethod(methodName, (context == null ? null : context.TypeDesc), out desc);\r\n\r\n\t\t\tif (desc == null) routine = null;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\troutine = desc.Routine;\r\n\t\t\t\tif (routine == null && result == GetMemberResult.OK) result = GetMemberResult.NotFound;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic GetMemberResult GetProperty(VariableName propertyName, PhpType context, out DProperty property)\r\n\t\t{\r\n\t\t\tDPropertyDesc desc;\r\n\t\t\tGetMemberResult result;\r\n\r\n\t\t\tresult = TypeDesc.GetProperty(propertyName, (context == null ? null : context.TypeDesc), out desc);\r\n\r\n\t\t\tif (desc == null) property = null;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tproperty = desc.Property;\r\n\t\t\t\tif (property == null && result == GetMemberResult.OK) result = GetMemberResult.NotFound;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic GetMemberResult GetConstant(VariableName constantName, PhpType context, out ClassConstant constant)\r\n\t\t{\r\n\t\t\tDConstantDesc desc;\r\n\t\t\tGetMemberResult result;\r\n\r\n\t\t\tresult = TypeDesc.GetConstant(constantName, (context == null ? null : context.TypeDesc), out desc);\r\n\r\n\t\t\tif (desc == null) constant = null;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tconstant = desc.ClassConstant;\r\n\t\t\t\tif (constant == null && result == GetMemberResult.OK) result = GetMemberResult.NotFound;\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a <see cref=\"DRoutine\"/> representing the constructor effective for this class\r\n\t\t/// or <B>null</B> if there is no constructor.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The constructor or <B>null</B>.</returns>\r\n\t\tpublic abstract KnownRoutine GetConstructor();\r\n\r\n\t\tpublic GetMemberResult GetConstructor(PhpType context, out KnownRoutine constructor)\r\n\t\t{\r\n\t\t\tconstructor = GetConstructor();\r\n\t\t\tif (constructor == null) return GetMemberResult.NotFound;\r\n\r\n\t\t\t// check visibility\r\n\t\t\tswitch (constructor.Visibility)\r\n\t\t\t{\r\n\t\t\t\tcase PhpMemberAttributes.Private:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (context == null || !constructor.DeclaringType.Equals(context))\r\n\t\t\t\t\t\t\treturn GetMemberResult.BadVisibility;\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase PhpMemberAttributes.Protected:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (context == null || !constructor.DeclaringType.IsRelatedTo(context))\r\n\t\t\t\t\t\t\treturn GetMemberResult.BadVisibility;\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tcase PhpMemberAttributes.Public:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn GetMemberResult.OK;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Enumeration\r\n\r\n\t\tpublic IEnumerable<T>/*!*/ GetMethods<T>()\r\n\t\t\twhere T : DRoutine\r\n\t\t{\r\n\t\t\tforeach (DRoutineDesc desc in TypeDesc.Methods.Values)\r\n\t\t\t\tyield return (T)desc.Routine;\r\n\t\t}\r\n\r\n\t\tpublic IEnumerable<T>/*!*/ GetProperties<T>()\r\n\t\t\twhere T : DProperty\r\n\t\t{\r\n\t\t\tforeach (DPropertyDesc desc in TypeDesc.Properties.Values)\r\n\t\t\t\tyield return (T)desc.Property;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: MakeConstructedType, AnalyzeInheritance, ResolveAbstractOverrides\r\n\r\n\t\tinternal virtual DType/*!*/ MakeConstructedType(Analyzer/*!*/ analyzer, DTypeDesc[]/*!*/ arguments, Text.Span position)\r\n\t\t{\r\n\t\t\tif (arguments.Length > 0)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(!(this is PrimitiveType) && !(this is ConstructedType) && !(this is GlobalType), \"Prevented by grammar\");\r\n\r\n\t\t\t\t// constructed type with unknown generic type:\r\n\t\t\t\treturn analyzer.CreateConstructedType(this.TypeDesc, arguments, arguments.Length);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Analyzes inheritance properties of the PHP types and constructed types being declared in the current compilation.\r\n\t\t/// The properties being analyzed primarily include the definiteness of the type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// The constructed types themselves can't get the analysis into a loop as they form a DAG structure\r\n\t\t/// (grammar defines a tree structure and unifying the same constructed types results in the DAG).\r\n\t\t/// However, the completeness of a constructed type depends on the completeness of the components -\r\n\t\t/// the generic type and all the type arguments. Since a polymorphic recursion can take place (e.g. B{T} extends A{B{T}}),\r\n\t\t/// we need to employ minimal fixpoint algorithm to determine the type completeness.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\t\r\n\t\tinternal void AnalyzeInheritance(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDebug.Assert(errors != null);\r\n\r\n\t\t\tList<DType> worklist = null;\r\n\r\n\t\t\tthis.AnalyzeInheritance(errors, ref worklist, null, null, 0, 0);\r\n\r\n\t\t\twhile (worklist != null && worklist.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tDType type = worklist[worklist.Count - 1];\r\n\t\t\t\tworklist.RemoveAt(worklist.Count - 1);\r\n\t\t\t\ttype.AnalyzeInheritance(errors, ref worklist, null, null, -1, -1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// If <paramref name=\"dfsDepth\"/> is non-negative the method performs DFS on the graph of PHP types and constructed types, \r\n\t\t/// going to the depth recursively adding the type being analyzed to the <paramref name=\"mfpWorklist\"/> if it closes a loop.\r\n\t\t/// It also adds the <paramref name=\"dfsPredecessor\"/> into its list of DFS predecessors (if non-null).\r\n\t\t/// The <paramref name=\"phpPredecessor\"/> tracks the last DFS predecessor that was PhpType (not constructed).\r\n\t\t/// </para>\r\n\t\t/// \r\n\t\t/// <para>\r\n\t\t/// Terminology: \r\n\t\t///   - \"inheritance edge\" is an edge going from a type to its immediate base type (class or interface)\r\n\t\t///   - \"constructed edge\" is an edge going from a constructed type to a generic argument\r\n\t\t///   - \"generic edge\" is an edge going from a constructed type to the generic type\r\n\t\t/// </para>\r\n\t\t/// \r\n\t\t/// <para>\r\n\t\t/// During the DFS, <paramref name=\"dfsDepth\"/> records the current depth in the DFS tree.\r\n\t\t/// <paramref name=\"inheritanceDepth\"/> records the length of a path from the current type to the first node of a constructed edge\r\n\t\t/// (the path therefore comprises of inheritance and generic edges). \r\n\t\t/// \r\n\t\t/// The DFS depth is stored on PhpTypes and is used to discover circular inheriting among inherited types. \r\n\t\t/// When a backward edge is discovered and the target type (which must be either \r\n\t\t/// a PhpType or a ConstructedType, considering the generic type in the latter case) the DFS depth difference between \r\n\t\t/// the target type and the current type is calculated. If it is less than the current inheritance depth then there \r\n\t\t/// is a loop comprising of inheritance edges only (which is an error).\r\n\t\t/// \r\n\t\t/// NOTE: It suffice to store the DFS depth only on PhpTypes (in <see cref=\"PhpTypeBuilder.InheritanceAnalysisDfsDepth\"/>).\r\n\t\t/// Depth comparison in constructed type compares the inheritance depth of the generic type with the difference of the \r\n\t\t/// DFS depths minus one -- as if the backward edge pointed directly to the generic type.\r\n\t\t/// </para>\r\n\t\t/// \r\n\t\t/// <para>\r\n\t\t/// If <paramref name=\"dfsDepth\"/> is -1 the method only updates the properties whose procesing requires MFP and \r\n\t\t/// adds the types listed in the DFS predecessors list to the worklist if any of these properties changed.\r\n\t\t/// </para>\r\n\t\t/// \r\n\t\t/// <para>\r\n\t\t/// The lists of DFS predecessors are cleaned up later during the DType clean-up (TODO: clean the builders as well).\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tinternal virtual void AnalyzeInheritance(ErrorSink/*!*/ errors, ref List<DType> mfpWorklist, DType dfsPredecessor, PhpType phpPredecessor,\r\n\t\t\tint dfsDepth, int inheritanceDepth)\r\n\t\t{\r\n\t\t\t// overridden by PhpType and ConstructedType\r\n\t\t}\r\n\r\n\t\tinternal virtual void GetInheritanceProperties(out bool extendsClrType, out DType/*!*/ hierarchyRoot)\r\n\t\t{\r\n\t\t\tif (Base != null)\r\n\t\t\t{\r\n\t\t\t\tBase.GetInheritanceProperties(out extendsClrType, out hierarchyRoot);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\textendsClrType = this.IsClrType;\r\n\t\t\t\thierarchyRoot = this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For each method M, finds out the method that is overridden by the method M as well as all interface methods\r\n\t\t/// that are implemented by the method M.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Must be called after member-analysis as all types and their members have to be known.\r\n\t\t/// Assumes that the inheritance hierarchy is free of circular dependencies.\r\n\t\t/// </remarks>\r\n        /// <param name=\"errors\">Error sink, can be null is you don't care.</param>\r\n        internal DMemberRef[]/*!!*/ ResolveAbstractOverrides(ErrorSink errors)\r\n\t\t{\r\n\t\t\t// already resolved:\r\n\t\t\tif (allAbstracts != null)\r\n\t\t\t\treturn allAbstracts;\r\n\r\n\t\t\tif (!IsDefinite || ClrVerified && !IsAbstract)\r\n\t\t\t\treturn allAbstracts = DMemberRef.EmptyArray;\r\n\r\n\t\t\t// all inherited abstract methods are surely overridden (either by a abstract or non-abstract method):\r\n\t\t\tDMemberRef[] inherited_abstracts;\r\n\r\n\t\t\t// resolve overrides on the base class (if exists and is definite):\r\n\t\t\tif (Base != null)\r\n\t\t\t\tinherited_abstracts = Base.ResolveAbstractOverrides(null);\r\n\t\t\telse\r\n\t\t\t\tinherited_abstracts = DMemberRef.EmptyArray;\r\n\r\n\t\t\t// in the following, the array of inherited abstract members is copied, \r\n\t\t\t// members implemented by this type nulled in the copy,\r\n\t\t\t// and unimplemented members from interfaces and declared abstract methods are added; \r\n\t\t\t// if there remain some nulls, the array is trimmed:\r\n\r\n\t\t\tDMemberRef[] abstracts;\r\n\r\n\t\t\tif (inherited_abstracts.Length > 0)\r\n\t\t\t\tabstracts = (DMemberRef[])inherited_abstracts.Clone();\r\n\t\t\telse\r\n\t\t\t\tabstracts = DMemberRef.EmptyArray;\r\n\r\n\t\t\t// filter inherited members implemented in this type:\r\n\t\t\tint nulled = abstracts.Length;\r\n\t\t\tint remains = abstracts.Length;\r\n\t\t\tfor (int i = 0; i < inherited_abstracts.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tbool in_supertype = false;\r\n\t\t\t\tDMemberRef implementation = inherited_abstracts[i].Member.GetImplementationInSuperTypes(this, false, ref in_supertype);\r\n\r\n\t\t\t\tif (implementation != null)\r\n\t\t\t\t{\r\n\t\t\t\t\timplementation.Member.AddAbstractOverride(inherited_abstracts[i]);\r\n\r\n\t\t\t\t\tif (nulled == abstracts.Length) nulled = i;\r\n\t\t\t\t\tabstracts[i] = null;\r\n\t\t\t\t\tremains--;\r\n\r\n                    // check for implementation compatibility\r\n                    // implementation.Member must be able to override inherited_abstracts[i].Member\r\n                    if (errors != null && this is PhpType && inherited_abstracts[i].Member is DRoutine)\r\n                    {\r\n                        // implementation\r\n                        DRoutine droutine = implementation.Member as DRoutine;\r\n                        Debug.Assert(droutine != null);\r\n\r\n                        RoutineSignature rsignature = droutine.GetSignature(0);\r\n                        \r\n                        // Base\r\n                        DRoutine declaringRoutine = (DRoutine)inherited_abstracts[i].Member;\r\n                        RoutineSignature declaringSignature = declaringRoutine.GetSignature(0);\r\n\r\n                        // check if it's a valid override\r\n                        if (!rsignature.CanOverride(declaringSignature))\r\n                            droutine.ReportMethodNotCompatible(errors, Base, (PhpType)this);\r\n                    }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// nulled is the first nulled item of the inherited_abstracts array or its Length //\r\n\r\n\t\t\t// TODO: move interface scanning to a virtual method\r\n\r\n\t\t\tConstructedType cted = this as ConstructedType;\r\n\t\t\tDType type = (cted != null) ? cted.GenericType.Type : this;\r\n\r\n\t\t\t// add unimplemented interface methods:\r\n\t\t\tPhpType php_type = type as PhpType;\r\n\t\t\tif (php_type != null)\r\n\t\t\t{\r\n\t\t\t\tIEnumerable<DTypeDesc> interfaces = (php_type.Builder != null) ? php_type.Builder.BaseInterfaces : (IEnumerable<DTypeDesc>)TypeDesc.Interfaces;\r\n\t\t\t\tforeach (DTypeDesc iface_desc in interfaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iface_desc.Type.IsDefinite)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDMemberRef[] interface_abstracts = iface_desc.Type.ResolveAbstractOverrides(null);\r\n\r\n\t\t\t\t\t\tforeach (DMemberRef abstract_declaration in interface_abstracts)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool in_supertype = false;\r\n\t\t\t\t\t\t\tDMemberRef implementation = abstract_declaration.Member.GetImplementationInSuperTypes(this, true, ref in_supertype);\r\n\r\n\t\t\t\t\t\t\tif (implementation != null && !in_supertype)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\timplementation.Member.AddAbstractOverride(abstract_declaration);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse if (in_supertype)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t// we need to add a ghost implementation:\r\n                                if (php_type.Builder != null)\r\n\t\t\t\t\t\t\t\t    this.AddGhostImplementation(abstract_declaration, implementation);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnulled = ArrayUtils.IndexOfNull(ref abstracts, nulled);\r\n\t\t\t\t\t\t\t\tabstracts[nulled] = abstract_declaration;\r\n\t\t\t\t\t\t\t\tremains++;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforeach (DTypeDesc iface_desc in TypeDesc.Interfaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tInterfaceMapping real_mapping = type.RealType.GetInterfaceMap(iface_desc.RealType);\r\n\r\n\t\t\t\t\tfor (int i = 0; i < real_mapping.TargetMethods.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (real_mapping.TargetMethods[i] == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// unimplemented interfaces method:\r\n\t\t\t\t\t\t\tnulled = ArrayUtils.IndexOfNull(ref abstracts, nulled);\r\n\r\n\t\t\t\t\t\t\tDRoutineDesc abstract_method_desc = iface_desc.GetMethod(new Name(real_mapping.InterfaceMethods[i].Name));\r\n\t\t\t\t\t\t\tDebug.Assert(abstract_method_desc != null);\r\n\r\n\t\t\t\t\t\t\tabstracts[nulled] = new DMemberRef(abstract_method_desc.Member, iface_desc.Type);\r\n\t\t\t\t\t\t\tremains++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// add declared abstract methods:\r\n\t\t\tforeach (KnownRoutine declared_method in GetMethods<KnownRoutine>())\r\n\t\t\t{\r\n\t\t\t\tif (declared_method.IsAbstract)\r\n\t\t\t\t{\r\n\t\t\t\t\tnulled = ArrayUtils.IndexOfNull(ref abstracts, nulled);\r\n\t\t\t\t\tabstracts[nulled] = new DMemberRef(declared_method, this);\r\n\t\t\t\t\tremains++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// add declared abstract properties:\r\n\t\t\tforeach (KnownProperty declared_property in GetProperties<KnownProperty>())\r\n\t\t\t{\r\n\t\t\t\tif (declared_property.IsAbstract)\r\n\t\t\t\t{\r\n\t\t\t\t\tnulled = ArrayUtils.IndexOfNull(ref abstracts, nulled);\r\n\t\t\t\t\tabstracts[nulled] = new DMemberRef(declared_property, this);\r\n\t\t\t\t\tremains++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (remains < abstracts.Length)\r\n\t\t\t{\r\n\t\t\t\tif (remains == 0)\r\n\t\t\t\t\tallAbstracts = DMemberRef.EmptyArray;\r\n\t\t\t\telse\r\n\t\t\t\t\tallAbstracts = ArrayUtils.Filter(abstracts, new DMemberRef[remains], null);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tallAbstracts = abstracts;\r\n\r\n            allAbstracts = ArrayUtils.EnsureUnique(allAbstracts);\r\n\r\n\t\t\tDebugDumpAllAbstracts();\r\n\r\n\t\t\treturn allAbstracts;\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tprivate void DebugDumpAllAbstracts()\r\n\t\t{\r\n\t\t\tDebug.WriteLine(\"F-ANALYSIS\", \"Type '{0}': abstracts = {{{1}}}\", this.FullName,\r\n\t\t\t\tArrayUtils.ToList(allAbstracts, delegate(StringBuilder sb, DMemberRef m)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(m.Type.MakeFullGenericName());\r\n\t\t\t\t\tsb.Append(\"::\");\r\n\t\t\t\t\tsb.Append(m.Member.FullName);\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tprivate static void GetDeclaredAbstracts(DType/*!*/ type, List<DMemberRef>/*!*/ abstracts)\r\n\t\t{\r\n\t\t\tforeach (KnownRoutine declared_method in type.GetMethods<KnownRoutine>())\r\n\t\t\t{\r\n\t\t\t\tif (declared_method.IsAbstract)\r\n\t\t\t\t\tabstracts.Add(new DMemberRef(declared_method, type));\r\n\t\t\t}\r\n\r\n\t\t\tforeach (KnownProperty declared_property in type.GetProperties<KnownProperty>())\r\n\t\t\t{\r\n\t\t\t\tif (declared_property.IsAbstract)\r\n\t\t\t\t\tabstracts.Add(new DMemberRef(declared_property, type));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal virtual void AddGhostImplementation(DMemberRef/*!*/ abstractMember, DMemberRef/*!*/ implementation)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines real builders neccessary to reference the type in the IL and, recursively, \r\n\t\t/// all the depending real builders.\r\n\t\t/// Idempotent operation.\r\n\t\t/// </summary>\r\n\t\tinternal virtual void DefineBuilders()\r\n\t\t{\r\n\t\t\t// nop\r\n\t\t}\r\n\r\n\t\tinternal abstract PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck);\r\n\r\n\t\tinternal abstract void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType);\r\n\t\t\r\n\t\tinternal abstract void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType);\r\n\r\n\t\tinternal abstract void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits invocation of this type's constructor from within a derived type's constructor.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"il\"><see cref=\"ILEmitter\"/>.</param>\r\n\t\t/// <param name=\"derivedType\">The derived type in whose (<see cref=\"ScriptContext\"/>, <B>bool</B>)\r\n\t\t/// constructor the emission takes place.</param>\r\n\t\t/// <param name=\"constructedType\"></param>\r\n\t\tinternal virtual void EmitInvokeConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Analogous to <see cref=\"EmitInvokeConstructor\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal virtual void EmitInvokeDeserializationConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType,\r\n\t\t\tConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t}\r\n#endif\r\n\r\n        internal abstract DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a real method builder on the type. \r\n\t\t/// Unifies creation of global, type and dynamic methods.\r\n\t\t/// Returns either <see cref=\"MethodBuilder\"/> or <see cref=\"DynamicMethod\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic virtual MethodInfo/*!*/ DefineRealMethod(string/*!*/ name, MethodAttributes attributes,\r\n\t\t  Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"This type doesn't support defining methods.\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic GenericParameter/*!*/ GetGenericParameter(int i)\r\n\t\t{\r\n\t\t\treturn TypeDesc.GenericParameters[i].GenericParameter;\r\n\t\t}\r\n\r\n\t\tpublic GenericParameter GetGenericParameter(Name name)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < TypeDesc.GenericParameters.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tGenericParameter param = GetGenericParameter(i);\r\n\t\t\t\tif (param.Name.Equals(name))\r\n\t\t\t\t\treturn param;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets attribute usage information for this attribute type (if applicable). \r\n\t\t/// </summary>\r\n\t\tpublic virtual AttributeUsageAttribute GetCustomAttributeUsage(out bool isDefinite)\r\n\t\t{\r\n\t\t\tisDefinite = true;\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal static MethodInfo/*!*/ MakeConstructed(MethodInfo/*!*/ info, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (constructedType != null)\r\n\t\t\t{\r\n\t\t\t\tif (constructedType.IsOpen || constructedType.IsPhpType && ((PhpType)constructedType.GenericType.Type).Declaration != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn TypeBuilder.GetMethod(constructedType.RealType, info);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// this is workaround TODO !!!\r\n\t\t\t\t\treturn constructedType.RealType.GetMethod(info.Name, BindingFlags.DeclaredOnly |\r\n\t\t\t\t\t\tBindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,\r\n\t\t\t\t\t\tnull, ReflectionUtils.GetParameterTypes(info.GetParameters()), null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn info;\r\n\t\t}\r\n\r\n\t\tinternal static FieldInfo/*!*/ MakeConstructed(FieldInfo/*!*/ info, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (constructedType != null)\r\n\t\t\t{\r\n\t\t\t\tif (constructedType.IsOpen || constructedType.IsPhpType && ((PhpType)constructedType.GenericType.Type).Declaration != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn TypeBuilder.GetField(constructedType.RealType, info);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// this is workaround TODO !!!\r\n\t\t\t\t\treturn constructedType.RealType.GetField(info.Name, BindingFlags.DeclaredOnly |\r\n\t\t\t\t\t\tBindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn info;\r\n\t\t}\r\n\r\n\t\tinternal static ConstructorInfo/*!*/ MakeConstructed(ConstructorInfo/*!*/ info, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (constructedType != null)\r\n\t\t\t{\r\n\t\t\t\tif (constructedType.IsOpen || constructedType.IsPhpType && ((PhpType)constructedType.GenericType.Type).Declaration != null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn TypeBuilder.GetConstructor(constructedType.RealType, info);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// this is workaround TODO !!!\r\n\t\t\t\t\treturn constructedType.RealType.GetConstructor(BindingFlags.DeclaredOnly |\r\n\t\t\t\t\t\tBindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,\r\n\t\t\t\t\t\tnull, ReflectionUtils.GetParameterTypes(info.GetParameters()), null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn info;\r\n\t\t}\r\n\r\n\t\tpublic bool IsSubclassOf(DType/*!*/ other)\r\n\t\t{\r\n\t\t\treturn TypeDesc.IsSubclassOf(other.TypeDesc);\r\n\t\t}\r\n\r\n\t\tpublic bool IsAssignableFrom(DType/*!*/ other)\r\n\t\t{\r\n\t\t\treturn TypeDesc.IsAssignableFrom(other.TypeDesc);\r\n\t\t}\r\n\r\n\t\tpublic bool IsRelatedTo(DType/*!*/ other)\r\n\t\t{\r\n\t\t\treturn TypeDesc.IsRelatedTo(other.TypeDesc);\r\n\t\t}\r\n\r\n\t\tpublic virtual string MakeFullGenericName()\r\n\t\t{\r\n\t\t\treturn this.FullName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<DType> Members\r\n\r\n\t\tpublic abstract bool Equals(DType other);\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tDType other = obj as DType;\r\n\t\t\treturn (other == null ? false : Equals(other));\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn base.GetHashCode();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region UnknownType\r\n\r\n\tpublic sealed class UnknownType : DType\r\n\t{\r\n\t\tpublic static readonly UnknownType UnknownSelf = new UnknownType(Name.SelfClassName.Value);\r\n        public static readonly UnknownType UnknownStatic = new UnknownType(Name.StaticClassName.Value);\r\n\t\tpublic static readonly UnknownType UnknownParent = new UnknownType(Name.ParentClassName.Value);\r\n\r\n\t\tpublic override bool IsComplete { get { return false; } }\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\t\tpublic override bool ClrVerified { get { return false; } }\r\n\r\n\t\tpublic override KnownRoutine Constructor { get { return null; } }\r\n\r\n        /// <summary>\r\n        /// Optionally a <see cref=\"TypeRef\"/> instead of full name.\r\n        /// </summary>\r\n        private readonly TypeRef typeRef;\r\n\r\n        public UnknownType(string/*!*/ fullName)\r\n            : this(fullName, null)\r\n        {\r\n        }\r\n\r\n        public UnknownType(string/*!*/ fullName, TypeRef typeRef)\r\n            : base(new UnknownTypeDesc()/*use own instance here, not a singleton*/, fullName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullName != null);\r\n            this.typeRef = typeRef;\r\n\t\t}\r\n\r\n        public override string GetFullName()\r\n\t\t{\r\n\t\t\tDebug.Fail(\"full name is set by ctor\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\treturn null; // default constructor (unknown)\r\n\t\t}\r\n\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructor.IsUnknown);\r\n            codeGenerator.EmitNewOperator(null, typeRef, (constructedType != null) ? constructedType : (DType)this, callSignature);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n            codeGenerator.EmitInstanceOfOperator(null, typeRef, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n            codeGenerator.EmitTypeOfOperator(null, typeRef, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n            if (typeRef != null)\r\n                typeRef.EmitLoadTypeDesc(codeGenerator, flags);\r\n            else\r\n\t\t\t    codeGenerator.EmitLoadTypeDescOperator(this.FullName, null, flags);\r\n\t\t}\r\n\r\n\t\tinternal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\treturn new DTypeSpec(FullName, referringUnit.NamingContextFieldBuilder,\r\n\t\t\t\treferringUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.RealModuleBuilder);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override bool Equals(DType other)\r\n\t\t{\r\n\t\t\tif (ReferenceEquals(this, other)) return true;\r\n\t\t\tif (other == null) return false;\r\n\r\n            return String.Compare(this.FullName, other.FullName, StringComparison.CurrentCultureIgnoreCase) == 0;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region KnownType\r\n\r\n\t[DebuggerDisplay(\"{FullName}\")]\r\n\tpublic abstract class KnownType : DType\r\n\t{\r\n\t\tpublic QualifiedName QualifiedName { get { return qualifiedName; } }\r\n\t\tprotected readonly QualifiedName qualifiedName;\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprotected KnownType(DTypeDesc/*!*/ typeDesc, QualifiedName qualifiedName)\r\n\t\t\t: base(typeDesc)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeDesc != null);\r\n\r\n\t\t\tthis.qualifiedName = qualifiedName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn qualifiedName.ToString();\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(DType other)\r\n\t\t{\r\n\t\t\tif (ReferenceEquals(this, other)) return true;\r\n\t\t\tif (other == null) return false;\r\n\t\t\tif (other.IsUnknown) return other.Equals(this);\r\n\r\n\t\t\treturn ReferenceEquals(this.TypeDesc, other.TypeDesc);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GlobalType\r\n\r\n\tpublic sealed class GlobalType : KnownType\r\n\t{\r\n\t\tpublic override bool IsComplete { get { return true; } }\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\t\tpublic override bool ClrVerified { get { return true; } }\r\n\r\n\t\tpublic IPhpModuleBuilder DeclaringModuleBuilder { get { return (IPhpModuleBuilder)TypeDesc.DeclaringModule; } }\r\n\t\tpublic ModuleBuilder RealModuleBuilder { get { return DeclaringModuleBuilder.AssemblyBuilder.RealModuleBuilder; } }\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic GlobalType(DModule/*!*/ declaringModule)\r\n\t\t\t: base(new GlobalTypeDesc(declaringModule), QualifiedName.Global)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tpublic override MethodInfo/*!*/ DefineRealMethod(string/*!*/ name, MethodAttributes attributes,\r\n\t\t  Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\treturn DeclaringModuleBuilder.DefineRealFunction(name, attributes, returnType, parameterTypes);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region N/A\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\tDebug.Fail(null);\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tDebug.Fail(\"N/A\");\r\n\t\t\tthrow null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PrimitiveType\r\n\r\n\tpublic sealed class PrimitiveType : KnownType\r\n\t{\r\n\t\t#region Statiscs\r\n\r\n\t\tpublic static readonly PrimitiveType/*!*/ Boolean;\r\n\t\tpublic static readonly PrimitiveType/*!*/ Integer;\r\n\t\tpublic static readonly PrimitiveType/*!*/ LongInteger;\r\n\t\tpublic static readonly PrimitiveType/*!*/ Double;\r\n\t\tpublic static readonly PrimitiveType/*!*/ String;\r\n\t\tpublic static readonly PrimitiveType/*!*/ Resource;\r\n\t\tpublic static readonly PrimitiveType/*!*/ Array;\r\n\t\tpublic static readonly PrimitiveType/*!*/ Object;\r\n        public static readonly PrimitiveType/*!*/ Callable;\r\n\r\n\t\tstatic PrimitiveType()\r\n\t\t{\r\n\t\t\tif (UnknownModule.RuntimeModule == null) UnknownModule.RuntimeModule = new UnknownModule();\r\n\r\n\t\t\tBoolean = new PrimitiveType(DTypeDesc.BooleanTypeDesc, QualifiedName.Boolean);\r\n\t\t\tInteger = new PrimitiveType(DTypeDesc.IntegerTypeDesc, QualifiedName.Integer);\r\n\t\t\tLongInteger = new PrimitiveType(DTypeDesc.LongIntegerTypeDesc, QualifiedName.LongInteger);\r\n\t\t\tDouble = new PrimitiveType(DTypeDesc.DoubleTypeDesc, QualifiedName.Double);\r\n\t\t\tString = new PrimitiveType(DTypeDesc.StringTypeDesc, QualifiedName.String);\r\n\t\t\tResource = new PrimitiveType(DTypeDesc.ResourceTypeDesc, QualifiedName.Resource);\r\n\t\t\tArray = new PrimitiveType(DTypeDesc.ArrayTypeDesc, QualifiedName.Array);\r\n\t\t\tObject = new PrimitiveType(DTypeDesc.ObjectTypeDesc, QualifiedName.Object);\r\n            Callable = new PrimitiveType(DTypeDesc.CallableTypeDesc, QualifiedName.Callable);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Properties\r\n\r\n\t\tpublic override bool IsComplete { get { return true; } }\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\t\tpublic override bool ClrVerified { get { return true; } }\r\n\r\n\t\tpublic PrimitiveTypeDesc PrimitiveTypeDesc { get { return (PrimitiveTypeDesc)TypeDesc; } }\r\n\t\tpublic PhpTypeCode TypeCode { get { return PrimitiveTypeDesc.TypeCode; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tprivate PrimitiveType(PrimitiveTypeDesc/*!*/ typeDesc, QualifiedName qualifiedName)\r\n\t\t\t: base(typeDesc, qualifiedName)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\t// default ctor:\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal static PrimitiveType GetByTypeCode(PhpTypeCode typeCode)\r\n\t\t{\r\n\t\t\tswitch (typeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: return PrimitiveType.Boolean;\r\n\t\t\t\tcase PhpTypeCode.Integer: return PrimitiveType.Integer;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: return PrimitiveType.LongInteger;\r\n\t\t\t\tcase PhpTypeCode.Double: return PrimitiveType.Double;\r\n\t\t\t\tcase PhpTypeCode.String: return PrimitiveType.String;\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return PrimitiveType.Resource;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return PrimitiveType.Array;\r\n\t\t\t\tcase PhpTypeCode.DObject: return PrimitiveType.Object;\r\n                case PhpTypeCode.PhpCallable: return PrimitiveType.Callable;\r\n\t\t\t\tdefault: return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal static PrimitiveType GetByName(QualifiedName name)\r\n        {\r\n            if (name.IsSimpleName)\r\n                return GetByName(name.Name);\r\n            else\r\n                return null;\r\n        }\r\n\r\n        internal static PrimitiveType GetByName(GenericQualifiedName name)\r\n        {\r\n            if (!name.IsGeneric)\r\n                return GetByName(name.QualifiedName);\r\n            else\r\n                return null;\r\n        }\r\n\r\n        internal static PrimitiveType GetByName(PrimitiveTypeName name)\r\n        {\r\n            Debug.Assert(name.QualifiedName.IsPrimitiveTypeName);\r\n            var result = GetByName(name.QualifiedName.Name);\r\n            Debug.Assert(result != null);\r\n            return result;\r\n        }\r\n\r\n\t\tinternal static PrimitiveType GetByName(Name name)\r\n\t\t{\r\n\t\t\tif (name == QualifiedName.Boolean.Name) return Boolean;\r\n\t\t\tif (name == QualifiedName.Integer.Name) return Integer;\r\n            if (name == QualifiedName.LongInteger.Name) return LongInteger;\r\n\t\t\tif (name == QualifiedName.Double.Name) return Double;\r\n\t\t\tif (name == QualifiedName.String.Name) return String;\r\n            if (name == QualifiedName.Resource.Name) return Resource;\r\n            if (name == QualifiedName.Array.Name) return Array;\r\n            if (name == QualifiedName.Object.Name) return Object;\r\n            if (name == QualifiedName.Callable.Name) return Callable;\r\n            return null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tswitch (TypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean:\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.LongInteger:\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_I8, (long)0);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.Double:\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_R8, (double)0.0);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.PhpResource:\r\n\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.PhpArray:\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpArray.Void);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\til.Emit(OpCodes.Ldstr, \"\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.DObject:\r\n\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, Constructors.StdClass_ScriptContext);\r\n\t\t\t\t\tbreak;\r\n\r\n                case PhpTypeCode.PhpCallable:\r\n                    throw new InvalidOperationException();\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow null;\r\n\t\t\t}\r\n\r\n\t\t\treturn TypeCode;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null, \"primitive types cannot be generic\");\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tswitch (TypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean:\r\n\t\t\t\tcase PhpTypeCode.Integer:\r\n\t\t\t\tcase PhpTypeCode.LongInteger:\r\n\t\t\t\tcase PhpTypeCode.Double:\r\n\t\t\t\t\til.Emit(OpCodes.Isinst, RealType);\r\n\t\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\t\til.Emit(OpCodes.Cgt_Un);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.PhpResource:\r\n\t\t\t\tcase PhpTypeCode.PhpArray:\r\n\t\t\t\t\til.Emit(OpCodes.Isinst, RealType);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.String:\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.IsString);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase PhpTypeCode.DObject:\r\n\t\t\t\t\tif (!codeGenerator.Context.Config.Compiler.ClrSemantics)\r\n\t\t\t\t\t\til.Emit(OpCodes.Isinst, typeof(DObject));\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\til.Emit(OpCodes.Ldc_I4_1); // true; all values are of type System.Object\t\r\n\t\t\t\t\tbreak;\r\n\r\n                case PhpTypeCode.PhpCallable:\r\n                    // LOAD Operators.IsCallable( <stack>, <classcontext>, false)\r\n                    codeGenerator.EmitLoadClassContext();\r\n                    il.Emit(OpCodes.Ldc_I4_0);\r\n                    il.Emit(OpCodes.Call, Methods.Operators.IsCallable);\r\n                    break;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null, \"primitive types cannot be generic\");\r\n\r\n            if (this.TypeCode == PhpTypeCode.PhpCallable)\r\n                throw new InvalidOperationException();\r\n\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\t\t\til.Emit(OpCodes.Ldtoken, this.RealType);\r\n\t\t\til.Emit(OpCodes.Call, Methods.GetTypeFromHandle);\r\n\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_WrapRealObject);\r\n\t\t}\r\n\t\t\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tFieldInfo field;\r\n\r\n\t\t\tswitch (TypeCode)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.Boolean: field = Fields.DTypeDesc.BooleanTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.Integer: field = Fields.DTypeDesc.IntegerTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.LongInteger: field = Fields.DTypeDesc.LongIntegerTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.Double: field = Fields.DTypeDesc.DoubleTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.String: field = Fields.DTypeDesc.StringTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.PhpResource: field = Fields.DTypeDesc.ResourceTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.PhpArray: field = Fields.DTypeDesc.ArrayTypeDesc; break;\r\n\t\t\t\tcase PhpTypeCode.DObject: field = Fields.DTypeDesc.ObjectTypeDesc; break;\r\n                case PhpTypeCode.PhpCallable: throw new InvalidOperationException();\r\n\t\t\t\tdefault: throw null;\r\n\t\t\t}\r\n\r\n\t\t\tcodeGenerator.IL.Emit(OpCodes.Ldsfld, field);\r\n\t\t}\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n            return new DTypeSpec(TypeCode);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n    }\r\n\r\n\t#endregion\r\n\r\n    #region StaticType\r\n\r\n    /// <summary>\r\n    /// Type representing <c>static</c> keyword (late static binding).\r\n    /// Used only during compilation.\r\n    /// </summary>\r\n    public sealed class StaticType : KnownType\r\n    {\r\n        public override bool IsComplete { get { return true; } }\r\n\t\tpublic override bool IsUnknown { get { return true; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\t\tpublic override bool ClrVerified { get { return false; } }\r\n\r\n\t\tpublic override KnownRoutine Constructor { get { return null; } }\r\n\r\n        public static StaticType/*!*/Singleton { get { return _singleton ?? (_singleton = new StaticType()); } }\r\n        private static StaticType _singleton = null;\r\n\r\n        private StaticType()\r\n            : base(new UnknownTypeDesc(), new QualifiedName(Name.StaticClassName))\r\n        {\r\n\t\t}\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n            throw new NotSupportedException();\r\n\t\t}\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\treturn null; // default constructor (unknown)\r\n\t\t}\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructor.IsUnknown);\r\n\t\t\tcodeGenerator.EmitNewOperator(null, null, (DType)this, callSignature);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitInstanceOfOperator(null, null, (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitTypeOfOperator(null, null, (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n            codeGenerator.EmitLoadStaticTypeDesc(flags);\r\n\t\t}\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n            throw new NotSupportedException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region GenericParameter\r\n\r\n    /// <summary>\r\n\t/// Represents a type parameter of a generic type or method.\r\n\t/// Created during pre-analysis.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode, DebuggerDisplay(\"{FullName}\")]\r\n\tpublic sealed class GenericParameter : KnownType\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic new static readonly GenericParameter[] EmptyArray = new GenericParameter[0];\r\n\r\n\t\tpublic override bool IsComplete { get { return false; } }\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsOpen { get { return true; } }\r\n\r\n\t\tpublic override bool ClrVerified { get { return true; } }\r\n\t\tpublic override bool IsGenericParameter { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// The actual identity of the type (the substitute) is not known.\r\n\t\t/// The analyzer cannot reason about it's modifiers, generic parameters nor declared members.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsIdentityDefinite { get { return false; } }\r\n\r\n\t\tpublic GenericParameterDesc/*!*/ GenericParameterDesc { get { return (GenericParameterDesc)TypeDesc; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Valid only if the declaring member is a type whose type builder has been defined.\r\n\t\t/// </summary>\r\n\t\tpublic GenericTypeParameterBuilder RealGenericTypeParameterBuilder\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(declaringMember is PhpType);\r\n\t\t\t\treturn (GenericTypeParameterBuilder)RealType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Valid only if the declaring member is a routine whose builders has already been defined.\r\n\t\t/// </summary>\r\n\t\tpublic ParameterBuilder RealPseudoGenericParameterBuilder\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(declaringMember is PhpRoutine);\r\n\t\t\t\tPhpRoutine routine = (PhpRoutine)declaringMember;\r\n\t\t\t\treturn routine.Builder.ParameterBuilders[routine.FirstPseudoGenericParameterIndex + index];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic Name Name { get { return qualifiedName.Name; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Filled by member analysis (written up).\r\n\t\t/// </summary>\r\n\t\tpublic DType DefaultType\r\n\t\t{\r\n\t\t\tget { return (GenericParameterDesc.DefaultType != null) ? GenericParameterDesc.DefaultType.Type : null; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Index in the parameter list.\r\n\t\t/// </summary>\r\n\t\tpublic int Index { get { return index; } }\r\n\t\tprivate readonly int index;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Declarer: DType or DMethod.\r\n\t\t/// </summary>\r\n\t\tpublic DMember DeclaringMember { get { return declaringMember; } }\r\n\t\tprivate readonly DMember declaringMember;\r\n\r\n\t\tpublic override DType DeclaringType { get { return (PhpType)declaringMember; } }\r\n\t\tpublic PhpRoutine DeclaringRoutine { get { return (PhpRoutine)declaringMember; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by the compiler.\r\n\t\t/// </summary>\r\n\t\tpublic GenericParameter(Name name, int index, DMember/*!*/ declaringMember)\r\n\t\t\t: base(new GenericParameterDesc(), new QualifiedName(name, Name.EmptyNames))\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringMember != null);\r\n\r\n\t\t\tthis.index = index;\r\n\t\t\tthis.declaringMember = declaringMember;\r\n\t\t}\r\n\r\n\t\tinternal void WriteUp(DType defaultType)\r\n\t\t{\r\n\t\t\tthis.GenericParameterDesc.WriteUp((defaultType != null) ? defaultType.TypeDesc : null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B> as the constructor for the type is unknown.\r\n\t\t/// </summary>\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal string GetPseudoArgumentName()\r\n\t\t{\r\n\t\t\treturn \"#\" + FullName;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\t/// <summary>\r\n\t\t/// Define builders for parameters on type.\r\n\t\t/// </summary>\r\n\t\tinternal void DefineBuildersWithinType(GenericTypeParameterBuilder/*!*/ paramBuilder)\r\n\t\t{\r\n\t\t\tTypeDesc.DefineBuilder(paramBuilder);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Define builders for parameters on method.\r\n\t\t/// </summary>\r\n\t\tinternal void DefineBuildersWithinMethod()\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringMember is PhpRoutine);\r\n\t\t\tPhpRoutine routine = (PhpRoutine)declaringMember;\r\n\t\t\tDebug.Assert(routine.Builder != null && routine.ArgFullInfo != null);\r\n\r\n\t\t\tParameterBuilder param_builder;\r\n\r\n\t\t\tint real_index = routine.FirstPseudoGenericParameterIndex + index;\r\n\r\n\t\t\t// define pseudo-generic parameter:\r\n\t\t\troutine.Builder.ParameterBuilders[real_index] = param_builder = ReflectionUtils.DefineParameter(routine.ArgFullInfo,\r\n\t\t\t  (routine.IsStatic ? 1 : 0) + real_index,\r\n\t\t\t  ParameterAttributes.None,\r\n\t\t\t  GetPseudoArgumentName());\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitNewOperator(null, null, (constructedType != null) ? constructedType : (DType)this, callSignature);\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitInstanceOfOperator(null, null, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitTypeOfOperator(null, null, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaringMember is PhpType || declaringMember is PhpRoutine);\r\n\r\n\t\t\tPhpRoutine routine = declaringMember as PhpRoutine;\r\n\t\t\tif (routine != null)\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.IL.Ldarg(((PhpRoutine)declaringMember).FirstPseudoGenericParameterIndex + index);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadTypeDesc(this.RealType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal void SetCustomAttribute(CustomAttributeBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\tif (declaringMember is PhpRoutine)\r\n\t\t\t{\r\n\t\t\t\tRealPseudoGenericParameterBuilder.SetCustomAttribute(builder);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tRealGenericTypeParameterBuilder.SetCustomAttribute(builder);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\treturn new DTypeSpec(this.index, (declaringMember is PhpRoutine) ? MemberTypes.Method : MemberTypes.TypeInfo);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ConstructedType\r\n\r\n\t/// <summary>\r\n\t/// Represents a type constructed from a generic type filling the type parameters.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Compiler creates a single instance per occurrence.\r\n\t/// Shares type-desc with the generic type and has also the same qualified name.\r\n\t/// This sharing transfers the resposibility for member look-up to the generic type (via its type-desc).\r\n\t/// </remarks>\r\n\t[DebuggerDisplay(\"{MakeFullGenericName()}\")]\r\n\tpublic sealed class ConstructedType : DType, IEquatable<ConstructedType>\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructed type is unknown iff its generic type is unknown.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsUnknown { get { return GenericType.IsUnknown; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// To decide whether or not to report an error, it suffice to known whether the generic type is known definitely.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsIdentityDefinite { get { return GenericType.Type.IsIdentityDefinite; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> iff the generic type and all arguments are complete types.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsComplete { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return isComplete; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> iff the generic type or any argument is a open type.\r\n\t\t/// Note that the generic type can be a generic parameter, which is an open type.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsOpen { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return isOpen; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> iff the generic type is a generic parameter.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsGenericParameter { get { return GenericType.Type.IsGenericParameter; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> iff the generic type is a PHP type.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsPhpType { get { return GenericType.Type.IsPhpType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>true</B> iff the generic type is a CLR type.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsClrType { get { return GenericType.Type.IsClrType; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructed type is definite iff the generic type is definite and it is not a generic parameter \r\n\t\t///\t(hence we cannot refer to the members then) and all arguments are definite types.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// We can emit the TypeSpec token to the IL if the constructed type is definite.\r\n\t\t/// The constructed types that are not definite are reconstructed at run-time using type-desc.\r\n\t\t/// </remarks>\r\n\t\tpublic override bool IsDefinite { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return isDefinite; } }\r\n\r\n\t\tpublic override bool ClrVerified { get { return GenericType.Type.ClrVerified; } }\r\n\r\n\t\tprivate bool isOpen;\r\n\t\tprivate bool isComplete;\r\n\t\tprivate bool isDefinite;\r\n\r\n\t\tpublic ConstructedTypeDesc ConstructedTypeDesc { get { return (ConstructedTypeDesc)TypeDesc; } }\r\n\r\n\t\tpublic DTypeDesc/*!*/ GenericType { get { return ConstructedTypeDesc.GenericType; } }\r\n\t\tpublic DTypeDesc[]/*!!*/ Arguments { get { return ConstructedTypeDesc.Arguments; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by the compiler for creation of constructed types during analysis. \r\n\t\t/// </summary>\r\n\t\tinternal ConstructedType(DTypeDesc/*!*/ genericType, DTypeDesc[]/*!!*/ arguments)\r\n\t\t\t: base(new ConstructedTypeDesc(genericType, arguments))\r\n\t\t{\r\n\t\t\tDebug.Assert(genericType != null && arguments != null && arguments.Length > 0);\r\n\r\n\t\t\tthis.inheritanceAnalysisState = DfsStates.Initial;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis\r\n\r\n\t\tprivate DfsStates inheritanceAnalysisState;\r\n\t\tprivate List<DType> dfsPredecessors;\r\n\r\n\t\tinternal void Analyze(Analyzer/*!*/ analyzer)\r\n\t\t{\r\n\t\t\tif (inheritanceAnalysisState != DfsStates.Done)\r\n\t\t\t{\r\n\t\t\t\tAnalyzeInheritance(analyzer.ErrorSink);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void AnalyzeInheritance(ErrorSink/*!*/ errors, ref List<DType> mfpWorklist, DType dfsPredecessor,\r\n\t\t\tPhpType phpPredecessor, int dfsDepth, int inheritanceDepth)\r\n\t\t{\r\n\t\t\tDebug.Assert(errors != null);\r\n\r\n\t\t\tif (dfsDepth >= 0)\r\n\t\t\t{\r\n\t\t\t\tswitch (inheritanceAnalysisState)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase DfsStates.Initial:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tinheritanceAnalysisState = DfsStates.Entered;\r\n\r\n\t\t\t\t\t\t\t// initialize\r\n\t\t\t\t\t\t\tisOpen = false;\r\n\t\t\t\t\t\t\tisComplete = true;\r\n\t\t\t\t\t\t\tisDefinite = true;\r\n\r\n\t\t\t\t\t\t\t// generic edge descend (increase the inheritance depth):\r\n\t\t\t\t\t\t\tGenericType.Type.AnalyzeInheritance(errors, ref mfpWorklist, this, phpPredecessor, dfsDepth + 1, inheritanceDepth + 1);\r\n\r\n\t\t\t\t\t\t\t// constructed edge descend (zero the inheritance depth):\r\n\t\t\t\t\t\t\tforeach (DTypeDesc arg_desc in Arguments)\r\n\t\t\t\t\t\t\t\targ_desc.Type.AnalyzeInheritance(errors, ref mfpWorklist, this, phpPredecessor, dfsDepth + 1, 0);\r\n\r\n\t\t\t\t\t\t\tUpdateInheritanceProperties();\r\n\r\n\t\t\t\t\t\t\tinheritanceAnalysisState = DfsStates.Done;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase DfsStates.Entered:\r\n\t\t\t\t\t\tif (mfpWorklist == null)\r\n\t\t\t\t\t\t\tmfpWorklist = new List<DType>();\r\n\r\n\t\t\t\t\t\t// edge from DFS predecessor to this node closes a loop => add predecessor to the worklist as \r\n\t\t\t\t\t\t// its properties depends on the values that will be computed on this node later:\r\n\t\t\t\t\t\tmfpWorklist.Add(dfsPredecessor);\r\n\r\n\t\t\t\t\t\t// check whether the backward edge closes inheritance loop:\r\n\t\t\t\t\t\tDebug.Assert(GenericType.Type is PhpType, \"A loop can only comprise of PhpTypes and ConstructedTypes\");\r\n\r\n\t\t\t\t\t\tPhpType generic_php_type = (PhpType)this.GenericType.Type;\r\n\r\n\t\t\t\t\t\tDebug.Assert(generic_php_type.Builder != null, \"A loop can only comprise of non-reflected types\");\r\n\t\t\t\t\t\tDebug.Assert(dfsDepth - 2 >= generic_php_type.Builder.InheritanceAnalysisDfsDepth);\r\n\t\t\t\t\t\tDebug.Assert(phpPredecessor != null, \"There has to be some PhpType bellow this constructed type in the tree (at least the generic type)\");\r\n\r\n\t\t\t\t\t\tif ((dfsDepth - 2) - generic_php_type.Builder.InheritanceAnalysisDfsDepth <= inheritanceDepth)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// fatal error - circular inheritance (the further analysis assumes non-circularity):\r\n\t\t\t\t\t\t\terrors.Add((generic_php_type.IsInterface) ? FatalErrors.CircularBaseInterfaceDependency : FatalErrors.CircularBaseClassDependency,\r\n\t\t\t\t\t\t\t\tgeneric_php_type.Declaration.SourceUnit, generic_php_type.Declaration.Span, phpPredecessor.FullName,\r\n\t\t\t\t\t\t\t\tgeneric_php_type.FullName);\r\n\t\t\t\t\t\t\tphpPredecessor.ReportError(errors, FatalErrors.RelatedLocation);\r\n\r\n\t\t\t\t\t\t\tthrow new CompilerException();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase DfsStates.Done:\r\n\t\t\t\t\t\t// do nothing, just add predecessor ...\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// add predecessor regardless of the DFS state of the current node:\r\n\t\t\t\tif (dfsPredecessor != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (dfsPredecessors == null)\r\n\t\t\t\t\t\tdfsPredecessors = new List<DType>();\r\n\r\n\t\t\t\t\tdfsPredecessors.Add(dfsPredecessor);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(mfpWorklist != null);\r\n\r\n\t\t\t\t// save current state of MFP properties:\r\n\t\t\t\tbool was_complete = this.isComplete;\r\n\r\n\t\t\t\t// recalculate the properties:\r\n\t\t\t\tUpdateInheritanceProperties();\r\n\r\n\t\t\t\t// check changes in MFP properties and queue the influenced nodes for MFP processing:\r\n\t\t\t\tif (this.isComplete != was_complete && dfsPredecessors != null)\r\n\t\t\t\t\tmfpWorklist.AddRange(dfsPredecessors);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void UpdateInheritanceProperties()\r\n\t\t{\r\n\t\t\tDType generic_type = GenericType.Type;\r\n\r\n\t\t\t// generic type can be open if it is a generic parameter \r\n\t\t\t// (which is allowed unless occurring in extends/implements clause);\r\n\t\t\tthis.isOpen |= generic_type.IsGenericParameter;\r\n\t\t\tthis.isComplete &= generic_type.IsComplete;\r\n\t\t\tthis.isDefinite &= generic_type.IsDefinite && !generic_type.IsGenericParameter;\r\n\r\n\t\t\tforeach (DTypeDesc arg_desc in Arguments)\r\n\t\t\t{\r\n\t\t\t\tDType arg = arg_desc.Type;\r\n\r\n\t\t\t\tthis.isOpen |= arg.IsOpen;\r\n\r\n\t\t\t\t// we cannot use arg.IsGenericParameter as only non-constructed generic parameters should be treated definite:\r\n\t\t\t\tGenericParameter gp = arg as GenericParameter;\r\n\r\n\t\t\t\tif (gp != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// method generic params are indefinite, type generic params are definite:\r\n\t\t\t\t\tthis.isDefinite &= gp.DeclaringMember is PhpType;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.isComplete &= arg.IsComplete;\r\n\t\t\t\t\tthis.isDefinite &= arg.IsDefinite;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void GetInheritanceProperties(out bool extendsClrType, out DType/*!*/ hierarchyRoot)\r\n\t\t{\r\n\t\t\tif (Base != null)\r\n\t\t\t{\r\n\t\t\t\tBase.GetInheritanceProperties(out extendsClrType, out hierarchyRoot);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\textendsClrType = this.GenericType.Type.IsClrType;\r\n\t\t\t\thierarchyRoot = this.GenericType.Type;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void AddGhostImplementation(DMemberRef/*!*/ abstractMember, DMemberRef/*!*/ implementation)\r\n\t\t{\r\n\t\t\tGenericType.Type.AddGhostImplementation(abstractMember, implementation);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override string GetFullName()\r\n\t\t{\r\n\t\t\treturn GenericType.Type.FullName;\r\n\t\t}\r\n\r\n\t\tpublic override string MakeFullGenericName()\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder(GenericType.Type.FullName);\r\n\t\t\tresult.Append(\"<:\");\r\n\r\n\t\t\tfor (int i = 0; i < Arguments.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i > 0) result.Append(',');\r\n\t\t\t\tresult.Append(Arguments[i].Type.MakeFullGenericName());\r\n\t\t\t}\r\n\r\n\t\t\tresult.Append(\":>\");\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\tpublic Type/*!*/ MapRealType(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (type.IsGenericParameter &&\r\n\t\t\t\ttype.DeclaringMethod == null && type.DeclaringType == GenericType.RealType)\r\n\t\t\t{\r\n\t\t\t\treturn Arguments[type.GenericParameterPosition].RealType;\r\n\t\t\t}\r\n\t\t\telse return type;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Lookup\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\treturn GenericType.Type.GetConstructor();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override void DefineBuilders()\r\n\t\t{\r\n\t\t\t// already baked or won't have builders:\r\n\t\t\tif (this.RealType != null || !isDefinite)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tGenericType.Type.DefineBuilders();\r\n\r\n\t\t\tfor (int i = 0; i < Arguments.Length; i++)\r\n\t\t\t\tArguments[i].Type.DefineBuilders();\r\n\r\n\t\t\t// creates a real constructed type:\r\n\t\t\tbool success;\r\n\t\t\tType[] real = GetRealArguments(out success);\r\n\t\t\tif (success)\r\n\t\t\t\tthis.TypeDesc.Bake(GenericType.RealType.MakeGenericType(real));\r\n\t\t}\r\n\r\n\t\t/// <param name=\"success\">Is set to false when any argument is not known at this point\r\n\t\t/// (for example when reflecting a base class reference in a generic class declaration that \r\n\t\t/// depends on the type argument that is not defined until emission).</param>\r\n\t\t/// <returns></returns>\r\n\t\tinternal Type[]/*!*/ GetRealArguments(out bool success)\r\n\t\t{\r\n\t\t\tType[] real_arguments = new Type[Arguments.Length];\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\tfor (int i = 0; i < Arguments.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tType t = Arguments[i].RealType;\r\n\t\t\t\treal_arguments[i] = t;\r\n\t\t\t\tif (t == null) success = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn real_arguments;\r\n\t\t}\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null);\r\n\r\n\t\t\tif (isDefinite && !runtimeVisibilityCheck)\r\n\t\t\t{\r\n\t\t\t\t// delegate emission to the generic type passing it a back-reference:\r\n\t\t\t\treturn GenericType.Type.EmitNew(codeGenerator, this, constructor, callSignature, runtimeVisibilityCheck);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitNewOperator(null, null, this, callSignature);\r\n\t\t\t\treturn PhpTypeCode.Object;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null);\r\n\r\n\t\t\tif (isDefinite)\r\n\t\t\t{\r\n\t\t\t\t// delegate emission to the generic type passing it a back-reference:\r\n\t\t\t\tGenericType.Type.EmitInstanceOf(codeGenerator, this);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitInstanceOfOperator(null, null, this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null);\r\n\r\n\t\t\tif (isDefinite)\r\n\t\t\t{\r\n\t\t\t\t// delegate emission to the generic type passing it a back-reference:\r\n\t\t\t\tGenericType.Type.EmitTypeOf(codeGenerator, this);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitTypeOfOperator(null, null, this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tinternal override void EmitInvokeConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null);\r\n\t\t\tthis.GenericType.Type.EmitInvokeConstructor(il, derivedType, this);\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\tinternal override void EmitInvokeDeserializationConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType,\r\n\t\t\tConstructedType constructedType)\r\n\t\t{\r\n\t\t\tDebug.Assert(constructedType == null);\r\n\t\t\tthis.GenericType.Type.EmitInvokeDeserializationConstructor(il, derivedType, this);\r\n\t\t}\r\n#endif\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tif (isDefinite)\r\n\t\t\t{\r\n\t\t\t\t// emit ldtoken for the real type TypeSpec:\r\n\t\t\t\tDebug.Assert(this.RealType != null);\r\n\t\t\t\tcodeGenerator.EmitLoadTypeDesc(this.RealType);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// LOAD Operators.MakeGenericInstantiation(<generic type desc>, <generic argument descs>)\r\n\t\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\t\tGenericType.Type.EmitLoadTypeDesc(codeGenerator, flags);\r\n\r\n\t\t\t\til.EmitOverloadedArgs(Types.DTypeDesc[0], Arguments.Length, Methods.Operators.MakeGenericTypeInstantiation.ExplicitOverloads, delegate(ILEmitter _il, int i)\r\n\t\t\t\t{\r\n\t\t\t\t\tArguments[i].Type.EmitLoadTypeDesc(codeGenerator, flags);\r\n\t\t\t\t});\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.MakeGenericTypeInstantiation.Overload(Arguments.Length));\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\tif (isDefinite)\r\n\t\t\t{\r\n\t\t\t\treturn new DTypeSpec(RealType, referringUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.RealModuleBuilder);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\r\n\t\t\t\tDTypeSpec[] arg_specs = new DTypeSpec[Arguments.Length];\r\n\r\n\t\t\t\tfor (int i = 0; i < Arguments.Length; i++)\r\n\t\t\t\t\targ_specs[i] = Arguments[i].Type.GetTypeSpec(referringUnit);\r\n\r\n\t\t\t\treturn new DTypeSpec(GenericType.Type.GetTypeSpec(referringUnit), arg_specs);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<ConstructedType> Members\r\n\r\n\t\tpublic override bool Equals(DType other)\r\n\t\t{\r\n\t\t\treturn Equals(other as ConstructedType);\r\n\t\t}\r\n\r\n\t\tpublic bool Equals(ConstructedType other)\r\n\t\t{\r\n\t\t\tif (ReferenceEquals(this, other)) return true;\r\n\r\n\t\t\tif (!this.GenericType.Equals(other.GenericType))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tfor (int i = 0; i < Arguments.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (!this.Arguments[i].Equals(other.Arguments[i]))\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClrType\r\n\r\n\t/// <summary>\r\n\t/// Represents CLR type. For generic types, this instance represents the generic template\r\n\t/// all instantiations (represented by ClrTypeDesc) are sharing.\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"{FullName}\")]\r\n\tpublic sealed class ClrType : KnownType\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tpublic static readonly ClrType/*!*/ SystemObject = new ClrType(DTypeDesc.SystemObjectTypeDesc, QualifiedName.SystemObject);\r\n\r\n\t\tpublic override bool IsComplete { get { return true; } }\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsIdentityDefinite { get { return true; } }\r\n\r\n\t\tpublic override bool IsClrType { get { return true; } }\r\n\t\tpublic override bool ClrVerified { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// CLR type is considered generic if its real type is generic or if there are some generic overloads.\r\n\t\t/// In the latter case, at least one of the overloads has generic real type.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsGeneric\r\n\t\t{\r\n\t\t\tget { return RealType.IsGenericTypeDefinition || ClrTypeDesc.GenericOverloads.Count > 0; }\r\n\t\t}\r\n\r\n\t\tpublic ClrTypeDesc ClrTypeDesc { get { return (ClrTypeDesc)TypeDesc; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets constructor of this type (if any).\r\n\t\t/// </summary>\r\n\t\tpublic override KnownRoutine/*!*/ Constructor { get { return ClrTypeDesc.Constructor.KnownRoutine; } }\r\n\t\tpublic ClrMethod/*!*/ ClrConstructor { get { return ClrTypeDesc.Constructor.ClrMethod; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect (<see cref=\"DTypeDesc.Reflect\"/>).\r\n\t\t/// </summary>\r\n\t\tpublic ClrType(DTypeDesc/*!*/ typeDesc, QualifiedName qualifiedName)\r\n\t\t\t: base(typeDesc, qualifiedName)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\tpublic override KnownRoutine/*!*/ GetConstructor()\r\n\t\t{\r\n\t\t\treturn ClrTypeDesc.Constructor.ClrMethod;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis: ResolveAbstractOverrides, MakeConstructedType\r\n\r\n        internal override DType/*!*/ MakeConstructedType(Analyzer/*!*/ analyzer, DTypeDesc[]/*!*/ arguments, Text.Span position)\r\n\t\t{\r\n\t\t\tif (!IsGeneric)\r\n\t\t\t{\r\n\t\t\t\tif (arguments.Length > 0)\r\n\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.NonGenericTypeUsedWithTypeArgs, analyzer.SourceUnit, position, this.FullName);\r\n\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\tbool success;\r\n\t\t\tClrTypeDesc overload = ClrTypeDesc.ResolveGenericOverload(arguments.Length, out success);\r\n\r\n\t\t\t// too many args:\r\n\t\t\tif (!success)\r\n\t\t\t{\r\n\t\t\t\tanalyzer.ErrorSink.Add(Errors.TooManyTypeArgumentsInTypeUse, analyzer.SourceUnit, position,\r\n\t\t\t\t  this.FullName, overload.GenericParameterCount);\r\n\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// the matching overload's real type is not a generic type:\r\n\t\t\tif (!overload.RealType.IsGenericTypeDefinition)\r\n\t\t\t\treturn this;\r\n\r\n\t\t\tint arg_count = arguments.Length;\r\n\t\t\tif (!overload.MakeGenericArguments(ref arguments, ref arg_count,\r\n\t\t\t\tdelegate(DTypeDesc.MakeGenericArgumentsResult error, DTypeDesc/*!*/ genericType, DTypeDesc argument, GenericParameterDesc/*!*/ parameter)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (error)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase DTypeDesc.MakeGenericArgumentsResult.IncompatibleConstraint:\r\n\t\t\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.IncompatibleTypeParameterConstraintsInTypeUse, analyzer.SourceUnit, position, argument.Type.FullName,\r\n\t\t\t\t\t\t\t\tparameter.GenericParameter.Index.ToString(), parameter.RealType.Name, genericType.Type.FullName);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase DTypeDesc.MakeGenericArgumentsResult.MissingArgument:\r\n\t\t\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.MissingTypeArgumentInTypeUse, analyzer.SourceUnit, position,\r\n\t\t\t\t\t\t\t\tgenericType.Type.FullName, parameter.RealType.GenericParameterPosition + 1, parameter.RealType.Name);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tDebug.Fail(\"Other options checked earlier\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t))\r\n\t\t\t{\r\n\t\t\t\t// missing mandatory argument(s):\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// create a constructed type from the resolved type and arguments:\r\n\t\t\treturn analyzer.CreateConstructedType(overload, arguments, arg_count);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Custom Attributes\r\n\r\n\t\tprivate AttributeUsageAttribute _customAttributeUsage = null;\r\n\t\tprivate bool _customAttributeUsageSet = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets attribute usage attribute applied on the type (if any).\r\n\t\t/// </summary>\r\n\t\tpublic override AttributeUsageAttribute GetCustomAttributeUsage(out bool isDefinite)\r\n\t\t{\r\n\t\t\tisDefinite = true;\r\n\r\n\t\t\tif (!_customAttributeUsageSet)\r\n\t\t\t{\r\n\t\t\t\tobject[] attrs = this.RealType.GetCustomAttributes(typeof(AttributeUsageAttribute), true);\r\n\t\t\t\tif (attrs.Length == 1) _customAttributeUsage = (AttributeUsageAttribute)attrs[0];\r\n\t\t\t\t_customAttributeUsageSet = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn _customAttributeUsage;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t\tDRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\t// TODO: delegate construction analysis and compile-time stub generation\r\n\r\n\t\t\tif (!runtimeVisibilityCheck && !TypeDesc.IsSubclassOf(DTypeDesc.DelegateTypeDesc))\r\n\t\t\t{\r\n\t\t\t\t// surely visible constructor //\r\n\r\n\t\t\t\tcallSignature.EmitLoadOnPhpStack(codeGenerator);\r\n\r\n\t\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\t\tResolveTypeFlags flags = ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors;\r\n\r\n\t\t\t\t// [ Operators.NewClr(<type desc>, <context>) ]\r\n\t\t\t\tif (constructedType != null)\r\n\t\t\t\t\tconstructedType.EmitLoadTypeDesc(codeGenerator, flags);\r\n\t\t\t\telse\r\n\t\t\t\t\tthis.EmitLoadTypeDesc(codeGenerator, flags);\r\n\r\n\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.NewClr);\r\n\r\n#if DEBUG_DYNAMIC_CTOR_STUBS\r\n\t\t\t\tClrMethod clr_ctor = (ClrMethod)constructor;\r\n\r\n\t\t\t\tMethodBuilder mb = codeGenerator.IL.TypeBuilder.DefineMethod(FullName + \"::\" + clr_ctor.FullName,\r\n\t\t\t\t\tMethodAttributes.PrivateScope | MethodAttributes.Static, typeof(object), Types.Object_PhpStack);\r\n\r\n\t\t\t\tIndexedPlace instance = new IndexedPlace(PlaceHolder.Argument, 0);\r\n\t\t\t\tIndexedPlace stack = new IndexedPlace(PlaceHolder.Argument, 1);\r\n\r\n\t\t\t\tclr_ctor.EmitArglessStub(new ILEmitter(mb), stack, instance);\r\n#endif\r\n\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// a possibly visible CLR constructor - perform visibility check at runtime\r\n\t\t\t\t// (and handle delegate instantiation)\r\n\r\n\t\t\t\tcodeGenerator.EmitNewOperator(null, null, (constructedType != null) ? constructedType : (DType)this, callSignature);\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitDirectInstanceOf((constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitDirectTypeOf((constructedType != null) ? constructedType : (DType)this);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tcodeGenerator.EmitLoadTypeDesc(RealType);\r\n\t\t}\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\treturn new DTypeSpec(this.RealType, referringUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.RealModuleBuilder);\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInvokeConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\t// invoke base constructor:\r\n\t\t\tClrMethod ctor = this.ClrConstructor;\r\n\r\n\t\t\tIPlace context_place = new IndexedPlace(PlaceHolder.Argument, FunctionBuilder.ArgContextInstance);\r\n\t\t\tIPlace stack_place = new Place(context_place, Fields.ScriptContext_Stack);\r\n\r\n\t\t\tClrOverloadBuilder overload_builder = new ClrOverloadBuilder(\r\n\t\t\t\til,\r\n\t\t\t\tctor,\r\n\t\t\t\tconstructedType,\r\n\t\t\t\tstack_place,\r\n\t\t\t\tIndexedPlace.ThisArg,\r\n\t\t\t\ttrue,\r\n\t\t\t\tnew ClrOverloadBuilder.ParameterLoader(PhpStackBuilder.EmitValuePeek),\r\n\t\t\t\tnew ClrOverloadBuilder.ParameterLoader(PhpStackBuilder.EmitReferencePeek));\r\n\r\n\t\t\toverload_builder.EmitResolutionByTypes(derivedType.Builder.BaseCtorCallOverloadIndex);\r\n\r\n\t\t\t// check whether we added the <proxy> field and init it if so\r\n\t\t\tif (derivedType.ProxyFieldInfo.DeclaringType == derivedType.TypeDesc.RealType)\r\n\t\t\t{\r\n\t\t\t\t// [ this.<proxy> = ClrObject.Create(this) ]\r\n\t\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\r\n\t\t\t\til.Ldarg(FunctionBuilder.ArgThis);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_Create);\r\n\r\n\t\t\t\til.Emit(OpCodes.Stfld, derivedType.ProxyFieldInfo);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PhpType, PhpTypeBuilder\r\n\r\n\t/// <summary>\r\n\t/// Represents PHP type. For generic types, this instance represents the generic template\r\n\t/// all instantiations (represented by PhpTypeDesc) are sharing.\r\n\t/// </summary>\r\n\t[DebuggerDisplay(\"{DebuggerDisplay}\")]\r\n\tpublic sealed class PhpType : KnownType, IDeclaree, IPhpMember\r\n\t{\r\n        #region Properties\r\n\r\n\t\tpublic override bool IsUnknown { get { return false; } }\r\n\t\tpublic override bool IsGeneric { get { return GenericParams.Length > 0; } }\r\n\t\tpublic override bool IsOpen { get { return false; } }\r\n\t\tpublic override bool IsPhpType { get { return true; } }\r\n\t\tpublic override bool ClrVerified { get { return declaration == null; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the analyzer can be sure about the identity of the type.\r\n\t\t/// A type is error definite if it is a unconditionally declared type or if it is a reflected type.\r\n\t\t/// \r\n\t\t/// Note that reflected types are resolved iff they are active at the time of the resolving. \r\n\t\t/// A reflected type declared unconditionally in its compilation unit is active since the module is loaded \r\n\t\t/// (the module's auto-reflection code declares it on <see cref=\"ApplicationContext\"/>). \r\n\t\t/// A reflected type declared conditionally is activated by a call to the <see cref=\"ScriptContext.DeclareType\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsIdentityDefinite\r\n\t\t{\r\n\t\t\tget { return declaration == null || !declaration.IsConditional; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Type can be either unconditional/load-time activated (version index is zero), \r\n\t\t/// conditionally declared with known declaration (version index is positive) or \r\n\t\t/// runtime activated by an already compiled code (version index is <see cref=\"VersionInfo.ReflectedRuntimeActivated\"/>).\r\n\t\t/// </summary>\r\n\t\tpublic bool IsRuntimeActivated { get { return version.Index != VersionInfo.Unconditional; } }\r\n\r\n\t\tpublic PhpTypeDesc PhpTypeDesc { get { return (PhpTypeDesc)TypeDesc; } }\r\n\t\tpublic IPhpModuleBuilder DeclaringModuleBuilder { get { return (IPhpModuleBuilder)DeclaringModule; } }\r\n\r\n\t\tpublic Declaration Declaration { get { return declaration; } }\r\n\t\tprivate Declaration declaration;\r\n\r\n\t\tpublic GenericParameterDesc[]/*!!*/ GenericParams { get { return PhpTypeDesc.GenericParameters; } }\r\n\r\n\t\tpublic VersionInfo Version { get { return version; } set { version = value; } }\r\n\t\tprivate VersionInfo version;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Auxiliary fields used for emission, <B>null</B> for reflected types.\r\n\t\t/// </summary>\r\n\t\tinternal PhpTypeBuilder Builder { get { return builder; } }\r\n\t\tprivate PhpTypeBuilder builder;\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets constructor of this type (if any).\r\n\t\t/// Filled by member analysis.\r\n\t\t/// </summary>\r\n\t\tpublic override KnownRoutine Constructor { get { return constructor; } }\r\n\t\tprivate PhpRoutine constructor;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set in constructor for reflected types.\r\n\t\t/// Initialized on demand, not available before full analysis starts (the hierarchy needs to be validated first).\r\n\t\t/// </summary>\r\n\t\tpublic override bool IsComplete { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return isComplete; } }\r\n\t\tprivate bool isComplete;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Root in the inheritance hierarchy.\r\n\t\t/// Available after full analysis.\r\n\t\t/// </summary>\r\n\t\tpublic DType/*!A*/ Root { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return root; } }\r\n\t\tprivate DType/*!A*/ root;\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> if there is a CLR type (or a constructed type with CLR generic type) in this type's base chain.\r\n\t\t/// Available after full analysis.\r\n\t\t/// </summary>\r\n\t\tpublic bool ExtendsClrType { get { Debug.Assert(inheritanceAnalysisState != DfsStates.Initial); return extendsClrType; } }\r\n\t\tprivate bool extendsClrType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the type is exported.\r\n\t\t/// </summary>\r\n\t\tinternal bool IsExported\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn builder.ExportInfo != null || this.DeclaringModuleBuilder.AssemblyBuilder.IsExported;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"MethodInfo\"/> of <see cref=\"PhpObjectBuilder.StaticFieldInitMethodName\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic MethodInfo StaticFieldInitMethodInfo { get { return staticFieldInitMethodInfo; } set { staticFieldInitMethodInfo = value; } }\r\n\t\tprivate MethodInfo staticFieldInitMethodInfo;\r\n\t\tpublic MethodBuilder StaticFieldInitMethodBuilder { get { return (MethodBuilder)staticFieldInitMethodInfo; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns exported aka &quot;C#-friendly&quot; constructors defined in this PHP type.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Constructors are sorted according to their parameter count in the ascending order.\r\n\t\t/// </remarks>\r\n\t\tpublic ConstructorInfo[] ClrConstructorInfos\r\n\t\t{\r\n\t\t\t#region Getter\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// this is rarely needed -> obtain the constructor info lazily\r\n\t\t\t\tif (clrConstructorInfos == null && !IsInterface)\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(builder == null, \"Should be called only on reflected types. Otherwise clrConstructorInfos is set by DefineBuilders\");\r\n\r\n\t\t\t\t\t// reflect constructors\r\n\t\t\t\t\tConstructorInfo[] ctors =\r\n\t\t\t\t\t\tthis.RealType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n\t\t\t\t\tList<ConstructorInfo> ctor_list = new List<ConstructorInfo>();\r\n\t\t\t\t\tfor (int i = 0; i < ctors.Length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tParameterInfo[] parms = ctors[i].GetParameters();\r\n\r\n\t\t\t\t\t\t// On SL we don't have (de)serialization, so we don't check \r\n\t\t\t\t\t\t// for the arguments matching serialization pattern\r\n#if SILVERLIGHT\r\n\t\t\t\t\t\tbool isPublicSig =\r\n\t\t\t\t\t\t\tparms.Length != 2 || parms[0].ParameterType != Types.ScriptContext[0];\r\n#else\r\n\t\t\t\t\t\tbool isPublicSig =\r\n\t\t\t\t\t\t\tparms.Length != 2 ||\r\n\t\t\t\t\t\t\t\t(parms[0].ParameterType != Types.ScriptContext[0] &&\r\n\t\t\t\t\t\t\t\t (parms[0].ParameterType != Types.SerializationInfo_StreamingContext[0] ||\r\n\t\t\t\t\t\t\t\t\tparms[1].ParameterType != Types.SerializationInfo_StreamingContext[1]));\r\n#endif\r\n\t\t\t\t\t\tif (isPublicSig)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint index = 0;\r\n\t\t\t\t\t\t\twhile (index < ctor_list.Count && parms.Length > ctor_list[index].GetParameters().Length) index++;\r\n\r\n\t\t\t\t\t\t\tctor_list.Insert(index, ctors[i]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tclrConstructorInfos = ctor_list.ToArray();\r\n\t\t\t\t}\r\n\t\t\t\treturn clrConstructorInfos;\r\n\t\t\t}\r\n\t\t\t#endregion\r\n\t\t\tinternal set { clrConstructorInfos = value; }\r\n\t\t}\r\n\t\tprivate ConstructorInfo[] clrConstructorInfos;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"ConstructorInfo\"/> to short constructor.\r\n\t\t/// </summary>\r\n\t\tpublic ConstructorInfo ShortConstructorInfo { get { return shortConstructorInfo; } }\r\n\t\tprivate ConstructorInfo shortConstructorInfo;\r\n\t\tpublic ConstructorBuilder ShortConstructorBuilder { get { return (ConstructorBuilder)shortConstructorInfo; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"ConstructorInfo\"/> to long constructor.\r\n\t\t/// </summary>\r\n\t\tpublic ConstructorInfo LongConstructorInfo { get { return longConstructorInfo; } }\r\n\t\tprivate ConstructorInfo longConstructorInfo;\r\n\t\tpublic ConstructorBuilder LongConstructorBuilder { get { return (ConstructorBuilder)longConstructorInfo; } }\r\n\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"ConstructorInfo\"/> to deserializing constructor.\r\n\t\t/// </summary>\r\n\t\tpublic ConstructorInfo DeserializingConstructorInfo { get { return deserializingConstructorInfo; } }\r\n\t\tprivate ConstructorInfo deserializingConstructorInfo;\r\n\t\tpublic ConstructorBuilder DeserializingConstructorBuilder { get { return (ConstructorBuilder)DeserializingConstructorInfo; } }\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Static readonly field emitted to each PHP type. Holds reference to the type's <see cref=\"PhpTypeDesc\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic FieldInfo TypeDescFieldInfo { get { return typeDescFieldInfo; } }\r\n\t\tprivate FieldInfo typeDescFieldInfo;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Instance readonly field emitted to the first PHP type that extends a CLR base. Holds reference to the\r\n\t\t/// instance's <see cref=\"ClrObject\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic FieldInfo ProxyFieldInfo { get { return proxyFieldInfo; } }\r\n\t\tprivate FieldInfo proxyFieldInfo;\r\n\r\n        /// <summary>\r\n        /// Method that declares (compiles) incomplete class definition. Is <c>null</c> if the type is not incomplete.\r\n        /// Method is in format <c>private static void &lt;Declare&gt;XXX(ScriptContext)</c>\r\n        /// </summary>\r\n        public MethodInfo IncompleteClassDeclareMethodInfo { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Unique identifier of the incomplete class declaration.\r\n        /// Used in runtime (<see cref=\"ScriptContext.IncompleteTypesInAdvance\"/>) to determine whether class was declared in advance.\r\n        /// </summary>\r\n        public string IncompleteClassDeclarationId { get; internal set; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by full-reflect (<see cref=\"DTypeDesc.Reflect\"/>).\r\n\t\t/// </summary>\r\n\t\tpublic PhpType(DTypeDesc/*!*/ typeDesc, QualifiedName qualifiedName)\r\n\t\t\t: base(typeDesc, qualifiedName)\r\n\t\t{\r\n\t\t\tthis.isComplete = true;\r\n\t\t\tthis.inheritanceAnalysisState = DfsStates.Done;\r\n\r\n\t\t\tGetInheritanceProperties(out this.extendsClrType, out this.root);\r\n\t\t\tReflectRealType();\r\n\t\t\tDetermineConstructor();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by the compiler.\r\n\t\t/// </summary>\r\n\t\tpublic PhpType(QualifiedName qualifiedName, PhpMemberAttributes memberAttributes, bool isPartial,\r\n            TypeSignature typeSignature, bool isConditionalDeclaration, Scope scope, CompilationSourceUnit/*!*/ sourceUnit, Text.Span position)\r\n\t\t\t: base(new PhpTypeDesc(sourceUnit.CompilationUnit.Module, memberAttributes), qualifiedName)\r\n\t\t{\r\n\t\t\tDebug.Assert(sourceUnit != null && position.IsValid);\r\n\r\n\t\t\tGenericParameterDesc[] generic_params = typeSignature.ToGenericParameters(this);\r\n\t\t\tTypeDesc.WriteUpGenericDefinition(generic_params.Length > 0 ? new GenericTypeDefinition(TypeDesc, generic_params) : null);\r\n\r\n\t\t\tthis.declaration = new Declaration(sourceUnit, this, isPartial, isConditionalDeclaration, scope, position);\r\n\t\t\tthis.builder = new PhpTypeBuilder(this);\r\n\t\t\tthis.inheritanceAnalysisState = DfsStates.Initial;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utils\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a given type represents a PHP class or a PHP interface.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"realType\">The <see cref=\"Type\"/> to test.</param>\r\n\t\t/// <returns><B>true</B> if <paramref name=\"realType\"/> implements a PHP class or a PHP interface, <B>false</B>\r\n\t\t/// otherwise.</returns>\r\n\t\t/// <exception cref=\"NullReferenceException\"><paramref name=\"realType\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static bool IsPhpRealType(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\treturn realType.IsDefined(Types.ImplementsTypeAttribute, false);\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"NullReferenceException\"><paramref name=\"realType\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static bool IsRealConditionalDefinition(Type/*!*/ realType)\r\n\t\t{\r\n\t\t\treturn realType.Name.IndexOf('#') > 0;\r\n\t\t}\r\n\r\n\t\tinternal override void ReportError(ErrorSink/*!*/ sink, ErrorInfo error)\r\n\t\t{\r\n\t\t\tif (declaration != null)\r\n\t\t\t\tsink.Add(error, declaration.SourceUnit, declaration.Span);\r\n\t\t}\r\n\r\n\t\tpublic void ReportRedeclaration(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDebug.Assert(declaration != null);\r\n\t\t\terrors.Add(FatalErrors.TypeRedeclared, declaration.SourceUnit, declaration.Span, FullName);\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Analysis, Validation\r\n\r\n\t\tprivate DfsStates inheritanceAnalysisState;\r\n\t\tprivate List<DType> dfsPredecessors;\r\n\r\n\t\t/// <summary>\r\n\t\t/// To be used by analyzer in member-analysis.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// All types are known at this point (their inheritance relationships needn't to be known).\r\n\t\t/// This instance knows its base class and interfaces (the others needn't to).\r\n\t\t/// Members of this type are known, however members of the other types are not known yet.\r\n\t\t/// Partial declarations are merged at this point.\r\n\t\t/// </remarks>\r\n\t\tinternal void ValidateMembers(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tif (inheritanceAnalysisState != DfsStates.Done)\r\n\t\t\t{\r\n\t\t\t\tAnalyzeInheritance(errors);\r\n\t\t\t}\r\n\r\n\t\t\tDetermineConstructor();\r\n\r\n\t\t\t// add implicit export attribute if the class represents a custom attribute:\r\n\t\t\tif (IsCustomAttributeType)\r\n\t\t\t\tbuilder.ExportInfo = new ExportAttribute();\r\n\r\n\t\t\tDebug.WriteLine(\"M-ANALYSIS\", \"PhpType '{0}': root = '{1}', extendsClrType = {2}\",\r\n\t\t\t\tthis.MakeFullGenericName(), (root != null) ? root.MakeFullGenericName() : \"?\", extendsClrType);\r\n\t\t}\r\n\r\n\t\tinternal override void AnalyzeInheritance(ErrorSink/*!*/ errors, ref List<DType> mfpWorklist, DType dfsPredecessor, PhpType phpPredecessor,\r\n\t\t\tint dfsDepth, int inheritanceDepth)\r\n\t\t{\r\n\t\t\tDebug.Assert(errors != null);\r\n\r\n\t\t\tif (dfsDepth >= 0)\r\n\t\t\t{\r\n\t\t\t\tswitch (inheritanceAnalysisState)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase DfsStates.Initial:\r\n\r\n\t\t\t\t\t\tinheritanceAnalysisState = DfsStates.Entered;\r\n\r\n\t\t\t\t\t\t// initialize:\r\n\t\t\t\t\t\tisComplete = true;\r\n\t\t\t\t\t\tbuilder.InheritanceAnalysisDfsDepth = inheritanceDepth;\r\n\r\n\t\t\t\t\t\t// inheritance edge descend (increase inheritance depth):\r\n\t\t\t\t\t\tif (TypeDesc.Base != null)\r\n\t\t\t\t\t\t\tTypeDesc.Base.Type.AnalyzeInheritance(errors, ref mfpWorklist, this, this, dfsDepth + 1, inheritanceDepth + 1);\r\n\r\n\t\t\t\t\t\t// inheritance edge descend (increase inheritance depth);\r\n\t\t\t\t\t\t// note, we cannot use TypeDesc.Interfaces as has not been defined yet:\r\n\t\t\t\t\t\tforeach (DTypeDesc iface in builder.BaseInterfaces)\r\n\t\t\t\t\t\t\tiface.Type.AnalyzeInheritance(errors, ref mfpWorklist, this, this, dfsDepth + 1, inheritanceDepth + 1);\r\n\r\n\t\t\t\t\t\tinheritanceAnalysisState = DfsStates.Done;\r\n\r\n\t\t\t\t\t\tUpdateInheritanceProperties();\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase DfsStates.Entered:\r\n\t\t\t\t\t\tif (mfpWorklist == null)\r\n\t\t\t\t\t\t\tmfpWorklist = new List<DType>();\r\n\r\n\t\t\t\t\t\t// edge from DFS predecessor to this node closes a loop => add predecessor to the worklist as \r\n\t\t\t\t\t\t// its properties depends on the values that will be computed on this node later:\r\n\t\t\t\t\t\tmfpWorklist.Add(dfsPredecessor);\r\n\r\n\t\t\t\t\t\t// check whether the backward edge closes inheritance loop:\r\n\t\t\t\t\t\tDebug.Assert(this.builder != null, \"Backward edge cannot point to a reflected type.\");\r\n\t\t\t\t\t\tDebug.Assert(dfsDepth - 1 >= this.builder.InheritanceAnalysisDfsDepth);\r\n\t\t\t\t\t\tDebug.Assert(phpPredecessor != null, \"There has to be some PhpType (at least this type)\");\r\n\r\n\t\t\t\t\t\tif ((dfsDepth - 1) - this.builder.InheritanceAnalysisDfsDepth <= inheritanceDepth)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// fatal error - circular inheritance (the further analysis assumes non-circularity):\r\n\t\t\t\t\t\t\terrors.Add((this.IsInterface) ? FatalErrors.CircularBaseInterfaceDependency : FatalErrors.CircularBaseClassDependency,\r\n\t\t\t\t\t\t\t\tdeclaration.SourceUnit, declaration.Span, phpPredecessor.FullName, this.FullName);\r\n\t\t\t\t\t\t\tphpPredecessor.ReportError(errors, FatalErrors.RelatedLocation);\r\n\r\n\t\t\t\t\t\t\tthrow new CompilerException();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase DfsStates.Done:\r\n\t\t\t\t\t\t// do nothing\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// add predecessor regardless of the DFS state of the current node:\r\n\t\t\t\tif (dfsPredecessor != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (dfsPredecessors == null)\r\n\t\t\t\t\t\tdfsPredecessors = new List<DType>();\r\n\r\n\t\t\t\t\tdfsPredecessors.Add(dfsPredecessor);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(mfpWorklist != null);\r\n\r\n\t\t\t\t// save current state of MFP properties:\r\n\t\t\t\tbool was_complete = this.isComplete;\r\n\r\n\t\t\t\t// recalculate the properties:\r\n\t\t\t\tUpdateInheritanceProperties();\r\n\r\n\t\t\t\t// check changes in MFP properties and queue the influenced nodes for MFP processing:\r\n\t\t\t\tif (this.isComplete != was_complete && dfsPredecessors != null)\r\n\t\t\t\t\tmfpWorklist.AddRange(dfsPredecessors);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void UpdateInheritanceProperties()\r\n\t\t{\r\n\t\t\tif (TypeDesc.Base != null)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(!TypeDesc.Base.Type.IsGenericParameter, \"cannot inherit from ganeric parameter (cted or not)\");\r\n\r\n\t\t\t\tisComplete &= TypeDesc.Base.Type.IsDefinite;\r\n\r\n\t\t\t\tif (isComplete)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the properties can be determined from the values on the base type;\r\n\t\t\t\t\t// if the type isn't complete, it doesn't make sense to get properties of the base class:\r\n\t\t\t\t\tBase.GetInheritanceProperties(out this.extendsClrType, out this.root);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.extendsClrType = false;\r\n\t\t\t\tthis.root = this;\r\n\t\t\t}\r\n\r\n\t\t\t// note, we cannot use TypeDesc.Interfaces as has not been defined yet:\r\n\t\t\tforeach (DTypeDesc iface in builder.BaseInterfaces)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(!iface.Type.IsGenericParameter, \"cannot inherit from ganeric parameter (cted or not)\");\r\n\t\t\t\tisComplete &= iface.Type.IsDefinite;\r\n\t\t\t}\r\n\r\n\t\t\t// determine implemented interfaces for complete types:\r\n\t\t\tif (isComplete)\r\n\t\t\t\tTypeDesc.WriteUpInterfaces(GetImplementedInterfaces());\r\n\t\t}\r\n\r\n\t\tinternal override void GetInheritanceProperties(out bool extendsClrType, out DType/*!*/ hierarchyRoot)\r\n\t\t{\r\n\t\t\t// we must check for null builder to prevent running into infinite recursion if there is a circular inheritance:\r\n\t\t\tif (root == null && builder == null)\r\n\t\t\t{\r\n\t\t\t\tif (Base != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tBase.GetInheritanceProperties(out this.extendsClrType, out this.root);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.extendsClrType = false;\r\n\t\t\t\t\tthis.root = this;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// called from AnalyseInheritance on already analyzed base type:\r\n\t\t\textendsClrType = this.extendsClrType;\r\n\t\t\thierarchyRoot = this.root;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gathers all implemented interfaces including those inherited from base types.\r\n\t\t/// Filters duplicates so that implements/ghost arrays won't contain duplicates when populated.\r\n\t\t/// </summary>\r\n\t\tprivate DTypeDesc[]/*!!*/ GetImplementedInterfaces()\r\n\t\t{\r\n\t\t\tDebug.Assert(isComplete);\r\n\r\n\t\t\tDTypeDesc[] result;\r\n\t\t\tDTypeDesc base_type = TypeDesc.Base;\r\n\r\n\t\t\tif (builder.BaseInterfaces.Count > 0)\r\n\t\t\t{\r\n\t\t\t\t// base class and interfaces should have their interfaces tables populated:\r\n\r\n\t\t\t\t// we expect small numbers of interfaces so the list should be sufficient:\r\n\t\t\t\tList<DTypeDesc> all_interfaces = new List<DTypeDesc>();\r\n\r\n\t\t\t\tif (base_type != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (DTypeDesc iface in base_type.Interfaces)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (all_interfaces.IndexOf(iface) == -1)\r\n\t\t\t\t\t\t\tall_interfaces.Add(iface);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tforeach (DTypeDesc base_iface in builder.BaseInterfaces)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (all_interfaces.IndexOf(base_iface) == -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (DTypeDesc iface in base_iface.Interfaces)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (all_interfaces.IndexOf(iface) == -1)\r\n\t\t\t\t\t\t\t\tall_interfaces.Add(iface);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tall_interfaces.Add(base_iface);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult = all_interfaces.ToArray();\r\n\t\t\t}\r\n\t\t\telse if (base_type != null)\r\n\t\t\t{\r\n\t\t\t\t// this type implements exactly the same set of interfaces as the base one:\r\n\t\t\t\tresult = base_type.Interfaces;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult = DTypeDesc.EmptyArray;\r\n\t\t\t}\r\n\r\n\t\t\tDebug.WriteLine(\"M-ANALYSIS\", \"PhpType '{0}': interfaces = {{{1}}}\", this.FullName,\r\n\t\t\t\tArrayUtils.ToList(result, delegate(StringBuilder sb, DTypeDesc iface)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(iface.Type.MakeFullGenericName());\r\n\t\t\t\t}));\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Looks the constructor up among the methods of the type. Used by analysis and reflection.\r\n\t\t/// </summary>\r\n\t\tprivate void DetermineConstructor()\r\n\t\t{\r\n\t\t\tDRoutineDesc ctor_desc;\r\n\t\t\tif (TypeDesc.Methods.TryGetValue(Name.SpecialMethodNames.Construct, out ctor_desc) ||\r\n\t\t\t\tTypeDesc.Methods.TryGetValue(this.qualifiedName.Name, out ctor_desc))\r\n\t\t\t{\r\n\t\t\t\tctor_desc.MemberAttributes |= PhpMemberAttributes.Constructor;\r\n\t\t\t\tthis.constructor = ctor_desc.PhpRoutine;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Analysis, Validation\r\n\r\n\t\tinternal override DType/*!*/ MakeConstructedType(Analyzer/*!*/ analyzer, DTypeDesc[]/*!*/ arguments, Text.Span position)\r\n\t\t{\r\n\t\t\t// only error definites know their generic parameters:\r\n\t\t\tif (!IsIdentityDefinite)\r\n\t\t\t{\r\n\t\t\t\tif (arguments.Length > 0)\r\n\t\t\t\t\treturn analyzer.CreateConstructedType(this.TypeDesc, arguments, arguments.Length);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// check too many args:\r\n\t\t\tif (arguments.Length > GenericParams.Length)\r\n\t\t\t{\r\n\t\t\t\tif (GenericParams.Length == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.NonGenericTypeUsedWithTypeArgs, analyzer.SourceUnit, position,\r\n\t\t\t\t\t\t  this.FullName);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.TooManyTypeArgumentsInTypeUse, analyzer.SourceUnit, position,\r\n\t\t\t\t\t\tthis.FullName, GenericParams.Length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (GenericParams.Length > 0)\r\n\t\t\t{\r\n\t\t\t\tint arg_count = arguments.Length;\r\n\r\n\t\t\t\tif (!TypeDesc.MakeGenericArguments(ref arguments, ref arg_count,\r\n\t\t\t\t\tdelegate(DTypeDesc.MakeGenericArgumentsResult/*!*/ error, DTypeDesc/*!*/ genericType, DTypeDesc argument, GenericParameterDesc/*!*/ parameter)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.Assert(error == DTypeDesc.MakeGenericArgumentsResult.MissingArgument);\r\n\r\n\t\t\t\t\t\tanalyzer.ErrorSink.Add(Errors.MissingTypeArgumentInTypeUse, analyzer.SourceUnit, position,\r\n\t\t\t\t\t\t\tgenericType.Type.FullName, parameter.GenericParameter.Index + 1, parameter.GenericParameter.FullName);\r\n\t\t\t\t\t}\r\n\t\t\t\t))\r\n\t\t\t\t{\r\n\t\t\t\t\t// missing mandatory arg:\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create a constructed type from the resolved type and arguments:\r\n\t\t\t\treturn analyzer.CreateConstructedType(this.TypeDesc, arguments, arg_count);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Expects all declared members to be validated.\r\n\t\t/// </summary>\r\n\t\tinternal void Validate(ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tResolveAbstractOverrides(errors);\r\n\r\n\t\t\tDebug.Assert(allAbstracts != null);\r\n\r\n\t\t\t// fills the overrides array for methods:\r\n\t\t\tforeach (PhpMethod method in GetMethods<PhpMethod>())\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(method.Overrides == null || method.Overrides.Member.IsAbstract, \"Resolved by ResolveAbstractOverrides\");\r\n\r\n\t\t\t\tif (method.Overrides == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (method.IsConstructor && this.Base != null && this.Base.IsClrType)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// check the parent for the .ctor if it is a CLR type:\r\n\t\t\t\t\t\tmethod.Overrides = (this.Base.Constructor != null) ? new DMemberRef(this.Base.Constructor, this.Base) : null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbool in_supertype = true;\r\n\t\t\t\t\t\tmethod.Overrides = method.GetImplementationInSuperTypes(this.Base, true, ref in_supertype);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (method.Overrides != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tDebug.WriteLine(\"F-ANALYSIS\", \"GetUserEntryPoint '{0}::{1}': overrides = '{2}::{3}'\",\r\n\t\t\t\t\t\t\tthis.MakeFullGenericName(), method.FullName, method.Overrides.Type.MakeFullGenericName(), method.Overrides.Member.FullName);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n                if (method.Overrides != null)\r\n                {\r\n                    method.ValidateOverride(errors, (KnownRoutine)method.Overrides.Member);\r\n\r\n                    //// decreasing amount of arguments:\r\n                    //// We have to add missing args as hidden args, so we can optimize method calls.\r\n                    //// In case args could be decreased, we would loose args when calling virtually;\r\n                    //// class A{function f($a)}\r\n                    //// class B{function f()}    // <-- loosing $a, we have to add hidden arg, so override in C would be correct\r\n                    //// class C{function f($a)}  // <-- $a is ArgDefault\r\n                    //if (method.Overrides.Member.GetType() == typeof(PhpMethod) &&\r\n                    //    ((PhpMethod)method.Overrides.Member).Signature.ParamCount > method.Signature.ParamCount)\r\n                    //{\r\n                    //    // Signature has to be extended with hidden args\r\n                    //    // ... then we can enable this->foo optimization\r\n                    //    // last problem is changing return type (object <-> PhpReference)\r\n                    //}\r\n                }\r\n\r\n\t\t\t\tif (method.Implements != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (DMemberRef implemented in method.Implements)\r\n\t\t\t\t\t\tmethod.ValidateOverride(errors, (KnownRoutine)implemented.Member);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// fills the overrides array for fields:\r\n\t\t\tforeach (PhpField field in GetProperties<PhpField>())\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(field.Overrides == null || field.Overrides.Member.IsAbstract, \"Resolved by ResolveAbstractOverrides\");\r\n\r\n\t\t\t\tif (field.Overrides == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tbool in_supertype = true;\r\n\t\t\t\t\tfield.Overrides = field.GetImplementationInSuperTypes(this.Base, true, ref in_supertype);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (field.Overrides != null)\r\n\t\t\t\t\tfield.ValidateOverride(errors, (KnownProperty)field.Overrides.Member);\r\n\r\n\t\t\t\tif (field.Implements != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (DMemberRef implemented in field.Implements)\r\n\t\t\t\t\t\tfield.ValidateOverride(errors, (KnownProperty)implemented.Member);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            // check class constants\r\n            foreach (var constant in TypeDesc.Constants.Values)\r\n            {\r\n                if (constant.ClassConstant != null && !constant.ClassConstant.HasValue)\r\n                {\r\n                    // this constant will behave like PHP static field,\r\n                    // it needs to be initialized every request statically:\r\n                    this.Builder.HasThreadStaticFields = true;\r\n                }\r\n            }\r\n\r\n\t\t\t// abstracts must be implemented in non-abstract class:\r\n\t\t\tif (!IsAbstract)\r\n\t\t\t{\r\n\t\t\t\tforeach (DMemberRef unimplemented in allAbstracts)\r\n\t\t\t\t\tunimplemented.ReportAbstractNotImplemented(errors, this);\r\n\t\t\t}\r\n\r\n\t\t\t// check missing ctor in CLR subclass without default ctor:\r\n\t\t\tif (constructor == null)\r\n\t\t\t{\r\n\t\t\t\tClrType base_clr_type = this.Base as ClrType;\r\n\t\t\t\tif (base_clr_type != null && !base_clr_type.ClrConstructor.HasParameterlessOverload)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.MissingCtorInClrSubclass, declaration.SourceUnit, declaration.Span,\r\n\t\t\t\t\t\tthis.FullName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tDebug.WriteLine(\"F-ANALYSIS\", \"PhpType '{0}': ghosts = {{{1}}}\", this.FullName,\r\n\t\t\t\tArrayUtils.ToList(this.Builder.ghostImplementations,\r\n\t\t\t\t\tdelegate(StringBuilder sb, KeyValuePair<DMemberRef, DMemberRef> m)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsb.AppendFormat(\"{0}::{1} by {2}::{3}\",\r\n\t\t\t\t\t\t\tm.Key.Type.MakeFullGenericName(), m.Key.Member.FullName,\r\n\t\t\t\t\t\t\tm.Value.Type.MakeFullGenericName(), m.Value.Member.FullName);\r\n\t\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tinternal override void AddGhostImplementation(DMemberRef/*!*/ abstractMember, DMemberRef/*!*/ implementation)\r\n\t\t{\r\n\t\t\tthis.builder.AddGhostImplementation(abstractMember, implementation);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member Addition\r\n\r\n\t\tinternal ClassConstant AddConstant(VariableName name, PhpMemberAttributes memberAttributes,\r\n            Text.Span position, CompilationSourceUnit/*!*/ sourceUnit, ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDConstantDesc existing;\r\n\r\n\t\t\t// name uniqueness:\r\n\t\t\tif (TypeDesc.Constants.TryGetValue(name, out existing))\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.ConstantRedeclared, sourceUnit, position, QualifiedName.ToString(new Name(name.Value), false));\r\n\t\t\t\terrors.Add(Errors.RelatedLocation, sourceUnit, existing.ClassConstant.Span);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tClassConstant constant = new ClassConstant(name, TypeDesc, memberAttributes, sourceUnit, position);\r\n\r\n\t\t\tconstant.Validate(errors);\r\n\r\n\t\t\tTypeDesc.Constants.Add(name, constant.ConstantDesc);\r\n\r\n\t\t\treturn constant;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a field to the type.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the field has been added.</returns>\r\n\t\tinternal PhpField AddField(VariableName name, PhpMemberAttributes memberAttributes, bool hasInitialValue,\r\n            Text.Span position, CompilationSourceUnit/*!*/ sourceUnit, ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDPropertyDesc existing;\r\n\r\n\t\t\t// name uniqueness:\r\n\t\t\tif (TypeDesc.Properties.TryGetValue(name, out existing))\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PropertyRedeclared, sourceUnit, position, QualifiedName, name);\r\n\t\t\t\terrors.Add(Errors.RelatedLocation, sourceUnit, existing.PhpField.Span);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tPhpField field = new PhpField(name, TypeDesc, memberAttributes, hasInitialValue, sourceUnit, position);\r\n\r\n\t\t\tfield.Validate(sourceUnit, errors);\r\n\r\n\t\t\tTypeDesc.Properties.Add(name, field.PropertyDesc);\r\n\t\t\tif (field.PropertyDesc.IsThreadStatic) builder.HasThreadStaticFields = true;\r\n\r\n\t\t\treturn field;\r\n\t\t}\r\n\r\n\t\tinternal PhpMethod AddMethod(Name name, PhpMemberAttributes memberAttributes, bool hasBody,\r\n\t\t  Signature astSignature, TypeSignature astTypeSignature,\r\n          Text.Span position, CompilationSourceUnit/*!*/ sourceUnit, ErrorSink/*!*/ errors)\r\n\t\t{\r\n\t\t\tDRoutineDesc existing;\r\n\r\n\t\t\t// name uniqueness:\r\n\t\t\tif (TypeDesc.Methods.TryGetValue(name, out existing))\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.MethodRedeclared, sourceUnit, position, QualifiedName, name);\r\n\t\t\t\terrors.Add(Errors.RelatedLocation, sourceUnit, existing.PhpMethod.Span);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.IsInterface)\r\n\t\t\t\tmemberAttributes |= PhpMemberAttributes.Abstract;\r\n\r\n\t\t\tPhpMethod method = new PhpMethod(this, name, memberAttributes, hasBody, astSignature, astTypeSignature, sourceUnit, position);\r\n\r\n\t\t\tTypeDesc.Methods.Add(name, method.RoutineDesc);\r\n\r\n\t\t\treturn method;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Member & Type Parameter Lookup\r\n\r\n\t\tpublic override KnownRoutine GetConstructor()\r\n\t\t{\r\n\t\t\t// Do allow incomplete types here - they won't be emitted but just for sake of consistent error reporting.\r\n\t\t\t// Debug.Assert(IsComplete);\r\n\r\n\t\t\tKnownRoutine result = this.Constructor;\r\n\t\t\tif (result == null && Base != null) return Base.GetConstructor();\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Reflection\r\n\r\n\t\tprivate void ReflectRealType()\r\n\t\t{\r\n\t\t\tType type = this.RealType;\r\n\r\n\t\t\t// the type has been declared conditionally when compiled:\r\n\t\t\tif (IsRealConditionalDefinition(RealType))\r\n\t\t\t{\r\n\t\t\t\tthis.version.Index = VersionInfo.ReflectedRuntimeActivated;\r\n\t\t\t}\r\n\r\n\t\t\t// <typeDesc> readonly static field\r\n\t\t\ttypeDescFieldInfo = type.GetField(\r\n\t\t\t\tPhpObjectBuilder.TypeDescFieldName,\r\n\t\t\t\tBindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);\r\n\r\n\t\t\tif (!IsInterface)\r\n\t\t\t{\r\n\t\t\t\tif (!(Root is PhpType))\r\n\t\t\t\t{\r\n\t\t\t\t\t// <proxy> readonly instance field\r\n\t\t\t\t\tproxyFieldInfo = type.GetField(\r\n\t\t\t\t\t\tPhpObjectBuilder.ProxyFieldName,\r\n\t\t\t\t\t\tBindingFlags.NonPublic | BindingFlags.Instance);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// clrConstructor is reflected lazily\r\n\r\n\t\t\t\tstaticFieldInitMethodInfo = type.GetMethod(\r\n\t\t\t\t\tPhpObjectBuilder.StaticFieldInitMethodName,\r\n\t\t\t\t\tBindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tTypes.ScriptContext,\r\n\t\t\t\t\tnull);\r\n\r\n\t\t\t\tshortConstructorInfo = type.GetConstructor(\r\n\t\t\t\t\tBindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tPhpObjectBuilder.ShortConstructorParamTypes,\r\n\t\t\t\t\tnull);\r\n\r\n\t\t\t\tlongConstructorInfo = type.GetConstructor(\r\n\t\t\t\t\tBindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tPhpObjectBuilder.LongConstructorParamTypes,\r\n\t\t\t\t\tnull);\r\n\r\n#if !SILVERLIGHT\r\n\t\t\t\tif (!ExtendsClrType)\r\n\t\t\t\t{\r\n\t\t\t\t\tdeserializingConstructorInfo = type.GetConstructor(\r\n\t\t\t\t\t\tBindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tPhpObjectBuilder.DeserializingConstructorParamTypes,\r\n\t\t\t\t\t\tnull);\r\n\t\t\t\t}\r\n#endif\r\n\t\t\t}\r\n\r\n\t\t\t// perform full reflect of fields and methods\r\n\t\t\tPhpTypeDesc.FullReflect();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission: DefineBuilders, Bake\r\n\r\n\t\tpublic override MethodInfo/*!*/ DefineRealMethod(string/*!*/ name, MethodAttributes attributes,\r\n\t\t  Type/*!*/ returnType, Type[]/*!*/ parameterTypes)\r\n\t\t{\r\n\t\t\treturn RealTypeBuilder.DefineMethod(name, attributes, returnType, parameterTypes);\r\n\t\t}\r\n\r\n\t\tinternal override void DefineBuilders()\r\n\t\t{\r\n\t\t\t// skip types with builders already defined, incomplete types, \r\n\t\t\t// types with unreachable declaration and types inside incomplete class (won't be emitted)\r\n\t\t\tif (RealType == null && IsComplete && !declaration.IsUnreachable && !declaration.IsInsideIncompleteClass)\r\n\t\t\t{\r\n\t\t\t\t// type builder (define base type and interfaces later to prevent loops in cases like A<T> extends/implements B<A>):\r\n\t\t\t\tTypeBuilder type_builder = this.DeclaringModuleBuilder.DefineRealType(\r\n\t\t\t\t\tqualifiedName.ToClrNotation(GenericParams.Length, version.Index),\r\n\t\t\t\t\tEnums.ToTypeAttributes(TypeDesc.MemberAttributes));\r\n\r\n\t\t\t\ttype_builder.SetCustomAttribute(AttributeBuilders.ImplementsType);\r\n\t\t\t\tEnums.DefineCustomAttributes(TypeDesc.MemberAttributes, type_builder);\r\n\r\n\t\t\t\t// generic parameters:\r\n\t\t\t\tGenericTypeParameterBuilder[] generic_param_builders = null;\r\n\t\t\t\tif (GenericParams.Length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring[] generic_param_names = new string[GenericParams.Length];\r\n\r\n\t\t\t\t\tfor (int i = 0; i < GenericParams.Length; i++)\r\n\t\t\t\t\t\tgeneric_param_names[i] = GetGenericParameter(i).Name.Value;\r\n\r\n\t\t\t\t\tgeneric_param_builders = type_builder.DefineGenericParameters(generic_param_names);\r\n\r\n\t\t\t\t\tfor (int i = 0; i < GenericParams.Length; i++)\r\n\t\t\t\t\t\tGetGenericParameter(i).DefineBuildersWithinType(generic_param_builders[i]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// set the builder to the type-desc so that the base types can refer to it in their DefineBuilders routine:\r\n\t\t\t\tthis.TypeDesc.DefineBuilder(type_builder);\r\n\r\n\t\t\t\t// base type:\r\n\t\t\t\tif (Base != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tBase.DefineBuilders();\r\n\t\t\t\t\tDebug.Assert(Base.RealType != null);\r\n\t\t\t\t\ttype_builder.SetParent(Base.RealType);\r\n\t\t\t\t}\r\n\t\t\t\telse if (!IsInterface)\r\n\t\t\t\t{\r\n\t\t\t\t\ttype_builder.SetParent(typeof(PhpObject));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// implemented interfaces:\r\n\t\t\t\tfor (int i = 0; i < builder.BaseInterfaces.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tDTypeDesc iface = builder.BaseInterfaces[i];\r\n\t\t\t\t\tiface.Type.DefineBuilders();\r\n\t\t\t\t\tDebug.Assert(iface.RealType != null);\r\n\t\t\t\t\ttype_builder.AddInterfaceImplementation(iface.RealType);\r\n\t\t\t\t}\r\n\r\n                // implements IPhpDestructable (can be implemented in every extending class) if destructor can be called anywhere\r\n                DRoutineDesc destructor;\r\n                if ((destructor = this.TypeDesc.GetMethod(Name.SpecialMethodNames.Destruct)) != null && destructor.IsPublic && !destructor.IsStatic)\r\n                    type_builder.AddInterfaceImplementation(typeof(IPhpDestructable));\r\n                \r\n\t\t\t\t// define fully open type:\r\n\t\t\t\tif (generic_param_builders != null)\r\n\t\t\t\t\tbuilder.RealOpenType = type_builder.MakeGenericType(generic_param_builders);\r\n\t\t\t\telse\r\n\t\t\t\t\tbuilder.RealOpenType = type_builder;\r\n\r\n\t\t\t\t// declared members:\r\n\t\t\t\tforeach (DRoutineDesc method_desc in this.TypeDesc.Methods.Values)\r\n\t\t\t\t\tmethod_desc.PhpMethod.DefineBuilders();\r\n\r\n\t\t\t\tforeach (DPropertyDesc property_desc in this.TypeDesc.Properties.Values)\r\n\t\t\t\t\tproperty_desc.PhpField.DefineBuilders();\r\n\r\n\t\t\t\tforeach (DConstantDesc constant_desc in this.TypeDesc.Constants.Values)\r\n\t\t\t\t\tconstant_desc.ClassConstant.DefineBuilders();\r\n\r\n\t\t\t\t// helpers:\r\n\r\n\t\t\t\t// <typeDesc> readonly static field\r\n\t\t\t\tFieldBuilder fb = type_builder.DefineField(PhpObjectBuilder.TypeDescFieldName,\r\n\t\t\t\t\tTypes.PhpTypeDesc[0], FieldAttributes.Public | FieldAttributes.InitOnly | FieldAttributes.Static);\r\n#if !SILVERLIGHT\r\n\t\t\t\tfb.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\r\n\t\t\t\ttypeDescFieldInfo = fb;\r\n\r\n\t\t\t\t// check whether we need the <proxy> field\r\n\t\t\t\tif (!(Root is PhpType))\r\n\t\t\t\t{\r\n\t\t\t\t\tDType type = Base;\r\n\t\t\t\t\twhile (type != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpType php_type = type as PhpType;\r\n\t\t\t\t\t\tif (php_type != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// <proxy> field declared by a base\r\n\t\t\t\t\t\t\tproxyFieldInfo = php_type.proxyFieldInfo;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttype = type.Base;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (proxyFieldInfo == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// <proxy> readonly instance field\r\n\t\t\t\t\t\tfb = type_builder.DefineField(PhpObjectBuilder.ProxyFieldName, typeof(ClrObject),\r\n\t\t\t\t\t\t\tFieldAttributes.Family | FieldAttributes.InitOnly);\r\n#if !SILVERLIGHT\r\n\t\t\t\t\t\tfb.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n#endif\r\n\t\t\t\t\t\tproxyFieldInfo = fb;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// static constructor - will contain <typeDesc> and class constant initialization\r\n\t\t\t\tbuilder.StaticCtorEmitter = new ILEmitter(type_builder.DefineTypeInitializer());\r\n\r\n\t\t\t\tif (!IsInterface)\r\n\t\t\t\t{\r\n\t\t\t\t\t// method builder for static fields initialization method\r\n\t\t\t\t\tstaticFieldInitMethodInfo = PhpObjectBuilder.DefineStaticFieldInitMethod(type_builder);\r\n\r\n\t\t\t\t\t// constructor builders\r\n\t\t\t\t\tshortConstructorInfo = type_builder.DefineConstructor(\r\n\t\t\t\t\t\tPhpObjectBuilder.ShortConstructorAttributes, CallingConventions.Standard,\r\n\t\t\t\t\t\tPhpObjectBuilder.ShortConstructorParamTypes);\r\n\r\n\t\t\t\t\tlongConstructorInfo = type_builder.DefineConstructor(\r\n\t\t\t\t\t\tPhpObjectBuilder.LongConstructorAttributes, CallingConventions.Standard,\r\n\t\t\t\t\t\tPhpObjectBuilder.LongConstructorParamTypes);\r\n\r\n#if !SILVERLIGHT\r\n\t\t\t\t\tShortConstructorBuilder.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n\t\t\t\t\tLongConstructorBuilder.SetCustomAttribute(AttributeBuilders.EditorBrowsableNever);\r\n\r\n\t\t\t\t\tif (!ExtendsClrType)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// do not add the deserializing constructor if we are extending a CLR type\r\n\t\t\t\t\t\tdeserializingConstructorInfo = type_builder.DefineConstructor(\r\n\t\t\t\t\t\t\tPhpObjectBuilder.DeserializingConstructorAttributes, CallingConventions.Standard,\r\n\t\t\t\t\t\t\tPhpObjectBuilder.DeserializingConstructorParamTypes);\r\n\t\t\t\t\t}\r\n#endif\r\n\r\n\t\t\t\t\tPhpObjectBuilder.EmitInitFieldHelpers(this);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.EmitTypeDescInitialization();\r\n                this.EmitSetStaticInit();\r\n\t\t\t}\r\n\r\n\t\t\t// define builders for the other versions:\r\n\t\t\tif (version.Next != null)\r\n\t\t\t\t((PhpType)version.Next).DefineBuilders();\r\n\t\t}\r\n\r\n\t\tprivate void EmitTypeDescInitialization()\r\n\t\t{\r\n\t\t\tILEmitter il = builder.StaticCtorEmitter;\r\n\r\n\t\t\til.Emit(OpCodes.Ldtoken, builder.RealOpenType);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpTypeDesc_Create);\r\n\t\t\til.Emit(OpCodes.Stsfld, this.typeDescFieldInfo);\r\n\t\t}\r\n\r\n        private void EmitSetStaticInit()\r\n        {\r\n            // thread static field init\r\n            if (this.Builder.HasThreadStaticFields)\r\n            {\r\n                ILEmitter il = builder.StaticCtorEmitter;\r\n\r\n                // [ typeDesc.SetStaticInit(new Action<ScriptContext>(__tsinit)) ]\r\n\r\n                il.Emit(OpCodes.Ldsfld, this.typeDescFieldInfo);\r\n                il.Emit(OpCodes.Ldnull);\r\n                il.Emit(OpCodes.Ldftn, this.StaticFieldInitMethodInfo);\r\n                il.Emit(OpCodes.Newobj, Constructors.Action_ScriptContext);\r\n\r\n                il.Emit(OpCodes.Call, Methods.SetStaticInit);\r\n            }\r\n        }\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Returns a plain type-desc corresponding to the baked real type or a <B>null</B> reference if the type \r\n\t\t/// cannot be baked due to its indefiniteness.\r\n\t\t/// </summary>\r\n\t\tinternal PhpTypeDesc Bake()\r\n\t\t{\r\n\t\t\t// skip when we don't have a builder (already baked):\r\n\t\t\tif (builder != null && builder.BakedTypeDesc != null)\r\n\t\t\t\treturn builder.BakedTypeDesc;\r\n\r\n\t\t\t// bake the other versions:\r\n\t\t\tif (version.Next != null)\r\n\t\t\t\t((PhpType)version.Next).Bake();\r\n\r\n\t\t\t// incomplete types are converted to eval, the type may however be conditionally declared:\r\n\t\t\tif (!IsComplete)\r\n\t\t\t\treturn null;\r\n\r\n\t\t\tif (!(RealType is TypeBuilder))\r\n\t\t\t\treturn this.PhpTypeDesc;\r\n\r\n\t\t\t// bake base type:\r\n\t\t\tif (Base != null)\r\n\t\t\t{\r\n\t\t\t\tPhpType php_base = Base as PhpType;\r\n\t\t\t\tif (php_base != null)\r\n\t\t\t\t\tphp_base.Bake();\r\n\t\t\t}\r\n\r\n\t\t\t// bake implemented interfaces:\r\n\t\t\tfor (int i = 0; i < builder.BaseInterfaces.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tPhpType php_iface = builder.BaseInterfaces[i].Type as PhpType;\r\n\t\t\t\tif (php_iface != null)\r\n\t\t\t\t\tphp_iface.Bake();\r\n\t\t\t}\r\n\r\n\t\t\tif (!IsInterface)\r\n\t\t\t\tPhpObjectBuilder.EmitClassConstructors(this);\r\n\r\n\t\t\t// finish static constructor:\r\n\t\t\tbuilder.StaticCtorEmitter.Emit(OpCodes.Ret);\r\n\r\n\t\t\tif (!IsInterface)\r\n\t\t\t{\r\n\t\t\t\t// finish <InitializeInstanceFields> and __InitializeStaticFields methods\r\n\t\t\t\tbuilder.InstanceFieldInitEmitter.Emit(OpCodes.Ret);\r\n\t\t\t\tStaticFieldInitMethodBuilder.GetILGenerator().Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\r\n\t\t\t// generate type desc population (methods, fields, constants)\r\n\t\t\tPhpObjectBuilder.GenerateTypeDescPopulation(this);\r\n\r\n\t\t\tType baked_type = this.RealTypeBuilder.CreateType();\r\n\r\n\t\t\t// set the baked type to the current type desc; although the next line replaces the current \r\n\t\t\t// type desc with a new one, we need to keep the old one consistent -- the other types being baked \r\n\t\t\t// can still access the old type desc: \r\n\t\t\tTypeDesc.Bake(baked_type);\r\n\r\n\t\t\t// Initiate re-reflection.\r\n\t\t\t// PhpTypeDesc is thrown away and a plain new is added - a subsequent access reflects it.\r\n\t\t\t// Note that every type referring this type in its tables (via PhpType or PhpTypeDesc)\r\n\t\t\t// have to be baked as well, so there are no references that needs to be rewritten.\r\n\t\t\tbuilder.BakedTypeDesc = (PhpTypeDesc)DTypeDesc.Recreate(baked_type.TypeHandle, true);\r\n\t\t\t\r\n\t\t\treturn builder.BakedTypeDesc;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Emission: Operations\r\n\r\n\t\tinternal override PhpTypeCode EmitNew(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType,\r\n\t\t  DRoutine/*!*/ constructor, CallSignature callSignature, bool runtimeVisibilityCheck)\r\n\t\t{\r\n\t\t\tILEmitter il = codeGenerator.IL;\r\n\r\n\t\t\tif (IsDefinite)\r\n\t\t\t{\r\n\t\t\t\t// s-decl type //\r\n\r\n\t\t\t\tif (constructor.IsUnknown)\r\n\t\t\t\t{\r\n\t\t\t\t\t// no (visible) PHP constructor //\r\n\r\n\t\t\t\t\t// just instantiate the class:\r\n\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\til.LdcI4(1);\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, MakeConstructed(ShortConstructorInfo, constructedType));\r\n\t\t\t\t}\r\n\t\t\t\telse if (!runtimeVisibilityCheck)\r\n\t\t\t\t{\r\n\t\t\t\t\t// surely visible constructor //\r\n\t\t\t\t\tPhpMethod php_ctor = constructor as PhpMethod;\r\n\r\n\t\t\t\t\tif (ExtendsClrType)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// prepare the stack before newobjing the instance\r\n\r\n\t\t\t\t\t\tcallSignature.EmitLoadOnPhpStack(codeGenerator);\r\n\r\n\t\t\t\t\t\t// newobj\r\n\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\t\til.LdcI4(1);\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, MakeConstructed(ShortConstructorInfo, constructedType));\r\n\r\n\t\t\t\t\t\tif (php_ctor != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// call the PHP ctor\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Call, MakeConstructed(php_ctor.ArgLessInfo, constructedType));\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// just remove the frame from stack\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.RemoveFrame);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// no CLR constructors in the way\r\n\r\n\t\t\t\t\t\t// newobj\r\n\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\t\til.LdcI4(1);\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, MakeConstructed(ShortConstructorInfo, constructedType));\r\n                        if (php_ctor.ArgFullInfo != null && !php_ctor.IsArgsAware)\r\n                        {\r\n                            // invoke the arg-full version of the constructor:\r\n                            il.Emit(OpCodes.Dup);\r\n                            codeGenerator.EmitLoadScriptContext();\r\n                            callSignature.EmitLoadOnEvalStack(codeGenerator, php_ctor);\r\n                            il.Emit(OpCodes.Call, php_ctor.ArgFullInfo);\r\n                            il.Emit(OpCodes.Pop);\r\n                        }\r\n                        else\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// invoke the arg-less version of the constructor:\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\r\n\t\t\t\t\t\t\tcallSignature.EmitLoadOnPhpStack(codeGenerator);\r\n\t\t\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Ldfld, Fields.ScriptContext_Stack);\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Call, MakeConstructed(php_ctor.ArgLessInfo, constructedType));\r\n\t\t\t\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// a possibly visible PHP constructor //\r\n\r\n\t\t\t\t\tcallSignature.EmitLoadOnPhpStack(codeGenerator);\r\n\r\n\t\t\t\t\t// invoke the (ScriptContext, DTypeDesc) constructor that will resolve PHP\r\n\t\t\t\t\t// constructor and the visibility at runtime\r\n\t\t\t\t\tcodeGenerator.EmitLoadScriptContext();\r\n\t\t\t\t\tcodeGenerator.EmitLoadClassContext();\r\n\t\t\t\t\til.Emit(OpCodes.Newobj, MakeConstructed(LongConstructorInfo, constructedType));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// remember that we have just initialized class_entry's static fields\r\n\t\t\t\tif (!il.IsFeatureControlFlowPrecedent(this)) il.MarkFeature(this);\r\n\r\n\t\t\t\tif (!(Root is PhpType))\r\n\t\t\t\t{\r\n\t\t\t\t\t// the newly created real object must be wrapped\r\n\t\t\t\t\t// TODO: optimize by introducing an artificial IRealObject interface\r\n\t\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_Wrap);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitNewOperator(null, null, (constructedType != null) ? constructedType : (DType)this, callSignature);\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpTypeCode.Object;\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInstanceOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (IsDefinite)\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitDirectInstanceOf((constructedType != null) ? constructedType : (DType)this);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitInstanceOfOperator(null, null, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitTypeOf(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n\t\t{\r\n\t\t\tif (IsDefinite)\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitDirectTypeOf((constructedType != null) ? constructedType : (DType)this);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitTypeOfOperator(null, null, (constructedType != null) ? constructedType : (DType)this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitLoadTypeDesc(CodeGenerator/*!*/ codeGenerator, ResolveTypeFlags flags)\r\n\t\t{\r\n\t\t\tif (IsDefinite)\r\n\t\t\t{\r\n\t\t\t\tif (IsGeneric || typeDescFieldInfo == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.EmitLoadTypeDesc(this.RealType);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.IL.Emit(OpCodes.Ldsfld, typeDescFieldInfo);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.EmitLoadTypeDescOperator(this.FullName, null, flags);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal override void EmitInvokeConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType, ConstructedType constructedType)\r\n\t\t{\r\n            if (ShortConstructorInfo != null)\r\n            {\r\n                // [ base(arg1,arg2) ]\r\n                il.Ldarg(FunctionBuilder.ArgThis);\r\n                il.Ldarg(FunctionBuilder.ArgContextInstance);\r\n                il.Ldarg(2);\r\n\r\n                il.Emit(OpCodes.Call, MakeConstructed(ShortConstructorInfo, constructedType));\r\n            }\r\n\t\t}\r\n\r\n#if !SILVERLIGHT\r\n\t\tinternal override void EmitInvokeDeserializationConstructor(ILEmitter/*!*/ il, PhpType/*!*/ derivedType,\r\n\t\t\tConstructedType constructedType)\r\n\t\t{\r\n            if (DeserializingConstructorInfo != null)\r\n            {\r\n                // [ base(arg0, arg1, arg2) ]\r\n                il.Ldarg(FunctionBuilder.ArgThis);\r\n                il.Emit(OpCodes.Ldarg_1);\r\n                il.Emit(OpCodes.Ldarg_2);\r\n\r\n                il.Emit(OpCodes.Call, MakeConstructed(DeserializingConstructorInfo, constructedType));\r\n            }\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call that declares this type to <see cref=\"ApplicationContext\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal void EmitAutoDeclareOnApplicationContext(ILEmitter/*!*/ il, IPlace/*!*/ contextPlace)\r\n\t\t{\r\n\t\t\tcontextPlace.EmitLoad(il);\r\n\r\n\t\t\tif (IsGeneric)\r\n\t\t\t{\r\n\t\t\t\t// generic types registeres the template:\r\n\t\t\t\til.Emit(OpCodes.Ldtoken, RealType);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, FullName);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ApplicationContext.DeclareType_Handle);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// non-generic types can use their <typeDesc> field:\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, TypeDescFieldInfo);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, FullName);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ApplicationContext.DeclareType_TypeDesc);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits call that declares this type to <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal void EmitAutoDeclareOnScriptContext(ILEmitter/*!*/ il, IPlace/*!*/ contextPlace)\r\n\t\t{\r\n            Debug.Assert(this.IsComplete);\r\n\r\n\t\t\tcontextPlace.EmitLoad(il);\r\n\r\n\t\t\tif (IsGeneric)\r\n\t\t\t{\r\n\t\t\t\t// generic types registeres the template:\r\n\t\t\t\til.Emit(OpCodes.Ldtoken, RealType);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, FullName);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.DeclareType_Handle);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// non-generic types can use their <typeDesc> field:\r\n\t\t\t\til.Emit(OpCodes.Ldsfld, TypeDescFieldInfo);\r\n\t\t\t\til.Emit(OpCodes.Ldstr, FullName);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.DeclareType_TypeDesc);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal void EmitDeclareIncompleteOnScriptContext(ILEmitter/*!*/ il, IPlace/*!*/ contextPlace)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(this.IncompleteClassDeclarationId));\r\n            Debug.Assert(this.IncompleteClassDeclareMethodInfo != null);\r\n\r\n            if (!this.Declaration.IsConditional &&\r\n                this.Base != null && this.Builder.BaseInterfaces.Count == 0)    // for now, only types without interfaces\r\n            {\r\n                // if (<context>.DeclareIncompleteTypeHelper(<uid>, type.Base))\r\n                //     CALL <type.IncompleteClassDeclareMethodInfo>(<context>)\r\n\r\n                var end_if = il.DefineLabel();\r\n\r\n                contextPlace.EmitLoad(il);\r\n                il.Emit(OpCodes.Ldstr, this.IncompleteClassDeclarationId);\r\n                il.Emit(OpCodes.Ldstr, this.Base.FullName);\r\n                il.Emit(OpCodes.Call, Methods.ScriptContext.DeclareIncompleteTypeHelper);\r\n                il.Emit(OpCodes.Brfalse, end_if);\r\n                if (true)\r\n                {\r\n                    contextPlace.EmitLoad(il);\r\n                    il.Emit(OpCodes.Call, this.IncompleteClassDeclareMethodInfo);\r\n                }\r\n                il.MarkLabel(end_if);\r\n                il.ForgetLabel(end_if);\r\n            }                        \r\n        }\r\n\r\n        internal override DTypeSpec GetTypeSpec(CompilationSourceUnit/*!*/ referringUnit)\r\n\t\t{\r\n\t\t\tif (IsDefinite)\r\n\t\t\t{\r\n\t\t\t\treturn new DTypeSpec(RealType, referringUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.RealModuleBuilder);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn new DTypeSpec(FullName, referringUnit.NamingContextFieldBuilder,\r\n\t\t\t\t\treferringUnit.CompilationUnit.ModuleBuilder.AssemblyBuilder.RealModuleBuilder);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal void EmitThreadStaticInit(CodeGenerator/*!*/ codeGenerator, ConstructedType constructedType)\r\n        {\r\n            ILEmitter il = codeGenerator.IL;\r\n\r\n            DType feature = ((DType)constructedType ?? (DType)this);\r\n\r\n            // ensure that the field has been initialized for this request by invoking __InitializeStaticFields\r\n            if (!il.IsFeatureControlFlowPrecedent(feature))\r\n            {\r\n                codeGenerator.EmitLoadScriptContext();\r\n                il.Emit(OpCodes.Call, DType.MakeConstructed(this.StaticFieldInitMethodInfo, constructedType));\r\n\r\n                // remember that we have just initialized class_entry's static fields\r\n                il.MarkFeature(feature);\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Custom Attributes\r\n\r\n\t\tprivate AttributeUsageAttribute _customAttributeUsage = null;\r\n\t\tprivate bool _customAttributeUsageSet = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets attribute usage attribute applied on the type (if any).\r\n\t\t/// </summary>\r\n\t\tpublic override AttributeUsageAttribute GetCustomAttributeUsage(out bool isDefinite)\r\n\t\t{\r\n\t\t\tif (!_customAttributeUsageSet && RealType != null)\r\n\t\t\t{\r\n\t\t\t\tobject[] attrs = this.RealType.GetCustomAttributes(typeof(AttributeUsageAttribute), true);\r\n\t\t\t\tif (attrs.Length == 1) _customAttributeUsage = (AttributeUsageAttribute)attrs[0];\r\n\t\t\t\t_customAttributeUsageSet = true;\r\n\t\t\t}\r\n\r\n\t\t\tisDefinite = _customAttributeUsageSet;\r\n\t\t\treturn _customAttributeUsage;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the analyzer when it determines the <see cref=\"AttributeUsageAttribute\"/> is (not) defined on the type.\r\n\t\t/// </summary>\r\n\t\tinternal void SetCustomAttributeUsage(AttributeUsageAttribute customAttributeUsage)\r\n\t\t{\r\n\t\t\t_customAttributeUsage = customAttributeUsage;\r\n\t\t\t_customAttributeUsageSet = true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug\r\n\r\n\t\tinternal string DebuggerDisplay\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn MakeFullGenericName() + ((declaration != null) ? \" \" + declaration.Span.ToString() : \"\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\tinternal sealed class PhpTypeBuilder\r\n\t{\r\n\t\tpublic PhpType/*!*/ Type { get { return type; } }\r\n\t\tprivate readonly PhpType/*!*/ type;\r\n\r\n\t\tinternal ExportAttribute ExportInfo\r\n\t\t{\r\n\t\t\tget { return exportInfo; }\r\n\t\t\tset /* TypeDecl */ { exportInfo = value; }\r\n\t\t}\r\n\t\tprivate ExportAttribute exportInfo;\r\n\r\n\r\n\t\t// filled by analysis:\r\n\t\tpublic CallSignature BaseCtorCallSignature;\r\n\t\tpublic int BaseCtorCallOverloadIndex;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Interfaces implemented directly by this type.\r\n\t\t/// Set by Pre-Analysis of the TypeDecl.\r\n\t\t/// </summary>\r\n\t\tinternal List<DTypeDesc> BaseInterfaces { get { return baseInterfaces; } set { baseInterfaces = value; } }\r\n\t\tprivate List<DTypeDesc> baseInterfaces;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Used by <c>InheritanceAnalysis</c>.\r\n\t\t/// </summary>\r\n\t\tinternal int InheritanceAnalysisDfsDepth;\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of \"ghost implementations\" mapping abstract member (key) to its implementation (value).\r\n\t\t/// Ghost implementations are stubs that are required to be added to the class\r\n\t\t/// in order to tackle CLR inability to bind abstract method/property defined in interface I with\r\n\t\t/// its implementation defined in a superclass B of the class A implementing the interface.\r\n\t\t/// (class B { f() {} }, interface I { f() { } }, class A extends B implements I { }). \r\n\t\t/// </summary>\r\n\t\tinternal List<KeyValuePair<DMemberRef, DMemberRef>> GhostImplementations { get { return ghostImplementations; } }\r\n\t\tinternal /* protected */ List<KeyValuePair<DMemberRef, DMemberRef>> ghostImplementations = null;\r\n\r\n\t\tinternal void AddGhostImplementation(DMemberRef/*!*/ abstractMember, DMemberRef/*!*/ implementation)\r\n\t\t{\r\n\t\t\tif (ghostImplementations == null)\r\n\t\t\t\tghostImplementations = new List<KeyValuePair<DMemberRef, DMemberRef>>();\r\n\r\n\t\t\tghostImplementations.Add(new KeyValuePair<DMemberRef, DMemberRef>(abstractMember, implementation));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// <B>True</B> if the type contains at least one thread-static field.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasThreadStaticFields;\r\n\r\n\r\n\t\t// filled by DefineBuilders\r\n\t\tpublic ILEmitter StaticCtorEmitter;\r\n\r\n\t\tpublic MethodBuilder InstanceFieldInit;\r\n\t\tpublic ILEmitter InstanceFieldInitEmitter;\r\n\r\n\t\tpublic List<StubInfo> ClrConstructorStubs;\r\n\r\n\t\t// filled by Bake:\r\n\t\tpublic PhpTypeDesc BakedTypeDesc { get { return bakedTypeDesc; } set { bakedTypeDesc = value; } }\r\n\t\tprivate PhpTypeDesc bakedTypeDesc;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fully open constructed real type (type arguments are filled with the type parameters).\r\n\t\t/// </summary>\r\n\t\tpublic Type RealOpenType\r\n\t\t{\r\n\t\t\tget { return realOpenType; }\r\n\t\t\tset /* PhpType.DefineBuilders */ { realOpenType = value; }\r\n\t\t}\r\n\t\tprivate Type realOpenType;\r\n\r\n\t\tpublic PhpTypeBuilder(PhpType/*!*/ type)\r\n\t\t{\r\n\t\t\tDebug.Assert(type != null);\r\n\t\t\tthis.type = type;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/RequestContext.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Web.Caching;\r\nusing System.Web.SessionState;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Runtime.Remoting.Messaging;\r\n\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents a set of data associated with the current web request targeting PHP scripts.\r\n\t/// </summary>\r\n\tpublic sealed partial class RequestContext : IDisposable, ILogicalThreadAffinative\r\n\t{\r\n\t\t#region Initialization etc.\r\n\r\n\t\tstatic RequestContext()\r\n\t\t{\r\n\t\t\tif (HttpContext.Current != null)\r\n\t\t\t\tDebugUtils.WebInitialize();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The request context associated with the current thread executing the request. \r\n\t\t/// Set by <see cref=\"Initialize\"/> method when the request starts.\r\n\t\t/// Contains a <B>null</B> reference when the current thread is not executing any web request \r\n\t\t/// (or prior to the call to <see cref=\"Initialize\"/> method).\r\n\t\t/// </summary>\r\n\t\tpublic static RequestContext CurrentContext { get { return currentContext; } }\r\n\t\t[ThreadStatic]\r\n\t\tprivate static RequestContext currentContext = null;\r\n\r\n\t\tprivate RequestContext(HttpContext/*!*/ httpContext)\r\n\t\t{\r\n\t\t\tthis.httpContext = httpContext;\r\n\t\t\tthis.connectionAborted = false;\r\n\t\t\tthis.responseFilter = null;\r\n\r\n            // Initialized on the first use (work item 13528)\r\n            // (because the HttpRequest object is not available until\r\n            // the module is actually processing an event in the Request pipeline.)\r\n            this.requestFile = null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Source file targeted by the request.\r\n        /// </summary>\r\n        public PhpSourceFile/*!*/ RequestFile\r\n        {\r\n            get\r\n            {\r\n                // called by PHP.Core.RequestHandler.ProcessRequest\r\n                if (requestFile == null)\r\n                {\r\n                    requestFile = new PhpSourceFile(\r\n                         new FullPath(HttpRuntime.AppDomainAppPath, false),\r\n                         new FullPath(httpContext.Request.PhysicalPath, false)\r\n                         );\r\n                }\r\n\r\n                return requestFile;\r\n            }\r\n        }\r\n        private PhpSourceFile/*!*/ requestFile;\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current HTTP context.\r\n\t\t/// </summary>\r\n\t\tpublic HttpContext/*!*/ HttpContext { get { return httpContext; } }\r\n\t\tprivate HttpContext/*!*/ httpContext;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Request Processing\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes the context.\r\n\t\t/// </summary>\r\n\t\tprivate void Initialize(ApplicationContext/*!*/ appContext)\r\n\t\t{\r\n\t\t\tDebug.Assert(appContext != null);\r\n\r\n\t\t\tdefaultResponseEncoding = httpContext.Response.ContentEncoding;\r\n\r\n\t\t\tscriptContext = ScriptContext.InitWebRequest(appContext, httpContext);\r\n\t\t\tTrackClientDisconnection = !scriptContext.Config.RequestControl.IgnoreUserAbort;\r\n\r\n            // Session is ended after destructing objects since PHP 5.0.5, use two-phase finalization:\r\n            scriptContext.TryDispose += () =>\r\n                {\r\n                    this.TryDisposeBeforeFinalization(); // ends session\r\n\r\n                    // finalize objects created during session closing and output finalization:\r\n                    this.scriptContext.GuardedCall<object, object>(this.scriptContext.FinalizePhpObjects, null, false);\r\n\r\n                    // Platforms-specific dispose\r\n                    this.TryDisposeAfterFinalization();  // flushes headers\r\n                };\r\n\r\n            // Platforms-specific finally dispose\r\n            scriptContext.FinallyDispose += FinallyDispose;\r\n\r\n            //\r\n\t\t\tif (RequestBegin != null) RequestBegin();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates and initializes request and script contexts associated with the current thread.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"appContext\">Application context.</param>\r\n\t\t/// <param name=\"context\">Current HTTP context.</param>\r\n\t\t/// <returns>The initialized request context.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// Request context provides PHP with the web server environment.\r\n\t\t/// It should be initialized before any PHP code is invoked within web server and finalized (disposed)\r\n\t\t/// at the end of the request. This method can be called for multiple times, however it creates and \r\n\t\t/// initializes a new request context only once per HTTP request.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// The following steps take place during the initialization (in this order):\r\n\t\t/// <list type=\"number\">\r\n\t\t///   <term>Configuration is loaded (if not loaded yet).</term>\r\n\t\t///   <term>A new instance of <see cref=\"RequestContext\"/> is created and bound to the current thread.</term>\r\n\t\t///   <term>A new instance of <see cref=\"ScriptContext\"/> is created and initialized.</term>\r\n\t\t///   <term>Event <see cref=\"RequestBegin\"/> is fired.</term>\r\n\t\t///   <term>Session is started if session auto-start confgiuration option is switched on.</term>\r\n\t\t/// </list>\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// The request context can be accessed via the returned instance or via <see cref=\"CurrentContext\"/>\r\n\t\t/// thread static field anytime between the initialization and disposal.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tpublic static RequestContext/*!*/ Initialize(ApplicationContext/*!*/ appContext, HttpContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (appContext == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"appContext\");\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\tRequestContext req_context = currentContext;\r\n\r\n\t\t\t// already initialized within the current request:\r\n\t\t\tif (req_context != null && req_context.httpContext.Timestamp == context.Timestamp)\r\n\t\t\t\treturn req_context;\r\n\r\n\t\t\tDebug.WriteLine(\"REQUEST\", \"-- started ----------------------\");\r\n\r\n\t\t\treq_context = new RequestContext(context);\r\n\t\t\tcurrentContext = req_context;\r\n\r\n\t\t\treq_context.Initialize(appContext);\r\n\r\n\t\t\treturn req_context;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Invokes <see cref=\"RequestBegin\"/>.\r\n        /// </summary>\r\n        internal static void InvokeRequestBegin()\r\n        {\r\n            var callback = RequestContext.RequestBegin;\r\n            if (callback != null)\r\n                callback();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invokes <see cref=\"RequestEnd\"/>.\r\n        /// </summary>\r\n        internal static void InvokeRequestEnd()\r\n        {\r\n            var callback = RequestContext.RequestEnd;\r\n            if (callback != null)\r\n                callback();\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finalizes (disposes) the current request context, if there is any.\r\n\t\t/// </summary>\r\n\t\tpublic static void FinalizeContext()\r\n\t\t{\r\n\t\t\tRequestContext req_context = currentContext;\r\n\t\t\tif (req_context != null) req_context.Dispose();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Temporary Per-Request Files\r\n\r\n\t\t/// <summary>\r\n\t\t/// A list of temporary files which was created during the request and should be deleted at its end.\r\n\t\t/// </summary>\r\n\t\tprivate List<string>/*!*/TemporaryFiles\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                if (this._temporaryFiles == null)\r\n                    this._temporaryFiles = new List<string>();\r\n\r\n                return this._temporaryFiles;\r\n\t\t\t}\r\n\t\t}\r\n        private List<string> _temporaryFiles;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Silently deletes all temporary files.\r\n\t\t/// </summary>\r\n\t\tprivate void DeleteTemporaryFiles()\r\n\t\t{\r\n            if (this._temporaryFiles != null)\r\n\t\t\t{\r\n                for (int i = 0; i < this._temporaryFiles.Count; i++)\r\n\t\t\t\t{\r\n                    try\r\n                    {\r\n                        File.Delete(this._temporaryFiles[i]);\r\n                    }\r\n                    catch { }\r\n\t\t\t\t}\r\n\r\n                this._temporaryFiles = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds temporary file to current handler's temp files list.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">A path to the file.</param>\r\n\t\tinternal void AddTemporaryFile(string path)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null);\r\n\t\t\tthis.TemporaryFiles.Add(path);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the given filename is a path to a temporary file\r\n\t\t/// (for example created using the filet upload mechanism).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// The stored paths are checked case-insensitively.\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\r\n\t\tpublic bool IsTemporaryFile(string path)\r\n\t\t{\r\n\t\t\tif (path == null) throw new ArgumentNullException(\"path\");\r\n            return this._temporaryFiles != null && this._temporaryFiles.IndexOf(path, FullPath.StringComparer) >= 0;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a file from a list of temporary files.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">A full path to the file.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\r\n\t\tpublic bool RemoveTemporaryFile(string path)\r\n\t\t{\r\n\t\t\tif (path == null) throw new ArgumentNullException(\"path\");\r\n            if (this._temporaryFiles == null)\r\n                return false;\r\n\r\n            var index = this._temporaryFiles.IndexOf(path, FullPath.StringComparer);\r\n            if (index >= 0)\r\n            {\r\n                this._temporaryFiles.RemoveAt(index);\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Connection\r\n\r\n\t\t#region Nested Class: Response Filter\r\n\r\n\t\t/// <summary>\r\n\t\t/// A filter installed on the response. All data sent to the client go through this filter.\r\n\t\t/// The filter checks whether the client is connected or not while flushing the data. \r\n\t\t/// If the state changes from connected to disconnected then a callback specified in the ctor is invoked.\r\n\t\t/// </summary>\r\n\t\tprivate class ResponseFilter : Stream\r\n\t\t{\r\n            private Action clientDisconnected;\r\n\t\t\tprivate HttpResponse response;\r\n\r\n\t\t\tpublic Stream Sink { get { return sink; } }\r\n\t\t\tprivate Stream sink;\r\n\r\n            public ResponseFilter(HttpResponse response, Action clientDisconnected)\r\n\t\t\t{\r\n\t\t\t\tthis.sink = response.Filter;\r\n\t\t\t\tthis.response = response;\r\n\t\t\t\tthis.clientDisconnected = clientDisconnected;\r\n\t\t\t}\r\n\r\n\t\t\tpublic override void Flush()\r\n\t\t\t{\r\n\t\t\t\tif (clientDisconnected != null && !response.IsClientConnected)\r\n\t\t\t\t{\r\n\t\t\t\t\t// throws ScriptDiedException:\r\n\t\t\t\t\tclientDisconnected();\r\n\t\t\t\t}\r\n\t\t\t\tsink.Flush();\r\n\t\t\t}\r\n\r\n\t\t\t#region Pass thru\r\n\r\n\t\t\tpublic override bool CanRead { get { return sink.CanRead; } }\r\n\t\t\tpublic override bool CanSeek { get { return sink.CanSeek; } }\r\n\t\t\tpublic override bool CanWrite { get { return sink.CanWrite; } }\r\n\r\n\t\t\tpublic override void Write(byte[] buffer, int offset, int count)\r\n\t\t\t{\r\n\t\t\t\tsink.Write(buffer, offset, count);\r\n\t\t\t}\r\n\r\n\t\t\tpublic override long Length\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn sink.Length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic override long Position\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn sink.Position;\r\n\t\t\t\t}\r\n\t\t\t\tset\r\n\t\t\t\t{\r\n\t\t\t\t\tsink.Position = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic override int Read(byte[] buffer, int offset, int count)\r\n\t\t\t{\r\n\t\t\t\treturn sink.Read(buffer, offset, count);\r\n\t\t\t}\r\n\r\n\t\t\tpublic override long Seek(long offset, SeekOrigin origin)\r\n\t\t\t{\r\n\t\t\t\treturn sink.Seek(offset, origin);\r\n\t\t\t}\r\n\r\n\t\t\tpublic override void SetLength(long value)\r\n\t\t\t{\r\n\t\t\t\tsink.SetLength(value);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the connection has been aborted due to client disconnection.\r\n\t\t/// It doesn't check, however, whether the client is connected right now.\r\n\t\t/// </summary>\r\n\t\tpublic bool ConnectionAborted { get { return connectionAborted; } }\r\n\t\tbool connectionAborted;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables tracking for client disconnecion.\r\n\t\t/// </summary>\r\n\t\tpublic bool TrackClientDisconnection\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn responseFilter != null && httpContext.Response.Filter == responseFilter;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\t// ignores the value if connection has been aborted or filtering is not supported:\r\n\t\t\t\tif (value && !connectionAborted && httpContext.Response.Filter != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (responseFilter == null)\r\n                        responseFilter = new ResponseFilter(httpContext.Response, new Action(ClientDisconnected));\r\n\r\n\t\t\t\t\thttpContext.Response.Filter = responseFilter;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (responseFilter != null)\r\n\t\t\t\t\t\thttpContext.Response.Filter = responseFilter.Sink;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate ResponseFilter responseFilter;\r\n\r\n\t\tprivate void ClientDisconnected()\r\n\t\t{\r\n\t\t\tif (httpContext == null)\r\n\t\t\t\treturn; //already disposed\r\n\t\t\t// switch off tracking; \r\n\t\t\t// if connection has been aborted then we needn't to track it any more: \r\n\t\t\tTrackClientDisconnection = false;\r\n\r\n\t\t\tconnectionAborted = true;\r\n\r\n\t\t\tthrow new ScriptDiedException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Session\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether a session has been started (i.e. session variables has been loaded).\r\n\t\t/// </summary>\r\n\t\tpublic SessionStates SessionState { get { return sessionState; } }\r\n\t\tprivate SessionStates sessionState = SessionStates.Closed;\r\n\r\n        /// <summary>\r\n\t\t/// Gets whether a session exists (i.e. has been started or is being closed).\r\n\t\t/// </summary>\r\n\t\tpublic bool SessionExists\r\n\t\t{\r\n\t\t\tget { return sessionState == SessionStates.Started || sessionState == SessionStates.Closing; }\r\n\t\t}\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Ensures that Session ID is set, so calls to Flush() don't cause issues\r\n\t\t/// (if flush() is called, session ID can't be set because cookie can't be created).\r\n\t\t/// </summary>\r\n        private void EnsureSessionId()\r\n\t\t{\r\n            Debug.Assert(httpContext != null);\r\n            if (httpContext.Session != null && httpContext.Session.IsNewSession && httpContext.Session.Count == 0)\r\n            {\r\n                // Ensure the internal method SessionStateModule.DelayedGetSessionId() is called now,\r\n                // not after the request is processed if no one uses SessionId during the request.\r\n                // Otherwise it causes an attempt to save the Session ID when the response stream was already flushed.\r\n                var ensureId = httpContext.Session.SessionID;\r\n\r\n                System.Diagnostics.Debug.WriteLine(\"SessionId: \" + ensureId);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Adds/update a SID global PHP constant.\r\n        /// </summary>\r\n        /// <remarks>The constant is non-empty only for cookie-less sessions.</remarks>\r\n        public void UpdateSID()\r\n        {\r\n            Debug.Assert(httpContext.Session != null);\r\n\r\n            scriptContext.Constants[\"SID\", false] = (httpContext.Session.IsCookieless) ? String.Concat(AspNetSessionHandler.AspNetSessionName, \"=\", httpContext.Session.SessionID) : String.Empty;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Starts session if not already started. Loads session variables from <c>HttpContext.Session</c>.\r\n\t\t/// </summary>\r\n\t\t/// <para>\r\n\t\t/// Session state (<c>HttpContext.Session</c>) has to be available at the time of the call. \r\n\t\t/// Otherwise, an exception occurs.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Starting the session inheres in importing session variables from the session data store.\r\n\t\t/// The store is specific to the current PHP session handler \r\n\t\t/// defined by configuration option <see cref=\"LocalConfiguration.SessionSection.Handler\"/>.\r\n\t\t/// In the case the ASP.NET handler is active, values from <c>HttpContext.Session</c> are imported to\r\n\t\t/// <c>$_SESSION</c> PHP auto-global variable. Hence, items added to the <c>HttpContext.Session</c> by \r\n\t\t/// non-PHP code after the start of the session will not be visible to PHP code. The <c>$_SESSION</c> variable\r\n\t\t/// has to be updated directly (see <c>ScriptContext.AutoGlobals</c>) to make these items visible to PHP.\r\n\t\t/// </para>\r\n\t\t/// <exception cref=\"SessionException\">Session state not available.</exception>\r\n\t\tpublic void StartSession()\r\n\t\t{\r\n\t\t\t// checks and changes session state:\r\n\t\t\tif (disposed || sessionState != SessionStates.Closed) return;\r\n\t\t\tsessionState = SessionStates.Starting;\r\n\r\n            if (httpContext.Session == null)\r\n\t\t\t\tthrow new SessionException(CoreResources.GetString(\"session_state_unavailable\"));\r\n\r\n            EnsureSessionId();\r\n\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\t\t\tPhpArray variables = null;\r\n\r\n            // removes dummy item keeping the session alive:\r\n            if (httpContext.Session[AspNetSessionHandler.PhpNetSessionVars] as string == AspNetSessionHandler.DummySessionItem)\r\n                httpContext.Session.Remove(AspNetSessionHandler.PhpNetSessionVars);\r\n\r\n\t\t\t// loads an array of session variables using the current session handler:\r\n\t\t\tvariables = scriptContext.Config.Session.Handler.Load(scriptContext, httpContext);\r\n\r\n\t\t\t// variables cannot be null:\r\n\t\t\tif (variables == null)\r\n\t\t\t\tvariables = new PhpArray();\r\n\r\n\t\t\t// sets the auto-global variable (the previous content of $_SESSION array is discarded):\r\n\t\t\tPhpReference.SetValue(ref scriptContext.AutoGlobals.Session, variables);\r\n\r\n\t\t\t// copies session variables to $GLOBALS array if necessary:\r\n\t\t\tif (global.GlobalVariables.RegisterGlobals)\r\n\t\t\t\tscriptContext.RegisterSessionGlobals();\r\n\r\n\t\t\t// adds a SID constant:\r\n            UpdateSID();\r\n\r\n\t\t\tsessionState = SessionStates.Started;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ends session, i.e. stores content of the $_SESSION array to the <c>HttpContext.Session</c> collection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"abandon\">Whether to abandon the session without persisting variables.</param>\r\n\t\t/// <exception cref=\"SessionException\">Session state not available.</exception>\r\n\t\tpublic void EndSession(bool abandon)\r\n\t\t{\r\n\t\t\t// checks and changes session state:\r\n\t\t\tif (disposed || sessionState != SessionStates.Started) return;\r\n\t\t\tsessionState = SessionStates.Closing;\r\n\r\n\t\t\tif (httpContext.Session == null)\r\n\t\t\t\tthrow new SessionException(CoreResources.GetString(\"session_state_unavailable\"));\r\n\r\n\t\t\tGlobalConfiguration global = Configuration.Global;\r\n\r\n\t\t\tPhpArray variables = PhpReference.AsPhpArray(scriptContext.AutoGlobals.Session);\r\n\t\t\tif (variables == null) variables = new PhpArray();\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (!abandon)\r\n\t\t\t\t\tscriptContext.Config.Session.Handler.Persist(variables, scriptContext, httpContext);\r\n\t\t\t\telse\r\n\t\t\t\t\tscriptContext.Config.Session.Handler.Abandoning(scriptContext, httpContext);\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tif (!abandon)\r\n\t\t\t\t{\r\n                    // if ASP.NET session state is empty then adds a dump item to preserve the session:\r\n                    if (httpContext.Session.Count == 0)\r\n                        httpContext.Session.Add(AspNetSessionHandler.PhpNetSessionVars, AspNetSessionHandler.DummySessionItem);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// abandons ASP.NET session:\r\n\t\t\t\t\thttpContext.Session.Abandon();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsessionState = SessionStates.Closed;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets a lifetime of the session cookie. \r\n\t\t/// Cookie expiration is updated after the request using this value.\r\n\t\t/// Non-positive value means infinite.\r\n\t\t/// </summary>\r\n\t\tpublic int SessionCookieLifetime\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tHttpCookie cookie = AspNetSessionHandler.GetCookie(httpContext);\r\n\r\n\t\t\t\tif (cookie != null && cookie.Expires != DateTime.MinValue)\r\n\t\t\t\t{\r\n\t\t\t\t\t// expiration time has been set when the request has been processed by ASP.NET server;\r\n\t\t\t\t\t// that shouldn't take more than half a minute so the precision is enought:\r\n\t\t\t\t\tTimeSpan span = cookie.Expires - httpContext.Timestamp;\r\n\t\t\t\t\treturn (span.Minutes < 0) ? 0 : span.Minutes;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tsessionCookieLifetime = value;\r\n\t\t\t\tsessionCookieLifetimeSet = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate int sessionCookieLifetime;\r\n\t\tprivate bool sessionCookieLifetimeSet = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Updates the session cookie expiration time using <see cref=\"SessionCookieLifetime\"/> field.\r\n\t\t/// Called at the end of the request.\r\n\t\t/// </summary>\r\n\t\tprivate void UpdateSessionCookieExpiration()\r\n\t\t{\r\n\t\t\tif (sessionCookieLifetimeSet)\r\n\t\t\t{\r\n\t\t\t\tHttpCookie cookie = AspNetSessionHandler.GetCookie(httpContext);\r\n\t\t\t\tif (cookie != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tcookie.Expires = (sessionCookieLifetime <= 0) ? DateTime.MinValue : DateTime.Now.AddMinutes(sessionCookieLifetime);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Cleanup\r\n\r\n\t\tvoid TryDisposeBeforeFinalization()\r\n\t\t{\r\n\t\t\tscriptContext.GuardedCall<object,object>((_) => { EndSession(false); return null; }, null, false);\r\n\t\t}\r\n\r\n\t\tvoid TryDisposeAfterFinalization()\r\n\t\t{\r\n\t\t\t// flushes headers (if it wasn't done earlier)\r\n            scriptContext.Headers.Flush(HttpContext);\r\n\t\t}\r\n\r\n\t\tvoid FinallyDispose()\r\n\t\t{\r\n\t\t\tDeleteTemporaryFiles();\r\n\t\t\t\r\n\t\t\t// updates session cookie expiration stamp:\r\n\t\t\tUpdateSessionCookieExpiration();\r\n\r\n\t\t\tthis.httpContext = null;\r\n\t\t\tcurrentContext = null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Compilation\r\n\r\n        internal MultiScriptAssembly[]/*!!*/GetPrecompiledAssemblies()\r\n\t\t{\r\n            return scriptContext.ApplicationContext.RuntimeCompilerManager.GetPrecompiledAssemblies();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get the precompiled script from several locations - script library database, precompiled SSA, precompiled MSA (WebPages.dll).\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">The source file of the script to retrieve.</param>\r\n        /// <returns>The <see cref=\"ScriptInfo\"/> of required script or null if such script cannot be obtained.</returns>\r\n\t\tinternal ScriptInfo GetCompiledScript(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n            return scriptContext.ApplicationContext.RuntimeCompilerManager.GetCompiledScript(sourceFile, this);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/RequestContext.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents a set of data associated with the current web request targeting PHP scripts.\r\n\t/// </summary>\r\n\tpublic sealed partial class RequestContext\r\n\t{\r\n\t\t#region Initialization & Current\r\n\r\n\t\t/// <summary>\r\n\t\t/// Allways 'null' on Silverlight.\r\n\t\t/// </summary>\r\n\t\tpublic static RequestContext CurrentContext { get { return null; } }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Cleanup\r\n\r\n\t\tvoid TryDisposeBeforeFinalization()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tvoid TryDisposeAfterFinalization()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tvoid FinallyDispose()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/RequestContext.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Emit;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents a set of data associated with the current web request targeting PHP scripts.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed partial class RequestContext\r\n\t{\r\n\t\t#region Fields, Properties, Events\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set when the context started finalization.\r\n\t\t/// </summary>\r\n\t\tprivate bool disposed = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current script context.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptContext/*!*/ ScriptContext { get { return scriptContext; } }\r\n\t\tinternal ScriptContext/*!*/ scriptContext;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the original value of response encoding set in ASP.NET configuration.\r\n\t\t/// </summary>\r\n\t\tpublic Encoding DefaultResponseEncoding { get { return defaultResponseEncoding; } }\r\n\t\tprivate Encoding defaultResponseEncoding;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An event fired on the very end of the request. \r\n\t\t/// </summary>\r\n        public static event Action RequestEnd;\r\n\r\n\t\t/// <summary>\r\n\t\t/// An event fired on the beginning of the request after the script context is initialized.\r\n\t\t/// </summary>\r\n        public static event Action RequestBegin;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Request Processing\r\n#if !SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Performs PHP inclusion on a specified script. Equivalent to <see cref=\"PHP.Core.ScriptContext.IncludeScript\"/>. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"relativeSourcePath\">\r\n\t\t/// Path to the target script source file relative to the web application root.\r\n\t\t/// </param>\r\n\t\t/// <param name=\"script\">\r\n\t\t/// Script info (i.e. type called <c>Default</c> representing the target script) or any type from \r\n\t\t/// the assembly where the target script is contained. In the latter case, the script type is searched in the \r\n\t\t/// assembly using value of <paramref name=\"relativeSourcePath\"/>.\r\n\t\t/// </param>\r\n\t\t/// <returns>The value returned by the global code of the target script.</returns>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Request context has been disposed.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"relativeSourcePath\"/> or <paramref name=\"script\"/> are <B>null</B> references.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">Script type cannot be resolved.</exception>\r\n\t\t/// <exception cref=\"InvalidScriptAssemblyException\">The target assembly is not a valid Phalanger compiled assembly.</exception>\r\n        [DebuggerNonUserCode]\r\n\t\tpublic object IncludeScript(string/*!*/ relativeSourcePath, ScriptInfo/*!*/ script)\r\n\t\t{\r\n\t\t\tif (disposed)\r\n\t\t\t\tthrow new InvalidOperationException(CoreResources.GetString(\"instance_disposed\"));\r\n\r\n            return scriptContext.IncludeScript(relativeSourcePath, script);\r\n\t\t}\r\n#endif\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finalizes (disposes) the request context.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Finalization comprises of the following actions (executed in the order):\r\n\t\t/// <list type=\"number\">\r\n\t\t/// <term>Output buffers are flushed. This action may include calls to user defined filters (see <c>ob_start</c> function).</term>\r\n\t\t/// <term>Shutdown callbacks are invoked (if added by <c>register_shutdown_function</c> function).</term>\r\n\t\t/// <term>Session is closed. User defined session handling function may be invoked (see <c>session_set_save_handler</c> function).</term>\r\n\t\t/// <term>PHP objects are destroyed.</term>\r\n\t\t/// <term>HTTP Headers are flushed (if it wasn't done earlier).</term>\r\n\t\t/// <term>PHP resources are disposed.</term>\r\n\t\t/// <term>Per-request temporary files are deleted.</term>\r\n\t\t/// <term><see cref=\"RequestEnd\"/> event is fired.</term>\r\n\t\t/// <term>Current request and script contexts are nulled.</term>\r\n\t\t/// </list>\r\n\t\t/// Multiple invocations of the method are ignored.\r\n\t\t/// Since session data need to be written to the session store (<c>HttpContext.Session</c>) this method has to be \r\n\t\t/// called before the ASP.NET session is ended for the request.\r\n\t\t/// </remarks>\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\tif (!disposed)\r\n\t\t\t{   \r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n                    ((IDisposable)scriptContext).Dispose();\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n                    if (RequestEnd != null) RequestEnd();\r\n\r\n                    // cleans this instance:\r\n\t\t\t\t\tthis.disposed = true;\r\n\t\t\t\t\tthis.scriptContext = null;\r\n\r\n\t\t\t\t\tDebug.WriteLine(\"REQUEST\", \"-- disposed ----------------------\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/RequestHandler.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Threading;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\nusing System.Web.SessionState;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Generates request handlers servicing web requests.\r\n\t/// </summary>\r\n\t/// <threadsafety instance=\"true\"/>\r\n\tpublic sealed class PageFactory : IHttpHandlerFactory\r\n\t{\r\n\t\t//internal static DateTime CurrentTimestamp;\r\n\t\t//internal static DateTime LastTimestamp;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes app domain settings.\r\n\t\t/// </summary>\r\n\t\tstatic PageFactory()\r\n\t\t{\r\n\t\t\t//Timestamp();\r\n\r\n\t\t\t// hook app-domain unload:\r\n\t\t\t// TODO (change code names of the assemblies to include the timestamp first):\r\n\t\t\tAppDomain.CurrentDomain.DomainUnload += new EventHandler(CurrentDomain_DomainUnload);\r\n\r\n\t\t\t// hook assembly load for debugging purposes:\r\n\t\t\tAppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(AssemblyLoad);\r\n\r\n\t\t\t// turns on shadow copying on compiled pages directory:\r\n            //AppDomain.CurrentDomain.SetShadowCopyPath(String.Concat(HttpRuntime.CodegenDir, \";\", HttpRuntime.BinDirectory));\r\n            //AppDomain.CurrentDomain.SetShadowCopyFiles();\r\n            AppDomain.CurrentDomain.SetupInformation.ShadowCopyDirectories = String.Concat(HttpRuntime.CodegenDir, \";\", HttpRuntime.BinDirectory);\r\n            AppDomain.CurrentDomain.SetupInformation.ShadowCopyFiles = \"true\";\r\n\r\n\t\t\tPerformance.Initialize();\r\n\r\n\t\t\t// creates a default context if not defined yet:\r\n\t\t\tApplicationContext.DefineDefaultContext(false, false, true);\r\n\t\t}\r\n\r\n\t\tstatic void CurrentDomain_DomainUnload(object sender, EventArgs e)\r\n\t\t{\r\n\t\t//  try\r\n\t\t//  {\r\n\t\t//    // write a notice to the code-gen dir that the dynamic assemblies generated by this assembly are no longer used:\r\n\t\t//    File.WriteAllText(Path.Combine(HttpRuntime.CodegenDir, CurrentTimestamp.ToString() + \".delete\"), \"\");\r\n\t\t//  }\r\n\t\t//  catch\r\n\t\t//  {\r\n\t\t//    // nop\r\n\t\t//  }\t\r\n\t\t}\r\n\r\n\t\t//private static void Timestamp()\r\n\t\t//{\r\n\t\t//  const string TimestampFile = \"Hash.web\";\r\n\r\n\t\t//  string timestamp_file = Path.Combine(HttpRuntime.CodegenDir, TimestampFile);\r\n\r\n\t\t//  CurrentTimestamp = DateTime.Now;\r\n\t\t//  try\r\n\t\t//  {\r\n\t\t//    if (File.Exists(timestamp_file))\r\n\t\t//      LastTimestamp = new DateTime(Int64.Parse(File.ReadAllText(timestamp_file)));\r\n\t\t//    else\r\n\t\t//      LastTimestamp = DateTime.MinValue;\t\r\n\t\t//  }\r\n\t\t//  catch\r\n\t\t//  {\r\n\t\t//    LastTimestamp = DateTime.MinValue;\r\n\t\t//  }\r\n\r\n\t\t//  try\r\n\t\t//  {\r\n\t\t//    File.WriteAllText(timestamp_file, CurrentTimestamp.Ticks.ToString());\r\n\t\t//  }\r\n\t\t//  catch\r\n\t\t//  {\r\n\t\t//    // nop\r\n\t\t//  }\r\n\t\t//}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The method is called by ASP.NET server to obtain <see cref=\"IHttpHandler\"/> implementor.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Returns a <see cref=\"RequestHandler\"/>.</returns>\r\n\t\tpublic IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)\r\n\t\t{\r\n\t\t\treturn new RequestHandler();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables a factory to reuse an existing handler instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handler\">The <see cref=\"IHttpHandler\"/> object to reuse.</param>\r\n\t\tpublic void ReleaseHandler(IHttpHandler handler)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called on assembly load.\r\n\t\t/// </summary>\r\n\t\tprivate static void AssemblyLoad(object sender, AssemblyLoadEventArgs args)\r\n\t\t{\r\n\t\t\tDebug.WriteLine(\"APPDOMAIN\", \"Assembly load: '{0}'\", args.LoadedAssembly.FullName);\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Process a request and stores references to objects associated with it.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tinternal sealed class RequestHandler : IHttpHandler, IRequiresSessionState\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Invoked by ASP.NET when a request comes from a client. Single threaded.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The reference to web server objects.</param>\r\n\t\t/// <exception cref=\"System.Configuration.ConfigurationErrorsException\">The configuration is invalid.</exception>\r\n\t\t/// <exception cref=\"PhpUserException\">Uncaught exception.</exception>\r\n\t\t/// <exception cref=\"PhpNetInternalException\">An internal error.</exception>\r\n\t\t/// <exception cref=\"Exception\">Uncaught exception thrown by the class library or another error occurred during request processing.</exception>\r\n        [DebuggerNonUserCode]\r\n\t\tpublic void ProcessRequest(HttpContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n            \r\n            // disables ASP.NET timeout if possible:\r\n\t\t\ttry { context.Server.ScriptTimeout = Int32.MaxValue; } catch (HttpException) { }\r\n\r\n            // default culture:\r\n\t\t\tThread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;\r\n            \r\n            using (RequestContext request_context = RequestContext.Initialize(ApplicationContext.Default, context))\r\n            {\r\n                Debug.WriteLine(\"REQUEST\", \"Processing request\");\r\n                if (request_context.ScriptContext.Config.Session.AutoStart)\r\n                    request_context.StartSession();\r\n                \r\n                ScriptInfo script = null;\r\n                try\r\n                {\r\n                    script = request_context.GetCompiledScript(request_context.RequestFile);\r\n\r\n                    if (script != null)\r\n                        request_context.IncludeScript(context.Request.PhysicalPath, script);\r\n                }\r\n                catch (PhpException)\r\n                {\r\n                    // A user code or compiler have reported a fatal error.\r\n                    // We don't want to propagate the exception to web server.\r\n                }\r\n                catch (InvalidSourceException)\r\n                {\r\n                    // the source file could not be found neither in a script library and file system\r\n                    context.Response.StatusCode = 404;\r\n                }\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether another request can reuse this instance.\r\n\t\t/// All fields are reinitialized at the beginning of the request thus the instance is reusable.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsReusable { get { return true; } }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/ArrayAccess.cs",
    "content": "/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n\t[ImplementsType]\r\n\tpublic interface ArrayAccess\r\n\t{\r\n\t\t[ImplementsMethod]\r\n\t\tobject offsetGet(ScriptContext context, object index);\r\n\r\n\t\t[ImplementsMethod]\r\n\t\tobject offsetSet(ScriptContext context, object index, object value);\r\n\r\n\t\t[ImplementsMethod]\r\n\t\tobject offsetUnset(ScriptContext context, object index);\r\n\r\n\t\t[ImplementsMethod]\r\n\t\tobject offsetExists(ScriptContext context, object index);\r\n\t}\r\n\r\n    [ImplementsType]\r\n    [Serializable]\r\n    public class SplFixedArray : PhpObject, ArrayAccess, Iterator, Countable\r\n    {\r\n        /// <summary>\r\n        /// Internal array storage. <c>null</c> reference if the size is <c>0</c>.\r\n        /// </summary>\r\n        protected object[] array = null;\r\n\r\n        /// <summary>\r\n        /// Iterator position in the array.\r\n        /// </summary>\r\n        private long position = 0;\r\n\r\n        #region Helper methods\r\n\r\n        protected void ReallocArray(long newsize)\r\n        {\r\n            Debug.Assert(newsize >= 0);\r\n\r\n            // empty the array\r\n            if (newsize == 0)\r\n            {\r\n                array = null;\r\n                return;\r\n            }\r\n\r\n            // resize the array\r\n            var newarray = new object[newsize];\r\n\r\n            // TODO: mark new elements as unsetted\r\n\r\n            if (array == null)\r\n            {\r\n                array = newarray;\r\n            }\r\n            else\r\n            {\r\n                Array.Copy(array, newarray, Math.Min(array.LongLength, newarray.LongLength));\r\n                array = newarray;\r\n            }\r\n        }\r\n\r\n        protected bool IsValidInternal()\r\n        {\r\n            return (position >= 0 && array != null && position < array.LongLength);\r\n        }\r\n\r\n        protected object SizeInternal()\r\n        {\r\n            return (array != null) ? ((array.LongLength <= int.MaxValue) ? array.Length : array.LongLength) : 0;\r\n        }\r\n\r\n        protected long ToLongHelper(object obj)\r\n        {\r\n            // allow only numeric types\r\n\r\n            if (obj is long) return (long)obj;\r\n            if (obj is int) return (int)obj;\r\n            if (obj is bool) return (long)((bool)obj ? 1 : 0);\r\n            if (obj is double) return unchecked((long)(double)obj);\r\n\r\n            return -1;\r\n        }\r\n\r\n        protected void IndexCheckHelper(ScriptContext/*!*/context, long index)\r\n        {\r\n            if (index < 0 || array == null || index >= array.LongLength)\r\n            {\r\n                Exception.ThrowSplException(\r\n                    _ctx => new RuntimeException(_ctx, true),\r\n                    context,\r\n                    CoreResources.spl_index_invalid, 0, null);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region SplFixedArray\r\n\r\n        /// <summary>\r\n        /// Constructs an <see cref=\"SplFixedArray\"/> object.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"size\">The initial array size.</param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, [Optional] object size /*= 0*/)\r\n        {\r\n            long nsize = (size == Arg.Default || size == Type.Missing) ? 0 : Core.Convert.ObjectToLongInteger(size);\r\n            if (nsize < 0)\r\n            {\r\n                PhpException.InvalidArgument(\"size\");\r\n                return null;\r\n            }\r\n            \r\n            ReallocArray(nsize);\r\n            \r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object fromArray(ScriptContext/*!*/context, object data, [Optional]object save_indexes)\r\n        {\r\n            PhpArray arrdata = data as PhpArray;\r\n            bool bindexes = (save_indexes == Arg.Default || save_indexes == Type.Missing) ? true : Core.Convert.ObjectToBoolean(save_indexes);\r\n\r\n            if (arrdata == null || arrdata.Count == 0)\r\n            {\r\n                ReallocArray(0);\r\n            }\r\n            else if (bindexes)\r\n            {\r\n                if (arrdata.StringCount > 0)\r\n                {\r\n                    // TODO: error\r\n                    return null;\r\n                }\r\n\r\n                //foreach (var pair in arrdata)\r\n                //    if (pair.Key.IsString || pair.Key.Integer < 0) ; // TODO: error\r\n\r\n                ReallocArray(arrdata.MaxIntegerKey + 1);\r\n\r\n                using (var enumerator = arrdata.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        this.array[enumerator.CurrentKey.Integer] = enumerator.CurrentValue;\r\n            }\r\n            else //if (!bindexes)\r\n            {\r\n                ReallocArray(arrdata.Count);\r\n\r\n                int i = 0;\r\n                using (var enumerator = arrdata.GetFastEnumerator())\r\n                    while (enumerator.MoveNext())\r\n                        this.array[i++] = enumerator.CurrentValue;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object toArray(ScriptContext/*!*/context)\r\n        {\r\n            if (array == null) return new PhpArray();\r\n\r\n            Debug.Assert(array.LongLength <= int.MaxValue);\r\n\r\n            PhpArray result = new PhpArray(array.Length, 0);\r\n\r\n            for (int i = 0; i < array.Length; i++)\r\n                result[i] = array[i];\r\n\r\n            return result;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getSize(ScriptContext/*!*/context)\r\n        {\r\n            return SizeInternal();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object setSize(ScriptContext/*!*/context, object size)\r\n        {\r\n            long newsize = Core.Convert.ObjectToLongInteger(size);\r\n            if (newsize < 0)\r\n            {\r\n                // TODO: error\r\n            }\r\n            else\r\n            {\r\n                ReallocArray(newsize);\r\n            }\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n        \r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region SplFixedArray\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFixedArray(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplFixedArray(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object size = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((SplFixedArray)instance).__construct(stack.Context, size);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object fromArray(object instance, PhpStack stack)\r\n        {\r\n            object data = stack.PeekValue(1);\r\n            object save_indexes = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((SplFixedArray)instance).fromArray(stack.Context, data, save_indexes);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object toArray(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFixedArray)instance).toArray(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getSize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplFixedArray)instance).getSize(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setSize(object instance, PhpStack stack)\r\n        {\r\n            object size = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplFixedArray)instance).setSize(stack.Context, size);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface ArrayAccess\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetGet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetGet(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetSet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            object value = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetSet(stack.Context, index, value);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetUnset(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetUnset(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetExists(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetExists(stack.Context, index);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Countable\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object count(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Countable)instance).count(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [ImplementsMethod]\r\n        public object rewind(ScriptContext context)\r\n        {\r\n            position = 0;\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object next(ScriptContext context)\r\n        {\r\n            position++;\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            return IsValidInternal();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            return ((position <= int.MaxValue) ? (int)position : position);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            return IsValidInternal() ? array[position] : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface ArrayAccess\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetGet(ScriptContext context, object index)\r\n        {\r\n            long i = ToLongHelper(index);\r\n            IndexCheckHelper(context, i);   // throws if the index is out of range\r\n\r\n            return array[i];\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetSet(ScriptContext context, object index, object value)\r\n        {\r\n            long i = ToLongHelper(index);\r\n            IndexCheckHelper(context, i);   // throws if the index is out of range\r\n\r\n            array[i] = value;\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetUnset(ScriptContext context, object index)\r\n        {\r\n            return offsetSet(context, index, null); // TODO: mark unsetted element\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetExists(ScriptContext context, object index)\r\n        {\r\n            long i = ToLongHelper(index);\r\n            return (i < 0 || array == null || i >= array.LongLength) ? false : (array[i] != null);  // TODO: null does not correspond to unsetted element\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Countable\r\n\r\n        [ImplementsMethod]\r\n        public virtual object count(ScriptContext context)\r\n        {\r\n            return SizeInternal();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected SplFixedArray(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// This class allows objects to work as arrays.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    [Serializable]\r\n    public class ArrayObject : PhpObject, IteratorAggregate, Traversable, ArrayAccess, Serializable, Countable\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Properties of the object have their normal functionality when accessed as list (var_dump, foreach, etc.).\r\n        /// </summary>\r\n        public const int STD_PROP_LIST = 1;\r\n\r\n        /// <summary>\r\n        /// Entries can be accessed as properties (read and write).\r\n        /// </summary>\r\n        public const int ARRAY_AS_PROPS = 2;\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ArrayObject(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ArrayObject(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayObject\r\n\r\n        /// <summary>\r\n        /// Construct a new array object.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"input\">Optional. The input parameter accepts an array or an Object.</param>\r\n        /// <param name=\"flags\">Optional. Flags to control the behaviour of the ArrayObject object. See ArrayObject::setFlags().</param>\r\n        /// <param name=\"iterator_class\">Optional. Specify the class that will be used for iteration of the ArrayObject object.</param>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, [Optional]object input, [Optional]object/*int*/flags/*= 0*/, [Optional]object/*string*/iterator_class/*= \"ArrayIterator\"*/ )\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            var input = stack.PeekValueOptional(1);\r\n            var flags = stack.PeekValueOptional(2);\r\n            var iterator_class = stack.PeekValueOptional(3);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).__construct(stack.Context, input, flags, iterator_class);\r\n        }\r\n\r\n        //public void append ( mixed $value )\r\n        //public array exchangeArray ( mixed $input )\r\n        //public array getArrayCopy ( void )\r\n        \r\n        /// <summary>\r\n        /// Appends a new value as the last element.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"value\">The value being appended.</param>\r\n        /// <remarks>This method cannot be called when the ArrayObject was constructed from an object. Use ArrayObject::offsetSet() instead.</remarks>\r\n        [ImplementsMethod]\r\n        public virtual object append(ScriptContext context, object value)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object append(object instance, PhpStack stack)\r\n        {\r\n            var value = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).append(stack.Context, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exchange the current array with another array or object.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"input\">The new array or object to exchange with the current array.</param>\r\n        /// <returns>Returns the old array.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object exchangeArray(ScriptContext context, object input)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object exchangeArray(object instance, PhpStack stack)\r\n        {\r\n            var input = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).exchangeArray(stack.Context, input);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exports the ArrayObject to an array.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <returns>Returns a copy of the array. When the ArrayObject refers to an object an array of the public properties of that object will be returned.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object getArrayCopy(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getArrayCopy(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).getArrayCopy(stack.Context);\r\n        }\r\n\r\n        //public int getFlags ( void )\r\n        //public void setFlags ( int $flags )\r\n\r\n        /// <summary>\r\n        /// Gets the behavior flags of the ArrayObject. See the ArrayObject::setFlags method for a list of the available flags.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <returns>Returns the behavior flags of the ArrayObject.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object getFlags(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getFlags(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).getFlags(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set the flags that change the behavior of the ArrayObject.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"flags\">The new ArrayObject behavior. It takes on either a bitmask, or named constants. Using named constants is strongly encouraged to ensure compatibility for future versions.</param>\r\n        [ImplementsMethod]\r\n        public virtual object setFlags(ScriptContext context, object/*int*/flags)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setFlags(object instance, PhpStack stack)\r\n        {\r\n            var flags = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).setFlags(stack.Context, flags);\r\n        }\r\n        \r\n        //public string getIteratorClass ( void )\r\n        //public void setIteratorClass ( string $iterator_class )\r\n\r\n        /// <summary>\r\n        /// Gets the class name of the array iterator that is used by ArrayObject::getIterator().\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <returns>Returns the iterator class name that is used to iterate over this object.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object getIteratorClass(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getIteratorClass(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).getIteratorClass(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the classname of the array iterator that is used by ArrayObject::getIterator().\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"iterator_class\">The classname of the array iterator to use when iterating over this object.</param>\r\n        [ImplementsMethod]\r\n        public virtual object setIteratorClass(ScriptContext context, object/*string*/iterator_class)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setIteratorClass(object instance, PhpStack stack)\r\n        {\r\n            var iterator_class = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).setIteratorClass(stack.Context, iterator_class);\r\n        }\r\n        \r\n        //public void asort ( void )\r\n        //public void ksort ( void )\r\n        //public void natcasesort ( void )\r\n        //public void natsort ( void )\r\n        \r\n        /// <summary>\r\n        /// Sorts the entries such that the keys maintain their correlation with the entries they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object asort(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object asort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).asort(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sorts the entries by key, maintaining key to entry correlations. This is useful mainly for associative arrays.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object ksort(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object ksort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).ksort(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This method is a case insensitive version of ArrayObject::natsort.\r\n        /// This method implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations. This is described as a \"natural ordering\".\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object natcasesort(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object natcasesort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).natcasesort(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This method implements a sort algorithm that orders alphanumeric strings in\r\n        /// the way a human being would while maintaining key/value associations. This is\r\n        /// described as a \"natural ordering\". An example of the difference between this\r\n        /// algorithm and the regular computer string sorting algorithms (used in ArrayObject::asort)\r\n        /// method can be seen in the example below.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object natsort(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object natsort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).natsort(stack.Context);\r\n        }\r\n\r\n        //public void uasort ( callable $cmp_function )\r\n        //public void uksort ( callable $cmp_function )\r\n\r\n        /// <summary>\r\n        /// This function sorts the entries such that keys maintain their correlation with the entry that they are associated with, using a user-defined comparison function.\r\n        /// This is used mainly when sorting associative arrays where the actual element order is significant.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"cmp_function\">Function cmp_function should accept two parameters\r\n        /// which will be filled by pairs of entries. The comparison function must return\r\n        /// an integer less than, equal to, or greater than zero if the first argument is\r\n        /// considered to be respectively less than, equal to, or greater than the second.</param>\r\n        [ImplementsMethod]\r\n        public virtual object uasort(ScriptContext context, object/*callable*/cmp_function)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object uasort(object instance, PhpStack stack)\r\n        {\r\n            var cmp_function = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).uasort(stack.Context, cmp_function);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function sorts the keys of the entries using a user-supplied comparison function. The key to entry correlations will be maintained.\r\n        /// </summary>\r\n        /// <param name=\"context\">Script Context. Cannot be null.</param>\r\n        /// <param name=\"cmp_function\">The callback comparison function.\r\n        /// Function cmp_function should accept two parameters which will be filled by\r\n        /// pairs of entry keys. The comparison function must return an integer less than,\r\n        /// equal to, or greater than zero if the first argument is considered to be\r\n        /// respectively less than, equal to, or greater than the second.</param>\r\n        [ImplementsMethod]\r\n        public virtual object uksort(ScriptContext context, object/*callable*/cmp_function)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object uksort(object instance, PhpStack stack)\r\n        {\r\n            var cmp_function = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).uksort(stack.Context, cmp_function);\r\n        }\r\n        \r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected ArrayObject(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n\r\n        #region Serializable Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object serialize(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object serialize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).serialize(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object unserialize(ScriptContext context, object data)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object unserialize(object instance, PhpStack stack)\r\n        {\r\n            var serialized = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).unserialize(stack.Context, serialized);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Countable Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object count(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object count(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).count(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IteratorAggregate Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getIterator(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getIterator(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).getIterator(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayAccess Members\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetGet(ScriptContext context, object index)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetGet(object instance, PhpStack stack)\r\n        {\r\n            var index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).offsetGet(stack.Context, index);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetSet(ScriptContext context, object index, object value)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetSet(object instance, PhpStack stack)\r\n        {\r\n            var index = stack.PeekValue(1);\r\n            var value = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).offsetSet(stack.Context, index, value);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetUnset(ScriptContext context, object index)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetUnset(object instance, PhpStack stack)\r\n        {\r\n            var index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).offsetUnset(stack.Context, index);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetExists(ScriptContext context, object index)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetExists(object instance, PhpStack stack)\r\n        {\r\n            var index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayObject)instance).offsetExists(stack.Context, index);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\tinternal class PhpArrayObject : PhpArray\r\n\t{\r\n\t\tinternal DObject ArrayAccess { get { return arrayAccess; } }\r\n\t\treadonly private DObject arrayAccess/*!*/;\r\n\r\n\t\tinternal const string offsetGet = \"offsetGet\";\r\n\t\tinternal const string offsetSet = \"offsetSet\";\r\n\t\tinternal const string offsetUnset = \"offsetUnset\";\r\n\t\tinternal const string offsetExists = \"offsetExists\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Do not call base class since we don't need to initialize <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal PhpArrayObject(DObject/*!*/ arrayAccess)\r\n\t\t{\r\n\t\t\tDebug.Assert(arrayAccess != null && arrayAccess.RealObject is ArrayAccess);\r\n\t\t\tthis.arrayAccess = arrayAccess;\r\n\t\t}\r\n\t\t\r\n\t\t#region Operators\r\n\r\n        protected override object GetArrayItemOverride(object key, bool quiet)\r\n\t\t{\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\t\t\tstack.AddFrame(key);\r\n\t\t\treturn PhpVariable.Dereference(arrayAccess.InvokeMethod(offsetGet, null, stack.Context));\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride()\r\n\t\t{\r\n\t\t\treturn GetUserArrayItemRef(arrayAccess, null, ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n        protected override PhpReference GetArrayItemRefOverride(object key)\r\n\t\t{\r\n\t\t\treturn GetUserArrayItemRef(arrayAccess, key, ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride(int key)\r\n\t\t{\r\n\t\t\treturn GetUserArrayItemRef(arrayAccess, key, ScriptContext.CurrentContext);\r\n\t\t}\r\n\r\n        protected override PhpReference/*!*/ GetArrayItemRefOverride(string key)\r\n\t\t{\r\n\t\t\treturn GetUserArrayItemRef(arrayAccess, key, ScriptContext.CurrentContext);\r\n\t\t}\t\r\n\r\n\t\tprotected override void SetArrayItemOverride(object value)\r\n\t\t{\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\t\t\tstack.AddFrame(null, value);\r\n\t\t\tarrayAccess.InvokeMethod(offsetSet, null, stack.Context);\r\n\t\t}\r\n\r\n\t\tprotected override void SetArrayItemOverride(object key, object value)\r\n\t\t{\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\t\t\tstack.AddFrame(key, value);\r\n\t\t\tarrayAccess.InvokeMethod(offsetSet, null, stack.Context);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(int key, object value)\r\n\t\t{\r\n            SetArrayItemOverride((object)key, value);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemOverride(string key, object value)\r\n\t\t{\r\n            SetArrayItemOverride((object)key, value);\r\n\t\t}\r\n\r\n        protected override void SetArrayItemRefOverride(object key, PhpReference value)\r\n\t\t{\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\t\t\tstack.AddFrame(key, value);\r\n\t\t\tarrayAccess.InvokeMethod(offsetSet, null, stack.Context);\r\n\t\t}\r\n\r\n        protected override PhpArray EnsureItemIsArrayOverride()\r\n\t\t{\r\n\t\t\treturn EnsureIndexerResultIsRefArray(null);\r\n\t\t}\r\n\t\t\r\n\t\tprotected override PhpArray EnsureItemIsArrayOverride(object key)\r\n\t\t{\r\n\t\t\t// an object behaving like an array:\r\n\t\t\treturn EnsureIndexerResultIsRefArray(key);\r\n\t\t}\r\n\r\n\t\tprotected override DObject EnsureItemIsObjectOverride(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\treturn EnsureIndexerResultIsRefObject(null, context);\r\n\t\t}\r\n\r\n        protected override DObject EnsureItemIsObjectOverride(object key, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\treturn EnsureIndexerResultIsRefObject(key, context);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls the indexer (offsetGet) and ensures that its result is an array or can be converted to an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">A key passed to the indexer.</param>\r\n\t\t/// <returns>The array (either previously existing or a created one) or a <B>null</B> reference on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The indexer doesn't return a reference (Error).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The return value cannot be converted to an array (Warning).</exception>\r\n\t\tprivate PhpArray EnsureIndexerResultIsRefArray(object key)\r\n\t\t{\r\n\t\t\tPhpReference ref_result = GetUserArrayItemRef(arrayAccess, key, ScriptContext.CurrentContext);\r\n\r\n            object new_value;\r\n            var wrappedwarray = Operators.EnsureObjectIsArray(ref_result.Value, out new_value);\r\n            if (wrappedwarray != null)\r\n            {\r\n                if (new_value != null) ref_result.Value = new_value;\r\n                return wrappedwarray;\r\n            }\r\n\r\n\t\t\t// the result is neither array nor object behaving like array:\r\n\t\t\tPhpException.VariableMisusedAsArray(ref_result.Value, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Calls the indexer (offsetGet) and ensures that its result is an <see cref=\"DObject\"/> or can be\r\n\t\t/// converted to <see cref=\"DObject\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"key\">A key passed to the indexer.</param>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <returns>The <see cref=\"DObject\"/> (either previously existing or a created one) or a <B>null</B> reference on error.</returns>\r\n\t\t/// <exception cref=\"PhpException\">The indexer doesn't return a reference (Error).</exception>\r\n\t\t/// <exception cref=\"PhpException\">The return value cannot be converted to a DObject (Warning).</exception>\r\n\t\tprivate DObject EnsureIndexerResultIsRefObject(object key, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tPhpReference ref_result = GetUserArrayItemRef(arrayAccess, key, context);\r\n\r\n\t\t\t// is the result an array:\r\n\t\t\tDObject result = ref_result.Value as DObject;\r\n\t\t\tif (result != null) return result;\r\n\r\n\t\t\t// is result empty => creates a new array and writes it back:\r\n\t\t\tif (Operators.IsEmptyForEnsure(ref_result.Value))\r\n\t\t\t{\r\n\t\t\t\tref_result.Value = result = stdClass.CreateDefaultObject(context);\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\r\n\t\t\t// the result is neither array nor object behaving like array not empty value:\r\n\t\t\tPhpException.VariableMisusedAsObject(ref_result.Value, false);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal static object GetUserArrayItem(DObject/*!*/ arrayAccess, object index, Operators.GetItemKinds kind)\r\n\t\t{\r\n\t\t\tPhpStack stack = ScriptContext.CurrentContext.Stack;\r\n\r\n\t\t\tswitch (kind)\r\n\t\t\t{\r\n\t\t\t\tcase Operators.GetItemKinds.Isset:\r\n\t\t\t\t\t// pass isset() \"\"/null to say true/false depending on the value returned from \"offsetExists\": \r\n\t\t\t\t\tstack.AddFrame(index);\r\n\t\t\t\t\treturn Core.Convert.ObjectToBoolean(arrayAccess.InvokeMethod(offsetExists, null, stack.Context)) ? \"\" : null;\r\n\r\n\t\t\t\tcase Operators.GetItemKinds.Empty:\r\n\t\t\t\t\t// if \"offsetExists\" returns false, the empty()/isset() returns false (pass null to say true/false): \r\n\t\t\t\t\t// otherwise, \"offsetGet\" is called to retrieve the value, which is passed to isset():\r\n\t\t\t\t\tstack.AddFrame(index);\r\n\t\t\t\t\tif (!Core.Convert.ObjectToBoolean(arrayAccess.InvokeMethod(offsetExists, null, stack.Context)))\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tgoto default;\r\n\t\t\t\t\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// regular getter:\r\n\t\t\t\t\tstack.AddFrame(index);\r\n\t\t\t\t\treturn PhpVariable.Dereference(arrayAccess.InvokeMethod(offsetGet, null, stack.Context));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an item of a user array by invoking <see cref=\"Library.SPL.ArrayAccess.offsetGet\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"arrayAccess\">User array object.</param>\r\n\t\t/// <param name=\"index\">An index.</param>\r\n\t\t/// <param name=\"context\">The current script context.</param>\r\n\t\t/// <returns>A reference on item returned by the user getter.</returns>\r\n\t\tinternal static PhpReference GetUserArrayItemRef(DObject/*!*/ arrayAccess, object index, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(arrayAccess.RealObject is Library.SPL.ArrayAccess);\r\n\t\t\tDebug.Assert(!(index is PhpReference));\r\n\r\n\t\t\tcontext.Stack.AddFrame(index);\r\n\t\t\tobject result = arrayAccess.InvokeMethod(Library.SPL.PhpArrayObject.offsetGet, null, context);\r\n\t\t\tPhpReference ref_result = result as PhpReference;\r\n\t\t\tif (ref_result == null)\r\n\t\t\t{\r\n\t\t\t\t// obsolete (?): PhpException.Throw(PhpError.Error,CoreResources.GetString(\"offsetGet_must_return_byref\"));\r\n\t\t\t\tref_result = new PhpReference(result);\r\n\t\t\t}\r\n\t\t\treturn ref_result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Closure.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// Prototype class for PHP closure.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public sealed class Closure : PhpObject\r\n    {\r\n        private readonly RoutineDelegate/*!*/lambda;\r\n        private readonly PhpArray parameter;\r\n        private readonly PhpArray @static;\r\n\r\n        /// <summary>\r\n        /// Constructor of PHP closure.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/></param>\r\n        /// <param name=\"lambda\">Delegate to lambda function itself.</param>\r\n        /// <param name=\"parameter\"><see cref=\"PhpArray\"/> of closure <c>parameter</c> field. Can be <c>null</c> if there are no parameters.</param>\r\n        /// <param name=\"static\"><see cref=\"PhpArray\"/> of closure <c>parameter</c> field. Can be <c>null</c> if there is no <c>use</c> of scope variables.</param>\r\n        public Closure(ScriptContext/*!*/context, RoutineDelegate/*!*/lambda, PhpArray parameter, PhpArray @static)\r\n            :this(context, true)\r\n        {\r\n            Debug.Assert(context != null);\r\n            Debug.Assert(lambda != null);\r\n\r\n            this.lambda = lambda;\r\n            this.parameter = parameter;\r\n            this.@static = @static;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Closure)instance).__construct(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext context)\r\n        {\r\n            PhpException.Throw(PhpError.Error, string.Format(CoreResources.instantiation_not_allowed, \"Closure\"));\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        private Closure(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only. Invokes constructor dynamically.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        private Closure(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __invoke(object/*!*/instance, PhpStack/*!*/stack)\r\n        {\r\n            var closure = (Closure)instance;\r\n\r\n            stack.ExpandFrame(closure.@static);\r\n\r\n            return closure.lambda(instance, stack);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        [NeedsArgless]\r\n        public object __invoke(ScriptContext context)\r\n        {\r\n            // this method should not be called, its argless should.\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Alters special behaviour of var_dump, export and print_r.\r\n        /// </summary>\r\n        protected override IEnumerable<KeyValuePair<VariableName, DObject.AttributedValue>> PropertyIterator()\r\n        {\r\n            if (this.@static != null)\r\n                yield return new KeyValuePair<VariableName, DObject.AttributedValue>(new VariableName(\"static\"), new AttributedValue(this.@static));\r\n\r\n            if (this.parameter != null)\r\n                yield return new KeyValuePair<VariableName, DObject.AttributedValue>(new VariableName(\"parameter\"), new AttributedValue(this.parameter));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Countable.cs",
    "content": "using System;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// Classes implementing Countable can be used with the count() function.\r\n    /// </summary>\r\n\t[ImplementsType]\r\n\tpublic interface Countable\r\n\t{\r\n        /// <summary>\r\n        /// Count elements of an object.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n\t\t[ImplementsMethod]\r\n\t\t[AllowReturnValueOverride]\r\n\t\tobject count(ScriptContext context);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Exception.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n\t/// <summary>\r\n\t/// Base class for PHP user exceptions.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <para>\r\n\t/// The class implements PHP5 class Exception which PHP \"header\" declaration follows:\r\n\t/// <code>\r\n\t/// class Exception\r\n\t/// {\r\n\t///   protected $message = 'Unknown exception';   // exception message\r\n\t///   protected $code = 0;                        // user defined exception code\r\n\t///   protected $file;                            // source filename of exception\r\n\t///   protected $line;                            // source line of exception\r\n\t///   protected $column;                          // source column of exception\r\n\t///   private $trace;                             // an array containing the trace\r\n\t///\r\n\t///   function __construct($message = null, $code = 0);\r\n\t///\r\n\t///   final function getMessage();                // message of exception \r\n\t///   final function getCode();                   // code of exception\r\n\t///   final function getFile();                   // source file name\r\n\t///   final function getLine();                   // source file line\r\n\t///   final function getColumn();                 // source file column\r\n\t///   final function getTrace();                  // the PhpArray representation of the trace \r\n\t///   final function getTraceAsString();          // formated string of trace\r\n\t///\r\n\t///   function __toString();                      // formated string for display\r\n\t/// } \r\n\t/// </code>\r\n\t/// </para>\r\n\t/// <para>\r\n\t/// The stack trace is captured in the constructor (as in Java) not by throw statement (as in C#).\r\n\t/// </para>\r\n\t/// </remarks>\r\n\t[ImplementsType]\r\n#if !SILVERLIGHT\r\n\t[Serializable]\r\n#endif\r\n\tpublic class Exception : PhpObject\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Contains a trace formatted to the string or a <B>null</B> reference.\r\n\t\t/// Needn't to be serialized.\r\n\t\t/// </summary>\r\n\t\tprivate string stringTraceCache;\r\n        private object previous;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when the instance is created (not called when unserialized).\r\n\t\t/// </summary>\r\n\t\tprotected override void InstanceCreated(ScriptContext context)\r\n\t\t{\r\n\t\t\tbase.InstanceCreated(context);\r\n\r\n\t\t\tPhpStackTrace trace = new PhpStackTrace(context, 1);\r\n\t\t\tPhpStackFrame frame = trace.GetFrame(0);\r\n\t\t\tDebug.Assert(frame != null);\r\n\r\n\t\t\tthis.file.Value = frame.File;\r\n\t\t\tthis.line.Value = frame.Line;\r\n\t\t\tthis.column.Value = frame.Column;\r\n\t\t\tthis.trace.Value = trace.GetUserTrace();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default string representation of the exception.\r\n\t\t/// </summary>\r\n\t\tinternal string BaseToString()\r\n\t\t{\r\n\t\t\tstring type_name = DTypeDesc.GetFullName(this.GetType(), new StringBuilder()).ToString();\r\n\t\t\tint int_line = Core.Convert.ObjectToInteger(line.Value);\r\n\t\t\tint int_column = Core.Convert.ObjectToInteger(column.Value);\r\n\t\t\tstring str_file = Core.Convert.ObjectToString(file.Value);\r\n\r\n\t\t\tif (int_line > 0 && int_column > 0 && str_file != String.Empty)\r\n\t\t\t{\r\n\t\t\t\treturn CoreResources.GetString(\"stringified_exception_debug\",\r\n\t\t\t\t  type_name,\r\n\t\t\t\t  Core.Convert.ObjectToString(message.Value),\r\n\t\t\t\t  str_file, int_line, int_column,\r\n\t\t\t\t  getTraceAsString(null));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn CoreResources.GetString(\"stringified_exception\",\r\n\t\t\t\t  type_name,\r\n\t\t\t\t  Core.Convert.ObjectToString(message.Value),\r\n\t\t\t\t  getTraceAsString(null));\r\n\t\t\t}\r\n\t\t}\r\n\r\n        #region Throw helpers\r\n\r\n        /// <summary>\r\n        /// Throws <see cref=\"PhpUserException\"/>. Internal <see cref=\"Exception\"/> is created using given <paramref name=\"factory\"/>.\r\n        /// </summary>\r\n        /// <param name=\"factory\">Factory to create new instance of <see cref=\"Exception\"/>.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/> provided to factory and <see cref=\"Exception.__construct\"/>.</param>\r\n        /// <param name=\"message\">First parameter to be passed to <see cref=\"Exception.__construct\"/>.</param>\r\n        /// <param name=\"code\">Second parameter to be passed to <see cref=\"Exception.__construct\"/>.</param>\r\n        /// <param name=\"previous\">Thhird parameter to be passed to <see cref=\"Exception.__construct\"/>.</param>\r\n        public static void ThrowSplException(Func<ScriptContext, Exception>/*!*/factory, ScriptContext/*!*/context, object message, object code, object previous)\r\n        {\r\n            Debug.Assert(context != null);\r\n\r\n            var e = factory(context);\r\n            e.__construct(context, message, code, previous);\r\n\r\n            //\r\n            throw new PhpUserException(e);\r\n        }\r\n\r\n        #endregion\r\n\r\n\t\t#region PHP Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// A message.\r\n\t\t/// </summary>\r\n\t\tprotected PhpReference message = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// A code.\r\n\t\t/// </summary>\r\n\t\tprotected PhpReference code = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// A source file where the exception has been thrown.\r\n\t\t/// </summary>\r\n\t\tprotected PhpReference file = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// A line in the source file where the exception has been thrown.\r\n\t\t/// </summary>\r\n\t\tprotected PhpReference line = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// A column in the source file where the exception has been thrown.\r\n\t\t/// </summary>\r\n\t\tprotected PhpReference column = new PhpSmartReference();\r\n\r\n\t\t/// <summary>\r\n\t\t/// A user stack trace in form of <see cref=\"PhpArray\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate PhpReference trace = new PhpSmartReference();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region PHP Methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of user exception.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <param name=\"message\">A message to be associated with the exception.</param>\r\n\t\t/// <param name=\"code\">A code to be associated with the exception.</param>\r\n        /// <param name=\"previous\">The previous exception used for the exception chaining.</param>\r\n\t\t/// <returns>A <b>null</b> reference (void in PHP).</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic virtual object __construct(ScriptContext context, [Optional] object message, [Optional] object code, [Optional] object previous)\r\n\t\t{\r\n            this.message.Value = (message == Arg.Default || message == Type.Missing) ? CoreResources.GetString(\"default_exception_message\") : message;\r\n\t\t\tthis.code.Value = (code == Arg.Default || code == Type.Missing) ? 0 : code;\r\n            this.previous = (previous == Arg.Default || previous == Type.Missing) ? null : previous;\r\n\r\n            Debug.Assert(this.previous == null || (this.previous is DObject && ((DObject)this.previous).RealObject is Exception));\r\n\r\n            // stack is already captured by CLR ctor //\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the instance to a string.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The string containing formatted trace.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object __toString(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn BaseToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a source file where the exception has been thrown.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The source file.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getFile(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn file.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a line in the source file where the exception has been thrown. \r\n\t\t/// </summary>\r\n\t\t/// <returns>The line.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getLine(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn line.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a column in the source file where the exception has been thrown.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The column.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getColumn(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn column.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the code specified in the constructor.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The code.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getCode(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn code.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a message.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The message set by the constructor.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getMessage(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn message.Value;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Returns previous <see cref=\"Exception\"/> (the third parameter of <see cref=\"__construct\"/>).\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object getPrevious(ScriptContext context)\r\n        {\r\n            return previous;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a trace of the stack in the moment the exception was thrown.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The trace.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getTrace(ScriptContext context)\r\n\t\t{\r\n\t\t\treturn trace.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a trace formatted in a form of a string.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The formatted trace.</returns>\r\n\t\t[ImplementsMethod]\r\n\t\tpublic object getTraceAsString(ScriptContext context)\r\n\t\t{\r\n\t\t\tif (stringTraceCache == null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray array = trace.Value as PhpArray;\r\n\t\t\t\tstringTraceCache = (array != null) ? PhpStackTrace.FormatUserTrace(array) : String.Empty;\r\n\t\t\t}\r\n\r\n\t\t\treturn stringTraceCache;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Implementation Details\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeDesc\">The type desc to populate.</param>\r\n\t\tinternal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n\t\t{\r\n\t\t\ttypeDesc.AddMethod(\"__construct\", PhpMemberAttributes.Public, __construct);\r\n\t\t\ttypeDesc.AddMethod(\"__toString\", PhpMemberAttributes.Public, __toString);\r\n\t\t\ttypeDesc.AddMethod(\"getMessage\", PhpMemberAttributes.Public, getMessage);\r\n\t\t\ttypeDesc.AddMethod(\"getCode\", PhpMemberAttributes.Public, getCode);\r\n\t\t\ttypeDesc.AddMethod(\"getFile\", PhpMemberAttributes.Public, getFile);\r\n\t\t\ttypeDesc.AddMethod(\"getTrace\", PhpMemberAttributes.Public, getTrace);\r\n            typeDesc.AddMethod(\"getPrevious\", PhpMemberAttributes.Public, getPrevious);\r\n\t\t\ttypeDesc.AddMethod(\"getTraceAsString\", PhpMemberAttributes.Public, getTraceAsString);\r\n\t\t\ttypeDesc.AddMethod(\"getLine\", PhpMemberAttributes.Public, getLine);\r\n\t\t\ttypeDesc.AddMethod(\"getColumn\", PhpMemberAttributes.Public, getColumn);\r\n\r\n\t\t\ttypeDesc.AddProperty(\"message\", PhpMemberAttributes.Protected, __get_message, __set_message);\r\n\t\t\ttypeDesc.AddProperty(\"code\", PhpMemberAttributes.Protected, __get_code, __set_code);\r\n\t\t\ttypeDesc.AddProperty(\"file\", PhpMemberAttributes.Protected, __get_file, __set_file);\r\n\t\t\ttypeDesc.AddProperty(\"line\", PhpMemberAttributes.Protected, __get_line, __set_line);\r\n\t\t\ttypeDesc.AddProperty(\"column\", PhpMemberAttributes.Protected, __get_column, __set_column);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic Exception(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic Exception(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, caller)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object __construct(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tobject message = stack.PeekValueOptional(1);\r\n\t\t\tobject code = stack.PeekValueOptional(2);\r\n            object previous = stack.PeekValueOptional(3);\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).__construct(stack.Context, message, code, previous);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object __toString(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).__toString(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getMessage(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getMessage(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getPrevious(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n            return ((Exception)instance).getPrevious(stack.Context);\r\n\t\t}\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getTrace(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getTrace(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getCode(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getCode(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getFile(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getFile(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getLine(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getLine(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getColumn(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getColumn(stack.Context);\r\n\t\t}\r\n\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static object getTraceAsString(object instance, PhpStack stack)\r\n\t\t{\r\n\t\t\tstack.RemoveFrame();\r\n\t\t\treturn ((Exception)instance).getTraceAsString(stack.Context);\r\n\t\t}\r\n\r\n\t\tprivate static object __get_message(object instance) { return ((Exception)instance).message; }\r\n\t\tprivate static void __set_message(object instance, object value) { ((Exception)instance).message = (PhpReference)value; }\r\n\r\n\t\tprivate static object __get_code(object instance) { return ((Exception)instance).code; }\r\n\t\tprivate static void __set_code(object instance, object value) { ((Exception)instance).code = (PhpReference)value; }\r\n\r\n\t\tprivate static object __get_file(object instance) { return ((Exception)instance).file; }\r\n\t\tprivate static void __set_file(object instance, object value) { ((Exception)instance).file = (PhpReference)value; }\r\n\r\n\t\tprivate static object __get_line(object instance) { return ((Exception)instance).line; }\r\n\t\tprivate static void __set_line(object instance, object value) { ((Exception)instance).line = (PhpReference)value; }\r\n\r\n\t\tprivate static object __get_column(object instance) { return ((Exception)instance).column; }\r\n\t\tprivate static void __set_column(object instance, object value) { ((Exception)instance).column = (PhpReference)value; }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n\t\t/// <summary>\r\n\t\t/// Deserializing constructor.\r\n\t\t/// </summary>\r\n\t\tprotected Exception(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Exception thrown if an error which can only be found on runtime occurs.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class RuntimeException : Exception\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RuntimeException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RuntimeException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected RuntimeException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// An Error Exception.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class ErrorException : Exception\r\n    {\r\n        private int severity;\r\n        \r\n        #region __construct, getSeverity\r\n\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext/*!*/context,\r\n            [Optional]object message /*\"\"*/, [Optional]object code /*0*/, [Optional]object severity /*1*/,\r\n            [Optional]object filename /*__FILE__*/, [Optional]object lineno /*__LINE__*/,\r\n            [Optional]object previous /*NULL*/ )\r\n        {\r\n            base.__construct(context, message, code, previous);\r\n\r\n            this.severity = (severity == Arg.Default) ? 1 : PHP.Core.Convert.ObjectToInteger(severity);\r\n            if (filename != Arg.Default) this.file.Value = PHP.Core.Convert.ObjectToString(filename);\r\n            if (lineno != Arg.Default) this.line.Value = PHP.Core.Convert.ObjectToInteger(filename);\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the severity of the exception.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public object getSeverity(ScriptContext/*!*/context)\r\n        {\r\n            return this.severity;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation Details\r\n        \r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ErrorException (ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ErrorException (ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            object message = stack.PeekValueOptional(1);\r\n            object code = stack.PeekValueOptional(2);\r\n            object severity = stack.PeekValueOptional(3);\r\n            object filename = stack.PeekValueOptional(4);\r\n            object lineno = stack.PeekValueOptional(5);\r\n            object previous = stack.PeekValueOptional(6);\r\n            stack.RemoveFrame();\r\n            return ((ErrorException)instance).__construct(stack.Context, message, code, severity, filename, lineno, previous);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getSeverity(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ErrorException)instance).getSeverity(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected ErrorException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception that represents error in the program logic.\r\n    /// This kind of exceptions should directly lead to a fix in your code.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class LogicException : Exception\r\n    {\r\n        #region Implementation Details\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        \t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic LogicException(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n        public LogicException(ScriptContext context, DTypeDesc caller)\r\n\t\t\t: base(context, caller)\r\n\t\t{\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n\t\t/// Deserializing constructor.\r\n\t\t/// </summary>\r\n\t\tprotected LogicException(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if an argument does not match with the expected value.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class InvalidArgumentException : LogicException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public InvalidArgumentException (ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public InvalidArgumentException (ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected InvalidArgumentException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown when an illegal index was requested.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class OutOfRangeException  : LogicException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OutOfRangeException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OutOfRangeException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a callback refers to an undefined function or if some arguments are missing.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class BadFunctionCallException : LogicException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public BadFunctionCallException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public BadFunctionCallException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected BadFunctionCallException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a callback refers to an undefined method or if some arguments are missing.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class BadMethodCallException : BadFunctionCallException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public BadMethodCallException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public BadMethodCallException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected BadMethodCallException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a length is invalid.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class LengthException : LogicException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public LengthException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public LengthException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected LengthException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown to indicate range errors during program execution.\r\n    /// Normally this means there was an arithmetic error other than under/overflow.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class RangeException : RuntimeException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RangeException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RangeException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected RangeException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a value is not a valid key.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class OutOfBoundsException : RuntimeException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OutOfBoundsException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OutOfBoundsException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown when adding an element to a full container.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class OverflowException : RuntimeException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OverflowException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public OverflowException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected OverflowException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n    \r\n    /// <summary>\r\n    /// Exception thrown when performing an invalid operation on an empty container,\r\n    /// such as removing an element.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class UnderflowException : RuntimeException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public UnderflowException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public UnderflowException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected UnderflowException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a value does not match with a set of values.\r\n    /// Typically this happens when a function calls another function and expects the return value\r\n    /// to be of a certain type or value not including arithmetic or buffer related errors.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class UnexpectedValueException  : RuntimeException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { throw new NotImplementedException(); }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public UnexpectedValueException (ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public UnexpectedValueException (ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected UnexpectedValueException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception thrown if a value does not adhere to a defined valid data domain.\r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class DomainException : LogicException\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DomainException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public DomainException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected DomainException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Iterators.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// Built-in marker interface.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface Traversable\r\n    { }\r\n\r\n    /// <summary>\r\n    /// Interface for external iterators or objects that can iterate themselves internally.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Note that contrary to the .NET framework enumerating interfaces,\r\n    /// calling <c>rewind</c> positions the iterator on the first element, so <c>next</c>\r\n    /// shall not be called until the first element is retrieved.\r\n    /// </remarks>\r\n    [ImplementsType]\r\n    public interface Iterator : Traversable\r\n    {\r\n        /// <summary>\r\n        /// Rewinds the iterator to the first element.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        object rewind(ScriptContext context);\r\n\r\n        /// <summary>\r\n        /// Moves forward to next element.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        object next(ScriptContext context);\r\n\r\n        /// <summary>\r\n        /// Checks if there is a current element after calls to <see cref=\"rewind\"/> or <see cref=\"next\"/>.\r\n        /// </summary>\r\n        /// <returns><c>bool</c>.</returns>\r\n        [ImplementsMethod]\r\n        object valid(ScriptContext context);\r\n\r\n        /// <summary>\r\n        /// Returns the key of the current element.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        object key(ScriptContext context);\r\n\r\n        /// <summary>\r\n        /// Returns the current element (value).\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        [AllowReturnValueOverride]\r\n        object current(ScriptContext context);\r\n    }\r\n\r\n    /// <summary>\r\n    /// The Seekable iterator.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface SeekableIterator : Iterator\r\n    {\r\n        /// <summary>\r\n        /// Seeks to a given position in the iterator.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        [AllowReturnValueOverride]\r\n        object seek(ScriptContext context, object position);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Interface to create an external iterator.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This interface contains only arg-less stubs as signatures should not be restricted.\r\n    /// </remarks>\r\n    [ImplementsType]\r\n    public interface IteratorAggregate : Traversable\r\n    {\r\n        /// <summary>\r\n        /// Returns an <see cref=\"Iterator\"/> or another <see cref=\"IteratorAggregate\"/> for\r\n        /// the implementing object.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        object getIterator(ScriptContext context);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Classes implementing OuterIterator can be used to iterate over iterators.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface OuterIterator : Iterator\r\n    {\r\n        /// <summary>\r\n        /// Returns the inner iterator for the current iterator entry.\r\n        /// </summary>\r\n        /// <returns>The inner <see cref=\"Iterator\"/> for the current entry.</returns>\r\n        [ImplementsMethod]\r\n        object getInnerIterator(ScriptContext context);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Classes implementing RecursiveIterator can be used to iterate over iterators recursively.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface RecursiveIterator : Iterator\r\n    {\r\n        /// <summary>\r\n        /// Returns an iterator for the current iterator entry.\r\n        /// </summary>\r\n        /// <returns>An <see cref=\"RecursiveIterator\"/> for the current entry.</returns>\r\n        [ImplementsMethod]\r\n        object getChildren(ScriptContext context);\r\n\r\n        /// <summary>\r\n        /// Returns if an iterator can be created for the current entry.\r\n        /// </summary>\r\n        /// <returns>Returns TRUE if the current entry can be iterated over, otherwise returns FALSE.</returns>\r\n        [ImplementsMethod]\r\n        object hasChildren(ScriptContext context);\r\n    }\r\n\r\n    /// <summary>\r\n    /// This iterator allows to unset and modify values and keys while iterating over Arrays and Objects.\r\n    /// \r\n    /// When you want to iterate over the same array multiple times you need to instantiate ArrayObject\r\n    /// and let it create ArrayIterator instances that refer to it either by using foreach or by calling\r\n    /// its getIterator() method manually.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class ArrayIterator : PhpObject, Iterator, Traversable, ArrayAccess, SeekableIterator, Countable, Serializable\r\n    {\r\n        #region Fields & Properties\r\n\r\n        protected PhpArray array;\r\n        protected OrderedDictionary.Enumerator arrayEnumerator;    // lazily instantiated so we can rewind() once when needed\r\n        protected bool isArrayIterator { get { return this.array != null; } }\r\n\r\n        protected DObject dobj;\r\n        protected IEnumerator<KeyValuePair<object, object>> dobjEnumerator;    // lazily instantiated so we can rewind() once when needed\r\n        protected bool isObjectIterator { get { return this.dobj != null; } }\r\n\r\n        /// <summary>\r\n        /// Instantiate new PHP array's enumerator and advances its position to the first element.\r\n        /// </summary>\r\n        /// <returns><c>True</c> whether there is an first element.</returns>\r\n        protected void InitArrayIteratorHelper()\r\n        {\r\n            Debug.Assert(this.array != null);\r\n\r\n            this.arrayEnumerator = new OrderedDictionary.Enumerator(this.array, false);\r\n            this.isValid = this.arrayEnumerator.MoveFirst();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Instantiate new object's enumerator and advances its position to the first element.\r\n        /// </summary>\r\n        /// <returns><c>True</c> whether there is an first element.</returns>\r\n        protected void InitObjectIteratorHelper()\r\n        {\r\n            Debug.Assert(this.dobj != null);\r\n\r\n            this.dobjEnumerator = dobj.InstancePropertyIterator(null, false);   // we have to create new enumerator (or implement InstancePropertyIterator.Reset)\r\n            this.isValid = this.dobjEnumerator.MoveNext();\r\n        }\r\n\r\n        protected bool isValid = false;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// Constructs an <see cref=\"ArrayIterator\"/> object.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"array\">The array or object to be iterated on.</param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, object array)\r\n        {\r\n            if ((this.array = array as PhpArray) != null)\r\n            {\r\n                InitArrayIteratorHelper();  // instantiate now, avoid repetitous checks during iteration\r\n            }\r\n            else if ((this.dobj = array as DObject) != null)\r\n            {\r\n                //InitObjectIteratorHelper();   // lazily to avoid one additional allocation\r\n            }\r\n            else\r\n            {\r\n                // throw an PHP.Library.SPL.InvalidArgumentException if anything besides an array or an object is given.\r\n                Exception.ThrowSplException(\r\n                    _ctx => new InvalidArgumentException(_ctx, true),\r\n                    context,\r\n                    null, 0, null);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ArrayIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ArrayIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object array = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).__construct(stack.Context, array);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayIterator (uasort, uksort, natsort, natcasesort, ksort, asort)\r\n\r\n        public static object uasort(object instance, PhpStack stack)\r\n        {\r\n            var cmp_function = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).uasort(stack.Context, cmp_function);\r\n        }\r\n\r\n        public static object uksort(object instance, PhpStack stack)\r\n        {\r\n            var cmp_function = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).uksort(stack.Context, cmp_function);\r\n        }\r\n\r\n        public static object natsort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).natsort(stack.Context);\r\n        }\r\n\r\n        public static object natcasesort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).natcasesort(stack.Context);\r\n        }\r\n\r\n        public static object ksort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).ksort(stack.Context);\r\n        }\r\n\r\n        public static object asort(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).asort(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayIterator (getFlags, setFlags, append, getArrayCopy)\r\n\r\n        public static object getFlags(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).getFlags(stack.Context);\r\n        }\r\n\r\n        public static object setFlags(object instance, PhpStack stack)\r\n        {\r\n            var value = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).setFlags(stack.Context, value);\r\n        }\r\n\r\n        public static object getArrayCopy(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).getArrayCopy(stack.Context);\r\n        }\r\n\r\n        public static object append(object instance, PhpStack stack)\r\n        {\r\n            var value = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).append(stack.Context, value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface ArrayAccess\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetGet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).offsetGet(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetSet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            object value = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).offsetSet(stack.Context, index, value);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetUnset(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).offsetUnset(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetExists(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).offsetExists(stack.Context, index);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface SeekableIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object seek(object instance, PhpStack stack)\r\n        {\r\n            object position = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).seek(stack.Context, position);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Countable\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object count(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).count(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Serializable\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object serialize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).serialize(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object unserialize(object instance, PhpStack stack)\r\n        {\r\n            object data = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayIterator)instance).unserialize(stack.Context, data);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region ArrayIterator (uasort, uksort, natsort, natcasesort, ksort, asort)\r\n\r\n        [ImplementsMethod]\r\n        public virtual object uasort(ScriptContext/*!*/context, object cmp_function)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object uksort(ScriptContext/*!*/context, object cmp_function)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object natsort(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object natcasesort(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object ksort(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object asort(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayIterator (getFlags, setFlags, append, getArrayCopy)\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getFlags(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object setFlags(ScriptContext/*!*/context, object flags)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual PhpArray getArrayCopy(ScriptContext/*!*/context)\r\n        {\r\n            if (isArrayIterator)\r\n                return new PhpArray(array);\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object append(ScriptContext/*!*/context, object value)\r\n        {\r\n            if (isArrayIterator)\r\n            {\r\n                array.Add(value);\r\n            }\r\n            else if (isObjectIterator)\r\n            {\r\n                // php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, \"Cannot append properties to objects, use %s::offsetSet() instead\", Z_OBJCE_P(object)->name);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object rewind(ScriptContext context)\r\n        {\r\n            if (isArrayIterator)\r\n            {\r\n                this.isValid = arrayEnumerator.MoveFirst();\r\n            }\r\n            else if (isObjectIterator)\r\n            {\r\n                // isValid set by InitObjectIteratorHelper()\r\n                InitObjectIteratorHelper(); // DObject enumerator does not support MoveFirst()\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private void EnsureEnumeratorsHelper()\r\n        {\r\n            if (isObjectIterator && dobjEnumerator == null)\r\n                InitObjectIteratorHelper();\r\n\r\n            // arrayEnumerator initialized in __construct()\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object next(ScriptContext context)\r\n        {\r\n            if (isArrayIterator)\r\n            {\r\n                this.isValid = arrayEnumerator.MoveNext();\r\n            }\r\n            else if (isObjectIterator)\r\n            {\r\n                EnsureEnumeratorsHelper();\r\n                this.isValid = dobjEnumerator.MoveNext();\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            EnsureEnumeratorsHelper();\r\n            return this.isValid;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            EnsureEnumeratorsHelper();\r\n\r\n            if (this.isValid)\r\n            {\r\n                if (isArrayIterator)\r\n                    return arrayEnumerator.Current.Key.Object;\r\n                else if (isObjectIterator)\r\n                    return dobjEnumerator.Current.Key;\r\n                else\r\n                    Debug.Fail(null);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            EnsureEnumeratorsHelper();\r\n\r\n            if (this.isValid)\r\n            {\r\n                if (isArrayIterator)\r\n                    return arrayEnumerator.Current.Value;\r\n                else if (isObjectIterator)\r\n                    return dobjEnumerator.Current.Value;\r\n                else\r\n                    Debug.Fail(null);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface ArrayAccess\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetGet(ScriptContext context, object index)\r\n        {\r\n            if (isArrayIterator)\r\n                return array[index];\r\n            else if (isObjectIterator)\r\n                return dobj[index];\r\n\r\n            return false;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetSet(ScriptContext context, object index, object value)\r\n        {\r\n            if (isArrayIterator)\r\n            {\r\n                if (index != null) array.Add(index, value);\r\n                else array.Add(value);\r\n            }\r\n            else if (isObjectIterator)\r\n            {\r\n                dobj.Add(index, value);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetUnset(ScriptContext context, object index)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object offsetExists(ScriptContext context, object index)\r\n        {\r\n            if (isArrayIterator)\r\n                return array.ContainsKey(new IntStringKey(index));\r\n            else if (isObjectIterator)\r\n                return dobj.Contains(index);\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface SeekableIterator\r\n\r\n        [ImplementsMethod]\r\n        public object seek(ScriptContext context, object position)\r\n        {\r\n            int currentPosition = 0;\r\n            int targetPosition = PHP.Core.Convert.ObjectToInteger(position);\r\n\r\n            if (targetPosition < 0)\r\n            {\r\n                //\r\n            }\r\n\r\n            this.rewind(context);\r\n\r\n            while ((bool)this.valid(context) && currentPosition < targetPosition)\r\n            {\r\n                this.next(context);\r\n                currentPosition++;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Countable\r\n\r\n        [ImplementsMethod]\r\n        public virtual object count(ScriptContext context)\r\n        {\r\n            if (isArrayIterator)\r\n                return array.Count;\r\n            else if (isObjectIterator)\r\n                return dobj.Count;\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Serializable\r\n\r\n        [ImplementsMethod]\r\n        public virtual object serialize(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object unserialize(ScriptContext context, object data)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected ArrayIterator(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// The EmptyIterator class for an empty iterator.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class EmptyIterator : PhpObject, Iterator, Traversable\r\n    {\r\n        public virtual object __construct(ScriptContext/*!*/context)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        #region Implementation details\r\n\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public EmptyIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public EmptyIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).__construct(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((EmptyIterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [ImplementsMethod]\r\n        public object rewind(ScriptContext context)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object next(ScriptContext context)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            Exception.ThrowSplException(\r\n                _ctx => new BadMethodCallException(_ctx, true),\r\n                context,\r\n                CoreResources.spl_empty_iterator_key_access, 0, null);\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            Exception.ThrowSplException(\r\n                _ctx => new BadMethodCallException(_ctx, true),\r\n                context,\r\n                CoreResources.spl_empty_iterator_value_access, 0, null);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected EmptyIterator(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// This iterator wrapper allows the conversion of anything that is Traversable into an Iterator.\r\n    /// It is important to understand that most classes that do not implement Iterators have reasons\r\n    /// as most likely they do not allow the full Iterator feature set. If so, techniques should be provided\r\n    /// to prevent misuse, otherwise expect exceptions or fatal errors.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class IteratorIterator : PhpObject, OuterIterator, Iterator, Traversable\r\n    {\r\n        /// <summary>\r\n        /// Object to iterate on.\r\n        /// </summary>\r\n        private DObject/*!*/iterator;\r\n\r\n        /// <summary>\r\n        /// Enumerator over the <see cref=\"iterator\"/>.\r\n        /// </summary>\r\n        protected IDictionaryEnumerator/*!*/enumerator;\r\n\r\n        /// <summary>\r\n        /// Wheter the <see cref=\"enumerator\"/> is in valid state (initialized and not at the end).\r\n        /// </summary>\r\n        protected bool isValid = false;\r\n\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, object/*Traversable*/ iterator, [Optional]object classname)\r\n        {\r\n            this.iterator = iterator as DObject;    // iterator.RealObject is Traversable ?\r\n            if (this.iterator != null)\r\n            {\r\n                if (classname != null && classname != Arg.Default &&\r\n                    !(this.iterator.RealObject is SPL.Iterator)    // downcast only if it is not an Iterator instance\r\n                    )\r\n                {\r\n                    var downcast = context.ResolveType(PhpVariable.AsString(classname), null, this.iterator.TypeDesc, null, ResolveTypeFlags.ThrowErrors);\r\n\r\n                    if (downcast == null || // not found\r\n                        !downcast.IsAssignableFrom(this.iterator.TypeDesc) ||    // not base\r\n                        !DTypeDesc.Create(typeof(Traversable)).IsAssignableFrom(downcast))   // not Traversable\r\n                    {\r\n                        // TODO: error\r\n                        // zend_throw_exception(spl_ce_LogicException, \"Class to downcast to not found or not base class or does not implement Traversable\", 0 TSRMLS_CC);\r\n\r\n                        this.iterator = null;\r\n                    }\r\n                    else\r\n                    {\r\n                        //if (DTypeDesc.Create(typeof(IteratorAggregate)).IsAssignableFrom(downcast))\r\n                        //{\r\n                        //    // {downcast} is IteratorAggregate\r\n                        //    context.Stack.AddFrame();\r\n                        //    var result = this.iterator.InvokeMethod(\"getIterator\", null, context);\r\n\r\n                        //    if (result == null || !(result is DObject) || !(((DObject)result).RealObject is Traversable))\r\n                        //    {\r\n                        //        //zend_throw_exception_ex(spl_ce_LogicException, 0 TSRMLS_CC, \"%s::getIterator() must return an object that implements Traversable\", ce->name);\r\n                        //        this.iterator = null;\r\n                        //    }\r\n                        //    else\r\n                        //    {\r\n                        //        this.iterator = (DObject)result;\r\n                        //    }\r\n                        //}\r\n                        throw new NotImplementedException();\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // TODO: error\r\n            }\r\n\r\n            //rewind(context);  // not in PHP, performance reasons (foreach causes rewind() itself)\r\n\r\n            return null;\r\n        }\r\n\r\n        #region __call\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __call(object instance, PhpStack stack)\r\n        {\r\n            var name = stack.PeekValue(1);\r\n            var args = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((IteratorIterator)instance).__call(stack.Context, name, args);            \r\n        }\r\n\r\n        [ImplementsMethod, NeedsArgless]    // TODO: hide this method to not be visible by PHP code, make this behaviour internal\r\n        public virtual object __call(ScriptContext context, object name, object args)\r\n        {\r\n            var methodname = PhpVariable.AsString(name);\r\n            var argsarr = args as PhpArray;\r\n            \r\n            if (this.iterator == null || argsarr == null)\r\n            {\r\n                PhpException.UndefinedMethodCalled(this.TypeName, methodname);\r\n                return null;\r\n            }\r\n\r\n            // call the method on internal iterator, as in PHP,\r\n            // only PHP leaves $this to self (which is potentionally dangerous and not correctly typed)\r\n            context.Stack.AddFrame((ICollection)argsarr.Values);\r\n            return this.iterator.InvokeMethod(methodname, null, context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region OuterIterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getInnerIterator(ScriptContext context)\r\n        {\r\n            return this.iterator;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Iterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object rewind(ScriptContext context)\r\n        {\r\n            if (iterator != null)\r\n            {\r\n                // we can make use of standard foreach enumerator\r\n                enumerator = iterator.GetForeachEnumerator(true, false, null);\r\n\r\n                isValid = enumerator.MoveNext();\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object next(ScriptContext context)\r\n        {\r\n            if (enumerator == null)\r\n                rewind(context);    // init iterator first (this skips the first element as on PHP)\r\n\r\n            if (enumerator != null) // enumerator can be still null, if iterator is null\r\n                isValid = enumerator.MoveNext();\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            return isValid;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            return (enumerator != null && isValid) ? enumerator.Key : null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            return (enumerator != null && isValid) ? enumerator.Value : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public IteratorIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public IteratorIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object iterator = stack.PeekValue(1);\r\n            object classname = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((IteratorIterator)instance).__construct(stack.Context, iterator, classname);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface OuterIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getInnerIterator(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((OuterIterator)instance).getInnerIterator(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected IteratorIterator(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// This abstract iterator filters out unwanted values. This class should be extended to implement\r\n    /// custom iterator filters. The FilterIterator::accept() must be implemented in the subclass.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public abstract class FilterIterator : IteratorIterator, OuterIterator, Iterator, Traversable\r\n    {\r\n        [ImplementsMethod]\r\n        public abstract object accept(ScriptContext/*!*/context);\r\n\r\n        private void SkipNotAccepted(ScriptContext/*!*/context)\r\n        {\r\n            if (this.enumerator != null)\r\n                while (this.isValid && !Core.Convert.ObjectToBoolean(this.accept(context)))\r\n                    this.isValid = enumerator.MoveNext();   // skip not accepted elements\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object rewind(ScriptContext context)\r\n        {\r\n            base.rewind(context);\r\n            SkipNotAccepted(context);\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object next(ScriptContext context)\r\n        {\r\n            base.next(context);\r\n            SkipNotAccepted(context);\r\n\r\n            return null;\r\n        }\r\n\r\n        #region Implementation details\r\n\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object accept(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((FilterIterator)instance).accept(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((FilterIterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((FilterIterator)instance).next(stack.Context);\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public FilterIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public FilterIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion        \r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// This iterator allows to unset and modify values and keys while iterating over Arrays\r\n    /// and Objects in the same way as the ArrayIterator. Additionally it is possible to iterate\r\n    /// over the current iterator entry.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class RecursiveArrayIterator : ArrayIterator, RecursiveIterator\r\n    {\r\n        #region RecursiveIterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getChildren(ScriptContext context)\r\n        {\r\n            object current;\r\n            if (!this.isValid || (current = this.current(context)) == null)\r\n                return null;\r\n\r\n            if (current is RecursiveArrayIterator)\r\n                return current;\r\n            else\r\n            {\r\n                var childIterator = new RecursiveArrayIterator(context, true);\r\n                childIterator.__construct(context, current);\r\n                return childIterator;\r\n            }\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object hasChildren(ScriptContext context)\r\n        {\r\n            object current;\r\n            return this.isValid && (current = this.current(context)) is IPhpEnumerable && (current is PhpArray || current is SPL.Traversable);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveArrayIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveArrayIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constants\r\n\r\n        public const int CHILD_ARRAYS_ONLY = 0x4;\r\n\r\n        #endregion\r\n\r\n        #region RecursiveIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIterator)instance).getChildren(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIterator)instance).hasChildren(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Helper class containing <see cref=\"IPhpEnumerable\"/> object and its enumerator and current key and value.\r\n    /// </summary>\r\n    internal class EnumerableIteratorEntry\r\n    {\r\n        public readonly IPhpEnumerable obj;\r\n\r\n        private IDictionaryEnumerator enumerator;\r\n\r\n        public bool isValid { get; private set; }\r\n        public object currentValue { get; private set; }\r\n        public object currentKey { get; private set; }\r\n\r\n        public EnumerableIteratorEntry(IPhpEnumerable/*!*/obj)\r\n        {\r\n            Debug.Assert(obj != null);\r\n\r\n            this.isValid = false;\r\n            this.enumerator = null;\r\n            this.currentKey = this.currentValue = null;\r\n            \r\n            this.obj = obj;\r\n        }\r\n\r\n        public void rewind()\r\n        {\r\n            if (enumerator is PhpObject.PhpIteratorEnumerator)\r\n                ((PhpObject.PhpIteratorEnumerator)enumerator).Reset();    // we can rewind() existing PhpIteratorEnumerator\r\n            else\r\n                enumerator = obj.GetForeachEnumerator(true, false, null); // we have to reinitialize (null or not PhpIteratorEnumerator)\r\n\r\n            isValid = false;// enumerator.MoveNext();\r\n        }\r\n\r\n        public void next()\r\n        {\r\n            if (isValid = (enumerator != null && enumerator.MoveNext()))\r\n            {\r\n                this.currentValue = enumerator.Value;\r\n                this.currentKey = enumerator.Key;\r\n            }\r\n            else\r\n            {\r\n                this.currentValue = this.currentKey = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Can be used to iterate through recursive iterators.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class RecursiveIteratorIterator : PhpObject, OuterIterator, Iterator, Traversable\r\n    {\r\n        private int maxDepth = -1;\r\n        private int level { get { return (iterators.Count > 0) ? (iterators.Count - 1) : (0); } }\r\n\r\n        /// <summary>\r\n        /// The root iterator object.\r\n        /// </summary>\r\n        private DObject iterator;\r\n\r\n        /// <summary>\r\n        /// \"Stack\" of active iterators and their enumerators.\r\n        /// </summary>\r\n        private List<EnumerableIteratorEntry>/*!*/iterators = new List<EnumerableIteratorEntry>(3);\r\n        private IEnumerator<KeyValuePair<object, object>> enumerator = null;\r\n        private bool isValid = false;\r\n\r\n        private Modes mode;\r\n        private bool catchGetChild;\r\n\r\n        private enum Modes\r\n        {\r\n            LeavesOnly = LEAVES_ONLY,\r\n            SelfFirst = SELF_FIRST,\r\n            ChildFirst = CHILD_FIRST,\r\n        }\r\n\r\n        [Flags]\r\n        private enum Flags\r\n        {\r\n            CatchGetChilds = CATCH_GET_CHILD,\r\n        }\r\n\r\n        private IEnumerator<KeyValuePair<object, object>>/*!*/GetEnumerator(ScriptContext/*!*/context, List<EnumerableIteratorEntry>/*!*/iterators)\r\n        {\r\n            // reset the top level iterator\r\n            if (iterators.Count == 0)\r\n                iterators.Add(new EnumerableIteratorEntry(this.iterator));\r\n\r\n            // rewind\r\n            iterators[0].rewind();\r\n            this.beginIteration(context);\r\n\r\n            // yield return elements\r\n            var l = 0;\r\n\r\n            for (; ; )\r\n            {\r\n                iterators[l].next();\r\n\r\n                if (iterators[l].isValid)\r\n                {\r\n                    var currentValue = iterators[l].currentValue;\r\n                    var currentKey = iterators[l].currentKey;\r\n                    \r\n                    // iterators[l].current is another iterator?\r\n                    if (Core.Convert.ObjectToBoolean(this.callHasChildren(context)) &&\r\n                        (this.maxDepth == -1 || this.maxDepth > l))\r\n                    {\r\n                        \r\n                        if (mode == Modes.SelfFirst)\r\n                        {\r\n                            this.nextElement(context);\r\n                            yield return new KeyValuePair<object, object>(currentValue, currentKey);\r\n                        }\r\n\r\n                        var child = this.callGetChildren(context) as DObject;\r\n                        if (child != null && child.RealObject is IPhpEnumerable)\r\n                        {\r\n                            iterators.Add(new EnumerableIteratorEntry(child.RealObject as IPhpEnumerable));\r\n\r\n                            iterators[++l].rewind();\r\n                            this.beginChildren(context);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        this.nextElement(context);\r\n                        yield return new KeyValuePair<object, object>(currentValue, currentKey);                     \r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // iterator[l] end\r\n                    if (l == 0)\r\n                    {\r\n                        break;\r\n                    }\r\n                    else\r\n                    {\r\n                        this.endChildren(context);\r\n                        iterators.RemoveAt(l--);\r\n\r\n                        if (mode == Modes.ChildFirst)\r\n                        {\r\n                            this.nextElement(context);\r\n                            yield return new KeyValuePair<object, object>(iterators[l].currentValue, iterators[l].currentKey);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        #region RecursiveIteratorIterator\r\n\r\n        /// <summary>\r\n        /// Begin children.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object beginChildren(ScriptContext/*!*/context) { return null; }\r\n\r\n        /// <summary>\r\n        /// Begin Iteration.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object beginIteration(ScriptContext/*!*/context) { return null; }\r\n\r\n        /// <summary>\r\n        /// Get children.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object callGetChildren(ScriptContext/*!*/context)\r\n        {\r\n            var obj = ((iterators.Count > 0) ? iterators[iterators.Count - 1].obj : iterator) as RecursiveIterator;\r\n\r\n            if (obj != null)\r\n                return obj.getChildren(context);\r\n            else\r\n                return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Has children.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object callHasChildren(ScriptContext/*!*/context)\r\n        {\r\n            var obj = ((iterators.Count > 0) ? iterators[iterators.Count - 1].obj : iterator) as RecursiveIterator;\r\n\r\n            if (obj != null)\r\n                return obj.hasChildren(context);\r\n            else\r\n                return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Construct a RecursiveIteratorIterator.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext/*!*/context, object/*Traversable*/iterator, [Optional]object/*int*/mode /*= LEAVES_ONLY*/ , [Optional]object/*int*/flags /*= 0*/)\r\n        {\r\n            // ensure iterator is DObject\r\n            var it = iterator as DObject;\r\n            if (it.RealObject is IteratorAggregate)\r\n                it = ((IteratorAggregate)it.RealObject).getIterator(context) as DObject;\r\n\r\n            //\r\n            this.mode = (mode == Arg.Default || mode == Type.Missing) ?\r\n                Modes.LeavesOnly :\r\n                (Modes)Core.Convert.ObjectToInteger(mode);\r\n\r\n            this.catchGetChild = (flags == Arg.Default || mode == Type.Missing) ?\r\n                false :\r\n                ((Core.Convert.ObjectToInteger(mode) & (int)Flags.CatchGetChilds)) != 0;\r\n\r\n            if (this.catchGetChild)\r\n                PhpException.ArgumentValueNotSupported(\"flags\", (int)Flags.CatchGetChilds);\r\n\r\n            // prepare stack of iterators\r\n            this.iterator = it;\r\n\r\n            if (this.iterators != null)\r\n            {\r\n                // TODO: rewind\r\n            }\r\n            else\r\n            {\r\n                // TODO: error\r\n            }\r\n\r\n            //\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// End children.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object endChildren(ScriptContext/*!*/context) { return null; }\r\n\r\n        /// <summary>\r\n        /// End Iteration.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object endIteration(ScriptContext/*!*/context) { return null; }\r\n\r\n        /// <summary>\r\n        /// Get the current depth of the recursive iteration.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getDepth(ScriptContext/*!*/context)\r\n        {\r\n            return level;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get max depth.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getMaxDepth(ScriptContext/*!*/context)\r\n        {\r\n            return (maxDepth == -1) ? (object)false : maxDepth;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The current active sub iterator.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getSubIterator(ScriptContext/*!*/context, [Optional]object level)\r\n        {\r\n            int l = (level == Arg.Default) ? this.level : Core.Convert.ObjectToInteger(level);\r\n\r\n            if (l == 0) return iterator;\r\n            else if (l > 0 && l < iterators.Count) return iterators[l].obj;\r\n            else return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Next element.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object nextElement(ScriptContext/*!*/context) { return null; }\r\n\r\n        /// <summary>\r\n        /// Set max depth.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object setMaxDepth(ScriptContext/*!*/context, [Optional]object/*int*/max_depth /*= -1*/ )\r\n        {\r\n            int i = (max_depth == Arg.Default || max_depth == Type.Missing) ? -1 : Core.Convert.ObjectToInteger(max_depth);\r\n\r\n            if (i < -1)\r\n            {\r\n                // TODO: zend_throw_exception(spl_ce_OutOfRangeException, \"Parameter max_depth must be >= -1\", 0 TSRMLS_CC);\r\n            }\r\n            else\r\n            {\r\n                this.maxDepth = i;\r\n            }\r\n\r\n            return null;        \r\n        }\r\n\r\n        #endregion\r\n\r\n        #region __call\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __call(object instance, PhpStack stack)\r\n        {\r\n            var name = stack.PeekValue(1);\r\n            var args = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).__call(stack.Context, name, args);\r\n        }\r\n\r\n        [ImplementsMethod, NeedsArgless]    // TODO: hide this method to not be visible by PHP code, make this behaviour internal\r\n        public virtual object __call(ScriptContext context, object name, object args)\r\n        {\r\n            var methodname = PhpVariable.AsString(name);\r\n            var argsarr = args as PhpArray;\r\n\r\n            if (this.iterator == null || argsarr == null)\r\n            {\r\n                PhpException.UndefinedMethodCalled(this.TypeName, methodname);\r\n                return null;\r\n            }\r\n\r\n            // call the method on internal iterator, as in PHP,\r\n            // only PHP leaves $this to self (which is potentionally dangerous and not correctly typed)\r\n            context.Stack.AddFrame((ICollection)argsarr.Values);\r\n            return this.iterator.InvokeMethod(methodname, null, context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region OuterIterator\r\n\r\n        [ImplementsMethod]\r\n        public object getInnerIterator(ScriptContext context)\r\n        {\r\n            var l = level;\r\n            if (l == 0) return this.iterator;\r\n            else if (l < iterators.Count) return iterators[level].obj;\r\n            else return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Iterator\r\n\r\n        [ImplementsMethod]\r\n        public virtual object rewind(ScriptContext context)\r\n        {\r\n            // up to the first level\r\n            while (iterators.Count > 1)\r\n            {\r\n                iterators.RemoveAt(iterators.Count - 1);\r\n                endChildren(context);\r\n            }\r\n\r\n            // start enumeration\r\n            this.enumerator = this.GetEnumerator(context, iterators);\r\n            this.isValid = this.enumerator.MoveNext();\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object next(ScriptContext context)\r\n        {\r\n            if (enumerator == null)\r\n                rewind(context);\r\n            else\r\n                this.isValid = enumerator.MoveNext();\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object valid(ScriptContext context)\r\n        {\r\n            if (!this.isValid && this.enumerator != null)\r\n            {\r\n                this.endIteration(context);\r\n                this.enumerator = null;\r\n            }\r\n\r\n            return this.isValid;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object key(ScriptContext context)\r\n        {\r\n            if (iterators.Count > 0)\r\n                return iterators[iterators.Count - 1].currentKey;\r\n            else\r\n                return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object current(ScriptContext context)\r\n        {\r\n            if (iterators.Count > 0)\r\n                return iterators[iterators.Count - 1].currentValue;\r\n            else\r\n                return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constants\r\n\r\n        public const int LEAVES_ONLY = 0;\r\n        public const int SELF_FIRST = 1;\r\n        public const int CHILD_FIRST = 2;\r\n\r\n        public const int CATCH_GET_CHILD = 16;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveIteratorIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public RecursiveIteratorIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region RecursiveIteratorIterator\r\n\r\n        public static object beginChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).beginChildren(stack.Context);\r\n        }\r\n\r\n        public static object beginIteration(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).beginIteration(stack.Context);\r\n        }\r\n\r\n        public static object callGetChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).callGetChildren(stack.Context);\r\n        }\r\n\r\n        public static object callHasChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).callHasChildren(stack.Context);\r\n        }\r\n\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object iterator = stack.PeekValue(1);\r\n            object mode = stack.PeekValueOptional(2);\r\n            object flags = stack.PeekValueOptional(3);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).__construct(stack.Context, iterator, mode, flags);\r\n        }\r\n\r\n        public static object endChildren(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).endChildren(stack.Context);\r\n        }\r\n\r\n        public static object endIteration(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).endIteration(stack.Context);\r\n        }\r\n\r\n        public static object getDepth(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).getDepth(stack.Context);\r\n        }\r\n\r\n        public static object getMaxDepth(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).getMaxDepth(stack.Context);\r\n        }\r\n\r\n        public static object getSubIterator(object instance, PhpStack stack)\r\n        {\r\n            var level = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).getSubIterator(stack.Context, level);\r\n        }\r\n\r\n        public static object nextElement(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).nextElement(stack.Context);\r\n        }\r\n\r\n        public static object setMaxDepth(object instance, PhpStack stack)\r\n        {\r\n            object max_depth = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((RecursiveIteratorIterator)instance).setMaxDepth(stack.Context, max_depth);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface OuterIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getInnerIterator(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((OuterIterator)instance).getInnerIterator(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected RecursiveIteratorIterator(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// An Iterator that iterates over several iterators one after the other.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class AppendIterator : IteratorIterator, OuterIterator, Traversable, Iterator\r\n    {\r\n        /// <summary>\r\n        /// Contained iterators.\r\n        /// </summary>\r\n        private List<EnumerableIteratorEntry>/*!*/iterators = new List<EnumerableIteratorEntry>(3);\r\n        private int iterators_index = 0;\r\n\r\n        private void NextInternal(ScriptContext/*!*/context)\r\n        {\r\n            if (iterators_index < iterators.Count)\r\n            {\r\n                var it = iterators[iterators_index];\r\n\r\n                it.next();\r\n                this.isValid = it.isValid;\r\n\r\n                if (!this.isValid)\r\n                {\r\n                    // proceed to the next iterator, if available\r\n                    this.iterators_index++;\r\n                    if (iterators_index < iterators.Count)\r\n                    {\r\n                        iterators[iterators_index].rewind();\r\n                        NextInternal(context);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n                this.isValid = false;   // no more iterators\r\n        }\r\n\r\n        #region AppendIterator\r\n\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext/*!*/context)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object append(ScriptContext/*!*/context, object/*Iterator*/iterator)\r\n        {\r\n            var dobj = iterator as IPhpEnumerable;\r\n            if (dobj != null)\r\n            {\r\n                var newit = new EnumerableIteratorEntry(dobj);\r\n                this.iterators.Add(newit);\r\n\r\n                if (iterators_index + 1 == iterators.Count)\r\n                {\r\n                    // PHP calls valid() on the previous iterator again, but we know it is at the end\r\n                    // ...\r\n\r\n                    // continue with new iterator\r\n                    newit.rewind();\r\n                    NextInternal(context);\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getArrayIterator(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException(); // we dont use ArrayIterator internally\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getIteratorIndex(ScriptContext/*!*/context)\r\n        {\r\n            return this.iterators_index;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region OuterIterator\r\n\r\n        [ImplementsMethod]\r\n        public override object getInnerIterator(ScriptContext/*!*/context)\r\n        {\r\n            return (isValid && iterators_index < iterators.Count) ? iterators[iterators_index].obj : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Iterator\r\n\r\n        [ImplementsMethod]\r\n        public override object rewind(ScriptContext context)\r\n        {\r\n            iterators_index = 0;\r\n\r\n            if (iterators.Count > 0)\r\n                iterators[0].rewind();\r\n\r\n            NextInternal(context);\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object next(ScriptContext context)\r\n        {\r\n            NextInternal(context);\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object valid(ScriptContext context)\r\n        {\r\n            return base.valid(context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object key(ScriptContext context)\r\n        {\r\n            return isValid ? iterators[iterators_index].currentKey : null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public override object current(ScriptContext context)\r\n        {\r\n            return isValid ? iterators[iterators_index].currentValue : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public AppendIterator(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public AppendIterator(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region class AppendIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((AppendIterator)instance).__construct(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public static object append(object instance, PhpStack stack)\r\n        {\r\n            object it = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((AppendIterator)instance).append(stack.Context, it);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public static object getArrayIterator(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((AppendIterator)instance).getArrayIterator(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public static object getIteratorIndex(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((AppendIterator)instance).getIteratorIndex(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface OuterIterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object getInnerIterator(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((OuterIterator)instance).getInnerIterator(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected AppendIterator(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion        \r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Misc.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 Jakub Misek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// The SplObserver interface is used alongside <see cref=\"SplSubject\"/> to implement the Observer Design Pattern.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface SplObserver\r\n    {\r\n        [ImplementsMethod]\r\n        object update(ScriptContext/*!*/context, object/*SplSubject*/subject);\r\n    }\r\n\r\n    /// <summary>\r\n    /// The SplSubject interface is used alongside <see cref=\"SplObserver\"/> to implement the Observer Design Pattern.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public interface SplSubject\r\n    {\r\n        [ImplementsMethod]\r\n        object attach ( ScriptContext/*!*/context, object/*SplObserver*/observer );\r\n        [ImplementsMethod]\r\n        object detach ( ScriptContext/*!*/context, object/*SplObserver*/observer );\r\n        [ImplementsMethod]\r\n        object notify(ScriptContext/*!*/context);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Reflection.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Runtime.Serialization;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    #region Reflector\r\n\r\n    [ImplementsType]\r\n    public interface Reflector\r\n    {\r\n        // HACK HACK HACK!!!\r\n        // The \"export\" method is public static in PHP, and returns always null.\r\n        // This can be declared in pure IL only, not in C#, however we are achieving this by\r\n        // adding its <see cref=\"DRoutineDesc\"/> during initilization (<see cref=\"ApplicationContext.AddExportMethod\"/>).\r\n        // Note we cannot declare the method here, since it would be needed to override it in every derived class.\r\n        //[ImplementsMethod]\r\n        //static object export(ScriptContext/*!*/context) { return null; }\r\n\r\n        [ImplementsMethod]\r\n        object __toString(ScriptContext/*!*/context);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Reflection\r\n\r\n    /// <summary>\r\n    /// \r\n    /// </summary>\r\n    /// <remarks>\r\n    /// <para>\r\n    /// <code>\r\n    /// class Reflection \r\n    /// { \r\n    ///   public static string getModifierNames(int modifiers);\r\n    ///   public static mixed export(Reflector r [, bool return]);  \r\n    /// }\r\n    /// </code>\r\n    /// </para>\r\n    /// </remarks>\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    [ImplementsType]\r\n    public class Reflection : PhpObject\r\n    {\r\n        [Flags]\r\n        public enum Modifiers\r\n        {\r\n            Static = 0x01,\r\n            Abstract = 0x02,\r\n            Final = 0x04,\r\n            AbstractClass = 0x20,\r\n            FinalClass = 0x40,\r\n            Public = 0x100,\r\n            Protected = 0x200,\r\n            Private = 0x400,\r\n            VisibilityMask = Public | Protected | Private\r\n        }\r\n\r\n        #region PHP Methods\r\n\r\n        /// <summary>\r\n        /// Gets an array of modifier names contained in modifiers flags.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public static object getModifierNames(ScriptContext/*!*/context, object/*int*/modifiers)\r\n        {\r\n            PhpArray result = new PhpArray();\r\n            Modifiers flags = (Modifiers)Core.Convert.ObjectToInteger(modifiers);\r\n\r\n            if ((flags & (Modifiers.Abstract | Modifiers.AbstractClass)) != 0)\r\n                result.Add(\"abstract\");\r\n\r\n            if ((flags & (Modifiers.Abstract | Modifiers.AbstractClass)) != 0)\r\n                result.Add(\"final\");\r\n\r\n            switch (flags & Modifiers.VisibilityMask)\r\n            {\r\n                case Modifiers.Public: result.Add(\"public\"); break;\r\n                case Modifiers.Protected: result.Add(\"protected\"); break;\r\n                case Modifiers.Private: result.Add(\"private\"); break;\r\n            }\r\n\r\n            if ((flags & Modifiers.Static) != 0)\r\n                result.Add(\"static\");\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exports a reflection.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public static object export(ScriptContext/*!*/context, object/*Reflector*/reflector, object/*bool*/doReturn)\r\n        {\r\n            if (reflector == null)\r\n                PhpException.ArgumentNull(\"reflector\");\r\n\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            typeDesc.AddMethod(\"getModifierNames\", PhpMemberAttributes.Public | PhpMemberAttributes.Static, getModifierNames);\r\n            typeDesc.AddMethod(\"export\", PhpMemberAttributes.Public | PhpMemberAttributes.Static, export);\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public Reflection(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public Reflection(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getModifierNames(object instance, PhpStack stack)\r\n        {\r\n            stack.CalleeName = \"getModifierNames\";\r\n            object arg1 = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n\r\n            int typed1 = Core.Convert.ObjectToInteger(arg1);\r\n            return getModifierNames(stack.Context, typed1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object export(object instance, PhpStack stack)\r\n        {\r\n            stack.CalleeName = \"export\";\r\n            object arg1 = stack.PeekValue(1);\r\n            object arg2 = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n\r\n            Reflector typed1 = arg1 as Reflector;\r\n            if (typed1 == null) { PhpException.InvalidArgumentType(\"reflector\", \"Reflector\"); return null; }\r\n            bool typed2 = (ReferenceEquals(arg2, Arg.Default)) ? false : Core.Convert.ObjectToBoolean(arg2);\r\n\r\n            return export(stack.Context, typed1, typed2);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected Reflection(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ReflectionException\r\n\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n\r\n    public class ReflectionException : Exception\r\n    {\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static new void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        { throw new NotImplementedException(); }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected ReflectionException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ReflectionProperty\r\n\r\n    /// <summary>\r\n    /// The ReflectionProperty class.\r\n    /// </summary>\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    [ImplementsType]\r\n    public class ReflectionProperty : PhpObject, Reflector\r\n    {\r\n        internal DTypeDesc dtype;\r\n\r\n        internal DPropertyDesc property;\r\n        \r\n        #region Constants\r\n\r\n        public const int IS_STATIC = 1;\r\n        public const int IS_PUBLIC = 256;\r\n        public const int IS_PROTECTED = 512;\r\n        public const int IS_PRIVATE = 1024;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        [PhpVisible]\r\n        public string name\r\n        {\r\n            get\r\n            {\r\n                return (property != null) ? property.MakeFullName() : null;\r\n            }\r\n        }\r\n\r\n        [PhpVisible]\r\n        public string @class\r\n        {\r\n            get\r\n            {\r\n                return (dtype != null) ? dtype.MakeFullName() : null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Nested class: RuntimePhpProperty\r\n\r\n        private sealed class RuntimePhpProperty : DPropertyDesc\r\n        {\r\n            #region Construction\r\n\r\n\t\t    /// <summary>\r\n\t\t    /// Used by type population.\r\n\t\t    /// </summary>\r\n\t\t    internal RuntimePhpProperty(DTypeDesc/*!*/ declaringType, GetterDelegate getterStub, SetterDelegate setterStub)\r\n\t\t\t    : base(declaringType, PhpMemberAttributes.Public)\r\n\t\t    {\r\n\t\t\t    this._getterStub = getterStub;\r\n\t\t\t    this._setterStub = setterStub;\r\n\t\t    }\r\n\r\n\t\t    #endregion\r\n\r\n    \t\t#region Emission (runtime getter/setter stubs)\r\n\r\n\t\tprotected override GetterDelegate GenerateGetterStub()\r\n\t\t{\r\n            throw new NotImplementedException();\r\n\t\t}\r\n\r\n\t\tprotected override SetterDelegate GenerateSetterStub()\r\n\t\t{\r\n            throw new NotImplementedException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Nested class: KnownRuntimeProperty\r\n\r\n        private sealed class KnownRuntimeProperty : KnownProperty\r\n        {\r\n            public override bool IsIdentityDefinite\r\n            {\r\n                get { return true; }\r\n            }\r\n\r\n            public override MemberInfo RealMember\r\n            {\r\n                get { throw null; }\r\n            }\r\n\r\n            internal override PhpTypeCode EmitGet(CodeGenerator codeGenerator, Core.Emit.IPlace instance, bool wantRef, ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n            {\r\n                throw null;\r\n            }\r\n\r\n            internal override AssignmentCallback EmitSet(CodeGenerator codeGenerator, Core.Emit.IPlace instance, bool isRef, ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n            {\r\n                throw null;\r\n            }\r\n\r\n            internal override void EmitUnset(CodeGenerator codeGenerator, Core.Emit.IPlace instance, ConstructedType constructedType, bool runtimeVisibilityCheck)\r\n            {\r\n                throw null;\r\n            }\r\n\r\n            public KnownRuntimeProperty(DPropertyDesc desc, string name)\r\n                :base(desc, new VariableName(name))\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        // ReflectionProperty::__clone Clone\r\n        \r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionProperty(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionProperty(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object @class = stack.PeekValue(1);\r\n            object propertyname = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).__construct(stack.Context, @class, propertyname);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Constructs a ReflectionFunction object.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext context, object @class, object propertyname)\r\n        {\r\n            string propertynameStr = PhpVariable.AsString(propertyname);\r\n\r\n            if (@class == null || string.IsNullOrEmpty(propertynameStr))\r\n                return false;\r\n\r\n            this.dtype = null;\r\n            this.property = null;\r\n\r\n            DObject dobj;\r\n            string str;\r\n\r\n            if ((dobj = (@class as DObject)) != null)\r\n            {\r\n                this.dtype = dobj.TypeDesc;\r\n            }\r\n            else if ((str = PhpVariable.AsString(@class)) != null)\r\n            {\r\n                this.dtype = context.ResolveType(str, null, null, null, ResolveTypeFlags.UseAutoload);\r\n            }\r\n\r\n            if (this.dtype == null)\r\n                return false;\r\n\r\n            if (this.dtype.GetProperty(new VariableName(propertynameStr), dtype, out this.property) == GetMemberResult.NotFound)\r\n            {\r\n                object runtimeValue;\r\n                if (dobj != null && dobj.RuntimeFields != null && dobj.RuntimeFields.TryGetValue(propertynameStr, out runtimeValue))\r\n                {\r\n                    // create desc of runtime field:\r\n                    this.property = new RuntimePhpProperty(dtype,\r\n                        (instance) => ((DObject)instance).GetRuntimeField(this.name, null),\r\n                        (instance, value) => ((DObject)instance).SetRuntimeField(this.name, value, null, null, null));\r\n                    this.property.Member = new KnownRuntimeProperty(this.property, propertynameStr);\r\n                }\r\n                else\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        // ReflectionProperty::export Export\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*ReflectionClass*/getDeclaringClass(ScriptContext context)\r\n        {\r\n            if (dtype == null)\r\n                return false;\r\n\r\n            return new ReflectionClass(context, true)\r\n            {\r\n                typedesc = dtype\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getDeclaringClass(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n\r\n            return ((ReflectionProperty)instance).getDeclaringClass(stack.Context);\r\n        }\r\n\r\n        // ReflectionProperty::getDocComment Gets doc comment\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getModifiers(ScriptContext context)\r\n        {\r\n            if (property == null)\r\n                return false;\r\n\r\n            int result = 0;\r\n\r\n            if (property.IsStatic) result |= IS_STATIC;\r\n            if (property.IsPublic) result |= IS_PUBLIC;\r\n            if (property.IsProtected) result |= IS_PROTECTED;\r\n            if (property.IsPrivate) result |= IS_PRIVATE;\r\n\r\n            return result;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getModifiers(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).getModifiers(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getName(ScriptContext context)\r\n        {\r\n            return this.name;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).getName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*mixed*/getValue(ScriptContext context, object @object)\r\n        {\r\n            var dobj = @object as DObject;\r\n\r\n            if (property != null)\r\n            {\r\n                if (!property.IsStatic && dobj == null)\r\n                {\r\n                    PhpException.ArgumentNull(\"object\");\r\n                    return false;\r\n                }\r\n\r\n                return PhpVariable.Dereference(property.Get(dobj));\r\n            }\r\n\r\n            return false;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getValue(object instance, PhpStack stack)\r\n        {\r\n            var @object = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).getValue(stack.Context, @object);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*void*/setValue(ScriptContext context, object arg1, object arg2)\r\n        {\r\n            DObject dobj = null;\r\n            object value;\r\n\r\n            if (property == null)\r\n                return false;\r\n\r\n            if (property.IsStatic)\r\n            {\r\n                if (arg2 != Arg.Default)\r\n                {\r\n                    PhpException.InvalidArgumentCount(\"ReflectionProperty\", \"setValue\");\r\n                    return false;\r\n                }\r\n\r\n                value = arg1;\r\n            }\r\n            else\r\n            {\r\n                if (arg2 == Arg.Default)\r\n                {\r\n                    PhpException.MissingArgument(2, \"setValue\");\r\n                    return false;\r\n                }\r\n\r\n                dobj = arg1 as DObject;\r\n                value = arg2;\r\n\r\n                if (dobj == null)\r\n                {\r\n                    PhpException.ArgumentNull(\"object\");\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            property.Set(dobj, value);\r\n\r\n            return null;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setValue(object instance, PhpStack stack)\r\n        {\r\n            var arg1 = stack.PeekValue(1);\r\n            var arg2 = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n\r\n            return ((ReflectionProperty)instance).setValue(stack.Context, arg1, arg2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether the property is the default.\r\n        /// </summary>\r\n        /// <param name=\"context\"><see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>TRUE if the property was declared at compile-time, or FALSE if it was created at run-time.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDefault(ScriptContext context)\r\n        {\r\n            return !(this.property is RuntimePhpProperty);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDefault(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).isDefault(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isPrivate(ScriptContext context)\r\n        {\r\n            return property != null && property.IsPrivate;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isPrivate(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).isPrivate(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isProtected(ScriptContext context)\r\n        {\r\n            return property != null && property.IsProtected;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isProtected(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).isProtected(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isPublic(ScriptContext context)\r\n        {\r\n            return property != null && property.IsPublic;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isPublic(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).isPublic(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isStatic(ScriptContext context)\r\n        {\r\n            return property != null && property.IsStatic;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isStatic(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).isStatic(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/setAccessible(ScriptContext context, object accessible)\r\n        {\r\n            if (this.property == null)\r\n                return false;\r\n\r\n            bool baccessible = Core.Convert.ObjectToBoolean(accessible);\r\n            // TODO: remember private property accessibility\r\n            return null;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setAccessible(object instance, PhpStack stack)\r\n        {\r\n            var accessible = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).setAccessible(stack.Context, accessible);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/__toString(ScriptContext context)\r\n        {\r\n            if (property == null)\r\n                return false;\r\n\r\n            return string.Format(\"Property [ {0} ${1} ]\",\r\n                (property.IsStatic ? \"static \" : string.Empty) + (property.IsPublic ? \"public\" : (property.IsProtected ? \"protected\" : \"private\")),\r\n                this.name);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionProperty)instance).__toString(stack.Context);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/ReflectionClass.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Runtime.Serialization;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    /// <summary>\r\n    /// The ReflectionClass class reports information about a class.\r\n    /// </summary>\r\n    [Serializable]\r\n    [ImplementsType]\r\n    public class ReflectionClass : PhpObject, Reflector\r\n    {\r\n        /// <summary>\r\n        /// Resolved <see cref=\"DTypeDesc\"/> of reflected type.\r\n        /// </summary>\r\n        internal DTypeDesc typedesc;\r\n\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Indicates class that is abstract because it has some abstract methods.\r\n        /// </summary>\r\n        public const int IS_IMPLICIT_ABSTRACT = 16;\r\n\r\n        /// <summary>\r\n        /// Indicates class that is abstract because of its definition.\r\n        /// </summary>\r\n        public const int IS_EXPLICIT_ABSTRACT = 32;\r\n\r\n        /// <summary>\r\n        /// Indicates final class.\r\n        /// </summary>\r\n        public const int IS_FINAL = 64;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Name of the class. Read-only, throws <see cref=\"ReflectionException\"/> in attempt to write.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public string name\r\n        {\r\n            get\r\n            {\r\n                if (this._name == null && typedesc != null)\r\n                    this._name = typedesc.MakeFullName();\r\n\r\n                return this._name;\r\n            }\r\n            //set   // DPhpFieldDesc.Set does not support properties properly yet\r\n            //{\r\n            //    Exception.ThrowSplException(\r\n            //        _ctx => new ReflectionException(_ctx, true),\r\n            //        ScriptContext.CurrentContext,\r\n            //        string.Format(CoreResources.readonly_property_written, \"ReflectionClass\", \"name\"), 0, null);\r\n            //}\r\n        }\r\n        private string _name = null;\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionClass(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionClass(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object argument = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).__construct(stack.Context, argument);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext context, object arg)\r\n        {\r\n            DObject dobj;\r\n\r\n            if ((dobj = arg as DObject) != null)\r\n            {\r\n                typedesc = dobj.TypeDesc;\r\n            }\r\n            else\r\n            {\r\n                // namespaces are ignored in runtime\r\n                // any value except DObject is converted to string\r\n                typedesc = ResolveType(context, PHP.Core.Convert.ObjectToString(arg));\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolves the <paramref name=\"typeName\"/> and provides corresponding <see cref=\"DTypeDesc\"/> or <c>null</c> reference.\r\n        /// </summary>\r\n        private static DTypeDesc ResolveType(ScriptContext/*!*/context, string typeName)\r\n        {\r\n            return context.ResolveType(typeName, null, null, null, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.UseAutoload);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ReflectionClass\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object newInstance(object instance, PhpStack stack)\r\n        {\r\n            var self = (ReflectionClass)instance;\r\n            if (self.typedesc == null)\r\n            {\r\n                stack.RemoveFrame();\r\n                return null;\r\n            }\r\n\r\n            // preserve arguments on stack for New\r\n\r\n            // instantiate the object, checks whether typedesc is an abstract type:\r\n            return Operators.New(self.typedesc, null, stack.Context, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of the class. The given arguments are passed to the class constructor.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current context.</param>\r\n        /// <returns>Returns a new instance of the class.</returns>\r\n        [ImplementsMethod]\r\n        [NeedsArgless]\r\n        public virtual object newInstance(ScriptContext/*!*/context)\r\n        {\r\n            // this method should not be called, its argless should.\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object newInstanceArgs(object instance, PhpStack stack)\r\n        {\r\n            object args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).newInstanceArgs(stack.Context, args);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new instance of the class, the given arguments are passed to the class constructor.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current context.</param>\r\n        /// <param name=\"arg\">The parameters to be passed to the class constructor as an <see cref=\"PhpArray\"/>.</param>\r\n        /// <returns>Returns a new instance of the class.</returns>\r\n        [ImplementsMethod]\r\n        public object newInstanceArgs(ScriptContext/*!*/context, object arg)\r\n        {\r\n            if (this.typedesc == null)\r\n                return null;\r\n\r\n            // push arguments onto the stack:\r\n            var array = PhpArray.AsPhpArray(arg);\r\n\r\n            if (array != null)\r\n            {\r\n                var args = new object[array.Count];\r\n                array.CopyValuesTo(args, 0);\r\n                context.Stack.AddFrame(args);\r\n            }\r\n            else\r\n            {\r\n                PhpException.InvalidArgumentType(\"arg\", PhpArray.PhpTypeName);\r\n                return null;\r\n            }\r\n\r\n            //\r\n            return Operators.New(typedesc, null, context, null);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getName, inNamespace, getNamespaceName, getShortName\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getName(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the class name.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getName(ScriptContext/*!*/context)\r\n        {\r\n            return this.name;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object inNamespace(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).inNamespace(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if this class is defined in a namespace.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object inNamespace(ScriptContext/*!*/context)\r\n        {\r\n            var name = this.name;\r\n            return name != null && name.IndexOf(QualifiedName.Separator) != -1;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getNamespaceName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getNamespaceName(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the namespace name or an empty string if the class is not defined in a namespace.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getNamespaceName(ScriptContext/*!*/context)\r\n        {\r\n            var name = this.name;\r\n            int lastSeparatorIndex;\r\n            if (name != null && (lastSeparatorIndex = name.LastIndexOf(QualifiedName.Separator)) != -1)\r\n            {\r\n                return name.Remove(lastSeparatorIndex);\r\n            }\r\n\r\n            return string.Empty;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getShortName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getShortName(stack.Context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the short name of the class, the part without the namespace.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object getShortName(ScriptContext/*!*/context)\r\n        {\r\n            var name = this.name;\r\n            int lastSeparatorIndex;\r\n            if (name != null && (lastSeparatorIndex = name.LastIndexOf(QualifiedName.Separator)) != -1)\r\n            {\r\n                return name.Substring(lastSeparatorIndex + 1);\r\n            }\r\n\r\n            return name;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Reflector\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __toString(object instance, PhpStack stack)\r\n        {\r\n            return ((ReflectionClass)instance).__toString(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object __toString(ScriptContext/*!*/context)\r\n        {\r\n            if (this.typedesc == null)\r\n                return false;\r\n\r\n            StringBuilder result = new StringBuilder();\r\n\r\n            // Interface|Class\r\n            result.Append(this.typedesc.IsInterface ? \"Interface [ interface \" : \"Class [ class \");\r\n            result.Append(this.name);\r\n            result.Append(' ');\r\n            if (this.typedesc.Base != null)\r\n            {\r\n                result.Append(\"extends \");\r\n                result.Append(this.typedesc.Base.MakeFullName());\r\n                result.Append(' ');\r\n            }\r\n            if (this.typedesc.Interfaces.Length > 0)\r\n            {\r\n                result.Append(\"implements \");\r\n                result.Append(string.Join(\", \", this.typedesc.Interfaces.Select(x => x.MakeFullName())));\r\n                result.Append(' ');\r\n            }\r\n            result.AppendLine(\"] {\");\r\n\r\n            // @@ filename\r\n            var fname = this.getFileName(context);\r\n            if (fname is string)\r\n                result.AppendFormat(\"  @@ {0}\\n\", (string)fname);\r\n\r\n            // Constants\r\n            result.AppendLine();\r\n            result.AppendFormat(\"  - Constants [{0}] {{\\n\", this.typedesc.Constants.Count);\r\n            foreach (var cnst in this.typedesc.Constants)\r\n            {\r\n                var cnst_value = cnst.Value.GetValue(context);\r\n                result.AppendFormat(\"    Constant [ {0} {1} ] {{ {2} }}\\n\",\r\n                    PhpVariable.GetTypeName(cnst_value),\r\n                    cnst.Key.Value,\r\n                    Core.Convert.ObjectToString(cnst_value));\r\n            }\r\n            result.AppendLine(\"  }\");\r\n\r\n            // Static properties\r\n            var static_properties = this.typedesc.Properties.Where(x => x.Value.IsStatic).ToList();\r\n            result.AppendLine();\r\n            result.AppendFormat(\"  - Static properties [{0}] {{\\n\", static_properties.Count);\r\n            foreach (var prop in static_properties)\r\n            {\r\n                result.AppendFormat(\"    Property [ {0} static ${1} ]\\n\",\r\n                    VisibilityString(prop.Value.MemberAttributes),\r\n                    prop.Key.Value);\r\n            }\r\n            result.AppendLine(\"  }\");\r\n\r\n            // Static methods\r\n            var static_methods = this.typedesc.Methods.Where(x => x.Value.IsStatic).ToList();\r\n            result.AppendLine();\r\n            result.AppendFormat(\"  - Static methods [{0}] {{\\n\", static_methods.Count);\r\n            foreach (var mtd in static_methods)\r\n            {\r\n                result.AppendFormat(\"    Method [ static {0} method {1} ] {{}}\\n\",\r\n                    VisibilityString(mtd.Value.MemberAttributes),\r\n                    mtd.Key.Value);\r\n                // TODO: @@ fname position\r\n            }\r\n            result.AppendLine(\"  }\");\r\n\r\n            // Properties\r\n            var properties = this.typedesc.Properties.Where(x => !x.Value.IsStatic).ToList();\r\n            result.AppendLine();\r\n            result.AppendFormat(\"  - Properties [{0}] {{\\n\", properties.Count);\r\n            foreach (var prop in properties)\r\n            {\r\n                result.AppendFormat(\"    Property [ {0} ${1} ]\\n\",\r\n                    VisibilityString(prop.Value.MemberAttributes),\r\n                    prop.Key.Value);\r\n            }\r\n            result.AppendLine(\"  }\");\r\n\r\n            // Methods\r\n            var methods = this.typedesc.Methods.Where(x => !x.Value.IsStatic).ToList();\r\n            result.AppendLine();\r\n            result.AppendFormat(\"  - Methods [{0}] {{\\n\", methods.Count);\r\n            foreach (var mtd in static_methods)\r\n            {\r\n                result.AppendFormat(\"    Method [ {0} method {1} ] {{}}\\n\",\r\n                    VisibilityString(mtd.Value.MemberAttributes),\r\n                    mtd.Key.Value);\r\n                // TODO: @@ fname position\r\n            }\r\n            result.AppendLine(\"  }\");\r\n\r\n            // }\r\n            result.AppendLine(\"}\");\r\n            \r\n            //\r\n            return result.ToString();\r\n        }\r\n\r\n        private static string VisibilityString(PhpMemberAttributes attrs)\r\n        {\r\n            var visibility = attrs & PhpMemberAttributes.VisibilityMask;\r\n            switch (visibility)\r\n            {\r\n                case PhpMemberAttributes.Public:\r\n                    return \"public\";\r\n                default:\r\n                    return visibility.ToString().ToLowerInvariant();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region hasMethod, hasConstant, hasProperty\r\n\r\n        [ImplementsMethod]\r\n        public virtual object hasMethod(ScriptContext/*!*/context, object argName)\r\n        {\r\n            var name = new Name(PHP.Core.Convert.ObjectToString(argName));\r\n\r\n            for (var type = this.typedesc; type != null; type = type.Base)\r\n                if (type.Methods.ContainsKey(name))\r\n                    return true;\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasMethod(object instance, PhpStack stack)\r\n        {\r\n            object args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).hasMethod(stack.Context, args);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object hasConstant(ScriptContext/*!*/context, object argName)\r\n        {\r\n            var name = new VariableName(PHP.Core.Convert.ObjectToString(argName));\r\n\r\n            for (var type = this.typedesc; type != null; type = type.Base)\r\n                if (type.Constants.ContainsKey(name))\r\n                    return true;\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasConstant(object instance, PhpStack stack)\r\n        {\r\n            object args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).hasConstant(stack.Context, args);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object hasProperty(ScriptContext/*!*/context, object argName)\r\n        {\r\n            if (this.typedesc == null)\r\n                return false;\r\n\r\n            var name = new VariableName(PHP.Core.Convert.ObjectToString(argName));\r\n\r\n            for (var type = this.typedesc; type != null; type = type.Base)\r\n                if (type.Properties.ContainsKey(name))\r\n                    return true;\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object hasProperty(object instance, PhpStack stack)\r\n        {\r\n            object args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).hasProperty(stack.Context, args);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getFileName\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getFileName(ScriptContext/*!*/context)\r\n        {\r\n            int id;\r\n            string typename;\r\n            string src;\r\n            ReflectionUtils.ParseTypeId(this.typedesc.RealType.FullName, out id, out src, out typename);\r\n            if (src == null)\r\n                return false;\r\n\r\n            return System.IO.Path.Combine(\r\n                Configuration.Application.Compiler.SourceRoot.FullFileName,\r\n                src);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getFileName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getFileName(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getStaticPropertyValue, setStaticPropertyValue, getConstant, getConstants\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getStaticPropertyValue(ScriptContext/*!*/context, object argName, [Optional]object argDefault)\r\n        {\r\n            string name = PHP.Core.Convert.ObjectToString(argName);\r\n            return Operators.GetStaticProperty(this.typedesc, argName, this.TypeDesc, context, false);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getStaticPropertyValue(object instance, PhpStack stack)\r\n        {\r\n            object argName = stack.PeekValue(1);\r\n            object argDefault = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getStaticPropertyValue(stack.Context, argName, argDefault);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object setStaticPropertyValue(ScriptContext/*!*/context, object argName, object value)\r\n        {\r\n            string name = PHP.Core.Convert.ObjectToString(argName);\r\n            Operators.SetStaticProperty(this.typedesc, argName, value, null, context);\r\n            return null;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setStaticPropertyValue(object instance, PhpStack stack)\r\n        {\r\n            object argName = stack.PeekValue(1);\r\n            object argValue = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).setStaticPropertyValue(stack.Context, argName, argValue);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getConstant(ScriptContext context, object argName)\r\n        {\r\n            string name = PHP.Core.Convert.ObjectToString(argName);\r\n            return Operators.GetClassConstant(this.typedesc, name, this.TypeDesc, context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getConstant(object instance, PhpStack stack)\r\n        {\r\n            object argName = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getConstant(stack.Context, argName);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getConstants(ScriptContext context)\r\n        {\r\n            PhpArray arr = new PhpArray(this.typedesc.Constants.Count);\r\n            foreach (var c in this.typedesc.Constants)\r\n                arr.Add(c.Key.Value, c.Value.GetValue(context));\r\n            \r\n            return arr;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getConstants(object instance, PhpStack stack)\r\n        {\r\n            object argName = stack.PeekValue(1);\r\n            return ((ReflectionClass)instance).getConstants(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getInterfaceNames, getParentClass, getInterfaces, implementsInterface\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getInterfaceNames(ScriptContext/*!*/context)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            return new PhpArray(typedesc.Interfaces.Select(x => x.MakeFullName()));\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getInterfaceNames(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getInterfaceNames(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getParentClass(ScriptContext/*!*/context)\r\n        {\r\n            if (typedesc == null || typedesc.Base == null)\r\n                return false;\r\n\r\n            // construct new ReflectionClass with resolved TypeDesc\r\n            return new ReflectionClass(context, true)\r\n            {\r\n                typedesc = this.typedesc.Base\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getParentClass(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getParentClass(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getInterfaces(ScriptContext/*!*/context)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            var ifaces = typedesc.Interfaces;\r\n\r\n            PhpArray result = new PhpArray(ifaces.Length);\r\n            foreach (var ifacedesc in ifaces)\r\n            {\r\n                result.Add(\r\n                    ifacedesc.MakeFullName(),\r\n                    new ReflectionClass(context, true)\r\n                    {\r\n                        typedesc = ifacedesc,\r\n                    });\r\n            }\r\n            return result;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getInterfaces(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getInterfaces(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object implementsInterface(ScriptContext/*!*/context, object ifacename)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            var ifacenamestr = Core.Convert.ObjectToString(ifacename);\r\n            if (string.IsNullOrEmpty(ifacenamestr))\r\n            {\r\n                //PhpException.InvalidArgument(\"ifacename\"); // ?\r\n                return false;\r\n            }\r\n\r\n            var ifaces = typedesc.Interfaces;\r\n\r\n            foreach (var ifacedesc in ifaces)\r\n                if (ifacedesc.MakeFullName().EqualsOrdinalIgnoreCase(ifacenamestr))\r\n                    return true;\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object implementsInterface(object instance, PhpStack stack)\r\n        {\r\n            var ifacename = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).implementsInterface(stack.Context, ifacename);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getConstructor, getMethods, getProperties, getProperty, getStaticProperties\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getConstructor(ScriptContext/*!*/context)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            DRoutineDesc method;\r\n\r\n            if (typedesc.GetMethod(Name.SpecialMethodNames.Construct, null, out method) == GetMemberResult.NotFound)\r\n                return false;\r\n\r\n            // construct new ReflectionClass with resolved TypeDesc\r\n            return new ReflectionMethod(context, true)\r\n            {\r\n                dtype = typedesc,\r\n                method = method,\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getConstructor(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getConstructor(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getMethod(ScriptContext/*!*/context, object name)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            var nameStr = PhpVariable.AsString(name);\r\n            if (string.IsNullOrEmpty(nameStr))\r\n                return false;\r\n\r\n            DRoutineDesc method;\r\n            if (typedesc.GetMethod(new Name(nameStr), typedesc, out method) == GetMemberResult.NotFound)\r\n                return false;\r\n\r\n            return new ReflectionMethod(context, true)\r\n            {\r\n                dtype = method.DeclaringType,\r\n                method = method,\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getMethod(object instance, PhpStack stack)\r\n        {\r\n            var name = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getMethod(stack.Context, name);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getMethods(ScriptContext/*!*/context, object filter = null)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            if (filter != null && filter != Arg.Default)\r\n                PhpException.ArgumentValueNotSupported(\"filter\", filter);\r\n\r\n            PhpArray result = new PhpArray();\r\n            foreach (KeyValuePair<Name, DRoutineDesc> method in typedesc.EnumerateMethods())\r\n            {\r\n                result.Add(new ReflectionMethod(context, true)\r\n                {\r\n                    dtype = method.Value.DeclaringType,\r\n                    method = method.Value,\r\n                });\r\n            }\r\n            return result;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getMethods(object instance, PhpStack stack)\r\n        {\r\n            var filter = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getMethods(stack.Context, filter);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getStaticProperties(ScriptContext/*!*/context)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            PhpArray result = new PhpArray();\r\n\r\n            foreach (var prop in typedesc.Properties.Where(x => x.Value.IsStatic))\r\n                result.Add(prop.Key.Value, prop.Value.Get(null));\r\n            \r\n            return result;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getStaticProperties(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getStaticProperties(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getProperties(ScriptContext/*!*/context, object filter = null)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            PhpArray result = new PhpArray(typedesc.Properties.Count);\r\n\r\n            foreach (var prop in typedesc.Properties)\r\n            {\r\n                result.Add(new ReflectionProperty(context, true)\r\n                {\r\n                    dtype = prop.Value.DeclaringType,\r\n                    property = prop.Value,\r\n                });\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getProperties(object instance, PhpStack stack)\r\n        {\r\n            var filter = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getProperties(stack.Context, filter);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getProperty(ScriptContext/*!*/context, object name)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            DPropertyDesc prop;\r\n            var namestr = Core.Convert.ObjectToString(name);\r\n            if (typedesc.Properties.TryGetValue(new VariableName(namestr), out prop))\r\n            {\r\n                return new ReflectionProperty(context, true)\r\n                {\r\n                    dtype = prop.DeclaringType,\r\n                    property = prop,\r\n                };\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getProperty(object instance, PhpStack stack)\r\n        {\r\n            var name = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getProperty(stack.Context, name);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getModifiers\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getModifiers(ScriptContext context)\r\n        {\r\n            if (typedesc == null)\r\n                return false;\r\n\r\n            int result = 0;\r\n\r\n            if (typedesc.IsAbstract) result |= IS_EXPLICIT_ABSTRACT;\r\n            if (typedesc.IsFinal) result |= IS_FINAL;\r\n            \r\n            return result;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getModifiers(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).getModifiers(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region isAbstract, isFinal, isCloneable, isInstance, isInstantiable, isInterface, isInternal, isIterateable, isSubclassOf, isTrait, isUserDefined\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isAbstract(ScriptContext/*!*/context)\r\n        {\r\n            return this.typedesc != null && this.typedesc.IsAbstract;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isAbstract(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isAbstract(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isFinal(ScriptContext/*!*/context)\r\n        {\r\n            return this.typedesc != null && this.typedesc.IsFinal;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isFinal(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isFinal(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isCloneable(ScriptContext/*!*/context)\r\n        {\r\n            var desc = this.typedesc;\r\n            DRoutineDesc m;\r\n            return\r\n                desc != null &&\r\n                ((m = desc.GetMethod(Name.SpecialMethodNames.Clone)) == null || !m.IsPrivate);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isCloneable(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isCloneable(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isInstance(ScriptContext/*!*/context, object obj)\r\n        {\r\n            var dobj = obj as DObject;\r\n            if (dobj == null)\r\n                PhpException.InvalidArgument(\"obj\");\r\n\r\n            return this.typedesc != null && dobj != null && dobj.TypeDesc.IsAssignableFrom(this.typedesc);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isInstance(object instance, PhpStack stack)\r\n        {\r\n            var obj = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isInstance(stack.Context, obj);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isInstantiable(ScriptContext/*!*/context)\r\n        {\r\n            var desc = this.typedesc;\r\n            DRoutineDesc ctor;\r\n\r\n            return desc != null &&\r\n                !desc.IsInterface &&\r\n                !desc.IsAbstract &&\r\n                ((ctor = desc.GetMethod(Name.SpecialMethodNames.Construct)) == null || !ctor.IsPrivate);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isInstantiable(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isInstantiable(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isInterface(ScriptContext/*!*/context)\r\n        {\r\n            return this.typedesc != null && this.typedesc.IsInterface;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isInterface(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isInterface(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isInternal(ScriptContext/*!*/context)\r\n        {\r\n            return this.typedesc != null && this.typedesc.RealType.Assembly == typeof(ReflectionClass).Assembly;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isInternal(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isInternal(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isIterateable(ScriptContext/*!*/context)\r\n        {\r\n            var iteratordesc = DTypeDesc.Create(typeof(SPL.Iterator));\r\n            return this.typedesc != null && iteratordesc.IsAssignableFrom(this.typedesc);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isIterateable(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isIterateable(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isUserDefined(ScriptContext/*!*/context)\r\n        {\r\n            return !(bool)isInternal(context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isUserDefined(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isUserDefined(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isTrait(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isTrait(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isTrait(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object isSubclassOf(ScriptContext/*!*/context, object @class)\r\n        {\r\n            var classname = PhpVariable.AsString(@class);\r\n\r\n            if (!string.IsNullOrEmpty(classname) && this.typedesc != null)\r\n            {\r\n                var dtype = context.ResolveType(classname, null, null, null, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.UseAutoload);\r\n                return dtype != null && this.typedesc.IsAssignableFrom(dtype);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isSubclassOf(object instance, PhpStack stack)\r\n        {\r\n            var @class = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionClass)instance).isSubclassOf(stack.Context, @class);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Core/SPL/ReflectionFunction.cs",
    "content": "/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Collections;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n    #region ReflectionFunctionAbstract\r\n\r\n    /// <summary>\r\n    /// A parent class to <see cref=\"ReflectionFunction\"/>.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public abstract class ReflectionFunctionAbstract : PhpObject, Reflector\r\n    {\r\n        #region Properties\r\n\r\n        [PhpVisible]\r\n        public virtual string name\r\n        {\r\n            get\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionFunctionAbstract(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionFunctionAbstract(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        [ImplementsMethod]\r\n        private object __clone(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __clone(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).__clone(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object getClosureThis(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getClosureThis(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getClosureThis(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getDocComment(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getDocComment(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getDocComment(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getEndLine(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getEndLine(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getEndLine(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*ReflectionExtension*/getExtension(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getExtension(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getExtension(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getExtensionName(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getExtensionName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getExtensionName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getFileName(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getFileName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getFileName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getName(ScriptContext/*!*/context)\r\n        {\r\n            return this.name;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getNamespaceName(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getNamespaceName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getNamespaceName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getNumberOfParameters(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getNumberOfParameters(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getNumberOfParameters(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getNumberOfRequiredParameters(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getNumberOfRequiredParameters(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getNumberOfRequiredParameters(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*array*/getParameters(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getParameters(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getParameters(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*string*/getShortName(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getShortName(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getShortName(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getStartLine(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getStartLine(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getStartLine(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*array*/getStaticVariables(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getStaticVariables(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).getStaticVariables(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/inNamespace(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object inNamespace(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).inNamespace(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isClosure(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isClosure(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).isClosure(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDeprecated(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDeprecated(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).isDeprecated(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isInternal(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isInternal(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).isInternal(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isUserDefined(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isUserDefined(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).isUserDefined(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/returnsReference(ScriptContext/*!*/context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object returnsReference(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).returnsReference(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public abstract object __toString(ScriptContext/*!*/context);\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunctionAbstract)instance).__toString(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ReflectionFunction\r\n\r\n    /// <summary>\r\n    /// The ReflectionFunction class reports information about a function.\r\n\t/// </summary>\r\n    [ImplementsType]\r\n    public class ReflectionFunction : ReflectionFunctionAbstract\r\n    {\r\n        private DRoutineDesc routine;\r\n\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// Indicates deprecated functions.\r\n        /// </summary>\r\n        public const int IS_DEPRECATED = 262144;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        [PhpVisible]\r\n        public override string name\r\n        {\r\n            get\r\n            {\r\n                return (routine != null) ? routine.MakeFullName() : null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionFunction(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionFunction(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object argument = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunction)instance).__construct(stack.Context, argument);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Constructs a ReflectionFunction object.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"arg\">The name of the function to reflect or a closure.</param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext context, object arg)\r\n        {\r\n            string name = PhpVariable.AsString(arg);\r\n            if (!string.IsNullOrEmpty(name))\r\n            {\r\n                routine = context.ResolveFunction(name, null, false);\r\n            }\r\n            else\r\n            {\r\n                PhpException.InvalidArgument(\"arg\");\r\n            }\r\n\r\n            if (routine == null)\r\n                PhpException.Throw(PhpError.Error, string.Format(\"Function {0}() does not exist\", name));\r\n            \r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        [ImplementsMethod]\r\n        public override object __toString(ScriptContext context)\r\n        {\r\n            return string.Format(\"Function [ function {0} ] {}\", this.name);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunction)instance).__toString(stack.Context);\r\n        }\r\n\r\n        //public static string export ( string $name [, string $return ] )\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*Closure*/getClosure(ScriptContext context)\r\n        {\r\n            return new SPL.Closure(context, routine.ArglessStub, null, null);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getClosure(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunction)instance).getClosure(stack.Context);\r\n        }\r\n        \r\n        [ImplementsMethod, NeedsArgless]\r\n        public virtual object/*mixed*/invoke(ScriptContext context)\r\n        {\r\n            Debug.Fail(\"ArgLess should be called instead!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object invoke(object instance, PhpStack stack)\r\n        {\r\n            ReflectionFunction func = (ReflectionFunction)instance;\r\n            if (func.routine == null)\r\n            {\r\n                stack.RemoveFrame();\r\n                return false;\r\n            }\r\n            \r\n            return func.routine.Invoke(null, stack);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*mixed*/invokeArgs(ScriptContext context, object args)\r\n        {\r\n            if (routine == null)\r\n                return false;\r\n\r\n            ICollection values = null;\r\n            IDictionary dict;\r\n            if ((dict = args as IDictionary) != null) values = dict.Values;\r\n            else values = args as ICollection;\r\n\r\n            // invoke the routine\r\n            var stack = context.Stack;\r\n            stack.AddFrame(values ?? ArrayUtils.EmptyObjects);\r\n            return routine.Invoke(null, stack);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object invokeArgs(object instance, PhpStack stack)\r\n        {\r\n            var args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            \r\n            return ((ReflectionFunction)instance).invokeArgs(stack.Context, args);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDisabled(ScriptContext context)\r\n        {\r\n            return false;   // not supported by Phalanger yet\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDisabled(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionFunction)instance).isDisabled(stack.Context);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ReflectionMethod\r\n\r\n    [ImplementsType]\r\n    public class ReflectionMethod : ReflectionFunctionAbstract\r\n    {\r\n        internal DTypeDesc dtype;\r\n        internal DRoutineDesc method;\r\n        \r\n        #region Constants\r\n\r\n        public const int IS_STATIC = 1;\r\n        public const int IS_ABSTRACT = 2;\r\n        public const int IS_FINAL = 4;\r\n        public const int IS_PUBLIC = 256;\r\n        public const int IS_PROTECTED = 512;\r\n        public const int IS_PRIVATE = 1024;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        [PhpVisible]\r\n        public override string name\r\n        {\r\n            get\r\n            {\r\n                return (method != null) ? method.MakeFullName() : null;\r\n            }\r\n        }\r\n\r\n        [PhpVisible]\r\n        public string @class\r\n        {\r\n            get\r\n            {\r\n                return (dtype != null) ? dtype.MakeFullName() : null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionMethod(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        { }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public ReflectionMethod(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        { }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object __construct(object instance, PhpStack stack)\r\n        {\r\n            object @class = stack.PeekValue(1);\r\n            object methodname = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).__construct(stack.Context, @class, methodname);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Constructs a ReflectionFunction object.\r\n        /// </summary>\r\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext context, object @class, object methodname)\r\n        {\r\n            string methodnameStr = PhpVariable.AsString(methodname);\r\n\r\n            this.dtype = null;\r\n            this.method = null;\r\n\r\n            DObject dobj;\r\n            \r\n            if ((dobj = (@class as DObject)) != null)\r\n            {\r\n                this.dtype = dobj.TypeDesc;\r\n            }\r\n            else\r\n            {\r\n                var str = PhpVariable.AsString(@class);\r\n                if (str != null)\r\n                    this.dtype = context.ResolveType(str, null, null, null, ResolveTypeFlags.UseAutoload);\r\n\r\n                if (this.dtype == null)\r\n                {\r\n                    PhpException.Throw(PhpError.Error, string.Format(\"Class {0} does not exist\", str));\r\n                    return false;\r\n                }\r\n            }\r\n            \r\n            if (this.dtype.GetMethod(new Name(methodnameStr), dtype, out this.method) == GetMemberResult.NotFound)\r\n            {\r\n                PhpException.Throw(PhpError.Error, string.Format(\"Method {0}::{1}() does not exist\", dtype.MakeFullName(), methodnameStr));  \r\n                return false;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        //public static string export ( string $class , string $name [, bool $return = false ] )\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*Closure*/getClosure(ScriptContext context, [Optional]object @object)\r\n        {\r\n            if (method == null)\r\n                return false;\r\n\r\n            if (@object == Arg.Default)\r\n                @object = null;\r\n\r\n            DObject dobj = null;\r\n\r\n            // get instance object\r\n            if (method.IsStatic)\r\n            {\r\n                if (@object != null)\r\n                {\r\n                    PhpException.InvalidArgument(\"object\");\r\n                    @object = null;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                dobj = @object as DObject;\r\n                if (dobj == null)\r\n                {\r\n                    PhpException.InvalidArgumentType(\"object\", DObject.PhpTypeName);\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            // check whether method can be called on this object\r\n            if (dobj != null)\r\n            {\r\n                if (!this.dtype.IsAssignableFrom(dobj.TypeDesc))\r\n                {\r\n                    PhpException.InvalidArgument(\"object\");\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            // create closure that calls the method on specified instance:\r\n            return new SPL.Closure(context, (instance, stack) => method.ArglessStub(dobj, stack), null, null);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getClosure(object instance, PhpStack stack)\r\n        {\r\n            var @object = stack.PeekValueOptional(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).getClosure(stack.Context, @object);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*int*/getModifiers(ScriptContext context)\r\n        {\r\n            if (method == null)\r\n                return false;\r\n\r\n            int result = 0;\r\n            \r\n            if (method.IsStatic) result |= IS_STATIC;\r\n            if (method.IsAbstract) result |= IS_ABSTRACT;\r\n            if (method.IsFinal) result |= IS_FINAL;\r\n            if (method.IsPublic) result |= IS_PUBLIC;\r\n            if (method.IsProtected) result |= IS_PROTECTED;\r\n            if (method.IsPrivate) result |= IS_PRIVATE;\r\n            \r\n            return result;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getModifiers(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).getModifiers(stack.Context);\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Gets the method prototype (if there is one).\r\n        /// Prototype is a method of base class.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns><see cref=\"ReflectionMethod\"/> or <c>FALSE</c>.</returns>\r\n        [ImplementsMethod]\r\n        public virtual object/*ReflectionMethod*/getPrototype(ScriptContext context)\r\n        {\r\n            if (dtype == null || method == null || dtype.Base == null)\r\n                return false;\r\n\r\n            DRoutineDesc prototype;\r\n            if (dtype.Base.GetMethod(method.KnownRoutine.Name, dtype, out prototype) == GetMemberResult.NotFound)\r\n                return false;\r\n\r\n            return new ReflectionMethod(context, true)\r\n            {\r\n                dtype = prototype.DeclaringType,\r\n                method = prototype,\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getPrototype(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).getPrototype(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*ReflectionClass*/getDeclaringClass(ScriptContext context)\r\n        {\r\n            if (dtype == null)\r\n                return false;\r\n\r\n            return new ReflectionClass(context, true)\r\n            {\r\n                typedesc = dtype\r\n            };\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getDeclaringClass(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n\r\n            return ((ReflectionMethod)instance).getDeclaringClass(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod, NeedsArgless]\r\n        public virtual object/*mixed*/invoke(ScriptContext context, object instance)\r\n        {\r\n            Debug.Fail(\"ArgLess should be called instead!\");\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object invoke(object instance, PhpStack stack)\r\n        {\r\n            var m = (ReflectionMethod)instance;\r\n            if (m.method == null)\r\n            {\r\n                stack.RemoveFrame();\r\n                return false;\r\n            }\r\n\r\n            object obj = stack.PeekValue(1);\r\n            PhpArray args = new PhpArray((stack.ArgCount > 1 ? (stack.ArgCount - 1) : (0)));\r\n            for (int i = 2; i <= stack.ArgCount; i++)\r\n                args.Add(stack.PeekValue(i));\r\n            stack.RemoveFrame();\r\n            \r\n            //\r\n            return m.invokeArgs(stack.Context, obj, args);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*mixed*/invokeArgs(ScriptContext context, object instance, object args)\r\n        {\r\n            if (method == null)\r\n                return false;\r\n\r\n            var dobj = instance as DObject;\r\n            if (!method.IsStatic)\r\n            {\r\n                if (dobj == null || !this.dtype.IsAssignableFrom(dobj.TypeDesc))    // non static method needs compatible instance\r\n                {\r\n                    PhpException.InvalidArgument(\"instance\");\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            ICollection values = null;\r\n            IDictionary dict;\r\n            if ((dict = args as IDictionary) != null) values = dict.Values;\r\n            else values = args as ICollection;\r\n\r\n            // invoke the routine\r\n            var stack = context.Stack;\r\n            stack.AddFrame(values ?? ArrayUtils.EmptyObjects);\r\n            stack.LateStaticBindType = dtype;\r\n\r\n            return method.Invoke(dobj, stack);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object invokeArgs(object instance, PhpStack stack)\r\n        {\r\n            var args = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            \r\n            return ((ReflectionFunction)instance).invokeArgs(stack.Context, args);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isAbstract(ScriptContext context)\r\n        {\r\n            return method != null && method.IsAbstract;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isAbstract(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isAbstract(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isConstructor(ScriptContext context)\r\n        {\r\n            return method != null && method.IsConstructor;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isConstructor(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isConstructor(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isDestructor(ScriptContext context)\r\n        {\r\n            return method != null && Name.SpecialMethodNames.Destruct.Value.EqualsOrdinalIgnoreCase(method.MakeFullName());\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isDestructor(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isDestructor(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isFinal(ScriptContext context)\r\n        {\r\n            return method != null && method.IsFinal;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isFinal(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isFinal(stack.Context);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isPrivate(ScriptContext context)\r\n        {\r\n            return method != null && method.IsPrivate;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isPrivate(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isPrivate(stack.Context);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isProtected(ScriptContext context)\r\n        {\r\n            return method != null && method.IsProtected;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isProtected(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isProtected(stack.Context);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isPublic(ScriptContext context)\r\n        {\r\n            return method != null && method.IsPublic;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isPublic(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isPublic(stack.Context);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/isStatic(ScriptContext context)\r\n        {\r\n            return method != null && method.IsStatic;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object isStatic(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).isStatic(stack.Context);\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public virtual object/*bool*/setAccessible(ScriptContext context, object accessible)\r\n        {\r\n            if (this.method == null)\r\n                return false;\r\n\r\n            bool baccessible = Core.Convert.ObjectToBoolean(accessible);\r\n            // TODO: remember private method accessibility\r\n            return null;\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setAccessible(object instance, PhpStack stack)\r\n        {\r\n            var accessible = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).setAccessible(stack.Context, accessible);\r\n        }\r\n        \r\n        [ImplementsMethod]\r\n        public override object/*string*/__toString(ScriptContext context)\r\n        {\r\n            if (method == null)\r\n                return false;\r\n\r\n            return string.Format(\"Method [ {0} method {1} ] {}\",\r\n                (method.IsStatic ? \"static \" : string.Empty) + (method.IsPublic ? \"public\" : (method.IsProtected ? \"protected\" : \"private\")),\r\n                this.name);\r\n        }\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public new static object __toString(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((ReflectionMethod)instance).__toString(stack.Context);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/Serializable.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n\t/// <summary>\r\n\t/// Interface for customized serializing.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Classes that implement this interface no longer support <c>__sleep</c> and <c>__wakeup</c>.\r\n\t/// The method <c>serialize</c> is called whenever an instance needs to be serialized. This does not invoke\r\n\t/// <c>__destruct</c> or has any other side effect unless programmed inside the method. When the data\r\n\t/// is unserialized the class is known and the appropriate <c>unserialize</c> method is called as a\r\n\t/// constructor instead of calling <c>__construct</c>. If you need to execute the standard constructor\r\n\t/// you may do so in the method.\r\n\t/// </remarks>\r\n\t[ImplementsType]\r\n\tpublic interface Serializable\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Returns a string representation of the instance or <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\t[AllowReturnValueOverride]\r\n\t\tobject serialize(ScriptContext context);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reconstructs the instance from a string representation passed as the only parameter.\r\n\t\t/// </summary>\r\n\t\t[ImplementsMethod]\r\n\t\tobject unserialize(ScriptContext context, object data);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/SPL/SplObjectStorage.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 Jakub Misek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace PHP.Library.SPL\r\n{\r\n\t/// <summary>\r\n    /// The SplObjectStorage class provides a map from objects to data or, by ignoring data, an object set. This dual purpose can be useful in many cases involving the need to uniquely identify objects.\r\n\t/// </summary>\r\n    [ImplementsType]\r\n    public class SplObjectStorage : PhpObject, Countable, Iterator, Traversable, Serializable, ArrayAccess\r\n    {\r\n        /// <summary>\r\n        /// Internal storage.\r\n        /// </summary>\r\n        private OrderedHashtable<object>/*!*/storage = new OrderedHashtable<object>();\r\n\r\n        /// <summary>\r\n        /// Internal index while enumerating.\r\n        /// </summary>\r\n        private int index = 0;\r\n\r\n        #region SplObjectStorage\r\n\r\n        /// <summary>\r\n        /// Tries to cast <paramref name=\"storage\"/> to <see cref=\"SplObjectStorage\"/>.\r\n        /// </summary>\r\n        /// <param name=\"storage\">The object.</param>\r\n        /// <returns><see cref=\"SplObjectStorage\"/> instance or <c>null</c>.</returns>\r\n        private static SplObjectStorage asObjectStorage(object storage)\r\n        {\r\n            var dobj = storage as DObject;\r\n            if (dobj != null)\r\n                return dobj.RealObject as SplObjectStorage;\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds all objects from another storage.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"storage\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object addAll(ScriptContext/*!*/context, object storage)\r\n        {\r\n            var data = asObjectStorage(storage);\r\n            if (data != null)\r\n            {\r\n                foreach (var x in data.storage)\r\n                {\r\n                    this.attach(context, x.Key, x.Value);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // ...\r\n            }\r\n            return null;\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Adds an object in the storage.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"obj\"></param>\r\n        /// /// <param name=\"data\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object attach(ScriptContext/*!*/context, object obj, [Optional]object data)\r\n        {\r\n            if (obj == null) return null;\r\n            if (data == Arg.Default) data = null;\r\n\r\n            this.storage[obj] = data;\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if the storage contains a specific object.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"obj\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object contains(ScriptContext/*!*/context, object obj)\r\n        {\r\n            return this.storage.ContainsKey(obj);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes an object from the storage.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"obj\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object detach(ScriptContext/*!*/context, object obj)\r\n        {\r\n            return this.storage.Remove(obj);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calculate a unique identifier for the contained objects.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"obj\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object getHash(ScriptContext/*!*/context, object obj)\r\n        {\r\n            return obj.GetHashCode().ToString(\"x32\");   // see spl_object_hash()\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes objects contained in another storage from the current storage.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"storage\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object removeAll(ScriptContext/*!*/context, object storage)\r\n        {\r\n            var data = asObjectStorage(storage);\r\n            if (data != null)\r\n            {\r\n                foreach (var x in data.storage)\r\n                {\r\n                    this.detach(context, x.Key);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // ...\r\n            }\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes all objects except for those contained in another storage from the current storage.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"storage\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object removeAllExcept(ScriptContext/*!*/context, object storage)\r\n        {\r\n            var data = asObjectStorage(storage);\r\n            if (data != null)\r\n            {\r\n                if (data.storage.Count == 0)\r\n                    return null;    // nothing to remove\r\n\r\n                // remove all except these in {data.storage}\r\n                foreach (var x in this.storage)\r\n                    if (!data.storage.ContainsKey(x.Key))\r\n                        this.storage.Remove(x.Key);\r\n            }\r\n            else\r\n            {\r\n                // ...\r\n            }\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the data associated with the current iterator entry.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object getInfo(ScriptContext/*!*/context)\r\n        {\r\n            return (this.enumerator != null && !this.enumerator.AtEnd) ? this.enumerator.Current.Value : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the data associated with the current iterator entry.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"data\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsMethod]\r\n        public object setInfo(ScriptContext/*!*/context, object data)\r\n        {\r\n            if (this.enumerator != null && !this.enumerator.AtEnd)\r\n                this.enumerator.current.Value = data;\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Countable\r\n\r\n        [ImplementsMethod]\r\n        public object count(ScriptContext/*!*/context)\r\n        {\r\n            return this.storage.Count;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Iterator\r\n\r\n        private OrderedHashtable<object>.Enumerator enumerator;\r\n\r\n        [ImplementsMethod]\r\n        public object rewind(ScriptContext context)\r\n        {\r\n            this.enumerator = this.storage.GetEnumerator();\r\n            this.enumerator.MoveFirst();\r\n            this.index = 0;\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object next(ScriptContext context)\r\n        {\r\n            if (this.enumerator == null)\r\n                rewind(context);\r\n\r\n            this.enumerator.MoveNext();\r\n            this.index++;\r\n\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object valid(ScriptContext context)\r\n        {\r\n            return this.enumerator != null && !this.enumerator.AtEnd;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object key(ScriptContext context)\r\n        {\r\n            return this.index;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object current(ScriptContext context)\r\n        {\r\n            return (this.enumerator != null) ? this.enumerator.Current.Key : null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serializable (NS)\r\n\r\n        [ImplementsMethod]\r\n        public object serialize(ScriptContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object unserialize(ScriptContext context, object data)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ArrayAccess\r\n\r\n        [ImplementsMethod]\r\n        public object offsetGet(ScriptContext context, object index)\r\n        {\r\n            return (index != null) ? this.storage[index] : null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object offsetSet(ScriptContext context, object index, object value)\r\n        {\r\n            if (index != null)\r\n                this.storage[index] = value;\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object offsetUnset(ScriptContext context, object index)\r\n        {\r\n            if (index != null)\r\n                this.storage.Remove(index);\r\n            return null;\r\n        }\r\n\r\n        [ImplementsMethod]\r\n        public object offsetExists(ScriptContext context, object index)\r\n        {\r\n            return this.storage.ContainsKey(index);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplObjectStorage(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SplObjectStorage(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #region class SplObjectStorage\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object addAll(object instance, PhpStack stack)\r\n        {\r\n            var storage = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).addAll(stack.Context, storage);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object attach(object instance, PhpStack stack)\r\n        {\r\n            var storage = stack.PeekValue(1);\r\n            var data = stack.PeekValueOptional(2);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).attach(stack.Context, storage, data);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object contains(object instance, PhpStack stack)\r\n        {\r\n            var obj = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).contains(stack.Context, obj);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object detach(object instance, PhpStack stack)\r\n        {\r\n            var obj = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).detach(stack.Context, obj);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getHash(object instance, PhpStack stack)\r\n        {\r\n            var obj = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).getHash(stack.Context, obj);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object removeAll(object instance, PhpStack stack)\r\n        {\r\n            var storage = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).removeAll(stack.Context, storage);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object removeAllExcept(object instance, PhpStack stack)\r\n        {\r\n            var storage = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).removeAllExcept(stack.Context, storage);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object getInfo(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).getInfo(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object setInfo(object instance, PhpStack stack)\r\n        {\r\n            var data = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((SplObjectStorage)instance).setInfo(stack.Context, data);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Iterator\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object rewind(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).rewind(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object next(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).next(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object valid(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).valid(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object key(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).key(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object current(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Iterator)instance).current(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface ArrayAccess\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetGet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetGet(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetSet(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            object value = stack.PeekValue(2);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetSet(stack.Context, index, value);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetUnset(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetUnset(stack.Context, index);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object offsetExists(object instance, PhpStack stack)\r\n        {\r\n            object index = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((ArrayAccess)instance).offsetExists(stack.Context, index);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Countable\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object count(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Countable)instance).count(stack.Context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region interface Serializable\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object serialize(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((Serializable)instance).serialize(stack.Context);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object unserialize(object instance, PhpStack stack)\r\n        {\r\n            object data = stack.PeekValue(1);\r\n            stack.RemoveFrame();\r\n            return ((Serializable)instance).unserialize(stack.Context, data);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Script.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Text.RegularExpressions;\r\n\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region InclusionResolutionContext\r\n\r\n    /// <summary>\r\n    /// Contains information needed during inclusion resolution.\r\n    /// </summary>\r\n    public class InclusionResolutionContext\r\n    {\r\n        /// <summary>\r\n        /// Application context.\r\n        /// </summary>\r\n        public ApplicationContext ApplicationContext { get { return applicationContext; } }\r\n        private ApplicationContext applicationContext;\r\n\r\n        /// <summary>\r\n        /// Directory, where the including script is present.\r\n        /// </summary>\r\n        public string ScriptDirectory { get { return scriptDirectory; } }\r\n        private string scriptDirectory;\r\n\r\n        /// <summary>\r\n        /// Working directory.\r\n        /// </summary>\r\n        public string WorkingDirectory { get { return workingDirectory; } }\r\n        private string workingDirectory;\r\n\r\n        /// <summary>\r\n        /// Semicolon-separated list of paths where included file is searched before the local directory is checked.\r\n        /// </summary>\r\n        public string SearchPaths { get { return searchPaths; } }\r\n        private string searchPaths;\r\n\r\n        /*\r\n        /// <summary>\r\n        /// Severity of inclusion-related errors. This is determined by type of inclusion being made and is needed by subsequent functions to report errors.\r\n        /// </summary>\r\n        public PhpError ErrorSeverity { get { return errorSeverity; } }\r\n        private PhpError errorSeverity;\r\n        */\r\n\r\n        public InclusionResolutionContext(ApplicationContext applicationContext, string scriptDirectory, string workingDirectory, string searchPaths)\r\n        {\r\n            Debug.Assert(applicationContext != null && scriptDirectory != null && workingDirectory != null && searchPaths != null);\r\n\r\n            this.applicationContext = applicationContext;\r\n            this.scriptDirectory = scriptDirectory;\r\n            this.workingDirectory = workingDirectory;\r\n            this.searchPaths = searchPaths;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n\t/// Interface marking a class containing script implementation. \r\n\t/// </summary>\r\n\tpublic interface IPhpScript\r\n\t{\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides functionality related to PHP scripts.\r\n\t/// </summary>\r\n\tpublic sealed class PhpScript\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A name of an assembly where all web pages are compiled in.\r\n\t\t/// </summary>\r\n        /// <remarks>\r\n        /// This has to be unified with the script library concept in the future.\r\n        /// </remarks>\r\n\t\tpublic const string CompiledWebAppAssemblyName = \"WebPages.dll\";\r\n\r\n\r\n\t\t#region Main Helper\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a specified method whose declaring type is a script type is a Main helper.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"method\">The method.</param>\r\n\t\t/// <param name=\"parameters\">GetUserEntryPoint parameters (optimization). Can be <B>null</B> reference.</param>\r\n\t\t/// <returns>Whether a specified method is an arg-less stub.</returns>\r\n\t\tinternal static bool IsMainHelper(MethodInfo/*!*/ method, ParameterInfo[] parameters)\r\n\t\t{\r\n\t\t\tDebug.Assert(method != null && PhpScript.IsScriptType(method.DeclaringType));\r\n\r\n\t\t\tif (method.Name != ScriptModule.MainHelperName) return false;\r\n\t\t\tif (parameters == null) parameters = method.GetParameters();\r\n\t\t\treturn parameters.Length == 5 && parameters[4].ParameterType == Emit.Types.Bool[0];\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified <see cref=\"Type\"/> is a script type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type to be checked.</param>\r\n\t\t/// <returns><B>true</B> iff <paramref name=\"type\"/> is a script type.</returns>\r\n\t\tpublic static bool IsScriptType(Type type)\r\n\t\t{\r\n\t\t\treturn typeof(IPhpScript).IsAssignableFrom(type);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Invokes a main method of a specified script.\r\n        ///// </summary>\r\n        ///// <param name=\"script\">The script type to be dynamically included.</param>\r\n        ///// <param name=\"context\">A script context.</param>\r\n        ///// <param name=\"variables\">A table of defined variables.</param>\r\n        ///// <param name=\"self\">PHP object context.</param>\r\n        ///// <param name=\"includer\">PHP class context.</param>\r\n        ///// <param name=\"isMain\">Whether the target script is the main script.</param>\r\n        ///// <returns>The return value of the helper method.</returns>\r\n        ///// <exception cref=\"MissingMethodException\">If the helper method is not found.</exception>\r\n        ///// <exception cref=\"PhpException\">Fatal error.</exception>\r\n        ///// <exception cref=\"PhpUserException\">Uncaught user exception.</exception>\r\n        ///// <exception cref=\"ScriptDiedException\">Script died or exit.</exception>\r\n        ///// <exception cref=\"TargetInvocationException\">An internal error thrown by the target.</exception>\r\n        //internal static object InvokeMainHelper(\r\n        //    Type script,\r\n        //    ScriptContext context,\r\n        //    Dictionary<string, object> variables,\r\n        //    DObject self,\r\n        //    DTypeDesc includer,\r\n        //    bool isMain)\r\n        //{\r\n        //    MethodInfo mi = script.GetMethod(ScriptModule.MainHelperName);\r\n        //    if (mi == null)\r\n        //        throw new MissingMethodException(ScriptModule.MainHelperName);\r\n\r\n        //    return PhpFunctionUtils.Invoke(mi, null, context, variables, self, includer, isMain);\r\n        //}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Names\r\n\r\n\t\t/// <summary>\r\n\t\t/// String added to identifiers of m-decl functions/classes.\r\n\t\t/// </summary>\r\n\t\tinternal const char MDeclMark = '#';\r\n\r\n\t\t/// <summary>\r\n\t\t/// Splits a specified identifier and into a function/class name and an m-decl index (if applicable).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fullClrName\">An identifier.</param>\r\n\t\t/// <param name=\"name\">The name of the function/class.</param>\r\n\t\t/// <param name=\"index\">The index of the function/class if identifier has m-decl format or -1 if not.</param>\r\n\t\tpublic static void ParseMDeclName(string/*!*/ fullClrName, out string name, out int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullClrName != null);\r\n\r\n\t\t\tint idx = fullClrName.LastIndexOf(MDeclMark);\r\n\r\n\t\t\tif (idx > 0)\r\n\t\t\t{\r\n\t\t\t\tname = fullClrName.Substring(0, idx);\r\n\t\t\t\tindex = (int)UInt32.Parse(fullClrName.Substring(idx + 1));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tname = fullClrName;\r\n\t\t\t\tindex = -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static string/*!*/ ParseMDeclName(string/*!*/ fullClrName)\r\n\t\t{\r\n\t\t\tDebug.Assert(fullClrName != null);\r\n\r\n\t\t\tint idx = fullClrName.LastIndexOf(MDeclMark);\r\n\t\t\treturn (idx > 0) ? fullClrName.Substring(0, idx) : fullClrName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Decides whehter a specified name has m-decl name format.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the function.</param>\r\n\t\t/// <param name=\"index\">The m-decl index of the function. Should be positive.</param>\r\n\t\t/// <returns>Whether the name has m-decl name format.</returns>\r\n\t\tpublic static string FormatMDeclName(string name, int index)\r\n\t\t{\r\n\t\t\tDebug.Assert(index > 0);\r\n\t\t\treturn String.Concat(name, MDeclMark, index.ToString());\r\n\t\t}\r\n\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region FindInclusionTargetPath, IsXxxInclusion\r\n\r\n#if !SILVERLIGHT\r\n        ///// <summary>\r\n        ///// Tests whether path can be used for script inclusion.\r\n        ///// </summary>\r\n        ///// <param name=\"context\">Inclusion context containing information about include which is being evaluated.</param>\r\n        ///// <param name=\"fullPath\">FullPath value.</param>\r\n        ///// <param name=\"pathIsValid\">Function deciding about file existence.</param>\r\n        ///// <param name=\"errorMessage\">Error message containing description of occured error. If no error occured, null value is returned.</param>\r\n        ///// <returns>True is path is valid for inclusion, otherwise false.</returns>\r\n        //internal static bool IsPathValidForInclusion(InclusionResolutionContext context, FullPath fullPath, Predicate<FullPath>/*!*/pathIsValid, out string errorMessage)\r\n        //{\r\n        //    errorMessage = null;\r\n\r\n        //    //return\r\n        //    //    (context.ApplicationContext.ScriptLibraryDatabase != null && context.ApplicationContext.ScriptLibraryDatabase.ContainsScript(fullPath)) ||\r\n        //    //    (fileExists != null && fileExists(fullPath)) ||\r\n        //    //    (fullPath.FileExists);\r\n\r\n        //    Debug.Assert(pathIsValid != null);\r\n\r\n        //    return pathIsValid(fullPath);\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Searches for an existing file among files which names are combinations of a relative path and one of the \r\n        /// paths specified in a list.\r\n        /// </summary>\r\n        /// <param name=\"context\">Inclusion context containing information about include which is being evaluated.</param>\r\n        /// <param name=\"relativePath\">The relative path.</param>\r\n        /// <param name=\"pathIsValid\">Function deciding file existence.</param>\r\n        /// <returns>Full path to a first existing file or an empty path.</returns>\r\n        private static FullPath SearchInSearchPaths(InclusionResolutionContext context, string relativePath, Predicate<FullPath>/*!*/pathIsValid)\r\n        {\r\n            // TODO: review this when script libraries are united with precompiled web\r\n            if (context.SearchPaths == String.Empty)\r\n                return FullPath.Empty;\r\n            \r\n            Debug.Assert(pathIsValid != null);\r\n\r\n            string path;\r\n\r\n            for (int i = 0, j = 0; j >= 0; i = j + 1)\r\n            {\r\n                j = context.SearchPaths.IndexOf(Path.PathSeparator, i);\r\n                path = (j >= 0) ? context.SearchPaths.Substring(i, j - i) : context.SearchPaths.Substring(i);\r\n\r\n                FullPath result = FullPath.Empty;\r\n\r\n                // TODO: exceptions should be handled better, not as part of algorithm's logic\r\n                try\r\n                {\r\n                    string path_root = Path.GetPathRoot(path);\r\n\r\n                    // makes the path complete and absolute:\r\n                    if (path_root == \"\\\\\")\r\n                    {\r\n                        path = Path.Combine(Path.GetPathRoot(context.WorkingDirectory), path.Substring(1));\r\n                    }\r\n                    else if (path_root == \"\")\r\n                    {\r\n                        path = Path.Combine(context.WorkingDirectory, path);\r\n                    }\r\n\r\n                    // combines the search path with the relative path:\r\n                    path = Path.GetFullPath(Path.Combine(path, relativePath));\r\n\r\n                    // prepare the FullPath version\r\n                    result = new FullPath(path, false);\r\n                }\r\n                catch (SystemException)\r\n                {\r\n                    continue;\r\n                }\r\n\r\n                // this function might throw an exception in case of ambiguity\r\n                if (pathIsValid(result)/*IsPathValidForInclusion(context, result, pathIsValid, out errorMessage)*/)\r\n                    return result;\r\n                \r\n                //if (errorMessage != null)\r\n                //    return FullPath.Empty;\r\n            }\r\n\r\n            //errorMessage = null;\r\n            return FullPath.Empty;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for a specified inclusion target.\r\n\t\t/// </summary>\r\n        /// <param name=\"context\">Inclustion resolution context.</param>\r\n        /// <param name=\"path\">Path to the file to search.</param>\r\n        /// <param name=\"pathIsValid\">Function deciding about file existence. Only path that passes this function is returned.</param>\r\n        /// <param name=\"errorMessage\">Warning which should be reported by the compiler or a <B>null</B> reference. The error message can be set iff the returned path is empty.</param>\r\n\t\t/// <returns>\r\n\t\t/// A canonical path to the target file or a <B>null</B> reference if the file path is not valid or the file not exists.\r\n\t\t/// </returns>\r\n\t\tinternal static FullPath FindInclusionTargetPath(InclusionResolutionContext context, string path, Predicate<FullPath>/*!*/pathIsValid, out string errorMessage)\r\n\t\t{\r\n            Debug.Assert(context != null && path != null);\r\n            Debug.Assert(pathIsValid != null);\r\n\r\n            try\r\n            {\r\n                string root = Path.GetPathRoot(path);\r\n\r\n                if (root == \"\\\\\")\r\n                {\r\n                    // incomplete absolute path //\r\n\r\n                    // the path is at least one character long - the first character is slash that should be trimmed out: \r\n                    path = Path.Combine(Path.GetPathRoot(context.WorkingDirectory), path.Substring(1));\r\n                }\r\n                else if (root == \"\")\r\n                {\r\n                    // relative path //\r\n\r\n                    // search in search paths at first (accepts empty path list as well):\r\n                    FullPath result = SearchInSearchPaths(context, path, pathIsValid/*, out errorMessage*/);\r\n\r\n                    // if an error message occurred, immediately return\r\n                    //if (errorMessage != null)\r\n                    //    return FullPath.Empty;\r\n                    \r\n                    // if the file is found then it exists so we can return immediately:\r\n                    if (!result.IsEmpty)\r\n                    {\r\n                        errorMessage = null;\r\n                        return result;\r\n                    }\r\n\r\n                    // not found => the path is combined with the directory where the script being compiled is stored:\r\n                    path = Path.Combine(context.ScriptDirectory, path);\r\n                }\r\n\r\n                // canonizes the complete absolute path:\r\n                path = Path.GetFullPath(path);\r\n            }\r\n            catch (SystemException e)\r\n            {\r\n                errorMessage = e.Message + \"\\n\" + e.StackTrace;\r\n                return FullPath.Empty;\r\n            }\r\n\r\n\t\t\tFullPath full_path = new FullPath(path, false);\r\n\r\n\t\t\t// file does not exists:\r\n            if (!pathIsValid(full_path)/*IsPathValidForInclusion(context, full_path, pathIsValid, out errorMessage)*/)\r\n            {\r\n                errorMessage = \"Script cannot be included with current configuration.\";\r\n                return FullPath.Empty;\r\n            }\r\n\r\n            errorMessage = null;\r\n            return full_path;\r\n\t\t}\r\n#endif\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Unit Testing\r\n#if DEBUG && !SILVERLIGHT\r\n\r\n\t\tpublic static void Test_FindInclusionTargetPath()\r\n\t\t{\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\t\t\tstring result, message;\r\n\r\n\t\t\tstring[,] s = new string[,] \r\n      { \r\n        // source script                    // included script    // working dir       // include_path \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"./db/mssql.php\",     @\"C:\\Web\\phpBB2\",    \".\"},\r\n        // -> path='C:\\Web\\phpBB2\\db\\mssql.php' message=\"\"\r\n\r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"/db/mssql.php\",      @\"D:\\Video\",         \"\"},\r\n        // -> path='' message=\"File 'D:\\db\\mssql.php' does not exist.\"\r\n        \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"./mssql.php\",        @\"C:\\Web\\phpBB2\",    \"db\"},\r\n        // -> path='C:\\Web\\phpBB2\\db\\mssql.php' message=\"\"\r\n        \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"./mssql.php\",        @\"C:\\Web\\phpBB2\",    \"x\"},\r\n        // -> path='' message=\"File 'C:\\Web\\phpBB2\\includes\\mssql.php' does not exist.\"\r\n        \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"mssql.php\",          @\"C:\\Web\\phpBB2\",    \"/Web/phpBB2/db\"},\r\n        // -> path='C:\\Web\\phpBB2\\db\\mssql.php' message=\"\"\r\n\r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"mssql.php\",          @\"C:\\Web\\phpBB2\",    \"/Web/php*B2/db\"},\r\n        // -> path='' message=\"File 'C:\\Web\\phpBB2\\includes\\mssql.php' does not exist.\"\r\n        \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"mssql.php\",          @\"C:\\W*b\\phpBB2\",    \"/Web/phpBB2/db\"},\r\n        // -> path='C:\\Web\\phpBB2\\db\\mssql.php' message=\"\"\r\n        \r\n        { @\"C:\\Web\\phpBB2\\includes\\db.php\", \"*/mssql.php\",        @\"C:\\W*b\\phpBB2\",    \"/Web/phpBB2/db\"},\r\n        // -> path='' message=\"Illegal characters in path.\"\r\n      };\r\n\r\n\t\t\tConsole.WriteLine(\"{0}; {1}; {2}; {3}\\n\", \"source script\", \"included script\", \"working dir\", \"include_path\");\r\n\t\t\tfor (int i = 0; i < s.GetLength(0); i++)\r\n\t\t\t{\r\n                result = FindInclusionTargetPath(new InclusionResolutionContext(ApplicationContext.Default, s[i, 0], s[i, 2], s[i, 3]), s[i, 1], (path) => path.FileExists, out message);\r\n\t\t\t\tConsole.WriteLine(\"'{0}'; '{1}'; '{2}'; '{3}'\\npath='{4}' message=\\\"{5}\\\"\\n\", s[i, 0], s[i, 1], s[i, 2], s[i, 3], result, message);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static void Test_TranslateIncludeExpression()\r\n\t\t{\r\n\t\t\tApplicationConfiguration app = Configuration.Application;\r\n\r\n\t\t\tstring[,] s = new string[,]\r\n      {\r\n        // pattern                                  // replacement              // expression\r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"LIB_PATH . \\\"file1.php\\\"\"},\r\n        // result='/Library/file1.php'\r\n        \r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"  \\t LIB_PATH . \\\"file2.php\\\"\"},\r\n        // result='/Library/file2.php'\r\n        \r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"lib_path.\\\"file3.php\\\"\"},\r\n        // result='/Library/file3.php'\r\n        \r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"LIB_PATH.\\\"file$i.php\\\"\"},\r\n        // result=''\r\n        \r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"'file3.php'\"},\r\n        // result=''\r\n        \r\n        {@\"LIB_PATH\\s*\\.\\s*\"\"([^\"\"$]+)\"\"\",          @\"/Library/$1\",             \"$x.'file3.php'\"},\r\n        // result=''      \r\n        \r\n      };\r\n\r\n\t\t\tList<InclusionMapping> mappings = new List<InclusionMapping>(1);\r\n\r\n\t\t\tConsole.WriteLine(\"{0}; {1}; {2};\\n\", \"pattern\", \"replacement\", \"expression\");\r\n\t\t\tfor (int i = 0; i < s.GetLength(0); i++)\r\n\t\t\t{\r\n\t\t\t\tmappings[0] = new InclusionMapping(s[i, 0], s[i, 1], null);\r\n\t\t\t\tstring result = InclusionMapping.TranslateExpression(mappings, s[i, 2], @\"C:\\inetpub\\wwwroot\");\r\n\t\t\t\tConsole.WriteLine(\"#{0}# '{1}' '{2}'\\nresult='{3}'\\n\", s[i, 0], s[i, 1], s[i, 2], result);\r\n\t\t\t}\r\n\t\t}\r\n\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/ScriptContext.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\n//using System.Web.SessionState;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections;\r\n//using System.Collections.Specialized;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.Remoting.Messaging;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing System.Configuration;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// The context of an executing script. Contains data associated with a request.\r\n\t/// </summary>\r\n\t[DebuggerTypeProxy(typeof(ScriptContext.DebugView))]\r\n\tpublic sealed partial class ScriptContext : ILogicalThreadAffinative\r\n\t{\r\n\t\t#region Initialization of requests and applications\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes the script context for a web request.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"appContext\">Application context.</param>\r\n\t\t/// <param name=\"context\">HTTP context of the request.</param>\r\n\t\t/// <returns>A instance of <see cref=\"ScriptContext\"/> to be used by the request.</returns>\r\n\t\t/// <exception cref=\"System.Configuration.ConfigurationErrorsException\">\r\n\t\t/// Web configuration is invalid. The context is not initialized then.\r\n\t\t/// </exception>\r\n\t\tinternal static ScriptContext/*!*/ InitWebRequest(ApplicationContext/*!*/ appContext, HttpContext/*!*/ context)\r\n\t\t{\r\n\t\t\tDebug.Assert(appContext != null && context != null);\r\n\r\n\t\t\t// reloads configuration of the current thread from ASP.NET caches or web.config files;\r\n\t\t\t// cached configuration is reused;\r\n\t\t\tConfiguration.Reload(appContext, false);\r\n\r\n\t\t\t// takes a writable copy of a global configuration (may throw ConfigurationErrorsException):\r\n\t\t\tLocalConfiguration config = (LocalConfiguration)Configuration.DefaultLocal.DeepCopy();\r\n\r\n            // following initialization statements shouldn't throw an exception:    // can throw on Integrated Pipeline, events must be attached within HttpApplication.Init()\r\n\r\n\t\t\tScriptContext result = new ScriptContext(appContext, config, context.Response.Output, context.Response.OutputStream);\r\n\r\n\t\t\tresult.IsOutputBuffered = config.OutputControl.OutputBuffering;\r\n\t\t\tresult.ThrowExceptionOnError = true;\r\n\t\t\tresult.WorkingDirectory = Path.GetDirectoryName(context.Request.PhysicalPath);\r\n            if (config.OutputControl.ContentType != null) context.Response.ContentType = config.OutputControl.ContentType;\r\n            if (config.OutputControl.CharSet != null) context.Response.Charset = config.OutputControl.CharSet;\r\n\r\n\t\t\tresult.AutoGlobals.Initialize(config, context);\r\n\r\n\t\t\tScriptContext.CurrentContext = result;\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new script context and runs the application in it. For internal use only.\r\n        /// </summary>\r\n        /// <param name=\"mainRoutine\">The script's main helper routine.</param>\r\n        /// <param name=\"relativeSourcePath\">A path to the main script source file.</param>\r\n        /// <param name=\"sourceRoot\">A source root within which an application has been compiler.</param>\r\n        [Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static void RunApplication(Delegate/*!*/ mainRoutine, string relativeSourcePath, string sourceRoot)\r\n        {\r\n            bool is_pure = mainRoutine is RoutineDelegate;\r\n\r\n            ApplicationContext app_context = ApplicationContext.Default;\r\n\r\n            // default culture:\r\n            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;\r\n\r\n            // try to preload configuration (to prevent exceptions during InitApplication:\r\n            try\r\n            {\r\n                Configuration.Load(app_context);\r\n            }\r\n            catch (ConfigurationErrorsException e)\r\n            {\r\n                Console.WriteLine(e.Message);\r\n                return;\r\n            }\r\n\r\n            ApplicationConfiguration app_config = Configuration.Application;\r\n\r\n            if (is_pure && !app_config.Compiler.LanguageFeaturesSet)\r\n                app_config.Compiler.LanguageFeatures = LanguageFeatures.PureModeDefault;\r\n\r\n            Type main_script;\r\n            if (is_pure)\r\n            {\r\n                // loads the calling assembly:\r\n                app_context.AssemblyLoader.Load(mainRoutine.Method.Module.Assembly, null);\r\n                main_script = null;\r\n            }\r\n            else\r\n            {\r\n                main_script = mainRoutine.Method.DeclaringType;\r\n                app_context.AssemblyLoader.LoadScriptLibrary(System.Reflection.Assembly.GetEntryAssembly(), \".\");\r\n            }\r\n\r\n            using (ScriptContext context = InitApplication(app_context, main_script, relativeSourcePath, sourceRoot))\r\n            {\r\n                context.GuardedCall<object, object>(context.GuardedMain, mainRoutine, true);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes the script context for a PHP console application.\r\n        /// </summary>\r\n        /// <param name=\"appContext\">Application context.</param>\r\n        /// <param name=\"mainScript\">The main script's type or a <B>null</B> reference for a pure application.</param>\r\n        /// <param name=\"relativeSourcePath\">A path to the main script source file.</param>\r\n        /// <param name=\"sourceRoot\">A source root within which an application has been compiler.</param>\r\n        /// <returns>\r\n        /// A new instance of <see cref=\"ScriptContext\"/> with its own copy of local configuration \r\n        /// to be used by the application.\r\n        /// </returns>\r\n        /// <exception cref=\"System.Configuration.ConfigurationErrorsException\">\r\n        /// Web configuration is invalid. The context is not initialized then.\r\n        /// </exception>\r\n        /// <remarks>\r\n        /// Use this method if you want to initialize application in the same way the PHP console/Windows \r\n        /// application is initialized. The returned script context is initialized as follows:\r\n        /// <list type=\"bullet\">\r\n        ///   <term>The application's source root is set.</term>\r\n        ///   <term>The main script of the application is defined.</term>\r\n        ///   <term>Output and input streams are set to standard output and input, respectively.</term>\r\n        ///   <term>Current culture it set to <see cref=\"CultureInfo.InvariantCulture\"/>.</term>\r\n        ///   <term>Auto-global variables ($_GET, $_SET, etc.) are initialized.</term>\r\n        ///   <term>Working directory is set tothe current working directory.</term>\r\n        /// </list>\r\n        /// </remarks>\r\n        public static ScriptContext/*!*/ InitApplication(ApplicationContext/*!*/ appContext, Type mainScript,\r\n            string relativeSourcePath, string sourceRoot)\r\n        {\r\n            // loads configuration into the given application context \r\n            // (applies only if the config has not been loaded yet by the current thread):\r\n            Configuration.Load(appContext);\r\n\r\n            ApplicationConfiguration app_config = Configuration.Application;\r\n\r\n            if (mainScript != null)\r\n            {\r\n                if (relativeSourcePath == null)\r\n                    throw new ArgumentNullException(\"relativeSourcePath\");\r\n\r\n                if (sourceRoot == null)\r\n                    throw new ArgumentNullException(\"sourceRoot\");\r\n\r\n                // overrides source root configuration if not explicitly specified in config file:\r\n                if (!app_config.Compiler.SourceRootSet)\r\n                    app_config.Compiler.SourceRoot = new FullPath(sourceRoot);\r\n            }\r\n\r\n            // takes a writable copy of a global configuration:\r\n            LocalConfiguration config = (LocalConfiguration)Configuration.DefaultLocal.DeepCopy();\r\n\r\n            // sets invariant culture as a default one:\r\n            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;\r\n\r\n            ScriptContext result = new ScriptContext(appContext, config, Console.Out, Console.OpenStandardOutput());\r\n\r\n            result.IsOutputBuffered = result.config.OutputControl.OutputBuffering;\r\n            result.AutoGlobals.Initialize(config, null);\r\n            result.WorkingDirectory = Directory.GetCurrentDirectory();\r\n            result.ThrowExceptionOnError = true;\r\n            result.config.ErrorControl.HtmlMessages = false;\r\n\r\n            if (mainScript != null)\r\n            {\r\n                // converts relative path of the script source to full canonical path using source root from the configuration:\r\n                PhpSourceFile main_source_file = new PhpSourceFile(\r\n                    app_config.Compiler.SourceRoot,\r\n                    new FullPath(relativeSourcePath, app_config.Compiler.SourceRoot)\r\n                );\r\n\r\n                result.DefineMainScript(new ScriptInfo(mainScript), main_source_file);\r\n            }\r\n\r\n            ScriptContext.CurrentContext = result;\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        #region InitContext\r\n\r\n        /// <summary>\r\n        /// Initializes <see cref=\"ScriptContext\"/> for the C#/PHP interoperability.\r\n        /// </summary>\r\n        /// <param name=\"appContext\">Application context.</param>\r\n        /// <returns>New <see cref=\"ScriptContext\"/></returns>\r\n        /// <remarks>\r\n        /// Use this method if you want to initialize application in the same way the PHP console/Windows \r\n        /// application is initialized. CurrentContext is set, and initialized to simulate request begin and end.\r\n        /// </remarks>\r\n        public static ScriptContext/*!*/InitContext(ApplicationContext appContext)\r\n        {\r\n            if (appContext == null)\r\n                appContext = ApplicationContext.Default;\r\n\r\n            var context = InitApplication(appContext, null, null, null);\r\n\r\n            // simulate request lifecycle\r\n            RequestContext.InvokeRequestBegin();\r\n            context.FinallyDispose += RequestContext.InvokeRequestEnd;\r\n\r\n            //\r\n            return context;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes <see cref=\"ScriptContext\"/> for the C#/PHP interoperability.\r\n        /// </summary>\r\n        /// <param name=\"appContext\">Application context.</param>\r\n        /// <param name=\"output\">Output stream.</param>\r\n        /// <returns>New <see cref=\"ScriptContext\"/></returns>\r\n        /// <remarks>\r\n        /// Use this method if you want to initialize application in the same way the PHP console/Windows \r\n        /// application is initialized. CurrentContext is set, and initialized to simulate request begin and end.\r\n        /// </remarks>\r\n        public static ScriptContext/*!*/InitContext(ApplicationContext appContext, Stream output)\r\n        {\r\n            var context = InitContext(appContext);\r\n\r\n            // setups output\r\n            if (output == null)\r\n                output = Stream.Null;\r\n\r\n            context.OutputStream = output;\r\n            context.Output = new StreamWriter(output);\r\n\r\n            return context;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Constants\r\n\r\n        private void InitConstants(DualDictionary<string, object> _constants)\r\n\t\t{\r\n            // Thease constants are here, because they are environment dependent\r\n            // When the code is compiled and assembly is run on another platforms they could be different\r\n\r\n            _constants.Add(\"PHALANGER\", PhalangerVersion.Current, false);\r\n            _constants.Add(\"PHP_VERSION\", PhpVersion.Current, false);\r\n            _constants.Add(\"PHP_MAJOR_VERSION\", PhpVersion.Major, false);\r\n            _constants.Add(\"PHP_MINOR_VERSION\", PhpVersion.Minor, false);\r\n            _constants.Add(\"PHP_RELEASE_VERSION\", PhpVersion.Release, false);\r\n            _constants.Add(\"PHP_VERSION_ID\", PhpVersion.Major * 10000 + PhpVersion.Minor * 100 + PhpVersion.Release, false);\r\n            _constants.Add(\"PHP_EXTRA_VERSION\", PhpVersion.Extra, false);\r\n            _constants.Add(\"PHP_OS\", Environment.OSVersion.Platform == PlatformID.Win32NT ? \"WINNT\" : \"WIN32\", false); // TODO: GENERICS (Unix)\r\n            _constants.Add(\"PHP_SAPI\", (System.Web.HttpContext.Current == null) ? \"cli\" : \"isapi\", false);\r\n            _constants.Add(\"DIRECTORY_SEPARATOR\", FullPath.DirectorySeparatorString, false);\r\n            _constants.Add(\"PATH_SEPARATOR\", Path.PathSeparator.ToString(), false);\r\n\r\n            //TODO: should be specified elsewhere (app context??)\r\n            _constants.Add(\"PHP_EOL\", System.Environment.NewLine, false);\r\n\r\n            //TODO: this is a bit pesimistic, as this value is a bit higher on Vista and on other filesystems and OSes\r\n            //      sadly .NET does not specify value of MAXPATH constant\r\n            _constants.Add(\"PHP_MAXPATHLEN\", 255, false);\r\n\r\n            if (HttpContext.Current == null)\r\n            {\r\n                _constants.Add(\"STDIN\", InputOutputStreamWrapper.In, false);\r\n                _constants.Add(\"STDOUT\", InputOutputStreamWrapper.Out, false);\r\n                _constants.Add(\"STDERR\", InputOutputStreamWrapper.Error, false);\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Current Context\r\n\r\n\t\t/// <summary>\r\n\t\t/// Call context name for the current <see cref=\"ScriptContext\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate const string callContextSlotName = \"PhpNet:ScriptContext\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// The instance of <see cref=\"ScriptContext\"/> associated with the current logical thread.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If no instance is associated with the current logical thread\r\n\t\t/// a new one is created, added to call context and returned. \r\n\t\t/// The slot allocated by some instance is freed\r\n\t\t/// by setting this property to a <B>null</B> reference.\r\n\t\t/// </remarks>\r\n        [DebuggerNonUserCode]\r\n\t\tpublic static ScriptContext CurrentContext\r\n\t\t{\r\n\t\t\t[Emitted]\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// try to get script context from call context:\r\n                // ScriptContext is ILogicalThreadAffinative, LogicalCallContext is used.\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n                    return ((ScriptContext)CallContext.GetData(callContextSlotName)) ?? CreateDefaultScriptContext();   // on Mono, .GetData must be used (GetLogicalData is not implemented)\r\n\t\t\t\t}\r\n\t\t\t\tcatch (InvalidCastException)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new InvalidCallContextDataException(callContextSlotName);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//return result.AttachToHttpApplication();\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tif (value == null)\r\n\t\t\t\t\tCallContext.FreeNamedDataSlot(callContextSlotName);\r\n\t\t\t\telse\r\n                    CallContext.SetData(callContextSlotName, value);            // on Mono, .SetData must be used (SetLogicalData is not implemented)\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initialize new ScriptContext and store it into the LogicalCallContext.\r\n        /// </summary>\r\n        /// <returns>Newly created ScriptContext.</returns>\r\n        private static ScriptContext CreateDefaultScriptContext()\r\n        {\r\n            ScriptContext result;\r\n            HttpContext context;\r\n\r\n            if ((context = HttpContext.Current) != null)\r\n                result = RequestContext.Initialize(ApplicationContext.Default, context).ScriptContext;\r\n            else\r\n                result = new ScriptContext(ApplicationContext.Default);\r\n\r\n            ScriptContext.CurrentContext = result;\r\n\r\n            return result;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Variables\r\n\r\n\t\tpublic PhpArray/*!*/ SessionVariables\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpArray result = AutoGlobals.Session.Value as PhpArray;\r\n\t\t\t\tif (result == null)\r\n\t\t\t\t\tAutoGlobals.Session.Value = result = new PhpArray();\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inclusions\r\n\r\n        /// <summary>\r\n        /// Includes a specific script using current configuration.\r\n        /// </summary>\r\n        /// <param name=\"relativeSourcePath\">Source root relative path to the script.</param>\r\n        /// <param name=\"once\">Specifies whether script should be included only once.</param>\r\n        /// <returns>The value returned by the global code of the target script.</returns>\r\n        public object Include(string/*!*/ relativeSourcePath, bool once)\r\n        {\r\n            ApplicationConfiguration app_config = Configuration.Application;\r\n\r\n            // searches for file:\r\n            FullPath included_full_path = SearchForIncludedFile(PhpError.Error, relativeSourcePath, FullPath.Empty);\r\n            if (included_full_path.IsEmpty) return false;\r\n\r\n            ScriptInfo info;\r\n            bool already_included = scripts.TryGetValue(included_full_path.ToString(), out info);\r\n\r\n            // skips inclusion if script has already been included and inclusion's type is \"once\":\r\n            if (already_included)\r\n            {\r\n                if(once)\r\n                    return ScriptModule.SkippedIncludeReturnValue;\r\n\r\n                // script type loaded, info cannot be null\r\n            }\r\n            else\r\n            {\r\n                PhpSourceFile included_source_file = new PhpSourceFile(app_config.Compiler.SourceRoot, included_full_path);\r\n                \r\n                // loads script type:\r\n                info = LoadDynamicScriptType(included_source_file);\r\n\r\n                // script not found:\r\n                if (info == null)\r\n                    return false;\r\n\r\n                if (MainScriptFile == null)\r\n                    // the first script becomes the main one:\r\n                    DefineMainScript(info, included_source_file);\r\n                else\r\n                    // adds included file into the script list\r\n                    scripts.Add(included_full_path.ToString(), info);\r\n            }\r\n\r\n            Debug.Assert(info != null);\r\n\r\n            return GuardedCall((ScriptInfo scriptInfo) =>\r\n            {\r\n                //return PhpScript.InvokeMainHelper(\r\n                //    (Type)scriptType,\r\n                return scriptInfo.Main(\r\n                    this,\r\n                    null,  // no local variables\r\n                    null,  // no object context\r\n                    null,  // no class context\r\n                    true);\r\n            }, info, true);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs PHP inclusion on a specified script. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"relativeSourcePath\">\r\n\t\t/// Path to the target script source file relative to the application source root \r\n\t\t/// (see <c>Configuration.Application.Compiler.SourceRoot</c>.\r\n\t\t/// </param>\r\n        /// <param name=\"script\">\r\n\t\t/// Script type (i.e. type called <c>Default</c> representing the target script) or any type from \r\n\t\t/// the assembly where the target script is contained (useful for multi-script assemblies, where script types are \r\n\t\t/// not directly available from C# as they have mangled names). In the latter case, the script type is searched in the \r\n\t\t/// assembly using value of <paramref name=\"relativeSourcePath\"/>.\r\n\t\t/// </param>\r\n\t\t/// <returns>The value returned by the global code of the target script.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// The inclusion inheres in adding the target to the list of included scripts on the current script context\r\n\t\t/// (see <c>ScriptContext.Scripts</c> and in a call to the global code of the target script.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"InvalidOperationException\">Request context has been disposed.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"relativeSourcePath\"/> or <paramref name=\"script\"/> are <B>null</B> references.</exception>\r\n\t\t/// <exception cref=\"ArgumentException\">Script type cannot be resolved.</exception>\r\n\t\t/// <exception cref=\"InvalidScriptAssemblyException\">The target assembly is not a valid Phalanger compiled assembly.</exception>\r\n\t\tinternal object IncludeScript(string/*!*/ relativeSourcePath, ScriptInfo/*!*/ script)\r\n\t\t{\r\n            //if (type == null)\r\n            //    throw new ArgumentNullException(\"type\");\r\n            if (relativeSourcePath == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"relativeSourcePath\");\r\n            if (script == null)\r\n                throw new ArgumentException(\"script\");\r\n\r\n\t\t\tFullPath source_root = Configuration.Application.Compiler.SourceRoot;\r\n\t\t\tPhpSourceFile source_file = new PhpSourceFile(\r\n\t\t\t\tnew FullPath(source_root),\r\n\t\t\t\tnew FullPath(Path.Combine(source_root, relativeSourcePath)));\r\n\r\n            // the first script becomes the main one:\r\n\t\t\tif (MainScriptFile == null)\r\n\t\t\t\tDefineMainScript(script, source_file);\r\n\r\n            return GuardedCall((ScriptInfo scriptInfo) =>\r\n            {\r\n                //return PhpScript.InvokeMainHelper(\r\n                //    (Type)scriptType,\r\n                return scriptInfo.Main(\r\n                    this,\r\n                    null,  // no local variables\r\n                    null,  // no object context\r\n                    null,  // no class context\r\n                    true);\r\n            }, script, true);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Resolves the script type using the given <see cref=\"ApplicationContext\"/>.\r\n        ///// </summary>\r\n        //private static Type ResolveScriptType(ApplicationContext/*!*/ applicationContext, PhpSourceFile/*!*/ sourceFile, Type/*!*/ type)\r\n        //{\r\n        //    if (PhpScript.IsScriptType(type))\r\n        //        return type;\r\n\r\n        //    ScriptAssembly sa = ScriptAssembly.LoadFromAssembly(applicationContext, type.Assembly);\r\n\r\n        //    return sa.GetScriptType(sourceFile);\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called in place where a script is statically included. For internal purposes only.\r\n\t\t/// </summary>\r\n        /// <param name=\"level\">RelativePath.level; <paramref name=\"relativeSourcePath\"/>.</param>\r\n\t\t/// <param name=\"relativeSourcePath\">RelativePath.path; A path to the included script's source file relative to source root.</param>\r\n\t\t/// <param name=\"includee\">A type handle of the included script.</param>\r\n\t\t/// <param name=\"inclusionType\">A type of an inclusion.</param>\r\n\t\t/// <returns>Whether to process inclusion. If <B>false</B>, inclusion should be ignored.</returns>\r\n\t\t[Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic bool StaticInclude(int level, string relativeSourcePath, RuntimeTypeHandle includee, InclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\r\n            var included_full_path =\r\n            //PhpSourceFile source_file = new PhpSourceFile(\r\n            //\tapp_config.Compiler.SourceRoot,\r\n                new FullPath(app_config.Compiler.SourceRoot, new RelativePath((sbyte)level, relativeSourcePath));\r\n\t\t\t//);\r\n\r\n            if (scripts.ContainsKey(included_full_path.ToString()))\r\n\t\t\t{\r\n\t\t\t\t// the script has been included => returns whether it should be included again:\r\n\t\t\t\treturn !InclusionTypesEnum.IsOnceInclusion(inclusionType);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// the script has not been included yet:\r\n                scripts.Add(included_full_path.ToString(), new ScriptInfo(Type.GetTypeFromHandle(includee)));\r\n\r\n\t\t\t\t// the script should be included:\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called in place where a script is dynamically included. For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"includedFilePath\">A source path to the included script.</param>\r\n\t\t/// <param name=\"includerFileRelPath\">A source path to the script issuing the inclusion relative to the source root.</param>\r\n\t\t/// <param name=\"variables\">A run-time variables table.</param>\r\n\t\t/// <param name=\"self\">A current object in which method an include is called (if applicable).</param>\r\n\t\t/// <param name=\"includer\">A current class type desc in which method an include is called (if applicable).</param>\r\n\t\t/// <param name=\"inclusionType\">A type of an inclusion.</param>\r\n\t\t/// <returns>A result of the Main() method call.</returns>\r\n\t\t[Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic object DynamicInclude(\r\n\t\t\tstring includedFilePath,\r\n\t\t\tstring includerFileRelPath,\r\n\t\t\tDictionary<string, object> variables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc includer,\r\n\t\t\tInclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\r\n\t\t\t// determines inclusion behavior:\r\n\t\t\tFullPath includer_full_path = new FullPath(includerFileRelPath, app_config.Compiler.SourceRoot);\r\n\r\n\t\t\t// searches for file:\r\n\t\t\tFullPath included_full_path = SearchForIncludedFile(\r\n                InclusionTypesEnum.IsMustInclusion(inclusionType) ? PhpError.Error : PhpError.Warning,\r\n                includedFilePath, includer_full_path);\r\n\r\n\t\t\tif (included_full_path.IsEmpty) return false;\r\n\r\n\t\t\tScriptInfo info;\r\n            bool already_included = scripts.TryGetValue(included_full_path.ToString(), out info);\r\n\r\n\t\t\t// skips inclusion if script has already been included and inclusion's type is \"once\":\r\n            if (already_included && InclusionTypesEnum.IsOnceInclusion(inclusionType))\r\n\t\t\t\treturn ScriptModule.SkippedIncludeReturnValue;\r\n\r\n\t\t\tif (!already_included)\r\n\t\t\t{\r\n\t\t\t\t// loads script type:\r\n                info = LoadDynamicScriptType(new PhpSourceFile(app_config.Compiler.SourceRoot, included_full_path));\r\n\r\n\t\t\t\t// script not found:\r\n\t\t\t\tif (info == null) return false;\r\n\r\n\t\t\t\t// adds included file into the script list\r\n                scripts.Add(included_full_path.ToString(), info/* = new ScriptInfo(script)*/);\r\n\t\t\t}\r\n\r\n\t\t\treturn info.Main(this, variables, self, includer, false);\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Searches for a file in the script library, current directory, included paths, and web application root respectively.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"errorSeverity\">A severity of an error (if occures).</param>\r\n\t\t/// <param name=\"includedPath\">A source path to the included script.</param>\r\n\t\t/// <param name=\"includerFullPath\">Full source path to the including script.</param>\r\n\t\t/// <returns>Full path to the file or <B>null</B> path if not found.</returns>\r\n\t\tprivate FullPath SearchForIncludedFile(PhpError errorSeverity, string includedPath, FullPath includerFullPath)\r\n\t\t{\r\n            FullPath result;\r\n\r\n\t\t\tstring message;\r\n            \r\n            //\r\n            // construct the delegate checking the script existance\r\n            //\r\n\r\n            var file_exists = applicationContext.BuildFileExistsDelegate();            \r\n\r\n            //\r\n            // try to find the script\r\n            //\r\n\r\n            if (file_exists != null)\r\n            {\r\n                string includer_directory = includerFullPath.IsEmpty ? WorkingDirectory : Path.GetDirectoryName(includerFullPath);\r\n                \r\n                // searches for file in the following order: \r\n                // - incomplete absolute path => combines with RootOf(WorkingDirectory)\r\n                // - relative path => searches in FileSystem.IncludePaths then in the includer source directory\r\n                result = PhpScript.FindInclusionTargetPath(\r\n                    new InclusionResolutionContext(\r\n                        applicationContext,\r\n                        includer_directory,\r\n                        WorkingDirectory,\r\n                        config.FileSystem.IncludePaths\r\n                        ),\r\n                    includedPath,\r\n                    file_exists,\r\n                    out message);\r\n            }\r\n            else\r\n            {\r\n                message = \"Script cannot be included with current configuration.\";   // there is no precompiled MSA available on non-web application\r\n                result = FullPath.Empty;\r\n            }\r\n\r\n\t\t\t// failure:\r\n\t\t\tif (result.IsEmpty)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(errorSeverity,\r\n\t\t\t\t\tCoreResources.GetString(\"script_inclusion_failed\",\r\n\t\t\t\t\tincludedPath,\r\n\t\t\t\t\tmessage,\r\n\t\t\t\t\tconfig.FileSystem.IncludePaths,\r\n\t\t\t\t\tWorkingDirectory));\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a script type dynamically.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourceFile\">Script's source file.</param>\r\n\t\tprivate ScriptInfo LoadDynamicScriptType(PhpSourceFile/*!*/ sourceFile)\r\n\t\t{\r\n            Debug.WriteLine(\"SC\", \"LoadDynamicScriptType: '{0}'\", sourceFile);\r\n\r\n            // runtime compiler manages:\r\n            // - 1. script library\r\n            // - 2. optionally bin/WebPages.dll\r\n            // - 3. compiles file from file system if allowed\r\n\r\n            return this.ApplicationContext.RuntimeCompilerManager.GetCompiledScript(sourceFile, RequestContext.CurrentContext);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Platform Dependent\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores HttpHeaders locally so PHP apps can change them (by default you can't change value \r\n\t\t/// of already set http header, but this is possible in PHP)\r\n\t\t/// </summary>\r\n\t\tprivate HttpHeaders httpHeaders;\r\n\t\tpublic HttpHeaders Headers { get { return httpHeaders; } }\r\n\r\n\t\tvoid InitPlatformSpecific()\r\n\t\t{\r\n            // HTTP headers implementation\r\n\t\t\tthis.httpHeaders = HttpHeaders.Create();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Session Handling\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds session variables aliases to global variables.\r\n\t\t/// </summary>\r\n\t\tpublic void RegisterSessionGlobals()\r\n\t\t{\r\n\t\t\tPhpArray globals, session;\r\n\r\n\t\t\t// do not create session variables table if not exists:\r\n\t\t\tif ((session = PhpReference.AsPhpArray(AutoGlobals.Session)) == null)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// creates globals array if it doesn't exists:\r\n\t\t\tglobals = GlobalVariables;\r\n\r\n\t\t\t// iterates using unbreakable enumerator:\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in session)\r\n\t\t\t{\r\n\t\t\t\tPhpReference php_ref = entry.Value as PhpReference;\r\n\r\n\t\t\t\t// converts the session variable to a reference if it is not one (\"no duplicate pointers\" rule preserved):\r\n\t\t\t\tif (php_ref == null)\r\n\t\t\t\t\tsession[entry.Key] = php_ref = new PhpReference(entry.Value);\r\n\r\n\t\t\t\t// adds alias to the globals:\r\n\t\t\t\tglobals[entry.Key] = php_ref;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/ScriptContext.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\nusing PHP.CoreCLR;\r\n//using System.Windows.Browser.Net;\r\nusing System.Net;\r\nusing System.Windows.Browser;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// The context of an executing script. Contains data associated with a request.\r\n\t/// </summary>\r\n\tpublic sealed partial class ScriptContext : MarshalByRefObject\r\n\t{\r\n        #region Constants\r\n\r\n\t\tprivate void InitConstants(DualDictionary<string, object> _constants)\r\n\t\t{\r\n\t\t\t// SILVERLIGHT: ??\r\n\t\t\t\r\n\t\t\t//_constants.Add(\"PHALANGER\", Assembly.GetExecutingAssembly().GetName().Version.ToString(), false);\r\n\t\t\t//_constants.Add(\"PHP_VERSION\", PhpVersion.Current, false);\r\n\t\t\t//_constants.Add(\"PHP_OS\", Environment.OSVersion.Platform == PlatformID.Win32NT ? \"WINNT\" : \"WIN32\", false); // TODO: GENERICS (Unix)\r\n\t\t\t//_constants.Add(\"DIRECTORY_SEPARATOR\", Path.DirectorySeparatorChar.ToString(), false);\r\n\t\t\t//_constants.Add(\"PATH_SEPARATOR\", Path.PathSeparator.ToString(), false);\r\n\r\n\t\t\t//_constants.Add(\"STDIN\", InputOutputStreamWrapper.In, false);\r\n\t\t\t//_constants.Add(\"STDOUT\", InputOutputStreamWrapper.Out, false);\r\n\t\t\t//_constants.Add(\"STDERR\", InputOutputStreamWrapper.Error, false);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Initialization\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic static EventHandler RunSilverlightApplication(System.Windows.Controls.Canvas c, string source)\r\n\t\t{\r\n\t\t\tApplicationContext app_context = ApplicationContext.Default;\r\n\r\n\t\t\t// try to preload configuration (to prevent exceptions during InitApplication)\r\n\t\t\tConfiguration.Load(app_context);\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n            \r\n\r\n            string url = HtmlPage.Document.DocumentUri.AbsoluteUri;\r\n\t\t\tint lastSlash = url.Replace('\\\\','/').LastIndexOf('/');\r\n\t\t\tapp_config.Compiler.SourceRoot = new FullPath(url.Substring(0, lastSlash), false);\r\n\r\n            int sourcelastSlash = source.Replace('\\\\', '/').LastIndexOf('/');\r\n            string sourceRelPath = source.Substring(lastSlash+1);\r\n\r\n            \r\n\r\n\t\t\t// Silverlight language features\r\n\t\t\tapp_config.Compiler.LanguageFeatures = LanguageFeatures.PhpClr;\r\n\r\n\t\t\t// ..\r\n\t\t\tScriptContext context = InitApplication(app_context);\r\n            \r\n            Debug.Fail(\"Update versions below!\");\r\n            ConfigurationContext.AddLibrary(\"mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e\", null, \"\");\r\n            ConfigurationContext.AddLibrary(\"System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e\", null, \"\");\r\n            ConfigurationContext.AddLibrary(\"System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e\", null, \"\");\r\n            ConfigurationContext.AddLibrary(\"System.Net, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e\", null, \"\");\r\n            //ConfigurationContext.AddLibrary(\"System.SilverLight, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\", null, \"\");\r\n            //ConfigurationContext.AddLibrary(\"agclr, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\", null, \"\");\r\n\r\n            ConfigurationContext.AddLibrary(\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\", null, \"\");\r\n\r\n\t\t\t//\r\n\t\t\tConfiguration.Application.Compiler.Debug = true;\r\n\r\n\t\t\t// ..\r\n\t\t\tDictionary<string, object> vars = new Dictionary<string, object>();\r\n\r\n\t\t\tcurrentContext.AutoGlobals.Canvas.Value = ClrObject.Wrap(c);\r\n            currentContext.AutoGlobals.Addr.Value = ClrObject.Wrap(app_config.Compiler.SourceRoot.ToString());\r\n\r\n\t\t\t//Operators.SetVariableRef(currentContext, vars, \"_CANVAS\", Operators.GetItemRef(\"_CANVAS\", ref currentContext.AutoGlobals.Globals.value));\r\n\t\t\t//Operators.SetVariable(currentContext, vars, \"_CANVAS\", ClrObject.Wrap(c));\r\n\r\n\r\n            context.DynamicInclude(source, sourceRelPath, vars, null, null, InclusionTypes.RunSilverlight);\r\n\r\n\t\t\treturn new EventHandler(delegate(object sender, EventArgs e)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (context.ResolveFunction(\"OnLoad\", null, true) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpCallback load = new PhpCallback(\"OnLoad\");\r\n\t\t\t\t\t\tload.Invoke(sender, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\tpublic static ScriptContext/*!*/ InitApplication(ApplicationContext/*!*/ appContext)\r\n\t\t{\r\n\t\t\t// loads configuration into the given application context \r\n\t\t\t// (applies only if the config has not been loaded yet by the current thread):\r\n\t\t\tConfiguration.Load(appContext);\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\r\n\t\t\t// takes a writable copy of a global configuration:\r\n\t\t\tLocalConfiguration config = (LocalConfiguration)Configuration.DefaultLocal.DeepCopy();\r\n\r\n\t\t\tScriptContext result = new ScriptContext(appContext, config, TextWriter.Null, Stream.Null);\r\n\t\t\tresult.IsOutputBuffered = result.config.OutputControl.OutputBuffering;\r\n\t\t\tresult.AutoGlobals.Initialize();\r\n\t\t\tresult.ThrowExceptionOnError = true;\r\n\t\t\tresult.config.ErrorControl.HtmlMessages = false;\r\n\r\n\t\t\treturn ScriptContext.CurrentContext = result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Inclusions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called in place where a script is dynamically included. For internal purposes only.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"includedFilePath\">A source path to the included script.</param>\r\n        /// <param name=\"includerFileRelPath\">A source path to the script issuing the inclusion relative to the source root.</param>\r\n\t\t/// <param name=\"variables\">A run-time variables table.</param>\r\n\t\t/// <param name=\"self\">A current object in which method an include is called (if applicable).</param>\r\n\t\t/// <param name=\"includer\">A current class type desc in which method an include is called (if applicable).</param>\r\n\t\t/// <param name=\"inclusionType\">A type of an inclusion.</param>\r\n\t\t[Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic object DynamicInclude(\r\n\t\t\tstring includedFilePath,\r\n            string includerFileRelPath,//TODO: Now it's not relative because RelativePath class doesn't work properly with HTTP addresses\r\n\t\t\tDictionary<string, object> variables,\r\n\t\t\tDObject self,\r\n\t\t\tDTypeDesc includer,\r\n\t\t\tInclusionTypes inclusionType)\r\n\t\t{\r\n\t\t\tApplicationConfiguration app_config = Configuration.Application;\r\n\r\n\t\t\t// determines inclusion behavior:\r\n\t\t\tPhpError error_severity = InclusionTypesEnum.IsMustInclusion(inclusionType) ? PhpError.Error : PhpError.Warning;\r\n\t\t\tbool once = InclusionTypesEnum.IsOnceInclusion(inclusionType);\r\n\r\n\r\n            System.Threading.AutoResetEvent downloadFinished = null;\r\n            string eval = string.Empty;\r\n\r\n            downloadFinished = new System.Threading.AutoResetEvent(false);\r\n             \r\n            WebClient webclient = new WebClient();\r\n            webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(\r\n                delegate(object sender, DownloadStringCompletedEventArgs downEventArgs)\r\n                {\r\n                    if (downEventArgs.Error == null)\r\n                    {\r\n                        eval = downEventArgs.Result;\r\n\r\n                        // workaround for Firefox BrowserHttpWebRequest bug - \r\n                        // assuming that we're downloading PHP source starting with '<?' \r\n                        int srcStart = 0;\r\n                        while ( !(eval[srcStart] == '<' && eval[srcStart + 1] == '?') && (srcStart+1 < eval.Length)  ) srcStart++;\r\n                        eval = eval.Substring(srcStart);\r\n\r\n                        downloadFinished.Set();\r\n                    }\r\n                }\r\n                );\r\n\r\n            Uri baseUri = new Uri(app_config.Compiler.SourceRoot+\"/\", UriKind.Absolute);\r\n            Uri uriFile = new Uri(includedFilePath, UriKind.RelativeOrAbsolute);\r\n            Uri uri = new Uri(baseUri, uriFile);\r\n\r\n            webclient.DownloadStringAsync(uri);\r\n\r\n            ThreadStart ts = new ThreadStart(()=>{\r\n                    downloadFinished.WaitOne();\r\n\r\n                    try\r\n                    {\r\n                        DynamicCode.EvalFile(eval, ScriptContext.CurrentContext, variables, self, null, includedFilePath, 0, 0, -1);\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        var canvas = ((ClrObject)ScriptContext.CurrentContext.AutoGlobals.Canvas.Value).RealObject as System.Windows.Controls.Canvas;\r\n\r\n                        canvas.Dispatcher.BeginInvoke(() =>\r\n                        {\r\n                            throw ex;\r\n                        });\r\n                    }\r\n  \r\n\r\n                });\r\n\r\n            if (inclusionType == InclusionTypes.RunSilverlight) // new thread have to be created\r\n                new Thread(ts).Start();\r\n            else\r\n            {\r\n                ts(); // just continue on this thread\r\n            }\r\n\r\n            return null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Current Context\r\n\r\n\t\t/// <summary>\r\n\t\t/// The instance of <see cref=\"ScriptContext\"/> associated with the current logical thread.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If no instance is associated with the current logical thread\r\n\t\t/// a new one is created, added to call context and returned. \r\n\t\t/// The slot allocated by some instance is freed\r\n\t\t/// by setting this property to a <B>null</B> reference.\r\n\t\t/// </remarks>                                                  \r\n\t\tpublic static ScriptContext CurrentContext\r\n\t\t{\r\n\t\t\t[Emitted]\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// no script context in call context => create an empty one:\r\n\t\t\t\tif (currentContext == null)\r\n\t\t\t\t\tcurrentContext = new ScriptContext(ApplicationContext.Default);\r\n\t\t\t\treturn currentContext;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tcurrentContext = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static ScriptContext currentContext = null;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Platform Dependent\r\n\r\n\t\tvoid InitPlatformSpecific()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Session Handling\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds session variables aliases to global variables - N/A on SL\r\n\t\t/// </summary>\r\n\t\tpublic void RegisterSessionGlobals()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/ScriptContext.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.Remoting.Messaging;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\nusing System.Configuration;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region ScriptInfo\r\n\r\n    /// <summary>\r\n    /// Holds information about an included script. Caches the MainHelper and allows to call the Main of the Script.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    public class ScriptInfo\r\n    {\r\n        /// <summary>\r\n        /// The script type.\r\n        /// </summary>\r\n        public readonly Type/*!*/Script;\r\n\r\n        /// <summary>\r\n        /// <see cref=\"MethodInfo\"/> of the &lt;Main&gt; method.\r\n        /// </summary>\r\n        internal MethodInfo MainHelper\r\n        {\r\n            get { return mainHelper ?? (mainHelper = this.mainHelper = Script.GetMethod(ScriptModule.MainHelperName, ScriptModule.MainHelperArgTypes)); }\r\n            set { mainHelper = value; }\r\n        }\r\n        private MethodInfo mainHelper = null;\r\n\r\n        #region Statistics for preallocation Dictionaries\r\n\r\n        /// <summary>\r\n        /// Remember max count of declared functions from within this entering script. Used to prealocate <see cref=\"ScriptContext.DeclaredFunctions\"/>.\r\n        /// </summary>\r\n        internal int MaxDeclaredFunctionsCount = 0;\r\n\r\n        /// <summary>\r\n        /// Remember max count of declared types from within this entering script. Used to prealocate <see cref=\"ScriptContext.DeclaredTypes\"/>.\r\n        /// </summary>\r\n        internal int MaxDeclaredTypesCount = 0;\r\n\r\n        /// <summary>\r\n        /// Update <see cref=\"MaxDeclaredTypesCount\"/> and <see cref=\"MaxDeclaredFunctionsCount\"/>.\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <remarks>Called at the end of request.</remarks>\r\n        internal void SaveMaxCounts(ScriptContext/*!*/context)\r\n        {\r\n            Debug.Assert(context != null);\r\n\r\n            if (MaxDeclaredFunctionsCount < context.DeclaredFunctions.Count)\r\n                MaxDeclaredFunctionsCount = context.DeclaredFunctions.Count;\r\n\r\n            if (MaxDeclaredTypesCount < context.DeclaredTypes.Count)\r\n                MaxDeclaredTypesCount = context.DeclaredTypes.Count;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Constructors\r\n\r\n        internal ScriptInfo(Type/*!*/script)\r\n        {\r\n            Debug.Assert(PhpScript.IsScriptType(script), \"Given script type is not IPhpScript.\");\r\n\r\n            Script = script;\r\n        }\r\n\r\n        internal ScriptInfo(Type/*!*/script, MethodInfo/*!*/mainHelper)\r\n        {\r\n            // no check, for internal ScriptModule use only\r\n            this.Script = script;\r\n            this.mainHelper = mainHelper;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Delegates\r\n\r\n        /// <summary>\r\n        /// Get delegate that Invokes the Main helper method of the script.\r\n        /// Unwraps any thrown <c>InnerException</c> of <c>PhpException</c>, <c>PhpUserException</c>, <c>ScriptDiedException</c> and <c>ThreadAbortException</c>.\r\n        /// </summary>\r\n        internal MainRoutineDelegate Main\r\n        {\r\n            get\r\n            {\r\n                return (ScriptContext context, Dictionary<string, object> variables, DObject self, DTypeDesc includer, bool isMain) =>\r\n                    {\r\n                        try\r\n                        {\r\n                            return MainRoutine(context, variables, self, includer, isMain);\r\n                        }\r\n                        catch (TargetInvocationException e)\r\n                        {\r\n                            if (e.InnerException is PhpException ||\r\n                                e.InnerException is PhpUserException ||\r\n                                e.InnerException is ScriptDiedException ||\r\n                                e.InnerException is System.Threading.ThreadAbortException)\r\n                                throw e.InnerException;\r\n\r\n                            throw;\r\n                        }\r\n                    };\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The delegate to the Main method of the Script. Delegate is lazily \r\n        /// </summary>\r\n        private MainRoutineDelegate MainRoutine\r\n        {\r\n            get\r\n            {\r\n                return mainRoutine ?? (mainRoutine = (MainRoutineDelegate)Delegate.CreateDelegate(typeof(MainRoutineDelegate), MainHelper));\r\n            }\r\n        }\r\n        private MainRoutineDelegate mainRoutine = null;\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ResolveTypeFlags\r\n\r\n    /// <summary>\r\n    /// Flags passed to <see cref=\"ScriptContext.ResolveType\"/>.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum ResolveTypeFlags\r\n    {\r\n        None = 0,\r\n\r\n        /// <summary>Tries to execute autoload when the class is not found.</summary>\r\n        UseAutoload = 1,\r\n\r\n        /// <summary>Throw an error if the class is not found.</summary>\r\n        ThrowErrors = 2,\r\n\r\n        /// <summary>Stack frame is preserved if autoload is called.</summary>\r\n        PreserveFrame = 4,\r\n\r\n        /// <summary><see cref=\"PhpStack.RemoveFrame\"/> is called before throwing an error.</summary>\r\n        RemoveFrame = 8,\r\n\r\n        /// <summary>\r\n        /// Whether not to interpret the full name as a generic name if it cannot be resolved otherwise.\r\n        /// </summary>\r\n        SkipGenericNameParsing = 16\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// The context of an executing script. Contains data associated with a request.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    public sealed partial class ScriptContext : MarshalByRefObject, IDisposable\r\n    {\r\n        #region DebugView\r\n\r\n        internal class DebugView\r\n        {\r\n            private readonly ScriptContext/*!*/ context;\r\n\r\n            public DebugView(ScriptContext/*!*/ context)\r\n            {\r\n                if (context == null)\r\n                    throw new ArgumentNullException(\"context\");\r\n\r\n                this.context = context;\r\n            }\r\n\r\n            [DebuggerDisplay(\"Count = {GlobalVariables.Count}\", Name = \"$GLOBALS\", Type = \"array\")]\r\n            public PhpArray/*!*/ GlobalVariables\r\n            {\r\n                get { return context.AutoGlobals.Globals.Value as PhpArray; }\r\n            }\r\n\r\n            [DebuggerDisplay(\"Count = {context.DeclaredFunctions.Count}\", Name = \"Constants\", Type = \"array\")]\r\n            public PhpHashEntryDebugView[]/*!*/ DefinedConstants\r\n            {\r\n                get\r\n                {\r\n                    PhpHashEntryDebugView[] result = new PhpHashEntryDebugView[context.Constants.Count];\r\n\r\n                    int i = 0;\r\n                    foreach (var entry in context.Constants)\r\n                        result[i++] = new PhpHashEntryDebugView(new IntStringKey(entry.Key), entry.Value);\r\n\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            [DebuggerDisplay(\"Count = {context.DeclaredFunctions.Count}\", Name = \"Functions\", Type = \"array\")]\r\n            public string[]/*!*/ DeclaredFunctions\r\n            {\r\n                get\r\n                {\r\n                    string[] keys = new string[context.DeclaredFunctions.Count];\r\n                    context.DeclaredFunctions.Keys.CopyTo(keys, 0);\r\n                    return keys;\r\n                }\r\n            }\r\n\r\n            [DebuggerDisplay(\"Count = {context.DeclaredTypes.Count}\", Name = \"Types\", Type = \"array\")]\r\n            public string[]/*!*/ DeclaredTypes\r\n            {\r\n                get\r\n                {\r\n                    string[] keys = new string[context.DeclaredTypes.Count];\r\n                    context.DeclaredTypes.Keys.CopyTo(keys, 0);\r\n                    return keys;\r\n                }\r\n            }\r\n\r\n#if DEBUG\r\n\r\n            public int OwningThread\r\n            {\r\n                get\r\n                {\r\n                    return context.Owner.ManagedThreadId;\r\n                }\r\n            }\r\n\r\n#endif\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Instance Fields & Properties\r\n\r\n        public ApplicationContext/*!*/ ApplicationContext { get { return applicationContext; } }\r\n        private readonly ApplicationContext/*!*/ applicationContext;\r\n\r\n        /// <summary>\r\n        /// List of <see cref=\"ScriptInfo\"/>s included by the current script. Contains also the script itself.\r\n        /// Used for resolving inclusions.\r\n        /// </summary>\r\n        private readonly Dictionary<string, ScriptInfo> scripts = new Dictionary<string, ScriptInfo>(FullPath.StringComparer);\r\n\r\n        /// <summary>\r\n        /// List currently included script files.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public IEnumerable<string> GetIncludedScripts()\r\n        {\r\n            return scripts.Keys;\r\n        }\r\n\r\n        /// <summary>\r\n        /// A path to the source file of main script.\r\n        /// </summary>\r\n        public PhpSourceFile MainScriptFile { get { return mainScriptFile; } }\r\n        private PhpSourceFile mainScriptFile;\r\n\r\n        /// <summary>\r\n        /// A <see cref=\"ScriptInfo\"/> of main script (first script executed within the current <see cref=\"RequestContext\"/>).\r\n        /// </summary>\r\n        internal ScriptInfo MainScriptInfo { get { return mainScriptInfo; } }\r\n        private ScriptInfo mainScriptInfo;\r\n\r\n        /// <summary>\r\n        /// The configuration used by the class library and script functions and by objects which \r\n        /// has this instance of <see cref=\"ScriptContext\"/> associated with itself.\r\n        /// </summary>\r\n        public LocalConfiguration Config\r\n        {\r\n            get\r\n            {\r\n                return config;\r\n            }\r\n            set\r\n            {\r\n                config = (value == null) ? Configuration.DefaultLocal : value;\r\n            }\r\n        }\r\n        private LocalConfiguration config;\r\n\r\n        /// <summary>\r\n        /// User functions declarators - delegates pointing on declared functions.\r\n        /// </summary>\r\n        public Dictionary<string, DRoutineDesc>/*!*/ DeclaredFunctions\r\n        {\r\n            get\r\n            {\r\n                if (_declaredFunctions == null) DeclaredFunctionsAllocate(29);   // preallocate 29 by default, it is 6th prime number; see HashHelpers.GetPrime(int)\r\n                return _declaredFunctions;\r\n            }\r\n        }\r\n        private Dictionary<string, DRoutineDesc> _declaredFunctions;\r\n\r\n        /// <summary>\r\n        /// Allocate <see cref=\"_declaredFunctions\"/> with given <paramref name=\"capacity\"/>.\r\n        /// </summary>\r\n        /// <param name=\"capacity\">Capacity hint.</param>\r\n        private void DeclaredFunctionsAllocate(int capacity)\r\n        {\r\n            Debug.Assert(capacity >= 0);\r\n            if (_declaredFunctions == null)\r\n                _declaredFunctions = new Dictionary<string, DRoutineDesc>(capacity, StringComparer.OrdinalIgnoreCase);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declarators of user classes.\r\n        /// </summary>\r\n        public Dictionary<string, DTypeDesc>/*!*/ DeclaredTypes\r\n        {\r\n            get\r\n            {\r\n                if (_declaredTypes == null) DeclaredTypesAllocate(29);  // see DeclaredFunctions\r\n                return _declaredTypes;\r\n            }\r\n        }\r\n        private Dictionary<string, DTypeDesc> _declaredTypes;\r\n\r\n        /// <summary>\r\n        /// Allocate <see cref=\"_declaredTypes\"/> with given <paramref name=\"capacity\"/>.\r\n        /// </summary>\r\n        /// <param name=\"capacity\">Capacity hint.</param>\r\n        private void DeclaredTypesAllocate(int capacity)\r\n        {\r\n            Debug.Assert(capacity >= 0);\r\n            if (_declaredTypes == null)\r\n                _declaredTypes = new Dictionary<string, DTypeDesc>(capacity, StringComparer.OrdinalIgnoreCase);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set of incomplete (deferred) types (their unique identifier) that were declared already in advance at the beginning of the script.\r\n        /// These types was declared at the beginning of the script, because it was already possible. This simulates behaviour of PHP,\r\n        /// since it \"loads\" type into the context if its base type is known at runtime (not at compile time like Phalanger does).\r\n        /// </summary>\r\n        private HashSet<string> IncompleteTypesInAdvance = null;\r\n\r\n        /// <summary>\r\n        /// Mapping of static local variables into their unique sequential ID. This allows efficient indexing into <see cref=\"staticLocals\"/> array.\r\n        /// The index starts from 1.\r\n        /// The dictionary is used only when two or more static locals point to the same variable (e.g. when single eval() has different content sometimes).\r\n        /// </summary>\r\n        private static SynchronizedCache<string, int>/*!*/staticLocalsId = new SynchronizedCache<string, int>(id => staticLocalsId.Count + 1);\r\n\r\n        /// <summary>\r\n        /// User defined static locals for the current context.\r\n        /// </summary>\r\n        private List<PhpReference> staticLocals;\r\n\r\n        /// <summary>\r\n        /// Gets collection of script context properties used to store custom objects. Cannot be <c>null</c>.\r\n        /// </summary>\r\n        public PropertyCollectionClass/*!*/Properties { get { return this.properties; } }\r\n        private readonly PropertyCollectionClass/*!*/properties = new PropertyCollectionClass();\r\n\r\n        /// <summary>\r\n        /// The stack for performing indirect calls and calls to argument-aware functions.\r\n        /// </summary>\r\n        public readonly PhpStack Stack;\r\n\r\n        /// <summary>\r\n        /// Registered user stream wrappers per request. Initialized in a lazy manner.\r\n        /// </summary>\r\n        public Dictionary<string, StreamWrapper> UserStreamWrappers { get; set; }\r\n\r\n        /// <summary>\r\n        /// The current directory used as working one for PHP file system functions and for including scripts.\r\n        /// </summary>\r\n        public string WorkingDirectory { get { return workingDirectory; } set { workingDirectory = value; } }\r\n        private string workingDirectory;\r\n\r\n        /// <summary>\r\n        /// Get the list of SPL autoload functions. This cannot be null. First call to this property will enable SPL autoload functions.\r\n        /// </summary>\r\n        public LinkedList<PhpCallback> SplAutoloadFunctions\r\n        {\r\n            get\r\n            {\r\n                return splAutoloadFunctions ?? (splAutoloadFunctions = new LinkedList<PhpCallback>());\r\n            }\r\n        }\r\n        private LinkedList<PhpCallback> splAutoloadFunctions;\r\n\r\n        /// <summary>\r\n        /// Stack of <see cref=\"DTypeDesc\"/> representing type used to call currently evaluated method.\r\n        /// </summary>\r\n        public Stack<DTypeDesc> CurrentLateStaticBinding { get { return _currentLateStaticBinding ?? (_currentLateStaticBinding = new Stack<DTypeDesc>()); } }\r\n        private Stack<DTypeDesc> _currentLateStaticBinding;\r\n\r\n        /// <summary>\r\n        /// Get the value indicating if SPL autoload functions are enabled. (If spl_autoload_register was used.)\r\n        /// </summary>\r\n        public bool IsSplAutoloadEnabled { get { return splAutoloadFunctions != null; } }\r\n\r\n        /// <summary>\r\n        /// List of SPL extensions used by spl_autoload() function.\r\n        /// </summary>\r\n        public string[] SplAutoloadExtensions\r\n        {\r\n            get { return splAutoloadExtensions ?? new string[] { \".php\" }; }\r\n            set { splAutoloadExtensions = value; }\r\n        }\r\n        private string[] splAutoloadExtensions;\r\n\r\n        /// <summary>\r\n        /// Lazily resolved and initialized __autoload() function.\r\n        /// Initialized when needed in the first time in <c>ResolveTypeByAutoload</c>.\r\n        /// </summary>\r\n        private DRoutineDesc autoloadFunction;\r\n\r\n        /// <summary>\r\n        /// Lazily created list of types name being auto-loaded.\r\n        /// Used as a recursion prevention of <b>autoload</b>.\r\n        /// </summary>\r\n        private List<string> pendingAutoloads;\r\n\r\n        /// <summary>\r\n        /// Set when the context started finalization.\r\n        /// </summary>\r\n        private bool disposed = false;\r\n\r\n        /// <summary>\r\n        /// Additional disposal action.\r\n        /// </summary>\r\n        internal event Action TryDispose;\r\n\r\n        /// <summary>\r\n        /// Additional disposal action processed in <c>finally</c> block.\r\n        /// </summary>\r\n        internal event Action FinallyDispose;\r\n\r\n#if DEBUG\r\n\r\n        public Thread/*!*/ Owner { get { return owner; } }\r\n        private readonly Thread/*!*/ owner;\r\n\r\n#endif\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates an instance of <see cref=\"ScriptContext\"/> initialized with dummy streams and \r\n        /// a copy of the default local configuration.\r\n        /// </summary>\r\n        public ScriptContext(ApplicationContext/*!*/ appContext)\r\n            : this(appContext, (LocalConfiguration)Configuration.DefaultLocal.DeepCopy(), TextWriter.Null, Stream.Null)\r\n        {\r\n#if !SILVERLIGHT\r\n            this.workingDirectory = Directory.GetCurrentDirectory();\r\n#else\r\n\t\t\tthis.workingDirectory = \"\";\r\n#endif\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates instance of <see cref=\"ScriptContext\"/>.\r\n        /// </summary>\r\n        public ScriptContext(ApplicationContext/*!*/ appContext, LocalConfiguration/*!*/ config,\r\n            TextWriter/*!*/ textSink, Stream/*!*/ streamSink)\r\n        {\r\n            if (textSink == null)\r\n                throw new ArgumentNullException(\"textSink\");\r\n            if (streamSink == null)\r\n                throw new ArgumentNullException(\"streamSink\");\r\n            if (config == null)\r\n                throw new ArgumentNullException(\"config\");\r\n\r\n            Debug.WriteLine(\"SC\", \"Created by thread #{0}\", Thread.CurrentThread.ManagedThreadId);\r\n\r\n#if DEBUG\r\n            this.owner = Thread.CurrentThread;\r\n#endif\r\n\r\n            this.textSink = textSink;\r\n            this.streamSink = streamSink;\r\n            this.config = config;\r\n\r\n            InitPlatformSpecific();\r\n\r\n            // stack:\r\n            this.Stack = new PhpStack(this);\r\n\r\n            // initializes output redirecting fields:\r\n            this.IsOutputBuffered = false;\r\n\r\n\r\n            this.applicationContext = appContext;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Current Context\r\n\r\n        public ScriptContext/*!*/ Fork()\r\n        {\r\n            LocalConfiguration new_config = (LocalConfiguration)this.config.DeepCopy();\r\n            ScriptContext new_context = new ScriptContext(this.ApplicationContext, new_config, this.textSink, this.streamSink);\r\n\r\n            new_context.WorkingDirectory = this.workingDirectory;\r\n\r\n            // copy function declarators:\r\n            Dictionary<string, DRoutineDesc> new_declared_functions = new_context.DeclaredFunctions;\r\n            foreach (KeyValuePair<string, DRoutineDesc> entry in DeclaredFunctions)\r\n                new_declared_functions[entry.Key] = entry.Value;\r\n\r\n            // copy type declarators:\r\n            Dictionary<string, DTypeDesc> new_declared_types = new_context.DeclaredTypes;\r\n            foreach (KeyValuePair<string, DTypeDesc> entry in DeclaredTypes)\r\n                new_declared_types[entry.Key] = entry.Value;\r\n\r\n            // deep copy global variables:\r\n            PhpArray new_globals = (PhpArray)this.GlobalVariables.DeepCopy();\r\n            new_context.AutoGlobals.Globals = new PhpReference(new_globals);\r\n\r\n            // TODO: deep copy other super-globals (move copying to AutoGlobals already)\r\n            // TODO: staticLocals, wrappers, scripts\r\n\r\n            return CurrentContext = new_context;\r\n        }\r\n\r\n        #region Hokus pokus\r\n\r\n        //private HttpContext lastContext;\r\n        //private bool httpAttachPending;\r\n\r\n        //private ScriptContext AttachToHttpApplication()\r\n        //{\r\n        //    ScriptContext script_context = this;\r\n\r\n        //    HttpContext context = HttpContext.Current;\r\n        //    if (context != null && context != lastContext)\r\n        //    {\r\n        //        Debug.WriteLine(\"ASP.NET\", \"Initializing request context\");\r\n\r\n        //        script_context = RequestContext.Initialize(context).ScriptContext;\r\n        //        script_context.lastContext = context;\r\n        //        script_context.httpAttachPending = true;\r\n        //    }\r\n\r\n        //    if (script_context.httpAttachPending)\r\n        //    {\r\n        //        if (context == null)\r\n        //        {\r\n        //            // we are not running in a web request context -> no attaching takes place\r\n        //            script_context.httpAttachPending = false;\r\n        //        }\r\n        //        else\r\n        //        {\r\n        //            HttpApplication app = context.ApplicationInstance;\r\n        //            if (app != null)\r\n        //            {\r\n        //                Debug.WriteLine(\"ASP.NET\", \"HttpApplication is non-null\");\r\n\r\n        //                // a HTTP application has already been initialized -> attach to it\r\n        //                try\r\n        //                {\r\n        //                    // do we already have the session state?\r\n        //                    HttpSessionState session_state = app.Session;\r\n\r\n        //                    Debug.WriteLine(\"ASP.NET\", \"Session state already acquired\");\r\n        //                    ApplicationInstance_PostAcquireRequestState(script_context, EventArgs.Empty);\r\n        //                }\r\n        //                catch (HttpException)\r\n        //                {\r\n        //                    // session state not yet acquired\r\n        //                    app.PostAcquireRequestState += new EventHandler(script_context.ApplicationInstance_PostAcquireRequestState);\r\n        //                }\r\n\r\n        //                app.PostRequestHandlerExecute += new EventHandler(script_context.ApplicationInstance_PostRequestHandlerExecute);\r\n\r\n        //                script_context.httpAttachPending = false;\r\n        //            }\r\n        //        }\r\n        //    }\r\n\r\n        //    return script_context;\r\n        //}\r\n\r\n        //private void ApplicationInstance_PostAcquireRequestState(object sender, EventArgs e)\r\n        //{\r\n        //    Debug.WriteLine(\"ASP.NET\", \"PostAcquireRequestState\");\r\n        //    RequestContext request_context = RequestContext.CurrentContext;\r\n\r\n        //    Debug.Assert(request_context != null);\r\n\r\n        //    if (Config.Session.AutoStart) request_context.StartSession();\r\n        //}\r\n\r\n        //private void ApplicationInstance_PostRequestHandlerExecute(object sender, EventArgs e)\r\n        //{\r\n        //    Debug.WriteLine(\"ASP.NET\", \"PostRequestHandlerExecute\");\r\n        //    RequestContext.CurrentContext.Dispose();\r\n\r\n        //    this.httpAttachPending = true;\r\n        //}\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region Http header handling\r\n\r\n\r\n\r\n        #endregion\r\n\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// User defined constants.\r\n        /// </summary>\r\n        public DualDictionary<string, object>/*!*/ Constants\r\n        {\r\n            get\r\n            {\r\n                if (_constants == null)\r\n                {\r\n                    _constants = new DualDictionary<string, object>(null, StringComparer.OrdinalIgnoreCase);\r\n\r\n                    // predefined run-time constants:\r\n                    InitConstants(_constants);\r\n\r\n                    // Used just to differentiate what is core constant and what is user constant\r\n                    _coreConstants = new DualDictionary<string, object>(null, StringComparer.OrdinalIgnoreCase);\r\n                    InitConstants(_coreConstants);\r\n\r\n                }\r\n                return _constants;\r\n            }\r\n        }\r\n\r\n        private DualDictionary<string, object> _constants;\r\n\r\n        /// <summary>\r\n        /// Contain constants defined by runtime in ScriptContext (all of them are ignoreCase)\r\n        /// </summary>\r\n        /// <remarks>Actaully it is here just because of GetDefinedConstants(bool) library function</remarks>\r\n        private DualDictionary<string, object> _coreConstants;\r\n\r\n\r\n        /// <summary>\r\n        /// Defines a user constant.\r\n        /// </summary>\r\n        /// <param name=\"name\">The constant name. Compiler converts constant name to string before passing it to this method.</param>\r\n        /// <param name=\"value\">The constant value (should be either scalar or a <B>null</B> reference).</param>\r\n        /// <returns>Whether the constant has been defined. Returns <B>false</B> if the constant is already defined.</returns>\r\n        public bool DefineConstant(string name, object value)\r\n        {\r\n            return DefineConstant(name, value, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Defines a user constant.\r\n        /// </summary>\r\n        /// <param name=\"name\">The constant name. Compiler converts constant name to string before passing it to this method.</param>\r\n        /// <param name=\"value\">The constant value (should be either scalar or a <B>null</B> reference).</param>\r\n        /// <param name=\"ignoreCase\">Whether the constant is case insensitive.</param>\r\n        /// <returns>Whether the new constant has been defined.</returns>\r\n        /// <exception cref=\"PhpException\">Constant has already been defined (Notice).</exception>\r\n        /// <exception cref=\"PhpException\">Value is neither scalar not <B>null</B> (Warning).</exception>\r\n        public bool DefineConstant(string name, object value, bool ignoreCase)\r\n        {\r\n            if (!PhpVariable.IsScalar(value) && value != null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"constant_value_neither_scalar_nor_null\"));\r\n                return false;\r\n            }\r\n\r\n            if (name == null) name = String.Empty;\r\n\r\n            if (Constants.ContainsKey(name))\r\n            {\r\n                PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"constant_redefined\", name));\r\n                return false;\r\n            }\r\n\r\n            Constants.Add(name, value, ignoreCase);\r\n            return true;\r\n        }\r\n\r\n        [Emitted]\r\n        public void DeclareConstant(string name, object value)\r\n        {\r\n            Constants[name, true] = value;  // case sensitive\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a value of a constant (either user or library).\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the constant.</param>\r\n        /// <param name=\"fallbackName\">The name of the constant tried if the first one does not exist.</param>\r\n        /// <returns>Returns the value of the constant or its name it it is not defined.</returns>\r\n        /// <exception cref=\"PhpException\">Constant is not defined (Notice).</exception>\r\n        [Emitted]\r\n        public object GetConstantValue(string name, string fallbackName)\r\n        {\r\n            return GetConstantValue(name, fallbackName, false, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to parse the <paramref name=\"fullname\"/> as \"typename::constantname\", resolve the typename and tries to get the constantname.\r\n        /// </summary>\r\n        /// <param name=\"fullname\">Full class constant name, in a form of \"typename::constantname\".</param>\r\n        /// <param name=\"desc\">Found constant if any. Otherwise will be null.</param>\r\n        /// <param name=\"quiet\">True to throw undefined class constant PHP error if fullname represents class constant name and the constant was not found.</param>\r\n        /// <returns>True if given <paramref name=\"fullname\"/> states for class constant name.</returns>\r\n        /// <exception cref=\"PhpException\">Undefined class constant (Fatal Error).</exception>\r\n        /// <exception cref=\"PhpException\">Class name could not be resolved (Fatal Error).</exception>\r\n        private bool GetClassConstant(string fullname, out DConstantDesc desc, bool quiet)\r\n        {\r\n            desc = null;\r\n\r\n            string typename, constname;\r\n            if (Name.IsClassMemberSyntax(fullname, out typename, out constname))\r\n            {\r\n                var flags = ResolveTypeFlags.UseAutoload;\r\n                if (!quiet) flags |= ResolveTypeFlags.ThrowErrors;\r\n\r\n                var type = ResolveType(typename, null, UnknownTypeDesc.Singleton, null, flags);\r\n\r\n                if (type != null)\r\n                {\r\n                    var result = type.GetConstant(new VariableName(constname), UnknownTypeDesc.Singleton, out desc);\r\n\r\n                    if (!quiet && desc == null)\r\n                        PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_class_constant\", typename, constname));\r\n                }\r\n\r\n                return true;    // fullname is for class constant\r\n            }\r\n\r\n            return false; // gobal constant\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a value of a constant (either user or library).\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the constant.</param>\r\n        /// <param name=\"fallbackName\">The name of constant tried if <paramref name=\"name\"/> does not exist. (global constants only)</param>\r\n        /// <param name=\"quiet\">Whether to report a notice if the constant is not defined.</param>\r\n        /// <param name=\"returnNameIfUndefined\">True to return the <paramref name=\"name\"/> instead of <c>null</c> when constant is not defined.</param>\r\n        /// <returns>Returns the value of the constant. If constant is not defined, <c>null</c> or its name is returned.</returns>\r\n        /// <exception cref=\"PhpException\">Constant is not defined (Notice).</exception>\r\n        /// <exception cref=\"PhpException\">Constant is not defined (Warning).</exception>\r\n        /// <exception cref=\"PhpException\">Undefined class constant (Fatal Error).</exception>\r\n        private object GetConstantValue(string name, string fallbackName, bool quiet, bool returnNameIfUndefined)\r\n        {\r\n            if (name == null) name = String.Empty;\r\n\r\n            // global constant or class constant:\r\n            DConstantDesc desc;\r\n            if (GetClassConstant(name, out desc, quiet))\r\n            {\r\n                if (desc != null)\r\n                    return PhpVariable.Dereference(desc.GetValue(this));\r\n            }\r\n            else\r\n            {\r\n                // gets user constant first:\r\n                object result;\r\n                if (Constants.TryGetValue(name, out result))\r\n                    return result;\r\n\r\n                // gets system constant if user one is not defined:\r\n                if (applicationContext.Constants.TryGetValue(name, out desc))\r\n                    return desc.LiteralValue;\r\n\r\n                if (fallbackName != null)\r\n                {\r\n                    // try the same with fallbackName:\r\n\r\n                    if (Constants.TryGetValue(fallbackName, out result))\r\n                        return result;\r\n                    if (applicationContext.Constants.TryGetValue(fallbackName, out desc))\r\n                        return desc.LiteralValue;\r\n                }\r\n            }\r\n\r\n            // constant is not defined:\r\n            if (!quiet)\r\n            {\r\n                if (returnNameIfUndefined)\r\n                    PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"undefined_constant\", name));\r\n                else\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"constant_not_found\", name));\r\n            }\r\n\r\n            // default value, if constant is not defined\r\n            return returnNameIfUndefined ? name : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves a value of a constant (either user or library).\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the constant.</param>\r\n        /// <param name=\"quiet\">Whether to report a notice if the constant is not defined.</param>\r\n        /// <param name=\"returnNameIfUndefined\">True to return the <paramref name=\"name\"/> instead of <c>null</c> when constant is not defined.</param>\r\n        /// <returns>Returns the value of the constant. If constant is not defined, <c>null</c> or its name is returned.</returns>\r\n        /// <exception cref=\"PhpException\">Constant is not defined (Notice).</exception>\r\n        /// <exception cref=\"PhpException\">Constant is not defined (Warning).</exception>\r\n        /// <exception cref=\"PhpException\">Undefined class constant (Fatal Error).</exception>\r\n        public object GetConstantValue(string name, bool quiet, bool returnNameIfUndefined)\r\n        {\r\n            return GetConstantValue(name, null, quiet, returnNameIfUndefined);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether a constant of a specified name is defined.\r\n        /// </summary>\r\n        /// <param name=\"name\">The name of the constant.</param>\r\n        /// <returns>Whether user or library constant with <paramref name=\"name\"/> name is defined.</returns>\r\n        [Emitted]\r\n        public bool IsConstantDefined(string name)\r\n        {\r\n            if (name == null) name = String.Empty;\r\n\r\n            // global constant or class constant:\r\n            DConstantDesc desc;\r\n            if (GetClassConstant(name, out desc, true))\r\n                return desc != null;\r\n            else\r\n                return Constants.ContainsKey(name) || applicationContext.Constants.ContainsKey(name);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves all defined user and library constants.\r\n        /// </summary>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"result\"/> is a <B>null</B> reference.</exception>\r\n        public void GetDefinedConstants(IDictionary/*!*/ result)\r\n        {\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            foreach (KeyValuePair<string, object> entry in Constants)\r\n                result[entry.Key] = entry.Value;\r\n\r\n            foreach (KeyValuePair<string, DConstantDesc> entry in applicationContext.Constants)\r\n                result[entry.Key] = entry.Value.LiteralValue;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the number of all defined user and library constants.\r\n        /// </summary>\r\n        /// <returns>The number of constants.</returns>\r\n        public int GetDefinedConstantCount()\r\n        {\r\n            return applicationContext.Constants.Count + Constants.Count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the number of user defined constants.\r\n        /// </summary>\r\n        /// <returns>The number of constants.</returns>\r\n        public int GetDefinedUserConstantCount()\r\n        {\r\n            return Constants.Count - _coreConstants.Count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves all user defined constants.\r\n        /// </summary>\r\n        public void GetDefinedUserConstants(IDictionary/*!*/ result)\r\n        {\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            foreach (KeyValuePair<string, object> entry in Constants)\r\n            {\r\n                if (!_coreConstants.ContainsKey(entry.Key)) // it is user constant\r\n                    result[entry.Key] = entry.Value;\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves all defined extension constants.\r\n        /// </summary>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"result\"/> is a <B>null</B> reference.</exception>\r\n        public void GetDefinedExtensionConstants(IDictionary/*!*/ result, string extensionName)\r\n        {\r\n            string actualLibraryName = null;\r\n            GlobalConstant gConst;\r\n\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            if (extensionName == null)\r\n                extensionName = \"Core\";\r\n\r\n            if (extensionName == \"Core\")\r\n            {\r\n                foreach (KeyValuePair<string, object> entry in _coreConstants)\r\n                {\r\n                    result[entry.Key] = entry.Value;\r\n                }\r\n            }\r\n\r\n            foreach (KeyValuePair<string, DConstantDesc> entry in applicationContext.Constants)\r\n            {\r\n                gConst = entry.Value.GlobalConstant;\r\n\r\n                if (gConst == null)\r\n                    actualLibraryName = \"Core\";\r\n                else\r\n                    actualLibraryName = gConst.Extension;\r\n\r\n                if (actualLibraryName == null)\r\n                {\r\n                    actualLibraryName = \"Core\";\r\n                }\r\n\r\n                if (actualLibraryName == extensionName)\r\n                    result[entry.Key] = entry.Value.LiteralValue;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n\r\n        /// <summary>\r\n        /// Declares a PHP function.\r\n        /// Emitted.\r\n        /// </summary>\r\n        /// <param name=\"function\">The <see cref=\"PhpRoutineDesc\"/> of the function. Contains ArgLess stub and modifiers. (new PhpRoutineDesc(Attributes, ArglessStub)).</param>\r\n        /// <param name=\"fullName\">The name of the function.</param>\r\n        /// <exception cref=\"PhpException\">A function of the given name has already been declared. (Error)</exception>\r\n        [Emitted]\r\n        public void DeclareFunction(PhpRoutineDesc/*!*/ function, string/*!*/ fullName)\r\n        {\r\n            Debug.Assert(function != null && fullName != null);\r\n\r\n            try\r\n            {\r\n                DeclaredFunctions.Add(fullName, function);\r\n                DeclareFunctionInMap(function.Index);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                if (!IsFunctionDeclared(function))  // since PHP 5.3 redeclaration is ok for the exact same function ?\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"function_redeclared\", fullName));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Bit map of currently declared function. If we know the index of <see cref=\"DRoutineDesc\"/>, we can check whether it is declared quickly.\r\n        /// </summary>\r\n        private BitArray/*!*/_declaredFunctionsMap = new BitArray(DRoutineDesc.LastIndex + 1, false);\r\n\r\n        private void DeclareFunctionInMap(int index)\r\n        {\r\n            if (_declaredFunctionsMap.Length <= index) _declaredFunctionsMap.Length = index + 128;\r\n            if (index >= 0) _declaredFunctionsMap[index] = true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check whether given <paramref name=\"desc\"/> is declared on the current <see cref=\"ScriptContext\"/> or not.\r\n        /// </summary>\r\n        /// <param name=\"desc\"><see cref=\"DRoutineDesc\"/> to check, if it is declared on the current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns><c>true</c> iff <paramref name=\"desc\"/> is declared.</returns>\r\n        private bool IsFunctionDeclared(DRoutineDesc desc)\r\n        {\r\n            return desc != null && desc.Index >= 0 && desc.Index < _declaredFunctionsMap.Length && _declaredFunctionsMap[desc.Index];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a PHP lambda function.\r\n        /// Operator.\r\n        /// </summary>\r\n        /// <param name=\"function\">The <see cref=\"DRoutineDesc\"/> of the function.</param>\r\n        /// <return>The generated name for the function.</return>\r\n        [Emitted]\r\n        public string/*!*/ DeclareLambda(RoutineDelegate/*!*/ function)\r\n        {\r\n            Debug.Assert(function != null);\r\n\r\n            string name = DynamicCode.GenerateLambdaName();\r\n            DeclaredFunctions[name] = new PhpRoutineDesc(PhpMemberAttributes.Public | PhpMemberAttributes.Static,\r\n                function, false/*do not allocate an index for this, not preserved*/);\r\n\r\n            return name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls a function which is unknown at compile time.\r\n        /// </summary>\r\n        /// <param name=\"localVariables\">Table of local variables if available.</param>\r\n        /// <param name=\"namingContext\">Naming context.</param>\r\n        /// <param name=\"name\">The name of the function. Case insensitive.</param>\r\n        /// <param name=\"fallbackName\">The name of the function tried if the first one does not exist.</param>\r\n        /// <param name=\"context\">The script context in which to do the call.</param>\r\n        /// <param name=\"routineHint\">Optional hint to skip function resolving.</param>\r\n        /// <returns>The return value of the function called.</returns>\r\n        /// <remarks>\r\n        /// If a compile time unknown function is called all variables are expected to be of \r\n        /// type <see cref=\"PhpReference\"/>. If the result is passed to non reference target \r\n        /// it is dereferenced.\r\n        /// </remarks>\r\n        [Emitted]\r\n        public static PhpReference/*!*/ Call(Dictionary<string, object> localVariables, NamingContext namingContext,\r\n            object name, string fallbackName, ref DRoutineDesc routineHint,\r\n            ScriptContext/*!*/ context)\r\n        {\r\n            return PhpVariable.MakeReference(\r\n                    PhpVariable.Copy(\r\n                        CallInternal(localVariables, namingContext, name, fallbackName, ref routineHint, context),\r\n                        CopyReason.ReturnedByCopy));\r\n        }\r\n\r\n        [Emitted]\r\n        public static void CallVoid(Dictionary<string, object> localVariables, NamingContext namingContext,\r\n            object name, string fallbackName, ref DRoutineDesc routineHint,\r\n            ScriptContext/*!*/ context)\r\n        {\r\n            CallInternal(localVariables, namingContext, name, fallbackName, ref routineHint, context);\r\n        }\r\n\r\n        [Emitted]\r\n        public static object CallValue(Dictionary<string, object> localVariables, NamingContext namingContext,\r\n            object name, string fallbackName, ref DRoutineDesc routineHint,\r\n            ScriptContext/*!*/ context)\r\n        {\r\n            return PhpVariable.Dereference(\r\n                    PhpVariable.Copy(\r\n                        CallInternal(localVariables, namingContext, name, fallbackName, ref routineHint, context),\r\n                        CopyReason.ReturnedByCopy));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls a function which is unknown at compile time. Returns the value directly returned by <see cref=\"DRoutineDesc.Invoke\"/>.\r\n        /// </summary>\r\n        private static object CallInternal(Dictionary<string, object> localVariables, NamingContext namingContext,\r\n            object name, string fallbackName, ref DRoutineDesc routineHint, ScriptContext/*!*/ context)\r\n        {\r\n            // <name> should be a string:\r\n            string function_name = PhpVariable.AsString(name);\r\n\r\n            if (String.IsNullOrEmpty(function_name))\r\n            {\r\n                var callback = Convert.ObjectToCallback(name, true);\r\n                if (callback != null && (callback.IsBound || callback.Bind()))\r\n                    return callback.TargetRoutine.Invoke(callback.TargetInstance, context.Stack);\r\n                \r\n                // callback could not be resulved\r\n                context.Stack.RemoveFrame();\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"invalid_function_name\"));\r\n            }\r\n            else\r\n            {\r\n                DRoutineDesc desc = context.ResolveFunctionWithHint(routineHint, function_name, null, true);\r\n\r\n                if ((desc != null) ||   // we've found {function_name}\r\n                    (fallbackName != null && (desc = context.ResolveFunctionWithHint(routineHint, fallbackName, null, true)) != null) // or we've found {fallbackName}\r\n                    )\r\n                {\r\n                    routineHint = desc; // remember for the next time\r\n\r\n                    // the callee may need table of local variables and/or naming context:\r\n                    context.Stack.Variables = localVariables;\r\n                    context.Stack.NamingContext = namingContext;\r\n\r\n                    return desc.Invoke(null, context.Stack);\r\n                }\r\n                else\r\n                {\r\n                    context.Stack.RemoveFrame();\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_function_called\", name));\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Populates given list with names of user and library functions. \r\n        /// </summary>\r\n        public void GetDeclaredFunctions(IList/*!*/ userFunctions, IList/*!*/ libraryFunctions)\r\n        {\r\n            if (userFunctions == null)\r\n                throw new ArgumentNullException(\"userFunctions\");\r\n            if (libraryFunctions == null)\r\n                throw new ArgumentNullException(\"libraryFunctions\");\r\n\r\n            // all user functions have declarators:\r\n            foreach (KeyValuePair<string, DRoutineDesc> entry in DeclaredFunctions)\r\n            {\r\n                if (entry.Value.DeclaringModule.Assembly is PhpLibraryAssembly)\r\n                    libraryFunctions.Add(entry.Key);\r\n                else\r\n                    userFunctions.Add(entry.Key);\r\n            }\r\n\r\n            // all user functions have declarators:\r\n            foreach (KeyValuePair<string, DRoutineDesc> entry in applicationContext.Functions)\r\n            {\r\n                if (entry.Value.DeclaringModule.Assembly is PhpLibraryAssembly)\r\n                    libraryFunctions.Add(entry.Key);\r\n                else\r\n                    userFunctions.Add(entry.Key);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Types\r\n\r\n        /// <summary>\r\n        /// Declares a PHP class or PHP interface.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The <see cref=\"DTypeDesc\"/> of the class/interface.</param>\r\n        /// <param name=\"fullName\">The name of the class.</param>\r\n        /// <exception cref=\"PhpException\">A class or interface of the given name has already been declared. (Error)</exception>\r\n        [Emitted]\r\n        public void DeclareType(PhpTypeDesc/*!*/ typeDesc, string/*!*/ fullName)\r\n        {\r\n            Debug.Assert(typeDesc != null && !typeDesc.IsGeneric && fullName != null);\r\n\r\n            try\r\n            {\r\n                // the completion type needn't to be created for non-generic types\r\n                DeclaredTypes.Add(fullName, typeDesc);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                // a class of this name has already been declared\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"type_redeclared\", fullName));\r\n            }\r\n        }\r\n\r\n        public void DeclareGenericType(PhpTypeDesc/*!*/ typeDesc, string/*!*/ fullName)\r\n        {\r\n            Debug.Assert(typeDesc != null && typeDesc.IsGeneric && fullName != null);\r\n            DTypeDesc existing;\r\n\r\n            if (!DeclaredTypes.TryGetValue(fullName, out existing))\r\n            {\r\n                bool old_throw = ThrowExceptionOnError;\r\n                throwExceptionOnError = true;\r\n\r\n                try\r\n                {\r\n                    // TODO: optimize - we don't need completion if there are no resolved unknown types in the spec;\r\n\r\n                    // referring type is useless as the type/method parameters are not visible to the \r\n                    // conditional declaration:\r\n                    GenericParameterDesc[] gps = typeDesc.ReflectGenericParameters(null, null, new ResolverDelegate(ResolveType));\r\n\r\n                    PhpTypeCompletionDesc completion = new PhpTypeCompletionDesc(typeDesc, gps);\r\n\r\n                    DeclaredTypes.Add(fullName, completion);\r\n                }\r\n                catch (PhpException)\r\n                {\r\n                    if (old_throw) throw;\r\n                }\r\n                finally\r\n                {\r\n                    throwExceptionOnError = old_throw;\r\n                }\r\n\r\n                return;\r\n            }\r\n\r\n            // a class of this name has already been declared\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"type_redeclared\", existing.MakeFullName()));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Declares a generic PHP class or PHP interface.\r\n        /// </summary>\r\n        /// <param name=\"typeHandle\">The <see cref=\"DTypeDesc\"/> of the class/interface.</param>\r\n        /// <param name=\"fullName\">The name of the class.</param>\r\n        /// <exception cref=\"PhpException\">A class or interface of the given name has already been declared. (Error)</exception>\r\n        [Emitted]\r\n        public void DeclareType(RuntimeTypeHandle/*!*/ typeHandle, string/*!*/ fullName)\r\n        {\r\n            DeclareGenericType(PhpTypeDesc.Create(typeHandle), fullName);\r\n        }\r\n\r\n        public IList/*!*/ GetDeclaredClasses(IList/*!*/ result)\r\n        {\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            // global interfaces:\r\n            foreach (KeyValuePair<string, DTypeDesc> entry in applicationContext.Types)\r\n            {\r\n                if (!entry.Value.IsInterface)\r\n                    result.Add(entry.Key);\r\n            }\r\n\r\n            // local interfaces:\r\n            foreach (KeyValuePair<string, DTypeDesc> entry in this.DeclaredTypes)\r\n            {\r\n                if (!entry.Value.IsInterface)\r\n                    result.Add(entry.Key);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        public IList/*!*/ GetDeclaredInterfaces(IList/*!*/ result)\r\n        {\r\n            if (result == null)\r\n                throw new ArgumentNullException(\"result\");\r\n\r\n            // global interfaces:\r\n            foreach (KeyValuePair<string, DTypeDesc> entry in applicationContext.Types)\r\n            {\r\n                if (entry.Value.IsInterface)\r\n                    result.Add(entry.Key);\r\n            }\r\n\r\n            // local interfaces:\r\n            foreach (KeyValuePair<string, DTypeDesc> entry in this.DeclaredTypes)\r\n            {\r\n                if (entry.Value.IsInterface)\r\n                    result.Add(entry.Key);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether deferred type can be declared already at current point of execution.\r\n        /// </summary>\r\n        /// <param name=\"uid\">Unique type identifier used in <see cref=\"IncompleteTypesInAdvance\"/> hash table.</param>\r\n        /// <param name=\"requiredBaseType\">Type name required by this type declaration. If this is not declared yet, the type cannot be declared in advance.</param>\r\n        /// <returns><c>True</c> iff preconditions are met and the type can be declared.</returns>\r\n        [Emitted]\r\n        public bool DeclareIncompleteTypeHelper(string/*!*/uid, string requiredBaseType)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(uid));\r\n\r\n            if (requiredBaseType == null || this.ResolveType(requiredBaseType, null, null, null, ResolveTypeFlags.SkipGenericNameParsing) != null)\r\n            {\r\n                if (this.IncompleteTypesInAdvance == null) this.IncompleteTypesInAdvance = new HashSet<string>();\r\n                if (!this.IncompleteTypesInAdvance.Add(uid))\r\n                {\r\n                    // already declared!\r\n                    Debug.Fail(\"Deferred type already declared!\"); // PHP Error will be thrown later when the type will be loaded into the context\r\n                }\r\n\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether specified incomplete type was already declared in the script beginning.\r\n        /// </summary>\r\n        /// <param name=\"uid\">Unique type identifier used in <see cref=\"IncompleteTypesInAdvance\"/> hash table.</param>\r\n        /// <returns><c>True</c> iff the type was already declared and its declaration stub must not be called again.</returns>\r\n        [Emitted]\r\n        public bool IncompleteTypeDeclared(string/*!*/uid)\r\n        {\r\n            return this.IncompleteTypesInAdvance != null && this.IncompleteTypesInAdvance.Contains(uid);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Variables\r\n\r\n        public PhpArray/*!*/ GlobalVariables\r\n        {\r\n            get\r\n            {\r\n                return (AutoGlobals.Globals.Value as PhpArray) ?? (PhpArray)(AutoGlobals.Globals.Value = new PhpArray());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Auto-global arrays.\r\n        /// </summary>\r\n        public readonly AutoGlobals AutoGlobals = new AutoGlobals();\r\n\r\n        #endregion\r\n\r\n        #region Run-time Resolving\r\n\r\n        /// <summary>\r\n        /// Internally used for function lookup when we already have a candidate.\r\n        /// </summary>\r\n        /// <param name=\"routineHint\">Hint.</param>\r\n        /// <param name=\"fullName\">Full name of the function to resolve.</param>\r\n        /// <param name=\"nameContext\">Current <see cref=\"NamingContext\"/>.</param>\r\n        /// <param name=\"quiet\">Wheter to throw is the function cannot be resolved.</param>\r\n        /// <returns><see cref=\"DRoutineDesc\"/> or <c>null</c>.</returns>\r\n        private DRoutineDesc ResolveFunctionWithHint(DRoutineDesc routineHint, string/*!*/ fullName, NamingContext nameContext, bool quiet)\r\n        {\r\n            if (IsFunctionDeclared(routineHint) && string.CompareOrdinal(routineHint.MakeFullName(), fullName) == 0)\r\n                return routineHint;\r\n            else\r\n                return ResolveFunction(fullName, nameContext, quiet);\r\n        }\r\n\r\n        public DRoutineDesc ResolveFunction(string/*!*/ fullName, NamingContext nameContext, bool quiet)\r\n        {\r\n            DRoutineDesc result = SearchForName(DeclaredFunctions, applicationContext.Functions, fullName, nameContext);\r\n\r\n            if (!quiet && result == null)\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_function_called\", fullName));\r\n\r\n            return result;\r\n        }\r\n\r\n        public DRoutineDesc ResolveFunction(string/*!*/ fullName, NamingContext nameContext)\r\n        {\r\n            return ResolveFunction(fullName, nameContext, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a PHP class or PHP interface (either user or system) of a given name. Resolves <c>self</c> and\r\n        /// <c>parent</c> reserved class names.\r\n        /// </summary>\r\n        /// <param name=\"fullName\">Name of the class to search for, without namespace prefix.</param>\r\n        /// <returns>The <see cref=\"System.Type\"/> or <B>null</B> if not found.</returns>\r\n        public DTypeDesc ResolveType(string/*!*/ fullName)\r\n        {\r\n            return ResolveType(fullName, null, UnknownTypeDesc.Singleton, null, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.PreserveFrame);\r\n        }\r\n\r\n        private DTypeDesc ResolveType(string/*!*/ fullName, NamingContext nameContext, DTypeDesc caller)\r\n        {\r\n            return ResolveType(fullName, nameContext, caller, null, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.SkipGenericNameParsing | ResolveTypeFlags.UseAutoload);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds a type (either user or system) of a given name. Resolves <c>self</c> and\r\n        /// <c>parent</c> reserved class names.\r\n        /// </summary>\r\n        /// <param name=\"fullName\">Name of the class/interface to search for, without namespace prefix, any case.</param>\r\n        /// <param name=\"nameContext\">Current naming context.</param>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        /// <param name=\"genericArgs\">Array of function type params. Stored in pairs in a form of [(string)name1,(DTypeDescs)type1, .., ..]. Can be null.</param>\r\n        /// <param name=\"flags\">Resolve type flags.</param>\r\n        /// <returns>The <see cref=\"DTypeDesc\"/> or <B>null</B> if not found.</returns>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"fullName\"/> is <c>self</c> or <c>parent</c> but there is\r\n        /// no class context. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"fullName\"/> is <c>parent</c> but the current class has no parent.\r\n        /// (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The class is not found. (Error)</exception>\r\n        public DTypeDesc ResolveType(string/*!*/ fullName, NamingContext nameContext, DTypeDesc caller, object[] genericArgs, ResolveTypeFlags flags)\r\n        {\r\n            if (fullName == null)\r\n                throw new ArgumentNullException(\"fullName\");\r\n\r\n            DTypeDesc type_desc;\r\n\r\n            // self, parent:\r\n            type_desc = ResolveSpecialTypeNames(/*lowercase_full_name*/fullName, caller, flags);\r\n            if (type_desc != null) return type_desc;\r\n\r\n            // type parameters (the requirement for exclamation mark prevents from misinterpreting \r\n            // regular type name as a generic parameter name):\r\n            if (fullName.Length > 0 && fullName[0] == '!')\r\n                return ResolveGenericParameterType(fullName.Substring(1).ToLower(), caller, genericArgs);\r\n\r\n            // regular types:\r\n            type_desc = SearchForName(DeclaredTypes, applicationContext.Types, fullName, nameContext);\r\n            if (type_desc != null) return type_desc;\r\n\r\n            // try parse generic type name:\r\n            if ((flags & ResolveTypeFlags.SkipGenericNameParsing) == 0)\r\n            {\r\n                type_desc = TryResolveGenericTypeName(fullName, nameContext, caller, genericArgs, flags);\r\n                if (type_desc != null) return type_desc;\r\n            }\r\n\r\n            // try to invoke __autoload\r\n            if ((flags & ResolveTypeFlags.UseAutoload) != 0)\r\n            {\r\n                if ((type_desc = ResolveTypeByAutoload(fullName, nameContext, caller, flags)) != null)\r\n                    return type_desc;\r\n            }\r\n\r\n            // Specified type could not be found\r\n            if ((flags & ResolveTypeFlags.RemoveFrame) != 0) Stack.RemoveFrame();\r\n            if ((flags & ResolveTypeFlags.ThrowErrors) != 0)\r\n            {\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"class_not_found\", fullName));\r\n            }\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// In case SPL autoload is enabled, invoke registered SPL autoload functions subsequently until\r\n        /// specified type is declared. Otherwise try to invoke __autoload function to declare specified type.\r\n        /// </summary>\r\n        /// <param name=\"fullName\">Name of the class/interface to search for, without namespace prefix, any case.</param>\r\n        /// <param name=\"nameContext\">Current naming context.</param>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        /// <param name=\"flags\">Resolve type flags.</param>\r\n        /// <returns>The <see cref=\"DTypeDesc\"/> or <B>null</B> if the class was not autoloaded.</returns>\r\n        private DTypeDesc ResolveTypeByAutoload(string fullName, NamingContext nameContext, DTypeDesc caller, ResolveTypeFlags flags)\r\n        {\r\n            DTypeDesc resolved_type_desc = null;    // result of the autoload\r\n\r\n            if (pendingAutoloads == null)\r\n            {\r\n                this.pendingAutoloads = new List<string>(1);\r\n            }\r\n            else\r\n            {\r\n                if (this.pendingAutoloads.IndexOf(fullName, StringComparer.OrdinalIgnoreCase) >= 0)\r\n                    return null;    // \"Class '{0}' not found\"\r\n            }\r\n\r\n            // recursion prevention\r\n            this.pendingAutoloads.Add(fullName);\r\n\r\n            // try to invoke autoload function and check fullName again\r\n            if (IsSplAutoloadEnabled)\r\n            {\r\n                foreach (var callback in SplAutoloadFunctions)\r\n                {\r\n                    if ((flags & ResolveTypeFlags.PreserveFrame) != 0)\r\n                    {\r\n                        PhpStack.CallState call_state = Stack.SaveCallState();\r\n\r\n                        callback.Invoke(caller, new object[] { fullName });\r\n\r\n                        Stack.RestoreCallState(call_state);\r\n                    }\r\n                    else\r\n                    {\r\n                        callback.Invoke(caller, new object[] { fullName });\r\n                    }\r\n\r\n                    // search again\r\n\r\n                    if ((resolved_type_desc = SearchForName(DeclaredTypes, applicationContext.Types, fullName, nameContext)) != null)\r\n                        break;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (autoloadFunction == null)\r\n                    autoloadFunction = ResolveFunction(Name.AutoloadName.Value, null, true);\r\n\r\n                if (autoloadFunction != null)\r\n                {\r\n                    if ((flags & ResolveTypeFlags.PreserveFrame) != 0)\r\n                    {\r\n                        PhpStack.CallState call_state = Stack.SaveCallState();\r\n\r\n                        Stack.AddFrame(fullName);\r\n                        autoloadFunction.Invoke(null, Stack);\r\n\r\n                        Stack.RestoreCallState(call_state);\r\n                    }\r\n                    else\r\n                    {\r\n                        Stack.AddFrame(fullName);\r\n                        autoloadFunction.Invoke(null, Stack);\r\n                    }\r\n\r\n                    // search again\r\n                    resolved_type_desc = SearchForName(DeclaredTypes, applicationContext.Types, fullName, nameContext);\r\n                }\r\n            }\r\n\r\n            // recursion prevention end\r\n            this.pendingAutoloads.RemoveLast();\r\n\r\n            // return found class description\r\n            return resolved_type_desc;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolve generic parameter type. The type specified as a generic parameter.\r\n        /// </summary>\r\n        /// <param name=\"lowercaseFullName\">The name of the generic parameter without the leading exclamation mark. The name is in lowercase.</param>\r\n        /// <param name=\"caller\">Current class context.</param>\r\n        /// <param name=\"genericArgs\">Array of function type params. Stored in pairs in a form of [(string)name1,(DTypeDescs)type1, .., ..]. Can be null.</param>\r\n        /// <returns>The <see cref=\"DTypeDesc\"/> or <B>null</B> if not found.</returns>\r\n        private DTypeDesc ResolveGenericParameterType(string lowercaseFullName, DTypeDesc caller, object[] genericArgs)\r\n        {\r\n            // function/method params:\r\n            if (genericArgs != null)\r\n            {\r\n                // get DTypeDesc from the function/method generic argument\r\n                // it is faster to lookup in linear array in case of only few elements then to construct Dictionary for this\r\n                for (int i = 0; i < genericArgs.Length; i += 2)\r\n                {\r\n                    Debug.Assert(genericArgs[i] is string);\r\n                    Debug.Assert(genericArgs[i + 1] is DTypeDesc);\r\n\r\n                    if ((string)genericArgs[i] == lowercaseFullName)\r\n                        return (DTypeDesc)genericArgs[i + 1];\r\n                }\r\n            }\r\n\r\n            // type params:\r\n            if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();   // determine the caller if it was not known in compile time\r\n            if (caller != null)\r\n                return caller.GetGenericParameter(lowercaseFullName);\r\n\r\n            // type could not be found\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolve <c>base</c> or <c>parent</c> class names in current class context.\r\n        /// </summary>\r\n        /// <param name=\"fullName\">The name of class.</param>\r\n        /// <param name=\"caller\">Class context.</param>\r\n        /// <param name=\"flags\">Resolve type flags.</param>\r\n        /// <returns>The <see cref=\"DTypeDesc\"/> or <B>null</B> if the class was not autoloaded.</returns>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"fullName\"/> is <c>self</c> or <c>parent</c> but there is\r\n        /// no class context. (Error)</exception>\r\n        /// <exception cref=\"PhpException\">The <paramref name=\"fullName\"/> is <c>parent</c> but the current class has no parent.\r\n        /// (Error)</exception>\r\n        private DTypeDesc ResolveSpecialTypeNames(string/*!*/ fullName, DTypeDesc caller, ResolveTypeFlags flags)\r\n        {\r\n            // check for 'self' reserved class name\r\n            if (Name.SelfClassName.Equals(fullName))\r\n            {\r\n                if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();   // determine the caller if it was not known in compile time\r\n                if (caller != null) return caller;\r\n\r\n                // otherwise, caller is global code\r\n                if ((flags & ResolveTypeFlags.RemoveFrame) != 0) Stack.RemoveFrame();\r\n                if ((flags & ResolveTypeFlags.ThrowErrors) != 0)\r\n                {\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"self_accessed_out_of_class\"));\r\n                }\r\n                return null;\r\n            }\r\n\r\n            // check for 'parent' reserved class name\r\n            if (Name.ParentClassName.Equals(fullName))\r\n            {\r\n                if (caller != null && caller.IsUnknown) caller = PhpStackTrace.GetClassContext();   // determine the caller if it was not known in compile time\r\n                if (caller != null)\r\n                {\r\n                    if (caller.Base != null)\r\n                        return caller.Base;\r\n\r\n                    // otherwise parent class accessed in parent-less class\r\n                    if ((flags & ResolveTypeFlags.RemoveFrame) != 0) Stack.RemoveFrame();\r\n                    if ((flags & ResolveTypeFlags.ThrowErrors) != 0)\r\n                    {\r\n                        PhpException.Throw(PhpError.Error, CoreResources.GetString(\"parent_accessed_in_parentless_class\"));\r\n                    }\r\n                    return null;\r\n                }\r\n\r\n                // otherwise, caller is global code\r\n                if ((flags & ResolveTypeFlags.RemoveFrame) != 0) Stack.RemoveFrame();\r\n                if ((flags & ResolveTypeFlags.ThrowErrors) != 0)\r\n                {\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"parent_accessed_out_of_class\"));\r\n                }\r\n                return null;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for a type in a given naming context.\r\n        /// </summary>\r\n        /// <param name=\"localTable\"></param>\r\n        /// <param name=\"globalTable\"></param>\r\n        /// <param name=\"fullName\">Name of the type to search for.</param>\r\n        /// <param name=\"nameContext\">The naming context, in which the search should be performed.</param>\r\n        /// <returns>The corresponding <see cref=\"DTypeDesc\"/> or <B>null</B> if not found.</returns>\r\n        private Desc SearchForName<Desc>(\r\n            Dictionary<string, Desc>/*!*/ localTable,\r\n            Dictionary<string, Desc>/*!*/ globalTable,\r\n            string/*!*/ fullName,\r\n            NamingContext nameContext)\r\n            where Desc : DMemberDesc\r\n        {\r\n            Desc desc;\r\n\r\n            // search in local and global tables:\r\n            if (localTable.TryGetValue(fullName, out desc) || globalTable.TryGetValue(fullName, out desc))\r\n                return desc;\r\n\r\n            //// if we have a naming context, use it\r\n            //if (nameContext != null)\r\n            //{\r\n            //    bool debug_mode = Configuration.Application.Compiler.Debug;\r\n            //    Desc candidate;\r\n\r\n            //    string[] prefixes = nameContext.Prefixes;\r\n            //    for (int i = 0; i < prefixes.Length; i++)\r\n            //    {\r\n            //        string candidate_name = prefixes[i] + fullName;\r\n\r\n            //        // search in ClassDeclarators and application context\r\n            //        if (localTable.TryGetValue(candidate_name, out candidate) ||\r\n            //            globalTable.TryGetValue(candidate_name, out candidate))\r\n            //        {\r\n            //            if (debug_mode)\r\n            //            {\r\n            //                if (desc != null)\r\n            //                {\r\n            //                    // ambiguity\r\n            //                    PhpException.Throw(PhpError.Error, CoreResources.GetString(\"ambiguous_name_match\",\r\n            //                        fullName, desc.MakeFullName(), candidate_name));\r\n\r\n            //                    return null;\r\n            //                }\r\n            //                else desc = candidate;\r\n            //            }\r\n            //            else\r\n            //            {\r\n            //                // release mode: return the first candidate found\r\n            //                return candidate;\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //}\r\n\r\n            return desc;\r\n        }\r\n\r\n        public DTypeDesc TryResolveGenericTypeName(string/*!*/ fullName, NamingContext nameContext, DTypeDesc caller, object[] genericArgs, ResolveTypeFlags flags)\r\n        {\r\n            if (!CheckGenericNameStructure(fullName)) return null;\r\n\r\n            int i = 0;\r\n            return ResolveGenericTypeName(ref i, fullName, nameContext, caller, genericArgs, flags);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <c>start</c> points to the first character of the substring to parse.\r\n        /// <c>end</c> points to the one character behind the substring to parse.\r\n        /// </summary>\r\n        private DTypeDesc ResolveGenericTypeName(ref int i, string/*!*/ fullName, NamingContext nameContext, DTypeDesc caller, object[] genericArgs, ResolveTypeFlags flags)\r\n        {\r\n            int start = i;\r\n\r\n            // find end of the type name:\r\n            while (fullName[i] != '<' && fullName[i] != ',' && fullName[i] != '>') i++;\r\n            if (fullName[i] == '>' && fullName[i - 1] == ':') i--;\r\n\r\n            // resolve type name:\r\n            DTypeDesc type_desc = ResolveType(fullName.Substring(start, i - start), nameContext, caller, genericArgs, flags | ResolveTypeFlags.SkipGenericNameParsing);\r\n            if (type_desc == null || fullName[i] != '<')\r\n            {\r\n                if (type_desc != null && type_desc.IsGenericDefinition)\r\n                    return Operators.MakeGenericTypeInstantiation(type_desc, DTypeDesc.EmptyArray, 0);\r\n                else\r\n                    return type_desc;\r\n            }\r\n\r\n            // skip '<' or '<:'\r\n            i++;\r\n            if (fullName[i] == ':') i++;\r\n\r\n            // arguments:\r\n            DTypeDesc[] args = new DTypeDesc[type_desc.GenericParameters.Length];\r\n            int arg_idx = 0;\r\n            do\r\n            {\r\n                // a warning will be reported later, expand the array and go on:\r\n                if (arg_idx == args.Length) Array.Resize(ref args, args.Length * 2 + 1);\r\n\r\n                args[arg_idx] = ResolveGenericTypeName(ref i, fullName, nameContext, caller, genericArgs, flags);\r\n                if (args[arg_idx] == null) return null;\r\n                arg_idx++;\r\n            }\r\n            while (fullName[i++] == ',');\r\n\r\n            Debug.Assert(fullName[i - 1] == ':' || fullName[i - 1] == '>');\r\n\r\n            // skip '>' or ':>'\r\n            if (fullName[i - 1] == ':') i++;\r\n\r\n            return Operators.MakeGenericTypeInstantiation(type_desc, args, arg_idx);\r\n        }\r\n\r\n        private bool CheckGenericNameStructure(string/*!*/ fullName)\r\n        {\r\n            int opens = 0;\r\n\r\n            if (fullName.Length == 0 || fullName[fullName.Length - 1] != '>') return false;\r\n\r\n            int i = 0;\r\n            while (i < fullName.Length - 1)\r\n            {\r\n                if (fullName[i] == '<')\r\n                {\r\n                    // invalid character preceding '<'\r\n                    if (i == 0 || (fullName[i - 1] == '<' || fullName[i - 1] == ':')) return false;\r\n                    opens++;\r\n                }\r\n                else if (fullName[i] == '>')\r\n                {\r\n                    // invalid pairing:\r\n                    if (opens == 0) return false;\r\n\r\n                    // invalid character following the '>'\r\n                    if (fullName[i + 1] != '>' && fullName[i + 1] != ':' && fullName[i + 1] != ',') return false;\r\n\r\n                    opens--;\r\n                }\r\n                else if (fullName[i] == ':')\r\n                {\r\n                    // namespace separator ':::'\r\n                    if (fullName[i + 1] == ':' && i + 2 < fullName.Length && fullName[i + 2] == ':')\r\n                    {\r\n                        i += 2;\r\n                    }\r\n                    else\r\n                    {\r\n                        // colon before first '<'\r\n                        if (opens == 0) return false;\r\n\r\n                        // either colon can be preceded by '<', or followed by '>'\r\n                        if (!((fullName[i - 1] == '<') ^ (fullName[i + 1] == '>'))) return false;\r\n                    }\r\n                }\r\n                else if (fullName[i] == ',')\r\n                {\r\n                    // comma before first '<' or behind last '>'\r\n                    if (opens == 0) return false;\r\n                }\r\n\r\n                i++;\r\n            }\r\n\r\n            return opens == 1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Error Reporting\r\n\r\n        /// <summary>\r\n        /// Whether to throw an exception on soft error (Notice, Warning, Strict).\r\n        /// </summary>\r\n        public bool ThrowExceptionOnError { get { return throwExceptionOnError; } set { throwExceptionOnError = value; } }\r\n        private bool throwExceptionOnError = true;\r\n\r\n        /// <summary>\r\n        /// Gets whether error reporting is disabled or enabled.\r\n        /// </summary>\r\n        public bool ErrorReportingDisabled\r\n        {\r\n            get\r\n            {\r\n                return (errorReportingDisabled > 0) && !config.ErrorControl.IgnoreAtOperator;\r\n            }\r\n        }\r\n        private int errorReportingDisabled = 0;\r\n\r\n        /// <summary>\r\n        /// Gets a value indicating a level of error reporting presented to user.\r\n        /// </summary>\r\n        public int ErrorReportingLevel\r\n        {\r\n            get\r\n            {\r\n                return ErrorReportingDisabled ? 0 : (int)config.ErrorControl.ReportErrors;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Disables error reporting. Can be called for multiple times. To enable reporting again \r\n        /// <see cref=\"EnableErrorReporting\"/> should be called as many times as <see cref=\"DisableErrorReporting\"/> was.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void DisableErrorReporting()\r\n        {\r\n            errorReportingDisabled++;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Enables error reporting disabled by a single call to <see cref=\"DisableErrorReporting\"/>.\r\n        /// </summary>\r\n        [Emitted]\r\n        public void EnableErrorReporting()\r\n        {\r\n            if (errorReportingDisabled > 0)\r\n                errorReportingDisabled--;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Last error type set by the <see cref=\"PhpException.Throw\"/>.\r\n        /// </summary>\r\n        public PhpError LastErrorType { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Last error message set by the <see cref=\"PhpException.Throw\"/>.\r\n        /// </summary>\r\n        public string LastErrorMessage { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Last error file set by the <see cref=\"PhpException.Throw\"/>.\r\n        /// </summary>\r\n        public string LastErrorFile { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Last error line set by the <see cref=\"PhpException.Throw\"/>.\r\n        /// </summary>\r\n        public int LastErrorLine { get; internal set; }\r\n\r\n        #endregion\r\n\r\n        #region Output Control, Echo\r\n\r\n        // sinks where buffered output is flushed:\r\n        private TextWriter textSink;\r\n        private Stream streamSink;\r\n\r\n        /// <summary>\r\n        /// Buffered output associated with the request.\r\n        /// </summary>\r\n        public BufferedOutput/*!*/BufferedOutput\r\n        {\r\n            get\r\n            {\r\n                // Initialize lazily as not buffered output by default.\r\n                return bufferedOutput ?? (bufferedOutput = new BufferedOutput(false, this.textSink, this.streamSink, Configuration.Application.Globalization.PageEncoding));\r\n            }\r\n        }\r\n        /// <remarks>Is <c>null</c> reference until it is not used for the first time.</remarks>\r\n        private BufferedOutput bufferedOutput;\r\n\r\n        /// <summary>\r\n        /// Stream where text output will be sent.\r\n        /// </summary>\r\n        public TextWriter Output\r\n        {\r\n            get\r\n            {\r\n                return output;\r\n            }\r\n            set\r\n            {\r\n                this.textSink = value;\r\n\r\n                if (bufferedOutput != null)\r\n                    bufferedOutput.CharSink = value;\r\n\r\n                if (!IsOutputBuffered)\r\n                    output = value;\r\n            }\r\n        }\r\n        private TextWriter output;\r\n\r\n        /// <summary>\r\n        /// Stream where binary output will be sent.\r\n        /// </summary>\r\n        public Stream OutputStream\r\n        {\r\n            get\r\n            {\r\n                return binaryOutput;\r\n            }\r\n            set\r\n            {\r\n                this.streamSink = value;\r\n\r\n                if (bufferedOutput != null)\r\n                    bufferedOutput.ByteSink = value;\r\n\r\n                if (bufferedOutput == null || binaryOutput != bufferedOutput.Stream)        // if output is not buffered\r\n                    binaryOutput = value;\r\n            }\r\n        }\r\n        internal Stream binaryOutput;\r\n\r\n        /// <summary>\r\n        /// Specifies whether script output is passed through <see cref=\"BufferedOutput\"/>.\r\n        /// </summary>\r\n        public bool IsOutputBuffered\r\n        {\r\n            get\r\n            {\r\n                return output == bufferedOutput;\r\n            }\r\n            set\r\n            {\r\n                if (value)\r\n                {\r\n                    output = bufferedOutput ?? (bufferedOutput = new BufferedOutput(true, this.textSink, this.streamSink, Configuration.Application.Globalization.PageEncoding));\r\n                    binaryOutput = bufferedOutput.Stream;\r\n                }\r\n                else\r\n                {\r\n                    output = textSink;\r\n                    binaryOutput = streamSink;\r\n                }\r\n            }\r\n        }\r\n\r\n        #region Echo\r\n\r\n        /// <summary>\r\n        /// Writes data to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">Data to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(object value, ScriptContext scriptcontext)\r\n        {\r\n            if (value == null)\r\n                return;\r\n\r\n            if (value.GetType() == typeof(PhpBytes))\r\n            {\r\n                Echo((PhpBytes)value, scriptcontext);\r\n            }\r\n            else\r\n            {\r\n                Echo(Convert.ObjectToString(value), scriptcontext);\r\n            }\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Writes data to the current output.\r\n        ///// </summary>\r\n        ///// <param name=\"values\">An array of object to be written to output.</param>\r\n        ///// <exception cref=\"ArgumentNullException\"><paramref name=\"values\"/> is a <B>null</B> reference.</exception>\r\n        //[Emitted]\r\n        //public static void Echo(params object[] values, ScriptContext scriptcontext)\r\n        //{\r\n        //    if (values == null)\r\n        //        throw new ArgumentNullException(\"values\");\r\n\r\n        //    for (int i = 0; i < values.Length; i++)\r\n        //        Echo(values[i]);\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"PhpBytes\" /> data to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">Data to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(PhpBytes value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            int length;\r\n            if (value != null && (length = value.Length) > 0)\r\n                scriptcontext.binaryOutput.Write(value.ReadonlyData, 0, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"string\" /> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The string to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(string value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            scriptcontext.output.Write(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"bool\" /> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The boolean to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(bool value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            if (value) scriptcontext.output.Write('1');\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"int\" /> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The integer to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(int value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            scriptcontext.output.Write(value.ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"long\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The long integer to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(long value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            scriptcontext.output.Write(value.ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"double\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The double to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current script context.</param>\r\n        [Emitted]\r\n        public static void Echo(double value, ScriptContext/*!*/scriptcontext)\r\n        {\r\n            scriptcontext.output.Write(Convert.DoubleToString(value));\r\n        }\r\n\r\n        #endregion\r\n\r\n        /*#region Echo (static wrappers)\r\n\r\n        [Emitted]\r\n        public static void Echo(object value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        [Emitted]\r\n        public static void Echo(PhpBytes value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"string\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The string to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current ScriptContext to be used.</param>\r\n        [Emitted]\r\n        public static void Echo(string value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"bool\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The boolean to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current ScriptContext to be used.</param>\r\n        [Emitted]\r\n        public static void Echo(bool value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"int\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The integer to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current ScriptContext to be used.</param>\r\n        [Emitted]\r\n        public static void Echo(int value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"long\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The long integer to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current ScriptContext to be used.</param>\r\n        [Emitted]\r\n        public static void Echo(long value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes <see cref=\"double\"/> to the current output.\r\n        /// </summary>\r\n        /// <param name=\"value\">The double to be written.</param>\r\n        /// <param name=\"scriptcontext\">Current ScriptContext to be used.</param>\r\n        [Emitted]\r\n        public static void Echo(double value, ScriptContext scriptcontext)\r\n        {\r\n            scriptcontext.Echo(value);\r\n        }\r\n\r\n        #endregion*/\r\n\r\n        #endregion\r\n\r\n        #region Script Termination, Timeouts, GuardedCall\r\n\r\n        /// <summary>\r\n        /// A timer used for timeouting the request in the manner of PHP.\r\n        /// </summary>\r\n        private Timer timer;\r\n\r\n        /// <summary>\r\n        /// Returns <B>true</B> if the main script code has been timed out.\r\n        /// </summary>\r\n        public bool ExecutionTimedOut { get { return executionTimedOut; } }\r\n        private bool executionTimedOut = false;\r\n\r\n        /// <summary>\r\n        /// Updates a value of <see cref=\"LocalConfiguration.RequestControlSection.ExecutionTimeout\"/>\r\n        /// in the current configuration record and adjusts the active timer (if any).\r\n        /// </summary>\r\n        /// <param name=\"seconds\">Timeout in seconds, non-positive values mean no timeout.</param>\r\n        public void ApplyExecutionTimeout(int seconds)\r\n        {\r\n            config.RequestControl.ExecutionTimeout = seconds;\r\n            if (timer != null)\r\n            {\r\n                timer.Change(config.RequestControl.ExecutionTimeoutForTimer, Timeout.Infinite);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls a specified routine in limited time and termination exceptions being caught\r\n        /// (i.e. <see cref=\"ScriptDiedException\"/> and <see cref=\"ThreadAbortException\"/>).\r\n        /// </summary>\r\n        /// <param name=\"routine\">A routine to be called.</param>\r\n        /// <param name=\"data\">Data passed to the routine.</param>\r\n        /// <param name=\"allowUserExceptions\">Whether user exceptions are allowed to be thrown by the target.</param>\r\n        /// <exception cref=\"PhpNetInternalException\">Internal error.</exception>\r\n        internal TResult GuardedCall<TData, TResult>(Converter<TData, TResult> routine, TData data, bool allowUserExceptions)\r\n        {\r\n            Library.SPL.Exception user_exception = null;\r\n\r\n            try\r\n            {\r\n                // do not timeout script which is being debugged:\r\n                if (Debugger.IsAttached) // TODO: long compilation time\r\n                {\r\n                    return routine(data);\r\n                }\r\n                else\r\n                {\r\n                    using (timer = new Timer(new TimerCallback(TimedOut), Thread.CurrentThread,\r\n                        config.RequestControl.ExecutionTimeoutForTimer, Timeout.Infinite))\r\n                    {\r\n                        return routine(data);\r\n                    }\r\n                }\r\n            }\r\n            catch (ScriptDiedException)\r\n            {\r\n                // die or exit has been called or connections has been aborted\r\n            }\r\n            catch (ThreadAbortException)\r\n            {\r\n                if (!executionTimedOut) throw;\r\n                ThreadAbortedDueToTimeout();\r\n            }\r\n            catch (PhpException)\r\n            {\r\n                // an error occurred -> we shell continue with execution\r\n            }\r\n            catch (PhpUserException e)\r\n            {\r\n                user_exception = e.UserException;\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new PhpNetInternalException(\"Guarded call\", e);\r\n            }\r\n            finally\r\n            {\r\n                timer = null;\r\n            }\r\n\r\n            if (user_exception != null)\r\n            {\r\n                string str_exception = null;\r\n                string error_id = null;\r\n\r\n                // try execute user exception handler (if allowed and set):\r\n                if (allowUserExceptions)\r\n                {\r\n                    if (config.ErrorControl.UserExceptionHandler != null)\r\n                    {\r\n                        // calls uncaught-exception user handler:\r\n                        GuardedCall<Library.SPL.Exception, object>(CallUserExceptionHandler, user_exception, false);\r\n                    }\r\n                    else\r\n                    {\r\n                        error_id = \"uncaught_exception\";\r\n\r\n                        // gets exception string representation:\r\n                        str_exception = GuardedCall<Library.SPL.Exception, string>(CallUserExceptionToString, user_exception, false);\r\n\r\n                        // null can be returned on time out or if there is an error during guarded call:\r\n                        if (str_exception == null) str_exception = user_exception.BaseToString();\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    error_id = \"exception_cannot_be_thrown\";\r\n\r\n                    // does not call __toString to prevent infinite recursion:\r\n                    str_exception = user_exception.BaseToString();\r\n                }\r\n\r\n                // reports an error (doesn't throw an exception since execution should continue):\r\n                if (error_id != null)\r\n                {\r\n                    bool old_throw = ThrowExceptionOnError;\r\n                    ThrowExceptionOnError = false;\r\n                    PhpException.Throw(PhpError.Error, CoreResources.GetString(error_id, str_exception));\r\n                    ThrowExceptionOnError = old_throw;\r\n                }\r\n            }\r\n\r\n            return default(TResult);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls user eception handler.\r\n        /// </summary>\r\n        private object CallUserExceptionHandler(PHP.Library.SPL.Exception/*!*/ e)\r\n        {\r\n            Debug.Assert(config.ErrorControl.UserExceptionHandler != null);\r\n            config.ErrorControl.UserExceptionHandler.Invoke(e);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get user exception string representation.\r\n        /// </summary>\r\n        private string CallUserExceptionToString(Library.SPL.Exception/*!*/ e)\r\n        {\r\n            //Debug.Assert(e is Library.SPL.Exception);\r\n            return (string)e.__toString(this);\r\n        }\r\n\r\n        // GENERICS: lambda\r\n        private object GuardedMain(object/*!*/ mainRoutine)\r\n        {\r\n            RoutineDelegate user_main = mainRoutine as RoutineDelegate;\r\n            if (user_main != null)\r\n            {\r\n                return user_main(null, this.Stack);\r\n            }\r\n            else\r\n            {\r\n                return ((MainRoutineDelegate)mainRoutine)(\r\n                    this,\r\n                    null,  // no local variables\r\n                    null,  // no object context (makes $this use illegal)\r\n                    null,  // no class context (makes protected and private members of all classes inaccessible)\r\n                    true);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Flushes all remaining data from output buffers.\r\n        /// </summary>\r\n        internal object FinalizeBufferedOutput(object _)\r\n        {\r\n            // flushes output, applies user defined output filter, and disables buffering:\r\n            if (bufferedOutput != null)\r\n                bufferedOutput.FlushAll();\r\n\r\n            // redirects sinks:\r\n            IsOutputBuffered = false;\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when the execution has been timed out. \r\n        /// </summary>\r\n        private void ThreadAbortedDueToTimeout()\r\n        {\r\n            Debug.Assert(executionTimedOut);\r\n\r\n#if !SILVERLIGHT\r\n            Thread.ResetAbort();\r\n#endif\r\n\r\n            bool old_throw = ThrowExceptionOnError;\r\n            ThrowExceptionOnError = false;\r\n\r\n            PhpException.Throw(PhpError.Error, CoreResources.GetString(\"execution_timed_out\",\r\n                config.RequestControl.ExecutionTimeout));\r\n\r\n            ThrowExceptionOnError = old_throw;\r\n        }\r\n\r\n        // GENERICS: Lambda\r\n        private void TimedOut(object/*!*/ thread)\r\n        {\r\n            executionTimedOut = true;\r\n            ((Thread)thread).Abort();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implements language construct exit/die. \r\n        /// </summary>\r\n        /// <param name=\"status\">The status returned by script's Main() method. Can be a <B>null</B> reference.</param>\r\n        /// <remarks>\r\n        /// Prints the <paramref name=\"status\"/> if it is of <see cref=\"string\"/> type.\r\n        /// </remarks>\r\n        [Emitted]\r\n        public void Die(object status)\r\n        {\r\n            // prints status (only if status is PHP string):\r\n            PhpBytes bytes;\r\n            if ((bytes = status as PhpBytes) != null)\r\n                ScriptContext.Echo(bytes, this);\r\n            else\r\n                ScriptContext.Echo(PhpVariable.AsString(status), this);\r\n\r\n            // terminates script execution:\r\n            throw new ScriptDiedException(status);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Shutdown Callbacks\r\n\r\n        /// <summary>\r\n        /// User defined post-request callbacks.\r\n        /// Can be a <B>null</B> reference which means no shutdown callback has ever been registered.\r\n        /// </summary>\r\n        private Queue shutdownCallbacks; // <PhpCallbackParameterized>\r\n\r\n        /// <summary>\r\n        /// Adds new user callback to the list of callbacks called on script termination.\r\n        /// </summary>\r\n        /// <param name=\"callback\">The callback to register.</param>\r\n        /// <param name=\"parameters\">Parameters for the callback.</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"callback\"/> is a <B>null</B> reference.</exception>\r\n        public void RegisterShutdownCallback(PhpCallback/*!*/ callback, params object[] parameters)\r\n        {\r\n            if (callback == null)\r\n                throw new ArgumentNullException(\"callback\");\r\n\r\n            if (shutdownCallbacks == null) shutdownCallbacks = new Queue();\r\n            shutdownCallbacks.Enqueue(new PhpCallbackParameterized(callback, parameters));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Processes shutdown callbacks registered by a user.\r\n        /// </summary>\r\n        /// <exception cref=\"PhpException\">An error occured during execution of the callbacks.</exception>\r\n        /// <exception cref=\"PhpUserException\">Uncaught exception has been raised by some callback.</exception>\r\n        /// <exception cref=\"ScriptDiedException\">Script died or exited.</exception>\r\n        /// <exception cref=\"PhpNetInternalException\">Internal error.</exception>\r\n        public object ProcessShutdownCallbacks(object _)\r\n        {\r\n            if (shutdownCallbacks != null)\r\n            {\r\n                while (shutdownCallbacks.Count > 0)\r\n                {\r\n                    ((PhpCallbackParameterized)shutdownCallbacks.Dequeue()).Invoke(null/*class context is null*/);\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region PhpObject Finalization\r\n\r\n        /// <summary>\r\n        /// List of weak references to <see cref=\"DObject\"/> instances that should be finalized when current request is over.\r\n        /// Lazily constructed.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Objects are finalized as their memory is about to be reclaimed by the GC during the request/app\r\n        /// processing. This list ensures that all instantiated objects are finalized before the request is\r\n        /// finished.\r\n        /// </remarks>\r\n        private List<WeakReference> objectsToBeFinalized;\r\n\r\n        private int finalizationCheckCounter;\r\n\r\n        /// <summary>\r\n        /// Registers a <see cref=\"DObject\"/> instance for finalization.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The object.</param>\r\n        [Emitted]\r\n        public void RegisterDObjectForFinalization(DObject/*!*/ obj)\r\n        {\r\n            Debug.Assert(obj != null);\r\n\r\n#if SILVERLIGHT\r\n\t\t\tbool registerFinalizer = true;\r\n#else\r\n            bool registerFinalizer = !System.Runtime.Remoting.RemotingServices.IsTransparentProxy(this);\r\n#endif\r\n\r\n            if (registerFinalizer)\r\n            {\r\n                if (objectsToBeFinalized == null) objectsToBeFinalized = new List<WeakReference>();\r\n                objectsToBeFinalized.Add(new WeakReference(obj, true));\r\n\r\n                if (++finalizationCheckCounter > 65536)\r\n                {\r\n                    finalizationCheckCounter = 0;\r\n\r\n                    int count = objectsToBeFinalized.Count;\r\n                    long list_memory = count * 3 * Marshal.SizeOf(typeof(IntPtr));\r\n\r\n                    // don't let the list occupy more than 10% of allocated memory\r\n                    if (list_memory > GC.GetTotalMemory(false) / 10)\r\n                    {\r\n                        List<WeakReference> new_list = new List<WeakReference>(count / 4);\r\n                        for (int i = 0; i < count; i++)\r\n                        {\r\n                            WeakReference reference = objectsToBeFinalized[i];\r\n                            if (reference.IsAlive) new_list.Add(reference);\r\n                        }\r\n\r\n                        objectsToBeFinalized = new_list;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls <c>__destruct</c> on <see cref=\"DObject\"/> instances that have been created in this context.\r\n        /// </summary>\r\n        /// <param name=\"_\">Dummy.</param>\r\n        internal object FinalizePhpObjects(object _)\r\n        {\r\n            if (objectsToBeFinalized != null)\r\n            {\r\n                for (int i = 0; i < objectsToBeFinalized.Count; i++)\r\n                {\r\n                    WeakReference reference = objectsToBeFinalized[i];\r\n\r\n                    // remove object from finalization list to prevent its repeated finalization\r\n                    // (for the case the finalization is interrupted by exception and resumed later):\r\n                    objectsToBeFinalized[i] = null;\r\n\r\n                    DObject obj = null;\r\n                    if (reference != null && reference.IsAlive)\r\n                    {\r\n                        try\r\n                        {\r\n                            obj = (DObject)reference.Target;\r\n                        }\r\n                        catch (InvalidOperationException)\r\n                        { }\r\n                    }\r\n\r\n                    if (obj != null) obj.Dispose();\r\n                }\r\n                objectsToBeFinalized = null;\r\n            }\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Graph Walking Callbacks\r\n\r\n        /// <summary>\r\n        /// Cached class context used when acquiring objects.\r\n        /// </summary>\r\n        private DTypeDesc classContext;\r\n\r\n        /// <summary>\r\n        /// If <see cref=\"classContext\"/> has not been set, this field is <B>true</B>\r\n        /// (<B>null</B> is a valid value for <see cref=\"classContext\"/>).\r\n        /// </summary>\r\n        private bool classContextIsValid;\r\n\r\n        /// <summary>\r\n        /// Called for each object that implements the <see cref=\"IPhpObjectGraphNode\"/> interface when\r\n        /// releasing an object graph (e.g. when storing variables to InProc session).\r\n        /// </summary>\r\n        /// <param name=\"node\">The object that should be released.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The released object (might be different from <paramref name=\"node\"/>).</returns>\r\n        internal object ReleaseObject(IPhpObjectGraphNode node, ScriptContext context)\r\n        {\r\n            DObject obj = node as DObject;\r\n            if (obj != null)\r\n            {\r\n                bool sleep_called;\r\n                if (!classContextIsValid)\r\n                {\r\n                    classContext = PhpStackTrace.GetClassContext();\r\n                    classContextIsValid = true;\r\n                }\r\n\r\n                PhpArray sleep_result = obj.Sleep(classContext, context, out sleep_called);\r\n\r\n                // if __sleep does not return a valid array, the object dies completely\r\n                if (sleep_called && sleep_result == null) return null;\r\n\r\n                if (sleep_result != null)\r\n                {\r\n                    // create a new instance\r\n                    DObject new_instance = (DObject)obj.TypeDesc.New(this);\r\n\r\n                    // copy values of the properties whose names have been returned by __sleep\r\n                    foreach (KeyValuePair<IntStringKey, object> pair in sleep_result)\r\n                    {\r\n                        string name = Convert.ObjectToString(pair.Value);\r\n                        string type_name;\r\n                        PhpMemberAttributes visibility;\r\n                        string field_name = Serialization.ParsePropertyName(name, out type_name, out visibility);\r\n\r\n                        DTypeDesc declarer;\r\n                        if (type_name == null)\r\n                        {\r\n                            declarer = obj.TypeDesc;\r\n                        }\r\n                        else\r\n                        {\r\n                            declarer = ResolveType(type_name);\r\n                            if (declarer == null) declarer = obj.TypeDesc;\r\n                        }\r\n\r\n                        // copy the field value\r\n                        object val = obj.GetProperty(field_name, declarer);\r\n                        new_instance.SetProperty(field_name, val, declarer);\r\n                    }\r\n\r\n                    return new_instance;\r\n                }\r\n\r\n                return obj;\r\n            }\r\n\r\n            // nullify resources\r\n            PhpResource res = node as PhpResource;\r\n            if (res != null) return 0;\r\n\r\n            return node;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called for each object that implements the <see cref=\"IPhpObjectGraphNode\"/> interface when\r\n        /// acquiring an object graph (e.g. when retrieving variables from InProc session).\r\n        /// </summary>\r\n        /// <param name=\"node\">The object that should be acquired.</param>\r\n        /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n        /// <returns>The acquired object (always <paramref name=\"node\"/>).</returns>\r\n        internal object AcquireObject(IPhpObjectGraphNode node, ScriptContext context)\r\n        {\r\n            DObject obj = node as DObject;\r\n            if (obj != null)\r\n            {\r\n                if (!classContextIsValid)\r\n                {\r\n                    classContext = PhpStackTrace.GetClassContext();\r\n                    classContextIsValid = true;\r\n                }\r\n\r\n                obj.Wakeup(classContext, context);\r\n            }\r\n            return node;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call <c>__wakeup</c> recursively on <see cref=\"PhpObject\"/>s contained in the array.\r\n        /// </summary>\r\n        internal void AcquireArray(PhpArray array)\r\n        {\r\n            Debug.Assert(array != null);\r\n\r\n            classContextIsValid = false;\r\n            array.Walk(new PhpWalkCallback(AcquireObject), this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call <c>__sleep</c> recursively on <see cref=\"PhpObject\"/>s contained in the array.\r\n        /// </summary>\r\n        internal void ReleaseArray(PhpArray array)\r\n        {\r\n            Debug.Assert(array != null);\r\n\r\n            classContextIsValid = false;\r\n            array.Walk(new PhpWalkCallback(ReleaseObject), this);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Static Locals\r\n\r\n        /// <summary>\r\n        /// Gets a value of a static local. For internal use only.\r\n        /// </summary>\r\n        /// <param name=\"id\">The index of a static local. Index starts with 1.</param>\r\n        /// <returns>Value of the local or <B>null</B>.</returns>\r\n        [Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n        public PhpReference GetStaticLocal(int id)\r\n        {\r\n            return (staticLocals != null && id > 0 && id <= staticLocals.Count) ? staticLocals[id - 1] : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the index of specified local variable.\r\n        /// </summary>\r\n        /// <param name=\"id\">Compound name of a static local (in format {simple function name}${local name index}).</param>\r\n        /// <returns>The static local integer index.</returns>\r\n        [Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static int GetStaticLocalId(string/*!*/ id)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(id));\r\n            return staticLocalsId.Get(id);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a local into the static local table. For internal use only.\r\n        /// </summary>\r\n        /// <param name=\"id\">The index of a static local. Index starts with 1.</param>\r\n        /// <param name=\"value\">A value of local (not a reference).</param>\r\n        /// <returns>A reference containing the <paramref name=\"value\"/>.</returns>\r\n        [Emitted, EditorBrowsable(EditorBrowsableState.Never)]\r\n        public PhpReference/*!*/ AddStaticLocal(int id, object value)\r\n        {\r\n            Debug.Assert(id > 0, \"Uninitialized static local variable index!\");\r\n            Debug.Assert(!(value is PhpReference));\r\n            Debug.Assert(id <= staticLocalsId.Count);\r\n\r\n            // ensure the staticLocals\r\n            if (staticLocals == null)\r\n                staticLocals = new List<PhpReference>(staticLocalsId.Count);\r\n\r\n            // ensure the Size\r\n            while (id > staticLocals.Count)\r\n                staticLocals.Add(null);\r\n\r\n            // set the element on index id\r\n            return (staticLocals[id - 1] = new PhpReference(value));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Initialization of requests and applications\r\n\r\n        /// <summary>\r\n        /// Sets a main script of the application.\r\n        /// </summary>\r\n        /// <param name=\"script\">The script related to the <c>sourceFile</c>.</param>\r\n        /// <param name=\"sourceFile\">The file path of the <c>script</c>.</param>\r\n        private void DefineMainScript(ScriptInfo/*!*/ script, PhpSourceFile/*!*/ sourceFile)\r\n        {\r\n            Debug.Assert(mainScriptFile == null, \"Main script redefined.\");\r\n\r\n            scripts.Add(sourceFile.FullPath.ToString(), script);\r\n            mainScriptFile = sourceFile;\r\n            mainScriptInfo = script;\r\n\r\n            // preallocate ScriptContext's dictionaries:\r\n            DeclaredFunctionsAllocate(script.MaxDeclaredFunctionsCount);\r\n            DeclaredTypesAllocate(script.MaxDeclaredTypesCount);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Eval\r\n\r\n        /// <summary>\r\n        /// Contains captured line number.\r\n        /// </summary>\r\n        [Emitted]\r\n        public int EvalLine = -1;\r\n\r\n        /// <summary>\r\n        /// Contains captured column number.\r\n        /// </summary>\r\n        [Emitted]\r\n        public int EvalColumn = -1;\r\n\r\n        /// <summary>\r\n        /// Contains captured eval id.\r\n        /// </summary>\r\n        [Emitted]\r\n        public int EvalId = -1;\r\n\r\n        /// <summary>\r\n        /// Contains captured relative source file packed path.\r\n        /// </summary>\r\n        [Emitted]\r\n        public string EvalRelativeSourcePath;\r\n\r\n        /// <summary>\r\n        /// Gets captured eval info. Eval info on a script context is updated by \r\n        /// a code injected to generated code by the compiler.\r\n        /// </summary>\r\n        /// <returns>The captured eval info.</returns>\r\n        /// <remarks>\r\n        /// Eval info is captured before a class library function call if it is implemented with option \r\n        /// <see cref=\"FunctionImplOptions.CaptureEvalInfo\"/> and a part of it (line, column) is updated\r\n        /// in every sequence point in debug mode. Should be called on the beginning of the function implementetion.\r\n        /// Can be called even if the info will not be needed eventually.\r\n        /// </remarks>\r\n        public SourceCodeDescriptor GetCapturedSourceCodeDescriptor()\r\n        {\r\n            return new SourceCodeDescriptor(EvalRelativeSourcePath, EvalId, EvalLine, EvalColumn);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clears the info.\r\n        /// </summary>\r\n        internal void ClearCapturedSourceCodeDescriptor()\r\n        {\r\n            EvalLine = EvalColumn = EvalId = -1;\r\n            EvalRelativeSourcePath = null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Setter Chains\r\n\r\n        /// <summary>\r\n        /// A stack of <see cref=\"PhpRuntimeChain\"/>s that are currently being processed.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// <para>\r\n        /// <see cref=\"PhpRuntimeChain\"/>s are maintained in a stack in order to support nested operator chains.\r\n        /// </para>\r\n        /// <para>\r\n        /// Every time the <see cref=\"Operators.EnsurePropertyIsArray\"/> or <see cref=\"Operators.EnsurePropertyIsObject\"/>\r\n        /// is called on a system class with overloaded member access (<B>__set</B> and/or <B>__get</B>), a new\r\n        /// <see cref=\"PhpRuntimeChain\"/> is pushed to the stack (<see cref=\"BeginSetterChain\"/>).\r\n        /// </para>\r\n        /// <para>\r\n        /// If a setter chain has been created, the consequent chaining operators just record field and item names\r\n        /// to it (<see cref=\"ExtendSetterChain\"/>). The last operator calls <see cref=\"FinishSetterChain\"/> which\r\n        /// causes the recorded data to be passed to the <B>__set</B> handler and the <see cref=\"PhpRuntimeChain\"/>\r\n        /// popped from the stack.\r\n        /// </para>\r\n        /// </remarks>\r\n        private Stack setterChainStack; // GENERICS: <SetterChain>\r\n\r\n        /// <summary>\r\n        /// Singleton instance of <see cref=\"PhpObject\"/> passed among chaining operators to indicate that\r\n        /// they are part of a setter chain.\r\n        /// </summary>\r\n        internal static PhpObject SetterChainSingletonObject = new Library.stdClass(null);\r\n\r\n        /// <summary>\r\n        /// Singleton instance of <see cref=\"PhpArray\"/> passed among chaining operators to indicate that\r\n        /// they are part of a setter chain.\r\n        /// </summary>\r\n        internal static PhpSetterChainArray SetterChainSingletonArray = new PhpSetterChainArray();\r\n\r\n        /// <summary>\r\n        /// Creates a new setter chain. Called from <see cref=\"Operators.EnsurePropertyIsArray\"/> and\r\n        /// <see cref=\"Operators.EnsurePropertyIsObject\"/> when a field of a system class with overloaded member\r\n        /// access should be ensured.\r\n        /// </summary>\r\n        /// <param name=\"obj\">The instance on which the setter chain is applied.</param>\r\n        internal void BeginSetterChain(DObject obj)\r\n        {\r\n            PhpRuntimeChain chain = new PhpRuntimeChain(obj);\r\n\r\n            if (setterChainStack == null) setterChainStack = new Stack();\r\n            setterChainStack.Push(chain);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a new element to the current setter chain. Called from chaining operators that can follow\r\n        /// <see cref=\"Operators.EnsurePropertyIsArray\"/> or <see cref=\"Operators.EnsurePropertyIsObject\"/> when\r\n        /// they detect they are part of a setter chain.\r\n        /// </summary>\r\n        /// <param name=\"elem\">The setter chain element to add.</param>\r\n        internal void ExtendSetterChain(RuntimeChainElement elem)\r\n        {\r\n            PhpRuntimeChain chain = (PhpRuntimeChain)setterChainStack.Peek();\r\n            chain.Add(elem);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pops the current setter chain without invoking the setter.\r\n        /// </summary>\r\n        /// <param name=\"quiet\">Whether not to report an error.</param>\r\n        internal void AbortSetterChain(bool quiet)\r\n        {\r\n            setterChainStack.Pop();\r\n            if (!quiet)\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_property_when_access_overloaded\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Passes the current setter chain to the setter and pops the setter chain. Called from chaining\r\n        /// operators that conclude the chain that might contain <see cref=\"Operators.EnsurePropertyIsArray\"/> or\r\n        /// <see cref=\"Operators.EnsurePropertyIsObject\"/> when they detect they are part of a setter chain.\r\n        /// </summary>\r\n        /// <param name=\"value\">The value that should be assigned to the field/item represented by the last\r\n        /// setter chain element.</param>\r\n        internal void FinishSetterChain(object value)\r\n        {\r\n            Debug.Assert(!(value is PhpReference));\r\n\r\n            PhpRuntimeChain chain = (PhpRuntimeChain)setterChainStack.Pop();\r\n\r\n            Debug.Assert(chain.Variable is PhpObject, \"SetterChain must begin with a PhpObject\");\r\n            PhpObject instance = (PhpObject)chain.Variable;\r\n\r\n            if (!instance.InvokeSetter(chain.Chain, value))\r\n            {\r\n                // if the setter could not be invoked, pretend that we didn't even try to arrange\r\n                // this silly meat cube O:-]\r\n                PhpException.Throw(PhpError.Error, CoreResources.GetString(\"undefined_property_when_access_overloaded\"));\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Interop\r\n\r\n        /// <summary>\r\n        /// Calls a PHP function. Intended for use from other languages.\r\n        /// </summary>\r\n        /// <param name=\"functionName\">Name of the function.</param>\r\n        /// <param name=\"arguments\">Arguments.</param>\r\n        /// <returns>Function call result.</returns>\r\n        public PhpReference/*!*/ Call(string/*!*/ functionName, params object[] arguments)\r\n        {\r\n            return Call(functionName, null, null, arguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Calls a PHP function. Intended for use from other languages.\r\n        /// </summary>\r\n        /// <param name=\"functionName\">Name of the function.</param>\r\n        /// <param name=\"namingContext\">Naming context within which the name is resolved (namespaces and aliases). Can be <B>null</B>.</param>\r\n        /// <param name=\"callerLocalVariables\">Table of the caller's variables. Can be <B>null</B>.</param>\r\n        /// <param name=\"arguments\">Arguments.</param>\r\n        /// <returns>Function call result.</returns>\r\n        public PhpReference/*!*/ Call(string/*!*/ functionName, NamingContext namingContext,\r\n            Dictionary<string, object> callerLocalVariables, params object[] arguments)\r\n        {\r\n            if (functionName == null)\r\n                throw new ArgumentNullException(\"functionName\");\r\n            if (arguments == null)\r\n                throw new ArgumentNullException(\"arguments\");\r\n\r\n            DRoutineDesc routineHint = null;\r\n\r\n            Stack.AddFrame(arguments);\r\n            return Call(callerLocalVariables, namingContext, functionName, null, ref routineHint, this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates and instance of a PHP class. Intended for use from other languages.\r\n        /// </summary>\r\n        /// <param name=\"className\">Name of the class to instantiate.</param>\r\n        /// <param name=\"ctorArguments\">Constructor arguments.</param>\r\n        /// <returns>The new instance or <B>null</B> on error.</returns>\r\n        public object NewObject(string/*!*/ className, params object[] ctorArguments)\r\n        {\r\n            return NewObject(className, null, ctorArguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates and instance of a PHP class. Intended for use from other languages.\r\n        /// </summary>\r\n        /// <param name=\"className\">Name of the class to instantiate.</param>\r\n        /// <param name=\"namingContext\">Naming context within which the name is resolved (namespaces and aliases). Can be <B>null</B>.</param>\r\n        /// <param name=\"ctorArguments\">Constructor arguments.</param>\r\n        /// <returns>The new instance or <B>null</B> on error.</returns>\r\n        public object NewObject(string/*!*/ className, NamingContext namingContext, params object[] ctorArguments)\r\n        {\r\n            if (className == null)\r\n                throw new ArgumentNullException(\"className\");\r\n            if (ctorArguments == null)\r\n                throw new ArgumentNullException(\"ctorArguments\");\r\n\r\n            Stack.AddFrame(ctorArguments);\r\n            return Operators.New(ResolveType(className), null, this, namingContext);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GlobalScope\r\n\r\n        private Utilities.GlobalScope globalScope;\r\n\r\n        public Utilities.GlobalScope Globals\r\n        {\r\n            get\r\n            {\r\n                if (globalScope == null)\r\n                    globalScope = new Utilities.GlobalScope(this);\r\n\r\n                return globalScope;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDisposable\r\n\r\n        /// <summary>\r\n        /// Disposes this instance of <see cref=\"ScriptContext\"/>,\r\n        /// calls PHP shutdown functions, finalizes PHP objects and finalizes buffer output.\r\n        /// </summary>\r\n        void IDisposable.Dispose()\r\n        {\r\n            if (!disposed)\r\n            {\r\n                try\r\n                {\r\n                    this.GuardedCall<object, object>(this.ProcessShutdownCallbacks, null, false);\r\n                    this.GuardedCall<object, object>(this.FinalizePhpObjects, null, false);\r\n                    this.GuardedCall<object, object>(this.FinalizeBufferedOutput, null, false);\r\n\r\n                    // additional disposal action\r\n                    if (this.TryDispose != null)\r\n                        this.TryDispose();\r\n                }\r\n                finally\r\n                {\r\n                    // additional disposal action\r\n                    if (this.FinallyDispose != null)\r\n                        this.FinallyDispose();\r\n\r\n                    if (object.ReferenceEquals(this, CurrentContext))\r\n                        CurrentContext = null;\r\n\r\n                    // remember the max capacity of dictionaries to preallocate next time:\r\n                    if (this.MainScriptInfo != null)\r\n                        this.MainScriptInfo.SaveMaxCounts(this);\r\n\r\n                    // clear context data\r\n                    this.Properties.ClearProperties();\r\n\r\n                    //\r\n                    this.disposed = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core/Serialization.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n// Uncomment the following line to enable logging of serialization events into fields of instances\r\n// being (de)serialized.\r\n//#define SERIALIZATION_DEBUG_LOG\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP.Library;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Caches current <see cref=\"ScriptContext\"/> and class context.\r\n\t/// </summary>\r\n\tpublic sealed class SerializationContext\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Pulls out a serialization context from a provided streaming context or creates a new one.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The streaming context.</param>\r\n\t\t/// <returns>A <see cref=\"SerializationContext\"/>.</returns>\r\n\t\tpublic static SerializationContext/*!*/ CreateFromStreamingContext(StreamingContext context)\r\n\t\t{\r\n\t\t\tSerializationContext result = context.Context as SerializationContext;\r\n\t\t\tif (result == null) result = new SerializationContext();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ScriptContext\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns current <see cref=\"ScriptContext\"/>. Lazily initialized.\r\n\t\t/// </summary>\r\n\t\tpublic ScriptContext/*!*/ ScriptContext\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (scriptContext == null) scriptContext = ScriptContext.CurrentContext;\r\n\t\t\t\treturn scriptContext;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate ScriptContext scriptContext;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ClassContext\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns current class context. Lazily initialized.\r\n\t\t/// </summary>\r\n\t\tpublic DTypeDesc ClassContext\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!classContextValid)\r\n\t\t\t\t{\r\n\t\t\t\t\tclassContext = PhpStackTrace.GetClassContext();\r\n\t\t\t\t\tclassContextValid = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn classContext;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate DTypeDesc classContext;\r\n\t\tprivate bool classContextValid;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SleepResults\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a dictionary of <c>__sleep</c> method return values.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Serialization asks for an object's values multiple times (flaw?) but <c>__sleep</c>\r\n\t\t/// should be called only once for each instance present in the object graph.\r\n\t\t/// </remarks>\r\n\t\tpublic Dictionary<DObject, PhpArray>/*!*/ SleepResults\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (sleepResults == null) sleepResults = new Dictionary<DObject, PhpArray>();\r\n\t\t\t\treturn sleepResults;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate Dictionary<DObject, PhpArray> sleepResults;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Set as a value for the instances that do not implement <c>__sleep</c>/\r\n\t\t/// </summary>\r\n\t\tpublic static readonly PhpArray/*!*/ NoSleepResultSingleton = new PhpArray();\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implements .NET serialization.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// This class is currently not registered as a surrogate for any type. <see cref=\"DObject\"/> implements\r\n\t/// <see cref=\"ISerializable\"/> and delegates to this class manually.\r\n\t/// </remarks>\r\n\tinternal sealed class SerializationSurrogate : ISerializationSurrogate\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\tpublic static readonly SerializationSurrogate Instance = new SerializationSurrogate();\r\n\r\n\t\tprivate const string MembersSerializationInfoKey = \"<members>\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ISerializationSurrogate Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"SerializationInfo\"/> with the data needed to serialize the object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object to serialize.</param>\r\n\t\t/// <param name=\"info\">The <see cref=\"SerializationInfo\"/> to populate with data.</param>\r\n\t\t/// <param name=\"context\">The destination for this serialization.</param>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(object/*!*/ obj, SerializationInfo/*!*/ info, StreamingContext context)\r\n\t\t{\r\n\t\t\tDObject instance = (DObject)obj;\r\n\r\n\t\t\tif ((context.State & StreamingContextStates.Persistence) != StreamingContextStates.Persistence)\r\n\t\t\t{\r\n\t\t\t\tSerialization.DebugInstanceSerialized(instance, false);\r\n\r\n\t\t\t\t// serialization is requested by Remoting -> serialize everything and do not change type\r\n\t\t\t\tMemberInfo[] members = FormatterServices.GetSerializableMembers(instance.GetType());\r\n\t\t\t\tinfo.AddValue(MembersSerializationInfoKey, FormatterServices.GetObjectData(instance, members));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tSerialization.DebugInstanceSerialized(instance, true);\r\n\r\n\t\t\t\t// Serialization was requested by the user via the serialize() PHP function so it is possible that\r\n\t\t\t\t// the type of this instance will be undefined at deserialization time.\r\n\r\n\t\t\t\tif (instance.RealObject is Library.SPL.Serializable)\r\n\t\t\t\t{\r\n\t\t\t\t\t// the instance is PHP5.1 serializable -> reroute the deserialization to SPLDeserializer\r\n\t\t\t\t\tSPLDeserializer.GetObjectData(instance, info, context);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// otherwise reroute the deserialization to Deserializer, which handles __sleep\r\n\t\t\t\t\tDeserializer.GetObjectData(instance, info, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the object using the information in the <see cref=\"SerializationInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object to populate.</param>\r\n\t\t/// <param name=\"info\">The information to populate the object.</param>\r\n\t\t/// <param name=\"context\">The source from which the object is deserialized.</param>\r\n\t\t/// <param name=\"selector\">The surrogate selector where the search for a compatible surrogate begins.</param>\r\n\t\t/// <returns>The populated deserialized object.</returns>\r\n\t\tpublic object SetObjectData(object/*!*/ obj, SerializationInfo/*!*/ info, StreamingContext context,\r\n\t\t\tISurrogateSelector selector)\r\n\t\t{\r\n\t\t\t// use the instance's RuntimeFields as a temp storage for deserialized members\r\n\t\t\tDObject instance = (DObject)obj;\r\n\r\n            instance.RuntimeFields = new PhpArray();\r\n\t\t\tinstance.RuntimeFields.Add(MembersSerializationInfoKey,\r\n\t\t\t\tinfo.GetValue(MembersSerializationInfoKey, typeof(object[])));\r\n\r\n\t\t\t// the instance will be populated in OnDeserialization\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region OnDeserialization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs when the entire object graph has been deserialized.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object being deserialized.</param>\r\n\t\tpublic void OnDeserialization(object/*!*/ obj)\r\n\t\t{\r\n\t\t\tDObject instance = (DObject)obj;\r\n\r\n\t\t\tMemberInfo[] members = FormatterServices.GetSerializableMembers(instance.GetType());\r\n\r\n\t\t\t// get deserialized members from the temp storage\r\n\t\t\tDebug.Assert(instance.RuntimeFields != null && instance.RuntimeFields.Count == 1);\r\n\r\n\t\t\tobject[] deserialized_members = (object[])instance.RuntimeFields[MembersSerializationInfoKey];\r\n\t\t\tinstance.RuntimeFields.Clear();\r\n\r\n\t\t\tif (deserialized_members.Length != members.Length) throw new InvalidOperationException();\r\n\r\n\t\t\tFormatterServices.PopulateObjectMembers(instance, members, deserialized_members);\r\n\r\n\t\t\tSerialization.DebugInstanceDeserialized(instance, false);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Handles deserialization for classes derived from <see cref=\"DObject\"/> whose real objects\r\n\t/// do not implement the <see cref=\"Library.SPL.Serializable\"/> interface.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The result of deserialization is either the original class or <see cref=\"__PHP_Incomplete_Class\"/>\r\n\t/// if the original class is undefined.\r\n\t/// </remarks>\r\n\t[Serializable]\r\n\tinternal class Deserializer : ISerializable, IDeserializationCallback, IObjectReference\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// The key used for CLR real object when there's no <c>__sleep</c>.\r\n\t\t/// </summary>\r\n\t\tprivate const string ClrRealObjectSerializationInfoKey = \"__RealObject\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// The real object to be returned by <see cref=\"GetRealObject\"/>.\r\n\t\t/// </summary>\r\n\t\tprotected DObject instance;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The <see cref=\"SerializationInfo\"/> passed to the deserializing constructor.\r\n\t\t/// </summary>\r\n\t\tprotected SerializationInfo/*!*/ serInfo;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A serialization context holding SC and class context.\r\n\t\t/// </summary>\r\n\t\tprotected SerializationContext/*!*/ context;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected Deserializer(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\tthis.serInfo = info;\r\n\t\t\tthis.context = SerializationContext.CreateFromStreamingContext(context);\r\n\r\n\t\t\tstring class_name_str = info.GetString(__PHP_Incomplete_Class.ClassNameFieldName);\r\n\t\t\tif (String.IsNullOrEmpty(class_name_str))\r\n\t\t\t{\r\n\t\t\t\t// note that we must never return null from GetRealObject (formatters do not like it)\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tinstance = Serialization.GetUninitializedInstance(class_name_str, this.context.ScriptContext);\r\n\t\t\tif (instance == null)\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(CoreResources.GetString(\"class_instantiation_failed\", class_name_str));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetObjectData\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"SerializationInfo\"/> with the data needed to serialize the object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The object to serialize.</param>\r\n\t\t/// <param name=\"info\">The <see cref=\"SerializationInfo\"/> to populate with data.</param>\r\n\t\t/// <param name=\"strctx\">Streaming context (should contain <see cref=\"SerializationContext\"/>).</param>\r\n        [System.Security.SecurityCritical]\r\n        public static void GetObjectData(DObject/*!*/ instance, SerializationInfo/*!*/ info, StreamingContext strctx)\r\n\t\t{\r\n\t\t\tinfo.SetType(typeof(Deserializer));\r\n\r\n\t\t\tSerializationContext context = SerializationContext.CreateFromStreamingContext(strctx);\r\n\r\n\t\t\tbool sleep_called;\r\n\t\t\tPhpArray sleep_result;\r\n\r\n\t\t\t// try to get the caches __sleep result\r\n\t\t\tif (context.SleepResults.TryGetValue(instance, out sleep_result))\r\n\t\t\t{\r\n\t\t\t\tif (Object.ReferenceEquals(sleep_result, SerializationContext.NoSleepResultSingleton))\r\n\t\t\t\t{\r\n\t\t\t\t\tsleep_called = false;\r\n\t\t\t\t\tsleep_result = null;\r\n\t\t\t\t}\r\n\t\t\t\telse sleep_called = true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tsleep_result = instance.Sleep(context.ClassContext, context.ScriptContext, out sleep_called);\r\n\t\t\t\tcontext.SleepResults.Add(instance, (sleep_called ? sleep_result : SerializationContext.NoSleepResultSingleton));\r\n\t\t\t}\r\n\r\n\t\t\tif (sleep_called && sleep_result == null)\r\n\t\t\t{\r\n\t\t\t\t// __sleep did not return an array -> this instance will deserialize as NULL\r\n\t\t\t\tinfo.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, String.Empty);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// if we have a sleep result, serialize fields according to it, otherwise serialize all fields\r\n\r\n\t\t\t\tIEnumerable<KeyValuePair<string, object>> serializable_properties;\r\n\t\t\t\tobject real_object = null;\r\n\r\n\t\t\t\tif (sleep_result == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tserializable_properties = Serialization.EnumerateSerializableProperties(\r\n\t\t\t\t\t\tinstance,\r\n\t\t\t\t\t\ttrue); // get PHP fields only\r\n\r\n\t\t\t\t\t// serialize CLR real object in the \"CLR way\"\r\n\t\t\t\t\tif (!(instance is PhpObject)) real_object = instance.RealObject;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tserializable_properties = Serialization.EnumerateSerializableProperties(\r\n\t\t\t\t\t\tinstance,\r\n\t\t\t\t\t\tsleep_result,\r\n\t\t\t\t\t\tcontext.ScriptContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbool type_name_serialized = false;\r\n\t\t\t\tbool real_object_serialized = false;\r\n\r\n\t\t\t\tforeach (KeyValuePair<string, object> pair in serializable_properties)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (pair.Key == __PHP_Incomplete_Class.ClassNameFieldName) type_name_serialized = true;\r\n\r\n\t\t\t\t\tif (pair.Key == ClrRealObjectSerializationInfoKey)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// unwrap the possibly wrapped CLR real object\r\n\t\t\t\t\t\tinfo.AddValue(pair.Key, PhpVariable.Unwrap(pair.Value));\r\n\r\n\t\t\t\t\t\treal_object_serialized = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpReference reference = pair.Value as PhpReference;\r\n\t\t\t\t\t\tinfo.AddValue(pair.Key, WrapPropertyValue(pair.Value));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if the type name has not been serialized, do it now\r\n\t\t\t\tif (!type_name_serialized) info.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, instance.TypeName);\r\n\r\n\t\t\t\t// if the real object has not been serialized, do it now\r\n\t\t\t\tif (!real_object_serialized) info.AddValue(ClrRealObjectSerializationInfoKey, real_object);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ISerializable Members\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetObjectData\"]/*'/>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n\t\t{\r\n\t\t\t// should never be called\r\n\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDeserializationCallback Members\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"OnDeserialization\"]/*'/>\r\n\t\tpublic virtual void OnDeserialization(object sender)\r\n\t\t{\r\n\t\t\tif (instance == null) return;\r\n\r\n\t\t\tobject real_object = serInfo.GetValue(ClrRealObjectSerializationInfoKey, typeof(object));\r\n\t\t\tif (real_object != null)\r\n\t\t\t{\r\n\t\t\t\t// if we have serialized CLR real object, populate the instance now\r\n\t\t\t\tif (instance is __PHP_Incomplete_Class)\r\n\t\t\t\t{\r\n\t\t\t\t\tSerialization.SetProperty(\r\n\t\t\t\t\t\tinstance,\r\n\t\t\t\t\t\tClrRealObjectSerializationInfoKey,\r\n\t\t\t\t\t\tClrObject.WrapRealObject(real_object),\r\n\t\t\t\t\t\tcontext.ScriptContext);\r\n\t\t\t\t}\r\n                else if (instance is IClrValue)\r\n                {\r\n                    Type type = instance.GetType(); // generic type ClrValue<T>\r\n                    FieldInfo field = type.GetField(\"realValue\");\r\n                    Debug.Assert(field != null);\r\n                    field.SetValue(instance, real_object);\r\n                }\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t((ClrObject)instance).SetRealObject(real_object);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// deserialize fields\r\n\t\t\tSerializationInfoEnumerator enumerator = serInfo.GetEnumerator();\r\n\t\t\twhile (enumerator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tstring name = enumerator.Name;\r\n\r\n\t\t\t\tif (name != __PHP_Incomplete_Class.ClassNameFieldName &&\r\n\t\t\t\t\tname != ClrRealObjectSerializationInfoKey)\r\n\t\t\t\t{\r\n\t\t\t\t\tSerialization.SetProperty(\r\n\t\t\t\t\t\tinstance,\r\n\t\t\t\t\t\tname,\r\n\t\t\t\t\t\tUnwrapPropertyValue(enumerator.Value),\r\n\t\t\t\t\t\tcontext.ScriptContext);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tSerialization.DebugInstanceDeserialized(instance, true);\r\n\r\n\t\t\tinstance.Wakeup(context.ClassContext, context.ScriptContext);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IObjectReference Members\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetRealObject\"]/*'/>\r\n\t\t/// <remarks>\r\n\t\t/// The result is either an instance of the class that has originally been serialized,\r\n\t\t/// an instance of <see cref=\"__PHP_Incomplete_Class\"/> if the real class is undefined\r\n\t\t/// or <B>null</B> if the class has a faulty <c>__sleep</c> and should be deserialized as <B>null</B>.\r\n\t\t/// </remarks>\r\n\t\tpublic object/*!*/ GetRealObject(StreamingContext context)\r\n\t\t{\r\n\t\t\t// never return null - formatter needs to have non-null ref for fix-ups\r\n\t\t\tif (instance == null) return new PhpSmartReference(null);\r\n\t\t\treturn instance;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region WrapPropertyValue, UnwrapPropertyValue\r\n\r\n\t\t/// <summary>\r\n\t\t/// Wraps a <see cref=\"DObject\"/> with a non-aliased <see cref=\"PhpReference\"/> to allow for reference fix-ups\r\n\t\t/// after deserialization.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"val\">The object to wrap.</param>\r\n\t\t/// <returns><see cref=\"PhpReference\"/> to <paramref name=\"val\"/> if <paramref name=\"val\"/> is a\r\n\t\t/// <see cref=\"DObject\"/>, or <paramref name=\"val\"/> itself otherwise.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// The purpose of this wrapping is to avoid <see cref=\"DObject\"/>s referencing another <see cref=\"DObject\"/>s\r\n\t\t/// directly which causes problems when such an object graph is deserialized.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Without this wrapping, under certain circumstances serialization would fail with the following exception\r\n\t\t/// message: The object with ID 5 implements the <see cref=\"IObjectReference\"/> interface for which all\r\n\t\t/// dependencies cannot be resolved. The likely cause is two instances of <see cref=\"IObjectReference\"/> that\r\n\t\t/// have a mutual dependency on each other.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n\t\tinternal static object WrapPropertyValue(object val)\r\n\t\t{\r\n\t\t\tif (val is DObject) return new PhpSmartReference(val);\r\n\t\t\treturn val;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Eliminates non-aliased <see cref=\"PhpReference\"/>s. <seealso cref=\"WrapPropertyValue\"/>\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"val\">The object to unwrap.</param>\r\n\t\t/// <returns><paramref name=\"val\"/>'s value if it is a non-aliased <see cref=\"PhpReference\"/>, or\r\n\t\t/// <paramref name=\"val\"/> itself otherwise.</returns>\r\n\t\tinternal static object UnwrapPropertyValue(object val)\r\n\t\t{\r\n\t\t\tPhpReference reference = val as PhpReference;\r\n\t\t\tif (reference != null && !reference.IsAliased) return reference.Value;\r\n\t\t\treturn val;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Handles deserialization for classes derived from <see cref=\"DObject\"/> whose real objects implement the\r\n\t/// <see cref=\"Library.SPL.Serializable\"/> interface.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The result of deserialization is either the original class or <B>null</B> if\r\n\t/// <see cref=\"Library.SPL.Serializable.serialize\"/> returned <B>null</B>.\r\n\t/// </remarks>\r\n\t[Serializable]\r\n\tinternal class SPLDeserializer : Deserializer\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the serialized field that holds the string returned by <see cref=\"Library.SPL.Serializable.serialize\"/>.\r\n\t\t/// </summary>\r\n\t\tinternal const string SerializedDataFieldName = \"__Serialized_Data\";\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"serialization.ctor\"]/*'/>\r\n\t\tprotected SPLDeserializer(SerializationInfo info, StreamingContext context)\r\n\t\t\t: base(info, context)\r\n\t\t{\r\n\t\t\t// if binding failed, we cannot continue (__PHP_Incomplete_Class is no good either)\r\n\t\t\tif (instance != null && !(instance is Library.SPL.Serializable))\r\n\t\t\t{\r\n\t\t\t\tthrow new SerializationException(CoreResources.GetString(\"class_has_no_unserializer\",\r\n\t\t\t\t\tinstance.TypeName));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetObjectData\r\n\r\n\t\t/// <summary>\r\n\t\t/// Populates the provided <see cref=\"SerializationInfo\"/> with the data needed to serialize the object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The object to serialize.</param>\r\n\t\t/// <param name=\"info\">The <see cref=\"SerializationInfo\"/> to populate with data.</param>\r\n\t\t/// <param name=\"strctx\">Streaming context (should contain <see cref=\"SerializationContext\"/>).</param>\r\n        [System.Security.SecurityCritical]\r\n        new public static void GetObjectData(DObject/*!*/ instance, SerializationInfo/*!*/ info, StreamingContext strctx)\r\n\t\t{\r\n\t\t\tinfo.SetType(typeof(SPLDeserializer));\r\n\r\n\t\t\tSerializationContext context = SerializationContext.CreateFromStreamingContext(strctx);\r\n\r\n\t\t\tobject res = PhpVariable.Dereference(instance.InvokeMethod(\"serialize\", null, context.ScriptContext));\r\n\t\t\tif (res == null)\r\n\t\t\t{\r\n\t\t\t\t// serialize returned NULL -> this instance will deserialize as NULL\r\n\t\t\t\tinfo.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, String.Empty);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstring res_str = PhpVariable.AsString(res);\r\n\t\t\t\tif (res_str == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// serialize did not return NULL nor a string -> throw an exception\r\n                    Library.SPL.Exception.ThrowSplException(\r\n                        _ctx => new Library.SPL.Exception(_ctx, true),\r\n                        context.ScriptContext,\r\n                        string.Format(CoreResources.serialize_must_return_null_or_string, instance.TypeName), 0, null);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinfo.AddValue(SerializedDataFieldName, res_str);\r\n\t\t\t\tinfo.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, instance.TypeName);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IDeserializationCallback Members\r\n\r\n\t\t/// <include file='Doc/Common.xml' path='/docs/method[@name=\"OnDeserialization\"]/*'/>\r\n\t\tpublic override void OnDeserialization(object sender)\r\n\t\t{\r\n\t\t\t// check whether serialize() returned null\r\n\t\t\tif (instance == null) return;\r\n\r\n\t\t\tSerialization.DebugInstanceDeserialized(instance, true);\r\n\r\n\t\t\tDebug.Assert(instance.RealObject is Library.SPL.Serializable);\r\n\r\n\t\t\t// invoke unserialize\r\n\t\t\tcontext.ScriptContext.Stack.AddFrame(serInfo.GetString(SerializedDataFieldName));\r\n\t\t\tinstance.InvokeMethod(\"unserialize\", null, context.ScriptContext);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/Serialization.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n// Uncomment the following line to enable logging of serialization events into fields of instances\r\n// being (de)serialized.\r\n//#define SERIALIZATION_DEBUG_LOG\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.Serialization;\r\n\r\nusing PHP.Library;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Provides services related to serialization.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Used by .NET serialization (implemented in Core) as well as by PHP serialization, which is implemented\r\n\t/// in ClassLibrary.\r\n\t/// </remarks>\r\n\tpublic static class Serialization\r\n\t{\r\n\t\t#region ParsePropertyName, FormatPropertyName\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses property name used for serialization. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name found in serialization stream or returned by <B>__sleep</B>.</param>\r\n\t\t/// <param name=\"typeName\">Will receive the name of the declaring type or <B>null</B> if no\r\n\t\t/// type information is embedded in the property <paramref name=\"name\"/>.</param>\r\n\t\t/// <param name=\"visibility\">Will receive the assumed visibility of the property.</param>\r\n\t\t/// <returns>The bare (unmangled) property name.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Names of protected properties might be prepended with \\0*\\0, names of private properties might be\r\n\t\t/// prepended with \\0declaring_class_name\\0\r\n\t\t/// (see <A href=\"http://bugs.php.net/bug.php?id=26737\">http://bugs.php.net/bug.php?id=26737</A>)\r\n\t\t/// </remarks>\r\n\t\tpublic static string/*!*/ ParsePropertyName(string/*!*/ name, out string typeName, out PhpMemberAttributes visibility)\r\n\t\t{\r\n\t\t\tif (name.Length >= 3 && name[0] == '\\0')\r\n\t\t\t{\r\n\t\t\t\tif (name[1] == '*' && name[2] == '\\0')\r\n\t\t\t\t{\r\n\t\t\t\t\t// probably a protected field\r\n\t\t\t\t\tvisibility = PhpMemberAttributes.Protected;\r\n\t\t\t\t\ttypeName = null;\r\n\t\t\t\t\treturn name.Substring(3);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// probably a private property\r\n\t\t\t\t\tint index = name.IndexOf('\\0', 2);\r\n\t\t\t\t\tif (index > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvisibility = PhpMemberAttributes.Private;\r\n\t\t\t\t\t\ttypeName = name.Substring(1, index - 1);  // TODO\r\n\t\t\t\t\t\treturn name.Substring(index + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvisibility = PhpMemberAttributes.Public;\r\n\t\t\ttypeName = null;\r\n\t\t\treturn name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Formats a property name for serialization according to its visibility and declaing type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"property\">The property desc.</param>\r\n\t\t/// <param name=\"propertyName\">The property name.</param>\r\n\t\t/// <returns>The property name formatted according to the <paramref name=\"property\"/> as used by PHP serialization.\r\n\t\t/// </returns>\r\n\t\tpublic static string/*!*/ FormatPropertyName(DPropertyDesc/*!*/ property, string/*!*/ propertyName)\r\n\t\t{\r\n\t\t\tswitch (property.MemberAttributes & PhpMemberAttributes.VisibilityMask)\r\n\t\t\t{\r\n\t\t\t\tcase PhpMemberAttributes.Public: return propertyName;\r\n\t\t\t\tcase PhpMemberAttributes.Protected: return \"\\0*\\0\" + propertyName;\r\n\t\t\t\tcase PhpMemberAttributes.Private: return \"\\0\" + property.DeclaringType.MakeFullName() + \"\\0\" + propertyName;\r\n\r\n\t\t\t\tdefault: Debug.Fail(null); return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region EnumerateSerializableProperties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns names and properties of all instance properties (including runtime fields).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The instance being serialized.</param>\r\n\t\t/// <returns>Name-value pairs. Names are properly formatted for serialization.</returns>\r\n\t\tpublic static IEnumerable<KeyValuePair<string, object>> EnumerateSerializableProperties(DObject/*!*/ instance)\r\n\t\t{\r\n\t\t\treturn EnumerateSerializableProperties(instance, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns names and properties of all instance properties or only PHP fields (including runtime fields).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The instance being serialized.</param>\r\n\t\t/// <param name=\"phpFieldsOnly\"><B>True</B> to return only PHP fields, <B>false</B> to return all\r\n\t\t/// instance properties.</param>\r\n\t\t/// <returns>Name-value pairs. Names are properly formatted for serialization.</returns>\r\n\t\tpublic static IEnumerable<KeyValuePair<string, object>> EnumerateSerializableProperties(\r\n\t\t\tDObject/*!*/ instance,\r\n\t\t\tbool phpFieldsOnly)\r\n\t\t{\r\n\t\t\t// enumerate CT properties:\r\n\t\t\tforeach (KeyValuePair<VariableName, DPropertyDesc> pair in instance.TypeDesc.EnumerateProperties())\r\n\t\t\t{\r\n\t\t\t\t// skip static props\r\n\t\t\t\tif (pair.Value.IsStatic) continue;\r\n\r\n\t\t\t\t// skip CLR fields and props if asked so\r\n\t\t\t\tif (phpFieldsOnly && !(pair.Value is DPhpFieldDesc)) continue;\r\n\r\n\t\t\t\tobject property_value = pair.Value.Get(instance);\r\n\t\t\t\tPhpReference property_value_ref = property_value as PhpReference;\r\n\r\n\t\t\t\tif (property_value_ref == null || property_value_ref.IsSet)\r\n\t\t\t\t{\r\n\t\t\t\t\tyield return new KeyValuePair<string, object>(\r\n\t\t\t\t\t\tSerialization.FormatPropertyName(pair.Value, pair.Key.ToString()),\r\n\t\t\t\t\t\tproperty_value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// enumerate RT fields:\r\n\t\t\tif (instance.RuntimeFields != null)\r\n\t\t\t{\r\n                foreach (var pair in instance.RuntimeFields)\r\n                {\r\n                    yield return new KeyValuePair<string, object>(pair.Key.String, pair.Value);\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns names and values of properties whose names have been returned by <c>__sleep</c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The instance being serialized.</param>\r\n\t\t/// <param name=\"sleepResult\">The array returned by <c>__sleep</c>.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <returns>Name-value pairs. Names are properly formatted for serialization.</returns>\r\n\t\t/// <exception cref=\"PhpException\">Property of the name returned from <c>__sleep</c> does not exist.</exception>\r\n\t\t/// <remarks>\r\n\t\t/// This method returns exactly <paramref name=\"sleepResult\"/>'s <see cref=\"PhpHashtable.Count\"/> items.\r\n\t\t/// </remarks>\r\n\t\tpublic static IEnumerable<KeyValuePair<string, object>> EnumerateSerializableProperties(\r\n\t\t\tDObject/*!*/ instance,\r\n\t\t\tPhpArray/*!*/ sleepResult,\r\n\t\t\tScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tforeach (object item in sleepResult.Values)\r\n\t\t\t{\r\n\t\t\t\tPhpMemberAttributes visibility;\r\n\t\t\t\tstring name = PHP.Core.Convert.ObjectToString(item);\r\n\t\t\t\tstring declaring_type_name;\r\n\t\t\t\tstring property_name = ParsePropertyName(name, out declaring_type_name, out visibility);\r\n\r\n\t\t\t\tDTypeDesc declarer;\r\n\t\t\t\tif (declaring_type_name == null) declarer = instance.TypeDesc;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdeclarer = context.ResolveType(declaring_type_name);\r\n\t\t\t\t\tif (declarer == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// property name refers to an unknown class -> value will be null\r\n\t\t\t\t\t\tyield return new KeyValuePair<string, object>(name, null);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// obtain the property desc and decorate the prop name according to its visibility and declaring class\r\n\t\t\t\tDPropertyDesc property;\r\n\t\t\t\tif (instance.TypeDesc.GetProperty(new VariableName(property_name), declarer, out property) ==\r\n\t\t\t\t\tGetMemberResult.OK && !property.IsStatic)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((Enums.VisibilityEquals(visibility, property.MemberAttributes) &&\r\n\t\t\t\t\t\tvisibility != PhpMemberAttributes.Public)\r\n\t\t\t\t\t\t||\r\n\t\t\t\t\t\t(visibility == PhpMemberAttributes.Private &&\r\n\t\t\t\t\t\tdeclarer != property.DeclaringType))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if certain conditions are met, serialize the property as null\r\n\t\t\t\t\t\t// (this is to precisely mimic the PHP behavior)\r\n\t\t\t\t\t\tyield return new KeyValuePair<string, object>(name, null);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tname = FormatPropertyName(property, property_name);\r\n\t\t\t\t}\r\n\t\t\t\telse property = null;\r\n\r\n\t\t\t\t// obtain the property value\r\n\t\t\t\tobject val = null;\r\n\r\n\t\t\t\tif (property != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tval = property.Get(instance);\r\n\t\t\t\t}\r\n\t\t\t\telse if (instance.RuntimeFields == null || !instance.RuntimeFields.TryGetValue(name, out val))\r\n\t\t\t\t{\r\n\t\t\t\t\t// this is new in PHP 5.1\r\n\t\t\t\t\tPhpException.Throw(PhpError.Notice, CoreResources.GetString(\"sleep_returned_bad_field\", name));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tyield return new KeyValuePair<string, object>(name, val);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetUninitializedInstance, SetProperty\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an unitialized instance of the specified type or <see cref=\"__PHP_Incomplete_Class\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeName\">The type name.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\t/// <returns>The newly created instance or <B>null</B> if <paramref name=\"typeName\"/> denotes\r\n\t\t/// a primitive type.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// If the <paramref name=\"typeName\"/> denotes a CLR type, no constructor is executed. If the\r\n\t\t/// <paramref name=\"typeName\"/> denotes a PHP type, no user constructor (e.g. <c>__construct</c>)\r\n\t\t/// is executed.\r\n\t\t/// </remarks>\r\n\t\tpublic static DObject GetUninitializedInstance(string/*!*/ typeName, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\t// resolve the specified type\r\n\t\t\tDTypeDesc type = context.ResolveType(typeName);\r\n\t\t\tif (type == null || type.IsAbstract)\r\n\t\t\t{\r\n\t\t\t\tPhpCallback callback = context.Config.Variables.DeserializationCallback;\r\n\t\t\t\tif (callback != null && !callback.IsInvalid)\r\n\t\t\t\t{\r\n\t\t\t\t\tcallback.Invoke(typeName);\r\n\t\t\t\t\ttype = context.ResolveType(typeName);\r\n\r\n\t\t\t\t\tif (type == null || type.IsAbstract)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// unserialize_callback_func failed\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"unserialize_callback_failed\",\r\n\t\t\t\t\t\t\t((IPhpConvertible)callback).ToString()));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (type == null || type.IsAbstract)\r\n\t\t\t{\r\n\t\t\t\t// type not found -> create __PHP_Incomplete_Class\r\n\t\t\t\t__PHP_Incomplete_Class pic = new __PHP_Incomplete_Class(context, false);\r\n\t\t\t\tpic.__PHP_Incomplete_Class_Name.Value = typeName;\r\n\t\t\t\tpic.__PHP_Incomplete_Class_Name.IsSet = true;\r\n\r\n\t\t\t\treturn pic;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// create the instance\r\n\t\t\t\treturn type.New(context) as DObject;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a property of a <see cref=\"DObject\"/> instance according to deserialized name and value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The instance being deserialized.</param>\r\n\t\t/// <param name=\"name\">The property name formatted for serialization (see <see cref=\"FormatPropertyName\"/>).</param>\r\n\t\t/// <param name=\"value\">The property value.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n\t\tpublic static void SetProperty(DObject/*!*/ instance, string/*!*/ name, object value, ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\t// the property name might encode its visibility and \"classification\" -> use these\r\n\t\t\t// information for suitable property desc lookups\r\n\t\t\tPhpMemberAttributes visibility;\r\n\t\t\tstring type_name;\r\n\r\n\t\t\tstring property_name = ParsePropertyName(name, out type_name, out visibility);\r\n\r\n\t\t\tDTypeDesc declarer;\r\n\t\t\tif (type_name == null) declarer = instance.TypeDesc;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tdeclarer = context.ResolveType(type_name);\r\n\t\t\t\tif (declarer == null) declarer = instance.TypeDesc;\r\n\t\t\t}\r\n\r\n\t\t\t// try to find a suitable field handle\r\n\t\t\tDPropertyDesc property;\r\n\t\t\tif (instance.TypeDesc.GetProperty(new VariableName(property_name), declarer, out property) ==\r\n\t\t\t\tPHP.Core.Reflection.GetMemberResult.OK)\r\n\t\t\t{\r\n\t\t\t\tif ((property.IsPrivate &&\r\n\t\t\t\t\tdeclarer != property.DeclaringType))\r\n\t\t\t\t{\r\n\t\t\t\t\t// if certain conditions are met, don't use the handle even if it was found\r\n\t\t\t\t\t// (this is to precisely mimic the PHP behavior)\r\n\t\t\t\t\tproperty = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse property = null;\r\n\r\n\t\t\tif (property != null) property.Set(instance, value);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// suitable CT field not found -> add it to RT fields\r\n\t\t\t\t// (note: care must be taken so that the serialize(unserialize($x)) round\r\n\t\t\t\t// trip returns $x even if user classes specified in $x are not declared)\r\n                if (instance.RuntimeFields == null) instance.RuntimeFields = new PhpArray();\r\n\t\t\t\tinstance.RuntimeFields[name] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Debug log\r\n#if !SILVERLIGHT\r\n\t\t[Conditional(\"SERIALIZATION_DEBUG_LOG\")]\r\n\t\tinternal static void DebugInstanceSerialized(DObject/*!*/ instance, bool forPersistence)\r\n\t\t{\r\n\t\t\tinstance.SetProperty(\r\n\t\t\t\tGuid.NewGuid().ToString(),\r\n\t\t\t\tString.Format(\r\n\t\t\t\t\t\"Serialized for {0} in process: {1}, app domain: {2}\",\r\n\t\t\t\t\tforPersistence ? \"persistence\" : \"remoting\",\r\n\t\t\t\t\tProcess.GetCurrentProcess().MainModule.FileName,\r\n\t\t\t\t\tAppDomain.CurrentDomain.FriendlyName),\r\n\t\t\t\tnull);\r\n\t\t}\r\n\r\n\t\t[Conditional(\"SERIALIZATION_DEBUG_LOG\")]\r\n\t\tinternal static void DebugInstanceDeserialized(DObject/*!*/ instance, bool forPersistence)\r\n\t\t{\r\n\t\t\tinstance.SetProperty(\r\n\t\t\t\tGuid.NewGuid().ToString(),\r\n\t\t\t\tString.Format(\r\n\t\t\t\t\t\"Deserialized for {0} in process: {1}, app domain: {2}\",\r\n\t\t\t\t\tforPersistence ? \"persistence\" : \"remoting\",\r\n\t\t\t\t\tProcess.GetCurrentProcess().MainModule.FileName,\r\n\t\t\t\t\tAppDomain.CurrentDomain.FriendlyName),\r\n\t\t\t\tnull);\r\n\t\t}\r\n#endif\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/SessionHandler.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Web;\r\nusing System.Web.SessionState;\r\nusing System.Runtime.Remoting.Messaging;\r\nusing System.Runtime.Serialization;\r\nusing System.Runtime.Serialization.Formatters.Binary;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Web.Configuration;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// A session state.\r\n\t/// </summary>\r\n\tpublic enum SessionStates\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Session is being started. Session handler's \r\n\t\t/// <see cref=\"SessionHandler.Load\"/> method is called during this phase.\r\n\t\t/// </summary>\r\n\t\tStarting,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session has been started. \r\n\t\t/// </summary>\r\n\t\tStarted,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session is being closed. Session handler's \r\n\t\t/// <see cref=\"SessionHandler.Persist\"/> method is called during this phase.\r\n\t\t/// </summary>\r\n\t\tClosing,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Session has been closed.\r\n\t\t/// </summary>\r\n\t\tClosed\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Exception thrown by a Phalanger session manager.\r\n\t/// </summary>\r\n\tpublic sealed class SessionException : Exception\r\n\t{\r\n\t\tinternal SessionException(string message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#region SessionHandler\r\n\r\n\t/// <summary>\r\n\t/// Base abstract class for custom session handlers.\r\n\t/// </summary>\r\n\tpublic abstract class SessionHandler : MarshalByRefObject\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the handler.\r\n\t\t/// </summary>\r\n\t\tpublic abstract string Name { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads variables stored in the session.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The array containing session variables. Can return a <B>null</B> reference.</returns>\r\n\t\t/// <param name=\"context\">A current script context. Can't be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"httpContext\">A current HTTP context. Can't be a <B>null</B> reference.</param>\r\n\t\tinternal protected abstract PhpArray Load(ScriptContext context, HttpContext httpContext);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Persists session variables.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variables\">Session variables to be persisted.</param>\r\n\t\t/// <param name=\"context\">A current script context. Can't be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"httpContext\">A current HTTP context. Can't be a <B>null</B> reference.</param>\r\n\t\tinternal protected abstract void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called immediately before the session is abandoned.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">A current script context. Can't be a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"httpContext\">A current HTTP context. Can't be a <B>null</B> reference.</param>\r\n\t\tinternal protected abstract void Abandoning(ScriptContext context, HttpContext httpContext);\r\n\r\n        /// <summary>\r\n        /// Returns <c>true</c> iff this session handled is able to persist data after session id change.\r\n        /// </summary>\r\n        /// <remarks>E.g. ASP.NET session handler does not.</remarks>\r\n        public virtual bool AllowsSessionIdChange { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Keeps the object living forever.\r\n\t\t/// </summary>\r\n        [System.Security.SecurityCritical]\r\n        public override object InitializeLifetimeService()\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets current session name.\r\n        /// </summary>\r\n        /// <param name=\"request\">Valid request context.</param>\r\n        /// <returns>Session name.</returns>\r\n        public virtual string GetSessionName(RequestContext/*!*/request)\r\n        {\r\n            return AspNetSessionHandler.AspNetSessionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets new session name.\r\n        /// </summary>\r\n        /// <param name=\"request\">Valid request context.</param>\r\n        /// <param name=\"name\">New session name.</param>\r\n        /// <returns>Whether session name was changed successfully.</returns>\r\n        public virtual bool SetSessionName(RequestContext/*!*/request, string name)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Notice);\r\n            return false;\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region AspNetSessionHandler\r\n\r\n\t/// <summary>\r\n\t/// Session handler based of ASP.NET sessions.\r\n\t/// </summary>\r\n\tpublic sealed class AspNetSessionHandler : SessionHandler\r\n\t{\r\n\t\tprivate AspNetSessionHandler() { }\r\n\r\n        #region AspNetSessionName\r\n\r\n        public static string AspNetSessionName { get { return _aspNetSessionNmame ?? (_aspNetSessionNmame = GetSessionIdCookieName()); } }\r\n        private static string _aspNetSessionNmame = null;\r\n\r\n        private static string GetSessionIdCookieName()\r\n        {\r\n            var section = WebConfigurationManager.GetSection(\"system.web/sessionState\") as SessionStateSection;\r\n            return (section != null) ? section.CookieName : \"ASP.NET_SessionId\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        public const string PhpNetSessionVars = \"Phalanger.SessionVars\";\r\n\t\tinternal const string DummySessionItem = \"Phalanger_DummySessionKeepAliveItem(\\uffff)\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton instance.\r\n\t\t/// </summary>\r\n\t\tpublic static readonly AspNetSessionHandler Default = new AspNetSessionHandler();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a string representation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The name of the handler.</returns>\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the handler used in the configuration.\r\n\t\t/// </summary>\r\n\t\tpublic override string Name\r\n\t\t{\r\n\t\t\tget { return \"aspnet\"; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads variables from ASP.NET session to an array.\r\n\t\t/// </summary>\r\n\t\tinternal protected override PhpArray Load(ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tHttpSessionState state = httpContext.Session;\r\n            \r\n\t\t\tPhpArray result = null;\r\n\r\n            if (state.Mode == SessionStateMode.InProc)\r\n\t\t\t{\r\n\t\t\t\tresult = new PhpArray();\r\n\r\n\t\t\t\tforeach (string name in state)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[name] = state[name];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontext.AcquireArray(result);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                byte[] data = state[PhpNetSessionVars] as byte[];\r\n\r\n\t\t\t\tif (data != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tMemoryStream stream = new MemoryStream(data);\r\n\t\t\t\t\tBinaryFormatter formatter = new BinaryFormatter(null,\r\n\t\t\t\t\t\tnew StreamingContext(StreamingContextStates.Persistence));\r\n\r\n\t\t\t\t\tresult = formatter.Deserialize(stream) as PhpArray;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn (result != null) ? result : new PhpArray();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores session variables to ASP.NET session.\r\n\t\t/// </summary>\r\n\t\tinternal protected override void Persist(PhpArray variables, ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\t\t\tHttpSessionState state = httpContext.Session;\r\n\r\n            if (state.Mode == SessionStateMode.InProc)\r\n\t\t\t{\r\n                context.ReleaseArray(variables);\r\n\r\n                // removes all items (some could be changed or removed in PHP):\r\n                // TODO: some session variables could be added in ASP.NET application\r\n                state.Clear();\r\n                \r\n                // populates session collection from variables:\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in variables)\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips resources:\r\n\t\t\t\t\tif (!(entry.Value is PhpResource))\r\n\t\t\t\t\t\tstate.Add(entry.Key.ToString(), entry.Value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// if the session is maintained out-of-process, serialize the entire $_SESSION autoglobal\r\n\t\t\t\tMemoryStream stream = new MemoryStream();\r\n\t\t\t\tBinaryFormatter formatter = new BinaryFormatter(null,\r\n\t\t\t\t\tnew StreamingContext(StreamingContextStates.Persistence));\r\n\r\n\t\t\t\tformatter.Serialize(stream, variables);\r\n\r\n\t\t\t\t// add the serialized $_SESSION to ASP.NET session:\r\n                state[PhpNetSessionVars] = stream.ToArray();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called immediately before the session is abandoned.\r\n\t\t/// </summary>\r\n\t\tinternal protected override void Abandoning(ScriptContext context, HttpContext httpContext)\r\n\t\t{\r\n\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// ASP.NET session handler won't persist data if session id has been changed. New session will be created.\r\n        /// </summary>\r\n        public override bool AllowsSessionIdChange { get { return false; } }\r\n\r\n        /// <summary>\r\n\t\t/// Gets session cookie associated with a specified HTTP context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">The context.</param>\r\n\t\t/// <returns>The cookie.</returns>\r\n\t\tpublic static HttpCookie GetCookie(HttpContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null) throw new ArgumentNullException(\"context\");\r\n\r\n\t\t\t// no cookies available:\r\n\t\t\tif (context.Session == null || context.Session.IsCookieless) return null;\r\n\r\n\t\t\t// gets cookie from request:\r\n\t\t\treturn context.Request.Cookies[AspNetSessionName];\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SessionHandlers\r\n\r\n\t/// <summary>\r\n\t/// Maintains known session handler set.\r\n\t/// </summary>\r\n\t/// <threadsafety static=\"true\"/>\r\n\tpublic sealed class SessionHandlers\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Registered handlers.\r\n\t\t/// </summary>\r\n        private static Dictionary<string, SessionHandler>/*!!*/handlers;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes static list of handlers to contain an ASP.NET handler.\r\n\t\t/// </summary>\r\n\t\tstatic SessionHandlers()\r\n\t\t{\r\n            handlers = new Dictionary<string, SessionHandler>(3);\r\n\t\t\tRegisterHandler(AspNetSessionHandler.Default);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registeres a new session handler.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handler\">The handler.</param>\r\n\t\t/// <returns>Whether handler has been successfuly registered. Two handlers with the same names can't be registered.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"handler\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static bool RegisterHandler(SessionHandler handler)\r\n\t\t{\r\n\t\t\tif (handler == null) throw new ArgumentNullException(\"handler\");\r\n\t\t\tif (handler.Name == null) return false;\r\n\r\n\t\t\tlock (handlers)\r\n\t\t\t{\r\n\t\t\t\tif (handlers.ContainsKey(handler.Name))\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\thandlers.Add(handler.Name, handler);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a session handler by specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the handler.</param>\r\n\t\t/// <returns>The handler or <B>null</B> reference if such handler has not been registered.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"name\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static SessionHandler GetHandler(string name)\r\n\t\t{\r\n\t\t\tif (name == null) throw new ArgumentNullException(\"name\");\r\n\r\n\t\t\tSessionHandler value;\r\n            lock (handlers)\r\n                handlers.TryGetValue(name, out value);\r\n\r\n            return value;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/SimpleCompiler.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Web;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Threading;\r\nusing PHP.Core;\r\nusing PHP;\r\n\r\n/*\r\n  \r\n  Designed by ...\r\n  Implemented by ...\r\n  \r\n*/\r\n\r\nnamespace PHP.Core\r\n{ /// <summary>\r\n\t/// PHP source code compiler\r\n\t/// </summary>\r\n\tpublic class SimpleCompiler\r\n\t{\r\n\t\tpublic SimpleCompiler() { }\r\n\r\n\t\tpublic void Reset() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Emits constructors.\r\n\t\t/// </summary>\r\n\t\tprivate void EmitPageConstructors(TypeBuilder type)\r\n\t\t{\r\n\t\t\tConstructorBuilder ctor;\r\n\t\t\t//      ILGenerator il;\r\n\t\t\tConstructorInfo ci;\r\n\r\n\t\t\t//public instance void .ctor()\r\n\t\t\t//{\r\n\t\t\t//  ldarg.0\r\n\t\t\t//  call instance void [PhpNetCore]PHP.Core.PhpPage::.ctor()\r\n\t\t\t//  ret\r\n\t\t\t//} \r\n\r\n\t\t\tctor = type.DefineDefaultConstructor(MethodAttributes.Public);\r\n\r\n\t\t\tci = typeof(PhpPage).GetConstructor(\r\n\t\t\t  BindingFlags.NonPublic | BindingFlags.Instance, // flags: instance family    \r\n\t\t\t  null,                                           // binder\r\n\t\t\t  new Type[] { },                                  // params\r\n\t\t\t  null);                                          // modifiers\r\n\r\n\t\t\t/* obsolete\r\n\t\t\t//public instance void .ctor(class [PhpNetCore]PHP.Core.ConfigurationRecord)\r\n\t\t\t//{\r\n\t\t\t//  ldarg.0\r\n\t\t\t//  ldarg.1\r\n\t\t\t//  call instance void [PhpNetCore]PHP.Core.PhpPage::.ctor(class [PhpNetCore]PHP.Core.ConfigurationRecord)\r\n\t\t\t//  ret\r\n\t\t\t//} \r\n\r\n\t\t\tctor = type.DefineConstructor(\r\n\t\t\t  MethodAttributes.Public,                         // flags\r\n\t\t\t  CallingConventions.Standard,                     // calling convention\r\n\t\t\t  new Type[] {typeof(ConfigurationRecord)});       // params\r\n      \r\n\t\t\tci = typeof(PhpPage).GetConstructor(\r\n\t\t\t  BindingFlags.NonPublic | BindingFlags.Instance,  // flags: instance family    \r\n\t\t\t  null,                                            // binder\r\n\t\t\t  new Type[] {typeof(ConfigurationRecord)},        // params\r\n\t\t\t  null);                                           // modifiers\r\n      \r\n\t\t\til = ctor.GetILGenerator();\r\n\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\t\t\til.Emit(OpCodes.Call,ci);\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t*/\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"module\"></param>\r\n\t\t/// <param name=\"sourceFilePath\"></param>\r\n\t\tpublic void GeneratePageClass(ModuleBuilder module, string sourceFilePath)\r\n\t\t{\r\n\t\t\tILGenerator il;\r\n\t\t\t//      ParsedScript script = (ParsedScript)context.Scripts[sourceFilePath];\r\n\r\n\t\t\t// Defines the page class:\r\n\t\t\tTypeBuilder type = module.DefineType(\r\n\t\t\t  \"PhpNetPage\",\r\n\t\t\t  TypeAttributes.Public | TypeAttributes.Class,\r\n\t\t\t  typeof(PhpPage));\r\n\r\n\t\t\t// Emits constructors:\r\n\t\t\tEmitPageConstructors(type);\r\n\r\n\t\t\t// Declares protected override void IntitializeGlobals() method:\r\n\t\t\tMethodBuilder method_InitializeGlobals = type.DefineMethod(\r\n\t\t\t  \"InitializeGlobals\",\r\n\t\t\t  MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig,\r\n\t\t\t  null,\r\n\t\t\t  null);\r\n\r\n\t\t\til = method_InitializeGlobals.GetILGenerator();\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t// Declares public override object Main(<ref global code vars>) method:\r\n\t\t\tMethodBuilder method_Main1 = type.DefineMethod(\r\n\t\t\t  \"Main\",\r\n\t\t\t  MethodAttributes.Public | MethodAttributes.HideBySig,\r\n\t\t\t  typeof(object),\r\n\t\t\t  null);\r\n\r\n\t\t\til = method_Main1.GetILGenerator();\r\n\r\n\t\t\tDebug.Write(\"Loading PhpNetClassLibrary.dll ... \");\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tAssemblyName assembly_name = new AssemblyName();\r\n\t\t\t\tassembly_name.Name = \"PhpNetClassLibrary\";\r\n\t\t\t\tassembly_name.SetPublicKeyToken(new byte[] { 0x4a, 0xf3, 0x7a, 0xfe, 0x3c, 0xde, 0x05, 0xfb });\r\n\t\t\t\tassembly_name.CultureInfo = new System.Globalization.CultureInfo(\"\");\r\n\t\t\t\tassembly_name.Version = new Version(1, 0, 0, 0);\r\n\r\n\t\t\t\tAssembly ass = Assembly.Load(assembly_name);\r\n\t\t\t\tDebug.WriteLine(\"OK.\");\r\n\t\t\t\tDebug.WriteLine(ass);\r\n\r\n\t\t\t\tDebug.Write(\"Searching for method PHP.PhpArray.Fill ... \");\r\n\r\n\t\t\t\tType t = ass.GetType(\"PHP.PhpArrays\");\r\n\t\t\t\tMethodInfo mi = t.GetMethod(\"Fill\", BindingFlags.Static | BindingFlags.Public);\r\n\t\t\t\tDebug.WriteLine(\"OK.\");\r\n\t\t\t\tDebug.WriteLine(mi);\r\n\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_1);\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4_0);\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Call, mi);\r\n\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"Exception: \" + e);\r\n\t\t\t}\r\n\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Ldfld, typeof(PhpPage).GetField(\"context\", BindingFlags.Instance | BindingFlags.NonPublic));\r\n\t\t\til.Emit(OpCodes.Callvirt, typeof(ScriptContext).GetMethod(\"get_Output\"));\r\n\t\t\til.Emit(OpCodes.Ldstr, \"This is \" + sourceFilePath);\r\n\t\t\til.Emit(OpCodes.Callvirt, typeof(TextWriter).GetMethod(\"Write\", new Type[] { typeof(string) }));\r\n\r\n\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t// Declares protected override void Main() method:\r\n\t\t\tMethodBuilder method_Main2 = type.DefineMethod(\r\n\t\t\t  \"Main\",\r\n\t\t\t  MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig,\r\n\t\t\t  null,\r\n\t\t\t  null);\r\n\r\n\t\t\til = method_Main2.GetILGenerator();\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Call, method_Main1);\r\n\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t// Creates the page class:\r\n\t\t\ttype.CreateType();\r\n\t\t}\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core/StackTrace.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing PHP.Core.Reflection;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Reflection.Emit;\r\nusing System.IO;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Kinds of a stack frame.\r\n\t/// </summary>\r\n\tinternal enum FrameKinds\r\n\t{\r\n\t\tInvisible,\r\n\t\tVisible,\r\n\t\tClassLibraryFunction,\r\n        Main,\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a PHP stack frame.\r\n\t/// </summary>\r\n    [DebuggerNonUserCode]\r\n    public sealed class PhpStackFrame\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the frame (name of the PHP function, PHP method or class library function).\r\n\t\t/// </summary>\r\n\t\tpublic string Name { get { return name; } }\r\n\t\tprivate string name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a source line where the thred has left the function/method.\r\n\t\t/// </summary>\r\n\t\tpublic int Line { get { return line; } }\r\n\t\tprivate int line;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a source column where the thred has left the function/method.\r\n\t\t/// </summary>\r\n\t\tpublic int Column { get { return column; } }\r\n\t\tprivate int column;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a source file where the thred has left the function/method.\r\n\t\t/// </summary>\r\n\t\tpublic string File { get { return file; } }\r\n\t\tprivate string file;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets CLR frame.\r\n\t\t/// </summary>\r\n\t\tpublic StackFrame Frame { get { return frame; } }\r\n\t\tprivate StackFrame frame;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a frame belongs to a class library function.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsLibraryFunction { get { return kind == FrameKinds.ClassLibraryFunction; } }\r\n\r\n\t\tprivate FrameKinds kind;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the frame represents a PHP method.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsMethod\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tType rt;\r\n\t\t\t\treturn kind != FrameKinds.ClassLibraryFunction && \r\n\t\t\t\t\t(rt = frame.GetMethod().DeclaringType) != null &&\r\n\t\t\t\t\tPhpType.IsPhpRealType(rt);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether debug information (line, column, file) is known for the frame.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasDebugInfo { get { return line > 0; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a PHP operator (either \"::\" or \"->\") used for accessing a PHP method of the frame.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// If the frame is representing a function \"::\" is returned.\r\n\t\t/// </remarks>\r\n\t\tpublic string Operator\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn frame.GetMethod().IsStatic ? \"::\" : \"->\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a declaring type of the method/function associated with the frame. Non-null.\r\n\t\t/// </summary>\r\n\t\tpublic Type DeclaringType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn frame.GetMethod().DeclaringType;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the declaring type of the PHP method (or function) represented by the frame. \r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns only valid part of m-decl types.\r\n\t\t/// </remarks>\r\n\t\tpublic string DeclaringTypeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_declaringTypeName == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tType type = DeclaringType;\r\n\t\t\t\t\t_declaringTypeName = (type != null) ? DTypeDesc.GetFullName(type, new StringBuilder()).ToString() : null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn _declaringTypeName;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate string _declaringTypeName = null;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction (stack trace)\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new PHP stack frame.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <param name=\"frame\">The respective CLR frame.</param>\r\n\t\t/// <param name=\"kind\">A kind of the frame.</param>\r\n\t\tinternal PhpStackFrame(ScriptContext/*!*/ context, StackFrame/*!*/ frame, FrameKinds kind)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null && frame != null && kind != FrameKinds.Invisible);\r\n\r\n\t\t\tthis.frame = frame;\r\n\t\t\tthis.kind = kind;\r\n\r\n\t\t\tMethodBase method = frame.GetMethod();\r\n\r\n\t\t\tif (kind == FrameKinds.ClassLibraryFunction)\r\n\t\t\t{\r\n\t\t\t\tthis.name = ImplementsFunctionAttribute.Reflect(method).Name;\r\n\r\n\t\t\t\tSetDebugInfo(frame);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tType type = method.DeclaringType;\r\n\r\n\t\t\t\tint eval_id = TransientAssembly.InvalidEvalId;\r\n\r\n\t\t\t\tif (type != null && context.ApplicationContext.IsTransientRealType(type))\r\n\t\t\t\t{\r\n\t\t\t\t\t// gets [PhpEvalId] attribute defined on the type:\r\n\t\t\t\t\tobject[] attrs = type.GetCustomAttributes(typeof(PhpEvalIdAttribute), false);\r\n\t\t\t\t\teval_id = ((PhpEvalIdAttribute)attrs[0]).Id;\r\n\r\n\t\t\t\t\tErrorStackInfo info = new ErrorStackInfo();\r\n\r\n\t\t\t\t\tPhpStackTrace.FillEvalStackInfo(context, eval_id, ref info, false);\r\n\r\n\t\t\t\t\tthis.line = info.Line;\r\n\t\t\t\t\tthis.column = info.Column;\r\n\t\t\t\t\tthis.file = info.File;\r\n\t\t\t\t\tthis.name = info.Caller;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tSetDebugInfo(frame);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the caller has already been set by FillEvalStackInfo \r\n\t\t\t\t// if it is not an eval main:\r\n\t\t\t\tif (!(eval_id != TransientAssembly.InvalidEvalId && PhpScript.IsScriptType(type) && kind == FrameKinds.Main))\r\n\t\t\t\t{\r\n                    if (this.name == ScriptModule.MainHelperName)\r\n                    {\r\n                        this.name = \"{main}\";\r\n                    }\r\n                    else\r\n                    {\r\n                        int j;\r\n                        PhpScript.ParseMDeclName(method.Name, out this.name, out j);\r\n                    }                    \r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tinternal void SetDebugInfo(PhpStackFrame/*!*/ frame)\r\n\t\t{\r\n\t\t\tthis.line = frame.line;\r\n\t\t\tthis.column = frame.column;\r\n\t\t\tthis.file = frame.file;\r\n\t\t}\r\n\r\n\t\tinternal void SetDebugInfo(StackFrame/*!*/ frame)\r\n\t\t{\r\n\t\t\tthis.line = frame.GetFileLineNumber();\r\n\t\t\tthis.column = frame.GetFileColumnNumber();\r\n\t\t\tthis.file = frame.GetFileName();\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a stack trace containing only those frames visible from PHP.\r\n\t/// </summary>\r\n    [DebuggerNonUserCode]\r\n    public sealed class PhpStackTrace\r\n\t{\r\n\t\tprivate readonly List<PhpStackFrame>/*!*/ frames;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get the <paramref name=\"i\"/>-th frame of the trace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"i\">An index of the frame to get.</param>\r\n\t\t/// <returns>The frame or a <B>null</B> reference if <paramref name=\"i\"/> is out of bounds.</returns>\r\n\t\tpublic PhpStackFrame GetFrame(int i)\r\n\t\t{\r\n\t\t\treturn (i >= 0 || i < frames.Count) ? frames[i] : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the number of frames in the trace.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The number of frames.</returns>\r\n\t\tpublic int GetFrameCount()\r\n\t\t{\r\n\t\t\treturn frames.Count;\r\n\t\t}\r\n\r\n\t\t#region GetFrameKind\r\n\r\n\t\t/// <summary>\r\n\t\t/// Finds out a kind of a CLI frame from the PHP point of view.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"frame\">The CLI frame.</param>\r\n\t\t/// <returns>The kind of the frame.</returns>\r\n\t\tprivate static FrameKinds GetFrameKind(StackFrame/*!*/ frame)\r\n\t\t{\r\n\t\t\tDebug.Assert(frame != null);\r\n\r\n\t\t\tMethodBase method_base = frame.GetMethod();\r\n\r\n\t\t\t// skip CLR ctors and generic methods (we don't emit any):\r\n\t\t\tif (method_base.IsConstructor || method_base.IsGenericMethod)\r\n\t\t\t\treturn FrameKinds.Invisible;\r\n\r\n\t\t\t// skip various stubs (special-name) except for Main helper:\r\n\t\t\tif (method_base.IsSpecialName)\r\n\t\t\t{\r\n\t\t\t\t// main helper in PHP module (script module):\r\n\t\t\t\tif (DRoutineDesc.GetSpecialName(method_base) == ScriptModule.MainHelperName &&\r\n\t\t\t\t\tmethod_base.Module.Assembly.IsDefined(typeof(ScriptAssemblyAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn FrameKinds.Main;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn FrameKinds.Invisible;\r\n\t\t\t}\r\n\r\n\t\t\tMethodInfo method = (MethodInfo)method_base;\r\n\r\n\t\t\tType type = method.DeclaringType;\r\n\r\n\t\t\tif (type != null)\r\n\t\t\t{\r\n\t\t\t\t// methods //\r\n\r\n\t\t\t\tstring ns = type.Namespace;\r\n\r\n\t\t\t\tif (ns != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// skip Core and Extension Manger methods and Dynamic Wrapper Stubs:\r\n\t\t\t\t\tif (ns.StartsWith(Namespaces.Core) || ns == Namespaces.ExtManager || ns == Namespaces.LibraryStubs)\r\n\t\t\t\t\t\treturn FrameKinds.Invisible;\r\n\r\n\t\t\t\t\t// skip Class Library methods including PHP functions and PHP methods (remembering the last function):\r\n\t\t\t\t\tif (ns.StartsWith(Namespaces.Library))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// find out [ImplementsFunction] attributes assigned to the method:\r\n\t\t\t\t\t\tif (method.IsDefined(Emit.Types.ImplementsFunctionAttribute, false))\r\n\t\t\t\t\t\t\treturn FrameKinds.ClassLibraryFunction;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn FrameKinds.Invisible;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn FrameKinds.Visible;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// skip export stubs (and other debugger hidden functions):\r\n\t\t\t\t\tif (method.IsDefined(Emit.Types.DebuggerHiddenAttribute, false))\r\n\t\t\t\t\t\treturn FrameKinds.Invisible;\r\n\r\n\t\t\t\t\treturn FrameKinds.Visible;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// global functions //\r\n\r\n\t\t\t\t// skip functions of ExtSupport (and other global non-PHP functions):\r\n\t\t\t\tif (method.Module.Assembly != DynamicCode.DynamicMethodType.Assembly &&\r\n\t\t\t\t\t!method.Module.Assembly.IsDefined(typeof(DAssemblyAttribute), false))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn FrameKinds.Invisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// transient special names:\r\n\t\t\t\tif (TransientModule.IsSpecialName(method.Name))\r\n\t\t\t\t{\r\n\t\t\t\t\t// main helper is visible as it contains user code:\r\n\t\t\t\t\tif (DRoutineDesc.GetSpecialName(method) == ScriptModule.MainHelperName)\r\n\t\t\t\t\t\treturn FrameKinds.Main;\r\n\r\n\t\t\t\t\treturn FrameKinds.Invisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// skip export stubs (and other debugger hidden functions):\r\n\t\t\t\tif (method.IsDefined(Emit.Types.DebuggerHiddenAttribute, false))\r\n\t\t\t\t\treturn FrameKinds.Invisible;\r\n\r\n                //\r\n\t\t\t\treturn FrameKinds.Visible;\r\n\t\t\t}\r\n\r\n\t\t\t//// global functions (in extensions) are not included in the PHP stack trace:\r\n\t\t\t//if (type==null) return FrameKinds.Invisible;\r\n\r\n\t\t\t//string ns = type.Namespace;\r\n\r\n\t\t\t//// non-PHP user code:\r\n\t\t\t//if (ns == null)\r\n\t\t\t//  return FrameKinds.Visible;\r\n\r\n\t\t\t//// Core, System, and Extension Manger methods are skipped:\r\n\t\t\t//if (ns.StartsWith(Namespaces.Core) || ns.StartsWith(Namespaces.System) || ns == Namespaces.ExtManager) \r\n\t\t\t//  return FrameKinds.Invisible;\r\n\r\n\t\t\t//// skips library stubs:\r\n\t\t\t//if (ns == Namespaces.LibraryStubs) \r\n\t\t\t//  return FrameKinds.Invisible;\r\n\r\n\t\t\t//// methods in user namespace (either generated by Phalanger or written in other .NET language):\r\n\t\t\t//if (ns.StartsWith(Namespaces.User))\r\n\t\t\t//{\r\n\t\t\t//  // skips arg-less stubs (method is not a constructor => it has MethodInfo):\r\n\t\t\t//  if (PhpFunctionUtils.IsArglessStub((MethodInfo)method,null))\r\n\t\t\t//    return FrameKinds.Invisible;\r\n\r\n\t\t\t//  return FrameKinds.UserRoutine;\r\n\t\t\t//}\r\n\r\n\t\t\t//// skip Class Library methods including PHP functions and PHP methods (remembering the last function):\r\n\t\t\t//if (ns.StartsWith(Namespaces.Library))\r\n\t\t\t//{\r\n\t\t\t//  // find out [ImplementsFunction] attributes assigned to the method:\r\n\t\t\t//  if (method.IsDefined(Emit.Types.ImplementsFunctionAttribute,false))\r\n\t\t\t//    return FrameKinds.ClassLibraryFunction; else\r\n\t\t\t//    return FrameKinds.Invisible;\r\n\t\t\t//}\r\n\r\n\t\t\t//// non-PHP user code:\r\n\t\t\t//return FrameKinds.Visible;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a stack trace containing only those frames visible to PHP code.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <param name=\"skipFrames\">The number of frames which will be skipped.</param>\r\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\">The <paramref name=\"skipFrames\"/> parameter is negative.</exception>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"context\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic PhpStackTrace(ScriptContext/*!*/ context, int skipFrames)\r\n\t\t\t: this(context, new StackTrace(skipFrames + 1, true))\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a stack trace containing only those frames visible to PHP code.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">A script context.</param>\r\n\t\t/// <param name=\"clrTrace\">CLR stack trace.</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"context\"/> or <paramref name=\"clrTrace\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic PhpStackTrace(ScriptContext/*!*/ context, StackTrace/*!*/ clrTrace)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\t\t\tif (clrTrace == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"trace\");\r\n\r\n\t\t\tthis.frames = new List<PhpStackFrame>(clrTrace.FrameCount);\r\n\r\n\t\t\tfor (int i = 0; i < clrTrace.FrameCount; i++)\r\n\t\t\t{\r\n\t\t\t\tStackFrame frame = clrTrace.GetFrame(i);\r\n\t\t\t\tFrameKinds kind = GetFrameKind(frame);\r\n\r\n                if (kind != FrameKinds.Invisible)\r\n                {\r\n                    frames.Add(new PhpStackFrame(context, frame, kind));\r\n                }\r\n                else\r\n                {\r\n                    // stop probing the stack trace once we reach RequestHandler\r\n                    if (frame.GetMethod().DeclaringType == typeof(RequestHandler))\r\n                        break;\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region TraceErrorFrame\r\n\r\n\t\t/// <summary>\r\n\t\t/// Traces up the stack frame containing the method call that has caused an error.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Found stack info.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Starts with a frame of a calling method and ends with the first frame belonging to user routine.\r\n\t\t/// If there was <see cref=\"ImplementsFunctionAttribute\"/> found during the walk the last one's value\r\n\t\t/// is considered as the caller.\r\n\t\t/// If there was not such attribute found (error occured in an operator, directly in the code etc.) \r\n\t\t/// the last inspected method's debug info is returned.\r\n\t\t/// If the trace ends up with a function or method inside transient assembly an eval hierarchy is inspected\r\n\t\t/// and added to the resulting source position information.\r\n\t\t/// </remarks>\r\n\t\tinternal static ErrorStackInfo TraceErrorFrame(ScriptContext/*!*/ context, bool lazy)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null);\r\n\r\n\t\t\tErrorStackInfo result = new ErrorStackInfo();\r\n\t\t\tint cl_function_idx = -1;\r\n\t\t\tstring cl_function_name = null;\r\n\t\t\tStackFrame frame;\r\n\t\t\tint eval_id = TransientAssembly.InvalidEvalId;\r\n\r\n\t\t\t// stack trace without debug info is constructed:\r\n#if !SILVERLIGHT\r\n\t\t\tStackTrace trace = new StackTrace(1, false);\r\n\r\n\t\t\t// note: method stack frame contains a debug info about the call to the callee\r\n\t\t\t// hence if we find a method that reported the error we should look the next frame \r\n\t\t\t// to obtain a debug info\r\n\r\n\t\t\tint i = 0;\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\t// gets frame:\r\n\t\t\t\tframe = trace.GetFrame(i++);\r\n\r\n\t\t\t\t// error has been thrown directly by Core without intermediary user code (all frames are invisible):\r\n\t\t\t\tif (frame == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// cl_function_idx can be non-minus-one here because a callback can be called directly from Core \r\n\t\t\t\t\t// (e.g. output buffer filter targeting class library function):\r\n\t\t\t\t\tif (cl_function_idx != -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult.Caller = cl_function_name;\r\n\t\t\t\t\t\tresult.LibraryCaller = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\r\n        MethodBase method = frame.GetMethod();\r\n\t\t\t  if (lazy)\r\n\t\t\t  {\r\n          if(method.Name == \"Throw\" && method.DeclaringType == typeof (PhpException))\r\n\t\t\t      lazy = false;\r\n          continue;\r\n\t\t\t  }\r\n\r\n        FrameKinds frame_kind = GetFrameKind(frame);\r\n\r\n\t\t\t\tif (frame_kind == FrameKinds.Visible || frame_kind == FrameKinds.Main)\r\n\t\t\t\t{\r\n\t\t\t\t\tint eid = TransientModule.GetEvalId(context.ApplicationContext, method);\r\n\r\n\t\t\t\t\tif (eval_id == TransientAssembly.InvalidEvalId)\r\n\t\t\t\t\t\teval_id = eid;\r\n\r\n\t\t\t\t\tif (eid == TransientAssembly.InvalidEvalId)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (frame_kind == FrameKinds.ClassLibraryFunction)\r\n\t\t\t\t{\r\n\t\t\t\t\tcl_function_idx = i;\r\n\t\t\t\t\tcl_function_name = ImplementsFunctionAttribute.Reflect(method).Name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// skips i frames (the very first frame has been skipped in the previous \r\n\t\t\t// trace construction and we want to skip i-1 frames from that trace => i frames totally):\r\n\t\t\tframe = new StackFrame(1 + i - 1, true);\r\n\r\n\t\t\t// extracts a source info (file & position):\r\n\t\t\tif (eval_id != TransientAssembly.InvalidEvalId)\r\n\t\t\t{\r\n\t\t\t\tFillEvalStackInfo(context, eval_id, ref result, false);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tresult.Line = frame.GetFileLineNumber();\r\n\t\t\t\tresult.Column = frame.GetFileColumnNumber();\r\n\t\t\t\tresult.File = frame.GetFileName();\r\n\t\t\t}\r\n\r\n\t\t\t// determines a caller (either a library function or a user function/method):\r\n\t\t\tif (cl_function_idx >= 0)\r\n\t\t\t{\r\n\t\t\t\tresult.Caller = cl_function_name;\r\n\t\t\t\tresult.LibraryCaller = true;\r\n\t\t\t}\r\n\t\t\t//else\r\n\t\t\t//{\r\n\t\t\t//  MethodBase method = frame.GetMethod();\r\n\t\t\t//  Type type = method.DeclaringType;\r\n\r\n\t\t\t//  // the caller has already been set by FillEvalStackInfo \r\n\t\t\t//  // if we are in eval and the function is Main helper of the script type:\r\n\t\t\t//  if (eval_id == TransientAssembly.InvalidEvalId)\r\n\t\t\t//  {\r\n\t\t\t//    result.LibraryCaller = false;\r\n\r\n\t\t\t//    if (type != null)\r\n\t\t\t//    {\r\n\t\t\t//      result.Caller = String.Concat(DTypeDesc.MakeFullName(type), \"::\", DRoutineDesc.MakeFullName(method));\r\n\t\t\t//    }\r\n\t\t\t//    else\r\n\t\t\t//    {\r\n\t\t\t//      result.Caller = DRoutineDesc.MakeFullName(method);\r\n\t\t\t//    }  \r\n\t\t\t//  } \r\n\t\t\t//}\r\n#endif\r\n\r\n            // add missing info about file and line\r\n            context.LastErrorLine = result.Line;\r\n            context.LastErrorFile = result.File;\r\n\r\n            //\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Eval related\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fills an instance of <see cref=\"ErrorStackInfo\"/> with information gathered from eval transient debug info.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Script context.</param>\r\n\t\t/// <param name=\"evalId\">An id of the inner-most eval where an error occured.</param>\r\n\t\t/// <param name=\"result\">The resulting error stack info.</param>\r\n\t\t/// <param name=\"html\">Whether the message is used in HTML.</param>\r\n\t\tinternal static void FillEvalStackInfo(ScriptContext/*!*/ context, int evalId, ref ErrorStackInfo result, bool html)\r\n\t\t{\r\n\t\t\tDebug.Assert(context != null);\r\n\r\n\t\t\tFullPath source_root = Configuration.Application.Compiler.SourceRoot;\r\n\r\n\t\t\t// stack info about the error position (with respect to inner most eval):\r\n\t\t\tresult.Line = context.EvalLine;\r\n\t\t\tresult.Column = context.EvalColumn;\r\n\t\t\tresult.Caller = \"<error>\";\r\n\t\t\tresult.File = null;\r\n\r\n\t\t\tList<ErrorStackInfo> infos = new List<ErrorStackInfo>();\r\n\t\t\tinfos.Add(result);\r\n\r\n\t\t\t// fills \"infos\" with full eval error trace:\r\n\t\t\tcontext.ApplicationContext.TransientAssemblyBuilder.TransientAssembly.GetEvalFullTrace(evalId, infos);\r\n\r\n\t\t\tDebug.WriteLine(\"EVAL ERROR\", \"\");\r\n\t\t\tforeach (ErrorStackInfo info in infos)\r\n\t\t\t{\r\n\t\t\t\tDebug.WriteLine(\"EVAL ERROR\", \"info: {0}({1})\", info.File, info.Line, info.Caller);\r\n\t\t\t}\r\n\r\n\t\t\t// hides transparent evals and modifies the others accordingly:\r\n\t\t\tHideTransparentEvals(infos);\r\n\r\n\t\t\t// refresh inner most error info:\r\n\t\t\tresult = infos[0];\r\n\t\t\tresult.File = EvalTraceToFileName(infos, source_root, html);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Modifies a specified eval trace such that all transparent evals get hidden.\r\n\t\t/// The others will have updated line numbers.\r\n\t\t/// </summary>\r\n\t\tprivate static void HideTransparentEvals(List<ErrorStackInfo>/*!*/ trace)\r\n\t\t{\r\n\t\t\tint add_line = 0;\r\n\r\n\t\t\tfor (int i = trace.Count - 1; i >= 0; i--)\r\n\t\t\t{\r\n\t\t\t\tErrorStackInfo info = trace[i];\r\n\r\n\t\t\t\tif (info.Caller == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips the frame if there is no debug info:\r\n\t\t\t\t\tif (info.Line > 0)\r\n\t\t\t\t\t\tadd_line += info.Line - 1;\r\n\t\t\t\t}\r\n\t\t\t\telse if (add_line > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// skips the frame if there is no debug info:\r\n\t\t\t\t\tif (info.Line > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinfo.Line += add_line;\r\n\t\t\t\t\t\t// replace struct:\r\n\t\t\t\t\t\ttrace[i] = info;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tadd_line = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Assert(add_line == 0);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Extracts debug information from an eval trace and returns it in a form of extended file name:\r\n\t\t/// {full canonical file name of the inner most eval source file} \r\n\t\t/// { inside {eval|assert|...|run-time funcion} (on line #, column #) }*\r\n\t\t/// </summary>\r\n\t\tprivate static string EvalTraceToFileName(List<ErrorStackInfo>/*!*/ trace, string sourceRoot, bool html)\r\n\t\t{\r\n\t\t\tStringBuilder sb = new StringBuilder();\r\n\r\n\t\t\tfor (int i = trace.Count - 1; i > 0; i--)\r\n\t\t\t{\r\n\t\t\t\tErrorStackInfo info = trace[i];\r\n\r\n\t\t\t\tif (sb.Length == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(Path.GetFullPath(Path.Combine(sourceRoot, info.File)));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (info.Caller != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.Append(' ');\r\n\r\n\t\t\t\t\tif (info.Line >= 0 && info.Column >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsb.Append(CoreResources.GetString(html ? \"error_message_html_eval_debug\" : \"error_message_plain_eval_debug\",\r\n\t\t\t\t\t\t\tinfo.Caller, info.Line, info.Column));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsb.Append(CoreResources.GetString(html ? \"error_message_html_eval\" : \"error_message_plain_eval\",\r\n\t\t\t\t\t\t\tinfo.Caller));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn sb.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region GetClassContext\r\n\r\n\t\t/// <summary>\r\n\t\t/// Traces the calling stack to discover current PHP class context.\r\n\t\t/// </summary>\r\n\t\t/// <returns><see cref=\"Type\"/> of the PHP class that represents current class context for this thread or\r\n\t\t/// <B>null</B> if this thread is executing in a function or startup Main context.</returns>\r\n\t\tpublic static DTypeDesc GetClassContext()\r\n\t\t{\r\n\t\t\t// SILVERLIGHT: Todo Todo .. ? what to do here ?\r\n#if !SILVERLIGHT\r\n\t\t\tStackTrace stack_trace = new StackTrace(1);\r\n\t\t\tint frame_count = stack_trace.FrameCount;\r\n\r\n\t\t\tfor (int i = 0; i < frame_count; i++)\r\n\t\t\t{\r\n\t\t\t\tStackFrame stack_frame = stack_trace.GetFrame(i);\r\n\r\n\t\t\t\tMethodBase method = stack_frame.GetMethod();\r\n\t\t\t\tType type = method.DeclaringType;\r\n\t\t\t\tif (type != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (PhpType.IsPhpRealType(type)) return DTypeDesc.Create(type);\r\n\r\n\t\t\t\t\tMethodInfo minfo = method as MethodInfo;\r\n\t\t\t\t\tif (minfo != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tParameterInfo[] parameters = minfo.GetParameters();\r\n\t\t\t\t\t\tif (!PhpFunctionUtils.IsArglessStub(minfo, parameters) &&\r\n\t\t\t\t\t\t\tPhpScript.IsScriptType(minfo.DeclaringType) && !PhpScript.IsMainHelper(minfo, parameters))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// if the method is a helper method (Main, an arg-less overload, a constructor, etc.),\r\n\t\t\t\t\t\t// continue with the trace\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n#endif\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region User Trace Formatting\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns array containing current stack state. Each item is an array representing one stack frame.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The stack trace.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The resulting array contains the following items (their keys are stated):\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <item><c>\"file\"</c> - a source file where the function/method has been called</item>\r\n\t\t/// <item><c>\"line\"</c> - a line in a source code where the function/method has been called</item>\r\n\t\t/// <item><c>\"column\"</c> - a column in a source code where the function/method has been called</item>\r\n\t\t/// <item><c>\"function\"</c> - a name of the function/method</item> \r\n\t\t/// <item><c>\"class\"</c> - a name of a class where the method is declared (if any)</item>\r\n\t\t/// <item><c>\"type\"</c> - either \"::\" for static methods or \"->\" for instance methods</item>\r\n\t\t/// </list>\r\n\t\t/// Unsupported items:\r\n\t\t/// <list type=\"bullet\">\r\n\t\t/// <item><c>\"args\"</c> - routine arguments</item>\r\n\t\t/// <item><c>\"object\"</c> - target instance of the method invocation</item>\r\n\t\t/// </list>\r\n\t\t/// </remarks>\r\n\t\tpublic PhpArray GetUserTrace()\r\n\t\t{\r\n\t\t\tint i = GetFrameCount() - 1;\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\tif (i >= 1)\r\n\t\t\t{\r\n\t\t\t\tPhpStackFrame info_frame = GetFrame(i--);\r\n\r\n\t\t\t\twhile (i >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStackFrame frame = GetFrame(i);\r\n\t\t\t\t\tPhpArray item = new PhpArray();\r\n\r\n\t\t\t\t\t// debug info may be unknown in the case of transient code:\r\n\t\t\t\t\tif (info_frame.Line > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[\"line\"] = info_frame.Line;\r\n\t\t\t\t\t\titem[\"column\"] = info_frame.Column;\r\n\t\t\t\t\t}\r\n\t\t\t\t\titem[\"file\"] = info_frame.File;\r\n\r\n\t\t\t\t\titem[\"function\"] = frame.Name;\r\n\t\t\t\t\tif (frame.IsMethod)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[\"class\"] = frame.DeclaringTypeName;\r\n\t\t\t\t\t\titem[\"type\"] = frame.Operator;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresult.Prepend(i, item);\r\n\r\n\t\t\t\t\tif (frame.HasDebugInfo)\r\n\t\t\t\t\t\tinfo_frame = frame;\r\n\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Formats a trace to user string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"trace\">An array containing the user trace.</param>\r\n\t\t/// <returns>The formatted trace.</returns>\r\n\t\tpublic static string FormatUserTrace(PhpArray/*!*/ trace)\r\n\t\t{\r\n\t\t\tif (trace == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"trace\");\r\n\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\r\n\t\t\tforeach (KeyValuePair<IntStringKey, object> entry in trace)\r\n\t\t\t{\r\n\t\t\t\tPhpArray frame = entry.Value as PhpArray;\r\n\t\t\t\tif (frame != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tint line = Convert.ObjectToInteger(frame[\"line\"]);\r\n\t\t\t\t\tint column = Convert.ObjectToInteger(frame[\"column\"]);\r\n\r\n                    result.AppendFormat(\"#{0} {1}{2}: {3}{4}\\n\",\r\n\t\t\t\t\t  entry.Key.Object,\r\n\t\t\t\t\t  Convert.ObjectToString(frame[\"file\"]),\r\n\t\t\t\t\t  (line > 0 && column > 0) ? String.Format(\"({0},{1})\", line, column) : null,\r\n\t\t\t\t\t  Convert.ObjectToString(frame[\"class\"]) + Convert.ObjectToString(frame[\"type\"]),\r\n\t\t\t\t\t  frame[\"function\"]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n            return result.AppendFormat(\"#{0} {{main}}\", trace.Count).ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Formats a trace to user string.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The formatted trace.</returns>\r\n\t\tpublic string FormatUserTrace()\r\n\t\t{\r\n\t\t\tint i = GetFrameCount() - 1;\r\n\t\t\tStringBuilder result = new StringBuilder(String.Format(\"#{0} {{main}}\", i));\r\n\r\n\t\t\tif (i >= 1)\r\n\t\t\t{\r\n\t\t\t\tPhpStackFrame info_frame = GetFrame(i--);\r\n\r\n\t\t\t\twhile (i >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpStackFrame frame = GetFrame(i);\r\n\r\n\t\t\t\t\tresult.Insert(0, String.Format(\"#{0} {1}{2}: {3}{4}\\n\",\r\n\t\t\t\t\t  i,\r\n\t\t\t\t\t  info_frame.File,\r\n\t\t\t\t\t  (info_frame.Line > 0) ? String.Format(\"({0},{1})\", info_frame.Line, info_frame.Column) : null,\r\n\t\t\t\t\t  (frame.IsMethod) ? frame.DeclaringTypeName + frame.Operator : null,\r\n\t\t\t\t\t  frame.Name));\r\n\r\n\t\t\t\t\tif (frame.HasDebugInfo)\r\n\t\t\t\t\t\tinfo_frame = frame;\r\n\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/Statistics.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing PHP.Core.Reflection;\r\nusing System.CodeDom.Compiler;\r\n\r\nnamespace PHP.Core\r\n{\r\n\tpublic sealed partial class Statistics\r\n\t{\r\n\t\t#region Inclusions\r\n\r\n\t\tpublic static bool DrawGraph = false;\r\n\r\n\t\tinternal struct Inclusions\r\n\t\t{\r\n\t\t\tprivate static IndentedTextWriter output;\r\n\t\t\tprivate static Dictionary<SourceUnit, int> sourceUnits;\r\n\t\t\tprivate static int nodeId;\r\n\t\t\tprivate static int edgeId;\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void InitializeGraph()\r\n\t\t\t{\r\n\t\t\t\tif (!DrawGraph) return;\r\n\r\n\t\t\t\toutput = new IndentedTextWriter(new StreamWriter(\"C:\\\\Inclusions.dot\"), \"  \");\r\n\t\t\t\tsourceUnits = new Dictionary<SourceUnit, int>();\r\n\t\t\t\tnodeId = 1;\r\n\t\t\t\tedgeId = 1;\r\n\r\n\t\t\t\toutput.WriteLine(\"digraph Inclusions\");\r\n\t\t\t\toutput.WriteLine(\"{\");\r\n\t\t\t\toutput.Indent++;\r\n\r\n\t\t\t\toutput.WriteLine(\"node [shape=box];\");\r\n\t\t\t\toutput.WriteLine();\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void AddNode(CompilationUnit/*!*/ compilationUnit)\r\n\t\t\t{\r\n\t\t\t\tif (!DrawGraph) return;\r\n\r\n\t\t\t\tif (compilationUnit is ScriptCompilationUnit)\r\n\t\t\t\t{\r\n\t\t\t\t\tSourceUnit sourceUnit = ((ScriptCompilationUnit)compilationUnit).SourceUnit;\r\n\r\n\t\t\t\t\tint node_id;\r\n\t\t\t\t\tif (!sourceUnits.TryGetValue(sourceUnit, out node_id))\r\n\t\t\t\t\t\tsourceUnits.Add(sourceUnit, node_id = nodeId++);\r\n\r\n\t\t\t\t\toutput.Write(node_id);\r\n\t\t\t\t\toutput.Write(\" [label=\\\"\");\r\n\t\t\t\t\toutput.Write(sourceUnit.SourceFile.RelativePath);\r\n\t\t\t\t\toutput.WriteLine(\"\\\"];\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.Write(-1);\r\n\t\t\t\t\toutput.Write(\" [label=\\\"ReflectedUnit\\\"];\");\r\n\t\t\t\t}\r\n\t\t\t\toutput.Flush();\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void AddEdge(StaticInclusion/*!*/ inclusion)\r\n\t\t\t{\r\n\t\t\t\tif (!DrawGraph) return;\r\n\r\n\t\t\t\toutput.Write(sourceUnits[inclusion.Includer.SourceUnit]);\r\n\t\t\t\toutput.Write(\" -> \");\r\n\t\t\t\tif (inclusion.Includee is ScriptCompilationUnit)\r\n\t\t\t\t\toutput.Write(sourceUnits[((ScriptCompilationUnit)inclusion.Includee).SourceUnit]);\r\n\t\t\t\telse\r\n\t\t\t\t\toutput.Write(\"ReflectedUnit\");\r\n\t\t\t\toutput.Write(\" [label={0}{1}];\", edgeId++, (inclusion.IsConditional) ? \", style=dotted\" : \"\");\r\n\t\t\t\toutput.WriteLine();\r\n\t\t\t\toutput.Flush();\r\n\t\t\t}\r\n\r\n\t\t\t[Conditional(\"DEBUG\")]\r\n\t\t\tpublic static void BakeGraph()\r\n\t\t\t{\r\n\t\t\t\tif (!DrawGraph) return;\r\n\r\n\t\t\t\toutput.Indent--;\r\n\t\t\t\toutput.WriteLine(\"}\");\r\n\t\t\t\toutput.Close();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core/StreamFilters.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Basic Stream Filters\r\n\r\n\t/// <summary>\r\n\t/// Interface encapsulating the stream filtering functionality.\r\n\t/// </summary>\r\n\tpublic interface IFilter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Processes the <paramref name=\"input\"/> (either of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>) \r\n\t\t/// data and returns the filtered data in one of the formats above or <c>null</c>.\r\n\t\t/// </summary>\r\n\t\tobject Filter(object input, bool closing);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the filter is attached to a stream.\r\n\t\t/// </summary>\r\n\t\tvoid OnCreate();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the containig stream is being closed.\r\n\t\t/// </summary>\r\n\t\tvoid OnClose();\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Stream Filter used to convert \\r\\n to \\n when reading a text file.\r\n\t/// </summary>\r\n\tpublic class TextReadFilter : IFilter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Processes the <paramref name=\"input\"/> (either of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>) \r\n\t\t/// data and returns the filtered data in one of the formats above or <c>null</c>.\r\n\t\t/// </summary>\r\n\t\tpublic object Filter(object input, bool closing)\r\n\t\t{\r\n\t\t\tstring str = PhpStream.AsText(input);\r\n\r\n\t\t\tif (pending)\r\n\t\t\t{\r\n\t\t\t\t// Both \\r\\n together make a pair which would consume a pending \\r.\r\n\t\t\t\tif (str.Length == 0) str = \"\\r\";\r\n\t\t\t\telse if (str[0] != '\\n') str.Insert(0, \"\\r\");\r\n\t\t\t}\r\n\r\n\t\t\t// Replace the pair.\r\n\t\t\tstr = str.Replace(\"\\r\\n\", \"\\n\");\r\n\t\t\tif (str.Length == 0) return string.Empty;\r\n\r\n\t\t\t// Check for pending \\r at the end.\r\n\t\t\tpending = str[str.Length - 1] == '\\r';\r\n\r\n\t\t\t// Postpone the resolution of \\r\\n vs. \\r to the next filtering if this is not the last one.\r\n\t\t\tif (!closing && pending) str.Remove(str.Length - 1, 1);\r\n\r\n\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\tbool pending = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the filter is attached to a stream.\r\n\t\t/// </summary>\r\n\t\tpublic void OnCreate() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the containig stream is being closed.\r\n\t\t/// </summary>\r\n\t\tpublic void OnClose() { }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Stream Filter used to convert \\n to \\r\\n when writing to a text file.\r\n\t/// </summary>\r\n\tpublic class TextWriteFilter : IFilter\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Processes the <paramref name=\"input\"/> (either of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>) \r\n\t\t/// data and returns the filtered data in one of the formats above or <c>null</c>.\r\n\t\t/// </summary>\r\n\t\tpublic object Filter(object input, bool closing)\r\n\t\t{\r\n\t\t\tstring str = PhpStream.AsText(input);\r\n\t\t\tstr = str.Replace(\"\\n\", \"\\r\\n\");\r\n\t\t\treturn str;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the filter is attached to a stream.\r\n\t\t/// </summary>\r\n\t\tpublic void OnCreate() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the containig stream is being closed.\r\n\t\t/// </summary>\r\n\t\tpublic void OnClose() { }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Stream Filter Base Classes\r\n\r\n\t#region Filter options\r\n\t/// <summary>\r\n\t/// Indicates whether the filter is to be attached to the\r\n\t/// input/ouput filter-chain or both.\r\n\t/// </summary>\r\n\t[Flags]\r\n\tpublic enum FilterChainOptions\r\n\t{\r\n\t\t/// <summary>Insert the filter to the read filter chain of the stream (1).</summary>\r\n\t\tRead = 0x1,\r\n\t\t/// <summary>Insert the filter to the write filter chain of the stream (2).</summary>\r\n\t\tWrite = 0x2,\r\n\t\t/// <summary>Insert the filter to both the filter chains of the stream (3).</summary>\r\n\t\tReadWrite = Read | Write,\r\n\t\t/// <summary>Prepend the filter to the filter-chain (0x10).</summary>\r\n\t\tHead = 0x10,\r\n\t\t/// <summary>Append the filter to the filter-chain (0x20).</summary>\r\n\t\tTail = 0x20\r\n\t}\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Implementor of this interface provides filter creation.\r\n\t/// </summary>\r\n\tpublic interface IFilterFactory\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Returns the list of filters created by this <see cref=\"IFilterFactory\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The list of implemented filters.</returns>\r\n\t\tstring[] GetImplementedFilterNames();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if a filter is being created by this factory and optionally returns a new instance of this filter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the filter (may contain wildcards).</param>\r\n\t\t/// <param name=\"instantiate\"><c>true</c> to fill <paramref name=\"instance\"/> with a new instance of that filter.</param>\r\n\t\t/// <param name=\"instance\">Filled with a new instance of an implemented filter if <paramref name=\"instantiate\"/>.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters provided to the filter constructor.</param>\r\n\t\t/// <returns><c>true</c> if a filter with the given name was found.</returns>\r\n\t\tbool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Base class for PHP stream filters.\r\n\t/// </summary>\r\n\tpublic abstract class PhpFilter : IFilter\r\n\t{\r\n\t\t#region Filtering methods and properties.\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance of the <see cref=\"PhpFilter\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameters\">The parameters.</param>\r\n\t\tpublic PhpFilter(object parameters)\r\n\t\t{\r\n\t\t\tthis.parameters = parameters;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// The filter name, same as the name used for creating the filter (see GetFilter).\r\n        /// </summary>\r\n        public string FilterName\r\n        {\r\n            get;\r\n            private set;\r\n        }\r\n\r\n\t\t#region IFilter Overrides\r\n\r\n\t\t/// <summary>\r\n\t\t/// Processes the <paramref name=\"input\"/> (either of type <see cref=\"string\"/> or <see cref=\"PhpBytes\"/>) \r\n\t\t/// data and returns the filtered data in one of the formats above or <c>null</c>.\r\n\t\t/// </summary>\r\n\t\tpublic abstract object Filter(object input, bool closing);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the filter is attached to a stream.\r\n\t\t/// </summary>\r\n\t\tpublic void OnCreate() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called when the containig stream is being closed.\r\n\t\t/// </summary>\r\n\t\tpublic void OnClose() { }\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// An additional <c>mixed</c> parameter passed at <c>stream_filter_append/prepend</c>.\r\n\t\t/// </summary>\r\n\t\tprotected readonly object parameters;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Stream Filter Chain Access\r\n\r\n\t\t/// <summary>\r\n\t\t/// Insert the filter into the filter chains.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">Which stream's filter chains.</param>\r\n\t\t/// <param name=\"filter\">What filter.</param>\r\n\t\t/// <param name=\"where\">What position in the chains.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters for the filter.</param>\r\n\t\t/// <returns>True if successful.</returns>\r\n\t\tpublic static bool AddToStream(PhpStream stream, string filter, FilterChainOptions where, object parameters)\r\n\t\t{\r\n\t\t\tPhpFilter readFilter, writeFilter;\r\n\r\n\t\t\tif ((stream.Options & StreamAccessOptions.Read) == 0) where &= ~FilterChainOptions.Read;\r\n\t\t\tif ((stream.Options & StreamAccessOptions.Write) == 0) where &= ~FilterChainOptions.Write;\r\n\r\n\t\t\tif ((where & FilterChainOptions.Read) > 0)\r\n\t\t\t{\r\n\t\t\t\tif (!GetFilter(filter, true, out readFilter, parameters))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_filter_name\", filter));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstream.AddFilter(readFilter, where);\r\n\t\t\t\treadFilter.OnCreate();\r\n\t\t\t\t// Add to chain, (filters buffers too).\r\n\t\t\t}\r\n\r\n\t\t\tif ((where & FilterChainOptions.Write) > 0)\r\n\t\t\t{\r\n\t\t\t\tif (!GetFilter(filter, true, out writeFilter, parameters))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_filter_name\", filter));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstream.AddFilter(writeFilter, where);\r\n\t\t\t\twriteFilter.OnCreate();\r\n\t\t\t\t// Add to chain.\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Implemented Filters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for a filter implementation in the known <see cref=\"PhpFilter\"/> descendants.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The name of the filter (may contain wildcards).</param>\r\n\t\t/// <param name=\"instantiate\"><c>true</c> to fille <paramref name=\"instance\"/> with a new instance of that filter.</param>\r\n\t\t/// <param name=\"instance\">Filled with a new instance of an implemented filter if <paramref name=\"instantiate\"/>.</param>\r\n\t\t/// <param name=\"parameters\">Additional parameters for the filter.</param>\r\n\t\t/// <returns><c>true</c> if a filter with the given name was found.</returns>\r\n\t\tinternal static bool GetFilter(string filter, bool instantiate, out PhpFilter instance, object parameters)\r\n\t\t{\r\n\t\t\tinstance = null;\r\n\r\n\t\t\tforeach (IFilterFactory factory in systemFilters)\r\n                if (factory.GetImplementedFilter(filter, instantiate, out instance, parameters))\r\n                {\r\n                    if (instance != null)\r\n                        instance.FilterName = filter;\r\n\r\n                    return true;\r\n                }\r\n\r\n\t\t\t// Note: the registered filter names may be wildcards - use fnmatch.\r\n\t\t\tif ((UserFilters != null) && (UserFilters.Contains(filter)))\r\n\t\t\t{\r\n\t\t\t\tif (instantiate)\r\n\t\t\t\t{\r\n\t\t\t\t\t// EX: [PhpFilter.GetFilter] create a new user filter; and support the WILDCARD naming too.\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers a user stream filter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filter\">The name of the filter (may contain wildcards).</param>\r\n\t\t/// <param name=\"classname\">The PHP user class (derived from <c>php_user_filter</c>) implementing the filter.</param>\r\n\t\t/// <returns><c>true</c> if the filter was succesfully added, <c>false</c> if the filter of such name already exists.</returns>\r\n\t\tpublic static bool AddUserFilter(string filter, string classname)\r\n\t\t{\r\n\t\t\t// Note: have to check for wildcard conflicts too (?)\r\n\t\t\tPhpFilter instance;\r\n\t\t\tif (GetFilter(filter, false, out instance, null))\r\n\t\t\t{\r\n\t\t\t\t// EX: [PhpFilter.Register] stringtable - filter already exists, check the filter name string?\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Check the given filter for validity?\r\n\r\n\t\t\tUserFilters.Add(filter, classname);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Register a built-in stream filter factory.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"factory\">The filter factory.</param>\r\n\t\t/// <returns><c>true</c> if successfully added.</returns>\r\n\t\tpublic static bool AddSystemFilter(IFilterFactory factory)\r\n\t\t{\r\n\t\t\tPhpFilter instance;\r\n\t\t\tbool ok = true;\r\n\t\t\tforeach (string filter in factory.GetImplementedFilterNames())\r\n\t\t\t\tif (GetFilter(filter, false, out instance, null)) ok = false;\r\n\t\t\tDebug.Assert(ok);\r\n\r\n\t\t\tsystemFilters.Add(factory);\r\n\t\t\treturn ok;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Merges the individual string[] into one PhpArray (numeric keys).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filterList\">List of filter name <see cref=\"string\"/>s.</param>\r\n\t\t/// <param name=\"rv\">Return value loopback (pass <c>null</c> to create new).</param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate static PhpArray MergeFilterNames(ICollection filterList, PhpArray rv)\r\n\t\t{\r\n\t\t\tif (rv == null)\r\n\t\t\t\trv = new PhpArray(8, 0);\r\n\r\n\t\t\tif (filterList != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (string name in filterList)\r\n\t\t\t\t\trv.Add(name);\r\n\t\t\t}\r\n\t\t\treturn rv;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the list of registered filters.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> containing the names of available filters.</returns>\r\n\t\tpublic static PhpArray GetFilterNames()\r\n\t\t{\r\n\t\t\tPhpArray rv = null;\r\n\t\t\tforeach (IFilterFactory factory in systemFilters)\r\n\t\t\t\tMergeFilterNames(factory.GetImplementedFilterNames(), rv);\r\n\r\n\t\t\treturn MergeFilterNames((UserFilters != null) ? UserFilters.Keys : null, rv);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets or sets the collection of user filtername:classname associations.\r\n\t\t/// </summary>\r\n\t\tprivate static Hashtable UserFilters\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn userFilters;\r\n\t\t\t\t// EX: store userfilters in ScriptContext.\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tuserFilters = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>The list of (script-specific) user filters.</summary>\r\n#if SILVERLIGHT\r\n        //TODO: Silverlight doesn't have ThreadStatic, it should be done it in different way... now output is just a normal field\r\n\t\tprivate static Hashtable userFilters = null;// { get { return tsuserFilters.Value; } set { tsuserFilters.Value = value; } }\r\n\t\t//private static ThreadStatic<Hashtable> tsuserFilters = new ThreadStatic<Hashtable>(\"PhpFilter.userFilters\");\r\n\r\n        /// <summary>The list of built-in filters.</summary>\r\n        //TODO: It should be synchronized version of ArrayList here.\r\n        private static ArrayList systemFilters = new ArrayList();\r\n\r\n#else\r\n\t\t[ThreadStatic]\r\n\t\tprivate static Hashtable userFilters = null;\r\n\r\n        /// <summary>The list of built-in filters.</summary>\r\n\t\tprivate static ArrayList systemFilters = ArrayList.Synchronized(new ArrayList());\r\n\r\n#endif\r\n\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/StreamWrappers.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing System.Security.Principal;\r\nusing System.Security.AccessControl;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Abstract Stream Wrapper\r\n\r\n\t/// <summary>\r\n\t/// Abstract base class for PHP stream wrappers. Descendants define \r\n\t/// methods implementing fopen, stat, unlink, rename, opendir, mkdir and rmdir \r\n\t/// for different stream types.\r\n\t/// </summary>\r\n\tpublic abstract partial class StreamWrapper\r\n\t{\r\n\t\t#region Optional Wrapper Operations (Warning)\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Stat\"]/*'/>\r\n        /// <remarks>\r\n\t\t/// <seealso cref=\"StreamStatOptions\"/> for the list of additional options.\r\n\t\t/// </remarks>\r\n        public virtual StatStruct Stat(string path, StreamStatOptions options, StreamContext context, bool streamStat)\r\n\t\t{\r\n\t\t\t// int (*url_stat)(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC);\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Stat\"));\r\n\t\t\treturn new StatStruct();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Local Filesystem Wrapper\r\n\r\n\t/// <summary>\r\n\t/// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to \r\n\t/// the local filesystem files.\r\n\t/// </summary>\r\n\tpublic partial class FileStreamWrapper : StreamWrapper\r\n\t{\r\n\t\t#region Opening a file\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n\t\tpublic override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null);\r\n\t\t\t//Debug.Assert(PhpPath.IsLocalFile(path));\r\n\r\n\t\t\t// Get the File.Open modes from the mode string\r\n\t\t\tFileMode fileMode;\r\n\t\t\tFileAccess fileAccess;\r\n\t\t\tStreamAccessOptions ao;\r\n\r\n\t\t\tif (!ParseMode(mode, options, out fileMode, out fileAccess, out ao)) return null;\r\n\r\n\t\t\t// Open the native stream\r\n\t\t\tFileStream stream = null;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// stream = File.Open(path, fileMode, fileAccess, FileShare.ReadWrite);\r\n\t\t\t\tstream = new FileStream(path, fileMode, fileAccess, FileShare.ReadWrite | FileShare.Delete);\r\n\t\t\t}\r\n\t\t\tcatch (FileNotFoundException)\r\n\t\t\t{\r\n\t\t\t\t// Note: There may still be an URL in the path here.\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_not_exists\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tif ((ao & StreamAccessOptions.Exclusive) > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_exists\",\r\n\t\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_io_error\",\r\n\t\t\t\t\t\tFileSystemUtils.StripPassword(path), PhpException.ToErrorMessage(e.Message)));\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_invalid\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif ((ao & StreamAccessOptions.SeekEnd) > 0)\r\n\t\t\t{\r\n\t\t\t\t// Read/Write Append is not supported. Seek to the end of file manually.\r\n\t\t\t\tstream.Seek(0, SeekOrigin.End);\r\n\t\t\t}\r\n\r\n\t\t\tif ((ao & StreamAccessOptions.Temporary) > 0)\r\n\t\t\t{\r\n\t\t\t\t// Set the file attributes to Temporary too.\r\n\t\t\t\tFile.SetAttributes(path, FileAttributes.Temporary);\r\n\t\t\t}\r\n\r\n\t\t\treturn new NativeStream(stream, this, ao, path, context);\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Optional Wrapper Operations Implementations\r\n\r\n\t\t#region Stat related methods and Stat caching\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a <see cref=\"StatStruct\"/> from the <see cref=\"StatStruct\"/> filling the common\r\n\t\t/// members (for files and directories) from the given <see cref=\"FileSystemInfo\"/> class.\r\n\t\t/// The <c>size</c> member (numeric index <c>7</c>) may be filled by the caller\r\n\t\t/// for when <paramref name=\"info\"/> is a <see cref=\"FileInfo\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// According to these outputs (PHP Win32):\r\n\t\t/// <code>\r\n\t\t/// fstat(somefile.txt):\r\n\t\t///    [dev] => 0\r\n\t\t///    [ino] => 0\r\n\t\t///    [mode] => 33206\r\n\t\t///    [nlink] => 1\r\n\t\t///    [uid] => 0\r\n\t\t///    [gid] => 0\r\n\t\t///    [rdev] => 0\r\n\t\t///    [size] => 24\r\n\t\t///    [atime] => 1091131360\r\n\t\t///    [mtime] => 1091051699\r\n\t\t///    [ctime] => 1091051677\r\n\t\t///    [blksize] => -1\r\n\t\t///    [blocks] => -1\r\n\t\t/// \r\n\t\t/// stat(somefile.txt):\r\n\t\t///    [dev] => 2\r\n\t\t///    [ino] => 0\r\n\t\t///    [mode] => 33206 // 0100666\r\n\t\t///    [nlink] => 1\r\n\t\t///    [uid] => 0\r\n\t\t///    [gid] => 0\r\n\t\t///    [rdev] => 2\r\n\t\t///    [size] => 24\r\n\t\t///    [atime] => 1091129621\r\n\t\t///    [mtime] => 1091051699\r\n\t\t///    [ctime] => 1091051677\r\n\t\t///    [blksize] => -1\r\n\t\t///    [blocks] => -1\r\n\t\t///    \r\n\t\t/// stat(somedir):\r\n\t\t///    [st_dev] => 2\r\n\t\t///    [st_ino] => 0\r\n\t\t///    [st_mode] => 16895 // 040777\r\n\t\t///    [st_nlink] => 1\r\n\t\t///    [st_uid] => 0\r\n\t\t///    [st_gid] => 0\r\n\t\t///    [st_rdev] => 2\r\n\t\t///    [st_size] => 0\r\n\t\t///    [st_atime] => 1091109319\r\n\t\t///    [st_mtime] => 1091044521\r\n\t\t///    [st_ctime] => 1091044521\r\n\t\t///    [st_blksize] => -1\r\n\t\t///    [st_blocks] => -1\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"info\">A <see cref=\"FileInfo\"/> or <see cref=\"DirectoryInfo\"/>\r\n\t\t/// of the <c>stat()</c>ed filesystem entry.</param>\r\n\t\t/// <param name=\"attributes\">The file or directory attributes.</param>\r\n\t\t/// <param name=\"path\">The path to the file / directory.</param>\r\n\t\t/// <returns>A <see cref=\"StatStruct\"/> for use in the <c>stat()</c> related functions.</returns>    \r\n\t\tinternal static StatStruct BuildStatStruct(FileSystemInfo info, FileAttributes attributes, string path)\r\n\t\t{\r\n\t\t\tStatStruct result;//  = new StatStruct();\r\n\t\t\tuint device = unchecked((uint)(char.ToLower(info.FullName[0]) - 'a')); // index of the disk\r\n\r\n            ushort mode = (ushort)BuildMode(info, attributes, path);\r\n\r\n\t\t\tlong atime,mtime,ctime;\r\n            atime = ToStatUnixTimeStamp(info, (_info) => _info.LastAccessTimeUtc);\r\n            mtime = ToStatUnixTimeStamp(info, (_info) => _info.LastWriteTimeUtc);\r\n            ctime = ToStatUnixTimeStamp(info, (_info) => _info.CreationTimeUtc);\r\n\r\n\t\t\tresult.st_dev = device;         // device number \r\n\t\t\tresult.st_ino = 0;              // inode number \r\n\t\t\tresult.st_mode = mode;          // inode protection mode \r\n\t\t\tresult.st_nlink = 1;            // number of links \r\n\t\t\tresult.st_uid = 0;              // userid of owner \r\n\t\t\tresult.st_gid = 0;              // groupid of owner \r\n\t\t\tresult.st_rdev = device;        // device type, if inode device -1\r\n\t\t\tresult.st_size = 0;             // size in bytes\r\n\r\n            FileInfo file_info = info as FileInfo;\r\n            if (file_info != null) \r\n                result.st_size = FileSystemUtils.FileSize(file_info);\r\n\r\n\t\t\tresult.st_atime = atime;        // time of last access (unix timestamp) \r\n\t\t\tresult.st_mtime = mtime;        // time of last modification (unix timestamp) \r\n\t\t\tresult.st_ctime = ctime;        // time of last change (unix timestamp) \r\n\t\t\t//result.st_blksize = -1;   // blocksize of filesystem IO (-1)\r\n\t\t\t//result.st_blocks = -1;    // number of blocks allocated  (-1)\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adjusts UTC time of a file by adding Daylight Saving Time difference.\r\n\t\t/// Makes file times working in the same way as in PHP and Windows Explorer.\r\n\t\t/// </summary>\r\n        /// <param name=\"info\"><see cref=\"FileSystemInfo\"/> object reference. Used to avoid creating of closure when passing <paramref name=\"utcTimeFunc\"/>.</param>\r\n        /// <param name=\"utcTimeFunc\">Function obtaining specific <see cref=\"DateTime\"/> from given <paramref name=\"info\"/>.</param>\r\n        private static long ToStatUnixTimeStamp(FileSystemInfo info, Func<FileSystemInfo, DateTime> utcTimeFunc)\r\n\t\t{\r\n            DateTime utcTime;\r\n\r\n            try\r\n            {\r\n                utcTime = utcTimeFunc(info);\r\n            }\r\n            catch (ArgumentOutOfRangeException)\r\n            {\r\n                //On Linux this exception might be thrown if a file metadata are corrupted\r\n                //just catch it and return 0;\r\n                return 0;\r\n            }\r\n\r\n\t\t\treturn DateTimeUtils.UtcToUnixTimeStamp(utcTime + DateTimeUtils.GetDaylightTimeDifference(utcTime, DateTime.UtcNow));\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets the ACL of a file and converts it into UNIX-like file mode\r\n        /// </summary>\r\n        public static FileModeFlags GetFileMode(FileInfo info)\r\n        {\r\n            System.Security.AccessControl.AuthorizationRuleCollection acl;\r\n\r\n            try\r\n            {\r\n                // Get the collection of authorization rules that apply to the given directory\r\n                acl = info.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));\r\n            }\r\n            catch (UnauthorizedAccessException)\r\n            {\r\n                //we don't want to throw this exception from getting access list\r\n                return 0;\r\n            }\r\n\r\n            return GetFileMode(acl);\r\n        }\r\n\r\n        /// <summary>\r\n        ///  Gets the ACL of a directory and converts it ACL into UNIX-like file mode\r\n        /// </summary>\r\n        public static FileModeFlags GetFileMode(DirectoryInfo info)\r\n        {\r\n            System.Security.AccessControl.AuthorizationRuleCollection acl;\r\n\r\n            try\r\n            {\r\n                // Get the collection of authorization rules that apply to the given directory\r\n                acl = info.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));\r\n            }\r\n            catch(UnauthorizedAccessException)\r\n            {\r\n                //we don't want to throw this exception from getting access list\r\n                return 0;\r\n            }\r\n\r\n            return GetFileMode(acl);\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts ACL into UNIX-like file mode\r\n        /// </summary>\r\n        private static FileModeFlags GetFileMode(System.Security.AccessControl.AuthorizationRuleCollection rules)\r\n        {\r\n            WindowsIdentity user = System.Security.Principal.WindowsIdentity.GetCurrent();\r\n            WindowsPrincipal principal = new WindowsPrincipal(user);\r\n            FileModeFlags result;\r\n\r\n            // These are set to true if either the allow read or deny read access rights are set\r\n            bool allowRead = false;\r\n            bool denyRead = false;\r\n            bool allowWrite = false;\r\n            bool denyWrite = false;\r\n            bool allowExecute = false;\r\n            bool denyExecute = false;\r\n\r\n\r\n            foreach (FileSystemAccessRule currentRule in rules)\r\n            {\r\n                // If the current rule applies to the current user\r\n                if (user.User.Equals(currentRule.IdentityReference) || principal.IsInRole((SecurityIdentifier)currentRule.IdentityReference))\r\n                {\r\n                    switch (currentRule.AccessControlType)\r\n                    {\r\n                        case AccessControlType.Deny:\r\n\r\n                            denyRead |= (currentRule.FileSystemRights & FileSystemRights.ListDirectory | FileSystemRights.Read) != 0;\r\n                            denyWrite |= (currentRule.FileSystemRights & FileSystemRights.Write) != 0;\r\n                            denyExecute |= (currentRule.FileSystemRights & FileSystemRights.ExecuteFile) != 0;\r\n\r\n                            break;\r\n\r\n                        case AccessControlType.Allow:\r\n\r\n                            allowRead |= (currentRule.FileSystemRights & FileSystemRights.ListDirectory | FileSystemRights.Read) != 0;\r\n                            allowWrite |= (currentRule.FileSystemRights & FileSystemRights.Write) != 0;\r\n                            allowExecute |= (currentRule.FileSystemRights & FileSystemRights.ExecuteFile) != 0;\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            result = (allowRead & !denyRead) ? FileModeFlags.Read : 0;\r\n            result |= (allowWrite & !denyWrite) ? FileModeFlags.Write : 0;\r\n            result |= (allowExecute & !denyExecute) ? FileModeFlags.Execute : 0;\r\n\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates the UNIX-like file mode depending on the file or directory attributes.\r\n\t\t/// </summary>\r\n        /// <param name=\"info\">Information about file system object.</param>\r\n\t\t/// <param name=\"attributes\">Attributes of the file.</param>\r\n\t\t/// <param name=\"path\">Paths to the file.</param>\r\n\t\t/// <returns>UNIX-like file mode.</returns>\r\n\t\tprivate static FileModeFlags BuildMode(FileSystemInfo/*!*/info, FileAttributes attributes, string path)\r\n        {\r\n            // TODO: remove !EnvironmentUtils.IsDotNetFramework branches;\r\n            // use mono.unix.native.stat on Mono instead of BuildStatStruct(), http://docs.go-mono.com/?link=M%3aMono.Unix.Native.Syscall.stat\r\n\r\n            // TODO: use Win32 stat on Windows\r\n\r\n\t\t\t// Simulates the UNIX file mode.\r\n\t\t\tFileModeFlags rv;\r\n\r\n            if ((attributes & FileAttributes.Directory) != 0)\r\n            {\r\n                // a directory:\r\n                rv = FileModeFlags.Directory;\r\n\r\n                if (EnvironmentUtils.IsDotNetFramework)\r\n                {\r\n                    rv |= GetFileMode((DirectoryInfo)info);\r\n\r\n                    // PHP on Windows always shows that directory isn't executable\r\n                    rv &= ~FileModeFlags.Execute;\r\n                }\r\n                else\r\n                {\r\n                    rv |= FileModeFlags.Read | FileModeFlags.Execute | FileModeFlags.Write;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // a file:\r\n                rv = FileModeFlags.File;\r\n\r\n                if (EnvironmentUtils.IsDotNetFramework)\r\n                {\r\n                    rv |= GetFileMode((FileInfo)info);\r\n\r\n                    if ((attributes & FileAttributes.ReadOnly) != 0 && (rv & FileModeFlags.Write) != 0)\r\n                        rv &= ~FileModeFlags.Write;\r\n\r\n                    if ((rv & FileModeFlags.Execute) == 0)\r\n                    {\r\n                        // PHP on Windows checks the file internaly wheather it is executable\r\n                        // we just look on the extension\r\n\r\n                        string ext = Path.GetExtension(path);\r\n                        if ((ext.EqualsOrdinalIgnoreCase(\".exe\")) || (ext.EqualsOrdinalIgnoreCase(\".com\")) || (ext.EqualsOrdinalIgnoreCase(\".bat\")))\r\n                            rv |= FileModeFlags.Execute;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    rv |= FileModeFlags.Read; // | FileModeFlags.Execute;\r\n\r\n                    if ((attributes & FileAttributes.ReadOnly) == 0)\r\n                        rv |= FileModeFlags.Write;\r\n                }\r\n            }\r\n\r\n            //\r\n\t\t\treturn rv;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Stat\"]/*'/>\r\n        public override StatStruct Stat(string path, StreamStatOptions options, StreamContext context, bool streamStat)\r\n        {\r\n            StatStruct invalid = new StatStruct();\r\n            invalid.st_size = -1;\r\n            Debug.Assert(path != null);\r\n\r\n            // Note: path is already absolute w/o the scheme, the permissions have already been checked.\r\n            return HandleNewFileSystemInfo(invalid, path, (p) =>\r\n                {\r\n                    FileSystemInfo info = null;\r\n\r\n                    info = new DirectoryInfo(p);\r\n                    if (!info.Exists)\r\n                    {\r\n                        info = new FileInfo(p);\r\n                        if (!info.Exists)\r\n                        {\r\n                            return invalid;\r\n                        }\r\n                    }\r\n\r\n                    return BuildStatStruct(info, info.Attributes, p);\r\n                });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try the new FileSystemInfo based operation and hamdle exceptions properly.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The return value type.</typeparam>\r\n        /// <param name=\"invalid\">Invalid value.</param>\r\n        /// <param name=\"path\">Path to the resource passed to the <paramref name=\"action\"/>. Also used for error control.</param>\r\n        /// <param name=\"action\">Action to try. The first argument is the path.</param>\r\n        /// <returns>The value of <paramref name=\"action\"/>() or <paramref name=\"invalid\"/>.</returns>\r\n        public static T HandleNewFileSystemInfo<T>(T invalid, string path, Func<string,T>/*!*/action)\r\n        {\r\n            try\r\n            {\r\n                return action(path);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_stat_invalid_path\",\r\n                    FileSystemUtils.StripPassword(path)));\r\n            }\r\n            catch (PathTooLongException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_stat_invalid_path\",\r\n                    FileSystemUtils.StripPassword(path)));\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n                    FileSystemUtils.StripPassword(path), e.Message));\r\n            }\r\n\r\n            return invalid;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Unlink\"]/*'/>\r\n\t\tpublic override bool Unlink(string path, StreamUnlinkOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null);\r\n\t\t\tDebug.Assert(Path.IsPathRooted(path));\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tFile.Delete(path);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (DirectoryNotFoundException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_unlink_file_not_found\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_unlink_io_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path), PhpException.ToErrorMessage(e.Message)));\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_unlink_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Listing\"]/*'/>\r\n\t\tpublic override string[] Listing(string path, StreamListingOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null);\r\n\t\t\tDebug.Assert(Path.IsPathRooted(path));\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstring[] listing = Directory.GetFileSystemEntries(path);\r\n\t\t\t\tbool root = Path.GetPathRoot(path) == path;\r\n\t\t\t\tint index = root ? 0 : 2;\r\n\t\t\t\tstring[] rv = new string[listing.Length + index];\r\n\r\n\t\t\t\t// Remove the absolute path information (PHP returns only filenames)\r\n\t\t\t\tint pathLength = path.Length;\r\n\t\t\t\tif (path[pathLength - 1] != Path.DirectorySeparatorChar) pathLength++;\r\n\r\n\t\t\t\t// Check for the '.' and '..'; they should be present\r\n\t\t\t\tif (!root)\r\n\t\t\t\t{\r\n\t\t\t\t\trv[0] = \".\";\r\n\t\t\t\t\trv[1] = \"..\";\r\n\t\t\t\t}\r\n\t\t\t\tfor (int i = 0; i < listing.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\trv[index++] = listing[i].Substring(pathLength);\r\n\t\t\t\t}\r\n\t\t\t\treturn rv;\r\n\t\t\t}\r\n\t\t\tcatch (DirectoryNotFoundException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_bad_directory\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path), e.Message));\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Rename\"]/*'/>\r\n\t\tpublic override bool Rename(string fromPath, string toPath, StreamRenameOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tFile.Move(fromPath, toPath);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(fromPath)));\r\n\t\t\t}\r\n\t\t\tcatch (IOException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_rename_file_exists\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(fromPath), FileSystemUtils.StripPassword(toPath)));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(fromPath), e.Message));\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"MakeDirectory\"]/*'/>\r\n\t\tpublic override bool MakeDirectory(string path, int accessMode, StreamMakeDirectoryOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tif ((path == null) || (path == string.Empty))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"path_argument_empty\"));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// Default Framework MakeDirectory is RECURSIVE, check for other intention. \r\n\t\t\t\tif ((options & StreamMakeDirectoryOptions.Recursive) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tint pos = path.Length - 1;\r\n\t\t\t\t\tif (path[pos] == Path.DirectorySeparatorChar) pos--;\r\n\t\t\t\t\tpos = path.LastIndexOf(Path.DirectorySeparatorChar, pos);\r\n\t\t\t\t\tif (pos <= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_directory_make_root\",\r\n\t\t\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Parent must exist if not recursive.\r\n\t\t\t\t\tstring parent = path.Substring(0, pos);\r\n\t\t\t\t\tif (!Directory.Exists(parent))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_directory_make_parent\",\r\n\t\t\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Creates the whole path\r\n\t\t\t\tDirectory.CreateDirectory(path);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\t// The caller does not have the required permission.\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_directory_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (IOException)\r\n\t\t\t{\r\n\t\t\t\t// The directory specified by path is read-only or is not empty.\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_directory_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\t// The specified path is invalid, such as being on an unmapped drive ...\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path), e.Message));\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"RemoveDirectory\"]/*'/>\r\n\t\tpublic override bool RemoveDirectory(string path, StreamRemoveDirectoryOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t// Deletes the directory (but not the contents - must be empty)\r\n\t\t\t\tDirectory.Delete(path, false);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\tcatch (IOException)\r\n\t\t\t{\r\n\t\t\t\t// Directory not empty.\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_rmdir_io_error\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Input/Output Stream Wrapper\r\n\r\n\t/// <summary>\r\n\t/// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to the PHP input/output streams.\r\n\t/// </summary>\r\n\tpublic partial class InputOutputStreamWrapper : StreamWrapper\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Represents the console input stream (alias php://stdin).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It is a persistent text stream. This means that it is never closed\r\n\t\t/// by <c>fclose()</c> and <c>\\r\\n</c> is converted to <c>\\n</c>.\r\n\t\t/// </remarks>\r\n\t\tpublic static PhpStream In\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stdin == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tstdin = new NativeStream(Console.OpenStandardInput(), null, StreamAccessOptions.Read | StreamAccessOptions.UseText | StreamAccessOptions.Persistent, \"php://stdin\", StreamContext.Default);\r\n\t\t\t\t\tstdin.IsReadBuffered = false;\r\n\t\t\t\t\t// EX: cache this as a persistent stream (incl. path and options)\r\n\t\t\t\t}\r\n\t\t\t\treturn stdin;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static PhpStream stdin = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents the console output stream (alias php://stdout).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It is a persistent text stream. This means that it is never closed\r\n\t\t/// by <c>fclose()</c> and <c>\\n</c> is converted to <c>\\r\\n</c>.\r\n\t\t/// </remarks>\r\n\t\tpublic static PhpStream Out\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stdout == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tstdout = new NativeStream(Console.OpenStandardOutput(), null, StreamAccessOptions.Write | StreamAccessOptions.UseText | StreamAccessOptions.Persistent, \"php://stdout\", StreamContext.Default);\r\n\t\t\t\t\tstdout.IsWriteBuffered = false;\r\n\t\t\t\t\t// EX: cache this as a persistent stream\r\n\t\t\t\t}\r\n\t\t\t\treturn stdout;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static PhpStream stdout = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents the console error stream (alias php://error).\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// It is a persistent text stream. This means that it is never closed\r\n\t\t/// by <c>fclose()</c> and <c>\\n</c> is converted to <c>\\r\\n</c>.\r\n\t\t/// </remarks>\r\n\t\tpublic static PhpStream Error\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (stderr == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tstderr = new NativeStream(Console.OpenStandardInput(), null,\r\n\t\t\t\t\t\tStreamAccessOptions.Write | StreamAccessOptions.UseText | StreamAccessOptions.Persistent, \"php://stderr\", StreamContext.Default);\r\n\t\t\t\t\tstderr.IsWriteBuffered = false;\r\n\t\t\t\t\t// EX: cache this as a persistent stream\r\n\t\t\t\t}\r\n\t\t\t\treturn stderr;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static PhpStream stderr = null;\r\n\t}\r\n\r\n\t#endregion\r\n}"
  },
  {
    "path": "Source/Core/StreamWrappers.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing System.IO.IsolatedStorage;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Local Filesystem Wrapper\r\n\r\n\t/// <summary>\r\n\t/// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to \r\n\t/// the local filesystem files.\r\n\t/// </summary>\r\n\tpublic partial class FileStreamWrapper : StreamWrapper\r\n\t{\r\n\t\t#region Opening a file\r\n\r\n\t\tprivate IsolatedStorageFile storageFile;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dispose - close the isolated storage handle\r\n\t\t/// </summary>\r\n\t\tpublic override void Dispose()\r\n\t\t{\r\n\t\t\tstorageFile.Dispose();\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n\t\tpublic override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n\t\t{\r\n\t\t\tDebug.Assert(path != null);\r\n\t\t\t//Debug.Assert(PhpPath.IsLocalFile(path));\r\n\r\n\t\t\t// Get the File.Open modes from the mode string\r\n\t\t\tFileMode fileMode;\r\n\t\t\tFileAccess fileAccess;\r\n\t\t\tStreamAccessOptions ao;\r\n\r\n\t\t\tif (!ParseMode(mode, options, out fileMode, out fileAccess, out ao)) return null;\r\n\r\n\t\t\t// Open the native stream\r\n\t\t\tthis.storageFile = IsolatedStorageFile.GetUserStoreForApplication();\r\n\t\t\tFileStream stream = null;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstream = new IsolatedStorageFileStream(path, fileMode, fileAccess, FileShare.ReadWrite | FileShare.Delete, storageFile);\r\n\t\t\t}\r\n\t\t\tcatch (FileNotFoundException)\r\n\t\t\t{\r\n\t\t\t\t// Note: There may still be an URL in the path here.\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_not_exists\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tif ((ao & StreamAccessOptions.Exclusive) > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_exists\",\r\n\t\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_io_error\",\r\n\t\t\t\t\t\tFileSystemUtils.StripPassword(path), PhpException.ToErrorMessage(e.Message)));\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_invalid\",\r\n\t\t\t\t\tFileSystemUtils.StripPassword(path)));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif ((ao & StreamAccessOptions.SeekEnd) > 0)\r\n\t\t\t{\r\n\t\t\t\t// Read/Write Append is not supported. Seek to the end of file manually.\r\n\t\t\t\tstream.Seek(0, SeekOrigin.End);\r\n\t\t\t}\r\n\r\n\t\t\tif ((ao & StreamAccessOptions.Temporary) > 0)\r\n\t\t\t{\r\n\t\t\t\t// Set the file attributes to Temporary too.\r\n\t\t\t\tFile.SetAttributes(path, FileAttributes.Temporary);\r\n\t\t\t}\r\n\r\n\t\t\treturn new NativeStream(stream, this, ao, path, context);\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}"
  },
  {
    "path": "Source/Core/StreamWrappers.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2005 Jan Benda.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing System.Runtime.InteropServices;\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region StatStruct\r\n\r\n    /// <summary>\r\n    /// Managed equivalent of the CRT <c>stat</c> structure.\r\n    /// </summary>\r\n    [Serializable]\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct StatStruct\r\n    {\r\n        public uint st_dev;\r\n        public ushort st_ino;\r\n        public ushort st_mode;\r\n        public short st_nlink;\r\n        public short st_uid;\r\n        public short st_gid;\r\n        public uint st_rdev;\r\n        public int st_size;\r\n        public long st_atime;\r\n        public long st_mtime;\r\n        public long st_ctime;\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Open-Mode decoded options\r\n    /// <summary>\r\n    /// Flags returned by <see cref=\"StreamWrapper.ParseMode\"/> indicating\r\n    /// additional information to the parsed <see cref=\"FileMode\"/>\r\n    /// and <see cref=\"FileAccess\"/>.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamAccessOptions\r\n    {\r\n        /// <summary>Empty (invalid) value (0).</summary>\r\n        Empty = 0,\r\n        /// <summary>The stream was opened for reading (1).</summary>\r\n        Read = FileAccess.Read,\r\n        /// <summary>The stream was opened for writing (2).</summary>\r\n        Write = FileAccess.Write,\r\n        /// <summary>Use text access to the stream (default is binary) (4).</summary>\r\n        UseText = 0x04,\r\n        /// <summary>Seek to the end of the stream is required (8).</summary>\r\n        /// <remarks>\r\n        /// The given mode requires \"a+\", which is not supported\r\n        /// by .NET Framework; mode is reset to \"r+\" and a seek is required.\r\n        /// </remarks>\r\n        SeekEnd = 0x08,\r\n        /// <summary>The mode starts with 'x' which requires \r\n        /// a Warning if the file already exists. It is not applicable\r\n        /// to remote files (16).</summary>\r\n        Exclusive = 0x10,\r\n        /// <summary>This file may be searched in the include_path\r\n        /// if requested (only the modes opening existing files) (32).</summary>\r\n        FindFile = 0x20,\r\n        /// <summary>When a local file is opened using tmpfile() it should be removed when closed (256).</summary>\r\n        Temporary = 0x100,\r\n        /// <summary>Denotes a persistent version of the stream (2048).</summary>\r\n        Persistent = StreamOptions.Persistent\r\n    }\r\n    #endregion\r\n\r\n    #region Stream opening flags\r\n    /// <summary>\r\n    /// Flags passed in the options argument to the <see cref=\"StreamWrapper.Open\"/> method.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>If path is relative, Wrapper will search for the resource using the include_path (1).</summary>\r\n        UseIncludePath = 1,\r\n        /// <summary>When this flag is set, only the file:// wrapper is considered. (2)</summary>\r\n        IgnoreUrl = 2,\r\n        /// <summary>Apply the <c>safe_mode</c> permissions check when opening a file (4).</summary>\r\n        EnforceSafeMode = 4,\r\n        /// <summary>If this flag is set, the Wrapper is responsible for raising errors using \r\n        /// trigger_error() during opening of the stream. If this flag is not set, she should not raise any errors (8).</summary>\r\n        ReportErrors = 8,\r\n        /// <summary>If you don't need to write to the stream, but really need to \r\n        /// be able to seek, use this flag in your options (16).</summary>\r\n        MustSeek = 16,\r\n\r\n        /// <summary>\r\n        /// If you are going to end up casting the stream into a FILE* or\r\n        /// a socket, pass this flag and the streams/wrappers will not use\r\n        /// buffering mechanisms while reading the headers, so that HTTP wrapped \r\n        /// streams will work consistently.  If you omit this flag, streams will \r\n        /// use buffering and should end up working more optimally (32).\r\n        /// </summary>\r\n        WillCast = 32,\r\n        /// <summary> This flag applies to php_stream_locate_url_wrapper (64). </summary>\r\n        LocateWrappersOnly = 64,\r\n        /// <summary> This flag is only used by include/require functions (128).</summary>\r\n        OpenForInclude = 128,\r\n        /// <summary> This flag tells streams to ONLY open urls (256).</summary>\r\n        UseUrl = 256,\r\n        /// <summary> This flag is used when only the headers from HTTP request are to be fetched (512).</summary>\r\n        OnlyGetHeaders = 512,\r\n        /// <summary>Don't apply open_basedir checks (1024).</summary>\r\n        DisableOpenBasedir = 1024,\r\n        /// <summary>Get (or create) a persistent version of the stream (2048).</summary>\r\n        Persistent = 2048\r\n    }\r\n\r\n    /// <summary>\r\n    /// <see cref=\"StreamOptions\"/> relevant to the Open method.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamOpenOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>If path is relative, Wrapper will search for the resource using the include_path (1).</summary>\r\n        UseIncludePath = StreamOptions.UseIncludePath,\r\n        /// <summary>Apply the <c>safe_mode</c> permissions check when opening a file (4).</summary>\r\n        EnforceSafeMode = StreamOptions.EnforceSafeMode,\r\n        /// <summary>If this flag is set, the Wrapper is responsible for raising errors using \r\n        /// trigger_error() during opening of the stream. If this flag is not set, user should not raise any errors (8).</summary>\r\n        ReportErrors = StreamOptions.ReportErrors,\r\n        /// <summary> This flag is only used by include/require functions (128).</summary>\r\n        OpenForInclude = StreamOptions.OpenForInclude,\r\n        /// <summary>Don't apply open_basedir checks (1024).</summary>\r\n        DisableOpenBasedir = StreamOptions.DisableOpenBasedir,\r\n        /// <summary>Get (or create) a persistent version of the stream (2048).</summary>\r\n        Persistent = StreamOptions.Persistent,\r\n        /// <summary>When a local file is opened using tmpfile() it should be removed when closed (256).</summary>\r\n        Temporary = StreamAccessOptions.Temporary\r\n    }\r\n\r\n    /// <summary>\r\n    /// <see cref=\"StreamOptions\"/> relevant to the Listing method.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamListingOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>Don't apply open_basedir checks (1024).</summary>\r\n        DisableOpenBasedir = StreamOptions.DisableOpenBasedir\r\n    }\r\n\r\n    /// <summary>\r\n    /// <see cref=\"StreamOptions\"/> relevant to the Unlink method.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamUnlinkOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>Apply the <c>safe_mode</c> permissions check when opening a file (4).</summary>\r\n        EnforceSafeMode = StreamOptions.EnforceSafeMode,\r\n        /// <summary>If this flag is set, the Wrapper is responsible for raising errors using \r\n        /// trigger_error() during opening of the stream. If this flag is not set, she should not raise any errors (8).</summary>\r\n        ReportErrors = StreamOptions.ReportErrors\r\n    }\r\n\r\n    /// <summary>\r\n    /// <see cref=\"StreamOptions\"/> relevant to the Rename method.\r\n    /// </summary>\r\n    public enum StreamRenameOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0\r\n    }\r\n\r\n    /// <summary>\r\n    /// Specific options of the Stat method.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum StreamStatOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>Stat the symbolic link itself instead of the linked file (1).</summary>\r\n        Link = 0x1,\r\n        /// <summary>Do not complain if the file does not exist (2).</summary>\r\n        Quiet = 0x2,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Specific options of the MakeDirectory method.\r\n    /// </summary>\r\n    public enum StreamMakeDirectoryOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0,\r\n        /// <summary>Create the whole path leading to the specified directory if necessary (1).</summary>\r\n        Recursive = 0x1\r\n    }\r\n\r\n    /// <summary>\r\n    /// <see cref=\"StreamOptions\"/> relevant to the RemoveDirectory method.\r\n    /// </summary>\r\n    public enum StreamRemoveDirectoryOptions\r\n    {\r\n        /// <summary>Empty option (default)</summary>\r\n        Empty = 0\r\n    }\r\n\r\n    /// <summary>\r\n    /// File attribute flags used in fileperms.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum FileModeFlags\r\n    {\r\n        /// <summary>Mask for file type.</summary>\r\n        FileTypeMask = Directory | File | Character | Pipe,\r\n        /// <summary>Regular file.</summary>\r\n        File = 0x8000,\r\n        /// <summary>Directory.</summary>\r\n        Directory = 0x4000,\r\n        /// <summary>Character special.</summary>\r\n        Character = 0x2000,\r\n        /// <summary>FIFO.</summary>\r\n        Pipe = 0x1000,\r\n        /// <summary>Read permissions; owner, group, others.</summary>\r\n        Read = 4 + 4 * 8 + 4 * 8 * 8,\r\n        /// <summary>Write permissions; owner, group, others.</summary>\r\n        Write = 2 + 2 * 8 + 2 * 8 * 8,\r\n        /// <summary>Execute permissions; owner, group, others.</summary>\r\n        Execute = 1 + 8 + 8 * 8,\r\n        /// <summary>All permissions for owner, group and others.</summary>\r\n        ReadWriteExecute = Read | Write | Execute\r\n    }\r\n    #endregion\r\n\r\n    #region Abstract Stream Wrapper\r\n\r\n    /// <summary>\r\n    /// Abstract base class for PHP stream wrappers. Descendants define \r\n    /// methods implementing fopen, stat, unlink, rename, opendir, mkdir and rmdir \r\n    /// for different stream types.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Each script has its own copy of registeredWrappers stored in the ScriptContext.\r\n    /// <para>\r\n    /// PhpStream is created by a StreamWrapper on a call to fopen().\r\n    /// Wrappers are stateless: they provide an instance of PhpStream\r\n    /// on fopen() and an instance of DirectoryListing on opendir().\r\n    /// </para>\r\n    /// </remarks>\r\n    public abstract partial class StreamWrapper : IDisposable\r\n    {\r\n        #region Mandatory Wrapper Operations\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n        public abstract PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context);\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n        public abstract string Label { get; }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n        public abstract string Scheme { get; }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"IsUrl\"]/*'/>\r\n        public abstract bool IsUrl { get; }\r\n\r\n        #endregion\r\n\r\n        #region Optional Wrapper Operations (Warning)\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Unlink\"]/*'/>\r\n        /// <remarks>\r\n        /// <seealso cref=\"StreamUnlinkOptions\"/> for the list of additional options.\r\n        /// </remarks>\r\n        public virtual bool Unlink(string path, StreamUnlinkOptions options, StreamContext context)\r\n        {\r\n            // int (*unlink)(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC); \r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Unlink\"));\r\n            return false;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Listing\"]/*'/>\r\n        public virtual string[] Listing(string path, StreamListingOptions options, StreamContext context)\r\n        {\r\n            // php_stream *(*dir_opener)(php_stream_wrapper *wrapper, char *filename, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);\r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Opendir\"));\r\n            return null;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Rename\"]/*'/>\r\n        public virtual bool Rename(string fromPath, string toPath, StreamRenameOptions options, StreamContext context)\r\n        {\r\n            // int (*rename)(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC);\r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Rename\"));\r\n            return false;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"MakeDirectory\"]/*'/>\r\n        /// <remarks><seealso cref=\"StreamMakeDirectoryOptions\"/> for the list of additional options.</remarks>\r\n        public virtual bool MakeDirectory(string path, int accessMode, StreamMakeDirectoryOptions options, StreamContext context)\r\n        {\r\n            // int (*stream_mkdir)(php_stream_wrapper *wrapper, char *url, int mode, int options, php_stream_context *context TSRMLS_DC);\r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Mkdir\"));\r\n            return false;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"RemoveDirectory\"]/*'/>\r\n        public virtual bool RemoveDirectory(string path, StreamRemoveDirectoryOptions options, StreamContext context)\r\n        {\r\n            // int (*stream_rmdir)(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);    \r\n            PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"wrapper_op_unsupported\", \"Rmdir\"));\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Optional Wrapper Methods (Empty)\r\n\r\n        /// <summary>\r\n        /// Wrapper may be notified of closing a stream using this method.\r\n        /// </summary>\r\n        /// <param name=\"stream\"></param>\r\n        public virtual void OnClose(PhpStream stream) { }\r\n\r\n        // int (*stream_closer)(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC);\r\n\r\n        /// <summary>\r\n        /// Wrapper may override the <c>stat()</c>ing of a stream using this method.\r\n        /// </summary>\r\n        /// <param name=\"stream\">The Wrapper-opened stream to be <c>stat()</c>ed.</param>\r\n        /// <returns></returns>\r\n        public virtual PhpArray OnStat(PhpStream stream) { return null; }\r\n\r\n        // int (*stream_stat)(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);\r\n\r\n        #endregion\r\n\r\n        #region Helper methods (ParseMode, FileSystemUtils.StripPassword)\r\n\r\n        /// <summary>\r\n        /// Parse the <paramref name=\"mode\"/> argument passed to <c>fopen()</c>\r\n        /// and make the appropriate <see cref=\"FileMode\"/> and <see cref=\"FileAccess\"/>\r\n        /// combination.\r\n        /// Integrate the relevant options from <see cref=\"StreamOpenOptions\"/> too.\r\n        /// </summary>\r\n        /// <param name=\"mode\">Mode as passed to <c>fopen()</c>.</param>\r\n        /// <param name=\"options\">The <see cref=\"StreamOpenOptions\"/> passed to <c>fopen()</c>.</param>\r\n        /// <param name=\"fileMode\">Resulting <see cref=\"FileMode\"/> specifying opening mode.</param>\r\n        /// <param name=\"fileAccess\">Resulting <see cref=\"FileAccess\"/> specifying read/write access options.</param>\r\n        /// <param name=\"accessOptions\">Resulting <see cref=\"StreamAccessOptions\"/> giving \r\n        /// additional information to the stream opener.</param>\r\n        /// <returns><c>true</c> if the given mode was a valid file opening mode, otherwise <c>false</c>.</returns>\r\n        public bool ParseMode(string mode, StreamOpenOptions options, out FileMode fileMode, out FileAccess fileAccess, out StreamAccessOptions accessOptions)\r\n        {\r\n            accessOptions = StreamAccessOptions.Empty;\r\n            bool forceBinary = false; // The user requested a text stream\r\n            bool forceText = false; // Use text access to the stream (default is binary)\r\n\r\n            // First check for relevant options in StreamOpenOptions:\r\n\r\n            // Search for the file only if mode=='[ra]*' and use_include_path==true.\r\n            // StreamAccessOptions findFile = 0;\r\n            if ((options & StreamOpenOptions.UseIncludePath) > 0)\r\n            {\r\n                // findFile = StreamAccessOptions.FindFile;\r\n                accessOptions |= StreamAccessOptions.FindFile;\r\n            }\r\n\r\n            // Copy the AutoRemove option.\r\n            if ((options & StreamOpenOptions.Temporary) > 0)\r\n            {\r\n                accessOptions |= StreamAccessOptions.Temporary;\r\n            }\r\n\r\n            // Now do the actual mode parsing:\r\n            fileMode = FileMode.Open;\r\n            fileAccess = FileAccess.Write;\r\n            if (String.IsNullOrEmpty(mode))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"empty_file_mode\"));\r\n                return false;\r\n            }\r\n\r\n            switch (mode[0])\r\n            {\r\n                case 'r':\r\n                    // flags = 0;\r\n                    // fileMode is already set to Open\r\n                    fileAccess = FileAccess.Read;\r\n                    //accessOptions |= findFile;\r\n                    break;\r\n\r\n                case 'w':\r\n                    // flags = O_TRUNC|O_CREAT;\r\n                    // fileAccess is set to Write\r\n                    fileMode = FileMode.Create;\r\n                    //accessOptions |= findFile;\r\n                    // EX: Note that use_include_path is applicable to all access methods.\r\n                    // Create truncates the existing file to zero length\r\n                    break;\r\n\r\n                case 'a':\r\n                    // flags = O_CREAT|O_APPEND;\r\n                    // fileAccess is set to Write\r\n                    fileMode = FileMode.Append;\r\n                    //accessOptions |= findFile;\r\n                    // Note: .NET does not support the \"a+\" mode, use \"r+\" and Seek()\r\n                    break;\r\n\r\n                case 'x':\r\n                    // flags = O_CREAT|O_EXCL;\r\n                    // fileAccess is set to Write\r\n                    fileMode = FileMode.CreateNew;\r\n                    accessOptions |= StreamAccessOptions.Exclusive;\r\n                    break;\r\n\r\n                default:\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"invalid_file_mode\", mode));\r\n                    return false;\r\n            }\r\n\r\n            if (mode.IndexOf('+') > -1)\r\n            {\r\n                // flags |= O_RDWR;\r\n                fileAccess = FileAccess.ReadWrite;\r\n            }\r\n\r\n            if ((fileMode == FileMode.Append) && (fileAccess == FileAccess.ReadWrite))\r\n            {\r\n                // Note: .NET does not support the \"a+\" mode, use \"r+\" and Seek()\r\n                fileMode = FileMode.OpenOrCreate;\r\n                fileAccess = FileAccess.ReadWrite;\r\n                accessOptions |= StreamAccessOptions.SeekEnd;\r\n            }\r\n\r\n            if (mode.IndexOf('b') > -1)\r\n            {\r\n                // flags |= O_BINARY;\r\n                forceBinary = true;\r\n            }\r\n            if (mode.IndexOf('t') > -1)\r\n            {\r\n                // flags |= _O_TEXT;\r\n                forceText = true;\r\n            }\r\n\r\n            // Exactly one of these options is required.\r\n            if ((forceBinary && forceText) || (!forceBinary && !forceText))\r\n            {\r\n                LocalConfiguration config = Configuration.Local;\r\n\r\n                // checks whether default mode is applicable:\r\n                if (config.FileSystem.DefaultFileOpenMode == \"b\")\r\n                {\r\n                    forceBinary = true;\r\n                }\r\n                else if (config.FileSystem.DefaultFileOpenMode == \"t\")\r\n                {\r\n                    forceText = true;\r\n                }\r\n                else\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"ambiguous_file_mode\", mode));\r\n                }\r\n\r\n                // Binary mode is assumed\r\n            }\r\n            else if (forceText)\r\n            {\r\n                // Default mode is binary (unless the text mode is specified).\r\n                accessOptions |= StreamAccessOptions.UseText;\r\n            }\r\n\r\n            // Store the two file-access flags into the access options too.\r\n            accessOptions |= (StreamAccessOptions)fileAccess;\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overload of <see cref=\"ParseMode\"/> without the <c>out</c> arguments.\r\n        /// </summary>\r\n        /// <param name=\"mode\">Mode as passed to <c>fopen()</c>.</param>\r\n        /// <param name=\"options\">The <see cref=\"StreamOpenOptions\"/> passed to <c>fopen()</c>.</param>\r\n        /// <param name=\"accessOptions\">Resulting <see cref=\"StreamAccessOptions\"/> giving \r\n        /// additional information to the stream opener.</param>\r\n        /// <returns><c>true</c> if the given mode was a valid file opening mode, otherwise <c>false</c>.</returns>\r\n        /// <exception cref=\"ArgumentException\">If the <paramref name=\"mode\"/> is not valid.</exception>\r\n        internal bool ParseMode(string mode, StreamOpenOptions options, out StreamAccessOptions accessOptions)\r\n        {\r\n            FileMode fileMode;\r\n            FileAccess fileAccess;\r\n\r\n            return (ParseMode(mode, options, out fileMode, out fileAccess, out accessOptions));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether the supported read/write access matches the reqiured one.\r\n        /// </summary>\r\n        /// <param name=\"accessOptions\">The access options specified by the user.</param>\r\n        /// <param name=\"supportedAccess\">The read/write access options supported by the stream.</param>\r\n        /// <param name=\"path\">The path given by user to report errors.</param>\r\n        /// <returns><c>false</c> if the stream does not support any of the required modes, <c>true</c> otherwise.</returns>\r\n        internal bool CheckOptions(StreamAccessOptions accessOptions, FileAccess supportedAccess, string path)\r\n        {\r\n            FileAccess requiredAccess = (FileAccess)accessOptions & FileAccess.ReadWrite;\r\n            FileAccess faultyAccess = requiredAccess & ~supportedAccess;\r\n            if ((faultyAccess & FileAccess.Read) > 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_open_read_unsupported\",\r\n                  FileSystemUtils.StripPassword(path)));\r\n                return false;\r\n            }\r\n            else if ((faultyAccess & FileAccess.Write) > 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_open_write_unsupported\",\r\n                  FileSystemUtils.StripPassword(path)));\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Static wrapper-list handling methods\r\n\r\n        /// <summary>\r\n        /// Insert a new wrapper to the list of user StreamWrappers.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Each script has its own set of user StreamWrappers registered\r\n        /// by stream_wrapper_register() stored in the ScriptContext.\r\n        /// </remarks>\r\n        /// <param name=\"protocol\">The scheme portion of URLs this wrapper can handle.</param>\r\n        /// <param name=\"wrapper\">An instance of the corresponding StreamWrapper descendant.</param>\r\n        /// <returns>True if succeeds, false if the scheme is already registered.</returns>\r\n        public static bool RegisterUserWrapper(string protocol, StreamWrapper wrapper)\r\n        {\r\n            // Userwrappers may be initialized to null\r\n            if (UserWrappers == null)\r\n                CreateUserWrapperTable();\r\n\r\n            UserWrappers.Add(protocol, wrapper);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Register a new system wrapper\r\n        /// </summary>\r\n        /// <param name=\"wrapper\">An instance of the corresponding StreamWrapper descendant.</param>\r\n        /// <returns>True if succeeds, false if the scheme is already registered.</returns>\r\n        public static bool RegisterSystemWrapper(StreamWrapper wrapper)\r\n        {\r\n            if (!systemStreamWrappers.ContainsKey(wrapper.Scheme))\r\n            {\r\n                systemStreamWrappers.Add(wrapper.Scheme, wrapper);\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if a wrapper is already registered for the given scheme.\r\n        /// </summary>\r\n        /// <param name=\"scheme\">The scheme.</param>\r\n        /// <returns><c>true</c> if exists.</returns>\r\n        public static bool Exists(string scheme)\r\n        {\r\n            return GetWrapperInternal(scheme) != null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retreive the corresponding StreamWrapper respectind the scheme portion \r\n        /// of the given path. If no scheme is specified, an instance of \r\n        /// FileStreamWrapper is returned.\r\n        /// </summary>\r\n        /// <param name=\"scheme\">The scheme portion of an URL.</param>\r\n        /// <param name=\"options\">Additional <see cref=\"StreamOptions\"/> having effect on the wrapper retreival.</param>\r\n        /// <returns>An instance of StreamWrapper to be used to open the specified file.</returns>\r\n        /// <exception cref=\"PhpException\">In case when the required wrapper can not be found.</exception>\r\n        public static StreamWrapper GetWrapper(string scheme, StreamOptions options)\r\n        {\r\n            StreamWrapper wrapper = GetWrapperInternal(scheme);\r\n\r\n            if (wrapper == null)\r\n            {\r\n                PhpException.Throw(PhpError.Notice, CoreResources.GetString(\"stream_bad_wrapper\", scheme));\r\n                // Notice:  fopen(): Unable to find the wrapper \"*\" - did you forget to enable it when you configured PHP? in C:\\Inetpub\\wwwroot\\php\\index.php on line 23\r\n\r\n                wrapper = GetWrapperInternal(\"file\");\r\n                // There should always be the FileStreamWrapper present.\r\n            }\r\n\r\n            // EX [GetWrapper]: check for the other StreamOptions here: for example UseUrl, IgnoreUrl\r\n\r\n            if (!ScriptContext.CurrentContext.Config.FileSystem.AllowUrlFopen)\r\n            {\r\n                if (wrapper.IsUrl)\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"url_fopen_disabled\"));\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            Debug.Assert(wrapper != null);\r\n            return wrapper;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the list of built-in stream wrapper schemes.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static ICollection<string> GetSystemWrapperSchemes()\r\n        {\r\n            string[] keys = new string[systemStreamWrappers.Count];\r\n            int i = 0;\r\n            foreach (string key in systemStreamWrappers.Keys)\r\n            {\r\n                keys[i++] = key;\r\n            }\r\n            return keys;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the list of user wrapper schemes.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static ICollection<string> GetUserWrapperSchemes()\r\n        {\r\n            if (UserWrappers == null) return ArrayUtils.EmptyStrings;\r\n            return UserWrappers.Keys;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Search the lists of registered StreamWrappers to find the \r\n        /// appropriate wrapper for a given scheme. When the scheme\r\n        /// is empty, the FileStreamWrapper is returned.\r\n        /// </summary>\r\n        /// <param name=\"scheme\">The scheme portion of an URL.</param>\r\n        /// <returns>A StreamWrapper associated with the given scheme.</returns>\r\n        internal static StreamWrapper GetWrapperInternal(string scheme)\r\n        {\r\n            // Note: FileStreamWrapper is returned both for \"file\" and for \"\".\r\n            if (scheme == String.Empty)\r\n                scheme = \"file\";\r\n\r\n            // First search the system wrappers (always at least an empty Hashtable)\r\n            if (SystemStreamWrappers.ContainsKey(scheme))\r\n                return (StreamWrapper)SystemStreamWrappers[scheme];\r\n\r\n            // Then look if the wrapper is implemented but not instantiated\r\n            switch (scheme)\r\n            {\r\n                case FileStreamWrapper.scheme:\r\n                    return (StreamWrapper)(SystemStreamWrappers[scheme] = new FileStreamWrapper());\r\n                case HttpStreamWrapper.scheme:\r\n                    return (StreamWrapper)(SystemStreamWrappers[scheme] = new HttpStreamWrapper());\r\n                case InputOutputStreamWrapper.scheme:\r\n                    return (StreamWrapper)(SystemStreamWrappers[scheme] = new InputOutputStreamWrapper());\r\n            }\r\n\r\n            // Next search the user wrappers (if present)\r\n            if ((UserWrappers != null) && (UserWrappers.ContainsKey(scheme)))\r\n            {\r\n                return (StreamWrapper)UserWrappers[scheme];\r\n            }\r\n\r\n            // no wrapper for given scheme\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Make new instance of Hashtable for the userwrappers\r\n        /// in the ScriptContext.\r\n        /// </summary>\r\n        internal static void CreateUserWrapperTable()\r\n        {\r\n            ScriptContext script_context = ScriptContext.CurrentContext;\r\n\r\n            Debug.Assert(script_context.UserStreamWrappers == null);\r\n            script_context.UserStreamWrappers = new Dictionary<string, StreamWrapper>(5);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Table of user-registered stream wrappers.\r\n        /// Stored as an instance variable in ScriptContext\r\n        /// (for every script there is one, it is initialized\r\n        /// to null - instance is created on first user-wrapper insertion).\r\n        /// </summary>\r\n        internal static Dictionary<string, StreamWrapper> UserWrappers\r\n        {\r\n            get\r\n            {\r\n                return ScriptContext.CurrentContext.UserStreamWrappers;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registered system stream wrappers for all requests.\r\n        /// </summary>\r\n        public static Hashtable SystemStreamWrappers { get { return systemStreamWrappers; } }\r\n\r\n#if SILVERLIGHT\r\n        //TODO: It should be synchronized version of Hashtable here.\r\n        private static readonly Hashtable systemStreamWrappers = new Hashtable(5);\r\n#else\r\n        private static readonly Hashtable systemStreamWrappers = Hashtable.Synchronized(new Hashtable(5));\r\n#endif\r\n\r\n\r\n\r\n        #endregion\r\n\r\n        #region Optional Dispose\r\n\r\n        /// <summary>\r\n        /// Release wrapper resources\r\n        /// </summary>\r\n        public virtual void Dispose() { }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Local Filesystem Wrapper\r\n\r\n    /// <summary>\r\n    /// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to \r\n    /// the local filesystem files.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// The virtual working directory is handled by the PhpPath class in \r\n    /// the Class Library. The absolute path resolution (using the working diretory and the <c>include_path</c>\r\n    /// if necessary) and open-basedir check is performed by the <see cref=\"PhpStream.ResolvePath\"/> method.\r\n    /// <newpara>\r\n    /// This wrapper expects the path to be an absolute local filesystem path\r\n    /// without the file:// scheme specifier.\r\n    /// </newpara>\r\n    /// </remarks>\r\n    public partial class FileStreamWrapper : StreamWrapper\r\n    {\r\n        /// <summary>\r\n        /// The protocol portion of URL handled by this wrapper.\r\n        /// </summary>\r\n        public const string scheme = \"file\";\r\n\r\n        #region Mandatory members\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n        public override string Label { get { return \"plainfile\"; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n        public override string Scheme { get { return scheme; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"IsUrl\"]/*'/>\r\n        public override bool IsUrl { get { return false; } }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region HTTP Stream Wrapper\r\n\r\n    /// <summary>\r\n    /// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to \r\n    /// remote files using the http protocol.\r\n    /// </summary>\r\n    public class HttpStreamWrapper : StreamWrapper\r\n    {\r\n        #region StreamWrapper overrides\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n        {\r\n            //\r\n            // verify parameters\r\n            //\r\n            Debug.Assert(path != null);\r\n\r\n            if (mode[0] != 'r')\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_open_write_unsupported\"));\r\n                return null;\r\n            }\r\n\r\n            StreamAccessOptions ao;\r\n            if (!ParseMode(mode, options, out ao) || !CheckOptions(ao, FileAccess.Read, path))\r\n                return null;\r\n\r\n            try\r\n            {\r\n                //\r\n                // create HTTP request\r\n                //\r\n#if SILVERLIGHT\r\n                /*HttpWebRequest request = new System.Windows.Browser.Net.BrowserHttpWebRequest(new Uri(path));*/\r\n                HttpWebRequest request = WebRequest.Create(new Uri(path)) as HttpWebRequest;\r\n                \r\n#else\r\n                HttpWebRequest request = WebRequest.Create(path) as HttpWebRequest;\r\n#endif\r\n                if (request == null)\r\n                {\r\n                    // Not a HTTP URL.\r\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_url_invalid\",\r\n                      FileSystemUtils.StripPassword(path)));\r\n                    return null;\r\n                }\r\n\r\n                //\r\n                // apply stream context parameters\r\n                //\r\n                ApplyContext(request, context);\r\n\r\n                //\r\n                // get response synchronously\r\n                //\r\n                HttpWebResponse httpResponse = null;\r\n                Stream httpStream = null;\r\n\r\n#if SILVERLIGHT\r\n                System.Threading.AutoResetEvent evt1 = new System.Threading.AutoResetEvent(false);\r\n                request.BeginGetResponse(delegate(IAsyncResult ar)\r\n                {\r\n                    httpResponse = (HttpWebResponse)request.EndGetResponse(ar);\r\n                    httpStream = httpResponse.GetResponseStream();\r\n                    evt1.Set();\r\n                }, null);\r\n                evt1.WaitOne();\r\n\r\n#else\r\n                httpResponse = (HttpWebResponse)request.GetResponse();\r\n                httpStream = httpResponse.GetResponseStream();\r\n#endif\r\n\r\n                //\r\n                // create the PhpStream\r\n                //\r\n                return new NativeStream(httpStream, this, ao, path, context)\r\n                {\r\n                    WrapperSpecificData = CreateWrapperData(httpResponse)\r\n                };\r\n\r\n                // EX: check for StreamAccessOptions.Exclusive (N/A)\r\n            }\r\n            catch (UriFormatException)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_url_invalid\",\r\n                  FileSystemUtils.StripPassword(path)));\r\n            }\r\n            catch (NotSupportedException)\r\n            {\r\n                // \"Any attempt is made to access the method, when the method is not overridden in a descendant class.\"\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_url_method_invalid\",\r\n                  FileSystemUtils.StripPassword(path)));\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_error\",\r\n                  FileSystemUtils.StripPassword(path), e.Message));\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Init the parameters of the HttpWebRequest, use the StreamCOntext and/or default values.\r\n        /// </summary>\r\n        /// <param name=\"request\"></param>\r\n        /// <param name=\"context\"></param>\r\n        private static void ApplyContext(HttpWebRequest request, StreamContext context)\r\n        {\r\n            LocalConfiguration config = ScriptContext.CurrentContext.Config;\r\n\r\n#if !SILVERLIGHT\r\n\r\n            //\r\n            // timeout.\r\n            //\r\n            object timeout = context.GetOption(scheme, \"timeout\");\r\n            double dtimeout = (timeout != null) ? Convert.ObjectToDouble(timeout) : (double)config.FileSystem.DefaultSocketTimeout;\r\n            request.ReadWriteTimeout = (int)(dtimeout * 1000);\r\n\r\n            //\r\n            // max_redirects\r\n            //\r\n            object max_redirects = context.GetOption(scheme, \"max_redirects\");\r\n            int imax_redirects = (max_redirects != null) ? Convert.ObjectToInteger(max_redirects) : 20;// default: 20\r\n            if (imax_redirects > 1)\r\n                request.MaximumAutomaticRedirections = imax_redirects;\r\n            else\r\n                request.AllowAutoRedirect = false;\r\n\r\n            //\r\n            // protocol_version\r\n            //\r\n            object protocol_version = context.GetOption(scheme, \"protocol_version\");\r\n            double dprotocol_version = (protocol_version != null) ? Convert.ObjectToDouble(protocol_version) : 1.0;// default: 1.0\r\n            request.ProtocolVersion = new Version(dprotocol_version.ToString(\"F01\", System.Globalization.CultureInfo.InvariantCulture));\r\n#endif\r\n            //\r\n            // method - GET, POST, or any other HTTP method supported by the remote server.\r\n            //\r\n            string method = PhpVariable.AsString(context.GetOption(scheme, \"method\"));\r\n            if (method != null) request.Method = method;\r\n\r\n#if !SILVERLIGHT\r\n\r\n            //\r\n            // user_agent - Value to send with User-Agent: header. This value will only be used if user-agent is not specified in the header context option above.  php.ini setting: user_agent  \r\n            //\r\n            string agent = PhpVariable.AsString(context.GetOption(scheme, \"user_agent\"));\r\n            if (agent != null)\r\n                request.UserAgent = agent;\r\n            else if (config.FileSystem.UserAgent != null)\r\n                request.UserAgent = config.FileSystem.UserAgent;\r\n\r\n#endif\r\n\r\n            // TODO: proxy - URI specifying address of proxy server. (e.g. tcp://proxy.example.com:5100 ).    \r\n            // TODO: request_fulluri - When set to TRUE, the entire URI will be used when constructing the request. (i.e. GET http://www.example.com/path/to/file.html HTTP/1.0). While this is a non-standard request format, some proxy servers require it.  FALSE \r\n            // TODO: ssl -> array(verify_peer,verify_host)\r\n            //\r\n            // header - Additional headers to be sent during request. Values in this option will override other values (such as User-agent:, Host:, and Authentication:).    \r\n            //\r\n            string header = PhpVariable.AsString(context.GetOption(scheme, \"header\"));\r\n            if (header != null)\r\n            {\r\n                // EX: Use the individual headers, respect the system restricted-header list?\r\n                string[] lines = header.Split(new char[] { '\\n' }, StringSplitOptions.RemoveEmptyEntries);\r\n                foreach (string line in lines)\r\n                {\r\n                    int separator = line.IndexOf(':');\r\n                    if (separator <= 0) continue;\r\n                    string name = line.Substring(0, separator).Trim().ToLowerInvariant();\r\n                    string value = line.Substring(separator + 1, line.Length - separator - 1).Trim();\r\n\r\n                    switch (name)\r\n                    {\r\n                        case \"content-type\":\r\n                            request.ContentType = value;\r\n                            break;\r\n                        case \"content-length\":\r\n                            request.ContentLength = long.Parse(value);\r\n                            break;\r\n                        case \"user-agent\":\r\n                            request.UserAgent = value;\r\n                            break;\r\n                        case \"accept\":\r\n                            request.Accept = value;\r\n                            break;\r\n                        case \"connection\":\r\n                            request.Connection = value;\r\n                            break;\r\n                        case \"expect\":\r\n                            request.Expect = value;\r\n                            break;\r\n                        case \"date\":\r\n                            request.Headers[\"Date\"] =\r\n                                DateTime.Parse(value, System.Globalization.CultureInfo.InvariantCulture)\r\n                                .ToUniversalTime()\r\n                                .ToString(\"R\", System.Globalization.CultureInfo.InvariantCulture);\r\n                            break;\r\n                        case \"host\":\r\n                            request.Host = value;\r\n                            break;\r\n                        case \"if-modified-since\":\r\n                            request.IfModifiedSince = System.Convert.ToDateTime(value);\r\n                            break;\r\n                        case \"range\":\r\n                            request.AddRange(System.Convert.ToInt32(value));\r\n                            break;\r\n                        case \"referer\":\r\n                            request.Referer = value;\r\n                            break;\r\n                        case \"transfer-encoding\":\r\n                            request.TransferEncoding = value;\r\n                            break;\r\n\r\n                        default:\r\n                            request.Headers.Add(name, value);\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            //\r\n            // content - Additional data to be sent after the headers. Typically used with POST or PUT requests.    \r\n            //\r\n            string content = PhpVariable.AsString(context.GetOption(scheme, \"content\"));\r\n            if (content != null)\r\n            {\r\n                // Review - encoding?\r\n                UTF8Encoding encoding = new UTF8Encoding();\r\n                byte[] formBytes = encoding.GetBytes(content);\r\n\r\n                Stream body;\r\n\r\n#if SILVERLIGHT\r\n                    System.Threading.AutoResetEvent evt = new System.Threading.AutoResetEvent(false);\r\n                    request.BeginGetRequestStream(delegate(IAsyncResult ar)\r\n                    {\r\n                        body = request.EndGetRequestStream(ar);\r\n                        body.Write(formBytes, 0, formBytes.Length);\r\n                        body.Close();\r\n                        evt.Set();\r\n                    }, null);\r\n                    evt.WaitOne();\r\n#else\r\n                body = request.GetRequestStream();\r\n                body.Write(formBytes, 0, formBytes.Length);\r\n                body.Close();\r\n#endif\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// see stream_get_meta_data()[\"wrapper_data\"]\r\n        /// </summary>\r\n        /// <param name=\"response\"></param>\r\n        /// <returns></returns>\r\n        private static object CreateWrapperData(HttpWebResponse response)\r\n        {\r\n            if (response == null)\r\n                return null;\r\n\r\n            PhpArray array = new PhpArray();\r\n#if !SILVERLIGHT\r\n            array.Add(\"HTTP/\" + response.ProtocolVersion.ToString() + \" \" + (int)response.StatusCode + \" \" + response.StatusDescription);\r\n#else\r\n            array.Add(\"HTTP/1.0 \" + (int)response.StatusCode + \" \" + response.StatusDescription); // We don't have ProtocolVersion available, just return HTTP/1.0\r\n            //TODO: return real protocol version when we know how\r\n#endif\r\n\r\n            foreach (string key in response.Headers.AllKeys)\r\n            {\r\n                array.Add(key + \": \" + response.Headers[key]);\r\n            }\r\n\r\n            return array;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n        public override string Label { get { return \"HTTP\"; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n        public override string Scheme { get { return scheme; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"IsUrl\"]/*'/>\r\n        public override bool IsUrl { get { return true; } }\r\n\r\n        /// <summary>\r\n        /// The protocol portion of URL handled by this wrapper.\r\n        /// </summary>\r\n        public const string scheme = \"http\";\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Input/Output Stream Wrapper\r\n\r\n    /// <summary>\r\n    /// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to the PHP input/output streams.\r\n    /// </summary>\r\n    public partial class InputOutputStreamWrapper : StreamWrapper\r\n    {\r\n        #region StreamWrapper overrides\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n        {\r\n            Stream native = null;\r\n\r\n            StreamAccessOptions accessOptions;\r\n            if (!ParseMode(mode, options, out accessOptions))\r\n                return null;\r\n\r\n            // Do not close the system I/O streams.\r\n            accessOptions |= StreamAccessOptions.Persistent;\r\n\r\n            // EX: Use a cache of persistent streams (?) instead of static properties.\r\n\r\n            FileAccess supportedAccess;\r\n            switch (path)\r\n            {\r\n                // Standard IO streams are not available on Silverlight\r\n                // stdin/stdout/input/stderr, the only supported is 'output'\r\n#if !SILVERLIGHT\r\n                case \"php://stdin\":\r\n                    //rv = InputOutputStreamWrapper.In;\r\n                    native = Console.OpenStandardInput();\r\n                    supportedAccess = FileAccess.Read;\r\n                    break;\r\n\r\n                case \"php://stdout\":\r\n                    // rv = InputOutputStreamWrapper.Out;\r\n                    native = Console.OpenStandardOutput();\r\n                    supportedAccess = FileAccess.Write;\r\n                    break;\r\n\r\n                case \"php://stderr\":\r\n                    // rv = InputOutputStreamWrapper.Error;\r\n                    native = Console.OpenStandardError();\r\n                    supportedAccess = FileAccess.Write;\r\n                    break;\r\n\r\n                case \"php://input\":\r\n                    // rv = InputOutputStreamWrapper.ScriptInput;\r\n                    native = OpenScriptInput();\r\n                    supportedAccess = FileAccess.Read;\r\n                    break;\r\n#endif\r\n\r\n                case \"php://output\":\r\n                    // rv = InputOutputStreamWrapper.ScriptOutput;\r\n                    native = OpenScriptOutput();\r\n                    supportedAccess = FileAccess.Write;\r\n                    break;\r\n\r\n                default:\r\n                    const string filter_uri = \"php://filter/\";\r\n                    const string resource_param = \"/resource=\";\r\n\r\n                    // The only remaining option is the \"php://filter\"\r\n                    if (path.StartsWith(filter_uri))\r\n                    {\r\n                        int pos = path.IndexOf(resource_param, filter_uri.Length - 1);\r\n                        if (pos > 0)\r\n                        {\r\n                            string arguments = path.Substring(filter_uri.Length, pos - filter_uri.Length);\r\n                            path = path.Substring(pos + resource_param.Length);\r\n                            return OpenFiltered(path, arguments, mode, options, context);\r\n                        }\r\n\r\n                        // No URL resource specified.\r\n                        PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"url_resource_missing\"));\r\n                        return null;\r\n                    }\r\n                    else\r\n                    {\r\n                        // Unrecognized php:// stream name\r\n                        PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_invalid\",\r\n                          FileSystemUtils.StripPassword(path)));\r\n                        return null;\r\n                    }\r\n            }\r\n\r\n            if (!CheckOptions(accessOptions, supportedAccess, path))\r\n                return null;\r\n\r\n            if (native == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_invalid\",\r\n                  FileSystemUtils.StripPassword(path)));\r\n                return null;\r\n            }\r\n\r\n            PhpStream rv = new NativeStream(native, this, accessOptions, path, context);\r\n            rv.IsReadBuffered = rv.IsWriteBuffered = false;\r\n            return rv;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Opens a PhpStream and appends the stream filters.\r\n        /// </summary>\r\n        /// <param name=\"path\">The URL resource.</param>\r\n        /// <param name=\"arguments\">String containig '/'-separated options.</param>\r\n        /// <param name=\"mode\">Original mode.</param>\r\n        /// <param name=\"options\">Original options.</param>\r\n        /// <param name=\"context\">Original context.</param>\r\n        /// <returns></returns>\r\n        private PhpStream OpenFiltered(string path, string arguments, string mode, StreamOpenOptions options, StreamContext context)\r\n        {\r\n            PhpStream rv = PhpStream.Open(path, mode, options, context);\r\n            if (rv == null) return null;\r\n\r\n            // Note that only the necessary read/write chain is updated (depending on the StreamAccessOptions)\r\n            foreach (string arg in arguments.Split('/'))\r\n            {\r\n                if (String.Compare(arg, 0, \"read=\", 0, \"read=\".Length) == 0)\r\n                {\r\n                    foreach (string filter in arg.Substring(\"read=\".Length).Split('|'))\r\n                        PhpFilter.AddToStream(rv, filter, FilterChainOptions.Tail | FilterChainOptions.Read, null);\r\n                }\r\n                else if (String.Compare(arg, 0, \"write=\", 0, \"write=\".Length) == 0)\r\n                {\r\n                    foreach (string filter in arg.Substring(\"read=\".Length).Split('|'))\r\n                        PhpFilter.AddToStream(rv, filter, FilterChainOptions.Tail | FilterChainOptions.Write, null);\r\n                }\r\n                else\r\n                {\r\n                    foreach (string filter in arg.Split('|'))\r\n                        PhpFilter.AddToStream(rv, filter, FilterChainOptions.Tail | FilterChainOptions.ReadWrite, null);\r\n                }\r\n            }\r\n\r\n            return rv;\r\n        }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n        public override string Label { get { return \"InputOutput\"; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n        public override string Scheme { get { return scheme; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"IsUrl\"]/*'/>\r\n        public override bool IsUrl { get { return false; } }\r\n\r\n#if !SILVERLIGHT\r\n        /// <summary>\r\n        /// Represents the script input stream (containing the raw POST data).\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// It is a persistent binary stream. This means that it is never closed\r\n        /// by <c>fclose()</c> and no EOLN mapping is performed.\r\n        /// </remarks>\r\n        public static PhpStream ScriptInput\r\n        {\r\n            get\r\n            {\r\n                if (input == null)\r\n                {\r\n                    input = new NativeStream(OpenScriptInput(), null,\r\n                      StreamAccessOptions.Read | StreamAccessOptions.Persistent, \"php://input\", StreamContext.Default);\r\n                    input.IsReadBuffered = false;\r\n                    // EX: cache this as a persistent stream\r\n                }\r\n                return input;\r\n            }\r\n        }\r\n\r\n        [ThreadStatic]\r\n        private static PhpStream input = null;\r\n#endif\r\n\r\n        /// <summary>\r\n        /// Represents the script output stream (alias php://output).\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// It is a persistent binary stream. This means that it is never closed\r\n        /// by <c>fclose()</c> and no EOLN mapping is performed.\r\n        /// </remarks>\r\n        public static PhpStream ScriptOutput\r\n        {\r\n            get\r\n            {\r\n                Stream currentScriptOutput = OpenScriptOutput();\r\n                if (bytesink != currentScriptOutput)\r\n                {\r\n                    bytesink = currentScriptOutput;\r\n                    if (output != null) output.Close();\r\n                    output = new NativeStream(currentScriptOutput, null,\r\n                      StreamAccessOptions.Write | StreamAccessOptions.Persistent, \"php://output\", StreamContext.Default);\r\n                    output.IsWriteBuffered = false;\r\n                    // EX: cache this as a persistent stream\r\n                }\r\n                return output;\r\n            }\r\n        }\r\n#if SILVERLIGHT\r\n\t\t//TODO: Silverlight doesn't have ThreadStatic, it should be done in different way... now output is just a normal static field\r\n\t\tprivate static PhpStream output;\r\n#else\r\n        [ThreadStatic]\r\n        private static PhpStream output = null;\r\n#endif\r\n        private static Stream bytesink = null;\r\n\r\n#if !SILVERLIGHT\r\n        /// <summary>\r\n        /// Opens the script input (containing raw POST data).\r\n        /// </summary>\r\n        /// <returns>The corresponding native stream opened for reading.</returns>\r\n        private static Stream OpenScriptInput()\r\n        {\r\n            System.Web.HttpContext http_context = System.Web.HttpContext.Current;\r\n\r\n            if (http_context != null)\r\n                return http_context.Request.InputStream;\r\n            return Console.OpenStandardInput();\r\n        }\r\n#endif\r\n\r\n        /// <summary>\r\n        /// Opens the script output (binary output sink of the script).\r\n        /// </summary>\r\n        /// <returns>The corresponding native stream opened for writing.</returns>\r\n        private static Stream OpenScriptOutput()\r\n        {\r\n            return ScriptContext.CurrentContext.OutputStream;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The protocol portion of URL handled by this wrapper.\r\n        /// </summary>\r\n        public const string scheme = \"php\";\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region FTP Stream Wrapper\r\n    /*\r\n    /// <summary>\r\n  /// Derived from <see cref=\"StreamWrapper\"/>, this class provides access to \r\n  /// remote files using the ftp protocol.\r\n  /// </summary>\r\n  public class FtpStreamWrapper : StreamWrapper\r\n  {\r\n  #region StreamWrapper overrides\r\n    /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Open\"]/*'/>\r\n    public override PhpStream Open(string path, string mode, StreamOpenOptions options, out string opened_path, PhpResource context)\r\n    {\r\n      opened_path = path;\r\n      return null;\r\n    }\r\n    \r\n      /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n    public abstract string Label { get { return \"FTP\"; } }\r\n\r\n    /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n    public abstract string Scheme { get { return scheme; } }\r\n\r\n\r\n\r\n    /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Stat\"]/*'/>\r\n    public override StatStruct Stat(string path)\r\n    {\r\n      return null;\r\n    }\r\n\r\n    /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Unlink\"]/*'/>\r\n    public override bool Unlink(string path, int options, StreamContext context)\r\n    {\r\n      return false;\r\n    }\r\n\r\n    /// <include file='Doc/Wrappers.xml' path='docs/method[@name=\"Listing\"]/*'/>\r\n    public override string[] Listing(string path, int options, StreamContext context)\r\n    {\r\n      return null;\r\n    }\r\n\r\n    /// <summary>\r\n    /// The protocol portion of URL handled by this wrapper.\r\n    /// </summary>\r\n    public const string scheme = \"ftp\";\r\n  #endregion\r\n  }\r\n/**/\r\n    #endregion\r\n\r\n    #region User-space Stream Wrapper\r\n\r\n    /// <summary>\r\n    /// Derived from <see cref=\"StreamWrapper\"/>, this class is built\r\n    /// using reflection upon a user-defined stream wrapper.\r\n    /// A PhpStream descendant is defined upon the instance methods of \r\n    /// the given PHP class.\r\n    /// </summary>\r\n    public class UserStreamWrapper : StreamWrapper\r\n    {\r\n        private readonly ScriptContext/*!*/context;\r\n        private readonly string scheme;\r\n        private readonly Reflection.DTypeDesc/*!*/wrapperTypeDesc;\r\n        private readonly bool isUrl;\r\n\r\n        #region Wrapper methods invocation\r\n\r\n        /// <summary>\r\n        /// Lazily instantiated <see cref=\"wrapperTypeDesc\"/>. PHP instantiates the wrapper class when used for the first time.\r\n        /// </summary>\r\n        protected Reflection.DObject/*!*/WrapperTypeInstance\r\n        {\r\n            get\r\n            {\r\n                if (_wrapperTypeInstance == null)\r\n                    _wrapperTypeInstance = (Reflection.DObject)wrapperTypeDesc.New(context);\r\n\r\n                return _wrapperTypeInstance;\r\n            }\r\n        }\r\n        private Reflection.DObject _wrapperTypeInstance; // lazily instantiated wrapper type\r\n\r\n        /// <summary>\r\n        /// Invoke wrapper method on wrapper instance.\r\n        /// </summary>\r\n        /// <param name=\"method\"></param>\r\n        /// <param name=\"args\"></param>\r\n        /// <returns></returns>\r\n        public object InvokeWrapperMethod(string method, params object[] args)\r\n        {\r\n            if (args == null || args.Length == 0)\r\n                context.Stack.AddFrame();\r\n            else\r\n                context.Stack.AddFrame(args);\r\n\r\n            return WrapperTypeInstance.InvokeMethod(method, null, context);\r\n        }\r\n\r\n        #endregion\r\n\r\n        public UserStreamWrapper(ScriptContext/*!*/context, string protocol, Reflection.DTypeDesc/*!*/wrapperTypeDesc, bool isUrl)\r\n        {\r\n            Debug.Assert(wrapperTypeDesc != null);\r\n            Debug.Assert(!string.IsNullOrEmpty(protocol));\r\n\r\n            // Create a new PhpWrapper instance above the given class (reflection)\r\n            // Note: when a member is not defined (Error): \"Call to unimplemented method:\r\n            // variablestream::stream_write is not implemented!\"\r\n\r\n            this.context = context;\r\n            this.scheme = protocol;\r\n            this.wrapperTypeDesc = wrapperTypeDesc;\r\n            this.isUrl = isUrl;\r\n        }\r\n\r\n        #region StreamWrapper overrides\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Label\"]/*'/>\r\n        public override string Label { get { return \"user-space\"; } }\r\n\r\n        /// <include file='Doc/Wrappers.xml' path='docs/property[@name=\"Scheme\"]/*'/>\r\n        public override string Scheme { get { return scheme; } }\r\n\r\n        public override bool IsUrl { get { return isUrl; } }\r\n\r\n        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n        {\r\n            var opened_path = new PhpReference(path);\r\n            object result = InvokeWrapperMethod(PhpUserStream.USERSTREAM_OPEN, path, mode, (int)options, opened_path);\r\n\r\n            if (Convert.ObjectToBoolean(result))\r\n            {\r\n                string opened_path_str = PhpVariable.AsString(opened_path.Value);\r\n                if (opened_path_str != null) path = opened_path_str;\r\n\r\n                FileMode fileMode;\r\n                FileAccess fileAccess;\r\n                StreamAccessOptions ao;\r\n\r\n                if (!ParseMode(mode, options, out fileMode, out fileAccess, out ao)) return null;\r\n                return new PhpUserStream(this, ao, path, context);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        public override void OnClose(PhpStream stream)\r\n        {\r\n            // stream_close:\r\n            var result = InvokeWrapperMethod(PhpUserStream.USERSTREAM_CLOSE);\r\n\r\n            if (_wrapperTypeInstance != null) // always\r\n            {\r\n                _wrapperTypeInstance.Dispose();\r\n                _wrapperTypeInstance = null;\r\n            }\r\n\r\n            //\r\n            base.OnClose(stream);\r\n        }\r\n\r\n        public override PhpArray OnStat(PhpStream stream)\r\n        {\r\n            return base.OnStat(stream);\r\n        }\r\n\r\n        public override bool RemoveDirectory(string path, StreamRemoveDirectoryOptions options, StreamContext context)\r\n        {\r\n            return base.RemoveDirectory(path, options, context);\r\n        }\r\n\r\n        public override bool Rename(string fromPath, string toPath, StreamRenameOptions options, StreamContext context)\r\n        {\r\n            return base.Rename(fromPath, toPath, options, context);\r\n        }\r\n\r\n        public override StatStruct Stat(string path, StreamStatOptions options, StreamContext context, bool streamStat)\r\n        {\r\n            PhpArray arr = (streamStat ?\r\n                this.InvokeWrapperMethod(PhpUserStream.USERSTREAM_STAT) :\r\n                this.InvokeWrapperMethod(PhpUserStream.USERSTREAM_STATURL, path, options)) as PhpArray;\r\n\r\n            if (arr != null)\r\n            {\r\n                return new StatStruct()\r\n                {\r\n                    st_dev = (uint)Convert.ObjectToLongInteger(arr[\"dev\"]),\r\n                    st_ino = (ushort)Convert.ObjectToLongInteger(arr[\"ino\"]),\r\n                    st_mode = (ushort)Convert.ObjectToLongInteger(arr[\"mode\"]),\r\n                    st_nlink = (short)Convert.ObjectToLongInteger(arr[\"nlink\"]),\r\n                    st_uid = (short)Convert.ObjectToLongInteger(arr[\"uid\"]),\r\n                    st_gid = (short)Convert.ObjectToLongInteger(arr[\"gid\"]),\r\n                    st_rdev = (uint)Convert.ObjectToLongInteger(arr[\"rdev\"]),\r\n                    st_size = (int)Convert.ObjectToLongInteger(arr[\"size\"]),\r\n\r\n                    st_atime = (long)Convert.ObjectToLongInteger(arr[\"atime\"]),\r\n                    st_mtime = (long)Convert.ObjectToLongInteger(arr[\"mtime\"]),\r\n                    st_ctime = (long)Convert.ObjectToLongInteger(arr[\"ctime\"]),\r\n\r\n                    //st_blksize = (long)Convert.ObjectToLongInteger(arr[\"blksize\"]),\r\n                    //st_blocks = (long)Convert.ObjectToLongInteger(arr[\"blocks\"]),\r\n                };\r\n            }\r\n\r\n            return new StatStruct();\r\n        }\r\n\r\n        public override bool Unlink(string path, StreamUnlinkOptions options, StreamContext context)\r\n        {\r\n            return Convert.ObjectToBoolean(this.InvokeWrapperMethod(PhpUserStream.USERSTREAM_UNLINK, path));\r\n        }\r\n\r\n        public override string[] Listing(string path, StreamListingOptions options, StreamContext context)\r\n        {\r\n            return base.Listing(path, options, context);\r\n        }\r\n\r\n        public override bool MakeDirectory(string path, int accessMode, StreamMakeDirectoryOptions options, StreamContext context)\r\n        {\r\n            return base.MakeDirectory(path, accessMode, options, context);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Utilities/GlobalScope.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Dynamic;\r\nusing System.Linq.Expressions;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.Binders;\r\nusing PHP.Core.Emit;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Utilities\r\n{\r\n    #region BaseScope\r\n\r\n    /// <summary>\r\n    /// Base class for all the convenience dynamic objects for accessing global elements \r\n    /// </summary>\r\n    public abstract class BaseScope : DynamicObject\r\n    {\r\n        private ScriptContext context;\r\n        private string ns;\r\n        private string nsSlash;\r\n\r\n        protected const string ConstID = \"const\";\r\n        protected const string NamespaceID = \"namespace\";\r\n        protected const string ClassID = \"class\";\r\n\r\n        public string Namespace\r\n        {\r\n            get { return ns; }\r\n        }\r\n\r\n        public bool UseNamespaces\r\n        {\r\n            get { return ns != null; }\r\n        }\r\n\r\n        public ScriptContext Context\r\n        {\r\n            get { return context; }\r\n        }\r\n\r\n        internal BaseScope(ScriptContext context)\r\n        {\r\n            this.context = context;\r\n        }\r\n\r\n        internal BaseScope(ScriptContext context, string namespaceName)\r\n            :this(context)\r\n        {\r\n            this.ns = namespaceName;\r\n            this.nsSlash = this.ns + QualifiedName.Separator;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Transforms given name to be full name including namespaces\r\n        /// </summary>\r\n        public string GetFullName(string name)\r\n        {\r\n            if (UseNamespaces)\r\n                return nsSlash + name;\r\n\r\n            return name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Wrap all arguments to Phalanger objects only if the type is not primitive\r\n        /// </summary>\r\n        /// <param name=\"args\"></param>\r\n        /// <returns></returns>\r\n        protected static object[] wrapArgs(Object[] args)\r\n        {\r\n            object[] wrappedArgs = new object[args.Length];\r\n\r\n            for (int i = 0; i < args.Length; ++i)\r\n            {\r\n                Debug.Assert(!(args[i] is PhpReference));\r\n                wrappedArgs[i] = ClrObject.WrapDynamic(args[i]);\r\n            }\r\n            return wrappedArgs;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region GlobalScope\r\n\r\n    /// <summary>\r\n    /// Convenience class for accessing global functions and global variables\r\n    /// </summary>\r\n    public class GlobalScope : BaseScope\r\n    {\r\n        private ClassesScope classes;\r\n        private NamespaceScope namespaces;\r\n        private ConstsScope consts;\r\n\r\n        /// <summary>\r\n        /// Gets ClassesScope dynamic object that represents types defined in global scope\r\n        /// </summary>\r\n        protected ClassesScope Classes\r\n        {\r\n            get\r\n            {\r\n                if (classes == null)\r\n                {\r\n                    if (UseNamespaces)\r\n                        classes = new ClassesScope(this.Context, Namespace);\r\n                    else\r\n                        classes = new ClassesScope(this.Context);\r\n                }\r\n\r\n                return classes;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets ConstsScope dynamic object that represents types defined in global scope\r\n        /// </summary>\r\n        protected ConstsScope Consts\r\n        {\r\n            get\r\n            {\r\n                if (consts == null)\r\n                {\r\n                    if (UseNamespaces)\r\n                        consts = new ConstsScope(this.Context, Namespace);\r\n                    else\r\n                        consts = new ConstsScope(this.Context);\r\n                }\r\n\r\n                return consts;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets NamespaceScope dynamic object that represents namespaces defined in global scope\r\n        /// </summary>\r\n        private NamespaceScope Namespaces\r\n        {\r\n            get\r\n            {\r\n                if (namespaces == null)\r\n                    namespaces = new NamespaceScope(this.Context);\r\n\r\n                return namespaces;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize GlobalScope object\r\n        /// </summary>\r\n        /// <param name=\"currentContext\"></param>\r\n        internal GlobalScope(ScriptContext currentContext)\r\n            : base(currentContext)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize GlobalScope object with namespace specified\r\n        /// </summary>\r\n        /// <param name=\"currentContext\"></param>\r\n        /// <param name=\"namespaceName\"></param>\r\n        protected GlobalScope(ScriptContext currentContext, string namespaceName)\r\n            : base(currentContext, namespaceName)\r\n        {\r\n        }\r\n\r\n\r\n        #region DynamicObject\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for invoke operation for global function\r\n        /// </summary>\r\n        public override bool TryInvokeMember(\r\n            InvokeMemberBinder binder,\r\n            Object[] args,\r\n            out Object result\r\n        )\r\n        {\r\n            return TryInvokeMember(binder.Name, args, out result);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for get operation for global variable\r\n        /// </summary>\r\n        public override bool TryGetMember(\r\n            GetMemberBinder binder,\r\n            out Object result\r\n        )\r\n        {\r\n            switch (binder.Name)\r\n            {\r\n                case ClassID:\r\n                    result = Classes;\r\n                    return true;\r\n\r\n                case ConstID:\r\n                    result = Consts;\r\n                    return true;\r\n\r\n                case NamespaceID:\r\n                    result = Namespaces;\r\n                    return true;\r\n            }\r\n\r\n            result = PhpVariable.Unwrap(Operators.GetVariable(Context, null, binder.Name));\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for set operation for global function\r\n        /// </summary>\r\n        public override bool TrySetMember(\r\n            SetMemberBinder binder,\r\n            Object value\r\n        )\r\n        {\r\n            return TrySetMember(binder.Name, value);\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for invoke operation for global function\r\n        /// </summary>\r\n        public bool TryInvokeMember(\r\n            string memberName,\r\n            Object[] args,\r\n            out Object result\r\n        )\r\n        {\r\n            result = PhpVariable.Unwrap(PhpVariable.Dereference(Context.Call(memberName, null, null, wrapArgs(args))));\r\n            return true;\r\n        }\r\n\r\n        public bool TrySetMember(\r\n            string memberName,\r\n            Object value)\r\n        {\r\n            Operators.SetVariable(Context, null, memberName, ClrObject.WrapDynamic(value));\r\n            return true;\r\n        }\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region NamespaceScope\r\n\r\n    /// <summary>\r\n    /// Dynamic Obeject for representing PHP namespaces\r\n    /// </summary>\r\n    public class NamespaceScope : GlobalScope\r\n    {\r\n\r\n        internal NamespaceScope(ScriptContext context)\r\n            : base(context)\r\n        {\r\n        }\r\n\r\n        private NamespaceScope(ScriptContext context, string namespaceName)\r\n            : base(context, namespaceName)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for invoke operation for global function\r\n        /// </summary>\r\n        public override bool TryInvokeMember(\r\n            InvokeMemberBinder binder,\r\n            Object[] args,\r\n            out Object result\r\n        )\r\n        {\r\n            return TryInvokeMember(GetFullName(binder.Name), args, out result);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for get operation for global variable in namespace\r\n        /// </summary>\r\n        public override bool TryGetMember(\r\n            GetMemberBinder binder,\r\n            out Object result\r\n        )\r\n        {\r\n            switch (binder.Name)\r\n            {\r\n                case ClassID:\r\n                    result = Classes;\r\n                    return true;\r\n\r\n                case ConstID:\r\n                    result = Consts;\r\n                    return true;\r\n            }\r\n\r\n            result = new NamespaceScope(Context, GetFullName(binder.Name));\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for set operation for global function in namespace\r\n        /// </summary>\r\n        public override bool TrySetMember(\r\n            SetMemberBinder binder,\r\n            Object value\r\n        )\r\n        {\r\n            TrySetMember(GetFullName(binder.Name),value);\r\n            return true;\r\n        }\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ClassScope\r\n\r\n    /// <summary>\r\n    /// Dynamic scope for reprensenting static members of class\r\n    /// </summary>\r\n    public class ClassScope : BaseScope\r\n    {\r\n        private DTypeDesc type;\r\n\r\n        internal ClassScope(ScriptContext context, DTypeDesc type)\r\n            : base(context)\r\n        {\r\n            this.type = type;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for invoke operation for static method\r\n        /// </summary>\r\n        public override bool TryInvokeMember(\r\n            InvokeMemberBinder binder,\r\n            Object[] args,\r\n            out Object result\r\n        )\r\n        {\r\n            Context.Stack.AddFrame(wrapArgs(args));\r\n            result = PhpVariable.Unwrap(PhpVariable.Dereference(Operators.InvokeStaticMethod(type, binder.Name, null, null, Context)));\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for get operation for static variable\r\n        /// </summary>\r\n        public override bool TryGetMember(\r\n            GetMemberBinder binder,\r\n            out Object result\r\n        )\r\n        {\r\n            if (binder.Name == ConstID)\r\n            {\r\n                result = new ConstsScope(Context,type);\r\n                return true;\r\n            }\r\n\r\n            result = PhpVariable.Unwrap(PhpVariable.Dereference(Operators.GetStaticProperty(type, binder.Name, null, Context, false)));\r\n            return true;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for set operation for static variable\r\n        /// </summary>\r\n        public override bool TrySetMember(\r\n            SetMemberBinder binder,\r\n            Object value\r\n        )\r\n        {\r\n            Operators.SetStaticProperty(type, binder.Name, ClrObject.WrapDynamic(value), null, Context);\r\n            return true;\r\n\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ClassesScope\r\n\r\n    /// <summary>\r\n    /// Dynamic Object for representing PHP classes\r\n    /// </summary>\r\n    public class ClassesScope : BaseScope\r\n    {\r\n\r\n        internal ClassesScope(ScriptContext context)\r\n            : base(context)\r\n        {\r\n        }\r\n\r\n        internal ClassesScope(ScriptContext context, string namespaceName)\r\n            : base(context, namespaceName)\r\n        {\r\n        }\r\n\r\n        private DTypeDesc ResolveType(string name)\r\n        {\r\n            return Context.ResolveType(GetFullName(name), null, null, null, ResolveTypeFlags.UseAutoload | ResolveTypeFlags.ThrowErrors);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates new instance of specified PHP class \r\n        /// </summary>\r\n        public override bool TryInvokeMember(\r\n            InvokeMemberBinder binder,\r\n            Object[] args,\r\n            out Object result\r\n        )\r\n        {\r\n            Context.Stack.AddFrame(wrapArgs(args));\r\n            DTypeDesc type = ResolveType(binder.Name);\r\n            result = Operators.New(type, null, Context, null);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets dynamic object representing classes\r\n        /// </summary>\r\n        public override bool TryGetMember(\r\n            GetMemberBinder binder,\r\n            out Object result\r\n        )\r\n        {\r\n            DTypeDesc resType = ResolveType(binder.Name);\r\n            result = new ClassScope(Context, resType);\r\n            return true;\r\n        }\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ConstsScope\r\n\r\n    /// <summary>\r\n    /// Dynamic Object for representing PHP constants\r\n    /// </summary>\r\n    public class ConstsScope : BaseScope\r\n    {\r\n        private DTypeDesc type;\r\n\r\n        internal ConstsScope(ScriptContext context)\r\n            : base(context)\r\n        {\r\n        }\r\n\r\n        internal ConstsScope(ScriptContext context, string namespaceName)\r\n            : base(context, namespaceName)\r\n        {\r\n        }\r\n\r\n        internal ConstsScope(ScriptContext context, DTypeDesc type)\r\n            : base(context)\r\n        {\r\n            this.type = type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for get operation for a constant\r\n        /// </summary>\r\n        public override bool TryGetMember(\r\n            GetMemberBinder binder,\r\n            out Object result\r\n        )\r\n        {\r\n            if (type != null)\r\n            {\r\n                result = Operators.GetClassConstant(type, binder.Name, null, Context);\r\n                return true;\r\n            }\r\n\r\n            result = Context.GetConstantValue(GetFullName(binder.Name), false, false);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Specifies dynamic behavior for set operation for a constant\r\n        /// </summary>\r\n        public override bool TrySetMember(\r\n            SetMemberBinder binder,\r\n            Object value\r\n        )\r\n        {\r\n            if (type != null)\r\n            {\r\n                PhpException.Throw(PhpError.Error, String.Format( PHP.Core.Localizations.Strings.constant_redefined, type.MakeFullName() + Name.ClassMemberSeparator + binder.Name));\r\n                return true;\r\n            }\r\n\r\n            Context.DefineConstant(GetFullName(binder.Name), value);\r\n            return true;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Utils.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.Serialization;\r\nusing System.Configuration;\r\nusing System.Web;\r\nusing System.Security.Permissions;\r\nusing System.Web.Configuration;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Debug\r\n\r\n\t/// <summary>\r\n\t/// Support for debugging.\r\n\t/// </summary>\r\n\tpublic static partial class DebugUtils\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Initializes log logging in the context of web server.\r\n\t\t/// The log file is created in <see cref=\"HttpRuntime.CodegenDir\"/> directory.\r\n\t\t/// </summary>\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tinternal static void WebInitialize()\r\n\t\t{\r\n            try\r\n            {\r\n                string debug_dir = Path.Combine(HttpRuntime.CodegenDir, \"Debug\");\r\n                string debug_file = DateTime.Now.ToString(\"HH-mm-ss-ffff\") + \".log\";\r\n                Directory.CreateDirectory(debug_dir);\r\n\r\n                StreamWriter writer = new StreamWriter(Path.Combine(debug_dir, debug_file));\r\n\r\n                writer.AutoFlush = true;\r\n                TextWriterTraceListener listener = new TextWriterTraceListener(writer);\r\n                listener.IndentSize = 2;\r\n\r\n                System.Diagnostics.Debug.Listeners.Clear();\r\n                System.Diagnostics.Debug.Listeners.Add(listener);\r\n            }\r\n            catch\r\n            { }\r\n\t\t}\r\n\r\n\t\t[Conditional(\"DEBUG\")]\r\n\t\tpublic static void ConsoleInitialize(string dir)\r\n\t\t{\r\n\t\t\tDirectory.CreateDirectory(dir);\r\n\r\n\t\t\tStreamWriter writer = new StreamWriter(Path.Combine(dir, DateTime.Now.ToString(\"HH-mm-ss-ffff\") + \".log\"));\r\n\r\n\t\t\twriter.AutoFlush = true;\r\n\t\t\tTextWriterTraceListener listener = new TextWriterTraceListener(writer);\r\n\t\t\tlistener.IndentSize = 2;\r\n\r\n\t\t\tSystem.Diagnostics.Debug.Listeners.Clear();\r\n\t\t\tSystem.Diagnostics.Debug.Listeners.Add(listener);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Config Utils\r\n\r\n\t/// <summary>\r\n\t/// Utils for parsing Phalanger XML configuration file.\r\n\t/// </summary>\r\n\tpublic static class ConfigUtils\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Exception thrown if a node is invalid.\r\n\t\t/// </summary>\r\n\t\tpublic class InvalidNodeException : ConfigurationErrorsException\r\n\t\t{\r\n\t\t\tpublic InvalidNodeException(XmlNode node)\r\n\t\t\t\t: base(CoreResources.GetString(\"invalid_node\"), node)\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Exception thrown if a value of an attribute is not valid.\r\n\t\t/// </summary>\r\n\t\tpublic class InvalidAttributeValueException : ConfigurationErrorsException\r\n\t\t{\r\n\t\t\tpublic InvalidAttributeValueException(XmlNode node, string attributeName)\r\n\t\t\t\t: base(CoreResources.GetString(\"invalid_attribute_value\", attributeName), node) { }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a string value contained in the mandatory attribute of specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node which attribute get.</param>\r\n\t\t/// <param name=\"name\">The name of attribute.</param>\r\n\t\t/// <returns>The string value contained in the attribute.</returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">The attribute is missing.</exception>\r\n\t\tpublic static string MandatoryAttribute(XmlNode/*!*/ node, string/*!*/ name)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tXmlAttribute a = node.Attributes[name];\r\n\t\t\tif (a == null)\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"missing_attribute\", name), node);\r\n\t\t\t}\r\n\t\t\treturn a.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a string value contained in the optional attribute of specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node which attribute get.</param>\r\n\t\t/// <param name=\"name\">The name of attribute.</param>\r\n\t\t/// <returns>The string value contained in the attribute or a <B>null</B> reference if the attribute is missing.</returns>\r\n\t\tpublic static string OptionalAttribute(XmlNode/*!*/ node, string/*!*/ name)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n\t\t\tif (name == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"name\");\r\n\r\n\t\t\tXmlAttribute a = node.Attributes[name];\r\n\t\t\treturn (a != null) ? a.Value : null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration contained in the specified node.\r\n\t\t/// The section is expected to follow Phalanger configuration schema.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node to parse.</param>\r\n\t\t/// <param name=\"context\">The configuration context or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"section1\">The section to fill in.</param>\r\n\t\tpublic static void ParseNameValueList(XmlNode/*!*/ node, PhpConfigurationContext context,\r\n\t\t\tIPhpConfigurationSection/*!*/ section1)\r\n\t\t{\r\n\t\t\tParseNameValueList(node, context, section1, null, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration contained in the specified node.\r\n\t\t/// The section is expected to follow Phalanger configuration schema.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node to parse.</param>\r\n\t\t/// <param name=\"context\">The configuration context or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"section1\">The first section to fill in.</param>\r\n\t\t/// <param name=\"section2\">The second section to fill in if the first doesn't contain the option.</param>\r\n\t\tpublic static void ParseNameValueList(XmlNode/*!*/ node, PhpConfigurationContext context,\r\n\t\t\tIPhpConfigurationSection/*!*/ section1, IPhpConfigurationSection section2)\r\n\t\t{\r\n\t\t\tParseNameValueList(node, context, section1, section2, null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration contained in the specified node.\r\n\t\t/// The section is expected to follow Phalanger configuration schema.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node to parse.</param>\r\n\t\t/// <param name=\"context\">The configuration context or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"section1\">The first section to fill in.</param>\r\n\t\t/// <param name=\"section2\">The second section to fill in if the first doesn't contain the option. Can be <B>null</B>.</param>\r\n\t\t/// <param name=\"section3\">The third section to fill in if neither the first not the second contain the option. Can be <B>null</B>.</param>\r\n\t\t/// <remarks>\r\n\t\t/// The following node type is allowed to be contained in the <paramref name=\"node\"/>:\r\n\t\t/// <code>\r\n\t\t///   &lt;set name=\"{string}\" value=\"{string}\" [allowOverride=\"{bool}\"] /&gt;\r\n\t\t///   &lt;set name=\"{string}\" [allowOverride=\"{bool}\"] &gt; ... &lt;/set&gt;\r\n\t\t/// </code>                                          \r\n\t\t/// </remarks>\r\n\t\tpublic static void ParseNameValueList(XmlNode/*!*/ node, PhpConfigurationContext context,\r\n\t\t\tIPhpConfigurationSection/*!*/ section1, IPhpConfigurationSection section2, IPhpConfigurationSection section3)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n\t\t\tif (section1 == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"section1\");\r\n\r\n\t\t\tforeach (XmlNode child in node.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (child.Name == \"set\")\r\n\t\t\t\t{\r\n\t\t\t\t\tstring name = MandatoryAttribute(child, \"name\");\r\n\t\t\t\t\tstring allow_override = OptionalAttribute(child, \"allowOverride\");\r\n\t\t\t\t\tstring/*!*/value = OptionalAttribute(child, \"value\") ?? string.Empty;\r\n\r\n\t\t\t\t\t// checks for sealed nodes:\r\n\t\t\t\t\tif (context != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (context.IsOptionSealed(name))\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"cannot_modify_option\", context.GetSealingLocation(name)), child);\r\n\r\n\t\t\t\t\t\tif (allow_override != null && context.IsSubApplicationConfig())\r\n\t\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"invalid_attribute_location\", context.VirtualPath, \"allowOverride\"), node);\r\n\r\n\t\t\t\t\t\tif (allow_override == \"false\")\r\n\t\t\t\t\t\t\tcontext.SealOption(name);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// processes the option:                             \t\t\t\t\t\r\n\t\t\t\t\tif ((/*section1 == null ||*/ !section1.Parse(name, value, child)) &&\r\n\t\t\t\t\t\t(section2 == null || !section2.Parse(name, value, child)) &&\r\n\t\t\t\t\t\t(section3 == null || !section3.Parse(name, value, child)))\r\n\t\t\t\t\t\tthrow new InvalidAttributeValueException(child, \"name\");\r\n\t\t\t\t}\r\n\t\t\t\telse if (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new InvalidNodeException(child);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration contained in the specified node and its children in a form of flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node.</param>\r\n\t\t/// <param name=\"value\">An initial value of the flags.</param>\r\n\t\t/// <param name=\"type\">The type of flag enumeration.</param>\r\n\t\t/// <returns>An updated value after all flags stated in the sub-nodes are added/removed/cleared.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The following node types are allowed to be contained in the <paramref name=\"node\"/>:\r\n\t\t/// <code>\r\n\t\t///  (&lt;add value=\"{enum field list}\" /&gt; |\r\n\t\t///   &lt;remove value=\"{enum field list}\" /&gt; |\r\n\t\t///   &lt;clear/&gt;)*\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\tpublic static int ParseFlags(XmlNode/*!*/ node, int value, Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n\t\t\tif (type == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"type\");\r\n\t\t\tif (!type.IsEnum)\r\n\t\t\t\tthrow new ArgumentException(\"Type must be an enumeration.\");\r\n\r\n\t\t\tforeach (XmlNode child in node.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tswitch (child.Name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"add\":\r\n\t\t\t\t\tcase \"remove\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstring s = ConfigUtils.MandatoryAttribute(child, \"value\");\r\n\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint v = (s != \"\") ? (int)Enum.Parse(type, s, true) : 0;\r\n\r\n\t\t\t\t\t\t\t\tif (child.Name == \"remove\")\r\n\t\t\t\t\t\t\t\t\tvalue &= ~v;\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\tvalue |= v;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcatch (Exception)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidAttributeValueException(child, \"value\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"clear\":\r\n\t\t\t\t\t\tvalue = 0;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t\t\t\tthrow new InvalidNodeException(child);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Get the file name of given <see cref=\"XmlDocument\"/>.\r\n        /// </summary>\r\n        /// <param name=\"document\">Xml config file.</param>\r\n        /// <returns>File name of the xml document or null.</returns>\r\n        public static string GetConfigXmlPath(XmlDocument/*!*/document)\r\n        {\r\n            Debug.Assert(document != null);\r\n\r\n            var errorInfo = document as System.Configuration.Internal.IConfigErrorInfo;\r\n            var configXml = document as System.Configuration.ConfigXmlDocument;\r\n\r\n            if (document.BaseURI != \"\")\r\n                return document.BaseURI;\r\n            else if (errorInfo != null)\r\n                return errorInfo.Filename;\r\n            else if (configXml != null)\r\n                return configXml.Filename;\r\n            else\r\n                return AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine the configuration file for given <see cref=\"XmlNode\"/> and its last modification time.\r\n        /// </summary>\r\n        /// <param name=\"node\"><see cref=\"XmlNode\"/> from a configuration file.</param>\r\n        /// <param name=\"maxTimeUtc\">Currently latest modification time. The returned value cannot be lower.</param>\r\n        /// <returns>Time of the configuration file modification or <see cref=\"DateTime.MinValue\"/>.</returns>\r\n        public static DateTime GetConfigModificationTimeUtc(XmlNode/*!*/node, DateTime maxTimeUtc)\r\n        {\r\n            Debug.Assert(node != null);\r\n\r\n            try\r\n            {\r\n                var d = FileSystemUtils.GetLastModifiedTimeUtc(GetConfigXmlPath(node.OwnerDocument));\r\n                return (d > maxTimeUtc) ? d : maxTimeUtc;\r\n            }\r\n            catch\r\n            {\r\n                return maxTimeUtc;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the full URI of the specified <c>url</c>. Uses path of the configuration file to resolve URI.\r\n        /// If the path is not available, uses current directory.\r\n        /// </summary>\r\n        /// <param name=\"node\">The XML node used to obtain the uri.</param>\r\n        /// <param name=\"url\">Relative or absolute URL of the file.</param>\r\n        /// <returns>Resolved URI from <c>url</c>. To resolve relative path it use the file name of the XML.\r\n        /// It filename cannot be resolved from the <c>node</c> it uses current configuration path.</returns>\r\n        public static Uri GetUri(XmlNode node, string url)\r\n        {\r\n            return new Uri(new Uri(GetConfigXmlPath(node.OwnerDocument)), url);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a list of string items inserting parsed values in a specified list.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">XML node containing a list.</param>\r\n\t\t/// <param name=\"result\">The list where to add items.</param>\r\n\t\t/// <remarks>\r\n\t\t/// The following node types are allowed to be contained in the <paramref name=\"node\"/>:\r\n\t\t/// <code>\r\n\t\t///   &lt;add value=\"{string}\" /&gt;\r\n\t\t///   &lt;remove value=\"{string}\" /&gt;\r\n\t\t///   &lt;clear/&gt;\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\tpublic static void ParseStringList(XmlNode/*!*/ node, IList<string>/*!*/ result)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n\t\t\tif (result == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"result\");\r\n\r\n\t\t\tforeach (XmlNode child in node.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tswitch (child.Name)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"add\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstring s = ConfigUtils.MandatoryAttribute(child, \"value\");\r\n\t\t\t\t\t\t\tresult.Add(s);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"remove\":\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstring s = ConfigUtils.MandatoryAttribute(child, \"value\");\r\n\t\t\t\t\t\t\tresult.Remove(s);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase \"clear\":\r\n\t\t\t\t\t\tresult.Clear();\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t\t\t\tthrow new ConfigUtils.InvalidNodeException(child);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Callback used by <see cref=\"ParseLibraryAssemblyList\"/>.\r\n\t\t/// Returning <B>false</B> will stop parsing.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"assemblyName\">Parsed long assembly name or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"assemblyUrl\">Parsed assembly file URL or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"sectionName\">Configuration section name or a <B>null</B> reference.</param>\r\n\t\t/// <param name=\"node\">XML node being parsed.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Either <paramref name=\"assemblyName\"/> or <paramref name=\"assemblyUrl\"/> is always non-null.\r\n\t\t/// </remarks>\r\n\t\tpublic delegate bool ParseLibraryAssemblyCallback(string assemblyName, Uri assemblyUrl, string sectionName, XmlNode/*!*/ node);\r\n\r\n        /// <summary>\r\n        /// Callback used by <see cref=\"ParseScriptLibraryAssemblyList\" />. \r\n        /// Returning <b>false</b> will stop parsing.\r\n        /// </summary>\r\n        /// <param name=\"assemblyName\">Parsed long assembly name or a <B>null</B> reference.</param>\r\n        /// <param name=\"assemblyUrl\">Parsed assembly file URL or a <B>null</B> reference.</param>\r\n        /// <param name=\"libraryRootPath\">Library root which will be used.</param>\r\n        /// <returns></returns>\r\n        public delegate bool ParseScriptLibraryAssemblyCallback(string assemblyName, Uri assemblyUrl, string libraryRootPath);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses list of library assemblies.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">Node containing the list.</param>\r\n\t\t/// <param name=\"libraries\">List of libraries to be modified by given <paramref name=\"node\"/>.</param>\r\n\t\t/// <param name=\"librariesPath\">Full path to the libraries directory.</param>\r\n\t\t/// <remarks>\r\n\t\t/// The following node type is allowed to be contained in the <paramref name=\"node\"/>:\r\n\t\t/// <code>\r\n\t\t///   &lt;add assembly=\"{string}\" [section=\"{string}\"] {additional attributes specific to library} /&gt;\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\tpublic static void ParseLibraryAssemblyList(XmlNode/*!*/ node,\r\n            LibrariesConfigurationList/*!*/ libraries, FullPath librariesPath)\r\n\t\t{\r\n\t\t\tif (node == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"node\");\r\n            if (libraries == null)\r\n                throw new ArgumentNullException(\"libraries\");\r\n\r\n\t\t\tforeach (XmlNode child in node.ChildNodes)\r\n\t\t\t{\r\n                if (child.Name == \"add\" || child.Name == \"remove\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!Configuration.IsValidInCurrentScope(child)) continue;\r\n\r\n\t\t\t\t\tstring assembly_name = ConfigUtils.OptionalAttribute(child, \"assembly\");\r\n\t\t\t\t\tstring library_name = ConfigUtils.OptionalAttribute(child, \"library\");\r\n\t\t\t\t\tstring extension_name = ConfigUtils.OptionalAttribute(child, \"extension\");\r\n\t\t\t\t\tstring url = ConfigUtils.OptionalAttribute(child, \"url\");\r\n\t\t\t\t\tstring section_name = ConfigUtils.OptionalAttribute(child, \"section\");\r\n\t\t\t\t\tUri uri = null;\r\n\r\n\t\t\t\t\tif (assembly_name == null && url == null && extension_name == null && library_name == null)\r\n\t\t\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"missing_attribute\", \"assembly\"), child);\r\n\r\n\t\t\t\t\tif (library_name != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\turi = new Uri(\"file:///\" + Path.Combine(librariesPath.IsEmpty ? \"\" : librariesPath, library_name + \".dll\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (UriFormatException)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new InvalidAttributeValueException(child, \"library\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (extension_name != null)\r\n\t\t\t\t\t{\r\n                        throw new NotSupportedException();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (url != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n                            uri = GetUri(node, url);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (UriFormatException)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new InvalidAttributeValueException(child, \"url\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n                    if (child.Name == \"add\")\r\n                        libraries.AddLibrary(assembly_name, uri, section_name, child);\r\n                    else if (child.Name == \"remove\")\r\n                        libraries.RemoveLibrary(assembly_name, uri);\r\n                    else\r\n                        Debug.Fail(null);\r\n\t\t\t\t}\r\n                else if (child.Name == \"clear\")\r\n                {\r\n                    libraries.ClearLibraries();\r\n                }\r\n                else if (child.NodeType == XmlNodeType.Element)\r\n                {\r\n                    throw new ConfigUtils.InvalidNodeException(child);\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\r\n        internal static void ParseScriptLibraryAssemblyList(XmlNode/*!*/ node, ScriptLibraryDatabase/*!*/librares)\r\n        {\r\n            if (node == null)\r\n                throw new ArgumentNullException(\"node\");\r\n            if (librares == null)\r\n                throw new ArgumentNullException(\"librares\");\r\n\r\n            foreach (XmlNode child in node.ChildNodes)\r\n            {\r\n                if (child.Name == \"add\" || child.Name == \"remove\")\r\n                {\r\n                    if (!Configuration.IsValidInCurrentScope(child)) continue;\r\n\r\n                    string assemblyName = ConfigUtils.OptionalAttribute(child, \"assembly\");\r\n                    //purposefully disabled (not needed and there are some integrity problems regarding library root)\r\n                    string libraryRoot = ConfigUtils.OptionalAttribute(child, \"root\");\r\n                    string assemblyUrl = ConfigUtils.OptionalAttribute(child, \"url\");\r\n                    Uri uri = null;\r\n\r\n                    if (assemblyName == null && assemblyUrl == null)\r\n                        throw new ConfigurationErrorsException(string.Format(CoreResources.missing_attribute, \"assembly\"), child);\r\n\r\n                    if (assemblyUrl != null)\r\n                    {\r\n                        try\r\n                        {\r\n                            uri = GetUri(node, assemblyUrl);\r\n                        }\r\n                        catch (UriFormatException)\r\n                        {\r\n                            throw new InvalidAttributeValueException(child, \"url\");\r\n                        }\r\n                    }\r\n\r\n                    if (child.Name == \"add\")\r\n                        librares.AddLibrary(assemblyName, uri, assemblyUrl, libraryRoot);\r\n                    else\r\n                        librares.RemoveLibrary(assemblyName, uri, assemblyUrl, libraryRoot);\r\n                }\r\n                else if (child.Name == \"clear\")\r\n                {\r\n                    librares.ClearLibraries();\r\n                }\r\n                else if (child.NodeType == XmlNodeType.Element)\r\n                {\r\n                    throw new ConfigUtils.InvalidNodeException(child);\r\n                }\r\n            }\r\n        }\r\n\r\n        public static void ParseTypesList(XmlNode/*!*/ node,\r\n            Action<string>/*!*/ addCallback,\r\n            Action<string>/*!*/ removeCallback,\r\n            Action<object>/*!*/ clearCallback)\r\n        {\r\n            if (node == null)\r\n                throw new ArgumentNullException(\"node\");\r\n            if (addCallback == null)\r\n                throw new ArgumentNullException(\"addCallback\");\r\n            if (removeCallback == null)\r\n                throw new ArgumentNullException(\"removeCallback\");\r\n            if (clearCallback == null)\r\n                throw new ArgumentNullException(\"clearCallback\");\r\n\r\n            foreach (XmlNode child in node.ChildNodes)\r\n            {\r\n                if (child.Name == \"add\" || child.Name == \"remove\")\r\n                {\r\n                    if (!Configuration.IsValidInCurrentScope(child)) continue;\r\n\r\n                    string typeQualifiedName = ConfigUtils.MandatoryAttribute(child, \"type\");\r\n                    \r\n                    if (child.Name == \"add\")\r\n                        addCallback(typeQualifiedName);\r\n                    else\r\n                        removeCallback(typeQualifiedName);\r\n                }\r\n                else if (child.Name == \"clear\")\r\n                {\r\n                    clearCallback(null);\r\n                }\r\n                else if (child.NodeType == XmlNodeType.Element)\r\n                {\r\n                    throw new ConfigUtils.InvalidNodeException(child);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n\t\t/// Parses an integer from a string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The string.</param>\r\n\t\t/// <param name=\"min\">The minimal possible value for the resulting integer.</param>\r\n\t\t/// <param name=\"max\">The maximal possible value for the resulting integer.</param>\r\n\t\t/// <param name=\"node\">The configuration node being parsed.</param>\r\n\t\t/// <returns>The value.</returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Invalid format or out of range.</exception>\r\n\t\tpublic static int ParseInteger(string value, int min, int max, XmlNode node)\r\n\t\t{\r\n\t\t\tint result;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult = Int32.Parse(value);\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t}\r\n\r\n\t\t\tif (result < min || result > max)\r\n\t\t\t\tthrow new ConfigurationErrorsException(CoreResources.GetString(\"out_of_range\", min, max), node);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a double from a string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The string.</param>\r\n\t\t/// <param name=\"node\">The configuration node being parsed.</param>\r\n\t\t/// <returns>The value.</returns>\r\n\t\t/// <exception cref=\"ConfigurationErrorsException\">Invalid format.</exception>\r\n\t\tpublic static double ParseDouble(string value, XmlNode node)\r\n\t\t{\r\n\t\t\tdouble result;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult = Double.Parse(value);\r\n\t\t\t}\r\n\t\t\tcatch (System.Exception e)\r\n\t\t\t{\r\n\t\t\t\tthrow new ConfigurationErrorsException(e.Message, node);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tpublic static int[]/*!*/ ParseIntegerList(string/*!*/ value, char separator, int min, int max, XmlNode node)\r\n\t\t{\r\n\t\t\tif (value == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"value\");\r\n\r\n\t\t\tstring[] components = value.Split(',');\r\n\t\t\tint[] result = new int[components.Length];\r\n\r\n\t\t\tfor (int i = 0; i < components.Length; i++)\r\n\t\t\t\tresult[i] = ParseInteger(components[i], min, max, node);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region File System\r\n\r\n\t/// <summary>\r\n\t/// File system utilities.\r\n\t/// </summary>\r\n\tpublic static partial class FileSystemUtils\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Retrieves information about the amount of space available on a disk volume.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"directoryName\">A directory on the disk of interest (can be a network UNC path). \r\n\t\t/// A <b>null</b> reference means the root of the current disk.</param>\r\n\t\t/// <param name=\"freeBytesAvailable\">Receives the total number of free bytes on the disk that are \r\n\t\t/// available to the user associated with the calling thread.</param>\r\n\t\t/// <param name=\"totalNumberOfBytes\">Receives the total number of bytes on the disk that are \r\n\t\t/// available to the user associated with the calling thread.</param>\r\n\t\t/// <param name=\"totalNumberOfFreeBytes\">Receives the total number of free bytes on the disk.</param>\r\n\t\t/// <returns>Whether a call of method was successful.</returns>\r\n\t\t[DllImport(\"kernel32.dll\", EntryPoint = \"GetDiskFreeSpaceEx\")]\r\n\t\tpublic static extern bool GetDiskFreeSpace(\r\n\t\t\tstring directoryName,\r\n\t\t\tout long freeBytesAvailable,\r\n\t\t\tout long totalNumberOfBytes,\r\n\t\t\tout long totalNumberOfFreeBytes);\r\n\r\n\t\tpublic static string CanonizePath(string path, string root)\r\n\t\t{\r\n\t\t\treturn Path.GetFullPath(Path.Combine(root, path));\r\n\t\t}\r\n\r\n\r\n        public static string[] GetFiles(string path, string searchPattern)\r\n        {\r\n            return GetFileSystemEntries(path, searchPattern, true, false);\r\n        }\r\n\r\n        public static string[] GetDirectories(string path, string searchPattern)\r\n        {\r\n            return GetFileSystemEntries(path, searchPattern, false, true);\r\n        }\r\n\r\n        public static string[] GetFileSystemEntries(string path, string searchPattern)\r\n        {\r\n            return GetFileSystemEntries(path, searchPattern, true, true);\r\n        }\r\n\r\n        public static string[] GetFileSystemEntries(string path, string searchPattern, bool includeFiles, bool includeDirectories)\r\n        {\r\n            if (includeFiles && includeDirectories)\r\n            {\r\n                return System.IO.Directory.GetFileSystemEntries(path, searchPattern);\r\n            }\r\n            if (includeFiles)\r\n            {\r\n                return System.IO.Directory.GetFiles(path, searchPattern);\r\n            }\r\n            if (includeDirectories)\r\n            {\r\n                return System.IO.Directory.GetDirectories(path, searchPattern);\r\n            }\r\n            return ArrayUtils.EmptyStrings;\r\n        }\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a list of file full paths contained in a specified directories.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"paths\">List of paths to files and/or directories.</param>\r\n\t\t/// <returns>\r\n\t\t/// List of all files contained in <paramref name=\"paths\"/> and all files contained\r\n\t\t/// in directories whose paths are contained in the <paramref name=\"paths\"/> list.\r\n\t\t/// </returns>\r\n\t\tpublic static List<FullPath>/*!*/ GetAllFiles(IEnumerable<FullPath>/*!*/ paths)\r\n\t\t{\r\n\t\t\tif (paths == null) throw new ArgumentNullException(\"paths\");\r\n\r\n\t\t\tList<FullPath> result = new List<FullPath>();\r\n\r\n\t\t\tforeach (FullPath path in paths)\r\n\t\t\t{\r\n\t\t\t\tif (path.FileExists)\r\n\t\t\t\t\tresult.Add(path);\r\n\t\t\t\telse if (path.DirectoryExists)\r\n\t\t\t\t\tGetAllFiles(path, result);\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets a list of files contained in a specified directories.\r\n        /// </summary>\r\n        /// <param name=\"paths\">List of paths to files and/or directories.</param>\r\n        /// <returns>\r\n        /// List of all files contained in <paramref name=\"paths\"/> and all files contained\r\n        /// in directories whose paths are contained in the <paramref name=\"paths\"/> list.\r\n        /// </returns>\r\n        /// <remarks>It is safe to pass <see cref=\"ResourceFileReference\"/> here</remarks>\r\n        public static List<FileReference>/*!*/ GetAllFiles(IEnumerable<FileReference>/*!*/ paths) {\r\n            if(paths == null) throw new ArgumentNullException(\"paths\");\r\n\r\n            List<FileReference> result = new List<FileReference>();\r\n\r\n            foreach (FileReference path in paths)\r\n            {\r\n                if(path.Path.FileExists || path is ResourceFileReference)\r\n                    result.Add(path);\r\n                else if(path.Path.DirectoryExists)\r\n                    foreach (FullPath file in GetAllFiles(new FullPath[] { path.Path }))\r\n                        result.Add(new FileReference(file));\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n\t\tprivate static void GetAllFiles(string/*!*/ dir, ICollection<FullPath>/*!*/ result)\r\n\t\t{\r\n\t\t\tforeach (string file in Directory.GetFiles(dir))\r\n\t\t\t\tresult.Add(new FullPath(file, false));\r\n\r\n\t\t\tforeach (string subdir in Directory.GetDirectories(dir))\r\n\t\t\t\tGetAllFiles(new FullPath(subdir, false), result);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Seeks a specified line in a file and reads its content.\r\n\t\t/// </summary>\r\n\t\t/// <exception cref=\"Exception\">Any exception the <see cref=\"File.OpenText\"/> or <see cref=\"StreamReader.ReadLine\"/> may throw.</exception>\r\n\t\tpublic static string ReadFileLine(string/*!*/ filePath, int line)\r\n\t\t{\r\n\t\t\tusing (StreamReader reader = File.OpenText(filePath))\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < line - 1; i++) reader.ReadLine();\r\n\t\t\t\treturn reader.ReadLine();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic static int GetByteOrderMarkLength(Stream/*!*/ stream)\r\n\t\t{\r\n\t\t\tif (stream == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"stream\");\r\n\r\n\t\t\tif (stream.Position != 0)\r\n\t\t\t\treturn 0;\r\n\r\n\t\t\tbyte[] b = new byte[4];\r\n\t\t\tint count = stream.Read(b, 0, 4);\r\n\r\n\t\t\tstream.Seek(0, SeekOrigin.Begin);\r\n\r\n\t\t\tif (count >= 2)\r\n\t\t\t{\r\n\t\t\t\tif (b[0] == 0xfe && b[1] == 0xff)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 2;\r\n\t\t\t\t}\r\n\t\t\t\telse if (b[0] == 0xff && b[1] == 0xfe)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn (count > 4 && b[2] == 0 && b[3] == 0) ? 4 : 2;\r\n\t\t\t\t}\r\n\t\t\t\telse if (count > 3 && b[0] == 0xef && b[1] == 0xbb && b[2] == 0xbf)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 3;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Network\r\n\r\n\t/// <summary>\r\n\t/// Network utilities.\r\n\t/// </summary>\r\n\tpublic sealed class NetworkUtils\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A singleton whose finalizer shuts down Winsock.\r\n\t\t/// </summary>\r\n\t\tprivate static NetworkUtils singleton = new NetworkUtils();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"NetworkUtils\"/> singleton whose purpose is to initialize and shut down Winsock.\r\n\t\t/// </summary>\r\n\t\tprivate NetworkUtils()\r\n\t\t{\r\n            if (Environment.Is64BitProcess)\r\n            {\r\n                var wsa_data = new WsaData64();\r\n                if (WSAStartup64(WORD_VERSION, ref wsa_data) != 0)\r\n                    throw new NotSupportedException(CoreResources.GetString(\"networkutils_unsupported\"));\r\n            }\r\n            else\r\n            {\r\n                var wsa_data = new WsaData32();\r\n                if (WSAStartup32(WORD_VERSION, ref wsa_data) != 0)\r\n                    throw new NotSupportedException(CoreResources.GetString(\"networkutils_unsupported\"));\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shuts down Winsock.\r\n\t\t/// </summary>\r\n\t\t~NetworkUtils()\r\n\t\t{\r\n            WSACleanup();\r\n\t\t}\r\n\r\n        const int WSADESCRIPTION_LEN = 256;\r\n        const int WSASYS_STATUS_LEN = 128;\r\n\r\n        public const ushort HIGH_VERSION = 2;\r\n        public const ushort LOW_VERSION = 2;\r\n        public const short WORD_VERSION = (ushort)(HIGH_VERSION << 8) + LOW_VERSION;\r\n        \r\n        /// <summary>\r\n\t\t/// Managed representation of the <c>WSADATA</c> structure.\r\n\t\t/// </summary>\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        public struct WsaData32\r\n        {\r\n            public ushort wVersion;\r\n            public ushort wHighVersion;\r\n            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = WSADESCRIPTION_LEN + 1)]public String szDescription;\r\n            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = WSASYS_STATUS_LEN + 1)]public String szSystemStatus;\r\n            public ushort iMaxSockets;\r\n            public ushort iMaxUdpDg;\r\n            public IntPtr lpVendorInfo;\r\n        }\r\n        /// <summary>\r\n        /// Managed representation of the <c>WSADATA</c> structure.\r\n        /// </summary>\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        public struct WsaData64\r\n        {\r\n            public ushort wVersion;\r\n            public ushort wHighVersion;\r\n            public ushort iMaxSockets;\r\n            public ushort iMaxUdpDg;\r\n            public IntPtr lpVendorInfo;\r\n            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = WSADESCRIPTION_LEN + 1)]\r\n            public String szDescription;\r\n            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = WSASYS_STATUS_LEN + 1)]\r\n            public String szSystemStatus;\r\n        }\r\n        \r\n\t\t/// <summary>\r\n\t\t/// Initializes Winsock for the current process.\r\n\t\t/// </summary>\r\n        /// <param name=\"wVersionRequested\">The Winsock version requested by caller.</param>\r\n\t\t/// <param name=\"wsaData\">Receives information about Winsock implementation.</param>\r\n\t\t/// <returns>Zero if successfull, a non-zero error code otherwise.</returns>\r\n        [DllImport(\"ws2_32.dll\", EntryPoint = \"WSAStartup\", CharSet = CharSet.Auto, SetLastError = true)]\r\n        private static extern int WSAStartup32(Int16 wVersionRequested, ref WsaData32 wsaData);\r\n\r\n        /// <summary>\r\n        /// Initializes Winsock for the current process.\r\n        /// </summary>\r\n        /// <param name=\"wVersionRequested\">The Winsock version requested by caller.</param>\r\n        /// <param name=\"wsaData\">Receives information about Winsock implementation.</param>\r\n        /// <returns>Zero if successfull, a non-zero error code otherwise.</returns>\r\n        [DllImport(\"ws2_32.dll\", EntryPoint = \"WSAStartup\", CharSet = CharSet.Auto, SetLastError = true)]\r\n        private static extern int WSAStartup64(Int16 wVersionRequested, ref WsaData64 wsaData);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Shuts down Winsock for the current process.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Zero if successfull, a non-zero error code otherwise.</returns>\r\n\t\t[DllImport(\"ws2_32.dll\")]\r\n        private static extern int WSACleanup();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Managed representation of the <c>protoent</c> structure.\r\n\t\t/// </summary>\r\n\t\t[StructLayout(LayoutKind.Sequential)]\r\n\t\tpublic class ProtoEnt\r\n\t\t{\r\n            [MarshalAs(UnmanagedType.LPStr)]\r\n            public string p_name;\r\n\t\t\tpublic IntPtr p_aliases;\r\n\t\t\tpublic short p_proto;\r\n\r\n            /// <summary>\r\n            /// Marshales native pointer to <see cref=\"ProtoEnt\"/> instance.\r\n            /// </summary>\r\n            /// <param name=\"ptr\">Pointer returned by <see cref=\"getprotobyname\"/> or <see cref=\"getprotobynumber\"/>.</param>\r\n            /// <remarks>The wrapper avoids freeing of pointer returned from winsoc native library. The returned pointer is managed by winsoc library and must not be freed by CLI.</remarks>\r\n            internal static ProtoEnt FromIntPtr(IntPtr ptr)\r\n            {\r\n                if (ptr == IntPtr.Zero)\r\n                return null;\r\n\r\n                // marshall returned object to ProtoEnt class:\r\n                ProtoEnt result = new ProtoEnt();\r\n                Marshal.PtrToStructure(ptr, result);\r\n                return result;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Managed representation of the <c>servent</c> structure.\r\n\t\t/// </summary>\r\n\t\tpublic class ServEnt\r\n\t\t{\r\n            public string s_name;\r\n\t\t\tpublic short s_port;\r\n            public string s_proto;\r\n\r\n            //struct  servent\r\n            //{\r\n            //    char    FAR * s_name;           /* official service name */\r\n            //    char    FAR * FAR * s_aliases;  /* alias list */\r\n            //#ifdef _WIN64\r\n            //    char    FAR * s_proto;          /* protocol to use */\r\n            //    short   s_port;                 /* port # */\r\n            //#else\r\n            //    short   s_port;                 /* port # */\r\n            //    char    FAR * s_proto;          /* protocol to use */\r\n            //#endif\r\n            //};\r\n\r\n            [StructLayout(LayoutKind.Sequential)]\r\n\t\t    private class x86\r\n            {\r\n                [MarshalAs(UnmanagedType.LPStr)]\r\n                public string s_name;           // official service name\r\n                public IntPtr s_aliases;        // alias list\r\n                public short   s_port;          // port #\r\n                [MarshalAs(UnmanagedType.LPStr)]\r\n                public string s_proto;          // protocol to use\r\n            }\r\n\r\n            [StructLayout(LayoutKind.Sequential)]\r\n\t\t    private class x64\r\n            {\r\n                [MarshalAs(UnmanagedType.LPStr)]\r\n                public string s_name;           // official service name\r\n                public IntPtr s_aliases;        // alias list\r\n                [MarshalAs(UnmanagedType.LPStr)]\r\n                public string s_proto;          // protocol to use\r\n                public short   s_port;          // port #\r\n            }\r\n\r\n            /// <summary>\r\n            /// Marshales native pointer to <see cref=\"ServEnt\"/> instance.\r\n            /// </summary>\r\n            /// <param name=\"ptr\">Pointer returned by <see cref=\"getservbyname\"/> or <see cref=\"getservbyport\"/>.</param>\r\n            /// <remarks>The wrapper avoids freeing of pointer returned from winsoc native library. The returned pointer is managed by winsoc library and must not be freed by CLI.</remarks>\r\n            internal static ServEnt FromIntPtr(IntPtr ptr)\r\n            {\r\n                if (ptr == IntPtr.Zero)\r\n                return null;\r\n\r\n                // marshall returned object to ProtoEnt class:\r\n                if (Environment.Is64BitProcess)\r\n                {\r\n                    var result = new ServEnt.x64();\r\n                    Marshal.PtrToStructure(ptr, result);\r\n                    return new ServEnt()\r\n                    {\r\n                        s_name = result.s_name,\r\n                        s_port = result.s_port,\r\n                        s_proto = result.s_proto\r\n                    };\r\n                }\r\n                else\r\n                {\r\n                    var result = new ServEnt.x86();\r\n                    Marshal.PtrToStructure(ptr, result);\r\n                    return new ServEnt()\r\n                    {\r\n                        s_name = result.s_name,\r\n                        s_port = result.s_port,\r\n                        s_proto = result.s_proto\r\n                    };\r\n                }\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves the protocol information corresponding to a protocol name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The protocol name.</param>\r\n\t\t/// <returns>Protocol information or <B>null</B> if an error occurs.</returns>\r\n        [DllImport(\"ws2_32.dll\")]\r\n        private static extern IntPtr getprotobyname([MarshalAs(UnmanagedType.LPStr)]string name);\r\n\r\n        /// <summary>\r\n        /// Safe wrapper for <see cref=\"getprotobyname\"/> function call.\r\n        /// </summary>\r\n        /// <param name=\"name\">The protocol name.</param>\r\n\t\t/// <returns>Protocol information or <B>null</B> if an error occurs.</returns>\r\n        /// <remarks>The wrapper avoids freeing of pointer returned from <see cref=\"getprotobyname\"/>. The returned pointer is managed by winsoc library and must not be freed by CLI.</remarks>\r\n        public static ProtoEnt GetProtocolByName(string name)\r\n        {\r\n            return ProtoEnt.FromIntPtr(getprotobyname(name));\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves protocol information corresponding to a protocol number.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"number\">The protocol number.</param>\r\n\t\t/// <returns>Protocol information or <B>null</B> if an error occurs.</returns>\r\n        [DllImport(\"ws2_32.dll\")]\r\n        private static extern IntPtr getprotobynumber(int number);\r\n\r\n        /// <summary>\r\n        /// Safe wrapper for <see cref=\"getprotobynumber\"/> function call.\r\n        /// </summary>\r\n        /// <param name=\"number\">The protocol number.</param>\r\n\t\t/// <returns>Protocol information or <B>null</B> if an error occurs.</returns>\r\n        public static ProtoEnt GetProtocolByNumber(int number)\r\n        {\r\n            return ProtoEnt.FromIntPtr(getprotobynumber(number));\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves service information corresponding to a service name and protocol.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The service name.</param>\r\n\t\t/// <param name=\"proto\">The protocol name or <B>null</B> if only <paramref name=\"name\"/> should be matched.\r\n\t\t/// </param>\r\n\t\t/// <returns>Service information or <B>null</B> if an error occurs.</returns>\r\n        [DllImport(\"ws2_32.dll\")]\r\n\t\tprivate static extern IntPtr getservbyname([MarshalAs(UnmanagedType.LPStr)]string name, [MarshalAs(UnmanagedType.LPStr)]string proto);\r\n\r\n        /// <summary>\r\n        /// Safe wrapper for <see cref=\"getservbyname\"/> function call.\r\n        /// </summary>\r\n\t\t/// <param name=\"name\">The service name.</param>\r\n\t\t/// <param name=\"proto\">The protocol name or <B>null</B> if only <paramref name=\"name\"/> should be matched.\r\n\t\t/// </param>\r\n\t\t/// <returns>Service information or <B>null</B> if an error occurs.</returns>\r\n        public static ServEnt GetServiceByName(string name, string proto)\r\n        {\r\n            return ServEnt.FromIntPtr(getservbyname(name, proto));\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves service information corresponding to a port and protocol.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"port\">The port number (network order).</param>\r\n\t\t/// <param name=\"proto\">The protocol name or <B>null</B> if only <paramref name=\"port\"/> should be matched.\r\n\t\t/// </param>\r\n\t\t/// <returns>Service information or <B>null</B> if an error occurs.</returns>\r\n        [DllImport(\"ws2_32.dll\")]\r\n\t\tpublic static extern IntPtr getservbyport(int port, [MarshalAs(UnmanagedType.LPStr)]string proto);\r\n\r\n        /// <summary>\r\n\t\t/// Safe wrapper for <see cref=\"getservbyport\"/> function call.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"port\">The port number (network order).</param>\r\n\t\t/// <param name=\"proto\">The protocol name or <B>null</B> if only <paramref name=\"port\"/> should be matched.\r\n\t\t/// </param>\r\n\t\t/// <returns>Service information or <B>null</B> if an error occurs.</returns>\r\n        public static ServEnt GetServiceByPort(int port, string proto)\r\n        {\r\n            return ServEnt.FromIntPtr(getservbyport(port, proto));\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Performance Counters\r\n\r\n\tinternal static class Performance\r\n\t{\r\n\t\tconst string CategoryName = \"Phalanger\";\r\n\t\tconst string CompiledEvalCountName = \"Compiled eval count\";\r\n\t\tconst string DynamicCacheHitsName = \"Dynamic cache hits\";\r\n\t\tconst string ArrayDCsName = \"Array DCs\";\r\n\r\n#pragma warning disable 649\r\n\t\tpublic static PerformanceCounter CompiledEvalCount;\r\n\t\tpublic static PerformanceCounter DynamicCacheHits;\r\n\t\tpublic static PerformanceCounter ArrayDCs;\r\n#pragma warning restore 649\r\n\r\n\t\tpublic static void Increment(PerformanceCounter counter)\r\n\t\t{\r\n\t\t\tif (counter != null)\r\n\t\t\t\tcounter.Increment();\r\n\t\t}\r\n\r\n\t\tstatic Performance()\r\n\t\t{\r\n#if PERFORMANCE_COUNTERS\r\n\t\t\tif (!PerformanceCounterCategory.Exists(CategoryName) ||\r\n\t\t\t\t  !PerformanceCounterCategory.CounterExists(CompiledEvalCountName,CategoryName) || \r\n\t\t\t    !PerformanceCounterCategory.CounterExists(DynamicCacheHitsName,CategoryName) || \r\n\t\t\t    !PerformanceCounterCategory.CounterExists(ArrayDCsName,CategoryName))\r\n\t\t\t{    \r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tif (PerformanceCounterCategory.Exists(CategoryName))\r\n\t\t\t\t\t  PerformanceCounterCategory.Delete(CategoryName);\r\n\t\t\t\t  \r\n\t\t\t\t  PerformanceCounterCategory.Create(CategoryName,\"Phalanger performance counters\",\r\n\t\t\t\t\t\tPerformanceCounterCategoryType.SingleInstance,\r\n\t\t\t\t\t\tnew CounterCreationDataCollection(\r\n\t\t\t\t\t\t  new CounterCreationData[] \r\n\t\t\t\t\t\t  {\r\n\t\t\t\t\t\t\t  new CounterCreationData(CompiledEvalCountName,\"Number of compiled evals\",PerformanceCounterType.NumberOfItems32),\r\n\t\t\t\t\t\t    new CounterCreationData(DynamicCacheHitsName,\"Number of dynamic cache hits\",PerformanceCounterType.NumberOfItems32),\r\n\t\t\t\t\t\t    new CounterCreationData(ArrayDCsName,\"Number of array deep copies\",PerformanceCounterType.NumberOfItems32),\r\n\t\t\t\t\t\t  }\r\n\t\t\t\t\t\t)\r\n\t\t\t\t  );\r\n\t\t\t\t}\r\n\t\t\t\tcatch(System.Security.SecurityException)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;  \r\n\t\t\t\t}  \r\n\t\t\t} \r\n\t\t\tCompiledEvalCount = new PerformanceCounter(CategoryName,CompiledEvalCountName,false);\r\n\t\t\tDynamicCacheHits = new PerformanceCounter(CategoryName,DynamicCacheHitsName,false);\r\n\t\t\tArrayDCs = new PerformanceCounter(CategoryName,ArrayDCsName,false);\r\n#endif\r\n\t\t}\r\n\r\n\t\tpublic static void Initialize()\r\n\t\t{\r\n\t\t\tif (CompiledEvalCount != null)\r\n\t\t\t{\r\n\t\t\t\tCompiledEvalCount.RawValue = 0;\r\n\t\t\t\tDynamicCacheHits.RawValue = 0;\r\n\t\t\t\tArrayDCs.RawValue = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Icons Resources\r\n\r\n\t/// <summary>\r\n\t/// Represents a Win32 icon resource.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Supports creation from an <B>.ICO</B> file and conversion to a <B>.RES</B> file. Contains a group of\r\n\t/// Win32 icons read from one <B>.ICO</B> file.\r\n\t/// </remarks>\r\n\t[Serializable]\r\n\tpublic sealed class Win32IconResource\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Represents one Win32 icon.\r\n\t\t/// </summary>\r\n\t\t[Serializable]\r\n        private class Win32Icon\r\n\t\t{\r\n\t\t\tpublic byte bWidth;\r\n\t\t\tpublic byte bHeight;\r\n\t\t\tpublic byte bColorCount;\r\n\t\t\tpublic byte bReserved;\r\n\t\t\tpublic ushort wPlanes;\r\n\t\t\tpublic ushort wBitCount;\r\n\t\t\tpublic ushort id;\r\n\t\t\tpublic byte[] image;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The icons in the group.\r\n\t\t/// </summary>\r\n\t\tprivate Win32Icon[] icons;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"Win32IconResource\"/> given an <B>.ICO</B> file stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">The <B>.ICO</B> file stream.</param>\r\n\t\tpublic Win32IconResource(Stream/*!*/ stream)\r\n\t\t{\r\n\t\t\tif (stream == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"stream\");\r\n\r\n\t\t\tReadFromIcoFile(stream);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"Win32IconResource\"/> given an <B>.ICO</B> file path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"icoFilePath\">The <B>.ICO</B> file path.</param>\r\n\t\tpublic Win32IconResource(string/*!*/ icoFilePath)\r\n\t\t{\r\n\t\t\tif (icoFilePath == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"icoFilePath\");\r\n\r\n\t\t\tusing (FileStream stream = new FileStream(icoFilePath, FileMode.Open))\r\n\t\t\t\tReadFromIcoFile(stream);\r\n\t\t}\r\n\r\n\t\tpublic void DefineIconResource(AssemblyBuilder/*!*/ builder, string/*!*/ tempFile)\r\n\t\t{\r\n\t\t\tif (builder == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"builder\");\r\n\t\t\tif (tempFile == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"tempFile\");\r\n\r\n\t\t\tMemoryStream mem = new MemoryStream();\r\n\t\t\tWriteToResFile(mem);\r\n\t\t\tbyte[] b = mem.ToArray();\r\n\t\t\t//builder.DefineUnmanagedResource(b);\r\n\r\n\t\t\tusing (FileStream fs = new FileStream(tempFile, FileMode.Create))\r\n\t\t\t{\r\n\t\t\t\tWriteToResFile(fs);\r\n\t\t\t}\r\n\r\n\t\t\tbuilder.DefineUnmanagedResource(tempFile);\r\n\r\n\t\t\t//\t\t\tfs = new FileStream(\"sample2.res\", FileMode.Open);\r\n\t\t\t//\t\t\tbyte[] q = new byte[fs.Length];\r\n\t\t\t//\t\t\tfs.Read(q, 0, q.Length);\r\n\t\t\t//\t\t\tbuilder.DefineUnmanagedResource(q);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes one resource header to a provided <see cref=\"BinaryWriter\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"w\">The <see cref=\"BinaryWriter\"/> to write the header to.</param>\r\n\t\t/// <param name=\"dataLength\">The length of the data that comprise this resource.</param>\r\n\t\t/// <param name=\"type\">The resource type code.</param>\r\n\t\t/// <param name=\"id\">The resource ID.</param>\r\n\t\t/// <param name=\"memoryFlags\">The resource memory flags.</param>\r\n\t\tprivate void WriteResourceHeader(BinaryWriter w, int dataLength, ushort type, ushort id, ushort memoryFlags)\r\n\t\t{\r\n\t\t\tw.Write((int)dataLength);\r\n\t\t\tw.Write((int)32); // header length\r\n\r\n\t\t\tw.Write((ushort)0xFFFF);\r\n\t\t\tw.Write((ushort)type); // resource type\r\n\r\n\t\t\tw.Write((ushort)0xFFFF);\r\n\t\t\tw.Write((ushort)id); // resource ID\r\n\r\n\t\t\tw.Write((int)0); // data version (reserved?)\r\n\t\t\tw.Write((ushort)memoryFlags); // memory flags\r\n\t\t\tw.Write((ushort)0x0409); // language ID (English)\r\n\r\n\t\t\tw.Write((int)0); // version\r\n\t\t\tw.Write((int)0); // characteristics\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes the icon resource to a provided <B>.RES</B> file stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">The output stream.</param>\r\n\t\tprivate void WriteToResFile(Stream stream)\r\n\t\t{\r\n\t\t\tusing (BinaryWriter w = new BinaryWriter(stream))\r\n\t\t\t{\r\n\t\t\t\t// \"illegal\" resource to indicate 32-bit resources\r\n\t\t\t\tw.Write((ulong)0x0000002000000000);\r\n\t\t\t\tw.Write((ulong)0x0000FFFF0000FFFF);\r\n\t\t\t\tw.Write((ulong)0x0000000000000000);\r\n\t\t\t\tw.Write((ulong)0x0000000000000000);\r\n\r\n\t\t\t\t// write RT_ICON resources\r\n\t\t\t\tfor (int i = 0; i < icons.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tWin32Icon icon = icons[i];\r\n\r\n\t\t\t\t\t// RT_ICON resource, ID icon.id, DISCARDABLE | MOVABLE\r\n\t\t\t\t\tWriteResourceHeader(w, icons[i].image.Length, 3, icons[i].id, 0x1010);\r\n\r\n\t\t\t\t\tw.Write(icons[i].image);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// RT_GROUP_ICON resource, ID 100, DISCARDABLE | PURE | MOVABLE\r\n\t\t\t\tWriteResourceHeader(w, 6 + 14 * icons.Length, 14, 100, 0x1030);\r\n\r\n\t\t\t\tw.Write((short)0);\r\n\t\t\t\tw.Write((short)1);\r\n\t\t\t\tw.Write((short)icons.Length);\r\n\t\t\t\tfor (int i = 0; i < icons.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tWin32Icon icon = icons[i];\r\n\r\n\t\t\t\t\tw.Write(icon.bWidth);\r\n\t\t\t\t\tw.Write(icon.bHeight);\r\n\t\t\t\t\tw.Write(icon.bColorCount);\r\n\t\t\t\t\tw.Write((byte)0);\r\n\t\t\t\t\tw.Write(icon.wPlanes);\r\n\t\t\t\t\tw.Write(icon.wBitCount);\r\n\t\t\t\t\tw.Write((int)icon.image.Length);\r\n\t\t\t\t\tw.Write(icon.id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads the icon resource from a provided <B>.ICO</B> file stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"stream\">The input stream.</param>\r\n\t\t/// <exception cref=\"InvalidDataException\">The icon has an invalid format.</exception>\r\n\t\tprivate void ReadFromIcoFile(Stream/*!*/ stream)\r\n\t\t{\r\n\t\t\ticons = null;\r\n\r\n\t\t\tlong max_length = (stream.CanSeek) ? stream.Length : Int32.MaxValue;\r\n\r\n\t\t\tusing (BinaryReader r = new BinaryReader(stream))\r\n\t\t\t{\r\n\t\t\t\tint idReserved = r.ReadInt16();\r\n\t\t\t\tint idType = r.ReadInt16();\r\n\t\t\t\tif (idReserved != 0 || idType != 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new ArgumentException(\"Invalid .ICO file format\", \"stream\");\r\n\t\t\t\t}\r\n\t\t\t\tlong count = r.ReadInt16();\r\n\r\n\t\t\t\ticons = new Win32Icon[count];\r\n\r\n\t\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tWin32Icon icon = new Win32Icon();\r\n\r\n\t\t\t\t\ticon.bWidth = r.ReadByte();\r\n\t\t\t\t\ticon.bHeight = r.ReadByte();\r\n\t\t\t\t\ticon.bColorCount = r.ReadByte();\r\n\t\t\t\t\ticon.bReserved = r.ReadByte();\r\n\t\t\t\t\ticon.wPlanes = r.ReadUInt16();\r\n\t\t\t\t\ticon.wBitCount = r.ReadUInt16();\r\n\t\t\t\t\ticon.id = (ushort)(i + 1);\r\n\r\n\t\t\t\t\tint length = r.ReadInt32();\r\n\t\t\t\t\tint offset = r.ReadInt32();\r\n\r\n\t\t\t\t\t// prevents allocation boom when the length or possions are invalid:\r\n\t\t\t\t\tif (length > max_length || offset > max_length)\r\n\t\t\t\t\t\tthrow new InvalidDataException(CoreResources.GetString(\"invalid_icon_format\"));\r\n\r\n\t\t\t\t\ticon.image = new byte[length];\r\n\t\t\t\t\tlong pos = stream.Position;\r\n\t\t\t\t\tstream.Position = offset;\r\n\t\t\t\t\tstream.Read(icon.image, 0, length);\r\n\t\t\t\t\tstream.Position = pos;\r\n\r\n\t\t\t\t\t// The wPlanes and wBitCount members in the ICONDIRENTRY structure can be 0,\r\n\t\t\t\t\t// so we set them from the BITMAPINFOHEADER structure that follows\r\n\t\t\t\t\tif (icon.wPlanes == 0) icon.wPlanes = (ushort)(icon.image[12] | (icon.image[13] << 8));\r\n\t\t\t\t\tif (icon.wBitCount == 0) icon.wBitCount = (ushort)(icon.image[14] | (icon.image[15] << 8));\r\n\r\n\t\t\t\t\ticons[i] = icon;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Utils.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Text.RegularExpressions;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\nusing DirectoryEx = PHP.CoreCLR.DirectoryEx;\r\n#else\r\nusing System.Collections.Specialized; // case-insensitive hashtable\r\nusing System.Runtime.Serialization;\r\nusing DirectoryEx = System.IO.Directory;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region DebugHelper\r\n\r\n    /// <summary>\r\n    /// Debug helpers.\r\n    /// </summary>\r\n    public static class DebugHelper\r\n    {\r\n        /// <summary>\r\n        /// Asserts exactly specified number of the references to be non-null.\r\n        /// </summary>\r\n        [Conditional(\"DEBUG\")]\r\n        public static void AssertNonNull(int count, params object[] references)\r\n        {\r\n            Debug.Assert(references != null);\r\n\r\n            foreach (object reference in references)\r\n                if (reference != null) count--;\r\n\r\n            Debug.Assert(count == 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Asserts that the array is non-null and doesn't contain null references.\r\n        /// </summary>\r\n        [Conditional(\"DEBUG\")]\r\n        public static void AssertAllNonNull(params object[] array)\r\n        {\r\n            Debug.Assert(array != null);\r\n\r\n            for (int i = 0; i < array.Length; i++)\r\n                Debug.Assert(array[i] != null);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Reflection Utils\r\n\r\n    /// <summary>\r\n    /// Utilities manipulating metadata via reflection.\r\n    /// </summary>\r\n    public static class ReflectionUtils\r\n    {\r\n        /// <summary>\r\n        /// Sets user entry point if this feature is supported.\r\n        /// </summary>\r\n        internal static void SetUserEntryPoint(ModuleBuilder/*!*/ builder, MethodInfo/*!*/ method)\r\n        {\r\n            try\r\n            {\r\n                if (setUserEntryPointSupported ?? true) //TODO: UserEntryPoint shouldn't be set if there isn't any user method that is called first or it should be generated trivial method with emptystatement and one sequencepoint\r\n                    builder.SetUserEntryPoint(method);\r\n                setUserEntryPointSupported = true;\r\n            }\r\n            catch (NotImplementedException)\r\n            {\r\n                setUserEntryPointSupported = false;\r\n            }\r\n            catch (NotSupportedException)\r\n            {\r\n                setUserEntryPointSupported = false;\r\n            }\r\n        }\r\n        private static bool? setUserEntryPointSupported;\r\n\r\n        #region Global Fields\r\n\r\n        private const string GlobalFieldsType = \"<Global Fields>\";\r\n\r\n        internal static List<FieldInfo>/*!!*/ GetGlobalFields(Assembly/*!*/ assembly, BindingFlags bindingFlags)\r\n        {\r\n            List<FieldInfo> result = new List<FieldInfo>();\r\n\r\n#if SILVERLIGHT\r\n\t\t\tModule[] modules = assembly.GetModules();\r\n#else\r\n            Module[] modules = assembly.GetModules(false); // false - include resource modules (?)\r\n#endif\r\n            foreach (Module module in modules)\r\n            {\r\n                result.AddRange(module.GetFields(bindingFlags));\r\n\r\n                Type global_type = module.GetType(GlobalFieldsType);\r\n                if (global_type != null)\r\n                    result.AddRange(global_type.GetFields(bindingFlags));\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        internal static FieldBuilder/*!*/ DefineGlobalField(ModuleBuilder/*!*/ moduleBuilder, string/*!*/ name, Type/*!*/ type, FieldAttributes attributes)\r\n        {\r\n            //FieldBuilder result = TryDefineRealGlobalField(moduleBuilder, name, type, attributes);\r\n            //if (result != null)\r\n            //    return result;\r\n\r\n            TypeBuilder global_type = (TypeBuilder)moduleBuilder.GetType(GlobalFieldsType);\r\n            if (global_type == null)\r\n            {\r\n                global_type = moduleBuilder.DefineType(GlobalFieldsType, TypeAttributes.Class | TypeAttributes.Public |\r\n                    TypeAttributes.Sealed | TypeAttributes.SpecialName);\r\n\r\n                global_type.DefineDefaultConstructor(MethodAttributes.PrivateScope);\r\n            }\r\n\r\n            return global_type.DefineField(name, type, attributes);\r\n        }\r\n\r\n        //private static FieldBuilder TryDefineRealGlobalField(ModuleBuilder/*!*/ moduleBuilder, string/*!*/ name, Type/*!*/ type, FieldAttributes attributes)\r\n        //{\r\n        //    try\r\n        //    {\r\n        //        if (EnvironmentUtils.IsDotNetFramework)\r\n        //        {\r\n        //            // .NET Framework:\r\n\r\n        //            FieldInfo fm_ModuleData = typeof(Module).GetField(\"m_moduleData\", BindingFlags.Instance | BindingFlags.NonPublic);\r\n        //            FieldInfo fm_globalTypeBuilder = fm_ModuleData.FieldType.GetField(\"m_globalTypeBuilder\", BindingFlags.Instance | BindingFlags.NonPublic);\r\n\r\n        //            object m_ModuleData = fm_ModuleData.GetValue(moduleBuilder);\r\n        //            TypeBuilder m_globalTypeBuilder = (TypeBuilder)fm_globalTypeBuilder.GetValue(m_ModuleData);\r\n\r\n        //            return m_globalTypeBuilder.DefineField(name, type, attributes);\r\n        //        }\r\n        //        else\r\n        //        {\r\n        //            // Mono:\r\n\r\n        //            FieldInfo f_global_fields = typeof(ModuleBuilder).GetField(\"global_fields\", BindingFlags.Instance | BindingFlags.NonPublic);\r\n        //            FieldBuilder[] global_fields = (FieldBuilder[])f_global_fields.GetValue(moduleBuilder);\r\n\r\n        //            FieldInfo f_global_type = typeof(ModuleBuilder).GetField(\"global_type\", BindingFlags.Instance | BindingFlags.NonPublic);\r\n        //            TypeBuilder global_type = (TypeBuilder)f_global_type.GetValue(moduleBuilder);\r\n\r\n        //            FieldBuilder result = global_type.DefineField(name, type, attributes);\r\n\r\n        //            if (global_fields != null)\r\n        //            {\r\n        //                FieldBuilder[] new_global_fields = new FieldBuilder[global_fields.Length + 1];\r\n        //                System.Array.Copy(global_fields, new_global_fields, global_fields.Length);\r\n        //                new_global_fields[global_fields.Length] = result;\r\n\r\n        //                f_global_fields.SetValue(moduleBuilder, new_global_fields);\r\n        //            }\r\n        //            else\r\n        //            {\r\n        //                global_fields = new FieldBuilder[1];\r\n        //                global_fields[0] = result;\r\n\r\n        //                f_global_fields.SetValue(moduleBuilder, global_fields);\r\n        //            }\r\n\r\n        //            return result;\r\n        //        }\r\n        //    }\r\n        //    catch (Exception)\r\n        //    {\r\n        //        return null;\r\n        //    }\r\n        //}\r\n\r\n        internal static void CreateGlobalType(ModuleBuilder/*!*/ moduleBuilder)\r\n        {\r\n            moduleBuilder.CreateGlobalFunctions();\r\n\r\n            TypeBuilder global_type = (TypeBuilder)moduleBuilder.GetType(GlobalFieldsType);\r\n            if (global_type != null)\r\n                global_type.CreateType();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Utils\r\n\r\n        internal static ParameterBuilder/*!*/ DefineParameter(MethodInfo/*!*/ method, int index, ParameterAttributes attributes,\r\n            string/*!*/ name)\r\n        {\r\n            Debug.Assert(method is MethodBuilder || method is DynamicMethod);\r\n\r\n            MethodBuilder builder = method as MethodBuilder;\r\n            if (builder != null)\r\n                return builder.DefineParameter(index, attributes, name);\r\n            else\r\n                return ((DynamicMethod)method).DefineParameter(index, attributes, name);\r\n        }\r\n\r\n        #endregion\r\n\r\n        internal static void SetCustomAttribute(MethodInfo/*!*/ method, CustomAttributeBuilder/*!*/ customAttributeBuilder)\r\n        {\r\n            MethodBuilder builder = method as MethodBuilder;\r\n            if (builder != null)\r\n                builder.SetCustomAttribute(customAttributeBuilder);\r\n        }\r\n\r\n        internal static Type[]/*!!*/ GetParameterTypes(ParameterInfo[]/*!!*/ parameters)\r\n        {\r\n            Type[] types = new Type[parameters.Length];\r\n            for (int i = 0; i < parameters.Length; i++)\r\n                types[i] = parameters[i].ParameterType;\r\n            return types;\r\n        }\r\n\r\n        public static object GetDefault(Type type)\r\n        {\r\n            return (type.IsValueType) ? Activator.CreateInstance(type) : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses the <paramref name=\"realType\"/> into <paramref name=\"transientId\"/>, <paramref name=\"sourceFile\"/> and <paramref name=\"typeName\"/>.\r\n        /// </summary>\r\n        /// <param name=\"realType\">Type from within <see cref=\"PHP.Core.Reflection.TransientModule\"/>, <see cref=\"PHP.Core.Reflection.ScriptModule\"/> or <see cref=\"PHP.Core.Reflection.PureModule\"/>.</param>\r\n        /// <param name=\"transientId\"><c>-1</c> or Id of transiend module.</param>\r\n        /// <param name=\"sourceFile\"><c>null</c> or relative file name of the contained type.</param>\r\n        /// <param name=\"typeName\">Cannot be null. PHP type name without the prefixed <c>&lt;</c>~<c>&gt;</c> information. CLR notation of namespaces.</param>\r\n        /// <remarks>Handles special cases of types from ClassLibrary and Core.</remarks>\r\n        public static void ParseTypeId(Type/*!*/realType, out int transientId, out string sourceFile, out string typeName)\r\n        {\r\n            Debug.Assert(realType != null);\r\n\r\n            // parse the type name (ScriptModule, PureModule, TransientModule):\r\n            ParseTypeId(realType.FullName, out transientId, out sourceFile, out typeName);\r\n\r\n            //\r\n            // handle special cases:\r\n            //\r\n\r\n            // [ImplementsTypeAttribute] with PHPTypeName specified => take the PHPTypeName only\r\n            var attr = ImplementsTypeAttribute.Reflect(realType);\r\n            if (attr != null && attr.PHPTypeName != null)\r\n            {\r\n                typeName = attr.PHPTypeName;\r\n                return;\r\n            }\r\n            \r\n            // PHP.Library. => cut of the namespace, keep realType.Name only\r\n            // J: HACK because of PHP types in ClassLibrary and Core\r\n            if (realType.Namespace.StartsWith(Namespaces.Library, StringComparison.Ordinal))\r\n            {\r\n                typeName = realType.Name;\r\n                return;\r\n            }            \r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses the <paramref name=\"realTypeFullName\"/> into <paramref name=\"transientId\"/>, <paramref name=\"sourceFile\"/> and <paramref name=\"typeName\"/>.\r\n        /// </summary>\r\n        /// <param name=\"realTypeFullName\">Expecting <see cref=\"Type.FullName\"/> (type CLR full name, including <c>.</c>, <c>+</c>) of a type from within <see cref=\"PHP.Core.Reflection.TransientModule\"/>, <see cref=\"PHP.Core.Reflection.ScriptModule\"/> or <see cref=\"PHP.Core.Reflection.PureModule\"/>.</param>\r\n        /// <param name=\"transientId\"><c>-1</c> or Id of transiend module.</param>\r\n        /// <param name=\"sourceFile\"><c>null</c> or relative file name of the contained type.</param>\r\n        /// <param name=\"typeName\">PHP type name without the prefixed <c>&lt;</c>~<c>&gt;</c> information. CLR notation of namespaces. Can be <c>null</c> reference if there is no type name (global function in transient module).</param>\r\n        internal static void ParseTypeId(string/*!*/realTypeFullName, out int transientId, out string sourceFile, out string typeName)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(realTypeFullName));\r\n\r\n            //\r\n            transientId = PHP.Core.Reflection.TransientAssembly.InvalidEvalId;\r\n\r\n            // <srcFile{[^?]id}>.typeName\r\n            if (realTypeFullName[0] == '<')\r\n            {\r\n                // naming policy of TransientModule, ScriptModule\r\n                int closing;\r\n                if ((closing = realTypeFullName.IndexOf('>', 1)) >= 0)\r\n                {\r\n                    // find ^ or ?\r\n                    int idDelim;\r\n                    if ((idDelim = realTypeFullName.IndexOfAny(PHP.Core.Reflection.TransientModule.IdDelimiters, 1, closing)) >= 0)\r\n                        transientId = int.Parse(realTypeFullName.Substring(idDelim + 1, closing - idDelim - 1));\r\n                    else\r\n                        idDelim = closing;\r\n                    \r\n                    // parse sourceFile out:\r\n                    sourceFile = realTypeFullName.Substring(1, idDelim - 1);\r\n                }\r\n                else\r\n                {\r\n                    Debug.Fail(\"Unexpected Type.FullName! Missing closing '>' in '\" + realTypeFullName + \"'.\");\r\n                    sourceFile = null;\r\n                    closing = 1;\r\n                }\r\n\r\n                if (realTypeFullName.Length > closing + 1)\r\n                {\r\n                    // parse typeName out:\r\n                    Debug.Assert(\r\n                        realTypeFullName.Length > closing + 2 && realTypeFullName[closing + 1] == '.',\r\n                        \"Unexpected Type.FullName! Missing '.' after '>' in '\" + realTypeFullName + \"'.\");\r\n\r\n                    // get the type name (without version id and generic params):\r\n                    typeName = ClrNotationUtils.SubstringWithoutBackquoteAndHash(\r\n                        realTypeFullName,\r\n                        closing + 2,\r\n                        realTypeFullName.Length - closing - 2);\r\n                }\r\n                else\r\n                {\r\n                    typeName = null;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // naming policy of PureModule:\r\n                sourceFile = null;  // we are not able to determine the file name here\r\n                typeName = realTypeFullName;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Date and Time\r\n\r\n    ///// <summary>\r\n    ///// Fixes the strange behavior of <see cref=\"System.TimeZone\"/> which translates between local and\r\n    ///// UTC using current time zone, completely disregarding the current zone's UTC offset.\r\n    ///// </summary>\r\n    //public abstract class CustomTimeZoneBase : TimeZone\r\n    //{\r\n    //    public override DateTime ToLocalTime(DateTime time)\r\n    //    {\r\n    //        TimeSpan offset = GetUtcOffset(time);\r\n    //        DateTime local = new DateTime((time + offset).Ticks, DateTimeKind.Local);\r\n\r\n    //        // was the offset correct?\r\n    //        offset = GetUtcOffset(local);\r\n    //        if (local - offset != time)\r\n    //        {\r\n    //            return new DateTime((time + offset).Ticks, DateTimeKind.Local);\r\n    //        }\r\n    //        else return local;\r\n    //    }\r\n\r\n    //    public override DateTime ToUniversalTime(DateTime time)\r\n    //    {\r\n    //        return new DateTime((time - GetUtcOffset(time)).Ticks, DateTimeKind.Utc);\r\n    //    }\r\n    //}\r\n\r\n    /// <summary>\r\n    /// Unix TimeStamp to DateTime conversion and vice versa\r\n    /// </summary>\r\n    public static class DateTimeUtils\r\n    {\r\n        #region Nested Class: UtcTimeZone, GmtTimeZone\r\n\r\n        //private sealed class _UtcTimeZone : CustomTimeZoneBase\r\n        //{\r\n        //    public override string DaylightName { get { return \"UTC\"; } }\r\n        //    public override string StandardName { get { return \"UTC\"; } }\r\n\r\n        //    public override TimeSpan GetUtcOffset(DateTime time)\r\n        //    {\r\n        //        return new TimeSpan(0);\r\n        //    }\r\n\r\n        //    public override DaylightTime GetDaylightChanges(int year)\r\n        //    {\r\n        //        return new DaylightTime(new DateTime(0), new DateTime(0), new TimeSpan(0));\r\n        //    }\r\n\r\n\r\n        //}\r\n\r\n        //private sealed class _GmtTimeZone : CustomTimeZoneBase\r\n        //{\r\n        //    public override string DaylightName { get { return \"GMT Daylight Time\"; } }\r\n        //    public override string StandardName { get { return \"GMT Standard Time\"; } }\r\n\r\n        //    public override TimeSpan GetUtcOffset(DateTime time)\r\n        //    {\r\n        //        return IsDaylightSavingTime(time) ? new TimeSpan(0, +1, 0, 0, 0) : new TimeSpan(0);\r\n        //    }\r\n        //    public override DaylightTime GetDaylightChanges(int year)\r\n        //    {\r\n        //        return new DaylightTime\r\n        //        (\r\n        //          new DateTime(year, 3, 27, 1, 0, 0),\r\n        //          new DateTime(year, 10, 30, 2, 0, 0),\r\n        //          new TimeSpan(0, +1, 0, 0, 0)\r\n        //        );\r\n        //    }\r\n        //}\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Time 0 in terms of Unix TimeStamp.\r\n        /// </summary>\r\n        public static readonly DateTime/*!*/UtcStartOfUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\r\n\r\n        /// <summary>\r\n        /// UTC time zone.\r\n        /// </summary>\r\n        public static TimeZoneInfo/*!*/UtcTimeZone { get { return TimeZoneInfo.Utc; } }\r\n\r\n        /// <summary>\r\n        /// Converts <see cref=\"DateTime\"/> representing UTC time to UNIX timestamp.\r\n        /// </summary>\r\n        /// <param name=\"dt\">Time.</param>\r\n        /// <returns>Unix timestamp.</returns>\r\n        public static int UtcToUnixTimeStamp(DateTime dt)\r\n        {\r\n            double seconds = (dt - UtcStartOfUnixEpoch).TotalSeconds;\r\n\r\n            if (seconds < Int32.MinValue)\r\n                return Int32.MinValue;\r\n            if (seconds > Int32.MaxValue)\r\n                return Int32.MaxValue;\r\n\r\n            return (int)seconds;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts UNIX timestamp (number of seconds from 1.1.1970) to <see cref=\"DateTime\"/>.\r\n        /// </summary>\r\n        /// <param name=\"timestamp\">UNIX timestamp</param>\r\n        /// <returns><see cref=\"DateTime\"/> structure representing UTC time.</returns>\r\n        public static DateTime UnixTimeStampToUtc(int timestamp)\r\n        {\r\n            return UtcStartOfUnixEpoch + TimeSpan.FromSeconds(timestamp);\r\n        }\r\n\r\n#if !SILVERLIGHT\r\n        /// <summary>\r\n        /// Gets the daylight saving time difference between two dates.\r\n        /// </summary>\r\n        /// <param name=\"src\">Source date.</param>\r\n        /// <param name=\"dst\">Destination date.</param>\r\n        /// <returns>\r\n        /// The time span that has to be added to the source date's Daylight Saving Time Delta to get \r\n        /// destination date's one.\r\n        /// </returns>\r\n        public static TimeSpan GetDaylightTimeDifference(DateTime src, DateTime dst)\r\n        {\r\n            TimeZone zone = TimeZone.CurrentTimeZone;\r\n\r\n            if (src.Kind != DateTimeKind.Local) src = zone.ToLocalTime(src);\r\n            if (dst.Kind != DateTimeKind.Local) dst = zone.ToLocalTime(dst);\r\n\r\n            DaylightTime src_dt = zone.GetDaylightChanges(src.Year);\r\n            DaylightTime dst_dt = zone.GetDaylightChanges(dst.Year);\r\n\r\n            // difference between DST of src and dst:\r\n            return\r\n              (TimeZone.IsDaylightSavingTime(dst, dst_dt) ? dst_dt.Delta : TimeSpan.Zero) -\r\n              (TimeZone.IsDaylightSavingTime(src, src_dt) ? src_dt.Delta : TimeSpan.Zero);\r\n        }\r\n#endif\r\n\r\n        /// <summary>\r\n        /// Determine maximum of three given <see cref=\"DateTime\"/> values.\r\n        /// </summary>\r\n        public static DateTime Max(DateTime d1, DateTime d2)\r\n        {\r\n            return (d1 > d2) ? d1 : d2;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determine maximum of three given <see cref=\"DateTime\"/> values.\r\n        /// </summary>\r\n        public static DateTime Max(DateTime d1, DateTime d2, DateTime d3)\r\n        {\r\n            return (d1 < d2) ? ((d2 < d3) ? d3 : d2) : ((d1 < d3) ? d3 : d1);\r\n        }\r\n#if DEBUG\r\n\r\n        static FieldInfo TimeZone_CurrentTimeZone = null;\r\n\r\n        /// <summary>\r\n        /// Sets system current time zone (for debugging purposes only).\r\n        /// </summary>\r\n        public static void SetCurrentTimeZone(TimeZone/*!*/ zone)\r\n        {\r\n            Debug.Assert(zone != null);\r\n\r\n            if (TimeZone_CurrentTimeZone == null)\r\n                TimeZone_CurrentTimeZone = typeof(TimeZone).GetField(\"currentTimeZone\", BindingFlags.NonPublic | BindingFlags.Static);\r\n            \r\n            Debug.Assert(TimeZone_CurrentTimeZone != null, \"Missing private field of TimeZone class.\");\r\n            TimeZone_CurrentTimeZone.SetValue(null, zone);\r\n        }\r\n\r\n#endif\r\n\r\n\r\n        //\t\tprivate static TimeZone GetTimeZoneFromRegistry(TimeZone/*!*/ zone)\r\n        //\t\t{\r\n        //\t\t  try\r\n        //\t\t  {\r\n        //\t\t    using (RegistryKey key = Registry.LocalMachine.OpenSubKey(\r\n        //\t\t      @\"Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\\" + zone.StandardName,false))\r\n        //\t\t    {\r\n        //  \t\t    if (key == null) return null;\r\n        //\t\t      \r\n        //\t\t      byte[] tzi = key.GetValue(\"TZI\") as byte[];\r\n        //\t\t      if (tzi == null) continue;\r\n        //    \t\t    \r\n        //    \t\t  int bias = BitConverter.ToInt32(tzi,0);\r\n        //    \t\t  \r\n        //  \t\t  }  \r\n        //\t\t  }\r\n        //\t\t  catch (Exception)\r\n        //\t\t  {\r\n        //\t\t  }\r\n        //\r\n        //\t\t  return null;\r\n        //\t\t}\t\t\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ClrNotationUtils\r\n\r\n    internal static class ClrNotationUtils\r\n    {\r\n        internal const char VersionIndexDelimiter = '#';\r\n        internal const char GenericParamsDelimiter = '`';\r\n\r\n        /// <summary>\r\n\t\t/// Makes full CLR name from this instance. \r\n\t\t/// </summary>\r\n        /// <param name=\"qualifiedName\">Qualified name to be converted to CLR notation.</param>\r\n\t\t/// <param name=\"genericParamCount\">Number of generic parameters.</param>\r\n\t\t/// <param name=\"versionIndex\">Index of the conditional version or 0 for unconditional.</param>\r\n\t\t/// <returns>Full CLR name.</returns>\r\n        public static string ToClrNotation(this QualifiedName qualifiedName, int genericParamCount, int versionIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(versionIndex >= 0, \"Version index should be known.\");\r\n\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\r\n            for (int i = 0; i < qualifiedName.Namespaces.Length; i++)\r\n\t\t\t{\r\n                result.Append(qualifiedName.Namespaces[i]);\r\n\t\t\t\tresult.Append('.');\r\n\t\t\t}\r\n\r\n            if (qualifiedName.Name.Value != \"\")\r\n                result.Append(qualifiedName.Name);\r\n\r\n\t\t\tif (versionIndex > 0)\r\n\t\t\t{\r\n\t\t\t\tresult.Append(VersionIndexDelimiter);\r\n\t\t\t\tresult.Append(versionIndex);\r\n\t\t\t}\r\n\r\n\t\t\tif (genericParamCount > 0)\r\n\t\t\t{\r\n\t\t\t\tresult.Append(GenericParamsDelimiter);\r\n\t\t\t\tresult.Append(genericParamCount);\r\n\t\t\t}\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Handles PHP type and parses its name.\r\n        /// </summary>\r\n        public static QualifiedName FromClrNotation(Type/*!*/type)\r\n        {\r\n            Debug.Assert(type != null);\r\n\r\n            if (type.Assembly == typeof(ApplicationContext).Assembly)\r\n                return new QualifiedName(new Name(type.Name));  // ignore namespace in Core\r\n            else\r\n            {\r\n                // handle PHP type with type name specified in the attribute:\r\n                var attr = ImplementsTypeAttribute.Reflect(type);\r\n                if (attr != null && attr.PHPTypeName != null)\r\n                    return new QualifiedName(new Name(attr.PHPTypeName));\r\n\r\n                // default behaviour:\r\n                return FromClrNotation(type.FullName, true);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses CLR full name. \r\n\t\t/// </summary>\r\n\t\tpublic static QualifiedName FromClrNotation(string/*!*/ fullName, bool hasBaseName)\r\n\t\t{\r\n            if (fullName[0] == '<')\r\n            {\r\n                // \"<*>.PhpTypeName\"\r\n                int lastGt = fullName.IndexOf('>');\r\n                if (lastGt > 0)\r\n                {\r\n                    Debug.Assert(fullName[lastGt + 1] == '.');\r\n                    fullName = fullName.Substring(lastGt + 2);\r\n                }\r\n            }\r\n            \r\n\t\t\tint component_count = 1;\r\n\t\t\tfor (int i = 0; i < fullName.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (fullName[i] == '.' || fullName[i] == '+')\r\n\t\t\t\t\tcomponent_count++;\r\n\t\t\t}\r\n\r\n\t\t\tName[] namespaces = new Name[hasBaseName ? component_count - 1 : component_count];\r\n\r\n\t\t\tint j = 0;\r\n\t\t\tint last_separator = -1;\r\n\t\t\tfor (int i = 0; i < fullName.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (fullName[i] == '.' || fullName[i] == '+')\r\n\t\t\t\t{\r\n\t\t\t\t\tnamespaces[j++] = new Name(SubstringWithoutBackquoteAndHash(fullName, last_separator + 1, i - last_separator - 1));\r\n\t\t\t\t\tlast_separator = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tName last_component = new Name(SubstringWithoutBackquoteAndHash(fullName, last_separator + 1, fullName.Length - last_separator - 1));\r\n\r\n\t\t\tif (hasBaseName)\r\n\t\t\t{\r\n\t\t\t\treturn new QualifiedName(last_component, namespaces);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tnamespaces[j] = last_component;\r\n\t\t\t\treturn new QualifiedName(Name.EmptyBaseName, namespaces);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static char[] BackquoteAndHash = new char[] { GenericParamsDelimiter, VersionIndexDelimiter };\r\n\r\n\t\tinternal static string/*!*/ SubstringWithoutBackquoteAndHash(string/*!*/ fullName, int start, int length)\r\n\t\t{\r\n\t\t\tint backquote = fullName.IndexOfAny(BackquoteAndHash, start, length);\r\n\t\t\tif (backquote != -1)\r\n\t\t\t\tlength = backquote - start;\r\n\r\n\t\t\treturn fullName.Substring(start, length);\r\n\t\t}\r\n}\r\n        #endregion\r\n\r\n    #region Threading\r\n    //TODO: do something with this #if\r\n#if !SILVERLIGHT\r\n\r\n    /// <summary>\r\n    /// Implements cache mechanism to be used in multi-threaded environment.\r\n    /// </summary>\r\n    /// <typeparam name=\"K\">The cache key type.</typeparam>\r\n    /// <typeparam name=\"T\">The cache value type.</typeparam>\r\n    public class SynchronizedCache<K, T>\r\n    {\r\n        /// <summary>\r\n        /// The lock used to access the cache synchronously. Cannot be null.\r\n        /// </summary>\r\n        private readonly ReaderWriterLockSlim/*!*/cacheLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);\r\n\r\n        /// <summary>\r\n        /// Cached values. Cannot be null.\r\n        /// </summary>\r\n        private readonly Dictionary<K, T>/*!*/innerCache = new Dictionary<K, T>();\r\n\r\n        /// <summary>\r\n        /// Amount of items in the cache dictionary.\r\n        /// </summary>\r\n        public int Count\r\n        {\r\n            get\r\n            {\r\n                return innerCache.Count;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The update function used when cache miss. Cannot be null.\r\n        /// </summary>\r\n        private readonly Func<K, T>/*!*/updateFunction;\r\n\r\n        /// <summary>\r\n        /// Initialize the new instance of SynchronizedCache object.\r\n        /// </summary>\r\n        /// <param name=\"updateFunction\">The update function used when cache miss.\r\n        /// Note the function is called within the write lock exclusively.</param>\r\n        public SynchronizedCache(Func<K, T>/*!*/updateFunction)\r\n        {\r\n            if (updateFunction == null)\r\n                throw new ArgumentNullException(\"updateFunction\");\r\n\r\n            //\r\n            this.updateFunction = updateFunction;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try to get an item from the cache. If the given <paramref name=\"key\"/> is not found,\r\n        /// the <see cref=\"updateFunction\"/> is used to create new item.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key of the item.</param>\r\n        /// the cache does not contain given <paramref name=\"key\"/> yet.\r\n        /// <returns>The item according to the given <paramref name=\"key\"/>.</returns>\r\n        [DebuggerNonUserCode]\r\n        public T Get(K key)\r\n        {\r\n            T result;\r\n\r\n            // TODO (J): 2-gen cache, persistent readonly cache without locks\r\n\r\n            // try to find the value in the cache first\r\n            cacheLock.EnterUpgradeableReadLock();\r\n            try\r\n            {\r\n                if (innerCache.TryGetValue(key, out result))\r\n                    return result;\r\n\r\n                // upgrade to write lock and add new value into the cache\r\n                cacheLock.EnterWriteLock();\r\n                try\r\n                {\r\n                    // double check the lock, the item could be added while the thread was waiting for the writer lock\r\n                    if (innerCache.TryGetValue(key, out result))\r\n                        return result;\r\n\r\n                    // only here, the Get method can be called recursively\r\n\r\n                    // add the value into the cache\r\n                    // create new value synchronously here\r\n                    innerCache.Add(key, (result = updateFunction(key)));\r\n\r\n                    //\r\n                    return result;\r\n                }\r\n                finally\r\n                {\r\n                    cacheLock.ExitWriteLock();\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitUpgradeableReadLock();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Update the value with the given <paramref name=\"key\"/> using specified <paramref name=\"updateFunction\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the value to be updated or added.</param>\r\n        /// <param name=\"updateFunction\">The update function used to get the value of the item. The parameter cannot be null.</param>\r\n        /// <returns>The value of the item with given <paramref name=\"key\"/>.</returns>\r\n        [DebuggerNonUserCode]\r\n        public T Update(K key, Func<K, T>/*!*/updateFunction)\r\n        {\r\n            Debug.Assert(updateFunction != null);\r\n\r\n            cacheLock.EnterWriteLock();\r\n            try\r\n            {\r\n                // update the value in the cache\r\n                // create new value synchronously here\r\n                return innerCache[key] = updateFunction(key);\r\n            }\r\n            finally\r\n            {\r\n                cacheLock.ExitWriteLock();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Update the value with the given <paramref name=\"key\"/> using default <see cref=\"updateFunction\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the value to be updated or added.</param>\r\n        /// <returns>The value of the item with given <paramref name=\"key\"/>.</returns>\r\n        [DebuggerNonUserCode]\r\n        public T Update(K key)\r\n        {\r\n            return Update(key, updateFunction);\r\n        }\r\n    }\r\n\r\n#else\r\n\r\n    /// <summary>\r\n    /// Implements cache mechanism to be used in multi-threaded environment.\r\n    /// </summary>\r\n    /// <typeparam name=\"K\">The cache key type.</typeparam>\r\n    /// <typeparam name=\"T\">The cache value type.</typeparam>\r\n    public class SynchronizedCache<K, T>\r\n    {\r\n        /// <summary>\r\n        /// The lock used to access the cache synchronously. Cannot be null.\r\n        /// </summary>\r\n        private readonly object/*!*/cacheLock = new object();\r\n\r\n        /// <summary>\r\n        /// Cached values. Cannot be null.\r\n        /// </summary>\r\n        private readonly Dictionary<K, T>/*!*/innerCache = new Dictionary<K, T>();\r\n\r\n        /// <summary>\r\n        /// The update function used when cache miss. Cannot be null.\r\n        /// </summary>\r\n        private readonly Func<K, T>/*!*/updateFunction;\r\n\r\n        /// <summary>\r\n        /// Initialize the new instance of SynchronizedCache object.\r\n        /// </summary>\r\n        /// <param name=\"updateFunction\">The update function used when cache miss.\r\n        /// Note the function is called within the lock.</param>\r\n        public SynchronizedCache(Func<K, T>/*!*/updateFunction)\r\n        {\r\n            if (updateFunction == null)\r\n                throw new ArgumentNullException(\"updateFunction\");\r\n\r\n            //\r\n            this.updateFunction = updateFunction;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try to get an item from the cache. If the given <paramref name=\"key\"/> is not found,\r\n        /// the <see cref=\"updateFunction\"/> is used to create new item.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key of the item.</param>\r\n        /// the cache does not contain given <paramref name=\"key\"/> yet.\r\n        /// <returns>The item according to the given <paramref name=\"key\"/>.</returns>\r\n        public T Get(K key)\r\n        {\r\n            T result;\r\n\r\n            // try to find the value in the cache first\r\n            lock(cacheLock)\r\n            {\r\n                if (innerCache.TryGetValue(key, out result))\r\n                    return result;\r\n\r\n                // add the value into the cache\r\n                // create new value synchronously here\r\n                innerCache.Add(key, (result = updateFunction(key)));\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Update the value with the given <paramref name=\"key\"/> using specified <paramref name=\"updateFunction\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the value to be updated or added.</param>\r\n        /// <param name=\"updateFunction\">The update function used to get the value of the item. The parameter cannot be null.</param>\r\n        /// <returns>The value of the item with given <paramref name=\"key\"/>.</returns>\r\n        public T Update(K key, Func<K, T>/*!*/updateFunction)\r\n        {\r\n            Debug.Assert(updateFunction != null);\r\n\r\n            lock(cacheLock)\r\n            {\r\n                // update the value in the cache\r\n                // create new value synchronously here\r\n                return innerCache[key] = updateFunction(key);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Update the value with the given <paramref name=\"key\"/> using default <see cref=\"updateFunction\"/>.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key of the value to be updated or added.</param>\r\n        /// <returns>The value of the item with given <paramref name=\"key\"/>.</returns>\r\n        public T Update(K key)\r\n        {\r\n            return Update(key, updateFunction);\r\n        }\r\n    }\r\n\r\n\r\n#endif\r\n\r\n    #endregion\r\n\r\n    #region Delegates\r\n\r\n    public static class DelegateExtensions\r\n    {\r\n        /// <summary>\r\n        /// Combine with another predicate function. Both functions must return true.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The type of predicate functions argument.</typeparam>\r\n        /// <param name=\"predicate1\">This predicate. Can be null.</param>\r\n        /// <param name=\"predicate2\">Another predicate. Can be null.</param>\r\n        /// <returns>Combination of two given predicates or null if both arguments are null.</returns>\r\n        public static Predicate<T> AndAlso<T>(this Predicate<T> predicate1, Predicate<T> predicate2)\r\n        {\r\n            if (predicate1 == null && predicate2 == null)\r\n                return null;\r\n\r\n            if (predicate1 == null)\r\n                return predicate2;\r\n\r\n            if (predicate2 == null)\r\n                return predicate1;\r\n\r\n            // else combine\r\n            return (arg) => predicate1(arg) && predicate2(arg);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Combine with another predicate function. Predicates will be processed sequentially until one pass.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The type of predicate functions argument.</typeparam>\r\n        /// <param name=\"predicate1\">This predicate. Can be null.</param>\r\n        /// <param name=\"predicate2\">Another predicate. Can be null.</param>\r\n        /// <returns>Combination of two given predicates or null if both arguments are null.</returns>\r\n        public static Predicate<T> OrElse<T>(this Predicate<T> predicate1, Predicate<T> predicate2)\r\n        {\r\n            if (predicate1 == null && predicate2 == null)\r\n                return null;\r\n\r\n            if (predicate1 == null)\r\n                return predicate2;\r\n\r\n            if (predicate2 == null)\r\n                return predicate1;\r\n\r\n            // else combine\r\n            return (arg) => predicate1(arg) || predicate2(arg);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Numbers\r\n\r\n    internal static class NumberUtils\r\n    {\r\n        /// <summary>\r\n        /// Determines whether given <see cref=\"long\"/> can be safely converted to <see cref=\"int\"/>.\r\n        /// </summary>\r\n        public static bool IsInt32(long l)\r\n        {\r\n            int i = unchecked((int)l);\r\n            return (i == l);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Collections\r\n\r\n    /// <summary>\r\n    /// Type of an item in dictionary collection.\r\n    /// </summary>\r\n    public enum DictionaryItemType { Keys, Values, Entries };\r\n\r\n    /// <summary>\r\n    /// Auxiliary class which represents invalid key or value.\r\n    /// </summary>\r\n    [Serializable]\r\n    public class InvalidItem : ISerializable\r\n    {\r\n        /// <summary>Prevents instantiation.</summary>\r\n        private InvalidItem() { }\r\n\r\n        /// <summary>Invalid item singleton.</summary>\r\n        internal static readonly InvalidItem Default = new InvalidItem();\r\n\r\n        #region Serialization\r\n#if !SILVERLIGHT\r\n\r\n        /// <include file='Doc/Common.xml' path='/docs/method[@name=\"GetObjectData\"]/*'/>\r\n        [System.Security.SecurityCritical]\r\n        public void GetObjectData(SerializationInfo info, StreamingContext context)\r\n        {\r\n            info.SetType(typeof(InvalidItemDeserializer));\r\n        }\r\n\r\n        [Serializable]\r\n        private class InvalidItemDeserializer : IObjectReference\r\n        {\r\n            public Object GetRealObject(StreamingContext context)\r\n            {\r\n                return InvalidItem.Default;\r\n            }\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n    #region WeakCache\r\n\r\n    /// <summary>\r\n    /// Maps real objects to their associates (of type <typeparamref name=\"T\"/>).\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">The type of objects associated with real objects.</typeparam>\r\n    /// <remarks>\r\n    /// The cache should store only the real objects that are alive, i.e. reachable from GC roots.\r\n    /// It is assumed that there exists a (strong) reference from instances of <typeparamref name=\"T\"/>\r\n    /// to their associated real objects. Therefore holding the associates in this cache using strong\r\n    /// references only would not work and a more sophisticated pattern is employed.\r\n    /// </remarks>\r\n    internal class WeakCache<T> : Dictionary<object, object>\r\n    {\r\n        #region WeakCacheKey\r\n#if !SILVERLIGHT\r\n        /// <summary>\r\n        /// Weak reference with overriden <see cref=\"GetHashCode\"/> and <see cref=\"Equals\"/>.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Delegating <see cref=\"GetHashCode\"/> to the target and confirming equality with the target\r\n        /// makes it possible to use the target (real object) as key when performing dictionary lookups.\r\n        /// There's not need to create a new <see cref=\"WeakCacheKey\"/> just to call something like\r\n        /// <see cref=\"TryGetValue\"/>.\r\n        /// </remarks>\r\n        private class WeakCacheKey : WeakReference\r\n        {\r\n            private int hashCode;\r\n\r\n            internal WeakCacheKey(object obj)\r\n                : base(obj, false)\r\n            {\r\n                this.hashCode = obj.GetHashCode();\r\n            }\r\n\r\n            public override bool Equals(object obj)\r\n            {\r\n                if (obj == null) return false;\r\n                if (obj != this && (!IsAlive || !Object.ReferenceEquals(obj, Target))) return false;\r\n\r\n                return true;\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n#else\r\n\r\n        private class WeakCacheKey\r\n        {\r\n            private WeakReference _ref;\r\n\r\n            private int hashCode;\r\n\r\n            internal WeakCacheKey(object obj)\r\n            {\r\n                _ref = new WeakReference(obj,false);\r\n\r\n                this.hashCode = obj.GetHashCode();\r\n            }\r\n\r\n            public override bool Equals(object obj)\r\n            {\r\n                if (obj == null) return false;\r\n                if (obj != this && (!_ref.IsAlive || !Object.ReferenceEquals(obj, _ref.Target))) return false;\r\n\r\n                return true;\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return hashCode;\r\n            }\r\n\r\n            public bool IsAlive\r\n            {\r\n                get\r\n                { return _ref.IsAlive; }\r\n            }\r\n\r\n\r\n            public object Target\r\n            {\r\n                get\r\n                { return _ref.Target; }\r\n            }\r\n\r\n        }\r\n\r\n#endif\r\n\r\n        #endregion\r\n\r\n        private int allocCheckCounter;\r\n        private int lastSweepCount;\r\n        private long lastSweepMemory;\r\n\r\n        /// <summary>\r\n        /// Adds a new real object - associate mapping.\r\n        /// </summary>\r\n        public void Add(object key, T value)\r\n        {\r\n            CheckAllocation();\r\n\r\n            base.Add(new WeakCacheKey(key), new WeakReference(value, true));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves the associate for a given real object.\r\n        /// </summary>\r\n        public bool TryGetValue(object key, out T value)\r\n        {\r\n            object obj;\r\n\r\n            bool success = base.TryGetValue(key, out obj);\r\n            if (!success)\r\n            {\r\n                value = default(T);\r\n                return false;\r\n            }\r\n\r\n            WeakReference wr = obj as WeakReference;\r\n            if (wr != null)\r\n            {\r\n                value = (T)wr.Target;\r\n            }\r\n            else\r\n            {\r\n                // turn the strong ref to weak ref now\r\n                this[key] = new WeakReference(obj, true);\r\n\r\n                value = (T)obj;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check whether it is reasonable to perform a weak reference sweep and delegates to <see cref=\"WeakReferenceSweep\"/>.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Inspired by <c>System.ComponentModel.WeakHashTable.ScavengeKeys</c> BCL internal class.\r\n        /// </remarks>\r\n        private void CheckAllocation()\r\n        {\r\n            int count = Count;\r\n\r\n            if (count != 0)\r\n            {\r\n                if (lastSweepCount == 0) lastSweepCount = count;\r\n                else\r\n                {\r\n                    long mem = GC.GetTotalMemory(false);\r\n                    if (lastSweepMemory == 0) lastSweepMemory = mem;\r\n                    else\r\n                    {\r\n                        float mem_delta = ((float)(mem - lastSweepMemory)) / ((float)lastSweepMemory);\r\n                        float count_delta = ((float)(count - lastSweepCount)) / ((float)lastSweepCount);\r\n\r\n                        if ((mem_delta < 0 && count_delta >= 0) || ++allocCheckCounter > 4096)\r\n                        {\r\n                            WeakReferenceSweep();\r\n\r\n                            lastSweepMemory = mem;\r\n                            lastSweepCount = count;\r\n                            allocCheckCounter = 0;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes items representing real objects that are already dead.\r\n        /// </summary>\r\n        private void WeakReferenceSweep()\r\n        {\r\n            List<WeakCache<T>.WeakCacheKey> dead_refs = new List<WeakCache<T>.WeakCacheKey>();\r\n            List<KeyValuePair<object, T>> strong_keys = new List<KeyValuePair<object, T>>();\r\n\r\n            foreach (KeyValuePair<object, object> pair in this)\r\n            {\r\n                WeakCache<T>.WeakCacheKey key = (WeakCache<T>.WeakCacheKey)pair.Key;\r\n\r\n                if (!key.IsAlive) dead_refs.Add(key);\r\n                else\r\n                {\r\n                    if (!(pair.Value is WeakReference))\r\n                    {\r\n                        strong_keys.Add(new KeyValuePair<object, T>(key.Target, (T)pair.Value));\r\n                    }\r\n                }\r\n            }\r\n\r\n            // remove dead keys\r\n            foreach (WeakCache<T>.WeakCacheKey key in dead_refs)\r\n            {\r\n                Remove(key);\r\n            }\r\n\r\n            // weaken strong references to living associates\r\n            foreach (KeyValuePair<object, T> pair in strong_keys)\r\n            {\r\n                if (pair.Key != null) this[pair.Key] = new WeakReference(pair.Value, true);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ensures that the associate of the given real object is held strongly.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Should be called from within the associate's finalizer when the real object is\r\n        /// figured out to be still alive.\r\n        /// </remarks>\r\n        public void Resurrect(object key, T value)\r\n        {\r\n            Debug.Assert(ContainsKey(key));\r\n\r\n            // turn the weak ref into strong ref\r\n            this[key] = value;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region GenericEnumeratorAdapter, GenericDictionaryAdapter\r\n\r\n    /// <summary>\r\n    /// Makes it possible to use C# iterators to implement the <see cref=\"IDictionaryEnumerator\"/>\r\n    /// interface.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Optionally performs CLR to PHP wrapping on returned values.\r\n    /// </remarks>\r\n    [Serializable]\r\n    public class GenericEnumerableAdapter<TValue> : IDictionaryEnumerator\r\n    {\r\n        #region Fields\r\n\r\n        private IEnumerator<TValue>/*!*/ baseEnumerator;\r\n        private bool wrapValues;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public GenericEnumerableAdapter(IEnumerator<TValue>/*!*/ baseEnumerator, bool wrapValues)\r\n        {\r\n            Debug.Assert(baseEnumerator != null);\r\n\r\n            this.baseEnumerator = baseEnumerator;\r\n            this.wrapValues = wrapValues;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDictionaryEnumerator Members\r\n\r\n        public DictionaryEntry Entry\r\n        {\r\n            get { return new DictionaryEntry(Key, Value); }\r\n        }\r\n\r\n        public object Key\r\n        {\r\n            get\r\n            { return null; }\r\n        }\r\n\r\n        public object Value\r\n        {\r\n            get\r\n            {\r\n                TValue value = baseEnumerator.Current;\r\n                if (wrapValues) return PHP.Core.Reflection.ClrObject.WrapDynamic(value);\r\n                return value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEnumerator Members\r\n\r\n        public object Current\r\n        {\r\n            get { return new DictionaryEntry(Key, Value); }\r\n        }\r\n\r\n        public bool MoveNext()\r\n        {\r\n            return baseEnumerator.MoveNext();\r\n        }\r\n\r\n        public void Reset()\r\n        {\r\n            baseEnumerator.Reset();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Makes it possible to use C# 2.0 iterators to implement the <see cref=\"IDictionaryEnumerator\"/>\r\n    /// interface.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Optionally performs CLR to PHP wrapping on returned keys and values.\r\n    /// </remarks>\r\n    [Serializable]\r\n    public class GenericDictionaryAdapter<TKey, TValue> : IDictionaryEnumerator\r\n    {\r\n        #region Fields\r\n\r\n        private IEnumerator<KeyValuePair<TKey, TValue>>/*!*/ baseEnumerator;\r\n        private bool wrapKeysAndValues;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public GenericDictionaryAdapter(IEnumerator<KeyValuePair<TKey, TValue>>/*!*/ baseEnumerator, bool wrapKeysAndValues)\r\n        {\r\n            Debug.Assert(baseEnumerator != null);\r\n\r\n            this.baseEnumerator = baseEnumerator;\r\n            this.wrapKeysAndValues = wrapKeysAndValues;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDictionaryEnumerator Members\r\n\r\n        public DictionaryEntry Entry\r\n        {\r\n            get { return new DictionaryEntry(Key, Value); }\r\n        }\r\n\r\n        public object Key\r\n        {\r\n            get\r\n            {\r\n                TKey key = baseEnumerator.Current.Key;\r\n                if (wrapKeysAndValues) return PHP.Core.Reflection.ClrObject.WrapDynamic(key);\r\n                return key;\r\n            }\r\n        }\r\n\r\n        public object Value\r\n        {\r\n            get\r\n            {\r\n                TValue value = baseEnumerator.Current.Value;\r\n                if (wrapKeysAndValues) return PHP.Core.Reflection.ClrObject.WrapDynamic(value);\r\n                return value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEnumerator Members\r\n\r\n        public object Current\r\n        {\r\n            get { return this.Entry; }\r\n        }\r\n\r\n        public bool MoveNext()\r\n        {\r\n            return baseEnumerator.MoveNext();\r\n        }\r\n\r\n        public void Reset()\r\n        {\r\n            baseEnumerator.Reset();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region HashQueue\r\n\r\n    internal sealed class HashQueue       // GENERICS: <K,V>\r\n    {\r\n        public delegate object KeyProvider(object value); // GENERICS: K(V)\r\n\r\n        private readonly Queue queue;     // GENERICS: <V>\r\n        private readonly Hashtable index; // GENERICS: <K,int>\r\n        private readonly KeyProvider keyProvider;\r\n\r\n        public HashQueue(ICollection collection, KeyProvider keyProvider)\r\n        {\r\n            queue = new Queue(collection);\r\n            index = new Hashtable(StringComparer.CurrentCultureIgnoreCase);\r\n\r\n            this.keyProvider = keyProvider;\r\n\r\n            foreach (object item in collection)\r\n                index[keyProvider(item)] = 1;\r\n        }\r\n\r\n        public int Count { get { return queue.Count; } }\r\n\r\n        public object Dequeue()\r\n        {\r\n            object result = queue.Dequeue();\r\n            object key = keyProvider(result);\r\n            int count = (int)index[key];\r\n\r\n            if (count == 0)\r\n                index.Remove(key);\r\n            else\r\n                index[key] = count - 1;\r\n\r\n            return result;\r\n        }\r\n\r\n        public void Enqueue(object item)\r\n        {\r\n            queue.Enqueue(item);\r\n            object key = keyProvider(item);\r\n            object count = index[key];\r\n\r\n            index[key] = (count != null) ? (int)count + 1 : 1;\r\n        }\r\n\r\n        public bool Contains(object item)\r\n        {\r\n            return index.ContainsKey(keyProvider(item));\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #endregion\r\n\r\n    #region FileSystemUtils\r\n\r\n    /// <summary>\r\n    /// File system utilities.\r\n    /// </summary>\r\n    public static partial class FileSystemUtils\r\n    {\r\n        /// <summary>\r\n        /// Returns the given URL without the username/password information.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Removes the text between the last <c>\"://\"</c> and the following <c>'@'</c>.\r\n        /// Does not check the URL for validity. Works for php://filter paths too.\r\n        /// </remarks>\r\n        /// <param name=\"url\">The URL to modify.</param>\r\n        /// <returns>The given URL with the username:password section replaced by <c>\"...\"</c>.</returns>\r\n        public static string StripPassword(string url)\r\n        {\r\n            if (url == null) return null;\r\n\r\n            int url_start = url.LastIndexOf(\"://\");\r\n            if (url_start > 0)\r\n            {\r\n                url_start += \"://\".Length;\r\n                int pass_end = url.IndexOf('@', url_start);\r\n                if (pass_end > url_start)\r\n                {\r\n                    StringBuilder sb = new StringBuilder(url.Length);\r\n                    sb.Append(url.Substring(0, url_start));\r\n                    sb.Append(\"...\");\r\n                    sb.Append(url.Substring(pass_end));  // results in: scheme://...@host\r\n                    return sb.ToString();\r\n                }\r\n            }\r\n            return url;\r\n        }\r\n\r\n        public static int FileSize(FileInfo fi)//TODO: Move this to PlatformAdaptationLayer\r\n        {\r\n            if (EnvironmentUtils.IsDotNetFramework)\r\n            {\r\n                // we are not calling full stat(), it is slow\r\n                return (int)fi.Length;\r\n            }\r\n            else\r\n            {\r\n                //bypass Mono bug in FileInfo.Length\r\n                using (FileStream stream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))\r\n                {\r\n                    return unchecked((int)stream.Length);\r\n                }\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Gets the time given <paramref name=\"fsi\"/> was modified. Mostly it is the <see cref=\"FileSystemInfo.LastWriteTimeUtc\"/>\r\n        /// however if the file was modified elsewhere and copied, <see cref=\"FileSystemInfo.CreationTimeUtc\"/> may be greater.\r\n        /// </summary>\r\n        /// <param name=\"fsi\">File or a directory.</param>\r\n        /// <returns>Max of <see cref=\"FileSystemInfo.LastWriteTimeUtc\"/> and <see cref=\"FileSystemInfo.CreationTimeUtc\"/>.</returns>\r\n        public static DateTime GetLastModifiedTimeUtc(this FileSystemInfo fsi)\r\n        {\r\n            Debug.Assert(fsi != null);\r\n            return DateTimeUtils.Max(fsi.LastWriteTimeUtc, fsi.CreationTimeUtc);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the time given file at <paramref name=\"path\"/> was modified. Mostly it is the <see cref=\"FileSystemInfo.LastWriteTimeUtc\"/>\r\n        /// however if the file was modified elsewhere and copied, <see cref=\"FileSystemInfo.CreationTimeUtc\"/> may be greater.\r\n        /// </summary>\r\n        /// <param name=\"path\">Path to the file.</param>\r\n        /// <returns>Max of <see cref=\"FileSystemInfo.LastWriteTimeUtc\"/> and <see cref=\"FileSystemInfo.CreationTimeUtc\"/>.</returns>\r\n        public static DateTime GetLastModifiedTimeUtc(string path)\r\n        {\r\n            return GetLastModifiedTimeUtc(new FileInfo(path));\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/Variables.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Reflection;\r\n\r\n#if SILVERLIGHT\r\nusing PHP.CoreCLR;\r\n#endif\r\n\r\nnamespace PHP.Core\r\n{\r\n\t#region Enumerations\r\n\r\n\tpublic partial class PhpTypeCodeEnum\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Retrieves <see cref=\"Type\"/> from a specified <see cref=\"PhpTypeCode\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic static Type ToType(PhpTypeCode code)\r\n\t\t{\r\n\t\t\tswitch (code)\r\n\t\t\t{\r\n\t\t\t\tcase PhpTypeCode.String: return Types.String[0];\r\n\t\t\t\tcase PhpTypeCode.Integer: return Types.Int[0];\r\n                case PhpTypeCode.LongInteger: return Types.LongInt[0];\r\n\t\t\t\tcase PhpTypeCode.Boolean: return Types.Bool[0];\r\n\t\t\t\tcase PhpTypeCode.Double: return Types.Double[0];\r\n\t\t\t\tcase PhpTypeCode.Object: return Types.Object[0];\r\n\t\t\t\tcase PhpTypeCode.PhpReference: return Types.PhpReference[0];\r\n\t\t\t\tcase PhpTypeCode.PhpArray: return Types.PhpArray[0];\r\n\t\t\t\tcase PhpTypeCode.DObject: return Types.DObject[0];\r\n\t\t\t\tcase PhpTypeCode.PhpResource: return typeof(PhpResource);\r\n\t\t\t\tcase PhpTypeCode.PhpBytes: return typeof(PhpBytes);\r\n\t\t\t\tcase PhpTypeCode.PhpString: return typeof(PhpString);\r\n\t\t\t\tcase PhpTypeCode.Void: return Types.Void;\r\n\t\t\t\tdefault: return null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves <see cref=\"PhpTypeCode\"/> from a specified <see cref=\"Type\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type.</param>\r\n\t\t/// <returns>The code.</returns>\r\n\t\tinternal static PhpTypeCode FromType(Type type)\r\n\t\t{\r\n\t\t\tif (type == Types.Object[0]) return PhpTypeCode.Object;\r\n\t\t\tif (type == Types.Double[0]) return PhpTypeCode.Double;\r\n\t\t\tif (type == Types.Int[0]) return PhpTypeCode.Integer;\r\n            if (type == Types.LongInt[0]) return PhpTypeCode.LongInteger;\r\n\t\t\tif (type == Types.String[0]) return PhpTypeCode.String;\r\n\t\t\tif (type == Types.Bool[0]) return PhpTypeCode.Boolean;\r\n\t\t\tif (type == Types.Void) return PhpTypeCode.Void;\r\n\t\t\tif (type == typeof(PhpReference)) return PhpTypeCode.PhpReference;\r\n\t\t\tif (type == Types.PhpArray[0]) return PhpTypeCode.PhpArray;\r\n\t\t\tif (typeof(Reflection.DObject).IsAssignableFrom(type)) return PhpTypeCode.DObject;\r\n\t\t\tif (type == typeof(PhpResource)) return PhpTypeCode.PhpResource;\r\n\t\t\tif (type == typeof(PhpBytes)) return PhpTypeCode.PhpBytes;\r\n\t\t\tif (type == typeof(PhpString)) return PhpTypeCode.PhpString;\r\n\r\n\t\t\tDebug.Fail(\"GetCodeFromType used on a method with a return type unknown for Phalanger\");\r\n\t\t\treturn PhpTypeCode.Invalid;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Retrieves <see cref=\"PhpTypeCode\"/> from a specified <paramref name=\"value\"/> instance.\r\n        /// </summary>\r\n        internal static PhpTypeCode FromObject(object value)\r\n        {\r\n            if (value == null) return PhpTypeCode.Object;\r\n\r\n            return FromType(value.GetType());\r\n        }\r\n        \r\n        /// <summary>\r\n        /// <c>True</c> iff given <paramref name=\"code\"/> represents value that can be copied (is IPhpCloneable and implements some logic in Copy method).\r\n        /// </summary>\r\n        /// <param name=\"code\"><see cref=\"PhpTypeCode\"/>.</param>\r\n        /// <returns>Wheter given <paramref name=\"code\"/> represents value that can be copied.</returns>\r\n        internal static bool IsDeeplyCopied(PhpTypeCode code)\r\n        {\r\n            return\r\n                code != PhpTypeCode.Void &&\r\n                code != PhpTypeCode.String &&\r\n                code != PhpTypeCode.Boolean &&\r\n                code != PhpTypeCode.Double &&\r\n                code != PhpTypeCode.Integer &&\r\n                code != PhpTypeCode.LongInteger &&\r\n                code != PhpTypeCode.PhpResource;\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Reason why a variable should be copied.\r\n\t/// </summary>\r\n\tpublic enum CopyReason\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Used when copied by operator =.\r\n\t\t/// </summary>\r\n\t\tAssigned,\r\n\r\n\t\t/// <summary>\r\n\t\t/// If <see cref=\"PhpDeepCopyAttribute\"/> has been used on argument compiler generates deep-copy call\r\n\t\t/// with this copy reason.\r\n\t\t/// </summary>\r\n\t\tPassedByCopy,\r\n\r\n\t\t/// <summary>\r\n\t\t/// If <see cref=\"PhpDeepCopyAttribute\"/> has been used on return value compiler generates deep-copy call\r\n\t\t/// with this copy reason.\r\n\t\t/// </summary>\r\n\t\tReturnedByCopy,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The reason is unknown.\r\n\t\t/// </summary>\r\n\t\tUnknown\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Interfaces: IPhpVariable, IPhpCloneable, IPhpPrintable, IPhpObjectGraphNode, IPhpEnumerator, IPhpEnumerable\r\n\r\n\t/// <summary>\r\n\t/// The set of interfaces which each type used in PHP language should implement.\r\n\t/// </summary>\r\n\tpublic interface IPhpVariable : IPhpConvertible, IPhpPrintable, IPhpCloneable, IPhpComparable\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Defines emptiness on implementor.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the variable is empty.</returns>\r\n\t\tbool IsEmpty();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines whether implementor is a scalar.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the variable is a scalar.</returns>\r\n\t\tbool IsScalar();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Defines a PHP name of implementor.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The string identification of the type.</returns>\r\n\t\tstring GetTypeName();\r\n\t}\r\n\r\n    /// <summary>\r\n\t/// Supports cloning, which creates a deep copy of an existing instance.\r\n\t/// </summary>\r\n\tpublic interface IPhpCloneable\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The deep copy of this instance.</returns>\r\n\t\tobject DeepCopy();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a copy of this instance.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"reason\">The reason why the copy is being made.</param>\r\n\t\t/// <returns>\r\n\t\t/// The copy which should contain data independent of the image ones. This often means that a deep copy\r\n\t\t/// is made, although an inplace deep copy optimization can also be used as well as other methods of copying.\r\n\t\t/// Whatever copy method takes place any changes to the image data should not cause\r\n\t\t/// a change in the result which may be identified by its user.\r\n\t\t/// </returns>\r\n\t\tobject Copy(CopyReason reason);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides methods for printing structured variable content in a several different formats.\r\n\t/// </summary>\r\n\tpublic interface IPhpPrintable\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Prints values only.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\t/// <remarks>Implementations should write an eoln after the variable's data.</remarks>\r\n\t\tvoid Print(TextWriter output);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints types and values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\t/// <remarks>Implementations should write an eoln after the variable's data.</remarks>\r\n\t\tvoid Dump(TextWriter output);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints object's definition in PHP language.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output stream.</param>\r\n\t\t/// <remarks>Implementations should write an eoln after the variable's data only on the top level.</remarks>\r\n\t\tvoid Export(TextWriter output);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Called back by <see cref=\"IPhpObjectGraphNode.Walk\"/> when walking an object graph.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The parameter represents the node that is being visited. Return value represents the new\r\n\t/// node value that the original node will be replaced with in its container.\r\n\t/// </remarks>\r\n\tpublic delegate object PhpWalkCallback(IPhpObjectGraphNode node, ScriptContext context);\r\n\r\n\t/// <summary>\r\n\t/// Implemented by variable types that represent notable nodes in object graphs.\r\n\t/// </summary>\r\n\tpublic interface IPhpObjectGraphNode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Walks the object graph rooted in this node. All subnodes supporting the <see cref=\"IPhpObjectGraphNode\"/>\r\n\t\t/// interface will be visited and <pararef name=\"callback\"/> called.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">Designates the method that should be invoked for each graph node.</param>\r\n\t\t/// <param name=\"context\">Current <see cref=\"ScriptContext\"/> (optimization).</param>\r\n\t\t/// <remarks><paramref name=\"callback\"/> will not be called for this very object - that is its container's\r\n\t\t/// responsibility.</remarks>\r\n\t\tvoid Walk(PhpWalkCallback callback, ScriptContext context);\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents enumerator which \r\n\t/// </summary>\r\n\tpublic interface IPhpEnumerator : IDictionaryEnumerator\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Moves the enumerator to the last entry of the dictionary.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the enumerator has been sucessfully moved to the last entry.</returns>\r\n\t\tbool MoveLast();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves the enumerator to the first entry of the dictionary.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the enumerator has been sucessfully moved to the first entry.</returns>\r\n\t\tbool MoveFirst();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Moves the enumerator to the previous entry of the dictionary.\r\n\t\t/// </summary>\r\n\t\t/// <returns>Whether the enumerator has been sucessfully moved to the previous entry.</returns>\r\n\t\tbool MovePrevious();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets whether the enumeration has ended and the enumerator points behind the last element.\r\n\t\t/// </summary>\r\n\t\tbool AtEnd { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides methods which allows implementor to be used in PHP foreach statement as a source of enumeration.\r\n\t/// </summary>\r\n\tpublic interface IPhpEnumerable\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Implementor's intrinsic enumerator which will be advanced during enumeration.\r\n\t\t/// </summary>\r\n\t\tIPhpEnumerator IntrinsicEnumerator { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an enumerator used in foreach statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"keyed\">Whether the foreach statement uses keys.</param>\r\n\t\t/// <param name=\"aliasedValues\">Whether the values returned by enumerator are assigned by reference.</param>\r\n\t\t/// <param name=\"caller\">Type <see cref=\"Reflection.DTypeDesc\"/> of the class in whose context the caller operates.</param>\r\n\t\t/// <returns>The dictionary enumerator.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// <see cref=\"IDictionaryEnumerator.Value\"/> should return <see cref=\"PhpReference\"/> \r\n\t\t/// iff <paramref name=\"aliasedValues\"/>.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tIDictionaryEnumerator GetForeachEnumerator(bool keyed, bool aliasedValues, Reflection.DTypeDesc caller);\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// Methods manipulating PHP variables.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// <para>Implements some IPhp* interfaces for objects of arbitrary PHP.NET type particularly for CLR types.</para>\r\n\t/// </remarks>\r\n\t[DebuggerNonUserCode]\r\n\tpublic static class PhpVariable\r\n\t{\r\n\t\tpublic static readonly object LiteralNull = null;\r\n\t\tpublic static readonly object LiteralTrue = true;\r\n\t\tpublic static readonly object LiteralFalse = false;\r\n        public static readonly object LiteralIntSize = sizeof(int);\r\n\r\n\t\tinternal static readonly Type/*!*/ RTVariablesTableType = typeof(Dictionary<string, object>);\r\n\t\tinternal static readonly ConstructorInfo/*!*/ RTVariablesTableCtor = RTVariablesTableType.GetConstructor(Types.Int);\r\n\t\tinternal static readonly MethodInfo/*!*/ RTVariablesTableAdder = RTVariablesTableType.GetProperty(\"Item\").GetSetMethod();//RTVariablesTableType.GetMethod(\"Add\");\r\n\r\n        #region IPhpPrintable\r\n\r\n        /// <summary>\r\n        /// Auxiliary variable holding the current level of indentation while printing a variable.\r\n        /// </summary>\r\n#if !SILVERLIGHT            //TODO: Silverlight doesn't have ThreadStatic, it should be done in different way... now output is just a normal static field\r\n        [ThreadStatic]\r\n#endif\r\n\t\tinternal static int PrintIndentationLevel = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes indentation spaces to <see cref=\"TextWriter\"/> according to <see cref=\"PrintIndentationLevel\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The <see cref=\"TextWriter\"/> where to write spaces.</param>\r\n\t\tinternal static void PrintIndentation(TextWriter output)\r\n\t\t{\r\n            var level = PrintIndentationLevel;\r\n            if (level > 0)\r\n            {\r\n                output.Write(' ');\r\n                output.Write(' ');\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a content of the given variable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\t/// <param name=\"obj\">The variable to be printed.</param>\r\n\t\t/// <returns>Always returns true.</returns>\r\n\t\tpublic static void Print(TextWriter output, object obj)\r\n\t\t{\r\n\t\t\tIPhpPrintable printable = obj as IPhpPrintable;\r\n\r\n\t\t\tif (printable != null)\r\n\t\t\t\tprintable.Print(output);\r\n\t\t\telse\r\n\t\t\t\toutput.Write(Convert.ObjectToString(obj));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints the variable to the console.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable to print.</param>\r\n\t\tpublic static void Print(object obj)\r\n\t\t{\r\n\t\t\tPrint(Console.Out, obj);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a content of the given variable and its type. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\t/// <param name=\"obj\">The variable to be printed.</param>\r\n\t\tpublic static void Dump(TextWriter output, object obj)\r\n\t\t{\r\n\t\t\tstring s;\r\n\t\t\tIPhpPrintable printable;\r\n\r\n\t\t\tif ((printable = obj as IPhpPrintable) != null)\r\n\t\t\t{\r\n\t\t\t\tprintable.Dump(output);\r\n\t\t\t}\r\n\t\t\telse if ((s = obj as string) != null)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(TypeNameString + \"({0}) \\\"{1}\\\"\", s.Length, s);\r\n\t\t\t}\r\n\t\t\telse if (obj is double)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(TypeNameFloat + \"({0})\", Convert.DoubleToString((double)obj));\r\n\t\t\t}\r\n\t\t\telse if (obj is bool)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(TypeNameBool + \"({0})\", (bool)obj ? True : False);\r\n\t\t\t}\r\n\t\t\telse if (obj is int)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(TypeNameInt + \"({0})\", (int)obj);\r\n\t\t\t}\r\n\t\t\telse if (obj is long)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(TypeNameLongInteger + \"({0})\", (long)obj);\r\n\t\t\t}\r\n\t\t\telse if (obj == null)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(PhpVariable.TypeNameNull);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"{0}({1})\", PhpVariable.GetTypeName(obj), obj.ToString());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dumps the variable to the console.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable to dump.</param>\r\n\t\tpublic static void Dump(object obj)\r\n\t\t{\r\n\t\t\tDump(Console.Out, obj);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Prints a content of the given variable in PHP language. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"output\">The output text stream.</param>\r\n\t\t/// <param name=\"obj\">The variable to be printed.</param>\r\n\t\tpublic static void Export(TextWriter output, object obj)\r\n\t\t{\r\n\t\t\tIPhpPrintable printable;\r\n\t\t\tstring s;\r\n\r\n\t\t\tif ((printable = obj as IPhpPrintable) != null)\r\n\t\t\t{\r\n\t\t\t\tprintable.Export(output);\r\n\t\t\t}\r\n\t\t\telse if ((s = obj as string) != null)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(\"'{0}'\", StringUtils.AddCSlashes(s, true, false));\r\n\t\t\t}\r\n\t\t\telse if (obj is int)\r\n\t\t\t{\r\n\t\t\t\toutput.Write((int)obj);\r\n\t\t\t}\r\n\t\t\telse if (obj is long)\r\n\t\t\t{\r\n\t\t\t\toutput.Write((long)obj);\r\n\t\t\t}\r\n\t\t\telse if (obj is double)\r\n\t\t\t{\r\n\t\t\t\toutput.Write(Convert.DoubleToString((double)obj));\r\n\t\t\t}\r\n\t\t\telse if (obj is bool)\r\n\t\t\t{\r\n\t\t\t\toutput.Write((bool)obj ? True : False);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toutput.Write(TypeNameNull);\r\n\t\t\t}\r\n\r\n\t\t\t// prints an eoln if we are on the top level:\r\n\t\t\t//if (PrintIndentationLevel == 0)\r\n\t\t\t//\toutput.WriteLine();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Exports the variable to the console.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable to export.</param>\r\n\t\tpublic static void Export(object obj)\r\n\t\t{\r\n\t\t\tExport(Console.Out, obj);\r\n\t\t}\r\n\r\n#endregion\r\n\r\n#region IPhpCloneable Interface\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of specified PHP variable.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable to copy.</param>\r\n\t\t/// <returns>\r\n\t\t/// A deep copy of <paramref name=\"obj\"/> if it is of arbitrary PHP.NET type or \r\n\t\t/// implements <see cref=\"IPhpCloneable\"/> interface. Otherwise, only a shallow copy can be made.\r\n\t\t/// </returns>\r\n\t\tpublic static object DeepCopy(object obj)\r\n\t\t{\r\n\t\t\t// cloneable types:\r\n            IPhpCloneable php_cloneable;\r\n            if ((php_cloneable = obj as IPhpCloneable) != null)\r\n                return php_cloneable.DeepCopy();\r\n\r\n\t\t\t// string, bool, int, double, null:\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Depending on the copy reason and configuration, makes \r\n\t\t/// inplace copy, shallow copy, or a deep copy of a specified PHP variable.\r\n\t\t/// </summary>\r\n\t\t[Emitted]\r\n\t\tpublic static object Copy(object obj, CopyReason reason)\r\n\t\t{\r\n\t\t\t// cloneable types:\r\n\t\t\tIPhpCloneable php_cloneable;\r\n\t\t\tif ((php_cloneable = obj as IPhpCloneable) != null)\r\n\t\t\t\treturn php_cloneable.Copy(reason);\r\n\r\n\t\t\t// string, bool, int, double, null:\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\tpublic static IEnumerable<KeyValuePair<K, object>>/*!*/ EnumerateDeepCopies<K>(\r\n\t\t\tIEnumerable<KeyValuePair<K, object>>/*!*/ enumerable)\r\n\t\t{\r\n\t\t\tif (enumerable == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"enumerable\");\r\n\r\n\t\t\tforeach (KeyValuePair<K, object> entry in enumerable)\r\n\t\t\t\tyield return new KeyValuePair<K, object>(entry.Key, DeepCopy(entry.Value));\r\n\t\t}\r\n\r\n\t\tpublic static IEnumerable<object>/*!*/ EnumerateDeepCopies<K>(IEnumerable<object>/*!*/ enumerable)\r\n\t\t{\r\n\t\t\tif (enumerable == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"enumerable\");\r\n\r\n\t\t\tforeach (object item in enumerable)\r\n\t\t\t\tyield return DeepCopy(item);\r\n\t\t}\r\n\r\n#endregion\r\n\r\n#region IPhpVariable Interface: GetTypeName, IsEmpty, IsScalar\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements empty language construct.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable.</param>\r\n\t\t/// <returns>Whether the variable is empty according to PHP rules.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// A variable is considered to be empty if it is undefined, <b>null</b>, 0, 0.0, <b>false</b>, \"0\", \r\n\t\t/// empty string or empty string of bytes, object without properties, \r\n\t\t/// </remarks>\r\n\t\t/// <exception cref=\"InvalidCastException\">If <paramref name=\"obj\"/> is not of PHP.NET type.</exception>\r\n\t\t[Emitted]\r\n\t\tpublic static bool IsEmpty(object obj)\r\n\t\t{\r\n\t\t\tif (obj == null) return true;\r\n            if (obj.GetType() == typeof(int)) return (int)obj == 0;\r\n            if (obj.GetType() == typeof(string)) return !Convert.StringToBoolean((string)obj);\r\n            if (obj.GetType() == typeof(bool)) return !(bool)obj;\r\n            if (obj.GetType() == typeof(double)) return (double)obj == 0.0;\r\n            if (obj.GetType() == typeof(long)) return (long)obj == 0;\r\n\r\n\t\t\tDebug.Assert(obj is IPhpVariable, \"Object should be wrapped when calling IsEmpty\");\r\n\r\n\t\t\treturn ((IPhpVariable)obj).IsEmpty();\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified object is of scalar type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The variable.</param>\r\n\t\t/// <returns>Whether <paramref name=\"obj\"/> is either <see cref=\"int\"/>, <see cref=\"double\"/>,\r\n        /// <see cref=\"bool\"/>, <see cref=\"long\"/>, <see cref=\"string\"/> or <see cref=\"IPhpVariable.IsScalar\"/>.</returns>\r\n\t\tpublic static bool IsScalar(object obj)\r\n\t\t{\r\n            if (obj == null)\r\n                return false;\r\n\r\n            if (obj.GetType() == typeof(int) ||\r\n                obj.GetType() == typeof(double) ||\r\n                obj.GetType() == typeof(bool) ||\r\n                obj.GetType() == typeof(long) ||\r\n                obj.GetType() == typeof(string) ||\r\n                obj.GetType() == typeof(PhpString) ||   // handled also in IPhpVariable, but this is faster\r\n                obj.GetType() == typeof(PhpBytes)       // handled also in IPhpVariable, but this is faster\r\n                )\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tIPhpVariable php_var = obj as IPhpVariable;\r\n\t\t\tif (php_var != null) return php_var.IsScalar();\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n#endregion\r\n\r\n#region Types\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"int\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameInt = \"int\";\r\n        public const string TypeNameInteger = \"integer\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"long\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameLongInteger = \"int64\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"double\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameDouble = \"double\";\r\n        public const string TypeNameFloat = \"float\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"bool\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameBool = \"bool\";\r\n        public const string TypeNameBoolean = \"boolean\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"string\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameString = \"string\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"System.Void\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameVoid = \"void\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <see cref=\"System.Object\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameObject = \"mixed\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic const string TypeNameNull = \"NULL\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <B>true</B> constant.\r\n\t\t/// </summary>\r\n\t\tpublic const string True = \"true\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// PHP name for <B>true</B> constant.\r\n\t\t/// </summary>\r\n\t\tpublic const string False = \"false\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the PHP name of a type of a specified object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object which type name to get.</param>\r\n\t\t/// <returns>The PHP name of the type of <paramref name=\"obj\"/>.</returns>\r\n\t\t/// <remarks>Returns CLR type name for variables of unknown type.</remarks>\r\n\t\tpublic static string GetTypeName(object obj)\r\n\t\t{\r\n\t\t\tIPhpVariable php_var;\r\n\r\n\t\t\tif (obj is int) return TypeNameInteger;\r\n\t\t\telse if (obj is double) return TypeNameDouble;\r\n\t\t\telse if (obj is bool) return TypeNameBoolean;\r\n\t\t\telse if (obj is string) return TypeNameString;\r\n\t\t\telse if (obj is long) return TypeNameLongInteger;\r\n\t\t\telse if ((php_var = obj as IPhpVariable) != null) return php_var.GetTypeName();\r\n\t\t\telse if (obj == null) return TypeNameNull;\r\n\t\t\telse return obj.GetType().Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the PHP name of a specified PHP non-primitive type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The PHP non-primitive type.</param>\r\n\t\t/// <returns>The PHP name of the <paramref name=\"type\"/>.</returns>\r\n\t\t/// <remarks>Returns CLR type name for primitive types.</remarks>\r\n\t\t/// <exception cref=\"ArgumentNullException\"><paramref name=\"type\"/> is a <B>null</B>.</exception>\r\n\t\tpublic static string/*!*/ GetTypeName(Type/*!*/ type)\r\n\t\t{\r\n\t\t\tif (type == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"type\");\r\n\r\n\t\t\tstring result = PrimitiveTypeDesc.GetPrimitiveName(type);\r\n\t\t\tif (result != null) return result;\r\n\r\n\t\t\tif (type == typeof(void))\r\n\t\t\t\treturn TypeNameVoid;\r\n\r\n\t\t\tif (type == typeof(PhpReference))\r\n\t\t\t\treturn PhpReference.PhpTypeName;\r\n\r\n\t\t\treturn type.Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a type of a specified variable is PHP/CLR primitive type.\r\n\t\t/// Doesn't check for <c>object</c> primitive type as is is only a compiler construction.\r\n\t\t/// </summary>\r\n\t\tpublic static bool HasPrimitiveType(object variable)\r\n\t\t{\r\n\t\t\treturn HasLiteralPrimitiveType(variable) || variable is PhpArray || variable is PhpResource;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a type of a specified variable is PHP/CLR primitive literal type.\r\n\t\t/// </summary>\r\n\t\tpublic static bool HasLiteralPrimitiveType(object variable)\r\n\t\t{\r\n            return\r\n                variable == null ||\r\n                variable.GetType() == typeof(bool) ||\r\n                variable.GetType() == typeof(int) ||\r\n                variable.GetType() == typeof(double) ||\r\n                variable.GetType() == typeof(long) ||\r\n                IsString(variable);\r\n\t\t}\r\n\r\n\t\tpublic static bool IsPrimitiveType(Type/*!*/ type)\r\n\t\t{\r\n\t\t\treturn IsLiteralPrimitiveType(type) || type == typeof(PhpArray) || type.IsSubclassOf(typeof(PhpResource));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether the type is among Phalanger primitive ones.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The type to be checked.</param>\r\n\t\t/// <exception cref=\"NullReferenceException\"><paramref name=\"type\"/> is a <B>null</B> reference.</exception>\r\n\t\tpublic static bool IsLiteralPrimitiveType(Type/*!*/ type)\r\n\t\t{\r\n\t\t\treturn type == typeof(bool) || type == typeof(int) || type == typeof(double) || type == typeof(long)\r\n\t\t\t\t|| IsStringType(type);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the PHP name of a specified PHP non-primitive type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"type\">The PHP non-primitive type.</param>\r\n\t\t/// <returns>The PHP name of the <paramref name=\"type\"/> or the type which can be assigned from its.</returns>\r\n\t\t/// <remarks>Returns CLR type name for primitive types.</remarks>\r\n\t\t/// <exception cref=\"NullReferenceException\"><paramref name=\"type\"/> is a <B>null</B> exception.</exception>\r\n\t\tpublic static string GetAssignableTypeName(Type type)\r\n\t\t{\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpArray))) return PhpArray.PhpTypeName;\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpObject))) return PhpObject.PhpTypeName;\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpResource))) return PhpResource.PhpTypeName;\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpReference))) return PhpReference.PhpTypeName;\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpBytes))) return PhpBytes.PhpTypeName;\r\n\t\t\tif (type.IsAssignableFrom(typeof(PhpString))) return PhpString.PhpTypeName;\r\n\t\t\treturn type.Name;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"PhpTypeCode\"/> of specified object of arbitrary PHP.NET type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"obj\">The object of one of the PHP.NET Framework type.</param>\r\n\t\t/// <returns>The <see cref=\"PhpTypeCode\"/> of the <paramref name=\"obj\"/></returns>\r\n\t\tpublic static PhpTypeCode GetTypeCode(object obj)\r\n\t\t{\r\n\t\t\tIPhpConvertible conv;\r\n\r\n            if (obj == null) return PhpTypeCode.Object;\r\n            else if (obj.GetType() == typeof(int)) return PhpTypeCode.Integer;\r\n            else if (obj.GetType() == typeof(bool)) return PhpTypeCode.Boolean;\r\n            else if (obj.GetType() == typeof(double)) return PhpTypeCode.Double;\r\n            else if (obj.GetType() == typeof(string)) return PhpTypeCode.String;\r\n            else if (obj.GetType() == typeof(long)) return PhpTypeCode.LongInteger;\r\n\t\t\telse if ((conv = obj as IPhpConvertible) != null) return conv.GetTypeCode();\r\n\t\t\telse return PhpTypeCode.Invalid;\r\n\t\t}\r\n\r\n#endregion\r\n\r\n#region AsString, IsString, AsBytes, Dereference, MakeReference, AsArray, Unwrap\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts or converts a specified variable representing a string in PHP into a string. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The variable.</param>\r\n\t\t/// <returns>\r\n\t\t/// The string representation of <paramref name=\"variable\"/> or \r\n\t\t/// a <B>null</B> reference if the variable doesn't represent PHP string.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// <para>\r\n\t\t/// The method should be used by the Class Library functions instead of \r\n\t\t/// <c>variable <B>as</B> <see cref=\"string\"/></c>.\r\n\t\t/// </para>\r\n\t\t/// <para>\r\n\t\t/// Converts only types which represents a string in PHP. \r\n\t\t/// These are <see cref=\"string\"/>, <see cref=\"PhpString\"/>, and <see cref=\"PhpBytes\"/>.\r\n\t\t/// Types like <see cref=\"int\"/>, <see cref=\"bool\"/> are not converted.\r\n\t\t/// </para>\r\n\t\t/// </remarks>\r\n        [Emitted]\r\n\t\tpublic static string AsString(object variable)\r\n\t\t{\r\n            if (object.ReferenceEquals(variable, null))\r\n                return null;\r\n\r\n\t\t\tif (variable.GetType() == typeof(string))\r\n\t\t\t\treturn (string)variable;\r\n\r\n            if (variable.GetType() == typeof(PhpString))\r\n                return ((PhpString)variable).ToString();\r\n\r\n            if (variable.GetType() == typeof(PhpBytes))\r\n                return ((PhpBytes)variable).ToString();\r\n\t\t\t\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a variable represents a string in PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The variable.</param>\r\n\t\t/// <returns>Whether a variable represents PHP string.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// The method should be used by the Class Library functions instead of \r\n\t\t/// <c>variable <B>is</B> <see cref=\"string\"/></c>.\r\n\t\t/// </remarks>\r\n\t\t[Emitted]\r\n\t\tpublic static bool IsString(object variable)\r\n\t\t{\r\n            if (variable == null)\r\n                return false;\r\n\r\n            return\r\n                variable.GetType() == typeof(string) ||\r\n                variable.GetType() == typeof(PhpBytes) ||\r\n                variable.GetType() == typeof(PhpString);\r\n\t\t}\r\n\r\n\t\tpublic static bool IsStringType(Type/*!*/ type)\r\n\t\t{\r\n\t\t\treturn type == typeof(string) || type == typeof(PhpBytes) || type == typeof(PhpString);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Casts or converts a specified variable into binary string. \r\n\t\t/// The method should be used by the Class Library functions instead of \r\n\t\t/// <c>variable <B>as</B> <see cref=\"PhpBytes\"/></c>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The variable.</param>\r\n\t\t/// <returns>The binary representation of <paramref name=\"variable\"/> or a <B>null</B> reference.</returns>\r\n\t\tpublic static PhpBytes AsBytes(object variable)\r\n\t\t{\r\n            if (variable == null)\r\n                return null;\r\n\r\n\t\t\tif (variable.GetType() == typeof(PhpBytes))\r\n                return (PhpBytes)variable;\r\n\r\n            if (variable.GetType() == typeof(string))\r\n                return new PhpBytes((string)variable);\r\n\r\n            if (variable.GetType() == typeof(PhpString))\r\n                return ((PhpString)variable).ToPhpBytes();\r\n            \r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dereferences a reference (if applicable).\r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tpublic static object Dereference(object variable)\r\n\t\t{\r\n            if (variable != null)\r\n            {\r\n                if (variable.GetType() == typeof(PhpReference))\r\n                    return ((PhpReference)variable).Value;\r\n                else if (variable.GetType() == typeof(PhpSmartReference))\r\n                    return ((PhpSmartReference)variable).Value;\r\n            }\r\n\r\n            return variable;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dereferences a reference and returns the <see cref=\"PhpReference\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The variable to dereference, receives the dereferenced value.</param>\r\n\t\t/// <returns>The <paramref name=\"variable\"/> as <see cref=\"PhpReference\"/>.</returns>\r\n\t\tpublic static PhpReference Dereference(ref object variable)\r\n\t\t{\r\n            if (variable != null)\r\n            {\r\n                if (variable.GetType() == typeof(PhpReference))\r\n                {\r\n                    var reference = (PhpReference)variable;\r\n                    variable = reference.Value;\r\n                    return reference;\r\n                }\r\n                else if (variable.GetType() == typeof(PhpSmartReference))\r\n                {\r\n                    var reference = (PhpSmartReference)variable;\r\n                    variable = reference.Value;\r\n                    return reference;\r\n                }\r\n            }\r\n\r\n            return null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Boxes variable into a reference if it is not yet a reference.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"variable\">The instance to box.</param>\r\n\t\t/// <returns>The reference.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Note that there has to be no other CLR reference pointing to the <paramref name=\"variable\"/> \r\n\t\t/// if it is reachable from PHP. In a case there is such a reference a deep copy has to take place.\r\n\t\t/// </remarks>\r\n        public static PhpReference MakeReference(object variable)\r\n        {\r\n            if (variable != null)\r\n            {\r\n                if (variable.GetType() == typeof(PhpReference))\r\n                    return (PhpReference)variable;\r\n                else if (variable.GetType() == typeof(PhpSmartReference))\r\n                    return (PhpSmartReference)variable;\r\n            }\r\n            \r\n            return new PhpReference(variable);\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Unwraps a <see cref=\"Reflection.DObject\"/>, <see cref=\"PhpBytes\"/>, and <see cref=\"PhpString\"/>\r\n\t\t/// returning their real object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"var\">The object of a PHP type.</param>\r\n\t\t/// <returns>The real <paramref name=\"var\"/>'s value (free of PHP-specific types).</returns>\r\n\t\tpublic static object Unwrap(object var)\r\n\t\t{\r\n            if (object.ReferenceEquals(var, null))\r\n                return null;\r\n\r\n\t\t\tReflection.DObject dobj = var as Reflection.DObject;\r\n\t\t\tif (dobj != null) return dobj.RealObject;\r\n\r\n            if (var.GetType() == typeof(PhpBytes))\r\n                return ((PhpBytes)var).Data;\r\n\r\n\t\t\tif (var.GetType() == typeof(PhpString))\r\n                return ((PhpString)var).ToString();\r\n\r\n\t\t\treturn var;\r\n\t\t}\r\n\r\n#endregion\r\n\r\n#region IsValidName\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a string is \"valid\" PHP variable identifier.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The variable name.</param>\r\n\t\t/// <returns>\r\n\t\t/// Whether <paramref name=\"name\"/> is \"valid\" name of variable, i.e. [_[:alpha:]][_0-9[:alpha:]]*.\r\n\t\t/// This doesn't say anything about whether a variable of such name can be used in PHP, e.g. <c>${0}</c> is ok.\r\n\t\t/// </returns>\r\n\t\tpublic static bool IsValidName(string name)\r\n\t\t{\r\n\t\t\tif (string.IsNullOrEmpty(name)) return false;\r\n\r\n\t\t\t// first char:\r\n\t\t\tif (!Char.IsLetter(name[0]) && name[0] != '_') return false;\r\n\r\n\t\t\t// next chars:\r\n\t\t\tfor (int i = 1; i < name.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (!Char.IsLetterOrDigit(name[i]) && name[i] != '_') return false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n#endregion\r\n\t}\r\n\r\n#region PhpArgument\r\n\r\n\t/// <summary>\r\n\t/// Methods used for checking arguments of Class Library functions.\r\n\t/// </summary>\r\n\tpublic sealed class PhpArgument\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a target of callback argument can be invoked.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"callback\">The callback to check.</param>\r\n        /// <param name=\"caller\">The class context used to bind the callback function.</param>\r\n\t\t/// <param name=\"argIndex\">The index of argument starting from 1 or 0 if not applicable.</param>\r\n\t\t/// <param name=\"argName\">A name of the argument or <B>null</B> reference if not applicable.</param>\r\n\t\t/// <param name=\"emptyAllowed\">Whether an empty callback is allowed.</param>\r\n\t\t/// <returns>Whether the callback can be bound to its target or it is empty and that is allowed.</returns>\r\n\t\t/// <remarks>The callback is bound if it can be.</remarks>\r\n\t\tpublic static bool CheckCallback(PhpCallback callback, DTypeDesc caller, string argName, int argIndex, bool emptyAllowed)\r\n\t\t{\r\n\t\t\t// error has already been reported by Convert.ObjectToCallback:\r\n\t\t\tif (callback == PhpCallback.Invalid)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t// callback is empty:\r\n\t\t\tif (callback == null)\r\n\t\t\t\treturn emptyAllowed;\r\n\r\n\t\t\t// callback is bindable:\r\n            if (callback.Bind(true, caller, null))\r\n                return true;\r\n\r\n\t\t\tif (argName != null)\r\n\t\t\t\targName = String.Concat('\\'', argName, '\\'');\r\n\t\t\telse\r\n\t\t\t\targName = \"#\" + argIndex;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, CoreResources.GetString(\"noncallable_callback\",\r\n\t\t\t\t((IPhpConvertible)callback).ToString(), argName));\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<!-- reference: http://stackoverflow.com/questions/18737022/xdt-transform-insertbefore-locator-condition-is-ignored/19041487 -->\n\t<configSections xdt:Transform=\"InsertBefore(/configuration/*[1])\" />\n\t<configSections xdt:Locator=\"XPath(/configuration/configSections[last()])\">\n\t\t<section name=\"phpNet\" type=\"PHP.Core.ConfigurationSectionHandler, PhpNetCore\" xdt:Transform=\"InsertIfMissing\" />\n\t</configSections>\n\t<configSections xdt:Transform=\"RemoveAll\" xdt:Locator=\"Condition(count(*)=0)\" />\n\n\t<system.webServer xdt:Transform=\"InsertIfMissing\" />\n\t<system.webServer>\n\t\t<handlers xdt:Transform=\"InsertIfMissing\" />\n\t\t<handlers>\n\t\t\t<add\n\t\t\t\tname=\"PhalangerHandler\"\n\t\t\t\tpath=\"*.php\" verb=\"*\"\n\t\t\t\ttype=\"PHP.Core.RequestHandler, PhpNetCore\"\n\t\t\t\tresourceType=\"Unspecified\"\n\t\t\t\tpreCondition=\"integratedMode\"\n\t\t\t\txdt:Transform=\"InsertIfMissing\"\n        xdt:Locator=\"Match(name)\"/>\n\t\t</handlers>\n\t\t<defaultDocument xdt:Transform=\"InsertIfMissing\" />\n\t\t<defaultDocument>\n\t\t\t<files xdt:Transform=\"InsertIfMissing\" />\n\t\t\t<files>\n\t\t\t\t<add value=\"index.php\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(value)\" />\n\t\t\t</files>\n\t\t</defaultDocument>\n\t</system.webServer>\n\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<error-control xdt:Transform=\"InsertIfMissing\" />\n\t\t<error-control>\n\t\t\t<set name=\"HtmlMessages\" value=\"false\" phpName=\"html_errors\" xdt:Transform=\"InsertIfMissing\" />\n\t\t</error-control>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Core/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <configSections>\n\t\t<section name=\"phpNet\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(name)\" />\n\t</configSections>\n\n\t<system.webServer>\n\t\t<handlers>\n\t\t\t<add name=\"PhalangerHandler\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(name)\" />\n\t\t</handlers>\n\t\t<defaultDocument>\n\t\t\t<files>\n\t\t\t\t<add value=\"index.php\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(value)\" />\n\t\t\t</files>\n\t\t</defaultDocument>\n\t</system.webServer>\n\n\t<phpNet xdt:Transform=\"Remove\" />\n</configuration>\n"
  },
  {
    "path": "Source/Core.CodeDom/CodeDomUnits.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Emit;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\nusing System.Diagnostics.SymbolStore;\r\nusing System.IO;\r\nusing PHP.Core.CodeDom;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core.AST;\r\n\r\nnamespace PHP.Core.Reflection {\r\n    /// <summary>\r\n    /// Support class for CodeDOM implementation. \r\n    /// Provides methods for parsing the PHP code into AST.\r\n    /// </summary>\r\n    /// <remarks>Used to parse isolated text containin PHP code. So, neither module nor assembly is known.</remarks>\r\n    public class CodeDomCompilationUnit:CompilationUnitBase, IReductionsSink {\r\n        #region Construction\r\n\r\n        private readonly bool isPure;\r\n\r\n        /// <summary>\r\n        /// Creates new compilation unit for parsing PHP code\r\n        /// </summary>\r\n        /// <param name=\"isPure\">Is the unit parsing PURE code?</param>\r\n        public CodeDomCompilationUnit(bool isPure) {\r\n            this.isPure = isPure;\r\n            this.module = new CodeDomModule(this);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Base Class Implementations\r\n\r\n        public override bool IsTransient { get { return false; } }\r\n        public override bool IsPure { get { return isPure; } }\r\n\r\n        public override DType GetVisibleType(QualifiedName qualifiedName, ref string fullName, Scope currentScope, bool mustResolve) {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override DRoutine GetVisibleFunction(QualifiedName qualifiedName, ref string fullName, Scope currentScope) {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override DConstant GetVisibleConstant(QualifiedName qualifiedName, ref string fullName, Scope currentScope) {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override IEnumerable<PhpType> GetDeclaredTypes() {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override IEnumerable<PhpFunction> GetDeclaredFunctions() {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override IEnumerable<GlobalConstant> GetDeclaredConstants() {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IReductionsSink Members\r\n\r\n        public void InclusionReduced(Parser parser, PHP.Core.AST.IncludingEx decl) {\r\n        }\r\n\r\n        public void FunctionDeclarationReduced(Parser parser, PHP.Core.AST.FunctionDecl decl) {\r\n        }\r\n\r\n        public void TypeDeclarationReduced(Parser parser, PHP.Core.AST.TypeDecl decl) {\r\n        }\r\n\r\n        public void GlobalConstantDeclarationReduced(Parser parser, PHP.Core.AST.GlobalConstantDecl decl) {\r\n        }\r\n\r\n        public void NamespaceDeclReduced(Parser parser, NamespaceDecl decl)\r\n        {\r\n        }\r\n\r\n        public void LambdaFunctionReduced(Parser parser, LambdaFunctionExpr decl)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation\r\n\r\n        /// <summary>\r\n        /// Implements trivial error sink that throws exception with the first error\r\n        /// </summary>\r\n        class ParserErrorSink:ErrorSink {\r\n            protected override bool Add(int id, string message,\r\n                ErrorSeverity severity, int group, string fullPath, ErrorPosition pos) {\r\n                if(severity.IsFatal)\r\n                    PhpException.Throw(PhpError.CompileError, \"Parsing failed: \" + message);\r\n                return true;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Parse PHP code and return its AST.\r\n        /// </summary>\r\n        /// <param name=\"code\">The PHP code to be parsed.</param>\r\n        /// <param name=\"encoding\">Encoding of the source code.</param>\r\n        /// <param name=\"lang\">Language features that may change parser behavior.</param>\r\n        /// <param name=\"file\">PHP Source file with the file name &amp; location</param>\r\n        /// <returns>Returns the parsed AST node.</returns>\r\n        public AST.GlobalCode ParseString(string code, Encoding encoding, PhpSourceFile file, LanguageFeatures lang) {\r\n            PhpScriptSourceUnit srcUnit = new PhpScriptSourceUnit(this, code, file, encoding, 0, 0);\r\n\r\n            using(StringReader reader = new StringReader(code))\r\n            {\r\n                Parser parser = new Parser();\r\n                return parser.Parse(srcUnit, reader, new ParserErrorSink(), this, Lexer.LexicalStates.INITIAL, lang);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n//TODO: Comments\r\nnamespace PHP.Core.CodeDom{\r\n    internal class CodeDomModule:PhpModule{\r\n        public CodeDomModule(CodeDomCompilationUnit cu) : base(cu, new CodeDomAssembly(null)) { ((CodeDomAssembly)base.Assembly).Module = this; }\r\n\r\n        protected override CompilationUnitBase CreateCompilationUnit() {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        public override void Reflect(bool full, Dictionary<string, DTypeDesc> types, Dictionary<string, DRoutineDesc> functions, DualDictionary<string, DConstantDesc> constants) {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n    }\r\n    internal class CodeDomAssembly:PhpAssembly {\r\n    /// <param name=\"module\">Can be null, but then property <see cref=\"Module\"/> must be initialized later.</param>\r\n    public CodeDomAssembly(CodeDomModule module) : base(new ApplicationContext(false,false,false)) { this.module = module;}\r\n        internal CodeDomModule Module{\r\n            get{return module;}\r\n            set{\r\n                if(module != null) throw new InvalidOperationException(\"Module can be set only if it is null\");\r\n                module=value;\r\n        }}\r\n        private CodeDomModule module;\r\n        public override PhpModule GetModule(PhpSourceFile name) {\r\n            return module;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core.CodeDom/CodeProvider.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.CodeDom;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections.Generic;\r\n\r\nusing System.ComponentModel;\r\n\r\nnamespace PHP.Core.CodeDom {\r\n    public class PhpCodeProvider:CodeDomProvider {\r\n        #region Fields\r\n\r\n        private PhpCodeGenerator codeGenerator = new PhpCodeGenerator();\r\n        private PhpCodeCompiler codeCompiler = new PhpCodeCompiler();\r\n        /// <summary>Referenced assemblies</summary>\r\n        private List<string> references=new List<string>();\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Gets the default file name extension to use for PHP source code files.\r\n        /// </summary>\r\n        public override string FileExtension {\r\n            get { return \"php\"; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a language features identifier.\r\n        /// </summary>\r\n        public override LanguageOptions LanguageOptions {\r\n            get { return LanguageOptions.CaseInsensitive; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        public void AddReference(string assemblyName) {\r\n            references.Add(assemblyName);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a PHP code compiler.\r\n        /// </summary>\r\n        [Obsolete(\"Callers should not use the ICodeCompiler interface and should \" +\r\n            \"instead use the methods directly on the CodeDomProvider class.\")]\r\n        public override ICodeCompiler CreateCompiler() {\r\n            return codeCompiler;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a PHP code generator.\r\n        /// </summary>\r\n        [Obsolete(\"Callers should not use the ICodeGenerator interface and should \" +\r\n            \"instead use the methods directly on the CodeDomProvider class.\")]\r\n        public override ICodeGenerator CreateGenerator() {\r\n            return codeGenerator;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified Code Document Object Model (CodeDOM) member declaration and sends it to the\r\n        /// specified text writer, using the specified options.\r\n        /// </summary>\r\n        public override void GenerateCodeFromMember(CodeTypeMember member, TextWriter writer, CodeGeneratorOptions options) {\r\n            codeGenerator.GenerateCodeFromMember(member, writer, options);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a <see cref=\"TypeConverter\"/> for the specified data type.\r\n        /// </summary>\r\n        public override TypeConverter GetConverter(Type type) {\r\n            if(type == typeof(MemberAttributes)) {\r\n                return PhpMemberAttributeConverter.Default;\r\n            }\r\n            if(type == typeof(System.Reflection.TypeAttributes)) {\r\n                return PhpTypeAttributeConverter.Default;\r\n            }\r\n            return base.GetConverter(type);\r\n        }\r\n\r\n        /// <summary> \r\n        /// Returns a PHP code parser. \r\n        /// </summary> \r\n        [Obsolete(\"Callers should not use the ICodeCompiler interface and should instead use the methods directly on the CodeDomProvider class.\")]\r\n        public override ICodeParser CreateParser() {\r\n            PhpCodeDomParser ret = new PhpCodeDomParser(references);\r\n            ret.DelegateMode = PhpCodeDomParser.DelegateModes.AllPossible;\r\n            return ret;\r\n        }\r\n\r\n        /*\r\n        private class FakeParser : CodeParser  {\r\n            public override CodeCompileUnit Parse(TextReader codeStream) {\r\n                CodeCompileUnit tree = new CodeCompileUnit();\r\n                tree.Namespaces.Add (new CodeNamespace(\"WindowsApplication1\"));\r\n                tree.Namespaces[0].Types.Add(new CodeTypeDeclaration (\"Form1\"));\r\n                tree.Namespaces[0].Types[0].IsClass=true;\r\n                tree.Namespaces[0].Types[0].BaseTypes.Add(System.Type.GetType(\"System.Windows.Forms.Form\"));\r\n                tree.Namespaces[0].Types[0].Members.Add(new CodeMemberField(/*System.Type.GetType(\"System.ComponentModel.IContainer\")* /typeof(object),\"components\"));\r\n                CodeConstructor CTor = new CodeConstructor();\r\n                CTor.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), \"InitializeComponent\", new CodeExpression[] { }));\r\n                CTor.Attributes = MemberAttributes.Public;\r\n                tree.Namespaces[0].Types[0].Members.Add(CTor);\r\n                CodeMemberMethod InitializeComponent = new CodeMemberMethod();\r\n                tree.Namespaces[0].Types[0].Members.Add(InitializeComponent);\r\n                InitializeComponent.Name = \"InitializeComponent\";\r\n                InitializeComponent.Statements.Add(new CodeVariableDeclarationStatement(/*System.Type.GetType(\"System.Windows.Forms.Button\")* /typeof(object),\"Button1\"));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement (new CodeVariableReferenceExpression (\"Button1\"),new CodeObjectCreateExpression(System.Type.GetType(\"System.Windows.Forms.Button\"),new CodeExpression[]{})));\r\n                InitializeComponent.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), \"SuspendLayout\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"Button1\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"\"));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"Location\"), new CodeObjectCreateExpression(System.Type.GetType(\"System.Drawing.Point\"), new CodeExpression[] { new CodePrimitiveExpression((int)12), new CodePrimitiveExpression((int)12) })));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"Name\"), new CodePrimitiveExpression(\"Button1\")));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"Size\"), new CodeObjectCreateExpression(System.Type.GetType(\"System.Drawing.Size\"), new CodeExpression[] { new CodePrimitiveExpression((int)96), new CodePrimitiveExpression((int)23) })));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"TabIndex\"), new CodePrimitiveExpression((int)0)));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"Text\"), new CodePrimitiveExpression(\"I'm PHP button!\")));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeVariableReferenceExpression(\"Button1\"), \"UseVisualStyleBackColor\"), new CodePrimitiveExpression(true)));\r\n                InitializeComponent.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), \"SuspendLayout\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"Form1\"));\r\n                InitializeComponent.Statements.Add(new CodeCommentStatement(\"\"));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression (), \"AutoScaleDimensions\"), new CodeObjectCreateExpression(System.Type.GetType(\"System.Drawing.SizeF\"), new CodeExpression[] { new CodePrimitiveExpression((System.Single )6.0), new CodePrimitiveExpression((System.Single )13.0) })));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), \"AutoScaleMode\"), new CodeFieldReferenceExpression(new CodeTypeReferenceExpression  (System.Type.GetType(\"System.Windows.Forms.AutoScaleMode\")), \"Font\")));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), \"ClientSize\"), new CodeObjectCreateExpression(System.Type.GetType(\"System.Drawing.Size\"), new CodeExpression[] { new CodePrimitiveExpression((int)284), new CodePrimitiveExpression((int)264) })));\r\n                InitializeComponent.Statements.Add(new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), \"Controls\"), \"Add\", new CodeExpression[] { new CodeVariableReferenceExpression(\"Button1\") }));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), \"Name\"), new CodePrimitiveExpression(\"Form1\")));\r\n                InitializeComponent.Statements.Add(new CodeAssignStatement(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), \"Text\"), new CodePrimitiveExpression(\"PHP form\")));\r\n                InitializeComponent.Statements.Add(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), \"ResumeLayout\", new CodeExpression[] {new CodePrimitiveExpression(true) }));\r\n                return tree; \r\n            }\r\n        }*/\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.CodeDom/Core.CodeDom.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectGuid>{5BCE0C1A-03EA-4942-9198-D8FB9F1F69B1}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Core.CodeDom</RootNamespace>\r\n    <AssemblyName>PhpNet.Core.CodeDom</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SignAssembly>true</SignAssembly>\r\n    <AssemblyOriginatorKeyFile>..\\Core\\Core.snk</AssemblyOriginatorKeyFile>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"CodeDomUnits.cs\" />\r\n    <Compile Include=\"CodeProvider.CLR.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Helper.cs\" />\r\n    <Compile Include=\"Keywords.CLR.cs\" />\r\n    <Compile Include=\"PhpCodeDomParser.cs\" />\r\n    <Compile Include=\"PhpCompiler.CLR.cs\" />\r\n    <Compile Include=\"PhpGenerator.CLR.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"TypeConverters.CLR.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Core.CodeDom.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Core.CodeDom/Core.CodeDom.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Core.CodeDom/Helper.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Reflection;\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n    /// <summary>Conntains helper members for PHP-to-CodeDOM translator</summary>\r\n    /// <remarks>\r\n    /// These members may appear in CodeDOM which originates from user-typed PHP code.\r\n    /// It is because PHP-to-CodeDOM translator is not designed to be universal.\r\n    /// It is primary designed to translate CodeDOM-to-PHP-generator-generated code back to PHP and it supports only very few PHP spoecialities.  \r\n    /// These helper members usually stands for somethink that cannot be repserented in CodeDOM but in PHP can.\r\n    /// The aim of these members is NOT to substitute PHP behavior and implement it for CodeDOM.\r\n    /// The aim of these members is to translate CodeDOM-unsupported feature from PHP to CodeDOM somehow.\r\n    /// In the future it may allow CodeDOM-to-PHP translator to translate such construct to PHP to the same code that have generated it.\r\n    /// In order to avoid usage of these members by users members are hidden and obsolete.\r\n    /// </remarks>\r\n    [EditorBrowsable(EditorBrowsableState.Never)]\r\n    public static class Helper\r\n    {\r\n        /// <summary>Translates type specification used by CodeDOM to string that can be used for <see cref=\"Type.GetType(string)\"/>.</summary>\r\n        /// <param name=\"t\">A <see cref=\"System.CodeDom.CodeTypeReference\"/></param>\r\n        /// <param name=\"GenericArgs\">True for include generic args in string (otherwise only grave and number will be included)</param>\r\n        /// <returns>Type name</returns>\r\n        private static string GetTypeName(System.CodeDom.CodeTypeReference t, bool GenericArgs)\r\n        {\r\n            StringBuilder sb = new StringBuilder();\r\n            sb.Append(t.ArrayRank == 0 ? t.BaseType : GetTypeName(t.ArrayElementType, GenericArgs));\r\n            if (t.TypeArguments.Count > 0 && GenericArgs)\r\n            {\r\n                sb.Append('[');\r\n                foreach (System.CodeDom.CodeTypeReference arg in t.TypeArguments)\r\n                {\r\n                    sb.Append('[');\r\n                    sb.Append(GetTypeName(arg, true));\r\n                    sb.Append(']');\r\n                }\r\n                sb.Append(']');\r\n            }\r\n            if (t.ArrayRank == 1) sb.Append(\"[]\");\r\n            if (t.ArrayRank > 1) sb.Append('[' + new string(',', t.ArrayRank - 1) + ']');\r\n            return sb.ToString();\r\n        }\r\n\r\n        /// <summary>Tries to get <see cref=\"Type\"/> from <see cref=\"System.CodeDom.CodeTypeReference\"/></summary>\r\n        /// <param name=\"t\">A <see cref=\"System.CodeDom.CodeTypeReference\"/></param>\r\n        /// <param name=\"aliases\"></param>\r\n        /// <param name=\"imports\"></param>\r\n        /// <param name=\"references\"></param>\r\n        /// <returns><see cref=\"Type\"/> if found or null.</returns>\r\n        internal static Type GetType(System.CodeDom.CodeTypeReference t, IDictionary<string, string> aliases, string[] imports, IList<string> references)\r\n        {\r\n            string tn = GetTypeName(t, false);\r\n            Type type = null;\r\n            //try { type = Type.GetType(tn); }catch{}\r\n\r\n            string[] namespaces = new string[imports.Length + 1];\r\n            Array.Copy(imports, 0, namespaces, 1, imports.Length);\r\n            namespaces[0] = string.Empty;\r\n\r\n            if (references == null)references = new string[0];\r\n\r\n            string[] assemblies = new string[references.Count + 1];\r\n            references.CopyTo(assemblies, 0);\r\n            assemblies[references.Count] = string.Empty;\r\n            //if(type == null)\r\n\r\n            // translate aliases\r\n            if (aliases != null)\r\n                foreach (var alias in aliases)\r\n                {\r\n                    string TypeName = tn;\r\n                    if (alias.Key == TypeName) { TypeName = alias.Value; break; }\r\n                    if (TypeName.StartsWith(alias.Key + \".\")) { TypeName = alias.Value + TypeName.Substring(alias.Key.Length); break; }\r\n                }\r\n\r\n            // resolve type name\r\n            foreach (string Assembly in assemblies)\r\n            {\r\n                foreach (string Namespace in namespaces)\r\n                {\r\n                    string TypeName = tn;\r\n                    if (!string.IsNullOrEmpty(Namespace))\r\n                        TypeName = Namespace + \".\" + tn;\r\n\r\n                    try\r\n                    {\r\n                        if (!string.IsNullOrEmpty(Assembly))\r\n                        {\r\n                            if (System.IO.File.Exists(Assembly))    // assembly path\r\n                            {\r\n                                var ass = System.Reflection.Assembly.ReflectionOnlyLoadFrom(Assembly);\r\n                                if (ass != null)\r\n                                {\r\n                                    type = ass.GetType(TypeName);\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                TypeName += \",\" + Assembly; // full assembly name\r\n                                type = Type.GetType(TypeName);\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            type = Type.GetType(TypeName);  // try to load from current app domain\r\n                        }\r\n                    }\r\n                    catch { }\r\n\r\n                    if (type != null) break;\r\n                }\r\n                if (type != null) break;\r\n            }\r\n            return type;\r\n        }\r\n\r\n        /// <summary>unset PHP pseudo-function is translated as assignment of this field ot a variable (with exception of local variables for which nset is translated to assign of null because it is what PHP actually does)</summary>\r\n        /// <remarks>Note: assigning null to anything else than local variable is not the same think as unsetting it!</remarks>\r\n        [Obsolete(\"Do not use this member! This is only CodeDOM replacement for PHP unset pseudo-function\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        readonly public static object unset = null;\r\n        /// <summary>Creating instance of this class and using it's <see cref=\"IndirectStFldAccess.Access\">Access</see> property stands in CodeDOM for PHP indirect access to static field (MyClass::$$field)</summary>\r\n        /// <remarks>The <see cref=\"IndirectStFldAccess.Access\">Access</see> is currently not implemented and throws <see cref=\"NotImplementedException\"/>.</remarks>\r\n        [Obsolete(\"Do not use this class! This is only CodeDOM replacement for PHP indirect access to static field (MyClass::$$var)\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public sealed class IndirectStFldAccess\r\n        {\r\n            /// <summary>Type <see cref=\"field\"/> is field of</summary>\r\n            private Type type;\r\n            /// <summary>Name of field to access to</summary>\r\n            private string field;\r\n            /// <summary>CTor</summary>\r\n            /// <param name=\"type\">Type <paramref name=\"field\"/> is field of</param>\r\n            /// <param name=\"field\">Name of field to be accessed</param>\r\n            public IndirectStFldAccess(Type type, string field)\r\n            {\r\n                this.type = type;\r\n                this.field = field;\r\n            }\r\n            /// <summary>If implemented provides access to field given in constructor</summary>\r\n            /// <remarks>Actually neither setter nor getter is implemented and both throw <see cref=\"NotImplementedException\"/></remarks>\r\n            /// <exception cref=\"NotImplementedException\">Always</exception>\r\n            public object Access\r\n            {\r\n                get\r\n                {\r\n                    throw new NotImplementedException(\"IndirectStFldAccess.Access's getter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n                set\r\n                {\r\n                    throw new NotImplementedException(\"IndirectStFldAccess.Access's getter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n            }\r\n        }\r\n        /// <summary>Creating instance of this class and using it's <see cref=\"IndirectInstFldAccess.Access\">Access</see> property stands in CodeDOM for PHP indirect access to instance field ($instance->$field)</summary>\r\n        /// <remarks>The <see cref=\"IndirectInstFldAccess.Access\">Access</see> is currently not implemented and throws <see cref=\"NotImplementedException\"/>.</remarks>\r\n        [Obsolete(\"Do not use this class! This is only CodeDOM replacement for PHP indirect access to instance field ($obj->$var).\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public sealed class IndirectInstFldAccess\r\n        {\r\n            /// <summary>Instance <see cref=\"field\"/> is field of</summary>\r\n            private object instance;\r\n            /// <summary>Name of field to access to</summary>\r\n            private string field;\r\n            /// <summary>CTor</summary>\r\n            /// <param name=\"instance\">Instance <paramref name=\"field\"/> is field of</param>\r\n            /// <param name=\"field\">Name of field to be accessed</param>\r\n            public IndirectInstFldAccess(object instance, string field)\r\n            {\r\n                this.instance = instance;\r\n                this.field = field;\r\n            }\r\n            /// <summary>If implemented provides access to field given in constructor</summary>\r\n            /// <remarks>Actually neither setter nor getter is implemented and both throw <see cref=\"NotImplementedException\"/></remarks>\r\n            /// <exception cref=\"NotImplementedException\">Always</exception>\r\n            public object Access\r\n            {\r\n                get\r\n                {\r\n                    throw new NotImplementedException(\"IndirectInstFldAccess.Access's getter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n                set\r\n                {\r\n                    throw new NotImplementedException(\"IndirectInstFldAccess.Access's getter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n            }\r\n        }\r\n        /// <summary>Creating instance of this class and using it's <see cref=\"IndirectVarAccess.Access\">Access</see> property stands in CodeDOM for PHP indirect access variable ($$var)</summary>\r\n        /// <remarks>The <see cref=\"IndirectVarAccess.Access\">Access</see> is currently not implemented and throws <see cref=\"NotImplementedException\"/>.</remarks>\r\n        [Obsolete(\"Do not use this class! This is only CodeDOM replacement for PHP indirect access to variable ($$var).\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public sealed class IndirectVarAccess\r\n        {\r\n            /// <summary>Name of variable to access to</summary>\r\n            private string field;\r\n            /// <summary>CTor</summary>\r\n            /// <param name=\"field\">Name of variable to be accessed</param>\r\n            public IndirectVarAccess(string field)\r\n            {\r\n                this.field = field;\r\n            }\r\n            /// <summary>If implemented provides access to variable with name given in constructor</summary>\r\n            /// <remarks>Actually neither setter nor getter is implemented and both throw <see cref=\"NotImplementedException\"/></remarks>\r\n            /// <exception cref=\"NotImplementedException\">Always</exception>\r\n            public object Access\r\n            {\r\n                get\r\n                {\r\n                    throw new NotImplementedException(\"IndirectVarAccess.Access's getter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n                set\r\n                {\r\n                    throw new NotImplementedException(\"IndirectVarAccess.Access's setter is not implemented. This class is only helper for PHP-to-CodeDOM translation\");\r\n                }\r\n            }\r\n        }\r\n        /// <summary>Indirectly calls static method. Intended only to be CodeDOM replacement for PHP indirect static method call</summary>\r\n        /// <param name=\"type\">Type to invoke method on</param>\r\n        /// <param name=\"name\">Name of method</param>\r\n        /// <param name=\"params\">Parameters of method</param>\r\n        /// <returns>Retrn value of invoked method</returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM replacement for PHP indirect call of static method.\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object CallIndirectStatic(Type type, string name, params object[] @params)\r\n        {\r\n            return type.InvokeMember(name, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, @params);\r\n        }\r\n        /// <summary>Indirectly calls instance method. Intended only to be CodeDOM replacement for PHP indirect instance method call</summary>\r\n        /// <param name=\"instance\">Instance to invoke method on</param>\r\n        /// <param name=\"name\">Name of method</param>\r\n        /// <param name=\"params\">Parameters of method</param>\r\n        /// <returns>Retrn value of invoked method</returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM replacement for PHP indirect call of instance method.\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object CallIndirectInstance(object instance, string name, params object[] @params)\r\n        {\r\n            return instance.GetType().InvokeMember(name, BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, null, instance, @params);\r\n        }\r\n        /// <summary>CodeDOM replacement for PHP conditional operator ?:</summary>\r\n        /// <param name=\"Condition\">Boolean expression</param>\r\n        /// <param name=\"True\">Returned whne <paramref name=\"Condition\"/> is True</param>\r\n        /// <param name=\"False\">Returned when <paramref name=\"Condition\"/> is False</param>\r\n        /// <returns><paramref name=\"True\"/> or <paramref name=\"False\"/> depending on <paramref name=\"Condition\"/></returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM replacement for PHP conditional operator ?:\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object iif(bool Condition, Object True, Object False)\r\n        {\r\n            return Condition ? True : False;\r\n        }\r\n        /// <summary>Returns first argument</summary>\r\n        /// <param name=\"First\">Argument being returned</param>\r\n        /// <param name=\"Second\">No meaning</param>\r\n        /// <returns><paramref name=\"First\"/></returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM helper method for fimulation of PHP post-incrementation / post-decrementation.\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object ReturnFirst(object First, object Second)\r\n        {\r\n            return First;\r\n        }\r\n        /// <summary>Returns null</summary>\r\n        /// <param name=\"anything\">Anything, no meaning</param>\r\n        /// <returns>null</returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM helper for unset cast\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object ReturnNull(object anything)\r\n        {\r\n            return null;\r\n        }\r\n        /// <summary>Echos parameter and returns 1</summary>\r\n        /// <param name=\"ToPrint\">String to echo</param>\r\n        /// <param name=\"PHPContext\">COntext to echo <paramref name=\"ToPrint\"/> through</param>\r\n        /// <returns>1</returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM helper for print operator.\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static int Print(string ToPrint, ScriptContext /*!*/ PHPContext)\r\n        {\r\n            ScriptContext.Echo(ToPrint, PHPContext);\r\n            return 1;\r\n        }\r\n        /// <summary>Returns its parameter</summary>\r\n        /// <param name=\"obj\">Parameter to return</param>\r\n        /// <returns><paramref name=\"obj\"/></returns>\r\n        [Obsolete(\"Do not use this method! This is only CodeDOM placeholder for PHP @ operator\")]\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object NoError(object obj)\r\n        {\r\n            return obj;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core.CodeDom/Keywords.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Collections.Generic;\r\n\r\n#pragma warning disable 414\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n\t/// <summary>\r\n\t/// Keywords (forbidden identifiers).\r\n\t/// </summary>\r\n\tinternal static class Keywords\r\n\t{\r\n\t\tpublic const string Exit           = \"exit\";\r\n\t\tpublic const string Die            = \"die\";\r\n\t\tpublic const string Function       = \"function\";\r\n\t\tpublic const string Const          = \"const\";\r\n\t\tpublic const string Return         = \"return\";\r\n\t\tpublic const string If             = \"if\";\r\n\t\tpublic const string ElseIf         = \"elseif\";\r\n\t\tpublic const string EndIf          = \"endif\";\r\n\t\tpublic const string Else           = \"else\";\r\n\t\tpublic const string While          = \"while\";\r\n\t\tpublic const string EndWhile       = \"endwhile\";\r\n\t\tpublic const string Do             = \"do\";\r\n\t\tpublic const string For            = \"for\";\r\n\t\tpublic const string EndFor         = \"endfor\";\r\n\t\tpublic const string ForEach        = \"foreach\";\r\n\t\tpublic const string EndForEach     = \"endforeach\";\r\n\t\tpublic const string Declare        = \"declare\";\r\n\t\tpublic const string EndDeclare     = \"enddeclare\";\r\n\t\tpublic const string As             = \"as\";\r\n\t\tpublic const string Switch         = \"switch\";\r\n\t\tpublic const string EndSwitc       = \"endswitch\";\r\n\t\tpublic const string Case           = \"case\";\r\n\t\tpublic const string Default        = \"default\";\r\n\t\tpublic const string Break          = \"break\";\r\n\t\tpublic const string Continue       = \"continue\";\r\n\t\tpublic const string Echo           = \"echo\";\r\n\t\tpublic const string Print          = \"print\";\r\n\t\tpublic const string Class          = \"class\";\r\n        public const string Trait          = \"trait\";\r\n\t\tpublic const string Extends        = \"extends\";\r\n\t\tpublic const string New            = \"new\";\r\n\t\tpublic const string Var            = \"var\";\r\n\t\tpublic const string Eval           = \"eval\";\r\n\t\tpublic const string Include        = \"include\";\r\n\t\tpublic const string IncludeOnce    = \"include_once\";\r\n\t\tpublic const string Require        = \"require\";\r\n\t\tpublic const string RequireOnce    = \"require_once\";\r\n\t\tpublic const string Use            = \"use\";\r\n        public const string Import = \"import\";\r\n\t\tpublic const string Global         = \"global\";\r\n\t\tpublic const string IsSet          = \"isset\";\r\n\t\tpublic const string Empty          = \"empty\";\r\n\t\tpublic const string Static         = \"static\";\r\n\t\tpublic const string Unset          = \"unset\";\r\n\t\tpublic const string Or             = \"or\";\r\n\t\tpublic const string And            = \"and\";\r\n\t\tpublic const string Xor            = \"xor\";\r\n\t\tpublic const string List           = \"list\";\r\n\t\tpublic const string Array          = \"array\";\r\n\t\tpublic const string Try            = \"try\";\r\n\t\tpublic const string Catch          = \"catch\";\r\n\t\tpublic const string Throw          = \"throw\";\r\n\t\tpublic const string Interface      = \"interface\";\r\n\t\tpublic const string Implements     = \"implements\";\r\n\t\tpublic const string Clone          = \"clone\";\r\n\t\tpublic const string Abstract       = \"abstract\";\r\n\t\tpublic const string Final          = \"final\";\r\n\t\tpublic const string Private        = \"private\";\r\n\t\tpublic const string Protected      = \"protected\";\r\n\t\tpublic const string Public         = \"public\";\r\n\t\tpublic const string InstanceOf     = \"instanceof\";\r\n\t\tpublic const string Namespace      = \"namespace\";\r\n\t\tpublic const string Partial        = \"partial\";\r\n        \r\n\t\tpublic const string NAMESPACE      = \"__NAMESPACE__\";\r\n\t\tpublic const string CLASS          = \"__CLASS__\";\r\n\t\tpublic const string FUNCTION       = \"__FUNCTION__\";\r\n\t\tpublic const string METHOD         = \"__METHOD__\";\r\n\t\tpublic const string LINE           = \"__LINE__\";\r\n\t\tpublic const string FILE           = \"__FILE__\";\r\n        public const string DIR            = \"__DIR__ \";\r\n\r\n        public const string TypeOf      = \"CLRTypeOf\";//Added by onny 03-09-2008\r\n\r\n\t\tprivate static volatile Dictionary<string, string> _keywordDictionary;\r\n\t\tinternal static Dictionary<string, string> KeywordDictionary\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_keywordDictionary == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tType self = typeof(Keywords);\r\n\t\t\t\t\tlock (self)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (_keywordDictionary == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tFieldInfo[] fields = self.GetFields(BindingFlags.Public | BindingFlags.Static);\r\n\r\n\t\t\t\t\t\t\t_keywordDictionary = new Dictionary<string, string>(fields.Length);\r\n\r\n\t\t\t\t\t\t\tfor (int i = 0; i < fields.Length; i++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (fields[i].IsLiteral)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tstring kw = (string)fields[i].GetValue(null);\r\n\t\t\t\t\t\t\t\t\t_keywordDictionary.Add(kw.ToLowerInvariant(), kw);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn _keywordDictionary;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a given string is a keyword.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\">A string.</param>\r\n\t\t/// <returns><B>True</B> if <paramref name=\"str\"/> is a keyword, <B>false</B> otherwise.</returns>\r\n\t\tpublic static bool IsKeyword(string/*!*/ str)\r\n\t\t{\r\n\t\t\treturn KeywordDictionary.ContainsKey(str.ToLowerInvariant());\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Special words (allowed identifiers).\r\n\t/// </summary>\r\n\tinternal static class SpecialWords\r\n\t{\r\n\t\tpublic const string Goto           = \"goto\";\r\n\r\n\t\tpublic const string Int            = \"int\";\r\n\t\tpublic const string String         = \"string\";\r\n\t\tpublic const string Bool           = \"bool\";\r\n\t\tpublic const string Double         = \"double\";\r\n\t\tpublic const string Object         = \"object\";\r\n\t\tpublic const string Array          = \"array\";\r\n\r\n\t\tpublic const string From           = \"from\";\r\n\t\tpublic const string Where          = \"where\";\r\n\t\tpublic const string OrderBy        = \"orderby\";\r\n\t\tpublic const string Descending     = \"descending\";\r\n\t\tpublic const string Ascending      = \"ascending\";\r\n\t\tpublic const string Select         = \"select\";\r\n\t\tpublic const string Group          = \"group\";\r\n\t\tpublic const string In             = \"in\";\r\n\t\tpublic const string By             = \"by\";\r\n\r\n\t\tpublic const string Assert         = \"assert\";\r\n\t\tpublic const string Get            = \"__get\";\r\n\t\tpublic const string Set            = \"__set\";\r\n\t\tpublic const string Call           = \"__call\";\r\n\t\tpublic const string ToStringMethod = \"__tostring\";\r\n\t\tpublic const string Construct      = \"__construct\";\r\n\t\tpublic const string Destruct       = \"__destruct\";\r\n\t\tpublic const string WakeUp         = \"__wakeup\";\r\n\t\tpublic const string Sleep          = \"__sleep\";\r\n\t\tpublic const string AutoLoad       = \"__autoload\";\r\n\r\n\t\tpublic const string This           = \"this\";\r\n\t\tpublic const string Parent         = \"parent\";\r\n\t\tpublic const string Self           = \"self\";\r\n\r\n\t\tpublic const string True           = \"true\";\r\n\t\tpublic const string False          = \"false\";\r\n\t\tpublic const string Null           = \"NULL\";\r\n\t\r\n\t\tpublic const string Add            = \"Add\";\r\n\t\tpublic const string Remove         = \"Remove\";\r\n\t\tpublic const string Invoke         = \"Invoke\";\r\n\t\tpublic const string Main           = \"Main\";\r\n\r\n\t\tpublic const string IndexerGet     = \"get_Item\";\r\n\t\tpublic const string IndexerSet     = \"set_Item\";\r\n\r\n\t\tpublic const string AssemblyAttr   = \"assembly: \";\r\n\t\tpublic const string AssemblyInfo   = \"AssemblyInfo_\";\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Non-word tokens (brackets, operators, etc).\r\n\t/// </summary>\r\n\tinternal static class Tokens\r\n\t{\r\n\t\tpublic const string BraceLeft             = \"{\";\r\n\t\tpublic const string BraceRight            = \"}\";\r\n\t\tpublic const string BracketLeft           = \"[\";\r\n\t\tpublic const string BracketRight          = \"]\";\r\n\t\tpublic const string ParenthesisLeft       = \"(\";\r\n\t\tpublic const string ParenthesisRight      = \")\";\r\n\t\tpublic const string PhpBracketLeft        = \"<?\";\r\n\t\tpublic const string PhpBracketRight       = \"?>\";\r\n\t\tpublic const string GenericBracketLeft    = \"<:\";\r\n\t\tpublic const string GenericBracketRight   = \":>\";\r\n\t\tpublic const string AttributeBracketLeft  = \"[\";\r\n\t\tpublic const string AttributeBracketRight = \"]\";\r\n\r\n\t\tpublic const string Dollar                = \"$\";\r\n\t\tpublic const string Reference             = \"&\";\r\n\t\tpublic const string Colon                 = \":\";\r\n\t\tpublic const string Semicolon             = \";\";\r\n\t\tpublic const string Comma                 = \",\";\r\n\t\tpublic const string Arrow                 = \"->\";\r\n\t\tpublic const string DoubleArrow           = \"=>\";\r\n\t\tpublic const string DoubleColon           = \"::\";\r\n\t\tpublic const string NamespaceSeparator    = \"\\\\\";\r\n\r\n\t\tpublic const string Increment             = \"++\";\r\n\t\tpublic const string Decrement             = \"--\";\r\n\r\n\t\tpublic const string Identity              = \"===\";\r\n\t\tpublic const string NotIdentity           = \"!==\";\r\n\t\tpublic const string Equality              = \"==\";\r\n\t\tpublic const string NotEquality           = \"!=\";\r\n\t\tpublic const string NotEqualityAlt        = \"<>\";\r\n\t\tpublic const string LessOrEqual           = \"<=\";\r\n\t\tpublic const string GreaterOrEqual        = \">=\";\r\n\r\n\t\tpublic const string Assignment            = \"=\";\r\n\t\tpublic const string AddAssignment         = \"+=\";\r\n\t\tpublic const string SubAssignment         = \"-=\";\r\n\t\tpublic const string MultAssignment        = \"*=\";\r\n\t\tpublic const string DivAssignment         = \"/=\";\r\n\t\tpublic const string ConcatAssignment      = \".=\";\r\n\t\tpublic const string ModAssignment         = \"%=\";\r\n\t\tpublic const string ShiftLeftAssignment   = \"<<=\";\r\n\t\tpublic const string ShiftRightAssignment  = \">>=\";\r\n\t\tpublic const string AndAssignment         = \"&=\";\r\n\t\tpublic const string OrAssignment          = \"|=\";\r\n\t\tpublic const string XorAssignent          = \"^=\";\r\n\t\tpublic const string BooleanOr             = \"||\";\r\n\t\tpublic const string BooleanAnd            = \"&&\";\r\n\t\tpublic const string ShiftLeft             = \"<<\";\r\n\t\tpublic const string ShiftRight            = \">>\";\r\n\t\t\r\n\t\tpublic const string Addition              = \"+\";\r\n\t\tpublic const string Subtraction           = \"-\";\r\n\t\tpublic const string Multiplication        = \"*\";\r\n\t\tpublic const string Division              = \"/\";\r\n\t\tpublic const string Concatenation         = \".\";\r\n\t\tpublic const string Modulo                = \"%\";\r\n\t\tpublic const string LogicalOr             = \"|\";\r\n\t\tpublic const string LogicalAnd            = \"&\";\r\n\t\tpublic const string Xor                   = \"^\";\r\n\t\tpublic const string Neg                   = \"~\";\r\n\t\tpublic const string Not                   = \"!\";\r\n\r\n\t\tpublic const string Pound                 = \"#\";\r\n\t\tpublic const string Comment               = \"//\";\r\n\t\tpublic const string CommentLeft           = \"/*\";\r\n\t\tpublic const string CommentRight          = \"*/\";\r\n\t\tpublic const string DocCommentLeft        = \"/**\";\r\n\t\tpublic const string DocCommentMiddle      = \" *\";\r\n\t\tpublic const string DocCommentRight       = \" */\";\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// White space characters.\r\n\t/// </summary>\r\n\tinternal static class WhiteSpace\r\n\t{\r\n\t\tpublic const char Space                   = ' ';\r\n\t\tpublic const char Tab                     = '\\t';\r\n\t\tpublic const char NewLine                 = '\\n';\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.CodeDom/PhpCodeDomParser.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing PHP.Core.Reflection;\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing System.CodeDom;\r\nusing System.CodeDom.Compiler;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Text;\r\n\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n\r\n    /// <summary>Implements <see cref=\"ICodeParser\"/> for PHP language</summary>\r\n    /// <remarks>The purpose of this class is to translate code tree representation that is used by PHP internally to .NET's CodeDOM.</remarks>\r\n    public class PhpCodeDomParser : CodeParser\r\n    {\r\n        private List<string> /*!*/ references = new List<string>();\r\n        public PhpCodeDomParser() : this(null) { }\r\n        public PhpCodeDomParser(List<string> references)\r\n        {\r\n            if (references == null || references.Count == 0)\r\n            {\r\n                this.references.AddRange(new string[]{\r\n                    \"System.Windows.Forms\",\r\n                    \"System\",\r\n                    \"System.Data\",\r\n                    \"System.Drawing\",\r\n                    \"System.Xml\",\r\n                    \"mscorlib\",\r\n                    \"PhpNetCore\",\r\n                    \"PhpNetClassLibrary\"});\r\n            }\r\n            else\r\n            {\r\n                this.references.AddRange(references);\r\n            }\r\n        }\r\n        /// <summary>Compiles the specified text stream into a <see cref=\"System.CodeDom.CodeCompileUnit\"/>.</summary>\r\n        /// <param name=\"codeStream\">A <see cref=\"System.IO.TextReader\"/> that is used to read the code to be parsed.</param>\r\n        /// <returns>A <see cref=\"System.CodeDom.CodeCompileUnit\"/> containing the code model produced from parsing the code.</returns>\r\n        public override CodeCompileUnit Parse(TextReader/*!*/ codeStream)\r\n        {\r\n            PhpCodeDomParserImplementation impl = new PhpCodeDomParserImplementation(EventMode, DelegateMode, this);\r\n            return impl.Parse(codeStream.ReadToEnd());\r\n        }\r\n        /// <summary>Mode of translating delegate-like constructs</summary>\r\n        /// <remarks>PHP creates delegate using sth. like new System:::EventHandler(array($this, \"mtd\"))</remarks>\r\n        public DelegateModes DelegateMode { get { return delegateMode; } set { delegateMode = value; } }\r\n        /// <summary>Containd value of the <see cref=\"DelegateMode\"/> property</summary>\r\n        private DelegateModes delegateMode = DelegateModes.ByType;\r\n        /// <summary>Possible way of recognizing delegates</summary>\r\n        public enum DelegateModes\r\n        {\r\n            /// <summary>Try to find type (only in already compiled DLLs). If type being constructed is delegate, translate as creation of delegate.</summary>\r\n            ByType,\r\n            /// <summary>All constructors that are feed by CTor non-associative array with 2 elements, where 2nd is string literal, ale treated as ctors of delegate.</summary>\r\n            AllPossible,\r\n            /// <summary>No delegate CTors are produced</summary>\r\n            None\r\n        }\r\n        /// <summary>Mode of translating event-attach/detach-like constructs</summary>\r\n        /// <remarks>PHP attaches/detaches events using sth. like $instance->Event-Add(delegate) resp. $instance->Event-Remove(delegate)</remarks>\r\n        public EventModes EventMode { get { return eventMode; } set { eventMode = value; } }\r\n        /// <summary>Contains value of the <see cref=\"EventMode\"/> property.</summary>\r\n        private EventModes eventMode = EventModes.WithDelegateOnly;\r\n        /// <summary>Possible ways of recognizing events</summary>\r\n        public enum EventModes\r\n        {\r\n            /// <summary>Only when argument is creation of delegate</summary>\r\n            WithDelegateOnly,\r\n            /// <summary>All statements in format (somethink)->Name->Add(something) (or Remove)</summary>\r\n            AllPossible,\r\n            /// <summary>No event attach/remove statements are produced</summary>\r\n            None\r\n        }\r\n\r\n        /// <summary>Implements translation for <see cref=\"PhpCodeDomParser\"/></summary>\r\n        protected class PhpCodeDomParserImplementation\r\n        {\r\n            /// <summary>Mode of translating event-attach/detach-like constructs</summary>\r\n            /// <remarks>PHP attaches/detaches events using sth. like $instance->Event-Add(delegate) resp. $instance->Event-Remove(delegate)</remarks>\r\n            public EventModes EventMode { get { return eventMode; } /*set { eventMode = value; }*/ }\r\n            /// <summary>Contains value of the <see cref=\"EventMode\"/> property.</summary>\r\n            private EventModes eventMode = EventModes.WithDelegateOnly;\r\n            /// <summary>Mode of translating delegate-like constructs</summary>\r\n            /// <remarks>PHP creates delegate using sth. like new System:::EventHandler(array($this, \"mtd\"))</remarks>\r\n            public DelegateModes DelegateMode { get { return delegateMode; } /*set { delegateMode = value; }*/ }\r\n            /// <summary>Containd value of the <see cref=\"DelegateMode\"/> property</summary>\r\n            private DelegateModes delegateMode = DelegateModes.ByType;\r\n            /// <summary>Owner of this instance</summary>\r\n            private PhpCodeDomParser /*!*/ owner;\r\n            /// <summary>CTor</summary>\r\n            /// <param name=\"eventMode\">Mode of translating event-attach/detach-like constructs</param>\r\n            /// <param name=\"delegateMode\">Mode of translating delegate-like constructs</param>\r\n            /// <param name=\"owner\">Instance of <see cref=\"PhpCodeDomParser\"/> that created this instance</param>\r\n            public PhpCodeDomParserImplementation(EventModes eventMode, DelegateModes delegateMode, PhpCodeDomParser /*!*/ owner)\r\n            {\r\n                if (owner == null) throw new ArgumentNullException(\"owner\");\r\n                this.eventMode = eventMode;\r\n                this.delegateMode = delegateMode;\r\n                this.owner = owner;\r\n            }\r\n            #region Helpers\r\n            /// <summary>Guess if <see cref=\"NewEx\"/> creates new delegate or not</summary>\r\n            /// <param name=\"New\">Expression to make guess for</param>\r\n            /// <returns>Booleand indicating if expression should be treated as delegate creation depending on <see cref=\"DelegateMode\"/>.</returns>\r\n            protected bool LooksLikeDelegate(NewEx New)\r\n            {\r\n                switch (DelegateMode)\r\n                {\r\n                    case DelegateModes.AllPossible:\r\n                        return CanBeDelegateConstruction(New);\r\n                    case DelegateModes.ByType:\r\n                        Type t = GetType(TranslateTypeRef(New.ClassNameRef, null));\r\n                        if (t == null) return false;\r\n                        return t.IsSubclassOf(typeof(System.Delegate)) || t.Equals(typeof(Delegate));\r\n                    default: return false;\r\n                }\r\n            }\r\n            /// <summary>Tries to get <see cref=\"Type\"/> from <see cref=\"CodeTypeReference\"/></summary>\r\n            /// <param name=\"t\">A <see cref=\"CodeTypeReference\"/></param>\r\n            /// <returns><see cref=\"Type\"/> if found or null.</returns>\r\n            protected Type GetType(CodeTypeReference t)\r\n            {\r\n                return Helper.GetType(t, /*CurrentBlockAliases*/null/*J:aliases processed by parser already*/, imports.ToArray(), owner.references);\r\n            }\r\n\r\n            /// <summary>Returns value indicating if <see cref=\"NewEx\"/> can syntactically be creation of delegate</summary>\r\n            /// <param name=\"New\">Expression to makde decission for</param>\r\n            /// <returns>\r\n            /// True for <see cref=\"NewEx\">NewEx</see>s with one argument which is\r\n            /// <see cref=\"ArrayEx\"/> with 2 non-associative (without index) elements (no rereferce elements)\r\n            /// and 2nd element's value is <see cref=\"StringLiteral\"/>.\r\n            /// </returns>\r\n            private bool CanBeDelegateConstruction(NewEx New)\r\n            {\r\n                return\r\n                    New.CallSignature.Parameters.Length == 1 &&\r\n                    New.CallSignature.Parameters[0].Expression is ArrayEx &&\r\n                    ((ArrayEx)New.CallSignature.Parameters[0].Expression).Items.Length == 2 &&\r\n                    ((ArrayEx)New.CallSignature.Parameters[0].Expression).Items[0].Index == null &&\r\n                    ((ArrayEx)New.CallSignature.Parameters[0].Expression).Items[1].Index == null &&\r\n                    ((ArrayEx)New.CallSignature.Parameters[0].Expression).Items[0] is ValueItem &&\r\n                    ((ArrayEx)New.CallSignature.Parameters[0].Expression).Items[1] is ValueItem &&\r\n                    ((ValueItem)((ArrayEx)New.CallSignature.Parameters[0].Expression).Items[1]).ValueExpr is StringLiteral;\r\n            }\r\n            /// <summary>Stores name of file currently being translated</summary>\r\n            private string currentFile;\r\n            /// <summary>Stores name of class currently being translated</summary>\r\n            private string currentClass;\r\n            /// <summary>Stores fully qualified name of method currently beigng translated</summary>\r\n            private string currentMethod;\r\n            /// <summary>Stores name of method currently being translated</summary>\r\n            private string currentFunction;\r\n            /// <summary>Stores name of namespace currently being translated</summary>\r\n            private string currentNamespace;\r\n            /// <summary>Gets expression that gets current context fot PHP script</summary>\r\n            protected static CodePropertyReferenceExpression CurrentContext\r\n            {\r\n                get\r\n                {\r\n                    return new CodePropertyReferenceExpression(\r\n                        new CodeTypeReferenceExpression(typeof(ScriptContext)), \"CurrentContext\");\r\n                }\r\n            }\r\n            /// <summary>Converts anything to <see cref=\"IStatementInsertContext\"/> if it is implemented by that 'anything'</summary>\r\n            /// <param name=\"obj\">Object to convert</param>\r\n            /// <returns><paramref name=\"obj\"/> if it implements <see cref=\"IStatementInsertContext\"/>; null otherwise</returns>\r\n            protected static IStatementInsertContext getIC(object /*!*/ obj)\r\n            {\r\n                return obj is IStatementInsertContext ? (IStatementInsertContext)obj : null;\r\n            }\r\n            /// <summary>Converts anything to <see cref=\"ICodeBlockContext\"/> if it is implemented by that 'anything'</summary>\r\n            /// <param name=\"obj\">Object to convert</param>\r\n            /// <returns><paramref name=\"obj\"/> if it implements <see cref=\"ICodeBlockContext\"/>; null otherwise</returns>\r\n            protected static ICodeBlockContext getICodeBlockContext(object/*!*/obj)\r\n            {\r\n                return obj is ICodeBlockContext ? (ICodeBlockContext)obj : null;\r\n            }\r\n            /// <summary>Helper for translation for block-level statements. Performs type conversion from <see cref=\"MethodContextBase\"/> to <see cref=\"MethodContext\"/> and from <see cref=\"IBlockContext\"/> to <see cref=\"ICodeBlockContext\"/></summary>\r\n            /// <param name=\"methodQ\">Something that should be <see cref=\"MethodContext\"/></param>\r\n            /// <param name=\"blockQ\">Something that may be <see cref=\"BlockStatementContext\"/></param>\r\n            /// <param name=\"method\">Returns <paramref name=\"methodQ\"/></param>\r\n            /// <param name=\"block\">Returns <paramref name=\"blockQ\"/> if <paramref name=\"blockQ\"/> is <see cref=\"ICodeBlockContext\"/>, otherwise null</param>\r\n            /// <param name=\"errorElement\">The element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"methodQ\"/> is not <see cref=\"MethodContext\"/></exception>\r\n            private static void MethodAndBlock(MethodContextBase methodQ, IBlockContext blockQ, ref  MethodContext method, ref  ICodeBlockContext block, LangElement /*!*/ errorElement)\r\n            {\r\n                if (methodQ is MethodContext) method = (MethodContext)methodQ; else throw new PhpToCodeDomNotSupportedException(\"GetUserEntryPoint context is required to be method for block-level statements\", errorElement);\r\n                block = blockQ as ICodeBlockContext;// is ICodeBlockContext ? (ICodeBlockContext)blockQ : null;\r\n            }\r\n            /// <summary>Counter for <see cref=\"SwitchVarName\"/></summary>\r\n            private static int __SwitchVarName = 0;\r\n            /// <summary>Gets name for variable to switch by (used when translating the switch statement)</summary>\r\n            private static string SwitchVarName { get { return string.Format(\"__switchVar__{0:000}\", __SwitchVarName++); } }\r\n            /// <summary>Types of PHP loops</summary>\r\n            private enum Loops\r\n            {\r\n                /// <summary>switch</summary>\r\n                Switch,\r\n                /// <summary>for</summary>\r\n                For,\r\n                /// <summary>foreach</summary>\r\n                Foreach,\r\n                /// <summary>do, while</summary>\r\n                While\r\n            }\r\n            /// <summary>Counter of start labels for <see cref=\"LabelName\"/></summary>\r\n            private static Dictionary<Loops, int> __Labels1 = new Dictionary<Loops, int>();\r\n            /// <summary>Counter of end labels for <see cref=\"LabelName\"/></summary>\r\n            private static Dictionary<Loops, int> __Labels2 = new Dictionary<Loops, int>();\r\n            /// <summary>Initializer</summary>\r\n            static PhpCodeDomParserImplementation()\r\n            {\r\n                __Labels1.Add(Loops.For, 0);\r\n                __Labels1.Add(Loops.Foreach, 0);\r\n                __Labels1.Add(Loops.Switch, 0);\r\n                __Labels1.Add(Loops.While, 0);\r\n                __Labels2.Add(Loops.For, 0);\r\n                __Labels2.Add(Loops.Foreach, 0);\r\n                __Labels2.Add(Loops.Switch, 0);\r\n                __Labels2.Add(Loops.While, 0);\r\n            }\r\n            /// <summary>Gets unique name of label for loop</summary>\r\n            /// <param name=\"type\">Type of loop to get label for</param>\r\n            /// <param name=\"start\">True if this is label of start of loop; otherwise false</param>\r\n            /// <returns>Name of label</returns>\r\n            private static string /*!*/ LabelName(Loops type, bool start)\r\n            {\r\n                return string.Format(\"__{0}__label__{1:F}__{2:000}\", start ? \"Start\" : \"End\", type, (start ? __Labels1 : __Labels2)[type]++);\r\n            }\r\n            /// <summary>Gets value indicationg if given <see cref=\"DirectVarUse\"/> refers to property or field</summary>\r\n            /// <param name=\"use\"><see cref=\"DirectVarUse\"/> to make resolution for</param>\r\n            /// <param name=\"method\">GetUserEntryPoint used for resolving context</param>\r\n            /// <returns>True if <paramref name=\"use\"/> reffres to property, false if it reffers to field or resolution cannot be done</returns>\r\n            private bool IsProperty(DirectVarUse /*!*/ use, MethodContextBase /*!*/ method)\r\n            {\r\n                if (use.IsMemberOf == null) return false;\r\n                Type SearchIn = null;\r\n                if (use.IsMemberOf != null && use.IsMemberOf is DirectVarUse && ((DirectVarUse)use.IsMemberOf).VarName.Value == \"this\")\r\n                {\r\n                    if (/*Member is defined in current implementation*/\r\n                        method is MethodContext && ((MethodContext)method).Class != null &&\r\n                        ((MethodContext)method).Class.getPropertyOrField(((DirectVarUse)use).VarName.Value) != null\r\n                    )\r\n                    {\r\n                        CodeTypeMember member = ((MethodContext)method).Class.getPropertyOrField(((DirectVarUse)use).VarName.Value);\r\n                        if (member is CodeMemberField) SearchIn = GetType(((CodeMemberField)member).Type);\r\n                        else if (member is CodeMemberProperty) SearchIn = GetType(((CodeMemberProperty)member).Type);\r\n                    }\r\n                    else/*Member is inherited*/\r\n                    {\r\n                        if (method is MethodContext && ((MethodContext)method).Class != null &&\r\n                            ((MethodContext)method).Class.Context.BaseTypes.Count > 0\r\n                        )\r\n                            SearchIn = GetType(((MethodContext)method).Class.Context.BaseTypes[0]);//Types are translated in such way that first is base class (extends) and then interfaces (implements)\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    SearchIn = GetType(use.IsMemberOf, method);\r\n                }\r\n                if (SearchIn != null)\r\n                    try\r\n                    {\r\n                        return SearchIn.GetProperty(use.VarName.Value, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) != null;\r\n                    }\r\n                    catch (AmbiguousMatchException)\r\n                    {\r\n                        return true;//Better to do this without try-catch, but this is the easy way (see TableLeyoutPanel - it causes this ex. to be thrown.)\r\n                    }\r\n                return false;\r\n            }\r\n            /// <summary>Tryes to get type of <see cref=\"VarLikeConstructUse\"/></summary>\r\n            /// <param name=\"use\"><see cref=\"VarLikeConstructUse\"/> to get type of</param>\r\n            /// <param name=\"method\">GetUserEntryPoint used for resolving context</param>\r\n            /// <returns>Type of value returned by given member. Type of <see cref=\"System.Object\"/> if type cannot be infered.</returns>\r\n            private Type /*!*/ GetType(VarLikeConstructUse /*!*/ use, MethodContextBase /*!*/ method)\r\n            {\r\n                if (use is ItemUse)\r\n                {\r\n                    Type Type = GetType(((ItemUse)use).Array, method);\r\n                    if (Type.IsArray) return Type.GetElementType();\r\n                    return typeof(object);\r\n                }\r\n                Type OwnerType = null;//type of part at left from ->\r\n                if (use.IsMemberOf != null && use.IsMemberOf is DirectVarUse && ((DirectVarUse)use.IsMemberOf).VarName.Value == \"this\")\r\n                {\r\n                    //$this->use must be handled in special way \r\n                    if (method is MethodContext && ((MethodContext)method).Class != null)\r\n                    {\r\n                        //$this must be used in class (otherwise it is treated as variable)\r\n                        TypeContext Class = ((MethodContext)method).Class;\r\n                        if (use is DirectVarUse && Class.getPropertyOrField(((DirectVarUse)use).VarName.Value) != null)\r\n                        {\r\n                            //$this->use is declared in derived class (in PHP)\r\n                            CodeTypeMember member = Class.getPropertyOrField(((DirectVarUse)use).VarName.Value);\r\n                            if (member is CodeMemberField) OwnerType = GetType(((CodeMemberField)member).Type);\r\n                            else if (member is CodeMemberProperty) OwnerType = GetType(((CodeMemberProperty)member).Type);\r\n                        }\r\n                        else if (Class.Context.BaseTypes.Count > 0)\r\n                        {\r\n                            //$this is declare din base class (compiled)\r\n                            string UseName = null;\r\n                            if (use is DirectFcnCall) UseName = ((DirectFcnCall)use).QualifiedName.Name.Value;\r\n                            else if (use is DirectVarUse) UseName = ((DirectVarUse)use).VarName.Value;\r\n                            if (UseName != null)\r\n                            {//Must be able to get name of $this->use\r\n                                Type BaseType = GetType(Class.Context.BaseTypes[0]);\r\n                                MemberInfo[] Members = BaseType.GetMember(UseName);\r\n                                if (Members.Length == 1)\r\n                                {//I do not want to deal with overloaded functions (by now)\r\n                                    if (Members[0] is FieldInfo) OwnerType = ((FieldInfo)Members[0]).FieldType;\r\n                                    else if (Members[0] is PropertyInfo) OwnerType = ((PropertyInfo)Members[0]).PropertyType;\r\n                                    else if (Members[0] is MethodInfo) OwnerType = ((MethodInfo)Members[0]).ReturnType;\r\n                                }\r\n                            }\r\n                        }\r\n                        if (OwnerType == null) return typeof(object);\r\n                        return OwnerType;//By resolving $this->Var I've resolved 2 levels at once\r\n                    }\r\n                }\r\n                else if (use.IsMemberOf != null)\r\n                {//Recursive\r\n                    OwnerType = GetType(use.IsMemberOf, method);\r\n                }\r\n                //Now I know type of part at left of -> (OwnerType)\r\n                //If there is any ->\r\n                //Or I know that I do not know ;-) (OwnerType == null)\r\n                //One think is left - static members\r\n                string MemberName = null;\r\n                if (use is DirectStMtdCall)\r\n                {\r\n                    MemberName = ((DirectStMtdCall)use).MethodName.Value;\r\n                    OwnerType = GetType(TranslateGenericQualifiedName(((DirectStMtdCall)use).ClassName, true));\r\n                }\r\n                else if (use is DirectStFldUse)\r\n                {\r\n                    MemberName = ((DirectStFldUse)use).PropertyName.Value;\r\n                    OwnerType = GetType(TranslateGenericQualifiedName(((DirectStFldUse)use).TypeName, true));\r\n                }\r\n\r\n                if (use is DirectFcnCall)\r\n                { // ->fce()\r\n                    if (OwnerType == null) return typeof(object);\r\n                    MethodInfo mtd = OwnerType.GetMethod(((DirectFcnCall)use).QualifiedName.Name.Value, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (mtd != null) return mtd.ReturnType;\r\n                }\r\n                else if (use is DirectStMtdCall)\r\n                { // ::fce()\r\n                    if (OwnerType == null) return typeof(object);\r\n                    MethodInfo mtd = OwnerType.GetMethod(((DirectStMtdCall)use).MethodName.Value, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (mtd != null) return mtd.ReturnType;\r\n                }\r\n                else if (use is DirectVarUse && use.IsMemberOf == null)\r\n                { // $var\r\n                    if (method.Contains(((DirectVarUse)use).VarName.Value))\r\n                        return GetType(method[((DirectVarUse)use).VarName.Value].Type);\r\n                }\r\n                else if (use is DirectVarUse)\r\n                { // ->var\r\n                    if (OwnerType == null) return typeof(object);\r\n                    PropertyInfo prp = OwnerType.GetProperty(((DirectVarUse)use).VarName.Value, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (prp != null) return prp.PropertyType;\r\n                    FieldInfo fld = OwnerType.GetField(((DirectVarUse)use).VarName.Value, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (fld != null) return fld.FieldType;\r\n                }\r\n                else if (use is DirectStFldUse)\r\n                {// ::$var\r\n                    if (OwnerType == null) return typeof(object);\r\n                    PropertyInfo prp = OwnerType.GetProperty(((DirectStFldUse)use).PropertyName.Value, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (prp != null) return prp.PropertyType;\r\n                    FieldInfo fld = OwnerType.GetField(((DirectStFldUse)use).PropertyName.Value, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);\r\n                    if (fld != null) return fld.FieldType;\r\n                }\r\n                return typeof(object);\r\n            }\r\n            /// <summary>Gets value indicationg if given <see cref=\"DirectStFldUse\"/> refers to property or field</summary>\r\n            /// <param name=\"use\"><see cref=\"DirectStFldUse\"/> to make resolution for</param>\r\n            /// <returns>True if <paramref name=\"use\"/> reffres to property, false if it reffers to field or resolution cannot be done</returns>\r\n            private bool IsProperty(DirectStFldUse /*!*/ use)\r\n            {\r\n                Type type = GetType(TranslateGenericQualifiedName(use.TypeName, true));\r\n                if (type == null) return false;\r\n                return type.GetProperty(use.PropertyName.Value, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) != null;\r\n            }\r\n            /// <summary>Compares two <see cref=\"CodeTypeReference\">CodeTypeReferences</see></summary>\r\n            /// <param name=\"T1\">A <see cref=\"CodeTypeReference\"/></param>\r\n            /// <param name=\"T2\">A <see cref=\"CodeTypeReference\"/></param>\r\n            /// <returns>true if both arguments represents the same type (or both are null); false otherwise</returns>\r\n            private static bool TypeEquals(CodeTypeReference T1, CodeTypeReference T2)\r\n            {\r\n                if ((T1 == null && T2 != null) || (T2 == null && T1 != null)) return false;\r\n                if (T1 == null && T2 == null) return true;\r\n                if (\r\n                    T1.BaseType == T2.BaseType &&\r\n                    T2.ArrayRank == T1.ArrayRank &&\r\n                    T1.TypeArguments.Count == T2.TypeArguments.Count\r\n                )\r\n                {\r\n                    if (T1.ArrayRank > 0 && !TypeEquals(T1.ArrayElementType, T2.ArrayElementType)) return false;\r\n                    for (int i = 0; i < T1.TypeArguments.Count; i++)\r\n                    {\r\n                        if (!TypeEquals(T1.TypeArguments[i], T2.TypeArguments[i])) return false;\r\n                    }\r\n                    return true;\r\n                }\r\n                else return false;\r\n            }\r\n            /// <summary>Gets <see cref=\"CodeLinePragma\"/> for given line</summary>\r\n            /// <param name=\"Line\">Line number (0-based)</param>\r\n            /// <returns><see cref=\"CodeLinePragmaNoWrite\"/> with <see cref=\"CodeLinePragma.FileName\"/> set to <see cref=\"currentFile\"/></returns>\r\n            private CodeLinePragma getPragma(int Line)\r\n            {\r\n                return new CodeLinePragmaNoWrite(currentFile, Line);\r\n            }\r\n            #endregion\r\n            /// <summary>Compiles the specified string into a <see cref=\"System.CodeDom.CodeCompileUnit\"/>.</summary>\r\n            /// <param name=\"codeText\">A <see cref=\"System.String\"/> that contains code to be parsed.</param>\r\n            /// <returns>A <see cref=\"System.CodeDom.CodeCompileUnit\"/> containing the code model produced from parsing the code.</returns>\r\n            public CodeCompileUnit Parse(String/*!*/ codeText)\r\n            {\r\n                currentFile = \"C:\\\\\";\r\n                PhpSourceFile fl = new PhpSourceFile(new FullPath(\"C:\\\\\"), new FullPath(\"C:\\\\\"));//TODO: Is there any way how to obtain paths???\r\n                CodeDomCompilationUnit cu = new CodeDomCompilationUnit(true);//TODO:IsPure or Not???\r\n                GlobalCode gc = cu.ParseString(codeText, Encoding.UTF8, fl, LanguageFeatures.PhpClr);//TODO: Language features\r\n                return Translate(gc);\r\n            }\r\n            #region High level translations\r\n            /// <summary>Translates tree of PHP code into .NET's CodeDOM tree representation</summary>\r\n            /// <param name=\"gc\">Parsed PHP code</param>\r\n            /// <returns><paramref name=\"gc\"/> translated into <see cref=\"CodeCompileUnit\"/></returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">PHP construct that is not (currently) supported for translation into CodeDOM has been reached.</exception>\r\n            protected CodeCompileUnit Translate(GlobalCode/*!*/ gc)\r\n            {\r\n                /*CodeCompileUnit ret = new CodeCompileUnit();\r\n                ret.Namespaces.Add(new CodeNamespace());\r\n                //import namespace System:::Windows:::Forms;\r\n                ret.Namespaces[0].Imports.Add(new CodeNamespaceImport(\"System.Windows.Forms\"));\r\n                //import namespace System:::ComponentModel;\r\n                ret.Namespaces[0].Imports.Add(new CodeNamespaceImport(\"System.ComponentModel\"));\r\n                //import namespace System:::Drawing;\r\n                ret.Namespaces[0].Imports.Add(new CodeNamespaceImport(\"System.Drawing\"));\r\n                //import namespace TestApp1;\r\n                ret.Namespaces[0].Imports.Add(new CodeNamespaceImport(\"TestApp1\"));\r\n                //namespace TestApp1 {\r\n                ret.Namespaces.Add(new CodeNamespace(\"TestApp1\"));\r\n                //class Form1\r\n                ret.Namespaces[1].Types.Add(new CodeTypeDeclaration(\"Form1\"));\r\n                ret.Namespaces[1].Types[0].Attributes = MemberAttributes.Public;\r\n                //extends System:::Windows:::Forms:::Form\r\n                ret.Namespaces[1].Types[0].BaseTypes.Add(new CodeTypeReference(\"System.Windows.Forms.Form\"));\r\n                //private $button1;\r\n                ret.Namespaces[1].Types[0].Members.Add(new CodeMemberField(new CodeTypeReference(typeof(System.Object)), \"button1\") { Attributes = MemberAttributes.Private });\r\n                //public function __construct()\r\n                ret.Namespaces[1].Types[0].Members.Add(new CodeTypeConstructor() { Attributes = MemberAttributes.Public });\r\n                //$this->InitializeComponent();\r\n                ((CodeTypeConstructor)ret.Namespaces[1].Types[0].Members[1]).Statements.Add(new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(),\"InitializeComponent\"),new CodeExpression[]{})));\r\n                //public function InitializeComponent()\r\n                ret.Namespaces[1].Types[0].Members.Add(new CodeMemberMethod() { Name = \"InitializeComponent\", Attributes = MemberAttributes.Public, ReturnType = new CodeTypeReference(typeof(System.Object)) });\r\n                ((CodeMemberMethod)ret.Namespaces[1].Types[0].Members[2]).Statements.AddRange(new CodeStatement[]{\r\n                    //$this->button1 = new System:::Windows:::Forms:::Button()\r\n                    new CodeAssignStatement(\r\n                        new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\r\n                        new CodeObjectCreateExpression(\"System.Windows.Forms.Button\",new CodeExpression[]{})\r\n                    ),\r\n                    //$this->SuspendLayout();\r\n                    new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(),\"SuspendLayout\",new CodeExpression[]{})),\r\n                    //$this->button1->Location = new System:::Drawing:::Point(96, 109);\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\"Location\"),\r\n                        new CodeObjectCreateExpression(\"System.Drawing.Point\",new CodeExpression[]{new CodePrimitiveExpression((int)96),new CodePrimitiveExpression((int)109)})\r\n                    ),\r\n                    //$this->button1->Name = \"button1\";\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\"Name\"),\r\n                        new CodePrimitiveExpression(\"button1\")\r\n                    ),\r\n                    // $this->button1->Size = new System:::Drawing:::Size(100, 55);\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\"Size\"),\r\n                        new CodeObjectCreateExpression(\"System.Drawing.Size\",new CodeExpression[]{new CodePrimitiveExpression((int)100),new CodePrimitiveExpression((int)55)})\r\n                    ),\r\n                    //$this->button1->TabIndex = 1;\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"buton1\"),\"TabIndex\"),\r\n                        new CodePrimitiveExpression((int)1)\r\n                    ),\r\n                    //$this->button1->Text = \"button1\";\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\"Text\"),\r\n                        new CodePrimitiveExpression(\"button1\")\r\n                    ),\r\n                    //$this->button1->UseVisualStyleBackColor = true;\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\"),\"UseVisualStyleBackColor\"),\r\n                        new CodePrimitiveExpression(true)\r\n                    ),\r\n                    //$this->ClientSize = new System:::Drawing:::Size(292, 273);\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeThisReferenceExpression(),\"ClientSize\"),\r\n                        new CodeObjectCreateExpression(\"System.Drawing.Size\",new CodeExpression[]{\r\n                            new CodePrimitiveExpression((int)292),new CodePrimitiveExpression((int)273)})\r\n                    ),\r\n                    // $this->Controls->Add($this->button1);\r\n                    new CodeExpressionStatement(\r\n                        new CodeMethodInvokeExpression(new CodePropertyReferenceExpression(new CodeThisReferenceExpression(),\"Controls\"),\"Add\",\r\n                            new CodeExpression[]{new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),\"button1\")})\r\n                    ),\r\n                    //$this->Name = \"Form1\";\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeThisReferenceExpression(),\"Name\"),\r\n                        new CodePrimitiveExpression(\"Form1\")\r\n                    ),\r\n                    //$this->Text = \"Form1\";\r\n                    new CodeAssignStatement(\r\n                        new CodePropertyReferenceExpression(new CodeThisReferenceExpression(),\"Text\"),\r\n                        new CodePrimitiveExpression(\"Hi, I'm Form1\")\r\n                    ),\r\n                    //$this->ResumeLayout(false);\r\n                    new CodeExpressionStatement(\r\n                        new CodeMethodInvokeExpression(\r\n                            new CodeThisReferenceExpression(),\"ResumeLayout\",\r\n                            new CodeExpression[]{new CodePrimitiveExpression(false)})\r\n                    )\r\n                });\r\n                return ret;*/\r\n                this.aliases.Clear();\r\n                this.imports.Clear();\r\n                CodeCompileUnit ret = new CodeCompileUnit();\r\n                CodeNamespace DefaultNamespace = new CodeNamespace();\r\n\r\n                currentLineBreaks = gc.SourceUnit;\r\n\r\n                PushAliases(gc.SourceUnit.Naming);\r\n                ret.Namespaces.Add(DefaultNamespace);\r\n                \r\n\r\n                if (gc.SourceUnit.HasImportedNamespaces)\r\n                    foreach (QualifiedName Namespace in gc.SourceUnit.ImportedNamespaces)\r\n                    {\r\n                        DefaultNamespace.Imports.Add(new CodeNamespaceImport(getCLRName(Namespace)));\r\n                        imports.Add(getCLRName(Namespace));\r\n                    }\r\n\r\n                TranslateBlock(gc.Statements, new MethodContextBase(), new FileContext(ret));\r\n\r\n                PopAliases();\r\n\r\n                currentLineBreaks = null;\r\n\r\n                return ret;\r\n            }\r\n\r\n            #region Position tranlation\r\n\r\n            private ILineBreaks currentLineBreaks;\r\n            protected int GetLine(LangElement element) { return new TextPoint(currentLineBreaks, element.Span.Start).Line; }\r\n\r\n            #endregion\r\n\r\n            #region Aliases valid for current block\r\n\r\n            private Dictionary<string, string> CurrentBlockAliases { get { return (aliases.Count > 0) ? aliases.Peek() : null; } }\r\n            private Stack<Dictionary<string, string>>/*!*/aliases = new Stack<Dictionary<string, string>>();\r\n            private void PushAliases(NamingContext/*!*/naming)\r\n            {\r\n                Debug.Assert(naming != null);\r\n                Dictionary<string, string> clrAliases = new Dictionary<string, string>(aliases.Count);\r\n                if (naming.Aliases != null)\r\n                {\r\n                    foreach (var pair in naming.Aliases)\r\n                        clrAliases.Add(pair.Key, pair.Value.ToClrNotation(0, 0));\r\n                }\r\n\r\n                this.aliases.Push(clrAliases);\r\n            }\r\n\r\n            private void PopAliases()\r\n            {\r\n                Debug.Assert(this.aliases.Count > 0);\r\n                this.aliases.Pop();\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>Contains value of the <see cref=\"Imports\"/> property</summary>\r\n            private readonly List<string> imports = new List<string>();\r\n            /// <summary>List of currently imported namespaces</summary>\r\n            protected List<string> Imports { get { return imports; } }\r\n            /// <summary>Translates sequence of PHP statements into sequence of CodeDOM objects</summary>\r\n            /// <param name=\"statements\">Statements to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint context in which the statements are placed</param>\r\n            /// <param name=\"block\">Block context in which the statemenst are placed</param>\r\n            protected void TranslateBlock(IEnumerable<Statement> /*!*/ statements, MethodContextBase /*!*/ method, /*!*/ IBlockContext block)\r\n            {\r\n                foreach (Statement statement in statements)\r\n                {\r\n                    if (statement is BlockStmt) TranslateStatement((BlockStmt)statement, method, block);\r\n                    else if (statement is EchoStmt) TranslateStatement((EchoStmt)statement, method, block);\r\n                    else if (statement is EmptyStmt) TranslateStatement((EmptyStmt)statement, method, block);\r\n                    else if (statement is ExpressionStmt) TranslateStatement((ExpressionStmt)statement, method, block);\r\n                    else if (statement is ForeachStmt) TranslateStatement((ForeachStmt)statement, method, block);\r\n                    else if (statement is ForStmt) TranslateStatement((ForStmt)statement, method, block);\r\n                    else if (statement is FunctionDecl) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_global_method_func, statement);\r\n                    else if (statement is GlobalConstDeclList) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_global_constants, statement);\r\n                    else if (statement is GlobalStmt) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_global_statement, statement);\r\n                    else if (statement is GotoStmt) TranslateStatement((GotoStmt)statement, method, block);\r\n                    else if (statement is IfStmt) TranslateStatement((IfStmt)statement, method, block);\r\n                    else if (statement is JumpStmt) TranslateStatement((JumpStmt)statement, method, block);\r\n                    else if (statement is LabelStmt) TranslateStatement((LabelStmt)statement, method, block);\r\n                    else if (statement is NamespaceDecl) TranslateNamespace((NamespaceDecl)statement, block);\r\n                    else if (statement is StaticStmt) TranslateStatement((StaticStmt)statement, method, block);\r\n                    else if (statement is SwitchStmt) TranslateStatement((SwitchStmt)statement, method, block);\r\n                    else if (statement is ThrowStmt) TranslateStatement((ThrowStmt)statement, method, block);\r\n                    else if (statement is TryStmt) TranslateStatement((TryStmt)statement, method, block);\r\n                    else if (statement is TypeDecl) TranslateTypeDecl((TypeDecl)statement, block);\r\n                    else if (statement is UnsetStmt) TranslateStatement((UnsetStmt)statement, method, block);\r\n                    else if (statement is WhileStmt) TranslateStatement((WhileStmt)statement, method, block);\r\n                    else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_statement, statement.GetType().FullName), statement);\r\n                }\r\n            }\r\n            /// <summary>Translates sequence of members of Type into sequence of CodeDOM objects</summary>\r\n            /// <param name=\"members\">Members to translate</param>\r\n            /// <param name=\"block\">Block context in which the statemenst are placed</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Some block contains unsupported construct (as goes from <see cref=\"TranslateMemberList(ConstDeclList,IBlockContext)\"/>, <see cref=\"TranslateMemberList(FieldDeclList,IBlockContext)\"/>, <see cref=\"TranslateMethod\"/>)</exception>\r\n            protected void TranslateBlock(IEnumerable<TypeMemberDecl> /*!*/ members, IBlockContext /*!*/ block)\r\n            {\r\n                foreach (TypeMemberDecl Member in members)\r\n                {\r\n                    if (Member is ConstDeclList)\r\n                    {\r\n                        TranslateMemberList((ConstDeclList)Member, block);\r\n                    }\r\n                    else if (Member is FieldDeclList)\r\n                    {\r\n                        TranslateMemberList((FieldDeclList)Member, block);\r\n                    }\r\n                    else if (Member is MethodDecl)\r\n                    {\r\n                        TranslateMethod((MethodDecl)Member, block);\r\n                    }\r\n                }\r\n            }\r\n            #endregion\r\n            #region Specialized sub-statement-level translations\r\n            /// <summary>Translates PHP <see cref=\"GenericQualifiedName\"/> into COdeDOM <see cref=\"CodeTypeReference\"/></summary>\r\n            /// <param name=\"PHPName\">PHP type name to be translated</param>\r\n            /// <param name=\"IntoFull\">True to emit fully qualified name; otherwise only last part of name will be emitted</param>\r\n            /// <returns>Representation of <paramref name=\"PHPName\"/> in CodeDOM</returns>\r\n            protected CodeTypeReference /*!*/ TranslateGenericQualifiedName(GenericQualifiedName /*!*/ PHPName, bool IntoFull)\r\n            {\r\n                CodeTypeReference ret = new CodeTypeReference(IntoFull ? getCLRName(PHPName.QualifiedName) : PHPName.QualifiedName.Name.Value);\r\n                foreach (object GParam in PHPName.GenericParams)\r\n                {\r\n                    if (GParam is GenericQualifiedName)\r\n                    {\r\n                        ret.TypeArguments.Add(TranslateGenericQualifiedName((GenericQualifiedName)GParam, true));\r\n                    }\r\n                    else if (GParam is PrimitiveTypeName)\r\n                    {\r\n                        ret.TypeArguments.Add(new CodeTypeReference(((PrimitiveTypeName)GParam).Name.Value.ToLowerInvariant()));\r\n                    }\r\n                    else\r\n                    {\r\n                        ret.TypeArguments.Add(new CodeTypeReference(QualifiedName.Object.Name.Value));\r\n                    }\r\n                }\r\n                return ret;\r\n            }\r\n            /// <summary>Translates PHP application of custom attribute into CodeDOM one</summary>\r\n            /// <param name=\"Attribute\">Attribute to translate</param>\r\n            /// <returns>CodeDom representation of <paramref name=\"Attribute\"/>. May return null if <paramref name=\"Attribute\"/> should be skipped.</returns>\r\n            /// <remarks>Property/field initialization is ignored</remarks> \r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Expression used to initialize attribute is either not supported or is not supported in this context (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            protected CodeAttributeDeclaration TranslateAttribute(CustomAttribute /*!*/ Attribute)\r\n            {\r\n                if (Attribute.QualifiedName.Name.Value == \"Export\") return null;\r\n                CodeAttributeDeclaration ret = new CodeAttributeDeclaration(getCLRName(Attribute.QualifiedName));\r\n                foreach (CodeExpression param in TranslateParams(Attribute.CallSignature.Parameters, new MethodContextBase(), null, null))\r\n                    ret.Arguments.Add(new CodeAttributeArgument(param));\r\n                foreach (NamedActualParam Param in Attribute.NamedParameters)\r\n                    ret.Arguments.Add(new CodeAttributeArgument(Param.Name.Value, TranslateExpression(Param.Expression, new MethodContextBase(), null)));\r\n                return ret;\r\n            }\r\n            /// <summary>Translates \"flat\" PHP if statement into recursive CodeDOM equivalent (like C# uses)</summary>\r\n            /// <param name=\"Conditions\">List of 'if', 'elseif' and 'else' clausules</param>\r\n            /// <param name=\"start\">Index to <paramref name=\"Conditions\"/> where to start with translation</param>\r\n            /// <param name=\"Method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"block\">Block to add statements to</param>\r\n            /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"start\"/> >= <paramref name=\"Conditions\"/>.<see cref=\"List&lt;ConditionalStmnt>.Count\">Count</see></exception>\r\n            /// <exception cref=\"ArgumentException\"><paramref name=\"start\"/> = <paramref name=\"Conditions\"/>.<see cref=\"List&lt;ConditionalStmnt>.Count\">Count</see> and <see cref=\"ConditionalStmt.Condition\"/> of current condition is null</exception>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Current condition is else condition (has <see cref=\"ConditionalStmt.Condition\"/> null) and it is not the last condition.\r\n            /// =or=\r\n            /// Expression in condition is not supported (as goes from <see cref=\"TranslateExpression\"/>)\r\n            /// </exception>\r\n            private void TranslateConditions(List<ConditionalStmt> Conditions, int start, MethodContext Method, IBlockContext block)\r\n            {\r\n                if (start >= Conditions.Count) throw new ArgumentOutOfRangeException(\"start\", Localizations.Strings.cdp_start_must_be_less_tahn_number_of_conditions);\r\n                if (start == Conditions.Count - 1 && Conditions[start].Condition == null)\r\n                    throw new ArgumentException(Localizations.Strings.cdp_unsup_else_separatelly);\r\n                if (Conditions[start].Condition == null)\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_else_last, Conditions[start].Statement);\r\n                CodeConditionStatement If = new CodeConditionStatement(TranslateExpression(Conditions[start].Condition, Method, block as IStatementInsertContext));\r\n                If.LinePragma = getPragma(GetLine(Conditions[start].Condition));\r\n                block.AddObject(If, Conditions[start].Condition);\r\n                IfStatementContext IfContext = new IfStatementContext(Method, block as BlockStatementContext, If, false, this);\r\n                TranslateBlock(new List<Statement>(new Statement[] { Conditions[start].Statement }), Method, IfContext);\r\n                if (start + 2 == Conditions.Count && Conditions[start + 1].Condition == null)\r\n                {//else\r\n                    IfStatementContext ElseContext = new IfStatementContext(Method, block as BlockStatementContext, If, true, this);\r\n                    TranslateBlock(new List<Statement>(new Statement[] { Conditions[start + 1].Statement }), Method, ElseContext);\r\n                }\r\n                else if (start + 1 < Conditions.Count)\r\n                {//'elseif' is translated as 'else if'\r\n                    IfStatementContext ElseContext = new IfStatementContext(Method, block as BlockStatementContext, If, true, this);\r\n                    TranslateConditions(Conditions, start + 1, Method, ElseContext);\r\n                }\r\n            }\r\n            #region Expressions\r\n            /// <summary>Translates PHP expression to CodeDOM expression</summary>\r\n            /// <param name=\"Expression\">Expression to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint with declaration of local variables</param>\r\n            /// <returns>CodeDOM representation of <paramref name=\"Expression\"/></returns>\r\n            /// <param name=\"IC\">Context for inserting statements when expression cannot be inlined. (Can be null)</param>\r\n            /// <remarks>Not all expressions can be translated to do exactly same thing</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// <paramref name=\"Expression\"/> is <see cref=\"RefAssignEx\"/>\r\n            /// =or=\r\n            /// <paramref name=\"Expression\"/> is <see cref=\"EmptyEx\"/>\r\n            /// =or=\r\n            /// <paramref name=\"Expression\"/> is <see cref=\"IncludingEx\"/>\r\n            /// =or=\r\n            /// <paramref name=\"Expression\"/> is of another unknown and thus unsupported type\r\n            /// =or=\r\n            /// Some sub-expression is not supported (as goes from <see cref=\"TranslateVariableUse\"/>, <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateBinaryOperation\"/>, <see cref=\"TranslateConcatExpression\"/>, <see cref=\"TranslateGenericQualifiedName\"/>, <see cref=\"TranslateTypeRef\"/>, <see cref=\"TranslateList\"/>, <see cref=\"TranslateNew\"/>, <see cref=\"TranslateShellExec\"/>, <see cref=\"TranslateUnaryOperator\"/>, <see cref=\"TranslateVarLikeConstructUse\"/>, <see cref=\"TranslateArray\"/>)\r\n            /// </exception>\r\n            protected CodeExpression /*!*/ TranslateExpression(Expression /*!*/ Expression, MethodContextBase/*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (Expression is ArrayEx)\r\n                {//array()\r\n                    return TranslateArray((ArrayEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is RefAssignEx)\r\n                {//$target =& $source\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_ref_assign, Expression);\r\n                }\r\n                else if (Expression is ValueAssignEx)\r\n                {//$target = $source\r\n                    if (Expression.Operation == Operations.AssignValue)\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateVariableUse(((ValueAssignEx)Expression).LValue, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            TranslateExpression(((ValueAssignEx)Expression).RValue, method, IC));\r\n                    else\r\n                        return TranslateBinaryOperation(new BinaryEx(Expression.Span, Expression.Operation, ((ValueAssignEx)Expression).LValue, ((ValueAssignEx)Expression).RValue), method, IC);\r\n                }\r\n                else if (Expression is BinaryEx)\r\n                {//$left  $right\r\n                    return TranslateBinaryOperation((BinaryEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is ConcatEx)\r\n                {//\"string $var string $var\"\r\n                    return TranslateConcatExpression((ConcatEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is ConditionalEx)\r\n                {//$cond ? $true : $false\r\n                    return new CodeMethodInvokeExpression(\r\n                        new CodeTypeReferenceExpression(typeof(Helper)), \"iif\",\r\n                        new CodeExpression[]{\r\n                            TranslateExpression(((ConditionalEx)Expression).CondExpr,method,IC),\r\n                            TranslateExpression(((ConditionalEx)Expression).TrueExpr,method,IC),   \r\n                            TranslateExpression(((ConditionalEx)Expression).FalseExpr,method,IC)});\r\n                }\r\n                else if (Expression is ClassConstUse)\r\n                {//class::const\r\n                    return new CodeFieldReferenceExpression(\r\n                        new CodeTypeReferenceExpression(TranslateGenericQualifiedName(((ClassConstUse)Expression).ClassName, true)),\r\n                        ((ClassConstUse)Expression).Name.Value);\r\n                }\r\n                else if (Expression is GlobalConstUse)\r\n                {//const\r\n                    switch (((GlobalConstUse)Expression).Name.ToString().ToLower())\r\n                    {\r\n                        case \"true\": return new CodePrimitiveExpression(true);\r\n                        case \"false\": return new CodePrimitiveExpression(false);\r\n                        case \"null\": return new CodePrimitiveExpression(null);\r\n                        default: return new CodeMethodInvokeExpression(\r\n                         CurrentContext, \"GetConstantValue\", new CodeExpression[]{\r\n                            new CodePrimitiveExpression(((GlobalConstUse)Expression).Name.Name.Value)});\r\n                    }\r\n                }\r\n                else if (Expression is EmptyEx)\r\n                {//\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_empty_ex, Expression);\r\n                }\r\n                else if (Expression is ExitEx)\r\n                {//exit($param)\r\n                    return new CodeMethodInvokeExpression(\r\n                        CurrentContext,\r\n                        \"Die\",\r\n                        new CodeExpression[]{\r\n                            ((ExitEx)Expression).ResulExpr  == null ? \r\n                                new CodePrimitiveExpression(null) :\r\n                                TranslateExpression(((ExitEx)Expression).ResulExpr,method,IC)});\r\n                }\r\n                else if (Expression is EvalEx)\r\n                {//eval($code)\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_eval, Expression);//TODO: Support it somehow!\r\n                }\r\n                else if (Expression is IncDecEx)\r\n                {\r\n                    if (((IncDecEx)Expression).Post)//$a++\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Helper)),\r\n                            \"ReturnFirst\",\r\n                            new CodeExpression[]{\r\n                                TranslateVariableUse(((IncDecEx)Expression).Variable,method,IC),\r\n                                new CodeBinaryOperatorExpression(\r\n                                    TranslateVariableUse(((IncDecEx)Expression).Variable,method,IC),\r\n                                    CodeBinaryOperatorType.Assign,\r\n                                    new CodeBinaryOperatorExpression(\r\n                                        TranslateVariableUse(((IncDecEx)Expression).Variable,method,IC),\r\n                                        ((IncDecEx)Expression).Inc ? CodeBinaryOperatorType.Add : CodeBinaryOperatorType.Subtract,\r\n                                        new CodePrimitiveExpression(1)))});\r\n                    else//++$a\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateVariableUse(((IncDecEx)Expression).Variable, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            new CodeBinaryOperatorExpression(\r\n                                TranslateVariableUse(((IncDecEx)Expression).Variable, method, IC),\r\n                                ((IncDecEx)Expression).Inc ? CodeBinaryOperatorType.Add : CodeBinaryOperatorType.Subtract,\r\n                                new CodePrimitiveExpression(1)));\r\n                }\r\n                else if (Expression is IncludingEx)\r\n                {//include $file\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_include_require, Expression);\r\n                }\r\n                else if (Expression is InstanceOfEx)\r\n                {//$a instanceof Type \r\n                    /*return new CodeMethodInvokeExpression(\r\n                        new CodeMethodInvokeExpression(\r\n                            TranslateExpression(((InstanceOfEx)Expression).Expression,method,IC),\r\n                            \"GetType\",new CodeExpression[]{}),\r\n                        \"Equals\",\r\n                        new CodeExpression[]{\r\n                            new CodeTypeOfExpression(\r\n                                TranslateTypeRef(((InstanceOfEx)Expression).ClassNameRef))});*/\r\n                    return new CodeMethodInvokeExpression(\r\n                        new CodeTypeOfExpression(TranslateTypeRef(((InstanceOfEx)Expression).ClassNameRef, method)),\r\n                        \"IsInstanceOfType\",\r\n                        new CodeExpression[] { TranslateExpression(((InstanceOfEx)Expression).Expression, method, IC) });\r\n                }\r\n                else if (Expression is IssetEx)\r\n                {//isset($var)\r\n                    return TranslateIsSet((IssetEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is ListEx)\r\n                {//list($v1,$v2) = $array\r\n                    return TranslateList((ListEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is Literal)\r\n                {\r\n                    return new CodePrimitiveExpression(((Literal)Expression).ValueObj);\r\n                }\r\n                else if (Expression is NewEx)\r\n                {//new Instance()\r\n                    return TranslateNew((NewEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is PseudoConstUse)\r\n                {//__FILE__\r\n                    return Translate__const((PseudoConstUse)Expression);\r\n                }\r\n                else if (Expression is ShellEx)\r\n                {//`$command`\r\n                    return TranslateShellExec((ShellEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is TypeOfEx)\r\n                {\r\n                    return new CodeTypeOfExpression(TranslateTypeRef(((TypeOfEx)Expression).ClassNameRef, method));\r\n                }\r\n                else if (Expression is UnaryEx)\r\n                {// $a\r\n                    return TranslateUnaryOperator((UnaryEx)Expression, method, IC);\r\n                }\r\n                else if (Expression is VarLikeConstructUse)\r\n                {//$a\r\n                    return TranslateVarLikeConstructUse((VarLikeConstructUse)Expression, method, IC);\r\n                }\r\n                else\r\n                {\r\n                    throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unsup_ex, Expression.GetType().FullName), Expression);\r\n                }\r\n            }\r\n            #region Sub-expression constructs\r\n            /// <summary>Translates PHP binary operator to CodeDOM binary operator</summary>\r\n            /// <param name=\"op\">Operator to translate (make sure that it is binary operator)</param>\r\n            /// <returns>CodeDOM equivalent of <paramref name=\"op\"/></returns>\r\n            /// <remarks>Translates only binary operators, and only some of them - only thos rhat have equivalent in CodeDOM</remarks>\r\n            /// <param name=\"element\">Element to thrown <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"op\"/> is either not a binary operator or it is not supported by this function</exception>\r\n            protected CodeBinaryOperatorType TranslateBinaryOperator(Operations op, LangElement /*!*/ element)\r\n            {\r\n                switch (op)\r\n                {\r\n                    case Operations.Add: return CodeBinaryOperatorType.Add;\r\n                    case Operations.And: return CodeBinaryOperatorType.BooleanAnd;\r\n                    case Operations.BitAnd: return CodeBinaryOperatorType.BitwiseAnd;\r\n                    case Operations.BitOr: return CodeBinaryOperatorType.BitwiseOr;\r\n                    case Operations.Concat: return CodeBinaryOperatorType.Add;\r\n                    case Operations.Div: return CodeBinaryOperatorType.Divide;\r\n                    case Operations.Equal: return CodeBinaryOperatorType.ValueEquality;\r\n                    case Operations.GreaterThan: return CodeBinaryOperatorType.GreaterThan;\r\n                    case Operations.GreaterThanOrEqual: return CodeBinaryOperatorType.GreaterThanOrEqual;\r\n                    case Operations.Identical: return CodeBinaryOperatorType.IdentityEquality;\r\n                    case Operations.LessThan: return CodeBinaryOperatorType.LessThan;\r\n                    case Operations.LessThanOrEqual: return CodeBinaryOperatorType.LessThanOrEqual;\r\n                    //case Operations.Minus: return CodeBinaryOperatorType.Subtract;\r\n                    case Operations.Mod: return CodeBinaryOperatorType.Modulus;\r\n                    case Operations.Mul: return CodeBinaryOperatorType.Multiply;\r\n                    case Operations.NotIdentical: return CodeBinaryOperatorType.IdentityInequality;\r\n                    case Operations.Or: return CodeBinaryOperatorType.BooleanOr; ;\r\n                    //case Operations.Plus: return CodeBinaryOperatorType.Add;\r\n                    case Operations.Sub: return CodeBinaryOperatorType.Subtract;\r\n                    case Operations.Pow:\r\n                    default: throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unsup_binop, op, (int)op), element);\r\n                }\r\n            }\r\n            /// <summary>Translates PHP assign shortcut operator to CodeDOM non-assign operator this operator is shortcut to</summary>\r\n            /// <param name=\"op\">Operator to be translated</param>\r\n            /// <returns>Translated operator</returns>\r\n            /// <param name=\"element\">Element to thrown <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n            ///<exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"op\"/> is not of supported operators (not all PHP assign shortcuts are supported by this function)</exception>\r\n            protected CodeBinaryOperatorType TranslateAssignOperatorToNonAssign(Operations op, LangElement /*!*/ element)\r\n            {\r\n                switch (op)\r\n                {\r\n                    case Operations.AssignAdd: return CodeBinaryOperatorType.Add;\r\n                    case Operations.AssignAnd: return CodeBinaryOperatorType.BooleanAnd;\r\n                    case Operations.AssignAppend: return CodeBinaryOperatorType.Add;\r\n                    case Operations.AssignDiv: return CodeBinaryOperatorType.Divide;\r\n                    case Operations.AssignMod: return CodeBinaryOperatorType.Modulus;\r\n                    case Operations.AssignMul: return CodeBinaryOperatorType.Multiply;\r\n                    case Operations.AssignOr: return CodeBinaryOperatorType.BitwiseOr;\r\n                    case Operations.AssignSub: return CodeBinaryOperatorType.Subtract;\r\n                    case Operations.AssignPow:\r\n                    default: throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unsup_assign, op, (int)op), element);\r\n                }\r\n            }\r\n            #endregion\r\n            #region General expressions\r\n            /// <summary>Translates PHP binary operation into as close as possible equivalent in CodeDOM</summary>\r\n            /// <param name=\"Operation\">Operation to translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for adding statements</param>\r\n            /// <returns>Operation translated</returns>\r\n            /// <remarks>\r\n            /// Some operations are not translated 1:1.\r\n            /// If operand non-1:1-translated operation has side effect, the side effect can occure multiple times!\r\n            /// Namely: Assign shotrcuts (/=, .=, *=, ...) and boolean Xor.\r\n            /// Some operations are translate as core function calls instead of operators (bitwise xor, shifts)\r\n            /// </remarks>\r\n            protected CodeExpression TranslateBinaryOperation(BinaryEx /*!*/ Operation, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                switch (Operation.Operation)\r\n                {\r\n                    case Operations.AssignAdd:\r\n                    case Operations.AssignAnd:\r\n                    case Operations.AssignAppend:\r\n                    case Operations.AssignDiv:\r\n                    case Operations.AssignMod:\r\n                    case Operations.AssignMul:\r\n                    case Operations.AssignPow:\r\n                    case Operations.AssignOr:\r\n                    case Operations.AssignSub://Left = (Left  Right)\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(Operation.LeftExpr, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            new CodeBinaryOperatorExpression(\r\n                                TranslateExpression(Operation.LeftExpr, method, IC),\r\n                                TranslateAssignOperatorToNonAssign(Operation.Operation, Operation),\r\n                                TranslateExpression(Operation.RightExpr, method, IC)));\r\n                    //TODO: What does it mean? case Operations.AssignPrepend:\r\n                    case Operations.AssignShiftLeft:\r\n                    case Operations.AssignShiftRight://Left = Operators.AssignShiftX(Left, Right)\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(Operation.LeftExpr, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            new CodeMethodInvokeExpression(\r\n                                new CodeTypeReferenceExpression(typeof(Operators)),\r\n                                Operation.Operation == Operations.AssignShiftLeft ? \"ShiftLeft\" : \"ShiftRight\",\r\n                                new CodeExpression[]{\r\n                                    TranslateExpression(Operation.LeftExpr,method,IC),\r\n                                    TranslateExpression(Operation.RightExpr,method,IC)}));\r\n                    case Operations.AssignValue:\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(Operation.LeftExpr, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            TranslateExpression(Operation.RightExpr, method, IC));\r\n                    case Operations.AssignXor://Left = Operators.BitOperation(Left, Right, BitOp.Xor)\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(Operation.LeftExpr, method, IC),\r\n                            CodeBinaryOperatorType.Assign,\r\n                            new CodeMethodInvokeExpression(\r\n                                new CodeTypeReferenceExpression(typeof(Operators)),\r\n                                \"BitOperation\",\r\n                                new CodeExpression[]{\r\n                                    TranslateExpression(Operation.LeftExpr,method,IC),\r\n                                    TranslateExpression(Operation.RightExpr,method,IC),\r\n                                    new CodeFieldReferenceExpression(\r\n                                        new CodeTypeReferenceExpression(typeof(Operators.BitOp)),\r\n                                        \"Xor\")}));\r\n                    case Operations.BitXor:\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Operators)),\r\n                            \"BitOperation\",\r\n                            new CodeExpression[]{\r\n                                TranslateExpression(Operation.LeftExpr,method,IC),\r\n                                TranslateExpression(Operation.RightExpr,method,IC),\r\n                                new CodeFieldReferenceExpression(\r\n                                    new CodeTypeReferenceExpression(typeof(Operators.BitOp)),\r\n                                    \"Xor\")});\r\n                    case Operations.NotEqual://(Left == Right) == False\r\n                        return new CodeBinaryOperatorExpression(\r\n                            new CodeBinaryOperatorExpression(\r\n                                TranslateExpression(Operation.LeftExpr, method, IC),\r\n                                CodeBinaryOperatorType.ValueEquality,\r\n                                TranslateExpression(Operation.RightExpr, method, IC)),\r\n                            CodeBinaryOperatorType.ValueEquality,\r\n                            new CodePrimitiveExpression(false));\r\n                    case Operations.ShiftLeft:\r\n                    case Operations.ShiftRight:\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Operators)),\r\n                            Operation.Operation == Operations.ShiftLeft ? \"ShiftLeft\" : \"ShiftRight\",\r\n                            new CodeExpression[]{\r\n                                TranslateExpression(Operation.LeftExpr,method,IC),\r\n                                TranslateExpression(Operation.RightExpr,method,IC)});\r\n                    case Operations.Xor://(Left Or Right) And ((Left And Right) == False)\r\n                        return new CodeBinaryOperatorExpression(\r\n                            new CodeBinaryOperatorExpression(\r\n                                TranslateExpression(Operation.LeftExpr, method, IC),\r\n                                CodeBinaryOperatorType.BooleanOr,\r\n                                TranslateExpression(Operation.RightExpr, method, IC)),\r\n                            CodeBinaryOperatorType.BooleanAnd,\r\n                            new CodeBinaryOperatorExpression(\r\n                                new CodeBinaryOperatorExpression(\r\n                                    TranslateExpression(Operation.LeftExpr, method, IC),\r\n                                    CodeBinaryOperatorType.BooleanAnd,\r\n                                    TranslateExpression(Operation.RightExpr, method, IC)),\r\n                                CodeBinaryOperatorType.ValueEquality,\r\n                                new CodePrimitiveExpression(false)));\r\n                    default:\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(Operation.LeftExpr, method, IC),\r\n                            TranslateBinaryOperator(Operation.Operation, Operation),\r\n                            TranslateExpression(Operation.RightExpr, method, IC));\r\n                }\r\n            }\r\n            /// <summary>Translates unary operator from PHP to CodeDOM</summary>\r\n            /// <param name=\"op\">Operator to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for defining local variables</param>\r\n            /// <param name=\"IC\">Context for adding statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <remarks>Since there is no support for unary operators in CodeDOM, translations are not 1:1.</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Unknown unary operator =or= Sub-expression is not supported (as goes from <see cref=\"TranslateExpression\"/>)</exception>\r\n            CodeExpression TranslateUnaryOperator(UnaryEx op, MethodContextBase method, IStatementInsertContext IC)\r\n            {\r\n                Type type = null;\r\n                switch (op.Operation)\r\n                {\r\n                    case Operations.Plus:\r\n                        return TranslateExpression(op.Expr, method, IC);\r\n                    case Operations.Minus:\r\n                        return new CodeBinaryOperatorExpression(\r\n                            new CodePrimitiveExpression(-1), CodeBinaryOperatorType.Multiply,\r\n                            TranslateExpression(op.Expr, method, IC));\r\n                    case Operations.LogicNegation:\r\n                        return new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(op.Expr, method, IC),\r\n                            CodeBinaryOperatorType.ValueEquality,\r\n                            new CodePrimitiveExpression(false));\r\n                    case Operations.BitNegation:\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Operators)),\r\n                            \"BitNot\",\r\n                            new CodeExpression[] { TranslateExpression(op.Expr, method, IC) });\r\n                    case Operations.Int8Cast: type = typeof(SByte); goto case Operations.BoolCast;\r\n                    case Operations.Int16Cast: type = typeof(Int16); goto case Operations.BoolCast;\r\n                    case Operations.Int32Cast: type = typeof(Int32); goto case Operations.BoolCast;\r\n                    case Operations.Int64Cast: type = typeof(Int64); goto case Operations.BoolCast;\r\n                    case Operations.UInt8Cast: type = typeof(Byte); goto case Operations.BoolCast;\r\n                    case Operations.UInt16Cast: type = typeof(UInt16); goto case Operations.BoolCast;\r\n                    case Operations.UInt32Cast: type = typeof(UInt32); goto case Operations.BoolCast;\r\n                    case Operations.UInt64Cast: type = typeof(UInt64); goto case Operations.BoolCast;\r\n                    case Operations.DecimalCast: type = typeof(Decimal); goto case Operations.BoolCast;\r\n                    case Operations.DoubleCast: type = typeof(Double); goto case Operations.BoolCast;\r\n                    case Operations.FloatCast: type = typeof(Single); goto case Operations.BoolCast;\r\n                    case Operations.UnicodeCast:\r\n                    case Operations.StringCast: type = typeof(String); goto case Operations.BoolCast;\r\n                    case Operations.ObjectCast: type = typeof(Object); goto case Operations.BoolCast;\r\n                    case Operations.ArrayCast: type = typeof(PhpArray); goto case Operations.BoolCast;\r\n                    case Operations.BoolCast: type = type == null ? typeof(Boolean) : type;\r\n                        return new CodeCastExpression(type, TranslateExpression(op.Expr, method, IC));\r\n                    case Operations.UnsetCast:\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Helper)), \"ReturnNull\",\r\n                            new CodeExpression[] { TranslateExpression(op.Expr, method, IC) });\r\n                    case Operations.Clone:\r\n                        return new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(PhpVariable)),\r\n                            \"Copy\",\r\n                            new CodeExpression[]{\r\n                                TranslateExpression(op.Expr,method,IC),\r\n                                new CodeFieldReferenceExpression(\r\n                                    new CodeTypeReferenceExpression(typeof(CopyReason)),\"Assigned\")});\r\n                    case Operations.Print://Helper.Print(Expr,<context>)\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Helper)), \"Print\",\r\n                            new CodeExpression[]{\r\n                                TranslateExpression(op.Expr,method,IC),\r\n                                CurrentContext});\r\n                    case Operations.AtSign:\r\n                        return new CodeMethodInvokeExpression(\r\n                            new CodeTypeReferenceExpression(typeof(Helper)), \"NoError\",\r\n                            new CodeExpression[] { TranslateExpression(op.Expr, method, IC) });\r\n                    default:\r\n                        throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unsup_unop, op.Operation), op);\r\n                }\r\n            }\r\n            /// <summary>Translates call of PHP constructor to CodeDOM</summary>\r\n            /// <param name=\"New\">CTor to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">COntext for adding statements</param>\r\n            /// <returns>Translated sxpression</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">One of sub-expressions is not supported (as goes from <see cref=\"TranslateTypeRef\"/>, <see cref=\"TranslateParams\"/>)</exception>\r\n            protected CodeExpression TranslateNew(NewEx New, MethodContextBase method, IStatementInsertContext IC)\r\n            {\r\n                if (LooksLikeDelegate(New))\r\n                    return TranslateDelegateCreation(New, method, IC);\r\n                else\r\n                {\r\n                    var tr = TranslateTypeRef(New.ClassNameRef, method);\r\n                    Type Type = GetType(tr);\r\n                    ConstructorInfo CTor = null;\r\n                    if (Type != null)\r\n                    {\r\n                        var cs = Type.GetConstructors();\r\n                        if (cs.Length == 1) CTor = cs[0];\r\n                        else\r\n                            foreach (ConstructorInfo c in cs)\r\n                                if (c.GetParameters().Length == New.CallSignature.Parameters.Length)\r\n                                {\r\n                                    CTor = c;\r\n                                    break;\r\n                                }\r\n                    }\r\n                    return new CodeObjectCreateExpression(\r\n                        tr,\r\n                        TranslateParams(New.CallSignature.Parameters, method, IC, CTor.GetParameters()));\r\n                }\r\n            }\r\n            /// <summary>Translates delegate creation from PHP to CodeDOM</summary>\r\n            /// <param name=\"New\">Expression used to create delegate.\r\n            /// Delegate must be created using <see cref=\"NewEx\"/> with only one parameter type <see cref=\"ArrayEx\"/> that consits of 2 <see cref=\"ValueItem\"/>-s without index where <see cref=\"ValueItem.ValueExpr\">ValueExpr</see> of 2nd item is <see cref=\"StringLiteral\"/>.</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables.</param>\r\n            /// <param name=\"IC\">Context for inserting statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// <paramref name=\"New\"/> does not obey rules menitoned above.\r\n            /// =or=\r\n            /// Expression used as delegate's object is not supported (see <see cref=\"TranslateExpression\"/>). \r\n            /// </exception>\r\n            protected CodeDelegateCreateExpression TranslateDelegateCreation(NewEx New, MethodContextBase method, IStatementInsertContext IC)\r\n            {\r\n                try\r\n                {\r\n                    var expr = New.CallSignature.Parameters[0].Expression;\r\n\r\n                    return new CodeDelegateCreateExpression(\r\n                        TranslateTypeRef(New.ClassNameRef, method),\r\n                        (((ValueItem)((ArrayEx)expr).Items[0]).ValueExpr is StringLiteral)\r\n                            ? new CodeTypeReferenceExpression(((string)((StringLiteral)((ValueItem)((ArrayEx)expr).Items[0]).ValueExpr).Value).Replace(QualifiedName.Separator, '.'))\r\n                            : TranslateExpression(((ValueItem)((ArrayEx)expr).Items[0]).ValueExpr, method, IC),\r\n                        (string)((StringLiteral)((ValueItem)((ArrayEx)expr).Items[1]).ValueExpr).Value);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_unsup_delegate_creartion, ex, New);\r\n                }\r\n            }\r\n            /// <summary>Gets name of variable from <see cref=\"DirectVarUse\"/></summary>\r\n            /// <param name=\"dvu\"><see cref=\"DirectVarUse\"/> to be translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint fro declaring local variables</param>\r\n            /// <returns>Name of variable used</returns>\r\n            protected string TranslateDirectVarUse(DirectVarUse /*!*/ dvu, MethodContextBase /*!*/ method)\r\n            {\r\n                CodeExpression ret = TranslateVariableUse(dvu, method, null);\r\n                if (ret is CodeVariableReferenceExpression)\r\n                    return ((CodeVariableReferenceExpression)ret).VariableName;\r\n                else\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_CodeVariableReferenceExpression_excpected, dvu);\r\n            }\r\n            /// <summary>Translate use of variable in PHP into CodeDOM</summary>\r\n            /// <param name=\"use\"><see cref=\"VariableUse\"/> to be translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Block for inserting aditional statements</param>\r\n            /// <returns>Expression containing access to variale</returns>\r\n            /// <remarks>Not each kind of access to variable in PHP can be repsesented in CodeDOM. Namely indirect accesses cannot. They are represented via objects from <see cref=\"Helper\"/> class. This is done only for CodeDOM pusposes. So translated indirect access cannot be used in runtime, because it is not implemented (by now).</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// <paramref name=\"use\"/> is neither of <see cref=\"ItemUse\"/> <see cref=\"DirectVarUse\"/>, <see cref=\"IndirectVarUse\"/>, <see cref=\"DirectStFldUse\"/>, <see cref=\"DirectStFldUse\"/>\r\n            /// =or=\r\n            /// some sub-construct is not supported (as comes from <see cref=\"TranslateVariableUse\"/>, <see cref=\"TranslateVarLikeConstructUse\"/>, <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateGenericQualifiedName\"/>, <see cref=\"TranslateDirectVarUse(DirectVarUse,MethodContextBase)\"/>, <see cref=\"TranslateDirectStFldUse\"/>)\r\n            /// =or=\r\n            /// Attempt to use static variable inside method that is not member of class.\r\n            /// </exception>\r\n            protected CodeExpression/*!*/ TranslateVariableUse(VariableUse /*!*/ use, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (use is ItemUse)\r\n                {                                         //$var[$index]\r\n                    return new CodeArrayIndexerExpression(TranslateVarLikeConstructUse(((ItemUse)use).Array, method, IC), TranslateExpression(((ItemUse)use).Index, method, IC));\r\n                }\r\n                else if (use is DirectVarUse && use.IsMemberOf == null)\r\n                {   //$var\r\n                    if (((DirectVarUse)use).VarName.Value == \"this\")\r\n                        return new CodeThisReferenceExpression();\r\n                    else\r\n                        if (method is MethodContext && ((MethodContext)method).StaticVariables.ContainsKey(((DirectVarUse)use).VarName.Value))\r\n                            if (((MethodContext)method).Parent is TypeContext)\r\n                                return new CodeFieldReferenceExpression(\r\n                                    new CodeTypeReferenceExpression(((TypeContext)((MethodContext)method).Parent).Context.Name),\r\n                                        ((MethodContext)method).StaticVariables[((DirectVarUse)use).VarName.Value]);\r\n                            else\r\n                                throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_static_var, use);\r\n                        else\r\n                        {\r\n                            string name = ((DirectVarUse)use).VarName.Value;\r\n                            if (method.CanAdd)\r\n                            {\r\n                                CodeVariableDeclarationStatement var;\r\n                                try\r\n                                {\r\n                                    var = method.Add(ref name);\r\n                                }\r\n                                catch (NotSupportedException ex)\r\n                                {\r\n                                    throw new PhpToCodeDomNotSupportedException(ex.Message, ex, use);\r\n                                }\r\n                                if (var != null)\r\n                                    var.LinePragma = getPragma(GetLine(use));\r\n                            }\r\n                            return new CodeVariableReferenceExpression(name);\r\n                        }\r\n                }\r\n                else if (use is DirectVarUse)\r\n                {                             //$obj->var\r\n                    return TranslateDirectVarUse((DirectVarUse)use, method, IC);\r\n                }\r\n                else if (use is IndirectVarUse && use.IsMemberOf == null)\r\n                { //$$var\r\n                    return new CodePropertyReferenceExpression(\r\n                        new CodeObjectCreateExpression(new CodeTypeReference(\"PHP.Core.CodeDom.Helper.IndirectVarAccess\"), new CodeExpression[]{\r\n                            TranslateExpression(((IndirectVarUse)use).VarNameEx,method,IC)}),\r\n                            \"Access\");\r\n                }\r\n                else if (use is IndirectVarUse)\r\n                {                           //$obj->$var\r\n                    return new CodePropertyReferenceExpression(\r\n                        new CodeObjectCreateExpression(new CodeTypeReference(\"PHP.Core.CodeDom.Helper.IndirectInstFldAccess\"), new CodeExpression[]{\r\n                            TranslateVarLikeConstructUse(use.IsMemberOf,method,IC),\r\n                            TranslateExpression(((IndirectVarUse)use).VarNameEx,method,IC)}),\r\n                            \"Access\");\r\n                }\r\n                else if (use is DirectStFldUse)\r\n                {                           //class::$var\r\n                    return TranslateDirectStFldUse((DirectStFldUse)use, method, IC);\r\n                }\r\n                else if (use is IndirectStFldUse)\r\n                {                         //class::$$var\r\n                    return new CodePropertyReferenceExpression(\r\n                        new CodeObjectCreateExpression(new CodeTypeReference(\"PHP.Core.CodeDom.Helper.IndirectStFldAccess\"), new CodeExpression[]{\r\n                            new CodeTypeOfExpression(TranslateGenericQualifiedName(((IndirectStFldUse)use).TypeName,true)),\r\n                            TranslateExpression(((IndirectStFldUse)use).FieldNameExpr,method,IC)}),\r\n                        \"Access\");\r\n                }\r\n                else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_var_kind, use.GetType().FullName), use);\r\n            }\r\n            /// <summary>Translates <see cref=\"DirectVarUse\"/> ($obj->var) to <see cref=\"CodeFieldReferenceExpression\"/> or <see cref=\"CodePropertyReferenceExpression\"/></summary>\r\n            /// <param name=\"use\">A <see cref=\"DirectVarUse\"/> to translate. <paramref name=\"use\"/>.<see cref=\"PHP.Core.AST.VarLikeConstructUse.IsMemberOf\">IsMemberOf</see> must not be null.</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Block for inserting aditional statements</param>\r\n            /// <returns><see cref=\"CodeFieldReferenceExpression\"/> or <see cref=\"CodePropertyReferenceExpression\"/></returns>\r\n            /// <exception cref=\"NullReferenceException\"><paramref name=\"use\"/>.<see cref=\"PHP.Core.AST.VarLikeConstructUse.IsMemberOf\">IsMemberOf</see> is null (it represents $var instead of $obj->var)</exception>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Sub-construct is not supported (see <see cref=\"TranslateVarLikeConstructUse\"/>)</exception>\r\n            protected CodeExpression TranslateDirectVarUse(DirectVarUse /*!*/ use, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (use.IsMemberOf == null) throw new NullReferenceException(Localizations.Strings.cdp_unsup_null);\r\n                if (IsProperty(use, method))\r\n                    return new CodePropertyReferenceExpression(TranslateVarLikeConstructUse(use.IsMemberOf, method, IC), use.VarName.Value);\r\n                else\r\n                    return new CodeFieldReferenceExpression(TranslateVarLikeConstructUse(use.IsMemberOf, method, IC), use.VarName.Value);\r\n            }\r\n            /// <summary>Translates <see cref=\"DirectStFldUse\"/> (class::$var) to <see cref=\"CodeFieldReferenceExpression\"/> or <see cref=\"CodePropertyReferenceExpression\"/></summary>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Block for inserting aditional statements</param>\r\n            /// <param name=\"use\">A <see cref=\"DirectStFldUse\"/> to translate</param>\r\n            /// <returns><see cref=\"CodeFieldReferenceExpression\"/> or <see cref=\"CodePropertyReferenceExpression\"/></returns>\r\n            protected CodeExpression TranslateDirectStFldUse(DirectStFldUse /*!*/ use, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (IsProperty(use))\r\n                    return new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(TranslateGenericQualifiedName(use.TypeName, true)), use.PropertyName.Value);\r\n                else\r\n                    return new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(TranslateGenericQualifiedName(use.TypeName, true)), use.PropertyName.Value);\r\n            }\r\n            /// <summary>Attempts to get method being called</summary>\r\n            /// <param name=\"target\">Object method is invoked on</param>\r\n            /// <param name=\"name\">GetUserEntryPoint name</param>\r\n            /// <param name=\"parcount\">Number of parameters</param>\r\n            /// <param name=\"context\">Context</param>\r\n            /// <returns>If found returns method of target object with given name and possibly same number of parameters; null otherwise</returns>\r\n            private MethodInfo GetHintMethod(CodeExpression target, string name, int parcount, MethodContextBase context)\r\n            {\r\n                var extype = GetTypeOfExpression(target, context);\r\n                Type ttype;\r\n                if (extype != null && (ttype = GetType(extype)) != null)\r\n                {\r\n                    List<MethodInfo> methods = new List<MethodInfo>();\r\n                    foreach (var m in ttype.GetMethods())\r\n                        if (m.Name.ToLower() == name.ToLower())\r\n                            methods.Add(m);\r\n                    if (methods.Count == 1) return methods[0];\r\n                    else foreach (MethodInfo m in methods)\r\n                            if (m.GetParameters().Length == parcount)\r\n                                return m;\r\n                    if (methods.Count > 0) return methods[0];\r\n                }\r\n                return null;\r\n            }\r\n            /// <summary>Translates <see cref=\"VarLikeConstructUse\"/> to CodeDOM <see cref=\"CodeExpression\"/>.</summary>\r\n            /// <param name=\"use\"><see cref=\"VarLikeConstructUse\"/> to translate</param>\r\n            /// <param name=\"method\">method for declaring variables</param>\r\n            /// <param name=\"IC\">Blosk for inserting aditional statements</param>\r\n            /// <returns><see cref=\"CodeExpression\"/> that repsesents <paramref name=\"use\"/></returns>\r\n            /// <remarks>\r\n            /// This method deals with method calls. Only direct method calls are fully implemented. Indirect calls are implemented via helper method of <see cref=\"Helper\"/>. Semantic of helper method is not exactly the same as of PHP indirect call. Type parameters for indirect calls are ignored!\r\n            /// Variable usages are passed to <see cref=\"TranslateVariableUse\"/>.\r\n            /// </remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Attempt to translate call of instance method without instance specified.\r\n            /// =or=\r\n            /// <paramref name=\"use\"/> is neither of <see cref=\"DirectFcnCall\"/>, <see cref=\"IndirectFcnCall\"/>, <see cref=\"StaticMtdCall\"/>, <see cref=\"IndirectStMtdCall\"/>, <see cref=\"VariableUse\"/>\r\n            /// =or=\r\n            /// Sub-construct is not supported (as goes from <see cref=\"TranslateVarLikeConstructUse\"/>, <see cref=\"TranslateParams\"/>, <see cref=\"TranslateTypeRef\"/>, <see cref=\"TranslateVariableUse\"/>)\r\n            /// </exception>\r\n            protected CodeExpression /*!*/TranslateVarLikeConstructUse(VarLikeConstructUse /*!*/use, MethodContextBase /*!*/method, IStatementInsertContext IC)\r\n            {\r\n                if (use is DirectFcnCall)\r\n                {\r\n                    string name = ((DirectFcnCall)use).QualifiedName.Name.Value;\r\n                    \r\n                    if (use.IsMemberOf == null)\r\n                    {\r\n                        //throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_nonobj_func, use);\r\n                        /*CodeMethodInvokeExpression reti = new CodeMethodInvokeExpression();\r\n                        reti.GetUserEntryPoint = new CodeMethodReferenceExpression();\r\n                        reti.GetUserEntryPoint.TargetObject = new CodeTypeReferenceExpression(\"\");\r\n                        reti.GetUserEntryPoint.MethodName = ((DirectFcnCall)use).QualifiedName.Name.Value;\r\n                        reti.Parameters.AddRange(TranslateParams(((DirectFcnCall)use).CallSignature.Parameters, method, IC));\r\n                        return reti;*/\r\n\r\n                        CodeMethodInvokeExpression reti = new CodeMethodInvokeExpression(\r\n                            CurrentContext, \"Call\",\r\n                            new CodeExpression[] { new CodePrimitiveExpression(name) });\r\n\r\n                        reti.Parameters.AddRange(TranslateParams(((DirectFcnCall)use).CallSignature.Parameters, method, IC, null));\r\n                        return reti;\r\n                    }\r\n                    else\r\n                    {\r\n                        var target = TranslateVarLikeConstructUse(use.IsMemberOf, method, IC);\r\n                        MethodInfo cmethod = GetHintMethod(target, name, ((DirectFcnCall)use).CallSignature.Parameters.Length, method);\r\n                        CodeMethodInvokeExpression ret = new CodeMethodInvokeExpression(\r\n                            target, name,\r\n                            TranslateParams(((DirectFcnCall)use).CallSignature.Parameters, method, IC, cmethod == null ? null : cmethod.GetParameters())\r\n                            );\r\n                        foreach (TypeRef GPar in ((DirectFcnCall)use).CallSignature.GenericParams)\r\n                            ret.Method.TypeArguments.Add(TranslateTypeRef(GPar, method));\r\n                        return ret;\r\n                    }\r\n                }\r\n                else if (use is IndirectFcnCall)\r\n                {\r\n                    if (use.IsMemberOf == null)\r\n                    {\r\n                        CodeMethodInvokeExpression reti = new CodeMethodInvokeExpression(CurrentContext, \"Call\",\r\n                            new CodeExpression[]{\r\n                                new CodeCastExpression(typeof(string),TranslateExpression(((IndirectFcnCall)use).NameExpr,method,IC))});\r\n                        reti.Parameters.AddRange(\r\n                            TranslateParams(((IndirectFcnCall)use).CallSignature.Parameters, method, IC, null));\r\n                        return reti;\r\n                    }\r\n                    List<CodeExpression> Params = new List<CodeExpression>(2 + ((IndirectFcnCall)use).CallSignature.Parameters.Length);\r\n                    Params.Add(TranslateVarLikeConstructUse(use.IsMemberOf, method, IC));\r\n                    Params.Add(TranslateExpression(((IndirectFcnCall)use).NameExpr, method, IC));\r\n                    Params.AddRange(TranslateParams(((IndirectFcnCall)use).CallSignature.Parameters, method, IC, null));\r\n                    CodeMethodInvokeExpression ret = new CodeMethodInvokeExpression(\r\n                        new CodeTypeReferenceExpression(typeof(Helper)), \"CallIndirectInstance\",\r\n                        Params.ToArray());\r\n                    //Note: Generic parameters are simply ignored\r\n                    return ret;\r\n                }\r\n                else if (use is DirectStMtdCall)\r\n                {\r\n                    var ttype = new CodeTypeReferenceExpression(TranslateGenericQualifiedName(((DirectStMtdCall)use).ClassName, true));\r\n                    string name = ((DirectStMtdCall)use).MethodName.Value;\r\n                    MethodInfo cmethod = GetHintMethod(ttype, name, ((DirectStMtdCall)use).CallSignature.Parameters.Length, method);\r\n                    CodeMethodInvokeExpression ret = new CodeMethodInvokeExpression(\r\n                        ttype,\r\n                        ((DirectStMtdCall)use).MethodName.Value,\r\n                        TranslateParams(((DirectStMtdCall)use).CallSignature.Parameters, method, IC, cmethod == null ? null : cmethod.GetParameters()));\r\n                    foreach (TypeRef GPar in ((StaticMtdCall)use).CallSignature.GenericParams)\r\n                        ret.Method.TypeArguments.Add(TranslateTypeRef(GPar, method));\r\n                    return ret;\r\n                }\r\n                else if (use is IndirectStMtdCall)\r\n                {\r\n                    List<CodeExpression> Params = new List<CodeExpression>(2 + ((IndirectStMtdCall)use).CallSignature.Parameters.Length);\r\n                    Params.Add(new CodeTypeOfExpression(TranslateGenericQualifiedName(((IndirectStMtdCall)use).ClassName, true)));\r\n                    Params.Add(TranslateVariableUse(((IndirectStMtdCall)use).MethodNameVar, method, IC));\r\n                    Params.AddRange(TranslateParams(((IndirectStMtdCall)use).CallSignature.Parameters, method, IC, null));\r\n                    CodeMethodInvokeExpression ret = new CodeMethodInvokeExpression(\r\n                        new CodeTypeReferenceExpression(typeof(Helper)), \"CallIndirectStatic\",\r\n                        Params.ToArray());\r\n                    return ret;\r\n                    //Note: Generic parameters are simply ignored\r\n                }\r\n                else if (use is VariableUse)\r\n                {\r\n                    return TranslateVariableUse((VariableUse)use, method, IC);\r\n                }\r\n                else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_varlike_construct_use, use.GetType().FullName), use);\r\n            }\r\n            /// <summary>Translates list of PHP actual parameters of method to list of CodeDOM expressions</summary>\r\n            /// <param name=\"Params\">Parameters to be translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <returns>Array of expressions translated from PHP to CodeDOM for each parameter</returns>\r\n            /// <param name=\"TargetSignature\">Parameter hints. Size doesn't have to match size of <paramref name=\"Params\"/>. Can be even empty or null.</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">May be thrown by <see cref=\"TranslateParam\"/>.</exception>\r\n            protected CodeExpression[] TranslateParams(IList<ActualParam> Params, MethodContextBase method, IStatementInsertContext IC, ParameterInfo[] TargetSignature)\r\n            {\r\n                if (TargetSignature == null) TargetSignature = new ParameterInfo[] { };\r\n                List<CodeExpression> ret = new List<CodeExpression>(Params.Count);\r\n                int i = 0;\r\n                foreach (ActualParam Param in Params)\r\n                {\r\n                    ret.Add(TranslateParam(Param, method, IC, TargetSignature.Length > i ? TargetSignature[i] : null));\r\n                    i += 1;\r\n                }\r\n                return ret.ToArray();\r\n            }\r\n            /// <summary>Translates actual parameter of method from PHP to CodeDOM</summary>\r\n            /// <param name=\"Param\">Parameter to be translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint fro declaring variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <param name=\"Hint\">May contain casting hint for parameter. Currently utilized only with arrays.</param> \r\n            /// <returns>Expression thet represents parameter translated from PHP to CodeDOM</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">My be thrown by <see cref=\"TranslateExpression\"/></exception>\r\n            protected CodeExpression TranslateParam(ActualParam /*!*/Param, MethodContextBase /*!*/ method, IStatementInsertContext IC, ParameterInfo Hint)\r\n            {\r\n                var ret = TranslateExpression(Param.Expression, method, IC);\r\n                if (ret is CodeArrayCreateExpression && Hint != null && !((CodeArrayCreateExpression)ret).CreateType.Equals(Hint.ParameterType))\r\n                    ((CodeArrayCreateExpression)ret).CreateType = new CodeTypeReference(Hint.ParameterType);\r\n                return ret;\r\n            }\r\n            #endregion\r\n            #region Very specific\r\n            /// <summary>Translates PHP array \"constructor\" to CodeDOM</summary>\r\n            /// <param name=\"array\">Array \"constructor\" to be translated</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for adding aditional statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <remarks>\r\n            /// If <paramref name=\"array\"/> does not contain any associative item (it is item with <see cref=\"Item.Index\"/> != null) array initialization is translated inline like C# object[] = new object[]{item1,item2,item3}.\r\n            /// This does not require <paramref name=\"IC\"/>.\r\n            /// If there is any associative item in the list, expression is translated using <paramref name=\"IC\"/> as creation of new variable of type <see cref=\"PhpArray\"/> and then filled using <see cref=\"PhpArray.SetArrayItem(object)\"/> for non-associative items and <see cref=\"PhpArray.SetArrayItem(object,object)\"/> for associative ones.\r\n            /// In this case function returns refernce to newly created variable.\r\n            /// </remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Array contains item passed by reference.\r\n            /// =or=\r\n            /// Array contains item that is neither <see cref=\"ValueItem\"/> nor <see cref=\"RefItem\"/>\r\n            /// =or=\r\n            /// Array contains an associative item and <paramref name=\"IC\"/> is null\r\n            /// =or=\r\n            /// Any sub-expression contains unsupported construct (see <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateNotAssociativeArrayItems\"/>)\r\n            /// </exception>\r\n            protected CodeExpression TranslateArray(ArrayEx array, MethodContextBase method, IStatementInsertContext IC)\r\n            {\r\n                bool isAssociative = false;\r\n                foreach (Item item in array.Items)\r\n                    if (item is RefItem)\r\n                        throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_array_item_reference, ((RefItem)item).RefToGet);\r\n                    else if (item is ValueItem)\r\n                    {\r\n                        if (item.Index != null)\r\n                        {\r\n                            isAssociative = true;\r\n                            break;\r\n                        }\r\n                    }\r\n                    else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_array_item_type, item.GetType().FullName), ((ValueItem)item).ValueExpr);\r\n                if (isAssociative)\r\n                {\r\n                    if (IC == null) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_assoc_arr_init_context, array);\r\n                    string varName = string.Format(\"__array_{0:000}\", arrUnqCnt++);\r\n                    IC.Insert(new CodeVariableDeclarationStatement(typeof(PhpArray), varName), array);\r\n                    IC.Insert(new CodeAssignStatement(new CodeVariableReferenceExpression(varName),\r\n                        new CodeObjectCreateExpression(typeof(PhpArray), new CodeExpression[]{\r\n                            new CodePrimitiveExpression(array.Items.Length)})), array);\r\n                    foreach (Item item in array.Items)\r\n                        IC.Insert(new CodeExpressionStatement(\r\n                            new CodeMethodInvokeExpression(new CodeVariableReferenceExpression(varName),\r\n                            \"SetArrayItem\",\r\n                            item.Index == null ?\r\n                                new CodeExpression[] { TranslateExpression(((ValueItem)item).ValueExpr, method, IC) } :\r\n                                new CodeExpression[]{\r\n                                    TranslateExpression(item.Index,method,IC),\r\n                                    TranslateExpression(((ValueItem)item).ValueExpr,method,IC)})), array);\r\n                    return new CodeVariableReferenceExpression(varName);\r\n                }\r\n                else\r\n                {\r\n                    var ret = new CodeArrayCreateExpression(typeof(object),\r\n                        TranslateNotAssociativeArrayItems(array.Items, method, IC, array));\r\n                    CodeTypeReference etype = null;\r\n                    foreach (CodeExpression item in ret.Initializers)\r\n                    {\r\n                        var type = GetTypeOfExpression(item, method);\r\n                        if (type == null) { etype = null; break; }\r\n                        if (etype == null) { etype = type; continue; }\r\n                        if (!TypeEquals(type, etype)) { etype = null; break; }\r\n                    }\r\n                    if (etype != null) ret.CreateType = etype;\r\n                    else\r\n                    {//Pass2\r\n                        Type t2 = null;\r\n                        foreach (CodeExpression item in ret.Initializers)\r\n                        {\r\n                            var type = GetTypeOfExpression(item, method);\r\n                            if (type == null) { t2 = null; break; }\r\n                            var tcurr = GetType(type);\r\n                            if (tcurr == null) { t2 = null; break; }\r\n                            if (t2 == null) { t2 = tcurr; continue; }\r\n                            t2 = CommonBase(tcurr, t2, true);\r\n                            if (t2.Equals(typeof(object))) break;\r\n                        }\r\n                        if (t2 != null) ret.CreateType = new CodeTypeReference(t2);\r\n                    }\r\n                    return ret;\r\n                }\r\n            }\r\n            /// <summary>Attempts to determine commn base type of 2 types</summary>\r\n            /// <param name=\"t1\">A <see cref=\"Type\"/></param>\r\n            /// <param name=\"t2\">A <see cref=\"Type\"/></param>\r\n            /// <param name=\"iface\">True to return interface if no class is possible</param>\r\n            /// <returns>Common base type of <paramref name=\"t1\"/> and <paramref name=\"t2\"/></returns>\r\n            /// <exception cref=\"ArgumentNullException\"><paramref name=\"t1\"/> or <paramref name=\"t2\"/> is null</exception>\r\n            private Type CommonBase(Type t1, Type t2, bool iface)\r\n            {\r\n                if (t1 == null) throw new ArgumentNullException(\"t1\");\r\n                if (t2 == null) throw new ArgumentNullException(\"t2\");\r\n                if (t1.IsAssignableFrom(t2)) return t1;\r\n                if (t2.IsAssignableFrom(t1)) return t2;\r\n                Type cb = typeof(object);\r\n                if (!t1.BaseType.Equals(typeof(object)))\r\n                    cb = CommonBase(t1.BaseType, t2, false);\r\n                if (cb.Equals(typeof(object)) && !t2.BaseType.Equals(typeof(object)))\r\n                    cb = CommonBase(t1, t2.BaseType, false);\r\n                if (cb.Equals(typeof(object)) && iface)\r\n                {\r\n                    List<Type> ifaces = new List<Type>();\r\n                    foreach (Type i1 in t1.GetInterfaces())\r\n                        foreach (Type i2 in t2.GetInterfaces())\r\n                            if (i1.Equals(i2)) ifaces.Add(i1);\r\n                    if (ifaces.Count == 1) cb = ifaces[0];\r\n                    else if (ifaces.Count > 0)\r\n                    {\r\n                        foreach (Type i in ifaces.ToArray())\r\n                            foreach (Type ibase in i.GetInterfaces())\r\n                                ifaces.Remove(ibase);\r\n                        cb = ifaces[0];\r\n                    }\r\n                }\r\n                return cb;\r\n            }\r\n            /// <summary>Attempts to determine return type of an expression</summary>\r\n            /// <param name=\"expression\">Expression to determine type of</param>\r\n            /// <param name=\"context\">Context. May be null, but certain expressions requires context to be known</param>\r\n            /// <returns>Type returned by expression; null if not successfull</returns>\r\n            private CodeTypeReference GetTypeOfExpression(CodeExpression /*!*/ expression, MethodContextBase context)\r\n            {\r\n                if (expression == null) throw new ArgumentNullException(\"expression\");\r\n                if (expression is CodeArgumentReferenceExpression)\r\n                {\r\n                    if (context as MethodContext == null) return null;\r\n                    foreach (CodeParameterDeclarationExpression par in ((MethodContext)context).Context.Parameters)\r\n                        if (par.Name == ((CodeArgumentReferenceExpression)expression).ParameterName)\r\n                            return par.Type;\r\n                    return null;\r\n                } if (expression is CodeSnippetExpression)\r\n                {//Not supported\r\n                } if (expression is CodeArrayIndexerExpression)\r\n                {\r\n                    CodeTypeReference toe = GetTypeOfExpression(((CodeArrayIndexerExpression)expression).TargetObject, context);\r\n                    return toe.ArrayElementType;\r\n                }\r\n                else if (expression is CodeBaseReferenceExpression)\r\n                {\r\n                    if (context == null) return null;\r\n                    if (context.Class.Context.BaseTypes.Count > 0)\r\n                    {\r\n                        Type t = GetType(context.Class.Context.BaseTypes[0]);\r\n                        if (t != null && !t.IsInterface)\r\n                            return context.Class.Context.BaseTypes[0];\r\n                    }\r\n                    return new CodeTypeReference(typeof(object));\r\n                }\r\n                else if (expression is CodeBinaryOperatorExpression)\r\n                {\r\n                    switch (((CodeBinaryOperatorExpression)expression).Operator)\r\n                    {\r\n                        case CodeBinaryOperatorType.Assign:\r\n                            return GetTypeOfExpression(((CodeBinaryOperatorExpression)expression).Right, context);\r\n                        case CodeBinaryOperatorType.Add:\r\n                            CodeTypeReference l = GetTypeOfExpression(((CodeBinaryOperatorExpression)expression).Left, context);\r\n                            CodeTypeReference r = GetTypeOfExpression(((CodeBinaryOperatorExpression)expression).Right, context);\r\n                            if ((l != null && l.ArrayRank == 0 && (l.BaseType == \"System.String\" || l.BaseType == \"System.Char\")) || (r != null && r.ArrayRank == 0 && (r.BaseType == \"System.String\" || r.BaseType == \"System.Char\")))\r\n                                return new CodeTypeReference(typeof(string));\r\n                            return null;\r\n                        case CodeBinaryOperatorType.BitwiseAnd:\r\n                        case CodeBinaryOperatorType.BitwiseOr:\r\n                        case CodeBinaryOperatorType.Divide:\r\n                        case CodeBinaryOperatorType.Multiply:\r\n                        case CodeBinaryOperatorType.Subtract:\r\n                            CodeTypeReference lft = GetTypeOfExpression(((CodeBinaryOperatorExpression)expression).Left, context);\r\n                            CodeTypeReference rgt = GetTypeOfExpression(((CodeBinaryOperatorExpression)expression).Right, context);\r\n                            if (lft == null && rgt == null) return null;\r\n                            if (lft == null || lft.ArrayRank != 0) return rgt;\r\n                            if (rgt == null || rgt.ArrayRank != 0) return lft;\r\n                            Type lType = GetType(lft);\r\n                            Type rType = GetType(rgt);\r\n                            string lName = lft.BaseType; string rName = rgt.BaseType;\r\n                            if (lType != null && lType.IsEnum) lName = Enum.GetUnderlyingType(lType).FullName;\r\n                            if (rType != null && rType.IsEnum) rName = Enum.GetUnderlyingType(rType).FullName;\r\n                            if (rgt.BaseType == lft.BaseType) return rgt;\r\n                            if (rName == lName) return new CodeTypeReference(rName);\r\n                            string Boolean = typeof(bool).FullName;\r\n                            string Byte = typeof(byte).FullName;\r\n                            string SByte = typeof(sbyte).FullName;\r\n                            string Short = typeof(short).FullName;\r\n                            string UShort = typeof(ushort).FullName;\r\n                            string Integer = typeof(int).FullName;\r\n                            string UInteger = typeof(uint).FullName;\r\n                            string Long = typeof(long).FullName;\r\n                            string ULong = typeof(ulong).FullName;\r\n                            string Char = typeof(char).FullName;\r\n                            string Single = typeof(float).FullName;\r\n                            string Double = typeof(double).FullName;\r\n                            string String = typeof(string).FullName;\r\n                            string Decimal = typeof(decimal).FullName;\r\n                            string ret = null;\r\n                            if (rName == Decimal || lName == Decimal || lName == String || rName == String || lName == Char || rName == Char)\r\n                                ret = Decimal;\r\n                            else if (lName == Double || rName == Double) ret = Double;\r\n                            else if (lName == Single || rName == Single) ret = Single;\r\n                            else if (((CodeBinaryOperatorExpression)expression).Operator == CodeBinaryOperatorType.Divide)\r\n                                ret = Double;\r\n                            else if ((lName == Long || rName == ULong) && lName != rName) ret = Long;\r\n                            else if (lName == Long || rName == Long) ret = Long;\r\n                            else if (lName == ULong || rName == ULong) ret = ULong;\r\n                            else if ((lName == Integer || rName == UInteger) && lName != rName) ret = Single;\r\n                            else if (lName == Integer || rName == Integer) ret = Integer;\r\n                            else if (lName == UInteger || rName == UInteger) ret = UInteger;\r\n                            else if ((lName == Short || rName == UShort) && lName != rName) ret = Integer;\r\n                            else if (lName == Short || rName == Short) ret = Short;\r\n                            else if (lName == UShort || rName == UShort) ret = UShort;\r\n                            else if ((lName == Byte || rName == SByte) && lName != rName) ret = Short;\r\n                            else if (lName == Byte || rName == Byte) ret = Byte;\r\n                            else if (lName == SByte || rName == SByte) ret = SByte;\r\n                            else if (lName == Boolean && lName == Boolean)\r\n                                switch (((CodeBinaryOperatorExpression)expression).Operator)\r\n                                {\r\n                                    case CodeBinaryOperatorType.Add:\r\n                                    case CodeBinaryOperatorType.Subtract:\r\n                                        ret = Integer;\r\n                                        break;\r\n                                    case CodeBinaryOperatorType.BitwiseAnd:\r\n                                    case CodeBinaryOperatorType.BitwiseOr:\r\n                                    case CodeBinaryOperatorType.Divide:\r\n                                    case CodeBinaryOperatorType.Multiply:\r\n                                        ret = Boolean;\r\n                                        break;\r\n                                }\r\n                            if (ret != null) return new CodeTypeReference(ret);\r\n                            return lft;\r\n                        case CodeBinaryOperatorType.BooleanAnd:\r\n                        case CodeBinaryOperatorType.BooleanOr:\r\n                        case CodeBinaryOperatorType.GreaterThan:\r\n                        case CodeBinaryOperatorType.GreaterThanOrEqual:\r\n                        case CodeBinaryOperatorType.IdentityEquality:\r\n                        case CodeBinaryOperatorType.IdentityInequality:\r\n                        case CodeBinaryOperatorType.LessThan:\r\n                        case CodeBinaryOperatorType.LessThanOrEqual:\r\n                        case CodeBinaryOperatorType.ValueEquality:\r\n                            return new CodeTypeReference(typeof(bool));\r\n                        case CodeBinaryOperatorType.Modulus:\r\n                            return new CodeTypeReference(typeof(int));\r\n                    }\r\n                }\r\n                else if (expression is CodeThisReferenceExpression)\r\n                {\r\n                    if (context == null) return null;\r\n                    var ret = new CodeTypeReference(context.Class.Context.Name);\r\n                    if (context.Class.Context.TypeParameters.Count > 0)\r\n                        foreach (CodeTypeParameter tp in context.Class.Context.TypeParameters)\r\n                            ret.TypeArguments.Add(new CodeTypeReference(tp));\r\n                    return ret;\r\n                }\r\n                else if (expression is CodePrimitiveExpression)\r\n                {\r\n                    if (((CodePrimitiveExpression)expression).Value == null) return new CodeTypeReference(typeof(object));\r\n                    return new CodeTypeReference(((CodePrimitiveExpression)expression).Value.GetType());\r\n                }\r\n                else if (expression is CodeIndexerExpression)\r\n                {\r\n                    CodeTypeReference tobj = GetTypeOfExpression(((CodeIndexerExpression)expression).TargetObject, context);\r\n                    if (tobj == null) return null;\r\n                    Type t = GetType(tobj);\r\n                    foreach (MemberInfo mi in t.GetDefaultMembers())\r\n                        if (mi is PropertyInfo && ((PropertyInfo)mi).GetIndexParameters().Length == ((CodeIndexerExpression)expression).Indices.Count)\r\n                            return new CodeTypeReference(((PropertyInfo)mi).PropertyType);\r\n                    return null;\r\n                }\r\n                else if (expression is CodeDelegateInvokeExpression)\r\n                {\r\n                    CodeTypeReference DelegateType = GetTypeOfExpression(((CodeDelegateInvokeExpression)expression).TargetObject, context);\r\n                    if (DelegateType == null) return null;\r\n                    Type dType = GetType(DelegateType);\r\n                    if (dType == null) return null;\r\n                    if (typeof(Delegate).IsAssignableFrom(dType))\r\n                    {\r\n                        MethodInfo invoke = dType.GetMethod(\"Invoke\");\r\n                        if (invoke != null) return new CodeTypeReference(invoke.ReturnType);\r\n                    }\r\n                    return null;\r\n                }\r\n                else if (expression is CodeEventReferenceExpression)\r\n                {//Not suppoirted\r\n                }\r\n                else if (expression is CodeDirectionExpression)\r\n                {\r\n                    return GetTypeOfExpression(((CodeDirectionExpression)expression).Expression, context);\r\n                }\r\n                else if (expression is CodeVariableReferenceExpression)\r\n                {\r\n                    if (context == null) return null;\r\n                    if (context.Contains(((CodeVariableReferenceExpression)expression).VariableName))\r\n                        return context[((CodeVariableReferenceExpression)expression).VariableName].Type;\r\n                    return null;\r\n                }\r\n                else if (expression is CodeParameterDeclarationExpression)\r\n                {\r\n                    return ((CodeParameterDeclarationExpression)expression).Type;\r\n                }\r\n                else if (expression is CodeDefaultValueExpression)\r\n                {\r\n                    return ((CodeDefaultValueExpression)expression).Type;\r\n                }\r\n                else if (expression is CodeObjectCreateExpression)\r\n                {\r\n                    return ((CodeObjectCreateExpression)expression).CreateType;\r\n                }\r\n                else if (expression is CodeMethodInvokeExpression)\r\n                {\r\n                    return GetTypeOfExpression(((CodeMethodInvokeExpression)expression).Method, context);\r\n                }\r\n                else if (expression is CodeMethodReferenceExpression)\r\n                {\r\n                    CodeTypeReference TObjType = GetTypeOfExpression(((CodeMethodReferenceExpression)expression).TargetObject, context);\r\n                    if (TObjType == null) return null;\r\n                    Type type = null;\r\n                    bool Protected = false;\r\n                    if (context != null && ((context.Class.Context.Name == TObjType.BaseType && context.Class.Context.TypeParameters.Count == TObjType.TypeArguments.Count) || ((CodeMethodReferenceExpression)(expression)).TargetObject is CodeThisReferenceExpression))\r\n                    {\r\n                        //Private Methods in this class\r\n                        foreach (CodeTypeMember member in context.Class.Context.Members)\r\n                            if (member is CodeMemberMethod && ((CodeMemberMethod)member).Name == ((CodeMethodReferenceExpression)expression).MethodName)\r\n                                return ((CodeMemberMethod)member).ReturnType;\r\n                        if (context.Class.Context.BaseTypes.Count > 0)\r\n                        {\r\n                            type = GetType(context.Class.Context.BaseTypes[0]);\r\n                            if (type != null && type.IsInterface) type = null;\r\n                            Protected = true;\r\n                        }\r\n                    }\r\n\r\n                    if (type == null) type = GetType(TObjType);\r\n                    if (type == null) return null;\r\n                    Type btype;\r\n                    Protected = Protected || ((CodeMethodReferenceExpression)expression).TargetObject is CodeBaseReferenceExpression ||\r\n                        (context != null && context.Class.Context.BaseTypes.Count > 0 &&\r\n                        (btype = GetType(context.Class.Context.BaseTypes[0])) != null &&\r\n                        !btype.IsInterface && btype.IsAssignableFrom(type));\r\n                    foreach (MethodInfo fi in type.GetMethods((Protected ? BindingFlags.NonPublic | BindingFlags.Public : BindingFlags.Public) | BindingFlags.Instance | BindingFlags.Static))\r\n                        if ((fi.IsFamily || fi.IsFamilyOrAssembly || fi.IsPublic) && fi.Name == ((CodeMethodReferenceExpression)expression).MethodName)\r\n                            return new CodeTypeReference(fi.ReturnType);\r\n                    return null;\r\n                }\r\n                else if (expression is CodeDelegateCreateExpression)\r\n                {\r\n                    return ((CodeDelegateCreateExpression)expression).DelegateType;\r\n                }\r\n                else if (expression is CodePropertyReferenceExpression)\r\n                {\r\n                    CodeTypeReference TObjType = GetTypeOfExpression(((CodePropertyReferenceExpression)expression).TargetObject, context);\r\n                    if (TObjType == null) return null;\r\n                    Type type = null;\r\n                    bool Protected = false;\r\n                    if (context != null && ((context.Class.Context.Name == TObjType.BaseType && context.Class.Context.TypeParameters.Count == TObjType.TypeArguments.Count) || ((CodePropertyReferenceExpression)(expression)).TargetObject is CodeThisReferenceExpression))\r\n                    {\r\n                        //Private Propertys in this class\r\n                        foreach (CodeTypeMember member in context.Class.Context.Members)\r\n                            if (member is CodeMemberProperty && ((CodeMemberProperty)member).Name == ((CodePropertyReferenceExpression)expression).PropertyName)\r\n                                return ((CodeMemberProperty)member).Type;\r\n                        if (context.Class.Context.BaseTypes.Count > 0)\r\n                        {\r\n                            type = GetType(context.Class.Context.BaseTypes[0]);\r\n                            if (type != null && type.IsInterface) type = null;\r\n                            Protected = true;\r\n                        }\r\n                    }\r\n\r\n                    if (type == null) type = GetType(TObjType);\r\n                    if (type == null) return null;\r\n                    Type btype;\r\n                    Protected = Protected || ((CodePropertyReferenceExpression)expression).TargetObject is CodeBaseReferenceExpression ||\r\n                        (context != null && context.Class.Context.BaseTypes.Count > 0 &&\r\n                        (btype = GetType(context.Class.Context.BaseTypes[0])) != null &&\r\n                        !btype.IsInterface && btype.IsAssignableFrom(type));\r\n                    foreach (PropertyInfo fi in type.GetProperties((Protected ? BindingFlags.NonPublic | BindingFlags.Public : BindingFlags.Public) | BindingFlags.Instance | BindingFlags.Static))\r\n                    {\r\n                        MethodInfo getter = fi.GetGetMethod();\r\n                        MethodInfo setter = fi.GetSetMethod();\r\n                        if ((\r\n                            (getter != null && (getter.IsFamily || getter.IsFamilyOrAssembly || getter.IsPublic)) ||\r\n                            (setter != null && (setter.IsFamily || setter.IsFamilyOrAssembly || setter.IsPublic))\r\n                            ) && fi.Name == ((CodePropertyReferenceExpression)expression).PropertyName &&\r\n                            fi.GetIndexParameters().Length == 0)\r\n                            return new CodeTypeReference(fi.PropertyType);\r\n                    }\r\n                    return null;\r\n                }\r\n                else if (expression is CodeFieldReferenceExpression)\r\n                {\r\n                    CodeTypeReference TObjType = GetTypeOfExpression(((CodeFieldReferenceExpression)expression).TargetObject, context);\r\n                    if (TObjType == null) return null;\r\n                    Type type = null;\r\n                    bool Protected = false;\r\n                    if (context != null && ((context.Class.Context.Name == TObjType.BaseType && context.Class.Context.TypeParameters.Count == TObjType.TypeArguments.Count) || ((CodeFieldReferenceExpression)(expression)).TargetObject is CodeThisReferenceExpression))\r\n                    {\r\n                        //Private fields in this class\r\n                        foreach (CodeTypeMember member in context.Class.Context.Members)\r\n                            if (member is CodeMemberField && ((CodeMemberField)member).Name == ((CodeFieldReferenceExpression)expression).FieldName)\r\n                                return ((CodeMemberField)member).Type;\r\n                        if (context.Class.Context.BaseTypes.Count > 0)\r\n                        {\r\n                            type = GetType(context.Class.Context.BaseTypes[0]);\r\n                            if (type != null && type.IsInterface) type = null;\r\n                            Protected = true;\r\n                        }\r\n                    }\r\n\r\n                    if (type == null) type = GetType(TObjType);\r\n                    if (type == null) return null;\r\n                    Type btype;\r\n                    Protected = Protected || ((CodeFieldReferenceExpression)expression).TargetObject is CodeBaseReferenceExpression ||\r\n                        (context != null && context.Class.Context.BaseTypes.Count > 0 &&\r\n                        (btype = GetType(context.Class.Context.BaseTypes[0])) != null &&\r\n                        !btype.IsInterface && btype.IsAssignableFrom(type));\r\n                    foreach (FieldInfo fi in type.GetFields((Protected ? (BindingFlags.NonPublic | BindingFlags.Public) : BindingFlags.Public) | BindingFlags.Instance | BindingFlags.Static))\r\n                        if ((fi.IsFamily || fi.IsFamilyOrAssembly || fi.IsPublic) && fi.Name == ((CodeFieldReferenceExpression)expression).FieldName)\r\n                            return new CodeTypeReference(fi.FieldType);\r\n                    return null;\r\n                }\r\n                else if (expression is CodeArrayCreateExpression)\r\n                {\r\n                    return new CodeTypeReference(((CodeArrayCreateExpression)expression).CreateType, 1);\r\n                }\r\n                else if (expression is CodeCastExpression)\r\n                {\r\n                    return ((CodeCastExpression)expression).TargetType;\r\n                }\r\n                else if (expression is CodeTypeOfExpression)\r\n                {\r\n                    return new CodeTypeReference(typeof(Type));\r\n                }\r\n                else if (expression is CodePropertySetValueReferenceExpression)\r\n                {//Not supported\r\n                }\r\n                else if (expression is CodeTypeReferenceExpression)\r\n                {\r\n                    return ((CodeTypeReferenceExpression)expression).Type;\r\n                }\r\n                else\r\n                {\r\n                    return null;\r\n                }\r\n                return null;\r\n            }\r\n\r\n            /// <summary>Translates list of items of non-associative (no indexes, values only) array initialization to CodeDOM list of expressions</summary>\r\n            /// <param name=\"items\">Items to translate</param>\r\n            /// <param name=\"method\">method for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for adding additional statements</param>\r\n            /// <param name=\"array\">Array to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on in case it cannot be thrown on item</param>\r\n            /// <returns>Array of <see cref=\"CodeExpression\"/> taht represents content of array</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// A passed-by-reference item of array reached.\r\n            /// =or=\r\n            /// Any sub-expression contains unsupported construct (<see cref=\"TranslateExpression\"/>)\r\n            /// </exception>\r\n            protected CodeExpression[] TranslateNotAssociativeArrayItems(IEnumerable<Item> items, MethodContextBase method, IStatementInsertContext IC, ArrayEx array)\r\n            {\r\n                List<CodeExpression> ret = new List<CodeExpression>();\r\n                foreach (Item item in items)\r\n                    if (item is ValueItem) ret.Add(TranslateExpression(((ValueItem)item).ValueExpr, method, IC));\r\n                    else throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_array_item_reference, item.Index == null ? (item is RefItem ? (LangElement)((RefItem)item).RefToGet : array) : (LangElement)item.Index);\r\n                return ret.ToArray();\r\n            }\r\n            /// <summary>Translates PHP execution expression `` to CodeDom call of <see cref=\"Execution.ShellExec(string)\"/> method</summary>\r\n            /// <param name=\"command\">Command do translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Block for inserting additional statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Some of sub-expressions are not supported (as goes from <see cref=\"TranslateExpression\"/>)</exception>\r\n            CodeMethodInvokeExpression TranslateShellExec(ShellEx command, MethodContextBase method, IStatementInsertContext IC)\r\n            {\r\n                return new CodeMethodInvokeExpression(\r\n                    new CodeTypeReferenceExpression(typeof(Execution)),\r\n                    \"ShellExec\",\r\n                    new CodeExpression[] { TranslateExpression(command.Command, method, IC) });\r\n            }\r\n            /// <summary>Translates PHP pseudo-constant to CodeDOM (one-way)</summary>\r\n            /// <param name=\"__\">PseudoConstant to translate</param>\r\n            /// <returns>Literal that represents this pseudo-constant</returns>\r\n            /// <remarks>This is one-way translation</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"__\"/> is unknown type of pseudo-constant</exception>\r\n            protected /*!*/CodeExpression Translate__const(PseudoConstUse /*!*/__)\r\n            {\r\n                switch (__.Type)\r\n                {\r\n                    case PseudoConstUse.Types.Class:\r\n                        return new CodePrimitiveExpression(currentClass);   // in case of a trait, current class name should be returned instead of the trait\r\n                    case PseudoConstUse.Types.Trait:\r\n                        return new CodePrimitiveExpression(currentClass);\r\n                    case PseudoConstUse.Types.File:\r\n                        return new CodePrimitiveExpression(currentFile);\r\n                    case PseudoConstUse.Types.Dir:\r\n                        return new CodePrimitiveExpression(Path.GetDirectoryName(currentFile));\r\n                    case PseudoConstUse.Types.Function:\r\n                        return new CodePrimitiveExpression(currentFunction);\r\n                    case PseudoConstUse.Types.Line:\r\n                        return new CodePrimitiveExpression(GetLine(__));\r\n                    case PseudoConstUse.Types.Method:\r\n                        return new CodePrimitiveExpression(currentMethod);\r\n                    case PseudoConstUse.Types.Namespace:\r\n                        return new CodePrimitiveExpression(currentNamespace);\r\n                    default: throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_pseudoconstant_type, __.Type, (int)__.Type), __);\r\n                }\r\n            }\r\n            /// <summary>Helper variable for <see cref=\"TranslateList\"/></summary>\r\n            private int arrUnqCnt = 0;\r\n            /// <summary>Translates PHP list expression to CodeDOM</summary>\r\n            /// <param name=\"list\">Expression to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Block for inserting statements. Can be null, but see exceptions.</param>\r\n            /// <returns>Translated statements</returns>\r\n            /// <remarks>Inserts additional statements into <paramref name=\"IC\"/></remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"IC\"/> is null</exception>\r\n            protected CodeVariableReferenceExpression /*!*/TranslateList(ListEx /*!*/ list, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (IC == null)\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_list_context, list);\r\n                string ArrayName = string.Format(\"__array_{0:000}\", arrUnqCnt++);\r\n                IC.Insert(new CodeVariableDeclarationStatement(typeof(PhpArray), ArrayName), list);\r\n                IC.Insert(new CodeAssignStatement(\r\n                    new CodeVariableReferenceExpression(ArrayName),\r\n                    new CodeCastExpression(typeof(PhpArray), TranslateExpression(list.RValue, method, IC))), list);\r\n                int i = 0;\r\n                foreach (Expression l in list.LValues)\r\n                    if (!(l is EmptyEx))\r\n                        IC.Insert(new CodeAssignStatement(\r\n                            TranslateExpression(l, method, IC),\r\n                            new CodeMethodInvokeExpression(\r\n                                new CodeVariableReferenceExpression(ArrayName),\r\n                                \"GetArrayItem\",\r\n                                new CodeExpression[]{\r\n                                    new CodePrimitiveExpression(i++),\r\n                                    new CodePrimitiveExpression(false)})), l);\r\n                return new CodeVariableReferenceExpression(ArrayName);\r\n            }\r\n            /// <summary>Translates PHP isset construct to CodeDOM equivalent</summary>\r\n            /// <param name=\"isset\">Expression to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <remarks>\r\n            /// isset is translated using and-separated list if tests of identity with null\r\n            /// isset($a,$b,$c) is translated as (a != null) &amp;&amp; ((b != null) &amp;&amp; (c != null))  \r\n            /// </remarks>\r\n            protected CodeExpression /*!*/TranslateIsSet(IssetEx /*!*/isset, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (isset.VarList.Count <= 0)\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_isset_no_var, isset);\r\n                else\r\n                    return TranslateIsSetList(isset.VarList, 0, method, IC);\r\n            }\r\n            /// <summary>Translate list of variables in argument list of isset PHP construct to sequence of CodeDOM null tests concatenated using boolean and operator.</summary>\r\n            /// <param name=\"list\">Arguments of isset</param>\r\n            /// <param name=\"start\">Index in <paramref name=\"list\"/> where to start translation</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            protected CodeExpression /*!*/ TranslateIsSetList(List<VariableUse>/*!*/ list, int start, MethodContextBase /*!*/method, IStatementInsertContext IC)\r\n            {\r\n                if (list.Count < start + 1) throw new ArgumentOutOfRangeException(\"start\", Localizations.Strings.cdp_not_enough_items_in_list);\r\n                else if (start < 0) throw new ArgumentOutOfRangeException(\"start\", Localizations.Strings.cdp_start_less_than_zero);\r\n                else if (start + 1 == list.Count)\r\n                    return new CodeBinaryOperatorExpression(\r\n                        TranslateVariableUse(list[start], method, IC), CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null));\r\n                else\r\n                    return new CodeBinaryOperatorExpression(\r\n                        new CodeBinaryOperatorExpression(\r\n                            TranslateVariableUse(list[start], method, IC), CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null)),\r\n                        CodeBinaryOperatorType.BooleanAnd,\r\n                        TranslateIsSetList(list, start + 1, method, IC));\r\n            }\r\n            /// <summary>Converts list of expressions contained in <see cref=\"ConcatEx\"/> to recursive CodeDOM expression</summary>\r\n            /// <param name=\"List\">List containing expressions to convert</param>\r\n            /// <param name=\"Start\">Index of expression to start conversion from</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <returns><see cref=\"CodeExpression\"/> containin translated expression</returns>\r\n            /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"List\"/> contains less items then <paramref name=\"Start\"/> + 1 =or= <paramref name=\"Start\"/> is less than zero</exception>\r\n            protected CodeExpression TranslateConcatExpressionList(IList<Expression> /*!*/ List, int Start, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (List.Count <= Start)\r\n                    throw new ArgumentOutOfRangeException(\"Start\", Localizations.Strings.cdp_unsup_not_enough_expressions_in_list);\r\n                else if (Start < 0)\r\n                    throw new ArgumentOutOfRangeException(\"Start\", Localizations.Strings.cdp_start_greater_than_zero);\r\n                else if (List.Count == Start + 1)\r\n                    return TranslateExpression(List[Start], method, IC);\r\n                else\r\n                    return new CodeBinaryOperatorExpression(\r\n                        TranslateExpression(List[Start], method, IC),\r\n                        CodeBinaryOperatorType.Add,\r\n                        TranslateConcatExpressionList(List, Start + 1, method, IC));\r\n            }\r\n            /// <summary>Translates \"flat\" PHP <see cref=\"ConcatEx\"/> to recursive CodeDOM <see cref=\"CodeBinaryOperatorExpression\"/></summary>\r\n            /// <param name=\"c\">Expression to translate</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"IC\">Context for inserting additional statements</param>\r\n            /// <returns>Translated expression</returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"c\"/>.<see cref=\"ConcatEx.Expressions\">List</see> contains no expression</exception>\r\n            protected CodeExpression TranslateConcatExpression(ConcatEx /*!*/ c, MethodContextBase /*!*/ method, IStatementInsertContext IC)\r\n            {\r\n                if (c.Expressions.Length == 0)\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_empty_ex_list, c);\r\n                else\r\n                    return TranslateConcatExpressionList(c.Expressions, 0, method, IC);\r\n            }\r\n            #endregion\r\n            #endregion\r\n            #region Types and signatures\r\n            /// <summary>Translates declaration of generic parameter (in header of type) from PHP to CodeDOM</summary>\r\n            /// <param name=\"GPar\">PHP Generic parameter declaration</param>\r\n            /// <returns>CodeDOM representation of <paramref name=\"GPar\"/></returns>\r\n            protected CodeTypeParameter /*!*/ TranslateGenericParameterDeclaration(GenericParameterDesc /*!*/ GPar)\r\n            {\r\n                CodeTypeParameter ret = new CodeTypeParameter(GPar.Type.FullName);\r\n                return ret;\r\n            }\r\n            /// <summary>Translates declaration of generic parameter (in header of method) from PHP to CodeDOM</summary>\r\n            /// <param name=\"GPar\">PHP Generic parameter declaration</param>\r\n            /// <returns>CodeDOM representation of <paramref name=\"GPar\"/></returns>\r\n            protected CodeTypeParameter /*!*/ TranslateFormalTypeParam(FormalTypeParam /*!*/ GPar)\r\n            {\r\n                CodeTypeParameter ret = new CodeTypeParameter(GPar.Name.Value);\r\n                return ret;\r\n            }\r\n            /// <summary>Translate declaration of formal parameter of method from PHP to CodeDOM</summary>\r\n            /// <param name=\"Param\">Parameter to be translated</param>\r\n            /// <returns><paramref name=\"Param\"/>'s representation in COdeDOM</returns>\r\n            /// <remarks>Ignores parameter initialization!</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Custom attribute initialization contains unsupported construct (<see cref=\"TranslateAttribute\"/>)</exception>\r\n            protected CodeParameterDeclarationExpression /*!*/ TranslateParameter(FormalParam /*!*/ Param)\r\n            {\r\n                CodeParameterDeclarationExpression ret = new CodeParameterDeclarationExpression(\r\n                    Param.TypeHint == null ? new CodeTypeReference(typeof(object)) :\r\n                    Param.TypeHint is PrimitiveType ?\r\n                        new CodeTypeReference(((PrimitiveType)Param.TypeHint).RealType) :\r\n                        TranslateGenericQualifiedName((GenericQualifiedName)Param.TypeHint, true),\r\n                    Param.Name.Value);\r\n                var attributes = Param.Attributes;\r\n                if (attributes != null && attributes.Attributes != null)\r\n                    foreach (CustomAttribute Attr in attributes.Attributes)\r\n                    {\r\n                        CodeAttributeDeclaration attr = TranslateAttribute(Attr);\r\n                        if (attr != null) ret.CustomAttributes.Add(attr);\r\n                    }\r\n                //Warning: Parameter initialization is ignored\r\n                if (Param.IsOut) ret.Direction = FieldDirection.Out;\r\n                if (Param.PassedByRef) ret.Direction = FieldDirection.Ref;\r\n                if (Param.IsOut && Param.PassedByRef) ret.Direction = FieldDirection.Ref | FieldDirection.Out;\r\n                return ret;\r\n            }\r\n            /// <summary>Helper delgate for <see cref=\"TranslateModifiers\"/></summary>\r\n            /// <param name=\"PHP\">Member attribute to be compared with internal value using internal type of comparison</param>\r\n            /// <returns>Result of comperison</returns>\r\n            private delegate bool dAnd(PhpMemberAttributes PHP);\r\n            /// <summary>Translates <see cref=\"PhpMemberAttributes\"/> to <see cref=\"MemberAttributes\"/></summary>\r\n            /// <param name=\"Modifiers\">A <see cref=\"PhpMemberAttributes\"/> to translate</param>\r\n            /// <returns><paramref name=\"Modifiers\"/>'s representation in <see cref=\"MemberAttributes\"/></returns>\r\n            protected MemberAttributes /*!*/ TranslateModifiers(PhpMemberAttributes /*!*/ Modifiers)\r\n            {\r\n                dAnd And = delegate(PhpMemberAttributes PHP) { return (Modifiers & PHP) == PHP; };\r\n                //dAnd Eqs = delegate(PhpMemberAttributes PHP) { return (Modifiers & PHP) != 0; };\r\n                dAnd vis = delegate(PhpMemberAttributes PHP) { return (Modifiers & PhpMemberAttributes.VisibilityMask) == PHP; };\r\n                MemberAttributes ret = 0;\r\n                //if(And(PhpMemberAttributes.NamespacePrivate)) ret |= MemberAttributes.Assembly;\r\n                if (vis(PhpMemberAttributes.Private)) ret |= MemberAttributes.Private;\r\n                if (vis(PhpMemberAttributes.Protected)) ret |= MemberAttributes.Family;\r\n                if (vis(PhpMemberAttributes.Public)) ret |= MemberAttributes.Public;\r\n\r\n                if (And(PhpMemberAttributes.Abstract)) ret |= MemberAttributes.Abstract;\r\n                if (And(PhpMemberAttributes.AppStatic) || And(PhpMemberAttributes.Static)) ret |= MemberAttributes.Static;\r\n                if (And(PhpMemberAttributes.Final)) ret |= MemberAttributes.Final;\r\n                if (And(PhpMemberAttributes.Interface)) ret |= MemberAttributes.Abstract;\r\n\r\n                //if(Eqs(PhpMemberAttributes.Static)) ret |= MemberAttributes.Static;\r\n                return ret;\r\n            }\r\n            /// <summary>Translates <see cref=\"TypeRef\"/> to <see cref=\"CodeTypeReference\"/></summary>\r\n            /// <param name=\"typeRef\"><see cref=\"TypeRef\"/> to be translated</param>\r\n            /// <returns><see cref=\"CodeTypeReference\"/> representation of <paramref name=\"typeRef\"/></returns>\r\n            /// <remarks>Indirect type reference (<see cref=\"IndirectTypeRef\"/> is currently not supported)</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// <paramref name=\"typeRef\"/> is <see cref=\"IndirectTypeRef\"/>\r\n            /// =or=\r\n            /// <paramref name=\"typeRef\"/> is neither <see cref=\"DirectTypeRef\"/> nor <see cref=\"PrimitiveTypeRef\"/>\r\n            /// =or=\r\n            /// some sub-construct is not supported (as comes from <see cref=\"TranslateTypeRef\"/>, <see cref=\"getCLRName\"/>)\r\n            /// </exception>\r\n            /// <param name=\"context\">Context for current-type detrmination. Can be null.</param>\r\n            protected /*!*/CodeTypeReference TranslateTypeRef(TypeRef /*!*/ typeRef, MethodContextBase context)\r\n            {\r\n                if (typeRef is DirectTypeRef)\r\n                {\r\n                    string CLRName = getCLRName(((DirectTypeRef)typeRef).ClassName);\r\n                    CodeTypeReference ret;\r\n                    if (typeRef.GenericParams.Count == 0 && context != null && context.Class != null && context.Class.Context.Name == CLRName)\r\n                    {\r\n                        //Current class hack\r\n                        ret = new CodeTypeReference(/*(string.IsNullOrEmpty(currentNamespace) ? \"\" : currentNamespace.TrimEnd(new char[] { ':' }).Replace(\":::\", \".\") + \".\") +*/CLRName);\r\n                    }\r\n                    else\r\n                    {\r\n                        ret = new CodeTypeReference(CLRName);\r\n                        foreach (TypeRef GPar in typeRef.GenericParams)\r\n                            ret.TypeArguments.Add(TranslateTypeRef(GPar, context));\r\n                    }\r\n                    return ret;\r\n                }\r\n                else if (typeRef is IndirectTypeRef)\r\n                {\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_indirect_type_ref, typeRef);\r\n                }\r\n                else if (typeRef is PrimitiveTypeRef)\r\n                    return new CodeTypeReference(((PrimitiveTypeRef)typeRef).QualifiedName.Name.Value.ToLowerInvariant());\r\n                else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_ref_kind), typeRef);\r\n            }\r\n            #endregion\r\n            #region Class-level fields\r\n            /// <summary>Translates declaration of PHP class-level constant to CodeDOM static constant field</summary>\r\n            /// <param name=\"Const\">Constant to be translated</param>\r\n            /// <param name=\"List\">List in which <paramref name=\"Const\"/> is declared</param>\r\n            /// <returns>CodeDOM representation of <paramref name=\"Const\"/></returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Custom attribute initialization expression or constant initialization expression is not either supported or supported in current context (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            protected CodeMemberField /*!*/ TranslateClassConst(ClassConstantDecl /*!*/ Const, ConstDeclList /*!*/ List)\r\n            {\r\n                CodeMemberField ret = new CodeMemberField(typeof(object), Const.Name.Value);\r\n                ret.Attributes = TranslateModifiers(List.Modifiers);\r\n                ret.Attributes |= MemberAttributes.Static | MemberAttributes.Const;\r\n                \r\n                var attributes = List.Attributes;\r\n                if (attributes != null && attributes.Attributes != null)\r\n                    foreach (CustomAttribute attribute in attributes.Attributes)\r\n                    {\r\n                        CodeAttributeDeclaration attr = TranslateAttribute(attribute);\r\n                        if (attribute != null) ret.CustomAttributes.Add(attr);\r\n                    }\r\n                ret.InitExpression = TranslateExpression(Const.Initializer, new MethodContextBase(), null);\r\n                return ret;\r\n            }\r\n            /// <summary>Translates declaration of PHP class-level field to CodeDOM field</summary>\r\n            /// <param name=\"Field\">Field to be translated</param>\r\n            /// <param name=\"List\">List in which <paramref name=\"Field\"/> is declared</param>\r\n            /// <param name=\"block\">If field requires property, property is added to this block</param>\r\n            /// <returns>CodeDOM representation of <paramref name=\"Field\"/></returns>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Custom attribute initialization expression or variable initialization expression is not either supported or supported in current context (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            protected CodeMemberField /*!*/ TranslateField(FieldDecl /*!*/ Field, FieldDeclList /*!*/ List, IBlockContext /*!*/ block)\r\n            {\r\n                // <remarks>If filed implements or overrides something, that field-backed property is generated</remarks>\r\n                // Analysis required :-(\r\n                /*if(Field.Field.Implements.Count > 0 || Field.Field.Overrides != null) {\r\n                    CodeMemberField ret = new CodeMemberField(typeof(object), Field.Name.Value);\r\n                    ret.Attributes = TranslateModifiers(List.Modifiers);\r\n                    foreach(CustomAttribute attribute in List.Attributes.Attributes)\r\n                        ret.CustomAttributes.Add(TranslateAttribute(attribute));\r\n                    if(Field.HasInitVal)\r\n                        ret.InitExpression = TranslateExpression(Field.Initializer, new MethodContextBase(),null);\r\n                    CodeMemberProperty FieldProperty = new CodeMemberProperty();\r\n                    string name = ret.Name;\r\n                    ret.Name = \"__field__\" + name;\r\n                    FieldProperty.Name = name;\r\n                    FieldProperty.CustomAttributes.AddRange(ret.CustomAttributes);\r\n                    FieldProperty.Attributes = ret.Attributes;\r\n                    ret.Attributes &= ~MemberAttributes.Public;\r\n                    ret.Attributes &= ~MemberAttributes.Family;\r\n                    FieldProperty.HasGet = true;\r\n                    FieldProperty.HasSet = true;\r\n                    FieldProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), \"__field__\" + name)));\r\n                    FieldProperty.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), \"__field__\" + name), new CodeVariableReferenceExpression(\"value\")));\r\n                    block.AddObject(FieldProperty);\r\n                    return ret;\r\n                } else {*/\r\n                CodeMemberField ret = new CodeMemberField(typeof(object), Field.Name.Value);\r\n                ret.Attributes = TranslateModifiers(List.Modifiers);\r\n\r\n                var attributes = List.Attributes;\r\n                if (attributes != null && attributes.Attributes != null)\r\n                    foreach (CustomAttribute attribute in attributes.Attributes)\r\n                    {\r\n                        CodeAttributeDeclaration attr = TranslateAttribute(attribute);\r\n                        if (attribute != null) ret.CustomAttributes.Add(attr);\r\n                    }\r\n                if (Field.HasInitVal)\r\n                    ret.InitExpression = TranslateExpression(Field.Initializer, new MethodContextBase(), null);\r\n                return ret;\r\n                /*}*/\r\n            }\r\n            #endregion\r\n            #endregion\r\n\r\n            #region Specialized block-level translations\r\n            /// <summary>Translates PHP namespace declarartion and its content to CodeDOM and emits it into containing block</summary>\r\n            /// <param name=\"sNamespace\">Declaration of PHP namespace to be translated</param>\r\n            /// <param name=\"block\">Block this namespace is containded in (should be <see cref=\"FileContext\"/>)</param>\r\n            protected void TranslateNamespace(NamespaceDecl /*!*/ sNamespace, IBlockContext /*!*/ block)\r\n            {\r\n                PushAliases(sNamespace.Naming);\r\n\r\n                CodeNamespace cNamespace = (CodeNamespace)\r\n                    block.AddObject(new CodeNamespace(getCLRName(sNamespace.QualifiedName)), sNamespace);\r\n                currentNamespace = sNamespace.QualifiedName.ToString();\r\n                TranslateBlock(sNamespace.Statements, new MethodContextBase(), new NamespaceContext(cNamespace));\r\n\r\n                PopAliases();\r\n            }\r\n\r\n            /// <summary>Translates declaration of PHP type to CodeDOM and emits its content</summary>\r\n            /// <param name=\"sType\">PHP type declaration to be translated</param>\r\n            /// <param name=\"block\">Block the type is contained in (should be <see cref=\"FileContext\"/> or <see cref=\"NamespaceContext\"/>)</param>\r\n            /// <remarks>When translating base types and interfaces, first must be translatedd and added to list base class!</remarks>\r\n            protected void TranslateTypeDecl(TypeDecl /*!*/ sType, IBlockContext /*!*/ block)\r\n            {\r\n                CodeTypeDeclaration cType = (CodeTypeDeclaration)\r\n                    block.AddObject(new CodeTypeDeclaration(sType.Name.Value), sType);\r\n                cType.LinePragma = getPragma(GetLine(sType));\r\n                //Basic settings\r\n                cType.IsClass = true;\r\n                cType.IsEnum = false;\r\n                cType.IsPartial = sType.PartialKeyword;\r\n\r\n                //TODO: sType.DocComment\r\n                //Base and implemented types\r\n                //Base class must be first in list!, then interfaces\r\n                if (sType.BaseClassName.HasValue) cType.BaseTypes.Add(TranslateGenericQualifiedName(sType.BaseClassName.Value, true));\r\n                foreach (GenericQualifiedName Interface in sType.ImplementsList)\r\n                    cType.BaseTypes.Add(TranslateGenericQualifiedName(Interface, true));\r\n                //Attributes\r\n                var attributes = sType.Attributes;\r\n                if (attributes != null && attributes.Attributes != null)\r\n                    foreach (CustomAttribute Attribute in attributes.Attributes)\r\n                    {\r\n                        CodeAttributeDeclaration attr = TranslateAttribute(Attribute);\r\n                        if (attr != null) cType.CustomAttributes.Add(attr);\r\n                    }\r\n                //Modifiers\r\n                Dictionary<TypeAttributes, bool> typeAttributes = new Dictionary<TypeAttributes, bool>();\r\n                foreach (TypeAttributes val in System.Enum.GetValues(typeof(TypeAttributes)))\r\n                    if (!typeAttributes.ContainsKey(val))\r\n                        typeAttributes.Add(val, false);\r\n                typeAttributes[TypeAttributes.Class] = true;// !sType.Type.IsValueType;\r\n                cType.IsStruct = false;// sType.Type.IsValueType;\r\n                typeAttributes[TypeAttributes.Abstract] = (sType.MemberAttributes & PhpMemberAttributes.Abstract) != 0;\r\n                typeAttributes[TypeAttributes.Public] = (sType.MemberAttributes & PhpMemberAttributes.Public) != 0;\r\n                //typeAttributes[TypeAttributes.NestedFamily] = sType.Type.IsProtected;\r\n                //typeAttributes[TypeAttributes.NestedPrivate] = sType.Type.IsPrivate;\r\n                typeAttributes[TypeAttributes.Interface] = (sType.MemberAttributes & PhpMemberAttributes.Interface) != 0;\r\n                typeAttributes[TypeAttributes.NotPublic] = (sType.MemberAttributes & PhpMemberAttributes.Public) == 0;\r\n                typeAttributes[TypeAttributes.Sealed] = (sType.MemberAttributes & PhpMemberAttributes.Final) == 0;\r\n                TypeAttributes ta = 0;\r\n                foreach (KeyValuePair<TypeAttributes, bool> attr in typeAttributes) if (attr.Value) ta |= attr.Key;\r\n                cType.TypeAttributes = ta;\r\n\r\n                //Generic information\r\n                if (sType.TypeSignature.TypeParams.Any())\r\n                {\r\n                    foreach (var GPar in sType.TypeSignature.TypeParams)\r\n                    {\r\n                        cType.TypeParameters.Add(TranslateFormalTypeParam(GPar));\r\n                    }\r\n                }\r\n                //Translate members\r\n                if (sType.Namespace == null)\r\n                    currentClass = sType.Name.ToString();\r\n                else currentClass = sType.Namespace.QualifiedName.ToString() + sType.Name.ToString();\r\n                TranslateBlock(sType.Members, new TypeContext(cType));\r\n            }\r\n\r\n            /// <summary>Translates header of method from PHP to CodeDOM</summary>\r\n            /// <param name=\"Method\">GetUserEntryPoint to translate</param>\r\n            /// <param name=\"block\">Block this method is member of</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// GetUserEntryPoint cannot be added to <paramref name=\"block\"/>.\r\n            /// =or=\r\n            /// Some statement contained in method is not supported or consists of unsupported constructs (see <c>TranslateStatement</c>)\r\n            /// =or=\r\n            /// Some construct in method header is usupported (see <see cref=\"TranslateAttribute\"/>,<see cref=\"TranslateParameter\"/>\r\n            /// </exception>\r\n            protected void TranslateMethod(MethodDecl /*!*/ Method, IBlockContext /*!*/ block)\r\n            {\r\n                CodeMemberMethod cMethod;\r\n                if (Method.Name.IsConstructName)\r\n                {\r\n                    cMethod = new CodeConstructor();\r\n                    if (Method.BaseCtorParams != null)\r\n                        ((CodeConstructor)cMethod).BaseConstructorArgs.AddRange(TranslateParams(Method.BaseCtorParams, new MethodContextBase(), null, null));\r\n                }\r\n                else\r\n                    cMethod = new CodeMemberMethod();\r\n                cMethod.LinePragma = getPragma(GetLine(Method));\r\n                cMethod.Name = Method.Name.Value;\r\n\r\n                var attributes = Method.Attributes;\r\n                if (attributes != null && attributes.Attributes != null)\r\n                    foreach (CustomAttribute Attr in attributes.Attributes)\r\n                    {\r\n                        CodeAttributeDeclaration attr = TranslateAttribute(Attr);\r\n                        if (attr != null)\r\n                        {\r\n                            if (Attr.TargetSelector == CustomAttribute.TargetSelectors.Return)\r\n                                cMethod.ReturnTypeCustomAttributes.Add(attr);\r\n                            else\r\n                                cMethod.CustomAttributes.Add(attr);\r\n                        }\r\n                    }\r\n                cMethod.Attributes = TranslateModifiers(Method.Modifiers);\r\n                cMethod.ReturnType = new CodeTypeReference(typeof(object));\r\n                foreach (FormalTypeParam TParam in Method.TypeSignature.TypeParams)\r\n                    cMethod.TypeParameters.Add(TranslateFormalTypeParam(TParam));\r\n                foreach (FormalParam Param in Method.Signature.FormalParams)\r\n                    cMethod.Parameters.Add(TranslateParameter(Param));\r\n                block.AddObject(cMethod, Method);\r\n                MethodContext methodContext = new MethodContext(cMethod, block);\r\n                currentFunction = Method.Name.Value;\r\n                currentMethod = currentClass + \"::\" + Method.Name.Value;\r\n                TranslateBlock(Method.Body, methodContext, methodContext);\r\n            }\r\n\r\n            /// <summary>Translates list of class-level declared contants into CodeDOM declarations of constant fields</summary>\r\n            /// <param name=\"List\">List of constants to translate</param>\r\n            /// <param name=\"block\">Block representing type in which constants are declared</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Custom attribute initialization expression or constant initialization expression is not either supported or supported in current context (see <see cref=\"TranslateClassConst\"/>)</exception>\r\n            protected void TranslateMemberList(ConstDeclList /*!*/ List, /*!*/ IBlockContext block)\r\n            {\r\n                foreach (ClassConstantDecl Const in List.Constants)\r\n                {\r\n                    var TConst = TranslateClassConst(Const, List);\r\n                    TConst.LinePragma = getPragma(GetLine(Const));\r\n                    block.AddObject(TConst, List);\r\n                }\r\n            }\r\n\r\n            /// <summary>Translates list of class-level declared fields into CodeDOM declarations of fields</summary>\r\n            /// <param name=\"List\">List of fields to translate</param>\r\n            /// <param name=\"block\">Block representing type in which fields are declared</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Custom attribute initialization expression or variable initialization expression is not either supported or supported in current context (see <see cref=\"TranslateField\"/>)</exception>        \r\n            protected void TranslateMemberList(FieldDeclList /*!*/ List, /*!*/ IBlockContext block)\r\n            {\r\n                foreach (FieldDecl Field in List.Fields)\r\n                {\r\n                    var TField = TranslateField(Field, List, block);\r\n                    TField.LinePragma = getPragma(GetLine(Field));\r\n                    block.AddObject(TField, List);\r\n                }\r\n            }\r\n            #endregion\r\n\r\n            #region Specialized statement-level translations\r\n            #region Multi-line\r\n            /// <summary>Translates while statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Expression or statement used in this statement is not supported (see <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/>)</exception>\r\n            protected void TranslateStatement(WhileStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref Method, ref Block, statement);\r\n                if (Block != null) Block.ResetInsertContextToEnd();\r\n                string Label1 = LabelName(Loops.While, true);\r\n                string Label2 = LabelName(Loops.While, false);\r\n                CodeIterationStatement For = new CodeIterationStatement();\r\n                For.LinePragma = getPragma(GetLine(statement));\r\n                if (statement.CondExpr == null || statement.LoopType == WhileStmt.Type.Do)\r\n                    For.TestExpression = new CodePrimitiveExpression(true);\r\n                else\r\n                    For.TestExpression = TranslateExpression(statement.CondExpr, method, Block);\r\n                //For.InitStatement=new CodeExpressionStatement(new CodePrimitiveExpression(null));\r\n                //For.IncrementStatement=new CodeExpressionStatement( new CodePrimitiveExpression(null));\r\n                ForStatementContext context = new ForStatementContext(Method, Block as BlockStatementContext, For, Label2, Label1, this);\r\n                TranslateBlock(new List<Statement>(new Statement[] { statement.Body }), method, context);\r\n                var l1 = new CodeLabeledStatement(Label1);\r\n                l1.LinePragma = getPragma(GetLine(statement));\r\n                For.Statements.Add(l1);\r\n                block.AddObject(For, statement);\r\n                if (statement.LoopType == WhileStmt.Type.Do && statement.CondExpr != null)\r\n                {\r\n                    context.ResetInsertContextToEnd();\r\n                    var condition = new CodeConditionStatement(\r\n                        new CodeBinaryOperatorExpression(\r\n                            TranslateExpression(statement.CondExpr, Method, context), CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression(false)),\r\n                        new CodeStatement[] { new CodeGotoStatement(Label2) });\r\n                    condition.LinePragma = getPragma(GetLine(statement));\r\n                    context.AddObject(condition, statement);\r\n                }\r\n                var l2 = new CodeLabeledStatement(Label2);\r\n                l2.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(l2, statement);\r\n            }\r\n            /// <summary>Translates block statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <remarks>Blocks are flattened</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Some statemen is not supported <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/></exception>\r\n            protected void TranslateStatement(BlockStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                TranslateBlock(statement.Statements, method, block);\r\n            }\r\n            private static int foreachcnt = 0;\r\n            /// <summary>Translates for-each statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Expression or statement used in this statement is not supported (see <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/>, <see cref=\"TranslateVariableUse\"/>)</exception>\r\n            protected void TranslateStatement(ForeachStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref  Method, ref Block, statement);\r\n                if (Block != null) Block.ResetInsertContextToEnd();\r\n                string Array2 = string.Format(\"__foreach_copy_of_array__{0:000}\", foreachcnt);\r\n                string ContInd = string.Format(\"__foreach_continue_indicator__{0:000}\", foreachcnt++);\r\n                string Label1 = LabelName(Loops.Foreach, true);\r\n                string Label2 = LabelName(Loops.Foreach, false);\r\n                var declarearray2 = new CodeVariableDeclarationStatement(typeof(PhpArray), Array2);\r\n                declarearray2.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(declarearray2, statement);\r\n                var initarray2 = new CodeAssignStatement(new CodeVariableReferenceExpression(Array2),\r\n                    TranslateExpression(statement.Enumeree, Method, Block));\r\n                initarray2.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(initarray2, statement);\r\n                CodeTypeReferenceExpression PhpArrays = new CodeTypeReferenceExpression(\"PHP.Library.PhpArrays\");\r\n                CodeIterationStatement For = new CodeIterationStatement(\r\n                    new CodeVariableDeclarationStatement(\r\n                        typeof(object), ContInd, new CodeMethodInvokeExpression(\r\n                            PhpArrays, \"Reset\", new CodeExpression[] { new CodeVariableReferenceExpression(Array2) })),\r\n                    new CodeBinaryOperatorExpression(\r\n                        new CodeVariableReferenceExpression(ContInd), CodeBinaryOperatorType.IdentityInequality,\r\n                        new CodePrimitiveExpression(false)),\r\n                    new CodeAssignStatement(new CodeVariableReferenceExpression(ContInd),\r\n                        new CodeMethodInvokeExpression(PhpArrays, \"Next\", new CodeExpression[]{\r\n                            new CodeVariableReferenceExpression(Array2)})));\r\n                For.LinePragma = getPragma(GetLine(statement));\r\n                ForStatementContext context = new ForStatementContext(Method, Block as BlockStatementContext, For, Label2, Label1, this);\r\n                block.AddObject(For, statement);\r\n                if (statement.KeyVariable != null)\r\n                {\r\n                    var Assignkey = new CodeAssignStatement(\r\n                            TranslateVariableUse(statement.KeyVariable.Variable, method, context),\r\n                            new CodeMethodInvokeExpression(PhpArrays, \"Key\",\r\n                                new CodeExpression[] { new CodeVariableReferenceExpression(Array2) }));\r\n                    Assignkey.LinePragma = getPragma(GetLine(statement));\r\n                    For.Statements.Add(Assignkey);\r\n                }\r\n                var assingcurrent = new CodeAssignStatement(\r\n                        TranslateVariableUse(statement.ValueVariable.Variable, method, context),\r\n                        new CodeMethodInvokeExpression(PhpArrays, \"Current\",\r\n                        new CodeExpression[] { new CodeVariableReferenceExpression(Array2) }));\r\n                assingcurrent.LinePragma = getPragma(GetLine(statement));\r\n                For.Statements.Add(assingcurrent);\r\n                TranslateBlock(new Statement[] { statement.Body }, method, context);\r\n                var label1 = new CodeLabeledStatement(Label1);\r\n                label1.LinePragma = getPragma(GetLine(statement));\r\n                For.Statements.Add(label1);\r\n                var label2 = new CodeLabeledStatement(Label2);\r\n                label2.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(label2, statement);\r\n            }\r\n            /// <summary>Translates for statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Parent block does not support adding of required statements.\r\n            /// =or=\r\n            /// Any sub-statement or expression in for loop is not supported (see <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/>, <see cref=\"TranslateExpression\"/>)\r\n            /// </exception>\r\n            protected void TranslateStatement(ForStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref  Method, ref Block, statement);\r\n                if (Block != null) Block.ResetInsertContextToEnd();\r\n                CodeIterationStatement For = new CodeIterationStatement();\r\n                For.LinePragma = getPragma(GetLine(statement));\r\n                if (statement.InitExList.Count > 1)//If there is more than 1 initializations\r\n                    for (int i = 0; i < statement.InitExList.Count - 1; i++)\r\n                        block.AddObject(TranslateExpression(statement.InitExList[i], Method, Block), statement);\r\n                if (statement.InitExList.Count > 0)\r\n                {\r\n                    For.InitStatement = new CodeExpressionStatement(TranslateExpression(statement.InitExList[statement.InitExList.Count - 1], Method, Block));\r\n                    For.InitStatement.LinePragma = getPragma(GetLine(statement.InitExList[statement.InitExList.Count - 1]));\r\n                }\r\n                if (statement.CondExList.Count > 1)//If there is more than one 'conditions'\r\n                    for (int i = 0; i < statement.CondExList.Count - 1; i++)\r\n                        block.AddObject(TranslateExpression(statement.CondExList[i], Method, Block), statement);\r\n                if (statement.CondExList.Count > 0)\r\n                    For.TestExpression = TranslateExpression(statement.CondExList[statement.CondExList.Count - 1], Method, Block);\r\n                block.AddObject(For, statement);\r\n                string Label1 = LabelName(Loops.For, true);\r\n                string Label2 = LabelName(Loops.For, false);\r\n                ForStatementContext context = new ForStatementContext(Method, Block as BlockStatementContext, For, Label2, Label1, this);\r\n                TranslateBlock(new List<Statement>(new Statement[] { statement.Body }), method, context);\r\n                For.Statements.Add(new CodeLabeledStatement(Label1));\r\n                context.ResetInsertContextToEnd();\r\n                if (statement.ActionExList.Count > 1)//If there is more than one incementations\r\n                    for (int i = 0; i < statement.ActionExList.Count - 1; i++)\r\n                        context.AddObject(TranslateExpression(statement.ActionExList[i], method, context), statement);\r\n                if (statement.ActionExList.Count > 0)\r\n                {\r\n                    For.IncrementStatement = new CodeExpressionStatement(TranslateExpression(statement.ActionExList[statement.ActionExList.Count - 1], method, context));\r\n                    For.IncrementStatement.LinePragma = getPragma(GetLine(statement.ActionExList[statement.ActionExList.Count - 1]));\r\n                }\r\n                if (statement.CondExList.Count > 1)//If there is more than one condition\r\n                    for (int i = 0; i < statement.CondExList.Count - 1; i++)\r\n                        context.AddObject(TranslateExpression(statement.CondExList[i], method, context), statement);\r\n                block.AddObject(new CodeLabeledStatement(Label2), statement);\r\n            }\r\n            /// <summary>Translates if statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Part of If statement is not supported (see <see cref=\"TranslateConditions\"/>) =or= if statement cannot be placed in current block =or= <paramref name=\"method\"/> is not <see cref=\"MethodContext\"/></exception>\r\n            protected void TranslateStatement(IfStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref  Method, ref Block, statement);\r\n                if (Block != null) Block.ResetInsertContextToEnd();\r\n                TranslateConditions(statement.Conditions, 0, Method, block);\r\n            }\r\n            /// <summary>Counter for labels used by <see cref=\"TranslateStatement(SwitchStmt,MethodContextBase,IBlockContext)\"/></summary>\r\n            protected int switch_case = 0;\r\n            /// <summary>Translates switch statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <remarks>Switch is translates to if-s and goto-s</remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Item of switch statement is neither <see cref=\"CaseItem\"/> nor <see cref=\"DefaultItem\"/>\r\n            /// =or=\r\n            /// Parent block does not support adding required statements\r\n            /// =or=\r\n            /// Statement or expression insite switch statement is not supported (see <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/>, <see cref=\"TranslateExpression\"/>)\r\n            /// </exception>\r\n            protected void TranslateStatement(SwitchStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref  Method, ref Block, statement);\r\n                if (Block != null) Block.ResetInsertContextToEnd();\r\n                string SwitchVar = SwitchVarName;\r\n                var switchvar = new CodeVariableDeclarationStatement(typeof(object), SwitchVar);\r\n                switchvar.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(switchvar, statement);\r\n                var initswitchvar = new CodeAssignStatement(\r\n                    new CodeVariableReferenceExpression(SwitchVar),\r\n                    TranslateExpression(statement.SwitchValue, Method, Block));\r\n                initswitchvar.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(initswitchvar, statement);\r\n                string Label2 = LabelName(Loops.Switch, false);\r\n                int switchNo = switch_case++;\r\n                for (int i = 0; i < statement.SwitchItems.Length; i++)\r\n                {\r\n                    SwitchItem CurrentItem = statement.SwitchItems[i];\r\n                    CodeExpression Condition;\r\n                    if (CurrentItem is CaseItem)\r\n                        Condition = new CodeBinaryOperatorExpression(\r\n                            new CodeVariableReferenceExpression(SwitchVar),\r\n                            CodeBinaryOperatorType.ValueEquality,\r\n                            TranslateExpression(((CaseItem)CurrentItem).CaseVal, Method, Block));\r\n                    else if (CurrentItem is DefaultItem)\r\n                        Condition = new CodePrimitiveExpression(true);\r\n                    else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unknown_switch, CurrentItem.GetType().FullName), CurrentItem);\r\n                    CodeConditionStatement CurrentIf = new CodeConditionStatement(Condition);\r\n                    CurrentIf.LinePragma = getPragma(GetLine(CurrentItem));\r\n                    CurrentIf.TrueStatements.Add(new CodeLabeledStatement(\r\n                        string.Format(\"__switch__{0:000}__case{1:000}\", switchNo, i)));\r\n                    CurrentIf.TrueStatements[CurrentIf.TrueStatements.Count - 1].LinePragma = getPragma(GetLine(CurrentItem));\r\n                    CaseContext context = new CaseContext(Method, Block as BlockStatementContext, CurrentIf, Label2, this);\r\n                    block.AddObject(CurrentIf, statement);\r\n                    TranslateBlock(CurrentItem.Statements, method, context);\r\n                    if (i < statement.SwitchItems.Length - 1)\r\n                    {\r\n                        var GoTo = new CodeGotoStatement(string.Format(\"__switch__{0:000}__case{1:000}\", switchNo, i + 1));\r\n                        GoTo.LinePragma = getPragma(GetLine(statement.SwitchItems[i]));\r\n                        CurrentIf.TrueStatements.Add(GoTo);\r\n                    }\r\n                }\r\n                var label2 = new CodeLabeledStatement(Label2);\r\n                label2.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(label2, statement);\r\n            }\r\n            /// <summary>Translates try statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Some part of statement is not supported (see <see cref=\"TranslateBlock(IEnumerable&lt;Statement>,MethodContextBase,IBlockContext)\"/>, <see cref=\"TranslateDirectVarUse(DirectVarUse,MethodContextBase)\"/>)</exception>\r\n            protected void TranslateStatement(TryStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                MethodContext Method = null; ICodeBlockContext Block = null;\r\n                MethodAndBlock(method, block, ref  Method, ref Block, statement);\r\n                CodeTryCatchFinallyStatement Try = new CodeTryCatchFinallyStatement();\r\n                Try.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(Try, statement);\r\n                TryStatementContext TryContext = new TryStatementContext(Method, Block as BlockStatementContext, Try, this);\r\n                TranslateBlock(statement.Statements, Method, TryContext);\r\n                if (statement.Catches != null)\r\n                    foreach (CatchItem Catch in statement.Catches)\r\n                    {\r\n                        Try.CatchClauses.Add(new CodeCatchClause(TranslateDirectVarUse(Catch.Variable, Method), TranslateTypeRef(Catch.TypeRef, Method)));\r\n                        CatchStatementContext @catch = new CatchStatementContext(Method, Block as BlockStatementContext, Try, Try.CatchClauses.Count - 1, this);\r\n                        TranslateBlock(Catch.Statements, Method, @catch);\r\n                    }\r\n            }\r\n            #endregion\r\n            #region Single-line\r\n            /// <summary>Translates empty statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <remarks>This method actually does nothing</remarks>\r\n            protected void TranslateStatement(EmptyStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                //Do nothing\r\n            }\r\n            /// <summary>Translates echo statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Statement cannot be added to current block =or= Expression is not supported (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            protected void TranslateStatement(EchoStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                foreach (Expression PHPExpr in statement.Parameters)\r\n                {\r\n                    CodeExpressionStatement stm = new CodeExpressionStatement(\r\n                        new CodeMethodInvokeExpression(\r\n                            CurrentContext, \"Echo\",\r\n                            new CodeExpression[] { TranslateExpression(PHPExpr, method, getIC(block)) }));\r\n                    stm.LinePragma = getPragma(GetLine(statement));\r\n                    block.AddObject(stm, statement);\r\n                }\r\n            }\r\n            /// <summary>Translates expression statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Statement cannot be added to curent block =or= Part of expression is not supported (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            /// <remarks>If expression contained in statement is <see cref=\"ValueAssignEx\"/> then <see cref=\"CodeAssignStatement\"/> is produced; otheriwise <see cref=\"CodeExpressionStatement\"/>.</remarks>\r\n            protected void TranslateStatement(ExpressionStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                const string TypeSet = \"TypeSet\";\r\n                if (statement.Expression is ValueAssignEx)\r\n                {\r\n                    CodeAssignStatement cas = new CodeAssignStatement(\r\n                        TranslateVariableUse(((ValueAssignEx)statement.Expression).LValue, method, getIC(block)),\r\n                        TranslateExpression(((ValueAssignEx)statement.Expression).RValue, method, getIC(block)));\r\n                    cas.LinePragma = getPragma(GetLine(statement));\r\n                    block.AddObject(cas, statement);\r\n                    //this members and local variables typing\r\n                    //this is not necessary for WinForms itself designer to work, but it is nice side effect of necessity to track types in order to distinguish fields and properties when member is referenced. \r\n                    if (\r\n                        cas.Left is CodeFieldReferenceExpression &&\r\n                        ((CodeFieldReferenceExpression)cas.Left).TargetObject is CodeThisReferenceExpression &&\r\n                        cas.Right is CodeObjectCreateExpression &&\r\n                        method.Class != null &&\r\n                        method.Class.getPropertyOrField(((CodeFieldReferenceExpression)cas.Left).FieldName) != null &&\r\n                        method.Class.getPropertyOrField(((CodeFieldReferenceExpression)cas.Left).FieldName) is CodeMemberField &&\r\n                        !method.Class.getPropertyOrField(((CodeFieldReferenceExpression)cas.Left).FieldName).UserData.Contains(TypeSet)\r\n                    )\r\n                    {//Types of this class members\r\n                        CodeMemberField cmf = (CodeMemberField)method.Class.getPropertyOrField(((CodeFieldReferenceExpression)cas.Left).FieldName);\r\n                        CodeFieldReferenceExpression thf = (CodeFieldReferenceExpression)cas.Left;\r\n                        if (TypeEquals(cmf.Type, new CodeTypeReference(typeof(object))))\r\n                        {\r\n                            cmf.Type = ((CodeObjectCreateExpression)cas.Right).CreateType;\r\n                            cmf.UserData.Add(TypeSet, true);\r\n                        }\r\n                        else if (!TypeEquals(cmf.Type, ((CodeObjectCreateExpression)cas.Right).CreateType))\r\n                        {\r\n                            cmf.Type = new CodeTypeReference(typeof(object));\r\n                            cmf.UserData.Add(TypeSet, true);\r\n                        }\r\n                    }\r\n                    else if (\r\n                       cas.Left is CodeVariableReferenceExpression &&\r\n                       cas.Right is CodeObjectCreateExpression &&\r\n                       method.Contains(((CodeVariableReferenceExpression)cas.Left).VariableName) &&\r\n                       !method[((CodeVariableReferenceExpression)cas.Left).VariableName].UserData.Contains(TypeSet)\r\n                   )\r\n                    {//Types of local variables\r\n                        if (\r\n                            TypeEquals(method[((CodeVariableReferenceExpression)cas.Left).VariableName].Type, new CodeTypeReference(typeof(object)))\r\n                        )\r\n                        {\r\n                            method[((CodeVariableReferenceExpression)cas.Left).VariableName].Type = ((CodeObjectCreateExpression)cas.Right).CreateType;\r\n                            method[((CodeVariableReferenceExpression)cas.Left).VariableName].UserData.Add(TypeSet, true);\r\n                        }\r\n                        else if (\r\n                           !TypeEquals(method[((CodeVariableReferenceExpression)cas.Left).VariableName].Type, ((CodeObjectCreateExpression)cas.Right).CreateType)\r\n                       )\r\n                        {\r\n                            method[((CodeVariableReferenceExpression)cas.Left).VariableName].Type = new CodeTypeReference(typeof(object));\r\n                            method[((CodeVariableReferenceExpression)cas.Left).VariableName].UserData.Add(TypeSet, true);\r\n                        }\r\n                    }\r\n                }\r\n                else if (\r\n                      (EventMode == EventModes.AllPossible || EventMode == EventModes.WithDelegateOnly) &&\r\n                      statement.Expression is DirectFcnCall &&\r\n                      (((DirectFcnCall)statement.Expression).QualifiedName.Name.Value == \"Remove\" || ((DirectFcnCall)statement.Expression).QualifiedName.Name.Value == \"Add\") &&\r\n                      ((DirectFcnCall)statement.Expression).CallSignature.GenericParams.Length == 0 &&\r\n                      ((DirectFcnCall)statement.Expression).CallSignature.Parameters.Length == 1 &&\r\n                      (EventMode == EventModes.AllPossible || (((DirectFcnCall)statement.Expression).CallSignature.Parameters[0].Expression is NewEx && LooksLikeDelegate((NewEx)((DirectFcnCall)statement.Expression).CallSignature.Parameters[0].Expression))) &&\r\n                      ((DirectFcnCall)statement.Expression).IsMemberOf is DirectVarUse\r\n                      )\r\n                    TranslateEvent((DirectFcnCall)statement.Expression, method, block);\r\n                else\r\n                {\r\n                    var ces = new CodeExpressionStatement(TranslateExpression(statement.Expression, method, getIC(block)));\r\n                    ces.LinePragma = getPragma(GetLine(statement));\r\n                    block.AddObject(ces, statement);\r\n                }\r\n            }\r\n            /// <summary>Translate event attach or detach from PHP to CodeDOM</summary>\r\n            /// <param name=\"dfc\">Expression used to attach/detach event in PHP</param>\r\n            /// <param name=\"method\">GetUserEntryPoint for declaring local variables</param>\r\n            /// <param name=\"block\">Block for inserting statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Any sub-construct is not supported (see <see cref=\"TranslateExpression\"/>, <see cref=\"TranslateVarLikeConstructUse\"/>)\r\n            /// =or=\r\n            /// Name of event accessor is neither Add nor Remove\r\n            /// =or=\r\n            /// <paramref name=\"dfc\"/> is invalid\r\n            /// </exception>\r\n            /// <remarks>\r\n            /// PHP adds/removes event listeners using syntax (target)->EventName->Add/Remove((listener)) this requires <paramref name=\"dfc\"/> to:\r\n            /// <see cref=\"DirectFcnCall.QualifiedName\">QualifiedName</see> is 'Add' or 'Remove',\r\n            /// <see cref=\"FunctionCall.CallSignature\">CallSignature</see>.<see cref=\"CallSignature.GenericParams\">GenericParams</see> is empty,\r\n            /// <see cref=\"FunctionCall.CallSignature\">CallSignature</see>.<see cref=\"CallSignature.Parameters\">Parameters</see> has one item - the evcent listener,\r\n            /// <see cref=\"VarLikeConstructUse.IsMemberOf\">IsMemberOf</see> is <see cref=\"DirectVarUse\"/> with name of the event in <see cref=\"DirectVarUse.VarName\">VarName</see>,\r\n            /// <see cref=\"VarLikeConstructUse.IsMemberOf\">IsMemberOf</see>.<see cref=\"VarLikeConstructUse.IsMemberOf\">IsMemberOf</see> is not null (it is target of event).\r\n            /// </remarks>\r\n            protected void TranslateEvent(DirectFcnCall dfc, MethodContextBase method, IBlockContext block)\r\n            {\r\n                try\r\n                {\r\n                    CodeExpression target = TranslateVarLikeConstructUse(((DirectVarUse)dfc.IsMemberOf).IsMemberOf, method, getIC(block));\r\n                    string name = ((DirectVarUse)dfc.IsMemberOf).VarName.Value;\r\n                    CodeExpression @delegate = TranslateExpression(dfc.CallSignature.Parameters[0].Expression, method, getIC(block));\r\n                    switch (dfc.QualifiedName.Name.Value)\r\n                    {\r\n                        case \"Add\":\r\n                            var stm = new CodeAttachEventStatement(target, name, @delegate);\r\n                            stm.LinePragma = getPragma(GetLine(dfc));\r\n                            block.AddObject(stm, dfc);\r\n                            return;\r\n                        case \"Remove\":\r\n                            var stmR = new CodeRemoveEventStatement(target, name, @delegate);\r\n                            stmR.LinePragma = getPragma(GetLine(dfc));\r\n                            block.AddObject(stmR, dfc);\r\n                            return;\r\n                        default: throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_unknown_event_op, dfc);\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_invalid_event, ex, dfc);\r\n                }\r\n            }\r\n            /// <summary>Translates goto statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Statement cannot be added into current block</exception>\r\n            protected void TranslateStatement(GotoStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                CodeGotoStatement GoTo = new CodeGotoStatement(statement.LabelName.Value);\r\n                GoTo.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(GoTo, statement);\r\n            }\r\n            /// <summary>Translates jump statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// Break/continue argument is not integral literal.\r\n            /// =or=\r\n            /// Current block does not support adding goto statements (for break/continue).\r\n            /// =or=\r\n            /// Current block does not (correctly) support adding of <see cref=\"CodeBreakTargetRequest\"/> (for break/continue).\r\n            /// =or=\r\n            /// Current block does not support reaturn statements (for return)\r\n            /// =or=\r\n            /// Return expression is not supported (as goes from <see cref=\"TranslateExpression\"/>)\r\n            /// </exception>\r\n            protected void TranslateStatement(JumpStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                if (statement.Type == JumpStmt.Types.Return)\r\n                {\r\n                    if (statement.Expression == null)\r\n                    {\r\n                        var ret = new CodeMethodReturnStatement();\r\n                        ret.LinePragma = getPragma(GetLine(statement));\r\n                        block.AddObject(ret, statement);\r\n                    }\r\n                    else\r\n                    {\r\n                        var ret = new CodeMethodReturnStatement(TranslateExpression(statement.Expression, method, block is IStatementInsertContext ? (IStatementInsertContext)block : null));\r\n                        ret.LinePragma = getPragma(GetLine(statement));\r\n                        block.AddObject(ret, statement);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    int levels;\r\n                    if (statement.Expression == null) levels = 1;\r\n                    else if (statement.Expression is IntLiteral) levels = (int)((IntLiteral)statement.Expression).Value;\r\n                    else if (statement.Expression is LongIntLiteral) levels = (int)(long)((LongIntLiteral)statement.Expression).Value;\r\n                    else throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_break_non_constant, statement);\r\n                    CodeBreakTargetRequest btr = new CodeBreakTargetRequest(levels, statement.Type, statement);\r\n                    block.AddObject(btr, statement);\r\n                    if (btr.Target != null && btr.Target != \"\")\r\n                    {\r\n                        var GoTo = new CodeGotoStatement(btr.Target);\r\n                        GoTo.LinePragma = getPragma(GetLine(statement));\r\n                        block.AddObject(GoTo, statement);\r\n                    }\r\n                    else\r\n                        throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_no_jump_label, statement);\r\n                }\r\n            }\r\n            /// <summary>Translates label statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Current block does not allow adding of this type of statement</exception>\r\n            protected void TranslateStatement(LabelStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                CodeLabeledStatement lbl = new CodeLabeledStatement(statement.Name.Value);\r\n                lbl.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(lbl, statement);\r\n            }\r\n            /// <summary>Translates static statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n            /// <paramref name=\"method\"/> is not <see cref=\"MethodContext\"/>.\r\n            /// =or=\r\n            /// Parent of <paramref name=\"method\"/> does not accept field declaration.\r\n            /// =or=\r\n            /// There are two static variables with same name in the method.\r\n            /// =or=\r\n            /// <see cref=\"TranslateExpression\"/> does not support expression used to initialize the variable (if any).\r\n            /// </exception>\r\n            protected void TranslateStatement(StaticStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                if (method is MethodContext)\r\n                {\r\n                    foreach (StaticVarDecl var in statement.StVarList)\r\n                    {\r\n                        string stvName = string.Format(\"__static_variable__{0}__for__{1}\", var.Variable.VarName.Value, ((MethodContext)method).Context.Name);\r\n                        if (!((MethodContext)method).StaticVariables.ContainsKey(var.Variable.VarName.Value))\r\n                        {\r\n                            var field = new CodeMemberField(typeof(object), stvName);\r\n                            field.LinePragma = getPragma(GetLine(statement));\r\n                            CodeMemberField fld = (CodeMemberField)\r\n                                ((MethodContext)method).Parent.AddObject(field, statement);\r\n                            fld.Attributes = MemberAttributes.Private | MemberAttributes.Static;\r\n                            ((MethodContext)method).StaticVariables.Add(var.Variable.VarName.Value, stvName);\r\n                            if (var.Initializer != null)\r\n                                fld.InitExpression = TranslateExpression(var.Initializer, method, block is IStatementInsertContext ? (IStatementInsertContext)block : null);\r\n                        }\r\n                        else\r\n                            throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_2_stat_vars_with_same_name, statement);\r\n                    }\r\n                }\r\n                else\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_static_var_otside_method, statement);\r\n            }\r\n            /// <summary>Translates throw statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Expression that produces exception being thrown is not supported (see <see cref=\"TranslateExpression\"/>)</exception>\r\n            protected void TranslateStatement(ThrowStmt statement, MethodContextBase method, IBlockContext block)\r\n            {\r\n                CodeThrowExceptionStatement Throw = new CodeThrowExceptionStatement(TranslateExpression(statement.Expression, method, getIC(block)));\r\n                Throw.LinePragma = getPragma(GetLine(statement));\r\n                block.AddObject(Throw, statement);\r\n            }\r\n            /// <summary>Translates unset statement from PHP to CodeDOM</summary><param name=\"statement\">Statement to translate</param><param name=\"method\">GetUserEntryPoint for declaring local variables</param><param name=\"block\">Block for adding statements</param>\r\n            /// <remarks>\r\n            /// All unset statements are translated as assignment of null, which is actual behavior of PHP only for local variables.\r\n            /// In order to distinguish if translation is correct or not localo variables are set directly to null and in other cases <see cref=\"Helper.unset\"/> is used\r\n            /// </remarks>\r\n            /// <exception cref=\"PhpToCodeDomNotSupportedException\">Unseted variable consists of unsupported construct (<see cref=\"TranslateVariableUse\"/>)</exception>\r\n            protected void TranslateStatement(UnsetStmt /*!*/statement, MethodContextBase /*!*/method, IBlockContext /*!*/ block)\r\n            {\r\n                foreach (VariableUse var in statement.VarList)\r\n                {\r\n                    CodeStatement stm = new CodeAssignStatement(TranslateVariableUse(var, method, getIC(block)),\r\n                        (var is DirectVarUse && var.IsMemberOf == null) ?\r\n                        (CodeExpression)new CodePrimitiveExpression(null) :\r\n                        (CodeExpression)new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(Helper)), \"unset\"));\r\n                    stm.LinePragma = getPragma(GetLine(statement));\r\n                    /*if(var is IndirectVarUse) {\r\n                    } else if(var is DirectVarUse) {\r\n                        if(var.IsMemberOf == null) \r\n                            stm = new CodeAssignStatement(TranslateVariableUse(var,method), new CodePrimitiveExpression(null));\r\n                        else\r\n                            stm = new CodeExpressionStatement(\r\n                                new CodeMethodInvokeExpression(\r\n                                    new CodeTypeReferenceExpression(typeof(Convert)),\r\n                                    \"UnsetProperty\",\r\n                                    new CodeExpression[]{\r\n                                        TranslateVarLikeConstructUse(var.IsMemberOf,method),\r\n                                        ((DirectVarUse)var).VarName,\r\n                                        \r\n                    } else if(var is ItemUse) {\r\n                        stm = new CodeExpressionStatement(\r\n                            new CodeMethodInvokeExpression(\r\n                                new CodeTypeReferenceExpression(typeof(Operators)),\"UnsetItem\",\r\n                                new CodeExpression[]{\r\n                                    TranslateVariableUse(((ItemUse)var).Array, method),\r\n                                    TranslateExpression(((ItemUse)var).Index, method)\r\n                                }));\r\n                    } else if(var is DirectStFldUse){\r\n                    } else if(var is IndirectStFldUse){\r\n                    }else throw new PhpToCodeDomNotSupportedException(string.Format(\"Unsupported variable use {0} reached.\",var.GetType().FullName));\r\n                    */\r\n                    block.AddObject(stm, statement);\r\n                }\r\n            }\r\n\r\n            #endregion\r\n            #endregion\r\n\r\n            /// <summary>Gets CLR name of <see cref=\"QualifiedName\"/> without trailing dot (.)</summary>\r\n            /// <param name=\"name\"><see cref=\"QualifiedName\"/> to get name for.</param>\r\n            /// <returns>CLR name of <see cref=\"QualifiedName\"/> without trailing dot (.)</returns>\r\n            private String getCLRName(QualifiedName name)\r\n            {\r\n                String CLR = name.ToClrNotation(0, 0);\r\n                if (CLR.EndsWith(\".\")) return CLR.Substring(0, CLR.Length - 1);\r\n                return CLR;\r\n            }\r\n            #region Contexts\r\n            #region Bases\r\n            /// <summary>Represent context for local variables</summary>\r\n            /// <remarks>\r\n            /// This class implements context where no local variables are present (such as class or namespace).\r\n            /// Derived class for methods (and CTors, accessors etc.) is <see cref=\"MethodContext\"/>\r\n            /// </remarks>\r\n            protected class MethodContextBase : IEnumerable<string>\r\n            {\r\n                /// <summary>If overriden in derived class returns <see cref=\"T:System.Collections.Generic.List`1[System.String]\"/> that enumerates through list of names of local variables.</summary>\r\n                /// <returns>Instance of <see cref=\"T:System.Collections.Generic.IEnumerator`1[System.String]\"/> that enumerates through list of names of local variables (if current context supports local variables; otherwise it enumerates through empty list of items)</returns>\r\n                virtual public IEnumerator<string> GetEnumerator()\r\n                {\r\n                    return new List<string>().GetEnumerator();\r\n                }\r\n                /// <summary>Gets value indicating if given name is contained in list of local variables</summary>\r\n                /// <param name=\"Name\">Name to search for</param>\r\n                /// <returns>True if name if present otherwise false</returns>\r\n                virtual public bool Contains(string Name)\r\n                {\r\n                    foreach (string name in this)\r\n                        if (name == Name) return true;\r\n                    return false;\r\n                }\r\n                /// <summary>If implemented in derived class gets <see cref=\"CodeVariableDeclarationStatement\"/> for variable with given name</summary>\r\n                /// <param name=\"index\">Name of variable</param>\r\n                /// <remarks>If derived class returns true from <see cref=\"CanAdd\"/>, it must support this property</remarks>\r\n                /// <exception cref=\"NotImplementedException\">This property is not implemented in derived class. This implementation throws it always.</exception>\r\n                /// <example cref=\"KeyNotFoundException\">Variable with name <paramref name=\"index\"/> is not declared</example>\r\n                virtual public CodeVariableDeclarationStatement this[string index]\r\n                {\r\n                    get { throw new NotImplementedException(Localizations.Strings.cdp_unsup_loc_var_context); }\r\n                }\r\n                /// <summary>Implements <see cref=\"System.Collections.IEnumerable.GetEnumerator\"/></summary>\r\n                /// <returns><see cref=\"GetEnumerator\"/></returns>\r\n                /// <remarks>Use type-safe <see cref=\"GetEnumerator\"/> instead.</remarks>\r\n                [Obsolete(\"Use type-safe GetEnumerator instead\")]\r\n                System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n                {\r\n                    return GetEnumerator();\r\n                }\r\n                /// <summary>If implemented in derived class adds name of local variable into list of local variables' names and declares that variable</summary>\r\n                /// <param name=\"name\">Name of variable to add. Note: This method can change the name</param>\r\n                /// <returns>Variable declaration (or null if no variable was added due to duplicity)</returns>\r\n                /// <exception cref=\"NotSupportedException\">This implementation throws it always. Any implementation can throw it if any or specific variable cannot be added.</exception>\r\n                virtual public CodeVariableDeclarationStatement Add(ref string name)\r\n                {\r\n                    throw new NotSupportedException(Localizations.Strings.cdp_unsup_loc_var_class_namespace);\r\n                }\r\n                /// <summary>Returns value indicating if local variables can be added into this context</summary>\r\n                /// <returns>This implementation always returns false</returns>\r\n                /// <remarks>Instance returning true must support <see craf=\"Add\"/>, <see cref=\"GetEnumerator\"/> and <see cref=\"this\"/></remarks>\r\n                virtual public bool CanAdd { get { return false; } }\r\n                /// <summary>If implemented in derived class returns class the method is in or null if method is not in class</summary>\r\n                /// <returns>This implementation always returns null</returns>\r\n                virtual public TypeContext Class { get { return null; } }\r\n            }\r\n            /// <summary>Provides base class for all containers the code can be placed inside such as file, namespace, class, method, try clausule etc.</summary>\r\n            protected interface IBlockContext\r\n            {\r\n                /// <summary>Adds <see cref=\"CodeObject\"/> into current context</summary>\r\n                /// <param name=\"Object\"><see cref=\"CodeObject\"/> to be added</param>\r\n                /// <returns><paramref name=\"Object\"/></returns>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">Object of type <b>T</b> is not supported in this block</exception>\r\n                CodeObject AddObject(CodeObject Object, LangElement throwOn);\r\n            }\r\n            /// <summary>Interface represents block of code where statements can be added and inserted</summary>\r\n            protected interface ICodeBlockContext : IBlockContext, IStatementInsertContext\r\n            {\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works after specified statement</summary>\r\n                /// <param name=\"Statement\">Statement after which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                void SetInsertContextAfter(CodeStatement Statement);\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works before specified statement</summary>\r\n                /// <param name=\"Statement\">Statement before which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                void SetInsertContextBefore(CodeStatement Statement);\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the beginning of block</summary>\r\n                void ResetInserContextToStart();\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the end of block</summary>\r\n                void ResetInsertContextToEnd();\r\n            }\r\n            /// <summary>Interface that allows inserting statements into itseltf</summary>\r\n            /// <remarks>Used when some PHP inline expression cannot be represented inline in CodeDOM</remarks>\r\n            protected interface IStatementInsertContext\r\n            {\r\n                /// <summary>Inserts statement into context</summary>\r\n                /// <param name=\"Statement\">Statement co insetr</param>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on if insertion is not supported</param>\r\n                /// <returns><paramref name=\"Statement\"/></returns>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">Insertion is not supported</exception>\r\n                CodeStatement Insert(CodeStatement /*!*/ Statement, LangElement /*!*/ throwOn);\r\n            }\r\n            /// <summary>Represents request for creating break (jump) statement target</summary>\r\n            /// <remarks>Thare must be specific support for this in acutal implementation of <see cref=\"IBlockContext\"/>.</remarks>\r\n            protected class CodeBreakTargetRequest : CodeObject\r\n            {\r\n                /// <summary>Containd value of the <see cref=\"Levels\"/> property</summary>\r\n                private int levels;\r\n                /// <summary>Contains value of the <see cref=\"Type\"/> property</summary>\r\n                private JumpStmt.Types type;\r\n                /// <summary>Type of this jump. Can be <see cref=\"JumpStmt.Types.Continue\"/> or <see cref=\"JumpStmt.Types.Break\"/></summary>\r\n                public JumpStmt.Types Type { get { return type; } }\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"levels\">Levels to break from current level (1 is default)</param>\r\n                /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"levels\"/> is less than 1</exception>\r\n                /// <param name=\"type\">Type of this jump (continue or break)</param>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"type\"/> is neither <see cref=\"JumpStmt.Types.Break\"/> nor <see cref=\"JumpStmt.Types.Continue\"/></exception>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                public CodeBreakTargetRequest(int levels, JumpStmt.Types type, LangElement /*!*/ throwOn)\r\n                {\r\n                    if (levels < 1) throw new ArgumentOutOfRangeException(\"levels\", Localizations.Strings.cdp_unsup_levels_0);\r\n                    this.levels = levels;\r\n                    if (type != JumpStmt.Types.Break && type != JumpStmt.Types.Continue) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_break_continue_only, throwOn);\r\n                    this.type = type;\r\n                }\r\n                /// <summary>Levels to break</summary>\r\n                /// <remarks><see cref=\"IBlockContext\"/> implementation is allowed to decrease this property when it implements one of levels being \"broken\" (for, foreach, switch, do, while).</remarks>\r\n                public int Levels { get { return levels; } set { levels = value; } }\r\n                /// <summary>Contains value of the <see cref=\"Target\"/> property</summary>\r\n                private string target;\r\n                /// <summary>This property is used by implementation of <see cref=\"IBlockContext\"/> to return name of lable that will became target of jump</summary>\r\n                public string Target { get { return target; } set { target = value; } }\r\n            }\r\n            /// <summary>Common base for all block statements (statements that can contain another statements)</summary>\r\n            protected abstract class BlockStatementContext : ICodeBlockContext\r\n            {\r\n                /// <summary>Statements in this block</summary>\r\n                protected abstract CodeStatementCollection Statements { get; }\r\n                /// <summary>Identifies this block as loop block</summary>\r\n                /// <remarks>This is for translation of break statements. Loops are for, do, while, foreach and switch</remarks>\r\n                protected abstract bool IsLoop { get; }\r\n                /// <summary>Statement this block is context for</summary>\r\n                protected abstract CodeStatement Context { get; }\r\n                /// <summary>Contains value of the <see cref=\"Method\"/> property</summary>\r\n                private /*!*/ MethodContext method;\r\n                /// <summary>GetUserEntryPoint this block lies in</summary>\r\n                public /*!*/ MethodContext Method { get { return method; } }\r\n                /// <summary>Contains value of the <see cref=\"Parent\"/> property</summary>\r\n                private BlockStatementContext parent;\r\n                /// <summary>Immediate parent of this block if it is another block statement</summary>\r\n                public BlockStatementContext Parent { get { return parent; } }\r\n                /// <summary>Immediate parent of this block. It can be another block or method.</summary>\r\n                public ICodeBlockContext AnyParent { get { return Parent == null ? (ICodeBlockContext)Method : (ICodeBlockContext)Parent; } }\r\n                /// <summary>Contains value of the <see cref=\"Owner\"/> property</summary>\r\n                private readonly PhpCodeDomParserImplementation owner;\r\n                /// <summary>Owner ofthis instance</summary>\r\n                protected PhpCodeDomParserImplementation Owner { get { return owner; } }\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint the block lies in</param>\r\n                /// <param name=\"block\">Immediate parent of this block if it is not <paramref name=\"method\"/></param>\r\n                /// <param name=\"owner\">Owner of this instance</param>\r\n                public BlockStatementContext(MethodContext /*!*/ method, BlockStatementContext block, PhpCodeDomParserImplementation owner)\r\n                {\r\n                    this.method = method;\r\n                    this.parent = block;\r\n                    this.owner = owner;\r\n                }\r\n                //private string currentFile;\r\n\r\n                #region Inserting statements\r\n                /// <summary>Index where inserted statemens are added. -1 means end of statement list.</summary>\r\n                private int InsertionPoint = -1;\r\n                /// <summary>Inserts statement into method</summary>\r\n                /// <param name=\"Statement\">Statement co insetr</param>\r\n                /// <param name=\"throwOn\">Ignored</param>\r\n                /// <returns><paramref name=\"Statement\"/></returns>\r\n                public virtual CodeStatement Insert(CodeStatement Statement, LangElement throwOn)\r\n                {\r\n                    if (InsertionPoint < 0)\r\n                        Statements.Add(Statement);\r\n                    else\r\n                        Statements.Insert(InsertionPoint++, Statement);\r\n                    return Statement;\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works after specified statement</summary>\r\n                /// <param name=\"Statement\">Statement after which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                public virtual void SetInsertContextAfter(CodeStatement Statement)\r\n                {\r\n                    int index = Statements.IndexOf(Statement);\r\n                    if (index >= 0) InsertionPoint = index + 1;\r\n                    else throw new ArgumentException(Localizations.Strings.cdp_statement_not_found, \"Statement\");\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works before specified statement</summary>\r\n                /// <param name=\"Statement\">Statement before which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                public virtual void SetInsertContextBefore(CodeStatement Statement)\r\n                {\r\n                    int index = Statements.IndexOf(Statement);\r\n                    if (index >= 0) InsertionPoint = index;\r\n                    else throw new ArgumentException(Localizations.Strings.cdp_statement_not_found, \"Statement\");\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the beginning of block</summary>\r\n                public virtual void ResetInserContextToStart()\r\n                {\r\n                    InsertionPoint = 0;\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the end of block</summary>\r\n                /// <remarks>This is default state</remarks>\r\n                public virtual void ResetInsertContextToEnd()\r\n                {\r\n                    InsertionPoint = -1;\r\n                }\r\n                #endregion\r\n\r\n                /// <summary>Adds object into current context</summary>\r\n                /// <param name=\"Object\">Object to add</param>\r\n                /// <returns><paramref name=\"Object\"/></returns>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">\r\n                /// <paramref name=\"Object\"/> is neither <see cref=\"CodeExpression\"/> nor <see cref=\"CodeStatement\"/> nor <see cref=\"CodeBreakTargetRequest\"/>\r\n                /// <param name=\"throwOn\">Element to thrown <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// </exception>\r\n                public virtual CodeObject AddObject(CodeObject Object, LangElement throwOn)\r\n                {\r\n                    if (Object is CodeExpression)\r\n                    {\r\n                        var exs = new CodeExpressionStatement((CodeExpression)Object);\r\n                        exs.LinePragma = Owner.getPragma(Owner.GetLine(throwOn));\r\n                        Statements.Add(exs);\r\n                    }\r\n                    else if (Object is CodeStatement)\r\n                        Statements.Add((CodeStatement)Object);\r\n                    else if (Object is CodeBreakTargetRequest)\r\n                    {\r\n                        if (IsLoop)\r\n                            if (((CodeBreakTargetRequest)Object).Levels == 1)\r\n                                GetJumpLabel((CodeBreakTargetRequest)Object, throwOn);\r\n                            else\r\n                            {\r\n                                --((CodeBreakTargetRequest)Object).Levels;\r\n                                AnyParent.AddObject(Object, throwOn);\r\n                            }\r\n                        else\r\n                            AnyParent.AddObject(Object, throwOn);\r\n                    }\r\n                    else\r\n                        throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_not_allowed_at_block_level, Object.GetType().Name), throwOn);\r\n                    return Object;\r\n                }\r\n                /// <summary>If overriden in derived class writes name of labe to jump to into given parameter</summary>\r\n                /// <param name=\"Jump\">Represents type of jump (break or continue) and is target of assignment of name of lable to jump to.</param>\r\n                /// <param name=\"throwOn\">Element to thrown <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">This implementation throws it always</exception>\r\n                public virtual void GetJumpLabel(CodeBreakTargetRequest Jump, LangElement /*!*/ throwOn)\r\n                {\r\n                    throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_only_loop_jump, throwOn);\r\n                }\r\n            }\r\n            #endregion\r\n\r\n            /// <summary>Represents context for local variable inside any method</summary>\r\n            protected sealed class MethodContext : MethodContextBase, ICodeBlockContext\r\n            {\r\n                /// <summary>GetUserEntryPoint represented by this context</summary>\r\n                public CodeMemberMethod Context { get { return context; } }\r\n                /// <summary>Declaration statements</summary>\r\n                private Dictionary<string, CodeVariableDeclarationStatement> declarations = new Dictionary<string, CodeVariableDeclarationStatement>();\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"Context\">GetUserEntryPoint that will becomme context for this instance</param>\r\n                /// <param name=\"parent\">Parent of this method (ie. class)</param>\r\n                /// <remarks>Do not add formal parameters to method after passed here!</remarks>\r\n                public MethodContext(CodeMemberMethod /*!*/ Context, IBlockContext /*!*/ parent)\r\n                {\r\n                    this.context = Context;\r\n                    foreach (CodeParameterDeclarationExpression Param in Context.Parameters)\r\n                        list.Add(Param.Name);\r\n                    this.parent = parent;\r\n                }\r\n                /// <summary>Contains value of the <see cref=\"Parent\"/> property</summary>\r\n                private IBlockContext/*!*/ parent;\r\n                /// <summary>Parent of this method (ie. class)</summary>\r\n                public IBlockContext /*!*/ Parent { get { return parent; } }\r\n                /// <summary>Returns value indicating if local variables can be added into this context</summary>\r\n                /// <returns>This implementation always returns true</returns>    \r\n                public override bool CanAdd { get { return true; } }\r\n                /// <summary>Context of this block</summary>\r\n                private CodeMemberMethod context;\r\n                /// <summary>List of names of local variables (including method formal parameters)</summary>\r\n                private List<string> list = new List<string>();\r\n                /// <summary>Index of last local variable declaration statement added to method</summary>\r\n                private int LastIndex = -1;\r\n                /// <summary>Adds name of local variable into list of local variables' names and declaret that variable.</summary>\r\n                /// <param name=\"name\">Name of variable to add. Note: This method can chnge the name.</param>\r\n                /// <returns>Variable declaration (or null if no variable was added due to duplicity)</returns>\r\n                public override CodeVariableDeclarationStatement Add(ref string /*!*/ name)\r\n                {\r\n                    if (rename_hack.ContainsKey(name))\r\n                    {\r\n                        name = rename_hack[name];\r\n                        return null;\r\n                    }\r\n                    else if (!list.Contains(name))\r\n                    {\r\n                        if (this.Context.Name == \"InitializeComponent\" && name == \"resources\")\r\n                        {\r\n                            //From some reason designer complains that \"The name 'resources' is already used by another object.\" when the \"resources\" name is reported. So, lets virually rename it. Designer renames it back to resources, but this does not matter as the name is correct for compilation.\r\n                            name = \"resources_hacked_variable_name_as_long_as_nobody_will_hopefully_use_it_as_name_of_local_variable_in_designergenrated_source_code_of_the_InitializeComponent_method\";\r\n                            rename_hack.Add(\"resources\", name);\r\n                        }\r\n                        CodeVariableDeclarationStatement ret;\r\n                        list.Add(name);\r\n                        Context.Statements.Insert(++LastIndex, ret = new CodeVariableDeclarationStatement(typeof(object), name));\r\n                        declarations.Add(name, ret);\r\n                        return ret;\r\n                    }\r\n                    return null;\r\n                }\r\n                /// <summary>local variable renaming hacks</summary>\r\n                private Dictionary<string, string> rename_hack = new Dictionary<string, string>();\r\n                /// <summary>Gets declaration statement for given variable</summary>\r\n                /// <param name=\"index\">name of variable to get declaration staatement for</param>\r\n                /// <exception cref=\"KeyNotFoundException\">Variable with name <paramref name=\"index\"/> is not declared</exception>\r\n                public override CodeVariableDeclarationStatement this[string index]\r\n                {\r\n                    get\r\n                    {\r\n                        return declarations[index];\r\n                    }\r\n                }\r\n                /// <summary>Gets value indicating if given name is contained in list of local variables</summary>\r\n                /// <param name=\"Name\">Name to search for</param>\r\n                /// <returns>True if name if present otherwise false</returns>\r\n                public override bool Contains(string Name)\r\n                {\r\n                    return list.Contains(Name);\r\n                }\r\n                /// <summary>Returns <see cref=\"T:System.Collections.Generic.IEnumerator`1[System.String]\"/> that enumerates through list of names of local variables.</summary>\r\n                /// <returns>Instance of <see cref=\"T:System.Collections.Generic.IEnumerator`1[System.String]\"/> that enumerates through list of names of local variables</returns>\r\n                public override IEnumerator<string> GetEnumerator()\r\n                {\r\n                    return list.GetEnumerator();\r\n                }\r\n                /// <summary>Adds <see cref=\"CodeObject\"/> into this method context</summary>\r\n                /// <param name=\"Object\">Object to be added</param>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// <returns><paramref name=\"Object\"/><paramref name=\"Object\"/> is neither <see cref=\"CodeExpression\"/> nor <see cref=\"CodeStatement\"/></returns> \r\n                public CodeObject AddObject(CodeObject Object, LangElement throwOn)\r\n                {\r\n                    if (Object is CodeExpression)\r\n                        Context.Statements.Add((CodeExpression)Object);\r\n                    else if (Object is CodeStatement)\r\n                        Context.Statements.Add((CodeStatement)Object);\r\n                    else\r\n                        throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_not_allowed_at_method_level, Object.GetType().Name), throwOn);\r\n                    return Object;\r\n                }\r\n                /// <summary>Index where inserted statemens are added. -1 means end of statement list.</summary>\r\n                private int InsertionPoint = -1;\r\n                /// <summary>Inserts statement into method</summary>\r\n                /// <param name=\"Statement\">Statement co insetr</param>\r\n                /// <param name=\"throwOn\">Ignored</param>\r\n                /// <returns><paramref name=\"Statement\"/></returns>\r\n                public CodeStatement Insert(CodeStatement Statement, LangElement throwOn)\r\n                {\r\n                    if (InsertionPoint < 0)\r\n                        Context.Statements.Add(Statement);\r\n                    else\r\n                        Context.Statements.Insert(InsertionPoint++, Statement);\r\n                    return Statement;\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works after specified statement</summary>\r\n                /// <param name=\"Statement\">Statement after which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                public void SetInsertContextAfter(CodeStatement Statement)\r\n                {\r\n                    int index = Context.Statements.IndexOf(Statement);\r\n                    if (index >= 0) InsertionPoint = index + 1;\r\n                    else throw new ArgumentException(Localizations.Strings.cdp_statement_not_found, \"Statement\");\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works before specified statement</summary>\r\n                /// <param name=\"Statement\">Statement before which <see cref=\"IStatementInsertContext\"/> will insert statements</param>\r\n                /// <exception cref=\"ArgumentException\"><paramref name=\"Statement\"/> is not one of statements in block</exception>\r\n                public void SetInsertContextBefore(CodeStatement Statement)\r\n                {\r\n                    int index = Context.Statements.IndexOf(Statement);\r\n                    if (index >= 0) InsertionPoint = index;\r\n                    else throw new ArgumentException(Localizations.Strings.cdp_statement_not_found, \"Statement\");\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the beginning of block</summary>\r\n                public void ResetInserContextToStart()\r\n                {\r\n                    InsertionPoint = 0;\r\n                }\r\n                /// <summary>Moves place where <see cref=\"IStatementInsertContext\"/> works at the end of block</summary>\r\n                /// <remarks>This is default state</remarks>\r\n                public void ResetInsertContextToEnd()\r\n                {\r\n                    InsertionPoint = -1;\r\n                }\r\n                /// <summary>Contains value of the <see cref=\"StaticVariables\"/> property</summary>\r\n                private readonly Dictionary<string, string> staticVariables = new Dictionary<string, string>();\r\n                /// <summary>Dictionary of static variables. Contains PHP names of static variables as keys and CodeDOM field names as values.</summary>\r\n                public Dictionary<string, string> StaticVariables { get { return staticVariables; } }\r\n                /// <summary>If block containing this method is <see cref=\"TypeContext\"/> returns it</summary>\r\n                /// <returns>Parent block of this method if it is <see cref=\"TypeContext\"/>; otherwise null</returns>\r\n                public override TypeContext Class\r\n                {\r\n                    get\r\n                    {\r\n                        if (parent is TypeContext) return (TypeContext)parent;\r\n                        return null;\r\n                    }\r\n                }\r\n            }\r\n\r\n            #region Block statements\r\n            /// <summary>Represents block of statements in try clausule</summary>\r\n            protected sealed class TryStatementContext : BlockStatementContext\r\n            {\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint in which statement lies</param>\r\n                /// <param name=\"parent\">Immediate parent of this statement (null if it lies directly in method)</param>\r\n                /// <param name=\"context\">Try-Catch-Finally statement which is context for this class</param>\r\n                /// <param name=\"owner\">owner of this instance</param>\r\n                public TryStatementContext(MethodContext /*!*/ method, BlockStatementContext parent, CodeTryCatchFinallyStatement /*!*/ context, PhpCodeDomParserImplementation owner)\r\n                    : base(method, parent, owner) { this.context = context; }\r\n                /// <summary>Current context</summary>\r\n                private /*!*/ CodeTryCatchFinallyStatement context;\r\n                /// <summary>Statements in try clausule</summary>\r\n                protected /*!*/ override CodeStatementCollection Statements { get { return context.TryStatements; } }\r\n                /// <summary>Current context</summary>\r\n                protected /*!*/ override CodeStatement Context { get { return context; } }\r\n                /// <summary>Try is not loop</summary>\r\n                protected override bool IsLoop { get { return false; } }\r\n            }\r\n            /// <summary>Represents block of statements in catch clausule</summary>\r\n            protected sealed class CatchStatementContext : BlockStatementContext\r\n            {\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint in which statement lies</param>\r\n                /// <param name=\"parent\">Immediate parent of this statement (null if it lies directly in method)</param>\r\n                /// <param name=\"context\">Try-Catch-Finally statement which is context for this class</param>\r\n                /// <param name=\"index\">Index of catch clausule in statement</param>\r\n                /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"index\"/> is greater than or equal to count of catch clausules in <paramref name=\"context\"/></exception>\r\n                /// <param name=\"owner\">Owner of this instance</param>\r\n                public CatchStatementContext(MethodContext /*!*/ method, BlockStatementContext parent, CodeTryCatchFinallyStatement /*!*/ context, int index, PhpCodeDomParserImplementation owner)\r\n                    : base(method, parent, owner) { this.context = context; if (index >= context.CatchClauses.Count) throw new ArgumentException(Localizations.Strings.cdp_index_not_within_catch_calusules, \"index\"); else this.index = index; }\r\n                /// <summary>Current context</summary>\r\n                private /*!*/ CodeTryCatchFinallyStatement context;\r\n                /// <summary>Index of catch clausule in context</summary>\r\n                private int index;\r\n                /// <summary>Statements in catch clausule</summary>\r\n                protected /*!*/ override CodeStatementCollection Statements { get { return Clausule.Statements; } }\r\n                /// <summary>Current context</summary>\r\n                protected /*!*/ override CodeStatement Context { get { return context; } }\r\n                /// <summary>Catch clausule that is context for this block</summary>\r\n                public CodeCatchClause Clausule { get { return context.CatchClauses[index]; } }\r\n                /// <summary>Catch is not loop</summary>\r\n                protected override bool IsLoop { get { return false; } }\r\n            }\r\n            /// <summary>Represents block of statements in finally clausule</summary>\r\n            protected sealed class FinallyStatementContext : BlockStatementContext\r\n            {\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint in which statement lies</param>\r\n                /// <param name=\"parent\">Immediate parent of this statement (null if it lies directly in method)</param>\r\n                /// <param name=\"context\">Try-Catch-Finally statement which is context for this class</param>\r\n                /// <param name=\"owner\">Owner of this instance</param>\r\n                public FinallyStatementContext(MethodContext /*!*/ method, BlockStatementContext parent, CodeTryCatchFinallyStatement /*!*/ context, PhpCodeDomParserImplementation owner)\r\n                    : base(method, parent, owner) { this.context = context; }\r\n                /// <summary>Current context</summary>\r\n                private /*!*/ CodeTryCatchFinallyStatement context;\r\n                /// <summary>Statements in finally clausule</summary>\r\n                protected /*!*/ override CodeStatementCollection Statements { get { return context.TryStatements; } }\r\n                /// <summary>Current context</summary>\r\n                protected /*!*/ override CodeStatement Context { get { return context; } }\r\n                /// <summary>Finally is not loop</summary>\r\n                protected override bool IsLoop { get { return false; } }\r\n            }\r\n            /// <summary>Represents context for 'if' and 'else' clausules of if statement</summary>\r\n            protected sealed class IfStatementContext : BlockStatementContext\r\n            {\r\n                /// <summary>Context of this block</summary>\r\n                private CodeConditionStatement /*!*/context;\r\n                /// <summary>True if this block represents 'else' clausule; otherwise false</summary>\r\n                private bool @else;\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint this statement is contained in</param>\r\n                /// <param name=\"block\">Immediate parent of this statement. Null if it is <paramref name=\"method\"/>.</param>\r\n                /// <param name=\"context\">Context this statement represents</param>\r\n                /// <param name=\"else\">True if this instance represents an 'else' clausule. Otherwise false.</param>\r\n                /// <param name=\"owner\">Owner of this intance</param>\r\n                public IfStatementContext(MethodContext /*!*/ method, BlockStatementContext block, CodeConditionStatement /*!*/ context, bool @else, PhpCodeDomParserImplementation owner)\r\n                    : base(method, block, owner)\r\n                {\r\n                    this.context = context;\r\n                    this.@else = @else;\r\n                }\r\n                /// <summary>Statements in this block</summary>\r\n                protected override CodeStatementCollection/*!*/ Statements\r\n                {\r\n                    get { return @else ? context.FalseStatements : context.TrueStatements; }\r\n                }\r\n                /// <summary>If is not a loop</summary>\r\n                protected override bool IsLoop { get { return false; } }\r\n                /// <summary>Context for this block</summary>\r\n                protected override CodeStatement /*!*/ Context { get { return context; } }\r\n            }\r\n            /// <summary>Represents context for case or default clausule of switch statement</summary>\r\n            protected sealed class CaseContext : BlockStatementContext\r\n            {\r\n                /// <summary>Name of label after whole switch statement</summary>\r\n                private string /*!*/endlabel;\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint this block is contained in</param>\r\n                /// <param name=\"block\">Block that is immediate parent of this switch statement. Null if it is <paramref name=\"method\"/>.</param>\r\n                /// <param name=\"context\">Context for this case clausule</param>\r\n                /// <param name=\"endlabel\">Name of label after whole switch statement</param>\r\n                /// <param name=\"owner\">Owner of this instance</param>\r\n                public CaseContext(MethodContext/*!*/ method, BlockStatementContext block, CodeConditionStatement /*!*/ context, string /*!*/ endlabel, PhpCodeDomParserImplementation owner)\r\n                    : base(method, block, owner)\r\n                {\r\n                    this.endlabel = endlabel;\r\n                    this.context = context;\r\n                }\r\n                /// <summary>If statement that is context for this case clausule</summary>\r\n                private /*!*/ CodeConditionStatement context;\r\n                /// <summary>Switch is a loop</summary>\r\n                protected override bool IsLoop { get { return true; } }\r\n                /// <summary>Context for this block</summary>\r\n                protected override CodeStatement /*!*/Context { get { return context; } }\r\n                /// <summary>Statemenst for this case clausule</summary>\r\n                protected override CodeStatementCollection /*!*/ Statements { get { return context.TrueStatements; } }\r\n                /// <summary>Writes name of label after the switch statement into given variable</summary>\r\n                /// <param name=\"throwOn\">Ignored</param>\r\n                /// <param name=\"Jump\">Request for label</param>\r\n                public override void GetJumpLabel(CodeBreakTargetRequest /*!*/ Jump, LangElement throwOn) { Jump.Target = endlabel; }\r\n            }\r\n            /// <summary>Represents context for for statement</summary>\r\n            protected sealed class ForStatementContext : BlockStatementContext\r\n            {\r\n                /// <summary>Ctor</summary>\r\n                /// <param name=\"method\">GetUserEntryPoint the statement is in</param>\r\n                /// <param name=\"block\">Block that is immediate parent of the statement (null if immediate parent is <paramref name=\"method\"/>)</param>\r\n                /// <param name=\"context\">Context of this statement</param>\r\n                /// <param name=\"endlabel\">Label after whole for statement</param>\r\n                /// <param name=\"firstlabel\">Label just before end of for statement</param>\r\n                /// <param name=\"owner\">Owner of this instance</param>\r\n                public ForStatementContext(MethodContext/*!*/ method, BlockStatementContext block, CodeIterationStatement /*!*/ context, string /*!*/ endlabel, string /*!*/ firstlabel, PhpCodeDomParserImplementation owner)\r\n                    : base(method, block, owner)\r\n                {\r\n                    this.context = context;\r\n                    this.endlabel = endlabel;\r\n                    this.firstlabel = firstlabel;\r\n                }\r\n                /// <summary>Label after whole for statement</summary>\r\n                private string /*!*/ endlabel;\r\n                /// <summary>Label just before end of for statement</summary>\r\n                private string /*!*/ firstlabel;\r\n                /// <summary>COdeDOM representation of for statement</summary>\r\n                private CodeIterationStatement context;\r\n                /// <summary>True - For is a loop</summary>\r\n                protected override bool IsLoop { get { return true; } }\r\n                /// <summary>Context of this statement</summary>\r\n                protected override CodeStatement Context { get { return context; } }\r\n                /// <summary>Collection of statements inside this statement</summary>\r\n                protected override CodeStatementCollection Statements { get { return context.Statements; } }\r\n                /// <summary>Writes label for break/or continue to given variable</summary>\r\n                /// <param name=\"Jump\">Variable to write name of label to</param>\r\n                /// <param name=\"throwOn\">Ignored</param>\r\n                public override void GetJumpLabel(CodeBreakTargetRequest Jump, LangElement throwOn)\r\n                {\r\n                    Jump.Target = Jump.Type == JumpStmt.Types.Break ? endlabel : firstlabel;\r\n                }\r\n            }\r\n            #endregion\r\n\r\n            /// <summary>Represents block context for whole file</summary>\r\n            protected sealed class FileContext : IBlockContext\r\n            {\r\n                /// <summary><see cref=\"CodeCompileUnit\"/> that represents the file</summary>\r\n                private CodeCompileUnit context;\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"context\"><see cref=\"CodeCompileUnit\"/> that represents the file</param>\r\n                public FileContext(CodeCompileUnit context) { this.context = context; }\r\n                /// <summary>Adds <see cref=\"CodeObject\"/> into current file</summary>\r\n                /// <param name=\"Object\"><see cref=\"CodeObject\"/> to be added</param>\r\n                /// <returns><paramref name=\"Object\"/></returns>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">Object of type <b>T</b> is not supported in this block</exception>\r\n                /// <remarks>File-level supports only <see cref=\"CodeCommentStatement\"/>, <see cref=\"CodeNamespace\"/> and <see cref=\"CodeTypeDeclaration\"/> (including <see cref=\"CodeTypeDelegate\"/>)</remarks>\r\n                public CodeObject AddObject(CodeObject Object, LangElement throwOn)\r\n                {\r\n                    if (Object is CodeCommentStatement) context.Namespaces[0].Comments.Add((CodeCommentStatement)Object);\r\n                    else if (Object is CodeNamespace) context.Namespaces.Add((CodeNamespace)Object);\r\n                    else if (Object is CodeTypeDeclaration) context.Namespaces[0].Types.Add((CodeTypeDeclaration)Object);\r\n                    else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_not_allowed_at_file_level, Object.GetType().FullName), throwOn);\r\n                    return Object;\r\n                }\r\n            }\r\n            /// <summary>Represents namespace</summary> \r\n            protected sealed class NamespaceContext : IBlockContext\r\n            {\r\n                /// <summary><see cref=\"CodeCompileUnit\"/> that represents the file</summary>\r\n                private CodeNamespace context;\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"context\"><see cref=\"CodeNamespace\"/> that represents the namespace</param>\r\n                public NamespaceContext(CodeNamespace context) { this.context = context; }\r\n                /// <summary>Adds <see cref=\"CodeObject\"/> into current namespace</summary>\r\n                /// <param name=\"Object\"><see cref=\"CodeObject\"/> to be added</param>\r\n                /// <returns><paramref name=\"Object\"/></returns>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\">Object represented by <paramref name=\"Object\"/> is not supported in this block</exception>\r\n                /// <remarks>Namespace-level supports only <see cref=\"CodeCommentStatement\"/> and <see cref=\"CodeTypeDeclaration\"/> (including <see cref=\"CodeTypeDelegate\"/>)</remarks>\r\n                public CodeObject AddObject(CodeObject Object, LangElement throwOn)\r\n                {\r\n                    if (Object is CodeCommentStatement) context.Comments.Add((CodeCommentStatement)Object);\r\n                    else if (Object is CodeTypeDeclaration) context.Types.Add((CodeTypeDeclaration)Object);\r\n                    else throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_not_allowed_at_namespace_level, Object.GetType().FullName), throwOn);\r\n                    return Object;\r\n                }\r\n            }\r\n            /// <summary>Represents type (Class, Structure, Enumeration, Delegate, Interface)</summary>\r\n            protected sealed class TypeContext : IBlockContext\r\n            {\r\n                /// <summary><see cref=\"CodeTypeDeclaration\"/> that represents this type</summary>\r\n                private CodeTypeDeclaration context;\r\n                /// <summary><see cref=\"CodeTypeDeclaration\"/> that represents this type</summary>\r\n                public CodeTypeDeclaration Context { get { return context; } }\r\n                /// <summary>CTor</summary>\r\n                /// <param name=\"context\"><see cref=\"CodeTypeDeclaration\"/> that represents the type</param>\r\n                public TypeContext(CodeTypeDeclaration context) { this.context = context; }\r\n                /// <summary>Adds <see cref=\"CodeObject\"/> into current type</summary>\r\n                /// <param name=\"Object\"><see cref=\"CodeObject\"/> to be added. This must be <see cref=\"CodeTypeMember\"/></param>\r\n                /// <returns><paramref name=\"Object\"/></returns>\r\n                /// <exception cref=\"PhpToCodeDomNotSupportedException\"><paramref name=\"Object\"/> is not <see cref=\"CodeTypeMember\"/> or object represented by <paramref name=\"Object\"/> is not supported in current block debending on what kind of type is represented by current block</exception>\r\n                /// <remarks>\r\n                /// Following checks are performed:\r\n                /// <list type=\"list\">\r\n                /// <item>Fields cannot be added into interfaces</item>\r\n                /// <item>Only static constant fields can be added into enumerations</item>\r\n                /// <item>Nothiong can be added into delegates</item>\r\n                /// </list>\r\n                /// </remarks>\r\n                /// <param name=\"throwOn\">Element to throw <see cref=\"PhpToCodeDomNotSupportedException\"/> on</param>\r\n                public CodeObject AddObject(CodeObject Object, LangElement throwOn)\r\n                {\r\n                    if (context is CodeTypeDelegate) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_anything_delegate, throwOn);\r\n                    if (Object is CodeTypeMember)\r\n                    {\r\n                        if (Object is CodeMemberField && context.IsInterface) throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_filed_delegate, throwOn);\r\n                        if (!context.IsEnum)\r\n                        {\r\n                            context.Members.Add((CodeTypeMember)Object);\r\n                        }\r\n                        else if (Object is CodeMemberField)\r\n                        {\r\n                            if ((((CodeMemberField)(Object)).Attributes & MemberAttributes.Const) == MemberAttributes.Const && (((CodeMemberField)Object).Attributes & MemberAttributes.Static) == MemberAttributes.Static)\r\n                                context.Members.Add((CodeMemberField)Object);\r\n                            else\r\n                                throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_in_enum, throwOn);\r\n                        }\r\n                        else\r\n                        {\r\n                            throw new PhpToCodeDomNotSupportedException(Localizations.Strings.cdp_unsup_in_enum_other, throwOn);\r\n                        }\r\n                        if ((Object is CodeMemberField || Object is CodeMemberProperty) && !FieldsAndProperties.ContainsKey(((CodeTypeMember)Object).Name))\r\n                            FieldsAndProperties.Add(((CodeTypeMember)Object).Name, (CodeTypeMember)Object);\r\n                    }\r\n                    else\r\n                    {\r\n                        throw new PhpToCodeDomNotSupportedException(string.Format(Localizations.Strings.cdp_unsup_unsupported_at_type_level, Object.GetType().FullName), throwOn);\r\n                    }\r\n                    return Object;\r\n                }\r\n                /// <summary>Contains dictionary of properties and fields defined on this class (no inherited members) keyed by its names</summary>\r\n                private Dictionary<string, CodeTypeMember> FieldsAndProperties = new Dictionary<string, CodeTypeMember>();\r\n                /// <summary>Gets property or field defined on this class with given name</summary>\r\n                /// <param name=\"Name\">Name of member to get</param>\r\n                /// <returns>Member with given name which is <see cref=\"CodeMemberField\"/> or <see cref=\"CodeMemberProperty\"/> or null if there is no such member</returns>\r\n                public CodeTypeMember getPropertyOrField(string /*!*/ Name)\r\n                {\r\n                    if (FieldsAndProperties.ContainsKey(Name)) return FieldsAndProperties[Name];\r\n                    return null;\r\n                }\r\n            }\r\n        }\r\n            #endregion\r\n        /// <summary>Represents error meaning that something is not supported fro PHP-to-CodeDOM translation</summary>\r\n        public class PhpToCodeDomNotSupportedException : NotSupportedException\r\n        {\r\n            /// <summary>Element that caused the error</summary>\r\n            private LangElement /*!*/ element;\r\n            /// <summary>CTor from message and element</summary>\r\n            /// <param name=\"message\">Exception message</param>\r\n            /// <param name=\"element\">Element that casused the exception</param>\r\n            /// <exception cref=\"ArgumentNullException\"><paramref name=\"element\"/> is null</exception>\r\n            public PhpToCodeDomNotSupportedException(string message, LangElement /*!*/ element) :\r\n                this(message, null, element) { }\r\n            /// <summary>CTor from message, inner exception and element</summary>\r\n            /// <param name=\"message\">Exception message</param>\r\n            /// <param name=\"element\">Element that casused the exception</param>\r\n            /// <param name=\"innerException\">Exception thatcaused this exception</param>\r\n            /// <exception cref=\"ArgumentNullException\"><paramref name=\"element\"/> is null</exception>\r\n            public PhpToCodeDomNotSupportedException(string message, Exception innerException, LangElement /*!*/ element)\r\n                : base(message, innerException)\r\n            {\r\n                if (element == null) throw new ArgumentNullException(\"element\");\r\n                this.element = element;\r\n            }\r\n            /// <summary>Gets a message that describes the current exception.</summary>\r\n            /// <returns>The error message that explains the reason for the exception, or an empty (\"\").</returns>\r\n            public override string Message\r\n            {\r\n                get\r\n                {\r\n                    return base.Message + \" @\" + element.Span.Start;\r\n                }\r\n            }\r\n            /// <summary>Element that caused the exception</summary>\r\n            public LangElement Element { get { return element; } }\r\n            ///// <summary>Line where element that caused the exception starts</summary>\r\n            //public int Line { get { return element.Position.FirstLine; } }\r\n            ///// <summary>Column where element that caused the exception starts</summary>\r\n            //public int Column { get { return element.Position.FirstColumn; } }\r\n            /// <summary><see cref=\"Text.Span\">Position</see> of <see cref=\"Element\"/></summary>\r\n            public Text.Span Position { get { return element.Span; } }\r\n        }\r\n    }\r\n    /// <summary>This <see cref=\"CodeLinePragma \"/> is reported by PHP->COdeDOM translator bud should be ignored by COdeDOM->PHP translator</summary>\r\n    internal class CodeLinePragmaNoWrite : CodeLinePragma\r\n    {\r\n        /// <summary>Initializes a new instance of the System.CodeDom.CodeLinePragma class.</summary>\r\n        /// <param name=\"fileName\">The file name of the associated file.</param>\r\n        /// <param name=\"Line\">The line number to store a reference to.</param>\r\n        public CodeLinePragmaNoWrite(string fileName, int Line) : base(fileName, Line) { }\r\n    }\r\n}"
  },
  {
    "path": "Source/Core.CodeDom/PhpCompiler.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.CodeDom;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections.Generic;\r\nusing System.Security;\r\nusing System.Security.Permissions;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n\t/// <summary>\r\n\t/// PHP <see cref=\"ICodeCompiler\"/> implementation.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Since Beta 3, the compiler is not based on <see cref=\"CodeCompiler\"/> but compiles\r\n\t/// in a separate appdomain without spawning a new <c>phpc</c> process.\r\n\t/// </remarks>\r\n\tinternal sealed class PhpCodeCompiler : ICodeCompiler\r\n\t{\r\n\t\t#region CodeDomErrorSink\r\n\r\n\t\t/// <summary>\r\n\t\t/// An error sink that adds errors to <see cref=\"CompilerResults\"/>.\r\n\t\t/// </summary>\r\n\t\tprivate class CodeDomErrorSink : ErrorSink\r\n\t\t{\r\n\t\t\tprivate CompilerResults/*!*/ results;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Creates a new <see cref=\"CodeDomErrorSink\"/> with a specified <see cref=\"CompilerResults\"/>.\r\n\t\t\t/// </summary>\r\n\t\t\t/// <param name=\"results\">The compiler results.</param>\r\n\t\t\tpublic CodeDomErrorSink(CompilerResults/*!*/ results)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(results != null);\r\n\t\t\t\tthis.results = results;\r\n\t\t\t}\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Called when an error/warning should be reported.\r\n\t\t\t/// </summary>\r\n\t\t\tprotected override bool Add(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos)\r\n\t\t\t{\r\n\t\t\t\tif (id >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tCompilerError error = new CompilerError();\r\n\r\n\t\t\t\t\terror.FileName = fullPath;\r\n\t\t\t\t\terror.Line = pos.FirstLine;\r\n\t\t\t\t\terror.Column = pos.FirstColumn;\r\n\t\t\t\t\terror.ErrorNumber = String.Format(\"PHP{0:d4}\", id);\r\n\t\t\t\t\terror.ErrorText = message;\r\n\t\t\t\t\terror.IsWarning = (severity.Value == ErrorSeverity.Values.Warning);\r\n\r\n\t\t\t\t\tresults.Errors.Add(error);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// build the output line\r\n\t\t\t\tStringBuilder sb = new StringBuilder(128);\r\n\t\t\t\tif (fullPath != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.AppendFormat(\"{0}({1},{2}): \",\r\n\t\t\t\t\t\tfullPath,\r\n\t\t\t\t\t\tpos.FirstLine,\r\n\t\t\t\t\t\tpos.FirstColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsb.AppendFormat(\"{0} PHP{1:d4}: {2}\",\r\n\t\t\t\t\t\tseverity.ToCmdString(),\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tmessage);\r\n\t\t\t\t}\r\n\t\t\t\telse sb.Append(message);\r\n\r\n\t\t\t\tresults.Output.Add(sb.ToString());\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region AppCompilerStack\r\n\r\n\t\t/// <summary>\r\n\t\t/// Manages a stack of <see cref=\"ApplicationCompiler\"/> instances.\r\n\t\t/// </summary>\r\n\t\tprivate static class AppCompilerStack\r\n\t\t{\r\n\t\t\t#region StackItem\r\n\r\n\t\t\tprivate struct StackItem\r\n\t\t\t{\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// A compiler that compiles in a separate appdomain.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tpublic ApplicationCompiler/*!*/ Compiler;\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// Counts compilations performed by the <see cref=\"Compiler\"/>.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tpublic int CompileCounter;\r\n\r\n\t\t\t\t/// <summary>\r\n\t\t\t\t/// The number of assemblies loaded to the remote compilation appdomain after the first compilation.\r\n\t\t\t\t/// </summary>\r\n\t\t\t\tpublic int RemoteAssemblyCount;\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t#region CallBackDisplay\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Works around the lack of <see cref=\"SerializableAttribute\"/> on display classes generated\r\n\t\t\t/// by C# compiler when an anonymous method is used.\r\n\t\t\t/// </summary>\r\n\t\t\t[Serializable]\r\n\t\t\tprivate sealed class CallBackDisplay\r\n\t\t\t{\r\n\t\t\t\tpublic int AssemblyCount;\r\n\r\n\t\t\t\tpublic void Handler()\r\n\t\t\t\t{\r\n\t\t\t\t\tAssemblyCount = AppDomain.CurrentDomain.GetAssemblies().Length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Maximum number of compilations without checking the number of assemblies loaded to the\r\n\t\t\t/// remote appdomain.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate const int compileCounterTreshold = 10;\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The stack.\r\n\t\t\t/// </summary>\r\n\t\t\tprivate static Stack<StackItem>/*!*/ stack = new Stack<StackItem>();\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Compiles in a seperate appdomain utilitizing one of the compilers on the stack.\r\n\t\t\t/// </summary>\r\n\t\t\tpublic static void Compile(ErrorSink/*!*/ errorSink, CompilationParameters/*!*/ ps)\r\n\t\t\t{\r\n\t\t\t\t// obtain a compiler\r\n\t\t\t\tStackItem item = new StackItem();\r\n\t\t\t\tlock (stack)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (stack.Count > 0) item = stack.Pop();\r\n\t\t\t\t}\r\n\t\t\t\tif (item.Compiler == null) item.Compiler = ApplicationCompiler.CreateRemoteCompiler();\r\n\r\n\t\t\t\t// compile\r\n\t\t\t\titem.Compiler.RemoteCompile(ref errorSink, ps);\r\n\r\n\t\t\t\t// check whether the separate appdomain is not too weedy\r\n\t\t\t\tif (++item.CompileCounter == 1 || item.CompileCounter == compileCounterTreshold)\r\n\t\t\t\t{\r\n\t\t\t\t\titem.CompileCounter = 1;\r\n\r\n\t\t\t\t\tCallBackDisplay display = new CallBackDisplay();\r\n\r\n\t\t\t\t\t// avoid passing the array of assemblies across appdomain boundary\r\n\t\t\t\t\titem.Compiler.Domain.DoCallBack(display.Handler);\r\n\r\n\t\t\t\t\tif (item.RemoteAssemblyCount == 0) item.RemoteAssemblyCount = display.AssemblyCount;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (display.AssemblyCount > (2 * item.RemoteAssemblyCount))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tAppDomain.Unload(item.Compiler.Domain);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// recycle the compiler\r\n\t\t\t\tlock (stack) stack.Push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region ICodeCompiler Members\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly from the <see cref=\"System.CodeDom\"/> tree contained in the specified\r\n\t\t/// <see cref=\"CodeCompileUnit\"/>, using the specified compiler settings. \r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromDom(CompilerParameters/*!*/ options, CodeCompileUnit/*!*/ compilationUnit)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (compilationUnit == null) throw new ArgumentNullException(\"compilationUnit\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\t\t\tthrow new NotImplementedException(); //parameters.SourceReaders.Add(GenerateCompilationUnit(compilationUnit));\r\n            //ResolveReferencedAssemblies(options, compilationUnit);\r\n\r\n            //return Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly based on the <see cref=\"System.CodeDom\"/> trees contained in the specified array of\r\n\t\t/// <see cref=\"CodeCompileUnit\"/> objects, using the specified compiler settings.\r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromDomBatch(CompilerParameters/*!*/ options, CodeCompileUnit[]/*!*/ compilationUnits)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (compilationUnits == null) throw new ArgumentNullException(\"compilationUnits\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\r\n            throw new NotImplementedException();\r\n\r\n            //for (int i = 0; i < compilationUnits.Length; i++)\r\n            //{\r\n            //    parameters.SourceReaders.Add(GenerateCompilationUnit(compilationUnits[i]));\r\n            //    ResolveReferencedAssemblies(options, compilationUnits[i]);\r\n            //}\r\n\r\n            //return Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly from the source code contained within the specified file, using the specified compiler settings.\r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromFile(CompilerParameters/*!*/ options, string/*!*/ fileName)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (fileName == null) throw new ArgumentNullException(\"fileName\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\t\t\tparameters.SourcePaths.Add(new FullPath(fileName));\r\n\r\n\t\t\treturn Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly from the source code contained within the specified files, using the specified compiler settings.\r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromFileBatch(CompilerParameters/*!*/ options, string[]/*!*/ fileNames)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (fileNames == null) throw new ArgumentNullException(\"fileNames\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\t\t\tfor (int i = 0; i < fileNames.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tparameters.SourcePaths.Add(new FullPath(fileNames[i]));\r\n\t\t\t}\r\n\r\n\t\t\treturn Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly from the specified string containing source code, using the specified compiler settings.\r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromSource(CompilerParameters/*!*/ options, string/*!*/ source)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (source == null) throw new ArgumentNullException(\"source\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\t\t\tthrow new NotImplementedException(); //parameters.SourceReaders.Add(new StringReader(source));\r\n\r\n\t\t\t//return Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles an assembly from the specified array of strings containing source code, using the specified compiler settings.\r\n\t\t/// </summary>\r\n\t\tpublic CompilerResults/*!*/ CompileAssemblyFromSourceBatch(CompilerParameters/*!*/ options, string[]/*!*/ sources)\r\n\t\t{\r\n\t\t\tif (options == null) throw new ArgumentNullException(\"options\");\r\n\t\t\tif (sources == null) throw new ArgumentNullException(\"sources\");\r\n\r\n\t\t\tCompilationParameters parameters = new CompilationParameters();\r\n\r\n            throw new NotImplementedException();\r\n\r\n            //for (int i = 0; i < sources.Length; i++)\r\n            //{\r\n            //     //parameters.SourceReaders.Add(new StringReader(sources[i]));\r\n            //}\r\n\r\n            //return Compile(parameters, options);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Compile\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs the compilation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameters\">Parameters that already contain the source files/streams to compile.</param>\r\n\t\t/// <param name=\"options\">The options specified by CodeCom user.</param>\r\n\t\t/// <returns>The compiler results.</returns>\r\n\t\tprivate CompilerResults/*!*/ Compile(CompilationParameters/*!*/ parameters, CompilerParameters/*!*/ options)\r\n\t\t{\r\n\t\t\t// translate options to parameters\r\n\t\t\tSetupCompilerParameters(parameters, options);\r\n\r\n\t\t\t// set up compiler results\r\n            CompilerResults results = new CompilerResults(options.TempFiles);   // J: SecurityAction.LinkDemand, \"FullTrust\"\r\n\t\t\tCodeDomErrorSink error_sink = new CodeDomErrorSink(results);\r\n\r\n\t\t\tresults.Output.Add(\"Phalanger - the PHP Language Compiler - commencing compilation in a separate appdomain\");\r\n\t\t\tresults.Output.Add(\"Source files to compile:\");\r\n\t\t\tfor (int i = 0; i < parameters.SourcePaths.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tresults.Output.Add(parameters.SourcePaths[i].ToString());\r\n\t\t\t}\r\n\r\n\t\t\t// compile the files/streams in a separate appdomain\r\n\t\t\tAppCompilerStack.Compile(error_sink, parameters);\r\n\r\n\t\t\t// set up the compiler results\r\n\t\t\tresults.PathToAssembly = parameters.OutPath.ToString();\r\n\t\t\tresults.NativeCompilerReturnValue = (results.Errors.HasErrors ? 1 : 0);\r\n\r\n            // J: obsolete, FullTrust demanded earlier\r\n            //new SecurityPermission(SecurityPermissionFlag.ControlEvidence).Assert();\r\n            //try\r\n            //{\r\n            //    results.Evidence = options.Evidence;   // J: SecurityAction.LinkDemand, \"FullTrust\" // same as CompilerResults above\r\n            //}\r\n            //finally\r\n            //{\r\n            //    CodeAccessPermission.RevertAssert();\r\n            //}\r\n\r\n\t\t\treturn results;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Helper methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets up <paramref name=\"parameters\"/> according to the supplied <paramref name=\"options\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameters\">The parameters to set up.</param>\r\n\t\t/// <param name=\"options\">The options passed to CodeDom.</param>\r\n\t\tprivate void SetupCompilerParameters(CompilationParameters/*!*/ parameters, CompilerParameters/*!*/ options)\r\n\t\t{\r\n\t\t\tparameters.Target = (options.GenerateExecutable ? ApplicationCompiler.Targets.Console : ApplicationCompiler.Targets.Dll);\r\n\t\t\tparameters.Debuggable = options.IncludeDebugInformation;\r\n\t\t\tparameters.SourceRoot = DetermineSourceRoot(parameters);\r\n\r\n\t\t\tif (!String.IsNullOrEmpty(options.OutputAssembly))\r\n\t\t\t{\r\n\t\t\t\tparameters.OutPath = new FullPath(options.OutputAssembly);\r\n\t\t\t}\r\n\r\n\t\t\t// referenced assemblies\r\n\t\t\tforeach (string reference in options.ReferencedAssemblies)\r\n\t\t\t{\r\n                parameters.References.Add(new CompilationParameters.ReferenceItem() { Reference = reference });\r\n\t\t\t}\r\n\r\n\t\t\t// referenced resource files\r\n\t\t\tforeach (string resource in options.LinkedResources)\r\n\t\t\t{\r\n\t\t\t\tparameters.Resources.Add(new FileReference(resource));\r\n\t\t\t}\r\n\r\n\t\t\tparameters.Pure = true;\r\n\r\n\t\t\t// parse user-provided compiler options\r\n\t\t\tif (!String.IsNullOrEmpty(options.CompilerOptions))\r\n\t\t\t{\r\n\t\t\t\tCommandLineParser parser = new CommandLineParser(parameters);\r\n\t\t\t\tparser.Parse(CommandLineParser.StringToArgumentList(options.CompilerOptions));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adjusts <see cref=\"CompilerParameters\"/>' referenced assemblies according to a given compile unit.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"options\">The compiler parameters.</param>\r\n\t\t/// <param name=\"e\">The compile unit.</param>\r\n\t\t/// <remarks>\r\n\t\t/// Copied from the <see cref=\"System.CodeDom.Compiler.CodeCompiler\"/> implementation.\r\n\t\t/// </remarks>\r\n\t\tprivate void ResolveReferencedAssemblies(CompilerParameters options, CodeCompileUnit e)\r\n\t\t{\r\n\t\t\tif (e.ReferencedAssemblies.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tforeach (string ass in e.ReferencedAssemblies)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!options.ReferencedAssemblies.Contains(ass))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toptions.ReferencedAssemblies.Add(ass);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines the source root for a compilation based on the source file paths and output path.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"parameters\">The parameters describing source files and the output file.</param>\r\n\t\t/// <returns>A suitable source root, preferrably a common superdirectory of all sources.</returns>\r\n\t\tprivate FullPath DetermineSourceRoot(CompilationParameters/*!*/ parameters)\r\n\t\t{\r\n\t\t\t// try to obtain a common superdirectory of all source files\r\n\t\t\tif (parameters.SourcePaths.Count > 0 && parameters.SourcePaths[0].DirectoryExists)\r\n\t\t\t{\r\n\t\t\t\tCultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture;\r\n\t\t\t\tstring result = Path.GetDirectoryName(parameters.SourcePaths[0].ToString());\r\n\r\n\t\t\t\tfor (int i = 1; i < parameters.SourcePaths.Count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring path = parameters.SourcePaths[i].ToString();\r\n\r\n\t\t\t\t\tint limit = Math.Min(result.Length, path.Length);\r\n\t\t\t\t\tint index = -1;\r\n\r\n\t\t\t\t\tfor (int j = 0; j < limit; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// remember the last directory separator position\r\n\t\t\t\t\t\tif (result[j] == Path.DirectorySeparatorChar) index = j;\r\n\r\n\t\t\t\t\t\tif (Char.ToLower(result[j], culture) != Char.ToLower(path[j], culture))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (index >= 0) result = result.Substring(0, index);\r\n\t\t\t\t\t\t\telse result = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (result == null) break;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (result != null) return new FullPath(result);\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise the output directory\r\n\t\t\tif (!parameters.OutPath.IsEmpty)\r\n\t\t\t{\r\n\t\t\t\treturn new FullPath(Path.GetDirectoryName(parameters.OutPath.ToString()));\r\n\t\t\t}\r\n\r\n\t\t\t// otherwise fall back to default\r\n\t\t\treturn new FullPath(Environment.SystemDirectory);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.CodeDom/PhpGenerator.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//#define CODEDOM_DUMP\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing System.CodeDom;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n    /// <summary>\r\n    /// PHP <see cref=\"ICodeGenerator\"/> implementation.\r\n    /// </summary>\r\n    internal sealed class PhpCodeGenerator : System.CodeDom.Compiler.CodeGenerator\r\n    {\r\n        internal delegate bool TypeIsReferenceDelegate(CodeTypeReference type);\r\n\r\n        #region Fields\r\n\r\n        private static readonly Regex simpleIdentifierRegex =\r\n            new Regex(@\"^[a-zA-Z_][a-zA-Z0-9_]*$\");\r\n\r\n        private static readonly Regex identifierRegex =\r\n            new Regex(@\"(?:^[a-zA-Z_][a-zA-Z0-9_]*$)|(?:^i'(?:[^'\\\\]|(?:\\\\.))+'$)\");\r\n\r\n        /// <summary>\r\n        /// Open instance delegate that works around the extends/implements issue in base types.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=a5d4c475-18d2-4121-b282-6583f1695e45\r\n        /// </remarks>\r\n        private static readonly TypeIsReferenceDelegate typeIsInterface =\r\n            (TypeIsReferenceDelegate)Delegate.CreateDelegate(typeof(TypeIsReferenceDelegate), null,\r\n            typeof(CodeTypeReference).GetProperty(\"IsInterface\", BindingFlags.Instance | BindingFlags.NonPublic).GetGetMethod(true));\r\n\r\n        /// <summary>\r\n        /// <B>True</B> if generating code to a compile unit (between &lt;? ?&gt;), <B>false</B> otherwise.\r\n        /// </summary>\r\n        private bool inCompileUnit;\r\n\r\n        /// <summary>\r\n        /// Imports generated so far.\r\n        /// </summary>\r\n        private Dictionary<string, string>\r\n            importedNamespaces, // names aliased (imported namespaces) in current namespace\r\n            previousImportedNamespaces; // aliases in previous scope\r\n\r\n        /// <summary>\r\n        /// <B>True</B> if the class that is currently being generated has a base class (i.e. is not a parent-less\r\n        /// PHP class.\r\n        /// </summary>\r\n        private bool classHasParent;\r\n\r\n        /// <summary>\r\n        /// Custom attributes that should be applied to the compile unit that is being generated.\r\n        /// </summary>\r\n        private CodeAttributeDeclarationCollection assemblyAttributes;\r\n\r\n        /// <summary>\r\n        /// Stores information about literalness of fields.\r\n        /// </summary>\r\n        private Dictionary<string, bool> isFieldConstantCache = new Dictionary<string, bool>();\r\n\r\n        /// <summary>\r\n        /// The assembly in which the last <see cref=\"IsFieldConstant\"/> lookup succeeded.\r\n        /// </summary>\r\n        private Assembly lastAssembly;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public PhpCodeGenerator()\r\n        { }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Gets the token that represents a null reference.\r\n        /// </summary>\r\n        protected override string NullToken\r\n        {\r\n            get { return SpecialWords.Null; }\r\n        }\r\n\r\n        internal static CodeAttributeDeclaration AppStaticAttribute\r\n        {\r\n            get\r\n            { return new CodeAttributeDeclaration(\"\\\\AppStatic\"); }\r\n        }\r\n\r\n        internal static CodeAttributeDeclaration OutAttribute\r\n        {\r\n            get\r\n            { return new CodeAttributeDeclaration(\"out\"); }\r\n        }\r\n\r\n        internal static CodeAttributeDeclaration ExportAttribute\r\n        {\r\n            get\r\n            { return new CodeAttributeDeclaration(\"\\\\Export\"); }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Supports\r\n\r\n        /// <summary>\r\n        /// Gets a value indicating whether the specified code generation support is provided.\r\n        /// </summary>\r\n        protected override bool Supports(GeneratorSupport support)\r\n        {\r\n            GeneratorSupport supported_by_phalanger =\r\n                0\r\n                | GeneratorSupport.ArraysOfArrays\r\n                | GeneratorSupport.AssemblyAttributes\r\n                //| GeneratorSupport.ChainedConstructorArguments\r\n                | GeneratorSupport.ComplexExpressions\r\n                //| GeneratorSupport.DeclareDelegates\r\n                //| GeneratorSupport.DeclareEnums\r\n                //| GeneratorSupport.DeclareEvents\r\n                //| GeneratorSupport.DeclareIndexerProperties\r\n                | GeneratorSupport.DeclareInterfaces\r\n                //| GeneratorSupport.DeclareValueTypes\r\n                | GeneratorSupport.EntryPointMethod\r\n                | GeneratorSupport.GenericTypeDeclaration\r\n                | GeneratorSupport.GenericTypeReference\r\n                | GeneratorSupport.GotoStatements\r\n                //| GeneratorSupport.MultidimensionalArrays\r\n                | GeneratorSupport.MultipleInterfaceMembers\r\n                //| GeneratorSupport.NestedTypes\r\n                | GeneratorSupport.ParameterAttributes\r\n                | GeneratorSupport.PartialTypes\r\n                | GeneratorSupport.PublicStaticMembers\r\n                | GeneratorSupport.ReferenceParameters\r\n                | GeneratorSupport.Resources\r\n                | GeneratorSupport.ReturnTypeAttributes\r\n                //| GeneratorSupport.StaticConstructors\r\n                | GeneratorSupport.TryCatchStatements\r\n                //| GeneratorSupport.Win32Resources\r\n            ;\r\n\r\n            return ((support & supported_by_phalanger) == support);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IsValidIdentifier, CreateEscapedIdentifier, CreateValidIdentifier\r\n\r\n        /// <summary>\r\n        /// Gets a value indicating whether the specified value is a valid identifier.\r\n        /// </summary>\r\n        protected override bool IsValidIdentifier(string value)\r\n        {\r\n            if (String.IsNullOrEmpty(value) || Keywords.IsKeyword(value)) return false;\r\n\r\n            return identifierRegex.IsMatch(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates an escaped identifier for the specified value.\r\n        /// </summary>\r\n        protected override string CreateEscapedIdentifier(string value)\r\n        {\r\n            if (Keywords.IsKeyword(value) || !simpleIdentifierRegex.IsMatch(value))\r\n            {\r\n                StringBuilder sb = new StringBuilder(\"i'\", value.Length + 3);\r\n\r\n                for (int i = 0; i < value.Length; i++)\r\n                {\r\n                    if (value[i] == '\\'') sb.Append('\\\\');\r\n\r\n                    sb.Append(value[i]);\r\n                }\r\n\r\n                if (sb[sb.Length - 1] == '\\\\') sb.Append('\\\\');\r\n                sb.Append('\\'');\r\n\r\n                return sb.ToString();\r\n            }\r\n            else return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a valid identifier for the specified value.\r\n        /// </summary>\r\n        protected override string CreateValidIdentifier(string value)\r\n        {\r\n            if (Keywords.IsKeyword(value))\r\n            {\r\n                return \"_\" + value;\r\n            }\r\n            else return value;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GetTypeOutput, OutputType, QuoteSnippetString\r\n\r\n        private Dictionary<string, string>/*!*/ getTypeOutputCache = new Dictionary<string, string>();\r\n\r\n        /// <summary>\r\n        /// Gets the name of the specified data type.\r\n        /// </summary>\r\n        protected override string GetTypeOutput(CodeTypeReference value)\r\n        {\r\n            if (value.ArrayRank > 0)\r\n            {\r\n                // TODO\r\n                return Keywords.Array;\r\n            }\r\n\r\n            string output;\r\n            if (getTypeOutputCache.TryGetValue(value.BaseType, out output))\r\n                return output;\r\n\r\n\r\n            string base_type;\r\n\r\n            if (globalTypes.Contains(value.BaseType))    // known global type ?\r\n            {\r\n                base_type = \".\" + value.BaseType;           // make it fully qualified (starting with \\)\r\n            }\r\n            else\r\n            {\r\n                // GetType(); generate fully qualified name or not, using current importedNamespaces and referencedAssemblies\r\n                var type = Helper.GetType(value, null, importedNamespaces.Keys.ToArray(), referencedAssemblies);\r\n\r\n                if (type != null)\r\n                {\r\n                    base_type = type.FullName;\r\n\r\n                    bool importFound = false;\r\n                    // try to use alias if possible\r\n                    foreach (var import in importedNamespaces)\r\n                    {\r\n                        if (base_type.StartsWith(import.Key + \".\"))\r\n                        {\r\n                            base_type = import.Value + base_type.Substring(import.Key.Length);\r\n                            importFound = true;\r\n                            break;\r\n                        }\r\n                    }\r\n                    if (!importFound) base_type = \".\" + base_type;  // make it fully qualified\r\n                }\r\n                else\r\n                {\r\n                    base_type = value.BaseType;\r\n                }\r\n            }\r\n\r\n            if (value.TypeArguments.Count > 0)\r\n            {\r\n                //For generic types name ends with grave and number of generic arguments. Remove this.\r\n                string graveNum = string.Format(\"`{0:0}\", value.TypeArguments.Count);\r\n                if (base_type.EndsWith(graveNum))\r\n                    base_type = base_type.Substring(0, base_type.Length - graveNum.Length);\r\n            }\r\n\r\n            StringBuilder sb = new StringBuilder(1 + base_type.Length + 8 + 16 * value.TypeArguments.Count);\r\n\r\n            // process the base type\r\n            for (int i = 0; i < base_type.Length; i++)\r\n            {\r\n                if (base_type[i] == '.') sb.Append(Tokens.NamespaceSeparator);\r\n                else sb.Append(base_type[i]);\r\n            }\r\n\r\n            // process type arguments\r\n            sb.Append(GetTypeArgumentsOutput(value.TypeArguments));\r\n\r\n            return (getTypeOutputCache[value.BaseType] = sb.ToString());\r\n        }\r\n\r\n        private string GetTypeArgumentsOutput(CodeTypeReferenceCollection typeArgs)\r\n        {\r\n            int count;\r\n            if (typeArgs != null && (count = typeArgs.Count) > 0)\r\n            {\r\n                StringBuilder sb = new StringBuilder();\r\n\r\n                sb.Append(Tokens.GenericBracketLeft);\r\n\r\n                sb.Append(GetTypeOutput(typeArgs[0]));\r\n                for (int i = 1; i < count; i++)\r\n                {\r\n                    sb.Append(Tokens.Comma + WhiteSpace.Space);\r\n                    sb.Append(GetTypeOutput(typeArgs[i]));\r\n                }\r\n\r\n                sb.Append(Tokens.GenericBracketRight);\r\n\r\n                return sb.ToString();\r\n            }\r\n            else return String.Empty;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified type.\r\n        /// </summary>\r\n        protected override void OutputType(CodeTypeReference typeRef)\r\n        {\r\n            Output.Write(GetTypeOutput(typeRef));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the specified string by formatting it with escape codes.\r\n        /// </summary>\r\n        protected override string QuoteSnippetString(string value)\r\n        {\r\n            StringBuilder sb = new StringBuilder(value.Length + 2);\r\n            bool need_escape = false;\r\n\r\n            sb.Append('\"');\r\n            for (int i = 0; i < value.Length; i++)\r\n            {\r\n                char ch = value[i];\r\n\r\n                if (i > 0 && (i % 80) == 0)\r\n                {\r\n                    // break the string to more lines, but do not separate surrogates\r\n                    if (Char.IsHighSurrogate(ch) && i < (value.Length - 1) && Char.IsLowSurrogate(value[i + 1]))\r\n                    {\r\n                        sb.Append(value[++i]);\r\n                    }\r\n                    sb.Append(\"\\\" .\\r\\n\");\r\n\r\n                    // indent\r\n                    for (int j = Indent + 1; j >= 0; j--) sb.Append(Options.IndentString);\r\n                    sb.Append('\"');\r\n                }\r\n\r\n                switch (ch)\r\n                {\r\n                    case '\\n': sb.Append(@\"\\n\"); break;\r\n                    case '\\t': sb.Append(@\"\\t\"); break;\r\n                    case '\\r': sb.Append(@\"\\r\"); break;\r\n                    case '\\\\': sb.Append(@\"\\\\\"); break;\r\n                    case '$': sb.Append(@\"\\$\"); break;\r\n                    case '\"': sb.Append(\"\\\\\\\"\"); break;\r\n                    default:\r\n                        {\r\n                            switch (Char.GetUnicodeCategory(ch))\r\n                            {\r\n                                case UnicodeCategory.Control:\r\n                                    {\r\n                                        sb.Append('\\\\');\r\n                                        sb.Append(System.Convert.ToString((int)ch, 8));\r\n                                        need_escape = true;\r\n                                        continue;\r\n                                    }\r\n                                case UnicodeCategory.DecimalDigitNumber:\r\n                                    {\r\n                                        if (need_escape) goto case UnicodeCategory.Control;\r\n                                        else goto default;\r\n                                    }\r\n\r\n                                default:\r\n                                    {\r\n                                        // TODO: Unicode escape?\r\n                                        sb.Append(ch);\r\n                                        break;\r\n                                    }\r\n                            }\r\n                            break;\r\n                        }\r\n                }\r\n\r\n                need_escape = false;\r\n            }\r\n            sb.Append('\"');\r\n\r\n            return sb.ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Generation: Generate*\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified argument reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>$NAME</c></remarks>\r\n        protected override void GenerateArgumentReferenceExpression(CodeArgumentReferenceExpression e)\r\n        {\r\n            OutputVariable(e.ParameterName);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified array creation expression.\r\n        /// </summary>\r\n        /// <remarks><c>array(INITIALIZER1, INITIALIZER1, ...)</c></remarks>\r\n        protected override void GenerateArrayCreateExpression(CodeArrayCreateExpression e)\r\n        {\r\n            Output.Write(Keywords.Array);\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n\r\n            int init_count = e.Initializers.Count;\r\n            for (int i = 0; i < init_count; i++)\r\n            {\r\n                if (i > 0) Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n                GenerateExpression(e.Initializers[i]);\r\n            }\r\n\r\n            Output.Write(Tokens.ParenthesisRight);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified array indexer expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGET[INDEX1][INDEX2]...</c></remarks>\r\n        protected override void GenerateArrayIndexerExpression(CodeArrayIndexerExpression e)\r\n        {\r\n            OutputArrayIndexerExpression(e.TargetObject, e.Indices);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified assignment statement.\r\n        /// </summary>\r\n        /// <remarks><c>LEFT = RIGHT</c> or <c>LEFT.TARGET->set_Item(LEFT.INDICES, RIGHT)</c></remarks>\r\n        protected override void GenerateAssignStatement(CodeAssignStatement e)\r\n        {\r\n            // indexer \"set\" hack\r\n            CodeIndexerExpression indexer_exp = e.Left as CodeIndexerExpression;\r\n            if (indexer_exp != null)\r\n            {\r\n                CodeExpressionCollection setter_args = new CodeExpressionCollection();\r\n                foreach (CodeExpression exp in indexer_exp.Indices) setter_args.Add(exp);\r\n                setter_args.Add(e.Right);\r\n\r\n                OutputInvocation(new CodeMethodReferenceExpression(indexer_exp.TargetObject, SpecialWords.IndexerSet),\r\n                    setter_args);\r\n            }\r\n            else\r\n            {\r\n                GenerateExpression(e.Left);\r\n\r\n                Output.Write(WhiteSpace.Space + Tokens.Assignment + WhiteSpace.Space);\r\n                GenerateExpression(e.Right);\r\n            }\r\n\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified attach event statement.\r\n        /// </summary>\r\n        /// <remarks><c>EVENT->Add(LISTENER);</c></remarks>\r\n        protected override void GenerateAttachEventStatement(CodeAttachEventStatement e)\r\n        {\r\n            GenerateEventReferenceExpression(e.Event);\r\n            Output.Write(Tokens.Arrow);\r\n            Output.Write(SpecialWords.Add);\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n\r\n            GenerateExpression(e.Listener);\r\n\r\n            Output.Write(Tokens.ParenthesisRight);\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified attribute block end.\r\n        /// </summary>\r\n        /// <remarks><c>:]</c></remarks>\r\n        protected override void GenerateAttributeDeclarationsEnd(CodeAttributeDeclarationCollection attributes)\r\n        {\r\n            Output.Write(Tokens.AttributeBracketRight);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified attribute block start.\r\n        /// </summary>\r\n        /// <remarks><c>[:</c></remarks>\r\n        protected override void GenerateAttributeDeclarationsStart(CodeAttributeDeclarationCollection attributes)\r\n        {\r\n            Output.Write(Tokens.AttributeBracketLeft);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified base reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>parent</c></remarks>\r\n        protected override void GenerateBaseReferenceExpression(CodeBaseReferenceExpression e)\r\n        {\r\n            Output.Write(SpecialWords.Parent);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified cast expression.\r\n        /// </summary>\r\n        /// <remarks><c>(TARGETTYPE)EXPRESSION</c></remarks>\r\n        protected override void GenerateCastExpression(CodeCastExpression e)\r\n        {\r\n            string target_type = null;\r\n\r\n            if (e.TargetType.ArrayRank > 0)\r\n            {\r\n                target_type = SpecialWords.Array;\r\n            }\r\n            else\r\n            {\r\n                switch (e.TargetType.BaseType)\r\n                {\r\n                    case \"System.Int32\": target_type = SpecialWords.Int; break;\r\n                    case \"System.Double\": target_type = SpecialWords.Double; break;\r\n                    case \"System.Boolean\": target_type = SpecialWords.Bool; break;\r\n                    case \"System.Object\": target_type = SpecialWords.Object; break;\r\n                }\r\n            }\r\n\r\n            if (target_type != null)\r\n            {\r\n                Output.Write(Tokens.ParenthesisLeft);\r\n                Output.Write(target_type);\r\n                Output.Write(Tokens.ParenthesisRight);\r\n            }\r\n\r\n            GenerateExpression(e.Expression);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified comment.\r\n        /// </summary>\r\n        /// <remarks><c>// TEXT</c> or <c>/** TEST */</c></remarks>\r\n        protected override void GenerateComment(CodeComment e)\r\n        {\r\n            string[] lines = e.Text.Split('\\n');\r\n\r\n            if (e.DocComment) Output.WriteLine(Tokens.DocCommentLeft);\r\n\r\n            for (int i = 0; i < lines.Length; i++)\r\n            {\r\n                string line = lines[i].TrimEnd(' ', '\\t', '\\r');\r\n\r\n                if (e.DocComment)\r\n                {\r\n                    Output.Write(Tokens.DocCommentMiddle);\r\n                    line = line.Replace(Tokens.CommentRight, \"*_/\");\r\n                }\r\n                else Output.Write(Tokens.Comment);\r\n\r\n                Output.Write(WhiteSpace.Space);\r\n                Output.WriteLine(line);\r\n            }\r\n\r\n            if (e.DocComment) Output.WriteLine(Tokens.DocCommentRight);\r\n        }\r\n\r\n        private List<string> referencedAssemblies = null;\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified compile unit.\r\n        /// </summary>\r\n        // /// <remarks><c>IMPORTS NAMESPACES</c></remarks>\r\n        protected override void GenerateCompileUnit(CodeCompileUnit e)\r\n        {\r\n            GenerateCompileUnitStart(e);\r\n\r\n            importedNamespaces = new Dictionary<string, string>();\r\n            //globalTypes.Clear();\r\n\r\n            inCompileUnit = true;\r\n            try\r\n            {\r\n                \r\n                // remember referencedAssemblies = e.ReferencedAssemblies\r\n                if (e.ReferencedAssemblies != null && e.ReferencedAssemblies.Count > 0)\r\n                {\r\n                    referencedAssemblies  = new List<string>(e.ReferencedAssemblies.Count);\r\n                    foreach (var reference in e.ReferencedAssemblies)\r\n                        referencedAssemblies.Add(reference);\r\n                }\r\n\r\n                //// imports (all of them must be at the beginning of the unit)\r\n                //int ns_count = e.Namespaces.Count;\r\n                //if (ns_count > 0)\r\n                //{\r\n                //    for (int i = 0; i < ns_count; i++)\r\n                //    {\r\n                //        // import the namespace's imports\r\n                //        GenerateNamespaceImports(e.Namespaces[i]);\r\n\r\n                //        // import the declared namespace - PHP differs in this from e.g. C#, in which\r\n                //        // the current scope is determined by the namespace that we are in\r\n                //        if (!String.IsNullOrEmpty(e.Namespaces[i].Name))\r\n                //        {\r\n                //            GenerateNamespaceImport(new CodeNamespaceImport(e.Namespaces[i].Name));\r\n                //        }\r\n                //    }\r\n                //    Output.WriteLine();\r\n                //}\r\n\r\n                // assembly attributes\r\n                if (e.AssemblyCustomAttributes.Count > 0) assemblyAttributes = e.AssemblyCustomAttributes;\r\n\r\n                // namespaces\r\n                GenerateNamespaces(e);\r\n\r\n                // check whether assembly attributes have been attached to a type\r\n                if (assemblyAttributes != null)\r\n                {\r\n                    OutputAttributes(assemblyAttributes, false, SpecialWords.AssemblyAttr);\r\n\r\n                    // create an artifical class\r\n                    Output.Write(Keywords.Class + WhiteSpace.Space + SpecialWords.AssemblyInfo);\r\n                    Output.Write(Guid.NewGuid().ToString(\"N\"));\r\n\r\n                    GeneratePhpStatements(new CodeStatementCollection(), true);\r\n                    Output.WriteLine();\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                assemblyAttributes = null;\r\n                inCompileUnit = false;\r\n            }\r\n\r\n            GenerateCompileUnitEnd(e);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the end of a compile unit.\r\n        /// </summary>\r\n        /// <remarks><c>?&gt;</c></remarks>\r\n        protected override void GenerateCompileUnitEnd(CodeCompileUnit e)\r\n        {\r\n            base.GenerateCompileUnitEnd(e);\r\n\r\n            Indent--;\r\n            Output.WriteLine(Tokens.PhpBracketRight);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the start of a compile unit.\r\n        /// </summary>\r\n        /// <remarks><c>&lt;?</c></remarks>\r\n        protected override void GenerateCompileUnitStart(CodeCompileUnit e)\r\n        {\r\n#if CODEDOM_DUMP\r\n\t\t\tusing (System.IO.Stream fs = new System.IO.FileStream(System.IO.Path.Combine(@\"C:\\Temp\\CodeDOM\",\r\n\t\t\t\tGuid.NewGuid().ToString() + \".bin\"), System.IO.FileMode.Create))\r\n\t\t\t{\r\n\t\t\t\tnew System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(fs, e);\r\n\t\t\t}\r\n#endif\r\n            Output.WriteLine(Tokens.PhpBracketLeft);\r\n            Indent++;\r\n\r\n            base.GenerateCompileUnitStart(e);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified conditional statement.\r\n        /// </summary>\r\n        /// <remarks><c>if (CONDITION) TRUESTATEMENTS; else FALSESTATEMENTS</c></remarks>\r\n        protected override void GenerateConditionStatement(CodeConditionStatement e)\r\n        {\r\n            Output.Write(Keywords.If);\r\n            Output.Write(WhiteSpace.Space);\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n\r\n            GenerateExpression(e.Condition);\r\n\r\n            Output.Write(Tokens.ParenthesisRight);\r\n\r\n            bool have_else = (e.FalseStatements.Count > 0);\r\n\r\n            GeneratePhpStatements(e.TrueStatements, false, have_else);\r\n\r\n            if (have_else)\r\n            {\r\n                Output.Write(Keywords.Else);\r\n                GeneratePhpStatements(e.FalseStatements);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified constructor.\r\n        /// </summary>\r\n        /// <remarks><c>[CA]MODIFIERS function __construct(PARAMETERS) : parent(BASECTORARGS) BODY</c></remarks>\r\n        protected override void GenerateConstructor(CodeConstructor e, CodeTypeDeclaration c)\r\n        {\r\n            // custom attrs\r\n            OutputAttributes(e.CustomAttributes, false);\r\n\r\n            // signature\r\n            OutputMemberAccessModifier(e.Attributes);\r\n\r\n            Output.Write(Keywords.Function);\r\n            Output.Write(WhiteSpace.Space);\r\n            Output.Write(SpecialWords.Construct);\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n            OutputParameters(e.Parameters);\r\n            Output.Write(Tokens.ParenthesisRight);\r\n\r\n            // base ctor call\r\n            if (classHasParent)\r\n            {\r\n                Output.WriteLine();\r\n\r\n                Indent++;\r\n\r\n                Output.Write(Tokens.Colon);\r\n                Output.Write(WhiteSpace.Space);\r\n                Output.Write(SpecialWords.Parent);\r\n\r\n                Output.Write(Tokens.ParenthesisLeft);\r\n                OutputExpressionList(e.BaseConstructorArgs);\r\n                Output.Write(Tokens.ParenthesisRight);\r\n\r\n                Indent--;\r\n            }\r\n\r\n            // body\r\n            GeneratePhpStatements(e.Statements, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified code default value expression.\r\n        /// </summary>\r\n        /// <remarks><c>NULL</c></remarks>\r\n        protected override void GenerateDefaultValueExpression(CodeDefaultValueExpression e)\r\n        {\r\n            // TODO:\r\n            Output.Write(SpecialWords.Null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified delegate creation expression.\r\n        /// </summary>\r\n        /// <remarks><c>new DELEGATETYPE(array(TARGETOBJECT, METHODNAME))</c></remarks>\r\n        protected override void GenerateDelegateCreateExpression(CodeDelegateCreateExpression e)\r\n        {\r\n            CodeArrayCreateExpression array = new CodeArrayCreateExpression();\r\n\r\n            CodeTypeReferenceExpression type_ref = e.TargetObject as CodeTypeReferenceExpression;\r\n            if (type_ref != null)\r\n            {\r\n                // translate type reference to string\r\n                array.Initializers.Add(new CodePrimitiveExpression(GetTypeOutput(type_ref.Type)));\r\n            }\r\n            else array.Initializers.Add(e.TargetObject);\r\n\r\n            // add method name\r\n            array.Initializers.Add(new CodePrimitiveExpression(e.MethodName));\r\n\r\n            // generate 'new'\r\n            OutputInstantiation(e.DelegateType, new CodeExpressionCollection(new CodeExpression[] { array }));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified delegate invoke expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;Invoke(PARAMETERS)</c></remarks>\r\n        protected override void GenerateDelegateInvokeExpression(CodeDelegateInvokeExpression e)\r\n        {\r\n            OutputInvocation(new CodeMethodReferenceExpression(e.TargetObject, SpecialWords.Invoke), e.Parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified direction expression.\r\n        /// </summary>\r\n        /// <remarks><c>EXPRESSION</c></remarks>\r\n        protected override void GenerateDirectionExpression(CodeDirectionExpression e)\r\n        {\r\n            GenerateExpression(e);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified entry point method.\r\n        /// </summary>\r\n        /// <remarks><c>public function Main() BODY</c></remarks>\r\n        protected override void GenerateEntryPointMethod(CodeEntryPointMethod e, CodeTypeDeclaration c)\r\n        {\r\n            OutputAttributes(e.CustomAttributes, false);\r\n\r\n            Output.Write(\r\n                Keywords.Public + WhiteSpace.Space +\r\n                Keywords.Static + WhiteSpace.Space +\r\n                Keywords.Function + WhiteSpace.Space +\r\n                SpecialWords.Main + Tokens.ParenthesisLeft + Tokens.ParenthesisRight);\r\n\r\n            // body\r\n            GeneratePhpStatements(e.Statements, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified event.\r\n        /// </summary>\r\n        /// <remarks>Not supported.</remarks>\r\n        protected override void GenerateEvent(CodeMemberEvent e, CodeTypeDeclaration c)\r\n        {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified event reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;EVENTNAME</c> or <c>TARGETOBJECT::EVENTNAME</c></remarks>\r\n        protected override void GenerateEventReferenceExpression(CodeEventReferenceExpression e)\r\n        {\r\n            OutputMemberReference(e.TargetObject, e.EventName, true, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified expression statement.\r\n        /// </summary>\r\n        /// <remarks>EXPRESSION;</remarks>\r\n        protected override void GenerateExpressionStatement(CodeExpressionStatement e)\r\n        {\r\n            GenerateExpression(e.Expression);\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified member field.\r\n        /// </summary>\r\n        /// <remarks><c>public/protected/private static/const NAME/$NAME = INITEXPRESSION;</c></remarks>\r\n        protected override void GenerateField(CodeMemberField e)\r\n        {\r\n            CodeAttributeDeclarationCollection attributes = e.CustomAttributes;\r\n\r\n            // check whether [AppStatic] should be used\r\n            if ((e.Attributes & (MemberAttributes.Const | MemberAttributes.Static)) == MemberAttributes.Static)\r\n            {\r\n                bool found = false;\r\n\r\n                for (int i = e.CustomAttributes.Count - 1; i >= 0; i--)\r\n                {\r\n                    string type_name = e.CustomAttributes[i].AttributeType.BaseType;\r\n                    if (type_name == \"ThreadStatic\" || type_name == \"ThreadStaticAttribute\" ||\r\n                        type_name == \"System.ThreadStaticAttribute\")\r\n                    {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (!found)\r\n                {\r\n                    attributes = new CodeAttributeDeclarationCollection(attributes);\r\n                    attributes.Add(AppStaticAttribute);\r\n                }\r\n            }\r\n\r\n            OutputAttributes(attributes, false);\r\n\r\n            OutputMemberAccessModifier(e.Attributes);\r\n            OutputFieldScopeModifier(e.Attributes);\r\n\r\n            if ((e.Attributes & MemberAttributes.Const) == MemberAttributes.Const)\r\n            {\r\n                // no '$' prefix for constants\r\n                Output.Write(e.Name);\r\n            }\r\n            else OutputVariable(e.Name);\r\n\r\n            if (e.InitExpression != null)\r\n            {\r\n                Output.Write(WhiteSpace.Space + Tokens.Assignment + WhiteSpace.Space);\r\n\r\n                bool notsupported = e.InitExpression is CodeMethodInvokeExpression;\r\n                if (notsupported)\r\n                {\r\n                    Output.Write(SpecialWords.Null);\r\n                    Output.Write(Tokens.CommentLeft);\r\n                    Output.Write(\" TODO: \");    // PHP does not support fields with method call initializer\r\n                }\r\n\r\n                GenerateExpression(e.InitExpression);\r\n\r\n                if (notsupported)\r\n                {\r\n                    Output.Write(Tokens.CommentRight);\r\n                }\r\n            }\r\n            base.Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified field reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;FIELDNAME</c> or <c>TARGETOBJECT::FIELDNAME</c></remarks>\r\n        protected override void GenerateFieldReferenceExpression(CodeFieldReferenceExpression e)\r\n        {\r\n            OutputMemberReference(e.TargetObject, e.FieldName, true, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified goto statement.\r\n        /// </summary>\r\n        /// <remarks><c>goto LABEL;</c></remarks>\r\n        protected override void GenerateGotoStatement(CodeGotoStatement e)\r\n        {\r\n            Output.Write(SpecialWords.Goto + WhiteSpace.Space);\r\n            Output.Write(e.Label);\r\n\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified indexer expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGET->get_Item(INDEX1, INDEX2)...</c></remarks>\r\n        protected override void GenerateIndexerExpression(CodeIndexerExpression e)\r\n        {\r\n            OutputInvocation(new CodeMethodReferenceExpression(e.TargetObject, SpecialWords.IndexerGet), e.Indices);\r\n            // TODO\r\n            //OutputArrayIndexerExpression(e.TargetObject, e.Indices);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified iteration statement.\r\n        /// </summary>\r\n        /// <remarks><c>INIT; while(TEST) STATEMENTS INCREMENT</c></remarks>\r\n        protected override void GenerateIterationStatement(CodeIterationStatement e)\r\n        {\r\n            // init\r\n            if (e.InitStatement != null)\r\n                GenerateStatement(e.InitStatement);\r\n\r\n            // test\r\n            Output.Write(Keywords.While + WhiteSpace.Space + Tokens.ParenthesisLeft);\r\n            if (e.TestExpression != null)\r\n                GenerateExpression(e.TestExpression);\r\n            Output.Write(Tokens.ParenthesisRight);\r\n\r\n            int inc_index = -1;\r\n            if (e.IncrementStatement != null)\r\n                inc_index = e.Statements.Add(e.IncrementStatement);\r\n\r\n            try\r\n            {\r\n                // statements + increment\r\n                GeneratePhpStatements(e.Statements);\r\n            }\r\n            finally\r\n            {\r\n                if (inc_index >= 0)\r\n                    e.Statements.RemoveAt(inc_index);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified labeled statement.\r\n        /// </summary>\r\n        /// <remarks><c>LABEL: STATEMENT</c> or <c>LABEL:</c> if <param name=\"e\"/>.<see cref=\"CodeLabeledStatement.Statement\">Statement</see> is  null</remarks>\r\n        protected override void GenerateLabeledStatement(CodeLabeledStatement e)\r\n        {\r\n            if (Indent > 0)\r\n            {\r\n                Indent--;\r\n                Output.Write(e.Label);\r\n                Output.WriteLine(Tokens.Colon);\r\n                Indent++;\r\n            }\r\n            else\r\n            {\r\n                Output.Write(e.Label);\r\n                Output.WriteLine(Tokens.Colon);\r\n            }\r\n\r\n            if (e.Statement != null) GenerateStatement(e.Statement);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified line pragma end.\r\n        /// </summary>\r\n        /// <remarks><c>#pragma default line #pragma default file</c></remarks>\r\n        protected override void GenerateLinePragmaEnd(CodeLinePragma e)\r\n        {\r\n            if (e is CodeLinePragmaNoWrite) return;\r\n            // wrap if generating the pragma outside <? ?>\r\n            if (!inCompileUnit)\r\n            {\r\n                Output.WriteLine(Tokens.PhpBracketLeft);\r\n                Indent++;\r\n            }\r\n\r\n            Output.WriteLine(\"#pragma default line\");\r\n            Output.WriteLine(\"#pragma default file\");\r\n\r\n            if (!inCompileUnit)\r\n            {\r\n                Indent--;\r\n                Output.WriteLine(Tokens.PhpBracketRight);\r\n            }\r\n            else Output.WriteLine();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified line pragma start.\r\n        /// </summary>\r\n        /// <remarks><c>#pragma file FILENAME #pragma line LINENUMBER</c></remarks>\r\n        protected override void GenerateLinePragmaStart(CodeLinePragma e)\r\n        {\r\n            if (e is CodeLinePragmaNoWrite) return;\r\n            // wrap if generating the pragma outside <? ?>\r\n            if (!inCompileUnit)\r\n            {\r\n                Output.WriteLine(Tokens.PhpBracketLeft);\r\n                Indent++;\r\n            }\r\n            else Output.WriteLine();\r\n\r\n            Output.Write(\"#pragma file \");\r\n            Output.WriteLine(e.FileName);\r\n            Output.Write(\"#pragma line \");\r\n            Output.WriteLine(e.LineNumber - 1); // the number applies to the current line!\r\n\r\n            if (!inCompileUnit)\r\n            {\r\n                Indent--;\r\n                Output.Write(Tokens.PhpBracketRight);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified method.\r\n        /// </summary>\r\n        /// <remarks><c>public/protected/private abstract/final/static function(PARAMETERS) BODY/;</c></remarks>\r\n        protected override void GenerateMethod(CodeMemberMethod e, CodeTypeDeclaration c)\r\n        {\r\n            OutputAttributes(e.CustomAttributes, false);\r\n            if (e.ReturnTypeCustomAttributes.Count > 0)\r\n                OutputAttributes(e.ReturnTypeCustomAttributes, false, \"return:\");\r\n\r\n            if (!IsCurrentInterface)\r\n            {\r\n                OutputMemberAccessModifier(e.Attributes);\r\n                OutputMemberScopeModifier(e.Attributes);\r\n            }\r\n\r\n            // signature\r\n            Output.Write(Keywords.Function + WhiteSpace.Space);\r\n            Output.Write(e.Name);\r\n\r\n            OutputTypeParameters(e.TypeParameters);\r\n\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n            OutputParameters(e.Parameters);\r\n            Output.Write(Tokens.ParenthesisRight);\r\n\r\n            // body\r\n            if (!IsCurrentInterface && ((e.Attributes & MemberAttributes.ScopeMask) != MemberAttributes.Abstract))\r\n            {\r\n                GeneratePhpStatements(e.Statements, true);\r\n            }\r\n            else Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified method invoke expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;METHODNAME&lt;:TYPEARGS:&gt;(PARAMETERS)</c> or\r\n        /// <c>TYPEREF::METHODNAME&lt;:TYPEARGS:&gt;(PARAMETERS)</c></remarks>\r\n        protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression e)\r\n        {\r\n            OutputInvocation(e.Method, e.Parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified method reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;METHODNAME&lt;:TYPEARGS:&gt;</c> or\r\n        /// <c>TYPEREF::METHODNAME&lt;:TYPEARGS:&gt;</c></remarks>\r\n        protected override void GenerateMethodReferenceExpression(CodeMethodReferenceExpression e)\r\n        {\r\n            OutputMemberReference(e.TargetObject, e.MethodName, false, e.TypeArguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified method return statement.\r\n        /// </summary>\r\n        /// <remarks><c>return EXPRESSION;</c></remarks>\r\n        protected override void GenerateMethodReturnStatement(CodeMethodReturnStatement e)\r\n        {\r\n            Output.Write(Keywords.Return + WhiteSpace.Space);\r\n            GenerateExpression(e.Expression);\r\n\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified namespace declaration.\r\n        /// </summary>\r\n        protected override void GenerateNamespace(CodeNamespace e)\r\n        {\r\n            GenerateCommentStatements(e.Comments);\r\n            GenerateNamespaceStart(e);\r\n\r\n            // imports are generated at the very beginning of the containing compile unit\r\n            //GenerateNamespaceImports(e);\r\n\r\n            GenerateTypes(e);\r\n            GenerateNamespaceEnd(e);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the end of a namespace.\r\n        /// </summary>\r\n        /// <remarks><c>}</c></remarks>\r\n        protected override void GenerateNamespaceEnd(CodeNamespace e)\r\n        {\r\n            if (!String.IsNullOrEmpty(e.Name))\r\n            {\r\n                Indent--;\r\n                Output.WriteLine(Tokens.BraceRight);\r\n            }\r\n\r\n            currentNamespace = null;\r\n            importedNamespaces.Clear();\r\n            getTypeOutputCache.Clear();\r\n\r\n            // restore aliases in global namespace\r\n            if (previousImportedNamespaces != null && previousImportedNamespaces.Count > 0)\r\n                importedNamespaces = new Dictionary<string, string>(previousImportedNamespaces);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts CLR namespace name to some short form used as alias.\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <returns></returns>\r\n        /// <remarks>System.Xml.Linq to SXLinq.</remarks>\r\n        private string FullClrNamespaceToShort(string/*!*/name)\r\n        {\r\n            string[] names = name.Split('.');\r\n\r\n            StringBuilder bld = new StringBuilder(8);\r\n\r\n            for (int i = 0; i < names.Length - 1; i++)\r\n            {\r\n                bld.Append(names[i][0]);\r\n            }\r\n\r\n            bld.Append(names[names.Length - 1]);\r\n\r\n            return bld.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified namespace import.\r\n        /// </summary>\r\n        /// <remarks><c>import namespace NAMESPACE;</c></remarks>\r\n        protected override void GenerateNamespaceImport(CodeNamespaceImport e)\r\n        {\r\n            if (inCompileUnit)\r\n            {\r\n                if (importedNamespaces.ContainsKey(e.Namespace)) return;\r\n            }\r\n\r\n            string alias = FullClrNamespaceToShort(e.Namespace);\r\n\r\n            // //import namespace <e>;\r\n            //Output.Write(Keywords.Import + WhiteSpace.Space + Keywords.Namespace + WhiteSpace.Space);\r\n            //Output.Write(e.Namespace.Replace(\".\", Tokens.NamespaceSeparator));\r\n            //Output.WriteLine(Tokens.Semicolon);\r\n\r\n            // use <e> as <alias>;\r\n            Output.Write(Keywords.Use);\r\n            Output.Write(e.Namespace.Replace(\".\", Tokens.NamespaceSeparator));\r\n            Output.Write(WhiteSpace.Space + Keywords.As + WhiteSpace.Space);\r\n            Output.Write(alias);\r\n            Output.WriteLine(Tokens.Semicolon);\r\n\r\n            if (inCompileUnit)\r\n            {\r\n                importedNamespaces.Add(e.Namespace, alias);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Current namespace, CLR notation\r\n        /// </summary>\r\n        private string currentNamespace = null;\r\n\r\n        /// <summary>\r\n        /// Generates code for the start of a namespace.\r\n        /// </summary>\r\n        /// <remarks><c>namespace NAME {</c></remarks>\r\n        protected override void GenerateNamespaceStart(CodeNamespace e)\r\n        {\r\n            // clear importedNamespaces\r\n            previousImportedNamespaces = new Dictionary<string, string>(importedNamespaces);\r\n            importedNamespaces.Clear();\r\n            getTypeOutputCache.Clear();\r\n\r\n            currentNamespace = string.IsNullOrEmpty(e.Name) ? null : e.Name;\r\n\r\n            if (!String.IsNullOrEmpty(e.Name))\r\n            {\r\n                Output.Write(Keywords.Namespace + WhiteSpace.Space);\r\n                Output.Write(e.Name.Replace(\".\", Tokens.NamespaceSeparator));\r\n\r\n                if (Options.BracingStyle == \"C\")\r\n                {\r\n                    Output.WriteLine();\r\n                }\r\n                else Output.Write(WhiteSpace.Space);\r\n\r\n                Output.WriteLine(Tokens.BraceLeft);\r\n                Indent++;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified object creation expression.\r\n        /// </summary>\r\n        /// <remarks><c>new CREATETYPE(PARAMETERS)</c></remarks>\r\n        protected override void GenerateObjectCreateExpression(CodeObjectCreateExpression e)\r\n        {\r\n            OutputInstantiation(e.CreateType, e.Parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified parameter declaration expression.\r\n        /// </summary>\r\n        /// <remarks><c>[CA]TYPE &amp;$NAME</c></remarks>\r\n        protected override void GenerateParameterDeclarationExpression(CodeParameterDeclarationExpression e)\r\n        {\r\n            int out_attr_index = -1;\r\n\r\n            if (e.Direction == FieldDirection.Out)\r\n            {\r\n                out_attr_index = e.CustomAttributes.Add(OutAttribute);\r\n            }\r\n\r\n            try\r\n            {\r\n                if (e.CustomAttributes.Count > 0)\r\n                {\r\n                    OutputAttributes(e.CustomAttributes, true);\r\n                    Output.Write(WhiteSpace.Space);\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                if (out_attr_index >= 0) e.CustomAttributes.RemoveAt(out_attr_index);\r\n            }\r\n\r\n            // type hint\r\n            OutputType(e.Type);\r\n            Output.Write(WhiteSpace.Space);\r\n\r\n            OutputDirection(e.Direction);\r\n            OutputVariable(e.Name);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified property.\r\n        /// </summary>\r\n        /// <remarks>Not supported.</remarks>\r\n        protected override void GenerateProperty(CodeMemberProperty e, CodeTypeDeclaration c)\r\n        {\r\n            GenerateComment(new CodeComment(\"PROPERTY: \" + e.Name));\r\n            //throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified property reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>TARGETOBJECT-&gt;PROPERTYNAME</c> or <c>TARGETOBJECT::PROPERTYNAME</c></remarks>\r\n        protected override void GeneratePropertyReferenceExpression(CodePropertyReferenceExpression e)\r\n        {\r\n            OutputMemberReference(e.TargetObject, e.PropertyName, true, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified property set value reference expression.\r\n        /// </summary>\r\n        /// <remarks>Not supported.</remarks>\r\n        protected override void GeneratePropertySetValueReferenceExpression(CodePropertySetValueReferenceExpression e)\r\n        {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified remove event statement.\r\n        /// </summary>\r\n        /// <remarks><c>EVENT->Remove(LISTENER);</c></remarks>\r\n        protected override void GenerateRemoveEventStatement(CodeRemoveEventStatement e)\r\n        {\r\n            GenerateEventReferenceExpression(e.Event);\r\n            Output.Write(Tokens.Arrow);\r\n            Output.Write(SpecialWords.Remove);\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n\r\n            GenerateExpression(e.Listener);\r\n\r\n            Output.Write(Tokens.ParenthesisRight);\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs the code of the specified literal code fragment expression.\r\n        /// </summary>\r\n        /// <remarks><c>VALUE</c></remarks>\r\n        protected override void GenerateSnippetExpression(CodeSnippetExpression e)\r\n        {\r\n            Output.Write(e.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs the code of the specified literal code fragment class member.\r\n        /// </summary>\r\n        /// <remarks><c>TEXT</c></remarks>\r\n        protected override void GenerateSnippetMember(CodeSnippetTypeMember e)\r\n        {\r\n            Output.Write(e.Text);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified this reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>$this</c></remarks>\r\n        protected override void GenerateThisReferenceExpression(CodeThisReferenceExpression e)\r\n        {\r\n            OutputVariable(SpecialWords.This);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified throw exception statement.\r\n        /// </summary>\r\n        /// <remarks><c>throw TOTHROW;</c></remarks>\r\n        protected override void GenerateThrowExceptionStatement(CodeThrowExceptionStatement e)\r\n        {\r\n            Output.Write(Keywords.Throw + WhiteSpace.Space);\r\n            GenerateExpression(e.ToThrow);\r\n\r\n            Output.WriteLine(Tokens.Semicolon);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified try...catch...finally statement.\r\n        /// </summary>\r\n        /// <remarks><c>try BLOCK catch (TYPE1 $VAR1) BLOCK1 ... FINALLYBLOCK</c></remarks>\r\n        protected override void GenerateTryCatchFinallyStatement(CodeTryCatchFinallyStatement e)\r\n        {\r\n            // try\r\n            Output.Write(Keywords.Try);\r\n\r\n            int catch_count = e.CatchClauses.Count;\r\n            GeneratePhpStatements(e.TryStatements, true, (catch_count > 0));\r\n\r\n            // catch\r\n            for (int i = 0; i < catch_count; i++)\r\n            {\r\n                CodeCatchClause catch_clause = e.CatchClauses[i];\r\n\r\n                Output.WriteLine(Keywords.Catch + WhiteSpace.Space + Tokens.ParenthesisLeft);\r\n                OutputType(catch_clause.CatchExceptionType);\r\n\r\n                Output.Write(WhiteSpace.Space);\r\n                OutputVariable(catch_clause.LocalName);\r\n                Output.Write(Tokens.ParenthesisRight);\r\n\r\n                GeneratePhpStatements(catch_clause.Statements, true, (i < catch_count - 1));\r\n            }\r\n\r\n            // \"finally\"\r\n            if (e.FinallyStatements != null)\r\n            {\r\n                int finally_count = e.FinallyStatements.Count;\r\n\r\n                for (int i = 0; i < finally_count; i++)\r\n                {\r\n                    GenerateStatement(e.FinallyStatements[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified class constructor.\r\n        /// </summary>\r\n        /// <remarks>Not supported.</remarks>\r\n        protected override void GenerateTypeConstructor(CodeTypeConstructor e)\r\n        {\r\n            throw new Exception(\"The method or operation is not implemented.\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified type of expression.\r\n        /// </summary>\r\n        /// <remarks><c>System:::Type::GetType(\"BASETYPE\")</c></remarks>\r\n        protected override void GenerateTypeOfExpression(CodeTypeOfExpression e)\r\n        {\r\n            /*Output.Write(\"System:::Type::GetType(\\\"\");\r\n            Output.Write(e.Type.BaseType);\r\n            Output.Write(\"\\\")\");*/\r\n            Output.Write(Keywords.TypeOf);\r\n            Output.Write(WhiteSpace.Space);\r\n            OutputType(e.Type);//Output.Write(e.Type.BaseType);\r\n            Output.Write(WhiteSpace.Space);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified end class.\r\n        /// </summary>\r\n        /// <remarks><c>}</c></remarks>\r\n        protected override void GenerateTypeEnd(CodeTypeDeclaration e)\r\n        {\r\n            Indent--;\r\n            Output.WriteLine(Tokens.BraceRight);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Known global types. Used when outputting a type to resolve it properly and fully qualified.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This list is never cleared in this instance!\r\n        /// Cleared automatically when <see cref=\"PhpCodeProvider\"/> creates new instance of <see cref=\"PhpCodeGenerator\"/>.\r\n        /// \r\n        /// This list caches global types introduced within this instance.\r\n        /// </remarks>\r\n        private List<string>/*!*/globalTypes = new List<string>();\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified start class.\r\n        /// </summary>\r\n        /// <remarks><c>partial class/interface NAME extends BASE implements/extends IFACES {</c></remarks>\r\n        protected override void GenerateTypeStart(CodeTypeDeclaration e)\r\n        {\r\n            if (e.IsEnum || e.IsStruct || IsCurrentDelegate)\r\n            {\r\n                throw new Exception(\"The method or operation is not implemented.\");\r\n            }\r\n\r\n            // if assembly custom attributes have not been generated yet, do it now\r\n            if (assemblyAttributes != null)\r\n            {\r\n                OutputAttributes(assemblyAttributes, false, SpecialWords.AssemblyAttr);\r\n                assemblyAttributes = null;\r\n            }\r\n\r\n            int attr_index = e.CustomAttributes.Add(ExportAttribute);\r\n            try\r\n            {\r\n                OutputAttributes(e.CustomAttributes, false);\r\n            }\r\n            finally\r\n            {\r\n                e.CustomAttributes.RemoveAt(attr_index);\r\n            }\r\n\r\n            OutputTypeModifiers(e);\r\n            Output.Write(e.Name);\r\n\r\n            OutputTypeParameters(e.TypeParameters);\r\n\r\n            // remember declared type (this won't be declared in any referenced assembly, but we need to be able to resolve it)\r\n            string fullName = string.IsNullOrEmpty(currentNamespace) ? e.Name : (currentNamespace + \".\" + e.Name);\r\n            if (!globalTypes.Contains(fullName))\r\n                globalTypes.Add(fullName);\r\n\r\n            int base_count = e.BaseTypes.Count;\r\n            int iface_offset = 0;\r\n\r\n            classHasParent = false;\r\n            if (e.IsClass && base_count > 0)\r\n            {\r\n                // base class should be the first item of the BaseTypes collection\r\n                CodeTypeReference parent = e.BaseTypes[0];\r\n\r\n                if (!typeIsInterface(parent))\r\n                {\r\n                    if (parent.BaseType != \"Object\" && parent.BaseType != \"System.Object\")\r\n                    {\r\n                        // extends parent\r\n                        Output.Write(WhiteSpace.Space + Keywords.Extends + WhiteSpace.Space);\r\n                        OutputType(parent);\r\n\r\n                        classHasParent = true;\r\n                    }\r\n\r\n                    iface_offset = 1;\r\n                }\r\n            }\r\n\r\n            if (base_count > iface_offset)\r\n            {\r\n                // implements/extends interfaces\r\n                Output.Write(WhiteSpace.Space);\r\n\r\n                if (e.IsClass) Output.Write(Keywords.Implements);\r\n                else Output.Write(Keywords.Extends);\r\n\r\n                Output.Write(WhiteSpace.Space);\r\n\r\n                OutputType(e.BaseTypes[iface_offset]);\r\n                for (int i = iface_offset + 1; i < base_count; i++)\r\n                {\r\n                    Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n                    OutputType(e.BaseTypes[i]);\r\n                }\r\n            }\r\n\r\n            if (Options.BracingStyle == \"C\")\r\n            {\r\n                Output.WriteLine();\r\n            }\r\n            else Output.Write(WhiteSpace.Space);\r\n\r\n            Output.WriteLine(Tokens.BraceLeft);\r\n\r\n            Indent++;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified variable declaration statement.\r\n        /// </summary>\r\n        /// <remarks><c>$NAME = INITEXPRESSION;</c></remarks>\r\n        protected override void GenerateVariableDeclarationStatement(CodeVariableDeclarationStatement e)\r\n        {\r\n            if (e.InitExpression != null)\r\n            {\r\n                OutputVariable(e.Name);\r\n                Output.Write(WhiteSpace.Space + Tokens.Assignment + WhiteSpace.Space);\r\n\r\n                GenerateExpression(e.InitExpression);\r\n                Output.WriteLine(Tokens.Semicolon);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the specified variable reference expression.\r\n        /// </summary>\r\n        /// <remarks><c>$VARIABLENAME</c></remarks>\r\n        protected override void GenerateVariableReferenceExpression(CodeVariableReferenceExpression e)\r\n        {\r\n            OutputVariable(e.VariableName);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the given statements.\r\n        /// </summary>\r\n        /// <param name=\"statements\">The statements.</param>\r\n        /// <param name=\"forceBlock\"><B>True</B> to force braced block even if the number of statements is less than\r\n        /// two, <B>false</B> otherwise.</param>\r\n        /// <param name=\"elseClosing\"><B>True</B> to suppress generating newline if\r\n        /// <see cref=\"CodeGeneratorOptions.ElseOnClosing\"/> is set.</param>\r\n        /// <remarks><c>STATEMENT</c> or <c>{ STATEMENTS }</c></remarks>\r\n        private void GeneratePhpStatements(CodeStatementCollection/*!*/ statements, bool forceBlock, bool elseClosing)\r\n        {\r\n            int count = statements.Count;\r\n\r\n            if (!forceBlock && count < 2)\r\n            {\r\n                Output.WriteLine();\r\n\r\n                Indent++;\r\n\r\n                if (count == 0) Output.WriteLine(Tokens.Semicolon);\r\n                else GenerateStatement(statements[0]);\r\n\r\n                Indent--;\r\n            }\r\n            else\r\n            {\r\n                if (Options.BracingStyle == \"C\")\r\n                {\r\n                    Output.WriteLine();\r\n                }\r\n                else Output.Write(WhiteSpace.Space);\r\n\r\n                Output.WriteLine(Tokens.BraceLeft);\r\n                Indent++;\r\n\r\n                for (int i = 0; i < count; i++)\r\n                {\r\n                    GenerateStatement(statements[i]);\r\n                }\r\n\r\n                Indent--;\r\n                Output.Write(Tokens.BraceRight);\r\n\r\n                // check whether we should go to the new line or not\r\n                if (elseClosing && Options.ElseOnClosing)\r\n                {\r\n                    Output.Write(WhiteSpace.Space);\r\n                }\r\n                else Output.WriteLine();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the given statements.\r\n        /// </summary>\r\n        /// <remarks><c>STATEMENT</c> or <c>{ STATEMENTS }</c></remarks>\r\n        private void GeneratePhpStatements(CodeStatementCollection/*!*/ statements, bool forceBlock)\r\n        {\r\n            GeneratePhpStatements(statements, forceBlock, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates code for the given statements.\r\n        /// </summary>\r\n        /// <remarks><c>STATEMENT</c> or <c>{ STATEMENTS }</c></remarks>\r\n        private void GeneratePhpStatements(CodeStatementCollection/*!*/ statements)\r\n        {\r\n            GeneratePhpStatements(statements, false, false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Generation: Output*\r\n\r\n        /// <summary>\r\n        /// Outputs a variable reference.\r\n        /// </summary>\r\n        /// <remarks><c>$NAME</c></remarks>\r\n        private void OutputVariable(string name)\r\n        {\r\n            Output.Write(Tokens.Dollar);\r\n            Output.Write(name);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs member access modifier.\r\n        /// </summary>\r\n        /// <remarks><c>public/protected/private</c></remarks>\r\n        protected override void OutputMemberAccessModifier(MemberAttributes attributes)\r\n        {\r\n            // no modifiers allowed for constants\r\n            if ((attributes & MemberAttributes.Const) != MemberAttributes.Const)\r\n            {\r\n                // treat internals and protected internals as publics\r\n                if ((attributes & MemberAttributes.Private) == MemberAttributes.Private)\r\n                {\r\n                    Output.Write(Keywords.Private + WhiteSpace.Space);\r\n                }\r\n                else if ((attributes & (MemberAttributes.Family | MemberAttributes.Assembly)) == MemberAttributes.Family)\r\n                {\r\n                    Output.Write(Keywords.Protected + WhiteSpace.Space);\r\n                }\r\n                else Output.Write(Keywords.Public + WhiteSpace.Space);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs field scope modifier.\r\n        /// </summary>\r\n        /// <remarks><c>const/static</c></remarks>\r\n        protected override void OutputFieldScopeModifier(MemberAttributes attributes)\r\n        {\r\n            if ((attributes & MemberAttributes.Const) == MemberAttributes.Const)\r\n            {\r\n                Output.Write(Keywords.Const + WhiteSpace.Space);\r\n            }\r\n            else if ((attributes & MemberAttributes.Static) == MemberAttributes.Static)\r\n            {\r\n                Output.Write(Keywords.Static + WhiteSpace.Space);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs member (method in particular) scope modifier.\r\n        /// </summary>\r\n        /// <remarks><c>abstract/final static</c></remarks>\r\n        protected override void OutputMemberScopeModifier(MemberAttributes attributes)\r\n        {\r\n            switch (attributes & MemberAttributes.Static)\r\n            {\r\n                case MemberAttributes.Abstract:\r\n                    {\r\n                        Output.Write(Keywords.Abstract + WhiteSpace.Space);\r\n                        break;\r\n                    }\r\n\r\n                case MemberAttributes.Final:\r\n                    {\r\n                        Output.Write(Keywords.Final + WhiteSpace.Space);\r\n                        break;\r\n                    }\r\n\r\n                case MemberAttributes.Static:\r\n                    {\r\n                        Output.Write(Keywords.Static + WhiteSpace.Space);\r\n                        return;\r\n                    }\r\n            }\r\n\r\n            // static may be combined with abstract or final -> use New to indicate Static\r\n            if ((attributes & MemberAttributes.New) == MemberAttributes.New)\r\n            {\r\n                Output.Write(Keywords.Static + WhiteSpace.Space);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs type (class and interface) modifiers.\r\n        /// </summary>\r\n        /// <remarks><c>partial class/interface</c></remarks>\r\n        private void OutputTypeModifiers(CodeTypeDeclaration e)\r\n        {\r\n            Debug.Assert(!e.IsStruct && !e.IsEnum);\r\n\r\n            if (e.IsPartial) Output.Write(Keywords.Partial + WhiteSpace.Space);\r\n\r\n            if (e.IsClass) Output.Write(Keywords.Class + WhiteSpace.Space);\r\n            // TODO: Keywords.Trait\r\n            else if (e.IsInterface) Output.Write(Keywords.Interface + WhiteSpace.Space);\r\n            else throw new NotSupportedException();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs field direction (used for formal parameters).\r\n        /// </summary>\r\n        /// <remarks><c>&amp;</c></remarks>\r\n        protected override void OutputDirection(FieldDirection dir)\r\n        {\r\n            if (dir != FieldDirection.In) Output.Write(Tokens.Reference);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs reference to an instance or static member.\r\n        /// </summary>\r\n        /// <param name=\"target\">An expression denoting the instance or type (if <B>null</B>, <c>$this</c> is assumed).\r\n        /// </param>\r\n        /// <param name=\"name\">The member name.</param>\r\n        /// <param name=\"variable\"><B>True</B> if the member is a variable (i.e. property), <b>false</b> otherwise.</param>\r\n        /// <param name=\"typeArgs\">Optional type arguments if this is a method reference.</param>\r\n        private void OutputMemberReference(CodeExpression target, string name, bool variable, CodeTypeReferenceCollection typeArgs)\r\n        {\r\n            CodeTypeReferenceExpression type_ref;\r\n            CodeBaseReferenceExpression base_ref = null;\r\n\r\n            if ((type_ref = target as CodeTypeReferenceExpression) != null ||\r\n                (base_ref = target as CodeBaseReferenceExpression) != null)\r\n            {\r\n                // \"static\" reference\r\n                if (type_ref != null) OutputType(type_ref.Type);\r\n                else GenerateBaseReferenceExpression(base_ref);\r\n\r\n                Output.Write(Tokens.DoubleColon);\r\n\r\n                if (variable)\r\n                {\r\n                    if (type_ref != null && IsFieldConstant(type_ref, name)) Output.Write(name);\r\n                    else OutputVariable(name);\r\n                }\r\n                else Output.Write(name);\r\n            }\r\n            else\r\n            {\r\n                // instance reference\r\n                if (target == null)\r\n                {\r\n                    // let's suppose this is $this->NAME (might also be self::NAME but that cannot be\r\n                    // decided according to the provided information\r\n                    OutputVariable(SpecialWords.This);\r\n                }\r\n                else GenerateExpression(target);\r\n\r\n                Output.Write(Tokens.Arrow);\r\n                Output.Write(name);\r\n            }\r\n\r\n            Output.Write(GetTypeArgumentsOutput(typeArgs));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs an array indexer expression, i.e. a target followed by brackets.\r\n        /// </summary>\r\n        /// <remarks><c>TARGET[INDEX1]...</c></remarks>\r\n        private void OutputArrayIndexerExpression(CodeExpression target, CodeExpressionCollection indices)\r\n        {\r\n            GenerateExpression(target);\r\n\r\n            for (int i = 0; i < indices.Count; i++)\r\n            {\r\n                Output.Write(Tokens.BracketLeft);\r\n                GenerateExpression(indices[i]);\r\n                Output.Write(Tokens.BracketRight);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs type parameter declaration (part of generic type and generic method declaration).\r\n        /// </summary>\r\n        /// <remarks></remarks>\r\n        private void OutputTypeParameters(CodeTypeParameterCollection typeParams)\r\n        {\r\n            int count;\r\n            if (typeParams != null && (count = typeParams.Count) > 0)\r\n            {\r\n                Output.Write(Tokens.GenericBracketLeft);\r\n\r\n                Output.Write(typeParams[0].Name);\r\n                for (int i = 1; i < count; i++)\r\n                {\r\n                    Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n                    Output.Write(typeParams[i].Name);\r\n                }\r\n\r\n                Output.Write(Tokens.GenericBracketRight);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs type instantiation.\r\n        /// </summary>\r\n        /// <remarks><c>new TYPE(ARGUMENTS)</c></remarks>\r\n        private void OutputInstantiation(CodeTypeReference type, CodeExpressionCollection arguments)\r\n        {\r\n            Output.Write(Keywords.New + WhiteSpace.Space);\r\n\r\n            OutputType(type);\r\n            OutputActualArguments(arguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs method invocation.\r\n        /// </summary>\r\n        /// <remarks><c>METHOD(ARGUMENTS)</c></remarks>\r\n        private void OutputInvocation(CodeMethodReferenceExpression method, CodeExpressionCollection arguments)\r\n        {\r\n            OutputMemberReference(method.TargetObject, method.MethodName, false, method.TypeArguments);\r\n            OutputActualArguments(arguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs actual arguments including the parentheses.\r\n        /// </summary>\r\n        /// <remarks><c>(ARGUMENTS)</c></remarks>\r\n        private void OutputActualArguments(CodeExpressionCollection arguments)\r\n        {\r\n            Output.Write(Tokens.ParenthesisLeft);\r\n\r\n            int count = arguments.Count;\r\n            if (count > 0)\r\n            {\r\n                GenerateExpression(arguments[0]);\r\n                for (int i = 1; i < count; i++)\r\n                {\r\n                    Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n                    GenerateExpression(arguments[i]);\r\n                }\r\n            }\r\n\r\n            Output.Write(Tokens.ParenthesisRight);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs custom attribute declarations.\r\n        /// </summary>\r\n        /// <remarks><c>[ATTR1(PARAMETERS1), ATTR2(PARAMETERS2), ...]</c></remarks>\r\n        protected override void OutputAttributeDeclarations(CodeAttributeDeclarationCollection attributes)\r\n        {\r\n            OutputAttributes(attributes, false, String.Empty);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs a custom attribute argument (named or unnamed).\r\n        /// </summary>\r\n        /// <remarks><c>VALUE/$NAME = VALUE</c></remarks>\r\n        protected override void OutputAttributeArgument(CodeAttributeArgument arg)\r\n        {\r\n            if (!String.IsNullOrEmpty(arg.Name))\r\n            {\r\n                // named argument\r\n                OutputVariable(arg.Name);\r\n                Output.Write(WhiteSpace.Space + Tokens.DoubleArrow + WhiteSpace.Space);\r\n            }\r\n\r\n            GenerateExpression(arg.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs custom attributes.\r\n        /// </summary>\r\n        /// <remarks><c>[ATTR1(PARAMETERS1), ATTR2(PARAMETERS2), ...]</c></remarks>\r\n        private void OutputAttributes(CodeAttributeDeclarationCollection/*!*/ attributes, bool inLine)\r\n        {\r\n            OutputAttributes(attributes, inLine, String.Empty);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Outputs custom attributes.\r\n        /// </summary>\r\n        /// <param name=\"attributes\">The attributes to output.</param>\r\n        /// <param name=\"inLine\"><B>True</B> to output the attributes inline (e.g. parameter attrs.),\r\n        /// <B>false</B> to output the parameters to a separate line.</param>\r\n        /// <param name=\"prefix\">The prefix to use (e.g. <c>return:</c>).</param>\r\n        /// <remarks><c>[PREFIX ATTR1(PARAMETERS1), ATTR2(PARAMETERS2), ...]</c></remarks>\r\n        private void OutputAttributes(CodeAttributeDeclarationCollection/*!*/ attributes, bool inLine,\r\n            string/*!*/ prefix)\r\n        {\r\n            int count = attributes.Count;\r\n\r\n            if (count > 0)\r\n            {\r\n                GenerateAttributeDeclarationsStart(attributes);\r\n                Output.Write(prefix);\r\n\r\n                // iterate over attributes\r\n                for (int i = 0; i < count; i++)\r\n                {\r\n                    if (i > 0) Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n\r\n                    CodeAttributeDeclaration attr = attributes[i];\r\n\r\n                    OutputType(attr.AttributeType);\r\n\r\n                    int arg_count = attr.Arguments.Count;\r\n\r\n                    if (arg_count > 0)\r\n                    {\r\n                        Output.Write(Tokens.ParenthesisLeft);\r\n\r\n                        // iretate over attribute arguments\r\n                        OutputAttributeArgument(attr.Arguments[0]);\r\n                        for (int j = 1; j < arg_count; j++)\r\n                        {\r\n                            Output.Write(Tokens.Comma + WhiteSpace.Space);\r\n                            OutputAttributeArgument(attr.Arguments[j]);\r\n                        }\r\n\r\n                        Output.Write(Tokens.ParenthesisRight);\r\n                    }\r\n                }\r\n\r\n                GenerateAttributeDeclarationsEnd(attributes);\r\n                if (!inLine) Output.WriteLine();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper methods\r\n\r\n        /// <summary>\r\n        /// Tries to determine whether the supplied <see cref=\"CodeTypeReferenceExpression\"/> - name pair denotes\r\n        /// a property (to be generated with the <B>$</B> prefix) or a constant.\r\n        /// </summary>\r\n        private bool IsFieldConstant(CodeTypeReferenceExpression/*!*/ typeRef, string/*!*/ fieldName)\r\n        {\r\n            string type_name = typeRef.Type.BaseType;\r\n            string field_key = type_name + \"::\" + fieldName;\r\n\r\n            bool result;\r\n            if (isFieldConstantCache.TryGetValue(field_key, out result)) return result;\r\n\r\n            if (lastAssembly != null)\r\n            {\r\n                // first off, look into the last assembly where we had a hit\r\n                if (TryIsFieldConstant(lastAssembly, type_name, fieldName, out result))\r\n                {\r\n                    isFieldConstantCache.Add(field_key, result);\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            // look into all loaded assemblies\r\n            foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())\r\n            {\r\n                if (TryIsFieldConstant(ass, type_name, fieldName, out result))\r\n                {\r\n                    lastAssembly = ass;\r\n\r\n                    isFieldConstantCache.Add(field_key, result);\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            isFieldConstantCache.Add(field_key, false);\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to determine whether there is a given literal field in the specified assembly.\r\n        /// </summary>\r\n        private bool TryIsFieldConstant(Assembly ass, string typeName, string fieldName, out bool isConstant)\r\n        {\r\n            try\r\n            {\r\n                Type type = ass.GetType(typeName);\r\n                if (type != null)\r\n                {\r\n                    FieldInfo info = type.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);\r\n                    if (info != null && info.IsLiteral)\r\n                    {\r\n                        isConstant = true;\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception)\r\n            { }\r\n\r\n            isConstant = false;\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Debug\r\n\r\n#if DEBUG\r\n        public bool Debug_IsValidIdentifier(string value)\r\n        {\r\n            return IsValidIdentifier(value);\r\n        }\r\n\r\n        public string Debug_CreateEscapedIdentifier(string value)\r\n        {\r\n            return CreateEscapedIdentifier(value);\r\n        }\r\n\r\n        public string Debug_QuoteSnippetString(string value)\r\n        {\r\n            return QuoteSnippetString(value);\r\n        }\r\n        \r\n#endif\r\n\r\n        #endregion\r\n    }\r\n\r\n    #region Debug\r\n\r\n#if DEBUG\r\n    public class Debug_PhpCodeGenerator\r\n    {\r\n        private PhpCodeGenerator gen = new PhpCodeGenerator();\r\n\r\n        public bool Debug_IsValidIdentifier(string value)\r\n        {\r\n            return gen.Debug_IsValidIdentifier(value);\r\n        }\r\n\r\n        public string Debug_CreateEscapedIdentifier(string value)\r\n        {\r\n            return gen.Debug_CreateEscapedIdentifier(value);\r\n        }\r\n\r\n        public string Debug_QuoteSnippetString(string value)\r\n        {\r\n            return gen.Debug_QuoteSnippetString(value);\r\n        }\r\n    }\r\n#endif\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.CodeDom/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.Resources;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Core.CodeDom\")]\r\n[assembly: AssemblyDescription(\"Phalanger CodeDom provider for on-the-fly compilation\")]\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"471f3237-60ac-4dc0-aebb-b921cdb095c5\")]\r\n"
  },
  {
    "path": "Source/Core.CodeDom/TypeConverters.CLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Globalization;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.CodeDom;\r\n\r\nnamespace PHP.Core.CodeDom\r\n{\r\n\t/// <summary>\r\n\t/// Abstract base for <see cref=\"PhpMemberAttributeConverter\"/> and <see cref=\"PhpTypeAttributeConverter\"/>.\r\n\t/// </summary>\r\n\t/// <remarks>This is almost identical to what C# and VB uses, i.e. conversion between string and an\r\n\t/// arbitrary type based on arrays that hold corresponding name-value pairs at the same indices.</remarks>\r\n\tinternal abstract class PhpModifierAttributeConverter : TypeConverter\r\n\t{\r\n\t\tprotected abstract object DefaultValue { get; }\r\n\t\tprotected abstract string[] Names { get; }\r\n\t\tprotected abstract object[] Values { get; }\r\n\r\n\t\tprotected PhpModifierAttributeConverter()\r\n\t\t{ }\r\n\r\n\t\t#region TypeConverter Overrides\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether this converter can convert an object of the given type to the type of this converter.\r\n\t\t/// </summary>\r\n\t\tpublic override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\r\n\t\t{\r\n\t\t\tif (sourceType == typeof(string))\r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn base.CanConvertFrom(context, sourceType);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the given value to the type of this converter.\r\n\t\t/// </summary>\r\n\t\tpublic override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\r\n\t\t{\r\n\t\t\tstring str_value = value as string;\r\n\t\t\tif (str_value != null)\r\n\t\t\t{\r\n\t\t\t\tstring[] names = Names;\r\n\t\t\t\tfor (int i = 0; i < names.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (names[i].EqualsOrdinalIgnoreCase(str_value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Values[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this.DefaultValue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts the given value object to the specified type, using the arguments.\r\n\t\t/// </summary>\r\n\t\tpublic override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value,\r\n\t\t\tType destinationType)\r\n\t\t{\r\n\t\t\tif (destinationType == null) throw new ArgumentNullException(\"destinationType\");\r\n\t\t\tif (destinationType != typeof(string)) return base.ConvertTo(context, culture, value, destinationType);\r\n\r\n\t\t\tobject[] values = this.Values;\r\n\t\t\tfor (int i = 0; i < values.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (values[i].Equals(value))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Names[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn \"(unknown)\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a collection of standard values for the data type this type converter is designed for.\r\n\t\t/// </summary>\r\n\t\tpublic override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\r\n\t\t{\r\n\t\t\treturn new TypeConverter.StandardValuesCollection(Values);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether the collection of standard values returned from GetStandardValues is an exclusive list.\r\n\t\t/// </summary>\r\n\t\tpublic override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns whether this object supports a standard set of values that can be picked from a list.\r\n\t\t/// </summary>\r\n\t\tpublic override bool GetStandardValuesSupported(ITypeDescriptorContext context)\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides conversion between strings and <see cref=\"MemberAttributes\"/>.\r\n\t/// </summary>\r\n\tinternal class PhpMemberAttributeConverter : PhpModifierAttributeConverter\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate static PhpMemberAttributeConverter defaultConverter;\r\n\t\tpublic static PhpMemberAttributeConverter Default\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return defaultConverter; }\r\n\t\t}\r\n\r\n\t\tprivate static string[] names;\r\n\t\tprotected override string[] Names\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return names; }\r\n\t\t}\r\n\r\n\t\tprivate static object[] values;\r\n\t\tprotected override object[] Values\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return values; }\r\n\t\t}\r\n\r\n\t\tprotected override object DefaultValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return MemberAttributes.Public; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprivate PhpMemberAttributeConverter()\r\n\t\t{ }\r\n\r\n\t\tstatic PhpMemberAttributeConverter()\r\n\t\t{\r\n\t\t\tdefaultConverter = new PhpMemberAttributeConverter();\r\n\r\n\t\t\tnames = new string[] { Keywords.Public, Keywords.Protected, Keywords.Private };\r\n\t\t\tvalues = new object[] { MemberAttributes.Public, MemberAttributes.Family, MemberAttributes.Private };\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides conversion between strings and <see cref=\"System.Reflection.TypeAttributes\"/>.\r\n\t/// </summary>\r\n\tinternal class PhpTypeAttributeConverter : PhpModifierAttributeConverter\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate static PhpTypeAttributeConverter defaultConverter;\r\n\t\tpublic static PhpTypeAttributeConverter Default\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return defaultConverter; }\r\n\t\t}\r\n\r\n\t\tprivate static string[] names;\r\n\t\tprotected override string[] Names\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return names; }\r\n\t\t}\r\n\r\n\t\tprivate static object[] values;\r\n\t\tprotected override object[] Values\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return values; }\r\n\t\t}\r\n\r\n\t\tprotected override object DefaultValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return System.Reflection.TypeAttributes.Public; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprivate PhpTypeAttributeConverter()\r\n\t\t{ }\r\n\r\n\t\tstatic PhpTypeAttributeConverter()\r\n\t\t{\r\n\t\t\tdefaultConverter = new PhpTypeAttributeConverter();\r\n\r\n\t\t\tnames = ArrayUtils.EmptyStrings;\r\n            values = ArrayUtils.EmptyObjects;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.CodeDom/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<system.codedom  xdt:Transform=\"InsertIfMissing\" />\n\t<system.codedom>\n\t\t<compilers  xdt:Transform=\"InsertIfMissing\" />\n\t\t<compilers>\n\t\t\t<compiler\n\t\t\t\t language=\"PHP\"\n\t\t\t\t extension=\".php\"\n\t\t\t\t type=\"PHP.Core.CodeDom.PhpCodeProvider, PhpNetCore.CodeDom\"\n\t\t\t\t compilerOptions=\"\"\n\t\t\t\t xdt:Transform=\"InsertIfMissing\"\n         xdt:Locator=\"Match(extension)\"/>\n\t\t</compilers>\n\t</system.codedom>\n</configuration>\n"
  },
  {
    "path": "Source/Core.CodeDom/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<system.codedom>\r\n\t\t<compilers>\r\n\t\t\t<compiler extension=\".php\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(extension)\" />\r\n\t\t</compilers>\r\n\t</system.codedom>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Core.DuckTyping.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{BFDBBA9E-D6BF-4BA0-88BC-B3853A4D6808}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Core.DuckTyping</RootNamespace>\r\n    <AssemblyName>PhpNet.Core.DuckTyping</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Enumerables.cs\" />\r\n    <Compile Include=\"Generator.CLR.cs\" />\r\n    <Compile Include=\"Multitypes.cs\" />\r\n    <Compile Include=\"Runtime.cs\" />\r\n    <Compile Include=\"ScriptContext.Extension.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n      <Private>False</Private>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Core.DuckTyping.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Core.DuckTyping.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Core.DuckTyping/Enumerables.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.DuckTyping\r\n{\r\n\t#region Enumerable interfaces\r\n\r\n\t/// <summary>\r\n\t/// Use this type as a return type if you want to return \r\n\t/// value enumerator from PHP type using duck typing\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Enumerated elements will be casted to this type</typeparam>\r\n\tpublic interface IDuckEnumerable<T> : IEnumerable<T>, IDuckType\r\n\t{\t\t\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents key-value pair used by PHP duck typing\r\n\t/// </summary>\r\n\t/// <typeparam name=\"K\">Key type</typeparam>\r\n\t/// <typeparam name=\"T\">Value type</typeparam>\r\n\tpublic interface IDuckKeyValue<K, T>\r\n\t{\r\n\t\tK Key { get; }\r\n\t\tT Value { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Use this type as a return type if you want to retrun\r\n\t/// key-value enumerator from PHP type using duck typing\r\n\t/// </summary>\r\n\t/// <typeparam name=\"K\">Keys will be converted to this type</typeparam>\r\n\t/// <typeparam name=\"T\">Values will be converted to this type</typeparam>\r\n\tpublic interface IDuckKeyedEnumerable<K, T> : IEnumerable<IDuckKeyValue<K, T>>\r\n\t{\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Enumerable implementation\r\n\r\n\t/// <summary>\r\n\t/// Key-value implementation\r\n\t/// </summary>\r\n\tpublic class DuckKeyValue<K, T> : IDuckKeyValue<K, T>\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tK _key; T _value;\r\n\r\n\t\tpublic DuckKeyValue(K key, T value)\r\n\t\t{\r\n\t\t\t_key = key; _value = value;\r\n\t\t}\r\n\r\n\t\tpublic K Key { get { return _key; } }\r\n\t\tpublic T Value { get { return _value; } }\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implements <seealso cref=\"IDuckEnumerable&lt;T>\"/>\r\n\t/// </summary>\r\n\tpublic class DuckEnumerableWrapper<T> : DuckTypeBase, IDuckEnumerable<T>\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tpublic IDictionaryEnumerator _en;\r\n\r\n\t\tpublic DuckEnumerableWrapper(object original, IDictionaryEnumerator/*!*/ en) : base(original)\r\n\t\t{\r\n\t\t\tDebug.Assert(en != null);\r\n\t\t\t_en = en;\r\n\t\t}\r\n\r\n\t\tpublic IEnumerator<T> GetEnumerator()\r\n\t\t{\r\n\t\t\tobject[] ducktype = typeof(T).GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\t\t\tbool isDuck = (ducktype.Length > 0);\r\n\r\n\t\t\twhile (_en.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tif (isDuck)\r\n\t\t\t\t{\r\n\t\t\t\t\tyield return DuckTyping.Instance.ImplementDuckType<T>(_en.Value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConvertToClr.ConversionStrictness str;\r\n\t\t\t\t\tT ret = ConvertToClr.TryObjectToType<T>(_en.Value, out str);\r\n\t\t\t\t\tif (str == ConvertToClr.ConversionStrictness.Failed)\r\n\t\t\t\t\t\tthrow new InvalidCastException();\r\n\t\t\t\t\tyield return ret;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tSystem.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implements <seealso cref=\"IDuckKeyedEnumerable&lt;K,T>\"/>\r\n\t/// </summary>\r\n\tpublic class DuckKeyedEnumerableWrapper<K, T> : DuckTypeBase, IDuckKeyedEnumerable<K, T>\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tpublic IDictionaryEnumerator _en;\r\n\r\n\t\tpublic DuckKeyedEnumerableWrapper(object original, IDictionaryEnumerator/*!*/ en) : base(original)\r\n\t\t{\r\n\t\t\tDebug.Assert(en != null);\r\n\t\t\t_en = en;\r\n\t\t}\r\n\r\n\t\tpublic IEnumerator<IDuckKeyValue<K, T>> GetEnumerator()\r\n\t\t{\r\n\t\t\tobject[] ducktypek = typeof(K).GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\t\t\tobject[] ducktypev = typeof(T).GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\t\t\tbool isKeyDuck = (ducktypek.Length > 0);\r\n\t\t\tbool isValDuck = (ducktypev.Length > 0);\r\n\r\n\t\t\twhile (_en.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tK k; T t;\r\n\t\t\t\tif (isKeyDuck)\r\n\t\t\t\t\tk = DuckTyping.Instance.ImplementDuckType<K>(_en.Key);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConvertToClr.ConversionStrictness str;\r\n\t\t\t\t\tk = ConvertToClr.TryObjectToType<K>(_en.Key, out str);\r\n\t\t\t\t\tif (str == ConvertToClr.ConversionStrictness.Failed) throw new InvalidCastException();\r\n\t\t\t\t}\r\n\t\t\t\tif (isValDuck)\r\n\t\t\t\t\tt = DuckTyping.Instance.ImplementDuckType<T>(_en.Value);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConvertToClr.ConversionStrictness str;\r\n\t\t\t\t\tt = ConvertToClr.TryObjectToType<T>(_en.Value, out str);\r\n\t\t\t\t\tif (str == ConvertToClr.ConversionStrictness.Failed) throw new InvalidCastException();\r\n\t\t\t\t}\r\n\t\t\t\tyield return new DuckKeyValue<K, T>(k, t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tSystem.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn GetEnumerator();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Generator.CLR.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2006 Tomas Petricek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing System.CodeDom.Compiler;\r\nusing System.CodeDom;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.DuckTyping\r\n{\r\n\t/// <summary>\r\n\t/// Describes one module which is being processed by duck type generator.\r\n\t/// </summary>\r\n\tinternal class DuckModule\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets the name of the file associated with this module.\r\n\t\t/// </summary>\r\n\t\tpublic string Filename { get { return filename; } }\r\n\t\tprivate string filename;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether public global functions are present in the module.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// Determines if the class which wraps global functions will be created. At the beginning \r\n\t\t/// of the duck type generation this is set to false and when first global function\r\n\t\t/// declaration is found it is set to true.\r\n\t\t/// </remarks>\r\n\t\tpublic bool Globals { get { return globals; } set { globals = value; } }\r\n\t\tprivate bool globals;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tells whether public global types are declared in the module.\r\n\t\t/// </summary>\r\n\t\tpublic bool Types { get { return types; } set { types = value; } }\r\n\t\tprivate bool types;\r\n\r\n\t\t/// <summary>\r\n\t\t/// CodeDom type declaration which describes class which wraps global functions.\r\n\t\t/// </summary>\r\n\t\tpublic CodeTypeDeclaration GlobalClass { get { return globalClass; } }\r\n\t\tprivate CodeTypeDeclaration globalClass;\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of CodeDom type declarations which describes PHP class wrappers.\r\n\t\t/// </summary>\r\n\t\tpublic List<CodeTypeDeclaration> Classes { get { return classes; } }\r\n\t\tprivate List<CodeTypeDeclaration> classes;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes DuckModule class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"filename\">Filename associated with the module.</param>\r\n\t\tpublic DuckModule(string filename)\r\n\t\t{\r\n\t\t\tclasses = new List<CodeTypeDeclaration>();\r\n\t\t\tthis.filename = filename;\r\n\t\t\tglobals = false;\r\n\t\t\ttypes = false;\r\n\t\t\tglobalClass = new CodeTypeDeclaration();\r\n\t\t\tglobalClass.Name = DuckTypeGenerator.MakeModuleName(filename) + \"Globals\";\r\n\t\t\tglobalClass.IsInterface = true;\r\n\t\t\tglobalClass.CustomAttributes.Add(\r\n\t\t\t\tnew CodeAttributeDeclaration(new CodeTypeReference(typeof(DuckTypeAttribute)),\r\n\t\t\t\tnew CodeAttributeArgument(\"GlobalFunctions\", new CodePrimitiveExpression(true)))\r\n\t\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Collects information about duck types and then generates CodeDOM objects, which are used for\r\n\t/// the actual code.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// The class is singleton.\r\n\t/// </remarks>\r\n\tclass DuckTypeGenerator : TreeVisitor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Singleton instance of the class.\r\n\t\t/// </summary>\r\n\t\tpublic static DuckTypeGenerator Instance { get { return instance ?? (instance = new DuckTypeGenerator()); } }\r\n\t\tprivate static DuckTypeGenerator instance;\r\n\r\n\t\tprivate DuckTypeGenerator()\r\n\t\t{\r\n\t\t\tmoduleList = new List<DuckModule>();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Modules which have been processed by the duck type generator.\r\n\t\t/// </summary>\r\n\t\tList<DuckModule> moduleList;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current module for storing type and function declarations.\r\n\t\t/// </summary>\r\n\t\tDuckModule currentModule;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Current class.\r\n\t\t/// </summary>\r\n\t\tCodeTypeDeclaration currentClass;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a name that looks like C# name (upper case first char).\r\n\t\t/// </summary>\r\n\t\tpublic static string MakeCSharpName(string name)\r\n\t\t{\r\n\t\t\treturn name[0].ToString().ToUpper() + name.Substring(1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes a name that looks like C# field name (lower case first char).\r\n\t\t/// </summary>\r\n\t\tpublic static string MakeCSharpFieldName(string name)\r\n\t\t{\r\n\t\t\treturn name[0].ToString().ToLower() + name.Substring(1);\r\n\t\t}\r\n\r\n        public static string MakeModuleName(string name)\r\n        {\r\n            return MakeCSharpName(Path.GetFileNameWithoutExtension(name).Replace(\".\", \"\"));\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generate duck-type interface file for the specified AST.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"globalCode\">Source AST</param>\r\n\t\tpublic void ProcessModule(GlobalCode globalCode)\r\n\t\t{\r\n\t\t\tcurrentModule = new DuckModule(globalCode.SourceUnit.SourceFile.RelativePath.ToString());\r\n\t\t\tglobalCode.VisitMe(this);\r\n\t\t\tmoduleList.Add(currentModule);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates code units that will be used for generating.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"targetPath\"></param>\r\n\t\t/// <param name=\"targetNamespace\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic IEnumerable<CodeCompileUnit> GenerateCodeUnits(FullPath targetPath, string targetNamespace)\r\n\t\t{\r\n\t\t\tCodeCompileUnit compileUnit = new CodeCompileUnit();\r\n\t\t\tCodeNamespace space = new CodeNamespace(targetNamespace ?? \"Generated\");\r\n\t\t\tcompileUnit.Namespaces.Add(space);\r\n\r\n\t\t\tspace.Types.Add(GenerateFactoryClass());\r\n\r\n\t\t\tcompileUnit.UserData.Add(\"ID\", \"DuckTypeFactory\");\r\n\r\n\t\t\tyield return compileUnit;\r\n\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tcompileUnit = new CodeCompileUnit();\r\n\t\t\t\tspace = new CodeNamespace(targetNamespace ?? \"Generated\");\r\n\t\t\t\tcompileUnit.Namespaces.Add(space);\r\n\r\n\t\t\t\tif (module.Globals)\r\n\t\t\t\t{\r\n\t\t\t\t\tspace.Types.Add(module.GlobalClass);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tforeach(CodeTypeDeclaration cls in module.Classes)\r\n\t\t\t\t{\r\n\t\t\t\t\tspace.Types.Add(cls);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcompileUnit.UserData.Add(\"ID\", MakeModuleName(module.Filename));\r\n\r\n\t\t\t\tif (module.Globals || module.Types)\r\n\t\t\t\t\tyield return compileUnit;\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generates factory class which is used for creating \r\n\t\t/// </summary>\r\n\t\t/// <returns></returns>\r\n\t\tprivate CodeTypeDeclaration GenerateFactoryClass()\r\n\t\t{\r\n\t\t\tCodeTypeDeclaration factory = new CodeTypeDeclaration();\r\n\r\n\t\t\tfactory.Attributes = MemberAttributes.Public;\r\n\t\t\tfactory.Name = \"DuckTypeFactory\";\r\n\t\t\tfactory.IsPartial = true;\r\n\r\n\t\t\tCodeMemberField instanceField = new CodeMemberField(\"DuckTypeFactory\", \"instance\");\r\n\t\t\tinstanceField.Attributes = MemberAttributes.Private | MemberAttributes.Static;\r\n\t\t\tinstanceField.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(ThreadStaticAttribute))));\r\n\t\t\tfactory.Members.Add(instanceField);\r\n\r\n\t\t\tCodeMemberProperty instanceProp = new CodeMemberProperty();\r\n\t\t\tinstanceProp.Attributes = MemberAttributes.Public | MemberAttributes.Static;\r\n\t\t\tinstanceProp.HasGet = true;\r\n\t\t\tinstanceProp.HasSet = false;\r\n\t\t\tinstanceProp.Type = new CodeTypeReference(\"DuckTypeFactory\");\r\n\t\t\tinstanceProp.Name = \"Instance\";\r\n\t\t\tinstanceProp.GetStatements.Add(\r\n\t\t\t\tnew CodeConditionStatement(\r\n\t\t\t\t\tnew CodeBinaryOperatorExpression(\r\n\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"instance\"),\r\n\t\t\t\t\t\tCodeBinaryOperatorType.IdentityEquality,\r\n\t\t\t\t\t\tnew CodePrimitiveExpression(null)\r\n\t\t\t\t\t),\r\n\t\t\t\t\tnew CodeAssignStatement(\r\n\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"instance\"),\r\n\t\t\t\t\t\tnew CodeObjectCreateExpression(\r\n\t\t\t\t\t\t\tnew CodeTypeReference(\"DuckTypeFactory\")\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t\tinstanceProp.GetStatements.Add(\r\n\t\t\t\tnew CodeMethodReturnStatement(\r\n\t\t\t\t\tnew CodeVariableReferenceExpression(\"instance\")\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\r\n\t\t\tfactory.Members.Add(instanceProp);\r\n\r\n\t\t\t//context and global class fields\r\n\t\t\tCodeMemberField field;\r\n\r\n\t\t\tfield = new CodeMemberField(typeof(ScriptContext), \"context\");\r\n\t\t\tfield.Attributes = MemberAttributes.Private;\r\n\t\t\tfactory.Members.Add(field);\r\n\t\t\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tif (!module.Globals) continue;\r\n\r\n\t\t\t\tfield = new CodeMemberField(module.GlobalClass.Name, MakeCSharpFieldName(module.GlobalClass.Name));\r\n\t\t\t\tfield.Attributes = MemberAttributes.Private;\r\n\t\t\t\tfactory.Members.Add(field);\r\n\t\t\t}\r\n\r\n\t\t\t//static ctor\r\n\t\t\tCodeConstructor ctor = new CodeConstructor();\r\n\t\t\tctor.Attributes = MemberAttributes.Private;\r\n\r\n\t\t\t// this.context = ScriptContext.Current;\t\t\t\r\n\t\t\tctor.Statements.Add(\r\n\t\t\t\tnew CodeAssignStatement(\r\n\t\t\t\t\tnew CodeVariableReferenceExpression(\"context\"),\r\n\t\t\t\t\tnew CodePropertyReferenceExpression(\r\n\t\t\t\t\t\tnew CodeTypeReferenceExpression(typeof(ScriptContext)),\r\n\t\t\t\t\t\t\t\"CurrentContext\"\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\r\n\t\t\tctor.Statements.Add(\r\n\t\t\t\tnew CodeMethodInvokeExpression(new CodeThisReferenceExpression(), \"Init\")\r\n\t\t\t\t);\r\n\r\n\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tif (!module.Globals && !module.Types) continue;\r\n\r\n\t\t\t\t// context.IncludeScript(\"<<path>>\", libraryRepresentative);\r\n\t\t\t\tctor.Statements.Add(\r\n\t\t\t\t\tnew CodeMethodInvokeExpression(\r\n\t\t\t\t\t\tnew CodeMethodReferenceExpression(\r\n\t\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"context\"),\r\n\t\t\t\t\t\t\t\"IncludeScriptOnce\"\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\tnew CodePrimitiveExpression(module.Filename),\r\n\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"libraryRepresentative\")\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tif (!module.Globals) continue;\r\n\r\n\t\t\t\t// this.<module name> = context.NewObject<<module name>>();\r\n\t\t\t\tctor.Statements.Add(\r\n\t\t\t\t\tnew CodeAssignStatement(\r\n\t\t\t\t\t\tnew CodeVariableReferenceExpression(MakeCSharpFieldName(module.GlobalClass.Name)),\t\t\t\t\t\t\r\n\t\t\t\t\t\tnew CodeMethodInvokeExpression(\r\n\t\t\t\t\t\t\tnew CodeMethodReferenceExpression(\r\n\t\t\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"context\"),\r\n\t\t\t\t\t\t\t\t\"NewObject\",\r\n\t\t\t\t\t\t\t\tnew CodeTypeReference(module.GlobalClass.Name)\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tfactory.Members.Add(ctor);\r\n\r\n\t\t\t//global function class properties\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tif (!module.Globals) continue;\r\n\r\n\t\t\t\tCodeMemberProperty prop = new CodeMemberProperty();\r\n\r\n\t\t\t\tprop.Attributes = MemberAttributes.Public;\r\n\t\t\t\tprop.HasGet = true;\r\n\t\t\t\tprop.HasSet = false;\r\n\t\t\t\tprop.Type = new CodeTypeReference(module.GlobalClass.Name);\r\n\t\t\t\tprop.Name = module.GlobalClass.Name;\r\n\t\t\t\t// return this.<module name>;\r\n\t\t\t\tprop.GetStatements.Add(\r\n\t\t\t\t\tnew CodeMethodReturnStatement(\r\n\t\t\t\t\t\tnew CodeVariableReferenceExpression(MakeCSharpFieldName(module.GlobalClass.Name))\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\tfactory.Members.Add(prop);\r\n\t\t\t}\r\n\r\n\t\t\t//class factory methods\t\r\n\t\t\tforeach (DuckModule module in moduleList)\r\n\t\t\t{\r\n\t\t\t\tforeach (CodeTypeDeclaration type in module.Classes)\r\n\t\t\t\t{\r\n\t\t\t\t\tCodeMemberMethod meth = new CodeMemberMethod();\r\n\r\n\t\t\t\t\tmeth.Attributes = MemberAttributes.Public;\r\n\t\t\t\t\tmeth.Name = \"New\" + type.Name;\r\n\t\t\t\t\tmeth.ReturnType = new CodeTypeReference(type.Name);\r\n\r\n\t\t\t\t\tCodeParameterDeclarationExpression param = new CodeParameterDeclarationExpression();\r\n\t\t\t\t\tparam.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(ParamArrayAttribute))));\r\n\t\t\t\t\tparam.Name = \"ctorArguments\";\r\n\t\t\t\t\tparam.Type = new CodeTypeReference(typeof(object[]));\r\n\t\t\t\t\tmeth.Parameters.Add(param);\r\n\r\n\t\t\t\t\tmeth.Statements.Add(\r\n\t\t\t\t\t\tnew CodeMethodReturnStatement(\r\n\t\t\t\t\t\t\tnew CodeMethodInvokeExpression(\r\n\t\t\t\t\t\t\t\tnew CodeMethodReferenceExpression(\r\n\t\t\t\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"context\"),\r\n\t\t\t\t\t\t\t\t\t\"NewObject\",\r\n\t\t\t\t\t\t\t\t\tnew CodeTypeReference(type.Name)\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tnew CodePrimitiveExpression(type.Name),\r\n\t\t\t\t\t\t\t\tnew CodeVariableReferenceExpression(\"ctorArguments\")\r\n\t\t\t\t\t\t\t\t)\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\tfactory.Members.Add(meth);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn factory;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Process class - set currentClass and process methods\r\n\t\t/// </summary>\r\n\t\tpublic override void VisitTypeDecl(TypeDecl x)\r\n\t\t{\r\n            var cmt = x.PHPDoc;\r\n            if (cmt == null) return;\r\n\r\n\t\t\tif (cmt.Access == PhpMemberAttributes.Public)\r\n\t\t\t{\r\n\t\t\t\tcurrentModule.Types = true;\r\n\t\t\t\tcurrentClass = GenerateTypeDecl(cmt, x);\r\n\t\t\t\tcurrentModule.Classes.Add(currentClass);\r\n\t\t\t}\r\n\r\n\t\t\tbase.VisitTypeDecl(x);\r\n\t\t}\r\n\r\n        ///// <summary>\r\n        ///// Process eval expression - if the eval was produced by the TypeDecl, we process the original TypeDecl.\r\n        ///// </summary>\r\n        //public override void VisitEvalEx(EvalEx x)\r\n        //{\r\n        //    TypeDecl typeDecl;\r\n\r\n        //    if (x.Annotations.TryGet<TypeDecl>(out typeDecl))\r\n        //    {\r\n        //        docResolver.VisitTypeDecl(typeDecl);\r\n        //        VisitTypeDecl(typeDecl);\r\n        //    }\r\n\r\n        //    base.VisitEvalEx(x);\r\n        //}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Generate type declaration\r\n\t\t/// </summary>\r\n\t\tpublic CodeTypeDeclaration GenerateTypeDecl(PHPDocBlock cmt, TypeDecl x)\r\n\t\t{\r\n\t\t\tCodeTypeDeclaration cls = new CodeTypeDeclaration(MakeCSharpName(x.Name.Value));\r\n\r\n            var summary = cmt.Summary;\r\n\t\t\tif (!string.IsNullOrEmpty(summary))\r\n\t\t\t{\r\n\t\t\t\tcls.Comments.Add(new CodeCommentStatement(\"<summary>\\n \" + summary + \"\\n </summary>\", true));\r\n\t\t\t}\r\n\r\n\t\t\tcls.IsInterface = true;\r\n\t\t\tcls.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(DuckTypeAttribute))));\r\n\r\n\t\t\treturn cls;\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add list of fields to the current class.\r\n\t\t/// </summary>\r\n\t\tpublic override void VisitFieldDeclList(FieldDeclList x)\r\n\t\t{\r\n            var cmt = x.PHPDoc;\r\n            if (cmt == null) return;\r\n\r\n\t\t\tif (cmt.Access == PhpMemberAttributes.Public)\r\n\t\t\t{\r\n\t\t\t\tforeach (FieldDecl fld in x.Fields)\r\n\t\t\t\t{\t\t\t\t\t\r\n\t\t\t\t\tcurrentClass.Members.Add(GenerateFieldCode(cmt, fld.Name.Value));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add field as a property with getter &amp; setter\r\n\t\t/// </summary>\r\n\t\tprivate CodeMemberProperty GenerateFieldCode(PHPDocBlock cmt, string name)\r\n\t\t{\r\n\t\t\tCodeMemberProperty prop = new CodeMemberProperty();\r\n\r\n            var vartag = cmt.GetElement<PHPDocBlock.VarTag>();\r\n            if (vartag != null)\r\n                prop.Type = ParseType(vartag.TypeNamesArray);\r\n\t\t\telse\r\n\t\t\t\tprop.Type = new CodeTypeReference(typeof(object));\r\n\r\n\t\t\tprop.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(DuckNameAttribute)),\r\n\t\t\t\tnew CodeAttributeArgument(new CodePrimitiveExpression(name))));\r\n\r\n            var summary = cmt.Summary;\r\n\t\t\tif (!string.IsNullOrEmpty(summary))\r\n\t\t\t{\r\n\t\t\t\tprop.Comments.Add(new CodeCommentStatement(\"<summary>\\n \" + summary + \"\\n </summary>\", true));\r\n\t\t\t}\r\n\r\n\t\t\tprop.HasGet = prop.HasSet = true;\r\n\t\t\tprop.Name = MakeCSharpName(name);\r\n\t\t\treturn prop;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add method to the current class...\r\n\t\t/// </summary>\r\n\t\tpublic override void VisitMethodDecl(MethodDecl x)\r\n\t\t{\r\n\t\t\t// Skip constructors\r\n            if (x.Name == Name.SpecialMethodNames.Construct) return;\r\n\r\n            var cmt = x.PHPDoc;\r\n            if (cmt == null) return;\r\n\r\n\t\t\tif (cmt.Access == PhpMemberAttributes.Public)\r\n\t\t\t{\r\n\t\t\t\tcurrentClass.Members.Add(GenerateFunctionCode(cmt, x.Name.Value));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Add global function to the interface with global functions\r\n\t\t/// </summary>\r\n\t\tpublic override void VisitFunctionDecl(FunctionDecl x)\r\n\t\t{\r\n            var cmt = x.PHPDoc;\r\n            if (cmt == null) return;\r\n\r\n\t\t\tif (cmt.Access == PhpMemberAttributes.Public)\r\n\t\t\t{\r\n\t\t\t\tcurrentModule.Globals = true;\r\n\t\t\t\tcurrentModule.GlobalClass.Members.Add(GenerateFunctionCode(cmt, x.Name.Value));\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Process function or method declaration and return corresponding CodeDom object.\r\n\t\t/// </summary>\r\n\t\tprivate CodeMemberMethod GenerateFunctionCode(PHPDocBlock cmt, string name)\r\n\t\t{\r\n\t\t\t// Add method for each global function\r\n\t\t\tCodeMemberMethod meth = new CodeMemberMethod();\r\n\t\t\tmeth.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(DuckNameAttribute)),\r\n\t\t\t\tnew CodeAttributeArgument(new CodePrimitiveExpression(name))));\r\n\t\t\tmeth.Name = MakeCSharpName(name);\r\n\r\n\t\t\t// Return & Summary comment\r\n            string summary = cmt.Summary;\r\n\t\t\t\t\r\n\t\t\tif (!string.IsNullOrEmpty(summary))\r\n\t\t\t{\r\n\t\t\t\tmeth.Comments.Add(new CodeCommentStatement(\"<summary>\\n \" + summary + \"\\n </summary>\", true));\r\n\t\t\t}\r\n\t\t\tif (cmt.Returns != null)\r\n\t\t\t{\r\n                string retHelp = cmt.Returns.Description;\r\n\t\t\t\tif (retHelp.Length > 0)\r\n\t\t\t\t\tmeth.Comments.Add(new CodeCommentStatement(\"<returns>\" + retHelp + \"</returns>\", true));\r\n\t\t\t}\r\n\r\n\t\t\t// Parse return type \r\n\t\t\tif (cmt.Returns != null && cmt.Returns.TypeNames != null)\r\n\t\t\t{\r\n                var types = cmt.Returns.TypeNamesArray;\r\n                if (types.Length > 1)\r\n\t\t\t\t\tmeth.Comments.Add(new CodeCommentStatement(\"NOT SUPPORTED: Multiple return types are currently TODO.\"));\r\n\r\n                meth.ReturnType = ParseType(types);\r\n\t\t\t}\r\n\r\n\t\t\t// Process parameters\r\n\t\t\tforeach (var p in cmt.Params)\r\n\t\t\t{\r\n                string paramName = p.VariableName;\r\n\t\t\t\tstring paramHelp = p.Description;\r\n                if (paramName != null && paramHelp.Length > 0)\r\n                {\r\n                    paramName = paramName.TrimStart('$');\r\n                    meth.Comments.Add(new CodeCommentStatement(\"<param name=\\\"\" + paramName + \"\\\">\" + paramHelp + \"</param>\", true));\r\n                }\r\n\r\n\t\t\t\tCodeTypeReference paramType = ParseType(p.TypeNamesArray);\r\n\t\t\t\tmeth.Parameters.Add(new CodeParameterDeclarationExpression(paramType, paramName));\r\n\t\t\t}\r\n\r\n\t\t\treturn meth;\r\n\t\t}\r\n\r\n\t\t#region Utils\r\n\r\n\t\t/// <summary>\r\n\t\t/// Transforms parsed type information into CLR type name.\r\n\t\t/// </summary>\r\n\t\tprivate static CodeTypeReference ResolveType(string typename)\r\n\t\t{\r\n            if (string.IsNullOrEmpty(typename))\r\n                return null;\r\n\r\n            if (typename.StartsWith(\"array\"))\r\n            {\r\n                var attrs = typename.Substring(\"array\".Length);\r\n\r\n                // array or array[]\r\n                if (attrs == string.Empty || attrs == \"[]\")\r\n\t\t\t\t    return new CodeTypeReference(typeof(IDuckEnumerable<object>));\r\n\r\n                if (attrs[0] == '[')\r\n                {\r\n                    // find matching right brace:\r\n                    int afterBrace = 1;\r\n                    int level = 1;\r\n                    while (afterBrace < attrs.Length && level > 0)\r\n                    {\r\n                        char c = attrs[afterBrace ++];\r\n\r\n                        if (c == '[') level ++;\r\n                        else if (c == ']') level --;\r\n                    }\r\n\r\n                    if (level != 0) // not matching braces, just an array\r\n                        return new CodeTypeReference(typeof(IDuckEnumerable<object>));\r\n\r\n                    //\r\n                    var indexTypeStr = attrs.Substring(1, afterBrace - 2);\r\n                    var valueTypeStr = (afterBrace < attrs.Length) ? attrs.Substring(afterBrace) : null;\r\n\r\n                    if (string.IsNullOrEmpty(indexTypeStr))\r\n                    {\r\n                        // array[]T\r\n                        CodeTypeReference valueType = ResolveType(valueTypeStr) ?? new CodeTypeReference(typeof(object));\r\n                        return new CodeTypeReference(typeof(IDuckEnumerable<>).FullName, valueType);\r\n                    }\r\n                    else if (string.IsNullOrEmpty(valueTypeStr))\r\n                    {\r\n                        // array[T]\r\n                        CodeTypeReference indexType = ResolveType(indexTypeStr) ?? new CodeTypeReference(typeof(IDuckEnumerable<object>));\r\n                        return new CodeTypeReference(typeof(IDuckKeyedEnumerable<,>).FullName, indexType, new CodeTypeReference(typeof(object)));\r\n                    }\r\n                    else if (!string.IsNullOrEmpty(indexTypeStr) && !string.IsNullOrEmpty(valueTypeStr))\r\n                    {\r\n                        // array[T]U\r\n                        CodeTypeReference indexType = ResolveType(indexTypeStr) ?? new CodeTypeReference(typeof(IDuckEnumerable<object>));\r\n                        CodeTypeReference valueType = ResolveType(valueTypeStr) ?? new CodeTypeReference(typeof(IDuckEnumerable<object>));\r\n\r\n                        return new CodeTypeReference(typeof(IDuckKeyedEnumerable<,>).FullName, indexType, valueType);\r\n                    }\r\n                    else\r\n                    {\r\n                        Debug.Assert(false);\r\n                        return null;\r\n                    }\r\n                }\r\n            }\r\n\r\n\t\t\tswitch (typename.ToLowerInvariant())\r\n\t\t\t{\r\n                case \"int\":\r\n\t\t\t\tcase \"integer\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(int));\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(string));\r\n\t\t\t\tcase \"float\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(float));\r\n\t\t\t\tcase \"double\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(double));\r\n\t\t\t\tcase \"long\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(long));\r\n                case \"bool\":\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(bool));\r\n\t\t\t\tcase \"mixed\":\r\n\t\t\t\t\treturn new CodeTypeReference(typeof(object));\r\n                case \"void\":\r\n                    return null;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// Php type that is declared as an interface earlier...\r\n\t\t\t\t\treturn new CodeTypeReference(typename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parse PHP type from the comment and return CodeTypeReference.\r\n\t\t/// </summary>\r\n\t\tprivate static CodeTypeReference ParseType(string[] typenames)\r\n\t\t{\r\n            return ResolveType((typenames != null && typenames.Length > 0) ? typenames[0] : null);\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Generates duck type interfaces for given <paramref name=\"sourceAsts\"/>.\r\n        /// </summary>\r\n        /// <param name=\"sourceAsts\">Enumeration of <see cref=\"GlobalCode\"/> - AST of source files containing PHP source code.</param>\r\n        /// <param name=\"duckPath\">Target path.</param>\r\n        /// <param name=\"duckNamespace\">Target namespace.</param>\r\n        public static void GenerateDuckInterfaces(IEnumerable<GlobalCode>/*!!*/ sourceAsts, string duckPath, string duckNamespace)\r\n        {\r\n            // check parameters:\r\n            if (sourceAsts == null)\r\n                throw new ArgumentNullException(\"sourceAsts\");\r\n            if (duckPath == null)\r\n                throw new ArgumentNullException(\"duckPath\");\r\n\r\n            // create directory for duck types if not exists:\r\n            Directory.CreateDirectory(duckPath);\r\n\r\n            // process source code:\r\n            foreach (var ast in sourceAsts)\r\n            {\r\n                DuckTypeGenerator.Instance.ProcessModule(ast);\r\n            }\r\n\r\n            foreach (CodeCompileUnit unit in DuckTypeGenerator.Instance.GenerateCodeUnits(new FullPath(duckPath), duckNamespace))\r\n            {\r\n                string file = unit.UserData[\"ID\"].ToString() + \".cs\";\r\n                FullPath path = new FullPath(file, new FullPath(duckPath));\r\n\r\n                string dir = Path.GetDirectoryName(path);\r\n                if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);\r\n\r\n                CodeDomProvider provider = CodeDomProvider.CreateProvider(\"csharp\");\r\n                using (StreamWriter wr = new StreamWriter(path.ToString()))\r\n                {\r\n                    provider.GenerateCodeFromCompileUnit(unit, wr, new CodeGeneratorOptions());\r\n                }\r\n            }\r\n        }\r\n\t}\t\r\n}\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Multitypes.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.DuckTyping\r\n{\r\n\t#region Multitype interfaces\r\n\tpublic interface IDuckOptionalValue\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets a logical value indicating whether value represented by this object is valid.\r\n\t\t/// </summary>\r\n\t\tbool IsValid { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an value represented by this object.\r\n\t\t/// </summary>\r\n\t\tobject Value { get; }\r\n\r\n\t\tType ValueType { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents an generic optional value used in IDuckMultitype interface.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Type argument.</typeparam>\r\n\tpublic interface IDuckOptionalValue<T>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets a logical value indicating whether value represented by this object is valid.\r\n\t\t/// </summary>\r\n\t\tbool IsValid { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an value represented by this object.\r\n\t\t/// </summary>\r\n\t\tT Value { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// \r\n\t/// </summary>\r\n\tpublic interface IDuckMultitype : IEnumerable<Type>\r\n\t{\r\n\t\tint OptionCount { get; }\r\n\r\n\t\tType GetOptionType(int i);\r\n\r\n\t\tIDuckOptionalValue<T> GetOption<T>();\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Use this type as a return or input type if you want the function\r\n\t/// to return two different types of values. The values are represented\r\n\t/// by IDuckOptionalValue objects and should be specified by duck-typing\r\n\t/// compliant type.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Specifies a type of first optional value.</typeparam>\r\n\t/// <typeparam name=\"U\">Specifies a type of second optional value.</typeparam>\r\n\tpublic interface IDuckMultitype<T, U> : IDuckMultitype\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// First optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tIDuckOptionalValue<T> First { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Second optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tIDuckOptionalValue<U> Second { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Use this type as a return or input type if you want the function\r\n\t/// to return three different types of values. The values are represented\r\n\t/// by IDuckOptionalValue objects and should be specified by duck-typing\r\n\t/// compliant type.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Specifies a type of first optional value.</typeparam>\r\n\t/// <typeparam name=\"U\">Specifies a type of second optional value.</typeparam>\r\n\t/// <typeparam name=\"V\">Specifies a type of third optional value.</typeparam>\r\n\tpublic interface IDuckMultitype<T, U, V>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// First optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tIDuckOptionalValue<T> First { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Second optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tIDuckOptionalValue<U> Second { get; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Third optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tIDuckOptionalValue<V> Third { get; }\r\n\t}\r\n\t#endregion\r\n\r\n\t#region Multitype implementation\r\n\r\n\t/// <summary>\r\n\t/// Implementation of IDuckOptionalValue interface.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Type argument.</typeparam>\r\n\tpublic class DuckOptionalValue<T> : IDuckOptionalValue<T>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets an value represented by this object.\r\n\t\t/// </summary>\r\n\t\tpublic T Value { get { if (!isValid) throw new InvalidOperationException(\"Optional value is not valid.\"); else return value; } }\r\n\t\tT value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a logical value indicating whether value represented by this object is valid.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsValid { get { return isValid; } }\r\n\t\tbool isValid;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes an invalid instance of duck optional value. This means that the value\r\n\t\t/// contained is not meant to be read.\r\n\t\t/// </summary>\r\n\t\tinternal DuckOptionalValue()\r\n\t\t{\r\n\t\t\tthis.isValid = false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes an valid instance of duck optional value. This means that the value\r\n\t\t/// contained can be read.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">Value of the object.</param>\r\n\t\tpublic DuckOptionalValue(T value)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t\tthis.isValid = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Common implementation of IDuckMultitype interface.\r\n\t/// </summary>\r\n\tpublic abstract class DuckMultitype : IDuckMultitype\r\n\t{\r\n\t\tList<Type> types;\r\n\t\tIDictionary<Type,object> values;\r\n\r\n\t\tpublic int OptionCount { get { return types.Count; } }\r\n\r\n\t\tinternal DuckMultitype(params Tuple<Type,object>[] objects)\r\n\t\t{\r\n\t\t\tvalues = new Dictionary<Type,object>();\r\n\t\t\ttypes = new List<Type>();\r\n\r\n\t\t\tfor(int i = 0; i < objects.Length; i++)\r\n\t\t\t{\r\n\t\t\t\ttypes.Add(objects[i].Item1);\r\n                values.Add(objects[i].Item1, objects[i].Item2);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic Type GetOptionType(int i)\r\n\t\t{\r\n\t\t\treturn types[i];\r\n\t\t}\r\n\r\n\t\tpublic IDuckOptionalValue<T> GetOption<T>()\r\n\t\t{\r\n\t\t\tif (values.ContainsKey(typeof(T)))\r\n\t\t\t{\r\n\t\t\t\tT a = (T)values[typeof(T)];\r\n\r\n\t\t\t\tif (values[typeof(T)] == null)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn new DuckOptionalValue<T>();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn new DuckOptionalValue<T>(a);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic IEnumerator<Type> GetEnumerator()\r\n\t\t{\r\n\t\t\treturn (IEnumerator<Type>)types.GetEnumerator();\r\n\t\t}\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\treturn (IEnumerator)types.GetEnumerator();\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implementation of IDuckMultitype interface.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Specifies a type of first optional value.</typeparam>\r\n\t/// <typeparam name=\"U\">Specifies a type of second optional value.</typeparam>\r\n\tpublic class DuckMultitype<T, U> : DuckMultitype, IDuckMultitype<T, U>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// First optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tpublic IDuckOptionalValue<T> First { get { return GetOption<T>(); } }\r\n \r\n\t\t/// <summary>\r\n\t\t/// Second optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tpublic IDuckOptionalValue<U> Second { get { return GetOption<U>(); } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes an instance of DuckMultitype class implementing two-value IDuckMultitype interface.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\"></param>\r\n\t\t/// <param name=\"second\"></param>\r\n\t\tpublic DuckMultitype(object first, object second) : \r\n\t\t\tbase(new Tuple<Type, object>(typeof(T), first), new Tuple<Type, object>(typeof(U), second))\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implementation of IDuckMultitype interface.\r\n\t/// </summary>\r\n\t/// <typeparam name=\"T\">Specifies a type of first optional value.</typeparam>\r\n\t/// <typeparam name=\"U\">Specifies a type of second optional value.</typeparam>\r\n\t/// <typeparam name=\"V\">Specifies a type of third optional value.</typeparam>\r\n\tpublic class DuckMultitype<T, U, V> : DuckMultitype, IDuckMultitype<T, U, V>\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// First optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tpublic IDuckOptionalValue<T> First { get { return GetOption<T>();} }\r\n \r\n\t\t/// <summary>\r\n\t\t/// Second optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tpublic IDuckOptionalValue<U> Second { get { return GetOption<U>();} }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Third optional value of the multitype.\r\n\t\t/// </summary>\r\n\t\tpublic IDuckOptionalValue<V> Third { get { return GetOption<V>();} }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes an instance of DuckMultitype class implementing three-value IDuckMultitype interface.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"first\"></param>\r\n\t\t/// <param name=\"second\"></param>\r\n        /// <param name=\"third\"></param>\r\n\t\tpublic DuckMultitype(object first, object second, object third) :\r\n\t\t\tbase(new Tuple<Type, object>(typeof(T), first), new Tuple<Type, object>(typeof(U), second), new Tuple<Type, object>(typeof(V), third))\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"PhpNetCore.DuckTyping\")]\r\n[assembly: AssemblyDescription(\"PhpNetCore.DuckTyping\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"b0b64f00-73f8-49d4-a477-728cdbcd02a5\")]\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/Runtime.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Petricek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//#define DEBUG_DUCK_EMIT\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\nusing System.Collections;\r\n\r\nnamespace PHP.Core.DuckTyping\r\n{\r\n\t#region Attributes\r\n\r\n\t/// <summary>\r\n\t/// This attribute marks interface that is used with duck typing.\r\n\t/// </summary>\r\n\t[AttributeUsage(AttributeTargets.Interface, Inherited = false, AllowMultiple = false)]\r\n\tpublic sealed class DuckTypeAttribute : Attribute\r\n\t{\r\n\t\tpublic bool GlobalFunctions { get; set; }\r\n\t}\r\n\r\n\r\n\t/// <summary>\r\n\t/// Use this attribute when you want to use different name of property or method.\r\n\t/// </summary>\r\n\t/// <example>\r\n\t/// The following example demonstrates how to rename function from \"php_name\" to \"PhpName\":\r\n\t/// <code>\r\n\t/// [DuckType] \r\n\t/// interface IDemo {\r\n\t///   [DuckName(\"php_name\")]\r\n\t///   void PhpName();\r\n\t/// }\r\n\t/// </code>\r\n\t/// </example>\r\n\t[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = false)]\r\n\tpublic sealed class DuckNameAttribute : Attribute\r\n\t{\r\n\t\t#region Members\r\n\r\n\t\tprivate string _name;\r\n\t\tpublic string Name { get { return _name; } set { _name = value; } }\r\n\t\r\n\t\tpublic DuckNameAttribute(string name)\r\n\t\t{\r\n\t\t\t_name = name;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\r\n\t/// <summary>\r\n\t/// Use this type as a interface of all values wrapped by duck types.\r\n\t/// </summary>\r\n\tpublic interface IDuckType\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets original object this IDuckValue was created from. This allows passing of returned duck types as\r\n\t\t/// arguments for another duck type methods.\r\n\t\t/// </summary>\r\n\t\tobject OriginalObject { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Common base implementation of IDuckType interface.\r\n\t/// </summary>\r\n\tpublic abstract class DuckTypeBase : IDuckType\r\n\t{\r\n\t\tpublic object OriginalObject { get { return original; } }\r\n\t\tobject original;\r\n\r\n\t\tprotected DuckTypeBase(object original)\r\n\t\t{\r\n\t\t\tthis.original = original;\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Class that contains duck typing implementation\r\n\t/// </summary>\r\n\tpublic class DuckTyping\r\n\t{\r\n\t\t#region Static\r\n\r\n\t\tinternal const string RealAssemblyName = \"DuckTypingAssembly\";\r\n\t\tinternal const string RealModuleName = \"DuckTypingModule\";\r\n\r\n\t\tprivate static object initializationMutex = new object();\r\n\t\tprivate static volatile bool initialized = false;\r\n\t\tprivate static DuckTyping instance;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton - returns instance of the object\r\n\t\t/// </summary>\r\n\t\tpublic static DuckTyping Instance\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!initialized)\r\n\t\t\t\t{\r\n\t\t\t\t\tlock (initializationMutex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!initialized)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tinstance = new DuckTyping();\r\n\t\t\t\t\t\t\tinitialized = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn instance;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Types\r\n\r\n\t\t/// <summary>\r\n\t\t/// Represents key for the type cache\r\n\t\t/// </summary>\r\n\t\tstruct TypeTuple\r\n\t\t{\r\n\t\t\t#region Members\r\n\r\n\t\t\tprivate Type _interfaceType;\r\n\t\t\tpublic Type InterfaceType { get { return _interfaceType;} set { _interfaceType = value;} }\r\n\r\n\t\t\tprivate Type _objectType;\r\n\t\t\tpublic Type ObjectType { get { return _objectType;} set { _objectType = value;} }\r\n\t\r\n\t\t\tpublic TypeTuple(Type interfaceType, Type objectType)\r\n\t\t\t{\r\n\t\t\t\t_interfaceType = interfaceType; _objectType = objectType;\r\n\t\t\t}\t\r\n\r\n\t\t\tpublic override int  GetHashCode()\r\n\t\t\t{\r\n\t\t\t\treturn InterfaceType.GetHashCode() + ObjectType.GetHashCode();\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Locals\r\n\r\n\t\tModuleBuilder module_builder;\r\n\t\tAssemblyBuilder assembly_builder;\r\n\r\n\t\tDictionary<TypeTuple, Type> typeCache;\r\n\t\tDictionary<Type, Type> globalCache;\r\n\t\tint type_counter = 0;\r\n\t\treadonly object moduleLock = new object();\r\n\t\t\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Singleton - initialize instance\r\n\t\t/// </summary>\r\n\t\tprivate DuckTyping()\r\n\t\t{\r\n\t\t\tAssemblyName assembly_name = new AssemblyName(RealAssemblyName);\r\n\t\t\tassembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly\r\n\t\t\t\t(assembly_name, AssemblyBuilderAccess.Run);\r\n\r\n\t\t\tmodule_builder = assembly_builder.DefineDynamicModule(RealModuleName);\r\n\r\n\t\t\ttypeCache = new Dictionary<TypeTuple, Type>();\r\n\t\t\tglobalCache = new Dictionary<Type, Type>();\r\n\t\t}\r\n\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Public\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements duck typed wrapper using interface <typeparamref name=\"T\"/> \r\n\t\t/// for global functions in the currently loaded PHP source and returns wrapped object.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"T\">Interface that must be marked using <seealso cref=\"DuckTypeAttribute\"/> attribute\r\n\t\t/// and the attribute must be GlobalFunctions = true.</typeparam>\r\n\t\t/// <returns>Wrapped object</returns>\r\n\t\tpublic T ImplementGlobalDuckType<T>()\r\n\t\t{\r\n\t\t\tif (!typeof(T).IsInterface)\r\n\t\t\t\tthrow new ArgumentException(\"Type parameter for NewObject must be an interface!\");\r\n\t\t\tobject[] attrs = typeof(T).GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\t\t\tif (attrs.Length == 0)\r\n\t\t\t\tthrow new ArgumentException(\"Type parameter should have [DuckType] attribute!\");\r\n\t\t\tif (!((DuckTypeAttribute)attrs[0]).GlobalFunctions)\r\n\t\t\t\tthrow new ArgumentException(\"Type parameter should have [DuckType(GlobalFunctions=true)] attribute!\");\r\n\r\n\t\t\tlock (this) {\r\n\t\t\t\tType type;\r\n\r\n\t\t\t\t// cache lookup\r\n\t\t\t\tif (!globalCache.TryGetValue(typeof(T), out type))\r\n\t\t\t\t{\r\n\t\t\t\t\tstring typeName;\r\n\t\t\t\t\tEmitAll(typeof(T), out type, out typeName, true);\r\n\t\t\t\t\tglobalCache.Add(typeof(T), type);\r\n\r\n#if DEBUG_DUCK_EMIT\r\n\t\t\t\tAssemblyName assembly_name = new AssemblyName(RealAssemblyName);\r\n\t\t\t\tAssemblyBuilder ab = assembly_builder;\r\n\t\t\t\tModuleBuilder mb = module_builder;\r\n\r\n\t\t\t\tassembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(\r\n\t\t\t\t\tassembly_name, AssemblyBuilderAccess.RunAndSave, \"C:\\\\Temp\\\\\", null, null, null, null, true);\r\n\t\t\t\tmodule_builder = assembly_builder.DefineDynamicModule(RealModuleName, String.Format(\"test_{0}.dll\", type_counter-1), true);\r\n\r\n\t\t\t\tType _type; string _string;\r\n\t\t\t\tEmitAll(typeof(T), out _type, out _string);\r\n\r\n\t\t\t\tassembly_builder.Save(String.Format(\"test_{0}.dll\", type_counter-1));\r\n\t\t\t\tassembly_builder = ab;\r\n\t\t\t\tmodule_builder = mb;\r\n\r\n#endif\r\n\t\t\t\t}\r\n\t\t\t\treturn (T)type.GetConstructor(Type.EmptyTypes).Invoke(ArrayUtils.EmptyObjects);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Implements duck typed wrapper using interface <typeparamref name=\"T\"/> \r\n\t\t/// for the object <paramref name=\"o\"/> and returns wrapped object.\r\n\t\t/// </summary>\r\n\t\t/// <typeparam name=\"T\">Interface that must be marked using <seealso cref=\"DuckTypeAttribute\"/> attribute</typeparam>\r\n\t\t/// <param name=\"o\">Object to be wrapped</param>\r\n\t\t/// <returns>Wrapped object</returns>\r\n\t\tpublic T ImplementDuckType<T>(object o)\r\n\t\t{\r\n\t\t\tif (!typeof(T).IsInterface)\r\n\t\t\t\tthrow new ArgumentException(\"Type parameter for NewObject must be an interface!\");\r\n\t\t\tobject[] attrs = typeof(T).GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\t\t\tif (attrs.Length == 0)\r\n\t\t\t\tthrow new ArgumentException(\"Type parameter should have [DuckType] attribute!\");\r\n\r\n\t\t\tlock (this) {\r\n\t\t\t\tTypeTuple cacheKey = new TypeTuple(typeof(T), o.GetType());\r\n\t\t\t\tType type;\r\n\r\n\t\t\t\t// cache lookup\r\n\t\t\t\tif (!typeCache.TryGetValue(cacheKey, out type))\r\n\t\t\t\t{\r\n\t\t\t\t\tstring typeName;\r\n\t\t\t\t\tEmitAll(typeof(T), out type, out typeName, false);\r\n\t\t\t\t\ttypeCache.Add(cacheKey, type);\r\n\r\n#if DEBUG_DUCK_EMIT\r\n\t\t\t\tAssemblyName assembly_name = new AssemblyName(RealAssemblyName);\r\n\t\t\t\tAssemblyBuilder ab = assembly_builder;\r\n\t\t\t\tModuleBuilder mb = module_builder;\r\n\r\n\t\t\t\tassembly_builder = AppDomain.CurrentDomain.DefineDynamicAssembly(\r\n\t\t\t\t\tassembly_name, AssemblyBuilderAccess.RunAndSave, \"C:\\\\Temp\\\\\", null, null, null, null, true);\r\n\t\t\t\tmodule_builder = assembly_builder.DefineDynamicModule(RealModuleName, String.Format(\"test_{0}.dll\", type_counter-1), true);\r\n\r\n\t\t\t\tType _type; string _string;\r\n\t\t\t\tEmitAll(typeof(T), out _type, out _string);\r\n\r\n\t\t\t\tassembly_builder.Save(String.Format(\"test_{0}.dll\", type_counter-1));\r\n\t\t\t\tassembly_builder = ab;\r\n\t\t\t\tmodule_builder = mb;\r\n\r\n#endif\r\n\t\t\t\t}\r\n\t\t\t\treturn (T)type.GetConstructor(Types.Object).Invoke(new object[] { o });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Private \r\n\r\n\t\t/// <summary>\r\n\t\t/// Emit duck type implementation\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"origType\">Interface type</param>\r\n\t\t/// <param name=\"type\">Emitted interface implementation</param>\r\n\t\t/// <param name=\"typeName\">Generated type name</param>\r\n        /// <param name=\"global\">Is global.</param>\r\n\t\tprivate void EmitAll(Type origType, out Type type, out string typeName, bool global)\r\n\t\t{\r\n\t\t\tlock (moduleLock)\r\n\t\t\t{\r\n\t\t\t\ttypeName = String.Format(\"<{1}#{0}>\", type_counter++, origType.Name);\r\n\r\n\t\t\t\tType[] interfaces;\r\n\r\n\t\t\t\tif (!global)\r\n\t\t\t\t{\r\n\t\t\t\t\tinterfaces = new Type[] { origType, typeof(IDuckType) };\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tinterfaces = new Type[] { origType };\r\n\t\t\t\t}\r\n\r\n\t\t\t\tTypeBuilder tb = module_builder.DefineType(typeName, TypeAttributes.Public |\r\n\t\t\t\t\tTypeAttributes.Sealed | TypeAttributes.Class, null, interfaces);\r\n\r\n\t\t\t\tFieldInfo fld = null;\r\n\t\t\t\tif (!global)\r\n\t\t\t\t{\r\n\t\t\t\t\t// internal constructor and field to store object\r\n\t\t\t\t\tfld = CreateField(tb);\r\n\t\t\t\t\tCreateConstructor(tb, fld);\r\n\t\t\t\t\tImplementCommonDuckTypeInterface(tb, fld);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// only empty constructor for 'GlobalFunctions' object\r\n\t\t\t\t\tCreateEmptyConstructor(tb);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// methods\r\n\t\t\t\tforeach (MethodInfo method in origType.GetMethods())\r\n\t\t\t\t{\r\n\t\t\t\t\tif (method.IsSpecialName) continue;\r\n\t\t\t\t\tImplementMethod(tb, method, fld, global);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// properties\r\n\t\t\t\tforeach (PropertyInfo prop in origType.GetProperties())\r\n\t\t\t\t{\r\n\t\t\t\t\tif (global)\r\n\t\t\t\t\t\tthrow new ArgumentException(\"DuckType interfaces with GlobalFunctions=true can not support properties!\");\r\n\t\t\t\t\tImplementProperty(tb, prop, fld);\r\n\t\t\t\t}\r\n\t\t\t\ttype = tb.CreateType();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Creates constructor </summary>\r\n\t\t/// <remarks><code>\r\n\t\t/// class A : IDuck {\r\n\t\t///   public A(object o) { _obj = o; }\r\n\t\t/// }\r\n\t\t/// </code></remarks>\r\n\t\tprivate void CreateConstructor(TypeBuilder tb, FieldInfo fld)\r\n\t\t{\r\n\t\t\tConstructorBuilder c = tb.DefineConstructor(MethodAttributes.Public, \r\n\t\t\t\tCallingConventions.Standard, Types.Object);\r\n\t\t\tILGenerator il = c.GetILGenerator();\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Call, Types.Object[0].GetConstructor(Type.EmptyTypes));\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Ldarg_1);\r\n\t\t\til.Emit(OpCodes.Stfld, fld);\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\t\tprivate void ImplementCommonDuckTypeInterface(TypeBuilder tb, FieldInfo fld)\r\n\t\t{\r\n\t\t\tPropertyBuilder prop = tb.DefineProperty(\"OriginalObject\", PropertyAttributes.HasDefault, typeof(Object), null);\r\n\t\t\tMethodBuilder method = tb.DefineMethod(\"get_OriginalObject\", MethodAttributes.Private | MethodAttributes.HideBySig |\r\n\t\t\t\tMethodAttributes.SpecialName | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final, typeof(Object), Type.EmptyTypes);\r\n\t\t\tILGenerator il = method.GetILGenerator();\r\n\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Ldfld, fld);\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\tprop.SetGetMethod(method);\r\n\t\t\ttb.DefineMethodOverride(method, typeof(IDuckType).GetProperty(\"OriginalObject\").GetGetMethod());\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Creates empty constructor </summary>\r\n\t\t/// <remarks><code>\r\n\t\t/// class A : IDuck {\r\n\t\t///   public A() { }\r\n\t\t/// }\r\n\t\t/// </code></remarks>\r\n\t\tprivate void CreateEmptyConstructor(TypeBuilder tb)\r\n\t\t{\r\n\t\t\tConstructorBuilder c = tb.DefineConstructor(MethodAttributes.Public,\r\n\t\t\t\tCallingConventions.Standard, Type.EmptyTypes);\r\n\t\t\tILGenerator il = c.GetILGenerator();\r\n\t\t\til.Emit(OpCodes.Ldarg_0);\r\n\t\t\til.Emit(OpCodes.Call, Types.Object[0].GetConstructor(Type.EmptyTypes));\r\n\t\t\til.Emit(OpCodes.Ret);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Creates field to store object </summary>\r\n\t\t/// <remarks><code>\r\n\t\t/// class A : IDuck {\r\n\t\t///   object _obj; \r\n\t\t/// }\r\n\t\t/// </code></remarks>\r\n\t\tprivate FieldInfo CreateField(TypeBuilder tb)\r\n\t\t{\r\n\t\t\treturn tb.DefineField(\"_obj\", typeof(object), FieldAttributes.Private);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Implements property </summary>\r\n\t\t/// <remarks><code>\r\n\t\t/// class A : IDuck {\r\n\t\t///   /*type*/ Prop { \r\n\t\t///     get {\r\n\t\t/// \t\t\tOperators.GetProperty(this._obj, \"Foo\", null, false);\r\n\t\t///\t\t\t\treturn /* .. type conversion .. */\r\n\t\t///     }\r\n\t\t///     set {\r\n\t\t///\t\t\t\tOperators.SetProperty(\r\n\t\t///\t\t\t\t\tnew PhpReference(PhpVariable.Copy(ClrObject.WrapDynamic(argument#i), CopyReason.PassedByCopy)),\r\n\t\t///\t\t\t\t\tref this._obj, \"Foo\", null, ScriptContext.Current);\r\n\t\t///\t\t\t}\r\n\t\t///   } \r\n\t\t/// }\r\n\t\t/// </code></remarks>\r\n\t\tprivate void ImplementProperty(TypeBuilder tb, PropertyInfo prop, FieldInfo fld)\r\n\t\t{\r\n\t\t\tif (prop.GetIndexParameters().Length > 0)\r\n\t\t\t\tthrow new NotImplementedException(\"Indexers are not supported!\");\r\n\r\n\t\t\tstring propName = prop.Name;\r\n\t\t\tobject[] attrs = prop.GetCustomAttributes(typeof(DuckNameAttribute), false);\r\n\t\t\tif (attrs.Length > 0) propName = ((DuckNameAttribute)attrs[0]).Name;\r\n\r\n\t\t\t// define method\r\n\t\t\tPropertyBuilder pb = tb.DefineProperty(prop.Name, PropertyAttributes.HasDefault, prop.PropertyType, null);\r\n\r\n\t\t\tif (prop.CanRead)\r\n\t\t\t{\r\n\t\t\t\tMethodBuilder getter = tb.DefineMethod(\"get_\"+prop.Name, MethodAttributes.Private | MethodAttributes.SpecialName |\r\n\t\t\t\t\tMethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Virtual | MethodAttributes.Final,\r\n\t\t\t\t\tprop.PropertyType, Type.EmptyTypes);\r\n\t\t\t\tILEmitter il = new ILEmitter(getter);\r\n\r\n\t\t\t\t// emit getter\r\n\t\t\t\t// Operators.GetProperty(this.obj, \"Foo\", null, false);\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Load(fld);\r\n\t\t\t\til.LoadLiteral(propName);\r\n\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\til.LoadLiteral(false);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.GetProperty);\r\n\r\n\t\t\t\tEmitReturn(il, prop.PropertyType, false);\r\n\t\t\t\tpb.SetGetMethod(getter);\r\n\t\t\t\ttb.DefineMethodOverride(getter, prop.GetGetMethod());\r\n\t\t\t}\r\n\r\n\t\t\tif (prop.CanWrite)\r\n\t\t\t{\r\n\t\t\t\tMethodBuilder setter = tb.DefineMethod(\"set_\" + prop.Name, MethodAttributes.Private | MethodAttributes.SpecialName |\r\n\t\t\t\t\tMethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Virtual | MethodAttributes.Final,\r\n\t\t\t\t\ttypeof(void), new Type[] { prop.PropertyType });\r\n\t\t\t\tILEmitter il = new ILEmitter(setter);\r\n\r\n\t\t\t\t// emit setter\r\n\t\t\t\t// new PhpReference(PhpVariable.Copy(ClrObject.WrapDynamic(argument#i), CopyReason.PassedByCopy))\r\n\t\t\t\til.Ldarg(1);\r\n\t\t\t\tif (prop.PropertyType.IsValueType)\r\n\t\t\t\t\til.Emit(OpCodes.Box, prop.PropertyType);\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_WrapDynamic);\r\n\t\t\t\til.LdcI4((int)CopyReason.PassedByCopy);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\r\n\t\t\t\t// Operators.SetProperty( ... , ref this._obj, \"Foo\", null, ScriptContext.Current);\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.LoadAddress(fld);\r\n\t\t\t\til.LoadLiteral(propName);\r\n\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\til.EmitCall(OpCodes.Call, Methods.ScriptContext.GetCurrentContext, Type.EmptyTypes);\r\n\t\t\t\til.EmitCall(OpCodes.Call, Methods.Operators.SetProperty, Type.EmptyTypes);\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t\tpb.SetSetMethod(setter);\r\n\t\t\t\ttb.DefineMethodOverride(setter, prop.GetSetMethod());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Implements method </summary>\r\n\t\t/// <remarks><code>\r\n\t\t/// class A : IDuck {\r\n\t\t///   /*type*/ Func(/*arguments*/) {\r\n\t\t///     sc = ScriptContext.Current;\r\n\t\t///\t\t\t// temporary array is created only when arguments.Length > 8 (otherwise AddFrame overload exists)\r\n\t\t///\t\t\tobject[] tmp = new object[arguments.Length];  \r\n\t\t///\t\t\ttmp[#i] = new PhpReference(PhpVariable.Copy(ClrObject.WrapDynamic(argument#i), CopyReason.PassedByCopy));\r\n\t\t///\t\t\tsc.Stack.AddFrame(tmp);\r\n\t\t///\t\t\treturn /* .. type conversion .. */\r\n\t\t///   }\r\n\t\t/// }\r\n\t\t/// </code></remarks>\r\n\t\tprivate void ImplementMethod(TypeBuilder tb, MethodInfo method, FieldInfo fld, bool globalFuncs)\r\n\t\t{\r\n\t\t\t// get parameters (i want C# 3.0 NOW!!)\r\n\t\t\tParameterInfo[] pinfo = method.GetParameters();\r\n\t\t\tType[] ptypes = new Type[pinfo.Length];\r\n\t\t\tfor(int i = 0; i < pinfo.Length; i++) ptypes[i] = pinfo[i].ParameterType;\r\n\t\t\tint argCount = pinfo.Length;\r\n\r\n\t\t\tstring methName = method.Name;\r\n\t\t\tobject[] attrs = method.GetCustomAttributes(typeof(DuckNameAttribute), false);\r\n\t\t\tif (attrs.Length > 0) methName = ((DuckNameAttribute)attrs[0]).Name;\r\n\r\n\t\t\t// define method\r\n\t\t\tMethodBuilder mb = tb.DefineMethod(method.Name, MethodAttributes.Private | MethodAttributes.HideBySig | \r\n\t\t\t\tMethodAttributes.NewSlot | MethodAttributes.Virtual | MethodAttributes.Final, \r\n\t\t\t\tmethod.ReturnType, ptypes);\r\n\t\t\tILEmitter il = new ILEmitter(mb);\r\n\r\n\t\t\t// Wrap parameters\r\n\t\t\t// sc = ScriptContext.Current\r\n\t\t\tLocalBuilder sc = il.DeclareLocal(typeof(ScriptContext));\r\n\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.GetCurrentContext);\r\n\t\t\til.Stloc(sc);\r\n\r\n\t\t\tLocalBuilder ar = null;\r\n\t\t\tif (argCount > 8)\r\n\t\t\t{\r\n\t\t\t\t// tmp = new object[pinfo.Length];\r\n\t\t\t\tar = il.DeclareLocal(typeof(object[]));\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4, pinfo.Length);\r\n\t\t\t\til.Emit(OpCodes.Newarr, typeof(object));\r\n\t\t\t\til.Stloc(ar);\r\n\t\t\t}\r\n\r\n\t\t\t// sc.Stack.AddFrame(...);\r\n\t\t\til.Ldloc(sc);\r\n\t\t\til.Load(Fields.ScriptContext_Stack);\r\n\r\n\t\t\tfor (int i = 0; i < argCount; i++)\r\n\t\t\t{\r\n\t\t\t\tif (argCount > 8)\r\n\t\t\t\t{\r\n\t\t\t\t\t// tmp[i]\r\n\t\t\t\t\til.Emit(OpCodes.Ldloc, ar);\r\n\t\t\t\t\til.Emit(OpCodes.Ldc_I4, i);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if (param#i is IDuckType)\r\n\t\t\t\t//   param#i.OriginalObject\r\n\t\t\t\t// else\r\n\t\t\t\t//   new PhpReference(PhpVariable.Copy(ClrObject.WrapDynamic(param#i), CopyReason.PassedByCopy));\r\n\r\n\t\t\t\tLabel lblDuckType = il.DefineLabel();\r\n\t\t\t\tLabel lblEnd = il.DefineLabel();\r\n\r\n\t\t\t\tif (!ptypes[i].IsValueType)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Ldarg(i + 1);\r\n\t\t\t\t\til.Emit(OpCodes.Isinst, typeof(IDuckType));\r\n\t\t\t\t\til.Emit(OpCodes.Brtrue, lblDuckType);\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.Ldarg(i + 1);\r\n\r\n\t\t\t\tif (ptypes[i].IsValueType)\r\n\t\t\t\t\til.Emit(OpCodes.Box, ptypes[i]);\r\n\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ClrObject_WrapDynamic);\r\n\t\t\t\til.LdcI4((int)CopyReason.PassedByCopy);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.PhpVariable.Copy);\r\n\t\t\t\til.Emit(OpCodes.Newobj, Constructors.PhpReference_Object);\r\n\r\n\t\t\t\tif (!ptypes[i].IsValueType)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Br, lblEnd);\r\n\r\n\t\t\t\t\til.MarkLabel(lblDuckType);\r\n\r\n\t\t\t\t\til.Ldarg(i + 1);\r\n\t\t\t\t\til.Emit(OpCodes.Call, typeof(IDuckType).GetProperty(\"OriginalObject\").GetGetMethod());\r\n\r\n\t\t\t\t\til.MarkLabel(lblEnd);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (argCount > 8) il.Emit(OpCodes.Stelem_Ref);\r\n\t\t\t}\r\n\t\t\tif (argCount > 8)\r\n\t\t\t\til.Emit(OpCodes.Ldloc, ar);\r\n\t\t\til.Emit(OpCodes.Call, Methods.PhpStack.AddFrame.Overload(argCount));\r\n\r\n\t\t\tif (globalFuncs)\r\n\t\t\t{\r\n\t\t\t\t// localVariables = null, namingContext = null\r\n\t\t\t\t// ScriptContex.Call(null, null, \"Foo\", null, ScriptContext.Current).value;\r\n\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\til.LoadLiteral(methName);\r\n                il.LoadLiteral(null);\r\n                il.Emit(OpCodes.Ldsflda, il.TypeBuilder.DefineField(\"<callHint>'lambda\", typeof(PHP.Core.Reflection.DRoutineDesc), FieldAttributes.Static | FieldAttributes.Private));\r\n\t\t\t\til.Ldloc(sc);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.ScriptContext.Call);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Operators.InvokeMethod(this.obj, \"Foo\", null, ScriptContext.Current).value;\r\n\t\t\t\til.Ldarg(0);\r\n\t\t\t\til.Load(fld);\r\n\t\t\t\til.LoadLiteral(methName);\r\n\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\til.Ldloc(sc);\r\n\t\t\t\til.Emit(OpCodes.Call, Methods.Operators.InvokeMethodStr);\r\n\t\t\t}\r\n\r\n\t\t\tEmitReturn(il, method.ReturnType, true);\r\n\t\t\ttb.DefineMethodOverride(mb, method);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary> Emit PHP to CLR conversion </summary>\r\n\t\t/// <remarks>If the return type is interface marked using <seealso cref=\"DuckTypeAttribute\"/>\r\n\t\t/// it is wrapped again.\r\n\t\t/// <code>\r\n\t\t/// // type is IDuckEnumerable&lt;T&gt;\r\n\t\t/// return new DuckEnumerableWrapper&lt;T&gt;(obj.GetForeachEnumerator(false, false, null))\r\n\t\t/// \r\n\t\t/// // type is IDuckKeyedEnumerable&lt;T&gt;\r\n\t\t/// return new DuckKeyedEnumerableWrapper&lt;T&gt;(obj.GetForeachEnumerator(true, false, null))\r\n\t\t/// \r\n\t\t/// // type is marked using [DuckType]\r\n\t\t/// return DuckTyping.Instance.ImplementDuckType&lt;T&gt;(obj);\r\n\t\t/// \r\n\t\t/// // otherwise uses standard ConvertToClr conversion method\r\n\t\t/// </code>\r\n\t\t/// </remarks>\r\n\t\tprivate static void EmitReturn(ILEmitter il, Type returnedType, bool isPhpRef)\r\n\t\t{\r\n\t\t\tType[] gargs = returnedType.GetGenericArguments();\r\n\t\t\tobject[] attrs = returnedType.GetCustomAttributes(typeof(DuckTypeAttribute), false);\r\n\r\n\t\t\tbool isDuckEnumerable = (gargs.Length == 1 && returnedType.Equals(typeof(IDuckEnumerable<>).MakeGenericType(gargs)));\r\n\t\t\tbool isDuckKeyedEnumerable = (gargs.Length == 2 && returnedType.Equals(typeof(IDuckKeyedEnumerable<,>).MakeGenericType(gargs)));\r\n\t\t\tbool isDuckType = attrs != null && attrs.Length > 0;\r\n\r\n\t\t\tif (returnedType.Equals(typeof(void)))\r\n\t\t\t{\r\n\t\t\t\til.Emit(OpCodes.Pop);\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t\telse if (isDuckType || isDuckEnumerable || isDuckKeyedEnumerable)\r\n\t\t\t{\r\n\t\t\t\tLocalBuilder tmp = il.DeclareLocal(typeof(object));\r\n\r\n\t\t\t\t//store the value local var (after unwrapping it from the reference)\r\n\t\t\t\tif (isPhpRef) il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n\t\t\t\til.Stloc(tmp);\r\n\r\n\t\t\t\tLabel lblTestMinusOne = il.DefineLabel();\r\n\t\t\t\tLabel lblWrap = il.DefineLabel();\r\n\t\t\t\tLabel lblInvalidInt = il.DefineLabel();\r\n\r\n\t\t\t\t// test whether the value is null\r\n\t\t\t\til.Ldloc(tmp);\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, lblTestMinusOne);\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t\til.MarkLabel(lblTestMinusOne);\r\n\r\n\t\t\t\t// test whether value is -1\r\n\t\t\t\til.Ldloc(tmp);\r\n\t\t\t\til.Emit(OpCodes.Isinst, typeof(int));\r\n\t\t\t\til.Emit(OpCodes.Brfalse, lblWrap); // value is not int, so we can wrap the value\r\n\t\t\t\til.Ldloc(tmp);\r\n\t\t\t\til.Emit(OpCodes.Unbox_Any, typeof(int));\r\n\t\t\t\til.Emit(OpCodes.Ldc_I4, -1);\r\n\t\t\t\til.Emit(OpCodes.Ceq);\r\n\t\t\t\til.Emit(OpCodes.Brfalse, lblWrap); // value is int but not -1\r\n\t\t\t\til.Emit(OpCodes.Ldnull);\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\r\n\t\t\t\til.MarkLabel(lblWrap);\r\n\r\n\t\t\t\t// specific duck type wrapping\r\n\t\t\t\tif (isDuckEnumerable || isDuckKeyedEnumerable)\r\n\t\t\t\t{\r\n\t\t\t\t\til.Ldloc(tmp);\r\n\t\t\t\t\til.Emit(OpCodes.Dup);\r\n\t\t\t\t\t// Standard: new DuckEnumerableWrapper<T>(obj.GetForeachEnumerator(false, false, null))\r\n\t\t\t\t\t// Keyed:    new DuckKeyedEnumerableWrapper<T>(obj.GetForeachEnumerator(false, false, null))\r\n\t\t\t\t\til.LoadLiteral(gargs.Length == 2); // keyed?\r\n\t\t\t\t\til.LoadLiteral(false);\r\n\t\t\t\t\til.LoadLiteral(null);\r\n\t\t\t\t\til.Emit(OpCodes.Callvirt, Methods.IPhpEnumerable_GetForeachEnumerator);\r\n\t\t\t\t\tif (isDuckEnumerable)\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, typeof(DuckEnumerableWrapper<>).\r\n\t\t\t\t\t\t\tMakeGenericType(gargs).GetConstructors()[0]);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\til.Emit(OpCodes.Newobj, typeof(DuckKeyedEnumerableWrapper<,>).\r\n\t\t\t\t\t\t\tMakeGenericType(gargs).GetConstructors()[0]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\til.Emit(OpCodes.Call, typeof(DuckTyping).GetProperty(\"Instance\", BindingFlags.Public | BindingFlags.Static).GetGetMethod());\r\n\t\t\t\t\til.Ldloc(tmp);\r\n\t\t\t\t\til.Emit(OpCodes.Call, typeof(DuckTyping).GetMethod(\"ImplementDuckType\", BindingFlags.Public | BindingFlags.Instance).MakeGenericMethod(returnedType));\t\t\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\til.Emit(OpCodes.Ret);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                if (returnedType == typeof(object))\r\n                {\r\n                    Label lbl = il.DefineLabel();\r\n\r\n                    if (isPhpRef)\r\n                    {\r\n                        il.Emit(OpCodes.Ldfld, Fields.PhpReference_Value);\r\n                    }\r\n                    \r\n                    il.Emit(OpCodes.Dup);\r\n                    il.Emit(OpCodes.Isinst, typeof(PhpBytes));\r\n                    il.Emit(OpCodes.Brfalse, lbl);\r\n                    il.EmitCall(OpCodes.Call, typeof(IPhpConvertible).GetMethod(\"ToString\", Type.EmptyTypes), Type.EmptyTypes);\r\n                    il.Emit(OpCodes.Ret);\r\n                    il.MarkLabel(lbl);\r\n                    ClrOverloadBuilder.EmitConvertToClr(il, PhpTypeCode.Object, returnedType);\r\n                    il.Emit(OpCodes.Ret);\r\n                }\r\n                else\r\n                {\r\n                    ClrOverloadBuilder.EmitConvertToClr(il, isPhpRef ? PhpTypeCode.PhpReference : PhpTypeCode.Object, returnedType);\r\n                    il.Emit(OpCodes.Ret);\r\n                }\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.DuckTyping/ScriptContext.Extension.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.DuckTyping\r\n{\r\n    public static class ScriptContextExtension\r\n    {\r\n        public static T Call<T>(this ScriptContext context, string/*!*/ functionName, NamingContext namingContext,\r\n            Dictionary<string, object> callerLocalVariables, params object[] arguments)\r\n            where T : class\r\n        {\r\n            PhpReference rf = context.Call(functionName, namingContext, callerLocalVariables, arguments);\r\n            if (rf.Value == null)\r\n                return null;\r\n            else\r\n                return DuckTyping.Instance.ImplementDuckType<T>(rf.Value);\r\n        }\r\n\r\n        public static T Call<T>(this ScriptContext context, string/*!*/ functionName, params object[] arguments)\r\n            where T : class\r\n        {\r\n            return Call<T>(context, functionName, null, null, arguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// To be used with DuckType(GlobalFunctions=true) only!\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        public static T NewObject<T>(this ScriptContext context)\r\n        {\r\n            return DuckTyping.Instance.ImplementGlobalDuckType<T>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates new object with given class name and arguments and then wraps it into\r\n        /// a duck type specified in generic type arguments.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Duck type interface to be used for wrapping.</typeparam>\r\n        /// <param name=\"context\">Current context.</param>\r\n        /// <param name=\"className\">Class name which will be used for new object creation.</param>\r\n        /// <param name=\"ctorArguments\">Constructor arguments to be used.</param>\r\n        /// <returns>Dynamic object wrapped into static wrapper.</returns>\r\n        public static T NewObject<T>(this ScriptContext context, string/*!*/ className, params object[] ctorArguments)\r\n        {\r\n            return context.NewObject<T>(className, null, ctorArguments);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates new object with given class name, naming context and arguments and then wraps it into\r\n        /// a duck type specified in generic type arguments.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Duck type interface to be used for wrapping.</typeparam>\r\n        /// <param name=\"context\">Current context.</param>\r\n        /// <param name=\"className\">Class name which will be used for new object creation.</param>\r\n        /// <param name=\"namingContext\">Naming context.</param>\r\n        /// <param name=\"ctorArguments\">Constructor arguments to be used.</param>\r\n        /// <returns>Dynamic object wrapped into static wrapper.</returns>\r\n        public static T NewObject<T>(this ScriptContext context, string/*!*/ className, NamingContext namingContext, params object[] ctorArguments)\r\n        {\r\n            //create new argument array and dig wrapped values out of it\r\n            object[] newCtorArgs = new object[ctorArguments.Length];\r\n\r\n            for (int i = 0; i < newCtorArgs.Length; i++)\r\n            {\r\n                IDuckType duck = ctorArguments[i] as IDuckType;\r\n                if (duck != null)\r\n                    newCtorArgs[i] = duck.OriginalObject;\r\n                else\r\n                    newCtorArgs[i] = ctorArguments[i];\r\n            }\r\n\r\n            object o = context.NewObject(className, namingContext, newCtorArgs);\r\n            return DuckTyping.Instance.ImplementDuckType<T>(o);\r\n        }\r\n\r\n        public static T WrapObject<T>(this ScriptContext context, object o)\r\n        {\r\n            return DuckTyping.Instance.ImplementDuckType<T>(o);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/ArrayEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents <c>array</c> constructor.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class ArrayEx : VarLikeConstructUse\r\n\t{\r\n\t\tpublic override Operations Operation { get { return Operations.Array; } }\r\n        internal override bool AllowsPassByReference { get { return false; } }\r\n\r\n        public Item[]/*!*/ Items { get { return items; } }\r\n        private readonly Item[]/*!*/items;\r\n        \r\n\t\tpublic ArrayEx(Text.Span span, IList<Item>/*!*/items)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(items != null);\r\n\t\t\tthis.items = items.AsArray();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitArrayEx(this);\r\n        }\r\n\t}\r\n\r\n\t#region Item\r\n\r\n\t/// <summary>\r\n\t/// Base class for item of an array defined by <c>array</c> constructor.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class Item : AstNode\r\n\t{\r\n        public Expression Index { get { return index; } internal set { index = value; } }\r\n\t\tprivate Expression index; // can be null\r\n\r\n\t\tprotected Item(Expression index)\r\n\t\t{\r\n\t\t\tthis.index = index;\r\n\t\t}\r\n\r\n\t\tinternal bool HasKey { get { return (index != null); } }\r\n\t\tinternal bool IsIndexLiteral { get { return index is Literal; } }\r\n\t\tinternal bool IsIndexIntLiteral { get { return index is IntLiteral; } }\r\n\t\tinternal bool IsIndexStringLiteral { get { return index is StringLiteral; } }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ValueItem\r\n\r\n\t/// <summary>\r\n\t/// Expression for the value of an array item defined by <c>array</c> constructor.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class ValueItem : Item\r\n\t{\r\n\t\t/// <summary>Value of array item</summary>\r\n        public Expression ValueExpr { get { return valueExpr; } internal set { valueExpr = value; } }\r\n        private Expression valueExpr;\r\n        \r\n\t\tpublic ValueItem(Expression index, Expression/*!*/ valueExpr)\r\n\t\t\t: base(index)\r\n\t\t{\r\n\t\t\tDebug.Assert(valueExpr != null);\r\n\t\t\tthis.valueExpr = valueExpr;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RefItem\r\n\r\n\t/// <summary>\r\n\t/// Reference to a variable containing the value of an array item defined by <c>array</c> constructor.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class RefItem : Item\r\n\t{\r\n\t\tprivate readonly VariableUse/*!*/refToGet;\r\n        /// <summary>Object to obtain reference of</summary>\r\n        public VariableUse/*!*/RefToGet { get { return this.refToGet; } }\r\n\r\n\t\tpublic RefItem(Expression index, VariableUse refToGet)\r\n\t\t\t: base(index)\r\n\t\t{\r\n            Debug.Assert(refToGet != null);\r\n            this.refToGet = refToGet;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/AssignEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Base class for assignment expressions (by-value and by-ref).\r\n\t/// </summary>\r\n\tpublic abstract class AssignEx : Expression\r\n\t{\r\n\t\tinternal override bool AllowsPassByReference { get { return true; } }\r\n\r\n\t\tinternal VariableUse lvalue;\r\n        /// <summary>Target of assignment</summary>\r\n        public VariableUse LValue { get { return lvalue; } }\r\n\r\n\t\tprotected AssignEx(Text.Span p) : base(p) { }\r\n\t}\r\n\r\n\t#region ValueAssignEx\r\n\r\n\t/// <summary>\r\n\t/// By-value assignment expression with possibly associated operation.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Implements PHP operators: <c>=  +=  -=  *=  /=  %=  .= =.  &amp;=  |=  ^=  &lt;&lt;=  &gt;&gt;=</c>.\r\n\t/// </remarks>\r\n\tpublic sealed class ValueAssignEx : AssignEx\r\n\t{\r\n        public override Operations Operation { get { return operation; } }\r\n\t\tinternal Operations operation;\r\n\r\n\t\tinternal Expression/*!*/ rvalue;\r\n        /// <summary>Expression being assigned</summary>\r\n        public Expression/*!*/RValue { get { return rvalue; } }\r\n\r\n\t\tpublic ValueAssignEx(Text.Span span, Operations operation, VariableUse/*!*/ lvalue, Expression/*!*/ rvalue)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.lvalue = lvalue;\r\n\t\t\tthis.rvalue = rvalue;\r\n\t\t\tthis.operation = operation;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitValueAssignEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region RefAssignEx\r\n\r\n\t/// <summary>\r\n\t/// By-reference assignment expression (<c>&amp;=</c> PHP operator).\r\n\t/// </summary>\r\n\tpublic sealed class RefAssignEx : AssignEx\r\n\t{\r\n        public override Operations Operation { get { return Operations.AssignRef; } }\r\n\r\n\t\t/// <summary>Expression being assigned</summary>\r\n        public Expression/*!*/RValue { get { return rvalue; } }\r\n        internal Expression/*!*/ rvalue;\r\n        \r\n\t\tpublic RefAssignEx(Text.Span span, VariableUse/*!*/ lvalue, Expression/*!*/ rvalue)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(rvalue is VarLikeConstructUse || rvalue is NewEx);\r\n\t\t\tthis.lvalue = lvalue;\r\n\t\t\tthis.rvalue = rvalue;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitRefAssignEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/BinaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Binary expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class BinaryEx : Expression\r\n    {\r\n        #region Fields & Properties\r\n\r\n        public Expression/*!*/ LeftExpr { get { return leftExpr; } internal set { leftExpr = value; } }\r\n\t\tprivate Expression/*!*/ leftExpr;\r\n\r\n        public Expression/*!*/ RightExpr { get { return rightExpr; } internal set { rightExpr = value; } }\r\n\t\tprivate Expression/*!*/ rightExpr;\r\n\r\n        public override Operations Operation { get { return operation; } }\r\n\t\tprivate Operations operation;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public BinaryEx(Text.Span span, Operations operation, Expression/*!*/ leftExpr, Expression/*!*/ rightExpr)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(leftExpr != null && rightExpr != null);\r\n\t\t\tthis.operation = operation;\r\n\t\t\tthis.leftExpr = leftExpr;\r\n\t\t\tthis.rightExpr = rightExpr;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitBinaryEx(this);\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/BuiltInFunctions.CoreCLR.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Emit;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region IncludingEx\r\n\r\n\t/// <summary>\r\n\t/// Inclusion expression (include, require, synthetic auto-inclusion nodes).\r\n\t/// </summary>\r\n\tpublic sealed partial class IncludingEx : Expression\r\n\t{\r\n\t\t/// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Expression.Analyze\"]/*'/>\r\n\t\tinternal override Evaluation Analyze(Analyzer/*!*/ analyzer, ExInfoFromParent info)\r\n\t\t{\r\n\t\t\taccess = info.Access;\r\n\t\t\tfileNameEx = fileNameEx.Analyze(analyzer, ExInfoFromParent.DefaultExInfo).Literalize();\r\n\t\t\tanalyzer.AddCurrentRoutineProperty(RoutineProperties.ContainsInclude);\r\n\t\t\tanalyzer.CurrentScope = this.scope;\r\n\t\t\treturn new Evaluation(this);\r\n\t\t}\r\n\r\n\t\t/// <include file='Doc/Nodes.xml' path='doc/method[@name=\"Emit\"]/*'/>\r\n\t\tinternal override PhpTypeCode Emit(CodeGenerator/*!*/ codeGenerator)\r\n\t\t{\r\n\t\t\tPhpTypeCode result;\r\n\r\n\t\t\t// emits inclusion and Main() call:\r\n\t\t\tresult = EmitDynamicInclusion(codeGenerator);\r\n\r\n\t\t\t// return value conversion:\r\n\t\t\tcodeGenerator.EmitReturnValueHandling(this, false, ref result);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/BuiltInFunctions.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region IncludingEx\r\n\r\n    /// <summary>\r\n\t/// Inclusion expression (include, require, synthetic auto-inclusion nodes).\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class IncludingEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Inclusion; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// An argument of the inclusion.\r\n\t\t/// </summary>\r\n        public Expression/*!*/ Target { get { return fileNameEx; } set { fileNameEx = value; } }\r\n\t\tprivate Expression/*!*/ fileNameEx;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A type of an inclusion (include, include-once, ...).\r\n\t\t/// </summary>\r\n\t\tpublic InclusionTypes InclusionType { get { return inclusionType; } }\r\n\t\tprivate InclusionTypes inclusionType;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the inclusion is conditional.\r\n\t\t/// </summary>\r\n\t\tpublic bool IsConditional { get { return isConditional; } }\r\n\t\tprivate bool isConditional;\r\n\r\n\t\tpublic Scope Scope { get { return scope; } }\r\n\t\tprivate Scope scope;\r\n\r\n\t\tpublic SourceUnit/*!*/ SourceUnit { get { return sourceUnit; } }\r\n\t\tprivate SourceUnit/*!*/ sourceUnit;\r\n\r\n\t\tpublic IncludingEx(SourceUnit/*!*/ sourceUnit, Scope scope, bool isConditional, Text.Span span,\r\n\t\t\tInclusionTypes inclusionType, Expression/*!*/ fileName)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(fileName != null);\r\n\r\n\t\t\tthis.inclusionType = inclusionType;\r\n\t\t\tthis.fileNameEx = fileName;\r\n\t\t\tthis.scope = scope;\r\n\t\t\tthis.isConditional = isConditional;\r\n\t\t\tthis.sourceUnit = sourceUnit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIncludingEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IssetEx\r\n\r\n\t/// <summary>\r\n\t/// Represents <c>isset</c> construct.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class IssetEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Isset; } }\r\n\r\n\t\tprivate readonly List<VariableUse>/*!*/ varList;\r\n        /// <summary>List of variables to test</summary>\r\n        public List<VariableUse>/*!*/ VarList { get { return varList; } }\r\n\r\n\t\tpublic IssetEx(Text.Span span, List<VariableUse>/*!*/ varList)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(varList != null && varList.Count > 0);\r\n\t\t\tthis.varList = varList;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIssetEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region EmptyEx\r\n\r\n\t/// <summary>\r\n\t/// Represents <c>empty</c> construct.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class EmptyEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Empty; } }\r\n\r\n        /// <summary>\r\n        /// Expression to be checked for emptiness.\r\n        /// </summary>\r\n        public Expression/*!*/Expression { get { return this.expression; } set { this.expression = value; } }\r\n        private Expression/*!*/expression;\r\n        \r\n        public EmptyEx(Text.Span p, Expression expression)\r\n\t\t\t: base(p)\r\n\t\t{\r\n            if (expression == null)\r\n                throw new ArgumentNullException(\"expression\");\r\n\r\n            this.expression = expression;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitEmptyEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region EvalEx, AssertEx\r\n\r\n\t/// <summary>\r\n\t/// Represents <c>eval</c> construct.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class EvalEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Eval; } }\r\n\r\n\t\t/// <summary>Expression containing source code to be evaluated.</summary>\r\n        public Expression /*!*/ Code { get { return code; } set { code = value; } }\r\n\r\n        /// <summary>\r\n        /// Expression containing source code to be evaluated.\r\n        /// </summary>\r\n        private Expression/*!*/ code;\r\n        \r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a node representing an eval or assert constructs.\r\n\t\t/// </summary>\r\n        /// <param name=\"span\">Position.</param>\r\n\t\t/// <param name=\"code\">Source code expression.</param>\r\n\t\tpublic EvalEx(Text.Span span, Expression/*!*/ code)\r\n            : base(span)\r\n\t\t{\r\n            this.code = code;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitEvalEx(this);\r\n        }\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Meta language element used for assert() function call analysis.\r\n    /// </summary>\r\n    [Serializable]\r\n    internal sealed class AssertEx : Expression\r\n    {\r\n        public override Operations Operation { get { return Operations.Eval; } }\r\n\r\n        /// <summary>Expression containing source code to be evaluated.</summary>\r\n        public Expression /*!*/ CodeEx { get; internal set; }\r\n\r\n        ///// <summary>Description para,eter.</summary>\r\n        //public Expression DescriptionEx { get; internal set; }\r\n\r\n        public AssertEx(Text.Span span, CallSignature callsignature)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(callsignature.Parameters.Any());\r\n            Debug.Assert(callsignature.GenericParams.Empty());\r\n\r\n            this.CodeEx = callsignature.Parameters[0].Expression;\r\n            //this.DescriptionEx = description;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            // note: should not be used\r\n            visitor.VisitElement(this.CodeEx);\r\n            //visitor.VisitElement(this.DescriptionEx);\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region ExitEx\r\n\r\n\t/// <summary>\r\n\t/// Represents <c>exit</c> expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ExitEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Exit; } }\r\n\r\n\t\t/// <summary>Die (exit) expression. Can be null.</summary>\r\n        public Expression ResulExpr { get { return resultExpr; } set { resultExpr = value; } }\r\n        private Expression resultExpr; //can be null\r\n        \r\n\t\tpublic ExitEx(Text.Span span, Expression resultExpr)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tthis.resultExpr = resultExpr;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitExitEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/CallSignature.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region ActualParam\r\n\r\n    [Serializable]\r\n\tpublic sealed class ActualParam : LangElement\r\n\t{\r\n        [Flags]\r\n        public enum Flags\r\n        {\r\n            Default = 0,\r\n            IsByRef = 1,\r\n            IsVariadic = 2,\r\n        }\r\n\r\n\t\tpublic Expression/*!*/ Expression { get { return _expression; } }\r\n\t\tinternal Expression/*!*/_expression;\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the parameter is prefixed by <c>&amp;</c> character.\r\n        /// </summary>\r\n        public bool Ampersand { get { return (_flags & Flags.IsByRef) != 0; } }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the parameter is passed with <c>...</c> prefix and so it has to be unpacked before passing to the function call.\r\n        /// </summary>\r\n        public bool IsVariadic { get { return (_flags & Flags.IsVariadic) != 0; } }\r\n        \r\n        /// <summary>\r\n        /// Flags describing use of the parameter.\r\n        /// </summary>\r\n        private Flags _flags;\r\n\r\n        public ActualParam(Text.Span p, Expression param)\r\n            : this(p, param, Flags.Default)\r\n        { }\r\n\r\n        public ActualParam(Text.Span p, Expression param, Flags flags)\r\n\t\t\t: base(p)\r\n\t\t{\r\n\t\t\tDebug.Assert(param != null);\r\n\t\t\t_expression = param;\r\n            _flags = flags;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitActualParam(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region NamedActualParam\r\n\r\n    [Serializable]\r\n    public sealed class NamedActualParam : LangElement\r\n\t{\r\n\t\tpublic Expression/*!*/ Expression { get { return expression; } }\r\n\t\tinternal Expression/*!*/ expression;\r\n\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate VariableName name;\r\n\r\n        public NamedActualParam(Text.Span span, string name, Expression/*!*/ expression)\r\n            : base(span)\r\n        {\r\n            this.name = new VariableName(name);\r\n            this.expression = expression;\r\n        }\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitNamedActualParam(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region CallSignature\r\n\r\n    [Serializable]\r\n    public sealed class CallSignature : AstNode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// List of actual parameters (<see cref=\"ActualParam\"/> nodes).\r\n\t\t/// </summary>\t\r\n\t\tpublic ActualParam[]/*!*/ Parameters { get { return parameters; } }\r\n\t\tprivate readonly ActualParam[]/*!*/ parameters;\r\n\r\n\t\t/// <summary>\r\n\t\t/// List of generic parameters.\r\n\t\t/// </summary>\r\n        public TypeRef[]/*!*/ GenericParams\r\n        {\r\n            get { return this.GetProperty<TypeRef[]>() ?? EmptyArray<TypeRef>.Instance; }\r\n            set\r\n            {\r\n                if (value.Any())\r\n                    this.SetProperty<TypeRef[]>(value);\r\n                else\r\n                    this.Properties.RemoveProperty<TypeRef[]>();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize new instance of <see cref=\"CallSignature\"/>.\r\n        /// </summary>\r\n        /// <param name=\"parameters\">List of parameters.</param>\r\n        public CallSignature(IList<ActualParam> parameters)\r\n            : this(parameters, null)\r\n        {\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Initialize new instance of <see cref=\"CallSignature\"/>.\r\n        /// </summary>\r\n        /// <param name=\"parameters\">List of parameters.</param>\r\n        /// <param name=\"genericParams\">List of type parameters for generics.</param>\r\n        public CallSignature(IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n\t\t{\r\n\t\t\tthis.parameters = parameters.AsArray();\r\n            this.GenericParams = genericParams.AsArray();\r\n\t\t}        \r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/ConcatEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    /// <summary>\r\n    /// Represents a concatenation expression (dot PHP operator).\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class ConcatEx : Expression\r\n    {\r\n        public override Operations Operation { get { return Operations.ConcatN; } }\r\n\r\n        public Expression[]/*!*/ Expressions { get { return this.expressions; } internal set { this.expressions = value; } }\r\n        private Expression[]/*!*/ expressions;\r\n\r\n        /// <summary>\r\n        /// Initialize the ConcatEx AST node and optimize the subtree if possible. Look for child expressions and chain possible concatenations. This prevents StackOverflowException in case of huge concatenation expressions.\r\n        /// </summary>\r\n        /// <param name=\"span\"></param>\r\n        /// <param name=\"expressions\">List of expressions to concatenate.</param>\r\n        /// <remarks>This method tries to propagate child concatenations and chain them.</remarks>\r\n        public ConcatEx(Text.Span span, IList<Expression>/*!*/ expressions)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(expressions != null);\r\n            this.expressions = expressions.AsArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitConcatEx(this);\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/ConstantUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region ConstantUse\r\n\r\n\t/// <summary>\r\n\t/// Base class for constant uses.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class ConstantUse : Expression\r\n\t{\r\n\t\tpublic ConstantUse(Text.Span span)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GlobalConstUse\r\n\r\n\t/// <summary>\r\n\t/// Global constant use (constants defined by <c>define</c> function).\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class GlobalConstUse : ConstantUse\r\n\t{\r\n        public override Operations Operation { get { return Operations.GlobalConstUse; } }\r\n\r\n\t\tpublic QualifiedName Name { get { return name; } }\r\n\t\tprivate QualifiedName name;\r\n\r\n        /// <summary>\r\n        /// Name used when the <see cref=\"Name\"/> is not found. Used when reading global constant in a namespace context.\r\n        /// </summary>\r\n        internal QualifiedName? FallbackName { get { return fallbackName; } }\r\n        private QualifiedName? fallbackName;\r\n\r\n\t\tpublic GlobalConstUse(Text.Span span, QualifiedName name, QualifiedName? fallbackName)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n            this.fallbackName = fallbackName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGlobalConstUse(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ClassConstUse\r\n\r\n\t/// <summary>\r\n\t/// Class constant use.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public class ClassConstUse : ConstantUse\r\n\t{\r\n\t\tpublic override Operations Operation { get { return Operations.ClassConstUse; } }\r\n\r\n        /// <summary>\r\n        /// Class name. May have an empty <see cref=\"Name\"/> if the class is referenced indirectly.\r\n        /// </summary>\r\n        public GenericQualifiedName ClassName { get { return this.typeRef.GenericQualifiedName; } }\r\n\r\n        /// <summary>\r\n        /// Class type reference.\r\n        /// </summary>\r\n        public TypeRef/*!*/TypeRef { get { return this.typeRef; } }\r\n        private readonly TypeRef/*!*/typeRef;\r\n        \r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate readonly VariableName name;\r\n\r\n        /// <summary>\r\n        /// Position of <see cref=\"Name\"/> part of the constant use.\r\n        /// </summary>\r\n        public Text.Span NamePosition { get; private set; }\r\n\r\n        public ClassConstUse(Text.Span span, GenericQualifiedName className, Text.Span classNamePosition, string/*!*/ name, Text.Span namePosition)\r\n            : this(span, DirectTypeRef.FromGenericQualifiedName(classNamePosition, className), name, namePosition)\r\n\t\t{\r\n\t\t}\r\n\r\n        public ClassConstUse(Text.Span span, TypeRef/*!*/typeRef, string/*!*/ name, Text.Span namePosition)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(typeRef != null);\r\n            Debug.Assert(!string.IsNullOrEmpty(name));\r\n\r\n            this.typeRef = typeRef;\r\n\t\t\tthis.name = new VariableName(name);\r\n            this.NamePosition = namePosition;\r\n        }\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitClassConstUse(this);\r\n        }\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Pseudo class constant use.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class PseudoClassConstUse : ClassConstUse\r\n    {\r\n        /// <summary>\r\n        /// Possible types of pseudo class constant.\r\n        /// </summary>\r\n        public enum Types\r\n        {\r\n            Class\r\n        }\r\n\r\n        /// <summary>Type of pseudoconstant</summary>\r\n        public Types Type { get { return consttype; } }\r\n        private Types consttype;\r\n\r\n        public PseudoClassConstUse(Text.Span span, GenericQualifiedName className, Text.Span classNamePosition, Types type, Text.Span namePosition)\r\n            : this(span, DirectTypeRef.FromGenericQualifiedName(classNamePosition, className), type, namePosition)\r\n\t\t{\r\n\t\t}\r\n\r\n        public PseudoClassConstUse(Text.Span span, TypeRef/*!*/typeRef, Types type, Text.Span namePosition)\r\n            : base(span, typeRef, type.ToString().ToLowerInvariant(), namePosition)\r\n        {\r\n            this.consttype = type;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitPseudoClassConstUse(this);\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n    #region PseudoConstUse\r\n\r\n    /// <summary>\r\n\t/// Pseudo-constant use (PHP keywords: __LINE__, __FILE__, __DIR__, __FUNCTION__, __METHOD__, __CLASS__, __TRAIT__, __NAMESPACE__)\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class PseudoConstUse : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.PseudoConstUse; } }\r\n\r\n\t\tpublic enum Types { Line, File, Class, Trait, Function, Method, Namespace, Dir }\r\n\r\n\t\tprivate Types type;\r\n        /// <summary>Type of pseudoconstant</summary>\r\n        public Types Type { get { return type; } }\r\n\r\n\t\tpublic PseudoConstUse(Text.Span span, Types type)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.type = type;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitPseudoConstUse(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/CustomAttributes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Linq;\r\nusing PHP.Core.Parsers;\r\nusing System.Reflection.Emit;\r\nusing System.Reflection;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    [Flags]\r\n    public enum PhpAttributeTargets\r\n    {\r\n        Assembly = 1,\r\n        Function = 2,\r\n        Method = 4,\r\n        Class = 8,\r\n        Interface = 16,\r\n        Property = 32,\r\n        Constant = 64,\r\n        Parameter = 128,\r\n        ReturnValue = 256,\r\n        GenericParameter = 512,\r\n\r\n        Routines = Function | Method,\r\n        Types = Class | Interface,\r\n        ClassMembers = Method | Property | Constant,\r\n\r\n        All = Assembly | Function | Method | Class | Interface | Property | Constant | Parameter | ReturnValue | GenericParameter\r\n    }\r\n\r\n    public enum SpecialAttributes\r\n    {\r\n        AttributeUsage,\r\n        AppStatic,\r\n        Export,\r\n        Out\r\n    }\r\n\r\n    #region CustomAttributes\r\n\r\n    [Serializable]\r\n    public sealed class CustomAttributes : AstNode\r\n    {\r\n        public List<CustomAttribute> Attributes { get { return attributes; } }\r\n        private List<CustomAttribute> attributes;\r\n\r\n        /// <summary>\r\n        /// Creates a set of custom attributes.\r\n        /// </summary>\r\n        public CustomAttributes(List<CustomAttribute> attributes)\r\n        {\r\n            this.attributes = attributes;\r\n        }\r\n\r\n        internal void Merge(CustomAttributes other)\r\n        {\r\n            if (other == null || other.attributes == null)\r\n                return;\r\n\r\n            if (attributes == null || attributes.Count == 0)\r\n            {\r\n                attributes = other.attributes;\r\n            }\r\n            else\r\n            {\r\n                attributes.AddRange(other.attributes);\r\n            }\r\n\r\n            other.attributes = null;\r\n        }\r\n\r\n        internal static void Merge(AstNode node, CustomAttributes otherattributes)\r\n        {\r\n            if (otherattributes != null)\r\n            {\r\n                var attributes = node.GetCustomAttributes();\r\n                if (attributes == null)\r\n                    node.SetCustomAttributes(attributes = new CustomAttributes(null));\r\n\r\n                attributes.Merge(otherattributes);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static class CustomAttributesHelper\r\n    {\r\n        public static CustomAttributes GetCustomAttributes(this IPropertyCollection/*!*/properties)\r\n        {\r\n            return properties[typeof(CustomAttributes)] as CustomAttributes;\r\n        }\r\n        public static void SetCustomAttributes(this IPropertyCollection/*!*/properties, CustomAttributes attributes)\r\n        {\r\n            if (attributes != null)\r\n                properties[typeof(CustomAttributes)] = attributes;\r\n            else\r\n                properties.RemoveProperty(typeof(CustomAttributes));\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region CustomAttribute\r\n\r\n    [Serializable]\r\n    public sealed class CustomAttribute : LangElement\r\n    {\r\n        #region Nested Types: TargetSelectors\r\n\r\n        /// <summary>\r\n        /// Available target selectors. Lowercased names are reported to the user.\r\n        /// The mapping to the <see cref=\"AttributeTargets\"/> is used for correct usage checking.\r\n        /// </summary>\r\n        public enum TargetSelectors\r\n        {\r\n            Default = AttributeTargets.All,\r\n            Return = AttributeTargets.ReturnValue,\r\n            Assembly = AttributeTargets.Assembly,\r\n            Module = AttributeTargets.Module\r\n        }\r\n\r\n        #endregion\r\n\r\n        public TargetSelectors TargetSelector { get { return targetSelector; } internal /* friend Parser */ set { targetSelector = value; } }\r\n        private TargetSelectors targetSelector;\r\n\r\n        public QualifiedName QualifiedName { get { return qualifiedName; } }\r\n        private QualifiedName qualifiedName;\r\n\r\n        public CallSignature CallSignature { get { return callSignature; } }\r\n        private CallSignature callSignature;\r\n\r\n        public List<NamedActualParam>/*!*/ NamedParameters { get { return namedParameters; } }\r\n        private List<NamedActualParam>/*!*/ namedParameters;\r\n\r\n        public CustomAttribute(Text.Span span, QualifiedName qualifiedName, List<ActualParam>/*!*/ parameters,\r\n                List<NamedActualParam>/*!*/ namedParameters)\r\n            : base(span)\r\n        {\r\n            this.qualifiedName = qualifiedName;\r\n            this.namedParameters = namedParameters;\r\n            this.callSignature = new CallSignature(parameters, TypeRef.EmptyList);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitCustomAttribute(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/DirectVariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Direct variable use - a variable or a field accessed by an identifier.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class DirectVarUse : SimpleVarUse\r\n\t{\r\n        public override Operations Operation { get { return Operations.DirectVarUse; } }\r\n\r\n\t\tpublic VariableName VarName { get { return varName; } set { varName = value; } }\r\n\t\tprivate VariableName varName;\r\n\r\n\t\tpublic DirectVarUse(Text.Span span, VariableName varName)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tthis.varName = varName;\r\n\t\t}\r\n\r\n\t\tpublic DirectVarUse(Text.Span span, string/*!*/ varName)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tthis.varName = new VariableName(varName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDirectVarUse(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/EchoStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents an <c>echo</c> statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class EchoStmt : Statement\r\n\t{\r\n\t\t/// <summary>Array of parameters - Expressions.</summary>\r\n        public Expression[] /*!*/ Parameters { get { return parameters; } }\r\n        private Expression[]/*!*/ parameters;\r\n        \r\n        /// <summary>\r\n        /// Gets value indicating whether this <see cref=\"EchoStmt\"/> represents HTML code.\r\n        /// </summary>\r\n        public bool IsHtmlCode { get { return isHtmlCode; } }\r\n        private readonly bool isHtmlCode;\r\n\r\n\t\tpublic EchoStmt(Text.Span span, IList<Expression>/*!*/ parameters)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(parameters != null);\r\n\t\t\tthis.parameters = parameters.AsArray();\r\n            this.isHtmlCode = false;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initializes new echo statement as a representation of HTML code.\r\n        /// </summary>\r\n        public EchoStmt(Text.Span span, string htmlCode)\r\n            : base(span)\r\n        {\r\n            this.parameters = new Expression[] { new StringLiteral(span, htmlCode) };\r\n            this.isHtmlCode = true;\r\n        }\r\n\r\n\t\tinternal override bool SkipInPureGlobalCode()\r\n\t\t{\r\n\t\t\tStringLiteral literal;\r\n\t\t\tif (parameters.Length == 1 && (literal = parameters[0] as StringLiteral) != null)\r\n\t\t\t{\r\n\t\t\t\treturn StringUtils.IsWhitespace((string)literal.Value);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitEchoStmt(this);\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/Expression.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.AST;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region enum Operations\r\n\r\n\tpublic enum Operations\r\n\t{\r\n\t\t// unary ops:\r\n\t\tPlus,\r\n\t\tMinus,\r\n\t\tLogicNegation,\r\n\t\tBitNegation,\r\n\t\tAtSign,\r\n\t\tPrint,\r\n\t\tClone,\r\n\r\n\t\t// casts:\r\n\t\tBoolCast,\r\n\t\tInt8Cast,\r\n\t\tInt16Cast,\r\n\t\tInt32Cast,\r\n\t\tInt64Cast,\r\n\t\tUInt8Cast,\r\n\t\tUInt16Cast,\r\n\t\tUInt32Cast,\r\n\t\tUInt64Cast,\r\n\t\tDoubleCast,\r\n\t\tFloatCast,\r\n\t\tDecimalCast,\r\n\t\tStringCast,\r\n        BinaryCast,\r\n\t\tUnicodeCast,\r\n\t\tObjectCast,\r\n\t\tArrayCast,\r\n\t\tUnsetCast,\r\n\r\n\t\t// binary ops:\r\n\t\tXor, Or, And,\r\n\t\tBitOr, BitXor, BitAnd,\r\n\t\tEqual, NotEqual,\r\n\t\tIdentical, NotIdentical,\r\n\t\tLessThan, GreaterThan, LessThanOrEqual, GreaterThanOrEqual,\r\n\t\tShiftLeft, ShiftRight,\r\n\t\tAdd, Sub, Mul, Div, Mod, Pow,\r\n\t\tConcat,\r\n\r\n\t\t// n-ary ops:\r\n\t\tConcatN,\r\n\t\tList,\r\n\t\tConditional,\r\n\r\n\t\t// assignments:\r\n\t\tAssignRef,\r\n\t\tAssignValue,\r\n\t\tAssignAdd,\r\n\t\tAssignSub,\r\n\t\tAssignMul,\r\n        AssignPow,\r\n\t\tAssignDiv,\r\n\t\tAssignMod,\r\n\t\tAssignAnd,\r\n\t\tAssignOr,\r\n\t\tAssignXor,\r\n\t\tAssignShiftLeft,\r\n\t\tAssignShiftRight,\r\n\t\tAssignAppend,\r\n\t\tAssignPrepend,\r\n\r\n\t\t// constants, variables, fields, items:\r\n\t\tGlobalConstUse,\r\n\t\tClassConstUse,\r\n\t\tPseudoConstUse,\r\n\t\tDirectVarUse,\r\n\t\tIndirectVarUse,\r\n\t\tDirectStaticFieldUse,\r\n\t\tIndirectStaticFieldUse,\r\n\t\tItemUse,\r\n\r\n\t\t// literals:\r\n\t\tNullLiteral,\r\n\t\tBoolLiteral,\r\n\t\tIntLiteral,\r\n\t\tLongIntLiteral,\r\n\t\tDoubleLiteral,\r\n\t\tStringLiteral,\r\n\t\tBinaryStringLiteral,\r\n\r\n\t\t// routine calls:\r\n\t\tDirectCall,\r\n\t\tIndirectCall,\r\n\t\tDirectStaticCall,\r\n\t\tIndirectStaticCall,\r\n\r\n\t\t// instances:\r\n\t\tNew,\r\n\t\tArray,\r\n\t\tInstanceOf,\r\n\t\tTypeOf,\r\n\r\n\t\t// built-in functions:\r\n\t\tInclusion,\r\n\t\tIsset,\r\n\t\tEmpty,\r\n\t\tEval,\r\n\r\n\t\t// others:\r\n\t\tExit,\r\n\t\tShellCommand,\r\n\t\tIncDec,\r\n        Yield,\r\n\r\n        // lambda function:\r\n        Closure,\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Expression\r\n\r\n\t/// <summary>\r\n\t/// Abstract base class for expressions.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class Expression : LangElement\r\n\t{\r\n\t\tpublic abstract Operations Operation { get; }\r\n\r\n        protected Expression(Text.Span span) : base(span) { }\r\n\r\n        /// <summary>\r\n        /// Internal type information determined during type analysis.\r\n        /// </summary>\r\n        public ulong/*A*/TypeInfoValue { get; set; }\r\n\r\n\t\t/// <summary>\r\n        /// Whether the expression is allowed to be passed by reference to a routine.\r\n        /// </summary>\r\n        internal virtual bool AllowsPassByReference { get { return false; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether to mark sequence point when the expression appears in an expression statement.\r\n\t\t/// </summary>\r\n\t\tinternal virtual bool DoMarkSequencePoint { get { return true; } }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ConstantDecl\r\n\r\n    [Serializable]\r\n    public abstract class ConstantDecl : LangElement\r\n\t{\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprotected VariableName name;\r\n\r\n        public Expression/*!*/ Initializer { get { return initializer; } internal set { initializer = value; } }\r\n\t\tprivate Expression/*!*/ initializer;\r\n\r\n\t\tpublic ConstantDecl(Text.Span span, string/*!*/ name, Expression/*!*/ initializer)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.name = new VariableName(name);\r\n\t\t\tthis.initializer = initializer;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region VarLikeConstructUse\r\n\r\n\t/// <summary>\r\n\t/// Common abstract base class representing all constructs that behave like a variable (L-value).\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class VarLikeConstructUse : Expression\r\n\t{\r\n        public VarLikeConstructUse IsMemberOf { get { return isMemberOf; } set { isMemberOf = value; } }\r\n        protected VarLikeConstructUse isMemberOf;\r\n            \r\n\t\tinternal override bool AllowsPassByReference { get { return true; } }\r\n\r\n\t\tprotected VarLikeConstructUse(Text.Span p) : base(p) { }\r\n\t}\r\n\r\n\t#endregion\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/FieldUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region StaticFieldUse\r\n\r\n    /// <summary>\r\n    /// Base class for static field uses.\r\n    /// </summary>\r\n    [Serializable]\r\n    public abstract class StaticFieldUse : VariableUse\r\n    {\r\n        /// <summary>Name of type which's field is being accessed</summary>\r\n        public GenericQualifiedName TypeName { get { return typeRef.GenericQualifiedName; } }\r\n\r\n        /// <summary>Position of <see cref=\"TypeName\"/>.</summary>\r\n        public Text.Span TypeNameSpan { get { return this.typeRef.Span; } }\r\n\r\n        /// <summary>Position of the field name.</summary>\r\n        public Text.Span NameSpan { get; private set; }\r\n\r\n        public TypeRef TypeRef { get { return typeRef; } }\r\n        protected TypeRef typeRef;\r\n\r\n        public StaticFieldUse(Text.Span span, Text.Span nameSpan, GenericQualifiedName typeName, Text.Span typeNamePosition)\r\n            : this(span, nameSpan, DirectTypeRef.FromGenericQualifiedName(typeNamePosition, typeName))\r\n        {\r\n        }\r\n\r\n        public StaticFieldUse(Text.Span span, Text.Span nameSpan, TypeRef typeRef)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(typeRef != null);\r\n\r\n            this.typeRef = typeRef;\r\n            this.NameSpan = nameSpan;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region DirectStFldUse\r\n\r\n    /// <summary>\r\n    /// Direct static field uses (a static field accessed by field identifier).\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class DirectStFldUse : StaticFieldUse\r\n    {\r\n        public override Operations Operation { get { return Operations.DirectStaticFieldUse; } }\r\n\r\n        private VariableName propertyName;\r\n        /// <summary>Name of static field beign accessed</summary>\r\n        public VariableName PropertyName { get { return propertyName; } }\r\n\r\n        public DirectStFldUse(Text.Span span, TypeRef typeRef, VariableName propertyName, Text.Span propertyNamePosition)\r\n            : base(span, propertyNamePosition, typeRef)\r\n        {\r\n            this.propertyName = propertyName;\r\n        }\r\n\r\n        public DirectStFldUse(Text.Span span, GenericQualifiedName qualifiedName, Text.Span qualifiedNameSpan, VariableName propertyName, Text.Span propertyNameSpan)\r\n            : this(span, DirectTypeRef.FromGenericQualifiedName(qualifiedNameSpan, qualifiedName), propertyName, propertyNameSpan)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDirectStFldUse(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IndirectStFldUse\r\n\r\n    /// <summary>\r\n    /// Indirect static field used - a static field accessed by run-time evaluated name.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class IndirectStFldUse : StaticFieldUse\r\n    {\r\n        public override Operations Operation { get { return Operations.IndirectStaticFieldUse; } }\r\n\r\n        /// <summary>Expression that produces name of the field</summary>\r\n        public Expression/*!*/ FieldNameExpr { get { return fieldNameExpr; } internal set { fieldNameExpr = value; } }\r\n        private Expression/*!*/ fieldNameExpr;\r\n        \r\n        public IndirectStFldUse(Text.Span span, TypeRef typeRef, Expression/*!*/ fieldNameExpr)\r\n            : base(span, fieldNameExpr.Span, typeRef)\r\n        {\r\n            this.fieldNameExpr = fieldNameExpr;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIndirectStFldUse(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/FunctionCall.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region FunctionCall\r\n\r\n    [Serializable]\r\n\tpublic abstract class FunctionCall : VarLikeConstructUse\r\n\t{\r\n\t\tprotected CallSignature callSignature;\r\n        /// <summary>GetUserEntryPoint calling signature</summary>\r\n        public CallSignature CallSignature { get { return callSignature; } internal set { callSignature = value; } }\r\n\r\n\t\t/// <summary>\r\n        /// Position of called function name in source code.\r\n        /// </summary>\r\n        public Text.Span NameSpan { get; protected set; }\r\n\r\n        public FunctionCall(Text.Span span, Text.Span nameSpan, IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(parameters != null);\r\n\r\n\t\t\tthis.callSignature = new CallSignature(parameters, genericParams);\r\n            this.NameSpan = nameSpan;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DirectFcnCall\r\n\r\n    [Serializable]\r\n    public sealed class DirectFcnCall : FunctionCall\r\n\t{\r\n        public override Operations Operation { get { return Operations.DirectCall; } }\r\n\r\n        /// <summary>\r\n\t\t/// Simple name for methods.\r\n\t\t/// </summary>\r\n\t\tprivate QualifiedName qualifiedName;\r\n        private QualifiedName? fallbackQualifiedName;\r\n        /// <summary>Simple name for methods.</summary>\r\n        public QualifiedName QualifiedName { get { return qualifiedName; } }\r\n        public QualifiedName? FallbackQualifiedName { get { return fallbackQualifiedName; } }\r\n\r\n        public DirectFcnCall(Text.Span span,\r\n            QualifiedName qualifiedName, QualifiedName? fallbackQualifiedName, Text.Span qualifiedNameSpan,\r\n            IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : base(span, qualifiedNameSpan, parameters, genericParams)\r\n\t\t{\r\n            this.qualifiedName = qualifiedName;\r\n            this.fallbackQualifiedName = fallbackQualifiedName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDirectFcnCall(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IndirectFcnCall\r\n\r\n    [Serializable]\r\n    public sealed class IndirectFcnCall : FunctionCall\r\n\t{\r\n        public override Operations Operation { get { return Operations.IndirectCall; } }\r\n\r\n\t\tpublic Expression/*!*/ NameExpr { get { return nameExpr; } }\r\n\t\tinternal Expression/*!*/ nameExpr;\r\n\r\n\t\tpublic IndirectFcnCall(Text.Span p, Expression/*!*/ nameExpr, IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : base(p, nameExpr.Span, parameters, genericParams)\r\n\t\t{\r\n\t\t\tthis.nameExpr = nameExpr;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIndirectFcnCall(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region StaticMtdCall\r\n\r\n    [Serializable]\r\n\tpublic abstract class StaticMtdCall : FunctionCall\r\n\t{\r\n        public GenericQualifiedName ClassName { get { return typeRef.GenericQualifiedName; } }\r\n        protected readonly TypeRef/*!*/typeRef;\r\n\r\n        /// <summary>\r\n        /// Position of <see cref=\"ClassName\"/> in source code.\r\n        /// </summary>\r\n        public Text.Span ClassNamePosition { get { return this.typeRef.Span; } }\r\n\r\n        public TypeRef/*!*/ TypeRef { get { return this.typeRef; } }\r\n\r\n        public StaticMtdCall(Text.Span span, Text.Span methodNamePosition, GenericQualifiedName className, Text.Span classNamePosition, IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : this(span, methodNamePosition, DirectTypeRef.FromGenericQualifiedName(classNamePosition, className), parameters, genericParams)\r\n\t\t{\t\r\n\t\t}\r\n\r\n        public StaticMtdCall(Text.Span span, Text.Span methodNamePosition, TypeRef typeRef, IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : base(span, methodNamePosition, parameters, genericParams)\r\n        {\r\n            Debug.Assert(typeRef != null);\r\n\r\n            this.typeRef = typeRef;\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DirectStMtdCall\r\n\r\n    [Serializable]\r\n\tpublic sealed class DirectStMtdCall : StaticMtdCall\r\n\t{\r\n        public override Operations Operation { get { return Operations.DirectStaticCall; } }\r\n\r\n\t\tprivate Name methodName;\r\n        public Name MethodName { get { return methodName; } }\r\n\t\t\r\n\t\tpublic DirectStMtdCall(Text.Span span, ClassConstUse/*!*/ classConstant,\r\n            IList<ActualParam>/*!*/ parameters, IList<TypeRef>/*!*/ genericParams)\r\n\t\t\t: base(span, classConstant.NamePosition, classConstant.TypeRef, parameters, genericParams)\r\n\t\t{\r\n\t\t\tthis.methodName = new Name(classConstant.Name.Value);\r\n\t\t}\r\n\r\n        public DirectStMtdCall(Text.Span span, GenericQualifiedName className, Text.Span classNamePosition,\r\n            Name methodName, Text.Span methodNamePosition, IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n\t\t\t: base(span, methodNamePosition, className, classNamePosition, parameters, genericParams)\r\n\t\t{\r\n\t\t\tthis.methodName = methodName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDirectStMtdCall(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IndirectStMtdCall\r\n\r\n    [Serializable]\r\n    public sealed class IndirectStMtdCall : StaticMtdCall\r\n\t{\r\n        public override Operations Operation { get { return Operations.IndirectStaticCall; } }\r\n\r\n\t\tprivate CompoundVarUse/*!*/ methodNameVar;\r\n        /// <summary>Expression that represents name of method</summary>\r\n        public CompoundVarUse/*!*/ MethodNameVar { get { return methodNameVar; } }\r\n\r\n\t\tpublic IndirectStMtdCall(Text.Span span,\r\n                                 GenericQualifiedName className, Text.Span classNamePosition, CompoundVarUse/*!*/ mtdNameVar,\r\n\t                             IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : base(span, mtdNameVar.Span, className, classNamePosition, parameters, genericParams)\r\n\t\t{\r\n\t\t\tthis.methodNameVar = mtdNameVar;\r\n\t\t}\r\n\r\n        public IndirectStMtdCall(Text.Span span,\r\n                                 TypeRef/*!*/typeRef, CompoundVarUse/*!*/ mtdNameVar,\r\n                                 IList<ActualParam> parameters, IList<TypeRef> genericParams)\r\n            : base(span, mtdNameVar.Span, typeRef, parameters, genericParams)\r\n        {\r\n            this.methodNameVar = mtdNameVar;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIndirectStMtdCall(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/FunctionDecl.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region FormalParam\r\n\r\n\t/// <summary>\r\n\t/// Represents a formal parameter definition.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class FormalParam : LangElement\r\n\t{\r\n        [Flags]\r\n        public enum Flags\r\n        {\r\n            Default = 0,\r\n            IsByRef = 1,\r\n            IsOut = 2,\r\n            IsVariadic = 4,\r\n        }\r\n\r\n        /// <summary>\r\n        /// Flags describing the parameter.\r\n        /// </summary>\r\n        private Flags _flags;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the argument.\r\n\t\t/// </summary>\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate VariableName name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the parameter is &amp;-modified.\r\n\t\t/// </summary>\r\n        public bool PassedByRef { get { return (_flags & Flags.IsByRef) != 0; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether the parameter is an out-parameter. Set by applying the [Out] attribute.\r\n\t\t/// </summary>\r\n        public bool IsOut\r\n        {\r\n            get { return (_flags & Flags.IsOut) != 0; }\r\n            internal set\r\n            {\r\n                if (value) _flags |= Flags.IsOut;\r\n                else _flags &= ~Flags.IsOut;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the parameter is variadic and so passed parameters will be packed into the array as passed as one parameter.\r\n        /// </summary>\r\n        public bool IsVariadic { get { return (_flags & Flags.IsVariadic) != 0; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initial value expression. Can be <B>null</B>.\r\n\t\t/// </summary>\r\n        public Expression InitValue { get { return initValue; } internal set { initValue = value; } }\r\n\t\tprivate Expression initValue;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Either <see cref=\"PrimitiveTypeName\"/>, <see cref=\"GenericQualifiedName\"/>, or <B>null</B>.\r\n\t\t/// </summary>\r\n        public object TypeHint { get { return typeHint; } }\r\n\t\tprivate object typeHint;\r\n\r\n        /// <summary>Position of <see cref=\"TypeHint\"/> if any.</summary>\r\n        public Text.Span TypeHintPosition { get; internal set; }\r\n\r\n\t\t/// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n        #region Construction\r\n\r\n        public FormalParam(Text.Span span, string/*!*/ name, object typeHint, Flags flags,\r\n\t\t\t\tExpression initValue, List<CustomAttribute> attributes)\r\n            : base(span)\r\n\t\t{\r\n            Debug.Assert(typeHint == null || typeHint is PrimitiveTypeName || typeHint is GenericQualifiedName);\r\n\r\n\t\t\tthis.name = new VariableName(name);\r\n\t\t\tthis.typeHint = typeHint;\r\n            this._flags = flags;\r\n\t\t\tthis.initValue = initValue;\r\n            if (attributes != null && attributes.Count != 0)\r\n                this.Attributes = new CustomAttributes(attributes);\r\n\r\n\t\t\tthis.TypeHintPosition = Text.Span.Invalid;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFormalParam(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Signature\r\n\r\n    [Serializable]\r\n    public struct Signature\r\n\t{\r\n\t\tpublic bool AliasReturn { get { return aliasReturn; } }\r\n\t\tprivate readonly bool aliasReturn;\r\n\r\n\t\tpublic FormalParam[]/*!*/ FormalParams { get { return formalParams; } }\r\n\t\tprivate readonly FormalParam[]/*!*/ formalParams;\r\n\r\n\t\tpublic Signature(bool aliasReturn, IList<FormalParam>/*!*/ formalParams)\r\n\t\t{\r\n\t\t\tthis.aliasReturn = aliasReturn;\r\n\t\t\tthis.formalParams = formalParams.AsArray();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region FunctionDecl\r\n\r\n\t/// <summary>\r\n\t/// Represents a function declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class FunctionDecl : Statement, IHasSourceUnit, IDeclarationElement\r\n\t{ \r\n\t\tinternal override bool IsDeclaration { get { return true; } }\r\n\r\n\t\tpublic Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\tpublic NamespaceDecl Namespace { get { return ns; } }\r\n\t\tprivate readonly NamespaceDecl ns;\r\n\r\n        public Signature Signature { get { return signature; } }\r\n        private readonly Signature signature;\r\n\r\n        public TypeSignature TypeSignature { get { return typeSignature; } }\r\n\t\tprivate readonly TypeSignature typeSignature;\r\n\r\n        public Statement[]/*!*/ Body { get { return body; } }\r\n        private readonly Statement[]/*!*/ body;\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the function is declared conditionally.\r\n        /// </summary>\r\n        public bool IsConditional { get; private set; }\r\n\r\n        /// <summary>\r\n        /// Gets function declaration attributes.\r\n        /// </summary>\r\n        public PhpMemberAttributes MemberAttributes { get; private set; }\r\n\r\n        internal Scope Scope { get; private set; }\r\n        public SourceUnit/*!*/ SourceUnit { get; private set; }\r\n        \r\n        /// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n        public Text.Span EntireDeclarationSpan { get { return entireDeclarationSpan; } }\r\n        private Text.Span entireDeclarationSpan;\r\n\r\n        public int HeadingEndPosition { get { return headingEndPosition; } }\r\n        private int headingEndPosition;\r\n\r\n        public int DeclarationBodyPosition { get { return declarationBodyPosition; } }\r\n        private int declarationBodyPosition;\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic FunctionDecl(SourceUnit/*!*/ sourceUnit,\r\n            Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition,\r\n\t\t\tbool isConditional, Scope scope, PhpMemberAttributes memberAttributes, string/*!*/ name, NamespaceDecl ns,\r\n\t\t\tbool aliasReturn, List<FormalParam>/*!*/ formalParams, List<FormalTypeParam>/*!*/ genericParams,\r\n\t\t\tIList<Statement>/*!*/ body, List<CustomAttribute> attributes)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericParams != null && name != null && formalParams != null && body != null);\r\n\r\n\t\t\tthis.name = new Name(name);\r\n\t\t\tthis.ns = ns;\r\n\t\t\tthis.signature = new Signature(aliasReturn, formalParams);\r\n\t\t\tthis.typeSignature = new TypeSignature(genericParams);\r\n\t\t\tif (attributes != null && attributes.Count != 0)\r\n                this.Attributes = new CustomAttributes(attributes);\r\n\t\t\tthis.body = body.AsArray();\r\n\t\t\tthis.entireDeclarationSpan = entireDeclarationPosition;\r\n            this.headingEndPosition = headingEndPosition;\r\n            this.declarationBodyPosition = declarationBodyPosition;\r\n            this.IsConditional = isConditional;\r\n            this.MemberAttributes = memberAttributes;\r\n            this.Scope = scope;\r\n            this.SourceUnit = sourceUnit;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFunctionDecl(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/GlobalCode.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Text;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region GlobalCode\r\n\r\n    /// <summary>\r\n    /// Represents a container for global statements.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// PHP source file can contain global code definition which is represented in AST \r\n    /// by GlobalCode node. Finally, it is emitted into Main() method of concrete PHPPage \r\n    /// class. The sample code below illustrates a part of PHP global code\r\n    /// </remarks>\r\n    [Serializable]\r\n    public sealed class GlobalCode : AstNode, IHasSourceUnit, IDeclarationElement\r\n    {\r\n        /// <summary>\r\n        /// Array of nodes representing statements in PHP global code\r\n        /// </summary>\r\n        public Statement[]/*!*/ Statements { get { return statements; } internal set { statements = value; } }\r\n        private Statement[]/*!*/ statements;\r\n\r\n        /// <summary>\r\n        /// Represented source unit.\r\n        /// </summary>\r\n        public SourceUnit/*!*/ SourceUnit { get { return sourceUnit; } }\r\n        private readonly SourceUnit/*!*/ sourceUnit;\r\n\r\n        public Span EntireDeclarationSpan { get { return new Text.Span(0, sourceUnit.LineBreaks.TextLength); } }\r\n\r\n        #region Constructors\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the GlobalCode class.\r\n        /// </summary>\r\n        public GlobalCode(IList<Statement>/*!*/ statements, SourceUnit/*!*/ sourceUnit)\r\n        {\r\n            Debug.Assert(statements != null && sourceUnit != null);\r\n\r\n            this.sourceUnit = sourceUnit;\r\n            this.statements = statements.AsArray();\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGlobalCode(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region NamespaceDecl\r\n\r\n    [Serializable]\r\n    public sealed class NamespaceDecl : Statement, IDeclarationElement\r\n    {\r\n        internal override bool IsDeclaration { get { return true; } }\r\n\r\n        /// <summary>\r\n        /// Whether the namespace was declared using PHP simple syntax.\r\n        /// </summary>\r\n        public readonly bool IsSimpleSyntax;\r\n\r\n        public QualifiedName QualifiedName { get { return this.qualifiedName; } }\r\n        private QualifiedName qualifiedName;\r\n\r\n        public Span EntireDeclarationSpan { get { return this.Span; } }\r\n\r\n        /// <summary>\r\n        /// Naming context defining aliases.\r\n        /// </summary>\r\n        public NamingContext/*!*/ Naming { get { return this.naming; } }\r\n        private readonly NamingContext naming;\r\n\r\n        public bool IsAnonymous { get { return this.isAnonymous; } }\r\n        private readonly bool isAnonymous;\r\n\r\n        public List<Statement>/*!*/ Statements\r\n        {\r\n            get { return this.statements; }\r\n            internal /* friend Parser */ set { this.statements = value; }\r\n        }\r\n        private List<Statement>/*!*/ statements;\r\n\r\n        #region Construction\r\n\r\n        public NamespaceDecl(Text.Span p)\r\n            : base(p)\r\n        {\r\n            this.isAnonymous = true;\r\n            this.qualifiedName = new QualifiedName(Core.Name.EmptyBaseName, Core.Name.EmptyNames);\r\n            this.IsSimpleSyntax = false;\r\n            this.naming = new NamingContext(null, null);\r\n        }\r\n\r\n        public NamespaceDecl(Text.Span p, List<string>/*!*/ names, bool simpleSyntax)\r\n            : base(p)\r\n        {\r\n            this.isAnonymous = false;\r\n            this.qualifiedName = new QualifiedName(names, false, true);\r\n            this.IsSimpleSyntax = simpleSyntax;\r\n            this.naming = new NamingContext(this.qualifiedName, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finish parsing of namespace, complete its position.\r\n        /// </summary>\r\n        /// <param name=\"p\"></param>\r\n        internal void UpdatePosition(Text.Span p)\r\n        {\r\n            this.Span = p;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitNamespaceDecl(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region GlobalConstDeclList, GlobalConstantDecl\r\n\r\n    [Serializable]\r\n    public sealed class GlobalConstDeclList : Statement, IDeclarationElement\r\n    {\r\n        /// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n        public List<GlobalConstantDecl>/*!*/ Constants { get { return constants; } }\r\n        private readonly List<GlobalConstantDecl>/*!*/ constants;\r\n\r\n        public Text.Span EntireDeclarationSpan\r\n        {\r\n            get { return this.Span; }\r\n        }\r\n\r\n        public GlobalConstDeclList(Text.Span span, List<GlobalConstantDecl>/*!*/ constants, List<CustomAttribute> attributes)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(constants != null);\r\n\r\n            this.constants = constants;\r\n            if (attributes != null && attributes.Count != 0)\r\n                this.Attributes = new CustomAttributes(attributes);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGlobalConstDeclList(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n    }\r\n\r\n    [Serializable]\r\n    public sealed class GlobalConstantDecl : ConstantDecl\r\n    {\r\n        /// <summary>\r\n        /// Namespace.\r\n        /// </summary>\r\n        public NamespaceDecl Namespace { get { return ns; } }\r\n        private NamespaceDecl ns;\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether this global constant is declared conditionally.\r\n        /// </summary>\r\n        public bool IsConditional { get; private set; }\r\n\r\n        /// <summary>\r\n        /// Scope.\r\n        /// </summary>\r\n        internal Scope Scope { get; private set; }\r\n\r\n        /// <summary>\r\n        /// Source unit.\r\n        /// </summary>\r\n        internal SourceUnit SourceUnit { get; private set; }\r\n\r\n        public GlobalConstantDecl(SourceUnit/*!*/ sourceUnit, Text.Span span, bool isConditional, Scope scope,\r\n            string/*!*/ name, NamespaceDecl ns, Expression/*!*/ initializer)\r\n            : base(span, name, initializer)\r\n        {\r\n            this.ns = ns;\r\n            this.IsConditional = IsConditional;\r\n            this.Scope = scope;\r\n            this.SourceUnit = sourceUnit;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGlobalConstantDecl(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/IfStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents an if-statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class IfStmt : Statement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// List of conditions including the if-conditions and the final else.\r\n\t\t/// </summary>\r\n\t\tprivate List<ConditionalStmt>/*!!*/ conditions;\r\n        public List<ConditionalStmt>/*!!*/ Conditions { get { return conditions; } internal set { conditions = value; } }\r\n\r\n\t\tpublic IfStmt(Text.Span span, List<ConditionalStmt>/*!!*/ conditions)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(conditions != null && conditions.Count > 0);\r\n\t\t\tDebug.Assert(conditions.All((x) => x != null));\r\n\t\t\tthis.conditions = conditions;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIfStmt(this);\r\n        }\r\n\t}\r\n\r\n    [Serializable]\r\n\tpublic sealed class ConditionalStmt : AstNode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Condition or a <B>null</B> reference for the case of \"else\" branch.\r\n\t\t/// </summary>\r\n\t\tpublic Expression Condition { get { return condition; } internal set { condition = value; } }\r\n\t\tprivate Expression condition;\r\n\r\n\t\tpublic Statement/*!*/ Statement { get { return statement; } internal set { statement = value; } }\r\n\t\tprivate Statement/*!*/ statement;\r\n\r\n        /// <summary>\r\n        /// Beginning of <see cref=\"ConditionalStmt\"/>.\r\n        /// </summary>\r\n        public readonly Text.Span Span;\r\n\r\n        public ConditionalStmt(Text.Span span, Expression condition, Statement/*!*/ statement)\r\n\t\t{\r\n            this.Span = span;\r\n\t\t\tthis.condition = condition;\r\n\t\t\tthis.statement = statement;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        internal void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitConditionalStmt(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/IncDecEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Post/pre increment/decrement expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class IncDecEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.IncDec; } }\r\n\r\n        [Flags]\r\n        private enum Flags : byte\r\n        {\r\n            /// <summary>\r\n            /// Indicates incrementation.\r\n            /// </summary>\r\n            incrementation = 1,\r\n\r\n            /// <summary>\r\n            /// Indicates post-incrementation or post-decrementation.\r\n            /// </summary>\r\n            post = 2,\r\n        }\r\n\r\n        private readonly Flags flags;\r\n\r\n        /// <summary>Indicates incrementation.</summary>\r\n        public bool Inc { get { return flags.HasFlag(Flags.incrementation); } }\r\n\t\t/// <summary>Indicates post-incrementation or post-decrementation</summary>\r\n        public bool Post { get { return flags.HasFlag(Flags.post); } }\r\n\r\n        private VariableUse/*!*/ variable;\r\n        /// <summary>Variable being incremented/decremented</summary>\r\n        public VariableUse /*!*/ Variable { get { return variable; } }\r\n\r\n\t\tpublic IncDecEx(Text.Span span, bool inc, bool post, VariableUse/*!*/ variable)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.variable = variable;\r\n\r\n            if (inc) this.flags |= Flags.incrementation;\r\n            if (post) this.flags |= Flags.post;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIncDecEx(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/IndirectVariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Indirect variable use - a variable or a field access by run-time evaluated name.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class IndirectVarUse : SimpleVarUse\r\n\t{\r\n        public override Operations Operation { get { return Operations.IndirectVarUse; } }\r\n\r\n\t\tpublic Expression VarNameEx { get { return varNameEx; } }\r\n\t\tinternal Expression varNameEx;\r\n\r\n\t\tpublic IndirectVarUse(Text.Span span, int levelOfIndirection, Expression varNameEx)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(levelOfIndirection > 0 && varNameEx != null);\r\n\r\n\t\t\tif (levelOfIndirection == 1)\r\n\t\t\t{\r\n\t\t\t\tthis.varNameEx = varNameEx;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                Text.Span varspan = new Text.Span(span.Start + 1, span.Length - 1);\r\n                this.varNameEx = new IndirectVarUse(varspan, --levelOfIndirection, varNameEx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIndirectVarUse(this);\r\n        }\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/ItemUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region ItemUse\r\n\r\n    /// <summary>\r\n\t/// Access to an item of a structured variable by [] PHP operator.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ItemUse : CompoundVarUse\r\n\t{\r\n        public override Operations Operation { get { return Operations.ItemUse; } }\r\n\r\n        /// <summary>\r\n        /// Whether this represents function array dereferencing.\r\n        /// </summary>\r\n        public bool IsFunctionArrayDereferencing { get { return this.functionArrayDereferencing; } }\r\n        private readonly bool functionArrayDereferencing = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Variable used as an array identifier.\r\n\t\t/// </summary>\r\n        public VarLikeConstructUse Array { get { return array; } set { array = value; } }\r\n        private VarLikeConstructUse/*!*/ array;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Expression used as an array index. \r\n\t\t/// A <B>null</B> reference means key-less array operator (write context only).\r\n\t\t/// </summary>\r\n        public Expression Index { get { return index; } internal set { index = value; } }\r\n\t\tprivate Expression index;\r\n\r\n        public ItemUse(Text.Span p, VarLikeConstructUse/*!*/ array, Expression index, bool functionArrayDereferencing = false)\r\n\t\t\t: base(p)\r\n\t\t{\r\n\t\t\tDebug.Assert(array != null);\r\n\r\n\t\t\tthis.array = array;\r\n\t\t\tthis.index = index;\r\n            this.functionArrayDereferencing = functionArrayDereferencing;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitItemUse(this);\r\n        }\r\n\t}\r\n\r\n    #endregion\r\n\r\n    #region StringLiteralDereferenceEx\r\n\r\n    /// <summary>\r\n    /// String literal dereferencing.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class StringLiteralDereferenceEx : Expression\r\n    {\r\n        public override Operations Operation\r\n        {\r\n            get { return Operations.ItemUse; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Expression representing the string value.\r\n        /// </summary>\r\n        public Expression/*!*/StringExpr { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Expression representing index in the string.\r\n        /// </summary>\r\n        public Expression/*!*/KeyExpr { get; internal set; }\r\n\r\n        public StringLiteralDereferenceEx(Text.Span span, Expression expr, Expression key)\r\n            : base(span)\r\n        {\r\n            this.StringExpr = expr;\r\n            this.KeyExpr = key;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitStringLiteralDereferenceEx(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/JumpStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak, and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region JumpStmt\r\n\r\n\t/// <summary>\r\n\t/// Represents a branching (jump) statement (return, continue, break). \r\n\t/// </summary>\r\n\t[Serializable]\r\n    public sealed class JumpStmt : Statement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Type of the statement.\r\n\t\t/// </summary>\r\n\t\tpublic enum Types { Return, Continue, Break };\r\n\r\n\t\tprivate Types type;\r\n        /// <summary>Type of current statement</summary>\r\n        public Types Type { get { return type; } }\r\n\r\n\t\t/// <summary>\r\n        /// In case of continue and break, it is number of loop statements to skip. Note that switch is considered to be a loop for this case\r\n        /// In case of return, it represents the returned expression.\r\n        /// Can be null.\r\n\t\t/// </summary>\r\n        public Expression Expression { get { return expr; } internal set { expr = value; } }\r\n\t\tprivate Expression expr; // can be null\r\n\r\n\t\tpublic JumpStmt(Text.Span span, Types type, Expression expr)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.type = type;\r\n\t\t\tthis.expr = expr;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitJumpStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region GotoStmt\r\n\r\n    [Serializable]\r\n    public sealed class GotoStmt : Statement\r\n\t{\r\n\t\t/// <summary>Label that is target of goto statement</summary>\r\n        public VariableName LabelName { get { return _labelName; } }\r\n        private VariableName _labelName;\r\n\r\n        /// <summary>\r\n        /// Position of the <see cref=\"LabelName\"/>.\r\n        /// </summary>\r\n        public Text.Span NameSpan { get { return _nameSpan; } }\r\n        private readonly Text.Span _nameSpan;\r\n        \r\n\t\tpublic GotoStmt(Text.Span span, string/*!*/labelName, Text.Span nameSpan)\r\n\t\t\t: base(span)\r\n\t\t{\r\n            Debug.Assert(!string.IsNullOrEmpty(labelName));\r\n\t\t\t_labelName = new VariableName(labelName);\r\n            _nameSpan = nameSpan;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGotoStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region LabelStmt\r\n\r\n    [Serializable]\r\n    public sealed class LabelStmt : Statement\r\n\t{\r\n        public VariableName Name { get { return _name; } }\r\n\t\tprivate VariableName _name;\r\n\r\n\t\tinternal Label Label { get { return label; } set { label = value; } }\r\n\t\tprivate Label label;\r\n\r\n\t\tinternal bool IsReferred { get { return isReferred; } set { isReferred = value; } }\r\n\t\tprivate bool isReferred;\r\n\r\n        /// <summary>\r\n        /// Position of the <see cref=\"Name\"/>.\r\n        /// </summary>\r\n        public Text.Span NameSpan { get { return _nameSpan; } }\r\n        private readonly Text.Span _nameSpan;\r\n        \r\n\r\n\t\tpublic LabelStmt(Text.Span span, string/*!*/name, Text.Span nameSpan)\r\n\t\t\t: base(span)\r\n\t\t{\r\n            Debug.Assert(!string.IsNullOrEmpty(name));\r\n\r\n\t\t\t_name = new VariableName(name);\r\n            _nameSpan = nameSpan;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitLabelStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/LambdaFunctionExpr.cs",
    "content": "/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics.SymbolStore;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region LambdaFunctionDecl\r\n\r\n    /// <summary>\r\n    /// Represents a function declaration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class LambdaFunctionExpr : Expression, IHasSourceUnit, IDeclarationElement\r\n    {\r\n        /// <summary>\r\n        /// Gets namespace containing this lambda expression. Can be <c>null</c>.\r\n        /// </summary>\r\n        public NamespaceDecl Namespace { get { return ns; } }\r\n        private readonly NamespaceDecl ns;\r\n\r\n        public override Operations Operation\r\n        {\r\n            get { return Operations.Closure; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n\r\n        public Signature Signature { get { return signature; } }\r\n        private readonly Signature signature;\r\n\r\n        /// <summary>\r\n        /// Parameters specified within <c>use</c> \r\n        /// </summary>\r\n        public List<FormalParam> UseParams { get { return useParams; } }\r\n        private readonly List<FormalParam> useParams;\r\n\r\n        //private readonly TypeSignature typeSignature;\r\n        public Statement[]/*!*/ Body { get { return body; } }\r\n        private readonly Statement[]/*!*/ body;\r\n        //private readonly CustomAttributes attributes;\r\n\r\n        public Text.Span EntireDeclarationSpan { get { return entireDeclarationSpan; } }\r\n        private readonly Text.Span entireDeclarationSpan;\r\n\r\n        public int HeadingEndPosition { get { return headingEndPosition; } }\r\n        private readonly int headingEndPosition;\r\n\r\n        public int DeclarationBodyPosition { get { return declarationBodyPosition; } }\r\n        private readonly int declarationBodyPosition;\r\n\r\n        /// <summary>\r\n        /// Gets the source file <see cref=\"SourceUnit\"/>. Cannot be <c>null</c>.\r\n        /// </summary>\r\n        public SourceUnit/*!*/SourceUnit { get { return this.sourceUnit; } }\r\n        private readonly SourceUnit/*!*/sourceUnit;\r\n\r\n        #region Construction\r\n\r\n        public LambdaFunctionExpr(SourceUnit/*!*/ sourceUnit,\r\n            Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition,\r\n            Scope scope, NamespaceDecl ns,\r\n            bool aliasReturn, List<FormalParam>/*!*/ formalParams, List<FormalParam> useParams,\r\n            IList<Statement>/*!*/ body)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(formalParams != null && body != null);\r\n            Debug.Assert(sourceUnit != null);\r\n\r\n            this.sourceUnit = sourceUnit;\r\n            \r\n            this.ns = ns;\r\n            this.signature = new Signature(aliasReturn, formalParams);\r\n            this.useParams = useParams;\r\n            //this.typeSignature = new TypeSignature(genericParams);\r\n            //this.attributes = new CustomAttributes(attributes);\r\n            this.body = body.AsArray();\r\n            this.entireDeclarationSpan = entireDeclarationPosition;\r\n            this.headingEndPosition = headingEndPosition;\r\n            this.declarationBodyPosition = declarationBodyPosition;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitLambdaFunctionExpr(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/LangElement.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.AST;\r\nusing PHP.Core;\r\nusing System;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    /// <summary>\r\n    /// Base class for all AST nodes.\r\n    /// </summary>\r\n    [Serializable]\r\n    public abstract class AstNode : IPropertyCollection\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Contains properties of this <see cref=\"AstNode\"/>.\r\n        /// </summary>\r\n        private PropertyCollection _properties;\r\n\r\n        /// <summary>\r\n        /// Gets property collection associated with this node.\r\n        /// </summary>\r\n        public IPropertyCollection Properties { get { return (IPropertyCollection)this; } }\r\n\r\n        #endregion\r\n\r\n        #region IPropertyCollection\r\n\r\n        void IPropertyCollection.SetProperty(object key, object value)\r\n        {\r\n            _properties.SetProperty(key, value);\r\n        }\r\n\r\n        object IPropertyCollection.GetProperty(object key)\r\n        {\r\n            return _properties.GetProperty(key);\r\n        }\r\n\r\n        public void SetProperty<T>(T value)\r\n        {\r\n            _properties.SetProperty<T>(value);\r\n        }\r\n\r\n        public T GetProperty<T>()\r\n        {\r\n            return _properties.GetProperty<T>();\r\n        }\r\n\r\n        bool IPropertyCollection.TryGetProperty(object key, out object value)\r\n        {\r\n            return _properties.TryGetProperty(key, out value);\r\n        }\r\n\r\n        bool IPropertyCollection.TryGetProperty<T>(out T value)\r\n        {\r\n            return _properties.TryGetProperty<T>(out value);\r\n        }\r\n\r\n        bool IPropertyCollection.RemoveProperty(object key)\r\n        {\r\n            return _properties.RemoveProperty(key);\r\n        }\r\n\r\n        bool IPropertyCollection.RemoveProperty<T>()\r\n        {\r\n            return _properties.RemoveProperty<T>();\r\n        }\r\n\r\n        void IPropertyCollection.ClearProperties()\r\n        {\r\n            _properties.ClearProperties();\r\n        }\r\n\r\n        object IPropertyCollection.this[object key]\r\n        {\r\n            get\r\n            {\r\n                return _properties.GetProperty(key);\r\n            }\r\n            set\r\n            {\r\n                _properties.SetProperty(key, value);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n\t/// Base class for all AST nodes representing PHP language Elements - statements and expressions.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class LangElement : AstNode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Position of element in source file.\r\n\t\t/// </summary>\r\n        public Text.Span Span { get; protected set; }\r\n\t\t\r\n\t\t/// <summary>\r\n        /// Initialize the LangElement.\r\n        /// </summary>\r\n        /// <param name=\"span\">The position of the LangElement in the source code.</param>\r\n\t\tprotected LangElement(Text.Span span)\r\n\t\t{\r\n\t\t\tthis.Span = span;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// In derived classes, calls Visit* on the given visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor.</param>\r\n        public abstract void VisitMe(TreeVisitor/*!*/visitor);\r\n\t}\r\n\r\n    #region Scope\r\n    \r\n    [Serializable]\r\n    public struct Scope\r\n    {\r\n        public int Start { get { return start; } }\r\n        private int start;\r\n\r\n        public static readonly Scope Invalid = new Scope(-1);\r\n        public static readonly Scope Global = new Scope(0);\r\n        public static readonly Scope Ignore = new Scope(Int32.MaxValue);\r\n\r\n        public bool IsGlobal\r\n        {\r\n            get\r\n            {\r\n                return start == 0;\r\n            }\r\n        }\r\n\r\n        public bool IsValid\r\n        {\r\n            get\r\n            {\r\n                return start >= 0;\r\n            }\r\n        }\r\n\r\n        public Scope(int start)\r\n        {\r\n            this.start = start;\r\n        }\r\n\r\n        public void Increment()\r\n        {\r\n            start++;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return start.ToString();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IDeclarationElement\r\n\r\n    public interface IDeclarationElement\r\n    {\r\n        /// <summary>\r\n        /// Gets extent of entire declaration including header, modifiers, attributes and eventually function body.\r\n        /// </summary>\r\n        Text.Span EntireDeclarationSpan { get; }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IHasSourceUnit\r\n\r\n    /// <summary>\r\n    /// Annotates AST nodes having reference to containing source unit.\r\n    /// </summary>\r\n    public interface IHasSourceUnit\r\n    {\r\n        /// <summary>\r\n        /// Gets source unit of the containing source file.\r\n        /// </summary>\r\n        SourceUnit SourceUnit { get; }\r\n    }\r\n\r\n    #endregion\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/ListEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents a <c>list</c> construct.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ListEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.List; } }\r\n\r\n\t\t/// <summary>\r\n        /// Elements of this list are VarLikeConstructUse, ListEx and null.\r\n        /// Null represents empty expression - for example next piece of code is ok: \r\n        /// list(, $value) = each ($arr)\r\n        /// </summary>\r\n        public List<Expression>/*!*/LValues { get; private set; }\r\n        /// <summary>Array being assigned</summary>\r\n        public Expression RValue { get; internal set; }\r\n\r\n        public ListEx(Text.Span p, List<Expression>/*!*/ lvalues, Expression rvalue)\r\n            : base(p)\r\n        {\r\n            Debug.Assert(lvalues != null /*&& rvalue != null*/);    // rvalue can be determined during runtime in case of list in list.\r\n            Debug.Assert(lvalues.TrueForAll(delegate(Expression lvalue)\r\n            {\r\n                return lvalue == null || lvalue is VarLikeConstructUse || lvalue is ListEx;\r\n            }));\r\n\r\n            this.LValues = lvalues;\r\n            this.RValue = rvalue;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitListEx(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/Literal.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region Literal\r\n\r\n\t/// <summary>\r\n\t/// Base class for literals.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class Literal : Expression\r\n\t{\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal abstract object ValueObj { get; }\r\n\r\n\t\tprotected Literal(Text.Span span)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IntLiteral\r\n\r\n\t/// <summary>\r\n\t/// Integer literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class IntLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.IntLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of the literal.\r\n\t\t/// </summary>\r\n        public int Value { get { return value; } }\r\n        private int value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the IntLiteral class.\r\n\t\t/// </summary>\r\n\t\tpublic IntLiteral(Text.Span span, int value)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIntLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region LongIntLiteral\r\n\r\n\t/// <summary>\r\n\t/// Integer literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class LongIntLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.LongIntLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of the literal.\r\n\t\t/// </summary>\r\n        public long Value { get { return value; } }\r\n\t\tprivate long value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the IntLiteral class.\r\n\t\t/// </summary>\r\n\t\tpublic LongIntLiteral(Text.Span span, long value)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitLongIntLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DoubleLiteral\r\n\r\n\t/// <summary>\r\n\t/// Double literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class DoubleLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.DoubleLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of the literal.\r\n\t\t/// </summary>\r\n        public double Value { get { return value; } }\r\n\t\tprivate double value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the DoubleLiteral class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">A double value to be stored in node.</param>\r\n\t\t/// <param name=\"p\">A position.</param>\r\n        public DoubleLiteral(Text.Span p, double value)\r\n\t\t\t: base(p)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDoubleLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region StringLiteral\r\n\r\n\t/// <summary>\r\n\t/// String literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class StringLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.StringLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A <see cref=\"string\"/> value stored in node.\r\n\t\t/// </summary>\r\n\t\tprivate string value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A value of the literal.\r\n\t\t/// </summary>\r\n        public string Value { get { return value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new instance of the StringLiteral class.\r\n\t\t/// </summary>\r\n\t\tpublic StringLiteral(Text.Span span, string value)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitStringLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region BinaryStringLiteral\r\n\r\n\t/// <summary>\r\n\t/// String literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class BinaryStringLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.BinaryStringLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A value of the literal.\r\n\t\t/// </summary>\r\n        public byte[] Value { get { return value; } }\r\n\r\n        /// <summary>\r\n        /// Binary data stored in the node.\r\n        /// </summary>\r\n        private byte[]/*!*/ value;\r\n        \r\n        /// <summary>\r\n\t\t/// Initializes a new instance of the StringLiteral class.\r\n\t\t/// </summary>\r\n\t\tpublic BinaryStringLiteral(Text.Span span, byte[]/*!*/ value)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitBinaryStringLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region BoolLiteral\r\n\r\n\t/// <summary>\r\n\t/// Boolean literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class BoolLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.BoolLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return this.value; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a value of the literal.\r\n\t\t/// </summary>\r\n        public bool Value { get { return value; } }\r\n\t\tprivate bool value;\r\n\r\n\t\tpublic BoolLiteral(Text.Span span, bool value)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitBoolLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region NullLiteral\r\n\r\n\t/// <summary>\r\n\t/// Null literal.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class NullLiteral : Literal\r\n\t{\r\n        public override Operations Operation { get { return Operations.NullLiteral; } }\r\n\r\n        /// <summary>\r\n        /// Gets internal value of literal.\r\n        /// </summary>\r\n        internal override object ValueObj { get { return null; } }\r\n\r\n\t\tpublic NullLiteral(Text.Span span)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitNullLiteral(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/LoopStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region WhileStmt\r\n\r\n\t/// <summary>\r\n\t/// Represents a while-loop statement.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    public sealed class WhileStmt : Statement\r\n\t{\r\n\t\tpublic enum Type { While, Do };\r\n\r\n        /// <summary>Type of statement</summary>\r\n        public Type LoopType { get { return type; } }\r\n        private Type type;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Condition or a <B>null</B> reference for unbounded loop.\r\n\t\t/// </summary>\r\n        public Expression CondExpr { get { return condExpr; } internal set { condExpr = value; } }\r\n        private Expression condExpr;\r\n\r\n        /// <summary>Body of loop</summary>\r\n        public Statement/*!*/ Body { get { return body; } internal set { body = value; } }\r\n        private Statement/*!*/ body;\r\n\r\n\t\tpublic WhileStmt(Text.Span span, Type type, Expression/*!*/ condExpr, Statement/*!*/ body)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(condExpr != null && body != null);\r\n\r\n\t\t\tthis.type = type;\r\n\t\t\tthis.condExpr = condExpr;\r\n\t\t\tthis.body = body;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitWhileStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ForStmt\r\n\r\n\t/// <summary>\r\n\t/// Represents a for-loop statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class ForStmt : Statement\r\n\t{\r\n\t\tprivate readonly List<Expression>/*!*/ initExList;\r\n\t\tprivate readonly List<Expression>/*!*/ condExList;\r\n\t\tprivate readonly List<Expression>/*!*/ actionExList;\r\n\t\tprivate Statement/*!*/ body;\r\n\r\n        /// <summary>List of expressions used for initialization</summary>\r\n        public List<Expression> /*!*/ InitExList { get { return initExList; } }\r\n        /// <summary>List of expressions used as condition</summary>\r\n        public List<Expression> /*!*/ CondExList { get { return condExList; } }\r\n        /// <summary>List of expressions used to incrent iterator</summary>\r\n        public List<Expression> /*!*/ ActionExList { get { return actionExList; } }\r\n        /// <summary>Body of statement</summary>\r\n        public Statement/*!*/ Body { get { return body; } internal set { body = value; } }\r\n\r\n        public ForStmt(Text.Span p, List<Expression>/*!*/ initExList, List<Expression>/*!*/ condExList,\r\n\t\t  List<Expression>/*!*/ actionExList, Statement/*!*/ body)\r\n\t\t\t: base(p)\r\n\t\t{\r\n\t\t\tDebug.Assert(initExList != null && condExList != null && actionExList != null && body != null);\r\n\r\n\t\t\tthis.initExList = initExList;\r\n\t\t\tthis.condExList = condExList;\r\n\t\t\tthis.actionExList = actionExList;\r\n\t\t\tthis.body = body;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitForStmt(this);\r\n        }\r\n\t}\r\n\t#endregion\r\n\r\n\t#region ForeachStmt\r\n\r\n\t/// <summary>\r\n\t/// Represents a foreach-loop statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class ForeachVar : AstNode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Whether the variable is aliased.\r\n\t\t/// </summary>\r\n        public bool Alias { get { return alias; } set { alias = value; } }\r\n        private bool alias;\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// The variable itself. Can be <c>null</c> reference if <see cref=\"ListEx\"/> is represented instead.\r\n\t\t/// </summary>\r\n        public VariableUse Variable { get { return this.expr as VariableUse; } }\r\n\r\n        /// <summary>\r\n        /// PHP list expression. Can be <c>null</c> reference if <see cref=\"VariableUse\"/> is represented instead.\r\n        /// </summary>\r\n        public ListEx List { get { return this.expr as ListEx; } }\r\n\r\n        /// <summary>\r\n        /// Inner expression representing <see cref=\"Variable\"/> or <see cref=\"List\"/>.\r\n        /// </summary>\r\n        internal Expression/*!*/Expression { get { return expr; } }\r\n        private readonly Expression/*!*/expr;\r\n\r\n        /// <summary>\r\n        /// Position of foreach variable.\r\n        /// </summary>\r\n        internal Text.Span Span { get { return expr.Span; } }\r\n\r\n\t\tpublic ForeachVar(VariableUse variable, bool alias)\r\n\t\t{\r\n\t\t\tthis.expr = variable;\r\n\t\t\tthis.alias = alias;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Initializes instance of <see cref=\"ForeachVar\"/> representing PHP list expression.\r\n        /// </summary>\r\n        /// <param name=\"list\"></param>\r\n        public ForeachVar(ListEx/*!*/list)\r\n        {\r\n            Debug.Assert(list != null);\r\n            Debug.Assert(list.RValue == null);\r\n\r\n            this.expr = list;\r\n            this.alias = false;\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a foreach statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public class ForeachStmt : Statement\r\n\t{\r\n\t\tprivate Expression/*!*/ enumeree;\r\n        /// <summary>Array to enumerate through</summary>\r\n        public Expression /*!*/Enumeree { get { return enumeree; } }\r\n\t\tprivate ForeachVar keyVariable;\r\n        /// <summary>Variable to store key in (can be null)</summary>\r\n        public ForeachVar KeyVariable { get { return keyVariable; } }\r\n\t\tprivate ForeachVar/*!*/ valueVariable;\r\n        /// <summary>Variable to store value in</summary>\r\n        public ForeachVar /*!*/ ValueVariable { get { return valueVariable; } }\r\n\t\tprivate Statement/*!*/ body;\r\n        /// <summary>Body - statement in loop</summary>\r\n        public Statement/*!*/ Body { get { return body; } internal set { body = value; } }\r\n\r\n\t\tpublic ForeachStmt(Text.Span span, Expression/*!*/ enumeree, ForeachVar key, ForeachVar/*!*/ value,\r\n\t\t  Statement/*!*/ body)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(enumeree != null && value != null && body != null);\r\n\r\n\t\t\tthis.enumeree = enumeree;\r\n\t\t\tthis.keyVariable = key;\r\n\t\t\tthis.valueVariable = value;\r\n\t\t\tthis.body = body;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitForeachStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/NewAndInstanceof.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region NewEx\r\n\r\n\t/// <summary>\r\n\t/// <c>new</c> expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class NewEx : VarLikeConstructUse\r\n\t{\r\n        public override Operations Operation { get { return Operations.New; } }\r\n\r\n\t\tinternal override bool AllowsPassByReference { get { return true; } }\r\n\r\n\t\tprivate TypeRef/*!*/ classNameRef;\r\n\t\tprivate CallSignature callSignature;\r\n\t\t/// <summary>Type of class being instantiated</summary>\r\n        public TypeRef /*!*/ ClassNameRef { get { return classNameRef; } }\r\n        /// <summary>Call signature of constructor</summary>\r\n        public CallSignature CallSignature { get { return callSignature; } }\r\n\r\n\t\tpublic NewEx(Text.Span span, TypeRef/*!*/ classNameRef, List<ActualParam>/*!*/ parameters)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(classNameRef != null && parameters != null);\r\n\t\t\tthis.classNameRef = classNameRef;\r\n\t\t\tthis.callSignature = new CallSignature(parameters, TypeRef.EmptyList);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitNewEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region InstanceOfEx\r\n\r\n\t/// <summary>\r\n\t/// <c>instanceof</c> expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class InstanceOfEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.InstanceOf; } }\r\n\r\n\t\tprivate Expression/*!*/ expression;\r\n        /// <summary>Expression being tested</summary>\r\n        public Expression /*!*/ Expression { get { return expression; } internal set { expression = value; } }\r\n        private TypeRef/*!*/ classNameRef;\r\n        /// <summary>Type to test if <see cref=\"Expression\"/> is of</summary>\r\n        public TypeRef/*!*/ ClassNameRef { get { return classNameRef; } }\r\n\t\t\r\n\t\tpublic InstanceOfEx(Text.Span span, Expression/*!*/ expression, TypeRef/*!*/ classNameRef)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(expression != null && classNameRef != null);\r\n\r\n\t\t\tthis.expression = expression;\r\n\t\t\tthis.classNameRef = classNameRef;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitInstanceOfEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TypeOfEx\r\n\r\n\t/// <summary>\r\n\t/// <c>typeof</c> expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class TypeOfEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.TypeOf; } }\r\n\r\n\t\tpublic TypeRef/*!*/ ClassNameRef { get { return classNameRef; } }\r\n\t\tprivate TypeRef/*!*/ classNameRef;\r\n\r\n\t\tpublic TypeOfEx(Text.Span span, TypeRef/*!*/ classNameRef)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(classNameRef != null);\r\n\r\n\t\t\tthis.classNameRef = classNameRef;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitTypeOfEx(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\t\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/ShellEx.cs",
    "content": "/*\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents a content of backtick operator (shell command execution).\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ShellEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.ShellCommand; } }\r\n\r\n\t\t/// <summary>Command to excute</summary>\r\n        public Expression/*!*/ Command { get { return command; } internal set { command = value; } }\r\n        private Expression/*!*/ command;\r\n        \r\n\t\tpublic ShellEx(Text.Span span, Expression/*!*/ command)\r\n            : base(span)\r\n\t\t{\r\n            Debug.Assert(command is StringLiteral || command is ConcatEx || command is BinaryStringLiteral);\r\n\t\t\tthis.command = command;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitShellEx(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/Statement.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    #region Statement\r\n\r\n    /// <summary>\r\n    /// Abstract base class representing all statements elements of PHP source file.\r\n    /// </summary>\r\n    [Serializable]\r\n    public abstract class Statement : LangElement\r\n    {\r\n        protected Statement(Text.Span span)\r\n            : base(span)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether the statement is a declaration statement (class, function, namespace, const).\r\n        /// </summary>\r\n        internal virtual bool IsDeclaration { get { return false; } }\r\n\r\n        internal virtual bool SkipInPureGlobalCode() { return false; }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region BlockStmt\r\n\r\n    /// <summary>\r\n    /// Block statement.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class BlockStmt : Statement\r\n    {\r\n        private readonly Statement[]/*!*/_statements;\r\n        /// <summary>Statements in block</summary>\r\n        public Statement[]/*!*/ Statements { get { return _statements; } }\r\n\r\n        public BlockStmt(Text.Span span, IList<Statement>/*!*/body)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(body != null);\r\n            _statements = body.AsArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitBlockStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ExpressionStmt\r\n\r\n    /// <summary>\r\n    /// Expression statement.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class ExpressionStmt : Statement\r\n    {\r\n        /// <summary>Expression that repesents this statement</summary>\r\n        public Expression/*!*/ Expression { get { return expression; } internal set { expression = value; } }\r\n        private Expression/*!*/ expression;\r\n\r\n        public ExpressionStmt(Text.Span span, Expression/*!*/ expression)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(expression != null);\r\n            this.expression = expression;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitExpressionStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region EmptyStmt\r\n\r\n    /// <summary>\r\n    /// Empty statement.\r\n    /// </summary>\r\n    public sealed class EmptyStmt : Statement\r\n    {\r\n        public static readonly EmptyStmt Unreachable = new EmptyStmt(Text.Span.Invalid);\r\n        public static readonly EmptyStmt Skipped = new EmptyStmt(Text.Span.Invalid);\r\n        public static readonly EmptyStmt PartialMergeResiduum = new EmptyStmt(Text.Span.Invalid);\r\n\r\n        internal override bool SkipInPureGlobalCode()\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public EmptyStmt(Text.Span p) : base(p) { }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitEmptyStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region PHPDocStmt\r\n\r\n    /// <summary>\r\n    /// Empty statement containing PHPDoc block.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class PHPDocStmt : Statement\r\n    {\r\n        public PHPDocBlock/*!*/PHPDoc { get { return _phpdoc; } }\r\n        private readonly PHPDocBlock _phpdoc;\r\n\r\n        internal override bool SkipInPureGlobalCode() { return true; }\r\n\r\n        public PHPDocStmt(PHPDocBlock/*!*/phpdoc) : base(phpdoc.Span)\r\n        {\r\n            Debug.Assert(phpdoc != null);\r\n            _phpdoc = phpdoc;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitPHPDocStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region UnsetStmt\r\n\r\n    /// <summary>\r\n    /// Represents an <c>unset</c> statement.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class UnsetStmt : Statement\r\n    {\r\n        /// <summary>List of variables to be unset</summary>\r\n        public List<VariableUse> /*!*/VarList { get { return varList; } }\r\n        private readonly List<VariableUse>/*!*/ varList;\r\n\r\n        public UnsetStmt(Text.Span p, List<VariableUse>/*!*/ varList)\r\n            : base(p)\r\n        {\r\n            Debug.Assert(varList != null);\r\n            this.varList = varList;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitUnsetStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region GlobalStmt\r\n\r\n    /// <summary>\r\n    /// Represents a <c>global</c> statement.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class GlobalStmt : Statement\r\n    {\r\n        public List<SimpleVarUse>/*!*/ VarList { get { return varList; } }\r\n        private List<SimpleVarUse>/*!*/ varList;\r\n\r\n        public GlobalStmt(Text.Span p, List<SimpleVarUse>/*!*/ varList)\r\n            : base(p)\r\n        {\r\n            Debug.Assert(varList != null);\r\n            this.varList = varList;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitGlobalStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region StaticStmt\r\n\r\n    /// <summary>\r\n    /// Represents a <c>static</c> statement.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class StaticStmt : Statement\r\n    {\r\n        /// <summary>List of static variables</summary>\r\n        public List<StaticVarDecl>/*!*/ StVarList { get { return stVarList; } }\r\n        private List<StaticVarDecl>/*!*/ stVarList;\r\n\r\n        public StaticStmt(Text.Span p, List<StaticVarDecl>/*!*/ stVarList)\r\n            : base(p)\r\n        {\r\n            Debug.Assert(stVarList != null);\r\n            this.stVarList = stVarList;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitStaticStmt(this);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Helper class. No error or warning can be caused by declaring variable as static.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Even this is ok:\r\n    /// \r\n    /// function f()\r\n    ///\t{\r\n    ///   global $a;\r\n    ///   static $a = 1;\r\n    /// }\r\n    /// \r\n    /// That's why we dont'need to know Position => is not child of LangElement\r\n    /// </remarks>\r\n    [Serializable]\r\n    public class StaticVarDecl : LangElement\r\n    {\r\n        /// <summary>Static variable being declared</summary>\r\n        public DirectVarUse /*!*/ Variable { get { return variable; } }\r\n        private DirectVarUse/*!*/ variable;\r\n        \r\n        /// <summary>Expression used to initialize static variable</summary>\r\n        public Expression Initializer { get { return initializer; } internal set { initializer = value; } }\r\n        private Expression initializer;\r\n        \r\n        public StaticVarDecl(Text.Span span, DirectVarUse/*!*/ variable, Expression initializer)\r\n            : base(span)\r\n        {\r\n            Debug.Assert(variable != null);\r\n\r\n            this.variable = variable;\r\n            this.initializer = initializer;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitStaticVarDecl(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region DeclareStmt\r\n\r\n    [Serializable]\r\n    public sealed class DeclareStmt : Statement\r\n    {\r\n        /// <summary>\r\n        /// Inner statement.\r\n        /// </summary>\r\n        public Statement Statement { get { return this.stmt; } }\r\n        private readonly Statement/*!*/stmt;\r\n\r\n        public DeclareStmt(Text.Span p, Statement statement)\r\n            : base(p)\r\n        {\r\n            this.stmt = statement;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDeclareStmt(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/SwitchStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region SwitchStmt\r\n\r\n\t/// <summary>\r\n\t/// Switch statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class SwitchStmt : Statement\r\n\t{\r\n\t\t/// <summary>Value to switch by</summary>\r\n        public Expression/*!*/ SwitchValue { get { return switchValue; } internal set { switchValue = value; } }\r\n        private Expression/*!*/ switchValue;\r\n        /// <summary>Body of switch statement</summary>\r\n        public SwitchItem[]/*!*/ SwitchItems { get { return switchItems; } }\r\n        private SwitchItem[]/*!*/ switchItems;\r\n        \r\n\t\tpublic SwitchStmt(Text.Span span, Expression/*!*/ switchValue, IList<SwitchItem>/*!*/ switchItems)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(switchValue != null && switchItems != null);\r\n\r\n\t\t\tthis.switchValue = switchValue;\r\n\t\t\tthis.switchItems = switchItems.AsArray();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitSwitchStmt(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SwitchItem\r\n\r\n\t/// <summary>\r\n\t/// Base class for switch case/default items.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class SwitchItem : LangElement\r\n\t{\r\n        protected readonly Statement[]/*!*/ statements;\r\n        /// <summary>Statements in this part of switch</summary>\r\n        public Statement[]/*!*/ Statements { get { return statements; } }\r\n\r\n\t\tprotected SwitchItem(Text.Span span, IList<Statement>/*!*/ statements)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(statements != null);\r\n\t\t\tthis.statements = statements.AsArray();\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Switch <c>case</c> item.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class CaseItem : SwitchItem\r\n\t{\r\n        /// <summary>Value to compare with swich expression</summary>\r\n        public Expression CaseVal { get { return caseVal; } internal set { caseVal = value; } }\r\n        private Expression caseVal;\r\n\r\n\t\tpublic CaseItem(Text.Span span, Expression/*!*/ caseVal, IList<Statement>/*!*/ statements)\r\n\t\t\t: base(span, statements)\r\n\t\t{\r\n\t\t\tDebug.Assert(caseVal != null);\r\n\t\t\tthis.caseVal = caseVal;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitCaseItem(this);\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Switch <c>default</c> item.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class DefaultItem : SwitchItem\r\n\t{\r\n\t\tpublic DefaultItem(Text.Span span, IList<Statement>/*!*/ statements)\r\n\t\t\t: base(span, statements)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDefaultItem(this);\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/TernaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Conditional expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ConditionalEx : Expression\r\n\t{\r\n        public override Operations Operation { get { return Operations.Conditional; } }\r\n\r\n\t\tprivate Expression/*!*/ condExpr;\r\n\t\tprivate Expression trueExpr;\r\n\t\tprivate Expression/*!*/ falseExpr;\r\n        /// <summary>Condition</summary>\r\n        public Expression/*!*/ CondExpr { get { return condExpr; } }\r\n        /// <summary>Expression evaluated when <see cref=\"CondExpr\"/> is true. Can be <c>null</c> in case of ternary shortcut (?:).</summary>\r\n        public Expression TrueExpr { get { return trueExpr; } set { trueExpr = value; } }\r\n        /// <summary><summary>Expression evaluated when <see cref=\"CondExpr\"/> is false</summary></summary>\r\n        public Expression/*!*/ FalseExpr { get { return falseExpr; } set { falseExpr = value; } }\r\n\r\n\t\tpublic ConditionalEx(Text.Span span, Expression/*!*/ condExpr, Expression trueExpr, Expression/*!*/ falseExpr)\r\n\t\t\t: base(span)\r\n\t\t{\r\n            Debug.Assert(condExpr != null);\r\n            // Debug.Assert(trueExpr != null); // allowed to enable ternary shortcut\r\n            Debug.Assert(falseExpr != null);\r\n\r\n\t\t\tthis.condExpr = condExpr;\r\n\t\t\tthis.trueExpr = trueExpr;\r\n\t\t\tthis.falseExpr = falseExpr;\r\n\t\t}\r\n\r\n\t\tpublic ConditionalEx(Expression/*!*/ condExpr, Expression/*!*/ trueExpr, Expression/*!*/ falseExpr)\r\n            : this(Text.Span.Invalid, condExpr, trueExpr, falseExpr)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitConditionalEx(this);\r\n        }\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/TryStmt.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Represents a try-catch statement.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    public sealed class TryStmt : Statement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A list of statements contained in the try-block.\r\n\t\t/// </summary>\r\n        private readonly Statement[]/*!*/ statements;\r\n        /// <summary>A list of statements contained in the try-block.</summary>\r\n        public Statement[]/*!*/ Statements { get { return statements; } }\r\n\r\n\t\t/// <summary>\r\n        /// A list of catch statements catching exceptions thrown inside the try block. Can be a <c>null</c> reference.\r\n\t\t/// </summary>\r\n\t\tprivate readonly CatchItem[]/*!*/catches;\r\n        /// <summary>A list of catch statements catching exceptions thrown inside the try block.</summary>\r\n        public CatchItem[]/*!*/Catches { get { return catches; } }\r\n        internal bool HasCatches { get { return catches.Length != 0; } }\r\n\r\n        /// <summary>\r\n        /// A list of statements contained in the finally-block. Can be a <c>null</c> reference.\r\n        /// </summary>\r\n        private readonly FinallyItem finallyItem;\r\n        /// <summary>A list of statements contained in the finally-block. Can be a <c>null</c> reference.</summary>\r\n        public FinallyItem FinallyItem { get { return finallyItem; } }\r\n        internal bool HasFinallyStatements { get { return finallyItem != null && finallyItem.Statements.Length != 0; } }\r\n\r\n        public TryStmt(Text.Span p, IList<Statement>/*!*/ statements, List<CatchItem> catches, FinallyItem finallyItem)\r\n\t\t\t: base(p)\r\n\t\t{\r\n            Debug.Assert(statements != null);\r\n            \r\n\t\t\tthis.statements = statements.AsArray();\r\n\t\t\tthis.catches = catches.AsArray();\r\n            this.finallyItem = finallyItem;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitTryStmt(this);\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a catch-block.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class CatchItem : LangElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// A list of statements contained in the catch-block.\r\n\t\t/// </summary>\r\n        private readonly Statement[]/*!*/ statements;\r\n        /// <summary>A list of statements contained in the catch-block.</summary>\r\n        public Statement[]/*!*/ Statements { get { return statements; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// A variable where an exception is assigned in.\r\n\t\t/// </summary>\r\n\t\tprivate readonly DirectVarUse/*!*/ variable;\r\n        /// <summary>A variable where an exception is assigned in.</summary>\r\n        public DirectVarUse/*!*/ Variable { get { return variable; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// An index of type identifier.\r\n\t\t/// </summary>\r\n\t\tprivate DirectTypeRef tref;\r\n        /// <summary>An index of type identifier.</summary>\r\n        public QualifiedName ClassName { get { return tref.QualifiedName; } }\r\n\r\n        /// <summary>\r\n        /// Position of <see cref=\"TypeRef\"/>.\r\n        /// </summary>\r\n        public Text.Span ClassNameSpan { get { return tref.Span; } }\r\n\r\n        /// <summary>\r\n        /// Catch type reference.\r\n        /// </summary>\r\n        public DirectTypeRef TypeRef { get { return tref; } }\r\n\r\n        public CatchItem(Text.Span p, DirectTypeRef tref, DirectVarUse/*!*/ variable,\r\n\t\t\tIList<Statement>/*!*/ statements)\r\n\t\t\t: base(p)\r\n\t\t{\r\n\t\t\tDebug.Assert(variable != null && statements != null);\r\n\r\n\t\t\tthis.tref = tref;\r\n\t\t\tthis.variable = variable;\r\n\t\t\tthis.statements = statements.AsArray();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitCatchItem(this);\r\n        }\r\n\t}\r\n\r\n    /// <summary>\r\n    /// Represents a finally-block.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class FinallyItem : LangElement\r\n    {\r\n        /// <summary>\r\n        /// A list of statements contained in the finally-block.\r\n        /// </summary>\r\n        private readonly Statement[]/*!*/statements;\r\n        /// <summary>A list of statements contained in the try-block.</summary>\r\n        public Statement[]/*!*/Statements { get { return statements; } }\r\n\r\n        public FinallyItem(Text.Span span, IList<Statement>/*!*/statements)\r\n            : base(span)\r\n        {\r\n            this.statements = statements.AsArray();\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFinallyItem(this);\r\n        }        \r\n    }\r\n\r\n\t/// <summary>\r\n\t/// Represents a throw statement.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class ThrowStmt : Statement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// An expression being thrown.\r\n\t\t/// </summary>\r\n\t\tpublic Expression /*!*/ Expression { get { return expression; } internal set { expression = value; } }\r\n        private Expression/*!*/ expression;\r\n        \r\n\t\tpublic ThrowStmt(Text.Span span, Expression/*!*/ expression)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(expression != null);\r\n\t\t\tthis.expression = expression;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitThrowStmt(this);\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/TypeDecl.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region FormalTypeParam\r\n\r\n    [Serializable]\r\n\tpublic sealed class FormalTypeParam : LangElement\r\n\t{\r\n\t\tpublic Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Either <see cref=\"PrimitiveTypeName\"/>, <see cref=\"GenericQualifiedName\"/>, or <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tpublic object DefaultType { get { return defaultType; } }\r\n\t\tprivate readonly object defaultType;\r\n\r\n        /// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n\t\t/// <summary>\r\n        /// Singleton instance of an empty <see cref=\"List&lt;FormalTypeParam&gt;\"/>.\r\n        /// </summary>\r\n        public static readonly List<FormalTypeParam>/*!*/EmptyList = new List<FormalTypeParam>();\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic FormalTypeParam(Text.Span span, Name name, object defaultType, List<CustomAttribute> attributes)\r\n            : base(span)\r\n\t\t{\r\n            Debug.Assert(defaultType == null || defaultType is PrimitiveTypeName || defaultType is GenericQualifiedName);\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.defaultType = defaultType;\r\n\r\n\t\t\tif (attributes != null && attributes.Count != 0)\r\n                this.Attributes = new CustomAttributes(attributes);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFormalTypeParam(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TypeSignature\r\n\r\n    [Serializable]\r\n\tpublic struct TypeSignature\r\n\t{\r\n\t\tinternal FormalTypeParam[]/*!!*/ TypeParams { get { return typeParams; } }\r\n\t\tprivate readonly FormalTypeParam[]/*!!*/ typeParams;\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic TypeSignature(IList<FormalTypeParam>/*!!*/ typeParams)\r\n\t\t{\r\n\t\t\tDebug.Assert(typeParams != null);\r\n\t\t\tthis.typeParams = typeParams.AsArray();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region TypeDecl\r\n\r\n\t/// <summary>\r\n\t/// Represents a class or an interface declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class TypeDecl : Statement, IHasSourceUnit, IDeclarationElement\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\tinternal override bool IsDeclaration { get { return true; } }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Name of the class.\r\n\t\t/// </summary>\r\n\t\tpublic Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n        /// <summary>\r\n        /// Position of <see cref=\"Name\"/> in the source code.\r\n        /// </summary>\r\n        public Text.Span NamePosition { get; private set; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Namespace where the class is declared in.\r\n\t\t/// </summary>\r\n\t\tpublic NamespaceDecl Namespace { get { return ns; } }\r\n\t\tprivate readonly NamespaceDecl ns;\r\n\r\n        /// <summary>\r\n\t\t/// Name of the base class.\r\n\t\t/// </summary>\r\n\t\tprivate readonly GenericQualifiedName? baseClassName;\r\n        /// <summary>Name of the base class.</summary>\r\n        public GenericQualifiedName? BaseClassName { get { return baseClassName; } }\r\n\r\n        /// <summary>Position of <see cref=\"BaseClassName\"/>.</summary>\r\n        public Text.Span BaseClassNamePosition { get; private set; }\r\n\r\n        public PhpMemberAttributes MemberAttributes { get; private set; }\r\n\r\n\t\t/// <summary>Implemented interface name indices. </summary>\r\n        public GenericQualifiedName[]/*!!*/ ImplementsList { get; private set; }\r\n\r\n        /// <summary>Positions of <see cref=\"ImplementsList\"/> elements.</summary>\r\n        public Text.Span[]/*!!*/ImplementsListPosition { get; private set; }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Type parameters.\r\n\t\t/// </summary>\r\n        public TypeSignature TypeSignature { get { return typeSignature; } }\r\n        internal readonly TypeSignature typeSignature;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Member declarations. Partial classes merged to the aggregate has this field <B>null</B>ed.\r\n\t\t/// </summary>\r\n        public List<TypeMemberDecl> Members { get { return members; } internal set { members = value; } }\r\n\t\tprivate List<TypeMemberDecl> members;\r\n\r\n\t\t/// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Position spanning over the entire declaration including the attributes.\r\n\t\t/// Used for transformation to an eval and for VS integration.\r\n\t\t/// </summary>\r\n        public Text.Span EntireDeclarationSpan { get { return entireDeclarationSpan; } }\r\n        private Text.Span entireDeclarationSpan;\r\n\r\n        public int DeclarationBodyPosition { get { return declarationBodyPosition; } }\r\n        private int declarationBodyPosition;\r\n\r\n        private int headingEndPosition;\r\n        public int HeadingEndPosition { get { return headingEndPosition; } }\r\n\r\n        /// <summary>Indicates if type was decorated with partial keyword (Pure mode only).</summary>\r\n        public bool PartialKeyword { get { return partialKeyword; } }\r\n        /// <summary>Contains value of the <see cref=\"PartialKeyword\"/> property</summary>\r\n        private bool partialKeyword;\r\n\r\n        internal Scope Scope { get; private set; }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the declaration is conditional.\r\n        /// </summary>\r\n        public bool IsConditional { get; private set; }\r\n\r\n        public SourceUnit SourceUnit { get; private set; }\r\n        \r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic TypeDecl(SourceUnit/*!*/ sourceUnit,\r\n            Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition,\r\n            bool isConditional, Scope scope, PhpMemberAttributes memberAttributes, bool isPartial, Name className, Text.Span classNamePosition,\r\n            NamespaceDecl ns, List<FormalTypeParam>/*!*/ genericParams, Tuple<GenericQualifiedName, Text.Span> baseClassName,\r\n            List<Tuple<GenericQualifiedName, Text.Span>>/*!*/ implementsList, List<TypeMemberDecl>/*!*/ elements,\r\n\t\t\tList<CustomAttribute> attributes)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericParams != null && implementsList != null && elements != null);\r\n            Debug.Assert((memberAttributes & PhpMemberAttributes.Trait) == 0 || (memberAttributes & PhpMemberAttributes.Interface) == 0, \"Interface cannot be a trait\");\r\n\r\n\t\t\tthis.name = className;\r\n            this.NamePosition = classNamePosition;\r\n\t\t\tthis.ns = ns;\r\n\t\t\tthis.typeSignature = new TypeSignature(genericParams);\r\n            if (baseClassName != null)\r\n            {\r\n                this.baseClassName = baseClassName.Item1;\r\n                this.BaseClassNamePosition = baseClassName.Item2;\r\n            }\r\n            this.MemberAttributes = memberAttributes;\r\n            this.Scope = scope;\r\n            this.SourceUnit = sourceUnit;\r\n            this.IsConditional = isConditional;\r\n            if (implementsList == null || implementsList.Count == 0)\r\n            {\r\n                this.ImplementsList = EmptyArray<GenericQualifiedName>.Instance;\r\n                this.ImplementsListPosition = EmptyArray<Text.Span>.Instance;\r\n            }\r\n            else\r\n            {\r\n                this.ImplementsList = implementsList.Select(x => x.Item1).ToArray();\r\n                this.ImplementsListPosition = implementsList.Select(x => x.Item2).ToArray();\r\n            }\r\n            this.members = elements;\r\n            this.members.TrimExcess();\r\n\r\n\t\t\tif (attributes != null && attributes.Count != 0)\r\n                this.Attributes = new CustomAttributes(attributes);\r\n\t\t\tthis.entireDeclarationSpan = entireDeclarationPosition;\r\n            this.headingEndPosition = headingEndPosition;\r\n\t\t\tthis.declarationBodyPosition = declarationBodyPosition;\r\n            this.partialKeyword = isPartial;\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitTypeDecl(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region TypeMemberDecl\r\n\r\n\t/// <summary>\r\n\t/// Represents a member declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class TypeMemberDecl : LangElement, IDeclarationElement\r\n\t{\r\n        public PhpMemberAttributes Modifiers { get { return modifiers; } }\r\n\t\tprotected PhpMemberAttributes modifiers;\r\n\r\n        /// <summary>\r\n        /// Gets extent of the entire declaration.\r\n        /// </summary>\r\n        public abstract Text.Span EntireDeclarationSpan { get; }\r\n\r\n        /// <summary>\r\n        /// Gets collection of CLR attributes annotating this statement.\r\n        /// </summary>\r\n        public CustomAttributes Attributes\r\n        {\r\n            get { return this.GetCustomAttributes(); }\r\n            set { this.SetCustomAttributes(value); }\r\n        }\r\n\r\n        protected TypeMemberDecl(Text.Span span, List<CustomAttribute> attributes)\r\n            : base(span)\r\n\t\t{\r\n            if (attributes != null && attributes.Count != 0)\r\n\t\t\t    this.Attributes = new CustomAttributes(attributes);\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Methods\r\n\r\n\t/// <summary>\r\n\t/// Represents a method declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class MethodDecl : TypeMemberDecl\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Name of the method.\r\n\t\t/// </summary>\r\n\t\tpublic Name Name { get { return name; } }\r\n\t\tprivate readonly Name name;\r\n\r\n\t\tpublic Signature Signature { get { return signature; } }\r\n\t\tprivate readonly Signature signature;\r\n\r\n\t\tpublic TypeSignature TypeSignature { get { return typeSignature; } }\r\n\t\tprivate readonly TypeSignature typeSignature;\r\n\r\n        public Statement[] Body { get { return body; } internal set { body = value; } }\r\n        private Statement[] body;\r\n\r\n        public ActualParam[] BaseCtorParams { get { return baseCtorParams; } internal set { baseCtorParams = value; } }\r\n\t\tprivate ActualParam[] baseCtorParams;\r\n\r\n        public override Text.Span EntireDeclarationSpan { get { return entireDeclarationSpan; } }\r\n        private Text.Span entireDeclarationSpan;\r\n\r\n        public int HeadingEndPosition { get { return headingEndPosition; } }\r\n        private int headingEndPosition;\r\n\r\n        public int DeclarationBodyPosition { get { return declarationBodyPosition; } }\r\n        private int declarationBodyPosition;\r\n\r\n\t\t#region Construction\r\n\r\n        public MethodDecl(Text.Span span, Text.Span entireDeclarationPosition, int headingEndPosition, int declarationBodyPosition, \r\n\t\t\tstring name, bool aliasReturn, IList<FormalParam>/*!*/ formalParams, IList<FormalTypeParam>/*!*/ genericParams, \r\n\t\t\tIList<Statement> body, PhpMemberAttributes modifiers, IList<ActualParam> baseCtorParams, \r\n\t\t\tList<CustomAttribute> attributes)\r\n            : base(span, attributes)\r\n        {\r\n            Debug.Assert(genericParams != null && formalParams != null);\r\n\r\n            this.modifiers = modifiers;\r\n            this.name = new Name(name);\r\n            this.signature = new Signature(aliasReturn, formalParams);\r\n            this.typeSignature = new TypeSignature(genericParams);\r\n            this.body = (body != null) ? body.AsArray() : null;\r\n            this.baseCtorParams = (baseCtorParams != null) ? baseCtorParams.AsArray() : null;\r\n            this.entireDeclarationSpan = entireDeclarationPosition;\r\n            this.headingEndPosition = headingEndPosition;\r\n            this.declarationBodyPosition = declarationBodyPosition;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitMethodDecl(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region Fields\r\n\r\n\t/// <summary>\r\n\t/// Represents a field multi-declaration.\r\n\t/// </summary>\r\n\t/// <remarks>\r\n\t/// Is derived from LangElement because we need position to report field_in_interface error.\r\n\t/// Else we would have to test ClassType in every FieldDecl and not only in FildDeclList\r\n\t/// </remarks>\r\n    [Serializable]\r\n\tpublic sealed class FieldDeclList : TypeMemberDecl\r\n\t{\r\n\t\tprivate readonly List<FieldDecl>/*!*/ fields;\r\n        /// <summary>List of fields in this list</summary>\r\n        public List<FieldDecl> Fields/*!*/ { get { return fields; } }\r\n\r\n        public override Text.Span EntireDeclarationSpan { get { return this.Span; } }\r\n\r\n\t\tpublic FieldDeclList(Text.Span span, PhpMemberAttributes modifiers, List<FieldDecl>/*!*/ fields,\r\n\t\t\tList<CustomAttribute> attributes)\r\n            : base(span, attributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(fields != null);\r\n\r\n\t\t\tthis.modifiers = modifiers;\r\n\t\t\tthis.fields = fields;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFieldDeclList(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Represents a field declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class FieldDecl : LangElement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the field.\r\n\t\t/// </summary>\r\n\t\tpublic VariableName Name { get { return name; } }\r\n\t\tprivate VariableName name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initial value of the field represented by compile time evaluated expression.\r\n\t\t/// After analysis represented by Literal or ConstantUse or ArrayEx with constant parameters.\r\n\t\t/// Can be null.\r\n\t\t/// </summary>\r\n\t\tprivate Expression initializer;\r\n        /// <summary>\r\n        /// Initial value of the field represented by compile time evaluated expression.\r\n        /// After analysis represented by Literal or ConstantUse or ArrayEx with constant parameters.\r\n        /// Can be null.\r\n        /// </summary>\r\n        public Expression Initializer { get { return initializer; } internal set { initializer = value; } }\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Determines whether the field has an initializer.\r\n\t\t/// </summary>\r\n\t\tpublic bool HasInitVal { get { return initializer != null; } }\r\n\r\n\t\tpublic FieldDecl(Text.Span span, string/*!*/ name, Expression initVal)\r\n            : base(span)\r\n\t\t{\r\n\t\t\tthis.name = new VariableName(name);\r\n\t\t\tthis.initializer = initVal;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitFieldDecl(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Class constants\r\n\r\n\t/// <summary>\r\n\t/// Represents a class constant declaration.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class ConstDeclList : TypeMemberDecl\r\n\t{\r\n\t\t/// <summary>List of constants in this list</summary>\r\n        public List<ClassConstantDecl>/*!*/ Constants { get { return constants; } }\r\n        private readonly List<ClassConstantDecl>/*!*/ constants;\r\n\r\n        public override Text.Span EntireDeclarationSpan { get { return this.Span; } }\r\n        \r\n\t\tpublic ConstDeclList(Text.Span span, List<ClassConstantDecl>/*!*/ constants, List<CustomAttribute> attributes)\r\n            : base(span, attributes)\r\n\t\t{\r\n\t\t\tDebug.Assert(constants != null);\r\n\r\n\t\t\tthis.constants = constants;\r\n\r\n\t\t\t//class constants never have modifiers\r\n\t\t\tmodifiers = PhpMemberAttributes.Public;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitConstDeclList(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"PHPDocBlock\"/> instance or <c>null</c> reference.\r\n        /// </summary>\r\n        public PHPDocBlock PHPDoc\r\n        {\r\n            get { return this.GetPHPDoc(); }\r\n            set { this.SetPHPDoc(value); }\r\n        }\r\n\t}\r\n\r\n    [Serializable]\r\n\tpublic sealed class ClassConstantDecl : ConstantDecl\r\n\t{\r\n        public ClassConstantDecl(Text.Span span, string/*!*/ name, Expression/*!*/ initializer)\r\n            : base(span, name, initializer)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitClassConstantDecl(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region Traits\r\n\r\n    /// <summary>\r\n    /// Represents class traits usage.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class TraitsUse : TypeMemberDecl\r\n    {\r\n        #region TraitAdaptation, TraitAdaptationPrecedence, TraitAdaptationAlias\r\n\r\n        [Serializable]\r\n        public abstract class TraitAdaptation : LangElement\r\n        {\r\n            /// <summary>\r\n            /// Name of existing trait member. Its qualified name is optional.\r\n            /// </summary>\r\n            public Tuple<QualifiedName?, Name> TraitMemberName { get; private set; }\r\n\r\n            public TraitAdaptation(Text.Span span, Tuple<QualifiedName?, Name> traitMemberName)\r\n                : base(span)\r\n            {\r\n                this.TraitMemberName = traitMemberName;                \r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Trait usage adaptation specifying a member which will be preferred over specified ambiguities.\r\n        /// </summary>\r\n        [Serializable]\r\n        public sealed class TraitAdaptationPrecedence : TraitAdaptation\r\n        {\r\n            /// <summary>\r\n            /// List of types which member <see cref=\"TraitAdaptation.TraitMemberName\"/>.<c>Item2</c> will be ignored.\r\n            /// </summary>\r\n            public List<QualifiedName>/*!*/IgnoredTypes { get; private set; }\r\n\r\n            public TraitAdaptationPrecedence(Text.Span span, Tuple<QualifiedName?, Name> traitMemberName, List<QualifiedName>/*!*/ignoredTypes)\r\n                : base(span, traitMemberName)\r\n            {\r\n                this.IgnoredTypes = ignoredTypes;\r\n            }\r\n\r\n            public override void VisitMe(TreeVisitor visitor)\r\n            {\r\n                visitor.VisitTraitAdaptationPrecedence(this);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Trait usage adaptation which aliases a trait member.\r\n        /// </summary>\r\n        [Serializable]\r\n        public sealed class TraitAdaptationAlias : TraitAdaptation\r\n        {\r\n            /// <summary>\r\n            /// Optionally new member visibility attributes.\r\n            /// </summary>\r\n            public PhpMemberAttributes? NewModifier { get; private set; }\r\n\r\n            /// <summary>\r\n            /// Optionally new member name. Can be <c>null</c>.\r\n            /// </summary>\r\n            public string NewName { get; private set; }\r\n\r\n            public TraitAdaptationAlias(Text.Span span, Tuple<QualifiedName?, Name>/*!*/oldname, string newname, PhpMemberAttributes? newmodifier)\r\n                : base(span, oldname)\r\n            {\r\n                if (oldname == null)\r\n                    throw new ArgumentNullException(\"oldname\");\r\n\r\n                this.NewName = newname;\r\n                this.NewModifier = newmodifier;\r\n            }\r\n\r\n            public override void VisitMe(TreeVisitor visitor)\r\n            {\r\n                visitor.VisitTraitAdaptationAlias(this);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// List of trait types to be used.\r\n        /// </summary>\r\n        public List<QualifiedName>/*!*/TraitsList { get { return traitsList; } }\r\n        private readonly List<QualifiedName>/*!*/traitsList;\r\n\r\n        /// <summary>\r\n        /// List of trait adaptations modifying names of trait members. Can be <c>null</c> reference.\r\n        /// </summary>\r\n        public List<TraitAdaptation> TraitAdaptationList { get { return traitAdaptationList; } }\r\n        private readonly List<TraitAdaptation> traitAdaptationList;\r\n\r\n        /// <summary>\r\n        /// Gets a value indicating whether there is a block (even empty) of trait adaptations.\r\n        /// </summary>\r\n        public bool HasTraitAdaptationBlock { get { return this.traitAdaptationList != null; } }\r\n\r\n        /// <summary>\r\n        /// Position where traits list ends.\r\n        /// </summary>\r\n        public int HeadingEndPosition { get { return headingEndPosition; } }\r\n        private readonly int headingEndPosition;\r\n\r\n        public override Text.Span EntireDeclarationSpan { get { return this.Span; } }\r\n\r\n        public TraitsUse(Text.Span span, int headingEndPosition, List<QualifiedName>/*!*/traitsList, List<TraitAdaptation> traitAdaptationList)\r\n            : base(span, null)\r\n        {\r\n            if (traitsList == null)\r\n                throw new ArgumentNullException(\"traitsList\");\r\n\r\n            this.traitsList = traitsList;\r\n            this.traitAdaptationList = traitAdaptationList;\r\n            this.headingEndPosition = headingEndPosition;\r\n        }\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitTraitsUse(this);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/TypeRef.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek and Vaclav Novak.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing System.Diagnostics;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region TypeRef\r\n\r\n\t/// <summary>\r\n\t/// Represents a use of a class name.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class TypeRef : LangElement\r\n\t{\r\n        /// <summary>\r\n        /// Immutable empty list of <see cref=\"TypeRef\"/>.\r\n        /// </summary>\r\n\t\tinternal static readonly List<TypeRef>/*!*/ EmptyList = new List<TypeRef>();\r\n\r\n        /// <summary>\r\n        /// List of generic parameters.\r\n        /// </summary>\r\n        public List<TypeRef>/*!*/ GenericParams\r\n        {\r\n            get\r\n            {\r\n                return this.Properties[GenericParamsPropertyKey] as List<TypeRef> ?? TypeRef.EmptyList;\r\n            }\r\n            private set\r\n            {\r\n                if (value != null && value.Count > 0)\r\n                    this.Properties[GenericParamsPropertyKey] = value;\r\n                else\r\n                    this.Properties.RemoveProperty(GenericParamsPropertyKey);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Key to property collection to get/store generic parameters list.\r\n        /// </summary>\r\n        private const string GenericParamsPropertyKey = \"GenericParams\";\r\n\r\n        public GenericQualifiedName GenericQualifiedName\r\n        {\r\n            get\r\n            {\r\n                return new GenericQualifiedName(this.QualifiedName, ToStaticTypeRefs(this.GenericParams, null, null));\r\n            }\r\n        }\r\n\r\n        internal abstract QualifiedName QualifiedName { get; }\r\n\r\n        public TypeRef(Text.Span span, List<TypeRef> genericParams)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tthis.GenericParams = genericParams;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Gets the static type reference or <B>null</B> if the reference cannot be resolved at compile time.\r\n\t\t/// </summary>\r\n\t\tinternal abstract object ToStaticTypeRef(ErrorSink errors, SourceUnit sourceUnit);\r\n\r\n\t\tinternal static object[]/*!!*/ ToStaticTypeRefs(List<TypeRef>/*!*/ typeRefs, ErrorSink errors, SourceUnit sourceUnit)\r\n\t\t{\r\n            if (typeRefs == null || typeRefs.Count == 0)\r\n                return ArrayUtils.EmptyObjects;\r\n\r\n\t\t\tobject[] result = new object[typeRefs.Count];\r\n\r\n\t\t\tfor (int i = 0; i < typeRefs.Count; i++)\r\n\t\t\t{\r\n                if ((result[i] = typeRefs[i].ToStaticTypeRef(errors, sourceUnit)) == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (errors != null)\r\n                        errors.Add(Errors.GenericParameterMustBeType, sourceUnit, typeRefs[i].Span);\r\n\r\n\t\t\t\t\tresult[i] = new PrimitiveTypeName(QualifiedName.Object);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region PrimitiveTypeRef\r\n\r\n\t/// <summary>\r\n\t/// Primitive type reference.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic sealed class PrimitiveTypeRef : TypeRef\r\n\t{\r\n        private PrimitiveTypeName typeName;\r\n\r\n\t\tpublic PrimitiveTypeRef(Text.Span span, PrimitiveTypeName name)\r\n\t\t\t: base(span, null)\r\n\t\t{\r\n            this.typeName = name;\r\n\t\t}\r\n\r\n\t\tinternal override object ToStaticTypeRef(ErrorSink errors, SourceUnit sourceUnit)\r\n\t\t{\r\n\t\t\treturn typeName;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitPrimitiveTypeRef(this);\r\n        }\r\n\r\n        internal override QualifiedName QualifiedName\r\n        {\r\n            get { return this.typeName.QualifiedName; }\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region DirectTypeRef\r\n\r\n\t/// <summary>\r\n\t/// Direct use of class name.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class DirectTypeRef : TypeRef\r\n\t{\r\n\t\tpublic QualifiedName ClassName { get { return className; } }\r\n\t\tprivate QualifiedName className;\r\n\r\n\t\tinternal override QualifiedName QualifiedName\r\n        {\r\n            get { return this.ClassName; }\r\n        }\r\n\r\n        internal override object ToStaticTypeRef(ErrorSink/*!*/ errors, SourceUnit/*!*/ sourceUnit)\r\n\t\t{\r\n\t\t\treturn new GenericQualifiedName(className, TypeRef.ToStaticTypeRefs(GenericParams, errors, sourceUnit));\r\n\t\t}\r\n\r\n        public DirectTypeRef(Text.Span span, QualifiedName className, List<TypeRef>/*!*/ genericParams)\r\n\t\t\t: base(span, genericParams)\r\n\t\t{\r\n\t\t\tthis.className = className;\r\n\t\t}\r\n\r\n        internal static DirectTypeRef/*!*/FromGenericQualifiedName(Text.Span span, GenericQualifiedName genericQualifiedName)\r\n        {\r\n            List<TypeRef> genericParams;\r\n\r\n            if (genericQualifiedName.IsGeneric)\r\n            {\r\n                genericParams = new List<TypeRef>(genericQualifiedName.GenericParams.Length);\r\n                foreach (var obj in genericQualifiedName.GenericParams)\r\n                {\r\n                    TypeRef objtype;\r\n                    if (obj is GenericQualifiedName) objtype = FromGenericQualifiedName(Text.Span.Invalid, (GenericQualifiedName)obj);\r\n                    else if (obj is PrimitiveTypeName) objtype = new PrimitiveTypeRef(Text.Span.Invalid, (PrimitiveTypeName)obj);\r\n                    else objtype = new PrimitiveTypeRef(Text.Span.Invalid, new PrimitiveTypeName(QualifiedName.Object));\r\n\r\n                    genericParams.Add(objtype);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                //if (genericQualifiedName.QualifiedName.IsPrimitiveTypeName)\r\n                //    return new PrimitiveTypeRef(position, new PrimitiveTypeName(genericQualifiedName.QualifiedName));\r\n\r\n                genericParams = TypeRef.EmptyList;\r\n            }\r\n\r\n            return new DirectTypeRef(span, genericQualifiedName.QualifiedName, genericParams.ToList());\r\n        }\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitDirectTypeRef(this);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            var other = obj as DirectTypeRef;\r\n            if (other == null)\r\n                return false;\r\n\r\n            return this.QualifiedName.Equals(other.QualifiedName);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return this.QualifiedName.GetHashCode();\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region IndirectTypeRef\r\n\r\n\t/// <summary>\r\n\t/// Indirect use of class name (through variable).\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class IndirectTypeRef : TypeRef\r\n\t{\r\n\t\t/// <summary>\r\n        /// <see cref=\"VariableUse\"/> which value in runtime contains the name of the type.\r\n        /// </summary>\r\n        public VariableUse/*!*/ ClassNameVar { get { return this.classNameVar; } }\r\n        private readonly VariableUse/*!*/ classNameVar;\r\n\r\n        internal override QualifiedName QualifiedName\r\n        {\r\n            get { return new QualifiedName(Name.EmptyBaseName); }\r\n        }\r\n\r\n\t\tpublic IndirectTypeRef(Text.Span span, VariableUse/*!*/ classNameVar, List<TypeRef>/*!*/ genericParams)\r\n\t\t\t: base(span, genericParams)\r\n\t\t{\r\n\t\t\tDebug.Assert(classNameVar != null && genericParams != null);\r\n\r\n\t\t\tthis.classNameVar = classNameVar;\r\n\t\t}\r\n\r\n        internal override object ToStaticTypeRef(ErrorSink errors, SourceUnit sourceUnit)\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitIndirectTypeRef(this);\r\n        }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/UnaryEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t/// <summary>\r\n\t/// Unary expression.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public sealed class UnaryEx : Expression\r\n    {\r\n        #region Fields & Properties\r\n\r\n        public override Operations Operation { get { return operation; } }\r\n\t\tprivate Operations operation;\r\n\r\n\t\t/// <summary>Expression the operator is applied on</summary>\r\n        public Expression /*!*/ Expr { get { return expr; } internal set { expr = value; } }\r\n        private Expression/*!*/ expr;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public UnaryEx(Text.Span span, Operations operation, Expression/*!*/ expr)\r\n\t\t\t: base(span)\r\n\t\t{\r\n\t\t\tDebug.Assert(expr != null);\r\n\t\t\tthis.operation = operation;\r\n\t\t\tthis.expr = expr;\r\n\t\t}\r\n\r\n\t\tpublic UnaryEx(Operations operation, Expression/*!*/ expr)\r\n\t\t\t: this(Text.Span.Invalid, operation, expr)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        /// <summary>\r\n        /// Call the right Visit* method on the given Visitor object.\r\n        /// </summary>\r\n        /// <param name=\"visitor\">Visitor to be called.</param>\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitUnaryEx(this);\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/AST/VariableUse.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006- DEVSENSE\r\n Copyright (c) 2004-2006 Tomas Matousek, Ladislav Prosek, Vaclav Novak and Martin Maly.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n\t#region VariableUse\r\n\r\n\t/// <summary>\r\n\t/// Base class for variable uses.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic abstract class VariableUse : VarLikeConstructUse\r\n\t{\r\n\t\tprotected VariableUse(Text.Span p) : base(p) { }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region CompoundVarUse\r\n\r\n\t/// <summary>\r\n\t/// Base class for compound variable uses.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class CompoundVarUse : VariableUse\r\n\t{\r\n\t\tprotected CompoundVarUse(Text.Span p) : base(p) { }\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region SimpleVarUse\r\n\r\n\t/// <summary>\r\n\t/// Base class for simple variable uses.\r\n\t/// </summary>\r\n    [Serializable]\r\n    public abstract class SimpleVarUse : CompoundVarUse\r\n\t{\r\n        protected SimpleVarUse(Text.Span p) : base(p) { }\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AST/YieldEx.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    /// <summary>\r\n    /// Represents <c>yield</c> expression for the support for PHP Generator.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class YieldEx : Expression\r\n    {\r\n        #region Fields & Properties\r\n\r\n        public override Operations Operation { get { return Operations.Yield; } }\r\n\r\n        /// <summary>\r\n        /// Represents the key expression in case of <c>yield key =&gt; value</c> form.\r\n        /// Can be a <c>null</c> reference in case of key is not provided.\r\n        /// </summary>\r\n        public Expression KeyExpr { get { return _keyEx; } }\r\n\r\n        /// <summary>\r\n        /// Represents the value expression in case of <c>yield key =&gt; value</c> or <c>yield value</c> forms.\r\n        /// Can be a <c>null</c> reference in case of yield is used in read context. (see Generator::send()).\r\n        /// </summary>\r\n        public Expression ValueExpr { get { return _valueEx; } }\r\n\r\n        /// <summary>\r\n        /// <c>yield</c> parameters.\r\n        /// </summary>\r\n        private Expression _keyEx, _valueEx;\r\n\r\n        #endregion\r\n\r\n        #region Initialization\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"YieldEx\"/>.\r\n        /// </summary>\r\n        public YieldEx(Text.Span span)\r\n            : this(span, null, null)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"YieldEx\"/>.\r\n        /// </summary>\r\n        public YieldEx(Text.Span span, Expression keyEx, Expression valueEx)\r\n            : base(span)\r\n        {\r\n            if (keyEx != null && valueEx == null) throw new ArgumentException();\r\n\r\n            _keyEx = keyEx;\r\n            _valueEx = valueEx;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region LangElement\r\n\r\n        public override void VisitMe(TreeVisitor visitor)\r\n        {\r\n            visitor.VisitYieldEx(this);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/AssemblyResources.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Resources;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Manages resources of the Core.\r\n\t/// </summary>\r\n    [DebuggerNonUserCode]\r\n    public class CoreResources : PHP.Core.Localizations.Strings\r\n\t{\r\n        /// <summary>\r\n        /// Resource manager of strings.\r\n        /// </summary>\r\n        static ResourceManager strings\r\n        {\r\n            get\r\n            {\r\n                return PHP.Core.Localizations.Strings.ResourceManager;\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <returns>The string.</returns>\r\n\t\tpublic static string GetString(string id)\r\n\t\t{\r\n\t\t\treturn strings.GetString(id);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"args\">An <see cref=\"System.Object\"/> array containing zero or more objects to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, params object[] args)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), args);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg1\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg2\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg1, object arg2)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg1, arg2);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves formatted string resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"id\">The string identifier.</param>\r\n\t\t/// <param name=\"arg1\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg2\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <param name=\"arg3\">An <see cref=\"System.Object\"/> to format.</param>\r\n\t\t/// <returns>The formatted string resource.</returns>\r\n\t\t/// <exception cref=\"ArgumentNullException\">The string resource with <paramref name=\"id\"/> doesn't exist.</exception>\r\n\t\t/// <exception cref=\"FormatException\">The string resource is not valid formatting string for specified arguments.</exception>\r\n\t\tpublic static string GetString(string id, object arg1, object arg2, object arg3)\r\n\t\t{\r\n\t\t\treturn String.Format(strings.GetString(id), arg1, arg2, arg3);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Core.Parsers.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectGuid>{581F1486-5062-459E-BAE6-A41886584F81}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Core</RootNamespace>\r\n    <AssemblyName>PhpNet.Core.Parsers</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SignAssembly>true</SignAssembly>\r\n    <AssemblyOriginatorKeyFile>..\\Core\\Core.snk</AssemblyOriginatorKeyFile>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyResources.cs\" />\r\n    <Compile Include=\"AST\\ArrayEx.cs\" />\r\n    <Compile Include=\"AST\\AssignEx.cs\" />\r\n    <Compile Include=\"AST\\BinaryEx.cs\" />\r\n    <Compile Include=\"AST\\BuiltInFunctions.cs\" />\r\n    <Compile Include=\"AST\\CallSignature.cs\" />\r\n    <Compile Include=\"AST\\ConcatEx.cs\" />\r\n    <Compile Include=\"AST\\ConstantUse.cs\" />\r\n    <Compile Include=\"AST\\CustomAttributes.cs\" />\r\n    <Compile Include=\"AST\\DirectVariableUse.cs\" />\r\n    <Compile Include=\"AST\\EchoStmt.cs\" />\r\n    <Compile Include=\"AST\\Expression.cs\" />\r\n    <Compile Include=\"AST\\FieldUse.cs\" />\r\n    <Compile Include=\"AST\\FunctionCall.cs\" />\r\n    <Compile Include=\"AST\\FunctionDecl.cs\" />\r\n    <Compile Include=\"AST\\GlobalCode.cs\" />\r\n    <Compile Include=\"AST\\IfStmt.cs\" />\r\n    <Compile Include=\"AST\\IncDecEx.cs\" />\r\n    <Compile Include=\"AST\\IndirectVariableUse.cs\" />\r\n    <Compile Include=\"AST\\ItemUse.cs\" />\r\n    <Compile Include=\"AST\\JumpStmt.cs\" />\r\n    <Compile Include=\"AST\\LambdaFunctionExpr.cs\" />\r\n    <Compile Include=\"AST\\LangElement.cs\" />\r\n    <Compile Include=\"AST\\ListEx.cs\" />\r\n    <Compile Include=\"AST\\Literal.cs\" />\r\n    <Compile Include=\"AST\\LoopStmt.cs\" />\r\n    <Compile Include=\"AST\\NewAndInstanceof.cs\" />\r\n    <Compile Include=\"AST\\ShellEx.cs\" />\r\n    <Compile Include=\"AST\\Statement.cs\" />\r\n    <Compile Include=\"AST\\SwitchStmt.cs\" />\r\n    <Compile Include=\"AST\\TernaryEx.cs\" />\r\n    <Compile Include=\"AST\\TryStmt.cs\" />\r\n    <Compile Include=\"AST\\TypeDecl.cs\" />\r\n    <Compile Include=\"AST\\TypeRef.cs\" />\r\n    <Compile Include=\"AST\\UnaryEx.cs\" />\r\n    <Compile Include=\"AST\\VariableUse.cs\" />\r\n    <Compile Include=\"AST\\YieldEx.cs\" />\r\n    <Compile Include=\"Parsers\\DocCommentList.cs\" />\r\n    <Compile Include=\"Text\\Span.cs\" />\r\n    <Compile Include=\"Text\\TextSpan.cs\" />\r\n    <Compile Include=\"Text\\TextPoint.cs\" />\r\n    <Compile Include=\"Text\\TextUtils.cs\" />\r\n    <Compile Include=\"Errors.cs\" />\r\n    <Compile Include=\"Generated\\Lexer.cs\" />\r\n    <Compile Include=\"Generated\\Parser.cs\" />\r\n    <Compile Include=\"InclusionTypes.cs\" />\r\n    <Compile Include=\"LanguageFeatures.cs\" />\r\n    <Compile Include=\"Members.cs\" />\r\n    <Compile Include=\"Names.cs\" />\r\n    <Compile Include=\"Parsers\\GPPG.cs\" />\r\n    <Compile Include=\"Parsers\\Lexer.cs\" />\r\n    <Compile Include=\"Parsers\\Parser.cs\" />\r\n    <Compile Include=\"Parsers\\Scanner.cs\" />\r\n    <Compile Include=\"Parsers\\Tokenizer.cs\" />\r\n    <Compile Include=\"Parsers\\Tokens.cs\" />\r\n    <Compile Include=\"Parsers\\Convert.cs\" />\r\n    <Compile Include=\"PHPDocBlock.cs\" />\r\n    <Compile Include=\"PhpSourceFile.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"PropertyCollection.cs\" />\r\n    <Compile Include=\"SourceUnit.cs\" />\r\n    <Compile Include=\"Strings.Designer.cs\">\r\n      <DependentUpon>Strings.resx</DependentUpon>\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <Compile Include=\"Text\\ILineBreaks.cs\" />\r\n    <Compile Include=\"TreeVisitor.cs\" />\r\n    <Compile Include=\"Utils.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Core.Parsers.nuspec\" />\r\n    <None Include=\"Generators\\Generate.cmd\" />\r\n    <None Include=\"Generators\\Lexer.lex\" />\r\n    <None Include=\"Generators\\Parser.y\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Strings.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Strings.Designer.cs</LastGenOutput>\r\n      <CustomToolNamespace>PHP.Core.Localizations</CustomToolNamespace>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Core.Parsers/Core.Parsers.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Core.Parsers/Errors.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Configuration;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region Enums: WarningGroups, ErrorSeverity\r\n\r\n    /// <summary>\r\n    /// Compiler warning groups.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum WarningGroups\r\n    {\r\n        None = 0,\r\n\r\n        // DeferredToRuntime group:\r\n        InclusionsMapping = 1,\r\n        DeferredToRuntimeOthers = 2,\r\n        DeferredToRuntime = InclusionsMapping | DeferredToRuntimeOthers,\r\n\r\n        // CompilerStrict group:\r\n        AmpModifiers = 4,\r\n        CompilerStrictOthers = 8,\r\n        CompilerStrict = AmpModifiers | CompilerStrictOthers\r\n    }\r\n\r\n    [Serializable]\r\n    public struct ErrorSeverity\r\n    {\r\n        public enum Values\r\n        {\r\n            Warning, Error, FatalError, WarningAsError\r\n        }\r\n\r\n        public static readonly ErrorSeverity Warning = new ErrorSeverity(Values.Warning);\r\n        public static readonly ErrorSeverity Error = new ErrorSeverity(Values.Error);\r\n        public static readonly ErrorSeverity FatalError = new ErrorSeverity(Values.FatalError);\r\n        public static readonly ErrorSeverity WarningAsError = new ErrorSeverity(Values.WarningAsError);\r\n\r\n        public Values Value { get { return value; } }\r\n        private readonly Values value;\r\n\r\n        public bool IsFatal\r\n        {\r\n            get { return value == Values.FatalError; }\r\n        }\r\n\r\n        private ErrorSeverity(Values value)\r\n        {\r\n            this.value = value;\r\n        }\r\n\r\n        public string ToCmdString()\r\n        {\r\n            return (value == Values.Warning) ? \"warning\" : \"error\";\r\n        }\r\n\r\n        public static implicit operator int(ErrorSeverity severity)\r\n        {\r\n            return (int)severity.value;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ShortPosition\r\n\r\n    /// <summary>\r\n    /// Position of declarations stored in tables. Used for composing error messages.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// All declarations from included script have the same number.\r\n    /// </remarks>\r\n    public struct ShortPosition\r\n    {\r\n        public int Line;\r\n        public int Column;\r\n\r\n        /// <summary>\r\n        /// Constructs new position.\r\n        /// </summary>\r\n        /// <param name=\"line\">Line number.</param>\r\n        /// <param name=\"column\">Column number.</param>\r\n        public ShortPosition(int line, int column)\r\n        {\r\n            this.Line = line;\r\n            this.Column = column;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Constructs new position.\r\n        /// </summary>\r\n        /// <param name=\"position\">Position within document.</param>\r\n        public ShortPosition(Text.TextPoint position)\r\n            :this(position.Line, position.Column)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns string representation of the position - \"(_line_,_column_)\" or empty string for invalid position.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public override string ToString()\r\n        {\r\n            if (!IsValid)\r\n                // empty position\r\n                return String.Empty;\r\n\r\n            return string.Concat('(', Line.ToString(), ',', Column.ToString(), ')');\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the position that indicates invalid positon.\r\n        /// </summary>\r\n        public static ShortPosition Invalid = new ShortPosition(-1, -1);\r\n\r\n        /// <summary>\r\n        /// Tests whether the position is valid.\r\n        /// </summary>\r\n        /// <returns>True if the position is valid.</returns>\r\n        public bool IsValid\r\n        {\r\n            get { return Line != -1; }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ErrorPosition\r\n\r\n    [Serializable]\r\n    public struct ErrorPosition\r\n    {\r\n        /// <summary>\r\n        /// First line of the error, indexed from 1.\r\n        /// </summary>\r\n        public int FirstLine;\r\n        /// <summary>\r\n        /// First column of the error, indexed from 1.\r\n        /// </summary>\r\n        public int FirstColumn;\r\n        /// <summary>\r\n        /// Last line of the error, indexed from 1.\r\n        /// </summary>\r\n        public int LastLine;\r\n        /// <summary>\r\n        /// Last column of the error, indexed from 1.\r\n        /// </summary>\r\n        public int LastColumn;\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"ErrorPosition\"/>.\r\n        /// </summary>\r\n        /// <param name=\"firstLine\">First line of the error, indexed from 1.</param>\r\n        /// <param name=\"firstColumn\">First column of the error, indexed from 1.</param>\r\n        /// <param name=\"lastLine\">Last line of the error, indexed from 1.</param>\r\n        /// <param name=\"lastColumn\">Last column of the error, indexed from 1.</param>\r\n        public ErrorPosition(int firstLine, int firstColumn, int lastLine, int lastColumn)\r\n        {\r\n            this.FirstLine = firstLine;\r\n            this.FirstColumn = firstColumn;\r\n            this.LastLine = lastLine;\r\n            this.LastColumn = lastColumn;\r\n        }\r\n\r\n        /// <summary>\r\n        /// An invalid <see cref=\"ErrorPosition\"/> singleton.\r\n        /// </summary>\r\n        public static ErrorPosition Invalid = new ErrorPosition(-1, -1, -1, -1);\r\n\r\n        /// <summary>\r\n        /// Whether \r\n        /// </summary>\r\n        public bool IsValid\r\n        {\r\n            get { return FirstLine != -1; }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Exceptions\r\n\r\n    /// <summary>\r\n    /// Thrown on fatal error.\r\n    /// </summary>\r\n    internal class CompilerException : ApplicationException\r\n    {\r\n        public ErrorInfo ErrorInfo { get { return errorInfo; } }\r\n        private readonly ErrorInfo errorInfo;\r\n\r\n        public string[]/*!*/ ErrorParams { get { return errorParams; } }\r\n        private readonly string[]/*!*/ errorParams;\r\n\r\n        internal CompilerException()\r\n        {\r\n            errorInfo = FatalErrors.InternalError;\r\n            errorParams = ArrayUtils.EmptyStrings;\r\n        }\r\n\r\n        internal CompilerException(ErrorInfo errorInfo, params string[]/*!*/ errorParams)\r\n        {\r\n            Debug.Assert(errorParams != null);\r\n\r\n            this.errorInfo = errorInfo;\r\n            this.errorParams = errorParams;\r\n        }\r\n        /// <summary>CTor from <see cref=\"ErrorInfo\"/>, inner exception and parameters</summary>\r\n        /// <param name=\"errorInfo\">Information about error</param>\r\n        /// <param name=\"innerException\">Exception that caused this exception to be thrown</param>\r\n        /// <param name=\"errorParams\">Error parameters</param>\r\n        internal CompilerException(ErrorInfo errorInfo, Exception innerException, params string[]/*!*/ errorParams)\r\n            : base(errorInfo.ToString(), innerException)\r\n        {\r\n            Debug.Assert(errorParams != null);\r\n\r\n            this.errorInfo = errorInfo;\r\n            this.errorParams = errorParams;\r\n        }\r\n\r\n        internal CompilerException(string message)\r\n            : base(message)\r\n        {\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown if an assembly being reflected has invalid format.\r\n    /// </summary>\r\n    public sealed class ReflectionException : Exception\r\n    {\r\n        internal ReflectionException(string/*!*/ message)\r\n            : base(message)\r\n        {\r\n\r\n        }\r\n\r\n        public ReflectionException(string/*!*/ message, Exception/*!*/ inner)\r\n            : base(message, inner)\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Thrown if a source file/directory cannot be read.\r\n    /// </summary>\r\n    public sealed class InvalidSourceException : Exception\r\n    {\r\n        public FullPath Path { get { return path; } }\r\n        private FullPath path;\r\n\r\n        internal InvalidSourceException(FullPath path, Exception/*!*/ inner)\r\n            : base(null, inner)\r\n        {\r\n            this.path = path;\r\n        }\r\n\r\n        public InvalidSourceException(FullPath path, string message)\r\n            : base(message)\r\n        {\r\n            this.path = path;\r\n        }\r\n\r\n        public void Report(ErrorSink/*!*/ errorSink)\r\n        {\r\n            if (errorSink == null)\r\n                throw new ArgumentNullException(\"errorSink\");\r\n\r\n            errorSink.Add(FatalErrors.InvalidSource, path, ErrorPosition.Invalid,\r\n                InnerException != null ? InnerException.Message : this.Message);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ErrorInfo\r\n\r\n    /// <summary>\r\n    /// Represents an error reported by the compiler.\r\n    /// </summary>\r\n    public struct ErrorInfo\r\n    {\r\n        /// <summary>\r\n        /// Error unique id.\r\n        /// </summary>\r\n        public int Id { get { return id; } }\r\n        private readonly int id;\r\n\r\n        /// <summary>\r\n        /// Error group.\r\n        /// </summary>\r\n        public int Group { get { return group; } set { group = value; } }\r\n        private int group;\r\n\r\n        /// <summary>\r\n        /// Message resource id.\r\n        /// </summary>\r\n        public string MessageId { get { return messageId; } }\r\n        private readonly string messageId;\r\n\r\n        /// <summary>\r\n        /// Error severity.\r\n        /// </summary>\r\n        public ErrorSeverity Severity { get { return severity; } }\r\n        private readonly ErrorSeverity severity;\r\n\r\n        public ErrorInfo(int id, string messageId, ErrorSeverity severity)\r\n        {\r\n            this.id = id;\r\n            this.messageId = messageId;\r\n            this.severity = severity;\r\n            this.group = (int)WarningGroups.None;\r\n        }\r\n\r\n        public ErrorInfo(int id, string messageId, WarningGroups group)\r\n        {\r\n            this.id = id;\r\n            this.messageId = messageId;\r\n            this.severity = ErrorSeverity.Warning;\r\n            this.group = (int)group;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Error Sinks\r\n\r\n    public abstract class ErrorSink : MarshalByRefObject\r\n    {\r\n        public WarningGroups DisabledGroups { get { return disabledGroups; } set { disabledGroups = value; } }\r\n        private WarningGroups disabledGroups;\r\n\r\n        public int[]/*!*/ DisabledWarnings\r\n        {\r\n            get { return disabledWarnings; }\r\n            set { if (value == null) throw new ArgumentNullException(\"value\"); disabledWarnings = value; }\r\n        }\r\n        private int[]/*!*/ disabledWarnings;\r\n\r\n        /// <summary>\r\n        /// Whether to treat warnings as errors.\r\n        /// </summary>\r\n        public bool TreatWarningsAsErrors { get; set; }\r\n\r\n        public ErrorSink()\r\n            : this(WarningGroups.None, ArrayUtils.EmptyIntegers)\r\n        {\r\n        }\r\n\r\n        public ErrorSink(WarningGroups disabledGroups, int[]/*!*/ disabledWarnings)\r\n        {\r\n            if (disabledWarnings == null)\r\n                throw new ArgumentNullException(\"disabledWarnings\");\r\n\r\n            this.disabledGroups = disabledGroups;\r\n            this.disabledWarnings = disabledWarnings;\r\n        }\r\n\r\n        #region Error Counter\r\n\r\n        public int FatalErrorCount { get { return counts[ErrorSeverity.FatalError]; } }\r\n        public int ErrorCount { get { return counts[ErrorSeverity.Error]; } }\r\n        public int WarningCount { get { return counts[ErrorSeverity.Warning]; } }\r\n        public int WarningAsErrorCount { get { return counts[ErrorSeverity.WarningAsError]; } }\r\n\r\n        public bool AnyError\r\n        {\r\n            get\r\n            {\r\n                return counts[ErrorSeverity.Error] + counts[ErrorSeverity.FatalError] + counts[ErrorSeverity.WarningAsError] > 0;\r\n            }\r\n        }\r\n\r\n        public bool AnyFatalError\r\n        {\r\n            get { return counts[ErrorSeverity.FatalError] > 0; }\r\n        }\r\n\r\n        private int[] counts = { 0, 0, 0, 0 };\r\n\r\n        #endregion\r\n\r\n        #region Add Overloads\r\n\r\n        internal void Add(ErrorInfo info, SourceUnit sourceUnit, Text.Span pos)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId), sourceUnit, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, SourceUnit sourceUnit, Text.Span pos, object arg1)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg1), sourceUnit, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, SourceUnit sourceUnit, Text.Span pos, object arg1, object arg2)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg1, arg2), sourceUnit, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, SourceUnit sourceUnit, Text.Span pos, object arg1, object arg2, object arg3)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg1, arg2, arg3), sourceUnit, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, SourceUnit sourceUnit, Text.Span pos, params string[] args)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, args), sourceUnit, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, string fullPath, ErrorPosition pos, string arg)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg), fullPath, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, string fullPath, ErrorPosition pos, string arg1, string arg2)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg1, arg2), fullPath, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, string fullPath, ErrorPosition pos, string arg1, string arg2, string arg3)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, arg1, arg2, arg3), fullPath, pos);\r\n        }\r\n\r\n        internal void Add(ErrorInfo info, string fullPath, ErrorPosition pos, params string[] args)\r\n        {\r\n            Add(info, CoreResources.GetString(info.MessageId, args), fullPath, pos);\r\n        }\r\n        \r\n        private void Add(ErrorInfo info, string/*!*/ message, SourceUnit sourceUnit, Text.Span pos)\r\n        {\r\n            Debug.Assert(message != null);\r\n\r\n            string full_path;\r\n            ErrorPosition mapped_pos;\r\n\r\n            // missing source unit means the file name shouldn't be reported (it is not available)\r\n            if (sourceUnit != null && pos.IsValid)\r\n            {\r\n                // get line,column from position\r\n                sourceUnit.LineBreaks.GetLineColumnFromPosition(pos.Start, out mapped_pos.FirstLine, out mapped_pos.FirstColumn);\r\n                sourceUnit.LineBreaks.GetLineColumnFromPosition(pos.End - 1, out mapped_pos.LastLine, out mapped_pos.LastColumn);\r\n\r\n                //\r\n                full_path = sourceUnit.GetMappedFullSourcePath(mapped_pos.FirstLine);\r\n                mapped_pos = new ErrorPosition(\r\n                    sourceUnit.GetMappedLine(mapped_pos.FirstLine) + 1, mapped_pos.FirstColumn + 1,\r\n                    sourceUnit.GetMappedLine(mapped_pos.LastLine) + 1, mapped_pos.LastColumn + 1);\r\n            }\r\n            else\r\n            {\r\n                full_path = null;\r\n                mapped_pos = ErrorPosition.Invalid;\r\n            }\r\n\r\n            // filter disabled warnings:\r\n            if (info.Id < 0 || (info.Group & (int)disabledGroups) == 0 && Array.IndexOf(disabledWarnings, info.Id) == -1)\r\n            {\r\n                // do not count disabled warnings and related locations et. al.:\r\n                var severity = UpgradeSeverity(info.Severity);\r\n                if (Add(info.Id, message, severity, info.Group, full_path, mapped_pos) && info.Id >= 0)\r\n                    counts[severity]++;\r\n            }\r\n        }\r\n\r\n        private void Add(ErrorInfo info, string/*!*/ message, string fullPath, ErrorPosition pos, params string[] args)\r\n        {\r\n            Debug.Assert(message != null);\r\n\r\n            var severity = UpgradeSeverity(info.Severity);\r\n\r\n            if (Add(info.Id, message, severity, info.Group, fullPath, pos) && info.Id >= 0)\r\n                counts[severity]++;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Specialized Add Methods\r\n\r\n        public void AddInternalError(Exception/*!*/ e)\r\n        {\r\n            if (e == null)\r\n                throw new ArgumentNullException(\"e\");\r\n\r\n            const string BugTrackerUrl = \"http://phalanger.codeplex.com/workitem/list/basic\";\r\n\r\n            StringBuilder message = new StringBuilder();\r\n            for (Exception x = e; x != null; x = x.InnerException)\r\n            {\r\n                message.Append(x.Message);\r\n                message.Append(\"\\r\\n\");\r\n                message.Append(x.StackTrace);\r\n                message.Append(\"\\r\\n\");\r\n            }\r\n\r\n            Add(FatalErrors.InternalError, null, ErrorPosition.Invalid, BugTrackerUrl, message.ToString());\r\n        }\r\n\r\n        public void AddConfigurationError(ConfigurationErrorsException/*!*/ e)\r\n        {\r\n            if (e == null)\r\n                throw new ArgumentNullException(\"e\");\r\n\r\n            ErrorPosition pos = new ErrorPosition(e.Line, 0, e.Line, 0);\r\n            StringBuilder message = new StringBuilder(e.BareMessage);\r\n            Exception inner = e.InnerException;\r\n            while (inner != null)\r\n            {\r\n                message.Append(\" \");\r\n                message.Append(inner.Message);\r\n                inner = inner.InnerException;\r\n            }\r\n            Add(FatalErrors.ConfigurationError, e.Filename, pos, message.ToString());\r\n        }\r\n\r\n        internal bool AddInternal(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos)\r\n        {\r\n            return AddInternal(id, message, severity, group, fullPath, pos, false);\r\n        }\r\n\r\n        internal bool AddInternal(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos, bool increaseCount)\r\n        {\r\n            severity = UpgradeSeverity(severity);\r\n\r\n            bool result = Add(id, message, severity, group, fullPath, pos);\r\n\r\n            if (increaseCount)\r\n                counts[severity]++;\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper methods\r\n\r\n        /// <summary>\r\n        /// Upgrades <see cref=\"ErrorSeverity.Warning\"/> to <see cref=\"ErrorSeverity.WarningAsError\"/> is <see cref=\"TreatWarningsAsErrors\"/> is enabled.\r\n        /// </summary>\r\n        private ErrorSeverity UpgradeSeverity(ErrorSeverity severity)\r\n        {\r\n            return (severity.Value == ErrorSeverity.Values.Warning && TreatWarningsAsErrors) ? ErrorSeverity.WarningAsError : severity;\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Returns whether the warning has been reported.\r\n        /// </summary>\r\n        protected abstract bool Add(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos);\r\n    }\r\n\r\n    public sealed class TextErrorSink : ErrorSink\r\n    {\r\n        public TextWriter/*!*/ Output { get { return output; } }\r\n        private readonly TextWriter/*!*/ output;\r\n\r\n        public TextErrorSink(TextWriter/*!*/ output)\r\n            : this(output, WarningGroups.None, ArrayUtils.EmptyIntegers)\r\n        {\r\n        }\r\n\r\n        public TextErrorSink(TextWriter/*!*/ output, WarningGroups disabledGroups, int[]/*!*/ disabledWarnings)\r\n            : base(disabledGroups, disabledWarnings)\r\n        {\r\n            if (output == null)\r\n                throw new ArgumentNullException(\"output\");\r\n\r\n            this.output = output;\r\n        }\r\n\r\n        protected override bool Add(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos)\r\n        {\r\n            if (fullPath != null)\r\n            {\r\n                Debug.Assert(pos.IsValid);\r\n                output.Write(String.Format(\"{0}({1},{2}): \", fullPath, pos.FirstLine, pos.FirstColumn));\r\n            }\r\n\r\n            if (id >= 0)\r\n                output.WriteLine(String.Format(\"{0} PHP{1:d4}: {2}\", severity.ToCmdString(), id, message));\r\n            else\r\n                output.WriteLine(message);\r\n\r\n            return true;\r\n        }\r\n    }\r\n\r\n    internal sealed class PassthroughErrorSink : ErrorSink\r\n    {\r\n        private ErrorSink/*!*/ sink;\r\n\r\n        public PassthroughErrorSink(ErrorSink/*!*/ sink)\r\n            : base(sink.DisabledGroups, sink.DisabledWarnings)\r\n        {\r\n            this.sink = sink;\r\n        }\r\n\r\n        protected override bool Add(int id, string message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos)\r\n        {\r\n            return sink.AddInternal(id, message, severity, group, fullPath, pos);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Warnings, Errors, Fatal Errors\r\n\r\n    internal static class Warnings\r\n    {\r\n        public static readonly ErrorInfo RelatedLocation = new ErrorInfo(-1, \"__related_location\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo None = new ErrorInfo(-2, \"\", ErrorSeverity.Warning);\r\n\r\n        // deferred-to-runtime group:\r\n        public static readonly ErrorInfo InclusionReplacementFailes = new ErrorInfo(1, \"inclusion_replacement_failed\", WarningGroups.InclusionsMapping);\r\n        public static readonly ErrorInfo InclusionTargetProcessingFailed = new ErrorInfo(3, \"incuded_file_name_processing_failed\", WarningGroups.DeferredToRuntimeOthers);\r\n        public static readonly ErrorInfo InclusionDeferredToRuntime = new ErrorInfo(4, \"inclusion_deferred_to_runtime\", WarningGroups.DeferredToRuntimeOthers);\r\n        // TODO: public static readonly ErrorInfo CyclicInclusionDetected = new ErrorInfo(5, \"cyclic_inclusion\", WarningGroups.DeferredToRuntimeOthers);\r\n\r\n        // compiler-strict group:\r\n        public static readonly ErrorInfo ActualParamWithAmpersand = new ErrorInfo(7, \"act_param_with_ampersand\", WarningGroups.AmpModifiers);\r\n        public static readonly ErrorInfo UnreachableCodeDetected = new ErrorInfo(8, \"unreachable_code\", WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo TooBigIntegerConversion = new ErrorInfo(9, \"too_big_int_conversion\", WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo TooManyLocalVariablesInFunction = new ErrorInfo(10, \"too_many_local_variables_function\", WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo TooManyLocalVariablesInMethod = new ErrorInfo(11, \"too_many_local_variables_method\", WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnoptimizedLocalsInFunction = new ErrorInfo(12, \"unoptimized_local_variables_function\", WarningGroups.CompilerStrictOthers);\r\n\r\n        public static readonly ErrorInfo UnusedLabel = new ErrorInfo(15, \"unused_label\", WarningGroups.CompilerStrictOthers);\r\n\r\n        //\r\n\r\n        // warnings in more groups => disabling any of these will disable the warning:\r\n        public static readonly ErrorInfo UnknownClassUsed = new ErrorInfo(20, \"unknown_class_used\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnknownClassUsedWithAlias = new ErrorInfo(21, \"unknown_class_used_with_alias\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnknownFunctionUsed = new ErrorInfo(22, \"unknown_function_used\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnknownFunctionUsedWithAlias = new ErrorInfo(23, \"unknown_function_used_with_alias\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnknownConstantUsed = new ErrorInfo(24, \"unknown_constant_used\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n        public static readonly ErrorInfo UnknownConstantUsedWithAlias = new ErrorInfo(25, \"unknown_constant_used_with_alias\", WarningGroups.DeferredToRuntimeOthers | WarningGroups.CompilerStrictOthers);\r\n\r\n        //\r\n\r\n        // others:\r\n        public static readonly ErrorInfo InvalidArgumentCountForMethod = new ErrorInfo(115, \"invalid_argument_count_for_method\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo TooFewFunctionParameters = new ErrorInfo(116, \"too_few_function_params\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo TooFewMethodParameters = new ErrorInfo(117, \"too_few_method_params\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo TooFewCtorParameters = new ErrorInfo(118, \"too_few_ctor_params\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo NoCtorDefined = new ErrorInfo(120, \"no_ctor_defined\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo MultipleSwitchCasesWithSameValue = new ErrorInfo(121, \"more_switch_cases_with_same_value\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo MoreThenOneDefaultInSwitch = new ErrorInfo(122, \"more_then_one_default_in_switch\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo ThisOutOfMethod = new ErrorInfo(123, \"this_out_of_method\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo ThisInWriteContext = new ErrorInfo(124, \"this_in_write_context\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo MandatoryBehindOptionalParam = new ErrorInfo(125, \"mandatory_behind_optional_param\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo InclusionReplacementFailed = new ErrorInfo(126, \"inclusion_replacement_failed\", WarningGroups.InclusionsMapping);\r\n        public static readonly ErrorInfo ConditionallyRedeclared = new ErrorInfo(127, \"conditionally_redeclared\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo ConditionallyRedeclaredByInclusion = new ErrorInfo(128, \"conditionally_redeclared_by_inclusion\", ErrorSeverity.Warning);\r\n\r\n        public static readonly ErrorInfo PhpTrackVarsNotSupported = new ErrorInfo(129, \"php_track_vars_not_supported\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo UnterminatedComment = new ErrorInfo(130, \"unterminated_comment\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo InvalidEscapeSequenceLength = new ErrorInfo(132, \"invalid_escape_sequence_length\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo InvalidLinePragma = new ErrorInfo(133, \"invalid_line_pragma\", ErrorSeverity.Warning);\r\n\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo MultipleStatementsInAssertion = new ErrorInfo(140, \"multiple_statements_in_assertion\", ErrorSeverity.Warning);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo DivisionByZero = new ErrorInfo(150, \"division_by_zero\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo NotSupportedFunctionCalled = new ErrorInfo(151, \"notsupported_function_called\", ErrorSeverity.Warning);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo ClassBehaviorMayBeUnexpected = new ErrorInfo(160, \"class_behavior_may_be_unexpected\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo IncompleteClass = new ErrorInfo(161, \"incomplete_class\", WarningGroups.DeferredToRuntimeOthers);\r\n        public static readonly ErrorInfo ImportDeprecated = new ErrorInfo(162, \"import_deprecated\", ErrorSeverity.Warning);\r\n\r\n        public static readonly ErrorInfo BodyOfDllImportedFunctionIgnored = new ErrorInfo(170, \"dll_import_body_ignored\", ErrorSeverity.Warning);\r\n\r\n        //\r\n        public static readonly ErrorInfo MagicMethodMustBePublicNonStatic = new ErrorInfo(171, \"magic_method_must_be_public_nonstatic\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo CallStatMustBePublicStatic = new ErrorInfo(172, \"callstat_must_be_public_static\", ErrorSeverity.Warning);\r\n\r\n        // strict standards\r\n\r\n        public static readonly ErrorInfo DeclarationShouldBeCompatible = new ErrorInfo(180, \"declaration_should_be_compatible\", ErrorSeverity.Warning);\r\n        public static readonly ErrorInfo AssignNewByRefDeprecated = new ErrorInfo(181, \"assign_new_as_ref_is_deprecated\", ErrorSeverity.Warning);\r\n\r\n    }\r\n\r\n    // 1000+\r\n    internal static class Errors\r\n    {\r\n        public static readonly ErrorInfo RelatedLocation = new ErrorInfo(-1, \"__related_location\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo ArrayInClassConstant = new ErrorInfo(1000, \"array_in_cls_const\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NonVariablePassedByRef = new ErrorInfo(1001, \"nonvar_passed_by_ref\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo FieldInInterface = new ErrorInfo(1002, \"field_in_interface\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidBreakLevelCount = new ErrorInfo(1003, \"invalid_break_level_count\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo PropertyDeclaredAbstract = new ErrorInfo(1004, \"property_declared_abstract\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PropertyDeclaredFinal = new ErrorInfo(1005, \"property_declared_final\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PropertyRedeclared = new ErrorInfo(1006, \"property_redeclared\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo MethodRedeclared = new ErrorInfo(1007, \"method_redeclared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InterfaceMethodWithBody = new ErrorInfo(1008, \"interface_bodyful_method\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractMethodWithBody = new ErrorInfo(1009, \"abstract_bodyful_method\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NonAbstractMethodWithoutBody = new ErrorInfo(1010, \"nonabstract_bodyless_method\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CloneCannotTakeArguments = new ErrorInfo(1011, \"clone_cannot_take_arguments\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CloneCannotBeStatic = new ErrorInfo(1012, \"clone_cannot_be_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DestructCannotTakeArguments = new ErrorInfo(1013, \"destruct_cannot_take_arguments\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DestructCannotBeStatic = new ErrorInfo(1014, \"destruct_cannot_be_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractPrivateMethodDeclared = new ErrorInfo(1015, \"abstract_private_method_declared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InterfaceMethodNotPublic = new ErrorInfo(1016, \"interface_method_non_public\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ConstantRedeclared = new ErrorInfo(1017, \"constant_redeclared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractMethodNotImplemented = new ErrorInfo(1018, \"abstract_method_not_implemented\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MethodNotCompatible = new ErrorInfo(1019, \"method_not_compatible\", ErrorSeverity.Error);   //  TODO: it's fatal error\r\n\r\n        public static readonly ErrorInfo NonInterfaceImplemented = new ErrorInfo(1020, \"non_interface_implemented\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NonInterfaceExtended = new ErrorInfo(1021, \"non_interface_extended\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NonClassExtended = new ErrorInfo(1022, \"non_class_extended\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo FinalClassExtended = new ErrorInfo(1023, \"final_class_extended\", ErrorSeverity.Error);\r\n\r\n        // 1023\r\n\r\n        public static readonly ErrorInfo ConstructCannotBeStatic = new ErrorInfo(1024, \"construct_cannot_be_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverrideFinalMethod = new ErrorInfo(1025, \"override_final_method\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MakeStaticMethodNonStatic = new ErrorInfo(1026, \"make_static_method_non_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MakeNonStaticMethodStatic = new ErrorInfo(1027, \"make_nonstatic_method_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverridingNonAbstractMethodByAbstract = new ErrorInfo(1028, \"nonabstract_method_overridden_with_abstract\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverridingMethodRestrictsVisibility = new ErrorInfo(1029, \"overriding_method_restrict_visibility\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MakeStaticPropertyNonStatic = new ErrorInfo(1030, \"make_static_property_nonstatic\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MakeNonStaticPropertyStatic = new ErrorInfo(1031, \"make_nonstatic_property_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverridingFieldRestrictsVisibility = new ErrorInfo(1032, \"overriding_property_restrict_visibility\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverridingStaticFieldByStatic = new ErrorInfo(1033, \"overriding_static_field_with_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OverridingProtectedStaticWithInitValue = new ErrorInfo(1034, \"overriding_protected_static_with_init_value\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InheritingOnceInheritedConstant = new ErrorInfo(1035, \"inheriting_previously_inherited_constant\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo RedeclaringInheritedConstant = new ErrorInfo(1036, \"redeclaring_inherited_constant\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractFinalMethodDeclared = new ErrorInfo(1037, \"abstract_final_method_declared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo LibraryFunctionRedeclared = new ErrorInfo(1038, \"library_func_redeclared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DuplicateParameterName = new ErrorInfo(1039, \"duplicate_parameter_name\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo EmptyIndexInReadContext = new ErrorInfo(1040, \"empty_index_in_read_context\", ErrorSeverity.Error);\r\n\r\n\r\n        public static readonly ErrorInfo ConstructNotSupported = new ErrorInfo(1041, \"construct_not_supported\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo KeyAlias = new ErrorInfo(1042, \"key_alias\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MultipleVisibilityModifiers = new ErrorInfo(1043, \"multiple_visibility_modifiers\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidInterfaceModifier = new ErrorInfo(1044, \"invalid_interface_modifier\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo MethodCannotTakeArguments = new ErrorInfo(1045, \"method_cannot_take_arguments\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo PrivateClassInGlobalNamespace = new ErrorInfo(1048, \"private_class_in_global_ns\", ErrorSeverity.Error);\r\n\r\n\r\n        public static readonly ErrorInfo InvalidCodePoint = new ErrorInfo(1049, \"invalid_code_point\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidCodePointName = new ErrorInfo(1050, \"invalid_code_point_name\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InclusionInPureUnit = new ErrorInfo(1051, \"inclusion_in_pure_unit\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo GlobalCodeInPureUnit = new ErrorInfo(1052, \"global_code_in_pure_unit\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo ConflictingTypeAliases = new ErrorInfo(1053, \"conflicting_type_aliases\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ConflictingFunctionAliases = new ErrorInfo(1054, \"conflicting_function_aliases\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ConflictingConstantAliases = new ErrorInfo(1055, \"conflicting_constant_aliases\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo ProtectedPropertyAccessed = new ErrorInfo(1058, \"protected_property_accessed\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PrivatePropertyAccessed = new ErrorInfo(1059, \"private_property_accessed\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ProtectedMethodCalled = new ErrorInfo(1060, \"protected_method_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PrivateMethodCalled = new ErrorInfo(1061, \"private_method_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PrivateCtorCalled = new ErrorInfo(1062, \"private_ctor_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ProtectedCtorCalled = new ErrorInfo(1063, \"protected_ctor_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ProtectedConstantAccessed = new ErrorInfo(1064, \"protected_constant_accessed\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PrivateConstantAccessed = new ErrorInfo(1065, \"private_constant_accessed\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo UnknownMethodCalled = new ErrorInfo(1066, \"unknown_method_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractMethodCalled = new ErrorInfo(1067, \"abstract_method_called\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo UnknownPropertyAccessed = new ErrorInfo(1068, \"undeclared_static_property_accessed\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo UnknownClassConstantAccessed = new ErrorInfo(1069, \"undefined_class_constant\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CircularConstantDefinitionGlobal = new ErrorInfo(1070, \"circular_constant_definition_global\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CircularConstantDefinitionClass = new ErrorInfo(1071, \"circular_constant_definition_class\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo MissingEntryPoint = new ErrorInfo(1075, \"missing_entry_point\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo EntryPointRedefined = new ErrorInfo(1076, \"entry_point_redefined\", ErrorSeverity.Error);\r\n\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo AmbiguousTypeMatch = new ErrorInfo(1088, \"ambiguous_type_match\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AmbiguousFunctionMatch = new ErrorInfo(1089, \"ambiguous_function_match\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AmbiguousConstantMatch = new ErrorInfo(1090, \"ambiguous_constant_match\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CannotUseReservedName = new ErrorInfo(1091, \"cannot_use_reserved_name\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo IncompleteClass = new ErrorInfo(1092, \"incomplete_class\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ClassHasNoVisibleCtor = new ErrorInfo(1093, \"class_has_no_visible_ctor\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractClassOrInterfaceInstantiated = new ErrorInfo(1094, \"abstract_class_or_interface_instantiated\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ClosureInstantiated = new ErrorInfo(1095, \"instantiation_not_allowed\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo ParentUsedOutOfClass = new ErrorInfo(1110, \"parent_used_out_of_class\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo SelfUsedOutOfClass = new ErrorInfo(1111, \"self_used_out_of_class\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ClassHasNoParent = new ErrorInfo(1112, \"class_has_no_parent\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo StaticUsedOutOfClass = new ErrorInfo(1113, \"static_used_out_of_class\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo UnknownCustomAttribute = new ErrorInfo(1120, \"unknown_custom_attribute\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NotCustomAttributeClass = new ErrorInfo(1121, \"not_custom_attribute_class\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidAttributeExpression = new ErrorInfo(1122, \"invalid_attribute_expression\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidAttributeUsage = new ErrorInfo(1123, \"invalid_attribute_usage\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidAttributeTargetSelector = new ErrorInfo(1124, \"invalid_attribute_target_selector\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DuplicateAttributeUsage = new ErrorInfo(1125, \"duplicate_attribute_usage\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo OutAttributeOnByValueParam = new ErrorInfo(1126, \"out_attribute_on_byval_param\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ExportAttributeInNonPureUnit = new ErrorInfo(1127, \"export_attribute_in_non_pure\", ErrorSeverity.Error);\r\n\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo MissingPartialModifier = new ErrorInfo(1148, \"missing_partial_modifier\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialConditionalDeclaration = new ErrorInfo(1149, \"partial_conditional_declaration\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialTransientDeclaration = new ErrorInfo(1150, \"partial_transient_declaration\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialImpureDeclaration = new ErrorInfo(1151, \"partial_impure_declaration\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo IncompatiblePartialDeclarations = new ErrorInfo(1152, \"incompatible_partial_declarations\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ConflictingPartialVisibility = new ErrorInfo(1153, \"conflicting_partial_visibility\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialDeclarationsDifferInBase = new ErrorInfo(1154, \"partial_declarations_differ_in_base\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialDeclarationsDifferInTypeParameterCount = new ErrorInfo(1155, \"partial_declarations_differ_in_type_parameter_count\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo PartialDeclarationsDifferInTypeParameter = new ErrorInfo(1156, \"partial_declarations_differ_in_type_parameter\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo GenericParameterMustBeType = new ErrorInfo(1170, \"generic_parameter_must_be_type\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DuplicateGenericParameter = new ErrorInfo(1171, \"duplicate_generic_parameter\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo GenericParameterCollidesWithDeclarer = new ErrorInfo(1172, \"generic_parameter_collides_with_declarer\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo CannotDeriveFromTypeParameter = new ErrorInfo(1173, \"cannot_derive_from_type_parameter\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo GenericCallToLibraryFunction = new ErrorInfo(1074, \"generic_call_to_library_function\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ConstructorWithGenericParameters = new ErrorInfo(1075, \"generic_parameters_disallowed_on_ctor\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo GenericAlreadyInUse = new ErrorInfo(1076, \"generic_in_use\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo TooManyTypeArgumentsInTypeUse = new ErrorInfo(1080, \"too_many_type_arguments_in_type_use\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NonGenericTypeUsedWithTypeArgs = new ErrorInfo(1081, \"non_generic_type_used_with_type_arguments\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MissingTypeArgumentInTypeUse = new ErrorInfo(1082, \"missing_type_argument_in_type_use\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo IncompatibleTypeParameterConstraintsInTypeUse = new ErrorInfo(1083, \"incompatible_type_parameter_constraints_type\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo IncompatibleTypeParameterConstraintsInMethodUse = new ErrorInfo(1084, \"incompatible_type_parameter_constraints_method\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo InvalidArgumentCount = new ErrorInfo(1210, \"invalid_argument_count\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo AbstractPropertyNotImplemented = new ErrorInfo(1211, \"abstract_property_not_implemented\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo InvalidArgumentCountForFunction = new ErrorInfo(1212, \"invalid_argument_count_for_function\", ErrorSeverity.Error);\r\n\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo InvalidIdentifier = new ErrorInfo(1230, \"invalid_identifier\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo LabelRedeclared = new ErrorInfo(1231, \"label_redeclared\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo UndefinedLabel = new ErrorInfo(1232, \"undefined_label\", ErrorSeverity.Error);\r\n\r\n        //\r\n\r\n        public static readonly ErrorInfo ExpectingParentCtorInvocation = new ErrorInfo(1240, \"expecting_parent_ctor_invocation\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo UnexpectedParentCtorInvocation = new ErrorInfo(1241, \"unexpected_parent_ctor_invocation\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo MissingCtorInClrSubclass = new ErrorInfo(1242, \"missing_ctor_in_clr_subclass\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo MissingImportedEntity = new ErrorInfo(1250, \"missing_imported_entity\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo NamespaceKeywordUsedOutsideOfNamespace = new ErrorInfo(1251, \"namespace_keyword_outside_namespace\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo ImportOnlyInPureMode = new ErrorInfo(1252, \"import_only_in_pure\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo DllImportMethodMustBeStatic = new ErrorInfo(1260, \"dll_import_must_be_static\", ErrorSeverity.Error);\r\n        public static readonly ErrorInfo DllImportMethodCannotBeAbstract = new ErrorInfo(1261, \"dll_import_cannot_be_abstract\", ErrorSeverity.Error);\r\n    }\r\n\r\n    // 2000+\r\n    internal static class FatalErrors\r\n    {\r\n        public static readonly ErrorInfo RelatedLocation = new ErrorInfo(-1, \"__related_location\", ErrorSeverity.Error);\r\n\r\n        public static readonly ErrorInfo TypeRedeclared = new ErrorInfo(2000, \"type_redeclared\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo FunctionRedeclared = new ErrorInfo(2001, \"function_redeclared\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo ConstantRedeclared = new ErrorInfo(2002, \"constant_redeclared\", ErrorSeverity.FatalError);\r\n\r\n        public static readonly ErrorInfo InvalidCommandLineArgument = new ErrorInfo(2003, \"invalid_command_line_argument\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo InvalidCommandLineArgumentNoName = new ErrorInfo(2003, \"invalid_command_line_argument_noname\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo ConfigurationError = new ErrorInfo(2004, \"configuration_error\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo InvalidSource = new ErrorInfo(2005, \"invalid_source\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo ErrorCreatingFile = new ErrorInfo(2006, \"error_creating_file\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo InternalError = new ErrorInfo(2007, \"internal_error\", ErrorSeverity.FatalError);\r\n\r\n\r\n        //public static readonly ErrorInfo RedeclaredByInclusion = new ErrorInfo(2005, \"redeclared_by_inclusion\", ErrorSeverity.FatalError);\r\n\r\n\r\n\r\n        //public static readonly ErrorInfo ClassRedeclaredAtRuntime = new ErrorInfo(2007, \"class_redeclared_runtime\", ErrorSeverity.FatalError);\r\n        //public static readonly ErrorInfo ClassRedeclaredAtRuntimeByInclusion = new ErrorInfo(2008, \"class_redeclared_runtime_include\", ErrorSeverity.FatalError);\r\n\r\n\r\n\r\n        //public static readonly ErrorInfo LibraryClassRedeclared = new ErrorInfo(2009, \"library_class_redeclared\", ErrorSeverity.FatalError);\r\n        //public static readonly ErrorInfo LibraryClassRedeclaredByInclusion = new ErrorInfo(2010, \"library_class_redeclared_by_inclusion\", ErrorSeverity.FatalError);\r\n        //public static readonly ErrorInfo ClassRedeclaredInAssembly = new ErrorInfo(2011, \"class_redeclared_in_assembly\", ErrorSeverity.FatalError);\r\n        //public static readonly ErrorInfo AbstractMethodNameNotMatchingImplementation = new ErrorInfo(2012, \"abstract_method_name_not_matching_implementation\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo SyntaxError = new ErrorInfo(2014, \"syntax_error\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo CheckVarUseFault = new ErrorInfo(2015, \"check_varuse_fault\", ErrorSeverity.FatalError);\r\n\r\n        public static readonly ErrorInfo CircularBaseClassDependency = new ErrorInfo(2030, \"circular_base_class_dependency\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo CircularBaseInterfaceDependency = new ErrorInfo(2031, \"circular_base_interface_dependency\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo MethodMustTakeExacArgsCount = new ErrorInfo(2032, \"method_must_take_exact_args_count\", ErrorSeverity.FatalError);\r\n\r\n        public static readonly ErrorInfo AliasAlreadyInUse = new ErrorInfo(2040, \"alias_in_use\", ErrorSeverity.FatalError);\r\n        public static readonly ErrorInfo ClassAlreadyInUse = new ErrorInfo(2041, \"class_in_use\", ErrorSeverity.FatalError);\r\n\r\n        public static readonly ErrorInfo TryWithoutCatchOrFinally = new ErrorInfo(2050, \"try_without_catch_or_finally\", ErrorSeverity.FatalError);\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Generated/Lexer.cs",
    "content": "namespace PHP.Core.Parsers\r\n{\r\n\t#region User Code\r\n\t\r\n\t/*\n Copyright (c) 2004-2006 Tomas Matousek. Based on PHP5 and PHP6 grammar tokens definition. \n The use and distribution terms for this software are contained in the file named License.txt, \n which can be found in the root of the Phalanger distribution. By using this software \n in any fashion, you are agreeing to be bound by the terms of this license.\n You must not remove this notice from this software.\n*/\nusing System;\nusing PHP.Core;\nusing System.Collections.Generic;\n#endregion\r\n\t\r\n\t\r\n\tpublic partial class Lexer\r\n\t{\r\n\t\tpublic enum LexicalStates\r\n\t\t{\r\n\t\t\tINITIAL = 0,\r\n\t\t\tST_IN_SCRIPTING = 1,\r\n\t\t\tST_DOUBLE_QUOTES = 2,\r\n\t\t\tST_SINGLE_QUOTES = 3,\r\n\t\t\tST_BACKQUOTE = 4,\r\n\t\t\tST_HEREDOC = 5,\r\n\t\t\tST_NEWDOC = 6,\r\n\t\t\tST_LOOKING_FOR_PROPERTY = 7,\r\n\t\t\tST_LOOKING_FOR_VARNAME = 8,\r\n\t\t\tST_DOC_COMMENT = 9,\r\n\t\t\tST_COMMENT = 10,\r\n\t\t\tST_ONE_LINE_COMMENT = 11,\r\n\t\t}\r\n\t\t\r\n\t\t[Flags]\r\n\t\tprivate enum AcceptConditions : byte\r\n\t\t{\r\n\t\t\tNotAccept = 0,\r\n\t\t\tAcceptOnStart = 1,\r\n\t\t\tAcceptOnEnd = 2,\r\n\t\t\tAccept = 4\r\n\t\t}\r\n\t\t\r\n\t\tpublic struct Position\r\n\t\t{\r\n\t\t\tpublic int Char;\r\n\t\t\tpublic Position(int ch)\r\n\t\t\t{\r\n\t\t\t\tthis.Char = ch;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate const int NoState = -1;\r\n\t\tprivate const char BOL = (char)128;\r\n\t\tprivate const char EOF = (char)129;\r\n\t\t\r\n\t\tprivate Tokens yyreturn;\r\n\t\t\r\n\t\tprivate System.IO.TextReader reader;\r\n\t\tprivate char[] buffer = new char[512];\r\n\t\t\r\n\t\t// whether the currently parsed token is being expanded (yymore has been called):\r\n\t\tprivate bool expanding_token;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token starts:\r\n\t\tprivate int token_start;\r\n\t\t\r\n\t\t// offset in buffer where the currently parsed token chunk starts:\r\n\t\tprivate int token_chunk_start;\r\n\t\t\r\n\t\t// offset in buffer one char behind the currently parsed token (chunk) ending character:\r\n\t\tprivate int token_end;\r\n\t\t\r\n\t\t// offset of the lookahead character (number of characters parsed):\r\n\t\tprivate int lookahead_index;\r\n\t\t\r\n\t\t// number of characters read into the buffer:\r\n\t\tprivate int chars_read;\r\n\t\t\r\n\t\t// parsed token start position (wrt beginning of the stream):\r\n\t\tprotected Position token_start_pos;\r\n\t\t\r\n\t\t// parsed token end position (wrt beginning of the stream):\r\n\t\tprotected Position token_end_pos;\r\n\t\t\r\n\t\tprivate bool yy_at_bol = false;\r\n\t\t\r\n\t\tpublic LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } \r\n\t\tprivate LexicalStates current_lexical_state;\r\n\t\t\r\n\t\tpublic Lexer(System.IO.TextReader reader)\r\n\t\t{\r\n\t\t\tInitialize(reader, LexicalStates.INITIAL);\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol)\r\n\t\t{\r\n\t\t\tthis.expanding_token = false;\r\n\t\t\tthis.token_start = 0;\r\n\t\t\tthis.chars_read = 0;\r\n\t\t\tthis.lookahead_index = 0;\r\n\t\t\tthis.token_chunk_start = 0;\r\n\t\t\tthis.token_end = 0;\r\n\t\t\tthis.token_end_pos = new Position(0);\r\n\t\t\tthis.reader = reader;\r\n\t\t\tthis.yy_at_bol = atBol;\r\n\t\t\tthis.current_lexical_state = lexicalState;\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Initialize(System.IO.TextReader reader, LexicalStates lexicalState)\r\n\t\t{\r\n\t\t\tInitialize(reader, lexicalState, false);\r\n\t\t}\r\n\t\t\r\n\t\t#region Accept\r\n\t\t\r\n\t\t#pragma warning disable 162\r\n\t\t\r\n\t\t\r\n\t\tTokens Accept0(int state,out bool accepted)\r\n\t\t{\r\n\t\t\taccepted = true;\r\n\t\t\t\r\n\t\t\tswitch(state)\r\n\t\t\t{\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\t// #line 75\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\treturn Tokens.T_INLINE_HTML; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\t// #line 107\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tif (AllowAspTags)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\t\treturn Tokens.T_OPEN_TAG;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Tokens.T_INLINE_HTML;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\t// #line 79\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (AllowShortTags || TokenLength>2) \r\n\t\t\t\t\t\t{ \r\n\t\t\t\t\t\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\t\treturn Tokens.T_OPEN_TAG;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Tokens.T_INLINE_HTML;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\t// #line 91\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\treturn Tokens.T_INLINE_HTML; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 6:\r\n\t\t\t\t\t// #line 95\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (GetTokenChar(1) != '%' || AllowAspTags) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\t\treturn Tokens.T_OPEN_TAG_WITH_ECHO;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn Tokens.T_INLINE_HTML;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 7:\r\n\t\t\t\t\t// #line 119\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\treturn Tokens.T_OPEN_TAG;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 8:\r\n\t\t\t\t\t// #line 271\r\n\t\t\t\t\t{ return (Tokens)GetTokenChar(0); }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 9:\r\n\t\t\t\t\t// #line 348\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tBEGIN(LexicalStates.ST_BACKQUOTE); \r\n\t\t\t\t\t\treturn Tokens.T_BACKQUOTE; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\t// #line 272\r\n\t\t\t\t\t{ return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 11:\r\n\t\t\t\t\t// #line 275\r\n\t\t\t\t\t{ return Tokens.T_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 12:\r\n\t\t\t\t\t// #line 332\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tBEGIN(LexicalStates.ST_DOUBLE_QUOTES); \r\n\t\t\t\t\t\treturn (GetTokenChar(0) != '\"') ? Tokens.T_BINARY_DOUBLE : Tokens.T_DOUBLE_QUOTES; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 13:\r\n\t\t\t\t\t// #line 338\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\t// Gets here only in the case of unterminated singly-quoted string. That leads usually to an error token,\r\n\t\t\t\t\t\t// however when the source code is parsed per-line (as in Visual Studio colorizer) it is important to remember\r\n\t\t\t\t\t\t// that we are in the singly-quoted string at the end of the line.\r\n\t\t\t\t\t\tBEGIN(LexicalStates.ST_SINGLE_QUOTES); \r\n\t\t\t\t\t\tyymore(); \r\n\t\t\t\t\t\tbreak; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 14:\r\n\t\t\t\t\t// #line 276\r\n\t\t\t\t\t{ return Tokens.ParseDecimalNumber; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 15:\r\n\t\t\t\t\t// #line 273\r\n\t\t\t\t\t{ return Tokens.T_NS_SEPARATOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 16:\r\n\t\t\t\t\t// #line 287\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 17:\r\n\t\t\t\t\t// #line 310\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_LBRACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 18:\r\n\t\t\t\t\t// #line 366\r\n\t\t\t\t\t{ return Tokens.ERROR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 19:\r\n\t\t\t\t\t// #line 311\r\n\t\t\t\t\t{ if (!yy_pop_state()) return Tokens.ERROR; return Tokens.T_RBRACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 20:\r\n\t\t\t\t\t// #line 256\r\n\t\t\t\t\t{ return Tokens.T_MOD_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 21:\r\n\t\t\t\t\t// #line 313\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (AllowAspTags) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tBEGIN(LexicalStates.INITIAL);\r\n\t\t\t\t\t\t\treturn Tokens.T_CLOSE_TAG;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyyless(1);\r\n\t\t\t\t\t\t\treturn Tokens.T_PERCENT;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 22:\r\n\t\t\t\t\t// #line 264\r\n\t\t\t\t\t{ return Tokens.T_SL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 23:\r\n\t\t\t\t\t// #line 247\r\n\t\t\t\t\t{ return Tokens.T_IS_SMALLER_OR_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 24:\r\n\t\t\t\t\t// #line 246\r\n\t\t\t\t\t{ return Tokens.T_IS_NOT_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 25:\r\n\t\t\t\t\t// #line 221\r\n\t\t\t\t\t{ return Tokens.T_LGENERIC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 26:\r\n\t\t\t\t\t// #line 127\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tBEGIN(LexicalStates.INITIAL); \r\n\t\t\t\t\t\treturn Tokens.T_CLOSE_TAG; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 27:\r\n\t\t\t\t\t// #line 138\r\n\t\t\t\t\t{ return Tokens.T_IF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 28:\r\n\t\t\t\t\t// #line 151\r\n\t\t\t\t\t{ return Tokens.T_AS; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 29:\r\n\t\t\t\t\t// #line 245\r\n\t\t\t\t\t{ return Tokens.T_IS_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 30:\r\n\t\t\t\t\t// #line 240\r\n\t\t\t\t\t{ return Tokens.T_DOUBLE_ARROW; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 31:\r\n\t\t\t\t\t// #line 326\r\n\t\t\t\t\t{ return Tokens.DoubleQuotedString; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 32:\r\n\t\t\t\t\t// #line 327\r\n\t\t\t\t\t{ return Tokens.SingleQuotedString; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 33:\r\n\t\t\t\t\t// #line 248\r\n\t\t\t\t\t{ return Tokens.T_IS_GREATER_OR_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 34:\r\n\t\t\t\t\t// #line 265\r\n\t\t\t\t\t{ return Tokens.T_SR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 35:\r\n\t\t\t\t\t// #line 254\r\n\t\t\t\t\t{ return Tokens.T_DIV_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 36:\r\n\t\t\t\t\t// #line 288\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 37:\r\n\t\t\t\t\t// #line 290\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_COMMENT); yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 38:\r\n\t\t\t\t\t// #line 144\r\n\t\t\t\t\t{ return Tokens.T_DO; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 39:\r\n\t\t\t\t\t// #line 176\r\n\t\t\t\t\t{ return Tokens.T_LOGICAL_OR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 40:\r\n\t\t\t\t\t// #line 278\r\n\t\t\t\t\t{ return Tokens.ParseDouble; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 41:\r\n\t\t\t\t\t// #line 222\r\n\t\t\t\t\t{ return Tokens.T_RGENERIC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 42:\r\n\t\t\t\t\t// #line 266\r\n\t\t\t\t\t{ return Tokens.T_DOUBLE_COLON; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 43:\r\n\t\t\t\t\t// #line 249\r\n\t\t\t\t\t{ return Tokens.T_PLUS_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 44:\r\n\t\t\t\t\t// #line 241\r\n\t\t\t\t\t{ return Tokens.T_INC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 45:\r\n\t\t\t\t\t// #line 250\r\n\t\t\t\t\t{ return Tokens.T_MINUS_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 46:\r\n\t\t\t\t\t// #line 268\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); return Tokens.T_OBJECT_OPERATOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 47:\r\n\t\t\t\t\t// #line 242\r\n\t\t\t\t\t{ return Tokens.T_DEC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 48:\r\n\t\t\t\t\t// #line 251\r\n\t\t\t\t\t{ return Tokens.T_MUL_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 49:\r\n\t\t\t\t\t// #line 252\r\n\t\t\t\t\t{ return Tokens.T_POW; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 50:\r\n\t\t\t\t\t// #line 255\r\n\t\t\t\t\t{ return Tokens.T_CONCAT_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 51:\r\n\t\t\t\t\t// #line 259\r\n\t\t\t\t\t{ return Tokens.T_AND_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 52:\r\n\t\t\t\t\t// #line 263\r\n\t\t\t\t\t{ return Tokens.T_BOOLEAN_AND; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 53:\r\n\t\t\t\t\t// #line 260\r\n\t\t\t\t\t{ return Tokens.T_OR_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 54:\r\n\t\t\t\t\t// #line 262\r\n\t\t\t\t\t{ return Tokens.T_BOOLEAN_OR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 55:\r\n\t\t\t\t\t// #line 261\r\n\t\t\t\t\t{ return Tokens.T_XOR_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 56:\r\n\t\t\t\t\t// #line 269\r\n\t\t\t\t\t{ return Tokens.T_VARIABLE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 57:\r\n\t\t\t\t\t// #line 257\r\n\t\t\t\t\t{ return Tokens.T_SL_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 58:\r\n\t\t\t\t\t// #line 211\r\n\t\t\t\t\t{ return Tokens.T_INT_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 59:\r\n\t\t\t\t\t// #line 329\r\n\t\t\t\t\t{ return Tokens.ErrorInvalidIdentifier; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 60:\r\n\t\t\t\t\t// #line 190\r\n\t\t\t\t\t{ return Tokens.T_TRY; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 61:\r\n\t\t\t\t\t// #line 177\r\n\t\t\t\t\t{ return Tokens.T_LOGICAL_AND; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 62:\r\n\t\t\t\t\t// #line 164\r\n\t\t\t\t\t{ return Tokens.T_NEW; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 63:\r\n\t\t\t\t\t// #line 206\r\n\t\t\t\t\t{ return Tokens.T_USE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 64:\r\n\t\t\t\t\t// #line 243\r\n\t\t\t\t\t{ return Tokens.T_IS_IDENTICAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 65:\r\n\t\t\t\t\t// #line 258\r\n\t\t\t\t\t{ return Tokens.T_SR_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 66:\r\n\t\t\t\t\t// #line 178\r\n\t\t\t\t\t{ return Tokens.T_LOGICAL_XOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 67:\r\n\t\t\t\t\t// #line 133\r\n\t\t\t\t\t{ return Tokens.T_EXIT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 68:\r\n\t\t\t\t\t// #line 145\r\n\t\t\t\t\t{ return Tokens.T_FOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 69:\r\n\t\t\t\t\t// #line 165\r\n\t\t\t\t\t{ return Tokens.T_VAR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 70:\r\n\t\t\t\t\t// #line 279\r\n\t\t\t\t\t{ return Tokens.ParseDouble; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 71:\r\n\t\t\t\t\t// #line 244\r\n\t\t\t\t\t{ return Tokens.T_IS_NOT_IDENTICAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 72:\r\n\t\t\t\t\t// #line 253\r\n\t\t\t\t\t{ return Tokens.T_POW_EQUAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 73:\r\n\t\t\t\t\t// #line 274\r\n\t\t\t\t\t{ return Tokens.T_ELLIPSIS; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 74:\r\n\t\t\t\t\t// #line 277\r\n\t\t\t\t\t{ return Tokens.ParseHexadecimalNumber; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 75:\r\n\t\t\t\t\t// #line 280\r\n\t\t\t\t\t{ return Tokens.ParseBinaryNumber; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 76:\r\n\t\t\t\t\t// #line 234\r\n\t\t\t\t\t{ return Tokens.T_SELF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 77:\r\n\t\t\t\t\t// #line 154\r\n\t\t\t\t\t{ return Tokens.T_CASE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 78:\r\n\t\t\t\t\t// #line 328\r\n\t\t\t\t\t{ return Tokens.SingleQuotedIdentifier; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 79:\r\n\t\t\t\t\t// #line 236\r\n\t\t\t\t\t{ return Tokens.T_TRUE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 80:\r\n\t\t\t\t\t// #line 179\r\n\t\t\t\t\t{ return Tokens.T_LIST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 81:\r\n\t\t\t\t\t// #line 238\r\n\t\t\t\t\t{ return Tokens.T_NULL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 82:\r\n\t\t\t\t\t// #line 208\r\n\t\t\t\t\t{ return Tokens.T_GOTO; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 83:\r\n\t\t\t\t\t// #line 158\r\n\t\t\t\t\t{ return Tokens.T_ECHO; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 84:\r\n\t\t\t\t\t// #line 141\r\n\t\t\t\t\t{ return Tokens.T_ELSE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 85:\r\n\t\t\t\t\t// #line 132\r\n\t\t\t\t\t{ return Tokens.T_EXIT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 86:\r\n\t\t\t\t\t// #line 166\r\n\t\t\t\t\t{ return Tokens.T_EVAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 87:\r\n\t\t\t\t\t// #line 289\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_DOC_COMMENT); yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 88:\r\n\t\t\t\t\t// #line 210\r\n\t\t\t\t\t{ return Tokens.T_BOOL_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 89:\r\n\t\t\t\t\t// #line 353\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbool is_binary = GetTokenChar(0) != '<';\r\n\t\t\t\t\t\thereDocLabel = GetTokenSubstring(is_binary ? 4 : 3).Trim();\r\n\t\t\t\t\t\tvar newstate = LexicalStates.ST_HEREDOC;\r\n\t\t\t\t\t\tif (hereDocLabel[0] == '\"' || hereDocLabel[0] == '\\'')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (hereDocLabel[0] == '\\'') newstate = LexicalStates.ST_NEWDOC;\t// newdoc syntax, continue in ST_NEWDOC lexical state\r\n\t\t\t\t\t\t\thereDocLabel = hereDocLabel.Substring(1, hereDocLabel.Length - 2);\t// trim quote characters around\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tBEGIN(newstate);\r\n\t\t\t\t\t\treturn is_binary ? Tokens.T_BINARY_HEREDOC : Tokens.T_START_HEREDOC;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 90:\r\n\t\t\t\t\t// #line 160\r\n\t\t\t\t\t{ return Tokens.T_CLASS; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 91:\r\n\t\t\t\t\t// #line 196\r\n\t\t\t\t\t{ return Tokens.T_CLONE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 92:\r\n\t\t\t\t\t// #line 191\r\n\t\t\t\t\t{ return Tokens.T_CATCH; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 93:\r\n\t\t\t\t\t// #line 135\r\n\t\t\t\t\t{ return Tokens.T_CONST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 94:\r\n\t\t\t\t\t// #line 172\r\n\t\t\t\t\t{ return Tokens.T_ISSET; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 95:\r\n\t\t\t\t\t// #line 212\r\n\t\t\t\t\t{ return Tokens.T_INT64_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 96:\r\n\t\t\t\t\t// #line 159\r\n\t\t\t\t\t{ return Tokens.T_PRINT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 97:\r\n\t\t\t\t\t// #line 161\r\n\t\t\t\t\t{ return Tokens.T_TRAIT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 98:\r\n\t\t\t\t\t// #line 193\r\n\t\t\t\t\t{ return Tokens.T_THROW; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 99:\r\n\t\t\t\t\t// #line 180\r\n\t\t\t\t\t{ return Tokens.T_ARRAY; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 100:\r\n\t\t\t\t\t// #line 175\r\n\t\t\t\t\t{ return Tokens.T_UNSET; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 101:\r\n\t\t\t\t\t// #line 140\r\n\t\t\t\t\t{ return Tokens.T_ENDIF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 102:\r\n\t\t\t\t\t// #line 173\r\n\t\t\t\t\t{ return Tokens.T_EMPTY; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 103:\r\n\t\t\t\t\t// #line 198\r\n\t\t\t\t\t{ return Tokens.T_FINAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 104:\r\n\t\t\t\t\t// #line 237\r\n\t\t\t\t\t{ return Tokens.T_FALSE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 105:\r\n\t\t\t\t\t// #line 137\r\n\t\t\t\t\t{ return Tokens.T_YIELD; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 106:\r\n\t\t\t\t\t// #line 142\r\n\t\t\t\t\t{ return Tokens.T_WHILE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 107:\r\n\t\t\t\t\t// #line 156\r\n\t\t\t\t\t{ return Tokens.T_BREAK; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 108:\r\n\t\t\t\t\t// #line 225\r\n\t\t\t\t\t{ return Tokens.T_SET; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 109:\r\n\t\t\t\t\t// #line 224\r\n\t\t\t\t\t{ return Tokens.T_GET; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 110:\r\n\t\t\t\t\t// #line 294\r\n\t\t\t\t\t{ return Tokens.T_INT32_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 111:\r\n\t\t\t\t\t// #line 214\r\n\t\t\t\t\t{ return Tokens.T_STRING_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 112:\r\n\t\t\t\t\t// #line 174\r\n\t\t\t\t\t{ return Tokens.T_STATIC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 113:\r\n\t\t\t\t\t// #line 152\r\n\t\t\t\t\t{ return Tokens.T_SWITCH; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 114:\r\n\t\t\t\t\t// #line 136\r\n\t\t\t\t\t{ return Tokens.T_RETURN; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 115:\r\n\t\t\t\t\t// #line 207\r\n\t\t\t\t\t{ return Tokens.T_IMPORT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 116:\r\n\t\t\t\t\t// #line 233\r\n\t\t\t\t\t{ return Tokens.T_PARENT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 117:\r\n\t\t\t\t\t// #line 201\r\n\t\t\t\t\t{ return Tokens.T_PUBLIC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 118:\r\n\t\t\t\t\t// #line 171\r\n\t\t\t\t\t{ return Tokens.T_GLOBAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 119:\r\n\t\t\t\t\t// #line 139\r\n\t\t\t\t\t{ return Tokens.T_ELSEIF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 120:\r\n\t\t\t\t\t// #line 146\r\n\t\t\t\t\t{ return Tokens.T_ENDFOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 121:\r\n\t\t\t\t\t// #line 213\r\n\t\t\t\t\t{ return Tokens.T_DOUBLE_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 122:\r\n\t\t\t\t\t// #line 216\r\n\t\t\t\t\t{ return Tokens.T_OBJECT_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 123:\r\n\t\t\t\t\t// #line 226\r\n\t\t\t\t\t{ return Tokens.T_CALL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 124:\r\n\t\t\t\t\t// #line 300\r\n\t\t\t\t\t{ return Tokens.T_DOUBLE_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 125:\r\n\t\t\t\t\t// #line 292\r\n\t\t\t\t\t{ return Tokens.T_INT8_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 126:\r\n\t\t\t\t\t// #line 298\r\n\t\t\t\t\t{ return Tokens.T_UINT32_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 127:\r\n\t\t\t\t\t// #line 307\r\n\t\t\t\t\t{ return Tokens.T_BOOL_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 128:\r\n\t\t\t\t\t// #line 169\r\n\t\t\t\t\t{ return Tokens.T_REQUIRE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 129:\r\n\t\t\t\t\t// #line 167\r\n\t\t\t\t\t{ return Tokens.T_INCLUDE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 130:\r\n\t\t\t\t\t// #line 199\r\n\t\t\t\t\t{ return Tokens.T_PRIVATE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 131:\r\n\t\t\t\t\t// #line 219\r\n\t\t\t\t\t{ return Tokens.T_PARTIAL; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 132:\r\n\t\t\t\t\t// #line 163\r\n\t\t\t\t\t{ return Tokens.T_EXTENDS; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 133:\r\n\t\t\t\t\t// #line 149\r\n\t\t\t\t\t{ return Tokens.T_DECLARE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 134:\r\n\t\t\t\t\t// #line 155\r\n\t\t\t\t\t{ return Tokens.T_DEFAULT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 135:\r\n\t\t\t\t\t// #line 192\r\n\t\t\t\t\t{ return Tokens.T_FINALLY; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 136:\r\n\t\t\t\t\t// #line 147\r\n\t\t\t\t\t{ return Tokens.T_FOREACH; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 137:\r\n\t\t\t\t\t// #line 232\r\n\t\t\t\t\t{ return Tokens.T_SLEEP; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 138:\r\n\t\t\t\t\t// #line 188\r\n\t\t\t\t\t{ return Tokens.T_DIR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 139:\r\n\t\t\t\t\t// #line 295\r\n\t\t\t\t\t{ return Tokens.T_INT64_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 140:\r\n\t\t\t\t\t// #line 293\r\n\t\t\t\t\t{ return Tokens.T_INT16_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 141:\r\n\t\t\t\t\t// #line 305\r\n\t\t\t\t\t{ return Tokens.T_ARRAY_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 142:\r\n\t\t\t\t\t// #line 296\r\n\t\t\t\t\t{ return Tokens.T_UINT8_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 143:\r\n\t\t\t\t\t// #line 308\r\n\t\t\t\t\t{ return Tokens.T_UNSET_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 144:\r\n\t\t\t\t\t// #line 301\r\n\t\t\t\t\t{ return Tokens.T_FLOAT_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 145:\r\n\t\t\t\t\t// #line 181\r\n\t\t\t\t\t{ return Tokens.T_CALLABLE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 146:\r\n\t\t\t\t\t// #line 157\r\n\t\t\t\t\t{ return Tokens.T_CONTINUE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 147:\r\n\t\t\t\t\t// #line 215\r\n\t\t\t\t\t{ return Tokens.T_RESOURCE_TYPE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 148:\r\n\t\t\t\t\t// #line 197\r\n\t\t\t\t\t{ return Tokens.T_ABSTRACT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 149:\r\n\t\t\t\t\t// #line 143\r\n\t\t\t\t\t{ return Tokens.T_ENDWHILE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 150:\r\n\t\t\t\t\t// #line 134\r\n\t\t\t\t\t{ return Tokens.T_FUNCTION; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 151:\r\n\t\t\t\t\t// #line 186\r\n\t\t\t\t\t{ return Tokens.T_LINE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 152:\r\n\t\t\t\t\t// #line 187\r\n\t\t\t\t\t{ return Tokens.T_FILE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 153:\r\n\t\t\t\t\t// #line 231\r\n\t\t\t\t\t{ return Tokens.T_WAKEUP; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 154:\r\n\t\t\t\t\t// #line 302\r\n\t\t\t\t\t{ return Tokens.T_STRING_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 155:\r\n\t\t\t\t\t// #line 299\r\n\t\t\t\t\t{ return Tokens.T_UINT64_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 156:\r\n\t\t\t\t\t// #line 297\r\n\t\t\t\t\t{ return Tokens.T_UINT16_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 157:\r\n\t\t\t\t\t// #line 306\r\n\t\t\t\t\t{ return Tokens.T_OBJECT_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 158:\r\n\t\t\t\t\t// #line 303\r\n\t\t\t\t\t{ return Tokens.T_BINARY_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 159:\r\n\t\t\t\t\t// #line 217\r\n\t\t\t\t\t{ return Tokens.T_TYPEOF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 160:\r\n\t\t\t\t\t// #line 162\r\n\t\t\t\t\t{ return Tokens.T_INSTEADOF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 161:\r\n\t\t\t\t\t// #line 194\r\n\t\t\t\t\t{ return Tokens.T_INTERFACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 162:\r\n\t\t\t\t\t// #line 200\r\n\t\t\t\t\t{ return Tokens.T_PROTECTED; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 163:\r\n\t\t\t\t\t// #line 205\r\n\t\t\t\t\t{ return Tokens.T_NAMESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 164:\r\n\t\t\t\t\t// #line 153\r\n\t\t\t\t\t{ return Tokens.T_ENDSWITCH; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 165:\r\n\t\t\t\t\t// #line 182\r\n\t\t\t\t\t{ return Tokens.T_CLASS_C; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 166:\r\n\t\t\t\t\t// #line 183\r\n\t\t\t\t\t{ return Tokens.T_TRAIT_C; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 167:\r\n\t\t\t\t\t// #line 304\r\n\t\t\t\t\t{ return Tokens.T_UNICODE_CAST; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 168:\r\n\t\t\t\t\t// #line 202\r\n\t\t\t\t\t{ return Tokens.T_INSTANCEOF; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 169:\r\n\t\t\t\t\t// #line 195\r\n\t\t\t\t\t{ return Tokens.T_IMPLEMENTS; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 170:\r\n\t\t\t\t\t// #line 150\r\n\t\t\t\t\t{ return Tokens.T_ENDDECLARE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 171:\r\n\t\t\t\t\t// #line 148\r\n\t\t\t\t\t{ return Tokens.T_ENDFOREACH; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 172:\r\n\t\t\t\t\t// #line 228\r\n\t\t\t\t\t{ return Tokens.T_TOSTRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 173:\r\n\t\t\t\t\t// #line 235\r\n\t\t\t\t\t{ return Tokens.T_AUTOLOAD; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 174:\r\n\t\t\t\t\t// #line 230\r\n\t\t\t\t\t{ return Tokens.T_DESTRUCT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 175:\r\n\t\t\t\t\t// #line 185\r\n\t\t\t\t\t{ return Tokens.T_METHOD_C; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 176:\r\n\t\t\t\t\t// #line 229\r\n\t\t\t\t\t{ return Tokens.T_CONSTRUCT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 177:\r\n\t\t\t\t\t// #line 170\r\n\t\t\t\t\t{ return Tokens.T_REQUIRE_ONCE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 178:\r\n\t\t\t\t\t// #line 168\r\n\t\t\t\t\t{ return Tokens.T_INCLUDE_ONCE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 179:\r\n\t\t\t\t\t// #line 227\r\n\t\t\t\t\t{ return Tokens.T_CALLSTATIC; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 180:\r\n\t\t\t\t\t// #line 184\r\n\t\t\t\t\t{ return Tokens.T_FUNC_C; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 181:\r\n\t\t\t\t\t// #line 204\r\n\t\t\t\t\t{ return Tokens.T_NAMESPACE_C; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 182:\r\n\t\t\t\t\t// #line 283\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_FILE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 183:\r\n\t\t\t\t\t// #line 282\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_LINE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 184:\r\n\t\t\t\t\t// #line 284\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_DEFAULT_LINE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 185:\r\n\t\t\t\t\t// #line 285\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_DEFAULT_FILE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 186:\r\n\t\t\t\t\t// #line 492\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 187:\r\n\t\t\t\t\t// #line 484\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 188:\r\n\t\t\t\t\t// #line 475\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 189:\r\n\t\t\t\t\t// #line 485\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_DOUBLE_QUOTES; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 190:\r\n\t\t\t\t\t// #line 474\r\n\t\t\t\t\t{ return Tokens.T_NUM_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 191:\r\n\t\t\t\t\t// #line 491\r\n\t\t\t\t\t{ inString = true; return (Tokens)GetTokenChar(0); }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 192:\r\n\t\t\t\t\t// #line 493\r\n\t\t\t\t\t{ return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 193:\r\n\t\t\t\t\t// #line 489\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 194:\r\n\t\t\t\t\t// #line 488\r\n\t\t\t\t\t{ yyless(1); return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 195:\r\n\t\t\t\t\t// #line 486\r\n\t\t\t\t\t{ inString = true; return Tokens.T_VARIABLE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 196:\r\n\t\t\t\t\t// #line 487\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 197:\r\n\t\t\t\t\t// #line 483\r\n\t\t\t\t\t{ return Tokens.T_BAD_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 198:\r\n\t\t\t\t\t// #line 479\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 199:\r\n\t\t\t\t\t// #line 481\r\n\t\t\t\t\t{ return Tokens.EscapedCharacter; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 200:\r\n\t\t\t\t\t// #line 478\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 201:\r\n\t\t\t\t\t// #line 480\r\n\t\t\t\t\t{ return Tokens.EscapedCharacter; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 202:\r\n\t\t\t\t\t// #line 476\r\n\t\t\t\t\t{ return Tokens.OctalCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 203:\r\n\t\t\t\t\t// #line 482\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 204:\r\n\t\t\t\t\t// #line 490\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 205:\r\n\t\t\t\t\t// #line 477\r\n\t\t\t\t\t{ return Tokens.HexCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 206:\r\n\t\t\t\t\t// #line 434\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 207:\r\n\t\t\t\t\t// #line 435\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.SingleQuotedString; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 208:\r\n\t\t\t\t\t// #line 515\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 209:\r\n\t\t\t\t\t// #line 508\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_BACKQUOTE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 210:\r\n\t\t\t\t\t// #line 498\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 211:\r\n\t\t\t\t\t// #line 507\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 212:\r\n\t\t\t\t\t// #line 497\r\n\t\t\t\t\t{ return Tokens.T_NUM_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 213:\r\n\t\t\t\t\t// #line 513\r\n\t\t\t\t\t{ inString = true; return (Tokens)GetTokenChar(0); }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 214:\r\n\t\t\t\t\t// #line 516\r\n\t\t\t\t\t{ return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 215:\r\n\t\t\t\t\t// #line 512\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 216:\r\n\t\t\t\t\t// #line 511\r\n\t\t\t\t\t{ yyless(1); return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 217:\r\n\t\t\t\t\t// #line 509\r\n\t\t\t\t\t{ inString = true; return Tokens.T_VARIABLE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 218:\r\n\t\t\t\t\t// #line 510\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 219:\r\n\t\t\t\t\t// #line 506\r\n\t\t\t\t\t{ return Tokens.T_BAD_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 220:\r\n\t\t\t\t\t// #line 503\r\n\t\t\t\t\t{ return Tokens.EscapedCharacter; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 221:\r\n\t\t\t\t\t// #line 502\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 222:\r\n\t\t\t\t\t// #line 504\r\n\t\t\t\t\t{ return Tokens.EscapedCharacter; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 223:\r\n\t\t\t\t\t// #line 501\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 224:\r\n\t\t\t\t\t// #line 499\r\n\t\t\t\t\t{ return Tokens.OctalCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 225:\r\n\t\t\t\t\t// #line 505\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 226:\r\n\t\t\t\t\t// #line 514\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 227:\r\n\t\t\t\t\t// #line 500\r\n\t\t\t\t\t{ return Tokens.HexCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 228:\r\n\t\t\t\t\t// #line 470\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 229:\r\n\t\t\t\t\t// #line 463\r\n\t\t\t\t\t{ return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 230:\r\n\t\t\t\t\t// #line 455\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 231:\r\n\t\t\t\t\t// #line 454\r\n\t\t\t\t\t{ return Tokens.T_NUM_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 232:\r\n\t\t\t\t\t// #line 468\r\n\t\t\t\t\t{ inString = true; return (Tokens)GetTokenChar(0); }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 233:\r\n\t\t\t\t\t// #line 471\r\n\t\t\t\t\t{ return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 234:\r\n\t\t\t\t\t// #line 467\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 235:\r\n\t\t\t\t\t// #line 466\r\n\t\t\t\t\t{ yyless(1); return Tokens.T_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 236:\r\n\t\t\t\t\t// #line 464\r\n\t\t\t\t\t{ inString = true; return Tokens.T_VARIABLE; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 237:\r\n\t\t\t\t\t// #line 465\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 238:\r\n\t\t\t\t\t// #line 462\r\n\t\t\t\t\t{ return Tokens.T_BAD_CHARACTER; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 239:\r\n\t\t\t\t\t// #line 459\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 240:\r\n\t\t\t\t\t// #line 460\r\n\t\t\t\t\t{ return Tokens.EscapedCharacter; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 241:\r\n\t\t\t\t\t// #line 458\r\n\t\t\t\t\t{ inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 242:\r\n\t\t\t\t\t// #line 456\r\n\t\t\t\t\t{ return Tokens.OctalCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 243:\r\n\t\t\t\t\t// #line 461\r\n\t\t\t\t\t{ inString = true; return Tokens.T_STRING; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 244:\r\n\t\t\t\t\t// #line 469\r\n\t\t\t\t\t{ yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 245:\r\n\t\t\t\t\t// #line 457\r\n\t\t\t\t\t{ return Tokens.HexCharCode; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 246:\r\n\t\t\t\t\t// #line 439\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (IsCurrentHeredocEnd(0))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t  yyless(hereDocLabel.Length);\r\n\t\t\t\t\t\t  hereDocLabel = null;\r\n\t\t\t\t\t\t  BEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\t\treturn Tokens.T_END_HEREDOC;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tinString = true;\r\n\t\t\t\t\t\t\treturn Tokens.T_STRING;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 247:\r\n\t\t\t\t\t// #line 379\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tyyless(0);\r\n\t\t\t\t\t\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 248:\r\n\t\t\t\t\t// #line 372\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\t\t\t\t\t\tinString = (CurrentLexicalState != LexicalStates.ST_IN_SCRIPTING); \r\n\t\t\t\t\t\tisCode = true;\r\n\t\t\t\t\t\treturn Tokens.T_STRING;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 249:\r\n\t\t\t\t\t// #line 393\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tyyless(0);\r\n\t\t\t\t\t\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\t\t\t\t\t\tyy_push_state(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 250:\r\n\t\t\t\t\t// #line 387\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\t\t\t\t\t\tyy_push_state(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\treturn Tokens.T_STRING_VARNAME;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 251:\r\n\t\t\t\t\t// #line 428\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 252:\r\n\t\t\t\t\t// #line 430\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 253:\r\n\t\t\t\t\t// #line 429\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_DOC_COMMENT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 254:\r\n\t\t\t\t\t// #line 422\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 255:\r\n\t\t\t\t\t// #line 424\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 256:\r\n\t\t\t\t\t// #line 423\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_COMMENT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 257:\r\n\t\t\t\t\t// #line 402\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 258:\r\n\t\t\t\t\t// #line 403\r\n\t\t\t\t\t{ yymore(); break; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 259:\r\n\t\t\t\t\t// #line 404\r\n\t\t\t\t\t{ BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_LINE_COMMENT; }\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 260:\r\n\t\t\t\t\t// #line 406\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t  if (AllowAspTags || GetTokenChar(TokenLength - 2) != '%') \r\n\t\t\t\t\t  { \r\n\t\t\t\t\t\t\tyyless(0);\r\n\t\t\t\t\t\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\t\t\t\t\t\treturn Tokens.T_LINE_COMMENT;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyymore();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\tcase 263: goto case 2;\r\n\t\t\t\tcase 264: goto case 4;\r\n\t\t\t\tcase 265: goto case 5;\r\n\t\t\t\tcase 266: goto case 7;\r\n\t\t\t\tcase 267: goto case 8;\r\n\t\t\t\tcase 268: goto case 10;\r\n\t\t\t\tcase 269: goto case 14;\r\n\t\t\t\tcase 270: goto case 21;\r\n\t\t\t\tcase 271: goto case 24;\r\n\t\t\t\tcase 272: goto case 26;\r\n\t\t\t\tcase 273: goto case 89;\r\n\t\t\t\tcase 274: goto case 183;\r\n\t\t\t\tcase 275: goto case 186;\r\n\t\t\t\tcase 276: goto case 190;\r\n\t\t\t\tcase 277: goto case 191;\r\n\t\t\t\tcase 278: goto case 192;\r\n\t\t\t\tcase 279: goto case 197;\r\n\t\t\t\tcase 280: goto case 198;\r\n\t\t\t\tcase 281: goto case 200;\r\n\t\t\t\tcase 282: goto case 202;\r\n\t\t\t\tcase 283: goto case 205;\r\n\t\t\t\tcase 284: goto case 208;\r\n\t\t\t\tcase 285: goto case 212;\r\n\t\t\t\tcase 286: goto case 213;\r\n\t\t\t\tcase 287: goto case 214;\r\n\t\t\t\tcase 288: goto case 219;\r\n\t\t\t\tcase 289: goto case 221;\r\n\t\t\t\tcase 290: goto case 223;\r\n\t\t\t\tcase 291: goto case 224;\r\n\t\t\t\tcase 292: goto case 227;\r\n\t\t\t\tcase 293: goto case 228;\r\n\t\t\t\tcase 294: goto case 229;\r\n\t\t\t\tcase 295: goto case 231;\r\n\t\t\t\tcase 296: goto case 232;\r\n\t\t\t\tcase 297: goto case 233;\r\n\t\t\t\tcase 298: goto case 238;\r\n\t\t\t\tcase 299: goto case 239;\r\n\t\t\t\tcase 300: goto case 241;\r\n\t\t\t\tcase 301: goto case 242;\r\n\t\t\t\tcase 302: goto case 245;\r\n\t\t\t\tcase 303: goto case 246;\r\n\t\t\t\tcase 304: goto case 257;\r\n\t\t\t\tcase 305: goto case 259;\r\n\t\t\t\tcase 307: goto case 8;\r\n\t\t\t\tcase 308: goto case 10;\r\n\t\t\t\tcase 309: goto case 21;\r\n\t\t\t\tcase 310: goto case 26;\r\n\t\t\t\tcase 311: goto case 190;\r\n\t\t\t\tcase 312: goto case 191;\r\n\t\t\t\tcase 313: goto case 212;\r\n\t\t\t\tcase 314: goto case 213;\r\n\t\t\t\tcase 315: goto case 231;\r\n\t\t\t\tcase 316: goto case 232;\r\n\t\t\t\tcase 318: goto case 8;\r\n\t\t\t\tcase 319: goto case 10;\r\n\t\t\t\tcase 321: goto case 8;\r\n\t\t\t\tcase 322: goto case 10;\r\n\t\t\t\tcase 324: goto case 8;\r\n\t\t\t\tcase 325: goto case 10;\r\n\t\t\t\tcase 327: goto case 8;\r\n\t\t\t\tcase 328: goto case 10;\r\n\t\t\t\tcase 330: goto case 8;\r\n\t\t\t\tcase 331: goto case 10;\r\n\t\t\t\tcase 333: goto case 8;\r\n\t\t\t\tcase 334: goto case 10;\r\n\t\t\t\tcase 336: goto case 8;\r\n\t\t\t\tcase 337: goto case 10;\r\n\t\t\t\tcase 339: goto case 8;\r\n\t\t\t\tcase 340: goto case 10;\r\n\t\t\t\tcase 342: goto case 8;\r\n\t\t\t\tcase 343: goto case 10;\r\n\t\t\t\tcase 345: goto case 8;\r\n\t\t\t\tcase 346: goto case 10;\r\n\t\t\t\tcase 348: goto case 8;\r\n\t\t\t\tcase 349: goto case 10;\r\n\t\t\t\tcase 351: goto case 8;\r\n\t\t\t\tcase 352: goto case 10;\r\n\t\t\t\tcase 354: goto case 8;\r\n\t\t\t\tcase 355: goto case 10;\r\n\t\t\t\tcase 357: goto case 8;\r\n\t\t\t\tcase 358: goto case 10;\r\n\t\t\t\tcase 360: goto case 8;\r\n\t\t\t\tcase 361: goto case 10;\r\n\t\t\t\tcase 363: goto case 10;\r\n\t\t\t\tcase 365: goto case 10;\r\n\t\t\t\tcase 367: goto case 10;\r\n\t\t\t\tcase 369: goto case 10;\r\n\t\t\t\tcase 371: goto case 10;\r\n\t\t\t\tcase 373: goto case 10;\r\n\t\t\t\tcase 375: goto case 10;\r\n\t\t\t\tcase 377: goto case 10;\r\n\t\t\t\tcase 379: goto case 10;\r\n\t\t\t\tcase 381: goto case 10;\r\n\t\t\t\tcase 383: goto case 10;\r\n\t\t\t\tcase 385: goto case 10;\r\n\t\t\t\tcase 387: goto case 10;\r\n\t\t\t\tcase 389: goto case 10;\r\n\t\t\t\tcase 391: goto case 10;\r\n\t\t\t\tcase 393: goto case 10;\r\n\t\t\t\tcase 395: goto case 10;\r\n\t\t\t\tcase 397: goto case 10;\r\n\t\t\t\tcase 399: goto case 10;\r\n\t\t\t\tcase 401: goto case 10;\r\n\t\t\t\tcase 403: goto case 10;\r\n\t\t\t\tcase 405: goto case 10;\r\n\t\t\t\tcase 407: goto case 10;\r\n\t\t\t\tcase 409: goto case 10;\r\n\t\t\t\tcase 411: goto case 10;\r\n\t\t\t\tcase 413: goto case 10;\r\n\t\t\t\tcase 415: goto case 10;\r\n\t\t\t\tcase 417: goto case 10;\r\n\t\t\t\tcase 419: goto case 10;\r\n\t\t\t\tcase 421: goto case 10;\r\n\t\t\t\tcase 423: goto case 10;\r\n\t\t\t\tcase 425: goto case 10;\r\n\t\t\t\tcase 427: goto case 10;\r\n\t\t\t\tcase 429: goto case 10;\r\n\t\t\t\tcase 431: goto case 10;\r\n\t\t\t\tcase 433: goto case 10;\r\n\t\t\t\tcase 435: goto case 10;\r\n\t\t\t\tcase 437: goto case 10;\r\n\t\t\t\tcase 439: goto case 10;\r\n\t\t\t\tcase 441: goto case 10;\r\n\t\t\t\tcase 443: goto case 10;\r\n\t\t\t\tcase 445: goto case 10;\r\n\t\t\t\tcase 447: goto case 10;\r\n\t\t\t\tcase 449: goto case 10;\r\n\t\t\t\tcase 451: goto case 10;\r\n\t\t\t\tcase 453: goto case 10;\r\n\t\t\t\tcase 455: goto case 10;\r\n\t\t\t\tcase 457: goto case 10;\r\n\t\t\t\tcase 459: goto case 10;\r\n\t\t\t\tcase 461: goto case 10;\r\n\t\t\t\tcase 463: goto case 10;\r\n\t\t\t\tcase 465: goto case 10;\r\n\t\t\t\tcase 467: goto case 10;\r\n\t\t\t\tcase 469: goto case 10;\r\n\t\t\t\tcase 471: goto case 10;\r\n\t\t\t\tcase 473: goto case 10;\r\n\t\t\t\tcase 475: goto case 10;\r\n\t\t\t\tcase 477: goto case 10;\r\n\t\t\t\tcase 479: goto case 10;\r\n\t\t\t\tcase 481: goto case 10;\r\n\t\t\t\tcase 483: goto case 10;\r\n\t\t\t\tcase 485: goto case 10;\r\n\t\t\t\tcase 487: goto case 10;\r\n\t\t\t\tcase 489: goto case 10;\r\n\t\t\t\tcase 491: goto case 10;\r\n\t\t\t\tcase 493: goto case 10;\r\n\t\t\t\tcase 495: goto case 10;\r\n\t\t\t\tcase 497: goto case 10;\r\n\t\t\t\tcase 499: goto case 10;\r\n\t\t\t\tcase 501: goto case 10;\r\n\t\t\t\tcase 503: goto case 10;\r\n\t\t\t\tcase 505: goto case 10;\r\n\t\t\t\tcase 507: goto case 10;\r\n\t\t\t\tcase 509: goto case 10;\r\n\t\t\t\tcase 511: goto case 10;\r\n\t\t\t\tcase 513: goto case 10;\r\n\t\t\t\tcase 515: goto case 10;\r\n\t\t\t\tcase 517: goto case 10;\r\n\t\t\t\tcase 519: goto case 10;\r\n\t\t\t\tcase 521: goto case 10;\r\n\t\t\t\tcase 523: goto case 10;\r\n\t\t\t\tcase 525: goto case 10;\r\n\t\t\t\tcase 527: goto case 10;\r\n\t\t\t\tcase 593: goto case 5;\r\n\t\t\t\tcase 594: goto case 10;\r\n\t\t\t\tcase 595: goto case 200;\r\n\t\t\t\tcase 596: goto case 202;\r\n\t\t\t\tcase 597: goto case 223;\r\n\t\t\t\tcase 598: goto case 224;\r\n\t\t\t\tcase 599: goto case 241;\r\n\t\t\t\tcase 600: goto case 242;\r\n\t\t\t\tcase 621: goto case 10;\r\n\t\t\t\tcase 623: goto case 10;\r\n\t\t\t\tcase 624: goto case 10;\r\n\t\t\t\tcase 625: goto case 10;\r\n\t\t\t\tcase 626: goto case 10;\r\n\t\t\t\tcase 627: goto case 10;\r\n\t\t\t\tcase 628: goto case 10;\r\n\t\t\t\tcase 629: goto case 10;\r\n\t\t\t\tcase 630: goto case 10;\r\n\t\t\t\tcase 631: goto case 10;\r\n\t\t\t\tcase 632: goto case 10;\r\n\t\t\t\tcase 633: goto case 10;\r\n\t\t\t\tcase 634: goto case 10;\r\n\t\t\t\tcase 635: goto case 10;\r\n\t\t\t\tcase 636: goto case 10;\r\n\t\t\t\tcase 637: goto case 10;\r\n\t\t\t\tcase 638: goto case 10;\r\n\t\t\t\tcase 639: goto case 10;\r\n\t\t\t\tcase 640: goto case 10;\r\n\t\t\t\tcase 641: goto case 10;\r\n\t\t\t\tcase 642: goto case 10;\r\n\t\t\t\tcase 643: goto case 10;\r\n\t\t\t\tcase 644: goto case 10;\r\n\t\t\t\tcase 645: goto case 10;\r\n\t\t\t\tcase 646: goto case 10;\r\n\t\t\t\tcase 647: goto case 10;\r\n\t\t\t\tcase 648: goto case 10;\r\n\t\t\t\tcase 649: goto case 10;\r\n\t\t\t\tcase 650: goto case 10;\r\n\t\t\t\tcase 651: goto case 10;\r\n\t\t\t\tcase 652: goto case 10;\r\n\t\t\t\tcase 653: goto case 10;\r\n\t\t\t\tcase 654: goto case 10;\r\n\t\t\t\tcase 655: goto case 10;\r\n\t\t\t\tcase 656: goto case 10;\r\n\t\t\t\tcase 657: goto case 10;\r\n\t\t\t\tcase 658: goto case 10;\r\n\t\t\t\tcase 659: goto case 10;\r\n\t\t\t\tcase 660: goto case 10;\r\n\t\t\t\tcase 661: goto case 10;\r\n\t\t\t\tcase 662: goto case 10;\r\n\t\t\t\tcase 663: goto case 10;\r\n\t\t\t\tcase 664: goto case 10;\r\n\t\t\t\tcase 665: goto case 10;\r\n\t\t\t\tcase 666: goto case 10;\r\n\t\t\t\tcase 667: goto case 10;\r\n\t\t\t\tcase 668: goto case 10;\r\n\t\t\t\tcase 669: goto case 10;\r\n\t\t\t\tcase 670: goto case 10;\r\n\t\t\t\tcase 671: goto case 10;\r\n\t\t\t\tcase 672: goto case 10;\r\n\t\t\t\tcase 673: goto case 10;\r\n\t\t\t\tcase 674: goto case 10;\r\n\t\t\t\tcase 675: goto case 10;\r\n\t\t\t\tcase 676: goto case 10;\r\n\t\t\t\tcase 677: goto case 10;\r\n\t\t\t\tcase 678: goto case 10;\r\n\t\t\t\tcase 679: goto case 10;\r\n\t\t\t\tcase 680: goto case 10;\r\n\t\t\t\tcase 681: goto case 10;\r\n\t\t\t\tcase 682: goto case 10;\r\n\t\t\t\tcase 683: goto case 10;\r\n\t\t\t\tcase 684: goto case 10;\r\n\t\t\t\tcase 685: goto case 10;\r\n\t\t\t\tcase 686: goto case 10;\r\n\t\t\t\tcase 687: goto case 10;\r\n\t\t\t\tcase 688: goto case 10;\r\n\t\t\t\tcase 689: goto case 10;\r\n\t\t\t\tcase 690: goto case 10;\r\n\t\t\t\tcase 691: goto case 10;\r\n\t\t\t\tcase 692: goto case 10;\r\n\t\t\t\tcase 693: goto case 10;\r\n\t\t\t\tcase 694: goto case 10;\r\n\t\t\t\tcase 695: goto case 10;\r\n\t\t\t\tcase 696: goto case 10;\r\n\t\t\t\tcase 697: goto case 10;\r\n\t\t\t\tcase 698: goto case 10;\r\n\t\t\t\tcase 699: goto case 10;\r\n\t\t\t\tcase 700: goto case 10;\r\n\t\t\t\tcase 701: goto case 10;\r\n\t\t\t\tcase 702: goto case 10;\r\n\t\t\t\tcase 703: goto case 10;\r\n\t\t\t\tcase 704: goto case 10;\r\n\t\t\t\tcase 705: goto case 10;\r\n\t\t\t\tcase 706: goto case 10;\r\n\t\t\t\tcase 707: goto case 10;\r\n\t\t\t\tcase 708: goto case 10;\r\n\t\t\t\tcase 709: goto case 10;\r\n\t\t\t\tcase 710: goto case 10;\r\n\t\t\t\tcase 711: goto case 10;\r\n\t\t\t\tcase 712: goto case 10;\r\n\t\t\t\tcase 713: goto case 10;\r\n\t\t\t\tcase 714: goto case 10;\r\n\t\t\t\tcase 715: goto case 10;\r\n\t\t\t\tcase 716: goto case 10;\r\n\t\t\t\tcase 717: goto case 10;\r\n\t\t\t\tcase 718: goto case 10;\r\n\t\t\t\tcase 719: goto case 10;\r\n\t\t\t\tcase 720: goto case 10;\r\n\t\t\t\tcase 721: goto case 10;\r\n\t\t\t\tcase 722: goto case 10;\r\n\t\t\t\tcase 723: goto case 10;\r\n\t\t\t\tcase 724: goto case 10;\r\n\t\t\t\tcase 725: goto case 10;\r\n\t\t\t\tcase 726: goto case 10;\r\n\t\t\t\tcase 727: goto case 10;\r\n\t\t\t\tcase 728: goto case 10;\r\n\t\t\t\tcase 729: goto case 10;\r\n\t\t\t\tcase 730: goto case 10;\r\n\t\t\t\tcase 731: goto case 10;\r\n\t\t\t\tcase 732: goto case 10;\r\n\t\t\t\tcase 733: goto case 10;\r\n\t\t\t\tcase 734: goto case 10;\r\n\t\t\t\tcase 735: goto case 10;\r\n\t\t\t\tcase 736: goto case 10;\r\n\t\t\t\tcase 737: goto case 10;\r\n\t\t\t\tcase 738: goto case 10;\r\n\t\t\t\tcase 739: goto case 10;\r\n\t\t\t\tcase 740: goto case 10;\r\n\t\t\t\tcase 741: goto case 10;\r\n\t\t\t\tcase 742: goto case 10;\r\n\t\t\t\tcase 743: goto case 10;\r\n\t\t\t\tcase 744: goto case 10;\r\n\t\t\t\tcase 745: goto case 10;\r\n\t\t\t\tcase 746: goto case 10;\r\n\t\t\t\tcase 747: goto case 10;\r\n\t\t\t\tcase 748: goto case 10;\r\n\t\t\t\tcase 749: goto case 10;\r\n\t\t\t\tcase 750: goto case 10;\r\n\t\t\t\tcase 751: goto case 10;\r\n\t\t\t\tcase 752: goto case 10;\r\n\t\t\t\tcase 753: goto case 10;\r\n\t\t\t\tcase 754: goto case 10;\r\n\t\t\t\tcase 755: goto case 10;\r\n\t\t\t\tcase 756: goto case 10;\r\n\t\t\t\tcase 757: goto case 10;\r\n\t\t\t\tcase 758: goto case 10;\r\n\t\t\t\tcase 759: goto case 10;\r\n\t\t\t\tcase 760: goto case 10;\r\n\t\t\t\tcase 761: goto case 10;\r\n\t\t\t\tcase 762: goto case 10;\r\n\t\t\t\tcase 763: goto case 10;\r\n\t\t\t\tcase 764: goto case 10;\r\n\t\t\t\tcase 765: goto case 10;\r\n\t\t\t\tcase 766: goto case 10;\r\n\t\t\t\tcase 767: goto case 10;\r\n\t\t\t\tcase 768: goto case 10;\r\n\t\t\t\tcase 769: goto case 10;\r\n\t\t\t\tcase 770: goto case 10;\r\n\t\t\t\tcase 771: goto case 10;\r\n\t\t\t\tcase 772: goto case 10;\r\n\t\t\t\tcase 773: goto case 10;\r\n\t\t\t\tcase 774: goto case 10;\r\n\t\t\t\tcase 775: goto case 10;\r\n\t\t\t\tcase 776: goto case 10;\r\n\t\t\t\tcase 777: goto case 10;\r\n\t\t\t\tcase 778: goto case 10;\r\n\t\t\t\tcase 779: goto case 10;\r\n\t\t\t\tcase 780: goto case 10;\r\n\t\t\t\tcase 781: goto case 10;\r\n\t\t\t\tcase 782: goto case 5;\r\n\t\t\t\tcase 783: goto case 10;\r\n\t\t\t\tcase 784: goto case 200;\r\n\t\t\t\tcase 785: goto case 223;\r\n\t\t\t\tcase 786: goto case 241;\r\n\t\t\t\tcase 789: goto case 10;\r\n\t\t\t\tcase 790: goto case 10;\r\n\t\t\t\tcase 791: goto case 10;\r\n\t\t\t\tcase 792: goto case 10;\r\n\t\t\t\tcase 793: goto case 10;\r\n\t\t\t\tcase 794: goto case 10;\r\n\t\t\t\tcase 795: goto case 10;\r\n\t\t\t\tcase 796: goto case 10;\r\n\t\t\t\tcase 797: goto case 10;\r\n\t\t\t\tcase 798: goto case 10;\r\n\t\t\t\tcase 799: goto case 10;\r\n\t\t\t\tcase 800: goto case 10;\r\n\t\t\t\tcase 801: goto case 10;\r\n\t\t\t\tcase 802: goto case 10;\r\n\t\t\t\tcase 803: goto case 10;\r\n\t\t\t\tcase 804: goto case 10;\r\n\t\t\t\tcase 805: goto case 10;\r\n\t\t\t\tcase 806: goto case 10;\r\n\t\t\t\tcase 807: goto case 10;\r\n\t\t\t\tcase 808: goto case 10;\r\n\t\t\t\tcase 809: goto case 10;\r\n\t\t\t\tcase 810: goto case 10;\r\n\t\t\t\tcase 811: goto case 10;\r\n\t\t\t\tcase 812: goto case 10;\r\n\t\t\t\tcase 813: goto case 10;\r\n\t\t\t\tcase 814: goto case 10;\r\n\t\t\t\tcase 815: goto case 10;\r\n\t\t\t\tcase 816: goto case 10;\r\n\t\t\t\tcase 817: goto case 10;\r\n\t\t\t\tcase 818: goto case 10;\r\n\t\t\t\tcase 819: goto case 10;\r\n\t\t\t\tcase 820: goto case 10;\r\n\t\t\t\tcase 821: goto case 10;\r\n\t\t\t\tcase 822: goto case 10;\r\n\t\t\t\tcase 823: goto case 10;\r\n\t\t\t\tcase 824: goto case 10;\r\n\t\t\t\tcase 825: goto case 10;\r\n\t\t\t\tcase 826: goto case 10;\r\n\t\t\t\tcase 827: goto case 10;\r\n\t\t\t\tcase 828: goto case 10;\r\n\t\t\t\tcase 829: goto case 10;\r\n\t\t\t\tcase 830: goto case 10;\r\n\t\t\t\tcase 831: goto case 10;\r\n\t\t\t\tcase 832: goto case 10;\r\n\t\t\t\tcase 833: goto case 10;\r\n\t\t\t\tcase 834: goto case 10;\r\n\t\t\t\tcase 835: goto case 10;\r\n\t\t\t\tcase 836: goto case 10;\r\n\t\t\t\tcase 837: goto case 10;\r\n\t\t\t\tcase 838: goto case 10;\r\n\t\t\t\tcase 839: goto case 10;\r\n\t\t\t\tcase 840: goto case 10;\r\n\t\t\t\tcase 841: goto case 10;\r\n\t\t\t\tcase 842: goto case 10;\r\n\t\t\t\tcase 843: goto case 10;\r\n\t\t\t\tcase 844: goto case 10;\r\n\t\t\t\tcase 845: goto case 10;\r\n\t\t\t\tcase 846: goto case 10;\r\n\t\t\t\tcase 847: goto case 10;\r\n\t\t\t\tcase 848: goto case 10;\r\n\t\t\t\tcase 849: goto case 10;\r\n\t\t\t\tcase 850: goto case 10;\r\n\t\t\t\tcase 851: goto case 10;\r\n\t\t\t\tcase 852: goto case 10;\r\n\t\t\t\tcase 853: goto case 10;\r\n\t\t\t\tcase 854: goto case 10;\r\n\t\t\t\tcase 855: goto case 10;\r\n\t\t\t\tcase 856: goto case 10;\r\n\t\t\t\tcase 857: goto case 10;\r\n\t\t\t\tcase 858: goto case 10;\r\n\t\t\t\tcase 859: goto case 10;\r\n\t\t\t\tcase 860: goto case 10;\r\n\t\t\t\tcase 861: goto case 10;\r\n\t\t\t\tcase 862: goto case 10;\r\n\t\t\t\tcase 863: goto case 10;\r\n\t\t\t\tcase 864: goto case 10;\r\n\t\t\t\tcase 865: goto case 10;\r\n\t\t\t\tcase 866: goto case 10;\r\n\t\t\t\tcase 867: goto case 10;\r\n\t\t\t\tcase 868: goto case 10;\r\n\t\t\t\tcase 869: goto case 10;\r\n\t\t\t\tcase 870: goto case 10;\r\n\t\t\t\tcase 871: goto case 10;\r\n\t\t\t\tcase 872: goto case 10;\r\n\t\t\t\tcase 873: goto case 10;\r\n\t\t\t\tcase 874: goto case 10;\r\n\t\t\t\tcase 875: goto case 10;\r\n\t\t\t\tcase 876: goto case 10;\r\n\t\t\t\tcase 877: goto case 10;\r\n\t\t\t\tcase 878: goto case 10;\r\n\t\t\t\tcase 879: goto case 10;\r\n\t\t\t\tcase 880: goto case 10;\r\n\t\t\t\tcase 881: goto case 5;\r\n\t\t\t\tcase 882: goto case 200;\r\n\t\t\t\tcase 883: goto case 223;\r\n\t\t\t\tcase 884: goto case 241;\r\n\t\t\t\tcase 886: goto case 10;\r\n\t\t\t\tcase 887: goto case 10;\r\n\t\t\t\tcase 888: goto case 10;\r\n\t\t\t\tcase 889: goto case 10;\r\n\t\t\t\tcase 890: goto case 10;\r\n\t\t\t\tcase 891: goto case 10;\r\n\t\t\t\tcase 892: goto case 10;\r\n\t\t\t\tcase 893: goto case 10;\r\n\t\t\t\tcase 894: goto case 5;\r\n\t\t\t\tcase 895: goto case 200;\r\n\t\t\t\tcase 896: goto case 223;\r\n\t\t\t\tcase 897: goto case 241;\r\n\t\t\t\tcase 898: goto case 5;\r\n\t\t\t\tcase 899: goto case 200;\r\n\t\t\t\tcase 900: goto case 223;\r\n\t\t\t\tcase 901: goto case 241;\r\n\t\t\t}\r\n\t\t\taccepted = false;\r\n\t\t\treturn yyreturn;\r\n\t\t}\r\n\t\t\r\n\t\t#pragma warning restore 162\r\n\t\t\r\n\t\t\r\n\t\t#endregion\r\n\t\tprivate void BEGIN(LexicalStates state)\r\n\t\t{\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate char Advance()\r\n\t\t{\r\n\t\t\tif (lookahead_index >= chars_read)\r\n\t\t\t{\r\n\t\t\t\tif (token_start > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// shift buffer left:\r\n\t\t\t\t\tint length = chars_read - token_start;\r\n\t\t\t\t\tSystem.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1);\r\n\t\t\t\t\ttoken_end -= token_start;\r\n\t\t\t\t\ttoken_chunk_start -= token_start;\r\n\t\t\t\t\ttoken_start = 0;\r\n\t\t\t\t\tchars_read = lookahead_index = length;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// populate the remaining bytes:\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\t\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\twhile (lookahead_index >= chars_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (lookahead_index >= buffer.Length)\r\n\t\t\t\t\t\tbuffer = ResizeBuffer(buffer);\r\n\t\t\t\t\t\r\n\t\t\t\t\tint count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\r\n\t\t\t\t\tif (count <= 0) return EOF;\r\n\t\t\t\t\tchars_read += count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Map(buffer[lookahead_index++]);\r\n\t\t}\r\n\t\t\r\n\t\tprivate char[] ResizeBuffer(char[] buf)\r\n\t\t{\r\n\t\t\tchar[] result = new char[buf.Length << 1];\r\n\t\t\tSystem.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1);\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void AdvanceEndPosition(int from, int to)\r\n\t\t{\r\n\t\t\ttoken_end_pos.Char += to - from;\r\n\t\t}\r\n\t\t\r\n\t\tprotected static bool IsNewLineCharacter(char ch)\r\n\t\t{\r\n\t\t    return ch == '\\r' || ch == '\\n' || ch == (char)0x2028 || ch == (char)0x2029;\r\n\t\t}\r\n\t\tprivate void TrimTokenEnd()\r\n\t\t{\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\n')\r\n\t\t\t\ttoken_end--;\r\n\t\t\tif (token_end > token_chunk_start && buffer[token_end - 1] == '\\r')\r\n\t\t\t\ttoken_end--;\r\n\t\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenChunkStart()\r\n\t\t{\r\n\t\t\ttoken_chunk_start = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MarkTokenEnd()\r\n\t\t{\r\n\t\t\ttoken_end = lookahead_index;\r\n\t\t}\r\n\t\t\r\n\t\tprivate void MoveToTokenEnd()\r\n\t\t{\r\n\t\t\tlookahead_index = token_end;\r\n\t\t\tyy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\\r' || buffer[token_end - 1] == '\\n');\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_start; }\r\n\t\t}\r\n\t\t\r\n\t\tpublic int TokenChunkLength\r\n\t\t{\r\n\t\t\tget { return token_end - token_chunk_start; }\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yymore()\r\n\t\t{\r\n\t\t\tif (!expanding_token)\r\n\t\t\t{\r\n\t\t\t\ttoken_start = token_chunk_start;\r\n\t\t\t\texpanding_token = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tprivate void yyless(int count)\r\n\t\t{\r\n\t\t\tlookahead_index = token_end = token_chunk_start + count;\r\n\t\t}\r\n\t\t\r\n\t\tprivate Stack<LexicalStates> stateStack = new Stack<LexicalStates>(20);\r\n\t\t\r\n\t\tprivate void yy_push_state(LexicalStates state)\r\n\t\t{\r\n\t\t\tstateStack.Push(current_lexical_state);\r\n\t\t\tcurrent_lexical_state = state;\r\n\t\t}\r\n\t\t\r\n\t\tprivate bool yy_pop_state()\r\n\t\t{\r\n\t\t\tif (stateStack.Count == 0) return false;\r\n\t\t\tcurrent_lexical_state = stateStack.Pop();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\tprivate LexicalStates yy_top_state()\r\n\t\t{\r\n\t\t\treturn stateStack.Peek();\r\n\t\t}\r\n\t\t\r\n\t\t#region Tables\r\n\t\t\r\n\t\tprivate static AcceptConditions[] acceptCondition = new AcceptConditions[]\r\n\t\t{\r\n\t\t\tAcceptConditions.NotAccept, // 0\r\n\t\t\tAcceptConditions.Accept, // 1\r\n\t\t\tAcceptConditions.Accept, // 2\r\n\t\t\tAcceptConditions.Accept, // 3\r\n\t\t\tAcceptConditions.Accept, // 4\r\n\t\t\tAcceptConditions.Accept, // 5\r\n\t\t\tAcceptConditions.Accept, // 6\r\n\t\t\tAcceptConditions.Accept, // 7\r\n\t\t\tAcceptConditions.Accept, // 8\r\n\t\t\tAcceptConditions.Accept, // 9\r\n\t\t\tAcceptConditions.Accept, // 10\r\n\t\t\tAcceptConditions.Accept, // 11\r\n\t\t\tAcceptConditions.Accept, // 12\r\n\t\t\tAcceptConditions.Accept, // 13\r\n\t\t\tAcceptConditions.Accept, // 14\r\n\t\t\tAcceptConditions.Accept, // 15\r\n\t\t\tAcceptConditions.Accept, // 16\r\n\t\t\tAcceptConditions.Accept, // 17\r\n\t\t\tAcceptConditions.Accept, // 18\r\n\t\t\tAcceptConditions.Accept, // 19\r\n\t\t\tAcceptConditions.Accept, // 20\r\n\t\t\tAcceptConditions.Accept, // 21\r\n\t\t\tAcceptConditions.Accept, // 22\r\n\t\t\tAcceptConditions.Accept, // 23\r\n\t\t\tAcceptConditions.Accept, // 24\r\n\t\t\tAcceptConditions.Accept, // 25\r\n\t\t\tAcceptConditions.Accept, // 26\r\n\t\t\tAcceptConditions.Accept, // 27\r\n\t\t\tAcceptConditions.Accept, // 28\r\n\t\t\tAcceptConditions.Accept, // 29\r\n\t\t\tAcceptConditions.Accept, // 30\r\n\t\t\tAcceptConditions.Accept, // 31\r\n\t\t\tAcceptConditions.Accept, // 32\r\n\t\t\tAcceptConditions.Accept, // 33\r\n\t\t\tAcceptConditions.Accept, // 34\r\n\t\t\tAcceptConditions.Accept, // 35\r\n\t\t\tAcceptConditions.Accept, // 36\r\n\t\t\tAcceptConditions.Accept, // 37\r\n\t\t\tAcceptConditions.Accept, // 38\r\n\t\t\tAcceptConditions.Accept, // 39\r\n\t\t\tAcceptConditions.Accept, // 40\r\n\t\t\tAcceptConditions.Accept, // 41\r\n\t\t\tAcceptConditions.Accept, // 42\r\n\t\t\tAcceptConditions.Accept, // 43\r\n\t\t\tAcceptConditions.Accept, // 44\r\n\t\t\tAcceptConditions.Accept, // 45\r\n\t\t\tAcceptConditions.Accept, // 46\r\n\t\t\tAcceptConditions.Accept, // 47\r\n\t\t\tAcceptConditions.Accept, // 48\r\n\t\t\tAcceptConditions.Accept, // 49\r\n\t\t\tAcceptConditions.Accept, // 50\r\n\t\t\tAcceptConditions.Accept, // 51\r\n\t\t\tAcceptConditions.Accept, // 52\r\n\t\t\tAcceptConditions.Accept, // 53\r\n\t\t\tAcceptConditions.Accept, // 54\r\n\t\t\tAcceptConditions.Accept, // 55\r\n\t\t\tAcceptConditions.Accept, // 56\r\n\t\t\tAcceptConditions.Accept, // 57\r\n\t\t\tAcceptConditions.Accept, // 58\r\n\t\t\tAcceptConditions.Accept, // 59\r\n\t\t\tAcceptConditions.Accept, // 60\r\n\t\t\tAcceptConditions.Accept, // 61\r\n\t\t\tAcceptConditions.Accept, // 62\r\n\t\t\tAcceptConditions.Accept, // 63\r\n\t\t\tAcceptConditions.Accept, // 64\r\n\t\t\tAcceptConditions.Accept, // 65\r\n\t\t\tAcceptConditions.Accept, // 66\r\n\t\t\tAcceptConditions.Accept, // 67\r\n\t\t\tAcceptConditions.Accept, // 68\r\n\t\t\tAcceptConditions.Accept, // 69\r\n\t\t\tAcceptConditions.Accept, // 70\r\n\t\t\tAcceptConditions.Accept, // 71\r\n\t\t\tAcceptConditions.Accept, // 72\r\n\t\t\tAcceptConditions.Accept, // 73\r\n\t\t\tAcceptConditions.Accept, // 74\r\n\t\t\tAcceptConditions.Accept, // 75\r\n\t\t\tAcceptConditions.Accept, // 76\r\n\t\t\tAcceptConditions.Accept, // 77\r\n\t\t\tAcceptConditions.Accept, // 78\r\n\t\t\tAcceptConditions.Accept, // 79\r\n\t\t\tAcceptConditions.Accept, // 80\r\n\t\t\tAcceptConditions.Accept, // 81\r\n\t\t\tAcceptConditions.Accept, // 82\r\n\t\t\tAcceptConditions.Accept, // 83\r\n\t\t\tAcceptConditions.Accept, // 84\r\n\t\t\tAcceptConditions.Accept, // 85\r\n\t\t\tAcceptConditions.Accept, // 86\r\n\t\t\tAcceptConditions.Accept, // 87\r\n\t\t\tAcceptConditions.Accept, // 88\r\n\t\t\tAcceptConditions.Accept, // 89\r\n\t\t\tAcceptConditions.Accept, // 90\r\n\t\t\tAcceptConditions.Accept, // 91\r\n\t\t\tAcceptConditions.Accept, // 92\r\n\t\t\tAcceptConditions.Accept, // 93\r\n\t\t\tAcceptConditions.Accept, // 94\r\n\t\t\tAcceptConditions.Accept, // 95\r\n\t\t\tAcceptConditions.Accept, // 96\r\n\t\t\tAcceptConditions.Accept, // 97\r\n\t\t\tAcceptConditions.Accept, // 98\r\n\t\t\tAcceptConditions.Accept, // 99\r\n\t\t\tAcceptConditions.Accept, // 100\r\n\t\t\tAcceptConditions.Accept, // 101\r\n\t\t\tAcceptConditions.Accept, // 102\r\n\t\t\tAcceptConditions.Accept, // 103\r\n\t\t\tAcceptConditions.Accept, // 104\r\n\t\t\tAcceptConditions.Accept, // 105\r\n\t\t\tAcceptConditions.Accept, // 106\r\n\t\t\tAcceptConditions.Accept, // 107\r\n\t\t\tAcceptConditions.Accept, // 108\r\n\t\t\tAcceptConditions.Accept, // 109\r\n\t\t\tAcceptConditions.Accept, // 110\r\n\t\t\tAcceptConditions.Accept, // 111\r\n\t\t\tAcceptConditions.Accept, // 112\r\n\t\t\tAcceptConditions.Accept, // 113\r\n\t\t\tAcceptConditions.Accept, // 114\r\n\t\t\tAcceptConditions.Accept, // 115\r\n\t\t\tAcceptConditions.Accept, // 116\r\n\t\t\tAcceptConditions.Accept, // 117\r\n\t\t\tAcceptConditions.Accept, // 118\r\n\t\t\tAcceptConditions.Accept, // 119\r\n\t\t\tAcceptConditions.Accept, // 120\r\n\t\t\tAcceptConditions.Accept, // 121\r\n\t\t\tAcceptConditions.Accept, // 122\r\n\t\t\tAcceptConditions.Accept, // 123\r\n\t\t\tAcceptConditions.Accept, // 124\r\n\t\t\tAcceptConditions.Accept, // 125\r\n\t\t\tAcceptConditions.Accept, // 126\r\n\t\t\tAcceptConditions.Accept, // 127\r\n\t\t\tAcceptConditions.Accept, // 128\r\n\t\t\tAcceptConditions.Accept, // 129\r\n\t\t\tAcceptConditions.Accept, // 130\r\n\t\t\tAcceptConditions.Accept, // 131\r\n\t\t\tAcceptConditions.Accept, // 132\r\n\t\t\tAcceptConditions.Accept, // 133\r\n\t\t\tAcceptConditions.Accept, // 134\r\n\t\t\tAcceptConditions.Accept, // 135\r\n\t\t\tAcceptConditions.Accept, // 136\r\n\t\t\tAcceptConditions.Accept, // 137\r\n\t\t\tAcceptConditions.Accept, // 138\r\n\t\t\tAcceptConditions.Accept, // 139\r\n\t\t\tAcceptConditions.Accept, // 140\r\n\t\t\tAcceptConditions.Accept, // 141\r\n\t\t\tAcceptConditions.Accept, // 142\r\n\t\t\tAcceptConditions.Accept, // 143\r\n\t\t\tAcceptConditions.Accept, // 144\r\n\t\t\tAcceptConditions.Accept, // 145\r\n\t\t\tAcceptConditions.Accept, // 146\r\n\t\t\tAcceptConditions.Accept, // 147\r\n\t\t\tAcceptConditions.Accept, // 148\r\n\t\t\tAcceptConditions.Accept, // 149\r\n\t\t\tAcceptConditions.Accept, // 150\r\n\t\t\tAcceptConditions.Accept, // 151\r\n\t\t\tAcceptConditions.Accept, // 152\r\n\t\t\tAcceptConditions.Accept, // 153\r\n\t\t\tAcceptConditions.Accept, // 154\r\n\t\t\tAcceptConditions.Accept, // 155\r\n\t\t\tAcceptConditions.Accept, // 156\r\n\t\t\tAcceptConditions.Accept, // 157\r\n\t\t\tAcceptConditions.Accept, // 158\r\n\t\t\tAcceptConditions.Accept, // 159\r\n\t\t\tAcceptConditions.Accept, // 160\r\n\t\t\tAcceptConditions.Accept, // 161\r\n\t\t\tAcceptConditions.Accept, // 162\r\n\t\t\tAcceptConditions.Accept, // 163\r\n\t\t\tAcceptConditions.Accept, // 164\r\n\t\t\tAcceptConditions.Accept, // 165\r\n\t\t\tAcceptConditions.Accept, // 166\r\n\t\t\tAcceptConditions.Accept, // 167\r\n\t\t\tAcceptConditions.Accept, // 168\r\n\t\t\tAcceptConditions.Accept, // 169\r\n\t\t\tAcceptConditions.Accept, // 170\r\n\t\t\tAcceptConditions.Accept, // 171\r\n\t\t\tAcceptConditions.Accept, // 172\r\n\t\t\tAcceptConditions.Accept, // 173\r\n\t\t\tAcceptConditions.Accept, // 174\r\n\t\t\tAcceptConditions.Accept, // 175\r\n\t\t\tAcceptConditions.Accept, // 176\r\n\t\t\tAcceptConditions.Accept, // 177\r\n\t\t\tAcceptConditions.Accept, // 178\r\n\t\t\tAcceptConditions.Accept, // 179\r\n\t\t\tAcceptConditions.Accept, // 180\r\n\t\t\tAcceptConditions.Accept, // 181\r\n\t\t\tAcceptConditions.Accept, // 182\r\n\t\t\tAcceptConditions.Accept, // 183\r\n\t\t\tAcceptConditions.Accept, // 184\r\n\t\t\tAcceptConditions.Accept, // 185\r\n\t\t\tAcceptConditions.Accept, // 186\r\n\t\t\tAcceptConditions.Accept, // 187\r\n\t\t\tAcceptConditions.Accept, // 188\r\n\t\t\tAcceptConditions.Accept, // 189\r\n\t\t\tAcceptConditions.Accept, // 190\r\n\t\t\tAcceptConditions.Accept, // 191\r\n\t\t\tAcceptConditions.Accept, // 192\r\n\t\t\tAcceptConditions.Accept, // 193\r\n\t\t\tAcceptConditions.Accept, // 194\r\n\t\t\tAcceptConditions.Accept, // 195\r\n\t\t\tAcceptConditions.Accept, // 196\r\n\t\t\tAcceptConditions.Accept, // 197\r\n\t\t\tAcceptConditions.Accept, // 198\r\n\t\t\tAcceptConditions.Accept, // 199\r\n\t\t\tAcceptConditions.Accept, // 200\r\n\t\t\tAcceptConditions.Accept, // 201\r\n\t\t\tAcceptConditions.Accept, // 202\r\n\t\t\tAcceptConditions.Accept, // 203\r\n\t\t\tAcceptConditions.Accept, // 204\r\n\t\t\tAcceptConditions.Accept, // 205\r\n\t\t\tAcceptConditions.Accept, // 206\r\n\t\t\tAcceptConditions.Accept, // 207\r\n\t\t\tAcceptConditions.Accept, // 208\r\n\t\t\tAcceptConditions.Accept, // 209\r\n\t\t\tAcceptConditions.Accept, // 210\r\n\t\t\tAcceptConditions.Accept, // 211\r\n\t\t\tAcceptConditions.Accept, // 212\r\n\t\t\tAcceptConditions.Accept, // 213\r\n\t\t\tAcceptConditions.Accept, // 214\r\n\t\t\tAcceptConditions.Accept, // 215\r\n\t\t\tAcceptConditions.Accept, // 216\r\n\t\t\tAcceptConditions.Accept, // 217\r\n\t\t\tAcceptConditions.Accept, // 218\r\n\t\t\tAcceptConditions.Accept, // 219\r\n\t\t\tAcceptConditions.Accept, // 220\r\n\t\t\tAcceptConditions.Accept, // 221\r\n\t\t\tAcceptConditions.Accept, // 222\r\n\t\t\tAcceptConditions.Accept, // 223\r\n\t\t\tAcceptConditions.Accept, // 224\r\n\t\t\tAcceptConditions.Accept, // 225\r\n\t\t\tAcceptConditions.Accept, // 226\r\n\t\t\tAcceptConditions.Accept, // 227\r\n\t\t\tAcceptConditions.Accept, // 228\r\n\t\t\tAcceptConditions.Accept, // 229\r\n\t\t\tAcceptConditions.Accept, // 230\r\n\t\t\tAcceptConditions.Accept, // 231\r\n\t\t\tAcceptConditions.Accept, // 232\r\n\t\t\tAcceptConditions.Accept, // 233\r\n\t\t\tAcceptConditions.Accept, // 234\r\n\t\t\tAcceptConditions.Accept, // 235\r\n\t\t\tAcceptConditions.Accept, // 236\r\n\t\t\tAcceptConditions.Accept, // 237\r\n\t\t\tAcceptConditions.Accept, // 238\r\n\t\t\tAcceptConditions.Accept, // 239\r\n\t\t\tAcceptConditions.Accept, // 240\r\n\t\t\tAcceptConditions.Accept, // 241\r\n\t\t\tAcceptConditions.Accept, // 242\r\n\t\t\tAcceptConditions.Accept, // 243\r\n\t\t\tAcceptConditions.Accept, // 244\r\n\t\t\tAcceptConditions.Accept, // 245\r\n\t\t\tAcceptConditions.AcceptOnStart, // 246\r\n\t\t\tAcceptConditions.Accept, // 247\r\n\t\t\tAcceptConditions.Accept, // 248\r\n\t\t\tAcceptConditions.Accept, // 249\r\n\t\t\tAcceptConditions.Accept, // 250\r\n\t\t\tAcceptConditions.Accept, // 251\r\n\t\t\tAcceptConditions.Accept, // 252\r\n\t\t\tAcceptConditions.Accept, // 253\r\n\t\t\tAcceptConditions.Accept, // 254\r\n\t\t\tAcceptConditions.Accept, // 255\r\n\t\t\tAcceptConditions.Accept, // 256\r\n\t\t\tAcceptConditions.Accept, // 257\r\n\t\t\tAcceptConditions.Accept, // 258\r\n\t\t\tAcceptConditions.Accept, // 259\r\n\t\t\tAcceptConditions.Accept, // 260\r\n\t\t\tAcceptConditions.NotAccept, // 261\r\n\t\t\tAcceptConditions.Accept, // 262\r\n\t\t\tAcceptConditions.Accept, // 263\r\n\t\t\tAcceptConditions.Accept, // 264\r\n\t\t\tAcceptConditions.Accept, // 265\r\n\t\t\tAcceptConditions.Accept, // 266\r\n\t\t\tAcceptConditions.Accept, // 267\r\n\t\t\tAcceptConditions.Accept, // 268\r\n\t\t\tAcceptConditions.Accept, // 269\r\n\t\t\tAcceptConditions.Accept, // 270\r\n\t\t\tAcceptConditions.Accept, // 271\r\n\t\t\tAcceptConditions.Accept, // 272\r\n\t\t\tAcceptConditions.Accept, // 273\r\n\t\t\tAcceptConditions.Accept, // 274\r\n\t\t\tAcceptConditions.Accept, // 275\r\n\t\t\tAcceptConditions.Accept, // 276\r\n\t\t\tAcceptConditions.Accept, // 277\r\n\t\t\tAcceptConditions.Accept, // 278\r\n\t\t\tAcceptConditions.Accept, // 279\r\n\t\t\tAcceptConditions.Accept, // 280\r\n\t\t\tAcceptConditions.Accept, // 281\r\n\t\t\tAcceptConditions.Accept, // 282\r\n\t\t\tAcceptConditions.Accept, // 283\r\n\t\t\tAcceptConditions.Accept, // 284\r\n\t\t\tAcceptConditions.Accept, // 285\r\n\t\t\tAcceptConditions.Accept, // 286\r\n\t\t\tAcceptConditions.Accept, // 287\r\n\t\t\tAcceptConditions.Accept, // 288\r\n\t\t\tAcceptConditions.Accept, // 289\r\n\t\t\tAcceptConditions.Accept, // 290\r\n\t\t\tAcceptConditions.Accept, // 291\r\n\t\t\tAcceptConditions.Accept, // 292\r\n\t\t\tAcceptConditions.Accept, // 293\r\n\t\t\tAcceptConditions.Accept, // 294\r\n\t\t\tAcceptConditions.Accept, // 295\r\n\t\t\tAcceptConditions.Accept, // 296\r\n\t\t\tAcceptConditions.Accept, // 297\r\n\t\t\tAcceptConditions.Accept, // 298\r\n\t\t\tAcceptConditions.Accept, // 299\r\n\t\t\tAcceptConditions.Accept, // 300\r\n\t\t\tAcceptConditions.Accept, // 301\r\n\t\t\tAcceptConditions.Accept, // 302\r\n\t\t\tAcceptConditions.AcceptOnStart, // 303\r\n\t\t\tAcceptConditions.Accept, // 304\r\n\t\t\tAcceptConditions.Accept, // 305\r\n\t\t\tAcceptConditions.NotAccept, // 306\r\n\t\t\tAcceptConditions.Accept, // 307\r\n\t\t\tAcceptConditions.Accept, // 308\r\n\t\t\tAcceptConditions.Accept, // 309\r\n\t\t\tAcceptConditions.Accept, // 310\r\n\t\t\tAcceptConditions.Accept, // 311\r\n\t\t\tAcceptConditions.Accept, // 312\r\n\t\t\tAcceptConditions.Accept, // 313\r\n\t\t\tAcceptConditions.Accept, // 314\r\n\t\t\tAcceptConditions.Accept, // 315\r\n\t\t\tAcceptConditions.Accept, // 316\r\n\t\t\tAcceptConditions.NotAccept, // 317\r\n\t\t\tAcceptConditions.Accept, // 318\r\n\t\t\tAcceptConditions.Accept, // 319\r\n\t\t\tAcceptConditions.NotAccept, // 320\r\n\t\t\tAcceptConditions.Accept, // 321\r\n\t\t\tAcceptConditions.Accept, // 322\r\n\t\t\tAcceptConditions.NotAccept, // 323\r\n\t\t\tAcceptConditions.Accept, // 324\r\n\t\t\tAcceptConditions.Accept, // 325\r\n\t\t\tAcceptConditions.NotAccept, // 326\r\n\t\t\tAcceptConditions.Accept, // 327\r\n\t\t\tAcceptConditions.Accept, // 328\r\n\t\t\tAcceptConditions.NotAccept, // 329\r\n\t\t\tAcceptConditions.Accept, // 330\r\n\t\t\tAcceptConditions.Accept, // 331\r\n\t\t\tAcceptConditions.NotAccept, // 332\r\n\t\t\tAcceptConditions.Accept, // 333\r\n\t\t\tAcceptConditions.Accept, // 334\r\n\t\t\tAcceptConditions.NotAccept, // 335\r\n\t\t\tAcceptConditions.Accept, // 336\r\n\t\t\tAcceptConditions.Accept, // 337\r\n\t\t\tAcceptConditions.NotAccept, // 338\r\n\t\t\tAcceptConditions.Accept, // 339\r\n\t\t\tAcceptConditions.Accept, // 340\r\n\t\t\tAcceptConditions.NotAccept, // 341\r\n\t\t\tAcceptConditions.Accept, // 342\r\n\t\t\tAcceptConditions.Accept, // 343\r\n\t\t\tAcceptConditions.NotAccept, // 344\r\n\t\t\tAcceptConditions.Accept, // 345\r\n\t\t\tAcceptConditions.Accept, // 346\r\n\t\t\tAcceptConditions.NotAccept, // 347\r\n\t\t\tAcceptConditions.Accept, // 348\r\n\t\t\tAcceptConditions.Accept, // 349\r\n\t\t\tAcceptConditions.NotAccept, // 350\r\n\t\t\tAcceptConditions.Accept, // 351\r\n\t\t\tAcceptConditions.Accept, // 352\r\n\t\t\tAcceptConditions.NotAccept, // 353\r\n\t\t\tAcceptConditions.Accept, // 354\r\n\t\t\tAcceptConditions.Accept, // 355\r\n\t\t\tAcceptConditions.NotAccept, // 356\r\n\t\t\tAcceptConditions.Accept, // 357\r\n\t\t\tAcceptConditions.Accept, // 358\r\n\t\t\tAcceptConditions.NotAccept, // 359\r\n\t\t\tAcceptConditions.Accept, // 360\r\n\t\t\tAcceptConditions.Accept, // 361\r\n\t\t\tAcceptConditions.NotAccept, // 362\r\n\t\t\tAcceptConditions.Accept, // 363\r\n\t\t\tAcceptConditions.NotAccept, // 364\r\n\t\t\tAcceptConditions.Accept, // 365\r\n\t\t\tAcceptConditions.NotAccept, // 366\r\n\t\t\tAcceptConditions.Accept, // 367\r\n\t\t\tAcceptConditions.NotAccept, // 368\r\n\t\t\tAcceptConditions.Accept, // 369\r\n\t\t\tAcceptConditions.NotAccept, // 370\r\n\t\t\tAcceptConditions.Accept, // 371\r\n\t\t\tAcceptConditions.NotAccept, // 372\r\n\t\t\tAcceptConditions.Accept, // 373\r\n\t\t\tAcceptConditions.NotAccept, // 374\r\n\t\t\tAcceptConditions.Accept, // 375\r\n\t\t\tAcceptConditions.NotAccept, // 376\r\n\t\t\tAcceptConditions.Accept, // 377\r\n\t\t\tAcceptConditions.NotAccept, // 378\r\n\t\t\tAcceptConditions.Accept, // 379\r\n\t\t\tAcceptConditions.NotAccept, // 380\r\n\t\t\tAcceptConditions.Accept, // 381\r\n\t\t\tAcceptConditions.NotAccept, // 382\r\n\t\t\tAcceptConditions.Accept, // 383\r\n\t\t\tAcceptConditions.NotAccept, // 384\r\n\t\t\tAcceptConditions.Accept, // 385\r\n\t\t\tAcceptConditions.NotAccept, // 386\r\n\t\t\tAcceptConditions.Accept, // 387\r\n\t\t\tAcceptConditions.NotAccept, // 388\r\n\t\t\tAcceptConditions.Accept, // 389\r\n\t\t\tAcceptConditions.NotAccept, // 390\r\n\t\t\tAcceptConditions.Accept, // 391\r\n\t\t\tAcceptConditions.NotAccept, // 392\r\n\t\t\tAcceptConditions.Accept, // 393\r\n\t\t\tAcceptConditions.NotAccept, // 394\r\n\t\t\tAcceptConditions.Accept, // 395\r\n\t\t\tAcceptConditions.NotAccept, // 396\r\n\t\t\tAcceptConditions.Accept, // 397\r\n\t\t\tAcceptConditions.NotAccept, // 398\r\n\t\t\tAcceptConditions.Accept, // 399\r\n\t\t\tAcceptConditions.NotAccept, // 400\r\n\t\t\tAcceptConditions.Accept, // 401\r\n\t\t\tAcceptConditions.NotAccept, // 402\r\n\t\t\tAcceptConditions.Accept, // 403\r\n\t\t\tAcceptConditions.NotAccept, // 404\r\n\t\t\tAcceptConditions.Accept, // 405\r\n\t\t\tAcceptConditions.NotAccept, // 406\r\n\t\t\tAcceptConditions.Accept, // 407\r\n\t\t\tAcceptConditions.NotAccept, // 408\r\n\t\t\tAcceptConditions.Accept, // 409\r\n\t\t\tAcceptConditions.NotAccept, // 410\r\n\t\t\tAcceptConditions.Accept, // 411\r\n\t\t\tAcceptConditions.NotAccept, // 412\r\n\t\t\tAcceptConditions.Accept, // 413\r\n\t\t\tAcceptConditions.NotAccept, // 414\r\n\t\t\tAcceptConditions.Accept, // 415\r\n\t\t\tAcceptConditions.NotAccept, // 416\r\n\t\t\tAcceptConditions.Accept, // 417\r\n\t\t\tAcceptConditions.NotAccept, // 418\r\n\t\t\tAcceptConditions.Accept, // 419\r\n\t\t\tAcceptConditions.NotAccept, // 420\r\n\t\t\tAcceptConditions.Accept, // 421\r\n\t\t\tAcceptConditions.NotAccept, // 422\r\n\t\t\tAcceptConditions.Accept, // 423\r\n\t\t\tAcceptConditions.NotAccept, // 424\r\n\t\t\tAcceptConditions.Accept, // 425\r\n\t\t\tAcceptConditions.NotAccept, // 426\r\n\t\t\tAcceptConditions.Accept, // 427\r\n\t\t\tAcceptConditions.NotAccept, // 428\r\n\t\t\tAcceptConditions.Accept, // 429\r\n\t\t\tAcceptConditions.NotAccept, // 430\r\n\t\t\tAcceptConditions.Accept, // 431\r\n\t\t\tAcceptConditions.NotAccept, // 432\r\n\t\t\tAcceptConditions.Accept, // 433\r\n\t\t\tAcceptConditions.NotAccept, // 434\r\n\t\t\tAcceptConditions.Accept, // 435\r\n\t\t\tAcceptConditions.NotAccept, // 436\r\n\t\t\tAcceptConditions.Accept, // 437\r\n\t\t\tAcceptConditions.NotAccept, // 438\r\n\t\t\tAcceptConditions.Accept, // 439\r\n\t\t\tAcceptConditions.NotAccept, // 440\r\n\t\t\tAcceptConditions.Accept, // 441\r\n\t\t\tAcceptConditions.NotAccept, // 442\r\n\t\t\tAcceptConditions.Accept, // 443\r\n\t\t\tAcceptConditions.NotAccept, // 444\r\n\t\t\tAcceptConditions.Accept, // 445\r\n\t\t\tAcceptConditions.NotAccept, // 446\r\n\t\t\tAcceptConditions.Accept, // 447\r\n\t\t\tAcceptConditions.NotAccept, // 448\r\n\t\t\tAcceptConditions.Accept, // 449\r\n\t\t\tAcceptConditions.NotAccept, // 450\r\n\t\t\tAcceptConditions.Accept, // 451\r\n\t\t\tAcceptConditions.NotAccept, // 452\r\n\t\t\tAcceptConditions.Accept, // 453\r\n\t\t\tAcceptConditions.NotAccept, // 454\r\n\t\t\tAcceptConditions.Accept, // 455\r\n\t\t\tAcceptConditions.NotAccept, // 456\r\n\t\t\tAcceptConditions.Accept, // 457\r\n\t\t\tAcceptConditions.NotAccept, // 458\r\n\t\t\tAcceptConditions.Accept, // 459\r\n\t\t\tAcceptConditions.NotAccept, // 460\r\n\t\t\tAcceptConditions.Accept, // 461\r\n\t\t\tAcceptConditions.NotAccept, // 462\r\n\t\t\tAcceptConditions.Accept, // 463\r\n\t\t\tAcceptConditions.NotAccept, // 464\r\n\t\t\tAcceptConditions.Accept, // 465\r\n\t\t\tAcceptConditions.NotAccept, // 466\r\n\t\t\tAcceptConditions.Accept, // 467\r\n\t\t\tAcceptConditions.NotAccept, // 468\r\n\t\t\tAcceptConditions.Accept, // 469\r\n\t\t\tAcceptConditions.NotAccept, // 470\r\n\t\t\tAcceptConditions.Accept, // 471\r\n\t\t\tAcceptConditions.NotAccept, // 472\r\n\t\t\tAcceptConditions.Accept, // 473\r\n\t\t\tAcceptConditions.NotAccept, // 474\r\n\t\t\tAcceptConditions.Accept, // 475\r\n\t\t\tAcceptConditions.NotAccept, // 476\r\n\t\t\tAcceptConditions.Accept, // 477\r\n\t\t\tAcceptConditions.NotAccept, // 478\r\n\t\t\tAcceptConditions.Accept, // 479\r\n\t\t\tAcceptConditions.NotAccept, // 480\r\n\t\t\tAcceptConditions.Accept, // 481\r\n\t\t\tAcceptConditions.NotAccept, // 482\r\n\t\t\tAcceptConditions.Accept, // 483\r\n\t\t\tAcceptConditions.NotAccept, // 484\r\n\t\t\tAcceptConditions.Accept, // 485\r\n\t\t\tAcceptConditions.NotAccept, // 486\r\n\t\t\tAcceptConditions.Accept, // 487\r\n\t\t\tAcceptConditions.NotAccept, // 488\r\n\t\t\tAcceptConditions.Accept, // 489\r\n\t\t\tAcceptConditions.NotAccept, // 490\r\n\t\t\tAcceptConditions.Accept, // 491\r\n\t\t\tAcceptConditions.NotAccept, // 492\r\n\t\t\tAcceptConditions.Accept, // 493\r\n\t\t\tAcceptConditions.NotAccept, // 494\r\n\t\t\tAcceptConditions.Accept, // 495\r\n\t\t\tAcceptConditions.NotAccept, // 496\r\n\t\t\tAcceptConditions.Accept, // 497\r\n\t\t\tAcceptConditions.NotAccept, // 498\r\n\t\t\tAcceptConditions.Accept, // 499\r\n\t\t\tAcceptConditions.NotAccept, // 500\r\n\t\t\tAcceptConditions.Accept, // 501\r\n\t\t\tAcceptConditions.NotAccept, // 502\r\n\t\t\tAcceptConditions.Accept, // 503\r\n\t\t\tAcceptConditions.NotAccept, // 504\r\n\t\t\tAcceptConditions.Accept, // 505\r\n\t\t\tAcceptConditions.NotAccept, // 506\r\n\t\t\tAcceptConditions.Accept, // 507\r\n\t\t\tAcceptConditions.NotAccept, // 508\r\n\t\t\tAcceptConditions.Accept, // 509\r\n\t\t\tAcceptConditions.NotAccept, // 510\r\n\t\t\tAcceptConditions.Accept, // 511\r\n\t\t\tAcceptConditions.NotAccept, // 512\r\n\t\t\tAcceptConditions.Accept, // 513\r\n\t\t\tAcceptConditions.NotAccept, // 514\r\n\t\t\tAcceptConditions.Accept, // 515\r\n\t\t\tAcceptConditions.NotAccept, // 516\r\n\t\t\tAcceptConditions.Accept, // 517\r\n\t\t\tAcceptConditions.NotAccept, // 518\r\n\t\t\tAcceptConditions.Accept, // 519\r\n\t\t\tAcceptConditions.NotAccept, // 520\r\n\t\t\tAcceptConditions.Accept, // 521\r\n\t\t\tAcceptConditions.NotAccept, // 522\r\n\t\t\tAcceptConditions.Accept, // 523\r\n\t\t\tAcceptConditions.NotAccept, // 524\r\n\t\t\tAcceptConditions.Accept, // 525\r\n\t\t\tAcceptConditions.NotAccept, // 526\r\n\t\t\tAcceptConditions.Accept, // 527\r\n\t\t\tAcceptConditions.NotAccept, // 528\r\n\t\t\tAcceptConditions.NotAccept, // 529\r\n\t\t\tAcceptConditions.NotAccept, // 530\r\n\t\t\tAcceptConditions.NotAccept, // 531\r\n\t\t\tAcceptConditions.NotAccept, // 532\r\n\t\t\tAcceptConditions.NotAccept, // 533\r\n\t\t\tAcceptConditions.NotAccept, // 534\r\n\t\t\tAcceptConditions.NotAccept, // 535\r\n\t\t\tAcceptConditions.NotAccept, // 536\r\n\t\t\tAcceptConditions.NotAccept, // 537\r\n\t\t\tAcceptConditions.NotAccept, // 538\r\n\t\t\tAcceptConditions.NotAccept, // 539\r\n\t\t\tAcceptConditions.NotAccept, // 540\r\n\t\t\tAcceptConditions.NotAccept, // 541\r\n\t\t\tAcceptConditions.NotAccept, // 542\r\n\t\t\tAcceptConditions.NotAccept, // 543\r\n\t\t\tAcceptConditions.NotAccept, // 544\r\n\t\t\tAcceptConditions.NotAccept, // 545\r\n\t\t\tAcceptConditions.NotAccept, // 546\r\n\t\t\tAcceptConditions.NotAccept, // 547\r\n\t\t\tAcceptConditions.NotAccept, // 548\r\n\t\t\tAcceptConditions.NotAccept, // 549\r\n\t\t\tAcceptConditions.NotAccept, // 550\r\n\t\t\tAcceptConditions.NotAccept, // 551\r\n\t\t\tAcceptConditions.NotAccept, // 552\r\n\t\t\tAcceptConditions.NotAccept, // 553\r\n\t\t\tAcceptConditions.NotAccept, // 554\r\n\t\t\tAcceptConditions.NotAccept, // 555\r\n\t\t\tAcceptConditions.NotAccept, // 556\r\n\t\t\tAcceptConditions.NotAccept, // 557\r\n\t\t\tAcceptConditions.NotAccept, // 558\r\n\t\t\tAcceptConditions.NotAccept, // 559\r\n\t\t\tAcceptConditions.NotAccept, // 560\r\n\t\t\tAcceptConditions.NotAccept, // 561\r\n\t\t\tAcceptConditions.NotAccept, // 562\r\n\t\t\tAcceptConditions.NotAccept, // 563\r\n\t\t\tAcceptConditions.NotAccept, // 564\r\n\t\t\tAcceptConditions.NotAccept, // 565\r\n\t\t\tAcceptConditions.NotAccept, // 566\r\n\t\t\tAcceptConditions.NotAccept, // 567\r\n\t\t\tAcceptConditions.NotAccept, // 568\r\n\t\t\tAcceptConditions.NotAccept, // 569\r\n\t\t\tAcceptConditions.NotAccept, // 570\r\n\t\t\tAcceptConditions.NotAccept, // 571\r\n\t\t\tAcceptConditions.NotAccept, // 572\r\n\t\t\tAcceptConditions.NotAccept, // 573\r\n\t\t\tAcceptConditions.NotAccept, // 574\r\n\t\t\tAcceptConditions.NotAccept, // 575\r\n\t\t\tAcceptConditions.NotAccept, // 576\r\n\t\t\tAcceptConditions.NotAccept, // 577\r\n\t\t\tAcceptConditions.NotAccept, // 578\r\n\t\t\tAcceptConditions.NotAccept, // 579\r\n\t\t\tAcceptConditions.NotAccept, // 580\r\n\t\t\tAcceptConditions.NotAccept, // 581\r\n\t\t\tAcceptConditions.NotAccept, // 582\r\n\t\t\tAcceptConditions.NotAccept, // 583\r\n\t\t\tAcceptConditions.NotAccept, // 584\r\n\t\t\tAcceptConditions.NotAccept, // 585\r\n\t\t\tAcceptConditions.NotAccept, // 586\r\n\t\t\tAcceptConditions.NotAccept, // 587\r\n\t\t\tAcceptConditions.NotAccept, // 588\r\n\t\t\tAcceptConditions.NotAccept, // 589\r\n\t\t\tAcceptConditions.NotAccept, // 590\r\n\t\t\tAcceptConditions.NotAccept, // 591\r\n\t\t\tAcceptConditions.NotAccept, // 592\r\n\t\t\tAcceptConditions.Accept, // 593\r\n\t\t\tAcceptConditions.Accept, // 594\r\n\t\t\tAcceptConditions.Accept, // 595\r\n\t\t\tAcceptConditions.Accept, // 596\r\n\t\t\tAcceptConditions.Accept, // 597\r\n\t\t\tAcceptConditions.Accept, // 598\r\n\t\t\tAcceptConditions.Accept, // 599\r\n\t\t\tAcceptConditions.Accept, // 600\r\n\t\t\tAcceptConditions.NotAccept, // 601\r\n\t\t\tAcceptConditions.NotAccept, // 602\r\n\t\t\tAcceptConditions.NotAccept, // 603\r\n\t\t\tAcceptConditions.NotAccept, // 604\r\n\t\t\tAcceptConditions.NotAccept, // 605\r\n\t\t\tAcceptConditions.NotAccept, // 606\r\n\t\t\tAcceptConditions.NotAccept, // 607\r\n\t\t\tAcceptConditions.NotAccept, // 608\r\n\t\t\tAcceptConditions.NotAccept, // 609\r\n\t\t\tAcceptConditions.NotAccept, // 610\r\n\t\t\tAcceptConditions.NotAccept, // 611\r\n\t\t\tAcceptConditions.NotAccept, // 612\r\n\t\t\tAcceptConditions.NotAccept, // 613\r\n\t\t\tAcceptConditions.NotAccept, // 614\r\n\t\t\tAcceptConditions.NotAccept, // 615\r\n\t\t\tAcceptConditions.NotAccept, // 616\r\n\t\t\tAcceptConditions.NotAccept, // 617\r\n\t\t\tAcceptConditions.NotAccept, // 618\r\n\t\t\tAcceptConditions.NotAccept, // 619\r\n\t\t\tAcceptConditions.NotAccept, // 620\r\n\t\t\tAcceptConditions.Accept, // 621\r\n\t\t\tAcceptConditions.NotAccept, // 622\r\n\t\t\tAcceptConditions.Accept, // 623\r\n\t\t\tAcceptConditions.Accept, // 624\r\n\t\t\tAcceptConditions.Accept, // 625\r\n\t\t\tAcceptConditions.Accept, // 626\r\n\t\t\tAcceptConditions.Accept, // 627\r\n\t\t\tAcceptConditions.Accept, // 628\r\n\t\t\tAcceptConditions.Accept, // 629\r\n\t\t\tAcceptConditions.Accept, // 630\r\n\t\t\tAcceptConditions.Accept, // 631\r\n\t\t\tAcceptConditions.Accept, // 632\r\n\t\t\tAcceptConditions.Accept, // 633\r\n\t\t\tAcceptConditions.Accept, // 634\r\n\t\t\tAcceptConditions.Accept, // 635\r\n\t\t\tAcceptConditions.Accept, // 636\r\n\t\t\tAcceptConditions.Accept, // 637\r\n\t\t\tAcceptConditions.Accept, // 638\r\n\t\t\tAcceptConditions.Accept, // 639\r\n\t\t\tAcceptConditions.Accept, // 640\r\n\t\t\tAcceptConditions.Accept, // 641\r\n\t\t\tAcceptConditions.Accept, // 642\r\n\t\t\tAcceptConditions.Accept, // 643\r\n\t\t\tAcceptConditions.Accept, // 644\r\n\t\t\tAcceptConditions.Accept, // 645\r\n\t\t\tAcceptConditions.Accept, // 646\r\n\t\t\tAcceptConditions.Accept, // 647\r\n\t\t\tAcceptConditions.Accept, // 648\r\n\t\t\tAcceptConditions.Accept, // 649\r\n\t\t\tAcceptConditions.Accept, // 650\r\n\t\t\tAcceptConditions.Accept, // 651\r\n\t\t\tAcceptConditions.Accept, // 652\r\n\t\t\tAcceptConditions.Accept, // 653\r\n\t\t\tAcceptConditions.Accept, // 654\r\n\t\t\tAcceptConditions.Accept, // 655\r\n\t\t\tAcceptConditions.Accept, // 656\r\n\t\t\tAcceptConditions.Accept, // 657\r\n\t\t\tAcceptConditions.Accept, // 658\r\n\t\t\tAcceptConditions.Accept, // 659\r\n\t\t\tAcceptConditions.Accept, // 660\r\n\t\t\tAcceptConditions.Accept, // 661\r\n\t\t\tAcceptConditions.Accept, // 662\r\n\t\t\tAcceptConditions.Accept, // 663\r\n\t\t\tAcceptConditions.Accept, // 664\r\n\t\t\tAcceptConditions.Accept, // 665\r\n\t\t\tAcceptConditions.Accept, // 666\r\n\t\t\tAcceptConditions.Accept, // 667\r\n\t\t\tAcceptConditions.Accept, // 668\r\n\t\t\tAcceptConditions.Accept, // 669\r\n\t\t\tAcceptConditions.Accept, // 670\r\n\t\t\tAcceptConditions.Accept, // 671\r\n\t\t\tAcceptConditions.Accept, // 672\r\n\t\t\tAcceptConditions.Accept, // 673\r\n\t\t\tAcceptConditions.Accept, // 674\r\n\t\t\tAcceptConditions.Accept, // 675\r\n\t\t\tAcceptConditions.Accept, // 676\r\n\t\t\tAcceptConditions.Accept, // 677\r\n\t\t\tAcceptConditions.Accept, // 678\r\n\t\t\tAcceptConditions.Accept, // 679\r\n\t\t\tAcceptConditions.Accept, // 680\r\n\t\t\tAcceptConditions.Accept, // 681\r\n\t\t\tAcceptConditions.Accept, // 682\r\n\t\t\tAcceptConditions.Accept, // 683\r\n\t\t\tAcceptConditions.Accept, // 684\r\n\t\t\tAcceptConditions.Accept, // 685\r\n\t\t\tAcceptConditions.Accept, // 686\r\n\t\t\tAcceptConditions.Accept, // 687\r\n\t\t\tAcceptConditions.Accept, // 688\r\n\t\t\tAcceptConditions.Accept, // 689\r\n\t\t\tAcceptConditions.Accept, // 690\r\n\t\t\tAcceptConditions.Accept, // 691\r\n\t\t\tAcceptConditions.Accept, // 692\r\n\t\t\tAcceptConditions.Accept, // 693\r\n\t\t\tAcceptConditions.Accept, // 694\r\n\t\t\tAcceptConditions.Accept, // 695\r\n\t\t\tAcceptConditions.Accept, // 696\r\n\t\t\tAcceptConditions.Accept, // 697\r\n\t\t\tAcceptConditions.Accept, // 698\r\n\t\t\tAcceptConditions.Accept, // 699\r\n\t\t\tAcceptConditions.Accept, // 700\r\n\t\t\tAcceptConditions.Accept, // 701\r\n\t\t\tAcceptConditions.Accept, // 702\r\n\t\t\tAcceptConditions.Accept, // 703\r\n\t\t\tAcceptConditions.Accept, // 704\r\n\t\t\tAcceptConditions.Accept, // 705\r\n\t\t\tAcceptConditions.Accept, // 706\r\n\t\t\tAcceptConditions.Accept, // 707\r\n\t\t\tAcceptConditions.Accept, // 708\r\n\t\t\tAcceptConditions.Accept, // 709\r\n\t\t\tAcceptConditions.Accept, // 710\r\n\t\t\tAcceptConditions.Accept, // 711\r\n\t\t\tAcceptConditions.Accept, // 712\r\n\t\t\tAcceptConditions.Accept, // 713\r\n\t\t\tAcceptConditions.Accept, // 714\r\n\t\t\tAcceptConditions.Accept, // 715\r\n\t\t\tAcceptConditions.Accept, // 716\r\n\t\t\tAcceptConditions.Accept, // 717\r\n\t\t\tAcceptConditions.Accept, // 718\r\n\t\t\tAcceptConditions.Accept, // 719\r\n\t\t\tAcceptConditions.Accept, // 720\r\n\t\t\tAcceptConditions.Accept, // 721\r\n\t\t\tAcceptConditions.Accept, // 722\r\n\t\t\tAcceptConditions.Accept, // 723\r\n\t\t\tAcceptConditions.Accept, // 724\r\n\t\t\tAcceptConditions.Accept, // 725\r\n\t\t\tAcceptConditions.Accept, // 726\r\n\t\t\tAcceptConditions.Accept, // 727\r\n\t\t\tAcceptConditions.Accept, // 728\r\n\t\t\tAcceptConditions.Accept, // 729\r\n\t\t\tAcceptConditions.Accept, // 730\r\n\t\t\tAcceptConditions.Accept, // 731\r\n\t\t\tAcceptConditions.Accept, // 732\r\n\t\t\tAcceptConditions.Accept, // 733\r\n\t\t\tAcceptConditions.Accept, // 734\r\n\t\t\tAcceptConditions.Accept, // 735\r\n\t\t\tAcceptConditions.Accept, // 736\r\n\t\t\tAcceptConditions.Accept, // 737\r\n\t\t\tAcceptConditions.Accept, // 738\r\n\t\t\tAcceptConditions.Accept, // 739\r\n\t\t\tAcceptConditions.Accept, // 740\r\n\t\t\tAcceptConditions.Accept, // 741\r\n\t\t\tAcceptConditions.Accept, // 742\r\n\t\t\tAcceptConditions.Accept, // 743\r\n\t\t\tAcceptConditions.Accept, // 744\r\n\t\t\tAcceptConditions.Accept, // 745\r\n\t\t\tAcceptConditions.Accept, // 746\r\n\t\t\tAcceptConditions.Accept, // 747\r\n\t\t\tAcceptConditions.Accept, // 748\r\n\t\t\tAcceptConditions.Accept, // 749\r\n\t\t\tAcceptConditions.Accept, // 750\r\n\t\t\tAcceptConditions.Accept, // 751\r\n\t\t\tAcceptConditions.Accept, // 752\r\n\t\t\tAcceptConditions.Accept, // 753\r\n\t\t\tAcceptConditions.Accept, // 754\r\n\t\t\tAcceptConditions.Accept, // 755\r\n\t\t\tAcceptConditions.Accept, // 756\r\n\t\t\tAcceptConditions.Accept, // 757\r\n\t\t\tAcceptConditions.Accept, // 758\r\n\t\t\tAcceptConditions.Accept, // 759\r\n\t\t\tAcceptConditions.Accept, // 760\r\n\t\t\tAcceptConditions.Accept, // 761\r\n\t\t\tAcceptConditions.Accept, // 762\r\n\t\t\tAcceptConditions.Accept, // 763\r\n\t\t\tAcceptConditions.Accept, // 764\r\n\t\t\tAcceptConditions.Accept, // 765\r\n\t\t\tAcceptConditions.Accept, // 766\r\n\t\t\tAcceptConditions.Accept, // 767\r\n\t\t\tAcceptConditions.Accept, // 768\r\n\t\t\tAcceptConditions.Accept, // 769\r\n\t\t\tAcceptConditions.Accept, // 770\r\n\t\t\tAcceptConditions.Accept, // 771\r\n\t\t\tAcceptConditions.Accept, // 772\r\n\t\t\tAcceptConditions.Accept, // 773\r\n\t\t\tAcceptConditions.Accept, // 774\r\n\t\t\tAcceptConditions.Accept, // 775\r\n\t\t\tAcceptConditions.Accept, // 776\r\n\t\t\tAcceptConditions.Accept, // 777\r\n\t\t\tAcceptConditions.Accept, // 778\r\n\t\t\tAcceptConditions.Accept, // 779\r\n\t\t\tAcceptConditions.Accept, // 780\r\n\t\t\tAcceptConditions.Accept, // 781\r\n\t\t\tAcceptConditions.Accept, // 782\r\n\t\t\tAcceptConditions.Accept, // 783\r\n\t\t\tAcceptConditions.Accept, // 784\r\n\t\t\tAcceptConditions.Accept, // 785\r\n\t\t\tAcceptConditions.Accept, // 786\r\n\t\t\tAcceptConditions.NotAccept, // 787\r\n\t\t\tAcceptConditions.NotAccept, // 788\r\n\t\t\tAcceptConditions.Accept, // 789\r\n\t\t\tAcceptConditions.Accept, // 790\r\n\t\t\tAcceptConditions.Accept, // 791\r\n\t\t\tAcceptConditions.Accept, // 792\r\n\t\t\tAcceptConditions.Accept, // 793\r\n\t\t\tAcceptConditions.Accept, // 794\r\n\t\t\tAcceptConditions.Accept, // 795\r\n\t\t\tAcceptConditions.Accept, // 796\r\n\t\t\tAcceptConditions.Accept, // 797\r\n\t\t\tAcceptConditions.Accept, // 798\r\n\t\t\tAcceptConditions.Accept, // 799\r\n\t\t\tAcceptConditions.Accept, // 800\r\n\t\t\tAcceptConditions.Accept, // 801\r\n\t\t\tAcceptConditions.Accept, // 802\r\n\t\t\tAcceptConditions.Accept, // 803\r\n\t\t\tAcceptConditions.Accept, // 804\r\n\t\t\tAcceptConditions.Accept, // 805\r\n\t\t\tAcceptConditions.Accept, // 806\r\n\t\t\tAcceptConditions.Accept, // 807\r\n\t\t\tAcceptConditions.Accept, // 808\r\n\t\t\tAcceptConditions.Accept, // 809\r\n\t\t\tAcceptConditions.Accept, // 810\r\n\t\t\tAcceptConditions.Accept, // 811\r\n\t\t\tAcceptConditions.Accept, // 812\r\n\t\t\tAcceptConditions.Accept, // 813\r\n\t\t\tAcceptConditions.Accept, // 814\r\n\t\t\tAcceptConditions.Accept, // 815\r\n\t\t\tAcceptConditions.Accept, // 816\r\n\t\t\tAcceptConditions.Accept, // 817\r\n\t\t\tAcceptConditions.Accept, // 818\r\n\t\t\tAcceptConditions.Accept, // 819\r\n\t\t\tAcceptConditions.Accept, // 820\r\n\t\t\tAcceptConditions.Accept, // 821\r\n\t\t\tAcceptConditions.Accept, // 822\r\n\t\t\tAcceptConditions.Accept, // 823\r\n\t\t\tAcceptConditions.Accept, // 824\r\n\t\t\tAcceptConditions.Accept, // 825\r\n\t\t\tAcceptConditions.Accept, // 826\r\n\t\t\tAcceptConditions.Accept, // 827\r\n\t\t\tAcceptConditions.Accept, // 828\r\n\t\t\tAcceptConditions.Accept, // 829\r\n\t\t\tAcceptConditions.Accept, // 830\r\n\t\t\tAcceptConditions.Accept, // 831\r\n\t\t\tAcceptConditions.Accept, // 832\r\n\t\t\tAcceptConditions.Accept, // 833\r\n\t\t\tAcceptConditions.Accept, // 834\r\n\t\t\tAcceptConditions.Accept, // 835\r\n\t\t\tAcceptConditions.Accept, // 836\r\n\t\t\tAcceptConditions.Accept, // 837\r\n\t\t\tAcceptConditions.Accept, // 838\r\n\t\t\tAcceptConditions.Accept, // 839\r\n\t\t\tAcceptConditions.Accept, // 840\r\n\t\t\tAcceptConditions.Accept, // 841\r\n\t\t\tAcceptConditions.Accept, // 842\r\n\t\t\tAcceptConditions.Accept, // 843\r\n\t\t\tAcceptConditions.Accept, // 844\r\n\t\t\tAcceptConditions.Accept, // 845\r\n\t\t\tAcceptConditions.Accept, // 846\r\n\t\t\tAcceptConditions.Accept, // 847\r\n\t\t\tAcceptConditions.Accept, // 848\r\n\t\t\tAcceptConditions.Accept, // 849\r\n\t\t\tAcceptConditions.Accept, // 850\r\n\t\t\tAcceptConditions.Accept, // 851\r\n\t\t\tAcceptConditions.Accept, // 852\r\n\t\t\tAcceptConditions.Accept, // 853\r\n\t\t\tAcceptConditions.Accept, // 854\r\n\t\t\tAcceptConditions.Accept, // 855\r\n\t\t\tAcceptConditions.Accept, // 856\r\n\t\t\tAcceptConditions.Accept, // 857\r\n\t\t\tAcceptConditions.Accept, // 858\r\n\t\t\tAcceptConditions.Accept, // 859\r\n\t\t\tAcceptConditions.Accept, // 860\r\n\t\t\tAcceptConditions.Accept, // 861\r\n\t\t\tAcceptConditions.Accept, // 862\r\n\t\t\tAcceptConditions.Accept, // 863\r\n\t\t\tAcceptConditions.Accept, // 864\r\n\t\t\tAcceptConditions.Accept, // 865\r\n\t\t\tAcceptConditions.Accept, // 866\r\n\t\t\tAcceptConditions.Accept, // 867\r\n\t\t\tAcceptConditions.Accept, // 868\r\n\t\t\tAcceptConditions.Accept, // 869\r\n\t\t\tAcceptConditions.Accept, // 870\r\n\t\t\tAcceptConditions.Accept, // 871\r\n\t\t\tAcceptConditions.Accept, // 872\r\n\t\t\tAcceptConditions.Accept, // 873\r\n\t\t\tAcceptConditions.Accept, // 874\r\n\t\t\tAcceptConditions.Accept, // 875\r\n\t\t\tAcceptConditions.Accept, // 876\r\n\t\t\tAcceptConditions.Accept, // 877\r\n\t\t\tAcceptConditions.Accept, // 878\r\n\t\t\tAcceptConditions.Accept, // 879\r\n\t\t\tAcceptConditions.Accept, // 880\r\n\t\t\tAcceptConditions.Accept, // 881\r\n\t\t\tAcceptConditions.Accept, // 882\r\n\t\t\tAcceptConditions.Accept, // 883\r\n\t\t\tAcceptConditions.Accept, // 884\r\n\t\t\tAcceptConditions.NotAccept, // 885\r\n\t\t\tAcceptConditions.Accept, // 886\r\n\t\t\tAcceptConditions.Accept, // 887\r\n\t\t\tAcceptConditions.Accept, // 888\r\n\t\t\tAcceptConditions.Accept, // 889\r\n\t\t\tAcceptConditions.Accept, // 890\r\n\t\t\tAcceptConditions.Accept, // 891\r\n\t\t\tAcceptConditions.Accept, // 892\r\n\t\t\tAcceptConditions.Accept, // 893\r\n\t\t\tAcceptConditions.Accept, // 894\r\n\t\t\tAcceptConditions.Accept, // 895\r\n\t\t\tAcceptConditions.Accept, // 896\r\n\t\t\tAcceptConditions.Accept, // 897\r\n\t\t\tAcceptConditions.Accept, // 898\r\n\t\t\tAcceptConditions.Accept, // 899\r\n\t\t\tAcceptConditions.Accept, // 900\r\n\t\t\tAcceptConditions.Accept, // 901\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] colMap = new int[]\r\n\t\t{\r\n\t\t\t64, 64, 64, 64, 64, 64, 64, 64, 64, 23, 11, 64, 64, 24, 64, 64, \r\n\t\t\t64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, \r\n\t\t\t69, 44, 20, 57, 50, 1, 47, 21, 58, 60, 45, 42, 53, 43, 46, 25, \r\n\t\t\t55, 56, 62, 61, 39, 68, 38, 68, 59, 52, 41, 66, 2, 18, 22, 4, \r\n\t\t\t53, 13, 32, 6, 27, 17, 28, 15, 19, 8, 40, 33, 12, 37, 14, 29, \r\n\t\t\t9, 36, 7, 5, 10, 16, 34, 31, 26, 30, 51, 70, 54, 70, 49, 35, \r\n\t\t\t3, 13, 32, 6, 27, 17, 28, 15, 19, 8, 40, 33, 12, 37, 14, 29, \r\n\t\t\t9, 36, 7, 5, 10, 16, 34, 31, 26, 30, 51, 63, 48, 65, 53, 64, \r\n\t\t\t67, 0\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[] rowMap = new int[]\r\n\t\t{\r\n\t\t\t0, 1, 2, 3, 4, 5, 1, 1, 6, 1, 7, 8, 9, 10, 11, 1, \r\n\t\t\t12, 1, 1, 1, 1, 13, 14, 1, 1, 1, 15, 16, 16, 17, 1, 1, \r\n\t\t\t1, 1, 18, 1, 1, 19, 20, 16, 21, 1, 1, 1, 1, 1, 1, 1, \r\n\t\t\t1, 22, 1, 1, 1, 1, 1, 1, 23, 1, 24, 1, 16, 16, 16, 16, \r\n\t\t\t1, 1, 16, 16, 25, 16, 26, 1, 1, 1, 27, 28, 16, 16, 1, 16, \r\n\t\t\t16, 16, 16, 16, 29, 16, 16, 30, 16, 1, 16, 16, 16, 16, 16, 16, \r\n\t\t\t16, 16, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16, 1, 16, \r\n\t\t\t16, 16, 16, 16, 16, 16, 16, 16, 32, 16, 16, 33, 1, 1, 1, 1, \r\n\t\t\t34, 35, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 1, 1, 1, 1, \r\n\t\t\t1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 1, 1, 1, 1, 16, \r\n\t\t\t16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 16, 16, \r\n\t\t\t16, 16, 16, 16, 16, 16, 36, 37, 38, 39, 40, 41, 42, 1, 43, 44, \r\n\t\t\t45, 40, 1, 46, 1, 1, 47, 1, 48, 1, 49, 1, 1, 50, 51, 1, \r\n\t\t\t52, 1, 53, 54, 55, 56, 57, 52, 1, 58, 1, 1, 1, 59, 1, 60, \r\n\t\t\t61, 1, 1, 62, 63, 64, 65, 66, 67, 68, 63, 1, 69, 1, 1, 70, \r\n\t\t\t1, 71, 72, 1, 1, 73, 1, 1, 74, 1, 75, 76, 77, 1, 78, 79, \r\n\t\t\t1, 80, 81, 1, 1, 82, 83, 84, 1, 85, 86, 87, 88, 89, 1, 90, \r\n\t\t\t1, 91, 92, 93, 94, 95, 1, 96, 1, 1, 1, 1, 97, 98, 99, 1, \r\n\t\t\t100, 1, 1, 1, 1, 101, 102, 103, 104, 1, 105, 1, 1, 1, 1, 106, \r\n\t\t\t1, 107, 108, 109, 110, 111, 112, 113, 1, 114, 1, 115, 1, 116, 117, 118, \r\n\t\t\t119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, \r\n\t\t\t135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, \r\n\t\t\t151, 152, 153, 154, 155, 1, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, \r\n\t\t\t166, 167, 168, 169, 170, 171, 172, 173, 9, 174, 175, 176, 10, 177, 178, 179, \r\n\t\t\t180, 181, 182, 183, 184, 185, 27, 186, 28, 187, 188, 189, 190, 191, 192, 193, \r\n\t\t\t194, 195, 196, 197, 158, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, \r\n\t\t\t209, 210, 211, 212, 213, 214, 215, 216, 30, 217, 218, 219, 26, 220, 221, 222, \r\n\t\t\t223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, \r\n\t\t\t239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, \r\n\t\t\t255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, \r\n\t\t\t271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, \r\n\t\t\t287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, \r\n\t\t\t303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, \r\n\t\t\t319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, \r\n\t\t\t335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 36, \r\n\t\t\t350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 113, 362, 363, 364, \r\n\t\t\t365, 366, 114, 367, 368, 369, 115, 370, 371, 372, 373, 374, 375, 376, 377, 378, \r\n\t\t\t379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 213, 390, 391, 392, 393, \r\n\t\t\t394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, \r\n\t\t\t410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, \r\n\t\t\t426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, \r\n\t\t\t442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, \r\n\t\t\t458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, \r\n\t\t\t474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, \r\n\t\t\t490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, \r\n\t\t\t506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, \r\n\t\t\t522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, \r\n\t\t\t538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, \r\n\t\t\t554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, \r\n\t\t\t570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, \r\n\t\t\t586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, \r\n\t\t\t602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, \r\n\t\t\t618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, \r\n\t\t\t634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, \r\n\t\t\t650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 16, 662, 663, 664, \r\n\t\t\t665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, \r\n\t\t\t681, 682, 683, 684, 685, 686\r\n\t\t};\r\n\t\t\r\n\t\tprivate static int[,] nextState = new int[,]\r\n\t\t{\r\n\t\t\t{ 1, 2, 263, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, 2, 261, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2, 2 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 306, -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 894, 898, 898, 898, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 880, -1, 876, 876, 876, 876, 876, 627, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 628, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 31, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, -1, 376, 376, 376, 378, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, -1, 376, 376, 376 },\r\n\t\t\t{ -1, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 32, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 382, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, -1, 380, 380, 380 },\r\n\t\t\t{ -1, -1, -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, -1, -1, -1, -1, 14, 14, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, 14, -1, -1, 14, 14, -1, -1, 14, -1, 14, 14, -1, -1, -1, -1, -1, 14, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, 414, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 310, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 799, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -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, -1, -1, -1, -1, 40, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 40, 40, -1, -1, 40, -1, 40, 40, -1, -1, -1, -1, -1, 40, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 56, 56, 56, 56, 56, 56, -1, 56, 56, 56, 56, 56, 56, -1, 56, -1, -1, -1, -1, -1, -1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 56, -1, -1, 56, 56, -1, -1, 56, -1, 56, 56, -1, -1, -1, -1, -1, 56, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 693, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 389, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 705, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, -1, -1, 70, 70, -1, -1, 70, -1, 70, 70, -1, -1, -1, -1, -1, 70, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, 74, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, 74, 74, -1, -1, -1, 74, -1, -1, -1, -1, -1, 74, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 74, -1, -1, 74, 74, -1, -1, 74, -1, 74, 74, -1, -1, -1, -1, -1, 74, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 75, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 435, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 459, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 821, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 819, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 762, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 889, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, -1, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, -1, 182, 182, 182 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, 183, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, -1, -1, 183, 183, -1, -1, 183, -1, 183, 183, -1, -1, -1, -1, -1, 183, 274, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 184, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 185, -1 },\r\n\t\t\t{ -1, 186, 186, -1, 186, -1, -1, -1, -1, -1, -1, 186, -1, -1, -1, -1, -1, -1, 186, -1, -1, 186, 186, 186, 186, 186, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 186, 186, 186, 186, 186, 186, 186, 186, 186, -1, -1, -1, 186, -1, -1, -1, 186, 186, -1, 186, -1, -1, -1, -1, -1, 186, -1, -1, 186, -1 },\r\n\t\t\t{ -1, -1, -1, 187, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 188, 188, 188, 188, 188, 188, -1, 188, 188, 188, 188, 188, 188, -1, 188, -1, -1, -1, -1, -1, -1, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 188, 188, -1, -1, 188, 188, -1, -1, 188, -1, 188, 188, -1, -1, -1, -1, -1, 188, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 190, 190, -1, -1, 190, -1, 190, 190, -1, -1, -1, -1, -1, 190, -1, -1 },\r\n\t\t\t{ -1, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 194, 195, 195, 195, 195, 195, 195, 194, 195, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 194, 194, 195, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 196, 194, 194, 194, -1, 194, 194, 194 },\r\n\t\t\t{ -1, 197, 197, 197, 197, 197, 198, 199, 197, 197, 199, 197, 197, 197, 199, 197, 200, 197, 197, 197, 201, 197, 197, 197, 197, 197, 279, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 202, 202, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 199, 197, 197, 197, 199, 202, 202, 197, 197, 197, 197, 202, 202, 203, 197, 197, 197, -1, 202, 197, 197 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 195, 195, 195, 195, 195, 195, -1, 195, 195, 195, 195, 195, 195, -1, 195, -1, -1, -1, -1, -1, -1, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 195, 195, -1, -1, 195, 195, -1, -1, 195, -1, 195, 195, -1, -1, -1, -1, -1, 195, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 573, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 899, -1, -1, -1, -1, -1, -1, 899, -1, -1, -1, 899, -1, -1, -1, -1, -1, -1, -1, -1, -1, 899, 899, -1, -1, -1, 899, -1, -1, -1, -1, -1, 899, 899, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 899, -1, -1, 899, 899, -1, -1, 899, -1, 899, 899, -1, -1, -1, -1, -1, 899, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 596, 596, -1, -1, -1, -1, 596, 596, -1, -1, -1, -1, -1, 596, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, 283, -1, -1, -1, 283, -1, -1, -1, -1, -1, 283, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, -1, 283, 283, -1, -1, 283, -1, 283, 283, -1, -1, -1, -1, -1, 283, -1, -1 },\r\n\t\t\t{ -1, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, -1, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 576, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, -1, 206, 206, 206 },\r\n\t\t\t{ -1, 208, 208, -1, 208, -1, -1, -1, -1, -1, -1, 208, -1, -1, -1, -1, -1, -1, 208, -1, -1, 208, 208, 208, 208, 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 208, 208, 208, 208, 208, 208, 208, 208, 208, -1, -1, -1, 208, -1, -1, -1, 208, 208, -1, 208, -1, -1, -1, -1, -1, 208, -1, -1, 208, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 210, 210, 210, 210, 210, 210, -1, 210, 210, 210, 210, 210, 210, -1, 210, -1, -1, -1, -1, -1, -1, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 210, 210, -1, -1, 210, 210, -1, -1, 210, -1, 210, 210, -1, -1, -1, -1, -1, 210, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 212, 212, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 212, -1, -1, 212, 212, -1, -1, 212, -1, 212, 212, -1, -1, -1, -1, -1, 212, -1, -1 },\r\n\t\t\t{ -1, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 216, 217, 217, 217, 217, 217, 217, 216, 217, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 216, 216, 217, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 217, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 218, 216, 216, 216, -1, 216, 216, 216 },\r\n\t\t\t{ -1, 219, 219, 220, 219, 219, 221, 222, 219, 219, 222, 219, 219, 219, 222, 219, 223, 219, 219, 219, 219, 219, 219, 219, 219, 219, 288, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 224, 224, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 222, 219, 219, 219, 222, 224, 224, 219, 219, 219, 219, 224, 224, 225, 219, 219, 219, -1, 224, 219, 219 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 217, 217, 217, 217, 217, 217, -1, 217, 217, 217, 217, 217, 217, -1, 217, -1, -1, -1, -1, -1, -1, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 217, 217, -1, -1, 217, 217, -1, -1, 217, -1, 217, 217, -1, -1, -1, -1, -1, 217, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 579, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 900, -1, -1, -1, -1, -1, -1, 900, -1, -1, -1, 900, -1, -1, -1, -1, -1, -1, -1, -1, -1, 900, 900, -1, -1, -1, 900, -1, -1, -1, -1, -1, 900, 900, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 900, -1, -1, 900, 900, -1, -1, 900, -1, 900, 900, -1, -1, -1, -1, -1, 900, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 598, 598, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 598, 598, -1, -1, -1, -1, 598, 598, -1, -1, -1, -1, -1, 598, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 292, -1, -1, -1, -1, -1, -1, 292, -1, -1, -1, 292, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, 292, -1, -1, -1, 292, -1, -1, -1, -1, -1, 292, 292, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, -1, -1, 292, 292, -1, -1, 292, -1, 292, 292, -1, -1, -1, -1, -1, 292, -1, -1 },\r\n\t\t\t{ -1, 228, 228, -1, 228, -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, 228, -1, -1, 228, 228, 228, 228, 228, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228, 228, 228, 228, 228, 228, 228, 228, 228, -1, -1, -1, 228, -1, -1, -1, 228, 228, -1, 228, -1, -1, -1, -1, -1, 228, -1, -1, 228, -1 },\r\n\t\t\t{ -1, -1, -1, 229, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 230, 230, 230, 230, 230, 230, -1, 230, 230, 230, 230, 230, 230, -1, 230, -1, -1, -1, -1, -1, -1, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 230, 230, -1, -1, 230, 230, -1, -1, 230, -1, 230, 230, -1, -1, -1, -1, -1, 230, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 231, 231, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 231, -1, -1, 231, 231, -1, -1, 231, -1, 231, 231, -1, -1, -1, -1, -1, 231, -1, -1 },\r\n\t\t\t{ -1, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 235, 236, 236, 236, 236, 236, 236, 235, 236, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 235, 235, 236, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 236, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 237, 235, 235, 235, -1, 235, 235, 235 },\r\n\t\t\t{ -1, 238, 238, 238, 238, 238, 239, 240, 238, 238, 240, 238, 238, 238, 240, 238, 241, 238, 238, 238, 238, 238, 238, 238, 238, 238, 298, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 242, 242, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 240, 238, 238, 238, 240, 242, 242, 238, 238, 238, 238, 242, 242, 243, 238, 238, 238, -1, 242, 238, 238 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 236, 236, 236, 236, 236, 236, -1, 236, 236, 236, 236, 236, 236, -1, 236, -1, -1, -1, -1, -1, -1, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 236, 236, -1, -1, 236, 236, -1, -1, 236, -1, 236, 236, -1, -1, -1, -1, -1, 236, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 901, -1, -1, -1, -1, -1, -1, 901, -1, -1, -1, 901, -1, -1, -1, -1, -1, -1, -1, -1, -1, 901, 901, -1, -1, -1, 901, -1, -1, -1, -1, -1, 901, 901, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 901, -1, -1, 901, 901, -1, -1, 901, -1, 901, 901, -1, -1, -1, -1, -1, 901, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 600, 600, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 600, 600, -1, -1, -1, -1, 600, 600, -1, -1, -1, -1, -1, 600, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 302, -1, -1, -1, -1, -1, -1, 302, -1, -1, -1, 302, -1, -1, -1, -1, -1, -1, -1, -1, -1, 302, 302, -1, -1, -1, 302, -1, -1, -1, -1, -1, 302, 302, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 302, -1, -1, 302, 302, -1, -1, 302, -1, 302, 302, -1, -1, -1, -1, -1, 302, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 248, 248, 248, 248, 248, 248, -1, 248, 248, 248, 248, 248, 248, -1, 248, -1, -1, -1, -1, -1, -1, 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, 248, 248, -1, -1, 248, 248, -1, -1, 248, -1, 248, 248, -1, -1, -1, -1, -1, 248, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 250, 250, 250, 250, 250, 250, -1, 250, 250, 250, 250, 250, 250, -1, 250, -1, -1, -1, -1, -1, -1, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 250, 250, -1, -1, 250, 250, -1, -1, 250, -1, 250, 250, -1, -1, -1, -1, -1, 250, -1, -1 },\r\n\t\t\t{ -1, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, -1, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, -1, 251, 251, 251 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 253, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, -1, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, -1, 254, 254, 254 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, 258, 258, -1, 258, 258, 258, 258, 258, 258, -1, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, -1, 258, -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, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, -1, 258, 258, 258 },\r\n\t\t\t{ -1, -1, -1, 2, -1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2, 2 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 583, 583, 583, 583, 583, 583, -1, 583, 583, 583, 583, 583, 583, -1, 583, -1, -1, -1, -1, -1, -1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, -1, -1, 583, -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 },\r\n\t\t\t{ -1, 3, -1, 2, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2, 2 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 323, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 323, 323, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, 323, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, 24, -1, -1, 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 633, 876, 876, 876, 876, 876, -1, 876, 876, 328, 876, 876, 876, -1, 876, -1, 374, -1, -1, -1, -1, 876, 876, 27, 876, 876, 876, 876, 876, 876, 876, 876, 634, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, -1, -1, -1, -1, 392, -1, -1, -1, -1, -1, 14, 14, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, 14, -1, -1, 14, 14, -1, -1, 14, -1, 14, 14, -1, -1, -1, -1, -1, 14, -1, -1 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 274, -1 },\r\n\t\t\t{ -1, 186, 186, -1, 186, -1, -1, -1, -1, -1, -1, 186, -1, -1, -1, -1, -1, -1, 186, -1, -1, 186, 193, 186, 186, 186, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 186, 186, 186, 186, 186, 186, 186, 186, 186, -1, -1, -1, 186, -1, -1, -1, 186, 186, -1, 186, -1, -1, -1, -1, -1, 186, -1, -1, 186, -1 },\r\n\t\t\t{ -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 190, 190, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, 190, 190, -1, -1, 190, -1, 190, 190, -1, -1, -1, -1, -1, 190, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 205, -1, -1, -1, -1, -1, -1, 205, -1, -1, -1, 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, 205, 205, -1, -1, -1, 205, -1, -1, -1, -1, -1, 205, 205, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 205, -1, -1, 205, 205, -1, -1, 205, -1, 205, 205, -1, -1, -1, -1, -1, 205, -1, -1 },\r\n\t\t\t{ -1, 208, 208, -1, 208, -1, -1, -1, -1, -1, -1, 208, -1, -1, -1, -1, -1, -1, 208, -1, -1, 208, 215, 208, 208, 208, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 208, 208, 208, 208, 208, 208, 208, 208, 208, -1, -1, -1, 208, -1, -1, -1, 208, 208, -1, 208, -1, -1, -1, -1, -1, 208, -1, -1, 208, -1 },\r\n\t\t\t{ -1, -1, -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, 212, 212, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 212, -1, -1, 212, 212, -1, -1, 212, -1, 212, 212, -1, -1, -1, -1, -1, 212, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 226, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 227, -1, -1, -1, -1, -1, -1, 227, -1, -1, -1, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, 227, -1, -1, -1, 227, -1, -1, -1, -1, -1, 227, 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, -1, -1, 227, 227, -1, -1, 227, -1, 227, 227, -1, -1, -1, -1, -1, 227, -1, -1 },\r\n\t\t\t{ -1, 228, 228, -1, 228, -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, 228, -1, -1, 228, 234, 228, 228, 228, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228, 228, 228, 228, 228, 228, 228, 228, 228, -1, -1, -1, 228, -1, -1, -1, 228, 228, -1, 228, -1, -1, -1, -1, -1, 228, -1, -1, 228, -1 },\r\n\t\t\t{ -1, 228, 228, 229, 228, -1, -1, -1, -1, -1, -1, 228, -1, -1, -1, -1, -1, -1, 228, -1, 229, 294, 228, 228, 228, 228, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228, 228, 228, 228, 228, 228, 228, 228, 228, -1, -1, -1, 228, -1, -1, -1, 228, 228, -1, 228, -1, -1, -1, -1, -1, 228, -1, -1, 228, -1 },\r\n\t\t\t{ -1, -1, -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, 231, 231, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 231, -1, -1, 231, 231, -1, -1, 231, -1, 231, 231, -1, -1, -1, -1, -1, 231, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 244, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 245, -1, -1, -1, -1, -1, -1, 245, -1, -1, -1, 245, -1, -1, -1, -1, -1, -1, -1, -1, -1, 245, 245, -1, -1, -1, 245, -1, -1, -1, -1, -1, 245, 245, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 245, -1, -1, 245, 245, -1, -1, 245, -1, 245, 245, -1, -1, -1, -1, -1, 245, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 246, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 28, 876, 830, 876, 876, 876, -1, 876, 876, 334, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 791, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, 311, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, 311, -1, -1, -1, 311, -1, -1, -1, -1, -1, 311, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, -1, -1, 311, 311, -1, -1, 311, -1, 311, 311, -1, -1, -1, -1, -1, 311, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, 313, -1, -1, -1, 313, -1, -1, -1, -1, -1, 313, 313, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, 313, 313, -1, -1, 313, -1, 313, 313, -1, -1, -1, -1, -1, 313, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 315, -1, -1, -1, -1, -1, -1, 315, -1, -1, -1, 315, -1, -1, -1, -1, -1, -1, -1, -1, -1, 315, 315, -1, -1, -1, 315, -1, -1, -1, -1, -1, 315, 315, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 315, -1, -1, 315, 315, -1, -1, 315, -1, 315, 315, -1, -1, -1, -1, -1, 315, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 346, 876, 876, -1, 876, 876, 876, 876, 876, 648, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 38, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 266, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 39, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 650, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1 },\r\n\t\t\t{ -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, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1 },\r\n\t\t\t{ -1, -1, 384, -1, -1, 876, 876, 796, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, 12, 13, -1, -1, -1, -1, 876, 876, 876, 652, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 852, 831, 876, 876, 876, 58, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 332, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 664, 876, 876, 361, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 60, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 335, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, 46, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 61, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 62, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 48, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 63, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 40, -1, -1, -1, -1, -1, -1, 388, -1, -1, -1, -1, -1, 40, -1, -1, 40, 40, -1, -1, 40, -1, 40, 40, -1, -1, -1, -1, -1, 40, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 66, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 67, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 347, -1, -1, -1, -1, -1, -1, 350, -1, -1, -1, -1, 347, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 347, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 68, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, -1, 350, -1, -1, -1, -1, -1, -1, -1, -1, 356, 885, -1, 350, 350, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 69, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 56, 56, 56, 56, 56, 56, -1, 56, 56, 56, 56, 56, 56, -1, 56, -1, -1, -1, -1, -1, -1, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 76, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 77, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 396, -1, 398, 400, -1, -1, -1, -1, 604, -1, -1, 402, -1, -1, -1, -1, -1, -1, 404, -1, -1, -1, 406, 408, 410, -1, -1, 412, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 79, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 264, 362, 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, 362, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 80, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 81, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 82, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 83, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ 1, 8, 267, 9, 307, 10, 783, 826, 268, 849, 594, 11, 863, 308, 621, 871, 623, 875, 318, 876, 12, 13, 321, 11, 11, 324, 624, 319, 625, 322, 877, 878, 325, 876, 626, 879, 876, 876, 14, 14, 876, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 876, 14, 357, 15, 269, 14, 16, 360, 14, 357, 14, 14, 17, 18, 19, 357, 1, 14, 11, 357 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 84, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 85, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 418, 420, 420, 418, 418, 418, 418, 418, 418, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, 59, 420, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 422, 418, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, -1, 418, 418, 418 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 86, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 88, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, -1, 376, 376, 376 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 90, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 91, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, -1, 380, 380, 380 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 92, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 93, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, 70, -1, -1, 428, 428, -1, -1, -1, -1, -1, -1, -1, -1, 70, -1, -1, 70, 70, -1, -1, 70, -1, 70, 70, -1, -1, -1, -1, -1, 70, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 94, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 95, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 96, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 97, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 98, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 99, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 605, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 100, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 434, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 101, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 436, -1, -1, -1, -1, -1, 438, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 102, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 103, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 440, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 104, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 105, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 106, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 607, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 107, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 446, 446, 446, 446, 446, 446, -1, 446, 446, 446, 446, 446, 446, -1, 446, 448, 609, -1, 414, -1, -1, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, -1, -1, 446, -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, 414, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 108, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 788, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 109, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 418, 420, 420, 418, 418, 418, 418, 418, 418, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, 78, 420, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 422, 418, 418, 420, 418, 418, 418, 418, 418, 418, 418, 418, 418, -1, 418, 418, 418 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 111, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 59, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 450, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, -1, 420, 420, 420 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 112, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 418, 603, 603, 418, 418, 418, 418, 418, 418, 418, 603, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 603, 418, 452, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 603, 418, 418, 418, 418, 418, 418, 418, 418, 418, -1, 418, 418, 418 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 113, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 114, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, 414, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 115, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 116, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 454, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 117, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, 456, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 118, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 460, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 119, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 120, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 466, -1, -1, 468, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 121, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 470, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 122, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 123, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 613, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 128, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 446, 446, 446, 446, 446, 446, 89, 446, 446, 446, 446, 446, 446, -1, 446, -1, -1, -1, -1, 273, -1, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 446, 446, -1, -1, 446, 446, -1, -1, 446, -1, 446, 446, -1, -1, -1, -1, -1, 446, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 129, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 472, 472, 472, 472, 472, 472, -1, 472, 472, 472, 472, 472, 472, -1, 472, -1, -1, -1, -1, -1, -1, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, -1, -1, 472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 130, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 452, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, -1, 603, 603, 603 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 131, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 603, 420, 420, 420, 420, 420, 420, 420, 420, 420, 59, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 450, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, -1, 420, 420, 420 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 132, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 133, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 134, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 135, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 482, -1, -1, -1, -1, -1, 484, -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, 488, -1, -1, 490, 110, 492, -1, -1, -1, -1, -1, -1, -1, 484, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 136, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 137, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 138, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 145, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 146, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -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, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 147, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 472, 472, 472, 472, 472, 472, -1, 472, 472, 472, 472, 472, 472, -1, 472, 510, -1, -1, -1, -1, -1, 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, 472, 472, -1, -1, 472, 472, -1, -1, 472, -1, 472, 472, -1, -1, -1, -1, -1, 472, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 148, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, -1, 474, 474, 474, 474, 474, 474, -1, 474, -1, 510, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, 474, -1, -1, 474, 474, -1, -1, 474, -1, 474, 474, -1, -1, -1, -1, -1, 474, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 149, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 150, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 151, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, 480, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 152, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 516, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 153, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -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, 110, -1, -1, -1, -1, -1, -1, -1, -1, 484, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 159, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 160, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 161, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, 125, -1, -1, -1, -1, -1, -1, -1, -1, 490, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 162, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 163, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 164, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, 526, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 528, -1, -1, 529, 126, 530, -1, -1, -1, -1, -1, -1, -1, 524, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 165, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 531, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 166, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 532, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 168, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 169, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 170, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 171, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 616, -1, -1, -1, -1, -1, 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, 127, -1, -1, -1, -1, -1, -1, -1, -1, 537, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 172, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 273, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 173, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 174, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 538, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 175, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 176, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 518, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 177, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, 140, -1, -1, -1, -1, -1, -1, -1, -1, 520, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 178, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -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, -1, -1, -1, -1, -1, -1, -1, 522, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 179, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, 524, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 180, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 181, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 142, -1, -1, -1, -1, -1, -1, -1, -1, 529, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 531, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 531, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 543, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, 534, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 127, -1, -1, -1, -1, -1, -1, -1, -1, 537, -1 },\r\n\t\t\t{ -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, -1, -1, -1, 548, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 539, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 539, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, 541, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 156, -1, -1, -1, -1, -1, -1, -1, -1, 542, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 157, -1, -1, -1, -1, -1, -1, -1, -1, 544, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, 158, -1, -1, -1, -1, -1, -1, -1, -1, 545, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 547, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 547, 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, -1, -1, -1, 547, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 550, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 548, -1, -1, -1, 551, 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, -1, -1, 548, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, -1, -1, -1, -1, -1, -1, 549, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 555, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 560, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 561, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -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, 183, 183, -1, -1, -1, 562, -1, -1, -1, -1, -1, -1, -1, -1, 183, -1, -1, 183, 183, -1, -1, 183, -1, 183, 183, -1, -1, -1, -1, -1, 183, 560, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 183, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, -1, -1, 183, 183, -1, -1, 183, -1, 183, 183, -1, -1, -1, -1, -1, 183, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 564, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 566, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, -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, 565, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 567, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 569, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 570, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ 1, 186, 186, 187, 186, 188, 188, 188, 188, 188, 188, 186, 188, 188, 188, 188, 188, 188, 186, 188, 189, 186, 186, 186, 186, 186, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 190, 190, 188, 186, 186, 275, 186, 186, 186, 186, 186, 186, 191, 188, 190, 186, 192, 276, 190, 186, 186, 190, 186, 190, 190, 277, 278, 312, 186, 1, 190, 186, 312 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 574, 574, 574, 574, 574, 574, -1, 574, 574, 574, 574, 574, 574, -1, 574, -1, -1, -1, -1, -1, -1, 574, 574, 574, 574, 574, 574, 574, 574, 574, -1, 574, 574, 574, 574, 574, -1, -1, 574, -1, -1, -1, -1, -1, -1, -1, 574, 574, -1, -1, 574, 574, -1, -1, 574, -1, 574, 574, -1, -1, -1, -1, -1, 574, 574, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 574, 574, 574, 574, 574, 574, -1, 574, 574, 574, 574, 574, 574, -1, 574, -1, -1, -1, -1, -1, -1, 574, 574, 574, 574, 574, 574, 574, 574, 574, -1, 574, 574, 574, 574, 574, -1, -1, 574, -1, -1, -1, -1, -1, -1, -1, 574, 574, -1, -1, 574, 574, -1, -1, 574, -1, 574, 574, -1, -1, 280, -1, -1, 574, 574, -1 },\r\n\t\t\t{ 1, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 207, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 576, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 1, 206, 206, 206 },\r\n\t\t\t{ -1, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, -1, 206, 206, 206 },\r\n\t\t\t{ 1, 208, 208, 209, 208, 210, 210, 210, 210, 210, 210, 208, 210, 210, 210, 210, 210, 210, 208, 210, 211, 208, 208, 208, 208, 208, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 212, 212, 210, 208, 208, 284, 208, 208, 208, 208, 208, 208, 213, 210, 212, 208, 214, 285, 212, 208, 208, 212, 208, 212, 212, 286, 287, 314, 208, 1, 212, 208, 314 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 580, 580, 580, 580, 580, 580, -1, 580, 580, 580, 580, 580, 580, -1, 580, -1, -1, -1, -1, -1, -1, 580, 580, 580, 580, 580, 580, 580, 580, 580, -1, 580, 580, 580, 580, 580, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, 580, 580, -1, -1, 580, 580, -1, -1, 580, -1, 580, 580, -1, -1, -1, -1, -1, 580, 580, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 580, 580, 580, 580, 580, 580, -1, 580, 580, 580, 580, 580, 580, -1, 580, -1, -1, -1, -1, -1, -1, 580, 580, 580, 580, 580, 580, 580, 580, 580, -1, 580, 580, 580, 580, 580, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, 580, 580, -1, -1, 580, 580, -1, -1, 580, -1, 580, 580, -1, -1, 289, -1, -1, 580, 580, -1 },\r\n\t\t\t{ 1, 228, 228, 229, 228, 230, 230, 230, 230, 230, 230, 228, 230, 230, 230, 230, 230, 230, 228, 230, 229, 294, 228, 228, 228, 228, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 230, 228, 228, 293, 228, 228, 228, 228, 228, 228, 232, 230, 231, 228, 233, 295, 231, 228, 228, 231, 228, 231, 231, 296, 297, 316, 228, 262, 231, 228, 316 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 583, 583, 583, 583, 583, 583, 246, 583, 583, 583, 583, 583, 583, -1, 583, -1, -1, -1, -1, 303, -1, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 583, 583, -1, -1, 583, 583, -1, -1, 583, -1, 583, 583, -1, -1, -1, 585, -1, 583, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 586, 586, 586, 586, 586, 586, -1, 586, 586, 586, 586, 586, 586, -1, 586, -1, -1, -1, -1, -1, -1, 586, 586, 586, 586, 586, 586, 586, 586, 586, -1, 586, 586, 586, 586, 586, -1, -1, 586, -1, -1, -1, -1, -1, -1, -1, 586, 586, -1, -1, 586, 586, -1, -1, 586, -1, 586, 586, -1, -1, -1, -1, -1, 586, 586, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 246, -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 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 586, 586, 586, 586, 586, 586, -1, 586, 586, 586, 586, 586, 586, -1, 586, -1, -1, -1, -1, -1, -1, 586, 586, 586, 586, 586, 586, 586, 586, 586, -1, 586, 586, 586, 586, 586, -1, -1, 586, -1, -1, -1, -1, -1, -1, -1, 586, 586, -1, -1, 586, 586, -1, -1, 586, -1, 586, 586, -1, -1, 299, -1, -1, 586, 586, -1 },\r\n\t\t\t{ 1, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 262, 297, 297, 297 },\r\n\t\t\t{ 1, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 247, 248, 248, 248, 248, 248, 248, 247, 248, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 247, 247, 248, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 1, 247, 247, 247 },\r\n\t\t\t{ 1, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 249, 250, 250, 250, 250, 250, 250, 249, 250, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 249, 249, 250, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 250, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 1, 249, 249, 249 },\r\n\t\t\t{ 1, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 1, 251, 251, 251 },\r\n\t\t\t{ 1, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 1, 254, 254, 254 },\r\n\t\t\t{ 1, 257, 258, 258, 257, 258, 258, 258, 258, 258, 258, 259, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 304, 258, 305, 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, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 1, 258, 258, 258 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 898, 898, 898, 265, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 331, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 793, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, -1, 281, -1, -1, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, 281, 281, -1, -1, -1, 281, -1, -1, -1, -1, -1, 281, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 281, -1, -1, 281, 281, -1, -1, 281, -1, 281, 281, -1, -1, -1, -1, -1, 281, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 282, 282, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 282, 282, -1, -1, -1, -1, 282, 282, -1, -1, -1, -1, -1, 282, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 290, -1, -1, -1, -1, -1, -1, 290, -1, -1, -1, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, 290, 290, -1, -1, -1, 290, -1, -1, -1, -1, -1, 290, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 290, -1, -1, 290, 290, -1, -1, 290, -1, 290, 290, -1, -1, -1, -1, -1, 290, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 291, 291, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 291, 291, -1, -1, -1, -1, 291, 291, -1, -1, -1, -1, -1, 291, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 300, -1, -1, -1, -1, -1, -1, 300, -1, -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, 300, -1, -1, -1, 300, -1, -1, -1, -1, -1, 300, 300, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, -1, -1, 300, 300, -1, -1, 300, -1, 300, 300, -1, -1, -1, -1, -1, 300, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301, 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301, 301, -1, -1, -1, -1, 301, 301, -1, -1, -1, -1, -1, 301, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, 606, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 458, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, 462, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -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, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, -1, 474, 474, 474, 474, 474, 474, -1, 474, -1, -1, -1, -1, -1, -1, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, -1, -1, 474, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 539, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 534, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 546, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 554, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 559, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 639, 876, 876, 640, 337, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 506, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 340, 876, 876, 876, 876, 876, -1, 876, 876, 829, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 343, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 790, 876, 876, -1, 876, 649, 876, 876, 828, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 349, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 352, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 355, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 797, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 833, 876, 876, 876, -1, 876, 655, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 656, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 358, 876, 876, 876, 876, 657, -1, 795, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 658, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 794, 876, 876, 876, 876, 659, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 798, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 660, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 661, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 662, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 865, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 663, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 850, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 363, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 832, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 365, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 667, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 367, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 369, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 371, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 669, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 373, 876, 851, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 375, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 890, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 671, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 673, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 675, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 377, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 678, 679, 876, 876, 876, 680, -1, 681, 834, 800, 682, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 683, 684, 876, 876, 835, 876, 876, 876, 876, 876, 685, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 687, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 379, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 381, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 383, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 385, 876, 876, 876, 876, 886, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 690, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 387, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 802, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 694, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 391, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 866, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 836, -1, 876, 876, 876, 876, 876, 695, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 393, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 395, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 397, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 698, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 399, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 699, 876, 876, 401, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 855, 700, 876, 876, 701, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 403, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 803, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 405, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 407, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 704, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 409, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 411, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 413, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 867, 876, 876, 876, 876, 415, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 808, 707, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 806, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 841, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 805, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 839, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 417, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 838, 876, 876, -1, 876, 876, 876, 876, 876, 891, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 709, 876, 876, -1, 876, 876, 876, 876, 857, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 840, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 419, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 421, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 423, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 711, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 425, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 874, 876, 876, 876, 858, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 714, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 715, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 427, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 429, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 431, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 810, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 433, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 719, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 437, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 812, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 720, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 439, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 843, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 723, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 441, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 443, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 729, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 815, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 846, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 862, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 732, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 445, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 447, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 736, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 449, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 814, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 451, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 845, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 453, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 455, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 457, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 461, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 463, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 844, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 741, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 742, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 817, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 860, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 465, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 746, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 467, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 469, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 471, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 749, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 750, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 473, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 755, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 475, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 477, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 758, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 479, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 481, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 822, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 483, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 761, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 485, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 763, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 487, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 489, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 764, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 491, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 493, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 495, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 765, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 497, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 499, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 768, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 824, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 770, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 771, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 772, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 501, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 503, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 505, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 507, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 773, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 509, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 511, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 513, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 515, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 776, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 778, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 517, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 779, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 519, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 521, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 523, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 781, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 525, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 527, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 898, 898, 593, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 629, 630, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 631, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 595, -1, -1, -1, -1, -1, -1, 595, -1, -1, -1, 595, -1, -1, -1, -1, -1, -1, -1, -1, -1, 595, 595, -1, -1, -1, 595, -1, -1, -1, -1, -1, 595, 595, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 595, -1, -1, 595, 595, -1, -1, 595, -1, 595, 595, -1, -1, -1, -1, -1, 595, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 597, -1, -1, -1, -1, -1, -1, 597, -1, -1, -1, 597, -1, -1, -1, -1, -1, -1, -1, -1, -1, 597, 597, -1, -1, -1, 597, -1, -1, -1, -1, -1, 597, 597, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 597, -1, -1, 597, 597, -1, -1, 597, -1, 597, 597, -1, -1, -1, -1, -1, 597, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 599, -1, -1, -1, -1, -1, -1, 599, -1, -1, -1, 599, -1, -1, -1, -1, -1, -1, -1, -1, -1, 599, 599, -1, -1, -1, 599, -1, -1, -1, -1, -1, 599, 599, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 599, -1, -1, 599, 599, -1, -1, 599, -1, 599, 599, -1, -1, -1, -1, -1, 599, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 602, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 676, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 672, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 872, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 670, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 665, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 853, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 854, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 677, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 688, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 801, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 703, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 708, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 713, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 809, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 722, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 869, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 726, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 813, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 728, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 725, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 870, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 816, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 738, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 739, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 892, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 752, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 743, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 753, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 820, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 760, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 767, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 769, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 766, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 893, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 774, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 775, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 777, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 632, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 686, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 674, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 668, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 666, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 692, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 697, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 689, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 807, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 710, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 718, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 717, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 730, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 727, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 731, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 887, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 744, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 740, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 756, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 754, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 745, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 823, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 780, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 635, 876, 876, 876, -1, 876, 636, 876, 876, 637, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 696, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 702, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 691, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 856, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 712, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 811, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 734, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 842, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 735, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 748, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 759, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 757, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 747, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 638, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 706, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 837, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 716, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 724, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 733, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 737, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 751, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 641, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 642, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 804, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 721, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 859, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 643, 876, 876, 876, 876, -1, 644, 876, 645, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 646, 876, 876, 876, 876, 876, 876, 876, 647, 876, 876, 792, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 651, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 789, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 653, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 827, 876, 876, 876, -1, 876, 654, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 898, 782, 898, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 784, -1, -1, -1, -1, -1, -1, 784, -1, -1, -1, 784, -1, -1, -1, -1, -1, -1, -1, -1, -1, 784, 784, -1, -1, -1, 784, -1, -1, -1, -1, -1, 784, 784, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 784, -1, -1, 784, 784, -1, -1, 784, -1, 784, 784, -1, -1, -1, -1, -1, 784, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 785, -1, -1, -1, -1, -1, -1, 785, -1, -1, -1, 785, -1, -1, -1, -1, -1, -1, -1, -1, -1, 785, 785, -1, -1, -1, 785, -1, -1, -1, -1, -1, 785, 785, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 785, -1, -1, 785, 785, -1, -1, 785, -1, 785, 785, -1, -1, -1, -1, -1, 785, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 786, -1, -1, -1, -1, -1, -1, 786, -1, -1, -1, 786, -1, -1, -1, -1, -1, -1, -1, -1, -1, 786, 786, -1, -1, -1, 786, -1, -1, -1, -1, -1, 786, 786, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 786, -1, -1, 786, 786, -1, -1, 786, -1, 786, 786, -1, -1, -1, -1, -1, 786, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, -1, -1, -1, 787, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 868, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 861, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 818, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 825, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 873, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 888, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 847, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, 876, 876, 876, 876, 876, 876, -1, 876, 876, 876, 876, 876, 876, -1, 876, -1, -1, -1, -1, -1, -1, 876, 876, 876, 848, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, 876, -1, -1, 876, 876, -1, -1, 876, -1, 876, 876, -1, -1, -1, -1, -1, 876, -1, -1 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 881, 898, 898, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 882, -1, -1, -1, -1, -1, -1, 882, -1, -1, -1, 882, -1, -1, -1, -1, -1, -1, -1, -1, -1, 882, 882, -1, -1, -1, 882, -1, -1, -1, -1, -1, 882, 882, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 882, -1, -1, 882, 882, -1, -1, 882, -1, 882, 882, -1, -1, -1, -1, -1, 882, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 883, -1, -1, -1, -1, -1, -1, 883, -1, -1, -1, 883, -1, -1, -1, -1, -1, -1, -1, -1, -1, 883, 883, -1, -1, -1, 883, -1, -1, -1, -1, -1, 883, 883, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 883, -1, -1, 883, 883, -1, -1, 883, -1, 883, 883, -1, -1, -1, -1, -1, 883, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 884, -1, -1, -1, -1, -1, -1, 884, -1, -1, -1, 884, -1, -1, -1, -1, -1, -1, -1, -1, -1, 884, 884, -1, -1, -1, 884, -1, -1, -1, -1, -1, 884, 884, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 884, -1, -1, 884, 884, -1, -1, 884, -1, 884, 884, -1, -1, -1, -1, -1, 884, -1, -1 },\r\n\t\t\t{ -1, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, -1, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, -1, 898, -1, 898 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 895, -1, -1, -1, -1, -1, -1, 895, -1, -1, -1, 895, -1, -1, -1, -1, -1, -1, -1, -1, -1, 895, 895, -1, -1, -1, 895, -1, -1, -1, -1, -1, 895, 895, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 895, -1, -1, 895, 895, -1, -1, 895, -1, 895, 895, -1, -1, -1, -1, -1, 895, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 896, -1, -1, -1, -1, -1, -1, 896, -1, -1, -1, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, 896, 896, -1, -1, -1, 896, -1, -1, -1, -1, -1, 896, 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 896, -1, -1, 896, 896, -1, -1, 896, -1, 896, 896, -1, -1, -1, -1, -1, 896, -1, -1 },\r\n\t\t\t{ -1, -1, -1, -1, -1, -1, 897, -1, -1, -1, -1, -1, -1, 897, -1, -1, -1, 897, -1, -1, -1, -1, -1, -1, -1, -1, -1, 897, 897, -1, -1, -1, 897, -1, -1, -1, -1, -1, 897, 897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 897, -1, -1, 897, 897, -1, -1, 897, -1, 897, 897, -1, -1, -1, -1, -1, 897, -1, -1 }\r\n\t\t};\r\n\t\t\r\n\t\t\r\n\t\tprivate static int[] yy_state_dtrans = new int[]\r\n\t\t{\r\n\t\t\t  0,\r\n\t\t\t  370,\r\n\t\t\t  571,\r\n\t\t\t  575,\r\n\t\t\t  577,\r\n\t\t\t  581,\r\n\t\t\t  587,\r\n\t\t\t  588,\r\n\t\t\t  589,\r\n\t\t\t  590,\r\n\t\t\t  591,\r\n\t\t\t  592\r\n\t\t};\r\n\t\t\r\n\t\t#endregion\r\n\t\t\r\n\t\tpublic Tokens GetNextToken()\r\n\t\t{\r\n\t\t\tint current_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\tint last_accept_state = NoState;\r\n\t\t\tbool is_initial_state = true;\r\n\t\t\t\r\n\t\t\tMarkTokenChunkStart();\r\n\t\t\ttoken_start = token_chunk_start;\r\n\t\t\texpanding_token = false;\r\n\t\t\tAdvanceEndPosition((token_end > 0) ? token_end - 1 : 0, token_start);\r\n\t\t\t\r\n\t\t\t// capture token start position:\r\n\t\t\ttoken_start_pos.Char = token_end_pos.Char;\r\n\t\t\t\r\n\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t{\r\n\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\tMarkTokenEnd();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tchar lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance();\r\n\t\t\t\tint next_state = nextState[rowMap[current_state], colMap[lookahead]];\r\n\t\t\t\t\r\n\t\t\t\tif (lookahead == EOF && is_initial_state)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Tokens.EOF;\r\n\t\t\t\t}\r\n\t\t\t\tif (next_state != -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent_state = next_state;\r\n\t\t\t\t\tis_initial_state = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (last_accept_state == NoState)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Tokens.ERROR;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0)\r\n\t\t\t\t\t\t\tTrimTokenEnd();\r\n\t\t\t\t\t\tMoveToTokenEnd();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (last_accept_state < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSystem.Diagnostics.Debug.Assert(last_accept_state >= 902);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbool accepted = false;\r\n\t\t\t\t\t\t\tyyreturn = Accept0(last_accept_state, out accepted);\r\n\t\t\t\t\t\t\tif (accepted)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tAdvanceEndPosition(token_start, token_end - 1);\r\n\t\t\t\t\t\t\t\treturn yyreturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// token ignored:\r\n\t\t\t\t\t\tis_initial_state = true;\r\n\t\t\t\t\t\tcurrent_state = yy_state_dtrans[(int)current_lexical_state];\r\n\t\t\t\t\t\tlast_accept_state = NoState;\r\n\t\t\t\t\t\tMarkTokenChunkStart();\r\n\t\t\t\t\t\tif (acceptCondition[current_state] != AcceptConditions.NotAccept)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlast_accept_state = current_state;\r\n\t\t\t\t\t\t\tMarkTokenEnd();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} // end of GetNextToken\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Core.Parsers/Generated/Parser.cs",
    "content": "// This code was generated by the Gardens Point Parser Generator\r\n// Copyright (c) Wayne Kelly, QUT 2005\r\n// Copyright (c) DEVSENSE, 2012\r\n\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\n\r\n/*\r\n\r\nCopyright (c) 2006 Tomas Matousek.\r\nCopyright (c) 2003-2005 Vaclav Novak (previous MC++ version for Flex/Bison)\r\n\r\nParser was generated using The Gardens Point Parser Generator (GPPG) using PHP language grammar based on Flex and Bison files\r\ndistributed with PHP5 and PHP6 interpreter.\r\n\r\n*/\r\n\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers.GPPG;\r\nusing FcnParam = System.Tuple<System.Collections.Generic.List<PHP.Core.AST.TypeRef>, System.Collections.Generic.List<PHP.Core.AST.ActualParam>, System.Collections.Generic.List<PHP.Core.AST.Expression>>;\r\n\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\npublic enum Toks {ERROR=127,EOF=128,T_INCLUDE=129,T_INCLUDE_ONCE=130,T_EVAL=131,T_REQUIRE=132,T_REQUIRE_ONCE=133,T_LOGICAL_OR=134,T_LOGICAL_XOR=135,T_LOGICAL_AND=136,T_PRINT=137,T_YIELD=138,T_PLUS_EQUAL=139,T_MINUS_EQUAL=140,T_MUL_EQUAL=141,T_DIV_EQUAL=142,T_CONCAT_EQUAL=143,T_MOD_EQUAL=144,T_AND_EQUAL=145,T_OR_EQUAL=146,T_XOR_EQUAL=147,T_SL_EQUAL=148,T_SR_EQUAL=149,T_POW_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,TypeCast=163,T_POW=164,T_NEW=165,T_INSTANCEOF=166,T_TYPEOF=167,T_CLONE=168,T_LNUMBER=169,T_L64NUMBER=170,T_DNUMBER=171,T_STRING=172,T_STRING_VARNAME=173,T_VARIABLE=174,T_NUM_STRING=175,T_INLINE_HTML=176,T_CHARACTER=177,T_BAD_CHARACTER=178,T_ENCAPSED_AND_WHITESPACE=179,T_CONSTANT_ENCAPSED_STRING=180,T_EXIT=181,T_IF=182,T_ELSEIF=183,T_ELSE=184,T_ENDIF=185,T_ECHO=186,T_DO=187,T_WHILE=188,T_ENDWHILE=189,T_FOR=190,T_ENDFOR=191,T_FOREACH=192,T_ENDFOREACH=193,T_DECLARE=194,T_ENDDECLARE=195,T_AS=196,T_SWITCH=197,T_ENDSWITCH=198,T_CASE=199,T_DEFAULT=200,T_BREAK=201,T_CONTINUE=202,T_FUNCTION=203,T_CONST=204,T_RETURN=205,T_GLOBAL=206,T_STATIC=207,T_VAR=208,T_UNSET=209,T_ISSET=210,T_EMPTY=211,T_CLASS=212,T_TRAIT=213,T_INSTEADOF=214,T_EXTENDS=215,T_OBJECT_OPERATOR=216,T_DOUBLE_ARROW=217,T_LIST=218,T_ARRAY=219,T_CALLABLE=220,T_CLASS_C=221,T_TRAIT_C=222,T_METHOD_C=223,T_FUNC_C=224,T_LINE=225,T_FILE=226,T_DIR=227,T_COMMENT=228,T_DOC_COMMENT=229,T_PRAGMA_LINE=230,T_PRAGMA_FILE=231,T_PRAGMA_DEFAULT_LINE=232,T_PRAGMA_DEFAULT_FILE=233,T_OPEN_TAG=234,T_OPEN_TAG_WITH_ECHO=235,T_CLOSE_TAG=236,T_WHITESPACE=237,T_START_HEREDOC=238,T_END_HEREDOC=239,T_DOLLAR_OPEN_CURLY_BRACES=240,T_CURLY_OPEN=241,T_DOUBLE_COLON=242,T_MINUS_EQUA=243,T_GOTO=244,T_TRY=245,T_CATCH=246,T_FINALLY=247,T_THROW=248,T_INTERFACE=249,T_IMPLEMENTS=250,T_ABSTRACT=251,T_FINAL=252,T_PRIVATE=253,T_PROTECTED=254,T_PUBLIC=255,T_NAMESPACE=256,T_NAMESPACE_C=257,T_NS_SEPARATOR=258,T_USE=259,T_ELLIPSIS=260,T_BINARY_DOUBLE=261,T_BINARY_HEREDOC=262,T_PARENT=263,T_SELF=264,T_TRUE=265,T_FALSE=266,T_NULL=267,T_GET=268,T_SET=269,T_CALL=270,T_CALLSTATIC=271,T_TOSTRING=272,T_CONSTRUCT=273,T_DESTRUCT=274,T_WAKEUP=275,T_SLEEP=276,T_AUTOLOAD=277,T_PARTIAL=278,T_LGENERIC=279,T_RGENERIC=280,T_IMPORT=281,T_BOOL_TYPE=282,T_INT_TYPE=283,T_INT64_TYPE=284,T_DOUBLE_TYPE=285,T_STRING_TYPE=286,T_RESOURCE_TYPE=287,T_OBJECT_TYPE=288,T_BOOL_CAST=289,T_INT8_CAST=290,T_INT16_CAST=291,T_INT32_CAST=292,T_INT64_CAST=293,T_UINT8_CAST=294,T_UINT16_CAST=295,T_UINT32_CAST=296,T_UINT64_CAST=297,T_DOUBLE_CAST=298,T_FLOAT_CAST=299,T_DECIMAL_CAST=300,T_STRING_CAST=301,T_BINARY_CAST=302,T_UNICODE_CAST=303,T_ARRAY_CAST=304,T_OBJECT_CAST=305,T_UNSET_CAST=306};\r\n\r\npublic partial struct SemanticValueType\r\n{\r\n\t// Integer and Offset are both used when generating code for string \r\n\t// with 'inline' variables. Other fields are not combined.\r\n\t\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\t\t\r\n\tpublic int Integer;\r\n\t[System.Runtime.InteropServices.FieldOffset(4)]\r\n\tpublic int Offset;\r\n\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\r\n\tpublic double Double;\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\r\n\tpublic long Long;\r\n\r\n\t[System.Runtime.InteropServices.FieldOffset(8)]\r\n\tpublic object Object; \r\n}\r\npublic  partial class Parser: ShiftReduceParser<SemanticValueType,Text.Span>\r\n{\r\n\r\n  protected override string[] NonTerminals { get { return nonTerminals; } }\r\n  private static string[] nonTerminals;\r\n\r\n  protected override State[] States { get { return states; } }\r\n  private static readonly State[] states;\r\n\r\n  protected override Rule[] Rules { get { return rules; } }\r\n  private static readonly Rule[] rules;\r\n\r\n\r\n  #region Construction\r\n\r\n  static Parser()\r\n  {\r\n\r\n    #region states\r\n    states = new State[]\r\n    {\r\n      new State(0, new int[] {281,1005,59,-18,172,-18,123,-18,182,-18,188,-18,187,-18,190,-18,197,-18,201,-18,202,-18,205,-18,138,-18,206,-18,207,-18,186,-18,176,-18,174,-18,36,-18,258,-18,256,-18,40,-18,165,-18,168,-18,161,-18,162,-18,43,-18,45,-18,33,-18,126,-18,289,-18,290,-18,291,-18,292,-18,293,-18,294,-18,295,-18,296,-18,297,-18,298,-18,299,-18,300,-18,301,-18,302,-18,303,-18,304,-18,305,-18,306,-18,137,-18,64,-18,167,-18,219,-18,91,-18,218,-18,210,-18,211,-18,131,-18,181,-18,169,-18,170,-18,171,-18,180,-18,225,-18,226,-18,227,-18,221,-18,222,-18,223,-18,224,-18,257,-18,173,-18,34,-18,261,-18,238,-18,262,-18,96,-18,129,-18,130,-18,132,-18,133,-18,203,-18,209,-18,192,-18,245,-18,248,-18,244,-18,194,-18,259,-18,204,-18,253,-18,251,-18,252,-18,278,-18,249,-18,212,-18,213,-18,128,-18}, new int[] {-5,1,-8,3,-14,1002,-13,1009}),\r\n      new State(1, new int[] {128,2}),\r\n      new State(2, -1),\r\n      new State(3, new int[] {59,6,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,952,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,259,960,128,-2,204,-92,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-7,4,-16,5,-6,7,-17,8,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-12,997,-26,998,-21,999,-22,617,-46,628,-45,633,-25,1000,-44,980,-29,1001}),\r\n      new State(4, -17),\r\n      new State(5, -19),\r\n      new State(6, -111),\r\n      new State(7, -20),\r\n      new State(8, -21),\r\n      new State(9, new int[] {58,10,258,-412,279,-412,40,-412,242,-412,59,-412,151,-412,152,-412,134,-412,136,-412,135,-412,124,-412,38,-412,94,-412,46,-412,43,-412,45,-412,42,-412,164,-412,47,-412,37,-412,159,-412,160,-412,155,-412,156,-412,153,-412,154,-412,60,-412,157,-412,62,-412,158,-412,166,-412,63,-412}),\r\n      new State(10, -115),\r\n      new State(11, -6),\r\n      new State(12, -107, new int[] {-30,13}),\r\n      new State(13, new int[] {125,14,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(14, -116),\r\n      new State(15, -106),\r\n      new State(16, -108),\r\n      new State(17, -113),\r\n      new State(18, new int[] {40,37}, new int[] {-33,19}),\r\n      new State(19, new int[] {58,938,172,-117,123,-117,182,-117,188,-117,187,-117,190,-117,197,-117,201,-117,202,-117,205,-117,138,-117,206,-117,207,-117,186,-117,176,-117,174,-117,36,-117,258,-117,256,-117,40,-117,165,-117,168,-117,161,-117,162,-117,43,-117,45,-117,33,-117,126,-117,289,-117,290,-117,291,-117,292,-117,293,-117,294,-117,295,-117,296,-117,297,-117,298,-117,299,-117,300,-117,301,-117,302,-117,303,-117,304,-117,305,-117,306,-117,137,-117,64,-117,167,-117,219,-117,91,-117,218,-117,210,-117,211,-117,131,-117,181,-117,169,-117,170,-117,171,-117,180,-117,225,-117,226,-117,227,-117,221,-117,222,-117,223,-117,224,-117,257,-117,173,-117,34,-117,261,-117,238,-117,262,-117,96,-117,129,-117,130,-117,132,-117,133,-117,203,-117,209,-117,192,-117,245,-117,248,-117,244,-117,194,-117,59,-117}, new int[] {-180,20}),\r\n      new State(20, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6}, new int[] {-15,21,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(21, -181, new int[] {-67,22}),\r\n      new State(22, new int[] {183,24,184,936,59,-185,172,-185,123,-185,182,-185,188,-185,187,-185,190,-185,197,-185,201,-185,202,-185,205,-185,138,-185,206,-185,207,-185,186,-185,176,-185,174,-185,36,-185,258,-185,256,-185,40,-185,165,-185,168,-185,161,-185,162,-185,43,-185,45,-185,33,-185,126,-185,289,-185,290,-185,291,-185,292,-185,293,-185,294,-185,295,-185,296,-185,297,-185,298,-185,299,-185,300,-185,301,-185,302,-185,303,-185,304,-185,305,-185,306,-185,137,-185,64,-185,167,-185,219,-185,91,-185,218,-185,210,-185,211,-185,131,-185,181,-185,169,-185,170,-185,171,-185,180,-185,225,-185,226,-185,227,-185,221,-185,222,-185,223,-185,224,-185,257,-185,173,-185,34,-185,261,-185,238,-185,262,-185,96,-185,129,-185,130,-185,132,-185,133,-185,203,-185,209,-185,192,-185,245,-185,248,-185,244,-185,194,-185,259,-185,204,-185,253,-185,251,-185,252,-185,278,-185,249,-185,212,-185,213,-185,128,-185,125,-185,199,-185,200,-185,198,-185,195,-185,193,-185,191,-185,189,-185,185,-185}, new int[] {-69,23}),\r\n      new State(23, -118),\r\n      new State(24, new int[] {40,37}, new int[] {-33,25}),\r\n      new State(25, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6}, new int[] {-15,26,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(26, -182),\r\n      new State(27, new int[] {40,37}, new int[] {-33,28}),\r\n      new State(28, -121, new int[] {-182,29}),\r\n      new State(29, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,932}, new int[] {-66,30,-15,31,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(30, -122),\r\n      new State(31, -179),\r\n      new State(32, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6}, new int[] {-15,33,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(33, new int[] {188,34}),\r\n      new State(34, new int[] {40,37}, new int[] {-33,35}),\r\n      new State(35, new int[] {59,36}),\r\n      new State(36, -123),\r\n      new State(37, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,38,-35,208,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(38, new int[] {41,39,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(39, -279),\r\n      new State(40, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,41,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(41, new int[] {151,-310,152,42,134,-310,136,-310,135,-310,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-310,59,-310,41,-310,93,-310,58,-310,44,-310,125,-310,217,-310,196,-310}),\r\n      new State(42, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,43,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(43, new int[] {151,-311,152,-311,134,-311,136,-311,135,-311,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-311,59,-311,41,-311,93,-311,58,-311,44,-311,125,-311,217,-311,196,-311}),\r\n      new State(44, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,45,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(45, new int[] {151,40,152,42,134,-312,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-312,41,-312,93,-312,58,-312,44,-312,125,-312,217,-312,196,-312}),\r\n      new State(46, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,47,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(47, new int[] {151,40,152,42,134,-313,136,-313,135,-313,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-313,41,-313,93,-313,58,-313,44,-313,125,-313,217,-313,196,-313}),\r\n      new State(48, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,49,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(49, new int[] {151,40,152,42,134,-314,136,46,135,-314,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-314,41,-314,93,-314,58,-314,44,-314,125,-314,217,-314,196,-314}),\r\n      new State(50, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,51,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(51, new int[] {151,-315,152,-315,134,-315,136,-315,135,-315,124,-315,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-315,59,-315,41,-315,93,-315,58,-315,44,-315,125,-315,217,-315,196,-315}),\r\n      new State(52, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,53,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(53, new int[] {151,-316,152,-316,134,-316,136,-316,135,-316,124,-316,38,-316,94,-316,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-316,59,-316,41,-316,93,-316,58,-316,44,-316,125,-316,217,-316,196,-316}),\r\n      new State(54, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,55,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(55, new int[] {151,-317,152,-317,134,-317,136,-317,135,-317,124,-317,38,52,94,-317,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-317,59,-317,41,-317,93,-317,58,-317,44,-317,125,-317,217,-317,196,-317}),\r\n      new State(56, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,57,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(57, new int[] {151,-373,152,-373,134,-373,136,-373,135,-373,124,-373,38,-373,94,-373,46,-373,43,-373,45,-373,42,62,164,64,47,66,37,68,159,-373,160,-373,155,-373,156,-373,153,-373,154,-373,60,-373,157,-373,62,-373,158,-373,166,90,63,-373,59,-373,41,-373,93,-373,58,-373,44,-373,125,-373,217,-373,196,-373}),\r\n      new State(58, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,59,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(59, new int[] {151,-319,152,-319,134,-319,136,-319,135,-319,124,-319,38,-319,94,-319,46,-319,43,-319,45,-319,42,62,164,64,47,66,37,68,159,-319,160,-319,155,-319,156,-319,153,-319,154,-319,60,-319,157,-319,62,-319,158,-319,166,90,63,-319,59,-319,41,-319,93,-319,58,-319,44,-319,125,-319,217,-319,196,-319}),\r\n      new State(60, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,61,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(61, new int[] {151,-320,152,-320,134,-320,136,-320,135,-320,124,-320,38,-320,94,-320,46,-320,43,-320,45,-320,42,62,164,64,47,66,37,68,159,-320,160,-320,155,-320,156,-320,153,-320,154,-320,60,-320,157,-320,62,-320,158,-320,166,90,63,-320,59,-320,41,-320,93,-320,58,-320,44,-320,125,-320,217,-320,196,-320}),\r\n      new State(62, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,63,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(63, new int[] {151,-321,152,-321,134,-321,136,-321,135,-321,124,-321,38,-321,94,-321,46,-321,43,-321,45,-321,42,-321,164,64,47,-321,37,-321,159,-321,160,-321,155,-321,156,-321,153,-321,154,-321,60,-321,157,-321,62,-321,158,-321,166,90,63,-321,59,-321,41,-321,93,-321,58,-321,44,-321,125,-321,217,-321,196,-321}),\r\n      new State(64, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,65,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(65, new int[] {151,-322,152,-322,134,-322,136,-322,135,-322,124,-322,38,-322,94,-322,46,-322,43,-322,45,-322,42,-322,164,64,47,-322,37,-322,159,-322,160,-322,155,-322,156,-322,153,-322,154,-322,60,-322,157,-322,62,-322,158,-322,166,90,63,-322,59,-322,41,-322,93,-322,58,-322,44,-322,125,-322,217,-322,196,-322}),\r\n      new State(66, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,67,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(67, new int[] {151,-323,152,-323,134,-323,136,-323,135,-323,124,-323,38,-323,94,-323,46,-323,43,-323,45,-323,42,-323,164,64,47,-323,37,-323,159,-323,160,-323,155,-323,156,-323,153,-323,154,-323,60,-323,157,-323,62,-323,158,-323,166,90,63,-323,59,-323,41,-323,93,-323,58,-323,44,-323,125,-323,217,-323,196,-323}),\r\n      new State(68, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,69,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(69, new int[] {151,-324,152,-324,134,-324,136,-324,135,-324,124,-324,38,-324,94,-324,46,-324,43,-324,45,-324,42,-324,164,64,47,-324,37,-324,159,-324,160,-324,155,-324,156,-324,153,-324,154,-324,60,-324,157,-324,62,-324,158,-324,166,90,63,-324,59,-324,41,-324,93,-324,58,-324,44,-324,125,-324,217,-324,196,-324}),\r\n      new State(70, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,71,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(71, new int[] {151,-325,152,-325,134,-325,136,-325,135,-325,124,-325,38,-325,94,-325,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,-325,160,-325,155,-325,156,-325,153,-325,154,-325,60,-325,157,-325,62,-325,158,-325,166,90,63,-325,59,-325,41,-325,93,-325,58,-325,44,-325,125,-325,217,-325,196,-325}),\r\n      new State(72, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,73,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(73, new int[] {151,-326,152,-326,134,-326,136,-326,135,-326,124,-326,38,-326,94,-326,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,-326,160,-326,155,-326,156,-326,153,-326,154,-326,60,-326,157,-326,62,-326,158,-326,166,90,63,-326,59,-326,41,-326,93,-326,58,-326,44,-326,125,-326,217,-326,196,-326}),\r\n      new State(74, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,75,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(75, new int[] {151,-327,152,-327,134,-327,136,-327,135,-327,124,-327,38,-327,94,-327,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-327,59,-327,41,-327,93,-327,58,-327,44,-327,125,-327,217,-327,196,-327}),\r\n      new State(76, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,77,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(77, new int[] {151,-328,152,-328,134,-328,136,-328,135,-328,124,-328,38,-328,94,-328,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-328,59,-328,41,-328,93,-328,58,-328,44,-328,125,-328,217,-328,196,-328}),\r\n      new State(78, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,79,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(79, new int[] {151,-329,152,-329,134,-329,136,-329,135,-329,124,-329,38,-329,94,-329,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-329,59,-329,41,-329,93,-329,58,-329,44,-329,125,-329,217,-329,196,-329}),\r\n      new State(80, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,81,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(81, new int[] {151,-330,152,-330,134,-330,136,-330,135,-330,124,-330,38,-330,94,-330,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-330,59,-330,41,-330,93,-330,58,-330,44,-330,125,-330,217,-330,196,-330}),\r\n      new State(82, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,83,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(83, new int[] {151,-331,152,-331,134,-331,136,-331,135,-331,124,-331,38,-331,94,-331,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,-331,156,-331,153,-331,154,-331,60,82,157,84,62,86,158,88,166,90,63,-331,59,-331,41,-331,93,-331,58,-331,44,-331,125,-331,217,-331,196,-331}),\r\n      new State(84, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,85,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(85, new int[] {151,-332,152,-332,134,-332,136,-332,135,-332,124,-332,38,-332,94,-332,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,-332,156,-332,153,-332,154,-332,60,82,157,84,62,86,158,88,166,90,63,-332,59,-332,41,-332,93,-332,58,-332,44,-332,125,-332,217,-332,196,-332}),\r\n      new State(86, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,87,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(87, new int[] {151,-333,152,-333,134,-333,136,-333,135,-333,124,-333,38,-333,94,-333,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,-333,156,-333,153,-333,154,-333,60,82,157,84,62,86,158,88,166,90,63,-333,59,-333,41,-333,93,-333,58,-333,44,-333,125,-333,217,-333,196,-333}),\r\n      new State(88, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,89,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(89, new int[] {151,-334,152,-334,134,-334,136,-334,135,-334,124,-334,38,-334,94,-334,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,-334,156,-334,153,-334,154,-334,60,82,157,84,62,86,158,88,166,90,63,-334,59,-334,41,-334,93,-334,58,-334,44,-334,125,-334,217,-334,196,-334}),\r\n      new State(90, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-98,91,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(91, -335),\r\n      new State(92, new int[] {279,94,59,-87,151,-87,152,-87,134,-87,136,-87,135,-87,124,-87,38,-87,94,-87,46,-87,43,-87,45,-87,42,-87,164,-87,47,-87,37,-87,159,-87,160,-87,155,-87,156,-87,153,-87,154,-87,60,-87,157,-87,62,-87,158,-87,166,-87,63,-87,41,-87,93,-87,58,-87,44,-87,125,-87,217,-87,196,-87,242,-87,280,-87,40,-87}, new int[] {-104,93}),\r\n      new State(93, new int[] {59,-399,151,-399,152,-399,134,-399,136,-399,135,-399,124,-399,38,-399,94,-399,46,-399,43,-399,45,-399,42,-399,164,-399,47,-399,37,-399,159,-399,160,-399,155,-399,156,-399,153,-399,154,-399,60,-399,157,-399,62,-399,158,-399,166,-399,63,-399,41,-399,93,-399,58,-399,44,-399,125,-399,217,-399,196,-399,280,-399,40,-399,242,-397}),\r\n      new State(94, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-99,95,-98,931,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(95, new int[] {280,96,44,97}),\r\n      new State(96, -86),\r\n      new State(97, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-98,98,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(98, -404),\r\n      new State(99, new int[] {258,100,279,-409,40,-409,242,-409,59,-409,151,-409,152,-409,134,-409,136,-409,135,-409,124,-409,38,-409,94,-409,46,-409,43,-409,45,-409,42,-409,164,-409,47,-409,37,-409,159,-409,160,-409,155,-409,156,-409,153,-409,154,-409,60,-409,157,-409,62,-409,158,-409,166,-409,63,-409,41,-409,93,-409,58,-409,44,-409,125,-409,217,-409,196,-409,280,-409,260,-409,174,-409,123,-409,250,-409}),\r\n      new State(100, new int[] {172,11,218,103,282,104,283,105,284,106,285,107,286,108,287,109,288,110,219,111,251,112}, new int[] {-170,101,-4,102}),\r\n      new State(101, -413),\r\n      new State(102, -414),\r\n      new State(103, -415),\r\n      new State(104, -416),\r\n      new State(105, -417),\r\n      new State(106, -418),\r\n      new State(107, -419),\r\n      new State(108, -420),\r\n      new State(109, -421),\r\n      new State(110, -422),\r\n      new State(111, -423),\r\n      new State(112, -424),\r\n      new State(113, -412),\r\n      new State(114, new int[] {172,11}, new int[] {-169,115,-4,113}),\r\n      new State(115, new int[] {258,100,279,-410,40,-410,242,-410,59,-410,151,-410,152,-410,134,-410,136,-410,135,-410,124,-410,38,-410,94,-410,46,-410,43,-410,45,-410,42,-410,164,-410,47,-410,37,-410,159,-410,160,-410,155,-410,156,-410,153,-410,154,-410,60,-410,157,-410,62,-410,158,-410,166,-410,63,-410,41,-410,93,-410,58,-410,44,-410,125,-410,217,-410,196,-410,280,-410,260,-410,174,-410,123,-410,250,-410}),\r\n      new State(116, new int[] {258,117}),\r\n      new State(117, new int[] {172,11}, new int[] {-169,118,-4,113}),\r\n      new State(118, new int[] {258,100,279,-411,40,-411,242,-411,59,-411,151,-411,152,-411,134,-411,136,-411,135,-411,124,-411,38,-411,94,-411,46,-411,43,-411,45,-411,42,-411,164,-411,47,-411,37,-411,159,-411,160,-411,155,-411,156,-411,153,-411,154,-411,60,-411,157,-411,62,-411,158,-411,166,-411,63,-411,41,-411,93,-411,58,-411,44,-411,125,-411,217,-411,196,-411,280,-411,260,-411,174,-411,123,-411,250,-411}),\r\n      new State(119, new int[] {279,94,59,-87,151,-87,152,-87,134,-87,136,-87,135,-87,124,-87,38,-87,94,-87,46,-87,43,-87,45,-87,42,-87,164,-87,47,-87,37,-87,159,-87,160,-87,155,-87,156,-87,153,-87,154,-87,60,-87,157,-87,62,-87,158,-87,166,-87,63,-87,41,-87,93,-87,58,-87,44,-87,125,-87,217,-87,196,-87,280,-87,40,-87}, new int[] {-104,120}),\r\n      new State(120, -400),\r\n      new State(121, new int[] {216,122,279,-406,59,-406,151,-406,152,-406,134,-406,136,-406,135,-406,124,-406,38,-406,94,-406,46,-406,43,-406,45,-406,42,-406,164,-406,47,-406,37,-406,159,-406,160,-406,155,-406,156,-406,153,-406,154,-406,60,-406,157,-406,62,-406,158,-406,166,-406,63,-406,41,-406,93,-406,58,-406,44,-406,125,-406,217,-406,196,-406,280,-406,40,-406}),\r\n      new State(122, new int[] {172,11,123,922,174,167,36,168}, new int[] {-111,123,-108,127,-4,921,-126,925,-122,162,-123,166,-1,172}),\r\n      new State(123, -428, new int[] {-133,124}),\r\n      new State(124, new int[] {216,125,279,-405,59,-405,151,-405,152,-405,134,-405,136,-405,135,-405,124,-405,38,-405,94,-405,46,-405,43,-405,45,-405,42,-405,164,-405,47,-405,37,-405,159,-405,160,-405,155,-405,156,-405,153,-405,154,-405,60,-405,157,-405,62,-405,158,-405,166,-405,63,-405,41,-405,93,-405,58,-405,44,-405,125,-405,217,-405,196,-405,280,-405,40,-405}),\r\n      new State(125, new int[] {172,11,123,922,174,167,36,168}, new int[] {-111,126,-108,127,-4,921,-126,925,-122,162,-123,166,-1,172}),\r\n      new State(126, -427),\r\n      new State(127, new int[] {91,128,123,928,216,-500,279,-500,59,-500,151,-500,152,-500,134,-500,136,-500,135,-500,124,-500,38,-500,94,-500,46,-500,43,-500,45,-500,42,-500,164,-500,47,-500,37,-500,159,-500,160,-500,155,-500,156,-500,153,-500,154,-500,60,-500,157,-500,62,-500,158,-500,166,-500,63,-500,41,-500,93,-500,58,-500,44,-500,125,-500,217,-500,196,-500,280,-500,40,-500,61,-500,139,-500,140,-500,141,-500,150,-500,142,-500,143,-500,144,-500,145,-500,146,-500,147,-500,148,-500,149,-500,161,-500,162,-500}),\r\n      new State(128, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,93,-482}, new int[] {-92,129,-32,131,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(129, new int[] {93,130}),\r\n      new State(130, -502),\r\n      new State(131, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,93,-483}),\r\n      new State(132, new int[] {58,926,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,133,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(133, new int[] {58,134,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(134, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,135,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(135, new int[] {151,40,152,42,134,-338,136,-338,135,-338,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-338,59,-338,41,-338,93,-338,58,-338,44,-338,125,-338,217,-338,196,-338}),\r\n      new State(136, new int[] {59,-277,151,-277,152,-277,134,-277,136,-277,135,-277,124,-277,38,-277,94,-277,46,-277,43,-277,45,-277,42,-277,164,-277,47,-277,37,-277,159,-277,160,-277,155,-277,156,-277,153,-277,154,-277,60,-277,157,-277,62,-277,158,-277,166,-277,63,-277,41,-277,93,-277,58,-277,44,-277,125,-277,217,-277,196,-277,61,-476,139,-476,140,-476,141,-476,150,-476,142,-476,143,-476,144,-476,145,-476,146,-476,147,-476,148,-476,149,-476,161,-476,162,-476}),\r\n      new State(137, new int[] {216,138,59,-478,151,-478,152,-478,134,-478,136,-478,135,-478,124,-478,38,-478,94,-478,46,-478,43,-478,45,-478,42,-478,164,-478,47,-478,37,-478,159,-478,160,-478,155,-478,156,-478,153,-478,154,-478,60,-478,157,-478,62,-478,158,-478,166,-478,63,-478,61,-478,139,-478,140,-478,141,-478,150,-478,142,-478,143,-478,144,-478,145,-478,146,-478,147,-478,148,-478,149,-478,161,-478,162,-478,41,-478,93,-478,58,-478,44,-478,125,-478,217,-478,196,-478}),\r\n      new State(138, new int[] {172,11,123,922,174,167,36,168}, new int[] {-111,139,-108,127,-4,921,-126,925,-122,162,-123,166,-1,172}),\r\n      new State(139, new int[] {279,94,40,-87,216,-200,59,-200,151,-200,152,-200,134,-200,136,-200,135,-200,124,-200,38,-200,94,-200,46,-200,43,-200,45,-200,42,-200,164,-200,47,-200,37,-200,159,-200,160,-200,155,-200,156,-200,153,-200,154,-200,60,-200,157,-200,62,-200,158,-200,166,-200,63,-200,61,-200,139,-200,140,-200,141,-200,150,-200,142,-200,143,-200,144,-200,145,-200,146,-200,147,-200,148,-200,149,-200,161,-200,162,-200,41,-200,93,-200,58,-200,44,-200,125,-200,217,-200,196,-200}, new int[] {-82,140,-83,146,-104,917}),\r\n      new State(140, -480, new int[] {-127,141}),\r\n      new State(141, new int[] {216,143,59,-477,151,-477,152,-477,134,-477,136,-477,135,-477,124,-477,38,-477,94,-477,46,-477,43,-477,45,-477,42,-477,164,-477,47,-477,37,-477,159,-477,160,-477,155,-477,156,-477,153,-477,154,-477,60,-477,157,-477,62,-477,158,-477,166,-477,63,-477,61,-477,139,-477,140,-477,141,-477,150,-477,142,-477,143,-477,144,-477,145,-477,146,-477,147,-477,148,-477,149,-477,161,-477,162,-477,41,-477,93,-477,58,-477,44,-477,125,-477,217,-477,196,-477}, new int[] {-128,142}),\r\n      new State(142, -479),\r\n      new State(143, new int[] {172,11,123,922,174,167,36,168}, new int[] {-111,144,-108,127,-4,921,-126,925,-122,162,-123,166,-1,172}),\r\n      new State(144, new int[] {279,94,40,-87,216,-200,59,-200,151,-200,152,-200,134,-200,136,-200,135,-200,124,-200,38,-200,94,-200,46,-200,43,-200,45,-200,42,-200,164,-200,47,-200,37,-200,159,-200,160,-200,155,-200,156,-200,153,-200,154,-200,60,-200,157,-200,62,-200,158,-200,166,-200,63,-200,61,-200,139,-200,140,-200,141,-200,150,-200,142,-200,143,-200,144,-200,145,-200,146,-200,147,-200,148,-200,149,-200,161,-200,162,-200,41,-200,93,-200,58,-200,44,-200,125,-200,217,-200,196,-200}, new int[] {-82,145,-83,146,-104,917}),\r\n      new State(145, -481),\r\n      new State(146, new int[] {91,147,123,914,216,-199,59,-199,151,-199,152,-199,134,-199,136,-199,135,-199,124,-199,38,-199,94,-199,46,-199,43,-199,45,-199,42,-199,164,-199,47,-199,37,-199,159,-199,160,-199,155,-199,156,-199,153,-199,154,-199,60,-199,157,-199,62,-199,158,-199,166,-199,63,-199,61,-199,139,-199,140,-199,141,-199,150,-199,142,-199,143,-199,144,-199,145,-199,146,-199,147,-199,148,-199,149,-199,161,-199,162,-199,41,-199,93,-199,58,-199,44,-199,125,-199,217,-199,196,-199}),\r\n      new State(147, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,93,-482}, new int[] {-92,148,-32,131,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(148, new int[] {93,149}),\r\n      new State(149, -201),\r\n      new State(150, -497),\r\n      new State(151, new int[] {242,152,279,94,216,-494,59,-494,151,-494,152,-494,134,-494,136,-494,135,-494,124,-494,38,-494,94,-494,46,-494,43,-494,45,-494,42,-494,164,-494,47,-494,37,-494,159,-494,160,-494,155,-494,156,-494,153,-494,154,-494,60,-494,157,-494,62,-494,158,-494,166,-494,63,-494,61,-494,139,-494,140,-494,141,-494,150,-494,142,-494,143,-494,144,-494,145,-494,146,-494,147,-494,148,-494,149,-494,161,-494,162,-494,41,-494,93,-494,58,-494,44,-494,125,-494,217,-494,196,-494,40,-87}, new int[] {-104,910}),\r\n      new State(152, new int[] {174,167,36,168,172,11}, new int[] {-126,153,-4,507,-122,162,-123,166,-1,172}),\r\n      new State(153, new int[] {279,94,216,-496,59,-496,151,-496,152,-496,134,-496,136,-496,135,-496,124,-496,38,-496,94,-496,46,-496,43,-496,45,-496,42,-496,164,-496,47,-496,37,-496,159,-496,160,-496,155,-496,156,-496,153,-496,154,-496,60,-496,157,-496,62,-496,158,-496,166,-496,63,-496,61,-496,139,-496,140,-496,141,-496,150,-496,142,-496,143,-496,144,-496,145,-496,146,-496,147,-496,148,-496,149,-496,161,-496,162,-496,41,-496,93,-496,58,-496,44,-496,125,-496,217,-496,196,-496,40,-87}, new int[] {-104,154}),\r\n      new State(154, new int[] {40,155}),\r\n      new State(155, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,156,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(156, new int[] {41,157}),\r\n      new State(157, -395),\r\n      new State(158, new int[] {44,159,41,-204}),\r\n      new State(159, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691}, new int[] {-79,160,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(160, -207),\r\n      new State(161, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,44,-209,41,-209}),\r\n      new State(162, new int[] {91,163,123,174,242,-489,279,-489,40,-489,216,-489,59,-489,151,-489,152,-489,134,-489,136,-489,135,-489,124,-489,38,-489,94,-489,46,-489,43,-489,45,-489,42,-489,164,-489,47,-489,37,-489,159,-489,160,-489,155,-489,156,-489,153,-489,154,-489,60,-489,157,-489,62,-489,158,-489,166,-489,63,-489,61,-489,139,-489,140,-489,141,-489,150,-489,142,-489,143,-489,144,-489,145,-489,146,-489,147,-489,148,-489,149,-489,161,-489,162,-489,41,-489,93,-489,58,-489,44,-489,125,-489,217,-489,196,-489,280,-489}),\r\n      new State(163, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,93,-482}, new int[] {-92,164,-32,131,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(164, new int[] {93,165}),\r\n      new State(165, -486),\r\n      new State(166, -488),\r\n      new State(167, -484),\r\n      new State(168, new int[] {123,169,36,-506,174,-506}),\r\n      new State(169, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,170,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(170, new int[] {125,171,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(171, -485),\r\n      new State(172, new int[] {36,909,174,167}, new int[] {-122,173,-123,166}),\r\n      new State(173, new int[] {91,163,123,174,242,-490,279,-490,40,-490,216,-490,59,-490,151,-490,152,-490,134,-490,136,-490,135,-490,124,-490,38,-490,94,-490,46,-490,43,-490,45,-490,42,-490,164,-490,47,-490,37,-490,159,-490,160,-490,155,-490,156,-490,153,-490,154,-490,60,-490,157,-490,62,-490,158,-490,166,-490,63,-490,61,-490,139,-490,140,-490,141,-490,150,-490,142,-490,143,-490,144,-490,145,-490,146,-490,147,-490,148,-490,149,-490,161,-490,162,-490,41,-490,93,-490,58,-490,44,-490,125,-490,217,-490,196,-490,280,-490}),\r\n      new State(174, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,175,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(175, new int[] {125,176,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(176, -487),\r\n      new State(177, new int[] {242,178}),\r\n      new State(178, new int[] {212,502,174,167,36,168,172,11}, new int[] {-126,179,-4,501,-122,162,-123,166,-1,172}),\r\n      new State(179, new int[] {279,94,216,-495,59,-495,151,-495,152,-495,134,-495,136,-495,135,-495,124,-495,38,-495,94,-495,46,-495,43,-495,45,-495,42,-495,164,-495,47,-495,37,-495,159,-495,160,-495,155,-495,156,-495,153,-495,154,-495,60,-495,157,-495,62,-495,158,-495,166,-495,63,-495,61,-495,139,-495,140,-495,141,-495,150,-495,142,-495,143,-495,144,-495,145,-495,146,-495,147,-495,148,-495,149,-495,161,-495,162,-495,41,-495,93,-495,58,-495,44,-495,125,-495,217,-495,196,-495,40,-87}, new int[] {-104,180}),\r\n      new State(180, new int[] {40,181}),\r\n      new State(181, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,182,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(182, new int[] {41,183}),\r\n      new State(183, -394),\r\n      new State(184, -208),\r\n      new State(185, new int[] {279,94,59,-458,151,-458,152,-458,134,-458,136,-458,135,-458,124,-458,38,-458,94,-458,46,-458,43,-458,45,-458,42,-458,164,-458,47,-458,37,-458,159,-458,160,-458,155,-458,156,-458,153,-458,154,-458,60,-458,157,-458,62,-458,158,-458,166,-458,63,-458,41,-458,93,-458,58,-458,44,-458,125,-458,217,-458,196,-458,40,-87,242,-87}, new int[] {-104,186}),\r\n      new State(186, new int[] {40,187,242,-397}),\r\n      new State(187, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,188,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(188, new int[] {41,189}),\r\n      new State(189, -392),\r\n      new State(190, new int[] {203,191,242,-398}),\r\n      new State(191, new int[] {40,192,38,193}),\r\n      new State(192, -364),\r\n      new State(193, new int[] {40,194}),\r\n      new State(194, -366),\r\n      new State(195, new int[] {91,196,123,906,216,-498,59,-498,151,-498,152,-498,134,-498,136,-498,135,-498,124,-498,38,-498,94,-498,46,-498,43,-498,45,-498,42,-498,164,-498,47,-498,37,-498,159,-498,160,-498,155,-498,156,-498,153,-498,154,-498,60,-498,157,-498,62,-498,158,-498,166,-498,63,-498,61,-498,139,-498,140,-498,141,-498,150,-498,142,-498,143,-498,144,-498,145,-498,146,-498,147,-498,148,-498,149,-498,161,-498,162,-498,41,-498,93,-498,58,-498,44,-498,125,-498,217,-498,196,-498}),\r\n      new State(196, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,93,-482}, new int[] {-92,197,-32,131,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(197, new int[] {93,198}),\r\n      new State(198, -491),\r\n      new State(199, -493),\r\n      new State(200, new int[] {279,94,59,-443,151,-443,152,-443,134,-443,136,-443,135,-443,124,-443,38,-443,94,-443,46,-443,43,-443,45,-443,42,-443,164,-443,47,-443,37,-443,159,-443,160,-443,155,-443,156,-443,153,-443,154,-443,60,-443,157,-443,62,-443,158,-443,166,-443,63,-443,41,-443,93,-443,58,-443,44,-443,125,-443,217,-443,196,-443,40,-87}, new int[] {-104,201}),\r\n      new State(201, new int[] {40,202}),\r\n      new State(202, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,203,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(203, new int[] {41,204}),\r\n      new State(204, -393),\r\n      new State(205, new int[] {165,210,174,167,36,168,172,11,258,114,256,116,207,190,40,205,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-40,206,-32,38,-35,208,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(206, new int[] {41,207,151,-297,152,-297,134,-297,136,-297,135,-297,124,-297,38,-297,94,-297,46,-297,43,-297,45,-297,42,-297,164,-297,47,-297,37,-297,159,-297,160,-297,155,-297,156,-297,153,-297,154,-297,60,-297,157,-297,62,-297,158,-297,166,-297,63,-297}),\r\n      new State(207, -499),\r\n      new State(208, new int[] {41,209}),\r\n      new State(209, -280),\r\n      new State(210, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-98,211,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(211, new int[] {40,213,59,-432,151,-432,152,-432,134,-432,136,-432,135,-432,124,-432,38,-432,94,-432,46,-432,43,-432,45,-432,42,-432,164,-432,47,-432,37,-432,159,-432,160,-432,155,-432,156,-432,153,-432,154,-432,60,-432,157,-432,62,-432,158,-432,166,-432,63,-432,41,-432,93,-432,58,-432,44,-432,125,-432,217,-432,196,-432}, new int[] {-139,212}),\r\n      new State(212, -360),\r\n      new State(213, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,214,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(214, new int[] {41,215}),\r\n      new State(215, -433),\r\n      new State(216, -278),\r\n      new State(217, -296),\r\n      new State(218, new int[] {61,219,139,880,140,882,141,884,150,886,142,888,143,890,144,892,145,894,146,896,147,898,148,900,149,902,161,904,162,905}),\r\n      new State(219, new int[] {38,221,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,220,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(220, new int[] {151,40,152,42,134,-281,136,-281,135,-281,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-281,41,-281,93,-281,58,-281,44,-281,125,-281,217,-281,196,-281}),\r\n      new State(221, new int[] {165,223,174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-109,222,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(222, -282),\r\n      new State(223, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-98,224,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(224, new int[] {40,213,59,-432,151,-432,152,-432,134,-432,136,-432,135,-432,124,-432,38,-432,94,-432,46,-432,43,-432,45,-432,42,-432,164,-432,47,-432,37,-432,159,-432,160,-432,155,-432,156,-432,153,-432,154,-432,60,-432,157,-432,62,-432,158,-432,166,-432,63,-432,41,-432,93,-432,58,-432,44,-432,125,-432,217,-432,196,-432}, new int[] {-139,225}),\r\n      new State(225, -283),\r\n      new State(226, new int[] {242,227,216,-494,279,-494,59,-494,151,-494,152,-494,134,-494,136,-494,135,-494,124,-494,38,-494,94,-494,46,-494,43,-494,45,-494,42,-494,164,-494,47,-494,37,-494,159,-494,160,-494,155,-494,156,-494,153,-494,154,-494,60,-494,157,-494,62,-494,158,-494,166,-494,63,-494,41,-494,93,-494,58,-494,44,-494,125,-494,217,-494,196,-494,280,-494,40,-494}),\r\n      new State(227, new int[] {174,167,36,168}, new int[] {-126,228,-122,162,-123,166,-1,172}),\r\n      new State(228, -496),\r\n      new State(229, new int[] {242,230}),\r\n      new State(230, new int[] {174,167,36,168}, new int[] {-126,231,-122,162,-123,166,-1,172}),\r\n      new State(231, -495),\r\n      new State(232, new int[] {242,-398,59,-402,151,-402,152,-402,134,-402,136,-402,135,-402,124,-402,38,-402,94,-402,46,-402,43,-402,45,-402,42,-402,164,-402,47,-402,37,-402,159,-402,160,-402,155,-402,156,-402,153,-402,154,-402,60,-402,157,-402,62,-402,158,-402,166,-402,63,-402,41,-402,93,-402,58,-402,44,-402,125,-402,217,-402,196,-402,280,-402,40,-402}),\r\n      new State(233, -401),\r\n      new State(234, -78),\r\n      new State(235, -79),\r\n      new State(236, -80),\r\n      new State(237, -81),\r\n      new State(238, -82),\r\n      new State(239, -83),\r\n      new State(240, -84),\r\n      new State(241, -85),\r\n      new State(242, new int[] {279,94,40,-87,242,-87}, new int[] {-104,186}),\r\n      new State(243, -398),\r\n      new State(244, new int[] {279,94,40,-87}, new int[] {-104,201}),\r\n      new State(245, new int[] {165,210}, new int[] {-40,246}),\r\n      new State(246, new int[] {41,207}),\r\n      new State(247, -297),\r\n      new State(248, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,249,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(249, new int[] {151,-298,152,-298,134,-298,136,-298,135,-298,124,-298,38,-298,94,-298,46,-298,43,-298,45,-298,42,-298,164,-298,47,-298,37,-298,159,-298,160,-298,155,-298,156,-298,153,-298,154,-298,60,-298,157,-298,62,-298,158,-298,166,90,63,-298,59,-298,41,-298,93,-298,58,-298,44,-298,125,-298,217,-298,196,-298}),\r\n      new State(250, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,251,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(251, -300),\r\n      new State(252, -476),\r\n      new State(253, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,254,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(254, -302),\r\n      new State(255, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,256,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(256, new int[] {151,-303,152,-303,134,-303,136,-303,135,-303,124,-303,38,-303,94,-303,46,-303,43,-303,45,-303,42,62,164,64,47,66,37,68,159,-303,160,-303,155,-303,156,-303,153,-303,154,-303,60,-303,157,-303,62,-303,158,-303,166,90,63,-303,59,-303,41,-303,93,-303,58,-303,44,-303,125,-303,217,-303,196,-303}),\r\n      new State(257, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,258,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(258, new int[] {151,-304,152,-304,134,-304,136,-304,135,-304,124,-304,38,-304,94,-304,46,-304,43,-304,45,-304,42,62,164,64,47,66,37,68,159,-304,160,-304,155,-304,156,-304,153,-304,154,-304,60,-304,157,-304,62,-304,158,-304,166,90,63,-304,59,-304,41,-304,93,-304,58,-304,44,-304,125,-304,217,-304,196,-304}),\r\n      new State(259, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,260,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(260, new int[] {151,-305,152,-305,134,-305,136,-305,135,-305,124,-305,38,-305,94,-305,46,-305,43,-305,45,-305,42,-305,164,64,47,-305,37,-305,159,-305,160,-305,155,-305,156,-305,153,-305,154,-305,60,-305,157,-305,62,-305,158,-305,166,90,63,-305,59,-305,41,-305,93,-305,58,-305,44,-305,125,-305,217,-305,196,-305}),\r\n      new State(261, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,262,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(262, new int[] {151,-306,152,-306,134,-306,136,-306,135,-306,124,-306,38,-306,94,-306,46,-306,43,-306,45,-306,42,-306,164,64,47,-306,37,-306,159,-306,160,-306,155,-306,156,-306,153,-306,154,-306,60,-306,157,-306,62,-306,158,-306,166,90,63,-306,59,-306,41,-306,93,-306,58,-306,44,-306,125,-306,217,-306,196,-306}),\r\n      new State(263, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,264,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(264, new int[] {151,-307,152,-307,134,-307,136,-307,135,-307,124,-307,38,-307,94,-307,46,-307,43,-307,45,-307,42,-307,164,64,47,-307,37,-307,159,-307,160,-307,155,-307,156,-307,153,-307,154,-307,60,-307,157,-307,62,-307,158,-307,166,90,63,-307,59,-307,41,-307,93,-307,58,-307,44,-307,125,-307,217,-307,196,-307}),\r\n      new State(265, -374),\r\n      new State(266, -375),\r\n      new State(267, -376),\r\n      new State(268, -377),\r\n      new State(269, -378),\r\n      new State(270, -379),\r\n      new State(271, -380),\r\n      new State(272, -381),\r\n      new State(273, -382),\r\n      new State(274, -383),\r\n      new State(275, -384),\r\n      new State(276, -385),\r\n      new State(277, -386),\r\n      new State(278, -387),\r\n      new State(279, -388),\r\n      new State(280, -389),\r\n      new State(281, -390),\r\n      new State(282, -391),\r\n      new State(283, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,284,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(284, new int[] {151,40,152,42,134,-308,136,-308,135,-308,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-308,41,-308,93,-308,58,-308,44,-308,125,-308,217,-308,196,-308}),\r\n      new State(285, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,286,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(286, new int[] {151,-309,152,-309,134,-309,136,-309,135,-309,124,-309,38,-309,94,-309,46,-309,43,-309,45,-309,42,-309,164,64,47,-309,37,-309,159,-309,160,-309,155,-309,156,-309,153,-309,154,-309,60,-309,157,-309,62,-309,158,-309,166,90,63,-309,59,-309,41,-309,93,-309,58,-309,44,-309,125,-309,217,-309,196,-309}),\r\n      new State(287, new int[] {46,288,59,-318,151,-318,152,-318,134,-318,136,-318,135,-318,124,-318,38,-318,94,-318,43,-318,45,-318,42,-318,164,-318,47,-318,37,-318,159,-318,160,-318,155,-318,156,-318,153,-318,154,-318,60,-318,157,-318,62,-318,158,-318,166,-318,63,-318,41,-318,93,-318,58,-318,44,-318,125,-318,217,-318,196,-318}),\r\n      new State(288, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,289,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(289, new int[] {151,-372,152,-372,134,-372,136,-372,135,-372,124,-372,38,-372,94,-372,46,-372,43,-372,45,-372,42,62,164,64,47,66,37,68,159,-372,160,-372,155,-372,156,-372,153,-372,154,-372,60,-372,157,-372,62,-372,158,-372,166,90,63,-372,59,-372,41,-372,93,-372,58,-372,44,-372,125,-372,217,-372,196,-372}),\r\n      new State(290, new int[] {172,11,258,114,256,116,174,167,36,168,207,232,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-98,291,-168,92,-169,99,-4,113,-112,119,-110,121,-126,226,-122,162,-123,166,-1,172,-100,229,-105,233}),\r\n      new State(291, -336),\r\n      new State(292, -337),\r\n      new State(293, new int[] {91,294,59,-340,151,-340,152,-340,134,-340,136,-340,135,-340,124,-340,38,-340,94,-340,46,-340,43,-340,45,-340,42,-340,164,-340,47,-340,37,-340,159,-340,160,-340,155,-340,156,-340,153,-340,154,-340,60,-340,157,-340,62,-340,158,-340,166,-340,63,-340,41,-340,93,-340,58,-340,44,-340,125,-340,217,-340,196,-340}),\r\n      new State(294, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,295,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(295, new int[] {93,296,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(296, -341),\r\n      new State(297, new int[] {40,298}),\r\n      new State(298, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,570,41,-513}, new int[] {-87,299,-86,301,-85,313,-32,305,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(299, new int[] {41,300}),\r\n      new State(300, -358),\r\n      new State(301, new int[] {44,303,41,-5,93,-5}, new int[] {-173,302}),\r\n      new State(302, -514),\r\n      new State(303, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,570,41,-4,93,-4}, new int[] {-85,304,-32,305,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(304, -515),\r\n      new State(305, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,217,306,44,-517,41,-517,93,-517}),\r\n      new State(306, new int[] {38,308,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,307,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(307, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,44,-518,41,-518,93,-518}),\r\n      new State(308, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,309,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(309, -519),\r\n      new State(310, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,570,93,-513}, new int[] {-87,311,-86,301,-85,313,-32,305,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(311, new int[] {93,312}),\r\n      new State(312, -359),\r\n      new State(313, -516),\r\n      new State(314, -342),\r\n      new State(315, new int[] {40,316}),\r\n      new State(316, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245,218,837,41,-512,44,-512}, new int[] {-116,317,-114,841,-109,836,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(317, new int[] {41,318,44,834}),\r\n      new State(318, new int[] {61,319}),\r\n      new State(319, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,320,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(320, new int[] {151,40,152,42,134,-343,136,-343,135,-343,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-343,41,-343,93,-343,58,-343,44,-343,125,-343,217,-343,196,-343}),\r\n      new State(321, new int[] {40,322}),\r\n      new State(322, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-115,323,-113,327,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(323, new int[] {41,324,44,325}),\r\n      new State(324, -344),\r\n      new State(325, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,326,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(326, -474),\r\n      new State(327, -475),\r\n      new State(328, new int[] {40,329}),\r\n      new State(329, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-109,330,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(330, new int[] {41,331}),\r\n      new State(331, -345),\r\n      new State(332, new int[] {40,333}),\r\n      new State(333, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,334,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(334, new int[] {41,335,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(335, -346),\r\n      new State(336, new int[] {40,338,59,-429,151,-429,152,-429,134,-429,136,-429,135,-429,124,-429,38,-429,94,-429,46,-429,43,-429,45,-429,42,-429,164,-429,47,-429,37,-429,159,-429,160,-429,155,-429,156,-429,153,-429,154,-429,60,-429,157,-429,62,-429,158,-429,166,-429,63,-429,41,-429,93,-429,58,-429,44,-429,125,-429,217,-429,196,-429}, new int[] {-91,337,-33,879}),\r\n      new State(337, -347),\r\n      new State(338, new int[] {41,339,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,38,-35,208,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(339, -430),\r\n      new State(340, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,59,-342,151,-342,152,-342,134,-342,136,-342,135,-342,124,-342,38,-342,94,-342,46,-342,42,-342,164,-342,47,-342,37,-342,159,-342,160,-342,155,-342,156,-342,153,-342,154,-342,60,-342,157,-342,62,-342,158,-342,166,-342,63,-342,41,-342,44,-342}, new int[] {-32,341,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(341, new int[] {217,342,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-356,41,-356}),\r\n      new State(342, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,343,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(343, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-357,41,-357}),\r\n      new State(344, -348),\r\n      new State(345, -462),\r\n      new State(346, -441),\r\n      new State(347, -445),\r\n      new State(348, -446),\r\n      new State(349, -447),\r\n      new State(350, new int[] {91,351,59,-448,151,-448,152,-448,134,-448,136,-448,135,-448,124,-448,38,-448,94,-448,46,-448,43,-448,45,-448,42,-448,164,-448,47,-448,37,-448,159,-448,160,-448,155,-448,156,-448,153,-448,154,-448,60,-448,157,-448,62,-448,158,-448,166,-448,63,-448,41,-448,93,-448,58,-448,44,-448,125,-448,217,-448,196,-448}),\r\n      new State(351, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,352,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(352, new int[] {93,353,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(353, -349),\r\n      new State(354, -449),\r\n      new State(355, -442),\r\n      new State(356, -450),\r\n      new State(357, -451),\r\n      new State(358, -452),\r\n      new State(359, -453),\r\n      new State(360, -454),\r\n      new State(361, -455),\r\n      new State(362, -456),\r\n      new State(363, -457),\r\n      new State(364, -444),\r\n      new State(365, -463),\r\n      new State(366, -464),\r\n      new State(367, -470, new int[] {-193,368}),\r\n      new State(368, -538, new int[] {-93,369}),\r\n      new State(369, new int[] {34,370,172,372,175,373,179,374,178,375,177,376,91,377,93,378,123,379,125,380,216,381,174,382,240,392,241,404}, new int[] {-124,371}),\r\n      new State(370, -471),\r\n      new State(371, -527),\r\n      new State(372, -528),\r\n      new State(373, -529),\r\n      new State(374, -530),\r\n      new State(375, -531),\r\n      new State(376, -532),\r\n      new State(377, -533),\r\n      new State(378, -534),\r\n      new State(379, -535),\r\n      new State(380, -536),\r\n      new State(381, -537),\r\n      new State(382, new int[] {91,383,216,390,34,-539,172,-539,175,-539,179,-539,178,-539,177,-539,93,-539,123,-539,125,-539,174,-539,240,-539,241,-539,239,-539,96,-539}),\r\n      new State(383, -540, new int[] {-195,384}),\r\n      new State(384, new int[] {172,387,175,388,174,389}, new int[] {-94,385}),\r\n      new State(385, new int[] {93,386}),\r\n      new State(386, -541),\r\n      new State(387, -546),\r\n      new State(388, -547),\r\n      new State(389, -548),\r\n      new State(390, new int[] {172,391}),\r\n      new State(391, -542),\r\n      new State(392, new int[] {173,395,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,393,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(393, new int[] {125,394,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(394, -543),\r\n      new State(395, new int[] {91,396,125,-463,151,-463,152,-463,134,-463,136,-463,135,-463,124,-463,38,-463,94,-463,46,-463,43,-463,45,-463,42,-463,164,-463,47,-463,37,-463,159,-463,160,-463,155,-463,156,-463,153,-463,154,-463,60,-463,157,-463,62,-463,158,-463,166,-463,63,-463}),\r\n      new State(396, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,397,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(397, new int[] {93,398,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(398, new int[] {125,399}),\r\n      new State(399, -544),\r\n      new State(400, -472, new int[] {-194,401}),\r\n      new State(401, -538, new int[] {-93,402}),\r\n      new State(402, new int[] {34,403,172,372,175,373,179,374,178,375,177,376,91,377,93,378,123,379,125,380,216,381,174,382,240,392,241,404}, new int[] {-124,371}),\r\n      new State(403, -473),\r\n      new State(404, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-109,405,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(405, new int[] {125,406}),\r\n      new State(406, -545),\r\n      new State(407, -465),\r\n      new State(408, -466, new int[] {-191,409}),\r\n      new State(409, -538, new int[] {-93,410}),\r\n      new State(410, new int[] {239,411,172,372,175,373,179,374,178,375,177,376,91,377,93,378,123,379,125,380,216,381,174,382,240,392,241,404}, new int[] {-124,371}),\r\n      new State(411, -467),\r\n      new State(412, -468, new int[] {-192,413}),\r\n      new State(413, -538, new int[] {-93,414}),\r\n      new State(414, new int[] {239,415,172,372,175,373,179,374,178,375,177,376,91,377,93,378,123,379,125,380,216,381,174,382,240,392,241,404}, new int[] {-124,371}),\r\n      new State(415, -469),\r\n      new State(416, -538, new int[] {-93,417}),\r\n      new State(417, new int[] {96,418,172,372,175,373,179,374,178,375,177,376,91,377,93,378,123,379,125,380,216,381,174,382,240,392,241,404}, new int[] {-124,371}),\r\n      new State(418, -350),\r\n      new State(419, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,420,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(420, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-351,41,-351,93,-351,58,-351,44,-351,125,-351,217,-351,196,-351}),\r\n      new State(421, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,422,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(422, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-352,41,-352,93,-352,58,-352,44,-352,125,-352,217,-352,196,-352}),\r\n      new State(423, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,424,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(424, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-353,41,-353,93,-353,58,-353,44,-353,125,-353,217,-353,196,-353}),\r\n      new State(425, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,426,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(426, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-354,41,-354,93,-354,58,-354,44,-354,125,-354,217,-354,196,-354}),\r\n      new State(427, -355),\r\n      new State(428, new int[] {91,632,172,-92,258,-92,256,-92,207,-92,220,-92,282,-92,283,-92,284,-92,285,-92,286,-92,287,-92,288,-92,219,-92,38,-92,260,-92,174,-92,41,-190}, new int[] {-73,429,-72,694,-71,711,-44,697,-46,710,-45,633}),\r\n      new State(429, new int[] {41,430}),\r\n      new State(430, new int[] {259,870,123,-367}, new int[] {-158,431}),\r\n      new State(431, -361, new int[] {-190,432}),\r\n      new State(432, new int[] {123,433}),\r\n      new State(433, -107, new int[] {-30,434}),\r\n      new State(434, new int[] {125,435,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(435, -362),\r\n      new State(436, new int[] {40,437}),\r\n      new State(437, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,59,-275}, new int[] {-42,438,-41,869,-32,535,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(438, new int[] {59,439}),\r\n      new State(439, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,59,-275}, new int[] {-42,440,-41,869,-32,535,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(440, new int[] {59,441}),\r\n      new State(441, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,41,-275}, new int[] {-42,442,-41,869,-32,535,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(442, new int[] {41,443}),\r\n      new State(443, -124, new int[] {-183,444}),\r\n      new State(444, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,865}, new int[] {-63,445,-15,446,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(445, -125),\r\n      new State(446, -162),\r\n      new State(447, new int[] {40,37}, new int[] {-33,448}),\r\n      new State(448, -126, new int[] {-184,449}),\r\n      new State(449, new int[] {123,451,58,857}, new int[] {-129,450}),\r\n      new State(450, -127),\r\n      new State(451, new int[] {59,854,125,-174,199,-174,200,-174}, new int[] {-130,452}),\r\n      new State(452, new int[] {125,453,199,454,200,851}),\r\n      new State(453, -170),\r\n      new State(454, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,455,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(455, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,58,849,59,850}, new int[] {-187,456}),\r\n      new State(456, -107, new int[] {-30,457}),\r\n      new State(457, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,125,-175,199,-175,200,-175,198,-175,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(458, new int[] {59,459,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,460,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(459, -128),\r\n      new State(460, new int[] {59,461,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(461, -129),\r\n      new State(462, new int[] {40,463,38,464}),\r\n      new State(463, -363),\r\n      new State(464, new int[] {40,465}),\r\n      new State(465, -365),\r\n      new State(466, new int[] {59,467,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,468,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(467, -130),\r\n      new State(468, new int[] {59,469,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(469, -131),\r\n      new State(470, new int[] {59,471,174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,472,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(471, -132),\r\n      new State(472, new int[] {59,473,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(473, -133),\r\n      new State(474, new int[] {59,475}),\r\n      new State(475, -134),\r\n      new State(476, new int[] {174,481,36,482}, new int[] {-125,477,-117,487}),\r\n      new State(477, new int[] {59,478,44,479}),\r\n      new State(478, -135),\r\n      new State(479, new int[] {174,481,36,482}, new int[] {-117,480}),\r\n      new State(480, -212),\r\n      new State(481, -214),\r\n      new State(482, new int[] {123,484,174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-109,483,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(483, -215),\r\n      new State(484, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,485,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(485, new int[] {125,486,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(486, -216),\r\n      new State(487, -213),\r\n      new State(488, new int[] {203,191,174,493,242,-398}, new int[] {-119,489,-118,529}),\r\n      new State(489, new int[] {59,490,44,491}),\r\n      new State(490, -136),\r\n      new State(491, new int[] {174,493}, new int[] {-118,492}),\r\n      new State(492, -217),\r\n      new State(493, new int[] {61,494,59,-219,44,-219}),\r\n      new State(494, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,495,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(495, -220),\r\n      new State(496, -434),\r\n      new State(497, -448),\r\n      new State(498, -443),\r\n      new State(499, new int[] {242,500}),\r\n      new State(500, new int[] {212,502,172,11}, new int[] {-4,501}),\r\n      new State(501, -459),\r\n      new State(502, -461),\r\n      new State(503, new int[] {279,94,59,-458,44,-458,217,-458,41,-458,93,-458,242,-87}, new int[] {-104,504}),\r\n      new State(504, -397),\r\n      new State(505, new int[] {242,506}),\r\n      new State(506, new int[] {172,11}, new int[] {-4,507}),\r\n      new State(507, -460),\r\n      new State(508, new int[] {40,509}),\r\n      new State(509, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400,41,-521}, new int[] {-89,510,-90,512,-88,522,-59,516,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(510, new int[] {41,511}),\r\n      new State(511, -435),\r\n      new State(512, new int[] {44,514,41,-5,93,-5}, new int[] {-173,513}),\r\n      new State(513, -522),\r\n      new State(514, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400,41,-4,93,-4}, new int[] {-88,515,-59,516,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(515, -523),\r\n      new State(516, new int[] {217,517,44,-526,41,-526,93,-526}),\r\n      new State(517, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,518,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(518, -525),\r\n      new State(519, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400,93,-521}, new int[] {-89,520,-90,512,-88,522,-59,516,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(520, new int[] {93,521}),\r\n      new State(521, -436),\r\n      new State(522, -524),\r\n      new State(523, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,524,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(524, -437),\r\n      new State(525, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,526,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(526, -438),\r\n      new State(527, -439),\r\n      new State(528, -440),\r\n      new State(529, -218),\r\n      new State(530, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-41,531,-32,535,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(531, new int[] {59,532,44,533}),\r\n      new State(532, -137),\r\n      new State(533, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,534,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(534, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,44,-273,59,-273,41,-273}),\r\n      new State(535, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,44,-274,59,-274,41,-274}),\r\n      new State(536, -138),\r\n      new State(537, -139),\r\n      new State(538, new int[] {59,539,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(539, -112),\r\n      new State(540, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,570,93,-513}, new int[] {-87,311,-48,541,-4,564,-86,301,-85,313,-32,305,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,569,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-47,568}),\r\n      new State(541, new int[] {93,542,44,543}),\r\n      new State(542, -90),\r\n      new State(543, new int[] {172,11,258,114,256,116}, new int[] {-47,544,-168,545,-169,99,-4,113}),\r\n      new State(544, -94),\r\n      new State(545, new int[] {40,546,93,-96,44,-96}),\r\n      new State(546, new int[] {174,559,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-52,547,-49,561,-51,563,-32,560,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-50,558}),\r\n      new State(547, new int[] {41,548,44,549}),\r\n      new State(548, -97),\r\n      new State(549, new int[] {174,559,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-49,550,-51,557,-50,558,-32,560,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(550, new int[] {41,551,44,552}),\r\n      new State(551, -99),\r\n      new State(552, new int[] {174,554}, new int[] {-50,553}),\r\n      new State(553, -102),\r\n      new State(554, new int[] {217,555}),\r\n      new State(555, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,556,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(556, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,41,-105,44,-105}),\r\n      new State(557, -100),\r\n      new State(558, -103),\r\n      new State(559, new int[] {217,555,91,-484,123,-484,242,-484,279,-484,40,-484,216,-484,151,-484,152,-484,134,-484,136,-484,135,-484,124,-484,38,-484,94,-484,46,-484,43,-484,45,-484,42,-484,164,-484,47,-484,37,-484,159,-484,160,-484,155,-484,156,-484,153,-484,154,-484,60,-484,157,-484,62,-484,158,-484,166,-484,63,-484,41,-484,44,-484,61,-484,139,-484,140,-484,141,-484,150,-484,142,-484,143,-484,144,-484,145,-484,146,-484,147,-484,148,-484,149,-484,161,-484,162,-484}),\r\n      new State(560, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,41,-104,44,-104}),\r\n      new State(561, new int[] {41,562,44,552}),\r\n      new State(562, -98),\r\n      new State(563, -101),\r\n      new State(564, new int[] {58,565,258,-412,40,-412,279,-412,242,-412,151,-412,152,-412,134,-412,136,-412,135,-412,124,-412,38,-412,94,-412,46,-412,43,-412,45,-412,42,-412,164,-412,47,-412,37,-412,159,-412,160,-412,155,-412,156,-412,153,-412,154,-412,60,-412,157,-412,62,-412,158,-412,166,-412,63,-412,217,-412,44,-412,93,-412}),\r\n      new State(565, new int[] {172,11,258,114,256,116}, new int[] {-48,566,-47,568,-168,545,-169,99,-4,113}),\r\n      new State(566, new int[] {93,567,44,543}),\r\n      new State(567, -91),\r\n      new State(568, -95),\r\n      new State(569, new int[] {40,546,279,94,151,-458,152,-458,134,-458,136,-458,135,-458,124,-458,38,-458,94,-458,46,-458,43,-458,45,-458,42,-458,164,-458,47,-458,37,-458,159,-458,160,-458,155,-458,156,-458,153,-458,154,-458,60,-458,157,-458,62,-458,158,-458,166,-458,63,-458,217,-458,44,-96,93,-96,242,-87}, new int[] {-104,186}),\r\n      new State(570, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,571,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(571, -520),\r\n      new State(572, new int[] {40,463,38,573,172,-42}),\r\n      new State(573, new int[] {40,465,172,-44}),\r\n      new State(574, new int[] {40,575}),\r\n      new State(575, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-115,576,-113,327,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(576, new int[] {41,577,44,325}),\r\n      new State(577, new int[] {59,578}),\r\n      new State(578, -140),\r\n      new State(579, new int[] {40,580}),\r\n      new State(580, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-109,581,-39,842,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-37,217,-113,218,-40,247,-38,263,-32,848,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(581, new int[] {196,582,61,-476,139,-476,140,-476,141,-476,150,-476,142,-476,143,-476,144,-476,145,-476,146,-476,147,-476,148,-476,149,-476,161,-476,162,-476,151,-277,152,-277,134,-277,136,-277,135,-277,124,-277,38,-277,94,-277,46,-277,43,-277,45,-277,42,-277,164,-277,47,-277,37,-277,159,-277,160,-277,155,-277,156,-277,153,-277,154,-277,60,-277,157,-277,62,-277,158,-277,166,-277,63,-277}),\r\n      new State(582, new int[] {218,828,38,705,174,-155,36,-155,172,-155,258,-155,256,-155,207,-155,40,-155}, new int[] {-43,583,-2,826}),\r\n      new State(583, new int[] {217,824,41,-159}, new int[] {-132,584}),\r\n      new State(584, new int[] {41,585}),\r\n      new State(585, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,820}, new int[] {-64,586,-15,587,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(586, -141),\r\n      new State(587, -164),\r\n      new State(588, -144, new int[] {-185,589}),\r\n      new State(589, new int[] {123,590}),\r\n      new State(590, -107, new int[] {-30,591}),\r\n      new State(591, new int[] {125,592,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(592, new int[] {246,812,247,-150,59,-150,172,-150,123,-150,182,-150,188,-150,187,-150,190,-150,197,-150,201,-150,202,-150,205,-150,138,-150,206,-150,207,-150,186,-150,176,-150,174,-150,36,-150,258,-150,256,-150,40,-150,165,-150,168,-150,161,-150,162,-150,43,-150,45,-150,33,-150,126,-150,289,-150,290,-150,291,-150,292,-150,293,-150,294,-150,295,-150,296,-150,297,-150,298,-150,299,-150,300,-150,301,-150,302,-150,303,-150,304,-150,305,-150,306,-150,137,-150,64,-150,167,-150,219,-150,91,-150,218,-150,210,-150,211,-150,131,-150,181,-150,169,-150,170,-150,171,-150,180,-150,225,-150,226,-150,227,-150,221,-150,222,-150,223,-150,224,-150,257,-150,173,-150,34,-150,261,-150,238,-150,262,-150,96,-150,129,-150,130,-150,132,-150,133,-150,203,-150,209,-150,192,-150,245,-150,248,-150,244,-150,194,-150,259,-150,204,-150,253,-150,251,-150,252,-150,278,-150,249,-150,212,-150,213,-150,128,-150,125,-150,183,-150,184,-150,199,-150,200,-150,198,-150,195,-150,193,-150,191,-150,189,-150,185,-150}, new int[] {-151,593,-152,803}),\r\n      new State(593, new int[] {247,595,59,-153,172,-153,123,-153,182,-153,188,-153,187,-153,190,-153,197,-153,201,-153,202,-153,205,-153,138,-153,206,-153,207,-153,186,-153,176,-153,174,-153,36,-153,258,-153,256,-153,40,-153,165,-153,168,-153,161,-153,162,-153,43,-153,45,-153,33,-153,126,-153,289,-153,290,-153,291,-153,292,-153,293,-153,294,-153,295,-153,296,-153,297,-153,298,-153,299,-153,300,-153,301,-153,302,-153,303,-153,304,-153,305,-153,306,-153,137,-153,64,-153,167,-153,219,-153,91,-153,218,-153,210,-153,211,-153,131,-153,181,-153,169,-153,170,-153,171,-153,180,-153,225,-153,226,-153,227,-153,221,-153,222,-153,223,-153,224,-153,257,-153,173,-153,34,-153,261,-153,238,-153,262,-153,96,-153,129,-153,130,-153,132,-153,133,-153,203,-153,209,-153,192,-153,245,-153,248,-153,244,-153,194,-153,259,-153,204,-153,253,-153,251,-153,252,-153,278,-153,249,-153,212,-153,213,-153,128,-153,125,-153,183,-153,184,-153,199,-153,200,-153,198,-153,195,-153,193,-153,191,-153,189,-153,185,-153}, new int[] {-153,594}),\r\n      new State(594, -145),\r\n      new State(595, new int[] {123,596}),\r\n      new State(596, -107, new int[] {-30,597}),\r\n      new State(597, new int[] {125,598,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(598, -154),\r\n      new State(599, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,600,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(600, new int[] {59,601,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(601, -146),\r\n      new State(602, new int[] {172,11}, new int[] {-4,603}),\r\n      new State(603, new int[] {59,604}),\r\n      new State(604, -147),\r\n      new State(605, new int[] {40,606}),\r\n      new State(606, new int[] {172,11}, new int[] {-186,607,-4,800}),\r\n      new State(607, new int[] {41,608,44,796}),\r\n      new State(608, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,612}, new int[] {-65,609,-15,610,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(609, -148),\r\n      new State(610, -166),\r\n      new State(611, -114),\r\n      new State(612, -107, new int[] {-30,613}),\r\n      new State(613, new int[] {195,614,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(614, new int[] {59,615}),\r\n      new State(615, -167),\r\n      new State(616, -109),\r\n      new State(617, new int[] {172,11}, new int[] {-4,618}),\r\n      new State(618, new int[] {279,712,40,-70}, new int[] {-74,619}),\r\n      new State(619, -39, new int[] {-176,620}),\r\n      new State(620, new int[] {40,621}),\r\n      new State(621, new int[] {91,632,172,-92,258,-92,256,-92,207,-92,220,-92,282,-92,283,-92,284,-92,285,-92,286,-92,287,-92,288,-92,219,-92,38,-92,260,-92,174,-92,41,-190}, new int[] {-73,622,-72,694,-71,711,-44,697,-46,710,-45,633}),\r\n      new State(622, new int[] {41,623}),\r\n      new State(623, -40, new int[] {-177,624}),\r\n      new State(624, new int[] {123,625}),\r\n      new State(625, -107, new int[] {-30,626}),\r\n      new State(626, new int[] {125,627,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(627, -41),\r\n      new State(628, new int[] {203,629,91,632,204,-93,253,-93,251,-93,252,-93,278,-93,249,-93,212,-93,213,-93}, new int[] {-45,631}),\r\n      new State(629, new int[] {38,630,172,-43}),\r\n      new State(630, -45),\r\n      new State(631, -88),\r\n      new State(632, new int[] {172,11,258,114,256,116}, new int[] {-48,541,-4,564,-47,568,-168,545,-169,99}),\r\n      new State(633, -89),\r\n      new State(634, -110),\r\n      new State(635, new int[] {253,795,251,-55,252,-55,278,-55,249,-55,212,-55,213,-55}, new int[] {-160,636}),\r\n      new State(636, new int[] {251,793,252,794,278,-52,249,-52,212,-52,213,-52}, new int[] {-159,637}),\r\n      new State(637, new int[] {278,792,249,-57,212,-57,213,-57}, new int[] {-161,638}),\r\n      new State(638, new int[] {249,780,212,790,213,791}, new int[] {-24,639}),\r\n      new State(639, new int[] {172,11}, new int[] {-4,640}),\r\n      new State(640, new int[] {279,712,215,-70,250,-70,123,-70}, new int[] {-74,641}),\r\n      new State(641, -48, new int[] {-178,642}),\r\n      new State(642, new int[] {215,778,250,-59,123,-59}, new int[] {-167,643}),\r\n      new State(643, new int[] {250,773,123,-63}, new int[] {-138,644}),\r\n      new State(644, new int[] {123,645}),\r\n      new State(645, -222, new int[] {-136,646}),\r\n      new State(646, new int[] {125,647,91,632,259,743,204,-92,255,-92,254,-92,253,-92,207,-92,251,-92,252,-92,208,-92,203,-92}, new int[] {-137,648,-44,649,-46,710,-45,633,-140,742}),\r\n      new State(647, -49),\r\n      new State(648, -221),\r\n      new State(649, new int[] {204,659,255,734,254,735,253,736,207,737,251,738,252,739,208,741,203,-252}, new int[] {-162,650,-163,668,-164,732,-165,740}),\r\n      new State(650, new int[] {174,655}, new int[] {-121,651,-120,658}),\r\n      new State(651, new int[] {59,652,44,653}),\r\n      new State(652, -223),\r\n      new State(653, new int[] {174,655}, new int[] {-120,654}),\r\n      new State(654, -262),\r\n      new State(655, new int[] {61,656,59,-264,44,-264}),\r\n      new State(656, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,657,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(657, -265),\r\n      new State(658, -263),\r\n      new State(659, new int[] {172,11}, new int[] {-135,660,-134,662,-4,665}),\r\n      new State(660, new int[] {59,661}),\r\n      new State(661, -224),\r\n      new State(662, new int[] {44,663,59,-267}),\r\n      new State(663, new int[] {172,11}, new int[] {-135,664,-134,662,-4,665}),\r\n      new State(664, -266),\r\n      new State(665, new int[] {61,666}),\r\n      new State(666, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,667,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(667, -268),\r\n      new State(668, new int[] {203,669}),\r\n      new State(669, new int[] {38,705,172,-155}, new int[] {-2,670}),\r\n      new State(670, new int[] {172,11}, new int[] {-4,671}),\r\n      new State(671, new int[] {279,712,40,-70}, new int[] {-74,672}),\r\n      new State(672, -225, new int[] {-188,673}),\r\n      new State(673, new int[] {40,674}),\r\n      new State(674, new int[] {91,632,172,-92,258,-92,256,-92,207,-92,220,-92,282,-92,283,-92,284,-92,285,-92,286,-92,287,-92,288,-92,219,-92,38,-92,260,-92,174,-92,41,-190}, new int[] {-73,675,-72,694,-71,711,-44,697,-46,710,-45,633}),\r\n      new State(675, new int[] {41,676}),\r\n      new State(676, new int[] {58,684,59,-246,123,-246}, new int[] {-84,677}),\r\n      new State(677, -226, new int[] {-189,678}),\r\n      new State(678, new int[] {59,680,123,681}, new int[] {-131,679}),\r\n      new State(679, -227),\r\n      new State(680, -248),\r\n      new State(681, -107, new int[] {-30,682}),\r\n      new State(682, new int[] {125,683,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(683, -249),\r\n      new State(684, new int[] {172,11}, new int[] {-4,685}),\r\n      new State(685, new int[] {40,686}),\r\n      new State(686, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,687,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(687, new int[] {41,688}),\r\n      new State(688, -247),\r\n      new State(689, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,690,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(690, -210),\r\n      new State(691, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,692,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(692, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,44,-211,41,-211}),\r\n      new State(693, -205),\r\n      new State(694, new int[] {44,695,41,-189}),\r\n      new State(695, new int[] {91,632,172,-92,258,-92,256,-92,207,-92,220,-92,282,-92,283,-92,284,-92,285,-92,286,-92,287,-92,288,-92,219,-92,38,-92,260,-92,174,-92}, new int[] {-71,696,-44,697,-46,710,-45,633}),\r\n      new State(696, -192),\r\n      new State(697, new int[] {172,11,258,114,256,116,207,243,220,708,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241,38,-195,260,-195,174,-195}, new int[] {-106,698,-100,706,-168,707,-169,99,-4,113,-105,709}),\r\n      new State(698, new int[] {38,705,260,-155,174,-155}, new int[] {-2,699}),\r\n      new State(699, new int[] {260,704,174,-157}, new int[] {-3,700}),\r\n      new State(700, new int[] {174,701}),\r\n      new State(701, new int[] {61,702,44,-193,41,-193}),\r\n      new State(702, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,703,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(703, -194),\r\n      new State(704, -158),\r\n      new State(705, -156),\r\n      new State(706, -196),\r\n      new State(707, new int[] {279,94,38,-87,260,-87,174,-87,280,-87,44,-87,123,-87,250,-87}, new int[] {-104,504}),\r\n      new State(708, -197),\r\n      new State(709, -198),\r\n      new State(710, new int[] {91,632,172,-93,258,-93,256,-93,207,-93,220,-93,282,-93,283,-93,284,-93,285,-93,286,-93,287,-93,288,-93,219,-93,38,-93,260,-93,174,-93,204,-93,255,-93,254,-93,253,-93,251,-93,252,-93,208,-93,203,-93}, new int[] {-45,631}),\r\n      new State(711, -191),\r\n      new State(712, new int[] {91,632,172,-92}, new int[] {-75,713,-76,729,-77,731,-44,727,-46,710,-45,633,-78,726}),\r\n      new State(713, new int[] {280,714,44,715}),\r\n      new State(714, -67),\r\n      new State(715, new int[] {91,632,172,-92}, new int[] {-76,716,-77,725,-78,726,-44,727,-46,710,-45,633}),\r\n      new State(716, new int[] {280,717,44,718}),\r\n      new State(717, -69),\r\n      new State(718, new int[] {91,632,172,-92}, new int[] {-78,719,-44,720,-46,710,-45,633}),\r\n      new State(719, -73),\r\n      new State(720, new int[] {172,11}, new int[] {-4,721}),\r\n      new State(721, new int[] {61,722}),\r\n      new State(722, new int[] {172,11,258,114,256,116,207,243,282,234,283,235,284,236,285,237,286,238,287,239,288,240,219,241}, new int[] {-100,723,-105,724,-168,707,-169,99,-4,113}),\r\n      new State(723, -76),\r\n      new State(724, -77),\r\n      new State(725, -71),\r\n      new State(726, -74),\r\n      new State(727, new int[] {172,11}, new int[] {-4,728}),\r\n      new State(728, new int[] {61,722,280,-75,44,-75}),\r\n      new State(729, new int[] {280,730,44,718}),\r\n      new State(730, -68),\r\n      new State(731, -72),\r\n      new State(732, new int[] {255,734,254,735,253,736,207,737,251,738,252,739,174,-250,203,-253}, new int[] {-165,733}),\r\n      new State(733, -255),\r\n      new State(734, -256),\r\n      new State(735, -257),\r\n      new State(736, -258),\r\n      new State(737, -259),\r\n      new State(738, -260),\r\n      new State(739, -261),\r\n      new State(740, -254),\r\n      new State(741, -251),\r\n      new State(742, -228),\r\n      new State(743, new int[] {172,11,258,114,256,116}, new int[] {-171,744,-168,759,-169,99,-4,113}),\r\n      new State(744, new int[] {44,746,59,748,123,749}, new int[] {-141,745}),\r\n      new State(745, -229),\r\n      new State(746, new int[] {172,11,258,114,256,116}, new int[] {-168,747,-169,99,-4,113}),\r\n      new State(747, -426),\r\n      new State(748, -230),\r\n      new State(749, new int[] {172,11,258,114,256,116,125,-232}, new int[] {-142,750,-143,752,-144,772,-145,754,-147,755,-168,760,-169,99,-4,763,-148,764,-146,765}),\r\n      new State(750, new int[] {125,751}),\r\n      new State(751, -231),\r\n      new State(752, new int[] {172,11,258,114,256,116,125,-233}, new int[] {-144,753,-145,754,-147,755,-168,760,-169,99,-4,763,-148,764,-146,765}),\r\n      new State(753, -235),\r\n      new State(754, -236),\r\n      new State(755, new int[] {214,756,196,-240}),\r\n      new State(756, new int[] {172,11,258,114,256,116}, new int[] {-171,757,-168,759,-169,99,-4,113}),\r\n      new State(757, new int[] {59,758,44,746}),\r\n      new State(758, -238),\r\n      new State(759, -425),\r\n      new State(760, new int[] {242,761}),\r\n      new State(761, new int[] {172,11}, new int[] {-4,762}),\r\n      new State(762, -241),\r\n      new State(763, new int[] {258,-412,242,-412,196,-239}),\r\n      new State(764, -237),\r\n      new State(765, new int[] {196,766}),\r\n      new State(766, new int[] {255,734,254,735,253,736,207,737,251,738,252,739,172,-244}, new int[] {-149,767,-165,770}),\r\n      new State(767, new int[] {172,11}, new int[] {-4,768}),\r\n      new State(768, new int[] {59,769}),\r\n      new State(769, -242),\r\n      new State(770, new int[] {59,771,172,-245}),\r\n      new State(771, -243),\r\n      new State(772, -234),\r\n      new State(773, new int[] {172,11,258,114,256,116,207,243}, new int[] {-101,774,-100,777,-168,707,-169,99,-4,113}),\r\n      new State(774, new int[] {44,775,123,-64}),\r\n      new State(775, new int[] {172,11,258,114,256,116,207,243}, new int[] {-100,776,-168,707,-169,99,-4,113}),\r\n      new State(776, -66),\r\n      new State(777, -65),\r\n      new State(778, new int[] {172,11,258,114,256,116,207,243}, new int[] {-100,779,-168,707,-169,99,-4,113}),\r\n      new State(779, -60),\r\n      new State(780, new int[] {172,11}, new int[] {-4,781}),\r\n      new State(781, new int[] {279,712,215,-70,123,-70}, new int[] {-74,782}),\r\n      new State(782, -50, new int[] {-179,783}),\r\n      new State(783, new int[] {215,788,123,-61}, new int[] {-102,784}),\r\n      new State(784, new int[] {123,785}),\r\n      new State(785, -222, new int[] {-136,786}),\r\n      new State(786, new int[] {125,787,91,632,259,743,204,-92,255,-92,254,-92,253,-92,207,-92,251,-92,252,-92,208,-92,203,-92}, new int[] {-137,648,-44,649,-46,710,-45,633,-140,742}),\r\n      new State(787, -51),\r\n      new State(788, new int[] {172,11,258,114,256,116,207,243}, new int[] {-101,789,-100,777,-168,707,-169,99,-4,113}),\r\n      new State(789, new int[] {44,775,123,-62}),\r\n      new State(790, -46),\r\n      new State(791, -47),\r\n      new State(792, -58),\r\n      new State(793, -53),\r\n      new State(794, -54),\r\n      new State(795, -56),\r\n      new State(796, new int[] {172,11}, new int[] {-4,797}),\r\n      new State(797, new int[] {61,798}),\r\n      new State(798, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,799,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(799, -169),\r\n      new State(800, new int[] {61,801}),\r\n      new State(801, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,802,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(802, -168),\r\n      new State(803, new int[] {246,804,247,-149,59,-149,172,-149,123,-149,182,-149,188,-149,187,-149,190,-149,197,-149,201,-149,202,-149,205,-149,138,-149,206,-149,207,-149,186,-149,176,-149,174,-149,36,-149,258,-149,256,-149,40,-149,165,-149,168,-149,161,-149,162,-149,43,-149,45,-149,33,-149,126,-149,289,-149,290,-149,291,-149,292,-149,293,-149,294,-149,295,-149,296,-149,297,-149,298,-149,299,-149,300,-149,301,-149,302,-149,303,-149,304,-149,305,-149,306,-149,137,-149,64,-149,167,-149,219,-149,91,-149,218,-149,210,-149,211,-149,131,-149,181,-149,169,-149,170,-149,171,-149,180,-149,225,-149,226,-149,227,-149,221,-149,222,-149,223,-149,224,-149,257,-149,173,-149,34,-149,261,-149,238,-149,262,-149,96,-149,129,-149,130,-149,132,-149,133,-149,203,-149,209,-149,192,-149,245,-149,248,-149,244,-149,194,-149,259,-149,204,-149,253,-149,251,-149,252,-149,278,-149,249,-149,212,-149,213,-149,128,-149,125,-149,183,-149,184,-149,199,-149,200,-149,198,-149,195,-149,193,-149,191,-149,189,-149,185,-149}),\r\n      new State(804, new int[] {40,805}),\r\n      new State(805, new int[] {172,11,258,114,256,116,207,243}, new int[] {-100,806,-168,707,-169,99,-4,113}),\r\n      new State(806, new int[] {174,807}),\r\n      new State(807, new int[] {41,808}),\r\n      new State(808, new int[] {123,809}),\r\n      new State(809, -107, new int[] {-30,810}),\r\n      new State(810, new int[] {125,811,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(811, -151),\r\n      new State(812, new int[] {40,813}),\r\n      new State(813, new int[] {172,11,258,114,256,116,207,243}, new int[] {-100,814,-168,707,-169,99,-4,113}),\r\n      new State(814, new int[] {174,815}),\r\n      new State(815, new int[] {41,816}),\r\n      new State(816, new int[] {123,817}),\r\n      new State(817, -107, new int[] {-30,818}),\r\n      new State(818, new int[] {125,819,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(819, -152),\r\n      new State(820, -107, new int[] {-30,821}),\r\n      new State(821, new int[] {193,822,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(822, new int[] {59,823}),\r\n      new State(823, -165),\r\n      new State(824, new int[] {38,705,174,-155,36,-155,172,-155,258,-155,256,-155,207,-155,40,-155}, new int[] {-43,825,-2,826}),\r\n      new State(825, -160),\r\n      new State(826, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,827,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(827, -161),\r\n      new State(828, new int[] {40,829}),\r\n      new State(829, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245,218,837,41,-512,44,-512}, new int[] {-116,830,-114,841,-109,836,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(830, new int[] {41,831,44,834}),\r\n      new State(831, new int[] {41,832}),\r\n      new State(832, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,820}, new int[] {-64,833,-15,587,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(833, -143),\r\n      new State(834, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245,218,837,41,-512,44,-512}, new int[] {-114,835,-109,836,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(835, -508),\r\n      new State(836, -510),\r\n      new State(837, new int[] {40,838}),\r\n      new State(838, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245,218,837,41,-512,44,-512}, new int[] {-116,839,-114,841,-109,836,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(839, new int[] {41,840,44,834}),\r\n      new State(840, -511),\r\n      new State(841, -509),\r\n      new State(842, new int[] {196,843,151,-278,152,-278,134,-278,136,-278,135,-278,124,-278,38,-278,94,-278,46,-278,43,-278,45,-278,42,-278,164,-278,47,-278,37,-278,159,-278,160,-278,155,-278,156,-278,153,-278,154,-278,60,-278,157,-278,62,-278,158,-278,166,-278,63,-278}),\r\n      new State(843, new int[] {174,167,36,168,172,11,258,114,256,116,207,243,40,245}, new int[] {-113,844,-109,252,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,242,-169,99,-4,113,-97,195,-96,199,-58,244}),\r\n      new State(844, new int[] {217,824,41,-159}, new int[] {-132,845}),\r\n      new State(845, new int[] {41,846}),\r\n      new State(846, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6,58,820}, new int[] {-64,847,-15,587,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(847, -142),\r\n      new State(848, new int[] {151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(849, -177),\r\n      new State(850, -178),\r\n      new State(851, new int[] {58,849,59,850}, new int[] {-187,852}),\r\n      new State(852, -107, new int[] {-30,853}),\r\n      new State(853, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,125,-176,199,-176,200,-176,198,-176,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(854, -174, new int[] {-130,855}),\r\n      new State(855, new int[] {125,856,199,454,200,851}),\r\n      new State(856, -171),\r\n      new State(857, new int[] {59,861,198,-174,199,-174,200,-174}, new int[] {-130,858}),\r\n      new State(858, new int[] {198,859,199,454,200,851}),\r\n      new State(859, new int[] {59,860}),\r\n      new State(860, -172),\r\n      new State(861, -174, new int[] {-130,862}),\r\n      new State(862, new int[] {198,863,199,454,200,851}),\r\n      new State(863, new int[] {59,864}),\r\n      new State(864, -173),\r\n      new State(865, -107, new int[] {-30,866}),\r\n      new State(866, new int[] {191,867,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(867, new int[] {59,868}),\r\n      new State(868, -163),\r\n      new State(869, new int[] {44,533,59,-276,41,-276}),\r\n      new State(870, new int[] {40,871}),\r\n      new State(871, new int[] {38,705,174,-155}, new int[] {-157,872,-156,878,-2,876}),\r\n      new State(872, new int[] {41,873,44,874}),\r\n      new State(873, -368),\r\n      new State(874, new int[] {38,705,174,-155}, new int[] {-156,875,-2,876}),\r\n      new State(875, -369),\r\n      new State(876, new int[] {174,877}),\r\n      new State(877, -371),\r\n      new State(878, -370),\r\n      new State(879, -431),\r\n      new State(880, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,881,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(881, new int[] {151,40,152,42,134,-284,136,-284,135,-284,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-284,41,-284,93,-284,58,-284,44,-284,125,-284,217,-284,196,-284}),\r\n      new State(882, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,883,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(883, new int[] {151,40,152,42,134,-285,136,-285,135,-285,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-285,41,-285,93,-285,58,-285,44,-285,125,-285,217,-285,196,-285}),\r\n      new State(884, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,885,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(885, new int[] {151,40,152,42,134,-286,136,-286,135,-286,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-286,41,-286,93,-286,58,-286,44,-286,125,-286,217,-286,196,-286}),\r\n      new State(886, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,887,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(887, new int[] {151,40,152,42,134,-287,136,-287,135,-287,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-287,41,-287,93,-287,58,-287,44,-287,125,-287,217,-287,196,-287}),\r\n      new State(888, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,889,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(889, new int[] {151,40,152,42,134,-288,136,-288,135,-288,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-288,41,-288,93,-288,58,-288,44,-288,125,-288,217,-288,196,-288}),\r\n      new State(890, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,891,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(891, new int[] {151,40,152,42,134,-289,136,-289,135,-289,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-289,41,-289,93,-289,58,-289,44,-289,125,-289,217,-289,196,-289}),\r\n      new State(892, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,893,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(893, new int[] {151,40,152,42,134,-290,136,-290,135,-290,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-290,41,-290,93,-290,58,-290,44,-290,125,-290,217,-290,196,-290}),\r\n      new State(894, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,895,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(895, new int[] {151,40,152,42,134,-291,136,-291,135,-291,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-291,41,-291,93,-291,58,-291,44,-291,125,-291,217,-291,196,-291}),\r\n      new State(896, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,897,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(897, new int[] {151,40,152,42,134,-292,136,-292,135,-292,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-292,41,-292,93,-292,58,-292,44,-292,125,-292,217,-292,196,-292}),\r\n      new State(898, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,899,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(899, new int[] {151,40,152,42,134,-293,136,-293,135,-293,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-293,41,-293,93,-293,58,-293,44,-293,125,-293,217,-293,196,-293}),\r\n      new State(900, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,901,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(901, new int[] {151,40,152,42,134,-294,136,-294,135,-294,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-294,41,-294,93,-294,58,-294,44,-294,125,-294,217,-294,196,-294}),\r\n      new State(902, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,903,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(903, new int[] {151,40,152,42,134,-295,136,-295,135,-295,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132,59,-295,41,-295,93,-295,58,-295,44,-295,125,-295,217,-295,196,-295}),\r\n      new State(904, -299),\r\n      new State(905, -301),\r\n      new State(906, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,907,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(907, new int[] {125,908,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(908, -492),\r\n      new State(909, new int[] {123,169,36,-507,174,-507}),\r\n      new State(910, new int[] {40,911}),\r\n      new State(911, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,912,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(912, new int[] {41,913}),\r\n      new State(913, -396),\r\n      new State(914, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,915,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(915, new int[] {125,916,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(916, -202),\r\n      new State(917, new int[] {40,918}),\r\n      new State(918, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,340,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,38,689,260,691,41,-206}, new int[] {-81,919,-80,158,-79,184,-32,161,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-35,693}),\r\n      new State(919, new int[] {41,920}),\r\n      new State(920, -203),\r\n      new State(921, -504),\r\n      new State(922, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,923,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(923, new int[] {125,924,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(924, -505),\r\n      new State(925, -501),\r\n      new State(926, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,927,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(927, new int[] {151,40,152,42,134,-339,136,-339,135,-339,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,-339,59,-339,41,-339,93,-339,58,-339,44,-339,125,-339,217,-339,196,-339}),\r\n      new State(928, new int[] {174,167,36,168,172,11,258,114,256,116,207,190,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,138,314,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462}, new int[] {-32,929,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-4,113,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428}),\r\n      new State(929, new int[] {125,930,151,40,152,42,134,44,136,46,135,48,124,50,38,52,94,54,46,56,43,58,45,60,42,62,164,64,47,66,37,68,159,70,160,72,155,74,156,76,153,78,154,80,60,82,157,84,62,86,158,88,166,90,63,132}),\r\n      new State(930, -503),\r\n      new State(931, -403),\r\n      new State(932, -107, new int[] {-30,933}),\r\n      new State(933, new int[] {189,934,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(934, new int[] {59,935}),\r\n      new State(935, -180),\r\n      new State(936, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,310,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,462,209,574,192,579,245,588,248,599,244,602,194,605,59,6}, new int[] {-15,937,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611}),\r\n      new State(937, -186),\r\n      new State(938, -119, new int[] {-181,939}),\r\n      new State(939, -107, new int[] {-30,940}),\r\n      new State(940, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,183,-183,184,-183,185,-183,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-68,941,-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(941, new int[] {183,945,184,949,185,-187}, new int[] {-70,942}),\r\n      new State(942, new int[] {185,943}),\r\n      new State(943, new int[] {59,944}),\r\n      new State(944, -120),\r\n      new State(945, new int[] {40,37}, new int[] {-33,946}),\r\n      new State(946, new int[] {58,947}),\r\n      new State(947, -107, new int[] {-30,948}),\r\n      new State(948, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,183,-184,184,-184,185,-184,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(949, new int[] {58,950}),\r\n      new State(950, -107, new int[] {-30,951}),\r\n      new State(951, new int[] {172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,59,6,185,-188,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-31,15,-15,16,-17,17,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-16,611,-21,616,-22,617,-46,628,-45,633,-25,634,-44,635}),\r\n      new State(952, new int[] {258,117,172,11,123,-27}, new int[] {-174,953,-169,991,-4,113}),\r\n      new State(953, new int[] {123,954}),\r\n      new State(954, -33, new int[] {-19,955}),\r\n      new State(955, new int[] {125,956,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,259,960,204,-92,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-20,957,-17,958,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-12,959,-21,978,-22,617,-46,628,-45,633,-25,979,-44,980,-29,990}),\r\n      new State(956, -28),\r\n      new State(957, -32),\r\n      new State(958, -34),\r\n      new State(959, -35),\r\n      new State(960, new int[] {203,970,204,975,258,969,172,-407}, new int[] {-9,961,-11,973}),\r\n      new State(961, new int[] {59,962,44,963}),\r\n      new State(962, -10),\r\n      new State(963, new int[] {258,969,172,-407}, new int[] {-11,964}),\r\n      new State(964, new int[] {172,11}, new int[] {-10,965,-169,966,-4,113}),\r\n      new State(965, -13),\r\n      new State(966, new int[] {258,100,196,967,59,-15,44,-15}),\r\n      new State(967, new int[] {172,11}, new int[] {-4,968}),\r\n      new State(968, -16),\r\n      new State(969, -408),\r\n      new State(970, new int[] {258,969,172,-407}, new int[] {-9,971,-11,973}),\r\n      new State(971, new int[] {59,972,44,963}),\r\n      new State(972, -11),\r\n      new State(973, new int[] {172,11}, new int[] {-10,974,-169,966,-4,113}),\r\n      new State(974, -14),\r\n      new State(975, new int[] {258,969,172,-407}, new int[] {-9,976,-11,973}),\r\n      new State(976, new int[] {59,977,44,963}),\r\n      new State(977, -12),\r\n      new State(978, -36),\r\n      new State(979, -37),\r\n      new State(980, new int[] {204,981,253,795,251,-55,252,-55,278,-55,249,-55,212,-55,213,-55}, new int[] {-160,636}),\r\n      new State(981, new int[] {172,11}, new int[] {-28,982,-27,984,-4,987}),\r\n      new State(982, new int[] {59,983}),\r\n      new State(983, -272),\r\n      new State(984, new int[] {44,985,59,-270}),\r\n      new State(985, new int[] {172,11}, new int[] {-28,986,-27,984,-4,987}),\r\n      new State(986, -269),\r\n      new State(987, new int[] {61,988}),\r\n      new State(988, new int[] {169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,172,11,258,114,256,116,207,243,174,167,36,168,219,508,91,519,43,523,45,525,238,408,262,412,34,367,261,400}, new int[] {-59,989,-53,496,-54,346,-55,497,-56,355,-58,498,-100,499,-168,503,-169,99,-4,113,-126,505,-122,162,-123,166,-1,172,-57,364,-62,527,-61,528}),\r\n      new State(989, -271),\r\n      new State(990, -38),\r\n      new State(991, new int[] {59,996,258,100,123,-29}, new int[] {-175,992}),\r\n      new State(992, new int[] {123,993}),\r\n      new State(993, -33, new int[] {-19,994}),\r\n      new State(994, new int[] {125,995,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,116,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,259,960,204,-92,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-20,957,-17,958,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-12,959,-21,978,-22,617,-46,628,-45,633,-25,979,-44,980,-29,990}),\r\n      new State(995, -30),\r\n      new State(996, -31),\r\n      new State(997, -22),\r\n      new State(998, -23),\r\n      new State(999, -24),\r\n      new State(1000, -25),\r\n      new State(1001, -26),\r\n      new State(1002, new int[] {281,1005,59,-18,172,-18,123,-18,182,-18,188,-18,187,-18,190,-18,197,-18,201,-18,202,-18,205,-18,138,-18,206,-18,207,-18,186,-18,176,-18,174,-18,36,-18,258,-18,256,-18,40,-18,165,-18,168,-18,161,-18,162,-18,43,-18,45,-18,33,-18,126,-18,289,-18,290,-18,291,-18,292,-18,293,-18,294,-18,295,-18,296,-18,297,-18,298,-18,299,-18,300,-18,301,-18,302,-18,303,-18,304,-18,305,-18,306,-18,137,-18,64,-18,167,-18,219,-18,91,-18,218,-18,210,-18,211,-18,131,-18,181,-18,169,-18,170,-18,171,-18,180,-18,225,-18,226,-18,227,-18,221,-18,222,-18,223,-18,224,-18,257,-18,173,-18,34,-18,261,-18,238,-18,262,-18,96,-18,129,-18,130,-18,132,-18,133,-18,203,-18,209,-18,192,-18,245,-18,248,-18,244,-18,194,-18,259,-18,204,-18,253,-18,251,-18,252,-18,278,-18,249,-18,212,-18,213,-18,128,-18}, new int[] {-8,1003,-13,1004}),\r\n      new State(1003, new int[] {59,6,172,11,123,12,182,18,188,27,187,32,190,436,197,447,201,458,202,466,205,470,138,340,206,476,207,488,186,530,176,536,174,167,36,168,258,114,256,952,40,205,165,210,168,248,161,250,162,253,43,255,45,257,33,259,126,261,289,265,290,266,291,267,292,268,293,269,294,270,295,271,296,272,297,273,298,274,299,275,300,276,301,277,302,278,303,279,304,280,305,281,306,282,137,283,64,285,167,290,219,297,91,540,218,315,210,321,211,328,131,332,181,336,169,347,170,348,171,349,180,354,225,356,226,357,227,358,221,359,222,360,223,361,224,362,257,363,173,365,34,367,261,400,238,408,262,412,96,416,129,419,130,421,132,423,133,425,203,572,209,574,192,579,245,588,248,599,244,602,194,605,259,960,128,-3,204,-92,253,-92,251,-92,252,-92,278,-92,249,-92,212,-92,213,-92}, new int[] {-7,4,-16,5,-6,7,-17,8,-4,9,-35,474,-18,537,-32,538,-109,136,-107,137,-110,150,-126,151,-122,162,-123,166,-1,172,-100,177,-168,185,-169,99,-97,195,-96,199,-58,200,-39,216,-37,217,-113,218,-40,247,-38,263,-36,287,-33,292,-34,293,-60,344,-53,345,-54,346,-55,350,-56,355,-57,364,-61,366,-62,407,-154,427,-155,428,-12,997,-26,998,-21,999,-22,617,-46,628,-45,633,-25,1000,-44,980,-29,1001}),\r\n      new State(1004, -8),\r\n      new State(1005, new int[] {256,1006}),\r\n      new State(1006, new int[] {172,11}, new int[] {-169,1007,-4,113}),\r\n      new State(1007, new int[] {59,1008,258,100}),\r\n      new State(1008, -9),\r\n      new State(1009, -7),\r\n    };\r\n    #endregion\r\n\r\n    #region rules\r\n    rules = new Rule[]\r\n    {\r\n    default(Rule),\r\n    new Rule(-172, new int[]{-5,128}),\r\n    new Rule(-5, new int[]{-8}),\r\n    new Rule(-5, new int[]{-14,-8}),\r\n    new Rule(-173, new int[]{44}),\r\n    new Rule(-173, new int[]{}),\r\n    new Rule(-4, new int[]{172}),\r\n    new Rule(-14, new int[]{-13}),\r\n    new Rule(-14, new int[]{-14,-13}),\r\n    new Rule(-13, new int[]{281,256,-169,59}),\r\n    new Rule(-12, new int[]{259,-9,59}),\r\n    new Rule(-12, new int[]{259,203,-9,59}),\r\n    new Rule(-12, new int[]{259,204,-9,59}),\r\n    new Rule(-9, new int[]{-9,44,-11,-10}),\r\n    new Rule(-9, new int[]{-11,-10}),\r\n    new Rule(-10, new int[]{-169}),\r\n    new Rule(-10, new int[]{-169,196,-4}),\r\n    new Rule(-8, new int[]{-8,-7}),\r\n    new Rule(-8, new int[]{}),\r\n    new Rule(-7, new int[]{-16}),\r\n    new Rule(-7, new int[]{-6}),\r\n    new Rule(-6, new int[]{-17}),\r\n    new Rule(-6, new int[]{-12}),\r\n    new Rule(-6, new int[]{-26}),\r\n    new Rule(-6, new int[]{-21}),\r\n    new Rule(-6, new int[]{-25}),\r\n    new Rule(-6, new int[]{-29}),\r\n    new Rule(-174, new int[]{}),\r\n    new Rule(-26, new int[]{256,-174,123,-19,125}),\r\n    new Rule(-175, new int[]{}),\r\n    new Rule(-26, new int[]{256,-169,-175,123,-19,125}),\r\n    new Rule(-26, new int[]{256,-169,59}),\r\n    new Rule(-19, new int[]{-19,-20}),\r\n    new Rule(-19, new int[]{}),\r\n    new Rule(-20, new int[]{-17}),\r\n    new Rule(-20, new int[]{-12}),\r\n    new Rule(-20, new int[]{-21}),\r\n    new Rule(-20, new int[]{-25}),\r\n    new Rule(-20, new int[]{-29}),\r\n    new Rule(-176, new int[]{}),\r\n    new Rule(-177, new int[]{}),\r\n    new Rule(-21, new int[]{-22,-4,-74,-176,40,-73,41,-177,123,-30,125}),\r\n    new Rule(-22, new int[]{203}),\r\n    new Rule(-22, new int[]{-46,203}),\r\n    new Rule(-22, new int[]{203,38}),\r\n    new Rule(-22, new int[]{-46,203,38}),\r\n    new Rule(-24, new int[]{212}),\r\n    new Rule(-24, new int[]{213}),\r\n    new Rule(-178, new int[]{}),\r\n    new Rule(-25, new int[]{-44,-160,-159,-161,-24,-4,-74,-178,-167,-138,123,-136,125}),\r\n    new Rule(-179, new int[]{}),\r\n    new Rule(-25, new int[]{-44,-160,-159,-161,249,-4,-74,-179,-102,123,-136,125}),\r\n    new Rule(-159, new int[]{}),\r\n    new Rule(-159, new int[]{251}),\r\n    new Rule(-159, new int[]{252}),\r\n    new Rule(-160, new int[]{}),\r\n    new Rule(-160, new int[]{253}),\r\n    new Rule(-161, new int[]{}),\r\n    new Rule(-161, new int[]{278}),\r\n    new Rule(-167, new int[]{}),\r\n    new Rule(-167, new int[]{215,-100}),\r\n    new Rule(-102, new int[]{}),\r\n    new Rule(-102, new int[]{215,-101}),\r\n    new Rule(-138, new int[]{}),\r\n    new Rule(-138, new int[]{250,-101}),\r\n    new Rule(-101, new int[]{-100}),\r\n    new Rule(-101, new int[]{-101,44,-100}),\r\n    new Rule(-74, new int[]{279,-75,280}),\r\n    new Rule(-74, new int[]{279,-76,280}),\r\n    new Rule(-74, new int[]{279,-75,44,-76,280}),\r\n    new Rule(-74, new int[]{}),\r\n    new Rule(-75, new int[]{-75,44,-77}),\r\n    new Rule(-75, new int[]{-77}),\r\n    new Rule(-76, new int[]{-76,44,-78}),\r\n    new Rule(-76, new int[]{-78}),\r\n    new Rule(-77, new int[]{-44,-4}),\r\n    new Rule(-78, new int[]{-44,-4,61,-100}),\r\n    new Rule(-78, new int[]{-44,-4,61,-105}),\r\n    new Rule(-105, new int[]{282}),\r\n    new Rule(-105, new int[]{283}),\r\n    new Rule(-105, new int[]{284}),\r\n    new Rule(-105, new int[]{285}),\r\n    new Rule(-105, new int[]{286}),\r\n    new Rule(-105, new int[]{287}),\r\n    new Rule(-105, new int[]{288}),\r\n    new Rule(-105, new int[]{219}),\r\n    new Rule(-104, new int[]{279,-99,280}),\r\n    new Rule(-104, new int[]{}),\r\n    new Rule(-46, new int[]{-46,-45}),\r\n    new Rule(-46, new int[]{-45}),\r\n    new Rule(-45, new int[]{91,-48,93}),\r\n    new Rule(-45, new int[]{91,-4,58,-48,93}),\r\n    new Rule(-44, new int[]{}),\r\n    new Rule(-44, new int[]{-46}),\r\n    new Rule(-48, new int[]{-48,44,-47}),\r\n    new Rule(-48, new int[]{-47}),\r\n    new Rule(-47, new int[]{-168}),\r\n    new Rule(-47, new int[]{-168,40,-52,41}),\r\n    new Rule(-47, new int[]{-168,40,-49,41}),\r\n    new Rule(-47, new int[]{-168,40,-52,44,-49,41}),\r\n    new Rule(-52, new int[]{-52,44,-51}),\r\n    new Rule(-52, new int[]{-51}),\r\n    new Rule(-49, new int[]{-49,44,-50}),\r\n    new Rule(-49, new int[]{-50}),\r\n    new Rule(-51, new int[]{-32}),\r\n    new Rule(-50, new int[]{174,217,-32}),\r\n    new Rule(-30, new int[]{-30,-31}),\r\n    new Rule(-30, new int[]{}),\r\n    new Rule(-31, new int[]{-15}),\r\n    new Rule(-31, new int[]{-21}),\r\n    new Rule(-31, new int[]{-25}),\r\n    new Rule(-16, new int[]{59}),\r\n    new Rule(-18, new int[]{-32,59}),\r\n    new Rule(-15, new int[]{-17}),\r\n    new Rule(-15, new int[]{-16}),\r\n    new Rule(-17, new int[]{-4,58}),\r\n    new Rule(-17, new int[]{123,-30,125}),\r\n    new Rule(-180, new int[]{}),\r\n    new Rule(-17, new int[]{182,-33,-180,-15,-67,-69}),\r\n    new Rule(-181, new int[]{}),\r\n    new Rule(-17, new int[]{182,-33,58,-181,-30,-68,-70,185,59}),\r\n    new Rule(-182, new int[]{}),\r\n    new Rule(-17, new int[]{188,-33,-182,-66}),\r\n    new Rule(-17, new int[]{187,-15,188,-33,59}),\r\n    new Rule(-183, new int[]{}),\r\n    new Rule(-17, new int[]{190,40,-42,59,-42,59,-42,41,-183,-63}),\r\n    new Rule(-184, new int[]{}),\r\n    new Rule(-17, new int[]{197,-33,-184,-129}),\r\n    new Rule(-17, new int[]{201,59}),\r\n    new Rule(-17, new int[]{201,-32,59}),\r\n    new Rule(-17, new int[]{202,59}),\r\n    new Rule(-17, new int[]{202,-32,59}),\r\n    new Rule(-17, new int[]{205,59}),\r\n    new Rule(-17, new int[]{205,-32,59}),\r\n    new Rule(-17, new int[]{-35,59}),\r\n    new Rule(-17, new int[]{206,-125,59}),\r\n    new Rule(-17, new int[]{207,-119,59}),\r\n    new Rule(-17, new int[]{186,-41,59}),\r\n    new Rule(-17, new int[]{176}),\r\n    new Rule(-17, new int[]{-18}),\r\n    new Rule(-17, new int[]{209,40,-115,41,59}),\r\n    new Rule(-17, new int[]{192,40,-109,196,-43,-132,41,-64}),\r\n    new Rule(-17, new int[]{192,40,-39,196,-113,-132,41,-64}),\r\n    new Rule(-17, new int[]{192,40,-109,196,218,40,-116,41,41,-64}),\r\n    new Rule(-185, new int[]{}),\r\n    new Rule(-17, new int[]{245,-185,123,-30,125,-151,-153}),\r\n    new Rule(-17, new int[]{248,-32,59}),\r\n    new Rule(-17, new int[]{244,-4,59}),\r\n    new Rule(-17, new int[]{194,40,-186,41,-65}),\r\n    new Rule(-151, new int[]{-152}),\r\n    new Rule(-151, new int[]{}),\r\n    new Rule(-152, new int[]{-152,246,40,-100,174,41,123,-30,125}),\r\n    new Rule(-152, new int[]{246,40,-100,174,41,123,-30,125}),\r\n    new Rule(-153, new int[]{}),\r\n    new Rule(-153, new int[]{247,123,-30,125}),\r\n    new Rule(-2, new int[]{}),\r\n    new Rule(-2, new int[]{38}),\r\n    new Rule(-3, new int[]{}),\r\n    new Rule(-3, new int[]{260}),\r\n    new Rule(-132, new int[]{}),\r\n    new Rule(-132, new int[]{217,-43}),\r\n    new Rule(-43, new int[]{-2,-113}),\r\n    new Rule(-63, new int[]{-15}),\r\n    new Rule(-63, new int[]{58,-30,191,59}),\r\n    new Rule(-64, new int[]{-15}),\r\n    new Rule(-64, new int[]{58,-30,193,59}),\r\n    new Rule(-65, new int[]{-15}),\r\n    new Rule(-65, new int[]{58,-30,195,59}),\r\n    new Rule(-186, new int[]{-4,61,-59}),\r\n    new Rule(-186, new int[]{-186,44,-4,61,-59}),\r\n    new Rule(-129, new int[]{123,-130,125}),\r\n    new Rule(-129, new int[]{123,59,-130,125}),\r\n    new Rule(-129, new int[]{58,-130,198,59}),\r\n    new Rule(-129, new int[]{58,59,-130,198,59}),\r\n    new Rule(-130, new int[]{}),\r\n    new Rule(-130, new int[]{-130,199,-32,-187,-30}),\r\n    new Rule(-130, new int[]{-130,200,-187,-30}),\r\n    new Rule(-187, new int[]{58}),\r\n    new Rule(-187, new int[]{59}),\r\n    new Rule(-66, new int[]{-15}),\r\n    new Rule(-66, new int[]{58,-30,189,59}),\r\n    new Rule(-67, new int[]{}),\r\n    new Rule(-67, new int[]{-67,183,-33,-15}),\r\n    new Rule(-68, new int[]{}),\r\n    new Rule(-68, new int[]{-68,183,-33,58,-30}),\r\n    new Rule(-69, new int[]{}),\r\n    new Rule(-69, new int[]{184,-15}),\r\n    new Rule(-70, new int[]{}),\r\n    new Rule(-70, new int[]{184,58,-30}),\r\n    new Rule(-73, new int[]{-72}),\r\n    new Rule(-73, new int[]{}),\r\n    new Rule(-72, new int[]{-71}),\r\n    new Rule(-72, new int[]{-72,44,-71}),\r\n    new Rule(-71, new int[]{-44,-106,-2,-3,174}),\r\n    new Rule(-71, new int[]{-44,-106,-2,-3,174,61,-59}),\r\n    new Rule(-106, new int[]{}),\r\n    new Rule(-106, new int[]{-100}),\r\n    new Rule(-106, new int[]{220}),\r\n    new Rule(-106, new int[]{-105}),\r\n    new Rule(-82, new int[]{-83}),\r\n    new Rule(-82, new int[]{}),\r\n    new Rule(-83, new int[]{-83,91,-92,93}),\r\n    new Rule(-83, new int[]{-83,123,-32,125}),\r\n    new Rule(-83, new int[]{-104,40,-81,41}),\r\n    new Rule(-81, new int[]{-80}),\r\n    new Rule(-81, new int[]{-35}),\r\n    new Rule(-81, new int[]{}),\r\n    new Rule(-80, new int[]{-80,44,-79}),\r\n    new Rule(-80, new int[]{-79}),\r\n    new Rule(-79, new int[]{-32}),\r\n    new Rule(-79, new int[]{38,-113}),\r\n    new Rule(-79, new int[]{260,-32}),\r\n    new Rule(-125, new int[]{-125,44,-117}),\r\n    new Rule(-125, new int[]{-117}),\r\n    new Rule(-117, new int[]{174}),\r\n    new Rule(-117, new int[]{36,-109}),\r\n    new Rule(-117, new int[]{36,123,-32,125}),\r\n    new Rule(-119, new int[]{-119,44,-118}),\r\n    new Rule(-119, new int[]{-118}),\r\n    new Rule(-118, new int[]{174}),\r\n    new Rule(-118, new int[]{174,61,-59}),\r\n    new Rule(-136, new int[]{-136,-137}),\r\n    new Rule(-136, new int[]{}),\r\n    new Rule(-137, new int[]{-44,-162,-121,59}),\r\n    new Rule(-137, new int[]{-44,204,-135,59}),\r\n    new Rule(-188, new int[]{}),\r\n    new Rule(-189, new int[]{}),\r\n    new Rule(-137, new int[]{-44,-163,203,-2,-4,-74,-188,40,-73,41,-84,-189,-131}),\r\n    new Rule(-137, new int[]{-140}),\r\n    new Rule(-140, new int[]{259,-171,-141}),\r\n    new Rule(-141, new int[]{59}),\r\n    new Rule(-141, new int[]{123,-142,125}),\r\n    new Rule(-142, new int[]{}),\r\n    new Rule(-142, new int[]{-143}),\r\n    new Rule(-143, new int[]{-144}),\r\n    new Rule(-143, new int[]{-143,-144}),\r\n    new Rule(-144, new int[]{-145}),\r\n    new Rule(-144, new int[]{-148}),\r\n    new Rule(-145, new int[]{-147,214,-171,59}),\r\n    new Rule(-146, new int[]{-4}),\r\n    new Rule(-146, new int[]{-147}),\r\n    new Rule(-147, new int[]{-168,242,-4}),\r\n    new Rule(-148, new int[]{-146,196,-149,-4,59}),\r\n    new Rule(-148, new int[]{-146,196,-165,59}),\r\n    new Rule(-149, new int[]{}),\r\n    new Rule(-149, new int[]{-165}),\r\n    new Rule(-84, new int[]{}),\r\n    new Rule(-84, new int[]{58,-4,40,-81,41}),\r\n    new Rule(-131, new int[]{59}),\r\n    new Rule(-131, new int[]{123,-30,125}),\r\n    new Rule(-162, new int[]{-164}),\r\n    new Rule(-162, new int[]{208}),\r\n    new Rule(-163, new int[]{}),\r\n    new Rule(-163, new int[]{-164}),\r\n    new Rule(-164, new int[]{-165}),\r\n    new Rule(-164, new int[]{-164,-165}),\r\n    new Rule(-165, new int[]{255}),\r\n    new Rule(-165, new int[]{254}),\r\n    new Rule(-165, new int[]{253}),\r\n    new Rule(-165, new int[]{207}),\r\n    new Rule(-165, new int[]{251}),\r\n    new Rule(-165, new int[]{252}),\r\n    new Rule(-121, new int[]{-121,44,-120}),\r\n    new Rule(-121, new int[]{-120}),\r\n    new Rule(-120, new int[]{174}),\r\n    new Rule(-120, new int[]{174,61,-59}),\r\n    new Rule(-135, new int[]{-134,44,-135}),\r\n    new Rule(-135, new int[]{-134}),\r\n    new Rule(-134, new int[]{-4,61,-59}),\r\n    new Rule(-28, new int[]{-27,44,-28}),\r\n    new Rule(-28, new int[]{-27}),\r\n    new Rule(-27, new int[]{-4,61,-59}),\r\n    new Rule(-29, new int[]{-44,204,-28,59}),\r\n    new Rule(-41, new int[]{-41,44,-32}),\r\n    new Rule(-41, new int[]{-32}),\r\n    new Rule(-42, new int[]{}),\r\n    new Rule(-42, new int[]{-41}),\r\n    new Rule(-32, new int[]{-109}),\r\n    new Rule(-32, new int[]{-39}),\r\n    new Rule(-33, new int[]{40,-32,41}),\r\n    new Rule(-33, new int[]{40,-35,41}),\r\n    new Rule(-37, new int[]{-113,61,-32}),\r\n    new Rule(-37, new int[]{-113,61,38,-109}),\r\n    new Rule(-37, new int[]{-113,61,38,165,-98,-139}),\r\n    new Rule(-37, new int[]{-113,139,-32}),\r\n    new Rule(-37, new int[]{-113,140,-32}),\r\n    new Rule(-37, new int[]{-113,141,-32}),\r\n    new Rule(-37, new int[]{-113,150,-32}),\r\n    new Rule(-37, new int[]{-113,142,-32}),\r\n    new Rule(-37, new int[]{-113,143,-32}),\r\n    new Rule(-37, new int[]{-113,144,-32}),\r\n    new Rule(-37, new int[]{-113,145,-32}),\r\n    new Rule(-37, new int[]{-113,146,-32}),\r\n    new Rule(-37, new int[]{-113,147,-32}),\r\n    new Rule(-37, new int[]{-113,148,-32}),\r\n    new Rule(-37, new int[]{-113,149,-32}),\r\n    new Rule(-39, new int[]{-37}),\r\n    new Rule(-39, new int[]{-40}),\r\n    new Rule(-39, new int[]{168,-32}),\r\n    new Rule(-39, new int[]{-113,161}),\r\n    new Rule(-39, new int[]{161,-113}),\r\n    new Rule(-39, new int[]{-113,162}),\r\n    new Rule(-39, new int[]{162,-113}),\r\n    new Rule(-39, new int[]{43,-32}),\r\n    new Rule(-39, new int[]{45,-32}),\r\n    new Rule(-39, new int[]{33,-32}),\r\n    new Rule(-39, new int[]{126,-32}),\r\n    new Rule(-39, new int[]{-38,-32}),\r\n    new Rule(-39, new int[]{137,-32}),\r\n    new Rule(-39, new int[]{64,-32}),\r\n    new Rule(-39, new int[]{-32,151,-32}),\r\n    new Rule(-39, new int[]{-32,152,-32}),\r\n    new Rule(-39, new int[]{-32,134,-32}),\r\n    new Rule(-39, new int[]{-32,136,-32}),\r\n    new Rule(-39, new int[]{-32,135,-32}),\r\n    new Rule(-39, new int[]{-32,124,-32}),\r\n    new Rule(-39, new int[]{-32,38,-32}),\r\n    new Rule(-39, new int[]{-32,94,-32}),\r\n    new Rule(-39, new int[]{-36}),\r\n    new Rule(-39, new int[]{-32,43,-32}),\r\n    new Rule(-39, new int[]{-32,45,-32}),\r\n    new Rule(-39, new int[]{-32,42,-32}),\r\n    new Rule(-39, new int[]{-32,164,-32}),\r\n    new Rule(-39, new int[]{-32,47,-32}),\r\n    new Rule(-39, new int[]{-32,37,-32}),\r\n    new Rule(-39, new int[]{-32,159,-32}),\r\n    new Rule(-39, new int[]{-32,160,-32}),\r\n    new Rule(-39, new int[]{-32,155,-32}),\r\n    new Rule(-39, new int[]{-32,156,-32}),\r\n    new Rule(-39, new int[]{-32,153,-32}),\r\n    new Rule(-39, new int[]{-32,154,-32}),\r\n    new Rule(-39, new int[]{-32,60,-32}),\r\n    new Rule(-39, new int[]{-32,157,-32}),\r\n    new Rule(-39, new int[]{-32,62,-32}),\r\n    new Rule(-39, new int[]{-32,158,-32}),\r\n    new Rule(-39, new int[]{-32,166,-98}),\r\n    new Rule(-39, new int[]{167,-98}),\r\n    new Rule(-39, new int[]{-33}),\r\n    new Rule(-39, new int[]{-32,63,-32,58,-32}),\r\n    new Rule(-39, new int[]{-32,63,58,-32}),\r\n    new Rule(-39, new int[]{-34}),\r\n    new Rule(-39, new int[]{-34,91,-32,93}),\r\n    new Rule(-39, new int[]{138}),\r\n    new Rule(-39, new int[]{218,40,-116,41,61,-32}),\r\n    new Rule(-39, new int[]{210,40,-115,41}),\r\n    new Rule(-39, new int[]{211,40,-109,41}),\r\n    new Rule(-39, new int[]{131,40,-32,41}),\r\n    new Rule(-39, new int[]{181,-91}),\r\n    new Rule(-39, new int[]{-60}),\r\n    new Rule(-39, new int[]{-55,91,-32,93}),\r\n    new Rule(-39, new int[]{96,-93,96}),\r\n    new Rule(-39, new int[]{129,-32}),\r\n    new Rule(-39, new int[]{130,-32}),\r\n    new Rule(-39, new int[]{132,-32}),\r\n    new Rule(-39, new int[]{133,-32}),\r\n    new Rule(-39, new int[]{-154}),\r\n    new Rule(-35, new int[]{138,-32}),\r\n    new Rule(-35, new int[]{138,-32,217,-32}),\r\n    new Rule(-34, new int[]{219,40,-87,41}),\r\n    new Rule(-34, new int[]{91,-87,93}),\r\n    new Rule(-40, new int[]{165,-98,-139}),\r\n    new Rule(-190, new int[]{}),\r\n    new Rule(-154, new int[]{-155,-73,41,-158,-190,123,-30,125}),\r\n    new Rule(-155, new int[]{203,40}),\r\n    new Rule(-155, new int[]{207,203,40}),\r\n    new Rule(-155, new int[]{203,38,40}),\r\n    new Rule(-155, new int[]{207,203,38,40}),\r\n    new Rule(-158, new int[]{}),\r\n    new Rule(-158, new int[]{259,40,-157,41}),\r\n    new Rule(-157, new int[]{-157,44,-156}),\r\n    new Rule(-157, new int[]{-156}),\r\n    new Rule(-156, new int[]{-2,174}),\r\n    new Rule(-36, new int[]{-36,46,-32}),\r\n    new Rule(-36, new int[]{-32,46,-32}),\r\n    new Rule(-38, new int[]{289}),\r\n    new Rule(-38, new int[]{290}),\r\n    new Rule(-38, new int[]{291}),\r\n    new Rule(-38, new int[]{292}),\r\n    new Rule(-38, new int[]{293}),\r\n    new Rule(-38, new int[]{294}),\r\n    new Rule(-38, new int[]{295}),\r\n    new Rule(-38, new int[]{296}),\r\n    new Rule(-38, new int[]{297}),\r\n    new Rule(-38, new int[]{298}),\r\n    new Rule(-38, new int[]{299}),\r\n    new Rule(-38, new int[]{300}),\r\n    new Rule(-38, new int[]{301}),\r\n    new Rule(-38, new int[]{302}),\r\n    new Rule(-38, new int[]{303}),\r\n    new Rule(-38, new int[]{304}),\r\n    new Rule(-38, new int[]{305}),\r\n    new Rule(-38, new int[]{306}),\r\n    new Rule(-96, new int[]{-168,-104,40,-81,41}),\r\n    new Rule(-96, new int[]{-58,-104,40,-81,41}),\r\n    new Rule(-96, new int[]{-100,242,-126,-104,40,-81,41}),\r\n    new Rule(-96, new int[]{-126,242,-126,-104,40,-81,41}),\r\n    new Rule(-96, new int[]{-126,-104,40,-81,41}),\r\n    new Rule(-100, new int[]{-168,-104}),\r\n    new Rule(-100, new int[]{207}),\r\n    new Rule(-98, new int[]{-168,-104}),\r\n    new Rule(-98, new int[]{-112,-104}),\r\n    new Rule(-98, new int[]{-105}),\r\n    new Rule(-98, new int[]{207}),\r\n    new Rule(-99, new int[]{-98}),\r\n    new Rule(-99, new int[]{-99,44,-98}),\r\n    new Rule(-112, new int[]{-110,216,-111,-133}),\r\n    new Rule(-112, new int[]{-110}),\r\n    new Rule(-11, new int[]{}),\r\n    new Rule(-11, new int[]{258}),\r\n    new Rule(-168, new int[]{-169}),\r\n    new Rule(-168, new int[]{258,-169}),\r\n    new Rule(-168, new int[]{256,258,-169}),\r\n    new Rule(-169, new int[]{-4}),\r\n    new Rule(-169, new int[]{-169,258,-170}),\r\n    new Rule(-170, new int[]{-4}),\r\n    new Rule(-170, new int[]{218}),\r\n    new Rule(-170, new int[]{282}),\r\n    new Rule(-170, new int[]{283}),\r\n    new Rule(-170, new int[]{284}),\r\n    new Rule(-170, new int[]{285}),\r\n    new Rule(-170, new int[]{286}),\r\n    new Rule(-170, new int[]{287}),\r\n    new Rule(-170, new int[]{288}),\r\n    new Rule(-170, new int[]{219}),\r\n    new Rule(-170, new int[]{251}),\r\n    new Rule(-171, new int[]{-168}),\r\n    new Rule(-171, new int[]{-171,44,-168}),\r\n    new Rule(-133, new int[]{-133,216,-111}),\r\n    new Rule(-133, new int[]{}),\r\n    new Rule(-91, new int[]{}),\r\n    new Rule(-91, new int[]{40,41}),\r\n    new Rule(-91, new int[]{-33}),\r\n    new Rule(-139, new int[]{}),\r\n    new Rule(-139, new int[]{40,-81,41}),\r\n    new Rule(-59, new int[]{-53}),\r\n    new Rule(-59, new int[]{219,40,-89,41}),\r\n    new Rule(-59, new int[]{91,-89,93}),\r\n    new Rule(-59, new int[]{43,-59}),\r\n    new Rule(-59, new int[]{45,-59}),\r\n    new Rule(-59, new int[]{-62}),\r\n    new Rule(-59, new int[]{-61}),\r\n    new Rule(-53, new int[]{-54}),\r\n    new Rule(-53, new int[]{-56}),\r\n    new Rule(-53, new int[]{-58}),\r\n    new Rule(-53, new int[]{-57}),\r\n    new Rule(-54, new int[]{169}),\r\n    new Rule(-54, new int[]{170}),\r\n    new Rule(-54, new int[]{171}),\r\n    new Rule(-54, new int[]{-55}),\r\n    new Rule(-55, new int[]{180}),\r\n    new Rule(-56, new int[]{225}),\r\n    new Rule(-56, new int[]{226}),\r\n    new Rule(-56, new int[]{227}),\r\n    new Rule(-56, new int[]{221}),\r\n    new Rule(-56, new int[]{222}),\r\n    new Rule(-56, new int[]{223}),\r\n    new Rule(-56, new int[]{224}),\r\n    new Rule(-56, new int[]{257}),\r\n    new Rule(-57, new int[]{-168}),\r\n    new Rule(-58, new int[]{-100,242,-4}),\r\n    new Rule(-58, new int[]{-126,242,-4}),\r\n    new Rule(-58, new int[]{-100,242,212}),\r\n    new Rule(-60, new int[]{-53}),\r\n    new Rule(-60, new int[]{173}),\r\n    new Rule(-60, new int[]{-61}),\r\n    new Rule(-60, new int[]{-62}),\r\n    new Rule(-191, new int[]{}),\r\n    new Rule(-62, new int[]{238,-191,-93,239}),\r\n    new Rule(-192, new int[]{}),\r\n    new Rule(-62, new int[]{262,-192,-93,239}),\r\n    new Rule(-193, new int[]{}),\r\n    new Rule(-61, new int[]{34,-193,-93,34}),\r\n    new Rule(-194, new int[]{}),\r\n    new Rule(-61, new int[]{261,-194,-93,34}),\r\n    new Rule(-115, new int[]{-115,44,-113}),\r\n    new Rule(-115, new int[]{-113}),\r\n    new Rule(-113, new int[]{-109}),\r\n    new Rule(-109, new int[]{-107,216,-111,-82,-127}),\r\n    new Rule(-109, new int[]{-107}),\r\n    new Rule(-127, new int[]{-127,-128}),\r\n    new Rule(-127, new int[]{}),\r\n    new Rule(-128, new int[]{216,-111,-82}),\r\n    new Rule(-92, new int[]{}),\r\n    new Rule(-92, new int[]{-32}),\r\n    new Rule(-123, new int[]{174}),\r\n    new Rule(-123, new int[]{36,123,-32,125}),\r\n    new Rule(-122, new int[]{-122,91,-92,93}),\r\n    new Rule(-122, new int[]{-122,123,-32,125}),\r\n    new Rule(-122, new int[]{-123}),\r\n    new Rule(-126, new int[]{-122}),\r\n    new Rule(-126, new int[]{-1,-122}),\r\n    new Rule(-97, new int[]{-97,91,-92,93}),\r\n    new Rule(-97, new int[]{-97,123,-32,125}),\r\n    new Rule(-97, new int[]{-96}),\r\n    new Rule(-110, new int[]{-126}),\r\n    new Rule(-110, new int[]{-100,242,-126}),\r\n    new Rule(-110, new int[]{-126,242,-126}),\r\n    new Rule(-107, new int[]{-110}),\r\n    new Rule(-107, new int[]{-97}),\r\n    new Rule(-107, new int[]{40,-40,41}),\r\n    new Rule(-111, new int[]{-108}),\r\n    new Rule(-111, new int[]{-126}),\r\n    new Rule(-108, new int[]{-108,91,-92,93}),\r\n    new Rule(-108, new int[]{-108,123,-32,125}),\r\n    new Rule(-108, new int[]{-4}),\r\n    new Rule(-108, new int[]{123,-32,125}),\r\n    new Rule(-1, new int[]{36}),\r\n    new Rule(-1, new int[]{-1,36}),\r\n    new Rule(-116, new int[]{-116,44,-114}),\r\n    new Rule(-116, new int[]{-114}),\r\n    new Rule(-114, new int[]{-109}),\r\n    new Rule(-114, new int[]{218,40,-116,41}),\r\n    new Rule(-114, new int[]{}),\r\n    new Rule(-87, new int[]{}),\r\n    new Rule(-87, new int[]{-86,-173}),\r\n    new Rule(-86, new int[]{-86,44,-85}),\r\n    new Rule(-86, new int[]{-85}),\r\n    new Rule(-85, new int[]{-32}),\r\n    new Rule(-85, new int[]{-32,217,-32}),\r\n    new Rule(-85, new int[]{-32,217,38,-113}),\r\n    new Rule(-85, new int[]{38,-113}),\r\n    new Rule(-89, new int[]{}),\r\n    new Rule(-89, new int[]{-90,-173}),\r\n    new Rule(-90, new int[]{-90,44,-88}),\r\n    new Rule(-90, new int[]{-88}),\r\n    new Rule(-88, new int[]{-59,217,-59}),\r\n    new Rule(-88, new int[]{-59}),\r\n    new Rule(-93, new int[]{-93,-124}),\r\n    new Rule(-93, new int[]{-93,172}),\r\n    new Rule(-93, new int[]{-93,175}),\r\n    new Rule(-93, new int[]{-93,179}),\r\n    new Rule(-93, new int[]{-93,178}),\r\n    new Rule(-93, new int[]{-93,177}),\r\n    new Rule(-93, new int[]{-93,91}),\r\n    new Rule(-93, new int[]{-93,93}),\r\n    new Rule(-93, new int[]{-93,123}),\r\n    new Rule(-93, new int[]{-93,125}),\r\n    new Rule(-93, new int[]{-93,216}),\r\n    new Rule(-93, new int[]{}),\r\n    new Rule(-124, new int[]{174}),\r\n    new Rule(-195, new int[]{}),\r\n    new Rule(-124, new int[]{174,91,-195,-94,93}),\r\n    new Rule(-124, new int[]{174,216,172}),\r\n    new Rule(-124, new int[]{240,-32,125}),\r\n    new Rule(-124, new int[]{240,173,91,-32,93,125}),\r\n    new Rule(-124, new int[]{241,-109,125}),\r\n    new Rule(-94, new int[]{172}),\r\n    new Rule(-94, new int[]{175}),\r\n    new Rule(-94, new int[]{174}),\r\n    };\r\n    #endregion\r\n\r\n    nonTerminals = new string[] {\"\", \"simple_indirect_reference\", \"reference_opt\", \r\n      \"variadic_opt\", \"identifier\", \"start\", \"non_empty_top_statement\", \"top_statement\", \r\n      \"top_statement_list\", \"use_statement_content_list\", \"use_statement_content\", \r\n      \"ns_separator_opt\", \"use_statement\", \"import_statement\", \"import_statement_list\", \r\n      \"statement\", \"empty_statement\", \"non_empty_statement\", \"expression_statement\", \r\n      \"namespace_statement_list_opt\", \"namespace_statement\", \"function_declaration_statement\", \r\n      \"function_declaration_head\", \"ref_opt_identifier\", \"class_entry_type\", \r\n      \"class_declaration_statement\", \"namespace_declaration_statement\", \"global_constant_declarator\", \r\n      \"global_constant_declarator_list\", \"global_constant_declaration_statement\", \r\n      \"inner_statement_list_opt\", \"inner_statement\", \"expr\", \"parenthesis_expr\", \r\n      \"array_ex\", \"yield_ex\", \"concat_exprs\", \"assignment_expression\", \"cast_operation\", \r\n      \"expr_without_chain\", \"new_expr\", \"expression_list\", \"expression_list_opt\", \r\n      \"foreach_variable\", \"attributes_opt\", \"attributes_group\", \"attributes\", \r\n      \"attribute\", \"attribute_list\", \"attribute_named_arg_list\", \"attribute_named_arg\", \r\n      \"attribute_arg\", \"attribute_arg_list\", \"constant\", \"literal_constant\", \r\n      \"string_constant\", \"pseudo_constant\", \"global_constant\", \"class_constant\", \r\n      \"constant_inititalizer\", \"scalar_expr\", \"string_expr\", \"heredoc_expr\", \r\n      \"for_statement\", \"foreach_statement\", \"declare_statement\", \"while_statement\", \r\n      \"elseif_list_opt\", \"elseif_colon_list_opt\", \"else_opt\", \"else_colon_opt\", \r\n      \"formal_parameter\", \"formal_parameter_list\", \"formal_parameter_list_opt\", \r\n      \"type_parameter_list_opt\", \"type_parameter_list\", \"type_parameter_with_defaults_list\", \r\n      \"type_parameter_decl\", \"type_parameter_with_default_decl\", \"actual_argument\", \r\n      \"actual_argument_list\", \"actual_argument_list_opt\", \"actual_arguments_opt\", \r\n      \"non_empty_actual_arguments_opt\", \"base_ctor_call_opt\", \"array_item\", \"array_item_list\", \r\n      \"array_item_list_opt\", \"constant_array_item\", \"constant_array_item_list_opt\", \r\n      \"constant_array_item_list\", \"exit_expr_opt\", \"key_opt\", \"composite_string_opt\", \r\n      \"string_embedded_key\", \"unsupported_declare_list\", \"function_call\", \"keyed_function_call\", \r\n      \"type_ref\", \"type_ref_list\", \"qualified_static_type_ref\", \"interface_list\", \r\n      \"interface_extends_opt\", \"variable_name\", \"generic_dynamic_args_opt\", \"primitive_type\", \r\n      \"type_hint_opt\", \"chain_base_with_function_calls\", \"keyed_simple_field_name\", \r\n      \"chain\", \"chain_base\", \"keyed_field_name\", \"indirect_type_ref\", \"writable_chain\", \r\n      \"assignment_list_element_opt\", \"writable_chain_list\", \"assignment_list\", \r\n      \"global_var\", \"static_variable\", \"static_variable_list\", \"property_declarator\", \r\n      \"property_declarator_list\", \"keyed_compound_variable\", \"compound_variable\", \r\n      \"string_embedded_variable\", \"global_var_list\", \"keyed_variable\", \"member_access_chain_opt\", \r\n      \"member_access\", \"switch_case_list\", \"case_list_opt\", \"method_body\", \"foreach_optional_arg\", \r\n      \"keyed_field_names_opt\", \"class_constant_declarator\", \"class_constant_declarator_list\", \r\n      \"class_statement_list_opt\", \"class_statement\", \"implements_opt\", \"ctor_arguments_opt\", \r\n      \"trait_use_statement\", \"trait_adaptations\", \"trait_adaptation_list\", \"non_empty_trait_adaptation_list\", \r\n      \"trait_adaptation_statement\", \"trait_precedence\", \"trait_method_reference\", \r\n      \"trait_method_reference_fully_qualified\", \"trait_alias\", \"trait_modifiers\", \r\n      \"dynamic_class_name_variable_property\", \"catches_opt\", \"catches\", \"finally_opt\", \r\n      \"lambda_function_expression\", \"lambda_function_head_\", \"lambda_function_use_var\", \r\n      \"lambda_function_use_var_list\", \"lambda_function_use_vars\", \"modifier_opt\", \r\n      \"visibility_opt\", \"partial_opt\", \"property_modifiers\", \"member_modifiers_opt\", \r\n      \"member_modifiers\", \"member_modifier\", \"attribute_target_opt\", \"extends_opt\", \r\n      \"qualified_namespace_name\", \"namespace_name_list\", \"namespace_name_identifier\", \r\n      \"qualified_namespace_name_list\", \"$accept\", \"comma_opt\", \"@1\", \"@2\", \"@3\", \r\n      \"@4\", \"@5\", \"@6\", \"@7\", \"@8\", \"@9\", \"@10\", \"@11\", \"@12\", \"declare_list\", \r\n      \"case_separator\", \"@13\", \"@14\", \"@15\", \"@16\", \"@17\", \"@18\", \"@19\", \"@20\", \r\n      };\r\n  }\r\n\r\n  #endregion\r\n\r\n  protected override void DoAction(int action)\r\n  {\r\n    switch (action)\r\n    {\r\n      case 2: // start -> top_statement_list \r\n{ \r\n\t\t\tvar top_statements = StmtList(new Text.Span(0, sourceUnit.LineBreaks.TextLength), value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tastRoot = new GlobalCode(top_statements, sourceUnit);\r\n\t\t}\r\n        return;\r\n      case 3: // start -> import_statement_list top_statement_list \r\n{ \r\n\t\t\tvar top_statements = StmtList(new Text.Span(0, sourceUnit.LineBreaks.TextLength), value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tastRoot = new GlobalCode(top_statements, sourceUnit);\r\n\t\t}\r\n        return;\r\n      case 4: // comma_opt -> ',' \r\n{ /* nop */ }\r\n        return;\r\n      case 5: // comma_opt -> \r\n{ /* nop */ }\r\n        return;\r\n      case 6: // identifier -> T_STRING \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 7: // import_statement_list -> import_statement \r\n{ yyval.Object = new EmptyStmt(yypos); }\r\n        return;\r\n      case 8: // import_statement_list -> import_statement_list import_statement \r\n{ /*nop*/ }\r\n        return;\r\n      case 9: // import_statement -> T_IMPORT T_NAMESPACE namespace_name_list ';' \r\n{ /* nop */ yyval.Object = new EmptyStmt(yypos); AddImport( new QualifiedName( (List<string>)value_stack.array[value_stack.top-2].yyval.Object, false, true ) ); }\r\n        return;\r\n      case 10: // use_statement -> T_USE use_statement_content_list ';' \r\n{ yyval.Object = new EmptyStmt(yypos); AddAliases((List<KeyValuePair<string, QualifiedName>>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 11: // use_statement -> T_USE T_FUNCTION use_statement_content_list ';' \r\n{ yyval.Object = new EmptyStmt(yypos); AddFunctionAliases((List<KeyValuePair<string, QualifiedName>>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 12: // use_statement -> T_USE T_CONST use_statement_content_list ';' \r\n{ yyval.Object = new EmptyStmt(yypos); AddConstAliases((List<KeyValuePair<string, QualifiedName>>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 13: // use_statement_content_list -> use_statement_content_list ',' ns_separator_opt use_statement_content \r\n{ yyval.Object = ListAdd<KeyValuePair<string, QualifiedName>>(value_stack.array[value_stack.top-4].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 14: // use_statement_content_list -> ns_separator_opt use_statement_content \r\n{ yyval.Object = NewList<KeyValuePair<string, QualifiedName>>(value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 15: // use_statement_content -> namespace_name_list \r\n{ yyval.Object = new KeyValuePair<string, QualifiedName>(null, new QualifiedName((List<string>)value_stack.array[value_stack.top-1].yyval.Object, true, true)); }\r\n        return;\r\n      case 16: // use_statement_content -> namespace_name_list T_AS identifier \r\n{ yyval.Object = new KeyValuePair<string, QualifiedName>((string)value_stack.array[value_stack.top-1].yyval.Object, new QualifiedName((List<string>)value_stack.array[value_stack.top-3].yyval.Object, true, true)); }\r\n        return;\r\n      case 17: // top_statement_list -> top_statement_list top_statement \r\n{ yyval.Object = StatementListAdd(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 18: // top_statement_list -> \r\n{ yyval.Object = new List<Statement>(); }\r\n        return;\r\n      case 19: // top_statement -> empty_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 20: // top_statement -> non_empty_top_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 21: // non_empty_top_statement -> non_empty_statement \r\n{ yyval.Object = CheckGlobalStatement((Statement)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 22: // non_empty_top_statement -> use_statement \r\n{ /* nop */ }\r\n        return;\r\n      case 23: // non_empty_top_statement -> namespace_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 24: // non_empty_top_statement -> function_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 25: // non_empty_top_statement -> class_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 26: // non_empty_top_statement -> global_constant_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 27: // @1 -> \r\n{ \r\n\t\t\tcurrentNamespace = AnnotateDoc(new NamespaceDecl(yypos));\r\n\t\t}\r\n        return;\r\n      case 28: // namespace_declaration_statement -> T_NAMESPACE @1 '{' namespace_statement_list_opt '}' \r\n{\r\n\t\t\tcurrentNamespace.Statements = StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t\tcurrentNamespace.UpdatePosition(yypos);\r\n\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\tyyval.Object = currentNamespace;\r\n\t\t\tcurrentNamespace = null;\r\n\t\t}\r\n        return;\r\n      case 29: // @2 -> \r\n{ \r\n\t\t\tcurrentNamespace = AnnotateDoc(new NamespaceDecl(yypos, (List<string>)value_stack.array[value_stack.top-1].yyval.Object, false));\r\n\t\t}\r\n        return;\r\n      case 30: // namespace_declaration_statement -> T_NAMESPACE namespace_name_list @2 '{' namespace_statement_list_opt '}' \r\n{\r\n\t\t\tcurrentNamespace.Statements = StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t\tcurrentNamespace.UpdatePosition(yypos);\r\n\t\t\t\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\tyyval.Object = currentNamespace;\r\n\t\t\tcurrentNamespace = null;\r\n\t\t}\r\n        return;\r\n      case 31: // namespace_declaration_statement -> T_NAMESPACE namespace_name_list ';' \r\n{ \r\n\t\t\tyyval.Object = currentNamespace = AnnotateDoc(new NamespaceDecl(yypos, (List<string>)value_stack.array[value_stack.top-2].yyval.Object, true));\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\tcurrentNamespace.Statements = new List<Statement>();\r\n\t\t}\r\n        return;\r\n      case 32: // namespace_statement_list_opt -> namespace_statement_list_opt namespace_statement \r\n{ yyval.Object = StatementListAdd(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 33: // namespace_statement_list_opt -> \r\n{ yyval.Object = new List<Statement>(); }\r\n        return;\r\n      case 34: // namespace_statement -> non_empty_statement \r\n{ yyval.Object = CheckGlobalStatement((Statement)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 35: // namespace_statement -> use_statement \r\n{ /* nop */ }\r\n        return;\r\n      case 36: // namespace_statement -> function_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 37: // namespace_statement -> class_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 38: // namespace_statement -> global_constant_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 39: // @3 -> \r\n{\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 40: // @4 -> \r\n{ \r\n\t\t  EnterConditionalCode(); \r\n\t\t}\r\n        return;\r\n      case 41: // function_declaration_statement -> function_declaration_head identifier type_parameter_list_opt @3 '(' formal_parameter_list_opt ')' @4 '{' inner_statement_list_opt '}' \r\n{\r\n\t\t\tvar func_name = (string)value_stack.array[value_stack.top-10].yyval.Object;\r\n\t\t\tvar attrs_ref = (Tuple<List<CustomAttribute>,bool>)value_stack.array[value_stack.top-11].yyval.Object;\r\n\t\t\t\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)value_stack.array[value_stack.top-9].yyval.Object, func_name);\r\n\t\t\t\r\n\t\t\tyyval.Object = new FunctionDecl(sourceUnit, value_stack.array[value_stack.top-10].yypos, yypos, GetHeadingEnd(value_stack.array[value_stack.top-5].yypos), GetBodyStart(value_stack.array[value_stack.top-3].yypos), \r\n\t\t\t\tIsCurrentCodeOneLevelConditional, GetScope(), \r\n\t\t\t\tPhpMemberAttributes.Public | PhpMemberAttributes.Static,\r\n\t\t\t\tfunc_name, currentNamespace, attrs_ref.Item2, \r\n\t\t\t  (List<FormalParam>)value_stack.array[value_stack.top-6].yyval.Object, (List<FormalTypeParam>)value_stack.array[value_stack.top-9].yyval.Object, StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object), attrs_ref.Item1);\r\n\t\t\t \r\n\t\t\treductionsSink.FunctionDeclarationReduced(this,\t(FunctionDecl)AnnotateDoc(yyval.Object));\r\n\t\t\t  \r\n\t\t\tLeaveConditionalCode();\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-9].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 42: // function_declaration_head -> T_FUNCTION \r\n{ yyval.Object = new Tuple<List<CustomAttribute>,bool>(null, false); }\r\n        return;\r\n      case 43: // function_declaration_head -> attributes T_FUNCTION \r\n{ yyval.Object = new Tuple<List<CustomAttribute>,bool>((List<CustomAttribute>)value_stack.array[value_stack.top-2].yyval.Object, false); }\r\n        return;\r\n      case 44: // function_declaration_head -> T_FUNCTION '&' \r\n{ yyval.Object = new Tuple<List<CustomAttribute>,bool>(null, true); }\r\n        return;\r\n      case 45: // function_declaration_head -> attributes T_FUNCTION '&' \r\n{ yyval.Object = new Tuple<List<CustomAttribute>,bool>((List<CustomAttribute>)value_stack.array[value_stack.top-3].yyval.Object, true); }\r\n        return;\r\n      case 46: // class_entry_type -> T_CLASS \r\n{ yyval.Object = Tokens.T_CLASS; }\r\n        return;\r\n      case 47: // class_entry_type -> T_TRAIT \r\n{ yyval.Object = Tokens.T_TRAIT; }\r\n        return;\r\n      case 48: // @5 -> \r\n{\r\n\t\t\tName class_name = new Name((string)value_stack.array[value_stack.top-2].yyval.Object);\r\n\r\n\t\t\tif (CheckReservedNameAbsence(class_name, value_stack.array[value_stack.top-2].yypos)) CheckTypeNameInUse(class_name, value_stack.array[value_stack.top-2].yypos);\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object, (string)value_stack.array[value_stack.top-2].yyval.Object);\r\n\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 49: // class_declaration_statement -> attributes_opt visibility_opt modifier_opt partial_opt class_entry_type identifier type_parameter_list_opt @5 extends_opt implements_opt '{' class_statement_list_opt '}' \r\n{ \r\n\t\t  Name class_name = new Name((string)value_stack.array[value_stack.top-8].yyval.Object);\r\n\t\t  var member_attr = (PhpMemberAttributes)(value_stack.array[value_stack.top-12].yyval.Integer | value_stack.array[value_stack.top-11].yyval.Integer);\r\n\t\t  if ((Tokens)value_stack.array[value_stack.top-9].yyval.Object == Tokens.T_TRAIT) member_attr |= PhpMemberAttributes.Trait | PhpMemberAttributes.Abstract;\r\n\t\t  \r\n\t\t  CheckReservedNamesAbsence((Tuple<GenericQualifiedName,Text.Span>)value_stack.array[value_stack.top-5].yyval.Object);\r\n\t\t  CheckReservedNamesAbsence((List<Tuple<GenericQualifiedName,Text.Span>>)value_stack.array[value_stack.top-4].yyval.Object);\r\n\t\t  \r\n\t\t  yyval.Object = new TypeDecl(sourceUnit, Combine(value_stack.array[value_stack.top-9].yypos, value_stack.array[value_stack.top-8].yypos), yypos, GetHeadingEnd(GetLeftValidPosition(10)), GetBodyStart(value_stack.array[value_stack.top-3].yypos), \r\n\t\t\t\tIsCurrentCodeConditional, GetScope(), \r\n\t\t\t\tmember_attr, value_stack.array[value_stack.top-10].yyval.Integer != 0, class_name, value_stack.array[value_stack.top-8].yypos, currentNamespace, \r\n\t\t\t\t(List<FormalTypeParam>)value_stack.array[value_stack.top-7].yyval.Object, (Tuple<GenericQualifiedName,Text.Span>)value_stack.array[value_stack.top-5].yyval.Object, (List<Tuple<GenericQualifiedName,Text.Span>>)value_stack.array[value_stack.top-4].yyval.Object, \r\n\t\t    (List<TypeMemberDecl>)value_stack.array[value_stack.top-2].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-13].yyval.Object);\r\n\t\t    \r\n\t\t  reductionsSink.TypeDeclarationReduced(this, (TypeDecl)AnnotateDoc(yyval.Object));\r\n\t\t  UnreserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-7].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 50: // @6 -> \r\n{\r\n\t\t\tName class_name = new Name((string)value_stack.array[value_stack.top-2].yyval.Object);\r\n\r\n\t\t\tif (CheckReservedNameAbsence(class_name, value_stack.array[value_stack.top-2].yypos)) CheckTypeNameInUse(class_name, value_stack.array[value_stack.top-2].yypos);\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object, (string)value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t  \r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 51: // class_declaration_statement -> attributes_opt visibility_opt modifier_opt partial_opt T_INTERFACE identifier type_parameter_list_opt @6 interface_extends_opt '{' class_statement_list_opt '}' \r\n{ \r\n\t\t  Name class_name = new Name((string)value_stack.array[value_stack.top-7].yyval.Object);\r\n\t\t  \r\n\t\t  CheckReservedNamesAbsence((List<Tuple<GenericQualifiedName,Text.Span>>)value_stack.array[value_stack.top-4].yyval.Object);\r\n\t\t  \r\n\t\t\tif ((PhpMemberAttributes)value_stack.array[value_stack.top-10].yyval.Integer != PhpMemberAttributes.None)\r\n\t\t\t\terrors.Add(Errors.InvalidInterfaceModifier, SourceUnit, value_stack.array[value_stack.top-10].yypos);\r\n\t\t\t\t\r\n\t\t  yyval.Object = new TypeDecl(sourceUnit, Combine(value_stack.array[value_stack.top-8].yypos, value_stack.array[value_stack.top-7].yypos), yypos, GetHeadingEnd(GetLeftValidPosition(9)), GetBodyStart(value_stack.array[value_stack.top-3].yypos),\r\n\t\t\t\tIsCurrentCodeConditional, GetScope(), \r\n\t\t\t\t(PhpMemberAttributes)value_stack.array[value_stack.top-11].yyval.Integer | PhpMemberAttributes.Abstract | PhpMemberAttributes.Interface, \r\n\t\t\t\tvalue_stack.array[value_stack.top-9].yyval.Integer != 0, class_name, value_stack.array[value_stack.top-7].yypos, currentNamespace,\r\n\t\t\t\t(List<FormalTypeParam>)value_stack.array[value_stack.top-6].yyval.Object, null, (List<Tuple<GenericQualifiedName,Text.Span>>)value_stack.array[value_stack.top-4].yyval.Object,\r\n\t\t\t\t(List<TypeMemberDecl>)value_stack.array[value_stack.top-2].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-12].yyval.Object); \r\n\t\t\t\t\r\n\t\t\treductionsSink.TypeDeclarationReduced(this, (TypeDecl)AnnotateDoc(yyval.Object));\r\n\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-6].yyval.Object);\r\n\t  }\r\n        return;\r\n      case 53: // modifier_opt -> T_ABSTRACT \r\n{ yyval.Integer = (int)PhpMemberAttributes.Abstract; }\r\n        return;\r\n      case 54: // modifier_opt -> T_FINAL \r\n{ yyval.Integer = (int)PhpMemberAttributes.Final; }\r\n        return;\r\n      case 55: // visibility_opt -> \r\n{ yyval.Integer = (int)PhpMemberAttributes.Public; }\r\n        return;\r\n      case 56: // visibility_opt -> T_PRIVATE \r\n{ yyval.Integer = (int)CheckPrivateType(value_stack.array[value_stack.top-1].yypos); }\r\n        return;\r\n      case 57: // partial_opt -> \r\n{ yyval.Integer = 0; }\r\n        return;\r\n      case 58: // partial_opt -> T_PARTIAL \r\n{ yyval.Integer = CheckPartialType(value_stack.array[value_stack.top-1].yypos); }\r\n        return;\r\n      case 59: // extends_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 60: // extends_opt -> T_EXTENDS qualified_static_type_ref \r\n{ yyval.Object = new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-1].yypos); }\r\n        return;\r\n      case 61: // interface_extends_opt -> \r\n{ yyval.Object = emptyGenericQualifiedNamePositionList; }\r\n        return;\r\n      case 62: // interface_extends_opt -> T_EXTENDS interface_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 63: // implements_opt -> \r\n{ yyval.Object = emptyGenericQualifiedNamePositionList; }\r\n        return;\r\n      case 64: // implements_opt -> T_IMPLEMENTS interface_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 65: // interface_list -> qualified_static_type_ref \r\n{ \r\n\t\t\tyyval.Object = NewList<Tuple<GenericQualifiedName,Text.Span>>(new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-1].yypos));\r\n\t\t}\r\n        return;\r\n      case 66: // interface_list -> interface_list ',' qualified_static_type_ref \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tListAdd<Tuple<GenericQualifiedName,Text.Span>>(yyval.Object, new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-1].yypos)); \r\n\t\t}\r\n        return;\r\n      case 67: // type_parameter_list_opt -> T_LGENERIC type_parameter_list T_RGENERIC \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 68: // type_parameter_list_opt -> T_LGENERIC type_parameter_with_defaults_list T_RGENERIC \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 69: // type_parameter_list_opt -> T_LGENERIC type_parameter_list ',' type_parameter_with_defaults_list T_RGENERIC \r\n{ yyval.Object = value_stack.array[value_stack.top-4].yyval.Object; ((List<FormalTypeParam>)value_stack.array[value_stack.top-4].yyval.Object).AddRange((List<FormalTypeParam>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 70: // type_parameter_list_opt -> \r\n{ yyval.Object = emptyFormalTypeParamList; }\r\n        return;\r\n      case 71: // type_parameter_list -> type_parameter_list ',' type_parameter_decl \r\n{ ListAdd<FormalTypeParam>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; }\r\n        return;\r\n      case 72: // type_parameter_list -> type_parameter_decl \r\n{ yyval.Object = NewList<FormalTypeParam>(value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 73: // type_parameter_with_defaults_list -> type_parameter_with_defaults_list ',' type_parameter_with_default_decl \r\n{ ListAdd<FormalTypeParam>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; }\r\n        return;\r\n      case 74: // type_parameter_with_defaults_list -> type_parameter_with_default_decl \r\n{ yyval.Object = NewList<FormalTypeParam>(value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 75: // type_parameter_decl -> attributes_opt identifier \r\n{ \r\n\t\tName name = new Name((string)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\r\n\t\tCheckReservedNameAbsence(name, value_stack.array[value_stack.top-1].yypos);\r\n\t\tyyval.Object = new FormalTypeParam(value_stack.array[value_stack.top-1].yypos, name, null, (List<CustomAttribute>)value_stack.array[value_stack.top-2].yyval.Object); \r\n\t}\r\n        return;\r\n      case 76: // type_parameter_with_default_decl -> attributes_opt identifier '=' qualified_static_type_ref \r\n{ \r\n\t\t\tName name = new Name((string)value_stack.array[value_stack.top-3].yyval.Object);\r\n\t\t\t\r\n\t\t\tCheckReservedNameAbsence(name, value_stack.array[value_stack.top-3].yypos);\r\n\t\t\tyyval.Object = new FormalTypeParam(CombinePositions(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), name, value_stack.array[value_stack.top-1].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-4].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 77: // type_parameter_with_default_decl -> attributes_opt identifier '=' primitive_type \r\n{ \r\n\t\t\tName name = new Name((string)value_stack.array[value_stack.top-3].yyval.Object);\r\n\t\t\t\r\n\t\t\tCheckReservedNameAbsence(name, value_stack.array[value_stack.top-3].yypos);\r\n\t\t\tyyval.Object = new FormalTypeParam(CombinePositions(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), name, value_stack.array[value_stack.top-1].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-4].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 78: // primitive_type -> T_BOOL_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Boolean); }\r\n        return;\r\n      case 79: // primitive_type -> T_INT_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Integer); }\r\n        return;\r\n      case 80: // primitive_type -> T_INT64_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.LongInteger); }\r\n        return;\r\n      case 81: // primitive_type -> T_DOUBLE_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Double); }\r\n        return;\r\n      case 82: // primitive_type -> T_STRING_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.String); }\r\n        return;\r\n      case 83: // primitive_type -> T_RESOURCE_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Resource); }\r\n        return;\r\n      case 84: // primitive_type -> T_OBJECT_TYPE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Object); }\r\n        return;\r\n      case 85: // primitive_type -> T_ARRAY \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Array); }\r\n        return;\r\n      case 86: // generic_dynamic_args_opt -> T_LGENERIC type_ref_list T_RGENERIC \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 87: // generic_dynamic_args_opt -> \r\n{ yyval.Object = TypeRef.EmptyList; }\r\n        return;\r\n      case 88: // attributes -> attributes attributes_group \r\n{ yyval.Object = ListAdd<CustomAttribute>(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 89: // attributes -> attributes_group \r\n{ yyval.Object = (List<CustomAttribute>)value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 90: // attributes_group -> '[' attribute_list ']' \r\n{\r\n      yyval.Object = CustomAttributes((List<CustomAttribute>)value_stack.array[value_stack.top-2].yyval.Object, CustomAttribute.TargetSelectors.Default);\r\n    }\r\n        return;\r\n      case 91: // attributes_group -> '[' identifier ':' attribute_list ']' \r\n{ \r\n      yyval.Object = CustomAttributes((List<CustomAttribute>)value_stack.array[value_stack.top-2].yyval.Object, IdentifierToTargetSelector(value_stack.array[value_stack.top-4].yypos, (string)value_stack.array[value_stack.top-4].yyval.Object));\r\n    }\r\n        return;\r\n      case 92: // attributes_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 93: // attributes_opt -> attributes \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 94: // attribute_list -> attribute_list ',' attribute \r\n{ \r\n\t\t\tListAdd<CustomAttribute>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 95: // attribute_list -> attribute \r\n{ \r\n\t\t\tyyval.Object = NewList<CustomAttribute>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 96: // attribute -> qualified_namespace_name \r\n{ \r\n\t\t\tyyval.Object = new CustomAttribute(yypos, TranslateAny((QualifiedName)value_stack.array[value_stack.top-1].yyval.Object), emptyActualParamListIndex, emptyNamedActualParamListIndex);\r\n\t\t}\r\n        return;\r\n      case 97: // attribute -> qualified_namespace_name '(' attribute_arg_list ')' \r\n{ \r\n\t\t\tyyval.Object = new CustomAttribute(yypos, TranslateAny((QualifiedName)value_stack.array[value_stack.top-4].yyval.Object), (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, emptyNamedActualParamListIndex);\r\n\t\t}\r\n        return;\r\n      case 98: // attribute -> qualified_namespace_name '(' attribute_named_arg_list ')' \r\n{ \r\n\t\t\tyyval.Object = new CustomAttribute(yypos, TranslateAny((QualifiedName)value_stack.array[value_stack.top-4].yyval.Object), emptyActualParamListIndex, (List<NamedActualParam>)value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 99: // attribute -> qualified_namespace_name '(' attribute_arg_list ',' attribute_named_arg_list ')' \r\n{ \r\n\t\t\tyyval.Object = new CustomAttribute(yypos, TranslateAny((QualifiedName)value_stack.array[value_stack.top-6].yyval.Object), (List<ActualParam>)value_stack.array[value_stack.top-4].yyval.Object, (List<NamedActualParam>)value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 100: // attribute_arg_list -> attribute_arg_list ',' attribute_arg \r\n{ \r\n\t\t\tListAdd<ActualParam>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 101: // attribute_arg_list -> attribute_arg \r\n{ \r\n\t\t\tyyval.Object = NewList<ActualParam>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 102: // attribute_named_arg_list -> attribute_named_arg_list ',' attribute_named_arg \r\n{ \r\n\t\t\tListAdd<NamedActualParam>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 103: // attribute_named_arg_list -> attribute_named_arg \r\n{ \r\n\t\t\tyyval.Object = NewList<NamedActualParam>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 104: // attribute_arg -> expr \r\n{ yyval.Object = new ActualParam(yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object, ActualParam.Flags.Default); }\r\n        return;\r\n      case 105: // attribute_named_arg -> T_VARIABLE T_DOUBLE_ARROW expr \r\n{ yyval.Object = new NamedActualParam(yypos, (string)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 106: // inner_statement_list_opt -> inner_statement_list_opt inner_statement \r\n{ yyval.Object = StatementListAdd(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 107: // inner_statement_list_opt -> \r\n{ yyval.Object = new List<Statement>(); }\r\n        return;\r\n      case 108: // inner_statement -> statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 109: // inner_statement -> function_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 110: // inner_statement -> class_declaration_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 111: // empty_statement -> ';' \r\n{ yyval.Object = new EmptyStmt(yypos); }\r\n        return;\r\n      case 112: // expression_statement -> expr ';' \r\n{ yyval.Object = new ExpressionStmt(yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 115: // non_empty_statement -> identifier ':' \r\n{ \r\n\t\t  yyval.Object = new LabelStmt(yypos, (string)value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-2].yypos); /* PHP 5.3 */ \r\n\t\t}\r\n        return;\r\n      case 116: // non_empty_statement -> '{' inner_statement_list_opt '}' \r\n{ \r\n\t\t  yyval.Object = new BlockStmt(yypos, StmtList(yypos, value_stack.array[value_stack.top-2].yyval.Object)); \r\n\t\t}\r\n        return;\r\n      case 117: // @7 -> \r\n{ \r\n\t\t\tEnterConditionalCode(); \r\n\t\t}\r\n        return;\r\n      case 118: // non_empty_statement -> T_IF parenthesis_expr @7 statement elseif_list_opt else_opt \r\n{ \r\n\t\t\tList<ConditionalStmt> conditions = (List<ConditionalStmt>)value_stack.array[value_stack.top-2].yyval.Object;\r\n\t\t\tconditions[0] = new ConditionalStmt(value_stack.array[value_stack.top-6].yypos, (Expression)value_stack.array[value_stack.top-5].yyval.Object, (Statement)value_stack.array[value_stack.top-3].yyval.Object);\r\n\t\t\t\r\n\t\t\t// add else:\r\n\t\t\tif (value_stack.array[value_stack.top-1].yyval.Object != null)\r\n\t\t\t\tconditions.Add(new ConditionalStmt(value_stack.array[value_stack.top-1].yypos, null, (Statement)value_stack.array[value_stack.top-1].yyval.Object));\r\n\t\t\t\r\n\t\t\tyyval.Object = new IfStmt(yypos, conditions);\r\n\t\t\t\r\n\t\t\tLeaveConditionalCode();\r\n\t  }\r\n        return;\r\n      case 119: // @8 -> \r\n{ \r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 120: // non_empty_statement -> T_IF parenthesis_expr ':' @8 inner_statement_list_opt elseif_colon_list_opt else_colon_opt T_ENDIF ';' \r\n{ \r\n\t\t\tList<ConditionalStmt> conditions = (List<ConditionalStmt>)value_stack.array[value_stack.top-4].yyval.Object;\r\n\t\t\tconditions[0] = new ConditionalStmt(value_stack.array[value_stack.top-9].yypos, (Expression)value_stack.array[value_stack.top-8].yyval.Object, new BlockStmt(value_stack.array[value_stack.top-5].yypos, StmtList(Combine(value_stack.array[value_stack.top-7].yypos, value_stack.array[value_stack.top-4].yypos, value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-5].yyval.Object)));\r\n\t\t\t\r\n\t\t\t// add else:\r\n\t\t\tif (value_stack.array[value_stack.top-3].yyval.Object != null)\r\n\t\t\t\tconditions.Add(new ConditionalStmt(value_stack.array[value_stack.top-3].yypos, null, (Statement)value_stack.array[value_stack.top-3].yyval.Object));\r\n\t\t\t\r\n\t\t\tyyval.Object = new IfStmt(yypos, conditions);\r\n\t\t\t\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 121: // @9 -> \r\n{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 122: // non_empty_statement -> T_WHILE parenthesis_expr @9 while_statement \r\n{ \r\n\t\t\tyyval.Object = new WhileStmt(yypos, WhileStmt.Type.While, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Statement)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 123: // non_empty_statement -> T_DO statement T_WHILE parenthesis_expr ';' \r\n{ \r\n\t\t\tyyval.Object = new WhileStmt(yypos, WhileStmt.Type.Do, (Expression)value_stack.array[value_stack.top-2].yyval.Object, (Statement)value_stack.array[value_stack.top-4].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 124: // @10 -> \r\n{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 125: // non_empty_statement -> T_FOR '(' expression_list_opt ';' expression_list_opt ';' expression_list_opt ')' @10 for_statement \r\n{ \r\n\t\t\tyyval.Object = new ForStmt(yypos, (List<Expression>)value_stack.array[value_stack.top-8].yyval.Object, (List<Expression>)value_stack.array[value_stack.top-6].yyval.Object, (List<Expression>)value_stack.array[value_stack.top-4].yyval.Object, (Statement)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 126: // @11 -> \r\n{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 127: // non_empty_statement -> T_SWITCH parenthesis_expr @11 switch_case_list \r\n{ \r\n\t\t\tyyval.Object = new SwitchStmt(yypos, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (List<SwitchItem>)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 128: // non_empty_statement -> T_BREAK ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Break, null); }\r\n        return;\r\n      case 129: // non_empty_statement -> T_BREAK expr ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Break, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 130: // non_empty_statement -> T_CONTINUE ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Continue, null); }\r\n        return;\r\n      case 131: // non_empty_statement -> T_CONTINUE expr ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Continue, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 132: // non_empty_statement -> T_RETURN ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Return, null); }\r\n        return;\r\n      case 133: // non_empty_statement -> T_RETURN expr ';' \r\n{ yyval.Object = new JumpStmt(yypos, JumpStmt.Types.Return, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 134: // non_empty_statement -> yield_ex ';' \r\n{ yyval.Object = new ExpressionStmt(yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 135: // non_empty_statement -> T_GLOBAL global_var_list ';' \r\n{ yyval.Object = new GlobalStmt(yypos, (List<SimpleVarUse>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 136: // non_empty_statement -> T_STATIC static_variable_list ';' \r\n{ yyval.Object = new StaticStmt(yypos, (List<StaticVarDecl>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 137: // non_empty_statement -> T_ECHO expression_list ';' \r\n{ yyval.Object = new EchoStmt(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 138: // non_empty_statement -> T_INLINE_HTML \r\n{ \r\n\t\t\tyyval.Object = new EchoStmt(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 139: // non_empty_statement -> expression_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 140: // non_empty_statement -> T_UNSET '(' writable_chain_list ')' ';' \r\n{ \r\n\t    yyval.Object = new UnsetStmt(yypos, (List<VariableUse>)value_stack.array[value_stack.top-3].yyval.Object); \r\n\t  }\r\n        return;\r\n      case 141: // non_empty_statement -> T_FOREACH '(' chain T_AS foreach_variable foreach_optional_arg ')' foreach_statement \r\n{ \r\n\t\t\tyyval.Object = CreateForeachStmt(yypos, (Expression)value_stack.array[value_stack.top-6].yyval.Object, (ForeachVar)value_stack.array[value_stack.top-4].yyval.Object, value_stack.array[value_stack.top-4].yypos, (ForeachVar)value_stack.array[value_stack.top-3].yyval.Object, (Statement)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 142: // non_empty_statement -> T_FOREACH '(' expr_without_chain T_AS writable_chain foreach_optional_arg ')' foreach_statement \r\n{ \r\n\t\t\tyyval.Object = CreateForeachStmt(yypos, (Expression)value_stack.array[value_stack.top-6].yyval.Object, new ForeachVar((VariableUse)value_stack.array[value_stack.top-4].yyval.Object, false), value_stack.array[value_stack.top-4].yypos, \r\n\t\t\t  (ForeachVar)value_stack.array[value_stack.top-3].yyval.Object, (Statement)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 143: // non_empty_statement -> T_FOREACH '(' chain T_AS T_LIST '(' assignment_list ')' ')' foreach_statement \r\n{ \r\n\t\t\tvar listpos = Text.Span.Combine(value_stack.array[value_stack.top-6].yypos, value_stack.array[value_stack.top-3].yypos);\r\n\t\t\tyyval.Object = CreateForeachStmt(yypos, (Expression)value_stack.array[value_stack.top-8].yyval.Object,\r\n\t\t\t\tnew ForeachVar(new ListEx(listpos, (List<Expression>)value_stack.array[value_stack.top-4].yyval.Object, null)), listpos,\r\n\t\t\t\tnull, (Statement)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 144: // @12 -> \r\n{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 145: // non_empty_statement -> T_TRY @12 '{' inner_statement_list_opt '}' catches_opt finally_opt \r\n{\r\n\t\t\tif (value_stack.array[value_stack.top-2].yyval.Object == null && value_stack.array[value_stack.top-1].yyval.Object == null)\r\n\t\t\t\terrors.Add(FatalErrors.TryWithoutCatchOrFinally, SourceUnit, yypos);\r\n\r\n\t\t\tyyval.Object = new TryStmt(yypos, StmtList(Combine(value_stack.array[value_stack.top-5].yypos, value_stack.array[value_stack.top-3].yypos), value_stack.array[value_stack.top-4].yyval.Object), (List<CatchItem>)value_stack.array[value_stack.top-2].yyval.Object, (FinallyItem)value_stack.array[value_stack.top-1].yyval.Object);\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 146: // non_empty_statement -> T_THROW expr ';' \r\n{ \r\n\t\t\tyyval.Object = new ThrowStmt(yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 147: // non_empty_statement -> T_GOTO identifier ';' \r\n{ \r\n\t\t\tyyval.Object = new GotoStmt(yypos, (string)value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-2].yypos); /* PHP 5.3 */ \r\n\t\t}\r\n        return;\r\n      case 148: // non_empty_statement -> T_DECLARE '(' declare_list ')' declare_statement \r\n{\r\n\t\t\tyyval.Object = new DeclareStmt(yypos, (Statement)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 149: // catches_opt -> catches \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 150: // catches_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 151: // catches -> catches T_CATCH '(' qualified_static_type_ref T_VARIABLE ')' '{' inner_statement_list_opt '}' \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-9].yyval.Object; \r\n\t\t\tListAdd<CatchItem>(yyval.Object, new CatchItem(Combine(value_stack.array[value_stack.top-8].yypos, value_stack.array[value_stack.top-1].yypos), DirectTypeRef.FromGenericQualifiedName(value_stack.array[value_stack.top-6].yypos, (GenericQualifiedName)value_stack.array[value_stack.top-6].yyval.Object), new DirectVarUse(value_stack.array[value_stack.top-5].yypos, (string)value_stack.array[value_stack.top-5].yyval.Object), StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object))); \r\n\t\t}\r\n        return;\r\n      case 152: // catches -> T_CATCH '(' qualified_static_type_ref T_VARIABLE ')' '{' inner_statement_list_opt '}' \r\n{\r\n\t\t\tyyval.Object = NewList<CatchItem>(new CatchItem(yypos, DirectTypeRef.FromGenericQualifiedName(value_stack.array[value_stack.top-6].yypos, (GenericQualifiedName)value_stack.array[value_stack.top-6].yyval.Object), new DirectVarUse(value_stack.array[value_stack.top-5].yypos, (string)value_stack.array[value_stack.top-5].yyval.Object), StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object)));\r\n\t\t}\r\n        return;\r\n      case 153: // finally_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 154: // finally_opt -> T_FINALLY '{' inner_statement_list_opt '}' \r\n{ yyval.Object = new FinallyItem(yypos, StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object)); }\r\n        return;\r\n      case 155: // reference_opt -> \r\n{ yyval.Integer = 0; }\r\n        return;\r\n      case 156: // reference_opt -> '&' \r\n{ yyval.Integer = 1; }\r\n        return;\r\n      case 157: // variadic_opt -> \r\n{ yyval.Integer = 0; }\r\n        return;\r\n      case 158: // variadic_opt -> T_ELLIPSIS \r\n{ yyval.Integer = 1; }\r\n        return;\r\n      case 159: // foreach_optional_arg -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 160: // foreach_optional_arg -> T_DOUBLE_ARROW foreach_variable \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 161: // foreach_variable -> reference_opt writable_chain \r\n{ yyval.Object = new ForeachVar((VariableUse)value_stack.array[value_stack.top-1].yyval.Object, (int)value_stack.array[value_stack.top-2].yyval.Integer == 1); }\r\n        return;\r\n      case 162: // for_statement -> statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 163: // for_statement -> ':' inner_statement_list_opt T_ENDFOR ';' \r\n{ yyval.Object = new BlockStmt(value_stack.array[value_stack.top-3].yypos, StmtList(Combine(value_stack.array[value_stack.top-4].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-3].yyval.Object)); }\r\n        return;\r\n      case 164: // foreach_statement -> statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 165: // foreach_statement -> ':' inner_statement_list_opt T_ENDFOREACH ';' \r\n{ yyval.Object = new BlockStmt(value_stack.array[value_stack.top-3].yypos, StmtList(Combine(value_stack.array[value_stack.top-4].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-3].yyval.Object)); }\r\n        return;\r\n      case 166: // declare_statement -> statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 167: // declare_statement -> ':' inner_statement_list_opt T_ENDDECLARE ';' \r\n{ yyval.Object = new BlockStmt(value_stack.array[value_stack.top-3].yypos, StmtList(Combine(value_stack.array[value_stack.top-4].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-3].yyval.Object)); }\r\n        return;\r\n      case 168: // declare_list -> identifier '=' constant_inititalizer \r\n{ /*not supported*/ }\r\n        return;\r\n      case 169: // declare_list -> declare_list ',' identifier '=' constant_inititalizer \r\n{ /*not supported*/ }\r\n        return;\r\n      case 170: // switch_case_list -> '{' case_list_opt '}' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 171: // switch_case_list -> '{' ';' case_list_opt '}' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 172: // switch_case_list -> ':' case_list_opt T_ENDSWITCH ';' \r\n{ yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; }\r\n        return;\r\n      case 173: // switch_case_list -> ':' ';' case_list_opt T_ENDSWITCH ';' \r\n{ yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; }\r\n        return;\r\n      case 174: // case_list_opt -> \r\n{ \r\n\t\t  yyval.Object = new List<SwitchItem>(); \r\n\t\t}\r\n        return;\r\n      case 175: // case_list_opt -> case_list_opt T_CASE expr case_separator inner_statement_list_opt \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-5].yyval.Object; \r\n\t\t  ListAdd<SwitchItem>(yyval.Object, new CaseItem(value_stack.array[value_stack.top-4].yypos, (Expression)value_stack.array[value_stack.top-3].yyval.Object, StmtList(value_stack.array[value_stack.top-1].yypos, value_stack.array[value_stack.top-1].yyval.Object))); \r\n\t\t}\r\n        return;\r\n      case 176: // case_list_opt -> case_list_opt T_DEFAULT case_separator inner_statement_list_opt \r\n{\t\r\n\t\t  yyval.Object = value_stack.array[value_stack.top-4].yyval.Object; \r\n\t\t  ListAdd<SwitchItem>(yyval.Object, new DefaultItem(value_stack.array[value_stack.top-3].yypos, StmtList(value_stack.array[value_stack.top-1].yypos, value_stack.array[value_stack.top-1].yyval.Object))); \r\n\t\t}\r\n        return;\r\n      case 179: // while_statement -> statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 180: // while_statement -> ':' inner_statement_list_opt T_ENDWHILE ';' \r\n{ yyval.Object = new BlockStmt(value_stack.array[value_stack.top-3].yypos, StmtList(Combine(value_stack.array[value_stack.top-4].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-3].yyval.Object)); }\r\n        return;\r\n      case 181: // elseif_list_opt -> \r\n{ \r\n\t\t\t// initialize list with the first item reserved for the if-condition and the true-statement pair:\r\n\t\t\tyyval.Object = NewList<ConditionalStmt>(null);\r\n\t\t}\r\n        return;\r\n      case 182: // elseif_list_opt -> elseif_list_opt T_ELSEIF parenthesis_expr statement \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-4].yyval.Object; \r\n\t\t\tListAdd<ConditionalStmt>(yyval.Object, new ConditionalStmt(value_stack.array[value_stack.top-3].yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object, (Statement)value_stack.array[value_stack.top-1].yyval.Object)); \r\n\t\t}\r\n        return;\r\n      case 183: // elseif_colon_list_opt -> \r\n{ \r\n\t\t  yyval.Object = NewList<ConditionalStmt>(null);\r\n\t\t}\r\n        return;\r\n      case 184: // elseif_colon_list_opt -> elseif_colon_list_opt T_ELSEIF parenthesis_expr ':' inner_statement_list_opt \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-5].yyval.Object;\r\n\t\t\tListAdd<ConditionalStmt>(yyval.Object, new ConditionalStmt(value_stack.array[value_stack.top-4].yypos, (Expression)value_stack.array[value_stack.top-3].yyval.Object, new BlockStmt(value_stack.array[value_stack.top-1].yypos, StmtList(value_stack.array[value_stack.top-1].yypos, value_stack.array[value_stack.top-1].yyval.Object)))); \r\n\t\t}\r\n        return;\r\n      case 185: // else_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 186: // else_opt -> T_ELSE statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 187: // else_colon_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 188: // else_colon_opt -> T_ELSE ':' inner_statement_list_opt \r\n{ yyval.Object = new BlockStmt(value_stack.array[value_stack.top-1].yypos, StmtList(value_stack.array[value_stack.top-1].yypos, value_stack.array[value_stack.top-1].yyval.Object)); }\r\n        return;\r\n      case 189: // formal_parameter_list_opt -> formal_parameter_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 190: // formal_parameter_list_opt -> \r\n{ yyval.Object = emptyFormalParamListIndex; }\r\n        return;\r\n      case 191: // formal_parameter_list -> formal_parameter \r\n{ \r\n\t\t  yyval.Object = NewList<FormalParam>(value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 192: // formal_parameter_list -> formal_parameter_list ',' formal_parameter \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<FormalParam>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 193: // formal_parameter -> attributes_opt type_hint_opt reference_opt variadic_opt T_VARIABLE \r\n{\r\n\t\t\tyyval.Object = new FormalParam(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-4].yyval.Object, FormalParamFlags((int)value_stack.array[value_stack.top-3].yyval.Integer == 1, (int)value_stack.array[value_stack.top-2].yyval.Integer == 1), null, (List<CustomAttribute>)value_stack.array[value_stack.top-5].yyval.Object)\r\n\t\t\t{\r\n\t\t\t\tTypeHintPosition = value_stack.array[value_stack.top-4].yypos\r\n\t\t\t};\r\n\t\t}\r\n        return;\r\n      case 194: // formal_parameter -> attributes_opt type_hint_opt reference_opt variadic_opt T_VARIABLE '=' constant_inititalizer \r\n{ \r\n\t\t\tyyval.Object = new FormalParam(value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-6].yyval.Object, FormalParamFlags((int)value_stack.array[value_stack.top-5].yyval.Integer == 1, (int)value_stack.array[value_stack.top-4].yyval.Integer == 1), (Expression)value_stack.array[value_stack.top-1].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-7].yyval.Object)\r\n\t\t\t{\r\n\t\t\t\tTypeHintPosition = value_stack.array[value_stack.top-6].yypos\r\n\t\t\t};\r\n\t\t}\r\n        return;\r\n      case 195: // type_hint_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 196: // type_hint_opt -> qualified_static_type_ref \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 197: // type_hint_opt -> T_CALLABLE \r\n{ yyval.Object = new PrimitiveTypeName(QualifiedName.Callable); }\r\n        return;\r\n      case 198: // type_hint_opt -> primitive_type \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 199: // actual_arguments_opt -> non_empty_actual_arguments_opt \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 200: // actual_arguments_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 201: // non_empty_actual_arguments_opt -> non_empty_actual_arguments_opt '[' key_opt ']' \r\n{ yyval.Object = CreateFcnParam((FcnParam)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 202: // non_empty_actual_arguments_opt -> non_empty_actual_arguments_opt '{' expr '}' \r\n{ yyval.Object = CreateFcnParam((FcnParam)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 203: // non_empty_actual_arguments_opt -> generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ yyval.Object = new FcnParam((List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, null); }\r\n        return;\r\n      case 204: // actual_argument_list_opt -> actual_argument_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 205: // actual_argument_list_opt -> yield_ex \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 206: // actual_argument_list_opt -> \r\n{ yyval.Object = emptyActualParamListIndex; }\r\n        return;\r\n      case 207: // actual_argument_list -> actual_argument_list ',' actual_argument \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<ActualParam>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 208: // actual_argument_list -> actual_argument \r\n{ \r\n\t\t\tyyval.Object = NewList<ActualParam>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 209: // actual_argument -> expr \r\n{\r\n\t\tyyval.Object = new ActualParam(yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object, ActualParam.Flags.Default);\r\n    }\r\n        return;\r\n      case 210: // actual_argument -> '&' writable_chain \r\n{\r\n\t\t// deprecated; only for error reporting\r\n\t\tyyval.Object = new ActualParam(yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object, ActualParam.Flags.IsByRef);\r\n    }\r\n        return;\r\n      case 211: // actual_argument -> T_ELLIPSIS expr \r\n{\r\n\t\tyyval.Object = new ActualParam(yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object, ActualParam.Flags.IsVariadic);\r\n\t}\r\n        return;\r\n      case 212: // global_var_list -> global_var_list ',' global_var \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<SimpleVarUse>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 213: // global_var_list -> global_var \r\n{ \r\n\t\t  yyval.Object = NewList<SimpleVarUse>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t  }\r\n        return;\r\n      case 214: // global_var -> T_VARIABLE \r\n{ yyval.Object = new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 215: // global_var -> '$' chain \r\n{ yyval.Object = new IndirectVarUse(yypos, 1, (VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 216: // global_var -> '$' '{' expr '}' \r\n{ yyval.Object = new IndirectVarUse(yypos, 1, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 217: // static_variable_list -> static_variable_list ',' static_variable \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tListAdd<StaticVarDecl>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 218: // static_variable_list -> static_variable \r\n{ \r\n\t\t\tyyval.Object = NewList<StaticVarDecl>(value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 219: // static_variable -> T_VARIABLE \r\n{ \r\n\t\t\tyyval.Object = new StaticVarDecl(value_stack.array[value_stack.top-1].yypos, new DirectVarUse(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object), null); \r\n\t  }\r\n        return;\r\n      case 220: // static_variable -> T_VARIABLE '=' constant_inititalizer \r\n{ \r\n\t\t\tyyval.Object = new StaticVarDecl(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), new DirectVarUse(value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-3].yyval.Object), (Expression)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 221: // class_statement_list_opt -> class_statement_list_opt class_statement \r\n{ yyval.Object = ListAdd<TypeMemberDecl>(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 222: // class_statement_list_opt -> \r\n{ yyval.Object = new List<TypeMemberDecl>(); }\r\n        return;\r\n      case 223: // class_statement -> attributes_opt property_modifiers property_declarator_list ';' \r\n{ \r\n\t\t\tvar modifier = (PhpMemberAttributes)value_stack.array[value_stack.top-3].yyval.Integer;\r\n\t\t\tyyval.Object = AnnotateDoc(new FieldDeclList(yypos, modifier, (List<FieldDecl>)value_stack.array[value_stack.top-2].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-4].yyval.Object));\r\n\t\t}\r\n        return;\r\n      case 224: // class_statement -> attributes_opt T_CONST class_constant_declarator_list ';' \r\n{ \r\n\t\t  yyval.Object = AnnotateDoc(new ConstDeclList(yypos, (List<ClassConstantDecl>)value_stack.array[value_stack.top-2].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-4].yyval.Object));\r\n\t\t}\r\n        return;\r\n      case 225: // @13 -> \r\n{\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t  }\r\n        return;\r\n      case 226: // @14 -> \r\n{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n        return;\r\n      case 227: // class_statement -> attributes_opt member_modifiers_opt T_FUNCTION reference_opt identifier type_parameter_list_opt @13 '(' formal_parameter_list_opt ')' base_ctor_call_opt @14 method_body \r\n{ \r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)value_stack.array[value_stack.top-8].yyval.Object, null);\r\n\t\t  \r\n\t\t\tyyval.Object = new MethodDecl(value_stack.array[value_stack.top-9].yypos, yypos, GetHeadingEnd(GetLeftValidPosition(11)),GetBodyStart(value_stack.array[value_stack.top-1].yypos), (string)value_stack.array[value_stack.top-9].yyval.Object, (int)value_stack.array[value_stack.top-10].yyval.Integer != 0, (List<FormalParam>)value_stack.array[value_stack.top-5].yyval.Object, (List<FormalTypeParam>)value_stack.array[value_stack.top-8].yyval.Object,\r\n\t\t\t\t(List<Statement>)value_stack.array[value_stack.top-1].yyval.Object, (PhpMemberAttributes)value_stack.array[value_stack.top-12].yyval.Integer, (List<ActualParam>)value_stack.array[value_stack.top-3].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-13].yyval.Object); \r\n\t\t\t\t\r\n\t\t\tAnnotateDoc(yyval.Object);\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)value_stack.array[value_stack.top-8].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 228: // class_statement -> trait_use_statement \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 229: // trait_use_statement -> T_USE qualified_namespace_name_list trait_adaptations \r\n{ yyval.Object = new TraitsUse(yypos, GetHeadingEnd(value_stack.array[value_stack.top-2].yypos), TranslateAny((List<QualifiedName>)value_stack.array[value_stack.top-2].yyval.Object), (List<TraitsUse.TraitAdaptation>)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 230: // trait_adaptations -> ';' \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 231: // trait_adaptations -> '{' trait_adaptation_list '}' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 232: // trait_adaptation_list -> \r\n{ yyval.Object = new List<TraitsUse.TraitAdaptation>(/*empty*/); }\r\n        return;\r\n      case 233: // trait_adaptation_list -> non_empty_trait_adaptation_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 234: // non_empty_trait_adaptation_list -> trait_adaptation_statement \r\n{ yyval.Object = NewList<TraitsUse.TraitAdaptation>(value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 235: // non_empty_trait_adaptation_list -> non_empty_trait_adaptation_list trait_adaptation_statement \r\n{ yyval.Object = ListAdd<TraitsUse.TraitAdaptation>(value_stack.array[value_stack.top-2].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 236: // trait_adaptation_statement -> trait_precedence \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 237: // trait_adaptation_statement -> trait_alias \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 238: // trait_precedence -> trait_method_reference_fully_qualified T_INSTEADOF qualified_namespace_name_list ';' \r\n{ yyval.Object = new TraitsUse.TraitAdaptationPrecedence(yypos, (Tuple<QualifiedName?,Name>)value_stack.array[value_stack.top-4].yyval.Object, (List<QualifiedName>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 239: // trait_method_reference -> identifier \r\n{ yyval.Object = new Tuple<QualifiedName?,Name>(null, new Name((string)value_stack.array[value_stack.top-1].yyval.Object)); }\r\n        return;\r\n      case 240: // trait_method_reference -> trait_method_reference_fully_qualified \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 241: // trait_method_reference_fully_qualified -> qualified_namespace_name T_DOUBLE_COLON identifier \r\n{ yyval.Object = new Tuple<QualifiedName?,Name>((QualifiedName)value_stack.array[value_stack.top-3].yyval.Object, new Name((string)value_stack.array[value_stack.top-1].yyval.Object)); }\r\n        return;\r\n      case 242: // trait_alias -> trait_method_reference T_AS trait_modifiers identifier ';' \r\n{ yyval.Object = new TraitsUse.TraitAdaptationAlias(yypos, (Tuple<QualifiedName?, Name>)value_stack.array[value_stack.top-5].yyval.Object, (string)value_stack.array[value_stack.top-2].yyval.Object, (PhpMemberAttributes?)value_stack.array[value_stack.top-3].yyval.Object); }\r\n        return;\r\n      case 243: // trait_alias -> trait_method_reference T_AS member_modifier ';' \r\n{ yyval.Object = new TraitsUse.TraitAdaptationAlias(yypos, (Tuple<QualifiedName?, Name>)value_stack.array[value_stack.top-4].yyval.Object, null, (PhpMemberAttributes)value_stack.array[value_stack.top-2].yyval.Integer); }\r\n        return;\r\n      case 244: // trait_modifiers -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 245: // trait_modifiers -> member_modifier \r\n{ yyval.Object = (PhpMemberAttributes)value_stack.array[value_stack.top-1].yyval.Integer; }\r\n        return;\r\n      case 246: // base_ctor_call_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 247: // base_ctor_call_opt -> ':' identifier '(' actual_argument_list_opt ')' \r\n{\r\n\t    if (!Name.ParentClassName.Equals((string)value_stack.array[value_stack.top-4].yyval.Object))\r\n\t\t\t\terrors.Add(Errors.ExpectingParentCtorInvocation, SourceUnit, value_stack.array[value_stack.top-4].yypos);\r\n\t    \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 248: // method_body -> ';' \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 249: // method_body -> '{' inner_statement_list_opt '}' \r\n{ yyval.Object = StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 250: // property_modifiers -> member_modifiers \r\n{ yyval.Integer = value_stack.array[value_stack.top-1].yyval.Integer; }\r\n        return;\r\n      case 251: // property_modifiers -> T_VAR \r\n{ yyval.Integer = (int)PhpMemberAttributes.Public; }\r\n        return;\r\n      case 252: // member_modifiers_opt -> \r\n{ yyval.Integer = (int)PhpMemberAttributes.Public; }\r\n        return;\r\n      case 253: // member_modifiers_opt -> member_modifiers \r\n{ yyval.Integer = (int)(PhpMemberAttributes)value_stack.array[value_stack.top-1].yyval.Integer; }\r\n        return;\r\n      case 254: // member_modifiers -> member_modifier \r\n{ \r\n\t\t\tyyval.Integer = value_stack.array[value_stack.top-1].yyval.Integer; \r\n\t\t}\r\n        return;\r\n      case 255: // member_modifiers -> member_modifiers member_modifier \r\n{ \r\n\t\t  var a1 = (PhpMemberAttributes)value_stack.array[value_stack.top-2].yyval.Integer;\r\n\t\t  var a2 = (PhpMemberAttributes)value_stack.array[value_stack.top-1].yyval.Integer;\r\n\r\n\t\t  if ((a1 & PhpMemberAttributes.VisibilityMask) != 0 && (a2 & PhpMemberAttributes.VisibilityMask) != 0)\r\n\t\t    errors.Add(Errors.MultipleVisibilityModifiers, SourceUnit, value_stack.array[value_stack.top-1].yypos);\r\n\t\t  \r\n\t\t  // merge $2 into $1\r\n\t\t  a1 |= a2;\r\n\t\t  // This wouldn't allow for \"public abstract function\" although php does.\r\n\t\t  // It is broken anyway, because we assume we have a token on the stack before seeing a modified.\r\n\t\t  \r\n\t\t  // return $1\r\n\t\t  yyval.Integer = (int)a1;\r\n\t\t}\r\n        return;\r\n      case 256: // member_modifier -> T_PUBLIC \r\n{ yyval.Integer = (int)PhpMemberAttributes.Public; }\r\n        return;\r\n      case 257: // member_modifier -> T_PROTECTED \r\n{ yyval.Integer = (int)PhpMemberAttributes.Protected; }\r\n        return;\r\n      case 258: // member_modifier -> T_PRIVATE \r\n{ yyval.Integer = (int)PhpMemberAttributes.Private; }\r\n        return;\r\n      case 259: // member_modifier -> T_STATIC \r\n{ yyval.Integer = (int)PhpMemberAttributes.Static; }\r\n        return;\r\n      case 260: // member_modifier -> T_ABSTRACT \r\n{ yyval.Integer = (int)PhpMemberAttributes.Abstract; }\r\n        return;\r\n      case 261: // member_modifier -> T_FINAL \r\n{ yyval.Integer = (int)PhpMemberAttributes.Final; }\r\n        return;\r\n      case 262: // property_declarator_list -> property_declarator_list ',' property_declarator \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tListAdd<FieldDecl>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 263: // property_declarator_list -> property_declarator \r\n{ \r\n\t\t\tyyval.Object = NewList<FieldDecl>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 264: // property_declarator -> T_VARIABLE \r\n{\r\n\t\t\tyyval.Object = new FieldDecl(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object, null);\r\n    }\r\n        return;\r\n      case 265: // property_declarator -> T_VARIABLE '=' constant_inititalizer \r\n{\r\n\t\t\tyyval.Object = new FieldDecl(value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object);\r\n    }\r\n        return;\r\n      case 266: // class_constant_declarator_list -> class_constant_declarator ',' class_constant_declarator_list \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; \r\n\t\t  ListAdd<ClassConstantDecl>(value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-3].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 267: // class_constant_declarator_list -> class_constant_declarator \r\n{ \r\n\t\t\tyyval.Object = NewList<ClassConstantDecl>(value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 268: // class_constant_declarator -> identifier '=' constant_inititalizer \r\n{ \r\n    yyval.Object = new ClassConstantDecl(value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-3].yyval.Object, CheckInitializer(value_stack.array[value_stack.top-1].yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object)); \r\n  }\r\n        return;\r\n      case 269: // global_constant_declarator_list -> global_constant_declarator ',' global_constant_declarator_list \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-1].yyval.Object;\r\n\t\t\tListAdd<GlobalConstantDecl>(value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-3].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 270: // global_constant_declarator_list -> global_constant_declarator \r\n{ \r\n\t\t\tyyval.Object = NewList<GlobalConstantDecl>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 271: // global_constant_declarator -> identifier '=' constant_inititalizer \r\n{\r\n    GlobalConstantDecl c = new GlobalConstantDecl(sourceUnit, value_stack.array[value_stack.top-3].yypos, IsCurrentCodeConditional, GetScope(), \r\n\t\t\t\t(string)value_stack.array[value_stack.top-3].yyval.Object, currentNamespace, (Expression)value_stack.array[value_stack.top-1].yyval.Object);\r\n\r\n\t\treductionsSink.GlobalConstantDeclarationReduced(this, c);\r\n\t\t\r\n\t\tyyval.Object = c;\r\n  }\r\n        return;\r\n      case 272: // global_constant_declaration_statement -> attributes_opt T_CONST global_constant_declarator_list ';' \r\n{ \r\n\t  yyval.Object = AnnotateDoc(new GlobalConstDeclList(yypos, (List<GlobalConstantDecl>)value_stack.array[value_stack.top-2].yyval.Object, (List<CustomAttribute>)value_stack.array[value_stack.top-4].yyval.Object));\r\n\t}\r\n        return;\r\n      case 273: // expression_list -> expression_list ',' expr \r\n{ \r\n\t\t\tListAdd<Expression>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 274: // expression_list -> expr \r\n{ \r\n\t\t\tyyval.Object = NewList<Expression>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 275: // expression_list_opt -> \r\n{ yyval.Object = emptyExpressionListIndex; }\r\n        return;\r\n      case 276: // expression_list_opt -> expression_list \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 277: // expr -> chain \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 278: // expr -> expr_without_chain \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 279: // parenthesis_expr -> '(' expr ')' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 280: // parenthesis_expr -> '(' yield_ex ')' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 281: // assignment_expression -> writable_chain '=' expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignValue, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 282: // assignment_expression -> writable_chain '=' '&' chain \r\n{ yyval.Object = new RefAssignEx(yypos, (VariableUse)value_stack.array[value_stack.top-4].yyval.Object, (VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 283: // assignment_expression -> writable_chain '=' '&' T_NEW type_ref ctor_arguments_opt \r\n{  \r\n\t\t\tyyval.Object = new RefAssignEx(yypos, (VariableUse)value_stack.array[value_stack.top-6].yyval.Object, new NewEx(CombinePositions(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-2].yypos), value_stack.array[value_stack.top-1].yypos), (TypeRef)value_stack.array[value_stack.top-2].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-1].yyval.Object)); \r\n\t\t}\r\n        return;\r\n      case 284: // assignment_expression -> writable_chain T_PLUS_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignAdd, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 285: // assignment_expression -> writable_chain T_MINUS_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignSub, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 286: // assignment_expression -> writable_chain T_MUL_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignMul, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); \t}\r\n        return;\r\n      case 287: // assignment_expression -> writable_chain T_POW_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignPow, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); \t}\r\n        return;\r\n      case 288: // assignment_expression -> writable_chain T_DIV_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignDiv, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 289: // assignment_expression -> writable_chain T_CONCAT_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignAppend, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 290: // assignment_expression -> writable_chain T_MOD_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignMod, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 291: // assignment_expression -> writable_chain T_AND_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos,Operations.AssignAnd, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 292: // assignment_expression -> writable_chain T_OR_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignOr, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 293: // assignment_expression -> writable_chain T_XOR_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignXor, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 294: // assignment_expression -> writable_chain T_SL_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignShiftLeft, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 295: // assignment_expression -> writable_chain T_SR_EQUAL expr \r\n{ yyval.Object = new ValueAssignEx(yypos, Operations.AssignShiftRight, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 296: // expr_without_chain -> assignment_expression \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-1].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 297: // expr_without_chain -> new_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 298: // expr_without_chain -> T_CLONE expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Clone, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 299: // expr_without_chain -> writable_chain T_INC \r\n{ yyval.Object = new IncDecEx(yypos, true, true, (VariableUse)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 300: // expr_without_chain -> T_INC writable_chain \r\n{ yyval.Object = new IncDecEx(yypos, true, false, (VariableUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 301: // expr_without_chain -> writable_chain T_DEC \r\n{ yyval.Object = new IncDecEx(yypos, false, true, (VariableUse)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 302: // expr_without_chain -> T_DEC writable_chain \r\n{ yyval.Object = new IncDecEx(yypos, false, false, (VariableUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 303: // expr_without_chain -> '+' expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Plus, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 304: // expr_without_chain -> '-' expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Minus, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 305: // expr_without_chain -> '!' expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.LogicNegation, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 306: // expr_without_chain -> '~' expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.BitNegation, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 307: // expr_without_chain -> cast_operation expr \r\n{ yyval.Object = new UnaryEx(yypos, (Operations)value_stack.array[value_stack.top-2].yyval.Integer, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 308: // expr_without_chain -> T_PRINT expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Print, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 309: // expr_without_chain -> '@' expr \r\n{ yyval.Object = new UnaryEx(yypos, Operations.AtSign, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 310: // expr_without_chain -> expr T_BOOLEAN_OR expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Or, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 311: // expr_without_chain -> expr T_BOOLEAN_AND expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.And, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 312: // expr_without_chain -> expr T_LOGICAL_OR expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Or, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 313: // expr_without_chain -> expr T_LOGICAL_AND expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.And, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 314: // expr_without_chain -> expr T_LOGICAL_XOR expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Xor, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 315: // expr_without_chain -> expr '|' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.BitOr, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 316: // expr_without_chain -> expr '&' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.BitAnd, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 317: // expr_without_chain -> expr '^' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.BitXor, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 318: // expr_without_chain -> concat_exprs \r\n{ yyval.Object = new ConcatEx(yypos, new List<Expression>((List<Expression>)value_stack.array[value_stack.top-1].yyval.Object)); }\r\n        return;\r\n      case 319: // expr_without_chain -> expr '+' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Add, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 320: // expr_without_chain -> expr '-' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Sub, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 321: // expr_without_chain -> expr '*' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Mul, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 322: // expr_without_chain -> expr T_POW expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Pow, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 323: // expr_without_chain -> expr '/' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Div, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 324: // expr_without_chain -> expr '%' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Mod, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 325: // expr_without_chain -> expr T_SL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.ShiftLeft, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 326: // expr_without_chain -> expr T_SR expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.ShiftRight, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 327: // expr_without_chain -> expr T_IS_IDENTICAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Identical, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 328: // expr_without_chain -> expr T_IS_NOT_IDENTICAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.NotIdentical, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 329: // expr_without_chain -> expr T_IS_EQUAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.Equal, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 330: // expr_without_chain -> expr T_IS_NOT_EQUAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.NotEqual, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 331: // expr_without_chain -> expr '<' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.LessThan, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 332: // expr_without_chain -> expr T_IS_SMALLER_OR_EQUAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.LessThanOrEqual, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 333: // expr_without_chain -> expr '>' expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.GreaterThan, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 334: // expr_without_chain -> expr T_IS_GREATER_OR_EQUAL expr \r\n{ yyval.Object = new BinaryEx(yypos, Operations.GreaterThanOrEqual, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 335: // expr_without_chain -> expr T_INSTANCEOF type_ref \r\n{ yyval.Object = new InstanceOfEx(yypos, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (TypeRef)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 336: // expr_without_chain -> T_TYPEOF type_ref \r\n{ yyval.Object = new TypeOfEx(yypos, (TypeRef)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 337: // expr_without_chain -> parenthesis_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object;}\r\n        return;\r\n      case 338: // expr_without_chain -> expr '?' expr ':' expr \r\n{ yyval.Object = new ConditionalEx(yypos, (Expression)value_stack.array[value_stack.top-5].yyval.Object, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 339: // expr_without_chain -> expr '?' ':' expr \r\n{ yyval.Object = new ConditionalEx(yypos, (Expression)value_stack.array[value_stack.top-4].yyval.Object, null, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 340: // expr_without_chain -> array_ex \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 341: // expr_without_chain -> array_ex '[' expr ']' \r\n{ yyval.Object = new ItemUse(yypos, (VarLikeConstructUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 342: // expr_without_chain -> T_YIELD \r\n{ yyval.Object = new YieldEx(yypos);  }\r\n        return;\r\n      case 343: // expr_without_chain -> T_LIST '(' assignment_list ')' '=' expr \r\n{ yyval.Object = new ListEx(yypos, (List<Expression>)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 344: // expr_without_chain -> T_ISSET '(' writable_chain_list ')' \r\n{ yyval.Object = new IssetEx(yypos, (List<VariableUse>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 345: // expr_without_chain -> T_EMPTY '(' chain ')' \r\n{ yyval.Object = new EmptyEx(yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 346: // expr_without_chain -> T_EVAL '(' expr ')' \r\n{ yyval.Object = new EvalEx(yypos, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 347: // expr_without_chain -> T_EXIT exit_expr_opt \r\n{ yyval.Object = new ExitEx(yypos, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 348: // expr_without_chain -> scalar_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 349: // expr_without_chain -> string_constant '[' expr ']' \r\n{ yyval.Object = new StringLiteralDereferenceEx(yypos, (Expression)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 350: // expr_without_chain -> '`' composite_string_opt '`' \r\n{ yyval.Object = new ShellEx(yypos, CreateConcatExOrStringLiteral(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, false)); }\r\n        return;\r\n      case 351: // expr_without_chain -> T_INCLUDE expr \r\n{ yyval.Object = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, yypos, InclusionTypes.Include, (Expression)value_stack.array[value_stack.top-1].yyval.Object); reductionsSink.InclusionReduced(this, (IncludingEx)yyval.Object); }\r\n        return;\r\n      case 352: // expr_without_chain -> T_INCLUDE_ONCE expr \r\n{ yyval.Object = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, yypos, InclusionTypes.IncludeOnce, (Expression)value_stack.array[value_stack.top-1].yyval.Object); reductionsSink.InclusionReduced(this, (IncludingEx)yyval.Object); }\r\n        return;\r\n      case 353: // expr_without_chain -> T_REQUIRE expr \r\n{ yyval.Object = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, yypos, InclusionTypes.Require, (Expression)value_stack.array[value_stack.top-1].yyval.Object); reductionsSink.InclusionReduced(this, (IncludingEx)yyval.Object); }\r\n        return;\r\n      case 354: // expr_without_chain -> T_REQUIRE_ONCE expr \r\n{ yyval.Object = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, yypos, InclusionTypes.RequireOnce, (Expression)value_stack.array[value_stack.top-1].yyval.Object); reductionsSink.InclusionReduced(this, (IncludingEx)yyval.Object); }\r\n        return;\r\n      case 355: // expr_without_chain -> lambda_function_expression \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 356: // yield_ex -> T_YIELD expr \r\n{ yyval.Object = new YieldEx(yypos, null, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 357: // yield_ex -> T_YIELD expr T_DOUBLE_ARROW expr \r\n{ yyval.Object = new YieldEx(yypos, (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 358: // array_ex -> T_ARRAY '(' array_item_list_opt ')' \r\n{ yyval.Object = new ArrayEx(yypos, (List<Item>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 359: // array_ex -> '[' array_item_list_opt ']' \r\n{ yyval.Object = new ArrayEx(yypos, (List<Item>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 360: // new_expr -> T_NEW type_ref ctor_arguments_opt \r\n{ \r\n\t\tyyval.Object = new NewEx(yypos, (TypeRef)value_stack.array[value_stack.top-2].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t}\r\n        return;\r\n      case 361: // @15 -> \r\n{ \r\n\t\tEnterConditionalCode(); \r\n\t}\r\n        return;\r\n      case 362: // lambda_function_expression -> lambda_function_head_ formal_parameter_list_opt ')' lambda_function_use_vars @15 '{' inner_statement_list_opt '}' \r\n{\r\n\t\tvar static_ref = (Tuple<PhpMemberAttributes,bool>)value_stack.array[value_stack.top-8].yyval.Object;\r\n\r\n\t\tyyval.Object = new LambdaFunctionExpr(sourceUnit,\r\n            value_stack.array[value_stack.top-8].yypos, yypos, GetHeadingEnd(value_stack.array[value_stack.top-6].yypos), GetBodyStart(value_stack.array[value_stack.top-3].yypos),\r\n            GetScope(), currentNamespace,\r\n            static_ref.Item2, (List<FormalParam>)value_stack.array[value_stack.top-7].yyval.Object, (List<FormalParam>)value_stack.array[value_stack.top-5].yyval.Object,\r\n            StmtList(Combine(value_stack.array[value_stack.top-3].yypos, value_stack.array[value_stack.top-1].yypos), value_stack.array[value_stack.top-2].yyval.Object));\r\n\r\n\t\treductionsSink.LambdaFunctionReduced(this, (LambdaFunctionExpr)yyval.Object);\r\n\r\n\t\tLeaveConditionalCode();\r\n\t}\r\n        return;\r\n      case 363: // lambda_function_head_ -> T_FUNCTION '(' \r\n{ yyval.Object = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.None, false); }\r\n        return;\r\n      case 364: // lambda_function_head_ -> T_STATIC T_FUNCTION '(' \r\n{ yyval.Object = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.Static, false); }\r\n        return;\r\n      case 365: // lambda_function_head_ -> T_FUNCTION '&' '(' \r\n{ yyval.Object = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.None, true); }\r\n        return;\r\n      case 366: // lambda_function_head_ -> T_STATIC T_FUNCTION '&' '(' \r\n{ yyval.Object = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.Static, true); }\r\n        return;\r\n      case 367: // lambda_function_use_vars -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 368: // lambda_function_use_vars -> T_USE '(' lambda_function_use_var_list ')' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 369: // lambda_function_use_var_list -> lambda_function_use_var_list ',' lambda_function_use_var \r\n{ yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; ListAdd<FormalParam>(yyval.Object, (FormalParam)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 370: // lambda_function_use_var_list -> lambda_function_use_var \r\n{ yyval.Object = NewList<FormalParam>((FormalParam)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 371: // lambda_function_use_var -> reference_opt T_VARIABLE \r\n{\r\n\t\t\tyyval.Object = new FormalParam(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object, null, FormalParamFlags((int)value_stack.array[value_stack.top-2].yyval.Integer == 1, false), null, null);\r\n\t\t}\r\n        return;\r\n      case 372: // concat_exprs -> concat_exprs '.' expr \r\n{ yyval.Object = new List<Expression>((List<Expression>)value_stack.array[value_stack.top-3].yyval.Object){ (Expression)value_stack.array[value_stack.top-1].yyval.Object }; }\r\n        return;\r\n      case 373: // concat_exprs -> expr '.' expr \r\n{ yyval.Object = new List<Expression>(){ (Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object }; }\r\n        return;\r\n      case 374: // cast_operation -> T_BOOL_CAST \r\n{ yyval.Integer = (int)Operations.BoolCast; }\r\n        return;\r\n      case 375: // cast_operation -> T_INT8_CAST \r\n{ yyval.Integer = (int)Operations.Int8Cast; }\r\n        return;\r\n      case 376: // cast_operation -> T_INT16_CAST \r\n{ yyval.Integer = (int)Operations.Int16Cast; }\r\n        return;\r\n      case 377: // cast_operation -> T_INT32_CAST \r\n{ yyval.Integer = (int)Operations.Int32Cast; }\r\n        return;\r\n      case 378: // cast_operation -> T_INT64_CAST \r\n{ yyval.Integer = (int)Operations.Int64Cast; }\r\n        return;\r\n      case 379: // cast_operation -> T_UINT8_CAST \r\n{ yyval.Integer = (int)Operations.UInt8Cast; }\r\n        return;\r\n      case 380: // cast_operation -> T_UINT16_CAST \r\n{ yyval.Integer = (int)Operations.UInt16Cast; }\r\n        return;\r\n      case 381: // cast_operation -> T_UINT32_CAST \r\n{ yyval.Integer = (int)Operations.UInt32Cast; }\r\n        return;\r\n      case 382: // cast_operation -> T_UINT64_CAST \r\n{ yyval.Integer = (int)Operations.UInt64Cast; }\r\n        return;\r\n      case 383: // cast_operation -> T_DOUBLE_CAST \r\n{ yyval.Integer = (int)Operations.DoubleCast; }\r\n        return;\r\n      case 384: // cast_operation -> T_FLOAT_CAST \r\n{ yyval.Integer = (int)Operations.FloatCast; }\r\n        return;\r\n      case 385: // cast_operation -> T_DECIMAL_CAST \r\n{ yyval.Integer = (int)Operations.DecimalCast; }\r\n        return;\r\n      case 386: // cast_operation -> T_STRING_CAST \r\n{ yyval.Integer = (int)Operations.StringCast; }\r\n        return;\r\n      case 387: // cast_operation -> T_BINARY_CAST \r\n{ yyval.Integer = (int)Operations.BinaryCast; }\r\n        return;\r\n      case 388: // cast_operation -> T_UNICODE_CAST \r\n{ yyval.Integer = (int)Operations.UnicodeCast; }\r\n        return;\r\n      case 389: // cast_operation -> T_ARRAY_CAST \r\n{ yyval.Integer = (int)Operations.ArrayCast; }\r\n        return;\r\n      case 390: // cast_operation -> T_OBJECT_CAST \r\n{ yyval.Integer = (int)Operations.ObjectCast; }\r\n        return;\r\n      case 391: // cast_operation -> T_UNSET_CAST \r\n{ yyval.Integer = (int)Operations.UnsetCast; }\r\n        return;\r\n      case 392: // function_call -> qualified_namespace_name generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ \r\n\t\t  yyval.Object = CreateDirectFcnCall(yypos, (QualifiedName)value_stack.array[value_stack.top-5].yyval.Object, value_stack.array[value_stack.top-5].yypos, (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, (List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 393: // function_call -> class_constant generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ \r\n\t\t  yyval.Object = new DirectStMtdCall(yypos, (ClassConstUse)value_stack.array[value_stack.top-5].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, (List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 394: // function_call -> qualified_static_type_ref T_DOUBLE_COLON keyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ \r\n\t\t  yyval.Object = new IndirectStMtdCall(yypos, (GenericQualifiedName)value_stack.array[value_stack.top-7].yyval.Object, value_stack.array[value_stack.top-7].yypos, (CompoundVarUse)value_stack.array[value_stack.top-5].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, \r\n\t\t\t\t(List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object);\t\r\n\t\t}\r\n        return;\r\n      case 395: // function_call -> keyed_variable T_DOUBLE_COLON keyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ \r\n\t\t  yyval.Object = new IndirectStMtdCall(yypos,\r\n\t\t\t\tnew IndirectTypeRef(value_stack.array[value_stack.top-7].yypos, (VariableUse)value_stack.array[value_stack.top-7].yyval.Object, TypeRef.EmptyList), (CompoundVarUse)value_stack.array[value_stack.top-5].yyval.Object,\r\n\t\t\t\t(List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, (List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object);\t\r\n\t\t}\r\n        return;\r\n      case 396: // function_call -> keyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n{ \r\n\t\t  yyval.Object = new IndirectFcnCall(yypos, (CompoundVarUse)value_stack.array[value_stack.top-5].yyval.Object, (List<ActualParam>)value_stack.array[value_stack.top-2].yyval.Object, (List<TypeRef>)value_stack.array[value_stack.top-4].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 397: // qualified_static_type_ref -> qualified_namespace_name generic_dynamic_args_opt \r\n{ \r\n\t\t\tyyval.Object = new GenericQualifiedName(TranslateAny((QualifiedName)value_stack.array[value_stack.top-2].yyval.Object), TypeRef.ToStaticTypeRefs((List<TypeRef>)value_stack.array[value_stack.top-1].yyval.Object, errors, sourceUnit)); \r\n\t\t}\r\n        return;\r\n      case 398: // qualified_static_type_ref -> T_STATIC \r\n{\r\n\t\t\tyyval.Object = new GenericQualifiedName(new QualifiedName(Name.StaticClassName));\r\n\t\t}\r\n        return;\r\n      case 399: // type_ref -> qualified_namespace_name generic_dynamic_args_opt \r\n{ \r\n\t\t\tyyval.Object = new DirectTypeRef(yypos, TranslateAny((QualifiedName)value_stack.array[value_stack.top-2].yyval.Object), (List<TypeRef>)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 400: // type_ref -> indirect_type_ref generic_dynamic_args_opt \r\n{ \r\n\t\t\tyyval.Object = new IndirectTypeRef(yypos, (VariableUse)value_stack.array[value_stack.top-2].yyval.Object, (List<TypeRef>)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 401: // type_ref -> primitive_type \r\n{ \r\n\t\t\tyyval.Object = new PrimitiveTypeRef(yypos, (PrimitiveTypeName)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 402: // type_ref -> T_STATIC \r\n{\r\n\t\t\tyyval.Object = new DirectTypeRef(yypos, new QualifiedName(Name.StaticClassName), TypeRef.EmptyList);\r\n\t\t}\r\n        return;\r\n      case 403: // type_ref_list -> type_ref \r\n{ \r\n\t\t\tyyval.Object = NewList<TypeRef>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 404: // type_ref_list -> type_ref_list ',' type_ref \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tListAdd<TypeRef>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 405: // indirect_type_ref -> chain_base T_OBJECT_OPERATOR keyed_field_name keyed_field_names_opt \r\n{ \r\n\t\t\t((VarLikeConstructUse)value_stack.array[value_stack.top-2].yyval.Object).IsMemberOf = (VariableUse)value_stack.array[value_stack.top-4].yyval.Object; \r\n\t\t\tif (value_stack.array[value_stack.top-1].yyval.Object != null) \r\n\t\t\t{ \r\n\t\t\t\t((VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object).IsMemberOf = (VarLikeConstructUse)value_stack.array[value_stack.top-2].yyval.Object; \r\n\t\t\t\tyyval.Object = value_stack.array[value_stack.top-1].yyval.Object;\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t  yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t\t\t}   \r\n\t\t}\r\n        return;\r\n      case 406: // indirect_type_ref -> chain_base \r\n{ \r\n\t    yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; \r\n\t  }\r\n        return;\r\n      case 407: // ns_separator_opt -> \r\n{/*null*/}\r\n        return;\r\n      case 408: // ns_separator_opt -> T_NS_SEPARATOR \r\n{/*null*/}\r\n        return;\r\n      case 409: // qualified_namespace_name -> namespace_name_list \r\n{ yyval.Object = new QualifiedName((List<string>)value_stack.array[value_stack.top-1].yyval.Object, true, false); }\r\n        return;\r\n      case 410: // qualified_namespace_name -> T_NS_SEPARATOR namespace_name_list \r\n{ yyval.Object = new QualifiedName((List<string>)value_stack.array[value_stack.top-1].yyval.Object, true, true); }\r\n        return;\r\n      case 411: // qualified_namespace_name -> T_NAMESPACE T_NS_SEPARATOR namespace_name_list \r\n{\r\n\t\t\tif (currentNamespace != null)\r\n\t\t\t{\r\n\t\t\t\tyyval.Object = new QualifiedName(\r\n\t\t\t\t\tListAdd<string>(currentNamespace.QualifiedName.ToStringList(), value_stack.array[value_stack.top-1].yyval.Object ),\r\n\t\t\t\t\ttrue, true);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.NamespaceKeywordUsedOutsideOfNamespace, SourceUnit, value_stack.array[value_stack.top-3].yypos);\r\n\t\t\t\tyyerrok();\r\n\r\n\t\t\t\tyyval.Object = new QualifiedName((List<string>)value_stack.array[value_stack.top-1].yyval.Object, true, true);\r\n\t\t\t}\r\n\t\t}\r\n        return;\r\n      case 412: // namespace_name_list -> identifier \r\n{ yyval.Object = new List<string>( ((string)value_stack.array[value_stack.top-1].yyval.Object).Split('\\\\') ); if (((List<string>)yyval.Object)[0]==\"\"){ Debug.Fail(\"TODO: fully qualified namespace name!\"); } }\r\n        return;\r\n      case 413: // namespace_name_list -> namespace_name_list T_NS_SEPARATOR namespace_name_identifier \r\n{ yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; ListAdd<string>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object ); }\r\n        return;\r\n      case 414: // namespace_name_identifier -> identifier \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 415: // namespace_name_identifier -> T_LIST \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 416: // namespace_name_identifier -> T_BOOL_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 417: // namespace_name_identifier -> T_INT_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 418: // namespace_name_identifier -> T_INT64_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 419: // namespace_name_identifier -> T_DOUBLE_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 420: // namespace_name_identifier -> T_STRING_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 421: // namespace_name_identifier -> T_RESOURCE_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 422: // namespace_name_identifier -> T_OBJECT_TYPE \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 423: // namespace_name_identifier -> T_ARRAY \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 424: // namespace_name_identifier -> T_ABSTRACT \r\n{ yyval.Object = CSharpNameToken(value_stack.array[value_stack.top-1].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 425: // qualified_namespace_name_list -> qualified_namespace_name \r\n{ yyval.Object = NewList<QualifiedName>(value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 426: // qualified_namespace_name_list -> qualified_namespace_name_list ',' qualified_namespace_name \r\n{ yyval.Object = ListAdd<QualifiedName>(value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 427: // keyed_field_names_opt -> keyed_field_names_opt T_OBJECT_OPERATOR keyed_field_name \r\n{ \r\n\t\t\tif (value_stack.array[value_stack.top-3].yyval.Object != null) ((VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object).IsMemberOf = (VarLikeConstructUse)value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-1].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 428: // keyed_field_names_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 429: // exit_expr_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 430: // exit_expr_opt -> '(' ')' \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 431: // exit_expr_opt -> parenthesis_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 432: // ctor_arguments_opt -> \r\n{ yyval.Object = emptyActualParamListIndex; }\r\n        return;\r\n      case 433: // ctor_arguments_opt -> '(' actual_argument_list_opt ')' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 434: // constant_inititalizer -> constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 435: // constant_inititalizer -> T_ARRAY '(' constant_array_item_list_opt ')' \r\n{ yyval.Object = new ArrayEx(yypos, (List<Item>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 436: // constant_inititalizer -> '[' constant_array_item_list_opt ']' \r\n{ yyval.Object = new ArrayEx(yypos, (List<Item>)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 437: // constant_inititalizer -> '+' constant_inititalizer \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Plus, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 438: // constant_inititalizer -> '-' constant_inititalizer \r\n{ yyval.Object = new UnaryEx(yypos, Operations.Minus, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 439: // constant_inititalizer -> heredoc_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; if (!(value_stack.array[value_stack.top-1].yyval.Object is StringLiteral)) this.ErrorSink.Add(FatalErrors.SyntaxError, SourceUnit, value_stack.array[value_stack.top-1].yypos, CoreResources.nowdoc_expected); }\r\n        return;\r\n      case 440: // constant_inititalizer -> string_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; if (!(value_stack.array[value_stack.top-1].yyval.Object is StringLiteral)) this.ErrorSink.Add(FatalErrors.SyntaxError, SourceUnit, value_stack.array[value_stack.top-1].yypos, CoreResources.constant_value_neither_scalar_nor_null); }\r\n        return;\r\n      case 441: // constant -> literal_constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 442: // constant -> pseudo_constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 443: // constant -> class_constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 444: // constant -> global_constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 445: // literal_constant -> T_LNUMBER \r\n{ yyval.Object = new IntLiteral(yypos, value_stack.array[value_stack.top-1].yyval.Integer); }\r\n        return;\r\n      case 446: // literal_constant -> T_L64NUMBER \r\n{ yyval.Object = new LongIntLiteral(yypos, value_stack.array[value_stack.top-1].yyval.Long); }\r\n        return;\r\n      case 447: // literal_constant -> T_DNUMBER \r\n{ yyval.Object = new DoubleLiteral(yypos, value_stack.array[value_stack.top-1].yyval.Double); }\r\n        return;\r\n      case 448: // literal_constant -> string_constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 449: // string_constant -> T_CONSTANT_ENCAPSED_STRING \r\n{ yyval.Object = (value_stack.array[value_stack.top-1].yyval.Object is string) ? (Literal)new StringLiteral(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object) : (Literal)new BinaryStringLiteral(yypos, (byte[])value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 450: // pseudo_constant -> T_LINE \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Line); }\r\n        return;\r\n      case 451: // pseudo_constant -> T_FILE \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.File); }\r\n        return;\r\n      case 452: // pseudo_constant -> T_DIR \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Dir); }\r\n        return;\r\n      case 453: // pseudo_constant -> T_CLASS_C \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Class); }\r\n        return;\r\n      case 454: // pseudo_constant -> T_TRAIT_C \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Trait); }\r\n        return;\r\n      case 455: // pseudo_constant -> T_METHOD_C \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Method); }\r\n        return;\r\n      case 456: // pseudo_constant -> T_FUNC_C \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Function); }\r\n        return;\r\n      case 457: // pseudo_constant -> T_NAMESPACE_C \r\n{ yyval.Object = new PseudoConstUse(yypos, PseudoConstUse.Types.Namespace); }\r\n        return;\r\n      case 458: // global_constant -> qualified_namespace_name \r\n{ yyval.Object = CreateGlobalConstUse(yypos, (QualifiedName)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 459: // class_constant -> qualified_static_type_ref T_DOUBLE_COLON identifier \r\n{ \r\n\t\t  yyval.Object = new ClassConstUse(yypos, (GenericQualifiedName)value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-1].yypos); \r\n\t\t}\r\n        return;\r\n      case 460: // class_constant -> keyed_variable T_DOUBLE_COLON identifier \r\n{\r\n\t\t\tyyval.Object = new ClassConstUse(yypos, new IndirectTypeRef(value_stack.array[value_stack.top-3].yypos, (VariableUse)value_stack.array[value_stack.top-3].yyval.Object, TypeRef.EmptyList), (string)value_stack.array[value_stack.top-1].yyval.Object, value_stack.array[value_stack.top-1].yypos); \r\n\t\t}\r\n        return;\r\n      case 461: // class_constant -> qualified_static_type_ref T_DOUBLE_COLON T_CLASS \r\n{\r\n\t\t\tyyval.Object = new PseudoClassConstUse(yypos, (GenericQualifiedName)value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-3].yypos, PseudoClassConstUse.Types.Class, value_stack.array[value_stack.top-1].yypos);\r\n\t\t}\r\n        return;\r\n      case 462: // scalar_expr -> constant \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 463: // scalar_expr -> T_STRING_VARNAME \r\n{ yyval.Object = new StringLiteral(yypos, scanner.GetEncapsedString(value_stack.array[value_stack.top-1].yyval.Offset, value_stack.array[value_stack.top-1].yyval.Integer)); }\r\n        return;\r\n      case 464: // scalar_expr -> string_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 465: // scalar_expr -> heredoc_expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 466: // @16 -> \r\n{ scanner.InUnicodeString = false; }\r\n        return;\r\n      case 467: // heredoc_expr -> T_START_HEREDOC @16 composite_string_opt T_END_HEREDOC \r\n{ yyval.Object = CreateConcatExOrStringLiteral(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, true); }\r\n        return;\r\n      case 468: // @17 -> \r\n{ scanner.InUnicodeString = false; }\r\n        return;\r\n      case 469: // heredoc_expr -> T_BINARY_HEREDOC @17 composite_string_opt T_END_HEREDOC \r\n{ yyval.Object = CreateConcatExOrStringLiteral(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, true); }\r\n        return;\r\n      case 470: // @18 -> \r\n{ scanner.InUnicodeString = unicodeSemantics; }\r\n        return;\r\n      case 471: // string_expr -> '\"' @18 composite_string_opt '\"' \r\n{ yyval.Object = CreateConcatExOrStringLiteral(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, false); }\r\n        return;\r\n      case 472: // @19 -> \r\n{ scanner.InUnicodeString = unicodeSemantics; }\r\n        return;\r\n      case 473: // string_expr -> T_BINARY_DOUBLE @19 composite_string_opt '\"' \r\n{ yyval.Object = CreateConcatExOrStringLiteral(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, false); }\r\n        return;\r\n      case 474: // writable_chain_list -> writable_chain_list ',' writable_chain \r\n{ \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t\tListAdd<VariableUse>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 475: // writable_chain_list -> writable_chain \r\n{ \r\n\t\t\tyyval.Object = NewList<VariableUse>(value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 476: // writable_chain -> chain \r\n{ CheckVariableUse(value_stack.array[value_stack.top-1].yypos, value_stack.array[value_stack.top-1].yyval.Object); yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 477: // chain -> chain_base_with_function_calls T_OBJECT_OPERATOR keyed_field_name actual_arguments_opt member_access_chain_opt \r\n{ \r\n      yyval.Object = CreateVariableUse(yypos, (VarLikeConstructUse)value_stack.array[value_stack.top-5].yyval.Object, (VarLikeConstructUse)value_stack.array[value_stack.top-3].yyval.Object, (FcnParam)value_stack.array[value_stack.top-2].yyval.Object, (VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 478: // chain -> chain_base_with_function_calls \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 479: // member_access_chain_opt -> member_access_chain_opt member_access \r\n{ \r\n\t\t\tyyval.Object = CreatePropertyVariables((VarLikeConstructUse)value_stack.array[value_stack.top-2].yyval.Object, (VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 480: // member_access_chain_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 481: // member_access -> T_OBJECT_OPERATOR keyed_field_name actual_arguments_opt \r\n{ \r\n      yyval.Object = CreatePropertyVariable(yypos, (CompoundVarUse)value_stack.array[value_stack.top-2].yyval.Object, (FcnParam)value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 482: // key_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 483: // key_opt -> expr \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 484: // compound_variable -> T_VARIABLE \r\n{ yyval.Object = new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object);}\r\n        return;\r\n      case 485: // compound_variable -> '$' '{' expr '}' \r\n{ yyval.Object = new IndirectVarUse(yypos, 1, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 486: // keyed_compound_variable -> keyed_compound_variable '[' key_opt ']' \r\n{ yyval.Object = new ItemUse(yypos, (CompoundVarUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 487: // keyed_compound_variable -> keyed_compound_variable '{' expr '}' \r\n{ yyval.Object = new ItemUse(yypos, (CompoundVarUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 488: // keyed_compound_variable -> compound_variable \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object;}\r\n        return;\r\n      case 489: // keyed_variable -> keyed_compound_variable \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 490: // keyed_variable -> simple_indirect_reference keyed_compound_variable \r\n{ yyval.Object = new IndirectVarUse(yypos, value_stack.array[value_stack.top-2].yyval.Integer, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 491: // keyed_function_call -> keyed_function_call '[' key_opt ']' \r\n{ yyval.Object = new ItemUse(yypos, (VarLikeConstructUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object, true); }\r\n        return;\r\n      case 492: // keyed_function_call -> keyed_function_call '{' expr '}' \r\n{ yyval.Object = new ItemUse(yypos, (VarLikeConstructUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object, true); }\r\n        return;\r\n      case 493: // keyed_function_call -> function_call \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object;}\r\n        return;\r\n      case 494: // chain_base -> keyed_variable \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 495: // chain_base -> qualified_static_type_ref T_DOUBLE_COLON keyed_variable \r\n{ \r\n\t\tif (value_stack.array[value_stack.top-1].yyval.Object is DirectVarUse && ((DirectVarUse)value_stack.array[value_stack.top-1].yyval.Object).VarName.IsThisVariableName)\r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-1].yyval.Object;\t// you know, in PHP ... whatever::$this means $this\r\n\t\telse\r\n\t\t\tyyval.Object = CreateStaticFieldUse(yypos, (GenericQualifiedName)value_stack.array[value_stack.top-3].yyval.Object, value_stack.array[value_stack.top-3].yypos, (CompoundVarUse)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t  }\r\n        return;\r\n      case 496: // chain_base -> keyed_variable T_DOUBLE_COLON keyed_variable \r\n{ \r\n\t\tyyval.Object = CreateStaticFieldUse(yypos, (CompoundVarUse)value_stack.array[value_stack.top-3].yyval.Object, (CompoundVarUse)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t  }\r\n        return;\r\n      case 497: // chain_base_with_function_calls -> chain_base \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 498: // chain_base_with_function_calls -> keyed_function_call \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 499: // chain_base_with_function_calls -> '(' new_expr ')' \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 500: // keyed_field_name -> keyed_simple_field_name \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 501: // keyed_field_name -> keyed_variable \r\n{ yyval.Object = new IndirectVarUse(yypos, 1, (VariableUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 502: // keyed_simple_field_name -> keyed_simple_field_name '[' key_opt ']' \r\n{ yyval.Object = new ItemUse(yypos, (CompoundVarUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 503: // keyed_simple_field_name -> keyed_simple_field_name '{' expr '}' \r\n{ yyval.Object = new ItemUse(yypos, (CompoundVarUse)value_stack.array[value_stack.top-4].yyval.Object, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 504: // keyed_simple_field_name -> identifier \r\n{ yyval.Object = new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 505: // keyed_simple_field_name -> '{' expr '}' \r\n{ yyval.Object = new IndirectVarUse(yypos, 1, (Expression)value_stack.array[value_stack.top-2].yyval.Object); }\r\n        return;\r\n      case 506: // simple_indirect_reference -> '$' \r\n{ yyval.Integer = 1; }\r\n        return;\r\n      case 507: // simple_indirect_reference -> simple_indirect_reference '$' \r\n{ yyval.Integer = value_stack.array[value_stack.top-2].yyval.Integer + 1; }\r\n        return;\r\n      case 508: // assignment_list -> assignment_list ',' assignment_list_element_opt \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<Expression>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 509: // assignment_list -> assignment_list_element_opt \r\n{ \r\n\t    yyval.Object = NewList<Expression>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t  }\r\n        return;\r\n      case 510: // assignment_list_element_opt -> chain \r\n{ yyval.Object = value_stack.array[value_stack.top-1].yyval.Object; }\r\n        return;\r\n      case 511: // assignment_list_element_opt -> T_LIST '(' assignment_list ')' \r\n{ yyval.Object = new ListEx(yypos, (List<Expression>)value_stack.array[value_stack.top-2].yyval.Object, null ); }\r\n        return;\r\n      case 512: // assignment_list_element_opt -> \r\n{ yyval.Object = null; }\r\n        return;\r\n      case 513: // array_item_list_opt -> \r\n{ yyval.Object = emptyItemListIndex; }\r\n        return;\r\n      case 514: // array_item_list_opt -> array_item_list comma_opt \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 515: // array_item_list -> array_item_list ',' array_item \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<Item>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 516: // array_item_list -> array_item \r\n{ \r\n\t\t  yyval.Object = NewList<Item>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 517: // array_item -> expr \r\n{ yyval.Object = new ValueItem(null, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 518: // array_item -> expr T_DOUBLE_ARROW expr \r\n{ yyval.Object = new ValueItem((Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 519: // array_item -> expr T_DOUBLE_ARROW '&' writable_chain \r\n{ yyval.Object = new RefItem((Expression)value_stack.array[value_stack.top-4].yyval.Object, (VariableUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 520: // array_item -> '&' writable_chain \r\n{ yyval.Object = new RefItem(null, (VariableUse)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 521: // constant_array_item_list_opt -> \r\n{ yyval.Object = emptyItemListIndex; }\r\n        return;\r\n      case 522: // constant_array_item_list_opt -> constant_array_item_list comma_opt \r\n{ yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 523: // constant_array_item_list -> constant_array_item_list ',' constant_array_item \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-3].yyval.Object; \r\n\t\t  ListAdd<Item>(yyval.Object, value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 524: // constant_array_item_list -> constant_array_item \r\n{ \r\n\t\t  yyval.Object = NewList<Item>(value_stack.array[value_stack.top-1].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 525: // constant_array_item -> constant_inititalizer T_DOUBLE_ARROW constant_inititalizer \r\n{ yyval.Object = new ValueItem((Expression)value_stack.array[value_stack.top-3].yyval.Object, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 526: // constant_array_item -> constant_inititalizer \r\n{ yyval.Object = new ValueItem(null, (Expression)value_stack.array[value_stack.top-1].yyval.Object); }\r\n        return;\r\n      case 527: // composite_string_opt -> composite_string_opt string_embedded_variable \r\n{ \r\n\t\t\tPhpStringBuilder sb = strBufStack.Pop();\r\n\t\t\t\r\n\t\t\tif (sb.Length > 0)\r\n\t\t\t  ListAdd<Expression>(value_stack.array[value_stack.top-2].yyval.Object, sb.CreateLiteral()); \r\n\t\t\t\r\n\t\t\tListAdd<Expression>(value_stack.array[value_stack.top-2].yyval.Object, (VarLikeConstructUse)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t\t\r\n\t\t\tstrBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); \r\n\t\t\tyyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t\t}\r\n        return;\r\n      case 528: // composite_string_opt -> composite_string_opt T_STRING \r\n{ \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, value_stack.array[value_stack.top-1].yyval.Offset, value_stack.array[value_stack.top-1].yyval.Integer, value_stack.array[value_stack.top-1].yypos); \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 529: // composite_string_opt -> composite_string_opt T_NUM_STRING \r\n{ \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, value_stack.array[value_stack.top-1].yyval.Offset, value_stack.array[value_stack.top-1].yyval.Integer, value_stack.array[value_stack.top-1].yypos); \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 530: // composite_string_opt -> composite_string_opt T_ENCAPSED_AND_WHITESPACE \r\n{ \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, value_stack.array[value_stack.top-1].yyval.Offset, value_stack.array[value_stack.top-1].yyval.Integer, value_stack.array[value_stack.top-1].yypos); \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 531: // composite_string_opt -> composite_string_opt T_BAD_CHARACTER \r\n{ \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, value_stack.array[value_stack.top-1].yyval.Offset, value_stack.array[value_stack.top-1].yyval.Integer, value_stack.array[value_stack.top-1].yypos); \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 532: // composite_string_opt -> composite_string_opt T_CHARACTER \r\n{ \r\n\t    strBufStack.Peek().Append((int)value_stack.array[value_stack.top-1].yyval.Integer, value_stack.array[value_stack.top-1].yypos); \r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 533: // composite_string_opt -> composite_string_opt '[' \r\n{ strBufStack.Peek().Append('[', value_stack.array[value_stack.top-1].yypos); yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 534: // composite_string_opt -> composite_string_opt ']' \r\n{ strBufStack.Peek().Append(']', value_stack.array[value_stack.top-1].yypos); yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 535: // composite_string_opt -> composite_string_opt '{' \r\n{ strBufStack.Peek().Append('{', value_stack.array[value_stack.top-1].yypos); yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 536: // composite_string_opt -> composite_string_opt '}' \r\n{ strBufStack.Peek().Append('}', value_stack.array[value_stack.top-1].yypos); yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; }\r\n        return;\r\n      case 537: // composite_string_opt -> composite_string_opt T_OBJECT_OPERATOR \r\n{ \r\n\t    strBufStack.Peek().Append(\"->\", value_stack.array[value_stack.top-1].yypos);\r\n\t    yyval.Object = value_stack.array[value_stack.top-2].yyval.Object;\r\n\t  }\r\n        return;\r\n      case 538: // composite_string_opt -> \r\n{ \r\n\t    yyval.Object = new List<Expression>(); \r\n\t    strBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); \r\n\t  }\r\n        return;\r\n      case 539: // string_embedded_variable -> T_VARIABLE \r\n{ \r\n\t\t\tyyval.Object = new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 540: // @20 -> \r\n{ strBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); }\r\n        return;\r\n      case 541: // string_embedded_variable -> T_VARIABLE '[' @20 string_embedded_key ']' \r\n{\r\n\t\t\tstrBufStack.Pop();\r\n\t\t\tyyval.Object = new ItemUse(yypos, new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-5].yyval.Object),(Expression)value_stack.array[value_stack.top-2].yyval.Object);\r\n\t\t}\r\n        return;\r\n      case 542: // string_embedded_variable -> T_VARIABLE T_OBJECT_OPERATOR T_STRING \r\n{ \r\n\t\t\tyyval.Object = new DirectVarUse(value_stack.array[value_stack.top-1].yypos, scanner.GetEncapsedString(value_stack.array[value_stack.top-1].yyval.Offset,value_stack.array[value_stack.top-1].yyval.Integer)); \r\n\t\t\t((DirectVarUse)yyval.Object).IsMemberOf = new DirectVarUse(value_stack.array[value_stack.top-3].yypos, (string)value_stack.array[value_stack.top-3].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 543: // string_embedded_variable -> T_DOLLAR_OPEN_CURLY_BRACES expr '}' \r\n{ \r\n\t\t  yyval.Object = new IndirectVarUse(yypos, 1, (Expression)value_stack.array[value_stack.top-2].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 544: // string_embedded_variable -> T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' \r\n{ \r\n\t\t\tyyval.Object = new ItemUse(yypos, new DirectVarUse(yypos, scanner.GetEncapsedString(value_stack.array[value_stack.top-5].yyval.Offset,value_stack.array[value_stack.top-5].yyval.Integer)), (Expression)value_stack.array[value_stack.top-3].yyval.Object); \r\n\t\t}\r\n        return;\r\n      case 545: // string_embedded_variable -> T_CURLY_OPEN chain '}' \r\n{ \r\n\t\t  yyval.Object = value_stack.array[value_stack.top-2].yyval.Object; \r\n\t\t}\r\n        return;\r\n      case 546: // string_embedded_key -> T_STRING \r\n{ \r\n\t\t\t/* Constants are not looked for within strings */\r\n\t\t\tyyval.Object = new StringLiteral(yypos, scanner.GetEncapsedString(value_stack.array[value_stack.top-1].yyval.Offset,value_stack.array[value_stack.top-1].yyval.Integer));\r\n\t\t}\r\n        return;\r\n      case 547: // string_embedded_key -> T_NUM_STRING \r\n{ \r\n\t\t\tyyval.Object = new StringLiteral(yypos, scanner.GetEncapsedString(value_stack.array[value_stack.top-1].yyval.Offset,value_stack.array[value_stack.top-1].yyval.Integer)); \r\n\t\t}\r\n        return;\r\n      case 548: // string_embedded_key -> T_VARIABLE \r\n{ \r\n\t  yyval.Object = new DirectVarUse(yypos, (string)value_stack.array[value_stack.top-1].yyval.Object); \r\n\t}\r\n        return;\r\n    }\r\n  }\r\n\r\n  protected override string TerminalToString(int terminal)\r\n  {\r\n    if (((Tokens)terminal).ToString() != terminal.ToString())\r\n      return ((Tokens)terminal).ToString();\r\n    else\r\n      return CharToString((char)terminal);\r\n  }\r\n\r\n\r\n}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Generators/Generate.cmd",
    "content": "\"..\\..\\..\\Tools\\cslex\" \"Lexer.lex\" \"..\\Generated\\Lexer.cs\" /v:2\r\n\"..\\..\\..\\Tools\\gppg\" /l /r \"Parser.y\" \"..\\Generated\\Parser.cs\" \"..\\Generated\\Parser.log\" \r\n\r\npause"
  },
  {
    "path": "Source/Core.Parsers/Generators/Lexer.lex",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek. Based on PHP5 and PHP6 grammar tokens definition. \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing PHP.Core;\r\n\r\nusing System.Collections.Generic;\r\n\r\n%%\r\n\r\n%namespace PHP.Core.Parsers\r\n%type Tokens\r\n%class Lexer\r\n%eofval Tokens.EOF\r\n%errorval Tokens.ERROR\r\n%attributes public partial\r\n%function GetNextToken\r\n%ignorecase\r\n%charmap Map\r\n%char\r\n\r\n%x INITIAL\r\n%x ST_IN_SCRIPTING\r\n%x ST_DOUBLE_QUOTES\r\n%x ST_SINGLE_QUOTES\r\n%x ST_BACKQUOTE\r\n%x ST_HEREDOC\r\n%x ST_NEWDOC\r\n%x ST_LOOKING_FOR_PROPERTY\r\n%x ST_LOOKING_FOR_VARNAME\r\n%x ST_DOC_COMMENT\r\n%x ST_COMMENT\r\n%x ST_ONE_LINE_COMMENT\r\n\r\nHexDigit                [0-9A-Fa-f]\r\n\r\nLNUM                    [0-9]+\r\nDNUM                    ([0-9]*[.][0-9]+)|([0-9]+[.][0-9]*)\r\nEXPONENT_DNUM           (({LNUM}|{DNUM})[eE][+-]?{LNUM})\r\nHNUM                    \"0x\"{HexDigit}+\r\nBNUM\t\t\t\t\t\"0b\"[01]+\r\nLABEL                   [a-zA-Z_][a-zA-Z0-9_]*\r\nWHITESPACE              [ \\n\\r\\t]+\r\nTABS_AND_SPACES         [ \\t]*\r\nTOKENS                  [;:,.\\[\\]()|^&+-/*=%!~$<>?@]\r\nESCAPED_AND_WHITESPACE  [\\n\\t\\r #'.:;,()|^&+-/*=%!~<>?@]+\r\nANY_CHAR                (.|[\\n\\r])\r\nNEWLINE                 (\"\\r\"|\"\\n\"|\"\\r\\n\")\r\nNS_SEPARATOR\t\t\t(\"\\\\\")\r\n\r\nSlashedOctalNumber      \"\\\\\"[0-7][0-7]?[0-7]?\r\nSlashedHexNumber        \"\\\\\"[x]{HexDigit}{HexDigit}?\r\nSlashedUnicodeCharCode  \"\\\\\"[uU]{HexDigit}?{HexDigit}?{HexDigit}?{HexDigit}?{HexDigit}?{HexDigit}?\r\nSlashedUnicodeCharName  \"\\\\\"[C](\"{\"[A-Z0-9 -]+\"}\")?\r\nSlashedSingleQuote      \"\\\\'\"\r\nSlashedDoubleQuotes     \"\\\\\\\"\"\r\nSlashedBackQuote        \"\\\\`\"\r\nSlashedSlash            \"\\\\\\\\\"\r\nSlashedSpecialChar      \"\\\\\"[ntr\\\\$]\r\nSlashedOpenBrace        \"\\\\{\"\r\nSlashedAnyChar          \"\\\\\"{ANY_CHAR}\r\nNonVariableStart        [^a-zA-Z_{]\r\n\r\n%%\r\n\r\n<INITIAL>(([^<]|\"<\"[^?%s<])+)|\"<\" { \r\n\treturn Tokens.T_INLINE_HTML; \r\n}\r\n\r\n<INITIAL>\"<?\"|\"<script\"{WHITESPACE}+\"language\"{WHITESPACE}*\"=\"{WHITESPACE}*(\"php\"|\"\\\"php\\\"\"|\"\\'php\\'\"){WHITESPACE}*\">\" {\r\n\tif (AllowShortTags || TokenLength>2) \r\n\t{ \r\n\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\treturn Tokens.T_OPEN_TAG;\r\n\t} \r\n\telse \r\n\t{\r\n\t\treturn Tokens.T_INLINE_HTML;\r\n\t}\r\n}\r\n\r\n<INITIAL>(\"<s\"[^< \\n\\r\\t]*) { \r\n\treturn Tokens.T_INLINE_HTML; \r\n}\r\n\r\n<INITIAL>\"<%=\"|\"<?=\" {\r\n\tif (GetTokenChar(1) != '%' || AllowAspTags) \r\n\t{\r\n\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\treturn Tokens.T_OPEN_TAG_WITH_ECHO;\r\n\t} \r\n\telse \r\n\t{\r\n\t\treturn Tokens.T_INLINE_HTML;\r\n\t}\r\n}\r\n\r\n<INITIAL>\"<%\" { \r\n\tif (AllowAspTags)\r\n\t{\r\n\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\treturn Tokens.T_OPEN_TAG;\r\n\t} \r\n\telse \r\n\t{\r\n\t\treturn Tokens.T_INLINE_HTML;\r\n\t}\r\n}\r\n\r\n<INITIAL>\"<?php\"([ \\t]|{NEWLINE}) {\r\n\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\treturn Tokens.T_OPEN_TAG;\r\n}\r\n\r\n<INITIAL>{ANY_CHAR}    { return Tokens.ERROR; }\r\n\r\n\r\n<ST_IN_SCRIPTING>(\"?>\"|\"</script\"{WHITESPACE}*\">\"){NEWLINE}? { \r\n\tBEGIN(LexicalStates.INITIAL); \r\n\treturn Tokens.T_CLOSE_TAG; \r\n}\r\n\r\n<ST_IN_SCRIPTING>\"exit\"       \t\t\t{ return Tokens.T_EXIT; }\r\n<ST_IN_SCRIPTING>\"die\"        \t\t\t{ return Tokens.T_EXIT; }\r\n<ST_IN_SCRIPTING>\"function\"   \t\t\t{ return Tokens.T_FUNCTION; }\r\n<ST_IN_SCRIPTING>\"const\"      \t\t\t{ return Tokens.T_CONST; }\r\n<ST_IN_SCRIPTING>\"return\"     \t\t\t{ return Tokens.T_RETURN; }\r\n<ST_IN_SCRIPTING>\"yield\"     \t\t\t{ return Tokens.T_YIELD; }\r\n<ST_IN_SCRIPTING>\"if\"         \t\t\t{ return Tokens.T_IF; }\r\n<ST_IN_SCRIPTING>\"elseif\"     \t\t\t{ return Tokens.T_ELSEIF; }\r\n<ST_IN_SCRIPTING>\"endif\"      \t\t\t{ return Tokens.T_ENDIF; }\r\n<ST_IN_SCRIPTING>\"else\"       \t\t\t{ return Tokens.T_ELSE; }\r\n<ST_IN_SCRIPTING>\"while\"      \t\t\t{ return Tokens.T_WHILE; }\r\n<ST_IN_SCRIPTING>\"endwhile\"   \t\t\t{ return Tokens.T_ENDWHILE; }\r\n<ST_IN_SCRIPTING>\"do\"         \t\t\t{ return Tokens.T_DO; }\r\n<ST_IN_SCRIPTING>\"for\"        \t\t\t{ return Tokens.T_FOR; }\r\n<ST_IN_SCRIPTING>\"endfor\"     \t\t\t{ return Tokens.T_ENDFOR; }\r\n<ST_IN_SCRIPTING>\"foreach\"    \t\t\t{ return Tokens.T_FOREACH; }\r\n<ST_IN_SCRIPTING>\"endforeach\" \t\t\t{ return Tokens.T_ENDFOREACH; }\r\n<ST_IN_SCRIPTING>\"declare\" \t\t\t    { return Tokens.T_DECLARE; }\r\n<ST_IN_SCRIPTING>\"enddeclare\" \t\t\t{ return Tokens.T_ENDDECLARE; }\r\n<ST_IN_SCRIPTING>\"as\"         \t\t\t{ return Tokens.T_AS; }\r\n<ST_IN_SCRIPTING>\"switch\"     \t\t\t{ return Tokens.T_SWITCH; }\r\n<ST_IN_SCRIPTING>\"endswitch\"  \t\t\t{ return Tokens.T_ENDSWITCH; }\r\n<ST_IN_SCRIPTING>\"case\"       \t\t\t{ return Tokens.T_CASE; }\r\n<ST_IN_SCRIPTING>\"default\"    \t\t\t{ return Tokens.T_DEFAULT; }\r\n<ST_IN_SCRIPTING>\"break\"      \t\t\t{ return Tokens.T_BREAK; }\r\n<ST_IN_SCRIPTING>\"continue\"   \t\t\t{ return Tokens.T_CONTINUE; }\r\n<ST_IN_SCRIPTING>\"echo\"       \t\t\t{ return Tokens.T_ECHO; }\r\n<ST_IN_SCRIPTING>\"print\"      \t\t\t{ return Tokens.T_PRINT; }\r\n<ST_IN_SCRIPTING>\"class\"      \t\t\t{ return Tokens.T_CLASS; }\r\n<ST_IN_SCRIPTING>\"trait\"      \t\t\t{ return Tokens.T_TRAIT; }\r\n<ST_IN_SCRIPTING>\"insteadof\"      \t\t{ return Tokens.T_INSTEADOF; }\r\n<ST_IN_SCRIPTING>\"extends\"    \t\t\t{ return Tokens.T_EXTENDS; }\r\n<ST_IN_SCRIPTING>\"new\"        \t\t\t{ return Tokens.T_NEW; }\r\n<ST_IN_SCRIPTING>\"var\"        \t\t\t{ return Tokens.T_VAR; }\r\n<ST_IN_SCRIPTING>\"eval\"\t\t\t\t\t\t\t{ return Tokens.T_EVAL; }\r\n<ST_IN_SCRIPTING>\"include\"\t\t\t\t\t{ return Tokens.T_INCLUDE; }\r\n<ST_IN_SCRIPTING>\"include_once\" \t\t{ return Tokens.T_INCLUDE_ONCE; }\r\n<ST_IN_SCRIPTING>\"require\"\t\t\t\t\t{ return Tokens.T_REQUIRE; }\r\n<ST_IN_SCRIPTING>\"require_once\" \t\t{ return Tokens.T_REQUIRE_ONCE; }\r\n<ST_IN_SCRIPTING>\"global\"\t\t\t\t\t\t{ return Tokens.T_GLOBAL; }\r\n<ST_IN_SCRIPTING>\"isset\"\t\t\t\t\t\t{ return Tokens.T_ISSET; }\r\n<ST_IN_SCRIPTING>\"empty\"\t\t\t\t\t\t{ return Tokens.T_EMPTY; }\r\n<ST_IN_SCRIPTING>\"static\"\t\t\t\t\t\t{ return Tokens.T_STATIC; }\r\n<ST_IN_SCRIPTING>\"unset\"\t\t\t\t\t\t{ return Tokens.T_UNSET; }\r\n<ST_IN_SCRIPTING>\"or\" \t\t\t\t\t\t\t{ return Tokens.T_LOGICAL_OR; }\r\n<ST_IN_SCRIPTING>\"and\"\t\t\t\t\t\t\t{ return Tokens.T_LOGICAL_AND; }\r\n<ST_IN_SCRIPTING>\"xor\"\t\t\t\t\t\t\t{ return Tokens.T_LOGICAL_XOR; }\r\n<ST_IN_SCRIPTING>\"list\"\t\t\t\t\t\t\t{ return Tokens.T_LIST; }\r\n<ST_IN_SCRIPTING>\"array\"\t\t\t \t\t\t{ return Tokens.T_ARRAY; }\r\n<ST_IN_SCRIPTING>\"callable\"\t\t\t \t\t\t{ return Tokens.T_CALLABLE; }\r\n<ST_IN_SCRIPTING>\"__CLASS__\"    \t\t{ return Tokens.T_CLASS_C; }\r\n<ST_IN_SCRIPTING>\"__TRAIT__\"    \t\t{ return Tokens.T_TRAIT_C; }\r\n<ST_IN_SCRIPTING>\"__FUNCTION__\" \t\t{ return Tokens.T_FUNC_C; }\r\n<ST_IN_SCRIPTING>\"__METHOD__\"   \t\t{ return Tokens.T_METHOD_C; }\r\n<ST_IN_SCRIPTING>\"__LINE__\"     \t\t{ return Tokens.T_LINE; }\r\n<ST_IN_SCRIPTING>\"__FILE__\"     \t\t{ return Tokens.T_FILE; } \r\n<ST_IN_SCRIPTING>\"__DIR__\"     \t\t\t{ return Tokens.T_DIR; } \r\n\r\n<ST_IN_SCRIPTING>\"try\"              { return Tokens.T_TRY; }\r\n<ST_IN_SCRIPTING>\"catch\"            { return Tokens.T_CATCH; }\r\n<ST_IN_SCRIPTING>\"finally\"          { return Tokens.T_FINALLY; }\r\n<ST_IN_SCRIPTING>\"throw\"            { return Tokens.T_THROW; }\r\n<ST_IN_SCRIPTING>\"interface\"        { return Tokens.T_INTERFACE; } \r\n<ST_IN_SCRIPTING>\"implements\"       { return Tokens.T_IMPLEMENTS; }\r\n<ST_IN_SCRIPTING>\"clone\"            { return Tokens.T_CLONE; } \r\n<ST_IN_SCRIPTING>\"abstract\"         { return Tokens.T_ABSTRACT; }\r\n<ST_IN_SCRIPTING>\"final\"            { return Tokens.T_FINAL; }\r\n<ST_IN_SCRIPTING>\"private\"          { return Tokens.T_PRIVATE; }\r\n<ST_IN_SCRIPTING>\"protected\"        { return Tokens.T_PROTECTED; }\r\n<ST_IN_SCRIPTING>\"public\"           { return Tokens.T_PUBLIC; }\r\n<ST_IN_SCRIPTING>\"instanceof\"       { return Tokens.T_INSTANCEOF; }\r\n\r\n<ST_IN_SCRIPTING>\"__NAMESPACE__\"    { return Tokens.T_NAMESPACE_C; }\r\n<ST_IN_SCRIPTING>\"namespace\"        { return Tokens.T_NAMESPACE; }\r\n<ST_IN_SCRIPTING>\"use\"\t\t\t\t{ return Tokens.T_USE; }\r\n<ST_IN_SCRIPTING>\"import\"\t\t\t{ return Tokens.T_IMPORT; }\r\n<ST_IN_SCRIPTING>\"goto\"             { return Tokens.T_GOTO; }\r\n\r\n<ST_IN_SCRIPTING>\"bool\"             { return Tokens.T_BOOL_TYPE; }\r\n<ST_IN_SCRIPTING>\"int\"              { return Tokens.T_INT_TYPE; }\r\n<ST_IN_SCRIPTING>\"int64\"            { return Tokens.T_INT64_TYPE; }\r\n<ST_IN_SCRIPTING>\"double\"           { return Tokens.T_DOUBLE_TYPE; }\r\n<ST_IN_SCRIPTING>\"string\"           { return Tokens.T_STRING_TYPE; }\r\n<ST_IN_SCRIPTING>\"resource\"         { return Tokens.T_RESOURCE_TYPE; }\r\n<ST_IN_SCRIPTING>\"object\"           { return Tokens.T_OBJECT_TYPE; }\r\n<ST_IN_SCRIPTING>\"clrtypeof\"        { return Tokens.T_TYPEOF; }\r\n\r\n<ST_IN_SCRIPTING>\"partial\"          { return Tokens.T_PARTIAL; }\r\n\r\n<ST_IN_SCRIPTING>\"<:\"           \t\t{ return Tokens.T_LGENERIC; }\r\n<ST_IN_SCRIPTING>\":>\"           \t\t{ return Tokens.T_RGENERIC; }\r\n                                \t\t         \r\n<ST_IN_SCRIPTING>\"__get\"        \t\t{ return Tokens.T_GET; }\r\n<ST_IN_SCRIPTING>\"__set\"        \t\t{ return Tokens.T_SET; }\r\n<ST_IN_SCRIPTING>\"__call\"       \t\t{ return Tokens.T_CALL; }\r\n<ST_IN_SCRIPTING>\"__callStatic\"       \t{ return Tokens.T_CALLSTATIC; }\r\n<ST_IN_SCRIPTING>\"__tostring\"   \t\t{ return Tokens.T_TOSTRING; }\r\n<ST_IN_SCRIPTING>\"__construct\"  \t\t{ return Tokens.T_CONSTRUCT; }\r\n<ST_IN_SCRIPTING>\"__destruct\"   \t\t{ return Tokens.T_DESTRUCT; }\r\n<ST_IN_SCRIPTING>\"__wakeup\"     \t\t{ return Tokens.T_WAKEUP; }\r\n<ST_IN_SCRIPTING>\"__sleep\"      \t\t{ return Tokens.T_SLEEP; }\r\n<ST_IN_SCRIPTING>\"parent\"       \t\t{ return Tokens.T_PARENT; }\r\n<ST_IN_SCRIPTING>\"self\"         \t\t{ return Tokens.T_SELF; }\r\n<ST_IN_SCRIPTING>\"__autoload\"   \t\t{ return Tokens.T_AUTOLOAD; }\r\n<ST_IN_SCRIPTING>\"true\"         \t\t{ return Tokens.T_TRUE; }\r\n<ST_IN_SCRIPTING>\"false\"        \t\t{ return Tokens.T_FALSE; }\r\n<ST_IN_SCRIPTING>\"null\"\t\t\t\t\t{ return Tokens.T_NULL; }\r\n\r\n<ST_IN_SCRIPTING>\"=>\"           \t\t{ return Tokens.T_DOUBLE_ARROW; }\r\n<ST_IN_SCRIPTING>\"++\"           \t\t{ return Tokens.T_INC; }\r\n<ST_IN_SCRIPTING>\"--\"           \t\t{ return Tokens.T_DEC; }\r\n<ST_IN_SCRIPTING>\"===\"          \t\t{ return Tokens.T_IS_IDENTICAL; }\r\n<ST_IN_SCRIPTING>\"!==\"          \t\t{ return Tokens.T_IS_NOT_IDENTICAL; }\r\n<ST_IN_SCRIPTING>\"==\"           \t\t{ return Tokens.T_IS_EQUAL; }\r\n<ST_IN_SCRIPTING>\"!=\"|\"<>\"      \t\t{ return Tokens.T_IS_NOT_EQUAL; }\r\n<ST_IN_SCRIPTING>\"<=\"           \t\t{ return Tokens.T_IS_SMALLER_OR_EQUAL; }\r\n<ST_IN_SCRIPTING>\">=\"           \t\t{ return Tokens.T_IS_GREATER_OR_EQUAL; }\r\n<ST_IN_SCRIPTING>\"+=\"           \t\t{ return Tokens.T_PLUS_EQUAL; }\r\n<ST_IN_SCRIPTING>\"-=\"           \t\t{ return Tokens.T_MINUS_EQUAL; }\r\n<ST_IN_SCRIPTING>\"*=\"           \t\t{ return Tokens.T_MUL_EQUAL; }\r\n<ST_IN_SCRIPTING>\"*\\*\"\t\t\t\t\t{ return Tokens.T_POW; }\n<ST_IN_SCRIPTING>\"*\\*=\"\t\t\t\t\t{ return Tokens.T_POW_EQUAL; }\r\n<ST_IN_SCRIPTING>\"/=\"           \t\t{ return Tokens.T_DIV_EQUAL; }\r\n<ST_IN_SCRIPTING>\".=\"           \t\t{ return Tokens.T_CONCAT_EQUAL; }\r\n<ST_IN_SCRIPTING>\"%=\"           \t\t{ return Tokens.T_MOD_EQUAL; }\r\n<ST_IN_SCRIPTING>\"<<=\"          \t\t{ return Tokens.T_SL_EQUAL; }\r\n<ST_IN_SCRIPTING>\">>=\"          \t\t{ return Tokens.T_SR_EQUAL; }\r\n<ST_IN_SCRIPTING>\"&=\"           \t\t{ return Tokens.T_AND_EQUAL; }\r\n<ST_IN_SCRIPTING>\"|=\"           \t\t{ return Tokens.T_OR_EQUAL; }\r\n<ST_IN_SCRIPTING>\"^=\"           \t\t{ return Tokens.T_XOR_EQUAL; }\r\n<ST_IN_SCRIPTING>\"||\"           \t\t{ return Tokens.T_BOOLEAN_OR; }\r\n<ST_IN_SCRIPTING>\"&&\"           \t\t{ return Tokens.T_BOOLEAN_AND; }\r\n<ST_IN_SCRIPTING>\"<<\"           \t\t{ return Tokens.T_SL; }\r\n<ST_IN_SCRIPTING>\">>\"           \t\t{ return Tokens.T_SR; }\r\n<ST_IN_SCRIPTING>\"::\"           \t\t{ return Tokens.T_DOUBLE_COLON; }\r\n\r\n<ST_IN_SCRIPTING>\"->\"           \t\t{ yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); return Tokens.T_OBJECT_OPERATOR; }\r\n<ST_IN_SCRIPTING>\"$\"{LABEL}     \t\t{ return Tokens.T_VARIABLE; }\r\n\r\n<ST_IN_SCRIPTING>{TOKENS}          \t{ return (Tokens)GetTokenChar(0); }\r\n<ST_IN_SCRIPTING>{LABEL}           \t{ return Tokens.T_STRING; }\r\n<ST_IN_SCRIPTING>{NS_SEPARATOR}\t\t{ return Tokens.T_NS_SEPARATOR; }\r\n<ST_IN_SCRIPTING>\"...\"\t\t\t\t{ return Tokens.T_ELLIPSIS; }\r\n<ST_IN_SCRIPTING>{WHITESPACE}      \t{ return Tokens.T_WHITESPACE; }\r\n<ST_IN_SCRIPTING>{LNUM}            \t{ return Tokens.ParseDecimalNumber; }\r\n<ST_IN_SCRIPTING>{HNUM}            \t{ return Tokens.ParseHexadecimalNumber; }\r\n<ST_IN_SCRIPTING>{DNUM}            \t{ return Tokens.ParseDouble; }\r\n<ST_IN_SCRIPTING>{EXPONENT_DNUM}   \t{ return Tokens.ParseDouble; } \r\n<ST_IN_SCRIPTING>{BNUM}            \t{ return Tokens.ParseBinaryNumber; }\r\n\r\n<ST_IN_SCRIPTING>\"#pragma\"[ \\t]+\"line\"[ \\t]+[-]?{LNUM}[ \\t]* { BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_LINE; }\r\n<ST_IN_SCRIPTING>\"#pragma\"[ \\t]+\"file\"[^\\n]+                 { BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_FILE; }\r\n<ST_IN_SCRIPTING>\"#pragma\"[ \\t]+\"default\"[ \\t]+\"line\"[ \\t]*  { BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_DEFAULT_LINE; }\r\n<ST_IN_SCRIPTING>\"#pragma\"[ \\t]+\"default\"[ \\t]+\"file\"[ \\t]*  { BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); return Tokens.T_PRAGMA_DEFAULT_FILE; }\r\n\r\n<ST_IN_SCRIPTING>\"#\"               \t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); yymore(); break; }\r\n<ST_IN_SCRIPTING>\"//\"              \t{ BEGIN(LexicalStates.ST_ONE_LINE_COMMENT); yymore(); break; }\r\n<ST_IN_SCRIPTING>\"/**\"{WHITESPACE} \t{ BEGIN(LexicalStates.ST_DOC_COMMENT); yymore(); break; }\r\n<ST_IN_SCRIPTING>\"/*\"              \t{ BEGIN(LexicalStates.ST_COMMENT); yymore(); break; }\r\n\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"int8\"{TABS_AND_SPACES}\")\"                     { return Tokens.T_INT8_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"int16\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_INT16_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}(\"int\"|\"int32\"|\"integer\"){TABS_AND_SPACES}\")\"  { return Tokens.T_INT32_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"int64\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_INT64_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"uint8\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_UINT8_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"uint16\"{TABS_AND_SPACES}\")\"                   { return Tokens.T_UINT16_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}(\"uint\"|\"uint32\"){TABS_AND_SPACES}\")\"          { return Tokens.T_UINT32_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"uint64\"{TABS_AND_SPACES}\")\"                   { return Tokens.T_UINT64_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}(\"real\"|\"double\"){TABS_AND_SPACES}\")\"          { return Tokens.T_DOUBLE_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"float\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_FLOAT_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"string\"{TABS_AND_SPACES}\")\"                   { return Tokens.T_STRING_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"binary\"{TABS_AND_SPACES}\")\"                   { return Tokens.T_BINARY_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"unicode\"{TABS_AND_SPACES}\")\"                  { return Tokens.T_UNICODE_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"array\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_ARRAY_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"object\"{TABS_AND_SPACES}\")\"                   { return Tokens.T_OBJECT_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}(\"bool\"|\"boolean\"){TABS_AND_SPACES}\")\"         { return Tokens.T_BOOL_CAST; }\r\n<ST_IN_SCRIPTING>\"(\"{TABS_AND_SPACES}\"unset\"{TABS_AND_SPACES}\")\"                    { return Tokens.T_UNSET_CAST; }\r\n\r\n<ST_IN_SCRIPTING>\"{\"   { yy_push_state(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_LBRACE; }\r\n<ST_IN_SCRIPTING>\"}\"   { if (!yy_pop_state()) return Tokens.ERROR; return Tokens.T_RBRACE; }\r\n\r\n<ST_IN_SCRIPTING>\"%>\"{NEWLINE}? {\r\n\tif (AllowAspTags) \r\n\t{\r\n\t\tBEGIN(LexicalStates.INITIAL);\r\n\t\treturn Tokens.T_CLOSE_TAG;\r\n\t} \r\n\telse\r\n\t{\r\n\t\tyyless(1);\r\n\t\treturn Tokens.T_PERCENT;\r\n\t}\r\n}\r\n\r\n<ST_IN_SCRIPTING>(b?[\"]([^$\"\\\\]|(\"\\\\\".)|(\"\\\\\"{NEWLINE}))*[\"]) { return Tokens.DoubleQuotedString; }\r\n<ST_IN_SCRIPTING>(b?[']([^'\\\\]|(\"\\\\\".)|(\"\\\\\"{NEWLINE}))*['])  { return Tokens.SingleQuotedString; }\r\n<ST_IN_SCRIPTING>(i[']([^'\\\\<>`#\\r\\n]|(\"\\\\\"[^<>`#\\r\\n]))+[']) { return Tokens.SingleQuotedIdentifier; }\r\n<ST_IN_SCRIPTING>(i[']([^'\\\\]|(\"\\\\\".)|(\"\\\\\"{NEWLINE}))*['])   { return Tokens.ErrorInvalidIdentifier; }\r\n\r\n<ST_IN_SCRIPTING>b?[\"]  \r\n{ \r\n\tBEGIN(LexicalStates.ST_DOUBLE_QUOTES); \r\n\treturn (GetTokenChar(0) != '\"') ? Tokens.T_BINARY_DOUBLE : Tokens.T_DOUBLE_QUOTES; \r\n}\r\n\r\n<ST_IN_SCRIPTING>b?['] \r\n{ \r\n\t// Gets here only in the case of unterminated singly-quoted string. That leads usually to an error token,\r\n\t// however when the source code is parsed per-line (as in Visual Studio colorizer) it is important to remember\r\n\t// that we are in the singly-quoted string at the end of the line.\r\n\tBEGIN(LexicalStates.ST_SINGLE_QUOTES); \r\n\tyymore(); \r\n\tbreak; \r\n}\r\n\r\n<ST_IN_SCRIPTING>[`]\r\n{ \r\n\tBEGIN(LexicalStates.ST_BACKQUOTE); \r\n\treturn Tokens.T_BACKQUOTE; \r\n}\r\n\r\n<ST_IN_SCRIPTING>b?\"<<<\"{TABS_AND_SPACES}({LABEL}|([']{LABEL}['])|([\"]{LABEL}[\"])){NEWLINE} {\r\n\tbool is_binary = GetTokenChar(0) != '<';\r\n\thereDocLabel = GetTokenSubstring(is_binary ? 4 : 3).Trim();\r\n\tvar newstate = LexicalStates.ST_HEREDOC;\r\n\tif (hereDocLabel[0] == '\"' || hereDocLabel[0] == '\\'')\r\n\t{\r\n\t\tif (hereDocLabel[0] == '\\'') newstate = LexicalStates.ST_NEWDOC;\t// newdoc syntax, continue in ST_NEWDOC lexical state\r\n\t\thereDocLabel = hereDocLabel.Substring(1, hereDocLabel.Length - 2);\t// trim quote characters around\r\n\t}\r\n\tBEGIN(newstate);\r\n\treturn is_binary ? Tokens.T_BINARY_HEREDOC : Tokens.T_START_HEREDOC;\r\n}\r\n\r\n<ST_IN_SCRIPTING>{ANY_CHAR} { return Tokens.ERROR; }\r\n\r\n\r\n\r\n\r\n\r\n<ST_LOOKING_FOR_PROPERTY>{LABEL} {\r\n\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\tinString = (CurrentLexicalState != LexicalStates.ST_IN_SCRIPTING); \r\n\tisCode = true;\r\n\treturn Tokens.T_STRING;\r\n}\r\n\r\n<ST_LOOKING_FOR_PROPERTY>{ANY_CHAR} {\r\n\tyyless(0);\r\n\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\tbreak;\r\n}\r\n\r\n\r\n\r\n<ST_LOOKING_FOR_VARNAME>{LABEL} {\r\n\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\tyy_push_state(LexicalStates.ST_IN_SCRIPTING);\r\n\treturn Tokens.T_STRING_VARNAME;\r\n}\r\n\r\n<ST_LOOKING_FOR_VARNAME>{ANY_CHAR} {\r\n\tyyless(0);\r\n\tif (!yy_pop_state()) return Tokens.ERROR;\r\n\tyy_push_state(LexicalStates.ST_IN_SCRIPTING);\r\n\tbreak;\r\n}\r\n\r\n\r\n\r\n<ST_ONE_LINE_COMMENT>\"?\"|\"%\"|\">\" { yymore(); break; }\r\n<ST_ONE_LINE_COMMENT>[^\\n\\r?%>]+ { yymore(); break; }\r\n<ST_ONE_LINE_COMMENT>{NEWLINE}   { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_LINE_COMMENT; }\r\n\r\n<ST_ONE_LINE_COMMENT>\"?>\"|\"%>\"   { \r\n  if (AllowAspTags || GetTokenChar(TokenLength - 2) != '%') \r\n  { \r\n\t\tyyless(0);\r\n\t\tBEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\treturn Tokens.T_LINE_COMMENT;\r\n\t} \r\n\telse \r\n\t{\r\n\t\tyymore();\r\n\t\tbreak;\r\n\t}\r\n}\r\n\r\n\r\n\r\n<ST_COMMENT>[^*]+       { yymore(); break; }\r\n<ST_COMMENT>\"*/\"        { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_COMMENT; }\r\n<ST_COMMENT>\"*\"         { yymore(); break; }\r\n\r\n\r\n\r\n<ST_DOC_COMMENT>[^*]+   { yymore(); break; }\r\n<ST_DOC_COMMENT>\"*/\"    { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_DOC_COMMENT; }\r\n<ST_DOC_COMMENT>\"*\"     { yymore(); break; }\r\n\r\n\r\n\r\n<ST_SINGLE_QUOTES>([^'\\\\]|(\"\\\\\".)|(\"\\\\\"{NEWLINE}))+ { yymore(); break; }\r\n<ST_SINGLE_QUOTES>\"'\"                               { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.SingleQuotedString; }\r\n\r\n\r\n\r\n<ST_HEREDOC,ST_NEWDOC>^{LABEL}(\";\")?{NEWLINE} {\r\n\tif (IsCurrentHeredocEnd(0))\r\n\t{\r\n\t  yyless(hereDocLabel.Length);\r\n\t  hereDocLabel = null;\r\n\t  BEGIN(LexicalStates.ST_IN_SCRIPTING);\r\n\t\treturn Tokens.T_END_HEREDOC;\r\n\t}\r\n\telse \r\n\t{\r\n\t\tinString = true;\r\n\t\treturn Tokens.T_STRING;\r\n\t}\r\n}\r\n\r\n<ST_HEREDOC>{LNUM}|{HNUM}                  { return Tokens.T_NUM_STRING; }\r\n<ST_HEREDOC>{LABEL}                        { inString = true; return Tokens.T_STRING; }\r\n<ST_HEREDOC>{SlashedOctalNumber}           { return Tokens.OctalCharCode; }\r\n<ST_HEREDOC>{SlashedHexNumber}             { return Tokens.HexCharCode; }\r\n<ST_HEREDOC>{SlashedUnicodeCharCode}       { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n<ST_HEREDOC>{SlashedUnicodeCharName}       { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n<ST_HEREDOC>{SlashedSpecialChar}           { return Tokens.EscapedCharacter; }\r\n<ST_HEREDOC>{SlashedOpenBrace}             { inString = true; return Tokens.T_STRING; }\r\n<ST_HEREDOC>{SlashedAnyChar}               { return Tokens.T_BAD_CHARACTER; }\r\n<ST_HEREDOC>[\"'`]+                         { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_HEREDOC>\"$\"{LABEL}                     { inString = true; return Tokens.T_VARIABLE; }\r\n<ST_HEREDOC>\"${\"                           { yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n<ST_HEREDOC>\"$\"{NonVariableStart}          { yyless(1); return Tokens.T_CHARACTER; }\r\n<ST_HEREDOC>\"->\"                           { yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n<ST_HEREDOC>(\"[\"|\"]\"|\"{\"|\"}\"|\"$\")          { inString = true; return (Tokens)GetTokenChar(0); }\r\n<ST_HEREDOC>\"{$\"                           { yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n<ST_HEREDOC>{ESCAPED_AND_WHITESPACE}       { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_HEREDOC,ST_NEWDOC>{ANY_CHAR}                     { return Tokens.T_CHARACTER; }\r\n\r\n\r\n<ST_DOUBLE_QUOTES>{LNUM}|{HNUM}            { return Tokens.T_NUM_STRING; }\r\n<ST_DOUBLE_QUOTES>{LABEL}                  { inString = true; return Tokens.T_STRING; }\r\n<ST_DOUBLE_QUOTES>{SlashedOctalNumber}     { return Tokens.OctalCharCode; }\r\n<ST_DOUBLE_QUOTES>{SlashedHexNumber}       { return Tokens.HexCharCode; }\r\n<ST_DOUBLE_QUOTES>{SlashedUnicodeCharCode} { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n<ST_DOUBLE_QUOTES>{SlashedUnicodeCharName} { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n<ST_DOUBLE_QUOTES>{SlashedDoubleQuotes}    { return Tokens.EscapedCharacter; }\r\n<ST_DOUBLE_QUOTES>{SlashedSpecialChar}     { return Tokens.EscapedCharacter; }\r\n<ST_DOUBLE_QUOTES>{SlashedOpenBrace}       { inString = true; return Tokens.T_STRING; }\r\n<ST_DOUBLE_QUOTES>{SlashedAnyChar}         { return Tokens.T_BAD_CHARACTER; }\r\n<ST_DOUBLE_QUOTES>[`]+                     { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_DOUBLE_QUOTES>[\"]                      { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_DOUBLE_QUOTES; }\r\n<ST_DOUBLE_QUOTES>\"$\"{LABEL}               { inString = true; return Tokens.T_VARIABLE; }\r\n<ST_DOUBLE_QUOTES>\"${\"                     { yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n<ST_DOUBLE_QUOTES>\"$\"{NonVariableStart}    { yyless(1); return Tokens.T_CHARACTER; }\r\n<ST_DOUBLE_QUOTES>\"->\"                     { yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n<ST_DOUBLE_QUOTES>\"{$\"                     { yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n<ST_DOUBLE_QUOTES>(\"[\"|\"]\"|\"{\"|\"}\"|\"$\")    { inString = true; return (Tokens)GetTokenChar(0); }\r\n<ST_DOUBLE_QUOTES>{ESCAPED_AND_WHITESPACE} { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_DOUBLE_QUOTES>{ANY_CHAR}               { return Tokens.T_CHARACTER; }\r\n\r\n\r\n\r\n<ST_BACKQUOTE>{LNUM}|{HNUM}                { return Tokens.T_NUM_STRING; }\r\n<ST_BACKQUOTE>{LABEL}                      { inString = true; return Tokens.T_STRING; }\r\n<ST_BACKQUOTE>{SlashedOctalNumber}         { return Tokens.OctalCharCode; }\r\n<ST_BACKQUOTE>{SlashedHexNumber}           { return Tokens.HexCharCode; }\r\n<ST_BACKQUOTE>{SlashedUnicodeCharCode}     { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharCode : Tokens.T_STRING; }\r\n<ST_BACKQUOTE>{SlashedUnicodeCharName}     { inString = true; return (inUnicodeString) ? Tokens.UnicodeCharName : Tokens.T_STRING; }\r\n<ST_BACKQUOTE>{SlashedBackQuote}           { return Tokens.EscapedCharacter; }\r\n<ST_BACKQUOTE>{SlashedSpecialChar}         { return Tokens.EscapedCharacter; }\r\n<ST_BACKQUOTE>{SlashedOpenBrace}           { inString = true; return Tokens.T_STRING; }\r\n<ST_BACKQUOTE>{SlashedAnyChar}             { return Tokens.T_BAD_CHARACTER; }\r\n<ST_BACKQUOTE>[\"]+                         { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_BACKQUOTE>[`]                          { BEGIN(LexicalStates.ST_IN_SCRIPTING); return Tokens.T_BACKQUOTE; }\r\n<ST_BACKQUOTE>\"$\"{LABEL}                   { inString = true; return Tokens.T_VARIABLE; }\r\n<ST_BACKQUOTE>\"${\"                         { yy_push_state(LexicalStates.ST_LOOKING_FOR_VARNAME); return Tokens.T_DOLLAR_OPEN_CURLY_BRACES; }\r\n<ST_BACKQUOTE>\"$\"{NonVariableStart}        { yyless(1); return Tokens.T_CHARACTER; }\r\n<ST_BACKQUOTE>\"->\"                         { yy_push_state(LexicalStates.ST_LOOKING_FOR_PROPERTY); inString = true; return Tokens.T_OBJECT_OPERATOR; }\r\n<ST_BACKQUOTE>(\"[\"|\"]\"|\"{\"|\"}\"|\"$\")        { inString = true; return (Tokens)GetTokenChar(0); }\r\n<ST_BACKQUOTE>\"{$\"                         { yy_push_state(LexicalStates.ST_IN_SCRIPTING); yyless(1); return Tokens.T_CURLY_OPEN; }\r\n<ST_BACKQUOTE>{ESCAPED_AND_WHITESPACE}     { return Tokens.T_ENCAPSED_AND_WHITESPACE; }\r\n<ST_BACKQUOTE>{ANY_CHAR}                   { return Tokens.T_CHARACTER; }\r\n\r\n\r\n"
  },
  {
    "path": "Source/Core.Parsers/Generators/Parser.y",
    "content": "/*\r\n\r\nCopyright (c) 2006 Tomas Matousek.\r\nCopyright (c) 2003-2005 Vaclav Novak (previous MC++ version for Flex/Bison)\r\n\r\nParser was generated using The Gardens Point Parser Generator (GPPG) using PHP language grammar based on Flex and Bison files\r\ndistributed with PHP5 and PHP6 interpreter.\r\n\r\n*/\r\n\r\nusing System.Diagnostics;\r\nusing PHP.Core;\r\nusing PHP.Core.AST;\r\nusing PHP.Core.Parsers.GPPG;\r\nusing FcnParam = System.Tuple<System.Collections.Generic.List<PHP.Core.AST.TypeRef>, System.Collections.Generic.List<PHP.Core.AST.ActualParam>, System.Collections.Generic.List<PHP.Core.AST.Expression>>;\r\n\r\n%%\r\n\r\n%namespace PHP.Core.Parsers\r\n%valuetype SemanticValueType\r\n%positiontype Text.Span\r\n%tokentype Toks\r\n%visibility public\r\n\r\n%union\r\n{\r\n\t// Integer and Offset are both used when generating code for string \r\n\t// with 'inline' variables. Other fields are not combined.\r\n\t\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\t\t\r\n\tpublic int Integer;\r\n\t[System.Runtime.InteropServices.FieldOffset(4)]\r\n\tpublic int Offset;\r\n\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\r\n\tpublic double Double;\r\n\t[System.Runtime.InteropServices.FieldOffset(0)]\r\n\tpublic long Long;\r\n\r\n\t[System.Runtime.InteropServices.FieldOffset(8)]\r\n\tpublic object Object; \r\n}\r\n\r\n/*\r\n  Ambiguities:\r\n  \r\n\t%expect 4\r\n\t\r\n  2 due to the dangling elseif/else.  Solved by shift.\r\n  1 due to arrays within encapsulated strings. Solved by shift. \r\n  1 due to objects within encapsulated strings.  Solved by shift.\r\n  \r\n\t  ambiguity:\r\n\t  \r\n\t  if (1)\r\n\t    if (2) echo \"2\";\r\n\t    else[if (3)] echo \"3\";\r\n\t\t\t    \r\n\t\treduction on else/elseif:\r\n\t\t\r\n\t\tif (1)\r\n\t    { if (2) echo \"2\"; }\r\n\t    else[if (3)] echo \"3\";\r\n\t\t\r\n\t\tshift on else/elseif (preferred):   \r\n\t\t\r\n\t\tif (1)\r\n\t    { if (2) echo \"2\";\r\n\t      else[if (3)] echo \"3\"; }\r\n\t\t\r\n\t\t\r\n\t\tambiguity:\t    \r\n\t\t\t    \r\n\t\tfrom $a as $b \r\n\t\tselect \r\n\t\t  from $c as $d \r\n\t\t  select $e \r\n\t\t  as $f in from $g as $h select $i;\r\n\r\n\t\treduction on as:\r\n\t\t\r\n\t\tfrom $a as $b \r\n\t\tselect \r\n\t\t  (from $c as $d \r\n\t\t  select $e) \r\n\t\tas $f in from $g as $h select $i;\r\n\r\n\t\tshift on as (preferred):\r\n\t\t\r\n\t\tfrom $a as $b \r\n\t\tselect \r\n\t\t  (from $c as $d \r\n\t\t  select $e \r\n\t\t  as $f in from $g as $h select $i);\r\n\r\n\r\n*/\r\n\r\n\r\n/* operators, starting from the least precedence */\r\n\r\n\r\n/* PHP operators start from 258 */\r\n\r\n%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE\r\n%left ','\r\n\r\n%left T_LOGICAL_OR\r\n%left T_LOGICAL_XOR\r\n%left T_LOGICAL_AND\r\n%right T_PRINT\r\n%right T_YIELD\r\n%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL\r\n%left '?' ':'\r\n%left T_BOOLEAN_OR\r\n%left T_BOOLEAN_AND\r\n%left '|'\r\n%left '^'\r\n%left '&'\r\n%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL\r\n%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL\r\n%left T_SL T_SR\r\n%left '+' '-' '.'\r\n%left '*' '/' '%'\r\n%right '!' '~' T_INC T_DEC '@' TypeCast\r\n%right '['\r\n%right T_POW\r\n%nonassoc T_NEW T_INSTANCEOF T_TYPEOF T_CLONE\r\n\r\n/* terminals declaration */\r\n\r\n%token<Integer> T_LNUMBER                 // int\r\n%token<Long> T_L64NUMBER                  // long \r\n%token<Double> T_DNUMBER                  // double\r\n%token T_STRING\r\n%token T_STRING_VARNAME\r\n%token<Object> T_VARIABLE\r\n%token T_NUM_STRING\r\n%token<Object> T_INLINE_HTML              // string\r\n%token<Integer> T_CHARACTER               // char\r\n%token T_BAD_CHARACTER\r\n%token T_ENCAPSED_AND_WHITESPACE\r\n%token<Object> T_CONSTANT_ENCAPSED_STRING // string\r\n%token T_EXIT\r\n%token T_IF\r\n%token T_ELSEIF\r\n%token T_ELSE\r\n%token T_ENDIF\r\n%token T_ECHO\r\n%token T_DO\r\n%token T_WHILE\r\n%token T_ENDWHILE\r\n%token T_FOR\r\n%token T_ENDFOR\r\n%token T_FOREACH\r\n%token T_ENDFOREACH\r\n%token T_DECLARE\r\n%token T_ENDDECLARE\r\n%token T_AS\r\n%token T_SWITCH\r\n%token T_ENDSWITCH\r\n%token T_CASE\r\n%token T_DEFAULT\r\n%token T_BREAK\r\n%token T_CONTINUE\r\n%token T_FUNCTION\r\n%token T_CONST\r\n%token T_RETURN\r\n%token T_GLOBAL\r\n%token T_STATIC\r\n%token T_VAR\r\n%token T_UNSET\r\n%token T_ISSET\r\n%token T_EMPTY\r\n%token T_CLASS\r\n%token T_TRAIT\r\n%token T_INSTEADOF\r\n%token T_EXTENDS\r\n%token T_OBJECT_OPERATOR\r\n%token T_DOUBLE_ARROW\r\n%token T_LIST\r\n%token T_ARRAY\r\n%token T_CALLABLE\r\n%token T_CLASS_C\r\n%token T_TRAIT_C\r\n%token T_METHOD_C\r\n%token T_FUNC_C\r\n%token T_LINE\r\n%token T_FILE\r\n%token T_DIR\r\n%token T_COMMENT\r\n%token T_DOC_COMMENT\r\n%token T_PRAGMA_LINE\r\n%token T_PRAGMA_FILE\r\n%token T_PRAGMA_DEFAULT_LINE\r\n%token T_PRAGMA_DEFAULT_FILE\r\n%token T_OPEN_TAG\r\n%token T_OPEN_TAG_WITH_ECHO\r\n%token T_CLOSE_TAG\r\n%token T_WHITESPACE\r\n%token T_START_HEREDOC\r\n%token T_END_HEREDOC\r\n%token T_DOLLAR_OPEN_CURLY_BRACES\r\n%token T_CURLY_OPEN\r\n%token T_DOUBLE_COLON\r\n%token T_PLUS_EQUAL  \r\n%token T_MINUS_EQUA  \r\n%token T_MUL_EQUAL   \r\n%token T_DIV_EQUAL   \r\n%token T_CONCAT_EQUAL\r\n%token T_MOD_EQUAL   \r\n%token T_AND_EQUAL   \r\n%token T_OR_EQUAL    \r\n%token T_XOR_EQUAL   \r\n%token T_SL_EQUAL    \r\n%token T_SR_EQUAL \r\n\r\n/* PHP5 */\r\n\r\n%token T_GOTO\r\n%token T_TRY\r\n%token T_CATCH\r\n%token T_FINALLY\r\n%token T_THROW\r\n%token T_INTERFACE     \r\n%token T_IMPLEMENTS\r\n%token T_ABSTRACT\t\t\r\n%token T_FINAL\t\t\t\r\n%token T_PRIVATE\t\t\r\n%token T_PROTECTED\t\t\r\n%token T_PUBLIC\t\t\t\r\n%token T_CLONE\r\n%token T_INSTANCEOF\r\n%token T_NAMESPACE\r\n%token T_NAMESPACE_C\r\n%token T_NS_SEPARATOR\r\n%token T_USE\r\n%token T_ELLIPSIS        // ...\n%token T_POW             // **\n%token T_POW_EQUAL       // **=\r\n\r\n/* PHP6 */\r\n\r\n%token T_BINARY_DOUBLE\r\n%token T_BINARY_HEREDOC\r\n\r\n/* PHP/CLR */\r\n\r\n%token T_PARENT  \r\n%token T_SELF  \r\n%token T_TRUE  \r\n%token T_FALSE  \r\n%token T_NULL\r\n\r\n%token T_GET  \r\n%token T_SET  \r\n%token T_CALL  \r\n%token T_CALLSTATIC\r\n%token T_TOSTRING\r\n%token T_CONSTRUCT\r\n%token T_DESTRUCT\r\n%token T_WAKEUP  \r\n%token T_SLEEP  \r\n%token T_AUTOLOAD\r\n\r\n%token T_PARTIAL\r\n%token T_LGENERIC\r\n%token T_RGENERIC\r\n\r\n%token T_IMPORT\t\t// pure mode\r\n\r\n%token T_BOOL_TYPE\r\n%token T_INT_TYPE\r\n%token T_INT64_TYPE\r\n%token T_DOUBLE_TYPE \r\n%token T_STRING_TYPE \r\n%token T_RESOURCE_TYPE\r\n%token T_OBJECT_TYPE\r\n%token T_TYPEOF\r\n\r\n%token T_BOOL_CAST   \r\n%token T_INT8_CAST   \r\n%token T_INT16_CAST  \r\n%token T_INT32_CAST  \r\n%token T_INT64_CAST  \r\n%token T_UINT8_CAST  \r\n%token T_UINT16_CAST \r\n%token T_UINT32_CAST \r\n%token T_UINT64_CAST \r\n%token T_DOUBLE_CAST \r\n%token T_FLOAT_CAST  \r\n%token T_DECIMAL_CAST\r\n%token T_STRING_CAST \r\n%token T_BINARY_CAST\r\n%token T_UNICODE_CAST\r\n%token T_ARRAY_CAST  \r\n%token T_OBJECT_CAST \r\n%token T_UNSET_CAST  \r\n  \r\n/* Nonterminals */\r\n\r\n%type<Integer> simple_indirect_reference              // int - number of indirections\r\n%type<Integer> reference_opt                          // 0 (false) or 1 (true)\r\n%type<Integer> variadic_opt                           // 0 (false) or 1 (true)\r\n%type<Object> identifier                              // String\r\n\r\n%type<Object> start \r\n%type<Object> non_empty_top_statement                 // Statement\r\n%type<Object> top_statement                           // Statement\r\n%type<Object> top_statement_list                      // List<Statement> \r\n%type<Object> use_statement_content_list              // List<KeyValuePair<string, QualifiedName>>\r\n%type<Object> use_statement_content                   // KeyValuePair<string, QualifiedName>\r\n%type<Object> ns_separator_opt\t\t\t\t\t\t  // null\r\n%type<Object> use_statement\t\t                      // EmptyStmt\r\n%type<Object> import_statement\t\t                  // EmptyStmt\r\n%type<Object> import_statement_list                   // EmptyStmt\r\n%type<Object> statement                               // Statement\r\n%type<Object> empty_statement                         // EmptyStmt\r\n%type<Object> non_empty_statement                     // Statement\r\n%type<Object> expression_statement                    // ExpressionStmt\r\n%type<Object> namespace_statement_list_opt            // List<Statement>\r\n%type<Object> namespace_statement                     // Statement\r\n%type<Object> function_declaration_statement          // FunctionDecl\r\n%type<Object> function_declaration_head\t\t\t\t  // Tuple<List<CustomAttribute>,bool>!\t// <attributes,is_ref>\r\n%type<Object> ref_opt_identifier\t\t\t\t\t  // Tuple<bool,string>!\t// <is_ref, func_name>\r\n%type<Object> class_entry_type\t\t\t\t\t\t  // T_CLASS|T_TRAIT\r\n%type<Object> class_declaration_statement             // TypeDecl\r\n%type<Object> namespace_declaration_statement         // NamespaceDecl\r\n%type<Object> global_constant_declarator              // GlobalConstantDecl\r\n%type<Object> global_constant_declarator_list         // List<GlobalConstantDecl>\r\n%type<Object> global_constant_declaration_statement   // GlobalConstDeclList\r\n%type<Object> inner_statement_list_opt                // List<Statement>\r\n%type<Object> inner_statement                         // Statement\r\n%type<Object> expr                                    // Expression\r\n%type<Object> parenthesis_expr\t\t\t\t\t\t  // Expression\r\n%type<Object> array_ex\t\t\t\t\t\t\t\t  // VarLikeConstructUse\r\n%type<Object> yield_ex\t\t\t\t\t\t\t\t  // YieldEx\r\n%type<Object> concat_exprs\t\t\t\t\t\t\t  // List<Expression>\r\n%type<Object> assignment_expression                   // AssignEx\r\n%type<Integer> cast_operation                         // Operation\r\n%type<Object> expr_without_chain                      // Expression\r\n%type<Object> new_expr\t\t\t\t\t\t\t\t  // NewEx\r\n%type<Object> expression_list                         // List<Expression>/*!*/\r\n%type<Object> expression_list_opt                     // List<Expression> \r\n%type<Object> foreach_variable                        // ForeachVar\r\n%type<Object> attributes_opt                          // List<CustomAttribute>\r\n%type<Object> attributes_group\t\t\t\t\t\t  // List<CustomAttribute>/*!*/\r\n%type<Object> attributes\t\t\t\t\t\t\t  // List<CustomAttribute>/*!*/\r\n%type<Object> attribute                               // CustomAttribute\r\n%type<Object> attribute_list                          // List<CustomAttribute>\r\n%type<Object> attribute_named_arg_list                // List<NamedActualParam>\r\n%type<Object> attribute_named_arg                     // NamedActualParam\r\n%type<Object> attribute_arg                           // ActualParam\r\n%type<Object> attribute_arg_list                      // List<ActualParam>\r\n\r\n%type<Object> constant                                // Expression \r\n%type<Object> literal_constant                        // Literal \r\n%type<Object> string_constant\t\t\t\t\t\t  // Literal\r\n%type<Object> pseudo_constant                         // PseudoConstUse \r\n%type<Object> global_constant                         // GlobalConstUse \r\n%type<Object> class_constant                          // ClassConstUse\r\n\r\n%type<Object> constant_inititalizer                   // Expression\r\n%type<Object> scalar_expr                             // Expression\r\n%type<Object> string_expr                             // Expression\r\n%type<Object> heredoc_expr\t\t\t\t\t\t\t  // Expression\r\n%type<Object> for_statement                           // Statement\r\n%type<Object> foreach_statement                       // Statement\r\n%type<Object> declare_statement                       // Statement\r\n%type<Object> while_statement                         // Statement\r\n%type<Object> elseif_list_opt                         // List<ConditionalStmt>\r\n%type<Object> elseif_colon_list_opt                   // List<ConditionalStmt>\r\n%type<Object> else_opt                                // Statement\r\n%type<Object> else_colon_opt                          // Statement\r\n\r\n%type<Object> formal_parameter                        // FormalParam!\r\n%type<Object> formal_parameter_list                   // List<FormalParam>!\r\n%type<Object> formal_parameter_list_opt               // List<FormalParam>!\r\n%type<Object> type_parameter_list_opt                 // List<FormalTypeParam>!\r\n%type<Object> type_parameter_list                     // List<FormalTypeParam>!\r\n%type<Object> type_parameter_with_defaults_list       // List<FormalTypeParam>!\r\n%type<Object> type_parameter_decl                     // FormalTypeParam!\r\n%type<Object> type_parameter_with_default_decl        // FormalTypeParam!\r\n%type<Object> actual_argument                         // ActualParam!\r\n%type<Object> actual_argument_list                    // List<ActualParam>!\r\n%type<Object> actual_argument_list_opt                // List<ActualParam>!\r\n%type<Object> actual_arguments_opt                    // null or FcnParam = Tuple<List<TypeRef>, List<ActualParam>, List<Expression>>\t// call type parameters, actual parameters, opt array dereferencing\r\n%type<Object> non_empty_actual_arguments_opt\t\t  // null or FcnParam\r\n%type<Object> base_ctor_call_opt                      // List<ActualParam>\r\n\r\n\r\n%type<Object> array_item                              // Item\r\n%type<Object> array_item_list                         // List<Item>\r\n%type<Object> array_item_list_opt                     // List<Item>\r\n%type<Object> constant_array_item                     // Item\r\n%type<Object> constant_array_item_list_opt            // List<Item>\r\n%type<Object> constant_array_item_list                // List<Item>\r\n\r\n%type<Object> exit_expr_opt                               // ExitEx\r\n%type<Object> key_opt   \r\n%type<Object> composite_string_opt                        // List<Expression> \r\n%type<Object> string_embedded_key                     // Expression\r\n%type<Object> unsupported_declare_list                // null\r\n%type<Object> function_call                           // FunctionCall\r\n%type<Object> keyed_function_call\t\t\t\t\t  // VarLikeConstructUse\r\n%type<Object> type_ref                                // TypeRef!\r\n%type<Object> type_ref_list                           // List<TypeRef>\r\n%type<Object> qualified_static_type_ref               // GenericQualifiedName\r\n%type<Object> interface_list                          // List<Tuple<GenericQualifiedName,Text.Span>>\r\n%type<Object> interface_extends_opt                  // List<Tuple<GenericQualifiedName,Text.Span>>\r\n%type<Object> variable_name                           \r\n\r\n%type<Object> generic_dynamic_args_opt                // List<TypeRef>!\r\n%type<Object> primitive_type                          // PrimitiveTypeName\r\n\r\n%type<Object> type_hint_opt                           // object (null, GenericQualifiedName, PrimitiveTypeName)\r\n%type<Object> chain_base_with_function_calls       \r\n%type<Object> keyed_simple_field_name \r\n%type<Object> chain                                   // VarLikeConstructUse \r\n%type<Object> chain_base \r\n%type<Object> keyed_field_name                        // CompoundVarUse\r\n%type<Object> indirect_type_ref                       // VariableUse\r\n%type<Object> writable_chain                          // VarLikeConstructUse\r\n%type<Object> assignment_list_element_opt                 // Expression\r\n%type<Object> writable_chain_list\r\n%type<Object> assignment_list                         // List<Expression>\r\n%type<Object> global_var                              // SimpleVarUse\r\n%type<Object> static_variable                         // StaticVarDecl\r\n%type<Object> static_variable_list                    // List<StaticVarDecl>!\r\n%type<Object> property_declarator                     // FieldDecl!\r\n%type<Object> property_declarator_list                // List<FieldDecl>!\r\n%type<Object> keyed_compound_variable      \r\n%type<Object> compound_variable \r\n%type<Object> string_embedded_variable \r\n%type<Object> global_var_list                     \t\t// List<SimpleVarUse>!\r\n%type<Object> keyed_variable\r\n%type<Object> member_access_chain_opt \r\n%type<Object> member_access \r\n%type<Object> switch_case_list \r\n%type<Object> case_list_opt\r\n%type<Object> method_body \r\n%type<Object> foreach_optional_arg \r\n%type<Object> keyed_field_names_opt\r\n%type<Object> class_constant_declarator               // ClassConstantDecl!\r\n%type<Object> class_constant_declarator_list          // List<ClassConstantDecl>!\r\n%type<Object> class_statement_list_opt\r\n%type<Object> class_statement\r\n%type<Object> implements_opt \r\n%type<Object> ctor_arguments_opt\r\n\r\n%type<Object> trait_use_statement\t\t\t\t\t  // TraitsUse\r\n%type<Object> trait_adaptations\t\t\t\t\t\t  // null or List<TraitsUse.TraitAdaptation>\r\n%type<Object> trait_adaptation_list\t\t\t\t\t  // null or List<TraitsUse.TraitAdaptation>\r\n%type<Object> non_empty_trait_adaptation_list\t\t  // List<TraitsUse.TraitAdaptation>\r\n%type<Object> trait_adaptation_statement\t\t\t  // TraitsUse.TraitAdaptation\r\n%type<Object> trait_precedence\r\n%type<Object> trait_method_reference\r\n%type<Object> trait_method_reference_fully_qualified\r\n%type<Object> trait_alias\r\n%type<Object> trait_modifiers\t\t\t\t\t\t  // PhpMemberAttributes?\r\n\r\n%type<Object> dynamic_class_name_variable_property \r\n%type<Object> catches_opt\t\t\t\t\t\t\t\t// List<CatchItem> or null\r\n%type<Object> catches\t\t\t\t\t\t\t\t\t// List<CatchItem>\r\n%type<Object> finally_opt\t\t\t\t\t\t\t\t// FinallyItem or null\r\n\r\n%type<Object> lambda_function_expression\t\t\t\t// LambdaFuncExpr!\r\n%type<Object> lambda_function_head_\t\t\t\t\t\t// Tuple<PhpMemberAttributes,bool>!\t// <static,is_ref>\r\n%type<Object> lambda_function_use_var\t\t\t\t\t// FormalParam!\r\n%type<Object> lambda_function_use_var_list\t\t\t\t// List<FormalParam>!\r\n%type<Object> lambda_function_use_vars\t\t\t\t\t// List<FormalParam>\r\n\r\n%type<Integer> modifier_opt                  // PhpMemberAttributes\r\n%type<Integer> visibility_opt                // PhpMemberAttributes\r\n%type<Integer> partial_opt                   // int (0, 1)\r\n\r\n%type<Integer> property_modifiers            // PhpMemberAttributes\r\n%type<Integer> member_modifiers_opt          // PhpMemberAttributes\r\n%type<Integer> member_modifiers              // PhpMemberAttributes\r\n%type<Integer> member_modifier               // PhpMemberAttributes\r\n\r\n%type<Integer> attribute_target_opt          // CustomAttribute.Targets\r\n\r\n%type<Object> extends_opt                    // Tuple<GenericQualifiedName,Text.Span>\r\n%type<Object> qualified_namespace_name       // QualifiedName\t// has base name\r\n%type<Object> namespace_name_list\t\t\t // List<string>\r\n%type<Object> namespace_name_identifier\t\t // string\r\n%type<Object> qualified_namespace_name_list  // List<QualifiedName>\t// have base name\r\n\r\n%% /* Productions */\r\n\r\nstart:\r\n\t\ttop_statement_list \r\n\t\t{ \r\n\t\t\tvar top_statements = StmtList(new Text.Span(0, sourceUnit.LineBreaks.TextLength), $1);\r\n\t\t\tastRoot = new GlobalCode(top_statements, sourceUnit);\r\n\t\t}\r\n\t|\timport_statement_list top_statement_list \r\n\t\t{ \r\n\t\t\tvar top_statements = StmtList(new Text.Span(0, sourceUnit.LineBreaks.TextLength), $2);\r\n\t\t\tastRoot = new GlobalCode(top_statements, sourceUnit);\r\n\t\t}\r\n;\r\n\r\ncomma_opt:\r\n\t  ','            { /* nop */ }\r\n\t|\t/* empty */    { /* nop */ }\r\n;\r\n\r\n/* Added to distinguish identifiers from encapsulated strings both represented by T_STRING */\r\nidentifier:\r\n\t\tT_STRING { $$ = $1.Object; }\r\n;\r\n\r\nimport_statement_list:\t/* pure mode */\r\n\t\timport_statement\t\t{ $$ = new EmptyStmt(@$); }\r\n\t|\timport_statement_list import_statement\t{ /*nop*/ }\r\n;\r\n\r\nimport_statement: /* pure mode */\r\n\tT_IMPORT T_NAMESPACE namespace_name_list ';'\t{ /* nop */ $$ = new EmptyStmt(@$); AddImport( new QualifiedName( (List<string>)$3, false, true ) ); }\r\n;\r\n\r\nuse_statement: /* PHP 5.3 */\r\n\t\tT_USE use_statement_content_list ';'\t\t\t{ $$ = new EmptyStmt(@$); AddAliases((List<KeyValuePair<string, QualifiedName>>)$2); }\r\n\t|\tT_USE T_FUNCTION use_statement_content_list ';'\t{ $$ = new EmptyStmt(@$); AddFunctionAliases((List<KeyValuePair<string, QualifiedName>>)$3); }\r\n\t|\tT_USE T_CONST use_statement_content_list ';'\t{ $$ = new EmptyStmt(@$); AddConstAliases((List<KeyValuePair<string, QualifiedName>>)$3); }\r\n;\r\n\r\nuse_statement_content_list: /* PHP 5.3 */\r\n\t\tuse_statement_content_list ',' ns_separator_opt use_statement_content\t{ $$ = ListAdd<KeyValuePair<string, QualifiedName>>($1, $4); }\r\n\t|\tns_separator_opt use_statement_content\t\t\t\t\t\t\t\t\t{ $$ = NewList<KeyValuePair<string, QualifiedName>>($2); }\r\n;\r\n\r\nuse_statement_content: /* PHP 5.3 */\r\n\t\tnamespace_name_list\t\t\t\t\t{ $$ = new KeyValuePair<string, QualifiedName>(null, new QualifiedName((List<string>)$1, true, true)); }\r\n\t|\tnamespace_name_list T_AS identifier\t{ $$ = new KeyValuePair<string, QualifiedName>((string)$3, new QualifiedName((List<string>)$1, true, true)); }\r\n;\r\n\r\ntop_statement_list:\r\n\t\ttop_statement_list top_statement { $$ = StatementListAdd($1, $2); } \r\n\t|\t/* empty */\t\t\t\t\t\t { $$ = new List<Statement>(); }\r\n;\r\n\r\ntop_statement:\r\n\t\tempty_statement                 { $$ = $1; }\r\n\t|\tnon_empty_top_statement         { $$ = $1; } \r\n;\r\n\r\nnon_empty_top_statement:\r\n\t\tnon_empty_statement             { $$ = CheckGlobalStatement((Statement)$1); }\r\n\t|\tuse_statement\t\t\t\t\t{ /* nop */ }\r\n\t|\tnamespace_declaration_statement { $$ = $1; } /* PHP 5.3 */\r\n\t|\tfunction_declaration_statement\t{ $$ = $1; }\r\n\t|\tclass_declaration_statement\t\t  { $$ = $1; }\r\n\t|\tglobal_constant_declaration_statement { $$ = $1; } /* PHP 5.3 */\r\n;\r\n\r\nnamespace_declaration_statement:   /* PHP 5.3 */ \t \r\n\t\tT_NAMESPACE \r\n\t\t{ \r\n\t\t\tcurrentNamespace = AnnotateDoc(new NamespaceDecl(@$));\r\n\t\t} \r\n\t\t'{' namespace_statement_list_opt '}' \r\n\t\t{\r\n\t\t\tcurrentNamespace.Statements = StmtList(Combine(@3, @5), $4);\r\n\t\t\tcurrentNamespace.UpdatePosition(@$);\r\n\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\t$$ = currentNamespace;\r\n\t\t\tcurrentNamespace = null;\r\n\t\t}\r\n\t\t\r\n\t|\tT_NAMESPACE namespace_name_list \r\n\t\t{ \r\n\t\t\tcurrentNamespace = AnnotateDoc(new NamespaceDecl(@$, (List<string>)$2, false));\r\n\t\t} \r\n\t\t'{' namespace_statement_list_opt '}' \r\n\t\t{\r\n\t\t\tcurrentNamespace.Statements = StmtList(Combine(@4, @6), $5);\r\n\t\t\tcurrentNamespace.UpdatePosition(@$);\r\n\t\t\t\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\t$$ = currentNamespace;\r\n\t\t\tcurrentNamespace = null;\r\n\t\t}\r\n\t\t\r\n\t|\tT_NAMESPACE namespace_name_list ';'\r\n\t\t{ \r\n\t\t\t$$ = currentNamespace = AnnotateDoc(new NamespaceDecl(@$, (List<string>)$2, true));\r\n\t\t\treductionsSink.NamespaceDeclReduced(this, currentNamespace);\r\n\t\t\tcurrentNamespace.Statements = new List<Statement>();\r\n\t\t}\t\t\r\n;\r\n\r\nnamespace_statement_list_opt: \t /* PHP 5.3 */\r\n\t\tnamespace_statement_list_opt namespace_statement  { $$ = StatementListAdd($1, $2); }\r\n\t|\t/* empty */                                       { $$ = new List<Statement>(); }\r\n;\r\n\r\nnamespace_statement:         /* PHP 5.3 */\r\n\t\tnon_empty_statement\t\t\t\t\t { $$ = CheckGlobalStatement((Statement)$1); }\r\n\t|\tuse_statement\t\t\t\t\t\t { /* nop */ }\r\n\t|\tfunction_declaration_statement       { $$ = $1; }\r\n\t|\tclass_declaration_statement          { $$ = $1; }\r\n\t|\tglobal_constant_declaration_statement\t{ $$ = $1; }\r\n;\r\n\r\nfunction_declaration_statement:\r\n\t\tfunction_declaration_head identifier \r\n\t\ttype_parameter_list_opt\r\n\t\t{\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)$3);\r\n\t\t}\r\n\t\t'(' formal_parameter_list_opt ')' \r\n\t\t{ \r\n\t\t  EnterConditionalCode(); \r\n\t\t}\r\n\t\t'{' inner_statement_list_opt '}'\r\n\t\t{\r\n\t\t\tvar func_name = (string)$2;\r\n\t\t\tvar attrs_ref = (Tuple<List<CustomAttribute>,bool>)$1;\r\n\t\t\t\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)$3, func_name);\r\n\t\t\t\r\n\t\t\t$$ = new FunctionDecl(sourceUnit, @2, @$, GetHeadingEnd(@7), GetBodyStart(@9), \r\n\t\t\t\tIsCurrentCodeOneLevelConditional, GetScope(), \r\n\t\t\t\tPhpMemberAttributes.Public | PhpMemberAttributes.Static,\r\n\t\t\t\tfunc_name, currentNamespace, attrs_ref.Item2, \r\n\t\t\t  (List<FormalParam>)$6, (List<FormalTypeParam>)$3, StmtList(Combine(@9, @11), $10), attrs_ref.Item1);\r\n\t\t\t \r\n\t\t\treductionsSink.FunctionDeclarationReduced(this,\t(FunctionDecl)AnnotateDoc($$));\r\n\t\t\t  \r\n\t\t\tLeaveConditionalCode();\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)$3);\r\n\t\t} \r\n;\r\n\r\nfunction_declaration_head:\r\n\t\tT_FUNCTION\t\t\t\t\t{ $$ = new Tuple<List<CustomAttribute>,bool>(null, false); }\r\n\t|\tattributes T_FUNCTION\t\t{ $$ = new Tuple<List<CustomAttribute>,bool>((List<CustomAttribute>)$1, false); }\r\n\t|\tT_FUNCTION '&'\t\t\t\t{ $$ = new Tuple<List<CustomAttribute>,bool>(null, true); }\r\n\t|\tattributes T_FUNCTION '&'\t{ $$ = new Tuple<List<CustomAttribute>,bool>((List<CustomAttribute>)$1, true); }\r\n;\r\n\r\nclass_entry_type:\r\n\t\tT_CLASS\t\t{ $$ = Tokens.T_CLASS; }\r\n\t|\tT_TRAIT\t\t{ $$ = Tokens.T_TRAIT; }\r\n;\r\n\r\nclass_declaration_statement:\r\n\t\tattributes_opt visibility_opt modifier_opt partial_opt class_entry_type\r\n\t\tidentifier type_parameter_list_opt\r\n\t\t{\r\n\t\t\tName class_name = new Name((string)$6);\r\n\r\n\t\t\tif (CheckReservedNameAbsence(class_name, @6)) CheckTypeNameInUse(class_name, @6);\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)$7, (string)$6);\r\n\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)$7);\r\n\t\t}\r\n\t\textends_opt implements_opt \r\n\t\t'{' class_statement_list_opt '}' \r\n\t\t{ \r\n\t\t  Name class_name = new Name((string)$6);\r\n\t\t  var member_attr = (PhpMemberAttributes)($2 | $3);\r\n\t\t  if ((Tokens)$5 == Tokens.T_TRAIT) member_attr |= PhpMemberAttributes.Trait | PhpMemberAttributes.Abstract;\r\n\t\t  \r\n\t\t  CheckReservedNamesAbsence((Tuple<GenericQualifiedName,Text.Span>)$9);\r\n\t\t  CheckReservedNamesAbsence((List<Tuple<GenericQualifiedName,Text.Span>>)$10);\r\n\t\t  \r\n\t\t  $$ = new TypeDecl(sourceUnit, Combine(@5, @6), @$, GetHeadingEnd(GetLeftValidPosition(10)), GetBodyStart(@11), \r\n\t\t\t\tIsCurrentCodeConditional, GetScope(), \r\n\t\t\t\tmember_attr, $4 != 0, class_name, @6, currentNamespace, \r\n\t\t\t\t(List<FormalTypeParam>)$7, (Tuple<GenericQualifiedName,Text.Span>)$9, (List<Tuple<GenericQualifiedName,Text.Span>>)$10, \r\n\t\t    (List<TypeMemberDecl>)$12, (List<CustomAttribute>)$1);\r\n\t\t    \r\n\t\t  reductionsSink.TypeDeclarationReduced(this, (TypeDecl)AnnotateDoc($$));\r\n\t\t  UnreserveTypeNames((List<FormalTypeParam>)$7);\r\n\t\t}\r\n\t\t\t\r\n\t|\tattributes_opt visibility_opt modifier_opt partial_opt T_INTERFACE \r\n\t    identifier type_parameter_list_opt\r\n\t\t{\r\n\t\t\tName class_name = new Name((string)$6);\r\n\r\n\t\t\tif (CheckReservedNameAbsence(class_name, @6)) CheckTypeNameInUse(class_name, @6);\r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)$7, (string)$6);\r\n\t\t  \r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)$7);\r\n\t\t}\r\n\t\tinterface_extends_opt \r\n\t\t'{' class_statement_list_opt '}' \r\n\t  { \r\n\t\t  Name class_name = new Name((string)$6);\r\n\t\t  \r\n\t\t  CheckReservedNamesAbsence((List<Tuple<GenericQualifiedName,Text.Span>>)$9);\r\n\t\t  \r\n\t\t\tif ((PhpMemberAttributes)$3 != PhpMemberAttributes.None)\r\n\t\t\t\terrors.Add(Errors.InvalidInterfaceModifier, SourceUnit, @3);\r\n\t\t\t\t\r\n\t\t  $$ = new TypeDecl(sourceUnit, Combine(@5, @6), @$, GetHeadingEnd(GetLeftValidPosition(9)), GetBodyStart(@10),\r\n\t\t\t\tIsCurrentCodeConditional, GetScope(), \r\n\t\t\t\t(PhpMemberAttributes)$2 | PhpMemberAttributes.Abstract | PhpMemberAttributes.Interface, \r\n\t\t\t\t$4 != 0, class_name, @6, currentNamespace,\r\n\t\t\t\t(List<FormalTypeParam>)$7, null, (List<Tuple<GenericQualifiedName,Text.Span>>)$9,\r\n\t\t\t\t(List<TypeMemberDecl>)$11, (List<CustomAttribute>)$1); \r\n\t\t\t\t\r\n\t\t\treductionsSink.TypeDeclarationReduced(this, (TypeDecl)AnnotateDoc($$));\r\n\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)$7);\r\n\t  }\r\n;\r\n\r\nmodifier_opt:\r\n\t\t/* empty */\r\n\t| T_ABSTRACT  { $$ = (int)PhpMemberAttributes.Abstract; }\r\n\t| T_FINAL     { $$ = (int)PhpMemberAttributes.Final; }\r\n;\r\n\r\nvisibility_opt:\r\n\t  /* empty */ { $$ = (int)PhpMemberAttributes.Public; }\r\n\t| T_PRIVATE   { $$ = (int)CheckPrivateType(@1); }\r\n;\r\n\r\npartial_opt:\r\n\t  /* empty */ { $$ = 0; }\r\n\t| T_PARTIAL   { $$ = CheckPartialType(@1); }\r\n;\r\n\r\nextends_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = null; }\r\n\t|\tT_EXTENDS qualified_static_type_ref\t{ $$ = new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)$2, @2); }\r\n;\r\n\r\ninterface_extends_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t{ $$ = emptyGenericQualifiedNamePositionList; }\r\n\t|\tT_EXTENDS interface_list\t{ $$ = $2; }\r\n;\r\n\r\nimplements_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t{ $$ = emptyGenericQualifiedNamePositionList; }\r\n\t|\tT_IMPLEMENTS interface_list\t\t{ $$ = $2; }\r\n;\r\n\r\ninterface_list:\r\n\t\tqualified_static_type_ref\t\t\t\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<Tuple<GenericQualifiedName,Text.Span>>(new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)$1, @1));\r\n\t\t}\t\t\r\n\t\t\r\n\t|\tinterface_list ',' qualified_static_type_ref\t\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<Tuple<GenericQualifiedName,Text.Span>>($$, new Tuple<GenericQualifiedName,Text.Span>((GenericQualifiedName)$3, @3)); \r\n\t\t}\r\n;\r\n\r\n\r\ntype_parameter_list_opt:\r\n    T_LGENERIC type_parameter_list T_RGENERIC                                       { $$ = $2; }\r\n  | T_LGENERIC type_parameter_with_defaults_list T_RGENERIC                         { $$ = $2; }\r\n  | T_LGENERIC type_parameter_list ',' type_parameter_with_defaults_list T_RGENERIC { $$ = $2; ((List<FormalTypeParam>)$2).AddRange((List<FormalTypeParam>)$4); }\r\n  | /* empty */                                                                     { $$ = emptyFormalTypeParamList; }\r\n;\r\n\r\ntype_parameter_list:\r\n\t\ttype_parameter_list ',' type_parameter_decl { ListAdd<FormalTypeParam>($1, $3); $$ = $1; }\r\n\t| type_parameter_decl                         { $$ = NewList<FormalTypeParam>($1); }\r\n;\r\n\r\ntype_parameter_with_defaults_list:\r\n\t\ttype_parameter_with_defaults_list ',' type_parameter_with_default_decl { ListAdd<FormalTypeParam>($1, $3); $$ = $1; }\r\n\t| type_parameter_with_default_decl                                       { $$ = NewList<FormalTypeParam>($1); }\r\n;\r\n\r\ntype_parameter_decl:\r\n  attributes_opt identifier\r\n  { \r\n\t\tName name = new Name((string)$2);\r\n\t\t\r\n\t\tCheckReservedNameAbsence(name, @2);\r\n\t\t$$ = new FormalTypeParam(@2, name, null, (List<CustomAttribute>)$1); \r\n\t}\r\n;\r\n\r\ntype_parameter_with_default_decl:\r\n\t  attributes_opt identifier '=' qualified_static_type_ref \r\n\t  { \r\n\t\t\tName name = new Name((string)$2);\r\n\t\t\t\r\n\t\t\tCheckReservedNameAbsence(name, @2);\r\n\t\t\t$$ = new FormalTypeParam(CombinePositions(@2, @4), name, $4, (List<CustomAttribute>)$1); \r\n\t\t}\r\n\t|\tattributes_opt identifier '=' primitive_type \r\n\t  { \r\n\t\t\tName name = new Name((string)$2);\r\n\t\t\t\r\n\t\t\tCheckReservedNameAbsence(name, @2);\r\n\t\t\t$$ = new FormalTypeParam(CombinePositions(@2, @4), name, $4, (List<CustomAttribute>)$1); \r\n\t\t}\r\n;\r\n\r\nprimitive_type:\r\n    T_BOOL_TYPE     { $$ = new PrimitiveTypeName(QualifiedName.Boolean); }\r\n  | T_INT_TYPE      { $$ = new PrimitiveTypeName(QualifiedName.Integer); }\r\n  | T_INT64_TYPE    { $$ = new PrimitiveTypeName(QualifiedName.LongInteger); }\r\n  | T_DOUBLE_TYPE   { $$ = new PrimitiveTypeName(QualifiedName.Double); }\r\n  | T_STRING_TYPE   { $$ = new PrimitiveTypeName(QualifiedName.String); }\r\n  | T_RESOURCE_TYPE { $$ = new PrimitiveTypeName(QualifiedName.Resource); }\r\n  | T_OBJECT_TYPE   { $$ = new PrimitiveTypeName(QualifiedName.Object); }\r\n  | T_ARRAY         { $$ = new PrimitiveTypeName(QualifiedName.Array); }\r\n;\r\n\r\n\r\ngeneric_dynamic_args_opt:\r\n    T_LGENERIC type_ref_list T_RGENERIC { $$ = $2; }\r\n  | /* empty */                         { $$ = TypeRef.EmptyList; }\r\n;\r\n  \r\n\r\nattributes:\r\n\t\tattributes attributes_group { $$ = ListAdd<CustomAttribute>($1, $2); }\r\n\t|\tattributes_group\t\t\t{ $$ = (List<CustomAttribute>)$1; }\r\n;\r\n\r\nattributes_group:\r\n    '[' attribute_list ']'\r\n    {\r\n      $$ = CustomAttributes((List<CustomAttribute>)$2, CustomAttribute.TargetSelectors.Default);\r\n    }\r\n  | '[' identifier ':' attribute_list ']' \r\n    { \r\n      $$ = CustomAttributes((List<CustomAttribute>)$4, IdentifierToTargetSelector(@2, (string)$2));\r\n    }\r\n;\r\n\r\nattributes_opt:\r\n\t\t/* empty */\t{ $$ = null; }\r\n\t|\tattributes\t{ $$ = $1; }\r\n;\r\n\r\nattribute_list:\t\r\n\t\tattribute_list ',' attribute \r\n\t\t{ \r\n\t\t\tListAdd<CustomAttribute>($1, $3);\r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t|\tattribute\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<CustomAttribute>($1);\r\n\t\t}\r\n;\r\n\r\nattribute:\r\n\t\tqualified_namespace_name \r\n\t\t{ \r\n\t\t\t$$ = new CustomAttribute(@$, TranslateAny((QualifiedName)$1), emptyActualParamListIndex, emptyNamedActualParamListIndex);\r\n\t\t}\r\n\t|\tqualified_namespace_name '(' attribute_arg_list ')' \r\n\t\t{ \r\n\t\t\t$$ = new CustomAttribute(@$, TranslateAny((QualifiedName)$1), (List<ActualParam>)$3, emptyNamedActualParamListIndex);\r\n\t\t}\r\n\t|\tqualified_namespace_name '(' attribute_named_arg_list ')' \r\n\t\t{ \r\n\t\t\t$$ = new CustomAttribute(@$, TranslateAny((QualifiedName)$1), emptyActualParamListIndex, (List<NamedActualParam>)$3);\r\n\t\t}\r\n\t|\tqualified_namespace_name '(' attribute_arg_list ',' attribute_named_arg_list ')' \r\n\t\t{ \r\n\t\t\t$$ = new CustomAttribute(@$, TranslateAny((QualifiedName)$1), (List<ActualParam>)$3, (List<NamedActualParam>)$5);\r\n\t\t}\r\n;\r\n\r\nattribute_arg_list:\r\n\t\tattribute_arg_list ',' attribute_arg \r\n\t\t{ \r\n\t\t\tListAdd<ActualParam>($1, $3);\r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t| attribute_arg\r\n\t\t{ \r\n\t\t\t$$ = NewList<ActualParam>($1);\r\n\t\t}\r\n;\r\n\r\nattribute_named_arg_list:\r\n\t\tattribute_named_arg_list ',' attribute_named_arg \r\n\t\t{ \r\n\t\t\tListAdd<NamedActualParam>($1, $3);\r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t| attribute_named_arg\r\n\t\t{ \r\n\t\t\t$$ = NewList<NamedActualParam>($1);\r\n\t\t}\r\n;\r\n\r\nattribute_arg:\r\n\texpr { $$ = new ActualParam(@$, (Expression)$1, ActualParam.Flags.Default); }\r\n;\r\n\r\nattribute_named_arg:\r\n\tT_VARIABLE T_DOUBLE_ARROW expr { $$ = new NamedActualParam(@$, (string)$1, (Expression)$3); }\r\n;\r\n\r\n\r\n\r\n\r\ninner_statement_list_opt:\r\n\t\tinner_statement_list_opt inner_statement  { $$ = StatementListAdd($1, $2); }\r\n\t|\t/* empty */                               { $$ = new List<Statement>(); }\r\n;\r\n\r\ninner_statement:\r\n\t\tstatement\t\t\t\t\t\t{ $$ = $1; }\r\n\t|\tfunction_declaration_statement\t{ $$ = $1; }\r\n\t|\tclass_declaration_statement\t\t{ $$ = $1; }\r\n;\r\n\r\nempty_statement:\r\n  ';' { $$ = new EmptyStmt(@$); }\r\n;\r\n\r\nexpression_statement:\r\n  expr ';' { $$ = new ExpressionStmt(@$, (Expression)$1); }\r\n;\r\n\r\nstatement:\r\n    non_empty_statement\r\n  | empty_statement\r\n;\r\n\r\nnon_empty_statement:\r\n\t\tidentifier ':'     \r\n\t\t{ \r\n\t\t  $$ = new LabelStmt(@$, (string)$1, @1); /* PHP 5.3 */ \r\n\t\t}\r\n\t\t\r\n\t|\t'{' inner_statement_list_opt '}' \r\n\t\t{ \r\n\t\t  $$ = new BlockStmt(@$, StmtList(@$, $2)); \r\n\t\t}\r\n\t\t\r\n\t|\tT_IF parenthesis_expr  \r\n\t\t{ \r\n\t\t\tEnterConditionalCode(); \r\n\t\t} \r\n\t\tstatement elseif_list_opt else_opt \r\n\t\t{ \r\n\t\t\tList<ConditionalStmt> conditions = (List<ConditionalStmt>)$5;\r\n\t\t\tconditions[0] = new ConditionalStmt(@1, (Expression)$2, (Statement)$4);\r\n\t\t\t\r\n\t\t\t// add else:\r\n\t\t\tif ($6 != null)\r\n\t\t\t\tconditions.Add(new ConditionalStmt(@6, null, (Statement)$6));\r\n\t\t\t\r\n\t\t\t$$ = new IfStmt(@$, conditions);\r\n\t\t\t\r\n\t\t\tLeaveConditionalCode();\r\n\t  }\r\n\t\t\r\n\t|\tT_IF parenthesis_expr ':'  \r\n\t\t{ \r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\tinner_statement_list_opt elseif_colon_list_opt else_colon_opt T_ENDIF ';' \r\n\t\t{ \r\n\t\t\tList<ConditionalStmt> conditions = (List<ConditionalStmt>)$6;\r\n\t\t\tconditions[0] = new ConditionalStmt(@1, (Expression)$2, new BlockStmt(@5, StmtList(Combine(@3, @6, @7, @8), $5)));\r\n\t\t\t\r\n\t\t\t// add else:\r\n\t\t\tif ($7 != null)\r\n\t\t\t\tconditions.Add(new ConditionalStmt(@7, null, (Statement)$7));\r\n\t\t\t\r\n\t\t\t$$ = new IfStmt(@$, conditions);\r\n\t\t\t\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\t\t\r\n\t|\tT_WHILE parenthesis_expr \r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\twhile_statement \r\n\t\t{ \r\n\t\t\t$$ = new WhileStmt(@$, WhileStmt.Type.While, (Expression)$2, (Statement)$4); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\t\t\r\n\t|\tT_DO statement T_WHILE parenthesis_expr ';' \r\n\t\t{ \r\n\t\t\t$$ = new WhileStmt(@$, WhileStmt.Type.Do, (Expression)$4, (Statement)$2); \r\n\t\t}\r\n\t\r\n\t|\tT_FOR '(' expression_list_opt ';' expression_list_opt ';' expression_list_opt ')' \r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\tfor_statement \r\n\t\t{ \r\n\t\t\t$$ = new ForStmt(@$, (List<Expression>)$3, (List<Expression>)$5, (List<Expression>)$7, (Statement)$10); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\t\r\n\t|\tT_SWITCH parenthesis_expr\r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\tswitch_case_list \r\n\t\t{ \r\n\t\t\t$$ = new SwitchStmt(@$, (Expression)$2, (List<SwitchItem>)$4); \r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\t\t\r\n\t|\tT_BREAK ';'\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = new JumpStmt(@$, JumpStmt.Types.Break, null); }\t\t\t\r\n\t|\tT_BREAK expr ';'\t\t\t\t\t\t\t\t\t\t{ $$ = new JumpStmt(@$, JumpStmt.Types.Break, (Expression)$2); }\t\t\r\n\t|\tT_CONTINUE ';'\t\t\t\t\t\t\t\t\t\t\t{ $$ = new JumpStmt(@$, JumpStmt.Types.Continue, null); }\t\t\t\r\n\t|\tT_CONTINUE expr ';'\t\t\t\t\t\t\t\t\t{ $$ = new JumpStmt(@$, JumpStmt.Types.Continue, (Expression)$2); }\t\r\n\t|\tT_RETURN ';'\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = new JumpStmt(@$, JumpStmt.Types.Return, null); }\t\t\t\t\t\t\r\n\t|\tT_RETURN expr ';'                   { $$ = new JumpStmt(@$, JumpStmt.Types.Return, (Expression)$2); }\t\r\n\t|\tyield_ex ';'\t\t\t\t\t\t{ $$ = new ExpressionStmt(@$, (Expression)$1); }\r\n\t|\tT_GLOBAL global_var_list ';'        { $$ = new GlobalStmt(@$, (List<SimpleVarUse>)$2); }\r\n\t|\tT_STATIC static_variable_list ';'   { $$ = new StaticStmt(@$, (List<StaticVarDecl>)$2); }\r\n\t|\tT_ECHO expression_list ';'          { $$ = new EchoStmt(@$, (List<Expression>)$2); }\r\n\t|\tT_INLINE_HTML                       \r\n\t\t{ \r\n\t\t\t$$ = new EchoStmt(@$, (string)$1); \r\n\t\t}\r\n\t|\texpression_statement { $$ = $1; }\r\n\t  \r\n\t|\tT_UNSET '(' writable_chain_list ')' ';' \r\n\t  { \r\n\t    $$ = new UnsetStmt(@$, (List<VariableUse>)$3); \r\n\t  }\r\n\t\r\n\t|\tT_FOREACH '(' chain T_AS foreach_variable foreach_optional_arg ')' foreach_statement \r\n\t\t{ \r\n\t\t\t$$ = CreateForeachStmt(@$, (Expression)$3, (ForeachVar)$5, @5, (ForeachVar)$6, (Statement)$8);\r\n\t\t}\r\n\t\t\r\n\t|\tT_FOREACH '(' expr_without_chain T_AS writable_chain foreach_optional_arg ')' foreach_statement \r\n\t\t{ \r\n\t\t\t$$ = CreateForeachStmt(@$, (Expression)$3, new ForeachVar((VariableUse)$5, false), @5, \r\n\t\t\t  (ForeachVar)$6, (Statement)$8);\r\n\t\t}\r\n\r\n\t|\tT_FOREACH '(' chain T_AS T_LIST '(' assignment_list ')' ')' foreach_statement \r\n\t\t{ \r\n\t\t\tvar listpos = Text.Span.Combine(@5, @8);\r\n\t\t\t$$ = CreateForeachStmt(@$, (Expression)$3,\r\n\t\t\t\tnew ForeachVar(new ListEx(listpos, (List<Expression>)$7, null)), listpos,\r\n\t\t\t\tnull, (Statement)$10);\r\n\t\t}\r\n\t\r\n\t|\tT_TRY\r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\t'{' inner_statement_list_opt '}' catches_opt finally_opt\r\n\t\t{\r\n\t\t\tif ($6 == null && $7 == null)\r\n\t\t\t\terrors.Add(FatalErrors.TryWithoutCatchOrFinally, SourceUnit, @$);\r\n\r\n\t\t\t$$ = new TryStmt(@$, StmtList(Combine(@3, @5), $4), (List<CatchItem>)$6, (FinallyItem)$7);\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t}\r\n\t\r\n\t|\tT_THROW expr ';'\t\t\r\n\t\t{ \r\n\t\t\t$$ = new ThrowStmt(@$, (Expression)$2); \r\n\t\t}\r\n\t\r\n\t|\tT_GOTO identifier ';'\r\n\t\t{ \r\n\t\t\t$$ = new GotoStmt(@$, (string)$2, @2); /* PHP 5.3 */ \r\n\t\t}\r\n\t|\tT_DECLARE '(' declare_list ')' declare_statement\r\n\t\t{\r\n\t\t\t$$ = new DeclareStmt(@$, (Statement)$5);\r\n\t\t}\r\n;\r\n\r\n\r\ncatches_opt:\r\n\t\tcatches\t\t\t{ $$ = $1; }\r\n\t|\t/* empty */\t\t{ $$ = null; }\r\n;\r\n\r\ncatches:\r\n\t\tcatches T_CATCH '(' qualified_static_type_ref T_VARIABLE ')'  '{' inner_statement_list_opt '}' \r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<CatchItem>($$, new CatchItem(Combine(@2, @9), DirectTypeRef.FromGenericQualifiedName(@4, (GenericQualifiedName)$4), new DirectVarUse(@5, (string)$5), StmtList(Combine(@7, @9), $8))); \r\n\t\t}\t\t\r\n\t|\tT_CATCH '(' qualified_static_type_ref T_VARIABLE ')'  '{' inner_statement_list_opt '}'\r\n\t\t{\r\n\t\t\t$$ = NewList<CatchItem>(new CatchItem(@$, DirectTypeRef.FromGenericQualifiedName(@3, (GenericQualifiedName)$3), new DirectVarUse(@4, (string)$4), StmtList(Combine(@6, @8), $7)));\r\n\t\t} \r\n;\r\n\r\nfinally_opt:\r\n\t\t/* empty */ { $$ = null; }\r\n\t|\tT_FINALLY '{' inner_statement_list_opt '}' { $$ = new FinallyItem(@$, StmtList(Combine(@2, @4), $3)); }\r\n;\r\n\r\nreference_opt:\r\n\t\t/* empty */\t{ $$ = 0; }\r\n\t|\t'&'\t\t\t\t\t{ $$ = 1; }\r\n;\r\n\r\nvariadic_opt:\n\t\t/* empty */ { $$ = 0; }\n\t|\tT_ELLIPSIS  { $$ = 1; }\n;\r\n\r\nforeach_optional_arg:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t\t{ $$ = null; }\r\n\t|\tT_DOUBLE_ARROW foreach_variable\t{ $$ = $2; }\r\n;\r\n\r\nforeach_variable:\r\n\treference_opt writable_chain    { $$ = new ForeachVar((VariableUse)$2, (int)$1 == 1); }\t\r\n;\r\n\r\nfor_statement:\r\n\t\tstatement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    { $$ = $1; }\r\n\t|\t':' inner_statement_list_opt T_ENDFOR ';' { $$ = new BlockStmt(@2, StmtList(Combine(@1, @3), $2)); }\r\n;\r\n\r\nforeach_statement:\r\n\t\tstatement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    { $$ = $1; }\r\n\t|\t':' inner_statement_list_opt T_ENDFOREACH ';' { $$ = new BlockStmt(@2, StmtList(Combine(@1, @3), $2)); }\r\n;\r\n\r\ndeclare_statement:\r\n\t\tstatement\t\t\t\t\t\t\t\t\t\t{ $$ = $1; }\r\n\t|\t':' inner_statement_list_opt T_ENDDECLARE ';'\t{ $$ = new BlockStmt(@2, StmtList(Combine(@1, @3), $2)); }\r\n;\r\n\r\ndeclare_list:\r\n\t\tidentifier '=' constant_inititalizer\t\t\t\t\t{ /*not supported*/ }\r\n\t|\tdeclare_list ',' identifier '=' constant_inititalizer\t{ /*not supported*/ }\r\n;\r\n\r\nswitch_case_list:\r\n\t\t'{' case_list_opt '}'\t\t\t\t\t\t\t\t\t{ $$ = $2; }\r\n\t|\t'{' ';' case_list_opt '}'\t\t\t\t\t\t\t{ $$ = $3; }\r\n\t|\t':' case_list_opt T_ENDSWITCH ';'\t\t\t{ $$ = $2; }\r\n\t|\t':' ';' case_list_opt T_ENDSWITCH ';'\t{ $$ = $3; }\r\n;\r\n\r\ncase_list_opt:\r\n\t\t/* empty */\t\r\n\t\t{ \r\n\t\t  $$ = new List<SwitchItem>(); \r\n\t\t}\r\n\t\t\r\n\t|\tcase_list_opt T_CASE expr case_separator inner_statement_list_opt\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<SwitchItem>($$, new CaseItem(@2, (Expression)$3, StmtList(@5, $5))); \r\n\t\t}\r\n\t\t  \r\n\t|\tcase_list_opt T_DEFAULT case_separator  inner_statement_list_opt \r\n\t\t{\t\r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<SwitchItem>($$, new DefaultItem(@2, StmtList(@4, $4))); \r\n\t\t}\r\n;\r\n\r\n\r\ncase_separator:\r\n\t\t':'\r\n\t|\t';'\r\n;\r\n\r\n\r\nwhile_statement:\r\n\t\tstatement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t    { $$ = $1; }\r\n\t|\t':' inner_statement_list_opt T_ENDWHILE ';' { $$ = new BlockStmt(@2, StmtList(Combine(@1, @3), $2)); }\r\n;\r\n\r\n\r\n\r\nelseif_list_opt:\r\n\t\t/* empty */ \r\n\t\t{ \r\n\t\t\t// initialize list with the first item reserved for the if-condition and the true-statement pair:\r\n\t\t\t$$ = NewList<ConditionalStmt>(null);\r\n\t\t}\r\n\t|\telseif_list_opt T_ELSEIF parenthesis_expr statement\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<ConditionalStmt>($$, new ConditionalStmt(@2, (Expression)$3, (Statement)$4)); \r\n\t\t}\r\n;\r\n\r\n\r\nelseif_colon_list_opt:\r\n\t\t/* empty */ \r\n\t\t{ \r\n\t\t  $$ = NewList<ConditionalStmt>(null);\r\n\t\t}\r\n\t|\telseif_colon_list_opt T_ELSEIF parenthesis_expr ':' inner_statement_list_opt \r\n\t\t{ \r\n\t\t\t$$ = $1;\r\n\t\t\tListAdd<ConditionalStmt>($$, new ConditionalStmt(@2, (Expression)$3, new BlockStmt(@5, StmtList(@5, $5)))); \r\n\t\t}\r\n;\r\n\r\n\r\nelse_opt:\r\n\t\t/* empty */\t\t\t\t{ $$ = null; }\r\n\t|\tT_ELSE statement\t{ $$ = $2; }\r\n;\r\n\r\n\r\nelse_colon_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t        { $$ = null; }\r\n\t|\tT_ELSE ':' inner_statement_list_opt { $$ = new BlockStmt(@3, StmtList(@3, $3)); }\r\n;\r\n\r\n\r\nformal_parameter_list_opt: \r\n\t\tformal_parameter_list\t{ $$ = $1; }\r\n\t|\t/* empty */\t\t\t      { $$ = emptyFormalParamListIndex; }\r\n;\r\n\r\nformal_parameter_list:\r\n\t\tformal_parameter\t\r\n\t\t{ \r\n\t\t  $$ = NewList<FormalParam>($1); \r\n\t\t}\r\n\t\t\t\r\n\t|\tformal_parameter_list ',' formal_parameter\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<FormalParam>($$, $3); \r\n\t\t}\t\r\n;\r\n\r\nformal_parameter:         \r\n    attributes_opt type_hint_opt reference_opt variadic_opt T_VARIABLE                   \r\n    {\r\n\t\t\t$$ = new FormalParam(@5, (string)$5, $2, FormalParamFlags((int)$3 == 1, (int)$4 == 1), null, (List<CustomAttribute>)$1)\r\n\t\t\t{\r\n\t\t\t\tTypeHintPosition = @2\r\n\t\t\t};\r\n\t\t}\r\n  | attributes_opt type_hint_opt reference_opt variadic_opt T_VARIABLE '=' constant_inititalizer \r\n\t\t{ \r\n\t\t\t$$ = new FormalParam(@5, (string)$5, $2, FormalParamFlags((int)$3 == 1, (int)$4 == 1), (Expression)$7, (List<CustomAttribute>)$1)\r\n\t\t\t{\r\n\t\t\t\tTypeHintPosition = @2\r\n\t\t\t};\r\n\t\t}\r\n;\r\n\r\ntype_hint_opt:\r\n\t\t/* empty */                { $$ = null; }\t\r\n\t|\tqualified_static_type_ref  { $$ = $1; }\r\n\t|\tT_CALLABLE\t\t\t\t   { $$ = new PrimitiveTypeName(QualifiedName.Callable); }\r\n\t|\tprimitive_type             { $$ = $1; }\r\n;\r\n\r\n\r\nactual_arguments_opt:\r\n\t\tnon_empty_actual_arguments_opt\t{ $$ = $1; }\r\n\t|\t/* empty */                     { $$ = null; }\r\n;\r\n\r\nnon_empty_actual_arguments_opt:\r\n\t\tnon_empty_actual_arguments_opt '[' key_opt ']'\t\t\t\t{ $$ = CreateFcnParam((FcnParam)$1, (Expression)$3); }\r\n\t|\tnon_empty_actual_arguments_opt '{' expr '}'\t\t\t\t\t{ $$ = CreateFcnParam((FcnParam)$1, (Expression)$3); }\r\n\t|\tgeneric_dynamic_args_opt '(' actual_argument_list_opt ')'\t{ $$ = new FcnParam((List<TypeRef>)$1, (List<ActualParam>)$3, null); }\r\n;\r\n\r\nactual_argument_list_opt:\r\n\t\tactual_argument_list\t     { $$ = $1; }\r\n\t|\tyield_ex\t\t\t\t\t{ $$ = $1; }\r\n\t|\t/* empty */\t\t\t\t\t\t\t\t { $$ = emptyActualParamListIndex; }\t\t\t\r\n;\r\n\r\nactual_argument_list:\r\n\t  actual_argument_list ',' actual_argument\t\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<ActualParam>($$, $3);\r\n\t\t}\r\n\t| actual_argument\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<ActualParam>($1);\r\n\t\t}\r\n;\r\n\r\nactual_argument:\r\n    expr\r\n    {\r\n\t\t$$ = new ActualParam(@$, (Expression)$1, ActualParam.Flags.Default);\r\n    }\r\n  | '&' writable_chain \r\n    {\r\n\t\t// deprecated; only for error reporting\r\n\t\t$$ = new ActualParam(@$, (Expression)$2, ActualParam.Flags.IsByRef);\r\n    }\r\n  | T_ELLIPSIS expr\r\n    {\r\n\t\t$$ = new ActualParam(@$, (Expression)$2, ActualParam.Flags.IsVariadic);\r\n\t}\r\n;\r\n\r\nglobal_var_list:\r\n\t\tglobal_var_list ',' global_var\t\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<SimpleVarUse>($$, $3); \r\n\t\t}\r\n\t|\tglobal_var\t\r\n\t  { \r\n\t\t  $$ = NewList<SimpleVarUse>($1);\r\n\t  }\t\t\t\t\t\r\n;\r\n\r\n\r\nglobal_var:\r\n\t\tT_VARIABLE\t\t\t\t{ $$ = new DirectVarUse(@$, (string)$1); }\t\t\r\n\t|\t'$' chain         { $$ = new IndirectVarUse(@$, 1, (VarLikeConstructUse)$2); }\r\n\t|\t'$' '{' expr '}'\t{ $$ = new IndirectVarUse(@$, 1, (Expression)$3); }\r\n;\r\n\r\n\r\nstatic_variable_list:\r\n\t\tstatic_variable_list ',' static_variable \r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<StaticVarDecl>($$, $3); \r\n\t\t}\r\n\t\t\t\r\n\t|\tstatic_variable\r\n\t\t{ \r\n\t\t\t$$ = NewList<StaticVarDecl>($1); \r\n\t\t}\r\n;\r\n\r\nstatic_variable:\r\n\t  T_VARIABLE                      \r\n\t  { \r\n\t\t\t$$ = new StaticVarDecl(@1, new DirectVarUse(@1, (string)$1), null); \r\n\t  }\r\n\t  \r\n\t| T_VARIABLE '=' constant_inititalizer    \r\n\t  { \r\n\t\t\t$$ = new StaticVarDecl(Combine(@1, @3), new DirectVarUse(@1, (string)$1), (Expression)$3); \r\n\t\t}\r\n;\r\n\r\nclass_statement_list_opt:\r\n\t\tclass_statement_list_opt class_statement\t{ $$ = ListAdd<TypeMemberDecl>($1, $2); }\r\n\t|\t/* empty */\t\t\t\t\t\t\t\t\t{ $$ = new List<TypeMemberDecl>(); }\r\n;\r\n\r\nclass_statement:\r\n\t\tattributes_opt property_modifiers property_declarator_list ';'\t\t\t\r\n\t\t{ \r\n\t\t\tvar modifier = (PhpMemberAttributes)$2;\r\n\t\t\t$$ = AnnotateDoc(new FieldDeclList(@$, modifier, (List<FieldDecl>)$3, (List<CustomAttribute>)$1));\r\n\t\t}\r\n\t\t \r\n\t|\tattributes_opt T_CONST class_constant_declarator_list ';'\r\n\t\t{ \r\n\t\t  $$ = AnnotateDoc(new ConstDeclList(@$, (List<ClassConstantDecl>)$3, (List<CustomAttribute>)$1));\r\n\t\t}\r\n\t\t\r\n\t|\tattributes_opt member_modifiers_opt T_FUNCTION reference_opt identifier \r\n\t  type_parameter_list_opt\r\n\t  {\r\n\t\t\tReserveTypeNames((List<FormalTypeParam>)$6);\r\n\t  }\r\n\t  '(' formal_parameter_list_opt ')' \r\n\t\tbase_ctor_call_opt\r\n\t\t{\r\n\t\t\tEnterConditionalCode();\r\n\t\t}\r\n\t\tmethod_body\r\n\t\t{ \r\n\t\t\tCheckTypeParameterNames((List<FormalTypeParam>)$6, null);\r\n\t\t  \r\n\t\t\t$$ = new MethodDecl(@5, @$, GetHeadingEnd(GetLeftValidPosition(11)),GetBodyStart(@13), (string)$5, (int)$4 != 0, (List<FormalParam>)$9, (List<FormalTypeParam>)$6,\r\n\t\t\t\t(List<Statement>)$13, (PhpMemberAttributes)$2, (List<ActualParam>)$11, (List<CustomAttribute>)$1); \r\n\t\t\t\t\r\n\t\t\tAnnotateDoc($$);\r\n\r\n\t\t\tLeaveConditionalCode();\r\n\t\t\tUnreserveTypeNames((List<FormalTypeParam>)$6);\r\n\t\t}\r\n\t|\ttrait_use_statement\t\t{ $$ = $1; }\r\n;\r\n\r\ntrait_use_statement:\r\n\t\tT_USE qualified_namespace_name_list trait_adaptations\t\t{ $$ = new TraitsUse(@$, GetHeadingEnd(@2), TranslateAny((List<QualifiedName>)$2), (List<TraitsUse.TraitAdaptation>)$3); }\r\n;\r\n\r\ntrait_adaptations:\r\n\t\t';'\t\t\t\t\t\t\t\t\t{ $$ = null; }\r\n\t|\t'{' trait_adaptation_list '}'\t\t{ $$ = $2; }\r\n;\r\n\r\ntrait_adaptation_list:\r\n\t\t/* empty */\t\t\t\t\t\t\t{ $$ = new List<TraitsUse.TraitAdaptation>(/*empty*/); }\r\n\t|\tnon_empty_trait_adaptation_list\t\t{ $$ = $1; }\r\n;\r\n\r\nnon_empty_trait_adaptation_list:\r\n\t\ttrait_adaptation_statement\t\t\t{ $$ = NewList<TraitsUse.TraitAdaptation>($1); }\r\n\t|\tnon_empty_trait_adaptation_list trait_adaptation_statement\t{ $$ = ListAdd<TraitsUse.TraitAdaptation>($1, $2); }\r\n;\r\n\r\ntrait_adaptation_statement:\r\n\t\ttrait_precedence\t\t{ $$ = $1; }\r\n\t|\ttrait_alias\t\t\t\t{ $$ = $1; }\r\n;\r\n\r\ntrait_precedence:\r\n\ttrait_method_reference_fully_qualified T_INSTEADOF qualified_namespace_name_list ';'\t{ $$ = new TraitsUse.TraitAdaptationPrecedence(@$, (Tuple<QualifiedName?,Name>)$1, (List<QualifiedName>)$3); }\r\n;\r\n\r\ntrait_method_reference:\r\n\t\tidentifier\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = new Tuple<QualifiedName?,Name>(null, new Name((string)$1)); }\r\n\t|\ttrait_method_reference_fully_qualified\t\t\t\t\t\t{ $$ = $1; }\r\n;\r\n\r\ntrait_method_reference_fully_qualified:\r\n\tqualified_namespace_name T_DOUBLE_COLON identifier\t\t\t\t{ $$ = new Tuple<QualifiedName?,Name>((QualifiedName)$1, new Name((string)$3)); }\r\n;\r\n\r\ntrait_alias:\r\n\t\ttrait_method_reference T_AS trait_modifiers identifier ';'\t{ $$ = new TraitsUse.TraitAdaptationAlias(@$, (Tuple<QualifiedName?, Name>)$1, (string)$4, (PhpMemberAttributes?)$3); }\r\n\t|\ttrait_method_reference T_AS member_modifier\t';'\t\t\t\t{ $$ = new TraitsUse.TraitAdaptationAlias(@$, (Tuple<QualifiedName?, Name>)$1, null, (PhpMemberAttributes)$3); }\r\n;\r\n\r\ntrait_modifiers:\r\n\t\t/* empty */\t\t{ $$ = null; }\r\n\t|\tmember_modifier\t{ $$ = (PhpMemberAttributes)$1; }\r\n;\r\n\r\nbase_ctor_call_opt:\r\n\t  /* empty */     { $$ = null; }\r\n\t| ':' identifier '(' actual_argument_list_opt ')'\r\n\t  {\r\n\t    if (!Name.ParentClassName.Equals((string)$2))\r\n\t\t\t\terrors.Add(Errors.ExpectingParentCtorInvocation, SourceUnit, @2);\r\n\t    \r\n\t    $$ = $4;\r\n\t  }\r\n;\r\n\r\n\r\nmethod_body:\r\n\t\t';' /* abstract method */\t\t\t{ $$ = null; }\r\n\t|\t'{' inner_statement_list_opt '}'\t{ $$ = StmtList(Combine(@1, @3), $2); }\r\n;\r\n\r\nproperty_modifiers:\r\n\t\tmember_modifiers\t{ $$ = $1; }\r\n\t|\tT_VAR\t\t\t\t{ $$ = (int)PhpMemberAttributes.Public; }\r\n;\r\n\r\nmember_modifiers_opt:\r\n\t\t/* empty */\t\t\t{ $$ = (int)PhpMemberAttributes.Public; }\r\n\t|\tmember_modifiers\t{ $$ = (int)(PhpMemberAttributes)$1; }\r\n;\r\n\r\nmember_modifiers:\r\n\t\tmember_modifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t|\tmember_modifiers member_modifier\t\r\n\t\t{ \r\n\t\t  var a1 = (PhpMemberAttributes)$1;\r\n\t\t  var a2 = (PhpMemberAttributes)$2;\r\n\r\n\t\t  if ((a1 & PhpMemberAttributes.VisibilityMask) != 0 && (a2 & PhpMemberAttributes.VisibilityMask) != 0)\r\n\t\t    errors.Add(Errors.MultipleVisibilityModifiers, SourceUnit, @2);\r\n\t\t  \r\n\t\t  // merge $2 into $1\r\n\t\t  a1 |= a2;\r\n\t\t  // This wouldn't allow for \"public abstract function\" although php does.\r\n\t\t  // It is broken anyway, because we assume we have a token on the stack before seeing a modified.\r\n\t\t  \r\n\t\t  // return $1\r\n\t\t  $$ = (int)a1;\r\n\t\t}\r\n;\r\n                   \r\nmember_modifier:\r\n\t\tT_PUBLIC\t\t\t{ $$ = (int)PhpMemberAttributes.Public; }\r\n\t|\tT_PROTECTED\t\t\t{ $$ = (int)PhpMemberAttributes.Protected; }\t\t\r\n\t|\tT_PRIVATE\t\t\t{ $$ = (int)PhpMemberAttributes.Private; }\t\r\n\t|\tT_STATIC\t\t\t{ $$ = (int)PhpMemberAttributes.Static; }\t\r\n\t|\tT_ABSTRACT\t\t\t{ $$ = (int)PhpMemberAttributes.Abstract; }\t\t\r\n\t|\tT_FINAL\t\t\t\t{ $$ = (int)PhpMemberAttributes.Final; }\t\r\n;\r\n\r\nproperty_declarator_list:\r\n\t\tproperty_declarator_list ',' property_declarator\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<FieldDecl>($$, $3); \r\n\t\t}\r\n\t\t\r\n\t|\tproperty_declarator\t\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<FieldDecl>($1);\r\n\t\t}\r\n;\r\n\r\nproperty_declarator:\r\n    T_VARIABLE\r\n    {\r\n\t\t\t$$ = new FieldDecl(@1, (string)$1, null);\r\n    }\r\n    \r\n  | T_VARIABLE '=' constant_inititalizer\r\n    {\r\n\t\t\t$$ = new FieldDecl(@1, (string)$1, (Expression)$3);\r\n    }\r\n;\r\n\r\nclass_constant_declarator_list:\r\n\t\tclass_constant_declarator ',' class_constant_declarator_list\r\n\t\t{ \r\n\t\t  $$ = $3; \r\n\t\t  ListAdd<ClassConstantDecl>($3, $1); \r\n\t\t}\r\n\t\t\r\n\t|\tclass_constant_declarator\r\n\t\t{ \r\n\t\t\t$$ = NewList<ClassConstantDecl>($1); \r\n\t\t}\r\n;\r\n\r\nclass_constant_declarator:\r\n  identifier '=' constant_inititalizer \r\n  { \r\n    $$ = new ClassConstantDecl(@1, (string)$1, CheckInitializer(@3, (Expression)$3)); \r\n  }\r\n;\r\n\r\nglobal_constant_declarator_list:\r\n\t\tglobal_constant_declarator ',' global_constant_declarator_list\r\n\t\t{ \r\n\t\t\t$$ = $3;\r\n\t\t\tListAdd<GlobalConstantDecl>($3, $1);\r\n\t\t}\r\n\t|\tglobal_constant_declarator\r\n\t\t{ \r\n\t\t\t$$ = NewList<GlobalConstantDecl>($1);\r\n\t\t}\r\n;\r\n\r\nglobal_constant_declarator:\r\n  identifier '=' constant_inititalizer\r\n  {\r\n    GlobalConstantDecl c = new GlobalConstantDecl(sourceUnit, @1, IsCurrentCodeConditional, GetScope(), \r\n\t\t\t\t(string)$1, currentNamespace, (Expression)$3);\r\n\r\n\t\treductionsSink.GlobalConstantDeclarationReduced(this, c);\r\n\t\t\r\n\t\t$$ = c;\r\n  }\r\n;  \r\n\r\nglobal_constant_declaration_statement:\r\n\tattributes_opt T_CONST global_constant_declarator_list ';'\r\n  { \r\n\t  $$ = AnnotateDoc(new GlobalConstDeclList(@$, (List<GlobalConstantDecl>)$3, (List<CustomAttribute>)$1));\r\n\t}\r\n;\r\n\r\nexpression_list:\t\r\n\t\texpression_list ',' expr \r\n\t\t{ \r\n\t\t\tListAdd<Expression>($1, $3);\r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t|\texpr\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<Expression>($1);\r\n\t\t}\t\t\t\t\r\n;\r\n\r\n\r\nexpression_list_opt:\r\n\t\t/* empty */\t\t  { $$ = emptyExpressionListIndex; }\r\n\t|\texpression_list\t{ $$ = $1; }\r\n;\r\n\r\nexpr:\r\n\t\tchain\t\t\t          { $$ = $1; }\t\t\t\r\n\t|\texpr_without_chain\t{ $$ = $1; }\r\n;\r\n\r\nparenthesis_expr:\r\n\t\t'(' expr ')'\t\t{ $$ = $2; }\r\n\t|\t'(' yield_ex ')'\t{ $$ = $2; }\r\n;\r\n\r\nassignment_expression:\r\n\t\twritable_chain '=' expr\t         { $$ = new ValueAssignEx(@$, Operations.AssignValue, (VariableUse)$1, (Expression)$3); }\t\r\n\t|\twritable_chain '=' '&' chain  { $$ = new RefAssignEx(@$, (VariableUse)$1, (VarLikeConstructUse)$4); }\r\n\t\t\r\n\t|\twritable_chain '=' '&' T_NEW type_ref ctor_arguments_opt \r\n\t\t{  \r\n\t\t\t$$ = new RefAssignEx(@$, (VariableUse)$1, new NewEx(CombinePositions(Combine(@4, @5), @6), (TypeRef)$5, (List<ActualParam>)$6)); \r\n\t\t}\r\n\t|\twritable_chain T_PLUS_EQUAL expr { $$ = new ValueAssignEx(@$, Operations.AssignAdd, (VariableUse)$1, (Expression)$3); }\r\n\t|\twritable_chain T_MINUS_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignSub, (VariableUse)$1, (Expression)$3); }\r\n\t|\twritable_chain T_MUL_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignMul, (VariableUse)$1, (Expression)$3); \t}\r\n\t|\twritable_chain T_POW_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignPow, (VariableUse)$1, (Expression)$3); \t}\r\n\t|\twritable_chain T_DIV_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignDiv, (VariableUse)$1, (Expression)$3); }\t\r\n\t|\twritable_chain T_CONCAT_EQUAL expr { $$ = new ValueAssignEx(@$, Operations.AssignAppend, (VariableUse)$1, (Expression)$3); }\t\r\n\t|\twritable_chain T_MOD_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignMod, (VariableUse)$1, (Expression)$3); }\t\r\n\t|\twritable_chain T_AND_EQUAL expr\t{ $$ = new ValueAssignEx(@$,Operations.AssignAnd, (VariableUse)$1, (Expression)$3); }\t\r\n\t|\twritable_chain T_OR_EQUAL expr { $$ = new ValueAssignEx(@$, Operations.AssignOr, (VariableUse)$1, (Expression)$3); }\t\t\r\n\t|\twritable_chain T_XOR_EQUAL expr\t{ $$ = new ValueAssignEx(@$, Operations.AssignXor, (VariableUse)$1, (Expression)$3); }\t\t\r\n\t|\twritable_chain T_SL_EQUAL expr { $$ = new ValueAssignEx(@$, Operations.AssignShiftLeft, (VariableUse)$1, (Expression)$3); }\t \r\n\t|\twritable_chain T_SR_EQUAL expr { $$ = new ValueAssignEx(@$, Operations.AssignShiftRight, (VariableUse)$1, (Expression)$3); } \r\n;\r\n\r\nexpr_without_chain:\t\r\n\t\tassignment_expression \r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t}\r\n\t\t\r\n\t|\tnew_expr\t\t\t\t\t\t{ $$ = $1; }\t\t\r\n\t|\tT_CLONE expr                    { $$ = new UnaryEx(@$, Operations.Clone, (Expression)$2); }\r\n\t\t\r\n\t|\twritable_chain T_INC                { $$ = new IncDecEx(@$, true, true, (VariableUse)$1); }\r\n\t|\tT_INC writable_chain                { $$ = new IncDecEx(@$, true, false, (VariableUse)$2); }\r\n\t|\twritable_chain T_DEC                { $$ = new IncDecEx(@$, false, true, (VariableUse)$1); }\r\n\t|\tT_DEC writable_chain                { $$ = new IncDecEx(@$, false, false, (VariableUse)$2); }\r\n\r\n\t|\t'+' expr                        { $$ = new UnaryEx(@$, Operations.Plus, (Expression)$2); }\r\n\t|\t'-' expr                        { $$ = new UnaryEx(@$, Operations.Minus, (Expression)$2); }\r\n\t|\t'!' expr                        { $$ = new UnaryEx(@$, Operations.LogicNegation, (Expression)$2); }\r\n\t|\t'~' expr                        { $$ = new UnaryEx(@$, Operations.BitNegation, (Expression)$2); }\r\n  | cast_operation expr             { $$ = new UnaryEx(@$, (Operations)$1, (Expression)$2); } %prec TypeCast\r\n\t|\tT_PRINT expr\t\t\t\t\t\t\t\t\t\t{ $$ = new UnaryEx(@$, Operations.Print, (Expression)$2); }\r\n\t|\t'@' expr\t\t\t\t\t\t            { $$ = new UnaryEx(@$, Operations.AtSign, (Expression)$2); }\r\n\t\r\n\t|\texpr T_BOOLEAN_OR  expr         { $$ = new BinaryEx(@$, Operations.Or, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_BOOLEAN_AND  expr        { $$ = new BinaryEx(@$, Operations.And, (Expression)$1, (Expression)$3); } \r\n\t|\texpr T_LOGICAL_OR  expr         { $$ = new BinaryEx(@$, Operations.Or, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_LOGICAL_AND  expr        { $$ = new BinaryEx(@$, Operations.And, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_LOGICAL_XOR expr         { $$ = new BinaryEx(@$, Operations.Xor, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '|' expr\t                  { $$ = new BinaryEx(@$, Operations.BitOr, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '&' expr\t                  { $$ = new BinaryEx(@$, Operations.BitAnd, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '^' expr\t                  { $$ = new BinaryEx(@$, Operations.BitXor, (Expression)$1, (Expression)$3); }\r\n\t|\tconcat_exprs\t\t\t\t\t{ $$ = new ConcatEx(@$, new List<Expression>((List<Expression>)$1)); }\r\n\t|\texpr '+' expr                   { $$ = new BinaryEx(@$, Operations.Add, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '-' expr                   { $$ = new BinaryEx(@$, Operations.Sub, (Expression)$1, (Expression)$3); }\t\r\n\t|\texpr '*' expr\t                  { $$ = new BinaryEx(@$, Operations.Mul, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_POW expr\t                  { $$ = new BinaryEx(@$, Operations.Pow, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '/' expr\t                  { $$ = new BinaryEx(@$, Operations.Div, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '%' expr \t                { $$ = new BinaryEx(@$, Operations.Mod, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_SL expr\t                { $$ = new BinaryEx(@$, Operations.ShiftLeft, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_SR expr\t                { $$ = new BinaryEx(@$, Operations.ShiftRight, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_IS_IDENTICAL expr\t\t\t\t{ $$ = new BinaryEx(@$, Operations.Identical, (Expression)$1, (Expression)$3); }\t\r\n\t|\texpr T_IS_NOT_IDENTICAL expr\t\t{ $$ = new BinaryEx(@$, Operations.NotIdentical, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_IS_EQUAL expr\t\t\t\t\t\t{ $$ = new BinaryEx(@$, Operations.Equal, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_IS_NOT_EQUAL expr \t\t\t\t{ $$ = new BinaryEx(@$, Operations.NotEqual, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '<' expr \t\t\t\t\t\t\t\t\t{ $$ = new BinaryEx(@$, Operations.LessThan, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_IS_SMALLER_OR_EQUAL expr { $$ = new BinaryEx(@$, Operations.LessThanOrEqual, (Expression)$1, (Expression)$3); }\r\n\t|\texpr '>' expr \t\t\t\t\t\t\t\t\t{ $$ = new BinaryEx(@$, Operations.GreaterThan, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_IS_GREATER_OR_EQUAL expr { $$ = new BinaryEx(@$, Operations.GreaterThanOrEqual, (Expression)$1, (Expression)$3); }\r\n\t|\texpr T_INSTANCEOF type_ref      { $$ = new InstanceOfEx(@$, (Expression)$1, (TypeRef)$3); }\r\n\t|\tT_TYPEOF type_ref               { $$ = new TypeOfEx(@$, (TypeRef)$2); } // not enclosed in parenthesis to prevent conflicts with casts. e.g clrtypeof(int)\r\n\t|\tparenthesis_expr                    { $$ = $1;}\r\n\t|\texpr '?' expr ':' expr          { $$ = new ConditionalEx(@$, (Expression)$1, (Expression)$3, (Expression)$5); }\r\n\t|\texpr '?' ':' expr\t\t\t    { $$ = new ConditionalEx(@$, (Expression)$1, null, (Expression)$4); }\r\n\t|\tarray_ex\t\t\t\t\t\t{ $$ = $1; }\r\n\t|\tarray_ex '[' expr ']'\t\t\t\t\t{ $$ = new ItemUse(@$, (VarLikeConstructUse)$1, (Expression)$3); }\r\n\t|\tT_YIELD\t\t\t\t\t\t\t{ $$ = new YieldEx(@$);  }\r\n\t|\tT_LIST '(' assignment_list ')' '=' expr { $$ = new ListEx(@$, (List<Expression>)$3, (Expression)$6); }\r\n\t|\tT_ISSET '(' writable_chain_list ')'     { $$ = new IssetEx(@$, (List<VariableUse>)$3); }\r\n\t|\tT_EMPTY '(' chain ')'\t\t\t\t            { $$ = new EmptyEx(@$, (Expression)$3); }\t\t\r\n\t|\tT_EVAL '(' expr ')'                     { $$ = new EvalEx(@$, (Expression)$3); }\r\n\t|\tT_EXIT exit_expr_opt\t\t                { $$ = new ExitEx(@$, (Expression)$2); }\r\n\t|\tscalar_expr                             { $$ = $1; }\t\t\t\r\n\t|\tstring_constant '[' expr ']'\t\t\t{ $$ = new StringLiteralDereferenceEx(@$, (Expression)$1, (Expression)$3); }\r\n\t|\t'`' composite_string_opt '`'\t\t\t\t\t\t{ $$ = new ShellEx(@$, CreateConcatExOrStringLiteral(Combine(@1, @3), (List<Expression>)$2, false)); }\r\n\r\n\t|\tT_INCLUDE expr \t\t\t\t\t\t\t\t\t{ $$ = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, @$, InclusionTypes.Include, (Expression)$2); reductionsSink.InclusionReduced(this, (IncludingEx)$$); }\r\n\t|\tT_INCLUDE_ONCE expr             { $$ = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, @$, InclusionTypes.IncludeOnce, (Expression)$2); reductionsSink.InclusionReduced(this, (IncludingEx)$$); }\r\n\t|\tT_REQUIRE expr\t\t              { $$ = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, @$, InclusionTypes.Require, (Expression)$2); reductionsSink.InclusionReduced(this, (IncludingEx)$$); }\r\n\t|\tT_REQUIRE_ONCE expr\t\t          { $$ = new IncludingEx(sourceUnit, GetScope(), IsCurrentCodeConditional, @$, InclusionTypes.RequireOnce, (Expression)$2); reductionsSink.InclusionReduced(this, (IncludingEx)$$); }\r\n\r\n\t| lambda_function_expression\t\t{ $$ = $1; }\r\n;\r\n\r\nyield_ex:\r\n\t\tT_YIELD expr\t\t\t\t\t\t{ $$ = new YieldEx(@$, null, (Expression)$2); }\r\n\t|\tT_YIELD expr T_DOUBLE_ARROW expr\t{ $$ = new YieldEx(@$, (Expression)$2, (Expression)$4); }\r\n;\r\n\r\narray_ex:\r\n\t\tT_ARRAY '(' array_item_list_opt ')'     { $$ = new ArrayEx(@$, (List<Item>)$3); }\r\n\t|\t'[' array_item_list_opt ']'\t\t\t\t{ $$ = new ArrayEx(@$, (List<Item>)$2); }\r\n;\r\n\r\nnew_expr:\r\n\tT_NEW type_ref ctor_arguments_opt \r\n\t{ \r\n\t\t$$ = new NewEx(@$, (TypeRef)$2, (List<ActualParam>)$3); \r\n\t}\r\n;\r\n\r\nlambda_function_expression:\r\n\tlambda_function_head_ formal_parameter_list_opt ')' lambda_function_use_vars\r\n\t{ \r\n\t\tEnterConditionalCode(); \r\n\t}\r\n\t'{' inner_statement_list_opt '}'\r\n\t{\r\n\t\tvar static_ref = (Tuple<PhpMemberAttributes,bool>)$1;\r\n\r\n\t\t$$ = new LambdaFunctionExpr(sourceUnit,\r\n            @1, @$, GetHeadingEnd(@3), GetBodyStart(@6),\r\n            GetScope(), currentNamespace,\r\n            static_ref.Item2, (List<FormalParam>)$2, (List<FormalParam>)$4,\r\n            StmtList(Combine(@6, @8), $7));\r\n\r\n\t\treductionsSink.LambdaFunctionReduced(this, (LambdaFunctionExpr)$$);\r\n\r\n\t\tLeaveConditionalCode();\r\n\t}\r\n;\r\n\r\nlambda_function_head_:\r\n\t\tT_FUNCTION\t'('\t\t\t\t{ $$ = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.None, false); }\r\n\t|\tT_STATIC T_FUNCTION\t'('\t\t{ $$ = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.Static, false); }\r\n\t|\tT_FUNCTION '&' '('\t\t\t{ $$ = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.None, true); }\r\n\t|\tT_STATIC T_FUNCTION '&' '('\t{ $$ = new Tuple<PhpMemberAttributes,bool>(PhpMemberAttributes.Static, true); }\r\n;\r\n\r\nlambda_function_use_vars:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t{ $$ = null; }\r\n\t|\tT_USE '(' lambda_function_use_var_list ')'\t{ $$ = $3; }\r\n;\r\n\r\nlambda_function_use_var_list:\r\n\t\tlambda_function_use_var_list ',' lambda_function_use_var\t{ $$ = $1; ListAdd<FormalParam>($$, (FormalParam)$3); }\r\n\t|\tlambda_function_use_var\t\t\t\t\t\t\t\t\t\t{ $$ = NewList<FormalParam>((FormalParam)$1); }\r\n;\r\n\r\nlambda_function_use_var:\r\n\t\treference_opt T_VARIABLE\r\n\t\t{\r\n\t\t\t$$ = new FormalParam(@2, (string)$2, null, FormalParamFlags((int)$1 == 1, false), null, null);\r\n\t\t}\r\n;\r\n\r\nconcat_exprs:\r\n\t\tconcat_exprs '.' expr\t{ $$ = new List<Expression>((List<Expression>)$1){ (Expression)$3 }; }\r\n\t|\texpr '.' expr\t\t\t{ $$ = new List<Expression>(){ (Expression)$1, (Expression)$3 }; }\r\n;\r\n\r\ncast_operation:\r\n    T_BOOL_CAST                 { $$ = (int)Operations.BoolCast; }\r\n  | T_INT8_CAST                 { $$ = (int)Operations.Int8Cast; }\r\n  | T_INT16_CAST                { $$ = (int)Operations.Int16Cast; }\r\n  | T_INT32_CAST                { $$ = (int)Operations.Int32Cast; }\r\n  | T_INT64_CAST                { $$ = (int)Operations.Int64Cast; }\r\n  | T_UINT8_CAST                { $$ = (int)Operations.UInt8Cast; }\r\n  | T_UINT16_CAST               { $$ = (int)Operations.UInt16Cast; }\r\n  | T_UINT32_CAST               { $$ = (int)Operations.UInt32Cast; }\r\n  | T_UINT64_CAST               { $$ = (int)Operations.UInt64Cast; }\r\n  | T_DOUBLE_CAST               { $$ = (int)Operations.DoubleCast; }\r\n  | T_FLOAT_CAST                { $$ = (int)Operations.FloatCast; }\r\n  | T_DECIMAL_CAST              { $$ = (int)Operations.DecimalCast; }\r\n  | T_STRING_CAST               { $$ = (int)Operations.StringCast; }\r\n  | T_BINARY_CAST               { $$ = (int)Operations.BinaryCast; }\r\n  | T_UNICODE_CAST              { $$ = (int)Operations.UnicodeCast; }\r\n  | T_ARRAY_CAST                { $$ = (int)Operations.ArrayCast; }\r\n  | T_OBJECT_CAST               { $$ = (int)Operations.ObjectCast; }\r\n  | T_UNSET_CAST                { $$ = (int)Operations.UnsetCast; }\r\n;\r\n\r\nfunction_call:\r\n\t\tqualified_namespace_name generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n\t\t{ \r\n\t\t  $$ = CreateDirectFcnCall(@$, (QualifiedName)$1, @1, (List<ActualParam>)$4, (List<TypeRef>)$2);\r\n\t\t}\r\n\r\n\t|\tclass_constant generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n\t\t{ \r\n\t\t  $$ = new DirectStMtdCall(@$, (ClassConstUse)$1, (List<ActualParam>)$4, (List<TypeRef>)$2); \r\n\t\t}\r\n\t\t\r\n\t|\tqualified_static_type_ref T_DOUBLE_COLON keyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n\t\t{ \r\n\t\t  $$ = new IndirectStMtdCall(@$, (GenericQualifiedName)$1, @1, (CompoundVarUse)$3, (List<ActualParam>)$6, \r\n\t\t\t\t(List<TypeRef>)$4);\t\r\n\t\t}\r\n\r\n\t|\tkeyed_variable T_DOUBLE_COLON keyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n\t\t{ \r\n\t\t  $$ = new IndirectStMtdCall(@$,\r\n\t\t\t\tnew IndirectTypeRef(@1, (VariableUse)$1, TypeRef.EmptyList), (CompoundVarUse)$3,\r\n\t\t\t\t(List<ActualParam>)$6, (List<TypeRef>)$4);\t\r\n\t\t}\r\n\t\t\r\n\t|\tkeyed_variable generic_dynamic_args_opt '(' actual_argument_list_opt ')' \r\n\t\t{ \r\n\t\t  $$ = new IndirectFcnCall(@$, (CompoundVarUse)$1, (List<ActualParam>)$4, (List<TypeRef>)$2); \r\n\t\t}\r\n\t\t\t\r\n;\r\n\r\nqualified_static_type_ref:\r\n\t\tqualified_namespace_name generic_dynamic_args_opt\r\n\t\t{ \r\n\t\t\t$$ = new GenericQualifiedName(TranslateAny((QualifiedName)$1), TypeRef.ToStaticTypeRefs((List<TypeRef>)$2, errors, sourceUnit)); \r\n\t\t}\r\n\t|\tT_STATIC\r\n\t\t{\r\n\t\t\t$$ = new GenericQualifiedName(new QualifiedName(Name.StaticClassName));\r\n\t\t}\r\n;\r\n\r\ntype_ref:\r\n\t\tqualified_namespace_name generic_dynamic_args_opt\r\n\t\t{ \r\n\t\t\t$$ = new DirectTypeRef(@$, TranslateAny((QualifiedName)$1), (List<TypeRef>)$2);\r\n\t\t}\r\n\t\t\r\n\t|\tindirect_type_ref generic_dynamic_args_opt\r\n\t\t{ \r\n\t\t\t$$ = new IndirectTypeRef(@$, (VariableUse)$1, (List<TypeRef>)$2); \r\n\t\t}\r\n\t\r\n\t|\tprimitive_type\r\n\t\t{ \r\n\t\t\t$$ = new PrimitiveTypeRef(@$, (PrimitiveTypeName)$1);\r\n\t\t}\r\n\r\n\t|\tT_STATIC\r\n\t\t{\r\n\t\t\t$$ = new DirectTypeRef(@$, new QualifiedName(Name.StaticClassName), TypeRef.EmptyList);\r\n\t\t}\r\n;\r\n\r\ntype_ref_list:\r\n\t\ttype_ref\t\t\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<TypeRef>($1);\r\n\t\t}\t\t\r\n\t\t\r\n\t|\ttype_ref_list ',' type_ref\t\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<TypeRef>($$, $3); \r\n\t\t}\r\n;\t\r\n\r\n\r\nindirect_type_ref:\r\n\t\tchain_base T_OBJECT_OPERATOR keyed_field_name keyed_field_names_opt \r\n\t\t{ \r\n\t\t\t((VarLikeConstructUse)$3).IsMemberOf = (VariableUse)$1; \r\n\t\t\tif ($4 != null) \r\n\t\t\t{ \r\n\t\t\t\t((VarLikeConstructUse)$4).IsMemberOf = (VarLikeConstructUse)$3; \r\n\t\t\t\t$$ = $4;\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t  $$ = $3;\r\n\t\t\t}   \r\n\t\t}\r\n\t\t\t\r\n\t|\tchain_base \r\n\t  { \r\n\t    $$ = $1; \r\n\t  }\r\n;\r\n\r\nns_separator_opt:\r\n\t\t\t\t\t\t{/*null*/}\r\n\t|\tT_NS_SEPARATOR\t{/*null*/}\r\n;\r\n\r\nqualified_namespace_name:\r\n\t\tnamespace_name_list\r\n\t\t{ $$ = new QualifiedName((List<string>)$1, true, false); }\r\n\r\n\t|\tT_NS_SEPARATOR namespace_name_list\r\n\t\t{ $$ = new QualifiedName((List<string>)$2, true, true); }\r\n\r\n\t|\tT_NAMESPACE T_NS_SEPARATOR namespace_name_list\r\n\t\t{\r\n\t\t\tif (currentNamespace != null)\r\n\t\t\t{\r\n\t\t\t\t$$ = new QualifiedName(\r\n\t\t\t\t\tListAdd<string>(currentNamespace.QualifiedName.ToStringList(), $3 ),\r\n\t\t\t\t\ttrue, true);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.NamespaceKeywordUsedOutsideOfNamespace, SourceUnit, @1);\r\n\t\t\t\tyyerrok();\r\n\r\n\t\t\t\t$$ = new QualifiedName((List<string>)$3, true, true);\r\n\t\t\t}\r\n\t\t}\r\n;\r\n\r\nnamespace_name_list:\r\n\t\tidentifier\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = new List<string>( ((string)$1).Split('\\\\') ); if (((List<string>)$$)[0]==\"\"){ Debug.Fail(\"TODO: fully qualified namespace name!\"); } }\r\n\t|\tnamespace_name_list T_NS_SEPARATOR namespace_name_identifier\t{ $$ = $1; ListAdd<string>($$, $3 ); }\r\n;\r\n\r\nnamespace_name_identifier:\t// identifier + some keywords that should be used within qualified name (List, Array, ...)\r\n\t\tidentifier\t\t\t{ $$ = $1; }\r\n\t|\tT_LIST\t\t\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_BOOL_TYPE\t\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_INT_TYPE\t\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_INT64_TYPE\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_DOUBLE_TYPE\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_STRING_TYPE\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_RESOURCE_TYPE\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_OBJECT_TYPE\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_ARRAY\t\t\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n\t|\tT_ABSTRACT\t\t\t{ $$ = CSharpNameToken(@1, (string)$1.Object); }\r\n;\r\n\r\nqualified_namespace_name_list:\r\n\t\tqualified_namespace_name\t\t\t\t\t\t\t\t\t\t{ $$ = NewList<QualifiedName>($1); }\r\n\t|\tqualified_namespace_name_list ',' qualified_namespace_name\t\t{ $$ = ListAdd<QualifiedName>($1, $3); }\r\n;\r\n\r\nkeyed_field_names_opt:\r\n\t\tkeyed_field_names_opt T_OBJECT_OPERATOR keyed_field_name\r\n\t\t{ \r\n\t\t\tif ($1 != null) ((VarLikeConstructUse)$3).IsMemberOf = (VarLikeConstructUse)$1; \r\n\t\t\t$$ = $3; \r\n\t\t}  \r\n\t\t\r\n\t|\t/* empty */ { $$ = null; }\r\n;\r\n\r\nexit_expr_opt:\r\n\t\t/* empty */\t\t{ $$ = null; }\r\n\t|\t'(' ')'\t\t\t\t{ $$ = null; }\r\n\t|\tparenthesis_expr\t{ $$ = $1; }\r\n;\r\n\r\n\r\nctor_arguments_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = emptyActualParamListIndex; }\t\r\n\t|\t'(' actual_argument_list_opt ')'\t{ $$ = $2; }\r\n;\r\n\r\nconstant_inititalizer:\r\n\t  constant                                  { $$ = $1; }\r\n\t|\tT_ARRAY '(' constant_array_item_list_opt ')'\t{ $$ = new ArrayEx(@$, (List<Item>)$3); }\r\n\t|\t'[' constant_array_item_list_opt ']'\t{ $$ = new ArrayEx(@$, (List<Item>)$2); }\r\n\t|\t'+' constant_inititalizer\t                { $$ = new UnaryEx(@$, Operations.Plus, (Expression)$2); }\r\n\t|\t'-' constant_inititalizer\t                { $$ = new UnaryEx(@$, Operations.Minus, (Expression)$2); }\r\n\t|\theredoc_expr { $$ = $1; if (!($1 is StringLiteral)) this.ErrorSink.Add(FatalErrors.SyntaxError, SourceUnit, @1, CoreResources.nowdoc_expected); }\r\n\t|\tstring_expr { $$ = $1; if (!($1 is StringLiteral)) this.ErrorSink.Add(FatalErrors.SyntaxError, SourceUnit, @1, CoreResources.constant_value_neither_scalar_nor_null); }\r\n;\r\n\r\nconstant:\r\n\t\tliteral_constant\t\t\t      { $$ = $1; }\t\r\n\t| pseudo_constant             { $$ = $1; }\r\n\t|\tclass_constant\t\t          { $$ = $1; }\r\n\t|\tglobal_constant\t\t          { $$ = $1; }\r\n;\r\n\r\nliteral_constant:\r\n\t\tT_LNUMBER\t\t\t\t\t{ $$ = new IntLiteral(@$, $1); }\t\t\t\t\t\r\n\t|\tT_L64NUMBER\t\t\t\t\t{ $$ = new LongIntLiteral(@$, $1); }\r\n\t|\tT_DNUMBER\t\t\t\t\t{ $$ = new DoubleLiteral(@$, $1); }\t\t\t\t\t\r\n\t|\tstring_constant\t\t\t\t{ $$ = $1; }\r\n;\r\n\r\nstring_constant:\r\n\t\tT_CONSTANT_ENCAPSED_STRING\t{ $$ = ($1 is string) ? (Literal)new StringLiteral(@$, (string)$1) : (Literal)new BinaryStringLiteral(@$, (byte[])$1); }\t\r\n;\r\n\r\npseudo_constant:\r\n\t  T_LINE \t\t\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Line); }\t\t\t\t\r\n\t|\tT_FILE \t\t\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.File); }\t\t\r\n\t|\tT_DIR \t\t\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Dir); }\t\t\r\n\t|\tT_CLASS_C\t\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Class); }\t\r\n\t|\tT_TRAIT_C\t\t\t\t\t\t{ $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Trait); }\r\n\t|\tT_METHOD_C\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Method); }\t\t\r\n\t|\tT_FUNC_C\t\t                { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Function); }\t\t\t\t\r\n\t|\tT_NAMESPACE_C\t              { $$ = new PseudoConstUse(@$, PseudoConstUse.Types.Namespace); }\r\n;\r\n\r\nglobal_constant:\r\n\tqualified_namespace_name                { $$ = CreateGlobalConstUse(@$, (QualifiedName)$1); }\r\n;\r\n\r\nclass_constant:\r\n\t\tqualified_static_type_ref T_DOUBLE_COLON identifier \r\n\t\t{ \r\n\t\t  $$ = new ClassConstUse(@$, (GenericQualifiedName)$1, @1, (string)$3, @3); \r\n\t\t}\r\n\t|\tkeyed_variable T_DOUBLE_COLON identifier\r\n\t\t{\r\n\t\t\t$$ = new ClassConstUse(@$, new IndirectTypeRef(@1, (VariableUse)$1, TypeRef.EmptyList), (string)$3, @3); \r\n\t\t}\r\n\t|\tqualified_static_type_ref T_DOUBLE_COLON T_CLASS\r\n\t\t{\r\n\t\t\t$$ = new PseudoClassConstUse(@$, (GenericQualifiedName)$1, @1, PseudoClassConstUse.Types.Class, @3);\r\n\t\t}\r\n;\r\n\r\nscalar_expr:\r\n\t\tconstant\t\t      { $$ = $1; }\r\n\t|\tT_STRING_VARNAME\t{ $$ = new StringLiteral(@$, scanner.GetEncapsedString($1.Offset, $1.Integer)); }\r\n\t|\tstring_expr\t\t\t{ $$ = $1; }\r\n\t|\theredoc_expr\t\t{ $$ = $1; }\r\n;\r\n\r\nheredoc_expr:\r\n\t\tT_START_HEREDOC   { scanner.InUnicodeString = false; } composite_string_opt T_END_HEREDOC  { $$ = CreateConcatExOrStringLiteral(@$, (List<Expression>)$3, true); }\r\n\t|\tT_BINARY_HEREDOC  { scanner.InUnicodeString = false; } composite_string_opt T_END_HEREDOC  { $$ = CreateConcatExOrStringLiteral(@$, (List<Expression>)$3, true); }\r\n;\r\n\r\nstring_expr:\r\n\t\t'\"'               { scanner.InUnicodeString = unicodeSemantics; } composite_string_opt '\"' { $$ = CreateConcatExOrStringLiteral(@$, (List<Expression>)$3, false); }\t\r\n\t|\tT_BINARY_DOUBLE   { scanner.InUnicodeString = unicodeSemantics; } composite_string_opt '\"' { $$ = CreateConcatExOrStringLiteral(@$, (List<Expression>)$3, false); }\r\n;\r\n\r\nwritable_chain_list:\r\n\t  writable_chain_list ',' writable_chain\t\r\n\t\t{ \r\n\t\t\t$$ = $1; \r\n\t\t\tListAdd<VariableUse>($$, $3); \r\n\t\t}\r\n\t|\twritable_chain\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = NewList<VariableUse>($1); \r\n\t\t}\r\n;\r\n\r\nwritable_chain:\r\n\tchain\t{ CheckVariableUse(@1, $1); $$ = $1; }\r\n;\r\n\r\nchain:\r\n\t\tchain_base_with_function_calls T_OBJECT_OPERATOR keyed_field_name actual_arguments_opt member_access_chain_opt \r\n\t\t{ \r\n      $$ = CreateVariableUse(@$, (VarLikeConstructUse)$1, (VarLikeConstructUse)$3, (FcnParam)$4, (VarLikeConstructUse)$5);\r\n\t\t}\r\n\t\t\t\r\n\t|\tchain_base_with_function_calls { $$ = $1; }\t\r\n;\r\n\r\nmember_access_chain_opt:\r\n\t\tmember_access_chain_opt member_access \r\n\t\t{ \r\n\t\t\t$$ = CreatePropertyVariables((VarLikeConstructUse)$1, (VarLikeConstructUse)$2);\r\n\t\t}  \r\n\t|\t/* empty */\t{ $$ = null; }\r\n;\r\n\r\n// -> (identifier|{expr})[key_opt]* (<:type_args:>(args)[key_opt]*)?\r\n// -> ($)*(T_VARIABLE|${expr})[key_opt]* (<:type_args:>(args)[key_opt]*)?\r\nmember_access:\r\n\t\tT_OBJECT_OPERATOR keyed_field_name actual_arguments_opt \r\n\t\t{ \r\n      $$ = CreatePropertyVariable(@$, (CompoundVarUse)$2, (FcnParam)$3);\r\n\t\t}\r\n;\r\n\r\n\r\nkey_opt:\r\n\t\t/* empty */\t{ $$ = null; }\t\r\n\t|\texpr\t\t\t\t{ $$ = $1; }\t\t\r\n;\r\n\r\n\r\n// (T_VARIABLE|${expr})\r\ncompound_variable:\r\n\t\tT_VARIABLE\t\t\t\t{ $$ = new DirectVarUse(@$, (string)$1);}\r\n\t|\t'$' '{' expr '}'\t{ $$ = new IndirectVarUse(@$, 1, (Expression)$3); }\r\n;\r\n\r\n// (T_VARIABLE|${expr})[key_opt]*\r\nkeyed_compound_variable:\r\n\t\tkeyed_compound_variable '[' key_opt ']'\t         { $$ = new ItemUse(@$, (CompoundVarUse)$1, (Expression)$3); }\r\n\t|\tkeyed_compound_variable '{' expr '}'\t\t\t\t     { $$ = new ItemUse(@$, (CompoundVarUse)$1, (Expression)$3); }\r\n\t|\tcompound_variable\t\t\t\t\t\t\t\t\t\t             { $$ = $1;}\r\n;\r\n\r\n// ($)*(T_VARIABLE|${expr})[key_opt]*\r\nkeyed_variable:\r\n\t\tkeyed_compound_variable\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = $1; }\r\n\t|\tsimple_indirect_reference keyed_compound_variable\t{ $$ = new IndirectVarUse(@$, $1, (Expression)$2); }\t\r\n;\r\n\r\n// (function_call)[key_opt]*\r\nkeyed_function_call:\r\n\t\tkeyed_function_call '[' key_opt ']'\t\t\t{ $$ = new ItemUse(@$, (VarLikeConstructUse)$1, (Expression)$3, true); }\r\n\t|\tkeyed_function_call '{' expr '}'\t\t\t{ $$ = new ItemUse(@$, (VarLikeConstructUse)$1, (Expression)$3, true); }\r\n\t|\tfunction_call\t\t\t\t\t\t\t\t{ $$ = $1;}\r\n;\r\n\r\n// (static_type_ref::)?($)*(T_VARIABLE|${expr})[key_opt]*\r\nchain_base:\r\n\t\tkeyed_variable                                    { $$ = $1; }\t\r\n\t|\tqualified_static_type_ref T_DOUBLE_COLON keyed_variable \r\n\t  { \r\n\t\tif ($3 is DirectVarUse && ((DirectVarUse)$3).VarName.IsThisVariableName)\r\n\t\t\t$$ = $3;\t// you know, in PHP ... whatever::$this means $this\r\n\t\telse\r\n\t\t\t$$ = CreateStaticFieldUse(@$, (GenericQualifiedName)$1, @1, (CompoundVarUse)$3); \r\n\t  }\t\r\n\t|\tkeyed_variable T_DOUBLE_COLON keyed_variable \r\n\t  { \r\n\t\t$$ = CreateStaticFieldUse(@$, (CompoundVarUse)$1, (CompoundVarUse)$3); \r\n\t  }\t\r\n;\r\n\r\nchain_base_with_function_calls:\r\n\t\tchain_base\t\t\t  { $$ = $1; }\t\r\n\t|\tkeyed_function_call   { $$ = $1; }\r\n\t|\t'(' new_expr ')'\t  { $$ = $2; }\r\n;\r\n\r\n// (identifier|{expr})[key_opt]*\r\n// ($)*(T_VARIABLE|${expr})[key_opt]*\r\nkeyed_field_name:\r\n\t\tkeyed_simple_field_name                   { $$ = $1; }\t\r\n\t|\tkeyed_variable                            { $$ = new IndirectVarUse(@$, 1, (VariableUse)$1); }\t\r\n;\r\n\r\n// (identifier|{expr})[key_opt]*\r\nkeyed_simple_field_name:\r\n\t\tkeyed_simple_field_name '[' key_opt ']'   { $$ = new ItemUse(@$, (CompoundVarUse)$1, (Expression)$3); }\r\n\t|\tkeyed_simple_field_name '{' expr '}'\t\t  { $$ = new ItemUse(@$, (CompoundVarUse)$1, (Expression)$3); }\r\n\t|\tidentifier                                { $$ = new DirectVarUse(@$, (string)$1); }\r\n\t| '{' expr '}'                              { $$ = new IndirectVarUse(@$, 1, (Expression)$2); }\r\n;\r\n\r\nsimple_indirect_reference:\r\n\t\t'$'\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = 1; }\r\n\t|\tsimple_indirect_reference '$' { $$ = $1 + 1; }\r\n;\r\n\r\n\r\n\r\n\r\nassignment_list:\r\n\t\tassignment_list ',' assignment_list_element_opt \r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<Expression>($$, $3);\r\n\t\t}\r\n\t|\tassignment_list_element_opt\t\r\n\t  { \r\n\t    $$ = NewList<Expression>($1);\r\n\t  }\r\n;\r\n\r\nassignment_list_element_opt:\r\n\t\tchain\t\t\t\t\t\t\t\t\t\t\t\t    { $$ = $1; }\t\t\t\t\t\t\t\r\n\t|\tT_LIST '('  assignment_list ')'\t{ $$ = new ListEx(@$, (List<Expression>)$3, null ); }\r\n\t|\t/* empty */\t\t\t\t\t\t\t\t\t\t\t{ $$ = null; }\t\t\t\t\t\t\r\n;\r\n\r\n\r\narray_item_list_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t\t{ $$ = emptyItemListIndex; }\r\n\t|\tarray_item_list comma_opt\t      { $$ = $1; }\r\n;\r\n\r\narray_item_list:\r\n\t\tarray_item_list ',' array_item\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<Item>($$, $3); \r\n\t\t}\r\n\t\t\r\n\t|\tarray_item\r\n\t\t{ \r\n\t\t  $$ = NewList<Item>($1);\r\n\t\t}\r\n;\r\n\r\narray_item:\r\n    expr                                    { $$ = new ValueItem(null, (Expression)$1); }\r\n  | expr T_DOUBLE_ARROW expr\t              { $$ = new ValueItem((Expression)$1, (Expression)$3); } \r\n  | expr T_DOUBLE_ARROW '&' writable_chain  { $$ = new RefItem((Expression)$1, (VariableUse)$4); }\r\n  | '&' writable_chain                      { $$ = new RefItem(null, (VariableUse)$2); }\r\n;\r\n \r\nconstant_array_item_list_opt:\r\n\t\t/* empty */\t\t\t\t\t\t\t\t\t\t\t\t\t{ $$ = emptyItemListIndex; }\r\n\t|\tconstant_array_item_list comma_opt  { $$ = $1; }\r\n;\r\n\r\nconstant_array_item_list:\r\n\t\tconstant_array_item_list ',' constant_array_item\r\n\t\t{ \r\n\t\t  $$ = $1; \r\n\t\t  ListAdd<Item>($$, $3); \r\n\t\t}\r\n\t\t\r\n\t|\tconstant_array_item\r\n\t\t{ \r\n\t\t  $$ = NewList<Item>($1);\r\n\t\t}\r\n;\r\n\r\nconstant_array_item:\r\n\t  constant_inititalizer T_DOUBLE_ARROW constant_inititalizer { $$ = new ValueItem((Expression)$1, (Expression)$3); }\r\n  | constant_inititalizer                                      { $$ = new ValueItem(null, (Expression)$1); }\r\n;\r\n\r\n \r\n \r\ncomposite_string_opt:\r\n\t\tcomposite_string_opt string_embedded_variable \r\n\t\t{ \r\n\t\t\tPhpStringBuilder sb = strBufStack.Pop();\r\n\t\t\t\r\n\t\t\tif (sb.Length > 0)\r\n\t\t\t  ListAdd<Expression>($1, sb.CreateLiteral()); \r\n\t\t\t\r\n\t\t\tListAdd<Expression>($1, (VarLikeConstructUse)$2); \r\n\t\t\t\r\n\t\t\tstrBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); \r\n\t\t\t$$ = $1;\r\n\t\t}\r\n\t\t\r\n\t|\tcomposite_string_opt T_STRING\t\r\n\t  { \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, $2.Offset, $2.Integer, @2); \r\n\t    $$ = $1;\r\n\t  }\r\n\t  \r\n\t|\tcomposite_string_opt T_NUM_STRING \r\n\t  { \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, $2.Offset, $2.Integer, @2); \r\n\t    $$ = $1;\r\n\t  }\r\n\t  \r\n\t|\tcomposite_string_opt T_ENCAPSED_AND_WHITESPACE\t\r\n\t  { \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, $2.Offset, $2.Integer, @2); \r\n\t    $$ = $1;\r\n\t  }\r\n\t  \r\n\t|\tcomposite_string_opt T_BAD_CHARACTER\t\r\n\t  { \r\n\t    StringUtils.StringBuilderAppend(strBufStack.Peek(), scanner.EncapsedStringBuffer, $2.Offset, $2.Integer, @2); \r\n\t    $$ = $1;\r\n\t  }\r\n\t  \t\t\r\n\t|\tcomposite_string_opt T_CHARACTER \r\n\t  { \r\n\t    strBufStack.Peek().Append((int)$2, @2); \r\n\t    $$ = $1;\r\n\t  }\r\n\t  \r\n\t|\tcomposite_string_opt '['\t{ strBufStack.Peek().Append('[', @2); $$ = $1; }\t\t\r\n\t|\tcomposite_string_opt ']'\t{ strBufStack.Peek().Append(']', @2); $$ = $1; }\t\t\r\n\t|\tcomposite_string_opt '{'\t{ strBufStack.Peek().Append('{', @2); $$ = $1; }\t\t\r\n\t|\tcomposite_string_opt '}'\t{ strBufStack.Peek().Append('}', @2); $$ = $1; }\r\n\t\t\r\n\t|\tcomposite_string_opt T_OBJECT_OPERATOR \r\n\t  { \r\n\t    strBufStack.Peek().Append(\"->\", @2);\r\n\t    $$ = $1;\r\n\t  }\r\n\t   \r\n\t|\t/* empty */\t\r\n\t  { \r\n\t    $$ = new List<Expression>(); \r\n\t    strBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); \r\n\t  }\r\n;\r\n\r\n\r\nstring_embedded_variable:\r\n\t\tT_VARIABLE\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t{ \r\n\t\t\t$$ = new DirectVarUse(@$, (string)$1); \r\n\t\t}\r\n\t\t\r\n\t|\tT_VARIABLE '[' { strBufStack.Push(new PhpStringBuilder(sourceUnit.Encoding, false, strBufSize)); } string_embedded_key ']'\r\n\t\t{\r\n\t\t\tstrBufStack.Pop();\r\n\t\t\t$$ = new ItemUse(@$, new DirectVarUse(@$, (string)$1),(Expression)$4);\r\n\t\t}\r\n\t\t\r\n\t|\tT_VARIABLE T_OBJECT_OPERATOR T_STRING \r\n\t\t{ \r\n\t\t\t$$ = new DirectVarUse(@3, scanner.GetEncapsedString($3.Offset,$3.Integer)); \r\n\t\t\t((DirectVarUse)$$).IsMemberOf = new DirectVarUse(@1, (string)$1); \r\n\t\t}\r\n\t\r\n\t|\tT_DOLLAR_OPEN_CURLY_BRACES expr '}'\t\t\r\n\t\t{ \r\n\t\t  $$ = new IndirectVarUse(@$, 1, (Expression)$2); \r\n\t\t}\r\n\t\r\n\t|\tT_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' \r\n\t\t{ \r\n\t\t\t$$ = new ItemUse(@$, new DirectVarUse(@$, scanner.GetEncapsedString($2.Offset,$2.Integer)), (Expression)$4); \r\n\t\t}\r\n\t\t\r\n\t|\tT_CURLY_OPEN chain '}'\t\t\t\t\t\t\t\r\n\t\t{ \r\n\t\t  $$ = $2; \r\n\t\t}\r\n;\r\n\r\nstring_embedded_key:\r\n\t\tT_STRING\t\t\r\n\t\t{ \r\n\t\t\t/* Constants are not looked for within strings */\r\n\t\t\t$$ = new StringLiteral(@$, scanner.GetEncapsedString($1.Offset,$1.Integer));\r\n\t\t}\r\n\t|\tT_NUM_STRING\t\r\n\t\t{ \r\n\t\t\t$$ = new StringLiteral(@$, scanner.GetEncapsedString($1.Offset,$1.Integer)); \r\n\t\t}\r\n\t|\tT_VARIABLE\r\n\t{ \r\n\t  $$ = new DirectVarUse(@$, (string)$1); \r\n\t}\r\n;\r\n\r\n%%\r\n"
  },
  {
    "path": "Source/Core.Parsers/InclusionTypes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region InclusionTypes\r\n\r\n    /// <summary>\r\n    /// Type of inclusion.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// The properties of inclusion types are defined by IsXxxInclusion methods.\r\n    /// </remarks>\r\n    public enum InclusionTypes\r\n    {\r\n        Include, IncludeOnce, Require, RequireOnce, Prepended, Appended, RunSilverlight\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/LanguageFeatures.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region Language Features Enum\r\n\r\n    /// <summary>\r\n    /// PHP language features supported by Phalanger.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum LanguageFeatures\r\n    {\r\n        /// <summary>\r\n        /// Basic features - always present.\r\n        /// </summary>\r\n        Basic = 0,\r\n\r\n        /// <summary>\r\n        /// Allows using short open tags in the script.\r\n        /// </summary>\r\n        ShortOpenTags = 1,\r\n\r\n        /// <summary>\r\n        /// Allows using ASP tags.\r\n        /// </summary>\r\n        AspTags = 2,\r\n\r\n        /// <summary>\r\n        /// Enables PHP5 keywords such as <c>private</c>, <c>protected</c>, <c>public</c>, <c>clone</c>, <c>goto</c>, , etc.\r\n        /// Enables namespaces.\r\n        /// </summary>\r\n        V5Keywords = 4,\r\n\r\n        /// <summary>\r\n        /// Enables primitive type keywords <c>bool</c>, <c>int</c>, <c>int64</c>, <c>double</c>, <c>string</c>,\r\n        /// <c>object</c>, <c>resource</c>.\r\n        /// </summary>\r\n        TypeKeywords = 8,\r\n\r\n        /// <summary>\r\n        /// Enables Unicode escapes in strings (\\U, \\u, \\C).\r\n        /// </summary>\r\n        UnicodeSemantics = 32,\r\n\r\n        /// <summary>\r\n        /// Allows to treat values of PHP types as CLR objects (e.g. $s = \"string\"; $s->GetHashCode()).\r\n        /// </summary>\r\n        ClrSemantics = 64,\r\n\r\n        /// <summary>\r\n        /// Enables PHP keywords that may be used in C# as class or namespace name, to be used in PHP code too.\r\n        /// E.g. \"List\", \"Array\", \"Abstract\", ... would not be treated as syntax error when used as a <c>namespace_name_identifier</c> token.\r\n        /// </summary>\r\n        CSharpTypeNames = 128,\r\n\r\n        /// <summary>\r\n        /// Features enabled by default in the standard mode. Corresponds to the currently supported version of PHP.\r\n        /// </summary>\r\n        Default = Php5,\r\n\r\n        /// <summary>\r\n        /// Features enabled by default in the pure mode. Corresponds to the PHP/CLR language.\r\n        /// </summary>\r\n        PureModeDefault = PhpClr,\r\n\r\n        Php4 = ShortOpenTags,\r\n        Php5 = Php4 | V5Keywords,\r\n        PhpClr = Php5 | UnicodeSemantics | TypeKeywords | ClrSemantics | AspTags | CSharpTypeNames\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Members.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region PhpMemberAttributes\r\n\r\n    [Flags]\r\n    public enum PhpMemberAttributes : short\r\n    {\r\n        None = 0,\r\n\r\n        Public = 0,\r\n        Private = 1,\r\n        Protected = 2,\r\n        NamespacePrivate = Private,\r\n\r\n        Static = 4,\r\n        AppStatic = Static | 8,\r\n        Abstract = 16,\r\n        Final = 32,\r\n\r\n        /// <summary>\r\n        /// The type is an interface.\r\n        /// </summary>\r\n        Interface = 64,\r\n\r\n        /// <summary>\r\n        /// The type is a trait.\r\n        /// </summary>\r\n        Trait = 128,\r\n\r\n        /// <summary>\r\n        /// The member is a constructor.\r\n        /// </summary>\r\n        Constructor = 256,\r\n\r\n        /// <summary>\r\n        /// The member is imported type, function or global constant with ambiguous fully qualified name.\r\n        /// </summary>\r\n        Ambiguous = 1024,\r\n\r\n        /// <summary>\r\n        /// The member needs to be activated before it can be resolved.\r\n        /// TODO: useful when analysis checks whether there are any imported conditional types/functions.\r\n        /// TODO: add the first conditional to the AC, ignore the others. Add the flag handling to Resolve* and to analyzer.\r\n        /// </summary>\r\n        InactiveConditional = 2048,\r\n\r\n        StaticMask = Static | AppStatic,\r\n        VisibilityMask = Public | Private | Protected | NamespacePrivate,\r\n        SpecialMembersMask = Constructor,\r\n        PartialMerged = Abstract | Final\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Names.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\nusing System.Threading;\r\nusing System.Linq;\r\nusing System.Reflection.Emit;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t// \r\n\t//  Identifier            Representation\r\n\t// --------------------------------------------------------------------\r\n\t//  variable, field       VariableName     (case-sensitive)\r\n\t//  class constant        VariableName     (case-sensitive)\r\n\t//  namespace constant    QualifiedName    (case-sensitive)\r\n\t//  method                Name             (case-insensitive)\r\n\t//  class, function       QualifiedName    (case-insensitive)\r\n    //  primitive type        PrimitiveTypeName(case-insensitive)\r\n\t//  namespace component   Name             (case-sensitive?)\r\n\t//  label                 VariableName     (case-sensitive?)\r\n\t//\r\n\r\n\t#region Name\r\n\r\n\t/// <summary>\r\n\t/// Case-insensitive culture-sensitive (TODO ???) simple name in Unicode C normal form.\r\n\t/// Used for names of methods and namespace components.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n\t[Serializable]\r\n\tpublic struct Name : IEquatable<Name>, IEquatable<string>\r\n\t{\r\n\t\tpublic string/*!*/ Value\r\n\t\t{\r\n\t\t\tget { return value; }\r\n\t\t}\r\n\t\tprivate readonly string/*!*/ value;\r\n        private readonly int hashCode;\r\n        \r\n\t\t#region Special Names\r\n\r\n\t\tpublic static readonly Name[] EmptyNames = new Name[0];\r\n\t\tpublic static readonly Name EmptyBaseName = new Name(\"\");\r\n\t\tpublic static readonly Name SelfClassName = new Name(\"self\");\r\n        public static readonly Name StaticClassName = new Name(\"static\");\r\n\t\tpublic static readonly Name ParentClassName = new Name(\"parent\");\r\n\t\tpublic static readonly Name AutoloadName = new Name(\"__autoload\");\r\n\t\tpublic static readonly Name ClrCtorName = new Name(\".ctor\");\r\n\t\tpublic static readonly Name ClrInvokeName = new Name(\"Invoke\"); // delegate Invoke method\r\n\t\tpublic static readonly Name AppStaticName = new Name(\"AppStatic\");\r\n\t\tpublic static readonly Name AppStaticAttributeName = new Name(\"AppStaticAttribute\");\r\n\t\tpublic static readonly Name ExportName = new Name(\"Export\");\r\n\t\tpublic static readonly Name ExportAttributeName = new Name(\"ExportAttribute\");\r\n        public static readonly Name DllImportAttributeName = new Name(\"DllImportAttribute\");\r\n        public static readonly Name DllImportName = new Name(\"DllImport\");\r\n\t\tpublic static readonly Name OutAttributeName = new Name(\"OutAttribute\");\r\n\t\tpublic static readonly Name OutName = new Name(\"Out\");\r\n\t\tpublic static readonly Name DeclareHelperName = new Name(\"<Declare>\");\r\n\t\tpublic static readonly Name LambdaFunctionName = new Name(\"<Lambda>\");\r\n        public static readonly Name ClosureFunctionName = new Name(\"{closure}\");\r\n\r\n        #region SpecialMethodNames\r\n\r\n        /// <summary>\r\n        /// Contains special (or &quot;magic&quot;) method names.\r\n        /// </summary>\r\n        public static class SpecialMethodNames\r\n        {\r\n            /// <summary>Constructor.</summary>\r\n            public static readonly Name Construct = new Name(\"__construct\");\r\n\r\n            /// <summary>Destructor.</summary>\r\n            public static readonly Name Destruct = new Name(\"__destruct\");\r\n\r\n            /// <summary>Invoked when cloning instances.</summary>\r\n            public static readonly Name Clone = new Name(\"__clone\");\r\n\r\n            /// <summary>Invoked when casting to string.</summary>\r\n            public static readonly Name Tostring = new Name(\"__tostring\");\r\n\r\n            /// <summary>Invoked when serializing instances.</summary>\r\n            public static readonly Name Sleep = new Name(\"__sleep\");\r\n\r\n            /// <summary>Invoked when deserializing instanced.</summary>\r\n            public static readonly Name Wakeup = new Name(\"__wakeup\");\r\n\r\n            /// <summary>Invoked when an unknown field is read.</summary>\r\n            public static readonly Name Get = new Name(\"__get\");\r\n\r\n            /// <summary>Invoked when an unknown field is written.</summary>\r\n            public static readonly Name Set = new Name(\"__set\");\r\n\r\n            /// <summary>Invoked when an unknown method is called.</summary>\r\n            public static readonly Name Call = new Name(\"__call\");\r\n\r\n            /// <summary>Invoked when an object is called like a function.</summary>\r\n            public static readonly Name Invoke = new Name(\"__invoke\");\r\n\r\n            /// <summary>Invoked when an unknown method is called statically.</summary>\r\n            public static readonly Name CallStatic = new Name(\"__callStatic\");\r\n\r\n            /// <summary>Invoked when an unknown field is unset.</summary>\r\n            public static readonly Name Unset = new Name(\"__unset\");\r\n\r\n            /// <summary>Invoked when an unknown field is tested for being set.</summary>\r\n            public static readonly Name Isset = new Name(\"__isset\");\r\n        };\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Name suffix of attribute class name.\r\n        /// </summary>\r\n        internal const string AttributeNameSuffix = \"Attribute\";\r\n\r\n\t\tpublic bool IsCloneName\r\n\t\t{\r\n\t\t\tget { return this.Equals(SpecialMethodNames.Clone); }\r\n\t\t}\r\n\r\n\t\tpublic bool IsConstructName\r\n\t\t{\r\n\t\t\tget { return this.Equals(SpecialMethodNames.Construct); }\r\n\t\t}\r\n\r\n\t\tpublic bool IsDestructName\r\n\t\t{\r\n\t\t\tget { return this.Equals(SpecialMethodNames.Destruct); }\r\n\t\t}\r\n\r\n        public bool IsCallName\r\n        {\r\n            get { return this.Equals(SpecialMethodNames.Call); }\r\n        }\r\n\r\n        public bool IsCallStaticName\r\n        {\r\n            get { return this.Equals(SpecialMethodNames.CallStatic); }\r\n        }\r\n\r\n        public bool IsToStringName\r\n        {\r\n            get { return this.Equals(SpecialMethodNames.Tostring); }\r\n        }\r\n\r\n        public bool IsParentClassName\r\n        {\r\n            get { return this.Equals(Name.ParentClassName); }\r\n        }\r\n\r\n        public bool IsSelfClassName\r\n        {\r\n            get { return this.Equals(Name.SelfClassName); }\r\n        }\r\n\r\n        public bool IsStaticClassName\r\n        {\r\n            get { return this.Equals(Name.StaticClassName); }\r\n        }\r\n\r\n        public bool IsReservedClassName\r\n        {\r\n            get { return IsParentClassName || IsSelfClassName || IsStaticClassName; }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a name. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The name shouldn't be <B>null</B>.</param>\r\n\t\tpublic Name(string/*!*/ value)\r\n\t\t{\r\n\t\t\tDebug.Assert(value != null);\r\n\t\t\tthis.value = value;\r\n            this.hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(value);\r\n\t\t}\r\n\r\n        #region Utils\r\n\r\n        /// <summary>\r\n        /// Separator of class name and its static field in a form of <c>CLASS::MEMBER</c>.\r\n        /// </summary>\r\n        public const string ClassMemberSeparator = \"::\";\r\n\r\n        /// <summary>\r\n        /// Splits the <paramref name=\"value\"/> into class name and member name if it is double-colon separated.\r\n        /// </summary>\r\n        /// <param name=\"value\">Full name.</param>\r\n        /// <param name=\"className\">Will contain the class name fragment if the <paramref name=\"value\"/> is in a form of <c>CLASS::MEMBER</c>. Otherwise <c>null</c>.</param>\r\n        /// <param name=\"memberName\">Will contain the member name fragment if the <paramref name=\"value\"/> is in a form of <c>CLASS::MEMBER</c>. Otherwise it contains original <paramref name=\"value\"/>.</param>\r\n        /// <returns>True iff the <paramref name=\"value\"/> is in a form of <c>CLASS::MEMBER</c>.</returns>\r\n        public static bool IsClassMemberSyntax(string/*!*/value, out string className, out string memberName)\r\n        {\r\n            Debug.Assert(value != null);\r\n            //Debug.Assert(QualifiedName.Separator.ToString() == \":::\" && !value.Contains(QualifiedName.Separator.ToString())); // be aware of deprecated namespace syntax\r\n\r\n            int separator;\r\n            if ((separator = value.IndexOf(':')) >= 0 &&    // value.Contains( ':' )\r\n                (separator = System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(value, ClassMemberSeparator, separator, value.Length - separator, System.Globalization.CompareOptions.Ordinal)) > 0) // value.Contains( \"::\" )\r\n            {\r\n                className = value.Remove(separator);\r\n                memberName = value.Substring(separator + ClassMemberSeparator.Length);\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                className = null;\r\n                memberName = value;\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines if given <paramref name=\"value\"/> is in a form of <c>CLASS::MEMBER</c>.\r\n        /// </summary>\r\n        /// <param name=\"value\">Full name.</param>\r\n        /// <returns>True iff the <paramref name=\"value\"/> is in a form of <c>CLASS::MEMBER</c>.</returns>\r\n        public static bool IsClassMemberSyntax(string value)\r\n        {\r\n            return value != null && value.Contains(ClassMemberSeparator);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Basic Overrides\r\n\r\n        public override bool Equals(object obj)\r\n\t\t{\r\n            return obj != null && obj.GetType() == typeof(Name) && Equals((Name)obj);\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n            return this.hashCode;\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn this.value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<Name> Members\r\n\r\n\t\tpublic bool Equals(Name other)\r\n\t\t{\r\n            return this.GetHashCode() == other.GetHashCode() && Equals(other.Value);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator ==(Name name, Name other)\r\n\t\t{\r\n\t\t\treturn name.Equals(other);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator !=(Name name, Name other)\r\n\t\t{\r\n\t\t\treturn !name.Equals(other);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<string> Members\r\n\r\n\t\tpublic bool Equals(string other)\r\n\t\t{\r\n            return string.Equals(value, other, StringComparison.OrdinalIgnoreCase);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region VariableName\r\n\r\n\t/// <summary>\r\n\t/// Case-sensitive simple name in Unicode C normal form.\r\n\t/// Used for names of variables and constants.\r\n\t/// </summary>\r\n\t[DebuggerNonUserCode]\r\n    [Serializable]\r\n\tpublic struct VariableName : IEquatable<VariableName>, IEquatable<string>\r\n\t{\r\n\t\tpublic string/*!*/ Value { get { return value; } set { this.value = value; } }\r\n\t\tprivate string/*!*/ value;\r\n\r\n        #region Special Names\r\n\r\n        public static readonly VariableName ThisVariableName = new VariableName(\"this\");\r\n\r\n\t\t#region Autoglobals\r\n\r\n        public const string EnvName = \"_ENV\";\r\n        public const string ServerName = \"_SERVER\";\r\n        public const string GlobalsName = \"GLOBALS\";\r\n        public const string RequestName = \"_REQUEST\";\r\n        public const string GetName = \"_GET\";\r\n        public const string PostName = \"_POST\";\r\n        public const string CookieName = \"_COOKIE\";\r\n        public const string HttpRawPostDataName = \"HTTP_RAW_POST_DATA\";\r\n        public const string FilesName = \"_FILES\";\r\n        public const string SessionName = \"_SESSION\";\r\n\r\n        #endregion\r\n        \r\n        public bool IsThisVariableName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this == ThisVariableName;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        #region IsAutoGlobal\r\n\r\n        /// <summary>\r\n        /// Gets value indicting whether the name represents an auto-global variable.\r\n        /// </summary>\r\n        public bool IsAutoGlobal\r\n        {\r\n            get\r\n            {\r\n                return IsAutoGlobalVariableName(this.Value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether a specified name is the name of an auto-global variable.\r\n        /// </summary>\r\n        /// <param name=\"name\">The name.</param>\r\n        /// <returns>Whether <paramref name=\"name\"/> is auto-global.</returns>\r\n        public static bool IsAutoGlobalVariableName(string name)\r\n        {\r\n            switch (name)\r\n            {\r\n                case GlobalsName:\r\n                case ServerName:\r\n                case EnvName:\r\n                case CookieName:\r\n                case HttpRawPostDataName:\r\n                case FilesName:\r\n                case RequestName:\r\n                case GetName:\r\n                case PostName:\r\n                case SessionName:\r\n                    return true;\r\n\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Creates a name. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"value\">The name, cannot be <B>null</B> nor empty.</param>\r\n\t\tpublic VariableName(string/*!*/ value)\r\n\t\t{\r\n\t\t\tDebug.Assert(value != null);\r\n\t\t\t// TODO (missing from Mono): this.value = value.Normalize();\r\n\r\n\t\t\tthis.value = value;\r\n\t\t}\r\n\r\n\t\t#region Basic Overrides\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tif (!(obj is VariableName)) return false;\r\n\t\t\treturn Equals((VariableName)obj);\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn value.GetHashCode();\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn this.value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<VariableName> Members\r\n\r\n\t\tpublic bool Equals(VariableName other)\r\n\t\t{\r\n\t\t\treturn this.value.Equals(other.value);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator ==(VariableName name, VariableName other)\r\n\t\t{\r\n\t\t\treturn name.Equals(other);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator !=(VariableName name, VariableName other)\r\n\t\t{\r\n\t\t\treturn !name.Equals(other);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<string> Members\r\n\r\n\t\tpublic bool Equals(string other)\r\n\t\t{\r\n\t\t\treturn value.Equals(other);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator ==(VariableName name, string str)\r\n\t\t{\r\n\t\t\treturn name.Equals(str);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator !=(VariableName name, string str)\r\n\t\t{\r\n\t\t\treturn !name.Equals(str);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region QualifiedName\r\n\r\n    /// <summary>\r\n\t/// Case-insensitive culture-sensitive (TODO ???) qualified name in Unicode C normal form.\r\n\t/// </summary>\r\n\t[Serializable]\r\n    [DebuggerNonUserCode]\r\n    public struct QualifiedName : IEquatable<QualifiedName>\r\n    {\r\n        #region Special names\r\n\r\n        public static readonly QualifiedName Error = new QualifiedName(new Name(\"<error>\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Global = new QualifiedName(new Name(\"<Global>\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Lambda = new QualifiedName(new Name(\"Lambda\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Null = new QualifiedName(new Name(\"null\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName True = new QualifiedName(new Name(\"true\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName False = new QualifiedName(new Name(\"false\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Array = new QualifiedName(new Name(\"array\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Object = new QualifiedName(new Name(\"object\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Integer = new QualifiedName(new Name(\"int\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName LongInteger = new QualifiedName(new Name(\"int64\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName String = new QualifiedName(new Name(\"string\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Boolean = new QualifiedName(new Name(\"bool\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Double = new QualifiedName(new Name(\"double\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName Resource = new QualifiedName(new Name(\"resource\"), Name.EmptyNames);\r\n\t\tpublic static readonly QualifiedName SystemObject = new QualifiedName(new Name(\"Object\"), new Name[] { new Name(\"System\") });\r\n        public static readonly QualifiedName Callable = new QualifiedName(new Name(\"callable\"), Name.EmptyNames);\r\n\r\n        public bool IsSimpleName\r\n        {\r\n            get\r\n            {\r\n                return Namespaces.Length == 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether this name represents a primitive type.\r\n        /// </summary>\r\n        public bool IsPrimitiveTypeName\r\n        {\r\n            get\r\n            {\r\n                return IsSimpleName &&\r\n                    (   Equals(Array) ||\r\n                        Equals(Object) ||\r\n                        Equals(Integer) ||\r\n                        Equals(LongInteger) ||\r\n                        Equals(String) ||\r\n                        Equals(Boolean) ||\r\n                        Equals(Double) ||\r\n                        Equals(Resource) ||\r\n                        Equals(Callable));\r\n            }\r\n        }\r\n\r\n        public bool IsParentClassName\r\n        {\r\n            get { return IsSimpleName && name == Name.ParentClassName; }\r\n        }\r\n\r\n        public bool IsSelfClassName\r\n        {\r\n            get { return IsSimpleName && name == Name.SelfClassName; }\r\n        }\r\n\r\n        public bool IsStaticClassName\r\n        {\r\n            get { return IsSimpleName && name == Name.StaticClassName; }\r\n        }\r\n\r\n        public bool IsReservedClassName\r\n        {\r\n            get { return this.IsSimpleName && this.name.IsReservedClassName; }\r\n        }\r\n\r\n        public bool IsAutoloadName\r\n        {\r\n            get { return IsSimpleName && name == Name.AutoloadName; }\r\n        }\r\n\r\n        public bool IsAppStaticAttributeName\r\n        {\r\n            get { return IsSimpleName && (name == Name.AppStaticName || name == Name.AppStaticAttributeName); }\r\n        }\r\n\r\n        public bool IsExportAttributeName\r\n        {\r\n            get { return IsSimpleName && (name == Name.ExportName || name == Name.ExportAttributeName); }\r\n        }\r\n\r\n        public bool IsDllImportAttributeName\r\n        {\r\n            get { return IsSimpleName && (name == Name.DllImportName || name == Name.DllImportAttributeName); }\r\n        }\r\n\r\n        public bool IsOutAttributeName\r\n        {\r\n            get { return IsSimpleName && (name == Name.OutName || name == Name.OutAttributeName); }\r\n        }\r\n\r\n        #endregion\r\n\r\n        public const char Separator = '\\\\';\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n\t\t/// The outer most namespace is the first in the array.\r\n\t\t/// </summary>\r\n\t\tpublic Name[]/*!*/ Namespaces { get { return namespaces; } set { namespaces = value; } }\r\n\t\tprivate Name[]/*!*/ namespaces;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Base name. Contains the empty string for namespaces.\r\n\t\t/// </summary>\r\n\t\tpublic Name Name { get { return name; } set { name = value; } }\r\n\t\tprivate Name name;\r\n\r\n        /// <summary>\r\n        /// <c>True</c> if this represents fully qualified name (absolute namespace).\r\n        /// </summary>\r\n        public bool IsFullyQualifiedName { get { return isFullyQualifiedName; } internal set { isFullyQualifiedName = value; } }\r\n        private bool isFullyQualifiedName;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        ///// <summary>\r\n        ///// Creates a qualified name with or w/o a base name. \r\n        ///// </summary>\r\n        //internal QualifiedName(string/*!*/ qualifiedName, bool hasBaseName)\r\n        //{\r\n        //    Debug.Assert(qualifiedName != null);\r\n        //    QualifiedName qn = Parse(qualifiedName, 0, qualifiedName.Length, hasBaseName);\r\n        //    this.name = qn.name;\r\n        //    this.namespaces = qn.namespaces;\r\n        //    this.isFullyQualifiedName = qn.IsFullyQualifiedName;\r\n        //}\r\n\r\n\t\tinternal QualifiedName(IList<string>/*!*/ names, bool hasBaseName, bool fullyQualified)\r\n\t\t{\r\n\t\t\tDebug.Assert(names != null && names.Count > 0);\r\n\r\n            //\r\n            if (hasBaseName)\r\n\t\t\t{\r\n\t\t\t\tname = new Name(names[names.Count - 1]);\r\n\t\t\t\tnamespaces = new Name[names.Count - 1];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tname = Name.EmptyBaseName;\r\n\t\t\t\tnamespaces = new Name[names.Count];\r\n\t\t\t}\r\n\r\n\t\t\tfor (int i = 0; i < namespaces.Length; i++)\r\n\t\t\t\tnamespaces[i] = new Name(names[i]);\r\n\r\n            //\r\n            isFullyQualifiedName = fullyQualified;\r\n\t\t}\r\n\r\n\t\tpublic QualifiedName(Name name)\r\n            :this(name, Name.EmptyNames, false)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic QualifiedName(Name name, Name[]/*!*/ namespaces)\r\n            :this(name, namespaces, false)\r\n\t\t{\r\n\t\t}\r\n\r\n        public QualifiedName(Name name, Name[]/*!*/ namespaces, bool fullyQualified)\r\n        {\r\n            if (namespaces == null)\r\n                throw new ArgumentNullException(\"namespaces\");\r\n\r\n            this.name = name;\r\n            this.namespaces = namespaces;\r\n            this.isFullyQualifiedName = fullyQualified;\r\n        }\r\n\r\n\t\tinternal QualifiedName(Name name, QualifiedName namespaceName)\r\n\t\t{\r\n\t\t\tDebug.Assert(namespaceName.name.Value == \"\");\r\n\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.namespaces = namespaceName.Namespaces;\r\n            this.isFullyQualifiedName = namespaceName.IsFullyQualifiedName;\r\n\t\t}\r\n\r\n\t\tinternal QualifiedName(QualifiedName name, QualifiedName namespaceName)\r\n\t\t{\r\n\t\t\tDebug.Assert(namespaceName.name.Value == \"\");\r\n\r\n            this.name = name.name;\r\n\t\t\t\t\r\n\t\t\tif (name.IsSimpleName)\r\n\t\t\t{\r\n\t\t\t\tthis.namespaces = namespaceName.Namespaces;\r\n\t\t\t}\r\n\t\t\telse // used for nested types\r\n\t\t\t{\r\n\t\t\t\tthis.namespaces = ArrayUtils.Concat(namespaceName.namespaces, name.namespaces);\r\n\t\t\t}\r\n\r\n            this.isFullyQualifiedName = namespaceName.IsFullyQualifiedName;\r\n\t\t}\r\n\r\n        //internal static QualifiedName Parse(string/*!*/ buffer, int startIndex, int length, bool hasBaseName)\r\n        //{\r\n        //    Debug.Assert(buffer != null && startIndex >= 0 && startIndex <= buffer.Length - length);\r\n\r\n        //    QualifiedName result = new QualifiedName();\r\n\r\n        //    // handle fully qualified namespace name:\r\n        //    if (length > 0 && buffer[startIndex] == Separator)\r\n        //    {\r\n        //        result.isFullyQualifiedName = true;\r\n        //        startIndex++;\r\n        //        length--;\r\n        //    }\r\n\r\n        //    // names separated by Separator:\r\n        //    int slash_count = 0;\r\n        //    for (int i = startIndex; i < startIndex + length; i++)\r\n        //        if (buffer[i] == Separator) slash_count++;\r\n\r\n        //    int separator_count = slash_count;// / Separator.ToString().Length;\r\n\r\n        //    //Debug.Assert(slash_count % Separator.Length == 0);\r\n\r\n        //    if (separator_count == 0)\r\n        //    {\r\n        //        Name entire_name = new Name(buffer.Substring(startIndex, length));\r\n\r\n        //        if (hasBaseName)\r\n        //        {\r\n        //            result.namespaces = Name.EmptyNames;\r\n        //            result.name = entire_name;\r\n        //        }\r\n        //        else\r\n        //        {\r\n        //            result.namespaces = new Name[] { entire_name };\r\n        //            result.name = Name.EmptyBaseName;\r\n        //        }\r\n        //    }\r\n        //    else\r\n        //    {\r\n        //        result.namespaces = new Name[separator_count + (hasBaseName ? 0 : 1)];\r\n\r\n        //        int current_name = startIndex;\r\n        //        int next_separator = startIndex;\r\n        //        int i = 0;\r\n        //        do\r\n        //        {\r\n        //            while (buffer[next_separator] != Separator)\r\n        //                next_separator++;\r\n\r\n        //            result.namespaces[i++] = new Name(buffer.Substring(current_name, next_separator - current_name));\r\n        //            next_separator += Separator.ToString().Length;\r\n        //            current_name = next_separator;\r\n        //        }\r\n        //        while (i < separator_count);\r\n\r\n        //        Name base_name = new Name(buffer.Substring(current_name, length - current_name));\r\n\r\n        //        if (hasBaseName)\r\n        //        {\r\n        //            result.name = base_name;\r\n        //        }\r\n        //        else\r\n        //        {\r\n        //            result.namespaces[separator_count] = base_name;\r\n        //            result.name = Name.EmptyBaseName;\r\n        //        }\r\n        //    }\r\n\r\n        //    return result;\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Builds <see cref=\"QualifiedName\"/> with first element aliased if posible.\r\n        /// </summary>\r\n        /// <param name=\"qname\">Qualified name to translate.</param>\r\n        /// <param name=\"aliases\">Enumeration of aliases.</param>\r\n        /// <param name=\"currentNamespace\">Current namespace to be prepended if no alias if found.</param>\r\n        /// <returns>Qualified name that has been tralated according to given naming context.</returns>\r\n        public static QualifiedName TranslateAlias(QualifiedName qname, Dictionary<string, QualifiedName>/*!*/aliases, QualifiedName? currentNamespace)\r\n        {\r\n            if (!qname.IsFullyQualifiedName)\r\n            {\r\n                // get first part of the qualified name:\r\n                string first = qname.IsSimpleName ? qname.Name.Value : qname.Namespaces[0].Value;\r\n\r\n                // return the alias if found:\r\n                QualifiedName alias;\r\n                if (aliases != null && aliases.TryGetValue(first, out alias))\r\n                {\r\n                    if (qname.IsSimpleName)\r\n                    {\r\n                        qname = alias;\r\n                    }\r\n                    else\r\n                    {\r\n                        // [ alias.namespaces, alias.name, qname.namespaces+1 ]\r\n                        Name[] names = new Name[qname.namespaces.Length + alias.namespaces.Length];\r\n                        for (int i = 0; i < alias.namespaces.Length; ++i) names[i] = alias.namespaces[i];\r\n                        names[alias.namespaces.Length] = alias.name;\r\n                        for (int j = 1; j < qname.namespaces.Length; ++j) names[alias.namespaces.Length + j] = qname.namespaces[j];\r\n\r\n                        qname = new QualifiedName(qname.name, names);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (currentNamespace.HasValue)\r\n                    {\r\n                        Debug.Assert(string.IsNullOrEmpty(currentNamespace.Value.Name.Value));\r\n                        qname = new QualifiedName(qname, currentNamespace.Value);\r\n                    }\r\n                    else\r\n                    {\r\n                        qname = new QualifiedName(qname.Name, qname.Namespaces);\r\n                    }\r\n                }\r\n\r\n                // the name is translated (fully qualified)\r\n                qname.IsFullyQualifiedName = true;\r\n            }\r\n\r\n            return qname;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convert namespaces + name into list of strings.\r\n        /// </summary>\r\n        /// <returns>String List of namespaces (additionaly with <see cref=\"Name\"/> component if it is not empty).</returns>\r\n        internal List<string>/*!*/ToStringList()\r\n        {\r\n            List<string> list = new List<string>( this.Namespaces.Select( x => x.Value ) );\r\n\r\n            if (!string.IsNullOrEmpty(this.Name.Value))\r\n                list.Add(this.Name.Value);\r\n\r\n            return list;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Basic Overrides\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\treturn obj != null && obj.GetType() == typeof(QualifiedName) && this.Equals((QualifiedName)obj);\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\tunchecked\r\n\t\t\t{\r\n\t\t\t\tint result = name.GetHashCode();\r\n\t\t\t\tfor (int i = 0; i < namespaces.Length; i++)\r\n\t\t\t\t\tresult ^= namespaces[i].GetHashCode() << (i & 0x0f);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Return the namespace PHP name in form \"A\\B\\C\", not ending with <see cref=\"Separator\"/>.\r\n        /// </summary>\r\n        public string NamespacePhpName\r\n        {\r\n            get\r\n            {\r\n                var ns = this.namespaces;\r\n                if (ns.Length != 0)\r\n                {\r\n                    StringBuilder result = new StringBuilder(ns[0].Value, ns.Length * 8);\r\n                    for (int i = 1; i < ns.Length; i++)\r\n                    {\r\n                        result.Append(Separator);\r\n                        result.Append(ns[i].Value);\r\n                    }\r\n                    return result.ToString();\r\n                }\r\n                else\r\n                {\r\n                    return string.Empty;\r\n                }\r\n            }\r\n        }\r\n\r\n\t\tpublic string ToString(Name? memberName, bool instance)\r\n\t\t{\r\n\t\t\tStringBuilder result = new StringBuilder();\r\n\t\t\tfor (int i = 0; i < namespaces.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tresult.Append(namespaces[i]);\r\n\t\t\t\tresult.Append(Separator);\r\n\t\t\t}\r\n\t\t\tresult.Append(Name);\r\n\t\t\tif (memberName.HasValue)\r\n\t\t\t{\r\n\t\t\t\tresult.Append(instance ? \"->\" : \"::\");\r\n\t\t\t\tresult.Append(memberName.Value.ToString());\r\n\t\t\t}\r\n\r\n\t\t\treturn result.ToString();\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n            var ns = this.namespaces;\r\n            if (ns.Length == 0)\r\n            {\r\n                return this.Name.Value;\r\n            }\r\n            else\r\n            {\r\n                StringBuilder result = new StringBuilder(ns.Length * 8);\r\n                for (int i = 0; i < ns.Length; i++)\r\n                {\r\n                    result.Append(ns[i]);\r\n                    result.Append(Separator);\r\n                }\r\n                result.Append(this.Name.Value);\r\n                return result.ToString();\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEquatable<QualifiedName> Members\r\n\r\n\t\tpublic bool Equals(QualifiedName other)\r\n\t\t{\r\n\t\t\tif (!this.name.Equals(other.name) || this.namespaces.Length != other.namespaces.Length) return false;\r\n\r\n            for (int i = 0; i < namespaces.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (!this.namespaces[i].Equals(other.namespaces[i]))\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic static bool operator ==(QualifiedName name, QualifiedName other)\r\n\t\t{\r\n\t\t\treturn name.Equals(other);\r\n\t\t}\r\n\r\n\t\tpublic static bool operator !=(QualifiedName name, QualifiedName other)\r\n\t\t{\r\n\t\t\treturn !name.Equals(other);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n    internal class ConstantQualifiedNameComparer : IEqualityComparer<QualifiedName>\r\n    {\r\n        public static readonly ConstantQualifiedNameComparer Singleton = new ConstantQualifiedNameComparer();\r\n\r\n        public bool Equals(QualifiedName x, QualifiedName y)\r\n        {\r\n            return x.Equals(y) && string.Equals(x.Name.Value, y.Name.Value, StringComparison.Ordinal);   // case sensitive comparison of names\r\n        }\r\n\r\n        public int GetHashCode(QualifiedName obj)\r\n        {\r\n            return obj.GetHashCode();\r\n        }\r\n    }\r\n\r\n\t#endregion\r\n\r\n\t#region GenericQualifiedName\r\n\r\n\t/// <summary>\r\n\t/// Case-insensitive culture-sensitive (TODO ???) qualified name in Unicode C normal form\r\n\t/// with associated list of generic qualified names.\r\n\t/// </summary>\r\n    [Serializable]\r\n\tpublic struct GenericQualifiedName\r\n\t{\r\n        /// <summary>\r\n        /// Empty GenericQualifiedName array.\r\n        /// </summary>\r\n        public static readonly GenericQualifiedName[] EmptyGenericQualifiedNames = new GenericQualifiedName[0];\r\n\r\n        /// <summary>\r\n        /// Qualified name without generics.\r\n        /// </summary>\r\n\t\tpublic QualifiedName QualifiedName { get { return qualifiedName; } }\r\n\t\tprivate QualifiedName qualifiedName;\r\n\r\n\t\t/// <summary>\r\n        /// Array of <see cref=\"GenericQualifiedName\"/> or <see cref=\"PrimitiveTypeName\"/>.\r\n\t\t/// </summary>\r\n        public object[]/*!!*/ GenericParams { get { return genericParams; } }\r\n        private object[]/*!!*/ genericParams;\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether the name has generic type parameters.\r\n        /// </summary>\r\n        public bool IsGeneric { get { return genericParams != null && genericParams.Length != 0; } }\r\n\r\n        public GenericQualifiedName(QualifiedName qualifiedName, object[]/*!!*/ genericParams)\r\n\t\t{\r\n\t\t\tDebug.Assert(genericParams != null);\r\n            Debug.Assert(genericParams.All(obj => obj == null || obj is PrimitiveTypeName || obj is GenericQualifiedName));\r\n\r\n\t\t\tthis.qualifiedName = qualifiedName;\r\n\t\t\tthis.genericParams = genericParams;\r\n\t\t}\r\n\r\n\t\tpublic GenericQualifiedName(QualifiedName qualifiedName)\r\n\t\t{\r\n\t\t\tthis.qualifiedName = qualifiedName;\r\n\t\t\tthis.genericParams = ArrayUtils.EmptyObjects;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n    #region PrimitiveTypeName\r\n\r\n    /// <summary>\r\n    /// Represents primitive type name.\r\n    /// </summary>\r\n    public struct PrimitiveTypeName : IEquatable<PrimitiveTypeName>, IEquatable<QualifiedName>, IEquatable<string>\r\n    {\r\n        public QualifiedName QualifiedName { get { return qualifiedName; } }\r\n        private readonly QualifiedName qualifiedName;\r\n\r\n        public Name Name { get { return qualifiedName.Name; } }\r\n\r\n        public PrimitiveTypeName(QualifiedName qualifiedName)\r\n        {\r\n            if (!qualifiedName.IsPrimitiveTypeName)\r\n                throw new ArgumentException();\r\n\r\n            this.qualifiedName = qualifiedName;\r\n        }\r\n\r\n        #region IEquatable<PrimitiveName> Members\r\n\r\n        public bool Equals(PrimitiveTypeName other)\r\n        {\r\n            return Equals(other.qualifiedName);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEquatable<QualifiedName> Members\r\n\r\n        public bool Equals(QualifiedName other)\r\n        {\r\n            return Equals(other.Name.Value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEquatable<string> Members\r\n\r\n        public bool Equals(string other)\r\n        {\r\n            return qualifiedName.Name.Value.Equals(other, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n\t#region NamingContext\r\n\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    public sealed class NamingContext\r\n\t{\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Current namespace.\r\n        /// </summary>\r\n        public readonly QualifiedName? CurrentNamespace;\r\n\r\n        /// <summary>\r\n        /// PHP aliases. Can be null.\r\n        /// </summary>\r\n        public Dictionary<string, QualifiedName> Aliases { get { return _aliases; } }\r\n\r\n        /// <summary>\r\n        /// Function aliases. Can be null.\r\n        /// </summary>\r\n        public Dictionary<string, QualifiedName> FunctionAliases { get { return _functionAliases; } }\r\n\r\n        /// <summary>\r\n        /// Constant aliases. Can be null.\r\n        /// </summary>\r\n        public Dictionary<string, QualifiedName> ConstantAliases { get { return _constantAliases; } }\r\n\r\n        private Dictionary<string, QualifiedName> _aliases;\r\n        private Dictionary<string, QualifiedName> _functionAliases;\r\n        private Dictionary<string, QualifiedName> _constantAliases;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Initialize new instance of <see cref=\"NamingContext\"/>.\r\n        /// </summary>\r\n        /// <param name=\"currentNamespace\">Current namespace. Can be null. Not starting with <see cref=\"QualifiedName.Separator\"/>.</param>\r\n        /// <param name=\"aliases\">Amount of aliases. <c>0</c> means the <see cref=\"Aliases\"/> property will be null.</param>\r\n        public NamingContext(string currentNamespace, int aliases)\r\n        {\r\n            // current namespace:\r\n            if (string.IsNullOrEmpty(currentNamespace))\r\n            {\r\n                this.CurrentNamespace = null;\r\n            }\r\n            else\r\n            {\r\n                Debug.Assert(currentNamespace[0] != QualifiedName.Separator);   // not starting with separator\r\n                this.CurrentNamespace = new QualifiedName(currentNamespace.Split(QualifiedName.Separator), false, true);\r\n            }\r\n\r\n            // aliases (just initialize dictionary, items added later):\r\n            _aliases = (aliases > 0) ? new Dictionary<string, QualifiedName>(aliases, StringComparer.OrdinalIgnoreCase) : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"NamingContext\"/>\r\n        /// </summary>\r\n        public NamingContext(QualifiedName? currentNamespace, Dictionary<string, QualifiedName> aliases)\r\n        {\r\n            Debug.Assert(!currentNamespace.HasValue || string.IsNullOrEmpty(currentNamespace.Value.Name.Value));\r\n\r\n            this.CurrentNamespace = currentNamespace;\r\n            _aliases = aliases;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add an alias into the <see cref=\"Aliases\"/>.\r\n        /// </summary>\r\n        /// <param name=\"alias\">Alias name.</param>\r\n        /// <param name=\"qualifiedName\">Aliased namespace. Not starting with <see cref=\"QualifiedName.Separator\"/>.</param>\r\n        /// <remarks>Used when constructing naming context at runtime.</remarks>\r\n        public void AddAlias(string alias, string qualifiedName)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(alias));\r\n            Debug.Assert(!string.IsNullOrEmpty(qualifiedName));\r\n            Debug.Assert(qualifiedName[0] != QualifiedName.Separator);   // not starting with separator\r\n\r\n            AddAlias(alias, new QualifiedName(qualifiedName.Split(QualifiedName.Separator), true, true));\r\n        }\r\n\r\n        private static bool AddAlias(Dictionary<string, QualifiedName>/*!*/dict, string alias, QualifiedName qname)\r\n        {\r\n            var count = dict.Count;\r\n            dict[alias] = qname;\r\n            return count != dict.Count;  // item was added\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds an alias into the context.\r\n        /// </summary>\r\n        public bool AddAlias(string alias, QualifiedName qname)\r\n        {\r\n            var aliases = _aliases;\r\n            if (aliases == null)\r\n                _aliases = aliases = new Dictionary<string, QualifiedName>(StringComparer.OrdinalIgnoreCase);\r\n\r\n            return AddAlias(aliases, alias, qname);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a function alias into the context.\r\n        /// </summary>\r\n        public bool AddFunctionAlias(string alias, QualifiedName qname)\r\n        {\r\n            var aliases = _functionAliases;\r\n            if (aliases == null)\r\n                _functionAliases = aliases = new Dictionary<string, QualifiedName>(StringComparer.OrdinalIgnoreCase);\r\n\r\n            return AddAlias(aliases, alias, qname);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a constant into the context.\r\n        /// </summary>\r\n        public bool AddConstantAlias(string alias, QualifiedName qname)\r\n        {\r\n            var aliases = _constantAliases;\r\n            if (aliases == null)\r\n                _constantAliases = aliases = new Dictionary<string, QualifiedName>(StringComparer.OrdinalIgnoreCase);\r\n\r\n            return AddAlias(aliases, alias, qname);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/PHPDocBlock.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 DEVSENSE\r\n \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nusing PHP.Core.Text;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// Structuralized representation of PHPDoc DocBlock.\r\n    /// </summary>\r\n    /// <remarks>define() statements, functions, classes, class methods, and class vars, include() statements, and global variables can all be documented.\r\n    /// See http://en.wikipedia.org/wiki/PHPDoc for specifications.</remarks>\r\n    public sealed class PHPDocBlock : AST.LangElement\r\n    {\r\n        #region Nested classes: Element\r\n\r\n        public abstract class Element\r\n        {\r\n            #region Constants\r\n\r\n            /// <summary>\r\n            /// String sequence starting the PHPDoc block on the first line.\r\n            /// </summary>\r\n            private const string PhpDocStartString = \"/**\";\r\n\r\n            /// <summary>\r\n            /// Every PHPDoc line not starting with this character is ignored.\r\n            /// </summary>\r\n            private const char PHPDocFirstChar = '*';\r\n\r\n            /// <summary>\r\n            /// Every PHPDoc tag starts with this character.\r\n            /// </summary>\r\n            private const char PHPDocTagChar = '@';\r\n\r\n            /// <summary>\r\n            /// String representing new line between PHPDoc comment lines.\r\n            /// </summary>\r\n            protected const string NewLineString = \"\\n\";\r\n\r\n            #endregion\r\n\r\n            #region Properties\r\n\r\n            /// <summary>\r\n            /// Element position within the source code.\r\n            /// </summary>\r\n            public Span Span { get; internal set; }\r\n\r\n            #endregion\r\n\r\n            #region Tags\r\n\r\n            /// <summary>\r\n            /// Tag elements initialized using reflection.\r\n            /// </summary>\r\n            private static Dictionary<string, Func<string, string, Element>>/*!!*/elementFactories;\r\n\r\n            static Element()\r\n            {\r\n                // initilize dictionary of known tags and their factories:\r\n                elementFactories = new Dictionary<string, Func<string, string, Element>>(20, StringComparer.OrdinalIgnoreCase);\r\n                var types = typeof(PHPDocBlock).GetNestedTypes(System.Reflection.BindingFlags.Public);\r\n                \r\n                foreach (var t in types)\r\n                {\r\n                    if (t.IsSealed && !t.IsAbstract && typeof(Element).IsAssignableFrom(t))\r\n                    {\r\n                        // add to the dictionary according to its Name:\r\n                        var fld = t.GetField(\"Name\");\r\n                        if (fld != null)\r\n                        {\r\n                            var factory = CreateElementFactory(t);\r\n                            elementFactories.Add(TagNameHelper(fld), factory);\r\n                        }\r\n                        else\r\n                        {\r\n                            var f1 = t.GetField(\"Name1\");\r\n                            var f2 = t.GetField(\"Name2\");\r\n                            var f3 = t.GetField(\"Name3\");\r\n\r\n                            if (f1 != null && f2 != null)\r\n                            {\r\n                                var factory = CreateElementFactory(t);\r\n                                elementFactories.Add(TagNameHelper(f1), factory);\r\n                                elementFactories.Add(TagNameHelper(f2), factory);\r\n\r\n                                if (f3 != null)\r\n                                    elementFactories.Add(TagNameHelper(f3), factory);\r\n                            }\r\n                            else\r\n                            {\r\n                                // only these Elements do not represent a tag:\r\n                                Debug.Assert(\r\n                                    t.Name == typeof(ShortDescriptionElement).Name ||\r\n                                    t.Name == typeof(LongDescriptionElement).Name ||\r\n                                    t.Name == typeof(UnknownTextTag).Name);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // ensure we have some tags:\r\n                Debug.Assert(elementFactories.ContainsKey(\"@param\"));\r\n                Debug.Assert(elementFactories.ContainsKey(\"@ignore\"));\r\n                Debug.Assert(elementFactories.ContainsKey(\"@var\"));\r\n                // ...\r\n            }\r\n\r\n            private static Func<string, string, Element>/*!*/CreateElementFactory(Type/*!*/elementType)\r\n            {\r\n                Debug.Assert(elementType != null && typeof(Element).IsAssignableFrom(elementType));\r\n\r\n                var ctors = elementType.GetConstructors();\r\n                Debug.Assert(ctors != null && ctors.Length == 1);\r\n                var ctor = ctors[0];\r\n\r\n                var args = ctor.GetParameters();\r\n                Debug.Assert(args != null && args.Length <= 2);\r\n\r\n                // create function that creates the Element 't':\r\n                if (args.Length == 0)\r\n                {\r\n                    return (tagName, line) => (Element)ctor.Invoke(null);\r\n                }\r\n                else if (args.Length == 1)\r\n                {\r\n                    Debug.Assert(args[0].Name == \"line\");\r\n                    return (tagName, line) => (Element)ctor.Invoke(new object[] { line });\r\n                }\r\n                else\r\n                {\r\n                    Debug.Assert(args[0].Name == \"tagName\");\r\n                    Debug.Assert(args[1].Name == \"line\");\r\n                    return (tagName, line) => (Element)ctor.Invoke(new object[] { tagName, line });\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Reads value of given field, assuming it is string constant, which value starts with <see cref=\"PHPDocTagChar\"/>.\r\n            /// </summary>\r\n            private static string TagNameHelper(System.Reflection.FieldInfo fld)\r\n            {\r\n                Debug.Assert(fld != null);\r\n\r\n                var tagname = fld.GetValue(null) as string;\r\n\r\n                Debug.Assert(!string.IsNullOrEmpty(tagname));\r\n                Debug.Assert(tagname[0] == PHPDocTagChar);\r\n\r\n                return tagname;\r\n            }\r\n\r\n            private static KeyValuePair<string, Func<string, string, Element>> FindTagInfo(string/*!*/line)\r\n            {\r\n                Debug.Assert(!string.IsNullOrEmpty(line));\r\n                Debug.Assert(line[0] == PHPDocTagChar);\r\n\r\n                int endIndex = 1;\r\n                char c;\r\n                while (endIndex < line.Length && !char.IsWhiteSpace(c = line[endIndex]) && c != ':' && c != '(' && c != ';' && c != '.')\r\n                    endIndex++;\r\n\r\n                string tagName = (endIndex < line.Length) ? line.Remove(endIndex) : line;\r\n\r\n                Func<string,string,Element> tmp;\r\n                if (elementFactories.TryGetValue(tagName, out tmp))\r\n                    return new KeyValuePair<string, Func<string, string, Element>>(tagName, tmp);\r\n                else\r\n                    return new KeyValuePair<string, Func<string, string, Element>>(tagName, (_name, _line) => new UnknownTextTag(_name, _line));\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Parsing\r\n\r\n            /// <summary>\r\n            /// Prepares given <paramref name=\"line\"/>.\r\n            /// \r\n            /// If the line creates new PHPDoc element, new <see cref=\"Element\"/>\r\n            /// is instantiated and returned in <paramref name=\"next\"/>.\r\n            /// </summary>\r\n            /// <param name=\"line\">Line to parse. Cannot be <c>null</c> reference.</param>\r\n            /// <param name=\"next\">Outputs new element that will follow current element. Parsing will continue using this element.</param>\r\n            /// <param name=\"lineIndex\">Index of the line within PHPDoc token.</param>\r\n            /// <param name=\"startCharIndex\">Gets index of first content character within <paramref name=\"line\"/>.</param>\r\n            /// <param name=\"endCharIndex\">Gets index of last content character within <paramref name=\"line\"/>.</param>\r\n            /// <returns>If the line can be parsed, method returns <c>true</c>.</returns>\r\n            internal static bool TryParseLine(ref string/*!*/line, out Element next, int lineIndex, out int startCharIndex, out int endCharIndex)\r\n            {\r\n                if (line == null)\r\n                    throw new ArgumentNullException(\"line\");\r\n\r\n                next = null;\r\n                startCharIndex = endCharIndex = 0;\r\n\r\n                int startIndex = 0;\r\n                while (startIndex < line.Length && char.IsWhiteSpace(line[startIndex])) startIndex++;   // skip whitespaces\r\n\r\n                // we souhldn't, but we allow first line to contain text after the /** sequence:\r\n                if (lineIndex == 0 && line.StartsWith(PhpDocStartString, StringComparison.Ordinal))\r\n                {\r\n                    startIndex = PhpDocStartString.Length - 1;  // jump to the '*' character\r\n                    Debug.Assert(line[startIndex] == PHPDocFirstChar);\r\n                }\r\n\r\n                // invalid PHPDoc line (not starting with '*'):\r\n                if (startIndex == line.Length || line[startIndex] != PHPDocFirstChar)\r\n                    return false;\r\n\r\n                // trim starting '*' and whitespaces\r\n                startIndex++;   // skip '*'\r\n                while (startIndex < line.Length && char.IsWhiteSpace(line[startIndex])) startIndex++;   // skip whitespaces\r\n\r\n                if (startIndex == line.Length)\r\n                {\r\n                    line = string.Empty;\r\n                }\r\n                else\r\n                {\r\n                    // trim end\r\n                    int endIndex = line.Length;\r\n                    while (endIndex > startIndex && char.IsWhiteSpace(line[endIndex - 1])) endIndex--;  // skip whitespaces from end\r\n                    line = line.Substring(startIndex, endIndex - startIndex).Replace(\"{@*}\", \"*/\");\r\n                }\r\n\r\n                // check \"*/\" at the end\r\n                if (line.Length == 1 && line[0] == '/')\r\n                    return false;   // empty line\r\n                if (line.Length >= 2 && line[line.Length - 1] == '/' && line[line.Length - 2] == '*')  // \"*/\" found at the end\r\n                    line = line.Remove(line.Length - 2);\r\n\r\n                // TODO: any whitespace sequence is converted into single space, but only outside <pre> and {} blocks\r\n                // TODO: handle \"{@tag ...}\" for @link, @see etc...\r\n\r\n                // check tags:\r\n                next = CreateElement(line);\r\n                startCharIndex = startIndex;\r\n                endCharIndex = startIndex + line.Length;\r\n\r\n                // \r\n                return true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Parses given <paramref name=\"line\"/> and updates current content.\r\n            /// </summary>\r\n            /// <param name=\"line\">Line to parse. Line is trimmed and does not start with '*'. Cannot be <c>null</c> reference.</param>\r\n            /// <param name=\"next\">Next element to continue parsing with.</param>\r\n            internal abstract void ParseLine(string/*!*/line, out Element next);\r\n\r\n            /// <summary>\r\n            /// Reads tag at the beginning of line and tries to create corresponding <see cref=\"Element\"/> instance.\r\n            /// </summary>\r\n            /// <param name=\"line\">PHPDoc comment line. Assuming the line starts with a PHPDoc tag. Otherwise, or if tag is not recognized, <c>null</c> is returned..</param>\r\n            private static Element CreateElement(string/*!*/line)\r\n            {\r\n                Debug.Assert(line != null);\r\n\r\n                if (line.Length == 0 || line[0] != PHPDocTagChar)\r\n                    return null;\r\n\r\n                // try to match known tags:\r\n                var tagInfo = FindTagInfo(line);\r\n                if (tagInfo.Key != null)\r\n                {\r\n                    Debug.Assert(tagInfo.Value != null);\r\n                    \r\n                    // initialize new tag element\r\n                    return tagInfo.Value(tagInfo.Key, line);\r\n                }\r\n                \r\n                // unrecognized tag:\r\n                return null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Returns <c>true</c> if current element does not contain any information and can be ignored.\r\n            /// </summary>\r\n            internal virtual bool IsEmpty { get { return false; } }\r\n\r\n            /// <summary>\r\n            /// Called when parsing of this element ended.\r\n            /// </summary>\r\n            internal virtual void OnEndParsing() { }\r\n\r\n            #endregion\r\n        }\r\n\r\n        /// <summary>\r\n        /// Short description.\r\n        /// </summary>\r\n        public sealed class ShortDescriptionElement : Element\r\n        {\r\n            /// <summary>\r\n            /// Character defining the end of PHPDoc short description.\r\n            /// </summary>\r\n            private const char EndChar = '.';\r\n\r\n            public string Text { get; private set; }\r\n\r\n            public ShortDescriptionElement()\r\n            {\r\n\r\n            }\r\n\r\n            internal override void ParseLine(string/*!*/line, out Element next)\r\n            {\r\n                next = null;\r\n\r\n                // ignore first line of length 0 (empty space after /**)\r\n                if (this.Text == null && string.IsNullOrWhiteSpace(line))\r\n                    return;\r\n\r\n                // Short Description can be followed by Long Description.\r\n                // It can be only 3 lines long, otherwise only the first line is taken\r\n                // It is terminated by empty line or a dot.\r\n\r\n                if (this.Text != null && (this.Text.LastCharacter() == (int)EndChar))\r\n                {\r\n                    next = new LongDescriptionElement(line);\r\n                }\r\n                else if (line.Length == 0)\r\n                {\r\n                    next = new LongDescriptionElement(null);\r\n                }\r\n                else if (this.Text.CharsCount('\\n') >= 2)\r\n                {\r\n                    // short description has already 3 lines,\r\n                    // only first line is taken, the rest is for LongDescriptionElement\r\n                    int firstLineEndIndex = this.Text.IndexOf('\\n');\r\n                    Debug.Assert(firstLineEndIndex != -1);\r\n\r\n                    next = new LongDescriptionElement(this.Text.Substring(firstLineEndIndex + 1) + NewLineString + line);\r\n                    this.Text = this.Text.Remove(firstLineEndIndex);\r\n                }\r\n                else\r\n                {\r\n                    this.Text = (this.Text != null) ? (this.Text + NewLineString + line) : line;\r\n                }\r\n            }\r\n\r\n            internal override bool IsEmpty { get { return string.IsNullOrWhiteSpace(this.Text); } }\r\n\r\n            internal override void OnEndParsing()\r\n            {\r\n                base.OnEndParsing();\r\n                if (this.Text != null)\r\n                    this.Text = this.Text.Trim();\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return this.Text ?? string.Empty;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Long description.\r\n        /// </summary>\r\n        public sealed class LongDescriptionElement : Element\r\n        {\r\n            public string Text { get; private set; }\r\n\r\n            public LongDescriptionElement(string initialText)\r\n            {\r\n                this.Text = string.IsNullOrWhiteSpace(initialText) ? null : initialText;\r\n            }\r\n\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                // Long Description can only be followed by PHPDoc tag (handled in TryParseLine)\r\n\r\n                next = null;\r\n                this.Text = (this.Text != null) ? (this.Text + NewLineString + line) : line;\r\n            }\r\n\r\n            internal override bool IsEmpty { get { return string.IsNullOrWhiteSpace(this.Text); } }\r\n\r\n            internal override void OnEndParsing()\r\n            {\r\n                base.OnEndParsing();\r\n                if (this.Text != null)\r\n                    this.Text = this.Text.Trim();\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return this.Text ?? string.Empty;\r\n            }\r\n        }\r\n\r\n        public abstract class EmptyTag : Element\r\n        {\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n                // ignored\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents an abstract class, class variable or method.\r\n        /// </summary>\r\n        public sealed class AbstractTag : EmptyTag\r\n        {\r\n            public const string Name = \"@abstract\";\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents access control for an element. @access private indicates that documentation of element be prevented.\r\n        /// </summary>\r\n        public sealed class AccessTag : Element\r\n        {\r\n            public const string Name1 = \"@access\";\r\n            public const string Name2 = \"@private\";\r\n\r\n            private const string IsPublic = \"public\";\r\n            private const string IsPrivate = \"private\";\r\n            private const string IsProtected = \"protected\";\r\n\r\n            /// <summary>\r\n            /// Resolved access modifier. (public, private or protected)\r\n            /// </summary>\r\n            public PhpMemberAttributes Access { get { return attributes & PhpMemberAttributes.VisibilityMask; } }\r\n            private readonly PhpMemberAttributes attributes;\r\n\r\n            private string AccessString\r\n            {\r\n                get\r\n                {\r\n                    switch (Access)\r\n                    {\r\n                        case PhpMemberAttributes.Private: return IsPrivate;\r\n                        case PhpMemberAttributes.Protected: return IsProtected;\r\n                        default: return IsPublic;\r\n                    }\r\n                }\r\n            }\r\n\r\n            public AccessTag(string/*!*/line)\r\n            {\r\n                if (line.StartsWith(Name1))\r\n                {\r\n                    if (line.Length > Name1.Length)\r\n                    {\r\n                        var access = line.Substring(Name1.Length + 1).Trim().ToLowerInvariant();\r\n\r\n                        // public, private or protected\r\n                        switch (access)\r\n                        {\r\n                            case IsPublic: attributes = PhpMemberAttributes.Public; break;\r\n                            case IsPrivate: attributes = PhpMemberAttributes.Private; break;\r\n                            case IsProtected: attributes = PhpMemberAttributes.Protected; break;\r\n                            default:\r\n                                Debug.WriteLine(\"Unexpected access modifier in PHPDoc @access tag, line:\" + line);\r\n                                break;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        attributes = PhpMemberAttributes.Public;\r\n                    }\r\n                }\r\n                else if (line.StartsWith(Name2))\r\n                {\r\n                    attributes = PhpMemberAttributes.Private;\r\n                }\r\n                else\r\n                {\r\n                    Debug.Fail(\"Unexpected \" + line);\r\n                }\r\n            }\r\n\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n                // ignored\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name1 + \" \" + AccessString;\r\n            }\r\n        }\r\n\r\n        public abstract class SingleLineTag : Element\r\n        {\r\n            protected readonly string text;\r\n\r\n            internal SingleLineTag(string/*!*/tagName, string/*!*/line)\r\n            {\r\n                Debug.Assert(line.StartsWith(tagName));\r\n\r\n                if (line.Length > tagName.Length)\r\n                    this.text = line.Substring(tagName.Length + 1).Trim();\r\n            }\r\n\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n                // other lines are ignored\r\n            }\r\n\r\n            internal override bool IsEmpty\r\n            {\r\n                get\r\n                {\r\n                    return string.IsNullOrWhiteSpace(text);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents the author of the current element.\r\n        /// </summary>\r\n        public sealed class AuthorTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@author\";\r\n\r\n            /// <summary>\r\n            /// author name &lt;author@email&gt;\r\n            /// </summary>\r\n            public string Author { get { return text; } }\r\n\r\n            public AuthorTag(string/*!*/line)\r\n                :base(Name, line)\r\n            {\r\n                \r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Author;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents copyright information.\r\n        /// </summary>\r\n        public sealed class CopyrightTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@copyright\";\r\n\r\n            /// <summary>\r\n            /// name date\r\n            /// </summary>\r\n            public string Copyright { get { return text; } }\r\n\r\n            public CopyrightTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Copyright;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a method as deprecated.\r\n        /// </summary>\r\n        public sealed class DeprecatedTag : SingleLineTag\r\n        {\r\n            public const string Name1 = \"@deprecated\";\r\n            public const string Name2 = \"@deprec\";\r\n\r\n            /// <summary>\r\n            /// version\r\n            /// </summary>\r\n            public string Version { get { return text; } }\r\n\r\n            public DeprecatedTag(string tagName, string/*!*/line)\r\n                : base(tagName, line)\r\n            {\r\n\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name1 + \" \" + Version;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents the location of an external saved example file.\r\n        /// </summary>\r\n        public sealed class ExampleTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@example\";\r\n            \r\n            /// <summary>\r\n            /// /path/to/example\r\n            /// </summary>\r\n            public string Example { get { return text; } }\r\n\r\n            public ExampleTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Example;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents an exception thrown by a method.\r\n        /// </summary>\r\n        public sealed class ExceptionTag : TypeVarDescTag\r\n        {\r\n            public const string Name1 = \"@exception\";\r\n            public const string Name2 = \"@throws\";\r\n\r\n            /// <summary>\r\n            /// version\r\n            /// </summary>\r\n            public string Exception { get { return this.TypeNames; } }\r\n\r\n            public ExceptionTag(string tagName, string/*!*/line)\r\n                : base(tagName, line, false)\r\n            {\r\n\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name2 + \" \" + this.Exception;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents any tag in a form of \"type [$varname] [multilined-description]\".\r\n        /// </summary>\r\n        public abstract class TypeVarDescTag : Element\r\n        {\r\n            /// <summary>\r\n            /// Character separating type names within <see cref=\"TypeNames\"/> property.\r\n            /// </summary>\r\n            public const char TypeNamesSeparator = '|';\r\n\r\n            /// <summary>\r\n            /// Optional. Type names separated by '|'.\r\n            /// </summary>\r\n            public string TypeNames\r\n            {\r\n                get\r\n                {\r\n                    var names = _typeNames;\r\n                    if (names == null || names.Length == 0)\r\n                        return null;\r\n\r\n                    return string.Join(TypeNamesSeparator.ToString(), names);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Position of the <see cref=\"TypeNames\"/> information.\r\n            /// </summary>\r\n            public Span TypeNamesSpan\r\n            {\r\n                get\r\n                {\r\n                    var positions = _typeNamesPos;\r\n                    if (positions == null || positions.Length == 0)\r\n                        return Span.Invalid;\r\n                    var names = _typeNames;\r\n\r\n                    var offset = this.Span.Start;\r\n                    return Span.FromBounds(offset + positions[0], offset + positions[positions.Length - 1] + names[names.Length - 1].Length);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Array of type names. Cannot be <c>null</c>. Can be an empty array.\r\n            /// </summary>\r\n            public string[]/*!!*/TypeNamesArray { get { return _typeNames; } }\r\n            private readonly string[]/*!!*/_typeNames;\r\n\r\n            /// <summary>\r\n            /// Array of type names span within the source code.\r\n            /// </summary>\r\n            public Span[]/*!*/TypeNameSpans\r\n            {\r\n                get\r\n                {\r\n                    var positions = _typeNamesPos;\r\n                    var names = _typeNames;\r\n                    Debug.Assert(names.Length == positions.Length);\r\n                    Span[] spans = new Span[positions.Length];\r\n                    var offset = this.Span.Start;\r\n                    for (int i = 0; i < spans.Length; i++)\r\n                        spans[i] = new Span(offset + positions[i], names[i].Length);\r\n\r\n                    return spans;\r\n                }\r\n            }\r\n            private readonly int[]/*!!*/_typeNamesPos;\r\n\r\n            /// <summary>\r\n            /// Optional. Variable name, starts with '$'.\r\n            /// </summary>\r\n            public readonly string VariableName;\r\n\r\n            /// <summary>\r\n            /// Starting column of the <see cref=\"VariableName\"/> within the element.\r\n            /// </summary>\r\n            private readonly int _variableNameOffset = -1;\r\n\r\n            /// <summary>\r\n            /// Position of the <see cref=\"VariableName\"/> information.\r\n            /// </summary>\r\n            public Span VariableNameSpan\r\n            {\r\n                get\r\n                {\r\n                    if (this._variableNameOffset < 0)\r\n                        return Span.Invalid;\r\n\r\n                    Debug.Assert(this.VariableName != null);\r\n                    return new Span(this.Span.Start + this._variableNameOffset, this.VariableName.Length);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Optional. Element description.\r\n            /// </summary>\r\n            public string Description { get; private set; }\r\n\r\n            protected TypeVarDescTag(string/*!*/tagName, string/*!*/line, bool allowVariableName)\r\n            {\r\n                Debug.Assert(line.StartsWith(tagName));\r\n\r\n                // [type] [$varname] [type] [description]\r\n\r\n                int index = tagName.Length; // current index within line\r\n                \r\n                // try to find [type]\r\n                TryReadTypeName(line, ref index, out _typeNames, out _typeNamesPos);\r\n                \r\n                if (allowVariableName)\r\n                {\r\n                    // try to find [$varname]\r\n                    if (TryReadVariableName(line, ref index, out this.VariableName, out this._variableNameOffset))\r\n                    {\r\n                        // try to find [type] if it was not found yet, user may specified it after variable name\r\n                        if (_typeNames == null || _typeNames.Length == 0)\r\n                        {\r\n                            TryReadTypeName(line, ref index, out _typeNames, out _typeNamesPos);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (index < line.Length)\r\n                {\r\n                    this.Description = line.Substring(index).TrimStart(null/*default whitespace characters*/);\r\n                    if (string.IsNullOrEmpty(this.Description))\r\n                        this.Description = string.Empty;\r\n                }\r\n            }\r\n\r\n            #region Helpers\r\n\r\n            private static string NextWord(string/*!*/text, ref int index)\r\n            {   \r\n                // skip whitespaces:\r\n                while (index < text.Length && char.IsWhiteSpace(text[index]))\r\n                    index++;\r\n\r\n                // read word:\r\n                int startIndex = index;\r\n                while (index < text.Length && !char.IsWhiteSpace(text[index]))\r\n                    index++;\r\n\r\n                // cut off the word:\r\n                if (startIndex < index)\r\n                    return text.Substring(startIndex, index - startIndex);\r\n                else\r\n                    return null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Tries to recognize a type name starting at given <paramref name=\"index\"/>.\r\n            /// </summary>\r\n            /// <param name=\"text\">Source text.</param>\r\n            /// <param name=\"index\">Index within <paramref name=\"text\"/> to start read.</param>\r\n            /// <param name=\"typenames\">Resulting type name(s) separated by <c>|</c>.</param>\r\n            /// <param name=\"typenamesPos\">Type names span or invalid span.</param>\r\n            /// <returns>Whether the type name was parsed.</returns>\r\n            internal static bool TryReadTypeName(string/*!*/text, ref int index, out string[] typenames, out int[] typenamesPos)\r\n            {\r\n                // [type]\r\n                \r\n                var typenameend = index;\r\n                var typename = NextWord(text, ref typenameend);\r\n                if (IsTypeName(typename))\r\n                {\r\n                    List<int> positions = new List<int>(1);\r\n                    List<string> names = new List<string>(1);\r\n\r\n                    int typenameOffset = typenameend - typename.Length;\r\n                    index = typenameend;\r\n\r\n                    var split = typename.Split(new char[] { TypeNamesSeparator });\r\n                    int splitat = typenameOffset;\r\n                    foreach (var s in split)\r\n                    {\r\n                        if (!string.IsNullOrEmpty(s))\r\n                        {\r\n                            names.Add(s);\r\n                            positions.Add(splitat);\r\n                            splitat += s.Length;    // type name length\r\n                        }\r\n                        splitat++;  // separator\r\n                    }\r\n\r\n                    // [type] or [type]\r\n                    var orend = typenameend;\r\n                    var or = NextWord(text, ref orend);\r\n                    if (or == \"or\")\r\n                    {\r\n                        var nextend = orend;\r\n                        var next = NextWord(text, ref nextend);\r\n                        if (IsTypeName(next) && next.IndexOf(TypeNamesSeparator) == -1)\r\n                        {\r\n                            index = nextend;\r\n                            names.Add(next);\r\n                            positions.Add(nextend - next.Length);\r\n                        }\r\n                    }\r\n\r\n                    typenames = names.ToArray();\r\n                    typenamesPos = positions.ToArray();\r\n                    return true;\r\n                }\r\n\r\n                //\r\n                typenames = EmptyArray<string>.Instance;\r\n                typenamesPos = EmptyArray<int>.Instance;\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// tries to read a variable name starting at given <paramref name=\"index\"/>.\r\n            /// </summary>\r\n            /// <param name=\"text\">Source text.</param>\r\n            /// <param name=\"index\">Index within <paramref name=\"text\"/> to start read.</param>\r\n            /// <param name=\"variableName\">Result variable name.</param>\r\n            /// <param name=\"variableNameOffset\">Variable name start index within text.</param>\r\n            /// <returns>Whether the variable name was parsed.</returns>\r\n            private static bool TryReadVariableName(string/*!*/text, ref int index, out string variableName, out int variableNameOffset)\r\n            {\r\n                var wordend = index;\r\n                var word = NextWord(text, ref wordend);\r\n                if (word != null /* => word.Length != 0 */ && word[0] == '$')\r\n                {\r\n                    index = wordend;\r\n                    variableName = word;\r\n                    variableNameOffset = wordend - word.Length;\r\n                    return true;\r\n                }\r\n\r\n                variableName = null;\r\n                variableNameOffset = -1;\r\n                return false;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Checks whether given <paramref name=\"str\"/> may be a type name.\r\n            /// </summary>\r\n            /// <param name=\"str\">String to check.</param>\r\n            /// <returns>Whether given string may be a PHP type name.</returns>\r\n            internal static bool IsTypeName(string str)\r\n            {\r\n                if (string.IsNullOrEmpty(str))\r\n                    return false;\r\n\r\n                if (str[0] != '_' && !char.IsLetter(str[0]) && str[0] != QualifiedName.Separator)\r\n                    return false;\r\n\r\n                for (int i = 1; i < str.Length; i++)\r\n                {\r\n                    char c = str[i];\r\n                    if (c != '_' && !char.IsLetterOrDigit(c) && c != '[' && c != ']' && c != TypeNamesSeparator && c != QualifiedName.Separator)\r\n                        return false;\r\n                }\r\n\r\n                // ok\r\n                return true;\r\n            }\r\n\r\n            #endregion\r\n\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n\r\n                // add the line into description:\r\n                Description = string.IsNullOrWhiteSpace(Description) ? line : (Description + NewLineString + line);\r\n            }\r\n\r\n            internal override void OnEndParsing()\r\n            {\r\n                base.OnEndParsing();\r\n\r\n                if (string.IsNullOrWhiteSpace(this.Description))\r\n                    this.Description = null;\r\n                else\r\n                    this.Description = this.Description.Trim();\r\n\r\n                // TODO: compress TypeNames, VariableName, Description\r\n            }\r\n\r\n            internal override bool IsEmpty\r\n            {\r\n                get\r\n                {\r\n                    return _typeNames.Length == 0 && string.IsNullOrEmpty(this.VariableName) && string.IsNullOrWhiteSpace(this.Description);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a global variable or its use in a function or method.\r\n        /// @global\ttype $globalvarname\r\n        /// </summary>\r\n        public sealed class GlobalTag : TypeVarDescTag\r\n        {\r\n            public const string Name = \"@global\";\r\n\r\n            public GlobalTag(string/*!*/line)\r\n                :base(Name, line, true)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                string result = Name;\r\n\r\n                var type = this.TypeNames;\r\n                if (type != null)\r\n                    result += \" \" + type;\r\n\r\n                var varname = this.VariableName;\r\n                if (varname != null)\r\n                    result += \" \" + varname;\r\n                \r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Prevents the documentation of an element.\r\n        /// </summary>\r\n        public sealed class IgnoreTag : EmptyTag\r\n        {\r\n            public const string Name = \"@ignore\";\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name;\r\n            }\r\n        }\r\n\r\n        public abstract class TextTag : Element\r\n        {\r\n            /// <summary>\r\n            /// Tag text information.\r\n            /// </summary>\r\n            public string Text { get; private set; }\r\n\r\n            public TextTag(string/*!*/tagName, string/*!*/line)\r\n            {\r\n                Debug.Assert(line.StartsWith(tagName));\r\n                int index = tagName.Length;\r\n\r\n                if (index < line.Length)\r\n                {\r\n                    var c = line[index];\r\n                    if (c == ':' || c == '(' || c == ';' || c == '.') index++;\r\n                }\r\n\r\n                // trim leading whitespaces\r\n                while (index < line.Length && char.IsWhiteSpace(line[index]))\r\n                    index++;\r\n\r\n                this.Text = (index < line.Length) ? line.Substring(index) : string.Empty;\r\n            }\r\n\r\n            internal override void  ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n                this.Text = string.IsNullOrEmpty(this.Text) ? line : (this.Text + NewLineString + line);\r\n            }\r\n\r\n            internal override void OnEndParsing()\r\n            {\r\n                base.OnEndParsing();\r\n\r\n                if (string.IsNullOrWhiteSpace(this.Text))\r\n                    this.Text = string.Empty;\r\n                else\r\n                    this.Text = this.Text.Trim();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Represents an unknown PHPDoc tag followed by text.\r\n        /// </summary>\r\n        public sealed class UnknownTextTag : TextTag\r\n        {\r\n            /// <summary>\r\n            /// Tag name.\r\n            /// </summary>\r\n            public string TagName { get; private set; }\r\n\r\n            internal UnknownTextTag(string tagName, string/*!*/line)\r\n                : base(tagName, line)\r\n            {\r\n                this.TagName = tagName;\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return string.IsNullOrEmpty(Text) ? (TagName) : (TagName + \" \" + Text);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Private information for advanced developers.\r\n        /// </summary>\r\n        public sealed class InternalTag : TextTag\r\n        {\r\n            public const string Name = \"@internal\";\r\n\r\n            public InternalTag(string/*!*/line)\r\n                :base(Name, line)\r\n            {                \r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Text;\r\n            }\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// URL information.\r\n        ///// </summary>\r\n        //public sealed class LinkTag : SingleLineTag\r\n        //{\r\n        //    public const string Name = \"@link\";\r\n\r\n        //    /// <summary>\r\n        //    /// URL\r\n        //    /// </summary>\r\n        //    public string Url { get { return this.text; } }\r\n\r\n        //    public LinkTag(string/*!*/line)\r\n        //        :base(Name, line)\r\n        //    {\r\n\r\n        //    }\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Specifies an alias for a variable. For example, $GLOBALS['myvariable'] becomes $myvariable.\r\n        /// </summary>\r\n        public sealed class NameTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@name\";\r\n\r\n            /// <summary>\r\n            /// Variable name. Empty string or a name starting with '$' character.\r\n            /// </summary>\r\n            public string VariableName { get { return string.IsNullOrEmpty(this.text) ? string.Empty : ((this.text[0] == '$') ? this.text : ('$' + this.text)); } }\r\n\r\n            public NameTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n                \r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// phpdoc.de compatibility \"phpDocumentor tags\".\r\n        /// </summary>\r\n        public sealed class MagicTag : EmptyTag\r\n        {\r\n            public const string Name = \"@magic\";\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a group of related classes and functions.\r\n        /// </summary>\r\n        public sealed class PackageTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@package\";\r\n\r\n            /// <summary>\r\n            /// Name of the package.\r\n            /// </summary>\r\n            public string PackageName { get { return this.text; } }\r\n\r\n            public PackageTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a group of related classes and functions within a package.\r\n        /// </summary>\r\n        public sealed class SubPackageTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@subpackage\";\r\n\r\n            /// <summary>\r\n            /// Name of the sub-package.\r\n            /// </summary>\r\n            public string SubPackageName { get { return this.text; } }\r\n\r\n            public SubPackageTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a parameter.\r\n        /// @param type [$varname] description\r\n        /// </summary>\r\n        public sealed class ParamTag : TypeVarDescTag\r\n        {\r\n            public const string Name = \"@param\";\r\n\r\n            public ParamTag(string/*!*/line)\r\n                : base(Name, line, true)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                StringBuilder result = new StringBuilder(Name, Name.Length + ((this.Description != null) ? this.Description.Length : 0) + 16);\r\n\r\n                if (this.TypeNames != null)\r\n                {\r\n                    result.Append(' ');\r\n                    result.Append(this.TypeNames);\r\n                }\r\n                if (this.VariableName != null)\r\n                {\r\n                    result.Append(' ');\r\n                    result.Append(this.VariableName);\r\n                }\r\n                if (this.Description != null)\r\n                {\r\n                    result.Append(' ');\r\n                    result.Append(this.Description);\r\n                }\r\n                //\r\n                return result.ToString();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents function return value. This tag should not be used for constructors or methods defined with a void return type\r\n        /// @return type [description]\r\n        /// </summary>\r\n        public sealed class ReturnTag : TypeVarDescTag\r\n        {\r\n            public const string Name = \"@return\";\r\n\r\n            public ReturnTag(string/*!*/line)\r\n                : base(Name, line, false)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + TypeNames + NewLineString + Description;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents an association to any element (global variable, include, page, class, function, define, method, variable).\r\n        /// </summary>\r\n        public sealed class SeeTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@see\";\r\n\r\n            /// <summary>\r\n            /// element\r\n            /// </summary>\r\n            public string ElementName { get { return this.text; } }\r\n\r\n            public SeeTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents when a method was added to a class.\r\n        /// </summary>\r\n        public sealed class SinceTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@since\";\r\n\r\n            /// <summary>\r\n            /// version\r\n            /// </summary>\r\n            public string Version { get { return this.text; } }\r\n\r\n            public SinceTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a static class or method.\r\n        /// </summary>\r\n        public sealed class StaticTag : EmptyTag\r\n        {\r\n            public const string Name = \"@static\";\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a static variable's use in a function or class.\r\n        /// </summary>\r\n        public sealed class StaticVarTag : TypeVarDescTag\r\n        {\r\n            public const string Name = \"@staticvar\";\r\n\r\n            public StaticVarTag(string/*!*/line)\r\n                :base(Name, line, false)\r\n            {\r\n\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + this.TypeNames;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents things that need to be done to the code at a later date.\r\n        /// </summary>\r\n        public sealed class TodoTag : TextTag\r\n        {\r\n            public const string Name = \"@todo\";\r\n\r\n            public TodoTag(string/*!*/line)\r\n                :base(Name, line)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Text;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a link to an external source.\r\n        /// </summary>\r\n        public sealed class LinkTag : TextTag\r\n        {\r\n            public const string Name = \"@link\";\r\n\r\n            public LinkTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Text;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Documents a license information.\r\n        /// </summary>\r\n        public sealed class LicenseTag : TextTag\r\n        {\r\n            public const string Name = \"@license\";\r\n\r\n            public LicenseTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + Text;\r\n            }\r\n        }\r\n\r\n        public sealed class VarTag : TypeVarDescTag\r\n        {\r\n            public const string Name = \"@var\";\r\n\r\n            public VarTag(string/*!*/line)\r\n                : base(Name, line, true)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + this.TypeNames;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Dynamic property description within a class.\r\n        /// </summary>\r\n        public sealed class PropertyTag : TypeVarDescTag\r\n        {\r\n            public const string Name1 = \"@property\";\r\n            public const string Name2 = \"@property-read\";\r\n            public const string Name3 = \"@property-write\";\r\n\r\n            public PropertyTag(string tagName, string/*!*/line)\r\n                : base(tagName, line, true)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name1 + \" \" + this.TypeNames;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Dynamic method description within a class.\r\n        /// </summary>\r\n        public sealed class MethodTag : Element\r\n        {\r\n            public const string Name = \"@method\";\r\n\r\n            /// <summary>\r\n            /// Optional. Type names separated by '|'.\r\n            /// </summary>\r\n            public string TypeNames\r\n            {\r\n                get\r\n                {\r\n                    var names = _typeNames;\r\n                    if (names == null || names.Length == 0)\r\n                        return null;\r\n\r\n                    return string.Join(TypeVarDescTag.TypeNamesSeparator.ToString(), names);\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Array of type names. Cannot be <c>null</c>. Can be an empty array.\r\n            /// </summary>\r\n            public string[]/*!!*/TypeNamesArray { get { return _typeNames; } }\r\n            private readonly string[]/*!*/_typeNames;\r\n\r\n            /// <summary>\r\n            /// Array of type names span within the source code.\r\n            /// </summary>\r\n            public Span[]/*!*/TypeNameSpans\r\n            {\r\n                get\r\n                {\r\n                    var positions = _typeNamesPos;\r\n                    var names = _typeNames;\r\n                    Debug.Assert(names.Length == positions.Length);\r\n                    Span[] spans = new Span[positions.Length];\r\n                    var offset = this.Span.Start;\r\n                    for (int i = 0; i < spans.Length; i++)\r\n                        spans[i] = new Span(offset + positions[i], names[i].Length);\r\n\r\n                    return spans;\r\n                }\r\n            }\r\n            private readonly int[]/*!*/_typeNamesPos;\r\n\r\n            /// <summary>\r\n            /// Array of method parameters;\r\n            /// </summary>\r\n            public readonly AST.FormalParam[]/*!*/Parameters;\r\n\r\n            /// <summary>\r\n            /// Method name.\r\n            /// </summary>\r\n            public readonly string MethodName;\r\n\r\n            /// <summary>\r\n            /// Span within the source code of the method name.\r\n            /// </summary>\r\n            public Span MethodNameSpan\r\n            {\r\n                get\r\n                {\r\n                    var pos = _methodNamePos;\r\n                    if (pos < 0)\r\n                        return Span.Invalid;\r\n                    Debug.Assert(MethodName != null);\r\n                    return new Span(pos + this.Span.Start, this.MethodName.Length);\r\n                }            \r\n            }\r\n            private readonly int _methodNamePos;\r\n\r\n            /// <summary>\r\n            /// Optional. Element description.\r\n            /// </summary>\r\n            public string Description { get; private set; }\r\n\r\n            public MethodTag(string/*!*/tagName, string/*!*/line)\r\n            {\r\n                Debug.Assert(line.StartsWith(tagName));\r\n\r\n                _methodNamePos = -1;\r\n\r\n                // [type] [name()] [name(params ...)] [description]\r\n\r\n                int index = tagName.Length; // current index within line\r\n                int descStart = index;  // start of description, moved when [type] or [name] found\r\n\r\n                // try to find [type]\r\n                TypeVarDescTag.TryReadTypeName(line, ref index, out _typeNames, out _typeNamesPos);\r\n\r\n                descStart = index;\r\n                string word = NextWord(line, ref index);\r\n\r\n                // [name()]\r\n                if (word != null && word.EndsWith(\"()\", StringComparison.Ordinal))\r\n                {\r\n                    this.MethodName = word.Remove(word.Length - 2);\r\n                    _methodNamePos = index - word.Length;\r\n                    descStart = index;\r\n                    word = NextWord(line, ref index);\r\n                }\r\n\r\n                // [name(params ...)]\r\n                while (descStart < line.Length && char.IsWhiteSpace(line[descStart]))\r\n                    descStart++;    // skip whitespaces\r\n\r\n                this.Parameters = null;\r\n                \r\n                int nameStart = descStart;\r\n                int paramsFrom = -1;\r\n                // skip [name]\r\n                while (descStart < line.Length && char.IsLetterOrDigit(line[descStart]))\r\n                    descStart++;\r\n\r\n                // parse parameters\r\n                if (descStart < line.Length && line[descStart] == '(')\r\n                {\r\n                    paramsFrom = descStart;\r\n                    if (nameStart < paramsFrom)\r\n                    {\r\n                        if (this.MethodName == null)\r\n                            this.MethodName = line.Substring(nameStart, paramsFrom - nameStart);\r\n                        _methodNamePos = nameStart;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    descStart = nameStart;\r\n                }\r\n\r\n                if (string.IsNullOrEmpty(this.MethodName))\r\n                    return;\r\n\r\n                if (paramsFrom > 0 && paramsFrom < line.Length && line[paramsFrom] == '(')\r\n                {\r\n                    // \"name(\" found\r\n                    int paramsEnd = line.IndexOf(')', paramsFrom);\r\n                    if (paramsEnd > 0)\r\n                    {\r\n                        descStart = paramsEnd + 1;\r\n                        string[] paramsDecl = line.Substring(paramsFrom + 1, paramsEnd - paramsFrom - 1).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\r\n                        if (paramsDecl != null && paramsDecl.Length > 0)\r\n                        {\r\n                            this.Parameters = new AST.FormalParam[paramsDecl.Length];\r\n                            for (int i = 0; i < paramsDecl.Length; i++)\r\n                                this.Parameters[i] = ParseParam(paramsDecl[i]);\r\n                        }\r\n                    }\r\n                }\r\n                if (this.Parameters == null) this.Parameters = EmptyArray<AST.FormalParam>.Instance;\r\n\r\n                if (descStart < line.Length)\r\n                    this.Description = line.Substring(descStart).TrimStart(null/*default whitespace characters*/);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Parses parameter description in a form of [type][$name][=initializer].\r\n            /// </summary>\r\n            /// <param name=\"paramDecl\"></param>\r\n            /// <returns></returns>\r\n            private static AST.FormalParam/*!*/ParseParam(string/*!*/paramDecl)\r\n            {\r\n                Debug.Assert(!string.IsNullOrEmpty(paramDecl));\r\n                \r\n                string typehint = null;\r\n                string paramname = null;\r\n                bool byref = false;\r\n                \r\n                int i = 0;\r\n                var word = NextWord(paramDecl, ref i);\r\n                if (word != null)\r\n                {\r\n                    // [type]\r\n                    if (word.Length > 0 && word[0] != '$')\r\n                    {\r\n                        typehint = word;\r\n                        word = NextWord(paramDecl, ref i);\r\n                    }\r\n\r\n                    // [$name][=initializer]\r\n                    if (word != null && word.Length > 0 && word[0] == '$')\r\n                    {\r\n                        int eqIndex = word.IndexOf('=');\r\n                        paramname = ((eqIndex == -1) ? word : word.Remove(eqIndex));\r\n\r\n                        byref = paramname.IndexOf('&') != -1;\r\n                        paramname = paramname.TrimStart(new char[]{ '$', '&'});\r\n                    }\r\n                }\r\n\r\n                return new AST.FormalParam(\r\n                    Text.Span.Invalid, paramname, typehint,\r\n                    byref ? AST.FormalParam.Flags.IsByRef : AST.FormalParam.Flags.Default,\r\n                    null, null);\r\n            }\r\n\r\n            #region Helpers\r\n\r\n            private static string NextWord(string/*!*/text, ref int index)\r\n            {   \r\n                // skip whitespaces:\r\n                while (index < text.Length && char.IsWhiteSpace(text[index]))\r\n                    index++;\r\n\r\n                // read word:\r\n                int startIndex = index;\r\n                while (index < text.Length && !char.IsWhiteSpace(text[index]))\r\n                    index++;\r\n\r\n                // cut off the word:\r\n                if (startIndex < index)\r\n                    return text.Substring(startIndex, index - startIndex);\r\n                else\r\n                    return null;\r\n            }\r\n\r\n            #endregion\r\n\r\n            internal override void ParseLine(string line, out Element next)\r\n            {\r\n                next = null;\r\n\r\n                // add the line into description:\r\n                Description = string.IsNullOrWhiteSpace(Description) ? line : (Description + NewLineString + line);\r\n            }\r\n\r\n            internal override void OnEndParsing()\r\n            {\r\n                base.OnEndParsing();\r\n\r\n                if (string.IsNullOrWhiteSpace(this.Description))\r\n                    this.Description = null;\r\n                else\r\n                    this.Description = this.Description.Trim();\r\n            }\r\n\r\n            internal override bool IsEmpty\r\n            {\r\n                get\r\n                {\r\n                    return _typeNames.Length == 0 && string.IsNullOrEmpty(this.MethodName) && string.IsNullOrWhiteSpace(this.Description);\r\n                }\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + this.MethodName + \"()\\n\" + this.Description;\r\n            }\r\n        }\r\n\r\n        public sealed class VersionTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@version\";\r\n\r\n            public string Version { get { return this.text; } }\r\n\r\n            public VersionTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + this.Version;\r\n            }\r\n        }\r\n\r\n        public sealed class TestTag : EmptyTag\r\n        {\r\n            public const string Name = \"@test\";\r\n\r\n            public TestTag(string/*!*/line)\r\n                : base()\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name;\r\n            }\r\n        }\r\n\r\n        public sealed class GroupTag : SingleLineTag\r\n        {\r\n            public const string Name = \"@group\";\r\n\r\n            public string Group { get { return this.text; } }\r\n\r\n            public GroupTag(string/*!*/line)\r\n                : base(Name, line)\r\n            {\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return Name + \" \" + this.Group;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        /// <summary>\r\n        /// Empty singleton <see cref=\"Element\"/> array.\r\n        /// </summary>\r\n        private static Element[]/*!*/EmptyElements { get { return EmptyArray<Element>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Original PHPDoc text, including comment tags.\r\n        /// </summary>\r\n        /// <remarks>Used internally for lazy initialization.</remarks>\r\n        private string _docCommentString;\r\n\r\n        /// <summary>\r\n        /// Parsed data. Lazily initialized.\r\n        /// </summary>\r\n        private Element[] elements;\r\n\r\n        /// <summary>\r\n        /// Elements within the PHPDoc block. Some elements may be ignored due to missing information.\r\n        /// Cannot be <c>null</c> reference.\r\n        /// </summary>\r\n        public Element[]/*!*/Elements\r\n        {\r\n            get\r\n            {\r\n                if (this.elements == null)\r\n                    lock (this)\r\n                        if (this.elements == null)  // double checked lock\r\n                        {\r\n                            var elementsList = ParseNoLock(this._docCommentString, this.Span.Start);\r\n                            if (elementsList != null && elementsList.Count > 0)\r\n                                this.elements = elementsList.ToArray();\r\n                            else\r\n                                this.elements = EmptyElements;\r\n\r\n                            // dispose the string\r\n                            this._docCommentString = null;\r\n                        }\r\n                \r\n                return this.elements;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Initialization\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of <see cref=\"PHPDocBlock\"/>.\r\n        /// </summary>\r\n        /// <param name=\"doccomment\">PHPDoc token content.</param>\r\n        /// <param name=\"span\">Position of the comment in the source code.</param>\r\n        public PHPDocBlock(string doccomment, Span span)\r\n            :base(span)\r\n        {\r\n            this._docCommentString = doccomment;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses given <paramref name=\"doccomment\"/> into a list of <see cref=\"Element\"/> instances.\r\n        /// </summary>\r\n        /// <param name=\"doccomment\">Content of the PHPDoc token.</param>\r\n        /// <param name=\"offset\">Start position of <paramref name=\"doccomment\"/> within the source code.</param>\r\n        private static List<Element>/*!*/ParseNoLock(string/*!*/doccomment, int offset)\r\n        {\r\n            Debug.Assert(doccomment != null);\r\n\r\n            // initialize line endings information\r\n            var/*!*/lineBreaks = Text.LineBreaks.Create(doccomment);\r\n\r\n            //\r\n            var result = new List<Element>();\r\n            Element tmp;\r\n            \r\n            Element/*!*/current = new ShortDescriptionElement();\r\n            current.Span = Span.Invalid;\r\n\r\n            for (int lineIndex = 0; lineIndex < lineBreaks.LinesCount; lineIndex++)\r\n            {\r\n                var lineSpan = lineBreaks.GetLineSpan(lineIndex);\r\n                string/*!*/line = lineSpan.GetText(doccomment);\r\n                \r\n                int startCharIndex, endCharIndex;\r\n                if (Element.TryParseLine(ref line, out tmp, lineIndex, out startCharIndex, out endCharIndex))    // validate the line, process tags\r\n                {\r\n                    Debug.Assert(line != null);\r\n                    \r\n                    if (tmp == null)    // no new element created\r\n                    {\r\n                        // pass the line into the current element\r\n                        current.ParseLine(line, out tmp);\r\n\r\n                        // update position of the element\r\n                        if (current.Span.IsValid == false)      // ShortDescriptionElement has not initialized Span\r\n                        {\r\n                            if (!current.IsEmpty)   // initialize Start iff element has some text\r\n                                current.Span = new Span(offset + lineSpan.Start + startCharIndex, endCharIndex - startCharIndex);\r\n                        }\r\n                        else                                    // other elements has to update their end position\r\n                        {\r\n                            if (tmp != null)\r\n                                current.Span = new Span(current.Span.Start, offset + lineSpan.Start + endCharIndex - current.Span.Start);   // update its end position                        \r\n                        }\r\n                    }\r\n\r\n                    if (tmp != null)    // new element created, it is already initialized with the current line\r\n                    {\r\n                        if (!current.IsEmpty)\r\n                        {\r\n                            current.OnEndParsing();\r\n                            result.Add(current);\r\n                        }\r\n\r\n                        tmp.Span = new Span(offset + lineSpan.Start + startCharIndex, endCharIndex - startCharIndex);\r\n                        current = tmp;  // it is current element from now\r\n                    }\r\n                }\r\n            }\r\n\r\n            // add the last found element\r\n            if (!current.IsEmpty)\r\n            {\r\n                current.OnEndParsing();\r\n                result.Add(current);\r\n            }\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper access methods\r\n\r\n        public T GetElement<T>()  where T: Element\r\n        {\r\n            var elements = this.Elements;\r\n            for (int i = 0; i < elements.Length; i++)\r\n                if (elements[i] is T)\r\n                    return (T)elements[i];\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Enumerate all the '@param' tags.\r\n        /// </summary>\r\n        public IEnumerable<ParamTag> Params\r\n        {\r\n            get\r\n            {\r\n                return this.Elements.OfType<ParamTag>();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets '@return' tag or <c>null</c>.\r\n        /// </summary>\r\n        public ReturnTag Returns\r\n        {\r\n            get\r\n            {\r\n                return GetElement<ReturnTag>();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether the PHPDoc block contains '@ignore' tag.\r\n        /// </summary>\r\n        public bool IsIgnored\r\n        {\r\n            get\r\n            {\r\n                return GetElement<IgnoreTag>() != null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets short description or <c>null</c>.\r\n        /// </summary>\r\n        public string ShortDescription\r\n        {\r\n            get\r\n            {\r\n                var tag = GetElement<ShortDescriptionElement>();\r\n                return (tag != null) ? tag.Text : null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets long description or <c>null</c>.\r\n        /// </summary>\r\n        public string LongDescription\r\n        {\r\n            get\r\n            {\r\n                var tag = GetElement<LongDescriptionElement>();\r\n                return (tag != null) ? tag.Text : null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets whole description, as a concatenation of <see cref=\"ShortDescription\"/> and <see cref=\"LongDescription\"/>.\r\n        /// </summary>\r\n        public string Summary\r\n        {\r\n            get\r\n            {\r\n                var shortdesc = ShortDescription;\r\n                var longdesc = LongDescription;\r\n\r\n                if (shortdesc != null || longdesc != null)\r\n                {\r\n                    if (string.IsNullOrEmpty(shortdesc))\r\n                        return longdesc;\r\n\r\n                    if (string.IsNullOrEmpty(longdesc))\r\n                        return shortdesc;\r\n\r\n                    return shortdesc + \"\\n\" + longdesc;\r\n                }\r\n\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets '@access' value or 'Public' if no such tag is found.\r\n        /// </summary>\r\n        public PhpMemberAttributes Access\r\n        {\r\n            get\r\n            {\r\n                var access = GetElement<AccessTag>();\r\n                return (access != null) ? access.Access : PhpMemberAttributes.Public;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reconstructs PHPDoc block from parsed elements, including comment tags.\r\n        /// </summary>\r\n        public string PHPDocPreview\r\n        {\r\n            get\r\n            {\r\n                var result = new StringBuilder();\r\n                result.AppendLine(\"/**\");\r\n\r\n                foreach (var element in this.Elements)\r\n                {\r\n                    var str = element.ToString();\r\n                    if (str == null) continue;\r\n\r\n                    foreach (var line in str.Split('\\n'))\r\n                    {\r\n                        result.Append(\" * \");\r\n                        result.AppendLine(line);\r\n                    }\r\n\r\n                }\r\n                result.Append(\" */\");\r\n\r\n                return result.ToString();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ToString\r\n\r\n        /// <summary>\r\n        /// Returns summary of PHPDoc.\r\n        /// </summary>\r\n        public override string ToString()\r\n        {\r\n            return this.Summary;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region LangElement\r\n\r\n        public override void VisitMe(AST.TreeVisitor visitor)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    internal static class PHPDocBlockHelper\r\n    {\r\n        /// <summary>\r\n        /// Gets <see cref=\"PHPDocBlock\"/> associated with <paramref name=\"properties\"/>.\r\n        /// </summary>\r\n        public static PHPDocBlock GetPHPDoc(this IPropertyCollection/*!*/properties)\r\n        {\r\n            return properties.GetProperty<PHPDocBlock>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets <see cref=\"PHPDocBlock\"/> to <paramref name=\"properties\"/>.\r\n        /// </summary>\r\n        public static void SetPHPDoc(this IPropertyCollection/*!*/properties, PHPDocBlock phpdoc)\r\n        {\r\n            if (phpdoc != null)\r\n            {\r\n                properties.SetProperty<PHPDocBlock>(phpdoc);\r\n\r\n                // remember LangElement associated with phpdoc\r\n                var element = properties as AST.LangElement;\r\n                if (element != null)\r\n                    phpdoc.SetProperty<AST.LangElement>(element);\r\n            }\r\n            else\r\n            {\r\n                properties.RemoveProperty<PHPDocBlock>();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Convert.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Diagnostics;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n    public static class Convert\r\n    {\r\n        /// <summary>\r\n        /// Converts a character to a digit.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character [0-9A-Za-z].</param>\r\n        /// <returns>The digit represented by the character or <see cref=\"Int32.MaxValue\"/> \r\n        /// on non-alpha-numeric characters.</returns>\r\n        public static int AlphaNumericToDigit(char c)\r\n        {\r\n            if (c >= '0' && c <= '9')\r\n                return (int)(c - '0');\r\n\r\n            if (c >= 'a' && c <= 'z')\r\n                return (int)(c - 'a') + 10;\r\n\r\n            if (c >= 'A' && c <= 'Z')\r\n                return (int)(c - 'A') + 10;\r\n\r\n            return Int32.MaxValue;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a character to a digit.\r\n        /// </summary>\r\n        /// <param name=\"c\">The character [0-9].</param>\r\n        /// <returns>The digit represented by the character or <see cref=\"Int32.MaxValue\"/> \r\n        /// on non-numeric characters.</returns>\r\n        public static int NumericToDigit(char c)\r\n        {\r\n            if (c >= '0' && c <= '9')\r\n                return (int)(c - '0');\r\n\r\n            return Int32.MaxValue;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Parsers/DocCommentList.cs",
    "content": "﻿using PHP.Core.AST;\r\nusing PHP.Core.Text;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n    /// <summary>\r\n    /// Helper class containing list of DOC comments during tokenization.\r\n    /// Provides searching for DOC comment above given position.\r\n    /// </summary>\r\n    internal class DocCommentList\r\n    {\r\n        private struct DocInfo\r\n        {\r\n            /// <summary>\r\n            /// DOC comment instance.\r\n            /// </summary>\r\n            public PHPDocBlock PhpDoc;\r\n\r\n            /// <summary>\r\n            /// DOC comment span including following whitespace.\r\n            /// </summary>\r\n            public Span Extent;\r\n        }\r\n\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Ordered list of DOC comments. Can be <c>null</c>.\r\n        /// </summary>\r\n        private List<DocInfo> _doclist;\r\n\r\n        /// <summary>\r\n        /// Extent of included DOC comments span.\r\n        /// </summary>\r\n        public Span Extent { get { return _span; } }\r\n        private Span _span = Span.Invalid;\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Inserts DOC block into the list.\r\n        /// </summary>\r\n        public void AppendBlock(PHPDocBlock/*!*/phpDoc, int endPosition)\r\n        {\r\n            Debug.Assert(phpDoc != null);\r\n            Debug.Assert(endPosition >= phpDoc.Span.End);\r\n            Debug.Assert(_doclist == null || _doclist.Count == 0 || _doclist.Last().Extent.Start < phpDoc.Span.Start, \"Blocks have to be appended in order.\");\r\n\r\n            var docinfo = new DocInfo()\r\n            {\r\n                PhpDoc = phpDoc,\r\n                Extent = Span.FromBounds(phpDoc.Span.Start, endPosition)\r\n            };\r\n\r\n            var list = _doclist;\r\n            if (list == null)\r\n            {\r\n                _doclist = list = new List<DocInfo>(4);\r\n            }\r\n            \r\n            list.Add(docinfo);\r\n\r\n            _span = Span.FromBounds(list[0].Extent.Start, list.Last().Extent.End);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds DOC comment above given position, removes it from the internal list and returns its reference.\r\n        /// </summary>\r\n        public bool TryReleaseBlock(int position, out PHPDocBlock phpdoc)\r\n        {\r\n            var index = this.FindIndex(position - 1);\r\n            if (index >= 0)\r\n            {\r\n                var list = _doclist;\r\n                phpdoc = list[index].PhpDoc;\r\n                list.RemoveAt(index);\r\n                this.UpdateSpan();\r\n\r\n                //\r\n                return true;\r\n            }\r\n\r\n            //\r\n            phpdoc = null;\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds DOC comment at given position and annotates statement with it.\r\n        /// </summary>\r\n        public void Annotate(IDeclarationElement element)\r\n        {\r\n            Annotate((LangElement)element, element.EntireDeclarationSpan.Start);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Merges DOC comments into the list of statements.\r\n        /// </summary>\r\n        /// <param name=\"extent\">Span of code block containing <paramref name=\"stmts\"/>.</param>\r\n        /// <param name=\"stmts\">List of statements to be merged with overlapping DOC comments.</param>\r\n        public void Merge(Text.Span extent, IList<Statement>/*!*/stmts)\r\n        {\r\n            Debug.Assert(extent.IsValid);\r\n            Debug.Assert(stmts != null);\r\n\r\n            if (_span.OverlapsWith(extent))\r\n            {\r\n                var list = _doclist;\r\n                int insertAt = 0;\r\n                int count = 0;\r\n\r\n                DocInfo doc;\r\n                int indexFrom = FindFirstIn(list, extent);\r\n                \r\n                for (var index = indexFrom; index < list.Count && (doc = list[index]).Extent.OverlapsWith(extent); index++)\r\n                {\r\n                    // skip stmts fully above {doc}\r\n                    while (insertAt < stmts.Count && stmts[insertAt].Span.End < doc.Extent.End)\r\n                    {\r\n                        insertAt++;\r\n                    }\r\n\r\n                    // insert {doc} into {stmts}\r\n                    if (insertAt == stmts.Count || stmts[insertAt].Span.Start >= doc.Extent.End)\r\n                    {\r\n                        stmts.Insert(insertAt, new PHPDocStmt(doc.PhpDoc));\r\n                        insertAt++;\r\n                    }\r\n\r\n                    //\r\n                    count++;\r\n                }\r\n\r\n                //\r\n                if (count != 0)\r\n                {\r\n                    list.RemoveRange(indexFrom, count);\r\n                    this.UpdateSpan();\r\n                }\r\n            }\r\n        }\r\n\r\n        private void UpdateSpan()\r\n        {\r\n            var list = _doclist;\r\n            _span = (list == null || list.Count == 0)\r\n                    ? Span.Invalid\r\n                    : Span.FromBounds(list[0].Extent.Start, list.Last().Extent.End);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds index of DOC comment at given position.\r\n        /// </summary>\r\n        private int FindIndex(int position)\r\n        {\r\n            if (_span.Contains(position))\r\n            {\r\n                Debug.Assert(_doclist != null);\r\n                int index = FindIndex(_doclist, position);\r\n                if (index >= 0 && _doclist[index].Extent.Contains(position))\r\n                {\r\n                    return index;\r\n                }\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Binary search.\r\n        /// </summary>\r\n        private static int FindIndex(List<DocInfo>/*!*/list, int position)\r\n        {\r\n            int a = 0, b = list.Count - 1;\r\n            while (a <= b)\r\n            {\r\n                int x = (a + b) >> 1;\r\n                var doc = list[x];\r\n                if (doc.Extent.Contains(position))\r\n                    return x;\r\n\r\n                if (position > doc.Extent.Start)\r\n                    a = x + 1;\r\n                else\r\n                    b = x - 1;\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets lowest index of DOC comment that intersects given span. Returns count of items if nothing was found.\r\n        /// </summary>\r\n        private static int FindFirstIn(List<DocInfo>/*!*/list, Span span)\r\n        {\r\n            Debug.Assert(span.IsValid);\r\n            Debug.Assert(list != null);\r\n\r\n            int result = list.Count;\r\n            int a = 0, b = result - 1;\r\n            while (a <= b)\r\n            {\r\n                // modified binary search to find lowest index of element within {span}\r\n\r\n                int x = (a + b) >> 1;\r\n                var doc = list[x];\r\n                if (doc.Extent.Start >= span.End)\r\n                {\r\n                    b = x - 1;\r\n                }\r\n                else if (doc.Extent.End <= span.Start)\r\n                {\r\n                    a = x + 1;\r\n                }\r\n                else\r\n                {\r\n                    result = x;\r\n                    b = x - 1;  // and try lower\r\n                }\r\n            }\r\n\r\n            //\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds DOC comment at given position and annotates statement with it.\r\n        /// </summary>\r\n        private void Annotate(LangElement/*!*/stmt, int start)\r\n        {\r\n            PHPDocBlock phpdoc;\r\n            if (TryReleaseBlock(start, out phpdoc))\r\n            {\r\n                stmt.SetPHPDoc(phpdoc);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Parsers/GPPG.cs",
    "content": "/*\r\n Copyright 2005 Queensland University of Technology (QUT). All rights reserved. Modified and improved by Tomas Matousek.\r\n\r\n Redistribution and use in source and binary forms, with or without modification are permitted provided \r\n that the following conditions are met:\r\n \r\n Redistribution of source code must retain the above copyright notice, this list of conditions and \r\n the following disclaimer. \r\n \r\n Redistributions in binary form must reproduce the above copyright notice, this list of conditions \r\n and the following disclaimer in the documentation and/or other materials with the distribution. \r\n\r\n This software is provided by the GPPG project as is and any express or implied warranties, \r\n including, but not limited to the implied warranties of merchantability and fitness for \r\n a particular purpose are hereby disclaimed. In no event shall the GPPG project or QUT be liable \r\n for any direct, indirect, incidental, special, exemplary, or consequential damages \r\n (including, but not limited to procurement of substitute goods or services; \r\n loss of use, data, or profits; or business interruption) however caused and on any theory of liability, \r\n whether in contract, strict liability, or tort (including negligence or otherwise) \r\n arising in any way out of the use of this software, even if advised of the possibility of such damage.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Parsers.GPPG\r\n{\r\n\t#region State, Rule\r\n\r\n\tpublic struct State\r\n\t{\r\n\t\tpublic int num;\r\n\t\tpublic readonly Dictionary<int, int> parser_table;  // Terminal -> ParseAction\r\n\t\tpublic readonly Dictionary<int, int> Goto;          // NonTerminal -> State;\r\n\t\tpublic readonly int defaultAction;\t\t\t        // ParseAction\r\n        \r\n\t\tprivate State(int num, int defaultAction, int[] actions, int[] gotos)\r\n\t\t{\r\n            this.num = num;\r\n            this.defaultAction = defaultAction;\r\n\r\n            if (actions != null)\r\n            {\r\n                this.parser_table = new Dictionary<int, int>(actions.Length / 2);\r\n                for (int i = 0; i < actions.Length; i += 2)\r\n                    this.parser_table.Add(actions[i], actions[i + 1]);\r\n            }\r\n            else\r\n                this.parser_table = null;\r\n\r\n            if (gotos != null)\r\n            {\r\n                this.Goto = new Dictionary<int, int>(gotos.Length / 2);\r\n                for (int i = 0; i < gotos.Length; i += 2)\r\n                    this.Goto.Add(gotos[i], gotos[i + 1]);\r\n            }\r\n            else\r\n                this.Goto = null;\r\n\t\t}\r\n\r\n        public State(int num, int[] actions, int[] gotos)\r\n            :this(num, 0, actions, gotos)\r\n\t\t{\r\n\t\t}\r\n\r\n        public State(int num, int[] actions)\r\n            : this(num, 0, actions, null)\r\n        {\r\n        }\r\n\r\n\t\tpublic State(int num, int defaultAction)\r\n            : this(num, defaultAction, null, null)\r\n\t\t{\r\n\t\t}\r\n\r\n        public State(int num, int defaultAction, int[] gotos)\r\n            : this(num, defaultAction, null, gotos)\r\n        {\r\n        }\r\n\t}\r\n\r\n\tpublic struct Rule\r\n\t{\r\n\t\tpublic int lhs; // symbol\r\n\t\tpublic int[] rhs; // symbols\r\n\r\n\t\tpublic Rule(int lhs, int[] rhs)\r\n\t\t{\r\n\t\t\tthis.lhs = lhs;\r\n\t\t\tthis.rhs = rhs;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ITokenProvider\r\n\r\n\tpublic interface ITokenProvider<ValueType, PositionType>\r\n\t{\r\n\t\tValueType TokenValue { get; }\r\n\r\n\t\tPositionType TokenPosition { get; }\r\n\r\n\t\tint GetNextToken();\r\n\r\n\t\tvoid ReportError(string[] expectedTokens);\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ParserStack\r\n\r\n\tpublic class ParserStack<ValueType, PositionType>\r\n\t{\r\n\t\tpublic struct Item\r\n\t\t{\r\n\t\t\tpublic ValueType yyval;\r\n\t\t\tpublic PositionType yypos;\r\n\t\t\tpublic bool yypos_valid;\r\n\r\n\t\t\tpublic override string ToString()\r\n\t\t\t{\r\n\t\t\t\treturn yyval.ToString() + \" \" + yypos.ToString();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// fields accessed from the generated code:\r\n\t\tpublic Item[] array = new Item[3];\r\n\t\tpublic int top = 0;\r\n\r\n\t\tpublic void Push(ValueType value, PositionType pos, bool isValidPosition)\r\n\t\t{\r\n\t\t\tif (top >= array.Length)\r\n\t\t\t{\r\n\t\t\t\tItem[] newarray = new Item[array.Length * 2];\r\n\t\t\t\tSystem.Array.Copy(array, newarray, top);\r\n\t\t\t\tarray = newarray;\r\n\t\t\t}\r\n\r\n\t\t\tarray[top].yyval = value;\r\n\t\t\tarray[top].yypos = pos;\r\n\t\t\tarray[top].yypos_valid = isValidPosition;\r\n\t\t\ttop++;\r\n\t\t}\r\n\r\n\t\tpublic void Pop()\r\n\t\t{\r\n\t\t\t--top;\r\n\t\t}\r\n\r\n\t\tpublic ValueType PeekValue()\r\n\t\t{\r\n\t\t\treturn array[top - 1].yyval;\r\n\t\t}\r\n\r\n\t\tpublic PositionType PeekPosition()\r\n\t\t{\r\n\t\t\treturn array[top - 1].yypos;\r\n\t\t}\r\n\r\n\t\tpublic bool IsValidPosition()\r\n\t\t{\r\n\t\t\treturn array[top - 1].yypos_valid;\r\n\t\t}\r\n\t\t\r\n\t\tpublic PositionType PeekPosition(int offset)\r\n\t\t{\r\n\t\t\treturn array[top - 1 - offset].yypos;\r\n\t\t}\r\n\r\n\t\tpublic bool IsValidPosition(int offset)\r\n\t\t{\r\n\t\t\treturn array[top - 1 - offset].yypos_valid;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region ShiftReduceParser\r\n\r\n\tpublic abstract class ShiftReduceParser<ValueType, PositionType>\r\n\t\twhere ValueType : struct\r\n\t{\r\n\t\t//internal bool Trace = false;\r\n\r\n\t\tpublic ITokenProvider<ValueType, PositionType> Scanner { get { return scanner; } set { scanner = value; } }\r\n\t\tprivate ITokenProvider<ValueType, PositionType> scanner;\r\n\r\n\t\tprotected ValueType yyval;\r\n\t\tprotected PositionType yypos;\r\n\t\tprotected bool yypos_valid;\r\n\t\t\r\n\t\tprivate int next;\r\n\t\tprivate int current_state_index;\r\n        //private State current_state { get { return this.states[current_state_index]; } }\r\n\r\n\t\tprivate bool recovering;\r\n\t\tprivate int tokensSinceLastError;\r\n\r\n\t\tprivate readonly Stack<int> state_stack = new Stack<int>();\r\n\t\tprotected ParserStack<ValueType, PositionType> value_stack = new ParserStack<ValueType, PositionType>();\r\n\r\n\t\tprotected abstract string[] NonTerminals { get; }\r\n\t\tprotected abstract State[] States { get; }\r\n\t\tprotected abstract Rule[] Rules { get; }\r\n\t\tprotected abstract int ErrorToken { get; }\r\n\t\tprotected abstract int EofToken { get; }\r\n        \r\n\t\tprotected virtual PositionType InvalidPosition { get { return default(PositionType); } } \r\n\t\tprotected abstract PositionType CombinePositions(PositionType first, PositionType last);\r\n\r\n\t\tprivate readonly string[] nonTerminals;\r\n\t\tprivate readonly State[] states;\r\n\t\tprivate readonly Rule[] rules;\r\n\t\tprivate readonly int errToken;\r\n\t\tprivate readonly int eofToken;\r\n\t\tprivate readonly PositionType invalidPosition;\r\n\r\n\t\tprotected ShiftReduceParser()\r\n\t\t{\r\n\t\t\tthis.nonTerminals = NonTerminals;\r\n\t\t\tthis.states = States;\r\n\t\t\tthis.rules = Rules;\r\n\t\t\tthis.errToken = ErrorToken;\r\n\t\t\tthis.eofToken = EofToken;\r\n\t\t\tthis.invalidPosition = InvalidPosition;\r\n\r\n\t\t\tif (states == null || rules == null || nonTerminals == null)\r\n\t\t\t\tthrow new InvalidOperationException();\r\n\t\t}\r\n\r\n\t\tpublic bool Parse()\r\n\t\t{\r\n\t\t\tnext = 0;\r\n            current_state_index = 0;// current_state = states[0];\r\n\r\n            state_stack.Push(current_state_index);\r\n\t\t\tvalue_stack.Push(yyval, yypos, yypos_valid);\r\n\r\n            for (; ; )\r\n            {\r\n                //if (Trace)\r\n                //    Console.Error.WriteLine(\"Entering state {0} \", states[current_state_index].num);\r\n\r\n                int action = states[current_state_index].defaultAction;\r\n\r\n                var current_state_parser_table = states[current_state_index].parser_table;\r\n                if (current_state_parser_table != null)\r\n                {\r\n                    if (next == 0)\r\n                    {\r\n                        //if (Trace)\r\n                        //    Console.Error.Write(\"Reading a token: \");\r\n\r\n                        next = scanner.GetNextToken();\r\n                    }\r\n\r\n                    //if (Trace)\r\n                    //    Console.Error.WriteLine(\"Next token is {0}\", TerminalToString(next));\r\n\r\n                    current_state_parser_table.TryGetValue(next, out action);\r\n                }\r\n\r\n                if (action > 0)         // shift\r\n                {\r\n                    Shift(action);\r\n                }\r\n                else if (action < 0)   // reduce\r\n                {\r\n                    Reduce(-action);\r\n\r\n                    if (action == -1)\t// accept\r\n                        return true;\r\n                }\r\n                else if (action == 0)   // error\r\n                {\r\n                    if (!ErrorRecovery())\r\n                        return false;\r\n                }\r\n            }\r\n\t\t}\r\n\r\n\r\n\t\tprotected void Shift(int state_nr)\r\n\t\t{\r\n            //if (Trace)\r\n            //    Console.Error.Write(\"Shifting token {0}, \", TerminalToString(next));\r\n\r\n            current_state_index = state_nr; //current_state = states[state_nr];\r\n\r\n\t\t\tvalue_stack.Push(scanner.TokenValue, scanner.TokenPosition, true);\r\n\t\t\tstate_stack.Push(current_state_index);\r\n\r\n\t\t\tif (recovering)\r\n\t\t\t{\r\n\t\t\t\tif (next != errToken)\r\n\t\t\t\t\ttokensSinceLastError++;\r\n\r\n\t\t\t\tif (tokensSinceLastError > 5)\r\n\t\t\t\t\trecovering = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (next != eofToken)\r\n\t\t\t\tnext = 0;\r\n\t\t}\r\n\r\n\t\tprivate int currentRule;\r\n\r\n\t\tprotected void Reduce(int rule_nr)\r\n\t\t{\r\n            //if (Trace)\r\n            //    DisplayRule(rule_nr);\r\n\r\n\t\t\tRule rule = rules[rule_nr];\r\n            var/*!*/rule_rhs = rule.rhs;\r\n\r\n            if (rule_rhs.Length == 1)                   // LHS : RHS{0};\r\n\t\t\t{\r\n\t\t\t\t// $$ = $1;\r\n\t\t\t\t// @$ = @1;\r\n\t\t\t\tyyval = value_stack.PeekValue();\r\n\t\t\t\tyypos = value_stack.PeekPosition();\r\n\t\t\t\tyypos_valid = value_stack.IsValidPosition();\r\n\t\t\t}\r\n            else if (rule_rhs.Length > 1)               // LHS : RHS{n - 1} RHS{n - 2} ... RHS{1} RHS{0} \r\n\t\t\t{\r\n\t\t\t\t// $$ = { result of the semantic action };\r\n\t\t\t\t// @$ = @1 + @n;\r\n\r\n                int first = rule_rhs.Length - 1;\r\n\t\t\t\twhile (first >= 0 && !value_stack.IsValidPosition(first)) first--;\r\n\r\n\t\t\t\tif (first > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tint last = 0;\r\n\t\t\t\t\twhile (!value_stack.IsValidPosition(last)) last++;\r\n\r\n\t\t\t\t\tyypos = CombinePositions(value_stack.PeekPosition(first), value_stack.PeekPosition(last));\r\n\t\t\t\t\tyypos_valid = true;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tyypos = invalidPosition;\r\n\t\t\t\t\tyypos_valid = false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tyyval = default(ValueType);\r\n\t\t\t}\r\n            else if (rule_rhs.Length == 0)              // LHS : ; \r\n\t\t\t{\r\n\t\t\t\t// $$ = null;\r\n\t\t\t\t// @$ = <invalid>  -- empty reductions has no position\r\n\t\t\t\t\r\n\t\t\t\t// alternatives:\r\n\t\t\t\t// 1) @$ = scanner.TokenPosition -- the position of the following token, which triggered the reduction\r\n\t\t\t\t// 2) keep @$ unchanged -- the position of the last reduction/token (shift token would set yypos to skip tokens)\r\n\t\t\t\t// problems: both alternatives give bad results as they make reductions with combined position wider than they are\r\n\t\t\t\t\r\n\t\t\t\tyyval = default(ValueType);\r\n\t\t\t\tyypos = invalidPosition;\r\n\t\t\t\tyypos_valid = false;\r\n\t\t\t}\r\n\t\t\t\r\n            //if (Trace)\r\n            //    Console.Error.WriteLine(\"Rule position: {0}\", yypos);\r\n\r\n\t\t\tcurrentRule = rule_nr;\r\n            DoAction(rule_nr);\r\n\t\t\tcurrentRule = -1;\r\n\r\n            for (int i = rule_rhs.Length; i > 0; i--)\r\n            {\r\n                state_stack.Pop();\r\n                value_stack.Pop();\r\n            }\r\n\r\n            //if (Trace)\r\n            //    DisplayStack();\r\n\r\n\t\t\tcurrent_state_index = state_stack.Peek();\r\n\r\n            int goto_state;\r\n            if (states[current_state_index].Goto.TryGetValue(rule.lhs, out goto_state))\r\n                current_state_index = goto_state;\r\n\r\n\t\t\tstate_stack.Push(current_state_index);\r\n\t\t\tvalue_stack.Push(yyval, yypos, yypos_valid);\r\n\t\t}\r\n\r\n\r\n\t\tprotected abstract void DoAction(int action_nr);\r\n\t\t\r\n\t\tprotected PositionType GetLeftValidPosition(int symbolIndex)\r\n\t\t{\r\n\t\t\tint index = rules[currentRule].rhs.Length - symbolIndex;\r\n\t\t\twhile (!value_stack.IsValidPosition(index)) index++;\r\n\t\t\t\r\n            //if (Trace)\r\n            //    Console.Error.WriteLine(\"LeftValidPosition({0}) = {1}\", symbolIndex, value_stack.PeekPosition(index));\r\n\t\t\t\t\r\n\t\t\treturn value_stack.PeekPosition(index);\r\n\t\t}\r\n\r\n\r\n\t\tprotected bool ErrorRecovery()\r\n\t\t{\r\n\t\t\tif (!recovering) // if not recovering from previous error\r\n\t\t\t\tReportError();\r\n\r\n\t\t\trecovering = true;\r\n\t\t\ttokensSinceLastError = 0;\r\n\r\n\t\t\tif (!FindErrorRecoveryState())\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tShiftErrorToken();\r\n\r\n\t\t\treturn DiscardInvalidTokens();\r\n\t\t}\r\n\r\n\r\n\t\tinternal void ReportError()\r\n\t\t{\r\n\t\t\tstring[] expected_terminals = null;\r\n\r\n            var current_state_parser_table = states[current_state_index].parser_table;\r\n            if (current_state_parser_table != null)\r\n\t\t\t{\r\n                expected_terminals = new string[current_state_parser_table.Count];\r\n\r\n\t\t\t\tint i = 0;\r\n                foreach (int terminal in current_state_parser_table.Keys)\r\n\t\t\t\t\texpected_terminals[i++] = TerminalToString(terminal);\r\n\t\t\t}\r\n\r\n\t\t\tscanner.ReportError(expected_terminals);\r\n\t\t}\r\n\r\n\r\n\t\tinternal void ShiftErrorToken()\r\n\t\t{\r\n\t\t\tint old_next = next;\r\n\t\t\tnext = errToken;\r\n\r\n\t\t\tShift(states[current_state_index].parser_table[next]);\r\n\r\n            //if (Trace)\r\n            //    Console.Error.WriteLine(\"Entering state {0} \", states[current_state_index].num);\r\n\r\n\t\t\tnext = old_next;\r\n\t\t}\r\n\r\n\r\n\t\tinternal bool FindErrorRecoveryState()\r\n\t\t{\r\n\t\t\twhile (true)    // pop states until one found that accepts error token\r\n\t\t\t{\r\n                int i;\r\n                var current_state_parser_table = states[current_state_index].parser_table;\r\n                if (current_state_parser_table != null &&\r\n                    current_state_parser_table.TryGetValue(errToken, out i) && //current_state_parser_table.ContainsKey(errToken) &&\r\n                    i /*current_state_parser_table[errToken]*/ > 0) // shift\r\n\t\t\t\t\treturn true;\r\n\r\n                //if (Trace)\r\n                //    Console.Error.WriteLine(\"Error: popping state {0}\", states[state_stack.Peek()].num);\r\n\r\n\t\t\t\tstate_stack.Pop();\r\n\t\t\t\tvalue_stack.Pop();\r\n\r\n                //if (Trace)\r\n                //    DisplayStack();\r\n\r\n\t\t\t\tif (state_stack.Count == 0)\r\n\t\t\t\t{\r\n                    //if (Trace)\r\n                    //    Console.Error.Write(\"Aborting: didn't find a state that accepts error token\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tcurrent_state_index = state_stack.Peek();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tinternal bool DiscardInvalidTokens()\r\n\t\t{\r\n\r\n\t\t\tint action = states[current_state_index].defaultAction;\r\n\r\n            var current_state_parser_table = states[current_state_index].parser_table;\r\n            if (current_state_parser_table != null)\r\n\t\t\t{\r\n\t\t\t\t// Discard tokens until find one that works ...\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (next == 0)\r\n\t\t\t\t\t{\r\n                        //if (Trace)\r\n                        //    Console.Error.Write(\"Reading a token: \");\r\n\r\n\t\t\t\t\t\tnext = scanner.GetNextToken();\r\n\t\t\t\t\t}\r\n\r\n                    //if (Trace)\r\n                    //    Console.Error.WriteLine(\"Next token is {0}\", TerminalToString(next));\r\n\r\n\t\t\t\t\tif (next == eofToken)\r\n\t\t\t\t\t\treturn false;\r\n\r\n                    int i;\r\n                    if (current_state_parser_table.TryGetValue(next, out i))\r\n                        action = i;// current_state.parser_table[next];\r\n\r\n\t\t\t\t\tif (action != 0)\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n                        //if (Trace)\r\n                        //    Console.Error.WriteLine(\"Error: Discarding {0}\", TerminalToString(next));\r\n\t\t\t\t\t\tnext = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\r\n\r\n\t\tprotected void yyerrok()\r\n\t\t{\r\n\t\t\trecovering = false;\r\n\t\t}\r\n\r\n        //protected void AddState(int statenr, State state)\r\n        //{\r\n        //    states[statenr] = state;\r\n        //    state.num = statenr;\r\n        //}\r\n\r\n        //private void DisplayStack()\r\n        //{\r\n        //    Console.Error.Write(\"State now\");\r\n        //    foreach (var state in state_stack)\r\n        //        Console.Error.Write(\" {0}\", states[state].num);\r\n        //    Console.Error.WriteLine();\r\n        //}\r\n\r\n\r\n        //private void DisplayRule(int rule_nr)\r\n        //{\r\n        //    Console.Error.Write(\"Reducing stack by rule {0}, \", rule_nr);\r\n        //    DisplayProduction(rules[rule_nr]);\r\n        //}\r\n\r\n\r\n        //private void DisplayProduction(Rule rule)\r\n        //{\r\n        //    if (rule.rhs.Length == 0)\r\n        //        Console.Error.Write(\"/* empty */ \");\r\n        //    else\r\n        //        foreach (int symbol in rule.rhs)\r\n        //            Console.Error.Write(\"{0} \", SymbolToString(symbol));\r\n\r\n        //    Console.Error.WriteLine(\"-> {0}\", SymbolToString(rule.lhs));\r\n        //}\r\n\r\n\r\n\t\tprotected abstract string TerminalToString(int terminal);\r\n\r\n\r\n        //private string SymbolToString(int symbol)\r\n        //{\r\n        //    if (symbol < 0)\r\n        //        return nonTerminals[-symbol];\r\n        //    else\r\n        //        return TerminalToString(symbol);\r\n        //}\r\n\r\n\r\n\t\tprotected string CharToString(char ch)\r\n\t\t{\r\n\t\t\tswitch (ch)\r\n\t\t\t{\r\n\t\t\t\tcase '\\a': return @\"'\\a'\";\r\n\t\t\t\tcase '\\b': return @\"'\\b'\";\r\n\t\t\t\tcase '\\f': return @\"'\\f'\";\r\n\t\t\t\tcase '\\n': return @\"'\\n'\";\r\n\t\t\t\tcase '\\r': return @\"'\\r'\";\r\n\t\t\t\tcase '\\t': return @\"'\\t'\";\r\n\t\t\t\tcase '\\v': return @\"'\\v'\";\r\n\t\t\t\tcase '\\0': return @\"'\\0'\";\r\n\t\t\t\tdefault: return string.Format(\"'{0}'\", ch);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Lexer.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\nusing System.Globalization;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n    #region PhpStringBuilder\r\n\r\n    /// <summary>\r\n    /// The PHP-semantic string builder. Binary or Unicode string builder.\r\n    /// </summary>\r\n    internal class PhpStringBuilder\r\n    {\r\n        #region Fields & Properties\r\n        /// <summary>\r\n        /// Currently used encoding.\r\n        /// </summary>\r\n        private readonly Encoding/*!*/encoding;\r\n\r\n        private readonly byte[] encodeBytes = new byte[4];\r\n        private readonly char[] encodeChars = new char[5];\r\n\r\n        private StringBuilder _unicodeBuilder;\r\n        private List<byte> _binaryBuilder;\r\n\r\n        private bool IsUnicode { get { return !IsBinary; } }\r\n        private bool IsBinary { get { return _binaryBuilder != null; } }\r\n\r\n        private Text.Span span;\r\n\r\n        /// <summary>\r\n        /// Length of contained data (string or byte[]).\r\n        /// </summary>\r\n        public int Length\r\n        {\r\n            get\r\n            {\r\n                if (_unicodeBuilder != null)\r\n                    return _unicodeBuilder.Length;\r\n                else if (_binaryBuilder != null)\r\n                    return _binaryBuilder.Count;\r\n                else\r\n                    return 0;\r\n            }\r\n        }\r\n\r\n        private StringBuilder UnicodeBuilder\r\n        {\r\n            get\r\n            {\r\n                if (_unicodeBuilder == null)\r\n                {\r\n                    if (_binaryBuilder != null && _binaryBuilder.Count > 0)\r\n                    {\r\n                        byte[] bytes = _binaryBuilder.ToArray();\r\n                        _unicodeBuilder = new StringBuilder(encoding.GetString(bytes,0,bytes.Length ));\r\n                    }\r\n                    else\r\n                    {\r\n                        _unicodeBuilder = new StringBuilder();\r\n                    }\r\n                    _binaryBuilder = null;\r\n                }\r\n\r\n                return _unicodeBuilder;\r\n            }\r\n        }\r\n\r\n        private List<byte> BinaryBuilder\r\n        {\r\n            get\r\n            {\r\n                if (_binaryBuilder == null)\r\n                {\r\n                    if (_unicodeBuilder != null && _unicodeBuilder.Length > 0)\r\n                    {\r\n                        _binaryBuilder = new List<byte>(encoding.GetBytes(_unicodeBuilder.ToString()));\r\n                    }\r\n                    else\r\n                    {\r\n                        _binaryBuilder = new List<byte>();\r\n                    }\r\n                    _unicodeBuilder = null;\r\n                }\r\n\r\n                return _binaryBuilder;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Results\r\n\r\n        /// <summary>\r\n        /// The result of builder: String or byte[].\r\n        /// </summary>\r\n        public object Result\r\n        {\r\n            get\r\n            {\r\n                if (IsBinary)\r\n                    return BinaryBuilder.ToArray();\r\n                else\r\n                    return UnicodeBuilder.ToString();\r\n            }\r\n        }\r\n\r\n        public PHP.Core.AST.Literal CreateLiteral()\r\n        {\r\n            if (IsBinary)\r\n                return new PHP.Core.AST.BinaryStringLiteral(span, BinaryBuilder.ToArray());\r\n            else\r\n                return new PHP.Core.AST.StringLiteral(span, UnicodeBuilder.ToString());\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construct\r\n\r\n        /// <summary>\r\n        /// Initialize the PhpStringBuilder.\r\n        /// </summary>\r\n        /// <param name=\"encoding\"></param>\r\n        /// <param name=\"binary\"></param>\r\n        /// <param name=\"initialLength\"></param>\r\n        public PhpStringBuilder(Encoding/*!*/encoding, bool binary, int initialLength)\r\n        {\r\n            Debug.Assert(encoding != null);\r\n\r\n            this.encoding = encoding;\r\n            this.span = Text.Span.Invalid;\r\n\r\n            //if (binary)\r\n            //    _binaryBuilder = new List<byte>(initialLength);\r\n            //else\r\n                _unicodeBuilder = new StringBuilder(initialLength);\r\n        }\r\n\r\n        public PhpStringBuilder(Encoding/*!*/encoding, string/*!*/value, Text.Span span)\r\n            :this(encoding, false, value.Length)\r\n        {\r\n            Append(value, span);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Append\r\n\r\n        private void Append(Text.Span span)\r\n        {\r\n            if (this.span.IsValid)\r\n            {\r\n                if (span.IsValid)\r\n                    this.span = Text.Span.Combine(this.span, span);\r\n            }\r\n            else\r\n            {\r\n                this.span = span;\r\n            }\r\n        }\r\n\r\n        public void Append(string str, Text.Span span)\r\n        {\r\n            Append(span);\r\n            Append(str);\r\n        }\r\n        public void Append(string str)\r\n        {\r\n            if (IsUnicode)\r\n                UnicodeBuilder.Append(str);\r\n            else\r\n            {\r\n                BinaryBuilder.AddRange(encoding.GetBytes(str));\r\n            }\r\n        }\r\n\r\n        public void Append(char c, Text.Span span)\r\n        {\r\n            Append(span);\r\n            Append(c);\r\n        }\r\n        public void Append(char c)\r\n        {\r\n            if (IsUnicode)\r\n                UnicodeBuilder.Append(c);\r\n            else\r\n            {\r\n                encodeChars[0] = c;\r\n                int count = encoding.GetBytes(encodeChars, 0, 1, encodeBytes, 0);\r\n                for (int i = 0; i < count; ++i)\r\n                    BinaryBuilder.Add(encodeBytes[i]);\r\n            }\r\n        }\r\n\r\n        public void Append(byte b, Text.Span span)\r\n        {\r\n            Append(span);\r\n            Append(b);\r\n        }\r\n        public void Append(byte b)\r\n        {\r\n            // force binary string\r\n\r\n            if (IsUnicode)\r\n            {\r\n                encodeBytes[0] = b;\r\n                UnicodeBuilder.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));\r\n            }\r\n            else\r\n                BinaryBuilder.Add(b);\r\n        }\r\n\r\n        public void Append(int c, Text.Span span)\r\n        {\r\n            Append(span);\r\n            Append(c);\r\n        }\r\n        public void Append(int c)\r\n        {\r\n            Debug.Assert(c >= 0);\r\n\r\n            //if (c <= 0xff)\r\n            if (IsBinary)\r\n                BinaryBuilder.Add((byte)c);\r\n            else\r\n                UnicodeBuilder.Append((char)c);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Misc\r\n\r\n        /// <summary>\r\n        /// Trim ending /r/n or /n characters. Assuming the string ends with /n.\r\n        /// </summary>\r\n        internal void TrimEoln()\r\n        {\r\n            if (IsUnicode)\r\n            {\r\n                if (UnicodeBuilder.Length > 0)\r\n                {\r\n                    if (UnicodeBuilder.Length >= 2 && UnicodeBuilder[UnicodeBuilder.Length - 2] == '\\r')\r\n                    {\r\n                        // trim ending \\r\\n:\r\n                        UnicodeBuilder.Length -= 2;\r\n                    }\r\n                    else\r\n                    {\r\n                        // trim ending \\n:\r\n                        UnicodeBuilder.Length -= 1;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (BinaryBuilder.Count > 0)\r\n                {\r\n                    if (BinaryBuilder.Count >= 2 && BinaryBuilder[BinaryBuilder.Count - 2] == (byte)'\\r')\r\n                    {\r\n                        BinaryBuilder.RemoveRange(BinaryBuilder.Count - 2, 2);\r\n                    }\r\n                    else\r\n                    {\r\n                        BinaryBuilder.RemoveAt(BinaryBuilder.Count - 1);\r\n                    }\r\n                }\r\n            }\r\n            \r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    public partial class Lexer\r\n\t{\r\n\t\tprotected bool AllowAspTags = true;\r\n        protected bool AllowShortTags = true;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether tokens T_STRING, T_VARIABLE, '[', ']', '{', '}', '$', \"->\" are encapsulated in a string.\r\n\t\t/// </summary>\r\n\t\tprotected bool inString;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Whether T_STRING token should be treated as a string code token and not a plain string token.\r\n\t\t/// </summary>\r\n\t\tprotected bool isCode;\r\n\r\n\t\tpublic bool InUnicodeString { get { return inUnicodeString; } set { inUnicodeString = true; } }\r\n\t\tprivate bool inUnicodeString = false;\r\n\r\n\t\tprotected string hereDocLabel = null;\r\n\t\tprotected Stack<LexicalStates> StateStack { get { return stateStack; } set { stateStack = value; } }\r\n\r\n        protected void _yymore() { yymore(); }\r\n\r\n\t\t#region Token Buffer Interpretation\r\n\r\n\t\tpublic int GetTokenByteLength(Encoding/*!*/ encoding)\r\n\t\t{\r\n\t\t\treturn encoding.GetByteCount(buffer, token_start, token_end - token_start);\r\n\t\t}\r\n\r\n        protected char[] Buffer { get { return buffer; } }\r\n        protected int BufferTokenStart { get { return token_start; } }\r\n\r\n        protected char GetTokenChar(int index)\r\n\t\t{\r\n\t\t\treturn buffer[token_start + index];\r\n\t\t}\r\n\r\n\t\tprotected string GetTokenString()\r\n\t\t{\r\n\t\t\treturn new String(buffer, token_start, token_end - token_start);\r\n\t\t}\r\n\r\n        protected string GetTokenChunkString()\r\n\t\t{\r\n\t\t\treturn new String(buffer, token_chunk_start, token_end - token_chunk_start);\r\n\t\t}\r\n\r\n\t\tprotected string GetTokenSubstring(int startIndex)\r\n\t\t{\r\n\t\t\treturn new String(buffer, token_start + startIndex, token_end - token_start - startIndex);\r\n\t\t}\r\n\r\n\t\tprotected string GetTokenSubstring(int startIndex, int length)\r\n\t\t{\r\n\t\t\treturn new String(buffer, token_start + startIndex, length);\r\n\t\t}\r\n\r\n\t\tprotected void AppendTokenTextTo(StringBuilder/*!*/ builder)\r\n\t\t{\r\n\t\t\tbuilder.Append(buffer, token_start, token_end - token_start);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a specified heredoc lebel exactly matches {LABEL} in ^{LABEL}(\";\")?{NEWLINE}.\r\n\t\t/// </summary>\r\n\t\tprivate bool IsCurrentHeredocEnd(int startIndex)\r\n\t\t{\r\n\t\t\tint i = StringUtils.FirstDifferent(buffer, token_start + startIndex, hereDocLabel, 0, false);\r\n\t\t\treturn i == hereDocLabel.Length && (buffer[token_start + i] == ';' ||\r\n\t\t\t\tIsNewLineCharacter(buffer[token_start + i]));\r\n\t\t}\r\n\r\n\t\tprotected char GetTokenAsEscapedCharacter(int startIndex)\r\n\t\t{\r\n\t\t\tDebug.Assert(GetTokenChar(startIndex) == '\\\\');\r\n\t\t\tchar c;\r\n\t\t\tswitch (c = GetTokenChar(startIndex + 1))\r\n\t\t\t{\r\n\t\t\t\tcase 'n': return '\\n';\r\n\t\t\t\tcase 't': return '\\t';\r\n\t\t\t\tcase 'r': return '\\r';\r\n\t\t\t\tdefault: return c;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether {LNUM} fits to integer, long or double \r\n\t\t/// and returns appropriate value from Tokens enum.\r\n\t\t/// </summary>\r\n\t\tprotected Tokens GetIntegerTokenType(int startIndex)\r\n\t\t{\r\n\t\t\tint i = token_start + startIndex;\r\n\t\t\twhile (i < token_end && buffer[i] == '0') i++;\r\n\r\n\t\t\tint number_length = token_end - i;\r\n\t\t\tif (i != token_start + startIndex)\r\n\t\t\t{\r\n\t\t\t\t// starts with zero - octal\r\n\t\t\t\t// similar to GetHexIntegerTokenType code\r\n\t\t\t\tif ((number_length < 11) || (number_length == 11 && buffer[i] == '1'))\r\n\t\t\t\t\treturn Tokens.T_LNUMBER;\r\n\t\t\t\tif (number_length < 22) \r\n\t\t\t\t\treturn Tokens.T_L64NUMBER;\r\n\t\t\t\treturn Tokens.T_DNUMBER;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// decimal\r\n\t\t\t\tif (number_length < 10)\r\n\t\t\t\t\treturn Tokens.T_LNUMBER;\r\n\t\t\t\tif (number_length > 19)\r\n\t\t\t\t\treturn Tokens.T_DNUMBER;\r\n\t\t\t\tif (number_length >= 11 && number_length <= 18)\r\n\t\t\t\t\treturn Tokens.T_L64NUMBER;\r\n\r\n\t\t\t\t// can't easily check for numbers of different length\r\n\t\t\t\tSemanticValueType val = default(SemanticValueType);\r\n\t\t\t\treturn GetTokenAsDecimalNumber(startIndex, 10, ref val);\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether {HNUM} fits to integer, long or double \r\n\t\t/// and returns appropriate value from Tokens enum.\r\n\t\t/// </summary>\r\n\t\tprotected Tokens GetHexIntegerTokenType(int startIndex)\r\n\t\t{\r\n\t\t\t// 0xffffffff no\r\n\t\t\t// 0x7fffffff yes\r\n\t\t\tint i = token_start + startIndex;\r\n\t\t\twhile (i < token_end && buffer[i] == '0') i++;\r\n\r\n\t\t\t// returns T_LNUMBER when: length without zeros is less than 8\r\n\t\t\t// or equals 8 and first non-zero character is less than '8'\r\n\t\t\tif ((token_end - i < 8) || ((token_end - i == 8) && buffer[i] >= '0' && buffer[i] < '8'))\r\n\t\t\t\treturn Tokens.T_LNUMBER;\r\n\r\n\t\t\t// similar for long\r\n\t\t\tif ((token_end - i < 16) || ((token_end - i == 16) && buffer[i] >= '0' && buffer[i] < '8'))\r\n\t\t\t\treturn Tokens.T_L64NUMBER;\r\n\r\n\t\t\treturn Tokens.T_DNUMBER;\r\n\t\t}\r\n\r\n\t\t// base == 10: [0-9]*\r\n\t\t// base == 16: [0-9A-Fa-f]*\r\n\t\t// assuming result < max int\r\n\t\tprotected int GetTokenAsInteger(int startIndex, int @base)\r\n\t\t{\r\n\t\t\tint result = 0;\r\n\t\t\tint buffer_pos = token_start + startIndex;\r\n\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tint digit = Convert.AlphaNumericToDigit(buffer[buffer_pos]);\r\n\t\t\t\tif (digit >= @base) break;\r\n\r\n\t\t\t\tresult = result * @base + digit;\r\n\t\t\t\tbuffer_pos++;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Reads token as a number (accepts tokens with any reasonable base [0-9a-zA-Z]*).\r\n\t\t/// Parsed value is stored in <paramref name=\"val\"/> as integer (when value is less than MaxInt),\r\n\t\t/// as Long (when value is less then MaxLong) or as double.\r\n\t\t/// </summary>\r\n        /// <param name=\"startIndex\">Starting read position of the token.</param>\r\n        /// <param name=\"base\">The base of the number.</param>\r\n\t\t/// <param name=\"val\">Parsed value is stored in this union</param>\r\n\t\t/// <returns>Returns one of T_LNUMBER (int), T_L64NUMBER (long) or T_DNUMBER (double)</returns>\r\n\t\tprotected Tokens GetTokenAsDecimalNumber(int startIndex, int @base, ref SemanticValueType val)\r\n\t\t{\r\n\t\t\tlong lresult = 0;\r\n\t\t\tdouble dresult = 0;\r\n\r\n\t\t\tint digit;\r\n\t\t\tint buffer_pos = token_start + startIndex;\r\n\r\n\t\t\t// try to parse INT value\r\n\t\t\t// most of the literals are parsed using the following loop\r\n\t\t\twhile (buffer_pos < buffer.Length && (digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < @base && lresult <= Int32.MaxValue)\r\n\t\t\t{\r\n\t\t\t\tlresult = lresult * @base + digit;\r\n\t\t\t\tbuffer_pos++;\r\n\t\t\t}\r\n\r\n\t\t\tif (lresult > Int32.MaxValue)\r\n\t\t\t{\r\n\t\t\t\t// try to parse LONG value (check for the overflow and if it occurs converts data to double)\r\n\t\t\t\tbool longOverflow = false;\r\n\t\t\t\twhile (buffer_pos < buffer.Length && (digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < @base)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlresult = checked(lresult * @base + digit);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (OverflowException)\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tlongOverflow = true; break; \r\n\t\t\t\t\t}\r\n\t\t\t\t\tbuffer_pos++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (longOverflow)\r\n\t\t\t\t{\r\n\t\t\t\t\t// too big for LONG - use double\r\n\t\t\t\t\tdresult = (double)lresult;\r\n\t\t\t\t\twhile (buffer_pos < buffer.Length && (digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < @base)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdresult = dresult * @base + digit;\r\n\t\t\t\t\t\tbuffer_pos++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tval.Double = dresult;\r\n\t\t\t\t\treturn Tokens.T_DNUMBER;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tval.Long = lresult;\r\n\t\t\t\t\treturn Tokens.T_L64NUMBER;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tval.Integer = (int)lresult;\r\n\t\t\t\treturn Tokens.T_LNUMBER;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// [0-9]*[.][0-9]+\r\n\t\t// [0-9]+[.][0-9]*\r\n\t\t// [0-9]*[.][0-9]+[eE][+-]?[0-9]+\r\n\t\t// [0-9]+[.][0-9]*[eE][+-]?[0-9]+\r\n\t\t// [0-9]+[eE][+-]?[0-9]+\r\n\t\tprotected double GetTokenAsDouble(int startIndex)\r\n\t\t{\r\n            string str = new string(buffer, token_start, token_end - token_start);\r\n\r\n            try\r\n            {\r\n                return double.Parse(\r\n                    str,\r\n                    NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent,\r\n                    CultureInfo.InvariantCulture);\r\n            }\r\n            catch (OverflowException)\r\n            {\r\n                return (str.Length > 0 && str[0] == '-') ? double.NegativeInfinity : double.PositiveInfinity;\r\n            }\r\n\t\t}\r\n\r\n        //protected void GetTokenAsQualifiedName(int startIndex, List<string>/*!*/ result)\r\n        //{\r\n        //    Debug.Assert(result != null);\r\n\r\n        //    int current_name = token_start + startIndex;\r\n        //    int next_separator = token_start + startIndex;\r\n\r\n        //    for (; ; )\r\n        //    {\r\n        //        while (next_separator < token_end && buffer[next_separator] != '\\\\')\r\n        //            next_separator++;\r\n\r\n        //        if (next_separator == token_end) break;\r\n\r\n        //        result.Add(new String(buffer, current_name, next_separator - current_name));\r\n        //        next_separator += QualifiedName.Separator.ToString().Length;\r\n        //        current_name = next_separator;\r\n        //    }\r\n\r\n        //    // last item:\r\n        //    result.Add(new String(buffer, current_name, token_end - current_name));\r\n        //}\r\n\r\n        #region GetTokenAs*QuotedString\r\n\r\n        protected object GetTokenAsDoublyQuotedString(int startIndex, Encoding/*!*/ encoding, bool forceBinaryString)\r\n\t\t{\r\n            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);\r\n\r\n\t\t\tint buffer_pos = token_start + startIndex + 1;\r\n            \r\n\t\t\t// the following loops expect the token ending by \"\r\n\t\t\tDebug.Assert(buffer[buffer_pos - 1] == '\"' && buffer[token_end - 1] == '\"');\r\n\r\n\t\t\t//StringBuilder result = new StringBuilder(TokenLength);\r\n\r\n            char c;\r\n            while ((c = buffer[buffer_pos++]) != '\"')\r\n\t\t\t{\r\n\t\t\t\tif (c == '\\\\')\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (c = buffer[buffer_pos++])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 'n':\r\n\t\t\t\t\t\t\tresult.Append('\\n');\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'r':\r\n\t\t\t\t\t\t\tresult.Append('\\r');\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 't':\r\n\t\t\t\t\t\t\tresult.Append('\\t');\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\tcase '$':\r\n\t\t\t\t\t\tcase '\"':\r\n\t\t\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'C':\r\n\t\t\t\t\t\t\tif (!inUnicodeString) goto default;\r\n\t\t\t\t\t\t\tresult.Append(ParseCodePointName(ref buffer_pos));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'u':\r\n\t\t\t\t\t\tcase 'U':\r\n\t\t\t\t\t\t\tif (!inUnicodeString) goto default;\r\n\t\t\t\t\t\t\tresult.Append(ParseCodePoint(c == 'u' ? 4 : 6, ref buffer_pos));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'x':\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint digit;\r\n\t\t\t\t\t\t\t\tif ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tint hex_code = digit;\r\n\t\t\t\t\t\t\t\t\tbuffer_pos++;\r\n\t\t\t\t\t\t\t\t\tif ((digit = Convert.AlphaNumericToDigit(buffer[buffer_pos])) < 16)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tbuffer_pos++;\r\n\t\t\t\t\t\t\t\t\t\thex_code = (hex_code << 4) + digit;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n                                    //encodeBytes[0] = (byte)hex_code;\r\n                                    //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));\r\n                                    result.Append((byte)hex_code);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tresult.Append('\\\\');\r\n\t\t\t\t\t\t\t\t\tresult.Append('x');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint digit;\r\n\t\t\t\t\t\t\t\tif ((digit = Convert.NumericToDigit(c)) < 8)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tint octal_code = digit;\r\n\r\n\t\t\t\t\t\t\t\t\tif ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\toctal_code = (octal_code << 3) + digit;\r\n\t\t\t\t\t\t\t\t\t\tbuffer_pos++;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif ((digit = Convert.NumericToDigit(buffer[buffer_pos])) < 8)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tbuffer_pos++;\r\n\t\t\t\t\t\t\t\t\t\t\toctal_code = (octal_code << 3) + digit;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n                                    //encodeBytes[0] = (byte)octal_code;\r\n                                    //result.Append(encodeChars, 0, encoding.GetChars(encodeBytes, 0, 1, encodeChars, 0));\r\n                                    result.Append((byte)octal_code);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tresult.Append('\\\\');\r\n\t\t\t\t\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result.Result;\r\n\t\t}\r\n\r\n        protected object GetTokenAsSinglyQuotedString(int startIndex, Encoding/*!*/ encoding, bool forceBinaryString)\r\n\t\t{\r\n            PhpStringBuilder result = new PhpStringBuilder(encoding, forceBinaryString, TokenLength);\r\n\r\n\t\t\tint buffer_pos = token_start + startIndex + 1;\r\n\r\n\t\t\t// the following loops expect the token ending by '\r\n\t\t\tDebug.Assert(buffer[buffer_pos - 1] == '\\'' && buffer[token_end - 1] == '\\'');\r\n\r\n\t\t\t//StringBuilder result = new StringBuilder(TokenLength);\r\n\t\t\tchar c;\r\n\r\n\t\t\twhile ((c = buffer[buffer_pos++]) != '\\'')\r\n\t\t\t{\r\n\t\t\t\tif (c == '\\\\')\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (c = buffer[buffer_pos++])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase '\\\\':\r\n\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t// ??? will cause many problems ... but PHP allows this\r\n\t\t\t\t\t\t//case 'C':\r\n\t\t\t\t\t\t//  if (!inUnicodeString) goto default;\r\n\t\t\t\t\t\t//  result.Append(ParseCodePointName(ref buffer_pos));\r\n\t\t\t\t\t\t//  break;\r\n\r\n\t\t\t\t\t\t//case 'u':\r\n\t\t\t\t\t\t//case 'U':\r\n\t\t\t\t\t\t//  if (!inUnicodeString) goto default;\r\n\t\t\t\t\t\t//  result.Append(ParseCodePoint( c == 'u' ? 4 : 6, ref buffer_pos));\r\n\t\t\t\t\t\t//  break;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tresult.Append('\\\\');\r\n\t\t\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.Append(c);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            return result.Result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        private string ParseCodePointName(ref int pos)\r\n\t\t{\r\n\t\t\tif (buffer[pos] == '{')\r\n\t\t\t{\r\n\t\t\t\tint start = ++pos;\r\n\t\t\t\twhile (pos < token_end && buffer[pos] != '}') pos++;\r\n\r\n\t\t\t\tif (pos < token_end)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring name = new String(buffer, start, pos - start);\r\n\r\n\t\t\t\t\t// TODO: name look-up\r\n\t\t\t\t\t// return ...[name];\r\n\r\n\t\t\t\t\t// skip '}'\r\n\t\t\t\t\tpos++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//errors.Add(Errors.InvalidCodePointName, sourceFile, );\r\n\r\n\t\t\treturn \"?\";\r\n\t\t}\r\n\r\n\t\tprivate string ParseCodePoint(int maxLength, ref int pos)\r\n\t\t{\r\n\t\t\tint digit;\r\n\t\t\tint code_point = 0;\r\n\t\t\twhile (maxLength > 0 && (digit = Convert.NumericToDigit(buffer[pos])) < 16)\r\n\t\t\t{\r\n\t\t\t\tcode_point = code_point << 4 + digit;\r\n\t\t\t\tpos++;\r\n\t\t\t\tmaxLength--;\r\n\t\t\t}\r\n\r\n\t\t\tif (maxLength != 0)\r\n\t\t\t{\r\n\t\t\t\t// TODO: warning\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif ((code_point < 0 || code_point > 0x10ffff) || (code_point >= 0xd800 && code_point <= 0xdfff))\r\n\t\t\t\t{\r\n\t\t\t\t\t// TODO: errors.Add(Errors.InvalidCodePoint, sourceFile, tokenPosition.Short, GetTokenString());\r\n\t\t\t\t\treturn \"?\";\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn StringUtils.Utf32ToString(code_point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (ArgumentOutOfRangeException)\r\n\t\t\t{\r\n\t\t\t\t// TODO: errors.Add(Errors.InvalidCodePoint, sourceFile, tokenPosition.Short, GetTokenString());\r\n\t\t\t\treturn \"?\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate int GetPragmaValueStart(int directiveLength)\r\n\t\t{\r\n\t\t\tint buffer_pos = token_start + \"#pragma\".Length;\r\n\t\t\tDebug.Assert(new String(buffer, token_start, buffer_pos - token_start) == \"#pragma\");\r\n\r\n\t\t\twhile (buffer[buffer_pos] == ' ' || buffer[buffer_pos] == '\\t') buffer_pos++;\r\n\r\n\t\t\tbuffer_pos += directiveLength;\r\n\r\n\t\t\twhile (buffer[buffer_pos] == ' ' || buffer[buffer_pos] == '\\t') buffer_pos++;\r\n\r\n\t\t\treturn buffer_pos - token_start;\r\n\t\t}\r\n\r\n\t\tprotected string GetTokenAsFilePragma()\r\n\t\t{\r\n\t\t\tint start_offset = GetPragmaValueStart(\"file\".Length);\r\n\t\t\tint end = token_end - 1;\r\n\r\n\t\t\twhile (end > 0 && Char.IsWhiteSpace(buffer[end])) end--;\r\n\r\n\t\t\treturn GetTokenSubstring(start_offset, end - token_start - start_offset + 1);\r\n\t\t}\r\n\r\n\t\tprotected int? GetTokenAsLinePragma()\r\n\t\t{\r\n\t\t\tint start_offset = GetPragmaValueStart(\"line\".Length);\r\n\r\n\t\t\tint sign = +1;\r\n\t\t\t\r\n\t\t\tif (GetTokenChar(start_offset) == '-')\r\n\t\t\t{\r\n\t\t\t\tsign = -1;\r\n\t\t\t\tstart_offset++;\r\n\t\t\t}\r\n\r\n\t\t\t// TP_COMMENT: modified call to GetTokenAsDecimalNumber\r\n\t\t\tSemanticValueType val = default(SemanticValueType);\r\n\t\t\tTokens ret = GetTokenAsDecimalNumber(start_offset, 10, ref val);\r\n\r\n\t\t\t// multiplication cannot overflow as ivalue >= 0\r\n\t\t\treturn (ret!=Tokens.T_LNUMBER) ? null : (int?)(val.Integer * sign);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tprivate char Map(char c)\r\n\t\t{\r\n\t\t\treturn (c > SByte.MaxValue) ? 'a' : c;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t * #region Unit Test\r\n\t\t\t\t#if DEBUG\r\n\r\n\t\t\t\t[Test]\r\n\t\t\t\tstatic void Test2()\r\n\t\t\t\t{\r\n\t\t\t\t\tDebug.Assert(IsInteger(\"000000000000000001\"));\r\n\t\t\t\t\tDebug.Assert(IsInteger(\"0000\"));\r\n\t\t\t\t\tDebug.Assert(IsInteger(\"0\"));\r\n\t\t\t\t\tDebug.Assert(IsInteger(\"2147483647\"));\r\n\t\t\t\t\tDebug.Assert(!IsInteger(\"2147483648\"));\r\n\t\t\t\t\tDebug.Assert(!IsInteger(\"2147483648999999999999999999999999999999999999\"));\r\n\r\n\t\t\t\t\tDebug.Assert(IsHexInteger(\"0x00000000000001\"));\r\n\t\t\t\t\tDebug.Assert(IsHexInteger(\"0x00000\"));\r\n\t\t\t\t\tDebug.Assert(IsHexInteger(\"0x\"));\r\n\t\t\t\t\tDebug.Assert(!IsHexInteger(\"0x0012ABC67891\"));\r\n\t\t\t\t\tDebug.Assert(IsHexInteger(\"0xFFFFFFFF\"));\r\n\t\t\t\t\tDebug.Assert(!IsHexInteger(\"0x100000000\"));\r\n\r\n\t\t\t\t\tDebug.Assert(HereDocLabelsEqual(\"EOT\", \"EOT;\\n\"));\r\n\t\t\t\t\tDebug.Assert(!HereDocLabelsEqual(\"EOT\", \"EOt\\n\"));\r\n\t\t\t\t\tDebug.Assert(!HereDocLabelsEqual(\"EOT\", \"EOTT;\\n\"));\r\n\t\t\t\t\tDebug.Assert(!HereDocLabelsEqual(\"EOT\", \"EOTT\\n\"));\r\n\t\t\t\t\tDebug.Assert(!HereDocLabelsEqual(\"EOTX\", \"EOT\\r\"));\r\n\t\t\t\t\tDebug.Assert(!HereDocLabelsEqual(\"EOTXYZ\", \"EOT\\r\"));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t#endif\r\n\t\t\t\t#endregion\r\n\t\t*/\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Parser.cs",
    "content": "/*\r\n\r\n Copyright (c) 2007- DEVSENSE\r\n Copyright (c) 2003-2006 Martin Maly, Ladislav Prosek, Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Linq;\r\n\r\nusing PHP.Core.AST;\r\nusing FcnParam = System.Tuple<System.Collections.Generic.List<PHP.Core.AST.TypeRef>, System.Collections.Generic.List<PHP.Core.AST.ActualParam>, System.Collections.Generic.List<PHP.Core.AST.Expression>>;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n\t#region Helpers\r\n    \r\n    /// <summary>\r\n    /// Sink for specific language elements.\r\n    /// Methods of this interface are called by the parser.\r\n    /// In this way implementers are notified about declarations already during parsing,\r\n    /// note root AST is not available at this time.\r\n    /// </summary>\r\n\tpublic interface IReductionsSink\r\n\t{\r\n\t\tvoid InclusionReduced(Parser/*!*/ parser, IncludingEx/*!*/ decl);\r\n\t\tvoid FunctionDeclarationReduced(Parser/*!*/ parser, FunctionDecl/*!*/ decl);\r\n\t\tvoid TypeDeclarationReduced(Parser/*!*/ parser, TypeDecl/*!*/ decl);\r\n\t\tvoid GlobalConstantDeclarationReduced(Parser/*!*/ parser, GlobalConstantDecl/*!*/ decl);\r\n        void NamespaceDeclReduced(Parser/*!*/ parser, NamespaceDecl/*!*/ decl);\r\n        void LambdaFunctionReduced(Parser/*!*/ parser, LambdaFunctionExpr/*!*/ decl);\r\n\t}\r\n\r\n    // Due to a MCS bug, it has to be in the other partial class in generated (Generated/Parser.cs)\r\n    // .. uncomment the following once it is fixed!\r\n\r\n    [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]\r\n\tpublic partial struct SemanticValueType\r\n\t{\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tif (Object != null) return Object.ToString();\r\n\t\t\tif (Offset != 0) return String.Format(\"[{0}-{1}]\", Offset, Integer);\r\n\t\t\tif (Double != 0.0) return Double.ToString();\r\n\t\t\treturn Integer.ToString();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\tpublic partial class Parser : ICommentsSink, IScannerHandler\r\n\t{\r\n\t\t#region Reductions Sinks\r\n\r\n        private sealed class NullReductionsSink : IReductionsSink\r\n\t\t{\r\n\t\t\tvoid IReductionsSink.InclusionReduced(Parser/*!*/ parser, IncludingEx/*!*/ incl)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.FunctionDeclarationReduced(Parser/*!*/ parser, FunctionDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.TypeDeclarationReduced(Parser/*!*/ parser, TypeDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.GlobalConstantDeclarationReduced(Parser/*!*/ parser, GlobalConstantDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t}\r\n\r\n            void IReductionsSink.NamespaceDeclReduced(Parser parser, NamespaceDecl decl)\r\n            {\r\n            }\r\n\r\n            void IReductionsSink.LambdaFunctionReduced(Parser parser, LambdaFunctionExpr decl)\r\n            {\r\n            }\r\n        }\r\n\r\n\t\tpublic sealed class ReductionsCounter : IReductionsSink\r\n\t\t{\r\n\t\t\tpublic int InclusionCount { get { return _inclusionCount; } }\r\n\t\t\tprivate int _inclusionCount = 0;\r\n\r\n\t\t\tpublic int FunctionCount { get { return _functionCount; } }\r\n\t\t\tprivate int _functionCount = 0;\r\n\r\n\t\t\tpublic int TypeCount { get { return _typeCount; } }\r\n\t\t\tprivate int _typeCount = 0;\r\n\r\n\t\t\tpublic int ConstantCount { get { return _constantCount; } }\r\n\t\t\tprivate int _constantCount = 0;\r\n\r\n            void IReductionsSink.InclusionReduced(Parser/*!*/ parser, IncludingEx/*!*/ incl)\r\n\t\t\t{\r\n\t\t\t\t_inclusionCount++;\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.FunctionDeclarationReduced(Parser/*!*/ parser, FunctionDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t\t_functionCount++;\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.TypeDeclarationReduced(Parser/*!*/ parser, TypeDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t\t_typeCount++;\r\n\t\t\t}\r\n\r\n\t\t\tvoid IReductionsSink.GlobalConstantDeclarationReduced(Parser/*!*/ parser, GlobalConstantDecl/*!*/ decl)\r\n\t\t\t{\r\n\t\t\t\t_constantCount++;\r\n\t\t\t}\r\n\r\n            void IReductionsSink.NamespaceDeclReduced(Parser parser, NamespaceDecl decl)\r\n            {\r\n            }\r\n\r\n            void IReductionsSink.LambdaFunctionReduced(Parser parser, LambdaFunctionExpr decl)\r\n            {\r\n            }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n        \r\n        protected sealed override int EofToken\r\n\t\t{\r\n\t\t\tget { return (int)Tokens.EOF; }\r\n\t\t}\r\n\r\n\t\tprotected sealed override int ErrorToken\r\n\t\t{\r\n\t\t\tget { return (int)Tokens.ERROR; }\r\n\t\t}\r\n\r\n        protected override Text.Span CombinePositions(Text.Span first, Text.Span last)\r\n        {\r\n            if (last.IsValid)\r\n            {\r\n                if (first.IsValid)\r\n                    return Text.Span.Combine(first, last);\r\n                else\r\n                    return last;\r\n            }\r\n            else\r\n                return first;\r\n        }\r\n\r\n        protected override Text.Span InvalidPosition\r\n        {\r\n            get\r\n            {\r\n                return Text.Span.Invalid;\r\n            }\r\n        }\r\n\r\n\t\tprivate Scanner scanner;\r\n\t\tprivate LanguageFeatures features;\r\n\r\n\t\tpublic ErrorSink ErrorSink { get { return errors; } }\r\n\t\tprivate ErrorSink errors;\r\n\r\n\t\tpublic SourceUnit SourceUnit { get { return sourceUnit; } }\r\n\t\tprivate SourceUnit sourceUnit;\r\n\r\n\t\tprivate IReductionsSink/*!*/reductionsSink;\r\n\t\tprivate bool unicodeSemantics;\r\n\t\tprivate TextReader reader;\r\n\t\tprivate Scope currentScope;\r\n\r\n\t\tpublic bool AllowGlobalCode { get { return allowGlobalCode; } set { allowGlobalCode = value; } }\r\n\t\tprivate bool allowGlobalCode;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The root of AST.\r\n\t\t/// </summary>\r\n\t\tprivate GlobalCode astRoot;\r\n\r\n\t\tprivate const int strBufSize = 100;\r\n\r\n        private NamespaceDecl currentNamespace;\r\n        private bool IsInGlobalNamespace { get { return currentNamespace == null || currentNamespace.QualifiedName.Namespaces.Length == 0; } }\r\n        private string CurrentNamespaceName { get { return IsInGlobalNamespace ? string.Empty : currentNamespace.QualifiedName.ToString(); } }\r\n\r\n        /// <summary>\r\n        /// Special names not namespaced. These names will not be translated using aliases and current namespace.\r\n        /// The list is dynamically extended during parsing with generic arguments.\r\n        /// </summary>\r\n        private readonly HashSet<string>/*!*/reservedTypeNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase)\r\n        {\r\n            Name.SelfClassName.Value,\r\n            Name.StaticClassName.Value,\r\n            Name.ParentClassName.Value,\r\n        };\r\n\r\n\t\t// stack of string buffers; used when processing encaps strings\r\n        private readonly Stack<PhpStringBuilder> strBufStack = new Stack<PhpStringBuilder>(100);\r\n\r\n\t\tpublic Parser()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tprivate new bool Parse()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n        public GlobalCode Parse(SourceUnit/*!*/ sourceUnit,\r\n            TextReader/*!*/ reader, ErrorSink/*!*/ errors,\r\n\t\t\tIReductionsSink reductionsSink, Lexer.LexicalStates initialLexicalState,\r\n\t\t\tLanguageFeatures features, int positionShift = 0)\r\n\t\t{\r\n\t\t\tDebug.Assert(reader != null && errors != null);\r\n\r\n\t\t\t// initialization:\r\n            this.sourceUnit = sourceUnit;\r\n            this.errors = errors;\r\n            this.features = features;\r\n            this.reader = reader;\r\n            this.reductionsSink = reductionsSink ?? new NullReductionsSink();\r\n            InitializeFields();\r\n\r\n            this.scanner = new Scanner(reader, sourceUnit, errors, this, this, features, positionShift) { CurrentLexicalState = initialLexicalState };\r\n            this.scanner.CurrentLexicalState = initialLexicalState;\r\n\t\t\tthis.currentScope = new Scope(1); // starts assigning scopes from 2 (1 is reserved for prepended inclusion)\r\n\r\n\t\t\tthis.unicodeSemantics = (features & LanguageFeatures.UnicodeSemantics) != 0;\r\n\r\n\t\t\tbase.Scanner = this.scanner;\r\n\t\t\tbase.Parse();\r\n\r\n            GlobalCode result = astRoot;\r\n\r\n\t\t\t// clean and let GC collect unused AST and other stuff:\r\n\t\t\tClearFields();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tprivate void InitializeFields()\r\n\t\t{\r\n            InitializeCommentSink();\r\n            strBufStack.Clear();\r\n            condLevel = 0;\r\n\r\n            Debug.Assert(sourceUnit != null);\r\n\r\n            if (sourceUnit.CurrentNamespace.HasValue && sourceUnit.CurrentNamespace.Value.Namespaces.Length > 0)\r\n            {   // J: inject current namespace from sourceUnit:\r\n                this.currentNamespace = new AST.NamespaceDecl(default(Text.Span), sourceUnit.CurrentNamespace.Value.ToStringList(), true);\r\n\r\n                // add aliases into the namespace:\r\n                if (sourceUnit.Naming.Aliases != null)\r\n                    foreach (var alias in sourceUnit.Naming.Aliases)\r\n                        this.currentNamespace.Naming.AddAlias(alias.Key, alias.Value);\r\n            }\r\n            else\r\n            {\r\n                this.currentNamespace = null;\r\n            }\r\n\t\t}\r\n\r\n\t\tprivate void ClearFields()\r\n\t\t{\r\n            ClearCommentSink();\r\n            \r\n            scanner = null;\r\n\t\t\tfeatures = 0;\r\n\t\t\terrors = null;\r\n\t\t\tsourceUnit = null;\r\n\t\t\treductionsSink = null;\r\n\t\t\tastRoot = null;\r\n\t\t\treader = null;\r\n\t\t}\r\n\r\n        #region Conditional Code, Scope\r\n\r\n\t\tprivate int condLevel;\r\n\r\n\t\tprivate void EnterConditionalCode()\r\n\t\t{\r\n\t\t\tcondLevel++;\r\n\t\t}\r\n\r\n\t\tprivate void LeaveConditionalCode()\r\n\t\t{\r\n\t\t\tDebug.Assert(condLevel > 0);\r\n\t\t\tcondLevel--;\r\n\t\t}\r\n\r\n\t\tpublic bool IsCurrentCodeConditional\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn condLevel > 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic bool IsCurrentCodeOneLevelConditional\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn condLevel > 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal Scope GetScope()\r\n\t\t{\r\n\t\t\tcurrentScope.Increment();\r\n\t\t\treturn currentScope;\r\n\t\t}\r\n\r\n\t\t#endregion Conditional Code\r\n\r\n\t\t#region Complex Productions\r\n\r\n        private Expression CreateConcatExOrStringLiteral(Text.Span p, List<Expression> exprs, bool trimEoln)\r\n\t\t{\r\n\t\t\tPhpStringBuilder encapsed_str = strBufStack.Pop();\r\n\t\t\t\r\n\t\t\tif (trimEoln)\r\n                encapsed_str.TrimEoln();\r\n\r\n\t\t\tif (exprs.Count > 0)\r\n\t\t\t{\r\n                if (encapsed_str.Length > 0)\r\n                    exprs.Add(encapsed_str.CreateLiteral());\r\n\r\n\t\t\t\treturn new ConcatEx(p, exprs);\r\n\t\t\t}\r\n            else\r\n            {\r\n                return encapsed_str.CreateLiteral();\r\n            }\r\n\t\t}\r\n\r\n        private VariableUse CreateStaticFieldUse(Text.Span span, CompoundVarUse/*!*/ className, CompoundVarUse/*!*/ field)\r\n        {\r\n            return CreateStaticFieldUse(span, new IndirectTypeRef(span, className, TypeRef.EmptyList), field);\r\n        }\r\n        private VariableUse CreateStaticFieldUse(Text.Span span, GenericQualifiedName/*!*/ className, Text.Span classNameSpan, CompoundVarUse/*!*/ field)\r\n        {\r\n            return CreateStaticFieldUse(span, DirectTypeRef.FromGenericQualifiedName(classNameSpan, className), field);\r\n        }\r\n\t\tprivate VariableUse CreateStaticFieldUse(Text.Span span, TypeRef/*!*/ typeRef, CompoundVarUse/*!*/ field)\r\n\t\t{\r\n\t\t\tDirectVarUse dvu;\r\n\t\t\tIndirectVarUse ivu;\r\n\r\n\t\t\tif ((dvu = field as DirectVarUse) != null)\r\n\t\t\t{\r\n                return new DirectStFldUse(span, typeRef, dvu.VarName, field.Span);\r\n\t\t\t}\r\n\t\t\telse if ((ivu = field as IndirectVarUse) != null)\r\n\t\t\t{\r\n                return new IndirectStFldUse(span, typeRef, ivu.VarNameEx);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tItemUse iu = (ItemUse)field;\r\n                iu.Array = CreateStaticFieldUse(iu.Array.Span, typeRef, (CompoundVarUse)iu.Array);\r\n\t\t\t\treturn iu;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate ForeachStmt/*!*/ CreateForeachStmt(Text.Span pos, Expression/*!*/ enumeree, ForeachVar/*!*/ var1,\r\n\t\t  Text.Span pos1, ForeachVar var2, Statement/*!*/ body)\r\n\t\t{\r\n\t\t\tForeachVar key, value;\r\n\t\t\tif (var2 != null)\r\n\t\t\t{\r\n\t\t\t\tkey = var1;\r\n\t\t\t\tvalue = var2;\r\n\r\n\t\t\t\tif (key.Alias)\r\n\t\t\t\t{\r\n\t\t\t\t\terrors.Add(Errors.KeyAlias, SourceUnit, pos1);\r\n\t\t\t\t\tkey.Alias = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tkey = null;\r\n\t\t\t\tvalue = var1;\r\n\t\t\t}\r\n\r\n\t\t\treturn new ForeachStmt(pos, enumeree, key, value, body);\r\n\t\t}\r\n\r\n\t\tprivate void CheckVariableUse(Text.Span span, object item)\r\n\t\t{\r\n\t\t\tif (item as VariableUse == null)\r\n\t\t\t{\r\n                errors.Add(FatalErrors.CheckVarUseFault, SourceUnit, span);\r\n                throw new CompilerException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n        private FcnParam/*!*/ CreateFcnParam(FcnParam/*!*/fcnParam, Expression/*!*/arrayDereference)\r\n        {\r\n            var arrayKeyList = fcnParam.Item3;\r\n            if (arrayKeyList == null)\r\n                arrayKeyList = new List<Expression>(1);\r\n\r\n            arrayKeyList.Add(arrayDereference);\r\n\r\n            return new FcnParam(fcnParam.Item1, fcnParam.Item2, arrayKeyList);\r\n        }\r\n\r\n        private static VarLikeConstructUse/*!*/ CreateFcnArrayDereference(Text.Span pos, VarLikeConstructUse/*!*/varUse, List<Expression> arrayKeysExpression)\r\n        {\r\n            if (arrayKeysExpression != null && arrayKeysExpression.Count > 0)\r\n            {\r\n                // wrap fcnCall into ItemUse\r\n                foreach (var keyExpr in arrayKeysExpression)\r\n                    varUse = new ItemUse(pos, varUse, keyExpr, true);\r\n            }\r\n\r\n            return varUse;\r\n        }\r\n\r\n        private static VarLikeConstructUse/*!*/ DereferenceFunctionArrayAccess(VarLikeConstructUse/*!*/varUse)\r\n        {\r\n            ItemUse itemUse;\r\n            while ((itemUse = varUse as ItemUse) != null && itemUse.IsFunctionArrayDereferencing)\r\n                varUse = itemUse.Array;\r\n\r\n            return varUse;\r\n        }\r\n\r\n\t\tprivate static VarLikeConstructUse/*!*/ CreateVariableUse(Text.Span pos, VarLikeConstructUse/*!*/ variable, VarLikeConstructUse/*!*/ property,\r\n                                                           FcnParam parameters, VarLikeConstructUse chain)\r\n\t\t{\r\n\t\t\tif (parameters != null)\r\n\t\t\t{\r\n\t\t\t\tif (property is ItemUse)\r\n\t\t\t\t{\r\n\t\t\t\t\tproperty.IsMemberOf = variable;\r\n                    property = new IndirectFcnCall(pos, property, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tDirectVarUse direct_use;\r\n\t\t\t\t\tif ((direct_use = property as DirectVarUse) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tQualifiedName method_name = new QualifiedName(new Name(direct_use.VarName.Value), Name.EmptyNames);\r\n                        property = new DirectFcnCall(pos, method_name, null, property.Span, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIndirectVarUse indirect_use = (IndirectVarUse)property;\r\n                        property = new IndirectFcnCall(pos, indirect_use.VarNameEx, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n\t\t\t\t\t}\r\n\r\n                    property.IsMemberOf = variable;\r\n                }\r\n\r\n                // wrap into ItemUse\r\n                property = CreateFcnArrayDereference(pos, property, parameters.Item3);\r\n            }\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tproperty.IsMemberOf = variable;\r\n\t\t\t}\r\n\r\n\t\t\tif (chain != null)\r\n\t\t\t{\r\n\t\t\t\t// finds the first variable use in the chain and connects it to the property\r\n\r\n\t\t\t\tVarLikeConstructUse first_in_chain = chain;\r\n                for (;;)\r\n                {\r\n                    first_in_chain = DereferenceFunctionArrayAccess(first_in_chain);\r\n\r\n                    if (first_in_chain.IsMemberOf != null)\r\n                        first_in_chain = first_in_chain.IsMemberOf;\r\n                    else\r\n                        break;\r\n                }\r\n\r\n\t\t\t\tfirst_in_chain.IsMemberOf = property;\r\n\t\t\t\treturn chain;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn property;\r\n\t\t\t}\r\n\t\t}\r\n\r\n        private static VarLikeConstructUse/*!*/ CreatePropertyVariable(Text.Span pos, CompoundVarUse/*!*/ property, FcnParam parameters)\r\n\t\t{\r\n\t\t\tif (parameters != null)\r\n\t\t\t{\r\n\t\t\t\tDirectVarUse direct_use;\r\n\t\t\t\tIndirectVarUse indirect_use;\r\n                VarLikeConstructUse fcnCall;\r\n\r\n\t\t\t\tif ((direct_use = property as DirectVarUse) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tQualifiedName method_name = new QualifiedName(new Name(direct_use.VarName.Value), Name.EmptyNames);\r\n                    fcnCall = new DirectFcnCall(pos, method_name, null, property.Span, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n\t\t\t\t}\r\n                else if ((indirect_use = property as IndirectVarUse) != null)\r\n                {\r\n                    fcnCall = new IndirectFcnCall(pos, indirect_use.VarNameEx, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n                }\r\n                else\r\n                {\r\n                    fcnCall = new IndirectFcnCall(pos, (ItemUse)property, (List<ActualParam>)parameters.Item2, (List<TypeRef>)parameters.Item1);\r\n                }\r\n\r\n                // wrap fcnCall into ItemUse\r\n                fcnCall = CreateFcnArrayDereference(pos, fcnCall, parameters.Item3);\r\n\r\n                return fcnCall;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn property;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static VarLikeConstructUse/*!*/ CreatePropertyVariables(VarLikeConstructUse chain, VarLikeConstructUse/*!*/ member)\r\n\t\t{\r\n            // dereference function array access:\r\n            var element = DereferenceFunctionArrayAccess(member);\r\n            \r\n            // \r\n            if (chain != null)\r\n\t\t\t{\r\n                IndirectFcnCall ifc = element as IndirectFcnCall;\r\n\r\n\t\t\t\tif (ifc != null && ifc.NameExpr as ItemUse != null)\r\n\t\t\t\t{\r\n\t\t\t\t\t// we know that FcNAme is VLCU and not Expression, because chain is being parsed:\r\n\t\t\t\t\t((VarLikeConstructUse)ifc.NameExpr).IsMemberOf = chain;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n                    element.IsMemberOf = chain;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n                element.IsMemberOf = null;\r\n\t\t\t}\r\n\r\n\t\t\treturn member;\r\n\t\t}\r\n\r\n        private DirectFcnCall/*!*/ CreateDirectFcnCall(Text.Span pos, QualifiedName qname, Text.Span qnamePosition, List<ActualParam> args, List<TypeRef> typeArgs)\r\n        {\r\n            QualifiedName? fallbackQName;\r\n\r\n            TranslateFallbackQualifiedName(ref qname, out fallbackQName, this.CurrentNaming.FunctionAliases);\r\n            return new DirectFcnCall(pos, qname, fallbackQName, qnamePosition, args, typeArgs);\r\n        }\r\n\r\n        private GlobalConstUse/*!*/ CreateGlobalConstUse(Text.Span pos, QualifiedName qname)\r\n        {\r\n            QualifiedName? fallbackQName;\r\n\r\n            if (qname.IsSimpleName && (qname == QualifiedName.Null || qname == QualifiedName.True || qname == QualifiedName.False))\r\n            {\r\n                // special global consts\r\n                fallbackQName = null;\r\n                qname.IsFullyQualifiedName = true;\r\n            }\r\n            else\r\n            {\r\n                TranslateFallbackQualifiedName(ref qname, out fallbackQName, this.CurrentNaming.ConstantAliases);\r\n            }\r\n            \r\n            return new GlobalConstUse(pos, qname, fallbackQName);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Process <paramref name=\"qname\"/>. Ensure <paramref name=\"qname\"/> will be fully qualified.\r\n        /// Outputs <paramref name=\"fallbackQName\"/> which should be used if <paramref name=\"qname\"/> does not refer to any existing entity.\r\n        /// </summary>\r\n        /// <param name=\"qname\"></param>\r\n        /// <param name=\"fallbackQName\"></param>\r\n        /// <remarks>Used for handling global function call and global constant use.\r\n        /// <param name=\"aliases\">Optional. Dictionary of aliases for the <paramref name=\"qname\"/>.</param>\r\n        /// In PHP entity in current namespace is tried first, then it falls back to global namespace.</remarks>\r\n        private void TranslateFallbackQualifiedName(ref QualifiedName qname, out QualifiedName? fallbackQName, Dictionary<string, QualifiedName> aliases)\r\n        {\r\n            // aliasing\r\n            QualifiedName tmp;\r\n            if (qname.IsSimpleName && aliases != null && aliases.TryGetValue(qname.Name.Value, out tmp))\r\n            {\r\n                qname = tmp;\r\n                fallbackQName = null;\r\n                return;\r\n            }\r\n\r\n            //\r\n            qname = TranslateNamespace(qname);\r\n\r\n            if (!qname.IsFullyQualifiedName && qname.IsSimpleName &&\r\n                !IsInGlobalNamespace && !sourceUnit.HasImportedNamespaces &&\r\n                !reservedTypeNames.Contains(qname.Name.Value))\r\n            {\r\n                // \"\\foo\"\r\n                fallbackQName = new QualifiedName(qname.Name) { IsFullyQualifiedName = true };\r\n\r\n                // \"namespace\\foo\"\r\n                qname = new QualifiedName(qname.Name, currentNamespace.QualifiedName.Namespaces) { IsFullyQualifiedName = true };\r\n            }\r\n            else\r\n            {\r\n                fallbackQName = null;\r\n                qname.IsFullyQualifiedName = true;  // just ensure\r\n            }\r\n        }\r\n\r\n\t\tprivate Expression/*!*/ CheckInitializer(Text.Span pos, Expression/*!*/ initializer)\r\n\t\t{\r\n\t\t\tif (initializer is ArrayEx)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.ArrayInClassConstant, SourceUnit, pos);\r\n\t\t\t\treturn new NullLiteral(pos);\r\n\t\t\t}\r\n\r\n\t\t\treturn initializer;\r\n\t\t}\r\n\r\n\t\tprivate PhpMemberAttributes CheckPrivateType(Text.Span pos)\r\n\t\t{\r\n\t\t\tif (currentNamespace != null)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PrivateClassInGlobalNamespace, SourceUnit, pos);\r\n\t\t\t\treturn PhpMemberAttributes.None;\r\n\t\t\t}\r\n\r\n\t\t\treturn PhpMemberAttributes.Private;\r\n\t\t}\r\n\r\n\t\tprivate int CheckPartialType(Text.Span pos)\r\n\t\t{\r\n\t\t\tif (IsCurrentCodeConditional)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PartialConditionalDeclaration, SourceUnit, pos);\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (sourceUnit.IsTransient)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PartialTransientDeclaration, SourceUnit, pos);\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!sourceUnit.IsPure)\r\n\t\t\t{\r\n\t\t\t\terrors.Add(Errors.PartialImpureDeclaration, SourceUnit, pos);\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tprivate Statement/*!*/ CheckGlobalStatement(Statement/*!*/ statement)\r\n\t\t{\r\n\t\t\tif (sourceUnit.IsPure && !allowGlobalCode)\r\n\t\t\t{\r\n\t\t\t\tif (!statement.SkipInPureGlobalCode())\r\n\t\t\t\t\terrors.Add(Errors.GlobalCodeInPureUnit, SourceUnit, statement.Span);\r\n\r\n\t\t\t\treturn EmptyStmt.Skipped;\r\n\t\t\t}\r\n\r\n\t\t\treturn statement;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether a reserved class name is used in generic qualified name.\r\n\t\t/// </summary>\r\n\t\tprivate void CheckReservedNamesAbsence(Tuple<GenericQualifiedName, Text.Span> genericName)\r\n\t\t{\r\n            if (genericName != null)\r\n                CheckReservedNamesAbsence(genericName.Item1, genericName.Item2);\r\n\t\t}\r\n\r\n        private void CheckReservedNamesAbsence(GenericQualifiedName genericName, Text.Span span)\r\n        {\r\n            if (genericName.QualifiedName.IsReservedClassName)\r\n            {\r\n                errors.Add(Errors.CannotUseReservedName, SourceUnit, span, genericName.QualifiedName.Name);\r\n            }\r\n\r\n            if (genericName.GenericParams != null)\r\n                CheckReservedNamesAbsence(genericName.GenericParams, span);\r\n        }\r\n\r\n        private void CheckReservedNamesAbsence(object[] staticTypeRefs, Text.Span span)\r\n        {\r\n            foreach (object static_type_ref in staticTypeRefs)\r\n                if (static_type_ref is GenericQualifiedName)\r\n                    CheckReservedNamesAbsence((GenericQualifiedName)static_type_ref, span);\r\n        }\r\n\r\n        private void CheckReservedNamesAbsence(List<Tuple<GenericQualifiedName, Text.Span>> genericNames)\r\n\t\t{\r\n            if (genericNames != null)\r\n            {\r\n                int count = genericNames.Count;\r\n                for (int i = 0; i < count; i++)\r\n                    CheckReservedNamesAbsence(genericNames[i].Item1, genericNames[i].Item2);\r\n            }\r\n\t\t}\r\n\r\n\t\tprivate bool CheckReservedNameAbsence(Name typeName, Text.Span span)\r\n\t\t{\r\n            if (typeName.IsReservedClassName)\r\n            {\r\n                errors.Add(Errors.CannotUseReservedName, SourceUnit, span, typeName);\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n\t\t}\r\n\r\n        private void CheckTypeNameInUse(Name typeName, Text.Span span)\r\n        {\r\n            var aliases = this.CurrentNaming.Aliases;\r\n            if (reservedTypeNames.Contains(typeName.Value) || (aliases != null && aliases.ContainsKey(typeName.Value)))\r\n                errors.Add(FatalErrors.ClassAlreadyInUse, SourceUnit, span, CurrentNamespaceName + typeName.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check is given <paramref name=\"declarerName\"/> and its <paramref name=\"typeParams\"/> are without duplicity.\r\n        /// </summary>\r\n        /// <param name=\"typeParams\">Generic type parameters.</param>\r\n        /// <param name=\"declarerName\">Type name.</param>\r\n\t\tprivate void CheckTypeParameterNames(List<FormalTypeParam> typeParams, string/*!*/declarerName)\r\n\t\t{\r\n\t\t\tif (typeParams == null) return;\r\n            \r\n            var aliases = this.CurrentNaming.Aliases;\r\n\r\n\t\t\tfor (int i = 0; i < typeParams.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tif (typeParams[i].Name.Equals(declarerName))\r\n\t\t\t\t{\r\n\t\t\t\t\tErrorSink.Add(Errors.GenericParameterCollidesWithDeclarer, SourceUnit, typeParams[i].Span, declarerName);\r\n\t\t\t\t}\r\n                else if (aliases != null && aliases.ContainsKey(typeParams[i].Name.Value))\r\n                {\r\n                    ErrorSink.Add(Errors.GenericAlreadyInUse, SourceUnit, typeParams[i].Span, typeParams[i].Name.Value);\r\n                }\r\n                else\r\n                {\r\n                    for (int j = 0; j < i; j++)\r\n                    {\r\n                        if (typeParams[j].Name.Equals(typeParams[i].Name))\r\n                            errors.Add(Errors.DuplicateGenericParameter, SourceUnit, typeParams[i].Span);\r\n                    }\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate CustomAttribute.TargetSelectors IdentifierToTargetSelector(Text.Span span, string/*!*/ identifier)\r\n\t\t{\r\n\t\t\tif (identifier.EqualsOrdinalIgnoreCase(\"assembly\"))\r\n\t\t\t\treturn CustomAttribute.TargetSelectors.Assembly;\r\n\r\n\t\t\tif (identifier.EqualsOrdinalIgnoreCase(\"module\"))\r\n\t\t\t\treturn CustomAttribute.TargetSelectors.Module;\r\n\r\n            if (identifier.EqualsOrdinalIgnoreCase(\"return\"))\r\n                return CustomAttribute.TargetSelectors.Return;\r\n\r\n\t\t\terrors.Add(Errors.InvalidAttributeTargetSelector, SourceUnit, span, identifier);\r\n\t\t\treturn CustomAttribute.TargetSelectors.Default;\r\n\t\t}\r\n\r\n\t\tprivate List<CustomAttribute>/*!*/CustomAttributes(List<CustomAttribute>/*!*/ attrs, CustomAttribute.TargetSelectors targetSelector)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < attrs.Count; i++)\r\n\t\t\t\tattrs[i].TargetSelector = targetSelector;\r\n\r\n\t\t\treturn attrs;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        //#region Imports\r\n\r\n        ///// <summary>\r\n        ///// Import of a particular type or function.\r\n        ///// </summary>\r\n        //public void AddImport(Position position, DeclarationKind kind, List<string>/*!*/ names, string aliasName)\r\n        //{\r\n        //    QualifiedName qn = new QualifiedName(names, true, true);\r\n        //    Name alias = (aliasName != null) ? new Name(aliasName) : qn.Name;\r\n\r\n        //    switch (kind)\r\n        //    {\r\n        //        case DeclarationKind.Type:\r\n        //            if (!sourceUnit.AddTypeAlias(qn, alias))\r\n        //                errors.Add(Errors.ConflictingTypeAliases, SourceUnit, position);\r\n        //            break;\r\n\r\n        //        case DeclarationKind.Function:\r\n        //            if (!sourceUnit.AddFunctionAlias(qn, alias))\r\n        //                errors.Add(Errors.ConflictingFunctionAliases, SourceUnit, position);\r\n        //            break;\r\n\r\n        //        case DeclarationKind.Constant:\r\n        //            if (!sourceUnit.AddConstantAlias(qn, alias))\r\n        //                errors.Add(Errors.ConflictingConstantAliases, SourceUnit, position);\r\n        //            break;\r\n        //    }\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Import of a namespace with a qualified name.\r\n        ///// </summary>\r\n        //public void AddImport(List<string>/*!*/ namespaceNames)\r\n        //{\r\n        //    sourceUnit.AddImportedNamespace(new QualifiedName(namespaceNames, false, true));\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Import of a namespace with a simple name.\r\n        ///// </summary>\r\n        //public void AddImport(string namespaceName)\r\n        //{\r\n        //    sourceUnit.AddImportedNamespace(new QualifiedName(Name.EmptyBaseName, new Name[] { new Name(namespaceName) }));\r\n        //}\r\n        public void AddImport(QualifiedName namespaceName)\r\n        {\r\n            if (sourceUnit.IsPure)\r\n            {\r\n                ErrorSink.Add(Warnings.ImportDeprecated, SourceUnit, this.yypos);   // deprecated statement\r\n\r\n                sourceUnit.ImportedNamespaces.Add(namespaceName);\r\n            }\r\n            else\r\n            {\r\n                ErrorSink.Add(Errors.ImportOnlyInPureMode, sourceUnit, this.yypos); // does actually not happen, since T_IMPORT is not recognized outside Pure mode at all\r\n            }\r\n        }\r\n\r\n        //#endregion\r\n\r\n        #region aliases (use_statement)\r\n\r\n        /// <summary>\r\n        /// Dictionary of PHP aliases for the current scope.\r\n        /// </summary>\r\n        private NamingContext/*!*/ CurrentNaming\r\n        {\r\n            get\r\n            {\r\n                return (currentNamespace != null) ? currentNamespace.Naming : this.sourceUnit.Naming;\r\n            }\r\n        }\r\n\r\n        private void AddAliases(List<KeyValuePair<string, QualifiedName>>/*!*/list)\r\n        {\r\n            foreach (var pair in list)\r\n                AddAlias(pair.Value, pair.Key);\r\n        }\r\n\r\n        private void AddFunctionAliases(List<KeyValuePair<string, QualifiedName>>/*!*/list)\r\n        {\r\n            foreach (var pair in list)\r\n                AddFunctionAlias(pair.Value, pair.Key);\r\n        }\r\n\r\n        private void AddConstAliases(List<KeyValuePair<string, QualifiedName>>/*!*/list)\r\n        {\r\n            foreach (var pair in list)\r\n                AddConstAlias(pair.Value, pair.Key);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add PHP alias (through <c>use</c> keyword).\r\n        /// </summary>\r\n        /// <param name=\"fullQualifiedName\">Fully qualified aliased name.</param>\r\n        /// <param name=\"alias\">If not null, represents the alias name. Otherwise the last component from <paramref name=\"fullQualifiedName\"/> is used.</param>\r\n        private void AddAlias(QualifiedName fullQualifiedName, string alias)\r\n        {\r\n            Debug.Assert(!string.IsNullOrEmpty(fullQualifiedName.Name.Value));\r\n            Debug.Assert(fullQualifiedName.IsFullyQualifiedName);\r\n\r\n            //\r\n            alias = alias ?? fullQualifiedName.Name.Value;\r\n\r\n            // check if it aliases itself:\r\n            QualifiedName qualifiedAlias = new QualifiedName(\r\n                new Name(alias),\r\n                (currentNamespace != null) ? currentNamespace.QualifiedName : new QualifiedName(Name.EmptyBaseName));\r\n\r\n            if (fullQualifiedName == qualifiedAlias) return;    // ignore\r\n            \r\n            // add the alias:\r\n            var naming = this.CurrentNaming;\r\n            \r\n            // check for alias duplicity and add the alias:\r\n            // TODO: check if there is no conflict with some class declaration (this should be in runtime ... but this overriding looks like useful features)\r\n            if (reservedTypeNames.Contains(alias) || !naming.AddAlias(alias, fullQualifiedName))\r\n            {\r\n                errors.Add(FatalErrors.AliasAlreadyInUse, this.sourceUnit, this.yypos/*TODO: position of the alias itself*/, fullQualifiedName.NamespacePhpName, alias);\r\n            }\r\n        }\r\n\r\n        private void AddFunctionAlias(QualifiedName qname, string alias)\r\n        {\r\n            alias = alias ?? qname.Name.Value;\r\n            if (!this.CurrentNaming.AddFunctionAlias(alias, qname))\r\n            {\r\n                errors.Add(FatalErrors.AliasAlreadyInUse, this.sourceUnit, this.yypos/*TODO: position of the alias itself*/, qname.NamespacePhpName, alias);\r\n            }\r\n        }\r\n\r\n        private void AddConstAlias(QualifiedName qname, string alias)\r\n        {\r\n            alias = alias ?? qname.Name.Value;\r\n            if (!this.CurrentNaming.AddConstantAlias(alias, qname))\r\n            {\r\n                errors.Add(FatalErrors.AliasAlreadyInUse, this.sourceUnit, this.yypos/*TODO: position of the alias itself*/, qname.NamespacePhpName, alias);\r\n            }\r\n        }\r\n\r\n        private void ReserveTypeNames(List<FormalTypeParam> typeParams)\r\n        {\r\n            if (typeParams == null) return;\r\n            foreach (var param in typeParams)\r\n                reservedTypeNames.Add(param.Name.Value);\r\n        }\r\n        private void UnreserveTypeNames(List<FormalTypeParam> typeParams)\r\n        {\r\n            if (typeParams == null) return;\r\n            foreach (var param in typeParams)\r\n                reservedTypeNames.Remove(param.Name.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Transforms each item of <paramref name=\"qnameList\"/> using <see cref=\"TranslateAny(QualifiedName)\"/> function.\r\n        /// </summary>\r\n        /// <param name=\"qnameList\">List of qualified names.</param>\r\n        /// <returns>Reference to <paramref name=\"qnameList\"/>.</returns>\r\n        private List<QualifiedName> TranslateAny(List<QualifiedName> qnameList)\r\n        {\r\n            for (int i = 0; i < qnameList.Count; i++)\r\n                qnameList[i] = TranslateAny(qnameList[i]);\r\n            \r\n            return qnameList;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Translate the name using defined aliases. Any first part of the <see cref=\"QualifiedName\"/> will be translated.\r\n        /// </summary>\r\n        /// <param name=\"qname\">The name to translate.</param>\r\n        /// <returns>Translated qualified name.</returns>\r\n        /// <remarks>Fully qualified names are not translated.</remarks>\r\n        private QualifiedName TranslateAny(QualifiedName qname)\r\n        {\r\n            if (qname.IsFullyQualifiedName) return qname;\r\n\r\n            // skip special names:\r\n            if (qname.IsSimpleName)\r\n            {\r\n                if (reservedTypeNames.Contains(qname.Name.Value))\r\n                    return qname;\r\n            }\r\n\r\n            // return the alias if found:\r\n            return TranslateAlias(qname);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Translate the name using defined aliases. Only namespace part of the <see cref=\"QualifiedName\"/> will be translated. The <see cref=\"QualifiedName.Name\"/> part will not.\r\n        /// </summary>\r\n        /// <param name=\"qname\">The name to translate.</param>\r\n        /// <returns>Translated qualified name.</returns>\r\n        /// <remarks>Fully qualified names are not translated.</remarks>\r\n        private QualifiedName TranslateNamespace(QualifiedName qname)\r\n        {\r\n            if (qname.IsFullyQualifiedName)\r\n            {\r\n                return qname;\r\n            }\r\n\r\n            if (qname.IsSimpleName)\r\n            {\r\n                // no namespace part, return not fully qualified simple name (function or constant), has to be handled during analysis:\r\n                return qname;\r\n            }\r\n            else\r\n            {\r\n                return TranslateAlias(qname);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Translate first part of given <paramref name=\"qname\"/> into aliased <see cref=\"QualifiedName\"/>.\r\n        /// If no such alias is found, return original <paramref name=\"qname\"/>.\r\n        /// </summary>\r\n        /// <param name=\"qname\">Name which first part has tobe translated.</param>\r\n        /// <returns>Translated <see cref=\"QualifiedName\"/>.</returns>\r\n        /// <remarks>Always returns fully qualified name.</remarks>\r\n        private QualifiedName TranslateAlias(QualifiedName qname)\r\n        {\r\n            Debug.Assert(!qname.IsFullyQualifiedName);\r\n\r\n            return QualifiedName.TranslateAlias(\r\n                qname,\r\n                this.CurrentNaming.Aliases,\r\n                (IsInGlobalNamespace || sourceUnit.HasImportedNamespaces) ? (QualifiedName?)null : currentNamespace.QualifiedName);  // do not use current namespace, if there are imported namespace ... will be resolved later\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helpers\r\n\r\n        private static readonly List<Tuple<GenericQualifiedName, Text.Span>> emptyGenericQualifiedNamePositionList = new List<Tuple<GenericQualifiedName, Text.Span>>();\r\n\t\tprivate static readonly List<FormalParam> emptyFormalParamListIndex = new List<FormalParam>();\r\n\t\tprivate static readonly List<ActualParam> emptyActualParamListIndex = new List<ActualParam>();\r\n\t\tprivate static readonly List<Expression> emptyExpressionListIndex = new List<Expression>();\r\n\t\tprivate static readonly List<Item> emptyItemListIndex = new List<Item>();\r\n\t\tprivate static readonly List<NamedActualParam> emptyNamedActualParamListIndex = new List<NamedActualParam>();\r\n\t\tprivate static readonly List<FormalTypeParam> emptyFormalTypeParamList = new List<FormalTypeParam>();\r\n\t\t\r\n        private static List<T>/*!*/ListAdd<T>(object list, object item)\r\n        {\r\n            Debug.Assert(list is List<T>);\r\n            //Debug.Assert(item is T);\r\n\r\n            var tlist = (List<T>)list;\r\n            \r\n            if (item is T)\r\n            {\r\n                tlist.Add((T)item);\r\n            }\r\n            else if (item != null)\r\n            {\r\n                Debug.Assert(item is List<T>);\r\n                tlist.AddRange((List<T>)item);\r\n            }\r\n\r\n            return tlist;\r\n        }\r\n\r\n        private static object/*!*/StatementListAdd(object/*!*/listObj, object itemObj)\r\n        {\r\n            Debug.Assert(listObj is List<Statement>);\r\n\r\n            if (!object.ReferenceEquals(itemObj, null))\r\n            {\r\n                Debug.Assert(itemObj is Statement);\r\n\r\n                var list = (List<Statement>)listObj;\r\n                var stmt = (Statement)itemObj;\r\n\r\n                NamespaceDecl nsitem;\r\n                \r\n                // little hack when appending statement after simple syntaxed namespace:\r\n\r\n                // namespace A;\r\n                // foo();   // <-- add this statement into namespace A\r\n\r\n                if (list.Count != 0 && (nsitem = list.Last() as NamespaceDecl) != null && nsitem.IsSimpleSyntax && !(stmt is NamespaceDecl))\r\n                {\r\n                    // adding a statement after simple namespace declaration => add the statement into the namespace:\r\n                    StatementListAdd(nsitem.Statements, stmt);\r\n                    //nsitem.UpdatePosition(Text.Span.CombinePositions(nsitem.Span, ((Statement)item).Span));\r\n                }\r\n                else\r\n                {\r\n                    list.Add(stmt);\r\n                }\r\n            }\r\n\r\n            //\r\n            return listObj;\r\n        }\r\n\r\n        private List<Statement>/*!*/StmtList(Text.Span extentFrom, Text.Span extentTo, object/*!*/listObj)\r\n        {\r\n            return StmtList(CombinePositions(extentFrom, extentTo), listObj);\r\n        }\r\n\r\n        private List<Statement>/*!*/StmtList(Text.Span extent, object/*!*/listObj)\r\n        {\r\n            var list = (List<Statement>)listObj;\r\n            _docList.Merge(extent, list);\r\n\r\n            return list;\r\n        }\r\n\r\n        private T AnnotateDoc<T>(T declstmt)\r\n        {\r\n            _docList.Annotate((IDeclarationElement)declstmt);\r\n            return declstmt;\r\n        }\r\n\r\n        private Text.Span Combine(Text.Span first, Text.Span second)\r\n        {\r\n            return Text.Span.Combine(first, second);\r\n        }\r\n\r\n        private Text.Span Combine(Text.Span start, Text.Span optEnd1, Text.Span optEnd2, Text.Span end)\r\n        {\r\n            if (optEnd1.IsValid) end = optEnd1;\r\n            else if (optEnd2.IsValid) end = optEnd2;\r\n\r\n            return Combine(start, end);\r\n        }\r\n\r\n        private static List<T>/*!*/NewList<T>(T item)\r\n\t\t{\r\n\t\t\treturn new List<T>(1){ item };\r\n        }\r\n\r\n\t\tprivate static List<T>/*!*/NewList<T>(object item)\r\n\t\t{\r\n            return NewList<T>((T)item);\r\n\t\t}\r\n\r\n        private static int GetHeadingEnd(Text.Span lastNonBodySymbolPosition)\r\n        {\r\n            return lastNonBodySymbolPosition.End;\r\n        }\r\n\r\n        private static int GetBodyStart(Text.Span bodyPosition)\r\n        {\r\n            return bodyPosition.Start;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Handles token that is not valid PHP class/namespace name token in PHP,\r\n        /// but can be used from referenced C# library.\r\n        /// </summary>\r\n        /// <param name=\"span\">Token position.</param>\r\n        /// <param name=\"token\">Token text.</param>\r\n        /// <returns>Text of the token.</returns>\r\n        private string CSharpNameToken(Text.Span span, string token)\r\n        {\r\n            // TODO: move to scanner\r\n            \r\n            // get token string:\r\n            //string token = this.scanner.GetTokenString(position);\r\n\r\n            if (token == null)\r\n                throw new ArgumentNullException(\"token\");\r\n            \r\n            // report syntax error if C# names are not allowed\r\n            if ((this.features & LanguageFeatures.CSharpTypeNames) == 0)\r\n            {\r\n                this.ErrorSink.Add(FatalErrors.SyntaxError, this.SourceUnit, span, CoreResources.GetString(\"unexpected_token\", token));\r\n            }\r\n\r\n            //\r\n            return token;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets formal parameter flags.\r\n        /// </summary>\r\n        /// <param name=\"byref\">Whether the parameter is prefixed with <c>&amp;</c> character.</param>\r\n        /// <param name=\"variadic\">Whether the parameter is prefixed with <c>...</c>.</param>\r\n        /// <returns>Parameter flags.</returns>\r\n        private static FormalParam.Flags FormalParamFlags(bool byref, bool variadic)\r\n        {\r\n            FormalParam.Flags flags = FormalParam.Flags.Default;\r\n\r\n            if (byref) flags |= FormalParam.Flags.IsByRef;\r\n            if (variadic) flags |= FormalParam.Flags.IsVariadic;\r\n\r\n            return flags;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n        #region Handling PHPDoc: ICommentsSink, IScannerHandler Members\r\n\r\n        private ICommentsSink/*!*/_commentSink;\r\n        private IScannerHandler/*!*/_scannerHandler;\r\n        private DocCommentList/*!*/_docList;\r\n\r\n        private void InitializeCommentSink()\r\n        {\r\n            _commentSink = ChainForwardCommentSink.ChainSinks(reductionsSink as ICommentsSink, sourceUnit as ICommentsSink);\r\n            _scannerHandler = (sourceUnit as IScannerHandler) ?? new Scanner.NullScannerHandler();\r\n            _docList = new DocCommentList();\r\n        }\r\n\r\n        private void ClearCommentSink()\r\n        {\r\n            _commentSink = null;\r\n            _scannerHandler = null;\r\n            _docList = null;\r\n        }\r\n\r\n        #region Nested class: ChainCommentsSink\r\n\r\n        private abstract class ChainCommentsSink : ICommentsSink\r\n        {\r\n            readonly ICommentsSink/*!*/_next;\r\n\r\n            protected ChainCommentsSink(ICommentsSink next)\r\n            {\r\n                _next = next ?? new Scanner.NullCommentsSink();\r\n            }\r\n\r\n            #region ICommentsSink Members\r\n\r\n            public virtual void OnLineComment(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _next.OnLineComment(scanner, span);\r\n            }\r\n\r\n            public virtual void OnComment(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _next.OnComment(scanner, span);\r\n            }\r\n\r\n            public virtual void OnPhpDocComment(Scanner scanner, PHPDocBlock phpDocBlock)\r\n            {\r\n                _next.OnPhpDocComment(scanner, phpDocBlock);\r\n            }\r\n\r\n            public virtual void OnOpenTag(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _next.OnOpenTag(scanner, span);\r\n            }\r\n\r\n            public virtual void OnCloseTag(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _next.OnCloseTag(scanner, span);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        private sealed class ChainForwardCommentSink : ChainCommentsSink\r\n        {\r\n            readonly ICommentsSink/*!*/_forward;\r\n\r\n            private ChainForwardCommentSink(ICommentsSink/*!*/forward, ICommentsSink/*!*/next)\r\n                : base(next)\r\n            {\r\n                _forward = forward;\r\n            }\r\n\r\n            public static ICommentsSink/*!*/ChainSinks(ICommentsSink first, ICommentsSink second)\r\n            {\r\n                if (first != null)\r\n                {\r\n                    if (second != null) return new ChainForwardCommentSink(first, second);\r\n                    else return first;\r\n                }\r\n\r\n                //\r\n                return second ?? new Scanner.NullCommentsSink();\r\n            }\r\n\r\n            public override void OnLineComment(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _forward.OnLineComment(scanner, span);\r\n                base.OnLineComment(scanner, span);\r\n            }\r\n\r\n            public override void OnComment(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _forward.OnComment(scanner, span);\r\n                base.OnComment(scanner, span);\r\n            }\r\n\r\n            public override void OnPhpDocComment(Scanner scanner, PHPDocBlock phpDocBlock)\r\n            {\r\n                _forward.OnPhpDocComment(scanner, phpDocBlock);\r\n                base.OnPhpDocComment(scanner, phpDocBlock);\r\n            }\r\n\r\n            public override void OnOpenTag(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _forward.OnOpenTag(scanner, span);\r\n                base.OnOpenTag(scanner, span);\r\n            }\r\n\r\n            public override void OnCloseTag(Scanner scanner, Text.TextSpan span)\r\n            {\r\n                _forward.OnCloseTag(scanner, span);\r\n                base.OnCloseTag(scanner, span);\r\n            }\r\n        }\r\n\r\n        private sealed class HandleDocComment : IScannerHandler\r\n        {\r\n            readonly Parser _parser;\r\n            readonly IScannerHandler _next;\r\n            readonly PHPDocBlock _docComment;\r\n\r\n            public HandleDocComment(Parser/*!*/parser, PHPDocBlock/*!*/phpDocBlock, IScannerHandler/*!*/next)\r\n            {\r\n                Debug.Assert(parser != null);\r\n                Debug.Assert(phpDocBlock != null);\r\n                Debug.Assert(next != null);\r\n\r\n                _parser = parser;\r\n                _docComment = phpDocBlock;\r\n                _next = next;\r\n            }\r\n\r\n            #region IScannerHandler Members\r\n\r\n            public void OnNextToken(Tokens token, char[] buffer, int tokenStart, int tokenLength)\r\n            {\r\n                if (token != Tokens.T_WHITESPACE)\r\n                {\r\n                    // now we know all the whitespace after the DOC comment\r\n                    _parser._docList.AppendBlock(_docComment, _parser.Scanner.TokenPosition.Start);\r\n\r\n                    // remove this handler so it is not called on every IScannerHandler.OnNextToken\r\n                    Debug.Assert(_parser._scannerHandler == this);\r\n                    _parser._scannerHandler = _next;\r\n                }\r\n\r\n                _next.OnNextToken(token, buffer, tokenStart, tokenLength);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        void ICommentsSink.OnLineComment(Scanner scanner, Text.TextSpan span)\r\n        {\r\n            _commentSink.OnLineComment(scanner, span);\r\n        }\r\n\r\n        void ICommentsSink.OnComment(Scanner scanner, Text.TextSpan span)\r\n        {\r\n            _commentSink.OnComment(scanner, span);\r\n        }\r\n\r\n        void ICommentsSink.OnPhpDocComment(Scanner scanner, PHPDocBlock phpDocBlock)\r\n        {\r\n            // handle the next non-whitespace token so we'll know span of the DOC comment including the following whitespace\r\n            _scannerHandler = new HandleDocComment(this, phpDocBlock, _scannerHandler);\r\n\r\n            //\r\n            _commentSink.OnPhpDocComment(scanner, phpDocBlock);\r\n        }\r\n\r\n        void ICommentsSink.OnOpenTag(Scanner scanner, Text.TextSpan span)\r\n        {\r\n            _commentSink.OnOpenTag(scanner, span);\r\n        }\r\n\r\n        void ICommentsSink.OnCloseTag(Scanner scanner, Text.TextSpan span)\r\n        {\r\n            _commentSink.OnCloseTag(scanner, span);\r\n        }\r\n\r\n        void IScannerHandler.OnNextToken(Tokens token, char[] buffer, int tokenStart, int tokenLength)\r\n        {\r\n            _scannerHandler.OnNextToken(token, buffer, tokenStart, tokenLength);\r\n        }\r\n\r\n        #endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Scanner.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Parsers.GPPG;\r\nusing PHP.Core.Text;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n    #region ICommentsSink\r\n\r\n    /// <summary>\r\n    /// Sink for comment tokens and tokens not handled in parser.\r\n    /// These tokens are ignored by tokenizer, so they are not available in resulting AST.\r\n    /// By providing this interface as a part of <see cref=\"IReductionsSink\"/> implementation, implementers may handle additional language elements at token level.\r\n    /// </summary>\r\n    public interface ICommentsSink\r\n    {\r\n        void OnLineComment(Scanner/*!*/scanner, Text.TextSpan span);\r\n        void OnComment(Scanner/*!*/scanner, Text.TextSpan span);\r\n        void OnPhpDocComment(Scanner/*!*/scanner, PHPDocBlock phpDocBlock);\r\n\r\n        void OnOpenTag(Scanner/*!*/scanner, Text.TextSpan span);\r\n        void OnCloseTag(Scanner/*!*/scanner, Text.TextSpan span);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IScannerHandler\r\n\r\n    public interface IScannerHandler\r\n    {\r\n        /// <summary>\r\n        /// Called by <see cref=\"Scanner\"/> when new token is obtained from lexer.\r\n        /// </summary>\r\n        /// <param name=\"token\">Token.</param>\r\n        /// <param name=\"buffer\">Internal text buffer.</param>\r\n        /// <param name=\"tokenStart\">Position within <paramref name=\"buffer\"/> where the token text starts.</param>\r\n        /// <param name=\"tokenLength\">Length of the token text.</param>\r\n        void OnNextToken(Tokens token, char[] buffer, int tokenStart, int tokenLength);\r\n    }\r\n\r\n    #endregion\r\n\r\n    public sealed class Scanner : Lexer, ITokenProvider<SemanticValueType, Text.Span>\r\n    {\r\n        #region Nested class: NullCommentsSink\r\n\r\n        internal sealed class NullCommentsSink : ICommentsSink\r\n        {\r\n            #region ICommentsSink Members\r\n\r\n            public void OnLineComment(Scanner scanner, Text.TextSpan span) { }\r\n            public void OnComment(Scanner scanner, Text.TextSpan span) { }\r\n            public void OnPhpDocComment(Scanner scanner, PHPDocBlock phpDocBlock) { }\r\n            public void OnOpenTag(Scanner scanner, Text.TextSpan span) { }\r\n            public void OnCloseTag(Scanner scanner, Text.TextSpan span) { }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Nested class: NullScannerHandler\r\n\r\n        internal sealed class NullScannerHandler : IScannerHandler\r\n        {\r\n            #region IScannerHandler Members\r\n\r\n            public void OnNextToken(Tokens token, char[] buffer, int tokenStart, int tokenLength) { }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        public ErrorSink/*!*/ ErrorSink { get { return errors; } }\r\n        private readonly ErrorSink/*!*/ errors;\r\n\r\n        /// <summary>\r\n        /// Sink for comments.\r\n        /// </summary>\r\n        private readonly ICommentsSink/*!*/commentsSink;\r\n\r\n        /// <summary>\r\n        /// Sink for various scanner events.\r\n        /// </summary>\r\n        private readonly IScannerHandler/*!*/scannerHandler;\r\n\r\n        public LanguageFeatures LanguageFeatures { get { return features; } }\r\n        private readonly LanguageFeatures features;\r\n\r\n        public SourceUnit/*!*/ SourceUnit { get { return sourceUnit; } }\r\n        private readonly SourceUnit/*!*/ sourceUnit;\r\n\r\n        // encapsed string buffering:\r\n        public StringBuilder/*!*/ EncapsedStringBuffer { get { return encapsedStringBuffer; } }\r\n        private readonly StringBuilder/*!*/ encapsedStringBuffer = new StringBuilder(1000);\r\n\r\n        private SemanticValueType tokenSemantics;\r\n        private Text.Span tokenPosition;\r\n        private Text.TextSpan TokenTextSpan { get { return new TextSpan(sourceUnit, tokenPosition); } }\r\n\r\n        private int charOffset;\r\n\r\n        private Encoding Encoding { get { return sourceUnit.Encoding; } }\r\n        private bool IsPure { get { return sourceUnit.IsPure; } }\r\n\r\n        public Scanner(TextReader/*!*/ reader, SourceUnit/*!*/ sourceUnit,\r\n            ErrorSink/*!*/ errors, ICommentsSink commentsSink, IScannerHandler scannerHandler,\r\n            LanguageFeatures features, int positionShift)\r\n            : base(reader)\r\n        {\r\n            if (reader == null)\r\n                throw new ArgumentNullException(\"reader\");\r\n            if (sourceUnit == null)\r\n                throw new ArgumentNullException(\"sourceUnit\");\r\n            if (errors == null)\r\n                throw new ArgumentNullException(\"errors\");\r\n\r\n            this.errors = errors;\r\n            this.commentsSink = commentsSink ?? new NullCommentsSink();\r\n            this.scannerHandler = scannerHandler ?? new NullScannerHandler();\r\n            this.features = features;\r\n            this.sourceUnit = sourceUnit;\r\n            this.charOffset = positionShift;\r\n\r\n            this.AllowAspTags = (features & LanguageFeatures.AspTags) != 0;\r\n            this.AllowShortTags = (features & LanguageFeatures.ShortOpenTags) != 0;\r\n        }\r\n\r\n        private void StoreEncapsedString()\r\n        {\r\n            tokenSemantics.Integer = TokenLength;\r\n            tokenSemantics.Offset = encapsedStringBuffer.Length;\r\n            AppendTokenTextTo(encapsedStringBuffer);\r\n        }\r\n\r\n        private void StoreEncapsedString(string str)\r\n        {\r\n            tokenSemantics.Integer = str.Length;\r\n            tokenSemantics.Offset = encapsedStringBuffer.Length;\r\n            encapsedStringBuffer.Append(str);\r\n        }\r\n\r\n        public string GetEncapsedString(int offset, int length)\r\n        {\r\n            return encapsedStringBuffer.ToString(offset, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Updates <see cref=\"charOffset\"/> and <see cref=\"tokenPosition\"/>.\r\n        /// </summary>\r\n        private void UpdateTokenPosition()\r\n        {\r\n            int tokenLength = this.TokenLength;\r\n\r\n            // update token position info:\r\n            tokenPosition = new Span(charOffset, tokenLength);\r\n            charOffset += tokenLength;\r\n        }\r\n\r\n        public new Tokens GetNextToken()\r\n        {\r\n            for (; ; )\r\n            {\r\n                inString = false;\r\n                isCode = false;\r\n\r\n                Tokens token = base.GetNextToken();\r\n                UpdateTokenPosition();\r\n\r\n                this.scannerHandler.OnNextToken(token, this.Buffer, this.BufferTokenStart, this.TokenLength);\r\n\r\n                switch (token)\r\n                {\r\n                    #region Comments\r\n\r\n                    // ignored tokens:\r\n                    case Tokens.T_WHITESPACE: break;\r\n                    case Tokens.T_COMMENT: this.commentsSink.OnComment(this, TokenTextSpan); break;\r\n                    case Tokens.T_LINE_COMMENT: this.commentsSink.OnLineComment(this, TokenTextSpan); break;\r\n                    case Tokens.T_OPEN_TAG: this.commentsSink.OnOpenTag(this, TokenTextSpan); break;\r\n                    case Tokens.T_DOC_COMMENT: this.commentsSink.OnPhpDocComment(this, new PHPDocBlock(base.GetTokenString(), this.tokenPosition)); break;\r\n\r\n                    case Tokens.T_PRAGMA_FILE:\r\n                        sourceUnit.AddSourceFileMapping(TokenTextSpan.FirstLine, base.GetTokenAsFilePragma());\r\n                        break;\r\n\r\n                    case Tokens.T_PRAGMA_LINE:\r\n                        {\r\n                            int? value = base.GetTokenAsLinePragma();\r\n\r\n                            if (value.HasValue)\r\n                                sourceUnit.AddSourceLineMapping(TokenTextSpan.FirstLine, value.Value);\r\n                            else\r\n                                errors.Add(Warnings.InvalidLinePragma, sourceUnit, tokenPosition);\r\n\r\n                            break;\r\n                        }\r\n\r\n                    case Tokens.T_PRAGMA_DEFAULT_FILE:\r\n                        sourceUnit.AddSourceFileMapping(TokenTextSpan.FirstLine, SourceUnit.DefaultFile);\r\n                        break;\r\n\r\n                    case Tokens.T_PRAGMA_DEFAULT_LINE:\r\n                        sourceUnit.AddSourceLineMapping(TokenTextSpan.FirstLine, SourceUnit.DefaultLine);\r\n                        break;\r\n\r\n                    #endregion\r\n\r\n                    #region String Semantics\r\n\r\n                    case Tokens.T_VARIABLE:\r\n                        // exclude initial $ from the name:\r\n                        Debug.Assert(GetTokenChar(0) == '$');\r\n                        tokenSemantics.Object = base.GetTokenSubstring(1);\r\n                        goto default;\r\n\r\n                    case Tokens.T_STRING:\r\n                        if (inString)\r\n                            StoreEncapsedString();\r\n                        else\r\n                            tokenSemantics.Object = base.GetTokenString();\r\n\r\n                        goto default;\r\n\r\n                    case Tokens.T_ARRAY:\r\n                    case Tokens.T_LIST:\r\n                        tokenSemantics.Object = base.GetTokenString();  // remember the token string, so we can use these tokens as literals later, case sensitively\r\n                        goto default;\r\n\r\n                    case Tokens.T_STRING_VARNAME:\r\n                    case Tokens.T_NUM_STRING:\r\n                    case Tokens.T_ENCAPSED_AND_WHITESPACE:\r\n                    case Tokens.T_BAD_CHARACTER:\r\n                        StoreEncapsedString();\r\n                        goto default;\r\n\r\n                    case Tokens.T_INLINE_HTML:\r\n                        tokenSemantics.Object = base.GetTokenString();\r\n                        goto default;\r\n\r\n\r\n                    // \\[uU]#{0-6}\r\n                    case Tokens.UnicodeCharCode:\r\n                        {\r\n                            Debug.Assert(inString);\r\n\r\n                            //if (GetTokenChar(1) == 'u')\r\n                            //{\r\n                            //  if (TokenLength != 2 + 4)\r\n                            //    errors.Add(Warnings.InvalidEscapeSequenceLength, sourceFile, tokenPosition.Short, GetTokenString(), 4);\r\n                            //}\r\n                            //else\r\n                            //{\r\n                            //  if (TokenLength != 2 + 6)\r\n                            //    errors.Add(Warnings.InvalidEscapeSequenceLength, sourceFile, tokenPosition.Short, GetTokenString(), 6);\r\n                            //}\r\n\r\n                            int code_point = GetTokenAsInteger(2, 16);\r\n\r\n                            try\r\n                            {\r\n                                if ((code_point < 0 || code_point > 0x10ffff) || (code_point >= 0xd800 && code_point <= 0xdfff))\r\n                                {\r\n                                    errors.Add(Errors.InvalidCodePoint, SourceUnit, tokenPosition, GetTokenString());\r\n                                    StoreEncapsedString(\"?\");\r\n                                }\r\n                                else\r\n                                {\r\n                                    StoreEncapsedString(StringUtils.Utf32ToString(code_point));\r\n                                }\r\n                            }\r\n                            catch (ArgumentOutOfRangeException)\r\n                            {\r\n                                errors.Add(Errors.InvalidCodePoint, SourceUnit, tokenPosition, GetTokenString());\r\n                                StoreEncapsedString(\"?\");\r\n                            }\r\n                            token = Tokens.T_STRING;\r\n                            goto default;\r\n                        }\r\n\r\n                    // \\C{name}\r\n                    case Tokens.UnicodeCharName:\r\n                        Debug.Assert(inString);\r\n                        StoreEncapsedString(); // N/S\r\n                        token = Tokens.T_STRING;\r\n                        goto default;\r\n\r\n                    // b?\"xxx\"\r\n                    case Tokens.DoubleQuotedString:\r\n                        {\r\n                            bool forceBinaryString = GetTokenChar(0) == 'b';\r\n\r\n                            tokenSemantics.Object = GetTokenAsDoublyQuotedString(forceBinaryString ? 1 : 0, this.Encoding, forceBinaryString);\r\n                            token = Tokens.T_CONSTANT_ENCAPSED_STRING;\r\n                            goto default;\r\n                        }\r\n\r\n                    // b?'xxx'\r\n                    case Tokens.SingleQuotedString:\r\n                        {\r\n                            bool forceBinaryString = GetTokenChar(0) == 'b';\r\n\r\n                            tokenSemantics.Object = GetTokenAsSinglyQuotedString(forceBinaryString ? 1 : 0, this.Encoding, forceBinaryString);\r\n                            token = Tokens.T_CONSTANT_ENCAPSED_STRING;\r\n                            goto default;\r\n                        }\r\n\r\n                    #endregion\r\n\r\n                    #region Numeric Semantics\r\n\r\n                    case Tokens.T_CURLY_OPEN:\r\n                        tokenSemantics.Integer = (int)Tokens.T_CURLY_OPEN;\r\n                        goto default;\r\n\r\n                    case Tokens.T_CHARACTER:\r\n                        tokenSemantics.Integer = (int)GetTokenChar(0);\r\n                        goto default;\r\n\r\n                    case Tokens.EscapedCharacter:\r\n                        tokenSemantics.Integer = (int)GetTokenAsEscapedCharacter(0);\r\n                        token = Tokens.T_CHARACTER;\r\n                        goto default;\r\n\r\n                    case Tokens.T_LINE:\r\n                        // TODO: \r\n                        tokenSemantics.Integer = 1;\r\n                        goto default;\r\n\r\n                    // \"\\###\"\r\n                    case Tokens.OctalCharCode:\r\n                        tokenSemantics.Integer = GetTokenAsInteger(1, 10);\r\n                        token = Tokens.T_CHARACTER;\r\n                        goto default;\r\n\r\n                    // \"\\x##\"\r\n                    case Tokens.HexCharCode:\r\n                        tokenSemantics.Integer = GetTokenAsInteger(2, 16);\r\n                        token = Tokens.T_CHARACTER;\r\n                        goto default;\r\n\r\n                    // {LNUM}\r\n                    case Tokens.ParseDecimalNumber:\r\n                        {\r\n                            // [0-9]* - value is either in octal or in decimal\r\n                            if (GetTokenChar(0) == '0')\r\n                                token = GetTokenAsDecimalNumber(1, 8, ref tokenSemantics);\r\n                            else\r\n                                token = GetTokenAsDecimalNumber(0, 10, ref tokenSemantics);\r\n\r\n                            if (token == Tokens.T_DNUMBER)\r\n                            {\r\n                                // conversion to double causes data loss\r\n                                errors.Add(Warnings.TooBigIntegerConversion, SourceUnit, tokenPosition, GetTokenString());\r\n                            }\r\n                            goto default;\r\n                        }\r\n\r\n                    // {HNUM}\r\n                    case Tokens.ParseHexadecimalNumber:\r\n                        {\r\n                            // parse hexadecimal value\r\n                            token = GetTokenAsDecimalNumber(2, 16, ref tokenSemantics);\r\n\r\n                            if (token == Tokens.T_DNUMBER)\r\n                            {\r\n                                // conversion to double causes data loss\r\n                                errors.Add(Warnings.TooBigIntegerConversion, SourceUnit, tokenPosition, GetTokenString());\r\n                            }\r\n                            goto default;\r\n                        }\r\n\r\n                    // {BNUM}\r\n                    case Tokens.ParseBinaryNumber:\r\n                        // parse binary number value\r\n                        token = GetTokenAsDecimalNumber(2, 2, ref tokenSemantics);\r\n\r\n                        if (token == Tokens.T_DNUMBER)\r\n                        {\r\n                            // conversion to double causes data loss\r\n                            errors.Add(Warnings.TooBigIntegerConversion, SourceUnit, tokenPosition, GetTokenString());\r\n                        }\r\n                        goto default;\r\n\r\n                    // {DNUM}|{EXPONENT_DNUM}\r\n                    case Tokens.ParseDouble:\r\n                        tokenSemantics.Double = GetTokenAsDouble(0);\r\n                        token = Tokens.T_DNUMBER;\r\n                        goto default;\r\n\r\n                    #endregion\r\n\r\n                    #region Another Semantics\r\n\r\n                    // i'xxx'\t\r\n                    case Tokens.SingleQuotedIdentifier:\r\n                        tokenSemantics.Object = (string)GetTokenAsSinglyQuotedString(1, this.Encoding, false);\r\n                        token = Tokens.T_STRING;\r\n                        goto default;\r\n\r\n                    #endregion\r\n\r\n                    #region Token Reinterpreting\r\n\r\n                    case Tokens.T_OPEN_TAG_WITH_ECHO:\r\n                        this.commentsSink.OnOpenTag(this, TokenTextSpan);\r\n                        token = Tokens.T_ECHO;\r\n                        goto default;\r\n\r\n                    case Tokens.T_CLOSE_TAG:\r\n                        this.commentsSink.OnCloseTag(this, TokenTextSpan);\r\n                        token = Tokens.T_SEMI;\r\n                        goto default;\r\n\r\n                    case Tokens.EOF:\r\n                        if (this.CurrentLexicalState == LexicalStates.ST_ONE_LINE_COMMENT)\r\n                        {\r\n                            this.CurrentLexicalState = LexicalStates.ST_IN_SCRIPTING;\r\n                            token = Tokens.T_LINE_COMMENT;\r\n                            _yymore();\r\n                            goto case Tokens.T_LINE_COMMENT;\r\n                        }\r\n                        goto default;\r\n\r\n\r\n                    case Tokens.T_TRUE:\r\n                    case Tokens.T_FALSE:\r\n                    case Tokens.T_NULL:\r\n                    case Tokens.T_GET:\r\n                    case Tokens.T_SET:\r\n                    case Tokens.T_CALL:\r\n                    case Tokens.T_CALLSTATIC:\r\n                    case Tokens.T_WAKEUP:\r\n                    case Tokens.T_SLEEP:\r\n                    case Tokens.T_TOSTRING:\r\n                    case Tokens.T_CONSTRUCT:\r\n                    case Tokens.T_DESTRUCT:\r\n                    case Tokens.T_PARENT:\r\n                    case Tokens.T_SELF:\r\n                    case Tokens.T_AUTOLOAD:\r\n                        token = Tokens.T_STRING;\r\n                        goto case Tokens.T_STRING;\r\n\r\n                    case Tokens.T_TRY:\r\n                    case Tokens.T_CATCH:\r\n                    case Tokens.T_FINALLY:\r\n                    case Tokens.T_THROW:\r\n                    case Tokens.T_IMPLEMENTS:\r\n                    case Tokens.T_CLONE:\r\n                    case Tokens.T_ABSTRACT:\r\n                    case Tokens.T_FINAL:\r\n                    case Tokens.T_PRIVATE:\r\n                    case Tokens.T_PROTECTED:\r\n                    case Tokens.T_PUBLIC:\r\n                    case Tokens.T_INSTANCEOF:\r\n                    case Tokens.T_INTERFACE:\r\n                    case Tokens.T_GOTO:\r\n                    case Tokens.T_NAMESPACE:\r\n                    case Tokens.T_NAMESPACE_C:\r\n                    case Tokens.T_NS_SEPARATOR:\r\n                    case Tokens.T_USE:\r\n                        {\r\n                            if ((features & LanguageFeatures.V5Keywords) == 0)\r\n                            {\r\n                                token = Tokens.T_STRING;\r\n                                goto case Tokens.T_STRING;\r\n                            }\r\n\r\n                            if (token == Tokens.T_ABSTRACT)\r\n                            {\r\n                                // remember this for possible CLR qualified name:\r\n                                tokenSemantics.Object = base.GetTokenString();\r\n                            }\r\n\r\n                            goto default;\r\n                        }\r\n\r\n                    case Tokens.T_IMPORT:\r\n                        {\r\n                            if (!sourceUnit.IsPure)\r\n                            {\r\n                                token = Tokens.T_STRING;\r\n                                goto case Tokens.T_STRING;\r\n                            }\r\n\r\n                            goto default;\r\n                        }\r\n\r\n                    case Tokens.T_BOOL_TYPE:\r\n                    case Tokens.T_INT_TYPE:\r\n                    case Tokens.T_INT64_TYPE:\r\n                    case Tokens.T_DOUBLE_TYPE:\r\n                    case Tokens.T_STRING_TYPE:\r\n                    case Tokens.T_RESOURCE_TYPE:\r\n                    case Tokens.T_OBJECT_TYPE:\r\n                    case Tokens.T_TYPEOF:\r\n                        {\r\n                            if ((features & LanguageFeatures.TypeKeywords) == 0)\r\n                            {\r\n                                token = Tokens.T_STRING;\r\n                                goto case Tokens.T_STRING;\r\n                            }\r\n\r\n                            tokenSemantics.Object = base.GetTokenString();\r\n\r\n                            goto default;\r\n                        }\r\n\r\n                    case Tokens.T_PARTIAL:\r\n                        {\r\n                            if (!IsPure)\r\n                            {\r\n                                token = Tokens.T_STRING;\r\n                                goto case Tokens.T_STRING;\r\n                            }\r\n\r\n                            goto default;\r\n                        }\r\n\r\n                    #endregion\r\n\r\n                    #region Error Tokens\r\n\r\n                    case Tokens.ERROR:\r\n                        goto default;\r\n\r\n                    case Tokens.ErrorInvalidIdentifier:\r\n                        {\r\n                            // invalid identifier i'XXX':\r\n                            errors.Add(Errors.InvalidIdentifier, SourceUnit, tokenPosition, (string)GetTokenAsSinglyQuotedString(1, this.Encoding, false));\r\n\r\n                            tokenSemantics.Object = GetErrorIdentifier();\r\n                            token = Tokens.T_STRING;\r\n                            goto default;\r\n                        }\r\n\r\n                    case Tokens.ErrorNotSupported:\r\n                        errors.Add(Errors.ConstructNotSupported, SourceUnit, tokenPosition, GetTokenString());\r\n                        tokenSemantics.Object = GetErrorIdentifier();\r\n                        token = Tokens.T_STRING;\r\n                        goto default;\r\n\r\n                    #endregion\r\n\r\n                    case Tokens.T_SEMI:\r\n                    default:\r\n                        return token;\r\n                }\r\n            }\r\n        }\r\n\r\n        #region ITokenProvider<SemanticValueType, Parsers.Position> Members\r\n\r\n        int ITokenProvider<SemanticValueType, Text.Span>.GetNextToken()\r\n        {\r\n            return (int)GetNextToken();\r\n        }\r\n\r\n        void ITokenProvider<SemanticValueType, Text.Span>.ReportError(string[] expectedTerminals)\r\n        {\r\n            // TODO (expected tokens....)\r\n            errors.Add(FatalErrors.SyntaxError, SourceUnit, tokenPosition,\r\n                CoreResources.GetString(\"unexpected_token\", GetTokenString()));\r\n\r\n            //throw new CompilerException();\t\r\n        }\r\n\r\n        SemanticValueType ITokenProvider<SemanticValueType, Text.Span>.TokenValue\r\n        {\r\n            get { return tokenSemantics; }\r\n        }\r\n\r\n        Text.Span ITokenProvider<SemanticValueType, Text.Span>.TokenPosition\r\n        {\r\n            get { return tokenPosition; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Erroneous Identifiers\r\n\r\n        private int errorNameCounter = 0;\r\n        private const string ErrorNamePrefix = \"__error#\";\r\n\r\n        internal string/*!*/ GetErrorIdentifier()\r\n        {\r\n            return ErrorNamePrefix + errorNameCounter++;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Tokenizer.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n\tpublic sealed class Tokenizer : Lexer\r\n\t{\r\n\t\t[Flags]\r\n\t\tpublic enum Features\r\n\t\t{\r\n\t\t\tV5Keywords = 1,\r\n\t\t\tContextKeywords = 2,\r\n\t\t\tSkipWhitespace = 8,\r\n\r\n\t\t\tAllowAspTags = 16,\r\n\t\t\tAllowShortTags = 32,\r\n\t\t\tTypeKeywords = 64,\r\n\r\n\t\t\tDefault = V5Keywords | AllowAspTags | AllowShortTags |  ContextKeywords | TypeKeywords\r\n\t\t}\r\n\r\n\t\tprivate Features features;\r\n\r\n\t\tpublic Tokenizer(TextReader/*!*/ reader)\r\n\t\t\t: this(reader, Features.Default)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tpublic Tokenizer(TextReader/*!*/ reader, Features features)\r\n\t\t\t: base(reader)\r\n\t\t{\r\n\t\t\tif (reader == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"reader\");\r\n\r\n\t\t\tAllowAspTags = (features & Features.AllowAspTags) != 0;\r\n\t\t\tAllowShortTags = (features & Features.AllowShortTags) != 0;\r\n\r\n\t\t\tthis.features = features;\r\n\t\t}\r\n\r\n\t\tpublic TokenCategory TokenCategory { get { return tokenCategory; } }\r\n\t\tprivate TokenCategory tokenCategory;\r\n\r\n        public Text.Span TokenSpan { get { return Text.Span.FromBounds(token_start_pos.Char, token_end_pos.Char + 1); } }\r\n\r\n\t\tpublic Tokens RealToken { get { return realToken; } }\r\n\t\tprivate Tokens realToken;\r\n\r\n        public string TokenText { get { return _tokenText ?? (_tokenText = base.GetTokenString()); } }\r\n\t\t[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\r\n        private string _tokenText;\r\n\r\n\t\t#region Compressed State\r\n\r\n\t\tpublic struct CompressedState : IEquatable<CompressedState>\r\n\t\t{\r\n\t\t\tinternal string HereDocLabel { get { return hereDocLabel; } }\r\n\t\t\tprivate readonly string hereDocLabel;\r\n\r\n\t\t\tinternal LexicalStates CurrentState { get { return currentState; } }\r\n\t\t\tprivate readonly LexicalStates currentState;\r\n\r\n\t\t\tprivate readonly LexicalStates[]/*!*/ stateStack;\r\n\r\n\t\t\tpublic CompressedState(Tokenizer tokenizer)\r\n\t\t\t{\r\n\t\t\t\tthis.hereDocLabel = tokenizer.hereDocLabel;\r\n\t\t\t\tthis.currentState = tokenizer.CurrentLexicalState;\r\n\t\t\t\tthis.stateStack = tokenizer.StateStack.ToArray();\r\n\t\t\t}\r\n\r\n\t\t\tpublic override int GetHashCode()\r\n\t\t\t{\r\n\t\t\t\tunchecked\r\n\t\t\t\t{\r\n\t\t\t\t\tint result = (hereDocLabel != null) ? hereDocLabel.GetHashCode() : 0x2312347;\r\n\t\t\t\t\tfor (int i = 0; i < stateStack.Length; i++)\r\n\t\t\t\t\t\tresult ^= (int)stateStack[i] << i;\r\n\t\t\t\t\treturn result ^ ((int)currentState << 7);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpublic bool Equals(CompressedState other)\r\n\t\t\t{\r\n\t\t\t\tif (hereDocLabel != other.hereDocLabel) return false;\r\n\t\t\t\tif (stateStack.Length != other.stateStack.Length) return false;\r\n\r\n\t\t\t\tfor (int i = 0; i < stateStack.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (stateStack[i] != other.stateStack[i])\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tpublic Stack<LexicalStates> GetStateStack()\r\n\t\t\t{\r\n\t\t\t\treturn new Stack<LexicalStates>(stateStack);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic CompressedState GetCompressedState()\r\n\t\t{\r\n\t\t\treturn new CompressedState(this);\r\n\t\t}\r\n\r\n\t\tpublic void RestoreCompressedState(CompressedState state)\r\n\t\t{\r\n\t\t\thereDocLabel = state.HereDocLabel;\r\n\t\t\tStateStack = state.GetStateStack();\r\n\t\t\tCurrentLexicalState = state.CurrentState;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic static bool IsCharToken(Tokens token)\r\n\t\t{\r\n\t\t\treturn (int)token > 0 && (int)token < (int)Toks.ERROR;\r\n\t\t}\r\n\r\n\t\tpublic new Tokens GetNextToken()\r\n\t\t{\r\n\t\t\tfor (; ; )\r\n\t\t\t{\r\n\t\t\t\tinString = false;\r\n\t\t\t\tisCode = false;\r\n\r\n\t\t\t\tTokens token = realToken = base.GetNextToken();\r\n\t\t\t\t_tokenText = null;\r\n\r\n\t\t\t\tswitch (token)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase Tokens.EOF:\r\n\t\t\t\t\tcase Tokens.ERROR:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Unknown;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.ErrorInvalidIdentifier:\r\n\t\t\t\t\tcase Tokens.ErrorNotSupported:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Unknown;\r\n\t\t\t\t\t\treturn Tokens.ERROR;\r\n\r\n\t\t\t\t\t#region Token Postprocessing\r\n\r\n\t\t\t\t\t// following two cases have to determine the token type\r\n\t\t\t\t\t// (T_LNUMBER/T_L64NUMBER or T_DNUMBER) depending on the actual value\r\n\t\t\t\t\tcase Tokens.ParseDecimalNumber:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Number;\r\n\t\t\t\t\t\treturn GetHexIntegerTokenType(0);\r\n\t\t\t\t\tcase Tokens.ParseHexadecimalNumber:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Number; \r\n\t\t\t\t\t\treturn GetHexIntegerTokenType(2);\r\n                    case Tokens.ParseBinaryNumber:\r\n                        tokenCategory = TokenCategory.Number;\r\n                        return GetHexIntegerTokenType(2);\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase Tokens.ParseDouble:\r\n\t\t\t\t\t\tgoto case Tokens.T_DNUMBER;\r\n\r\n\t\t\t\t\tcase Tokens.DoubleQuotedString:\r\n\t\t\t\t\tcase Tokens.SingleQuotedString:\r\n\t\t\t\t\t\tgoto case Tokens.T_CONSTANT_ENCAPSED_STRING;\r\n\r\n\t\t\t\t\tcase Tokens.OctalCharCode:\r\n\t\t\t\t\tcase Tokens.HexCharCode:\r\n\t\t\t\t\tcase Tokens.UnicodeCharCode:\r\n\t\t\t\t\tcase Tokens.UnicodeCharName:\r\n\t\t\t\t\tcase Tokens.EscapedCharacter:\r\n\t\t\t\t\t\tgoto case Tokens.T_CHARACTER;\r\n\r\n\t\t\t\t\t// i'xxx'\t\r\n\t\t\t\t\tcase Tokens.SingleQuotedIdentifier:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Identifier;\r\n\t\t\t\t\t\ttoken = Tokens.T_STRING;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\t#region Special Keywords\r\n\r\n\t\t\t\t\tcase Tokens.T_TRUE:\r\n\t\t\t\t\tcase Tokens.T_FALSE:\r\n\t\t\t\t\tcase Tokens.T_NULL:\r\n\t\t\t\t\tcase Tokens.T_GET:\r\n\t\t\t\t\tcase Tokens.T_SET:\r\n\t\t\t\t\tcase Tokens.T_CALL:\r\n                    case Tokens.T_CALLSTATIC:\r\n\t\t\t\t\tcase Tokens.T_SLEEP:\r\n\t\t\t\t\tcase Tokens.T_WAKEUP:\r\n\t\t\t\t\tcase Tokens.T_TOSTRING:\r\n\t\t\t\t\tcase Tokens.T_CONSTRUCT:\r\n\t\t\t\t\tcase Tokens.T_DESTRUCT:\r\n\t\t\t\t\tcase Tokens.T_PARENT:\r\n\t\t\t\t\tcase Tokens.T_SELF:\r\n\t\t\t\t\tcase Tokens.T_AUTOLOAD:\r\n\t\t\t\t\tcase Tokens.T_PARTIAL:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ((features & Features.ContextKeywords) == 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttoken = Tokens.T_STRING;\r\n\t\t\t\t\t\t\t\tgoto case Tokens.T_STRING;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttokenCategory = TokenCategory.Keyword;\r\n\t\t\t\t\t\t\treturn token;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Tokens.T_BOOL_TYPE:\r\n\t\t\t\t\tcase Tokens.T_INT_TYPE:\r\n\t\t\t\t\tcase Tokens.T_INT64_TYPE:\r\n\t\t\t\t\tcase Tokens.T_DOUBLE_TYPE:\r\n\t\t\t\t\tcase Tokens.T_STRING_TYPE:\r\n\t\t\t\t\tcase Tokens.T_RESOURCE_TYPE:\r\n\t\t\t\t\tcase Tokens.T_OBJECT_TYPE:\r\n\t\t\t\t\tcase Tokens.T_TYPEOF:\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ((features & Features.TypeKeywords) == 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttoken = Tokens.T_STRING;\r\n\t\t\t\t\t\t\t\tgoto case Tokens.T_STRING;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttokenCategory = TokenCategory.Keyword;\r\n\t\t\t\t\t\t\treturn token;\r\n\t\t\t\t\t\t}\r\n\r\n                    case Tokens.T_GOTO:\r\n                    case Tokens.T_TRY:\r\n\t\t\t\t\tcase Tokens.T_CATCH:\r\n                    case Tokens.T_FINALLY:\r\n                    case Tokens.T_THROW:\r\n\t\t\t\t\tcase Tokens.T_INTERFACE:\r\n\t\t\t\t\tcase Tokens.T_IMPLEMENTS:\r\n\t\t\t\t\tcase Tokens.T_CLONE:\r\n\t\t\t\t\tcase Tokens.T_ABSTRACT:\r\n\t\t\t\t\tcase Tokens.T_FINAL:\r\n\t\t\t\t\tcase Tokens.T_PRIVATE:\r\n\t\t\t\t\tcase Tokens.T_PROTECTED:\r\n\t\t\t\t\tcase Tokens.T_PUBLIC:\r\n\t\t\t\t\tcase Tokens.T_INSTANCEOF:\r\n                    case Tokens.T_NAMESPACE:\r\n                    case Tokens.T_NAMESPACE_C:\r\n                    case Tokens.T_USE:\r\n                        {\r\n\t\t\t\t\t\t\tif ((features & Features.V5Keywords) == 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttoken = Tokens.T_STRING;\r\n\t\t\t\t\t\t\t\tgoto case Tokens.T_STRING;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttokenCategory = TokenCategory.Keyword;\r\n\t\t\t\t\t\t\treturn token;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Tokens.T_IMPORT:\r\n                        {\r\n                            //if ((features & Features.V6Keywords) == 0)\r\n                            //{\r\n                            //    token = Tokens.T_STRING;\r\n                            //    goto case Tokens.T_STRING;\r\n                            //}\r\n\r\n                            tokenCategory = TokenCategory.Keyword;\r\n                            return token;\r\n                        }\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\t#region Basic Keywords\r\n\r\n\t\t\t\t\tcase Tokens.T_REQUIRE_ONCE:\r\n\t\t\t\t\tcase Tokens.T_REQUIRE:\r\n\t\t\t\t\tcase Tokens.T_EVAL:\r\n\t\t\t\t\tcase Tokens.T_INCLUDE_ONCE:\r\n\t\t\t\t\tcase Tokens.T_INCLUDE:\r\n\t\t\t\t\tcase Tokens.T_LOGICAL_OR:           // or\r\n\t\t\t\t\tcase Tokens.T_LOGICAL_XOR:          // xor\r\n\t\t\t\t\tcase Tokens.T_LOGICAL_AND:          // and\r\n\t\t\t\t\tcase Tokens.T_PRINT:\r\n\t\t\t\t\tcase Tokens.T_NEW:\r\n\t\t\t\t\tcase Tokens.T_EXIT:\r\n\t\t\t\t\tcase Tokens.T_IF:\r\n\t\t\t\t\tcase Tokens.T_ELSEIF:\r\n\t\t\t\t\tcase Tokens.T_ELSE:\r\n\t\t\t\t\tcase Tokens.T_ENDIF:\r\n\t\t\t\t\tcase Tokens.T_ECHO:\r\n\t\t\t\t\tcase Tokens.T_DO:\r\n\t\t\t\t\tcase Tokens.T_WHILE:\r\n\t\t\t\t\tcase Tokens.T_ENDWHILE:\r\n\t\t\t\t\tcase Tokens.T_FOR:\r\n\t\t\t\t\tcase Tokens.T_ENDFOR:\r\n\t\t\t\t\tcase Tokens.T_FOREACH:\r\n\t\t\t\t\tcase Tokens.T_ENDFOREACH:\r\n\t\t\t\t\tcase Tokens.T_AS:\r\n\t\t\t\t\tcase Tokens.T_SWITCH:\r\n\t\t\t\t\tcase Tokens.T_ENDSWITCH:\r\n\t\t\t\t\tcase Tokens.T_CASE:\r\n\t\t\t\t\tcase Tokens.T_DEFAULT:\r\n\t\t\t\t\tcase Tokens.T_BREAK:\r\n\t\t\t\t\tcase Tokens.T_CONTINUE:\r\n\t\t\t\t\tcase Tokens.T_FUNCTION:\r\n\t\t\t\t\tcase Tokens.T_CONST:\r\n\t\t\t\t\tcase Tokens.T_RETURN:\r\n                    case Tokens.T_YIELD:\r\n\t\t\t\t\tcase Tokens.T_GLOBAL:\r\n\t\t\t\t\tcase Tokens.T_STATIC:\r\n\t\t\t\t\tcase Tokens.T_VAR:\r\n\t\t\t\t\tcase Tokens.T_UNSET:\r\n\t\t\t\t\tcase Tokens.T_ISSET:\r\n\t\t\t\t\tcase Tokens.T_EMPTY:\r\n\t\t\t\t\tcase Tokens.T_CLASS:\r\n                    case Tokens.T_TRAIT:\r\n                    case Tokens.T_INSTEADOF:\r\n\t\t\t\t\tcase Tokens.T_EXTENDS:\r\n\t\t\t\t\tcase Tokens.T_LIST:\r\n\t\t\t\t\tcase Tokens.T_ARRAY:\r\n\t\t\t\t\tcase Tokens.T_CLASS_C:              // __CLASS__\r\n                    case Tokens.T_TRAIT_C:              // __TRAIT__\r\n\t\t\t\t\tcase Tokens.T_METHOD_C:             // __METHOD__\r\n\t\t\t\t\tcase Tokens.T_FUNC_C:               // __FUNCTION__\r\n\t\t\t\t\tcase Tokens.T_FILE:                 // __FILE__\r\n\t\t\t\t\tcase Tokens.T_LINE:                 // __LINE__\r\n                    case Tokens.T_DIR:                  // __DIR__\r\n                    case Tokens.T_CALLABLE:             // callable\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Keyword;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\t#region Operators\r\n\r\n\t\t\t\t\tcase Tokens.T_UNSET_CAST:           // (unset)\r\n\t\t\t\t\tcase Tokens.T_BOOL_CAST:            // (bool)\r\n\t\t\t\t\tcase Tokens.T_OBJECT_CAST:          // (object)\r\n\t\t\t\t\tcase Tokens.T_ARRAY_CAST:           // (array)\r\n\t\t\t\t\tcase Tokens.T_STRING_CAST:          // (string)\r\n\t\t\t\t\tcase Tokens.T_UNICODE_CAST:\t\t\t// (unicode)\r\n                    case Tokens.T_BINARY_CAST:          // (binary)\r\n\t\t\t\t\tcase Tokens.T_DOUBLE_CAST:          // (double)\r\n\t\t\t\t\tcase Tokens.T_FLOAT_CAST:           // (float)\r\n\t\t\t\t\tcase Tokens.T_INT_CAST:             // (int)\r\n\t\t\t\t\tcase Tokens.T_AT:                   // @\r\n\t\t\t\t\tcase Tokens.T_QUESTION:             // ?\r\n\t\t\t\t\tcase Tokens.T_LT:                   // <\r\n\t\t\t\t\tcase Tokens.T_GT:                   // >\r\n\t\t\t\t\tcase Tokens.T_PERCENT:              // %\r\n\t\t\t\t\tcase Tokens.T_EXCLAM:               // !\r\n\t\t\t\t\tcase Tokens.T_TILDE:                // ~\r\n\t\t\t\t\tcase Tokens.T_EQ:                   // =\r\n\t\t\t\t\tcase Tokens.T_SLASH:                // /\r\n\t\t\t\t\tcase Tokens.T_CARET:                // ^\r\n\t\t\t\t\tcase Tokens.T_AMP:                  // &\r\n\t\t\t\t\tcase Tokens.T_PLUS:                 // +\r\n\t\t\t\t\tcase Tokens.T_MINUS:                // -\r\n\t\t\t\t\tcase Tokens.T_PIPE:                 // |\r\n\t\t\t\t\tcase Tokens.T_MUL:                  // *\r\n                    case Tokens.T_POW:                  // **\r\n\t\t\t\t\tcase Tokens.T_DOT:                  // .\r\n\t\t\t\t\tcase Tokens.T_SR_EQUAL:             // >>=\r\n\t\t\t\t\tcase Tokens.T_SL_EQUAL:             // <<=\r\n\t\t\t\t\tcase Tokens.T_XOR_EQUAL:            // ^=\r\n\t\t\t\t\tcase Tokens.T_OR_EQUAL:             // |=\r\n\t\t\t\t\tcase Tokens.T_AND_EQUAL:            // &=\r\n\t\t\t\t\tcase Tokens.T_MOD_EQUAL:            // %=\r\n\t\t\t\t\tcase Tokens.T_CONCAT_EQUAL:         // .=\r\n\t\t\t\t\tcase Tokens.T_DIV_EQUAL:            // /=\r\n\t\t\t\t\tcase Tokens.T_MUL_EQUAL:            // *=\r\n                    case Tokens.T_POW_EQUAL:            // **=\r\n\t\t\t\t\tcase Tokens.T_MINUS_EQUAL:          // -=\r\n\t\t\t\t\tcase Tokens.T_PLUS_EQUAL:           // +=\r\n\t\t\t\t\tcase Tokens.T_BOOLEAN_OR:           // ||      \r\n\t\t\t\t\tcase Tokens.T_BOOLEAN_AND:          // &&\r\n\t\t\t\t\tcase Tokens.T_IS_NOT_IDENTICAL:     // !==\r\n\t\t\t\t\tcase Tokens.T_IS_IDENTICAL:         // ===\r\n\t\t\t\t\tcase Tokens.T_IS_NOT_EQUAL:         // !=\r\n\t\t\t\t\tcase Tokens.T_IS_EQUAL:             // ==\r\n\t\t\t\t\tcase Tokens.T_IS_GREATER_OR_EQUAL:  // >=\r\n\t\t\t\t\tcase Tokens.T_IS_SMALLER_OR_EQUAL:  // <=\r\n\t\t\t\t\tcase Tokens.T_SR:                   // >>\r\n\t\t\t\t\tcase Tokens.T_SL:                   // <<\r\n\t\t\t\t\tcase Tokens.T_DEC:                  // --\r\n\t\t\t\t\tcase Tokens.T_INC:                  // ++\r\n\t\t\t\t\tcase Tokens.T_DOUBLE_COLON:         // ::\r\n\t\t\t\t\tcase Tokens.T_COLON:                // :\r\n\t\t\t\t\tcase Tokens.T_DOUBLE_ARROW:         // =>\r\n                    case Tokens.T_ELLIPSIS:             // ...\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Operator;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\t#region Others\r\n\r\n\t\t\t\t\tcase Tokens.T_LPAREN:                       // (\r\n\t\t\t\t\tcase Tokens.T_RPAREN:                       // )\r\n\t\t\t\t\tcase Tokens.T_LGENERIC:                     // <:\r\n\t\t\t\t\tcase Tokens.T_RGENERIC:                     // :>\r\n\t\t\t\t\tcase Tokens.T_SEMI:                         // ;\r\n\t\t\t\t\tcase Tokens.T_COMMA:                        // ,\r\n                    case Tokens.T_NS_SEPARATOR:                 // \\\r\n                        tokenCategory = TokenCategory.Delimiter;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t//case Tokens.T_NAMESPACE_NAME:               // namespace name\r\n\t\t\t\t\tcase Tokens.T_STRING_VARNAME:               // identifier following encapsulated \"${\"\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Identifier;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_DNUMBER:                      // double (or overflown integer) out of string \r\n\t\t\t\t\tcase Tokens.T_LNUMBER:                      // integer (or hex integer) out of string\r\n\t\t\t\t\tcase Tokens.T_L64NUMBER:                    // long integer - overflown integer (or hex long) out of string\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Number;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_DOUBLE_QUOTES:                // \"\r\n\t\t\t\t\tcase Tokens.T_BINARY_DOUBLE:                // b\"\r\n\t\t\t\t\tcase Tokens.T_BACKQUOTE:                    // `\r\n\t\t\t\t\tcase Tokens.T_START_HEREDOC:                // <<<XXX\r\n\t\t\t\t\tcase Tokens.T_BINARY_HEREDOC:               // b<<<XXX\r\n\t\t\t\t\tcase Tokens.T_END_HEREDOC:                  // XXX\r\n\t\t\t\t\tcase Tokens.T_CHARACTER:                    // character(s) in string\r\n\t\t\t\t\tcase Tokens.T_ENCAPSED_AND_WHITESPACE:      // character(s) in string\r\n\t\t\t\t\tcase Tokens.T_CONSTANT_ENCAPSED_STRING:     // quoted string not containing '$' \r\n\t\t\t\t\tcase Tokens.T_BAD_CHARACTER:                // incorrectly slashed character in string\r\n\t\t\t\t\tcase Tokens.T_NUM_STRING:                   // number in string\r\n                        tokenCategory = TokenCategory.String;\r\n\t\t\t\t\t\treturn token;\r\n\r\n                    case Tokens.T_DOLLAR_OPEN_CURLY_BRACES:     // \"${\" in string - starts non-string code\r\n                    case Tokens.T_CURLY_OPEN:                   // \"{$\" in string\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.StringCode;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_WHITESPACE:\r\n\t\t\t\t\t\tif ((features & Features.SkipWhitespace) != 0) break;\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.WhiteSpace;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_COMMENT:\r\n\t\t\t\t\tcase Tokens.T_DOC_COMMENT:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Comment;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_LINE_COMMENT:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.LineComment;\r\n\t\t\t\t\t\treturn Tokens.T_COMMENT;\r\n\r\n\t\t\t\t\tcase Tokens.T_PRAGMA_FILE:\r\n\t\t\t\t\tcase Tokens.T_PRAGMA_LINE:\r\n\t\t\t\t\tcase Tokens.T_PRAGMA_DEFAULT_FILE:\r\n\t\t\t\t\tcase Tokens.T_PRAGMA_DEFAULT_LINE:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.LineComment;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_OPEN_TAG:\r\n\t\t\t\t\tcase Tokens.T_OPEN_TAG_WITH_ECHO:\r\n\t\t\t\t\tcase Tokens.T_CLOSE_TAG:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.ScriptTags;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_INLINE_HTML:\r\n\t\t\t\t\t\ttokenCategory = TokenCategory.Html;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\t#region Tokens with Ambiguous Category\r\n\r\n\t\t\t\t\tcase Tokens.T_LBRACKET:                     // [\r\n\t\t\t\t\tcase Tokens.T_RBRACKET:                     // ]\r\n\t\t\t\t\tcase Tokens.T_LBRACE:                       // {\r\n                        tokenCategory = (inString) ? TokenCategory.String : TokenCategory.Delimiter;\r\n                        return token;\r\n\r\n                    case Tokens.T_RBRACE:                       // }\r\n                        if (inString)\r\n                            // we are in string:\r\n                            tokenCategory = TokenCategory.String;\r\n                        else if (CurrentLexicalState == LexicalStates.ST_DOUBLE_QUOTES || CurrentLexicalState == LexicalStates.ST_BACKQUOTE || CurrentLexicalState == LexicalStates.ST_HEREDOC)\r\n                            // right brace can complete ${ or {$,\r\n                            // so we are returning from other state to string state:\r\n                            tokenCategory = TokenCategory.StringCode;\r\n                        else\r\n                            // part of script:\r\n                            tokenCategory = TokenCategory.Delimiter;\r\n\r\n                        return token;\r\n\r\n\t\t\t\t\tcase Tokens.T_STRING:                       // identifier\r\n\t\t\t\t\t\ttokenCategory = (inString) ? (isCode ? TokenCategory.StringCode : TokenCategory.String) : TokenCategory.Identifier;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_DOLLAR:                       // isolated '$'\r\n\t\t\t\t\tcase Tokens.T_OBJECT_OPERATOR:              // ->\r\n\t\t\t\t\t\ttokenCategory = (inString) ? TokenCategory.StringCode : TokenCategory.Operator;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\tcase Tokens.T_VARIABLE:                     // identifier\r\n\t\t\t\t\t\ttokenCategory = (inString) ? TokenCategory.StringCode : TokenCategory.Variable;\r\n\t\t\t\t\t\treturn token;\r\n\r\n\t\t\t\t\t#endregion\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tDebug.Fail(\"Unknown token '\" + token + \"'\");\r\n\t\t\t\t\t\treturn token;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/Parsers/Tokens.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n\r\nnamespace PHP.Core.Parsers\r\n{\r\n\tpublic enum TokenCategory\r\n\t{\r\n\t\tComment,\r\n\t\tDelimiter,\r\n\t\tIdentifier,\r\n\t\tKeyword,\r\n\t\tLineComment,\r\n\t\tNumber,\r\n\t\tOperator,\r\n\t\tString,\r\n\t\tText,\r\n\t\tUnknown,\r\n\t\tWhiteSpace,\r\n\r\n\t\tVariable,\r\n\t\tScriptTags,\r\n\t\tStringCode,\r\n\t\tHtml\r\n\t}\r\n\r\n\t// todo: match token numbers against PHP\r\n\r\n\tpublic enum Tokens\r\n\t{\r\n\t\tERROR = Toks.ERROR,\r\n\t\tEOF = Toks.EOF,\r\n\r\n\t\tT_STRING_E = -20,\r\n\t\tT_LINE_COMMENT = -21,\r\n\r\n\t\t// commands:\r\n        ParseBinaryNumber = -25,\r\n\t\tParseDecimalNumber = -26,\r\n\t\tParseHexadecimalNumber = -27,\r\n\t\tParseDouble = -28,\r\n\t\tDoubleQuotedString = -29,\r\n\t\tSingleQuotedString = -30,\r\n\t\tSingleQuotedIdentifier = -31,\r\n\t\tOctalCharCode = -32,\r\n\t\tHexCharCode = -33,\r\n\t\tUnicodeCharCode = -34,\r\n\t\tUnicodeCharName = -35,\r\n\t\tEscapedCharacter = -36,\r\n\r\n\t\t// special lexer errors:\r\n\t\tErrorInvalidIdentifier = -37,\r\n\t\tErrorNotSupported = -38,\r\n\r\n\t\tT_GET = Toks.T_GET,\r\n\t\tT_SET = Toks.T_SET,\r\n\t\tT_CALL = Toks.T_CALL,\r\n        T_CALLSTATIC = Toks.T_CALLSTATIC,\r\n\t\tT_TOSTRING = Toks.T_TOSTRING,\r\n\t\tT_CONSTRUCT = Toks.T_CONSTRUCT,\r\n\t\tT_DESTRUCT = Toks.T_DESTRUCT,\r\n\t\tT_PARENT = Toks.T_PARENT,\r\n\t\tT_SELF = Toks.T_SELF,\r\n\t\tT_AUTOLOAD = Toks.T_AUTOLOAD,\r\n\r\n\t\tT_TRUE = Toks.T_TRUE,\r\n\t\tT_FALSE = Toks.T_FALSE,\r\n\t\tT_NULL = Toks.T_NULL,\r\n\t\tT_WAKEUP = Toks.T_WAKEUP,\r\n\t\tT_SLEEP = Toks.T_SLEEP,\r\n\r\n\t\tT_LGENERIC = Toks.T_LGENERIC,\r\n\t\tT_RGENERIC = Toks.T_RGENERIC,\r\n\t\tT_PARTIAL = Toks.T_PARTIAL,\r\n\r\n\t\tT_GOTO = Toks.T_GOTO,\r\n\t\tT_IMPORT = Toks.T_IMPORT,\r\n\t\tT_NAMESPACE = Toks.T_NAMESPACE,\r\n\t\tT_NAMESPACE_C = Toks.T_NAMESPACE_C,\r\n\t\tT_NS_SEPARATOR = Toks.T_NS_SEPARATOR,\r\n        T_USE = Toks.T_USE,\r\n\t\tT_BINARY_DOUBLE = Toks.T_BINARY_DOUBLE,\r\n\t\tT_BINARY_HEREDOC = Toks.T_BINARY_HEREDOC,\r\n\r\n\t\tT_BOOL_TYPE = Toks.T_BOOL_TYPE,\r\n\t\tT_INT_TYPE = Toks.T_INT_TYPE,\r\n\t\tT_INT64_TYPE = Toks.T_INT64_TYPE,\r\n\t\tT_DOUBLE_TYPE = Toks.T_DOUBLE_TYPE,\r\n\t\tT_STRING_TYPE = Toks.T_STRING_TYPE,\r\n\t\tT_RESOURCE_TYPE = Toks.T_RESOURCE_TYPE,\r\n\t\tT_OBJECT_TYPE = Toks.T_OBJECT_TYPE,\r\n\t\tT_TYPEOF = Toks.T_TYPEOF,\r\n\r\n\t\tT_INT8_CAST = Toks.T_INT8_CAST,\r\n\t\tT_INT16_CAST = Toks.T_INT16_CAST,\r\n\t\tT_INT32_CAST = Toks.T_INT32_CAST,\r\n\t\tT_INT64_CAST = Toks.T_INT64_CAST,\r\n\t\tT_UINT8_CAST = Toks.T_UINT8_CAST,\r\n\t\tT_UINT16_CAST = Toks.T_UINT16_CAST,\r\n\t\tT_UINT32_CAST = Toks.T_UINT32_CAST,\r\n\t\tT_UINT64_CAST = Toks.T_UINT64_CAST,\r\n\t\tT_FLOAT_CAST = Toks.T_FLOAT_CAST,\r\n\t\tT_DECIMAL_CAST = Toks.T_DECIMAL_CAST,\r\n\t\tT_UNICODE_CAST = Toks.T_UNICODE_CAST,\r\n\r\n\t\tT_PRAGMA_LINE = Toks.T_PRAGMA_LINE,\r\n\t\tT_PRAGMA_FILE = Toks.T_PRAGMA_FILE,\r\n\t\tT_PRAGMA_DEFAULT_FILE = Toks.T_PRAGMA_DEFAULT_FILE,\r\n\t\tT_PRAGMA_DEFAULT_LINE = Toks.T_PRAGMA_DEFAULT_LINE,\r\n\r\n\r\n\t\tT_LPAREN = (int)'(',\r\n\t\tT_RPAREN = (int)')',\r\n\t\tT_LBRACKET = (int)'[',\r\n\t\tT_RBRACKET = (int)']',\r\n\t\tT_LBRACE = (int)'{',\r\n\t\tT_RBRACE = (int)'}',\r\n\t\tT_SEMI = (int)';',\r\n\t\tT_COLON = (int)':',\r\n\t\tT_COMMA = (int)',',\r\n\t\tT_DOT = (int)'.',\r\n\t\tT_PIPE = (int)'|',\r\n\t\tT_CARET = (int)'^',\r\n\t\tT_AMP = (int)'&',\r\n\t\tT_PLUS = (int)'+',\r\n\t\tT_MINUS = (int)'-',\r\n\t\tT_SLASH = (int)'/',\r\n\t\tT_MUL = (int)'*',\r\n\t\tT_EQ = (int)'=',\r\n\t\tT_PERCENT = (int)'%',\r\n\t\tT_EXCLAM = (int)'!',\r\n\t\tT_TILDE = (int)'~',\r\n\t\tT_DOLLAR = (int)'$',\r\n\t\tT_LT = (int)'<',\r\n\t\tT_GT = (int)'>',\r\n\t\tT_QUESTION = (int)'?',\r\n\t\tT_AT = (int)'@',\r\n\t\tT_DOUBLE_QUOTES = (int)'\"',\r\n\t\tT_BACKQUOTE = (int)'`',\r\n\r\n\t\tT_REQUIRE_ONCE = Toks.T_REQUIRE_ONCE,\r\n\t\tT_REQUIRE = Toks.T_REQUIRE,\r\n\t\tT_EVAL = Toks.T_EVAL,\r\n\t\tT_INCLUDE_ONCE = Toks.T_INCLUDE_ONCE,\r\n\t\tT_INCLUDE = Toks.T_INCLUDE,\r\n\t\tT_LOGICAL_OR = Toks.T_LOGICAL_OR,\r\n\t\tT_LOGICAL_XOR = Toks.T_LOGICAL_XOR,\r\n\t\tT_LOGICAL_AND = Toks.T_LOGICAL_AND,\r\n\t\tT_PRINT = Toks.T_PRINT,\r\n\t\tT_SR_EQUAL = Toks.T_SR_EQUAL,\r\n\t\tT_SL_EQUAL = Toks.T_SL_EQUAL,\r\n\t\tT_XOR_EQUAL = Toks.T_XOR_EQUAL,\r\n\t\tT_OR_EQUAL = Toks.T_OR_EQUAL,\r\n\t\tT_AND_EQUAL = Toks.T_AND_EQUAL,\r\n\t\tT_MOD_EQUAL = Toks.T_MOD_EQUAL,\r\n\t\tT_CONCAT_EQUAL = Toks.T_CONCAT_EQUAL,\r\n\t\tT_DIV_EQUAL = Toks.T_DIV_EQUAL,\r\n\t\tT_MUL_EQUAL = Toks.T_MUL_EQUAL,\r\n        T_POW_EQUAL = Toks.T_POW_EQUAL,\r\n\t\tT_MINUS_EQUAL = Toks.T_MINUS_EQUAL,\r\n\t\tT_PLUS_EQUAL = Toks.T_PLUS_EQUAL,\r\n\t\tT_BOOLEAN_OR = Toks.T_BOOLEAN_OR,\r\n\t\tT_BOOLEAN_AND = Toks.T_BOOLEAN_AND,\r\n\t\tT_IS_NOT_IDENTICAL = Toks.T_IS_NOT_IDENTICAL,\r\n\t\tT_IS_IDENTICAL = Toks.T_IS_IDENTICAL,\r\n\t\tT_IS_NOT_EQUAL = Toks.T_IS_NOT_EQUAL,\r\n\t\tT_IS_EQUAL = Toks.T_IS_EQUAL,\r\n\t\tT_IS_GREATER_OR_EQUAL = Toks.T_IS_GREATER_OR_EQUAL,\r\n\t\tT_IS_SMALLER_OR_EQUAL = Toks.T_IS_SMALLER_OR_EQUAL,\r\n\t\tT_SR = Toks.T_SR,\r\n\t\tT_SL = Toks.T_SL,\r\n\t\tT_INSTANCEOF = Toks.T_INSTANCEOF,\r\n        T_POW = Toks.T_POW,\r\n\r\n\t\tT_UNSET_CAST = Toks.T_UNSET_CAST,\r\n\t\tT_BOOL_CAST = Toks.T_BOOL_CAST,\r\n\t\tT_OBJECT_CAST = Toks.T_OBJECT_CAST,\r\n\t\tT_ARRAY_CAST = Toks.T_ARRAY_CAST,\r\n\t\tT_STRING_CAST = Toks.T_STRING_CAST,\r\n        T_BINARY_CAST = Toks.T_BINARY_CAST,\r\n        T_DOUBLE_CAST = Toks.T_DOUBLE_CAST,\r\n\r\n\t\tT_INT_CAST = Toks.T_INT32_CAST,\r\n\t\tT_DEC = Toks.T_DEC,\r\n\t\tT_INC = Toks.T_INC,\r\n\t\tT_CLONE = Toks.T_CLONE,\r\n\t\tT_NEW = Toks.T_NEW,\r\n\t\tT_EXIT = Toks.T_EXIT,\r\n\t\tT_IF = Toks.T_IF,\r\n\t\tT_ELSEIF = Toks.T_ELSEIF,\r\n\t\tT_ELSE = Toks.T_ELSE,\r\n\t\tT_ENDIF = Toks.T_ENDIF,\r\n\t\tT_LNUMBER = Toks.T_LNUMBER,\r\n\t\tT_L64NUMBER = Toks.T_L64NUMBER, \r\n\t\tT_DNUMBER = Toks.T_DNUMBER,\r\n\t\tT_STRING = Toks.T_STRING,\r\n\t\tT_STRING_VARNAME = Toks.T_STRING_VARNAME,\r\n\t\tT_VARIABLE = Toks.T_VARIABLE,\r\n\t\tT_NUM_STRING = Toks.T_NUM_STRING,\r\n\t\tT_INLINE_HTML = Toks.T_INLINE_HTML,\r\n\t\tT_CHARACTER = Toks.T_CHARACTER,\r\n\t\tT_BAD_CHARACTER = Toks.T_BAD_CHARACTER,\r\n\t\tT_ENCAPSED_AND_WHITESPACE = Toks.T_ENCAPSED_AND_WHITESPACE,\r\n\t\tT_CONSTANT_ENCAPSED_STRING = Toks.T_CONSTANT_ENCAPSED_STRING,\r\n\t\tT_ECHO = Toks.T_ECHO,\r\n\t\tT_DO = Toks.T_DO,\r\n\t\tT_WHILE = Toks.T_WHILE,\r\n\t\tT_ENDWHILE = Toks.T_ENDWHILE,\r\n\t\tT_FOR = Toks.T_FOR,\r\n\t\tT_ENDFOR = Toks.T_ENDFOR,\r\n\t\tT_FOREACH = Toks.T_FOREACH,\r\n\t\tT_ENDFOREACH = Toks.T_ENDFOREACH,\r\n        T_DECLARE = Toks.T_DECLARE,\r\n        T_ENDDECLARE = Toks.T_ENDDECLARE,\r\n\t\tT_AS = Toks.T_AS,\r\n\t\tT_SWITCH = Toks.T_SWITCH,\r\n\t\tT_ENDSWITCH = Toks.T_ENDSWITCH,\r\n\t\tT_CASE = Toks.T_CASE,\r\n\t\tT_DEFAULT = Toks.T_DEFAULT,\r\n\t\tT_BREAK = Toks.T_BREAK,\r\n\t\tT_CONTINUE = Toks.T_CONTINUE,\r\n\t\tT_FUNCTION = Toks.T_FUNCTION,\r\n\t\tT_CONST = Toks.T_CONST,\r\n\t\tT_RETURN = Toks.T_RETURN,\r\n        T_YIELD = Toks.T_YIELD,\r\n\t\tT_TRY = Toks.T_TRY,\r\n\t\tT_CATCH = Toks.T_CATCH,\r\n        T_FINALLY = Toks.T_FINALLY,\r\n        T_THROW = Toks.T_THROW,\r\n\t\tT_GLOBAL = Toks.T_GLOBAL,\r\n\t\tT_PUBLIC = Toks.T_PUBLIC,\r\n\t\tT_PROTECTED = Toks.T_PROTECTED,\r\n\t\tT_PRIVATE = Toks.T_PRIVATE,\r\n\t\tT_FINAL = Toks.T_FINAL,\r\n\t\tT_ABSTRACT = Toks.T_ABSTRACT,\r\n\t\tT_STATIC = Toks.T_STATIC,\r\n\t\tT_VAR = Toks.T_VAR,\r\n\t\tT_UNSET = Toks.T_UNSET,\r\n\t\tT_ISSET = Toks.T_ISSET,\r\n\t\tT_EMPTY = Toks.T_EMPTY,\r\n\t\tT_CLASS = Toks.T_CLASS,\r\n        T_TRAIT = Toks.T_TRAIT,\r\n\t\tT_INTERFACE = Toks.T_INTERFACE,\r\n        T_INSTEADOF = Toks.T_INSTEADOF,\r\n\t\tT_EXTENDS = Toks.T_EXTENDS,\r\n\t\tT_IMPLEMENTS = Toks.T_IMPLEMENTS,\r\n\t\tT_OBJECT_OPERATOR = Toks.T_OBJECT_OPERATOR,\r\n\t\tT_DOUBLE_ARROW = Toks.T_DOUBLE_ARROW,\r\n\t\tT_LIST = Toks.T_LIST,\r\n\t\tT_ARRAY = Toks.T_ARRAY,\r\n        T_CALLABLE = Toks.T_CALLABLE,\r\n\t\tT_CLASS_C = Toks.T_CLASS_C,\r\n        T_TRAIT_C = Toks.T_TRAIT_C,\r\n\t\tT_METHOD_C = Toks.T_METHOD_C,\r\n\t\tT_FUNC_C = Toks.T_FUNC_C,\r\n\t\tT_LINE = Toks.T_LINE,\r\n\t\tT_FILE = Toks.T_FILE,\r\n        T_DIR = Toks.T_DIR,\r\n\t\tT_COMMENT = Toks.T_COMMENT,\r\n\t\tT_DOC_COMMENT = Toks.T_DOC_COMMENT,\r\n\t\tT_OPEN_TAG = Toks.T_OPEN_TAG,\r\n\t\tT_OPEN_TAG_WITH_ECHO = Toks.T_OPEN_TAG_WITH_ECHO,\r\n\t\tT_CLOSE_TAG = Toks.T_CLOSE_TAG,\r\n\t\tT_WHITESPACE = Toks.T_WHITESPACE,\r\n\t\tT_START_HEREDOC = Toks.T_START_HEREDOC,\r\n\t\tT_END_HEREDOC = Toks.T_END_HEREDOC,\r\n\t\tT_DOLLAR_OPEN_CURLY_BRACES = Toks.T_DOLLAR_OPEN_CURLY_BRACES,\r\n\t\tT_CURLY_OPEN = Toks.T_CURLY_OPEN,\r\n\t\tT_DOUBLE_COLON = Toks.T_DOUBLE_COLON,\r\n        T_ELLIPSIS = Toks.T_ELLIPSIS,\r\n\t}\r\n\r\n\t//public enum Tokens\r\n\t//{\r\n\t//  ERROR = -1,\r\n\t//  EOF = Toks.EOF,\r\n\r\n\t//  T_GET = -3,\r\n\t//  T_SET = -4,\r\n\t//  T_CALL = -5,\r\n\t//  T_TOSTRING = -6,\r\n\t//  T_CONSTRUCT = -7,\r\n\t//  T_DESTRUCT = -8,\r\n\t//  T_PARENT = -9,\r\n\t//  T_SELF = -10,\r\n\t//  T_AUTOLOAD = -11,\r\n\t//  T_INT_TYPE = -12,\r\n\t//  T_STRING_TYPE = -13,\r\n\t//  T_BOOL_TYPE = -14,\r\n\t//  T_DOUBLE_TYPE = -15,\r\n\t//  T_ASSERT = -16,\r\n\t//  T_STRING_E = -17,\r\n\t//  T_LINE_COMMENT = -18,\r\n\t//  T_TRUE = -19,\r\n\t//  T_FALSE = -20,\r\n\t//  T_WAKEUP = -21,\r\n\t//  T_SLEEP = -22,\r\n\r\n\t//  // commands:\r\n\t//  ParseDecimalNumber = -25,\r\n\t//  ParseHexadecimalNumber = -26,\r\n\t//  ParseDouble = -27,\r\n\t//  DoubleQuotedString = -28,\r\n\t//  SingleQuotedString = -29,\r\n\t//  OctalCharCode = -30,\r\n\t//  HexCharCode = -31,\r\n\t//  UnicodeCharCode = -32,\r\n\t//  UnicodeCharName = -33,\r\n\t//  EscapedCharacter = -34,\r\n\r\n\r\n\t//  T_LINQ_SELECT = 2,\r\n\t//  T_LINQ_BY = 3,\r\n\t//  T_LINQ_WHERE = 4,\r\n\t//  T_LINQ_DESCENDING = 5,\r\n\t//  T_LINQ_ASCENDING = 6,\r\n\t//  T_LINQ_ORDERBY = 7,\r\n\t//  T_LINQ_GROUP = 8,\r\n\t//  T_LINQ_FROM = 9,\r\n\t//  T_LINQ_IN = 10,\r\n\r\n\t//  T_LGENERIC = 11,\r\n\t//  T_RGENERIC = 12,\r\n\r\n\t//  // todo: match token numbers against PHP\r\n\t//  T_GOTO = 13,\r\n\t//  T_IMPORT = 14,\r\n\t//  T_NAMESPACE = 15,\r\n\t//  T_NAMESPACE_C = 16,\r\n\t//  T_NAMESPACE_NAME = 17,\r\n\t//  T_BINARY_DOUBLE = 18,\r\n\t//  T_BINARY_HEREDOC = 19,\r\n\t//  T_UNICODE_CAST = 20,\r\n\r\n\t//  T_LPAREN = (int)'(',\r\n\t//  T_RPAREN = (int)')',\r\n\t//  T_LBRACKET = (int)'[',\r\n\t//  T_RBRACKET = (int)']',\r\n\t//  T_LBRACE = (int)'{',\r\n\t//  T_RBRACE = (int)'}',\r\n\t//  T_SEMI = (int)';',\r\n\t//  T_COLON = (int)':',\r\n\t//  T_COMMA = (int)',',\r\n\t//  T_DOT = (int)'.',\r\n\t//  T_PIPE = (int)'|',\r\n\t//  T_CARET = (int)'^',\r\n\t//  T_AMP = (int)'&',\r\n\t//  T_PLUS = (int)'+',\r\n\t//  T_MINUS = (int)'-',\r\n\t//  T_SLASH = (int)'/',\r\n\t//  T_MUL = (int)'*',\r\n\t//  T_EQ = (int)'=',\r\n\t//  T_PERCENT = (int)'%',\r\n\t//  T_EXCLAM = (int)'!',\r\n\t//  T_TILDE = (int)'~',\r\n\t//  T_DOLLAR = (int)'$',\r\n\t//  T_LT = (int)'<',\r\n\t//  T_GT = (int)'>',\r\n\t//  T_QUESTION = (int)'?',\r\n\t//  T_AT = (int)'@',\r\n\t//  T_DOUBLE_QUOTES = (int)'\"',\r\n\t//  T_BACKQUOTE = (int)'`',\r\n\r\n\t//  T_REQUIRE_ONCE = 258,\r\n\t//  T_REQUIRE = 259,\r\n\t//  T_EVAL = 260,\r\n\t//  T_INCLUDE_ONCE = 261,\r\n\t//  T_INCLUDE = 262,\r\n\t//  T_LOGICAL_OR = 263,\r\n\t//  T_LOGICAL_XOR = 264,\r\n\t//  T_LOGICAL_AND = 265,\r\n\t//  T_PRINT = 266,\r\n\t//  T_SR_EQUAL = 267,\r\n\t//  T_SL_EQUAL = 268,\r\n\t//  T_XOR_EQUAL = 269,\r\n\t//  T_OR_EQUAL = 270,\r\n\t//  T_AND_EQUAL = 271,\r\n\t//  T_MOD_EQUAL = 272,\r\n\t//  T_CONCAT_EQUAL = 273,\r\n\t//  T_DIV_EQUAL = 274,\r\n\t//  T_MUL_EQUAL = 275,\r\n\t//  T_MINUS_EQUAL = 276,\r\n\t//  T_PLUS_EQUAL = 277,\r\n\t//  T_BOOLEAN_OR = 278,\r\n\t//  T_BOOLEAN_AND = 279,\r\n\t//  T_IS_NOT_IDENTICAL = 280,\r\n\t//  T_IS_IDENTICAL = 281,\r\n\t//  T_IS_NOT_EQUAL = 282,\r\n\t//  T_IS_EQUAL = 283,\r\n\t//  T_IS_GREATER_OR_EQUAL = 284,\r\n\t//  T_IS_SMALLER_OR_EQUAL = 285,\r\n\t//  T_SR = 286,\r\n\t//  T_SL = 287,\r\n\t//  T_INSTANCEOF = 288,\r\n\t//  T_UNSET_CAST = 289,\r\n\t//  T_BOOL_CAST = 290,\r\n\t//  T_OBJECT_CAST = 291,\r\n\t//  T_ARRAY_CAST = 292,\r\n\t//  T_STRING_CAST = 293,\r\n\t//  T_DOUBLE_CAST = 294,\r\n\t//  T_INT_CAST = 295,\r\n\t//  T_DEC = 296,\r\n\t//  T_INC = 297,\r\n\t//  T_CLONE = 298,\r\n\t//  T_NEW = 299,\r\n\t//  T_EXIT = 300,\r\n\t//  T_IF = 301,\r\n\t//  T_ELSEIF = 302,\r\n\t//  T_ELSE = 303,\r\n\t//  T_ENDIF = 304,\r\n\t//  T_LNUMBER = 305,\r\n\t//  T_DNUMBER = 306,\r\n\t//  T_STRING = 307,\r\n\t//  T_STRING_VARNAME = 308,\r\n\t//  T_VARIABLE = 309,\r\n\t//  T_NUM_STRING = 310,\r\n\t//  T_INLINE_HTML = 311,\r\n\t//  T_CHARACTER = 312,\r\n\t//  T_BAD_CHARACTER = 313,\r\n\t//  T_ENCAPSED_AND_WHITESPACE = 314,\r\n\t//  T_CONSTANT_ENCAPSED_STRING = 315,\r\n\t//  T_ECHO = 316,\r\n\t//  T_DO = 317,\r\n\t//  T_WHILE = 318,\r\n\t//  T_ENDWHILE = 319,\r\n\t//  T_FOR = 320,\r\n\t//  T_ENDFOR = 321,\r\n\t//  T_FOREACH = 322,\r\n\t//  T_ENDFOREACH = 323,\r\n\t//  T_DECLARE = 324,\r\n\t//  T_ENDDECLARE = 325,\r\n\t//  T_AS = 326,\r\n\t//  T_SWITCH = 327,\r\n\t//  T_ENDSWITCH = 328,\r\n\t//  T_CASE = 329,\r\n\t//  T_DEFAULT = 330,\r\n\t//  T_BREAK = 331,\r\n\t//  T_CONTINUE = 332,\r\n\t//  T_FUNCTION = 333,\r\n\t//  T_CONST = 334,\r\n\t//  T_RETURN = 335,\r\n\t//  T_TRY = 336,\r\n\t//  T_CATCH = 337,\r\n\t//  T_THROW = 338,\r\n\t//  T_USE = 339,\r\n\t//  T_GLOBAL = 340,\r\n\t//  T_PUBLIC = 341,\r\n\t//  T_PROTECTED = 342,\r\n\t//  T_PRIVATE = 343,\r\n\t//  T_FINAL = 344,\r\n\t//  T_ABSTRACT = 345,\r\n\t//  T_STATIC = 346,\r\n\t//  T_VAR = 347,\r\n\t//  T_UNSET = 348,\r\n\t//  T_ISSET = 349,\r\n\t//  T_EMPTY = 350,\r\n\t//  T_CLASS = 352,\r\n\t//  T_INTERFACE = 353,\r\n\t//  T_EXTENDS = 354,\r\n\t//  T_IMPLEMENTS = 355,\r\n\t//  T_OBJECT_OPERATOR = 356,\r\n\t//  T_DOUBLE_ARROW = 357,\r\n\t//  T_LIST = 358,\r\n\t//  T_ARRAY = 359,\r\n\t//  T_CLASS_C = 360,\r\n\t//  T_METHOD_C = 361,\r\n\t//  T_FUNC_C = 362,\r\n\t//  T_LINE = 363,\r\n\t//  T_FILE = 364,\r\n\t//  T_COMMENT = 365,\r\n\t//  T_DOC_COMMENT = 366,\r\n\t//  T_OPEN_TAG = 367,\r\n\t//  T_OPEN_TAG_WITH_ECHO = 368,\r\n\t//  T_CLOSE_TAG = 369,\r\n\t//  T_WHITESPACE = 370,\r\n\t//  T_START_HEREDOC = 371,\r\n\t//  T_END_HEREDOC = 372,\r\n\t//  T_DOLLAR_OPEN_CURLY_BRACES = 373,\r\n\t//  T_CURLY_OPEN = 374,\r\n\t//  T_DOUBLE_COLON = 375\r\n\t//}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/PhpSourceFile.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Tomas Matousek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Represents a PHP source file.\r\n\t/// </summary>\r\n\tpublic sealed class PhpSourceFile\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t/// <summary>\r\n\t\t/// Root path used for path relativization.\r\n\t\t/// </summary>\r\n\t\tpublic FullPath Root { get { return root; } }\r\n\t\tprivate readonly FullPath root;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full cannonical path to the source file.\r\n\t\t/// </summary>\r\n\t\tpublic FullPath FullPath\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// converts from relative path if not known:\r\n\t\t\t\tif (fullPath.IsEmpty)\r\n\t\t\t\t\tfullPath = relativePath.ToFullPath(root);\r\n\t\t\t\treturn fullPath;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate FullPath fullPath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Path to the source file relative to the <see cref=\"Root\"/>.\r\n\t\t/// </summary>\r\n\t\tpublic RelativePath RelativePath\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\t// converts from full path if not known:\r\n\t\t\t\tif (relativePath.IsEmpty)\r\n\t\t\t\t\trelativePath = new RelativePath(root, fullPath);\r\n\r\n\t\t\t\treturn relativePath;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate RelativePath relativePath;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Full path to directory containing the source file.\r\n\t\t/// </summary>\r\n\t\tpublic FullPath Directory\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (directory.IsEmpty)\r\n\t\t\t\t\tdirectory = new FullPath(System.IO.Path.GetDirectoryName(this.FullPath), false); // TODO: optimize\r\n\t\t\t\treturn directory;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate FullPath/*!*/ directory;\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic PhpSourceFile(FullPath root, FullPath fullPath)\r\n\t\t{\r\n\t\t\troot.EnsureNonEmpty(\"root\");\r\n\t\t\tfullPath.EnsureNonEmpty(\"fullPath\");\r\n\r\n\t\t\tthis.fullPath = fullPath;\r\n\t\t\tthis.relativePath = RelativePath.Empty;\r\n\t\t\tthis.root = root;\r\n\t\t}\r\n\r\n\t\tpublic PhpSourceFile(FullPath root, RelativePath relativePath)\r\n\t\t{\r\n\t\t\troot.EnsureNonEmpty(\"root\");\r\n\r\n\t\t\tthis.root = root;\r\n\t\t\tthis.fullPath = FullPath.Empty;\r\n\t\t\tthis.relativePath = relativePath;\r\n\t\t}\r\n\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tDebug.Assert(obj == null || obj is PhpSourceFile, \"Comparing incomparable objects.\");\r\n\t\t\treturn Equals(obj as PhpSourceFile);\r\n\t\t}\r\n\r\n\t\tpublic bool Equals(PhpSourceFile other)\r\n\t\t{\r\n\t\t\tif (ReferenceEquals(other, this)) return true;\r\n\t\t\tif (other == null) return false;\r\n\r\n\t\t\t// assuming full to relative conversion is faster:\r\n\t\t\tif (this.fullPath.IsEmpty || other.fullPath.IsEmpty)\r\n\t\t\t\treturn this.root.Equals(other.root) && this.RelativePath.Equals(other.RelativePath);\r\n\t\t\telse\r\n\t\t\t\treturn this.fullPath.Equals(other.fullPath);\r\n\t\t}\r\n\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\t// assuming full to relative conversion is faster:\r\n\t\t\treturn root.GetHashCode() ^ RelativePath.GetHashCode();\r\n\t\t}\r\n\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn this.fullPath.IsEmpty ? this.relativePath.ToString() : this.fullPath.ToString();\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "Source/Core.Parsers/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing System.Resources;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"PhpNet.Core.Parsers\")]\r\n[assembly: AssemblyDescription(\"PhpNetCore Parser Library\")]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"c7052f8c-341d-45aa-8209-47656eb896b5\")]\r\n\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cfbcc1fd851a8a7bdbea1fcd2a974e9b30d66e78bd559ee4b6601165b95bf88fa560523627862acffc0480b1ed91ee84220e76473a3f93e394fb3f452dea4928b915f3f994d26a5863956f1ccf5f772176a70371cac2a9ace9dfc756cc4033ef192b880bac533ee800ccdea929c5d51dbfc7e5003f23753916438f3dd6d7889d\")]\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core.Parsers.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001006759d806c997ee61480837e1f990757b79760c4735e92ce6b606794a3ff501f876ee640e919e91eedf39d96d26a8cc2669595e8633b68d53a1909c500ef8e5e41059a62c3402f8e716a26867163c4c51a79b112b6abe7ad4a32488a31d57dd9fc45819679e14883705a8608d5d4f15088448020bc9c6b88305aeec8c35ce7988\")]\r\n\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3c182f57d3158a916b477e7fbdb05d2733bf65c53e5ad976bd1af240211998dd8ffb116d73e2d2059909f1578a4031b3a33c0dc892d22834960f413ca1ebbe0cfe631c84d4ba26cb5f44f4fd8785a08260d44600fa6b6fddd8a4ace4d7d86a9f5d7884539b343973d8b4ac305ccffda775c493326aee5284e8b963b297a7eb9\")]\r\n[assembly: InternalsVisibleTo(\"PhpNet.Core.CodeDom, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3c182f57d3158a916b477e7fbdb05d2733bf65c53e5ad976bd1af240211998dd8ffb116d73e2d2059909f1578a4031b3a33c0dc892d22834960f413ca1ebbe0cfe631c84d4ba26cb5f44f4fd8785a08260d44600fa6b6fddd8a4ace4d7d86a9f5d7884539b343973d8b4ac305ccffda775c493326aee5284e8b963b297a7eb9\")]\r\n\r\n[assembly: InternalsVisibleTo(\"PHP.Language, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b74f6114dcb75b60485b38820a516d1592ba89587f8449feac300570596bddac07226721e06178a9d2f8fbf0887bde659421378186cf0bfa31908b8f1965cc2cebeba22c9b232fb6cf5183eb12588bbdd61f0df0b390352f8be981f950642fedb8ad7cb241808f233cecb8ebaa2eb45b657744e95200c51ec39b686c66ad2eb6\")]\r\n[assembly: InternalsVisibleTo(\"Phalanger.LanguageService, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b74f6114dcb75b60485b38820a516d1592ba89587f8449feac300570596bddac07226721e06178a9d2f8fbf0887bde659421378186cf0bfa31908b8f1965cc2cebeba22c9b232fb6cf5183eb12588bbdd61f0df0b390352f8be981f950642fedb8ad7cb241808f233cecb8ebaa2eb45b657744e95200c51ec39b686c66ad2eb6\")]\r\n[assembly: InternalsVisibleTo(\"ControlFlow, PublicKey=00240000048000009400000006020000002400005253413100040000010001007f76493bf62c3a11fc4aedde33c9767dc38c5300dd9c3e7df13a766f4a0abc85fdee440584ba1d122cc9a0d220a78dd3532b4d7e4a4365d5347d183fc9bceacdc18336c66bb71b5f0a02ede53a080136f39f44482c35a4f96c8dece4a9953c4ec7234e6609d57754c1069efcd96f1c3e32be0cb8f3a97f48a426472e5e0c02ba\")]\r\n"
  },
  {
    "path": "Source/Core.Parsers/PropertyCollection.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core\r\n{\r\n    /// <summary>\r\n    /// Provides set of keyed properties.\r\n    /// </summary>\r\n    public interface IPropertyCollection\r\n    {\r\n        /// <summary>\r\n        /// Sets property into collection.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key to the property, cannot be <c>null</c>.</param>\r\n        /// <param name=\"value\">Value.</param>\r\n        void SetProperty(object key, object value);\r\n\r\n        /// <summary>\r\n        /// Sets property into collection under the key <c>typeof(T)</c>.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of the value and property key.</typeparam>\r\n        /// <param name=\"value\">Value.</param>\r\n        void SetProperty<T>(T value);\r\n\r\n        /// <summary>\r\n        /// Gets property from the collection.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key to the property, cannot be <c>null</c>.</param>\r\n        /// <returns>Property value or <c>null</c> if property does not exist.</returns>\r\n        object GetProperty(object key);\r\n\r\n        /// <summary>\r\n        /// Gets property of type <typeparamref name=\"T\"/> from the collection.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type and key of the property.</typeparam>\r\n        /// <returns>Property value.</returns>\r\n        T GetProperty<T>();\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        bool TryGetProperty(object key, out object value);\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        bool TryGetProperty<T>(out T value);\r\n\r\n        /// <summary>\r\n        /// Removes property from the collection.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key to the property.</param>\r\n        /// <returns><c>True</c> if property was found and removed, otherwise <c>false</c>.</returns>\r\n        bool RemoveProperty(object key);\r\n\r\n        /// <summary>\r\n        /// Removes property from the collection.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Key to the property.</typeparam>\r\n        /// <returns><c>True</c> if property was found and removed, otherwise <c>false</c>.</returns>\r\n        bool RemoveProperty<T>();\r\n\r\n        /// <summary>\r\n        /// Clear the collection of properties.\r\n        /// </summary>\r\n        void ClearProperties();\r\n\r\n        /// <summary>\r\n        /// Gets or sets property.\r\n        /// </summary>\r\n        /// <param name=\"key\">Property key, cannot be <c>null</c>.</param>\r\n        /// <returns>Property value or <c>null</c> if property does not exist.</returns>\r\n        object this[object key] { get; set; }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Manages list of properties, organized by a key.\r\n    /// </summary>\r\n    [Serializable]\r\n    public struct PropertyCollection : IPropertyCollection\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Reference to actual collection of properties.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This mechanism saves memory for small properties sets.\r\n        /// type of this object depends on amount of properties in the set.\r\n        /// </remarks>\r\n        private object _obj;\r\n\r\n        /// <summary>\r\n        /// Type of the hybrid table.\r\n        /// </summary>\r\n        private object _type;\r\n\r\n        private static readonly object TypeHashtable = new object();\r\n        private static readonly object TypeList = new object();\r\n        \r\n        /// <summary>\r\n        /// If amount of properties exceeds this number, hashtable will be used instead of an array.\r\n        /// </summary>\r\n        private const int MaxListSize = 8;\r\n\r\n        #endregion\r\n\r\n        #region Nested class: DictionaryNode\r\n\r\n        [Serializable]\r\n        private sealed class DictionaryNode\r\n        {\r\n            public object key;\r\n            public object value;\r\n            public PropertyCollection.DictionaryNode next;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Public methods\r\n\r\n        /// <summary>\r\n        /// Sets property into the container.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key.</param>\r\n        /// <param name=\"value\">Value.</param>\r\n        public void SetProperty(object key, object value)\r\n        {\r\n            CheckKey(key);\r\n\r\n            //\r\n            object p = _type;\r\n            object o = _obj;\r\n\r\n            // empty list\r\n            if (p == null)\r\n            {\r\n                _type = key;\r\n                _obj = value;\r\n            }\r\n            // one item list, with the same key\r\n            else if (object.Equals(p, key))\r\n            {\r\n                _obj = value;\r\n            }\r\n            // linked list\r\n            else if (object.ReferenceEquals(p, TypeList))\r\n            {\r\n                Debug.Assert(o is DictionaryNode);\r\n\r\n                // replaces value if key already in collection,\r\n                // counts items\r\n                int count = 0;\r\n                for (var node = (DictionaryNode)o; node != null; node = node.next)\r\n                {\r\n                    if (object.Equals(node.key, key))\r\n                    {\r\n                        node.value = value;\r\n                        return;\r\n                    }\r\n                    count++;\r\n                }\r\n\r\n                // add new item\r\n                if (count < MaxListSize)\r\n                {\r\n                    _obj = new DictionaryNode() { key = key, value = value, next = (DictionaryNode)o };\r\n                }\r\n                else\r\n                {\r\n                    // upgrade to hashtable\r\n                    var hashtable = ToHashtable((DictionaryNode)o);\r\n                    hashtable.Add(key, value);\r\n\r\n                    _obj = hashtable;\r\n                    _type = TypeHashtable;\r\n                }\r\n            }\r\n            // hashtable\r\n            else if (object.ReferenceEquals(p, TypeHashtable))\r\n            {\r\n                Debug.Assert(o is Hashtable);\r\n                ((Hashtable)o)[key] = value;\r\n            }\r\n            // one item list,\r\n            // upgrade to linked list\r\n            else\r\n            {\r\n                _obj = new DictionaryNode()\r\n                {\r\n                    key = key,\r\n                    value = value,\r\n                    next = new DictionaryNode()\r\n                    {\r\n                        key = p,\r\n                        value = o,\r\n                        next = null,\r\n                    }\r\n                };\r\n                _type = TypeList;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets property into the container.\r\n        /// </summary>\r\n        public void SetProperty<T>(T value)\r\n        {\r\n            SetProperty(typeof(T), (object)value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key.</param>\r\n        /// <param name=\"value\">Out. Value of the property.</param>\r\n        /// <returns><c>true</c> if the property was found, otherwise <c>false</c>.</returns>\r\n        public bool TryGetProperty(object key, out object value)\r\n        {\r\n            CheckKey(key);\r\n\r\n            object p = _type;\r\n            object o = _obj;\r\n\r\n            // empty container\r\n            if (p != null)\r\n            {\r\n                if (object.Equals(p, key))\r\n                {\r\n                    value = o;\r\n                    return true;\r\n                }\r\n                else if (object.ReferenceEquals(p, TypeList))\r\n                {\r\n                    Debug.Assert(o is DictionaryNode);\r\n                    for (var node = (DictionaryNode)o; node != null; node = node.next)\r\n                        if (object.Equals(node.key, key))\r\n                        {\r\n                            value = node.value;\r\n                            return true;\r\n                        }\r\n                }\r\n                else if (object.ReferenceEquals(p, TypeHashtable))\r\n                {\r\n                    Debug.Assert(o is Hashtable);\r\n                    value = ((Hashtable)o)[key];\r\n                    return value != null || ((Hashtable)o).ContainsKey(key);\r\n                }\r\n            }\r\n\r\n            // nothing found\r\n            value = default(object);\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key.</param>\r\n        /// <returns><c>null</c> or property value.</returns>\r\n        public object GetProperty(object key)\r\n        {\r\n            object value;\r\n            TryGetProperty(key, out value);\r\n            return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        public T GetProperty<T>()\r\n        {\r\n            return (T)GetProperty(typeof(T));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to get property from the container.\r\n        /// </summary>\r\n        public bool TryGetProperty<T>(out T value)\r\n        {\r\n            object tmp;\r\n            if (TryGetProperty(typeof(T), out tmp))\r\n            {\r\n                value = (T)tmp;\r\n                return true;\r\n            }\r\n\r\n            value = default(T);\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes property from the container.\r\n        /// </summary>\r\n        /// <param name=\"key\">Key.</param>\r\n        /// <returns><c>True</c> if property was found and removed. otherwise <c>false</c>.</returns>\r\n        public bool RemoveProperty(object key)\r\n        {\r\n            CheckKey(key);\r\n\r\n            var p = _type;\r\n            var o = _obj;\r\n\r\n            if (p != null)\r\n            {\r\n                if (object.Equals(p, key))\r\n                {\r\n                    _type = null;\r\n                    _obj = null;\r\n                    return true;\r\n                }\r\n                else if (object.ReferenceEquals(p, TypeList))\r\n                {\r\n                    Debug.Assert(o is DictionaryNode);\r\n                    DictionaryNode prev = null;\r\n                    for (var node = (DictionaryNode)o; node != null; node = node.next)\r\n                    {\r\n                        if (object.Equals(node.key, key))\r\n                        {\r\n                            if (prev == null)\r\n                            {\r\n                                if ((_obj = node.next) == null)\r\n                                {\r\n                                    _type = null;   // empty list\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                prev.next = node.next;\r\n                            }\r\n                            \r\n                            return true;\r\n                        }\r\n\r\n                        //\r\n                        prev = node;\r\n                    }\r\n                }\r\n                else if (object.ReferenceEquals(p, TypeHashtable))\r\n                {\r\n                    Debug.Assert(o is Hashtable);\r\n                    var hashtable = (Hashtable)o;\r\n                    int count = hashtable.Count;\r\n                    hashtable.Remove(key);\r\n                    if (hashtable.Count != count)\r\n                    {\r\n                        if (hashtable.Count <= MaxListSize)\r\n                        {\r\n                            _obj = ToList(hashtable);\r\n                            _type = TypeList;\r\n                        }\r\n\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes property from the container.\r\n        /// </summary>\r\n        public bool RemoveProperty<T>()\r\n        {\r\n            return RemoveProperty(typeof(T));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clears the container.\r\n        /// </summary>\r\n        public void ClearProperties()\r\n        {\r\n            _obj = _type = null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets amount of properties in the container.\r\n        /// </summary>\r\n        public int Count\r\n        {\r\n            get\r\n            {\r\n                var p = _type;\r\n                var o = _obj;\r\n\r\n                if (p == null) return 0;\r\n                if (object.ReferenceEquals(p, TypeList)) return CountItems((PropertyCollection.DictionaryNode)o);\r\n                if (object.ReferenceEquals(p, TypeHashtable)) return ((Hashtable)o).Count;\r\n                return 1;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets named property.\r\n        /// </summary>\r\n        /// <param name=\"key\">Property key.</param>\r\n        /// <returns>Property value or <c>null</c>.</returns>\r\n        public object this[object key]\r\n        {\r\n            get\r\n            {\r\n                return this.GetProperty(key);\r\n            }\r\n            set\r\n            {\r\n                this.SetProperty(key, value);\r\n            }\r\n        }\r\n        \r\n        #endregion\r\n\r\n        #region Helper functions\r\n\r\n        private static void CheckKey(object key)\r\n        {\r\n            if (key == null)\r\n                throw new ArgumentNullException(\"key\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Counts items in the linked list.\r\n        /// </summary>\r\n        private static int CountItems(DictionaryNode head)\r\n        {\r\n            int count = 0;\r\n            for (var p = head; p != null; p = p.next)\r\n                count++;\r\n            return count;\r\n        }\r\n\r\n        private static Hashtable/*!*/ToHashtable(DictionaryNode/*!*/node)\r\n        {\r\n            var hashtable = new Hashtable(13);\r\n\r\n            for (var p = node; p != null; p = p.next)\r\n                hashtable.Add(p.key, p.value);\r\n\r\n            return hashtable;\r\n        }\r\n        private static DictionaryNode ToList(Hashtable/*!*/hashtable)\r\n        {\r\n            DictionaryNode list = null;\r\n            foreach (DictionaryEntry p in hashtable)\r\n            {\r\n                list = new DictionaryNode() { key = p.Key, value = p.Value, next = list };\r\n            }\r\n            return list;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Helper reference object implementing <see cref=\"IPropertyCollection\"/>\r\n    /// </summary>\r\n    [Serializable]\r\n    [DebuggerDisplay(\"Count = {_properties.Count}\")]\r\n    public class PropertyCollectionClass : IPropertyCollection\r\n    {\r\n        /// <summary>\r\n        /// Internbal collection (struct).\r\n        /// </summary>\r\n        private PropertyCollection _properties = new PropertyCollection();\r\n\r\n        public object this[object key]\r\n        {\r\n            get\r\n            {\r\n                return _properties.GetProperty(key);\r\n            }\r\n\r\n            set\r\n            {\r\n                _properties.SetProperty(key, value);\r\n            }\r\n        }\r\n\r\n        public void ClearProperties()\r\n        {\r\n            _properties.ClearProperties();\r\n        }\r\n\r\n        public object GetProperty(object key)\r\n        {\r\n            return _properties.GetProperty(key);\r\n        }\r\n\r\n        public T GetProperty<T>()\r\n        {\r\n            return _properties.GetProperty<T>();\r\n        }\r\n\r\n        public bool RemoveProperty(object key)\r\n        {\r\n            return _properties.RemoveProperty(key);\r\n        }\r\n\r\n        public bool RemoveProperty<T>()\r\n        {\r\n            return _properties.RemoveProperty<T>();\r\n        }\r\n\r\n        public void SetProperty(object key, object value)\r\n        {\r\n            _properties.SetProperty(key, value);\r\n        }\r\n\r\n        public void SetProperty<T>(T value)\r\n        {\r\n            _properties.SetProperty<T>(value);\r\n        }\r\n\r\n        public bool TryGetProperty(object key, out object value)\r\n        {\r\n            return _properties.TryGetProperty(key, out value);\r\n        }\r\n\r\n        public bool TryGetProperty<T>(out T value)\r\n        {\r\n            return _properties.TryGetProperty<T>(out value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets value from collection. If value is not set yet, it is created using provided factory.\r\n        /// </summary>\r\n        public T GetOrCreateProperty<T>(Func<T>/*!*/factory)\r\n        {\r\n            T value;\r\n            if (this.TryGetProperty<T>(out value) == false)\r\n            {\r\n                this.SetProperty<T>(value = factory());\r\n            }\r\n\r\n            return value;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/SourceUnit.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core.Parsers;\r\nusing PHP.Core.Text;\r\nusing System.IO;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region SourceUnit\r\n\r\n    /// <summary>\r\n    /// Represents single source document.\r\n    /// </summary>\r\n    public abstract class SourceUnit : ILineBreaks, IPropertyCollection\r\n    {\r\n        #region Fields & Properties\r\n\r\n        /// <summary>\r\n        /// Source file containing the unit. For evals, it can be even a non-php source file.\r\n        /// Used for emitting debug information and error reporting.\r\n        /// </summary>\r\n        public PhpSourceFile/*!*/ SourceFile { get { return sourceFile; } }\r\n        protected readonly PhpSourceFile/*!*/ sourceFile;\r\n\r\n        public AST.GlobalCode Ast { get { return ast; } }\r\n        protected AST.GlobalCode ast;\r\n\r\n        /// <summary>\r\n        /// Set of object properties.\r\n        /// </summary>\r\n        private PropertyCollection innerProps;\r\n\r\n        /// <summary>\r\n        /// Gets line breaks for this source unit.\r\n        /// </summary>\r\n        /// <remarks>Line breaks are used to resolve line and column number from given position.</remarks>\r\n        public ILineBreaks/*!*/LineBreaks { get { return (ILineBreaks)this; } }\r\n\r\n        /// <summary>\r\n        /// Line breaks managed internally.\r\n        /// </summary>\r\n        protected ILineBreaks innerLineBreaks;\r\n\r\n        /// <summary>\r\n        /// Naming context defining aliases.\r\n        /// </summary>\r\n        public NamingContext/*!*/ Naming\r\n        {\r\n            get { return this.naming; }\r\n            internal set\r\n            {\r\n                if (value == null) throw new ArgumentNullException();\r\n                this.naming = value;\r\n            }\r\n        }\r\n        private NamingContext/*!*/naming;\r\n\r\n        /// <summary>\r\n        /// Current namespace (in case we are compiling through eval from within namespace).\r\n        /// </summary>\r\n        public QualifiedName? CurrentNamespace { get { return this.naming.CurrentNamespace; } }\r\n        \r\n        public List<QualifiedName>/*!*/ImportedNamespaces { get { return importedNamespaces; } }\r\n        private readonly List<QualifiedName>/*!*/importedNamespaces = new List<QualifiedName>();\r\n        public bool HasImportedNamespaces { get { return this.importedNamespaces != null && this.importedNamespaces.Count != 0; } }\r\n\r\n        /// <summary>\r\n        /// Encoding of the file or the containing file.\r\n        /// </summary>\r\n        public Encoding/*!*/ Encoding { get { return encoding; } }\r\n        protected readonly Encoding/*!*/ encoding;\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether we are in pure mode.\r\n        /// </summary>\r\n        public virtual bool IsPure { get { return false; } }\r\n\r\n        /// <summary>\r\n        /// Gets value indicating whether we are processing transient unit.\r\n        /// </summary>\r\n        public virtual bool IsTransient { get { return false; } }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public SourceUnit(PhpSourceFile/*!*/ sourceFile, Encoding/*!*/ encoding, ILineBreaks/*!*/lineBreaks)\r\n        {\r\n            Debug.Assert(sourceFile != null && encoding != null);\r\n            Debug.Assert(lineBreaks != null);\r\n\r\n            this.sourceFile = sourceFile;\r\n            this.encoding = encoding;\r\n            this.innerLineBreaks = lineBreaks;\r\n            this.naming = new NamingContext(null, null);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Abstract Methods\r\n\r\n        public abstract void Parse(\r\n            ErrorSink/*!*/ errors, IReductionsSink/*!*/ reductionsSink,\r\n            LanguageFeatures features);\r\n\r\n        public abstract void Close();\r\n\r\n        public abstract string GetSourceCode(Text.Span span);\r\n\r\n        #endregion\r\n\r\n        #region Source Position Mapping (#pragma line/file)\r\n\r\n        public const int DefaultLine = Int32.MinValue;\r\n        public const string DefaultFile = null;\r\n\r\n        private List<int> mappedPathsAnchors;\r\n        private List<string> mappedPaths;\r\n        private List<int> mappedLinesAnchors;\r\n        private List<int> mappedLines;\r\n\r\n        internal void AddSourceFileMapping(int realLine, string mappedFullPath)\r\n        {\r\n            if (mappedPathsAnchors == null)\r\n            {\r\n                mappedPathsAnchors = new List<int>();\r\n                mappedPaths = new List<string>();\r\n            }\r\n\r\n            mappedPathsAnchors.Add(realLine);\r\n            mappedPaths.Add(mappedFullPath);\r\n        }\r\n\r\n        internal void AddSourceLineMapping(int realLine, int mappedLine)\r\n        {\r\n            if (mappedLinesAnchors == null)\r\n            {\r\n                mappedLinesAnchors = new List<int>();\r\n                mappedLines = new List<int>();\r\n            }\r\n\r\n            mappedLinesAnchors.Add(realLine);\r\n            mappedLines.Add(mappedLine);\r\n        }\r\n\r\n        public string/*!*/ GetMappedFullSourcePath(int realLine)\r\n        {\r\n            if (mappedPathsAnchors == null) return sourceFile.FullPath;\r\n            Debug.Assert(mappedPaths != null);\r\n\r\n            int index = mappedPathsAnchors.BinarySearch(realLine);\r\n\r\n            // the line containing the pragma:\r\n            string result;\r\n            if (index >= 0)\r\n            {\r\n                result = mappedPaths[index];\r\n            }\r\n            else\r\n            {\r\n                index = ~index - 1;\r\n                result = (index < 0) ? sourceFile.FullPath : mappedPaths[index];\r\n            }\r\n\r\n            return (result != DefaultFile) ? result : sourceFile.FullPath;\r\n        }\r\n\r\n        public int GetMappedLine(int realLine)\r\n        {\r\n            if (mappedLinesAnchors == null) return realLine;\r\n            Debug.Assert(mappedLines != null);\r\n\r\n            int index = mappedLinesAnchors.BinarySearch(realLine);\r\n\r\n            // the line containing the pragma:\r\n            if (index >= 0)\r\n                return (mappedLines[index] != 0) ? mappedLines[index] : realLine;\r\n\r\n            index = ~index - 1;\r\n\r\n            return (index < 0 || mappedLines[index] == DefaultLine) ? realLine :\r\n                mappedLines[index] + realLine - mappedLinesAnchors[index];\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ILineBreaks Members\r\n\r\n        int ILineBreaks.Count\r\n        {\r\n            get { return this.innerLineBreaks.Count; }\r\n        }\r\n\r\n        int ILineBreaks.TextLength\r\n        {\r\n            get { return this.innerLineBreaks.TextLength; }\r\n        }\r\n\r\n        int ILineBreaks.EndOfLineBreak(int index)\r\n        {\r\n            return this.innerLineBreaks.EndOfLineBreak(index);\r\n        }\r\n\r\n        public virtual int GetLineFromPosition(int position)\r\n        {\r\n            return this.innerLineBreaks.GetLineFromPosition(position);\r\n        }\r\n\r\n        public virtual void GetLineColumnFromPosition(int position, out int line, out int column)\r\n        {\r\n            this.innerLineBreaks.GetLineColumnFromPosition(position, out line, out column);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IPropertyCollection Members\r\n\r\n        void IPropertyCollection.SetProperty(object key, object value)\r\n        {\r\n            innerProps.SetProperty(key, value);\r\n        }\r\n\r\n        void IPropertyCollection.SetProperty<T>(T value)\r\n        {\r\n            innerProps.SetProperty<T>(value);\r\n        }\r\n\r\n        object IPropertyCollection.GetProperty(object key)\r\n        {\r\n            return innerProps.GetProperty(key);\r\n        }\r\n\r\n        T IPropertyCollection.GetProperty<T>()\r\n        {\r\n            return innerProps.GetProperty<T>();\r\n        }\r\n\r\n        bool IPropertyCollection.TryGetProperty(object key, out object value)\r\n        {\r\n            return innerProps.TryGetProperty(key, out value);\r\n        }\r\n\r\n        bool IPropertyCollection.TryGetProperty<T>(out T value)\r\n        {\r\n            return innerProps.TryGetProperty<T>(out value);\r\n        }\r\n\r\n        bool IPropertyCollection.RemoveProperty(object key)\r\n        {\r\n            return innerProps.RemoveProperty(key);\r\n        }\r\n\r\n        bool IPropertyCollection.RemoveProperty<T>()\r\n        {\r\n            return innerProps.RemoveProperty<T>();\r\n        }\r\n\r\n        void IPropertyCollection.ClearProperties()\r\n        {\r\n            innerProps.ClearProperties();\r\n        }\r\n\r\n        object IPropertyCollection.this[object key]\r\n        {\r\n            get\r\n            {\r\n                return innerProps[key];\r\n            }\r\n            set\r\n            {\r\n                innerProps[key] = value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region CodeSourceUnit\r\n\r\n    /// <summary>\r\n    /// Source unit from string representation of code.\r\n    /// </summary>\r\n    public class CodeSourceUnit : SourceUnit\r\n    {\r\n        #region Fields & Properties\r\n\r\n        public string/*!*/ Code { get { return code; } }\r\n        private readonly string/*!*/ code;\r\n\r\n        /// <summary>\r\n        /// Initial state of source code parser. Used by <see cref=\"Parse\"/>.\r\n        /// </summary>\r\n        private readonly Lexer.LexicalStates initialState;\r\n\r\n        #endregion\r\n\r\n        #region SourceUnit\r\n\r\n        public CodeSourceUnit(string/*!*/ code, PhpSourceFile/*!*/ sourceFile,\r\n            Encoding/*!*/ encoding, Lexer.LexicalStates initialState)\r\n            : base(sourceFile, encoding, Text.LineBreaks.Create(code))\r\n        {\r\n            this.code = code;\r\n            this.initialState = initialState;\r\n        }\r\n\r\n        public override void Parse(ErrorSink/*!*/ errors, IReductionsSink/*!*/ reductionsSink, LanguageFeatures features)\r\n        {\r\n            Parser parser = new Parser();\r\n\r\n            using (StringReader source_reader = new StringReader(code))\r\n            {\r\n                ast = parser.Parse(this, source_reader, errors, reductionsSink, initialState, features);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes <c>Ast</c> with empty <see cref=\"AST.GlobalCode\"/>.\r\n        /// </summary>\r\n        internal void SetEmptyAst()\r\n        {\r\n            this.ast = new AST.GlobalCode(new List<AST.Statement>(), this);\r\n        }\r\n\r\n        public override string GetSourceCode(Text.Span span)\r\n        {\r\n            return span.GetText(code);\r\n        }\r\n\r\n        public override void Close()\r\n        {\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helpers\r\n\r\n        /// <summary>\r\n        /// Creates source unit and parses given <paramref name=\"code\"/>.\r\n        /// </summary>\r\n        /// <param name=\"code\">Source code to be parsed.</param>\r\n        /// <param name=\"sourceFile\">Source file used for error reporting.</param>\r\n        /// <param name=\"errors\">Errors sink. Can be <c>null</c>.</param>\r\n        /// <param name=\"reductionsSink\">Reduction sink. Can be <c>null</c>.</param>\r\n        /// <param name=\"features\">Optional. Language features.</param>\r\n        /// <param name=\"initialState\">\r\n        /// Optional. Initial parser state.\r\n        /// This allows e.g. to parse PHP code without encapsulating the code into opening and closing tags.</param>\r\n        /// <returns></returns>\r\n        public static SourceUnit/*!*/ParseCode(string code, PhpSourceFile sourceFile,\r\n            ErrorSink/*!*/ errors,\r\n            IReductionsSink/*!*/ reductionsSink = null,\r\n            LanguageFeatures features = LanguageFeatures.Php5,\r\n            Lexer.LexicalStates initialState = Lexer.LexicalStates.INITIAL)\r\n        {\r\n            var/*!*/unit = new CodeSourceUnit(code, sourceFile, Encoding.UTF8, initialState);\r\n            unit.Parse(errors, reductionsSink, features);\r\n            unit.Close();\r\n\r\n            //\r\n            return unit;\r\n        }\r\n\r\n        #endregion\r\n\r\n        //#region ILineBreaks Members\r\n\r\n        //public override int GetLineFromPosition(int position)\r\n        //{\r\n        //    // shift the position\r\n        //    return base.GetLineFromPosition(position) + this.Line;\r\n        //}\r\n\r\n        //public override void GetLineColumnFromPosition(int position, out int line, out int column)\r\n        //{\r\n        //    // shift the position\r\n        //    base.GetLineColumnFromPosition(position, out line, out column);\r\n        //    if (line == 0)\r\n        //        column += this.Column;\r\n        //    line += this.Line;\r\n        //}\r\n\r\n        //#endregion\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.18052\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Core.Localizations {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    public class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Core.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (related location).\r\n        /// </summary>\r\n        public static string @__related_location {\r\n            get {\r\n                return ResourceManager.GetString(\"__related_location\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method {0}::{1}() cannot contain body.\r\n        /// </summary>\r\n        public static string abstract_bodyful_method {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_bodyful_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate abstract class &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string abstract_class_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_class_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Instantiation of abstract class or interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string abstract_class_or_interface_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_class_or_interface_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method cannot be declared final.\r\n        /// </summary>\r\n        public static string abstract_final_method_declared {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_final_method_declared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot call abstract method {0}::{1}().\r\n        /// </summary>\r\n        public static string abstract_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Names of the abstract method {0}::{1}() and its implementation {2}::{3}() must be the same (case sensitively) in the current version of Phalanger.\r\n        /// </summary>\r\n        public static string abstract_method_name_not_matching_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_name_not_matching_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; doesn&apos;t implement abstract method {1}::{2}().\r\n        /// </summary>\r\n        public static string abstract_method_not_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_method_not_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract method cannot be declared private.\r\n        /// </summary>\r\n        public static string abstract_private_method_declared {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_private_method_declared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; doesn&apos;t implement abstract property {1}::${2}.\r\n        /// </summary>\r\n        public static string abstract_property_not_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"abstract_property_not_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;&amp;&apos; modifier ignored in the function call, use &apos;&amp;&apos; modifier in function declaration to pass the argument by reference.\r\n        /// </summary>\r\n        public static string act_param_with_ampersand {\r\n            get {\r\n                return ResourceManager.GetString(\"act_param_with_ampersand\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use {0} as {1} because the name is already in use.\r\n        /// </summary>\r\n        public static string alias_in_use {\r\n            get {\r\n                return ResourceManager.GetString(\"alias_in_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous constant name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string ambiguous_constant_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_constant_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous file access mode (binary mode assumed). Specify either &apos;{0}b&apos; or &apos;{0}t&apos; or set Phalanger configuration option DefaultFileOpenMode in file-system section of .config file..\r\n        /// </summary>\r\n        public static string ambiguous_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous function name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string ambiguous_function_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_function_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string ambiguous_name_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_name_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ambiguous type name: &apos;{1}&apos; and &apos;{2}&apos; are both imported as &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string ambiguous_type_match {\r\n            get {\r\n                return ResourceManager.GetString(\"ambiguous_type_match\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Application configuration file copied..\r\n        /// </summary>\r\n        public static string application_config_file_copied {\r\n            get {\r\n                return ResourceManager.GetString(\"application_config_file_copied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argless stub for populated method &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        public static string argless_stub_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"argless_stub_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos;() is ArgsAware. It requires to be called via ArgLess stub, but was called via ArgFull. It requires arguments to be loaded on PhpStack..\r\n        /// </summary>\r\n        public static string argsaware_routine_needs_args {\r\n            get {\r\n                return ResourceManager.GetString(\"argsaware_routine_needs_args\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument {0} cannot be equal to {1}..\r\n        /// </summary>\r\n        public static string argument_equals {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_equals\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment variable name cannot contain equal character..\r\n        /// </summary>\r\n        public static string Argument_IllegalEnvVarName {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_IllegalEnvVarName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment variable name or value is too long..\r\n        /// </summary>\r\n        public static string Argument_LongEnvVarValue {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_LongEnvVarValue\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be passed by reference.\r\n        /// </summary>\r\n        public static string argument_not_passed_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} should be passed to {1}() by reference.\r\n        /// </summary>\r\n        public static string argument_not_passed_byref_to {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_byref_to\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument #{0} not passed to the function/method.\r\n        /// </summary>\r\n        public static string argument_not_passed_to_function {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_not_passed_to_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; should not be NULL.\r\n        /// </summary>\r\n        public static string argument_null {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The first char in the string is the null character..\r\n        /// </summary>\r\n        public static string Argument_StringFirstCharIsZero {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_StringFirstCharIsZero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String cannot be of zero length..\r\n        /// </summary>\r\n        public static string Argument_StringZeroLength {\r\n            get {\r\n                return ResourceManager.GetString(\"Argument_StringZeroLength\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{0}&apos; of argument &apos;{1}&apos; is not supported.\r\n        /// </summary>\r\n        public static string argument_value_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"argument_value_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arguments.\r\n        /// </summary>\r\n        public static string Arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"Arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arrays are not allowed in class constants.\r\n        /// </summary>\r\n        public static string array_in_cls_const {\r\n            get {\r\n                return ResourceManager.GetString(\"array_in_cls_const\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array to string conversion.\r\n        /// </summary>\r\n        public static string array_to_string_conversion {\r\n            get {\r\n                return ResourceManager.GetString(\"array_to_string_conversion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An array used as an object.\r\n        /// </summary>\r\n        public static string array_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"array_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script &apos;{0}&apos; inclusion failed. Script not found in the application&apos;s script libraries.\r\n        /// </summary>\r\n        public static string assembly_script_inclusion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"assembly_script_inclusion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assertion &apos;{0}&apos; failed.\r\n        /// </summary>\r\n        public static string assertion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"assertion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assigning the return value of new by reference is deprecated.\r\n        /// </summary>\r\n        public static string assign_new_as_ref_is_deprecated {\r\n            get {\r\n                return ResourceManager.GetString(\"assign_new_as_ref_is_deprecated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library function &apos;{0}&apos; called with wrong number of parameters.\r\n        /// </summary>\r\n        public static string bad_system_fcn_params_count {\r\n            get {\r\n                return ResourceManager.GetString(\"bad_system_fcn_params_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compiling {0} ....\r\n        /// </summary>\r\n        public static string begin_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"begin_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Buffering level couldn&apos;t be decresed below zero.\r\n        /// </summary>\r\n        public static string buffering_level_decreased_under_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"buffering_level_decreased_under_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Buffers must not be empty..\r\n        /// </summary>\r\n        public static string buffers_must_not_be_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"buffers_must_not_be_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The magic method __callStatic() must have public visibility and be static.\r\n        /// </summary>\r\n        public static string callstat_must_be_public_static {\r\n            get {\r\n                return ResourceManager.GetString(\"callstat_must_be_public_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not change the section of loaded library. The library &apos;{0}&apos; has already been bound to configuration section &apos;{1}&apos;..\r\n        /// </summary>\r\n        public static string cannot_change_library_section {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_change_library_section\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Changing the target instance is unsupported if the callback is already bound..\r\n        /// </summary>\r\n        public static string cannot_change_target_instance {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_change_target_instance\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot create configuration file &apos;{0}&apos;. Error: {1}.\r\n        /// </summary>\r\n        public static string cannot_create_config_file {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_create_config_file\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot derive from &apos;{0}&apos; because it is a generic type parameter.\r\n        /// </summary>\r\n        public static string cannot_derive_from_type_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_derive_from_type_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option cannot be modified here since it has been prevented to so by &apos;allowOverride&apos; attribute in configuration file &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string cannot_modify_option {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_modify_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot re-assign $this.\r\n        /// </summary>\r\n        public static string cannot_reassign_this {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_reassign_this\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot unset string offsets.\r\n        /// </summary>\r\n        public static string cannot_unset_string_offsets {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_unset_string_offsets\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name &apos;{0}&apos; is reserved and cannot be used here.\r\n        /// </summary>\r\n        public static string cannot_use_reserved_name {\r\n            get {\r\n                return ResourceManager.GetString(\"cannot_use_reserved_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t clone system classes table..\r\n        /// </summary>\r\n        public static string cant_clone_sys_table {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_clone_sys_table\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t create types for system classes..\r\n        /// </summary>\r\n        public static string cant_create_sys_class_types {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_create_sys_class_types\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t generate builders for system classes..\r\n        /// </summary>\r\n        public static string cant_generate_sys_class_builders {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_generate_sys_class_builders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This stream does not support casting as System.IO.Stream..\r\n        /// </summary>\r\n        public static string casting_to_stream_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"casting_to_stream_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Index is not within catch clausules.\r\n        /// </summary>\r\n        public static string cdp_index_not_within_catch_calusules {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_index_not_within_catch_calusules\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There is not enough items in list.\r\n        /// </summary>\r\n        public static string cdp_not_enough_items_in_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_not_enough_items_in_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Start must be greater than or equal to zero.\r\n        /// </summary>\r\n        public static string cdp_start_greater_than_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_greater_than_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to start canot be less than zero.\r\n        /// </summary>\r\n        public static string cdp_start_less_than_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_less_than_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Start must be less than number of conditions.\r\n        /// </summary>\r\n        public static string cdp_start_must_be_less_tahn_number_of_conditions {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_start_must_be_less_tahn_number_of_conditions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Statement not found.\r\n        /// </summary>\r\n        public static string cdp_statement_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_statement_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Two static variables with same name.\r\n        /// </summary>\r\n        public static string cdp_unsup_2_stat_vars_with_same_name {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_2_stat_vars_with_same_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add anything into delegate.\r\n        /// </summary>\r\n        public static string cdp_unsup_anything_delegate {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_anything_delegate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array items passed by reference are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_array_item_reference {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_array_item_reference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PHP associative array initialization cannot be done in place where additional statements cannot be inserted..\r\n        /// </summary>\r\n        public static string cdp_unsup_assoc_arr_init_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_assoc_arr_init_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CodeTargetRequest supports only break and continue.\r\n        /// </summary>\r\n        public static string cdp_unsup_break_continue_only {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_break_continue_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The break statement with non-constant argument is not supported fro PHP-toCodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_break_non_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_break_non_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CodeVariableReferenceExpression was expected as result of TranslateVariableUse for DirectVarUse. Note: Static variables are not supported as DirectVarUse (e.g. Catch statement exception variable)..\r\n        /// </summary>\r\n        public static string cdp_unsup_CodeVariableReferenceExpression_excpected {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_CodeVariableReferenceExpression_excpected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;else&apos; clausule must be last clausule of if statement..\r\n        /// </summary>\r\n        public static string cdp_unsup_else_last {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_else_last\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot translate &apos;else&apos; clausule separatelly..\r\n        /// </summary>\r\n        public static string cdp_unsup_else_separatelly {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_else_separatelly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Empty expressions are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_empty_ex {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_empty_ex\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot translate empty expression list.\r\n        /// </summary>\r\n        public static string cdp_unsup_empty_ex_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_empty_ex_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Eval is not supported.\r\n        /// </summary>\r\n        public static string cdp_unsup_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add field into interface.\r\n        /// </summary>\r\n        public static string cdp_unsup_filed_delegate {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_filed_delegate\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global constants are not supported for generating CodeDOM.\r\n        /// </summary>\r\n        public static string cdp_unsup_global_constants {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_constants\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Functions declared at global- or method-level are not supported for generating CodeDOM.\r\n        /// </summary>\r\n        public static string cdp_unsup_global_method_func {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_method_func\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global PHP statement is not supported for generating CodeDOM.\r\n        /// </summary>\r\n        public static string cdp_unsup_global_statement {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_global_statement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only constant static fields can be added into enumerations.\r\n        /// </summary>\r\n        public static string cdp_unsup_in_enum {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_in_enum\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only fields can be added into enumerations.\r\n        /// </summary>\r\n        public static string cdp_unsup_in_enum_other {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_in_enum_other\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Includes and requires are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_include_require {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_include_require\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Indirect type references are not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_indirect_type_ref {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_indirect_type_ref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid expression for event translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_invalid_event {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_invalid_event\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to isset with no variable is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_isset_no_var {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_isset_no_var\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Number of levels to break must be 1 or more.\r\n        /// </summary>\r\n        public static string cdp_unsup_levels_0 {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_levels_0\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to LINQ is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_LINQ {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_LINQ\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to List expressions cannot be created in places outside methods.\r\n        /// </summary>\r\n        public static string cdp_unsup_list_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_list_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add local variable at this level (eg. namespace or class).\r\n        /// </summary>\r\n        public static string cdp_unsup_loc_var_class_namespace {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_loc_var_class_namespace\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Local variable declarations are not supported at this level (e.g. namespace or class)..\r\n        /// </summary>\r\n        public static string cdp_unsup_loc_var_context {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_loc_var_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Containing block returned no label to jump to for break statement.\r\n        /// </summary>\r\n        public static string cdp_unsup_no_jump_label {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_no_jump_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function calls that are not members of object cannot be translated..\r\n        /// </summary>\r\n        public static string cdp_unsup_nonobj_func {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_nonobj_func\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not allowed at block-statement level.\r\n        /// </summary>\r\n        public static string cdp_unsup_not_allowed_at_block_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_block_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at file level.\r\n        /// </summary>\r\n        public static string cdp_unsup_not_allowed_at_file_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_file_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not allowed at method level.\r\n        /// </summary>\r\n        public static string cdp_unsup_not_allowed_at_method_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_method_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at namespace level.\r\n        /// </summary>\r\n        public static string cdp_unsup_not_allowed_at_namespace_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_allowed_at_namespace_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to There is not enough expressions in list.\r\n        /// </summary>\r\n        public static string cdp_unsup_not_enough_expressions_in_list {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_not_enough_expressions_in_list\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to use.IsMemberOf must not be null..\r\n        /// </summary>\r\n        public static string cdp_unsup_null {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only loops can provide jump labels.\r\n        /// </summary>\r\n        public static string cdp_unsup_only_loop_jump {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_only_loop_jump\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported type of pseudo-constant {0} ({1}) reached. This type is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_pseudoconstant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_pseudoconstant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reference assignments are not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_ref_assign {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_ref_assign\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Static variables can be used only inside methods that are members of clases.\r\n        /// </summary>\r\n        public static string cdp_unsup_static_var {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_static_var\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add static variables when not in method.\r\n        /// </summary>\r\n        public static string cdp_unsup_static_var_otside_method {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_static_var_otside_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Array item of unknown type {0} reached. This kind of array item is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_array_item_type {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_array_item_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown event operation reached. Only Add and Remove operations are supported..\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_event_op {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_event_op\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of type reference {0} reached. This type reference is not supported for PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_ref_kind {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_ref_kind\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown PHP statement {0} is not supported for generating CodeDOM.\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_statement {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_statement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown switch statement item {0}. This kind of switch items is not supported fro PHP-to-CodeDOM translation..\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_switch {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_switch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of variable use {0} reached. This kind of variable use is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_var_kind {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_var_kind\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown kind of variabele-like construct use {0} reached. This kind of use is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_unknown_varlike_construct_use {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unknown_varlike_construct_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported assign operator {0} ({1}) reached. Not an assign operator?.\r\n        /// </summary>\r\n        public static string cdp_unsup_unsup_assign {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_assign\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported binary operator {0} ({1}) reached. Not a binary operator?.\r\n        /// </summary>\r\n        public static string cdp_unsup_unsup_binop {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_binop\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported delegate creation reached. Delegate must be created using NewEx with only one parameter type ArrayEx that consits of 2 ValueItem-s without index where ValueExpr of 2nd item is StringLiteral..\r\n        /// </summary>\r\n        public static string cdp_unsup_unsup_delegate_creartion {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_delegate_creartion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported type of expression {0} reached. This type of expression is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_unsup_ex {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_ex\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported unary operator {0:F} ({0:D} reached. This operator is not supported for PHP-to-CodeDOM translation.\r\n        /// </summary>\r\n        public static string cdp_unsup_unsup_unop {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsup_unop\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of type {0} is not supported at type level.\r\n        /// </summary>\r\n        public static string cdp_unsup_unsupported_at_type_level {\r\n            get {\r\n                return ResourceManager.GetString(\"cdp_unsup_unsupported_at_type_level\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t use function/method return value in write context.\r\n        /// </summary>\r\n        public static string check_varuse_fault {\r\n            get {\r\n                return ResourceManager.GetString(\"check_varuse_fault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular class inheritance dependency involving &apos;{0}&apos; and &apos;{1}&apos;.\r\n        /// </summary>\r\n        public static string circular_base_class_dependency {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_base_class_dependency\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular interface inheritance dependency involving &apos;{0}&apos; and &apos;{1}&apos;.\r\n        /// </summary>\r\n        public static string circular_base_interface_dependency {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_base_interface_dependency\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular constant definition involving class constant &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        public static string circular_constant_definition_class {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_constant_definition_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Circular constant definition involving global constant &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string circular_constant_definition_global {\r\n            get {\r\n                return ResourceManager.GetString(\"circular_constant_definition_global\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of the class &apos;{0}&apos; in PHP code is not recommended as the resulting effect will probably be different than expected.\r\n        /// </summary>\r\n        public static string class_behavior_may_be_unexpected {\r\n            get {\r\n                return ResourceManager.GetString(\"class_behavior_may_be_unexpected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class {0} could not be loaded.\r\n        /// </summary>\r\n        public static string class_could_not_be_loaded {\r\n            get {\r\n                return ResourceManager.GetString(\"class_could_not_be_loaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The class &apos;{0}&apos; has no parent.\r\n        /// </summary>\r\n        public static string class_has_no_parent {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_parent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class {0} has no unserializer.\r\n        /// </summary>\r\n        public static string class_has_no_unserializer {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_unserializer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; has no visible constructor.\r\n        /// </summary>\r\n        public static string class_has_no_visible_ctor {\r\n            get {\r\n                return ResourceManager.GetString(\"class_has_no_visible_ctor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare class {0} because the name is already in use.\r\n        /// </summary>\r\n        public static string class_in_use {\r\n            get {\r\n                return ResourceManager.GetString(\"class_in_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to instantiate class &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string class_instantiation_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"class_instantiation_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; not found.\r\n        /// </summary>\r\n        public static string class_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"class_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A class or an interface &apos;{0}&apos; is redeclared in the assembly scope.\r\n        /// </summary>\r\n        public static string class_redeclared_in_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_in_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare class/interface {0}.\r\n        /// </summary>\r\n        public static string class_redeclared_runtime {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_runtime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion redeclares class/interface {0}.\r\n        /// </summary>\r\n        public static string class_redeclared_runtime_include {\r\n            get {\r\n                return ResourceManager.GetString(\"class_redeclared_runtime_include\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to __clone method called on non-object.\r\n        /// </summary>\r\n        public static string clone_called_on_non_object {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_called_on_non_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Clone method {0}::__clone() cannot be static.\r\n        /// </summary>\r\n        public static string clone_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Clone method {0}::__clone() cannot accept any arguments.\r\n        /// </summary>\r\n        public static string clone_cannot_take_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"clone_cannot_take_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error occured during assembly generation: {0}.\r\n        /// </summary>\r\n        public static string code_generation_error {\r\n            get {\r\n                return ResourceManager.GetString(\"code_generation_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Declaration of {0} {1} will issue a run-time error if executed since the {0} will already be declared here.\r\n        /// </summary>\r\n        public static string conditionally_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"conditionally_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion will issue a run-time error if executed - a redeclaration of {0} {1}.\r\n        /// </summary>\r\n        public static string conditionally_redeclared_by_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"conditionally_redeclared_by_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration error: {0}.\r\n        /// </summary>\r\n        public static string configuration_error {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        public static string configuration_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration has not been loaded yet..\r\n        /// </summary>\r\n        public static string configuration_not_loaded {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_not_loaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration record is read only..\r\n        /// </summary>\r\n        public static string configuration_record_read_only {\r\n            get {\r\n                return ResourceManager.GetString(\"configuration_record_read_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        public static string conflicting_constant_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_constant_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        public static string conflicting_function_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_function_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same visibility.\r\n        /// </summary>\r\n        public static string conflicting_partial_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_partial_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos; has already been imported.\r\n        /// </summary>\r\n        public static string conflicting_type_aliases {\r\n            get {\r\n                return ResourceManager.GetString(\"conflicting_type_aliases\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The option is valid only in console application configuration..\r\n        /// </summary>\r\n        public static string console_only_option {\r\n            get {\r\n                return ResourceManager.GetString(\"console_only_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Couldn&apos;t find constant {0}.\r\n        /// </summary>\r\n        public static string constant_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare constant &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string constant_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempt to redefine constant &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string constant_redefined {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_redefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Constant &apos;{2}&apos; is reimplemented. Previously implemented by {3}.{4}..\r\n        /// </summary>\r\n        public static string constant_reimplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_reimplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot define value which is neither scalar nor NULL as a constant.\r\n        /// </summary>\r\n        public static string constant_value_neither_scalar_nor_null {\r\n            get {\r\n                return ResourceManager.GetString(\"constant_value_neither_scalar_nor_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        public static string construct_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"construct_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;{0}&apos; construct is not supported.\r\n        /// </summary>\r\n        public static string construct_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"construct_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        public static string constructor_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"constructor_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate class &apos;{0}&apos; because it has no visible constructor.\r\n        /// </summary>\r\n        public static string constructor_less_type_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"constructor_less_type_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Stream-Context resource.\r\n        /// </summary>\r\n        public static string context_expected {\r\n            get {\r\n                return ResourceManager.GetString(\"context_expected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not create event..\r\n        /// </summary>\r\n        public static string could_not_create_event {\r\n            get {\r\n                return ResourceManager.GetString(\"could_not_create_event\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not load extension: .\r\n        /// </summary>\r\n        public static string could_not_load_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"could_not_load_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ASP.NET Integration, CodeDom.\r\n        /// </summary>\r\n        public static string credits_aspnet {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_aspnet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Abstract Syntax Tree.\r\n        /// </summary>\r\n        public static string credits_ast {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_ast\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Authors.\r\n        /// </summary>\r\n        public static string credits_authors {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_authors\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Automatic Tester.\r\n        /// </summary>\r\n        public static string credits_automatic_tester {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_automatic_tester\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Automatic Tests.\r\n        /// </summary>\r\n        public static string credits_automatic_tests {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_automatic_tests\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to CLR Features Integration.\r\n        /// </summary>\r\n        public static string credits_clr_features {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_clr_features\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Analysis.\r\n        /// </summary>\r\n        public static string credits_code_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Generation.\r\n        /// </summary>\r\n        public static string credits_code_generation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_generation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Code Generator.\r\n        /// </summary>\r\n        public static string credits_code_generator {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_code_generator\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compiler&apos;s Tables.\r\n        /// </summary>\r\n        public static string credits_compiler_tables {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_compiler_tables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration.\r\n        /// </summary>\r\n        public static string credits_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Contribution.\r\n        /// </summary>\r\n        public static string credits_contribution {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_contribution\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Core Functionality.\r\n        /// </summary>\r\n        public static string credits_core_functionality {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_core_functionality\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Design.\r\n        /// </summary>\r\n        public static string credits_design {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_design\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extensions Management.\r\n        /// </summary>\r\n        public static string credits_extensions_management {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_extensions_management\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extensions Manager and Wrappers.\r\n        /// </summary>\r\n        public static string credits_extmgr_wrappers {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_extmgr_wrappers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Implementation.\r\n        /// </summary>\r\n        public static string credits_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Installation.\r\n        /// </summary>\r\n        public static string credits_installation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_installation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interactive Tests.\r\n        /// </summary>\r\n        public static string credits_interactive_tests {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_interactive_tests\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Lexical and Syntactic Analysis.\r\n        /// </summary>\r\n        public static string credits_lexical_syntactic_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_lexical_syntactic_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object Oriented PHP Language Features Compilation.\r\n        /// </summary>\r\n        public static string credits_oo_features_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_oo_features_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Overall Compiler Design.\r\n        /// </summary>\r\n        public static string credits_overall_compiler_design {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_overall_compiler_design\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Overall Concept.\r\n        /// </summary>\r\n        public static string credits_overall_concept {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_overall_concept\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PHP/CLR Language Extensions.\r\n        /// </summary>\r\n        public static string credits_php_clr {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_php_clr\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Semantic Analysis.\r\n        /// </summary>\r\n        public static string credits_semantic_analysis {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_semantic_analysis\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Specific PHP Language Features Compilation.\r\n        /// </summary>\r\n        public static string credits_specific_features_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_specific_features_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Streams, IO Wrappers, and Filters.\r\n        /// </summary>\r\n        public static string credits_streams {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_streams\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Utilities.\r\n        /// </summary>\r\n        public static string credits_utilities {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_utilities\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to VS.NET Integration.\r\n        /// </summary>\r\n        public static string credits_vsnet {\r\n            get {\r\n                return ResourceManager.GetString(\"credits_vsnet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cyclic inclusion between files &apos;{0}&apos; and &apos;{1}&apos; detected, inclusion of file &apos;{0}&apos; deferred to runtime.\r\n        /// </summary>\r\n        public static string cyclic_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"cyclic_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Declaration of {0}::{1}() should be compatible with that of {2}::{3}().\r\n        /// </summary>\r\n        public static string declaration_should_be_compatible {\r\n            get {\r\n                return ResourceManager.GetString(\"declaration_should_be_compatible\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown exception.\r\n        /// </summary>\r\n        public static string default_exception_message {\r\n            get {\r\n                return ResourceManager.GetString(\"default_exception_message\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Creating default object from empty value.\r\n        /// </summary>\r\n        public static string default_object_created {\r\n            get {\r\n                return ResourceManager.GetString(\"default_object_created\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method is no longer supported. Use TypeBuilder.DefineMethod instead..\r\n        /// </summary>\r\n        public static string define_method_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"define_method_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to it defines application wide configuration.\r\n        /// </summary>\r\n        public static string defines_app_wide_config {\r\n            get {\r\n                return ResourceManager.GetString(\"defines_app_wide_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to it defines machine wide configuration.\r\n        /// </summary>\r\n        public static string defines_machine_wide_config {\r\n            get {\r\n                return ResourceManager.GetString(\"defines_machine_wide_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object instance must be given for non-static method &apos;{1}::{2}&apos; when creating delegate &apos;{0}&apos;. Use array($instance, &quot;{2}&quot;).\r\n        /// </summary>\r\n        public static string delegate_target_instance_missing {\r\n            get {\r\n                return ResourceManager.GetString(\"delegate_target_instance_missing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unrecognized constructor arguments were given to delegate &apos;{0}&apos;. Use &quot;function&quot;, array($instance, &quot;method&quot;), or array(&quot;class&quot;, &quot;method&quot;).\r\n        /// </summary>\r\n        public static string delegate_unrecognized_ctor_args {\r\n            get {\r\n                return ResourceManager.GetString(\"delegate_unrecognized_ctor_args\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::__destruct() cannot be static.\r\n        /// </summary>\r\n        public static string destruct_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"destruct_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::__destruct() cannot take arguments.\r\n        /// </summary>\r\n        public static string destruct_cannot_take_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"destruct_cannot_take_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Destructor {0}::{1}() cannot be static.\r\n        /// </summary>\r\n        public static string destructor_cannot_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"destructor_cannot_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory &apos;{0}&apos; does not exist..\r\n        /// </summary>\r\n        public static string directory_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"directory_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        public static string directory_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"directory_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Division by zero.\r\n        /// </summary>\r\n        public static string division_by_zero {\r\n            get {\r\n                return ResourceManager.GetString(\"division_by_zero\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Body of function decorated with the DllImportAttribute is ignored. System provides this body..\r\n        /// </summary>\r\n        public static string dll_import_body_ignored {\r\n            get {\r\n                return ResourceManager.GetString(\"dll_import_body_ignored\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method decorated with DllImportAttribute cannot be abstract..\r\n        /// </summary>\r\n        public static string dll_import_cannot_be_abstract {\r\n            get {\r\n                return ResourceManager.GetString(\"dll_import_cannot_be_abstract\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function decorated with DllImportAttribute must be static..\r\n        /// </summary>\r\n        public static string dll_import_must_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"dll_import_must_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No &apos;..&apos; components allowed in path.\r\n        /// </summary>\r\n        public static string dotdot_not_allowed_in_path {\r\n            get {\r\n                return ResourceManager.GetString(\"dotdot_not_allowed_in_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate attribute &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string duplicate_attribute_usage {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_attribute_usage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate generic type parameter.\r\n        /// </summary>\r\n        public static string duplicate_generic_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_generic_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Duplicate parameter name &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string duplicate_parameter_name {\r\n            get {\r\n                return ResourceManager.GetString(\"duplicate_parameter_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Dynamic wrapper &apos;{0}&apos; could not be loaded..\r\n        /// </summary>\r\n        public static string dynamic_wrapper_loading_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"dynamic_wrapper_loading_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied file access mode is empty.\r\n        /// </summary>\r\n        public static string empty_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use [] for reading.\r\n        /// </summary>\r\n        public static string empty_index_in_read_context {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_index_in_read_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path must not be empty..\r\n        /// </summary>\r\n        public static string empty_path {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An empty variable used as an array.\r\n        /// </summary>\r\n        public static string empty_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An empty variable used as an object.\r\n        /// </summary>\r\n        public static string empty_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} compiled successfully.\r\n        /// </summary>\r\n        public static string end_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"end_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entry point has already been defined.\r\n        /// </summary>\r\n        public static string entry_point_redefined {\r\n            get {\r\n                return ResourceManager.GetString(\"entry_point_redefined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Entry point script not specified..\r\n        /// </summary>\r\n        public static string entrypoint_not_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"entrypoint_not_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Specified enumerator doesn&apos;t reference this table..\r\n        /// </summary>\r\n        public static string enumerator_not_referencing_this_table {\r\n            get {\r\n                return ResourceManager.GetString(\"enumerator_not_referencing_this_table\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected error creating file &apos;{0}&apos;: {1}.\r\n        /// </summary>\r\n        public static string error_creating_file {\r\n            get {\r\n                return ResourceManager.GetString(\"error_creating_file\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;br/&gt;\r\n        ///&lt;b&gt;{0}&lt;/b&gt;: {1}{2}.&lt;br/&gt;\r\n        ///.\r\n        /// </summary>\r\n        public static string error_message_html {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;br/&gt;\r\n        ///&lt;b&gt;{0}&lt;/b&gt;: {1}{2} in &lt;b&gt;{3}&lt;/b&gt; on line &lt;b&gt;{4}&lt;/b&gt;, column &lt;b&gt;{5}&lt;/b&gt;.&lt;br/&gt;\r\n        ///.\r\n        /// </summary>\r\n        public static string error_message_html_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} inside {1}.\r\n        /// </summary>\r\n        public static string error_message_html_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to inside {0} (on line &lt;b&gt;{1}&lt;/b&gt;, column &lt;b&gt;{2}&lt;/b&gt;).\r\n        /// </summary>\r\n        public static string error_message_html_eval_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_html_eval_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to \r\n        ///{0}: {1}{2}.\r\n        ///.\r\n        /// </summary>\r\n        public static string error_message_plain {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to \r\n        ///{0}: {1}{2} in {3} on line {4}, column {5}.\r\n        ///.\r\n        /// </summary>\r\n        public static string error_message_plain_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} inside {1}.\r\n        /// </summary>\r\n        public static string error_message_plain_eval {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_eval\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to inside {0} (on line {1}, column {2}).\r\n        /// </summary>\r\n        public static string error_message_plain_eval_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"error_message_plain_eval_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to  in {0} on line {1}, column {2}.\r\n        /// </summary>\r\n        public static string error_place {\r\n            get {\r\n                return ResourceManager.GetString(\"error_place\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Event &apos;{0}::{1}&apos; has no Add accessor method.\r\n        /// </summary>\r\n        public static string event_has_no_add_accessor {\r\n            get {\r\n                return ResourceManager.GetString(\"event_has_no_add_accessor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Event &apos;{0}::{1}&apos; has no Remove accessor method.\r\n        /// </summary>\r\n        public static string event_has_no_remove_accessor {\r\n            get {\r\n                return ResourceManager.GetString(\"event_has_no_remove_accessor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot write to event {0}::${1}, use {0}::${1}-&gt;Add() and {0}::${1}-&gt;Remove() to add or remove an event handler.\r\n        /// </summary>\r\n        public static string event_written {\r\n            get {\r\n                return ResourceManager.GetString(\"event_written\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exception cannot be thrown here: {0}.\r\n        /// </summary>\r\n        public static string exception_cannot_be_thrown {\r\n            get {\r\n                return ResourceManager.GetString(\"exception_cannot_be_thrown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Maximum execution time of {0} seconds exceeded.\r\n        /// </summary>\r\n        public static string execution_timed_out {\r\n            get {\r\n                return ResourceManager.GetString(\"execution_timed_out\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expecting parent constructor call.\r\n        /// </summary>\r\n        public static string expecting_parent_ctor_invocation {\r\n            get {\r\n                return ResourceManager.GetString(\"expecting_parent_ctor_invocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;Export&apos; can be used only in pure unit.\r\n        /// </summary>\r\n        public static string export_attribute_in_non_pure {\r\n            get {\r\n                return ResourceManager.GetString(\"export_attribute_in_non_pure\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Extension &apos;{0}&apos; (file &apos;{1}&apos;) has alredy been loaded..\r\n        /// </summary>\r\n        public static string extension_already_loaded {\r\n            get {\r\n                return ResourceManager.GetString(\"extension_already_loaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error while loading library (extension) classes: .\r\n        /// </summary>\r\n        public static string extension_loading_error {\r\n            get {\r\n                return ResourceManager.GetString(\"extension_loading_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Native PHP extensions are not installed or properly configured.\r\n        /// </summary>\r\n        public static string extensions_not_installed {\r\n            get {\r\n                return ResourceManager.GetString(\"extensions_not_installed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined external function &apos;{0}&apos;, extension &apos;{1}&apos; - native PHP extensions are not installed or properly configured.\r\n        /// </summary>\r\n        public static string extensions_not_installed_in_invoke {\r\n            get {\r\n                return ResourceManager.GetString(\"extensions_not_installed_in_invoke\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to At least one extension is to be run in isolated mode but ExtManager path is not configured..\r\n        /// </summary>\r\n        public static string extmanager_path_not_configured {\r\n            get {\r\n                return ResourceManager.GetString(\"extmanager_path_not_configured\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A field with the same name already exists in this object..\r\n        /// </summary>\r\n        public static string field_already_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"field_already_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reflected field &apos;{0}&apos; has unknown implementor. PhpPublicFieldAttribute incorrect usage..\r\n        /// </summary>\r\n        public static string field_implementor_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"field_implementor_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interfaces cannot have properties.\r\n        /// </summary>\r\n        public static string field_in_interface {\r\n            get {\r\n                return ResourceManager.GetString(\"field_in_interface\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File &apos;{0}&apos; does not exist..\r\n        /// </summary>\r\n        public static string file_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"file_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot inherit from final class &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string final_class_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"final_class_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: First parameter should be of type IDictionary due to NeedsVariables option..\r\n        /// </summary>\r\n        public static string first_param_not_dictionary {\r\n            get {\r\n                return ResourceManager.GetString(\"first_param_not_dictionary\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} is intended for internal usage only..\r\n        /// </summary>\r\n        public static string for_internal_usage_only {\r\n            get {\r\n                return ResourceManager.GetString(\"for_internal_usage_only\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The function already has parametr {0}.\r\n        /// </summary>\r\n        public static string formal_param_redeclaration {\r\n            get {\r\n                return ResourceManager.GetString(\"formal_param_redeclaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function {0}() is deprecated.\r\n        /// </summary>\r\n        public static string function_is_deprecated {\r\n            get {\r\n                return ResourceManager.GetString(\"function_is_deprecated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function needs a table of defined variables.\r\n        /// </summary>\r\n        public static string function_needs_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"function_needs_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function is not supported.\r\n        /// </summary>\r\n        public static string function_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"function_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare function &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string function_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"function_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Function &apos;{2}&apos; is reimplemented. Previously implemented by {3}.{4}..\r\n        /// </summary>\r\n        public static string function_reimplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"function_reimplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generating assembly ....\r\n        /// </summary>\r\n        public static string generating_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"generating_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use generic arguments when calling a library function.\r\n        /// </summary>\r\n        public static string generic_call_to_library_function {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_call_to_library_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare generic type parameter {0} because the name is already in use.\r\n        /// </summary>\r\n        public static string generic_in_use {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_in_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type parameter &apos;{0}&apos; has the same name as the containing class/interface.\r\n        /// </summary>\r\n        public static string generic_parameter_collides_with_declarer {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_collides_with_declarer\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type parameter must be an identifier different from &apos;self&apos; and &apos;parent&apos; in this context.\r\n        /// </summary>\r\n        public static string generic_parameter_is_reserved_identifier {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_is_reserved_identifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic parameter must refer to a type in this context.\r\n        /// </summary>\r\n        public static string generic_parameter_must_be_type {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameter_must_be_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic parameters cannot be defined on constructor.\r\n        /// </summary>\r\n        public static string generic_parameters_disallowed_on_ctor {\r\n            get {\r\n                return ResourceManager.GetString(\"generic_parameters_disallowed_on_ctor\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Objects returned by {0}::getIterator() must be traversable or implement interface Iterator.\r\n        /// </summary>\r\n        public static string getiterator_must_return_traversable {\r\n            get {\r\n                return ResourceManager.GetString(\"getiterator_must_return_traversable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global code is not allowed in the pure unit..\r\n        /// </summary>\r\n        public static string global_code_in_pure_unit {\r\n            get {\r\n                return ResourceManager.GetString(\"global_code_in_pure_unit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal type returned from {0}::key().\r\n        /// </summary>\r\n        public static string illegal_key_return_type {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_key_return_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal offset type.\r\n        /// </summary>\r\n        public static string illegal_offset_type {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_offset_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Illegal string offset &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string illegal_string_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_string_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import statement is deprecated and will be removed in future versions. Use PHP aliasing instead..\r\n        /// </summary>\r\n        public static string import_deprecated {\r\n            get {\r\n                return ResourceManager.GetString(\"import_deprecated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import statement is only available in pure mode.\r\n        /// </summary>\r\n        public static string import_only_in_pure {\r\n            get {\r\n                return ResourceManager.GetString(\"import_only_in_pure\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be of the same type as this instance..\r\n        /// </summary>\r\n        public static string incarnation_type_mismatch {\r\n            get {\r\n                return ResourceManager.GetString(\"incarnation_type_mismatch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion of file &apos;{0}&apos; deferred to runtime because: {1}.\r\n        /// </summary>\r\n        public static string inclusion_deferred_to_runtime {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_deferred_to_runtime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusions are not allowed in the pure unit..\r\n        /// </summary>\r\n        public static string inclusion_in_pure_unit {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_in_pure_unit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No inclusion pattern does match expression &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string inclusion_replacement_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"inclusion_replacement_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Arrays which are incomparable have been compared..\r\n        /// </summary>\r\n        public static string incomparable_arrays_compared {\r\n            get {\r\n                return ResourceManager.GetString(\"incomparable_arrays_compared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Incomparable objects have been compared.\r\n        /// </summary>\r\n        public static string incomparable_objects_compared {\r\n            get {\r\n                return ResourceManager.GetString(\"incomparable_objects_compared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Incomparable objects ({0} and {1}) have been compared.\r\n        /// </summary>\r\n        public static string incomparable_objects_compared_exception {\r\n            get {\r\n                return ResourceManager.GetString(\"incomparable_objects_compared_exception\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Partial declarations of &apos;{0}&apos; must be all classes or all interfaces.\r\n        /// </summary>\r\n        public static string incompatible_partial_declarations {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_partial_declarations\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class/interface &apos;{0}&apos; is incompatible with the constraints imposed on the generic type argument #{1} (&apos;{2}&apos;) by method &apos;{3}&apos;.\r\n        /// </summary>\r\n        public static string incompatible_type_parameter_constraints_method {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_type_parameter_constraints_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class/interface &apos;{0}&apos; is incompatible with the constraints imposed on the generic type argument #{1} (&apos;{2}&apos;) by type &apos;{3}&apos;.\r\n        /// </summary>\r\n        public static string incompatible_type_parameter_constraints_type {\r\n            get {\r\n                return ResourceManager.GetString(\"incompatible_type_parameter_constraints_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The class &apos;{0}&apos; is incomplete - its base class or interface is unknown.\r\n        /// </summary>\r\n        public static string incomplete_class {\r\n            get {\r\n                return ResourceManager.GetString(\"incomplete_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path &apos;{0}&apos; is incomplete. The path is relative or drive specification is missing..\r\n        /// </summary>\r\n        public static string incomplete_path {\r\n            get {\r\n                return ResourceManager.GetString(\"incomplete_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration.\r\n        /// </summary>\r\n        public static string info_config {\r\n            get {\r\n                return ResourceManager.GetString(\"info_config\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Credits.\r\n        /// </summary>\r\n        public static string info_credits {\r\n            get {\r\n                return ResourceManager.GetString(\"info_credits\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directive.\r\n        /// </summary>\r\n        public static string info_directive {\r\n            get {\r\n                return ResourceManager.GetString(\"info_directive\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Environment.\r\n        /// </summary>\r\n        public static string info_environment_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"info_environment_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Global Variables.\r\n        /// </summary>\r\n        public static string info_global_variables {\r\n            get {\r\n                return ResourceManager.GetString(\"info_global_variables\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to License.\r\n        /// </summary>\r\n        public static string info_license {\r\n            get {\r\n                return ResourceManager.GetString(\"info_license\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to \r\n        ///    &lt;p align=&apos;justify&apos;&gt;\r\n        ///      This program can be used and distributed only under the terms of the license included in the distribution in the file License.txt and also published on\r\n        ///      &lt;a href=&quot;http://phalanger.codeplex.com/license&quot;&gt;http://phalanger.codeplex.com/license&lt;/a&gt;.\r\n        ///    &lt;/p&gt;\r\n        ///    &lt;p align=&apos;justify&apos;&gt;\r\n        ///      The software is licensed &quot;as-is&quot;. You bear the risk of using it. The Licensor\r\n        ///gives no express warranties, guarantees or conditions. You may have additional\r\n        ///consumer rights under your l [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        public static string info_license_text {\r\n            get {\r\n                return ResourceManager.GetString(\"info_license_text\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Loaded Native Extensions.\r\n        /// </summary>\r\n        public static string info_loaded_extensions {\r\n            get {\r\n                return ResourceManager.GetString(\"info_loaded_extensions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Master Value.\r\n        /// </summary>\r\n        public static string info_master_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_master_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script Dependent.\r\n        /// </summary>\r\n        public static string info_script_dependent {\r\n            get {\r\n                return ResourceManager.GetString(\"info_script_dependent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script&apos;s Value.\r\n        /// </summary>\r\n        public static string info_script_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_script_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shared.\r\n        /// </summary>\r\n        public static string info_shared {\r\n            get {\r\n                return ResourceManager.GetString(\"info_shared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value.\r\n        /// </summary>\r\n        public static string info_value {\r\n            get {\r\n                return ResourceManager.GetString(\"info_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Variable.\r\n        /// </summary>\r\n        public static string info_variable {\r\n            get {\r\n                return ResourceManager.GetString(\"info_variable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot inherit constant {0}::{1} previously declared in interface &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string inheriting_previously_inherited_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"inheriting_previously_inherited_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The instance has already been disposed.\r\n        /// </summary>\r\n        public static string instance_disposed {\r\n            get {\r\n                return ResourceManager.GetString(\"instance_disposed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Instantiation of &apos;{0}&apos; is not allowed.\r\n        /// </summary>\r\n        public static string instantiation_not_allowed {\r\n            get {\r\n                return ResourceManager.GetString(\"instantiation_not_allowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot add item to array - integer key reached maximal possible value (2^31-1).\r\n        /// </summary>\r\n        public static string integer_key_reached_max_value {\r\n            get {\r\n                return ResourceManager.GetString(\"integer_key_reached_max_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Interface method {0}::{1}() cannot contain body.\r\n        /// </summary>\r\n        public static string interface_bodyful_method {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_bodyful_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot instantiate interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string interface_instantiated {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_instantiated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Access type for interface method {0}::{1}() must be omitted or declared public.\r\n        /// </summary>\r\n        public static string interface_method_non_public {\r\n            get {\r\n                return ResourceManager.GetString(\"interface_method_non_public\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Internal error! \r\n        ///Please, report this bug via {0}.\r\n        ///Additional information: \r\n        ///{1}.\r\n        /// </summary>\r\n        public static string internal_error {\r\n            get {\r\n                return ResourceManager.GetString(\"internal_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string invalid_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count.\r\n        /// </summary>\r\n        public static string invalid_argument_count {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count in a call to the function &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string invalid_argument_count_for_function {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count_for_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument count in a call to the method &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        public static string invalid_argument_count_for_method {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_count_for_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; must be of type &apos;{1}&apos;.\r\n        /// </summary>\r\n        public static string invalid_argument_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{1}&apos; is invalid for argument &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string invalid_argument_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument: .\r\n        /// </summary>\r\n        public static string invalid_argument_with_message {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_argument_with_message\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid array rank..\r\n        /// </summary>\r\n        public static string invalid_array_rank {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_array_rank\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An attribute argument must be a constant expression.\r\n        /// </summary>\r\n        public static string invalid_attribute_expression {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_expression\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;{0}&apos; cannot be used in configuration file located on virtual path &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_attribute_location {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_location\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid attribute target selector (specify one of &apos;return&apos;, &apos;assembly&apos;, &apos;module&apos;).\r\n        /// </summary>\r\n        public static string invalid_attribute_target_selector {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_target_selector\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid use of attribute &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string invalid_attribute_usage {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_usage\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The value of attribute &apos;{0}&apos; is invalid..\r\n        /// </summary>\r\n        public static string invalid_attribute_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_attribute_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid base..\r\n        /// </summary>\r\n        public static string invalid_base {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_base\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot break/continue {0} level(s).\r\n        /// </summary>\r\n        public static string invalid_break_level_count {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_break_level_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid call context data in slot {0}..\r\n        /// </summary>\r\n        public static string invalid_call_context_data {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_call_context_data\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid callback.\r\n        /// </summary>\r\n        public static string invalid_callback {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_callback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The library &apos;{0}&apos; is not a valid Phalanger Class Library..\r\n        /// </summary>\r\n        public static string invalid_class_library {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_library\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The dynamic wrapper for the library, file &apos;{0}&apos;, is invalid. Delete the wrapper file so that it could be regenerated automatically during the next request..\r\n        /// </summary>\r\n        public static string invalid_class_library_wrapper {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_library_wrapper\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class name must be a valid object or a string.\r\n        /// </summary>\r\n        public static string invalid_class_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_class_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{0}&apos; doesn&apos;t encode a valid Unicode character.\r\n        /// </summary>\r\n        public static string invalid_code_point {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_code_point\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value &apos;{0}&apos; doesn&apos;t encode a valid Unicode character name.\r\n        /// </summary>\r\n        public static string invalid_code_point_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_code_point_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid command line argument &apos;/{0}&apos;: {1}.\r\n        /// </summary>\r\n        public static string invalid_command_line_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_command_line_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid command line argument(s): {0}.\r\n        /// </summary>\r\n        public static string invalid_command_line_argument_noname {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_command_line_argument_noname\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Field implementing PHP constant should be public literal..\r\n        /// </summary>\r\n        public static string invalid_constant_field {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid constant name &apos;{2}&apos;..\r\n        /// </summary>\r\n        public static string invalid_constant_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid constant type ({2})..\r\n        /// </summary>\r\n        public static string invalid_constant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_constant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid format of dynamic wrapper &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_dynamic_wrapper_format {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_dynamic_wrapper_format\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Escape sequence &apos;{0}&apos; requires exactly {1} hexadecimal digits.\r\n        /// </summary>\r\n        public static string invalid_escape_sequence_length {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_escape_sequence_length\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exceptions must be valid objects derived from the Exception base class.\r\n        /// </summary>\r\n        public static string invalid_exception_object {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_exception_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid file extension &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_file_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_file_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied file access mode ({0}) is not valid.\r\n        /// </summary>\r\n        public static string invalid_file_mode {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_file_mode\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to create filter ({0}).\r\n        /// </summary>\r\n        public static string invalid_filter_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_filter_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid argument supplied for foreach statement.\r\n        /// </summary>\r\n        public static string invalid_foreach_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_foreach_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function name must be a string.\r\n        /// </summary>\r\n        public static string invalid_function_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_function_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Header &apos;{0}&apos; is invalid: {1}.\r\n        /// </summary>\r\n        public static string invalid_header {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_header\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The icon has an invalid format..\r\n        /// </summary>\r\n        public static string invalid_icon_format {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_icon_format\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid identifier; an identifier cannot be non-empty and cannot contain any of the characters &apos;&lt;&apos;, &apos;&gt;&apos; and &apos;#&apos;..\r\n        /// </summary>\r\n        public static string invalid_identifier {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_identifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot convert {0} to {1} implicitly in a call to function {2}().\r\n        /// </summary>\r\n        public static string invalid_implicit_cast {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_implicit_cast\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Modifier cannot be applied on the interface.\r\n        /// </summary>\r\n        public static string invalid_interface_modifier {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_interface_modifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid library contant type &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_library_contant_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_library_contant_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Line pragma has an invalid value.\r\n        /// </summary>\r\n        public static string invalid_line_pragma {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_line_pragma\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid implementation of method &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_method_implementation {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_implementation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Method implementing PHP function should be public and static..\r\n        /// </summary>\r\n        public static string invalid_method_modifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_modifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method name must be a string.\r\n        /// </summary>\r\n        public static string invalid_method_name {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_method_name\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid node..\r\n        /// </summary>\r\n        public static string invalid_node {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_node\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Node cannot be used in configuration file located on virtual path &apos;{0}&apos; because {1}..\r\n        /// </summary>\r\n        public static string invalid_node_location {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_node_location\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid option &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_option {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid parameter &apos;{2}&apos; type ({3})..\r\n        /// </summary>\r\n        public static string invalid_parameter_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_parameter_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path is not valid..\r\n        /// </summary>\r\n        public static string invalid_path {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid query source.\r\n        /// </summary>\r\n        public static string invalid_query_source {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_query_source\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid global variables registering order..\r\n        /// </summary>\r\n        public static string invalid_registering_order {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_registering_order\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid regular expression..\r\n        /// </summary>\r\n        public static string invalid_regular_expression {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_regular_expression\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid resource visibility. Must be private or public.\r\n        /// </summary>\r\n        public static string invalid_resource_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_resource_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Invalid return type ({2})..\r\n        /// </summary>\r\n        public static string invalid_return_type {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_return_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The assembly &apos;{0}&apos; is not a valid Phalanger compiled script assembly.\r\n        /// </summary>\r\n        public static string invalid_script_assembly {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_script_assembly\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Socket Stream resource.\r\n        /// </summary>\r\n        public static string invalid_socket_stream_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_socket_stream_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid source file or directory: {0}.\r\n        /// </summary>\r\n        public static string invalid_source {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_source\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Supplied resource is not a valid Stream resource.\r\n        /// </summary>\r\n        public static string invalid_stream_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_stream_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}: Type implementing PHP function or constant should be in namespace {1} or its subnamespace..\r\n        /// </summary>\r\n        public static string invalid_type_namespace {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_type_namespace\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}: Type implementing PHP function or constant should be public..\r\n        /// </summary>\r\n        public static string invalid_type_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_type_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid value &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string invalid_value {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Isolated extensions are not supported anymore..\r\n        /// </summary>\r\n        public static string isolated_extensions_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"isolated_extensions_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot remove item from empty array..\r\n        /// </summary>\r\n        public static string item_removed_from_empty_array {\r\n            get {\r\n                return ResourceManager.GetString(\"item_removed_from_empty_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Key element cannot be a reference.\r\n        /// </summary>\r\n        public static string key_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"key_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The label &apos;{0}&apos; is already declared.\r\n        /// </summary>\r\n        public static string label_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"label_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The last must be greater than or equal to the first..\r\n        /// </summary>\r\n        public static string last_is_less_than_first {\r\n            get {\r\n                return ResourceManager.GetString(\"last_is_less_than_first\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The number of items in {0} should be the same as in {1}.\r\n        /// </summary>\r\n        public static string lengths_are_different {\r\n            get {\r\n                return ResourceManager.GetString(\"lengths_are_different\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library assembly &apos;{0}&apos; could not be loaded..\r\n        /// </summary>\r\n        public static string library_assembly_loading_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_assembly_loading_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare library class/interface {0}.\r\n        /// </summary>\r\n        public static string library_class_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_class_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion will issue a run-time error if executed as it redeclares library class/interface {0}.\r\n        /// </summary>\r\n        public static string library_class_redeclared_by_inclusion {\r\n            get {\r\n                return ResourceManager.GetString(\"library_class_redeclared_by_inclusion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The configuration handler of the library &apos;{0}&apos; has failed..\r\n        /// </summary>\r\n        public static string library_config_handler_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_config_handler_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare library function &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string library_func_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_func_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library &apos;{0}&apos; cannot be loaded; {1}.\r\n        /// </summary>\r\n        public static string library_load_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"library_load_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Library configuration section &apos;{0}&apos; has already been bound to the library &apos;{1}&apos;..\r\n        /// </summary>\r\n        public static string library_section_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"library_section_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Loaded libraries.\r\n        /// </summary>\r\n        public static string loaded_libraries {\r\n            get {\r\n                return ResourceManager.GetString(\"loaded_libraries\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The magic method {0}() must have public visibility and cannot be static.\r\n        /// </summary>\r\n        public static string magic_method_must_be_public_nonstatic {\r\n            get {\r\n                return ResourceManager.GetString(\"magic_method_must_be_public_nonstatic\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make non-static method {0}::{1}() static in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string make_nonstatic_method_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_nonstatic_method_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare non-static property {0}::${1} as static {2}::${1} (non-static declared in &apos;{3}&apos;).\r\n        /// </summary>\r\n        public static string make_nonstatic_property_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_nonstatic_property_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make static method {0}::{1}() non-static in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string make_static_method_non_static {\r\n            get {\r\n                return ResourceManager.GetString(\"make_static_method_non_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare static property {0}::${1} as non static {2}::${1} (static declared in &apos;{3}&apos;).\r\n        /// </summary>\r\n        public static string make_static_property_nonstatic {\r\n            get {\r\n                return ResourceManager.GetString(\"make_static_property_nonstatic\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mandatory parameter &apos;{0}&apos; declared behind optional parameter.\r\n        /// </summary>\r\n        public static string mandatory_behind_optional_param {\r\n            get {\r\n                return ResourceManager.GetString(\"mandatory_behind_optional_param\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method declared in interface cannot have body.\r\n        /// </summary>\r\n        public static string method_body_in_interface {\r\n            get {\r\n                return ResourceManager.GetString(\"method_body_in_interface\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to a member function {0}() on a non-object.\r\n        /// </summary>\r\n        public static string method_called_on_non_object {\r\n            get {\r\n                return ResourceManager.GetString(\"method_called_on_non_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method {0}::{1}() cannot take arguments.\r\n        /// </summary>\r\n        public static string method_cannot_take_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"method_cannot_take_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method {0}::{1}() must take exactly {2} arguments.\r\n        /// </summary>\r\n        public static string method_must_take_exact_args_count {\r\n            get {\r\n                return ResourceManager.GetString(\"method_must_take_exact_args_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Declaration of {0}::{1}() must be compatible with that of {2}::{1}().\r\n        /// </summary>\r\n        public static string method_not_compatible {\r\n            get {\r\n                return ResourceManager.GetString(\"method_not_compatible\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare method {0}::{1}.\r\n        /// </summary>\r\n        public static string method_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"method_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing argument #{0}.\r\n        /// </summary>\r\n        public static string missing_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing argument #{0} for {1}().\r\n        /// </summary>\r\n        public static string missing_argument_for {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_argument_for\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing attribute &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string missing_attribute {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_attribute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuration option {0} has not been defined..\r\n        /// </summary>\r\n        public static string missing_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing constructor - class &apos;{0}&apos; extends a CLR type without a default constructor and therefore must implement a constructor.\r\n        /// </summary>\r\n        public static string missing_ctor_in_clr_subclass {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_ctor_in_clr_subclass\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing entry point; no static parameterless method or function &apos;{0}&apos; found.\r\n        /// </summary>\r\n        public static string missing_entry_point {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_entry_point\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expecting kind of imported subject (specify one of &apos;namespace&apos;, &apos;class&apos;, &apos;interface&apos;, &apos;function&apos;, &apos;const&apos;).\r\n        /// </summary>\r\n        public static string missing_imported_entity {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_imported_entity\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing &apos;partial&apos; modifier on declaration of class/interface &apos;{0}&apos; - another partial declaration of this type exists.\r\n        /// </summary>\r\n        public static string missing_partial_modifier {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_partial_modifier\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing generic type argument #{0}.\r\n        /// </summary>\r\n        public static string missing_type_argument {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing generic type argument #{0} for {1}().\r\n        /// </summary>\r\n        public static string missing_type_argument_for {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument_for\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of type &apos;{0}&apos; requires generic type parameter #{1} (&apos;{2}&apos;) to be specified (no default type applicable).\r\n        /// </summary>\r\n        public static string missing_type_argument_in_type_use {\r\n            get {\r\n                return ResourceManager.GetString(\"missing_type_argument_in_type_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;case&apos; label with value {0} has already been declared.\r\n        /// </summary>\r\n        public static string more_switch_cases_with_same_value {\r\n            get {\r\n                return ResourceManager.GetString(\"more_switch_cases_with_same_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;switch&apos; already contains a &apos;default&apos; section.\r\n        /// </summary>\r\n        public static string more_then_one_default_in_switch {\r\n            get {\r\n                return ResourceManager.GetString(\"more_then_one_default_in_switch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assertion contains multiple statements but only the first one is relevant.\r\n        /// </summary>\r\n        public static string multiple_statements_in_assertion {\r\n            get {\r\n                return ResourceManager.GetString(\"multiple_statements_in_assertion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Multiple access type modifiers are not allowed.\r\n        /// </summary>\r\n        public static string multiple_visibility_modifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"multiple_visibility_modifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must reflect an instance field of PhpReference type declared in the class assignable from the class associated with this table..\r\n        /// </summary>\r\n        public static string must_be_associated_instance_field {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_instance_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to an instance method of the class associated with this table..\r\n        /// </summary>\r\n        public static string must_be_associated_instance_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_instance_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to a method of the class associated with this table..\r\n        /// </summary>\r\n        public static string must_be_associated_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be bound to a static method of the class associated with this table..\r\n        /// </summary>\r\n        public static string must_be_associated_static_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_associated_static_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be an instance of DeclaringType..\r\n        /// </summary>\r\n        public static string must_be_declaringtype_instance {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_declaringtype_instance\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be an IPhpMemberHandle..\r\n        /// </summary>\r\n        public static string must_be_iphpmemberhandle {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_iphpmemberhandle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be a class derived from PhpObject..\r\n        /// </summary>\r\n        public static string must_be_phpobject_subclass {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_phpobject_subclass\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must be static..\r\n        /// </summary>\r\n        public static string must_be_static {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Must target an instance method..\r\n        /// </summary>\r\n        public static string must_target_instance_method {\r\n            get {\r\n                return ResourceManager.GetString(\"must_target_instance_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Namespace keyword used outside namespace declaration.\r\n        /// </summary>\r\n        public static string namespace_keyword_outside_namespace {\r\n            get {\r\n                return ResourceManager.GetString(\"namespace_keyword_outside_namespace\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to NetworkUtils are not supported on this system..\r\n        /// </summary>\r\n        public static string networkutils_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"networkutils_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; has no constructor defined - using default constructor and ignoring arguments.\r\n        /// </summary>\r\n        public static string no_ctor_defined {\r\n            get {\r\n                return ResourceManager.GetString(\"no_ctor_defined\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Called from the global scope - no function context.\r\n        /// </summary>\r\n        public static string no_function_context {\r\n            get {\r\n                return ResourceManager.GetString(\"no_function_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No source files to compile..\r\n        /// </summary>\r\n        public static string no_source_files_to_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"no_source_files_to_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No accessible overload of function &apos;{1}&apos; is compatible with the specified arguments.\r\n        /// </summary>\r\n        public static string no_suitable_function_overload {\r\n            get {\r\n                return ResourceManager.GetString(\"no_suitable_function_overload\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No accessible overload of method &apos;{0}::{1}&apos; is compatible with the specified arguments.\r\n        /// </summary>\r\n        public static string no_suitable_method_overload {\r\n            get {\r\n                return ResourceManager.GetString(\"no_suitable_method_overload\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot extend &apos;{0}&apos; because it is not a class.\r\n        /// </summary>\r\n        public static string non_class_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"non_class_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Type &apos;{0}&apos; cannot be used with generic type arguments.\r\n        /// </summary>\r\n        public static string non_generic_type_used_with_type_arguments {\r\n            get {\r\n                return ResourceManager.GetString(\"non_generic_type_used_with_type_arguments\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot extend &apos;{0}&apos; because it is not an interface.\r\n        /// </summary>\r\n        public static string non_interface_extended {\r\n            get {\r\n                return ResourceManager.GetString(\"non_interface_extended\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot implement &apos;{0}&apos; because it is not an interface.\r\n        /// </summary>\r\n        public static string non_interface_implemented {\r\n            get {\r\n                return ResourceManager.GetString(\"non_interface_implemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Non-abstract method {0}::{1}() must contain body.\r\n        /// </summary>\r\n        public static string nonabstract_bodyless_method {\r\n            get {\r\n                return ResourceManager.GetString(\"nonabstract_bodyless_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot make non-abstract method {0}::{1}() abstract in class &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string nonabstract_method_overridden_with_abstract {\r\n            get {\r\n                return ResourceManager.GetString(\"nonabstract_method_overridden_with_abstract\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A callback &apos;{0}&apos; specified in the argument &apos;{1}&apos; is not callable.\r\n        /// </summary>\r\n        public static string noncallable_callback {\r\n            get {\r\n                return ResourceManager.GetString(\"noncallable_callback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Non-static method {0}::{1}() should not be called statically.\r\n        /// </summary>\r\n        public static string nonstatic_method_called_statically {\r\n            get {\r\n                return ResourceManager.GetString(\"nonstatic_method_called_statically\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only variables can be passed by reference.\r\n        /// </summary>\r\n        public static string nonvar_passed_by_ref {\r\n            get {\r\n                return ResourceManager.GetString(\"nonvar_passed_by_ref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated constants have been reflected..\r\n        /// </summary>\r\n        public static string not_all_constants_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_constants_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated fields have been reflected..\r\n        /// </summary>\r\n        public static string not_all_fields_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_fields_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not all populated methods have been reflected..\r\n        /// </summary>\r\n        public static string not_all_methods_reflected {\r\n            get {\r\n                return ResourceManager.GetString(\"not_all_methods_reflected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a custom attribute class.\r\n        /// </summary>\r\n        public static string not_custom_attribute_class {\r\n            get {\r\n                return ResourceManager.GetString(\"not_custom_attribute_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not enought space in the target array..\r\n        /// </summary>\r\n        public static string not_enought_space_in_target_array {\r\n            get {\r\n                return ResourceManager.GetString(\"not_enought_space_in_target_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; is not supported.\r\n        /// </summary>\r\n        public static string notsupported_function_called {\r\n            get {\r\n                return ResourceManager.GetString(\"notsupported_function_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expecting constant value within heredoc..\r\n        /// </summary>\r\n        public static string nowdoc_expected {\r\n            get {\r\n                return ResourceManager.GetString(\"nowdoc_expected\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Object of class {0} could not be converted to {1}.\r\n        /// </summary>\r\n        public static string object_could_not_be_converted {\r\n            get {\r\n                return ResourceManager.GetString(\"object_could_not_be_converted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An object of type &apos;{0}&apos; used as an array.\r\n        /// </summary>\r\n        public static string object_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"object_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method offsetGet() of objects used with [] operator followed by increment, decrement, assignment to reference, or another [] operators must return by reference.\r\n        /// </summary>\r\n        public static string offsetGet_must_return_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"offsetGet_must_return_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only variables should be assigned by reference.\r\n        /// </summary>\r\n        public static string only_vars_assigned_by_ref {\r\n            get {\r\n                return ResourceManager.GetString(\"only_vars_assigned_by_ref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to AllowedPathPrefixes restriction in effect. File({0}) is not within the allowed path(s): ({1}).\r\n        /// </summary>\r\n        public static string open_basedir_effect {\r\n            get {\r\n                return ResourceManager.GetString(\"open_basedir_effect\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use [] for reading.\r\n        /// </summary>\r\n        public static string operator_array_access_used_for_reading {\r\n            get {\r\n                return ResourceManager.GetString(\"operator_array_access_used_for_reading\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to option.\r\n        /// </summary>\r\n        public static string option {\r\n            get {\r\n                return ResourceManager.GetString(\"option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attribute &apos;Out&apos; can be used only on parameters passed by reference; add &apos;&amp;&apos; modifier to the parameter &apos;${0}&apos;.\r\n        /// </summary>\r\n        public static string out_attribute_on_byval_param {\r\n            get {\r\n                return ResourceManager.GetString(\"out_attribute_on_byval_param\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Value should be between {0} and {1} including..\r\n        /// </summary>\r\n        public static string out_of_range {\r\n            get {\r\n                return ResourceManager.GetString(\"out_of_range\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Output buffering is disabled.\r\n        /// </summary>\r\n        public static string output_buffering_disabled {\r\n            get {\r\n                return ResourceManager.GetString(\"output_buffering_disabled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: This overload of &apos;{2}&apos; has different implementation options than the others..\r\n        /// </summary>\r\n        public static string overload_has_different_impl_options {\r\n            get {\r\n                return ResourceManager.GetString(\"overload_has_different_impl_options\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Overload has lesser mandatory parameter count than another one, even though it has optional arguments..\r\n        /// </summary>\r\n        public static string overload_has_lesser_param_count {\r\n            get {\r\n                return ResourceManager.GetString(\"overload_has_lesser_param_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}.{1}: Suboptimal implementation. Overloads of &apos;{2}&apos; are not placed one following the other in metadata table..\r\n        /// </summary>\r\n        public static string overloads_not_contiguous {\r\n            get {\r\n                return ResourceManager.GetString(\"overloads_not_contiguous\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot override final method {0}::{1}().\r\n        /// </summary>\r\n        public static string override_final_method {\r\n            get {\r\n                return ResourceManager.GetString(\"override_final_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot override constant &apos;{0}&apos; defined in interface &apos;{1}&apos;.\r\n        /// </summary>\r\n        public static string overriding_interface_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_interface_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::{1}() must be at least as visible as &apos;{2}&apos; specified in class/interface &apos;{3}&apos;.\r\n        /// </summary>\r\n        public static string overriding_method_restrict_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_method_restrict_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::${1} must be at least as visible as &apos;{2}&apos; specified in class/interface &apos;{3}&apos;.\r\n        /// </summary>\r\n        public static string overriding_property_restrict_visibility {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_property_restrict_visibility\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot change initial value of property static protected {0}::${1} in class &apos;{2}&apos; (previously declared in {3}).\r\n        /// </summary>\r\n        public static string overriding_protected_static_with_init_value {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_protected_static_with_init_value\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare property static &apos;{3}&apos; {0}::${1} in class &apos;{2}&apos; (previously declared in &apos;{4}&apos;).\r\n        /// </summary>\r\n        public static string overriding_static_field_with_static {\r\n            get {\r\n                return ResourceManager.GetString(\"overriding_static_field_with_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to instantiate page &apos;{0}&apos;..\r\n        /// </summary>\r\n        public static string page_instantiation_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"page_instantiation_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; must be passed by reference.\r\n        /// </summary>\r\n        public static string parameter_must_be_byref {\r\n            get {\r\n                return ResourceManager.GetString(\"parameter_must_be_byref\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access parent:: when current class scope has no parent.\r\n        /// </summary>\r\n        public static string parent_accessed_in_parentless_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_accessed_in_parentless_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access parent:: when no class scope is active.\r\n        /// </summary>\r\n        public static string parent_accessed_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_accessed_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;parent&apos; used out of class declaration.\r\n        /// </summary>\r\n        public static string parent_used_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"parent_used_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier cannot be used on a conditional declaration.\r\n        /// </summary>\r\n        public static string partial_conditional_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_conditional_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must not specify different base classes.\r\n        /// </summary>\r\n        public static string partial_declarations_differ_in_base {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_base\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same type parameter definitions.\r\n        /// </summary>\r\n        public static string partial_declarations_differ_in_type_parameter {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_type_parameter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to All partial declarations of &apos;{0}&apos; must have the same number of type parameters.\r\n        /// </summary>\r\n        public static string partial_declarations_differ_in_type_parameter_count {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_declarations_differ_in_type_parameter_count\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier can be used only in pure unit.\r\n        /// </summary>\r\n        public static string partial_impure_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_impure_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The &apos;partial&apos; modifier cannot be used in an evaluated code.\r\n        /// </summary>\r\n        public static string partial_transient_declaration {\r\n            get {\r\n                return ResourceManager.GetString(\"partial_transient_declaration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path argument can not be empty.\r\n        /// </summary>\r\n        public static string path_argument_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"path_argument_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path contains invalid characters.\r\n        /// </summary>\r\n        public static string path_contains_invalid_characters {\r\n            get {\r\n                return ResourceManager.GetString(\"path_contains_invalid_characters\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Performing compilation.\r\n        /// </summary>\r\n        public static string performing_compilation {\r\n            get {\r\n                return ResourceManager.GetString(\"performing_compilation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &lt;?php_track_vars?&gt; is not supported.\r\n        /// </summary>\r\n        public static string php_track_vars_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"php_track_vars_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Replace this argument by arguments stated in a specified file..\r\n        /// </summary>\r\n        public static string phpc_arg_at_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_at_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A path to a configuration file to load and process before the compilation. Multiple options can be specified. The order of processed configuration settings:\r\n        ///1. settings in Machine.config\r\n        ///2. settings in phpc.exe.config\r\n        ///3. settings in the file(s) specified by this option if specified\r\n        ///4. App.config/Web.config file located in the application source root if exists and no /config options specified..\r\n        /// </summary>\r\n        public static string phpc_arg_config_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_config_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compile in debug mode (debug information is generated to .pdb files, asserts are ignored)..\r\n        /// </summary>\r\n        public static string phpc_arg_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generate documentation into XML file named as the resulting assembly and placed to the same directory..\r\n        /// </summary>\r\n        public static string phpc_arg_doc {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_doc\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generate documentation into a specified XML file..\r\n        /// </summary>\r\n        public static string phpc_arg_doc_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_doc_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnigs regarding ampersand modifiers (references). Automatically disabled when /dw:CompilerStrict specified..\r\n        /// </summary>\r\n        public static string phpc_arg_dw_AmpModifiers {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_AmpModifiers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables strict compiler warnings such as unreachable code, using &amp; modifier in function calls, etc..\r\n        /// </summary>\r\n        public static string phpc_arg_dw_CompilerStrict {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_CompilerStrict\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnings related to deferred compilation..\r\n        /// </summary>\r\n        public static string phpc_arg_dw_DeferredToRuntime {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_DeferredToRuntime\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables warnings reported when inclusion mapping fails. Automatically disabled when /dw:DeferredToRuntime specified..\r\n        /// </summary>\r\n        public static string phpc_arg_dw_InclusionsMapping {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_dw_InclusionsMapping\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Encoding of the scripts. Examples: UTF-8, Windows-1250, Latin1, Latin2, etc. See also method System.Text.Encoding.GetEncoding(string)..\r\n        /// </summary>\r\n        public static string phpc_arg_encoding {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_encoding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to That one of compiled scripts which will be used as an entry point of a console application..\r\n        /// </summary>\r\n        public static string phpc_arg_entrypoint {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_entrypoint\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enables specified warning(s) (same options as /dw)..\r\n        /// </summary>\r\n        public static string phpc_arg_ew {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_ew\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Comma separated list of file extensions which to add to compilation when recursively searching directories. Default value is &apos;php,inc&apos;..\r\n        /// </summary>\r\n        public static string phpc_arg_ext {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_ext\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Displays this usage message..\r\n        /// </summary>\r\n        public static string phpc_arg_help {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_help\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File containing key pair generated by sn utility. Makes resulting assembly strongly named..\r\n        /// </summary>\r\n        public static string phpc_arg_key {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_key\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enable language features of the specified PHP language version..\r\n        /// </summary>\r\n        public static string phpc_arg_lang {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_lang\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Indicates that the COM threading model for the application is multithreaded apartment. Disabled by default..\r\n        /// </summary>\r\n        public static string phpc_arg_mta {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_mta\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Disables one or more warnings by number. Separate multiple warning numbers with a commas..\r\n        /// </summary>\r\n        public static string phpc_arg_nowarn_warning_numbers {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_nowarn_warning_numbers\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If the target is a web application specifies a directory where the resulting assembly should be stored in.\r\n        ///Otherwise, specifies a name of the resulting application assembly..\r\n        /// </summary>\r\n        public static string phpc_arg_out_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_out_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a pure PHP/CLR application..\r\n        /// </summary>\r\n        public static string phpc_arg_pure {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_pure\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Suppresses display of any messages..\r\n        /// </summary>\r\n        public static string phpc_arg_quiet {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_quiet\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Directory which to recursively search for files to compile. Can be specified repeatedly..\r\n        /// </summary>\r\n        public static string phpc_arg_recurse {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_recurse\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Path to a referenced PHP library assembly. More these options can be stated..\r\n        /// </summary>\r\n        public static string phpc_arg_reference_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_reference_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File or directory to embed to the resulting assembly as a managed resource (if a directory is specified its content is embedded recursively). Can be specified repeatedly. Optionally can contain specification fo resource name and visibiliy - only for files. Default name is filename and visibility is public..\r\n        /// </summary>\r\n        public static string phpc_arg_resource {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_resource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A path to a root directory of the compiled web/console/win application or library. Defaults to the current directory..\r\n        /// </summary>\r\n        public static string phpc_arg_root_path {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_root_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File or directory which will be skipped during compilation. This also prevents a file(s) to be included statically if /static+ option is specified..\r\n        /// </summary>\r\n        public static string phpc_arg_skip {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_skip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enable static inclusions..\r\n        /// </summary>\r\n        public static string phpc_arg_static {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_static\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a library..\r\n        /// </summary>\r\n        public static string phpc_arg_target_dll {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_dll\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build an executable console application..\r\n        /// </summary>\r\n        public static string phpc_arg_target_exe {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_exe\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a web application..\r\n        /// </summary>\r\n        public static string phpc_arg_target_web {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_web\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Build a Windows application..\r\n        /// </summary>\r\n        public static string phpc_arg_target_winexe {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_target_winexe\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Whether to report additional infromation about the compilation process..\r\n        /// </summary>\r\n        public static string phpc_arg_verbose {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_verbose\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Version of the resulting assembly. Default version is 1.0.0.0..\r\n        /// </summary>\r\n        public static string phpc_arg_version {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_version\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File containing an Win32 icon (or multiple icons) that will be included to the resulting assembly..\r\n        /// </summary>\r\n        public static string phpc_arg_win32icon {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_arg_win32icon\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Paths to scripts to be compiled should be specified on the command line following the options. The paths can be either absolute or relative to the /root directory.\r\n        ///If no files are specified nor /recurse option is specified the /root directory is recursively searched for scripts to compile..\r\n        /// </summary>\r\n        public static string phpc_other_args {\r\n            get {\r\n                return ResourceManager.GetString(\"phpc_other_args\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Precompiled assembly &apos;{0}&apos; is corrupted (unable to resolve type token 0x{1:X8})..\r\n        /// </summary>\r\n        public static string precompiled_assembly_corrupted {\r\n            get {\r\n                return ResourceManager.GetString(\"precompiled_assembly_corrupted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Precompiled assembly &apos;{0}&apos; contains &lt;Script&gt; type that misses ScriptAttribute..\r\n        /// </summary>\r\n        public static string precompiled_assembly_missing_script_attribute {\r\n            get {\r\n                return ResourceManager.GetString(\"precompiled_assembly_missing_script_attribute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare a private class in the global namespace.\r\n        /// </summary>\r\n        public static string private_class_in_global_ns {\r\n            get {\r\n                return ResourceManager.GetString(\"private_class_in_global_ns\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access private constant {0}::{1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string private_constant_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"private_constant_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to private constructor {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string private_ctor_called {\r\n            get {\r\n                return ResourceManager.GetString(\"private_ctor_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to private method {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string private_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"private_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access private property {0}::${1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string private_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"private_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Properties cannot be declared abstract.\r\n        /// </summary>\r\n        public static string property_declared_abstract {\r\n            get {\r\n                return ResourceManager.GetString(\"property_declared_abstract\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Properties cannot be declared final.\r\n        /// </summary>\r\n        public static string property_declared_final {\r\n            get {\r\n                return ResourceManager.GetString(\"property_declared_final\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare property {0}::${1}.\r\n        /// </summary>\r\n        public static string property_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"property_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to assign the specified value to &apos;{0}::{1}&apos;. There is no suitable conversion..\r\n        /// </summary>\r\n        public static string property_type_mismatch {\r\n            get {\r\n                return ResourceManager.GetString(\"property_type_mismatch\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access protected constant {0}::{1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string protected_constant_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_constant_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to protected constructor {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string protected_ctor_called {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_ctor_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to protected method {0}::{1}() from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string protected_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access protected property {0}::${1} from context &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string protected_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"protected_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Reading configuration.\r\n        /// </summary>\r\n        public static string reading_configuration {\r\n            get {\r\n                return ResourceManager.GetString(\"reading_configuration\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot set read-only property {0}::${1}.\r\n        /// </summary>\r\n        public static string readonly_property_written {\r\n            get {\r\n                return ResourceManager.GetString(\"readonly_property_written\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare {0} &apos;{1}&apos; previously declared in {2}{3}.\r\n        /// </summary>\r\n        public static string redeclared_previous_decl {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclared_previous_decl\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inclusion of &apos;{2}{3}&apos; redeclares {0} &apos;{1}&apos; declared in {2}{3}.\r\n        /// </summary>\r\n        public static string redeclared_previous_decl_include {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclared_previous_decl_include\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot declare inherited constant &apos;{0}&apos; from interface &apos;{1}&apos; in class/interface &apos;{2}&apos;.\r\n        /// </summary>\r\n        public static string redeclaring_inherited_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"redeclaring_inherited_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Argument &apos;{0}&apos; is passed by reference and hence should not be NULL.\r\n        /// </summary>\r\n        public static string reference_null {\r\n            get {\r\n                return ResourceManager.GetString(\"reference_null\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A scalar of type &apos;{0}&apos; used as an array.\r\n        /// </summary>\r\n        public static string scalar_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"scalar_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A scalar of type &apos;{0}&apos; used as an object.\r\n        /// </summary>\r\n        public static string scalar_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"scalar_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script &apos;{0}&apos; inclusion failed. Cause: {1} Search paths: include_path is &apos;{2}&apos;, working directory is &apos;{3}&apos; .\r\n        /// </summary>\r\n        public static string script_inclusion_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"script_inclusion_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script library &quot;{0}&quot; could not be loaded..\r\n        /// </summary>\r\n        public static string script_library_assembly_loading_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"script_library_assembly_loading_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Script file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        public static string script_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"script_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access self:: when no class scope is active.\r\n        /// </summary>\r\n        public static string self_accessed_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"self_accessed_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;self&apos; used out of class declaration.\r\n        /// </summary>\r\n        public static string self_used_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"self_used_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Semicolon ignored, using it in this context is possible in PHP 5, but depracated in PHP.NET.\r\n        /// </summary>\r\n        public static string semicolon_ignored {\r\n            get {\r\n                return ResourceManager.GetString(\"semicolon_ignored\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0}::serialize() must return a string or NULL.\r\n        /// </summary>\r\n        public static string serialize_must_return_null_or_string {\r\n            get {\r\n                return ResourceManager.GetString(\"serialize_must_return_null_or_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Session state not available, session operation cannot be performed.\r\n        /// </summary>\r\n        public static string session_state_unavailable {\r\n            get {\r\n                return ResourceManager.GetString(\"session_state_unavailable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Compilation of {0} skipped, file is already compiled.\r\n        /// </summary>\r\n        public static string skip_compile {\r\n            get {\r\n                return ResourceManager.GetString(\"skip_compile\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to __sleep should return an array containing the names of instance-variables to serialize.\r\n        /// </summary>\r\n        public static string sleep_must_return_array {\r\n            get {\r\n                return ResourceManager.GetString(\"sleep_must_return_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; returned as member variable from __sleep() but does not exist.\r\n        /// </summary>\r\n        public static string sleep_returned_bad_field {\r\n            get {\r\n                return ResourceManager.GetString(\"sleep_returned_bad_field\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Source file &apos;{0}&apos; not found..\r\n        /// </summary>\r\n        public static string source_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"source_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Accessing the key of an EmptyIterator.\r\n        /// </summary>\r\n        public static string spl_empty_iterator_key_access {\r\n            get {\r\n                return ResourceManager.GetString(\"spl_empty_iterator_key_access\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Accessing the value of an EmptyIterator.\r\n        /// </summary>\r\n        public static string spl_empty_iterator_value_access {\r\n            get {\r\n                return ResourceManager.GetString(\"spl_empty_iterator_value_access\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Index invalid or out of range.\r\n        /// </summary>\r\n        public static string spl_index_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"spl_index_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Accessing static property {0}::${1} as non static.\r\n        /// </summary>\r\n        public static string static_property_as_nonstatic {\r\n            get {\r\n                return ResourceManager.GetString(\"static_property_as_nonstatic\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Attempt to unset static property {0}::${1}.\r\n        /// </summary>\r\n        public static string static_property_unset {\r\n            get {\r\n                return ResourceManager.GetString(\"static_property_unset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access static:: when no class scope is active.\r\n        /// </summary>\r\n        public static string static_used_out_of_class {\r\n            get {\r\n                return ResourceManager.GetString(\"static_used_out_of_class\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified directory does not exist.\r\n        /// </summary>\r\n        public static string stream_bad_directory {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_directory\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified file does not exist.\r\n        /// </summary>\r\n        public static string stream_bad_filename {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_filename\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to find the wrapper &apos;{0}&apos; - did you forget to enable it when you configured PHP?.\r\n        /// </summary>\r\n        public static string stream_bad_wrapper {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_bad_wrapper\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Permission denied.\r\n        /// </summary>\r\n        public static string stream_directory_access_denied {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_access_denied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Directory not empty or read-only.\r\n        /// </summary>\r\n        public static string stream_directory_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Use recursive mode to create more than one directory at a time.\r\n        /// </summary>\r\n        public static string stream_directory_make_parent {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_make_parent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to make directory ({0}): Can not create root directory.\r\n        /// </summary>\r\n        public static string stream_directory_make_root {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_make_root\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified directory does not exist ({0}).\r\n        /// </summary>\r\n        public static string stream_directory_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_directory_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not access resource ({0}): {1}.\r\n        /// </summary>\r\n        public static string stream_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to access ({0}): Permission denied.\r\n        /// </summary>\r\n        public static string stream_file_access_denied {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_access_denied\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified file already exists ({0}).\r\n        /// </summary>\r\n        public static string stream_file_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified filename is invalid.\r\n        /// </summary>\r\n        public static string stream_file_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}) due to I/O error: {1}.\r\n        /// </summary>\r\n        public static string stream_file_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified file does not exist ({0}).\r\n        /// </summary>\r\n        public static string stream_file_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_file_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to access ({0}): The filename is invalid.\r\n        /// </summary>\r\n        public static string stream_filename_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_filename_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to open {0} for reading.\r\n        /// </summary>\r\n        public static string stream_open_read_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_open_read_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to open {0} for writing.\r\n        /// </summary>\r\n        public static string stream_open_write_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_open_write_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The specified path does not exist ({0}).\r\n        /// </summary>\r\n        public static string stream_path_not_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_path_not_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured when reading from stream: {0}.\r\n        /// </summary>\r\n        public static string stream_read_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An I/O error occured when reading from stream: {0}.\r\n        /// </summary>\r\n        public static string stream_read_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The stream was not opened for reading.\r\n        /// </summary>\r\n        public static string stream_read_off {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_read_off\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not rename &apos;{0}&apos; to &apos;{1}&apos;: target file exists.\r\n        /// </summary>\r\n        public static string stream_rename_file_exists {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_rename_file_exists\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not remove directory ({0}): directory not empty.\r\n        /// </summary>\r\n        public static string stream_rmdir_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_rmdir_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Seeking in a {0} stream! It may lead to unpredictable results..\r\n        /// </summary>\r\n        public static string stream_seek_filtered {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_seek_filtered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Socket error: {0}.\r\n        /// </summary>\r\n        public static string stream_socket_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_socket_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to stat ({0}) - invalid filename.\r\n        /// </summary>\r\n        public static string stream_stat_invalid_path {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_stat_invalid_path\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}): unexpected error.\r\n        /// </summary>\r\n        public static string stream_unlink_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}): The specified filename is invalid.\r\n        /// </summary>\r\n        public static string stream_unlink_file_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_file_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can not unlink file ({0}) due to I/O error: {1}.\r\n        /// </summary>\r\n        public static string stream_unlink_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_unlink_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified URL is invalid.\r\n        /// </summary>\r\n        public static string stream_url_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_url_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to open stream ({0}): The specified request method is invalid.\r\n        /// </summary>\r\n        public static string stream_url_method_invalid {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_url_method_invalid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An error occured when writing to stream: {0}.\r\n        /// </summary>\r\n        public static string stream_write_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to write to stream (only {0} bytes of {1} written).\r\n        /// </summary>\r\n        public static string stream_write_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An I/O error occured when writing to stream: {0}.\r\n        /// </summary>\r\n        public static string stream_write_io_error {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_io_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The stream was not opened for writing.\r\n        /// </summary>\r\n        public static string stream_write_off {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_write_off\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string item used as a reference.\r\n        /// </summary>\r\n        public static string string_item_used_as_reference {\r\n            get {\r\n                return ResourceManager.GetString(\"string_item_used_as_reference\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String should consist of a single character.\r\n        /// </summary>\r\n        public static string string_should_be_single_character {\r\n            get {\r\n                return ResourceManager.GetString(\"string_should_be_single_character\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string used as an array.\r\n        /// </summary>\r\n        public static string string_used_as_array {\r\n            get {\r\n                return ResourceManager.GetString(\"string_used_as_array\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A string used as an object.\r\n        /// </summary>\r\n        public static string string_used_as_object {\r\n            get {\r\n                return ResourceManager.GetString(\"string_used_as_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to exception &apos;{0}&apos; with message &apos;{1}&apos;\r\n        ///Stack trace:\r\n        ///{2}.\r\n        /// </summary>\r\n        public static string stringified_exception {\r\n            get {\r\n                return ResourceManager.GetString(\"stringified_exception\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to exception &apos;{0}&apos; with message &apos;{1}&apos; in {2}:{3}:{4}\r\n        ///Stack trace:\r\n        ///{5}.\r\n        /// </summary>\r\n        public static string stringified_exception_debug {\r\n            get {\r\n                return ResourceManager.GetString(\"stringified_exception_debug\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Syntax error: {0}.\r\n        /// </summary>\r\n        public static string syntax_error {\r\n            get {\r\n                return ResourceManager.GetString(\"syntax_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The variable $this used in write context.\r\n        /// </summary>\r\n        public static string this_in_write_context {\r\n            get {\r\n                return ResourceManager.GetString(\"this_in_write_context\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The variable $this used out of method.\r\n        /// </summary>\r\n        public static string this_out_of_method {\r\n            get {\r\n                return ResourceManager.GetString(\"this_out_of_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Using $this when not in object context.\r\n        /// </summary>\r\n        public static string this_used_out_of_object {\r\n            get {\r\n                return ResourceManager.GetString(\"this_used_out_of_object\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Timeout when waiting for ExtManager to start up..\r\n        /// </summary>\r\n        public static string timeout_waiting_for_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"timeout_waiting_for_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The integer number {0} is too big, converting to double instead.\r\n        /// </summary>\r\n        public static string too_big_int_conversion {\r\n            get {\r\n                return ResourceManager.GetString(\"too_big_int_conversion\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of the class &apos;{0}&apos; constructor - at least {1} required but only {2} provided.\r\n        /// </summary>\r\n        public static string too_few_ctor_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_ctor_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of &apos;{0}&apos; - at least {1} required but only {2} provided.\r\n        /// </summary>\r\n        public static string too_few_function_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_function_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Missing parameter(s) to the call of &apos;{0}::{1}&apos; - at least {2} required but only {3} provided.\r\n        /// </summary>\r\n        public static string too_few_method_params {\r\n            get {\r\n                return ResourceManager.GetString(\"too_few_method_params\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Too little data buffered..\r\n        /// </summary>\r\n        public static string too_little_data_buffered {\r\n            get {\r\n                return ResourceManager.GetString(\"too_little_data_buffered\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; declares too many local variables ({1}) which may lead to suboptimal performace.\r\n        /// </summary>\r\n        public static string too_many_local_variables_function {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_local_variables_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method &apos;{0}::{1}&apos; declares too many local variables ({2}) which may lead to suboptimal performace.\r\n        /// </summary>\r\n        public static string too_many_local_variables_method {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_local_variables_method\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of type &apos;{0}&apos; requires at most {1} generic type arguments.\r\n        /// </summary>\r\n        public static string too_many_type_arguments_in_type_use {\r\n            get {\r\n                return ResourceManager.GetString(\"too_many_type_arguments_in_type_use\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Method {0}::__toString() must return a string value.\r\n        /// </summary>\r\n        public static string tostring_must_return_string {\r\n            get {\r\n                return ResourceManager.GetString(\"tostring_must_return_string\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot use try without catch or finally.\r\n        /// </summary>\r\n        public static string try_without_catch_or_finally {\r\n            get {\r\n                return ResourceManager.GetString(\"try_without_catch_or_finally\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Generic type argument #{0} not passed to the function/method.\r\n        /// </summary>\r\n        public static string type_argument_not_passed_to_function {\r\n            get {\r\n                return ResourceManager.GetString(\"type_argument_not_passed_to_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot redeclare class/interface &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string type_redeclared {\r\n            get {\r\n                return ResourceManager.GetString(\"type_redeclared\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to connect to ExtManager..\r\n        /// </summary>\r\n        public static string unable_to_connect_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_connect_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to find extension &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string unable_to_find_extension {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_find_extension\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to launch ExtManager..\r\n        /// </summary>\r\n        public static string unable_to_launch_extmanager {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_launch_extmanager\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to resolve script type (source path &apos;{0}&apos;, referential type &apos;{1}&apos;).\r\n        /// </summary>\r\n        public static string unable_to_resolve_script_type {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_resolve_script_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Uncaught {0}.\r\n        /// </summary>\r\n        public static string uncaught_exception {\r\n            get {\r\n                return ResourceManager.GetString(\"uncaught_exception\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Access to undeclared static property: {0}::${1}.\r\n        /// </summary>\r\n        public static string undeclared_static_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"undeclared_static_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined class constant &apos;{0}::{1}&apos;.\r\n        /// </summary>\r\n        public static string undefined_class_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_class_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of undefined constant {0} - assumed &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string undefined_constant {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_constant\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined external function &apos;{0}&apos;, extension &apos;{1}&apos; - check configuration.\r\n        /// </summary>\r\n        public static string undefined_external_function_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_external_function_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined external function &apos;{0}&apos;, extension &apos;{1}&apos; (extension not found).\r\n        /// </summary>\r\n        public static string undefined_external_module_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_external_module_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined function: &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string undefined_function_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_function_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use of undefined label &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string undefined_label {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Call to undefined method: {0}::{1}().\r\n        /// </summary>\r\n        public static string undefined_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined offset ({0}).\r\n        /// </summary>\r\n        public static string undefined_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined property: {0}::${1}.\r\n        /// </summary>\r\n        public static string undefined_property_accessed {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_property_accessed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot access undefined property for object with overloaded property access.\r\n        /// </summary>\r\n        public static string undefined_property_when_access_overloaded {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_property_when_access_overloaded\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Undefined variable: {0}.\r\n        /// </summary>\r\n        public static string undefined_variable {\r\n            get {\r\n                return ResourceManager.GetString(\"undefined_variable\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unexpected parent constructor call (such call is allowed only in the constructor of the class extending a CLR type).\r\n        /// </summary>\r\n        public static string unexpected_parent_ctor_invocation {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_parent_ctor_invocation\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to unexpected token &apos;{0}&apos;.\r\n        /// </summary>\r\n        public static string unexpected_token {\r\n            get {\r\n                return ResourceManager.GetString(\"unexpected_token\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to String offset &apos;{0}&apos; hasn&apos;t been initialized.\r\n        /// </summary>\r\n        public static string uninitialized_string_offset {\r\n            get {\r\n                return ResourceManager.GetString(\"uninitialized_string_offset\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_class_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_class_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_class_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_class_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_constant_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_constant_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Constant &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_constant_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_constant_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown custom attribute; neither of types &apos;{0}&apos; and &apos;{1}&apos; exists.\r\n        /// </summary>\r\n        public static string unknown_custom_attribute {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_custom_attribute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_function_used {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_function_used\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; (imported as &apos;{1}&apos;) is unknown at this point at compile-time.\r\n        /// </summary>\r\n        public static string unknown_function_used_with_alias {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_function_used_with_alias\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; does not contain definition of method &apos;{1}&apos;.\r\n        /// </summary>\r\n        public static string unknown_method_called {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_method_called\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Session handler &apos;{0}&apos; is unknown. It hasn&apos;t been registered by any loaded library..\r\n        /// </summary>\r\n        public static string unknown_session_handler {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_session_handler\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown error &quot;{0}&quot;..\r\n        /// </summary>\r\n        public static string UnknownError_Num {\r\n            get {\r\n                return ResourceManager.GetString(\"UnknownError_Num\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function {0} requires access to local variables and prevents optimizing them. To improve performance, separate this function call into small function..\r\n        /// </summary>\r\n        public static string unoptimized_local_variables_function {\r\n            get {\r\n                return ResourceManager.GetString(\"unoptimized_local_variables_function\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unreachable code detected.\r\n        /// </summary>\r\n        public static string unreachable_code {\r\n            get {\r\n                return ResourceManager.GetString(\"unreachable_code\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Function {0}() hasn&apos;t defined the class it was called for.\r\n        /// </summary>\r\n        public static string unserialize_callback_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"unserialize_callback_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported operand type.\r\n        /// </summary>\r\n        public static string unsupported_operand_type {\r\n            get {\r\n                return ResourceManager.GetString(\"unsupported_operand_type\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unsupported operand types.\r\n        /// </summary>\r\n        public static string unsupported_operand_types {\r\n            get {\r\n                return ResourceManager.GetString(\"unsupported_operand_types\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unterminated comment starting line {0}.\r\n        /// </summary>\r\n        public static string unterminated_comment {\r\n            get {\r\n                return ResourceManager.GetString(\"unterminated_comment\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The label &apos;{0}&apos; is defined but not used within the current scope.\r\n        /// </summary>\r\n        public static string unused_label {\r\n            get {\r\n                return ResourceManager.GetString(\"unused_label\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to URL file-access is disabled in the server configuration.\r\n        /// </summary>\r\n        public static string url_fopen_disabled {\r\n            get {\r\n                return ResourceManager.GetString(\"url_fopen_disabled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No URL resource specified.\r\n        /// </summary>\r\n        public static string url_resource_missing {\r\n            get {\r\n                return ResourceManager.GetString(\"url_resource_missing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The option is valid only in web application configuration..\r\n        /// </summary>\r\n        public static string web_only_option {\r\n            get {\r\n                return ResourceManager.GetString(\"web_only_option\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Web server context is not available..\r\n        /// </summary>\r\n        public static string web_server_not_available {\r\n            get {\r\n                return ResourceManager.GetString(\"web_server_not_available\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {0} operation is not supported by this stream wrapper.\r\n        /// </summary>\r\n        public static string wrapper_op_unsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"wrapper_op_unsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot read from write-only property {0}::${1}.\r\n        /// </summary>\r\n        public static string writeonly_property_read {\r\n            get {\r\n                return ResourceManager.GetString(\"writeonly_property_read\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"Argument_StringZeroLength\" xml:space=\"preserve\">\r\n    <value>String cannot be of zero length.</value>\r\n  </data>\r\n  <data name=\"Argument_IllegalEnvVarName\" xml:space=\"preserve\">\r\n    <value>Environment variable name cannot contain equal character.</value>\r\n  </data>\r\n  <data name=\"Argument_LongEnvVarValue\" xml:space=\"preserve\">\r\n    <value>Environment variable name or value is too long.</value>\r\n  </data>\r\n  <data name=\"Argument_StringFirstCharIsZero\" xml:space=\"preserve\">\r\n    <value>The first char in the string is the null character.</value>\r\n  </data>\r\n  <data name=\"UnknownError_Num\" xml:space=\"preserve\">\r\n    <value>Unknown error \"{0}\".</value>\r\n  </data>\r\n  <data name=\"configuration_record_read_only\" xml:space=\"preserve\">\r\n    <value>Configuration record is read only.</value>\r\n  </data>\r\n  <data name=\"invalid_icon_format\" xml:space=\"preserve\">\r\n    <value>The icon has an invalid format.</value>\r\n  </data>\r\n  <data name=\"invalid_array_rank\" xml:space=\"preserve\">\r\n    <value>Invalid array rank.</value>\r\n  </data>\r\n  <data name=\"not_enought_space_in_target_array\" xml:space=\"preserve\">\r\n    <value>Not enought space in the target array.</value>\r\n  </data>\r\n  <data name=\"item_removed_from_empty_array\" xml:space=\"preserve\">\r\n    <value>Cannot remove item from empty array.</value>\r\n  </data>\r\n  <data name=\"enumerator_not_referencing_this_table\" xml:space=\"preserve\">\r\n    <value>Specified enumerator doesn't reference this table.</value>\r\n  </data>\r\n  <data name=\"argument_equals\" xml:space=\"preserve\">\r\n    <value>Argument {0} cannot be equal to {1}.</value>\r\n  </data>\r\n  <data name=\"for_internal_usage_only\" xml:space=\"preserve\">\r\n    <value>{0} is intended for internal usage only.</value>\r\n  </data>\r\n  <data name=\"invalid_node\" xml:space=\"preserve\">\r\n    <value>Invalid node.</value>\r\n  </data>\r\n  <data name=\"missing_attribute\" xml:space=\"preserve\">\r\n    <value>Missing attribute '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_value\" xml:space=\"preserve\">\r\n    <value>The value of attribute '{0}' is invalid.</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_location\" xml:space=\"preserve\">\r\n    <value>Attribute '{0}' cannot be used in configuration file located on virtual path '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_node_location\" xml:space=\"preserve\">\r\n    <value>Node cannot be used in configuration file located on virtual path '{0}' because {1}.</value>\r\n  </data>\r\n  <data name=\"defines_app_wide_config\" xml:space=\"preserve\">\r\n    <value>it defines application wide configuration</value>\r\n  </data>\r\n  <data name=\"defines_machine_wide_config\" xml:space=\"preserve\">\r\n    <value>it defines machine wide configuration</value>\r\n  </data>\r\n  <data name=\"library_load_failed\" xml:space=\"preserve\">\r\n    <value>Library '{0}' cannot be loaded; {1}</value>\r\n  </data>\r\n  <data name=\"extension_already_loaded\" xml:space=\"preserve\">\r\n    <value>Extension '{0}' (file '{1}') has alredy been loaded.</value>\r\n  </data>\r\n  <data name=\"library_section_redeclared\" xml:space=\"preserve\">\r\n    <value>Library configuration section '{0}' has already been bound to the library '{1}'.</value>\r\n  </data>\r\n  <data name=\"cannot_change_library_section\" xml:space=\"preserve\">\r\n    <value>Could not change the section of loaded library. The library '{0}' has already been bound to configuration section '{1}'.</value>\r\n  </data>\r\n  <data name=\"library_assembly_loading_failed\" xml:space=\"preserve\">\r\n    <value>Library assembly '{0}' could not be loaded.</value>\r\n  </data>\r\n  <data name=\"dynamic_wrapper_loading_failed\" xml:space=\"preserve\">\r\n    <value>Dynamic wrapper '{0}' could not be loaded.</value>\r\n  </data>\r\n  <data name=\"constant_reimplemented\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Constant '{2}' is reimplemented. Previously implemented by {3}.{4}.</value>\r\n  </data>\r\n  <data name=\"function_reimplemented\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Function '{2}' is reimplemented. Previously implemented by {3}.{4}.</value>\r\n  </data>\r\n  <data name=\"invalid_call_context_data\" xml:space=\"preserve\">\r\n    <value>Invalid call context data in slot {0}.</value>\r\n  </data>\r\n  <data name=\"last_is_less_than_first\" xml:space=\"preserve\">\r\n    <value>The last must be greater than or equal to the first.</value>\r\n  </data>\r\n  <data name=\"page_instantiation_failed\" xml:space=\"preserve\">\r\n    <value>Unable to instantiate page '{0}'.</value>\r\n  </data>\r\n  <data name=\"directory_not_exists\" xml:space=\"preserve\">\r\n    <value>Directory '{0}' does not exist.</value>\r\n  </data>\r\n  <data name=\"incomplete_path\" xml:space=\"preserve\">\r\n    <value>Path '{0}' is incomplete. The path is relative or drive specification is missing.</value>\r\n  </data>\r\n  <data name=\"file_not_exists\" xml:space=\"preserve\">\r\n    <value>File '{0}' does not exist.</value>\r\n  </data>\r\n  <data name=\"invalid_regular_expression\" xml:space=\"preserve\">\r\n    <value>Invalid regular expression.</value>\r\n  </data>\r\n  <data name=\"invalid_registering_order\" xml:space=\"preserve\">\r\n    <value>Invalid global variables registering order.</value>\r\n  </data>\r\n  <data name=\"invalid_library_contant_type\" xml:space=\"preserve\">\r\n    <value>Invalid library contant type '{0}'.</value>\r\n  </data>\r\n  <data name=\"missing_configuration\" xml:space=\"preserve\">\r\n    <value>Configuration option {0} has not been defined.</value>\r\n  </data>\r\n  <data name=\"console_only_option\" xml:space=\"preserve\">\r\n    <value>The option is valid only in console application configuration.</value>\r\n  </data>\r\n  <data name=\"web_only_option\" xml:space=\"preserve\">\r\n    <value>The option is valid only in web application configuration.</value>\r\n  </data>\r\n  <data name=\"script_not_found\" xml:space=\"preserve\">\r\n    <value>Script file '{0}' not found.</value>\r\n  </data>\r\n  <data name=\"error_creating_file\" xml:space=\"preserve\">\r\n    <value>Unexpected error creating file '{0}': {1}</value>\r\n  </data>\r\n  <data name=\"library_config_handler_failed\" xml:space=\"preserve\">\r\n    <value>The configuration handler of the library '{0}' has failed.</value>\r\n  </data>\r\n  <data name=\"out_of_range\" xml:space=\"preserve\">\r\n    <value>Value should be between {0} and {1} including.</value>\r\n  </data>\r\n  <data name=\"invalid_base\" xml:space=\"preserve\">\r\n    <value>Invalid base.</value>\r\n  </data>\r\n  <data name=\"configuration_not_loaded\" xml:space=\"preserve\">\r\n    <value>Configuration has not been loaded yet.</value>\r\n  </data>\r\n  <data name=\"cannot_modify_option\" xml:space=\"preserve\">\r\n    <value>Configuration option cannot be modified here since it has been prevented to so by 'allowOverride' attribute in configuration file '{0}'.</value>\r\n  </data>\r\n  <data name=\"unknown_session_handler\" xml:space=\"preserve\">\r\n    <value>Session handler '{0}' is unknown. It hasn't been registered by any loaded library.</value>\r\n  </data>\r\n  <data name=\"invalid_method_implementation\" xml:space=\"preserve\">\r\n    <value>Invalid implementation of method '{0}'.</value>\r\n  </data>\r\n  <data name=\"cant_generate_sys_class_builders\" xml:space=\"preserve\">\r\n    <value>Can't generate builders for system classes.</value>\r\n  </data>\r\n  <data name=\"cant_create_sys_class_types\" xml:space=\"preserve\">\r\n    <value>Can't create types for system classes.</value>\r\n  </data>\r\n  <data name=\"cant_clone_sys_table\" xml:space=\"preserve\">\r\n    <value>Can't clone system classes table.</value>\r\n  </data>\r\n  <data name=\"unable_to_connect_extmanager\" xml:space=\"preserve\">\r\n    <value>Unable to connect to ExtManager.</value>\r\n  </data>\r\n  <data name=\"unable_to_launch_extmanager\" xml:space=\"preserve\">\r\n    <value>Unable to launch ExtManager.</value>\r\n  </data>\r\n  <data name=\"extmanager_path_not_configured\" xml:space=\"preserve\">\r\n    <value>At least one extension is to be run in isolated mode but ExtManager path is not configured.</value>\r\n  </data>\r\n  <data name=\"could_not_create_event\" xml:space=\"preserve\">\r\n    <value>Could not create event.</value>\r\n  </data>\r\n  <data name=\"timeout_waiting_for_extmanager\" xml:space=\"preserve\">\r\n    <value>Timeout when waiting for ExtManager to start up.</value>\r\n  </data>\r\n  <data name=\"cannot_change_target_instance\" xml:space=\"preserve\">\r\n    <value>Changing the target instance is unsupported if the callback is already bound.</value>\r\n  </data>\r\n  <data name=\"must_target_instance_method\" xml:space=\"preserve\">\r\n    <value>Must target an instance method.</value>\r\n  </data>\r\n  <data name=\"must_be_static\" xml:space=\"preserve\">\r\n    <value>Must be static.</value>\r\n  </data>\r\n  <data name=\"must_be_phpobject_subclass\" xml:space=\"preserve\">\r\n    <value>Must be a class derived from PhpObject.</value>\r\n  </data>\r\n  <data name=\"must_be_iphpmemberhandle\" xml:space=\"preserve\">\r\n    <value>Must be an IPhpMemberHandle.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_instance_method\" xml:space=\"preserve\">\r\n    <value>Must be bound to an instance method of the class associated with this table.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_method\" xml:space=\"preserve\">\r\n    <value>Must be bound to a method of the class associated with this table.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_static_method\" xml:space=\"preserve\">\r\n    <value>Must be bound to a static method of the class associated with this table.</value>\r\n  </data>\r\n  <data name=\"must_be_associated_instance_field\" xml:space=\"preserve\">\r\n    <value>Must reflect an instance field of PhpReference type declared in the class assignable from the class associated with this table.</value>\r\n  </data>\r\n  <data name=\"must_be_declaringtype_instance\" xml:space=\"preserve\">\r\n    <value>Must be an instance of DeclaringType.</value>\r\n  </data>\r\n  <data name=\"class_instantiation_failed\" xml:space=\"preserve\">\r\n    <value>Unable to instantiate class '{0}'.</value>\r\n  </data>\r\n  <data name=\"incarnation_type_mismatch\" xml:space=\"preserve\">\r\n    <value>Must be of the same type as this instance.</value>\r\n  </data>\r\n  <data name=\"field_already_exists\" xml:space=\"preserve\">\r\n    <value>A field with the same name already exists in this object.</value>\r\n  </data>\r\n  <data name=\"buffers_must_not_be_empty\" xml:space=\"preserve\">\r\n    <value>Buffers must not be empty.</value>\r\n  </data>\r\n  <data name=\"too_little_data_buffered\" xml:space=\"preserve\">\r\n    <value>Too little data buffered.</value>\r\n  </data>\r\n  <data name=\"casting_to_stream_unsupported\" xml:space=\"preserve\">\r\n    <value>This stream does not support casting as System.IO.Stream.</value>\r\n  </data>\r\n  <data name=\"define_method_unsupported\" xml:space=\"preserve\">\r\n    <value>Method is no longer supported. Use TypeBuilder.DefineMethod instead.</value>\r\n  </data>\r\n  <data name=\"networkutils_unsupported\" xml:space=\"preserve\">\r\n    <value>NetworkUtils are not supported on this system.</value>\r\n  </data>\r\n  <data name=\"class_has_no_unserializer\" xml:space=\"preserve\">\r\n    <value>Class {0} has no unserializer</value>\r\n  </data>\r\n  <data name=\"invalid_script_assembly\" xml:space=\"preserve\">\r\n    <value>The assembly '{0}' is not a valid Phalanger compiled script assembly</value>\r\n  </data>\r\n  <data name=\"unable_to_resolve_script_type\" xml:space=\"preserve\">\r\n    <value>Unable to resolve script type (source path '{0}', referential type '{1}')</value>\r\n  </data>\r\n  <data name=\"instance_disposed\" xml:space=\"preserve\">\r\n    <value>The instance has already been disposed</value>\r\n  </data>\r\n  <data name=\"session_state_unavailable\" xml:space=\"preserve\">\r\n    <value>Session state not available, session operation cannot be performed</value>\r\n  </data>\r\n  <data name=\"empty_path\" xml:space=\"preserve\">\r\n    <value>Path must not be empty.</value>\r\n  </data>\r\n  <data name=\"invalid_path\" xml:space=\"preserve\">\r\n    <value>Path is not valid.</value>\r\n  </data>\r\n  <data name=\"no_suitable_method_overload\" xml:space=\"preserve\">\r\n    <value>No accessible overload of method '{0}::{1}' is compatible with the specified arguments</value>\r\n  </data>\r\n  <data name=\"no_suitable_function_overload\" xml:space=\"preserve\">\r\n    <value>No accessible overload of function '{1}' is compatible with the specified arguments</value>\r\n  </data>\r\n  <data name=\"property_type_mismatch\" xml:space=\"preserve\">\r\n    <value>Unable to assign the specified value to '{0}::{1}'. There is no suitable conversion.</value>\r\n  </data>\r\n  <data name=\"invalid_dynamic_wrapper_format\" xml:space=\"preserve\">\r\n    <value>Invalid format of dynamic wrapper '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_class_library\" xml:space=\"preserve\">\r\n    <value>The library '{0}' is not a valid Phalanger Class Library.</value>\r\n  </data>\r\n  <data name=\"invalid_class_library_wrapper\" xml:space=\"preserve\">\r\n    <value>The dynamic wrapper for the library, file '{0}', is invalid. Delete the wrapper file so that it could be regenerated automatically during the next request.</value>\r\n  </data>\r\n  <data name=\"argless_stub_not_found\" xml:space=\"preserve\">\r\n    <value>Argless stub for populated method '{0}' not found.</value>\r\n  </data>\r\n  <data name=\"field_implementor_not_found\" xml:space=\"preserve\">\r\n    <value>Reflected field '{0}' has unknown implementor. PhpPublicFieldAttribute incorrect usage.</value>\r\n  </data>\r\n  <data name=\"not_all_methods_reflected\" xml:space=\"preserve\">\r\n    <value>Not all populated methods have been reflected.</value>\r\n  </data>\r\n  <data name=\"not_all_fields_reflected\" xml:space=\"preserve\">\r\n    <value>Not all populated fields have been reflected.</value>\r\n  </data>\r\n  <data name=\"not_all_constants_reflected\" xml:space=\"preserve\">\r\n    <value>Not all populated constants have been reflected.</value>\r\n  </data>\r\n  <data name=\"precompiled_assembly_corrupted\" xml:space=\"preserve\">\r\n    <value>Precompiled assembly '{0}' is corrupted (unable to resolve type token 0x{1:X8}).</value>\r\n  </data>\r\n  <data name=\"precompiled_assembly_missing_script_attribute\" xml:space=\"preserve\">\r\n    <value>Precompiled assembly '{0}' contains &lt;Script&gt; type that misses ScriptAttribute.</value>\r\n  </data>\r\n  <data name=\"overload_has_different_impl_options\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: This overload of '{2}' has different implementation options than the others.</value>\r\n  </data>\r\n  <data name=\"overload_has_lesser_param_count\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Overload has lesser mandatory parameter count than another one, even though it has optional arguments.</value>\r\n  </data>\r\n  <data name=\"invalid_function_name\" xml:space=\"preserve\">\r\n    <value>Function name must be a string</value>\r\n  </data>\r\n  <data name=\"invalid_method_modifiers\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Method implementing PHP function should be public and static.</value>\r\n  </data>\r\n  <data name=\"first_param_not_dictionary\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: First parameter should be of type IDictionary due to NeedsVariables option.</value>\r\n  </data>\r\n  <data name=\"invalid_parameter_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Invalid parameter '{2}' type ({3}).</value>\r\n  </data>\r\n  <data name=\"invalid_return_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Invalid return type ({2}).</value>\r\n  </data>\r\n  <data name=\"overloads_not_contiguous\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Suboptimal implementation. Overloads of '{2}' are not placed one following the other in metadata table.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_name\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Invalid constant name '{2}'.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_field\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Field implementing PHP constant should be public literal.</value>\r\n  </data>\r\n  <data name=\"invalid_constant_type\" xml:space=\"preserve\">\r\n    <value>{0}.{1}: Invalid constant type ({2}).</value>\r\n  </data>\r\n  <data name=\"invalid_type_visibility\" xml:space=\"preserve\">\r\n    <value>{0}: Type implementing PHP function or constant should be public.</value>\r\n  </data>\r\n  <data name=\"invalid_type_namespace\" xml:space=\"preserve\">\r\n    <value>{0}: Type implementing PHP function or constant should be in namespace {1} or its subnamespace.</value>\r\n  </data>\r\n  <data name=\"no_source_files_to_compile\" xml:space=\"preserve\">\r\n    <value>No source files to compile.</value>\r\n  </data>\r\n  <data name=\"configuration_file_not_found\" xml:space=\"preserve\">\r\n    <value>Configuration file '{0}' not found.</value>\r\n  </data>\r\n  <data name=\"source_file_not_found\" xml:space=\"preserve\">\r\n    <value>Source file '{0}' not found.</value>\r\n  </data>\r\n  <data name=\"directory_not_found\" xml:space=\"preserve\">\r\n    <value>Directory '{0}' not found.</value>\r\n  </data>\r\n  <data name=\"invalid_value\" xml:space=\"preserve\">\r\n    <value>Invalid value '{0}'.</value>\r\n  </data>\r\n  <data name=\"invalid_option\" xml:space=\"preserve\">\r\n    <value>Invalid option '{0}'.</value>\r\n  </data>\r\n  <data name=\"application_config_file_copied\" xml:space=\"preserve\">\r\n    <value>Application configuration file copied.</value>\r\n  </data>\r\n  <data name=\"entrypoint_not_specified\" xml:space=\"preserve\">\r\n    <value>Entry point script not specified.</value>\r\n  </data>\r\n  <data name=\"invalid_file_extension\" xml:space=\"preserve\">\r\n    <value>Invalid file extension '{0}'.</value>\r\n  </data>\r\n  <data name=\"cannot_create_config_file\" xml:space=\"preserve\">\r\n    <value>Cannot create configuration file '{0}'. Error: {1}</value>\r\n  </data>\r\n  <data name=\"loaded_libraries\" xml:space=\"preserve\">\r\n    <value>Loaded libraries</value>\r\n  </data>\r\n  <data name=\"configuration_error\" xml:space=\"preserve\">\r\n    <value>Configuration error: {0}</value>\r\n  </data>\r\n  <data name=\"performing_compilation\" xml:space=\"preserve\">\r\n    <value>Performing compilation</value>\r\n  </data>\r\n  <data name=\"reading_configuration\" xml:space=\"preserve\">\r\n    <value>Reading configuration</value>\r\n  </data>\r\n  <data name=\"Arguments\" xml:space=\"preserve\">\r\n    <value>Arguments</value>\r\n  </data>\r\n  <data name=\"option\" xml:space=\"preserve\">\r\n    <value>option</value>\r\n  </data>\r\n  <data name=\"invalid_command_line_argument\" xml:space=\"preserve\">\r\n    <value>Invalid command line argument '/{0}': {1}</value>\r\n  </data>\r\n  <data name=\"invalid_command_line_argument_noname\" xml:space=\"preserve\">\r\n    <value>Invalid command line argument(s): {0}</value>\r\n  </data>\r\n  <data name=\"invalid_source\" xml:space=\"preserve\">\r\n    <value>Invalid source file or directory: {0}</value>\r\n  </data>\r\n  <data name=\"code_generation_error\" xml:space=\"preserve\">\r\n    <value>Error occured during assembly generation: {0}</value>\r\n  </data>\r\n  <data name=\"internal_error\" xml:space=\"preserve\">\r\n    <value>Internal error! \r\nPlease, report this bug via {0}.\r\nAdditional information: \r\n{1}</value>\r\n  </data>\r\n  <data name=\"phpc_arg_help\" xml:space=\"preserve\">\r\n    <value>Displays this usage message.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_debug\" xml:space=\"preserve\">\r\n    <value>Compile in debug mode (debug information is generated to .pdb files, asserts are ignored).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_web\" xml:space=\"preserve\">\r\n    <value>Build a web application.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_exe\" xml:space=\"preserve\">\r\n    <value>Build an executable console application.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_dll\" xml:space=\"preserve\">\r\n    <value>Build a library.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_target_winexe\" xml:space=\"preserve\">\r\n    <value>Build a Windows application.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_lang\" xml:space=\"preserve\">\r\n    <value>Enable language features of the specified PHP language version.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_pure\" xml:space=\"preserve\">\r\n    <value>Build a pure PHP/CLR application.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_mta\" xml:space=\"preserve\">\r\n    <value>Indicates that the COM threading model for the application is multithreaded apartment. Disabled by default.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_out_path\" xml:space=\"preserve\">\r\n    <value>If the target is a web application specifies a directory where the resulting assembly should be stored in.\r\nOtherwise, specifies a name of the resulting application assembly.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_doc\" xml:space=\"preserve\">\r\n    <value>Generate documentation into XML file named as the resulting assembly and placed to the same directory.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_doc_path\" xml:space=\"preserve\">\r\n    <value>Generate documentation into a specified XML file.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_root_path\" xml:space=\"preserve\">\r\n    <value>A path to a root directory of the compiled web/console/win application or library. Defaults to the current directory.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_config_path\" xml:space=\"preserve\">\r\n    <value>A path to a configuration file to load and process before the compilation. Multiple options can be specified. The order of processed configuration settings:\r\n1. settings in Machine.config\r\n2. settings in phpc.exe.config\r\n3. settings in the file(s) specified by this option if specified\r\n4. App.config/Web.config file located in the application source root if exists and no /config options specified.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_reference_path\" xml:space=\"preserve\">\r\n    <value>Path to a referenced PHP library assembly. More these options can be stated.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_entrypoint\" xml:space=\"preserve\">\r\n    <value>That one of compiled scripts which will be used as an entry point of a console application.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_static\" xml:space=\"preserve\">\r\n    <value>Enable static inclusions.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_recurse\" xml:space=\"preserve\">\r\n    <value>Directory which to recursively search for files to compile. Can be specified repeatedly.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_ext\" xml:space=\"preserve\">\r\n    <value>Comma separated list of file extensions which to add to compilation when recursively searching directories. Default value is 'php,inc'.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_encoding\" xml:space=\"preserve\">\r\n    <value>Encoding of the scripts. Examples: UTF-8, Windows-1250, Latin1, Latin2, etc. See also method System.Text.Encoding.GetEncoding(string).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_key\" xml:space=\"preserve\">\r\n    <value>File containing key pair generated by sn utility. Makes resulting assembly strongly named.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_version\" xml:space=\"preserve\">\r\n    <value>Version of the resulting assembly. Default version is 1.0.0.0.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_win32icon\" xml:space=\"preserve\">\r\n    <value>File containing an Win32 icon (or multiple icons) that will be included to the resulting assembly.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_resource\" xml:space=\"preserve\">\r\n    <value>File or directory to embed to the resulting assembly as a managed resource (if a directory is specified its content is embedded recursively). Can be specified repeatedly. Optionally can contain specification fo resource name and visibiliy - only for files. Default name is filename and visibility is public.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_nowarn_warning_numbers\" xml:space=\"preserve\">\r\n    <value>Disables one or more warnings by number. Separate multiple warning numbers with a commas.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_DeferredToRuntime\" xml:space=\"preserve\">\r\n    <value>Disables warnings related to deferred compilation.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_InclusionsMapping\" xml:space=\"preserve\">\r\n    <value>Disables warnings reported when inclusion mapping fails. Automatically disabled when /dw:DeferredToRuntime specified.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_CompilerStrict\" xml:space=\"preserve\">\r\n    <value>Disables strict compiler warnings such as unreachable code, using &amp; modifier in function calls, etc.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_dw_AmpModifiers\" xml:space=\"preserve\">\r\n    <value>Disables warnigs regarding ampersand modifiers (references). Automatically disabled when /dw:CompilerStrict specified.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_ew\" xml:space=\"preserve\">\r\n    <value>Enables specified warning(s) (same options as /dw).</value>\r\n  </data>\r\n  <data name=\"phpc_arg_verbose\" xml:space=\"preserve\">\r\n    <value>Whether to report additional infromation about the compilation process.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_at_path\" xml:space=\"preserve\">\r\n    <value>Replace this argument by arguments stated in a specified file.</value>\r\n  </data>\r\n  <data name=\"phpc_arg_quiet\" xml:space=\"preserve\">\r\n    <value>Suppresses display of any messages.</value>\r\n  </data>\r\n  <data name=\"phpc_other_args\" xml:space=\"preserve\">\r\n    <value>Paths to scripts to be compiled should be specified on the command line following the options. The paths can be either absolute or relative to the /root directory.\r\nIf no files are specified nor /recurse option is specified the /root directory is recursively searched for scripts to compile.</value>\r\n  </data>\r\n  <data name=\"default_exception_message\" xml:space=\"preserve\">\r\n    <value>Unknown exception</value>\r\n  </data>\r\n  <data name=\"stringified_exception_debug\" xml:space=\"preserve\">\r\n    <value>exception '{0}' with message '{1}' in {2}:{3}:{4}\r\nStack trace:\r\n{5}</value>\r\n  </data>\r\n  <data name=\"stringified_exception\" xml:space=\"preserve\">\r\n    <value>exception '{0}' with message '{1}'\r\nStack trace:\r\n{2}</value>\r\n  </data>\r\n  <data name=\"getiterator_must_return_traversable\" xml:space=\"preserve\">\r\n    <value>Objects returned by {0}::getIterator() must be traversable or implement interface Iterator</value>\r\n  </data>\r\n  <data name=\"uncaught_exception\" xml:space=\"preserve\">\r\n    <value>Uncaught {0}</value>\r\n  </data>\r\n  <data name=\"exception_cannot_be_thrown\" xml:space=\"preserve\">\r\n    <value>Exception cannot be thrown here: {0}</value>\r\n  </data>\r\n  <data name=\"serialize_must_return_null_or_string\" xml:space=\"preserve\">\r\n    <value>{0}::serialize() must return a string or NULL</value>\r\n  </data>\r\n  <data name=\"__related_location\" xml:space=\"preserve\">\r\n    <value>(related location)</value>\r\n  </data>\r\n  <data name=\"invalid_header\" xml:space=\"preserve\">\r\n    <value>Header '{0}' is invalid: {1}</value>\r\n  </data>\r\n  <data name=\"method_called_on_non_object\" xml:space=\"preserve\">\r\n    <value>Call to a member function {0}() on a non-object</value>\r\n  </data>\r\n  <data name=\"clone_called_on_non_object\" xml:space=\"preserve\">\r\n    <value>__clone method called on non-object</value>\r\n  </data>\r\n  <data name=\"default_object_created\" xml:space=\"preserve\">\r\n    <value>Creating default object from empty value</value>\r\n  </data>\r\n  <data name=\"undefined_method_called\" xml:space=\"preserve\">\r\n    <value>Call to undefined method: {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"protected_method_called\" xml:space=\"preserve\">\r\n    <value>Call to protected method {0}::{1}() from context '{2}'</value>\r\n  </data>\r\n  <data name=\"private_method_called\" xml:space=\"preserve\">\r\n    <value>Call to private method {0}::{1}() from context '{2}'</value>\r\n  </data>\r\n  <data name=\"protected_ctor_called\" xml:space=\"preserve\">\r\n    <value>Call to protected constructor {0}::{1}() from context '{2}'</value>\r\n  </data>\r\n  <data name=\"private_ctor_called\" xml:space=\"preserve\">\r\n    <value>Call to private constructor {0}::{1}() from context '{2}'</value>\r\n  </data>\r\n  <data name=\"circular_base_class_dependency\" xml:space=\"preserve\">\r\n    <value>Circular class inheritance dependency involving '{0}' and '{1}'</value>\r\n  </data>\r\n  <data name=\"circular_base_interface_dependency\" xml:space=\"preserve\">\r\n    <value>Circular interface inheritance dependency involving '{0}' and '{1}'</value>\r\n  </data>\r\n  <data name=\"undefined_property_accessed\" xml:space=\"preserve\">\r\n    <value>Undefined property: {0}::${1}</value>\r\n  </data>\r\n  <data name=\"protected_property_accessed\" xml:space=\"preserve\">\r\n    <value>Cannot access protected property {0}::${1} from context '{2}'</value>\r\n  </data>\r\n  <data name=\"private_property_accessed\" xml:space=\"preserve\">\r\n    <value>Cannot access private property {0}::${1} from context '{2}'</value>\r\n  </data>\r\n  <data name=\"readonly_property_written\" xml:space=\"preserve\">\r\n    <value>Cannot set read-only property {0}::${1}</value>\r\n  </data>\r\n  <data name=\"writeonly_property_read\" xml:space=\"preserve\">\r\n    <value>Cannot read from write-only property {0}::${1}</value>\r\n  </data>\r\n  <data name=\"event_written\" xml:space=\"preserve\">\r\n    <value>Cannot write to event {0}::${1}, use {0}::${1}-&gt;Add() and {0}::${1}-&gt;Remove() to add or remove an event handler</value>\r\n  </data>\r\n  <data name=\"protected_constant_accessed\" xml:space=\"preserve\">\r\n    <value>Cannot access protected constant {0}::{1} from context '{2}'</value>\r\n  </data>\r\n  <data name=\"private_constant_accessed\" xml:space=\"preserve\">\r\n    <value>Cannot access private constant {0}::{1} from context '{2}'</value>\r\n  </data>\r\n  <data name=\"undefined_property_when_access_overloaded\" xml:space=\"preserve\">\r\n    <value>Cannot access undefined property for object with overloaded property access</value>\r\n  </data>\r\n  <data name=\"sleep_must_return_array\" xml:space=\"preserve\">\r\n    <value>__sleep should return an array containing the names of instance-variables to serialize</value>\r\n  </data>\r\n  <data name=\"sleep_returned_bad_field\" xml:space=\"preserve\">\r\n    <value>'{0}' returned as member variable from __sleep() but does not exist</value>\r\n  </data>\r\n  <data name=\"tostring_must_return_string\" xml:space=\"preserve\">\r\n    <value>Method {0}::__toString() must return a string value</value>\r\n  </data>\r\n  <data name=\"clone_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Clone method {0}::__clone() cannot be static</value>\r\n  </data>\r\n  <data name=\"constructor_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Constructor {0}::{1}() cannot be static</value>\r\n  </data>\r\n  <data name=\"destructor_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Destructor {0}::{1}() cannot be static</value>\r\n  </data>\r\n  <data name=\"invalid_class_name\" xml:space=\"preserve\">\r\n    <value>Class name must be a valid object or a string</value>\r\n  </data>\r\n  <data name=\"invalid_method_name\" xml:space=\"preserve\">\r\n    <value>Method name must be a string</value>\r\n  </data>\r\n  <data name=\"abstract_method_called\" xml:space=\"preserve\">\r\n    <value>Cannot call abstract method {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"interface_instantiated\" xml:space=\"preserve\">\r\n    <value>Cannot instantiate interface '{0}'</value>\r\n  </data>\r\n  <data name=\"abstract_class_instantiated\" xml:space=\"preserve\">\r\n    <value>Cannot instantiate abstract class '{0}'</value>\r\n  </data>\r\n  <data name=\"constructor_less_type_instantiated\" xml:space=\"preserve\">\r\n    <value>Cannot instantiate class '{0}' because it has no visible constructor</value>\r\n  </data>\r\n  <data name=\"class_has_no_visible_ctor\" xml:space=\"preserve\">\r\n    <value>Class '{0}' has no visible constructor</value>\r\n  </data>\r\n  <data name=\"type_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare class/interface '{0}'</value>\r\n  </data>\r\n  <data name=\"function_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare function '{0}'</value>\r\n  </data>\r\n  <data name=\"constant_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare constant '{0}'</value>\r\n  </data>\r\n  <data name=\"class_not_found\" xml:space=\"preserve\">\r\n    <value>Class '{0}' not found</value>\r\n  </data>\r\n  <data name=\"ambiguous_name_match\" xml:space=\"preserve\">\r\n    <value>Ambiguous name: '{1}' and '{2}' are both imported as '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_type_match\" xml:space=\"preserve\">\r\n    <value>Ambiguous type name: '{1}' and '{2}' are both imported as '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_function_match\" xml:space=\"preserve\">\r\n    <value>Ambiguous function name: '{1}' and '{2}' are both imported as '{0}'</value>\r\n  </data>\r\n  <data name=\"ambiguous_constant_match\" xml:space=\"preserve\">\r\n    <value>Ambiguous constant name: '{1}' and '{2}' are both imported as '{0}'</value>\r\n  </data>\r\n  <data name=\"this_used_out_of_object\" xml:space=\"preserve\">\r\n    <value>Using $this when not in object context</value>\r\n  </data>\r\n  <data name=\"unserialize_callback_failed\" xml:space=\"preserve\">\r\n    <value>Function {0}() hasn't defined the class it was called for</value>\r\n  </data>\r\n  <data name=\"undefined_class_constant\" xml:space=\"preserve\">\r\n    <value>Undefined class constant '{0}::{1}'</value>\r\n  </data>\r\n  <data name=\"circular_constant_definition_global\" xml:space=\"preserve\">\r\n    <value>Circular constant definition involving global constant '{0}'</value>\r\n  </data>\r\n  <data name=\"circular_constant_definition_class\" xml:space=\"preserve\">\r\n    <value>Circular constant definition involving class constant '{0}::{1}'</value>\r\n  </data>\r\n  <data name=\"nonstatic_method_called_statically\" xml:space=\"preserve\">\r\n    <value>Non-static method {0}::{1}() should not be called statically</value>\r\n  </data>\r\n  <data name=\"self_accessed_out_of_class\" xml:space=\"preserve\">\r\n    <value>Cannot access self:: when no class scope is active</value>\r\n  </data>\r\n  <data name=\"parent_accessed_out_of_class\" xml:space=\"preserve\">\r\n    <value>Cannot access parent:: when no class scope is active</value>\r\n  </data>\r\n  <data name=\"parent_accessed_in_parentless_class\" xml:space=\"preserve\">\r\n    <value>Cannot access parent:: when current class scope has no parent</value>\r\n  </data>\r\n  <data name=\"undeclared_static_property_accessed\" xml:space=\"preserve\">\r\n    <value>Access to undeclared static property: {0}::${1}</value>\r\n  </data>\r\n  <data name=\"static_property_unset\" xml:space=\"preserve\">\r\n    <value>Attempt to unset static property {0}::${1}</value>\r\n  </data>\r\n  <data name=\"cannot_reassign_this\" xml:space=\"preserve\">\r\n    <value>Cannot re-assign $this</value>\r\n  </data>\r\n  <data name=\"incomparable_objects_compared\" xml:space=\"preserve\">\r\n    <value>Incomparable objects have been compared</value>\r\n  </data>\r\n  <data name=\"illegal_key_return_type\" xml:space=\"preserve\">\r\n    <value>Illegal type returned from {0}::key()</value>\r\n  </data>\r\n  <data name=\"dotdot_not_allowed_in_path\" xml:space=\"preserve\">\r\n    <value>No '..' components allowed in path</value>\r\n  </data>\r\n  <data name=\"path_contains_invalid_characters\" xml:space=\"preserve\">\r\n    <value>Path contains invalid characters</value>\r\n  </data>\r\n  <data name=\"generic_call_to_library_function\" xml:space=\"preserve\">\r\n    <value>Cannot use generic arguments when calling a library function</value>\r\n  </data>\r\n  <data name=\"generic_parameters_disallowed_on_ctor\" xml:space=\"preserve\">\r\n    <value>Generic parameters cannot be defined on constructor</value>\r\n  </data>\r\n  <data name=\"missing_entry_point\" xml:space=\"preserve\">\r\n    <value>Missing entry point; no static parameterless method or function '{0}' found</value>\r\n  </data>\r\n  <data name=\"entry_point_redefined\" xml:space=\"preserve\">\r\n    <value>Entry point has already been defined</value>\r\n  </data>\r\n  <data name=\"delegate_unrecognized_ctor_args\" xml:space=\"preserve\">\r\n    <value>Unrecognized constructor arguments were given to delegate '{0}'. Use \"function\", array($instance, \"method\"), or array(\"class\", \"method\")</value>\r\n  </data>\r\n  <data name=\"delegate_target_instance_missing\" xml:space=\"preserve\">\r\n    <value>Object instance must be given for non-static method '{1}::{2}' when creating delegate '{0}'. Use array($instance, \"{2}\")</value>\r\n  </data>\r\n  <data name=\"event_has_no_add_accessor\" xml:space=\"preserve\">\r\n    <value>Event '{0}::{1}' has no Add accessor method</value>\r\n  </data>\r\n  <data name=\"event_has_no_remove_accessor\" xml:space=\"preserve\">\r\n    <value>Event '{0}::{1}' has no Remove accessor method</value>\r\n  </data>\r\n  <data name=\"constant_value_neither_scalar_nor_null\" xml:space=\"preserve\">\r\n    <value>Cannot define value which is neither scalar nor NULL as a constant</value>\r\n  </data>\r\n  <data name=\"constant_redefined\" xml:space=\"preserve\">\r\n    <value>Attempt to redefine constant '{0}'</value>\r\n  </data>\r\n  <data name=\"undefined_variable\" xml:space=\"preserve\">\r\n    <value>Undefined variable: {0}</value>\r\n  </data>\r\n  <data name=\"undefined_constant\" xml:space=\"preserve\">\r\n    <value>Use of undefined constant {0} - assumed '{0}'</value>\r\n  </data>\r\n  <data name=\"object_used_as_array\" xml:space=\"preserve\">\r\n    <value>An object of type '{0}' used as an array</value>\r\n  </data>\r\n  <data name=\"string_used_as_array\" xml:space=\"preserve\">\r\n    <value>A string used as an array</value>\r\n  </data>\r\n  <data name=\"scalar_used_as_array\" xml:space=\"preserve\">\r\n    <value>A scalar of type '{0}' used as an array</value>\r\n  </data>\r\n  <data name=\"empty_used_as_array\" xml:space=\"preserve\">\r\n    <value>An empty variable used as an array</value>\r\n  </data>\r\n  <data name=\"array_used_as_object\" xml:space=\"preserve\">\r\n    <value>An array used as an object</value>\r\n  </data>\r\n  <data name=\"string_used_as_object\" xml:space=\"preserve\">\r\n    <value>A string used as an object</value>\r\n  </data>\r\n  <data name=\"scalar_used_as_object\" xml:space=\"preserve\">\r\n    <value>A scalar of type '{0}' used as an object</value>\r\n  </data>\r\n  <data name=\"empty_used_as_object\" xml:space=\"preserve\">\r\n    <value>An empty variable used as an object</value>\r\n  </data>\r\n  <data name=\"string_item_used_as_reference\" xml:space=\"preserve\">\r\n    <value>A string item used as a reference</value>\r\n  </data>\r\n  <data name=\"invalid_implicit_cast\" xml:space=\"preserve\">\r\n    <value>Cannot convert {0} to {1} implicitly in a call to function {2}()</value>\r\n  </data>\r\n  <data name=\"array_to_string_conversion\" xml:space=\"preserve\">\r\n    <value>Array to string conversion</value>\r\n  </data>\r\n  <data name=\"string_should_be_single_character\" xml:space=\"preserve\">\r\n    <value>String should consist of a single character</value>\r\n  </data>\r\n  <data name=\"function_not_supported\" xml:space=\"preserve\">\r\n    <value>Function is not supported</value>\r\n  </data>\r\n  <data name=\"undefined_function_called\" xml:space=\"preserve\">\r\n    <value>Call to undefined function: '{0}'</value>\r\n  </data>\r\n  <data name=\"undefined_external_function_called\" xml:space=\"preserve\">\r\n    <value>Call to undefined external function '{0}', extension '{1}' - check configuration</value>\r\n  </data>\r\n  <data name=\"no_function_context\" xml:space=\"preserve\">\r\n    <value>Called from the global scope - no function context</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_to_function\" xml:space=\"preserve\">\r\n    <value>Argument #{0} not passed to the function/method</value>\r\n  </data>\r\n  <data name=\"type_argument_not_passed_to_function\" xml:space=\"preserve\">\r\n    <value>Generic type argument #{0} not passed to the function/method</value>\r\n  </data>\r\n  <data name=\"invalid_callback\" xml:space=\"preserve\">\r\n    <value>Invalid callback</value>\r\n  </data>\r\n  <data name=\"invalid_argument\" xml:space=\"preserve\">\r\n    <value>Invalid argument '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_value\" xml:space=\"preserve\">\r\n    <value>Value '{1}' is invalid for argument '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_with_message\" xml:space=\"preserve\">\r\n    <value>Invalid argument: </value>\r\n  </data>\r\n  <data name=\"invalid_argument_count_for_function\" xml:space=\"preserve\">\r\n    <value>Invalid argument count in a call to the function '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count_for_method\" xml:space=\"preserve\">\r\n    <value>Invalid argument count in a call to the method '{0}::{1}'</value>\r\n  </data>\r\n  <data name=\"invalid_argument_count\" xml:space=\"preserve\">\r\n    <value>Invalid argument count</value>\r\n  </data>\r\n  <data name=\"invalid_argument_type\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' must be of type '{1}'</value>\r\n  </data>\r\n  <data name=\"argument_null\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' should not be NULL</value>\r\n  </data>\r\n  <data name=\"reference_null\" xml:space=\"preserve\">\r\n    <value>Argument '{0}' is passed by reference and hence should not be NULL</value>\r\n  </data>\r\n  <data name=\"noncallable_callback\" xml:space=\"preserve\">\r\n    <value>A callback '{0}' specified in the argument '{1}' is not callable</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_byref\" xml:space=\"preserve\">\r\n    <value>Argument #{0} should be passed by reference</value>\r\n  </data>\r\n  <data name=\"argument_not_passed_byref_to\" xml:space=\"preserve\">\r\n    <value>Argument #{0} should be passed to {1}() by reference</value>\r\n  </data>\r\n  <data name=\"missing_argument\" xml:space=\"preserve\">\r\n    <value>Missing argument #{0}</value>\r\n  </data>\r\n  <data name=\"missing_argument_for\" xml:space=\"preserve\">\r\n    <value>Missing argument #{0} for {1}()</value>\r\n  </data>\r\n  <data name=\"missing_type_argument\" xml:space=\"preserve\">\r\n    <value>Missing generic type argument #{0}</value>\r\n  </data>\r\n  <data name=\"missing_type_argument_for\" xml:space=\"preserve\">\r\n    <value>Missing generic type argument #{0} for {1}()</value>\r\n  </data>\r\n  <data name=\"parameter_must_be_byref\" xml:space=\"preserve\">\r\n    <value>Parameter '{0}' must be passed by reference</value>\r\n  </data>\r\n  <data name=\"argument_value_not_supported\" xml:space=\"preserve\">\r\n    <value>Value '{0}' of argument '{1}' is not supported</value>\r\n  </data>\r\n  <data name=\"too_many_type_arguments_in_type_use\" xml:space=\"preserve\">\r\n    <value>Use of type '{0}' requires at most {1} generic type arguments</value>\r\n  </data>\r\n  <data name=\"missing_type_argument_in_type_use\" xml:space=\"preserve\">\r\n    <value>Use of type '{0}' requires generic type parameter #{1} ('{2}') to be specified (no default type applicable)</value>\r\n  </data>\r\n  <data name=\"non_generic_type_used_with_type_arguments\" xml:space=\"preserve\">\r\n    <value>Type '{0}' cannot be used with generic type arguments</value>\r\n  </data>\r\n  <data name=\"incompatible_type_parameter_constraints_type\" xml:space=\"preserve\">\r\n    <value>Class/interface '{0}' is incompatible with the constraints imposed on the generic type argument #{1} ('{2}') by type '{3}'</value>\r\n  </data>\r\n  <data name=\"incompatible_type_parameter_constraints_method\" xml:space=\"preserve\">\r\n    <value>Class/interface '{0}' is incompatible with the constraints imposed on the generic type argument #{1} ('{2}') by method '{3}'</value>\r\n  </data>\r\n  <data name=\"operator_array_access_used_for_reading\" xml:space=\"preserve\">\r\n    <value>Cannot use [] for reading</value>\r\n  </data>\r\n  <data name=\"integer_key_reached_max_value\" xml:space=\"preserve\">\r\n    <value>Cannot add item to array - integer key reached maximal possible value (2^31-1)</value>\r\n  </data>\r\n  <data name=\"illegal_offset_type\" xml:space=\"preserve\">\r\n    <value>Illegal offset type</value>\r\n  </data>\r\n  <data name=\"undefined_offset\" xml:space=\"preserve\">\r\n    <value>Undefined offset ({0})</value>\r\n  </data>\r\n  <data name=\"illegal_string_offset\" xml:space=\"preserve\">\r\n    <value>Illegal string offset '{0}'</value>\r\n  </data>\r\n  <data name=\"uninitialized_string_offset\" xml:space=\"preserve\">\r\n    <value>String offset '{0}' hasn't been initialized</value>\r\n  </data>\r\n  <data name=\"unsupported_operand_types\" xml:space=\"preserve\">\r\n    <value>Unsupported operand types</value>\r\n  </data>\r\n  <data name=\"unsupported_operand_type\" xml:space=\"preserve\">\r\n    <value>Unsupported operand type</value>\r\n  </data>\r\n  <data name=\"cannot_unset_string_offsets\" xml:space=\"preserve\">\r\n    <value>Cannot unset string offsets</value>\r\n  </data>\r\n  <data name=\"invalid_exception_object\" xml:space=\"preserve\">\r\n    <value>Exceptions must be valid objects derived from the Exception base class</value>\r\n  </data>\r\n  <data name=\"offsetGet_must_return_byref\" xml:space=\"preserve\">\r\n    <value>Method offsetGet() of objects used with [] operator followed by increment, decrement, assignment to reference, or another [] operators must return by reference</value>\r\n  </data>\r\n  <data name=\"division_by_zero\" xml:space=\"preserve\">\r\n    <value>Division by zero</value>\r\n  </data>\r\n  <data name=\"invalid_query_source\" xml:space=\"preserve\">\r\n    <value>Invalid query source</value>\r\n  </data>\r\n  <data name=\"invalid_stream_resource\" xml:space=\"preserve\">\r\n    <value>Supplied resource is not a valid Stream resource</value>\r\n  </data>\r\n  <data name=\"invalid_socket_stream_resource\" xml:space=\"preserve\">\r\n    <value>Supplied resource is not a valid Socket Stream resource</value>\r\n  </data>\r\n  <data name=\"context_expected\" xml:space=\"preserve\">\r\n    <value>Supplied resource is not a valid Stream-Context resource</value>\r\n  </data>\r\n  <data name=\"wrapper_op_unsupported\" xml:space=\"preserve\">\r\n    <value>{0} operation is not supported by this stream wrapper</value>\r\n  </data>\r\n  <data name=\"stream_read_io_error\" xml:space=\"preserve\">\r\n    <value>An I/O error occured when reading from stream: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_io_error\" xml:space=\"preserve\">\r\n    <value>An I/O error occured when writing to stream: {0}</value>\r\n  </data>\r\n  <data name=\"stream_read_error\" xml:space=\"preserve\">\r\n    <value>An error occured when reading from stream: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_error\" xml:space=\"preserve\">\r\n    <value>An error occured when writing to stream: {0}</value>\r\n  </data>\r\n  <data name=\"stream_write_failed\" xml:space=\"preserve\">\r\n    <value>Unable to write to stream (only {0} bytes of {1} written)</value>\r\n  </data>\r\n  <data name=\"stream_read_off\" xml:space=\"preserve\">\r\n    <value>The stream was not opened for reading</value>\r\n  </data>\r\n  <data name=\"stream_write_off\" xml:space=\"preserve\">\r\n    <value>The stream was not opened for writing</value>\r\n  </data>\r\n  <data name=\"stream_bad_wrapper\" xml:space=\"preserve\">\r\n    <value>Unable to find the wrapper '{0}' - did you forget to enable it when you configured PHP?</value>\r\n  </data>\r\n  <data name=\"url_fopen_disabled\" xml:space=\"preserve\">\r\n    <value>URL file-access is disabled in the server configuration</value>\r\n  </data>\r\n  <data name=\"stream_bad_filename\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}): The specified file does not exist</value>\r\n  </data>\r\n  <data name=\"stream_bad_directory\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}): The specified directory does not exist</value>\r\n  </data>\r\n  <data name=\"stream_open_read_unsupported\" xml:space=\"preserve\">\r\n    <value>Unable to open {0} for reading</value>\r\n  </data>\r\n  <data name=\"stream_open_write_unsupported\" xml:space=\"preserve\">\r\n    <value>Unable to open {0} for writing</value>\r\n  </data>\r\n  <data name=\"ambiguous_file_mode\" xml:space=\"preserve\">\r\n    <value>Ambiguous file access mode (binary mode assumed). Specify either '{0}b' or '{0}t' or set Phalanger configuration option DefaultFileOpenMode in file-system section of .config file.</value>\r\n  </data>\r\n  <data name=\"empty_file_mode\" xml:space=\"preserve\">\r\n    <value>Supplied file access mode is empty</value>\r\n  </data>\r\n  <data name=\"invalid_file_mode\" xml:space=\"preserve\">\r\n    <value>Supplied file access mode ({0}) is not valid</value>\r\n  </data>\r\n  <data name=\"url_resource_missing\" xml:space=\"preserve\">\r\n    <value>No URL resource specified</value>\r\n  </data>\r\n  <data name=\"open_basedir_effect\" xml:space=\"preserve\">\r\n    <value>AllowedPathPrefixes restriction in effect. File({0}) is not within the allowed path(s): ({1})</value>\r\n  </data>\r\n  <data name=\"invalid_filter_name\" xml:space=\"preserve\">\r\n    <value>Unable to create filter ({0})</value>\r\n  </data>\r\n  <data name=\"stream_filename_invalid\" xml:space=\"preserve\">\r\n    <value>Unable to access ({0}): The filename is invalid</value>\r\n  </data>\r\n  <data name=\"stream_file_access_denied\" xml:space=\"preserve\">\r\n    <value>Unable to access ({0}): Permission denied</value>\r\n  </data>\r\n  <data name=\"stream_file_invalid\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}): The specified filename is invalid</value>\r\n  </data>\r\n  <data name=\"stream_url_invalid\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}): The specified URL is invalid</value>\r\n  </data>\r\n  <data name=\"stream_url_method_invalid\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}): The specified request method is invalid</value>\r\n  </data>\r\n  <data name=\"stream_file_io_error\" xml:space=\"preserve\">\r\n    <value>Failed to open stream ({0}) due to I/O error: {1}</value>\r\n  </data>\r\n  <data name=\"stream_file_not_exists\" xml:space=\"preserve\">\r\n    <value>The specified file does not exist ({0})</value>\r\n  </data>\r\n  <data name=\"stream_directory_not_exists\" xml:space=\"preserve\">\r\n    <value>The specified directory does not exist ({0})</value>\r\n  </data>\r\n  <data name=\"stream_path_not_exists\" xml:space=\"preserve\">\r\n    <value>The specified path does not exist ({0})</value>\r\n  </data>\r\n  <data name=\"stream_file_exists\" xml:space=\"preserve\">\r\n    <value>The specified file already exists ({0})</value>\r\n  </data>\r\n  <data name=\"stream_stat_invalid_path\" xml:space=\"preserve\">\r\n    <value>Failed to stat ({0}) - invalid filename</value>\r\n  </data>\r\n  <data name=\"stream_unlink_file_not_found\" xml:space=\"preserve\">\r\n    <value>Can not unlink file ({0}): The specified filename is invalid</value>\r\n  </data>\r\n  <data name=\"stream_unlink_io_error\" xml:space=\"preserve\">\r\n    <value>Can not unlink file ({0}) due to I/O error: {1}</value>\r\n  </data>\r\n  <data name=\"stream_unlink_error\" xml:space=\"preserve\">\r\n    <value>Can not unlink file ({0}): unexpected error</value>\r\n  </data>\r\n  <data name=\"stream_rmdir_io_error\" xml:space=\"preserve\">\r\n    <value>Can not remove directory ({0}): directory not empty</value>\r\n  </data>\r\n  <data name=\"stream_rename_file_exists\" xml:space=\"preserve\">\r\n    <value>Can not rename '{0}' to '{1}': target file exists</value>\r\n  </data>\r\n  <data name=\"stream_error\" xml:space=\"preserve\">\r\n    <value>Can not access resource ({0}): {1}</value>\r\n  </data>\r\n  <data name=\"stream_socket_error\" xml:space=\"preserve\">\r\n    <value>Socket error: {0}</value>\r\n  </data>\r\n  <data name=\"stream_directory_access_denied\" xml:space=\"preserve\">\r\n    <value>Unable to make directory ({0}): Permission denied</value>\r\n  </data>\r\n  <data name=\"stream_directory_error\" xml:space=\"preserve\">\r\n    <value>Unable to make directory ({0}): Directory not empty or read-only</value>\r\n  </data>\r\n  <data name=\"stream_directory_make_root\" xml:space=\"preserve\">\r\n    <value>Unable to make directory ({0}): Can not create root directory</value>\r\n  </data>\r\n  <data name=\"stream_directory_make_parent\" xml:space=\"preserve\">\r\n    <value>Unable to make directory ({0}): Use recursive mode to create more than one directory at a time</value>\r\n  </data>\r\n  <data name=\"path_argument_empty\" xml:space=\"preserve\">\r\n    <value>Path argument can not be empty</value>\r\n  </data>\r\n  <data name=\"stream_seek_filtered\" xml:space=\"preserve\">\r\n    <value>Seeking in a {0} stream! It may lead to unpredictable results.</value>\r\n  </data>\r\n  <data name=\"error_message_html_debug\" xml:space=\"preserve\">\r\n    <value>&lt;br/&gt;\r\n&lt;b&gt;{0}&lt;/b&gt;: {1}{2} in &lt;b&gt;{3}&lt;/b&gt; on line &lt;b&gt;{4}&lt;/b&gt;, column &lt;b&gt;{5}&lt;/b&gt;.&lt;br/&gt;\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_plain_debug\" xml:space=\"preserve\">\r\n    <value>\r\n{0}: {1}{2} in {3} on line {4}, column {5}.\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_html\" xml:space=\"preserve\">\r\n    <value>&lt;br/&gt;\r\n&lt;b&gt;{0}&lt;/b&gt;: {1}{2}.&lt;br/&gt;\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_plain\" xml:space=\"preserve\">\r\n    <value>\r\n{0}: {1}{2}.\r\n</value>\r\n  </data>\r\n  <data name=\"error_message_html_eval_debug\" xml:space=\"preserve\">\r\n    <value>inside {0} (on line &lt;b&gt;{1}&lt;/b&gt;, column &lt;b&gt;{2}&lt;/b&gt;)</value>\r\n  </data>\r\n  <data name=\"error_message_plain_eval_debug\" xml:space=\"preserve\">\r\n    <value>inside {0} (on line {1}, column {2})</value>\r\n  </data>\r\n  <data name=\"error_message_html_eval\" xml:space=\"preserve\">\r\n    <value>{0} inside {1}</value>\r\n  </data>\r\n  <data name=\"error_message_plain_eval\" xml:space=\"preserve\">\r\n    <value>{0} inside {1}</value>\r\n  </data>\r\n  <data name=\"extensions_not_installed\" xml:space=\"preserve\">\r\n    <value>Native PHP extensions are not installed or properly configured</value>\r\n  </data>\r\n  <data name=\"extensions_not_installed_in_invoke\" xml:space=\"preserve\">\r\n    <value>Call to undefined external function '{0}', extension '{1}' - native PHP extensions are not installed or properly configured</value>\r\n  </data>\r\n  <data name=\"buffering_level_decreased_under_zero\" xml:space=\"preserve\">\r\n    <value>Buffering level couldn't be decresed below zero</value>\r\n  </data>\r\n  <data name=\"output_buffering_disabled\" xml:space=\"preserve\">\r\n    <value>Output buffering is disabled</value>\r\n  </data>\r\n  <data name=\"invalid_foreach_argument\" xml:space=\"preserve\">\r\n    <value>Invalid argument supplied for foreach statement</value>\r\n  </data>\r\n  <data name=\"incomparable_arrays_compared\" xml:space=\"preserve\">\r\n    <value>Arrays which are incomparable have been compared.</value>\r\n  </data>\r\n  <data name=\"lengths_are_different\" xml:space=\"preserve\">\r\n    <value>The number of items in {0} should be the same as in {1}</value>\r\n  </data>\r\n  <data name=\"assertion_failed\" xml:space=\"preserve\">\r\n    <value>Assertion '{0}' failed</value>\r\n  </data>\r\n  <data name=\"multiple_statements_in_assertion\" xml:space=\"preserve\">\r\n    <value>Assertion contains multiple statements but only the first one is relevant</value>\r\n  </data>\r\n  <data name=\"invalid_break_level_count\" xml:space=\"preserve\">\r\n    <value>Cannot break/continue {0} level(s)</value>\r\n  </data>\r\n  <data name=\"could_not_load_extension\" xml:space=\"preserve\">\r\n    <value>Could not load extension: </value>\r\n  </data>\r\n  <data name=\"unable_to_find_extension\" xml:space=\"preserve\">\r\n    <value>Unable to find extension '{0}'</value>\r\n  </data>\r\n  <data name=\"web_server_not_available\" xml:space=\"preserve\">\r\n    <value>Web server context is not available.</value>\r\n  </data>\r\n  <data name=\"script_inclusion_failed\" xml:space=\"preserve\">\r\n    <value>Script '{0}' inclusion failed. Cause: {1} Search paths: include_path is '{2}', working directory is '{3}' </value>\r\n  </data>\r\n  <data name=\"assembly_script_inclusion_failed\" xml:space=\"preserve\">\r\n    <value>Script '{0}' inclusion failed. Script not found in the application's script libraries</value>\r\n  </data>\r\n  <data name=\"function_needs_variables\" xml:space=\"preserve\">\r\n    <value>Function needs a table of defined variables</value>\r\n  </data>\r\n  <data name=\"execution_timed_out\" xml:space=\"preserve\">\r\n    <value>Maximum execution time of {0} seconds exceeded</value>\r\n  </data>\r\n  <data name=\"generating_assembly\" xml:space=\"preserve\">\r\n    <value>Generating assembly ...</value>\r\n  </data>\r\n  <data name=\"info_directive\" xml:space=\"preserve\">\r\n    <value>Directive</value>\r\n  </data>\r\n  <data name=\"info_script_dependent\" xml:space=\"preserve\">\r\n    <value>Script Dependent</value>\r\n  </data>\r\n  <data name=\"info_shared\" xml:space=\"preserve\">\r\n    <value>Shared</value>\r\n  </data>\r\n  <data name=\"info_script_value\" xml:space=\"preserve\">\r\n    <value>Script's Value</value>\r\n  </data>\r\n  <data name=\"info_master_value\" xml:space=\"preserve\">\r\n    <value>Master Value</value>\r\n  </data>\r\n  <data name=\"info_value\" xml:space=\"preserve\">\r\n    <value>Value</value>\r\n  </data>\r\n  <data name=\"info_variable\" xml:space=\"preserve\">\r\n    <value>Variable</value>\r\n  </data>\r\n  <data name=\"info_config\" xml:space=\"preserve\">\r\n    <value>Configuration</value>\r\n  </data>\r\n  <data name=\"info_credits\" xml:space=\"preserve\">\r\n    <value>Credits</value>\r\n  </data>\r\n  <data name=\"info_loaded_extensions\" xml:space=\"preserve\">\r\n    <value>Loaded Native Extensions</value>\r\n  </data>\r\n  <data name=\"info_environment_variables\" xml:space=\"preserve\">\r\n    <value>Environment</value>\r\n  </data>\r\n  <data name=\"info_global_variables\" xml:space=\"preserve\">\r\n    <value>Global Variables</value>\r\n  </data>\r\n  <data name=\"info_license\" xml:space=\"preserve\">\r\n    <value>License</value>\r\n  </data>\r\n  <data name=\"info_license_text\" xml:space=\"preserve\">\r\n    <value>\r\n    &lt;p align='justify'&gt;\r\n      This program can be used and distributed only under the terms of the license included in the distribution in the file License.txt and also published on\r\n      &lt;a href=\"http://phalanger.codeplex.com/license\"&gt;http://phalanger.codeplex.com/license&lt;/a&gt;.\r\n    &lt;/p&gt;\r\n    &lt;p align='justify'&gt;\r\n      The software is licensed \"as-is\". You bear the risk of using it. The Licensor\r\ngives no express warranties, guarantees or conditions. You may have additional\r\nconsumer rights under your local laws which this license cannot change. To the\r\nextent permitted under your local laws, the Licensor excludes the implied\r\nwarranties of merchantability, fitness for a particular purpose and\r\nnon-infringement.\r\n    &lt;/p&gt;\r\n    </value>\r\n  </data>\r\n  <data name=\"credits_overall_concept\" xml:space=\"preserve\">\r\n    <value>Overall Concept</value>\r\n  </data>\r\n  <data name=\"credits_specific_features_compilation\" xml:space=\"preserve\">\r\n    <value>Specific PHP Language Features Compilation</value>\r\n  </data>\r\n  <data name=\"credits_oo_features_compilation\" xml:space=\"preserve\">\r\n    <value>Object Oriented PHP Language Features Compilation</value>\r\n  </data>\r\n  <data name=\"credits_php_clr\" xml:space=\"preserve\">\r\n    <value>PHP/CLR Language Extensions</value>\r\n  </data>\r\n  <data name=\"credits_overall_compiler_design\" xml:space=\"preserve\">\r\n    <value>Overall Compiler Design</value>\r\n  </data>\r\n  <data name=\"credits_code_analysis\" xml:space=\"preserve\">\r\n    <value>Code Analysis</value>\r\n  </data>\r\n  <data name=\"credits_extmgr_wrappers\" xml:space=\"preserve\">\r\n    <value>Extensions Manager and Wrappers</value>\r\n  </data>\r\n  <data name=\"credits_ast\" xml:space=\"preserve\">\r\n    <value>Abstract Syntax Tree</value>\r\n  </data>\r\n  <data name=\"credits_compiler_tables\" xml:space=\"preserve\">\r\n    <value>Compiler's Tables</value>\r\n  </data>\r\n  <data name=\"credits_code_generator\" xml:space=\"preserve\">\r\n    <value>Code Generator</value>\r\n  </data>\r\n  <data name=\"credits_configuration\" xml:space=\"preserve\">\r\n    <value>Configuration</value>\r\n  </data>\r\n  <data name=\"credits_aspnet\" xml:space=\"preserve\">\r\n    <value>ASP.NET Integration, CodeDom</value>\r\n  </data>\r\n  <data name=\"credits_automatic_tests\" xml:space=\"preserve\">\r\n    <value>Automatic Tests</value>\r\n  </data>\r\n  <data name=\"credits_core_functionality\" xml:space=\"preserve\">\r\n    <value>Core Functionality</value>\r\n  </data>\r\n  <data name=\"credits_lexical_syntactic_analysis\" xml:space=\"preserve\">\r\n    <value>Lexical and Syntactic Analysis</value>\r\n  </data>\r\n  <data name=\"credits_semantic_analysis\" xml:space=\"preserve\">\r\n    <value>Semantic Analysis</value>\r\n  </data>\r\n  <data name=\"credits_code_generation\" xml:space=\"preserve\">\r\n    <value>Code Generation</value>\r\n  </data>\r\n  <data name=\"credits_clr_features\" xml:space=\"preserve\">\r\n    <value>CLR Features Integration</value>\r\n  </data>\r\n  <data name=\"credits_extensions_management\" xml:space=\"preserve\">\r\n    <value>Extensions Management</value>\r\n  </data>\r\n  <data name=\"credits_vsnet\" xml:space=\"preserve\">\r\n    <value>VS.NET Integration</value>\r\n  </data>\r\n  <data name=\"credits_streams\" xml:space=\"preserve\">\r\n    <value>Streams, IO Wrappers, and Filters</value>\r\n  </data>\r\n  <data name=\"credits_interactive_tests\" xml:space=\"preserve\">\r\n    <value>Interactive Tests</value>\r\n  </data>\r\n  <data name=\"credits_automatic_tester\" xml:space=\"preserve\">\r\n    <value>Automatic Tester</value>\r\n  </data>\r\n  <data name=\"credits_utilities\" xml:space=\"preserve\">\r\n    <value>Utilities</value>\r\n  </data>\r\n  <data name=\"credits_installation\" xml:space=\"preserve\">\r\n    <value>Installation</value>\r\n  </data>\r\n  <data name=\"credits_implementation\" xml:space=\"preserve\">\r\n    <value>Implementation</value>\r\n  </data>\r\n  <data name=\"credits_design\" xml:space=\"preserve\">\r\n    <value>Design</value>\r\n  </data>\r\n  <data name=\"credits_authors\" xml:space=\"preserve\">\r\n    <value>Authors</value>\r\n  </data>\r\n  <data name=\"credits_contribution\" xml:space=\"preserve\">\r\n    <value>Contribution</value>\r\n  </data>\r\n  <data name=\"property_declared_abstract\" xml:space=\"preserve\">\r\n    <value>Properties cannot be declared abstract</value>\r\n  </data>\r\n  <data name=\"property_declared_final\" xml:space=\"preserve\">\r\n    <value>Properties cannot be declared final</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared\" xml:space=\"preserve\">\r\n    <value>Declaration of {0} {1} will issue a run-time error if executed since the {0} will already be declared here</value>\r\n  </data>\r\n  <data name=\"conditionally_redeclared_by_inclusion\" xml:space=\"preserve\">\r\n    <value>Inclusion will issue a run-time error if executed - a redeclaration of {0} {1}</value>\r\n  </data>\r\n  <data name=\"redeclared_previous_decl\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare {0} '{1}' previously declared in {2}{3}</value>\r\n  </data>\r\n  <data name=\"redeclared_previous_decl_include\" xml:space=\"preserve\">\r\n    <value>Inclusion of '{2}{3}' redeclares {0} '{1}' declared in {2}{3}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_runtime\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare class/interface {0}</value>\r\n  </data>\r\n  <data name=\"class_redeclared_runtime_include\" xml:space=\"preserve\">\r\n    <value>Inclusion redeclares class/interface {0}</value>\r\n  </data>\r\n  <data name=\"library_class_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare library class/interface {0}</value>\r\n  </data>\r\n  <data name=\"library_class_redeclared_by_inclusion\" xml:space=\"preserve\">\r\n    <value>Inclusion will issue a run-time error if executed as it redeclares library class/interface {0}</value>\r\n  </data>\r\n  <data name=\"method_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare method {0}::{1}</value>\r\n  </data>\r\n  <data name=\"property_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare property {0}::${1}</value>\r\n  </data>\r\n  <data name=\"cannot_use_reserved_name\" xml:space=\"preserve\">\r\n    <value>Name '{0}' is reserved and cannot be used here</value>\r\n  </data>\r\n  <data name=\"non_interface_implemented\" xml:space=\"preserve\">\r\n    <value>Cannot implement '{0}' because it is not an interface</value>\r\n  </data>\r\n  <data name=\"non_interface_extended\" xml:space=\"preserve\">\r\n    <value>Cannot extend '{0}' because it is not an interface</value>\r\n  </data>\r\n  <data name=\"non_class_extended\" xml:space=\"preserve\">\r\n    <value>Cannot extend '{0}' because it is not a class</value>\r\n  </data>\r\n  <data name=\"final_class_extended\" xml:space=\"preserve\">\r\n    <value>Cannot inherit from final class '{0}'</value>\r\n  </data>\r\n  <data name=\"abstract_final_method_declared\" xml:space=\"preserve\">\r\n    <value>Abstract method cannot be declared final</value>\r\n  </data>\r\n  <data name=\"abstract_private_method_declared\" xml:space=\"preserve\">\r\n    <value>Abstract method cannot be declared private</value>\r\n  </data>\r\n  <data name=\"clone_cannot_take_arguments\" xml:space=\"preserve\">\r\n    <value>Clone method {0}::__clone() cannot accept any arguments</value>\r\n  </data>\r\n  <data name=\"destruct_cannot_take_arguments\" xml:space=\"preserve\">\r\n    <value>Destructor {0}::__destruct() cannot take arguments</value>\r\n  </data>\r\n  <data name=\"destruct_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Destructor {0}::__destruct() cannot be static</value>\r\n  </data>\r\n  <data name=\"construct_cannot_be_static\" xml:space=\"preserve\">\r\n    <value>Constructor {0}::{1}() cannot be static</value>\r\n  </data>\r\n  <data name=\"interface_method_non_public\" xml:space=\"preserve\">\r\n    <value>Access type for interface method {0}::{1}() must be omitted or declared public</value>\r\n  </data>\r\n  <data name=\"override_final_method\" xml:space=\"preserve\">\r\n    <value>Cannot override final method {0}::{1}()</value>\r\n  </data>\r\n  <data name=\"make_static_method_non_static\" xml:space=\"preserve\">\r\n    <value>Cannot make static method {0}::{1}() non-static in class '{2}'</value>\r\n  </data>\r\n  <data name=\"make_nonstatic_method_static\" xml:space=\"preserve\">\r\n    <value>Cannot make non-static method {0}::{1}() static in class '{2}'</value>\r\n  </data>\r\n  <data name=\"nonabstract_method_overridden_with_abstract\" xml:space=\"preserve\">\r\n    <value>Cannot make non-abstract method {0}::{1}() abstract in class '{2}'</value>\r\n  </data>\r\n  <data name=\"overriding_method_restrict_visibility\" xml:space=\"preserve\">\r\n    <value>{0}::{1}() must be at least as visible as '{2}' specified in class/interface '{3}'</value>\r\n  </data>\r\n  <data name=\"make_static_property_nonstatic\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare static property {0}::${1} as non static {2}::${1} (static declared in '{3}')</value>\r\n  </data>\r\n  <data name=\"make_nonstatic_property_static\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare non-static property {0}::${1} as static {2}::${1} (non-static declared in '{3}')</value>\r\n  </data>\r\n  <data name=\"overriding_property_restrict_visibility\" xml:space=\"preserve\">\r\n    <value>{0}::${1} must be at least as visible as '{2}' specified in class/interface '{3}'</value>\r\n  </data>\r\n  <data name=\"overriding_static_field_with_static\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare property static '{3}' {0}::${1} in class '{2}' (previously declared in '{4}')</value>\r\n  </data>\r\n  <data name=\"overriding_interface_constant\" xml:space=\"preserve\">\r\n    <value>Cannot override constant '{0}' defined in interface '{1}'</value>\r\n  </data>\r\n  <data name=\"inheriting_previously_inherited_constant\" xml:space=\"preserve\">\r\n    <value>Cannot inherit constant {0}::{1} previously declared in interface '{2}'</value>\r\n  </data>\r\n  <data name=\"redeclaring_inherited_constant\" xml:space=\"preserve\">\r\n    <value>Cannot declare inherited constant '{0}' from interface '{1}' in class/interface '{2}'</value>\r\n  </data>\r\n  <data name=\"overriding_protected_static_with_init_value\" xml:space=\"preserve\">\r\n    <value>Cannot change initial value of property static protected {0}::${1} in class '{2}' (previously declared in {3})</value>\r\n  </data>\r\n  <data name=\"class_redeclared_in_assembly\" xml:space=\"preserve\">\r\n    <value>A class or an interface '{0}' is redeclared in the assembly scope</value>\r\n  </data>\r\n  <data name=\"method_not_compatible\" xml:space=\"preserve\">\r\n    <value>Declaration of {0}::{1}() must be compatible with that of {2}::{1}()</value>\r\n  </data>\r\n  <data name=\"abstract_method_not_implemented\" xml:space=\"preserve\">\r\n    <value>Class '{0}' doesn't implement abstract method {1}::{2}()</value>\r\n  </data>\r\n  <data name=\"abstract_property_not_implemented\" xml:space=\"preserve\">\r\n    <value>Class '{0}' doesn't implement abstract property {1}::${2}</value>\r\n  </data>\r\n  <data name=\"extension_loading_error\" xml:space=\"preserve\">\r\n    <value>Error while loading library (extension) classes: </value>\r\n  </data>\r\n  <data name=\"library_func_redeclared\" xml:space=\"preserve\">\r\n    <value>Cannot redeclare library function '{0}'</value>\r\n  </data>\r\n  <data name=\"nonabstract_bodyless_method\" xml:space=\"preserve\">\r\n    <value>Non-abstract method {0}::{1}() must contain body</value>\r\n  </data>\r\n  <data name=\"abstract_bodyful_method\" xml:space=\"preserve\">\r\n    <value>Abstract method {0}::{1}() cannot contain body</value>\r\n  </data>\r\n  <data name=\"interface_bodyful_method\" xml:space=\"preserve\">\r\n    <value>Interface method {0}::{1}() cannot contain body</value>\r\n  </data>\r\n  <data name=\"abstract_method_name_not_matching_implementation\" xml:space=\"preserve\">\r\n    <value>Names of the abstract method {0}::{1}() and its implementation {2}::{3}() must be the same (case sensitively) in the current version of Phalanger</value>\r\n  </data>\r\n  <data name=\"conflicting_type_aliases\" xml:space=\"preserve\">\r\n    <value>Type '{0}' has already been imported</value>\r\n  </data>\r\n  <data name=\"conflicting_function_aliases\" xml:space=\"preserve\">\r\n    <value>Function '{0}' has already been imported</value>\r\n  </data>\r\n  <data name=\"conflicting_constant_aliases\" xml:space=\"preserve\">\r\n    <value>Constant '{0}' has already been imported</value>\r\n  </data>\r\n  <data name=\"expecting_parent_ctor_invocation\" xml:space=\"preserve\">\r\n    <value>Expecting parent constructor call</value>\r\n  </data>\r\n  <data name=\"unexpected_parent_ctor_invocation\" xml:space=\"preserve\">\r\n    <value>Unexpected parent constructor call (such call is allowed only in the constructor of the class extending a CLR type)</value>\r\n  </data>\r\n  <data name=\"missing_ctor_in_clr_subclass\" xml:space=\"preserve\">\r\n    <value>Missing constructor - class '{0}' extends a CLR type without a default constructor and therefore must implement a constructor</value>\r\n  </data>\r\n  <data name=\"missing_imported_entity\" xml:space=\"preserve\">\r\n    <value>Expecting kind of imported subject (specify one of 'namespace', 'class', 'interface', 'function', 'const')</value>\r\n  </data>\r\n  <data name=\"duplicate_parameter_name\" xml:space=\"preserve\">\r\n    <value>Duplicate parameter name '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_escape_sequence_length\" xml:space=\"preserve\">\r\n    <value>Escape sequence '{0}' requires exactly {1} hexadecimal digits</value>\r\n  </data>\r\n  <data name=\"invalid_code_point\" xml:space=\"preserve\">\r\n    <value>Value '{0}' doesn't encode a valid Unicode character</value>\r\n  </data>\r\n  <data name=\"invalid_code_point_name\" xml:space=\"preserve\">\r\n    <value>Value '{0}' doesn't encode a valid Unicode character name</value>\r\n  </data>\r\n  <data name=\"inclusion_in_pure_unit\" xml:space=\"preserve\">\r\n    <value>Inclusions are not allowed in the pure unit.</value>\r\n  </data>\r\n  <data name=\"invalid_line_pragma\" xml:space=\"preserve\">\r\n    <value>Line pragma has an invalid value</value>\r\n  </data>\r\n  <data name=\"global_code_in_pure_unit\" xml:space=\"preserve\">\r\n    <value>Global code is not allowed in the pure unit.</value>\r\n  </data>\r\n  <data name=\"construct_not_supported\" xml:space=\"preserve\">\r\n    <value>The '{0}' construct is not supported</value>\r\n  </data>\r\n  <data name=\"key_alias\" xml:space=\"preserve\">\r\n    <value>Key element cannot be a reference</value>\r\n  </data>\r\n  <data name=\"multiple_visibility_modifiers\" xml:space=\"preserve\">\r\n    <value>Multiple access type modifiers are not allowed</value>\r\n  </data>\r\n  <data name=\"invalid_interface_modifier\" xml:space=\"preserve\">\r\n    <value>Modifier cannot be applied on the interface</value>\r\n  </data>\r\n  <data name=\"generic_parameter_must_be_type\" xml:space=\"preserve\">\r\n    <value>Generic parameter must refer to a type in this context</value>\r\n  </data>\r\n  <data name=\"generic_parameter_is_reserved_identifier\" xml:space=\"preserve\">\r\n    <value>Generic type parameter must be an identifier different from 'self' and 'parent' in this context</value>\r\n  </data>\r\n  <data name=\"duplicate_generic_parameter\" xml:space=\"preserve\">\r\n    <value>Duplicate generic type parameter</value>\r\n  </data>\r\n  <data name=\"generic_parameter_collides_with_declarer\" xml:space=\"preserve\">\r\n    <value>Generic type parameter '{0}' has the same name as the containing class/interface</value>\r\n  </data>\r\n  <data name=\"cannot_derive_from_type_parameter\" xml:space=\"preserve\">\r\n    <value>Cannot derive from '{0}' because it is a generic type parameter</value>\r\n  </data>\r\n  <data name=\"private_class_in_global_ns\" xml:space=\"preserve\">\r\n    <value>Cannot declare a private class in the global namespace</value>\r\n  </data>\r\n  <data name=\"missing_partial_modifier\" xml:space=\"preserve\">\r\n    <value>Missing 'partial' modifier on declaration of class/interface '{0}' - another partial declaration of this type exists</value>\r\n  </data>\r\n  <data name=\"partial_transient_declaration\" xml:space=\"preserve\">\r\n    <value>The 'partial' modifier cannot be used in an evaluated code</value>\r\n  </data>\r\n  <data name=\"partial_conditional_declaration\" xml:space=\"preserve\">\r\n    <value>The 'partial' modifier cannot be used on a conditional declaration</value>\r\n  </data>\r\n  <data name=\"partial_impure_declaration\" xml:space=\"preserve\">\r\n    <value>The 'partial' modifier can be used only in pure unit</value>\r\n  </data>\r\n  <data name=\"incompatible_partial_declarations\" xml:space=\"preserve\">\r\n    <value>Partial declarations of '{0}' must be all classes or all interfaces</value>\r\n  </data>\r\n  <data name=\"conflicting_partial_visibility\" xml:space=\"preserve\">\r\n    <value>All partial declarations of '{0}' must have the same visibility</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_base\" xml:space=\"preserve\">\r\n    <value>All partial declarations of '{0}' must not specify different base classes</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_type_parameter\" xml:space=\"preserve\">\r\n    <value>All partial declarations of '{0}' must have the same type parameter definitions</value>\r\n  </data>\r\n  <data name=\"partial_declarations_differ_in_type_parameter_count\" xml:space=\"preserve\">\r\n    <value>All partial declarations of '{0}' must have the same number of type parameters</value>\r\n  </data>\r\n  <data name=\"unknown_custom_attribute\" xml:space=\"preserve\">\r\n    <value>Unknown custom attribute; neither of types '{0}' and '{1}' exists</value>\r\n  </data>\r\n  <data name=\"not_custom_attribute_class\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a custom attribute class</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_usage\" xml:space=\"preserve\">\r\n    <value>Invalid use of attribute '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_target_selector\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a valid attribute target selector (specify one of 'return', 'assembly', 'module')</value>\r\n  </data>\r\n  <data name=\"invalid_attribute_expression\" xml:space=\"preserve\">\r\n    <value>An attribute argument must be a constant expression</value>\r\n  </data>\r\n  <data name=\"duplicate_attribute_usage\" xml:space=\"preserve\">\r\n    <value>Duplicate attribute '{0}'</value>\r\n  </data>\r\n  <data name=\"out_attribute_on_byval_param\" xml:space=\"preserve\">\r\n    <value>Attribute 'Out' can be used only on parameters passed by reference; add '&amp;' modifier to the parameter '${0}'</value>\r\n  </data>\r\n  <data name=\"export_attribute_in_non_pure\" xml:space=\"preserve\">\r\n    <value>Attribute 'Export' can be used only in pure unit</value>\r\n  </data>\r\n  <data name=\"class_behavior_may_be_unexpected\" xml:space=\"preserve\">\r\n    <value>Use of the class '{0}' in PHP code is not recommended as the resulting effect will probably be different than expected</value>\r\n  </data>\r\n  <data name=\"dll_import_body_ignored\" xml:space=\"preserve\">\r\n    <value>Body of function decorated with the DllImportAttribute is ignored. System provides this body.</value>\r\n  </data>\r\n  <data name=\"syntax_error\" xml:space=\"preserve\">\r\n    <value>Syntax error: {0}</value>\r\n  </data>\r\n  <data name=\"unexpected_token\" xml:space=\"preserve\">\r\n    <value>unexpected token '{0}'</value>\r\n  </data>\r\n  <data name=\"act_param_with_ampersand\" xml:space=\"preserve\">\r\n    <value>'&amp;' modifier ignored in the function call, use '&amp;' modifier in function declaration to pass the argument by reference</value>\r\n  </data>\r\n  <data name=\"semicolon_ignored\" xml:space=\"preserve\">\r\n    <value>Semicolon ignored, using it in this context is possible in PHP 5, but depracated in PHP.NET</value>\r\n  </data>\r\n  <data name=\"unterminated_comment\" xml:space=\"preserve\">\r\n    <value>Unterminated comment starting line {0}</value>\r\n  </data>\r\n  <data name=\"too_big_int_conversion\" xml:space=\"preserve\">\r\n    <value>The integer number {0} is too big, converting to double instead</value>\r\n  </data>\r\n  <data name=\"php_track_vars_not_supported\" xml:space=\"preserve\">\r\n    <value>&lt;?php_track_vars?&gt; is not supported</value>\r\n  </data>\r\n  <data name=\"invalid_identifier\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a valid identifier; an identifier cannot be non-empty and cannot contain any of the characters '&lt;', '&gt;' and '#'.</value>\r\n  </data>\r\n  <data name=\"check_varuse_fault\" xml:space=\"preserve\">\r\n    <value>Can't use function/method return value in write context</value>\r\n  </data>\r\n  <data name=\"field_in_interface\" xml:space=\"preserve\">\r\n    <value>Interfaces cannot have properties</value>\r\n  </data>\r\n  <data name=\"nonvar_passed_by_ref\" xml:space=\"preserve\">\r\n    <value>Only variables can be passed by reference</value>\r\n  </data>\r\n  <data name=\"method_body_in_interface\" xml:space=\"preserve\">\r\n    <value>Method declared in interface cannot have body</value>\r\n  </data>\r\n  <data name=\"empty_index_in_read_context\" xml:space=\"preserve\">\r\n    <value>Cannot use [] for reading</value>\r\n  </data>\r\n  <data name=\"self_used_out_of_class\" xml:space=\"preserve\">\r\n    <value>'self' used out of class declaration</value>\r\n  </data>\r\n  <data name=\"parent_used_out_of_class\" xml:space=\"preserve\">\r\n    <value>'parent' used out of class declaration</value>\r\n  </data>\r\n  <data name=\"class_has_no_parent\" xml:space=\"preserve\">\r\n    <value>The class '{0}' has no parent</value>\r\n  </data>\r\n  <data name=\"array_in_cls_const\" xml:space=\"preserve\">\r\n    <value>Arrays are not allowed in class constants</value>\r\n  </data>\r\n  <data name=\"formal_param_redeclaration\" xml:space=\"preserve\">\r\n    <value>The function already has parametr {0}</value>\r\n  </data>\r\n  <data name=\"incomplete_class\" xml:space=\"preserve\">\r\n    <value>The class '{0}' is incomplete - its base class or interface is unknown</value>\r\n  </data>\r\n  <data name=\"unknown_method_called\" xml:space=\"preserve\">\r\n    <value>Class '{0}' does not contain definition of method '{1}'</value>\r\n  </data>\r\n  <data name=\"too_few_method_params\" xml:space=\"preserve\">\r\n    <value>Missing parameter(s) to the call of '{0}::{1}' - at least {2} required but only {3} provided</value>\r\n  </data>\r\n  <data name=\"too_few_ctor_params\" xml:space=\"preserve\">\r\n    <value>Missing parameter(s) to the call of the class '{0}' constructor - at least {1} required but only {2} provided</value>\r\n  </data>\r\n  <data name=\"too_few_function_params\" xml:space=\"preserve\">\r\n    <value>Missing parameter(s) to the call of '{0}' - at least {1} required but only {2} provided</value>\r\n  </data>\r\n  <data name=\"too_many_local_variables_function\" xml:space=\"preserve\">\r\n    <value>Function '{0}' declares too many local variables ({1}) which may lead to suboptimal performace</value>\r\n  </data>\r\n  <data name=\"too_many_local_variables_method\" xml:space=\"preserve\">\r\n    <value>Method '{0}::{1}' declares too many local variables ({2}) which may lead to suboptimal performace</value>\r\n  </data>\r\n  <data name=\"unused_label\" xml:space=\"preserve\">\r\n    <value>The label '{0}' is defined but not used within the current scope</value>\r\n  </data>\r\n  <data name=\"undefined_label\" xml:space=\"preserve\">\r\n    <value>Use of undefined label '{0}'</value>\r\n  </data>\r\n  <data name=\"label_redeclared\" xml:space=\"preserve\">\r\n    <value>The label '{0}' is already declared</value>\r\n  </data>\r\n  <data name=\"bad_system_fcn_params_count\" xml:space=\"preserve\">\r\n    <value>Library function '{0}' called with wrong number of parameters</value>\r\n  </data>\r\n  <data name=\"more_switch_cases_with_same_value\" xml:space=\"preserve\">\r\n    <value>The 'case' label with value {0} has already been declared</value>\r\n  </data>\r\n  <data name=\"more_then_one_default_in_switch\" xml:space=\"preserve\">\r\n    <value>The 'switch' already contains a 'default' section</value>\r\n  </data>\r\n  <data name=\"unknown_class_used\" xml:space=\"preserve\">\r\n    <value>Class '{0}' is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unknown_class_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Class '{0}' (imported as '{1}') is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unknown_function_used\" xml:space=\"preserve\">\r\n    <value>Function '{0}' is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unknown_function_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Function '{0}' (imported as '{1}') is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unknown_constant_used\" xml:space=\"preserve\">\r\n    <value>Constant '{0}' is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unknown_constant_used_with_alias\" xml:space=\"preserve\">\r\n    <value>Constant '{0}' (imported as '{1}') is unknown at this point at compile-time</value>\r\n  </data>\r\n  <data name=\"unreachable_code\" xml:space=\"preserve\">\r\n    <value>Unreachable code detected</value>\r\n  </data>\r\n  <data name=\"no_ctor_defined\" xml:space=\"preserve\">\r\n    <value>Class '{0}' has no constructor defined - using default constructor and ignoring arguments</value>\r\n  </data>\r\n  <data name=\"inclusion_deferred_to_runtime\" xml:space=\"preserve\">\r\n    <value>Inclusion of file '{0}' deferred to runtime because: {1}</value>\r\n  </data>\r\n  <data name=\"inclusion_replacement_failed\" xml:space=\"preserve\">\r\n    <value>No inclusion pattern does match expression '{0}'</value>\r\n  </data>\r\n  <data name=\"cyclic_inclusion\" xml:space=\"preserve\">\r\n    <value>Cyclic inclusion between files '{0}' and '{1}' detected, inclusion of file '{0}' deferred to runtime</value>\r\n  </data>\r\n  <data name=\"mandatory_behind_optional_param\" xml:space=\"preserve\">\r\n    <value>Mandatory parameter '{0}' declared behind optional parameter</value>\r\n  </data>\r\n  <data name=\"abstract_class_or_interface_instantiated\" xml:space=\"preserve\">\r\n    <value>Instantiation of abstract class or interface '{0}'</value>\r\n  </data>\r\n  <data name=\"this_out_of_method\" xml:space=\"preserve\">\r\n    <value>The variable $this used out of method</value>\r\n  </data>\r\n  <data name=\"this_in_write_context\" xml:space=\"preserve\">\r\n    <value>The variable $this used in write context</value>\r\n  </data>\r\n  <data name=\"begin_compile\" xml:space=\"preserve\">\r\n    <value>Compiling {0} ...</value>\r\n  </data>\r\n  <data name=\"end_compile\" xml:space=\"preserve\">\r\n    <value>{0} compiled successfully</value>\r\n  </data>\r\n  <data name=\"skip_compile\" xml:space=\"preserve\">\r\n    <value>Compilation of {0} skipped, file is already compiled</value>\r\n  </data>\r\n  <data name=\"invalid_resource_visibility\" xml:space=\"preserve\">\r\n    <value>Invalid resource visibility. Must be private or public</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_method_func\" xml:space=\"preserve\">\r\n    <value>Functions declared at global- or method-level are not supported for generating CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_constants\" xml:space=\"preserve\">\r\n    <value>Global constants are not supported for generating CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_global_statement\" xml:space=\"preserve\">\r\n    <value>Global PHP statement is not supported for generating CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_statement\" xml:space=\"preserve\">\r\n    <value>Unknown PHP statement {0} is not supported for generating CodeDOM</value>\r\n  </data>\r\n  <data name=\"cdp_start_must_be_less_tahn_number_of_conditions\" xml:space=\"preserve\">\r\n    <value>Start must be less than number of conditions</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_else_separatelly\" xml:space=\"preserve\">\r\n    <value>Cannot translate 'else' clausule separatelly.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_else_last\" xml:space=\"preserve\">\r\n    <value>The 'else' clausule must be last clausule of if statement.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_ref_assign\" xml:space=\"preserve\">\r\n    <value>Reference assignments are not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_empty_ex\" xml:space=\"preserve\">\r\n    <value>Empty expressions are not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_eval\" xml:space=\"preserve\">\r\n    <value>Eval is not supported</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_include_require\" xml:space=\"preserve\">\r\n    <value>Includes and requires are not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_LINQ\" xml:space=\"preserve\">\r\n    <value>LINQ is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_ex\" xml:space=\"preserve\">\r\n    <value>Unsupported type of expression {0} reached. This type of expression is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_binop\" xml:space=\"preserve\">\r\n    <value>Unsupported binary operator {0} ({1}) reached. Not a binary operator?</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_assign\" xml:space=\"preserve\">\r\n    <value>Unsupported assign operator {0} ({1}) reached. Not an assign operator?</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_unop\" xml:space=\"preserve\">\r\n    <value>Unsupported unary operator {0:F} ({0:D} reached. This operator is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsup_delegate_creartion\" xml:space=\"preserve\">\r\n    <value>Unsupported delegate creation reached. Delegate must be created using NewEx with only one parameter type ArrayEx that consits of 2 ValueItem-s without index where ValueExpr of 2nd item is StringLiteral.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_CodeVariableReferenceExpression_excpected\" xml:space=\"preserve\">\r\n    <value>CodeVariableReferenceExpression was expected as result of TranslateVariableUse for DirectVarUse. Note: Static variables are not supported as DirectVarUse (e.g. Catch statement exception variable).</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_static_var\" xml:space=\"preserve\">\r\n    <value>Static variables can be used only inside methods that are members of clases</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_var_kind\" xml:space=\"preserve\">\r\n    <value>Unknown kind of variable use {0} reached. This kind of variable use is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_null\" xml:space=\"preserve\">\r\n    <value>use.IsMemberOf must not be null.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_nonobj_func\" xml:space=\"preserve\">\r\n    <value>Function calls that are not members of object cannot be translated.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_varlike_construct_use\" xml:space=\"preserve\">\r\n    <value>Unknown kind of variabele-like construct use {0} reached. This kind of use is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_array_item_reference\" xml:space=\"preserve\">\r\n    <value>Array items passed by reference are not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_array_item_type\" xml:space=\"preserve\">\r\n    <value>Array item of unknown type {0} reached. This kind of array item is not supported for PHP-to-CodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_assoc_arr_init_context\" xml:space=\"preserve\">\r\n    <value>PHP associative array initialization cannot be done in place where additional statements cannot be inserted.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_pseudoconstant_type\" xml:space=\"preserve\">\r\n    <value>Unsupported type of pseudo-constant {0} ({1}) reached. This type is not supported for PHP-to-CodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_list_context\" xml:space=\"preserve\">\r\n    <value>List expressions cannot be created in places outside methods</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_isset_no_var\" xml:space=\"preserve\">\r\n    <value>isset with no variable is not supported for PHP-to-CodeDOM translation</value>\r\n  </data>\r\n  <data name=\"cdp_not_enough_items_in_list\" xml:space=\"preserve\">\r\n    <value>There is not enough items in list</value>\r\n  </data>\r\n  <data name=\"cdp_start_less_than_zero\" xml:space=\"preserve\">\r\n    <value>start canot be less than zero</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_enough_expressions_in_list\" xml:space=\"preserve\">\r\n    <value>There is not enough expressions in list</value>\r\n  </data>\r\n  <data name=\"cdp_start_greater_than_zero\" xml:space=\"preserve\">\r\n    <value>Start must be greater than or equal to zero</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_empty_ex_list\" xml:space=\"preserve\">\r\n    <value>Cannot translate empty expression list</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_indirect_type_ref\" xml:space=\"preserve\">\r\n    <value>Indirect type references are not supported for PHP-to-CodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_ref_kind\" xml:space=\"preserve\">\r\n    <value>Unknown kind of type reference {0} reached. This type reference is not supported for PHP-to-CodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_switch\" xml:space=\"preserve\">\r\n    <value>Unknown switch statement item {0}. This kind of switch items is not supported fro PHP-to-CodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unknown_event_op\" xml:space=\"preserve\">\r\n    <value>Unknown event operation reached. Only Add and Remove operations are supported.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_invalid_event\" xml:space=\"preserve\">\r\n    <value>Invalid expression for event translation</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_break_non_constant\" xml:space=\"preserve\">\r\n    <value>The break statement with non-constant argument is not supported fro PHP-toCodeDOM translation.</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_no_jump_label\" xml:space=\"preserve\">\r\n    <value>Containing block returned no label to jump to for break statement</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_2_stat_vars_with_same_name\" xml:space=\"preserve\">\r\n    <value>Two static variables with same name</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_static_var_otside_method\" xml:space=\"preserve\">\r\n    <value>Cannot add static variables when not in method</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_loc_var_context\" xml:space=\"preserve\">\r\n    <value>Local variable declarations are not supported at this level (e.g. namespace or class).</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_loc_var_class_namespace\" xml:space=\"preserve\">\r\n    <value>Cannot add local variable at this level (eg. namespace or class)</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_levels_0\" xml:space=\"preserve\">\r\n    <value>Number of levels to break must be 1 or more</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_break_continue_only\" xml:space=\"preserve\">\r\n    <value>CodeTargetRequest supports only break and continue</value>\r\n  </data>\r\n  <data name=\"cdp_statement_not_found\" xml:space=\"preserve\">\r\n    <value>Statement not found</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_block_level\" xml:space=\"preserve\">\r\n    <value>Object of type {0} is not allowed at block-statement level</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_only_loop_jump\" xml:space=\"preserve\">\r\n    <value>Only loops can provide jump labels</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_method_level\" xml:space=\"preserve\">\r\n    <value>Object of type {0} is not allowed at method level</value>\r\n  </data>\r\n  <data name=\"cdp_index_not_within_catch_calusules\" xml:space=\"preserve\">\r\n    <value>Index is not within catch clausules</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_file_level\" xml:space=\"preserve\">\r\n    <value>Object of type {0} is not supported at file level</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_not_allowed_at_namespace_level\" xml:space=\"preserve\">\r\n    <value>Object of type {0} is not supported at namespace level</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_anything_delegate\" xml:space=\"preserve\">\r\n    <value>Cannot add anything into delegate</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_filed_delegate\" xml:space=\"preserve\">\r\n    <value>Cannot add field into interface</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_in_enum\" xml:space=\"preserve\">\r\n    <value>Only constant static fields can be added into enumerations</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_in_enum_other\" xml:space=\"preserve\">\r\n    <value>Only fields can be added into enumerations</value>\r\n  </data>\r\n  <data name=\"cdp_unsup_unsupported_at_type_level\" xml:space=\"preserve\">\r\n    <value>Object of type {0} is not supported at type level</value>\r\n  </data>\r\n  <data name=\"dll_import_must_be_static\" xml:space=\"preserve\">\r\n    <value>Function decorated with DllImportAttribute must be static.</value>\r\n  </data>\r\n  <data name=\"dll_import_cannot_be_abstract\" xml:space=\"preserve\">\r\n    <value>Method decorated with DllImportAttribute cannot be abstract.</value>\r\n  </data>\r\n  <data name=\"static_property_as_nonstatic\" xml:space=\"preserve\">\r\n    <value>Accessing static property {0}::${1} as non static</value>\r\n  </data>\r\n  <data name=\"assign_new_as_ref_is_deprecated\" xml:space=\"preserve\">\r\n    <value>Assigning the return value of new by reference is deprecated</value>\r\n  </data>\r\n  <data name=\"function_is_deprecated\" xml:space=\"preserve\">\r\n    <value>Function {0}() is deprecated</value>\r\n  </data>\r\n  <data name=\"only_vars_assigned_by_ref\" xml:space=\"preserve\">\r\n    <value>Only variables should be assigned by reference</value>\r\n  </data>\r\n  <data name=\"declaration_should_be_compatible\" xml:space=\"preserve\">\r\n    <value>Declaration of {0}::{1}() should be compatible with that of {2}::{3}()</value>\r\n  </data>\r\n  <data name=\"script_library_assembly_loading_failed\" xml:space=\"preserve\">\r\n    <value>Script library \"{0}\" could not be loaded.</value>\r\n  </data>\r\n  <data name=\"undefined_external_module_called\" xml:space=\"preserve\">\r\n    <value>Call to undefined external function '{0}', extension '{1}' (extension not found)</value>\r\n  </data>\r\n  <data name=\"notsupported_function_called\" xml:space=\"preserve\">\r\n    <value>Function '{0}' is not supported</value>\r\n  </data>\r\n  <data name=\"phpc_arg_skip\" xml:space=\"preserve\">\r\n    <value>File or directory which will be skipped during compilation. This also prevents a file(s) to be included statically if /static+ option is specified.</value>\r\n  </data>\r\n  <data name=\"method_must_take_exact_args_count\" xml:space=\"preserve\">\r\n    <value>Method {0}::{1}() must take exactly {2} arguments</value>\r\n  </data>\r\n  <data name=\"callstat_must_be_public_static\" xml:space=\"preserve\">\r\n    <value>The magic method __callStatic() must have public visibility and be static</value>\r\n  </data>\r\n  <data name=\"magic_method_must_be_public_nonstatic\" xml:space=\"preserve\">\r\n    <value>The magic method {0}() must have public visibility and cannot be static</value>\r\n  </data>\r\n  <data name=\"unoptimized_local_variables_function\" xml:space=\"preserve\">\r\n    <value>Function {0} requires access to local variables and prevents optimizing them. To improve performance, separate this function call into small function.</value>\r\n  </data>\r\n  <data name=\"constant_not_found\" xml:space=\"preserve\">\r\n    <value>Couldn't find constant {0}</value>\r\n  </data>\r\n  <data name=\"method_cannot_take_arguments\" xml:space=\"preserve\">\r\n    <value>Method {0}::{1}() cannot take arguments</value>\r\n  </data>\r\n  <data name=\"namespace_keyword_outside_namespace\" xml:space=\"preserve\">\r\n    <value>Namespace keyword used outside namespace declaration</value>\r\n  </data>\r\n  <data name=\"alias_in_use\" xml:space=\"preserve\">\r\n    <value>Cannot use {0} as {1} because the name is already in use</value>\r\n  </data>\r\n  <data name=\"class_in_use\" xml:space=\"preserve\">\r\n    <value>Cannot declare class {0} because the name is already in use</value>\r\n  </data>\r\n  <data name=\"generic_in_use\" xml:space=\"preserve\">\r\n    <value>Cannot declare generic type parameter {0} because the name is already in use</value>\r\n  </data>\r\n  <data name=\"import_only_in_pure\" xml:space=\"preserve\">\r\n    <value>Import statement is only available in pure mode</value>\r\n  </data>\r\n  <data name=\"import_deprecated\" xml:space=\"preserve\">\r\n    <value>Import statement is deprecated and will be removed in future versions. Use PHP aliasing instead.</value>\r\n  </data>\r\n  <data name=\"object_could_not_be_converted\" xml:space=\"preserve\">\r\n    <value>Object of class {0} could not be converted to {1}</value>\r\n  </data>\r\n  <data name=\"error_place\" xml:space=\"preserve\">\r\n    <value> in {0} on line {1}, column {2}</value>\r\n  </data>\r\n  <data name=\"class_could_not_be_loaded\" xml:space=\"preserve\">\r\n    <value>Class {0} could not be loaded</value>\r\n  </data>\r\n  <data name=\"argsaware_routine_needs_args\" xml:space=\"preserve\">\r\n    <value>Function '{0}'() is ArgsAware. It requires to be called via ArgLess stub, but was called via ArgFull. It requires arguments to be loaded on PhpStack.</value>\r\n  </data>\r\n  <data name=\"isolated_extensions_unsupported\" xml:space=\"preserve\">\r\n    <value>Isolated extensions are not supported anymore.</value>\r\n  </data>\r\n  <data name=\"spl_index_invalid\" xml:space=\"preserve\">\r\n    <value>Index invalid or out of range</value>\r\n  </data>\r\n  <data name=\"spl_empty_iterator_key_access\" xml:space=\"preserve\">\r\n    <value>Accessing the key of an EmptyIterator</value>\r\n  </data>\r\n  <data name=\"spl_empty_iterator_value_access\" xml:space=\"preserve\">\r\n    <value>Accessing the value of an EmptyIterator</value>\r\n  </data>\r\n  <data name=\"instantiation_not_allowed\" xml:space=\"preserve\">\r\n    <value>Instantiation of '{0}' is not allowed</value>\r\n  </data>\r\n  <data name=\"static_used_out_of_class\" xml:space=\"preserve\">\r\n    <value>Cannot access static:: when no class scope is active</value>\r\n  </data>\r\n  <data name=\"nowdoc_expected\" xml:space=\"preserve\">\r\n    <value>Expecting constant value within heredoc.</value>\r\n  </data>\r\n  <data name=\"incomparable_objects_compared_exception\" xml:space=\"preserve\">\r\n    <value>Incomparable objects ({0} and {1}) have been compared</value>\r\n  </data>\r\n  <data name=\"try_without_catch_or_finally\" xml:space=\"preserve\">\r\n    <value>Cannot use try without catch or finally</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Core.Parsers/Text/ILineBreaks.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Text\r\n{\r\n    #region ILineBreaks\r\n\r\n    /// <summary>\r\n    /// Manages information about line breaks in the document.\r\n    /// </summary>\r\n    public interface  ILineBreaks\r\n    {\r\n        /// <summary>\r\n        /// Gets amount of line breaks.\r\n        /// </summary>\r\n        /// <remarks>Lines count equals <see cref=\"Count\"/> + <c>1</c>.</remarks>\r\n        int Count { get; }\r\n\r\n        /// <summary>\r\n        /// Gets length of document.\r\n        /// </summary>\r\n        int TextLength { get; }\r\n\r\n        /// <summary>\r\n        /// Gets position of <paramref name=\"index\"/>-th line end, including its break characters.\r\n        /// </summary>\r\n        /// <param name=\"index\">Index of te line.</param>\r\n        /// <returns>Position of the line end.</returns>\r\n        int EndOfLineBreak(int index);\r\n\r\n        /// <summary>\r\n        /// Gets line number from <paramref name=\"position\"/> within document.\r\n        /// </summary>\r\n        /// <param name=\"position\">Position within document.</param>\r\n        /// <returns>Line number.</returns>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\">In case <paramref name=\"position\"/> is out of line number range.</exception>\r\n        int GetLineFromPosition(int position);\r\n\r\n        /// <summary>\r\n        /// Gets line and column from position number.\r\n        /// </summary>\r\n        /// <param name=\"position\">Position with the document.</param>\r\n        /// <param name=\"line\">Line number.</param>\r\n        /// <param name=\"column\">Column nummber.</param>\r\n        void GetLineColumnFromPosition(int position, out int line, out int column);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region LineBreaks\r\n\r\n    public abstract class LineBreaks : ILineBreaks\r\n    {\r\n        #region ILineBreaks Members\r\n\r\n        public abstract int Count { get; }\r\n\r\n        public abstract int EndOfLineBreak(int index);\r\n\r\n        public int TextLength\r\n        {\r\n            get { return _textLength; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets line number from <paramref name=\"position\"/> within document.\r\n        /// </summary>\r\n        /// <param name=\"position\">Position within document.</param>\r\n        /// <returns>Line number.</returns>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\">In case <paramref name=\"position\"/> is out of text document range.</exception>\r\n        public int GetLineFromPosition(int position)\r\n        {\r\n            if (position < 0 || position > this.TextLength)\r\n                throw new ArgumentOutOfRangeException(\"position\");\r\n            \r\n            //\r\n            if (position == this.TextLength)\r\n                return this.LinesCount - 1;\r\n            \r\n            // binary search\r\n            int a = 0;\r\n            int b = this.Count;\r\n            while (a < b)\r\n            {\r\n                int x = (a + b) / 2;\r\n                if (position < this.EndOfLineBreak(x))\r\n                    b = x;\r\n                else\r\n                    a = x + 1;\r\n            }\r\n            return a;\r\n        }\r\n\r\n        public void GetLineColumnFromPosition(int position, out int line, out int column)\r\n        {\r\n            line = GetLineFromPosition(position);\r\n            if (line == 0)\r\n                column = position;\r\n            else\r\n                column = position - this.EndOfLineBreak(line - 1);\r\n        }\r\n\r\n        #endregion\r\n\r\n        protected int _textLength;\r\n\r\n        protected LineBreaks(int textLength)\r\n        {\r\n            _textLength = textLength;\r\n        }\r\n\r\n        public static LineBreaks/*!*/Create(string text)\r\n        {\r\n            return Create(text, CalculateLineEnds(text));\r\n        }\r\n\r\n        public static LineBreaks/*!*/Create(string text, List<int>/*!*/lineEnds)\r\n        {\r\n            if (text == null) throw new ArgumentNullException();\r\n            return Create(text.Length, lineEnds);\r\n        }\r\n\r\n        internal static LineBreaks/*!*/Create(int textLength, List<int>/*!*/lineEnds)\r\n        {\r\n            if (textLength < 0) throw new ArgumentException();\r\n            if (lineEnds == null) throw new ArgumentNullException();\r\n            \r\n            if (lineEnds.Count == 0 || lineEnds.Last() <= ushort.MaxValue)\r\n            {\r\n                return new ShortLineBreaks(textLength, lineEnds);\r\n            }\r\n            else\r\n            {\r\n                return new IntLineBreaks(textLength, lineEnds);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Amount of lines in the document.\r\n        /// </summary>\r\n        public int LinesCount { get { return this.Count + 1; } }\r\n\r\n        /// <summary>\r\n        /// Gets list of line ends position.\r\n        /// </summary>\r\n        /// <param name=\"text\">Document text.</param>\r\n        /// <returns>List of line ends position.</returns>\r\n        private static List<int>/*!*/CalculateLineEnds(string text)\r\n        {\r\n            List<int> list = new List<int>();\r\n            if (text != null)\r\n            {\r\n                int i = 0;\r\n                while (i < text.Length)\r\n                {\r\n                    int len = TextUtils.LengthOfLineBreak(text, i);\r\n                    if (len == 0)\r\n                    {\r\n                        i++;\r\n                    }\r\n                    else\r\n                    {\r\n                        i += len;\r\n                        list.Add(i);\r\n                    }\r\n                }\r\n            }\r\n            return list;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ShortLineBreaks\r\n\r\n    /// <summary>\r\n    /// Optimized generalization of <see cref=\"LineBreaks\"/> using <see cref=\"ushort\"/> internally.\r\n    /// </summary>\r\n    internal sealed class ShortLineBreaks : LineBreaks\r\n    {\r\n        private readonly ushort[]/*!*/_lineEnds;\r\n\r\n        public ShortLineBreaks(int textLength, List<int> lineEnds)\r\n            :base(textLength)\r\n        {\r\n            var count = lineEnds.Count;\r\n            if (count == 0)\r\n            {\r\n                _lineEnds = ArrayUtils.EmptyUShorts;\r\n            }\r\n            else\r\n            {\r\n                _lineEnds = new ushort[count];\r\n                for (int i = 0; i < count; i++)\r\n                    _lineEnds[i] = (ushort)lineEnds[i];\r\n            }\r\n        }\r\n\r\n        public override int Count\r\n        {\r\n            get { return _lineEnds.Length; }\r\n        }\r\n\r\n        public override int EndOfLineBreak(int index)\r\n        {\r\n            return (int)_lineEnds[index];\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IntLineBreaks\r\n\r\n    /// <summary>\r\n    /// Generalization of <see cref=\"LineBreaks\"/> using <see cref=\"int\"/> internally.\r\n    /// </summary>\r\n    internal sealed class IntLineBreaks : LineBreaks\r\n    {\r\n        private readonly int[]/*!*/_lineEnds;\r\n\r\n        public IntLineBreaks(int textLength, List<int> lineEnds)\r\n            : base(textLength)\r\n        {\r\n            var count = lineEnds.Count;\r\n            if (count == 0)\r\n            {\r\n                _lineEnds = ArrayUtils.EmptyIntegers;\r\n            }\r\n            else\r\n            {\r\n                _lineEnds = lineEnds.ToArray();\r\n            }\r\n        }\r\n\r\n        public override int Count\r\n        {\r\n            get { return _lineEnds.Length; }\r\n        }\r\n\r\n        public override int EndOfLineBreak(int index)\r\n        {\r\n            return (int)_lineEnds[index];\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region ExpandableLineBreaks\r\n\r\n    /// <summary>\r\n    /// Generalization of <see cref=\"LineBreaks\"/> using <see cref=\"List{T}\"/> internally.\r\n    /// </summary>\r\n    internal sealed class ExpandableLineBreaks : LineBreaks\r\n    {\r\n        private readonly List<int>/*!*/_lineEnds = new List<int>();\r\n\r\n        public ExpandableLineBreaks()\r\n            : base(0)\r\n        {\r\n        }\r\n\r\n        public override int Count\r\n        {\r\n            get { return _lineEnds.Count; }\r\n        }\r\n\r\n        public override int EndOfLineBreak(int index)\r\n        {\r\n            return (int)_lineEnds[index];\r\n        }\r\n\r\n        public void Expand(char[] text, int from, int length)\r\n        {\r\n            int oldTextLength = _textLength;\r\n\r\n            int i = from;\r\n            int to = from + length;\r\n            while (i < to)\r\n            {\r\n                int len = TextUtils.LengthOfLineBreak(text, i);\r\n                if (len == 0)\r\n                {\r\n                    i++;\r\n                }\r\n                else\r\n                {\r\n                    i += len;\r\n                    _lineEnds.Add(oldTextLength - from + i);\r\n                }\r\n            }\r\n\r\n            //\r\n            _textLength += length;\r\n        }\r\n\r\n        public LineBreaks/*!*/Finalize()\r\n        {\r\n            return LineBreaks.Create(_textLength, _lineEnds);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    //#region VirtualLineBreaks\r\n\r\n    ///// <summary>\r\n    ///// <see cref=\"ILineBreaks\"/> implementation which is collecting line break information subsequently\r\n    ///// and provides ability to shift resulting line and column.\r\n    ///// </summary>\r\n    //internal sealed class VirtualLineBreaks : ILineBreaks\r\n    //{\r\n    //    private readonly int lineShift, columnShift;\r\n    //    private LineBreaks/*!*/lineBreaks;\r\n    //    private ExpandableLineBreaks ExpandableLineBreaks { get { return (ExpandableLineBreaks)lineBreaks; } }\r\n\r\n    //    public VirtualLineBreaks(LineBreaks lineBreaks, int lineShift, int columnShift)\r\n    //    {\r\n    //        this.lineShift = lineShift;\r\n    //        this.columnShift = columnShift;\r\n    //        this.lineBreaks = lineBreaks;\r\n    //    }\r\n\r\n    //    public VirtualLineBreaks(int lineShift, int columnShift)\r\n    //        : this(new ExpandableLineBreaks(), lineShift, columnShift)\r\n    //    {\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Updates <see cref=\"TextLength\"/> and line breaks with an additional piece of text.\r\n    //    /// </summary>\r\n    //    public void Expand(char[] text, int from, int length)\r\n    //    {\r\n    //        if (IsFinalized)\r\n    //            throw new InvalidOperationException();\r\n\r\n    //        this.ExpandableLineBreaks.Expand(text, from, length);\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Compresses internal storage of line breaks and does not allow to expand any more.\r\n    //    /// </summary>\r\n    //    public ILineBreaks Finalize()\r\n    //    {\r\n    //        if (!IsFinalized)\r\n    //            lineBreaks = this.ExpandableLineBreaks.Finalize();\r\n\r\n    //        if (lineShift == 0 && columnShift == 0)\r\n    //            return lineBreaks;\r\n    //        else\r\n    //            return this;\r\n    //    }\r\n\r\n    //    public bool IsFinalized { get { return !(lineBreaks is ExpandableLineBreaks); } }\r\n\r\n    //    #region ILineBreaks Members\r\n\r\n    //    public int Count\r\n    //    {\r\n    //        get { return lineBreaks.Count; }\r\n    //    }\r\n\r\n    //    public int TextLength\r\n    //    {\r\n    //        get { return lineBreaks.TextLength; }\r\n    //    }\r\n\r\n    //    public int EndOfLineBreak(int index)\r\n    //    {\r\n    //        return lineBreaks.EndOfLineBreak(index);\r\n    //    }\r\n\r\n    //    public int GetLineFromPosition(int position)\r\n    //    {\r\n    //        return lineBreaks.GetLineFromPosition(position) + lineShift;\r\n    //    }\r\n\r\n    //    public void GetLineColumnFromPosition(int position, out int line, out int column)\r\n    //    {\r\n    //        lineBreaks.GetLineColumnFromPosition(position, out line, out column);\r\n\r\n    //        if (line == 0) column += columnShift;\r\n    //        line += lineShift;\r\n    //    }\r\n\r\n    //    #endregion\r\n    //}\r\n\r\n    //#endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Text/Span.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Text\r\n{\r\n    /// <summary>\r\n    /// Represents text span.\r\n    /// </summary>\r\n    public struct Span : IEquatable<Span>\r\n    {\r\n        #region Fields\r\n\r\n        private int _start;\r\n        private int _length;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        public int Start\r\n        {\r\n            get\r\n            {\r\n                return _start;\r\n            }\r\n        }\r\n\r\n        public int End\r\n        {\r\n            get\r\n            {\r\n                return _start + _length;\r\n            }\r\n        }\r\n\r\n        public int Length\r\n        {\r\n            get\r\n            {\r\n                return _length;\r\n            }\r\n        }\r\n\r\n        public bool IsEmpty\r\n        {\r\n            get\r\n            {\r\n                return _length == 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets value determining whether this span represents a valid span.\r\n        /// </summary>\r\n        public bool IsValid { get { return _length >= 0; } }\r\n\r\n        /// <summary>\r\n        /// Gets representation of an invalid span.\r\n        /// </summary>\r\n        public static Span Invalid { get { return new Span() { _start = 0, _length = -1 }; } }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public Span(int start, int length)\r\n        {\r\n            if (start < 0)\r\n                throw new ArgumentOutOfRangeException(\"start\");\r\n\r\n            if (length < 0)\r\n                throw new ArgumentOutOfRangeException(\"length\");\r\n\r\n            _start = start;\r\n            _length = length;\r\n        }\r\n\r\n        public static Span FromBounds(int start, int end)\r\n        {\r\n            return new Span(start, end - start);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        public static Span Combine(Span left, Span right)\r\n        {\r\n            return Span.FromBounds(left.Start, right.End);\r\n        }\r\n\r\n        public bool Contains(int position)\r\n        {\r\n            return position >= this.Start && position < this.End;\r\n        }\r\n\r\n        public bool Contains(Span span)\r\n        {\r\n            return span._start >= this.Start && span.End <= this.End;\r\n        }\r\n\r\n        public bool OverlapsWith(Span span)\r\n        {\r\n            return Math.Max(this.Start, span.Start) < Math.Min(this.End, span.End);\r\n        }\r\n\r\n        public Span? Overlap(Span span)\r\n        {\r\n            int start = Math.Max(this.Start, span.Start);\r\n            int end = Math.Min(this.End, span.End);\r\n            if (start < end)\r\n                return new Span?(Span.FromBounds(start, end));\r\n\r\n            return null;\r\n        }\r\n\r\n        public bool IntersectsWith(Span span)\r\n        {\r\n            return span.Start <= this.End && span.End >= this.Start;\r\n        }\r\n\r\n        public Span? Intersection(Span span)\r\n        {\r\n            int start = Math.Max(this.Start, span.Start);\r\n            int end = Math.Min(this.End, span.End);\r\n            if (start <= end)\r\n                return new Span?(Span.FromBounds(start, end));\r\n\r\n            return null;\r\n        }\r\n\r\n        public static bool operator ==(Span left, Span right)\r\n        {\r\n            return left._start == right._start && left._length == right._length;\r\n        }\r\n\r\n        public static bool operator !=(Span left, Span right)\r\n        {\r\n            return !(left == right);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets portion of document defined by this <see cref=\"Span\"/>.\r\n        /// </summary>\r\n        public string GetText(string document)\r\n        {\r\n            return document.Substring(_start, _length);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Object Members\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return _start.GetHashCode() ^ _length.GetHashCode();\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (obj is Span)\r\n                return Equals((Span)obj);\r\n\r\n            return false;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"[{0}..{1})\", _start, _start + _length);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEquatable<Span> Members\r\n\r\n        public bool Equals(Span other)\r\n        {\r\n            return other._start == this._start && other._length == this._length;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Text/TextPoint.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Text\r\n{\r\n    /// <summary>\r\n    /// Represents position within text.\r\n    /// </summary>\r\n    public struct TextPoint : IComparable<TextPoint>, IEquatable<TextPoint>\r\n    {\r\n        #region Fields\r\n\r\n        private readonly ILineBreaks _lineBreaks;\r\n        private readonly int _position;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public TextPoint(ILineBreaks lineBreaks, int position)\r\n        {\r\n            //if (lineBreaks == null)\r\n            //    throw new ArgumentNullException(\"lineBreaks\");\r\n            //if (position > lineBreaks.TextLength)\r\n            //    throw new ArgumentException(\"position\");\r\n\r\n            _lineBreaks = lineBreaks;\r\n            _position = position;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        public ILineBreaks LineBreaks\r\n        {\r\n            get\r\n            {\r\n                return _lineBreaks;\r\n            }\r\n        }\r\n\r\n        public int Position\r\n        {\r\n            get\r\n            {\r\n                return _position;\r\n            }\r\n        }\r\n\r\n        public int Line\r\n        {\r\n            get\r\n            {\r\n                return _lineBreaks.GetLineFromPosition(_position);\r\n            }\r\n        }\r\n\r\n        public int Column\r\n        {\r\n            get\r\n            {\r\n                int line, column;\r\n                _lineBreaks.GetLineColumnFromPosition(_position, out line, out column);\r\n                return column;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        public static implicit operator int(TextPoint point)\r\n        {\r\n            return point.Position;\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return _position.GetHashCode() ^ _lineBreaks.GetHashCode();\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (obj is TextPoint)\r\n                return this.Equals((TextPoint)obj);\r\n\r\n            return false;\r\n        }\r\n\r\n        public TextPoint Add(int offset)\r\n        {\r\n            return new TextPoint(this.LineBreaks, _position + offset);\r\n        }\r\n\r\n        public TextPoint Subtract(int offset)\r\n        {\r\n            return this.Add(-offset);\r\n        }\r\n\r\n        public static TextPoint operator -(TextPoint point, int offset)\r\n        {\r\n            return point.Add(-offset);\r\n        }\r\n\r\n        public static int operator -(TextPoint start, TextPoint other)\r\n        {\r\n            if (start.LineBreaks != other.LineBreaks)\r\n                throw new ArgumentException();\r\n            \r\n            return start.Position - other.Position;\r\n        }\r\n\r\n        public static bool operator ==(TextPoint left, TextPoint right)\r\n        {\r\n            return left.Equals(right);\r\n        }\r\n\r\n        public static bool operator !=(TextPoint left, TextPoint right)\r\n        {\r\n            return !(left == right);\r\n        }\r\n\r\n        public static TextPoint operator +(TextPoint point, int offset)\r\n        {\r\n            return point.Add(offset);\r\n        }\r\n\r\n        public static bool operator >(TextPoint left, TextPoint right)\r\n        {\r\n            return left.CompareTo(right) > 0;\r\n        }\r\n\r\n        public static bool operator <(TextPoint left, TextPoint right)\r\n        {\r\n            return left.CompareTo(right) < 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IComparable<TextPoint>\r\n\r\n        public int CompareTo(TextPoint other)\r\n        {\r\n            if (this.LineBreaks != other.LineBreaks)\r\n                throw new ArgumentException();\r\n\r\n            return _position.CompareTo(other._position);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEquatable<TextPoint> Members\r\n\r\n        public bool Equals(TextPoint other)\r\n        {\r\n            return other.LineBreaks == this.LineBreaks && other.Position == this.Position;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Text/TextSpan.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Core.Text\r\n{\r\n    /// <summary>\r\n    /// Represents span within text.\r\n    /// </summary>\r\n    public struct TextSpan : IEquatable<TextSpan>\r\n    {\r\n        #region Fields\r\n\r\n        private readonly TextPoint _start;\r\n        private readonly int _length;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public TextSpan(ILineBreaks lineBreaks, int start, int length)\r\n        {\r\n            _start = new TextPoint(lineBreaks, start);\r\n            _length = length;\r\n        }\r\n\r\n        public TextSpan(TextPoint start, TextPoint end)\r\n        {\r\n            if (!object.ReferenceEquals(start.LineBreaks, end.LineBreaks))\r\n                throw new ArgumentException();\r\n\r\n            if (start.LineBreaks == null)\r\n                throw new ArgumentException();\r\n\r\n            _start = start;\r\n            _length = end.Position - start.Position;\r\n\r\n            if (_length < 0)\r\n                throw new ArgumentException();\r\n        }\r\n\r\n        public TextSpan(ILineBreaks lineBreaks, Span span)\r\n\t\t{\r\n\t\t\tif (lineBreaks == null)\r\n                throw new ArgumentNullException(\"lineBreaks\");\r\n\t\t\t\r\n            if (span.End > lineBreaks.TextLength)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"span\");\r\n\t\t\t\r\n            _start = new TextPoint(lineBreaks, span.Start);\r\n\t\t\t_length = span.Length;\r\n\t\t}\r\n\r\n        public TextSpan(TextPoint start, int length)\r\n\t\t{\r\n\t\t\tif (length < 0 || start.Position + length > start.LineBreaks.TextLength)\r\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"length\");\r\n\r\n            _start = start;\r\n\t\t\t_length = length;\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        public TextPoint Start { get { return _start; } }\r\n        public TextPoint End { get { return new TextPoint(_start.LineBreaks, _start.Position + _length); } }\r\n        public int Length { get { return _length; } }\r\n        public bool IsEmpty { get { return _length == 0; } }\r\n        public ILineBreaks LineBreaks { get { return _start.LineBreaks; } }\r\n        public Span Span { get { return new Span(_start.Position, _length); } }\r\n        public int FirstLine { get { return Start.Line; } }\r\n        public int LastLine { get { return End.Line; } }\r\n        public int FirstColumn { get { return Start.Column; } }\r\n        public int LastColumn { get { return End.Column; } }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        public static implicit operator Span(TextSpan span)\r\n\t\t{\r\n\t\t\treturn span.Span;\r\n\t\t}\r\n\r\n        public static TextSpan Combine(TextSpan left, TextSpan right)\r\n        {\r\n            return new TextSpan(left.Start, right.End);\r\n        }\r\n\r\n        public bool Contains(int position)\r\n\t\t{\r\n\t\t\treturn this.Span.Contains(position);\r\n\t\t}\r\n\t\t\r\n        public bool Contains(TextPoint point)\r\n\t\t{\r\n\t\t\tEnsureCompatible(point.LineBreaks);\r\n\t\t\treturn this.Span.Contains(point.Position);\r\n\t\t}\r\n\t\t\r\n        public bool Contains(Span span)\r\n\t\t{\r\n\t\t\treturn this.Span.Contains(span);\r\n\t\t}\r\n\t\t\r\n        public bool Contains(TextSpan span)\r\n\t\t{\r\n            EnsureCompatible(span.LineBreaks);\r\n\t\t\treturn this.Span.Contains(span.Span);\r\n\t\t}\r\n\t\t\r\n        public bool OverlapsWith(Span span)\r\n\t\t{\r\n            return this.Span.OverlapsWith(span);\r\n\t\t}\r\n        \r\n        public bool OverlapsWith(TextSpan span)\r\n\t\t{\r\n            EnsureCompatible(span.LineBreaks);\r\n            return this.Span.OverlapsWith(span.Span);\r\n\t\t}\r\n\t\t\r\n        public TextSpan? Overlap(Span span)\r\n\t\t{\r\n            Span? overlap = this.Span.Overlap(span);\r\n            if (overlap.HasValue)\r\n                return new TextSpan?(new TextSpan(this.LineBreaks, overlap.Value));\r\n\r\n            return null;\r\n\t\t}\r\n        \r\n        public TextSpan? Overlap(TextSpan span)\r\n\t\t{\r\n            EnsureCompatible(span.LineBreaks);\r\n            return this.Overlap(span.Span);\r\n\t\t}\r\n        \r\n        public bool IntersectsWith(Span span)\r\n\t\t{\r\n            return this.Span.IntersectsWith(span);\r\n\t\t}\r\n\t\t\r\n        public bool IntersectsWith(TextSpan span)\r\n\t\t{\r\n            EnsureCompatible(span.LineBreaks);\r\n            return this.Span.IntersectsWith(span.Span);\r\n\t\t}\r\n\t\t\r\n        public TextSpan? Intersection(Span span)\r\n\t\t{\r\n            Span? intersection = this.Span.Intersection(span);\r\n            if (intersection.HasValue)\r\n                return new TextSpan?(new TextSpan(this.LineBreaks, intersection.Value));\r\n\r\n            return null;\r\n\t\t}\r\n        \r\n        public TextSpan? Intersection(TextSpan span)\r\n\t\t{\r\n            EnsureCompatible(span.LineBreaks);\r\n            return this.Intersection(span.Span);\r\n\t\t}\r\n\t\t\r\n        public override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn this.Span.GetHashCode() ^ this.LineBreaks.GetHashCode();\r\n\t\t}\r\n\t\t\r\n        public override string ToString()\r\n\t\t{\r\n            return this.Span.ToString();\r\n\t\t}\r\n\t\t\r\n        public override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tif (obj is TextSpan)\r\n\t\t\t{\r\n\t\t\t\tTextSpan left = (TextSpan)obj;\r\n\t\t\t\treturn left == this;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n        public static bool operator ==(TextSpan left, TextSpan right)\r\n\t\t{\r\n            return left.Equals(right);\r\n\t\t}\r\n\t\t\r\n        public static bool operator !=(TextSpan left, TextSpan right)\r\n\t\t{\r\n            return !left.Equals(right);\r\n\t\t}\r\n\r\n\t\tprivate void EnsureCompatible(ILineBreaks lineBreaks)\r\n\t\t{\r\n\t\t\tif (this.LineBreaks != lineBreaks)\r\n\t\t\t\tthrow new ArgumentException();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Gets portion of document defined by this <see cref=\"Span\"/>.\r\n        /// </summary>\r\n        public string GetText(string document)\r\n        {\r\n            return this.Span.GetText(document);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEquatable<TextSpan> Members\r\n\r\n        public bool Equals(TextSpan other)\r\n        {\r\n            return this.LineBreaks == other.LineBreaks && this.Span == other.Span;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/Text/TextUtils.cs",
    "content": "/*\r\n\r\n Copyright (c) 2013 DEVSENSE\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Text\r\n{\r\n    #region TextUtils\r\n\r\n    public static class TextUtils\r\n    {\r\n        /// <summary>\r\n        /// Gets length of line break character sequence if any.\r\n        /// </summary>\r\n        /// <param name=\"text\">Document text.</param>\r\n        /// <param name=\"position\">Index of character within <paramref name=\"text\"/> to look at.</param>\r\n        /// <returns>Length of line break character sequence at <paramref name=\"position\"/>. In case of no line break, <c>0</c> is returned.</returns>\r\n        public static int LengthOfLineBreak(string text, int position)\r\n        {\r\n            char c = text[position];\r\n            if (c == '\\r')\r\n            {\r\n                // \\r\r\n                if (++position >= text.Length || text[position] != '\\n')\r\n                    return 1;\r\n\r\n                // \\r\\n\r\n                return 2;\r\n            }\r\n            else\r\n            {\r\n                // \\n\r\n                // unicode line breaks\r\n                if (c == '\\n' || c == '\\u0085' || c == '\\u2028' || c == '\\u2029')\r\n                    return 1;\r\n\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets length of line break character sequence if any.\r\n        /// </summary>\r\n        /// <remarks>See <see cref=\"LengthOfLineBreak(string, int)\"/>.</remarks>\r\n        public static int LengthOfLineBreak(char[] text, int position)\r\n        {\r\n            char c = text[position];\r\n            if (c == '\\r')\r\n            {\r\n                // \\r\r\n                if (++position >= text.Length || text[position] != '\\n')\r\n                    return 1;\r\n\r\n                // \\r\\n\r\n                return 2;\r\n            }\r\n            else\r\n            {\r\n                // \\n\r\n                // unicode line breaks\r\n                if (c == '\\n' || c == '\\u0085' || c == '\\u2028' || c == '\\u2029')\r\n                    return 1;\r\n\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets <see cref=\"Span\"/> of whole <paramref name=\"line\"/>.\r\n        /// </summary>\r\n        /// <param name=\"lineBreaks\">Information about line breaks in the document. Cannot be <c>null</c>.</param>\r\n        /// <param name=\"line\">Line number.</param>\r\n        /// <returns><see cref=\"Span\"/> of line specified by parameter <paramref name=\"line\"/> within the document <paramref name=\"lineBreaks\"/>.</returns>\r\n        public static Span GetLineSpan(this ILineBreaks/*!*/lineBreaks, int line)\r\n        {\r\n            if (lineBreaks == null)\r\n                throw new ArgumentNullException(\"lineBreaks\");\r\n\r\n            if (line < 0 || line > lineBreaks.Count)\r\n                throw new ArgumentException(\"line\");\r\n\r\n            int start = (line != 0) ? lineBreaks.EndOfLineBreak(line - 1) : 0;\r\n            int end = (line < lineBreaks.Count) ? lineBreaks.EndOfLineBreak(line) : lineBreaks.TextLength;\r\n\r\n            return Span.FromBounds(start, end);\r\n        }\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers/TreeVisitor.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2008 DEVSENSE\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Core.AST\r\n{\r\n    /// <summary>\r\n    /// Class visits recursively each AstNode \r\n    /// </summary>\r\n    public class TreeVisitor\r\n    {\r\n        /// <summary>\r\n        /// Visit language element and all children recursively.\r\n        /// Depth-first search.\r\n        /// </summary>\r\n        /// <param name=\"element\">Any LanguageElement. Can be null.</param>\r\n        public virtual void VisitElement(LangElement element)\r\n        {\r\n            if ( element != null )\r\n                element.VisitMe(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit global scope element and all children.\r\n        /// </summary>\r\n        /// <param name=\"x\">GlobalCode.</param>\r\n        public virtual void VisitGlobalCode(GlobalCode x)\r\n        {\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        #region Statements\r\n\r\n        /// <summary>\r\n        /// Visit statements and catches.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitTryStmt(TryStmt x)\r\n        {\r\n            // visit statements\r\n            VisitStatements(x.Statements);\r\n\r\n            // visit catch blocks\r\n            if (x.Catches != null)\r\n                foreach (CatchItem c in x.Catches)\r\n                    VisitElement(c);\r\n\r\n            // visit finally block\r\n            VisitElement(x.FinallyItem);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit throw expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitThrowStmt(ThrowStmt x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit namespace statements.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitNamespaceDecl(NamespaceDecl x)\r\n        {\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit constant declarations.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitGlobalConstDeclList(GlobalConstDeclList x)\r\n        {\r\n            foreach (GlobalConstantDecl c in x.Constants)\r\n                VisitElement(c);\r\n        }\r\n\r\n        virtual public void VisitGlobalConstantDecl(GlobalConstantDecl x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit statements in given Block Statement.\r\n        /// </summary>\r\n        /// <param name=\"x\">Block statement.</param>\r\n        virtual public void VisitBlockStmt(BlockStmt x)\r\n        {\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit expression in given expression statement.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitExpressionStmt(ExpressionStmt x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n\r\n        virtual public void VisitEmptyStmt(EmptyStmt x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each VariableUse in unset variable list.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitUnsetStmt(UnsetStmt x)\r\n        {\r\n            foreach (VariableUse v in x.VarList)\r\n                VisitElement(v);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each SimpleVarUse in global variable list. \r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitGlobalStmt(GlobalStmt x)\r\n        {\r\n            foreach (SimpleVarUse v in x.VarList)\r\n                VisitElement(v);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each StaticVarDecl in static variable list.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitStaticStmt(StaticStmt x)\r\n        {\r\n            foreach (StaticVarDecl v in x.StVarList)\r\n                VisitElement(v);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visits <c>declare</c> statement and its inner statement.\r\n        /// </summary>\r\n        virtual public void VisitDeclareStmt(DeclareStmt x)\r\n        {\r\n            VisitElement(x.Statement);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit all conditional statements.\r\n        /// See VisitConditionalStmt(ConditionalStmt x).\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIfStmt(IfStmt x)\r\n        {\r\n            foreach (ConditionalStmt c in x.Conditions)\r\n                VisitConditionalStmt(c);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit condition (if ConditionalStmt does not represent else).\r\n        /// Visit statements in ConditionalStmt.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConditionalStmt(ConditionalStmt x)\r\n        {\r\n            if (x.Condition != null) VisitElement(x.Condition);\r\n\r\n            VisitElement(x.Statement);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit type members.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitTypeDecl(TypeDecl x)\r\n        {\r\n            foreach (TypeMemberDecl t in x.Members)\r\n                VisitElement(t);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit method parameters and method body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitMethodDecl(MethodDecl x)\r\n        {\r\n            // method parameters\r\n            foreach (FormalParam p in x.Signature.FormalParams)\r\n                VisitElement(p);\r\n            \r\n            // method body\r\n            VisitStatements(x.Body);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each FieldDecl in the given FieldDeclList.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitFieldDeclList(FieldDeclList x)\r\n        {\r\n            foreach (FieldDecl f in x.Fields)\r\n                VisitElement(f);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit FieldDecl initializer expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitFieldDecl(FieldDecl x)\r\n        {\r\n            VisitElement(x.Initializer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each ClassConstantDecl in ConstDeclList.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConstDeclList(ConstDeclList x)\r\n        {\r\n            foreach (ClassConstantDecl c in x.Constants)\r\n                VisitElement(c);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit given constant and constant initializer expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitClassConstantDecl(ClassConstantDecl x)\r\n        {\r\n            VisitConstantDecl(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit constant initializer expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConstantDecl(ConstantDecl x)\r\n        {\r\n            VisitElement(x.Initializer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit function parameters and function body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitFunctionDecl(FunctionDecl x)\r\n        {\r\n            // function parameters\r\n            foreach (FormalParam p in x.Signature.FormalParams)\r\n                VisitElement(p);\r\n\r\n            // function body\r\n            VisitStatements(x.Body);\r\n        }\r\n\r\n        virtual public void VisitTraitsUse(TraitsUse x)\r\n        {\r\n            // visits adaptation list\r\n            var list = x.TraitAdaptationList;\r\n            if (list != null && list.Any())\r\n                foreach(PHP.Core.AST.TraitsUse.TraitAdaptation t in list)\r\n                    VisitElement(t);\r\n        }\r\n\r\n        virtual public void VisitTraitAdaptationPrecedence(TraitsUse.TraitAdaptationPrecedence x)\r\n        {\r\n\r\n        }\r\n\r\n        virtual public void VisitTraitAdaptationAlias(TraitsUse.TraitAdaptationAlias x)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit expressions in echo statement.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitEchoStmt(EchoStmt x)\r\n        {\r\n            VisitExpressions(x.Parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit all statements in the given list.\r\n        /// </summary>\r\n        /// <param name=\"statements\">Collection of statements to visit.</param>\r\n        private void VisitStatements(IList<Statement> statements)\r\n        {\r\n            if (statements != null)\r\n                foreach (Statement s in statements)\r\n                    VisitElement(s);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit all expressions in the given list.\r\n        /// </summary>\r\n        /// <param name=\"expressions\"></param>\r\n        private void VisitExpressions(ICollection<Expression> expressions)\r\n        {\r\n            if (expressions != null && expressions.Any())\r\n                foreach (Expression e in expressions)\r\n                    VisitElement(e);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Switch statement\r\n\r\n        /// <summary>\r\n        /// Visit switch value and switch items.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitSwitchStmt(SwitchStmt x)\r\n        {\r\n            VisitElement(x.SwitchValue);\r\n\r\n            foreach (SwitchItem item in x.SwitchItems)\r\n                VisitElement(item);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit switch-case item.\r\n        /// Case expression and case body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitCaseItem(CaseItem x)\r\n        {\r\n            VisitElement(x.CaseVal);\r\n\r\n            VisitSwitchItem(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit switch-default item.\r\n        /// Visit case body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitDefaultItem(DefaultItem x)\r\n        {\r\n            VisitSwitchItem(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called by derived objects visitor (CaseItem and DefaultItem).\r\n        /// Visit all statements in SwitchItem.\r\n        /// </summary>\r\n        /// <param name=\"x\">SwitchItem, CaseItem or DefaultItem.</param>\r\n        virtual public void VisitSwitchItem(SwitchItem x)\r\n        {\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Jumps statements\r\n\r\n        virtual public void VisitJumpStmt(JumpStmt x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n        virtual public void VisitGotoStmt(GotoStmt x)\r\n        {\r\n            // x.LabelName\r\n        }\r\n        virtual public void VisitLabelStmt(LabelStmt x)\r\n        {\r\n            // x.Name\r\n        }\r\n        \r\n        #endregion\r\n\r\n        #region  Cycle statements\r\n\r\n        /// <summary>\r\n        /// Visit cycle condition expression and cycle body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitWhileStmt(WhileStmt x)\r\n        {\r\n            VisitElement(x.CondExpr);\r\n            VisitElement(x.Body);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit \"for\" initialization,condition and action expressions.\r\n        /// Visit \"for\" body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitForStmt(ForStmt x)\r\n        {\r\n            VisitExpressions(x.InitExList);\r\n            VisitExpressions(x.CondExList);\r\n            VisitExpressions(x.ActionExList);\r\n\r\n            VisitElement(x.Body);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit enumeree and body.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitForeachStmt(ForeachStmt x)\r\n        {\r\n            VisitElement(x.Enumeree);\r\n            VisitElement(x.Body);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Expressions\r\n\r\n        /*/// <summary>\r\n        /// Called when derived class visited.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitVarLikeConstructUse(VarLikeConstructUse x)\r\n        {\r\n            // base for variable use\r\n        }*/\r\n\r\n        /// <summary>\r\n        /// Called when derived class visited.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConstantUse(ConstantUse x)\r\n        {\r\n            // base for constant use\r\n        }\r\n\r\n        virtual public void VisitDirectVarUse(DirectVarUse x)\r\n        {\r\n            VisitVarLikeConstructUse(x);\r\n        }\r\n        virtual public void VisitGlobalConstUse(GlobalConstUse x)\r\n        {\r\n            VisitConstantUse(x);\r\n        }\r\n        virtual public void VisitClassConstUse(ClassConstUse x)\r\n        {\r\n            VisitElement(x.TypeRef);\r\n            VisitConstantUse(x);\r\n        }\r\n        virtual public void VisitPseudoClassConstUse(PseudoClassConstUse x)\r\n        {\r\n            VisitClassConstUse(x);\r\n        }\r\n        virtual public void VisitPseudoConstUse(PseudoConstUse x)\r\n        {\r\n            // nothing\r\n        }\r\n        virtual public void VisitIndirectVarUse(IndirectVarUse x)\r\n        {\r\n            VisitVarLikeConstructUse(x);\r\n            VisitElement(x.VarNameEx);\r\n        }\r\n\r\n        virtual public void VisitVarLikeConstructUse(VarLikeConstructUse x)\r\n        {\r\n            VisitElement(x.IsMemberOf);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit include target.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIncludingEx(IncludingEx x)\r\n        {\r\n            VisitElement(x.Target);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit each VariableUse in isset variable list.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIssetEx(IssetEx x)\r\n        {\r\n            foreach (VariableUse v in x.VarList)\r\n                VisitElement(v);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit parameter of \"empty\".\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitEmptyEx(EmptyEx x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit parameter of \"eval\".\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitEvalEx(EvalEx x)\r\n        {\r\n            VisitElement(x.Code);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit exit expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitExitEx(ExitEx x)\r\n        {\r\n            VisitElement(x.ResulExpr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit left and right expressions of binary expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitBinaryEx(BinaryEx x)\r\n        {\r\n            VisitElement(x.LeftExpr);\r\n            VisitElement(x.RightExpr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit shell command expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitShellEx(ShellEx x)\r\n        {\r\n            VisitElement(x.Command);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit item use index (if not null) and array.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitItemUse(ItemUse x) \r\n        {\r\n            VisitElement(x.Index);\r\n            VisitElement(x.Array);\r\n\r\n            VisitVarLikeConstructUse(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visits string literal dereferencing.\r\n        /// </summary>\r\n        virtual public void VisitStringLiteralDereferenceEx(StringLiteralDereferenceEx x)\r\n        {\r\n            VisitElement(x.StringExpr);\r\n            VisitElement(x.KeyExpr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when derived class visited.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitFunctionCall(FunctionCall x)\r\n        {\r\n            VisitVarLikeConstructUse(x);\r\n\r\n            foreach (ActualParam p in x.CallSignature.Parameters)\r\n                VisitElement(p);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit function call actual parameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitDirectFcnCall(DirectFcnCall x)\r\n        {\r\n            VisitFunctionCall(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit name expression and actual parameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIndirectFcnCall(IndirectFcnCall x)\r\n        {\r\n            VisitElement(x.NameExpr);\r\n            VisitFunctionCall(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit function call actual parameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitDirectStMtdCall(DirectStMtdCall x)\r\n        {\r\n            VisitElement(x.TypeRef);            \r\n            VisitFunctionCall(x);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit name expression and method call actual parameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIndirectStMtdCall(IndirectStMtdCall x)\r\n        {\r\n            VisitElement(x.TypeRef);            \r\n            VisitElement(x.MethodNameVar);\r\n            VisitFunctionCall(x);\r\n        }\r\n        virtual public void VisitDirectStFldUse(DirectStFldUse x)\r\n        {\r\n            VisitElement(x.TypeRef);\r\n        }\r\n        virtual public void VisitIndirectStFldUse(IndirectStFldUse x)\r\n        {\r\n            VisitElement(x.TypeRef);            \r\n            VisitElement(x.FieldNameExpr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit new array items initializers.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitArrayEx(ArrayEx x)\r\n        {\r\n            foreach (Item item in x.Items)\r\n                VisitArrayItem(item);\r\n        }\r\n\r\n        virtual public void VisitArrayItem(Item item)\r\n        {\r\n            // key\r\n            VisitElement(item.Index);\r\n\r\n            // value\r\n            if (item is ValueItem)\r\n                VisitElement(((ValueItem)item).ValueExpr);\r\n            else\r\n                VisitElement(((RefItem)item).RefToGet);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit conditions.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConditionalEx(ConditionalEx x)\r\n        {\r\n            VisitElement(x.CondExpr);\r\n            VisitElement(x.TrueExpr);\r\n            VisitElement(x.FalseExpr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit variable that is incremented (or decremented).\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitIncDecEx(IncDecEx x)\r\n        {\r\n            VisitElement(x.Variable);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit l-value of assignment.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitAssignEx(AssignEx x)\r\n        {\r\n            VisitElement(x.LValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit left and right values in assignment.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitValueAssignEx(ValueAssignEx x)\r\n        {\r\n            VisitAssignEx(x);\r\n            VisitElement(x.RValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit left and right values in ref assignment.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitRefAssignEx(RefAssignEx x)\r\n        {\r\n            VisitAssignEx(x);\r\n            VisitElement(x.RValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit unary expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitUnaryEx(UnaryEx x)\r\n        {\r\n            VisitElement(x.Expr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit \"new\" call parameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitNewEx(NewEx x)\r\n        {\r\n            VisitElement(x.ClassNameRef);\r\n\r\n            foreach (ActualParam p in x.CallSignature.Parameters)\r\n                VisitElement(p);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit instanceof expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitInstanceOfEx(InstanceOfEx x)\r\n        {\r\n            VisitElement(x.Expression);\r\n            VisitElement(x.ClassNameRef);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit typeof ClassNameRef expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitTypeOfEx(TypeOfEx x)\r\n        {\r\n            VisitElement(x.ClassNameRef);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit expressions in PHP concat.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitConcatEx(ConcatEx x)\r\n        {\r\n            VisitExpressions(x.Expressions);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit list initializer expressions and r-value (if not null)\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitListEx(ListEx x)\r\n        {\r\n            VisitExpressions(x.LValues);\r\n            VisitElement(x.RValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit <see cref=\"LambdaFunctionExpr\"/> expression.\r\n        /// </summary>\r\n        virtual public void VisitLambdaFunctionExpr(LambdaFunctionExpr x)\r\n        {\r\n            // use parameters\r\n            if (x.UseParams != null)\r\n                foreach (var p in x.UseParams)\r\n                    VisitElement(p);\r\n\r\n            // function parameters\r\n            foreach (var p in x.Signature.FormalParams)\r\n                VisitElement(p);\r\n\r\n            // function body\r\n            VisitStatements(x.Body);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit <see cref=\"YieldEx\"/> expression.\r\n        /// </summary>\r\n        virtual public void VisitYieldEx(YieldEx x)\r\n        {\r\n            VisitElement(x.KeyExpr);\r\n            VisitElement(x.ValueExpr);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        virtual public void VisitIntLiteral(IntLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitLongIntLiteral(LongIntLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitDoubleLiteral(DoubleLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitStringLiteral(StringLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitBinaryStringLiteral(BinaryStringLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitBoolLiteral(BoolLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        virtual public void VisitNullLiteral(NullLiteral x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Others\r\n\r\n        /// <summary>\r\n        /// Visit catch. Variable first then body statements.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitCatchItem(CatchItem x)\r\n        {\r\n            VisitElement(x.TypeRef);\r\n            VisitElement(x.Variable);\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit <see cref=\"FinallyItem\"/>.\r\n        /// </summary>\r\n        virtual public void VisitFinallyItem(FinallyItem x)\r\n        {\r\n            VisitStatements(x.Statements);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit static variable declaration, variable name and initializer expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitStaticVarDecl(StaticVarDecl x)\r\n        {\r\n            VisitElement(x.Variable);\r\n            VisitElement(x.Initializer);\r\n        }\r\n\r\n        virtual public void VisitFormalTypeParam(FormalTypeParam x)\r\n        {\r\n            // nothing\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit custom attributes NamedParameters.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitCustomAttribute(CustomAttribute x)\r\n        {\r\n            foreach (NamedActualParam p in x.NamedParameters)\r\n                VisitElement(p);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit formal parameter initializer expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitFormalParam(FormalParam x)\r\n        {\r\n            if (x.InitValue != null)\r\n                VisitElement(x.InitValue);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit actual parameter expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitActualParam(ActualParam x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visit named actual parameter expression.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        virtual public void VisitNamedActualParam(NamedActualParam x)\r\n        {\r\n            VisitElement(x.Expression);\r\n        }\r\n\r\n        virtual public void VisitPrimitiveTypeRef(PrimitiveTypeRef x)\r\n        {\r\n            // nothing\r\n        }\r\n        virtual public void VisitDirectTypeRef(DirectTypeRef x)\r\n        {\r\n            // nothing\r\n        }\r\n        virtual public void VisitIndirectTypeRef(IndirectTypeRef x)\r\n        {\r\n            VisitElement(x.ClassNameVar);\r\n        }\r\n\r\n        virtual public void VisitPHPDocStmt(PHPDocStmt x) { }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Core.Parsers/Utils.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek and Ladislav Prosek.\r\n  \r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Text.RegularExpressions;\r\nusing System.Collections.Specialized; // case-insensitive hashtable\r\nusing System.Runtime.Serialization;\r\nusing System.Reflection;\r\n\r\nnamespace PHP.Core\r\n{\r\n    #region Environment Utils\r\n\r\n    /// <summary>\r\n    /// Utilities related to environment.\r\n    /// </summary>\r\n    public static class EnvironmentUtils\r\n    {\r\n        /// <summary>\r\n        /// Gets whether the CLR runtime is genuine Microsoft .NET Framework.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// There should be as least decisions based on this value as possible.\r\n        /// However, some features are not yet available under Mono.\r\n        /// </remarks>\r\n        public static bool IsDotNetFramework\r\n        {\r\n            get\r\n            {\r\n                if (!isDotNetFramework.HasValue)\r\n                {\r\n                    object[] attrs = typeof(int).Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);\r\n                    isDotNetFramework = (attrs.Length > 0 && ((AssemblyProductAttribute)attrs[0]).Product == \"Microsoft\\x00ae .NET Framework\");\r\n                }\r\n                return (bool)isDotNetFramework;\r\n            }\r\n        }\r\n        private static bool? isDotNetFramework;\r\n\r\n        /// <summary>\r\n        /// Determine if the current OS is Windows.\r\n        /// </summary>\r\n        public static bool IsWindows\r\n        {\r\n            get\r\n            {\r\n                var os = Environment.OSVersion;\r\n                return os.Platform != PlatformID.MacOSX && os.Platform != PlatformID.Unix;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Strings\r\n\r\n    /// <summary>\r\n    /// Unicode category group.\r\n    /// </summary>\r\n    public enum UnicodeCategoryGroup\r\n    {\r\n        None,\r\n        Separators,\r\n        Symbols,\r\n        Punctuations,\r\n        Numbers,\r\n        Marks,\r\n        Letters,\r\n        OtherCharacters\r\n    }\r\n\r\n    /// <summary>\r\n    /// Utilities manipulating strings.\r\n    /// </summary>\r\n    public static class StringUtils\r\n    {\r\n        /// <summary>\r\n        /// Increments a string in a manner of Perl (and also PHP). \r\n        /// </summary>\r\n        /// <param name=\"str\">The string to be incremented.</param>\r\n        /// <returns>The incremented string. </returns>\r\n        /// <remarks>\r\n        /// <para>Single characters are incremented such that '0' changes to '1', ..., '8' to '9' and '9' to '0' \r\n        /// with a carry, 'a' changes to 'b', ..., 'z' to 'a' (with a carry) and finally 'A' to 'B', ..., 'Z' to 'A' \r\n        /// (with a carry). Other characters remain unchanged and generate no carry.</para>\r\n        /// <para>Characters of the <paramref name=\"str\"/> string are incremented starting from the last one\r\n        /// advancing to the beginning of the string and ending when there is no carry generated or no character \r\n        /// available (i.e. we proceeded the first character of the <paramref name=\"str\"/> string). In latter \r\n        /// case appropriate character ('1', 'a' or 'A') is prepended before the result.</para>\r\n        /// </remarks>\r\n        public static string Increment(string str)\r\n        {\r\n            if (str == null) return \"0\";\r\n\r\n            int length = str.Length;\r\n\r\n            // make a copy of a string and allocate one more character to handler \"overflow\":\r\n            StringBuilder result = new StringBuilder(str, 0, length, length + 1);\r\n\r\n            // if length of the string is zero, then '1' will be returned:\r\n            char c = '9';\r\n\r\n            // while there is a carry flag and not all characters of the string \r\n            // are processed do increment the current character:\r\n            for (int i = length - 1; i >= 0; i--)\r\n            {\r\n                c = str[i];\r\n                if (c >= '0' && c <= '8' || c >= 'a' && c <= 'y' || c >= 'A' && c <= 'Y')\r\n                {\r\n                    result[i] = (char)((int)c + 1);\r\n                    break;\r\n                }\r\n                switch (c)\r\n                {\r\n                    case '9': result[i] = '0'; continue;\r\n                    case 'z': result[i] = 'a'; continue;\r\n                    case 'Z': result[i] = 'A'; continue;\r\n                }\r\n                break;\r\n            }\r\n\r\n            // if the last incremented character is '9', 'z' or 'Z' then we must be at the beginning of the string;\r\n            // the string is shifted to the right by one and the first charater is set:\r\n            switch (c)\r\n            {\r\n                case '9': result.Insert(0, new char[] { '1' }); break;\r\n                case 'z': result.Insert(0, new char[] { 'a' }); break;\r\n                case 'Z': result.Insert(0, new char[] { 'A' }); break;\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        public static string/*!*/ AddCSlashes(string/*!*/ str)\r\n        {\r\n            return AddCSlashes(str, true, true, true);\r\n        }\r\n\r\n        public static string/*!*/ AddCSlashes(string/*!*/ str, bool singleQuotes, bool doubleQuotes)\r\n        {\r\n            return AddCSlashes(str, singleQuotes, doubleQuotes, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds slashes before characters '\\\\', '\\0', '\\'' and '\"'.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to add slashes in.</param>\r\n        /// <param name=\"doubleQuotes\">Whether to slash double quotes.</param>\r\n        /// <param name=\"singleQuotes\">Whether to slash single quotes.</param>\r\n        /// <param name=\"nul\">Whether to slash '\\0' character.</param>\r\n        /// <returns>The slashed string.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"str\"/> is a <B>null</B> reference.</exception>\r\n        public static string/*!*/ AddCSlashes(string/*!*/ str, bool singleQuotes, bool doubleQuotes, bool nul)\r\n        {\r\n            if (str == null) throw new ArgumentNullException(\"str\");\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            string double_quotes = doubleQuotes ? \"\\\\\\\"\" : \"\\\"\";\r\n            string single_quotes = singleQuotes ? @\"\\'\" : \"'\";\r\n            string slashed_nul = nul ? \"\\\\0\" : \"\\0\";\r\n\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                char c = str[i];\r\n                switch (c)\r\n                {\r\n                    case '\\\\': result.Append(@\"\\\\\"); break;\r\n                    case '\\0': result.Append(slashed_nul); break;\r\n                    case '\\'': result.Append(single_quotes); break;\r\n                    case '\"': result.Append(double_quotes); break;\r\n                    default: result.Append(c); break;\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Escape characters in toExcape in given string with given escape character.\r\n        /// </summary>\r\n        /// <param name=\"str\">String to escape</param>\r\n        /// <param name=\"toEscape\">Characters to be escaped</param>\r\n        /// <param name=\"escape\">Escape character</param>\r\n        /// <returns>Escaped string.</returns>\r\n        public static string/*!*/ EscapeStringCustom(string/*!*/str, char[]/*!*/toEscape, char escape)\r\n        {\r\n            if (str == null) throw new ArgumentNullException(\"str\");\r\n            if (toEscape == null) throw new ArgumentNullException(\"toEscape\");\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            Dictionary<char, bool> charsToEscape = new Dictionary<char, bool>(toEscape.Length);\r\n            foreach (char c in toEscape) charsToEscape.Add(c, true);\r\n\r\n            foreach (char c in str)\r\n            {\r\n                if (charsToEscape.ContainsKey(c)) result.Append(escape);\r\n\r\n                result.Append(c);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Strips slashes from a string.\r\n        /// </summary>\r\n        /// <param name=\"str\">String.</param>\r\n        /// <returns>\r\n        /// String where slashes are striped away.\r\n        /// Slashed characters with special meaning (\"\\0\") are replaced with their special value.\r\n        /// </returns>\r\n        public static string/*!*/ StripCSlashes(string/*!*/ str)\r\n        {\r\n            if (str == null) throw new ArgumentNullException(\"str\");\r\n            if (str == \"\") return \"\";\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            int i = 0;\r\n            while (i < str.Length - 1)\r\n            {\r\n                if (str[i] == '\\\\')\r\n                {\r\n                    if (str[i + 1] == '0')\r\n                        result.Append('\\0');\r\n                    else\r\n                        result.Append(str[i + 1]); // PHP strips all slashes, not only quotes and slash\r\n\r\n                    i += 2;\r\n                }\r\n                else\r\n                {\r\n                    result.Append(str[i]);\r\n                    i++;\r\n                }\r\n            }\r\n            if (i < str.Length && str[i] != '\\\\')\r\n                result.Append(str[i]);\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds slash before '\\0' character and duplicates apostrophes.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string to add slashes in.</param>\r\n        /// <returns>The slashed string.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"str\"/> is a <B>null</B> reference.</exception>\r\n        public static string/*!*/ AddDbSlashes(string/*!*/ str)\r\n        {\r\n            if (str == null) throw new ArgumentNullException(\"str\");\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                char c = str[i];\r\n                switch (c)\r\n                {\r\n                    case '\\0': result.Append('\\\\'); result.Append('0'); break;\r\n                    case '\\'': result.Append('\\''); result.Append('\\''); break;\r\n                    default: result.Append(c); break;\r\n                }\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces slashed 0 with null character ('\\0') and double apostrophe with single apostrophe. \r\n        /// </summary>\r\n        /// <param name=\"str\">String.</param>\r\n        /// <returns>String with replaced characters.</returns>\r\n        public static string/*!*/ StripDbSlashes(string/*!*/ str)\r\n        {\r\n            if (str == null) throw new ArgumentNullException(\"str\");\r\n\r\n            StringBuilder result = new StringBuilder(str.Length);\r\n\r\n            int i = 0;\r\n            while (i < str.Length - 1)\r\n            {\r\n                if (str[i] == '\\\\' && str[i + 1] == '0')\r\n                {\r\n                    result.Append('\\0');\r\n                    i += 2;\r\n                }\r\n                else if (str[i] == '\\'' && str[i + 1] == '\\'')\r\n                {\r\n                    result.Append('\\'');\r\n                    i += 2;\r\n                }\r\n                else\r\n                {\r\n                    result.Append(str[i]);\r\n                    i++;\r\n                }\r\n            }\r\n            if (i < str.Length)\r\n                result.Append(str[i]);\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a string of bytes into hexadecimal representation.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The string of bytes.</param>\r\n        /// <param name=\"separator\">The separator.</param>\r\n        /// <returns>Concatenation of hexadecimal values of bytes of <paramref name=\"bytes\"/> separated by <paramref name=\"separator\"/>.</returns>\r\n        public static string BinToHex(byte[] bytes, string separator)\r\n        {\r\n            if (bytes == null) return null;\r\n            if (bytes.Length == 0) return String.Empty;\r\n            if (separator == null) separator = String.Empty;\r\n\r\n            int c;\r\n            int length = bytes.Length;\r\n            int sep_length = separator.Length;\r\n            int res_length = length * (2 + sep_length);\r\n\r\n            const string hex_digs = \"0123456789abcdef\";\r\n\r\n            // prepares characters which will be appended to the result for each byte:\r\n            char[] chars = new char[2 + sep_length];\r\n            separator.CopyTo(0, chars, 2, sep_length);\r\n\r\n            // prepares the result:\r\n            StringBuilder result = new StringBuilder(res_length, res_length);\r\n\r\n            // appends characters to the result for each byte:\r\n            for (int i = 0; i < length - 1; i++)\r\n            {\r\n                c = (int)bytes[i];\r\n                chars[0] = hex_digs[(c & 0xf0) >> 4];\r\n                chars[1] = hex_digs[(c & 0x0f)];\r\n                result.Append(chars);\r\n            }\r\n\r\n            // the last byte:\r\n            c = (int)bytes[length - 1];\r\n            result.Append(hex_digs[(c & 0xf0) >> 4]);\r\n            result.Append(hex_digs[(c & 0x0f)]);\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces specified characters in a string with another ones.\r\n        /// </summary>\r\n        /// <param name=\"str\">A string where to do the replacement.</param>\r\n        /// <param name=\"from\">Characters to be replaced.</param>\r\n        /// <param name=\"to\">Characters to replace those in <paramref name=\"from\"/> with.</param>\r\n        /// <remarks>Replaces characters one by one.</remarks>\r\n        internal static string Replace(string str, string from, string to)\r\n        {\r\n            Debug.Assert(from != null && to != null && from.Length == to.Length);\r\n\r\n            StringBuilder result = new StringBuilder(str);\r\n\r\n            for (int i = 0; i < from.Length; i++)\r\n                result.Replace(from[i], to[i]);\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds an index of the first character in which two specified strings differs.\r\n        /// </summary>\r\n        /// <param name=\"str1\">The first string.</param>\r\n        /// <param name=\"str2\">The second string.</param>\r\n        /// <param name=\"ignoreCase\">Whether to ignore case.</param>\r\n        /// <returns>The index of the character or the length of the shortest string one is substring of the other.</returns>\r\n        public static int FirstDifferent(string str1, string str2, bool ignoreCase)\r\n        {\r\n            // GENERICS: replace where used for StartsWith\r\n            return ignoreCase ? FirstDifferentIgnoreCase(str1, str2) : FirstDifferentCaseSensitive(str1, str2);\r\n        }\r\n\r\n        private static int FirstDifferentIgnoreCase(string str1, string str2)\r\n        {\r\n            CultureInfo currentCulture = null;\r\n\r\n            int length = Math.Min(str1.Length, str2.Length);\r\n            char c1, c2;\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                // check the characters case insensitively first, ToLower() is expensive\r\n                // initialize the currentCulture lazily, CultureInfo.CurrentCulture is expensive too\r\n\r\n                if ((c1 = str1[i]) != (c2 = str2[i]) &&\r\n                    (Char.ToLower(c1, currentCulture ?? (currentCulture = CultureInfo.CurrentCulture)) != Char.ToLower(c2, currentCulture)))\r\n                {\r\n                    return i;\r\n                }\r\n            }\r\n            return length;\r\n        }\r\n        private static int FirstDifferentCaseSensitive(string str1, string str2)\r\n        {\r\n            int length = Math.Min(str1.Length, str2.Length);\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                if (str1[i] != str2[i])\r\n                {\r\n                    return i;\r\n                }\r\n            }\r\n            return length;\r\n        }\r\n\r\n        public static int FirstDifferent(char[] str1, int startIndex1, string str2, int startIndex2, bool ignoreCase)\r\n        {\r\n            int i = startIndex1;\r\n            int j = startIndex2;\r\n            int result = 0;\r\n            int limit = Math.Min(str1.Length - startIndex1, str2.Length - startIndex2);\r\n            if (ignoreCase)\r\n            {\r\n                while (result < limit)\r\n                {\r\n                    if (Char.ToLower(str1[i++]) != Char.ToLower(str2[j++])) return result;\r\n                    result++;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                while (result < limit)\r\n                {\r\n                    if (str1[i++] != str2[j++]) return result;\r\n                    result++;\r\n                }\r\n            }\r\n            return result;\r\n        }\r\n\r\n        internal static void StringBuilderAppend(PHP.Core.Parsers.PhpStringBuilder/*!*/ dst, StringBuilder/*!*/ src, int startIndex, int length, Text.Span span)\r\n        {\r\n            dst.Append(src.ToString(startIndex, length), span);\r\n        }\r\n\r\n        public static bool IsAsciiString(string/*!*/ str)\r\n        {\r\n            return IsAsciiString(str, 0, str.Length);\r\n        }\r\n\r\n        public static bool IsAsciiString(string/*!*/ str, int start, int length)\r\n        {\r\n            if (str == null)\r\n                throw new ArgumentNullException(\"str\");\r\n            if (start < 0)\r\n                throw new ArgumentOutOfRangeException(\"start\");\r\n            if (length < 0 || length > str.Length - start)\r\n                throw new ArgumentOutOfRangeException(\"length\");\r\n\r\n            for (int i = start; i < start + length; i++)\r\n            {\r\n                if (str[i] > (char)127)\r\n                    return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds characters of a Unicode designation parsed from the specified string.\r\n        /// </summary>\r\n        /// <param name=\"str\">String containing the property.</param>\r\n        /// <param name=\"pos\">Position where the property code starts.</param>\r\n        /// <param name=\"group\">Group.</param>\r\n        /// <param name=\"category\">Category.</param>\r\n        /// <returns>Length of the parsed property code (0 to 2).</returns>\r\n        public static int ParseUnicodeDesignation(string/*!*/ str, int pos, out UnicodeCategoryGroup group,\r\n          out UnicodeCategory category)\r\n        {\r\n            if (str == null)\r\n                throw new ArgumentNullException(\"str\");\r\n            if (pos < 0)\r\n                throw new ArgumentOutOfRangeException(\"pos\");\r\n\r\n            category = 0;\r\n            group = (UnicodeCategoryGroup)'\\0';\r\n\r\n            if (pos == str.Length) return 0;\r\n\r\n            switch (str[pos])\r\n            {\r\n                case 'C': // Other \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'c': category = UnicodeCategory.Control; return 2;\r\n                            case 'f': category = UnicodeCategory.Format; return 2;\r\n                            case 'n': category = UnicodeCategory.OtherNotAssigned; return 2;\r\n                            case 'o': category = UnicodeCategory.PrivateUse; return 2;\r\n                            case 's': category = UnicodeCategory.Surrogate; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.OtherCharacters;\r\n                    return 1;\r\n\r\n                case 'L': // Letter \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'l': category = UnicodeCategory.LowercaseLetter; return 2;\r\n                            case 'm': category = UnicodeCategory.ModifierLetter; return 2;\r\n                            case 'o': category = UnicodeCategory.OtherLetter; return 2;\r\n                            case 't': category = UnicodeCategory.TitlecaseLetter; return 2;\r\n                            case 'u': category = UnicodeCategory.UppercaseLetter; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Letters;\r\n                    return 1;\r\n\r\n                case 'M': // Mark \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'c': category = UnicodeCategory.SpacingCombiningMark; return 2;\r\n                            case 'e': category = UnicodeCategory.EnclosingMark; return 2;\r\n                            case 'n': category = UnicodeCategory.NonSpacingMark; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Marks;\r\n                    return 1;\r\n\r\n                case 'N': // Number \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'd': category = UnicodeCategory.DecimalDigitNumber; return 2;\r\n                            case 'l': category = UnicodeCategory.LetterNumber; return 2;\r\n                            case 'o': category = UnicodeCategory.OtherNumber; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Numbers;\r\n                    return 1;\r\n\r\n                case 'P': // Punctuation \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'c': category = UnicodeCategory.ConnectorPunctuation; return 2;\r\n                            case 'd': category = UnicodeCategory.DashPunctuation; return 2;\r\n                            case 'e': category = UnicodeCategory.ClosePunctuation; return 2;\r\n                            case 'f': category = UnicodeCategory.FinalQuotePunctuation; return 2;\r\n                            case 'i': category = UnicodeCategory.InitialQuotePunctuation; return 2;\r\n                            case 'o': category = UnicodeCategory.OtherPunctuation; return 2;\r\n                            case 's': category = UnicodeCategory.OpenPunctuation; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Punctuations;\r\n                    return 1;\r\n\r\n                case 'S': // Symbol \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'c': category = UnicodeCategory.CurrencySymbol; return 2;\r\n                            case 'k': category = UnicodeCategory.ModifierSymbol; return 2;\r\n                            case 'm': category = UnicodeCategory.MathSymbol; return 2;\r\n                            case 'o': category = UnicodeCategory.OtherSymbol; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Symbols;\r\n                    return 1;\r\n\r\n                case 'Z': // Separator \r\n                    if (pos + 1 < str.Length)\r\n                    {\r\n                        switch (str[pos + 1])\r\n                        {\r\n                            case 'l': category = UnicodeCategory.LineSeparator; return 2;\r\n                            case 'p': category = UnicodeCategory.ParagraphSeparator; return 2;\r\n                            case 's': category = UnicodeCategory.SpaceSeparator; return 2;\r\n                        }\r\n                    }\r\n                    group = UnicodeCategoryGroup.Separators;\r\n                    return 1;\r\n            }\r\n            return 0;\r\n        }\r\n\r\n        internal static bool IsWhitespace(string/*!*/ str)\r\n        {\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                if (!Char.IsWhiteSpace(str[i]))\r\n                    return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n\r\n        internal static bool IsWhiteSpace(byte b)\r\n        {\r\n            return b == ' ' || (b >= '\\t' && b <= '\\r') || b == '\\u00a0' || b == '\\u0085';\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if binary data can be converted a number\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The bytes to checked.</param>\r\n        /// <returns>Returns true if bytes can be converted to a number.</returns>\r\n        internal static bool IsConvertableToNumber(byte[] bytes)\r\n        {\r\n            int state = 0;\r\n            byte b;\r\n\r\n            for (int i = 0; i < bytes.Length; i++)\r\n            {\r\n                b = bytes[i];\r\n\r\n                switch (state)\r\n                {\r\n                    case 0: // expecting whitespaces to be skipped\r\n                        {\r\n                            if (!IsWhiteSpace(b))\r\n                            {\r\n                                state = 1;\r\n                                goto case 1;\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                    case 1:\r\n                        {\r\n\r\n                            if (b >= '0' && b <= '9')\r\n                            {\r\n                                //it's a number\r\n                                return true;\r\n                            }\r\n\r\n                            if (b == '-')//sign\r\n                            {\r\n                                state = 2;\r\n                                break;\r\n                            }\r\n\r\n                            if (b == '+')//sign\r\n                            {\r\n                                state = 2;\r\n                                break;\r\n                            }\r\n\r\n                            // switch to decimals in next turn:\r\n                            if (b == '.')\r\n                            {\r\n                                state = 2;\r\n                                break;\r\n                            }\r\n\r\n                            //it's not a valid number\r\n                            return false;\r\n\r\n                        }\r\n\r\n                    case 2:\r\n                        {\r\n                            if (b >= '0' && b <= '9')\r\n                            {\r\n                                //it's a number\r\n                                return true;\r\n                            }\r\n\r\n                            //it's not a valid number\r\n                            return false;\r\n                        }\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// <see cref=\"Char.ConvertFromUtf32\"/> is missing from Mono so we must implement it by ourselves.\r\n        /// </summary>\r\n        internal static string Utf32ToString(int codePoint)\r\n        {\r\n            // MONO BUG:\r\n            // replace by Char.ConvertFromUtf32 when implemented in Mono\r\n\r\n            if (codePoint < 0x10000)\r\n                return char.ToString((char)((ushort)codePoint));\r\n\r\n            codePoint -= 0x10000;\r\n            return new string(new char[] { (char)((codePoint / 0x400) + 0xd800), (char)((codePoint % 0x400) + 0xdc00) });\r\n        }\r\n\r\n        #region Uniform Wrappers\r\n\r\n        // NOTE: It is not multibyte safe to work with these wrappers.\r\n\r\n        public abstract class UniformWrapper\r\n        {\r\n            public abstract char this[int index] { get; }\r\n            public abstract int Length { get; }\r\n            public abstract object/*!*/ Value { get; }\r\n\r\n            public virtual bool HasBuilder { get { return false; } }\r\n\r\n            public virtual UniformBuilder GetBuilder()\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            public virtual UniformBuilder GetBuilder(int capacity)\r\n            {\r\n                throw new NotSupportedException();\r\n            }\r\n\r\n            #region Implicit Casts\r\n\r\n            public static implicit operator UniformWrapper(string str)\r\n            {\r\n                return (str != null) ? new StringWrapper(str) : null;\r\n            }\r\n\r\n            public static implicit operator UniformWrapper(byte[] bytes)\r\n            {\r\n                return (bytes != null) ? new BytesWrapper(bytes) : null;\r\n            }\r\n\r\n            public static implicit operator UniformWrapper(char[] chars)\r\n            {\r\n                return (chars != null) ? new CharsWrapper(chars) : null;\r\n            }\r\n\r\n            public static implicit operator UniformWrapper(StringBuilder builder)\r\n            {\r\n                return (builder != null) ? new StringBuilderWrapper(builder) : null;\r\n            }\r\n\r\n            public static implicit operator string(UniformWrapper wrapper)\r\n            {\r\n                return (wrapper != null) ? (string)wrapper.Value : null;\r\n            }\r\n\r\n            public static implicit operator byte[](UniformWrapper wrapper)\r\n            {\r\n                return (wrapper != null) ? (byte[])wrapper.Value : null;\r\n            }\r\n\r\n            public static implicit operator char[](UniformWrapper wrapper)\r\n            {\r\n                return (wrapper != null) ? (char[])wrapper.Value : null;\r\n            }\r\n\r\n            public static implicit operator StringBuilder(UniformWrapper wrapper)\r\n            {\r\n                return (wrapper != null) ? (StringBuilder)wrapper.Value : null;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        public abstract class UniformBuilder\r\n        {\r\n            public abstract UniformWrapper ToWrapper();\r\n            public abstract void Append(char c);\r\n\r\n            public void Append(string s)\r\n            {\r\n                foreach (char c in s)\r\n                    Append(c);\r\n            }\r\n        }\r\n\r\n        public sealed class BytesWrapper : UniformWrapper\r\n        {\r\n            private byte[]/*!*/ bytes;\r\n\r\n            public override object Value\r\n            {\r\n                get { return bytes; }\r\n            }\r\n\r\n            public override char this[int index]\r\n            {\r\n                get { return (char)bytes[index]; }\r\n            }\r\n\r\n            public override int Length\r\n            {\r\n                get { return bytes.Length; }\r\n            }\r\n\r\n            public override bool HasBuilder { get { return true; } }\r\n\r\n            public BytesWrapper(byte[]/*!*/ bytes)\r\n            {\r\n                Debug.Assert(bytes != null);\r\n                this.bytes = bytes;\r\n            }\r\n\r\n            public override UniformBuilder GetBuilder()\r\n            {\r\n                return new Builder(new MemoryStream());\r\n            }\r\n\r\n            public override UniformBuilder GetBuilder(int capacity)\r\n            {\r\n                return new Builder(new MemoryStream(capacity));\r\n            }\r\n\r\n            #region Nested Class: Builder\r\n\r\n            public sealed class Builder : UniformBuilder\r\n            {\r\n                private MemoryStream stream;\r\n\r\n                public Builder(MemoryStream stream)\r\n                {\r\n                    this.stream = stream;\r\n                }\r\n\r\n                public override void Append(char c)\r\n                {\r\n                    stream.WriteByte((byte)c);\r\n                }\r\n\r\n                public override UniformWrapper ToWrapper()\r\n                {\r\n                    return new BytesWrapper(stream.ToArray());\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        public sealed class CharsWrapper : UniformWrapper\r\n        {\r\n            private char[]/*!*/ chars;\r\n\r\n            public override object Value\r\n            {\r\n                get { return chars; }\r\n            }\r\n\r\n            public override char this[int index] { get { return chars[index]; } }\r\n\r\n            public override int Length { get { return chars.Length; } }\r\n\r\n            public CharsWrapper(char[]/*!*/ chars)\r\n            {\r\n                Debug.Assert(chars != null);\r\n                this.chars = chars;\r\n            }\r\n        }\r\n\r\n        public sealed class StringWrapper : UniformWrapper\r\n        {\r\n            private string/*!*/ str;\r\n\r\n            public override char this[int index] { get { return str[index]; } }\r\n\r\n            public override int Length { get { return str.Length; } }\r\n\r\n            public override bool HasBuilder { get { return true; } }\r\n\r\n            public override object Value\r\n            {\r\n                get { return str; }\r\n            }\r\n\r\n            public StringWrapper(string str)\r\n            {\r\n                Debug.Assert(str != null);\r\n                this.str = str;\r\n            }\r\n\r\n            public override UniformBuilder GetBuilder()\r\n            {\r\n                return new Builder(new StringBuilder());\r\n            }\r\n\r\n            public override UniformBuilder GetBuilder(int capacity)\r\n            {\r\n                return new Builder(new StringBuilder(capacity));\r\n            }\r\n\r\n            #region Nested Class: Builder\r\n\r\n            public sealed class Builder : UniformBuilder\r\n            {\r\n                private System.Text.StringBuilder builder;\r\n\r\n                public Builder(System.Text.StringBuilder builder)\r\n                {\r\n                    this.builder = builder;\r\n                }\r\n\r\n                public override void Append(char c)\r\n                {\r\n                    builder.Append(c);\r\n                }\r\n\r\n                public override UniformWrapper ToWrapper()\r\n                {\r\n                    return new StringWrapper(builder.ToString());\r\n                }\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        public sealed class StringBuilderWrapper : UniformWrapper\r\n        {\r\n            private StringBuilder/*!*/ builder;\r\n\r\n            public override char this[int index] { get { return builder[index]; } }\r\n\r\n            public override int Length { get { return builder.Length; } }\r\n\r\n            public StringBuilderWrapper(StringBuilder builder)\r\n            {\r\n                Debug.Assert(builder != null);\r\n                this.builder = builder;\r\n            }\r\n\r\n            public override object Value\r\n            {\r\n                get { return builder; }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        internal static string ToClsCompliantIdentifier(string/*!*/ name)\r\n        {\r\n            if (String.IsNullOrEmpty(name))\r\n                throw new ArgumentNullException(\"name\");\r\n\r\n            StringBuilder result = new StringBuilder(name.Length);\r\n\r\n            if (name[0] >= 'a' && name[0] <= 'z' || name[0] >= 'A' && name[0] <= 'Z' || name[0] == '_')\r\n                result.Append(name[0]);\r\n\r\n            for (int i = 1; i < name.Length; i++)\r\n            {\r\n                if (name[i] >= '0' && name[i] <= '9' || name[i] >= 'a' && name[i] <= 'z' || name[i] >= 'A' && name[i] <= 'Z'\r\n                    || name[i] == '_')\r\n                {\r\n                    result.Append(name[i]);\r\n                }\r\n            }\r\n\r\n            return (result.Length > 0) ? result.ToString() : \"_\";\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compare two strings ordinally (which is ok for ascii strings) case insensitively.\r\n        /// </summary>\r\n        /// <param name=\"self\">First string.</param>\r\n        /// <param name=\"str\">Second string.</param>\r\n        /// <returns>True iff two given strings are equals when using <see cref=\"StringComparison.OrdinalIgnoreCase\"/>.</returns>\r\n        public static bool EqualsOrdinalIgnoreCase(this string self, string str)\r\n        {\r\n            return string.Equals(self, str, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the specified character to uppercase.\r\n        /// Changes only characters between 'a' and 'z'.\r\n        /// </summary>\r\n        public static char ToUpperAsciiInvariant(this char c)\r\n        {\r\n            if ('a' <= c && c <= 'z')\r\n            {\r\n                c = (char)((int)c & -33);\r\n            }\r\n            return c;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns last character of string or -1 if empty\r\n        /// </summary>\r\n        /// <param name=\"str\">String</param>\r\n        /// <returns>Last character of string or -1 if empty</returns>\r\n        public static int LastCharacter(this string/*!*/ str)\r\n        {\r\n            return str.Length == 0 ? -1 : str[str.Length - 1];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Counts characters within the string.\r\n        /// </summary>\r\n        public static int CharsCount(this string str, char c)\r\n        {\r\n            if (str == null)\r\n                return 0;\r\n\r\n            int count = 0;\r\n            for (int i = 0; i < str.Length; i++)\r\n                if (str[i] == c)\r\n                    count++;\r\n\r\n            return count;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces specified portion of <see cref=\"StringBuilder\"/> by <paramref name=\"replacement\"/>.\r\n        /// </summary>\r\n        /// <param name=\"str\"><see cref=\"StringBuilder\"/> instance.</param>\r\n        /// <param name=\"startIndex\">Where to start replacing.</param>\r\n        /// <param name=\"length\">Amount of characters to replace.</param>\r\n        /// <param name=\"replacement\">Replacement.</param>\r\n        /// <returns>Reference to <paramref name=\"str\"/>.</returns>\r\n        public static StringBuilder/*!*/Replace(this StringBuilder/*!*/str, int startIndex, int length, string replacement)\r\n        {\r\n            if (string.IsNullOrEmpty(replacement))\r\n            {\r\n                str.Remove(startIndex, length);\r\n            }\r\n            else if (length == 1 && replacement.Length == 1)\r\n            {\r\n                str[startIndex] = replacement[0];\r\n            }\r\n            else\r\n            {\r\n                str.Remove(startIndex, length);\r\n                str.Insert(startIndex, replacement);\r\n            }\r\n\r\n            return str;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region CollectionUtils, ListUtils\r\n\r\n    /// <summary>\r\n    /// A few useful methods working with collections.\r\n    /// </summary>\r\n    public static class CollectionUtils\r\n    {\r\n        /// <summary>\r\n        /// Determines whether a specified collection of strings contains a string.\r\n        /// </summary>\r\n        /// <param name=\"collection\">The enumerable collection of strings.</param>\r\n        /// <param name=\"str\">The string to search for.</param>\r\n        /// <param name=\"ignoreCase\">Whether to compare case-insensitively.</param>\r\n        /// <returns>Whether the collection contains <paramref name=\"str\"/>.</returns>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"collection\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"InvalidCastException\"><paramref name=\"collection\"/> contains a non-string.</exception>\r\n        public static bool ContainsString(IEnumerable/*!*/ collection, string str, bool ignoreCase)\r\n        {\r\n            if (collection == null)\r\n                throw new ArgumentNullException(\"collection\");\r\n\r\n            foreach (string item in collection)\r\n            {\r\n                if (String.Compare(item, str, StringComparison.CurrentCultureIgnoreCase) == 0)\r\n                    return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns an index of the last set bit in a bitmap.\r\n        /// </summary>\r\n        /// <param name=\"bitmap\">The bitmap to search in.</param>\r\n        /// <returns>The index of the last bit which is set.</returns>\r\n        public static int GetLastSet(BitArray bitmap)\r\n        {\r\n            int result = bitmap.Count - 1;\r\n            while (result >= 0 && !bitmap[result]) result--;\r\n            return result;\r\n        }\r\n\r\n        public static int IncrementValue<TKey>(Dictionary<TKey, int>/*!*/ dictionary, TKey key, int amount)\r\n        {\r\n            int value = 0;\r\n            dictionary.TryGetValue(key, out value);\r\n            dictionary[key] = value + 1;\r\n            return value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates dictionary from two enumerators.\r\n        /// </summary>\r\n        public static IDictionary<T, K> JoinDictionary<T, K>(IEnumerable<T> keys, IEnumerable<K> values)\r\n        {\r\n            Dictionary<T, K> ret = new Dictionary<T, K>();\r\n            IEnumerator<T> ek = keys.GetEnumerator();\r\n            IEnumerator<K> ev = values.GetEnumerator();\r\n\r\n            bool en, vn;\r\n            while ((en = ek.MoveNext()) == (vn = ev.MoveNext()))\r\n            {\r\n                if (!en) return ret;\r\n                ret.Add(ek.Current, ev.Current);\r\n            }\r\n            throw new InvalidOperationException(\"Joining collections of incompatible size!\");\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Creates dictionary with all items from the <paramref name=\"values\"/> collection. \r\n        /// The key of returned dictionary is list of values of type <typeparamref name=\"K\"/>.\r\n        /// </summary>\r\n        public static IDictionary<T, IList<K>> BuildListDictionary<T, K>(IEnumerable<T> keys, IEnumerable<K> values)\r\n        {\r\n            Dictionary<T, IList<K>> ret = new Dictionary<T, IList<K>>();\r\n            IEnumerator<T> ek = keys.GetEnumerator();\r\n            IEnumerator<K> ev = values.GetEnumerator();\r\n\r\n            bool en, vn;\r\n            while ((en = ek.MoveNext()) == (vn = ev.MoveNext()))\r\n            {\r\n                if (!en) return ret;\r\n\r\n                IList<K> tmp;\r\n                if (!ret.TryGetValue(ek.Current, out tmp))\r\n                    ret.Add(ek.Current, tmp = new List<K>());\r\n                tmp.Add(ev.Current);\r\n            }\r\n            throw new InvalidOperationException(\"Joining collections of incompatible size!\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Filters a collection <paramref name=\"en\"/> using a function <paramref name=\"f\"/>\r\n        /// </summary>\r\n        public static IEnumerable<T> Filter<T>(IEnumerable<T> en, Func<T, bool> f)\r\n        {\r\n            foreach (T el in en) if (f(el)) yield return el;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether the collection is not empty.\r\n        /// </summary>\r\n        public static bool Any<T>(this ICollection<T> list)\r\n        {\r\n            return list != null && list.Count != 0;\r\n        }\r\n    }\r\n    \r\n    /// <summary>\r\n    /// Extension methods for <see cref=\"IList\"/>.\r\n    /// </summary>\r\n    public static class ListUtils\r\n    {\r\n        /// <summary>\r\n        /// Searches for the specified object and returns the zero-based index of the first occurrence\r\n        /// within the entire <paramref name=\"list\"/>.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of list elements.</typeparam>\r\n        /// <param name=\"list\">List to search in.</param>\r\n        /// <param name=\"item\">Item to search for.</param>\r\n        /// <param name=\"comparer\">Comparer to be used.</param>\r\n        /// <returns>The zero-based index of the first occurrence of <paramref name=\"item\" /> within the entire <paramref name=\"list\"/>, if found; otherwise, 1.</returns>\r\n        public static int IndexOf<T>(this IList<T>/*!*/list, T item, IEqualityComparer<T>/*!*/comparer)\r\n        {\r\n            Debug.Assert(list != null);\r\n            Debug.Assert(comparer != null);\r\n\r\n            for (int i = 0; i < list.Count; i++)\r\n                if (comparer.Equals(list[i], item))\r\n                    return i;\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes the last item from the list.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of list items.</typeparam>\r\n        /// <param name=\"list\">LIst to remove from.</param>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\"><paramref name=\"list\"/> has no items.</exception>\r\n        public static void RemoveLast<T>(this IList<T>/*!*/list)\r\n        {\r\n            list.RemoveAt(list.Count - 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the last element of given list.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of the list elements.</typeparam>\r\n        /// <param name=\"list\">List.</param>\r\n        /// <returns>Last element of given list.</returns>\r\n        public static T Last<T>(this IList<T>/*!*/list)\r\n        {\r\n            return list[list.Count - 1];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether the list is not empty.\r\n        /// </summary>\r\n        public static bool Any<T>(this List<T> list)\r\n        {\r\n            return list != null && list.Count != 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copies entries into new array, or gets empty array if the collection is empty.\r\n        /// </summary>\r\n        public static T[]/*!*/AsArray<T>(this IList<T> list)\r\n        {\r\n            T[] result = list as T[];\r\n\r\n            if (result == null)\r\n            {\r\n                if (list.Any())\r\n                {\r\n                    result = new T[list.Count];\r\n                    list.CopyTo(result, 0);\r\n                }\r\n                else\r\n                {\r\n                    result = EmptyArray<T>.Instance;\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Arrays\r\n\r\n    /// <summary>\r\n    /// Helper for an empty array instance.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">Type of array elements.</typeparam>\r\n    public static class EmptyArray<T>\r\n    {\r\n        /// <summary>\r\n        /// Singleton instance of empty array of <typeparamref name=\"T\"/>.\r\n        /// </summary>\r\n        public static T[]/*!*/Instance\r\n        {\r\n            get\r\n            {\r\n                if (_instance == null)\r\n                    _instance = new T[0];\r\n                return _instance;\r\n            }\r\n        }\r\n        private static volatile T[] _instance;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Utilities manipulating arrays.\r\n    /// </summary>\r\n    [DebuggerNonUserCode]\r\n    public static class ArrayUtils\r\n    {\r\n        /// <summary>\r\n        /// Empty int array.\r\n        /// </summary>\r\n        public static int[] EmptyIntegers { get { return EmptyArray<int>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Empty ushort array.\r\n        /// </summary>\r\n        public static ushort[] EmptyUShorts { get { return EmptyArray<ushort>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Empty object array.\r\n        /// </summary>\r\n        public static object[] EmptyObjects { get { return EmptyArray<object>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Empty byte array.\r\n        /// </summary>\r\n        public static byte[] EmptyBytes { get { return EmptyArray<byte>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Empty <see cref=\"string\"/> array.\r\n        /// </summary>\r\n        public static string[] EmptyStrings { get { return EmptyArray<string>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Converts a <see cref=\"IList\"/> to an array of strings.\r\n        /// </summary>\r\n        /// <param name=\"list\">The list of strings.</param>\r\n        /// <returns>The array of strings.</returns>\r\n        /// <exception cref=\"InvalidCastException\">An item of <paramref name=\"list\"/> is not a string.</exception>\r\n        public static string[] ToStringArray(IList list)\r\n        {\r\n            if (list == null || list.Count == 0) return ArrayUtils.EmptyStrings;\r\n\r\n            string[] result = new string[list.Count];\r\n            for (int i = 0; i < list.Count; i++)\r\n                result[i] = (string)list[i];\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts an array of bytes to a string.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The array of bytes.</param>\r\n        /// <returns>The string which characters contains items of bytes array. \r\n        /// The higher bytes of characters are zeroes the lower ones are copied from the bytes array.</returns>\r\n        public unsafe static string ToString(byte[] bytes)\r\n        {\r\n            if (bytes == null) return null;\r\n            int length = bytes.Length;\r\n            if (length == 0) return String.Empty;\r\n\r\n            fixed (byte* ptr = bytes)\r\n            {\r\n                return new String((char*)ptr, 0, length);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for specified character in sorted array of characters.\r\n        /// </summary>\r\n        /// <param name=\"array\">The array to search in.</param>\r\n        /// <param name=\"c\">The character to search for.</param>\r\n        /// <returns>The position of the <paramref name=\"c\"/> in <paramref name=\"array\"/> or -1 if not found.</returns>\r\n        public static int BinarySearch(char[] array, char c)\r\n        {\r\n            if (array == null)\r\n                throw new ArgumentNullException(\"array\");\r\n\r\n            int i = 0;\r\n            int j = array.Length - 1;\r\n            while (i < j)\r\n            {\r\n                int m = (i + j) >> 1;\r\n                char cm = array[m];\r\n                if (c == cm) return m;\r\n\r\n                if (c > cm)\r\n                {\r\n                    i = m + 1;\r\n                }\r\n                else\r\n                {\r\n                    j = m - 1;\r\n                }\r\n            }\r\n            return (array[i] == c) ? i : -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fills a portion of an array of bytes by specified byte.\r\n        /// </summary>\r\n        /// <param name=\"array\">The array to fill.</param>\r\n        /// <param name=\"value\">The value to fill the array with.</param>\r\n        /// <param name=\"offset\">The index of the first byte to be set.</param>\r\n        /// <param name=\"count\">The number of bytes to be set.</param>\r\n        /// <remarks>This method uses fast unsafe filling of memory with bytes.</remarks>\r\n        public unsafe static void Fill(byte[] array, byte value, int offset, int count)\r\n        {\r\n            if (array == null)\r\n                throw new ArgumentNullException(\"array\");\r\n            if (offset < 0 || offset + count > array.Length)\r\n                throw new ArgumentOutOfRangeException(\"offset\");\r\n            if (count < 0)\r\n                throw new ArgumentOutOfRangeException(\"length\");\r\n            if (array.Length == 0)\r\n                return;\r\n\r\n#if SILVERLIGHT\r\n            for (int i = offset; i < count + offset; i++)\r\n                array[i] = value;\r\n#else\r\n            fixed (byte* ptr = &array[offset])\r\n            {\r\n                for (int i = 0; i < count; i++)\r\n                    ptr[i] = value;\r\n                //Utils.MemFill(ptr, value, count);\r\n            }\r\n#endif\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create copy of given array without the last item.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"array\"></param>\r\n        /// <returns></returns>\r\n        internal static T[] RemoveLast<T>(T[] array)\r\n        {\r\n            T[] array2 = new T[array.Length - 1];\r\n            Array.Copy(array, 0, array2, 0, array2.Length);\r\n            return array2;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compare arrays lexicographically.\r\n        /// </summary>\r\n        /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"x\"/> or <paramref name=\"y\"/> are <B>null</B>.</exception>\r\n        unsafe public static int Compare(byte[] x, byte[] y)\r\n        {\r\n            if (x == null) throw new ArgumentNullException(\"x\");\r\n            if (y == null) throw new ArgumentNullException(\"y\");\r\n\r\n            int length = Math.Min(x.Length, y.Length);\r\n\r\n            fixed (byte* pinned_x = x, pinned_y = y)\r\n            {\r\n                byte* ptr_x = pinned_x, ptr_y = pinned_y;\r\n\r\n                for (int i = 0; i < length; i++, ptr_x++, ptr_y++)\r\n                {\r\n                    if (*ptr_x != *ptr_y)\r\n                        return (int)*ptr_y - *ptr_x;\r\n                }\r\n            }\r\n            return x.Length - y.Length;\r\n        }\r\n\r\n        unsafe public static int Compare(byte[]/*!*/x_bytes, byte[]/*!*/y_bytes, int length)\r\n        {\r\n            Debug.Assert(x_bytes != null && y_bytes != null);\r\n            Debug.Assert(length <= x_bytes.Length && length <= y_bytes.Length);\r\n\r\n            fixed (byte* x = x_bytes, y = y_bytes)\r\n            {\r\n                return ArrayUtils.Compare(x, y, length);\r\n            }\r\n        }\r\n\r\n        unsafe public static int Compare(byte* x, byte* y, int length)\r\n        {\r\n            for (int i = 0; i < length; i++, x++, y++)\r\n            {\r\n                if (*x != *y)\r\n                    return (int)*y - *x;\r\n            }\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two IEquatable objects. They can be null, the method will safely checks the references first.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"x\"></param>\r\n        /// <param name=\"y\"></param>\r\n        /// <returns></returns>\r\n        private static bool Equals<T>(T x, T y) where T : IEquatable<T>\r\n        {\r\n            if (object.ReferenceEquals(x, y))\r\n                return true;\r\n\r\n            if (object.ReferenceEquals(x, null) ^ object.ReferenceEquals(y, null))\r\n                return false;\r\n\r\n            return x.Equals(y);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compares two arrays of objects of type T. The method returns true if array are the same reference or they have the same length and single values matches.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of elements of arrays.</typeparam>\r\n        /// <param name=\"x\">First array</param>\r\n        /// <param name=\"y\">Second array.</param>\r\n        /// <returns>True if arrays contains same objects, compared using <c>IEquatable.Equals</c>.</returns>\r\n        public static bool Equals<T>(T[] x, T[] y) where T : IEquatable<T>\r\n        {\r\n            if (object.ReferenceEquals(x, y))\r\n                return true;\r\n\r\n            if (object.ReferenceEquals(x, null) ^ object.ReferenceEquals(y, null))\r\n                return false;\r\n\r\n            if (x.Length != y.Length)\r\n                return false;\r\n\r\n            for (int i = 0; i < x.Length; ++i)\r\n                if (!Equals<T>(x[i], y[i]))\r\n                    return false;\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Compare arrays of <see cref=\"Type\"/> reference.\r\n        /// </summary>\r\n        /// <param name=\"x\"></param>\r\n        /// <param name=\"y\"></param>\r\n        /// <returns>True if <paramref name=\"x\"/> and <paramref name=\"y\"/> references are equal or single elements matches.</returns>\r\n        public static bool Equals(Type[] x, Type[] y)\r\n        {\r\n            if (object.ReferenceEquals(x, y))\r\n                return true;\r\n\r\n            if (object.ReferenceEquals(x, null) ^ object.ReferenceEquals(y, null))\r\n                return false;\r\n\r\n            if (x.Length != y.Length)\r\n                return false;\r\n\r\n            for (int i = 0; i < x.Length; ++i)\r\n                if (x[i] != y[i])\r\n                    return false;\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns an array of indices of items in an array which are equal to or not equal to the specified value.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">The array of values. Assumes that length of the array is less or equal to 256.</param>\r\n        /// <param name=\"value\">The filtered value.</param>\r\n        /// <param name=\"inequality\">Determines whether to compare for inequality or equality.</param>\r\n        /// <returns>The array of indices.</returns>\r\n        internal static byte[] GetValueIndices(int[] bytes, int value, bool inequality)\r\n        {\r\n            Debug.Assert(bytes.Length <= 256);\r\n            Debug.Assert(bytes != null);\r\n\r\n            int length = bytes.Length;\r\n\r\n            // computes new array's length:\r\n            int count = 0;\r\n            for (int i = 0; i < length; i++)\r\n                if (bytes[i] == value) count++;\r\n            if (inequality) count = length - count;\r\n\r\n            // creates new array:\r\n            byte[] result = new byte[count];\r\n\r\n            // fills new array:\r\n            if (!inequality)\r\n            {\r\n                for (int i = 0, j = 0; i < length; i++)\r\n                    if (bytes[i] == value)\r\n                        result[j++] = (byte)i;\r\n\r\n            }\r\n            else\r\n            {\r\n                for (int i = 0, j = 0; i < length; i++)\r\n                    if (bytes[i] != value)\r\n                        result[j++] = (byte)i;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concats two arrays of <typeparamref name=\"T\"/>.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first array of <typeparamref name=\"T\"/> to be concatenated.</param>\r\n        /// <param name=\"y\">The second array of <typeparamref name=\"T\"/> to be concatenated.</param>\r\n        /// <returns>The concatenation of <paramref name=\"x\"/> and <paramref name=\"y\"/>.</returns>\r\n        public static T[]/*!*/ Concat<T>(T[]/*!*/ x, T[]/*!*/ y)\r\n        {\r\n            if (x == null) throw new ArgumentNullException(\"x\");\r\n            if (y == null) throw new ArgumentNullException(\"y\");\r\n\r\n            T[] result = new T[x.Length + y.Length];\r\n\r\n            Array.Copy(x, 0, result, 0, x.Length);\r\n            Array.Copy(y, 0, result, x.Length, y.Length);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concats array of <typeparamref name=\"T\"/> with single <typeparamref name=\"T\"/> element.\r\n        /// </summary>\r\n        /// <param name=\"x\">The array of <typeparamref name=\"T\"/> to be concatenated.</param>\r\n        /// <param name=\"y\">The element of <typeparamref name=\"T\"/> to be appended.</param>\r\n        /// <returns>The concatenation of <paramref name=\"x\"/> and <paramref name=\"y\"/>.</returns>\r\n        public static T[]/*!*/ Concat<T>(T[] x, T y)\r\n        {\r\n            if (x == null || x.Length == 0)\r\n                return new T[] { y };\r\n\r\n            if (x.Length == 1)\r\n                return new T[] { x[0], y };\r\n\r\n            //\r\n            T[] result = new T[x.Length + 1];\r\n\r\n            Array.Copy(x, 0, result, 0, x.Length);\r\n            result[x.Length] = y;\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concats array of <typeparamref name=\"T\"/> with single <typeparamref name=\"T\"/> element.\r\n        /// </summary>\r\n        public static T[]/*!*/Concat<T>(T x, T[] y)\r\n        {\r\n            T[] result;\r\n\r\n            if (y.Any())\r\n            {\r\n                result = new T[1 + y.Length];\r\n                result[0] = x;\r\n                Array.Copy(y, 0, result, 1, y.Length);\r\n            }\r\n            else\r\n            {\r\n                result = new T[] { x };\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Concats two arrays of bytes.\r\n        /// </summary>\r\n        /// <param name=\"x\">The first array of bytes to be concatenated.</param>\r\n        /// <param name=\"y\">The second array of bytes to be concatenated.</param>\r\n        /// <returns>The concatenation of <paramref name=\"x\"/> and <paramref name=\"y\"/>.</returns>\r\n        public static byte[]/*!*/ Concat(byte[]/*!*/ x, byte[]/*!*/ y)\r\n        {\r\n            if (x == null) throw new ArgumentNullException(\"x\");\r\n            if (y == null) throw new ArgumentNullException(\"y\");\r\n\r\n            byte[] result = new byte[x.Length + y.Length];\r\n\r\n            Buffer.BlockCopy(x, 0, result, 0, x.Length);\r\n            Buffer.BlockCopy(y, 0, result, x.Length, y.Length);\r\n\r\n            return result;\r\n        }\r\n\r\n#if SILVERLIGHT\r\n\t\t/// <summary>\r\n\t\t/// Finds the first occurence of a specified byte in an array.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"haystack\">The array to search.</param>\r\n\t\t/// <param name=\"needle\">The data to look for.</param>\r\n\t\t/// <param name=\"from\">First offset to look at for the <paramref name=\"needle\"/>.</param>\r\n\t\t/// <returns>The index of the first occurence of <paramref name=\"needle\"/> or <c>-1</c> if not found.</returns>\r\n\t\tpublic static int IndexOf(byte[] haystack, byte needle, int from)\r\n\t\t{\r\n\t\t\tfor(int i = from; i<haystack.Length; i++)\r\n\t\t\t\tif (haystack[i] == needle) return i;\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n#else\r\n        /// <summary>\r\n        /// Finds the first occurrence of a specified byte in an array.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The array to search.</param>\r\n        /// <param name=\"needle\">The data to look for.</param>\r\n        /// <param name=\"from\">First offset to look at for the <paramref name=\"needle\"/>.</param>\r\n        /// <returns>The index of the first occurence of <paramref name=\"needle\"/> or <c>-1</c> if not found.</returns>\r\n        public unsafe static int IndexOf(byte[] haystack, byte needle, int from)\r\n        {\r\n            fixed (byte* h = haystack)\r\n            {\r\n                byte* p = h + from;\r\n                for (int i = haystack.Length - from; i > 0; i--, p++)\r\n                {\r\n                    if (*p == needle) return (int)(p - h);\r\n                }\r\n            }\r\n            return -1;\r\n        }\r\n#endif\r\n\r\n        internal static T[]/*!*/ Filter<T>(T[]/*!*/ srcArray, T[]/*!*/ dstArray, T removedValue)\r\n            where T : class\r\n        {\r\n            int j = 0;\r\n            for (int i = 0; i < srcArray.Length; i++)\r\n            {\r\n                if (!ReferenceEquals(srcArray[i], removedValue))\r\n                    dstArray[j++] = srcArray[i];\r\n            }\r\n\r\n            return dstArray;\r\n        }\r\n\r\n        internal static int IndexOfNull<T>(ref T[]/*!*/ array, int start)\r\n            where T : class\r\n        {\r\n            while (start < array.Length && array[start] != null) start++;\r\n\r\n            if (start == array.Length)\r\n                Array.Resize(ref array, (array.Length + 1) * 2);\r\n\r\n            return start;\r\n        }\r\n\r\n        internal static void CheckCopyTo(Array/*!*/ array, int index, int count)\r\n        {\r\n            if (array == null)\r\n                throw new ArgumentNullException(\"array\");\r\n            if (array.Rank != 1)\r\n                throw new ArgumentException(CoreResources.invalid_array_rank, \"array\");\r\n            if (index < 0)\r\n                throw new ArgumentOutOfRangeException(\"index\");\r\n            if (array.Length - index < count)\r\n                throw new ArgumentException(CoreResources.not_enought_space_in_target_array);\r\n        }\r\n\r\n        public static string/*!*/ ToList<T>(IEnumerable<T> enumerable, Action<StringBuilder, T>/*!*/ appendItem)\r\n        {\r\n            if (appendItem == null)\r\n                throw new ArgumentNullException(\"appendItem\");\r\n\r\n            if (enumerable == null) return \"\";\r\n\r\n            StringBuilder result = new StringBuilder();\r\n\r\n            bool first = true;\r\n            foreach (T item in enumerable)\r\n            {\r\n                if (!first) result.Append(',');\r\n                first = false;\r\n\r\n                appendItem(result, item);\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns number of starting elements satisfying given predicate.\r\n        /// </summary>\r\n        /// <param name=\"args\">Array of objects.</param>\r\n        /// <param name=\"predicate\">Condition.</param>\r\n        /// <returns>Amount of elements.</returns>\r\n        public static int TakeWhileCount(object[]/*!*/args, Predicate<object> predicate)\r\n        {\r\n            Debug.Assert(args != null);\r\n\r\n            int i = 0;\r\n\r\n            for (; i < args.Length; ++i)\r\n                if (!predicate(args[i]))\r\n                    return i;\r\n\r\n            return i;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates list without duplicities from given <c>items</c>.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of single items in the list.</typeparam>\r\n        /// <param name=\"items\">Items to check for duplicities.</param>\r\n        /// <returns>New list of unique items. Cannot return null.</returns>\r\n        public static ICollection<T>/*!*/Unique<T>(IList<T> items)\r\n        {\r\n            if (items == null || items.Count == 0)\r\n                return EmptyArray<T>.Instance;\r\n\r\n            return new HashSet<T>(items);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates new or resuses given <paramref name=\"items\"/>, returned array contains only unique items.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">Type of array element.</typeparam>\r\n        /// <param name=\"items\">Array of elements.</param>\r\n        /// <returns>Unique array of element. Cannot be null.</returns>\r\n        public static T[]/*!*/EnsureUnique<T>(T[] items)\r\n        {\r\n            if (items == null) return EmptyArray<T>.Instance;\r\n            if (items.Length == 0) return items;\r\n\r\n            var set = new HashSet<T>(items);\r\n            if (set.Count == items.Length)\r\n                return items;\r\n            else\r\n                return System.Linq.Enumerable.ToArray(set);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Group given <c>items</c> by their key obtained through given <c>makeKey</c> converter.\r\n        /// </summary>\r\n        /// <typeparam name=\"TKey\">Type of key of <c>items</c>.</typeparam>\r\n        /// <typeparam name=\"TItem\">Type of single items in the list.</typeparam>\r\n        /// <param name=\"items\">Items to check for duplicities.</param>\r\n        /// <param name=\"makeKey\">Function converting the <c>TItem</c> into <c>TKey</c>.</param>\r\n        /// <returns>Dictionary of (key, list) of items grouped by their key. Cannot return null.</returns>\r\n        public static IDictionary<TKey, List<TItem>>/*!*/Group<TKey, TItem>(IList<TItem> items, Converter<TItem, TKey>/*!*/makeKey)\r\n        {\r\n            if (items == null || items.Count == 0) return new Dictionary<TKey, List<TItem>>();\r\n\r\n            var list = new Dictionary<TKey, List<TItem>>(items.Count);\r\n\r\n            foreach (var x in items)\r\n            {\r\n                List<TItem> group;\r\n\r\n                var key = makeKey(x);\r\n                if (!list.TryGetValue(key, out group))\r\n                    list.Add(key, (group = new List<TItem>(1)));\r\n\r\n                group.Add(x);\r\n            }\r\n\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Perform logical AND operation onto the array of logical values.\r\n        /// </summary>\r\n        /// <param name=\"items\">Array of bools. Cannot be null.</param>\r\n        /// <param name=\"boolGetter\">Function converting items to logical value.</param>\r\n        /// <returns>True if all the values in <c>items</c> are true or if given array is empty. False if it contains at least one <c>false</c> value.</returns>\r\n        public static bool LogicalAnd<T>(IEnumerable<T>/*!*/items, Converter<T, bool>/*!*/boolGetter)\r\n        {\r\n            if (items == null)\r\n                throw new ArgumentNullException(\"items\");\r\n            if (boolGetter == null)\r\n                throw new ArgumentNullException(\"boolGetter\");\r\n\r\n            foreach (var x in items)\r\n                if (!boolGetter(x))\r\n                    return false;\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Read all the bytes from input stream to byte array.\r\n        /// </summary>\r\n        /// <param name=\"input\">Input stream.</param>\r\n        /// <returns>Array of bytes read from the input stream.</returns>\r\n        public static byte[] ReadAllBytes(Stream input)\r\n        {\r\n            if (input == null)\r\n                return null;\r\n\r\n            byte[] buffer = new byte[16 * 1024];\r\n            using (MemoryStream ms = new MemoryStream())\r\n            {\r\n                int read;\r\n                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)\r\n                {\r\n                    ms.Write(buffer, 0, read);\r\n                }\r\n                return ms.ToArray();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether the array is not empty.\r\n        /// </summary>\r\n        public static bool Any<T>(this T[] arr)\r\n        {\r\n            return arr != null && arr.Length != 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether the array is empty or <c>null</c> reference.\r\n        /// </summary>\r\n        public static bool Empty<T>(this T[] arr)\r\n        {\r\n            return !Any<T>(arr);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copies a part of given array into a new one. If the result array would be the same size as the original one, reference to the original one is returned directly.\r\n        /// </summary>\r\n        public static T[] TakeArray<T>(this T[] arr, int from, int count)\r\n        {\r\n            if (arr == null)\r\n                throw new ArgumentNullException();\r\n\r\n            if (count == 0)\r\n                return EmptyArray<T>.Instance; \r\n            \r\n            if (from == 0 && count == arr.Length)\r\n                return arr;\r\n\r\n            if (from < 0 || from + count > arr.Length)\r\n                throw new ArgumentOutOfRangeException();\r\n\r\n            //\r\n            T[] result = new T[count];\r\n            Array.Copy(arr, from, result, 0, count);\r\n            return result;\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Paths\r\n\r\n    /// <summary>\r\n    /// Represents a full canonical path.\r\n    /// </summary>\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    public struct FullPath : IEquatable<FullPath>\r\n    {\r\n        #region Equality Comparer\r\n\r\n        private class PathEqualityComparer : IEqualityComparer<FullPath>\r\n        {\r\n            /// <summary>\r\n            /// Underlaying <see cref=\"StringComparer\"/> selected for current environment (win/linux).\r\n            /// </summary>\r\n            public StringComparer/*!*/StringComparer { get { return stringComparer; } }\r\n            private readonly StringComparer/*!*/stringComparer;\r\n\r\n            public int GetHashCode(FullPath path)\r\n            {\r\n                return stringComparer.GetHashCode(path.path);\r\n            }\r\n\r\n            public bool Equals(FullPath x, FullPath y)\r\n            {\r\n                return stringComparer.Equals(x.path, y.path);\r\n            }\r\n\r\n            public PathEqualityComparer()\r\n            {\r\n                stringComparer = EnvironmentUtils.IsDotNetFramework ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Static members\r\n\r\n        /// <summary>\r\n        /// Implementation of IEqualityComparer&lt;FullPath&gt; interface.\r\n        /// </summary>\r\n        private static readonly PathEqualityComparer/*!*/EqualityComparer = new PathEqualityComparer();\r\n\r\n        /// <summary>\r\n        /// Underlaying <see cref=\"StringComparer\"/> selected for current environment (win/linux).\r\n        /// </summary>\r\n        public static StringComparer/*!*/StringComparer { get { return EqualityComparer.StringComparer; } }\r\n\r\n        public static FullPath[]/*!*/ EmptyArray { get { return EmptyArray<FullPath>.Instance; } }\r\n\r\n        /// <summary>\r\n        /// Empty path.\r\n        /// </summary>\r\n        public static FullPath Empty = new FullPath(null);\r\n\r\n        /// <summary>\r\n        /// Boxed <see cref=\"Path.DirectorySeparatorChar\"/>.\r\n        /// </summary>\r\n        public static string/*!*/DirectorySeparatorString = Path.DirectorySeparatorChar.ToString();\r\n\r\n        #endregion\r\n\r\n        #region Fields and properties\r\n\r\n        /// <summary>\r\n        /// Full canonical path. Can be a <B>null</B> reference.\r\n        /// </summary>\r\n        private string path;\r\n\r\n        /// <summary>\r\n        /// Gets whether the path is empty.\r\n        /// </summary>\r\n        public bool IsEmpty { get { return path == null; } }\r\n\r\n        /// <summary>\r\n        /// Gets whether the path represents an existing directory.\r\n        /// </summary>\r\n        public bool DirectoryExists { get { return Directory.Exists(path); } }\r\n\r\n        /// <summary>\r\n        /// Gets whether the path represents an existing file.\r\n        /// </summary>\r\n        public bool FileExists { get { return File.Exists(path); } }\r\n\r\n        /// <summary>Gets last segment path</summary>\r\n        /// <seealso cref=\"System.IO.Path.GetFileName\"/>\r\n        public string FileName { get { return Path.GetFileName(path); } }\r\n\r\n        /// <summary>\r\n        /// Full file name. Can be <c>null</c>.\r\n        /// </summary>\r\n        public string FullFileName { get { return path; } }\r\n\r\n        /// <summary>Gets last segment of path without extension</summary>\r\n        /// <seealso cref=\"System.IO.Path.GetFileNameWithoutExtension\"/>\r\n        public string FileNameWithoutExtension { get { return Path.GetFileNameWithoutExtension(path); } }\r\n        /// <summary>Gets extension of filename</summary>\r\n        /// <seealso cref=\"Path.GetExtension\"/>\r\n        public string Extension { get { return Path.GetExtension(path); } }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates a full path from arbitrary path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"arbitraryPath\">Arbitrary path.</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"arbitraryPath\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        public FullPath(string arbitraryPath)\r\n            : this(arbitraryPath, true)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a full path from relative path using <see cref=\"System.IO.Path.GetFullPath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"relativePath\">Arbitrary path.</param>\r\n        /// <param name=\"root\">Root for the path.</param>\r\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"relativePath\"/> is a <B>null</B> reference.</exception>\r\n        /// <exception cref=\"ArgumentException\">Invalid path. Inner exception specifies details (see <see cref=\"System.IO.Path.GetFullPath\"/>).</exception>\r\n        public FullPath(string/*!*/ relativePath, FullPath root)\r\n        {\r\n            if (relativePath == null)\r\n                throw new ArgumentNullException(\"relativePath\");\r\n\r\n            root.EnsureNonEmpty(\"root\");\r\n\r\n            try\r\n            {\r\n                path = Path.GetFullPath(Path.Combine(root, relativePath));\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new ArgumentException(CoreResources.GetString(\"invalid_path\"), e);\r\n            }\r\n        }\r\n\r\n        internal FullPath(string/*!*/ path, bool isArbitrary)\r\n        {\r\n            if (path == null)\r\n            {\r\n                this.path = null;\r\n            }\r\n            else if (isArbitrary)\r\n            {\r\n                try\r\n                {\r\n                    this.path = System.IO.Path.GetFullPath(path);\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    throw new ArgumentException(CoreResources.GetString(\"invalid_path\"), e);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // TODO: better linux/windows compatibility!!\r\n#if !SILVERLIGHT\r\n                Debug.Assert(System.IO.Path.GetFullPath(path).Replace('/', '\\\\') == path.Replace('/', '\\\\'));\r\n#endif\r\n                this.path = path;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize the <see cref=\"path\"/> using existing <see cref=\"FullPath\"/> and valid <see cref=\"RelativePath\"/>.\r\n        /// </summary>\r\n        /// <param name=\"root\">The root path. Must not be empty.</param>\r\n        /// <param name=\"relativePath\">Canonized relative path to be added to the <paramref name=\"root\"/>.\r\n        /// The path must be normalized already. If its level is non-negative, the path must not start with \\ or drive letter.</param>\r\n        /// <exception cref=\"ArgumentException\">The exception is thrown when <paramref name=\"root\"/> is empty or\r\n        /// <paramref name=\"relativePath\"/> level is out of the root level.</exception>\r\n        internal FullPath(FullPath root, RelativePath relativePath)\r\n        {\r\n            if (relativePath.Level < 0)\r\n            {\r\n                // relative path is absolute\r\n                path = relativePath.Path;\r\n                return;\r\n            }\r\n\r\n            // empty root\r\n            if (string.IsNullOrEmpty(root.path))\r\n            {\r\n                throw new ArgumentException(\"Root cannot be empty.\", \"root\");\r\n            }\r\n\r\n            //\r\n            // relativePath does not start with / or a drive letter\r\n            //\r\n\r\n            Debug.Assert(relativePath.Path == null || relativePath.Path.Length == 0 || (relativePath.Path[0] != Path.DirectorySeparatorChar));\r\n\r\n            // root and last root character to be used\r\n            string rootpath = root.path;\r\n            int rootend = rootpath.Length;\r\n\r\n            //Debug.Assert(rootend > 0);  // rootpath is not empty string\r\n\r\n            // cut ending \\ from the root\r\n            if (rootpath[rootend - 1] == Path.DirectorySeparatorChar)\r\n                rootend--;\r\n\r\n            // go <level>s up // typically 0\r\n            for (int level = relativePath.Level; level > 0; --level)\r\n            {\r\n                rootend = (rootend > 0) ?\r\n                    rootpath.LastIndexOf(Path.DirectorySeparatorChar, rootend - 1, rootend) :  // start search from <rootend-1>, search for <rootend> chars to the left\r\n                    -1;\r\n                if (rootend < 0)\r\n                    throw new ArgumentException(\"Too many up-directories.\", \"relativePath\");\r\n            }\r\n\r\n            // build the absolute path string\r\n            path = String.Concat(\r\n                    ((rootend == rootpath.Length) ? rootpath : rootpath.Substring(0, rootend)),\r\n                    DirectorySeparatorString,\r\n                    relativePath.Path);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        /// <summary>\r\n        /// Throws an exception is the path is empty. Used for argument check.\r\n        /// </summary>\r\n        /// <param name=\"argumentName\">Argument name.</param>\r\n        /// <exception cref=\"ArgumentException\">Path is empty.</exception>\r\n        public void EnsureNonEmpty(string argumentName)\r\n        {\r\n            if (IsEmpty)\r\n                throw new ArgumentException(argumentName, CoreResources.GetString(\"path_is_empty\"));\r\n        }\r\n\r\n        private void EnsureNonEmpty()\r\n        {\r\n            if (IsEmpty)\r\n                throw new InvalidOperationException(CoreResources.GetString(\"path_is_empty\"));\r\n        }\r\n\r\n        public bool Equals(FullPath other)\r\n        {\r\n            return EqualityComparer.Equals(this, other);\r\n        }\r\n\r\n        public override bool Equals(object other)\r\n        {\r\n            Debug.Assert(other == null || other is FullPath, \"Comparing incomparable objects.\");\r\n            if (!(other is FullPath)) return false;\r\n            return Equals(this, (FullPath)other);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return EqualityComparer.GetHashCode(this);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return path;\r\n        }\r\n\r\n        public static implicit operator string(FullPath fullPath)\r\n        {\r\n            return fullPath.path;\r\n        }\r\n\r\n        public FullPath[]/*!*/ GetFiles()\r\n        {\r\n            EnsureNonEmpty();\r\n            return GetFullPaths(Directory.GetFiles(this.path), false);\r\n        }\r\n\r\n        public FullPath[]/*!*/ GetDirectories()\r\n        {\r\n            EnsureNonEmpty();\r\n            return GetFullPaths(Directory.GetDirectories(this.path), false);\r\n        }\r\n\r\n        public static FullPath[]/*!*/ GetFullPaths(string[]/*!*/ paths)\r\n        {\r\n            return GetFullPaths(paths, true);\r\n        }\r\n\r\n        internal static FullPath[]/*!*/ GetFullPaths(string[]/*!*/ paths, bool isArbitrary)\r\n        {\r\n            if (paths == null)\r\n                throw new ArgumentNullException(\"paths\");\r\n\r\n            FullPath[] result = new FullPath[paths.Length];\r\n\r\n            for (int i = 0; i < paths.Length; i++)\r\n                result[i] = new FullPath(paths[i], isArbitrary);\r\n\r\n            return result;\r\n        }\r\n\r\n        public static FullPath[]/*!*/ GetFullPaths(string[]/*!*/ paths, FullPath root)\r\n        {\r\n            if (paths == null)\r\n                throw new ArgumentNullException(\"paths\");\r\n\r\n            root.EnsureNonEmpty(\"root\");\r\n\r\n            FullPath[] result = new FullPath[paths.Length];\r\n\r\n            for (int i = 0; i < paths.Length; i++)\r\n                result[i] = new FullPath(paths[i], root);\r\n\r\n            return result;\r\n        }\r\n\r\n        public static FullPath GetCurrentDirectory()\r\n        {\r\n            return new FullPath(Directory.GetCurrentDirectory(), false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether an extension of the path is contained in a list of extensions.\r\n        /// </summary>\r\n        public bool HasAnyExtension(IEnumerable<string>/*!*/ fileExtensions)\r\n        {\r\n            if (fileExtensions == null)\r\n                throw new ArgumentNullException(\"fileExtensions\");\r\n\r\n            EnsureNonEmpty();\r\n\r\n            // extension is either \"\" or contains \".\":\r\n            string path_ext = Path.GetExtension(this.path);\r\n\r\n            foreach (string ext in fileExtensions)\r\n            {\r\n                if (ext == path_ext || path_ext.Length > 0 && String.Compare(ext, 0, path_ext, 1, path_ext.Length, StringComparison.CurrentCultureIgnoreCase) == 0)\r\n                    return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// Represents a relative canonical path without a root binding.\r\n    /// </summary>\r\n    [Serializable]\r\n    [DebuggerNonUserCode]\r\n    public struct RelativePath : IComparable\r\n    {\r\n        /// <summary>\r\n        /// The minimal number of directories we must go up or -1 if it is not possible to relativize the path.\r\n        /// </summary>\r\n        public int Level { get { return level; } }       // TODO: byte\r\n        private readonly sbyte level;\r\n\r\n        /// <summary>\r\n        /// Gets path relative with respect to the directory <see cref=\"level\"/> levels up from the \r\n        /// root specified in the constructor <see cref=\"RelativePath(FullPath,FullPath)\"/>, \r\n        /// full drive-rooted path if relativization failed,\r\n        /// or a <B>null</B> reference for empty path.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Canonical path without leading backslash.\r\n        /// </remarks>\r\n        public string Path { get { return path; } }\r\n        private readonly string path;\r\n\r\n        /// <summary>\r\n        /// Gets whether the path is empty. \r\n        /// </summary>\r\n        public bool IsEmpty\r\n        {\r\n            get { return path == null; }\r\n        }\r\n\r\n        public static RelativePath Empty = new RelativePath();\r\n\r\n        /// <summary>\r\n        /// Creates relative path using the number of up levels and canonical relative path.\r\n        /// </summary>\r\n        internal RelativePath(sbyte level, string/*!*/ path)\r\n        {\r\n            Debug.Assert(path != null);\r\n            this.level = level;\r\n            this.path = path;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates new RelativePath using combination of two relative paths.\r\n        /// </summary>\r\n        /// <param name=\"first\">Path to be prepended.</param>\r\n        /// <param name=\"second\">Path to be appended.</param>\r\n        public RelativePath(RelativePath first, RelativePath second)\r\n        {\r\n            char separator = System.IO.Path.DirectorySeparatorChar;\r\n\r\n            Debug.Assert(first.level >= -1 && second.level >= -1);\r\n            Debug.Assert(first.path == null || first.path[0] != separator);\r\n            Debug.Assert(second.path == null || second.path[0] != separator);\r\n\r\n            // non-relativizable second path => error\r\n            if (second.level == -1)\r\n            {\r\n                throw new ArgumentException(\"Cannot combine non-relativizable path.\", \"second\");\r\n            }\r\n\r\n            // no first path fast-track\r\n            if (first.level == 0 && (first.path == null || first.path == \"\" || first.path == \".\"))\r\n            {\r\n                this.level = second.level;\r\n                this.path = second.path;\r\n                return;\r\n            }\r\n\r\n            if (second.level == 0)\r\n            {\r\n                // no second path fast-track\r\n                if (second.path == null || second.path == \"\" || second.path == \".\")\r\n                {\r\n                    this.level = first.level;\r\n                    this.path = first.path;\r\n                }\r\n                // concat of first and second path\r\n                else\r\n                {\r\n                    this.level = first.level;\r\n\r\n                    if (first.path[first.path.Length - 1] == separator)\r\n                        this.path = String.Concat(first.path, second.path);\r\n                    else\r\n                        this.path = String.Concat(first.path, separator.ToString(), second.path);\r\n                }\r\n\r\n                return;\r\n            }\r\n\r\n            // general case\r\n            // following conditions are always true in this point:\r\n            // first.level is not zero and first.path is not trivial (empty or .)\r\n            // second is relative, level is larger than 0 and path not trivial (empty or .)\r\n            sbyte remainingUps = second.level;\r\n            int firstPosition = first.path.Length - 1;\r\n\r\n            while (remainingUps > 0)\r\n            {\r\n                firstPosition--;\r\n\r\n                //find the next directory separator\r\n                while (firstPosition > -1)\r\n                {\r\n                    if (first.path[firstPosition] == separator) break;\r\n                    firstPosition--;\r\n                }\r\n\r\n                //ran out of first path - use second path and add remaning ups to first path level\r\n                if (firstPosition == -1)\r\n                {\r\n                    this.level = (sbyte)(remainingUps + first.level);\r\n                    this.path = second.path;\r\n                    return;\r\n                }\r\n\r\n                remainingUps--;\r\n            }\r\n\r\n            // truncate the first path (include the separator) and add the second path \r\n            this.level = first.level;\r\n            this.path = String.Concat(first.path.Substring(0, firstPosition + 1), second.path);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses arbitrary path string to RelativePath. If the path is absolute, non-relativizable path is created.\r\n        /// </summary>\r\n        /// <param name=\"path\">Path in generic format.</param>\r\n        public RelativePath(string/*!*/ path)\r\n        {\r\n            Debug.Assert(path != null);\r\n\r\n            char separator = System.IO.Path.DirectorySeparatorChar;\r\n\r\n            // replace all alt separators by the correct one\r\n            path = path.Replace(System.IO.Path.AltDirectorySeparatorChar, separator);\r\n\r\n            // TODO: if path is absolute, we need to do some additional checking\r\n            if (path.Length > 3 && path[1] == ':' && path[2] == separator)\r\n            {\r\n                //Windows-style absolute path - we keep the drive letter\r\n                this.level = -1;\r\n                this.path = path;\r\n                return;\r\n            }\r\n\r\n            if (path.Length > 0 && path[0] == separator)\r\n            {\r\n                //Unix-style absolute path - we remove separator in the beginning (absolute path information is kept in the level -1)\r\n                this.level = -1;\r\n                this.path = path.Substring(1);\r\n                return;\r\n            }\r\n\r\n            sbyte level = 0;\r\n            List<string> realElements = new List<string>();\r\n\r\n            string[] elements = path.Split(separator);\r\n\r\n            // go through path elements, assembling the real path\r\n            foreach (string elem in elements)\r\n            {\r\n                switch (elem)\r\n                {\r\n                    case \"\":\r\n                    case \".\":\r\n                        // does not change the directory\r\n                        continue;\r\n                    case \"..\":\r\n                        // jump one directory up\r\n                        if (realElements.Count > 0)\r\n                            realElements.RemoveAt(realElements.Count - 1);\r\n                        else\r\n                            level++;\r\n                        continue;\r\n                    default:\r\n                        // add the directory\r\n                        realElements.Add(elem);\r\n                        continue;\r\n                }\r\n            }\r\n\r\n            StringBuilder sb = new StringBuilder();\r\n\r\n            //make path string\r\n            for (int i = 0; i < realElements.Count; i++)\r\n            {\r\n                sb.Append(realElements[i]);\r\n\r\n                if (i != realElements.Count - 1)\r\n                    sb.Append(separator);\r\n            }\r\n\r\n            // if there was trailing separator in the path, append it explicitly\r\n            if (elements.Length > 1 && elements[elements.Length - 1] == \"\" && sb.Length > 0)\r\n            {\r\n                sb.Append(separator);\r\n            }\r\n\r\n            this.level = level;\r\n            this.path = sb.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a relative path to the file/directory specified by <paramref name=\"path\"/> \r\n        /// with respect to the directory <paramref name=\"root\"/>.\r\n        /// </summary>\r\n        /// <param name=\"root\">The root directory where to start.</param>\r\n        /// <param name=\"path\">The path where to end.</param>\r\n        public RelativePath(FullPath root, FullPath path)\r\n        {\r\n            root.EnsureNonEmpty(\"root\");\r\n            path.EnsureNonEmpty(\"path\");\r\n\r\n            string srcDir = ((string)root).Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar);\r\n            string dstPath = ((string)path).Replace(System.IO.Path.AltDirectorySeparatorChar, System.IO.Path.DirectorySeparatorChar);\r\n            char separator = System.IO.Path.DirectorySeparatorChar;\r\n\r\n            Debug.Assert(srcDir != \"\" && dstPath != \"\");\r\n\r\n            // removes separator from the end of the directory path:\r\n            if (srcDir[srcDir.Length - 1] == separator)\r\n                srcDir = srcDir.Substring(0, srcDir.Length - 1);\r\n\r\n            int first_different = StringUtils.FirstDifferent(srcDir, dstPath, true);\r\n            if (first_different == 0)\r\n            {\r\n                // different volumes:\r\n                this.path = dstPath;\r\n                this.level = -1;\r\n                return;\r\n            }\r\n\r\n            // dst is subdirectory of src (substring):\r\n            if (first_different == srcDir.Length && (first_different == dstPath.Length ||\r\n                  dstPath[first_different] == separator))\r\n            {\r\n                this.path = \"\";\r\n                if (first_different < dstPath.Length)\r\n                    this.path = dstPath.Substring(first_different + 1);\r\n\r\n                this.level = 0;\r\n                return;\r\n            }\r\n\r\n            // src is subdirectory of dst (substring):\r\n            if (first_different == dstPath.Length && first_different < srcDir.Length && srcDir[first_different] == separator)\r\n            {\r\n                this.level = 0;\r\n                for (int i = srcDir.Length - 1; i >= first_different; i--)\r\n                {\r\n                    if (srcDir[i] == separator)\r\n                        this.level++;\r\n                }\r\n\r\n                this.path = \"\";\r\n                return;\r\n            }\r\n\r\n            int last_common_separator = srcDir.LastIndexOf(separator, first_different - 1);\r\n            Debug.Assert(last_common_separator != -1);\r\n\r\n            this.level = 0;\r\n            for (int i = srcDir.Length - 1; i >= last_common_separator; i--)\r\n            {\r\n                if (srcDir[i] == separator)\r\n                    this.level++;\r\n            }\r\n\r\n            this.path = dstPath.Substring(last_common_separator + 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Absolutizes this relative path with respect to a specified root.\r\n        /// </summary>\r\n        /// <param name=\"root\">Full root path.</param>\r\n        /// <returns>Absolute path.</returns>\r\n        public FullPath ToFullPath(FullPath root)\r\n        {\r\n            root.EnsureNonEmpty(\"root\");\r\n\r\n            if (level <= 0) return new FullPath(CombinePath(root, path), false);\r\n\r\n            string root_str = root;\r\n            char separator = System.IO.Path.DirectorySeparatorChar;\r\n\r\n            // starts at the end of the root skipping the separator:\r\n            int separator_pos = (root_str[root_str.Length - 1] == separator) ? root_str.Length - 1 : root_str.Length;\r\n\r\n            for (int i = 0; i < level; i++)\r\n            {\r\n                separator_pos = root_str.LastIndexOf(separator, separator_pos - 1);\r\n                if (separator_pos == -1)\r\n                    throw new ArgumentException(\"root\"); // TODO // not a valid root for this path\r\n            }\r\n\r\n            return new FullPath(String.Concat(root_str.Substring(0, separator_pos + 1), this.path), false);\r\n        }\r\n\r\n        private static string CombinePath(FullPath root, string path)\r\n        {\r\n            if (CultureInfo.InvariantCulture.TextInfo.ToLower((string)root).StartsWith(\"http://\")) // we don't need Unicode characters to be lowercased properly // CurrentCulture is slow\r\n                return System.IO.Path.Combine(root, path).Replace('\\\\', '/');\r\n            else\r\n                return System.IO.Path.Combine(root, path);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns canonical string representation of the relative path.\r\n        /// </summary>\r\n        /// <returns>A relative path, e.g. \"../../dir/file.extension\".</returns>\r\n        public override string ToString()\r\n        {\r\n            if (level <= 0) return path;\r\n            Debug.Assert(path != null);\r\n\r\n            StringBuilder result = new StringBuilder(level * 3 + path.Length);\r\n\r\n            string level_up = \"..\" + System.IO.Path.DirectorySeparatorChar;\r\n\r\n            for (int i = 0; i < level; i++)\r\n                result.Append(level_up);\r\n\r\n            if (path != \"\")\r\n                result.Append(path);\r\n            else\r\n                result.Length--;\r\n\r\n            return result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses canonical relative path. \r\n        /// </summary>\r\n        /// <param name=\"relativePath\">\r\n        /// Canonical path. Assumes path separators to be <see cref=\"System.IO.Path.DirectorySeparatorChar\"/> and\r\n        /// level-ups \"..\" to be only at the start of the string.\r\n        /// </param>\r\n        /// <exception cref=\"PathTooLongException\">Number of level-ups is greater than <see cref=\"SByte.MaxValue\"/>.</exception>\r\n        internal static RelativePath ParseCanonical(string/*!*/ relativePath)\r\n        {\r\n            Debug.Assert(relativePath != null);\r\n\r\n            // counts number of level-ups \"..\\\"\r\n            int level = 0;\r\n            int i = 0;\r\n            while (i + 1 < relativePath.Length && relativePath[i] == '.' && relativePath[i + 1] == '.')\r\n            {\r\n                Debug.Assert(i + 2 == relativePath.Length || relativePath[i + 2] == System.IO.Path.DirectorySeparatorChar);\r\n                i += 3;\r\n                level++;\r\n            }\r\n\r\n            if (level > SByte.MaxValue)\r\n                throw new PathTooLongException();\r\n\r\n            // remaining path:\r\n            string path = (i < relativePath.Length) ? relativePath.Substring(i) : \"\";\r\n\r\n            return new RelativePath((sbyte)level, path);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return unchecked(StringComparer.InvariantCultureIgnoreCase.GetHashCode(path) ^ (level << 30));\r\n        }\r\n\r\n        public override bool Equals(object other)\r\n        {\r\n            if (!(other is RelativePath)) return false;\r\n            RelativePath rp = (RelativePath)other;\r\n            return level == rp.level && String.Compare(path, rp.path, StringComparison.CurrentCultureIgnoreCase) == 0;\r\n        }\r\n\r\n        public bool Equals(RelativePath other)\r\n        {\r\n            return this.level == other.level && String.Compare(this.path, other.path, StringComparison.CurrentCultureIgnoreCase) == 0;\r\n        }\r\n\r\n        #region IComparable Members\r\n\r\n        public int CompareTo(object obj)\r\n        {\r\n            RelativePath other = (RelativePath)obj;\r\n            if (this.level == other.level || this.level < 0)\r\n                return String.Compare(this.path, other.path, StringComparison.CurrentCultureIgnoreCase);\r\n            return other.level - this.level;                     // TODO:\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/Core.Parsers.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{B7676837-C805-4898-AE2A-BF00C2AC9C51}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Core.Parsers.Tests</RootNamespace>\r\n    <AssemblyName>PhpNet.Core.Parsers.Tests</AssemblyName>\r\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\r\n    <IsCodedUITest>False</IsCodedUITest>\r\n    <TestProjectType>UnitTest</TestProjectType>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <AssemblyOriginatorKeyFile>Core.Parsers.Tests.snk</AssemblyOriginatorKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n      </ItemGroup>\r\n    </When>\r\n    <Otherwise>\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\r\n      </ItemGroup>\r\n    </Otherwise>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Compile Include=\"LineBreaksTests.cs\" />\r\n    <Compile Include=\"PropertyCollectionTests.cs\" />\r\n    <Compile Include=\"RelativePathTests.cs\" />\r\n    <Compile Include=\"StringUtilsTests.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"TokenizerTests.cs\" />\r\n    <Compile Include=\"PHPDocBlockTests.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Core.Parsers.Tests.snk\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Source/Core.Parsers.Tests/LineBreaksTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core.Text;\r\n\r\nnamespace Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class LineBreaksTests\r\n    {\r\n        [TestMethod]\r\n        public void LineBreaksTest()\r\n        {\r\n            string sample = \"Hello World\";\r\n            foreach (var nl in new[] { \"\\r\", \"\\r\\n\", \"\\n\", \"\\u0085\", \"\\u2028\", \"\\u2029\" })\r\n            {\r\n                for (int breakscount = 0; breakscount < 512; breakscount += 17)\r\n                {\r\n                    // construct sample text with {linecount} lines\r\n                    string text = string.Empty;\r\n                    for (var line = 0; line < breakscount; line++)\r\n                        text += sample + nl;\r\n                    text += sample;\r\n\r\n                    // test LineBreaks\r\n                    var linebreaks = LineBreaks.Create(text);\r\n                    Assert.AreEqual(linebreaks.LinesCount, breakscount + 1);\r\n                    for (int i = 0; i <= text.Length; i += 7)\r\n                        Assert.AreEqual(linebreaks.GetLineFromPosition(i), (i / (sample.Length + nl.Length)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/PHPDocBlockTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System.Linq;\r\nusing PHP.Core.Text;\r\n\r\nnamespace PHP.Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class PHPDocBlockTests\r\n    {\r\n        [TestMethod]\r\n        public void PHPDocSummaryTest()\r\n        {\r\n            PHPDocBlock phpdoc;\r\n\r\n            phpdoc = NewPHPDoc(@\"/** Short Singleline Summary */\");\r\n            Assert.AreEqual(phpdoc.Summary, \"Short Singleline Summary\");\r\n            Assert.AreEqual(phpdoc.ShortDescription, \"Short Singleline Summary\");\r\n\r\n            phpdoc = NewPHPDoc(@\"/**\r\n * Short Summary\r\n *\r\n * Long Summary\r\n * On two lines.\r\n */\");\r\n            Assert.AreEqual(phpdoc.Summary, \"Short Summary\\nLong Summary\\nOn two lines.\");\r\n            Assert.AreEqual(phpdoc.ShortDescription, \"Short Summary\");\r\n            Assert.AreEqual(phpdoc.GetElement<PHPDocBlock.ShortDescriptionElement>().Span, new Span(8, 19));\r\n\r\n            phpdoc = NewPHPDoc(@\"/**\r\n * Short Summary.\r\n * Long Summary\r\n * On two lines.\r\n */\");\r\n            Assert.AreEqual(phpdoc.Summary, \"Short Summary.\\nLong Summary\\nOn two lines.\");\r\n            Assert.AreEqual(phpdoc.ShortDescription, \"Short Summary.\");\r\n\r\n            phpdoc = NewPHPDoc(@\"/**\r\n * Short Summary\r\n * Long Summary\r\n * On three\r\n * lines.\r\n */\");\r\n            Assert.AreEqual(phpdoc.Summary, \"Short Summary\\nLong Summary\\nOn three\\nlines.\");\r\n            Assert.AreEqual(phpdoc.ShortDescription, \"Short Summary\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void PHPDocIgnoreTest()\r\n        {\r\n            var phpdoc = NewPHPDoc(@\"/**\r\n * Short summary\r\n * @ignore\r\n */\");\r\n            Assert.IsTrue(phpdoc.IsIgnored);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void PHPDocParamsTest()\r\n        {\r\n            var phpdoc = NewPHPDoc(@\"/**\r\n * Short summary\r\n * @param A $a A description.\r\n * @param B $b B description.\r\n * @param C $c C description.\r\n * @return X Return description.\r\n */\");\r\n            var returntag = phpdoc.Returns;\r\n            Assert.IsNotNull(returntag);\r\n            Assert.AreEqual(returntag.Description, \"Return description.\");\r\n            Assert.AreEqual(returntag.TypeNames, \"X\");\r\n            Assert.AreEqual(returntag.TypeNamesSpan, new Span(127, 1));\r\n            Assert.AreEqual(returntag.VariableName, null);\r\n\r\n            var parameters = phpdoc.Params.ToArray();\r\n            var expected = new char[] { 'a', 'b', 'c' };\r\n            Assert.AreEqual(expected.Length, parameters.Length);\r\n            for (int i = 0; i < expected.Length; i++)\r\n            {\r\n                Assert.AreEqual(\"$\" + expected[i], parameters[i].VariableName);\r\n                Assert.AreEqual(expected[i].ToUpperAsciiInvariant().ToString(), parameters[i].TypeNames);\r\n                Assert.AreEqual(expected[i].ToUpperAsciiInvariant() + \" description.\", parameters[i].Description);\r\n                Assert.AreEqual(parameters[i].VariableNameSpan, new Span(35 + i*31, 2));\r\n                Assert.AreEqual(parameters[i].TypeNamesSpan, new Span(33 + i * 31, 1));\r\n            }\r\n        }\r\n\r\n        static PHPDocBlock NewPHPDoc(string phpdoc)\r\n        {\r\n            return new PHPDocBlock(phpdoc, new Span(0, phpdoc.Length));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Core.Parsers.Tests\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"Core.Parsers.Tests\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"3fd75e9c-c28e-43ef-8abe-affa2a103e91\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/PropertyCollectionTests.cs",
    "content": "﻿using Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace PHP.Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class PropertyCollectionTests\r\n    {\r\n        [TestMethod]\r\n        public void PropertyCollectionTest()\r\n        {\r\n            var collection = new PropertyCollection();\r\n\r\n            for (int pass = 1; pass < 100; pass++)\r\n            {\r\n                collection.ClearProperties();\r\n                Assert.AreEqual(collection.Count, 0);\r\n\r\n                int count = pass * 2;\r\n\r\n                TestAdd(ref collection, count);\r\n                Assert.AreEqual(collection.Count, count);\r\n\r\n                TestRemove(ref collection, count);\r\n                Assert.AreEqual(collection.Count, 0);\r\n\r\n                TestAdd(ref collection, count);\r\n                Assert.AreEqual(collection.Count, count);\r\n\r\n                // delete every second property\r\n                for (int i = 0; i < count; i+=2)\r\n                {\r\n                    collection.RemoveProperty(i);\r\n                    Assert.AreEqual(collection.GetProperty(i), null);\r\n                }\r\n                Assert.AreEqual(collection.Count, count / 2);\r\n\r\n                // test property replacement\r\n                for (int i = 1; i < count; i += 2)\r\n                {\r\n                    collection.SetProperty(i, i * 2);\r\n                    Assert.AreEqual(collection.GetProperty(i), i * 2);\r\n                }\r\n                Assert.AreEqual(collection.Count, count / 2); \r\n            }\r\n        }\r\n\r\n        static void TestAdd(ref PropertyCollection collection, int count)\r\n        {\r\n            for (int i = 0; i < count; i++)\r\n            {\r\n                collection.SetProperty(i, i);\r\n                Assert.AreEqual(collection.GetProperty(i), i);\r\n            }            \r\n        }\r\n\r\n        static void TestRemove(ref PropertyCollection collection, int count)\r\n        {\r\n            for (int i = 0; i < count; i++)\r\n            {\r\n                collection.RemoveProperty(i);\r\n                Assert.AreEqual(collection.GetProperty(i), null);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/RelativePathTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class RelativePathTests\r\n    {\r\n        [TestMethod]\r\n        public void TestPaths()\r\n        {\r\n            FullPath root;\r\n            FullPath full;\r\n            RelativePath rel;\r\n            string str1, str2;\r\n\r\n            string[,] cases = \r\n      {\r\n          // root:        // full:          // full canonical:    // relative canonical:\r\n        { @\"C:\\a/b/c/\",   @\"D:\\a/b/\",       @\"D:\\a\\b\\\",           @\"D:\\a\\b\\\" },\r\n                                            \r\n        { @\"C:\\a\\b\\c\",    @\"C:\\a\\b\\c\",      @\"C:\\a\\b\\c\",          @\"\" },\r\n        { @\"C:\\a\\b\\c\",    @\"C:\\a\\b\\c\\\",     @\"C:\\a\\b\\c\\\",         @\"\" },\r\n        { @\"C:\\a\\b\\c\\\",   @\"C:\\a\\b\\c\",      @\"C:\\a\\b\\c\",          @\"\" },\r\n        { @\"C:\\a\\b\\c\\\",   @\"C:\\a\\b\\c\\\",     @\"C:\\a\\b\\c\\\",         @\"\" },\r\n                                            \r\n        { @\"C:\\a\\b\\c\",    @\"C:\\a\\b\",        @\"C:\\a\\b\",            @\"..\" },\r\n        { @\"C:\\a\\b\\c\\\",   @\"C:\\a\\b\",        @\"C:\\a\\b\",            @\"..\" },\r\n                                            \r\n        { @\"C:\\a\\b\\c\",    @\"C:\\\",           @\"C:\\\",                @\"..\\..\\..\" },\r\n        { @\"C:\\a\\b\\c\\\",   @\"C:\\\",           @\"C:\\\",                @\"..\\..\\..\" },\r\n                                            \r\n        { @\"C:\\a\\b\\c\\\",   @\"C:\\a\\b\\x\\y\\z\",  @\"C:\\a\\b\\x\\y\\z\",      @\"..\\x\\y\\z\" },\r\n        { @\"C:\\a\\b\\cd\\\",  @\"C:\\a\\b\\c\",      @\"C:\\a\\b\\c\",          @\"..\\c\" },\r\n        { @\"C:\\a\\b\\cd\",   @\"C:\\a\\b\\c\",      @\"C:\\a\\b\\c\",          @\"..\\c\" },\r\n        { @\"C:\\a\\b\\cd\\\",  @\"C:\\a\\b\\c\\d\",    @\"C:\\a\\b\\c\\d\",          @\"..\\c\\d\" },\r\n        { @\"C:\\a\\b\\cd\",   @\"C:\\a\\b\\c\\d\",    @\"C:\\a\\b\\c\\d\",          @\"..\\c\\d\" },\r\n      };\r\n\r\n            for (int i = 0; i < cases.GetLength(0); i++)\r\n            {\r\n                root = new FullPath(cases[i, 0]);\r\n                full = new FullPath(cases[i, 1]);\r\n                rel = new RelativePath(root, full);\r\n\r\n                Assert.AreEqual(full.ToString(), cases[i, 2]);\r\n\r\n                Assert.AreEqual(rel.ToString(), cases[i, 3]);\r\n\r\n                str1 = full;\r\n                if (str1[str1.Length - 1] == '\\\\') str1 = str1.Substring(0, str1.Length - 1);\r\n\r\n                str2 = rel.ToFullPath(root);\r\n                if (str2[str2.Length - 1] == '\\\\') str2 = str2.Substring(0, str2.Length - 1);\r\n\r\n                Assert.AreEqual(str1, str2);\r\n\r\n                Assert.AreEqual(RelativePath.ParseCanonical(cases[i, 3]).ToString(), cases[i, 3]);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/StringUtilsTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class StringUtilsTests\r\n    {\r\n        /// <summary>\r\n        /// Unit test.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestIncrement()\r\n        {\r\n            string[] cases = new string[] { null, \"\", \"z\", \"ZZ[Z9ZzZ\", \"ZZz\" };\r\n            string[] results = new string[] { \"0\", \"1\", \"aa\", \"ZZ[A0AaA\", \"AAAa\" };\r\n\r\n            for (int i = 0; i < cases.Length; i++)\r\n                Assert.AreEqual(StringUtils.Increment(cases[i]), results[i]);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Parsers.Tests/TokenizerTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System.Text;\r\nusing System.IO;\r\nusing PHP.Core.Parsers;\r\n\r\nnamespace Core.Parsers.Tests\r\n{\r\n    [TestClass]\r\n    public class TokenizerTests\r\n    {\r\n        [TestMethod]\r\n        static void Test1()\r\n        {\r\n            Tokenizer tokenizer = new Tokenizer(TextReader.Null);\r\n\r\n            //tokenizer.Initialize(new StringReader(\"EOT;\\r\\n\"), LexicalStates.ST_HEREDOC, true);\r\n            //tokenizer.hereDocLabel = \"EOT\";\r\n\r\n            //tokenizer.Initialize(new StringReader(\"/*\\r\\n*/\"), LexicalStates.ST_IN_SCRIPTING, true);\r\n            //tokenizer.hereDocLabel = null;\r\n\r\n            //tokenizer.Initialize(new StringReader(\"$x = 1; ###\\r\\n $y = 2;\"), LexicalStates.ST_IN_SCRIPTING, true);\r\n            //tokenizer.hereDocLabel = null;\r\n\r\n            //tokenizer.Initialize(new StringReader(\"<? $x = array(); ?>\"), LexicalStates.INITIAL, true);\r\n            //tokenizer.hereDocLabel = null;\r\n\r\n            //                    111111111\r\n            //          0123456789012345678\r\n            //string s = \"echo 'aě'.'řa'.'x';\";\r\n            string s = \"echo 'asdě' . 'řčřžý' . 'موقع للأخبا' . 'האתר' . 'as';\";\r\n            //string s = \"echo 'abřc'.'e'/*xx\\n\\nyy\\nxxx */;\";\r\n\r\n            byte[] buffer = new byte[1000];\r\n\r\n            byte[] b = Encoding.UTF8.GetBytes(s);\r\n            Stream stream = new MemoryStream(b);\r\n            tokenizer.Initialize(new StreamReader(stream), PHP.Core.Parsers.Lexer.LexicalStates.ST_IN_SCRIPTING, true);\r\n            \r\n            //int b_start = 0;\r\n            //int b_end = -1;\r\n            //int b_length = 0;\r\n\r\n            Tokens token;\r\n            for (; ; )\r\n            {\r\n                token = tokenizer.GetNextToken();\r\n\r\n                // check byte position matches:\r\n                //b_length = tokenizer.GetTokenByteLength(Encoding.UTF8);\r\n                //b_start = b_end + 1;\r\n                //b_end += b_length;\r\n\r\n                //// check binary positions:\r\n                //long pos = stream.Position;\r\n                //stream.Seek(b_start, SeekOrigin.Begin);\r\n                //stream.Read(buffer, 0, b_length);\r\n                //stream.Seek(pos, SeekOrigin.Begin);\r\n\r\n                //Debug.Assert(String.CompareOrdinal(Encoding.UTF8.GetString(buffer, 0, b_length), tokenizer.TokenText) == 0);\r\n\r\n                if (token == Tokens.EOF) break;\r\n\r\n                //// check position:\r\n                //Assert.AreEqual(s.Substring(tokenizer.token_start_pos.Char, tokenizer.TokenLength), tokenizer.TokenText);\r\n\r\n                ////\r\n                //Console.WriteLine(\"{0} '{1}' ({2}..{3}]\", token, tokenizer.TokenText, tokenizer.token_start_pos.Char, tokenizer.token_end_pos.Char);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/ConvertTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class ConvertTests\r\n    {\r\n        struct TestCase\r\n        {\r\n            public string s;\r\n            public bool isnum;\r\n            public int p, i, l, d;\r\n            public int iv;\r\n            public long lv;\r\n            public double dv;\r\n\r\n            public TestCase(string s, bool isnum, int p, int i, int l, int d, int iv, long lv, double dv)\r\n            {\r\n                this.s = s;\r\n                this.isnum = isnum;\r\n                this.p = p;\r\n                this.i = i;\r\n                this.l = l;\r\n                this.d = d;\r\n                this.iv = iv;\r\n                this.lv = lv;\r\n                this.dv = dv;\r\n            }\r\n        }\r\n\r\n        static int MaxInt = Int32.MaxValue;\r\n        static int MinInt = Int32.MinValue;\r\n        static long MinLong = Int64.MinValue;\r\n        static long MaxLong = Int64.MaxValue;\r\n        static string LongOvf = \"1250456465465412504564654654\";\r\n        static string IntOvf = \"12504564654654\";\r\n        static long IntOvfL = long.Parse(IntOvf);\r\n        static double IntOvfD = double.Parse(IntOvf);\r\n        static string LongHOvf = \"0x09213921739830924323423\";\r\n\r\n        static TestCase[] cases = new TestCase[]\r\n\t\t\t{\r\n\t\t\t\t//           string                 number?    p   i   l   d       iv       lv  dv\r\n                new TestCase(\"0\",                     true,    1,  1,  1,  1,       0,       0,  0.0),\r\n                new TestCase(\"0x\",                    true,    2,  2,  2,  1,       0,       0,  0.0),\r\n                new TestCase(\"0X\",                    true,    2,  2,  2,  1,       0,       0,  0.0),\r\n                new TestCase(\"00x1\",                 false,    2,  2,  2,  2,       0,       0,  0.0),\r\n                new TestCase(\"0x10\",                  true,    4,  4,  4,  1,      16,      16,  16.0),  // dv changed in v2\r\n                new TestCase(\"-0xf\",                  true,    4,  4,  4,  2,     -15,     -15,  -15.0), // dv changed in v2\r\n                new TestCase(\"00000000013\",           true,   11, 11, 11, 11,      13,      13,  13.0),\r\n                new TestCase(\"00000000\",              true,    8,  8,  8,  8,       0,       0,  0.0),\r\n                new TestCase(\"1\",                     true,    1,  1,  1,  1,       1,       1,  1.0),\r\n                new TestCase(\"0\",                     true,    1,  1,  1,  1,       0,       0,  0.0),\r\n                new TestCase(\"00008\",                 true,    5,  5,  5,  5,       8,       8,  8.0),\r\n                new TestCase(IntOvf,                  true,   14, 10, 14, 14,  MaxInt, IntOvfL,  IntOvfD),\r\n                new TestCase(LongOvf,                 true,   LongOvf.Length,  10, 19, LongOvf.Length, MaxInt, MaxLong,  Double.NaN),\r\n                new TestCase(LongHOvf,                true,   LongHOvf.Length, 17, 24, 1, MaxInt, MaxLong, Double.NaN),\r\n                new TestCase(MaxInt.ToString(),       true,   10, 10, 10, 10,  MaxInt,  MaxInt,  MaxInt),\r\n                new TestCase(MinInt.ToString(),       true,   11, 11, 11, 11,  MinInt,  MinInt,  MinInt),\r\n                new TestCase(MinLong.ToString(),      true,   20, 11, 20, 20,  MinInt,  MinLong,  MinLong),\r\n                new TestCase(MaxLong.ToString(),      true,   19, 10, 19, 19,  MaxInt,  MaxLong,  MaxLong),\r\n\t\t\t\tnew TestCase(\"0.587e5\",               true,    7,  1,  1,  7,       0,       0,  58700.0),\r\n\t\t\t\tnew TestCase(\"10dfd\",                false,    2,  2,  2,  2,      10,      10,  10.0),\r\n\t\t\t\tnew TestCase(\"10efd\",                false,    2,  2,  2,  2,      10,      10,  10.0),\r\n\t\t\t\tnew TestCase(\"10d\",                  false,    2,  2,  2,  2,      10,      10,  10.0),\r\n\t\t\t\tnew TestCase(\"10e\",                  false,    2,  2,  2,  2,      10,      10,  10.0),\r\n\t\t\t\tnew TestCase(\"-.14\",                  true,    4,  1,  1,  4,       0,       0, -0.14),\r\n\t\t\t\tnew TestCase(\".14\",                   true,    3,  0,  0,  3,       0,       0,  0.14),\r\n\t\t\t\tnew TestCase(\"+.e2\",                 false,    4,  1,  1,  2,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"1e10xy\",               false,    4,  1,  1,  4,       1,       1,  10000000000.0),\r\n\t\t\t\tnew TestCase(\"   \",                  false,    3,  3,  3,  3,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"     -\",               false,    6,  6,  6,  6,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"       d\",             false,    7,  7,  7,  7,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"  0  \",                false,    3,  3,  3,  3,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\" 2545as fsdf\",         false,    5,  5,  5,  5,    2545,    2545,  2545.0),\r\n\t\t\t\tnew TestCase(\" 54.dadasdasd\",        false,    4,  3,  3,  4,      54,      54,  54.0),\r\n\t\t\t\tnew TestCase(\"54. \",                 false,    3,  2,  2,  3,      54,      54,  54.0),\r\n\t\t\t\tnew TestCase(\"2.\",                    true,    2,  1,  1,  2,       2,       2,  2.0),\r\n\t\t\t\tnew TestCase(\"2.e\",                  false,    2,  1,  1,  2,       2,       2,  2.0),\r\n\t\t\t\tnew TestCase(\"2.e+\",                 false,    2,  1,  1,  2,       2,       2,  2.0),\r\n\t\t\t\tnew TestCase(\".\",                    false,    1,  0,  0,  1,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"+.\",                   false,    2,  1,  1,  2,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"-.\",                   false,    2,  1,  1,  2,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"-\",                    false,    1,  1,  1,  1,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"+\",                    false,    1,  1,  1,  1,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"\",                     false,    0,  0,  0,  0,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(null,                   false,    0,  0,  0,  0,       0,       0,  0.0),\r\n\t\t\t\tnew TestCase(\"10e1111111111111111\",   true,    6,  2,  2, 19,      10,      10,  Double.PositiveInfinity),\r\n\t\t\t\tnew TestCase(\"10e-1111111111111111\",  true,   20,  2,  2, 20,      10,      10,  0.0),\r\n\t\t\t\tnew TestCase(\"0e-1111111111111111\",   true,   19,  1,  1, 19,       0,       0,  0.0),\r\n                new TestCase(\"89.99\",                 true,    5,  2,  2,  5,      89,      89,  89.99),\r\n                new TestCase(\"-12.3\",                 true,    5,  3,  3,  5,     -12,     -12, -12.3),\r\n                new TestCase(\"0.12345678901234567890123456789\",true,   31, 1,   1, 31,       0,       0,  0.12345678901234567890123456789),\r\n\t\t\t    new TestCase(\"0.00000000000034567890123456789\",true,   31, 1,   1, 31,       0,       0,  0.00000000000034567890123456789),\r\n                new TestCase(\"1.89\",                  true,    4,  1,  1,  4,       1,       1,  1.89),\r\n\t\t\t};\r\n\r\n        [TestMethod]\r\n        static void TestIsNumber()\r\n        {\r\n            foreach (TestCase c in cases)\r\n            {\r\n                int d, l, iv, p = 0;\r\n                double dv;\r\n                long lv;\r\n                var info = PHP.Core.Convert.IsNumber(c.s, (c.s != null) ? c.s.Length : 0, p, out l, out d, out iv, out lv, out dv);\r\n\r\n                Assert.IsTrue(c.isnum == ((info & PHP.Core.Convert.NumberInfo.IsNumber) != 0));\r\n                //Assert.AreEqual(c.p, p);\r\n                //Assert.AreEqual(c.i, i);\r\n                Assert.AreEqual(c.l, l);\r\n                Assert.AreEqual(c.d, d);\r\n                Assert.AreEqual(c.iv, iv);\r\n                Assert.IsTrue(Double.IsNaN(c.dv) || c.dv == dv);\r\n                Assert.AreEqual(c.lv, lv);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/Core.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{2BC9950D-CD28-4A47-A405-0AE639A76384}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Core.Tests</RootNamespace>\r\n    <AssemblyName>PhpNet.Core.Tests</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\r\n    <IsCodedUITest>False</IsCodedUITest>\r\n    <TestProjectType>UnitTest</TestProjectType>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <AssemblyOriginatorKeyFile>Core.Tests.snk</AssemblyOriginatorKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n      </ItemGroup>\r\n    </When>\r\n    <Otherwise>\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\r\n      </ItemGroup>\r\n    </Otherwise>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Compile Include=\"PrimitiveTypeTests.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"NodeCompilersTests.cs\" />\r\n    <Compile Include=\"OperatorsTests.cs\" />\r\n    <Compile Include=\"ConvertTests.cs\" />\r\n    <Compile Include=\"TypeDescsTests.cs\" />\r\n    <Compile Include=\"PhpTypeCodeTests.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Core.Tests.snk\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n          <Private>False</Private>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Source/Core.Tests/NodeCompilersTests.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core.AST;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class NodeCompilersTests\r\n    {\r\n        [TestMethod]\r\n        public void TestAstNodeCompilersDefined()\r\n        {\r\n            var dict = PHP.Core.Compiler.AST.AstNodeExtension.AstNodeExtensionTypes;\r\n            Assert.IsNotNull(dict);\r\n\r\n            var asttypes = typeof(LangElement).Assembly\r\n                .GetTypes()\r\n                .Where(t => !t.IsAbstract && !t.IsInterface && t.IsPublic && typeof(AstNode).IsAssignableFrom(t));\r\n\r\n            foreach (var t in asttypes)\r\n            {\r\n                var compilerinfo = dict[t];\r\n\r\n#if DEBUG\r\n                compilerinfo.Test();\r\n#endif\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/OperatorsTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class OperatorsTests\r\n    {\r\n        [TestMethod]\r\n        static void TestAddition()\r\n        {\r\n            object[,] cases = \r\n\t\t\t{\r\n\t\t\t{ 1, 2, 3 },\r\n\t\t\t{ Int32.MaxValue-10, \"10dfghgfh\", Int32.MaxValue },\r\n\t\t\t{ \"-100\", \"+100\", 0 },\r\n\t\t\t{ \"100\", \"100.0000000001\", 200.0000000001 },\r\n\t\t\t};\r\n\r\n            for (int i = 0; i < cases.GetLength(1); i++)\r\n            {\r\n                object result = Operators.Add(cases[i, 0], cases[i, 1]);\r\n                Assert.Equals(result, cases[i, 2]);\r\n            }\r\n\r\n            PhpArray a = Operators.Add(\r\n                PhpArray.New(new object[] { \"a\", 5, 7 }),\r\n                PhpArray.New(new object[] { \"8q\", 1 })\r\n            ) as PhpArray;\r\n\r\n            Assert.IsTrue(a != null && a.Count == 3 && (string)a[0] == \"a\" && (int)a[1] == 5 && (int)a[2] == 7);\r\n        }\r\n\r\n        [TestMethod]\r\n        static void TestShiftLeft()\r\n        {\r\n            object[,] cases = \r\n\t\t\t{\r\n\t\t\t{ \"1.5xxx\", -35, 536870912 },\r\n\t\t\t{ \"1.5xxx\",   0, 1 },\r\n\t\t\t{ \"1.5xxx\",  34, 17179869184L } // 64bit behaviour\r\n\t\t\t};\r\n\r\n            for (int i = 0; i < cases.GetLength(1); i++)\r\n            {\r\n                object result = Operators.ShiftLeft(cases[i, 0], cases[i, 1]);\r\n                Assert.AreEqual(result, cases[i, 2]);\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        static void Concat()\r\n        {\r\n            PhpBytes a = new PhpBytes(new byte[] { 61, 62, 63 });\r\n            string b = \"-hello-\";\r\n            PhpBytes c = new PhpBytes(new byte[] { 61, 61, 61 });\r\n            string d = \"-bye-\";\r\n\r\n            object result = Operators.Concat(a, b, c, d);\r\n            Assert.IsTrue(Operators.StrictEquality(result, \"=>?-hello-===-bye-\"));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/PhpTypeCodeTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class PhpTypeCodeTests\r\n    {\r\n        [TestMethod]\r\n        public void TestGetByTypeCode()\r\n        {\r\n            // positive tests\r\n            foreach (var typecode in new PhpTypeCode[] {\r\n                PhpTypeCode.Boolean,\r\n                PhpTypeCode.Integer,\r\n                PhpTypeCode.LongInteger,\r\n                PhpTypeCode.Double,\r\n                PhpTypeCode.String,\r\n                PhpTypeCode.PhpResource,\r\n                PhpTypeCode.PhpArray,\r\n                PhpTypeCode.DObject,\r\n                PhpTypeCode.PhpCallable})\r\n            {\r\n                Assert.IsNotNull(PrimitiveType.GetByTypeCode(typecode));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/PrimitiveTypeTests.cs",
    "content": "﻿using System;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class PrimitiveTypeTests\r\n    {\r\n        [TestMethod]\r\n        public void TestGetByName()\r\n        {\r\n            // positive tests\r\n            foreach (var name in new[] {\r\n                QualifiedName.Boolean,\r\n                QualifiedName.Integer, \r\n                QualifiedName.LongInteger,\r\n                QualifiedName.Double,\r\n                QualifiedName.String,\r\n                QualifiedName.Resource,\r\n                QualifiedName.Array,\r\n                QualifiedName.Object,\r\n                QualifiedName.Callable})\r\n            {\r\n                Assert.IsTrue(name.IsPrimitiveTypeName);\r\n                Assert.IsNotNull(PrimitiveType.GetByName(name));\r\n                Assert.IsNotNull(PrimitiveType.GetByName(new PrimitiveTypeName(name)));\r\n            }\r\n\r\n            // false tests\r\n            foreach (var name in new[] {\r\n                QualifiedName.Error,\r\n                QualifiedName.False, \r\n                QualifiedName.Global,\r\n                QualifiedName.Lambda,\r\n                QualifiedName.Null,\r\n                QualifiedName.True})\r\n            {\r\n                Assert.IsFalse(name.IsPrimitiveTypeName);\r\n                Assert.IsNull(PrimitiveType.GetByName(name));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Core.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Core.Tests\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"Core.Tests\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"1fb12b6e-bbd3-4be6-8f35-18343d85e12f\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Source/Core.Tests/TypeDescsTests.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Core.Tests\r\n{\r\n    [TestClass]\r\n    public class TypeDescsTests\r\n    {\r\n        [TestMethod]\r\n        public static void TestPhpObjectInterfaces()\r\n        {\r\n            Type[] ifaces = typeof(PhpObject).GetInterfaces();\r\n            Type[] expected = new Type[]\r\n\t\t\t\t{ \r\n\t\t\t\t\ttypeof(PHP.Core.IPhpVariable),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpConvertible),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpPrintable),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpCloneable),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpComparable),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpObjectGraphNode),\r\n\t\t\t\t\ttypeof(PHP.Core.IPhpEnumerable),\r\n\t\t\t\t\ttypeof(System.IDisposable),\r\n                    typeof(System.Dynamic.IDynamicMetaObjectProvider),\r\n#if !SILVERLIGHT\r\n\t\t\t\t\ttypeof(System.Runtime.Serialization.ISerializable),\r\n\t\t\t\t\ttypeof(System.Runtime.Serialization.IDeserializationCallback) \r\n#endif\r\n\t\t\t\t};\r\n\r\n            Assert.AreEqual(ifaces.Length, expected.Length);\r\n            Assert.IsTrue(ifaces.All(iface =>\r\n            {\r\n                return Array.IndexOf(expected, iface) != -1;\r\n            }), \"ReflectInterfaces must be updated if PhpObject implements different interfaces than listed\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CURLcode.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// Status code returned from Curl functions.\r\n    /// </summary>\r\n    public enum CURLcode\r\n    {\r\n        /// <summary>\r\n        /// All fine. Proceed as usual.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_OK\")]\r\n        CURLE_OK = 0,\r\n        /// <summary>\r\n        /// Aborted by callback. An internal callback returned \"abort\"\r\n        /// to libcurl. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_ABORTED_BY_CALLBACK\")]\r\n        CURLE_ABORTED_BY_CALLBACK = 42,\r\n        /// <summary>\r\n        /// Internal error. A function was called in a bad order.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_BAD_CALLING_ORDER\")]\r\n        CURLE_BAD_CALLING_ORDER = 44,\r\n        /// <summary>\r\n        /// Unrecognized transfer encoding.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_BAD_CONTENT_ENCODING\")]\r\n        CURLE_BAD_CONTENT_ENCODING = 61,\r\n        /// <summary>\r\n        /// Attempting FTP resume beyond file size.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_BAD_DOWNLOAD_RESUME\")]\r\n        CURLE_BAD_DOWNLOAD_RESUME = 36,\r\n        /// <summary>\r\n        /// Internal error. A function was called with a bad parameter.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_BAD_FUNCTION_ARGUMENT\")]\r\n        CURLE_BAD_FUNCTION_ARGUMENT = 43,\r\n        /// <summary>\r\n        /// Bad password entered. An error was signaled when the password was\r\n        /// entered. This can also be the result of a \"bad password\" returned\r\n        /// from a specified password callback. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_BAD_PASSWORD_ENTERED\")]\r\n        CURLE_BAD_PASSWORD_ENTERED = 46,\r\n        /// <summary>\r\n        /// Failed to connect to host or proxy. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_COULDNT_CONNECT\")]\r\n        CURLE_COULDNT_CONNECT = 7,\r\n        /// <summary>\r\n        /// Couldn't resolve host. The given remote host was not resolved. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_COULDNT_RESOLVE_HOST\")]\r\n        CURLE_COULDNT_RESOLVE_HOST = 6,\r\n        /// <summary>\r\n        /// Couldn't resolve proxy. The given proxy host could not be resolved.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_COULDNT_RESOLVE_PROXY\")]\r\n        CURLE_COULDNT_RESOLVE_PROXY = 5,\r\n        /// <summary>\r\n        /// Very early initialization code failed. This is likely to be an\r\n        /// internal error or problem. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FAILED_INIT\")]\r\n        CURLE_FAILED_INIT = 2,\r\n        /// <summary>\r\n        /// Maximum file size exceeded.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FILESIZE_EXCEEDED\")]\r\n        CURLE_FILESIZE_EXCEEDED = 63,\r\n        /// <summary>\r\n        /// A file given with FILE:// couldn't be opened. Most likely\r\n        /// because the file path doesn't identify an existing file. Did\r\n        /// you check file permissions? \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FILE_COULDNT_READ_FILE\")]\r\n        CURLE_FILE_COULDNT_READ_FILE = 37,\r\n        /// <summary>\r\n        /// We were denied access when trying to login to an FTP server or\r\n        /// when trying to change working directory to the one given in the URL. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_ACCESS_DENIED\")]\r\n        CURLE_FTP_ACCESS_DENIED = 9,\r\n        /// <summary>\r\n        /// An internal failure to lookup the host used for the new\r\n        /// connection.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_CANT_GET_HOST\")]\r\n        CURLE_FTP_CANT_GET_HOST = 15,\r\n        /// <summary>\r\n        /// A bad return code on either PASV or EPSV was sent by the FTP\r\n        /// server, preventing libcurl from being able to continue. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_CANT_RECONNECT\")]\r\n        CURLE_FTP_CANT_RECONNECT = 16,\r\n        /// <summary>\r\n        /// The FTP SIZE command returned error. SIZE is not a kosher FTP\r\n        /// command, it is an extension and not all servers support it. This\r\n        /// is not a surprising error. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_GET_SIZE\")]\r\n        CURLE_FTP_COULDNT_GET_SIZE = 32,\r\n        /// <summary>\r\n        /// This was either a weird reply to a 'RETR' command or a zero byte\r\n        /// transfer complete. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_RETR_FILE\")]\r\n        CURLE_FTP_COULDNT_RETR_FILE = 19,\r\n        /// <summary>\r\n        /// libcurl failed to set ASCII transfer type (TYPE A).\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_SET_ASCII\")]\r\n        CURLE_FTP_COULDNT_SET_ASCII = 29,\r\n        /// <summary>\r\n        /// Received an error when trying to set the transfer mode to binary.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_SET_BINARY\")]\r\n        CURLE_FTP_COULDNT_SET_BINARY = 17,\r\n        /// <summary>\r\n        /// FTP couldn't STOR file. The server denied the STOR operation.\r\n        /// The error buffer usually contains the server's explanation to this. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_STOR_FILE\")]\r\n        CURLE_FTP_COULDNT_STOR_FILE = 25,\r\n        /// <summary>\r\n        /// The FTP REST command returned error. This should never happen\r\n        /// if the server is sane. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_COULDNT_USE_REST\")]\r\n        CURLE_FTP_COULDNT_USE_REST = 31,\r\n        /// <summary>\r\n        /// The FTP PORT command returned error. This mostly happen when\r\n        /// you haven't specified a good enough address for libcurl to use.\r\n        /// See <see cref=\"CurlOption.CURLOPT_FTPPORT\"/>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_PORT_FAILED\")]\r\n        CURLE_FTP_PORT_FAILED = 30,\r\n        /// <summary>\r\n        /// When sending custom \"QUOTE\" commands to the remote server, one\r\n        /// of the commands returned an error code that was 400 or higher. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_QUOTE_ERROR\")]\r\n        CURLE_FTP_QUOTE_ERROR = 21,\r\n        /// <summary>\r\n        /// Requested FTP SSL level failed.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_SSL_FAILED\")]\r\n        CURLE_FTP_SSL_FAILED = 64,\r\n        /// <summary>\r\n        /// The FTP server rejected access to the server after the password\r\n        /// was sent to it. It might be because the username and/or the\r\n        /// password were incorrect or just that the server is not allowing\r\n        /// you access for the moment etc. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_USER_PASSWORD_INCORRECT\")]\r\n        CURLE_FTP_USER_PASSWORD_INCORRECT = 10,\r\n        /// <summary>\r\n        /// FTP servers return a 227-line as a response to a PASV command.\r\n        /// If libcurl fails to parse that line, this return code is\r\n        /// passed back. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WEIRD_227_FORMAT\")]\r\n        CURLE_FTP_WEIRD_227_FORMAT = 14,\r\n        /// <summary>\r\n        /// After having sent the FTP password to the server, libcurl expects\r\n        /// a proper reply. This error code indicates that an unexpected code\r\n        /// was returned. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WEIRD_PASS_REPLY\")]\r\n        CURLE_FTP_WEIRD_PASS_REPLY = 11,\r\n        /// <summary>\r\n        /// libcurl failed to get a sensible result back from the server as\r\n        /// a response to either a PASV or a EPSV command. The server is flawed. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WEIRD_PASV_REPLY\")]\r\n        CURLE_FTP_WEIRD_PASV_REPLY = 13,\r\n        /// <summary>\r\n        /// After connecting to an FTP server, libcurl expects to get a\r\n        /// certain reply back. This error code implies that it got a strange\r\n        /// or bad reply. The given remote server is probably not an\r\n        /// OK FTP server. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WEIRD_SERVER_REPLY\")]\r\n        CURLE_FTP_WEIRD_SERVER_REPLY = 8,\r\n        /// <summary>\r\n        /// After having sent user name to the FTP server, libcurl expects a\r\n        /// proper reply. This error code indicates that an unexpected code\r\n        /// was returned. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WEIRD_USER_REPLY\")]\r\n        CURLE_FTP_WEIRD_USER_REPLY = 12,\r\n        /// <summary>\r\n        /// After a completed file transfer, the FTP server did not respond a\r\n        /// proper \"transfer successful\" code. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FTP_WRITE_ERROR\")]\r\n        CURLE_FTP_WRITE_ERROR = 20,\r\n        /// <summary>\r\n        /// Function not found. A required LDAP function was not found.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_FUNCTION_NOT_FOUND\")]\r\n        CURLE_FUNCTION_NOT_FOUND = 41,\r\n        /// <summary>\r\n        /// Nothing was returned from the server, and under the circumstances,\r\n        /// getting nothing is considered an error.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_GOT_NOTHING\")]\r\n        CURLE_GOT_NOTHING = 52,\r\n        /// <summary>\r\n        /// This is an odd error that mainly occurs due to internal confusion.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_HTTP_POST_ERROR\")]\r\n        CURLE_HTTP_POST_ERROR = 34,\r\n        /// <summary>\r\n        /// The HTTP server does not support or accept range requests.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_HTTP_RANGE_ERROR\")]\r\n        CURLE_HTTP_RANGE_ERROR = 33,\r\n        /// <summary>\r\n        /// This is returned if <see cref=\"CurlOption.CURLOPT_FAILONERROR\"/>\r\n        /// is set TRUE and the HTTP server returns an error code that\r\n        /// is >= 400. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_HTTP_RETURNED_ERROR\")]\r\n        CURLE_HTTP_RETURNED_ERROR = 22,\r\n        /// <summary>\r\n        /// Interface error. A specified outgoing interface could not be\r\n        /// used. Set which interface to use for outgoing connections'\r\n        /// source IP address with <see cref=\"CurlOption.CURLOPT_INTERFACE\"/>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_INTERFACE_FAILED\")]\r\n        CURLE_INTERFACE_FAILED = 45,\r\n        /// <summary>\r\n        /// End-of-enumeration marker; do not use in client applications.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_LAST\")]\r\n        CURLE_LAST = 67,\r\n        /// <summary>\r\n        /// LDAP cannot bind. LDAP bind operation failed.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_LDAP_CANNOT_BIND\")]\r\n        CURLE_LDAP_CANNOT_BIND = 38,\r\n        /// <summary>\r\n        /// Invalid LDAP URL.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_LDAP_INVALID_URL\")]\r\n        CURLE_LDAP_INVALID_URL = 62,\r\n        /// <summary>\r\n        /// LDAP search failed.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_LDAP_SEARCH_FAILED\")]\r\n        CURLE_LDAP_SEARCH_FAILED = 39,\r\n        /// <summary>\r\n        /// Library not found. The LDAP library was not found.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_LIBRARY_NOT_FOUND\")]\r\n        CURLE_LIBRARY_NOT_FOUND = 40,\r\n        /// <summary>\r\n        /// Malformat user. User name badly specified. *Not currently used*\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_MALFORMAT_USER\")]\r\n        CURLE_MALFORMAT_USER = 24,\r\n        /// <summary>\r\n        /// This is not an error. This used to be another error code in an\r\n        /// old libcurl version and is currently unused. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_OBSOLETE\")]\r\n        CURLE_OBSOLETE = 50,\r\n        /// <summary>\r\n        /// Operation timeout. The specified time-out period was reached\r\n        /// according to the conditions. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_OPERATION_TIMEOUTED\")]\r\n        CURLE_OPERATION_TIMEOUTED = 28,\r\n        /// <summary>\r\n        /// Out of memory. A memory allocation request failed. This is serious\r\n        /// badness and things are severely messed up if this ever occurs. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_OUT_OF_MEMORY\")]\r\n        CURLE_OUT_OF_MEMORY = 27,\r\n        /// <summary>\r\n        /// A file transfer was shorter or larger than expected. This\r\n        /// happens when the server first reports an expected transfer size,\r\n        /// and then delivers data that doesn't match the previously\r\n        /// given size. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_PARTIAL_FILE\")]\r\n        CURLE_PARTIAL_FILE = 18,\r\n        /// <summary>\r\n        /// There was a problem reading a local file or an error returned by\r\n        /// the read callback. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_READ_ERROR\")]\r\n        CURLE_READ_ERROR = 26,\r\n        /// <summary>\r\n        /// Failure with receiving network data.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_RECV_ERROR\")]\r\n        CURLE_RECV_ERROR = 56,\r\n        /// <summary>\r\n        /// Failed sending network data.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SEND_ERROR\")]\r\n        CURLE_SEND_ERROR = 55,\r\n        /// <summary>\r\n        /// Sending the data requires a rewind that failed.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURL_SEND_FAIL_REWIND\")]\r\n        CURL_SEND_FAIL_REWIND = 65,\r\n        /// <summary>\r\n        /// Share is in use.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SHARE_IN_USE\")]\r\n        CURLE_SHARE_IN_USE = 57,\r\n        /// <summary>\r\n        /// Problem with the CA cert (path? access rights?) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_CACERT\")]\r\n        CURLE_SSL_CACERT = 60,\r\n        /// <summary>\r\n        /// There's a problem with the local client certificate. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_CERTPROBLEM\")]\r\n        CURLE_SSL_CERTPROBLEM = 58,\r\n        /// <summary>\r\n        /// Couldn't use specified cipher. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_CIPHER\")]\r\n        CURLE_SSL_CIPHER = 59,\r\n        /// <summary>\r\n        /// A problem occurred somewhere in the SSL/TLS handshake. It\r\n        /// could be certificates (file formats, paths, permissions),\r\n        /// passwords, and others. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_CONNECT_ERROR\")]\r\n        CURLE_SSL_CONNECT_ERROR = 35,\r\n        /// <summary>\r\n        /// Failed to initialize SSL engine.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_ENGINE_INITFAILED\")]\r\n        CURLE_SSL_ENGINE_INITFAILED = 66,\r\n        /// <summary>\r\n        /// The specified crypto engine wasn't found. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_ENGINE_NOTFOUND\")]\r\n        CURLE_SSL_ENGINE_NOTFOUND = 53,\r\n        /// <summary>\r\n        /// Failed setting the selected SSL crypto engine as default!\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_ENGINE_SETFAILED\")]\r\n        CURLE_SSL_ENGINE_SETFAILED = 54,\r\n        /// <summary>\r\n        /// The remote server's SSL certificate was deemed not OK.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_PEER_CERTIFICATE\")]\r\n        CURLE_SSL_PEER_CERTIFICATE = 51,\r\n        /// <summary>\r\n        /// A telnet option string was improperly formatted.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_TELNET_OPTION_SYNTAX\")]\r\n        CURLE_TELNET_OPTION_SYNTAX = 49,\r\n        /// <summary>\r\n        /// Too many redirects. When following redirects, libcurl hit the\r\n        /// maximum amount. Set your limit with\r\n        /// <see cref=\"CurlOption.CURLOPT_MAXREDIRS\"/>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_TOO_MANY_REDIRECTS\")]\r\n        CURLE_TOO_MANY_REDIRECTS = 47,\r\n        /// <summary>\r\n        /// An option set with <see cref=\"CurlOption.CURLOPT_TELNETOPTIONS\"/>\r\n        /// was not recognized/known. Refer to the appropriate documentation. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_UNKNOWN_TELNET_OPTION\")]\r\n        CURLE_UNKNOWN_TELNET_OPTION = 48,\r\n        /// <summary>\r\n        /// The URL you passed to libcurl used a protocol that this libcurl\r\n        /// does not support. The support might be a compile-time option that\r\n        /// wasn't used, it can be a misspelled protocol string or just a\r\n        /// protocol libcurl has no code for. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_UNSUPPORTED_PROTOCOL\")]\r\n        CURLE_UNSUPPORTED_PROTOCOL = 1,\r\n        /// <summary>\r\n        /// The URL was not properly formatted. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_URL_MALFORMAT\")]\r\n        CURLE_URL_MALFORMAT = 3,\r\n        /// <summary>\r\n        /// URL user malformatted. The user-part of the URL syntax was not\r\n        /// correct. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_URL_MALFORMAT_USER\")]\r\n        CURLE_URL_MALFORMAT_USER = 4,\r\n        /// <summary>\r\n        /// An error occurred when writing received data to a local file,\r\n        /// or an error was returned to libcurl from a write callback. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_WRITE_ERROR\")]\r\n        CURLE_WRITE_ERROR = 23,\r\n\r\n        /// <summary>\r\n        /// Could not load CACERT file, missing or wrong format\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLE_SSL_CACERT_BADFILE\")]\r\n        CURLE_SSL_CACERT_BADFILE = 77,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_CALL_MULTI_PERFORM\")]\r\n        CURLM_CALL_MULTI_PERFORM = -1,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_OK\")]\r\n        CURLM_OK = 0,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_BAD_HANDLE\")]\r\n        CURLM_BAD_HANDLE = 1,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_BAD_EASY_HANDLE\")]\r\n        CURLM_BAD_EASY_HANDLE = 2,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_OUT_OF_MEMORY\")]\r\n        CURLM_OUT_OF_MEMORY = 3,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLM_INTERNAL_ERROR\")]\r\n        CURLM_INTERNAL_ERROR = 4,\r\n\r\n        /// <summary></summary>\r\n        [ImplementsConstant(\"CURLMSG_DONE\")]\r\n        CURLMSG_DONE = 1\r\n    };\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Configuration.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    #region Local Configuration\r\n\r\n    /// <summary>\r\n    /// Script independent mbstring configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class CurlLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal CurlLocalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (CurlLocalConfig)this.MemberwiseClone();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Global Configuration\r\n\r\n    /// <summary>\r\n    /// Script dependent MSSQL configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class CurlGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal CurlGlobalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <param name=\"value\"></param>\r\n        /// <param name=\"node\"></param>\r\n        /// <returns></returns>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (CurlGlobalConfig)this.MemberwiseClone();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// mbstring extension configuration.\r\n    /// </summary>\r\n    public static class CurlConfiguration\r\n    {\r\n        #region Legacy Configuration\r\n\r\n        /// <summary>\r\n        /// Gets, sets, or restores a value of a legacy configuration option.\r\n        /// </summary>\r\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n        {\r\n            CurlLocalConfig local = (CurlLocalConfig)config.GetLibraryConfig(CurlLibraryDescriptor.Singleton);\r\n            CurlLocalConfig @default = DefaultLocal;\r\n            CurlGlobalConfig global = Global;\r\n\r\n            //switch (option)\r\n            //{\r\n            //// local:\r\n\r\n            //case \"mssql.connect_timeout\":\r\n            //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n            //case \"mssql.timeout\":\r\n            //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n            //case \"mssql.batchsize\":\r\n            //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n            //// global:  \r\n\r\n            //case \"mssql.max_links\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n            //case \"mssql.secure_connection\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n            //}\r\n\r\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes MySql legacy options and their values to XML text stream.\r\n        /// Skips options whose values are the same as default values of Phalanger.\r\n        /// </summary>\r\n        /// <param name=\"writer\">XML writer.</param>\r\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n        {\r\n            if (writer == null)\r\n                throw new ArgumentNullException(\"writer\");\r\n            if (options == null)\r\n                throw new ArgumentNullException(\"options\");\r\n\r\n            CurlLocalConfig local = new CurlLocalConfig();\r\n            CurlGlobalConfig global = new CurlGlobalConfig();\r\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            //ow.StartSection(\"mbstring\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n            ow.WriteEnd();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers legacy ini-options.\r\n        /// </summary>\r\n        internal static void RegisterLegacyOptions()\r\n        {\r\n            //const string s = MbstringLibraryDescriptor.ExtensionName;\r\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Configuration Getters\r\n\r\n        /// <summary>\r\n        /// Gets the library configuration associated with the current script context.\r\n        /// </summary>\r\n        public static CurlLocalConfig Local\r\n        {\r\n            get\r\n            {\r\n                return (CurlLocalConfig)Configuration.Local.GetLibraryConfig(CurlLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the default library configuration.\r\n        /// </summary>\r\n        public static CurlLocalConfig DefaultLocal\r\n        {\r\n            get\r\n            {\r\n                return (CurlLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(CurlLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the global library configuration.\r\n        /// </summary>\r\n        public static CurlGlobalConfig Global\r\n        {\r\n            get\r\n            {\r\n                return (CurlGlobalConfig)Configuration.Global.GetLibraryConfig(CurlLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets local configuration associated with a specified script context.\r\n        /// </summary>\r\n        /// <param name=\"context\">Scritp context.</param>\r\n        /// <returns>Local library configuration.</returns>\r\n        public static CurlLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n        {\r\n            if (context == null)\r\n                throw new ArgumentNullException(\"context\");\r\n\r\n            return (CurlLocalConfig)context.Config.GetLibraryConfig(CurlLibraryDescriptor.Singleton);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Cookies.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Net;\r\nusing PHP.Core;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    static class Cookies\r\n    {\r\n\r\n        public enum NetscapeCookieToken : int\r\n        {\r\n            Domain = 0,\r\n            TailMatch = 1,\r\n            Path = 2,\r\n            Secure = 3,\r\n            Expires = 4,\r\n            Name = 5,\r\n            Value = 6\r\n        }\r\n\r\n        /// <summary>\r\n        /// Formats a string for Netscape output file, w/o a newline at the end.\r\n        /// </summary>\r\n        /// <param name=\"cookie\">Cookie to format</param>\r\n        /// <returns></returns>\r\n        public static string ToNetscapeFormat(this Cookie cookie)\r\n        {\r\n            return String.Format(\r\n              \"{0}\" +     /* httponly preamble */\r\n              \"{1}{2}\\t\" + /* domain */\r\n              \"{3}\\t\" +   /* tailmatch */\r\n              \"{4}\\t\" +   /* path */\r\n              \"{5}\\t\" +   /* secure */\r\n              \"{6}\\t\" +   /* expires */\r\n              \"{7}\\t\" +   /* name */\r\n              \"{8}\",    /* value */\r\n              cookie.HttpOnly ? \"#HttpOnly_\" : \"\",\r\n                /* Make sure all domains are prefixed with a dot if they allow\n                   tailmatching. This is Mozilla-style. */\r\n              String.Empty,//TODO: (cookie.Domain->tailmatch && co->domain && co->domain[0] != '.')? \".\":\"\",\r\n              cookie.Domain ?? \"unknown\",\r\n              cookie.Domain != null && cookie.Domain[0] == '.' ? \"TRUE\" : \"FALSE\",\r\n              cookie.Path != null ? cookie.Path : \"/\",\r\n              cookie.Secure ? \"TRUE\" : \"FALSE\",\r\n              (cookie.Expires - new DateTime(1970, 1, 1)).TotalSeconds,\r\n              cookie.Name,\r\n              cookie.Value);\r\n        }\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// Writes all internally known cookies to the specified file. \r\n        /// </summary>\r\n        /// <param name=\"cookies\">Cookies to dump</param>\r\n        /// <param name=\"dumpFile\">Path to file where to dump cookie. Specify '-' to write to stdout\r\n        /// </param>\r\n        public static void CookieOutput(CookieCollection cookies, string dumpFile)\r\n        {\r\n            System.IO.TextWriter output = null;\r\n            bool use_stdoutput = false;\r\n\r\n            if (cookies == null || cookies.Count == 0)\r\n            {\r\n                //If there are no known cookies, we don't write or even create any\r\n                //destination file\r\n\r\n                return;\r\n            }\r\n\r\n\r\n            if (dumpFile == \"-\")\r\n            {\r\n                output = ScriptContext.CurrentContext.Output;\r\n                use_stdoutput = true;\r\n            }\r\n            else\r\n            {\r\n                output = new System.IO.StreamWriter(dumpFile);\r\n                //output.NewLine = \"\\r\";\r\n            }\r\n\r\n            try\r\n            {\r\n                output.WriteLine(\"# Netscape HTTP Cookie File\");\r\n                output.WriteLine(\"# http://curl.haxx.se/rfc/cookie_spec.html\");\r\n                output.WriteLine(\"# This file was generated by managed curl! Edit at your own risk.\");\r\n                output.WriteLine();\r\n\r\n                foreach (Cookie cookie in cookies)\r\n                {\r\n                    output.WriteLine(cookie.ToNetscapeFormat());\r\n                }\r\n\r\n            }\r\n            finally\r\n            {\r\n                if (!use_stdoutput)\r\n                    output.Close();\r\n            }\r\n        }\r\n\r\n\r\n        //ORIGINAL void Curl_flush_cookies(struct SessionHandle *data, int cleanup)\r\n        public static void FlushCookies(UserDefined data/*, int cleanup*/)\r\n        {\r\n            string cookieJar = data.Str[(int)DupString.COOKIEJAR] as string;\r\n\r\n            if (!String.IsNullOrEmpty(cookieJar))\r\n            {\r\n                var cookies = data.Cookies;\r\n\r\n                string fullPath = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, cookieJar);\r\n\r\n\r\n                //TODO: check the file lock Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);\r\n                try\r\n                {\r\n                    CookieOutput(cookies, cookieJar);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // do nothing\r\n                    PhpException.Throw(PhpError.Warning, String.Format(\"WARNING: failed to save cookies in {0}; {1}\\n\", cookieJar, ex.Message));\r\n                }\r\n\r\n                //  }\r\n                //  else {\r\n                //    if(cleanup && data->change.cookielist)\r\n                //      /* since nothing is written, we can just free the list of cookie file\r\n                //         names */\r\n                //      curl_slist_free_all(data->change.cookielist); /* clean up list */\r\n                //    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);\r\n                //  }\r\n\r\n                //  if(cleanup && (!data->share || (data->cookies != data->share->cookies))) {\r\n                //    Curl_cookie_cleanup(data->cookies);\r\n                //  }\r\n                //  Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);\r\n            }\r\n\r\n        }\r\n\r\n\r\n        public static void LoadCookiesFromFiles(CookieCollection/*!*/ cookies, List<string> cookiesFileList)\r\n        {\r\n            Debug.Assert(cookies != null);\r\n\r\n            Cookie cookie;\r\n            StringBuilder content = new StringBuilder();\r\n\r\n            foreach (string file in cookiesFileList)\r\n            {\r\n                //Current Working Directory\r\n                try\r\n                {\r\n\r\n                    if (File.Exists(file))\r\n                        content.Append(File.ReadAllText(file));\r\n                }\r\n                catch (Exception)\r\n                {\r\n                    //Ignore a problem as native curl does\r\n                }\r\n            }\r\n            //TODO: determine if it's netscape cookie format dump or normal cookie dump and for now at least throw exception in this case\r\n            string line; \r\n            using (TextReader reader = new StringReader(content.ToString()))\r\n            {\r\n                while ((line = reader.ReadLine()) != null)\r\n                {\r\n                    cookie = ParseCookieNetscapeFormatLine(line);\r\n\r\n                    if (cookie != null)\r\n                        cookies.Add(cookie);\r\n                }\r\n\r\n            }\r\n            //cookies.SetCookies(uri, content.ToString());\r\n\r\n        }\r\n\r\n        public static Cookie ParseCookieNetscapeFormatLine(string cookieLine)\r\n        {\r\n            Cookie resCookie = new Cookie();\r\n\r\n            if (cookieLine.Length == 0)\r\n                return null;\r\n\r\n            if (cookieLine[0] == '#')\r\n            {\r\n                //  IE introduced HTTP-only cookies to prevent XSS attacks. Cookies\r\n                //  marked with httpOnly after the domain name are not accessible\r\n                //  from javascripts, but since curl does not operate at javascript\r\n                //  level, we include them anyway. In Firefox's cookie files, these\r\n                //  lines are preceeded with #HttpOnly_ and then everything is\r\n                //  as usual, so we skip 10 characters of the line..\r\n\r\n                if (cookieLine.StartsWith(\"#HttpOnly_\"))\r\n                {\r\n                    cookieLine = cookieLine.Substring(10);\r\n                    resCookie.HttpOnly = true;//native curl just skip this and doesn't remember it\r\n                }\r\n                else\r\n                {\r\n                    //It's a comment\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            //Trim end of line characters\r\n            cookieLine.TrimEnd('\\n', '\\r');\r\n\r\n            String[] parts = cookieLine.Split('\\t');\r\n\r\n            // quick check to eliminate normal HTTP-headers from this ??\r\n\r\n            int field = 0;\r\n            foreach (string part in parts)\r\n            {\r\n                switch ((NetscapeCookieToken)field)\r\n                {\r\n\r\n                    case NetscapeCookieToken.Domain:\r\n                        //\r\n                        //if (part[0] == '.')\r\n                        //    resCookie.Domain = part.Substring(1);\r\n                        //else\r\n                        //    resCookie.Domain = part;\r\n\r\n                        resCookie.Domain = part;\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.TailMatch:\r\n\r\n                        // This field got its explanation on the 23rd of May 2001 by\r\n                        //Andrés García:\r\n\r\n                        //flag: A TRUE/FALSE value indicating if all machines within a given\r\n                        //domain can access the variable. This value is set automatically by\r\n                        //the browser, depending on the value you set for the domain.\r\n\r\n                        //As far as I can see, it is set to true when the cookie says\r\n                        //.domain.com and to false when the domain is complete www.domain.com\r\n\r\n                        //skiping this for now\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.Path:\r\n\r\n                        //Path part\r\n\r\n                        /* It turns out, that sometimes the file format allows the path\r\n                        field to remain not filled in, we try to detect this and work\r\n                        around it! Andrés García made us aware of this... */\r\n                        if (!part.Equals(\"TRUE\", StringComparison.OrdinalIgnoreCase) &&\r\n                            !part.Equals(\"FALSE\", StringComparison.OrdinalIgnoreCase))\r\n                        {\r\n                            /* only if the path doesn't look like a boolean option! */\r\n                            resCookie.Path = part;\r\n                        }\r\n                        else\r\n                        {\r\n                            /* this doesn't look like a path, make one up! */\r\n                            resCookie.Path = \"/\";\r\n\r\n                            /* add a field and fall down to secure */\r\n                            /* FALLTHROUGH */\r\n                            ++field;\r\n                            goto case NetscapeCookieToken.Secure;\r\n                        }\r\n\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.Secure:\r\n\r\n                        if (part.Equals(\"TRUE\", StringComparison.OrdinalIgnoreCase))\r\n                            resCookie.Secure = true;\r\n\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.Expires:\r\n\r\n                        long expires;\r\n\r\n                        if (long.TryParse(part, out expires))\r\n                        {\r\n                            resCookie.Expires = new DateTime(1970, 1, 1).AddSeconds(expires);\r\n                        }\r\n                        else\r\n                        {\r\n                            //Not valid cookie\r\n                            return null;\r\n                        }\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.Name:\r\n                        resCookie.Name = part;\r\n                        break;\r\n\r\n                    case NetscapeCookieToken.Value:\r\n                        resCookie.Value = part;\r\n                        break;\r\n                }\r\n\r\n                ++field;\r\n            }\r\n\r\n            return resCookie;\r\n        }\r\n        \r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Curl.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Net;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// Implements PHP functions provided by Curl extension.\r\n    /// </summary>\r\n    public static class Curl\r\n    {\r\n\r\n        #region curl_close\r\n\r\n        /// <summary>\r\n        /// Close a cURL session\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_close\")]\r\n        public static void Close(PhpResource ch)\r\n        {\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return;\r\n\r\n            curlHandle.Close();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_copy_handle\r\n\r\n        /// <summary>\r\n        /// Copy a cURL handle along with all of it's preferences\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_copy_handle\")]\r\n        public static PhpResource CopyHandle(PhpResource ch)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_errno\r\n\r\n        /// <summary>\r\n        /// Return an integer containing the last error number\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_errno\")]\r\n        public static object Errno(PhpResource ch)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return null;\r\n\r\n            return (int)curlHandle.ErrorCode;\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_error\r\n\r\n        /// <summary>\r\n        /// Return a string contain the last error for the current session\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_error\")]\r\n        public static string Error(PhpResource ch)\r\n        {\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return null;\r\n            \r\n            switch(curlHandle.ErrorCode)\r\n            {\r\n                case CURLcode.CURLE_OPERATION_TIMEOUTED:\r\n                    return \"Connection time-out\";\r\n                case CURLcode.CURLE_COULDNT_CONNECT:\r\n                    return \"couldn't connect to host\";\r\n                default:\r\n                    return \"\";\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_exec\r\n\r\n        /// <summary>\r\n        /// Perform a cURL session\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_exec\")]\r\n        public static object Execute(PhpResource ch)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return false;\r\n\r\n            return curlHandle.Execute();\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_getinfo\r\n\r\n        /// <summary>\r\n        /// Get information regarding a specific transfer\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_getinfo\")]\r\n        public static object GetInfo(PhpResource ch)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Get information regarding a specific transfer\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_getinfo\")]\r\n        public static object GetInfo(PhpResource ch, CurlInfo option)\r\n        {\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return false;\r\n\r\n            return curlHandle.GetInfo(option);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_init\r\n\r\n        /// <summary>\r\n        /// Initialize a cURL session\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_init\")]\r\n        public static PhpResource Init()\r\n        {\r\n            return new PhpCurlResource();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize a cURL session\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_init\")]\r\n        public static PhpResource Init(string url)\r\n        {\r\n            return new PhpCurlResource(url);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_setopt\r\n\r\n        /// <summary>\r\n        /// Set an option for a cURL transfer\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_setopt\")]\r\n        public static bool SetOpt(PhpResource ch, CurlOption option, object value)\r\n        {\r\n            PhpCurlResource curlHandle = ch as PhpCurlResource;\r\n\r\n            if (curlHandle == null)\r\n                return false;\r\n\r\n            bool valid = false;\r\n            value = option.ValidateAndConvert(value,out valid);\r\n\r\n            if (valid)\r\n            {\r\n                curlHandle.Data.SetOption(option,value);\r\n                return true;\r\n            }\r\n                //exceptions:\r\n            else if (option == CurlOption.CURLOPT_POSTFIELDS)\r\n            {\r\n                //ValidateAndConvert checks just for string\r\n                // this option can be also array or object\r\n\r\n                if (value != null && value.GetType() == typeof(PhpArray))\r\n                {\r\n                    PhpArray arr = (PhpArray)value;\r\n                    var form = CurlForm.Create(arr);\r\n                    curlHandle.Data.SetOption(CurlOption.CURLOPT_HTTPPOST, form);\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        #region curl_setopt_array\r\n\r\n        /// <summary>\r\n        /// Set an array of option for a cURL transfer\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_setopt_array\")]\r\n        public static bool SetOptArray(PhpResource ch, PhpArray options)\r\n        {\r\n            var result = true;\r\n            foreach (var item in options)\r\n            {\r\n                result &= SetOpt(ch, (CurlOption) item.Key.Integer, item.Value);\r\n            }\r\n            return result;\r\n        }\r\n\r\n\r\n        #endregion\r\n\r\n        #region curl_version\r\n\r\n        /// <summary>\r\n        /// Return cURL version information.\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_version\")]\r\n        public static PhpArray Version()\r\n        {\r\n            PhpArray result = new PhpArray();\r\n\r\n            PhpArray protocols = new PhpArray(1);\r\n            protocols.Add(\"http\");\r\n            protocols.Add(\"https\");\r\n\r\n            // In wordpress\r\n            // >= 7.15.2 needs \r\n            //   CURLOPT_FOLLOWLOCATION\r\n            //   CURLOPT_MAXREDIRS\r\n            // >= 7.10.5\r\n            //   CURLOPT_ENCODING\r\n            // >= 7.19.4.\r\n            //   CURLOPT_PROTOCOLS\r\n\r\n            result.Add(\"version\", \"7.21.0\"); //(MB) I'll try this for testing purposes\r\n            result.Add(\"protocols\", protocols);\r\n\r\n\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Return cURL version information.\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_version\")]\r\n        public static PhpArray Version(int version)\r\n        {\r\n            return Version();\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        #region curl_multi_add_handle\r\n\r\n        /// <summary>\r\n        /// Add a normal cURL handle to a cURL multi handle\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_add_handle\")]\r\n        public static int MultiAddHandle(PhpResource mh, PhpResource ch)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            var ch1 = ch as PhpCurlResource;\r\n            if (mh1 == null || ch1 == null)\r\n                return (int)CURLcode.CURLM_INTERNAL_ERROR;\r\n            mh1.Add(ch1);\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_close\r\n\r\n        /// <summary>\r\n        /// Close a set of cURL handles\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_close\")]\r\n        public static void MultiClose(PhpResource mh)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            if (mh1 == null)\r\n                return;\r\n            mh1.Close();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_exec\r\n\r\n        /// <summary>\r\n        /// Run the sub-connections of the current cURL handle\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_exec\")]\r\n        public static int MultiExec(PhpResource mh, ref int still_running)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            if (mh1 == null)\r\n                return (int) CURLcode.CURLM_INTERNAL_ERROR;\r\n            mh1.StartIfNeeded();\r\n            still_running = mh1.StillRunning;\r\n            return (int)(mh1.SomeResultIsReady ? CURLcode.CURLM_OK : CURLcode.CURLM_CALL_MULTI_PERFORM);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_getcontent\r\n\r\n        /// <summary>\r\n        /// Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_getcontent\")]\r\n        public static string MultiGetContent(PhpResource ch)\r\n        {\r\n            var ch1 = ch as PhpCurlResource;\r\n            if (ch1 == null)\r\n                return null;\r\n            var mh = ch1.MultiParent;\r\n            if (mh == null)\r\n                return null;\r\n            return mh.GetResult(ch1).ToString();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_info_read\r\n\r\n        /// <summary>\r\n        /// Get information about the current transfers.\r\n        /// </summary>\r\n        /// <param name=\"mh\">A cURL multi handle returned by curl_multi_init().</param>\r\n        /// <returns>On success, returns an associative array for the message, FALSE on failure.</returns>\r\n        [ImplementsFunction(\"curl_multi_info_read\")]\r\n        public static object MultiInfoRead(PhpResource mh)\r\n        {\r\n            int tmp = 0;\r\n            return MultiInfoRead(mh, ref tmp);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get information about the current transfers\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_info_read\")]\r\n        public static object MultiInfoRead(PhpResource mh, ref int msgs_in_queue)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            if (mh1 == null)\r\n                return false;\r\n            var handle = mh1.NextCompleted();\r\n            msgs_in_queue = mh1.StillRunning;\r\n            if (handle == null)\r\n                return false;\r\n            var arr = new PhpArray();\r\n            arr[\"msg\"] = (int)CURLcode.CURLMSG_DONE;\r\n            arr[\"result\"] = (int)handle.ErrorCode;\r\n            arr[\"handle\"] = handle;\r\n            return arr;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_init\r\n\r\n        /// <summary>\r\n        /// Returns a new cURL multi handle\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_init\")]\r\n        public static PhpResource MultiInit()\r\n        {\r\n            return new PhpCurlMultiResource();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_remove_handle\r\n\r\n        /// <summary>\r\n        /// Remove a multi handle from a set of cURL handles\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_remove_handle\")]\r\n        public static int MultiRemoveHandle(PhpResource mh, PhpResource ch)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            var ch1 = ch as PhpCurlResource;\r\n            if (mh1 == null || ch1 == null)\r\n                return (int)CURLcode.CURLM_INTERNAL_ERROR;\r\n            mh1.Remove(ch1);\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region curl_multi_select\r\n\r\n        /// <summary>\r\n        /// Wait for activity on any curl_multi connection.\r\n        /// </summary>\r\n        /// <param name=\"mh\">A cURL multi handle returned by curl_multi_init().</param>\r\n        /// <returns>On success, returns the number of descriptors contained in the descriptor sets. On failure, this function will return -1 on a select failure or timeout (from the underlying select system call).</returns>\r\n        [ImplementsFunction(\"curl_multi_select\")]\r\n        public static int MultiSelect(PhpResource mh)\r\n        {\r\n            return MultiSelect(mh, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the sockets associated with the cURL extension, which can then be \"selected\"\r\n        /// </summary> \r\n        [ImplementsFunction(\"curl_multi_select\")]\r\n        public static int MultiSelect(PhpResource mh, double timeout)\r\n        {\r\n            var mh1 = mh as PhpCurlMultiResource;\r\n            if (mh1 == null)\r\n                return -1;\r\n            mh1.WaitAny(timeout == 0 ? TimeSpan.MaxValue : TimeSpan.FromSeconds(timeout));\r\n            return 1;\r\n        }\r\n\r\n        #endregion\r\n\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/Curl/CurlForm.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Net;\r\nusing PHP.Core;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\r\n    class CurlForm\r\n    {\r\n\r\n        /// <summary>\r\n        /// This represent one item to send with HTTP_POST_FORM\r\n        /// </summary>\r\n        internal class FormDataItem\r\n        {\r\n            private string name;\r\n            private object data;\r\n\r\n            public string Name\r\n            {\r\n                get { return name; }\r\n            }\r\n\r\n            public object Data\r\n            {\r\n                get { return data; }\r\n            }\r\n\r\n\r\n            public FormDataItem(string name, object data)\r\n            {\r\n                this.name = name;\r\n                this.data = data;\r\n            }\r\n\r\n        }\r\n\r\n        internal class FormFileItem : FormDataItem\r\n        {\r\n            private string fileName;\r\n            private string contentType;\r\n\r\n            public string FileName\r\n            {\r\n                get { return fileName; }\r\n            }\r\n\r\n\r\n            public string ContentType\r\n            {\r\n                get { return contentType; }\r\n            }\r\n\r\n\r\n            public FormFileItem(string name, object data, string fileName, string contentType) :\r\n                base(name, data)\r\n            {\r\n                if (contentType == null)\r\n                    contentType = Utils.ContentTypeForFilename(fileName);\r\n\r\n                this.fileName = fileName;\r\n                this.contentType = contentType;\r\n            }\r\n\r\n        }\r\n\r\n\r\n        public static CurlForm Create(PhpArray arr)\r\n        {\r\n            string type = null;\r\n            string filename;\r\n\r\n            CurlForm form = new CurlForm();\r\n\r\n            //go through items and if item starts with @ we have to treat it as file\r\n            foreach (var item in arr)\r\n            {\r\n                var strValue = PHP.Core.Convert.ObjectToString(item.Value);\r\n                if (!string.IsNullOrEmpty(strValue) && strValue[0] == '@')\r\n                {\r\n                    int index = strValue.IndexOf(\";type=\");\r\n                    if (index != -1)\r\n                        type = strValue.Substring(index + \";type=\".Length);\r\n\r\n\r\n                    index = strValue.IndexOf(\";filename=\");\r\n                    if (index != -1)\r\n                    {\r\n                        filename = strValue.Substring(index + \";filename=\".Length);\r\n                        //filename = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, filename);\r\n                    }\r\n                    else\r\n                    {\r\n                        //filename = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, strValue.Substring(1));\r\n                        filename = strValue.Substring(1);\r\n                    }\r\n\r\n                    form.AddFile(item.Key.String,\r\n                        filename,\r\n                        type != null ? type : \"application/octet-stream\",\r\n                        item.Value\r\n                        );\r\n                    //Code from PHP CURL extension:\r\n                    //error = curl_formadd(&first, &last,\r\n                    //                CURLFORM_COPYNAME, string_key,\r\n                    //                CURLFORM_NAMELENGTH, (long)string_key_len - 1,\r\n                    //                CURLFORM_FILENAME, filename ? filename + sizeof(\";filename=\") - 1 : postval,\r\n                    //                CURLFORM_CONTENTTYPE, type ? type + sizeof(\";type=\") - 1 : \"application/octet-stream\",\r\n                    //                CURLFORM_FILE, postval,\r\n                    //                CURLFORM_END);\r\n                }\r\n                else\r\n                {\r\n                    form.AddData(item.Key.String, item.Value);\r\n\r\n                    //Code from PHP CURL extension:\r\n                    //error = curl_formadd(&first, &last,\r\n                    //                             CURLFORM_COPYNAME, string_key,\r\n                    //                             CURLFORM_NAMELENGTH, (long)string_key_len - 1,\r\n                    //                             CURLFORM_COPYCONTENTS, postval,\r\n                    //                             CURLFORM_CONTENTSLENGTH, (long)Z_STRLEN_PP(current),\r\n                    //                             CURLFORM_END);\r\n                }\r\n            }\r\n\r\n            return form;\r\n        }\r\n\r\n        private CurlForm()\r\n        {\r\n        }\r\n\r\n\r\n        private LinkedList<FormDataItem> formData = new LinkedList<FormDataItem>();\r\n\r\n        public LinkedList<FormDataItem> Data\r\n        {\r\n            get { return formData; }\r\n        }\r\n\r\n        internal void AddFile(string key, string filename, string type, object file)\r\n        {\r\n            var item = new FormFileItem(key, file, filename, type);\r\n            formData.AddLast(item);\r\n\r\n        }\r\n        internal void AddData(string key, object data)\r\n        {\r\n            var item = new FormDataItem(key, data);\r\n            formData.AddLast(item);\r\n        }\r\n\r\n    }\r\n}\r\n\r\n\r\n//// used by FormAdd for temporary storage\r\n//typedef struct FormInfo {\r\n//  char *name;\r\n//  bool name_alloc;\r\n//  size_t namelength;\r\n//  char *value;\r\n//  bool value_alloc;\r\n//  size_t contentslength;\r\n//  char *contenttype;\r\n//  bool contenttype_alloc;\r\n//  long flags;\r\n//  char *buffer;      /* pointer to existing buffer used for file upload */\r\n//  size_t bufferlength;\r\n//  char *showfilename; /* The file name to show. If not set, the actual\r\n//                         file name will be used */\r\n//  bool showfilename_alloc;\r\n//  char *userp;        /* pointer for the read callback */\r\n//  struct curl_slist* contentheader;\r\n//  struct FormInfo *more;\r\n//} FormInfo;"
  },
  {
    "path": "Source/Extensions/Curl/CurlHandler.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal abstract class CurlHandler\r\n    {\r\n\r\n        internal static CurlHandler Create(CurlProto protocol)\r\n        {\r\n            switch(protocol)\r\n            {\r\n                case CurlProto.HTTP:\r\n                    return new CurlHttp();\r\n                    \r\n                default:\r\n                    throw new NotSupportedException();\r\n            }\r\n        }\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// URL scheme name.\r\n        /// </summary>\r\n        internal abstract string Scheme\r\n        {\r\n            get;\r\n        }\r\n\r\n        internal abstract long DefaultPort\r\n        {\r\n            get;\r\n        }\r\n\r\n        internal abstract CurlProto Protocol\r\n        {\r\n            get;\r\n        }\r\n\r\n\r\n        internal abstract object Execute(PhpCurlResource curl, ref CURLcode result);\r\n\r\n        internal abstract object GetInfo(CurlInfo info);\r\n\r\n        #region UNSUPPORTED STUFF\r\n\r\n        //unsigned int flags;     /* Extra particular characteristics, see PROTOPT_* */\r\n\r\n        ///// <summary>\r\n        ///// Complement to setup_connection_internals().\r\n        ///// </summary>\r\n        //CURLcode setup_connection(ConnectData conn);\r\n\r\n        //Curl_done_func done;\r\n\r\n        /* If the curl_do() function is better made in two halves, this\n         * curl_do_more() function will be called afterwards, if set. For example\n         * for doing the FTP stuff after the PASV/PORT command.\n         */\r\n        //Curl_do_more_func do_more;\r\n\r\n        //* This function *MAY* be set to a protocol-dependent function that is run\n        // * after the connect() and everything is done, as a step in the connection.\n        // * The 'done' pointer points to a bool that should be set to TRUE if the\n        // * function completes before return. If it doesn't complete, the caller\n        // * should call the curl_connecting() function until it is.\n        // */\r\n        //CURLcode connect_it(ConnectData conn, ref bool done);\r\n\r\n        /* See above. Currently only used for FTP. */\r\n        //CURLcode (*connecting)(struct connectdata *, bool *done);\r\n        //CURLcode (*doing)(struct connectdata *, bool *done);\r\n\r\n        //* Called from the multi interface during the PROTOCONNECT phase, and it\r\n        //   should then return a proper fd set */\r\n        //int (*proto_getsock)(struct connectdata *conn,\r\n        //                     curl_socket_t *socks,\r\n        //                     int numsocks);\r\n\r\n        //* Called from the multi interface during the DOING phase, and it should\r\n        //   then return a proper fd set */\r\n        //int (*doing_getsock)(struct connectdata *conn,\r\n        //                     curl_socket_t *socks,\r\n        //                     int numsocks);\r\n\r\n        //* Called from the multi interface during the DO_DONE, PERFORM and\r\n        //   WAITPERFORM phases, and it should then return a proper fd set. Not setting\r\n        //   this will make libcurl use the generic default one. */\r\n        //int (*perform_getsock)(const struct connectdata *conn,\r\n        //                       curl_socket_t *socks,\r\n        //                       int numsocks);\r\n\r\n        //* This function *MAY* be set to a protocol-dependent function that is run\n        // * by the curl_disconnect(), as a step in the disconnection.  If the handler\n        // * is called because the connection has been considered dead, dead_connection\n        // * is set to TRUE.\n        // */\r\n        //CURLcode disconnect(ConnectData conn, bool dead_connection);\r\n\r\n        #endregion\r\n    };\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlHttp.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Security.Cryptography;\r\nusing System.Security.Cryptography.X509Certificates;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal class CurlHttp : CurlHandler\r\n    {\r\n        private HttpWebRequest request;\r\n        private HttpWebResponse response;\r\n\r\n        /// <summary>\r\n        /// URL scheme name.\r\n        /// </summary>\r\n        internal override string Scheme\r\n        {\r\n            get\r\n            {\r\n                return \"http://\";\r\n            }\r\n        }\r\n\r\n        internal override long DefaultPort\r\n        {\r\n            get\r\n            {\r\n                return (long)Port.HTTP;\r\n            }\r\n        }\r\n\r\n        internal override CurlProto Protocol\r\n        {\r\n            get\r\n            {\r\n                return CurlProto.HTTP;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Execute is modified Curl_http() which in Curl gets called from the generic Curl_do() function when a HTTP\r\n        /// request is to be performed. This creates and sends a properly constructed\r\n        /// HTTP request.\r\n        /// </summary>\r\n        /// <param name=\"curl\"></param>\r\n        /// <param name=\"result\"></param>\r\n        /// <returns></returns>\r\n        internal override object Execute(PhpCurlResource curl, ref CURLcode result)\r\n        {\r\n            UserDefined data = curl.Data;\r\n            HttpBitsUploader uploader;\r\n            bool terminatedCorrectly = false;\r\n            int redirectAttempts = 0;\r\n            bool keepVerb = false;\r\n\r\n            result = CURLcode.CURLE_OK;\r\n\r\n            if (data.Str[(int)DupString.SET_URL] == null)\r\n            {\r\n                result = CURLcode.CURLE_COULDNT_CONNECT;\r\n                return false;\r\n            }\r\n\r\n            Uri uri = Utils.CompleteUri(PhpVariable.AsString(data.Str[(int)DupString.SET_URL]),\r\n                                            Scheme,\r\n                                            data.UsePort);\r\n\r\n\r\n            for (; ; )\r\n            {\r\n                request = (HttpWebRequest)HttpWebRequest.Create(uri);\r\n\r\n                Curl_HttpReq httpreq = (redirectAttempts == 0) || keepVerb ? setRequestMethod(data) : Curl_HttpReq.GET;\r\n                setTimeOut(data);\r\n                setHttpVersion(data);\r\n\r\n                request.AllowAutoRedirect = data.FollowLocation;\r\n                request.MaximumAutomaticRedirections = data.MaxRedirects;\r\n\r\n                if (data.Str[(int)DupString.USERAGENT] != null)\r\n                    request.UserAgent = PhpVariable.AsString(data.Str[(int)DupString.USERAGENT]);\r\n\r\n                if (data.Str[(int)DupString.SET_REFERER] != null)\r\n                    request.Referer = PhpVariable.AsString(data.Str[(int)DupString.SET_REFERER]);\r\n\r\n                if (data.Headers != null)\r\n                    request.SetHttpHeaders(data.Headers);\r\n\r\n                setProxy(data);\r\n                setCredentials(data);\r\n                setCookies(data);\r\n\r\n                //ssl.VerifyPeer && ssl.VerifyHost == 2 is supported by default .NET\r\n                // other values are currently unsupported\r\n\r\n                if (data.Str[(int)DupString.CERT] != null)\r\n                {\r\n                    X509Certificate cert;\r\n                    string certPath;\r\n\r\n                    try\r\n                    {\r\n                        certPath = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, PhpVariable.AsString(data.Str[(int)DupString.SSL_CAFILE]));\r\n\r\n                        if (data.Str[(int)DupString.KEY_PASSWD] == null)\r\n                            cert = new X509Certificate(certPath);\r\n                        else\r\n                            cert = new X509Certificate(certPath, PhpVariable.AsString(data.Str[(int)DupString.KEY_PASSWD]));\r\n\r\n                        request.ClientCertificates.Add(cert);\r\n                    }\r\n                    catch (CryptographicException)\r\n                    {\r\n                        //TODO: here are more caises to differentiate\r\n                        result = CURLcode.CURLE_SSL_CACERT_BADFILE;\r\n                        return false;\r\n                    }\r\n\r\n                }\r\n\r\n\r\n                switch (httpreq)\r\n                {\r\n                    case Curl_HttpReq.POST_FORM:\r\n\r\n                        //same as POST but we can send multiple items asform-data\r\n\r\n\r\n                        if (data.HttpPostForm != null)\r\n                        {\r\n                            try\r\n                            {\r\n                                HttpFormDataUploader formUploader = new HttpFormDataUploader(request);\r\n                                formUploader.UploadForm(data.HttpPostForm);\r\n                            }\r\n                            catch (WebException ex)\r\n                            {\r\n                                switch (ex.Status)\r\n                                {\r\n                                    case WebExceptionStatus.Timeout:\r\n                                        result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                                        break;\r\n                                    default:\r\n                                        result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                                        break;\r\n\r\n                                }\r\n                                return false;\r\n                            }\r\n                        }\r\n\r\n                        break;\r\n\r\n\r\n                    case Curl_HttpReq.PUT: /* Let's PUT the data to the server! */\r\n\r\n                        //INFILE & INFILESIZE has to be set\r\n\r\n                        NativeStream nativeStream = data.Infile as NativeStream;\r\n\r\n                        if (nativeStream == null)\r\n                            return false;\r\n\r\n                        FileStream fs = nativeStream.RawStream as FileStream;\r\n\r\n                        if (fs == null)\r\n                            return false;\r\n\r\n                        try\r\n                        {\r\n                            uploader = new HttpBitsUploader(request);\r\n                            uploader.UploadFile(fs);\r\n                        }\r\n                        catch (WebException ex)\r\n                        {\r\n                            switch (ex.Status)\r\n                            {\r\n                                case WebExceptionStatus.Timeout:\r\n                                    result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                                    break;\r\n                                default:\r\n                                    result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                                    break;\r\n\r\n                            }\r\n                            return false;\r\n                        }\r\n\r\n                        break;\r\n\r\n                    case Curl_HttpReq.POST:\r\n                        /* this is the simple POST, using x-www-form-urlencoded style */\r\n\r\n                        if (String.IsNullOrEmpty(request.ContentType))// if Content-type isn't set set the default\r\n                            request.ContentType = \"application/x-www-form-urlencoded\";\r\n\r\n                        if (data.Postfields != null)\r\n                        {\r\n                            try\r\n                            {\r\n                                uploader = new HttpBitsUploader(request);\r\n                                uploader.UploadData(data.Postfields);\r\n                            }\r\n                            catch (WebException ex)\r\n                            {\r\n                                switch (ex.Status)\r\n                                {\r\n                                    case WebExceptionStatus.Timeout:\r\n                                        result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                                        break;\r\n                                    default:\r\n                                        result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                                        break;\r\n\r\n                                }\r\n                                return false;\r\n                            }\r\n                        }\r\n\r\n                        break;\r\n                }\r\n\r\n                try\r\n                {\r\n                    // if we got this far, we will turn off AutoRedirect (assuming it was on), since\r\n                    // we are ready to handle manually following certain responses. this is needed\r\n                    // to harvest cookies that are set on any intermediate response (i.e. anything\r\n                    // other than the last one followed), since the .NET HTTP class will use, but\r\n                    // NOT return, cookies set on anything but the last request.\r\n                    request.AllowAutoRedirect = false;\r\n                    response = (HttpWebResponse)request.GetResponse();\r\n                }\r\n                catch (WebException ex)\r\n                {\r\n                    switch (ex.Status)\r\n                    {\r\n                        case WebExceptionStatus.Timeout:\r\n                            result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                            break;\r\n                        case WebExceptionStatus.ConnectFailure:\r\n                            result = CURLcode.CURLE_COULDNT_CONNECT;\r\n                            break;\r\n                        case WebExceptionStatus.TrustFailure:\r\n                            result = CURLcode.CURLE_SSL_CACERT;\r\n                            break;\r\n                        case WebExceptionStatus.ProtocolError:\r\n                            //Response from server was complete, but indicated protocol error as 404, 401 etc.\r\n                            break;\r\n                        default:\r\n                            result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                            break;\r\n\r\n                    }\r\n                    //TODO: other errorCodes\r\n\r\n                    response = (HttpWebResponse)ex.Response;\r\n                    //return false;\r\n                    //error = true;\r\n                }\r\n\r\n                if (response == null)// just to make sure I have the response object\r\n                    return false;\r\n\r\n\r\n                if (data.FollowLocation)\r\n                {\r\n                    // see if we need to follow a redirect.\r\n                    switch (response.StatusCode)\r\n                    {\r\n                        case HttpStatusCode.MovedPermanently:\r\n                        case HttpStatusCode.Found:\r\n                        case HttpStatusCode.SeeOther:\r\n                        case HttpStatusCode.RedirectKeepVerb:\r\n                            if (redirectAttempts++ >= data.MaxRedirects)\r\n                            {\r\n                                result = CURLcode.CURLE_TOO_MANY_REDIRECTS;\r\n                                return false;\r\n                            }\r\n                            string location = response.Headers[\"Location\"];\r\n                            if (!string.IsNullOrWhiteSpace(location))\r\n                            {\r\n                                try\r\n                                {\r\n                                    keepVerb = response.StatusCode == HttpStatusCode.RedirectKeepVerb;\r\n                                    data.Cookies.Add(response.Cookies);\r\n                                    response.Close();\r\n                                    uri = new Uri(uri, location);\r\n                                    continue;\r\n                                }\r\n                                catch (Exception)\r\n                                {\r\n                                    // closest error code though could be confusing as it's not the user-\r\n                                    // submitted URL that's the problem\r\n                                    result = CURLcode.CURLE_URL_MALFORMAT;\r\n                                    return false;\r\n                                }\r\n                            }\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                //Save cookies\r\n                data.Cookies.Add(response.Cookies);\r\n                // break out of the for loop as we aren't following a redirect\r\n                break;\r\n            }\r\n\r\n            byte[] headers = null;\r\n            byte[] content = null;\r\n            int headersLength = 0;\r\n\r\n            if (data.IncludeHeader)\r\n            {\r\n                //It's necessary to put HTTP header into the result\r\n\r\n                //first we need to create it since there isn't anywhere\r\n                headers = Encoding.ASCII.GetBytes(response.GetHttpHeaderAsString());\r\n                headersLength = headers.Length;\r\n            }\r\n\r\n            if (data.FunctionWriteHeader != null)// TODO: probably invoke before\r\n            {\r\n                response.InvokeHeaderFunction(curl, data.FunctionWriteHeader);\r\n            }\r\n\r\n            Stream writeStream = null;\r\n\r\n            if (data.WriteFunction != null)\r\n            {\r\n                writeStream = new WriteFunctionStream(curl, data.WriteFunction);\r\n            }\r\n            else if (data.OutFile != null)\r\n            {\r\n                var outStream = data.OutFile as PhpStream;\r\n\r\n                if (outStream == null)\r\n                    return false;\r\n\r\n                Stream fs = outStream.RawStream as Stream;\r\n\r\n                if (fs == null)\r\n                    return false;\r\n\r\n                writeStream = fs;\r\n            }\r\n            else if (data.ReturnTransfer == false) // Output to standart output\r\n            {\r\n                writeStream = ScriptContext.CurrentContext.OutputStream;\r\n            }\r\n\r\n\r\n            if (writeStream != null)\r\n            {\r\n                if (headers != null) //there is http header to copy to the result\r\n                {\r\n                    writeStream.Write(headers, 0, headersLength);\r\n                }\r\n\r\n                HttpBitsDownloader reader = new HttpBitsDownloader(response);\r\n\r\n                try\r\n                {\r\n                    reader.ReadToStream(writeStream, out terminatedCorrectly);\r\n                }\r\n                catch (WebException ex)\r\n                {\r\n                    switch (ex.Status)\r\n                    {\r\n                        case WebExceptionStatus.Timeout:\r\n                            result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                            break;\r\n                        default:\r\n                            result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                if (!terminatedCorrectly)\r\n                    result = CURLcode.CURLE_PARTIAL_FILE;\r\n\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                // Read the response\r\n                HttpBitsDownloader reader = new HttpBitsDownloader(response);\r\n\r\n                try\r\n                {\r\n                    content = reader.ReadToEnd(headersLength, out terminatedCorrectly);\r\n                }\r\n                catch(WebException ex)\r\n                {\r\n                    switch (ex.Status)\r\n                    {\r\n                        case WebExceptionStatus.Timeout:\r\n                            result = CURLcode.CURLE_OPERATION_TIMEOUTED;\r\n                            break;\r\n                        default:\r\n                            result = CURLcode.CURLE_COULDNT_CONNECT;// for now just this\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                if (!terminatedCorrectly)\r\n                    result = CURLcode.CURLE_PARTIAL_FILE;\r\n\r\n                if (headers != null) //there is http header to copy to the result\r\n                {\r\n                    if (content != null)\r\n                        Buffer.BlockCopy(headers, 0, content, 0, headersLength);\r\n                    else\r\n                        content = headers;\r\n                }\r\n\r\n                if (content == null)\r\n                    return PhpBytes.Empty;\r\n                else\r\n                    return new PhpBytes(content);\r\n            }\r\n\r\n        }\r\n\r\n        private void setCookies(UserDefined data)\r\n        {\r\n            //if (data.Cookies.Count > 0)\r\n            //{\r\n            var container = new CookieContainer();\r\n            container.Add(data.Cookies);\r\n            request.CookieContainer = container;\r\n            //}\r\n        }\r\n\r\n        private void setCredentials(UserDefined data)\r\n        {\r\n            if (data.Str[(int)DupString.USERNAME] != null)\r\n            {\r\n                //This is obvious way, but unfortunatelly it doesn't work\r\n                //httpauth set to CURLAUTH_ANY is .NET default because it will use right authentication protocol\r\n                //request.Credentials = new NetworkCredential(\r\n                //    PhpVariable.AsString(data.Str[(int)DupString.USERNAME]),\r\n                //    data.Str[(int)DupString.PASSWORD] != null ? PhpVariable.AsString(data.Str[(int)DupString.PASSWORD]) : String.Empty);\r\n\r\n                //We only support BASIC\r\n                HttpUtils.SetBasicAuthHeader(request,\r\n                    PhpVariable.AsString(data.Str[(int)DupString.USERNAME]),\r\n                    data.Str[(int)DupString.PASSWORD] != null ? PhpVariable.AsString(data.Str[(int)DupString.PASSWORD]) : String.Empty);\r\n\r\n            }\r\n        }\r\n\r\n        private void setProxy(UserDefined data)\r\n        {\r\n            string proxyAddress;\r\n            WebProxy myProxy;\r\n\r\n            if (data.Str[(int)DupString.PROXY] == null)\r\n                return;\r\n\r\n            if (data.ProxyType != CURLproxyType.CURLPROXY_HTTP)\r\n                return;\r\n\r\n            myProxy = new WebProxy();\r\n            proxyAddress = PhpVariable.AsString(data.Str[(int)DupString.PROXY]);\r\n\r\n            // Create a new Uri object.\r\n            Uri uri = Utils.CompleteUri(proxyAddress, Scheme, data.ProxyPort);\r\n\r\n            // Associate the newUri object to 'myProxy' object so that new myProxy settings can be set.\r\n            myProxy.Address = uri;\r\n            // Create a NetworkCredential object and associate it with the \r\n            // Proxy property of request object.\r\n\r\n            if (data.Str[(int)DupString.PROXYUSERNAME] != null)\r\n            {\r\n                //data.proxyauth set to CURLAUTH_ANY is .NET default because it will use right authentication protocol\r\n\r\n                myProxy.Credentials = new NetworkCredential(\r\n                    PhpVariable.AsString(data.Str[(int)DupString.PROXYUSERNAME]),\r\n                    data.Str[(int)DupString.PROXYPASSWORD] != null ? PhpVariable.AsString(data.Str[(int)DupString.PROXYPASSWORD]) : String.Empty);\r\n\r\n            }\r\n\r\n            request.Proxy = myProxy;\r\n\r\n        }\r\n\r\n        private void setHttpVersion(UserDefined data)\r\n        {\r\n            switch (data.HttpVersion)\r\n            {\r\n                //case CurlHttpVersion.CURL_HTTP_VERSION_NONE:\r\n                //case CurlHttpVersion.CURL_HTTP_VERSION_LAST:\r\n                //    do nothing, default will be used\r\n                //    break;\r\n                case CurlHttpVersion.CURL_HTTP_VERSION_1_0:\r\n                    request.ProtocolVersion = HttpVersion.Version10;\r\n                    break;\r\n                case CurlHttpVersion.CURL_HTTP_VERSION_1_1:\r\n                    request.ProtocolVersion = HttpVersion.Version11;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private Curl_HttpReq setRequestMethod(UserDefined data)\r\n        {\r\n            Curl_HttpReq httpreq = data.Httpreq;\r\n\r\n            if ( // (conn->handler->protocol&(CURLPROTO_HTTP|CURLPROTO_FTP)) && //(MB) I'm handeling http request, so I don't need to check this\r\n                data.Upload)\r\n            {\r\n                httpreq = Curl_HttpReq.PUT;\r\n            }\r\n\r\n            // Now set the request.Method to the proper request string\r\n            if (data.Str[(int)DupString.CUSTOMREQUEST] != null)\r\n                request.Method = PhpVariable.AsString(data.Str[(int)DupString.CUSTOMREQUEST]);\r\n            else\r\n            {\r\n                if (data.OptNoBody)\r\n                    request.Method = \"HEAD\";\r\n                else\r\n                {\r\n                    switch (httpreq)\r\n                    {\r\n                        case Curl_HttpReq.POST:\r\n                        case Curl_HttpReq.POST_FORM:\r\n                            request.Method = \"POST\";\r\n                            break;\r\n                        case Curl_HttpReq.PUT:\r\n                            request.Method = \"PUT\";\r\n                            break;\r\n                        default: /* this should never happen */\r\n                        case Curl_HttpReq.GET:\r\n                            request.Method = \"GET\";\r\n                            break;\r\n                        case Curl_HttpReq.HEAD:\r\n                            request.Method = \"HEAD\";\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return httpreq;\r\n        }\r\n\r\n        private void setTimeOut(UserDefined data)\r\n        {\r\n            // Curl default is 300000 milliseconds == five minutes\r\n            // .NET default is 100000 milliseconds, we'll leave it there as a default\r\n\r\n            int timeout_set = 0;\r\n\r\n            if (data.Timeout > 0)\r\n                timeout_set |= 1;\r\n\r\n            if (data.ConnectTimeout > 0)\r\n                timeout_set |= 2;\r\n\r\n            switch (timeout_set)\r\n            {\r\n                case 1:\r\n                    request.Timeout = data.Timeout;\r\n                    break;\r\n                case 2:\r\n                    request.Timeout = data.ConnectTimeout;\r\n                    break;\r\n                case 3:\r\n                    if (data.Timeout < data.ConnectTimeout)\r\n                        request.Timeout = data.Timeout;\r\n                    else\r\n                        request.Timeout = data.ConnectTimeout;\r\n                    break;\r\n            }\r\n\r\n        }\r\n\r\n\r\n        internal override object GetInfo(CurlInfo info)\r\n        {\r\n            //Dictionary<CurlInfo, string> curlInfoNames = new Dictionary<CurlInfo,string>();\r\n\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_EFFECTIVE_URL,\"url\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_CONTENT_TYPE, \"content_type\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_HTTP_CODE, \"http_code\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_HEADER_SIZE, \"header_size\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_REQUEST_SIZE, \"request_size\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_FILETIME, \"filetime\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_SSL_VERIFYRESULT, \"ssl_verify_result\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_REDIRECT_COUNT, \"redirect_count\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_TOTAL_TIME, \"total_time\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_NAMELOOKUP_TIME, \"namelookup_time\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_CONNECT_TIME, \"connect_time\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_PRETRANSFER_TIME, \"pretransfer_time\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_SIZE_UPLOAD, \"size_upload\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_SIZE_DOWNLOAD, \"size_download\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_SPEED_DOWNLOAD, \"speed_download\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_SPEED_UPLOAD, \"speed_upload\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_CONTENT_LENGTH_DOWNLOAD, \"download_content_length\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_CONTENT_LENGTH_UPLOAD, \"upload_content_length\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_STARTTRANSFER_TIME, \"starttransfer_time\");\r\n            //curlInfoNames.Add(CurlInfo.CURLINFO_REDIRECT_TIME, \"redirect_time\");\r\n\r\n            if (response == null)\r\n                return false;\r\n\r\n            switch (info)\r\n            {\r\n                case CurlInfo.EFFECTIVE_URL:\r\n                    return response.ResponseUri.AbsoluteUri;\r\n                case CurlInfo.HTTP_CODE:\r\n                    return (int)response.StatusCode;\r\n                case CurlInfo.CONTENT_TYPE:\r\n\r\n                    if (String.IsNullOrEmpty(response.ContentType))\r\n                        return false;\r\n\r\n                    return response.ContentType;\r\n                case CurlInfo.HEADER_SIZE:\r\n                    return Encoding.ASCII.GetByteCount(response.GetHttpHeaderAsString());\r\n\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlHttpPost.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    class CurlHttpPost\r\n    {\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlInfo.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// This enumeration is used to extract information associated with an\r\n    /// <see cref=\"Curl\"/> transfer. Specifically, a member of this\r\n    /// enumeration is passed as the first argument to\r\n    /// <see cref=\"Curl.GetInfo(PhpResource, CurlInfo)\"/> specifying the item to retrieve in the\r\n    /// second argument, which is a reference to an <c>int</c>, a\r\n    /// <c>double</c>, a <c>string</c>, a <c>DateTime</c> or an <c>object</c>.\r\n    /// </summary>\r\n    public enum CurlInfo\r\n    {\r\n        /// <summary>\r\n        /// The second argument receives the elapsed time, as a <c>double</c>,\r\n        /// in seconds, from the start until the connect to the remote host\r\n        /// (or proxy) was completed. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_CONNECT_TIME\")]\r\n        CONNECT_TIME = 0x300005,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>double</c>, the content-length\r\n        /// of the download. This is the value read from the Content-Length: field. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_CONTENT_LENGTH_DOWNLOAD\")]\r\n        CONTENT_LENGTH_DOWNLOAD = 0x30000F,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>double</c>, the specified size\r\n        /// of the upload. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_CONTENT_LENGTH_UPLOAD\")]\r\n        CONTENT_LENGTH_UPLOAD = 0x300010,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>string</c>, the content-type of\r\n        /// the downloaded object. This is the value read from the Content-Type:\r\n        /// field. If you get <c>null</c>, it means that the server didn't\r\n        /// send a valid Content-Type header or that the protocol used\r\n        /// doesn't support this. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_CONTENT_TYPE\")]\r\n        CONTENT_TYPE = 0x100012,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>string</c>, the last\r\n        /// used effective URL. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_EFFECTIVE_URL\")]\r\n        EFFECTIVE_URL = 0x100001,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>long</c>, the remote time\r\n        /// of the retrieved document. You should construct a <c>DateTime</c>\r\n        /// from this value, as shown in the <c>InfoDemo</c> sample. If you\r\n        /// get a date in the distant\r\n        /// past, it can be because of many reasons (unknown, the server\r\n        /// hides it or the server doesn't support the command that tells\r\n        /// document time etc) and the time of the document is unknown. Note\r\n        /// that you must tell the server to collect this information before\r\n        /// the transfer is made, by using the \r\n        /// <see cref=\"CurlOption.CURLOPT_FILETIME\"/> option to\r\n        /// <see cref=\"Curl.SetOpt\"/>. (Added in 7.5) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_FILETIME\")]\r\n        FILETIME = 0x20000E,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> specifying the total size\r\n        /// of all the headers received. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_HEADER_SIZE\")]\r\n        HEADER_SIZE = 0x20000B,\r\n        /// <summary>\r\n        /// The second argument receives, as an <c>int</c>, a bitmask indicating\r\n        /// the authentication method(s) available. The meaning of the bits is\r\n        /// explained in the documentation of\r\n        /// <see cref=\"CurlOption.CURLOPT_HTTPAUTH\"/>. (Added in 7.10.8) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_HTTPAUTH_AVAIL\")]\r\n        HTTPAUTH_AVAIL = 0x200017,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> indicating the numeric\r\n        /// connect code for the HTTP request.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_HTTP_CONNECTCODE\")]\r\n        HTTP_CONNECTCODE = 0x200016,\r\n        /// <summary>\r\n        /// End-of-enumeration marker; do not use in client applications.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_LASTONE\")]\r\n        LASTONE = 0x1C,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>double</c>, the time, in\r\n        /// seconds it took from the start until the name resolving was\r\n        /// completed. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_NAMELOOKUP_TIME\")]\r\n        NAMELOOKUP_TIME = 0x300004,\r\n        /// <summary>\r\n        /// Never used.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_NONE\")]\r\n        NONE = 0x0,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> indicating the\r\n        /// number of current connections. (Added in 7.13.0)\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_NUM_CONNECTS\")]\r\n        NUM_CONNECTS = 0x20001A,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> indicating the operating\r\n        /// system error number: <c>_errro</c> or <c>GetLastError()</c>,\r\n        /// depending on the platform. (Added in 7.12.2)\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_OS_ERRNO\")]\r\n        OS_ERRNO = 0x200019,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>double</c>, the time, in\r\n        /// seconds, it took from the start until the file transfer is just about\r\n        /// to begin. This includes all pre-transfer commands and negotiations\r\n        /// that are specific to the particular protocol(s) involved. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_PRETRANSFER_TIME\")]\r\n        PRETRANSFER_TIME = 0x300006,\r\n        /// <summary>\r\n        /// The second argument receives a reference to the private data\r\n        /// associated with the <see cref=\"Curl\"/> object (set with the\r\n        /// <see cref=\"CurlOption.CURLOPT_PRIVATE\"/> option to\r\n        /// <see cref=\"Curl.SetOpt\"/>. (Added in 7.10.3) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_PRIVATE\")]\r\n        PRIVATE = 0x100015,\r\n        /// <summary>\r\n        /// The second argument receives, as an <c>int</c>, a bitmask\r\n        /// indicating the authentication method(s) available for your\r\n        /// proxy authentication. This will be a bitmask of\r\n        /// <see cref=\"CURLhttpAuth\"/> enumeration constants.\r\n        /// (Added in 7.10.8) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_PROXYAUTH_AVAIL\")]\r\n        PROXYAUTH_AVAIL = 0x200018,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> indicating the total\r\n        /// number of redirections that were actually followed. (Added in 7.9.7) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_REDIRECT_COUNT\")]\r\n        REDIRECT_COUNT = 0x200014,\r\n        /// <summary>\r\n        /// The second argument receives, as a <c>double</c>, the total time, in\r\n        /// seconds, for all redirection steps include name lookup, connect,\r\n        /// pretransfer and transfer before final transaction was started.\r\n        /// <c>CURLINFO_REDIRECT_TIME</c> contains the complete execution\r\n        /// time for multiple redirections. (Added in 7.9.7) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_REDIRECT_TIME\")]\r\n        REDIRECT_TIME = 0x300013,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> containing the total size\r\n        /// of the issued requests. This is so far only for HTTP requests. Note\r\n        /// that this may be more than one request if\r\n        /// <see cref=\"CurlOption.CURLOPT_FOLLOWLOCATION\"/> is <c>true</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_REQUEST_SIZE\")]\r\n        REQUEST_SIZE = 0x20000C,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> with the last received HTTP\r\n        /// or FTP code. This option was known as <c>CURLINFO_HTTP_CODE</c> in\r\n        /// libcurl 7.10.7 and earlier. In actual version is called CURLINFO_RESPONSE_CODE\r\n        /// but in PHP it's still CURLINFO_HTTP_CODE\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_HTTP_CODE\")]\r\n        HTTP_CODE = 0x200002,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> with the total amount of\r\n        /// bytes that were downloaded. The amount is only for the latest transfer\r\n        /// and will be reset again for each new transfer. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SIZE_DOWNLOAD\")]\r\n        SIZE_DOWNLOAD = 0x300008,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> with the total amount\r\n        /// of bytes that were uploaded. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SIZE_UPLOAD\")]\r\n        SIZE_UPLOAD = 0x300007,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> with the average\r\n        /// download speed that cURL measured for the complete download. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SPEED_DOWNLOAD\")]\r\n        SPEED_DOWNLOAD = 0x300009,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> with the average\r\n        /// upload speed that libcurl measured for the complete upload. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SPEED_UPLOAD\")]\r\n        SPEED_UPLOAD = 0x30000A,\r\n        /// <summary>\r\n        /// The second argument receives an list containing\r\n        /// the names of the available SSL engines.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SSL_ENGINES\")]\r\n        SSL_ENGINES = 0x40001B,\r\n        /// <summary>\r\n        /// The second argument receives an <c>int</c> with the result of\r\n        /// the certificate verification that was requested (using the\r\n        /// <see cref=\"CurlOption.CURLOPT_SSL_VERIFYPEER\"/> option in\r\n        /// <see cref=\"Curl.SetOpt\"/>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_SSL_VERIFYRESULT\")]\r\n        SSL_VERIFYRESULT = 0x20000D,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> specifying the time,\r\n        /// in seconds, from the start until the first byte is just about to be\r\n        /// transferred. This includes <c>CURLINFO_PRETRANSFER_TIME</c> and\r\n        /// also the time the server needs to calculate the result. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_STARTTRANSFER_TIME\")]\r\n        STARTTRANSFER_TIME = 0x300011,\r\n        /// <summary>\r\n        /// The second argument receives a <c>double</c> indicating the total transaction\r\n        /// time in seconds for the previous transfer. This time does not include\r\n        /// the connect time, so if you want the complete operation time,\r\n        /// you should add the <c>CURLINFO_CONNECT_TIME</c>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLINFO_TOTAL_TIME\")]\r\n        TOTAL_TIME = 0x300003,\r\n    };\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlOption.Utils.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\r\n    /// <summary>\r\n    /// Utilities for validation and conversion of <see cref=\"CurlOption\"/>\r\n    /// </summary>\r\n    public static class CurlOptionUtils\r\n    {\r\n\r\n        /// <summary>\r\n        /// Validate if value has appropriate type for option or can be converted to one\r\n        /// </summary>\r\n        public static object ValidateAndConvert(this CurlOption option, object value, out bool success)//TODO:Review this function\r\n        {\r\n            switch (option)\r\n            {\r\n                case CurlOption.CURLOPT_AUTOREFERER:\r\n                case CurlOption.CURLOPT_BINARYTRANSFER:\r\n                case CurlOption.CURLOPT_COOKIESESSION:\r\n                //case CurlOptions.CURLOPT_CERTINFO:\t\t\r\n                case CurlOption.CURLOPT_CRLF:\r\n                case CurlOption.CURLOPT_DNS_USE_GLOBAL_CACHE:\r\n                case CurlOption.CURLOPT_FAILONERROR:\r\n                case CurlOption.CURLOPT_FILETIME:\r\n                case CurlOption.CURLOPT_FOLLOWLOCATION:\r\n                case CurlOption.CURLOPT_FORBID_REUSE:\r\n                case CurlOption.CURLOPT_FRESH_CONNECT:\r\n                case CurlOption.CURLOPT_FTP_USE_EPRT:\r\n                case CurlOption.CURLOPT_FTP_USE_EPSV:\r\n                case CurlOption.CURLOPT_FTPAPPEND:\r\n                //case CurlOptions.CURLOPT_FTPASCII:\t\t\r\n                case CurlOption.CURLOPT_FTPLISTONLY:\r\n                case CurlOption.CURLOPT_HEADER:\r\n                //case CurlOptions.CURLINFO_HEADER_OUT:\r\n                case CurlOption.CURLOPT_HTTPGET:\r\n                case CurlOption.CURLOPT_HTTPPROXYTUNNEL:\r\n                //case CurlOptions.CURLOPT_MUTE:\t\t\r\n                case CurlOption.CURLOPT_NETRC:\r\n                case CurlOption.CURLOPT_NOBODY:\r\n                case CurlOption.CURLOPT_NOPROGRESS:\r\n                case CurlOption.CURLOPT_NOSIGNAL:\r\n                case CurlOption.CURLOPT_POST:\r\n                case CurlOption.CURLOPT_PUT:\r\n                case CurlOption.CURLOPT_RETURNTRANSFER:\r\n                case CurlOption.CURLOPT_SSL_VERIFYPEER:\r\n                case CurlOption.CURLOPT_TRANSFERTEXT:\r\n                case CurlOption.CURLOPT_UNRESTRICTED_AUTH:\r\n                case CurlOption.CURLOPT_UPLOAD:\r\n                case CurlOption.CURLOPT_VERBOSE:\r\n\r\n                    return PHP.Core.Convert.TryObjectToBoolean(value, out success);\r\n\r\n                case CurlOption.CURLOPT_BUFFERSIZE:\r\n                case CurlOption.CURLOPT_CLOSEPOLICY:\r\n                case CurlOption.CURLOPT_CONNECTTIMEOUT:\r\n                //case CurlOptions.CURLOPT_CONNECTTIMEOUT_MS:\r\n                case CurlOption.CURLOPT_DNS_CACHE_TIMEOUT:\r\n                case CurlOption.CURLOPT_FTPSSLAUTH:\r\n                case CurlOption.CURLOPT_HTTP_VERSION:\r\n                case CurlOption.CURLOPT_HTTPAUTH:\r\n                case CurlOption.CURLOPT_INFILESIZE:\r\n                case CurlOption.CURLOPT_LOW_SPEED_LIMIT:\r\n                case CurlOption.CURLOPT_LOW_SPEED_TIME:\r\n                case CurlOption.CURLOPT_MAXCONNECTS:\r\n                case CurlOption.CURLOPT_MAXREDIRS:\r\n                case CurlOption.CURLOPT_PORT:\r\n                //case CurlOptions.CURLOPT_PROTOCOLS:\r\n                case CurlOption.CURLOPT_PROXYAUTH:\r\n                case CurlOption.CURLOPT_PROXYPORT:\r\n                case CurlOption.CURLOPT_PROXYTYPE:\r\n                //case CurlOptions.CURLOPT_REDIR_PROTOCOLS:\r\n                case CurlOption.CURLOPT_RESUME_FROM:\r\n                case CurlOption.CURLOPT_SSL_VERIFYHOST:\r\n                case CurlOption.CURLOPT_SSLVERSION:\r\n                case CurlOption.CURLOPT_TIMECONDITION:\r\n                case CurlOption.CURLOPT_TIMEOUT:\r\n                //case CurlOptions.CURLOPT_TIMEOUT_MS:\r\n                case CurlOption.CURLOPT_TIMEVALUE:\r\n\r\n                    return PHP.Core.Convert.TryObjectToInt32(value, out success);\r\n\r\n                case CurlOption.CURLOPT_CAINFO:\r\n                case CurlOption.CURLOPT_CAPATH:\r\n                case CurlOption.CURLOPT_COOKIE:\r\n                case CurlOption.CURLOPT_COOKIEFILE:\r\n                case CurlOption.CURLOPT_COOKIEJAR:\r\n                case CurlOption.CURLOPT_CUSTOMREQUEST:\r\n                //case CurlOptions.CURLOPT_EGDSOCKET:\t\t\r\n                case CurlOption.CURLOPT_ENCODING:\r\n                case CurlOption.CURLOPT_FTPPORT:\r\n                case CurlOption.CURLOPT_INTERFACE:\r\n                case CurlOption.CURLOPT_KRB4LEVEL:\r\n                case CurlOption.CURLOPT_POSTFIELDS:\r\n                case CurlOption.CURLOPT_PROXY:\r\n                case CurlOption.CURLOPT_PROXYUSERPWD:\r\n                case CurlOption.CURLOPT_PROXYUSERNAME:\r\n                case CurlOption.CURLOPT_PROXYPASSWORD:\r\n                case CurlOption.CURLOPT_RANDOM_FILE:\r\n                case CurlOption.CURLOPT_RANGE:\r\n                case CurlOption.CURLOPT_REFERER:\r\n                case CurlOption.CURLOPT_SSL_CIPHER_LIST:\r\n                case CurlOption.CURLOPT_SSLCERT:\r\n                //case CurlOptions.CURLOPT_SSLCERTPASSWD://it is equivavalent to CurlOptions.CURLOPT_SSLKEYPASSWD\r\n                case CurlOption.CURLOPT_SSLCERTTYPE:\r\n                case CurlOption.CURLOPT_SSLENGINE:\r\n                case CurlOption.CURLOPT_SSLENGINE_DEFAULT:\r\n                case CurlOption.CURLOPT_SSLKEY:\r\n                case CurlOption.CURLOPT_SSLKEYPASSWD:\r\n                case CurlOption.CURLOPT_SSLKEYTYPE:\r\n                case CurlOption.CURLOPT_URL:\r\n                case CurlOption.CURLOPT_USERAGENT:\r\n                case CurlOption.CURLOPT_USERPWD:\r\n                case CurlOption.CURLOPT_USERNAME:\r\n                case CurlOption.CURLOPT_PASSWORD:\r\n\r\n                    success = PhpVariable.IsString(value);\r\n                    return value;\r\n\r\n                case CurlOption.CURLOPT_HTTP200ALIASES:\r\n                case CurlOption.CURLOPT_HTTPHEADER:\r\n                case CurlOption.CURLOPT_POSTQUOTE:\r\n                case CurlOption.CURLOPT_QUOTE:\r\n\r\n                    success = value is PhpArray;\r\n                    return value;\r\n\r\n                case CurlOption.CURLOPT_FILE:\r\n                case CurlOption.CURLOPT_INFILE:\r\n                case CurlOption.CURLOPT_STDERR:\r\n                case CurlOption.CURLOPT_WRITEHEADER:\r\n\r\n                    success = value is PhpResource;\r\n                    return value;\r\n\r\n                case CurlOption.CURLOPT_HEADERFUNCTION:\r\n                //case CurlOptions.CURLOPT_PASSWDFUNCTION:\r\n                case CurlOption.CURLOPT_PROGRESSFUNCTION:\r\n                case CurlOption.CURLOPT_READFUNCTION:\r\n                case CurlOption.CURLOPT_WRITEFUNCTION:\r\n\r\n                    PhpCallback callback = PHP.Core.Convert.ObjectToCallback(value, false);\r\n                    success = true;// if it's not successful exception is thrown\r\n                    return callback;\r\n\r\n                default:\r\n                    success = false;\r\n                    return null;\r\n            }\r\n        }\r\n\r\n\r\n\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlOption.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\r\n    /// <summary>\r\n    /// One of these is passed as a parameter to\r\n    /// curl_setopt. The <c>Description</c> column of\r\n    /// the table describes the value that should be passed as the second parameter.\r\n    /// </summary>\r\n    public enum CurlOption\r\n    {\r\n\r\n        /// <summary>\r\n        /// Empty options\r\n        /// </summary>\r\n        NONE = 0,\r\n\r\n        /// <summary>\r\n        /// Pass a <c>true</c> parameter to enable this. When enabled, libcurl\r\n        /// will automatically set the Referer: field in requests where it follows\r\n        /// a Location: redirect. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_AUTOREFERER\")]\r\n        CURLOPT_AUTOREFERER = 58,\r\n\r\n\r\n        /// <summary>\r\n        /// Pass a <c>true</c> to return the raw output when CURLOPT_RETURNTRANSFER is used. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_BINARYTRANSFER\")]\r\n        CURLOPT_BINARYTRANSFER = 19914,\r\n\r\n        /// <summary>\r\n        /// Pass an <c>int</c> specifying your preferred size for the receive buffer\r\n        /// in libcurl. The main point of this would be that the write callback gets\r\n        /// called more often and with smaller chunks. This is just treated as a\r\n        /// request, not an order. You cannot be guaranteed to actually get the\r\n        /// requested size. (Added in 7.10) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_BUFFERSIZE\")]\r\n        CURLOPT_BUFFERSIZE = 98,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> naming a file holding one or more certificates\r\n        /// to verify the peer with. This only makes sense when used in combination\r\n        /// with the <c>CURLOPT_SSL_VERIFYPEER</c> option.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CAINFO\")]\r\n        CURLOPT_CAINFO = 10065,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> naming a directory holding multiple CA certificates\r\n        /// to verify the peer with. The certificate directory must be prepared\r\n        /// using the openssl c_rehash utility. This only makes sense when used in\r\n        /// combination with the <c>CURLOPT_SSL_VERIFYPEER</c> option. The\r\n        /// <c>CURLOPT_CAPATH</c> function apparently does not work in Windows due\r\n        /// to some limitation in openssl. (Added in 7.9.8) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CAPATH\")]\r\n        CURLOPT_CAPATH = 10097,\r\n        /// <summary>\r\n        /// Pass either CURLCLOSEPOLICY_LEAST_RECENTLY_USED or CURLCLOSEPOLICY_OLDEST.\r\n        /// This option sets what policy libcurl should use when\r\n        /// the connection cache is filled and one of the open connections has to be\r\n        /// closed to make room for a new connection. \r\n        /// There are three other CURLCLOSEPOLICY_ constants, but cURL does not support them yet.\r\n        /// Use <c>CURLCLOSEPOLICY_LEAST_RECENTLY_USED</c> to make\r\n        /// libcurl close the connection that was least recently used, that connection\r\n        /// is also least likely to be capable of re-use. Use\r\n        /// <c>CURLCLOSEPOLICY_OLDEST</c> to make libcurl close\r\n        /// the oldest connection, the one that was created first among the ones in\r\n        /// the connection cache. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CLOSEPOLICY\")]\r\n        CURLOPT_CLOSEPOLICY = 72,\r\n        /// <summary>\r\n        /// Time-out connect operations after this amount of seconds, if connects\r\n        /// are OK within this time, then fine... This only aborts the connect\r\n        /// phase. [Only works on unix-style/SIGALRM operating systems]\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CONNECTTIMEOUT\")]\r\n        CURLOPT_CONNECTTIMEOUT = 78,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used to set a cookie\r\n        /// in the http request. The format of the string should be NAME=CONTENTS,\r\n        /// where NAME is the cookie name and CONTENTS is what the cookie should contain. \r\n        /// <para>\r\n        /// If you need to set multiple cookies, you need to set them all using a\r\n        /// single option and thus you need to concatenate them all in one single\r\n        /// string. Set multiple cookies in one string like this:\r\n        /// \"name1=content1; name2=content2;\" etc. \r\n        /// </para>\r\n        /// <para>\r\n        /// Using this option multiple times will only make the latest string override\r\n        /// the previously ones.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_COOKIE\")]\r\n        CURLOPT_COOKIE = 10022,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It should contain the name of your\r\n        /// file holding cookie data to read. The cookie data may be in Netscape /\r\n        /// Mozilla cookie data format or just regular HTTP-style headers dumped\r\n        /// to a file.\r\n        /// <para>\r\n        /// Given an empty or non-existing file, this option will enable cookies\r\n        /// for this Easy object, making it understand and parse received cookies\r\n        /// and then use matching cookies in future request. \r\n        /// </para> \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_COOKIEFILE\")]\r\n        CURLOPT_COOKIEFILE = 10031,\r\n        /// <summary>\r\n        /// Pass a file name as <c>string</c>. This will make libcurl write all\r\n        /// internally known cookies to the specified file when\r\n        /// cURL handle is closed, e.g. after a call to curl_close. If no cookies are known, no file\r\n        /// will be created. Using this option also enables cookies for this\r\n        /// session, so if you for example follow a location it will make matching\r\n        /// cookies get sent accordingly.\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// If the cookie jar file can't be created or written to\r\n        /// (when cURL handle is closing), libcurl will not and\r\n        /// cannot report an error for this. Using <c>CURLOPT_VERBOSE</c> or\r\n        /// <c>CURLOPT_DEBUGFUNCTION</c> will get a warning to display, but that\r\n        /// is the only visible feedback you get about this possibly lethal situation.\r\n        /// </remarks>\r\n        [ImplementsConstant(\"CURLOPT_COOKIEJAR\")]\r\n        CURLOPT_COOKIEJAR = 10082,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c> set to <c>true</c> to mark this as a new cookie\r\n        /// \"session\". It will force libcurl to ignore all cookies it is about to\r\n        /// load that are \"session cookies\" from the previous session. By default,\r\n        /// libcurl always stores and loads all cookies, independent of whether they are\r\n        /// session cookies. Session cookies are cookies without expiry date and they\r\n        /// are meant to be alive and existing for this \"session\" only.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_COOKIESESSION\")]\r\n        CURLOPT_COOKIESESSION = 96,\r\n        /// <summary>\r\n        /// Convert Unix newlines to CRLF newlines on transfers.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CRLF\")]\r\n        CURLOPT_CRLF = 27,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used instead of GET or\r\n        /// HEAD when doing an HTTP request, or instead of LIST or NLST when\r\n        /// doing an ftp directory listing. This is useful for doing DELETE or\r\n        /// other more or less obscure HTTP requests. Don't do this at will,\r\n        /// make sure your server supports the command first. \r\n        /// <para>\r\n        /// Restore to the internal default by setting this to <c>null</c>.\r\n        /// </para>\r\n        /// <note>\r\n        /// Many people have wrongly used this option to replace the entire\r\n        /// request with their own, including multiple headers and POST contents.\r\n        /// While that might work in many cases, it will cause libcurl to send\r\n        /// invalid requests and it could possibly confuse the remote server badly.\r\n        /// Use <c>CURLOPT_POST</c> and <c>CURLOPT_POSTFIELDS</c> to set POST data.\r\n        /// Use <c>CURLOPT_HTTPHEADER</c> to replace or extend the set of headers\r\n        /// sent by libcurl. Use <c>CURLOPT_HTTP_VERSION</c> to change HTTP version.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_CUSTOMREQUEST\")]\r\n        CURLOPT_CUSTOMREQUEST = 10036,\r\n\r\n\r\n        /// <summary>\r\n        /// Pass an <c>int</c>, specifying the timeout in seconds. Name resolves\r\n        /// will be kept in memory for this number of seconds. Set to zero (0)\r\n        /// to completely disable caching, or set to -1 to make the cached\r\n        /// entries remain forever. By default, libcurl caches this info for 60\r\n        /// seconds.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_DNS_CACHE_TIMEOUT\")]\r\n        CURLOPT_DNS_CACHE_TIMEOUT = 92,\r\n        /// <summary>\r\n        /// Not supported.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_DNS_USE_GLOBAL_CACHE\")]\r\n        CURLOPT_DNS_USE_GLOBAL_CACHE = 91,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> containing the path name to the Entropy Gathering\r\n        /// Daemon socket. It will be used to seed the random engine for SSL.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_EDGSOCKET\")]\r\n        CURLOPT_EDGSOCKET = 10077,\r\n        /// <summary>\r\n        /// Sets the contents of the Accept-Encoding: header sent in an HTTP request,\r\n        /// and enables decoding of a response when a Content-Encoding: header is\r\n        /// received. Three encodings are supported: <c>identity</c>, which does\r\n        /// nothing, <c>deflate</c> which requests the server to compress its\r\n        /// response using the zlib algorithm, and <c>gzip</c> which requests the\r\n        /// gzip algorithm. If a zero-length string is set, then an Accept-Encoding:\r\n        /// header containing all supported encodings is sent.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_ENCODING\")]\r\n        CURLOPT_ENCODING = 10102,\r\n        /// <summary>\r\n        /// Not supported.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_ERRORBUFFER\")]\r\n        CURLOPT_ERRORBUFFER = 10010,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to fail silently if the\r\n        /// HTTP code returned is equal to or larger than 300. The default\r\n        /// action would be to return the page normally, ignoring that code. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FAILONERROR\")]\r\n        CURLOPT_FAILONERROR = 45,\r\n\r\n        /// <summary>\r\n        /// The file that the transfer should be written to. The default is STDOUT (the browser window). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FILE\")]\r\n        CURLOPT_FILE = 10001,\r\n\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. If it is <c>true</c>, libcurl will attempt to get\r\n        /// the modification date of the remote document in this operation. This\r\n        /// requires that the remote server sends the time or replies to a time\r\n        /// querying command. The curl_getinfo function with the\r\n        /// <c>CURLINFO_FILETIME</c> argument can be used after a\r\n        /// transfer to extract the received time (if any).\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FILETIME\")]\r\n        CURLOPT_FILETIME = 69,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to follow any Location:\r\n        /// header that the server sends as part of an HTTP header.\r\n        /// <note>\r\n        /// this means that the library will re-send the same request on the\r\n        /// new location and follow new Location: headers all the way until no\r\n        /// more such headers are returned. <c>CURLOPT_MAXREDIRS</c> can be used\r\n        /// to limit the number of redirects libcurl will follow.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FOLLOWLOCATION\")]\r\n        CURLOPT_FOLLOWLOCATION = 52,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. Set to <c>true</c> to make the next transfer\r\n        /// explicitly close the connection when done. Normally, libcurl keeps all\r\n        /// connections alive when done with one transfer in case there comes a\r\n        /// succeeding one that can re-use them. This option should be used with\r\n        /// caution and only if you understand what it does. Set to <c>false</c>\r\n        /// to have libcurl keep the connection open for possibly later re-use\r\n        /// (default behavior). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FORBID_REUSE\")]\r\n        CURLOPT_FORBID_REUSE = 75,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. Set to <c>true</c> to make the next transfer use a\r\n        /// new (fresh) connection by force. If the connection cache is full before\r\n        /// this connection, one of the existing connections will be closed as\r\n        /// according to the selected or default policy. This option should be used\r\n        /// with caution and only if you understand what it does. Set this to\r\n        /// <c>false</c> to have libcurl attempt re-using an existing connection\r\n        /// (default behavior). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FRESH_CONNECT\")]\r\n        CURLOPT_FRESH_CONNECT = 74,\r\n        /// <summary>\r\n        /// String that will be passed to the FTP server when it requests\r\n        /// account info.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTPACCOUNT\")]\r\n        CURLOPT_FTPACCOUNT = 10134,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to append to the remote\r\n        /// file instead of overwrite it. This is only useful when uploading\r\n        /// to an ftp site. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTPAPPEND\")]\r\n        CURLOPT_FTPAPPEND = 50,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to just list the names of\r\n        /// an ftp directory, instead of doing a full directory listing that\r\n        /// would include file sizes, dates etc. \r\n        /// <para>\r\n        /// This causes an FTP NLST command to be sent. Beware that some FTP\r\n        /// servers list only files in their response to NLST; they might not\r\n        /// include subdirectories and symbolic links.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTPLISTONLY\")]\r\n        CURLOPT_FTPLISTONLY = 48,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used to get the IP\r\n        /// address to use for the ftp PORT instruction. The PORT instruction\r\n        /// tells the remote server to connect to our specified IP address.\r\n        /// The string may be a plain IP address, a host name, an network\r\n        /// interface name (under Unix) or just a '-' letter to let the library\r\n        /// use your systems default IP address. Default FTP operations are\r\n        /// passive, and thus won't use PORT. \r\n        /// <para>\r\n        /// You disable PORT again and go back to using the passive version\r\n        /// by setting this option to NULL.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTPPORT\")]\r\n        CURLOPT_FTPPORT = 10017,\r\n        /// <summary>\r\n        /// When FTP over SSL/TLS is selected (with <c>CURLOPT_FTP_SSL</c>),\r\n        /// this option can be used to change libcurl's default action which\r\n        /// is to first try \"AUTH SSL\" and then \"AUTH TLS\" in this order,\r\n        /// and proceed when a OK response has been received.\r\n        /// The FTP authentication method (when is activated): CURLFTPAUTH_SSL (try SSL first),\r\n        /// CURLFTPAUTH_TLS (try TLS first), or CURLFTPAUTH_DEFAULT (let cURL decide). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTPSSLAUTH\")]\r\n        CURLOPT_FTPSSLAUTH = 129,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. If the value is <c>true</c>, cURL will attempt to\r\n        /// create any remote directory that it fails to CWD into. CWD is the\r\n        /// command that changes working directory. (Added in 7.10.7) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTP_CREATE_MISSING_DIRS\")]\r\n        CURLOPT_FTP_CREATE_MISSING_DIRS = 110,\r\n        /// <summary>\r\n        /// Pass an <c>int</c>. Causes libcurl to set a timeout period (in seconds)\r\n        /// on the amount of time that the server is allowed to take in order to\r\n        /// generate a response message for a command before the session is\r\n        /// considered hung. Note that while libcurl is waiting for a response, this\r\n        /// value overrides <c>CURLOPT_TIMEOUT</c>. It is recommended that if used in\r\n        /// conjunction with <c>CURLOPT_TIMEOUT</c>, you set\r\n        /// <c>CURLOPT_FTP_RESPONSE_TIMEOUT</c> to a value smaller than\r\n        /// <c>CURLOPT_TIMEOUT</c>. (Added in 7.10.8) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTP_RESPONSE_TIMEOUT\")]\r\n        CURLOPT_FTP_RESPONSE_TIMEOUT = 112,\r\n        /// <summary>\r\n        /// Pass a <c>CURLFTPSSL_*</c> constant that specifies FTP SSL level.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTP_SSL\")]\r\n        CURLOPT_FTP_SSL = 119,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. If the value is <c>true</c>, it tells curl to use\r\n        /// the EPRT (and LPRT) command when doing active FTP downloads (which is\r\n        /// enabled by CURLOPT_FTPPORT). Using EPRT means that it will first attempt\r\n        /// to use EPRT and then LPRT before using PORT, but if you pass <c>false</c>\r\n        /// to this option, it will not try using EPRT or LPRT, only plain PORT.\r\n        /// (Added in 7.10.5) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTP_USE_EPRT\")]\r\n        CURLOPT_FTP_USE_EPRT = 106,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. If the value is <c>true</c>, it tells curl to use\r\n        /// the EPSV command when doing passive FTP downloads (which it always does\r\n        /// by default). Using EPSV means that it will first attempt to use EPSV\r\n        /// before using PASV, but if you pass <c>false</c> to this option, it will\r\n        /// not try using EPSV, only plain PASV.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_FTP_USE_EPSV\")]\r\n        CURLOPT_FTP_USE_EPSV = 85,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to include the header in\r\n        /// the body output. This is only relevant for protocols that actually\r\n        /// have headers preceding the data (like HTTP).\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HEADER\")]\r\n        CURLOPT_HEADER = 42,\r\n\r\n        /// <summary>\r\n        /// The name of a callback function where the callback function takes two parameters. \r\n        /// The first is the cURL resource, the second is a string with the header data to be written. \r\n        /// The header data must be written when using this callback function. \r\n        /// Return the number of bytes written. \r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Provide an HeaderFunction delegate reference.\r\n        /// This delegate gets called by libcurl as soon as there is received\r\n        /// header data that needs to be written down. The headers are guaranteed\r\n        /// to be written one-by-one and only complete lines are written. Parsing\r\n        /// headers should be easy enough using this. The size of the data contained\r\n        /// in <c>buf</c> is <c>size</c> multiplied with <c>nmemb</c>.\r\n        /// Return the number of bytes actually written or return -1 to signal\r\n        /// error to the library (it will cause it to abort the transfer with a\r\n        /// <see cref=\"CURLcode.CURLE_WRITE_ERROR\"/> return code). \r\n        /// </remarks>\r\n        [ImplementsConstant(\"CURLOPT_HEADERFUNCTION\")]\r\n        CURLOPT_HEADERFUNCTION = 20079,\r\n        /// <summary>\r\n        /// Pass an array of aliases to be treated as valid HTTP\r\n        /// 200 responses. Some servers respond with a custom header response line.\r\n        /// For example, IceCast servers respond with \"ICY 200 OK\". By including\r\n        /// this string in your list of aliases, the response will be treated as a\r\n        /// valid HTTP header line such as \"HTTP/1.0 200 OK\". (Added in 7.10.3) \r\n        /// <note>\r\n        /// The alias itself is not parsed for any version strings. So if your alias\r\n        /// is \"MYHTTP/9.9\", libcurl will not treat the server as responding with\r\n        /// HTTP version 9.9. Instead libcurl will use the value set by option\r\n        /// <c>CURLOPT_HTTP_VERSION</c>. \r\n        /// </note>\r\n        /// </summary>\r\n        CURLOPT_HTTP200ALIASES = 10104,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> as parameter, which is set to a bitmask \r\n        /// of <see cref=\"CURLhttpAuth\"/>, to tell libcurl what authentication\r\n        /// method(s) you want it to use. If more than one bit is set, libcurl will\r\n        /// first query the site to see what authentication methods it supports and\r\n        /// then pick the best one you allow it to use. Note that for some methods,\r\n        /// this will induce an extra network round-trip. Set the actual name and\r\n        /// password with the <c>CURLOPT_USERPWD</c> option. (Added in 7.10.6) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HTTPAUTH\")]\r\n        CURLOPT_HTTPAUTH = 107,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. <c>TRUE</c> to reset the HTTP request method to GET.\r\n        /// Since GET is the default, this is only necessary if the request method \r\n        /// has been changed. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HTTPGET\")]\r\n        CURLOPT_HTTPGET = 80,\r\n        /// <summary>\r\n        /// Pass an array containing HTTP headers to pass to\r\n        /// the server in your HTTP request. If you add a header that is otherwise\r\n        /// generated and used by libcurl internally, your added one will be used\r\n        /// instead. If you add a header with no contents as in 'Accept:' (no data\r\n        /// on the right side of the colon), the internally used header will get\r\n        /// disabled. Thus, using this option you can add new headers, replace\r\n        /// internal headers and remove internal headers. \r\n        /// <para>\r\n        /// The first line in a request (usually containing a GET or POST) is not\r\n        /// a header and cannot be replaced using this option. Only the lines\r\n        /// following the request-line are headers. \r\n        /// </para>\r\n        /// <para>\r\n        /// Pass a <c>null</c> to this to reset back to no custom headers.\r\n        /// </para>\r\n        /// <note>\r\n        /// The most commonly replaced headers have \"shortcuts\" in the options\r\n        /// <c>CURLOPT_COOKIE</c>, <c>CURLOPT_USERAGENT</c> and <c>CURLOPT_REFERER</c>.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HTTPHEADER\")]\r\n        CURLOPT_HTTPHEADER = 10023,\r\n\r\n        /// <summary>\r\n        /// Set the parameter to <c>true</c> to get the library to tunnel all\r\n        /// operations through a given HTTP proxy. Note that there is a big\r\n        /// difference between using a proxy and tunneling through it. If you\r\n        /// don't know what this means, you probably don't want this tunneling option. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HTTPPROXYTUNNEL\")]\r\n        CURLOPT_HTTPPROXYTUNNEL = 61,\r\n        /// <summary>\r\n        /// Pass a <c>CURL_HTTP_VERSION_NONE</c> (default, lets CURL decide which version to use),\r\n        /// <c>CURL_HTTP_VERSION_1_0</c> (forces HTTP/1.0), or <c>CURL_HTTP_VERSION_1_1</c> (forces HTTP/1.1).\r\n        /// These values force libcurl to use the specific HTTP versions. This is not\r\n        /// sensible to do unless you have a good reason. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_HTTP_VERSION\")]\r\n        CURLOPT_HTTP_VERSION = 84,\r\n\r\n        /// <summary>\r\n        /// Provide an object, such as a <c>FileStream</c>, upon which\r\n        /// you may need to perform an IOCTL operation. Right now, only\r\n        /// rewind is supported.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_IOCTLDATA\")]\r\n        CURLOPT_IOCTLDATA = 10131,\r\n        /// <summary>\r\n        /// When uploading a file to a remote site, this option should be used to\r\n        /// tell libcurl what the expected size of the infile is. This value should\r\n        /// be passed as an <c>int</c>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_INFILESIZE\")]\r\n        CURLOPT_INFILESIZE = 14,\r\n        /// <summary>\r\n        /// When uploading a file to a remote site, this option should be used to\r\n        /// tell libcurl what the expected size of the infile is. This value should\r\n        /// be passed as a <c>long</c>. (Added in 7.11.0) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_INFILESIZE_LARGE\")]\r\n        CURLOPT_INFILESIZE_LARGE = 30115,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. This sets the interface name to use\r\n        /// as the outgoing network interface. The name can be an interface name,\r\n        /// an IP address or a host name.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_INTERFACE\")]\r\n        CURLOPT_INTERFACE = 10062,\r\n        /// <summary>\r\n        /// Pass <c>CURL_IPRESOLVE_WHATEVER</c>, <c>CURL_IPRESOLVE_V4</c> or \r\n        /// <c>CURL_IPRESOLVE_V6</c> to specify the IP resolution method.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_IPRESOLVE\")]\r\n        CURLOPT_IPRESOLVE = 113,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. Set the kerberos4 security level;\r\n        /// this also enables kerberos4 awareness. This is a string, 'clear', 'safe',\r\n        /// 'confidential' or 'private'. If the string is set but doesn't match\r\n        /// one of these, 'private' will be used. Set the string to <c>null</c>\r\n        /// to disable kerberos4. The kerberos support only works for FTP.\r\n        /// </summary>\r\n        CURLOPT_KRB4LEVEL = 10063,\r\n        /// <summary>\r\n        /// Last numeric entry in the enumeration. Don't use this in your\r\n        /// application code.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_LASTENTRY\")]\r\n        CURLOPT_LASTENTRY = 135,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> as parameter. It contains the transfer speed in bytes\r\n        /// per second that the transfer should be below during\r\n        /// <c>CURLOPT_LOW_SPEED_TIME</c> seconds for the library to consider it\r\n        /// too slow and abort.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_LOW_SPEED_LIMIT\")]\r\n        CURLOPT_LOW_SPEED_LIMIT = 19,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> as parameter. It contains the time in seconds that\r\n        /// the transfer should be below the <c>CURLOPT_LOW_SPEED_LIMIT</c> for the\r\n        /// library to consider it too slow and abort.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_LOW_SPEED_TIME\")]\r\n        CURLOPT_LOW_SPEED_TIME = 20,\r\n        /// <summary>\r\n        /// Pass an <c>int</c>. The set number will be the persistent connection\r\n        /// cache size. The set amount will be the maximum amount of simultaneously\r\n        /// open connections that libcurl may cache. Default is 5, and there isn't\r\n        /// much point in changing this value unless you are perfectly aware of how\r\n        /// this works and changes libcurl's behaviour. This concerns connections\r\n        /// using any of the protocols that support persistent connections. \r\n        /// <para>\r\n        /// When reaching the maximum limit, cURL uses the <c>CURLOPT_CLOSEPOLICY</c>\r\n        /// to figure out which of the existing connections to close to prevent the\r\n        /// number of open connections to increase. \r\n        /// </para>\r\n        /// <note>\r\n        /// if you already have performed transfers with this Easy object, setting a\r\n        /// smaller <c>CURLOPT_MAXCONNECTS</c> than before may cause open connections\r\n        /// to get closed unnecessarily.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_MAXCONNECTS\")]\r\n        CURLOPT_MAXCONNECTS = 71,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> as parameter. This allows you to specify the maximum\r\n        /// size (in bytes) of a file to download. If the file requested is larger\r\n        /// than this value, the transfer will not start and\r\n        /// <see cref=\"CURLcode.CURLE_FILESIZE_EXCEEDED\"/> will be returned.\r\n        /// <note>\r\n        /// The file size is not always known prior to download, and for such files\r\n        /// this option has no effect even if the file transfer ends up being larger\r\n        /// than this given limit. This concerns both FTP and HTTP transfers. \r\n        /// </note> \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_MAXFILESIZE\")]\r\n        CURLOPT_MAXFILESIZE = 114,\r\n        /// <summary>\r\n        /// Pass a <c>long</c> as parameter. This allows you to specify the\r\n        /// maximum size (in bytes) of a file to download. If the file requested\r\n        /// is larger than this value, the transfer will not start and\r\n        /// <see cref=\"CURLcode.CURLE_FILESIZE_EXCEEDED\"/> will be returned.\r\n        /// (Added in 7.11.0) \r\n        /// <note>\r\n        /// The file size is not always known prior to download, and for such files\r\n        /// this option has no effect even if the file transfer ends up being larger\r\n        /// than this given limit. This concerns both FTP and HTTP transfers. \r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_MAXFILESIZE_LARGE\")]\r\n        CURLOPT_MAXFILESIZE_LARGE = 30117,\r\n        /// <summary>\r\n        /// Pass an <c>int</c>. The set number will be the redirection limit. If\r\n        /// that many redirections have been followed, the next redirect will cause\r\n        /// an error (<c>CURLE_TOO_MANY_REDIRECTS</c>). This option only makes sense\r\n        /// if the <c>CURLOPT_FOLLOWLOCATION</c> is used at the same time.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_MAXREDIRS\")]\r\n        CURLOPT_MAXREDIRS = 68,\r\n        /// <summary>\r\n        /// This parameter controls the preference of libcurl between using\r\n        /// user names and passwords from your <c>~/.netrc</c> file, relative to\r\n        /// user names and passwords in the URL supplied with <c>CURLOPT_URL</c>. \r\n        /// <note>\r\n        /// libcurl uses a user name (and supplied or prompted password)\r\n        /// supplied with <c>CURLOPT_USERPWD</c> in preference to any of the\r\n        /// options controlled by this parameter.\r\n        /// </note>\r\n        /// <para>\r\n        /// Pass a <c>CURL_NETRC_IGNORED</c>, <c>CURL_NETRC_OPTIONAL</c> or <c>CURL_NETRC_REQUIRED</c>\r\n        /// </para>\r\n        /// <para>\r\n        /// Only machine name, user name and password are taken into account\r\n        /// (init macros and similar things aren't supported).\r\n        /// </para>\r\n        /// <note>\r\n        /// libcurl does not verify that the file has the correct properties\r\n        /// set (as the standard Unix ftp client does). It should only be\r\n        /// readable by user.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_NETRC\")]\r\n        CURLOPT_NETRC = 51,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, containing the full path name to the\r\n        /// file you want libcurl to use as .netrc file. If this option is omitted,\r\n        /// and <c>CURLOPT_NETRC</c> is set, libcurl will attempt to find the a\r\n        /// .netrc file in the current user's home directory. (Added in 7.10.9) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_NETRC_FILE\")]\r\n        CURLOPT_NETRC_FILE = 10118,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to not include the\r\n        /// body-part in the output. This is only relevant for protocols that\r\n        /// have separate header and body parts. On HTTP(S) servers, this\r\n        /// will make libcurl do a HEAD request. \r\n        /// <para>\r\n        /// To change back to GET, you should use <c>CURLOPT_HTTPGET</c>. To\r\n        /// change back to POST, you should use <c>CURLOPT_POST</c>. Setting\r\n        /// <c>CURLOPT_NOBODY</c> to <c>false</c> has no effect.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_NOBODY\")]\r\n        CURLOPT_NOBODY = 44,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to shut off progress\r\n        /// reporting. This is default in PHP.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_NOPROGRESS\")]\r\n        CURLOPT_NOPROGRESS = 43,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c>. If it is <c>true</c>, libcurl will not use any\r\n        /// functions that install signal handlers or any functions that cause\r\n        /// signals to be sent to the process. This option is mainly here to allow\r\n        /// multi-threaded unix applications to still set/use all timeout options\r\n        /// etc, without risking getting signals. (Added in 7.10)\r\n        /// <para>\r\n        /// Consider using libcurl with ares built-in to enable asynchronous DNS\r\n        /// lookups. It enables nice timeouts for name resolves without signals.\r\n        /// </para> \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_NOSIGNAL\")]\r\n        CURLOPT_NOSIGNAL = 99,\r\n        /// <summary>\r\n        /// Not supported.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PASV_HOST\")]\r\n        CURLOPT_PASV_HOST = 126,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> specifying what remote port number to connect to,\r\n        /// instead of the one specified in the URL or the default port for the\r\n        /// used protocol. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PORT\")]\r\n        CURLOPT_PORT = 3,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to do a regular HTTP post.\r\n        /// This will also make the library use the a \"Content-Type:\r\n        /// application/x-www-form-urlencoded\" header. (This is by far the most\r\n        /// commonly used POST method).\r\n        /// <para>\r\n        /// Use the <c>CURLOPT_POSTFIELDS</c> option to specify what data to post\r\n        /// and <c>CURLOPT_POSTFIELDSIZE</c> to set the data size. Optionally,\r\n        /// you can provide data to POST using the <c>CURLOPT_READFUNCTION</c> and\r\n        /// <c>CURLOPT_READDATA</c> options.\r\n        /// </para>\r\n        /// <para>\r\n        /// You can override the default POST Content-Type: header by setting\r\n        /// your own with <c>CURLOPT_HTTPHEADER</c>. \r\n        /// </para>\r\n        /// <para>\r\n        /// Using POST with HTTP 1.1 implies the use of a \"Expect: 100-continue\"\r\n        /// header. You can disable this header with <c>CURLOPT_HTTPHEADER</c> as usual.\r\n        /// </para> \r\n        /// <para>\r\n        /// If you use POST to a HTTP 1.1 server, you can send data without knowing\r\n        /// the size before starting the POST if you use chunked encoding. You\r\n        /// enable this by adding a header like \"Transfer-Encoding: chunked\" with\r\n        /// <c>CURLOPT_HTTPHEADER</c>. With HTTP 1.0 or without chunked transfer,\r\n        /// you must specify the size in the request. \r\n        /// </para>\r\n        /// <note>\r\n        /// if you have issued a POST request and want to make a HEAD or GET instead,\r\n        /// you must explictly pick the new request type using <c>CURLOPT_NOBODY</c>\r\n        /// or <c>CURLOPT_HTTPGET</c> or similar. \r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_POST\")]\r\n        CURLOPT_POST = 47,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should be the full data to post\r\n        /// in an HTTP POST operation. You must make sure that the data is formatted\r\n        /// the way you want the server to receive it. libcurl will not convert or\r\n        /// encode it for you. Most web servers will assume this data to be\r\n        /// url-encoded. Take note. \r\n        /// <para>\r\n        /// This POST is a normal application/x-www-form-urlencoded kind (and\r\n        /// libcurl will set that Content-Type by default when this option is used),\r\n        /// which is the most commonly used one by HTML forms. See also the\r\n        /// <c>CURLOPT_POST</c>. Using <c>CURLOPT_POSTFIELDS</c> implies\r\n        /// <c>CURLOPT_POST</c>. \r\n        /// </para>\r\n        /// <para>\r\n        /// Using POST with HTTP 1.1 implies the use of a \"Expect: 100-continue\"\r\n        /// header. You can disable this header with <c>CURLOPT_HTTPHEADER</c> as usual. \r\n        /// </para>\r\n        /// <note>\r\n        /// to make multipart/formdata posts (aka rfc1867-posts), check out the\r\n        /// <c>CURLOPT_HTTPPOST</c> option.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_POSTFIELDS\")]\r\n        CURLOPT_POSTFIELDS = 10015,\r\n        /// <summary>\r\n        /// If you want to post data to the server without letting libcurl do a\r\n        /// <c>strlen()</c> to measure the data size, this option must be used. When\r\n        /// this option is used you can post fully binary data, which otherwise\r\n        /// is likely to fail. If this size is set to zero, the library will use\r\n        /// <c>strlen()</c> to get the size.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_POSTFIELDSIZE\")]\r\n        CURLOPT_POSTFIELDSIZE = 60,\r\n        /// <summary>\r\n        /// Pass a <c>long</c> as parameter. Use this to set the size of the\r\n        /// <c>CURLOPT_POSTFIELDS</c> data to prevent libcurl from doing\r\n        /// <c>strlen()</c> on the data to figure out the size. This is the large\r\n        /// file version of the <c>CURLOPT_POSTFIELDSIZE</c> option. (Added in 7.11.1) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_POSTFIELDSIZE_LARGE\")]\r\n        CURLOPT_POSTFIELDSIZE_LARGE = 30120,\r\n        /// <summary>\r\n        /// Pass an array of FTP commands to pass to the server after\r\n        /// your ftp transfer request. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_POSTQUOTE\")]\r\n        CURLOPT_POSTQUOTE = 10039,\r\n\r\n        /// <summary>\r\n        /// Pass an <c>object</c> as parameter. The object can\r\n        /// subsequently be retrieved using curl_getinfo with the\r\n        /// <c>CURLINFO_PRIVATE</c> option. libcurl itself does\r\n        /// nothing with this data. (Added in 7.10.3) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PRIVATE\")]\r\n        CURLOPT_PRIVATE = 10103,\r\n        /// <summary>\r\n        /// Pass an <c>object</c> reference that will be untouched by libcurl\r\n        /// and passed as the first argument in the progress delegate set with\r\n        /// <c>CURLOPT_PROGRESSFUNCTION</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROGRESSDATA\")]\r\n        CURLOPT_PROGRESSDATA = 10057,\r\n        /// <summary>\r\n        /// Pass an callback function where the callback function takes three parameters. \r\n        /// The first is the cURL resource, the second is a file-descriptor resource, \r\n        /// and the third is length. Return the string containing the data. \r\n        /// This function gets called by libcurl at a frequent interval during data\r\n        /// transfer. \r\n        /// </summary>\r\n        // This probably doesnt work in PHP: Returning a\r\n        // non-zero value from this delegate will cause libcurl to abort the\r\n        // transfer and return <c>CURLE_ABORTED_BY_CALLBACK\"</c>.\r\n        [ImplementsConstant(\"CURLOPT_PROGRESSFUNCTION\")]\r\n        CURLOPT_PROGRESSFUNCTION = 20056,\r\n\r\n\r\n        /// <summary>\r\n        /// Set HTTP proxy to use. The parameter should be a <c>string</c> holding\r\n        /// the host name or dotted IP address. To specify port number in this\r\n        /// string, append <c>:[port]</c> to the end of the host name. The proxy\r\n        /// string may be prefixed with <c>[protocol]://</c> since any such prefix\r\n        /// will be ignored. The proxy's port number may optionally be specified\r\n        /// with the separate option <c>CURLOPT_PROXYPORT</c>. \r\n        /// <para>\r\n        /// NOTE: when you tell the library to use an HTTP proxy, libcurl will\r\n        /// transparently convert operations to HTTP even if you specify an FTP\r\n        /// URL etc. This may have an impact on what other features of the library\r\n        /// you can use, such as <c>CURLOPT_QUOTE</c> and similar FTP specifics\r\n        /// that don't work unless you tunnel through the HTTP proxy. Such tunneling\r\n        /// is activated with <c>CURLOPT_HTTPPROXYTUNNEL</c>. \r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXY\")]\r\n        CURLOPT_PROXY = 10004,\r\n        /// <summary>\r\n        /// Pass a bitmask of <see cref=\"CURLhttpAuth\"/> as the paramter, to tell\r\n        /// libcurl what authentication method(s) you want it to use for your proxy\r\n        /// authentication. If more than one bit is set, libcurl will first query the\r\n        /// site to see what authentication methods it supports and then pick the best\r\n        /// one you allow it to use. Note that for some methods, this will induce an\r\n        /// extra network round-trip. Set the actual name and password with the\r\n        /// <c>CURLOPT_PROXYUSERPWD</c> option. The bitmask can be constructed by\r\n        /// or'ing together the <see cref=\"CURLhttpAuth\"/> bits. As of this writing,\r\n        /// only <see cref=\"CURLhttpAuth.CURLAUTH_BASIC\"/> and\r\n        /// <see cref=\"CURLhttpAuth.CURLAUTH_NTLM\"/> work. (Added in 7.10.7) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYAUTH\")]\r\n        CURLOPT_PROXYAUTH = 111,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> with this option to set the proxy port to connect\r\n        /// to unless it is specified in the proxy string <c>CURLOPT_PROXY</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYPORT\")]\r\n        CURLOPT_PROXYPORT = 59,\r\n        /// <summary>\r\n        /// Pass a <see cref=\"CURLproxyType\"/> to set type of the proxy.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYTYPE\")]\r\n        CURLOPT_PROXYTYPE = 101,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should be\r\n        /// <c>[user name]:[password]</c> to use for the connection to the\r\n        /// HTTP proxy. Use <c>CURLOPT_PROXYAUTH</c> to decide authentication method. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYUSERPWD\")]\r\n        CURLOPT_PROXYUSERPWD = 10006,\r\n\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should be\r\n        /// username to use for the connection to the\r\n        /// HTTP proxy. Use <c>CURLOPT_PROXYAUTH</c> to decide authentication method. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYUSERNAME\")]\r\n        CURLOPT_PROXYUSERNAME = 10000 + 175,\r\n\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should be\r\n        /// password to use for the connection to the\r\n        /// HTTP proxy. Use <c>CURLOPT_PROXYAUTH</c> to decide authentication method. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PROXYPASSWORD\")]\r\n        CURLOPT_PROXYPASSWORD = 10000 + 176,\r\n\r\n\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to use HTTP PUT to transfer\r\n        /// data. The data should be set with <c>CURLOPT_READDATA</c> and\r\n        /// <c>CURLOPT_INFILESIZE</c>. \r\n        /// <para>\r\n        /// This option is deprecated and starting with version 7.12.1 you should\r\n        /// instead use <c>CURLOPT_UPLOAD</c>. \r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PUT\")]\r\n        CURLOPT_PUT = 54,\r\n        /// <summary>\r\n        /// Pass a reference to an array containing FTP commands to\r\n        /// pass to the server prior to your ftp request. This will be done before\r\n        /// any other FTP commands are issued (even before the CWD command).\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_QUOTE\")]\r\n        CURLOPT_QUOTE = 10028,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> containing the file name. The file will be used\r\n        /// to read from to seed the random engine for SSL. The more random the\r\n        /// specified file is, the more secure the SSL connection will become.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_RANDOM_FILE\")]\r\n        CURLOPT_RANDOM_FILE = 10076,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should contain the\r\n        /// specified range you want. It should be in the format <c>X-Y</c>, where X\r\n        /// or Y may be left out. HTTP transfers also support several intervals,\r\n        /// separated with commas as in <c>X-Y,N-M</c>. Using this kind of multiple\r\n        /// intervals will cause the HTTP server to send the response document\r\n        /// in pieces (using standard MIME separation techniques). Pass a\r\n        /// <c>null</c> to this option to disable the use of ranges. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_RANGE\")]\r\n        CURLOPT_RANGE = 10007,\r\n\r\n        /// <summary>\r\n        /// The file that the transfer should be read from when uploading. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_READDATA\")]\r\n        CURLOPT_READDATA = 10009,\r\n\r\n        /// <summary>\r\n        /// The file that the transfer should be read from when uploading. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_INFILE\")]\r\n        CURLOPT_INFILE = CURLOPT_READDATA,\r\n       \r\n\r\n        ///<summary> \r\n        /// Pass callback function where the callback function takes three parameters.\r\n        /// The first is the cURL resource, the second is a stream resource provided to cURL\r\n        /// through the option <c>CURLOPT_INFILE</c>, and the third is the maximum amount of data \r\n        /// to be read. The callback function must return a string with a length equal or \r\n        /// smaller than the amount of data requested, typically by reading it from the passed\r\n        /// stream resource. Returning 0 will signal end-of-file  and cause it to stop \r\n        /// the current transfer. \r\n        /// </summary>\r\n        /// <remarks>\r\n        /// If you stop the current transfer by returning 0 \"pre-maturely\"\r\n        /// (i.e before the server expected it, like when you've told you will\r\n        /// upload N bytes and you upload less than N bytes), you may experience that\r\n        /// the server \"hangs\" waiting for the rest of the data that won't come. \r\n        /// </remarks>\r\n        [ImplementsConstant(\"CURLOPT_READFUNCTION\")]\r\n        CURLOPT_READFUNCTION = 20012,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used to set the Referer:\r\n        /// header in the http request sent to the remote server. This can be used\r\n        /// to fool servers or scripts. You can also set any custom header with\r\n        /// <c>CURLOPT_HTTPHEADER</c>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_REFERER\")]\r\n        CURLOPT_REFERER = 10016,\r\n        /// <summary>\r\n        /// Pass an <c>int</c> as parameter. It contains the offset in number of\r\n        /// bytes that you want the transfer to start from. Set this option to 0\r\n        /// to make the transfer start from the beginning (effectively disabling resume). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_RESUME_FROM\")]\r\n        CURLOPT_RESUME_FROM = 21,\r\n        /// <summary>\r\n        /// Pass a <c>long</c> as parameter. It contains the offset in number of\r\n        /// bytes that you want the transfer to start from. (Added in 7.11.0) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_RESUME_FROM_LARGE\")]\r\n        CURLOPT_RESUME_FROM_LARGE = 30116,\r\n\r\n        /// <summary>\r\n        /// Pass a <c>bool</c> as parameter. Setting this option will make return \r\n        /// the transfer as a string of the return value of curl_exec() instead of\r\n        /// outputting it out directly. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_RETURNTRANSFER\")]\r\n        CURLOPT_RETURNTRANSFER = 19913,\r\n\r\n\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. The string should be the file name\r\n        /// of your certificate. The default format is \"PEM\" and can be changed\r\n        /// with <c>CURLOPT_SSLCERTTYPE</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLCERT\")]\r\n        CURLOPT_SSLCERT = 10025,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used as the password\r\n        /// required to use the <c>CURLOPT_SSLCERT</c> certificate. \r\n        /// <para>\r\n        /// This option is replaced by <c>CURLOPT_SSLKEYPASSWD</c> and should only\r\n        /// be used for backward compatibility. You never needed a pass phrase to\r\n        /// load a certificate but you need one to load your private key.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLCERTPASSWD\")]\r\n        CURLOPT_SSLCERTPASSWD = CURLOPT_SSLKEYPASSWD,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. The string should be the format of\r\n        /// your certificate. Supported formats are \"PEM\" and \"DER\". (Added in 7.9.3) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLCERTTYPE\")]\r\n        CURLOPT_SSLCERTTYPE = 10086,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used as the identifier\r\n        /// for the crypto engine you want to use for your private key.\r\n        /// <note>\r\n        /// If the crypto device cannot be loaded, \r\n        /// <see cref=\"CURLcode.CURLE_SSL_ENGINE_NOTFOUND\"/> is returned.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLENGINE\")]\r\n        CURLOPT_SSLENGINE = 10089,\r\n        /// <summary>\r\n        /// Sets the actual crypto engine as the default for (asymmetric)\r\n        /// crypto operations.\r\n        /// <note>\r\n        /// If the crypto device cannot be set,\r\n        /// <see cref=\"CURLcode.CURLE_SSL_ENGINE_SETFAILED\"/> is returned. \r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLENGINE_DEFAULT\")]\r\n        CURLOPT_SSLENGINE_DEFAULT = 90,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. The string should be the file name\r\n        /// of your private key. The default format is \"PEM\" and can be changed\r\n        /// with <c>CURLOPT_SSLKEYTYPE</c>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLKEY\")]\r\n        CURLOPT_SSLKEY = 10087,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used as the password\r\n        /// required to use the <c>CURLOPT_SSLKEY</c> private key.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLKEYPASSWD\")]\r\n        CURLOPT_SSLKEYPASSWD = 10026,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. The string should be the format of\r\n        /// your private key. Supported formats are \"PEM\", \"DER\" and \"ENG\". \r\n        /// <note>\r\n        /// The format \"ENG\" enables you to load the private key from a crypto\r\n        /// engine. In this case <c>CURLOPT_SSLKEY</c> is used as an identifier\r\n        /// passed to the engine. You have to set the crypto engine with\r\n        /// <c>CURLOPT_SSLENGINE</c>. \"DER\" format key file currently does not\r\n        /// work because of a bug in OpenSSL. \r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLKEYTYPE\")]\r\n        CURLOPT_SSLKEYTYPE = 10088,\r\n        /// <summary>\r\n        /// Set the SSL version to be used. By default the SSL library will try to solve\r\n        /// this by itself although some servers make this difficult, so it has to be set \r\n        /// manually.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSLVERSION\")]\r\n        CURLOPT_SSLVERSION = 32,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> holding the list of ciphers to use for the SSL\r\n        /// connection. The list must be syntactically correct, it consists of\r\n        /// one or more cipher strings separated by colons. Commas or spaces are\r\n        /// also acceptable separators but colons are normally used, !, - and +\r\n        /// can be used as operators. Valid examples of cipher lists include\r\n        /// 'RC4-SHA', ´SHA1+DES´, 'TLSv1' and 'DEFAULT'. The default list is\r\n        /// normally set when you compile OpenSSL.\r\n        /// <para>\r\n        /// You'll find more details about cipher lists on this URL:\r\n        /// http://www.openssl.org/docs/apps/ciphers.html \r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSL_CIPHER_LIST\")]\r\n        CURLOPT_SSL_CIPHER_LIST = 10083,\r\n\r\n        /// <summary>\r\n        /// Pass an <c>int</c>. Set if we should verify the common name from the\r\n        /// peer certificate in the SSL handshake, set 1 to check existence, 2 to\r\n        /// ensure that it matches the provided hostname. This is by default set\r\n        /// to 2. (default changed in 7.10) \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSL_VERIFYHOST\")]\r\n        CURLOPT_SSL_VERIFYHOST = 81,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c> that is set to <c>false</c> to stop curl from\r\n        /// verifying the peer's certificate (7.10 starting setting this option\r\n        /// to non-zero by default). Alternate certificates to verify against\r\n        /// can be specified with the <c>CURLOPT_CAINFO</c> option or a\r\n        /// certificate directory can be specified with the <c>CURLOPT_CAPATH</c>\r\n        /// option. As of 7.10, curl installs a default bundle.\r\n        /// <c>CURLOPT_SSL_VERIFYHOST</c> may also need to be set to 1\r\n        /// or 0 if <c>CURLOPT_SSL_VERIFYPEER</c> is disabled (it defaults to 2). \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_SSL_VERIFYPEER\")]\r\n        CURLOPT_SSL_VERIFYPEER = 64,\r\n        /// <summary>\r\n        /// An alternative location to output errors to instead of STDERR. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_STDERR\")]\r\n        CURLOPT_STDERR = 10037,\r\n        /// <summary>\r\n        /// Pass a <c>bool</c> specifying whether the TCP_NODELAY option should be\r\n        /// set or cleared (<c>true</c> = set, <c>false</c> = clear). The option is\r\n        /// cleared by default. This will have no effect after the connection has\r\n        /// been established.\r\n        /// <para>\r\n        /// Setting this option will disable TCP's Nagle algorithm. The purpose of\r\n        /// this algorithm is to try to minimize the number of small packets on the\r\n        /// network (where \"small packets\" means TCP segments less than the Maximum\r\n        /// Segment Size (MSS) for the network). \r\n        /// </para>\r\n        /// <para>\r\n        /// Maximizing the amount of data sent per TCP segment is good because it\r\n        /// amortizes the overhead of the send. However, in some cases (most notably\r\n        /// telnet or rlogin) small segments may need to be sent without delay. This\r\n        /// is less efficient than sending larger amounts of data at a time, and can\r\n        /// contribute to congestion on the network if overdone. \r\n        /// </para> \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_TCP_NODELAY\")]\r\n        CURLOPT_TCP_NODELAY = 121,\r\n        /// <summary>\r\n        /// Provide an list with variables to pass to the telnet\r\n        /// negotiations. The variables should be in the format \"option=value\".\r\n        /// libcurl supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See\r\n        /// the TELNET standard for details. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_TELNETOPTIONS\")]\r\n        CURLOPT_TELNETOPTIONS = 10070,\r\n\r\n        // Pass a member of the <c>CURLtimeCond</c> enumeration as a paramter.\r\n        /// <summary>\r\n        /// This defines how the <c>CURLOPT_TIMEVALUE</c> time\r\n        /// value is treated. This feature applies to HTTP and FTP. \r\n        /// Use <c>CURL_TIMECOND_IFMODSINCE</c> to return the page only if \r\n        /// it has been modified since the time specified in CURLOPT_TIMEVALUE.\r\n        /// If it hasn't been modified, a \"304 Not Modified\" header will be returned\r\n        /// assuming <c>CURLOPT_HEADER</c> is TRUE. \r\n        /// Use <c>CURL_TIMECOND_IFUNMODSINCE</c> for the reverse effect.\r\n        /// <c>CURL_TIMECOND_IFMODSINCE</c> is the default. \r\n        /// </summary>\r\n        /// <remarks>\r\n        /// The last modification time of a file is not always known and in such\r\n        /// instances this feature will have no effect even if the given time\r\n        /// condition would have not been met.\r\n        /// </remarks>\r\n        [ImplementsConstant(\"CURLOPT_TIMECONDITION\")]\r\n        CURLOPT_TIMECONDITION = 33,\r\n        /// <summary>\r\n        /// Pass a <c>int</c> as parameter containing the maximum time in seconds\r\n        /// that you allow the libcurl transfer operation to take. Normally, name\r\n        /// lookups can take a considerable time and limiting operations to less\r\n        /// than a few minutes risk aborting perfectly normal operations. This\r\n        /// option will cause curl to use the SIGALRM to enable time-outing\r\n        /// system calls. \r\n        /// <note>\r\n        /// this is not recommended to use in unix multi-threaded programs,\r\n        /// as it uses signals unless <c>CURLOPT_NOSIGNAL</c> (see above) is set.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_TIMEOUT\")]\r\n        CURLOPT_TIMEOUT = 13,\r\n        /// <summary>\r\n        /// Pass a <see cref=\"System.DateTime\"/> as parameter. This time will be\r\n        /// used in a condition as specified with <c>CURLOPT_TIMECONDITION</c>. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_TIMEVALUE\")]\r\n        CURLOPT_TIMEVALUE = 34,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to use ASCII mode for ftp\r\n        /// transfers, instead of the default binary transfer. For LDAP transfers\r\n        /// it gets the data in plain text instead of HTML and for win32 systems\r\n        /// it does not set the stdout to binary mode. This option can be usable\r\n        /// when transferring text data between systems with different views on\r\n        /// certain characters, such as newlines or similar.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_TRANSFERTEXT\")]\r\n        CURLOPT_TRANSFERTEXT = 53,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library it can continue to send\r\n        /// authentication (user+password) when following locations, even when\r\n        /// hostname changed. Note that this is meaningful only when setting\r\n        /// <c>CURLOPT_FOLLOWLOCATION</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_UNRESTRICTED_AUTH\")]\r\n        CURLOPT_UNRESTRICTED_AUTH = 105,\r\n        /// <summary>\r\n        /// A <c>true</c> parameter tells the library to prepare for an\r\n        /// upload. The <c>CURLOPT_READDATA</c> and <c>CURLOPT_INFILESIZE</c>\r\n        /// or <c>CURLOPT_INFILESIZE_LARGE</c> are also interesting for uploads.\r\n        /// If the protocol is HTTP, uploading means using the PUT request\r\n        /// unless you tell libcurl otherwise. \r\n        /// <para>\r\n        /// Using PUT with HTTP 1.1 implies the use of a \"Expect: 100-continue\"\r\n        /// header. You can disable this header with <c>CURLOPT_HTTPHEADER</c> as usual. \r\n        /// </para>\r\n        /// <para>\r\n        /// If you use PUT to a HTTP 1.1 server, you can upload data without\r\n        /// knowing the size before starting the transfer if you use chunked\r\n        /// encoding. You enable this by adding a header like\r\n        /// \"Transfer-Encoding: chunked\" with <c>CURLOPT_HTTPHEADER</c>. With\r\n        /// HTTP 1.0 or without chunked transfer, you must specify the size.\r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_UPLOAD\")]\r\n        CURLOPT_UPLOAD = 46,\r\n        /// <summary>\r\n        /// The actual URL to deal with. The parameter should be a <c>string</c>.\r\n        /// If the given URL lacks the protocol part (\"http://\" or \"ftp://\" etc), it\r\n        /// will attempt to guess which protocol to use based on the given host name.\r\n        /// <para>If the given protocol of the set URL is not supported, libcurl will return\r\n        /// an error <c>CURLcode.</c>(<see cref=\"CURLcode.CURLE_UNSUPPORTED_PROTOCOL\"/>)\r\n        /// when you call Easy's <see cref=\"Curl.Execute\"/>.</para>\r\n        /// <para>Use <see cref=\"Curl.Version()\"/> for detailed info\r\n        /// on which protocols that are supported.</para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_URL\")]\r\n        CURLOPT_URL = 10002,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter. It will be used to set the\r\n        /// User-Agent: header in the http request sent to the remote server.\r\n        /// This can be used to fool servers or scripts. You can also set any\r\n        /// custom header with <c>CURLOPT_HTTPHEADER</c>.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_USERAGENT\")]\r\n        CURLOPT_USERAGENT = 10018,\r\n        /// <summary>\r\n        /// Pass a <c>string</c> as parameter, which should be\r\n        /// <c>[user name]:[password]</c> to use for the connection. Use\r\n        /// <c>CURLOPT_HTTPAUTH</c> to decide authentication method. \r\n        /// <para>\r\n        /// When using HTTP and <c>CURLOPT_FOLLOWLOCATION</c>, libcurl might\r\n        /// perform several requests to possibly different hosts. libcurl will\r\n        /// only send this user and password information to hosts using the\r\n        /// initial host name (unless <c>CURLOPT_UNRESTRICTED_AUTH</c> is set),\r\n        /// so if libcurl follows locations to other hosts it will not send the\r\n        /// user and password to those. This is enforced to prevent accidental\r\n        /// information leakage. \r\n        /// </para>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_USERPWD\")]\r\n        CURLOPT_USERPWD = 10005,\r\n\r\n\r\n        /// <summary>\r\n        /// Username to be used for user to authenticate. Use\r\n        /// <c>CURLOPT_HTTPAUTH</c> to decide authentication method. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_USERNAME\")]\r\n        CURLOPT_USERNAME = 10000 + 173,\r\n\r\n\r\n        /// <summary>\r\n        /// Password to be used for user to authenticate. Use\r\n        /// <c>CURLOPT_HTTPAUTH</c> to decide authentication method. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_PASSWORD\")]\r\n        CURLOPT_PASSWORD = 10000 + 174,\r\n        /// <summary>\r\n        /// Set the parameter to <c>true</c> to get the library to display a lot\r\n        /// of verbose information about its operations. Very useful for libcurl\r\n        /// and/or protocol debugging and understanding. You hardly ever want this set in production use, you will\r\n        /// almost always want this when you debug/report problems. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_VERBOSE\")]\r\n        CURLOPT_VERBOSE = 41,\r\n\r\n        /// <summary>\r\n        /// The name of a callback function where the callback function takes two parameters. \r\n        /// The first is the cURL resource, and the second is a string with the data to be written. \r\n        /// The data must be saved by using this callback function. \r\n        /// It must return the exact number of bytes written or the transfer will be aborted with an error. \r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Pass a reference to an WriteFunction delegate.\r\n        /// The delegate gets called by libcurl as soon as there is data received\r\n        /// that needs to be saved. The size of the data referenced by <c>buf</c>\r\n        /// is <c>size</c> multiplied with <c>nmemb</c>, it will not be zero\r\n        /// terminated. Return the number of bytes actually taken care of. If\r\n        /// that amount differs from the amount passed to your function, it'll\r\n        /// signal an error to the library and it will abort the transfer and\r\n        /// return <c>CURLcode.</c><see cref=\"CURLcode.CURLE_WRITE_ERROR\"/>. \r\n        /// <note>This function may be called with zero bytes data if the\r\n        /// transfered file is empty.</note>\r\n        /// </remarks>\r\n        [ImplementsConstant(\"CURLOPT_WRITEFUNCTION\")]\r\n        CURLOPT_WRITEFUNCTION = 20011,\r\n\r\n\r\n        /// <summary>\r\n        /// Equivalent to CURLOPT_WRITEHEADER\r\n        /// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_HEADERDATA\")]        //Not used in PHP\r\n        CURLOPT_HEADERDATA = 10029,\r\n\r\n\r\n        /// <summary>\r\n        /// The file that the header part of the transfer is written to. \r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_WRITEHEADER\")]\r\n        CURLOPT_WRITEHEADER = CURLOPT_HEADERDATA,\r\n        \r\n        /// <summary>\r\n        /// Pass a <c>string</c> of the output using full variable-replacement\r\n        /// as described elsewhere.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLOPT_WRITEINFO\")]\r\n        CURLOPT_WRITEINFO = 10040,\r\n\r\n        #region Unsupported in PHP\r\n\r\n        ///// <summary>\r\n        ///// Object reference to pass to the <see cref=\"Easy.WriteFunction\"/>\r\n        ///// delegate. Note that if you specify the <c>CURLOPT_WRITEFUNCTION</c>,\r\n        ///// this is the object you'll get as input. \r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_WRITEDATA\")]\r\n        //CURLOPT_WRITEDATA = 10001,\r\n\r\n        ///// <summary>\r\n        ///// Object reference to pass to the ssl context delegate set by the option\r\n        ///// <c>CURLOPT_SSL_CTX_FUNCTION</c>, this is the pointer you'll get as the\r\n        ///// second parameter, otherwise <c>null</c>. (Added in 7.11.0) \r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SSL_CTX_DATA\")]\r\n        //CURLOPT_SSL_CTX_DATA = 10109,\r\n        ///// <summary>\r\n        ///// Reference to an <see cref=\"Easy.SSLContextFunction\"/> delegate.\r\n        ///// This delegate gets called by libcurl just before the initialization of\r\n        ///// an SSL connection after having processed all other SSL related options\r\n        ///// to give a last chance to an application to modify the behaviour of\r\n        ///// openssl's ssl initialization. The <see cref=\"SSLContext\"/> parameter\r\n        ///// wraps a pointer to an openssl SSL_CTX. If an error is returned no attempt\r\n        ///// to establish a connection is made and the perform operation will return\r\n        ///// the error code from this callback function. Set the parm argument with\r\n        ///// the <c>CURLOPT_SSL_CTX_DATA</c> option. This option was introduced\r\n        ///// in 7.11.0.\r\n        ///// <note>\r\n        ///// To use this properly, a non-trivial amount of knowledge of the openssl\r\n        ///// libraries is necessary. Using this function allows for example to use\r\n        ///// openssl callbacks to add additional validation code for certificates,\r\n        ///// and even to change the actual URI of an HTTPS request.\r\n        ///// </note>\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SSL_CTX_FUNCTION\")]\r\n        //CURLOPT_SSL_CTX_FUNCTION = 20108,\r\n\r\n        ///// <summary>\r\n        ///// Pass an initialized <see cref=\"Share\"/> reference as a parameter.\r\n        ///// Setting this option will make this <see cref=\"Easy\"/> object use the\r\n        ///// data from the Share object instead of keeping the data to itself. This\r\n        ///// enables several Easy objects to share data. If the Easy objects are used\r\n        ///// simultaneously, you MUST use the Share object's locking methods.\r\n        ///// See <see cref=\"Share.SetOpt\"/> for details.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SHARE\")]\r\n        //CURLOPT_SHARE = 10100,\r\n        ///// <summary>\r\n        ///// Not supported.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_HOST\")]\r\n        //CURLOPT_SOURCE_HOST = 10122,\r\n        ///// <summary>\r\n        ///// Not supported.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_PATH\")]\r\n        //CURLOPT_SOURCE_PATH = 10124,\r\n        ///// <summary>\r\n        ///// Not supported.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_PORT\")]\r\n        //CURLOPT_SOURCE_PORT = 125,\r\n        ///// <summary>\r\n        ///// When doing a third-party transfer, set the source post-quote list,\r\n        ///// as an <see cref=\"Slist\"/>.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_POSTQUOTE\")]\r\n        //CURLOPT_SOURCE_POSTQUOTE = 10128,\r\n        ///// <summary>\r\n        ///// When doing a third-party transfer, set the source pre-quote list,\r\n        ///// as an <see cref=\"Slist\"/>.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_PREQUOTE\")]\r\n        //CURLOPT_SOURCE_PREQUOTE = 10127,\r\n        ///// <summary>\r\n        ///// When doing a third-party transfer, set a quote list,\r\n        ///// as an <see cref=\"Slist\"/>.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_QUOTE\")]\r\n        //CURLOPT_SOURCE_QUOTE = 10133,\r\n        ///// <summary>\r\n        ///// Set the source URL for a third-party transfer.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_URL\")]\r\n        //CURLOPT_SOURCE_URL = 10132,\r\n        ///// <summary>\r\n        ///// When doing 3rd party transfer, set the source user and password, as\r\n        ///// a <c>string</c> with format <c>user:password</c>.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_SOURCE_USERPWD\")]\r\n        //CURLOPT_SOURCE_USERPWD = 10123,\r\n\r\n        ///// <summary>\r\n        ///// Pass an <see cref=\"Slist\"/> containing the FTP commands to pass to\r\n        ///// the server after the transfer type is set. Disable this operation\r\n        ///// again by setting a <c>null</c> to this option.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_PREQUOTE\")]\r\n        //CURLOPT_PREQUOTE = 10093,\r\n\r\n        ///// <summary>\r\n        ///// Provide an <see cref=\"Easy.IoctlFunction\"/> delegate reference.\r\n        ///// This delegate gets called by libcurl when an IOCTL operation,\r\n        ///// such as a rewind of a file being sent via FTP, is required on\r\n        ///// the client side.\r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_IOCTLFUNCTION\")]\r\n        //CURLOPT_IOCTLFUNCTION = 20130,\r\n\r\n        /// <summary>\r\n        /// Tells libcurl you want a multipart/formdata HTTP POST to be made and you\r\n        /// instruct what data to pass on to the server. Pass a reference to a \r\n        /// <see cref=\"CurlForm\"/> object as parameter.\r\n        /// <para>\r\n        /// Using POST with HTTP 1.1 implies the use of a \"Expect: 100-continue\"\r\n        /// header. You can disable this header with <c>CURLOPT_HTTPHEADER</c> as usual.\r\n        /// </para> \r\n        /// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_HTTPPOST\")] // This is just inner option, I don't want user to use it\r\n        CURLOPT_HTTPPOST = 10024,\r\n\r\n        ///// <summary>\r\n        ///// Pass an <c>object</c> referene to whatever you want passed to your\r\n        ///// <see cref=\"Easy.DebugFunction\"/> delegate's <c>extraData</c> argument.\r\n        ///// This reference is not used internally by libcurl, it is only passed to\r\n        ///// the delegate. \r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_DEBUGDATA\")]\r\n        //CURLOPT_DEBUGDATA = 10095,\r\n\r\n        ///// <summary>\r\n        ///// Pass a reference to an <see cref=\"Easy.DebugFunction\"/> delegate.\r\n        ///// <c>CURLOPT_VERBOSE</c> must be in effect. This delegate receives debug\r\n        ///// information, as specified with the <see cref=\"CURLINFOTYPE\"/> argument.\r\n        ///// This function must return 0. \r\n        ///// </summary>\r\n        //[ImplementsConstant(\"CURLOPT_DEBUGFUNCTION\")]\r\n        //CURLOPT_DEBUGFUNCTION = 20094,\r\n\r\n\r\n        #endregion\r\n    };\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/CurlProto.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\n    /// <summary>\r\n    /// CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options\r\n    /// </summary>\n    [Flags]\n    internal enum CurlProto\n    {\n        HTTP   = (1<<0),\n        HTTPS  = (1<<1),\n        FTP    = (1<<2),\n        FTPS   = (1<<3),\n        SCP    = (1<<4),\n        SFTP   = (1<<5),\n        TELNET = (1<<6),\n        LDAP   = (1<<7),\n        LDAPS  = (1<<8),\n        DICT   = (1<<9),\n        FILE   = (1<<10),\n        TFTP   = (1<<11),\n        IMAP   = (1<<12),\n        IMAPS  = (1<<13),\n        POP3   = (1<<14),\n        POP3S  = (1<<15),\n        SMTP   = (1<<16),\n        SMTPS  = (1<<17),\n        RTSP   = (1<<18),\n        RTMP   = (1<<19),\n        RTMPT  = (1<<20),\n        RTMPE  = (1<<21),\n        RTMPTE = (1<<22),\n        RTMPS  = (1<<23),\n        RTMPTS = (1<<24),\n        GOPHER = (1<<25),\n        ALL    = (~0) /* enable everything */\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Enums.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\r\n    /// <summary>\r\n    /// This enumeration contains values used to specify the proxy type when\r\n    /// using the <see cref=\"CurlOption.CURLOPT_PROXY\"/> option when calling\r\n    /// <see cref=\"Curl.SetOpt\"/>\r\n    /// </summary>\r\n    public enum CURLproxyType\r\n    {\r\n        /// <summary>\r\n        /// Ordinary HTTP proxy.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLPROXY_HTTP\")]\r\n        CURLPROXY_HTTP = 0,\r\n        /// <summary>\r\n        /// Use if the proxy supports SOCKS4 user authentication. If you're\r\n        /// unfamiliar with this, consult your network administrator.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLPROXY_SOCKS4\")]\r\n        CURLPROXY_SOCKS4 = 4,\r\n        /// <summary>\r\n        /// Use if the proxy supports SOCKS5 user authentication. If you're\r\n        /// unfamiliar with this, consult your network administrator.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLPROXY_SOCKS5\")]\r\n        CURLPROXY_SOCKS5 = 5\r\n    };\r\n\r\n    /// <summary>\r\n    /// This enumeration contains values used to specify the HTTP authentication\r\n    /// when using the <see cref=\"CurlOption.CURLOPT_HTTPAUTH\"/> option when\r\n    /// calling <see cref=\"Curl.SetOpt\"/>\r\n    /// </summary>\r\n    public enum CURLhttpAuth\r\n    {\r\n        /// <summary>\r\n        /// No authentication.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_NONE\")]\r\n        CURLAUTH_NONE = 0,\r\n        /// <summary>\r\n        /// HTTP Basic authentication. This is the default choice, and the\r\n        /// only method that is in wide-spread use and supported virtually\r\n        /// everywhere. This is sending the user name and password over the\r\n        /// network in plain text, easily captured by others.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_BASIC\")]\r\n        CURLAUTH_BASIC = 1,\r\n        /// <summary>\r\n        /// HTTP Digest authentication. Digest authentication is defined\r\n        /// in RFC2617 and is a more secure way to do authentication over\r\n        /// public networks than the regular old-fashioned Basic method.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_DIGEST\")]\r\n        CURLAUTH_DIGEST = 2,\r\n        /// <summary>\r\n        /// HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known\r\n        /// as plain \"Negotiate\") method was designed by Microsoft and is\r\n        /// used in their web applications. It is primarily meant as a\r\n        /// support for Kerberos5 authentication but may be also used along\r\n        /// with another authentication methods. For more information see IETF\r\n        /// draft draft-brezak-spnego-http-04.txt.\r\n        /// <note>\r\n        /// You need to use a version of libcurl.NET built with a suitable\r\n        /// GSS-API library for this to work. This is not currently standard.\r\n        /// </note>\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_GSSNEGOTIATE\")]\r\n        CURLAUTH_GSSNEGOTIATE = 4,\r\n        /// <summary>\r\n        /// HTTP NTLM authentication. A proprietary protocol invented and\r\n        /// used by Microsoft. It uses a challenge-response and hash concept\r\n        /// similar to Digest, to prevent the password from being eavesdropped.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_NTLM\")]       \r\n        CURLAUTH_NTLM = 8,\r\n        /// <summary>\r\n        /// This is a convenience macro that sets all bits and thus makes\r\n        /// libcurl pick any it finds suitable. libcurl will automatically\r\n        /// select the one it finds most secure.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_ANY\")]       \r\n        CURLAUTH_ANY = 15,   // ~0\r\n        /// <summary>\r\n        /// This is a convenience macro that sets all bits except Basic\r\n        /// and thus makes libcurl pick any it finds suitable. libcurl\r\n        /// will automatically select the one it finds most secure.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURLAUTH_ANYSAFE\")]       \r\n        CURLAUTH_ANYSAFE = 14    // ~CURLAUTH_BASIC\r\n    };\r\n\r\n    /// <summary>\r\n    /// Contains values used to specify the HTTP version level when using\r\n    /// the <see cref=\"CurlOption.CURLOPT_HTTP_VERSION\"/> option in a call\r\n    /// to <see cref=\"Curl.SetOpt\"/>\r\n    /// </summary>\r\n    public enum CurlHttpVersion\r\n    {\r\n        /// <summary>\r\n        /// We don't care about what version the library uses. libcurl will\r\n        /// use whatever it thinks fit.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURL_HTTP_VERSION_NONE\")]\r\n        CURL_HTTP_VERSION_NONE = 0,\r\n        /// <summary>\r\n        /// Enforce HTTP 1.0 requests.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURL_HTTP_VERSION_1_0\")]\r\n        CURL_HTTP_VERSION_1_0 = 1,\r\n        /// <summary>\r\n        /// Enforce HTTP 1.1 requests.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURL_HTTP_VERSION_1_1\")]\r\n        CURL_HTTP_VERSION_1_1 = 2,\r\n        /// <summary>\r\n        /// Last entry in enumeration; do not use in application code.\r\n        /// </summary>\r\n        [ImplementsConstant(\"CURL_HTTP_VERSION_LAST\")]\r\n        CURL_HTTP_VERSION_LAST = 3\r\n    };\r\n\r\n#region Unsupported options\r\n\r\n    ///// <summary>\r\n    ///// Your handler for the <see cref=\"Easy.IoctlFunction\"/> delegate\r\n    ///// should return a member of this enumeration.\r\n    ///// </summary>\r\n    //public enum CURLIOERR\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Indicate that the callback processed everything okay.\r\n    //    /// </summary>\r\n    //    CURLIOE_OK = 0,\r\n    //    /// <summary>\r\n    //    /// Unknown command sent to callback. Right now, only\r\n    //    /// <code>CURLIOCMD_RESTARTREAD</code> is supported.\r\n    //    /// </summary>\r\n    //    CURLIOE_UNKNOWNCMD = 1,\r\n    //    /// <summary>\r\n    //    /// Indicate to libcurl that a restart failed.\r\n    //    /// </summary>\r\n    //    CURLIOE_FAILRESTART = 2,\r\n    //    /// <summary>\r\n    //    /// End of enumeration marker, don't use in a client application.\r\n    //    /// </summary>\r\n    //    CURLIOE_LAST = 3\r\n    //}\r\n\r\n    ///// <summary>\r\n    ///// Your handler for the <see cref=\"Easy.IoctlFunction\"/>\r\n    ///// delegate is passed one of these values as its first parameter.\r\n    ///// Right now, the only supported value is\r\n    ///// <code>CURLIOCMD_RESTARTREAD</code>.\r\n    ///// </summary>\r\n    //public enum CURLIOCMD\r\n    //{\r\n    //    /// <summary>\r\n    //    /// No IOCTL operation; we should never see this.\r\n    //    /// </summary>\r\n    //    CURLIOCMD_NOP = 0,\r\n    //    /// <summary>\r\n    //    /// When this is sent, your callback may need to, for example,\r\n    //    /// rewind a local file that is being sent via FTP.\r\n    //    /// </summary>\r\n    //    CURLIOCMD_RESTARTREAD = 1,\r\n    //    /// <summary>\r\n    //    /// End of enumeration marker, don't use in a client application.\r\n    //    /// </summary>\r\n    //    CURLIOCMD_LAST = 2\r\n    //}\r\n\r\n    ///// <summary>\r\n    ///// A member of this enumeration is passed as the first parameter to the\r\n    ///// <see cref=\"Easy.DebugFunction\"/> delegate to which libcurl passes\r\n    ///// debug messages.\r\n    ///// </summary>\r\n    //public enum CURLINFOTYPE\r\n    //{\r\n    //    /// <summary>\r\n    //    /// The data is informational text.\r\n    //    /// </summary>\r\n    //    CURLINFO_TEXT = 0,\r\n    //    /// <summary>\r\n    //    /// The data is header (or header-like) data received from the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_HEADER_IN = 1,\r\n    //    /// <summary>\r\n    //    /// The data is header (or header-like) data sent to the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_HEADER_OUT = 2,\r\n    //    /// <summary>\r\n    //    /// The data is protocol data received from the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_DATA_IN = 3,\r\n    //    /// <summary>\r\n    //    /// The data is protocol data sent to the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_DATA_OUT = 4,\r\n    //    /// <summary>\r\n    //    /// The data is SSL-related data sent to the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_SSL_DATA_IN = 5,\r\n    //    /// <summary>\r\n    //    /// The data is SSL-related data received from the peer.\r\n    //    /// </summary>\r\n    //    CURLINFO_SSL_DATA_OUT = 6,\r\n    //    /// <summary>\r\n    //    /// End of enumeration marker, don't use in a client application.\r\n    //    /// </summary>\r\n    //    CURLINFO_END = 7\r\n    //};\r\n\r\n\r\n    ///// <summary>\r\n    ///// This enumeration contains values used to specify the FTP SSL level\r\n    ///// using the <see cref=\"CurlOption.CURLOPT_FTP_SSL\"/> option when calling\r\n    ///// <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLftpSSL\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Don't attempt to use SSL.\r\n    //    /// </summary>\r\n    //    CURLFTPSSL_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// Try using SSL, proceed as normal otherwise.\r\n    //    /// </summary>\r\n    //    CURLFTPSSL_TRY = 1,\r\n    //    /// <summary>\r\n    //    /// Require SSL for the control connection or fail with\r\n    //    /// <see cref=\"CURLcode.CURLE_FTP_SSL_FAILED\"/>. \r\n    //    /// </summary>\r\n    //    CURLFTPSSL_CONTROL = 2,\r\n    //    /// <summary>\r\n    //    /// Require SSL for all communication or fail with\r\n    //    /// <see cref=\"CURLcode.CURLE_FTP_SSL_FAILED\"/>.\r\n    //    /// </summary>\r\n    //    CURLFTPSSL_ALL = 3,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker. Do not use in a client application.\r\n    //    /// </summary>\r\n    //    CURLFTPSSL_LAST = 4\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// This enumeration contains values used to specify the FTP SSL\r\n    ///// authorization level using the\r\n    ///// <see cref=\"CurlOption.CURLOPT_FTPSSLAUTH\"/> option when calling\r\n    ///// <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLftpAuth\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Let <c>libcurl</c> decide on the authorization scheme.\r\n    //    /// </summary>\r\n    //    CURLFTPAUTH_DEFAULT = 0,\r\n    //    /// <summary>\r\n    //    /// Use \"AUTH SSL\".\r\n    //    /// </summary>\r\n    //    CURLFTPAUTH_SSL = 1,\r\n    //    /// <summary>\r\n    //    /// Use \"AUTH TLS\".\r\n    //    /// </summary>\r\n    //    CURLFTPAUTH_TLS = 2,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker. Do not use in a client application.\r\n    //    /// </summary>\r\n    //    CURLFTPAUTH_LAST = 3\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// This enumeration contains values used to specify the IP resolution\r\n    ///// method when using the <see cref=\"CurlOption.CURLOPT_IPRESOLVE\"/>\r\n    ///// option in a call to <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLipResolve\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Default, resolves addresses to all IP versions that your system\r\n    //    /// allows.\r\n    //    /// </summary>\r\n    //    CURL_IPRESOLVE_WHATEVER = 0,\r\n    //    /// <summary>\r\n    //    /// Resolve to ipv4 addresses.\r\n    //    /// </summary>\r\n    //    CURL_IPRESOLVE_V4 = 1,\r\n    //    /// <summary>\r\n    //    /// Resolve to ipv6 addresses.\r\n    //    /// </summary>\r\n    //    CURL_IPRESOLVE_V6 = 2\r\n    //};\r\n\r\n\r\n    ///// <summary>\r\n    ///// Contains values used to specify the preference of libcurl between\r\n    ///// using user names and passwords from your ~/.netrc file, relative to\r\n    ///// user names and passwords in the URL supplied with\r\n    ///// <see cref=\"CurlOption.CURLOPT_URL\"/>. This is passed when using\r\n    ///// the <see cref=\"CurlOption.CURLOPT_NETRC\"/> option in a call\r\n    ///// to <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLnetrcOption\r\n    //{\r\n    //    /// <summary>\r\n    //    /// The library will ignore the file and use only the information\r\n    //    /// in the URL. This is the default. \r\n    //    /// </summary>\r\n    //    CURL_NETRC_IGNORED = 0,\r\n    //    /// <summary>\r\n    //    /// The use of your ~/.netrc file is optional, and information in the\r\n    //    /// URL is to be preferred. The file will be scanned with the host\r\n    //    /// and user name (to find the password only) or with the host only,\r\n    //    /// to find the first user name and password after that machine,\r\n    //    /// which ever information is not specified in the URL. \r\n    //    /// <para>\r\n    //    /// Undefined values of the option will have this effect.\r\n    //    /// </para>\r\n    //    /// </summary>\r\n    //    CURL_NETRC_OPTIONAL = 1,\r\n    //    /// <summary>\r\n    //    /// This value tells the library that use of the file is required,\r\n    //    /// to ignore the information in the URL, and to search the file\r\n    //    /// with the host only.\r\n    //    /// </summary>\r\n    //    CURL_NETRC_REQUIRED = 2,\r\n    //    /// <summary>\r\n    //    /// Last entry in enumeration; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_NETRC_LAST = 3\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains values used to specify the SSL version level when using\r\n    ///// the <see cref=\"CurlOption.CURLOPT_SSLVERSION\"/> option in a call\r\n    ///// to <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLsslVersion\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Use whatever version the SSL library selects.\r\n    //    /// </summary>\r\n    //    CURL_SSLVERSION_DEFAULT = 0,\r\n    //    /// <summary>\r\n    //    /// Use TLS version 1.\r\n    //    /// </summary>\r\n    //    CURL_SSLVERSION_TLSv1 = 1,\r\n    //    /// <summary>\r\n    //    /// Use SSL version 2. This is not a good option unless it's the\r\n    //    /// only version supported by the remote server.\r\n    //    /// </summary>\r\n    //    CURL_SSLVERSION_SSLv2 = 2,\r\n    //    /// <summary>\r\n    //    /// Use SSL version 3. This is a preferred option.\r\n    //    /// </summary>\r\n    //    CURL_SSLVERSION_SSLv3 = 3,\r\n    //    /// <summary>\r\n    //    /// Last entry in enumeration; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_SSLVERSION_LAST = 4\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains values used to specify the time condition when using\r\n    ///// the <see cref=\"CurlOption.CURLOPT_TIMECONDITION\"/> option in a call\r\n    ///// to <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLtimeCond\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Use no time condition.\r\n    //    /// </summary>\r\n    //    CURL_TIMECOND_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// The time condition is true if the resource has been modified\r\n    //    /// since the date/time passed in\r\n    //    /// <see cref=\"CurlOption.CURLOPT_TIMEVALUE\"/>.\r\n    //    /// </summary>\r\n    //    CURL_TIMECOND_IFMODSINCE = 1,\r\n    //    /// <summary>\r\n    //    /// True if the resource has not been modified since the date/time\r\n    //    /// passed in <see cref=\"CurlOption.CURLOPT_TIMEVALUE\"/>.\r\n    //    /// </summary>\r\n    //    CURL_TIMECOND_IFUNMODSINCE = 2,\r\n    //    /// <summary>\r\n    //    /// True if the resource's last modification date/time equals that\r\n    //    /// passed in <see cref=\"CurlOption.CURLOPT_TIMEVALUE\"/>.\r\n    //    /// </summary>\r\n    //    CURL_TIMECOND_LASTMOD = 3,\r\n    //    /// <summary>\r\n    //    /// Last entry in enumeration; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_TIMECOND_LAST = 4\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// These are options available to build a multi-part form section\r\n    ///// in a call to <see cref=\"MultiPartForm.AddSection\"/>\r\n    ///// </summary>\r\n    //public enum CURLformoption\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Another possibility to send options to\r\n    //    /// <see cref=\"MultiPartForm.AddSection\"/> is this option, that\r\n    //    /// passes a <see cref=\"CurlForms\"/> array reference as its value.\r\n    //    /// Each <see cref=\"CurlForms\"/> array element has a\r\n    //    /// <see cref=\"CURLformoption\"/> and a <c>string</c>. All available\r\n    //    /// options can be used in an array, except the <c>CURLFORM_ARRAY</c>\r\n    //    /// option itself! The last argument in such an array must always be\r\n    //    /// <c>CURLFORM_END</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_ARRAY = 8,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>string</c>, tells libcurl that a buffer is to be\r\n    //    /// used to upload data instead of using a file.\r\n    //    /// </summary>\r\n    //    CURLFORM_BUFFER = 11,\r\n    //    /// <summary>\r\n    //    /// Followed by an <c>int</c> with the size of the\r\n    //    /// <c>CURLFORM_BUFFERPTR</c> byte array, tells libcurl the length of\r\n    //    /// the data to upload. \r\n    //    /// </summary>\r\n    //    CURLFORM_BUFFERLENGTH = 13,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>byte[]</c> array, tells libcurl the address of\r\n    //    /// the buffer containing data to upload (as indicated with\r\n    //    /// <c>CURLFORM_BUFFER</c>). You must also use\r\n    //    /// <c>CURLFORM_BUFFERLENGTH</c> to set the length of the buffer area. \r\n    //    /// </summary>\r\n    //    CURLFORM_BUFFERPTR = 12,\r\n    //    /// <summary>\r\n    //    /// Specifies extra headers for the form POST section. This takes an\r\n    //    /// <see cref=\"Slist\"/> prepared in the usual way using\r\n    //    /// <see cref=\"Slist.Append\"/> and appends the list of headers to\r\n    //    /// those libcurl automatically generates.\r\n    //    /// </summary>\r\n    //    CURLFORM_CONTENTHEADER = 15,\r\n    //    /// <summary>\r\n    //    /// Followed by an <c>int</c> setting the length of the contents. \r\n    //    /// </summary>\r\n    //    CURLFORM_CONTENTSLENGTH = 6,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>string</c> with a content-type will make cURL\r\n    //    /// use this given content-type for this file upload part, possibly\r\n    //    /// instead of an internally chosen one. \r\n    //    /// </summary>\r\n    //    CURLFORM_CONTENTTYPE = 14,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>string</c> is used for the contents of this part, the\r\n    //    /// actual data to send away. If you'd like it to contain zero bytes,\r\n    //    /// you need to set the length of the name with\r\n    //    /// <c>CURLFORM_CONTENTSLENGTH</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_COPYCONTENTS = 4,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>string</c> used to set the name of this part.\r\n    //    /// If you'd like it to contain zero bytes, you need to set the\r\n    //    /// length of the name with <c>CURLFORM_NAMELENGTH</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_COPYNAME = 1,\r\n    //    /// <summary>\r\n    //    /// This should be the last argument to a call to\r\n    //    /// <see cref=\"MultiPartForm.AddSection\"/>.\r\n    //    /// </summary>\r\n    //    CURLFORM_END = 17,\r\n    //    /// <summary>\r\n    //    /// Followed by a file name, makes this part a file upload part. It\r\n    //    /// sets the file name field to the actual file name used here,\r\n    //    /// it gets the contents of the file and passes as data and sets the\r\n    //    /// content-type if the given file match one of the new internally\r\n    //    /// known file extension. For <c>CURLFORM_FILE</c> the user may send\r\n    //    /// one or more files in one part by providing multiple <c>CURLFORM_FILE</c>\r\n    //    /// arguments each followed by the filename (and each <c>CURLFORM_FILE</c>\r\n    //    /// is allowed to have a <c>CURLFORM_CONTENTTYPE</c>). \r\n    //    /// </summary>\r\n    //    CURLFORM_FILE = 10,\r\n    //    /// <summary>\r\n    //    /// Followed by a file name, and does the file read: the contents\r\n    //    /// will be used in as data in this part. \r\n    //    /// </summary>\r\n    //    CURLFORM_FILECONTENT = 7,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>string</c> file name, will make libcurl use the\r\n    //    /// given name in the file upload part, instead of the actual file\r\n    //    /// name given to <c>CURLFORM_FILE</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_FILENAME = 16,\r\n    //    /// <summary>\r\n    //    /// Followed by an <c>int</c> setting the length of the name. \r\n    //    /// </summary>\r\n    //    CURLFORM_NAMELENGTH = 3,\r\n    //    /// <summary>\r\n    //    /// Not used.\r\n    //    /// </summary>\r\n    //    CURLFORM_NOTHING = 0,\r\n    //    /// <summary>\r\n    //    /// No longer used.\r\n    //    /// </summary>\r\n    //    CURLFORM_OBSOLETE = 9,\r\n    //    /// <summary>\r\n    //    /// No longer used.\r\n    //    /// </summary>\r\n    //    CURLFORM_OBSOLETE2 = 18,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>byte[]</c> used for the contents of this part.\r\n    //    /// If you'd like it to contain zero bytes, you need to set the\r\n    //    /// length of the name with <c>CURLFORM_CONTENTSLENGTH</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_PTRCONTENTS = 5,\r\n    //    /// <summary>\r\n    //    /// Followed by a <c>byte[]</c> used for the name of this part.\r\n    //    /// If you'd like it to contain zero bytes, you need to set the\r\n    //    /// length of the name with <c>CURLFORM_NAMELENGTH</c>. \r\n    //    /// </summary>\r\n    //    CURLFORM_PTRNAME = 2\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// One of these is returned by <see cref=\"MultiPartForm.AddSection\"/>.\r\n    ///// </summary>\r\n    //public enum CURLFORMcode\r\n    //{\r\n    //    /// <summary>\r\n    //    /// The section was added properly.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_OK = 0,\r\n    //    /// <summary>\r\n    //    /// Out-of-memory when adding the section.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_MEMORY = 1,\r\n    //    /// <summary>\r\n    //    /// Invalid attempt to add the same option more than once to a\r\n    //    /// section.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_OPTION_TWICE = 2,\r\n    //    /// <summary>\r\n    //    /// Invalid attempt to pass a <c>null</c> string or byte array in\r\n    //    /// one of the arguments.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_NULL = 3,\r\n    //    /// <summary>\r\n    //    /// Invalid attempt to pass an unrecognized option in one of the\r\n    //    /// arguments.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_UNKNOWN_OPTION = 4,\r\n    //    /// <summary>\r\n    //    /// Incomplete argument lists.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_INCOMPLETE = 5,\r\n    //    /// <summary>\r\n    //    /// Invalid attempt to provide a nested <c>CURLFORM_ARRAY</c>.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_ILLEGAL_ARRAY = 6,\r\n    //    /// <summary>\r\n    //    /// This will not be returned so long as HTTP is enabled, which\r\n    //    /// it always is in libcurl.NET.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_DISABLED = 7,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_FORMADD_LAST = 8\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains values used to specify the order in which cached connections\r\n    ///// are closed. One of these is passed as the\r\n    ///// <see cref=\"CURLoption.CURLOPT_CLOSEPOLICY\"/> option in a call\r\n    ///// to <see cref=\"Easy.SetOpt\"/>\r\n    ///// </summary>\r\n    //public enum CURLclosePolicy\r\n    //{\r\n    //    /// <summary>\r\n    //    /// No close policy. Never use this.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// Close the oldest cached connections first.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_OLDEST = 1,\r\n    //    /// <summary>\r\n    //    /// Close the least recently used connections first.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_LEAST_RECENTLY_USED = 2,\r\n    //    /// <summary>\r\n    //    /// Close the connections with the least traffic first.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_LEAST_TRAFFIC = 3,\r\n    //    /// <summary>\r\n    //    /// Close the slowest connections first.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_SLOWEST = 4,\r\n    //    /// <summary>\r\n    //    /// Currently unimplemented.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_CALLBACK = 5,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURLCLOSEPOLICY_LAST = 6\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains values used to initialize libcurl internally. One of\r\n    ///// these is passed in the call to <see cref=\"Curl.GlobalInit\"/>.\r\n    ///// </summary>\r\n    //public enum CURLinitFlag\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Initialise nothing extra. This sets no bit.\r\n    //    /// </summary>\r\n    //    CURL_GLOBAL_NOTHING = 0,\r\n    //    /// <summary>\r\n    //    /// Initialize SSL.\r\n    //    /// </summary>\r\n    //    CURL_GLOBAL_SSL = 1,\r\n    //    /// <summary>\r\n    //    /// Initialize the Win32 socket libraries.\r\n    //    /// </summary>\r\n    //    CURL_GLOBAL_WIN32 = 2,\r\n    //    /// <summary>\r\n    //    /// Initialize everything possible. This sets all known bits.\r\n    //    /// </summary>\r\n    //    CURL_GLOBAL_ALL = 3,\r\n    //    /// <summary>\r\n    //    /// Equivalent to <c>CURL_GLOBAL_ALL</c>.\r\n    //    /// </summary>\r\n    //    CURL_GLOBAL_DEFAULT = CURL_GLOBAL_ALL\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Members of this enumeration should be passed to\r\n    ///// <see cref=\"Share.SetOpt\"/> when it is called with the\r\n    ///// <c>CURLSHOPT_SHARE</c> or <c>CURLSHOPT_UNSHARE</c> options\r\n    ///// provided in the <see cref=\"CURLSHoption\"/> enumeration.\r\n    ///// </summary>\r\n    //public enum CURLlockData\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Not used.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// Used internally by libcurl.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_SHARE = 1,\r\n    //    /// <summary>\r\n    //    /// Cookie data will be shared across the <see cref=\"Easy\"/> objects\r\n    //    /// using this shared object.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_COOKIE = 2,\r\n    //    /// <summary>\r\n    //    /// Cached DNS hosts will be shared across the <see cref=\"Easy\"/>\r\n    //    /// objects using this shared object. \r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_DNS = 3,\r\n    //    /// <summary>\r\n    //    /// Not supported yet.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_SSL_SESSION = 4,\r\n    //    /// <summary>\r\n    //    /// Not supported yet.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_CONNECT = 5,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_DATA_LAST = 6\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Values containing the type of shared access requested when libcurl\r\n    ///// calls the <see cref=\"Share.LockFunction\"/> delegate.\r\n    ///// </summary>\r\n    //public enum CURLlockAccess\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Unspecified action; the delegate should never receive this.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_ACCESS_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// The delegate receives this call when libcurl is requesting\r\n    //    /// read access to the shared resource.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_ACCESS_SHARED = 1,\r\n    //    /// <summary>\r\n    //    /// The delegate receives this call when libcurl is requesting\r\n    //    /// write access to the shared resource.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_ACCESS_SINGLE = 2,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURL_LOCK_ACCESS_LAST = 3\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains return codes from many of the functions in the\r\n    ///// <see cref=\"Share\"/> class.\r\n    ///// </summary>\r\n    //public enum CURLSHcode\r\n    //{\r\n    //    /// <summary>\r\n    //    /// The function succeeded.\r\n    //    /// </summary>\r\n    //    CURLSHE_OK = 0,\r\n    //    /// <summary>\r\n    //    /// A bad option was passed to <see cref=\"Share.SetOpt\"/>.\r\n    //    /// </summary>\r\n    //    CURLSHE_BAD_OPTION = 1,\r\n    //    /// <summary>\r\n    //    /// An attempt was made to pass an option to\r\n    //    /// <see cref=\"Share.SetOpt\"/> while the Share object is in use.\r\n    //    /// </summary>\r\n    //    CURLSHE_IN_USE = 2,\r\n    //    /// <summary>\r\n    //    /// The <see cref=\"Share\"/> object's internal handle is invalid.\r\n    //    /// </summary>\r\n    //    CURLSHE_INVALID = 3,\r\n    //    /// <summary>\r\n    //    /// Out of memory. This is a severe problem.\r\n    //    /// </summary>\r\n    //    CURLSHE_NOMEM = 4,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURLSHE_LAST = 5\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// A member of this enumeration is passed to the function\r\n    ///// <see cref=\"Share.SetOpt\"/> to configure a <see cref=\"Share\"/>\r\n    ///// transfer. \r\n    ///// </summary>\r\n    //public enum CURLSHoption\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Start-of-enumeration; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURLSHOPT_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// The parameter, which should be a member of the\r\n    //    /// <see cref=\"CURLlockData\"/> enumeration, specifies a type of\r\n    //    /// data that should be shared.\r\n    //    /// </summary>\r\n    //    CURLSHOPT_SHARE = 1,\r\n    //    /// <summary>\r\n    //    /// The parameter, which should be a member of the\r\n    //    /// <see cref=\"CURLlockData\"/> enumeration, specifies a type of\r\n    //    /// data that should be unshared.\r\n    //    /// </summary>\r\n    //    CURLSHOPT_UNSHARE = 2,\r\n    //    /// <summary>\r\n    //    /// The parameter should be a reference to a\r\n    //    /// <see cref=\"Share.LockFunction\"/> delegate. \r\n    //    /// </summary>\r\n    //    CURLSHOPT_LOCKFUNC = 3,\r\n    //    /// <summary>\r\n    //    /// The parameter should be a reference to a\r\n    //    /// <see cref=\"Share.UnlockFunction\"/> delegate. \r\n    //    /// </summary>\r\n    //    CURLSHOPT_UNLOCKFUNC = 4,\r\n    //    /// <summary>\r\n    //    /// The parameter allows you to specify an object reference that\r\n    //    /// will passed to the <see cref=\"Share.LockFunction\"/> delegate and\r\n    //    /// the <see cref=\"Share.UnlockFunction\"/> delegate. \r\n    //    /// </summary>\r\n    //    CURLSHOPT_USERDATA = 5,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURLSHOPT_LAST = 6\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// A member of this enumeration is passed to the function\r\n    ///// <see cref=\"Curl.GetVersionInfo\"/> \r\n    ///// </summary>\r\n    //public enum CURLversion\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Capabilities associated with the initial version of libcurl.\r\n    //    /// </summary>\r\n    //    CURLVERSION_FIRST = 0,\r\n    //    /// <summary>\r\n    //    /// Capabilities associated with the second version of libcurl.\r\n    //    /// </summary>\r\n    //    CURLVERSION_SECOND = 1,\r\n    //    /// <summary>\r\n    //    /// Capabilities associated with the third version of libcurl.\r\n    //    /// </summary>\r\n    //    CURLVERSION_THIRD = 2,\r\n    //    /// <summary>\r\n    //    /// Same as <c>CURLVERSION_THIRD</c>.\r\n    //    /// </summary>\r\n    //    CURLVERSION_NOW = CURLVERSION_THIRD,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker; do not use in application code.\r\n    //    /// </summary>\r\n    //    CURLVERSION_LAST = 3\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// A bitmask of libcurl features\r\n    ///// </summary>\r\n    //public enum CURLversionFeatureBitmask\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Supports IPv6.\r\n    //    /// </summary>\r\n    //    CURL_VERSION_IPV6 = 0x01,\r\n    //    /// <summary>\r\n    //    /// Supports kerberos4 (when using FTP).\r\n    //    /// </summary>\r\n    //    CURL_VERSION_KERBEROS4 = 0x02,\r\n    //    /// <summary>\r\n    //    /// Supports SSL (HTTPS/FTPS).\r\n    //    /// </summary>\r\n    //    CURL_VERSION_SSL = 0x04,\r\n    //    /// <summary>\r\n    //    /// Supports HTTP deflate using libz.\r\n    //    /// </summary>\r\n    //    CURL_VERSION_LIBZ = 0x08,\r\n    //    /// <summary>\r\n    //    /// Supports HTTP NTLM (added in 7.10.6).\r\n    //    /// </summary>\r\n    //    CURL_VERSION_NTLM = 0x10,\r\n    //    /// <summary>\r\n    //    /// Supports HTTP GSS-Negotiate (added in 7.10.6).\r\n    //    /// </summary>\r\n    //    CURL_VERSION_GSSNEGOTIATE = 0x20,\r\n    //    /// <summary>\r\n    //    /// libcurl was built with extra debug capabilities built-in. This\r\n    //    /// is mainly of interest for libcurl hackers. (added in 7.10.6) \r\n    //    /// </summary>\r\n    //    CURL_VERSION_DEBUG = 0x40,\r\n    //    /// <summary>\r\n    //    /// libcurl was built with support for asynchronous name lookups,\r\n    //    /// which allows more exact timeouts (even on Windows) and less\r\n    //    /// blocking when using the multi interface. (added in 7.10.7) \r\n    //    /// </summary>\r\n    //    CURL_VERSION_ASYNCHDNS = 0x80,\r\n    //    /// <summary>\r\n    //    /// libcurl was built with support for SPNEGO authentication\r\n    //    /// (Simple and Protected GSS-API Negotiation Mechanism, defined\r\n    //    /// in RFC 2478.) (added in 7.10.8) \r\n    //    /// </summary>\r\n    //    CURL_VERSION_SPNEGO = 0x100,\r\n    //    /// <summary>\r\n    //    /// libcurl was built with support for large files.\r\n    //    /// </summary>\r\n    //    CURL_VERSION_LARGEFILE = 0x200,\r\n    //    /// <summary>\r\n    //    /// libcurl was built with support for IDNA, domain names with\r\n    //    /// international letters. \r\n    //    /// </summary>\r\n    //    CURL_VERSION_IDN = 0x400\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// The status code associated with an <see cref=\"Easy\"/> object in a\r\n    ///// <see cref=\"Multi\"/> operation. One of these is returned in response\r\n    ///// to reading the <see cref=\"MultiInfo.Msg\"/> property.\r\n    ///// </summary>\r\n    //public enum CURLMSG\r\n    //{\r\n    //    /// <summary>\r\n    //    /// First entry in the enumeration, not used.\r\n    //    /// </summary>\r\n    //    CURLMSG_NONE = 0,\r\n    //    /// <summary>\r\n    //    /// The associated <see cref=\"Easy\"/> object completed.\r\n    //    /// </summary>\r\n    //    CURLMSG_DONE = 1,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker, not used.\r\n    //    /// </summary>\r\n    //    CURLMSG_LAST = 2\r\n    //};\r\n\r\n    ///// <summary>\r\n    ///// Contains return codes for many of the functions in the\r\n    ///// <see cref=\"Multi\"/> class.\r\n    ///// </summary>\r\n    //public enum CURLMcode\r\n    //{\r\n    //    /// <summary>\r\n    //    /// You should call <see cref=\"Multi.Perform\"/> again before calling\r\n    //    /// <see cref=\"Multi.Select\"/>.\r\n    //    /// </summary>\r\n    //    CURLM_CALL_MULTI_PERFORM = -1,\r\n    //    /// <summary>\r\n    //    /// The function succeded.\r\n    //    /// </summary>\r\n    //    CURLM_OK = 0,\r\n    //    /// <summary>\r\n    //    /// The internal <see cref=\"Multi\"/> is bad.\r\n    //    /// </summary>\r\n    //    CURLM_BAD_HANDLE = 1,\r\n    //    /// <summary>\r\n    //    /// One of the <see cref=\"Easy\"/> handles associated with the\r\n    //    /// <see cref=\"Multi\"/> object is bad.\r\n    //    /// </summary>\r\n    //    CURLM_BAD_EASY_HANDLE = 2,\r\n    //    /// <summary>\r\n    //    /// Out of memory. This is a severe problem.\r\n    //    /// </summary>\r\n    //    CURLM_OUT_OF_MEMORY = 3,\r\n    //    /// <summary>\r\n    //    /// Internal error deep within the libcurl library.\r\n    //    /// </summary>\r\n    //    CURLM_INTERNAL_ERROR = 4,\r\n    //    /// <summary>\r\n    //    /// End-of-enumeration marker, not used.\r\n    //    /// </summary>\r\n    //    CURLM_LAST = 5\r\n    //};\r\n\r\n#endregion\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Extension.Curl.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{BF2CCCE1-AD1F-4765-A556-35E454C7C861}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Curl</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.Curl</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <SignAssembly>true</SignAssembly>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"Cookies.cs\" />\r\n    <Compile Include=\"CurlForm.cs\" />\r\n    <Compile Include=\"CurlHandler.cs\" />\r\n    <Compile Include=\"CurlHttp.cs\" />\r\n    <Compile Include=\"CurlHttpPost.cs\" />\r\n    <Compile Include=\"CurlOption.Utils.cs\" />\r\n    <Compile Include=\"Curl.cs\" />\r\n    <Compile Include=\"CURLcode.cs\" />\r\n    <Compile Include=\"CurlInfo.cs\" />\r\n    <Compile Include=\"CurlOption.cs\" />\r\n    <Compile Include=\"CurlProto.cs\" />\r\n    <Compile Include=\"Enums.cs\" />\r\n    <Compile Include=\"HttpBitsDownloader.cs\" />\r\n    <Compile Include=\"HttpBitsUploader.cs\" />\r\n    <Compile Include=\"HttpFormDataUploader.cs\" />\r\n    <Compile Include=\"HttpUploadBitsState.cs\" />\r\n    <Compile Include=\"HttpUtils.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"PhpCurlMultiResource.cs\" />\r\n    <Compile Include=\"PhpCurlResource.cs\" />\r\n    <Compile Include=\"Port.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"ScatterGatherBuffers.cs\" />\r\n    <Compile Include=\"Streams.cs\" />\r\n    <Compile Include=\"UserDefined.cs\" />\r\n    <Compile Include=\"Utils.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"Extension.Curl.nuspec\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Extension.Curl.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger Extension CURL</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Curl/HttpBitsDownloader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal class HttpBitsDownloader\r\n    {\r\n        private HttpWebResponse response;\r\n        private long Length;\r\n        private long ContentLength;\r\n        private Stream ReadStream;\r\n        private byte[] InnerBuffer;\r\n        private Stream WriteStream;\r\n\r\n        private ScatterGatherBuffers SgBuffers;\r\n\r\n        public HttpBitsDownloader(HttpWebResponse/*!*/ response)\r\n        {\r\n            Debug.Assert(response != null);\r\n\r\n            this.response = response;\r\n        }\r\n\r\n        /// <summary>\r\n        /// This is fast method for reading whole stream of binary data\r\n        /// </summary>\r\n        /// <param name=\"reserveToAllocate\"></param>\r\n        /// <param name=\"terminatedCorrectly\"></param>\r\n        /// <returns></returns>\r\n        /// <remarks>This method closes reponse stream.</remarks>\r\n        public byte[] ReadToEnd(int reserveToAllocate, out bool terminatedCorrectly)\r\n        {\r\n            terminatedCorrectly = true;\r\n            try\r\n            {\r\n                int bytesRetrieved = SetResponse();\r\n\r\n                while (RetrieveBytes(ref bytesRetrieved)) { }\r\n\r\n                return SgBuffers.ToArray(reserveToAllocate);\r\n            }\r\n            catch(IOException)\r\n            {\r\n                terminatedCorrectly = false;\r\n\r\n                if (SgBuffers != null)\r\n                    return SgBuffers.ToArray(reserveToAllocate);\r\n                else\r\n                    return null;\r\n            }\r\n            finally\r\n            {\r\n                Close();\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// This is fast method for reading whole stream of binary data\r\n        /// </summary>\r\n        /// <param name=\"stream\"></param>\r\n        /// <param name=\"terminatedCorrectly\"></param>\r\n        /// <remarks>This method closes reponse stream.</remarks>\r\n        public void ReadToStream(Stream stream, out bool terminatedCorrectly)\r\n        {\r\n            terminatedCorrectly = true;\r\n            WriteStream = stream;\r\n\r\n            try\r\n            {\r\n                int bytesRetrieved = SetResponse();\r\n\r\n                while (RetrieveBytes(ref bytesRetrieved)) { }\r\n\r\n                return ;\r\n            }\r\n            catch (IOException)\r\n            {\r\n                terminatedCorrectly = false;\r\n            }\r\n            finally\r\n            {\r\n                Close();\r\n            }\r\n\r\n        }\r\n\r\n        private void Close()\r\n        {\r\n            this.InnerBuffer = null;\r\n\r\n            if (this.ReadStream != null)\r\n            {\r\n                this.ReadStream.Close();\r\n                //response.close() isn't necessary because we closed stream from response.GetResponseStream\r\n            }\r\n\r\n            //Don't close WriteStream, that is up to user\r\n        }\r\n\r\n        private int SetResponse()\r\n        {\r\n            ContentLength = response.ContentLength;\r\n            if ((ContentLength == -1L) || (ContentLength > 0x10000L))\r\n            {\r\n                Length = 0x10000L;\r\n            }\r\n            else\r\n            {\r\n                Length = ContentLength;\r\n            }\r\n\r\n            if (WriteStream == null)\r\n            {\r\n                if (ContentLength > 0x7fffffffL)\r\n                {\r\n                    throw new WebException(\"MessageLengthLimitExceeded\", WebExceptionStatus.MessageLengthLimitExceeded);\r\n                }\r\n\r\n                SgBuffers = new ScatterGatherBuffers(this.Length);\r\n            }\r\n\r\n            InnerBuffer = new byte[Length];\r\n            ReadStream = response.GetResponseStream();\r\n\r\n            if ((ReadStream != null) && (ReadStream != Stream.Null))\r\n            {\r\n                return ReadStream.Read(InnerBuffer, 0, (int)Length);\r\n            }\r\n            return 0;\r\n        }\r\n\r\n\r\n        private bool RetrieveBytes(ref int bytesRetrieved)\r\n        {\r\n            if (bytesRetrieved > 0)\r\n            {\r\n                if (WriteStream != null)\r\n\t\t\t        WriteStream.Write(this.InnerBuffer, 0, bytesRetrieved);\r\n\t\t        else\r\n                    SgBuffers.Write(InnerBuffer, 0, bytesRetrieved);\r\n\r\n                bytesRetrieved = ReadStream.Read(InnerBuffer, 0, (int)Length);\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/HttpBitsUploader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Globalization;\r\nusing System.Net;\r\nusing System.Threading;\r\nusing System.Security;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal partial class HttpBitsUploader\r\n    {\r\n\r\n        private HttpWebRequest request;\r\n\r\n        public HttpWebRequest Request\r\n        {\r\n            get { return request; }\r\n        }\r\n\r\n\r\n        public HttpBitsUploader(HttpWebRequest/*!*/ request)\r\n        {\r\n            Debug.Assert(request != null);\r\n\r\n            this.request = request;\r\n        }\r\n\r\n        public void UploadData(object data)\r\n        {\r\n            PhpBytes bytes = PhpVariable.AsBytes(data);\r\n\r\n            UploadData(bytes.ReadonlyData);\r\n        }\r\n\r\n        public void UploadData(byte[] data)\r\n        {\r\n            try\r\n            {\r\n                //this.m_Method = method;//this sets someone else\r\n                request.ContentLength = data.Length;//this is my responsability to set\r\n\r\n                this.UploadBits( request.GetRequestStream(), null,data, null, null);\r\n                \r\n                //buffer2 = this.DownloadBits(request, null, null, null);\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException))\r\n                {\r\n                    throw;\r\n                }\r\n                if (!(exception is WebException) && !(exception is SecurityException))\r\n                {\r\n                    exception = new WebException(\"Curl\", exception);\r\n                }\r\n                AbortRequest();\r\n                throw exception;\r\n            }\r\n        }\r\n\r\n\r\n        public void UploadFile(FileStream fs)\r\n        {\r\n            try\r\n            {\r\n                byte[] formHeaderBytes = null;\r\n                byte[] boundaryBytes = null;\r\n                byte[] buffer = null;\r\n\r\n                //Uri isn't a file\r\n                bool needsHeaderAndBoundary = request.RequestUri.Scheme != Uri.UriSchemeFile;\r\n                \r\n                OpenFileInternal(needsHeaderAndBoundary, fs, ref formHeaderBytes, ref boundaryBytes, ref buffer);\r\n\r\n                this.UploadBits( request.GetRequestStream(), fs, buffer, formHeaderBytes, boundaryBytes);\r\n                //byte[] retObject = this.DownloadBits(request, null, null, null);\r\n\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                if (fs != null)\r\n                {\r\n                    fs.Close();\r\n                    fs = null;\r\n                }\r\n                if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException))\r\n                {\r\n                    throw;\r\n                }\r\n                if (!(exception is WebException) && !(exception is SecurityException))\r\n                {\r\n                    exception = new WebException(\"Curl\", exception);\r\n                }\r\n                AbortRequest();\r\n                throw exception;\r\n            }\r\n\r\n        }\r\n\r\n\r\n        protected void AbortRequest()\r\n        {\r\n            try\r\n            {\r\n                if (request != null)\r\n                {\r\n                    request.Abort();\r\n                }\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                if (((exception is OutOfMemoryException) || (exception is StackOverflowException)) || (exception is ThreadAbortException))\r\n                {\r\n                    throw;\r\n                }\r\n            }\r\n        }\r\n\r\n       \r\n        protected void UploadBits(Stream writeStream, Stream readStream, byte[] data, byte[] header, byte[] footer, bool DoNotCloseWriteStream = false)\r\n        {\r\n            if (request.RequestUri.Scheme == Uri.UriSchemeFile)\r\n            {\r\n                header = (byte[])(footer = null);\r\n            }\r\n            HttpUploadBitsState state = new HttpUploadBitsState(readStream, data, header, footer, DoNotCloseWriteStream);\r\n\r\n            state.SetRequestStream(writeStream);\r\n            while (!state.WriteBytes())\r\n            {\r\n            }\r\n            state.Close();\r\n        }\r\n\r\n\r\n\r\n        private void OpenFileInternal(bool needsHeaderAndBoundary, FileStream fs, ref byte[] formHeaderBytes, ref byte[] boundaryBytes, ref byte[] buffer)\r\n        {\r\n            //fileName = Path.GetFullPath(fileName);\r\n\r\n            string str = request.ContentType;\r\n            if (str != null)\r\n            {\r\n                if (str.ToLower(CultureInfo.InvariantCulture).StartsWith(\"multipart/\"))\r\n                {\r\n                    throw new WebException(\"Curl multipart\");//TODO: not sure about this\r\n                }\r\n            }\r\n            else\r\n            {\r\n                str = \"application/octet-stream\";\r\n            }\r\n\r\n            //fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);\r\n            int num = 0x2000;\r\n            //ContentLength = -1L;\r\n            if (request.Method.ToUpper(CultureInfo.InvariantCulture) == \"POST\")\r\n            {\r\n                if (needsHeaderAndBoundary)\r\n                {\r\n                    string str2 = \"---------------------\" + DateTime.Now.Ticks.ToString(\"x\", NumberFormatInfo.InvariantInfo);\r\n                    request.ContentType = \"multipart/form-data; boundary=\" + str2;\r\n                    string s = \"--\" + str2 + \"\\r\\nContent-Disposition: form-data; name=\\\"file\\\"; filename=\\\"\" + Path.GetFileName(fs.Name) + \"\\\"\\r\\nContent-Type: \" + str + \"\\r\\n\\r\\n\";\r\n                    formHeaderBytes = Encoding.UTF8.GetBytes(s);\r\n                    boundaryBytes = Encoding.ASCII.GetBytes(\"\\r\\n--\" + str2 + \"--\\r\\n\");\r\n                }\r\n                else\r\n                {\r\n                    formHeaderBytes = new byte[0];\r\n                    boundaryBytes = new byte[0];\r\n                }\r\n                if (fs.CanSeek)\r\n                {\r\n                    request.ContentLength = (fs.Length + formHeaderBytes.Length) + boundaryBytes.Length;\r\n                    num = (int)Math.Min(0x2000L, fs.Length);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                request.ContentType = str;\r\n                formHeaderBytes = null;\r\n                boundaryBytes = null;\r\n                if (fs.CanSeek)\r\n                {\r\n                    request.ContentLength = fs.Length;\r\n                    num = (int)Math.Min(0x2000L, fs.Length);\r\n                }\r\n            }\r\n\r\n            buffer = new byte[num];\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/HttpFormDataUploader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Net;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Security;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal class HttpFormDataUploader : HttpBitsUploader\r\n    {\r\n\r\n        //enum FormType\r\n        //{\r\n        //    FORM_DATA,    /* form metadata (convert to network encoding if necessary) */\r\n        //    FORM_CONTENT, /* form content  (never convert) */\r\n        //    FORM_CALLBACK, /* 'line' points to the custom pointer we pass to the callback\n        //          */\r\n        //    FORM_FILE     /* 'line' points to a file name we should read from\n        //           to create the form data (never convert) */\r\n        //};\n\r\n\r\n        class DataSegment\r\n        {\r\n            //public FormType Type;\r\n            public byte[] Header;\r\n            public byte[] Data;\r\n            public byte[] Footer;\r\n            public Stream ReadStream; \r\n        }\r\n\r\n        private DataSegment currentData = new DataSegment();\r\n        private string boundary;\r\n\r\n        private LinkedList<DataSegment> data = new LinkedList<DataSegment>();\r\n\r\n        private StringBuilder sb = new StringBuilder();\r\n        private static readonly string table16 = \"0123456789abcdef\";\r\n        private const int BOUNDARY_LENGTH = 40;\r\n\r\n\r\n        public long ContentLength\r\n        {\r\n            get\r\n            {\r\n                long res = 0;\r\n\r\n                foreach (var dataItem in data)\r\n                {\r\n                    res += dataItem.Header != null ? dataItem.Header.Length : 0;\r\n                    res += dataItem.Data != null ? dataItem.Data.Length : 0;\r\n                    res += dataItem.Footer != null ? dataItem.Footer.Length : 0;\r\n\r\n                    if (dataItem.ReadStream != null && dataItem.ReadStream.CanSeek)\r\n                        res += dataItem.ReadStream.Length;\r\n\r\n                }\r\n                return res;\r\n            }\r\n        }\r\n        \r\n\r\n        public HttpFormDataUploader(HttpWebRequest request) : base(request){ }\r\n\r\n        /// <summary>\r\n        /// Curl_FormBoundary() creates a suitable boundary string \r\n        /// </summary>\r\n        /// <returns></returns>\r\n        private string Curl_FormBoundary()\r\n        {\r\n            StringBuilder retstring = new StringBuilder(BOUNDARY_LENGTH + 1);\r\n\r\n            retstring.Append(\"----------------------------\");\r\n            var r = new Random();\r\n\r\n            for (int i = retstring.Length; i < BOUNDARY_LENGTH; i++)\r\n                retstring.Append( table16[r.Next() % 16] );\r\n\r\n            /* 28 dashes and 12 hexadecimal digits makes 12^16 (184884258895036416)\n               combinations */\r\n\r\n            return retstring.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds String.Format-style formatted data to the data chain.\n        /// </summary>\r\n        /// <param name=\"str\"></param>\r\n        /// <param name=\"args\"></param>\r\n        private void AddFormDataf(string str, params string[] args)\r\n        {\r\n            sb.AppendFormat(str, args);\r\n        }\r\n\r\n\r\n        private void AddFormFile(string fileName)\r\n        {\r\n            //currentData.Type = FormType.FORM_FILE;\r\n            var filePath = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, fileName);\r\n            \r\n            //open a file\r\n            currentData.ReadStream = File.Open(filePath, FileMode.Open);\r\n\r\n            NextDataIsFooter();\r\n        }\r\n\r\n\r\n        private void AddFormData(object data)\r\n        {\r\n            //currentData.Type = FormType.FORM_CONTENT;\r\n\r\n            PhpBytes bytes = PhpVariable.AsBytes(data);\r\n            currentData.Data = bytes.ReadonlyData;\r\n\r\n            NextDataIsFooter();\r\n        }\r\n\r\n        /// <summary>\r\n        /// All calls to AddFormDataf is footer after calling this method. \r\n        /// </summary>\r\n        /// <remarks>\r\n        /// After call to method Done all calls to AddFormDataf are forming Header\r\n        /// </remarks>\r\n        private void NextDataIsFooter()\r\n        {\r\n            //Before this all AddFormData was header\r\n            if (sb.Length > 0)\r\n            {\r\n                currentData.Header = Encoding.ASCII.GetBytes(sb.ToString());\r\n                sb.Clear();\r\n            }\r\n        }\r\n\r\n        private void Done()\r\n        {\r\n            // this was footer\r\n            if (sb.Length > 0)\r\n            {\r\n                currentData.Footer = Encoding.ASCII.GetBytes(sb.ToString());\r\n                sb.Clear();\r\n            }\r\n\r\n            data.AddLast(currentData);\r\n            currentData = new DataSegment();\r\n        }\r\n\r\n\r\n\r\n        private long MaxFileSize()\r\n        {\r\n            long max = 0;\r\n\r\n            foreach (var dataItem in data)\r\n            {\r\n                if (dataItem.ReadStream != null && dataItem.ReadStream.CanSeek)\r\n                {\r\n                    max = Math.Max(max, dataItem.ReadStream.Length);\r\n                }\r\n            }\r\n\r\n            return max;\r\n        }\r\n\r\n        private byte[] CreateFileReadBuffer()\r\n        {\r\n            long bufferSize;\r\n            long maxFileSize = MaxFileSize();\r\n\r\n            if (maxFileSize == 0)\r\n                return null;\r\n\r\n            bufferSize = Math.Min(0x2000, maxFileSize);\r\n            return new byte[bufferSize];\r\n        }\r\n\r\n        private void Upload()\r\n        {\r\n            byte[] fileBuffer = null;\r\n            bool lastItem;\r\n\r\n            Request.ContentType = \"multipart/form-data; boundary=\" + boundary;\r\n            Request.ContentLength = ContentLength;\r\n\r\n            try\r\n            {\r\n                var writeStream = Request.GetRequestStream();\r\n                foreach (var dataItem in data)\r\n                {\r\n                    lastItem = dataItem == data.Last.Value;\r\n\r\n                    if (dataItem.ReadStream != null)\r\n                    {\r\n                        if (fileBuffer == null)\r\n                            fileBuffer = CreateFileReadBuffer();\r\n\r\n                        //Send file\r\n                        UploadBits(writeStream, dataItem.ReadStream, fileBuffer, dataItem.Header, dataItem.Footer, !lastItem);\r\n\r\n                        //ReadStream was closed, just set it to null\r\n                        dataItem.ReadStream = null;\r\n                    }\r\n                    else\r\n                    {\r\n                        //Send data\r\n                        UploadBits(writeStream, null, dataItem.Data, dataItem.Header, dataItem.Footer, !lastItem);\r\n                    }\r\n                }\r\n\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                //Close all possibly opened files\r\n                foreach (var dataItem in data)\r\n                {\r\n                    if (dataItem.ReadStream != null)\r\n                    {\r\n                        dataItem.ReadStream.Close();\r\n                        dataItem.ReadStream = null;\r\n                    }\r\n                }\r\n\r\n                if (((exception is ThreadAbortException) || (exception is StackOverflowException)) || (exception is OutOfMemoryException))\r\n                {\r\n                    throw;\r\n                }\r\n                if (!(exception is WebException) && !(exception is SecurityException))\r\n                {\r\n                    exception = new WebException(\"Curl\", exception);\r\n                }\r\n                AbortRequest();\r\n                throw exception;\r\n            }\r\n            \r\n\r\n            Close();\r\n        }\r\n\r\n        private void Close()\r\n        {\r\n            data.Clear();\r\n        }\r\n\r\n        public void UploadForm(CurlForm form)\r\n        {\r\n            //Count this\r\n            //request.ContentLength = data.Length;//this is my responsability to set\r\n\r\n            boundary = Curl_FormBoundary();\r\n            CurlForm.FormFileItem fileItem = null;\r\n\r\n            /* Make the first line of the output */\r\n            // Assignment to Request.ContentType takes care about it\r\n            //AddFormDataStr(\"{0}; boundary={1}\\r\\n\",\r\n            //    /*custom_content_type != null ? custom_content_type :*/ \"Content-Type: multipart/form-data\",\r\n            //             boundary);\r\n\r\n            /* we DO NOT include that line in the total size of the POST, since it'll be\n               part of the header! */\r\n\r\n            foreach (var item in form.Data)\r\n            {\r\n                AddFormDataf(\"\\r\\n\");\r\n\r\n                /* boundary */\r\n                AddFormDataf(\"--{0}\\r\\n\", boundary);\r\n\r\n                /* Maybe later this should be disabled when a custom_content_type is\n                   passed, since Content-Disposition is not meaningful for all multipart\n                   types.\n                */\r\n                AddFormDataf(\"Content-Disposition: form-data; name=\\\"\");\r\n\r\n                AddFormDataf(item.Name);\r\n\r\n                AddFormDataf(\"\\\"\");\r\n\r\n                //TODO: we just support one file send\r\n\r\n                if (item.GetType() == typeof(CurlForm.FormFileItem))\r\n                {\r\n                    fileItem = (CurlForm.FormFileItem)item;\r\n\r\n                    //Path.GetFileName(fs.Name)\r\n\r\n                    AddFormDataf(\" ;filename=\\\"{0}\\\"\",\r\n                                fileItem.FileName);\r\n\r\n                    if (fileItem.ContentType != null)\r\n                    {\r\n                        /* we have a specified type */\r\n                        AddFormDataf(\"\\r\\nContent-Type: {0}\",\r\n                                    fileItem.ContentType);\r\n                    }\r\n                    \r\n                }\r\n\r\n                AddFormDataf(\"\\r\\n\\r\\n\");\r\n\r\n                if (fileItem != null)\r\n                {\r\n                    //AddFile\r\n                    AddFormFile(fileItem.FileName);\r\n                }\r\n                else\r\n                {\r\n                    AddFormData(item.Data);\r\n                }\r\n\r\n                if (item == form.Data.Last.Value) // Last item\r\n                {\r\n                    /* end-boundary for everything */\r\n                    AddFormDataf(\"\\r\\n--{0}--\\r\\n\", boundary);\r\n                }\r\n\r\n                Done();\r\n                \r\n            }\r\n\r\n            Upload();\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/HttpUploadBitsState.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n     internal partial class HttpBitsUploader\r\n    {\r\n\r\n         class HttpUploadBitsState\r\n         {\r\n             private Stream WriteStream;\r\n             private byte[] Header;\r\n             private byte[] InnerBuffer;\r\n             private Stream ReadStream;\r\n             private byte[] Footer;\r\n             private bool DoNotCloseWriteStream;\r\n\r\n             public bool FileUpload\r\n             {\r\n                 get\r\n                 {\r\n                     return (this.ReadStream != null);\r\n                 }\r\n             }\r\n\r\n\r\n             public HttpUploadBitsState(Stream readStream, byte[] data, byte[] Header, byte[] Footer, bool DoNotCloseWriteStream)\r\n             {\r\n                 this.ReadStream = readStream;\r\n                 this.InnerBuffer = data;\r\n                 this.Header = Header;\r\n                 this.Footer = Footer;\r\n                 this.DoNotCloseWriteStream = DoNotCloseWriteStream;\r\n             }\r\n\r\n\r\n             public void SetRequestStream(Stream WriteStream)\r\n             {\r\n                 this.WriteStream = WriteStream;\r\n\r\n                 byte[] header = null;\r\n                 if (this.Header != null)\r\n                 {\r\n                     header = this.Header;\r\n                     this.Header = null;\r\n                 }\r\n                 else\r\n                 {\r\n                     header = new byte[0];\r\n                 }\r\n                 this.WriteStream.Write(header, 0, header.Length);\r\n             }\r\n\r\n\r\n             public bool WriteBytes()\r\n             {\r\n                 byte[] footer = null;\r\n                 int count = 0;\r\n\r\n                 if (this.FileUpload)\r\n                 {\r\n                     int num3 = 0;\r\n                     if (this.InnerBuffer != null)\r\n                     {\r\n                         num3 = this.ReadStream.Read(this.InnerBuffer, 0, this.InnerBuffer.Length);\r\n                         if (num3 <= 0)\r\n                         {\r\n                             this.ReadStream.Close();\r\n                             this.InnerBuffer = null;\r\n                         }\r\n                     }\r\n                     if (this.InnerBuffer == null)\r\n                     {\r\n                         if (this.Footer == null)\r\n                         {\r\n                             return true;\r\n                         }\r\n                         count = this.Footer.Length;\r\n                         footer = this.Footer;\r\n                         this.Footer = null;\r\n                     }\r\n                     else\r\n                     {\r\n                         count = num3;\r\n                         footer = this.InnerBuffer;\r\n                     }\r\n                 }\r\n                 else\r\n                 {\r\n                     if (this.InnerBuffer == null)\r\n                     {\r\n                         if (this.Footer == null)\r\n                         {\r\n                             return true;\r\n                         }\r\n                         count = this.Footer.Length;\r\n                         footer = this.Footer;\r\n                         this.Footer = null;\r\n                     }\r\n                     else\r\n                     {\r\n                         footer = this.InnerBuffer;\r\n                         //if (this.ChunkSize != 0)\r\n                         //{\r\n                         //    offset = this.BufferWritePosition;\r\n                         //    this.BufferWritePosition += this.ChunkSize;\r\n                         //    count = this.ChunkSize;\r\n                         //    if (this.BufferWritePosition >= this.InnerBuffer.Length)\r\n                         //    {\r\n                         //        count = this.InnerBuffer.Length - offset;\r\n                         //        this.InnerBuffer = null;\r\n                         //    }\r\n                         //}\r\n                         //else\r\n                         //{\r\n                         count = this.InnerBuffer.Length;\r\n                         this.InnerBuffer = null;\r\n                         //}\r\n                     }\r\n                 }\r\n\r\n                 this.WriteStream.Write(footer, 0, count);\r\n\r\n                 return false;\r\n             }\r\n\r\n             public void Close()\r\n             {\r\n                 this.InnerBuffer = null;\r\n                 this.Header = null;\r\n                 this.Footer = null;\r\n\r\n                 if (!DoNotCloseWriteStream && this.WriteStream != null)\r\n                 {\r\n                     this.WriteStream.Close();\r\n                 }\r\n                 if (this.ReadStream != null)\r\n                 {\r\n                     this.ReadStream.Close();\r\n                 }\r\n             }\r\n         }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/HttpUtils.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Net;\r\nusing PHP.Core;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal static class HttpUtils\r\n    {\r\n\r\n        internal const int HTTP_HEADER_ROW_LENGTH = 30;\r\n\r\n        delegate void HeaderRowEvent(ref StringBuilder builder);\r\n\r\n        internal static void InvokeHeaderFunction(this HttpWebResponse response, PhpCurlResource curlResource, PhpCallback headerFunction)\r\n        {\r\n            StringBuilder builder = new StringBuilder(HTTP_HEADER_ROW_LENGTH);\r\n            int startIndex = 0;\r\n\r\n            IterateHtppHeaders(response, ref builder,\r\n                delegate(ref StringBuilder sb)\r\n                {\r\n                    headerFunction.Invoke(curlResource, sb.ToString(startIndex, sb.Length - startIndex));\r\n                    startIndex = sb.Length;\r\n                }\r\n                );\r\n\r\n        }\r\n\r\n        internal static string GetHttpHeaderAsString(this HttpWebResponse response)\r\n        {\r\n            WebHeaderCollection headers = response.Headers;\r\n\r\n            if ((headers == null) || (headers.Count == 0))\r\n            {\r\n                return \"\\r\\n\";\r\n            }\r\n            StringBuilder builder = new StringBuilder(HTTP_HEADER_ROW_LENGTH * headers.Count);\r\n            //string str = headers[string.Empty];\r\n\r\n            IterateHtppHeaders(response, ref builder);\r\n\r\n            return builder.ToString();\r\n        }\r\n\r\n        private static void IterateHtppHeaders(HttpWebResponse response, ref StringBuilder builder, HeaderRowEvent headerRowCallback = null)\r\n        {\r\n            WebHeaderCollection headers = response.Headers;\r\n\r\n            builder.Append(\"HTTP/\");\r\n            builder.Append(response.ProtocolVersion);\r\n            builder.Append(\" \");\r\n            builder.Append((int)response.StatusCode);\r\n            builder.Append(\" \");\r\n            builder.Append(response.StatusDescription);\r\n            builder.Append(\"\\r\\n\");\r\n\r\n            if (headerRowCallback != null)\r\n                headerRowCallback(ref builder);\r\n\r\n            //if (str != null)\r\n            //{\r\n            //    builder.Append(str).Append(\"\\r\\n\");\r\n            //}\r\n            for (int i = 0; i < headers.Count; i++)\r\n            {\r\n                string key = headers.GetKey(i);\r\n                string str3 = headers.Get(i);\r\n                if (key != null && key.Length != 0)//key isn't blank string\r\n                {\r\n                    builder.Append(key);\r\n                    builder.Append(\": \");\r\n                    builder.Append(str3).Append(\"\\r\\n\");\r\n\r\n                    if (headerRowCallback != null)\r\n                        headerRowCallback(ref builder);\r\n                }\r\n            }\r\n            builder.Append(\"\\r\\n\");\r\n\r\n            if (headerRowCallback != null)\r\n                headerRowCallback(ref builder);// this should also be returned\r\n        }\r\n\r\n        internal static void SetHttpHeaders(this HttpWebRequest request, PhpArray array)\r\n        {\r\n            string headerName, headerValue;\r\n            \r\n            foreach (var arrayItem in array)\r\n            {\r\n                string headerItem = PhpVariable.AsString(arrayItem.Value);\r\n                if (ParseHeader(headerItem, out headerName, out headerValue))\r\n                {\r\n                    Debug.Assert(headerName != null);\r\n                    Debug.Assert(headerValue != null);\r\n\r\n                    headerValue = headerValue.Trim();\r\n\r\n                    //Accept \t        Set by the Accept property. \r\n                    //Connection \t    Set by the Connection property and KeepAlive property. \r\n                    //Content-Length \tSet by the ContentLength property. \r\n                    //Content-Type \t    Set by the ContentType property. \r\n                    //Expect \t        Set by the Expect property. \r\n                    //Date \t            Set by the Date property. \r\n                    //Host          \tSet by the Host property. \r\n                    //If-Modified-Since Set by the IfModifiedSince property. \r\n                    //Range \t        Set by the AddRange method. \r\n                    //Referer \t        Set by the Referer property. \r\n                    //Transfer-Encoding Set by the TransferEncoding property (the SendChunked property must be true). \r\n                    //User-Agent \t    Set by the UserAgent property. \r\n                    switch (headerName.ToLowerInvariant())\r\n                    {\r\n                        case \"accept\":\r\n                            request.Accept = headerValue;\r\n                            break;\r\n                        case \"connection\":\r\n                            if (headerValue.Equals(\"close\", StringComparison.InvariantCultureIgnoreCase))\r\n                                request.KeepAlive = false;\r\n                            else\r\n                                request.Connection = headerValue;\r\n                            break;\r\n                        case \"content-length\":\r\n                            request.ContentLength = System.Convert.ToInt32(headerValue);\r\n                            break;\r\n                        case \"content-type\":\r\n                            request.ContentType = headerValue;\r\n                            break;\r\n                        case \"expect\":\r\n                            if (headerValue.Equals(\"100-continue\", StringComparison.InvariantCultureIgnoreCase))\r\n                                request.ServicePoint.Expect100Continue = true;\r\n                            else\r\n                                request.Expect = headerValue;\r\n                            break;\r\n                        case \"date\":\r\n                            request.Date = System.Convert.ToDateTime(headerValue);\r\n                            break;\r\n                        case \"host\":\r\n                            request.Host = headerValue;\r\n                            break;\r\n                        case \"if-modified-since\":\r\n                            request.IfModifiedSince = System.Convert.ToDateTime(headerValue);\r\n                            break;\r\n                        case \"range\":\r\n                            request.AddRange(System.Convert.ToInt32(headerValue));\r\n                            break;\r\n                        case \"referer\":\r\n                            request.Referer = headerValue;\r\n                            break;\r\n                        case \"transfer-encoding\":\r\n                            request.TransferEncoding = headerValue;\r\n                            break;\r\n                        case \"user-agent\":\r\n                            request.UserAgent = headerValue;\r\n                            break;\r\n                        default:\r\n                            request.Headers.Add(headerName, headerValue);\r\n                            break;\r\n                    }\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n        internal static bool ParseHeader(string header, out string headerName, out string headerValue)\r\n        {\r\n            if (header != null)\r\n            {\r\n                int index = header.IndexOf(':');\r\n                if (index > 0)\r\n                {\r\n                    headerName = header.Remove(index);\r\n                    headerValue = header.Substring(index + 1);\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            //\r\n            headerName = null;\r\n            headerValue = null;\r\n            return false;\r\n        }\r\n\r\n\r\n        public static void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)\r\n        { \r\n            string authInfo = String.Format(\"{0}:{1}\",userName, userPassword ); \r\n            authInfo = System.Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); \r\n            req.Headers[\"authorization\"] = \"Basic \" + authInfo; \r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/LibraryDescriptor.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Xml;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// Describes the class library assembly content and configuration.\r\n    /// </summary>\r\n    public sealed class CurlLibraryDescriptor : PhpLibraryDescriptor\r\n    {\r\n        /// <summary>\r\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\r\n        /// </summary>\r\n        internal static CurlLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static CurlLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //  get { return new string[] { ExtensionName }; } \r\n        //}\r\n        internal const string ExtensionName = \"curl\";\r\n\r\n        /// <summary>\r\n        /// Called by the Core after the library is loaded.\r\n        /// </summary>\r\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n        {\r\n            base.Loaded(assemblyAttribute, configStore);\r\n            singleton = this;\r\n            CurlConfiguration.RegisterLegacyOptions();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a configuration section belonging to the MySql library. \r\n        /// </summary>\r\n        /// <param name=\"result\">A configuration context.</param>\r\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n        /// <returns>Updated configuration context.</returns>\r\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n        {\r\n            // parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (CurlLocalConfig)result.Local, (CurlGlobalConfig)result.Global);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates empty library configuration context.\r\n        /// </summary>\r\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n        protected override ConfigContextBase CreateConfigContext()\r\n        {\r\n            return new ConfigContextBase(new CurlLocalConfig(), new CurlGlobalConfig());\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/PhpCurlMultiResource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing PHP.Core;\n\nnamespace PHP.Library.Curl\n{\n    /// <summary>\r\n    /// Represents a cURL multi-session.\r\n    /// </summary>\n    public class PhpCurlMultiResource : PhpResource\n    {\n        private readonly List<PhpCurlResource> _resources = new List<PhpCurlResource>();\n        private readonly Dictionary<PhpCurlResource, Task<object>> _results = new Dictionary<PhpCurlResource, Task<object>>();\n        private readonly List<PhpCurlResource> _returned = new List<PhpCurlResource>();\n        private bool _started;\n\n        internal PhpCurlMultiResource() : base(\"Curl\")\n        {\n        }\n\n        internal int StillRunning\n        {\n            get { return _results.Values.Count(a => !a.IsCompleted); }\n        }\n\n        internal bool SomeResultIsReady\n        {\n            get { return _results.Values.Any(a => a.IsCompleted); }\n        }\n\n        internal void Add(PhpCurlResource res)\n        {\n            _resources.Add(res);\n            res.MultiParent = this;\n        }\n\n        internal void StartIfNeeded()\n        {\n            if (_started)\n                return;\n            _started = true;\n            foreach (PhpCurlResource res in _resources)\n            {\n                PhpCurlResource res1 = res;\n                Func<object> func = () => Curl.Execute(res1);\n                var task = new Task<object>(func);\n                task.Start();\n                _results.Add(res1, task);\n            }\n        }\n\n        /// <summary>\r\n        /// Closes contained cURL sessions.\r\n        /// </summary>\n        public override void Close()\n        {\n            foreach (PhpCurlResource resource in _resources)\n            {\n                resource.Close();\n            }\n            base.Close();\n        }\n\n        internal object GetResult(PhpCurlResource handle)\n        {\n            return _results[handle].Result;\n        }\n\n        internal void Remove(PhpCurlResource resource)\n        {\n            _resources.Remove(resource);\n        }\n\n        internal void WaitAny(TimeSpan timeout)\n        {\n            Task.WaitAny(_results.Values.ToArray());\n        }\n\n        internal PhpCurlResource NextCompleted()\n        {\n            PhpCurlResource result = _results.Where(a => a.Value.IsCompleted && !_returned.Contains(a.Key)).Select(a => a.Key).FirstOrDefault();\n            if (result != null)\n            {\n                _returned.Add(result);\n            }\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "Source/Extensions/Curl/PhpCurlResource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Net;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// Handle representing a cURL session\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class PhpCurlResource : PhpResource\r\n    {\r\n        private CURLcode errorCode;\r\n        private UserDefined data;\r\n        private CurlHandler handler;\r\n\r\n        internal UserDefined Data\r\n        {\r\n            get { return data; }\r\n        }\r\n\r\n        internal CURLcode ErrorCode\r\n        {\r\n            get { return errorCode; }\r\n        }\r\n\r\n        internal string ErrorMsg\r\n        {\r\n            get { return null; }//TODO: implement through resources\r\n        }\r\n        \r\n        internal PhpCurlMultiResource MultiParent { get; set; }\r\n\r\n\r\n        /// <summary>\r\n        /// Initialize a new handle of cURL session\r\n        /// </summary>\r\n        public PhpCurlResource()\r\n            : base(\"Curl\")\r\n        {\r\n            data = new UserDefined();\r\n            handler = CurlHandler.Create(CurlProto.HTTP);// for now we just support HTTP handeling\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize a new handle of cURL session with Uri initialized\r\n        /// </summary>\r\n        public PhpCurlResource(string uri)\r\n            : this()\r\n        {\r\n            //TODO: if uri is without http:// add it\r\n            data.Str[(int)DupString.SET_URL] = uri;\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Executes cURL transfer\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        internal object Execute()\r\n        {\r\n            return handler.Execute(this, ref errorCode);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets information information associated with a cURL transfer\r\n        /// </summary>\r\n        /// <param name=\"info\">This parameter specifies item to be retrieved.</param>\r\n        /// <returns>Returns an item specified by info paramter. Item can be <c>int</c>, a\r\n        /// <c>double</c>, a <c>string</c>, a <c>DateTime</c> or an <c>object</c>.\r\n        /// </returns>\r\n        internal object GetInfo(CurlInfo info)\r\n        {\r\n            return handler.GetInfo(info);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Closes handle\r\n        /// </summary>\r\n        public override void Close()\r\n        {\r\n            Cookies.FlushCookies(data);\r\n            base.Close();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Port.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    /// <summary>\r\n    /// Default ports\r\n    /// </summary>\r\n    internal enum Port\r\n    {     \n        FTP \t= 21,\n        FTPS \t= 990,\n        TELNET \t= 23,\n        HTTP \t= 80,\n        HTTPS \t= 443,\n        DICT \t= 2628,\n        LDAP \t= 389,\n        LDAPS \t= 636,\n        TFTP \t= 69,\n        SSH \t= 22,\n        IMAP \t= 143,\n        IMAPS \t= 993,\n        POP3 \t= 110,\n        POP3S \t= 995,\n        SMTP \t= 25,\n        SMTPS \t= 465, /* sometimes called SSMTP */\n        RTSP \t= 554,\n        RTMP \t= 1935,\n        RTMPT   = HTTP,\n        RTMPS   = HTTPS,\n        GOPHER \t= 70\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger Curl\")]\r\n[assembly: AssemblyDescription(\"Phalanger Curl Extension\")]\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"47fb135d-f29f-42de-9435-5ee36249648e\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Curl.CurlLibraryDescriptor), \"Curl\", new string[] { \"curl\" })]\r\n"
  },
  {
    "path": "Source/Extensions/Curl/ScatterGatherBuffers.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal class ScatterGatherBuffers\r\n    {\r\n        // Fields\r\n        private int chunkCount;\r\n        private MemoryChunk currentChunk;\r\n        private MemoryChunk headChunk;\r\n        private int nextChunkLength;\r\n        private int totalLength;\r\n\r\n        // Properties\r\n        private bool Empty\r\n        {\r\n            get\r\n            {\r\n                if (this.headChunk != null)\r\n                {\r\n                    return (this.chunkCount == 0);\r\n                }\r\n                return true;\r\n            }\r\n        }\r\n\r\n        internal int Length\r\n        {\r\n            get { return this.totalLength; }\r\n        }\r\n        \r\n        // Nested Types\r\n        private class MemoryChunk\r\n        {\r\n            // Fields\r\n            internal byte[] Buffer;\r\n            internal int FreeOffset;\r\n            internal ScatterGatherBuffers.MemoryChunk Next;\r\n\r\n            // Methods\r\n            internal MemoryChunk(int bufferSize)\r\n            {\r\n                this.Buffer = new byte[bufferSize];\r\n            }\r\n        }\r\n\r\n        internal ScatterGatherBuffers(long totalSize)\r\n        {\r\n            this.nextChunkLength = 0x400;\r\n            if (totalSize > 0L)\r\n            {\r\n                this.currentChunk = AllocateMemoryChunk((totalSize > 0x7fffffffL) ? 0x7fffffff : ((int)totalSize));\r\n            }\r\n        }\r\n\r\n        private MemoryChunk AllocateMemoryChunk(int newSize)\r\n        {\r\n            if (newSize > this.nextChunkLength)\r\n            {\r\n                this.nextChunkLength = newSize;\r\n            }\r\n            MemoryChunk chunk = new MemoryChunk(this.nextChunkLength);\r\n            if (this.Empty)\r\n            {\r\n                this.headChunk = chunk;\r\n            }\r\n            this.nextChunkLength *= 2;\r\n            this.chunkCount++;\r\n            return chunk;\r\n        }\r\n\r\n        internal void Write(byte[] buffer, int offset, int count)\r\n        {\r\n            while (count > 0)\r\n            {\r\n                int num = this.Empty ? 0 : (currentChunk.Buffer.Length - currentChunk.FreeOffset);\r\n                if (num == 0)\r\n                {\r\n                    MemoryChunk chunk = AllocateMemoryChunk(count);\r\n                    if (currentChunk != null)\r\n                    {\r\n                        currentChunk.Next = chunk;\r\n                    }\r\n                    currentChunk = chunk;\r\n                }\r\n                int num2 = (count < num) ? count : num;\r\n                Buffer.BlockCopy(buffer, offset, currentChunk.Buffer, currentChunk.FreeOffset, num2);\r\n                offset += num2;\r\n                count -= num2;\r\n\r\n                totalLength += num2;\r\n                currentChunk.FreeOffset += num2;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns all the data as array of bytes\r\n        /// </summary>\r\n        /// <param name=\"headReserveToAllocate\">Reserve to allocate at the begining of the array. (e.g. HTTP header can be places there)</param>\r\n        public byte[] ToArray(int headReserveToAllocate = 0)\r\n        {\r\n            if (this.Empty)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            byte[] dst = new byte[headReserveToAllocate + Length];\r\n\r\n            int dstOffset = headReserveToAllocate;\r\n            for (MemoryChunk chunk = this.headChunk; chunk != null; chunk = chunk.Next)\r\n            {\r\n                //chunk.FreeOffset can be considered size of chunk.Buffer\r\n\r\n                Buffer.BlockCopy(chunk.Buffer, 0, dst, dstOffset, chunk.FreeOffset);\r\n                dstOffset += chunk.FreeOffset;\r\n            }\r\n            return dst;\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Streams.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n\r\n    internal class WriteFunctionStream : Stream\r\n    {\r\n        private PhpCurlResource curl;\r\n        private PhpCallback writeFunction;\r\n\r\n        public WriteFunctionStream(PhpCurlResource curl,PhpCallback writeFunction)\r\n        {\r\n            this.curl = curl;\r\n            this.writeFunction = writeFunction;\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        public override bool CanSeek\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        public override bool CanWrite\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override void Flush()\r\n        {\r\n            //nop\r\n        }\r\n\r\n        public override long Length\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public override long Position\r\n        {\r\n            get\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n            set\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public override int Read(byte[] buffer, int offset, int count)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public override long Seek(long offset, SeekOrigin origin)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public override void SetLength(long value)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public override void Write(byte[] buffer, int offset, int count)\r\n        {\r\n            // THIS IS UGLY AND NOT OPTIMAL\r\n            byte[] buf = new byte[count];            \r\n            Buffer.BlockCopy(buffer, 0, buf, 0, count);\r\n\r\n\r\n            writeFunction.Invoke(curl, new PhpBytes(buf));\r\n            \r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/UserDefined.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    //copied from curl, ready to be used\r\n\r\n    #region Enums\r\n\r\n    enum Curl_HttpReq\r\n    {\r\n        NONE, /* first in list */\r\n        GET,\r\n        POST,\r\n        POST_FORM, /* we make a difference internally */\r\n        PUT,\r\n        HEAD,\r\n        CUSTOM,\r\n        LAST /* last in list */\r\n    };\r\n\r\n    enum CurlSshAuth\r\n    {\r\n        ANY = ~0,     /* all types supported by the server */\r\n        NONE = 0,      /* none allowed, silly but complete */\r\n        PUBLICKEY = (1 << 0), /* public/private key files */\r\n        PASSWORD = (1 << 1), /* password */\r\n        HOST = (1 << 2), /* host key files */\r\n        KEYBOARD = (1 << 3), /* keyboard interactive */\r\n        DEFAULT = ANY\r\n    }\r\n\r\n\r\n    internal enum DupString : long\r\n    {\r\n        CERT = 0,            /* client certificate file name */\r\n        CERT_TYPE,       /* format for certificate (default: PEM)*/\r\n        COOKIE,          /* HTTP cookie string to send */\r\n        COOKIEJAR,       /* dump all cookies to this file */\r\n        CUSTOMREQUEST,   /* HTTP/FTP/RTSP request/method to use */\r\n        DEVICE,          /* local network interface/address to use */\r\n        ENCODING,        /* Accept-Encoding string */\r\n        FTP_ACCOUNT,     /* ftp account data */\r\n        FTP_ALTERNATIVE_TO_USER, /* command to send if USER/PASS fails */\r\n        FTPPORT,         /* port to send with the FTP PORT command */\r\n        KEY,             /* private key file name */\r\n        KEY_PASSWD,      /* plain text private key password */\r\n        KEY_TYPE,        /* format for private key (default: PEM) */\r\n        KRB_LEVEL,       /* krb security level */\r\n        NETRC_FILE,      /* if not NULL, use this instead of trying to find\n                          $HOME/.netrc */\r\n        COPYPOSTFIELDS,  /* if POST, set the fields' values here */\r\n        PROXY,           /* proxy to use */\r\n        SET_RANGE,       /* range, if used */\r\n        SET_REFERER,     /* custom string for the HTTP referer field */\r\n        SET_URL,         /* what original URL to work on */\r\n        SSL_CAPATH,      /* CA directory name (doesn't work on windows) */\r\n        SSL_CAFILE,      /* certificate file to verify peer against */\r\n        SSL_CIPHER_LIST, /* list of ciphers to use */\r\n        SSL_EGDSOCKET,   /* path to file containing the EGD daemon socket */\r\n        SSL_RANDOM_FILE, /* path to file containing \"random\" data */\r\n        USERAGENT,       /* User-Agent string */\r\n        SSL_CRLFILE,     /* crl file to check certificate */\r\n        SSL_ISSUERCERT,  /* issuer cert file to check certificate */\r\n        USERNAME,        /* <username>, if used */\r\n        PASSWORD,        /* <password>, if used */\r\n        PROXYUSERNAME,   /* Proxy <username>, if used */\r\n        PROXYPASSWORD,   /* Proxy <password>, if used */\r\n        NOPROXY,         /* List of hosts which should not use the proxy, if\n                          used */\r\n        RTSP_SESSION_ID, /* Session ID to use */\r\n        RTSP_STREAM_URI, /* Stream URI for this request */\r\n        RTSP_TRANSPORT,  /* Transport for this session */\r\n#if USE_LIBSSH2\n      SSH_PRIVATE_KEY, /* path to the private key file for auth */\n      SSH_PUBLIC_KEY,  /* path to the public key file for auth */\n      SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */\n      SSH_KNOWNHOSTS,  /* file name of knownhosts file */\n#endif\r\n#if (HAVE_GSSAPI) || (USE_WINDOWS_SSPI)\n      SOCKS5_GSSAPI_SERVICE,  /* GSSAPI service name */\n#endif\r\n        MAIL_FROM,\r\n\r\n#if USE_TLS_SRP\n      TLSAUTH_USERNAME,     /* TLS auth <username> */\n      TLSAUTH_PASSWORD,     /* TLS auth <password> */\n#endif\r\n\r\n        /* -- end of strings -- */\r\n        LAST /* not used, just an end-of-list marker */\r\n    };\r\n\r\n    #endregion\r\n\r\n\r\n    internal struct ssl_config_data\r\n    {\r\n        //public long Version;          /* what version the client wants to use */\r\n        //public long CertVerifyResult; /* result from the certificate verification */\r\n        public bool VerifyPeer;       /* set TRUE if this is desired */\r\n        public long VerifyHost;       /* 0: no verify\n                                         1: check that CN exists\n                                         2: CN must match hostname */\r\n        //char* CApath;          /* certificate dir (doesn't work on windows) */\r\n        //char* CAfile;          /* certificate to verify peer against */\r\n        //char* CRLfile;        /* CRL to check certificate revocation */\r\n        //char* issuercert;     /* optional issuer certificate filename */\r\n        //char* random_file;     /* path to file containing \"random\" data */\r\n        //char* egdsocket;       /* path to file containing the EGD daemon socket */\r\n        //char* cipher_list;     /* list of ciphers to use */\r\n        //long numsessions;      /* SSL session id cache size */\r\n        ////curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */\r\n        //void* fsslctxp;        /* parameter for call back */\r\n        //public bool sessionid;        /* cache session IDs or not */\r\n        //public bool certinfo;         /* gather lots of certificate info */\r\n\r\n#if USE_TLS_SRP\n      char *username; /* TLS username (for, e.g., SRP) */\n      char *password; /* TLS password (for, e.g., SRP) */\n      enum CURL_TLSAUTH authtype; /* TLS authentication type (default SRP) */\n#endif\r\n    };\r\n\r\n    internal class UserDefined\r\n    {\r\n\r\n        //Constants\r\n        public const int CURL_DEFAULT_PROXY_PORT = 1080;\r\n        public const int DEFAULT_MAXREDIRS = 50;\r\n\r\n        #region Fields\r\n\r\n        private bool returntransfer;\r\n        private int proxyport; /* If non-zero, use this port number by default. If the\n                         proxy string features a \":[port]\" that one will override\n                         this. */\r\n        private PhpResource infile;          /* the uploaded file is read from here */\r\n        private PhpResource outfile;         /* the fetched file goes here */\r\n        //TODO: (MB) eventually use PhpStream so we can take advantage of Phalanger's stream abstracion although native curl just supports FILE's here\r\n        private int useport;     /* which port to use */\r\n        private CURLhttpAuth httpauth;     /* what kind of HTTP authentication to use (bitmask) */\r\n        private CURLhttpAuth proxyauth;    /* what kind of proxy authentication to use (bitmask) */\r\n\r\n        private int maxredirs;\r\n        private object postfields;  /* if POST, set the fields' values here */\r\n        private long postfieldsize; /* if POST, this might have a size to use instead\r\n                                       of strlen(), and then the data *may* be binary\r\n                                       (contain zero bytes) */\r\n        private PhpCallback fwrite_header; /* function that stores headers */\r\n        private PhpCallback fwrite_func;   /* function that stores the output */\r\n\r\n        private int timeout;\r\n        private int connecttimeout;\r\n        private long infilesize;      /* size of file to upload, -1 means unknown */\r\n        private PhpArray headers; /* linked list of extra headers */\r\n        private Curl_HttpReq httpreq;   /* what kind of HTTP request (if any) is this */\r\n        private CurlHttpVersion httpversion; /* when non-zero, a specific HTTP version requested to\r\n                               be used in the library's request(s) */\r\n        private ssl_config_data ssl;  /* user defined SSL stuff */\r\n        private CURLproxyType proxytype; /* what kind of proxy that is in use */\r\n        private bool http_follow_location; /* follow HTTP redirects */\r\n        private bool include_header;   /* include received protocol headers in data output */\r\n        private bool opt_no_body;      /* as set with CURLOPT_NO_BODY */\r\n        private bool upload;           /* upload request */\r\n        //private CurlSshAuth ssh_auth_types;   /* allowed SSH auth types */\r\n        private readonly object[] str = new object[(int)DupString.LAST];\r\n\r\n\r\n        // In native curl they use this form sending multipart post messages\r\n        //  struct curl_httppost *httppost;  /* linked list of POST data */\r\n        CurlForm curl_httppost;\r\n\r\n        ///////////////////\r\n        // Change structure\r\n        //In native curl this is in SessionHandle.Change structure\r\n\r\n        private List<string> cookielist = new List<string>();\r\n\r\n        ///////////////////\r\n\r\n\r\n        ////////////////////\r\n        //Cookie structure\r\n        // In native curl this is in SessionHandle.Cookies\r\n\r\n        private System.Net.CookieCollection cookies = new System.Net.CookieCollection();\r\n\r\n        ////////////////////\r\n\r\n        //* Here follows boolean settings that define how to behave during\r\n        //   this session. They are STATIC, set by libcurl users or at least initially\r\n        //   and they don't change during operations. */\r\n        //private bool tunnel_thru_httpproxy; /* use CONNECT through a HTTP proxy */\r\n\r\n        #endregion\r\n\r\n        #region Currently unsupported fields\r\n\r\n        // FILE *err;         /* the stderr user data goes here */\r\n        // void *debugdata;   /* the data that will be passed to fdebug */\r\n        // char *errorbuffer; /* (Static) store failure messages in here */\r\n        //string writeheader; /* write the header to this if non-NULL */\r\n        //void *rtp_out;     /* write RTP to this if non-NULL */\r\n        //bool post301;      /* Obey RFC 2616/10.3.2 and keep POSTs as POSTs after a\r\n        //                    301 */\r\n        //bool post302;      /* keep POSTs as POSTs after a 302 */\r\n        //bool free_referer; /* set TRUE if 'referer' points to a string we\r\n        //                    allocated */\r\n        //  curl_seek_callback seek_func;      /* function that seeks the input */\r\n        //  unsigned short localport; /* local port number to bind to */\r\n        //  int localportrange; /* number of additional port numbers to test in case the\r\n        //                         'localport' one can't be bind()ed */\r\n\r\n        //  curl_write_callback fwrite_rtp;    /* function that stores interleaved RTP */\r\n        //  curl_read_callback fread_func;     /* function that reads the input */\r\n        //  int is_fread_set; /* boolean, has read callback been set to non-NULL? */\r\n        //  int is_fwrite_set; /* boolean, has write callback been set to non-NULL? */\r\n        //  curl_progress_callback fprogress;  /* function for progress information */\r\n        //  curl_debug_callback fdebug;      /* function that write informational data */\r\n        //  curl_ioctl_callback ioctl_func;  /* function for I/O control */\r\n        //  curl_sockopt_callback fsockopt;  /* function for setting socket options */\r\n        //  void *sockopt_client; /* pointer to pass to the socket options callback */\r\n        //  curl_opensocket_callback fopensocket; /* function for checking/translating\r\n        //                                           the address and opening the socket */\r\n        //  void* opensocket_client;\r\n\r\n        //  void *seek_client;    /* pointer to pass to the seek callback */\r\n        //  /* the 3 curl_conv_callback functions below are used on non-ASCII hosts */\r\n        //  /* function to convert from the network encoding: */\r\n        //  curl_conv_callback convfromnetwork;\r\n        //  /* function to convert to the network encoding: */\r\n        //  curl_conv_callback convtonetwork;\r\n        //  /* function to convert from UTF-8 encoding: */\r\n        //  curl_conv_callback convfromutf8;\r\n\r\n        //  void *progress_client; /* pointer to pass to the progress callback */\r\n        //  void *ioctl_client;   /* pointer to pass to the ioctl callback */\r\n        //  long server_response_timeout; /* in milliseconds, 0 means no timeout */\r\n        //  long tftp_blksize ; /* in bytes, 0 means use default */\r\n        //  long low_speed_limit; /* bytes/second */\r\n        //  long low_speed_time;  /* number of seconds */\r\n        //  curl_off_t max_send_speed; /* high speed limit in bytes/second for upload */\r\n        //  curl_off_t max_recv_speed; /* high speed limit in bytes/second for download */\r\n        //  curl_off_t set_resume_from;  /* continue [ftp] transfer from here */\r\n        //  bool cookiesession;   /* new cookie session? */\r\n        //  bool crlf;            /* convert crlf on ftp upload(?) */\r\n        //  struct curl_slist *quote;     /* after connection is established */\r\n        //  struct curl_slist *postquote; /* after the transfer */\r\n        //  struct curl_slist *prequote; /* before the transfer, after type */\r\n        //  struct curl_slist *source_quote;  /* 3rd party quote */\r\n        //  struct curl_slist *source_prequote;  /* in 3rd party transfer mode - before\r\n        //                                          the transfer on source host */\r\n        //  struct curl_slist *source_postquote; /* in 3rd party transfer mode - after\r\n        //                                          the transfer on source host */\r\n        //  struct curl_slist *telnet_options; /* linked list of telnet options */\r\n        //  struct curl_slist *resolve;     /* list of names to add/remove from\r\n        //                                     DNS cache */\r\n        //  curl_TimeCond timecondition; /* kind of time/date comparison */\r\n        //  time_t timevalue;       /* what time to compare with */\r\n        //  long dns_cache_timeout; /* DNS cache timeout */\r\n        //  long buffer_size;      /* size of receive buffer to use */\r\n        //  void *private_data; /* application-private data */\r\n\r\n        //  struct Curl_one_easy *one_easy; /* When adding an easy handle to a multi\r\n        //                                     handle, an internal 'Curl_one_easy'\r\n        //                                     struct is created and this is a pointer\r\n        //                                     to the particular struct associated with\r\n        //                                     this SessionHandle */\r\n\r\n        //  struct curl_slist *http200aliases; /* linked list of aliases for http200 */\r\n\r\n        //  long ipver; /* the CURL_IPRESOLVE_* defines in the public header file\r\n        //                 0 - whatever, 1 - v2, 2 - v6 */\r\n\r\n        //  curl_off_t max_filesize; /* Maximum file size to download */\r\n\r\n        //  curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used  */\r\n\r\n        //  int ftp_create_missing_dirs; /* 1 - create directories that don't exist\r\n        //                                  2 - the same but also allow MKD to fail once\r\n        //                               */\r\n\r\n        //  curl_sshkeycallback ssh_keyfunc; /* key matching callback */\r\n        //  void *ssh_keyfunc_userp;         /* custom pointer to callback */\r\n\r\n        ///* Here follows boolean settings that define how to behave during\r\n        //   this session. They are STATIC, set by libcurl users or at least initially\r\n        //   and they don't change during operations. */\r\n\r\n        //  bool printhost;        /* printing host name in debug info */\r\n        //  bool get_filetime;     /* get the time and get of the remote file */\r\n        //  bool prefer_ascii;     /* ASCII rather than binary */\r\n        //  bool ftp_append;       /* append, not overwrite, on upload */\r\n        //  bool ftp_list_only;    /* switch FTP command for listing directories */\r\n        //  bool ftp_use_port;     /* use the FTP PORT command */\r\n        //  bool hide_progress;    /* don't use the progress meter */\r\n        //  bool http_fail_on_error;  /* fail on HTTP error codes >= 300 */\r\n        //  bool http_disable_hostname_check_before_authentication;\r\n        //  bool http_set_referer; /* is a custom referer used */\r\n        //  bool http_auto_referer; /* set \"correct\" referer when following location: */\r\n        //  bool set_port;         /* custom port number used */\r\n        //  enum CURL_NETRC_OPTION\r\n        //       use_netrc;        /* defined in include/curl.h */\r\n        //  bool verbose;          /* output verbosity */\r\n        //  bool krb;              /* kerberos connection requested */\r\n        //  bool reuse_forbid;     /* forbidden to be reused, close after use */\r\n        //  bool reuse_fresh;      /* do not re-use an existing connection  */\r\n        //  bool ftp_use_epsv;     /* if EPSV is to be attempted or not */\r\n        //  bool ftp_use_eprt;     /* if EPRT is to be attempted or not */\r\n        //  bool ftp_use_pret;     /* if PRET is to be used before PASV or not */\r\n\r\n        //  curl_usessl ftp_ssl;   /* if AUTH TLS is to be attempted etc, for FTP or\r\n        //                            IMAP or POP3 or others! */\r\n        //  curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */\r\n        //  curl_ftpccc ftp_ccc;   /* FTP CCC options */\r\n        //  bool no_signal;        /* do not use any signal/alarm handler */\r\n        //  bool global_dns_cache; /* subject for future removal */\r\n        //  bool tcp_nodelay;      /* whether to enable TCP_NODELAY or not */\r\n        //  bool ignorecl;         /* ignore content length */\r\n        //  bool ftp_skip_ip;      /* skip the IP address the FTP server passes on to\r\n        //                            us */\r\n        //  bool connect_only;     /* make connection, let application use the socket */\r\n        //  bool http_te_skip;     /* pass the raw body data to the user, even when\r\n        //                            transfer-encoded (chunked, compressed) */\r\n        //  bool http_ce_skip;     /* pass the raw body data to the user, even when\r\n        //                            content-encoded (chunked, compressed) */\r\n        //  long new_file_perms;    /* Permissions to use when creating remote files */\r\n        //  long new_directory_perms; /* Permissions to use when creating remote dirs */\r\n        //  bool proxy_transfer_mode; /* set transfer mode (;type=<a|i>) when doing FTP\r\n        //                               via an HTTP proxy */\r\n        //  unsigned int scope;    /* address scope for IPv6 */\r\n        //  long allowed_protocols;\r\n        //  long redir_protocols;\r\n        //#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)\r\n        //  long socks5_gssapi_nec; /* flag to support nec socks5 server */\r\n        //#endif\r\n        //  struct curl_slist *mail_rcpt; /* linked list of mail recipients */\r\n        //  /* Common RTSP header options */\r\n        //  Curl_RtspReq rtspreq; /* RTSP request type */\r\n        //  long rtspversion; /* like httpversion, for RTSP */\r\n        //  bool wildcardmatch; /* enable wildcard matching */\r\n        //  curl_chunk_bgn_callback chunk_bgn; /* called before part of transfer starts */\r\n        //  curl_chunk_end_callback chunk_end; /* called after part transferring\r\n        //                                        stopped */\r\n        //  curl_fnmatch_callback fnmatch; /* callback to decide which file corresponds\r\n        //                                    to pattern (e.g. if WILDCARDMATCH is on) */\r\n        //  void *fnmatch_data;\r\n\r\n        #endregion\r\n\r\n        #region Properties\r\n\r\n        public PhpCallback FunctionWriteHeader\r\n        {\r\n            get { return fwrite_header; }\r\n        }\r\n\r\n\r\n        public PhpCallback WriteFunction\r\n        {\r\n            get { return fwrite_func; }\r\n        }\r\n\r\n        public object Postfields\r\n        {\r\n            get { return postfields; }\r\n        }\r\n\r\n        public PhpArray Headers\r\n        {\r\n            get { return headers; }\r\n        }\r\n\r\n        internal Curl_HttpReq Httpreq\r\n        {\r\n            get { return httpreq; }\r\n        }\r\n        public CurlHttpVersion HttpVersion\r\n        {\r\n            get { return httpversion; }\r\n        }\r\n\r\n        public bool IncludeHeader\r\n        {\r\n            get { return include_header; }\r\n        }\r\n\r\n        public bool OptNoBody\r\n        {\r\n            get { return opt_no_body; }\r\n        }\r\n\r\n        public bool Upload\r\n        {\r\n            get { return upload; }\r\n        }\r\n\r\n        public bool ReturnTransfer\r\n        {\r\n            get { return returntransfer; }\r\n        }\r\n\r\n        public CurlForm HttpPostForm\r\n        {\r\n            get { return curl_httppost; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// the uploaded file is read from here\r\n        /// </summary>\r\n        public PhpResource Infile\r\n        {\r\n            get { return infile; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The fetched file\r\n        /// </summary>\r\n        public PhpResource OutFile\r\n        {\r\n            get { return outfile; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// which port to use\r\n        /// </summary>\r\n        public int UsePort\r\n        {\r\n            get { return useport; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// As in HTTP Location:\r\n        /// </summary>\r\n        public bool FollowLocation\r\n        {\r\n            get { return http_follow_location; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// maximum no. of http(s) redirects to follow, set to -1 for infinity\r\n        /// </summary>\r\n        public int MaxRedirects\r\n        {\r\n            get { return maxredirs; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Timeout in milliseconds, 0 means no timeout\r\n        /// </summary>\r\n        public int Timeout\r\n        {\r\n            get { return timeout; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// ConnectTimeout in milliseconds, 0 means no timeout\r\n        /// </summary>\r\n        public int ConnectTimeout\r\n        {\r\n            get { return connecttimeout; }\r\n        }\r\n\r\n        public object[] Str\r\n        {\r\n            get { return str; }\r\n        }\r\n\r\n        //public bool TunnelThruHttpProxy\r\n        //{\r\n        //    get { return tunnel_thru_httpproxy; }\r\n        //}\r\n\r\n        public int ProxyPort\r\n        {\r\n            get { return proxyport; }\r\n        }\r\n\r\n        public CURLproxyType ProxyType\r\n        {\r\n            get { return proxytype; }\r\n        }\r\n\r\n        public ssl_config_data Ssl\r\n        {\r\n            get { return ssl; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Cookies set by user\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This can load cookies from files. To behave same as native curl, it's necessary to call it\r\n        /// only just before making the request\r\n        /// </remarks>\r\n        public System.Net.CookieCollection Cookies\r\n        {\r\n            get\r\n            {\r\n                if (cookielist.Count > 0)\r\n                {\r\n                    // TODO: Not good, but so far ok... we also need port info\r\n                    // Make property from it (implementation is in CurlHttp)\r\n                    //Uri uri = new Uri(PhpVariable.AsString(Str[(int)DupString.SET_URL]));\r\n\r\n                    //Load the files\r\n                    PHP.Library.Curl.Cookies.LoadCookiesFromFiles(cookies, cookielist);\r\n\r\n                    //Clear cookieliest to prevent loading them from files again\r\n                    cookielist.Clear();\r\n                }\r\n\r\n                return cookies;\r\n\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        public UserDefined()\r\n        {\r\n\r\n            /*\n            * Initialize the UserDefined fields within a SessionHandle.\n            * This may be safely called on a new or existing SessionHandle.\n            */\r\n\r\n            //CurlCode res = CurlCode.CURLE_OK;\r\n\r\n            //data.out = stdout; /* default output to stdout */\r\n            //data.in  = stdin;  /* default input from stdin */\r\n            //data.err  = stderr;  /* default stderr to stderr */\r\n\r\n            /* use fwrite as default function to store output */\r\n            //data.fwrite_func = (curl_write_callback)fwrite;\r\n\r\n            /* use fread as default function to read input */\r\n            //data.fread_func = (curl_read_callback)fread;\r\n            //data.is_fread_set = 0;\r\n            //data.is_fwrite_set = 0;\r\n\r\n            //data.seek_func = ZERO_NULL;\r\n            //data.seek_client = ZERO_NULL;\r\n\r\n            /* conversion callbacks for non-ASCII hosts */\r\n            //data.convfromnetwork = ZERO_NULL;\r\n            //data.convtonetwork   = ZERO_NULL;\r\n            //data.convfromutf8    = ZERO_NULL;\r\n\r\n            infilesize = -1;      /* we don't know any size */\r\n            postfieldsize = -1;   /* unknown size */\r\n\r\n            http_follow_location = false;\r\n            maxredirs = DEFAULT_MAXREDIRS; /* allow any amount by default */\r\n\r\n            httpreq = Curl_HttpReq.GET; /* Default HTTP request */\r\n\r\n            httpversion = CurlHttpVersion.CURL_HTTP_VERSION_NONE;\r\n\r\n            //data.rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */\r\n            //data.ftp_use_epsv = TRUE;   /* FTP defaults to EPSV operations */\r\n            //data.ftp_use_eprt = TRUE;   /* FTP defaults to EPRT operations */\r\n            //data.ftp_use_pret = FALSE;  /* mainly useful for drftpd servers */\r\n            //data.ftp_filemethod = FTPFILE_MULTICWD;\r\n\r\n            //data.dns_cache_timeout = 60; /* Timeout every 60 seconds by default */\r\n\r\n            /* Set the default size of the SSL session ID cache */\r\n            //data.ssl.numsessions = 5;\r\n\r\n            proxyport = CURL_DEFAULT_PROXY_PORT; /* from url.h */\r\n            proxytype = CURLproxyType.CURLPROXY_HTTP; /* defaults to HTTP proxy */\r\n            httpauth = CURLhttpAuth.CURLAUTH_BASIC;  /* defaults to basic */\r\n            proxyauth = CURLhttpAuth.CURLAUTH_BASIC; /* defaults to basic */\r\n\r\n            /* make libcurl quiet by default: */\r\n            // data.hide_progress = TRUE;  /* CURLOPT_NOPROGRESS changes these */\r\n\r\n            /*\n            * libcurl 7.10 introduced SSL verification *by default*! This needs to be\n            * switched off unless wanted.\n            */\r\n            ssl.VerifyPeer = true;\r\n            ssl.VerifyHost = 2;\r\n#if USE_TLS_SRP\n                    ssl.authtype = CURL_TLSAUTH_NONE;\n#endif\r\n            //ssh_auth_types = CurlSshAuth.DEFAULT; /* defaults to any auth type */\r\n            //ssl.sessionid = true; /* session ID caching enabled by default */\r\n\r\n            //data.new_file_perms = 0644;    /* Default permissions */\r\n            //data.new_directory_perms = 0755; /* Default permissions */\r\n\r\n            /* for the *protocols fields we don't use the CURLPROTO_ALL convenience\n                define since we internally only use the lower 16 bits for the passed\n                in bitmask to not conflict with the private bits */\r\n            //data.allowed_protocols = CURLPROTO_ALL;\r\n            //data.redir_protocols =\r\n            //CURLPROTO_ALL & ~(CURLPROTO_FILE | CURLPROTO_SCP); /* not FILE or SCP */\r\n\r\n#if HAVE_GSSAPI || USE_WINDOWS_SSPI\n                /*\n                * disallow unprotected protection negotiation NEC reference implementation\n                * seem not to follow rfc1961 section 4.3/4.4\n                */\n                data.socks5_gssapi_nec = FALSE;\n                /* set default gssapi service name */\n                res = setstropt(&data.str[STRING_SOCKS5_GSSAPI_SERVICE],\n                                (char *) CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE);\n                if (res != CURLE_OK)\n                return res;\n#endif\r\n\r\n            /* This is our preferred CA cert bundle/path since install time */\r\n#if CURL_CA_BUNDLE\n                res = setstropt(&data.str[STRING_SSL_CAFILE], (char *) CURL_CA_BUNDLE);\n#elif CURL_CA_PATH\n                res = setstropt(&data.str[STRING_SSL_CAPATH], (char *) CURL_CA_PATH);\n#endif\r\n\r\n            //data.wildcardmatch = FALSE;\r\n            //data.chunk_bgn = ZERO_NULL;\r\n            //data.chunk_end = ZERO_NULL;\r\n        }\r\n\r\n        public CURLcode SetOption(CurlOption option, object value)\r\n        {\r\n            //char *argptr;\r\n            CURLcode result = CURLcode.CURLE_OK;\r\n\r\n#if !CURL_DISABLE_HTTP\r\n            long bigsize;\r\n#endif\r\n\r\n            switch (option)\r\n            {\r\n                case CurlOption.CURLOPT_RETURNTRANSFER://this option isn't in libcurl, but PHP supports it\r\n                    returntransfer = (bool)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_CUSTOMREQUEST:\r\n                    /*\r\n                     * Set a custom string to use as request\r\n                     */\r\n                    str[(int)DupString.CUSTOMREQUEST] = value;\r\n                    /* we don't set\r\n                       data->set.httpreq = HTTPREQ_CUSTOM;\r\n                       here, we continue as if we were using the already set type\r\n                       and this just changes the actual request keyword */\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_UPLOAD:\r\n                case CurlOption.CURLOPT_PUT:\r\n                    /*\n                     * We want to sent data to the remote host. If this is HTTP, that equals\n                     * using the PUT request.\n                     */\r\n                    upload = (bool)value;\r\n                    if (upload)\r\n                    {\r\n                        /* If this is HTTP, PUT is what's needed to \"upload\" */\r\n                        httpreq = Curl_HttpReq.PUT;\r\n                        opt_no_body = false; /* this is implied */\r\n                    }\r\n                    else\r\n                        /* In HTTP, the opposite of upload is GET (unless NOBODY is true as\n                           then this can be changed to HEAD later on) */\r\n                        httpreq = Curl_HttpReq.GET;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_FOLLOWLOCATION:\r\n                    /*\n                     * Follow Location: header hints on a HTTP-server.\n                     */\r\n                    http_follow_location = (bool)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_MAXREDIRS:\r\n                    /*\n                     * The maximum amount of hops you allow curl to follow Location:\n                     * headers. This should mostly be used to detect never-ending loops.\n                     */\r\n                    maxredirs = (int)value;\r\n\r\n                    if (maxredirs > 1) // This is from php extension, not from native curl\r\n                        http_follow_location = true;\r\n\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_POST:\r\n                    /* Does this option serve a purpose anymore? Yes it does, when\n                       CURLOPT_POSTFIELDS isn't used and the POST data is read off the\n                       callback! */\r\n                    if ((bool)value)\r\n                    {\r\n                        if (httpreq != Curl_HttpReq.POST_FORM)\r\n                            httpreq = Curl_HttpReq.POST;\r\n                        opt_no_body = false; /* this is implied */\r\n                    }\r\n                    else\r\n                        httpreq = Curl_HttpReq.GET;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_POSTFIELDS:\r\n                    /*\n                     * Like above, but use static data instead of copying it.\n                     */\r\n                    postfields = value;\r\n                    /* Release old copied data. */\r\n                    str[(int)DupString.COPYPOSTFIELDS] = null;\r\n                    httpreq = Curl_HttpReq.POST;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_POSTFIELDSIZE:\r\n                    /*\n                     * The size of the POSTFIELD data to prevent libcurl to do strlen() to\n                     * figure it out. Enables binary posts.\n                     */\r\n                    bigsize = (long)value;\r\n\r\n                    if (postfieldsize < bigsize &&\r\n                       postfields == str[(int)DupString.COPYPOSTFIELDS])\r\n                    {\r\n                        /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */\r\n                        str[(int)DupString.COPYPOSTFIELDS] = null;\r\n                        postfields = null;\r\n                    }\r\n\r\n                    postfieldsize = bigsize;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_REFERER:\r\n                    /*\n                     * String to set in the HTTP Referer: field.\n                     */\r\n                    //(MB) what is data.change structure? why it exists?\r\n                    //if(data.change.referer_alloc) {\r\n                    //  free(data.change.referer);\r\n                    //  data.change.referer_alloc = FALSE;\r\n                    //}\r\n                    str[(int)DupString.SET_REFERER] = value;\r\n\r\n                    //data->change.referer = data->set.str[STRING_SET_REFERER];\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_USERAGENT:\r\n                    /*\n                     * String to use in the HTTP User-Agent field\n                     */\r\n                    str[(int)DupString.USERAGENT] = value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HEADER:\r\n                    /*\r\n                     * Set to include the header in the general data output stream.\r\n                     */\r\n                    include_header = (bool)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HEADERFUNCTION:\r\n                    /*\r\n                     * Set header write callback\r\n                     */\r\n                    fwrite_header = (PhpCallback)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_WRITEFUNCTION:\r\n                    /*\r\n                     * Set data write callback\r\n                     */\r\n                    fwrite_func = (PhpCallback)value;\r\n\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HTTPHEADER:\r\n                    /*\n                     * Set a list with HTTP headers to use (or replace internals with)\n                     */\r\n                    headers = (PhpArray)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HTTPGET:\r\n                    /*\n                     * Set to force us do HTTP GET\n                     */\r\n                    if ((bool)value)\r\n                    {\r\n                        httpreq = Curl_HttpReq.GET;\r\n                        upload = false; /* switch off upload */\r\n                        opt_no_body = false; /* this is implied */\r\n                    }\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HTTP_VERSION:\r\n                    /*\n                     * This sets a requested HTTP version to be used. The value is one of\n                     * the listed enums in curl/curl.h.\n                     */\r\n                    httpversion = (CurlHttpVersion)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_INFILE:\r\n                    /*\n                     * FILE pointer to read the file to be uploaded from. Or possibly\n                     * used as argument to the read callback.\n                     */\r\n                    infile = (PhpResource)value;\r\n                    break;\r\n                case CurlOption.CURLOPT_INFILESIZE:\r\n                    /*\n                     * If known, this should inform curl about the file size of the\n                     * to-be-uploaded file.\n                     */\r\n                    infilesize = (long)value;\r\n                    break;\r\n                case CurlOption.CURLOPT_INFILESIZE_LARGE:\r\n                    /*\n                     * If known, this should inform curl about the file size of the\n                     * to-be-uploaded file.\n                     */\r\n                    infilesize = (long)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_URL:\r\n                    /*\n                     * The URL to fetch.\n                     */\r\n                    //if(data->change.url_alloc) {\r\n                    //  /* the already set URL is allocated, free it first! */\r\n                    //  free(data->change.url);\r\n                    //  data->change.url_alloc=FALSE;\r\n                    //}\r\n\r\n                    str[(int)DupString.SET_URL] = value;\r\n\r\n                    //data->change.url = data->set.str[STRING_SET_URL];\r\n                    break;\r\n                case CurlOption.CURLOPT_PORT:\r\n                    /*\n                     * The port number to use when getting the URL\n                     */\r\n                    useport = (int)value;\r\n                    break;\r\n                case CurlOption.CURLOPT_TIMEOUT:\r\n                    /*\n                     * The maximum time you allow curl to use for a single transfer\n                     * operation.\n                     */\r\n                    timeout = (int)value * 1000;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_CONNECTTIMEOUT:\r\n                    /*\n                     * The maximum time you allow curl to use to connect.\n                     */\r\n                    connecttimeout = (int)value * 1000;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_FILE:\r\n                    /*\r\n                     * FILE pointer to write to or include in the data write callback\r\n                     */\r\n                    outfile = (PhpResource)value;\r\n                    break;\r\n\r\n#if !CURL_DISABLE_PROXY\r\n\r\n                case CurlOption.CURLOPT_PROXYPORT:\r\n                    /*\r\n                     * Explicitly set HTTP proxy port number.\r\n                     */\r\n                    proxyport = (int)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_PROXYAUTH:\r\n                    /*\r\n                     * Set HTTP Authentication type BITMASK.\r\n                     */\r\n                    {\r\n                        CURLhttpAuth auth = (CURLhttpAuth)value;\r\n\r\n                        //(MB) PHP doesn't have this option although it is in curl\r\n                        //* the DIGEST_IE bit is only used to set a special marker, for all the\r\n                        //   rest we need to handle it as normal DIGEST */\r\n                        //data->state.authproxy.iestyle = (bool)((auth & CURLAUTH_DIGEST_IE)?\r\n                        //                                       TRUE:FALSE);\r\n\r\n                        //if(auth & CURLhttpAuth.CURLAUTH_DIGEST_IE) {\r\n                        //  auth |= CURLhttpAuth.CURLAUTH_DIGEST; /* set standard digest bit */\r\n                        //  auth &= ~CURLhttpAuth.CURLAUTH_DIGEST_IE; /* unset ie digest bit */\r\n                        //}\r\n                        /* switch off bits we can't support */\r\n#if !USE_NTLM\r\n                        auth &= ~CURLhttpAuth.CURLAUTH_NTLM; /* no NTLM without SSL */\r\n#endif\r\n#if !USE_HTTP_NEGOTIATE\r\n                        auth &= ~CURLhttpAuth.CURLAUTH_GSSNEGOTIATE; /* no GSS-Negotiate without GSSAPI or WINDOWS_SSPI */\r\n#endif\r\n                        //if(auth != 0)\r\n                        //  return CURLE_NOT_BUILT_IN; /* no supported types left! */\r\n\r\n                        proxyauth = auth;\r\n                    }\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_PROXY:\r\n                    /*\r\n                     * Set proxy server:port to use as HTTP proxy.\r\n                     *\r\n                     * If the proxy is set to \"\" we explicitly say that we don't want to use a\r\n                     * proxy (even though there might be environment variables saying so).\r\n                     *\r\n                     * Setting it to NULL, means no proxy but allows the environment variables\r\n                     * to decide for us.\r\n                     */\r\n                    str[(int)DupString.PROXY] = value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_PROXYTYPE:\r\n                    /*\r\n                     * Set proxy type. HTTP/HTTP_1_0/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME\r\n                     */\r\n                    if ((CURLproxyType)proxytype != CURLproxyType.CURLPROXY_HTTP)\r\n                        PhpException.ArgumentValueNotSupported(\"value\", ((CURLproxyType)proxytype).ToString());\r\n\r\n                    proxytype = (CURLproxyType)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_PROXYUSERPWD:\r\n                    /*\r\n                     * user:password needed to use the proxy\r\n                     */\r\n                    setstropt_userpwd(value,\r\n                        ref str[(int)DupString.PROXYUSERNAME],\r\n                        ref str[(int)DupString.PROXYPASSWORD]);\r\n\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_PROXYUSERNAME:\r\n                    /*\r\n                     * authentication user name to use in the operation\r\n                     */\r\n                    str[(int)DupString.PROXYUSERNAME] = value;\r\n                    break;\r\n                case CurlOption.CURLOPT_PROXYPASSWORD:\r\n                    /*\r\n                     * authentication password to use in the operation\r\n                     */\r\n                    str[(int)DupString.PROXYPASSWORD] = value;\r\n                    break;\r\n#endif\r\n\r\n                case CurlOption.CURLOPT_SSL_VERIFYPEER:\r\n                    /*\r\n                        * Enable peer SSL verifying.\r\n                        */\r\n\r\n                    if (((bool)value) == false)\r\n                        PhpException.ArgumentValueNotSupported(\"value\", false);\r\n\r\n                    ssl.VerifyPeer = (bool)value;\r\n                    break;\r\n\r\n\r\n                case CurlOption.CURLOPT_SSL_VERIFYHOST:\r\n                    /*\r\n                     * Enable verification of the CN contained in the peer certificate\r\n                     */\r\n\r\n                    if (((int)value) != 2)\r\n                        PhpException.ArgumentValueNotSupported(\"value\", (int)value);\r\n\r\n                    ssl.VerifyHost = (int)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_SSLCERT:\r\n                    /*\r\n                     * String that holds file name of the SSL certificate to use\r\n                     */\r\n                    str[(int)DupString.CERT] = value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_SSLCERTPASSWD:\r\n                    /*\r\n                     * String that holds the SSL or SSH private key password.\r\n                     */\r\n                    str[(int)DupString.KEY_PASSWD] = value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_NOBODY:\r\n                    /*\r\n                     * Do not include the body part in the output data stream.\r\n                     */\r\n                    opt_no_body = (bool)value;\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_HTTPAUTH:\r\n                    /*\r\n                     * Set HTTP Authentication type BITMASK.\r\n                     */\r\n                    {\r\n                        CURLhttpAuth auth = (CURLhttpAuth)value;\r\n\r\n                        // PHP doesn't have this option although it's in curl\r\n                        //* the DIGEST_IE bit is only used to set a special marker, for all the\r\n                        //   rest we need to handle it as normal DIGEST */\r\n                        //data->state.authhost.iestyle = (bool)((auth & CURLAUTH_DIGEST_IE)?\r\n                        //                                      TRUE:FALSE);\r\n\r\n                        //if(auth & CURLAUTH_DIGEST_IE) {\r\n                        //  auth |= CURLAUTH_DIGEST; /* set standard digest bit */\r\n                        //  auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */\r\n                        //}\r\n\r\n                        /* switch off bits we can't support */\r\n#if !USE_NTLM\r\n                        auth &= ~CURLhttpAuth.CURLAUTH_NTLM; /* no NTLM without SSL */\r\n#endif\r\n#if !USE_HTTP_NEGOTIATE\r\n                        auth &= ~CURLhttpAuth.CURLAUTH_GSSNEGOTIATE; /* no GSS-Negotiate without GSSAPI or WINDOWS_SSPI */\r\n#endif\r\n\r\n                        //if(auth != null)\r\n                        //  return CURLE_NOT_BUILT_IN; /* no supported types left! */\r\n\r\n                        httpauth = auth;\r\n                    }\r\n                    break;\r\n\r\n                case CurlOption.CURLOPT_USERPWD:\r\n                    /*\r\n                     * user:password to use in the operation\r\n                     */\r\n                    setstropt_userpwd(value,\r\n                        ref str[(int)DupString.USERNAME],\r\n                        ref str[(int)DupString.PASSWORD]);\r\n\r\n                    break;\r\n                case CurlOption.CURLOPT_USERNAME:\r\n                    /*\r\n                     * authentication user name to use in the operation\r\n                     */\r\n                    str[(int)DupString.USERNAME] = value;\r\n                    break;\r\n                case CurlOption.CURLOPT_PASSWORD:\r\n                    /*\r\n                     * authentication password to use in the operation\r\n                     */\r\n                    str[(int)DupString.PASSWORD] = value;\r\n                    break;\r\n\r\n\r\n#if !(CURL_DISABLE_COOKIES)\r\n                  //case CURLOPT_COOKIE:\r\n                  //  /*\r\n                  //   * Cookie string to send to the remote server in the request.\r\n                  //   */\r\n                  //  result = setstropt(&data->set.str[STRING_COOKIE],\r\n                  //                     va_arg(param, char *));\r\n                  //  break;\r\n\r\n                  case CurlOption.CURLOPT_COOKIEFILE:\r\n                    /*\r\n                     * Set cookie file to read and parse. Can be used multiple times.\r\n                     */\r\n\r\n                    /* append the cookie file name to the list of file names, and deal with\r\n                         them later */\r\n                    cookielist.Add((string) value );\r\n                    \r\n                    \r\n                    break;\r\n\r\n                  case CurlOption.CURLOPT_COOKIEJAR:\r\n                    /*\r\n                     * Set cookie file name to dump all cookies to when we're done.\r\n                     */\r\n                    str[(int)DupString.COOKIEJAR] = value;\r\n\r\n                    //*\r\n                    // * Activate the cookie parser. This may or may not already\r\n                    // * have been made.\r\n                    // */\r\n                    //data->cookies = Curl_cookie_init(data, NULL, data->cookies,\r\n                    //                                 data->set.cookiesession);\r\n                    break;\r\n#endif\r\n\r\n                  case CurlOption.CURLOPT_HTTPPOST:\r\n                    /*\r\n                     * Set to make us do HTTP POST\r\n                     */\r\n                    curl_httppost = value as CurlForm;\r\n                    httpreq = Curl_HttpReq.POST_FORM;\r\n                    opt_no_body = false; /* this is implied */\r\n                    break;\r\n\r\n                #region UNSUPPORTED OPTIONS\r\n\r\n                //case CurlOption.CURLOPT_CAINFO:\r\n                //    /*\r\n                //     * Set CA info for SSL connection. Specify file name of the CA certificate\r\n                //     */\r\n\r\n                //    //NOTE: Managed CURL uses CA in windows storage of certificates. It's not recommended to use this option\r\n                //    //PhpException.Throw(PhpError.Notice,\r\n                //    //    \"For performance reasons, you shouldn't add a client certificate with CAINFO option, just add it to your certificates storage.\"\r\n\r\n                //    str[(int)DupString.SSL_CAFILE] = value;\r\n                //    break;\r\n\r\n                //case CURLOPT_DNS_CACHE_TIMEOUT:\r\n                //  data->set.dns_cache_timeout = va_arg(param, long);\r\n                //  break;\r\n                //case CURLOPT_DNS_USE_GLOBAL_CACHE:\r\n                //{\r\n                //  /* remember we want this enabled */\r\n                //  long use_cache = va_arg(param, long);\r\n                //  data->set.global_dns_cache = (bool)(0 != use_cache);\r\n                //}\r\n                //break;\r\n                //case CURLOPT_SSL_CIPHER_LIST:\r\n                //  /* set a list of cipher we want to use in the SSL connection */\r\n                //  result = setstropt(&data->set.str[STRING_SSL_CIPHER_LIST],\r\n                //                     va_arg(param, char *));\r\n                //  break;\r\n\r\n                //case CURLOPT_RANDOM_FILE:\r\n                //  /*\r\n                //   * This is the path name to a file that contains random data to seed\r\n                //   * the random SSL stuff with. The file is only used for reading.\r\n                //   */\r\n                //  result = setstropt(&data->set.str[STRING_SSL_RANDOM_FILE],\r\n                //                     va_arg(param, char *));\r\n                //  break;\r\n                //case CURLOPT_EGDSOCKET:\r\n                //  /*\r\n                //   * The Entropy Gathering Daemon socket pathname\r\n                //   */\r\n                //  result = setstropt(&data->set.str[STRING_SSL_EGDSOCKET],\r\n                //                     va_arg(param, char *));\r\n                //  break;\r\n                //case CURLOPT_MAXCONNECTS:\r\n                //  /*\r\n                //   * Set the absolute number of maximum simultaneous alive connection that\r\n                //   * libcurl is allowed to have.\r\n                //   */\r\n                //  result = Curl_ch_connc(data, data->state.connc, va_arg(param, long));\r\n                //  break;\r\n                //case CURLOPT_FORBID_REUSE:\r\n                //  /*\r\n                //   * When this transfer is done, it must not be left to be reused by a\r\n                //   * subsequent transfer but shall be closed immediately.\r\n                //   */\r\n                //  data->set.reuse_forbid = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n                //case CURLOPT_FRESH_CONNECT:\r\n                //  /*\r\n                //   * This transfer shall not use a previously cached connection but\r\n                //   * should be made with a fresh new connect!\r\n                //   */\r\n                //  data->set.reuse_fresh = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n                //case CURLOPT_VERBOSE:\r\n                //  /*\r\n                //   * Verbose means infof() calls that give a lot of information about\r\n                //   * the connection and transfer procedures as well as internal choices.\r\n                //   */\r\n                //  data->set.verbose = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n                //case CURLOPT_NOPROGRESS:\r\n                //  /*\r\n                //   * Shut off the internal supported progress meter\r\n                //   */\r\n                //  data->set.hide_progress = (bool)(0 != va_arg(param, long));\r\n                //  if(data->set.hide_progress)\r\n                //    data->progress.flags |= PGRS_HIDE;\r\n                //  else\r\n                //    data->progress.flags &= ~PGRS_HIDE;\r\n                //  break;\r\n\r\n                //case CURLOPT_FAILONERROR:\r\n                //  /*\r\n                //   * Don't output the >=300 error code HTML-page, but instead only\r\n                //   * return error.\r\n                //   */\r\n                //  data->set.http_fail_on_error = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n                //  case CURLOPT_FILETIME:\r\n                //    /*\r\n                //     * Try to get the file time of the remote document. The time will\r\n                //     * later (possibly) become available using curl_easy_getinfo().\r\n                //     */\r\n                //    data->set.get_filetime = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_FTP_CREATE_MISSING_DIRS:\r\n                //    /*\r\n                //     * An FTP option that modifies an upload to create missing directories on\r\n                //     * the server.\r\n                //     */\r\n                //    switch(va_arg(param, long)) {\r\n                //    case 0:\r\n                //      data->set.ftp_create_missing_dirs = 0;\r\n                //      break;\r\n                //    case 1:\r\n                //      data->set.ftp_create_missing_dirs = 1;\r\n                //      break;\r\n                //    case 2:\r\n                //      data->set.ftp_create_missing_dirs = 2;\r\n                //      break;\r\n                //    default:\r\n                //      /* reserve other values for future use */\r\n                //      result = CURLE_UNKNOWN_OPTION;\r\n                //      break;\r\n                //    }\r\n                //    break;\r\n                //  case CURLOPT_SERVER_RESPONSE_TIMEOUT:\r\n                //    /*\r\n                //     * Option that specifies how quickly an server response must be obtained\r\n                //     * before it is considered failure. For pingpong protocols.\r\n                //     */\r\n                //    data->set.server_response_timeout = va_arg( param , long ) * 1000;\r\n                //    break;\r\n                //  case CURLOPT_TFTP_BLKSIZE:\r\n                //    /*\r\n                //     * TFTP option that specifies the block size to use for data transmission\r\n                //     */\r\n                //    data->set.tftp_blksize = va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_DIRLISTONLY:\r\n                //    /*\r\n                //     * An option that changes the command to one that asks for a list\r\n                //     * only, no file info details.\r\n                //     */\r\n                //    data->set.ftp_list_only = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_APPEND:\r\n                //    /*\r\n                //     * We want to upload and append to an existing file.\r\n                //     */\r\n                //    data->set.ftp_append = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_FTP_FILEMETHOD:\r\n                //    /*\r\n                //     * How do access files over FTP.\r\n                //     */\r\n                //    data->set.ftp_filemethod = (curl_ftpfile)va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_NETRC:\r\n                //    /*\r\n                //     * Parse the $HOME/.netrc file\r\n                //     */\r\n                //    data->set.use_netrc = (enum CURL_NETRC_OPTION)va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_NETRC_FILE:\r\n                //    /*\r\n                //     * Use this file instead of the $HOME/.netrc file\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_NETRC_FILE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_TRANSFERTEXT:\r\n                //    /*\r\n                //     * This option was previously named 'FTPASCII'. Renamed to work with\r\n                //     * more protocols than merely FTP.\r\n                //     *\r\n                //     * Transfer using ASCII (instead of BINARY).\r\n                //     */\r\n                //    data->set.prefer_ascii = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_TIMECONDITION:\r\n                //    /*\r\n                //     * Set HTTP time condition. This must be one of the defines in the\r\n                //     * curl/curl.h header file.\r\n                //     */\r\n                //    data->set.timecondition = (curl_TimeCond)va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_TIMEVALUE:\r\n                //    /*\r\n                //     * This is the value to compare with the remote document with the\r\n                //     * method set with CURLOPT_TIMECONDITION\r\n                //     */\r\n                //    data->set.timevalue = (time_t)va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_SSLVERSION:\r\n                //    /*\r\n                //     * Set explicit SSL version to try to connect with, as some SSL\r\n                //     * implementations are lame.\r\n                //     */\r\n                //    data->set.ssl.version = va_arg(param, long);\r\n                //    break;\r\n\r\n                //#ifndef CURL_DISABLE_HTTP\r\n                //  case CURLOPT_AUTOREFERER:\r\n                //    /*\r\n                //     * Switch on automatic referer that gets set if curl follows locations.\r\n                //     */\r\n                //    data->set.http_auto_referer = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_ENCODING:\r\n                //    /*\r\n                //     * String to use at the value of Accept-Encoding header.\r\n                //     *\r\n                //     * If the encoding is set to \"\" we use an Accept-Encoding header that\r\n                //     * encompasses all the encodings we support.\r\n                //     * If the encoding is set to NULL we don't send an Accept-Encoding header\r\n                //     * and ignore an received Content-Encoding header.\r\n                //     *\r\n                //     */\r\n                //    argptr = va_arg(param, char *);\r\n                //    result = setstropt(&data->set.str[STRING_ENCODING],\r\n                //                       (argptr && !*argptr)?\r\n                //                       (char *) ALL_CONTENT_ENCODINGS: argptr);\r\n                //    break;\r\n\r\n                //case CURLOPT_UNRESTRICTED_AUTH:\r\n                //  /*\r\n                //   * Send authentication (user+password) when following locations, even when\r\n                //   * hostname changed.\r\n                //   */\r\n                //  data->set.http_disable_hostname_check_before_authentication =\r\n                //    (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n\r\n                //case CURLOPT_POSTREDIR:\r\n                //{\r\n                //  /*\r\n                //   * Set the behaviour of POST when redirecting\r\n                //   * CURL_REDIR_GET_ALL - POST is changed to GET after 301 and 302\r\n                //   * CURL_REDIR_POST_301 - POST is kept as POST after 301\r\n                //   * CURL_REDIR_POST_302 - POST is kept as POST after 302\r\n                //   * CURL_REDIR_POST_ALL - POST is kept as POST after 301 and 302\r\n                //   * other - POST is kept as POST after 301 and 302\r\n                //   */\r\n                //  long postRedir = va_arg(param, long);\r\n                //  data->set.post301 = (bool)((postRedir & CURL_REDIR_POST_301)?TRUE:FALSE);\r\n                //  data->set.post302 = (bool)((postRedir & CURL_REDIR_POST_302)?TRUE:FALSE);\r\n                //}\r\n                //break;\r\n\r\n\r\n                //case CURLOPT_COPYPOSTFIELDS:\r\n                //  /*\r\n                //   * A string with POST data. Makes curl HTTP POST. Even if it is NULL.\r\n                //   * If needed, CURLOPT_POSTFIELDSIZE must have been set prior to\r\n                //   *  CURLOPT_COPYPOSTFIELDS and not altered later.\r\n                //   */\r\n                //  argptr = va_arg(param, char *);\r\n\r\n                //  if(!argptr || data->set.postfieldsize == -1)\r\n                //    result = setstropt(&data->set.str[STRING_COPYPOSTFIELDS], argptr);\r\n                //  else {\r\n                //    /*\r\n                //     *  Check that requested length does not overflow the size_t type.\r\n                //     */\r\n\r\n                //    if((data->set.postfieldsize < 0) ||\r\n                //       ((sizeof(curl_off_t) != sizeof(size_t)) &&\r\n                //        (data->set.postfieldsize > (curl_off_t)((size_t)-1))))\r\n                //      result = CURLE_OUT_OF_MEMORY;\r\n                //    else {\r\n                //      char * p;\r\n\r\n                //      (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);\r\n\r\n                //      /* Allocate even when size == 0. This satisfies the need of possible\r\n                //         later address compare to detect the COPYPOSTFIELDS mode, and\r\n                //         to mark that postfields is used rather than read function or\r\n                //         form data.\r\n                //      */\r\n                //      p = malloc((size_t)(data->set.postfieldsize?\r\n                //                          data->set.postfieldsize:1));\r\n\r\n                //      if(!p)\r\n                //        result = CURLE_OUT_OF_MEMORY;\r\n                //      else {\r\n                //        if(data->set.postfieldsize)\r\n                //          memcpy(p, argptr, (size_t)data->set.postfieldsize);\r\n\r\n                //        data->set.str[STRING_COPYPOSTFIELDS] = p;\r\n                //      }\r\n                //    }\r\n                //  }\r\n\r\n                //  data->set.postfields = data->set.str[STRING_COPYPOSTFIELDS];\r\n                //  data->set.httpreq = HTTPREQ_POST;\r\n                //  break;\r\n\r\n                //case CURLOPT_POSTFIELDSIZE_LARGE:\r\n                //  /*\r\n                //   * The size of the POSTFIELD data to prevent libcurl to do strlen() to\r\n                //   * figure it out. Enables binary posts.\r\n                //   */\r\n                //  bigsize = va_arg(param, curl_off_t);\r\n\r\n                //  if(data->set.postfieldsize < bigsize &&\r\n                //     data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) {\r\n                //    /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */\r\n                //    (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);\r\n                //    data->set.postfields = NULL;\r\n                //  }\r\n\r\n                //  data->set.postfieldsize = bigsize;\r\n                //  break;\r\n\r\n\r\n                //case CURLOPT_HTTP200ALIASES:\r\n                //  /*\r\n                //   * Set a list of aliases for HTTP 200 in response header\r\n                //   */\r\n                //  data->set.http200aliases = va_arg(param, struct curl_slist *);\r\n                //  break;\r\n\r\n                //#if !(CURL_DISABLE_COOKIES)\r\n                //  case CURLOPT_COOKIE:\r\n                //    /*\r\n                //     * Cookie string to send to the remote server in the request.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_COOKIE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n\r\n                //  case CURLOPT_COOKIESESSION:\r\n                //    /*\r\n                //     * Set this option to TRUE to start a new \"cookie session\". It will\r\n                //     * prevent the forthcoming read-cookies-from-file actions to accept\r\n                //     * cookies that are marked as being session cookies, as they belong to a\r\n                //     * previous session.\r\n                //     *\r\n                //     * In the original Netscape cookie spec, \"session cookies\" are cookies\r\n                //     * with no expire date set. RFC2109 describes the same action if no\r\n                //     * 'Max-Age' is set and RFC2965 includes the RFC2109 description and adds\r\n                //     * a 'Discard' action that can enforce the discard even for cookies that\r\n                //     * have a Max-Age.\r\n                //     *\r\n                //     * We run mostly with the original cookie spec, as hardly anyone implements\r\n                //     * anything else.\r\n                //     */\r\n                //    data->set.cookiesession = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_COOKIELIST:\r\n                //    argptr = va_arg(param, char *);\r\n\r\n                //    if(argptr == NULL)\r\n                //      break;\r\n\r\n                //    if(Curl_raw_equal(argptr, \"ALL\")) {\r\n                //      /* clear all cookies */\r\n                //      Curl_cookie_clearall(data->cookies);\r\n                //      break;\r\n                //    }\r\n                //    else if(Curl_raw_equal(argptr, \"SESS\")) {\r\n                //      /* clear session cookies */\r\n                //      Curl_cookie_clearsess(data->cookies);\r\n                //      break;\r\n                //    }\r\n                //    else if(Curl_raw_equal(argptr, \"FLUSH\")) {\r\n                //      /* flush cookies to file */\r\n                //      Curl_flush_cookies(data, 0);\r\n                //      break;\r\n                //    }\r\n\r\n                //    if(!data->cookies)\r\n                //      /* if cookie engine was not running, activate it */\r\n                //      data->cookies = Curl_cookie_init(data, NULL, NULL, TRUE);\r\n\r\n                //    argptr = strdup(argptr);\r\n                //    if(!argptr) {\r\n                //      result = CURLE_OUT_OF_MEMORY;\r\n                //      break;\r\n                //    }\r\n\r\n                //    if(checkprefix(\"Set-Cookie:\", argptr))\r\n                //      /* HTTP Header format line */\r\n                //      Curl_cookie_add(data, data->cookies, TRUE, argptr + 11, NULL, NULL);\r\n\r\n                //    else\r\n                //      /* Netscape format line */\r\n                //      Curl_cookie_add(data, data->cookies, FALSE, argptr, NULL, NULL);\r\n\r\n                //    free(argptr);\r\n                //    break;\r\n                //#endif /* CURL_DISABLE_COOKIES */\r\n\r\n\r\n                //#endif   /* CURL_DISABLE_HTTP */\r\n\r\n                //#if !CURL_DISABLE_PROXY\r\n\r\n                //case CurlOption.CURLOPT_HTTPPROXYTUNNEL:\r\n                //    /*\r\n                //     * Tunnel operations through the proxy instead of normal proxy use\r\n                //     */\r\n                //    tunnel_thru_httpproxy = (bool)value;\r\n                //    break;\r\n\r\n                //  case CURLOPT_PROXY_TRANSFER_MODE:\r\n                //    /*\r\n                //     * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy\r\n                //     */\r\n                //    switch (va_arg(param, long)) {\r\n                //    case 0:\r\n                //      data->set.proxy_transfer_mode = FALSE;\r\n                //      break;\r\n                //    case 1:\r\n                //      data->set.proxy_transfer_mode = TRUE;\r\n                //      break;\r\n                //    default:\r\n                //      /* reserve other values for future use */\r\n                //      result = CURLE_UNKNOWN_OPTION;\r\n                //      break;\r\n                //    }\r\n                //    break;\r\n                //#endif   /* CURL_DISABLE_PROXY */\r\n\r\n                //#if HAVE_GSSAPI || USE_WINDOWS_SSPI\r\n                //  case CURLOPT_SOCKS5_GSSAPI_SERVICE:\r\n                //    /*\r\n                //     * Set gssapi service name\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SOCKS5_GSSAPI_SERVICE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_SOCKS5_GSSAPI_NEC:\r\n                //    /*\r\n                //     * set flag for nec socks5 support\r\n                //     */\r\n                //    data->set.socks5_gssapi_nec = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //#endif\r\n\r\n                //case CURLOPT_WRITEHEADER:\r\n                //  /*\r\n                //   * Custom pointer to pass the header write callback function\r\n                //   */\r\n                //  data->set.writeheader = (void *)va_arg(param, void *);\r\n                //  break;\r\n                //case CURLOPT_ERRORBUFFER:\r\n                //  /*\r\n                //   * Error buffer provided by the caller to get the human readable\r\n                //   * error string in.\r\n                //   */\r\n                //  data->set.errorbuffer = va_arg(param, char *);\r\n                //  break;\r\n\r\n                //case CURLOPT_FTPPORT:\r\n                //  /*\r\n                //   * Use FTP PORT, this also specifies which IP address to use\r\n                //   */\r\n                //  result = setstropt(&data->set.str[STRING_FTPPORT],\r\n                //                     va_arg(param, char *));\r\n                //  data->set.ftp_use_port = (bool)(NULL != data->set.str[STRING_FTPPORT]);\r\n                //  break;\r\n\r\n                //case CURLOPT_FTP_USE_EPRT:\r\n                //  data->set.ftp_use_eprt = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n                //case CURLOPT_FTP_USE_EPSV:\r\n                //  data->set.ftp_use_epsv = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n                //case CURLOPT_FTP_USE_PRET:\r\n                //  data->set.ftp_use_pret = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n                //case CURLOPT_FTP_SSL_CCC:\r\n                //  data->set.ftp_ccc = (curl_ftpccc)va_arg(param, long);\r\n                //  break;\r\n\r\n                //case CURLOPT_FTP_SKIP_PASV_IP:\r\n                //  /*\r\n                //   * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the\r\n                //   * bypass of the IP address in PASV responses.\r\n                //   */\r\n                //  data->set.ftp_skip_ip = (bool)(0 != va_arg(param, long));\r\n                //  break;\r\n\r\n                //case CURLOPT_LOW_SPEED_LIMIT:\r\n                //  /*\r\n                //   * The low speed limit that if transfers are below this for\r\n                //   * CURLOPT_LOW_SPEED_TIME, the transfer is aborted.\r\n                //   */\r\n                //  data->set.low_speed_limit=va_arg(param, long);\r\n                //  break;\r\n                //case CURLOPT_MAX_SEND_SPEED_LARGE:\r\n                //  /*\r\n                //   * When transfer uploads are faster then CURLOPT_MAX_SEND_SPEED_LARGE\r\n                //   * bytes per second the transfer is throttled..\r\n                //   */\r\n                //  data->set.max_send_speed=va_arg(param, curl_off_t);\r\n                //  break;\r\n                //case CURLOPT_MAX_RECV_SPEED_LARGE:\r\n                //  /*\r\n                //   * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per\r\n                //   * second the transfer is throttled..\r\n                //   */\r\n                //  data->set.max_recv_speed=va_arg(param, curl_off_t);\r\n                //  break;\r\n                //case CURLOPT_LOW_SPEED_TIME:\r\n                //  /*\r\n                //   * The low speed time that if transfers are below the set\r\n                //   * CURLOPT_LOW_SPEED_LIMIT during this time, the transfer is aborted.\r\n                //   */\r\n                //  data->set.low_speed_time=va_arg(param, long);\r\n                //  break;\r\n\r\n                //case CurlOption.CURLOPT_TIMEOUT_MS:\r\n                //  data.set.timeout = (long)value;\r\n                //  break;\r\n\r\n\r\n                //case CURLOPT_CONNECTTIMEOUT_MS:\r\n                //  data->set.connecttimeout = va_arg(param, long);\r\n                //  break;\r\n\r\n\r\n                //  case CURLOPT_POSTQUOTE:\r\n                //    /*\r\n                //     * List of RAW FTP commands to use after a transfer\r\n                //     */\r\n                //    data->set.postquote = va_arg(param, struct curl_slist *);\r\n                //    break;\r\n                //  case CURLOPT_PREQUOTE:\r\n                //    /*\r\n                //     * List of RAW FTP commands to use prior to RETR (Wesley Laxton)\r\n                //     */\r\n                //    data->set.prequote = va_arg(param, struct curl_slist *);\r\n                //    break;\r\n                //  case CURLOPT_QUOTE:\r\n                //    /*\r\n                //     * List of RAW FTP commands to use before a transfer\r\n                //     */\r\n                //    data->set.quote = va_arg(param, struct curl_slist *);\r\n                //    break;\r\n                //  case CURLOPT_RESOLVE:\r\n                //    /*\r\n                //     * List of NAME:[address] names to populate the DNS cache with\r\n                //     * Prefix the NAME with dash (-) to _remove_ the name from the cache.\r\n                //     *\r\n                //     * Names added with this API will remain in the cache until explicitly\r\n                //     * removed or the handle is cleaned up.\r\n                //     *\r\n                //     * This API can remove any name from the DNS cache, but only entries\r\n                //     * that aren't actually in use right now will be pruned immediately.\r\n                //     */\r\n                //    data->set.resolve = va_arg(param, struct curl_slist *);\r\n                //    data->change.resolve = data->set.resolve;\r\n                //    break;\r\n                //  case CURLOPT_PROGRESSFUNCTION:\r\n                //    /*\r\n                //     * Progress callback function\r\n                //     */\r\n                //    data->set.fprogress = va_arg(param, curl_progress_callback);\r\n                //    if(data->set.fprogress)\r\n                //      data->progress.callback = TRUE; /* no longer internal */\r\n                //    else\r\n                //      data->progress.callback = FALSE; /* NULL enforces internal */\r\n\r\n                //    break;\r\n                //  case CURLOPT_PROGRESSDATA:\r\n                //    /*\r\n                //     * Custom client data to pass to the progress callback\r\n                //     */\r\n                //    data->set.progress_client = va_arg(param, void *);\r\n                //    break;\r\n\r\n                //#ifndef CURL_DISABLE_PROXY\r\n\r\n                //  case CURLOPT_NOPROXY:\r\n                //    /*\r\n                //     * proxy exception list\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_NOPROXY],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //#endif\r\n\r\n                //  case CURLOPT_RANGE:\r\n                //    /*\r\n                //     * What range of the file you want to transfer\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SET_RANGE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_RESUME_FROM:\r\n                //    /*\r\n                //     * Resume transfer at the give file position\r\n                //     */\r\n                //    data->set.set_resume_from = va_arg(param, long);\r\n                //    break;\r\n                //  case CURLOPT_RESUME_FROM_LARGE:\r\n                //    /*\r\n                //     * Resume transfer at the give file position\r\n                //     */\r\n                //    data->set.set_resume_from = va_arg(param, curl_off_t);\r\n                //    break;\r\n                //  case CURLOPT_DEBUGFUNCTION:\r\n                //    /*\r\n                //     * stderr write callback.\r\n                //     */\r\n                //    data->set.fdebug = va_arg(param, curl_debug_callback);\r\n                //    /*\r\n                //     * if the callback provided is NULL, it'll use the default callback\r\n                //     */\r\n                //    break;\r\n                //  case CURLOPT_DEBUGDATA:\r\n                //    /*\r\n                //     * Set to a void * that should receive all error writes. This\r\n                //     * defaults to CURLOPT_STDERR for normal operations.\r\n                //     */\r\n                //    data->set.debugdata = va_arg(param, void *);\r\n                //    break;\r\n                //  case CURLOPT_STDERR:\r\n                //    /*\r\n                //     * Set to a FILE * that should receive all error writes. This\r\n                //     * defaults to stderr for normal operations.\r\n                //     */\r\n                //    data->set.err = va_arg(param, FILE *);\r\n                //    if(!data->set.err)\r\n                //      data->set.err = stderr;\r\n                //    break;\r\n                //  case CURLOPT_WRITEFUNCTION:\r\n                //    /*\r\n                //     * Set data write callback\r\n                //     */\r\n                //    data->set.fwrite_func = va_arg(param, curl_write_callback);\r\n                //    if(!data->set.fwrite_func) {\r\n                //      data->set.is_fwrite_set = 0;\r\n                //      /* When set to NULL, reset to our internal default function */\r\n                //      data->set.fwrite_func = (curl_write_callback)fwrite;\r\n                //    }\r\n                //    else\r\n                //      data->set.is_fwrite_set = 1;\r\n                //    break;\r\n                //  case CURLOPT_READFUNCTION:\r\n                //    /*\r\n                //     * Read data callback\r\n                //     */\r\n                //    data->set.fread_func = va_arg(param, curl_read_callback);\r\n                //    if(!data->set.fread_func) {\r\n                //      data->set.is_fread_set = 0;\r\n                //      /* When set to NULL, reset to our internal default function */\r\n                //      data->set.fread_func = (curl_read_callback)fread;\r\n                //    }\r\n                //    else\r\n                //      data->set.is_fread_set = 1;\r\n                //    break;\r\n                //  case CURLOPT_SEEKFUNCTION:\r\n                //    /*\r\n                //     * Seek callback. Might be NULL.\r\n                //     */\r\n                //    data->set.seek_func = va_arg(param, curl_seek_callback);\r\n                //    break;\r\n                //  case CURLOPT_SEEKDATA:\r\n                //    /*\r\n                //     * Seek control callback. Might be NULL.\r\n                //     */\r\n                //    data->set.seek_client = va_arg(param, void *);\r\n                //    break;\r\n                //  case CURLOPT_CONV_FROM_NETWORK_FUNCTION:\r\n                //    /*\r\n                //     * \"Convert from network encoding\" callback\r\n                //     */\r\n                //    data->set.convfromnetwork = va_arg(param, curl_conv_callback);\r\n                //    break;\r\n                //  case CURLOPT_CONV_TO_NETWORK_FUNCTION:\r\n                //    /*\r\n                //     * \"Convert to network encoding\" callback\r\n                //     */\r\n                //    data->set.convtonetwork = va_arg(param, curl_conv_callback);\r\n                //    break;\r\n                //  case CURLOPT_CONV_FROM_UTF8_FUNCTION:\r\n                //    /*\r\n                //     * \"Convert from UTF-8 encoding\" callback\r\n                //     */\r\n                //    data->set.convfromutf8 = va_arg(param, curl_conv_callback);\r\n                //    break;\r\n                //  case CURLOPT_IOCTLFUNCTION:\r\n                //    /*\r\n                //     * I/O control callback. Might be NULL.\r\n                //     */\r\n                //    data->set.ioctl_func = va_arg(param, curl_ioctl_callback);\r\n                //    break;\r\n                //  case CURLOPT_IOCTLDATA:\r\n                //    /*\r\n                //     * I/O control data pointer. Might be NULL.\r\n                //     */\r\n                //    data->set.ioctl_client = va_arg(param, void *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSLCERTTYPE:\r\n                //    /*\r\n                //     * String that holds file type of the SSL certificate to use\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_CERT_TYPE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_SSLKEY:\r\n                //    /*\r\n                //     * String that holds file name of the SSL key to use\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_KEY],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_SSLKEYTYPE:\r\n                //    /*\r\n                //     * String that holds file type of the SSL key to use\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_KEY_TYPE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_SSLENGINE:\r\n                //    /*\r\n                //     * String that holds the SSL crypto engine.\r\n                //     */\r\n                //    argptr = va_arg(param, char *);\r\n                //    if(argptr && argptr[0])\r\n                //      result = Curl_ssl_set_engine(data, argptr);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSLENGINE_DEFAULT:\r\n                //    /*\r\n                //     * flag to set engine as default.\r\n                //     */\r\n                //    result = Curl_ssl_set_engine_default(data);\r\n                //    break;\r\n                //  case CURLOPT_CRLF:\r\n                //    /*\r\n                //     * Kludgy option to enable CRLF conversions. Subject for removal.\r\n                //     */\r\n                //    data->set.crlf = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_INTERFACE:\r\n                //    /*\r\n                //     * Set what interface or address/hostname to bind the socket to when\r\n                //     * performing an operation and thus what from-IP your connection will use.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_DEVICE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_LOCALPORT:\r\n                //    /*\r\n                //     * Set what local port to bind the socket to when performing an operation.\r\n                //     */\r\n                //    data->set.localport = curlx_sltous(va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_LOCALPORTRANGE:\r\n                //    /*\r\n                //     * Set number of local ports to try, starting with CURLOPT_LOCALPORT.\r\n                //     */\r\n                //    data->set.localportrange = curlx_sltosi(va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_KRBLEVEL:\r\n                //    /*\r\n                //     * A string that defines the kerberos security level.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_KRB_LEVEL],\r\n                //                       va_arg(param, char *));\r\n                //    data->set.krb = (bool)(NULL != data->set.str[STRING_KRB_LEVEL]);\r\n                //    break;\r\n\r\n                //#ifdef USE_SSLEAY\r\n                //    /* since these two options are only possible to use on an OpenSSL-\r\n                //       powered libcurl we #ifdef them on this condition so that libcurls\r\n                //       built against other SSL libs will return a proper error when trying\r\n                //       to set this option! */\r\n                //  case CURLOPT_SSL_CTX_FUNCTION:\r\n                //    /*\r\n                //     * Set a SSL_CTX callback\r\n                //     */\r\n                //    data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);\r\n                //    break;\r\n                //  case CURLOPT_SSL_CTX_DATA:\r\n                //    /*\r\n                //     * Set a SSL_CTX callback parameter pointer\r\n                //     */\r\n                //    data->set.ssl.fsslctxp = va_arg(param, void *);\r\n                //    break;\r\n                //  case CURLOPT_CERTINFO:\r\n                //    data->set.ssl.certinfo = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //#endif\r\n\r\n                //  case CURLOPT_CAPATH:\r\n                //    /*\r\n                //     * Set CA path info for SSL connection. Specify directory name of the CA\r\n                //     * certificates which have been prepared using openssl c_rehash utility.\r\n                //     */\r\n                //    /* This does not work on windows. */\r\n                //    result = setstropt(&data->set.str[STRING_SSL_CAPATH],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_CRLFILE:\r\n                //    /*\r\n                //     * Set CRL file info for SSL connection. Specify file name of the CRL\r\n                //     * to check certificates revocation\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSL_CRLFILE],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_ISSUERCERT:\r\n                //    /*\r\n                //     * Set Issuer certificate file\r\n                //     * to check certificates issuer\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSL_ISSUERCERT],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_TELNETOPTIONS:\r\n                //    /*\r\n                //     * Set a linked list of telnet options\r\n                //     */\r\n                //    data->set.telnet_options = va_arg(param, struct curl_slist *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_BUFFERSIZE:\r\n                //    /*\r\n                //     * The application kindly asks for a differently sized receive buffer.\r\n                //     * If it seems reasonable, we'll use it.\r\n                //     */\r\n                //    data->set.buffer_size = va_arg(param, long);\r\n\r\n                //    if((data->set.buffer_size> (BUFSIZE -1 )) ||\r\n                //       (data->set.buffer_size < 1))\r\n                //      data->set.buffer_size = 0; /* huge internal default */\r\n\r\n                //    break;\r\n\r\n                //  case CURLOPT_NOSIGNAL:\r\n                //    /*\r\n                //     * The application asks not to set any signal() or alarm() handlers,\r\n                //     * even when using a timeout.\r\n                //     */\r\n                //    data->set.no_signal = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_SHARE:\r\n                //  {\r\n                //    struct Curl_share *set;\r\n                //    set = va_arg(param, struct Curl_share *);\r\n\r\n                //    /* disconnect from old share, if any */\r\n                //    if(data->share) {\r\n                //      Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);\r\n\r\n                //      if(data->dns.hostcachetype == HCACHE_SHARED) {\r\n                //        data->dns.hostcache = NULL;\r\n                //        data->dns.hostcachetype = HCACHE_NONE;\r\n                //      }\r\n\r\n                //      if(data->share->cookies == data->cookies)\r\n                //        data->cookies = NULL;\r\n\r\n                //      data->share->dirty--;\r\n\r\n                //      Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);\r\n                //      data->share = NULL;\r\n                //    }\r\n\r\n                //    /* use new share if it set */\r\n                //    data->share = set;\r\n                //    if(data->share) {\r\n\r\n                //      Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);\r\n\r\n                //      data->share->dirty++;\r\n\r\n                //      if(data->share->hostcache) {\r\n                //        /* use shared host cache, first free the private one if any */\r\n                //        if(data->dns.hostcachetype == HCACHE_PRIVATE)\r\n                //          Curl_hash_destroy(data->dns.hostcache);\r\n\r\n                //        data->dns.hostcache = data->share->hostcache;\r\n                //        data->dns.hostcachetype = HCACHE_SHARED;\r\n                //      }\r\n                //#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)\r\n                //      if(data->share->cookies) {\r\n                //        /* use shared cookie list, first free own one if any */\r\n                //        if(data->cookies)\r\n                //          Curl_cookie_cleanup(data->cookies);\r\n                //        /* enable cookies since we now use a share that uses cookies! */\r\n                //        data->cookies = data->share->cookies;\r\n                //      }\r\n                //#endif   /* CURL_DISABLE_HTTP */\r\n                //      Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);\r\n\r\n                //    }\r\n                //    /* check for host cache not needed,\r\n                //     * it will be done by curl_easy_perform */\r\n                //  }\r\n                //  break;\r\n\r\n                //  case CURLOPT_PRIVATE:\r\n                //    /*\r\n                //     * Set private data pointer.\r\n                //     */\r\n                //    data->set.private_data = va_arg(param, void *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_MAXFILESIZE:\r\n                //    /*\r\n                //     * Set the maximum size of a file to download.\r\n                //     */\r\n                //    data->set.max_filesize = va_arg(param, long);\r\n                //    break;\r\n\r\n                //#ifdef USE_SSL\r\n                //  case CURLOPT_USE_SSL:\r\n                //    /*\r\n                //     * Make transfers attempt to use SSL/TLS.\r\n                //     */\r\n                //    data->set.ftp_ssl = (curl_usessl)va_arg(param, long);\r\n                //    break;\r\n                //#endif\r\n                //  case CURLOPT_FTPSSLAUTH:\r\n                //    /*\r\n                //     * Set a specific auth for FTP-SSL transfers.\r\n                //     */\r\n                //    data->set.ftpsslauth = (curl_ftpauth)va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_IPRESOLVE:\r\n                //    data->set.ipver = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_MAXFILESIZE_LARGE:\r\n                //    /*\r\n                //     * Set the maximum size of a file to download.\r\n                //     */\r\n                //    data->set.max_filesize = va_arg(param, curl_off_t);\r\n                //    break;\r\n\r\n                //  case CURLOPT_TCP_NODELAY:\r\n                //    /*\r\n                //     * Enable or disable TCP_NODELAY, which will disable/enable the Nagle\r\n                //     * algorithm\r\n                //     */\r\n                //    data->set.tcp_nodelay = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_FTP_ACCOUNT:\r\n                //    result = setstropt(&data->set.str[STRING_FTP_ACCOUNT],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_IGNORE_CONTENT_LENGTH:\r\n                //    data->set.ignorecl = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_CONNECT_ONLY:\r\n                //    /*\r\n                //     * No data transfer, set up connection and let application use the socket\r\n                //     */\r\n                //    data->set.connect_only = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_FTP_ALTERNATIVE_TO_USER:\r\n                //    result = setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_SOCKOPTFUNCTION:\r\n                //    /*\r\n                //     * socket callback function: called after socket() but before connect()\r\n                //     */\r\n                //    data->set.fsockopt = va_arg(param, curl_sockopt_callback);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SOCKOPTDATA:\r\n                //    /*\r\n                //     * socket callback data pointer. Might be NULL.\r\n                //     */\r\n                //    data->set.sockopt_client = va_arg(param, void *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_OPENSOCKETFUNCTION:\r\n                //    /*\r\n                //     * open/create socket callback function: called instead of socket(),\r\n                //     * before connect()\r\n                //     */\r\n                //    data->set.fopensocket = va_arg(param, curl_opensocket_callback);\r\n                //    break;\r\n\r\n                //  case CURLOPT_OPENSOCKETDATA:\r\n                //    /*\r\n                //     * socket callback data pointer. Might be NULL.\r\n                //     */\r\n                //    data->set.opensocket_client = va_arg(param, void *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSL_SESSIONID_CACHE:\r\n                //    data->set.ssl.sessionid = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n\r\n                //#ifdef USE_LIBSSH2\r\n                //    /* we only include SSH options if explicitly built to support SSH */\r\n                //  case CURLOPT_SSH_AUTH_TYPES:\r\n                //    data->set.ssh_auth_types = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSH_PUBLIC_KEYFILE:\r\n                //    /*\r\n                //     * Use this file instead of the $HOME/.ssh/id_dsa.pub file\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSH_PUBLIC_KEY],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSH_PRIVATE_KEYFILE:\r\n                //    /*\r\n                //     * Use this file instead of the $HOME/.ssh/id_dsa file\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSH_PRIVATE_KEY],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //  case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:\r\n                //    /*\r\n                //     * Option to allow for the MD5 of the host public key to be checked\r\n                //     * for validation purposes.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n                //#ifdef HAVE_LIBSSH2_KNOWNHOST_API\r\n                //  case CURLOPT_SSH_KNOWNHOSTS:\r\n                //    /*\r\n                //     * Store the file name to read known hosts from.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSH_KEYFUNCTION:\r\n                //    /* setting to NULL is fine since the ssh.c functions themselves will\r\n                //       then rever to use the internal default */\r\n                //    data->set.ssh_keyfunc = va_arg(param, curl_sshkeycallback);\r\n                //    break;\r\n\r\n                //  case CURLOPT_SSH_KEYDATA:\r\n                //    /*\r\n                //     * Custom client data to pass to the SSH keyfunc callback\r\n                //     */\r\n                //    data->set.ssh_keyfunc_userp = va_arg(param, void *);\r\n                //    break;\r\n                //#endif /* HAVE_LIBSSH2_KNOWNHOST_API */\r\n\r\n                //#endif /* USE_LIBSSH2 */\r\n\r\n                //  case CURLOPT_HTTP_TRANSFER_DECODING:\r\n                //    /*\r\n                //     * disable libcurl transfer encoding is used\r\n                //     */\r\n                //    data->set.http_te_skip = (bool)(0 == va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_HTTP_CONTENT_DECODING:\r\n                //    /*\r\n                //     * raw data passed to the application when content encoding is used\r\n                //     */\r\n                //    data->set.http_ce_skip = (bool)(0 == va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_NEW_FILE_PERMS:\r\n                //    /*\r\n                //     * Uses these permissions instead of 0644\r\n                //     */\r\n                //    data->set.new_file_perms = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_NEW_DIRECTORY_PERMS:\r\n                //    /*\r\n                //     * Uses these permissions instead of 0755\r\n                //     */\r\n                //    data->set.new_directory_perms = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_ADDRESS_SCOPE:\r\n                //    /*\r\n                //     * We always get longs when passed plain numericals, but for this value we\r\n                //     * know that an unsigned int will always hold the value so we blindly\r\n                //     * typecast to this type\r\n                //     */\r\n                //    data->set.scope = curlx_sltoui(va_arg(param, long));\r\n                //    break;\r\n\r\n                //  case CURLOPT_PROTOCOLS:\r\n                //    /* set the bitmask for the protocols that are allowed to be used for the\r\n                //       transfer, which thus helps the app which takes URLs from users or other\r\n                //       external inputs and want to restrict what protocol(s) to deal\r\n                //       with. Defaults to CURLPROTO_ALL. */\r\n                //    data->set.allowed_protocols = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_REDIR_PROTOCOLS:\r\n                //    /* set the bitmask for the protocols that libcurl is allowed to follow to,\r\n                //       as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs\r\n                //       to be set in both bitmasks to be allowed to get redirected to. Defaults\r\n                //       to all protocols except FILE and SCP. */\r\n                //    data->set.redir_protocols = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_MAIL_FROM:\r\n                //    result = setstropt(&data->set.str[STRING_MAIL_FROM],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_MAIL_RCPT:\r\n                //    /* get a list of mail recipients */\r\n                //    data->set.mail_rcpt = va_arg(param, struct curl_slist *);\r\n                //    break;\r\n\r\n                //  case CURLOPT_RTSP_REQUEST:\r\n                //    {\r\n                //      /*\r\n                //       * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...)\r\n                //       * Would this be better if the RTSPREQ_* were just moved into here?\r\n                //       */\r\n                //      long curl_rtspreq = va_arg(param, long);\r\n                //      Curl_RtspReq rtspreq = RTSPREQ_NONE;\r\n                //      switch(curl_rtspreq) {\r\n                //        case CURL_RTSPREQ_OPTIONS:\r\n                //          rtspreq = RTSPREQ_OPTIONS;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_DESCRIBE:\r\n                //          rtspreq = RTSPREQ_DESCRIBE;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_ANNOUNCE:\r\n                //          rtspreq = RTSPREQ_ANNOUNCE;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_SETUP:\r\n                //          rtspreq = RTSPREQ_SETUP;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_PLAY:\r\n                //          rtspreq = RTSPREQ_PLAY;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_PAUSE:\r\n                //          rtspreq = RTSPREQ_PAUSE;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_TEARDOWN:\r\n                //          rtspreq = RTSPREQ_TEARDOWN;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_GET_PARAMETER:\r\n                //          rtspreq = RTSPREQ_GET_PARAMETER;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_SET_PARAMETER:\r\n                //          rtspreq = RTSPREQ_SET_PARAMETER;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_RECORD:\r\n                //          rtspreq = RTSPREQ_RECORD;\r\n                //          break;\r\n\r\n                //        case CURL_RTSPREQ_RECEIVE:\r\n                //          rtspreq = RTSPREQ_RECEIVE;\r\n                //          break;\r\n                //        default:\r\n                //          rtspreq = RTSPREQ_NONE;\r\n                //      }\r\n\r\n                //      data->set.rtspreq = rtspreq;\r\n                //    break;\r\n                //    }\r\n\r\n\r\n                //  case CURLOPT_RTSP_SESSION_ID:\r\n                //    /*\r\n                //     * Set the RTSP Session ID manually. Useful if the application is\r\n                //     * resuming a previously established RTSP session\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_RTSP_SESSION_ID],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_RTSP_STREAM_URI:\r\n                //    /*\r\n                //     * Set the Stream URI for the RTSP request. Unless the request is\r\n                //     * for generic server options, the application will need to set this.\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_RTSP_STREAM_URI],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_RTSP_TRANSPORT:\r\n                //    /*\r\n                //     * The content of the Transport: header for the RTSP request\r\n                //     */\r\n                //    result = setstropt(&data->set.str[STRING_RTSP_TRANSPORT],\r\n                //                       va_arg(param, char *));\r\n                //    break;\r\n\r\n                //  case CURLOPT_RTSP_CLIENT_CSEQ:\r\n                //    /*\r\n                //     * Set the CSEQ number to issue for the next RTSP request. Useful if the\r\n                //     * application is resuming a previously broken connection. The CSEQ\r\n                //     * will increment from this new number henceforth.\r\n                //     */\r\n                //    data->state.rtsp_next_client_CSeq = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_RTSP_SERVER_CSEQ:\r\n                //    /* Same as the above, but for server-initiated requests */\r\n                //    data->state.rtsp_next_client_CSeq = va_arg(param, long);\r\n                //    break;\r\n\r\n                //  case CURLOPT_INTERLEAVEDATA:\r\n                //    data->set.rtp_out = va_arg(param, void *);\r\n                //    break;\r\n                //  case CURLOPT_INTERLEAVEFUNCTION:\r\n                //    /* Set the user defined RTP write function */\r\n                //    data->set.fwrite_rtp = va_arg(param, curl_write_callback);\r\n                //    break;\r\n\r\n                //  case CURLOPT_WILDCARDMATCH:\r\n                //    data->set.wildcardmatch = (bool)(0 != va_arg(param, long));\r\n                //    break;\r\n                //  case CURLOPT_CHUNK_BGN_FUNCTION:\r\n                //    data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);\r\n                //    break;\r\n                //  case CURLOPT_CHUNK_END_FUNCTION:\r\n                //    data->set.chunk_end = va_arg(param, curl_chunk_end_callback);\r\n                //    break;\r\n                //  case CURLOPT_FNMATCH_FUNCTION:\r\n                //    data->set.fnmatch = va_arg(param, curl_fnmatch_callback);\r\n                //    break;\r\n                //  case CURLOPT_CHUNK_DATA:\r\n                //    data->wildcard.customptr = va_arg(param, void *);\r\n                //    break;\r\n                //  case CURLOPT_FNMATCH_DATA:\r\n                //    data->set.fnmatch_data = va_arg(param, void *);\r\n                //    break;\r\n                //#ifdef USE_TLS_SRP\r\n                //  case CURLOPT_TLSAUTH_USERNAME:\r\n                //    result = setstropt(&data->set.str[STRING_TLSAUTH_USERNAME],\r\n                //                       va_arg(param, char *));\r\n                //    if (data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)\r\n                //      data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */\r\n                //    break;\r\n                //  case CURLOPT_TLSAUTH_PASSWORD:\r\n                //    result = setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD],\r\n                //                       va_arg(param, char *));\r\n                //    if (data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)\r\n                //      data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */\r\n                //    break;\r\n                //  case CURLOPT_TLSAUTH_TYPE:\r\n                //    if (strncmp((char *)va_arg(param, char *), \"SRP\", strlen(\"SRP\")) == 0)\r\n                //      data->set.ssl.authtype = CURL_TLSAUTH_SRP;\r\n                //    else\r\n                //      data->set.ssl.authtype = CURL_TLSAUTH_NONE;\r\n                //    break;\r\n                //#endif\r\n\r\n                #endregion\r\n\r\n                default:\r\n                    /* unknown tag and its companion, just ignore: */\r\n                    //result = CURLE_UNKNOWN_OPTION;\r\n                    PhpException.ArgumentValueNotSupported(\"option\", option.ToString());\r\n                    break;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        private static void setstropt_userpwd(object value, ref object userName, ref object password)\r\n        {\r\n            string strOption = PhpVariable.AsString(value);\r\n\r\n            if (strOption == null)\r\n            {\r\n                /* we treat a NULL passed in as a hint to clear existing info */\r\n                userName = null;\r\n                password = null;\r\n\r\n                return;\r\n            }\r\n\r\n            string[] parts = strOption.Split(':');\r\n            if (parts.Length > 1)\r\n            {\r\n                /* store username part of option */\r\n                userName = parts[0];\r\n                /* store password part of option */\r\n                password = parts[1];\r\n            }\r\n        }\r\n\r\n    };\r\n\r\n    #region Other curl structures (not used)\r\n\r\n    /*\n     * The 'connectdata' struct MUST have all the connection oriented stuff as we\n     * may have several simultaneous connections and connection structs in memory.\n     *\n     * The 'struct UserDefined' must only contain data that is set once to go for\n     * many (perhaps) independent connections. Values that are generated or\n     * calculated internally for the \"session handle\" must be defined within the\n     * 'struct UrlState' instead.\n     */\r\n    //internal struct SessionHandle\r\n    //{\r\n    //    //struct Names dns;\r\n    //    //struct Curl_multi *multi;    /* if non-NULL, points to the multi handle\r\n    //    //                                struct to which this \"belongs\" */\r\n    //    //struct Curl_one_easy *multi_pos; /* if non-NULL, points to its position\r\n    //    //                                    in multi controlling structure to assist\r\n    //    //                                    in removal. */\r\n    //    //struct Curl_share *share;    /* Share, handles global variable mutexing */\r\n    //    //struct SingleRequest req;    /* Request-specific data */\r\n    //    public UserDefined set;      /* values set by the libcurl user */\r\n    //    //  struct DynamicStatic change; /* possibly modified userdefined data */\r\n    //    //  struct CookieInfo *cookies;  /* the cookies, read from files and servers.\r\n    //    //                                  NOTE that the 'cookie' field in the\r\n    //    //                                  UserDefined struct defines if the \"engine\"\r\n    //    //                                  is to be used or not. */\r\n    //    //  struct Progress progress;    /* for all the progress meter data */\r\n    //    //  struct UrlState state;       /* struct for fields used for state info and\r\n    //    //                                  other dynamic purposes */\r\n    //    //  struct WildcardData wildcard; /* wildcard download state info */\r\n    //    //  struct PureInfo info;        /* stats, reports and info data */\r\n    //    //#if CURL_DOES_CONVERSIONS && HAVE_ICONV\r\n    //    //  iconv_t outbound_cd;         /* for translating to the network encoding */\r\n    //    //  iconv_t inbound_cd;          /* for translating from the network encoding */\r\n    //    //  iconv_t utf8_cd;             /* for translating to UTF8 */\r\n    //    //#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */\r\n    //    //  unsigned int magic;          /* set to a CURLEASY_MAGIC_NUMBER */\r\n    //};\r\n\r\n\r\n\r\n\r\n    /// <summary>\r\n    /// The connectdata struct contains all fields and variables that should be\r\n    /// unique for an entire connection.\r\n    /// </summary>\r\n    //internal struct ConnectData\r\n    //{\r\n    //    /// <summary>\r\n    //    /// 'data' is the CURRENT SessionHandle using this connection -- take great\r\n    //    ///  caution that this might very well vary between different times this\r\n    //    ///  connection is used!\r\n    //    /// </summary>\r\n    //    public SessionHandle data;\r\n\r\n    //    //  /* chunk is for HTTP chunked encoding, but is in the general connectdata\r\n    //    //     struct only because we can do just about any protocol through a HTTP proxy\r\n    //    //     and a HTTP proxy may in fact respond using chunked encoding */\r\n    //    //  struct Curl_chunker chunk;\r\n\r\n    //    //  bool inuse; /* This is a marker for the connection cache logic. If this is\r\n    //    //                 TRUE this handle is being used by an easy handle and cannot\r\n    //    //                 be used by any other easy handle without careful\r\n    //    //                 consideration (== only for pipelining). */\r\n\r\n    //    //  /**** Fields set when inited and not modified again */\r\n    //    //  long connectindex; /* what index in the connection cache connects index this\r\n    //    //                        particular struct has */\r\n\r\n    //    //  /* 'dns_entry' is the particular host we use. This points to an entry in the\r\n    //    //     DNS cache and it will not get pruned while locked. It gets unlocked in\r\n    //    //     Curl_done(). This entry will be NULL if the connection is re-used as then\r\n    //    //     there is no name resolve done. */\r\n    //    //  struct Curl_dns_entry *dns_entry;\r\n\r\n    //    //  /* 'ip_addr' is the particular IP we connected to. It points to a struct\r\n    //    //     within the DNS cache, so this pointer is only valid as long as the DNS\r\n    //    //     cache entry remains locked. It gets unlocked in Curl_done() */\r\n    //    //  Curl_addrinfo *ip_addr;\r\n\r\n    //    //  /* 'ip_addr_str' is the ip_addr data as a human readable string.\r\n    //    //     It remains available as long as the connection does, which is longer than\r\n    //    //     the ip_addr itself. */\r\n    //    //  char ip_addr_str[MAX_IPADR_LEN];\r\n\r\n    //    //  unsigned int scope;    /* address scope for IPv6 */\r\n\r\n    //    //  int socktype;  /* SOCK_STREAM or SOCK_DGRAM */\r\n\r\n    //    //  struct hostname host;\r\n    //    //  struct hostname proxy;\r\n\r\n    //    /// <summary>\r\n    //    /// which port to use locally\r\n    //    /// </summary>\r\n    //    public long port;\r\n\r\n    //    /// <summary>\r\n    //    /// what remote port to connect to,\r\n    //    /// not the proxy port!\r\n    //    /// </summary>\r\n    //    public ushort remote_port;\r\n\r\n    //    //  /* 'primary_ip' and 'primary_port' get filled with peer's numerical\r\n    //    //     ip address and port number whenever an outgoing connection is\r\n    //    //     *attemted* from the primary socket to a remote address. When more\r\n    //    //     than one address is tried for a connection these will hold data\r\n    //    //     for the last attempt. When the connection is actualy established\r\n    //    //     these are updated with data which comes directly from the socket. */\r\n\r\n    //    //  char primary_ip[MAX_IPADR_LEN];\r\n    //    //  long primary_port;\r\n\r\n    //    //  /* 'local_ip' and 'local_port' get filled with local's numerical\r\n    //    //     ip address and port number whenever an outgoing connection is\r\n    //    //     **established** from the primary socket to a remote address. */\r\n\r\n    //    //  char local_ip[MAX_IPADR_LEN];\r\n    //    //  long local_port;\r\n\r\n    //    //  char *user;    /* user name string, allocated */\r\n    //    //  char *passwd;  /* password string, allocated */\r\n\r\n    //    //  char *proxyuser;    /* proxy user name string, allocated */\r\n    //    //  char *proxypasswd;  /* proxy password string, allocated */\r\n    //    //  curl_proxytype proxytype; /* what kind of proxy that is in use */\r\n\r\n    //    //  int httpversion;        /* the HTTP version*10 reported by the server */\r\n    //    //  int rtspversion;        /* the RTSP version*10 reported by the server */\r\n\r\n    //    //  struct timeval now;     /* \"current\" time */\r\n    //    //  struct timeval created; /* creation time */\r\n    //    //  curl_socket_t sock[2]; /* two sockets, the second is used for the data\r\n    //    //                            transfer when doing FTP */\r\n\r\n    //    //  Curl_recv *recv[2];\r\n    //    //  Curl_send *send[2];\r\n\r\n    //    //  struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */\r\n    //    //  struct ssl_config_data ssl_config;\r\n\r\n    //    //  struct ConnectBits bits;    /* various state-flags for this connection */\r\n\r\n    //    // /* connecttime: when connect() is called on the current IP address. Used to\r\n    //    //    be able to track when to move on to try next IP - but only when the multi\r\n    //    //    interface is used. */\r\n    //    //  struct timeval connecttime;\r\n    //    //  /* The two fields below get set in Curl_connecthost */\r\n    //    //  int num_addr; /* number of addresses to try to connect to */\r\n    //    //  long timeoutms_per_addr; /* how long time in milliseconds to spend on\r\n    //    //                              trying to connect to each IP address */\r\n\r\n    //    /// <summary>\r\n    //    /// Connection's protocol handler\r\n    //    /// </summary>\r\n    //    public CurlHandler handler;\r\n    //    //  const struct Curl_handler *given;   /* The protocol first given */\r\n\r\n    //    //  long ip_version; /* copied from the SessionHandle at creation time */\r\n\r\n    //    //  /**** curl_get() phase fields */\r\n\r\n    //    //  curl_socket_t sockfd;   /* socket to read from or CURL_SOCKET_BAD */\r\n    //    //  curl_socket_t writesockfd; /* socket to write to, it may very\r\n    //    //                                well be the same we read from.\r\n    //    //                                CURL_SOCKET_BAD disables */\r\n\r\n    //    //  /** Dynamicly allocated strings, may need to be freed before this **/\r\n    //    //  /** struct is killed.                                             **/\r\n    //    //  struct dynamically_allocated_data {\r\n    //    //    char *proxyuserpwd; /* free later if not NULL! */\r\n    //    //    char *uagent; /* free later if not NULL! */\r\n    //    //    char *accept_encoding; /* free later if not NULL! */\r\n    //    //    char *userpwd; /* free later if not NULL! */\r\n    //    //    char *rangeline; /* free later if not NULL! */\r\n    //    //    char *ref; /* free later if not NULL! */\r\n    //    //    char *host; /* free later if not NULL */\r\n    //    //    char *cookiehost; /* free later if not NULL */\r\n    //    //    char *rtsp_transport; /* free later if not NULL */\r\n    //    //  } allocptr;\r\n\r\n    //    //  int sec_complete; /* if kerberos is enabled for this connection */\r\n    //    //#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)\r\n    //    //  enum protection_level command_prot;\r\n    //    //  enum protection_level data_prot;\r\n    //    //  enum protection_level request_data_prot;\r\n    //    //  size_t buffer_size;\r\n    //    //  struct krb4buffer in_buffer;\r\n    //    //  void *app_data;\r\n    //    //  const struct Curl_sec_client_mech *mech;\r\n    //    //  struct sockaddr_in local_addr;\r\n    //    //#endif\r\n\r\n    //    //  /* the two following *_inuse fields are only flags, not counters in any way.\r\n    //    //     If TRUE it means the channel is in use, and if FALSE it means the channel\r\n    //    //     is up for grabs by one. */\r\n\r\n    //    //  bool readchannel_inuse;  /* whether the read channel is in use by an easy\r\n    //    //                              handle */\r\n    //    //  bool writechannel_inuse; /* whether the write channel is in use by an easy\r\n    //    //                              handle */\r\n    //    //  bool server_supports_pipelining; /* TRUE if server supports pipelining,\r\n    //    //                                      set after first response */\r\n\r\n    //    //  struct curl_llist *send_pipe; /* List of handles waiting to\r\n    //    //                                   send on this pipeline */\r\n    //    //  struct curl_llist *recv_pipe; /* List of handles waiting to read\r\n    //    //                                   their responses on this pipeline */\r\n    //    //  struct curl_llist *pend_pipe; /* List of pending handles on\r\n    //    //                                   this pipeline */\r\n    //    //  struct curl_llist *done_pipe; /* Handles that are finished, but\r\n    //    //                                   still reference this connectdata */\r\n    //    //#define MAX_PIPELINE_LENGTH 5\r\n\r\n    //    //  char* master_buffer; /* The master buffer allocated on-demand;\r\n    //    //                          used for pipelining. */\r\n    //    //  size_t read_pos; /* Current read position in the master buffer */\r\n    //    //  size_t buf_len; /* Length of the buffer?? */\r\n\r\n\r\n    //    //  curl_seek_callback seek_func; /* function that seeks the input */\r\n    //    //  void *seek_client;            /* pointer to pass to the seek() above */\r\n\r\n    //    //  /*************** Request - specific items ************/\r\n\r\n    //    //  /* previously this was in the urldata struct */\r\n    //    //  curl_read_callback fread_func; /* function that reads the input */\r\n    //    //  void *fread_in;           /* pointer to pass to the fread() above */\r\n\r\n    //    //  struct ntlmdata ntlm;     /* NTLM differs from other authentication schemes\r\n    //    //                               because it authenticates connections, not\r\n    //    //                               single requests! */\r\n    //    //  struct ntlmdata proxyntlm; /* NTLM data for proxy */\r\n\r\n    //    //  char syserr_buf [256]; /* buffer for Curl_strerror() */\r\n\r\n    //    //#ifdef CURLRES_ASYNCH\r\n    //    //  /* data used for the asynch name resolve callback */\r\n    //    //  struct Curl_async async;\r\n    //    //#endif\r\n\r\n    //    //  /* These three are used for chunked-encoding trailer support */\r\n    //    //  char *trailer; /* allocated buffer to store trailer in */\r\n    //    //  int trlMax;    /* allocated buffer size */\r\n    //    //  int trlPos;    /* index of where to store data */\r\n\r\n    //    //  union {\r\n    //    //    struct ftp_conn ftpc;\r\n    //    //    struct ssh_conn sshc;\r\n    //    //    struct tftp_state_data *tftpc;\r\n    //    //    struct imap_conn imapc;\r\n    //    //    struct pop3_conn pop3c;\r\n    //    //    struct smtp_conn smtpc;\r\n    //    //    struct rtsp_conn rtspc;\r\n    //    //    void *generic;\r\n    //    //  } proto;\r\n\r\n    //    //  int cselect_bits; /* bitmask of socket events */\r\n    //    //  int waitfor;      /* current READ/WRITE bits to wait for */\r\n\r\n    //    //#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)\r\n    //    //  int socks5_gssapi_enctype;\r\n    //    //#endif\r\n\r\n    //    //  long verifypeer;\r\n    //    //  long verifyhost;\r\n\r\n    //    //  /* When this connection is created, store the conditions for the local end\r\n    //    //     bind. This is stored before the actual bind and before any connection is\r\n    //    //     made and will serve the purpose of being used for comparison reasons so\r\n    //    //     that subsequent bound-requested connections aren't accidentally re-using\r\n    //    //     wrong connections. */\r\n    //    //  char *localdev;\r\n    //    //  unsigned short localport;\r\n    //    //  int localportrange;\r\n\r\n    //};\r\n\r\n    #endregion\r\n\r\n\r\n    class old\r\n    {\r\n    }\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/Utils.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Globalization;\r\n\r\nnamespace PHP.Library.Curl\r\n{\r\n    internal static class Utils\r\n    {\r\n\r\n        public static Uri CompleteUri(string uri, string defaultScheme, int port)\r\n        {     \r\n            if (uri.IndexOf(\"://\") == -1)\r\n            {\r\n                uri = defaultScheme + uri;\r\n            }\r\n\r\n            var resultUri = new Uri(uri);\r\n\r\n            if (resultUri.IsDefaultPort && port != 0)\r\n                resultUri = CreateUriWithExplicitPort(resultUri, port);  // TODO: if port is specified in uri don't use explicitly set port\r\n\r\n            return resultUri;\r\n        }\r\n\r\n        public static Uri CreateUriWithExplicitPort(Uri uri, int port)\r\n        {\r\n            UriBuilder uriBuilder = new UriBuilder(uri.Scheme,uri.Host, port, uri.AbsolutePath, uri.Query);\r\n\r\n            if (uri.UserInfo.Length > 0)\r\n            {\r\n                var user = uri.UserInfo.Split(':');\r\n\r\n                uriBuilder.UserName = user[0];\r\n                uriBuilder.Password = user.Length > 1 ? user[1] : \"\";\r\n            }\r\n\r\n\r\n            return uriBuilder.Uri;\r\n        }\r\n\r\n\r\n        struct ContentType\r\n        {\r\n            public string Extension;\r\n            public string Type;\r\n\r\n            public ContentType(string Extension, string Type)\r\n            {\r\n                this.Extension = Extension;\r\n                this.Type = Type;\r\n            }\r\n\r\n        };\r\n\r\n        static readonly ContentType[] ContentTypes ={\n                new ContentType(\".gif\",  \"image/gif\"),\n                new ContentType(\".jpg\",  \"image/jpeg\"),\n                new ContentType(\".jpeg\", \"image/jpeg\"),\n                new ContentType(\".txt\",  \"text/plain\"),\n                new ContentType(\".html\", \"text/html\"),\n                new ContentType(\".xml\", \"application/xml\")\n              };\r\n\r\n\r\n        /// <summary>\r\n        ///  What kind of Content-Type to use on un-specified files with unrecognized extensions. \r\n        /// </summary>\r\n        public const string HTTPPOST_CONTENTTYPE_DEFAULT = \"application/octet-stream\";\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// Provides content type for filename if one of the known types\r\n        ///  (else either the prevtype or the default is returned).\r\n        /// </summary>\r\n        /// <param name=\"filename\">Name of the file</param>\r\n        /// <param name=\"previousType\">Name of ContentType chosen by previous call of this method</param>\r\n        /// <returns>Valid contenttype for filename</returns>\r\n        public static string ContentTypeForFilename(string filename, string previousType = null)\r\n        {\r\n            string contenttype = HTTPPOST_CONTENTTYPE_DEFAULT;\r\n            /*\n             * No type was specified, we scan through a few well-known\n             * extensions and pick the first we match!\n             */\r\n\r\n            if (previousType != null)\r\n                /* default to the previously set/used! */\r\n                contenttype = previousType;\r\n            else\r\n                contenttype = HTTPPOST_CONTENTTYPE_DEFAULT;\r\n\r\n\r\n            if (filename == null)  /* in case a NULL was passed in */\r\n                return contenttype;\r\n\r\n            foreach (var ct in ContentTypes)\r\n                if (filename.Length >= ct.Extension.Length)\r\n                {\r\n                    if (filename.IndexOf(ct.Extension, filename.Length - ct.Extension.Length) != -1)\r\n                    {\r\n                        contenttype = ct.Type;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n\r\n            /* we have a contenttype by now */\r\n            return contenttype;\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Curl/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetCurl\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Curl/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet>\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetCurl\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Gd2/Configuration.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    #region Local Configuration\r\n\r\n    /// <summary>\r\n    /// Script independent mbstring configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class GdLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal GdLocalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (GdLocalConfig)this.MemberwiseClone();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Global Configuration\r\n\r\n    /// <summary>\r\n    /// Script dependent MSSQL configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class GdGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal GdGlobalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <param name=\"value\"></param>\r\n        /// <param name=\"node\"></param>\r\n        /// <returns></returns>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (GdGlobalConfig)this.MemberwiseClone();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// mbstring extension configuration.\r\n    /// </summary>\r\n    public static class GdConfiguration\r\n    {\r\n        #region Legacy Configuration\r\n\r\n        /// <summary>\r\n        /// Gets, sets, or restores a value of a legacy configuration option.\r\n        /// </summary>\r\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n        {\r\n            GdLocalConfig local = (GdLocalConfig)config.GetLibraryConfig(GdLibraryDescriptor.Singleton);\r\n            GdLocalConfig @default = DefaultLocal;\r\n            GdGlobalConfig global = Global;\r\n\r\n            //switch (option)\r\n            //{\r\n            //// local:\r\n\r\n            //case \"mssql.connect_timeout\":\r\n            //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n            //case \"mssql.timeout\":\r\n            //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n            //case \"mssql.batchsize\":\r\n            //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n            //// global:  \r\n\r\n            //case \"mssql.max_links\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n            //case \"mssql.secure_connection\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n            //}\r\n\r\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes MySql legacy options and their values to XML text stream.\r\n        /// Skips options whose values are the same as default values of Phalanger.\r\n        /// </summary>\r\n        /// <param name=\"writer\">XML writer.</param>\r\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n        {\r\n            if (writer == null)\r\n                throw new ArgumentNullException(\"writer\");\r\n            if (options == null)\r\n                throw new ArgumentNullException(\"options\");\r\n\r\n            GdLocalConfig local = new GdLocalConfig();\r\n            GdGlobalConfig global = new GdGlobalConfig();\r\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            //ow.StartSection(\"gd2\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n            //ow.WriteEnd();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers legacy ini-options.\r\n        /// </summary>\r\n        internal static void RegisterLegacyOptions()\r\n        {\r\n            //const string s = MbstringLibraryDescriptor.ExtensionName;\r\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Configuration Getters\r\n\r\n        /// <summary>\r\n        /// Gets the library configuration associated with the current script context.\r\n        /// </summary>\r\n        public static GdLocalConfig Local\r\n        {\r\n            get\r\n            {\r\n                return (GdLocalConfig)Configuration.Local.GetLibraryConfig(GdLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the default library configuration.\r\n        /// </summary>\r\n        public static GdLocalConfig DefaultLocal\r\n        {\r\n            get\r\n            {\r\n                return (GdLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(GdLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the global library configuration.\r\n        /// </summary>\r\n        public static GdGlobalConfig Global\r\n        {\r\n            get\r\n            {\r\n                return (GdGlobalConfig)Configuration.Global.GetLibraryConfig(GdLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets local configuration associated with a specified script context.\r\n        /// </summary>\r\n        /// <param name=\"context\">Scritp context.</param>\r\n        /// <returns>Local library configuration.</returns>\r\n        public static GdLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n        {\r\n            if (context == null)\r\n                throw new ArgumentNullException(\"context\");\r\n\r\n            return (GdLocalConfig)context.Config.GetLibraryConfig(GdLibraryDescriptor.Singleton);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/Extension.Gd2.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{1E43FFF4-D113-4CE7-90C1-0CB39E068194}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Gd2</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.Gd2</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PresentationCore\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Windows.Forms\" />\r\n    <Reference Include=\"System.Xaml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"WindowsBase\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"PhpImage.cs\" />\r\n    <Compile Include=\"PhpExif.cs\" />\r\n    <Compile Include=\"PhpGd.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"PhpGdImageResource.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Utils.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"Extension.Gd2.nuspec\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/Extension.Gd2.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger Extension GD2 graphics</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Gd2/LibraryDescriptor.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Xml;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    /// <summary>\r\n    /// Describes the class library assembly content and configuration.\r\n    /// </summary>\r\n    public sealed class GdLibraryDescriptor : PhpLibraryDescriptor\r\n    {\r\n        /// <summary>\r\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\r\n        /// </summary>\r\n        internal static GdLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static GdLibraryDescriptor singleton;\r\n\r\n        /// <summary>\r\n        /// Called by the Core after the library is loaded.\r\n        /// </summary>\r\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n        {\r\n            base.Loaded(assemblyAttribute, configStore);\r\n            singleton = this;\r\n            GdConfiguration.RegisterLegacyOptions();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a configuration section belonging to the MySql library. \r\n        /// </summary>\r\n        /// <param name=\"result\">A configuration context.</param>\r\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n        /// <returns>Updated configuration context.</returns>\r\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n        {\r\n            // parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (GdLocalConfig)result.Local, (GdGlobalConfig)result.Global);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates empty library configuration context.\r\n        /// </summary>\r\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n        protected override ConfigContextBase CreateConfigContext()\r\n        {\r\n            return new ConfigContextBase(new GdLocalConfig(), new GdGlobalConfig());\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/PhpExif.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Drawing;\r\nusing System.Net;\r\nusing System.Resources;\r\nusing System.Reflection;\r\nusing System.Diagnostics;\r\nusing System.Drawing.Imaging;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    /// <summary>\r\n    /// Implements PHP functions provided by EXIF extension.\r\n    /// </summary>\r\n    [ImplementsExtension(\"exif\")]\r\n    public static class Exif\r\n    {\r\n        #region TagType\r\n\r\n        private enum TagValueType\r\n        {\r\n            UShort, UInt, ULong, URational, String, Unicode, Unknown\r\n        }\r\n\r\n        private struct Tag : IComparable\r\n        {\r\n            public int id;\r\n            public string name;\r\n            public TagValueType type;\r\n\r\n            public Tag(int i, string n, TagValueType t)\r\n            {\r\n                id = i;\r\n                name = n;\r\n                type = t;\r\n            }\r\n\r\n            /// <summary>\r\n            /// IComparable.CompareTo implementation.\r\n            /// </summary>\r\n            public int CompareTo(object obj)\r\n            {\r\n                if (obj is Tag)\r\n                {\r\n                    Tag temp = (Tag)obj;\r\n\r\n                    return id.CompareTo(temp.id);\r\n                }\r\n\r\n                throw new ArgumentException(\"object is not a Tag\");\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IFDTagTable\r\n\r\n        private static Tag[] IFDTagTable =\r\n        {\r\n            new Tag( 0x000B, \"ACDComment\", TagValueType.Unknown),\r\n            new Tag( 0x00FE, \"NewSubFile\", TagValueType.Unknown), /* better name it 'ImageType' ? */\r\n            new Tag( 0x00FF, \"SubFile\", TagValueType.Unknown),\r\n            new Tag( 0x0100, \"ImageWidth\", TagValueType.Unknown),\r\n            new Tag( 0x0101, \"ImageLength\", TagValueType.Unknown),\r\n            new Tag( 0x0102, \"BitsPerSample\", TagValueType.Unknown),\r\n            new Tag( 0x0103, \"Compression\", TagValueType.Unknown),\r\n            new Tag( 0x0106, \"PhotometricInterpretation\", TagValueType.Unknown),\r\n            new Tag( 0x010A, \"FillOrder\", TagValueType.Unknown),\r\n            new Tag( 0x010D, \"DocumentName\", TagValueType.Unknown),\r\n            new Tag( 0x010E, \"ImageDescription\", TagValueType.String),\r\n            new Tag( 0x010F, \"Make\", TagValueType.String),\r\n            new Tag( 0x0110, \"Model\", TagValueType.String),\r\n            new Tag( 0x0111, \"StripOffsets\", TagValueType.Unknown),\r\n            new Tag( 0x0112, \"Orientation\", TagValueType.Unknown),\r\n            new Tag( 0x0115, \"SamplesPerPixel\", TagValueType.Unknown),\r\n            new Tag( 0x0116, \"RowsPerStrip\", TagValueType.Unknown),\r\n            new Tag( 0x0117, \"StripByteCounts\", TagValueType.Unknown),\r\n            new Tag( 0x0118, \"MinSampleValue\", TagValueType.Unknown),\r\n            new Tag( 0x0119, \"MaxSampleValue\", TagValueType.Unknown),\r\n            new Tag( 0x011A, \"XResolution\", TagValueType.Unknown),\r\n            new Tag( 0x011B, \"YResolution\", TagValueType.Unknown),\r\n            new Tag( 0x011C, \"PlanarConfiguration\", TagValueType.Unknown),\r\n            new Tag( 0x011D, \"PageName\", TagValueType.Unknown),\r\n            new Tag( 0x011E, \"XPosition\", TagValueType.Unknown),\r\n            new Tag( 0x011F, \"YPosition\", TagValueType.Unknown),\r\n            new Tag( 0x0120, \"FreeOffsets\", TagValueType.Unknown),\r\n            new Tag( 0x0121, \"FreeByteCounts\", TagValueType.Unknown),\r\n            new Tag( 0x0122, \"GrayResponseUnit\", TagValueType.Unknown),\r\n            new Tag( 0x0123, \"GrayResponseCurve\", TagValueType.Unknown),\r\n            new Tag( 0x0124, \"T4Options\", TagValueType.Unknown),\r\n            new Tag( 0x0125, \"T6Options\", TagValueType.Unknown),\r\n            new Tag( 0x0128, \"ResolutionUnit\", TagValueType.Unknown),\r\n            new Tag( 0x0129, \"PageNumber\", TagValueType.Unknown),\r\n            new Tag( 0x012D, \"TransferFunction\", TagValueType.Unknown),\r\n            new Tag( 0x0131, \"Software\", TagValueType.String),\r\n            new Tag( 0x0132, \"DateTime\", TagValueType.String),\r\n            new Tag( 0x013B, \"Artist\", TagValueType.String),\r\n            new Tag( 0x013C, \"HostComputer\", TagValueType.String),\r\n            new Tag( 0x013D, \"Predictor\", TagValueType.Unknown),\r\n            new Tag( 0x013E, \"WhitePoint\", TagValueType.Unknown),\r\n            new Tag( 0x013F, \"PrimaryChromaticities\", TagValueType.Unknown),\r\n            new Tag( 0x0140, \"ColorMap\", TagValueType.Unknown),\r\n            new Tag( 0x0141, \"HalfToneHints\", TagValueType.Unknown),\r\n            new Tag( 0x0142, \"TileWidth\", TagValueType.Unknown),\r\n            new Tag( 0x0143, \"TileLength\", TagValueType.Unknown),\r\n            new Tag( 0x0144, \"TileOffsets\", TagValueType.Unknown),\r\n            new Tag( 0x0145, \"TileByteCounts\", TagValueType.Unknown),\r\n            new Tag( 0x014A, \"SubIFD\", TagValueType.Unknown),\r\n            new Tag( 0x014C, \"InkSet\", TagValueType.Unknown),\r\n            new Tag( 0x014D, \"InkNames\", TagValueType.Unknown),\r\n            new Tag( 0x014E, \"NumberOfInks\", TagValueType.Unknown),\r\n            new Tag( 0x0150, \"DotRange\", TagValueType.Unknown),\r\n            new Tag( 0x0151, \"TargetPrinter\", TagValueType.Unknown),\r\n            new Tag( 0x0152, \"ExtraSample\", TagValueType.Unknown),\r\n            new Tag( 0x0153, \"SampleFormat\", TagValueType.Unknown),\r\n            new Tag( 0x0154, \"SMinSampleValue\", TagValueType.Unknown),\r\n            new Tag( 0x0155, \"SMaxSampleValue\", TagValueType.Unknown),\r\n            new Tag( 0x0156, \"TransferRange\", TagValueType.Unknown),\r\n            new Tag( 0x0157, \"ClipPath\", TagValueType.Unknown),\r\n            new Tag( 0x0158, \"XClipPathUnits\", TagValueType.Unknown),\r\n            new Tag( 0x0159, \"YClipPathUnits\", TagValueType.Unknown),\r\n            new Tag( 0x015A, \"Indexed\", TagValueType.Unknown),\r\n            new Tag( 0x015B, \"JPEGTables\", TagValueType.Unknown),\r\n            new Tag( 0x015F, \"OPIProxy\", TagValueType.Unknown),\r\n            new Tag( 0x0200, \"JPEGProc\", TagValueType.Unknown),\r\n            new Tag( 0x0201, \"JPEGInterchangeFormat\", TagValueType.Unknown),\r\n            new Tag( 0x0202, \"JPEGInterchangeFormatLength\", TagValueType.Unknown),\r\n            new Tag( 0x0203, \"JPEGRestartInterval\", TagValueType.Unknown),\r\n            new Tag( 0x0205, \"JPEGLosslessPredictors\", TagValueType.Unknown),\r\n            new Tag( 0x0206, \"JPEGPointTransforms\", TagValueType.Unknown),\r\n            new Tag( 0x0207, \"JPEGQTables\", TagValueType.Unknown),\r\n            new Tag( 0x0208, \"JPEGDCTables\", TagValueType.Unknown),\r\n            new Tag( 0x0209, \"JPEGACTables\", TagValueType.Unknown),\r\n            new Tag( 0x0211, \"YCbCrCoefficients\", TagValueType.Unknown),\r\n            new Tag( 0x0212, \"YCbCrSubSampling\", TagValueType.Unknown),\r\n            new Tag( 0x0213, \"YCbCrPositioning\", TagValueType.Unknown),\r\n            new Tag( 0x0214, \"ReferenceBlackWhite\", TagValueType.Unknown),\r\n            new Tag( 0x02BC, \"ExtensibleMetadataPlatform\", TagValueType.Unknown), /* XAP: Extensible Authoring Publishing, obsoleted by XMP: Extensible Metadata Platform */\r\n            new Tag( 0x0301, \"Gamma\", TagValueType.Unknown), \r\n            new Tag( 0x0302, \"ICCProfileDescriptor\", TagValueType.Unknown), \r\n            new Tag( 0x0303, \"SRGBRenderingIntent\", TagValueType.Unknown), \r\n            new Tag( 0x0320, \"ImageTitle\", TagValueType.Unknown), \r\n            new Tag( 0x5001, \"ResolutionXUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5002, \"ResolutionYUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5003, \"ResolutionXLengthUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5004, \"ResolutionYLengthUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5005, \"PrintFlags\", TagValueType.Unknown), \r\n            new Tag( 0x5006, \"PrintFlagsVersion\", TagValueType.Unknown), \r\n            new Tag( 0x5007, \"PrintFlagsCrop\", TagValueType.Unknown), \r\n            new Tag( 0x5008, \"PrintFlagsBleedWidth\", TagValueType.Unknown), \r\n            new Tag( 0x5009, \"PrintFlagsBleedWidthScale\", TagValueType.Unknown), \r\n            new Tag( 0x500A, \"HalftoneLPI\", TagValueType.Unknown), \r\n            new Tag( 0x500B, \"HalftoneLPIUnit\", TagValueType.Unknown), \r\n            new Tag( 0x500C, \"HalftoneDegree\", TagValueType.Unknown), \r\n            new Tag( 0x500D, \"HalftoneShape\", TagValueType.Unknown), \r\n            new Tag( 0x500E, \"HalftoneMisc\", TagValueType.Unknown), \r\n            new Tag( 0x500F, \"HalftoneScreen\", TagValueType.Unknown), \r\n            new Tag( 0x5010, \"JPEGQuality\", TagValueType.Unknown), \r\n            new Tag( 0x5011, \"GridSize\", TagValueType.Unknown), \r\n            new Tag( 0x5012, \"ThumbnailFormat\", TagValueType.Unknown), \r\n            new Tag( 0x5013, \"ThumbnailWidth\", TagValueType.Unknown), \r\n            new Tag( 0x5014, \"ThumbnailHeight\", TagValueType.Unknown), \r\n            new Tag( 0x5015, \"ThumbnailColorDepth\", TagValueType.Unknown), \r\n            new Tag( 0x5016, \"ThumbnailPlanes\", TagValueType.Unknown), \r\n            new Tag( 0x5017, \"ThumbnailRawBytes\", TagValueType.Unknown), \r\n            new Tag( 0x5018, \"ThumbnailSize\", TagValueType.Unknown), \r\n            new Tag( 0x5019, \"ThumbnailCompressedSize\", TagValueType.Unknown), \r\n            new Tag( 0x501A, \"ColorTransferFunction\", TagValueType.Unknown), \r\n            new Tag( 0x501B, \"ThumbnailData\", TagValueType.Unknown), \r\n            new Tag( 0x5020, \"ThumbnailImageWidth\", TagValueType.Unknown), \r\n            new Tag( 0x5021, \"ThumbnailImageHeight\", TagValueType.Unknown), \r\n            new Tag( 0x5022, \"ThumbnailBitsPerSample\", TagValueType.Unknown), \r\n            new Tag( 0x5023, \"ThumbnailCompression\", TagValueType.Unknown), \r\n            new Tag( 0x5024, \"ThumbnailPhotometricInterp\", TagValueType.Unknown), \r\n            new Tag( 0x5025, \"ThumbnailImageDescription\", TagValueType.Unknown), \r\n            new Tag( 0x5026, \"ThumbnailEquipMake\", TagValueType.Unknown), \r\n            new Tag( 0x5027, \"ThumbnailEquipModel\", TagValueType.Unknown), \r\n            new Tag( 0x5028, \"ThumbnailStripOffsets\", TagValueType.Unknown), \r\n            new Tag( 0x5029, \"ThumbnailOrientation\", TagValueType.Unknown), \r\n            new Tag( 0x502A, \"ThumbnailSamplesPerPixel\", TagValueType.Unknown), \r\n            new Tag( 0x502B, \"ThumbnailRowsPerStrip\", TagValueType.Unknown), \r\n            new Tag( 0x502C, \"ThumbnailStripBytesCount\", TagValueType.Unknown), \r\n            new Tag( 0x502D, \"ThumbnailResolutionX\", TagValueType.Unknown), \r\n            new Tag( 0x502E, \"ThumbnailResolutionY\", TagValueType.Unknown), \r\n            new Tag( 0x502F, \"ThumbnailPlanarConfig\", TagValueType.Unknown), \r\n            new Tag( 0x5030, \"ThumbnailResolutionUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5031, \"ThumbnailTransferFunction\", TagValueType.Unknown), \r\n            new Tag( 0x5032, \"ThumbnailSoftwareUsed\", TagValueType.Unknown), \r\n            new Tag( 0x5033, \"ThumbnailDateTime\", TagValueType.Unknown), \r\n            new Tag( 0x5034, \"ThumbnailArtist\", TagValueType.Unknown), \r\n            new Tag( 0x5035, \"ThumbnailWhitePoint\", TagValueType.Unknown), \r\n            new Tag( 0x5036, \"ThumbnailPrimaryChromaticities\", TagValueType.Unknown), \r\n            new Tag( 0x5037, \"ThumbnailYCbCrCoefficients\", TagValueType.Unknown), \r\n            new Tag( 0x5038, \"ThumbnailYCbCrSubsampling\", TagValueType.Unknown), \r\n            new Tag( 0x5039, \"ThumbnailYCbCrPositioning\", TagValueType.Unknown), \r\n            new Tag( 0x503A, \"ThumbnailRefBlackWhite\", TagValueType.Unknown), \r\n            new Tag( 0x503B, \"ThumbnailCopyRight\", TagValueType.Unknown), \r\n            new Tag( 0x5090, \"LuminanceTable\", TagValueType.Unknown), \r\n            new Tag( 0x5091, \"ChrominanceTable\", TagValueType.Unknown), \r\n            new Tag( 0x5100, \"FrameDelay\", TagValueType.Unknown), \r\n            new Tag( 0x5101, \"LoopCount\", TagValueType.Unknown), \r\n            new Tag( 0x5110, \"PixelUnit\", TagValueType.Unknown), \r\n            new Tag( 0x5111, \"PixelPerUnitX\", TagValueType.Unknown), \r\n            new Tag( 0x5112, \"PixelPerUnitY\", TagValueType.Unknown), \r\n            new Tag( 0x5113, \"PaletteHistogram\", TagValueType.Unknown), \r\n            new Tag( 0x1000, \"RelatedImageFileFormat\", TagValueType.Unknown),\r\n            new Tag( 0x800D, \"ImageID\", TagValueType.Unknown),\r\n            new Tag( 0x80E3, \"Matteing\", TagValueType.Unknown),   /* obsoleted by ExtraSamples */\r\n            new Tag( 0x80E4, \"DataType\", TagValueType.Unknown),   /* obsoleted by SampleFormat */\r\n            new Tag( 0x80E5, \"ImageDepth\", TagValueType.Unknown),\r\n            new Tag( 0x80E6, \"TileDepth\", TagValueType.Unknown),\r\n            new Tag( 0x828D, \"CFARepeatPatternDim\", TagValueType.Unknown),\r\n            new Tag( 0x828E, \"CFAPattern\", TagValueType.Unknown),\r\n            new Tag( 0x828F, \"BatteryLevel\", TagValueType.Unknown),\r\n            new Tag( 0x8298, \"Copyright\", TagValueType.String),\r\n            new Tag( 0x829A, \"ExposureTime\", TagValueType.URational),\r\n            new Tag( 0x829D, \"FNumber\", TagValueType.URational),\r\n            new Tag( 0x83BB, \"IPTC/NAA\", TagValueType.Unknown),\r\n            new Tag( 0x84E3, \"IT8RasterPadding\", TagValueType.Unknown),\r\n            new Tag( 0x84E5, \"IT8ColorTable\", TagValueType.Unknown),\r\n            new Tag( 0x8649, \"ImageResourceInformation\", TagValueType.Unknown), /* PhotoShop */\r\n            new Tag( 0x8769, \"Exif_IFD_Pointer\", TagValueType.Unknown),\r\n            new Tag( 0x8773, \"ICC_Profile\", TagValueType.Unknown),\r\n            new Tag( 0x8822, \"ExposureProgram\", TagValueType.Unknown),\r\n            new Tag( 0x8824, \"SpectralSensity\", TagValueType.Unknown),\r\n            new Tag( 0x8828, \"OECF\", TagValueType.Unknown),\r\n            new Tag( 0x8825, \"GPS_IFD_Pointer\", TagValueType.Unknown),\r\n            new Tag( 0x8827, \"ISOSpeedRatings\", TagValueType.UShort),\r\n            new Tag( 0x8828, \"OECF\", TagValueType.Unknown),\r\n            new Tag( 0x9000, \"ExifVersion\", TagValueType.Unknown),\r\n            new Tag( 0x9003, \"DateTimeOriginal\", TagValueType.String),\r\n            new Tag( 0x9004, \"DateTimeDigitized\", TagValueType.String),\r\n            new Tag( 0x9101, \"ComponentsConfiguration\", TagValueType.Unknown),\r\n            new Tag( 0x9102, \"CompressedBitsPerPixel\", TagValueType.Unknown),\r\n            new Tag( 0x9201, \"ShutterSpeedValue\", TagValueType.Unknown),\r\n            new Tag( 0x9202, \"ApertureValue\", TagValueType.Unknown),\r\n            new Tag( 0x9203, \"BrightnessValue\", TagValueType.Unknown),\r\n            new Tag( 0x9204, \"ExposureBiasValue\", TagValueType.Unknown),\r\n            new Tag( 0x9205, \"MaxApertureValue\", TagValueType.Unknown),\r\n            new Tag( 0x9206, \"SubjectDistance\", TagValueType.Unknown),\r\n            new Tag( 0x9207, \"MeteringMode\", TagValueType.Unknown),\r\n            new Tag( 0x9208, \"LightSource\", TagValueType.Unknown),\r\n            new Tag( 0x9209, \"Flash\", TagValueType.Unknown),\r\n            new Tag( 0x920A, \"FocalLength\", TagValueType.URational),\r\n            new Tag( 0x920B, \"FlashEnergy\", TagValueType.Unknown),                 /* 0xA20B  in JPEG   */\r\n            new Tag( 0x920C, \"SpatialFrequencyResponse\", TagValueType.Unknown),    /* 0xA20C    -  -    */\r\n            new Tag( 0x920D, \"Noise\", TagValueType.Unknown),\r\n            new Tag( 0x920E, \"FocalPlaneXResolution\", TagValueType.Unknown),       /* 0xA20E    -  -    */\r\n            new Tag( 0x920F, \"FocalPlaneYResolution\", TagValueType.Unknown),       /* 0xA20F    -  -    */\r\n            new Tag( 0x9210, \"FocalPlaneResolutionUnit\", TagValueType.Unknown),    /* 0xA210    -  -    */\r\n            new Tag( 0x9211, \"ImageNumber\", TagValueType.Unknown),\r\n            new Tag( 0x9212, \"SecurityClassification\", TagValueType.Unknown),\r\n            new Tag( 0x9213, \"ImageHistory\", TagValueType.Unknown),\r\n            new Tag( 0x9214, \"SubjectLocation\", TagValueType.Unknown),             /* 0xA214    -  -    */\r\n            new Tag( 0x9215, \"ExposureIndex\", TagValueType.Unknown),               /* 0xA215    -  -    */\r\n            new Tag( 0x9216, \"TIFF/EPStandardID\", TagValueType.Unknown),\r\n            new Tag( 0x9217, \"SensingMethod\", TagValueType.Unknown),               /* 0xA217    -  -    */\r\n            new Tag( 0x923F, \"StoNits\", TagValueType.Unknown),\r\n            new Tag( 0x927C, \"MakerNote\", TagValueType.Unknown),\r\n            new Tag( 0x9286, \"UserComment\", TagValueType.Unknown),\r\n            new Tag( 0x9290, \"SubSecTime\", TagValueType.Unknown),\r\n            new Tag( 0x9291, \"SubSecTimeOriginal\", TagValueType.Unknown),\r\n            new Tag( 0x9292, \"SubSecTimeDigitized\", TagValueType.Unknown),\r\n            new Tag( 0x935C, \"ImageSourceData\", TagValueType.Unknown),             /* \"Adobe Photoshop Document Data Block\": 8BIM... */\r\n            new Tag( 0x9c9b, \"Title\" , TagValueType.Unicode),                      /* Win XP specific, Unicode  */\r\n            new Tag( 0x9c9c, \"Comments\" , TagValueType.Unicode),                   /* Win XP specific, Unicode  */\r\n            new Tag( 0x9c9d, \"Author\" , TagValueType.Unicode),                     /* Win XP specific, Unicode  */\r\n            new Tag( 0x9c9e, \"Keywords\" , TagValueType.Unicode),                   /* Win XP specific, Unicode  */\r\n            new Tag( 0x9c9f, \"Subject\" , TagValueType.Unicode),                    /* Win XP specific, Unicode, not to be confused with SubjectDistance and SubjectLocation */\r\n            new Tag( 0xA000, \"FlashPixVersion\", TagValueType.Unknown),\r\n            new Tag( 0xA001, \"ColorSpace\", TagValueType.Unknown),\r\n            new Tag( 0xA002, \"ExifImageWidth\", TagValueType.Unknown),\r\n            new Tag( 0xA003, \"ExifImageLength\", TagValueType.Unknown),\r\n            new Tag( 0xA004, \"RelatedSoundFile\", TagValueType.Unknown),\r\n            new Tag( 0xA005, \"InteroperabilityOffset\", TagValueType.Unknown),\r\n            new Tag( 0xA20B, \"FlashEnergy\", TagValueType.Unknown),                 /* 0x920B in TIFF/EP */\r\n            new Tag( 0xA20C, \"SpatialFrequencyResponse\", TagValueType.Unknown),    /* 0x920C    -  -    */\r\n            new Tag( 0xA20D, \"Noise\", TagValueType.Unknown),\r\n            new Tag( 0xA20E, \"FocalPlaneXResolution\", TagValueType.Unknown),    \t/* 0x920E    -  -    */\r\n            new Tag( 0xA20F, \"FocalPlaneYResolution\", TagValueType.Unknown),       /* 0x920F    -  -    */\r\n            new Tag( 0xA210, \"FocalPlaneResolutionUnit\", TagValueType.Unknown),    /* 0x9210    -  -    */\r\n            new Tag( 0xA211, \"ImageNumber\", TagValueType.Unknown),\r\n            new Tag( 0xA212, \"SecurityClassification\", TagValueType.Unknown),\r\n            new Tag( 0xA213, \"ImageHistory\", TagValueType.Unknown),\r\n            new Tag( 0xA214, \"SubjectLocation\", TagValueType.Unknown),             /* 0x9214    -  -    */\r\n            new Tag( 0xA215, \"ExposureIndex\", TagValueType.Unknown),               /* 0x9215    -  -    */\r\n            new Tag( 0xA216, \"TIFF/EPStandardID\", TagValueType.Unknown),\r\n            new Tag( 0xA217, \"SensingMethod\", TagValueType.Unknown),               /* 0x9217    -  -    */\r\n            new Tag( 0xA300, \"FileSource\", TagValueType.Unknown),\r\n            new Tag( 0xA301, \"SceneType\", TagValueType.Unknown),\r\n            new Tag( 0xA302, \"CFAPattern\", TagValueType.Unknown),\r\n            new Tag( 0xA401, \"CustomRendered\", TagValueType.Unknown),\r\n            new Tag( 0xA402, \"ExposureMode\", TagValueType.Unknown),\r\n            new Tag( 0xA403, \"WhiteBalance\", TagValueType.Unknown),\r\n            new Tag( 0xA404, \"DigitalZoomRatio\", TagValueType.Unknown),\r\n            new Tag( 0xA405, \"FocalLengthIn35mmFilm\", TagValueType.Unknown),\r\n            new Tag( 0xA406, \"SceneCaptureType\", TagValueType.Unknown),\r\n            new Tag( 0xA407, \"GainControl\", TagValueType.Unknown),\r\n            new Tag( 0xA408, \"Contrast\", TagValueType.Unknown),\r\n            new Tag( 0xA409, \"Saturation\", TagValueType.Unknown),\r\n            new Tag( 0xA40A, \"Sharpness\", TagValueType.Unknown),\r\n            new Tag( 0xA40B, \"DeviceSettingDescription\", TagValueType.Unknown),\r\n            new Tag( 0xA40C, \"SubjectDistanceRange\", TagValueType.Unknown),\r\n            new Tag( 0xA420, \"ImageUniqueID\", TagValueType.Unknown)\r\n        };\r\n\r\n        #endregion\r\n\r\n        #region read_exif_data\r\n\r\n        /// <summary>\r\n        /// This is alternative alias of <see cref=\"exif_read_data(string)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"read_exif_data \")]\r\n        [return: CastToFalse]\r\n        public static PhpArray read_exif_data(string filename)\r\n        {\r\n            return exif_read_data(filename, null, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This is alternative alias of <see cref=\"exif_read_data(string,string)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"read_exif_data \")]\r\n        [return: CastToFalse]\r\n        public static PhpArray read_exif_data(string filename, string sections)\r\n        {\r\n            return exif_read_data(filename, sections, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This is alternative alias of <see cref=\"exif_read_data(string,string,bool)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"read_exif_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray read_exif_data(string filename, string sections, bool arrays)\r\n        {\r\n            return exif_read_data(filename, sections, arrays, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This is alternative alias of <see cref=\"exif_read_data(string,string,bool,bool)\"/>.\r\n        /// </summary>\r\n        [ImplementsFunction(\"read_exif_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray read_exif_data(string filename, string sections, bool arrays, bool thumbnail)\r\n        {\r\n            return exif_read_data(filename, sections, arrays, thumbnail);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region exif_read_data\r\n\r\n        /// <summary>\r\n        /// Reads the EXIF headers from JPEG or TIFF\r\n        /// </summary>\r\n        /// <param name=\"filename\">The name of the image file being read. This cannot be an URL.</param>\r\n        /// <returns>It returns an associative array where the array indexes are the header names and the array values are the values associated with those headers.\r\n        /// If no data can be returned, <c>FALSE</c> is returned.</returns>\r\n        [ImplementsFunction(\"exif_read_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray exif_read_data(string filename)\r\n        {\r\n            return exif_read_data(filename, null, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads the EXIF headers from JPEG or TIFF\r\n        /// </summary>\r\n        /// <param name=\"filename\">The name of the image file being read. This cannot be an URL.</param>\r\n        /// <param name=\"sections\">Is a comma separated list of sections that need to be present in file to produce a result array. If none of the requested sections could be found the return value is FALSE.\r\n        /// \r\n        /// FILE:\tFileName, FileSize, FileDateTime, SectionsFound\r\n        /// COMPUTED:\t html, Width, Height, IsColor, and more if available. Height and Width are computed the same way getimagesize() does so their values must not be part of any header returned. Also, html is a height/width text string to be used inside normal HTML.\r\n        /// ANY_TAG:\tAny information that has a Tag e.g. IFD0, EXIF, ...\r\n        /// IFD0:\t All tagged data of IFD0. In normal imagefiles this contains image size and so forth.\r\n        /// THUMBNAIL:\t A file is supposed to contain a thumbnail if it has a second IFD. All tagged information about the embedded thumbnail is stored in this section.\r\n        /// COMMENT:\tComment headers of JPEG images.\r\n        /// EXIF:\t The EXIF section is a sub section of IFD0. It contains more detailed information about an image. Most of these entries are digital camera related.</param>\r\n        /// <returns>It returns an associative array where the array indexes are the header names and the array values are the values associated with those headers.\r\n        /// If no data can be returned, <c>FALSE</c> is returned.</returns>\r\n        [ImplementsFunction(\"exif_read_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray exif_read_data(string filename, string sections)\r\n        {\r\n            return exif_read_data(filename, sections, false, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads the EXIF headers from JPEG or TIFF\r\n        /// </summary>\r\n        /// <param name=\"filename\">The name of the image file being read. This cannot be an URL.</param>\r\n        /// <param name=\"sections\">Is a comma separated list of sections that need to be present in file to produce a result array. If none of the requested sections could be found the return value is FALSE.\r\n        /// \r\n        /// FILE:\tFileName, FileSize, FileDateTime, SectionsFound\r\n        /// COMPUTED:\t html, Width, Height, IsColor, and more if available. Height and Width are computed the same way getimagesize() does so their values must not be part of any header returned. Also, html is a height/width text string to be used inside normal HTML.\r\n        /// ANY_TAG:\tAny information that has a Tag e.g. IFD0, EXIF, ...\r\n        /// IFD0:\t All tagged data of IFD0. In normal imagefiles this contains image size and so forth.\r\n        /// THUMBNAIL:\t A file is supposed to contain a thumbnail if it has a second IFD. All tagged information about the embedded thumbnail is stored in this section.\r\n        /// COMMENT:\tComment headers of JPEG images.\r\n        /// EXIF:\t The EXIF section is a sub section of IFD0. It contains more detailed information about an image. Most of these entries are digital camera related.</param>\r\n        /// <param name=\"arrays\">Specifies whether or not each section becomes an array. The sections COMPUTED, THUMBNAIL, and COMMENT always become arrays as they may contain values whose names conflict with other sections.</param>\r\n        /// <returns>It returns an associative array where the array indexes are the header names and the array values are the values associated with those headers.\r\n        /// If no data can be returned, <c>FALSE</c> is returned.</returns>\r\n        [ImplementsFunction(\"exif_read_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray exif_read_data(string filename, string sections, bool arrays)\r\n        {\r\n            return exif_read_data(filename, sections, arrays, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads the EXIF headers from JPEG or TIFF\r\n        /// </summary>\r\n        /// <param name=\"filename\">The name of the image file being read. This cannot be an URL.</param>\r\n        /// <param name=\"sections\">Is a comma separated list of sections that need to be present in file to produce a result array. If none of the requested sections could be found the return value is FALSE.\r\n        /// \r\n        /// FILE:\tFileName, FileSize, FileDateTime, SectionsFound\r\n        /// COMPUTED:\t html, Width, Height, IsColor, and more if available. Height and Width are computed the same way getimagesize() does so their values must not be part of any header returned. Also, html is a height/width text string to be used inside normal HTML.\r\n        /// ANY_TAG:\tAny information that has a Tag e.g. IFD0, EXIF, ...\r\n        /// IFD0:\t All tagged data of IFD0. In normal imagefiles this contains image size and so forth.\r\n        /// THUMBNAIL:\t A file is supposed to contain a thumbnail if it has a second IFD. All tagged information about the embedded thumbnail is stored in this section.\r\n        /// COMMENT:\tComment headers of JPEG images.\r\n        /// EXIF:\t The EXIF section is a sub section of IFD0. It contains more detailed information about an image. Most of these entries are digital camera related.</param>\r\n        /// <param name=\"arrays\">Specifies whether or not each section becomes an array. The sections COMPUTED, THUMBNAIL, and COMMENT always become arrays as they may contain values whose names conflict with other sections.</param>\r\n        /// <param name=\"thumbnail\">When set to <c>TRUE</c> the thumbnail itself is read. Otherwise, only the tagged data is read.</param>\r\n        /// <returns>It returns an associative array where the array indexes are the header names and the array values are the values associated with those headers.\r\n        /// If no data can be returned, <c>FALSE</c> is returned.</returns>\r\n        [ImplementsFunction(\"exif_read_data\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray exif_read_data(string filename, string sections, bool arrays, bool thumbnail)\r\n        {\r\n            if (string.IsNullOrEmpty(filename))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            if (!string.IsNullOrEmpty(sections))\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"sections\", sections);\r\n            }\r\n\r\n            if (arrays)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"arrays\", arrays);\r\n            }\r\n\r\n            if (thumbnail)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"thumbnail\", thumbnail);\r\n            }\r\n\r\n            PhpArray array = new PhpArray();\r\n            Bitmap image;\r\n            PhpBytes bytes;\r\n\r\n            bytes = Utils.ReadPhpBytes(filename);\r\n\r\n            if (bytes == null)\r\n                return null;\r\n\r\n            array.Add(\"FileName\", Path.GetFileName(filename));\r\n            //array.Add(\"FileDateTime\", (int)File.GetCreationTime(filename).ToOADate());\r\n            array.Add(\"FileSize\", (int)bytes.Length);\r\n\r\n            using (MemoryStream ms = new MemoryStream(bytes.ReadonlyData))\r\n            {\r\n                try\r\n                {\r\n                    image = (Bitmap)Image.FromStream(ms);\r\n                }\r\n                catch\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();\r\n                System.Text.UnicodeEncoding unicode = new System.Text.UnicodeEncoding();\r\n\r\n                foreach (var item in image.PropertyItems)\r\n                {\r\n                    int i = Array.BinarySearch(IFDTagTable, new Tag(item.Id, null, TagValueType.Unknown));\r\n\r\n                    if (i > 0)\r\n                    {\r\n                        var tag = IFDTagTable[i];\r\n\r\n                        switch (tag.type)\r\n                        {\r\n                            case TagValueType.String:\r\n                                array.Add(tag.name, encoding.GetString(item.Value));\r\n                                break;\r\n                            case TagValueType.UShort:\r\n                                array.Add(tag.name, (int)BitConverter.ToInt16(item.Value, 0));\r\n                                break;\r\n                            case TagValueType.UInt:\r\n                                array.Add(tag.name, BitConverter.ToInt32(item.Value, 0));\r\n                                break;\r\n                            case TagValueType.ULong:\r\n                                array.Add(tag.name, BitConverter.ToInt64(item.Value, 0));\r\n                                break;\r\n                            case TagValueType.URational:\r\n                                array.Add(tag.name,\r\n                                    BitConverter.ToUInt16(item.Value.Take(4).ToArray(), 0).ToString()\r\n                                    + \"/\" + BitConverter.ToUInt16(item.Value.Skip(4).ToArray(), 0).ToString()\r\n                                );\r\n                                break;\r\n                            case TagValueType.Unicode:\r\n                                array.Add(tag.name, unicode.GetString(item.Value));\r\n                                break;\r\n                            case TagValueType.Unknown:\r\n                            default:\r\n                                array.Add(tag.name, new PhpBytes(item.Value));\r\n                                break;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        array.Add(item.Id.ToString(), new PhpBytes(item.Value));\r\n                    }\r\n                }\r\n\r\n                image.Dispose();\r\n            }\r\n\r\n            return array;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region exif_tagname\r\n\r\n        /// <summary>\r\n        /// Get the header name for an index\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"exif_tagname\")]\r\n        [return: CastToFalse]\r\n        public static string exif_tagname(int index)\r\n        {\r\n            int i = Array.BinarySearch(IFDTagTable, new Tag(index, null, TagValueType.Unknown));\r\n\r\n            if (i > 0)\r\n            {\r\n                return IFDTagTable[i].name;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region exif_imagetype\r\n\r\n        /// <summary>\r\n        /// Determine the type of an image\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"exif_imagetype\")]\r\n        [return:CastToFalse]\r\n        public static int exif_imagetype(string filename)\r\n        {\r\n            if (string.IsNullOrEmpty(filename))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return -1;\r\n            }\r\n\r\n            var stream = Utils.OpenStream(filename);\r\n            if (stream == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"read_error\"));\r\n                return -1;\r\n            }\r\n\r\n            PhpImage.ImageType type;\r\n            try\r\n            {\r\n                PhpImage.ImageSignature.ImageInfo info;\r\n                type = PhpImage.ImageSignature.ProcessImageType(stream, true, out info, false, false);\r\n            }\r\n#if !DEBUG\r\n            catch\r\n            {\r\n                /*rw error*/\r\n                type = PhpImage.ImageType.Unknown;\r\n            }\r\n#endif\r\n            finally\r\n            {\r\n                stream.Dispose();\r\n            }\r\n\r\n            return (type != PhpImage.ImageType.Unknown) ? (int)type : -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region exif_thumbnail\r\n\r\n        //string exif_thumbnail ( string $filename [, int &$width [, int &$height [, int &$imagetype ]]] )\r\n\r\n        /// <summary>\r\n        /// Retrieve the embedded thumbnail of a TIFF or JPEG image\r\n        /// </summary>\r\n        [ImplementsFunction(\"exif_thumbnail\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes exif_thumbnail(string filename)\r\n        {\r\n            return exif_thumbnail(filename, null, null, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve the embedded thumbnail of a TIFF or JPEG image\r\n        /// </summary>\r\n        [ImplementsFunction(\"exif_thumbnail\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes exif_thumbnail(string filename, PhpReference width)\r\n        {\r\n            return exif_thumbnail(filename, width, null, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve the embedded thumbnail of a TIFF or JPEG image\r\n        /// </summary>\r\n        [ImplementsFunction(\"exif_thumbnail\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes exif_thumbnail(string filename, PhpReference width, PhpReference height)\r\n        {\r\n            return exif_thumbnail(filename, width, height, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve the embedded thumbnail of a TIFF or JPEG image\r\n        /// </summary>\r\n        [ImplementsFunction(\"exif_thumbnail\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes exif_thumbnail(string filename, PhpReference width, PhpReference height, PhpReference imagetype)\r\n        {\r\n            if (string.IsNullOrEmpty(filename))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            if (imagetype != null)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"imagetype\", \"!=null\");\r\n            }\r\n\r\n            Bitmap thumbnail = null;\r\n            PhpBytes bytes, result;\r\n\r\n            bytes = Utils.ReadPhpBytes(filename);\r\n\r\n            if (bytes == null)\r\n                return null;\r\n\r\n            // get thumbnail from <filename>'s content:\r\n            using (MemoryStream ms = new MemoryStream(bytes.ReadonlyData))\r\n            {\r\n                try\r\n                {\r\n                    using (Bitmap image = (Bitmap)Image.FromStream(ms))\r\n                    {\r\n                        thumbnail = (Bitmap)image.GetThumbnailImage(0, 0, () => true, IntPtr.Zero);\r\n                    }\r\n                }\r\n                catch\r\n                {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            if (thumbnail == null)\r\n                return null;\r\n\r\n            //\r\n            if (width != null)\r\n                width.Value = thumbnail.Width;\r\n            \r\n            if (height != null)\r\n                height.Value = thumbnail.Height;\r\n            \r\n            using (MemoryStream ms2 = new MemoryStream())\r\n            {\r\n                thumbnail.Save(ms2, ImageFormat.Png);\r\n                result = new PhpBytes(ms2.GetBuffer());\r\n            }\r\n\r\n            thumbnail.Dispose();\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/PhpGd.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Drawing;\r\nusing System.Drawing.Text;\r\nusing System.Drawing.Imaging;\r\nusing System.IO;\r\nusing System.Security.Permissions;\r\nusing System.Security;\r\nusing System.Net;\r\nusing System.Windows.Forms;\r\nusing System.Drawing.Drawing2D;\r\nusing System.Runtime.InteropServices;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    /// <summary>\r\n    /// Implements PHP functions provided by Gd2 extension.\r\n    /// </summary>\r\n    [ImplementsExtension(\"gd\")]\r\n    public static class PhpGd\r\n    {\r\n        #region GDVersionConstants\r\n\r\n        /// <summary>\r\n        /// The GD version PHP was compiled against.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_VERSION\")]\r\n        public const string version = \"2.0.35\";\r\n\r\n        /// <summary>\r\n        /// The GD major version PHP was compiled against.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_MAJOR_VERSION\")]\r\n        public const int major_version = 2;\r\n\r\n        /// <summary>\r\n        /// The GD minor version PHP was compiled against.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_MINOR_VERSION\")]\r\n        public const int minor_version = 0;\r\n\r\n        /// <summary>\r\n        /// The GD release version PHP was compiled against.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_RELEASE_VERSION\")]\r\n        public const int release_version = 35;\r\n\r\n        /// <summary>\r\n        /// The GD \"extra\" version (beta/rc..) PHP was compiled against.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_EXTRA_VERSION\")]\r\n        public const string extra_version = \"\"; //\"beta\";\r\n        \r\n        /// <summary>\r\n        /// When the bundled version of GD is used this is 1 otherwise its set to 0.\r\n        /// </summary>\r\n        [ImplementsConstant(\"GD_BUNDLED\")]\r\n        public const int bundled = 1;\r\n\r\n        #endregion\r\n\r\n        #region ImgType\r\n\r\n        /// <summary>\r\n        /// Image types enumeration, corresponds to IMGTYPE_ PHP constants.\r\n        /// </summary>\r\n        [Flags]\r\n        public enum ImgType\r\n        {\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_GIF\")]\r\n            GIF = 1,\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_JPG\")]\r\n            JPG = JPEG,\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_JPEG\")]\r\n            JPEG = 2,\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_PNG\")]\r\n            PNG = 4,\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_WBMP\")]\r\n            WBMP = 8,\r\n            /// <summary>\r\n            /// Used as a return value by <see cref=\"imagetypes\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_XPM\")]\r\n            XPM = 16,\r\n\r\n            /// <summary>\r\n            /// A combinanation of IMG_ constants that are supported.\r\n            /// </summary>\r\n            Supported = GIF | JPEG | PNG,\r\n\r\n            /// <summary>\r\n            /// UNknown image type.\r\n            /// </summary>\r\n            Unknown = -1\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region FilledArcStyles\r\n\r\n        /// <summary>\r\n        /// Filled Arc Style types enumeration\r\n        /// </summary>\r\n        [Flags]\r\n        public enum FilledArcStyles\r\n        {\r\n            /// <summary>\r\n            /// A style constant used by the <see cref=\"imagefilledarc\"/> function.\r\n            /// This constant has the same value as IMG_ARC_PIE.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_ARC_ROUNDED\")]\r\n            ROUNDED = PIE,\r\n\r\n            /// <summary>\r\n            /// A style constant used by the <see cref=\"imagefilledarc\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_ARC_PIE\")]\r\n            PIE = 0,\r\n\r\n            /// <summary>\r\n            /// A style constant used by the <see cref=\"imagefilledarc\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_ARC_CHORD\")]\r\n            CHORD = 1,\r\n\r\n            /// <summary>\r\n            /// A style constant used by the <see cref=\"imagefilledarc\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_ARC_NOFILL\")]\r\n            NOFILL = 2,\r\n\r\n            /// <summary>\r\n            /// A style constant used by the <see cref=\"imagefilledarc\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_ARC_EDGED\")]\r\n            EDGED = 4,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ColorValues\r\n\r\n        /// <summary>\r\n        /// Special Image Color values enumeration.\r\n        /// </summary>\r\n        public enum ColorValues\r\n        {\r\n            /// <summary>\r\n            /// Special color option which can be used in stead of color allocated with <see cref=\"imagecolorallocate\"/> or <see cref=\"imagecolorallocatealpha\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_COLOR_STYLED\")]\r\n            STYLED = -2,\r\n\r\n            /// <summary>\r\n            /// Special color option which can be used in stead of color allocated with <see cref=\"imagecolorallocate\"/> or <see cref=\"imagecolorallocatealpha\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_COLOR_BRUSHED\")]\r\n            BRUSHED = -3,\r\n\r\n            /// <summary>\r\n            /// Special color option which can be used in stead of color allocated with <see cref=\"imagecolorallocate\"/> or <see cref=\"imagecolorallocatealpha\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_COLOR_STYLEDBRUSHED\")]\r\n            STYLEDBRUSHED = -4,\r\n\r\n            /// <summary>\r\n            /// Special color option which can be used in stead of color allocated with <see cref=\"imagecolorallocate\"/> or <see cref=\"imagecolorallocatealpha\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_COLOR_TILED\")]\r\n            TILED = -5,\r\n\r\n            /// <summary>\r\n            /// Special color option which can be used in stead of color allocated with <see cref=\"imagecolorallocate\"/> or <see cref=\"imagecolorallocatealpha\"/>.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_COLOR_TRANSPARENT\")]\r\n            TRANSPARENT = -6\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region FilterTypes\r\n\r\n        /// <summary>\r\n        /// Filled Arc Style types enumeration\r\n        /// </summary>\r\n        public enum FilterTypes\r\n        {\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_NEGATE\")]\r\n            NEGATE,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_GRAYSCALE\")]\r\n            GRAYSCALE,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_BRIGHTNESS\")]\r\n            BRIGHTNESS,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_CONTRAST\")]\r\n            CONTRAST,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_COLORIZE\")]\r\n            COLORIZE,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_EDGEDETECT\")]\r\n            EDGEDETECT,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_EMBOSS\")]\r\n            EMBOSS,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_GAUSSIAN_BLUR\")]\r\n            GAUSSIAN_BLUR,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_SELECTIVE_BLUR\")]\r\n            SELECTIVE_BLUR,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_MEAN_REMOVAL\")]\r\n            MEAN_REMOVAL,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_SMOOTH\")]\r\n            SMOOTH,\r\n            /// <summary>\r\n            /// Special GD filter used by the <see cref=\"imagefilter(PhpResource,int)\"/> function.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMG_FILTER_PIXELATE\")]\r\n            PIXELATE,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gd_info\r\n\r\n        /// <summary>\r\n        /// Retrieve information about the currently installed GD library\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"gd_info\")]\r\n        public static PhpArray gd_info()\r\n        {\r\n            PhpArray array = new PhpArray();\r\n\r\n            array.Add(\"GD Version\", \"bundled (2.0 compatible)\");\r\n            array.Add(\"FreeType Support\", true);\r\n            array.Add(\"FreeType Linkage\", \"with TTF library\");\r\n            array.Add(\"T1Lib Support\", false);\r\n            array.Add(\"GIF Read Support\", true);\r\n            array.Add(\"GIF Create Support\", true);\r\n            array.Add(\"JPEG Support\", true);\r\n            array.Add(\"JPG Support\", true);\r\n            array.Add(\"PNG Support\", true);\r\n            array.Add(\"WBMP Support\", false);\r\n            array.Add(\"XPM Support\", false);\r\n            array.Add(\"XBM Support\", false);\r\n            array.Add(\"JIS-mapped Japanese Font Support\", false); // Maybe is true because of .net unicode strings?\r\n\r\n            return array;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region image2wbmp\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"image2wbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool image2wbmp(PhpResource im)\r\n        {\r\n            return image2wbmp(im, null, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"image2wbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool image2wbmp(PhpResource im, string filename)\r\n        {\r\n            return image2wbmp(im, filename, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"image2wbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool image2wbmp(PhpResource im, string filename, int threshold)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagealphablending\r\n\r\n        /// <summary>\r\n        /// Turn alpha blending mode on or off for the given image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagealphablending\")]\r\n        public static bool imagealphablending(PhpResource im, bool on)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            // In PHP AlphaBlending is supported only in True color images\r\n            if (!img.IsIndexed)\r\n            {\r\n                img.AlphaBlending = on;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageantialias\r\n\r\n        /// <summary>\r\n        /// Should antialiased functions used or not\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageantialias\")]\r\n        public static bool imageantialias(PhpResource im, bool on)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            img.AntiAlias = on;\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagearc\r\n\r\n        /// <summary>\r\n        /// Draw a partial ellipse\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagearc\")]\r\n        public static bool imagearc(PhpResource im, int cx, int cy, int w, int h, int s, int e, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                Pen pen = CreatePen(col, img, false);\r\n\r\n                int range = 0;\r\n                AdjustAnglesAndSize(ref w, ref h, ref s, ref e, ref range);\r\n\r\n                g.DrawArc(pen, new Rectangle(cx - (w / 2), cy - (h / 2), w, h), s, range);\r\n\r\n                pen.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adjust angles and size for same behavior as in PHP\r\n        /// </summary>\r\n        /// <param name=\"w\"></param>\r\n        /// <param name=\"h\"></param>\r\n        /// <param name=\"s\"></param>\r\n        /// <param name=\"e\"></param>\r\n        /// <param name=\"range\"></param>\r\n        private static void AdjustAnglesAndSize(ref int w, ref int h, ref int s, ref int e, ref int range)\r\n        {\r\n            if (w < 0) w = 0;\r\n            if (h < 0) h = 0;\r\n\r\n            if (w > 1 && w <= 4) w -= 1;\r\n            if (h > 1 && h <= 4) h -= 1;\r\n            if (w > 4) w -= 2;\r\n            if (h > 4) h -= 2;\r\n\r\n            range = e - s;\r\n            if (range < 360) range = range + (range / 360) * 360;\r\n            if (range > 360) range = range - (range / 360) * 360;\r\n\r\n            if (s < 360) s = s + (s / 360) * 360;\r\n            if (e < 360) e = e + (e / 360) * 360;\r\n\r\n            if (s < 0) s = 360 + s;\r\n            if (e < 0) e = 360 + e;\r\n\r\n            if (e > 360) e = e - (e / 360) * 360;\r\n            if (s > 360) e = e - (e / 360) * 360;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagechar\r\n\r\n        /// <summary>\r\n        /// Draw a character\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagechar\")]\r\n        public static bool imagechar(PhpResource im, int font, int x, int y, string c, int col)\r\n        {\r\n            return imagestring(im, font, x, y, c[0].ToString(), col);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecharup\r\n\r\n        /// <summary>\r\n        /// Draw a character rotated 90 degrees counter-clockwise\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecharup\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagecharup(PhpResource im, int font, int x, int y, string c, int col)\r\n        {\r\n            //return imagestringup(im, font, x, y, c[0].ToString(), col);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorallocate\r\n\r\n        /// <summary>\r\n        /// Allocate a color for an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorallocate\")]\r\n        public static int imagecolorallocate(PhpResource im, int red, int green, int blue)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return 0;   // TODO: (maros) check if it is 0 in PHP\r\n            \r\n            //TODO: (Maros) In non-truecolor images (palette images) have little more function.\r\n            int color = RGBToPHPColor(red, green, blue);\r\n\r\n            return color;\r\n        }\r\n\r\n        /// <summary>\r\n        /// RGB values to PHP Color format\r\n        /// </summary>\r\n        /// <param name=\"red\"></param>\r\n        /// <param name=\"green\"></param>\r\n        /// <param name=\"blue\"></param>\r\n        /// <returns></returns>\r\n        private static int RGBToPHPColor(int red, int green, int blue)\r\n        {\r\n            int color = 0; // = 0x00 << 24;\r\n\r\n            color = color | blue & 0x0000FF;\r\n            color = color | ((green & 0x0000FF) << 8);\r\n            color = color | ((red & 0x0000FF) << 16);\r\n            return color;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts PHP Color format to .NET Color format (different alpha meaning)\r\n        /// </summary>\r\n        /// <param name=\"color\">PHP Color</param>\r\n        /// <returns>.NET Color</returns>\r\n        private static Color PHPColorToNETColor(int color)\r\n        {\r\n            if (color == (int)ColorValues.TRANSPARENT)\r\n            {\r\n                return Color.Transparent;\r\n            }\r\n\r\n            Color col;\r\n\r\n            int alpha = PHPColorToPHPAlpha(color);\r\n            int red = PHPColorToRed(color);\r\n            int green = PHPColorToGreen(color);\r\n            int blue = PHPColorToBlue(color);\r\n\r\n            // PHP Alpha format to .NET Alpha format\r\n            alpha = (byte)((1.0f - ((float)alpha / 127.0f)) * 255.0f);\r\n\r\n            col = Color.FromArgb(alpha, red, green, blue);\r\n\r\n            return col;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorallocatealpha\r\n\r\n        /// <summary>\r\n        /// Allocate a color with an alpha level.  Works for true color and palette based images.\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorallocatealpha\")]\r\n        public static int imagecolorallocatealpha(PhpResource im, int red, int green, int blue, int alpha)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return 0;   // TODO: (maros) chekc if it is 0 in PHP\r\n            \r\n            //TODO: (Maros) In non-truecolor images (palette images) have little more function.\r\n\r\n            return RGBAToPHPColor(red, green, blue, alpha);\r\n        }\r\n\r\n        /// <summary>\r\n        /// RGBA values to PHP Color format.\r\n        /// </summary>\r\n        private static int RGBAToPHPColor(int red, int green, int blue, int alpha)\r\n        {\r\n            int color = alpha << 24;\r\n\r\n            color = color | blue & 0x0000FF;\r\n            color = color | ((green & 0x0000FF) << 8);\r\n            color = color | ((red & 0x0000FF) << 16);\r\n            return color;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorat\r\n\r\n        /// <summary>\r\n        /// Get the index of the color of a pixel\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorat\")]\r\n        public static int imagecolorat(PhpResource im, int x, int y)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return -1;  // TODO: (maros) check if it is -1 in PHP\r\n            \r\n            return NETColorToPHPColor(img.Image.GetPixel(x, y));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts .NET Color format to PHP Color format\r\n        /// </summary>\r\n        /// <param name=\"col\">.NET Color</param>\r\n        /// <returns>PHP Color</returns>\r\n        private static int NETColorToPHPColor(Color col)\r\n        {\r\n            int alpha = col.A;\r\n\r\n            int color = RGBToPHPColor(col.R, col.G, col.B);\r\n\r\n            // PHP Alpha format to .NET Alpha format\r\n            alpha = (byte)((1.0f - ((float)alpha / 255.0f)) * 127.0f);\r\n            alpha = alpha << 24;\r\n\r\n            return color | alpha;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorclosest\r\n\r\n        /// <summary>\r\n        /// Get the index of the closest color to the specified color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorclosest\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorclosest(PhpResource im, int red, int green, int blue)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorclosestalpha\r\n\r\n        /// <summary>\r\n        /// Find the closest matching colour with alpha transparency\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorclosestalpha\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorclosestalpha(PhpResource im, int red, int green, int blue, int alpha)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorclosesthwb\r\n\r\n        /// <summary>\r\n        /// Get the index of the color which has the hue, white and blackness nearest to the given color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorclosesthwb\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorclosesthwb(PhpResource im, int red, int green, int blue)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolordeallocate\r\n\r\n        /// <summary>\r\n        /// De-allocate a color for an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolordeallocate\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagecolordeallocate(PhpResource im, int index)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorexact\r\n\r\n        /// <summary>\r\n        /// Get the index of the specified color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorexact\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorexact(PhpResource im, int red, int green, int blue)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorexactalpha\r\n\r\n        /// <summary>\r\n        /// Find exact match for colour with transparency\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorexactalpha\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorexactalpha(PhpResource im, int red, int green, int blue, int alpha)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolormatch\r\n\r\n        /// <summary>\r\n        /// Makes the colors of the palette version of an image more closely match the true color version\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolormatch\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagecolormatch(PhpResource im1, PhpResource im2)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorresolve\r\n\r\n        /// <summary>\r\n        /// Get the index of the specified color or its closest possible alternative\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorresolve\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorresolve(PhpResource im, int red, int green, int blue)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorresolvealpha\r\n\r\n        /// <summary>\r\n        /// Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorresolvealpha\", FunctionImplOptions.NotSupported)]\r\n        public static int imagecolorresolvealpha(PhpResource im, int red, int green, int blue, int alpha)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorset\r\n\r\n        /// <summary>\r\n        /// Set the color for the specified palette index\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorset\", FunctionImplOptions.NotSupported)]\r\n        public static void imagecolorset(PhpResource im, int col, int red, int green, int blue)\r\n        {\r\n            //TODO: (Maros) Used in non-truecolor images (palette images).\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorsforindex\r\n\r\n        /// <summary>\r\n        /// Get the colors for an index\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorsforindex\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray imagecolorsforindex(PhpResource im, int col)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolorstotal\r\n\r\n        /// <summary>\r\n        /// Find out the number of colors in an image's palette\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolorstotal\")]\r\n        public static int imagecolorstotal(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return 0;\r\n\r\n            var format = img.Image.PixelFormat;\r\n\r\n            if ((format & PixelFormat.Format1bppIndexed) != 0)\r\n                return 2;\r\n            if ((format & PixelFormat.Format4bppIndexed) != 0)\r\n                return 16;\r\n            if ((format & PixelFormat.Format8bppIndexed) != 0)\r\n                return 256;\r\n\r\n            if ((format & PixelFormat.Indexed) != 0)\r\n            {\r\n                // count the palette\r\n                try\r\n                {\r\n                    // TODO: optimize, cache ?\r\n                    return img.Image.Palette.Entries.Length;\r\n                }\r\n                catch\r\n                {\r\n                    // ignored, some error during SafeNativeMethods.Gdip.GdipGetImagePalette\r\n                }\r\n            }\r\n\r\n            // non indexed image\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecolortransparent\r\n\r\n        /// <summary>\r\n        /// Define a color as transparent\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolortransparent\")]\r\n        public static int imagecolortransparent(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return -1; // TODO: (maros) check if it is -1 in PHP\r\n            \r\n\r\n            if (img.IsTransparentColSet == false)\r\n            {\r\n                return -1;\r\n            }\r\n\r\n            return NETColorToPHPColor(img.transparentColor);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Define a color as transparent\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecolortransparent\")]\r\n        public static int imagecolortransparent(PhpResource im, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return -1; // TODO: (maros) chekc if it is -1 in PHP\r\n            \r\n\r\n            img.transparentColor = PHPColorToNETColor(col);\r\n            img.IsTransparentColSet = true;\r\n\r\n            return col;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageconvolution\r\n\r\n        /// <summary>\r\n        /// Apply a 3x3 convolution matrix, using coefficient div and offset\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageconvolution\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imageconvolution(PhpResource src_im, PhpArray matrix3x3, double div, double offset)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecopy\r\n\r\n        /// <summary>\r\n        /// Copy part of an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecopy\")]\r\n        public static bool imagecopy(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\r\n        {\r\n            return CopyImageTransparent(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h, 100);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecopymerge\r\n\r\n        /// <summary>\r\n        /// Merge one part of an image with another\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecopymerge\")]\r\n        public static bool imagecopymerge(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\r\n        {\r\n            return CopyImageTransparent(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h, pct);\r\n        }\r\n\r\n        private static bool CopyImageTransparent(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\r\n        {\r\n            PhpGdImageResource dst_img = PhpGdImageResource.ValidImage(dst_im);\r\n            if (dst_img == null)\r\n                return false;\r\n\r\n            PhpGdImageResource src_img = PhpGdImageResource.ValidImage(src_im);\r\n            if (src_img == null)\r\n                return false;\r\n\r\n            if (pct <= 0 || src_w <= 0 || src_h <= 0)\r\n                return true;\r\n\r\n            ImageAttributes ia = null;\r\n\r\n            if (pct < 100)\r\n            {\r\n                // prepare transformation matrix if needed\r\n                ColorMatrix cm = new ColorMatrix();\r\n                cm.Matrix00 = cm.Matrix11 = cm.Matrix22 = cm.Matrix44 = 1.0f;\r\n                cm.Matrix33 = (float)pct * 0.01f;\r\n\r\n                ia = new ImageAttributes();\r\n                ia.SetColorMatrix(cm, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);\r\n            }\r\n\r\n            try\r\n            {\r\n                // draw the image\r\n                using (Graphics g = Graphics.FromImage(dst_img.Image))\r\n                {\r\n                    g.DrawImage(src_img.Image,\r\n                        new Rectangle(dst_x, dst_y, src_w, src_h),\r\n                        src_x, src_y, src_w, src_h,\r\n                        GraphicsUnit.Pixel, ia);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                // output the warning\r\n                PhpException.Throw(PhpError.Warning, ex.Message);\r\n                return false;\r\n            }\r\n            finally\r\n            {\r\n                if (ia != null)\r\n                {\r\n                    ia.Dispose();\r\n                    ia = null;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecopymergegray\r\n\r\n        /// <summary>\r\n        /// Merge one part of an image with another\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecopymergegray\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagecopymergegray(PhpResource src_im, PhpResource dst_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecopyresampled\r\n\r\n        /// <summary>\r\n        /// Copy and resize part of an image using resampling to help ensure clarity\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecopyresampled\")]\r\n        public static bool imagecopyresampled(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\r\n        {\r\n            return ImageCopyAndResize(dst_im, src_im, dst_x, dst_y, src_x, src_y, dst_w, dst_h,\r\n                src_w, src_h, InterpolationMode.HighQualityBicubic);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecopyresized\r\n\r\n        /// <summary>\r\n        /// Copy and resize part of an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecopyresized\")]\r\n        public static bool imagecopyresized(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\r\n        {\r\n            return ImageCopyAndResize(dst_im, src_im, dst_x, dst_y, src_x, src_y, dst_w, dst_h,\r\n                src_w, src_h, InterpolationMode.NearestNeighbor);\r\n        }\r\n\r\n        private static bool ImageCopyAndResize(PhpResource dst_im, PhpResource src_im,\r\n            int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h,\r\n            int src_w, int src_h, InterpolationMode mode)\r\n        {\r\n            PhpGdImageResource dst_img = PhpGdImageResource.ValidImage(dst_im);\r\n            if (dst_img == null)\r\n                return false;\r\n\r\n            PhpGdImageResource src_img = PhpGdImageResource.ValidImage(src_im);\r\n            if (src_img == null)\r\n                return false;            \r\n\r\n            //if (src_w == 0 && src_h == 0)\r\n            //    return true;\r\n\r\n            if (dst_w == 0 || dst_h == 0)\r\n                return true;\r\n            \r\n            //if (dst_w < 0) dst_w = 0;\r\n            //if (dst_h < 0) dst_h = 0;\r\n            \r\n            using (Graphics g = Graphics.FromImage(dst_img.Image))\r\n            {\r\n                g.InterpolationMode = mode;\r\n                g.CompositingMode = CompositingMode.SourceCopy;\r\n                g.DrawImage(src_img.Image, new Rectangle(dst_x, dst_y, dst_w, dst_h),\r\n                    new Rectangle(src_x, src_y, src_w, src_h), GraphicsUnit.Pixel);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreate\r\n\r\n        /// <summary>\r\n        /// Create a new image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreate\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreate(int x_size, int y_size)\r\n        {\r\n            if (x_size <= 0 || y_size <= 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, string.Format(Utils.Resources.GetString(\"invalid_image_dimensions\")));\r\n                return null;\r\n            }\r\n\r\n            PhpGdImageResource img = new PhpGdImageResource(x_size, y_size);\r\n            if (img == null) return null;\r\n\r\n            // Draw white background\r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                SolidBrush brush = new SolidBrush(Color.White);\r\n                g.FillRectangle(brush, 0, 0, img.Image.Width, img.Image.Height);\r\n                brush.Dispose();\r\n            }\r\n\r\n            //TODO: (Maros) This function should create palette based image.\r\n            // NOTE: (J) indexed image is created in Bitmap constructor, by providing PixelFormat.Indexed\r\n            //img.IsTrueColor = false;\r\n\r\n            return img;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromgd\r\n\r\n        /// <summary>\r\n        /// Create a new image from GD file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromgd\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagecreatefromgd(string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromgd2\r\n\r\n        /// <summary>\r\n        /// Create a new image from GD2 file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromgd2\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagecreatefromgd2(string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromgd2part\r\n\r\n        /// <summary>\r\n        /// Create a new image from a given part of GD2 file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromgd2part\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromgif\r\n\r\n        /// <summary>\r\n        /// Create a new image from GIF file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromgif\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreatefromgif(string filename)\r\n        {\r\n            return CreateGdImageFrom(filename, ImageFormat.Gif);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromjpeg\r\n\r\n        /// <summary>\r\n        /// Create a new image from JPEG file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromjpeg\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreatefromjpeg(string filename)\r\n        {\r\n            return CreateGdImageFrom(filename, ImageFormat.Jpeg);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefrompng\r\n\r\n        /// <summary>\r\n        /// Create a new image from PNG file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefrompng\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreatefrompng(string filename)\r\n        {\r\n            return CreateGdImageFrom(filename, ImageFormat.Png);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromstring\r\n\r\n        /// <summary>\r\n        /// Create a new image from the image stream in the string\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromstring\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreatefromstring(PhpBytes image)\r\n        {\r\n            if (image == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"empty_string_or_invalid_image\"));\r\n                return null;\r\n            }\r\n\r\n            PhpGdImageResource res;\r\n\r\n            try\r\n            {\r\n                MemoryStream stream = new MemoryStream(image.ReadonlyData);\r\n                Image img = Image.FromStream(stream, true, false);\r\n\r\n                res = new PhpGdImageResource(img);\r\n            }\r\n            catch\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"empty_string_or_invalid_image\"));\r\n                return null;\r\n            }\r\n\r\n            return res;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromwbmp\r\n\r\n        /// <summary>\r\n        /// Create a new image from WBMP file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromwbmp\")]\r\n        public static PhpResource imagecreatefromwbmp(string filename)\r\n        {\r\n            PhpResource resource = CreateGdImageFrom(filename, null);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromxbm\r\n\r\n        /// <summary>\r\n        /// Create a new image from XBM file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromxbm\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagecreatefromxbm(string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatefromxpm\r\n\r\n        /// <summary>\r\n        /// Create a new image from XPM file or URL\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatefromxpm\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagecreatefromxpm(string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagecreatetruecolor\r\n\r\n        /// <summary>\r\n        /// Create a new true color image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagecreatetruecolor\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagecreatetruecolor(int x_size, int y_size)\r\n        {\r\n            if (x_size <= 0 || y_size <= 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"invalid_image_dimensions\"));\r\n                return null;\r\n            }\r\n\r\n            PhpGdImageResource img = new PhpGdImageResource(x_size, y_size);\r\n            if (img == null) return null;\r\n\r\n            // Draw black background\r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                SolidBrush brush = new SolidBrush(Color.Black);\r\n                g.FillRectangle(brush, 0, 0, img.Image.Width, img.Image.Height);\r\n                brush.Dispose();\r\n            }\r\n\r\n            img.AlphaBlending = true;\r\n\r\n            return img;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagedashedline\r\n\r\n        /// <summary>\r\n        /// Draw a dashed line (DEPRECATED in PHP)\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagedashedline\")]\r\n        public static bool imagedashedline(PhpResource im, int x1, int y1, int x2, int y2, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n                Pen pen = CreatePen(col, img, false);\r\n                pen.DashStyle = DashStyle.Dash;\r\n                g.DrawLine(pen, x1, y1, x2, y2);\r\n                pen.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagedestroy\r\n\r\n        /// <summary>\r\n        /// Destroy an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagedestroy\")]\r\n        public static bool imagedestroy(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            img.Dispose();\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageellipse\r\n\r\n        /// <summary>\r\n        /// Draw an ellipse\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageellipse\")]\r\n        public static bool imageellipse(PhpResource im, int cx, int cy, int w, int h, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                SetAntiAlias(img, g);\r\n                Pen pen = CreatePen(col, img, false);\r\n                pen.Width = 1;\r\n                g.DrawEllipse(pen, cx - (w / 2), cy - (h / 2), w, h);\r\n                pen.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefill\r\n\r\n        /// <summary>\r\n        /// Flood fill\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefill\")]\r\n        public static bool imagefill(PhpResource im, int x, int y, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (x < 0 || y < 0) return true;\r\n            if (x > img.Image.Width || x > img.Image.Height) return true;\r\n\r\n            //TODO: (Maros) COLOR_TILED is not implemented.\r\n\r\n            //TODO: Can be optimized.\r\n            FloodFill(img.Image, x, y, PHPColorToNETColor(col), false, Color.Red);\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilledarc\r\n\r\n        /// <summary>\r\n        /// Draw a filled partial ellipse\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilledarc\")]\r\n        public static bool imagefilledarc(PhpResource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n                Pen pen = CreatePen(col, img, false);\r\n\r\n                int range = 0;\r\n                AdjustAnglesAndSize(ref w, ref h, ref s, ref e, ref range);\r\n\r\n                // IMG_ARC_PIE\r\n                if (style == (int)FilledArcStyles.PIE || style == (int)FilledArcStyles.EDGED)\r\n                {\r\n                    g.DrawArc(pen, new Rectangle(cx - (w / 2), cy - (h / 2), w, h), s, range);\r\n                    using (SolidBrush brush = new SolidBrush(GetAlphaColor(img, col)))\r\n                    {\r\n                        g.FillPie(brush, new Rectangle(cx - (w / 2), cy - (h / 2), w, h), s, range);\r\n                    }\r\n                }\r\n\r\n                if (style == (int)FilledArcStyles.NOFILL)\r\n                {\r\n                    g.DrawArc(pen, new Rectangle(cx - (w / 2), cy - (h / 2), w, h), s, range);\r\n                }\r\n\r\n                if (style == ((int)FilledArcStyles.EDGED | (int)FilledArcStyles.NOFILL))\r\n                {\r\n                    Point[] points = { \r\n                                             new Point(cx+(int)(Math.Cos(s*Math.PI/180) * (w / 2.0)), cy+(int)(Math.Sin(s*Math.PI/180) * (h / 2.0))),\r\n                                             new Point(cx, cy),\r\n                                             new Point(cx+(int)(Math.Cos(e*Math.PI/180) * (w / 2.0)), cy+(int)(Math.Sin(e*Math.PI/180) * (h / 2.0)))\r\n                                         };\r\n\r\n                    g.DrawLines(pen, points);\r\n                    g.DrawArc(pen, new Rectangle(cx - (w / 2), cy - (h / 2), w, h), s, range);\r\n                }\r\n\r\n                // IMG_ARC_CHORD\r\n                if (style == ((int)FilledArcStyles.CHORD) || style == ((int)FilledArcStyles.CHORD | (int)FilledArcStyles.EDGED))\r\n                {\r\n                    using (SolidBrush brush = new SolidBrush(GetAlphaColor(img, col)))\r\n                    {\r\n                        Point point1 = new Point(cx + (int)(Math.Cos(s * Math.PI / 180) * (w / 2.0)), cy + (int)(Math.Sin(s * Math.PI / 180) * (h / 2.0)));\r\n                        Point point2 = new Point(cx + (int)(Math.Cos(e * Math.PI / 180) * (w / 2.0)), cy + (int)(Math.Sin(e * Math.PI / 180) * (h / 2.0)));\r\n\r\n                        Point[] points = { new Point(cx, cy), point1, point2 };\r\n\r\n                        //pen.LineJoin = LineJoin.Bevel;\r\n                        //g.DrawPolygon(pen, points);\r\n                        //g.DrawLine(pen, point1, point2);\r\n                        g.FillPolygon(brush, points);\r\n                    }\r\n                }\r\n\r\n                if (style == ((int)FilledArcStyles.CHORD | (int)FilledArcStyles.NOFILL))\r\n                {\r\n                    g.DrawLine(pen,\r\n                        new Point(cx + (int)(Math.Cos(s * Math.PI / 180) * (w / 2.0)), cy + (int)(Math.Sin(s * Math.PI / 180) * (h / 2.0))),\r\n                        new Point(cx + (int)(Math.Cos(e * Math.PI / 180) * (w / 2.0)), cy + (int)(Math.Sin(e * Math.PI / 180) * (h / 2.0)))\r\n                        );\r\n                }\r\n\r\n                if (style == ((int)FilledArcStyles.CHORD | (int)FilledArcStyles.NOFILL | (int)FilledArcStyles.EDGED))\r\n                {\r\n                    Point[] points = { \r\n                                             new Point(cx, cy), \r\n                                             new Point(cx+(int)(Math.Cos(s*Math.PI/180) * (w / 2.0)), cy+(int)(Math.Sin(s*Math.PI/180) * (h / 2.0))), \r\n                                             new Point(cx+(int)(Math.Cos(e*Math.PI/180) * (w / 2.0)), cy+(int)(Math.Sin(e*Math.PI/180) * (h / 2.0)))\r\n                                         };\r\n\r\n                    //pen.LineJoin = LineJoin.Bevel;\r\n                    g.DrawPolygon(pen, points);\r\n                }\r\n\r\n                pen.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilledellipse\r\n\r\n        /// <summary>\r\n        /// Draw an ellipse\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilledellipse\")]\r\n        public static bool imagefilledellipse(PhpResource im, int cx, int cy, int w, int h, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n\r\n                if (img.tiled != null)\r\n                {\r\n                    g.FillEllipse(img.tiled, cx - (w / 2), cy - (h / 2), w, h);\r\n                }\r\n                else\r\n                {\r\n                    SolidBrush brush = new SolidBrush(GetAlphaColor(img, col));\r\n                    g.FillEllipse(brush, cx - (w / 2), cy - (h / 2), w, h);\r\n                    brush.Dispose();\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilledpolygon\r\n\r\n        /// <summary>\r\n        /// Draw a filled polygon\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilledpolygon\")]\r\n        public static bool imagefilledpolygon(PhpResource im, PhpArray point, int num_points, int col)\r\n        {\r\n            return DrawPoly(im, point, num_points, col, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Draws normal or filled polygon\r\n        /// </summary>\r\n        /// <param name=\"im\"></param>\r\n        /// <param name=\"point\"></param>\r\n        /// <param name=\"num_points\"></param>\r\n        /// <param name=\"col\"></param>\r\n        /// <param name=\"filled\"></param>\r\n        /// <returns></returns>\r\n        private static bool DrawPoly(PhpResource im, PhpArray point, int num_points, int col, bool filled)\r\n        {\r\n            if (im == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unexpected_arg_given\", 1, PhpResource.PhpTypeName, PhpVariable.TypeNameNull.ToLowerInvariant()));\r\n                return false;\r\n            }\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (point == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, LibResources.GetString(\"unexpected_arg_given\", 2, PhpArray.PhpTypeName, PhpVariable.TypeNameNull.ToLowerInvariant()));\r\n                return false;\r\n            }\r\n\r\n            \r\n            if (point.Count < num_points * 2)\r\n                return false;\r\n            \r\n            if (num_points <= 0)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"must_be_positive_number_of_points\"));\r\n                return false;\r\n            }\r\n\r\n            Point[] points = new Point[num_points];\r\n\r\n            for (int i = 0, j = 0; i < num_points; i++, j += 2)\r\n                points[i] = new Point(PHP.Core.Convert.ObjectToInteger(point[j]), PHP.Core.Convert.ObjectToInteger(point[j + 1]));\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n\r\n                if (filled)\r\n                {\r\n                    if (col < 0)\r\n                    {\r\n                        if (col == (int)ColorValues.TILED)\r\n                        {\r\n                            if (img.tiled != null)\r\n                            {\r\n                                //TODO: (Maros) TILED filles little more width in PHP (pixel wider).\r\n                                g.FillPolygon(img.tiled, points);\r\n                            }\r\n                            return true;\r\n                        }\r\n                        //TODO: (Maros) BRUSHED_STYLED missing, BRUSHED and BRUSHED_STYLED has different behavior in PHP (brush image draw for every pixel drawn)\r\n                        //TODO: (Maros) STYLED has little different look (different angle of lines etc.)\r\n                        else if (col == -2 && img.styled != null)\r\n                        {\r\n                            g.FillPolygon(img.styled, points);\r\n                        }\r\n                        else if (col == -3 && img.brushed != null)\r\n                        {\r\n                            g.FillPolygon(img.brushed, points);\r\n                        }\r\n                        else\r\n                        {\r\n                            return true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        using (SolidBrush brush = new SolidBrush(PHPColorToNETColor(col)))\r\n                        {\r\n                            g.FillPolygon(brush, points);\r\n                        }\r\n                    }\r\n\r\n                    using (Pen pen = CreatePen(col, img, false))\r\n                    {\r\n                        pen.LineJoin = LineJoin.Bevel;\r\n                        g.DrawPolygon(pen, points);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    using (Pen pen = CreatePen(col, img, true))\r\n                    {\r\n                        SetAntiAlias(img, g);\r\n\r\n                        pen.LineJoin = LineJoin.Bevel;\r\n                        g.DrawPolygon(pen, points);\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilledrectangle\r\n\r\n        /// <summary>\r\n        /// Draw a filled rectangle\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilledrectangle\")]\r\n        public static bool imagefilledrectangle(PhpResource im, int x1, int y1, int x2, int y2, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            // PHP adds 1 more pixel to the right bottom\r\n            x2++;\r\n            y2++;\r\n\r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n\r\n                if (col == (int)ColorValues.TILED)\r\n                {\r\n                    if (img.tiled == null)\r\n                        return true;\r\n\r\n                    TextureBrush brush = img.tiled;\r\n                    g.FillRectangle(brush, x1, y1, x2 - x1, y2 - y1);\r\n                }\r\n                else\r\n                {\r\n                    Color color = GetAlphaColor(img, col);\r\n                    SolidBrush brush = new SolidBrush(color);\r\n                    g.FillRectangle(brush, x1, y1, x2 - x1, y2 - y1);\r\n                    brush.Dispose();\r\n                }\r\n\r\n                //g.FillRectangle(brush, x1, y1, x2 - x1, y2 - y1);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilltoborder\r\n\r\n        /// <summary>\r\n        /// Flood fill to specific color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilltoborder\")]\r\n        public static bool imagefilltoborder(PhpResource im, int x, int y, int border, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (x < 0 || y < 0) return true;\r\n            if (x > img.Image.Width || x > img.Image.Height) return true;\r\n\r\n            //TODO: (Maros) COLOR_TILED is not implemented.\r\n\r\n            //TODO: (Maros) Can be optimized.\r\n            FloodFill(img.Image, x, y, PHPColorToNETColor(col), true, PHPColorToNETColor(border));\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefilter\r\n\r\n        /// <summary>\r\n        /// Applies a filter to an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilter\")]\r\n        public static bool imagefilter(PhpResource src_im, int filtertype)\r\n        {\r\n            return imagefilter(src_im, filtertype, -1, -1, -1, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Applies a filter to an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilter\")]\r\n        public static bool imagefilter(PhpResource src_im, int filtertype, int arg1)\r\n        {\r\n            return imagefilter(src_im, filtertype, arg1, -1, -1, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Applies a filter to an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilter\")]\r\n        public static bool imagefilter(PhpResource src_im, int filtertype, int arg1, int arg2)\r\n        {\r\n            return imagefilter(src_im, filtertype, arg1, arg2, -1, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Applies a filter to an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilter\")]\r\n        public static bool imagefilter(PhpResource src_im, int filtertype, int arg1, int arg2, int arg3)\r\n        {\r\n            return imagefilter(src_im, filtertype, arg1, arg2, arg3, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Applies a filter to an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefilter\")]\r\n        public static bool imagefilter(PhpResource im, int filtertype, int arg1, int arg2, int arg3, int arg4)\r\n        {\r\n            if (arg1 != -1)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"arg1\", arg1);\r\n            }\r\n\r\n            if (arg2 != -1)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"arg2\", arg2);\r\n            }\r\n\r\n            if (arg3 != -1)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"arg3\", arg3);\r\n            }\r\n\r\n            if (arg4 != -1)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"arg4\", arg4);\r\n            }\r\n\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            //TODO: (Maros) Not all filters are added here.\r\n\r\n            switch (filtertype)\r\n            {\r\n                case (int)FilterTypes.NEGATE:\r\n                    InvertColors(img.Image);\r\n                    break;\r\n                case (int)FilterTypes.GRAYSCALE:\r\n                    MakeGrayscale(img.Image);\r\n                    break;\r\n                default:\r\n                    return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefontheight\r\n\r\n        /// <summary>\r\n        /// Get font height\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefontheight\")]\r\n        public static int imagefontheight(int font)\r\n        {\r\n            Font fontText;\r\n            FontStyle style;\r\n            int spacing;\r\n\r\n            if (!GetFont(font, out fontText, out style, out spacing))\r\n                return -1;\r\n\r\n            return fontText.Height; // TODO\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefontwidth\r\n\r\n        /// <summary>\r\n        /// Get font width\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefontwidth\")]\r\n        public static int imagefontwidth(int font)\r\n        {\r\n            Font fontText;\r\n            FontStyle style;\r\n            int spacing;\r\n\r\n            if (!GetFont(font, out fontText, out style, out spacing))\r\n                return -1;\r\n\r\n            return TextRenderer.MeasureText(\" \", fontText).Width; // TODO\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageftbbox\r\n\r\n        /// <summary>\r\n        /// Give the bounding box of a markerName using fonts via freetype2\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageftbbox\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray imageftbbox(double size, double angle, string font_file, string text/*, PhpArray extrainfo*/)\r\n        {\r\n            //return imagettfbbox(size, angle, font_file, text);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagefttext\r\n\r\n        /// <summary>\r\n        /// Write text to the image using fonts via freetype2\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagefttext\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray imagefttext(PhpResource im, double size, double angle, int x, int y, int col, string font_file, string text/*, PhpArray extrainfo*/)\r\n        {\r\n            //return imagettftext(im, size, angle, x, y, col, font_file, text);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegammacorrect\r\n\r\n        /// <summary>\r\n        /// Apply a gamma correction to a GD image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegammacorrect\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagegammacorrect(PhpResource im, double inputgamma, double outputgamma)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegd\r\n\r\n        /// <summary>\r\n        /// Output GD image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegd\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagegd(PhpResource im, string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegd2\r\n\r\n        /// <summary>\r\n        /// Output GD2 image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegd2\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagegd2(PhpResource im, string filename, int chunk_size, int type)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegif\r\n\r\n        /// <summary>\r\n        /// Output GIF image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegif\")]\r\n        public static bool imagegif(PhpResource im)\r\n        {\r\n            return imagegif(im, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output GIF image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegif\")]\r\n        public static bool imagegif(PhpResource im, string filename)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (img.IsTransparentColSet)\r\n            {\r\n                ChangeColor(img.Image, img.transparentColor, Color.Transparent);\r\n            }\r\n\r\n            try\r\n            {\r\n                if (string.IsNullOrEmpty(filename))\r\n                {\r\n                    var context = ScriptContext.CurrentContext;\r\n                    img.Image.Save(context.OutputStream, ImageFormat.Gif);\r\n                }\r\n                else\r\n                {\r\n                    filename = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, filename);\r\n                    img.Image.Save(filename, ImageFormat.Gif);\r\n                }\r\n\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegrabscreen\r\n\r\n        /// <summary>\r\n        /// Grab a screenshot\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegrabscreen\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagegrabscreen()\r\n        {\r\n            Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,\r\n                Screen.PrimaryScreen.Bounds.Height);\r\n\r\n            PhpGdImageResource resource = new PhpGdImageResource(bmpScreenshot);\r\n\r\n            using (Graphics g = Graphics.FromImage(resource.Image))\r\n            {\r\n                try\r\n                {\r\n                    g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0,\r\n                        Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);\r\n                }\r\n                catch\r\n                {\r\n                    g.FillRectangle(new SolidBrush(Color.Black), 0, 0,\r\n                        resource.Image.Width, resource.Image.Height);\r\n                }\r\n            }\r\n\r\n            return resource;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagegrabwindow\r\n\r\n        /// <summary>\r\n        /// Grab a window or its client area using a windows handle (HWND property in COM instance)\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagegrabwindow\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagegrabwindow(int window_handle, int client_area)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageinterlace\r\n\r\n        /// <summary>\r\n        /// Enable or disable interlace\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageinterlace\", FunctionImplOptions.NotSupported)]\r\n        public static int imageinterlace(PhpResource im, int interlace)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageistruecolor\r\n\r\n        /// <summary>\r\n        /// return true if the image uses truecolor\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageistruecolor\")]\r\n        public static bool imageistruecolor(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n\r\n            return !img.IsIndexed;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagejpeg\r\n\r\n        /// <summary>\r\n        /// Output JPEG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagejpeg\")]\r\n        public static bool imagejpeg(PhpResource im)\r\n        {\r\n            return imagejpeg(im, null, 75);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output JPEG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagejpeg\")]\r\n        public static bool imagejpeg(PhpResource im, string filename)\r\n        {\r\n            return imagejpeg(im, filename, 75);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output JPEG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagejpeg\")]\r\n        public static bool imagejpeg(PhpResource im, string filename, int quality)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (quality < 0)\r\n            {\r\n                quality = 75;\r\n            }\r\n\r\n            if (quality > 100)\r\n            {\r\n                quality = 100;\r\n            }\r\n\r\n            using (EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality))\r\n            {\r\n                using (EncoderParameters encoderParams = new EncoderParameters(1))\r\n                {\r\n                    encoderParams.Param[0] = qualityParam;\r\n\r\n                    // Jpeg image codec \r\n                    ImageCodecInfo jpegCodec = GetEncoderInfo(\"image/jpeg\");\r\n                        \r\n                    try\r\n                    {\r\n                        if (string.IsNullOrEmpty(filename))\r\n                        {\r\n                            MemoryStream ms = new MemoryStream(1024);\r\n                            img.Image.Save(ms, jpegCodec, encoderParams);\r\n\r\n                            // saved into separated stream first, because Save method accesses stream's Position, which throws an exception when using NetworkStream\r\n                            ms.Position = 0;\r\n                            ms.CopyTo(ScriptContext.CurrentContext.OutputStream);\r\n                        }\r\n                        else\r\n                        {\r\n                            filename = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, filename);\r\n                            img.Image.Save(filename, jpegCodec, encoderParams);\r\n                        }\r\n                    }\r\n                    catch\r\n                    {\r\n                        return false;\r\n                    }\r\n\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagelayereffect\r\n\r\n        /// <summary>\r\n        /// Set the alpha blending flag to use the bundled libgd layering effects\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagelayereffect\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagelayereffect(PhpResource im, int effect)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageline\r\n\r\n        /// <summary>\r\n        /// Draw a line\r\n        /// </summary>\r\n        [ImplementsFunction(\"imageline\")]\r\n        public static bool imageline(PhpResource im, int x1, int y1, int x2, int y2, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                SetAntiAlias(img, g);\r\n                Pen pen = CreatePen(col, img, true);\r\n                g.DrawLine(pen, x1, y1, x2, y2);\r\n                pen.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to create Pen most compatible to PHP drawing rules\r\n        /// </summary>\r\n        /// <param name=\"col\"></param>\r\n        /// <param name=\"img\"></param>\r\n        /// <param name=\"antiAliasable\"></param>\r\n        /// <returns></returns>\r\n        private static Pen CreatePen(int col, PhpGdImageResource img, bool antiAliasable)\r\n        {\r\n            Pen pen;\r\n\r\n            if (antiAliasable && img.AntiAlias)\r\n            {\r\n                if (col < 0)\r\n                {\r\n                    pen = new Pen(Color.White);\r\n                }\r\n                else\r\n                {\r\n                    pen = new Pen(PHPColorToNETColor(col));\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (col == (int)ColorValues.TILED)\r\n                {\r\n                    if (img.tiled == null)\r\n                    {\r\n                        return new Pen(Color.Transparent);\r\n                    }\r\n                    else\r\n                    {\r\n                        pen = new Pen(img.tiled, img.LineThickness);\r\n                    }\r\n                }\r\n                else\r\n                    // IMG_STYLED\r\n                    if (col == -2)\r\n                    {\r\n                        if (img.styled == null)\r\n                        {\r\n                            return new Pen(Color.Transparent);\r\n                        }\r\n                        else\r\n                        {\r\n                            pen = new Pen(img.styled, img.LineThickness);\r\n                        }\r\n                    }\r\n\r\n                    // TODO: (Maros) Different than in PHP. And missing IMG_STYLED_BRUSHED.\r\n                    // IMG_BRUSHED\r\n                    else if (col == -3)\r\n                    {\r\n                        if (img.brushed == null)\r\n                        {\r\n                            return new Pen(Color.Transparent);\r\n                        }\r\n                        else\r\n                        {\r\n                            pen = new Pen(img.brushed, img.LineThickness);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        Color color = GetAlphaColor(img, col);\r\n\r\n                        pen = new Pen(color, img.LineThickness);\r\n                    }\r\n            }\r\n\r\n            return pen;\r\n        }\r\n\r\n        private static void SetAntiAlias(PhpGdImageResource img, Graphics g)\r\n        {\r\n            if (img.AntiAlias)\r\n            {\r\n                g.SmoothingMode = SmoothingMode.AntiAlias;\r\n            }\r\n            else\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imageloadfont\r\n\r\n        /// <summary>\r\n        /// Load a new font\r\n        /// </summary> \r\n        [ImplementsFunction(\"imageloadfont\", FunctionImplOptions.NotSupported)]\r\n        public static int imageloadfont(string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepalettecopy\r\n\r\n        /// <summary>\r\n        /// Copy the palette from the src image onto the dst image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepalettecopy\", FunctionImplOptions.NotSupported)]\r\n        public static void imagepalettecopy(PhpResource dst, PhpResource src)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepng\r\n\r\n        //TODO: (Maros) PHP saves little smaller PNG files.\r\n\r\n        /// <summary>\r\n        /// Output PNG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepng\")]\r\n        public static bool imagepng(PhpResource im)\r\n        {\r\n            return imagepng(im, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output PNG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepng\")]\r\n        public static bool imagepng(PhpResource im, string filename)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            Bitmap saveBitmap;\r\n            bool dispose = false;\r\n\r\n            if ((img.IsTransparentColSet) && (img.SaveAlpha == false))\r\n            {\r\n                ChangeColor(img.Image, img.transparentColor, Color.Transparent);\r\n                saveBitmap = img.Image;\r\n            }\r\n            else\r\n            {\r\n                if (img.SaveAlpha == true)\r\n                {\r\n                    saveBitmap = img.Image;\r\n                }\r\n                else\r\n                {\r\n                    saveBitmap = new Bitmap(img.Image.Width, img.Image.Height, PixelFormat.Format24bppRgb);\r\n                    using (Graphics g = Graphics.FromImage(saveBitmap))\r\n                    {\r\n                        g.DrawImage(img.Image, 0, 0);\r\n                    }\r\n                }\r\n            }\r\n\r\n            try\r\n            {\r\n                if (string.IsNullOrEmpty(filename))\r\n                {\r\n                    MemoryStream ms = new MemoryStream();\r\n                    saveBitmap.Save(ms, ImageFormat.Png);\r\n\r\n                    ms.Position = 0;\r\n                    ms.CopyTo(ScriptContext.CurrentContext.OutputStream);\r\n                }\r\n                else\r\n                {\r\n                    filename = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, filename);\r\n                    saveBitmap.Save(filename, ImageFormat.Png);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, ex.Message);\r\n                return false;\r\n            }\r\n\r\n            if (dispose)\r\n            {\r\n                saveBitmap.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output PNG image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepng\")]\r\n        public static bool imagepng(PhpResource im, string filename, int quality)\r\n        {\r\n            //TODO: implement quality parametr\r\n            return imagepng(im, filename);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepolygon\r\n\r\n        /// <summary>\r\n        /// Draw a polygon\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepolygon\")]\r\n        public static bool imagepolygon(PhpResource im, PhpArray point, int num_points, int col)\r\n        {\r\n            return DrawPoly(im, point, num_points, col, false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsbbox\r\n\r\n        /// <summary>\r\n        /// Return the bounding box needed by a string if rasterized\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsbbox\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray imagepsbbox(string text, PhpResource font, int size, int space, int tightness, double angle)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepscopyfont\r\n\r\n        /// <summary>\r\n        /// Make a copy of a font for purposes like extending or reenconding\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepscopyfont\", FunctionImplOptions.NotSupported)]\r\n        public static int imagepscopyfont(int font_index)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsencodefont\r\n\r\n        /// <summary>\r\n        /// To change a fonts character encoding vector\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsencodefont\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagepsencodefont(PhpResource font_index, string filename)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsextendfont\r\n\r\n        /// <summary>\r\n        /// Extend or or condense (if extend &lt; 1) a font\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsextendfont\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagepsextendfont(PhpResource font_index, double extend)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsfreefont\r\n\r\n        /// <summary>\r\n        /// Free memory used by a font\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsfreefont\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagepsfreefont(PhpResource font_index)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsloadfont\r\n\r\n        /// <summary>\r\n        /// Load a new font from specified file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsloadfont\", FunctionImplOptions.NotSupported)]\r\n        public static PhpResource imagepsloadfont(string pathname)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepsslantfont\r\n\r\n        /// <summary>\r\n        /// Slant a font\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepsslantfont\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagepsslantfont(PhpResource font_index, double slant)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagepstext\r\n\r\n        /// <summary>\r\n        /// Rasterize a string over an image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagepstext\", FunctionImplOptions.NotSupported)]\r\n        public static PhpArray imagepstext(PhpResource image, string text, PhpResource font, int size, int foreground,\r\n            int background, int xcoord, int ycoord, int space, int tightness, double angle, int antialias)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagerectangle\r\n\r\n        /// <summary>\r\n        /// Draw a rectangle\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagerectangle\")]\r\n        public static bool imagerectangle(PhpResource im, int x1, int y1, int x2, int y2, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.DrawRectangle(CreatePen(col, img, false), x1, y1, x2 - x1, y2 - y1);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagerotate\r\n\r\n        /// <summary>\r\n        /// Rotate an image using a custom angle\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagerotate\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagerotate(PhpResource src_im, double angle, int bgdcolor)\r\n        {\r\n            return imagerotate(src_im, angle, bgdcolor, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Rotate an image using a custom angle\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagerotate\")]\r\n        [return: CastToFalse]\r\n        public static PhpResource imagerotate(PhpResource im, double angle, int bgdcolor, int ignoretransparent)\r\n        {\r\n            if (ignoretransparent != 0)\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"ignoretransparent\", ignoretransparent);\r\n            }\r\n\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return null;\r\n            \r\n            if (angle < 360) angle = angle - ((int)angle / 360) * 360;\r\n            //if (angle < 0) angle = 360 + angle;\r\n\r\n            PhpGdImageResource ret_im = new PhpGdImageResource(RotateImage(img.Image, -angle, PHPColorToNETColor(bgdcolor)));\r\n            \r\n            /*var graphics = Graphics.FromImage(ret_im.Image);\r\n\r\n            SolidBrush brush = new SolidBrush(Color.FromArgb(bgdcolor));\r\n\r\n            graphics.FillRectangle(brush, 0, 0, ret_im.Image.Width, ret_im.Image.Height);\r\n            graphics.TranslateTransform((float)img.Image.Width / 2, (float)img.Image.Height / 2);\r\n            graphics.RotateTransform(-angle);\r\n            graphics.TranslateTransform(-(float)img.Image.Width / 2, -(float)img.Image.Height / 2);\r\n            graphics.DrawImage(img.Image, new Point(0, 0));*/\r\n\r\n            return ret_im;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesavealpha\r\n\r\n        /// <summary>\r\n        /// Include alpha channel to a saved image\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesavealpha\")]\r\n        public static bool imagesavealpha(PhpResource im, bool on)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            img.SaveAlpha = on;\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesetbrush\r\n\r\n        //TODO: (Maros)  When IMAGE_COLOR_BRUSHED is set in PHP, then PHP draws brush image multiple times\r\n        // , pixel by pixel instead of brushedtexture like in here.\r\n\r\n        /// <summary>\r\n        /// Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesetbrush\")]\r\n        public static bool imagesetbrush(PhpResource image, PhpResource brush)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(image);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            PhpGdImageResource imgBrush = PhpGdImageResource.ValidImage(brush);\r\n            if (imgBrush == null)\r\n                return false;\r\n            \r\n\r\n            img.brushed = new TextureBrush(imgBrush.Image);\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesetpixel\r\n\r\n        /// <summary>\r\n        /// Set a single pixel\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesetpixel\")]\r\n        public static bool imagesetpixel(PhpResource im, int x, int y, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            Color color = GetAlphaColor(img, col);\r\n\r\n            if (img.AlphaBlending == false)\r\n            {\r\n                img.Image.SetPixel(x, y, color);\r\n            }\r\n            else\r\n            {\r\n                Color oldColor = img.Image.GetPixel(x, y);\r\n\r\n                double oldAlpha = (oldColor.A / 255.0);\r\n                double newAlpha = (color.A / 255.0);\r\n\r\n                double oldR = oldColor.R / 255.0;\r\n                double oldG = oldColor.G / 255.0;\r\n                double oldB = oldColor.B / 255.0;\r\n\r\n                double newR = color.R / 255.0;\r\n                double newG = color.G / 255.0;\r\n                double newB = color.B / 255.0;\r\n\r\n                double a = newAlpha + oldAlpha * (1.0 - newAlpha);\r\n\r\n                int r = (int)(((newR * newAlpha + oldR * oldAlpha * (1.0 - newAlpha)) / a) * 255);\r\n                int g = (int)(((newG * newAlpha + oldG * oldAlpha * (1.0 - newAlpha)) / a) * 255);\r\n                int b = (int)(((newB * newAlpha + oldB * oldAlpha * (1.0 - newAlpha)) / a) * 255);\r\n\r\n                int aa = (int)(a * 255);\r\n\r\n                Color newColor = Color.FromArgb(aa, r, g, b);\r\n\r\n                img.Image.SetPixel(x, y, newColor);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        private static Color GetAlphaColor(PhpGdImageResource img, int col)\r\n        {\r\n            Color color;\r\n            if (!img.AlphaBlending)\r\n            {\r\n                color = Color.FromArgb(255, PHPColorToRed(col), PHPColorToGreen(col), PHPColorToBlue(col));\r\n            }\r\n            else\r\n            {\r\n                color = PHPColorToNETColor(col);\r\n            }\r\n            return color;\r\n        }\r\n\r\n        private static int PHPColorToPHPAlpha(int color)\r\n        {\r\n            int ret = (color & 0x0000FF << 24);\r\n            ret = (ret >> 24);\r\n            ret = ret & (0x0000FF);\r\n\r\n            return ret;\r\n        }\r\n\r\n        private static int PHPColorToRed(int color)\r\n        {\r\n            int ret = (color & 0x0000FF << 16);\r\n            ret = (ret >> 16);\r\n            ret = ret & (0x0000FF);\r\n\r\n            return ret;\r\n        }\r\n\r\n        private static int PHPColorToGreen(int color)\r\n        {\r\n            int ret = (color & 0x0000FF << 8);\r\n            ret = (ret >> 8);\r\n            ret = ret & (0x0000FF);\r\n\r\n            return ret;\r\n        }\r\n\r\n        private static int PHPColorToBlue(int color)\r\n        {\r\n            return (color & 0x0000FF);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesetstyle\r\n\r\n        /// <summary>\r\n        /// Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesetstyle\")]\r\n        public static bool imagesetstyle(PhpResource im, PhpArray styles)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (styles == null || styles.IsEmpty())\r\n            {\r\n                return false;\r\n            }\r\n\r\n            Bitmap brushImage = new Bitmap(styles.Count, 1);\r\n\r\n            int i = 0;\r\n            foreach (int value in styles.Values)\r\n            {\r\n                brushImage.SetPixel(i, 0, PHPColorToNETColor(value));\r\n                i++;\r\n            }\r\n\r\n            img.styled = new TextureBrush(brushImage);\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesetthickness\r\n\r\n        /// <summary>\r\n        /// Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesetthickness\")]\r\n        public static bool imagesetthickness(PhpResource im, int thickness)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (thickness < 0) thickness = 0;\r\n            if (thickness == 0) thickness = 1;\r\n\r\n            img.LineThickness = thickness;\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesettile\r\n\r\n        /// <summary>\r\n        /// Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesettile\")]\r\n        public static bool imagesettile(PhpResource image, PhpResource tile)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(image);\r\n            if (img == null)\r\n                return false;\r\n\r\n            PhpGdImageResource imgTile = PhpGdImageResource.ValidImage(tile);\r\n            if (imgTile == null)\r\n                return false;\r\n            \r\n            img.tiled = new TextureBrush(imgTile.Image);\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagestring\r\n\r\n        /// <summary>\r\n        /// Determine <see cref=\"Font\"/>, <see cref=\"FontStyle\"/> and font <paramref name=\"spacing\"/> as close as possible to given <paramref name=\"font\"/> index.\r\n        /// </summary>\r\n        /// <param name=\"font\">PHP font index.</param>\r\n        /// <param name=\"fontText\"></param>\r\n        /// <param name=\"style\"></param>\r\n        /// <param name=\"spacing\"></param>\r\n        /// <returns>True iff font could be aproximated.</returns>\r\n        private static bool GetFont(int font, out Font fontText, out FontStyle style, out int spacing)\r\n        {\r\n            // defaults:\r\n            style = FontStyle.Regular;\r\n            spacing = 5;\r\n\r\n            switch (font)\r\n            {\r\n                case 1:\r\n                    fontText = new Font(FontFamily.GenericMonospace, 9, style, GraphicsUnit.Pixel);\r\n                    break;\r\n                case 2:\r\n                    fontText = new Font(FontFamily.GenericMonospace, 11, style, GraphicsUnit.Pixel);\r\n                    spacing = 6;\r\n                    break;\r\n                case 3:\r\n                    style = FontStyle.Bold;\r\n                    fontText = new Font(FontFamily.GenericMonospace, 12, style, GraphicsUnit.Pixel);\r\n                    spacing = 7;\r\n                    break;\r\n                case 4:\r\n                    fontText = new Font(FontFamily.GenericMonospace, 14, style, GraphicsUnit.Pixel);\r\n                    spacing = 8;\r\n                    break;\r\n\r\n                default:\r\n                    //style = FontStyle.Bold;\r\n                    fontText = new Font(FontFamily.GenericMonospace, 15, style, GraphicsUnit.Pixel);\r\n                    spacing = 9;\r\n                    break;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Draw a string horizontally\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagestring\")]\r\n        public static bool imagestring(PhpResource im, int font, int x, int y, string str, int col)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n            \r\n            if (font < 1) font = 1;\r\n\r\n            Font fontText;\r\n            FontStyle style;\r\n            int spacing;\r\n\r\n            if (!GetFont(font, out fontText, out style, out spacing))\r\n                throw new NotImplementedException();\r\n            \r\n            //float descent = fontText.Size * fontText.FontFamily.GetCellDescent(style) / fontText.FontFamily.GetEmHeight(style);\r\n            //float ascent = fontText.Size * fontText.FontFamily.GetCellAscent(style) / fontText.FontFamily.GetEmHeight(style);\r\n            Point origin = new Point(x, y - 1);\r\n\r\n            StringFormat sf = new StringFormat(StringFormat.GenericTypographic);\r\n            sf.Trimming = StringTrimming.None;\r\n            //sf.FormatFlags = StringFormatFlags.FitBlackBox;\r\n            sf.LineAlignment = StringAlignment.Near;\r\n\r\n            using (Graphics g = Graphics.FromImage(img.Image))\r\n            {\r\n                g.SmoothingMode = SmoothingMode.None;\r\n                SizeF sizef = g.MeasureString(str, fontText, origin, sf);\r\n\r\n                //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;\r\n\r\n                Color color = GetAlphaColor(img, col);\r\n\r\n                SolidBrush brush = new SolidBrush(color);\r\n                //g.DrawString(str, fontText, brush, origin, sf);\r\n\r\n                for (int i = 0; i < str.Length; i++)\r\n                {\r\n                    g.DrawString(str[i].ToString(), fontText, brush, x + i * spacing, y - 1, sf);\r\n                }\r\n\r\n                brush.Dispose();\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagestringup\r\n\r\n        /// <summary>\r\n        /// Draw a string vertically - rotated 90 degrees counter-clockwise\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagestringup\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagestringup(PhpResource im, int font, int x, int y, string str, int col)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesx\r\n\r\n        /// <summary>\r\n        /// Get image width\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesx\")]\r\n        public static int imagesx(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return -1;\r\n            \r\n            return img.Image.Width;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagesy\r\n\r\n        /// <summary>\r\n        /// Get image height\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagesy\")]\r\n        public static int imagesy(PhpResource im)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return -1;  // TODO: (maros) chekc if it is -1 in PHP\r\n            \r\n            return img.Image.Height;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagetruecolortopalette\r\n\r\n        /// <summary>\r\n        /// Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagetruecolortopalette\")]\r\n        public static bool imagetruecolortopalette(PhpResource im, bool ditherFlag, int colorsWanted)\r\n        {\r\n            if (colorsWanted <= 0)\r\n                return false;\r\n            \r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return false;\r\n\r\n            if (img.IsIndexed)\r\n                return true;     // already indexed\r\n\r\n            // determine new pixel format:\r\n            PixelFormat newformat;\r\n            if (colorsWanted <= 2)\r\n                newformat = PixelFormat.Format1bppIndexed;\r\n            else if (colorsWanted <= 16)\r\n                newformat = PixelFormat.Format4bppIndexed;\r\n            else if (colorsWanted <= 256)\r\n                newformat = PixelFormat.Format8bppIndexed;\r\n            else\r\n                newformat = PixelFormat.Indexed;\r\n            \r\n            // clone the image as indexed:\r\n            var image = img.Image;\r\n            var newimage = image.Clone(new Rectangle(0, 0, image.Width, image.Height), newformat);\r\n\r\n            if (newimage == null)\r\n                return false;\r\n\r\n            img.Image = newimage;\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagettfbbox\r\n\r\n        /// <summary>\r\n        /// Give the bounding box of a text using TrueType fonts\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagettfbbox\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray imagettfbbox(double size, double angle, string font_file, string text)\r\n        {\r\n            font_file = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, font_file);\r\n\r\n            if (font_file == \"\")\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            if (!File.Exists(font_file))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(Utils.Resources.GetString(\"invalid_font_filename\"), font_file));\r\n                return null;\r\n            }\r\n\r\n            // Font preparation\r\n            PrivateFontCollection pfc;\r\n\r\n            try\r\n            {\r\n                pfc = new PrivateFontCollection();\r\n                pfc.AddFontFile(font_file);\r\n            }\r\n            catch\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(Utils.Resources.GetString(\"invalid_font_filename\"), font_file));\r\n                return null;\r\n            }\r\n\r\n            FontStyle style = FontStyle.Regular;\r\n\r\n            if (!pfc.Families[0].IsStyleAvailable(FontStyle.Regular))\r\n            {\r\n                if (pfc.Families[0].IsStyleAvailable(FontStyle.Bold))\r\n                {\r\n                    style = FontStyle.Bold;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Italic))\r\n                {\r\n                    style = FontStyle.Italic;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Underline))\r\n                {\r\n                    style = FontStyle.Underline;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Strikeout))\r\n                {\r\n                    style = FontStyle.Strikeout;\r\n                }\r\n            }\r\n\r\n            Font font = new Font(pfc.Families[0], (float)size, style, GraphicsUnit.Point);\r\n            float descent = font.Size * font.FontFamily.GetCellDescent(style) / font.FontFamily.GetEmHeight(style);\r\n            float ascent = font.Size * font.FontFamily.GetCellAscent(style) / font.FontFamily.GetEmHeight(style);\r\n            Point origin = new Point(0, (int)(0 - (ascent + descent)));\r\n\r\n\r\n            StringFormat sf = new StringFormat(StringFormat.GenericTypographic);\r\n            SizeF sizef = MeasureString(text, font, origin, sf);\r\n\r\n\r\n            System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();\r\n            matrix.RotateAt(-(float)angle, new PointF(0 + (sizef.Width / 2), 0 - ((ascent + descent) / 2)));\r\n            Point[] points = { origin };\r\n            matrix.TransformPoints(points);\r\n\r\n            int difX = (origin.X - points[0].X);\r\n            int difY = (origin.Y - points[0].Y);\r\n\r\n            origin.X = origin.X - difX;\r\n            origin.Y = origin.Y + difY;\r\n\r\n            Point[] points2 = new Point[4];\r\n\r\n            if (angle != 0)\r\n            {\r\n                points2[0] = new Point(0 - difX, 0 + difY + 2);\r\n                points2[1] = new Point((int)(0 - difX + sizef.Width), 0 + difY + 2);\r\n                points2[2] = new Point((int)(0 - difX + sizef.Width), (int)(0 - (ascent + descent)) + difY + 2);\r\n                points2[3] = new Point((int)(0 - difX), (int)(0 - (ascent + descent)) + difY + 2);\r\n\r\n                matrix.TransformPoints(points2);\r\n            }\r\n            else\r\n            {\r\n                points2[0] = new Point(0 - difX, 0 + difY);\r\n                points2[1] = new Point((int)(0 - difX + sizef.Width), 0 + difY);\r\n                points2[2] = new Point((int)(0 - difX + sizef.Width), (int)(0 - (ascent + descent)) + difY + 3);\r\n                points2[3] = new Point((int)(0 - difX), (int)(0 - (ascent + descent)) + difY + 3);\r\n            }\r\n\r\n            PhpArray array = new PhpArray();\r\n\r\n            array.Add(points2[0].X);\r\n            array.Add(points2[0].Y);\r\n            array.Add(points2[1].X);\r\n            array.Add(points2[1].Y);\r\n            array.Add(points2[2].X);\r\n            array.Add(points2[2].Y);\r\n            array.Add(points2[3].X);\r\n            array.Add(points2[3].Y);\r\n\r\n            return array;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Measure text without graphics object\r\n        /// </summary>\r\n        /// <param name=\"s\"></param>\r\n        /// <param name=\"font\"></param>\r\n        /// <param name=\"origin\"></param>\r\n        /// <param name=\"sf\"></param>\r\n        /// <returns></returns>\r\n        private static SizeF MeasureString(string s, Font font, Point origin, StringFormat sf)\r\n        {\r\n            SizeF result;\r\n            using (var image = new Bitmap(1, 1))\r\n            {\r\n                using (var g = Graphics.FromImage(image))\r\n                {\r\n                    result = g.MeasureString(s, font, origin, sf);\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagettftext\r\n\r\n        /// <summary>\r\n        /// Write text to the image using a TrueType font\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagettftext\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray imagettftext(PhpResource im, double size, double angle, int x, int y, int col, string font_file, string text)\r\n        {\r\n            PhpGdImageResource img = PhpGdImageResource.ValidImage(im);\r\n            if (img == null)\r\n                return null;\r\n            \r\n            if (string.IsNullOrEmpty(font_file))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            font_file = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, font_file);\r\n\r\n            if (!File.Exists(font_file))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(Utils.Resources.GetString(\"invalid_font_filename\"), font_file));\r\n                return null;\r\n            }\r\n\r\n            // Font preparation\r\n            PrivateFontCollection pfc;\r\n\r\n            try\r\n            {\r\n                pfc = new PrivateFontCollection();\r\n                pfc.AddFontFile(font_file);\r\n            }\r\n            catch\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(Utils.Resources.GetString(\"invalid_font_filename\"), font_file));\r\n                return null;\r\n            }\r\n\r\n            FontStyle style = FontStyle.Regular;\r\n\r\n            if (!pfc.Families[0].IsStyleAvailable(FontStyle.Regular))\r\n            {\r\n                if (pfc.Families[0].IsStyleAvailable(FontStyle.Bold))\r\n                {\r\n                    style = FontStyle.Bold;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Italic))\r\n                {\r\n                    style = FontStyle.Italic;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Underline))\r\n                {\r\n                    style = FontStyle.Underline;\r\n                }\r\n                else if (pfc.Families[0].IsStyleAvailable(FontStyle.Strikeout))\r\n                {\r\n                    style = FontStyle.Strikeout;\r\n                }\r\n            }\r\n\r\n            Font font = new Font(pfc.Families[0], (float)size, style, GraphicsUnit.Point);\r\n            float descent = font.Size * font.FontFamily.GetCellDescent(style) / font.FontFamily.GetEmHeight(style);\r\n            float ascent = font.Size * font.FontFamily.GetCellAscent(style) / font.FontFamily.GetEmHeight(style);\r\n            Point origin = new Point(x, (int)(y - (ascent + descent)));\r\n\r\n            StringFormat sf = new StringFormat(StringFormat.GenericTypographic);\r\n\r\n            Graphics g = Graphics.FromImage(img.Image);\r\n            //graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;\r\n            SizeF sizef = g.MeasureString(text, font, origin, sf);\r\n\r\n\r\n            System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();\r\n            matrix.RotateAt(-(float)angle, new PointF(x + (sizef.Width / 2), y - ((ascent + descent) / 2)));\r\n            Point[] points = { origin };\r\n            matrix.TransformPoints(points);\r\n\r\n            int difX = (origin.X - points[0].X);\r\n            int difY = (origin.Y - points[0].Y);\r\n\r\n            origin.X = origin.X - difX;\r\n            origin.Y = origin.Y + difY;\r\n\r\n            g.Transform = matrix;\r\n            //g.TranslateTransform(origin.X - points[0].X, origin.Y - points[0].Y);\r\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;\r\n\r\n            Color color = GetAlphaColor(img, col);\r\n\r\n            SolidBrush brush = new SolidBrush(color);\r\n\r\n            g.DrawString(text, font, brush, origin, sf);\r\n            brush.Dispose();\r\n\r\n            sf.Dispose();\r\n            font.Dispose();\r\n            pfc.Dispose();\r\n\r\n            g.Dispose();\r\n\r\n            Point[] points2 = new Point[4];\r\n\r\n            if (angle != 0)\r\n            {\r\n                points2[0] = new Point(x - difX, y + difY + 2);\r\n                points2[1] = new Point((int)(x - difX + sizef.Width), y + difY + 2);\r\n                points2[2] = new Point((int)(x - difX + sizef.Width), (int)(y - (ascent + descent)) + difY + 2);\r\n                points2[3] = new Point((int)(x - difX), (int)(y - (ascent + descent)) + difY + 2);\r\n\r\n                matrix.TransformPoints(points2);\r\n            }\r\n            else\r\n            {\r\n                points2[0] = new Point(x - difX, y + difY);\r\n                points2[1] = new Point((int)(x - difX + sizef.Width), y + difY);\r\n                points2[2] = new Point((int)(x - difX + sizef.Width), (int)(y - (ascent + descent)) + difY + 3);\r\n                points2[3] = new Point((int)(x - difX), (int)(y - (ascent + descent)) + difY + 3);\r\n            }\r\n\r\n            PhpArray array = new PhpArray();\r\n\r\n            array.Add(points2[0].X);\r\n            array.Add(points2[0].Y);\r\n            array.Add(points2[1].X);\r\n            array.Add(points2[1].Y);\r\n            array.Add(points2[2].X);\r\n            array.Add(points2[2].Y);\r\n            array.Add(points2[3].X);\r\n            array.Add(points2[3].Y);\r\n\r\n            return array;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagetypes\r\n\r\n        /// <summary>\r\n        /// Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\r\n        /// IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagetypes\")]\r\n        public static int imagetypes()\r\n        {\r\n            return (int)ImgType.Supported;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagewbmp\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagewbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagewbmp(PhpResource im)\r\n        {\r\n            return imagewbmp(im, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagewbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagewbmp(PhpResource im, string filename)\r\n        {\r\n            return imagewbmp(im, filename, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Output WBMP image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagewbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool imagewbmp(PhpResource im, string filename, int foreground)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region imagexbm\r\n\r\n        /// <summary>\r\n        /// Output XBM image to browser or file\r\n        /// </summary> \r\n        [ImplementsFunction(\"imagexbm\", FunctionImplOptions.NotSupported)]\r\n        public static int imagexbm(int im, string filename, int foreground)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region jpeg2wbmp\r\n\r\n        /// <summary>\r\n        /// Convert JPEG image to WBMP image\r\n        /// </summary> \r\n        [ImplementsFunction(\"jpeg2wbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool jpeg2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region png2wbmp\r\n\r\n        /// <summary>\r\n        /// Convert PNG image to WBMP image\r\n        /// </summary> \r\n        [ImplementsFunction(\"png2wbmp\", FunctionImplOptions.NotSupported)]\r\n        public static bool png2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\r\n        {\r\n            //PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region helper functions\r\n\r\n        /// <summary>\r\n        /// Get the <see cref=\"ImgType\"/> corresponding to the given <see cref=\"ImageFormat\"/>.\r\n        /// </summary>\r\n        /// <param name=\"format\"></param>\r\n        /// <returns>Corresponding PHP <see cref=\"ImgType\"/> or <see cref=\"ImgType.Unknown\"/>.</returns>\r\n        internal static ImgType GetImgType(ImageFormat format)\r\n        {\r\n            if (format.Equals(ImageFormat.Gif))\r\n                return ImgType.GIF;\r\n            else if (format.Equals(ImageFormat.Jpeg))\r\n                return ImgType.JPEG;\r\n            else if (format.Equals(ImageFormat.Png))\r\n                return ImgType.PNG;\r\n            //else if (format.Equals(ImageFormat.Bmp))\r\n            //    return ImgType.Unknown;\r\n            else\r\n                return ImgType.Unknown;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to load image from local file or from URL and checks its format for match if specified.\r\n        /// </summary>\r\n        /// <param name=\"filename\"></param>\r\n        /// <param name=\"format\"></param>\r\n        /// <returns></returns>\r\n        private static PhpResource CreateGdImageFrom(string filename, ImageFormat format)\r\n        {\r\n            if (string.IsNullOrEmpty(filename))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            Bitmap image = LoadBitmap(filename, format);\r\n            if (image == null)\r\n                return null;\r\n            \r\n            return new PhpGdImageResource(image);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads bitmap file from specified filename or URL and if it doesnt match specified format returns null.\r\n        /// </summary>\r\n        /// <param name=\"filename\"></param>\r\n        /// <param name=\"format\"></param>\r\n        /// <returns></returns>\r\n        private static Bitmap LoadBitmap(string filename, ImageFormat format)\r\n        {\r\n            Bitmap image;\r\n\r\n            PhpBytes bytes = Utils.ReadPhpBytes(filename);\r\n\r\n            if (bytes == null)\r\n                return null;\r\n\r\n            try\r\n            {\r\n                image = (Bitmap)Image.FromStream(new MemoryStream(bytes.ReadonlyData, false));\r\n            }\r\n            catch\r\n            {\r\n                return null;\r\n            }\r\n\r\n            if (format != null && !image.RawFormat.Equals(format))\r\n                return null;\r\n\r\n            return image;\r\n        }\r\n\r\n        private static void FloodFill(Bitmap/*!*/bitmap, int x, int y, Color color, bool toBorder, Color border)\r\n        {\r\n            Debug.Assert(bitmap != null);\r\n\r\n            BitmapData data = bitmap.LockBits(\r\n                new Rectangle(0, 0, bitmap.Width, bitmap.Height),\r\n                ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);\r\n\r\n            int[] bits = new int[data.Stride / 4 * data.Height];\r\n            Marshal.Copy(data.Scan0, bits, 0, bits.Length);\r\n\r\n            LinkedList<Point> check = new LinkedList<Point>();\r\n            int floodTo = color.ToArgb();\r\n            int floodFrom = bits[x + y * data.Stride / 4];\r\n            bits[x + y * data.Stride / 4] = floodTo;\r\n\r\n            int floodBorder = border.ToArgb();\r\n\r\n            if (floodFrom != floodTo)\r\n            {\r\n                check.AddLast(new Point(x, y));\r\n                while (check.Count > 0)\r\n                {\r\n                    Point cur = check.First.Value;\r\n                    check.RemoveFirst();\r\n\r\n                    foreach (Point off in new Point[]{\r\n                        new Point(0, -1), new Point(0, 1), \r\n                        new Point(-1, 0), new Point(1, 0)})\r\n                    {\r\n                        Point next = new Point(cur.X + off.X, cur.Y + off.Y);\r\n                        if (next.X >= 0 && next.Y >= 0 &&\r\n                            next.X < data.Width &&\r\n                            next.Y < data.Height)\r\n                        {\r\n                            if (toBorder == false)\r\n                            {\r\n                                if (bits[next.X + next.Y * data.Stride / 4] == floodFrom)\r\n                                {\r\n                                    check.AddLast(next);\r\n                                    bits[next.X + next.Y * data.Stride / 4] = floodTo;\r\n                                }\r\n                            }\r\n                            else\r\n                            {\r\n                                if ((bits[next.X + next.Y * data.Stride / 4] != floodBorder && bits[next.X + next.Y * data.Stride / 4] != floodTo))\r\n                                {\r\n                                    check.AddLast(next);\r\n                                    bits[next.X + next.Y * data.Stride / 4] = floodTo;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            Marshal.Copy(bits, 0, data.Scan0, bits.Length);\r\n            bitmap.UnlockBits(data);\r\n        }\r\n\r\n        private static void ChangeColor(Bitmap/*!*/bitmap, Color fromColor, Color toColor)\r\n        {\r\n            Debug.Assert(bitmap != null);\r\n\r\n            BitmapData data = bitmap.LockBits(\r\n                new Rectangle(0, 0, bitmap.Width, bitmap.Height),\r\n                ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);\r\n\r\n            int[] bits = new int[data.Stride / 4 * data.Height];\r\n            Marshal.Copy(data.Scan0, bits, 0, bits.Length);\r\n\r\n            int fromColorInt = fromColor.ToArgb();\r\n            int toColorInt = toColor.ToArgb();\r\n\r\n            for (int y = 0; y < bitmap.Height; y++)\r\n            {\r\n                for (int x = 0; x < bitmap.Height; x++)\r\n                {\r\n                    if (bits[x + y * data.Stride / 4] == fromColorInt)\r\n                    {\r\n                        bits[x + y * data.Stride / 4] = toColorInt;\r\n                    }\r\n                }\r\n            }\r\n\r\n            Marshal.Copy(bits, 0, data.Scan0, bits.Length);\r\n            bitmap.UnlockBits(data);\r\n        }\r\n\r\n        /// <summary> \r\n        /// Returns the image codec with the given mime type \r\n        /// </summary> \r\n        internal static ImageCodecInfo GetEncoderInfo(string mimeType)\r\n        {\r\n            // Get image codecs for all image formats \r\n            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();\r\n\r\n            // Find the correct image codec \r\n            for (int i = 0; i < codecs.Length; i++)\r\n                if (codecs[i].MimeType == mimeType)\r\n                    return codecs[i];\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Save image to memory stream\r\n        /// </summary>\r\n        private static MemoryStream ToStream(Image image, ImageFormat format)\r\n        {\r\n            if (image == null || format == null)\r\n                return null;\r\n\r\n            MemoryStream stream;\r\n\r\n            try\r\n            {\r\n                stream = new MemoryStream();\r\n                image.Save(stream, format);\r\n                stream.Position = 0;\r\n            }\r\n            catch\r\n            {\r\n                return null;\r\n            }\r\n\r\n            return stream;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Makes specified Bitmap grayscaled\r\n        /// </summary>\r\n        /// <param name=\"bitmap\">processed bitmap</param>\r\n        /// <returns>success indication</returns>\r\n        private static bool MakeGrayscale(Bitmap/*!*/bitmap)\r\n        {\r\n            Debug.Assert(bitmap != null);\r\n\r\n            try\r\n            {\r\n                //create the grayscale ColorMatrix\r\n                ColorMatrix colorMatrix = new ColorMatrix(\r\n                    new float[][] \r\n                    {\r\n                        new float[] {.3f, .3f, .3f, 0, 0},\r\n                        new float[] {.59f, .59f, .59f, 0, 0},\r\n                        new float[] {.11f, .11f, .11f, 0, 0},\r\n                        new float[] {0, 0, 0, 1, 0},\r\n                        new float[] {0, 0, 0, 0, 1}\r\n                    });\r\n\r\n                //create some image attributes\r\n                ImageAttributes attributes = new ImageAttributes();\r\n\r\n                //set the color matrix attribute\r\n                attributes.SetColorMatrix(colorMatrix);\r\n\r\n                //\r\n                using (Graphics g = Graphics.FromImage(bitmap))\r\n                {\r\n                    //draw the original image on the new image\r\n                    //using the grayscale color matrix\r\n                    g.DrawImage(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height),\r\n                        0, 0, bitmap.Width, bitmap.Height, GraphicsUnit.Pixel, attributes);\r\n                }\r\n\r\n                return true;\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inverts colors in specified Bitmap\r\n        /// </summary>\r\n        /// <param name=\"bitmap\">processed bitmap</param>\r\n        /// <returns>success indication</returns>\r\n        private static bool InvertColors(Bitmap/*!*/bitmap)\r\n        {\r\n            Debug.Assert(bitmap != null);\r\n\r\n            try\r\n            {\r\n                //create the grayscale ColorMatrix\r\n                ColorMatrix colorMatrix = new ColorMatrix();\r\n                colorMatrix.Matrix00 = -1;\r\n                colorMatrix.Matrix11 = -1;\r\n                colorMatrix.Matrix22 = -1;\r\n\r\n                //create some image attributes\r\n                ImageAttributes attributes = new ImageAttributes();\r\n\r\n                //set the color matrix attribute\r\n                attributes.SetColorMatrix(colorMatrix);\r\n                \r\n                //\r\n                using (Graphics g = Graphics.FromImage(bitmap))\r\n                {\r\n                    //draw the original image on the new image\r\n                    //using the grayscale color matrix\r\n                    g.DrawImage(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height),\r\n                        0, 0, bitmap.Width, bitmap.Height, GraphicsUnit.Pixel, attributes);\r\n                }\r\n\r\n                return true;\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new Image containing the same image only rotated\r\n        /// </summary>\r\n        /// <param name=\"image\">The <see cref=\"System.Drawing.Image\"/> to rotate</param>\r\n        /// <param name=\"angle\">The amount to rotate the image, clockwise, in degrees</param>\r\n        /// <param name=\"color\">Color used to fill background of new image.</param>\r\n        /// <returns>A new <see cref=\"System.Drawing.Bitmap\"/> that is just large enough\r\n        /// to contain the rotated image without cutting any corners off.</returns>\r\n        /// <exception cref=\"System.ArgumentNullException\">Thrown if <paramref name=\"image\"/> is null.</exception>\r\n        public static Bitmap RotateImage(Image image, double angle, Color color)\r\n        {\r\n            if (image == null)\r\n                throw new ArgumentNullException(\"image\");\r\n\r\n            const double pi2 = Math.PI / 2.0;\r\n\r\n            // Why can't C# allow these to be const, or at least readonly\r\n            // *sigh*  I'm starting to talk like Christian Graus :omg:\r\n            double oldWidth = (double)image.Width;\r\n            double oldHeight = (double)image.Height;\r\n\r\n            // Convert degrees to radians\r\n            double theta = ((double)angle) * Math.PI / 180.0;\r\n            double locked_theta = theta;\r\n\r\n            // Ensure theta is now [0, 2pi)\r\n            while (locked_theta < 0.0)\r\n                locked_theta += 2 * Math.PI;\r\n\r\n            double newWidth, newHeight;\r\n            int nWidth, nHeight; // The newWidth/newHeight expressed as ints\r\n\r\n            #region Explaination of the calculations\r\n            /*\r\n\t\t\t * The trig involved in calculating the new width and height\r\n\t\t\t * is fairly simple; the hard part was remembering that when \r\n\t\t\t * PI/2 <= theta <= PI and 3PI/2 <= theta < 2PI the width and \r\n\t\t\t * height are switched.\r\n\t\t\t * \r\n\t\t\t * When you rotate a rectangle, r, the bounding box surrounding r\r\n\t\t\t * contains for right-triangles of empty space.  Each of the \r\n\t\t\t * triangles hypotenuse's are a known length, either the width or\r\n\t\t\t * the height of r.  Because we know the length of the hypotenuse\r\n\t\t\t * and we have a known angle of rotation, we can use the trig\r\n\t\t\t * function identities to find the length of the other two sides.\r\n\t\t\t * \r\n\t\t\t * sine = opposite/hypotenuse\r\n\t\t\t * cosine = adjacent/hypotenuse\r\n\t\t\t * \r\n\t\t\t * solving for the unknown we get\r\n\t\t\t * \r\n\t\t\t * opposite = sine * hypotenuse\r\n\t\t\t * adjacent = cosine * hypotenuse\r\n\t\t\t * \r\n\t\t\t * Another interesting point about these triangles is that there\r\n\t\t\t * are only two different triangles. The proof for which is easy\r\n\t\t\t * to see, but its been too long since I've written a proof that\r\n\t\t\t * I can't explain it well enough to want to publish it.  \r\n\t\t\t * \r\n\t\t\t * Just trust me when I say the triangles formed by the lengths \r\n\t\t\t * width are always the same (for a given theta) and the same \r\n\t\t\t * goes for the height of r.\r\n\t\t\t * \r\n\t\t\t * Rather than associate the opposite/adjacent sides with the\r\n\t\t\t * width and height of the original bitmap, I'll associate them\r\n\t\t\t * based on their position.\r\n\t\t\t * \r\n\t\t\t * adjacent/oppositeTop will refer to the triangles making up the \r\n\t\t\t * upper right and lower left corners\r\n\t\t\t * \r\n\t\t\t * adjacent/oppositeBottom will refer to the triangles making up \r\n\t\t\t * the upper left and lower right corners\r\n\t\t\t * \r\n\t\t\t * The names are based on the right side corners, because thats \r\n\t\t\t * where I did my work on paper (the right side).\r\n\t\t\t * \r\n\t\t\t * Now if you draw this out, you will see that the width of the \r\n\t\t\t * bounding box is calculated by adding together adjacentTop and \r\n\t\t\t * oppositeBottom while the height is calculate by adding \r\n\t\t\t * together adjacentBottom and oppositeTop.\r\n\t\t\t */\r\n            #endregion\r\n\r\n            double adjacentTop, oppositeTop;\r\n            double adjacentBottom, oppositeBottom;\r\n\r\n            // We need to calculate the sides of the triangles based\r\n            // on how much rotation is being done to the bitmap.\r\n            //   Refer to the first paragraph in the explaination above for \r\n            //   reasons why.\r\n            if ((locked_theta >= 0.0 && locked_theta < pi2) ||\r\n                (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2)))\r\n            {\r\n                adjacentTop = Math.Abs(Math.Cos(locked_theta)) * oldWidth;\r\n                oppositeTop = Math.Abs(Math.Sin(locked_theta)) * oldWidth;\r\n\r\n                adjacentBottom = Math.Abs(Math.Cos(locked_theta)) * oldHeight;\r\n                oppositeBottom = Math.Abs(Math.Sin(locked_theta)) * oldHeight;\r\n            }\r\n            else\r\n            {\r\n                adjacentTop = Math.Abs(Math.Sin(locked_theta)) * oldHeight;\r\n                oppositeTop = Math.Abs(Math.Cos(locked_theta)) * oldHeight;\r\n\r\n                adjacentBottom = Math.Abs(Math.Sin(locked_theta)) * oldWidth;\r\n                oppositeBottom = Math.Abs(Math.Cos(locked_theta)) * oldWidth;\r\n            }\r\n\r\n            newWidth = adjacentTop + oppositeBottom;\r\n            newHeight = adjacentBottom + oppositeTop;\r\n\r\n            nWidth = (int)Math.Ceiling(newWidth);\r\n            nHeight = (int)Math.Ceiling(newHeight);\r\n\r\n            Bitmap rotatedBmp = new Bitmap(nWidth, nHeight);\r\n\r\n            // This array will be used to pass in the three points that \r\n            // make up the rotated image\r\n            Point[] points;\r\n\r\n            /*\r\n             * The values of opposite/adjacentTop/Bottom are referring to \r\n             * fixed locations instead of in relation to the\r\n             * rotating image so I need to change which values are used\r\n             * based on the how much the image is rotating.\r\n             * \r\n             * For each point, one of the coordinates will always be 0, \r\n             * nWidth, or nHeight.  This because the Bitmap we are drawing on\r\n             * is the bounding box for the rotated bitmap.  If both of the \r\n             * corrdinates for any of the given points wasn't in the set above\r\n             * then the bitmap we are drawing on WOULDN'T be the bounding box\r\n             * as required.\r\n             */\r\n            if (locked_theta >= 0.0 && locked_theta < pi2)\r\n            {\r\n                points = new Point[] { \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) oppositeBottom, 0 ), \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( nWidth, (int) oppositeTop ),\r\n\t\t\t\t\t\t\t\t\t\t\t new Point( 0, (int) adjacentBottom )\r\n\t\t\t\t\t\t\t\t\t\t };\r\n\r\n            }\r\n            else if (locked_theta >= pi2 && locked_theta < Math.PI)\r\n            {\r\n                points = new Point[] { \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( nWidth, (int) oppositeTop ),\r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) adjacentTop, nHeight ),\r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) oppositeBottom, 0 )\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t };\r\n            }\r\n            else if (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2))\r\n            {\r\n                points = new Point[] { \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) adjacentTop, nHeight ), \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( 0, (int) adjacentBottom ),\r\n\t\t\t\t\t\t\t\t\t\t\t new Point( nWidth, (int) oppositeTop )\r\n\t\t\t\t\t\t\t\t\t\t };\r\n            }\r\n            else\r\n            {\r\n                points = new Point[] { \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( 0, (int) adjacentBottom ), \r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) oppositeBottom, 0 ),\r\n\t\t\t\t\t\t\t\t\t\t\t new Point( (int) adjacentTop, nHeight )\t\t\r\n\t\t\t\t\t\t\t\t\t\t };\r\n            }\r\n\r\n            //\r\n            SolidBrush brush = new SolidBrush(color);\r\n\r\n            //\r\n            using (Graphics g = Graphics.FromImage(rotatedBmp))\r\n            {\r\n                g.FillRectangle(brush, 0, 0, nWidth, nHeight);\r\n                g.DrawImage(image, points);\r\n            }\r\n\r\n            return rotatedBmp;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/PhpGdImageResource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing System.Drawing;\r\nusing System.Drawing.Imaging;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    /// <summary>\r\n    /// <see cref=\"PhpResource\"/> representing PHP image.\r\n    /// </summary>\r\n    public class PhpGdImageResource : PhpResource\r\n    {\r\n        /// <summary>\r\n        /// Underlaying <see cref=\"Bitmap\"/> object. Cannot be <c>null</c> reference until it is not disposed.\r\n        /// </summary>\r\n        public Bitmap/*!*/Image\r\n        {\r\n            get\r\n            {\r\n                return image;\r\n            }\r\n            internal set\r\n            {\r\n                if (value == null)\r\n                    throw new ArgumentNullException();\r\n\r\n                image = value;\r\n            }\r\n        }\r\n        private Bitmap/*!*/image;\r\n\r\n        /// <summary>\r\n        /// Determine if the pixel format is indexed.\r\n        /// </summary>\r\n        public bool IsIndexed { get { return (image.PixelFormat & PixelFormat.Indexed) == PixelFormat.Indexed; } }\r\n        \r\n        internal bool AlphaBlending = false;\r\n        internal bool SaveAlpha = false;\r\n        internal bool AntiAlias = false;\r\n\r\n        internal Color transparentColor;\r\n        internal bool IsTransparentColSet = false;\r\n\r\n        internal TextureBrush styled;\r\n        internal TextureBrush brushed;\r\n        internal TextureBrush tiled;\r\n\r\n        internal int LineThickness = 1;\r\n\r\n        //public bool BackgroundAllocated { get; set; }\r\n\r\n        internal PhpGdImageResource(int x, int y)\r\n            : base(\"GdImage\")\r\n        {\r\n            image = new Bitmap(x, y);\r\n        }\r\n\r\n        /// <summary>\r\n        ///  Creates PhpGdImageResource without creating internal image\r\n        /// </summary>\r\n        internal PhpGdImageResource(Image/*!*/img)\r\n            : base(\"GdImage\")\r\n        {\r\n            Debug.Assert(img != null);\r\n\r\n            image = new Bitmap(img);\r\n        }\r\n\r\n        /// <summary>\r\n        ///  Creates PhpGdImageResource without creating internal image\r\n        /// </summary>\r\n        internal PhpGdImageResource(Bitmap/*!*/img)\r\n            : base(\"GdImage\")\r\n        {\r\n            Debug.Assert(img != null);\r\n\r\n            image = img;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Free resources owned by this resource.\r\n        /// </summary>\r\n        protected override void FreeManaged()\r\n        {\r\n            if (this.image != null)\r\n            {\r\n                this.image.Dispose();\r\n                this.image = null;\r\n            }\r\n\r\n            if (this.styled != null)\r\n            {\r\n                this.styled.Dispose();\r\n                this.styled = null;\r\n            }\r\n            if (this.brushed != null)\r\n            {\r\n                this.brushed.Dispose();\r\n                this.brushed = null;\r\n            }\r\n            if (this.tiled != null)\r\n            {\r\n                this.tiled.Dispose();\r\n                this.tiled = null;\r\n            }\r\n\r\n            base.FreeManaged();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if resource is really image and if it exists\r\n        /// </summary>\r\n        /// <param name=\"handle\"></param>\r\n        /// <returns></returns> \r\n        /// <exception cref=\"PhpException\">Warning when resource is not valid <see cref=\"PhpGdImageResource\"/>.</exception>\r\n        internal static PhpGdImageResource ValidImage(PhpResource handle)\r\n        {\r\n            PhpGdImageResource result = handle as PhpGdImageResource;\r\n            if (result != null && result.IsValid && result.image != null) return result;\r\n\r\n            PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"image_resource_not_valid\"));\r\n            return null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/PhpImage.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Drawing;\r\nusing System.Drawing.Text;\r\nusing System.Drawing.Imaging;\r\nusing System.IO;\r\nusing System.Security.Permissions;\r\nusing System.Security;\r\nusing System.Net;\r\nusing System.Windows.Forms;\r\nusing System.Drawing.Drawing2D;\r\nusing System.Runtime.InteropServices;\r\nusing System.Resources;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    /// <summary>\r\n    /// Implements PHP functions provided by Gd2 extension.\r\n    /// </summary>\r\n    [ImplementsExtension(\"image\")]\r\n    public static class PhpImage\r\n    {\r\n        #region ImageType\r\n\r\n        /// <summary>\r\n        /// Image types enumeration, corresponds to IMAGETYPE_ PHP constants.\r\n        /// </summary>\r\n        public enum ImageType\r\n        {\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_UNKNOWN\")]\r\n            Unknown = 0,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_GIF\")]\r\n            GIF = 1,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JPEG\")]\r\n            JPEG = 2,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_PNG\")]\r\n            PNG = 3,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_SWF\")]\r\n            SWF = 4,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_PSD\")]\r\n            PSD = 5,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_BMP\")]\r\n            BMP = 6,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_TIFF_II\")]\r\n            TIFF_II = 7,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_TIFF_MM\")]\r\n            TIFF_MM = 8,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JPC\")]\r\n            JPC = 9,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JPEG2000\")]\r\n            JPEG2000 = 9,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JP2\")]\r\n            JP2 = 10,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JPX\")]\r\n            JPX = 11,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_JB2\")]\r\n            JB2 = 12,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_SWC\")]\r\n            SWC = 13,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_IFF\")]\r\n            IFF = 14,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_WBMP\")]\r\n            WBMP = 15,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_XBM\")]\r\n            XBM = 16,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_ICO\")]\r\n            ICO = 17,\r\n            /// <summary>\r\n            /// Image type constant used by the <see cref=\"image_type_to_mime_type\"/> and <see cref=\"image_type_to_extension(int)\"/> functions.\r\n            /// </summary>\r\n            [ImplementsConstant(\"IMAGETYPE_COUNT\")]\r\n            Count = 18,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ImageSignature helper class\r\n\r\n        internal static class ImageSignature\r\n        {\r\n            internal struct ImageInfo\r\n            {\r\n                public uint width, height, bits, channels;\r\n                public PhpArray exif;\r\n            }\r\n\r\n            #region signatures\r\n            static readonly byte[] sig_gif = { (byte)'G', (byte)'I', (byte)'F' };\r\n            static readonly byte[] sig_psd = { (byte)'8', (byte)'B', (byte)'P', (byte)'S' };\r\n            static readonly byte[] sig_bmp = { (byte)'B', (byte)'M' };\r\n            static readonly byte[] sig_swf = { (byte)'F', (byte)'W', (byte)'S' };\r\n            static readonly byte[] sig_swc = { (byte)'C', (byte)'W', (byte)'S' };\r\n            static readonly byte[] sig_jpg = { 0xff, 0xd8, 0xff };\r\n            static readonly byte[] sig_png = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };\r\n            static readonly byte[] sig_tif_ii = { (byte)'I', (byte)'I', 0x2A, 0x00 };\r\n            static readonly byte[] sig_tif_mm = { (byte)'M', (byte)'M', 0x00, 0x2A };\r\n            static readonly byte[] sig_jpc = { 0xff, 0x4f, 0xff };\r\n            static readonly byte[] sig_jp2 = { 0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a };\r\n            static readonly byte[] sig_iff = { (byte)'F', (byte)'O', (byte)'R', (byte)'M' };\r\n            static readonly byte[] sig_ico = { (byte)0x00, (byte)0x00, (byte)0x01, 0x00 };\r\n\r\n            static ImageType handle_gif(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] dim = new byte[5];\r\n\r\n                stream.Seek(3, SeekOrigin.Current);\r\n                if (stream.Read(dim, 0, dim.Length) != dim.Length)\r\n                    return ImageType.Unknown;\r\n\r\n                info.width = ((uint)dim[0] | (((uint)dim[1]) << 8));\r\n                info.height = ((uint)dim[2] | (((uint)dim[3]) << 8));\r\n                info.bits = (((dim[4] & 0x80) != 0) ? ((((uint)dim[4]) & 0x07) + 1) : 0);\r\n                info.channels = 3; /* always */\r\n\r\n                return ImageType.GIF;\r\n            }\r\n\r\n            static ImageType handle_psd(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] dim = new byte[8];\r\n\r\n                stream.Seek(11, SeekOrigin.Current);\r\n                if (stream.Read(dim, 0, dim.Length) != dim.Length)\r\n                    return ImageType.Unknown;\r\n\r\n                info.height = ((((uint)dim[0]) << 24) + (((uint)dim[1]) << 16) + (((uint)dim[2]) << 8) + ((uint)dim[3]));\r\n                info.width = ((((uint)dim[4]) << 24) + (((uint)dim[5]) << 16) + (((uint)dim[6]) << 8) + ((uint)dim[7]));\r\n\r\n                return ImageType.PSD;\r\n            }\r\n\r\n            static ImageType handle_bmp(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] dim = new byte[16];\r\n\r\n                stream.Seek(11, SeekOrigin.Current);\r\n                if (stream.Read(dim, 0, dim.Length) != dim.Length)\r\n                    return ImageType.Unknown;\r\n\r\n                uint size = (((uint)dim[3]) << 24) + (((uint)dim[2]) << 16) + (((uint)dim[1]) << 8) + ((uint)dim[0]);\r\n                if (size == 12)\r\n                {\r\n                    info.width = (((uint)dim[5]) << 8) + ((uint)dim[4]);\r\n                    info.height = (((uint)dim[7]) << 8) + ((uint)dim[6]);\r\n                    info.bits = ((uint)dim[11]);\r\n                }\r\n                else if (size > 12 && (size <= 64 || size == 108))\r\n                {\r\n                    info.width = (((uint)dim[7]) << 24) + (((uint)dim[6]) << 16) + (((uint)dim[5]) << 8) + ((uint)dim[4]);\r\n                    info.height = (((uint)dim[11]) << 24) + (((uint)dim[10]) << 16) + (((uint)dim[9]) << 8) + ((uint)dim[8]);\r\n                    info.bits = (((uint)dim[15]) << 8) + ((uint)dim[14]);\r\n                }\r\n                else\r\n                {\r\n                    return ImageType.Unknown;\r\n                }\r\n\r\n                return ImageType.BMP;\r\n            }\r\n\r\n            static ImageType handle_png(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] dim = new byte[9];\r\n\r\n                stream.Seek(8, SeekOrigin.Current);\r\n                if (stream.Read(dim, 0, dim.Length) != dim.Length)\r\n                    return ImageType.Unknown;\r\n\r\n                info.width = (((uint)dim[0]) << 24) + (((uint)dim[1]) << 16) + (((uint)dim[2]) << 8) + ((uint)dim[3]);\r\n                info.height = (((uint)dim[4]) << 24) + (((uint)dim[5]) << 16) + (((uint)dim[6]) << 8) + ((uint)dim[7]);\r\n                info.bits = (uint)dim[8];\r\n\r\n                return ImageType.PNG;\r\n            }\r\n\r\n            static ImageType handle_jpg(Stream/*!*/stream, ref ImageInfo info, bool exif)\r\n            {\r\n                GetExif(stream, ref info, exif);\r\n\r\n                return ImageType.JPEG;\r\n            }\r\n\r\n            static ImageType handle_jpc(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                int first_marker_id = stream.ReadByte();\r\n\r\n                if (first_marker_id != 0x51) /* Image and tile size */\r\n                {\r\n                    return ImageType.Unknown;\r\n                }\r\n\r\n                stream.Seek(4, SeekOrigin.Current);\r\n\r\n                byte[] buffer = new byte[4];\r\n\r\n                // Width\r\n                stream.Read(buffer, 0, 4);\r\n                buffer = ReversedBytes(buffer, 0, 4, BitConverter.IsLittleEndian);\r\n                info.width = (uint)BitConverter.ToInt32(buffer, 0);\r\n\r\n                // Height\r\n                stream.Read(buffer, 0, 4);\r\n                buffer = ReversedBytes(buffer, 0, 4, BitConverter.IsLittleEndian);\r\n                info.height = (uint)BitConverter.ToInt32(buffer, 0);\r\n\r\n                stream.Seek(24, SeekOrigin.Current);\r\n\r\n                // Channels\r\n                buffer = new byte[2];\r\n                stream.Read(buffer, 0, 2);\r\n                buffer = ReversedBytes(buffer, 0, 2, BitConverter.IsLittleEndian);\r\n                int channels = BitConverter.ToInt16(buffer, 0);\r\n\r\n                if (channels < 0 || channels > 256)\r\n                    return ImageType.Unknown;\r\n\r\n                info.channels = (uint)channels;\r\n\r\n                // Bit depth\r\n                int highest_bit_depth = 0;\r\n                for (int i = 0; i < channels; i++)\r\n                {\r\n                    int bit_depth = stream.ReadByte();\r\n                    bit_depth++;\r\n                    if (bit_depth > highest_bit_depth)\r\n                    {\r\n                        highest_bit_depth = bit_depth;\r\n                    }\r\n\r\n                    stream.ReadByte();\r\n                    stream.ReadByte();\r\n                }\r\n\r\n                info.bits = (uint)highest_bit_depth;\r\n\r\n                return ImageType.JPC;\r\n            }\r\n\r\n            static ImageType handle_jp2(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] jp2c_box_id = { 0x63, 0x32, 0x70, 0x6a }; // 106 112 50 99\r\n\r\n                byte[] buffer = new byte[4];\r\n\r\n                int box_length;\r\n                int box_type;\r\n\r\n                /* JP2 is a wrapper format for JPEG 2000. Data is contained within \"boxes\".\r\n\t               Boxes themselves can be contained within \"super-boxes\". Super-Boxes can\r\n\t               contain super-boxes which provides us with a hierarchical storage system.\r\n\r\n\t               It is valid for a JP2 file to contain multiple individual codestreams.\r\n\t               We'll just look for the first codestream at the root of the box structure\r\n\t               and handle that.\r\n\t            */\r\n\r\n                while (true)\r\n                {\r\n                    if (stream.Read(buffer, 0, 4) != 4) /* LBox */\r\n                        break;\r\n\r\n                    buffer = ReversedBytes(buffer, 0, 4, BitConverter.IsLittleEndian);\r\n\r\n                    box_length = BitConverter.ToInt32(buffer, 0);\r\n\r\n                    /* TBox */\r\n                    if (stream.Read(buffer, 0, 4) != 4)\r\n                        break;\r\n\r\n                    buffer = ReversedBytes(buffer, 0, 4, BitConverter.IsLittleEndian);\r\n\r\n                    box_type = BitConverter.ToInt32(buffer, 0);\r\n\r\n                    if (box_length == 1)\r\n                    {\r\n                        /* We won't handle XLBoxes */\r\n                        return ImageType.Unknown;\r\n                    }\r\n\r\n                    if (Utils.ByteArrayCompare(buffer, jp2c_box_id, 4))\r\n                    {\r\n                        /* Skip the first 3 bytes to emulate the file type examination */\r\n                        stream.Seek(3, SeekOrigin.Current);\r\n\r\n                        handle_jpc(stream, ref info);\r\n                        return ImageType.JP2;\r\n                    }\r\n\r\n                    /* Stop if this was the last box */\r\n                    if (box_length <= 0)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    /* Skip over LBox (Which includes both TBox and LBox itself */\r\n                    if (stream.Seek((long)box_length - 8, SeekOrigin.Current) == 0)\r\n                        break;\r\n                }\r\n\r\n                return ImageType.Unknown;\r\n            }\r\n\r\n            static ImageType handle_ico(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                byte[] dim = new byte[16];\r\n\r\n                if (stream.Read(dim, 0, 2) != 2)\r\n                    return ImageType.Unknown;\r\n\r\n                uint num_icons = (((uint)dim[1]) << 8) + ((uint)dim[0]);\r\n\r\n                if (num_icons < 1 || num_icons > 255)\r\n                    return ImageType.Unknown;\r\n\r\n                while (num_icons > 0)\r\n                {\r\n                    if (stream.Read(dim, 0, dim.Length) != dim.Length)\r\n                        break;\r\n\r\n                    if ((((uint)dim[7]) << 8) + ((uint)dim[6]) >= info.bits)\r\n                    {\r\n                        info.width = (uint)dim[0];\r\n                        info.height = (uint)dim[1];\r\n                        info.bits = (((uint)dim[7]) << 8) + ((uint)dim[6]);\r\n                    }\r\n                    num_icons--;\r\n                }\r\n\r\n                return ImageType.ICO;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Build reversed (if required) portion of a given byte array.\r\n            /// </summary>\r\n            /// <param name=\"array\">Source array.</param>\r\n            /// <param name=\"offset\">Index of the first byte.</param>\r\n            /// <param name=\"count\">Amount of bytes to cut of (and reverse).</param>\r\n            /// <param name=\"reverse\">True to reverse the portion of bytes.</param>\r\n            /// <returns></returns>\r\n            private static byte[]/*!*/ ReversedBytes(byte[]/*!*/array, int offset, int count, bool reverse)\r\n            {\r\n                Debug.Assert(array != null);\r\n                Debug.Assert(offset >= 0);\r\n                Debug.Assert(count >= 0);\r\n                Debug.Assert(offset + count <= array.Length);\r\n\r\n                if (!reverse && offset == 0 && count == array.Length)\r\n                    return array;\r\n\r\n                byte[] result = new byte[count];\r\n\r\n                if (reverse)\r\n                {\r\n                    int i = 0;\r\n                    int j = offset + count - 1;\r\n                    for (; i < count; i++, j--)\r\n                        result[i] = array[j];\r\n                }\r\n                else\r\n                {\r\n                    Buffer.BlockCopy(array, offset, result, 0, count);\r\n                }\r\n\r\n                return result;\r\n            }\r\n\r\n            private enum TagTypes\r\n            {\r\n                TAG_IMAGEWIDTH = 0x0100,\r\n                TAG_IMAGEHEIGHT = 0x0101,\r\n                TAG_COMP_IMAGEWIDTH = 0xA002,\r\n                TAG_COMP_IMAGEHEIGHT = 0xA003,\r\n                TAG_FMT_BYTE = 1,\r\n                TAG_FMT_STRING = 2,\r\n                TAG_FMT_USHORT = 3,\r\n                TAG_FMT_ULONG = 4,\r\n                TAG_FMT_URATIONAL = 5,\r\n                TAG_FMT_SBYTE = 6,\r\n                TAG_FMT_UNDEFINED = 7,\r\n                TAG_FMT_SSHORT = 8,\r\n                TAG_FMT_SLONG = 9,\r\n                TAG_FMT_SRATIONAL = 10,\r\n                TAG_FMT_SINGLE = 11,\r\n                TAG_FMT_DOUBLE = 12\r\n            }\r\n\r\n            static ImageType handle_tiff(Stream/*!*/stream, ref ImageInfo info, bool IsLittleEndian)\r\n            {\r\n                bool reverseBytes = IsLittleEndian ^ BitConverter.IsLittleEndian;\r\n\r\n                byte[] a = new byte[4];\r\n                if (stream.Read(a, 0, 4) != 4)\r\n                    return ImageType.Unknown;\r\n\r\n                a = ReversedBytes(a, 0, 4, reverseBytes);\r\n\r\n                int ifd_addr = BitConverter.ToInt32(a, 0);\r\n\r\n                stream.Seek(ifd_addr - 8, SeekOrigin.Current);\r\n\r\n                byte[] ifd_data = new byte[2];\r\n                if (stream.Read(ifd_data, 0, 2) != 2)\r\n                    return ImageType.Unknown;\r\n\r\n                ifd_data = ReversedBytes(ifd_data, 0, 2, reverseBytes);\r\n\r\n                short num_entries = BitConverter.ToInt16(ifd_data, 0);\r\n\r\n                int dir_size = 2/*num dir entries*/ + 12/*length of entry*/* num_entries + 4/* offset to next ifd (points to thumbnail or NULL)*/;\r\n                int ifd_size = dir_size;\r\n\r\n                ifd_data = new byte[ifd_size];\r\n\r\n                if (stream.Read(ifd_data, 2, dir_size - 2) != dir_size - 2)\r\n                    return ImageType.Unknown;\r\n\r\n                //int offset;\r\n                int entry_value;\r\n                byte[] buffer = new byte[2];\r\n\r\n                for (int i = 0; i < num_entries; i++)\r\n                {\r\n                    int dir_entry = 2 + i * 12;\r\n\r\n                    buffer[0] = ifd_data[dir_entry + 0];\r\n                    buffer[1] = ifd_data[dir_entry + 1];\r\n\r\n                    //ushort entry_tag = BitConverter.ToUInt16(ReversedBytes(ifd_data, dir_entry + 0, 2, IsLittleEndian), 0);\r\n                    //short entry_type = BitConverter.ToInt16(ReversedBytes(ifd_data, dir_entry + 2, 2, IsLittleEndian), 0);\r\n\r\n                    buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                    ushort entry_tag = (ushort)BitConverter.ToInt16(buffer, 0);\r\n\r\n                    buffer[0] = ifd_data[dir_entry + 2];\r\n                    buffer[1] = ifd_data[dir_entry + 3];\r\n\r\n                    buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                    short entry_type = BitConverter.ToInt16(buffer, 0);\r\n\r\n                    switch (entry_type)\r\n                    {\r\n                        case (short)TagTypes.TAG_FMT_BYTE:\r\n                        case (short)TagTypes.TAG_FMT_SBYTE:\r\n                            entry_value = ifd_data[dir_entry + 8];\r\n                            break;\r\n                        case (short)TagTypes.TAG_FMT_USHORT:\r\n\r\n                            buffer[0] = ifd_data[dir_entry + 8];\r\n                            buffer[1] = ifd_data[dir_entry + 9];\r\n\r\n                            buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                            entry_value = BitConverter.ToUInt16(buffer, 0);\r\n                            break;\r\n                        case (short)TagTypes.TAG_FMT_SSHORT:\r\n\r\n                            buffer[0] = ifd_data[dir_entry + 8];\r\n                            buffer[1] = ifd_data[dir_entry + 9];\r\n\r\n                            buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                            entry_value = BitConverter.ToInt16(buffer, 0);\r\n                            break;\r\n                        case (short)TagTypes.TAG_FMT_ULONG:\r\n\r\n                            buffer[0] = ifd_data[dir_entry + 8];\r\n                            buffer[1] = ifd_data[dir_entry + 9];\r\n\r\n                            buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                            entry_value = (int)BitConverter.ToUInt16(buffer, 0);\r\n                            break;\r\n                        case (short)TagTypes.TAG_FMT_SLONG:\r\n\r\n                            buffer[0] = ifd_data[dir_entry + 8];\r\n                            buffer[1] = ifd_data[dir_entry + 9];\r\n\r\n                            buffer = ReversedBytes(buffer, 0, 2, reverseBytes);\r\n\r\n                            entry_value = (int)BitConverter.ToInt16(buffer, 0);\r\n                            break;\r\n                        default:\r\n                            continue;\r\n                    }\r\n                    switch (entry_tag)\r\n                    {\r\n                        case (ushort)TagTypes.TAG_IMAGEWIDTH:\r\n                        case (ushort)TagTypes.TAG_COMP_IMAGEWIDTH:\r\n                            info.width = (uint)entry_value;\r\n                            break;\r\n                        case (ushort)TagTypes.TAG_IMAGEHEIGHT:\r\n                        case (ushort)TagTypes.TAG_COMP_IMAGEHEIGHT:\r\n                            info.height = (uint)entry_value;\r\n                            break;\r\n                    }\r\n                }\r\n\r\n                if (info.width == 0 || info.height == 0)\r\n                    return ImageType.Unknown;\r\n\r\n                if (IsLittleEndian)\r\n                    return ImageType.TIFF_II;\r\n                else\r\n                    return ImageType.TIFF_MM;\r\n            }\r\n\r\n            static ImageType handle_iff(Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                bool reversed = BitConverter.IsLittleEndian;\r\n\r\n                byte[] a = new byte[10];\r\n                if (stream.Read(a, 0, 8) != 8) return ImageType.Unknown;\r\n\r\n                if (!Equals(a, 4, new byte[] { (byte)'I', (byte)'L', (byte)'B', (byte)'M' }, 4) &&\r\n                    !Equals(a, 4, new byte[] { (byte)'P', (byte)'B', (byte)'M', (byte)' ' }, 4))\r\n                    return ImageType.Unknown;\r\n\r\n                /* loop chunks to find BMHD chunk */\r\n                for (; ; )\r\n                {\r\n                    if (stream.Read(a, 0, 8) != 8) return ImageType.Unknown;\r\n                    int chunkId = BitConverter.ToInt32(ReversedBytes(a, 0, 4, reversed), 0);\r\n                    int size = BitConverter.ToInt32(ReversedBytes(a, 4, 4, reversed), 0);\r\n                    if (size < 0) return ImageType.Unknown;\r\n                    if ((size & 1) == 1) size++;\r\n                    if (chunkId == 0x424d4844)\r\n                    { /* BMHD chunk */\r\n                        if (size < 9 || stream.Read(a, 0, 9) != 9) return ImageType.Unknown;\r\n                        short width = BitConverter.ToInt16(ReversedBytes(a, 0, 2, reversed), 0);\r\n                        short height = BitConverter.ToInt16(ReversedBytes(a, 2, 2, reversed), 0);\r\n                        byte bits = (byte)(a[8] & 0xff);\r\n                        if (width > 0 && height > 0 && bits > 0 && bits < 33)\r\n                        {\r\n                            info.width = (uint)width;\r\n                            info.height = (uint)height;\r\n                            info.bits = (uint)bits;\r\n                            info.channels = 0;\r\n                            return ImageType.IFF;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        stream.Seek(size, SeekOrigin.Current);\r\n                    }\r\n                }\r\n            }\r\n\r\n            static ImageType handle_swf(Stream/*!*/stream, ref ImageInfo info, bool compressed)\r\n            {\r\n                stream.Seek(5, SeekOrigin.Current); // skip file version, and file size\r\n\r\n                byte[] b = new byte[128];\r\n\r\n                if (compressed)\r\n                {\r\n                    stream.Seek(2, SeekOrigin.Current);\r\n                    stream = new System.IO.Compression.DeflateStream(stream, System.IO.Compression.CompressionMode.Decompress, false);\r\n                }\r\n\r\n                // read RECT:\r\n\r\n                byte byTemp = (byte)stream.ReadByte();\r\n                byte byNbits = (byte)((int)byTemp >> 3);\r\n                byTemp &= 7;\r\n                byTemp <<= 5;\r\n\r\n                int nBitCount = 0, nCurrentValue = 0, nCurrentBit = 2;\r\n                int xMax = 0, xMin = 0, yMin = 0, yMax = 0;\r\n\r\n                for (int i = 0; i < 4; i++)\r\n                {\r\n                    while (nBitCount < byNbits)\r\n                    {\r\n                        if ((byTemp & 128) == 128)\r\n                            nCurrentValue += 1 << (byNbits - nBitCount - 1);\r\n\r\n                        byTemp <<= 1;\r\n                        byTemp &= 255;\r\n                        nCurrentBit--;\r\n                        nBitCount++;\r\n                        if (nCurrentBit < 0)\r\n                        {\r\n                            byTemp = (byte)stream.ReadByte();\r\n                            nCurrentBit = 7;\r\n                        }\r\n                    }\r\n\r\n                    switch (i)\r\n                    {\r\n                        case 0:\r\n                            xMin = nCurrentValue;\r\n                            break;\r\n                        case 1:\r\n                            xMax = nCurrentValue;\r\n                            break;\r\n                        case 2:\r\n                            yMin = nCurrentValue;\r\n                            break;\r\n                        case 3:\r\n                            yMax = nCurrentValue;\r\n                            break;\r\n                        default:\r\n                            Debug.Fail(null);\r\n                            break;\r\n                    }\r\n\r\n                    nBitCount = 0;\r\n                    nCurrentValue = 0;\r\n                }\r\n\r\n                info.width = (uint)(xMax - xMin) / 20;\r\n                info.height = (uint)(yMax - yMin) / 20;\r\n\r\n                return compressed ? ImageType.SWC : ImageType.SWF;\r\n            }\r\n\r\n            #region jpeg\r\n\r\n            #region JpegMarkerTypes\r\n\r\n            /// <summary>\r\n            /// List of possible Jpeg Exif Markers\r\n            /// </summary>\r\n            private enum JpegMarker\r\n            {\r\n                M_SOF0 = 0xC0,\r\n                M_SOF1 = 0xC1,\r\n                M_SOF2 = 0xC2,\r\n                M_SOF3 = 0xC3,\r\n                M_SOF4 = 0xC4,\r\n                M_SOF5 = 0xC5,\r\n                M_SOF6 = 0xC6,\r\n                M_SOF7 = 0xC7,\r\n                M_SOF8 = 0xC8,\r\n                M_SOF9 = 0xC9,\r\n                M_SOF10 = 0xCA,\r\n                M_SOF11 = 0xCB,\r\n                M_SOF12 = 0xCC,\r\n                M_SOF13 = 0xCD,\r\n                M_SOF14 = 0xCE,\r\n                M_SOF15 = 0xCF,\r\n                M_SOI = 0xD8,\r\n                M_EOI = 0xD9, /* End Of Image (end of datastream) */\r\n                M_SOS = 0xDA, /* Start Of Scan (begins compressed data) */\r\n                M_APP0 = 0xe0,\r\n                M_APP1 = 0xe1,\r\n                M_APP2 = 0xe2,\r\n                M_APP3 = 0xe3,\r\n                M_APP4 = 0xe4,\r\n                M_APP5 = 0xe5,\r\n                M_APP6 = 0xe6,\r\n                M_APP7 = 0xe7,\r\n                M_APP8 = 0xe8,\r\n                M_APP9 = 0xe9,\r\n                M_APP10 = 0xea,\r\n                M_APP11 = 0xeb,\r\n                M_APP12 = 0xec,\r\n                M_APP13 = 0xed,\r\n                M_APP14 = 0xee,\r\n                M_APP15 = 0xef,\r\n                M_COM = 0xFE,\r\n                M_PSEUDO = 0xFFD8 /* pseudo marker for start of image(byte 0) */\r\n            }\r\n\r\n            #endregion\r\n\r\n            /// <summary>\r\n            /// Read next two bytes (marker size)\r\n            /// </summary>\r\n            /// <param name=\"stream\"></param>\r\n            /// <returns></returns>\r\n            private static int ReadMarkerSize(Stream stream)\r\n            {\r\n                byte[] buffer = new byte[2];\r\n\r\n                stream.Read(buffer, 0, 2);\r\n                return (((int)buffer[0] << 8) | buffer[1]);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Skip over a variable-length block; assumes proper length marker\r\n            /// </summary>\r\n            /// <param name=\"stream\"></param>\r\n            /// <returns></returns>\r\n            private static bool SkipVariable(Stream stream)\r\n            {\r\n                int length = ReadMarkerSize(stream);\r\n\r\n                if (length < 2)\r\n                {\r\n                    return false;\r\n                }\r\n                length = length - 2;\r\n\r\n                stream.Seek(length, SeekOrigin.Current);\r\n\r\n                return true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Get next marker in jpeg file (starts with 0xff)\r\n            /// </summary>\r\n            /// <param name=\"stream\"></param>\r\n            /// <param name=\"last_marker\"></param>\r\n            /// <param name=\"comment_correction\"></param>\r\n            /// <param name=\"ff_read\"></param>\r\n            /// <returns></returns>\r\n            private static JpegMarker GetNextMarker(Stream stream, JpegMarker last_marker, int comment_correction, int ff_read)\r\n            {\r\n                int a = 0;\r\n                JpegMarker marker;\r\n\r\n                /* get marker byte, swallowing possible padding                               */\r\n                if (last_marker == JpegMarker.M_COM && comment_correction != 0)\r\n                {\r\n                    /* some software does not count the length bytes of COM section           */\r\n                    /* one company doing so is very much envolved in JPEG... so we accept too */\r\n                    /* by the way: some of those companies changed their code now...          */\r\n                    comment_correction = 2;\r\n                }\r\n                else\r\n                {\r\n                    last_marker = 0;\r\n                    comment_correction = 0;\r\n                }\r\n\r\n                if (ff_read != 0)\r\n                {\r\n                    a = 1; /* already read 0xff in filetype detection */\r\n                }\r\n                do\r\n                {\r\n                    marker = (JpegMarker)stream.ReadByte();\r\n                    if (marker == JpegMarker.M_EOI)\r\n                    {\r\n                        return JpegMarker.M_EOI;/* we hit EOF */\r\n                    }\r\n                    if (last_marker == JpegMarker.M_COM && comment_correction > 0)\r\n                    {\r\n                        if (marker != (JpegMarker)0xFF)\r\n                        {\r\n                            marker = (JpegMarker)0xFF;\r\n                            comment_correction--;\r\n                        }\r\n                        else\r\n                        {\r\n                            last_marker = JpegMarker.M_PSEUDO; /* stop skipping non 0xff for M_COM */\r\n                        }\r\n                    }\r\n                    a++;\r\n                } while (marker == (JpegMarker)0xff);\r\n                if (a < 2)\r\n                {\r\n                    return JpegMarker.M_EOI; /* at least one 0xff is needed before marker code */\r\n                }\r\n                if (last_marker == JpegMarker.M_COM && comment_correction != 0)\r\n                {\r\n                    return JpegMarker.M_EOI; /* ah illegal: char after COM section not 0xFF */\r\n                }\r\n\r\n                return marker;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Save specific jpeg marker into result array\r\n            /// </summary>\r\n            /// <param name=\"array\"></param>\r\n            /// <param name=\"ms\"></param>\r\n            /// <param name=\"markerName\"></param>\r\n            /// <returns></returns>\r\n            private static bool SaveMarker(ref PhpArray array, Stream ms, string markerName)\r\n            {\r\n                int markerLength;\r\n                byte[] buffer;\r\n\r\n                markerLength = ReadMarkerSize(ms);\r\n                if (markerLength < 2)\r\n                {\r\n                    return false;\r\n                }\r\n                markerLength -= 2; // length includes itself\r\n\r\n                buffer = new byte[markerLength];\r\n\r\n                ms.Read(buffer, 0, markerLength);\r\n\r\n                if (!array.Contains(markerName))\r\n                {\r\n                    array.Add(markerName, new PhpBytes(buffer));\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Extracts Exif information from specified memory stream.\r\n            /// </summary>\r\n            /// <param name=\"ms\"></param>\r\n            /// <param name=\"info\">Will be filled with image info.</param>\r\n            /// <param name=\"exif\">Whether we are interested in additional EXIF data.</param>\r\n            /// <returns></returns>\r\n            public static bool GetExif(Stream ms, ref ImageInfo info, bool exif)\r\n            {\r\n                JpegMarker marker = JpegMarker.M_PSEUDO;\r\n                int ff_read = 1;\r\n\r\n                for (; ; )\r\n                {\r\n                    marker = GetNextMarker(ms, marker, 1, ff_read);\r\n                    ff_read = 0;\r\n\r\n                    switch ((JpegMarker)marker)\r\n                    {\r\n                        case JpegMarker.M_SOF0:\r\n                        case JpegMarker.M_SOF1:\r\n                        case JpegMarker.M_SOF2:\r\n                        case JpegMarker.M_SOF3:\r\n                        case JpegMarker.M_SOF5:\r\n                        case JpegMarker.M_SOF6:\r\n                        case JpegMarker.M_SOF7:\r\n                        case JpegMarker.M_SOF9:\r\n                        case JpegMarker.M_SOF10:\r\n                        case JpegMarker.M_SOF11:\r\n                        case JpegMarker.M_SOF13:\r\n                        case JpegMarker.M_SOF14:\r\n                        case JpegMarker.M_SOF15:\r\n                            {\r\n                                /* handle SOFn block */\r\n                                int length = ReadMarkerSize(ms);\r\n                                info.bits = (uint)ms.ReadByte();\r\n                                info.height = (uint)ReadMarkerSize(ms);\r\n                                info.width = (uint)ReadMarkerSize(ms);\r\n                                info.channels = (uint)ms.ReadByte();\r\n                                if (length < 8 || !exif) // if we don't want an extanded info -> return\r\n                                    return true;\r\n\r\n                                ms.Seek(length - 8, SeekOrigin.Current); // after info\r\n                            }\r\n                            break;\r\n                        case JpegMarker.M_APP0:\r\n                        case JpegMarker.M_APP1:\r\n                        case JpegMarker.M_APP2:\r\n                        case JpegMarker.M_APP3:\r\n                        case JpegMarker.M_APP4:\r\n                        case JpegMarker.M_APP5:\r\n                        case JpegMarker.M_APP6:\r\n                        case JpegMarker.M_APP7:\r\n                        case JpegMarker.M_APP8:\r\n                        case JpegMarker.M_APP9:\r\n                        case JpegMarker.M_APP10:\r\n                        case JpegMarker.M_APP11:\r\n                        case JpegMarker.M_APP12:\r\n                        case JpegMarker.M_APP13:\r\n                        case JpegMarker.M_APP14:\r\n                        case JpegMarker.M_APP15:\r\n                            if (exif)\r\n                            {\r\n                                if (info.exif == null)\r\n                                    info.exif = new PhpArray(32);\r\n\r\n                                SaveMarker(ref info.exif, ms, \"APP\" + (marker - (int)JpegMarker.M_APP0));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (!SkipVariable(ms))\r\n                                    return true;\r\n                            }\r\n                            break;\r\n\r\n                        case JpegMarker.M_SOS:\r\n                        case JpegMarker.M_EOI:\r\n                            return true;    // End of Jpeg File or start of image data\r\n\r\n                        default:\r\n                            if (!SkipVariable(ms)) // anything else isn't interesting\r\n                                return true;\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region wbmp, xbm\r\n\r\n            /// <summary>\r\n            /// Read next byte from given <paramref name=\"buffer\"/>. If buffer is at the end, read the next byte from the given <paramref name=\"stream\"/> and buffer it.\r\n            /// </summary>\r\n            /// <param name=\"buffer\">Buffer to read bytes primarily.</param>\r\n            /// <param name=\"stream\">Stream that is used for shadow copying into the buffer.</param>\r\n            /// <returns>Value of the next byte converted to int or -1 if there is not more bytes in the <paramref name=\"stream\"/>.</returns>\r\n            private static int ReadByte(MemoryStream/*!*/buffer, Stream/*!*/stream)\r\n            {\r\n                int value;\r\n\r\n                if (buffer.Position >= buffer.Length)   // at the end of the buffer, read more bytes from the stream\r\n                {\r\n                    value = stream.ReadByte();\r\n                    if (value >= 0)\r\n                        buffer.WriteByte((byte)value);\r\n                }\r\n                else\r\n                {\r\n                    value = buffer.ReadByte();\r\n                }\r\n\r\n                return value;\r\n            }\r\n\r\n            private static ImageType handle_wbmp(MemoryStream/*!*/buffer, Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                buffer.Position = 0;\r\n\r\n                if (ReadByte(buffer, stream) != 0)\r\n                    return ImageType.Unknown;\r\n                \r\n                int i = 0, w = 0, h = 0;\r\n\r\n                do\r\n                {\r\n                    //i = stream.ReadByte();\r\n                    i = ReadByte(buffer, stream);\r\n\r\n                    if (i < 0)\r\n                    {\r\n                        return ImageType.Unknown;\r\n                    }\r\n                } while ((i & 0x80) != 0);\r\n\r\n                /* get width */\r\n                do\r\n                {\r\n                    //i = stream.ReadByte();\r\n                    i = ReadByte(buffer, stream);\r\n\r\n                    if (i < 0)\r\n                    {\r\n                        return ImageType.Unknown;\r\n                    }\r\n                    w = (w << 7) | (i & 0x7f);\r\n                } while ((i & 0x80) != 0);\r\n\r\n                /* get height */\r\n                do\r\n                {\r\n                    //i = stream.ReadByte();\r\n                    i = ReadByte(buffer, stream);\r\n\r\n                    if (i < 0)\r\n                    {\r\n                        return ImageType.Unknown;\r\n                    }\r\n                    h = (h << 7) | (i & 0x7f);\r\n                } while ((i & 0x80) != 0);\r\n\r\n                /* maximum valid sizes for wbmp (although 127x127 may be a more accurate one) */\r\n                if (h == 0 || w == 0 || h > 2048 || w > 2048)\r\n                {\r\n                    return ImageType.Unknown;\r\n                }\r\n                else\r\n                {\r\n                    info.width = (uint)w;\r\n                    info.height = (uint)h;\r\n                    return ImageType.WBMP;\r\n                }\r\n            }\r\n\r\n            private static byte[] xbm_define = new byte[] { (byte)'#', (byte)'d', (byte)'e', (byte)'f', (byte)'i', (byte)'n', (byte)'e', (byte)' ' };\r\n\r\n            private static ImageType handle_xbm(MemoryStream/*!*/buffer, Stream/*!*/stream, ref ImageInfo info)\r\n            {\r\n                buffer.Position = 0;\r\n                int w = 0, h = 0;\r\n                int badlines = 0;  // read up to 4 lines, if we did not found any #define\r\n\r\n                do\r\n                {\r\n                    bool define_found = true;\r\n\r\n                    // read \"#define \", otherwise break;\r\n                    for (int i = 0; i < xbm_define.Length; i++)\r\n                    {\r\n                        int b;\r\n                        do b = ReadByte(buffer, stream);\r\n                        while (i == 0 && (b == 13 || b == 10)); // skip line ends at the beginning of reading\r\n\r\n                        if (b < 0) return ImageType.Unknown;\r\n\r\n                        if ((char)b != xbm_define[i])\r\n                        {\r\n                            define_found = false;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    // \r\n                    if (define_found)\r\n                    {\r\n                        // read the line:\r\n                        StringBuilder bld = new StringBuilder(32);\r\n                        for(;;)\r\n                        {\r\n                            int b = ReadByte(buffer, stream);\r\n                            if (b == 10 || b == 13 || b <= 0)   // until 13, 10, 0, EOF\r\n                                break;\r\n\r\n                            bld.Append((char)b);\r\n\r\n                            if (bld.Length > 4096) return ImageType.Unknown;    // do not read if there are too long lines, invalid file probably.\r\n                        }\r\n\r\n                        string[] parts = bld.ToString().Split(' ');\r\n\r\n                        // read \r\n                        if (parts.Length == 2)\r\n                        {\r\n                            if (parts[0].EndsWith(\"_width\"))\r\n                            {\r\n                                if (!int.TryParse(parts[1], out w) || w == 0) return ImageType.Unknown;\r\n                            }\r\n                            else if (parts[0].EndsWith(\"_height\"))\r\n                                if (!int.TryParse(parts[1], out h) || h == 0) return ImageType.Unknown;\r\n\r\n                            if (w != 0 && h != 0)\r\n                            {\r\n                                info.width = (uint)w;\r\n                                info.height = (uint)h;\r\n                                return ImageType.XBM;\r\n                            }\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        badlines++;\r\n                        // read the rest of the line:\r\n                        int b;\r\n                        do\r\n                        {\r\n                            b = ReadByte(buffer, stream);\r\n                            if (b < 0) return ImageType.Unknown;\r\n                        } while (b != 10 && b != 13);\r\n                    }\r\n                } while (badlines < 4);\r\n\r\n                return ImageType.Unknown;\r\n            }\r\n\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            private static bool Equals(byte[] a, byte[] b, int length)\r\n            {\r\n                return ArrayUtils.Compare(a, b, length) == 0;\r\n            }\r\n\r\n            private static bool Equals(byte[]/*!*/a, int offset, byte[]/*!*/b, int length)\r\n            {\r\n                Debug.Assert(a != null && b != null && offset + length <= a.Length && length <= b.Length && offset >= 0);\r\n\r\n                int i = offset;\r\n                int j = 0;\r\n                for (; j < length; i++, j++)\r\n                    if (a[i] != b[j])\r\n                        return false;\r\n                return true;\r\n            }\r\n\r\n            private static ImageType ReadError(bool quiet)\r\n            {\r\n                if (!quiet) PhpException.Throw(PhpError.Notice, Utils.Resources.GetString(\"read_error\"));\r\n                return ImageType.Unknown;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Read the image type from the <paramref name=\"stream\"/>. Advances the position in the stream accordingly.\r\n            /// </summary>\r\n            /// <param name=\"stream\"></param>\r\n            /// <param name=\"quiet\">True to output warning messages.</param>\r\n            /// <param name=\"info\"></param>\r\n            /// <param name=\"collectInfo\"></param>\r\n            /// <param name=\"collectExif\"></param>\r\n            /// <returns></returns>\r\n            public static ImageType ProcessImageType(Stream/*!*/stream, bool quiet, out ImageInfo info, bool collectInfo, bool collectExif)\r\n            {\r\n                Debug.Assert(stream != null);\r\n\r\n                byte[] filetype = new byte[12];\r\n                info = new ImageInfo();\r\n\r\n                if (stream.Read(filetype, 0, 3) != 3) return ReadError(quiet);\r\n\r\n                // 3 byte headers:\r\n                if (Equals(filetype, sig_gif, 3)) return collectInfo ? handle_gif(stream, ref info) : ImageType.GIF;\r\n                if (Equals(filetype, sig_jpg, 3)) return collectInfo ? handle_jpg(stream, ref info, collectExif) : ImageType.JPEG;\r\n                if (Equals(filetype, sig_png, 3))\r\n                {\r\n                    if (stream.Read(filetype, 3, 5) != 5) return ReadError(quiet);\r\n                    if (Equals(filetype, sig_png, 8)) return collectInfo ? handle_png(stream, ref info) : ImageType.PNG;\r\n\r\n                    if (!quiet) PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"png_corrupted\"));\r\n                    return ImageType.Unknown;\r\n                }\r\n                if (Equals(filetype, sig_swf, 3)) return collectInfo ? handle_swf(stream, ref info, false) : ImageType.SWF;\r\n                if (Equals(filetype, sig_swc, 3)) return collectInfo ? handle_swf(stream, ref info, true) : ImageType.SWC;\r\n                if (Equals(filetype, sig_psd, 3)) return collectInfo ? handle_psd(stream, ref info) : ImageType.PSD;\r\n                if (Equals(filetype, sig_bmp, 2)) return collectInfo ? handle_bmp(stream, ref info) : ImageType.BMP;\r\n                if (Equals(filetype, sig_jpc, 3)) return collectInfo ? handle_jpc(stream, ref info) : ImageType.JPC;\r\n\r\n                if (stream.Read(filetype, 3, 1) != 1) return ReadError(quiet);\r\n\r\n                // 4 byte headers:\r\n                if (Equals(filetype, sig_tif_ii, 4)) return collectInfo ? handle_tiff(stream, ref info, true) : ImageType.TIFF_II;\r\n                if (Equals(filetype, sig_tif_mm, 4)) return collectInfo ? handle_tiff(stream, ref info, false) : ImageType.TIFF_MM;\r\n                if (Equals(filetype, sig_iff, 4)) return collectInfo ? handle_iff(stream, ref info) : ImageType.IFF;\r\n                if (Equals(filetype, sig_ico, 4)) return collectInfo ? handle_ico(stream, ref info) : ImageType.ICO;\r\n\r\n\r\n                if (stream.Read(filetype, 4, 8) != 8) return ReadError(quiet);\r\n                // 12 byte headers:\r\n                if (Equals(filetype, sig_jp2, 12)) return collectInfo ? handle_jp2(stream, ref info) : ImageType.JP2;\r\n\r\n                // remaining cases:\r\n                using (MemoryStream ms = new MemoryStream())\r\n                {\r\n                    ms.Write(filetype, 0, 12);\r\n\r\n                    if (handle_wbmp(ms, stream, ref info) == ImageType.WBMP)\r\n                        return ImageType.WBMP;\r\n\r\n                    if (handle_xbm(ms, stream, ref info) == ImageType.XBM)\r\n                        return ImageType.XBM;\r\n                }\r\n\r\n                return ImageType.Unknown;\r\n            }\r\n\r\n           \r\n        }\r\n\r\n        #endregion\r\n\r\n        #region getimagesize, getimagesizefromstring\r\n\r\n        private static PhpArray GetImageSize(Stream/*!*/stream, bool exif, out PhpArray exifarray)\r\n        {\r\n            exifarray = null;\r\n\r\n            if (stream == null)\r\n                return null;\r\n\r\n            ImageSignature.ImageInfo info;\r\n            ImageType type;\r\n            try\r\n            {\r\n                type = ImageSignature.ProcessImageType(stream, false, out info, true, exif);\r\n            }\r\n#if !DEBUG\r\n            catch\r\n            {\r\n                /*rw error*/\r\n                type = ImageType.Unknown;\r\n                info.width = info.height = info.bits = info.channels = 0;\r\n                info.exif = null;\r\n            }\r\n#endif\r\n            finally\r\n            {\r\n                stream.Dispose();\r\n            }\r\n\r\n            if (type != ImageType.Unknown)\r\n            {\r\n                PhpArray result = new PhpArray(7);\r\n\r\n                result.Add((int)info.width);\r\n                result.Add((int)info.height);\r\n                result.Add((int)type);\r\n                result.Add(string.Format(\"width=\\\"{0}\\\" height=\\\"{1}\\\"\", info.width, info.height));\r\n\r\n                if (info.bits != 0) result.Add(\"bits\", (int)info.bits);\r\n                if (info.channels != 0) result.Add(\"channels\", (int)info.channels);\r\n                result.Add(\"mime\", image_type_to_mime_type((int)type));\r\n\r\n                exifarray = info.exif;\r\n                return result;\r\n            }\r\n            else\r\n                return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the size of an image.\r\n        /// </summary> \r\n        /// <param name=\"filename\">This parameter specifies the file you wish to retrieve information about. It can reference a local file or (configuration permitting) a remote file using one of the supported streams.</param>\r\n        [ImplementsFunction(\"getimagesize\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray getimagesize(string filename)\r\n        {\r\n            return getimagesize(filename, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the size of an image.\r\n        /// </summary> \r\n        /// <param name=\"filename\">This parameter specifies the file you wish to retrieve information about. It can reference a local file or (configuration permitting) a remote file using one of the supported streams.</param>\r\n        /// <param name=\"imageinfo\">This optional parameter allows you to extract some extended information from the image file.</param>\r\n        [ImplementsFunction(\"getimagesize\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray getimagesize(string filename, PhpReference imageinfo)\r\n        {\r\n            if (string.IsNullOrEmpty(filename))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, Utils.Resources.GetString(\"filename_cannot_be_empty\"));\r\n                return null;\r\n            }\r\n\r\n            return getimagesize(Utils.OpenStream(filename), imageinfo);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the size of an image.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">Content of the image.</param>\r\n        [ImplementsFunction(\"getimagesizefromstring\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray getimagesizefromstring(PhpBytes bytes)\r\n        {\r\n            return getimagesizefromstring(bytes, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the size of an image.\r\n        /// </summary>\r\n        /// <param name=\"bytes\">Content of the image.</param>\r\n        /// <param name=\"imageinfo\">This optional parameter allows you to extract some extended information from the image file.</param>\r\n        [ImplementsFunction(\"getimagesizefromstring\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray getimagesizefromstring(PhpBytes bytes, PhpReference imageinfo)\r\n        {\r\n            if (bytes == null)\r\n                return null;\r\n\r\n            return getimagesize(new MemoryStream(bytes.ReadonlyData), imageinfo);\r\n        }\r\n\r\n        private static PhpArray getimagesize(Stream stream, PhpReference imageinfo)\r\n        {\r\n            PhpArray exif;\r\n            PhpArray result = GetImageSize(stream, imageinfo != null, out exif);\r\n            if (imageinfo != null) imageinfo.value = exif ?? new PhpArray();\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get MIME type corresponding to given <paramref name=\"format\"/>.\r\n        /// </summary>\r\n        /// <param name=\"format\"></param>\r\n        /// <returns>MIME type of given <paramref name=\"format\"/>.</returns>\r\n        private static string GetImageMime(ImageFormat format)\r\n        {\r\n            if (format.Equals(ImageFormat.Gif))\r\n                return \"image/gif\";\r\n            else if (format.Equals(ImageFormat.Jpeg))\r\n                return \"image/jpeg\";\r\n            else if (format.Equals(ImageFormat.Png))\r\n                return \"image/png\";\r\n            else if (format.Equals(ImageFormat.Bmp))\r\n                return \"image/bmp\";\r\n            else if (format.Equals(ImageFormat.Icon))\r\n                return \"image/x-icon\";\r\n            else if (format.Equals(ImageFormat.Tiff))\r\n                return \"image/tiff\";\r\n            else if (format.Equals(ImageFormat.Emf))\r\n                return \"image/x-emf\"; // Windows Metafile\r\n            else if (format.Equals(ImageFormat.Wmf))\r\n                return \"image/x-wmf\"; // Windows Metafile\r\n            else if (format.Equals(ImageFormat.Exif))\r\n                return \"image/jpeg\";    // should it be even handled ?\r\n            else\r\n                throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region iptcparse\r\n\r\n        /// <summary>\r\n        /// Parse a binary IPTC block into single tags.\r\n        /// </summary>\r\n        /// <param name=\"iptcblock\">A binary IPTC block.</param>\r\n        /// <returns>Returns an array using the tagmarker as an index and the value as the value. It returns FALSE on error or if no IPTC data was found.</returns>\r\n        [ImplementsFunction(\"iptcparse\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray iptcparse(PhpBytes iptcblock)\r\n        {\r\n            // validate arguments:\r\n            if (iptcblock == null)\r\n                return null;\r\n\r\n            // parse IPTC block:\r\n            uint inx = 0, len;\r\n            var buffer = iptcblock.ReadonlyData;\r\n\r\n            // find 1st tag:\r\n            for (; inx < buffer.Length; ++inx)\r\n            {\r\n                if ((buffer[inx] == 0x1c) && ((buffer[inx + 1] == 0x01) || (buffer[inx + 1] == 0x02)))\r\n                    break;\r\n            }\r\n\r\n            PhpArray result = null;\r\n\r\n            // search for IPTC items:\r\n            while (inx < buffer.Length)\r\n            {\r\n                if (buffer[inx++] != 0x1c)\r\n                    break;   // we ran against some data which does not conform to IPTC - stop parsing!\r\n\r\n                if ((inx + 4) >= buffer.Length)\r\n                    break;\r\n\r\n                // data, recnum:\r\n                byte dataset = buffer[inx++];\r\n                byte recnum = buffer[inx++];\r\n\r\n                // len:\r\n                if ((buffer[inx] & (byte)0x80) != 0)\r\n                { // long tag\r\n                    len = (((uint)buffer[inx + 2]) << 24) | (((uint)buffer[inx + 3]) << 16) |\r\n                          (((uint)buffer[inx + 4]) << 8) | (((uint)buffer[inx + 5]));\r\n                    inx += 6;\r\n                }\r\n                else\r\n                { // short tag\r\n                    len = (((uint)buffer[inx + 0]) << 8) | (((uint)buffer[inx + 1]));\r\n                    inx += 2;\r\n                }\r\n\r\n                if ((len > buffer.Length) || (inx + len) > buffer.Length)\r\n                    break;\r\n\r\n                // snprintf(key, sizeof(key), \"%d#%03d\", (unsigned int) dataset, (unsigned int) recnum);\r\n                string key = string.Format(\"{0}#{1}\", dataset, recnum.ToString(\"D3\"));\r\n\r\n                // create result array lazily:\r\n                if (result == null)\r\n                    result = new PhpArray();\r\n\r\n                // parse out the data (buffer+inx)[len]:\r\n                var data = new PhpBytes(new byte[len]);\r\n                Buffer.BlockCopy(buffer, (int)inx, data.Data, 0, (int)len);\r\n\r\n                // add data into result[key][]:\r\n                PhpArray values = result[key] as PhpArray;\r\n                if (values != null)\r\n                    values.Add(data);\r\n                else\r\n                    result[key] = new PhpArray(2) { data };\r\n\r\n                //\r\n                inx += len;\r\n            }\r\n\r\n            //\r\n            return result;  // null if no items were found\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region iptcembed (NS)\r\n\r\n        /// <summary>\r\n        /// Embeds binary IPTC data into a JPEG image.\r\n        /// </summary>\r\n        /// <param name=\"iptcdata\">The data to be written.</param>\r\n        /// <param name=\"jpeg_file_name\">Path to the JPEG image.</param>\r\n        /// <returns>If success and spool flag is lower than 2 then the JPEG will not be returned as a string, FALSE on errors.</returns>\r\n        [ImplementsFunction(\"iptcembed\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static object iptcembed(PhpBytes iptcdata, string jpeg_file_name)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Embeds binary IPTC data into a JPEG image.\r\n        /// </summary>\r\n        /// <param name=\"iptcdata\">The data to be written.</param>\r\n        /// <param name=\"jpeg_file_name\">Path to the JPEG image.</param>\r\n        /// <param name=\"spool\">Spool flag. If the spool flag is over 2 then the JPEG will be returned as a string.</param>\r\n        /// <returns>If success and spool flag is lower than 2 then the JPEG will not be returned as a string, FALSE on errors.</returns>\r\n        [ImplementsFunction(\"iptcembed\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static object iptcembed(PhpBytes iptcdata, string jpeg_file_name, int spool)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region image_type_to_extension\r\n\r\n        /// <summary>\r\n        /// Get file extension for image type\r\n        /// </summary> \r\n        [ImplementsFunction(\"image_type_to_extension\")]\r\n        [return: CastToFalse]\r\n        public static string image_type_to_extension(int imagetype)\r\n        {\r\n            return image_type_to_extension(imagetype, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get file extension for image type\r\n        /// </summary> \r\n        [ImplementsFunction(\"image_type_to_extension\")]\r\n        [return: CastToFalse]\r\n        public static string image_type_to_extension(int imagetype, bool include_dot)\r\n        {\r\n            string extension;\r\n\r\n            switch (imagetype)\r\n            {\r\n                case (int)ImageType.GIF:\r\n                    extension = \"gif\";\r\n                    break;\r\n                case (int)ImageType.JPEG:\r\n                    extension = \"jpeg\";\r\n                    break;\r\n                case (int)ImageType.PNG:\r\n                    extension = \"png\";\r\n                    break;\r\n                case (int)ImageType.SWF:\r\n                    extension = \"swf\";\r\n                    break;\r\n                case (int)ImageType.PSD:\r\n                    extension = \"psd\";\r\n                    break;\r\n                case (int)ImageType.BMP:\r\n                    extension = \"bmp\";\r\n                    break;\r\n                case (int)ImageType.TIFF_II:\r\n                    extension = \"tiff\";\r\n                    break;\r\n                case (int)ImageType.TIFF_MM:\r\n                    extension = \"tiff\";\r\n                    break;\r\n                case (int)ImageType.JPC:\r\n                    extension = \"jpc\";\r\n                    break;\r\n                case (int)ImageType.JP2:\r\n                    extension = \"jp2\";\r\n                    break;\r\n                case (int)ImageType.JPX:\r\n                    extension = \"jpx\";\r\n                    break;\r\n                case (int)ImageType.JB2:\r\n                    extension = \"jb2\";\r\n                    break;\r\n                case (int)ImageType.SWC:\r\n                    extension = \"swc\";\r\n                    break;\r\n                case (int)ImageType.IFF:\r\n                    extension = \"iff\";\r\n                    break;\r\n                case (int)ImageType.WBMP:\r\n                    extension = \"wbmp\";\r\n                    break;\r\n                case (int)ImageType.XBM:\r\n                    extension = \"xbm\";\r\n                    break;\r\n                case (int)ImageType.ICO:\r\n                    extension = \"ico\";\r\n                    break;\r\n                default:\r\n                    return null;\r\n            }\r\n\r\n            return include_dot ? (\".\" + extension) : (extension);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region image_type_to_mime_type\r\n\r\n        /// <summary>\r\n        /// Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\r\n        /// </summary> \r\n        [ImplementsFunction(\"image_type_to_mime_type\")]\r\n        [return: CastToFalse]\r\n        public static string image_type_to_mime_type(int imagetype)\r\n        {\r\n            switch ((ImageType)imagetype)\r\n            {\r\n                case ImageType.GIF:\r\n                    return \"image/gif\";\r\n\r\n                case ImageType.JPEG:\r\n                    return \"image/jpeg\";\r\n\r\n                case ImageType.PNG:\r\n                    return \"image/png\";\r\n\r\n                case ImageType.SWF:\r\n                    return \"application/x-shockwave-flash\";\r\n\r\n                case ImageType.PSD:\r\n                    return \"image/psd\";\r\n\r\n                case ImageType.BMP:\r\n                    return \"image/x-ms-bmp\";\r\n\r\n                case ImageType.TIFF_II:\r\n                    return \"image/tiff\";\r\n\r\n                case ImageType.TIFF_MM:\r\n                    return \"image/tiff\";\r\n\r\n                case ImageType.JPC:\r\n                    return \"application/octet-stream\";\r\n\r\n                case ImageType.JP2:\r\n                    return \"image/jp2\";\r\n\r\n                case ImageType.JPX:\r\n                    return \"application/octet-stream\";\r\n\r\n                case ImageType.JB2:\r\n                    return \"application/octet-stream\";\r\n\r\n                case ImageType.SWC:\r\n                    return \"application/x-shockwave-flash\";\r\n\r\n                case ImageType.IFF:\r\n                    return \"image/iff\";\r\n\r\n                case ImageType.WBMP:\r\n                    return \"image/vnd.wap.wbmp\";\r\n\r\n                case ImageType.XBM:\r\n                    return \"image/xbm\";\r\n\r\n                case ImageType.ICO:\r\n                    return \"image/vnd.microsoft.icon\";\r\n\r\n                default:\r\n                    return \"application/octet-stream\"; // suppose binary format\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger Gd2\")]\r\n[assembly: AssemblyDescription(\"Phalanger Gd2 Extension\")]\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"2f442039-59e5-498b-918e-14824b80ca10\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Gd2.GdLibraryDescriptor), \"Gd\", new string[] { \"image\", \"gd\", \"exif\" })]"
  },
  {
    "path": "Source/Extensions/Gd2/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.237\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library.Gd2.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Gd2.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Empty string or invalid image.\r\n        /// </summary>\r\n        internal static string empty_string_or_invalid_image {\r\n            get {\r\n                return ResourceManager.GetString(\"empty_string_or_invalid_image\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string failed_to_open_http_stream {\r\n            get {\r\n                return ResourceManager.GetString(\"failed_to_open_http_stream\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to failed to open stream: No such file or directory &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string failed_to_open_stream {\r\n            get {\r\n                return ResourceManager.GetString(\"failed_to_open_stream\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to File &apos;{0}&apos; not supported.\r\n        /// </summary>\r\n        internal static string file_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"file_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Filename cannot be empty.\r\n        /// </summary>\r\n        internal static string filename_cannot_be_empty {\r\n            get {\r\n                return ResourceManager.GetString(\"filename_cannot_be_empty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to supplied argument is not a valid Image resource.\r\n        /// </summary>\r\n        internal static string image_resource_not_valid {\r\n            get {\r\n                return ResourceManager.GetString(\"image_resource_not_valid\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid font filename &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string invalid_font_filename {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_font_filename\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid image dimensions.\r\n        /// </summary>\r\n        internal static string invalid_image_dimensions {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_image_dimensions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to You must give a positive number of points.\r\n        /// </summary>\r\n        internal static string must_be_positive_number_of_points {\r\n            get {\r\n                return ResourceManager.GetString(\"must_be_positive_number_of_points\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a valid PNG file.\r\n        /// </summary>\r\n        internal static string not_valid_png {\r\n            get {\r\n                return ResourceManager.GetString(\"not_valid_png\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to PNG file corrupted by ASCII conversion.\r\n        /// </summary>\r\n        internal static string png_corrupted {\r\n            get {\r\n                return ResourceManager.GetString(\"png_corrupted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Read error!.\r\n        /// </summary>\r\n        internal static string read_error {\r\n            get {\r\n                return ResourceManager.GetString(\"read_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to open file &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string unable_to_open_file {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_open_file\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"empty_string_or_invalid_image\" xml:space=\"preserve\">\r\n    <value>Empty string or invalid image</value>\r\n  </data>\r\n  <data name=\"failed_to_open_http_stream\" xml:space=\"preserve\">\r\n    <value>failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found '{0}'</value>\r\n  </data>\r\n  <data name=\"failed_to_open_stream\" xml:space=\"preserve\">\r\n    <value>failed to open stream: No such file or directory '{0}'</value>\r\n  </data>\r\n  <data name=\"filename_cannot_be_empty\" xml:space=\"preserve\">\r\n    <value>Filename cannot be empty</value>\r\n  </data>\r\n  <data name=\"file_not_supported\" xml:space=\"preserve\">\r\n    <value>File '{0}' not supported</value>\r\n  </data>\r\n  <data name=\"image_resource_not_valid\" xml:space=\"preserve\">\r\n    <value>supplied argument is not a valid Image resource</value>\r\n  </data>\r\n  <data name=\"invalid_font_filename\" xml:space=\"preserve\">\r\n    <value>Invalid font filename '{0}'</value>\r\n  </data>\r\n  <data name=\"invalid_image_dimensions\" xml:space=\"preserve\">\r\n    <value>Invalid image dimensions</value>\r\n  </data>\r\n  <data name=\"not_valid_png\" xml:space=\"preserve\">\r\n    <value>'{0}' is not a valid PNG file</value>\r\n  </data>\r\n  <data name=\"read_error\" xml:space=\"preserve\">\r\n    <value>Read error!</value>\r\n  </data>\r\n  <data name=\"unable_to_open_file\" xml:space=\"preserve\">\r\n    <value>Unable to open file '{0}'</value>\r\n  </data>\r\n  <data name=\"must_be_positive_number_of_points\" xml:space=\"preserve\">\r\n    <value>You must give a positive number of points</value>\r\n  </data>\r\n  <data name=\"png_corrupted\" xml:space=\"preserve\">\r\n    <value>PNG file corrupted by ASCII conversion</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Extensions/Gd2/Utils.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Resources;\r\nusing System.Reflection;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Gd2\r\n{\r\n    internal static class Utils\r\n    {\r\n        /// <summary>\r\n        /// Assembly's resources.\r\n        /// </summary>\r\n        internal static readonly ResourceManager Resources = new ResourceManager(\"PHP.Library.Gd2.Properties.Resources\", Assembly.GetExecutingAssembly());\r\n\r\n        /// <summary>\r\n        /// Open stream using working directory and PHP include directories.\r\n        /// </summary>\r\n        /// <param name=\"filename\"></param>\r\n        /// <returns></returns>\r\n        internal static System.IO.Stream OpenStream(string filename)\r\n        {\r\n            PhpStream stream = PhpStream.Open(filename, \"rb\", StreamOpenOptions.Empty, StreamContext.Default);\r\n            if (stream == null)\r\n                return null;\r\n\r\n            return stream.RawStream;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads PhpBytes from file using the PhpStream.\r\n        /// </summary>\r\n        /// <param name=\"filename\"></param>\r\n        /// <returns></returns>\r\n        internal static PhpBytes ReadPhpBytes(string filename)\r\n        {\r\n            PhpBytes bytes;\r\n\r\n            using (PhpStream stream = PhpStream.Open(filename, \"rb\", StreamOpenOptions.Empty, StreamContext.Default))\r\n            {\r\n                if (stream == null)\r\n                    return null;\r\n\r\n                try\r\n                {\r\n                    bytes = PhpStream.AsBinary(stream.ReadContents());\r\n                    if (bytes == null || bytes.IsEmpty())\r\n                        return null;\r\n                }\r\n                catch\r\n                {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            return bytes;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests if specified portions of two byte arrays are equal\r\n        /// </summary>\r\n        /// <param name=\"array1\">First array. Cannot be <c>null</c> reference.</param>\r\n        /// <param name=\"array2\">Second array. Cannot be <c>null</c> reference.</param>\r\n        /// <param name=\"length\">Amount of bytes to compare.</param>\r\n        /// <returns>returns true if both arrays are equal</returns>\r\n        internal static bool ByteArrayCompare(byte[]/*!*/array1, byte[]/*!*/array2, int length)\r\n        {\r\n            //int max = (array1.Length > array2.Length) ? array1.Length : array2.Length;\r\n\r\n            Debug.Assert(array1 != null);\r\n            Debug.Assert(array2 != null);\r\n\r\n            if (array1.Length < length || array2.Length < length)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            try\r\n            {\r\n                for (int i = 0; i < length; i++)\r\n                {\r\n                    if (array1[i] != array2[i])\r\n                        return false;\r\n                }\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Gd2/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetCd2\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Gd2/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet>\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetGd2\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/GetText/Configuration.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.GetText\r\n{\r\n    #region Local Configuration\r\n\r\n    /// <summary>\r\n    /// Script independent mbstring configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class GetTextLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal GetTextLocalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (GetTextLocalConfig)this.MemberwiseClone();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Global Configuration\r\n\r\n    /// <summary>\r\n    /// Script dependent MSSQL configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class GetTextGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal GetTextGlobalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <param name=\"value\"></param>\r\n        /// <param name=\"node\"></param>\r\n        /// <returns></returns>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (GetTextGlobalConfig)this.MemberwiseClone();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// mbstring extension configuration.\r\n    /// </summary>\r\n    public static class GetTextConfiguration\r\n    {\r\n        #region Legacy Configuration\r\n\r\n        /// <summary>\r\n        /// Gets, sets, or restores a value of a legacy configuration option.\r\n        /// </summary>\r\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n        {\r\n            GetTextLocalConfig local = (GetTextLocalConfig)config.GetLibraryConfig(GetTextLibraryDescriptor.Singleton);\r\n            GetTextLocalConfig @default = DefaultLocal;\r\n            GetTextGlobalConfig global = Global;\r\n\r\n            //switch (option)\r\n            //{\r\n            //// local:\r\n\r\n            //case \"mssql.connect_timeout\":\r\n            //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n            //case \"mssql.timeout\":\r\n            //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n            //case \"mssql.batchsize\":\r\n            //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n            //// global:  \r\n\r\n            //case \"mssql.max_links\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n            //case \"mssql.secure_connection\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n            //}\r\n\r\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes MySql legacy options and their values to XML text stream.\r\n        /// Skips options whose values are the same as default values of Phalanger.\r\n        /// </summary>\r\n        /// <param name=\"writer\">XML writer.</param>\r\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n        {\r\n            if (writer == null)\r\n                throw new ArgumentNullException(\"writer\");\r\n            if (options == null)\r\n                throw new ArgumentNullException(\"options\");\r\n\r\n            GetTextLocalConfig local = new GetTextLocalConfig();\r\n            GetTextGlobalConfig global = new GetTextGlobalConfig();\r\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            //ow.StartSection(\"gd2\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n            //ow.WriteEnd();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers legacy ini-options.\r\n        /// </summary>\r\n        internal static void RegisterLegacyOptions()\r\n        {\r\n            //const string s = MbstringLibraryDescriptor.ExtensionName;\r\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Configuration Getters\r\n\r\n        /// <summary>\r\n        /// Gets the library configuration associated with the current script context.\r\n        /// </summary>\r\n        public static GetTextLocalConfig Local\r\n        {\r\n            get\r\n            {\r\n                return (GetTextLocalConfig)PHP.Core.Configuration.Local.GetLibraryConfig(GetTextLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the default library configuration.\r\n        /// </summary>\r\n        public static GetTextLocalConfig DefaultLocal\r\n        {\r\n            get\r\n            {\r\n                return (GetTextLocalConfig)PHP.Core.Configuration.DefaultLocal.GetLibraryConfig(GetTextLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the global library configuration.\r\n        /// </summary>\r\n        public static GetTextGlobalConfig Global\r\n        {\r\n            get\r\n            {\r\n                return (GetTextGlobalConfig)PHP.Core.Configuration.Global.GetLibraryConfig(GetTextLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets local configuration associated with a specified script context.\r\n        /// </summary>\r\n        /// <param name=\"context\">Scritp context.</param>\r\n        /// <returns>Local library configuration.</returns>\r\n        public static GetTextLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n        {\r\n            if (context == null)\r\n                throw new ArgumentNullException(\"context\");\r\n\r\n            return (GetTextLocalConfig)context.Config.GetLibraryConfig(GetTextLibraryDescriptor.Singleton);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/Extension.GetText.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{16622C0F-AC63-4DB3-A9D6-D85195BE8C3D}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.GetText</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.GetText</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"GetTextSharp\\DatabaseResourceManager.cs\" />\r\n    <Compile Include=\"GetTextSharp\\DatabaseResourceReader.cs\" />\r\n    <Compile Include=\"GetTextSharp\\DatabaseResourceSet.cs\" />\r\n    <Compile Include=\"GetTextSharp\\DictionaryGettextParserRequestor.cs\" />\r\n    <Compile Include=\"GetTextSharp\\FileBasedResourceManager.cs\" />\r\n    <Compile Include=\"GetTextSharp\\GettextResourceManager.cs\" />\r\n    <Compile Include=\"GetTextSharp\\GettextResourceReader.cs\" />\r\n    <Compile Include=\"GetTextSharp\\GettextResourceSet.cs\" />\r\n    <Compile Include=\"GetTextSharp\\IGettextResourceRequestor.cs\" />\r\n    <Compile Include=\"GetTextSharp\\PoParser.cs\" />\r\n    <Compile Include=\"PhpGetText.cs\" />\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <None Include=\"Extension.GetText.nuspec\" />\r\n    <None Include=\"web.config.install.xdt\" />\r\n    <None Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Source/Extensions/GetText/Extension.GetText.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger Extension GetText translation internationalization i18n localization l10n</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/DatabaseResourceManager.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Configuration;\r\nusing System.Globalization;\r\nusing System.Resources;\r\nusing System.Threading;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class DatabaseResourceManager : ResourceManager\r\n    {\r\n        private string dsn;\r\n        private string sp;\r\n        public DatabaseResourceManager()\r\n        {\r\n            this.dsn = (ConfigurationManager.AppSettings[\"Gettext.ConnectionString\"] ?? ConfigurationManager.ConnectionStrings[\"Gettext\"].ConnectionString);\r\n            this.ResourceSets = new Hashtable();\r\n        }\r\n        public DatabaseResourceManager(string storedProcedure)\r\n            : this()\r\n        {\r\n            this.sp = storedProcedure;\r\n        }\r\n        public DatabaseResourceManager(string name, string path, string fileformat)\r\n            : this()\r\n        {\r\n        }\r\n        protected override ResourceSet InternalGetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents)\r\n        {\r\n            DatabaseResourceSet databaseResourceSet = null;\r\n            if (this.ResourceSets.Contains(culture.Name))\r\n            {\r\n                databaseResourceSet = (this.ResourceSets[culture.Name] as DatabaseResourceSet);\r\n            }\r\n            else\r\n            {\r\n                Hashtable resourceSets;\r\n                Monitor.Enter(resourceSets = this.ResourceSets);\r\n                try\r\n                {\r\n                    if (this.ResourceSets.Contains(culture.Name))\r\n                    {\r\n                        databaseResourceSet = (this.ResourceSets[culture.Name] as DatabaseResourceSet);\r\n                    }\r\n                    else\r\n                    {\r\n                        databaseResourceSet = new DatabaseResourceSet(this.dsn, culture, this.sp);\r\n                        this.ResourceSets.Add(culture.Name, databaseResourceSet);\r\n                    }\r\n                }\r\n                finally\r\n                {\r\n                    Monitor.Exit(resourceSets);\r\n                }\r\n            }\r\n            return databaseResourceSet;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/DatabaseResourceReader.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Configuration;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Globalization;\r\nusing System.Resources;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class DatabaseResourceReader : IResourceReader, IEnumerable, IDisposable\r\n    {\r\n        private string dsn;\r\n        private string language;\r\n        private string sp;\r\n        public DatabaseResourceReader(string dsn, CultureInfo culture)\r\n        {\r\n            this.dsn = dsn;\r\n            this.language = culture.Name;\r\n        }\r\n        public DatabaseResourceReader(string dsn, CultureInfo culture, string sp)\r\n        {\r\n            this.sp = sp;\r\n            this.dsn = dsn;\r\n            this.language = culture.Name;\r\n        }\r\n        public IDictionaryEnumerator GetEnumerator()\r\n        {\r\n            Hashtable hashtable = new Hashtable();\r\n            SqlConnection sqlConnection = new SqlConnection(this.dsn);\r\n            SqlCommand sqlCommand = sqlConnection.CreateCommand();\r\n            if (this.language == \"\")\r\n            {\r\n                this.language = CultureInfo.InvariantCulture.Name;\r\n            }\r\n            if (this.sp == null)\r\n            {\r\n                sqlCommand.CommandText = string.Format(\"SELECT MessageKey, MessageValue FROM Message WHERE Culture = '{0}'\", this.language);\r\n            }\r\n            else\r\n            {\r\n                sqlCommand.CommandText = this.sp;\r\n                sqlCommand.CommandType = CommandType.StoredProcedure;\r\n                sqlCommand.Parameters.AddWithValue(\"@culture\", this.language);\r\n            }\r\n            try\r\n            {\r\n                sqlConnection.Open();\r\n                using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())\r\n                {\r\n                    while (sqlDataReader.Read())\r\n                    {\r\n                        if (sqlDataReader.GetValue(1) != DBNull.Value)\r\n                        {\r\n                            hashtable[sqlDataReader.GetString(0)] = sqlDataReader.GetString(1);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            catch\r\n            {\r\n                bool flag = false;\r\n                if (bool.TryParse(ConfigurationManager.AppSettings[\"Gettext.Throw\"], out flag) && flag)\r\n                {\r\n                    throw;\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                sqlConnection.Close();\r\n            }\r\n            return hashtable.GetEnumerator();\r\n        }\r\n        public void Close()\r\n        {\r\n        }\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return this.GetEnumerator();\r\n        }\r\n        void IDisposable.Dispose()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/DatabaseResourceSet.cs",
    "content": "﻿using System;\r\nusing System.Globalization;\r\nusing System.Resources;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class DatabaseResourceSet : ResourceSet\r\n    {\r\n        internal DatabaseResourceSet(string dsn, CultureInfo culture)\r\n            : base(new DatabaseResourceReader(dsn, culture))\r\n        {\r\n        }\r\n        internal DatabaseResourceSet(string dsn, CultureInfo culture, string sp)\r\n            : base(new DatabaseResourceReader(dsn, culture, sp))\r\n        {\r\n        }\r\n        public override Type GetDefaultReader()\r\n        {\r\n            return typeof(DatabaseResourceReader);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/DictionaryGettextParserRequestor.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class DictionaryGettextParserRequestor : Dictionary<string, string>, IGettextParserRequestor\r\n    {\r\n        public void Handle(string key, string value)\r\n        {\r\n            base[key] = value;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/FileBasedResourceManager.cs",
    "content": "﻿/*\r\n * gettext-cs-utils\r\n *\r\n * Copyright 2011 Manas Technology Solutions \r\n * http://www.manas.com.ar/\r\n * \r\n * This library is free software; you can redistribute it and/or\r\n * modify it under the terms of the GNU Lesser General Public\r\n * License as published by the Free Software Foundation; either \r\n * version 2.1 of the License, or (at your option) any later version.\r\n * \r\n * This library is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n * Lesser General Public License for more details.\r\n * \r\n * You should have received a copy of the GNU Lesser General Public \r\n * License along with this library.  If not, see <http://www.gnu.org/licenses/>.\r\n * \r\n */\r\n﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Globalization;\r\nusing System.Reflection;\r\nusing System.IO;\r\nusing System.Collections;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    /// <summary>\r\n    /// Extendable file based resource manager.\r\n    /// </summary>\r\n    public class FileBasedResourceManager : System.Resources.ResourceManager\r\n    {\r\n        #region Properties\r\n\r\n        string path;\r\n        string fileformat;\r\n\r\n        /// <summary>\r\n        /// Path to retrieve the files from.\r\n        /// </summary>\r\n        public string Path\r\n        {\r\n            get { return path; }\r\n            set { path = value; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Format of the resource set po file based on {{culture}} and {{resource}} placeholders.\r\n        /// </summary>\r\n        public string FileFormat\r\n        {\r\n            get { return fileformat; }\r\n            set { fileformat = value; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Notification Events\r\n\r\n        /// <summary>\r\n        /// Arguments for events related to the creation, successful or not, of a resource set.\r\n        /// </summary>\r\n        public class ResourceSetCreationEventArgs : EventArgs\r\n        {\r\n            /// <summary>\r\n            /// Exception in case of error, null on success.\r\n            /// </summary>\r\n            public Exception Exception { get; set; }\r\n\r\n            /// <summary>\r\n            /// FileName from where the resource set was loaded.\r\n            /// </summary>\r\n            public String FileName { get; set; }\r\n\r\n            /// <summary>\r\n            /// Type of the resource set being initialized.\r\n            /// </summary>\r\n            public Type ResourceSetType { get; set; }\r\n\r\n            /// <summary>\r\n            /// Instance of the resource set created, may be null on error.\r\n            /// </summary>\r\n            public System.Resources.ResourceSet ResourceSet { get; set; }\r\n\r\n            /// <summary>\r\n            /// Whether the creation was successful.\r\n            /// </summary>\r\n            public bool Success { get; set; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Event that notifies the successful creation of a resource set.\r\n        /// </summary>\r\n        public event EventHandler<ResourceSetCreationEventArgs> CreatedResourceSet;\r\n\r\n        /// <summary>\r\n        /// Event that notifies an error creating a resource set.\r\n        /// </summary>\r\n        public event EventHandler<ResourceSetCreationEventArgs> FailedResourceSet;\r\n\r\n        protected void RaiseCreatedResourceSet(string filename, System.Resources.ResourceSet set)\r\n        {\r\n            var handler = CreatedResourceSet;\r\n            if (handler != null)\r\n            {\r\n                handler(this, new ResourceSetCreationEventArgs\r\n                {\r\n                    FileName = filename,\r\n                    ResourceSet = set,\r\n                    ResourceSetType = this.ResourceSetType,\r\n                    Success = true\r\n                });\r\n            }\r\n        }\r\n\r\n        protected void RaiseFailedResourceSet(string filename, Exception ex)\r\n        {\r\n            var handler = FailedResourceSet;\r\n            if (handler != null)\r\n            {\r\n                handler(this, new ResourceSetCreationEventArgs\r\n                {\r\n                    FileName = filename,\r\n                    ResourceSet = null,\r\n                    ResourceSetType = this.ResourceSetType,\r\n                    Success = false,\r\n                    Exception = ex\r\n                });\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Creates a new instance.\r\n        /// </summary>\r\n        /// <param name=\"name\">Name of the resource</param>\r\n        /// <param name=\"path\">Path to retrieve the files from</param>\r\n        /// <param name=\"fileformat\">Format of the file name using {{resource}} and {{culture}} placeholders.</param>\r\n        public FileBasedResourceManager(string name, string path, string fileformat)\r\n            : base()\r\n        {\r\n            this.path = path;\r\n            this.fileformat = fileformat;\r\n            this.BaseNameField = name;\r\n\r\n            base.IgnoreCase = false;\r\n            base.ResourceSets = new System.Collections.Hashtable();\r\n        }\r\n\r\n        protected override string GetResourceFileName(System.Globalization.CultureInfo culture)\r\n        {\r\n            return fileformat.Replace(\"{{culture}}\", culture.Name).Replace(\"{{resource}}\", BaseNameField);\r\n        }\r\n\r\n        protected override System.Resources.ResourceSet InternalGetResourceSet(System.Globalization.CultureInfo culture, bool createIfNotExists, bool tryParents)\r\n        {\r\n            if (path == null && fileformat == null) return null;\r\n            if (culture == null || culture.Equals(CultureInfo.InvariantCulture)) return null;\r\n\r\n            System.Resources.ResourceSet rs = null;\r\n            Hashtable resourceSets = this.ResourceSets;\r\n\r\n            if (!TryFetchResourceSet(resourceSets, culture, out rs))\r\n            {\r\n                string resourceFileName = this.FindResourceFile(culture);\r\n                if (resourceFileName == null)\r\n                {\r\n                    if (tryParents)\r\n                    {\r\n                        CultureInfo parent = culture.Parent;\r\n                        rs = this.InternalGetResourceSet(parent, createIfNotExists, tryParents);\r\n                        AddResourceSet(resourceSets, culture, ref rs);\r\n                        return rs;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    rs = this.CreateResourceSet(resourceFileName);\r\n                    AddResourceSet(resourceSets, culture, ref rs);\r\n                    return rs;\r\n                }\r\n            }\r\n\r\n            return rs;\r\n        }\r\n\r\n        protected virtual System.Resources.ResourceSet InternalCreateResourceSet(string resourceFileName)\r\n        {\r\n            object[] args = new object[] { resourceFileName };\r\n            return (System.Resources.ResourceSet)Activator.CreateInstance(this.ResourceSetType, args);\r\n        }\r\n\r\n        private System.Resources.ResourceSet CreateResourceSet(string resourceFileName)\r\n        {\r\n            System.Resources.ResourceSet set = null;\r\n\r\n            try\r\n            {\r\n                set = InternalCreateResourceSet(resourceFileName);\r\n                RaiseCreatedResourceSet(resourceFileName, set);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                RaiseFailedResourceSet(resourceFileName, ex);\r\n            }\r\n\r\n            return set;\r\n        }\r\n\r\n        private string FindResourceFile(CultureInfo culture)\r\n        {\r\n            string resourceFileName = this.GetResourceFileName(culture);\r\n            string path = this.path ?? String.Empty;\r\n\r\n            // Try with simple path + filename combination\r\n            string fullpath = System.IO.Path.Combine(path, resourceFileName);\r\n            if (File.Exists(fullpath)) return fullpath;\r\n\r\n            // If path is relative, attempt different directories\r\n            if (path == String.Empty || !System.IO.Path.IsPathRooted(path))\r\n            {\r\n                // Try the entry assembly dir\r\n                if (Assembly.GetEntryAssembly() != null)\r\n                {\r\n                    string dir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), path);\r\n                    fullpath = System.IO.Path.Combine(dir, resourceFileName);\r\n                    if (File.Exists(fullpath)) return fullpath;\r\n                }\r\n\r\n                // Else try the executing assembly dir\r\n                if (Assembly.GetExecutingAssembly() != null)\r\n                {\r\n                    if (Assembly.GetEntryAssembly() == null || System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) != System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))\r\n                    {\r\n                        string dir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path);\r\n                        fullpath = System.IO.Path.Combine(dir, resourceFileName);\r\n                        if (File.Exists(fullpath)) return fullpath;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private void AddResourceSet(Hashtable localResourceSets, CultureInfo culture, ref System.Resources.ResourceSet rs)\r\n        {\r\n            lock (localResourceSets)\r\n            {\r\n                if (localResourceSets.Contains(culture))\r\n                {\r\n                    var existing = (System.Resources.ResourceSet)localResourceSets[culture];\r\n\r\n                    if (existing != null && !object.Equals(existing, rs))\r\n                    {\r\n                        rs.Dispose();\r\n                        rs = existing;\r\n                        var a = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection(\"appSettings\");\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    localResourceSets.Add(culture, rs);\r\n                }\r\n            }\r\n        }\r\n\r\n        private bool TryFetchResourceSet(Hashtable localResourceSets, CultureInfo culture, out System.Resources.ResourceSet set)\r\n        {\r\n            lock (localResourceSets)\r\n            {\r\n                if (ResourceSets.Contains(culture))\r\n                {\r\n                    set = (System.Resources.ResourceSet)ResourceSets[culture];\r\n                    return true;\r\n                }\r\n\r\n                set = null;\r\n                return false;\r\n            }\r\n        }\r\n\r\n        private bool ValidateGetResourceSet(CultureInfo culture)\r\n        {\r\n            return !(culture == null || culture.Equals(CultureInfo.InvariantCulture) || String.IsNullOrEmpty(culture.Name));\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/GettextResourceManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.Specialized;\r\nusing System.Configuration;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class GettextResourceManager : FileBasedResourceManager\r\n    {\r\n        private const string defaultFileFormat = \"{{culture}}\\\\{{resource}}.po\";\r\n        private const string defaultPath = \"\";\r\n        public override Type ResourceSetType\r\n        {\r\n            get\r\n            {\r\n                return typeof(GettextResourceSet);\r\n            }\r\n        }\r\n        public GettextResourceManager(string name, string path, string fileformat)\r\n            : base(name, path, fileformat)\r\n        {\r\n        }\r\n        public GettextResourceManager(string name)\r\n            : base(name, \"\", \"{{culture}}\\\\{{resource}}.po\")\r\n        {\r\n        }\r\n        public bool LoadConfiguration(string section)\r\n        {\r\n            NameValueCollection nameValueCollection = ConfigurationManager.GetSection(section) as NameValueCollection;\r\n            if (nameValueCollection == null)\r\n            {\r\n                return false;\r\n            }\r\n            base.FileFormat = (nameValueCollection[\"fileformat\"] ?? base.FileFormat);\r\n            base.Path = (nameValueCollection[\"path\"] ?? base.Path);\r\n            return true;\r\n        }\r\n        public static FileBasedResourceManager CreateFromConfiguration(string name, string section)\r\n        {\r\n            return GettextResourceManager.CreateFromConfiguration(name, section, \"{{culture}}\\\\{{resource}}.po\", \"\");\r\n        }\r\n        public static FileBasedResourceManager CreateFromConfiguration(string name, string section, string fallbackFileFormat, string fallbackPath)\r\n        {\r\n            NameValueCollection nameValueCollection = ConfigurationManager.GetSection(section) as NameValueCollection;\r\n            string fileformat = null;\r\n            string path = null;\r\n            if (nameValueCollection == null)\r\n            {\r\n                fileformat = fallbackFileFormat;\r\n                path = fallbackPath;\r\n            }\r\n            else\r\n            {\r\n                fileformat = (nameValueCollection[\"fileformat\"] ?? fallbackFileFormat);\r\n                path = (nameValueCollection[\"path\"] ?? fallbackPath);\r\n            }\r\n            return new FileBasedResourceManager(name, path, fileformat);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/GettextResourceReader.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.IO;\r\nusing System.Resources;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class GettextResourceReader : IResourceReader, IEnumerable, IDisposable\r\n    {\r\n        private Stream stream;\r\n        public GettextResourceReader(Stream stream)\r\n        {\r\n            this.stream = stream;\r\n        }\r\n        public void Close()\r\n        {\r\n            if (this.stream != null)\r\n            {\r\n                this.stream.Close();\r\n            }\r\n        }\r\n        public IDictionaryEnumerator GetEnumerator()\r\n        {\r\n            if (this.stream == null)\r\n            {\r\n                throw new ArgumentNullException(\"Input stream cannot be null\");\r\n            }\r\n            IDictionaryEnumerator result;\r\n            using (StreamReader streamReader = new StreamReader(this.stream))\r\n            {\r\n                result = new PoParser().ParseIntoDictionary(streamReader).GetEnumerator();\r\n            }\r\n            return result;\r\n        }\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return this.GetEnumerator();\r\n        }\r\n        public void Dispose()\r\n        {\r\n            if (this.stream != null)\r\n            {\r\n                this.stream.Dispose();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/GettextResourceSet.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Resources;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class GettextResourceSet : ResourceSet\r\n    {\r\n        public GettextResourceSet(string filename)\r\n            : base(new GettextResourceReader(File.OpenRead(filename)))\r\n        {\r\n        }\r\n        public GettextResourceSet(Stream stream)\r\n            : base(new GettextResourceReader(stream))\r\n        {\r\n        }\r\n        public override Type GetDefaultReader()\r\n        {\r\n            return typeof(GettextResourceReader);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/IGettextResourceRequestor.cs",
    "content": "﻿using System;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public interface IGettextParserRequestor\r\n    {\r\n        void Handle(string key, string value);\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/GetTextSharp/PoParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.GetText.GetTextSharp\r\n{\r\n    public class PoParser\r\n    {\r\n        public void Parse(TextReader reader, IGettextParserRequestor requestor)\r\n        {\r\n            int num = 1;\r\n            StringBuilder stringBuilder = null;\r\n            StringBuilder stringBuilder2 = null;\r\n            while (true)\r\n            {\r\n                string text = reader.ReadLine();\r\n                text = ((text == null) ? null : text.Trim());\r\n                if (text == null || text.Length == 0)\r\n                {\r\n                    if (num == 3 && stringBuilder != null && stringBuilder2 != null)\r\n                    {\r\n                        requestor.Handle(stringBuilder.ToString().Replace(\"\\\\n\", \"\\n\"), stringBuilder2.ToString().Replace(\"\\\\n\", \"\\n\"));\r\n                        stringBuilder = null;\r\n                        stringBuilder2 = null;\r\n                    }\r\n                    if (text == null)\r\n                    {\r\n                        break;\r\n                    }\r\n                    num = 1;\r\n                }\r\n                else\r\n                {\r\n                    if (text[0] != '#')\r\n                    {\r\n                        bool flag = text.StartsWith(\"msgid \");\r\n                        bool flag2 = !flag && text.StartsWith(\"msgstr \");\r\n                        if (flag || flag2)\r\n                        {\r\n                            num = (flag ? 2 : 3);\r\n                            int num2 = text.IndexOf('\"');\r\n                            if (num2 != -1)\r\n                            {\r\n                                int num3 = text.IndexOf('\"', num2 + 1);\r\n                                if (num3 != -1)\r\n                                {\r\n                                    string value = text.Substring(num2 + 1, num3 - num2 - 1);\r\n                                    if (flag)\r\n                                    {\r\n                                        stringBuilder = new StringBuilder();\r\n                                        stringBuilder.Append(value);\r\n                                    }\r\n                                    else\r\n                                    {\r\n                                        stringBuilder2 = new StringBuilder();\r\n                                        stringBuilder2.Append(value);\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            if (text[0] == '\"')\r\n                            {\r\n                                if (text[text.Length - 1] == '\"')\r\n                                {\r\n                                    text = text.Substring(1, text.Length - 2);\r\n                                }\r\n                                else\r\n                                {\r\n                                    text = text.Substring(1, text.Length - 1);\r\n                                }\r\n                                switch (num)\r\n                                {\r\n                                    case 2:\r\n                                        {\r\n                                            stringBuilder.Append(text);\r\n                                            break;\r\n                                        }\r\n                                    case 3:\r\n                                        {\r\n                                            stringBuilder2.Append(text);\r\n                                            break;\r\n                                        }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        public void Parse(string text, IGettextParserRequestor requestor)\r\n        {\r\n            this.Parse(new StringReader(text), requestor);\r\n        }\r\n        public Dictionary<string, string> ParseIntoDictionary(TextReader reader)\r\n        {\r\n            DictionaryGettextParserRequestor dictionaryGettextParserRequestor = new DictionaryGettextParserRequestor();\r\n            this.Parse(reader, dictionaryGettextParserRequestor);\r\n            return dictionaryGettextParserRequestor;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/GetText/LibraryDescriptor.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Xml;\r\n\r\nnamespace PHP.Library.GetText\r\n{\r\n    /// <summary>\r\n    /// Describes the class library assembly content and configuration.\r\n    /// </summary>\r\n    public sealed class GetTextLibraryDescriptor : PhpLibraryDescriptor\r\n    {\r\n        /// <summary>\r\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\r\n        /// </summary>\r\n        internal static GetTextLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static GetTextLibraryDescriptor singleton;\r\n\r\n        /// <summary>\r\n        /// Called by the Core after the library is loaded.\r\n        /// </summary>\r\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n        {\r\n            base.Loaded(assemblyAttribute, configStore);\r\n            singleton = this;\r\n            GetTextConfiguration.RegisterLegacyOptions();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a configuration section belonging to the MySql library. \r\n        /// </summary>\r\n        /// <param name=\"result\">A configuration context.</param>\r\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n        /// <returns>Updated configuration context.</returns>\r\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n        {\r\n            // parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (GetTextLocalConfig)result.Local, (GetTextGlobalConfig)result.Global);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates empty library configuration context.\r\n        /// </summary>\r\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n        protected override ConfigContextBase CreateConfigContext()\r\n        {\r\n            return new ConfigContextBase(new GetTextLocalConfig(), new GetTextGlobalConfig());\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/PhpGetText.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\n\r\nusing PHP.Core;\r\nusing PHP.Library.GetText.GetTextSharp;\r\n\r\nnamespace PHP.Library.GetText\r\n{\r\n    /// <summary>\r\n    /// Implements PHP functions provided by gettext extension.\r\n    /// </summary>\r\n    [ImplementsExtension(\"gettext\")]\r\n    public static class PhpGetText\r\n    {\r\n        public static GettextResourceManager manager = null;\r\n\r\n        #region bind_textdomain_codeset\r\n\r\n        /// <summary>\r\n        /// Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"codeset\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"bind_textdomain_codeset\", FunctionImplOptions.NotSupported)]\r\n        public static string bind_textdomain_codeset(string domain, string codeset)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region bindtextdomain\r\n\r\n        /// <summary>\r\n        /// Sets the path for a domain.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"directory\"></param>\r\n        /// <returns>The full pathname for the domain currently being set.</returns>\r\n        [ImplementsFunction(\"bindtextdomain\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static string bindtextdomain(string domain, string directory)\r\n        {\r\n            if (domain.Length == 0)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            directory = Path.GetFullPath(directory);\r\n\r\n            //directory = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, directory);\r\n\r\n            if (!System.IO.Directory.Exists(directory))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            manager = new GettextResourceManager(domain, directory, \"{{resource}}.po\");\r\n\r\n            return directory;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region dcgettext\r\n\r\n        /// <summary>\r\n        /// Overrides the domain for a single lookup.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"message\"></param>\r\n        /// <param name=\"category\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"dcgettext\", FunctionImplOptions.NotSupported)]\r\n        public static string dcgettext(string domain, string message, int category)\r\n        {\r\n            /*string directory;\r\n\r\n            if (manager.Path == null)\r\n            {\r\n                directory = manager.Path;\r\n            }\r\n            else\r\n            {\r\n                directory = Path.Combine(ScriptContext.CurrentContext.WorkingDirectory, \"\");\r\n            }\r\n\r\n            GettextResourceManager tempManager = new GettextResourceManager(domain, directory, \"{{resource}}.po\");\r\n\r\n            tempManager.GetString(message);*/\r\n\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region dcngettext\r\n\r\n        /// <summary>\r\n        /// Plural version of dcgettext.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"msgid1\"></param>\r\n        /// <param name=\"msgid2\"></param>\r\n        /// <param name=\"n\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"dcngettext\", FunctionImplOptions.NotSupported)]\r\n        public static string dcngettext(string domain, string msgid1, string msgid2, int n)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region dgettext\r\n\r\n        /// <summary>\r\n        /// Override the current domain for a single message lookup.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"message\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"dgettext\", FunctionImplOptions.NotSupported)]\r\n        public static string dgettext(string domain, string message)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region dcngettext\r\n\r\n        /// <summary>\r\n        /// Plural version of dgettext.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"msgid1\"></param>\r\n        /// <param name=\"msgid2\"></param>\r\n        /// <param name=\"n\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"dngettext\", FunctionImplOptions.NotSupported)]\r\n        public static string dngettext(string domain, string msgid1, string msgid2, int n)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gettext\r\n\r\n        /// <summary>\r\n        /// Lookup a message in the current domain\r\n        /// </summary>\r\n        /// <param name=\"message\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"gettext\")]\r\n        [return: CastToFalse]\r\n        public static string gettext(string message)\r\n        {\r\n            if (manager == null)\r\n            {\r\n                return message;\r\n            }\r\n\r\n            string text = manager.GetString(message);\r\n\r\n            if (text == null)\r\n            {\r\n                return message;\r\n            }\r\n            else\r\n            {\r\n                return text;\r\n            }\r\n        }\r\n\r\n        // This is alternative alias of gettext\r\n        [ImplementsFunction(\"_\")]\r\n        [return: CastToFalse]\r\n        public static string gettext_(string message)\r\n        {\r\n            return gettext(message);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ngettext\r\n\r\n        /// <summary>\r\n        /// Plural version of gettext\r\n        /// </summary>\r\n        /// <param name=\"msgid1\"></param>\r\n        /// <param name=\"msgid2\"></param>\r\n        /// <param name=\"n\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"ngettext\", FunctionImplOptions.NotSupported)]\r\n        public static string ngettext(string msgid1, string msgid2, int n)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region textdomain\r\n\r\n        /// <summary>\r\n        /// This function sets the domain to search within when calls are made to gettext(), usually the named after an application.\r\n        /// </summary>\r\n        /// <param name=\"domain\"></param>\r\n        /// <param name=\"directory\"></param>\r\n        /// <returns>The full pathname for the domain currently being set.</returns>\r\n        [ImplementsFunction(\"textdomain\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static string textdomain(string domain, string directory)\r\n        {\r\n            return \"\";\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/GetText/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger GetText\")]\r\n[assembly: AssemblyDescription(\"Phalanger GetText Extension\")]\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"c083fd7e-9622-4984-a4fa-9ada254aa4d8\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.GetText.GetTextLibraryDescriptor), \"GetText\", new string[] { \"gettext\" })]"
  },
  {
    "path": "Source/Extensions/GetText/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetGetText\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/GetText/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet>\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetGetText\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/MSSql/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing PHP.Core;\r\n\r\n[assembly: AssemblyTitle(\"Phalanger MsSql\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - MsSql\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Data.MsSqlLibraryDescriptor), \"MsSql\", new string[]{\"mssql\"})]\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script independent MSSQL configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class MsSqlLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal MsSqlLocalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Request timeout in seconds. Non-positive value means no timeout.\r\n\t\t/// </summary>\r\n\t\tpublic int Timeout = 60;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Connect timeout in seconds. Non-positive value means no timeout.\r\n\t\t/// </summary>\r\n\t\tpublic int ConnectTimeout = 5;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Limit on size of a batch. Non-positive value means no limit.\r\n\t\t/// </summary>\r\n\t\tpublic int BatchSize = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n\t\t\treturn (MsSqlLocalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tcase \"Timeout\":\r\n\t\t\t\tTimeout = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"ConnectTimeout\":\r\n\t\t\t\tConnectTimeout = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"BatchSize\":\r\n\t\t\t\tBatchSize = ConfigUtils.ParseInteger(value, 0, Int32.MaxValue, node);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script dependent MSSQL configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class MsSqlGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal MsSqlGlobalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Maximum number of connections per request. Negative value means no limit.\r\n\t\t/// </summary>\r\n\t\tpublic int MaxConnections = -1;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Use NT authentication when connecting to the server.\r\n\t\t/// </summary>\r\n\t\tpublic bool NTAuthentication = false;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\"></param>\r\n\t\t/// <param name=\"value\"></param>\r\n\t\t/// <param name=\"node\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tcase \"NTAuthentication\":\r\n\t\t\t\tNTAuthentication = value == \"true\";\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"MaxConnections\":\r\n\t\t\t\tMaxConnections = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n\t\t\treturn (MsSqlGlobalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// MSSQL extension configuration.\r\n\t/// </summary>\r\n\tpublic static class MsSqlConfiguration\r\n\t{\r\n\t\t#region Legacy Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n\t\t\tMsSqlLocalConfig local = (MsSqlLocalConfig)config.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton);\r\n\t\t\tMsSqlLocalConfig @default = DefaultLocal;\r\n\t\t\tMsSqlGlobalConfig global = Global;\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n\t\t\t\t// local:\r\n\r\n\t\t\t\tcase \"mssql.connect_timeout\":\r\n\t\t\t\treturn PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n\t\t\t\tcase \"mssql.timeout\":\r\n\t\t\t\treturn PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n\t\t\t\tcase \"mssql.batchsize\":\r\n\t\t\t\treturn PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n\t\t\t\t// global:  \r\n\r\n\t\t\t\tcase \"mssql.max_links\":\r\n\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\t\t\t\treturn PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n\t\t\t\tcase \"mssql.secure_connection\":\r\n\t\t\t\tDebug.Assert(action == IniAction.Get);\r\n\t\t\t\treturn PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes MySql legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n\t\t\tMsSqlLocalConfig local = new MsSqlLocalConfig();\r\n\t\t\tMsSqlGlobalConfig global = new MsSqlGlobalConfig();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n\t\t\tow.StartSection(\"mssql\");\r\n\r\n\t\t\t// local:\r\n\t\t\tow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n\t\t\tow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n\t\t\tow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n\t\t\t// global:\r\n\t\t\tow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n\t\t\tow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\tconst string s = MsSqlLibraryDescriptor.ExtensionName;\r\n\t\t\tGetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n\t\t\t// global:\r\n\t\t\tIniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n\t\t\t// local:\r\n\t\t\tIniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t\tIniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n\t\tpublic static MsSqlLocalConfig Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MsSqlLocalConfig)Configuration.Local.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static MsSqlLocalConfig DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MsSqlLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the global library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static MsSqlGlobalConfig Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MsSqlGlobalConfig)Configuration.Global.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n\t\tpublic static MsSqlLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\treturn (MsSqlLocalConfig)context.Config.GetLibraryConfig(MsSqlLibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/Extension.MsSql.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{2153C1DA-B1C5-4B6F-B6D9-272D6099FFC6}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <AssemblyName>PhpNet.Extension.MsSql</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Data</RootNamespace>\r\n    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Name>ClassLibrary</Name>\r\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\r\n      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Name>Core</Name>\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Configuration.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LibraryDescriptor.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"MsSql.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpSqlDbConnection.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpSqlDbProcedure.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpSqlDbResult.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.MsSql.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/Extension.MsSql.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension MSSQL SQLServer SQL server database</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/MSSql/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n\tpublic sealed class MsSqlLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal static MsSqlLibraryDescriptor Singleton { get { return singleton; } }\r\n\t\tprivate static MsSqlLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtensionName }; }\r\n        //}\r\n        internal const string ExtensionName = \"mssql\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\t\t\tMsSqlConfiguration.RegisterLegacyOptions();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the MSSQL library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n\t\t\tConfigUtils.ParseNameValueList(section, context, (MsSqlLocalConfig)result.Local, (MsSqlGlobalConfig)result.Global);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\treturn new ConfigContextBase(new MsSqlLocalConfig(), new MsSqlGlobalConfig());\r\n\t\t}\r\n\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/Extensions/MSSql/MsSql.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.Data.SqlClient;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Implements PHP functions provided by MSSQL extension.\r\n\t/// </summary>\r\n\tpublic static class MsSql\r\n\t{\r\n\t\t#region Enums\r\n\r\n\t\t/// <summary>\r\n\t\t/// Query result array format.\r\n\t\t/// </summary>\r\n\t\t[Flags]\r\n\t\tpublic enum QueryResultKeys\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// Add items keyed by column names.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"MSSQL_ASSOC\")]\r\n\t\t\tColumnNames = 1,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Add items keyed by column indices.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"MSSQL_NUM\")]\r\n\t\t\tNumbers = 2,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// Add both items keyed by column names and items keyd by column indices.\r\n\t\t\t/// </summary>\r\n\t\t\t[ImplementsConstant(\"MSSQL_BOTH\")]\r\n\t\t\tBoth = ColumnNames | Numbers\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Types of variables bound to stored procedure parameters.\r\n\t\t/// </summary>\r\n\t\tpublic enum VariableType\r\n\t\t{\r\n\t\t\t[ImplementsConstant(\"SQLBIT\")]\r\n\t\t\tBit = 50,\r\n\r\n\t\t\t[ImplementsConstant(\"SQLTEXT\")]\r\n\t\t\tText = 35,\r\n\t\t\t[ImplementsConstant(\"SQLVARCHAR\")]\r\n\t\t\tVarChar = 39,\r\n\t\t\t[ImplementsConstant(\"SQLCHAR\")]\r\n\t\t\tChar = 47,\r\n\r\n\t\t\t[ImplementsConstant(\"SQLINT1\")]\r\n\t\t\tInt8 = 48,\r\n\t\t\t[ImplementsConstant(\"SQLINT2\")]\r\n\t\t\tInt16 = 52,\r\n\t\t\t[ImplementsConstant(\"SQLINT4\")]\r\n\t\t\tInt32 = 56,\r\n\r\n\t\t\t[ImplementsConstant(\"SQLFLT4\")]\r\n\t\t\tFloat = 59,\r\n\t\t\t[ImplementsConstant(\"SQLFLT8\")]\r\n\t\t\tDouble = 62,\r\n\t\t\t[ImplementsConstant(\"SQLFLTN\")]\r\n\t\t\tFloatN = 109\r\n\t\t}\r\n\r\n        #endregion\r\n\r\n        #region SqlConnectionManager\r\n\r\n        private static SqlConnectionManager GetManager(ScriptContext ctx)\r\n        {\r\n            return ctx.Properties.GetOrCreateProperty(() => new SqlConnectionManager());\r\n        }\r\n\r\n        private static SqlConnectionManager GetManager()\r\n        {\r\n            return GetManager(ScriptContext.CurrentContext);\r\n        }\r\n\r\n\t\tprivate static void UpdateConnectErrorInfo(PhpSqlDbConnection connection)\r\n\t\t{\r\n            GetManager(connection.ScriptContext)\r\n                .FailConnectErrorMessage = connection.GetLastErrorMessage();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_close\r\n\r\n\t\t/// <summary>\r\n\t\t/// Close last connection.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_close\")]\r\n\t\tpublic static bool Close()\r\n\t\t{\r\n            var manager = GetManager();\r\n\r\n            var last_connection = manager.GetLastConnection();\r\n\t\t\tif (last_connection == null)\r\n                return false;\r\n\r\n\t\t\tmanager.RemoveConnection(last_connection);\r\n\r\n\t\t\tlast_connection.Close();\r\n\t\t\tlast_connection = null;\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Closes a specified connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"linkIdentifier\">The connection resource.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_close\")]\r\n\t\tpublic static bool Close(PhpResource linkIdentifier)\r\n\t\t{\r\n\t\t\tvar connection = PhpSqlDbConnection.ValidConnection(linkIdentifier);\r\n\t\t\tif (connection == null) return false;\r\n\r\n            GetManager().RemoveConnection(connection);\r\n\r\n\t\t\tconnection.Close();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_connect, NS: mssql_pconnect\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using default server, credentials, and flags.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\r\n\t\t[ImplementsFunction(\"mssql_connect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Connect()\r\n\t\t{\r\n\t\t\treturn Connect(null, null, null, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using a specified server and default credentials and flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_connect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Connect(string server)\r\n\t\t{\r\n\t\t\treturn Connect(server, null, null, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using a specified server and user and default password and flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_connect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Connect(string server, string user)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, null, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using a specified server, user, and password and default flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"password\">Password. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_connect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Connect(string server, string user, string password)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, password, false, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a connection to SQL server using a specified server, user, and password and default flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"password\">Password. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"newLink\">Whether to create a new link (ignored by Phalanger).</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_connect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Connect(string server, string user, string password, bool newLink)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, password, newLink, false);\r\n\t\t}\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to MySQL server using default server, credentials, and flags.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_pconnect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource PersistentConnect()\r\n\t\t{\r\n\t\t\treturn Connect(null, null, null, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using default server, credentials, and flags.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_pconnect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource PersistentConnect(string server)\r\n\t\t{\r\n\t\t\treturn Connect(server, null, null, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using a specified server and user and default password and flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// Creates a non-persistent connection. Persistent connections are not supported.\r\n\t\t/// </remarks>\t\t\t\r\n\t\t[ImplementsFunction(\"mssql_pconnect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource PersistentConnect(string server, string user)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, null, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a new connection to SQL server using a specified server, user, and password and default flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"password\">Password. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// Creates a non-persistent connection. Persistent connections are not supported.\r\n\t\t/// </remarks>\t\t\t\r\n\t\t[ImplementsFunction(\"mssql_pconnect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource PersistentConnect(string server, string user, string password)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, password, false, true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Establishes a connection to SQL server using a specified server, user, and password and default flags.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"server\">Server (host). A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"user\">User name. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"password\">Password. A <b>null</b> reference means the default value.</param>\r\n\t\t/// <param name=\"newLink\">Whether to create a new link (ignored by Phalanger).</param>\r\n\t\t/// <returns>\r\n\t\t/// Resource representing the connection or a <B>null</B> reference (<B>false</B> in PHP) on failure.\r\n\t\t/// </returns>\r\n\t\t/// <remarks>\r\n\t\t/// Default values are taken from the configuration.\r\n\t\t/// Creates a non-persistent connection. Persistent connections are not supported.\r\n\t\t/// </remarks>\t\t\r\n\t\t[ImplementsFunction(\"mssql_pconnect\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource PersistentConnect(string server, string user, string password, bool newLink)\r\n\t\t{\r\n\t\t\treturn Connect(server, user, password, newLink, true);\r\n\t\t}\r\n\r\n\t\tprivate static PhpResource Connect(string server, string user, string password, bool newLink, bool persistent)\r\n\t\t{\r\n\t\t\t// persistent connections are treated as transient, a warning is issued:\r\n\t\t\tif (persistent)\r\n\t\t\t\tPhpException.FunctionNotSupported(PhpError.Notice);\r\n\r\n\t\t\tMsSqlLocalConfig local = MsSqlConfiguration.Local;\r\n\t\t\tMsSqlGlobalConfig global = MsSqlConfiguration.Global;\r\n\r\n\t\t\tStringBuilder opts = new StringBuilder();\r\n\r\n\t\t\tif (local.ConnectTimeout > 0)\r\n\t\t\t\topts.AppendFormat(\"Connect Timeout={0}\", local.ConnectTimeout);\r\n\r\n\t\t\tif (global.NTAuthentication)\r\n\t\t\t{\r\n\t\t\t\tif (opts.Length > 0) opts.Append(';');\r\n\t\t\t\tuser = password = null;\r\n\t\t\t\topts.Append(\"Integrated Security=true\");\r\n\t\t\t}\r\n\r\n\t\t\tstring connection_string = PhpSqlDbConnection.BuildConnectionString(server, user, password, opts.ToString());\r\n\r\n\t\t\tbool success;\r\n\t\t\tPhpSqlDbConnection connection = (PhpSqlDbConnection)GetManager().OpenConnection(connection_string,\r\n\t\t\t  newLink, global.MaxConnections, out success);\r\n\r\n\t\t\tif (!success)\r\n\t\t\t{\r\n\t\t\t\tif (connection != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tUpdateConnectErrorInfo(connection);\r\n\t\t\t\t\tconnection = null;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn connection;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_free_result\r\n\r\n\t\t/// <summary>\r\n\t\t/// Releases a resource represening a query result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure (invalid resource).</returns>\r\n\t\t[ImplementsFunction(\"mssql_free_result\")]\r\n\t\tpublic static bool FreeResult(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return false;\r\n\r\n\t\t\tresult.Close();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_select_db\r\n\r\n\t\t/// <summary>\r\n\t\t/// Selects the current DB for the last created connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"databaseName\">Name of the database.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_select_db\")]\r\n\t\tpublic static bool SelectDb(string databaseName)\r\n\t\t{\r\n\t\t\tPhpDbConnection last_connection = GetManager().GetLastConnection();\r\n\t\t\tif (last_connection == null)\r\n\t\t\t{\r\n\t\t\t\tlast_connection = (PhpDbConnection)Connect();\r\n\t\t\t\tif (last_connection == null) return false;\r\n\t\t\t}\r\n\r\n\t\t\treturn SelectDb(databaseName, last_connection);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Selects the current DB for a specified connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"databaseName\">Name of the database.</param>\r\n\t\t/// <param name=\"linkIdentifier\">Connection resource.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_select_db\")]\r\n\t\tpublic static bool SelectDb(string databaseName, PhpResource linkIdentifier)\r\n\t\t{\r\n\t\t\tPhpSqlDbConnection connection = PhpSqlDbConnection.ValidConnection(linkIdentifier);\r\n\t\t\tif (connection == null) return false;\r\n\r\n\t\t\treturn connection.SelectDb(databaseName);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_query\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a query to the current database associated with the last created connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"query\">Query.</param>\r\n\t\t/// <returns>Query resource or a <B>null</B> reference (<B>null</B> in PHP) on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_query\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Query(string query)\r\n\t\t{\r\n\t\t\tPhpDbConnection last_connection = GetManager().GetLastConnection();\r\n\r\n\t\t\tif (last_connection == null)\r\n\t\t\t\tlast_connection = (PhpDbConnection)Connect();\r\n\r\n\t\t\treturn Query(query, last_connection);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a query to the current database associated with a specified connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"query\">Query.</param>\r\n\t\t/// <param name=\"linkIdentifier\">Connection resource.</param>\r\n\t\t/// <returns>Query resource or a <B>null</B> reference (<B>null</B> in PHP) on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_query\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Query(string query, PhpResource linkIdentifier)\r\n\t\t{\r\n\t\t\tMsSqlLocalConfig local = MsSqlConfiguration.Local;\r\n\t\t\treturn Query(query, linkIdentifier, local.BatchSize);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sends a query to the current database associated with a specified connection.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"query\">Query.</param>\r\n\t\t/// <param name=\"linkIdentifier\">Connection resource.</param>\r\n\t\t/// <param name=\"batchSize\">Connection resource.</param>\r\n\t\t/// <returns>Query resource or a <B>null</B> reference (<B>null</B> in PHP) on failure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_query\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource Query(string query, PhpResource linkIdentifier, int batchSize)\r\n\t\t{\r\n\t\t\tPhpSqlDbConnection connection = PhpSqlDbConnection.ValidConnection(linkIdentifier);\r\n\t\t\tif (query == null || connection == null) return null;\r\n\r\n\t\t\tPhpSqlDbResult result = (PhpSqlDbResult)connection.ExecuteQuery(query.Trim(), true);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\tresult.BatchSize = batchSize;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_fetch_row, mssql_fetch_assoc, mssql_fetch_array, mssql_fetch_object\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a result row as an integer indexed array. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Array indexed by integers starting from 0 containing values of the current row.</returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_row\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray FetchRow(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\treturn FetchArray(resultHandle, QueryResultKeys.Numbers);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a result row as an associative array. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Array indexed by column names containing values of the current row.</returns>\t\t\t\r\n\t\t[ImplementsFunction(\"mssql_fetch_assoc\")]\r\n\t\tpublic static PhpArray FetchAssoc(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\treturn FetchArray(resultHandle, QueryResultKeys.ColumnNames);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a result row as an associative array combined with integer-indexed array. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>\r\n\t\t/// Array indexed by both column names and indices containing values of the current row.\r\n\t\t/// Each value is contained twice - once with column name key and once with column index.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_array\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray FetchArray(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\treturn FetchArray(resultHandle, QueryResultKeys.Both);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a result row as an array with a specified key format. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"resultType\">Type(s) of keys in the resulting array.</param>\r\n\t\t/// <returns>\r\n\t\t/// Array containing values of the rows indexed by column keys and/or column indices depending \r\n\t\t/// on value of <paramref name=\"resultType\"/>.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_array\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpArray FetchArray(PhpResource resultHandle, QueryResultKeys resultType)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\tswitch (resultType)\r\n\t\t\t{\r\n\t\t\t\tcase QueryResultKeys.ColumnNames: return result.FetchArray(false, true);\r\n\t\t\t\tcase QueryResultKeys.Numbers: return result.FetchArray(true, false);\r\n\t\t\t\tcase QueryResultKeys.Both: return result.FetchArray(true, true);\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a result row as an object. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>\r\n\t\t/// Object whose fields contain values from the current row. \r\n\t\t/// Field names corresponds to the column names.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_object\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpObject FetchObject(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn result.FetchObject();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_rows_affected\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a number of affected rows in the previous operation.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The number of affected rows or -1 if the last operation failed or the connection is invalid.</returns>\r\n\t\t[ImplementsFunction(\"mssql_rows_affected\")]\r\n\t\tpublic static int GetLastAffectedRows()\r\n\t\t{\r\n\t\t\tPhpDbConnection last_connection = GetManager().GetLastConnection();\r\n\r\n\t\t\tif (last_connection == null)\r\n\t\t\t\tlast_connection = (PhpDbConnection)Connect();\r\n\r\n\t\t\treturn GetLastAffectedRows(last_connection);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get a number of affected rows in the previous operation.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"linkIdentifier\">Connection resource.</param>\r\n\t\t/// <returns>The number of affected rows or -1 if the last operation failed or the connection is invalid.</returns>\r\n\t\t[ImplementsFunction(\"mssql_rows_affected\")]\r\n\t\tpublic static int GetLastAffectedRows(PhpResource linkIdentifier)\r\n\t\t{\r\n\t\t\tPhpSqlDbConnection connection = PhpSqlDbConnection.ValidConnection(linkIdentifier);\r\n\t\t\tif (connection == null) return -1;\r\n\r\n\t\t\treturn connection.LastAffectedRows;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_num_fields, mssql_num_rows\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get number of columns (fields) in a specified result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Number of columns in the specified result or 0 if the result resource is invalid.</returns>\r\n\t\t[ImplementsFunction(\"mssql_num_fields\")]\r\n\t\tpublic static int GetFieldCount(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return 0;\r\n\r\n\t\t\treturn result.FieldCount;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Get number of rows in a specified result.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Number of rows in the specified result or 0 if the result resource is invalid.</returns>\r\n\t\t[ImplementsFunction(\"mssql_num_rows\")]\r\n\t\tpublic static int GetRowCount(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return 0;\r\n\r\n\t\t\treturn result.RowCount;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_get_last_message, NS: mssql_min_error_severity, mssql_min_message_severity\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets last error message.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The message sent by server.</returns>\r\n\t\t[ImplementsFunction(\"mssql_get_last_message\")]\r\n\t\tpublic static string GetLastMessage()\r\n\t\t{\r\n            var manager = GetManager();\r\n            var last_connection = (PhpSqlDbConnection)manager.GetLastConnection();\r\n\r\n\t\t\tif (last_connection == null)\r\n\t\t\t\treturn manager.FailConnectErrorMessage;\r\n\r\n\t\t\treturn last_connection.GetLastErrorMessage();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a threshold for displaying errors sent by server. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"severity\">Severity threshold.</param>\r\n\t\t[ImplementsFunction(\"mssql_min_error_severity\")]\r\n\t\tpublic static void MinErrorSeverity(int severity)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Notice);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets a threshold for displaying messages sent by server. Not supported.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"severity\">Severity threshold.</param>\r\n\t\t[ImplementsFunction(\"mssql_min_message_severity\")]\r\n\t\tpublic static void MinMessageSeverity(int severity)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported(PhpError.Notice);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_result\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a contents of a specified cell from a specified query result resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"rowIndex\">Row index.</param>\r\n\t\t/// <param name=\"field\">Column (field) integer index or string name.</param>\r\n\t\t/// <returns>The value of the cell or a <B>null</B> reference (<B>false</B> in PHP) on failure (invalid resource or row index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_result\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static object GetField(PhpResource resultHandle, int rowIndex, object field)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\tstring field_name;\r\n\t\t\tobject field_value;\r\n\t\t\tif (field == null)\r\n\t\t\t{\r\n\t\t\t\tfield_value = result.GetFieldValue(rowIndex, result.CurrentFieldIndex);\r\n\t\t\t}\r\n\t\t\telse if ((field_name = PhpVariable.AsString(field)) != null)\r\n\t\t\t{\r\n\t\t\t\tfield_value = result.GetFieldValue(rowIndex, field_name);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfield_value = result.GetFieldValue(rowIndex, Core.Convert.ObjectToInteger(field));\r\n\t\t\t}\r\n\r\n\t\t\treturn Core.Convert.Quote(field_value, context);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_next_result\r\n\r\n\t\t/// <summary>\r\n\t\t/// Fetches the next result set if the query returned multiple result sets.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Whether the next result set is available.</returns>\r\n\t\t[ImplementsFunction(\"mssql_next_result\")]\r\n\t\tpublic static bool NextResult(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return false;\r\n\r\n\t\t\treturn result.NextResultSet();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_field_name, mssql_field_type, mssql_field_length\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of the current column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Name of the column or a <B>null</B> reference on failure (invalid resource or column index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_field_name\")]\r\n\t\tpublic static string FieldName(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn result.GetFieldName();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a name of a specified column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"fieldIndex\">Column (field) index.</param>\r\n\t\t/// <returns>Name of the column or a <B>null</B> reference on failure (invalid resource or column index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_field_name\")]\r\n\t\tpublic static string FieldName(PhpResource resultHandle, int fieldIndex)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn result.GetFieldName(fieldIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type of the current column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>MSSQL type translated to PHP terminology.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Possible values are: TODO.\r\n\t\t/// </remarks>   \r\n\t\t[ImplementsFunction(\"mssql_field_type\")]\r\n\t\tpublic static string FieldType(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn result.GetPhpFieldType();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a type of a specified column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"fieldIndex\">Column index.</param>\r\n\t\t/// <returns>MSSQL type translated to PHP terminology.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// Possible values are: TODO.\r\n\t\t/// </remarks>   \r\n\t\t[ImplementsFunction(\"mssql_field_type\")]\r\n\t\tpublic static string FieldType(PhpResource resultHandle, int fieldIndex)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn result.GetPhpFieldType(fieldIndex);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a length of the current column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>Length of the column or a -1 on failure (invalid resource or column index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_field_length\")]\r\n\t\tpublic static int FieldLength(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return -1;\r\n\r\n\t\t\treturn result.GetFieldLength();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a length of a specified column (field) in a result. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"fieldIndex\">Column index.</param>\r\n\t\t/// <returns>Length of the column or a -1 on failure (invalid resource or column index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_field_length\")]\r\n\t\tpublic static int FieldLength(PhpResource resultHandle, int fieldIndex)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return -1;\r\n\r\n\t\t\treturn result.GetFieldLength(fieldIndex);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_field_seek, mssql_dataseek\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the result resource's current column (field) offset.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"fieldOffset\">New column offset.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure (invalid resource or column offset).</returns>\r\n\t\t[ImplementsFunction(\"mssql_field_seek\")]\r\n\t\tpublic static bool FieldSeek(PhpResource resultHandle, int fieldOffset)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return false;\r\n\r\n\t\t\treturn result.SeekField(fieldOffset);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the result resource's current row index.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"rowIndex\">New row index.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure (invalid resource or row index).</returns>\r\n\t\t[ImplementsFunction(\"mssql_data_seek\")]\r\n\t\tpublic static bool DataSeek(PhpResource resultHandle, int rowIndex)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return false;\r\n\r\n\t\t\treturn result.SeekRow(rowIndex);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_fetch_field\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a PHP object whose properties describes the last fetched field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <returns>The PHP object.</returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_field\")]\r\n\t\tpublic static PhpObject FetchField(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn FetchFieldInternal(result, result.FetchNextField());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a PHP object whose properties describes a specified field.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"resultHandle\">Query result resource.</param>\r\n\t\t/// <param name=\"fieldIndex\">Field index.</param>\r\n\t\t/// <returns>The PHP object.</returns>\r\n\t\t[ImplementsFunction(\"mssql_fetch_field\")]\r\n\t\tpublic static PhpObject FetchField(PhpResource resultHandle, int fieldIndex)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = PhpSqlDbResult.ValidResult(resultHandle);\r\n\t\t\tif (result == null) return null;\r\n\r\n\t\t\treturn FetchFieldInternal(result, fieldIndex);\r\n\t\t}\r\n\r\n\t\tprivate static PhpObject FetchFieldInternal(PhpSqlDbResult/*!*/ result, int fieldIndex)\r\n\t\t{\r\n\t\t\tDataRow info = result.GetSchemaRowInfo(fieldIndex);\r\n\t\t\tif (info == null) return null;\r\n\r\n\t\t\tstring s;\r\n\t\t\tPhpObject obj = new stdClass();\r\n\t\t\tstring php_type = result.GetPhpFieldType(fieldIndex);\r\n\r\n\t\t\tobj.Add(\"name\", result.GetFieldName(fieldIndex));\r\n\t\t\tobj.Add(\"column_source\", (s = info[\"BaseColumnName\"] as string) != null ? s : \"\");\r\n\t\t\tobj.Add(\"max_length\", result.GetFieldLength(fieldIndex));\r\n\t\t\tobj.Add(\"numeric\", result.IsNumericType(php_type) ? 1 : 0);\r\n\t\t\tobj.Add(\"type\", php_type);\r\n\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region NS: mssql_fetch_batch\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not supported.\r\n\t\t/// </summary>\r\n        [ImplementsFunction(\"mssql_fetch_batch\", FunctionImplOptions.NotSupported)]\r\n\t\tpublic static PhpArray FetchBatch(PhpResource resultHandle)\r\n\t\t{\r\n\t\t\tPhpException.FunctionNotSupported();\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t// Stored Procedures //\r\n\r\n\t\t#region mssql_init, mssql_free_statement\r\n\r\n\t\t/// <summary>\r\n\t\t/// Inicializes a stored procedure of a given name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"procedureName\">Name of the stored procedure.</param>\r\n\t\t/// <returns>Statement resource representing the procedure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_init\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource CreateProcedure(string procedureName)\r\n\t\t{\r\n\t\t\tPhpDbConnection last_connection = GetManager().GetLastConnection();\r\n\r\n\t\t\tif (last_connection == null)\r\n\t\t\t\tlast_connection = (PhpDbConnection)Connect();\r\n\r\n\t\t\treturn CreateProcedure(procedureName, last_connection);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Inicializes a stored procedure of a given name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"procedureName\">Name of the stored procedure.</param>\r\n\t\t/// <param name=\"linkIdentifier\">Connection resource.</param>\r\n\t\t/// <returns>Statement resource representing the procedure.</returns>\r\n\t\t[ImplementsFunction(\"mssql_init\")]\r\n\t\t[return: CastToFalse]\r\n\t\tpublic static PhpResource CreateProcedure(string procedureName, PhpResource linkIdentifier)\r\n\t\t{\r\n\t\t\tPhpSqlDbConnection connection = PhpSqlDbConnection.ValidConnection(linkIdentifier);\r\n\t\t\tif (connection == null) return null;\r\n\r\n\t\t\tif (procedureName == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"procedureName\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn new PhpSqlDbProcedure(connection, procedureName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Releases a resource represening a statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource.</param>\r\n\t\t/// <returns><B>true</B> on success, <B>false</B> on failure (invalid resource).</returns>\r\n\t\t[ImplementsFunction(\"mssql_free_statement\")]\r\n\t\tpublic static bool FreeStatement(PhpResource statement)\r\n\t\t{\r\n\t\t\tPhpSqlDbProcedure procedure = PhpSqlDbProcedure.ValidProcedure(statement);\r\n\t\t\tif (procedure == null) return false;\r\n\r\n\t\t\tprocedure.Close();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_bind\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binds a PHP variable to an SQL input parameter of a statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource.</param>\r\n\t\t/// <param name=\"parameterName\">Parameter name starting with '@' character.</param>\r\n\t\t/// <param name=\"variable\">PHP variable to bind to the parameter.</param>\r\n\t\t/// <param name=\"type\">SQL type of the parameter.</param>\r\n\t\t/// <returns>Whether binding succeeded.</returns>\r\n\t\t[ImplementsFunction(\"mssql_bind\")]\r\n\t\tpublic static bool Bind(PhpResource statement, string parameterName, PhpReference variable, VariableType type)\r\n\t\t{\r\n\t\t\treturn Bind(statement, parameterName, variable, type, false, false, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binds a PHP variable to an SQL parameter of a statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource.</param>\r\n\t\t/// <param name=\"parameterName\">Parameter name starting with '@' character.</param>\r\n\t\t/// <param name=\"variable\">PHP variable to bind to the parameter.</param>\r\n\t\t/// <param name=\"type\">SQL type of the parameter.</param>\r\n\t\t/// <param name=\"isOutput\">Whether the parameter is an output parameter.</param>\r\n\t\t/// <returns>Whether binding succeeded.</returns>\r\n\t\t[ImplementsFunction(\"mssql_bind\")]\r\n\t\tpublic static bool Bind(PhpResource statement, string parameterName, PhpReference variable, VariableType type,\r\n\t\t  bool isOutput)\r\n\t\t{\r\n\t\t\treturn Bind(statement, parameterName, variable, type, isOutput, false, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binds a PHP variable to an SQL parameter of a statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource.</param>\r\n\t\t/// <param name=\"parameterName\">Parameter name starting with '@' character.</param>\r\n\t\t/// <param name=\"variable\">PHP variable to bind to the parameter.</param>\r\n\t\t/// <param name=\"type\">SQL type of the parameter.</param>\r\n\t\t/// <param name=\"isOutput\">Whether the parameter is an output parameter.</param>\r\n\t\t/// <param name=\"isNullable\">Whether the parameter accepts <B>null</B> values.</param>\r\n\t\t/// <returns>Whether binding succeeded.</returns>\r\n\t\t[ImplementsFunction(\"mssql_bind\")]\r\n\t\tpublic static bool Bind(PhpResource statement, string parameterName, PhpReference variable, VariableType type,\r\n\t\t  bool isOutput, bool isNullable)\r\n\t\t{\r\n\t\t\treturn Bind(statement, parameterName, variable, type, isOutput, isNullable, -1);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Binds a PHP variable to an SQL parameter of a statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource.</param>\r\n\t\t/// <param name=\"parameterName\">Parameter name starting with '@' character.</param>\r\n\t\t/// <param name=\"variable\">PHP variable to bind to the parameter.</param>\r\n\t\t/// <param name=\"type\">SQL type of the parameter.</param>\r\n\t\t/// <param name=\"isOutput\">Whether the parameter is an output parameter.</param>\r\n\t\t/// <param name=\"isNullable\">Whether the parameter accepts <B>null</B> values.</param>\r\n\t\t/// <param name=\"maxLength\">Maximum size of input data.</param>\r\n\t\t/// <returns>Whether binding succeeded.</returns>\r\n\t\t[ImplementsFunction(\"mssql_bind\")]\r\n\t\tpublic static bool Bind(PhpResource statement, string parameterName, PhpReference variable, VariableType type,\r\n\t\t  bool isOutput, bool isNullable, int maxLength)\r\n\t\t{\r\n\t\t\tPhpSqlDbProcedure procedure = PhpSqlDbProcedure.ValidProcedure(statement);\r\n\t\t\tif (procedure == null) return false;\r\n\r\n\t\t\tif (parameterName == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentNull(\"parameterName\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tPhpSqlDbProcedure.ParameterType param_type = PhpSqlDbProcedure.VariableTypeToParamType(type);\r\n\t\t\tif (param_type == PhpSqlDbProcedure.ParameterType.Invalid)\r\n\t\t\t{\r\n\t\t\t\tPhpException.ArgumentValueNotSupported(\"type\", (int)type);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tSqlParameter parameter = new SqlParameter();\r\n\t\t\tparameter.ParameterName = parameterName;\r\n\r\n\t\t\t// it is necessary to set size for in-out params as the results are truncated to this size;\r\n\t\t\t// 8000 is maximal size of the data according to the doc:\r\n\t\t\tif (maxLength >= 0)\r\n\t\t\t\tparameter.Size = maxLength;\r\n\t\t\telse\r\n\t\t\t\tparameter.Size = 8000;\r\n\r\n\t\t\tif (String.Compare(parameterName, \"RETVAL\", true) == 0)\r\n\t\t\t\tparameter.Direction = ParameterDirection.ReturnValue;\r\n\t\t\telse if (isOutput)\r\n\t\t\t\tparameter.Direction = ParameterDirection.InputOutput;\r\n\t\t\telse\r\n\t\t\t\tparameter.Direction = ParameterDirection.Input;\r\n\r\n\t\t\tif (!procedure.AddBinding(parameter, variable, param_type))\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, LibResources.GetString(\"parameter_already_bound\", parameterName));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region mssql_execute\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a specified stored procedure statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource (stored procedure).</param>\r\n\t\t/// <returns>\r\n\t\t/// Result resource containing procedure output, \r\n\t\t/// <B>true</B> if the procedure succeeded yet doesn't return any value, or\r\n\t\t/// <B>false</B> on failure.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"mssql_execute\")]\r\n\t\tpublic static object Execute(PhpResource statement)\r\n\t\t{\r\n\t\t\treturn Execute(statement, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes a specified stored procedure statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"statement\">Statement resource (stored procedure).</param>\r\n\t\t/// <param name=\"skipResults\">Whether to retrieve and return procedure output.</param>\r\n\t\t/// <returns>\r\n\t\t/// Result resource containing procedure output, \r\n\t\t/// <B>true</B> if the procedure succeeded yet doesn't return any value, or\r\n\t\t/// <B>false</B> on failure.\r\n\t\t/// </returns>\r\n\t\t[ImplementsFunction(\"mssql_execute\")]\r\n\t\tpublic static object Execute(PhpResource statement, bool skipResults)\r\n\t\t{\r\n\t\t\tPhpSqlDbProcedure procedure = PhpSqlDbProcedure.ValidProcedure(statement);\r\n\t\t\tif (procedure == null) return false;\r\n\r\n\t\t\tbool success;\r\n\t\t\tPhpSqlDbResult result = procedure.Execute(skipResults, out success);\r\n\r\n\t\t\tif (!success) return false;\r\n\t\t\tif (skipResults) return true;\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t// Others //\r\n\r\n\t\t#region mssql_guid_string\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts 16 bytes to a string representation of a GUID.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"binary\">Binary representation of a GUID.</param>\r\n\t\t/// <returns>String representation of a GUID.</returns>\r\n\t\t[ImplementsFunction(\"mssql_guid_string\")]\r\n\t\tpublic static string GuidToString(PhpBytes binary)\r\n\t\t{\r\n\t\t\treturn GuidToString(binary, false);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts 16 bytes to a string representation of a GUID.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"binary\">Binary representation of a GUID.</param>\r\n\t\t/// <param name=\"shortFormat\">Whether to return a short format.</param>\r\n\t\t/// <returns>String representation of a GUID.</returns>\r\n\t\t[ImplementsFunction(\"mssql_guid_string\")]\r\n\t\tpublic static string GuidToString(PhpBytes binary, bool shortFormat)\r\n\t\t{\r\n\t\t\tif (binary == null || binary.Length == 0)\r\n\t\t\t\treturn String.Empty;\r\n\r\n\t\t\tif (binary.Length != 16)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidArgument(\"binary\", LibResources.GetString(\"arg:invalid_length\"));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (shortFormat)\r\n                return new Guid(binary.ReadonlyData).ToString(\"D\").ToUpper();\r\n\t\t\telse\r\n                return PHP.Core.StringUtils.BinToHex(binary.ReadonlyData, null).ToUpper();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}"
  },
  {
    "path": "Source/Extensions/MSSql/PhpSqlDbConnection.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\tinternal sealed class SqlConnectionManager : ConnectionManager\r\n\t{\r\n        /// <summary>\r\n        /// Last failed connect attempt error message.\r\n        /// </summary>\r\n        public string FailConnectErrorMessage = \"\";\r\n\r\n        protected override PhpDbConnection CreateConnection(string/*!*/ connectionString)\r\n\t\t{\r\n\t\t\treturn new PhpSqlDbConnection(connectionString, ScriptContext.CurrentContext);\r\n\t\t}\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// SQL connection resource.\r\n\t/// </summary>\r\n\tpublic sealed class PhpSqlDbConnection : PhpDbConnection\r\n\t{\r\n\t\tinternal SqlConnection SqlConnection { get { return (SqlConnection)this.connection; } }\r\n\r\n        /// <summary>\r\n        /// Gets reference to script context. Cannot be <c>null</c>.\r\n        /// </summary>\r\n        public ScriptContext/*!*/ScriptContext { get { return this.context; } }\r\n        private readonly ScriptContext/*!*/ context;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new connection resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connectionString\">Connection string.</param>\r\n\t\t/// <param name=\"context\">Script context associated with the connection.</param>\r\n\t\tpublic PhpSqlDbConnection(string/*!*/ connectionString, ScriptContext/*!*/ context)\r\n\t\t\t: base(connectionString, new SqlConnection(), \"mssql connection\")\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\tthis.context = context;\r\n\t\t\t// TODO: Connection.InfoMessage += new SqlInfoMessageEventHandler(InfoMessage);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Validates whether the specified handler is instance of PhpDbConnection type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"handle\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tinternal static PhpSqlDbConnection ValidConnection(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpSqlDbConnection connection = handle as PhpSqlDbConnection;\r\n\t\t\tif (connection != null && connection.IsValid) return connection;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_connection_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets a query result resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"reader\">Data reader to be used for result resource population.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert data types to PHP ones.</param>\r\n\t\t/// <returns>Result resource holding all resulting data of the query.</returns>\r\n\t\tprotected override PhpDbResult/*!*/ GetResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes)\r\n\t\t{\r\n\t\t\treturn new PhpSqlDbResult(connection, reader, convertTypes);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Command factory.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An empty instance of <see cref=\"SqlCommand\"/>.</returns>\r\n\t\tprotected override IDbCommand/*!*/ CreateCommand()\r\n\t\t{\r\n\t\t\tSqlCommand command = new SqlCommand();\r\n\t\t\tMsSqlLocalConfig local = MsSqlConfiguration.GetLocal(context);\r\n\t\t\tcommand.CommandTimeout = (local.Timeout > 0) ? local.Timeout : 0;\r\n\t\t\treturn command;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/PhpSqlDbProcedure.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Collections;\r\nusing System.Collections.Specialized;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Represets a stored procedure statement.\r\n\t/// </summary>\r\n\tpublic sealed class PhpSqlDbProcedure : PhpDbStatement\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Procedure name.\r\n\t\t/// </summary>\r\n\t\tpublic string/*!*/ ProcedureName { get { return procedureName; } }\r\n\t\tprivate string/*!*/ procedureName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a stored procedure statement.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"procedureName\">Procedure name.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\r\n\t\tpublic PhpSqlDbProcedure(PhpDbConnection/*!*/ connection, string/*!*/ procedureName)\r\n\t\t\t: base(\"mssql statement\", connection)\r\n\t\t{\r\n\t\t\tif (procedureName == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"procedureName\");\r\n\r\n\t\t\tthis.procedureName = procedureName;\r\n\t\t}\r\n\r\n\t\tinternal static PhpSqlDbProcedure ValidProcedure(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpSqlDbProcedure result = handle as PhpSqlDbProcedure;\r\n\t\t\tif (result != null && result.IsValid) return result;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_stored_procedure_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tinternal static ParameterType VariableTypeToParamType(MsSql.VariableType type)\r\n\t\t{\r\n\t\t\tswitch (type)\r\n\t\t\t{\r\n\t\t\t\tcase MsSql.VariableType.Char:\r\n\t\t\t\tcase MsSql.VariableType.Text:\r\n\t\t\t\tcase MsSql.VariableType.VarChar:\r\n\t\t\t\treturn ParameterType.String;\r\n\r\n\t\t\t\tcase MsSql.VariableType.Double:\r\n\t\t\t\tcase MsSql.VariableType.Float:\r\n\t\t\t\tcase MsSql.VariableType.FloatN:\r\n\t\t\t\treturn ParameterType.Double;\r\n\r\n\t\t\t\tcase MsSql.VariableType.Bit:\r\n\t\t\t\tcase MsSql.VariableType.Int8:\r\n\t\t\t\tcase MsSql.VariableType.Int16:\r\n\t\t\t\tcase MsSql.VariableType.Int32:\r\n\t\t\t\treturn ParameterType.Integer;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\treturn ParameterType.Invalid;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Executes the procedure.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"skipResults\">Whether to load the results.</param>\r\n\t\t/// <param name=\"success\">Whether the execution succeeded.</param>\r\n\t\t/// <returns>Results or a <B>null</B> reference if results are not loaded or an error occured.</returns>\r\n\t\tpublic PhpSqlDbResult Execute(bool skipResults, out bool success)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = (PhpSqlDbResult)connection.ExecuteProcedure(procedureName,\r\n\t\t\t  PrepareParameters(), skipResults);\r\n\r\n\t\t\tsuccess = connection.LastException == null;\r\n\r\n\t\t\tif (success)\r\n\t\t\t\tWriteParametersBack();\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/PhpSqlDbResult.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Data.SqlTypes;\r\nusing System.Collections;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n\t/// <summary>\r\n\t/// Represents a result of a SQL command.\r\n\t/// </summary>\r\n\tpublic sealed class PhpSqlDbResult : PhpDbResult\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Limit on size of a batch. Non-positive values means no limit.\r\n\t\t/// </summary>\r\n\t\tpublic int BatchSize { get { return batchSize; } set { batchSize = value; } }\r\n\t\tprivate int batchSize = 0;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an instance of a result resource.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"connection\">Database connection.</param>\r\n\t\t/// <param name=\"reader\">Data reader from which to load results.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert resulting values to PHP types.</param>\r\n\t\t/// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\r\n\t\tpublic PhpSqlDbResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes)\r\n\t\t\t: base(connection, reader, \"mssql result\", convertTypes)\r\n\t\t{\r\n\t\t\t// no code in here\r\n\t\t}\r\n\r\n\t\tinternal static PhpSqlDbResult ValidResult(PhpResource handle)\r\n\t\t{\r\n\t\t\tPhpSqlDbResult result = handle as PhpSqlDbResult;\r\n\t\t\tif (result != null && result.IsValid) return result;\r\n\r\n\t\t\tPhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_result_resource\"));\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets an array of column names.\r\n\t\t/// </summary>\r\n\t\t/// <returns>\r\n\t\t/// Array of column names. If a column doesn't have a name (it is calculated), \r\n\t\t/// it is assigned \"computed{number}\" name.\r\n\t\t/// </returns>\r\n\t\tprotected override string[] GetNames()\r\n\t\t{\r\n\t\t\tstring[] names = base.GetNames();\r\n\r\n\t\t\tint j = 0;\r\n\t\t\tfor (int i = 0; i < names.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (names[i] == \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tnames[i] = (j > 0) ? \"computed\" + j : \"computed\";\r\n\t\t\t\t\tj++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn names;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets row values.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dataTypes\">Data type names.</param>\r\n\t\t/// <param name=\"convertTypes\">Whether to convert value to PHP types.</param>\r\n\t\t/// <returns>Row data.</returns>\r\n\t\tprotected override object[] GetValues(string[] dataTypes, bool convertTypes)\r\n\t\t{\r\n\t\t\tSqlDataReader sql_reader = (SqlDataReader)this.Reader;\r\n\r\n\t\t\tobject[] oa = new object[sql_reader.FieldCount];\r\n\r\n\t\t\tif (convertTypes)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < sql_reader.FieldCount; i++)\r\n\t\t\t\t\toa[i] = ConvertDbValue(sql_reader.GetSqlValue(i));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < sql_reader.FieldCount; i++)\r\n\t\t\t\t\toa[i] = sql_reader.GetSqlValue(i);\r\n\t\t\t}\r\n\r\n\t\t\treturn oa;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a value from database to PHP value.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"dbValue\">Database value.</param>\r\n\t\t/// <returns>PHP value.</returns>\r\n\t\tpublic static object ConvertDbValue(object dbValue)\r\n\t\t{\r\n\t\t\tif (dbValue is SqlInt32)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlInt32.Null)) return null;\r\n\t\t\t\telse return ((SqlInt32)dbValue).Value;\r\n\t\t\t}\r\n\t\t\tif (dbValue is SqlInt16)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlInt16.Null)) return null;\r\n\t\t\t\telse return System.Convert.ToInt32(((SqlInt16)dbValue).Value);\r\n\t\t\t}\r\n\t\t\tif (dbValue is SqlBoolean)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlBoolean.Null)) return null;\r\n\t\t\t\telse return ((SqlBoolean)dbValue).Value ? 1 : 0;\r\n\t\t\t}\r\n\t\t\tif (dbValue is SqlString)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlString.Null)) return null;\r\n\t\t\t\telse return ((SqlString)dbValue).Value;\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: check the format of conversion. Is it culture dependent?\r\n\t\t\tif (dbValue is SqlDateTime)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlDateTime.Null)) return null;\r\n                else return ((SqlDateTime)dbValue).Value.ToString(\"yyyy-MM-dd HH:mm:ss\");\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlDouble)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlDouble.Null)) return null;\r\n\t\t\t\telse return ((SqlDouble)dbValue).Value;\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlInt64)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlInt64.Null)) return null;\r\n\t\t\t\telse return ((SqlInt64)dbValue).Value.ToString();\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlBinary)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlBinary.Null)) return null;\r\n\t\t\t\telse return new PHP.Core.PhpBytes(((SqlBinary)dbValue).Value);\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlDecimal)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlDecimal.Null)) return null;\r\n\t\t\t\telse return ((SqlDecimal)dbValue).Value.ToString();\r\n\t\t\t}\r\n\r\n\t\t\t// TODO: beware of overflow\r\n\t\t\tif (dbValue is SqlMoney)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlMoney.Null)) return null;\r\n\t\t\t\telse return System.Convert.ToDouble(((SqlMoney)dbValue).Value);\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlSingle)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlSingle.Null)) return null;\r\n\t\t\t\telse return System.Convert.ToDouble(((SqlSingle)dbValue).Value);\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlByte)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlByte.Null)) return null;\r\n\t\t\t\telse return System.Convert.ToInt32(((SqlByte)dbValue).Value);\r\n\t\t\t}\r\n\r\n\t\t\tif (dbValue is SqlGuid)\r\n\t\t\t{\r\n\t\t\t\tif (dbValue.Equals(SqlGuid.Null)) return null;\r\n\t\t\t\telse return new PhpBytes(((SqlGuid)dbValue).ToByteArray());\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(null);\r\n\t\t\treturn dbValue.ToString();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Maps database type name to the one displayed by PHP.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"typeName\">Database name.</param>\r\n\t\t/// <returns>PHP name.</returns>\r\n\t\tprotected override string MapFieldTypeName(string typeName)\r\n\t\t{\r\n\t\t\tswitch (typeName)\r\n\t\t\t{\r\n\t\t\t\tcase \"bit\": return \"bit\";\r\n\r\n\t\t\t\tcase \"int\":\r\n\t\t\t\tcase \"smallint\":\r\n\t\t\t\tcase \"tinyint\": return \"int\";\r\n\r\n\t\t\t\tcase \"bigint\":\r\n\t\t\t\tcase \"numeric\": return \"numeric\";\r\n\r\n\t\t\t\tcase \"money\":\r\n\t\t\t\tcase \"smallmoney\": return \"money\";\r\n\r\n\t\t\t\tcase \"decimal\":\r\n\t\t\t\tcase \"float\":\r\n\t\t\t\tcase \"real\": return \"real\";\r\n\r\n\t\t\t\tcase \"datetime\":\r\n\t\t\t\tcase \"smalldatetime\": return \"datetime\";\r\n\r\n\t\t\t\tcase \"char\":\r\n\t\t\t\tcase \"varchar\":\r\n\t\t\t\tcase \"sql_variant\": return \"char\";\r\n\r\n\t\t\t\tcase \"text\": return \"text\";\r\n\r\n\t\t\t\tcase \"timestamp\":\r\n\t\t\t\tcase \"uniqueidentifier\":\r\n\t\t\t\tcase \"binary\":\r\n\t\t\t\tcase \"varbinary\": return \"blob\";\r\n\r\n\t\t\t\tcase \"image\": return \"image\";\r\n\r\n\t\t\t\t// Unicode types (Phalanger specific):\r\n\r\n\t\t\t\tcase \"nvarchar\":\r\n\t\t\t\tcase \"nchar\": return \"nchar\";\r\n\r\n\t\t\t\tcase \"ntext\": return \"ntext\";\r\n\r\n\t\t\t\tdefault: return \"unknown\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a type of a specified PHP name is a numeric type.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"phpName\">PHP type name.</param>\r\n\t\t/// <returns>Whether the type is numeric (\"int\", \"numeric\", or \"real\").</returns>\r\n\t\tpublic bool IsNumericType(string phpName)\r\n\t\t{\r\n\t\t\tswitch (phpName)\r\n\t\t\t{\r\n\t\t\t\tcase \"int\":\r\n\t\t\t\tcase \"numeric\":\r\n\t\t\t\tcase \"real\":\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/MSSql/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetMsSql\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/MSSql/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetMsSql\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/PDO/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing PHP.Core;\n\n[assembly: AssemblyTitle(\"Phalanger PDO\")]\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - PDO\")]\n\n[assembly: PhpLibrary(typeof(PHP.Library.Data.PDOLibraryDescriptor), \"PDO\", new string[] { \"pdo\" })]"
  },
  {
    "path": "Source/Extensions/PDO/Extension.PDO.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{A3D74786-1B4A-4967-853E-C98D74E6990B}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Data</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.PDO</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"PDO.Const.cs\" />\r\n    <Compile Include=\"PDO.cs\" />\r\n    <Compile Include=\"PDOAttributeType.cs\" />\r\n    <Compile Include=\"PDOCaseConversion.cs\" />\r\n    <Compile Include=\"PDOConfiguration.cs\" />\r\n    <Compile Include=\"PDOConnection.cs\" />\r\n    <Compile Include=\"PDOCursorType.cs\" />\r\n    <Compile Include=\"PDOErrorMode.cs\" />\r\n    <Compile Include=\"PDOException.cs\" />\r\n    <Compile Include=\"PDOFetchType.cs\" />\r\n    <Compile Include=\"PDOGlobalConfig.cs\" />\r\n    <Compile Include=\"PDOLibraryDescriptor.cs\" />\r\n    <Compile Include=\"PDOLocalConfig.cs\" />\r\n    <Compile Include=\"PDONullHandling.cs\" />\r\n    <Compile Include=\"PDOParamType.cs\" />\r\n    <Compile Include=\"PDOStatement.cs\" />\r\n    <Compile Include=\"PDOStatement.PHP.cs\" />\r\n    <Compile Include=\"PDOStatics.cs\" />\r\n    <Compile Include=\"PDODriver.cs\" />\r\n    <Compile Include=\"SQLSTATES.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"Extension.PDO.nuspec\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/PDO/Extension.PDO.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension Data Objects PDO database</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/PDO/PDO.Const.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    partial class PDO\n    {\n        #region param_type\n        [ImplementsConstant(\"PARAM_NULL\")]\n        public const int PARAM_NULL = 0;\n        [ImplementsConstant(\"PARAM_INT\")]\n        public const int PARAM_INT = 1;\n        [ImplementsConstant(\"PARAM_STR\")]\n        public const int PARAM_STR = 2;\n        [ImplementsConstant(\"PARAM_LOB\")]\n        public const int PARAM_LOB = 3;\n        [ImplementsConstant(\"PARAM_STMT\")]\n        public const int PARAM_STMT = 4;\n        [ImplementsConstant(\"PARAM_BOOL\")]\n        public const int PARAM_BOOL = 5;\n        #endregion\n\n        #region fetch_type\n        [ImplementsConstant(\"FETCH_USE_DEFAULT\")]\n        public const int FETCH_USE_DEFAULT = 0;\n        [ImplementsConstant(\"FETCH_LAZY\")]\n        public const int FETCH_LAZY = 1;\n        [ImplementsConstant(\"FETCH_ASSOC\")]\n        public const int FETCH_ASSOC = 2;\n        [ImplementsConstant(\"FETCH_NUM\")]\n        public const int FETCH_NUM = 3;\n        [ImplementsConstant(\"FETCH_BOTH\")]\n        public const int FETCH_BOTH = 4;\n        [ImplementsConstant(\"FETCH_OBJ\")]\n        public const int FETCH_OBJ = 5;\n        [ImplementsConstant(\"FETCH_BOUND\")]\n        public const int FETCH_BOUND = 6; /* return true/false only; rely on bound columns */\n        [ImplementsConstant(\"FETCH_COLUMN\")]\n        public const int FETCH_COLUMN = 7;\t/* fetch a numbered column only */\n        [ImplementsConstant(\"FETCH_CLASS\")]\n        public const int FETCH_CLASS = 8;\t/* create an instance of named class, call ctor and set properties */\n        [ImplementsConstant(\"FETCH_INTO\")]\n        public const int FETCH_INTO = 9;\t\t/* fetch row into an existing object */\n        [ImplementsConstant(\"FETCH_FUNC\")]\n        public const int FETCH_FUNC = 10;\t\t/* fetch into function and return its result */\n        [ImplementsConstant(\"FETCH_NAMED\")]\n        public const int FETCH_NAMED = 11;    /* like FETCH_ASSOC, but can handle duplicate names */\n        [ImplementsConstant(\"FETCH_KEY_PAIR\")]\n        public const int FETCH_KEY_PAIR = 12;\t/* fetch into an array where the 1st column is a key and all subsequent columns are values */\n        #endregion\n\n        #region pdo_attribute_type\n        [ImplementsConstant(\"ATTR_AUTOCOMMIT\")]\n        public const int ATTR_AUTOCOMMIT = 0;\t/* use to turn on or off auto-commit mode */\n        [ImplementsConstant(\"ATTR_PREFETCH\")]\n        public const int ATTR_PREFETCH = 1;\t\t/* configure the prefetch size for drivers that support it. Size is in KB */\n        [ImplementsConstant(\"ATTR_TIMEOUT\")]\n        public const int ATTR_TIMEOUT = 2;\t\t/* connection timeout in seconds */\n        [ImplementsConstant(\"ATTR_ERRMODE\")]\n        public const int ATTR_ERRMODE = 3;\t\t/* control how errors are handled */\n        [ImplementsConstant(\"ATTR_SERVER_VERSION\")]\n        public const int ATTR_SERVER_VERSION = 4;\t/* database server version */\n        [ImplementsConstant(\"ATTR_CLIENT_VERSION\")]\n        public const int ATTR_CLIENT_VERSION = 5;\t/* client library version */\n        [ImplementsConstant(\"ATTR_SERVER_INFO\")]\n        public const int ATTR_SERVER_INFO = 6;\t\t/* server information */\n        [ImplementsConstant(\"ATTR_CONNECTION_STATUS\")]\n        public const int ATTR_CONNECTION_STATUS = 7;\t/* connection status */\n        [ImplementsConstant(\"ATTR_CASE\")]\n        public const int ATTR_CASE = 8;\t\t\t\t/* control case folding for portability */\n        [ImplementsConstant(\"ATTR_CURSOR_NAME\")]\n        public const int ATTR_CURSOR_NAME = 9;\t\t/* name a cursor for use in \"WHERE CURRENT OF <name>\" */\n        [ImplementsConstant(\"ATTR_CURSOR\")]\n        public const int ATTR_CURSOR = 10;\t\t\t/* cursor type */\n        [ImplementsConstant(\"ATTR_ORACLE_NULLS\")]\n        public const int ATTR_ORACLE_NULLS = 11;\t\t/* convert empty strings to NULL */\n        [ImplementsConstant(\"ATTR_PERSISTENT\")]\n        public const int ATTR_PERSISTENT = 12;\t\t/* pconnect style connection */\n        [ImplementsConstant(\"ATTR_STATEMENT_CLASS\")]\n        public const int ATTR_STATEMENT_CLASS = 13;\t/* array(classname=1; array(ctor_args)) to specify the class of the constructed statement */\n        [ImplementsConstant(\"ATTR_FETCH_TABLE_NAMES\")]\n        public const int ATTR_FETCH_TABLE_NAMES = 14; /* include table names in the column names=1; where available */\n        [ImplementsConstant(\"ATTR_FETCH_CATALOG_NAMES\")]\n        public const int ATTR_FETCH_CATALOG_NAMES = 15; /* include the catalog/db name names in the column names=1; where available */\n        [ImplementsConstant(\"ATTR_DRIVER_NAME\")]\n        public const int ATTR_DRIVER_NAME = 16;\t\t  /* name of the driver (as used in the constructor) */\n        [ImplementsConstant(\"ATTR_STRINGIFY_FETCHES\")]\n        public const int ATTR_STRINGIFY_FETCHES = 17;\t/* converts integer/float types to strings during fetch */\n        [ImplementsConstant(\"ATTR_MAX_COLUMN_LEN\")]\n        public const int ATTR_MAX_COLUMN_LEN = 18;\t/* make database calculate maximum length of data found in a column */\n        [ImplementsConstant(\"ATTR_DEFAULT_FETCH_MODE\")]\n        public const int ATTR_DEFAULT_FETCH_MODE = 19; /* Set the default fetch mode */\n        [ImplementsConstant(\"ATTR_EMULATE_PREPARES\")]\n        public const int ATTR_EMULATE_PREPARES = 20;  /* use query emulation rather than native */\n\n        /* this defines the start of the range for driver specific options.\n         * Drivers should define their own attribute constants beginning with this\n         * value. */\n        [ImplementsConstant(\"ATTR_DRIVER_SPECIFIC\")]\n        public const int ATTR_DRIVER_SPECIFIC = 1000;\n        #endregion\n\n        #region pdo_error_mode\n        [ImplementsConstant(\"ERRMODE_SILENT\")]\n        public const int ERRMODE_SILENT = 0;\t\t/* just set error codes */\n        [ImplementsConstant(\"ERRMODE_WARNING\")]\n        public const int ERRMODE_WARNING = 1;\t/* raise E_WARNING */\n        [ImplementsConstant(\"ERRMODE_EXCEPTION\")]\n        public const int ERRMODE_EXCEPTION = 2;\t/* throw exceptions */\n        #endregion\n\n        #region pdo_case_conversion\n        [ImplementsConstant(\"CASE_NATURAL\")]\n        public const int CASE_NATURAL = 0;\n        [ImplementsConstant(\"CASE_UPPER\")]\n        public const int CASE_UPPER = 1;\n        [ImplementsConstant(\"CASE_LOWER\")]\n        public const int CASE_LOWER = 2;\n        #endregion\n\n        #region pdo_null_handling\n        [ImplementsConstant(\"NULL_NATURAL\")]\n        public const int NULL_NATURAL = 0;\n        [ImplementsConstant(\"NULL_EMPTY_STRING\")]\n        public const int NULL_EMPTY_STRING = 1;\n        [ImplementsConstant(\"NULL_TO_STRING\")]\n        public const int NULL_TO_STRING = 2;\n        #endregion\n\n        #region pdo_cursor_type\n        [ImplementsConstant(\"CURSOR_FWDONLY\")]\n        public const int CURSOR_FWDONLY = 0;\t\t/* forward only cursor (default) */\n        [ImplementsConstant(\"CURSOR_SCROLL\")]\n        public const int CURSOR_SCROLL = 1;\t\t/* scrollable cursor */\n        #endregion\r\n\r\n        #region MySQL\r\n\r\n        [ImplementsConstant(\"MYSQL_ATTR_INIT_COMMAND\")]\r\n        public const int MYSQL_ATTR_INIT_COMMAND = 1002;\r\n\r\n        [ImplementsConstant(\"MYSQL_ATTR_USE_BUFFERED_QUERY\")]\r\n        public const int MYSQL_ATTR_USE_BUFFERED_QUERY = 1000;\r\n\r\n        #endregion\r\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDO.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Data;\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    /// <summary>\n    /// The PDO class\n    /// </summary>\n    [ImplementsType]\n    public partial class PDO : PhpObject\n    {\n        private static readonly Regex sm_regexDSNSplit;\n        /// <summary>\n        /// Static constructor\n        /// </summary>\n        static PDO()\n        {\n            sm_regexDSNSplit = new Regex(@\"(?<Keyword>\\w+)\\s*=\\s*(?<Value>.*)((?=\\W$)|\\z);?\", RegexOptions.Compiled | RegexOptions.CultureInvariant);\n        }\n\n        /// <summary>\n        /// Split DSN parameters\n        /// </summary>\n        /// <param name=\"dsn\">DSN to split</param>\n        /// <returns>Values</returns>\n        public static System.Collections.Specialized.NameValueCollection SplitDsnParams(string dsn)\n        {\n            var arr = new System.Collections.Specialized.NameValueCollection();\n            Match m = sm_regexDSNSplit.Match(dsn);\n            while (m.Success)\n            {\n                string name = m.Groups[\"Keyword\"].Value;\n                string value = m.Groups[\"Vaue\"].Value;\n\n                arr.Add(name, value);\n                m = m.NextMatch();\n            }\n            return arr;\n        }\n\n        private PDODriver m_driver;\r\n        private PDOConnection m_con;\r\n        private IDbTransaction m_tx;\n\n        /// <summary>\n        /// The driver instance\n        /// </summary>\n        public PDODriver Driver { get { return this.m_driver; } }\n        /// <summary>\n        /// Current transaction\n        /// </summary>\n        public IDbTransaction Transaction { get { return this.m_tx; } }\n        /// <summary>\n        /// Current database connection.\n        /// </summary>\r\n        public PDOConnection PDOConnection { get { return this.m_con; } }\r\n\r\n        /// <summary>\r\n        /// Current database connection.\r\n        /// </summary>\r\n        public IDbConnection Connection { get { return this.m_con.Connection; } }\r\n\r\n        #region Constructor\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public PDO(ScriptContext/*!*/context, bool newInstance)\n            : base(context, newInstance)\n        { }\n\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public PDO(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller)\n            : base(context, caller)\n        { }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object __construct(object instance, PhpStack stack)\n        {\n            object argDSN = stack.PeekValue(1);\n            object argUsername = stack.PeekValueOptional(2);\r\n            object argPassword = stack.PeekValueOptional(3);\r\n            object argDriverOptions = stack.PeekValueOptional(4);\n            stack.RemoveFrame();\n            return ((PDO)instance).__construct(stack.Context, argDSN, argUsername, argPassword, argDriverOptions);\n        }\n\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object __construct(ScriptContext context, object argdsn, [Optional] object argusername, [Optional] object argpassword, [Optional] object argdriver_options)\n        {\n            string dsn = PHP.Core.Convert.ObjectToString(argdsn);\r\n            string username = (argusername == Arg.Default) ? null : PHP.Core.Convert.ObjectToString(argusername);\r\n            string password = (argpassword == Arg.Default) ? null : PHP.Core.Convert.ObjectToString(argpassword);\n            object driver_options = (argdriver_options == Arg.Default) ? null : argdriver_options;\n\n            if (string.IsNullOrEmpty(dsn))\n                throw new ArgumentNullException();\n            \n            const string uri = \"uri:\";\n            if (dsn.StartsWith(uri))\n            {\n                Uri url = new Uri(dsn.Substring(uri.Length));\n                throw new NotImplementedException(\"PDO uri handling\");\n            }\n            string[] items = dsn.Split(new char[] { ':' }, 2);\n            if (items.Length == 1)\n            {\n                //TODO : try to search for aliasing\n                throw new NotImplementedException(\"PDO DSN aliasing\");\n            }\n            if (items.Length == 2)\n            {\n                string drvName = items[0];\n                this.m_driver = PDOLibraryDescriptor.GetProvider(drvName);\n                if (this.m_driver == null)\n                {\n                    PDOException.Throw(context, \"Driver not found\", null, null, null);\n                    return null;\n                }\r\n                this.m_con = this.m_driver.OpenConnection(context, items[1], username, password, driver_options);\n            }\n\n            if (this.m_driver == null || this.m_con == null)\n            {\n                PDOException.Throw(context, \"Invalid DSN\", null, null, null);\n                return null;\n            }\n\n            //Defaults\n            this.SetAttributeValueNoCheck(ATTR_AUTOCOMMIT, true);\n            this.SetAttributeValueNoCheck(ATTR_DEFAULT_FETCH_MODE, FETCH_BOTH);\n            this.SetAttributeValueNoCheck(ATTR_DRIVER_NAME, this.m_driver.Scheme);\n            this.SetAttributeValueNoCheck(ATTR_ORACLE_NULLS, NULL_NATURAL);\n            this.SetAttributeValueNoCheck(ATTR_STRINGIFY_FETCHES, false);\n            this.SetAttributeValueNoCheck(ATTR_TIMEOUT, 30000);\n\n            return null;\n        }\n        #endregion\n\n        #region getAvailableDrivers\n        [PhpVisible]\n        [ImplementsMethod]\n        public static object getAvailableDrivers(ScriptContext context)\n        {\n            PhpArray arr = new PhpArray(PDOStatics.Drivers());\n            return arr;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getAvailableDrivers(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return getAvailableDrivers(stack.Context);\n        }\n        #endregion\n\n        #region Attributes\n        private readonly Dictionary<int, object> m_attributes = new Dictionary<int, object>();\n\n        public bool SetAttribute(int att, object value)\n        {\n            if (this.m_driver.IsValidAttributeValue(att, value))\n            {\n                return this.SetAttributeValueNoCheck(att, value);\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n        internal bool SetAttributeValueNoCheck(int att, object value)\n        {\n            this.m_attributes[att] = value;\n            return true;\n        }\n        #endregion\n\n        #region setAttribute\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object setAttribute(ScriptContext context, object attribute, object value)\n        {\n            int attInt = PHP.Core.Convert.ObjectToInteger(attribute);\n            return this.SetAttribute(attInt, value);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setAttribute(object instance, PhpStack stack)\n        {\n            object attribute = stack.PeekValue(1);\n            object value = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((PDO)instance).setAttribute(stack.Context, attribute, value);\n        }\n        #endregion\n\n        #region getAttribute\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object getAttribute(ScriptContext context, object attribute)\n        {\n            int attInt = PHP.Core.Convert.ObjectToInteger(attribute);\n            return this.GetAttribute(attInt, null);\n        }\n\n        public object GetAttribute(int attribute, object defaultValue)\n        {\n            if (this.m_attributes.ContainsKey(attribute))\n            {\n                return this.m_attributes[attribute];\n            }\n            return defaultValue;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getAttribute(object instance, PhpStack stack)\n        {\n            object attribute = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((PDO)instance).getAttribute(stack.Context, attribute);\n        }\n        #endregion\n\n        #region quote\n        \n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object quote(ScriptContext context, object str, [Optional] object parameter_type)\n        {\n            PDOParamType pt = PDOParamType.PDO_PARAM_STR;\n            if (parameter_type != null && parameter_type != Arg.Default)\n                pt = (PDOParamType)PHP.Core.Convert.ObjectToInteger(parameter_type);\n\n            return this.m_driver.Quote(context, PHP.Core.Convert.ObjectToString(str), pt);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object quote(object instance, PhpStack stack)\n        {\n            object str = stack.PeekValue(1);\n            object paramType = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((PDO)instance).quote(stack.Context, str, paramType);\n        }\n        #endregion\n\n        #region query\n        \n        [PhpVisible]\n        [ImplementsMethod]\n        public virtual object query(ScriptContext context, object statement, [Optional] object fetch_to_mode, [Optional] object fetch_to_dest, [Optional] object fetch_to_args)\n        {\n            string query = PHP.Core.Convert.ObjectToString(statement);\n            PDOStatement stmt = this.m_driver.CreateStatement(context, this);\n\n            stmt.Init(query, null);\r\n\r\n            if (fetch_to_mode != null && fetch_to_mode != Arg.Default)\n                stmt.setFetchMode(context,\n                    fetch_to_mode,\n                    (fetch_to_dest != Arg.Default) ? fetch_to_dest : null,\n                    (fetch_to_args != Arg.Default) ? fetch_to_args : null);\n            \n            if (stmt.ExecuteStatement())\n            {\n                return stmt;\n            }\n            else\n            {\n                return false;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object query(object instance, PhpStack stack)\n        {\n            object statement = stack.PeekValue(1);\n            object fetch_to_mode = stack.PeekValueOptional(2);\n            object fetch_to_dest = stack.PeekValueOptional(3);\n            object fetch_to_args = stack.PeekValueOptional(4);\n            stack.RemoveFrame();\n            return ((PDO)instance).query(stack.Context, statement, fetch_to_mode, fetch_to_dest, fetch_to_args);\n        }\n        #endregion\n\n        #region prepare\n        \n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object prepare(ScriptContext context, object statement, [Optional] object driver_options)\n        {\n            string query = PHP.Core.Convert.ObjectToString(statement);\n            Dictionary<int, object> options = new Dictionary<int, object>();\n            if (driver_options is PhpArray)\n            {\n                PhpArray arr = (PhpArray)driver_options;\n                foreach (var key in arr.Keys)\n                {\n                    Debug.Assert(!key.IsInteger);\n                    int keyInt = key.Integer;\n                    options.Add(keyInt, arr[key]);\n                }\n            }\n\n            PDOStatement stmt = this.m_driver.CreateStatement(context, this);\n            stmt.Prepare(context, query, options);\n            return stmt;\n        }\n\n        public static object prepare(object instance, PhpStack stack)\n        {\n            object statement = stack.PeekValue(1);\n            object driver_options = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((PDO)instance).prepare(stack.Context, statement, driver_options);\n        }\n        #endregion\n\n        #region beginTransaction\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object beginTransaction(ScriptContext context)\n        {\n            if (this.m_tx != null)\n                return false;\r\n\r\n            this.PDOConnection.ClosePendingReader();\n\n            this.m_tx = this.Connection.BeginTransaction();\n            return true;\n        }\n\n        public static object beginTransaction(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).beginTransaction(stack.Context);\n        }\n        #endregion\n\n        #region commit\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object commit(ScriptContext context)\n        {\n            if (this.m_tx != null)\n            {\r\n                this.PDOConnection.ClosePendingReader();\n\n                this.m_tx.Commit();\n                this.m_tx.Dispose();\n                this.m_tx = null;\n                return true;\n            }\n            return false;\n        }\n\n        public static object commit(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).commit(stack.Context);\n        }\n        #endregion\n\n        #region rollback\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object rollback(ScriptContext context)\n        {\n            if (this.m_tx != null)\n            {\r\n                this.PDOConnection.ClosePendingReader();\n\n                this.m_tx.Rollback();\n                this.m_tx.Dispose();\n                this.m_tx = null;\n                return true;\n            }\n            return false;\n\n        }\n\n        public static object rollback(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).rollback(stack.Context);\n        }\n        #endregion\n\n        #region errorCode\n        [ImplementsMethod, PhpVisible]\r\n        public virtual object errorCode(ScriptContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object errorCode(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).errorCode(stack.Context);\n        }\n        #endregion\n\n        #region errorInfo\n        [ImplementsMethod, PhpVisible]\r\n        public virtual object errorInfo(ScriptContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object errorInfo(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).errorInfo(stack.Context);\n        }\n        #endregion\n\n        #region exec\n        [ImplementsMethod, PhpVisible]\r\n        public virtual object exec(ScriptContext context, object statement)\n        {\n            throw new NotImplementedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object exec(object instance, PhpStack stack)\n        {\n            object statement = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((PDO)instance).exec(stack.Context, statement);\n        }\n        #endregion\n\n        #region inTransaction\n        [ImplementsMethod, PhpVisible]\r\n        public virtual object inTransaction(ScriptContext context)\n        {\n            return this.Transaction != null;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object inTransaction(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDO)instance).inTransaction(stack.Context);\n        }\n        #endregion\n\n        #region lastInsertId\n        \n        [ImplementsMethod, PhpVisible]\r\n        public virtual object lastInsertId(ScriptContext context, [Optional] object name)\n        {\r\n            return this.getLastInsertId(\n                context,\n                (name != Arg.Default && name != null) ? Core.Convert.ObjectToString(name) : null);\n        }\n\n        private object getLastInsertId(ScriptContext context, string name)\n        {\n            return this.m_driver.GetLastInsertId(context, this, name);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object lastInsertId(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValueOptional(1);\n            stack.RemoveFrame();\n            return ((PDO)instance).lastInsertId(stack.Context, name);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOAttributeType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOAttributeType : int\n    {\n        [ImplementsConstant(\"PDO_ATTR_AUTOCOMMIT\")]\n        PDO_ATTR_AUTOCOMMIT,\t/* use to turn on or off auto-commit mode */\n        [ImplementsConstant(\"PDO_ATTR_PREFETCH\")]\n        PDO_ATTR_PREFETCH,\t\t/* configure the prefetch size for drivers that support it. Size is in KB */\n        [ImplementsConstant(\"PDO_ATTR_TIMEOUT\")]\n        PDO_ATTR_TIMEOUT,\t\t/* connection timeout in seconds */\n        [ImplementsConstant(\"PDO_ATTR_ERRMODE\")]\n        PDO_ATTR_ERRMODE,\t\t/* control how errors are handled */\n        [ImplementsConstant(\"PDO_ATTR_SERVER_VERSION\")]\n        PDO_ATTR_SERVER_VERSION,\t/* database server version */\n        [ImplementsConstant(\"PDO_ATTR_CLIENT_VERSION\")]\n        PDO_ATTR_CLIENT_VERSION,\t/* client library version */\n        [ImplementsConstant(\"PDO_ATTR_SERVER_INFO\")]\n        PDO_ATTR_SERVER_INFO,\t\t/* server information */\n        [ImplementsConstant(\"PDO_ATTR_CONNECTION_STATUS\")]\n        PDO_ATTR_CONNECTION_STATUS,\t/* connection status */\n        [ImplementsConstant(\"PDO_ATTR_CASE\")]\n        PDO_ATTR_CASE,\t\t\t\t/* control case folding for portability */\n        [ImplementsConstant(\"PDO_ATTR_CURSOR_NAME\")]\n        PDO_ATTR_CURSOR_NAME,\t\t/* name a cursor for use in \"WHERE CURRENT OF <name>\" */\n        [ImplementsConstant(\"PDO_ATTR_CURSOR\")]\n        PDO_ATTR_CURSOR,\t\t\t/* cursor type */\n        [ImplementsConstant(\"PDO_ATTR_ORACLE_NULLS\")]\n        PDO_ATTR_ORACLE_NULLS,\t\t/* convert empty strings to NULL */\n        [ImplementsConstant(\"PDO_ATTR_PERSISTENT\")]\n        PDO_ATTR_PERSISTENT,\t\t/* pconnect style connection */\n        [ImplementsConstant(\"PDO_ATTR_STATEMENT_CLASS\")]\n        PDO_ATTR_STATEMENT_CLASS,\t/* array(classname, array(ctor_args)) to specify the class of the constructed statement */\n        [ImplementsConstant(\"PDO_ATTR_FETCH_TABLE_NAMES\")]\n        PDO_ATTR_FETCH_TABLE_NAMES, /* include table names in the column names, where available */\n        [ImplementsConstant(\"PDO_ATTR_FETCH_CATALOG_NAMES\")]\n        PDO_ATTR_FETCH_CATALOG_NAMES, /* include the catalog/db name names in the column names, where available */\n        [ImplementsConstant(\"PDO_ATTR_DRIVER_NAME\")]\n        PDO_ATTR_DRIVER_NAME,\t\t  /* name of the driver (as used in the constructor) */\n        [ImplementsConstant(\"PDO_ATTR_STRINGIFY_FETCHES\")]\n        PDO_ATTR_STRINGIFY_FETCHES,\t/* converts integer/float types to strings during fetch */\n        [ImplementsConstant(\"PDO_ATTR_MAX_COLUMN_LEN\")]\n        PDO_ATTR_MAX_COLUMN_LEN,\t/* make database calculate maximum length of data found in a column */\n        [ImplementsConstant(\"PDO_ATTR_DEFAULT_FETCH_MODE\")]\n        PDO_ATTR_DEFAULT_FETCH_MODE, /* Set the default fetch mode */\n        [ImplementsConstant(\"PDO_ATTR_EMULATE_PREPARES\")]\n        PDO_ATTR_EMULATE_PREPARES,  /* use query emulation rather than native */\n\n        /* this defines the start of the range for driver specific options.\n         * Drivers should define their own attribute constants beginning with this\n         * value. */\n        [ImplementsConstant(\"PDO_ATTR_DRIVER_SPECIFIC\")]\n        PDO_ATTR_DRIVER_SPECIFIC = 1000\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOCaseConversion.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOCaseConversion\n    {\n        [ImplementsConstant(\"PDO_CASE_NATURAL\")]\n        PDO_CASE_NATURAL,\n        [ImplementsConstant(\"PDO_CASE_UPPER\")]\n        PDO_CASE_UPPER,\n        [ImplementsConstant(\"PDO_CASE_LOWER\")]\n        PDO_CASE_LOWER,\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\nusing System.Collections;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOConfiguration\n    {\n        private PDOConfiguration() { }\n\n        #region Legacy Configuration\n\n        /// <summary>\n        /// Gets, sets, or restores a value of a legacy configuration option.\n        /// </summary>\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\n        {\n            PDOLocalConfig local = (PDOLocalConfig)config.GetLibraryConfig(PDOLibraryDescriptor.Singleton);\n            PDOLocalConfig @default = DefaultLocal;\n            PDOGlobalConfig global = Global;\n\n            //switch (option)\n            //{\n            //    // local:\n\n            //    // global:\n\n            //}\n\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\n            return null;\n        }\n\n        /// <summary>\n        /// Writes PDO legacy options and their values to XML text stream.\n        /// Skips options whose values are the same as default values of Phalanger.\n        /// </summary>\n        /// <param name=\"writer\">XML writer.</param>\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\n        {\n            if (writer == null)\n                throw new ArgumentNullException(\"writer\");\n            if (options == null)\n                throw new ArgumentNullException(\"options\");\n\n            PDOLocalConfig local = new PDOLocalConfig();\n            PDOGlobalConfig global = new PDOGlobalConfig();\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\n\n            ow.StartSection(\"pdo\");\n\n            // local:\n\n            // global:\n\n            ow.WriteEnd();\n        }\n\n        /// <summary>\n        /// Registers legacy ini-options.\n        /// </summary>\n        internal static void RegisterLegacyOptions()\n        {\n            //const string s = PDOLibraryDescriptor.ExtensionName;\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\n\n            //// local:\n\n            //// global:\n        }\n\n        #endregion\n\n        #region Configuration Getters\n\n        /// <summary>\n        /// Gets the library configuration associated with the current script context.\n        /// </summary>\n        public static PDOLocalConfig Local\n        {\n            get\n            {\n                return (PDOLocalConfig)Configuration.Local.GetLibraryConfig(PDOLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the default library configuration.\n        /// </summary>\n        public static PDOLocalConfig DefaultLocal\n        {\n            get\n            {\n                return (PDOLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(PDOLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the global library configuration.\n        /// </summary>\n        public static PDOGlobalConfig Global\n        {\n            get\n            {\n                return (PDOGlobalConfig)Configuration.Global.GetLibraryConfig(PDOLibraryDescriptor.Singleton);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOConnection.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Data;\r\n\r\nnamespace PHP.Library.Data\r\n{\r\n    public sealed class PDOConnection : PhpDbConnection\r\n    {\r\n        /// <summary>\r\n        /// Pending DB data reader.\r\n        /// </summary>\r\n        public IDataReader PendingReader { get { return this.pendingReader; } set { this.pendingReader = value; } }\r\n\r\n        /// <summary>\r\n        /// Last DB command. Used internally by PDO driver.\r\n        /// </summary>\r\n        public IDbCommand LastCommand { get; set; }\r\n\r\n        public PDOConnection(string/*!*/ connectionString, IDbConnection/*!*/ connection, string/*!*/ name)\r\n            : base(connectionString, connection, name)\r\n        {\r\n        }\r\n\r\n        protected override IDbCommand CreateCommand()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        protected override PhpDbResult GetResult(PhpDbConnection connection, IDataReader reader, bool convertTypes)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n//    [Obsolete(\"replaced into PDO\", true)]\r\n//    public abstract class PDOConnection\r\n//    {\r\n//        private readonly PDODriver m_driver;\r\n//        private readonly Dictionary<int, object> m_attributes;\r\n\r\n//        protected IDbTransaction CurrentTransaction { get { return this.m_tx; } }\r\n\r\n//        public PDODriver Driver { get { return this.m_driver; } }\r\n\r\n//        public PDOConnection(PDODriver driver)\r\n//        {\r\n//            this.m_driver = driver;\r\n//            this.m_attributes = new Dictionary<int, object>();\r\n\r\n//            this.SetAttributeValueNoCheck(PDOAttributeType.PDO_ATTR_AUTOCOMMIT, true);\r\n\r\n//            this.SetAttributeDefaults();\r\n//        }\r\n\r\n//        internal bool SetAttribute(int att, object value)\r\n//        {\r\n//            return this.SetAttributeValue(att, value);\r\n//        }\r\n\r\n//        protected abstract void SetAttributeDefaults();\r\n\r\n//        protected bool SetAttributeValueNoCheck(PDOAttributeType attribute, object value)\r\n//        {\r\n//            return this.SetAttributeValueNoCheck((int)attribute, value);\r\n//        }\r\n//        private bool SetAttributeValueNoCheck(int attribute, object value)\r\n//        {\r\n//            if (this.m_attributes.ContainsKey((int)attribute))\r\n//                this.m_attributes[attribute] = value;\r\n//            else\r\n//                this.m_attributes.Add(attribute, value);\r\n//            return true;\r\n//        }\r\n\r\n//        protected virtual bool SetAttributeValue(int attribute, object value)\r\n//        {\r\n//            if (this.ValidateAttribute(attribute, value))\r\n//            {\r\n//                return this.SetAttributeValueNoCheck(attribute, value);\r\n//            }\r\n//            else\r\n//            {\r\n//                return false;\r\n//            }\r\n//        }\r\n\r\n//        internal object GetAttribute(int att)\r\n//        {\r\n//            return this.GetAttributeValue(att);\r\n//        }\r\n\r\n//        protected virtual object GetAttributeValue(int att)\r\n//        {\r\n//            if (this.m_attributes.ContainsKey(att))\r\n//            {\r\n//                return this.m_attributes[att];\r\n//            }\r\n//            else\r\n//            {\r\n//                return null;\r\n//            }\r\n//        }\r\n\r\n//        internal bool ValidateAttribute(int attribute, object value)\r\n//        {\r\n//            if (Enum.IsDefined(typeof(PDOAttributeType), attribute))\r\n//            {\r\n//                PDOAttributeType att = (PDOAttributeType)attribute;\r\n//                switch (att)\r\n//                {\r\n//                    case PDOAttributeType.PDO_ATTR_AUTOCOMMIT: return value is bool;\r\n//                    case PDOAttributeType.PDO_ATTR_CASE: return Enum.IsDefined(typeof(PDOCaseConversion), value);\r\n//                    //case PDOAttributeType.PDO_ATTR_CLIENT_VERSION: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_CONNECTION_STATUS: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_CURSOR: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_CURSOR_NAME: return false;\r\n//                    case PDOAttributeType.PDO_ATTR_DEFAULT_FETCH_MODE: return Enum.IsDefined(typeof(PDOFetchType), value);\r\n//                    //case PDOAttributeType.PDO_ATTR_DRIVER_NAME: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_DRIVER_SPECIFIC: return false;\r\n//                    case PDOAttributeType.PDO_ATTR_EMULATE_PREPARES: return value is bool;\r\n//                    case PDOAttributeType.PDO_ATTR_ERRMODE: return Enum.IsDefined(typeof(PDOErrorMode), value);\r\n//                    case PDOAttributeType.PDO_ATTR_FETCH_CATALOG_NAMES: return value is bool;\r\n//                    //case PDOAttributeType.PDO_ATTR_FETCH_TABLE_NAMES: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_MAX_COLUMN_LEN: return false;\r\n//                    case PDOAttributeType.PDO_ATTR_ORACLE_NULLS: return Enum.IsDefined(typeof(PDONullHandling), value);\r\n//                    //case PDOAttributeType.PDO_ATTR_PERSISTENT: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_PREFETCH: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_SERVER_INFO: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_SERVER_VERSION: return false;\r\n//                    //case PDOAttributeType.PDO_ATTR_STATEMENT_CLASS: return false;\r\n//                    case PDOAttributeType.PDO_ATTR_STRINGIFY_FETCHES: return value is bool;\r\n//                    case PDOAttributeType.PDO_ATTR_TIMEOUT: return value is int;\r\n//                }\r\n//            }\r\n//            return ValidateAttributeValue(attribute, value);\r\n//        }\r\n\r\n//        protected abstract bool ValidateAttributeValue(int attribute, object value);\r\n\r\n//        //public abstract bool ExecuteStatement(PDOStatement stmt, out IDbCommand com, out IDataReader dr);\r\n\r\n//        protected int GetAttributeValueInt(PDOAttributeType attribute, int defaultValue)\r\n//        {\r\n//            if (this.m_attributes.ContainsKey((int)attribute))\r\n//            {\r\n//                return (int)this.m_attributes[(int)attribute];\r\n//            }\r\n//            else\r\n//            {\r\n//                return defaultValue;\r\n//            }\r\n//        }\r\n\r\n//        internal bool beginTransaction()\r\n//        {\r\n//            if (this.m_tx != null)\r\n//            {\r\n//                return false;\r\n//            }\r\n//            this.m_tx = this.begin_transaction();\r\n//            this.SetAttributeValueNoCheck(PDOAttributeType.PDO_ATTR_AUTOCOMMIT, false);\r\n//            return this.m_tx != null;\r\n//        }\r\n\r\n//        protected abstract IDbTransaction begin_transaction();\r\n\r\n//        internal bool commit()\r\n//        {\r\n//            if (this.m_tx == null)\r\n//            {\r\n//                return false;\r\n//            }\r\n//            this.m_tx.Commit();\r\n//            this.m_tx = null;\r\n//            this.SetAttributeValueNoCheck(PDOAttributeType.PDO_ATTR_AUTOCOMMIT, true);\r\n//            return true;\r\n//        }\r\n\r\n//        internal bool rollback()\r\n//        {\r\n//            if (this.m_tx == null)\r\n//            {\r\n//                return false;\r\n//            }\r\n//            this.m_tx.Rollback();\r\n//            this.m_tx = null;\r\n//            this.SetAttributeValueNoCheck(PDOAttributeType.PDO_ATTR_AUTOCOMMIT, true);\r\n//            return true;\r\n//        }\r\n//    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOCursorType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOCursorType\n    {\n        [ImplementsConstant(\"PDO_CURSOR_FWDONLY\")]\n        PDO_CURSOR_FWDONLY = 0,\t\t/* forward only cursor (default) */\n        [ImplementsConstant(\"PDO_CURSOR_SCROLL\")]\n        PDO_CURSOR_SCROLL = 1,\t\t/* scrollable cursor */\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDODriver.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Data;\n\nnamespace PHP.Library.Data\n{\n    public abstract class PDODriver\n    {\n        public abstract string Scheme { get; }\r\n        public abstract PDOConnection OpenConnection(ScriptContext context, string dsn_data, string username, string password, object argdriver_options);\n        public abstract object Quote(ScriptContext context, object strobj, PDOParamType param_type);\n\n        public virtual string GetParameterName(string name)\n        {\n            return string.Format(\"@{0}\", name);\n        }\r\n\r\n        public virtual object ConvertDbValue(object sqlValue, string dataType)\r\n        {\r\n            if (sqlValue == null || sqlValue.GetType() == typeof(string))\r\n                return sqlValue;\r\n\r\n            if (sqlValue.GetType() == typeof(double))\r\n                return Core.Convert.DoubleToString((double)sqlValue);\r\n\r\n            if (sqlValue == System.DBNull.Value)\r\n                return null;\r\n\r\n            if (sqlValue.GetType() == typeof(int))\r\n                return ((int)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(uint))\r\n                return ((uint)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(bool))\r\n                return (bool)sqlValue ? \"1\" : \"0\";\r\n\r\n            if (sqlValue.GetType() == typeof(byte))\r\n                return ((byte)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(sbyte))\r\n                return ((sbyte)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(short))\r\n                return ((short)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(ushort))\r\n                return ((ushort)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(float))\r\n                return Core.Convert.DoubleToString((float)sqlValue);\r\n\r\n            if (sqlValue.GetType() == typeof(DateTime))\r\n                return ConvertDateTime(dataType, (DateTime)sqlValue);\r\n\r\n            if (sqlValue.GetType() == typeof(long))\r\n                return ((long)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(ulong))\r\n                return ((ulong)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(TimeSpan))\r\n                return ((TimeSpan)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(decimal))\r\n                return ((decimal)sqlValue).ToString();\r\n\r\n            if (sqlValue.GetType() == typeof(byte[]))\r\n                return new PhpBytes((byte[])sqlValue);\r\n\r\n            return sqlValue;\r\n        }\r\n\r\n        protected static string ConvertDateTime(string dataType, DateTime value)\r\n        {\r\n            if (dataType == \"DATE\" || dataType == \"NEWDATE\")\r\n                return value.ToString(\"yyyy-MM-dd\");\r\n            else\r\n                return value.ToString(\"yyyy-MM-dd HH:mm:ss\");\r\n        }\n\n        public abstract PDOStatement CreateStatement(ScriptContext context, PDO pdo);\n\n        internal bool IsValidAttributeValue(int att, object value)\n        {\n            return this.IsValueValidForAttribute(att, value);\n        }\n\n        protected abstract bool IsValueValidForAttribute(int att, object value);\n\n        public abstract object GetLastInsertId(ScriptContext context, PDO pdo, string name);\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOErrorMode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOErrorMode\n    {\n        [ImplementsConstant(\"PDO_ERRMODE_SILENT\")]\n        PDO_ERRMODE_SILENT,\t\t/* just set error codes */\n        [ImplementsConstant(\"PDO_ERRMODE_WARNING\")]\n        PDO_ERRMODE_WARNING,\t/* raise E_WARNING */\n        [ImplementsConstant(\"PDO_ERRMODE_EXCEPTION\")]\n        PDO_ERRMODE_EXCEPTION\t/* throw exceptions */\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOException.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing PHP.Library.SPL;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Reflection;\r\nusing System.Runtime.Serialization;\n\nnamespace PHP.Library.Data\n{\n    [ImplementsType]\n    public class PDOException : RuntimeException\n    {\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public PDOException(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public PDOException(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected PDOException(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\n\n        private PhpArray m_errorInfo;\n\n        private PDOException(ScriptContext context, PhpArray errorInfo)\n            : base(context, true)\n        {\n            this.m_errorInfo = errorInfo;\n        }\n\n        [PhpVisible]\n        public PhpArray errorInfo { get { return this.m_errorInfo; } }\n\n        public static void Throw(ScriptContext context, string message, PhpArray errorInfo, object code, object previous)\n        {\n            PHP.Library.SPL.Exception.ThrowSplException(ctx => new PDOException(ctx, errorInfo), context, message, code, previous);\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOFetchType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOFetchType\n    {\n        [ImplementsConstant(\"PDO_FETCH_USE_DEFAULT\")]\n        PDO_FETCH_USE_DEFAULT = PDO.FETCH_USE_DEFAULT,\n        [ImplementsConstant(\"PDO_FETCH_LAZY\")]\n        PDO_FETCH_LAZY = PDO.FETCH_LAZY,\n        [ImplementsConstant(\"PDO_FETCH_ASSOC\")]\n        PDO_FETCH_ASSOC = PDO.FETCH_ASSOC,\n        [ImplementsConstant(\"PDO_FETCH_NUM\")]\n        PDO_FETCH_NUM = PDO.FETCH_NUM,\n        [ImplementsConstant(\"PDO_FETCH_BOTH\")]\n        PDO_FETCH_BOTH = PDO.FETCH_BOTH,\n        [ImplementsConstant(\"PDO_FETCH_OBJ\")]\n        PDO_FETCH_OBJ = PDO.FETCH_OBJ,\n        [ImplementsConstant(\"PDO_FETCH_BOUND\")]\n        PDO_FETCH_BOUND = PDO.FETCH_BOUND, /* return true/false only; rely on bound columns */\n        [ImplementsConstant(\"PDO_FETCH_COLUMN\")]\n        PDO_FETCH_COLUMN = PDO.FETCH_COLUMN,\t/* fetch a numbered column only */\n        [ImplementsConstant(\"PDO_FETCH_CLASS\")]\n        PDO_FETCH_CLASS = PDO.FETCH_CLASS,\t/* create an instance of named class, call ctor and set properties */\n        [ImplementsConstant(\"PDO_FETCH_INTO\")]\n        PDO_FETCH_INTO = PDO.FETCH_INTO,\t\t/* fetch row into an existing object */\n        [ImplementsConstant(\"PDO_FETCH_FUNC\")]\n        PDO_FETCH_FUNC = PDO.FETCH_FUNC,\t\t/* fetch into function and return its result */\n        [ImplementsConstant(\"PDO_FETCH_NAMED\")]\n        PDO_FETCH_NAMED = PDO.FETCH_NAMED,    /* like PDO_FETCH_ASSOC, but can handle duplicate names */\n        [ImplementsConstant(\"PDO_FETCH_KEY_PAIR\")]\n        PDO_FETCH_KEY_PAIR = PDO.FETCH_KEY_PAIR,\t/* fetch into an array where the 1st column is a key and all subsequent columns are values */\n        [ImplementsConstant(\"PDO_FETCH__MAX\")]\n        PDO_FETCH__MAX /* must be last */\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOGlobalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    [Serializable]\n    public sealed class PDOGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal PDOGlobalConfig() { }\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOGlobalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOLibraryDescriptor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOLibraryDescriptor : PhpLibraryDescriptor\n    {\n        /// <summary>\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\n        /// </summary>\n        internal static PDOLibraryDescriptor Singleton { get { return singleton; } }\n        private static PDOLibraryDescriptor singleton;\n\n        internal const string ExtensionName = \"pdo\";\n\n        /// <summary>\n        /// Called by the Core after the library is loaded.\n        /// </summary>\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\n        {\n            base.Loaded(assemblyAttribute, configStore);\n            singleton = this;\n            PDOConfiguration.RegisterLegacyOptions();\n        }\n\n        /// <summary>\n        /// Parses a configuration section belonging to the MySql library. \n        /// </summary>\n        /// <param name=\"result\">A configuration context.</param>\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\n        /// <returns>Updated configuration context.</returns>\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\n        {\n            // parses XML tree:\n            ConfigUtils.ParseNameValueList(section, context, (PDOLocalConfig)result.Local, (PDOGlobalConfig)result.Global);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates empty library configuration context.\n        /// </summary>\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\n        protected override ConfigContextBase CreateConfigContext()\n        {\n            return new ConfigContextBase(new PDOLocalConfig(), new PDOGlobalConfig());\n        }\n\n        private static readonly Dictionary<string, PDODriver> m_providers = new Dictionary<string, PDODriver>(StringComparer.Ordinal);\n\n        public static void RegisterProvider(PDODriver driver)\n        {\n            if (driver == null)\n                throw new ArgumentNullException();\n\n            string scheme = driver.Scheme;\n            if (!m_providers.ContainsKey(scheme))\n            {\n                m_providers.Add(scheme, driver);\n            }\n        }\n\n        internal static PDODriver GetProvider(string drvName)\n        {\n            if (m_providers.ContainsKey(drvName))\n            {\n                return m_providers[drvName];\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n        internal static string[] GetDrivers()\n        {\n            return m_providers.Keys.ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOLocalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    [Serializable]\n    public sealed class PDOLocalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal PDOLocalConfig()\n        {\n        }\n\n        //public int AssocCase = 0;\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOLocalConfig)this.MemberwiseClone();\n        }\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDONullHandling.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDONullHandling\n    {\n        [ImplementsConstant(\"PDO_NULL_NATURAL\")]\n        PDO_NULL_NATURAL = 0,\n        [ImplementsConstant(\"PDO_NULL_EMPTY_STRING\")]\n        PDO_NULL_EMPTY_STRING = 1,\n        [ImplementsConstant(\"PDO_NULL_TO_STRING\")]\n        PDO_NULL_TO_STRING = 2,\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOParamType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public enum PDOParamType : int\n    {\n        [ImplementsConstant(\"PDO_PARAM_NULL\")]\n        PDO_PARAM_NULL,\n\n        /// <summary>\n        /// int as in long (the php native int type).\n        /// If you mark a column as an int, PDO expects get_col to return\n        /// a pointer to a long\n        /// </summary>\n        [ImplementsConstant(\"PDO_PARAM_INT\")]\n        PDO_PARAM_INT,\n\n        /* get_col ptr should point to start of the string buffer */\n        [ImplementsConstant(\"PDO_PARAM_STR\")]\n        PDO_PARAM_STR,\n\n        /* get_col: when len is 0 ptr should point to a php_stream *,\n         * otherwise it should behave like a string. Indicate a NULL field\n         * value by setting the ptr to NULL */\n        [ImplementsConstant(\"PDO_PARAM_LOB\")]\n        PDO_PARAM_LOB,\n\n        /* get_col: will expect the ptr to point to a new PDOStatement object handle,\n         * but this isn't wired up yet */\n        [ImplementsConstant(\"PDO_PARAM_STMT\")]\n        PDO_PARAM_STMT, /* hierarchical result set */\n\n        /* get_col ptr should point to a zend_bool */\n        [ImplementsConstant(\"PDO_PARAM_BOOL\")]\n        PDO_PARAM_BOOL\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOStatement.PHP.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.ComponentModel;\r\nusing System.Runtime.InteropServices;\n\nnamespace PHP.Library.Data\n{\n    partial class PDOStatement\n    {\n        [ImplementsConstant(\"FETCH_ORI_NEXT\")]\n        public const int FETCH_ORI_NEXT = 0;\n        [ImplementsConstant(\"FETCH_ORI_PRIOR\")]\n        public const int FETCH_ORI_PRIOR = 1;\n        [ImplementsConstant(\"FETCH_ORI_FIRST\")]\n        public const int FETCH_ORI_FIRST = 2;\n        [ImplementsConstant(\"FETCH_ORI_LAST\")]\n        public const int FETCH_ORI_LAST = 3;\n        [ImplementsConstant(\"FETCH_ORI_ABS\")]\n        public const int FETCH_ORI_ABS = 4;\n        [ImplementsConstant(\"FETCH_ORI_REL\")]\n        public const int FETCH_ORI_REL = 5;\n        \n        #region setFetchMode\n        \n        [PhpVisible]\n        [ImplementsMethod]\n        [return: CastToFalse]\r\n        public virtual object setFetchMode(ScriptContext context, object fetch_to_mode, [Optional]object fetch_to_dest/*=null*/, [Optional]object fetch_to_args/*=null*/)\n        {\n            return false;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setFetchMode(object instance, PhpStack stack)\n        {\n            object fetch_to_mode = stack.PeekValue(1);\n            object fetch_to_dest = stack.PeekValueOptional(2);\n            object fetch_to_args = stack.PeekValueOptional(3);\n            return ((PDOStatement)instance).setFetchMode(stack.Context, fetch_to_mode, fetch_to_dest, fetch_to_args);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOStatement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.ComponentModel;\nusing PHP.Library.SPL;\nusing System.Data;\nusing System.Text.RegularExpressions;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    [ImplementsType]\n    public partial class PDOStatement : PhpObject, IteratorAggregate\n    {\n        protected readonly PDO m_pdo;\n\n        public PDOStatement(ScriptContext context, PDO pdo)\n            : base(context, true)\n        {\n            this.m_pdo = pdo;\n            this.setFetchMode(context, (int)PDOFetchType.PDO_FETCH_BOTH, null, null);\n        }\r\n\r\n        public virtual bool ExecuteStatement() { throw new NotImplementedException(); }\n\n        //////////////////////////\n        //////////////////////////\r\n\r\n        protected virtual IDbCommand CurrentCommand { get { return null; } }\r\n        protected virtual IDataReader CurrentReader { get { return null; } }\n\n        #region getIterator\n        [PhpVisible]\n        [ImplementsMethod]\n        public virtual object getIterator(ScriptContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static object getIterator(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).getIterator(stack.Context);\n        }\n        #endregion\n\n        #region fetch\r\n\r\n        private object fetch(ScriptContext context, int fetch_style)\r\n        {\r\n            return this.fetch(context, fetch_style, FETCH_ORI_NEXT, 0);\r\n        }\n\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object fetch(ScriptContext context, object fetch_style/*=null*/, object cursor_orientation/*FETCH_ORI_NEXT*/, object cursor_offset/*0*/)\n        {\n            PDOFetchType ft;\n            if (fetch_style == null || fetch_style == Arg.Default)\n                fetch_style = this.m_pdo.getAttribute(context, (int)PDOAttributeType.PDO_ATTR_DEFAULT_FETCH_MODE);\n            \n            int fetch_style_int = PHP.Core.Convert.ObjectToInteger(fetch_style);\n            ft = (PDOFetchType)fetch_style_int;\n            var dr = this.CurrentReader;\n            switch (ft)\n            {\n                case PDOFetchType.PDO_FETCH_ASSOC:\n                    return Fetch_Assoc(m_pdo.Driver, dr, false) ?? (object)false;\n                case PDOFetchType.PDO_FETCH_NUM:\r\n                    return Fetch_Num(m_pdo.Driver, dr) ?? (object)false;\n                case PDOFetchType.PDO_FETCH_BOTH:\n                case PDOFetchType.PDO_FETCH_USE_DEFAULT:\r\n                    return Fetch_Assoc(m_pdo.Driver, dr, true) ?? (object)false;\n                default:\n                    PDOException.Throw(context, \"Unsupported fetch_style value\", null, null, null);\n                    return null;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object fetch(object instance, PhpStack stack)\n        {\n            object style = stack.PeekValueOptional(1);\n            object orientation = stack.PeekValueOptional(2);\n            object cursor_offset = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).fetch(stack.Context, style, orientation, cursor_offset);\n        }\n\n        private static PhpArray Fetch_Assoc(PDODriver driver, IDataReader dr, bool withNum)\n        {\n            if (dr.Read())\n            {\r\n                int fieldCount = dr.FieldCount;\r\n                PhpArray arr = new PhpArray(fieldCount * (withNum ? 2 : 1));\r\n\r\n                for (int i = 0; i < fieldCount; i++)\n                {\n                    string fName = dr.GetName(i);\r\n                    object value = driver.ConvertDbValue(dr.GetValue(i), dr.GetDataTypeName(i));\n\n                    arr.Add(fName, value);\n                    if (withNum)\n                        arr.Add(i, value);\n                }\n                return arr;\n            }\n            else\n            {\n                return null;\n            }\n        }\r\n\r\n        private static PhpArray Fetch_Num(PDODriver driver, IDataReader dr)\n        {\n            if (dr.Read())\n            {\n                object[] values = new object[dr.FieldCount];\n                dr.GetValues(values);\r\n\r\n                for (int i = 0; i < values.Length; i++)\r\n                    values[i] = driver.ConvertDbValue(values[i], dr.GetDataTypeName(i));\r\n                \n                return new PhpArray(values);\n            }\n            else\n            {\n                return null;\n            }\n        }\r\n\r\n        #endregion\n\n        #region close\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object closeCursor(ScriptContext context)\n        {\n            this.CloseReader();\n            return null;\n        }\r\n\r\n        protected virtual void CloseReader() { throw new NotImplementedException(); }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object closeCursor(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).closeCursor(stack.Context);\n        }\n        #endregion\r\n\r\n        public virtual void Init(string query, Dictionary<int, object> options) { throw new NotImplementedException(); }\n\n        enum PreparedMode\n        {\n            None,\n            Named,\n            Numbers,\n        }\n\n        private PreparedMode m_prepMode = PreparedMode.None;\r\n        private Dictionary<string, string> m_prepName = null;\r\n        private List<string> m_prepNum = null;\n\n        private static readonly Regex regName = new Regex(@\"[\\w_]+\", RegexOptions.Compiled | RegexOptions.CultureInvariant);\n\n        internal void Prepare(ScriptContext context, string query, Dictionary<int, object> options)\n        {\n            this.m_prepMode = PreparedMode.None;\r\n            this.m_prepName = new Dictionary<string, string>();\r\n            this.m_prepNum = new List<string>();\n            int pos = 0;\n            StringBuilder sbRewritten = new StringBuilder();\n            while (pos < query.Length)\n            {\n                char c = query[pos];\n                switch (c)\n                {\n                    case '?':\n                        {\n                            if (this.m_prepMode == PreparedMode.None)\n                            {\n                                this.m_prepMode = PreparedMode.Numbers;\n                            }\n                            else\n                            {\n                                if (this.m_prepMode != PreparedMode.Numbers)\n                                {\n                                    PDOException.Throw(context, \"Mixed parameter mode : use only '?' or ':name' pattern\", null, null, null);\n                                    return;\n                                }\n                            }\n                            int paramNum = this.m_prepNum.Count;\n                            string pName = this.m_pdo.Driver.GetParameterName(\"p\" + paramNum);\n                            this.m_prepNum.Insert(paramNum, pName);\n                            sbRewritten.Append(pName);\n                        }\n                        break;\n                    case ':':\n                        {\n                            if (this.m_prepMode == PreparedMode.None)\n                            {\n                                this.m_prepMode = PreparedMode.Named;\n                            }\n                            else\n                            {\n                                if (this.m_prepMode != PreparedMode.Named)\n                                {\n                                    PDOException.Throw(context, \"Mixed parameter mode : use only '?' or ':name' pattern\", null, null, null);\n                                    return;\n                                }\n                            }\n                            Match m = regName.Match(query, pos);\n                            string paramName = m.Value;\n                            string pName = this.m_pdo.Driver.GetParameterName(paramName);\r\n                            this.m_prepName[paramName] = pName;\n                            sbRewritten.Append(pName);\n                            pos += paramName.Length;\n                        }\n                        break;\n                    case '\"':\n                        sbRewritten.Append(c);\n                        this.SkipToNext(query, sbRewritten, ref pos, '\"');\n                        break;\n                    case '\\'':\n                        sbRewritten.Append(c);\n                        this.SkipToNext(query, sbRewritten, ref pos, '\\'');\n                        break;\n                    default:\n                        sbRewritten.Append(c);\n                        break;\n                }\n                pos++;\n            }\n\n            //this.CurrentCommand.CommandText = sbRewritten.ToString();\n            this.Init(sbRewritten.ToString(), options);\n            string[] arrParams = null;\n            switch (this.m_prepMode)\n            {\n                case PreparedMode.Named:\n                    arrParams = this.m_prepName.Values.ToArray();\n                    break;\n                case PreparedMode.Numbers:\n                    arrParams = this.m_prepNum.ToArray();\n                    break;\n                case PreparedMode.None:\n                default:\n                    break;\n            }\n            this.CurrentCommand.Parameters.Clear();\n            if (arrParams != null)\n            {\n                foreach (string paramName in arrParams)\n                {\n                    var param = this.CurrentCommand.CreateParameter();\n                    param.ParameterName = paramName;\n                    this.CurrentCommand.Parameters.Add(param);\n                }\n            }\n            this.CurrentCommand.Prepare();\n        }\n        private void SkipToNext(string query, StringBuilder sbRewritten, ref int pos, char next)\n        {\n            SkipToNext(query, sbRewritten, ref pos, next, '\\\\');\n        }\n        private void SkipToNext(string query, StringBuilder sbRewritten, ref int pos, char next, char escapeChar)\n        {\n            while (++pos < query.Length)\n            {\n                char c = query[pos];\n                sbRewritten.Append(c);\n                if (c == next)\n                {\n                    break;\n                }\n                if (c == escapeChar)\n                {\n                    pos++;\n                }\n            }\n        }\n\n        #region bindValue\n\n        [PhpVisible]\n        [ImplementsMethod]\r\n        public virtual object bindValue(ScriptContext context, object parameter, object value, object data_type = null)\n        {\r\n            if (this.CurrentCommand != null)\r\n            {\r\n                PDOParamType? dt = null;\r\n                if (data_type != null && data_type != Arg.Default)\r\n                    dt = (PDOParamType)data_type;\r\n\r\n                return this.bindValue(parameter, value, dt);\r\n            }\r\n\r\n            throw new NotImplementedException();\n        }\r\n\r\n        private bool bindValues(ScriptContext context, PhpArray parameters, PDOParamType dt)\r\n        {\r\n            if (parameters == null || parameters.Count == 0)\r\n                return true;\r\n\r\n            PreparedMode mode = PreparedMode.None;\r\n            foreach (var item in parameters)\r\n            {\r\n                Debug.Assert(item.Key.Object != null);\r\n\r\n                if (item.Key.IsString && (mode == PreparedMode.Named || mode == PreparedMode.None))\r\n                {\r\n                    mode = PreparedMode.Named;\r\n                }\r\n                else if (item.Key.IsInteger && (mode == PreparedMode.Numbers || mode == PreparedMode.None))\r\n                {\r\n                    mode = PreparedMode.Numbers;\r\n                }\r\n                else\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, \"Invalid bind parameter \" + item.Key.Object.ToString());\r\n                    return false;\r\n                }\r\n\r\n                // bind the parameter\r\n                var bindresult = this.bindValue(context, item.Key.Object, item.Value, dt);\r\n                if (!Core.Convert.ObjectToBoolean(bindresult))\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, \"Can't bind parameter \" + item.Key.Object.ToString());\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            //\r\n            return true;\r\n        }\n\n        private bool bindValue(object param, object value, PDOParamType? type)\n        {\r\n            Debug.Assert(this.CurrentCommand != null);\n\n            if (this.m_prepMode == PreparedMode.None)\n            {\n                PhpException.Throw(PhpError.Warning, \"PDO statement not prepared or no parameters to bind\");\n                return false;\n            }\n            IDataParameter p;\n            switch (this.m_prepMode)\n            {\n                case PreparedMode.Named:\n                    string pName = PHP.Core.Convert.ObjectToString(param);\n                    string pNameSql;\n\n                    if (pName.Length > 0 && pName[0] == ':')\n                    {\n                        pName = pName.Substring(1);\n                    }\r\n\r\n                    if (this.m_prepName != null && this.m_prepName.TryGetValue(pName, out pNameSql))\r\n                    {\r\n                        p = (IDataParameter)this.CurrentCommand.Parameters[pNameSql];\r\n                    }\n                    else\n                    {\n                        PhpException.Throw(PhpError.Warning, \"Parameter '\" + pName + \"' not found\");\n                        return false;\n                    }\n                    break;\n                case PreparedMode.Numbers:\n                    int pId = PHP.Core.Convert.ObjectToInteger(param);\r\n                    if (this.m_prepNum == null || pId >= this.m_prepNum.Count)\n                    {\n                        PhpException.Throw(PhpError.Warning, \"Parameter n° \" + pId + \" not found\");\n                        return false;\n                    }\n                    else\n                    {\n                        p = (IDataParameter)this.CurrentCommand.Parameters[this.m_prepNum[pId]];\n                    }\n                    break;\n                default:\n                    throw new NotImplementedException(\"Unknown prepared mode in PDOStatement::bindValue\");\n            }\n\n            p.Value = value ?? DBNull.Value;\n            if (type.HasValue)\n            {\n                switch (type.Value)\n                {\n                    case PDOParamType.PDO_PARAM_BOOL: p.DbType = DbType.Boolean; break;\n                    case PDOParamType.PDO_PARAM_INT: p.DbType = DbType.Int32; break;\n                    case PDOParamType.PDO_PARAM_LOB: p.DbType = DbType.Binary; break;\n                    case PDOParamType.PDO_PARAM_NULL: break; //TODO : set right type\n                    case PDOParamType.PDO_PARAM_STMT: break; //TODO : find what it is\n                    case PDOParamType.PDO_PARAM_STR: p.DbType = DbType.String; break;\n                }\n            }\n            return true;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object bindValue(object instance, PhpStack stack)\n        {\n            object parameter = stack.PeekValue(1);\n            object value = stack.PeekReference(2);\n            object data_type = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).bindValue(stack.Context, parameter, value, data_type);\n        }\n        #endregion\n\n        #region execute\n        \n        [PhpVisible, ImplementsMethod]\r\n        public virtual object execute(ScriptContext context, [Optional] object input_parameters)\n        {\r\n            if (input_parameters != Arg.Default && input_parameters != null)\r\n            {\r\n                PhpArray arr = PhpArray.AsPhpArray(input_parameters);\r\n                if (arr == null)\r\n                {\r\n                    PhpException.InvalidArgumentType(\"input_parameters\", PhpArray.PhpTypeName);\r\n                    return false;\r\n                }\r\n\r\n                this.bindValues(context, arr, PDOParamType.PDO_PARAM_STR);\r\n            }\n\n            return this.ExecuteStatement();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object execute(object instance, PhpStack stack)\n        {\n            object input_parameters = stack.PeekValueOptional(1);\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).execute(stack.Context, input_parameters);\n        }\n        #endregion\n\n        #region fetchColumn\n        \n        [PhpVisible, ImplementsMethod]\r\n        public virtual object fetchColumn(ScriptContext context, object column_number/*=0*/)\n        {\n            object ret = this.fetch(context, PDO.FETCH_NUM);\n            if (ret is bool && (bool)ret == false)\n                return false;\n            \n            PhpArray arr = (PhpArray)ret;\n            int col = (column_number == Arg.Default) ? 0 : PHP.Core.Convert.ObjectToInteger(column_number);\n            return arr[col];\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object fetchColumn(object instance, PhpStack stack)\n        {\n            object column_number = stack.PeekValueOptional(1);\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).fetchColumn(stack.Context, column_number);\n        }\n        #endregion\n\n        #region rowCount\n        [PhpVisible, ImplementsMethod]\r\n        public virtual object rowCount(ScriptContext context)\n        {\n            if (this.CurrentReader != null)\n            {\n                return this.CurrentReader.RecordsAffected;\n            }\n            return -1;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object rowCount(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((PDOStatement)instance).rowCount(stack.Context);\n        }\n        #endregion\r\n\r\n        #region columnCount\r\n        [PhpVisible, ImplementsMethod]\r\n        public virtual object columnCount(ScriptContext context)\r\n        {\r\n            if (this.CurrentReader != null)\r\n            {\r\n                return this.CurrentReader.FieldCount;\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static object columnCount(object instance, PhpStack stack)\r\n        {\r\n            stack.RemoveFrame();\r\n            return ((PDOStatement)instance).columnCount(stack.Context);\r\n        }\r\n        #endregion\n\n        #region fetchAll\n        \n        [PhpVisible, ImplementsMethod]\r\n        public virtual object fetchAll(ScriptContext context, [Optional]object fetch_style/*=null*/, [Optional]object fetch_argument/*=null*/, [Optional]object ctor_args/*=null*/)\n        {\n            PhpArray arr = new PhpArray();\n\n            PDOFetchType fetch;\n            if (fetch_style == null || fetch_style == Arg.Default)\n                fetch = PDOFetchType.PDO_FETCH_BOTH;\n            else\n                fetch = (PDOFetchType)(int)fetch_style;\r\n\r\n            // TODO: fetch bitwise combinations (group, unique, ...)\r\n\r\n            if (fetch == PDOFetchType.PDO_FETCH_COLUMN)\r\n            {\r\n                int column = (fetch_argument == null || fetch_argument == Arg.Default) ? 0 : Core.Convert.ObjectToInteger(fetch_argument);\r\n                while (true)\r\n                {\r\n                    var ret = this.fetch(context, (int)PDOFetchType.PDO_FETCH_NUM) as PhpArray;\r\n                    if (ret == null)\r\n                        break;\r\n\r\n                    arr.AddToEnd(ret[column]);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                while (true)\r\n                {\r\n                    object ret = this.fetch(context, (int)fetch);\r\n                    if ((ret is bool && ((bool)ret) == false) || ret == null)\r\n                    {\r\n                        break;\r\n                    }\r\n                    else\r\n                    {\r\n                        arr.AddToEnd(ret);\r\n                    }\r\n                }\r\n            }\n\n            return arr;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object fetchAll(object instance, PhpStack stack)\n        {\n            object fetch_style = stack.PeekReferenceOptional(1);\n            object fetch_argument = stack.PeekReferenceOptional(2);\n            object ctor_args = stack.PeekReferenceOptional(3);\n            stack.RemoveFrame();\n\n            return ((PDOStatement)instance).fetchAll(stack.Context, fetch_style, fetch_argument, ctor_args);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/PDOStatics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    public static partial class PDOStatics\n    {\n        //\n        [ImplementsFunction(\"pdo_drivers\")]\n        public static string[] Drivers()\n        {\n            return PDOLibraryDescriptor.GetDrivers();\n        }\n\n        public static PhpArray BuildErrorInfo(string sqlstate, object driver_error, string message)\n        {\n            PhpArray arr = new PhpArray();\n            arr.Add(0, sqlstate);\n            arr.Add(1, driver_error);\n            arr.Add(2, message);\n            return arr;\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/SQLSTATES.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PHP.Library.Data\n{\n    /// <summary>\n    /// http://developer.mimer.com/documentation/html_92/Mimer_SQL_Mobile_DocSet/App_Return_Codes2.html\n    /// </summary>\n    public static class SQLSTATES\n    {\n        /// <summary>\n        /// Success\n        /// </summary>\n        public const string Success = \"00000\";\n\n        #region Warning\n        public const string Warning = \"01000\";\n        public const string Warning_disconnect_error = \"01002\";\n        /// <summary>\n        /// null value eliminated in set function\n        /// </summary>\n        public const string Warning_null = \"01003\";\n        /// <summary>\n        /// string data, right truncation\n        /// </summary>\n        public const string Warning_right_truncation = \"01004\";\n        /// <summary>\n        /// insufficient item descriptor areas\n        /// </summary>\n        public const string Warning_insufficient_descriptor = \"01005\";\n        /// <summary>\n        /// privilege not revoked\n        /// </summary>\n        public const string Warning_privilege_not_revoked = \"01006\";\n        /// <summary>\n        /// privilege not granted\n        /// </summary>\n        public const string Warning_privileges_not_granted = \"01007\";\n        /// <summary>\n        /// implicit zero-bit padding\n        /// </summary>\n        public const string Warning_implicit_padding = \"01008\";\n        /// <summary>\n        /// error in row\n        /// </summary>\n        public const string Warning_error_in_row = \"01S01\";\n        /// <summary>\n        /// option value changed\n        /// </summary>\n        public const string Warning_option_value_changed = \"01S02\";\n        /// <summary>\n        /// cancel treated as close\n        /// </summary>\n        public const string Warning_cancel_as_close = \"01S05\";\n        /// <summary>\n        /// attempt to fetch before the result set returned the first rowset\n        /// </summary>\n        public const string Warning_resultset = \"01S06\";\n        /// <summary>\n        /// fractional truncation\n        /// </summary>\n        public const string Warning_fractionnal_truncation = \"01S07\";\n        #endregion\n\n        /// <summary>\n        /// No Data\n        /// </summary>\n        public const string NoData = \"02000\";\n\n        //TODO : complete list\n        #region Dynamic SQL error\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDO/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetPDO\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/PDO/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetPDO\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing PHP.Core;\n\n[assembly: AssemblyTitle(\"Phalanger PDO SQLServer\")]\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - PDO SQLServer\")]\n\n[assembly: PhpLibrary(typeof(PHP.Library.Data.PDOSQLServerLibraryDescriptor), \"PDO SQLServer\", new string[] { \"pdo_sqlsrv\" })]"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/Extension.PDOSQLServer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{7445CDB5-09EE-4884-B606-B1D870E03B3B}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Data</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.PDO.SQLServer</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"PDOSQLServerConfiguration.cs\" />\r\n    <Compile Include=\"PDOSQLServerGlobalConfig.cs\" />\r\n    <Compile Include=\"PDOSQLServerLibraryDescriptor.cs\" />\r\n    <Compile Include=\"PDOSQLServerLocalConfig.cs\" />\r\n    <Compile Include=\"SQLServerPDODriver.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\PDO\\Extension.PDO.csproj\">\r\n      <Project>{A3D74786-1B4A-4967-853E-C98D74E6990B}</Project>\r\n      <Name>Extension.PDO</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"Extension.PDOSQLServer.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/Extension.PDOSQLServer.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension Data Objects PDO database MSSQL SQLServer</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/PDOSQLServerConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\nusing System.Collections;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLServerConfiguration\n    {\n        private PDOSQLServerConfiguration() { }\n\n        #region Legacy Configuration\n\n        /// <summary>\n        /// Gets, sets, or restores a value of a legacy configuration option.\n        /// </summary>\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\n        {\n            PDOSQLServerLocalConfig local = (PDOSQLServerLocalConfig)config.GetLibraryConfig(PDOSQLServerLibraryDescriptor.Singleton);\n            PDOSQLServerLocalConfig @default = DefaultLocal;\n            PDOSQLServerGlobalConfig global = Global;\n\n            //switch (option)\n            //{\n            //    // local:\n\n            //    // global:\n\n            //}\n\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\n            return null;\n        }\n\n        /// <summary>\n        /// WrServers PDO legacy options and their values to XML text stream.\n        /// Skips options whose values are the same as default values of Phalanger.\n        /// </summary>\n        /// <param name=\"wrServerr\">XML wrServerr.</param>\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\n        /// <param name=\"wrServerPhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\n        public static void LegacyOptionsToXml(XmlTextWriter wrServerr, Hashtable options, bool wrServerPhpNames) // GENERICS:<string,string>\n        {\n            if (wrServerr == null)\n                throw new ArgumentNullException(\"wrServerr\");\n            if (options == null)\n                throw new ArgumentNullException(\"options\");\n\n            PDOSQLServerLocalConfig local = new PDOSQLServerLocalConfig();\n            PDOSQLServerGlobalConfig global = new PDOSQLServerGlobalConfig();\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(wrServerr, options, wrServerPhpNames);\n\n            ow.StartSection(\"pdo\");\n\n            // local:\n\n            // global:\n\n            ow.WriteEnd();\n        }\n\n        /// <summary>\n        /// Registers legacy ini-options.\n        /// </summary>\n        internal static void RegisterLegacyOptions()\n        {\n            //const string s = PDOSQLServerLibraryDescriptor.ExtensionName;\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\n\n            //// local:\n\n            //// global:\n        }\n\n        #endregion\n\n        #region Configuration Getters\n\n        /// <summary>\n        /// Gets the library configuration associated with the current script context.\n        /// </summary>\n        public static PDOSQLServerLocalConfig Local\n        {\n            get\n            {\n                return (PDOSQLServerLocalConfig)Configuration.Local.GetLibraryConfig(PDOSQLServerLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the default library configuration.\n        /// </summary>\n        public static PDOSQLServerLocalConfig DefaultLocal\n        {\n            get\n            {\n                return (PDOSQLServerLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(PDOSQLServerLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the global library configuration.\n        /// </summary>\n        public static PDOSQLServerGlobalConfig Global\n        {\n            get\n            {\n                return (PDOSQLServerGlobalConfig)Configuration.Global.GetLibraryConfig(PDOSQLServerLibraryDescriptor.Singleton);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/PDOSQLServerGlobalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLServerGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOSQLServerGlobalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/PDOSQLServerLibraryDescriptor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLServerLibraryDescriptor : PhpLibraryDescriptor\n    {\n        /// <summary>\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\n        /// </summary>\n        internal static PDOSQLServerLibraryDescriptor Singleton { get { return singleton; } }\n        private static PDOSQLServerLibraryDescriptor singleton;\n\n        internal const string ExtensionName = \"pdo_sqlite\";\n\n        /// <summary>\n        /// Called by the Core after the library is loaded.\n        /// </summary>\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\n        {\n            base.Loaded(assemblyAttribute, configStore);\n            singleton = this;\n\n            PDOSQLServerConfiguration.RegisterLegacyOptions();\n\n            PDOLibraryDescriptor.RegisterProvider(new SQLServerPDODriver());\r\n\r\n            var tPDO = Core.Reflection.DTypeDesc.Create(typeof(PDO));\n            PhpMemberAttributes att = PhpMemberAttributes.Public | PhpMemberAttributes.Static;\n            //ApplicationContext.Default.AddMethodToType(tPDO, att, \"sqliteCreateFunction\", SQLServerPDODriver.PDO_sqliteCreateFunction);\n            ApplicationContext.Default.AddConstantToType(tPDO, att, \"SQLSRV_TXN_READ_UNCOMMITTED\", SQLServerPDODriver.SQLSRV_TXN_READ_UNCOMMITTED);\n        }\n\n        /// <summary>\n        /// Parses a configuration section belonging to the MySql library. \n        /// </summary>\n        /// <param name=\"result\">A configuration context.</param>\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\n        /// <returns>Updated configuration context.</returns>\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\n        {\n            // parses XML tree:\n            ConfigUtils.ParseNameValueList(section, context, (PDOLocalConfig)result.Local, (PDOGlobalConfig)result.Global);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates empty library configuration context.\n        /// </summary>\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\n        protected override ConfigContextBase CreateConfigContext()\n        {\n            return new ConfigContextBase(new PDOSQLServerLocalConfig(), new PDOSQLServerGlobalConfig());\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/PDOSQLServerLocalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLServerLocalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOSQLServerLocalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/SQLServerPDODriver.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Data;\nusing System.Data.SqlClient;\n\nnamespace PHP.Library.Data\n{\n    public sealed class SQLServerPDODriver : PDODriver\n    {\n        public const int SQLSRV_TXN_READ_UNCOMMITTED = PDO.ATTR_DRIVER_SPECIFIC + 1;\n\n        public override string Scheme { get { return \"sqlsrv\"; } }\r\n\r\n        public override PDOConnection OpenConnection(Core.ScriptContext context, string dsn_data, string username, string password, object argdriver_options)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override object Quote(Core.ScriptContext context, object strobj, PDOParamType param_type)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override PDOStatement CreateStatement(Core.ScriptContext context, PDO pdo)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override bool IsValueValidForAttribute(int att, object value)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override object GetLastInsertId(Core.ScriptContext context, PDO pdo, string name)\n        {\n            using (var com = ((SqlConnection)pdo.Connection).CreateCommand())\n            {\n                com.Transaction = (SqlTransaction)pdo.Transaction;\n                com.CommandText = \"SELECT @@IDENTITY\";\n                return com.ExecuteScalar();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetPDOSQLServer\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/PDOSQLServer/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetPDOSQLServer\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing PHP.Core;\n\n[assembly: AssemblyTitle(\"Phalanger PDO SQLite\")]\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - PDO SQLite\")]\n\n[assembly: PhpLibrary(typeof(PHP.Library.Data.PDOSQLiteLibraryDescriptor), \"PDO SQLite\", new string[] { \"pdo_sqlite\" })]"
  },
  {
    "path": "Source/Extensions/PDOSQLite/Extension.PDOSQLite.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{E736D942-D76C-46B6-B7F1-82E3068D46A8}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Data</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.PDO.SQLite</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data.SQLite, Version=1.0.98.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\lib\\net40\\System.Data.SQLite.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"PDOSQLiteConfiguration.cs\" />\r\n    <Compile Include=\"PDOSQLiteGlobalConfig.cs\" />\r\n    <Compile Include=\"PDOSQLiteLibraryDescriptor.cs\" />\r\n    <Compile Include=\"PDOSQLiteLocalConfig.cs\" />\r\n    <Compile Include=\"SQLitePDODriver.cs\" />\r\n    <Compile Include=\"SQLitePDOStatement.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\PDO\\Extension.PDO.csproj\">\r\n      <Project>{A3D74786-1B4A-4967-853E-C98D74E6990B}</Project>\r\n      <Name>Extension.PDO</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"Extension.PDOSQLite.nuspec\" />\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <Import Project=\"..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets\" Condition=\"Exists('..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets')\" />\r\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\r\n    <PropertyGroup>\r\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\r\n    </PropertyGroup>\r\n    <Error Condition=\"!Exists('..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets'))\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/Extension.PDOSQLite.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension Data Objects PDO SQLite database</tags>\n    <dependencies>\n      <dependency id=\"System.Data.SQLite.Core\" version=\"1.0.99.0\" />\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/PDOSQLiteConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\nusing System.Collections;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLiteConfiguration\n    {\n        private PDOSQLiteConfiguration() { }\n\n        #region Legacy Configuration\n\n        /// <summary>\n        /// Gets, sets, or restores a value of a legacy configuration option.\n        /// </summary>\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\n        {\n            PDOSQLiteLocalConfig local = (PDOSQLiteLocalConfig)config.GetLibraryConfig(PDOSQLiteLibraryDescriptor.Singleton);\n            PDOSQLiteLocalConfig @default = DefaultLocal;\n            PDOSQLiteGlobalConfig global = Global;\n\n            //switch (option)\n            //{\n            //    // local:\n\n            //    // global:\n\n            //}\n\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\n            return null;\n        }\n\n        /// <summary>\n        /// Writes PDO legacy options and their values to XML text stream.\n        /// Skips options whose values are the same as default values of Phalanger.\n        /// </summary>\n        /// <param name=\"writer\">XML writer.</param>\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\n        {\n            if (writer == null)\n                throw new ArgumentNullException(\"writer\");\n            if (options == null)\n                throw new ArgumentNullException(\"options\");\n\n            PDOSQLiteLocalConfig local = new PDOSQLiteLocalConfig();\n            PDOSQLiteGlobalConfig global = new PDOSQLiteGlobalConfig();\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\n\n            ow.StartSection(\"pdo\");\n\n            // local:\n\n            // global:\n\n            ow.WriteEnd();\n        }\n\n        /// <summary>\n        /// Registers legacy ini-options.\n        /// </summary>\n        internal static void RegisterLegacyOptions()\n        {\n            //const string s = PDOSQLiteLibraryDescriptor.ExtensionName;\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\n\n            //// local:\n\n            //// global:\n        }\n\n        #endregion\n\n        #region Configuration Getters\n\n        /// <summary>\n        /// Gets the library configuration associated with the current script context.\n        /// </summary>\n        public static PDOSQLiteLocalConfig Local\n        {\n            get\n            {\n                return (PDOSQLiteLocalConfig)Configuration.Local.GetLibraryConfig(PDOSQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the default library configuration.\n        /// </summary>\n        public static PDOSQLiteLocalConfig DefaultLocal\n        {\n            get\n            {\n                return (PDOSQLiteLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(PDOSQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the global library configuration.\n        /// </summary>\n        public static PDOSQLiteGlobalConfig Global\n        {\n            get\n            {\n                return (PDOSQLiteGlobalConfig)Configuration.Global.GetLibraryConfig(PDOSQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/PDOSQLiteGlobalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public class PDOSQLiteGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOSQLiteGlobalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/PDOSQLiteLibraryDescriptor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLiteLibraryDescriptor : PhpLibraryDescriptor\n    {\n        /// <summary>\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\n        /// </summary>\n        internal static PDOSQLiteLibraryDescriptor Singleton { get { return singleton; } }\n        private static PDOSQLiteLibraryDescriptor singleton;\n\n        internal const string ExtensionName = \"pdo_sqlite\";\n\n        /// <summary>\n        /// Called by the Core after the library is loaded.\n        /// </summary>\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\n        {\n            base.Loaded(assemblyAttribute, configStore);\n            singleton = this;\n\n            PDOSQLiteConfiguration.RegisterLegacyOptions();\n\n            PDOLibraryDescriptor.RegisterProvider(new SQLitePDODriver());\n\n            var tPDO = Core.Reflection.DTypeDesc.Create(typeof(PDO));\r\n            PhpMemberAttributes att = PhpMemberAttributes.Public | PhpMemberAttributes.Static;\r\n            ApplicationContext.Default.AddMethodToType(tPDO, att, \"sqliteCreateFunction\", SQLitePDODriver.PDO_sqliteCreateFunction);\n        }\n\n        /// <summary>\n        /// Parses a configuration section belonging to the MySql library. \n        /// </summary>\n        /// <param name=\"result\">A configuration context.</param>\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\n        /// <returns>Updated configuration context.</returns>\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\n        {\n            // parses XML tree:\n            ConfigUtils.ParseNameValueList(section, context, (PDOLocalConfig)result.Local, (PDOGlobalConfig)result.Global);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates empty library configuration context.\n        /// </summary>\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\n        protected override ConfigContextBase CreateConfigContext()\n        {\n            return new ConfigContextBase(new PDOSQLiteLocalConfig(), new PDOSQLiteGlobalConfig());\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/PDOSQLiteLocalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PDOSQLiteLocalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (PDOSQLiteLocalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/SQLitePDODriver.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Data.SQLite;\nusing PHP.Core;\nusing System.IO;\nusing System.Data;\n\nnamespace PHP.Library.Data\n{\n\n    public sealed class SQLitePDODriver : PDODriver\n    {\n        public override string Scheme { get { return \"sqlite\"; } }\n\n        public override PDOConnection OpenConnection(ScriptContext context, string dsn_data, string username, string password, object argdriver_options)\n        {\n            //Determine file path\n            string filename = dsn_data.Replace('/', Path.DirectorySeparatorChar);\n            string filePath = Path.GetFullPath(Path.Combine(context.WorkingDirectory, filename));\n\n            SQLiteConnectionStringBuilder csb = new SQLiteConnectionStringBuilder();\n            csb.DataSource = filePath;\n            csb.Version = 3;\r\n\r\n            var con = new PDOConnection(csb.ConnectionString, new SQLiteConnection(), \"PDO sqllite connection\");\r\n            con.Connect();\n\n            return con;\n        }\n\n        public override object Quote(ScriptContext context, object strobj, PDOParamType param_type)\n        {\n            // From mysql extension\n            // in addition, resulting string is quoted as '...'\n\n            if (strobj == null)\n                return string.Empty;\n\n            // binary aware:\n            if (strobj.GetType() == typeof(PhpBytes))\n            {\n                var strbytes = (PhpBytes)strobj;\n                if (strbytes.Length == 0) return strobj;\n\n                var bytes = strbytes.ReadonlyData;\n                List<byte>/*!*/result = new List<byte>(bytes.Length + 2);\r\n                result.Add((byte)'\\'');\n                for (int i = 0; i < bytes.Length; i++)\n                {\n                    switch (bytes[i])\n                    {\n                        case (byte)'\\0': result.Add((byte)'\\\\'); goto default;\n                        case (byte)'\\\\': result.Add((byte)'\\\\'); goto default;\n                        case (byte)'\\n': result.Add((byte)'\\\\'); result.Add((byte)'n'); break;\n                        case (byte)'\\r': result.Add((byte)'\\\\'); result.Add((byte)'r'); break;\n                        case (byte)'\\u001a': result.Add((byte)'\\\\'); result.Add((byte)'Z'); break;\n                        case (byte)'\\'': result.Add((byte)'\\\\'); goto default;\n                        case (byte)'\"': result.Add((byte)'\\\\'); goto default;\n                        default: result.Add(bytes[i]); break;\n                    }\n                }\r\n                result.Add((byte)'\\'');\n\n                return new PhpBytes(result.ToArray());\n            }\n\n            // else\n            string str = Core.Convert.ObjectToString(strobj);\n\n            StringBuilder sb = new StringBuilder();\r\n            sb.Append('\\'');\n            for (int i = 0; i < str.Length; i++)\n            {\n                char c = str[i];\n                switch (c)\n                {\n                    case '\\0': sb.Append(@\"\\0\"); break;\n                    case '\\\\': sb.Append(@\"\\\\\"); break;\n                    case '\\n': sb.Append(@\"\\n\"); break;\n                    case '\\r': sb.Append(@\"\\r\"); break;\n                    case '\\u001a': sb.Append(@\"\\Z\"); break;\n                    case '\\'': sb.Append(@\"''\"); break;\n                    case '\"': sb.Append(\"\\\"\\\"\"); break;\n                    default: sb.Append(c); break;\n                }\n            }\r\n            sb.Append('\\'');\n\n            return sb.ToString();\n        }\n\n        public override PDOStatement CreateStatement(ScriptContext context, PDO pdo)\n        {\n            SQLitePDOStatement stmt = new SQLitePDOStatement(context, pdo);\n            return stmt;\n        }\n\n        protected override bool IsValueValidForAttribute(int att, object value)\n        {\n            PDOAttributeType attE = (PDOAttributeType)att;\n            switch (attE)\n            {\n                case PDOAttributeType.PDO_ATTR_EMULATE_PREPARES:\n                    return value is bool;\n                case PDOAttributeType.PDO_ATTR_ERRMODE:\n                    return Enum.IsDefined(typeof(PDOErrorMode), value);\n                default:\n                    break;\n            }\n            return false;\n        }\n\n        internal static object PDO_sqliteCreateFunction(object instance, PhpStack stack)\n        {\n            string func_name = PHP.Core.Convert.ObjectToString(stack.PeekValue(1));\n            PhpCallback callback = PHP.Core.Convert.ObjectToCallback(stack.PeekValue(2));\n            object nbr = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n\n            int nbr_arg;\n            if (nbr == null)\n            {\n                nbr_arg = -1;\n            }\n            else\n            {\n                nbr_arg = PHP.Core.Convert.ObjectToInteger(nbr);\n            }\n\n            Delegate d = new Func<object[], object>(callback.Invoke);\n\n            SQLiteFunction.RegisterFunction(func_name, nbr_arg, FunctionType.Scalar, null, d, null);\n            return null;\n        }\n\n        public override object GetLastInsertId(ScriptContext context, PDO pdo, string name)\n        {\n            return ((SQLiteConnection)pdo.Connection).LastInsertRowId;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/SQLitePDOStatement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Data.SQLite;\n\nnamespace PHP.Library.Data\n{\n    public sealed class SQLitePDOStatement : PDOStatement\n    {\n        private readonly SQLiteCommand m_com;\n        private SQLiteDataReader m_dr;\n\n        internal SQLitePDOStatement(ScriptContext context, PDO pdo)\n            : base(context, pdo)\n        {\n            this.m_com = (SQLiteCommand)pdo.Connection.CreateCommand();\n        }\n\n        public override bool ExecuteStatement()\n        {\n            this.m_com.Transaction = (SQLiteTransaction)this.m_pdo.Transaction;\n            this.m_com.CommandTimeout = (int)this.m_pdo.GetAttribute(PDO.ATTR_TIMEOUT, 30);\n            this.m_dr = this.m_com.ExecuteReader();\n            return true;\n        }\n\n        protected override System.Data.IDbCommand CurrentCommand { get { return this.m_com; } }\n        protected override System.Data.IDataReader CurrentReader { get { return this.m_dr; } }\n\n        protected override void CloseReader()\n        {\n            if (this.m_dr != null)\n            {\n                this.m_dr.Close();\n                this.m_dr.Dispose();\n                this.m_dr = null;\n            }\n        }\n\n        public override void Init(string query, Dictionary<int, object> options)\n        {\n            this.m_com.CommandText = query;\n#if DEBUG\n            System.Diagnostics.Debug.WriteLine(\"PDOSQLite : stmt.init query=\" + query);\n#endif\n            if (options != null)\n            {\n                foreach (int key in options.Keys)\n                {\n                    this.m_pdo.SetAttribute(key, options[key]);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"System.Data.SQLite.Core\" version=\"1.0.98.1\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "Source/Extensions/PDOSQLite/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetPDOSQLite\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/PDOSQLite/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetPDOSQLite\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/SQLite/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing PHP.Core;\n\n[assembly: AssemblyTitle(\"Phalanger MySql\")]\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - SQLite\")]\n\n[assembly: PhpLibrary(typeof(PHP.Library.Data.SQLiteLibraryDescriptor), \"SQLite\", new string[] { \"sqlite\" })]"
  },
  {
    "path": "Source/Extensions/SQLite/Extension.SQLite.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\n  <PropertyGroup>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{B7E4DD8D-A51F-42E5-8964-0774CDAE0F3F}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>PHP.Library.Data</RootNamespace>\n    <AssemblyName>PhpNet.Extension.SQLite</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SccProjectName>SAK</SccProjectName>\n    <SccLocalPath>SAK</SccLocalPath>\n    <SccAuxPath>SAK</SccAuxPath>\n    <SccProvider>SAK</SccProvider>\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.SQLite, Version=1.0.98.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\lib\\net40\\System.Data.SQLite.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\" />\n    <Compile Include=\"PhpSQLiteDbConnection.cs\" />\n    <Compile Include=\"PhpSQLiteDbResult.cs\" />\n    <Compile Include=\"SQLite.cs\" />\n    <Compile Include=\"SQLite.QueryResultKeys.cs\" />\n    <Compile Include=\"SQLite.Status.cs\" />\n    <Compile Include=\"SQLiteConnectionManager.cs\" />\n    <Compile Include=\"SQLiteDatabase.cs\" />\n    <Compile Include=\"SQLiteGlobalConfig.cs\" />\n    <Compile Include=\"SQLiteLocalConfig.cs\" />\n    <Compile Include=\"SQLiteConfiguration.cs\" />\n    <Compile Include=\"SQLiteLibraryDescriptor.cs\" />\n    <Compile Include=\"SQLiteResult.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\Extensions.snk\">\n      <Link>Extensions.snk</Link>\n    </None>\n    <None Include=\"Extension.SQLite.nuspec\" />\n    <None Include=\"packages.config\" />\n    <Content Include=\"web.config.install.xdt\" />\n    <Content Include=\"web.config.uninstall.xdt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\n      <Name>ClassLibrary</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\n      <Name>Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\n  <Import Project=\"..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets\" Condition=\"Exists('..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\..\\Solutions\\packages\\System.Data.SQLite.Core.1.0.98.1\\build\\net40\\System.Data.SQLite.Core.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>\n"
  },
  {
    "path": "Source/Extensions/SQLite/Extension.SQLite.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension database SQLite</tags>\n    <dependencies>\n      <dependency id=\"System.Data.SQLite.Core\" version=\"1.0.99.0\" />\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/SQLite/PhpSQLiteDbConnection.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Data.SQLite;\nusing PHP.Core;\nusing System.Data;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PhpSQLiteDbConnection : PhpDbConnection\n    {\n        internal SQLiteConnection SqLiteConnection { get { return (SQLiteConnection)connection; } }\n\n        /// <summary>\n        /// Server.\n        /// </summary>\n        public string/*!*/ Server { get { return server; } }\n        private string/*!*/ server;\n        internal void SetServer(string/*!*/ value) { server = value; }\n\n        /// <summary>\n        /// Creates a connection resource.\n        /// </summary>\n        public PhpSQLiteDbConnection(string/*!*/ connectionString)\n            : base(connectionString, new SQLiteConnection(), \"sqlite connection\")\n        {\n        }\n\n        internal static PhpSQLiteDbConnection ValidConnection(PhpResource handle)\n        {\n            PhpSQLiteDbConnection connection;\n\n            if (handle != null && handle.GetType() == typeof(PhpSQLiteDbConnection))\n                connection = (PhpSQLiteDbConnection)handle;\n            else\n                connection = null;\n\n            if (connection != null && connection.IsValid)\n                return connection;\n\n            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_connection_resource\"));\n            return null;\n        }\n\n        /// <summary>\n        /// Gets a query result resource.\n        /// </summary>\n        /// <param name=\"connection\">Database connection.</param>\n        /// <param name=\"reader\">Data reader to be used for result resource population.</param>\n        /// <param name=\"convertTypes\">Whether to convert data types to PHP ones.</param>\n        /// <returns>Result resource holding all resulting data of the query.</returns>\n        protected override PhpDbResult GetResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes)\n        {\n            return new PhpSQLiteDbResult(connection, reader, convertTypes);\n        }\n\n        /// <summary>\n        /// Command factory.\n        /// </summary>\n        /// <returns>An empty instance of <see cref=\"SQLiteCommand\"/>.</returns>\n        protected override IDbCommand/*!*/ CreateCommand()\n        {\n            return new SQLiteCommand();\n        }\n\n        /// <summary>\n        /// Gets last error number.\n        /// </summary>\n        /// <returns>The error number it is known, -1 if unknown error occured, or zero on success.</returns>\n        public override int GetLastErrorNumber()\n        {\n            if (LastException == null) return 0;\n\n            SQLiteException e = LastException as SQLiteException;\n            return (e != null) ? (int)e.ErrorCode : -1;\n        }\n\n        /// <summary>\n        /// Gets the last error message.\n        /// </summary>\n        /// <returns>The message or an empty string if no error occured.</returns>\n        public override string GetLastErrorMessage()\n        {\n            return StripErrorNumber(base.GetLastErrorMessage());\n        }\n\n\n        /// <summary>\n        /// Gets a message from an exception raised by the connector.\n        /// Removes the initial #{number} and the ending dot.\n        /// </summary>\n        /// <param name=\"e\">Exception.</param>\n        /// <returns>The message.</returns>\n        /// <exception cref=\"ArgumentNullException\"><paramref name=\"e\"/> is a <B>null</B> reference.</exception>\n        public override string GetExceptionMessage(Exception/*!*/ e)\n        {\n            if (e == null) throw new ArgumentNullException(\"e\");\n\n            SQLiteException mye = e as SQLiteException;\n            if (mye == null || mye.Message.Length == 0) return e.Message;\n\n            string msg = StripErrorNumber(mye.Message);\n\n            // skip last dot:\n            int j = msg.Length;\n            if (msg[j - 1] == '.') j--;\n\n            return String.Format(\"{0} (error {1})\", msg.Substring(0, j), mye.ErrorCode);\n        }\n\n        private string StripErrorNumber(string msg)\n        {\n            // find first non-digit:\n            if (msg.Length > 0 && msg[0] == '#')\n            {\n                int i = 1;\n                while (i < msg.Length && msg[i] >= '0' && msg[i] <= '9') i++;\n                return msg.Substring(i);\n            }\n            else\n            {\n                return msg;\n            }\n        }\n\n        /// <summary>\n        /// Queries server for a value of a global variable.\n        /// </summary>\n        /// <param name=\"name\">Global variable name.</param>\n        /// <returns>Global variable value (converted).</returns>\n        internal object QueryGlobalVariable(string name)\n        {\n            // TODO: better query:\n\n            PhpDbResult result = ExecuteQuery(\"SHOW GLOBAL VARIABLES LIKE '\" + name + \"'\", true);\n\n            // default value\n            if (result.FieldCount != 2 || result.RowCount != 1)\n                return null;\n\n            return result.GetFieldValue(0, 1);\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/PhpSQLiteDbResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Data;\nusing System.Data.SQLite;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    public sealed class PhpSQLiteDbResult : PhpDbResult\n    {\n        /// <summary>\n        /// Creates an instance of a result resource.\n        /// </summary>\n        /// <param name=\"connection\">Database connection.</param>\n        /// <param name=\"reader\">Data reader from which to load results.</param>\n        /// <param name=\"convertTypes\">Whether to convert resulting values to PHP types.</param>\n        /// <exception cref=\"ArgumentNullException\">Argument is a <B>null</B> reference.</exception>\n        public PhpSQLiteDbResult(PhpDbConnection/*!*/ connection, IDataReader/*!*/ reader, bool convertTypes)\n            : base(connection, reader, \"SQLite result\", convertTypes)\n        {\n            // no code in here\n        }\n\n        internal static PhpSQLiteDbResult ValidResult(PhpResource handle)\n        {\n            PhpSQLiteDbResult result = handle as PhpSQLiteDbResult;\n            if (result != null && result.IsValid) return result;\n\n            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"invalid_result_resource\"));\n            return null;\n        }\n\n        protected override object[] GetValues(string[] dataTypes, bool convertTypes)\n        {\n            SQLiteDataReader my_reader = (SQLiteDataReader)Reader;\n\n            object[] oa = new object[my_reader.FieldCount];\n\n            if (convertTypes)\n            {\n                for (int i = 0; i < Reader.FieldCount; i++)\n                {\n                    oa[i] = ConvertDbValue(dataTypes[i], my_reader.GetValue(i));\n                }\n            }\n            else\n            {\n                for (int i = 0; i < Reader.FieldCount; i++)\n                {\n                    oa[i] = my_reader.GetValue(i);\n                }\n            }\n\n            return oa;\n        }\n\n        private object ConvertDbValue(string dataType, object sqlValue)\n        {\n            if (sqlValue == null || sqlValue.GetType() == typeof(string) || sqlValue == System.DBNull.Value)\n                return sqlValue;\n\n            if (sqlValue.GetType() == typeof(double))\n                return Core.Convert.DoubleToString((double)sqlValue);\n\n            if (sqlValue.GetType() == typeof(int))\n                return ((int)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(uint))\n                return ((uint)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(bool))\n                return (bool)sqlValue ? \"1\" : \"0\";\n\n            if (sqlValue.GetType() == typeof(byte))\n                return ((byte)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(sbyte))\n                return ((sbyte)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(short))\n                return ((short)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(ushort))\n                return ((ushort)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(float))\n                return Core.Convert.DoubleToString((float)sqlValue);\n\n            //if (sqlValue.GetType() == typeof(DateTime))\n            //    return ConvertDateTime(dataType, (DateTime)sqlValue);\n\n            if (sqlValue.GetType() == typeof(long))\n                return ((long)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(ulong))\n                return ((ulong)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(TimeSpan))\n                return ((TimeSpan)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(decimal))\n                return ((decimal)sqlValue).ToString();\n\n            if (sqlValue.GetType() == typeof(byte[]))\n                return new PhpBytes((byte[])sqlValue);\n\n            //MySqlDateTime sql_date_time = sqlValue as MySqlDateTime;\n            //if (sqlValue.GetType() == typeof(MySqlDateTime))\n            //{\n            //    MySqlDateTime sql_date_time = (MySqlDateTime)sqlValue;\n            //    if (sql_date_time.IsValidDateTime)\n            //        return ConvertDateTime(dataType, sql_date_time.GetDateTime());\n\n            //    if (dataType == \"DATE\" || dataType == \"NEWDATE\")\n            //        return \"0000-00-00\";\n            //    else\n            //        return \"0000-00-00 00:00:00\";\n            //}\n\n            Debug.Fail(\"Unexpected DB field type \" + sqlValue.GetType() + \".\");\n            return sqlValue.ToString();\n        }\n\n        //private string ConvertDateTime(string dataType, DateTime value)\n        //{\n        //    if (dataType == \"DATE\" || dataType == \"NEWDATE\")\n        //        return value.ToString(\"yyyy-MM-dd\");\n        //    else\n        //        return value.ToString(\"yyyy-MM-dd HH:mm:ss\");\n        //}\n\n        protected override string MapFieldTypeName(string typeName)\n        {\n            switch (typeName)\n            {\n                case \"VARCHAR\":\n                    return \"string\";\n\n                case \"INT\":\n                case \"BIGINT\":\n                case \"MEDIUMINT\":\n                case \"SMALLINT\":\n                case \"TINYINT\":\n                    return \"int\";\n\n                case \"FLOAT\":\n                case \"DOUBLE\":\n                case \"DECIMAL\":\n                    return \"real\";\n\n                case \"YEAR\":\n                    return \"year\";\n\n                case \"DATE\":\n                case \"NEWDATE\":\n                    return \"date\";\n\n                case \"TIMESTAMP\":\n                    return \"timestamp\";\n\n                case \"DATETIME\":\n                    return \"datetime\";\n\n                case \"TIME\":\n                    return \"time\";\n\n                case \"SET\":\n                    return \"set\";\n\n                case \"ENUM\":\n                    return \"enum\";\n\n                case \"TINY_BLOB\":\n                case \"MEDIUM_BLOB\":\n                case \"LONG_BLOB\":\n                case \"BLOB\":\n                    return \"blob\";\n\n                // not in PHP:\n                case \"BIT\":\n                    return \"bit\";\n\n                case null:\n                case \"NULL\":\n                    return \"NULL\";\n\n                default:\n                    return \"unknown\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLite.QueryResultKeys.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    partial class SQLite\n    {\n        /// <summary>\n        /// Query result array format.\n        /// </summary>\n        [Flags]\n        public enum QueryResultKeys\n        {\n            /// <summary>\n            /// Add items keyed by column names.\n            /// </summary>\n            [ImplementsConstant(\"SQLITE_ASSOC\")]\n            ColumnNames = 1,\n\n            /// <summary>\n            /// Add items keyed by column indices.\n            /// </summary>\n            [ImplementsConstant(\"SQLITE_NUM\")]\n            Numbers = 2,\n\n            /// <summary>\n            /// Add both items keyed by column names and items keyd by column indices.\n            /// </summary>\n            [ImplementsConstant(\"SQLITE_BOTH\")]\n            Both = Numbers | ColumnNames\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLite.Status.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    partial class SQLite\n    {\n        public enum Status\n        {\n            [ImplementsConstant(\"SQLITE_OK\")]\n            SQLITE_OK = 0,\n            [ImplementsConstant(\"SQLITE_ERROR\")]\n            SQLITE_ERROR = 1,   /* SQL error or missing database */\n            [ImplementsConstant(\"SQLITE_INTERNAL\")]\n            SQLITE_INTERNAL = 2,  /* Internal logic error in SQLite */\n            [ImplementsConstant(\"SQLITE_PERM\")]\n            SQLITE_PERM = 3,  /* Access permission denied */\n            [ImplementsConstant(\"SQLITE_ABORT\")]\n            SQLITE_ABORT = 4,  /* Callback routine requested an abort */\n            [ImplementsConstant(\"SQLITE_BUSY\")]\n            SQLITE_BUSY = 5,  /* The database file is locked */\n            [ImplementsConstant(\"SQLITE_LOCKED\")]\n            SQLITE_LOCKED = 6,  /* A table in the database is locked */\n            [ImplementsConstant(\"SQLITE_NOMEM\")]\n            SQLITE_NOMEM = 7,  /* A malloc() failed */\n            [ImplementsConstant(\"SQLITE_READONLY\")]\n            SQLITE_READONLY = 8,  /* Attempt to write a readonly database */\n            [ImplementsConstant(\"SQLITE_INTERRUPT\")]\n            SQLITE_INTERRUPT = 9,  /* Operation terminated by sqlite3_interrupt()*/\n            [ImplementsConstant(\"SQLITE_IOERR\")]\n            SQLITE_IOERR = 10,  /* Some kind of disk I/O error occurred */\n            [ImplementsConstant(\"SQLITE_CORRUPT\")]\n            SQLITE_CORRUPT = 11,  /* The database disk image is malformed */\n            [ImplementsConstant(\"SQLITE_NOTFOUND\")]\n            SQLITE_NOTFOUND = 12,  /* NOT USED. Table or record not found */\n            [ImplementsConstant(\"SQLITE_FULL\")]\n            SQLITE_FULL = 13,  /* Insertion failed because database is full */\n            [ImplementsConstant(\"SQLITE_CANTOPEN\")]\n            SQLITE_CANTOPEN = 14,  /* Unable to open the database file */\n            [ImplementsConstant(\"SQLITE_PROTOCOL\")]\n            SQLITE_PROTOCOL = 15,  /* NOT USED. Database lock protocol error */\n            [ImplementsConstant(\"SQLITE_EMPTY\")]\n            SQLITE_EMPTY = 16,  /* Database is empty */\n            [ImplementsConstant(\"SQLITE_SCHEMA\")]\n            SQLITE_SCHEMA = 17,  /* The database schema changed */\n            [ImplementsConstant(\"SQLITE_TOOBIG\")]\n            SQLITE_TOOBIG = 18,  /* String or BLOB exceeds size limit */\n            [ImplementsConstant(\"SQLITE_CONSTRAINT\")]\n            SQLITE_CONSTRAINT = 19,  /* Abort due to constraint violation */\n            [ImplementsConstant(\"SQLITE_MISMATCH\")]\n            SQLITE_MISMATCH = 20,  /* Data type mismatch */\n            [ImplementsConstant(\"SQLITE_MISUSE\")]\n            SQLITE_MISUSE = 21,  /* Library used incorrectly */\n            [ImplementsConstant(\"SQLITE_NOLFS\")]\n            SQLITE_NOLFS = 22,  /* Uses OS features not supported on host */\n            [ImplementsConstant(\"SQLITE_AUTH\")]\n            SQLITE_AUTH = 23,  /* Authorization denied */\n            [ImplementsConstant(\"SQLITE_FORMAT\")]\n            SQLITE_FORMAT = 24,  /* Auxiliary database format error */\n            [ImplementsConstant(\"SQLITE_RANGE\")]\n            SQLITE_RANGE = 25,  /* 2nd parameter to sqlite3_bind out of range */\n            [ImplementsConstant(\"SQLITE_NOTADB\")]\n            SQLITE_NOTADB = 26,  /* File opened that is not a database file */\n            [ImplementsConstant(\"SQLITE_ROW\")]\n            SQLITE_ROW = 100,  /* sqlite3_step() has another row ready */\n            [ImplementsConstant(\"SQLITE_DONE\")]\n            SQLITE_DONE = 101,  /* sqlite3_step() has finished executing */\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLite.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Data.SQLite;\n\nnamespace PHP.Library.Data\n{\n    public static partial class SQLite\n    {\n        public const int DEFAULT_FILE_MODE = 438; //666 octal\n\n        #region sqlite_open\n        [ImplementsFunction(\"sqlite_open\")]\n        [return: CastToFalse]\n        public static PhpResource Open(string filename)\n        {\n            return Open(filename, DEFAULT_FILE_MODE, null, false);\n        }\n\n\n        [ImplementsFunction(\"sqlite_open\")]\n        [return: CastToFalse]\n        public static PhpResource Open(string filename, int mode)\n        {\n            return Open(filename, mode, null, false);\n        }\n\n        [ImplementsFunction(\"sqlite_open\")]\n        [return: CastToFalse]\n        public static PhpResource Open(string filename, int mode, PhpReference error)\n        {\n            return Open(filename, mode, error, false);\n        }\n        #endregion\n\n        [ImplementsFunction(\"sqlite_popen\")]\n        [return: CastToFalse]\n        public static PhpResource POpen(string filename, int mode, PhpReference error)\n        {\n            return Open(filename, mode, error, true);\n        }\n\n        private static PhpResource Open(string filename, int mode, PhpReference error, bool persistent)\n        {\n            if (persistent) PhpException.FunctionNotSupported(PhpError.Notice);\n\n            SQLiteConnectionStringBuilder csb = new SQLiteConnectionStringBuilder();\n            csb.DataSource = filename;\n            csb.Version = 3;\n\n            try\n            {\n                PhpSQLiteDbConnection connection = new PhpSQLiteDbConnection(csb.ConnectionString);\n                if (error != null)\n                {\n                    error.Value = null;\n                }\n                return connection;\n            }\n            catch (Exception ex)\n            {\n                if (error != null)\n                {\n                    error.Value = ex.Message;\n                }\n                return null;\n            }\n        }\n\n        /// <summary>\n        /// Closes a specified connection.\n        /// </summary>\n        /// <param name=\"linkIdentifier\">The connection resource.</param>\n        /// <returns><B>true</B> on success, <B>false</B> on failure.</returns>\n        [ImplementsFunction(\"sqlite_close\")]\n        public static void Close(PhpResource linkIdentifier)\n        {\n            PhpSQLiteDbConnection connection = PhpSQLiteDbConnection.ValidConnection(linkIdentifier);\n            if (connection != null)\n            {\n                connection.Close();\n            }\n        }\n\n        #region sqlite_query\n        [ImplementsFunction(\"sqlite_query\")]\n        public static PhpResource Query(object arg1, object arg2)\n        {\n            return Query(arg1, arg2, QueryResultKeys.Both, null);\n        }\n\n        [ImplementsFunction(\"sqlite_query\")]\n        public static PhpResource Query(object arg1, object arg2, QueryResultKeys result_type)\n        {\n            return Query(arg1, arg2, result_type, null);\n        }\n\n        [ImplementsFunction(\"sqlite_query\")]\n        public static PhpResource Query(object arg1, object arg2, QueryResultKeys result_type, PhpReference error_msg)\n        {\n            PhpSQLiteDbConnection connection = PhpSQLiteDbConnection.ValidConnection(arg1 as PhpResource);\n            string query;\n            if (connection == null)\n            {\n                connection = PhpSQLiteDbConnection.ValidConnection(arg2 as PhpResource);\n                query = PHP.Core.Convert.ObjectToString(arg1);\n            }\n            else\n            {\n                query = PHP.Core.Convert.ObjectToString(arg2);\n            }\n\n            if (query == null || connection == null)\n                return null;\n\n            try\n            {\n                var result = connection.ExecuteQuery(query, true);\n                if (error_msg != null)\n                {\n                    error_msg.Value = null;\n                }\n                return result;\n            }\n            catch (Exception ex)\n            {\n                if (error_msg != null)\n                {\n                    error_msg.Value = ex.Message;\n                }\n                return null;\n            }\n        }\n        #endregion\n\n        #region sqlite_exec\n        [ImplementsFunction(\"sqlite_exec\")]\n        public static bool Exec(object arg1, object arg2)\n        {\n            return Exec(arg1, arg2, null);\n        }\n\n        [ImplementsFunction(\"sqlite_exec\")]\n        public static bool Exec(object arg1, object arg2, PhpReference error_message)\n        {\n            PhpSQLiteDbConnection connection = PhpSQLiteDbConnection.ValidConnection(arg1 as PhpResource);\n            string query;\n            if (connection == null)\n            {\n                connection = PhpSQLiteDbConnection.ValidConnection(arg2 as PhpResource);\n                query = PHP.Core.Convert.ObjectToString(arg1);\n            }\n            else\n            {\n                query = PHP.Core.Convert.ObjectToString(arg2);\n            }\n\n            if (query == null || connection == null)\n                return false;\n\n            try\n            {\n                connection.ExecuteCommand(query, System.Data.CommandType.Text, true, null, true);\n                if (error_message != null)\n                {\n                    error_message.Value = null;\n                }\n                return true;\n            }\n            catch (Exception ex)\n            {\n                if (error_message != null)\n                {\n                    error_message.Value = ex.Message;\n                }\n                return false;\n            }\n        }\n        #endregion\n\n        [ImplementsFunction(\"sqlite_fetch_array\")]\n        [return: CastToFalse]\n        public static PhpArray FetchArray(PhpResource resultIdentifier)\n        {\n            return FetchArray(resultIdentifier, QueryResultKeys.Both, true);\n        }\n\n        [ImplementsFunction(\"sqlite_fetch_array\")]\n        [return: CastToFalse]\n        public static PhpArray FetchArray(PhpResource resultIdentifier, object result_type)\n        {\n            return FetchArray(resultIdentifier, result_type, true);\n        }\n\n        [ImplementsFunction(\"sqlite_fetch_array\")]\n        [return: CastToFalse]\n        public static PhpArray FetchArray(PhpResource resultIdentifier, object result_type, object decode_binary)\n        {\n            PhpSQLiteDbResult res = PhpSQLiteDbResult.ValidResult(resultIdentifier);\n            if (res == null)\n            {\n                return null;\n            }\n            SQLite.QueryResultKeys resType = QueryResultKeys.Both;\n            if (result_type != null)\n            {\n                int val = PHP.Core.Convert.ObjectToInteger(result_type);\n                if (val != 0)\n                {\n                    resType = (SQLite.QueryResultKeys)val;\n                }\n            }\n            bool intKey = (resType & SQLite.QueryResultKeys.Numbers) == SQLite.QueryResultKeys.Numbers;\n            bool strKey = (resType & SQLite.QueryResultKeys.ColumnNames) == SQLite.QueryResultKeys.ColumnNames;\n            PhpArray arr = res.FetchArray(intKey, strKey);\n            return arr;\n        }\n\n        #region fetch_all\n        [ImplementsFunction(\"sqlite_fetch_all\")]\n        [return: CastToFalse]\n        public static PhpArray FetchAll(PhpResource resultIdentifier)\n        {\n            return FetchAll(resultIdentifier, null, true);\n        }\n\n        [ImplementsFunction(\"sqlite_fetch_all\")]\n        [return: CastToFalse]\n        public static PhpArray FetchAll(PhpResource resultIdentifier, object result_type)\n        {\n            return FetchAll(resultIdentifier, result_type, true);\n        }\n\n        [ImplementsFunction(\"sqlite_fetch_all\")]\n        [return: CastToFalse]\n        public static PhpArray FetchAll(PhpResource resultIdentifier, object result_type, object decode_binary)\n        {\n            PhpSQLiteDbResult res = PhpSQLiteDbResult.ValidResult(resultIdentifier);\n            if (res == null)\n            {\n                return null;\n            }\n            SQLite.QueryResultKeys resType = QueryResultKeys.Both;\n            if (result_type != null)\n            {\n                int val = PHP.Core.Convert.ObjectToInteger(result_type);\n                if (val != 0)\n                {\n                    resType = (SQLite.QueryResultKeys)val;\n                }\n            }\n            bool intKey = (resType & SQLite.QueryResultKeys.Numbers) == SQLite.QueryResultKeys.Numbers;\n            bool strKey = (resType & SQLite.QueryResultKeys.ColumnNames) == SQLite.QueryResultKeys.ColumnNames;\n\n            PhpArray arr = new PhpArray();\n            PhpArray line = null;\n            while ((line = res.FetchArray(intKey, strKey)) != null)\n            {\n                arr.AddToEnd(line);\n            }\n\n            if (arr.Count == 0)\n            {\n                return null;\n            }\n            return arr;\n        }\n        #endregion\n\n        #region sqlite_create_function\n        [ImplementsFunction(\"sqlite_create_function\")]\n        [PhpVisible]\n        public static void CreateFunction(PhpResource dbhandle, string function_name, string callback)\n        {\n            CreateFunction(dbhandle, function_name, callback, -1);\n        }\n        [ImplementsFunction(\"sqlite_create_function\")]\n        [PhpVisible]\n        public static void CreateFunction(PhpResource dbhandle, string function_name, object callback, int num_args)\n        {\n            PhpSQLiteDbConnection connection = PhpSQLiteDbConnection.ValidConnection(dbhandle);\n            PhpCallback cb = PHP.Core.Convert.ObjectToCallback(callback);\n\n            int paramCount = cb.TargetRoutine.PhpFunction.ArgFullInfo.GetParameters().Length;\n            Delegate d = null;\n            SQLiteFunction.RegisterFunction(function_name, paramCount, FunctionType.Scalar, null, d, null);\n            //SQLiteFunction.RegisterFunction()\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\nusing System.Collections;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Data\n{\n    public sealed class SQLiteConfiguration\n    {\n        private SQLiteConfiguration() { }\n\n        #region Legacy Configuration\n\n        /// <summary>\n        /// Gets, sets, or restores a value of a legacy configuration option.\n        /// </summary>\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\n        {\n            SQLiteLocalConfig local = (SQLiteLocalConfig)config.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton);\n            SQLiteLocalConfig @default = DefaultLocal;\n            SQLiteGlobalConfig global = Global;\n\n            switch (option)\n            {\n                // local:\n\n                // global:\n                case \"sqlite.assoc_case\":\n                    Debug.Assert(action == IniAction.Get);\n                    return PhpIni.GSR(ref global.AssocCase, 0, value, action);\n            }\n\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\n            return null;\n        }\n\n        /// <summary>\n        /// Writes SQLite legacy options and their values to XML text stream.\n        /// Skips options whose values are the same as default values of Phalanger.\n        /// </summary>\n        /// <param name=\"writer\">XML writer.</param>\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\n        {\n            if (writer == null)\n                throw new ArgumentNullException(\"writer\");\n            if (options == null)\n                throw new ArgumentNullException(\"options\");\n\n            SQLiteLocalConfig local = new SQLiteLocalConfig();\n            SQLiteGlobalConfig global = new SQLiteGlobalConfig();\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\n\n            ow.StartSection(\"sqlite\");\n\n            // local:\n\n            // global:\n            ow.WriteOption(\"sqlite.assoc_case\", \"AssocCase\", 0, global.AssocCase);\n\n            ow.WriteEnd();\n        }\n\n        /// <summary>\n        /// Registers legacy ini-options.\n        /// </summary>\n        internal static void RegisterLegacyOptions()\n        {\n            const string s = SQLiteLibraryDescriptor.ExtensionName;\n            GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\n\n            // local:\n\n            // global:\n            IniOptions.Register(\"sqlite.assoc_case\", IniFlags.Supported | IniFlags.Global, d, s);\n        }\n\n        #endregion\n\n        #region Configuration Getters\n\n        /// <summary>\n        /// Gets the library configuration associated with the current script context.\n        /// </summary>\n        public static SQLiteLocalConfig Local\n        {\n            get\n            {\n                return (SQLiteLocalConfig)Configuration.Local.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the default library configuration.\n        /// </summary>\n        public static SQLiteLocalConfig DefaultLocal\n        {\n            get\n            {\n                return (SQLiteLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the global library configuration.\n        /// </summary>\n        public static SQLiteGlobalConfig Global\n        {\n            get\n            {\n                return (SQLiteGlobalConfig)Configuration.Global.GetLibraryConfig(SQLiteLibraryDescriptor.Singleton);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteConnectionManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace PHP.Library.Data\n{\n    internal sealed class SQLiteConnectionManager : ConnectionManager\n    {\n        protected override PhpDbConnection CreateConnection(string/*!*/ connectionString)\n        {\n            return new PhpSQLiteDbConnection(connectionString);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteDatabase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.ComponentModel;\nusing PHP.Core.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace PHP.Library.Data\n{\n    [ImplementsType]\n    public class SQLiteDatabase : PhpObject\n    {\n        public SQLiteDatabase(ScriptContext context, object filename)\n            : base(context, true)\n        {\n            this.__construct(context, filename);\n        }\n        public SQLiteDatabase(ScriptContext context, object filename, object argMode)\n            : base(context, true)\n        {\n            this.__construct(context, filename, argMode);\n        }\n\n        public SQLiteDatabase(ScriptContext context, object filename, object argMode, object error)\n            : base(context, true)\n        {\n            this.__construct(context, filename, argMode, error);\n        }\n\n        private string m_filename;\n        private PhpResource m_con = null;\n\n        [ImplementsMethod]\n        public object __construct(ScriptContext context, object argFileName)\n        {\n            return this.__construct(context, argFileName, SQLite.DEFAULT_FILE_MODE, null);\n        }\n\n        [ImplementsMethod]\n        public object __construct(ScriptContext context, object argFileName, object argMode)\n        {\n            return this.__construct(context, argFileName, argMode, null);\n        }\n\n        [ImplementsMethod]\n        public object __construct(ScriptContext context, object argFileName, object argMode, object error)\n        {\n            string filename = PHP.Core.Convert.ObjectToString(argFileName);\n            int mode = PHP.Core.Convert.ObjectToInteger(argMode);\n            if (mode == 0)\n            {\n                mode = SQLite.DEFAULT_FILE_MODE;\n            }\n            this.m_filename = filename;\n            this.m_con = SQLite.Open(this.m_filename, mode, error as PhpReference);\n            return null;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object __construct(object instance, PhpStack stack)\n        {\n            object argFileName = stack.PeekValue(1);\n            object argMode = stack.PeekValueOptional(2);\n            PhpReference error = stack.PeekReferenceOptional(3);\n            stack.RemoveFrame();\n\n            string filename = PHP.Core.Convert.ObjectToString(argFileName);\n            int mode = PHP.Core.Convert.ObjectToInteger(argMode);\n            return ((SQLiteDatabase)instance).__construct(stack.Context, filename, mode, error);\n        }\n\n        [ImplementsMethod]\n        [return: CastToFalse]\n        public object query(ScriptContext context, object query, object resultType, PhpReference error)\n        {\n            SQLite.QueryResultKeys rt = SQLite.QueryResultKeys.Both;\n            int vRt = PHP.Core.Convert.ObjectToInteger(resultType);\n            if (Enum.IsDefined(typeof(SQLite.QueryResultKeys), vRt))\n            {\n                rt = (SQLite.QueryResultKeys)vRt;\n            }\n\n            PhpSQLiteDbResult result = (PhpSQLiteDbResult)SQLite.Query(this.m_con, query, rt, error);\n            if (result != null)\n            {\n                return new SQLiteResult(result);\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object query(object instance, PhpStack stack)\n        {\n            object query = stack.PeekValue(1);\n            object resultType = stack.PeekValueOptional(2);\n            PhpReference error = stack.PeekReferenceOptional(3);\n            stack.RemoveFrame();\n            return ((SQLiteDatabase)instance).query(stack.Context, query, resultType, error);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object exec(ScriptContext context, object query, object error)\n        {\n            return SQLite.Exec(this.m_con, query, error as PhpReference);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object exec(object instance, PhpStack stack)\n        {\n            object query = stack.PeekValue(1);\n            object error = stack.PeekReferenceOptional(2);\n            stack.RemoveFrame();\n            return ((SQLiteDatabase)instance).exec(stack.Context, query, error);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object createFunction(ScriptContext context, object function_name, object callback)\n        {\n            return this.createFunction(context, function_name, callback, -1);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object createFunction(ScriptContext context, object function_name, object callback, object num_args)\n        {\n            string fn = PHP.Core.Convert.ObjectToString(function_name);\n            int na = PHP.Core.Convert.ObjectToInteger(num_args);\n            SQLite.CreateFunction(this.m_con, fn, callback, na);\n            return null;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object createFunction(object instance, PhpStack stack)\n        {\n            object function_name = stack.PeekValue(1);\n            object callback = stack.PeekValue(2);\n            object num_args = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n            return ((SQLiteDatabase)instance).createFunction(stack.Context, function_name, callback, num_args);\n        }\n    }\n}"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteGlobalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Xml;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    /// <summary>\n    /// Script dependent SQLite configuration.\n    /// </summary>\n    [Serializable]\n    public sealed class SQLiteGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal SQLiteGlobalConfig() { }\n\n        public int AssocCase = 0;\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            switch (name)\n            {\n                case \"AssocCase\":\n                    this.AssocCase = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\n                    break;\n                default:\n                    return false;\n            }\n            return true;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (SQLiteGlobalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteLibraryDescriptor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Data\n{\n    /// <summary>\n    /// Describes the class library assembly content and configuration.\n    /// </summary>\n    public sealed class SQLiteLibraryDescriptor : PhpLibraryDescriptor\n    {\n        /// <summary>\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\n        /// </summary>\n        internal static SQLiteLibraryDescriptor Singleton { get { return singleton; } }\n        private static SQLiteLibraryDescriptor singleton;\n\n        ///// <summary>\n        ///// Gets a list of implemented extensions.\n        ///// </summary>\n        //public override string[] ImplementedExtensions\n        //{\n        //  get { return new string[] { ExtensionName }; } \n        //}\n        internal const string ExtensionName = \"sqlite\";\n\n        /// <summary>\n        /// Called by the Core after the library is loaded.\n        /// </summary>\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\n        {\n            base.Loaded(assemblyAttribute, configStore);\n            singleton = this;\n            SQLiteConfiguration.RegisterLegacyOptions();\n        }\n\n        /// <summary>\n        /// Parses a configuration section belonging to the MySql library. \n        /// </summary>\n        /// <param name=\"result\">A configuration context.</param>\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\n        /// <returns>Updated configuration context.</returns>\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\n        {\n            // parses XML tree:\n            ConfigUtils.ParseNameValueList(section, context, (SQLiteLocalConfig)result.Local, (SQLiteGlobalConfig)result.Global);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates empty library configuration context.\n        /// </summary>\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\n        protected override ConfigContextBase CreateConfigContext()\n        {\n            return new ConfigContextBase(new SQLiteLocalConfig(), new SQLiteGlobalConfig());\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteLocalConfig.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Xml;\nusing System.Collections;\nusing System.Configuration;\n\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    [Serializable]\n    public sealed class SQLiteLocalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal SQLiteLocalConfig()\n        {\n        }\n\n        //public int AssocCase = 0;\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (SQLiteLocalConfig)this.MemberwiseClone();\n        }\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            //switch (name)\n            //{\n            //    case \"AssocCase\":\n            //        this.AssocCase = ConfigUtils.ParseInteger(value, Int32.MinValue, Int32.MaxValue, node);\n            //        break;\n            //    default:\n            //        return false;\n            //}\n            //return true;\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "Source/Extensions/SQLite/SQLiteResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Data\n{\n    [ImplementsType]\n    public class SQLiteResult : PhpResource\n    {\n        private readonly PhpSQLiteDbResult m_res;\n\n        internal SQLiteResult(PhpDbResult res)\n            : base(\"sqlite result\")\n        {\n            this.m_res = (PhpSQLiteDbResult)res;\n        }\n\n        [PhpVisible]\n        public PhpArray fetchAll(object result_type, object decode_binary)\n        {\n            return SQLite.FetchAll(this.m_res, result_type, decode_binary);\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/SQLite/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"System.Data.SQLite.Core\" version=\"1.0.98.1\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "Source/Extensions/SQLite/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetSQLite\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/SQLite/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetSQLite\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/Soap/CodeConstants.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Summary description for CodeConstants.\r\n    /// </summary>\r\n    internal struct CodeConstants\r\n    {\r\n        internal const string BEGIN = \"Begin\";\r\n        internal const string END = \"End\";\r\n\r\n        internal const string CODENAMESPACE = \"PHP.Library.Soap.DynamicProxy\";\r\n        internal const string DEFAULTBASETYPE = \"System.Web.Services.Protocols.SoapHttpClientProtocol\";\r\n        internal const string CUSTOMBASETYPE = \"PHP.Library.Soap.SoapHttpClientProtocolExtended\";\r\n\r\n        internal const string LIBTEMPDIR = \"DynamicProxyTempDir\";\r\n        internal const string TEMPDLLEXTENSION = \"_soapclient_tmp.dll\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/CompiledAssemblyCache.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Security.Cryptography;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing System.Configuration;\r\nusing System.Text.RegularExpressions;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Summary description for CompiledAssemblyCache.\r\n    /// </summary>\r\n    internal class CompiledAssemblyCache\r\n    {\r\n        private static string _libPath = \"\";\r\n\r\n        private const string TemporaryFilesSearchPattern = \".*\\\\#(?<Hash>[0-9a-f]*)\"+CodeConstants.TEMPDLLEXTENSION;\r\n        private static Regex reFileStamp = new Regex(TemporaryFilesSearchPattern, RegexOptions.Compiled);\r\n\r\n        private CompiledAssemblyCache()\r\n        {\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Checks the cache.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        internal static Assembly CheckCacheForAssembly(string wsdl, int contentHash)\r\n        {\r\n            string dir = GetLibTempPath();\r\n            string searchPattern = GetMd5Sum(wsdl) + \"#*\" + CodeConstants.TEMPDLLEXTENSION;\r\n\r\n            foreach (string file in System.IO.Directory.GetFiles(dir, searchPattern))\r\n            {\r\n                Match match = reFileStamp.Match(file);\r\n                \r\n                // not a file we are looking for\r\n                if (!match.Success)\r\n                    continue;\r\n\r\n                int fileHash;\r\n                if (!Int32.TryParse((string)match.Groups[\"Hash\"].Value, NumberStyles.AllowHexSpecifier,\r\n                    CultureInfo.InvariantCulture, out fileHash)) continue;\r\n\r\n                if (fileHash == contentHash)\r\n                {\r\n                    return Assembly.LoadFrom(file);\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Clears the cache.\r\n        ///// </summary>\r\n        ///// <param name=\"wsdlLocation\">WSDL location.</param>\r\n        //internal static void ClearCache(string wsdlLocation)\r\n        //{\r\n        //    // clear the cached assembly file for this WSDL\r\n        //    try\r\n        //    {\r\n        //        string path = GetLibTempPath();\r\n\r\n        //        //string path = Path.GetTempPath();\r\n        //        string newFilename = path + GetMd5Sum(wsdlLocation) + CodeConstants.TEMPDLLEXTENSION;\r\n\r\n        //        File.Delete(newFilename);\r\n        //    }\r\n        //    catch (Exception ex)\r\n        //    {\r\n        //        //can't delete cache, just leave a notification file so the next time assembly is regenerated\r\n\r\n        //        throw new TemporaryCacheException(\"Problem occured when trying to clear temporary local assembly cache for WSDL: \" + wsdlLocation + \".\", ex);\r\n        //    }\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Clears all cached DLLs.\r\n        ///// </summary>\r\n        //internal static void ClearAllCached()\r\n        //{\r\n        //    string path = GetLibTempPath();\r\n        //    DirectoryInfo di = new DirectoryInfo(path);\r\n        //    FileInfo[] dllFiles = di.GetFiles(\"*\" + CodeConstants.TEMPDLLEXTENSION);\r\n\r\n        //    foreach (FileInfo fi in dllFiles)\r\n        //    {\r\n        //        try\r\n        //        {\r\n        //            fi.Delete();\r\n        //        }\r\n        //        catch (Exception ex)\r\n        //        {\r\n        //            throw new TemporaryCacheException(\"Problem occurred when trying to clear temporary local assembly cache.\", ex);\r\n        //        }\r\n        //    }\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Renames the temp assembly.\r\n        /// </summary>\r\n        /// <param name=\"pathToAssembly\">Path to assembly.</param>\r\n        /// <param name=\"name\">New name for the assembly</param>\r\n        /// <param name=\"hash\">Hash from content of the wsdl file.</param>\r\n        internal static void RenameTempAssembly(string pathToAssembly, string name, int hash)\r\n        {\r\n            string path = Path.GetDirectoryName(pathToAssembly);\r\n            string newFilename = path + @\"\\\" + CompiledAssemblyCache.GetMd5Sum(name) + \"#\" + hash.ToString(\"x16\") + CodeConstants.TEMPDLLEXTENSION;\r\n\r\n            try\r\n            {\r\n                File.Copy(pathToAssembly, newFilename);\r\n            }\r\n            catch\r\n            {\r\n                //do nothing\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the MD5 sum.\r\n        /// </summary>\r\n        /// <param name=\"stringToHash\">String to hash.</param>\r\n        /// <returns></returns>\r\n        internal static string GetMd5Sum(string stringToHash)\r\n        {\r\n            // First we need to convert the string into bytes, which\r\n            // means using a text encoder\r\n            Encoder enc = Encoding.Unicode.GetEncoder();\r\n\r\n            // Create a buffer large enough to hold the string\r\n            byte[] unicodeText = new byte[stringToHash.Length * 2];\r\n            enc.GetBytes(stringToHash.ToCharArray(), 0, stringToHash.Length, unicodeText, 0, true);\r\n\r\n            // Now that we have a byte array we can ask the CSP to hash it\r\n            MD5 md5 = new MD5CryptoServiceProvider();\r\n            byte[] result = md5.ComputeHash(unicodeText);\r\n\r\n            // Build the final string by converting each byte\r\n            // into hex and appending it to a StringBuilder\r\n            StringBuilder sb = new StringBuilder();\r\n            for (int i = 0; i < result.Length; i++)\r\n            {\r\n                sb.Append(result[i].ToString(\"X2\", CultureInfo.CurrentCulture));\r\n            }\r\n\r\n            return sb.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the app temp path.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        internal static string GetLibTempPath()\r\n        {\r\n            string tempPath = _libPath;\r\n\r\n            if (tempPath.Length == 0)\r\n                tempPath = ConfigurationManager.AppSettings[CodeConstants.LIBTEMPDIR];\r\n            if (tempPath == null || tempPath.Length == 0)\r\n                tempPath = Path.GetTempPath();\r\n\r\n            return tempPath;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the lib temp path.\r\n        /// </summary>\r\n        /// <param name=\"path\">Path.</param>\r\n        internal static void SetLibTempPath(string path)\r\n        {\r\n            _libPath = path;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2011 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    #region Local Configuration\r\n\r\n    /// <summary>\r\n    /// Script independent Soap configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class SoapLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal SoapLocalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (SoapLocalConfig)this.MemberwiseClone();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Global Configuration\r\n\r\n    /// <summary>\r\n    /// Script dependent Soap configuration.\r\n    /// </summary>\r\n    [Serializable]\r\n    public sealed class SoapGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n    {\r\n        internal SoapGlobalConfig() { }\r\n\r\n        /// <summary>\r\n        /// Loads configuration from XML.\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <param name=\"value\"></param>\r\n        /// <param name=\"node\"></param>\r\n        /// <returns></returns>\r\n        public bool Parse(string name, string value, XmlNode node)\r\n        {\r\n            switch (name)\r\n            {\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a deep copy of the configuration record.\r\n        /// </summary>\r\n        /// <returns>The copy.</returns>\r\n        public IPhpConfiguration DeepCopy()\r\n        {\r\n            return (SoapGlobalConfig)this.MemberwiseClone();\r\n        }\r\n    }\r\n\r\n    #endregion\r\n\r\n    /// <summary>\r\n    /// Soap extension configuration.\r\n    /// </summary>\r\n    public static class CurlConfiguration\r\n    {\r\n        #region Legacy Configuration\r\n\r\n        /// <summary>\r\n        /// Gets, sets, or restores a value of a legacy configuration option.\r\n        /// </summary>\r\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n        {\r\n            SoapLocalConfig local = (SoapLocalConfig)config.GetLibraryConfig(SoapLibraryDescriptor.Singleton);\r\n            SoapLocalConfig @default = DefaultLocal;\r\n            SoapGlobalConfig global = Global;\r\n\r\n            //switch (option)\r\n            //{\r\n            //// local:\r\n\r\n            //case \"mssql.connect_timeout\":\r\n            //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n            //case \"mssql.timeout\":\r\n            //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n            //case \"mssql.batchsize\":\r\n            //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n            //// global:  \r\n\r\n            //case \"mssql.max_links\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n            //case \"mssql.secure_connection\":\r\n            //Debug.Assert(action == IniAction.Get);\r\n            //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n            //}\r\n\r\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes Soap legacy options and their values to XML text stream.\r\n        /// Skips options whose values are the same as default values of Phalanger.\r\n        /// </summary>\r\n        /// <param name=\"writer\">XML writer.</param>\r\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n        {\r\n            if (writer == null)\r\n                throw new ArgumentNullException(\"writer\");\r\n            if (options == null)\r\n                throw new ArgumentNullException(\"options\");\r\n\r\n            SoapLocalConfig local = new SoapLocalConfig();\r\n            SoapGlobalConfig global = new SoapGlobalConfig();\r\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            ow.StartSection(\"soap\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n            ow.WriteEnd();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers legacy ini-options.\r\n        /// </summary>\r\n        internal static void RegisterLegacyOptions()\r\n        {\r\n            //const string s = MbstringLibraryDescriptor.ExtensionName;\r\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Configuration Getters\r\n\r\n        /// <summary>\r\n        /// Gets the library configuration associated with the current script context.\r\n        /// </summary>\r\n        public static SoapLocalConfig Local\r\n        {\r\n            get\r\n            {\r\n                return (SoapLocalConfig)Configuration.Local.GetLibraryConfig(SoapLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the default library configuration.\r\n        /// </summary>\r\n        public static SoapLocalConfig DefaultLocal\r\n        {\r\n            get\r\n            {\r\n                return (SoapLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(SoapLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the global library configuration.\r\n        /// </summary>\r\n        public static SoapGlobalConfig Global\r\n        {\r\n            get\r\n            {\r\n                return (SoapGlobalConfig)Configuration.Global.GetLibraryConfig(SoapLibraryDescriptor.Singleton);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets local configuration associated with a specified script context.\r\n        /// </summary>\r\n        /// <param name=\"context\">Scritp context.</param>\r\n        /// <returns>Local library configuration.</returns>\r\n        public static SoapLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n        {\r\n            if (context == null)\r\n                throw new ArgumentNullException(\"context\");\r\n\r\n            return (SoapLocalConfig)context.Config.GetLibraryConfig(SoapLibraryDescriptor.Singleton);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/CustomExceptions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    ///// <summary>\r\n    ///// \r\n    ///// </summary>\r\n    //[Serializable]\r\n    //public class InvocationException : Exception\r\n    //{\r\n    //    /// <summary>\r\n    //    /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n    //    /// </summary>\r\n    //    public InvocationException()\r\n    //    {\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n    //    /// </summary>\r\n    //    /// <param name=\"message\">Message.</param>\r\n    //    public InvocationException(string message)\r\n    //        : base(message)\r\n    //    {\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n    //    /// </summary>\r\n    //    /// <param name=\"message\">Message.</param>\r\n    //    /// <param name=\"inner\">Inner.</param>\r\n    //    public InvocationException(string message, Exception inner)\r\n    //        : base(message, inner)\r\n    //    {\r\n    //    }\r\n\r\n    //    /// <summary>\r\n    //    /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n    //    /// </summary>\r\n    //    /// <param name=\"serializationInfo\">Serialization info.</param>\r\n    //    /// <param name=\"serializationContext\">Serialization context.</param>\r\n    //    protected InvocationException(SerializationInfo serializationInfo, StreamingContext serializationContext)\r\n    //        : base(serializationInfo, serializationContext)\r\n    //    { }\r\n    //}\r\n\r\n    /// <summary>\r\n    /// Exception that can occur when dynamicaly creating proxy type from WSDL\r\n    /// </summary>\r\n    [Serializable]\r\n    public class DynamicCompilationException : Exception\r\n    {\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"DynamicCompilationException\"/> instance.\r\n        /// </summary>\r\n        public DynamicCompilationException()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"DynamicCompilationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        public DynamicCompilationException(string message)\r\n            : base(message)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"DynamicCompilationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        /// <param name=\"inner\">Inner.</param>\r\n        public DynamicCompilationException(string message, Exception inner)\r\n            : base(message, inner)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"DynamicCompilationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"serializationInfo\">Serialization info.</param>\r\n        /// <param name=\"serializationContext\">Serialization context.</param>\r\n        protected DynamicCompilationException(SerializationInfo serializationInfo, StreamingContext serializationContext)\r\n            : base(serializationInfo, serializationContext)\r\n        { }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception that can occur when injecting SoapExtension into pipeline\r\n    /// </summary>\r\n    [Serializable]\r\n    public class PipelineConfigurationException : Exception\r\n    {\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PipelineConfigurationException\"/> instance.\r\n        /// </summary>\r\n        public PipelineConfigurationException()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PipelineConfigurationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        public PipelineConfigurationException(string message)\r\n            : base(message)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PipelineConfigurationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        /// <param name=\"inner\">Inner.</param>\r\n        public PipelineConfigurationException(string message, Exception inner)\r\n            : base(message, inner)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"PipelineConfigurationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"serializationInfo\">Serialization info.</param>\r\n        /// <param name=\"serializationContext\">Serialization context.</param>\r\n        protected PipelineConfigurationException(SerializationInfo serializationInfo, StreamingContext serializationContext)\r\n            : base(serializationInfo, serializationContext)\r\n        { }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Exception when trying to instantiate proxy object for SOAP service\r\n    /// </summary>\r\n    [Serializable]\r\n    public class ProxyTypeInstantiationException : Exception\r\n    {\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"ProxyTypeInstantiationException\"/> instance.\r\n        /// </summary>\r\n        public ProxyTypeInstantiationException()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"ProxyTypeInstantiationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        public ProxyTypeInstantiationException(string message)\r\n            : base(message)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"ProxyTypeInstantiationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        /// <param name=\"inner\">Inner.</param>\r\n        public ProxyTypeInstantiationException(string message, Exception inner)\r\n            : base(message, inner)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"ProxyTypeInstantiationException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"serializationInfo\">Serialization info.</param>\r\n        /// <param name=\"serializationContext\">Serialization context.</param>\r\n        protected ProxyTypeInstantiationException(SerializationInfo serializationInfo, StreamingContext serializationContext)\r\n            : base(serializationInfo, serializationContext)\r\n        { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/DynamicWebServiceProxy.cs",
    "content": "﻿using System;\r\nusing System.CodeDom;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections;\r\nusing System.Data;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Reflection;\r\n﻿using System.Security.Cryptography.X509Certificates;\r\nusing System.Text;\r\nusing System.Web;\r\nusing System.Web.Services.Description;\r\nusing System.Web.Services.Discovery;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Xml.Serialization;\r\nusing Microsoft.CSharp;\r\nusing PHP.Core;\r\nusing SDD = System.Data.Design;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n\r\n    internal class DynamicWebServiceProxy\r\n    {\r\n        private Assembly ass;\r\n        private object proxyInstance;\r\n        private string wsdl;\r\n        private string protocolName = \"Soap\";\r\n        private string proxySource;\r\n        private ServiceDescriptionImporter sdi;\r\n        private XmlSchemas schemas;\r\n        private bool enableMessageAccess;\r\n        private static bool pipelineProperlyConfigured;\r\n        private ArrayList outParams = new ArrayList();\r\n        private ServiceCache serviceCache;\r\n        private readonly X509Certificate2 certificate;\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"DynamicWebServiceProxy\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"wsdlLocation\">Location of WSDL file</param>\r\n        /// <param name=\"enableMessageAccess\">Enables access to SOAP messages</param>\r\n        /// <param name=\"wsdlCache\">Type of caching to be used</param>\r\n        /// <param name=\"certificate\">Certificate to use.</param>\r\n        internal DynamicWebServiceProxy(string wsdlLocation, bool enableMessageAccess = false, WsdlCache wsdlCache = WsdlCache.Both, X509Certificate2 certificate = null)\r\n        {\r\n            this.wsdl = wsdlLocation;\r\n            this.enableMessageAccess = enableMessageAccess;\r\n            this.serviceCache = new ServiceCache(wsdlLocation, wsdlCache, new ServiceCache.CacheMissEvent(BuildAssemblyFromWsdl));\r\n            this.certificate = certificate;\r\n            BuildProxy();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invokes the call.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public object InvokeCall(string methodName ,PhpArray parameters)\r\n        {\r\n            var soapProxy = (SoapHttpClientProtocolExtended)proxyInstance;\r\n            MethodInfo mi = soapProxy.GetType().GetMethod(methodName);\r\n\r\n            bool wrappedArgs = true;\r\n\r\n            object[] attr = mi.GetCustomAttributes(typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute), false);\r\n            if (attr.Length > 0 && attr[0].GetType() == typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute))\r\n            {\r\n                var soapMethodAttr = (System.Web.Services.Protocols.SoapDocumentMethodAttribute)attr[0];\r\n                if (soapMethodAttr.ParameterStyle == System.Web.Services.Protocols.SoapParameterStyle.Bare)\r\n                {\r\n                    wrappedArgs = false;\r\n                }\r\n            }\r\n\r\n\r\n            var paramBinder = new ParameterBinder();\r\n            object[] transformedParameters = paramBinder.BindParams(mi, parameters, wrappedArgs);\r\n\r\n\r\n            object[] resArray = soapProxy.Invoke(methodName, transformedParameters);\r\n\r\n            if (resArray[0] != null)\r\n            {\r\n                resArray[0] = ResultBinder.BindResult( \r\n                    resArray[0],\r\n                    mi.Name,\r\n                    wrappedArgs);\r\n            }\r\n\r\n            //object result = mi.Invoke(proxyInstance, (object[])methodParams.ToArray(typeof(object)));\r\n\r\n            //foreach (ParameterInfo pi in mi.GetParameters())\r\n            //{\r\n            //    if (pi.IsOut) outParams.Add(methodParams[i]);\r\n\r\n            //    i++;\r\n            //}\r\n                \r\n            return resArray[0];\r\n        }\r\n\r\n        #region Async invoke (not supported now)\r\n\r\n        ///// <summary>\r\n        ///// Begins the invoke call.\r\n        ///// </summary>\r\n        ///// <param name=\"callback\">Callback.</param>\r\n        ///// <param name=\"asyncState\">State of the async.</param>\r\n        ///// <returns></returns>\r\n        //public IAsyncResult BeginInvokeCall(AsyncCallback callback, object asyncState)\r\n        //{\r\n        //    try\r\n        //    {\r\n        //        ArrayList parameters = new ArrayList(methodParams);\r\n        //        parameters.Add(callback);\r\n        //        parameters.Add(asyncState);\r\n\r\n        //        MethodInfo mi = proxyInstance.GetType().GetMethod(CodeConstants.BEGIN + methodName);\r\n        //        IAsyncResult result = (IAsyncResult)mi.Invoke(proxyInstance, (object[])parameters.ToArray(typeof(object)));\r\n\r\n        //        return result;\r\n        //    }\r\n        //    catch (Exception ex)\r\n        //    {\r\n        //        Console.WriteLine(ex.Message);\r\n        //        throw new MessageStorageException(\"Problem asynchronously calling the Web service.\", ex);\r\n        //    }\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Ends the invoke call.\r\n        ///// </summary>\r\n        ///// <param name=\"asyncResult\">Async result.</param>\r\n        ///// <returns></returns>\r\n        //public object EndInvokeCall(IAsyncResult asyncResult)\r\n        //{\r\n        //    try\r\n        //    {\r\n        //        MethodInfo mi = proxyInstance.GetType().GetMethod(CodeConstants.END + methodName);\r\n        //        object result = mi.Invoke(proxyInstance, new object[] { asyncResult });\r\n\r\n        //        return result;\r\n        //    }\r\n        //    catch (MessageStorageException e)\r\n        //    {\r\n        //        Console.WriteLine(e.Message);\r\n        //        return null;\r\n        //    }\r\n        //}\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Gets the instance.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public object Instance\r\n        {\r\n            get\r\n            {\r\n                return proxyInstance;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Gets or sets the URL.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public Uri Url\r\n        {\r\n            get\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Url\");\r\n                object result = propInfo.GetValue(proxyInstance, null);\r\n\r\n                return new Uri((string)result);\r\n            }\r\n            set\r\n            {\r\n                string urlValue = value.AbsoluteUri;\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Url\");\r\n                propInfo.SetValue(proxyInstance, urlValue,\r\n                    BindingFlags.NonPublic | BindingFlags.Static |\r\n                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetField,\r\n                    null, null, null\r\n                    );\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the WSDL.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string Wsdl\r\n        {\r\n            // TODO: move the init process to an explicit method Init() ...\r\n            get\r\n            {\r\n                return wsdl;\r\n            }\r\n            //set\r\n            //{\r\n            //    wsdl = value;\r\n            //    ResetInternalState();\r\n            //    BuildProxy();\r\n            //}\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the name of the protocol.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public Protocol ProtocolName\r\n        {\r\n            get\r\n            {\r\n                switch (protocolName)\r\n                {\r\n                    case \"HttpGet\":\r\n                        return Protocol.HttpGet;\r\n                    case \"HttpPost\":\r\n                        return Protocol.HttpPost;\r\n                    case \"Soap\":\r\n                        return Protocol.HttpSoap;\r\n                    default:\r\n                        return Protocol.HttpSoap;\r\n                }\r\n            }\r\n            set\r\n            {\r\n                switch (value)\r\n                {\r\n                    case Protocol.HttpGet:\r\n                        protocolName = \"HttpGet\";\r\n                        break;\r\n                    case Protocol.HttpPost:\r\n                        protocolName = \"HttpPost\";\r\n                        break;\r\n                    case Protocol.HttpSoap:\r\n                        protocolName = \"Soap\";\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        ///// <summary>\r\n        ///// Clears the cache.\r\n        ///// </summary>\r\n        ///// <param name=\"wsdlLocation\">WSDL location.</param>\r\n        //public static void ClearCache(string wsdlLocation)\r\n        //{\r\n        //    CompiledAssemblyCache.ClearCache(wsdlLocation);\r\n        //}\r\n\r\n        ///// <summary>\r\n        ///// Clear all cached DLLs.\r\n        ///// </summary>\r\n        //public static void ClearAllCached()\r\n        //{\r\n        //    CompiledAssemblyCache.ClearAllCached();\r\n        //}\r\n\r\n        /// <summary>\r\n        /// Builds the assembly from WSDL.\r\n        /// </summary>\r\n        /// <param name=\"absoluteWsdlLocation\">Absolute path to wsdl file.</param>\r\n        /// /// <param name=\"wsdlContent\">Actual content of wsdl file</param>\r\n        /// <returns>Assembly containg proxy for service defined in <paramref name=\"absoluteWsdlLocation\"/></returns>\r\n        private Assembly BuildAssemblyFromWsdl(string absoluteWsdlLocation, string wsdlContent)\r\n        {\r\n            // Use an XmlTextReader to get the Web Service description\r\n            StringReader wsdlStringReader = new StringReader(wsdlContent);\r\n            XmlTextReader tr = new XmlTextReader(wsdlStringReader);\r\n            ServiceDescription.Read(tr);\r\n            tr.Close();\r\n\r\n            // WSDL service description importer \r\n            CodeNamespace cns = new CodeNamespace(CodeConstants.CODENAMESPACE);\r\n            sdi = new ServiceDescriptionImporter();\r\n            //sdi.AddServiceDescription(sd, null, null);\r\n\r\n            // check for optional imports in the root WSDL\r\n            CheckForImports(absoluteWsdlLocation);\r\n\r\n            sdi.ProtocolName = protocolName;\r\n            sdi.Import(cns, null);\r\n\r\n            // change the base class\r\n            // get all available Service classes - not only the default one\r\n            ArrayList newCtr = new ArrayList();\r\n\r\n            foreach (CodeTypeDeclaration ctDecl in cns.Types)\r\n            {\r\n                if (ctDecl.BaseTypes.Count > 0)\r\n                {\r\n                    if (ctDecl.BaseTypes[0].BaseType == CodeConstants.DEFAULTBASETYPE)\r\n                    {\r\n                        newCtr.Add(ctDecl);\r\n                    }\r\n                }\r\n            }\r\n\r\n            foreach (CodeTypeDeclaration ctDecl in newCtr)\r\n            {\r\n                cns.Types.Remove(ctDecl);\r\n                ctDecl.BaseTypes[0] = new CodeTypeReference(CodeConstants.CUSTOMBASETYPE);\r\n                cns.Types.Add(ctDecl);\r\n            }\r\n\r\n            // source code generation\r\n            CSharpCodeProvider cscp = new CSharpCodeProvider();\r\n            StringBuilder srcStringBuilder = new StringBuilder();\r\n            StringWriter sw = new StringWriter(srcStringBuilder, CultureInfo.CurrentCulture);\r\n\r\n            if (schemas != null)\r\n            {\r\n                foreach (XmlSchema xsd in schemas)\r\n                {\r\n                    if (XmlSchemas.IsDataSet(xsd))\r\n                    {\r\n                        MemoryStream mem = new MemoryStream();\r\n                        mem.Position = 0;\r\n                        xsd.Write(mem);\r\n                        mem.Position = 0;\r\n                        DataSet dataSet1 = new DataSet();\r\n                        dataSet1.Locale = CultureInfo.InvariantCulture;\r\n                        dataSet1.ReadXmlSchema(mem);\r\n                        SDD.TypedDataSetGenerator.Generate(dataSet1, cns, cscp);\r\n                    }\r\n                }\r\n            }\r\n\r\n            cscp.GenerateCodeFromNamespace(cns, sw, null);\r\n            proxySource = srcStringBuilder.ToString();\r\n            sw.Close();\r\n\r\n            // assembly compilation\r\n            string location = \"\";\r\n\r\n            if (HttpContext.Current != null)\r\n            {\r\n                location = HttpContext.Current.Server.MapPath(\".\");\r\n                location += @\"\\bin\\\";\r\n            }\r\n\r\n            CompilerParameters cp = new CompilerParameters();\r\n            cp.ReferencedAssemblies.Add(\"System.dll\");\r\n            cp.ReferencedAssemblies.Add(\"System.Xml.dll\");\r\n            cp.ReferencedAssemblies.Add(\"System.Web.Services.dll\");\r\n            cp.ReferencedAssemblies.Add(\"System.Data.dll\");\r\n            cp.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);\r\n\r\n            cp.GenerateExecutable = false;\r\n            cp.GenerateInMemory = false;\r\n            cp.IncludeDebugInformation = false;\r\n            cp.TempFiles = new TempFileCollection(CompiledAssemblyCache.GetLibTempPath());\r\n\r\n            CompilerResults cr = cscp.CompileAssemblyFromSource(cp, proxySource);\r\n\r\n            if (cr.Errors.Count > 0)\r\n                throw new DynamicCompilationException(string.Format(CultureInfo.CurrentCulture, @\"Building dynamic assembly failed: {0} errors\", cr.Errors.Count));\r\n\r\n            Assembly compiledAssembly = cr.CompiledAssembly;\r\n            \r\n            return compiledAssembly;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates the instance.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        private object CreateProxyInstance()\r\n        {\r\n            string objTypeName = null;\r\n\r\n            try\r\n            {\r\n                foreach (Type ty in ProxyAssembly.GetTypes())\r\n                {\r\n                    if (ty.BaseType == typeof(SoapHttpClientProtocolExtended))\r\n                    {\r\n                        objTypeName = ty.Name;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                Type t = ass.GetType(CodeConstants.CODENAMESPACE + \".\" + objTypeName);\r\n\r\n                return Activator.CreateInstance(t);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                throw new ProxyTypeInstantiationException(\"An error occured while instantiating the proxy type: \" + ex.Message + \", \" + ex.StackTrace, ex);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resets the state of the internal.\r\n        /// </summary>\r\n        private void ResetInternalState()\r\n        {\r\n            protocolName = \"Soap\";\r\n            sdi = null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Builds the proxy.\r\n        /// </summary>\r\n        private void BuildProxy()\r\n        {\r\n            if (enableMessageAccess)\r\n            {\r\n                PipelineConfiguration.InjectExtension(typeof(SoapMessageAccessClientExtension));\r\n                pipelineProperlyConfigured = true;\r\n            }\r\n\r\n            ass = serviceCache.GetOrAdd();\r\n            proxyInstance = CreateProxyInstance();\r\n\r\n            if (certificate != null)\r\n            {\r\n                var proxy = (SoapHttpClientProtocolExtended)proxyInstance;\r\n                proxy.ClientCertificates.Add(certificate);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks the for imports.\r\n        /// </summary>\r\n        /// <param name=\"baseWSDLUrl\">Base WSDL URL.</param>\r\n        private void CheckForImports(string baseWSDLUrl)\r\n        {\r\n            DiscoveryClientProtocol dcp = new DiscoveryClientProtocol();\r\n            //DEBUG code\r\n            try\r\n            {\r\n                dcp.DiscoverAny(baseWSDLUrl);\r\n                dcp.ResolveAll();\r\n            }\r\n            catch(UriFormatException ex)\r\n            {\r\n                throw new ApplicationException(\"Not a valid wsdl location: \" + baseWSDLUrl, ex);\r\n            }\r\n\r\n            foreach (object osd in dcp.Documents.Values)\r\n            {\r\n                if (osd is ServiceDescription) sdi.AddServiceDescription((ServiceDescription)osd, null, null);\r\n                if (osd is XmlSchema)\r\n                {\r\n                    // store in global schemas variable\r\n                    if (schemas == null) schemas = new XmlSchemas();\r\n                    schemas.Add((XmlSchema)osd);\r\n\r\n                    sdi.Schemas.Add((XmlSchema)osd);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP request.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string SoapRequest\r\n        {\r\n            get\r\n            {\r\n                if (enableMessageAccess && pipelineProperlyConfigured)\r\n                {\r\n                    PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"SoapRequestString\");\r\n                    object result = propInfo.GetValue(proxyInstance, null);\r\n\r\n                    return (string)result;\r\n                }\r\n                else\r\n                    return String.Empty;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP response.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string SoapResponse\r\n        {\r\n            get\r\n            {\r\n                if (enableMessageAccess && pipelineProperlyConfigured)\r\n                {\r\n                    PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"SoapResponseString\");\r\n                    object result = propInfo.GetValue(proxyInstance, null);\r\n\r\n                    return (string)result;\r\n                }\r\n                else\r\n                    return String.Empty;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the credentials.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public ICredentials Credentials\r\n        {\r\n            set\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Credentials\");\r\n                propInfo.SetValue(proxyInstance, value, null);\r\n            }\r\n\r\n            get\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Credentials\");\r\n                ICredentials result = (ICredentials)propInfo.GetValue(proxyInstance, null);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the timeout.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public int Timeout\r\n        {\r\n            set\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Timeout\");\r\n                propInfo.SetValue(proxyInstance, value, null);\r\n            }\r\n\r\n            get\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Timeout\");\r\n                int result = (int)propInfo.GetValue(proxyInstance, null);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the proxy.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public IWebProxy Proxy\r\n        {\r\n            set\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Proxy\");\r\n                propInfo.SetValue(proxyInstance, value, null);\r\n            }\r\n\r\n            get\r\n            {\r\n                PropertyInfo propInfo = proxyInstance.GetType().GetProperty(\"Proxy\");\r\n                IWebProxy result = (IWebProxy)propInfo.GetValue(proxyInstance, null);\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the proxy assembly.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public Assembly ProxyAssembly\r\n        {\r\n            get\r\n            {\r\n                return ass;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether [enable message access].\r\n        /// </summary>\r\n        /// <value>\r\n        /// \t<c>true</c> if [enable message access]; otherwise, <c>false</c>.\r\n        /// </value>\r\n        public bool EnableMessageAccess\r\n        {\r\n            get\r\n            {\r\n                return enableMessageAccess && pipelineProperlyConfigured;\r\n            }\r\n\r\n            //set\r\n            //{\r\n            //    PipelineConfiguration.InjectExtension(typeof(SoapMessageAccessClientExtension));\r\n            //    enableMessageAccess = value;\r\n            //}\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the dynamic and cached assembly's temporary path.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string AssemblyTemporaryPath\r\n        {\r\n            get\r\n            {\r\n                return CompiledAssemblyCache.GetLibTempPath();\r\n            }\r\n\r\n            set\r\n            {\r\n                CompiledAssemblyCache.SetLibTempPath(value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the out params.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public ArrayList OutParameters\r\n        {\r\n            get { return outParams; }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Enums.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Type of caching for wsdl files\r\n    /// </summary>\r\n    public enum WsdlCache\r\n    {\r\n        /// <summary>\r\n        /// No caching of wsdl files\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Setting this option also purges all previsouly cached wsdl files.\r\n        /// </remarks>\r\n        [ImplementsConstant(\"WSDL_CACHE_NONE\")]\n        None = 0,\n\n        /// <summary>\r\n        /// Cache wsdl files just on disk\r\n        /// </summary>\n        [ImplementsConstant(\"WSDL_CACHE_DISK\")]\n        Disk = 1,//It's not possible to cache wsdl only on disk, because we are caching it in form of assemblies, which has to be always in memory\n\n        /// <summary>\r\n        /// Cache wsdl files just in memory\r\n        /// </summary>\n        [ImplementsConstant(\"WSDL_CACHE_MEMORY\")]\n        Memory = 2,\n\n        /// <summary>\r\n        /// Cache wsdl files in both memory and disk\r\n        /// </summary>\n        [ImplementsConstant(\"WSDL_CACHE_BOTH\")]\n        Both = 3\r\n    }\r\n\r\n\r\n    internal enum Protocol\r\n    {\r\n        HttpGet,\r\n        HttpPost,\r\n        HttpSoap\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Extension.Soap.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{44AA3DCA-F38D-4E09-97AF-A0BE74820CFD}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Soap</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.Soap</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Design\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.Services\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"CodeConstants.cs\" />\r\n    <Compile Include=\"CompiledAssemblyCache.cs\" />\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"CustomExceptions.cs\" />\r\n    <Compile Include=\"DynamicWebServiceProxy.cs\" />\r\n    <Compile Include=\"Enums.cs\" />\r\n    <Compile Include=\"Strings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Strings.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"ParameterBinder.cs\" />\r\n    <Compile Include=\"PipelineConfiguration.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"ResultBinder.cs\" />\r\n    <Compile Include=\"ServiceCache.cs\" />\r\n    <Compile Include=\"SoapClient.cs\" />\r\n    <Compile Include=\"SoapClient.dynamic.cs\" />\r\n    <Compile Include=\"SoapFault.cs\" />\r\n    <Compile Include=\"SoapHttpClientProtocolExtended.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SoapMessageAccessClientExtension.cs\" />\r\n    <Compile Include=\"MessageStorageException.cs\" />\r\n    <Compile Include=\"WsdlHelper.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Strings.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Strings.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.Soap.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Extension.Soap.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension web services soap xml</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Soap/LibraryDescriptor.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 Devsense.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Xml;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Describes the class library assembly content and configuration.\r\n    /// </summary>\r\n    public sealed class SoapLibraryDescriptor : PhpLibraryDescriptor\r\n    {\r\n        /// <summary>\r\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\r\n        /// </summary>\r\n        internal static SoapLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static SoapLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //  get { return new string[] { ExtensionName }; } \r\n        //}\r\n        internal const string ExtensionName = \"soap\";\r\n\r\n        /// <summary>\r\n        /// Called by the Core after the library is loaded.\r\n        /// </summary>\r\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n        {\r\n            base.Loaded(assemblyAttribute, configStore);\r\n            singleton = this;\r\n            CurlConfiguration.RegisterLegacyOptions();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a configuration section belonging to the MySql library. \r\n        /// </summary>\r\n        /// <param name=\"result\">A configuration context.</param>\r\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n        /// <returns>Updated configuration context.</returns>\r\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n        {\r\n            // parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (SoapLocalConfig)result.Local, (SoapGlobalConfig)result.Global);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates empty library configuration context.\r\n        /// </summary>\r\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n        protected override ConfigContextBase CreateConfigContext()\r\n        {\r\n            return new ConfigContextBase(new SoapLocalConfig(), new SoapGlobalConfig());\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/MessageStorageException.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Exception that can occur when storing SOAP message\r\n    /// </summary>\r\n    [Serializable]\r\n    public class MessageStorageException : Exception\r\n    {\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n        /// </summary>\r\n        public MessageStorageException()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        public MessageStorageException(string message)\r\n            : base(message)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"message\">Message.</param>\r\n        /// <param name=\"inner\">Inner.</param>\r\n        public MessageStorageException(string message, Exception inner)\r\n            : base(message, inner)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"MessageStorageException\"/> instance.\r\n        /// </summary>\r\n        /// <param name=\"serializationInfo\">Serialization info.</param>\r\n        /// <param name=\"serializationContext\">Serialization context.</param>\r\n        protected MessageStorageException(SerializationInfo serializationInfo, StreamingContext serializationContext)\r\n            : base(serializationInfo, serializationContext)\r\n        { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/ParameterBinder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Collections;\r\nusing System.Reflection;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    class ParameterBinder\r\n    {\r\n        #region Fields and Properties\r\n\r\n        /// <summary>\r\n        /// Stack of objects being currently serialized. Used to avoid stack overflow and to properly outputs \"recursion_detected\" warning.\r\n        /// </summary>\r\n        private List<object> recursionStack = null;\r\n\r\n        private bool lastPrimitive;\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"ParameterBinder\"/>\r\n        /// </summary>\r\n        internal ParameterBinder()\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Recursion\r\n\r\n        /// <summary>\r\n        /// Push currently serialized array or object to the stack to prevent recursion.\r\n        /// </summary>\r\n        /// <param name=\"obj\"></param>\r\n        /// <returns></returns>\r\n        private bool PushObject(object/*!*/obj)\r\n        {\r\n            Debug.Assert(obj != null);\r\n\r\n            if (recursionStack == null)\r\n                recursionStack = new List<object>(8);\r\n            else\r\n            {\r\n                // check recursion\r\n                for (int i = 0; i < recursionStack.Count; i++)\r\n                    if (recursionStack[i] == obj)\r\n                        return false;\r\n            }\r\n\r\n            recursionStack.Add(obj);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pop the serialized object from the stack.\r\n        /// </summary>\r\n        private void PopObject()\r\n        {\r\n            Debug.Assert(recursionStack != null);\r\n            recursionStack.RemoveAt(recursionStack.Count - 1);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Bind* methods\r\n\r\n        public object[] BindParams(MethodInfo mi, PhpArray parameters, bool wrappedArgs)\r\n        {\r\n            var resultParams = new List<object>();\r\n            var parameterInfos = mi.GetParameters();\r\n            object value;\r\n\r\n\r\n            if (!wrappedArgs)\r\n            {\r\n                //TODO: make sure: When arguments are not wrapped soap method parameter is only one\r\n                Debug.Assert(parameterInfos.Length == 1);\r\n\r\n                resultParams.Add(Bind(parameters, parameterInfos[0].ParameterType));\r\n\r\n            }\r\n            else\r\n            {\r\n                foreach (var pi in parameterInfos)\r\n                {\r\n                    if (SetSpecifiedParameter(resultParams, pi))\r\n                        continue;\r\n\r\n                    if (parameters.TryGetValue(pi.Name, out value))\r\n                    {\r\n                        resultParams.Add(Bind(value, pi.ParameterType));\r\n                    }\r\n                }\r\n            }\r\n\r\n            lastPrimitive = false;\r\n\r\n            return resultParams.ToArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes an PHP object or graph of objects to CLR object.\r\n        /// </summary>\r\n        /// <param name=\"graph\">The PHP object (graph) to serialize.</param>\r\n        /// <param name=\"targetType\">Expected type of the return argument</param>\r\n        private object Bind(object graph, Type targetType)\r\n        {\r\n            if (graph == null)\r\n                return null;\r\n\r\n            // unwrap Nullable<>\r\n            if (targetType.IsGenericType && targetType.GetGenericTypeDefinition() == typeof(Nullable<>))\r\n                targetType = targetType.GetGenericArguments()[0];\r\n\r\n            switch (Type.GetTypeCode(graph.GetType()))\r\n            {\r\n                case TypeCode.Boolean:\r\n                case TypeCode.Byte:\r\n                case TypeCode.SByte:\r\n                case TypeCode.Int16:\r\n                case TypeCode.Int32:\r\n                case TypeCode.Int64:\r\n                case TypeCode.UInt16:\r\n                case TypeCode.UInt32:\r\n                case TypeCode.UInt64:\r\n                case TypeCode.Decimal:\r\n                case TypeCode.Single:\r\n                case TypeCode.Double:\r\n                case TypeCode.Char:\r\n                case TypeCode.String:\r\n                    return BindPrimitiveType(graph, targetType);\r\n\r\n                case TypeCode.Object:\r\n                    {\r\n                        PhpArray array;\r\n                        if ((array = graph as PhpArray) != null)\r\n                        {\r\n                            if (PushObject(graph))\r\n                            {\r\n                                object res = BindArray(array, targetType);\r\n                                PopObject();\r\n                                return res;\r\n                            }\r\n                            else\r\n                                return BindEmptyInstance(targetType);// Could this happen?\r\n                        }\r\n\r\n                        DObject obj;\r\n                        if ((obj = graph as DObject) != null)\r\n                        {\r\n                            if (PushObject(graph))\r\n                            {\r\n                                object res = BindObject(obj, targetType);\r\n                                PopObject();\r\n                                return res;\r\n                            }\r\n                            else\r\n                                return BindEmptyInstance(targetType);\r\n                        }\r\n\r\n                        PhpReference reference;\r\n                        if ((reference = graph as PhpReference) != null)\r\n                        {\r\n                            return Bind(reference.Value, targetType);\r\n                        }\r\n\r\n                        PhpBytes bytes;\r\n                        if ((bytes = graph as PhpBytes) != null)\r\n                        {\r\n                            return BindPrimitiveType(bytes.ToString(), targetType);\r\n                        }\r\n\r\n                        PhpString str;\r\n                        if ((str = graph as PhpString) != null)\r\n                        {\r\n                            return BindPrimitiveType(str.ToString(), targetType);\r\n                        }\r\n\r\n                        if (graph is PhpResource)\r\n                        {\r\n                            return BindUnsupported(PhpResource.PhpTypeName);\r\n                        }\r\n\r\n                        goto default;\r\n                    }\r\n\r\n                default:\r\n                    return BindUnsupported(graph.GetType().FullName);\r\n            }\r\n        }\r\n\r\n        private object BindPrimitiveType(object obj, Type targetType)\r\n        {\r\n            if (targetType.IsEnum)\r\n            {\r\n                if (obj.GetType() == typeof(String))\r\n                {\r\n                    lastPrimitive = true;\r\n                    string str = (string)obj;\r\n                    return Enum.Parse(targetType, str);\r\n                }\r\n            }\r\n\r\n            if (targetType.IsArray)//We are assign one element to array\r\n            {\r\n                var arr = new object[]{obj};\r\n                return BindArrayToArray(new PhpArray(arr), targetType);\r\n            }\r\n\r\n\r\n            if (targetType.IsValueType)\r\n                lastPrimitive = true;\r\n\r\n            return PHP.Core.ConvertToClr.ObjectToType(obj, targetType);\r\n        }\r\n\r\n        private object BindEmptyInstance(Type targetType)\r\n        {\r\n            if (targetType.IsArray)\r\n            {\r\n                Type elementType = targetType.GetElementType();\r\n                return Array.CreateInstance(elementType, 0);\r\n            }\r\n            else\r\n            {\r\n                return Activator.CreateInstance(targetType);\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Serializes null and throws an exception.\r\n        /// </summary>\r\n        /// <param name=\"TypeName\"></param>\r\n        private object BindUnsupported(string TypeName)\r\n        {\r\n            PhpException.Throw(PhpError.Warning, LibResources.GetString(\"serialization_unsupported_type\", TypeName));\r\n            return null;\r\n        }\r\n\r\n        private object BindObject(DObject obj, Type targetType)\r\n        {\r\n            object instance = Activator.CreateInstance(targetType);// no ctor parameters\r\n\r\n            FieldInfo[] fi = targetType.GetFields(BindingFlags.Public | BindingFlags.Instance);\r\n            object value;\r\n\r\n            foreach (var field in fi)\r\n            {\r\n                if (SetSpecifiedField(instance, field))\r\n                    continue;\r\n\r\n                value = obj.GetProperty(field.Name, null, true);\r\n\r\n                if (value != null)\r\n                {\r\n                    field.SetValue(instance, Bind(value, field.FieldType));\r\n                }\r\n            }\r\n\r\n            lastPrimitive = false;\r\n\r\n            return instance;\r\n        }\r\n\r\n        private object BindArray(PhpArray array, Type targetType)\r\n        {\r\n            if (targetType.IsArray)\r\n                return BindArrayToArray(array, targetType);\r\n            else\r\n                return BindArrayToObject(array, targetType);\r\n        }\r\n\r\n        private object BindArrayToObject(PhpArray array, Type targetType)\r\n        {\r\n            object instance = Activator.CreateInstance(targetType);// no ctor parameters\r\n\r\n            FieldInfo[] fi = targetType.GetFields(BindingFlags.Public | BindingFlags.Instance);\r\n            object value;\r\n\r\n            foreach (var field in fi)\r\n            {\r\n                if (SetSpecifiedField(instance, field))\r\n                    continue;\r\n\r\n                if (array.TryGetValue(field.Name, out value))\r\n                {\r\n                    field.SetValue(instance, Bind(value, field.FieldType));\r\n                }\r\n            }\r\n\r\n            lastPrimitive = false;\r\n\r\n            return instance;\r\n        }\r\n\r\n\r\n        //SetSpecified(Parameter|Field) has to be here, because .NET generates proxy objects with special parameters when value type is present.\r\n        //The reason is value types are not Nullable so this special parameter indicates if value is present or not\r\n        //http://stackoverflow.com/questions/3362574/how-to-get-rid-of-xmlignoreattribute-when-creating-proxy-dynamically-from-wsdl\r\n                \r\n        private bool SetSpecifiedParameter(List<object> resultParams, ParameterInfo pi)\r\n        {\r\n            //check XmlIgnoreAttribute\r\n            //There is case when field always has to be specified so *Specified field isn't present\r\n            if (lastPrimitive && pi.IsDefined(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false))\r\n            {\r\n                resultParams.Add(true);\r\n                lastPrimitive = false;\r\n                return true;\r\n            }\r\n\r\n            lastPrimitive = false;\r\n            return false;\r\n        }\r\n\r\n        private bool SetSpecifiedField(object instance, FieldInfo field)\r\n        {\r\n            //check XmlIgnoreAttribute\r\n            //There is case when field always has to be specified so *Specified field isn't present\r\n            if (lastPrimitive && field.IsDefined(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false))\r\n            {\r\n                field.SetValue(instance, true);\r\n                lastPrimitive = false;\r\n                return true;\r\n            }\r\n\r\n            lastPrimitive = false;\r\n            return false;\r\n        }\r\n\r\n        private object BindArrayToArray(PhpArray array, Type targetType)\r\n        {\r\n            Debug.Assert(targetType.IsArray);\r\n\r\n            Type elementType = targetType.GetElementType();\r\n            Array vals = Array.CreateInstance(elementType, array.Count);\r\n\r\n            for (int i = 0; i < array.Count; ++i)\r\n            {\r\n                vals.SetValue(Bind(array[i], elementType), i);\r\n            }\r\n\r\n            lastPrimitive = false;\r\n\r\n            return vals;\r\n        }\r\n\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/PipelineConfiguration.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Web.Services.Configuration;\r\nusing System.Web.Services.Protocols;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Summary description for PipelineConfiguration.\r\n    /// </summary>\r\n    internal class PipelineConfiguration\r\n    {\r\n        /// <summary>\r\n        /// Injects the extension.\r\n        /// </summary>\r\n        /// <param name=\"extension\">Extension.</param>\r\n        internal static void InjectExtension(Type extension)\r\n        {\r\n            try\r\n            {\r\n                RegisterSoapExtension(extension, 1, PriorityGroup.High);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                throw new PipelineConfigurationException(\"Problem occured when trying to inject SoapExtension into pipeline\", ex);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// This code was taken from Mike Bouck's July 31st, 2005 blog post located here: http://blog.gatosoft.com/\r\n        /// Many thanks to Mike for this updated .NET 2.0-compatible code.\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        /// <param name=\"priority\"></param>\r\n        /// <param name=\"group\"></param>\r\n        private static void RegisterSoapExtension(Type type, int priority, PriorityGroup group)\r\n        {\r\n            if (!type.IsSubclassOf(typeof(SoapExtension)))\r\n            {\r\n                throw new ArgumentException(\"Type must be derived from SoapException.\", \"type\");\r\n            }\r\n\r\n            if (priority < 1)\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"priority\", priority, \"Priority must be greater or equal to 1.\");\r\n            }\r\n\r\n            // get the current web services settings...\r\n            WebServicesSection wss = WebServicesSection.Current;\r\n\r\n            // set SoapExtensionTypes collection to read/write...\r\n            FieldInfo readOnlyField = typeof(System.Configuration.ConfigurationElementCollection).GetField(\"bReadOnly\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n            readOnlyField.SetValue(wss.SoapExtensionTypes, false);\r\n\r\n            // inject SoapExtension...\r\n            wss.SoapExtensionTypes.Add(new SoapExtensionTypeElement(type, priority, group));\r\n\r\n            // set SoapExtensionTypes collection back to readonly and clear modified flags...\r\n            MethodInfo resetModifiedMethod = typeof(System.Configuration.ConfigurationElement).GetMethod(\"ResetModified\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n            resetModifiedMethod.Invoke(wss.SoapExtensionTypes, null);\r\n            MethodInfo setReadOnlyMethod = typeof(System.Configuration.ConfigurationElement).GetMethod(\"SetReadOnly\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n            setReadOnlyMethod.Invoke(wss.SoapExtensionTypes, null);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger Soap\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - Soap\")]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"0f54482b-2272-49df-a07f-c29f60c26389\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Soap.SoapLibraryDescriptor), \"soap\", new string[] { \"soap\" })]\r\n"
  },
  {
    "path": "Source/Extensions/Soap/ResultBinder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Reflection;\r\nusing System.Xml.Serialization;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Transforms objects returned by SOAP service into PHP-like return argument format\r\n    /// </summary>\r\n    internal class ResultBinder\r\n    {\r\n\r\n        private static stdClass WrapToStdClass(object obj, string name)\r\n        {\r\n            var runtimeFields = new PhpArray(1);\r\n            runtimeFields[name] = obj;\r\n\r\n            return new stdClass()\r\n            {\r\n                RuntimeFields = runtimeFields\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Binds the result object to PHP-like SOAP return argument format\r\n        /// </summary>\r\n        /// <param name=\"graph\">The object (graph) to bind.</param>\r\n        /// <param name=\"functionName\">Name of the SOAP method</param>\r\n        /// <param name=\"wrapResult\">Wrap result to stdClass</param>\r\n        internal static object BindResult(object graph, string functionName, bool wrapResult)\r\n        {\r\n            //I can also just return CLR type and wrap it with PHP.Core.Reflection.ClrObject.WrapDynamic\r\n            object res = Bind(graph);\r\n\r\n            if (wrapResult)\r\n                return WrapToStdClass(res, functionName + \"Result\");\r\n            else\r\n                return res;\r\n        }\r\n\r\n        private static object BindEnum(object obj, Type type)\r\n        {\r\n            return Enum.GetName(type, obj);\r\n        }\r\n\r\n\r\n        private static object BindObject(object obj, Type type)\r\n        {\r\n            FieldInfo[] fi = type.GetFields(BindingFlags.Public | BindingFlags.Instance);\r\n            var runtimeFields = new PhpArray(fi.Length);\r\n            object value;\r\n            bool specified = true;\r\n            FieldInfo field;\r\n\r\n            for (int i = 0; i < fi.Length; ++i)\r\n            {\r\n                field = fi[i];\r\n\r\n                specified = true;\r\n\r\n                if (i + 1 < fi.Length && Attribute.IsDefined(fi[i + 1], typeof(XmlIgnoreAttribute)))\r\n                {\r\n                    value = fi[i + 1].GetValue(obj);\r\n                    if (value == null)\r\n                        specified = false;\r\n                    else\r\n                        specified = (bool)value;\r\n\r\n                    i++;\r\n                }\r\n\r\n                if (specified)\r\n                {\r\n                    value = Bind(field.GetValue(obj), field);\r\n                    if (value != null)\r\n                        runtimeFields.Add(field.Name, value);\r\n                }\r\n            }\r\n\r\n            return new stdClass()\r\n            {\r\n                RuntimeFields = runtimeFields\r\n            };\r\n        }\r\n\r\n        private static string GetArrayItemTypeName(Type type, FieldInfo fi)\r\n        {\r\n            if (fi == null)\r\n                return \"item\";\r\n\r\n            object[] attr = fi.GetCustomAttributes(false);\r\n\r\n            for (int i = 0; i < attr.Length; ++i)\r\n            {\r\n                if (attr[i].GetType() == typeof(XmlArrayItemAttribute))\r\n                {\r\n                    XmlArrayItemAttribute arrayItemAttr = (XmlArrayItemAttribute)attr[i];\r\n                    if (!String.IsNullOrEmpty(arrayItemAttr.ElementName))\r\n                        return arrayItemAttr.ElementName;\r\n                    else\r\n                        return type.GetElementType().Name;\r\n                }\r\n                else if (attr[i].GetType() == typeof(XmlArrayAttribute))\r\n                {\r\n                    return type.GetElementType().Name;\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private static object BindArray(object obj, Type type, FieldInfo targetFieldInfo)\r\n        {\r\n            Array array = (Array)obj;\r\n            object res;\r\n            string elementName;\r\n\r\n            elementName = GetArrayItemTypeName(type, targetFieldInfo);\r\n\r\n            switch (array.Length)\r\n            {\r\n                case 0:\r\n                    return new stdClass();\r\n\r\n                case 1:\r\n                    res = Bind(array.GetValue(0));\r\n                    break;\r\n\r\n                default:\r\n\r\n                    //array.Length > 1\r\n                    PhpArray result = new PhpArray(array.Length);\r\n\r\n                    for (int i = 0; i < array.Length; ++i)\r\n                    {\r\n                        result[i] = Bind(array.GetValue(i));\r\n                    }\r\n\r\n                    res = result;\r\n                    break;\r\n            }\r\n\r\n            if (elementName != null)\r\n                return WrapToStdClass(res, elementName);\r\n            else\r\n                return res;\r\n        }\r\n\r\n        private static object Bind(object graph, FieldInfo targetFieldInfo = null)\r\n        {\r\n            if (graph == null)\r\n                return null;\r\n\r\n            Type type = graph.GetType();\r\n\r\n            switch (Type.GetTypeCode(type))\r\n            {\r\n                case TypeCode.Boolean:\r\n                case TypeCode.Byte:\r\n                case TypeCode.SByte:\r\n                case TypeCode.Int16:\r\n                case TypeCode.Int32:\r\n                case TypeCode.Int64:\r\n                case TypeCode.UInt16:\r\n                case TypeCode.UInt32:\r\n                case TypeCode.UInt64:\r\n                case TypeCode.Decimal:\r\n                case TypeCode.Single:\r\n                case TypeCode.Double:\r\n                case TypeCode.Char:\r\n                case TypeCode.String:\r\n\r\n                    if (type.IsEnum)\r\n                        return BindEnum(graph, type);\r\n\r\n\r\n                    return PHP.Core.Convert.ClrLiteralToPhpLiteral(graph);\r\n\r\n                case TypeCode.DateTime:\r\n\r\n                    DateTime dt = (DateTime)graph;\r\n\r\n                    if (dt.TimeOfDay == TimeSpan.Zero)\r\n                         return dt.ToString(\"yyyy-MM-dd\");\r\n\r\n                    return dt.ToString(\"yyyy-MM-ddTHH:mm:ss.fffffffzzz\");\r\n\r\n                case TypeCode.Object:\r\n                    {\r\n                        if (type.IsArray)\r\n                            return BindArray(graph, type, targetFieldInfo);\r\n\r\n                        return BindObject(graph, type);\r\n\r\n                    }\r\n\r\n                default:\r\n                    Debug.Fail(\"Unknown type\");\r\n                    return null;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/ServiceCache.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.Threading;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n\r\n    internal sealed class ServiceCache\r\n    {\r\n        internal struct MemoryCacheKey\r\n        {\r\n            string wsdlLocation;\r\n            WsdlCache type;\r\n            int contentHash;\r\n\r\n\r\n            internal WsdlCache Type\r\n            {\r\n                get { return type; }\r\n              }\r\n\r\n\r\n            internal string WsdlLocation\r\n            {\r\n                get\r\n                {\r\n                    return wsdlLocation;\r\n                }\r\n            }\r\n\r\n            internal string Key\r\n            {\r\n                get\r\n                {\r\n                    if (type == WsdlCache.None)\r\n                        return wsdlLocation + \"#\" + contentHash;\r\n                    else\r\n                        return wsdlLocation;\r\n                }\r\n            }\r\n\r\n            internal MemoryCacheKey(string wsdlLocation, WsdlCache type):\r\n                this(wsdlLocation, 0, type)\r\n            {\r\n            }\r\n\r\n            internal MemoryCacheKey(string wsdlLocation, int contentHash, WsdlCache type)\r\n            {\r\n                Debug.Assert((type == WsdlCache.None && contentHash != 0) ||\r\n                             (type != WsdlCache.None && contentHash == 0));\r\n\r\n                this.wsdlLocation = wsdlLocation;\r\n                this.contentHash = contentHash;\r\n                this.type = type;\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return Key.GetHashCode();\r\n            }\r\n        }\r\n\r\n\r\n        internal static class MemoryCache\r\n        {\r\n\r\n       \r\n\r\n            private static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();\r\n            private static Dictionary<string, Assembly> innerCache = new Dictionary<string, Assembly>();\r\n\r\n            public static Assembly Get(MemoryCacheKey key)\r\n            {\r\n                Assembly ass;\r\n                cacheLock.EnterReadLock();\r\n                try\r\n                {\r\n                    innerCache.TryGetValue(key.Key, out ass);\r\n                    return ass;\r\n                }\r\n                finally\r\n                {\r\n                    cacheLock.ExitReadLock();\r\n                }\r\n            }\r\n\r\n            public static void Add(MemoryCacheKey key, Assembly serviceAssembly)\r\n            {\r\n                Assembly ass;\r\n\r\n                cacheLock.EnterWriteLock();\r\n                try\r\n                {\r\n\r\n                    if (key.Type == WsdlCache.None)\r\n                    {\r\n                        if (innerCache.TryGetValue(key.WsdlLocation, out ass))\r\n                        {\r\n                            // key which has also content hash is present without contentHash\r\n                            // that means different type of caching was used for this wsdl\r\n                            // => delete this key\r\n                            innerCache.Remove(key.WsdlLocation);\r\n                        }\r\n                    }\r\n\r\n                    innerCache.Add(key.Key, serviceAssembly);\r\n                }\r\n                finally\r\n                {\r\n                    cacheLock.ExitWriteLock();\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n\r\n        private WsdlCache type;\r\n\r\n        private string wsdlLocation;\r\n        private string wsdlContent;\r\n        private string absoluteWsdlLocation;\r\n        private int contentHash;\r\n        private event CacheMissEvent cacheMiss;\r\n\r\n\r\n        public delegate Assembly CacheMissEvent(string wsdlPath, string wsdlContent);\r\n\r\n\r\n        public WsdlCache Type\r\n        {\r\n            get { return type; }\r\n        }\r\n\r\n        public string WsdlContent\r\n        {\r\n            get\r\n            {\r\n                init();\r\n                return wsdlContent;\r\n            }\r\n        }\r\n\r\n        public int ContentHash\r\n        {\r\n            get\r\n            {\r\n                init();\r\n                return contentHash;\r\n            }\r\n        }\r\n\r\n        public string AbsoluteWsdlLocation\r\n        {\r\n            get\r\n            {\r\n                init();\r\n                return absoluteWsdlLocation;\r\n            }\r\n        }\r\n\r\n\r\n        public ServiceCache(string wsdlLocation, WsdlCache type, CacheMissEvent cacheMiss)\r\n        {\r\n            this.type = type;\r\n            this.wsdlLocation = wsdlLocation;\r\n            this.cacheMiss = cacheMiss;\r\n        }\r\n\r\n        private void init()\r\n        {\r\n            if (wsdlContent == null)\r\n            {\r\n                wsdlContent = WsdlHelper.GetWsdlContent(wsdlLocation, out absoluteWsdlLocation);\r\n                contentHash = wsdlContent.GetHashCode();\r\n            }\r\n        }\r\n\r\n        private MemoryCacheKey Key\r\n        {\r\n            get\r\n            {\r\n                if (type == WsdlCache.None)\r\n                {\r\n                    return new MemoryCacheKey(wsdlLocation,ContentHash,type);\r\n                }\r\n                else\r\n                    return new MemoryCacheKey(wsdlLocation,type);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns assembly from cache if it's present. If not CacheMiss event is invoked and return argument\r\n        /// is pushed to the cache\r\n        /// </summary>\r\n        public Assembly GetOrAdd()\r\n        {\r\n            //First try memory cache layer\r\n            Assembly ass = MemoryCache.Get(Key);\r\n\r\n            if (ass != null)\r\n                return ass;\r\n\r\n            //It wasn't found in memory cache, check the file\r\n            ass = CompiledAssemblyCache.CheckCacheForAssembly(wsdlLocation, ContentHash);\r\n\r\n            if (ass != null)// there was hit, save it to memory cache\r\n                MemoryCache.Add(Key, ass);\r\n            else\r\n            {\r\n                //Nothing in file cache, call cache miss event\r\n                if (cacheMiss != null)\r\n                {\r\n                    ass = cacheMiss(AbsoluteWsdlLocation, WsdlContent);\r\n                    if (ass != null)\r\n                    {\r\n                        MemoryCache.Add(Key, ass);\r\n\r\n                        //rename temporary assembly in order to cache it for later use\r\n                        CompiledAssemblyCache.RenameTempAssembly(ass.Location, wsdlLocation, ContentHash);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return ass;\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n\r\n}"
  },
  {
    "path": "Source/Extensions/Soap/SoapClient.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Runtime.InteropServices;\r\n﻿using System.Security.Cryptography.X509Certificates;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// The SoapClient class provides a client for » SOAP 1.1, » SOAP 1.2 servers. It can be used in WSDL or non-WSDL mode.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Phalanger supports only WSDL mode and there isn't plan for supporting non-WSDL mode.\r\n    /// </remarks>\r\n    [ImplementsType()]\r\n    public partial class SoapClient : PhpObject\r\n    {\r\n        private DynamicWebServiceProxy wsp = null;\r\n        private bool exceptions = true;\r\n\r\n        /// <summary>\r\n        /// Calls a SOAP function\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public object __call(string function_name, PhpArray arguments/*, PhpArray options, PhpArray input_headers, PhpArray output_headers*/)\r\n        {\r\n            try\r\n            {\r\n                if (arguments.Count > 0)\r\n                {\r\n                    var item = arguments.GetArrayItem(0, true);\r\n\r\n                    if (item != null && item.GetType() == typeof(PhpArray))\r\n                    {\r\n                        PhpArray arr = (PhpArray)item;\r\n                        return wsp.InvokeCall(function_name, arr);\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                SoapFault.Throw(ScriptContext.CurrentContext, \"SOAP-ERROR\", exception.Message, exceptions);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// SoapClient::__doRequest()\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public string __doRequest()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns list of SOAP functions\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public PhpArray __getFunctions()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns last SOAP request\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public string __getLastRequest()\r\n        {\r\n            try\r\n            {\r\n                return wsp.SoapRequest;\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                SoapFault.Throw(ScriptContext.CurrentContext, \"SOAP-ERROR\", exception.Message, exceptions);\r\n                return null;\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns last SOAP request headers\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public string __getLastRequestHeaders()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns last SOAP response\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public object __getLastResponse()\r\n        {\r\n            try\r\n            {\r\n                return wsp.SoapResponse;\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                SoapFault.Throw(ScriptContext.CurrentContext, \"SOAP-ERROR\", exception.Message, exceptions);\r\n                return null;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns last SOAP response headers\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public string __getLastResponseHeaders()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Returns list of SOAP types\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public PhpArray __getTypes()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Sets cookie thet will sent with SOAP request.\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public void __setCookie(string name, string value)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Sets the location option (the endpoint URL that will be touched by the\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public string __setLocation(string new_location)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// Sets SOAP headers for subsequent calls (replaces any previous\r\n        /// </summary> \r\n        [PhpVisible, ImplementsMethod]\r\n        public void __setSoapHeaders(PhpArray SoapHeaders)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n\r\n        }\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// SoapClient constructor\r\n        /// </summary> \r\n        public SoapClient(string wsdl, PhpArray options = null)\r\n            : base(ScriptContext.CurrentContext, true)\r\n        {\r\n            __construct(wsdl, options);\r\n        }\r\n\r\n        /// <summary>\r\n        /// SoapClient constructor\r\n        /// </summary>\r\n        /// <param name=\"wsdl\">URI of the WSDL file or NULL if working in non-WSDL mode.</param>\r\n        /// <param name=\"options\">An array of options. If working in WSDL mode, this parameter is optional.\r\n        /// If working in non-WSDL mode, the location and uri options must be set, where location is the URL\r\n        /// of the SOAP server to send the request to, and uri is the target namespace of the SOAP service. </param>\r\n        [PhpVisible, ImplementsMethod]\r\n        public void __construct(string wsdl, [Optional] PhpArray options)\r\n        {\r\n            bool enableMessageAccess = false;\r\n            WsdlCache wsdlCache = WsdlCache.Both;\r\n            X509Certificate2 certificate = null;\r\n\r\n            if (options != null)\r\n            {\r\n                object value;\r\n                \r\n                if (options.TryGetValue(\"trace\", out value))\r\n                {\r\n                    enableMessageAccess = PHP.Core.Convert.ObjectToBoolean(value);\r\n                }\r\n\r\n                if (options.TryGetValue(\"cache_wsdl\", out value))\r\n                {\r\n                    wsdlCache = (WsdlCache)value;//PHP.Core.Convert.ObjectToBoolean(value);//WsdlCache.None == 0, anything else is true\r\n                }\r\n\r\n                if (options.TryGetValue(\"exceptions\", out value))\r\n                {\r\n                    exceptions = PHP.Core.Convert.ObjectToBoolean(value);\r\n                }\r\n\r\n                // certificate:\r\n                string pass = null;\r\n\r\n                if (options.TryGetValue(\"passphrase\", out value))\r\n                {\r\n                    pass = Core.Convert.ObjectToString(value);\r\n                }\r\n\r\n                if (options.TryGetValue(\"local_cert\", out value))\r\n                {\r\n                    var cert = Core.Convert.ObjectToString(value);\r\n                    if (cert != null)\r\n                        certificate = new X509Certificate2(cert, pass);\r\n                }\r\n            }\r\n\r\n            try\r\n            {\r\n                wsp = new DynamicWebServiceProxy(wsdl, enableMessageAccess, wsdlCache, certificate);\r\n            }\r\n            catch (Exception exception)\r\n            {\r\n                SoapFault.Throw(ScriptContext.CurrentContext, \"SOAP-ERROR\", exception.Message, exceptions);\r\n            }\r\n\r\n        }\r\n\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/SoapFault.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Runtime.InteropServices;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Reflection;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// This class is used to send SOAP fault responses from the PHP handler. faultcode, faultstring, faultactor and detail are standard elements of a SOAP Fault. \r\n    /// </summary>\r\n    [ImplementsType]\r\n#if !SILVERLIGHT\r\n    [Serializable]\r\n#endif\r\n    public class SoapFault : PHP.Library.SPL.Exception\r\n    {\r\n        internal static void Throw(ScriptContext/*!*/context,\r\n            string faultcode, string faultstring, bool throwSoapFault=true)\r\n        {\r\n            if (throwSoapFault)\r\n            {\r\n                var e = new SoapFault(context, true);\r\n                e.__construct(context, faultcode, faultstring);\r\n\r\n                throw new PhpUserException(e);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Error, faultstring);\r\n            }\r\n        }\r\n\r\n        #region __construct\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of SoapFault\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <param name=\"faultcode\">The error code of the SoapFault.</param>\r\n        /// <param name=\"faultstring\">The error message of the SoapFault.</param>\r\n        /// <param name=\"faultactor\">A string identifying the actor that caused the error. </param>\r\n        /// <param name=\"detail\">More details about the cause of the error. </param>\r\n        /// <param name=\"faultname\">Can be used to select the proper fault encoding from WSDL. </param>\r\n        /// <param name=\"headerfault\">Can be used during SOAP header handling to report an error in the response header.</param>\r\n        /// <returns>A New instance of SoapFault.</returns>\r\n        [ImplementsMethod]\r\n        public object __construct(ScriptContext/*!*/context,\r\n            object faultcode, object faultstring, [Optional]object faultactor,\r\n            [Optional]object detail, [Optional]object faultname,\r\n            [Optional]object headerfault)\r\n        {\r\n            base.__construct(context, faultstring, faultcode);\r\n\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Implementation Details\r\n\r\n        /// <summary>\r\n        /// Populates the provided <see cref=\"DTypeDesc\"/> with this class's methods and properties.\r\n        /// </summary>\r\n        /// <param name=\"typeDesc\">The type desc to populate.</param>\r\n        internal static void __PopulateTypeDesc(PhpTypeDesc typeDesc)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SoapFault(ScriptContext context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public SoapFault(ScriptContext context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        /// <summary></summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public static new object __construct(object instance, PhpStack stack)\r\n        {\r\n            object faultcode = stack.PeekValue(1);\r\n            object faultstring = stack.PeekValue(2);\r\n            object faultactor = stack.PeekValueOptional(3);\r\n            object detail = stack.PeekValueOptional(4);\r\n            object faultname = stack.PeekValueOptional(5);\r\n            object headerfault = stack.PeekValueOptional(6);\r\n            stack.RemoveFrame();\r\n            return ((SoapFault)instance).__construct(stack.Context, faultcode, faultstring, faultactor, detail, faultname, headerfault);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Serialization (CLR only)\r\n#if !SILVERLIGHT\r\n\r\n        /// <summary>\r\n        /// Deserializing constructor.\r\n        /// </summary>\r\n        protected SoapFault(SerializationInfo info, StreamingContext context)\r\n            : base(info, context)\r\n        {\r\n        }\r\n\r\n#endif\r\n        #endregion\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/SoapHttpClientProtocolExtended.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Web.Services.Protocols;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// Extended SoapHttpClientProtocol implementing a custom behaviour as place for\r\n    /// SOAP messages by <see cref=\"SoapMessageAccessClientExtension\"/>\r\n    /// </summary>\r\n    public class SoapHttpClientProtocolExtended : SoapHttpClientProtocol\r\n    {\r\n        private byte[] m_SoapRequestMsg;\r\n        private byte[] m_SoapResponseMsg;\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SoapHttpClientProtocolExtended\"/> instance.\r\n        /// </summary>\r\n        public SoapHttpClientProtocolExtended()\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the SOAP request internal.\r\n        /// </summary>\r\n        /// <value></value>\r\n        internal byte[] SoapRequestInternal\r\n        {\r\n            set\r\n            {\r\n                m_SoapRequestMsg = value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the SOAP response internal.\r\n        /// </summary>\r\n        /// <value></value>\r\n        internal byte[] SoapResponseInternal\r\n        {\r\n            set\r\n            {\r\n                m_SoapResponseMsg = value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP request.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public byte[] SoapRequest\r\n        {\r\n            get\r\n            {\r\n                return m_SoapRequestMsg;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP response.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public byte[] SoapResponse\r\n        {\r\n            get\r\n            {\r\n                return m_SoapResponseMsg;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP request string.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string SoapRequestString\r\n        {\r\n            get\r\n            {\r\n                byte[] result = m_SoapRequestMsg;\r\n                UTF8Encoding enc = new UTF8Encoding();\r\n\r\n                return enc.GetString(result);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the SOAP response string.\r\n        /// </summary>\r\n        /// <value></value>\r\n        public string SoapResponseString\r\n        {\r\n            get\r\n            {\r\n                byte[] result = m_SoapResponseMsg;\r\n                UTF8Encoding enc = new UTF8Encoding();\r\n\r\n                return enc.GetString(result);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invokes an XML Web service method synchronously using SOAP.\r\n        /// </summary>\r\n        /// <param name=\"methodName\">The name of the XML Web service method.</param>\r\n        /// <param name=\"parameters\">An array of objects that contains the parameters to pass to the XML Web service. The order of the values in the array corresponds to the order of the parameters in the calling method of the derived class.</param>\r\n        /// <returns>An array of objects that contains the return value and any reference or out parameters of the derived class method.</returns>\r\n        public new object[] Invoke(string methodName, object[] parameters)\r\n        {\r\n            return base.Invoke(methodName, parameters);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/SoapMessageAccessClientExtension.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Web.Services.Protocols;\r\nusing System.IO;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n\r\n        /// <summary>\r\n        /// SOAP extensions that enables to read request and response SOAP messages\r\n        /// </summary>\r\n        public class SoapMessageAccessClientExtension : SoapExtension, IDisposable\r\n        {\r\n            private Stream oldStream;\r\n            private Stream newStream;\r\n            private bool mustStoreSoapMessage;\r\n\r\n            /// <summary>\r\n            /// Gets the initializer.\r\n            /// </summary>\r\n            /// <param name=\"methodInfo\">Method info.</param>\r\n            /// <param name=\"attribute\">Attribute.</param>\r\n            /// <returns></returns>\r\n            public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Gets the initializer.\r\n            /// </summary>\r\n            /// <param name=\"t\">T.</param>\r\n            /// <returns></returns>\r\n            public override object GetInitializer(Type t)\r\n            {\r\n                //return typeof(SoapMessageAccessClientExtension);\r\n                if (t.BaseType == typeof(SoapHttpClientProtocolExtended))\r\n                {\r\n                    return true;\r\n                }\r\n                else\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Initializes the specified initializer.\r\n            /// </summary>\r\n            /// <param name=\"initializer\">Initializer.</param>\r\n            public override void Initialize(object initializer)\r\n            {\r\n                mustStoreSoapMessage = (bool)initializer;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Processs the message.\r\n            /// </summary>\r\n            /// <param name=\"message\">Message.</param>\r\n            public override void ProcessMessage(SoapMessage message)\r\n            {\r\n                switch (message.Stage)\r\n                {\r\n                    case SoapMessageStage.BeforeSerialize:\r\n                        break;\r\n\r\n                    case SoapMessageStage.AfterSerialize:\r\n                        StoreRequestMessage(message);\r\n                        // Pass it off as the actual stream\r\n                        //Copy(newStream, oldStream);\r\n                        // Indicate for the return that we don't wish to chain anything in\r\n                        break;\r\n\r\n                    case SoapMessageStage.BeforeDeserialize:\r\n                        StoreResponseMessage(message);\r\n                        // Pass it off as the actual stream\r\n                        break;\r\n\r\n                    case SoapMessageStage.AfterDeserialize:\r\n                        break;\r\n\r\n                    default:\r\n                        throw new ArgumentException(\"Invalid message stage [\" + message.Stage + \"]\", \"message\");\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Chains the stream.\r\n            /// </summary>\r\n            /// <param name=\"stream\">Stream.</param>\r\n            /// <returns></returns>\r\n            public override Stream ChainStream(Stream stream)\r\n            {\r\n                // Store old\r\n                oldStream = stream;\r\n                newStream = new MemoryStream();\r\n\r\n                // Return new stream\r\n                return newStream;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stores the request message.\r\n            /// </summary>\r\n            /// <param name=\"message\">Message.</param>\r\n            private void StoreRequestMessage(SoapMessage message)\r\n            {\r\n                // Rewind the source stream\r\n                newStream.Position = 0;\r\n\r\n                if (mustStoreSoapMessage)\r\n                {\r\n                    try\r\n                    {\r\n                        // Store message in our slot in the SoapHttpClientProtocol-derived class\r\n                        byte[] bufEncSoap = new Byte[newStream.Length];\r\n                        newStream.Read(bufEncSoap, 0, bufEncSoap.Length);\r\n                        ((SoapHttpClientProtocolExtended)(((SoapClientMessage)message).Client)).SoapRequestInternal = bufEncSoap;\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        throw new MessageStorageException(\"An error occured while trying to access the SOAP stream.\", ex);\r\n                    }\r\n                }\r\n\r\n                Copy(newStream, oldStream);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stores the response message.\r\n            /// </summary>\r\n            /// <param name=\"message\">Message.</param>\r\n            private void StoreResponseMessage(SoapMessage message)\r\n            {\r\n                Stream tempStream = new MemoryStream();\r\n                Copy(oldStream, tempStream);\r\n\r\n                if (mustStoreSoapMessage)\r\n                {\r\n                    try\r\n                    {\r\n                        // Store message in our slot in the SoapHttpClientProtocol-derived class\r\n                        byte[] bufEncSoap = new Byte[tempStream.Length];\r\n                        tempStream.Read(bufEncSoap, 0, bufEncSoap.Length);\r\n                        ((SoapHttpClientProtocolExtended)(((SoapClientMessage)message).Client)).SoapResponseInternal = bufEncSoap;\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        throw new MessageStorageException(\"An error occured while trying to access the SOAP stream.\", ex);\r\n                    }\r\n                }\r\n\r\n                Copy(tempStream, newStream);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Copys the specified from.\r\n            /// </summary>\r\n            /// <param name=\"from\">From.</param>\r\n            /// <param name=\"to\">To.</param>\r\n            private static void Copy(Stream from, Stream to)\r\n            {\r\n                if (from.CanSeek == true)\r\n                    from.Position = 0;\r\n                TextReader reader = new StreamReader(from);\r\n                TextWriter writer = new StreamWriter(to);\r\n                writer.WriteLine(reader.ReadToEnd());\r\n                writer.Flush();\r\n                if (to.CanSeek == true)\r\n                    to.Position = 0;\r\n            }\r\n\r\n            #region IDisposable Members\r\n\r\n            /// <summary>\r\n            /// Disposes this instance.\r\n            /// </summary>\r\n            public void Dispose()\r\n            {\r\n                Dispose(true);\r\n                GC.SuppressFinalize(this);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Disposes the specified disposing.\r\n            /// </summary>\r\n            /// <param name=\"disposing\">Disposing.</param>\r\n            protected virtual void Dispose(bool disposing)\r\n            {\r\n                if (disposing)\r\n                {\r\n                    // Free other state (managed objects)\r\n                }\r\n\r\n                // Free your own state (unmanaged objects)\r\n                // Set large fields to null\r\n                if (oldStream != null)\r\n                {\r\n                    oldStream.Close();\r\n                    oldStream = null;\r\n                }\r\n\r\n                if (newStream != null)\r\n                {\r\n                    newStream.Close();\r\n                    newStream = null;\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// 'Destruct' the SOAP message access client extension.\r\n            /// </summary>\r\n            ~SoapMessageAccessClientExtension()\r\n            {\r\n                // Simply call Dispose(false)\r\n                Dispose(false);\r\n            }\r\n\r\n            #endregion\r\n        }\r\n    }\r\n\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.239\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library.Soap {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Soap.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Body must be present in a SOAP envelope.\r\n        /// </summary>\r\n        internal static string body_must_be_present {\r\n            get {\r\n                return ResourceManager.GetString(\"body_must_be_present\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t uncompress compressed response.\r\n        /// </summary>\r\n        internal static string cant_uncompress_response {\r\n            get {\r\n                return ResourceManager.GetString(\"cant_uncompress_response\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Could not connect to host.\r\n        /// </summary>\r\n        internal static string could_not_connect {\r\n            get {\r\n                return ResourceManager.GetString(\"could_not_connect\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to SoapClient::__doRequest() failed.\r\n        /// </summary>\r\n        internal static string dorequest_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"dorequest_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to SoapClient::__doRequest() returned non string value.\r\n        /// </summary>\r\n        internal static string dorequest_returned_nonstring {\r\n            get {\r\n                return ResourceManager.GetString(\"dorequest_returned_nonstring\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to DTD are not supported by SOAP.\r\n        /// </summary>\r\n        internal static string dtd_not_supported {\r\n            get {\r\n                return ResourceManager.GetString(\"dtd_not_supported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to encodingStyle cannot be specified on the {0}.\r\n        /// </summary>\r\n        internal static string encondingstyle_cannot_be_specified {\r\n            get {\r\n                return ResourceManager.GetString(\"encondingstyle_cannot_be_specified\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error Fetching http body, No Content-Length, connection closed or chunked data.\r\n        /// </summary>\r\n        internal static string http_body_error {\r\n            get {\r\n                return ResourceManager.GetString(\"http_body_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error Fetching http headers.\r\n        /// </summary>\r\n        internal static string http_headers_error {\r\n            get {\r\n                return ResourceManager.GetString(\"http_headers_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error could not find &quot;location&quot; property.\r\n        /// </summary>\r\n        internal static string location_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"location_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Can&apos;t find response data.\r\n        /// </summary>\r\n        internal static string no_response_data {\r\n            get {\r\n                return ResourceManager.GetString(\"no_response_data\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to looks like we got no XML document.\r\n        /// </summary>\r\n        internal static string no_xml_document {\r\n            get {\r\n                return ResourceManager.GetString(\"no_xml_document\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A SOAP {0} element cannot have non Namespace qualified attributes.\r\n        /// </summary>\r\n        internal static string non_namespace_attributes_not_allowed {\r\n            get {\r\n                return ResourceManager.GetString(\"non_namespace_attributes_not_allowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A SOAP 1.2 envelope can contain only Header and Body.\r\n        /// </summary>\r\n        internal static string only_header_and_body_are_allowed {\r\n            get {\r\n                return ResourceManager.GetString(\"only_header_and_body_are_allowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Didn&apos;t recieve an xml document.\r\n        /// </summary>\r\n        internal static string received_doc_not_xml {\r\n            get {\r\n                return ResourceManager.GetString(\"received_doc_not_xml\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Redirection limit reached, aborting.\r\n        /// </summary>\r\n        internal static string redirection_limit {\r\n            get {\r\n                return ResourceManager.GetString(\"redirection_limit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed Sending HTTP SOAP request.\r\n        /// </summary>\r\n        internal static string sending_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"sending_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error build soap request.\r\n        /// </summary>\r\n        internal static string soap_request_building_error {\r\n            get {\r\n                return ResourceManager.GetString(\"soap_request_building_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to SSL support is not available in this build.\r\n        /// </summary>\r\n        internal static string ssl_not_available {\r\n            get {\r\n                return ResourceManager.GetString(\"ssl_not_available\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed to create stream??.\r\n        /// </summary>\r\n        internal static string stream_create_failed {\r\n            get {\r\n                return ResourceManager.GetString(\"stream_create_failed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unable to parse URL.\r\n        /// </summary>\r\n        internal static string unable_to_parse_url {\r\n            get {\r\n                return ResourceManager.GetString(\"unable_to_parse_url\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown protocol. Only http and https are allowed..\r\n        /// </summary>\r\n        internal static string unknow_protocl {\r\n            get {\r\n                return ResourceManager.GetString(\"unknow_protocl\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown Content-Encoding.\r\n        /// </summary>\r\n        internal static string unknown_content_encoding {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_content_encoding\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown data encoding style.\r\n        /// </summary>\r\n        internal static string unknown_data_encoding_style {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_data_encoding_style\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unknown Error.\r\n        /// </summary>\r\n        internal static string unknown_error {\r\n            get {\r\n                return ResourceManager.GetString(\"unknown_error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error finding &quot;uri&quot; property.\r\n        /// </summary>\r\n        internal static string uri_not_found {\r\n            get {\r\n                return ResourceManager.GetString(\"uri_not_found\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Wrong Version.\r\n        /// </summary>\r\n        internal static string wrong_version {\r\n            get {\r\n                return ResourceManager.GetString(\"wrong_version\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parsing WSDL: Couldn&apos;t load from &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string wsdl_could_not_load {\r\n            get {\r\n                return ResourceManager.GetString(\"wsdl_could_not_load\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parsing WSDL: Couldn&apos;t find &lt;definitions&gt; in &apos;{0}&apos;.\r\n        /// </summary>\r\n        internal static string wsdl_no_definitions {\r\n            get {\r\n                return ResourceManager.GetString(\"wsdl_no_definitions\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Parsing WSDL: Unexpected WSDL element &lt;%s&gt;.\r\n        /// </summary>\r\n        internal static string wsdl_unexpected_element {\r\n            get {\r\n                return ResourceManager.GetString(\"wsdl_unexpected_element\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to looks like we got XML without \\&quot;Envelope\\&quot; element.\r\n        /// </summary>\r\n        internal static string xml_without_envelope_element {\r\n            get {\r\n                return ResourceManager.GetString(\"xml_without_envelope_element\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"body_must_be_present\" xml:space=\"preserve\">\r\n    <value>Body must be present in a SOAP envelope</value>\r\n  </data>\r\n  <data name=\"cant_uncompress_response\" xml:space=\"preserve\">\r\n    <value>Can't uncompress compressed response</value>\r\n  </data>\r\n  <data name=\"could_not_connect\" xml:space=\"preserve\">\r\n    <value>Could not connect to host</value>\r\n  </data>\r\n  <data name=\"dorequest_failed\" xml:space=\"preserve\">\r\n    <value>SoapClient::__doRequest() failed</value>\r\n  </data>\r\n  <data name=\"dorequest_returned_nonstring\" xml:space=\"preserve\">\r\n    <value>SoapClient::__doRequest() returned non string value</value>\r\n  </data>\r\n  <data name=\"dtd_not_supported\" xml:space=\"preserve\">\r\n    <value>DTD are not supported by SOAP</value>\r\n  </data>\r\n  <data name=\"encondingstyle_cannot_be_specified\" xml:space=\"preserve\">\r\n    <value>encodingStyle cannot be specified on the {0}</value>\r\n  </data>\r\n  <data name=\"http_body_error\" xml:space=\"preserve\">\r\n    <value>Error Fetching http body, No Content-Length, connection closed or chunked data</value>\r\n  </data>\r\n  <data name=\"http_headers_error\" xml:space=\"preserve\">\r\n    <value>Error Fetching http headers</value>\r\n  </data>\r\n  <data name=\"location_not_found\" xml:space=\"preserve\">\r\n    <value>Error could not find \"location\" property</value>\r\n  </data>\r\n  <data name=\"non_namespace_attributes_not_allowed\" xml:space=\"preserve\">\r\n    <value>A SOAP {0} element cannot have non Namespace qualified attributes</value>\r\n  </data>\r\n  <data name=\"no_response_data\" xml:space=\"preserve\">\r\n    <value>Can't find response data</value>\r\n  </data>\r\n  <data name=\"no_xml_document\" xml:space=\"preserve\">\r\n    <value>looks like we got no XML document</value>\r\n  </data>\r\n  <data name=\"only_header_and_body_are_allowed\" xml:space=\"preserve\">\r\n    <value>A SOAP 1.2 envelope can contain only Header and Body</value>\r\n  </data>\r\n  <data name=\"received_doc_not_xml\" xml:space=\"preserve\">\r\n    <value>Didn't recieve an xml document</value>\r\n  </data>\r\n  <data name=\"redirection_limit\" xml:space=\"preserve\">\r\n    <value>Redirection limit reached, aborting</value>\r\n  </data>\r\n  <data name=\"sending_failed\" xml:space=\"preserve\">\r\n    <value>Failed Sending HTTP SOAP request</value>\r\n  </data>\r\n  <data name=\"soap_request_building_error\" xml:space=\"preserve\">\r\n    <value>Error build soap request</value>\r\n  </data>\r\n  <data name=\"ssl_not_available\" xml:space=\"preserve\">\r\n    <value>SSL support is not available in this build</value>\r\n  </data>\r\n  <data name=\"stream_create_failed\" xml:space=\"preserve\">\r\n    <value>Failed to create stream??</value>\r\n  </data>\r\n  <data name=\"unable_to_parse_url\" xml:space=\"preserve\">\r\n    <value>Unable to parse URL</value>\r\n  </data>\r\n  <data name=\"unknown_content_encoding\" xml:space=\"preserve\">\r\n    <value>Unknown Content-Encoding</value>\r\n  </data>\r\n  <data name=\"unknown_data_encoding_style\" xml:space=\"preserve\">\r\n    <value>Unknown data encoding style</value>\r\n  </data>\r\n  <data name=\"unknown_error\" xml:space=\"preserve\">\r\n    <value>Unknown Error</value>\r\n  </data>\r\n  <data name=\"unknow_protocl\" xml:space=\"preserve\">\r\n    <value>Unknown protocol. Only http and https are allowed.</value>\r\n  </data>\r\n  <data name=\"uri_not_found\" xml:space=\"preserve\">\r\n    <value>Error finding \"uri\" property</value>\r\n  </data>\r\n  <data name=\"wrong_version\" xml:space=\"preserve\">\r\n    <value>Wrong Version</value>\r\n  </data>\r\n  <data name=\"xml_without_envelope_element\" xml:space=\"preserve\">\r\n    <value>looks like we got XML without \\\"Envelope\\\" element</value>\r\n  </data>\r\n  <data name=\"wsdl_could_not_load\" xml:space=\"preserve\">\r\n    <value>Parsing WSDL: Couldn't load from '{0}'</value>\r\n  </data>\r\n  <data name=\"wsdl_no_definitions\" xml:space=\"preserve\">\r\n    <value>Parsing WSDL: Couldn't find &lt;definitions&gt; in '{0}'</value>\r\n  </data>\r\n  <data name=\"wsdl_unexpected_element\" xml:space=\"preserve\">\r\n    <value>Parsing WSDL: Unexpected WSDL element &lt;%s&gt;</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Extensions/Soap/WsdlHelper.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Net;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Soap\r\n{\r\n    /// <summary>\r\n    /// \r\n    /// </summary>\r\n    internal class WsdlHelper\r\n    {\r\n        /// <summary>\r\n        /// Gets the content of WSDL file\r\n        /// </summary>\r\n        /// <param name=\"source\">Source.</param>\r\n        /// <param name=\"fullPath\">Full path to Wsdl file</param>\r\n        internal static string GetWsdlContent(string source, out string fullPath)\r\n        {\r\n            Uri uri = new Uri(new Uri(ScriptContext.CurrentContext.WorkingDirectory), source);\r\n            fullPath = uri.AbsoluteUri;\r\n            string wsdlSourceValue = String.Empty;\r\n\r\n            WebRequest req = WebRequest.Create(uri);\r\n            using (WebResponse result = req.GetResponse())\r\n            {\r\n                Stream ReceiveStream = result.GetResponseStream();\r\n            \r\n                using (StreamReader sr = new StreamReader(ReceiveStream, Configuration.Application.Globalization.PageEncoding))\r\n                {\r\n                    wsdlSourceValue = sr.ReadToEnd();\r\n                }\r\n            }\r\n\r\n            return wsdlSourceValue;\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Soap/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetSoap\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Soap/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetSoap\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/Xml/AssemblyInfo.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger Xml\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - Xml\")]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"d28c1dec-ca2a-45d1-81dd-3288deb053a5\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Xml.XmlLibraryDescriptor), \"xml\", new string[] { \"xml\" })]\r\n"
  },
  {
    "path": "Source/Extensions/Xml/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n    /// Script independent Zlib configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class XmlLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n        internal XmlLocalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (XmlLocalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script dependent MSSQL configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class XmlGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal XmlGlobalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\"></param>\r\n\t\t/// <param name=\"value\"></param>\r\n\t\t/// <param name=\"node\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (XmlGlobalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n    /// Zlib extension configuration.\r\n\t/// </summary>\r\n    public static class XmlConfiguration\r\n\t{\r\n\t\t#region Legacy Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n            XmlLocalConfig local = (XmlLocalConfig)config.GetLibraryConfig(XmlLibraryDescriptor.Singleton);\r\n            XmlLocalConfig @default = DefaultLocal;\r\n            XmlGlobalConfig global = Global;\r\n\r\n\t\t\t//switch (option)\r\n\t\t\t//{\r\n                //// local:\r\n\r\n                //case \"mssql.connect_timeout\":\r\n                //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n                //case \"mssql.timeout\":\r\n                //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n                //case \"mssql.batchsize\":\r\n                //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n                //// global:  \r\n\r\n                //case \"mssql.max_links\":\r\n                //Debug.Assert(action == IniAction.Get);\r\n                //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n                //case \"mssql.secure_connection\":\r\n                //Debug.Assert(action == IniAction.Get);\r\n                //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n\t\t\t//}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes MySql legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n            XmlLocalConfig local = new XmlLocalConfig();\r\n\t\t\tXmlGlobalConfig global = new XmlGlobalConfig();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            ow.StartSection(\"zlib\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\t//const string s = ZlibLibraryDescriptor.ExtensionName;\r\n\t\t\t//GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n        public static XmlLocalConfig Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (XmlLocalConfig)Configuration.Local.GetLibraryConfig(XmlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n        public static XmlLocalConfig DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (XmlLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(XmlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the global library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static XmlGlobalConfig Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (XmlGlobalConfig)Configuration.Global.GetLibraryConfig(XmlLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n        public static XmlLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n            return (XmlLocalConfig)context.Config.GetLibraryConfig(XmlLibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Xml/Extension.Xml.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{8145F722-1B6C-4162-92DC-824DFDC3ED6A}</ProjectGuid>\r\n    <AssemblyName>PhpNet.Extension.Xml</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Xml</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"PhpXmlParser.cs\" />\r\n    <Compile Include=\"Strings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Strings.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"XmlParserResource.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Strings.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Strings.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.Xml.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Xml/Extension.Xml.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension XML</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Xml/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n    public sealed class XmlLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n        internal static XmlLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static XmlLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtensionName }; }\r\n        //}\r\n        //internal const string ExtensionName = \"zlib\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\r\n            XmlConfiguration.RegisterLegacyOptions();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the MSSQL library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (XmlLocalConfig)result.Local, (XmlGlobalConfig)result.Global);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n            return new ConfigContextBase(new XmlLocalConfig(), new XmlGlobalConfig());\r\n\t\t}\r\n\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/Extensions/Xml/PhpXmlParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n    public enum XmlParserError\r\n    {\r\n        [ImplementsConstant(\"XML_ERROR_NONE\")]\r\n\t\tXML_ERROR_NONE = 0,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_GENERIC\")]\r\n        XML_ERROR_GENERIC = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_NO_MEMORY\")]\r\n        XML_ERROR_NO_MEMORY = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_SYNTAX\")]\r\n        XML_ERROR_SYNTAX = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_NO_ELEMENTS\")]\r\n        XML_ERROR_NO_ELEMENTS = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_INVALID_TOKEN\")]\r\n        XML_ERROR_INVALID_TOKEN = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_UNCLOSED_TOKEN\")]\r\n        XML_ERROR_UNCLOSED_TOKEN = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_PARTIAL_CHAR\")]\r\n        XML_ERROR_PARTIAL_CHAR = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_TAG_MISMATCH\")]\r\n        XML_ERROR_TAG_MISMATCH = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_DUPLICATE_ATTRIBUTE\")]\r\n        XML_ERROR_DUPLICATE_ATTRIBUTE = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_JUNK_AFTER_DOC_ELEMENT\")]\r\n        XML_ERROR_JUNK_AFTER_DOC_ELEMENT = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_PARAM_ENTITY_REF\")]\r\n        XML_ERROR_PARAM_ENTITY_REF = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_UNDEFINED_ENTITY\")]\r\n        XML_ERROR_UNDEFINED_ENTITY = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_RECURSIVE_ENTITY_REF\")]\r\n        XML_ERROR_RECURSIVE_ENTITY_REF = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_ASYNC_ENTITY\")]\r\n        XML_ERROR_ASYNC_ENTITY = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_BAD_CHAR_REF\")]\r\n        XML_ERROR_BAD_CHAR_REF = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_BINARY_ENTITY_REF\")]\r\n        XML_ERROR_BINARY_ENTITY_REF = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF\")]\r\n        XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_MISPLACED_XML_PI\")]\r\n        XML_ERROR_MISPLACED_XML_PI = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_UNKNOWN_ENCODING\")]\r\n        XML_ERROR_UNKNOWN_ENCODING = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_INCORRECT_ENCODING\")]\r\n        XML_ERROR_INCORRECT_ENCODING = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_UNCLOSED_CDATA_SECTION\")]\r\n        XML_ERROR_UNCLOSED_CDATA_SECTION = 1,\r\n\r\n        [ImplementsConstant(\"XML_ERROR_EXTERNAL_ENTITY_HANDLING\")]\r\n        XML_ERROR_EXTERNAL_ENTITY_HANDLING = 1\r\n    }\r\n\r\n    public enum XmlOption\r\n    {\r\n        [ImplementsConstant(\"XML_OPTION_CASE_FOLDING\")]\r\n        XML_OPTION_CASE_FOLDING,\r\n        [ImplementsConstant(\"XML_OPTION_SKIP_TAGSTART\")]\r\n        XML_OPTION_SKIP_TAGSTART,\r\n        [ImplementsConstant(\"XML_OPTION_SKIP_WHITE\")]\r\n        XML_OPTION_SKIP_WHITE,\r\n        [ImplementsConstant(\"XML_OPTION_TARGET_ENCODING\")]\r\n        XML_OPTION_TARGET_ENCODING\r\n    }\r\n\r\n    public static class XmlParser\r\n    {\r\n        #region utf8_encode, utf8_decode\r\n\r\n        /// <summary>\r\n        /// ISO-8859-1 <see cref=\"Encoding\"/>.\r\n        /// </summary>\r\n        private static Encoding/*!*/ISO_8859_1_Encoding\r\n        {\r\n            get\r\n            {\r\n                if (_ISO_8859_1_Encoding == null)\r\n                    _ISO_8859_1_Encoding = Encoding.GetEncoding(\"ISO-8859-1\");\r\n                \r\n                return _ISO_8859_1_Encoding;\r\n            }\r\n        }\r\n        private static Encoding _ISO_8859_1_Encoding = null;\r\n\r\n        /// <summary>\r\n        /// This function encodes the string data to UTF-8, and returns the encoded version. UTF-8 is\r\n        /// a standard mechanism used by Unicode for encoding wide character values into a byte stream.\r\n        /// UTF-8 is transparent to plain ASCII characters, is self-synchronized (meaning it is \r\n        /// possible for a program to figure out where in the bytestream characters start) and can be\r\n        /// used with normal string comparison functions for sorting and such. PHP encodes UTF-8\r\n        /// characters in up to four bytes.\r\n        /// </summary>\r\n        /// <param name=\"data\">An ISO-8859-1 string. </param>\r\n        /// <returns>Returns the UTF-8 translation of data.</returns>\r\n        [ImplementsFunction(\"utf8_encode\")]\r\n        //[return:CastToFalse]\r\n        public static object utf8_encode(object data)\r\n        {\r\n            if (data == null)\r\n                return string.Empty;\r\n\r\n            // this function transforms ISO-8859-1 binary string into UTF8 string\r\n            // since our internal representation is native CLR string - UTF16, we have changed this semantic\r\n            \r\n            string encoded;\r\n\r\n            if (data.GetType() == typeof(string))\r\n            {\r\n                encoded = (string)data;\r\n            }\r\n            else if (data.GetType() == typeof(PhpBytes))\r\n            {\r\n                // if we got binary string, assume it's ISO-8859-1 encoded string and convert it to System.String\r\n                encoded = ISO_8859_1_Encoding.GetString(((PhpBytes)data).ReadonlyData);\r\n            }\r\n            else\r\n            {\r\n                encoded = Core.Convert.ObjectToString(data);\r\n            }\r\n\r\n            // return utf8 encoded data\r\n            return (Configuration.Application.Globalization.PageEncoding == Encoding.UTF8) ?\r\n                (object)encoded : // PageEncoding is UTF8, we can keep .NET string, which will be converted to UTF8 byte stream as it would be needed\r\n                (object)new PhpBytes(Encoding.UTF8.GetBytes(encoded));   // conversion of string to byte[] would not respect UTF8 encoding, convert it now\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function decodes data, assumed to be UTF-8 encoded, to ISO-8859-1.\r\n        /// </summary>\r\n        /// <param name=\"data\">An ISO-8859-1 string. </param>\r\n        /// <returns>Returns the UTF-8 translation of data.</returns>\r\n        [ImplementsFunction(\"utf8_decode\")]\r\n        public static PhpBytes utf8_decode(object data)\r\n        {\r\n            if (data == null)\r\n                return new PhpBytes();  // empty (binary) string\r\n\r\n            // this function converts the UTF8 representation to ISO-8859-1 representation\r\n            // we assume CLR string (UTF16) as input as it is our internal representation\r\n\r\n            if (data.GetType() == typeof(PhpBytes))\r\n            {\r\n                // if we got binary string, assume it's UTF-8 encoded and perform byte[] -(UTF-8)-> string -(ISO-8859-1)-> byte[] transformation\r\n                // consider replacing this with something more efficient\r\n                return new PhpBytes(ISO_8859_1_Encoding.GetBytes(Encoding.UTF8.GetString(((PhpBytes)data).ReadonlyData)));\r\n            }\r\n            else //if (data.GetType() == typeof(string))\r\n            {\r\n                var str = Core.Convert.ObjectToString(data);\r\n                // if we got System.String string, convert it from UTF16 CLR representation into ISO-8859-1 binary representation\r\n                return new PhpBytes(ISO_8859_1_Encoding.GetBytes(str));\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_parser_create_ns, xml_parser_create, xml_parser_free\r\n\r\n        /// <summary>\r\n        /// Creates a new XML parser with XML namespace support and returns a resource handle referencing\r\n        /// it to be used by the other XML functions. \r\n        /// </summary>\r\n        /// <returns>Returns a resource handle for the new XML parser.</returns>\r\n        [ImplementsFunction(\"xml_parser_create_ns\")]\r\n        public static PhpResource CreateNamespaceAware()\r\n        {\r\n            return CreateNamespaceAware(\"UTF-8\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new XML parser with XML namespace support and returns a resource handle referencing\r\n        /// it to be used by the other XML functions. \r\n        /// </summary>\r\n        /// <param name=\"encoding\">\r\n        /// The optional encoding specifies the character encoding for the input/output in PHP 4. Starting\r\n        /// from PHP 5, the input encoding is automatically detected, so that the encoding parameter\r\n        /// specifies only the output encoding. In PHP 4, the default output encoding is the same as the\r\n        /// input charset. In PHP 5.0.0 and 5.0.1, the default output charset is ISO-8859-1, while in PHP\r\n        /// 5.0.2 and upper is UTF-8. The supported encodings are ISO-8859-1, UTF-8 and US-ASCII. \r\n        /// </param>\r\n        /// <returns>Returns a resource handle for the new XML parser.</returns>\r\n        [ImplementsFunction(\"xml_parser_create_ns\")]\r\n        public static PhpResource CreateNamespaceAware(string encoding)\r\n        {\r\n            return CreateNamespaceAware(encoding, \":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new XML parser with XML namespace support and returns a resource handle referencing\r\n        /// it to be used by the other XML functions. \r\n        /// </summary>\r\n        /// <param name=\"encoding\">\r\n        /// The optional encoding specifies the character encoding for the input/output in PHP 4. Starting\r\n        /// from PHP 5, the input encoding is automatically detected, so that the encoding parameter\r\n        /// specifies only the output encoding. In PHP 4, the default output encoding is the same as the\r\n        /// input charset. In PHP 5.0.0 and 5.0.1, the default output charset is ISO-8859-1, while in PHP\r\n        /// 5.0.2 and upper is UTF-8. The supported encodings are ISO-8859-1, UTF-8 and US-ASCII. \r\n        /// </param>\r\n        /// <param name=\"namespaceSeparator\">\r\n        /// With a namespace aware parser tag parameters passed to the various handler functions will \r\n        /// consist of namespace and tag name separated by the string specified in seperator.\r\n        /// </param>\r\n        /// <returns>Returns a resource handle for the new XML parser.</returns>\r\n        [ImplementsFunction(\"xml_parser_create_ns\")]\r\n        public static PhpResource CreateNamespaceAware(string encoding, string namespaceSeparator)\r\n        {\r\n            return new XmlParserResource(Encoding.GetEncoding(encoding), true, namespaceSeparator);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new XML parser and returns a resource handle referencing it to be used by the other\r\n        /// XML functions. \r\n        /// </summary>\r\n        /// <returns>Returns a resource handle for the new XML parser.</returns>\r\n        [ImplementsFunction(\"xml_parser_create\")]\r\n        public static PhpResource Create()\r\n        {\r\n            return Create(\"UTF-8\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new XML parser and returns a resource handle referencing it to be used by the other\r\n        /// XML functions. \r\n        /// </summary>\r\n        /// <param name=\"encoding\">\r\n        /// The optional encoding specifies the character encoding for the input/output in PHP 4. Starting\r\n        /// from PHP 5, the input encoding is automatically detected, so that the encoding parameter\r\n        /// specifies only the output encoding. In PHP 4, the default output encoding is the same as the\r\n        /// input charset. If empty string is passed, the parser attempts to identify which encoding the\r\n        /// document is encoded in by looking at the heading 3 or 4 bytes. In PHP 5.0.0 and 5.0.1, the\r\n        /// default output charset is ISO-8859-1, while in PHP 5.0.2 and upper is UTF-8. The supported\r\n        /// encodings are ISO-8859-1, UTF-8 and US-ASCII. \r\n        /// </param>\r\n        /// <returns>Returns a resource handle for the new XML parser.</returns>\r\n        [ImplementsFunction(\"xml_parser_create\")]\r\n        public static PhpResource Create(string encoding)\r\n        {\r\n            return new XmlParserResource(Encoding.GetEncoding(encoding), false, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Frees the given XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to free.</param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or else it frees the \r\n        /// parser and returns TRUE.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parser_free\")]\r\n        public static bool Free(PhpResource parser)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            // Since .NET hasn't online XML parser, we need the whole XML data to parse them properly.\r\n            // Notice user, he has to parse the XML by passing is_final=true to the last xml_parse function call.\r\n            if (!xmlParser.InputQueueIsEmpty)\r\n                PhpException.Throw(PhpError.Notice, Strings.not_parsed_data_left);\r\n\r\n            xmlParser.Dispose();\r\n            return true;\r\n\r\n        }\r\n        #endregion\r\n\r\n        #region xml_parse, xml_parse_into_struct\r\n\r\n        /// <summary>\r\n        /// Parses an XML document. The handlers for the configured events are called as many times as \r\n        /// necessary. \r\n        /// </summary>\r\n        /// <param name=\"namingContext\">Current namign context.</param>\r\n        /// <param name=\"caller\">Current caller desc.</param>\r\n        /// <param name=\"parser\">A reference to the XML parser to use.</param>\r\n        /// <param name=\"data\">\r\n        /// Chunk of data to parse. A document may be parsed piece-wise by calling xml_parse() several \r\n        /// times with new data, as long as the is_final parameter is set and TRUE when the last data is \r\n        /// parsed. \r\n        /// </param>\r\n        /// <returns>\r\n        /// <para>Returns 1 on success or 0 on failure.</para>\r\n        /// <para>\r\n        /// For unsuccessful parses, error information can be retrieved with xml_get_error_code(), \r\n        /// xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() and \r\n        /// xml_get_current_byte_index(). \r\n        /// </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parse\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static int Parse(NamingContext/*!*/ namingContext, DTypeDesc caller, PhpResource parser, string data)\r\n        {\r\n            return Parse(namingContext, caller, parser, data, false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses an XML document. The handlers for the configured events are called as many times as \r\n        /// necessary. \r\n        /// </summary>\r\n        /// <param name=\"namingContext\">Current namign context.</param>\r\n        /// <param name=\"caller\">Current caller desc.</param>\r\n        /// <param name=\"parser\">A reference to the XML parser to use.</param>\r\n        /// <param name=\"data\">\r\n        /// Chunk of data to parse. A document may be parsed piece-wise by calling xml_parse() several \r\n        /// times with new data, as long as the is_final parameter is set and TRUE when the last data is \r\n        /// parsed. \r\n        /// </param>\r\n        /// <param name=\"is_final\">If set and TRUE, data is the last piece of data sent in this parse.</param>\r\n        /// <returns>\r\n        /// <para>Returns 1 on success or 0 on failure.</para>\r\n        /// <para>\r\n        /// For unsuccessful parses, error information can be retrieved with xml_get_error_code(), \r\n        /// xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() and \r\n        /// xml_get_current_byte_index(). \r\n        /// </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parse\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static int Parse(NamingContext/*!*/ namingContext, DTypeDesc caller, PhpResource parser, string data, bool is_final)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.Parse(caller, namingContext, data, is_final) ? 1 : 0;\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function parses an XML string into 2 parallel array structures, one (index) containing\r\n        /// pointers to the location of the appropriate values in the values array. These last two \r\n        /// parameters must be passed by reference. \r\n        /// </summary>\r\n        /// <param name=\"namingContext\">Current namign context.</param>\r\n        /// <param name=\"caller\">Current caller desc.</param>\r\n        /// <param name=\"parser\">A reference to the XML parser. </param>\r\n        /// <param name=\"data\">A string containing the XML data. </param>\r\n        /// <param name=\"values\">An array containing the values of the XML data.</param>\r\n        /// <returns>\r\n        /// Returns 0 for failure and 1 for success. This is not the same as FALSE and TRUE, be careful\r\n        /// with operators such as ===.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parse_into_struct\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static int ParseIntoStruct(NamingContext/*!*/ namingContext, DTypeDesc caller, PhpResource parser, string data, PhpReference values)\r\n        {\r\n            return ParseIntoStruct(namingContext, caller, parser, data, values, null);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function parses an XML string into 2 parallel array structures, one (index) containing\r\n        /// pointers to the location of the appropriate values in the values array. These last two \r\n        /// parameters must be passed by reference. \r\n        /// </summary>\r\n        /// <param name=\"namingContext\">Current namign context.</param>\r\n        /// <param name=\"caller\">Current caller desc.</param>\r\n        /// <param name=\"parser\">A reference to the XML parser. </param>\r\n        /// <param name=\"data\">A string containing the XML data. </param>\r\n        /// <param name=\"values\">An array containing the values of the XML data.</param>\r\n        /// <param name=\"index\">\r\n        /// An array containing pointers to the location of the appropriate values in the $values.\r\n        /// </param>\r\n        /// <returns>\r\n        /// Returns 0 for failure and 1 for success. This is not the same as FALSE and TRUE, be careful\r\n        /// with operators such as ===.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parse_into_struct\", FunctionImplOptions.NeedsClassContext | FunctionImplOptions.NeedsNamingContext)]\r\n        public static int ParseIntoStruct(NamingContext/*!*/ namingContext, DTypeDesc caller, PhpResource parser, string data, PhpReference values, PhpReference index)\r\n        {\r\n            if (values == null)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"values argument should not be null\");\r\n                return 0;\r\n            }\r\n\r\n            values.Value = new PhpArray();\r\n            if (index != null) index.Value = new PhpArray();\r\n\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.ParseIntoStruct(caller, namingContext, data, (PhpArray)values.Value, index != null ? (PhpArray)index.Value : null) ? 1 : 0;\r\n            }\r\n\r\n            PhpException.Throw(PhpError.Warning, \"parser argument should contain valid XML parser\");\r\n            return 0;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_parser_get_option, xml_parser_set_option\r\n\r\n        /// <summary>\r\n        /// Sets an option in an XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to set an option in. </param>\r\n        /// <param name=\"option\">\r\n        /// One of the following options: XML_OPTION_CASE_FOLDING, XML_OPTION_SKIP_TAGSTART,\r\n        /// XML_OPTION_SKIP_WHITE, XML_OPTION_TARGET_ENCODING.\r\n        /// </param>\r\n        /// <param name=\"value\">The option's new value. </param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or if the option could\r\n        /// not be set. Else the option is set and TRUE is returned.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parser_set_option\")]\r\n        public static bool SetOption(PhpResource parser, int option, object value)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                switch ((XmlOption)option)\r\n                {\r\n                    case XmlOption.XML_OPTION_CASE_FOLDING:\r\n                        xmlParser.EnableCaseFolding = Core.Convert.ObjectToBoolean(value);\r\n                        return true;\r\n                    case XmlOption.XML_OPTION_SKIP_WHITE:\r\n                        xmlParser.EnableSkipWhitespace = Core.Convert.ObjectToBoolean(value);\r\n                        return true;\r\n                    case XmlOption.XML_OPTION_SKIP_TAGSTART:\r\n                        break;\r\n                    case XmlOption.XML_OPTION_TARGET_ENCODING:\r\n                        break;\r\n                }\r\n\r\n                PhpException.Throw(PhpError.Warning, \"invalid option value\");\r\n                return false;\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"invalid parser\");\r\n                return false;\r\n\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets an option value from an XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to get an option from. </param>\r\n        /// <param name=\"option\">\r\n        /// Which option to fetch. XML_OPTION_CASE_FOLDING and XML_OPTION_TARGET_ENCODING are available.\r\n        /// </param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser or if option isn't valid\r\n        /// (generates also a E_WARNING). Else the option's value is returned. \r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_parser_get_option\")]\r\n        public static object GetOption(PhpResource parser, int option)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                switch ((XmlOption)option)\r\n                {\r\n                    case XmlOption.XML_OPTION_CASE_FOLDING:\r\n                        return xmlParser.EnableCaseFolding;\r\n                    case XmlOption.XML_OPTION_SKIP_WHITE:\r\n                        return xmlParser.EnableSkipWhitespace;\r\n                    case XmlOption.XML_OPTION_SKIP_TAGSTART:\r\n                        break;\r\n                    case XmlOption.XML_OPTION_TARGET_ENCODING:\r\n                        break;\r\n                }\r\n\r\n                PhpException.Throw(PhpError.Warning, \"invalid option value\");\r\n                return false;\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, \"invalid parser\");\r\n                return false;\r\n\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_error_string, xml_get_error_code\r\n\r\n        /// <summary>\r\n        /// Gets the XML parser error string associated with the given code.\r\n        /// </summary>\r\n        /// <param name=\"code\">An error code from xml_get_error_code().</param>\r\n        /// <returns>\r\n        /// Returns a string with a textual description of the error code, or FALSE if no description \r\n        /// was found.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_error_string\")]\r\n        [return: CastToFalse]\r\n        public static string ErrorString(int code)\r\n        {\r\n            if (code == (int)XmlParserError.XML_ERROR_GENERIC)\r\n                return \"Generic XML parser error - Phalanger does not currently support error strings.\";\r\n            else if (code == (int)XmlParserError.XML_ERROR_NONE)\r\n                return \"No Error.\";\r\n            else\r\n                return \"Unknown XML parser error.\";\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the XML parser error code. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to get error code from.</param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or else it returns \r\n        /// one of the error codes.\r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_get_error_code\")]\r\n        public static object GetErrorCode(PhpResource parser)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.ErrorCode;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_get_current_byte_index, xml_get_current_column_number, xml_get_current_line_number\r\n\r\n        /// <summary>\r\n        /// Gets the current byte index of the given XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to get byte index from.</param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or else it returns \r\n        /// which byte index the parser is currently at in its data buffer (starting at 0). \r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_get_current_byte_index\")]\r\n        [return: CastToFalse]\r\n        public static int GetCurrentByteIndex(PhpResource parser)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.CurrentByteIndex;\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the current column number of the given XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to get column number from. </param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or else it returns \r\n        /// which column on the current line (as given by xml_get_current_line_number()) the parser is \r\n        /// currently at. \r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_get_current_column_number\")]\r\n        [return: CastToFalse]\r\n        public static int GetCurrentColumnNumber(PhpResource parser)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.CurrentColumnNumber;\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the current line number for the given XML parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to get line number from.</param>\r\n        /// <returns>\r\n        /// This function returns FALSE if parser does not refer to a valid parser, or else it returns \r\n        /// which line the parser is currently at in its data buffer. \r\n        /// </returns>\r\n        [ImplementsFunction(\"xml_get_current_line_number\")]\r\n        [return: CastToFalse]\r\n        public static int GetCurrentLineNumber(PhpResource parser)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                return xmlParser.CurrentLineNumber;\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_set_object\r\n        \r\n        /// <summary>\r\n        /// This function allows to use parser inside object. All callback functions could be set with \r\n        /// xml_set_element_handler() etc and assumed to be methods of object. \r\n        /// </summary>\r\n        /// <param name=\"parser\">A reference to the XML parser to use inside the object. </param>\r\n        /// <param name=\"objRef\">The object where to use the XML parser.</param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_object\")]\r\n        public static bool SetObject(PhpResource parser, PhpReference objRef)\r\n        {\r\n            XmlParserResource xmlParser = parser as XmlParserResource;\r\n\r\n            if (xmlParser != null)\r\n            {\r\n                DObject dObject = objRef != null ? objRef.Value as DObject : null;\r\n\r\n                if (dObject != null)\r\n                {\r\n                    xmlParser.HandlerObject = dObject;\r\n                }\r\n                else\r\n                {\r\n                    xmlParser.HandlerObject = null;\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_set_default_handler, xml_set_unparsed_entity_decl_handler\r\n        /// <summary>\r\n        /// Sets the default handler function for the XML parser parser.\r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up default handler function. \r\n        /// </param>\r\n        /// <param name=\"default_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure.</returns>\r\n        [ImplementsFunction(\"xml_set_default_handler\")]\r\n        public static bool SetDefaultHandler(PhpResource parser, object default_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var default_handler = xmlParser.ObjectToXmlCallback(default_handler_obj);\r\n\r\n            if (default_handler != null)\r\n            {\r\n                xmlParser.DefaultHandler = default_handler;\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the unparsed entity declaration handler function for the XML parser parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up unparsed entity declaration handler function. \r\n        /// </param>\r\n        /// <param name=\"unparsed_entity_decl_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_unparsed_entity_decl_handler\", FunctionImplOptions.NotSupported)]\r\n        public static bool SetUnparsedEntityDeclHandler(PhpResource parser, object unparsed_entity_decl_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_set_element_handler, xml_set_character_data_handler\r\n        /// <summary>\r\n        /// Sets the element handler functions for the XML parser. start_element_handler and \r\n        /// end_element_handler are strings containing the names of functions that must exist \r\n        /// when xml_parse() is called for parser.  \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up start and end element handler functions. \r\n        /// </param>\r\n        /// <param name=\"start_element_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <param name=\"end_element_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>        \r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_element_handler\")]\r\n        public static bool SetElementHandler(PhpResource parser, object start_element_handler_obj, object end_element_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var start_element_handler = xmlParser.ObjectToXmlCallback(start_element_handler_obj);\r\n            var end_element_handler = xmlParser.ObjectToXmlCallback(end_element_handler_obj);\r\n\r\n            if (start_element_handler != null && end_element_handler != null)\r\n            {\r\n                xmlParser.StartElementHandler = start_element_handler;\r\n                xmlParser.EndElementHandler = end_element_handler;\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the character data handler function for the XML parser parser.  \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up character data handler function.\r\n        /// </param>\r\n        /// <param name=\"character_data_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_character_data_handler\")]\r\n        public static bool SetCharacterDataHandler(PhpResource parser, object character_data_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var character_data_handler = xmlParser.ObjectToXmlCallback(character_data_handler_obj);\r\n\r\n            if (character_data_handler != null)\r\n            {\r\n                xmlParser.CharacterDataHandler = character_data_handler;\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_set_start_namespace_decl_handler, xml_set_end_namespace_decl_handler\r\n\r\n        /// <summary>\r\n        /// Set a handler to be called when a namespace is declared. Namespace declarations occur \r\n        /// inside start tags. But the namespace declaration start handler is called before the start \r\n        /// tag handler for each namespace declared in that start tag.  \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser. \r\n        /// </param>\r\n        /// <param name=\"start_namespace_decl_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_start_namespace_decl_handler\")]\r\n        public static bool SetStartNamespaceDeclHandler(PhpResource parser, object start_namespace_decl_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var start_namespace_decl_handler = xmlParser.ObjectToXmlCallback(start_namespace_decl_handler_obj);\r\n\r\n            if (start_namespace_decl_handler != null)\r\n            {\r\n                xmlParser.StartNamespaceDeclHandler = start_namespace_decl_handler;\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set a handler to be called when leaving the scope of a namespace declaration. This will \r\n        /// be called, for each namespace declaration, after the handler for the end tag of the \r\n        /// element in which the namespace was declared. \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser.\r\n        /// </param>\r\n        /// <param name=\"end_namespace_decl_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_end_namespace_decl_handler\")]\r\n        public static bool SetEndNamespaceDeclHandler(PhpResource parser, object end_namespace_decl_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var end_namespace_decl_handler = xmlParser.ObjectToXmlCallback(end_namespace_decl_handler_obj);\r\n\r\n            if (end_namespace_decl_handler != null)\r\n            {\r\n                xmlParser.EndNamespaceDeclHandler = end_namespace_decl_handler;\r\n\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region xml_set_notation_decl_handler, xml_set_processing_instruction_handler, xml_set_external_entity_ref_handler\r\n        /// <summary>\r\n        /// Sets the notation declaration handler function for the XML parser parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up notation declaration handler function. \r\n        /// </param>\r\n        /// <param name=\"notation_decl_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_notation_decl_handler\", FunctionImplOptions.NotSupported)]\r\n        public static bool SetNotationDeclHandler(PhpResource parser, object notation_decl_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the processing instruction (PI) handler function for the XML parser parser. \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up processing instruction (PI) handler function.  \r\n        /// </param>\r\n        /// <param name=\"processing_instruction_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_processing_instruction_handler\")]\r\n        public static bool SetProcessingInstructionHandler(PhpResource parser, object processing_instruction_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            var processing_instruction_handler = xmlParser.ObjectToXmlCallback(processing_instruction_handler_obj);\r\n\r\n            if (processing_instruction_handler != null)\r\n            {\r\n                xmlParser.ProcessingInstructionHandler = processing_instruction_handler;\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the external entity reference handler function for the XML parser parser.  \r\n        /// </summary>\r\n        /// <param name=\"parser\">\r\n        /// A reference to the XML parser to set up external entity reference handler function. \r\n        /// </param>\r\n        /// <param name=\"external_entity_ref_handler_obj\">\r\n        /// String (or array) containing the name of a function that must exist when xml_parse() is \r\n        /// called for parser. \r\n        /// </param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure. </returns>\r\n        [ImplementsFunction(\"xml_set_external_entity_ref_handler\", FunctionImplOptions.NotSupported)]\r\n        public static bool SetExternalEntityRefHandler(PhpResource parser, object external_entity_ref_handler_obj)\r\n        {\r\n            XmlParserResource xmlParser = XmlParserResource.ValidResource(parser);\r\n            if (xmlParser == null)\r\n                return false;\r\n\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return false;\r\n        }\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Xml/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.261\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library.Xml {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Xml.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to supplied resource is not a valid XML Parser resource.\r\n        /// </summary>\r\n        internal static string invalid_xmlresource {\r\n            get {\r\n                return ResourceManager.GetString(\"invalid_xmlresource\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to XML Parser contains not parsed data. Ensure to call &quot;xml_parse&quot; with is_final parameter set to &quot;true&quot;..\r\n        /// </summary>\r\n        internal static string not_parsed_data_left {\r\n            get {\r\n                return ResourceManager.GetString(\"not_parsed_data_left\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Xml/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"invalid_xmlresource\" xml:space=\"preserve\">\r\n    <value>supplied resource is not a valid XML Parser resource</value>\r\n  </data>\r\n  <data name=\"not_parsed_data_left\" xml:space=\"preserve\">\r\n    <value>XML Parser contains not parsed data. Ensure to call \"xml_parse\" with is_final parameter set to \"true\".</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Extensions/Xml/XmlParserResource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n    public sealed class XmlParserResource : PhpResource\r\n    {\r\n        private class HandlerWrapper\r\n        {\r\n            public PhpCallback Callback { get; set; }\r\n            public XmlParserResource Parser { get; private set; }\r\n            public string Name { get; private set; }\r\n            private PhpCallback _currentCallback;\r\n            public bool Bound { get; private set; }\r\n\r\n            public void BindOrBiteMyLegsOff(DTypeDesc caller, NamingContext namingContext)\r\n            {\r\n                if (Callback != null)\r\n                {\r\n                    if (Callback.TargetInstance == null && Parser._handlerObject != null)\r\n                        _currentCallback = new PhpCallback(Parser._handlerObject, Callback.RoutineName);\r\n                    else\r\n                        _currentCallback = Callback;\r\n\r\n                    Bound = _currentCallback.Bind(true, caller, namingContext);\r\n                }\r\n                else\r\n                {\r\n                    Bound = false;\r\n                }\r\n            }\r\n\r\n            public object Invoke(params object[] arguments)\r\n            {\r\n                if (Bound)\r\n                {\r\n                    return _currentCallback.Invoke(arguments);\r\n                }\r\n                else\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, String.Format(\"Unable to call handler {0}()\", Name));\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            public HandlerWrapper(XmlParserResource parser, string name)\r\n            {\r\n                Parser = parser;\r\n                Name = name;\r\n            }\r\n        }\r\n\r\n        private enum ElementState\r\n        {\r\n            Beginning,\r\n            Interior\r\n        }\r\n\r\n        private class ElementRecord\r\n        {\r\n            public int Level;\r\n            public string ElementName;\r\n            public ElementState State;\r\n            public PhpArray Attributes;\r\n        }\r\n\r\n        private class TextRecord\r\n        {\r\n            public string Text;\r\n        }\r\n\r\n        #region Fields & Properties\r\n\r\n        private Encoding _outputEncoding;\r\n        private bool _processNamespaces;\r\n        private string _namespaceSeparator;\r\n        private Queue<string> _inputQueue;\r\n\r\n        /// <summary>\r\n        /// <c>True</c> iff the parser has no not-parsed data left.\r\n        /// </summary>\r\n        internal bool InputQueueIsEmpty { get { return _inputQueue == null || _inputQueue.Count == 0; } }\r\n\r\n        public int CurrentLineNumber { get { return _lastLineNumber; } }\r\n        private int _lastLineNumber;\r\n\r\n        public int CurrentColumnNumber { get { return _lastColumnNumber; } }\r\n        private int _lastColumnNumber;\r\n\r\n        public int CurrentByteIndex { get { return _lastByteIndex; } }\r\n        private int _lastByteIndex;\r\n\r\n        public PhpCallback DefaultHandler { get { return _defaultHandler.Callback; } set { _defaultHandler.Callback = value; } }\r\n        private HandlerWrapper _defaultHandler;\r\n\r\n        public PhpCallback StartElementHandler { get { return _startElementHandler.Callback; } set { _startElementHandler.Callback = value; } }\r\n        private HandlerWrapper _startElementHandler;\r\n\r\n        public PhpCallback EndElementHandler { get { return _endElementHandler.Callback; } set { _endElementHandler.Callback = value; } }\r\n        private HandlerWrapper _endElementHandler;\r\n\r\n        public PhpCallback CharacterDataHandler { get { return _characterDataHandler.Callback; } set { _characterDataHandler.Callback = value; } }\r\n        private HandlerWrapper _characterDataHandler;\r\n\r\n        public PhpCallback StartNamespaceDeclHandler { get { return _startNamespaceDeclHandler.Callback; } set { _startNamespaceDeclHandler.Callback = value; } }\r\n        private HandlerWrapper _startNamespaceDeclHandler;\r\n\r\n        public PhpCallback EndNamespaceDeclHandler { get { return _endNamespaceDeclHandler.Callback; } set { _endNamespaceDeclHandler.Callback = value; } }\r\n        private HandlerWrapper _endNamespaceDeclHandler;\r\n\r\n        public PhpCallback ProcessingInstructionHandler { get { return _processingInstructionHandler.Callback; } set { _processingInstructionHandler.Callback = value; } }\r\n        private HandlerWrapper _processingInstructionHandler;\r\n        \r\n        public DObject HandlerObject { get { return _handlerObject; } set { _handlerObject = value; } }\r\n        private DObject _handlerObject;\r\n\r\n        public bool EnableCaseFolding { get { return _enableCaseFolding; } set { _enableCaseFolding = value; } }\r\n        private bool _enableCaseFolding;\r\n\r\n        public bool EnableSkipWhitespace { get { return _enableSkipWhitespace; } set { _enableSkipWhitespace = value; } }\r\n        private bool _enableSkipWhitespace;\r\n\r\n        public int ErrorCode { get { return _errorCode; } }\r\n        private int _errorCode;\r\n\r\n        #endregion\r\n\r\n        #region Helper functions\r\n\r\n        internal static XmlParserResource ValidResource(PhpResource handle)\r\n        {\r\n            var xmlParserResource = handle as XmlParserResource;\r\n            if (xmlParserResource != null)\r\n            {\r\n                return xmlParserResource;\r\n            }\r\n            \r\n            PhpException.Throw(PhpError.Warning, Strings.invalid_xmlresource);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convert handler into <see cref=\"PhpCallback\"/> in XML-extension-manner.\r\n        /// </summary>\r\n        /// <param name=\"var\"></param>\r\n        /// <returns></returns>\r\n        internal PhpCallback ObjectToXmlCallback(object var)\r\n        {\r\n            // empty variable\r\n            if (PhpVariable.IsEmpty(var)) return null;\r\n\r\n            // function name given as string:\r\n            string name = PhpVariable.AsString(var);\r\n            if (name != null)\r\n                return (this.HandlerObject != null)\r\n                    ? new PhpCallback(this.HandlerObject, name)\r\n                    : new PhpCallback(name);            \r\n\r\n            // default PHP callback:\r\n            return Core.Convert.ObjectToCallback(var);\r\n        }\r\n\r\n        #endregion\r\n\r\n        public bool Parse(DTypeDesc caller, NamingContext context, string input, bool isFinal)\r\n        {            \r\n            // the problem is when isFinal == false\r\n            // XmlReader (more precisely XmlTextReaderImpl) synchronously waits for data from underlying stream when Read is called\r\n            // and there is no way to tell whether we have sufficient amount of data for the next Read call\r\n            // and if underlying stream ends prematurely, reader will get into Error state (so these simple workarounds are not possible)\r\n            \r\n            // current solution caches the data until isFinal == true and then performs the parsing\r\n            // this is not memory efficient (usually this method gets called in a cycle on small chunks to save memory)\r\n\r\n            // other way would be to let the reader wait on another thread (in thread pool), which would not be that bad\r\n            // since XmlParser gets freed eventually\r\n\r\n            // theoretically the best way would be to implement XmlReader, that would be able to recognize whether there is enough\r\n            // data, but we have not further analyzed this possibility since it seems to result in unappropriate amount of work\r\n\r\n            // yet another possible way is to use parser for inner element, and let it come into error state (not tested or thought through)\r\n            // this does not work since inner parser can only be created when the parser reads an element (not in the beginning)\r\n\r\n            if (isFinal)\r\n            {\r\n                if (input == null) input = string.Empty;\r\n                StringBuilder sb = new StringBuilder(input.Length);\r\n\r\n                if (_inputQueue != null)\r\n                {\r\n                    foreach (string s in _inputQueue)\r\n                        sb.Append(s);\r\n\r\n                    _inputQueue = null;\r\n                }\r\n\r\n                sb.Append(input);\r\n\r\n                return ParseInternal(caller, context, sb.ToString(), null, null);                \r\n            }\r\n            else\r\n            {\r\n                //just reset these values - we are still in the beginning\r\n                _lastLineNumber = 0;\r\n                _lastColumnNumber = 0;\r\n                _lastLineNumber = 0;\r\n\r\n                if (!string.IsNullOrEmpty(input))\r\n                {\r\n                    if (_inputQueue == null)\r\n                        _inputQueue = new Queue<string>();\r\n\r\n                    _inputQueue.Enqueue(input);\r\n                }\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        public bool ParseIntoStruct(DTypeDesc caller, NamingContext context, string input, PhpArray values, PhpArray indices)\r\n        {\r\n            return ParseInternal(caller, context, input, values, indices);\r\n        }\r\n\r\n        private bool ParseInternal(DTypeDesc caller, NamingContext context, string xml, PhpArray values, PhpArray indices)\r\n        {\r\n            StringReader stringReader = new StringReader(xml);\r\n            XmlTextReader reader = new XmlTextReader(stringReader);\r\n            Stack<ElementRecord> elementStack = new Stack<ElementRecord>();\r\n            TextRecord textChunk = null;\r\n\r\n            _startElementHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _endElementHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _defaultHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _startNamespaceDeclHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _endNamespaceDeclHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _characterDataHandler.BindOrBiteMyLegsOff(caller, context);\r\n            _processingInstructionHandler.BindOrBiteMyLegsOff(caller, context);\r\n\r\n            while (reader.ReadState == ReadState.Initial || reader.ReadState == ReadState.Interactive)\r\n            {\r\n                try\r\n                {\r\n                    reader.Read();\r\n                }\r\n                catch (XmlException)\r\n                {\r\n                    _lastLineNumber = reader.LineNumber;\r\n                    _lastColumnNumber = reader.LinePosition;\r\n                    _lastByteIndex = -1;\r\n                    _errorCode = (int)XmlParserError.XML_ERROR_GENERIC;\r\n                    return false;\r\n                }\r\n\r\n                //these are usually required\r\n                _lastLineNumber = reader.LineNumber;\r\n                _lastColumnNumber = reader.LinePosition;\r\n\r\n                // we cannot do this - we could if we had underlying stream, but that would require\r\n                // encoding string -> byte[] which is pointless\r\n\r\n\r\n                switch (reader.ReadState)\r\n                {\r\n                    case ReadState.Error:\r\n                        //report error\r\n                        break;\r\n                    case ReadState.EndOfFile:\r\n                        //end of file\r\n                        break;\r\n                    case ReadState.Closed:\r\n                    case ReadState.Initial:\r\n                        //nonsense\r\n                        Debug.Fail(null);\r\n                        break;\r\n                    case ReadState.Interactive:\r\n                        //debug step, that prints out the current state of the parser (pretty printed)\r\n                        //Debug_ParseStep(reader);\r\n                        ParseStep(reader, elementStack, ref textChunk, values, indices);\r\n                        break;\r\n                }\r\n\r\n                if (reader.ReadState == ReadState.Error || reader.ReadState == ReadState.EndOfFile || reader.ReadState == ReadState.Closed)\r\n                    break;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        private void ParseStep(XmlReader reader, Stack<ElementRecord> elementStack, ref TextRecord textChunk, PhpArray values, PhpArray indices)\r\n        {\r\n            string elementName;\r\n            bool emptyElement;\r\n            ElementRecord currentElementRecord = null;\r\n\r\n            switch (reader.NodeType)\r\n            {\r\n                case XmlNodeType.Element:\r\n                    elementName = reader.Name;\r\n                    emptyElement = reader.IsEmptyElement;\r\n                    PhpArray attributeArray = new PhpArray();\r\n\r\n                    if (_processNamespaces && elementName.IndexOf(\":\") >= 0)\r\n                    {\r\n                        string localName = elementName.Substring(elementName.IndexOf(\":\") + 1);\r\n                        elementName = reader.NamespaceURI + _namespaceSeparator + localName;\r\n                    }\r\n\r\n                    if (reader.MoveToFirstAttribute())\r\n                    {\r\n                        do\r\n                        {                           \r\n                            if (_processNamespaces && reader.Name.StartsWith(\"xmlns:\"))\r\n                            {\r\n                                string namespaceID = reader.Name.Substring(6);\r\n                                string namespaceUri = reader.Value;\r\n\r\n                                if (_startNamespaceDeclHandler.Callback != null)\r\n                                    _startNamespaceDeclHandler.Invoke(this, namespaceID, namespaceUri);\r\n\r\n                                continue;\r\n                            }\r\n\r\n                            attributeArray.Add(_enableCaseFolding ? reader.Name.ToUpperInvariant() : reader.Name, reader.Value);\r\n                        }\r\n                        while (reader.MoveToNextAttribute());   \r\n                    }\r\n\r\n                    // update current top of stack\r\n                    if (elementStack.Count != 0)\r\n                    {\r\n                        currentElementRecord = elementStack.Peek();\r\n\r\n                        UpdateValueAndIndexArrays(currentElementRecord, ref textChunk, values, indices, true);\r\n\r\n                        if (currentElementRecord.State == ElementState.Beginning)\r\n                            currentElementRecord.State = ElementState.Interior;\r\n                    }\r\n\r\n                    // push the element into the stack (needed for parse_into_struct)\r\n                    elementStack.Push(\r\n                        new ElementRecord() { \r\n                            ElementName = elementName,\r\n                            Level = reader.Depth, \r\n                            State = ElementState.Beginning, \r\n                            Attributes = (PhpArray)attributeArray.DeepCopy() \r\n                        });\r\n\r\n                    if (_startElementHandler.Callback != null)\r\n                        _startElementHandler.Invoke(this, _enableCaseFolding ? elementName.ToUpperInvariant() : elementName, attributeArray);\r\n                    else\r\n                        if (_defaultHandler.Callback != null) _defaultHandler.Invoke(this, \"\");\r\n\r\n                    if (emptyElement) goto case XmlNodeType.EndElement;    // and end the element immediately (<element/>, XmlNodeType.EndElement will not be called)\r\n                    \r\n                    break;\r\n\r\n\r\n                case XmlNodeType.EndElement:\r\n                    elementName = reader.Name;\r\n\r\n                    if (_processNamespaces && elementName.IndexOf(\":\") >= 0)\r\n                    {\r\n                        string localName = elementName.Substring(elementName.IndexOf(\":\") + 1);\r\n                        elementName = reader.NamespaceURI + _namespaceSeparator + localName;\r\n                    }\r\n\r\n                    // pop the top element record\r\n                    currentElementRecord = elementStack.Pop();\r\n\r\n                    UpdateValueAndIndexArrays(currentElementRecord, ref textChunk, values, indices, false);\r\n\r\n                    if (_endElementHandler.Callback != null)\r\n                        _endElementHandler.Invoke(this, _enableCaseFolding ? elementName.ToUpperInvariant() : elementName);\r\n                    else\r\n                        if (_defaultHandler.Callback != null) _defaultHandler.Invoke(this, \"\");\r\n                    break;\r\n\r\n\r\n                case XmlNodeType.Whitespace:\r\n                case XmlNodeType.Text:\r\n                case XmlNodeType.CDATA:\r\n                    if (textChunk == null)\r\n                    {\r\n                        textChunk = new TextRecord() { Text = reader.Value };\r\n                    }\r\n                    else\r\n                    {\r\n                        textChunk.Text += reader.Value;\r\n                    }\r\n\r\n                    if (_characterDataHandler.Callback != null)\r\n                        _characterDataHandler.Invoke(this, reader.Value);\r\n                    else\r\n                        if (_defaultHandler.Callback != null) _defaultHandler.Invoke(this, reader.Value);\r\n                    break;\r\n\r\n                case XmlNodeType.ProcessingInstruction:\r\n\r\n                    if (_processingInstructionHandler.Callback != null)\r\n                        _processingInstructionHandler.Invoke(this, reader.Name, reader.Value);\r\n                    else\r\n                        if (_defaultHandler.Callback != null) _defaultHandler.Invoke(this, string.Empty);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void UpdateValueAndIndexArrays(ElementRecord elementRecord, ref TextRecord textRecord, PhpArray values, PhpArray indices, bool middle)\r\n        {\r\n            // if we have no valid data in the middle, just end\r\n            if (middle && textRecord == null)\r\n                return;\r\n\r\n            if (!middle && elementRecord.State == ElementState.Interior)\r\n                UpdateValueAndIndexArrays(elementRecord, ref textRecord, values, indices, true);\r\n            \r\n            if (values != null)\r\n            {\r\n                PhpArray arrayRecord = new PhpArray();\r\n\r\n                arrayRecord.Add(\"tag\", elementRecord.ElementName);\r\n                arrayRecord.Add(\"level\", elementRecord.Level);\r\n\r\n                if (elementRecord.State == ElementState.Beginning)\r\n                    arrayRecord.Add(\"type\", middle ? \"open\" : \"complete\");\r\n                else\r\n                    arrayRecord.Add(\"type\", middle ? \"cdata\" : \"close\");\r\n\r\n                if (textRecord != null)\r\n                    arrayRecord.Add(\"value\", textRecord.Text);\r\n\r\n                if (elementRecord.State == ElementState.Beginning && elementRecord.Attributes.Count != 0)\r\n                    arrayRecord.Add(\"attributes\", elementRecord.Attributes);\r\n\r\n                values.Add(arrayRecord);\r\n\r\n                if (indices != null)\r\n                {\r\n                    PhpArray elementIndices;\r\n\r\n                    if (!indices.ContainsKey(elementRecord.ElementName))\r\n                    {\r\n                        elementIndices = new PhpArray();\r\n                        indices.Add(elementRecord.ElementName, elementIndices);\r\n                    }\r\n                    else\r\n                        elementIndices = (PhpArray)indices[elementRecord.ElementName];\r\n\r\n                    // add the max index (last inserted value)\r\n                    elementIndices.Add(values.MaxIntegerKey);\r\n                }\r\n            }\r\n\r\n            textRecord = null;\r\n        }\r\n\r\n        public XmlParserResource(Encoding outputEncoding, bool processNamespaces, string namespaceSeparator)\r\n            : base(\"XmlParser\")\r\n        {\r\n            _outputEncoding = outputEncoding;\r\n            _processNamespaces = processNamespaces;\r\n            _namespaceSeparator = namespaceSeparator != null ? namespaceSeparator.Substring(0, 1) : \":\";\r\n            _defaultHandler = new HandlerWrapper(this, \"default\");\r\n            _startElementHandler = new HandlerWrapper(this, \"startElement\");\r\n            _endElementHandler = new HandlerWrapper(this, \"endElement\");\r\n            _characterDataHandler = new HandlerWrapper(this, \"characterDataHandler\");\r\n            _startNamespaceDeclHandler = new HandlerWrapper(this, \"startNamespaceDeclHandler\");\r\n            _endNamespaceDeclHandler = new HandlerWrapper(this, \"endNamespaceDeclHandler\");\r\n            _processingInstructionHandler = new HandlerWrapper(this, \"processingInstructionHandler\");\r\n\r\n            _enableCaseFolding = true;\r\n            _enableSkipWhitespace = false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Xml/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetXml\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Xml/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetXml\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/AssemblyInfo.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing PHP.Core;\r\n\r\n[assembly: AssemblyTitle(\"Phalanger XmlDom\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - XmlDom\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Xml.XmlDomLibraryDescriptor), \"XmlDom\", new string[] { \"SimpleXML\", \"dom\", \"xsl\", \"libxml\", \"XMLReader\" })]\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomAttribute.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM attribute.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMAttr : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlAttribute XmlAttribute\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlAttribute)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate string _name;\r\n\t\tprivate string _value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the attribute.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeName : _name); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value of the attribute.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeValue : _value); }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis._value = PHP.Core.Convert.ObjectToString(value);\r\n\t\t\t\tif (IsAssociated) base.nodeValue = this._value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the namespace URI of the attribute.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.namespaceURI : null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.Attribute\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.Attribute; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the attribute.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.nodeName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value of this attribute\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object value\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (string)this.nodeValue; }\r\n\t\t\tset\r\n\t\t\t{ this.nodeValue = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Always returns <B>true</B> as in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\tpublic bool specified\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return true; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"DOMElement\"/> to which this attribute belongs.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object ownerElement\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? DOMNode.Create(XmlAttribute.OwnerElement) : null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object schemaTypeInfo\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMAttr()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMAttr(XmlAttribute/*!*/ xmlAttribute)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlAttribute = xmlAttribute;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMAttr(XmlAttribute);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDOMAttr copy = new DOMAttr();\r\n\t\t\t\tcopy.__construct(this._name, this._value);\r\n\t\t\t\treturn copy;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Initializes a new <see cref=\"DOMAttr\"/> object.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct(string name, [Optional] string value)\r\n\t\t{\r\n\t\t\t// just save up the name and value for later XmlAttribute construction\r\n\t\t\tthis._name = name;\r\n\t\t\tthis._value = value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal override void Associate(XmlDocument/*!*/ document)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlAttribute attr = document.CreateAttribute(_name);\r\n\t\t\t\tif (_value != null) attr.Value = _value;\r\n\r\n\t\t\t\tXmlAttribute = attr;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if attribute is a defined ID.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object isId()\r\n\t\t{\r\n\t\t\tIXmlSchemaInfo schema_info = XmlNode.SchemaInfo;\r\n\t\t\tif (schema_info != null)\r\n\t\t\t{\r\n\t\t\t\treturn (schema_info.SchemaType.TypeCode == XmlTypeCode.Id);\r\n\t\t\t}\r\n\t\t\telse return false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomCharacterData.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n    /// <summary>\r\n    /// DOM character data.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public partial class DOMCharacterData : DOMNode\r\n    {\r\n        #region Fields and Properties\r\n\r\n        protected internal XmlCharacterData XmlCharacterData\r\n        {\r\n            get\r\n            { return (XmlCharacterData)XmlNode; }\r\n            set\r\n            { XmlNode = value; }\r\n        }\r\n\r\n        protected virtual string dataImpl\r\n        {\r\n            get\r\n            {\r\n                return XmlCharacterData.Data;\r\n            }\r\n            set\r\n            {\r\n                XmlCharacterData.Data = value;\r\n            }\r\n        }\r\n\r\n        protected virtual int dataLengthImpl\r\n        {\r\n            get\r\n            {\r\n                return XmlCharacterData.Length;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns or sets the data of the node.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public object data\r\n        {\r\n            get\r\n            {\r\n                return this.dataImpl;\r\n            }\r\n            set\r\n            {\r\n                this.dataImpl = Core.Convert.ObjectToString(value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the length of the data in characters.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public int length\r\n        {\r\n            get\r\n            {\r\n                return this.dataLengthImpl;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public DOMCharacterData()\r\n            : base(ScriptContext.CurrentContext, true)\r\n        { }\r\n\r\n        protected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n        {\r\n            return new DOMCharacterData();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region String operations\r\n\r\n        /// <summary>\r\n        /// Retrieves a substring of the full string from the specified range.\r\n        /// </summary>\r\n        /// <param name=\"offset\">The position within the string to start retrieving.</param>\r\n        /// <param name=\"count\">The number of characters to retrieve.</param>\r\n        /// <returns>The substring corresponding to the specified range or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public object substringData(int offset, int count)\r\n        {\r\n            if (offset < 0 || count < 0 || offset > XmlCharacterData.Length)\r\n            {\r\n                DOMException.Throw(ExceptionCode.IndexOutOfBounds);\r\n                return false;\r\n            }\r\n\r\n            return XmlCharacterData.Substring(offset, count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Appends the specified string to the end of the character data of the node.\r\n        /// </summary>\r\n        /// <param name=\"arg\">The string to insert into the existing string.</param>\r\n        /// <returns><B>True</B>.</returns>\r\n        [PhpVisible]\r\n        public bool appendData(string arg)\r\n        {\r\n            XmlCharacterData.AppendData(arg);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inserts the specified string at the specified character offset. \r\n        /// </summary>\r\n        /// <param name=\"offset\">The position within the string to insert the supplied string data.</param>\r\n        /// <param name=\"arg\">The string data that is to be inserted into the existing string.</param>\r\n        /// <returns><B>True</B> or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public bool insertData(int offset, string arg)\r\n        {\r\n            if (offset < 0 || offset > XmlCharacterData.Length)\r\n            {\r\n                DOMException.Throw(ExceptionCode.IndexOutOfBounds);\r\n                return false;\r\n            }\r\n\r\n            XmlCharacterData.InsertData(offset, arg);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes a range of characters from the node.\r\n        /// </summary>\r\n        /// <param name=\"offset\">The position within the string to start deleting.</param>\r\n        /// <param name=\"count\">The number of characters to delete.</param>\r\n        /// <returns><B>True</B> or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public bool deleteData(int offset, int count)\r\n        {\r\n            if (offset < 0 || count < 0 || offset > XmlCharacterData.Length)\r\n            {\r\n                DOMException.Throw(ExceptionCode.IndexOutOfBounds);\r\n                return false;\r\n            }\r\n\r\n            XmlCharacterData.DeleteData(offset, count);\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces the specified number of characters starting at the specified offset with the specified string.\r\n        /// </summary>\r\n        /// <param name=\"offset\">The position within the string to start replacing.</param>\r\n        /// <param name=\"count\">The number of characters to replace.</param>\r\n        /// <param name=\"arg\">The new data that replaces the old string data.</param>\r\n        /// <returns><B>True</B> or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public bool replaceData(int offset, int count, string arg)\r\n        {\r\n            if (offset < 0 || count < 0 || offset > length)\r\n            {\r\n                DOMException.Throw(ExceptionCode.IndexOutOfBounds);\r\n                return false;\r\n            }\r\n\r\n            XmlCharacterData.ReplaceData(offset, count, arg);\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// DOM text.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public partial class DOMText : DOMCharacterData\r\n    {\r\n        #region Fields and Properties\r\n\r\n        protected internal XmlText XmlText\r\n        {\r\n            get\r\n            { return (XmlText)XmlNode; }\r\n            set\r\n            { XmlNode = value; }\r\n        }\r\n\r\n        protected string _value;\r\n\r\n        protected override string dataImpl\r\n        {\r\n            get\r\n            {\r\n                return IsAssociated ? base.dataImpl : _value;\r\n            }\r\n            set\r\n            {\r\n                if (IsAssociated)\r\n                    base.dataImpl = value;\r\n                \r\n                this._value = value;\r\n            }\r\n        }\r\n\r\n        protected override int dataLengthImpl\r\n        {\r\n            get\r\n            {\r\n                return IsAssociated ? base.dataLengthImpl : (this._value != null ? this._value.Length : 0);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns &quot;#text&quot;.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override string nodeName\r\n        {\r\n            get\r\n            { return \"#text\"; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns or sets the text.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override object nodeValue\r\n        {\r\n            get\r\n            { return this.dataImpl; }\r\n            set\r\n            {\r\n                this._value = PHP.Core.Convert.ObjectToString(value);\r\n                if (IsAssociated) base.nodeValue = this._value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns <B>null</B>.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override string namespaceURI\r\n        {\r\n            get\r\n            { return null; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the type of the node (<see cref=\"NodeType.Text\"/>).\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override object nodeType\r\n        {\r\n            get\r\n            { return (int)NodeType.Text; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the concatenated values of the node and all its child nodes.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public string wholeText\r\n        {\r\n            get\r\n            { return this.dataImpl; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public DOMText()\r\n        { }\r\n\r\n        internal DOMText(XmlText/*!*/ xmlText)\r\n        {\r\n            this.XmlText = xmlText;\r\n        }\r\n\r\n        internal static DOMText CreateDOMText(string value)\r\n        {\r\n            DOMText copy = new DOMText();\r\n            copy.__construct(value);\r\n            return copy;\r\n        }\r\n\r\n        protected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n        {\r\n            if (IsAssociated) return new DOMText(XmlText);\r\n            else\r\n            {\r\n                return CreateDOMText(_value);\r\n            }\r\n        }\r\n\r\n        [PhpVisible]\r\n        public virtual void __construct([Optional] string value)\r\n        {\r\n            this._value = value ?? string.Empty;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Hierarchy\r\n\r\n        protected internal override void Associate(XmlDocument/*!*/ document)\r\n        {\r\n            if (!IsAssociated)\r\n            {\r\n                XmlText = document.CreateTextNode(_value);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region String operations\r\n\r\n        /// <summary>\r\n        /// Splits the node into two nodes at the specified offset, keeping both in the tree as siblings.\r\n        /// </summary>\r\n        /// <param name=\"offset\">The offset at which to split the node.</param>\r\n        /// <returns>The new node.</returns>\r\n        [PhpVisible]\r\n        public object splitText(int offset)\r\n        {\r\n            if (offset < 0 || offset > this.dataLengthImpl) return false;\r\n\r\n            if (IsAssociated)\r\n                return XmlText.SplitText(offset);\r\n            else\r\n                return CreateDOMText(dataImpl.Substring(offset));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether this text node is empty / whitespace only.\r\n        /// </summary>\r\n        /// <returns><B>True</B> or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public bool isWhitespaceInElementContent()\r\n        {\r\n            return IsBlankNode();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether this text node is empty / whitespace only.\r\n        /// </summary>\r\n        /// <returns><B>True</B> or <B>false</B>.</returns>\r\n        [PhpVisible]\r\n        public bool isElementContentWhitespace()\r\n        {\r\n            return IsBlankNode();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Not implemented in PHP 5.1.6.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public void replaceWholeText(string context)\r\n        {\r\n            PhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n        }\r\n\r\n        private bool IsBlankNode()\r\n        {\r\n            string text = nodeValue as string;\r\n            if (text == null) return false;\r\n\r\n            for (int i = 0; i < text.Length; i++)\r\n            {\r\n                if (!Char.IsWhiteSpace(text, i)) return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// DOM character data section.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public partial class DOMCdataSection : DOMText\r\n    {\r\n        #region Fields and Properties\r\n\r\n        protected internal XmlCDataSection XmlCDataSection\r\n        {\r\n            get\r\n            { return (XmlCDataSection)XmlNode; }\r\n            set\r\n            { XmlNode = value; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns &quot;#cdata-section&quot;.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override string nodeName\r\n        {\r\n            get\r\n            { return \"#cdata-section\"; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the type of the node (<see cref=\"NodeType.CharacterDataSection\"/>).\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override object nodeType\r\n        {\r\n            get\r\n            { return (int)NodeType.CharacterDataSection; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public DOMCdataSection()\r\n        { }\r\n\r\n        internal DOMCdataSection(XmlCDataSection/*!*/ xmlCDataSection)\r\n        {\r\n            this.XmlCDataSection = xmlCDataSection;\r\n        }\r\n\r\n        protected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n        {\r\n            if (IsAssociated) return new DOMCdataSection(XmlCDataSection);\r\n            else\r\n            {\r\n                DOMCdataSection copy = new DOMCdataSection();\r\n                copy.__construct(this._value);\r\n                return copy;\r\n            }\r\n        }\r\n\r\n        [PhpVisible]\r\n        public override void __construct(string value)\r\n        {\r\n            base.__construct(value);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Hierarchy\r\n\r\n        protected internal override void Associate(XmlDocument/*!*/ document)\r\n        {\r\n            if (!IsAssociated)\r\n            {\r\n                XmlCDataSection = document.CreateCDataSection(_value);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    /// <summary>\r\n    /// DOM comment.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public partial class DOMComment : DOMCharacterData\r\n    {\r\n        #region Fields and Properties\r\n\r\n        protected internal XmlComment XmlComment\r\n        {\r\n            get\r\n            { return (XmlComment)XmlNode; }\r\n            set\r\n            { XmlNode = value; }\r\n        }\r\n\r\n        private string _value;\r\n\r\n        /// <summary>\r\n        /// Returns &quot;#comment&quot;.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override string nodeName\r\n        {\r\n            get\r\n            { return \"#comment\"; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns or sets the text.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override object nodeValue\r\n        {\r\n            get\r\n            { return (IsAssociated ? base.nodeValue : _value); }\r\n            set\r\n            {\r\n                this._value = PHP.Core.Convert.ObjectToString(value);\r\n                if (IsAssociated) base.nodeValue = this._value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns <B>null</B>.\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override string namespaceURI\r\n        {\r\n            get\r\n            { return null; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the type of the node (<see cref=\"NodeType.Comment\"/>).\r\n        /// </summary>\r\n        [PhpVisible]\r\n        public override object nodeType\r\n        {\r\n            get\r\n            { return (int)NodeType.Comment; }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Construction\r\n\r\n        public DOMComment()\r\n        { }\r\n\r\n        internal DOMComment(XmlComment/*!*/ xmlComment)\r\n        {\r\n            this.XmlComment = xmlComment;\r\n        }\r\n\r\n        protected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n        {\r\n            if (IsAssociated) return new DOMComment(XmlComment);\r\n            else\r\n            {\r\n                DOMComment copy = new DOMComment();\r\n                copy.__construct(this._value);\r\n                return copy;\r\n            }\r\n        }\r\n\r\n        [PhpVisible]\r\n        public void __construct([Optional] string value)\r\n        {\r\n            this._value = value;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Hierarchy\r\n\r\n        protected internal override void Associate(XmlDocument/*!*/ document)\r\n        {\r\n            if (!IsAssociated)\r\n            {\r\n                XmlComment = document.CreateComment(_value);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomCollections.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM node list.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNodeList : IEnumerable<KeyValuePair<object, object>>\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate List<IXmlDomNode>/*!*/ list;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the number of nodes in the list.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic int length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return list.Count; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMNodeList()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tlist = new List<IXmlDomNode>();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Item access\r\n\r\n\t\tinternal void AppendNode(IXmlDomNode/*!*/ node)\r\n\t\t{\r\n\t\t\tDebug.Assert(node != null);\r\n\t\t\tlist.Add(node);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a node specified by an index.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"index\">The index.</param>\r\n\t\t/// <returns>The node or <B>NULL</B> if the <paramref name=\"index\"/> is invalid.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic IXmlDomNode item(int index)\r\n\t\t{\r\n\t\t\tif (index < 0 || index >= list.Count) return null;\r\n\t\t\treturn list[index];\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable<KeyValuePair<object,object>> Members\r\n\r\n\t\tIEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()\r\n\t\t{\r\n\t\t\tint count = list.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tyield return new KeyValuePair<object, object>(i, list[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\tint count = list.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tyield return new DictionaryEntry(i, list[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM named node map.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNamedNodeMap : IEnumerable<KeyValuePair<object, object>>\r\n\t{\r\n\t\t#region MapKey\r\n\r\n\t\tprivate struct MapKey : IEquatable<MapKey>\r\n\t\t{\r\n\t\t\tpublic readonly string NamespaceUri;\r\n\t\t\tpublic readonly string/*!*/ LocalName;\r\n\r\n\t\t\tpublic MapKey(string namespaceUri, string/*!*/ localName)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(localName != null);\r\n\r\n\t\t\t\tthis.NamespaceUri = namespaceUri;\r\n\t\t\t\tthis.LocalName = localName;\r\n\t\t\t}\r\n\r\n\t\t\tpublic override int GetHashCode()\r\n\t\t\t{\r\n\t\t\t\tint code = LocalName.GetHashCode();\r\n\t\t\t\tif (NamespaceUri != null) code ^= NamespaceUri.GetHashCode();\r\n\t\t\t\treturn code;\r\n\t\t\t}\r\n\r\n\t\t\t#region IEquatable<MapKey> Members\r\n\r\n\t\t\tpublic bool Equals(MapKey other)\r\n\t\t\t{\r\n\t\t\t\treturn (NamespaceUri == other.NamespaceUri && LocalName == other.LocalName);\r\n\t\t\t}\r\n\r\n\t\t\t#endregion\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate OrderedHashtable<MapKey>/*!*/ map;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the number of nodes in the map.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object length\r\n\t\t{\r\n\t\t\tget { return map.Count; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMNamedNodeMap()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tmap = new OrderedHashtable<MapKey>();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Item access\r\n\r\n\t\tinternal void AddNode(IXmlDomNode/*!*/ node)\r\n\t\t{\r\n\t\t\tDebug.Assert(node != null);\r\n\r\n\t\t\tDOMNode domNode = node as DOMNode;\r\n\t\t\tif (domNode != null)\r\n\t\t\t{\r\n\t\t\t\tmap.Add(new MapKey(domNode.namespaceURI, domNode.localName), domNode);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmap.Add(new MapKey(node.UnderlyingObject.NamespaceURI, node.UnderlyingObject.LocalName), node);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a node specified by name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The (local) name of the node to retrieve.</param>\r\n\t\t/// <returns>A node with the specified (local) node name or <B>null</B> if no node is found.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getNamedItem(string name)\r\n\t\t{\r\n\t\t\tif (name == null) return null;\r\n\r\n\t\t\t// try null namespace first\r\n\t\t\tobject item;\r\n\t\t\tif (map.TryGetValue(new MapKey(null, name), out item)) return item;\r\n\t\t\t\r\n\t\t\t// iterate and take the first that fits\r\n\t\t\tforeach (KeyValuePair<MapKey, object> pair in map)\r\n\t\t\t{\r\n\t\t\t\tif (pair.Key.LocalName == name) return pair.Value;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setNamedItem(DOMNode item)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void removeNamedItem(string name)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a node specified by an index.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"index\">The index.</param>\r\n\t\t/// <returns>The node or <B>null</B> if <paramref name=\"index\"/> is invalid.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object item(int index)\r\n\t\t{\r\n\t\t\tif (index < 0 || index >= map.Count) return null;\r\n\r\n\t\t\tOrderedHashtable<MapKey>.Enumerator enumerator = map.GetEnumerator();\r\n\t\t\tfor (int i = 0; i <= index; i++)\r\n\t\t\t{\r\n\t\t\t\tenumerator.MoveNext();\r\n\t\t\t}\r\n\t\t\treturn enumerator.Current.Value;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Retrieves a node specified by local name and namespace URI.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The local name.</param>\r\n\t\t/// <returns>A node with the specified local name and namespace URI, or <B>null</B> if no node is found.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getNamedItemNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tif (localName == null) return null;\r\n\r\n\t\t\tobject item;\r\n\t\t\tif (map.TryGetValue(new MapKey(namespaceUri, localName), out item)) return item;\r\n\t\t\telse return null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setNamedItemNS(DOMNode item)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void removeNamedItemNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable<KeyValuePair<object,object>> Members\r\n\r\n\t\tIEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<MapKey, object> pair in map)\r\n\t\t\t{\r\n\t\t\t\tyield return new KeyValuePair<object, object>(pair.Key.LocalName, pair.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<MapKey, object> pair in map)\r\n\t\t\t{\r\n\t\t\t\tyield return new DictionaryEntry(pair.Key.LocalName, pair.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM string list. Not implemented in PHP 5.1.6.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMStringList\r\n\t{\r\n\t\t#region Fields and Properies\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Methods\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void item(int index)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM name list. Not implemented in PHP 5.1.6.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNameList\r\n\t{\r\n\t\t#region Fields and Properies\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Methods\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void getName(int index)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void getNamespaceURI(int index)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM implementation list. Not implemented in PHP 5.1.6.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMImplementationList\r\n\t{\r\n\t\t#region Fields and Properies\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object length\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Methods\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void item(int index)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM string extend. Not implemented in PHP 5.1.6.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMStringExtend\r\n\t{\r\n\t\t#region Methods\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void findOffset16(int offset16)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void findOffset32(int offset32)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomDocument.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Xml.XPath;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM document.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMDocument : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlDocument XmlDocument\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlDocument)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate bool _formatOutput;\r\n\t\tprivate bool _validateOnParse;\r\n        internal bool _isHtmlDocument;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns &quot;#document&quot;.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return \"#document\"; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.Document\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.Document; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the node containing the DOCTYPE declaration.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object doctype\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tXmlDocumentType doc_type = XmlDocument.DocumentType;\r\n\t\t\t\treturn (doc_type == null ? null : DOMNode.Create(doc_type));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the DOM implementation.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object implementation\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return new DOMImplementation(); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the root element of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object documentElement\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tXmlElement root = XmlDocument.DocumentElement;\r\n\t\t\t\treturn (root == null ? null : DOMNode.Create(root));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the encoding of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object actualEncoding\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.encoding; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the encoding of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object xmlEncoding\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.encoding; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or set the encoding of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object encoding\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\tif (decl != null) return decl.Encoding;\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tstring enc = PHP.Core.Convert.ObjectToString(value);\r\n\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\tif (decl != null) decl.Encoding = enc;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdecl = XmlDocument.CreateXmlDeclaration(\"1.0\", enc, null);\r\n\t\t\t\t\tXmlDocument.InsertBefore(decl, XmlDocument.FirstChild);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the standalone flag of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object xmlStandalone\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.standalone; }\r\n\t\t\tset\r\n\t\t\t{ this.standalone = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the standalone flag of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object standalone\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\treturn (decl == null || (decl.Standalone != \"no\"));\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tstring stand = (PHP.Core.Convert.ObjectToBoolean(value) ? \"yes\" : \"no\");\r\n\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\tif (decl != null) decl.Standalone = stand;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdecl = XmlDocument.CreateXmlDeclaration(\"1.0\", null, stand);\r\n\t\t\t\t\tXmlDocument.InsertBefore(decl, XmlDocument.FirstChild);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the XML version of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object xmlVersion\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.version; }\r\n\t\t\tset\r\n\t\t\t{ this.version = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the XML version of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object version\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\treturn (decl == null ? \"1.0\" : decl.Version);\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tstring ver = PHP.Core.Convert.ObjectToString(value);\r\n\r\n\t\t\t\tXmlDeclaration decl = GetXmlDeclaration();\r\n\t\t\t\tif (decl != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tXmlDeclaration new_decl = XmlDocument.CreateXmlDeclaration(ver, decl.Encoding, decl.Standalone);\r\n\t\t\t\t\tXmlDocument.ReplaceChild(new_decl, decl);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdecl = XmlDocument.CreateXmlDeclaration(ver, null, null);\r\n\t\t\t\t\tXmlDocument.InsertBefore(decl, XmlDocument.FirstChild);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>true</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object strictErrorChecking\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return true; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the base URI of this document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object documentURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlDocument.BaseURI; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object config\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets whether XML is formatted by <see cref=\"save(string,int)\"/> and <see cref=\"saveXML(DOMNode)\"/>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object formatOutput\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return _formatOutput; }\r\n\t\t\tset\r\n\t\t\t{ _formatOutput = PHP.Core.Convert.ObjectToBoolean(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns of sets whether XML is validated against schema by <see cref=\"load(DOMDocument,string,int)\"/> and\r\n\t\t/// <see cref=\"loadXML(DOMDocument,string,int)\"/>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object validateOnParse\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return _validateOnParse; }\r\n\t\t\tset\r\n\t\t\t{ _validateOnParse = PHP.Core.Convert.ObjectToBoolean(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>false</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object resolveExternals\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return false; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets whether whitespace should be preserved by this XML document.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object preserveWhiteSpace\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlDocument.PreserveWhitespace; }\r\n\t\t\tset\r\n\t\t\t{ XmlDocument.PreserveWhitespace = PHP.Core.Convert.ObjectToBoolean(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>false</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object recover\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return false; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>false</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object substituteEntities\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return false; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMDocument()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlDocument = new XmlDocument();\r\n\t\t\tthis.XmlDocument.PreserveWhitespace = true;\r\n\t\t}\r\n\r\n\t\tinternal DOMDocument(XmlDocument/*!*/ xmlDocument)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlDocument = xmlDocument;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\treturn new DOMDocument(XmlDocument);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual void __construct([Optional] string version, [Optional] string encoding)\r\n\t\t{\r\n\t\t\t// append the corresponding XML declaration to the document\r\n\t\t\tif (version == null) version = \"1.0\";\r\n\t\t\tXmlDocument.AppendChild(XmlDocument.CreateXmlDeclaration(\"1.0\", encoding, String.Empty));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Node factory\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an element with the specified name and inner text.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"tagName\">The qualified name of the element.</param>\r\n\t\t/// <param name=\"value\">The inner text (value) of the element.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMElement\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createElement(string tagName, [Optional] string value)\r\n\t\t{\r\n\t\t\tXmlElement element = XmlDocument.CreateElement(tagName);\r\n\t\t\tif (value != null) element.InnerText = value;\r\n\t\t\treturn new DOMElement(element);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new document fragment.\r\n\t\t/// </summary>\r\n\t\t/// <returns>A new <see cref=\"DOMDocumentFragment\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createDocumentFragment()\r\n\t\t{\r\n\t\t\tXmlDocumentFragment fragment = XmlDocument.CreateDocumentFragment();\r\n\t\t\treturn new DOMDocumentFragment(fragment);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new text node with the specified text.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The text for the text node.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMText\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createTextNode(string data)\r\n\t\t{\r\n\t\t\tXmlText text = XmlDocument.CreateTextNode(data);\r\n\t\t\treturn new DOMText(text);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a comment node containing the specified data.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The comment data.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMComment\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createComment(string data)\r\n\t\t{\r\n\t\t\tXmlComment comment = XmlDocument.CreateComment(data);\r\n\t\t\treturn new DOMComment(comment);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a CDATA section containing the specified data.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The content of the new CDATA section.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMCdataSection\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createCDATASection(string data)\r\n\t\t{\r\n\t\t\tXmlCDataSection cdata = XmlDocument.CreateCDataSection(data);\r\n\t\t\treturn new DOMCdataSection(cdata);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a processing instruction with the specified name and data.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"target\">The name of the processing instruction.</param>\r\n\t\t/// <param name=\"data\">The data for the processing instruction.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMProcessingInstruction\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createProcessingInstruction(string target, string data)\r\n\t\t{\r\n\t\t\tXmlProcessingInstruction pi = XmlDocument.CreateProcessingInstruction(target, data);\r\n\t\t\treturn new DOMProcessingInstruction(pi);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an attribute with the specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The qualified name of the attribute.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMAttr\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createAttribute(string name)\r\n\t\t{\r\n\t\t\tXmlAttribute attribute = XmlDocument.CreateAttribute(name);\r\n\t\t\treturn new DOMAttr(attribute);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an entity reference with the specified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The name of the entity reference.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMEntityReference\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createEntityReference(string name)\r\n\t\t{\r\n\t\t\tXmlEntityReference entref = XmlDocument.CreateEntityReference(name);\r\n\t\t\treturn new DOMEntityReference(entref);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an element with the specified namespace URI and qualified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI of the element.</param>\r\n\t\t/// <param name=\"qualifiedName\">The qualified name of the element.</param>\r\n\t\t/// <param name=\"value\">The inner text (value) of the element.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMElement\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createElementNS(string namespaceUri, string qualifiedName, [Optional] string value)\r\n\t\t{\r\n\t\t\tXmlElement element = XmlDocument.CreateElement(qualifiedName, namespaceUri);\r\n\t\t\tif (value != null) element.InnerText = value;\r\n\t\t\treturn new DOMElement(element);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an attribute with the specified namespace URI and qualified name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI of the attribute.</param>\r\n\t\t/// <param name=\"qualifiedName\">The qualified name of the attribute.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMAttr\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object createAttributeNS(string namespaceUri, string qualifiedName)\r\n\t\t{\r\n\t\t\tXmlAttribute attribute = XmlDocument.CreateAttribute(qualifiedName, namespaceUri);\r\n\t\t\treturn new DOMAttr(attribute);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Child elements\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets all descendant elements with the matching tag name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The tag name. Use <B>*</B> to return all elements within the element tree.</param>\r\n\t\t/// <returns>A <see cref=\"DOMNodeList\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getElementsByTagName(string name)\r\n\t\t{\r\n\t\t\tDOMNodeList list = new DOMNodeList();\r\n\r\n\t\t\t// enumerate elements in the default namespace\r\n\t\t\tforeach (XmlNode node in XmlDocument.GetElementsByTagName(name))\r\n\t\t\t{\r\n\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t}\r\n\r\n\t\t\t// enumerate all namespaces\r\n\t\t\tXPathNavigator navigator = XmlDocument.CreateNavigator();\r\n\t\t\tXPathNodeIterator iterator = navigator.Select(\"//namespace::*[not(. = ../../namespace::*)]\");\r\n\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tstring prefix = iterator.Current.Name;\r\n\t\t\t\tif (!String.IsNullOrEmpty(prefix) && prefix != \"xml\")\r\n\t\t\t\t{\r\n\t\t\t\t\t// enumerate elements in this namespace\r\n\t\t\t\t\tforeach (XmlNode node in XmlDocument.GetElementsByTagName(name, iterator.Current.Value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets all descendant elements with the matching namespace URI and local name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The local name. Use <B>*</B> to return all elements within the element tree.</param>\r\n\t\t/// <returns>A <see cref=\"DOMNodeList\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getElementsByTagNameNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tDOMNodeList list = new DOMNodeList();\r\n\r\n\t\t\tforeach (XmlNode node in XmlDocument.GetElementsByTagName(localName, namespaceUri))\r\n\t\t\t{\r\n\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not yet implemented.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void getElementById(string elementId)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\t/// <summary>\r\n\t\t/// Imports a node from another document to the current document.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"importedNode\">The node being imported.</param>\r\n\t\t/// <param name=\"deep\"><B>True</B> to perform deep clone; otheriwse <B>false</B>.</param>\r\n\t\t/// <returns>The imported <see cref=\"DOMNode\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object importNode(DOMNode importedNode, bool deep)\r\n\t\t{\r\n\t\t\tif (importedNode.IsAssociated)\r\n\t\t\t{\r\n\t\t\t\treturn DOMNode.Create(XmlDocument.ImportNode(importedNode.XmlNode, deep));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\timportedNode.Associate(XmlDocument);\r\n\t\t\t\treturn importedNode;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void adoptNode(DOMNode source)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Puts the entire XML document into a &quot;normal&quot; form.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void normalizeDocument()\r\n\t\t{\r\n\t\t\tXmlDocument.Normalize();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void renameNode(DOMNode node, string namespaceUri, string qualifiedName)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\tprivate XmlDeclaration GetXmlDeclaration()\r\n\t\t{\r\n\t\t\treturn (XmlNode.FirstChild as XmlDeclaration);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Load and Save\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads the XML document from the specified URL.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The <see cref=\"DOMDocument\"/> instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"fileName\">URL for the file containing the XML document to load.</param>\r\n\t\t/// <param name=\"options\">Undocumented.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMDocument\"/> or <B>false</B> if <paramref name=\"instance\"/>p\r\n\t\t/// is <B>null</B>, <B>true</B> or <B>false</B> otherwise.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic static object load([This] DOMDocument instance, string fileName, [Optional] int options)\r\n\t\t{\r\n\t\t\t// this method can be called both statically and via an instance\r\n\t\t\tbool static_call;\r\n\t\t\tif (instance == null)\r\n\t\t\t{\r\n\t\t\t\tstatic_call = true;\r\n\t\t\t\tinstance = new DOMDocument();\r\n\t\t\t}\r\n\t\t\telse static_call = false;\r\n\r\n            instance._isHtmlDocument = false;\r\n\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"rt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tif (instance._validateOnParse)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// create a validating XML reader\r\n\t\t\t\t\t\tXmlReaderSettings settings = new XmlReaderSettings();\r\n#pragma warning disable 618\r\n\t\t\t\t\t\tsettings.ValidationType = ValidationType.Auto;\r\n#pragma warning restore 618\r\n\r\n\t\t\t\t\t\tinstance.XmlDocument.Load(XmlReader.Create(stream.RawStream, settings));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse instance.XmlDocument.Load(stream.RawStream);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t{\r\n                    PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, fileName));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (IOException e)\r\n\t\t\t\t{\r\n                    PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, fileName));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn (static_call ? instance : (object)true);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads the XML document from the specified string.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The <see cref=\"DOMDocument\"/> instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"xmlString\">The XML string.</param>\r\n\t\t/// <param name=\"options\">Undocumented.</param>\r\n\t\t/// <returns>A new <see cref=\"DOMDocument\"/> or <B>false</B> if <paramref name=\"instance\"/>p\r\n\t\t/// is <B>null</B>, <B>true</B> or <B>false</B> otherwise.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic static object loadXML([This] DOMDocument instance, string xmlString, [Optional] int options)\r\n\t\t{\r\n\t\t\t// this method can be called both statically and via an instance\r\n\t\t\tbool static_call;\r\n\t\t\tif (instance == null)\r\n\t\t\t{\r\n\t\t\t\tstatic_call = true;\r\n\t\t\t\tinstance = new DOMDocument();\r\n\t\t\t}\r\n\t\t\telse static_call = false;\r\n\r\n            var result = instance.loadXMLInternal(xmlString, options, false);\r\n            return static_call ? instance : (object)result;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Loads provided XML string into this <see cref=\"DOMDocument\"/>.\r\n        /// </summary>\r\n        /// <param name=\"xmlString\">String representing XML document.</param>\r\n        /// <param name=\"options\">PHP options.</param>\r\n        /// <param name=\"isHtml\">Whether the <paramref name=\"xmlString\"/> represents XML generated from HTML document (then it may contain some invalid XML characters).</param>\r\n        /// <returns></returns>\r\n        private bool loadXMLInternal(string xmlString, int options, bool isHtml)\r\n        {\r\n            this._isHtmlDocument = isHtml;\r\n\r\n            var stream = new StringReader(xmlString);\r\n\r\n            try\r\n\t\t\t{\r\n                XmlReaderSettings settings = new XmlReaderSettings();\r\n\r\n                // validating XML reader\r\n                if (this._validateOnParse)\r\n#pragma warning disable 618\r\n                    settings.ValidationType = ValidationType.Auto;\r\n#pragma warning restore 618\r\n\r\n                // do not check invalid characters in HTML (XML)\r\n                if (isHtml)\r\n                    settings.CheckCharacters = false;\r\n\r\n                // load the document\r\n                this.XmlDocument.Load(XmlReader.Create(stream, settings));\r\n\r\n                // done\r\n                return true;\r\n\t\t\t}\r\n\t\t\tcatch (XmlException e)\r\n\t\t\t{\r\n                PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, null));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n                PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, null));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n        }\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Saves the XML document to the specified stream.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">The location of the file where the document should be saved.</param>\r\n\t\t/// <param name=\"options\">Unsupported.</param>\r\n\t\t/// <returns>The number of bytes written or <B>false</B> on error.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object save(string fileName, [Optional] int options)\r\n\t\t{\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"wt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\t// direct stream write indents\r\n\t\t\t\t\tif (_formatOutput) XmlDocument.Save(stream.RawStream);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tEncoding encoding = XmlDom.GetNodeEncoding(XmlNode);\r\n\r\n\t\t\t\t\t\tusing (XmlTextWriter writer = new XmlTextWriter(stream.RawStream, encoding))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tXmlDocument.Save(writer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t{\r\n                    PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, fileName));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (IOException e)\r\n\t\t\t\t{\r\n                    PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, fileName));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO:\r\n\t\t\t\treturn (stream.RawStream.CanSeek ? stream.RawStream.Position : 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Returns the string representation of this document.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node to dump (the entire document if <B>null</B>).</param>\r\n\t\t/// <returns>The string representation of the document / the specified node or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object saveXML([Optional] DOMNode node)\r\n\t\t{\r\n\t\t\tXmlNode xml_node;\r\n\r\n\t\t\tif (node == null) xml_node = XmlNode;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\txml_node = node.XmlNode;\r\n\t\t\t\tif (xml_node.OwnerDocument != XmlDocument && xml_node != XmlNode)\r\n\t\t\t\t{\r\n\t\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// determine output encoding\r\n\t\t\tEncoding encoding = XmlDom.GetNodeEncoding(xml_node);\r\n\r\n\t\t\tusing (MemoryStream stream = new MemoryStream())\r\n\t\t\t{\r\n\t\t\t\t// use a XML writer and set its Formatting proprty to Formatting.Indented\r\n\t\t\t\tusing (XmlTextWriter writer = new XmlTextWriter(stream, encoding))\r\n\t\t\t\t{\r\n\t\t\t\t\twriter.Formatting = (_formatOutput ? Formatting.Indented : Formatting.None);\r\n\t\t\t\t\txml_node.WriteTo(writer);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn new PhpBytes(stream.ToArray());\r\n\t\t\t}\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Processes HTML errors, if any.\r\n        /// </summary>\r\n        /// <param name=\"htmlDoc\"><see cref=\"HtmlAgilityPack.HtmlDocument\"/> instance to process errors from.</param>\r\n        /// <param name=\"filename\">HTML file name or <c>null</c> if HTML has been loaded from a string.</param>\r\n        private void CheckHtmlErrors(HtmlAgilityPack.HtmlDocument/*!*/htmlDoc, string filename)\r\n        {\r\n            Debug.Assert(htmlDoc != null);\r\n\r\n            foreach (var error in htmlDoc.ParseErrors)\r\n            {\r\n                switch (error.Code)\r\n                {\r\n                    case HtmlAgilityPack.HtmlParseErrorCode.EndTagNotRequired:\r\n                    case HtmlAgilityPack.HtmlParseErrorCode.TagNotOpened:\r\n                        break;\r\n                    default:\r\n                        PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, error.Line, error.LinePosition, \"(\" + error.Code.ToString() + \")\" + error.Reason, filename));\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n        /// Loads HTML from a string.\r\n\t\t/// </summary>\r\n        /// <param name=\"source\">\r\n        /// String containing HTML document.\r\n        /// </param>\r\n\t\t[PhpVisible]\r\n        public object loadHTML(string source)\r\n\t\t{\r\n            if (string.IsNullOrEmpty(source))\r\n                return false;\r\n\r\n            return loadHTML(new StringReader(source), null);\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Loads HTML from a file.\r\n        /// </summary>\r\n        /// <param name=\"sourceFile\">\r\n        /// Path to a file containing HTML document.\r\n        /// </param>\r\n\t\t[PhpVisible]\r\n\t\tpublic object loadHTMLFile(string sourceFile)\r\n\t\t{\r\n            using (PhpStream stream = PhpStream.Open(sourceFile, \"rt\"))\r\n            {\r\n                if (stream == null) return false;\r\n\r\n                return loadHTML(new StreamReader(stream.RawStream), sourceFile);\r\n            }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Load HTML DOM from given <paramref name=\"stream\"/>.\r\n        /// </summary>\r\n        private object loadHTML(TextReader stream, string filename)\r\n        {\r\n            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();\r\n\r\n            // setup HTML parser\r\n            htmlDoc.OptionOutputAsXml = true;\r\n            //htmlDoc.OptionOutputOriginalCase = true;  // NOTE: we need lower-cased names because of XPath queries\r\n            //htmlDoc.OptionFixNestedTags = true;\r\n            htmlDoc.OptionCheckSyntax = false;\r\n            htmlDoc.OptionUseIdAttribute = false;   // only needed when XPath navigator is used on htmlDoc\r\n            htmlDoc.OptionWriteEmptyNodes = true;\r\n            \r\n            // load HTML (from string or a stream)\r\n            htmlDoc.Load(stream);\r\n\r\n            CheckHtmlErrors(htmlDoc, filename);\r\n\r\n            // save to string as XML\r\n            using (StringWriter sw = new StringWriter())\r\n            {\r\n                htmlDoc.Save(sw);\r\n\r\n                // load as XML\r\n                return this.loadXMLInternal(sw.ToString(), 0, true);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (TODO: need an HTML parser for this).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object saveHTML()\r\n\t\t{\r\n            //TODO: use the HTML parse to same HTML\r\n            return saveXML(null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (TODO: need an HTML parser for this).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n        public object saveHTMLFile(string file)\r\n        {            \r\n            //TODO: use the HTML parse to same HTML\r\n            return save(file, 0);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region XInclude\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (TODO: need a XInclude implementation for this).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void xinclude([Optional] int options)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (System.Xml does not support post-load DTD validation).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void validate()\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.PostLoadDtdUnsupported);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Validates the document against the specified XML schema.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"schemaFile\">URL for the file containing the XML schema to load.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object schemaValidate(string schemaFile)\r\n\t\t{\r\n\t\t\tXmlSchema schema;\r\n\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(schemaFile, \"rt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tschema = XmlSchema.Read(stream.RawStream, null);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t{\r\n                    PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_WARNING, 0, 0, 0, e.Message, schemaFile));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (IOException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_ERROR, 0, 0, 0, e.Message, schemaFile));\r\n                    return false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tXmlDocument.Schemas.Add(schema);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tXmlDocument.Validate(null);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tXmlDocument.Schemas.Remove(schema);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Validates the document against the specified XML schema.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"schemaString\">The XML schema string.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object schemaValidateSource(string schemaString)\r\n\t\t{\r\n\t\t\tXmlSchema schema;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tschema = XmlSchema.Read(new System.IO.StringReader(schemaString), null);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException e)\r\n\t\t\t{\r\n                PhpLibXml.IssueXmlError(new PhpLibXml.XmlError(PhpLibXml.LIBXML_ERR_WARNING, 0, 0, 0, e.Message, null));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlDocument.Schemas.Add(schema);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tXmlDocument.Validate(null);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tXmlDocument.Schemas.Remove(schema);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (TODO: will need a Relax NG validator for this).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void relaxNGValidate(string schemaFile)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.RelaxNGUnsupported);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented (TODO: will need a Relax NG validator for this).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void relaxNGValidateSource(string schema)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.RelaxNGUnsupported);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM document fragment.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMDocumentFragment : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlDocumentFragment XmlDocumentFragment\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlDocumentFragment)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns &quot;#document-fragment&quot;.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return \"#document-fragment\"; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the namespace URI of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.namespaceURI : null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.DocumentFragment\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.DocumentFragment; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMDocumentFragment()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMDocumentFragment(XmlDocumentFragment/*!*/ xmlDocumentFragment)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlDocumentFragment = xmlDocumentFragment;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\treturn new DOMDocumentFragment(XmlDocumentFragment);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct()\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal override void Associate(XmlDocument document)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlDocumentFragment = document.CreateDocumentFragment();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Operations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Appends (well-formed) XML data to this document fragment.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The data to append.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object appendXML(string data)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tXmlDocumentFragment.InnerXml += data;\r\n\t\t\t}\r\n\t\t\tcatch (XmlException)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomElement.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.XPath;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM element.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMElement : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlElement XmlElement\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlElement)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate string _name;\r\n\t\tprivate string _value;\r\n\t\tprivate string _namespaceUri;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the element.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeName : _name); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value (inner text) of the element.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? XmlNode.InnerText : _value); }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis._value = PHP.Core.Convert.ObjectToString(value);\r\n\t\t\t\tif (IsAssociated) XmlNode.InnerText = this._value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the namespace URI of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.namespaceURI : _namespaceUri); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.Element\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.Element; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a map of attributes of this node (see <see cref=\"DOMNamedNodeMap\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object attributes\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMNamedNodeMap map = new DOMNamedNodeMap();\r\n\t\t\t\tif (IsAssociated)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (XmlAttribute attr in XmlNode.Attributes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIXmlDomNode node = Create(attr);\r\n\t\t\t\t\t\tif (node != null) map.AddNode(node);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the tag name.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object tagName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.nodeName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\tpublic object schemaTypeInfo\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMElement()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMElement(XmlElement/*!*/ xmlElement)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlElement = xmlElement;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMElement(XmlElement);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDOMElement copy = new DOMElement();\r\n\t\t\t\tcopy.__construct(this._name, this._value, this._namespaceUri);\r\n\t\t\t\treturn copy;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct(string name, [Optional] string value, [Optional] string namespaceUri)\r\n\t\t{\r\n\t\t\t// just save up the name, value, and ns URI for later XmlElement construction\r\n\t\t\tthis._name = name;\r\n\t\t\tthis._value = value;\r\n\t\t\tthis._namespaceUri = namespaceUri;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal override void Associate(XmlDocument/*!*/ document)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlElement elem = document.CreateElement(_name, _namespaceUri);\r\n\t\t\t\tif (_value != null) elem.InnerText = _value;\r\n\r\n\t\t\t\tXmlElement = elem;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Attributes\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the value of an attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The attribute name.</param>\r\n\t\t/// <returns>The attribute value or empty string.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getAttribute(string name)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlAttribute attr = XmlElement.Attributes[name];\r\n\t\t\t\tif (attr != null) return attr.Value;\r\n\t\t\t}\r\n\r\n\t\t\treturn String.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the value of an attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The attribute namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The attribute local name.</param>\r\n\t\t/// <returns>The attribute value or empty string.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getAttributeNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlAttribute attr = XmlElement.Attributes[localName, namespaceUri];\r\n\t\t\t\tif (attr != null) return attr.Value;\r\n\t\t\t}\r\n\r\n\t\t\treturn String.Empty;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of a attribute (creates new one if it does not exist).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The attribute name.</param>\r\n\t\t/// <param name=\"value\">The attribute value.</param>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object setAttribute(string name, string value)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[name];\r\n\t\t\tif (attr == null)\r\n\t\t\t{\r\n\t\t\t\tattr = XmlNode.OwnerDocument.CreateAttribute(name);\r\n\t\t\t\tXmlElement.Attributes.Append(attr);\r\n\t\t\t}\r\n\t\t\tattr.Value = value;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Sets the value of a attribute (creates new one if it does not exist).\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The attribute namespace URI.</param>\r\n\t\t/// <param name=\"qualifiedName\">The attribute qualified name.</param>\r\n\t\t/// <param name=\"value\">The attribute value.</param>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object setAttributeNS(string namespaceUri, string qualifiedName, string value)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// parse the qualified name\r\n\t\t\tstring local_name, prefix;\r\n\t\t\tXmlDom.ParseQualifiedName(qualifiedName, out prefix, out local_name);\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[local_name, namespaceUri];\r\n\t\t\tif (attr == null)\r\n\t\t\t{\r\n\t\t\t\tattr = XmlNode.OwnerDocument.CreateAttribute(qualifiedName, namespaceUri);\r\n\t\t\t\tXmlElement.Attributes.Append(attr);\r\n\t\t\t}\r\n\t\t\telse attr.Prefix = prefix;\r\n\r\n\t\t\tattr.Value = value;\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes an attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The attribute name.</param>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object removeAttribute(string name)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[name];\r\n\t\t\tif (attr != null) XmlElement.Attributes.Remove(attr);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes an attribute.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The attribute namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The attribute local name.</param>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> on failure.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object removeAttributeNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[localName, namespaceUri];\r\n\t\t\tif (attr != null) XmlElement.Attributes.Remove(attr);\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an attribute node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The attribute name.</param>\r\n\t\t/// <returns>The attribute or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getAttributeNode(string name)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlAttribute attr = XmlElement.Attributes[name];\r\n\t\t\t\tif (attr != null) return new DOMAttr(attr);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns an attribute node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The attribute namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The attribute local name.</param>\r\n\t\t/// <returns>The attribute or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getAttributeNodeNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlAttribute attr = XmlElement.Attributes[localName, namespaceUri];\r\n\t\t\t\tif (attr != null) return new DOMAttr(attr);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds new attribute node to the element.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"attribute\">The attribute node.</param>\r\n\t\t/// <returns>Old node if the attribute has been replaced or <B>null</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object setAttributeNode(DOMAttr attribute)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tattribute.Associate(XmlElement.OwnerDocument);\r\n\r\n\t\t\tif (XmlNode.OwnerDocument != attribute.XmlNode.OwnerDocument)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[attribute.nodeName];\r\n\t\t\tif (attr != null)\r\n\t\t\t{\r\n\t\t\t\tXmlElement.Attributes.Remove(attr);\r\n\t\t\t\tXmlElement.Attributes.Append(attribute.XmlAttribute);\r\n\t\t\t\treturn new DOMAttr(attr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tXmlElement.Attributes.Append(attribute.XmlAttribute);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds new attribute node to the element.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"attribute\">The attribute node.</param>\r\n\t\t/// <returns>Old node if the attribute has been replaced or <B>null</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object setAttributeNodeNS(DOMAttr attribute)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tattribute.Associate(XmlElement.OwnerDocument);\r\n\r\n\t\t\tif (XmlNode.OwnerDocument != attribute.XmlNode.OwnerDocument)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[attribute.localName, attribute.namespaceURI];\r\n\t\t\tif (attr != null)\r\n\t\t\t{\r\n\t\t\t\tXmlElement.Attributes.Remove(attr);\r\n\t\t\t\tXmlElement.Attributes.Append(attribute.XmlAttribute);\r\n\t\t\t\treturn new DOMAttr(attr);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tXmlElement.Attributes.Append(attribute.XmlAttribute);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes an attribute node from the element.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"attribute\">The attribute node.</param>\r\n\t\t/// <returns>Old node if the attribute has been removed or <B>null</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object removeAttributeNode(DOMAttr attribute)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlAttribute attr = XmlElement.Attributes[attribute.nodeName];\r\n\t\t\tif (attr == null)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.NotFound);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tXmlElement.Attributes.Remove(attr);\r\n\r\n\t\t\treturn attribute;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether an attribute exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The attribute name.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object hasAttribute(string name)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tif (XmlElement.Attributes[name] != null) return true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks whether an attribute exists.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The attribute namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The attribute local name.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object hasAttributeNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tif (XmlElement.Attributes[localName, namespaceUri] != null) return true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Child elements\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets all descendant elements with the matching tag name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\">The tag name. Use <B>*</B> to return all elements within the element tree.</param>\r\n\t\t/// <returns>A <see cref=\"DOMNodeList\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getElementsByTagName(string name)\r\n\t\t{\r\n\t\t\tDOMNodeList list = new DOMNodeList();\r\n\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\t// enumerate elements in the default namespace\r\n\t\t\t\tforeach (XmlNode node in XmlElement.GetElementsByTagName(name))\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// enumerate all namespaces\r\n\t\t\t\tXPathNavigator navigator = XmlElement.CreateNavigator();\r\n\t\t\t\tXPathNodeIterator iterator =navigator.Select(\"//namespace::*[not(. = ../../namespace::*)]\");\r\n\t\t\t\t\r\n\t\t\t\twhile (iterator.MoveNext())\r\n\t\t\t\t{\r\n\t\t\t\t\tstring prefix = iterator.Current.Name;\r\n\t\t\t\t\tif (!String.IsNullOrEmpty(prefix) && prefix != \"xml\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// enumerate elements in this namespace\r\n\t\t\t\t\t\tforeach (XmlNode node in XmlElement.GetElementsByTagName(name, iterator.Current.Value))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets all descendant elements with the matching namespace URI and local name.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <param name=\"localName\">The local name. Use <B>*</B> to return all elements within the element tree.</param>\r\n\t\t/// <returns>A <see cref=\"DOMNodeList\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getElementsByTagNameNS(string namespaceUri, string localName)\r\n\t\t{\r\n\t\t\tDOMNodeList list = new DOMNodeList();\r\n\r\n\t\t\tif (IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tforeach (XmlNode node in XmlElement.GetElementsByTagName(localName, namespaceUri))\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode dom_node = DOMNode.Create(node);\r\n\t\t\t\t\tif (dom_node != null) list.AppendNode(dom_node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Validation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setIdAttribute(string name, bool isId)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setIdAttributeNS(string namespaceUri, string localName, bool isId)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setIdAttributeNode(DOMAttr attribute, bool isId)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomEntity.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM entity.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMEntity : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlEntity XmlEntity\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlEntity)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.Entity\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.Entity; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the public identifier of this entity.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string publicId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlEntity.PublicId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the system identifier of this entity.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string systemId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlEntity.SystemId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the optional NDATA attribute.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string notationName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlEntity.NotationName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Always returns <B>null</B> as in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string actualEncoding\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Always returns <B>null</B> as in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string encoding\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Always returns <B>null</B> as in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string version\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMEntity()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMEntity(XmlEntity/*!*/ xmlEntity)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlEntity = xmlEntity;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMEntity(XmlEntity);\r\n\t\t\telse return new DOMEntity();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM entity reference.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMEntityReference : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlEntityReference XmlEntityReference\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlEntityReference)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate string _name;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the entity reference.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeName : _name); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t\tset\r\n\t\t\t{ }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <B>null</B>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.EntityReference\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.EntityReference; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMEntityReference()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMEntityReference(XmlEntityReference/*!*/ xmlEntityReference)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlEntityReference = xmlEntityReference;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMEntityReference(XmlEntityReference);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDOMEntityReference copy = new DOMEntityReference();\r\n\t\t\t\tcopy.__construct(this._name);\r\n\t\t\t\treturn copy;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct(string name)\r\n\t\t{\r\n\t\t\tthis._name = name;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal override void Associate(XmlDocument/*!*/ document)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlEntityReference = document.CreateEntityReference(_name);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomException.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t#region ExceptionCode\r\n\r\n\t/// <summary>\r\n\t/// Enumerates <see cref=\"DOMException\"/> codes.\r\n\t/// </summary>\r\n\tpublic enum ExceptionCode\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Index or size is negative, or greater than the allowed value. \r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INDEX_SIZE_ERR\")]\r\n\t\tIndexOutOfBounds = 1,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The specified range of text does not fit into a string.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOMSTRING_SIZE_ERR\")]\r\n\t\tStringTooLong = 2,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A node is inserted somewhere it doesn't belong.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_HIERARCHY_REQUEST_ERR\")]\r\n\t\tBadHierarchy = 3,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A node is used in a different document than the one that created it.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_WRONG_DOCUMENT_ERR\")]\r\n\t\tWrongDocument = 4,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An invalid or illegal character is specified, such as in a name.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INVALID_CHARACTER_ERR\")]\r\n\t\tInvalidCharacter = 5,\r\n\r\n\t\t/// <summary>\r\n\t\t/// Data is specified for a node which does not support data.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_NO_DATA_ALLOWED_ERR\")]\r\n\t\tDataNotAllowed = 6,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to modify an object where modifications are not allowed.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_NO_MODIFICATION_ALLOWED_ERR\")]\r\n\t\tDomModificationNotAllowed = 7,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to reference a node in a context where it does not exist.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_NOT_FOUND_ERR\")]\r\n\t\tNotFound = 8,\r\n\r\n\t\t/// <summary>\r\n\t\t/// The implementation does not support the requested type of object or operation.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_NOT_SUPPORTED_ERR\")]\r\n\t\tNotSupported = 9,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to add an attribute that is already in use elsewhere.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INUSE_ATTRIBUTE_ERR\")]\r\n\t\tAttributeInUse = 10,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to use an object that is not, or is no longer, usable.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INVALID_STATE_ERR\")]\r\n\t\tInvalidState = 11,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An invalid or illegal string is specified.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_SYNTAX_ERR\")]\r\n\t\tSyntaxError = 12,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to modify the type of the underlying object.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INVALID_MODIFICATION_ERR\")]\r\n\t\tModificationNotAllowed = 13,\r\n\r\n\t\t/// <summary>\r\n\t\t/// An attempt is made to create or change an object in a way which is incorrect with\r\n\t\t/// regard to namespaces.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_NAMESPACE_ERR\")]\r\n\t\tNamespaceError = 14,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A parameter or an operation is not supported by the underlying object.\r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_INVALID_ACCESS_ERR\")]\r\n\t\tInvalidAccess = 15,\r\n\r\n\t\t/// <summary>\r\n\t\t/// A call to a method such as <B>insertBefore</B> or <B>removeChild</B> would make the\r\n\t\t/// node invalid with respect to &quot;partial validity&quot;, this exception would be\r\n\t\t/// raised and the operation would not be done. \r\n\t\t/// </summary>\r\n\t\t[ImplementsConstant(\"DOM_VALIDATION_ERR\")]\r\n\t\tValidationError = 16\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// The exception thrown by the DOM extension.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic sealed partial class DOMException : PHP.Library.SPL.Exception\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate ExceptionCode _code;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the exception code.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic new object code\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)_code; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new instance (short constructor).\r\n\t\t/// </summary>\r\n\t\t[EditorBrowsable(EditorBrowsableState.Never)]\r\n\t\tpublic DOMException(ScriptContext context, bool newInstance)\r\n\t\t\t: base(context, newInstance)\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Throw\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws a <see cref=\"DOMException\"/> user exception with the given code.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"code\">The exception code.</param>\r\n\t\t/// <exception cref=\"PhpUserException\"/>\r\n\t\tinternal static void Throw(ExceptionCode code)\r\n\t\t{\r\n\t\t\tstring msg;\r\n\r\n\t\t\tswitch (code)\r\n\t\t\t{\r\n\t\t\t\tcase ExceptionCode.IndexOutOfBounds: msg = Resources.ErrorIndexOutOfBounds; break;\r\n\t\t\t\tcase ExceptionCode.StringTooLong: msg = Resources.ErrorStringTooLong; break;\r\n\t\t\t\tcase ExceptionCode.BadHierarchy: msg = Resources.ErrorBadHierarchy; break;\r\n\t\t\t\tcase ExceptionCode.WrongDocument: msg = Resources.ErrorWrongDocument; break;\r\n\t\t\t\tcase ExceptionCode.InvalidCharacter: msg = Resources.ErrorInvalidCharacter; break;\r\n\t\t\t\tcase ExceptionCode.DataNotAllowed: msg = Resources.ErrorDataNotAllowed; break;\r\n\t\t\t\tcase ExceptionCode.DomModificationNotAllowed: msg = Resources.ErrorDomModificationNotAllowed; break;\r\n\t\t\t\tcase ExceptionCode.NotFound: msg = Resources.ErrorNotFound; break;\r\n\t\t\t\tcase ExceptionCode.NotSupported: msg = Resources.ErrorNotSupported; break;\r\n\t\t\t\tcase ExceptionCode.AttributeInUse: msg = Resources.ErrorAttributeInUse; break;\r\n\t\t\t\tcase ExceptionCode.InvalidState: msg = Resources.ErrorInvalidState; break;\r\n\t\t\t\tcase ExceptionCode.SyntaxError: msg = Resources.ErrorSyntaxError; break;\r\n\t\t\t\tcase ExceptionCode.ModificationNotAllowed: msg = Resources.ErrorModificationNotAllowed; break;\r\n\t\t\t\tcase ExceptionCode.NamespaceError: msg = Resources.ErrorNamespaceError; break;\r\n\t\t\t\tcase ExceptionCode.InvalidAccess: msg = Resources.ErrorInvalidAccess; break;\r\n\t\t\t\tcase ExceptionCode.ValidationError: msg = Resources.ErrorValidationError; break;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new InvalidOperationException();\r\n\t\t\t}\r\n\r\n\t\t\tThrow(code, msg);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Throws a <see cref=\"DOMException\"/> user exception with the given code and message.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"code\">The exception code.</param>\r\n\t\t/// <param name=\"message\">The exception message.</param>\r\n\t\t/// <exception cref=\"PhpUserException\"/>\r\n\t\tinternal static void Throw(ExceptionCode code, string message)\r\n\t\t{\r\n\t\t\tScriptContext context = ScriptContext.CurrentContext;\r\n\r\n\t\t\tDOMException exception = new DOMException(context, true);\r\n\t\t\texception.__construct(context, message, (int)code);\r\n\t\t\texception._code = code;\r\n\r\n\t\t\tthrow new PhpUserException(exception);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomImplementation.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM implementation.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMImplementation\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlImplementation XmlImplementation;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMImplementation()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tXmlImplementation = new XmlImplementation();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Operations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic static void getFeature([This] DOMImplementation instance, string feature, string version)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Tests if this DOM implementation implements a specific feature.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The <see cref=\"DOMImplementation\"/> instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"feature\">The feature.</param>\r\n\t\t/// <param name=\"version\">The feature version.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic static object hasFeature([This] DOMImplementation instance, string feature, string version)\r\n\t\t{\r\n\t\t\tXmlImplementation impl = (instance != null ? instance.XmlImplementation : new XmlImplementation());\r\n\t\t\treturn impl.HasFeature(feature, version);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"DOMDocumentType\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The <see cref=\"DOMImplementation\"/> instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"qualifiedName\">Name of the document type.</param>\r\n\t\t/// <param name=\"publicId\">The public identifier of the document type.</param>\r\n\t\t/// <param name=\"systemId\">The system identifier of the document type.</param>\r\n\t\t/// <returns>The <see cref=\"DOMDocumentType\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic static object createDocumentType([This] DOMImplementation instance, string qualifiedName,\r\n\t\t\tstring publicId, string systemId)\r\n\t\t{\r\n\t\t\treturn new DOMDocumentType(qualifiedName, publicId, systemId);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"DOMDocument\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"instance\">The <see cref=\"DOMImplementation\"/> instance or <B>null</B>.</param>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI of the root element to create.</param>\r\n\t\t/// <param name=\"qualifiedName\">The qualified name of the document element.</param>\r\n\t\t/// <param name=\"docType\">The type of document to be created.</param>\r\n\t\t/// <returns>The <see cref=\"DOMDocument\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic static object createDocument([This] DOMImplementation instance, string namespaceUri,\r\n\t\t\tstring qualifiedName, [Nullable] DOMDocumentType docType)\r\n\t\t{\r\n\t\t\tXmlImplementation impl = (instance != null ? instance.XmlImplementation : new XmlImplementation());\r\n\t\t\tXmlDocument doc = impl.CreateDocument();\r\n\r\n\t\t\tif (docType != null)\r\n\t\t\t{\r\n\t\t\t\tif (!docType.IsAssociated) docType.Associate(doc);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdoc.AppendChild(docType.XmlNode);\r\n\t\t\tdoc.AppendChild(doc.CreateElement(qualifiedName, namespaceUri));\r\n\r\n\t\t\treturn new DOMDocument(doc);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM implementation source.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMImplementationSource\r\n\t{\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMImplementationSource()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Operations\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void getDomimplementation(string features)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void getDomimplementations(string features)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomMiscClasses.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM configuration (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMConfiguration\r\n\t{\r\n\t\t#region Operations\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void setParameter(string name, object value)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void getParameter(string name)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void canSetParameter(string name, object value)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM user data handler (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMUserDataHandler\r\n\t{\r\n\t\t#region Operations\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void handle(int operation, string key, object data, DOMNode src, DOMNode dst)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM locator (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMLocator\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object lineNumber\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object columnNumber\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object offset\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object relatedNode\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object uri\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// The DOM error (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMDomError\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object severity\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object message\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object type\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object relatedException\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object related_data\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object location\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM error handler (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMErrorHandler\r\n\t{\r\n\t\t#region Operations\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void handleError(DOMDomError error)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM type info (not implemented in PHP 5.1.6).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMTypeinfo\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object typeName\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object typeNamespace\r\n\t\t{\r\n\t\t\tget { return null; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomMiscNodes.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM document type.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMDocumentType : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlDocumentType XmlDocumentType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlDocumentType)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate string _qualifiedName;\r\n\t\tprivate string _publicId;\r\n\t\tprivate string _systemId;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.DocumentType\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.DocumentType; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object name\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.nodeName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a map of the entities declared by this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object entities\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMNamedNodeMap map = new DOMNamedNodeMap();\r\n\r\n\t\t\t\tforeach (XmlNode entity in XmlDocumentType.Entities)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(entity);\r\n\t\t\t\t\tif (node != null) map.AddNode(node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a map of the entities declared by this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object notations\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMNamedNodeMap map = new DOMNamedNodeMap();\r\n\r\n\t\t\t\tforeach (XmlNode notation in XmlDocumentType.Notations)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(notation);\r\n\t\t\t\t\tif (node != null) map.AddNode(node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the value of the public identifier of this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string publicId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlDocumentType.PublicId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of the system identifier on this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string systemId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlDocumentType.SystemId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the value of the DTD internal subset on this document type.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string internalSubset\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlDocumentType.InternalSubset; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMDocumentType()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMDocumentType(XmlDocumentType/*!*/ xmlDocumentType)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlDocumentType = xmlDocumentType;\r\n\t\t}\r\n\r\n\t\tinternal DOMDocumentType(string qualifiedName, string publicId, string systemId)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis._qualifiedName = qualifiedName;\r\n\t\t\tthis._publicId = publicId;\r\n\t\t\tthis._systemId = systemId;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMDocumentType(XmlDocumentType);\r\n\t\t\telse return new DOMDocumentType(this._qualifiedName, this._publicId, this._systemId);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal override void Associate(XmlDocument document)\r\n\t\t{\r\n\t\t\tif (!IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tXmlDocumentType = document.CreateDocumentType(_qualifiedName, _publicId, _systemId, null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM notation.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNotation : IXmlDomNode\r\n\t{\r\n\t\t#region IXmlDomNode Members\r\n\r\n\t\tXmlNode IXmlDomNode.UnderlyingObject\r\n\t\t{\r\n\t\t\tget { return XmlNotation; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate XmlNotation _xmlNotation;\r\n\t\tprotected internal XmlNotation XmlNotation\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_xmlNotation == null) DOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn _xmlNotation;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\t_xmlNotation = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected internal bool IsAssociated\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (_xmlNotation != null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the value of the public identifier on the notation declaration.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string publicId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNotation.PublicId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the value of the system identifier on the notation declaration.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string systemId\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNotation.SystemId; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the notation node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNotation.Name; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value of the notation node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNotation.Value; }\r\n\t\t\tset\r\n\t\t\t{ XmlNotation.Value = PHP.Core.Convert.ObjectToString(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the attributes of this notation node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object attributes\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMNamedNodeMap map = new DOMNamedNodeMap();\r\n\t\t\t\t\r\n\t\t\t\tforeach (XmlAttribute attr in XmlNotation.Attributes)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(attr);\r\n\t\t\t\t\tif (node != null) map.AddNode(node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn map;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMNotation()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMNotation(XmlNotation/*!*/ xmlNotation)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlNotation = xmlNotation;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMNotation(XmlNotation);\r\n\t\t\telse return new DOMNotation();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM processing instruction.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMProcessingInstruction : DOMNode\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XmlProcessingInstruction XmlProcessingInstruction\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (XmlProcessingInstruction)XmlNode; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode = value; }\r\n\t\t}\r\n\r\n\t\tprivate string _name;\r\n\t\tprivate string _value;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the processing instruction.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeName : _name); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value of the processing instruction.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.nodeValue : _value); }\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis._value = PHP.Core.Convert.ObjectToString(value);\r\n\t\t\t\tif (IsAssociated) base.nodeValue = this._value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the namespace URI of the processing instruction.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (IsAssociated ? base.namespaceURI : null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (<see cref=\"NodeType.ProcessingInstruction\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic override object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.ProcessingInstruction; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the target (name) of the processing instruction.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object target\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.nodeName; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the data (value) of the processing instruction.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object data\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return this.nodeValue; }\r\n\t\t\tset\r\n\t\t\t{ this.nodeValue = value; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMProcessingInstruction()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMProcessingInstruction(XmlProcessingInstruction/*!*/ xmlProcessingInstruction)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XmlProcessingInstruction = xmlProcessingInstruction;\r\n\t\t}\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return new DOMProcessingInstruction(XmlProcessingInstruction);\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tDOMProcessingInstruction copy = new DOMProcessingInstruction();\r\n\t\t\t\tcopy.__construct(this._name, this._value);\r\n\t\t\t\treturn copy;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct(string name, [Optional] string value)\r\n\t\t{\r\n\t\t\tthis._name = name;\r\n\t\t\tthis._value = value;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// DOM namespace node (unsupported).\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNameSpaceNode\r\n\t{\r\n\t\t#region Properties\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic string nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (int)NodeType.NamespaceDecl; }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic string prefix\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object ownerDocument\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object parentNode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMNameSpaceNode()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tprotected override PHP.Core.Reflection.DObject CloneObjectInternal(PHP.Core.Reflection.DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\treturn new DOMNameSpaceNode();\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomNode.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.Schema;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM node.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMNode : IXmlDomNode\r\n\t{\r\n\t\t#region IXmlDomNode Members\r\n\r\n\t\tXmlNode IXmlDomNode.UnderlyingObject\r\n\t\t{\r\n\t\t\tget { return XmlNode; }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate XmlNode _xmlNode;\r\n\t\tprotected internal XmlNode XmlNode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_xmlNode == null) DOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\t\treturn _xmlNode;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\t_xmlNode = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected internal bool IsAssociated\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return (_xmlNode != null); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the name of the node (exact meaning depends on the particular subtype).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual string nodeName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNode.Name; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the value of the node (exact meaning depends on the particular subtype).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual object nodeValue\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNode.Value; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode.Value = PHP.Core.Convert.ObjectToString(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the type of the node (to be overriden).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual object nodeType\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated) PhpException.Throw(PhpError.Warning, Resources.InvalidStateError);\r\n\t\t\t\telse PhpException.Throw(PhpError.Warning, Resources.InvalidNodeType);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the parent of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object parentNode\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn Create(XmlNode.ParentNode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns all children of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object childNodes\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tDOMNodeList list = new DOMNodeList();\r\n\t\t\t\tif (IsAssociated || GetType() == typeof(DOMNode))\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (XmlNode child in XmlNode.ChildNodes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIXmlDomNode node = Create(child);\r\n\t\t\t\t\t\tif (node != null) list.AppendNode(node);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn list;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the first child of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object firstChild\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn Create(XmlNode.FirstChild);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the last child of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object lastChild\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn Create(XmlNode.LastChild);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the previous sibling of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object previousSibling\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn Create(XmlNode.PreviousSibling);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the next sibling of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object nextSibling\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn Create(XmlNode.NextSibling);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns a map of attributes of this node (overriden in <see cref=\"DOMElement\"/>).\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual object attributes\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return null; }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// This function returns the document the current node belongs to.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object ownerDocument\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return Create(XmlNode.OwnerDocument); }\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Returns the namespace URI of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic virtual string namespaceURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tstring uri = XmlNode.NamespaceURI;\r\n\t\t\t\treturn (uri.Length == 0 ? null : uri);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the namespace prefix of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object prefix\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (IsAssociated) return XmlNode.Prefix;\r\n\t\t\t\t\r\n\t\t\t\tstring prefix, local_name;\r\n\t\t\t\tXmlDom.ParseQualifiedName(nodeName, out prefix, out local_name);\r\n\r\n\t\t\t\treturn prefix;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{ XmlNode.Prefix = PHP.Core.Convert.ObjectToString(value); }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the local name of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string localName\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (IsAssociated) return XmlNode.LocalName;\r\n\r\n\t\t\t\tstring prefix, local_name;\r\n\t\t\t\tXmlDom.ParseQualifiedName(nodeName, out prefix, out local_name);\r\n\r\n\t\t\t\treturn local_name;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the base URI of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string baseURI\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (!IsAssociated && GetType() != typeof(DOMNode)) return null;\r\n\t\t\t\treturn XmlNode.BaseURI;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns or sets the text content of the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object textContent\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return XmlNode.InnerText; }\r\n\t\t\tset\r\n\t\t\t{ XmlNode.InnerText = PHP.Core.Convert.ObjectToString(value); }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tinternal static IXmlDomNode Create(XmlNode xmlNode)\r\n\t\t{\r\n\t\t\tif (xmlNode == null) return null;\r\n\t\t\tswitch (xmlNode.NodeType)\r\n\t\t\t{\r\n\t\t\t\tcase XmlNodeType.Attribute: return new DOMAttr((XmlAttribute)xmlNode);\r\n\t\t\t\tcase XmlNodeType.SignificantWhitespace:\r\n                case XmlNodeType.Whitespace: return null;// TODO: new DOMText((XmlCharacterData)xmlNode); // also see XmlDocument.PreserveWhitespace\r\n\t\t\t\tcase XmlNodeType.CDATA: return new DOMCdataSection((XmlCDataSection)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Comment: return new DOMComment((XmlComment)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Document: return new DOMDocument((XmlDocument)xmlNode);\r\n\t\t\t\tcase XmlNodeType.DocumentFragment: return new DOMDocumentFragment((XmlDocumentFragment)xmlNode);\r\n\t\t\t\tcase XmlNodeType.DocumentType: return new DOMDocumentType((XmlDocumentType)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Element: return new DOMElement((XmlElement)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Entity: return new DOMEntity((XmlEntity)xmlNode);\r\n\t\t\t\tcase XmlNodeType.EntityReference: return new DOMEntityReference((XmlEntityReference)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Notation: return new DOMNotation((XmlNotation)xmlNode);\r\n\t\t\t\tcase XmlNodeType.ProcessingInstruction: return new DOMProcessingInstruction((XmlProcessingInstruction)xmlNode);\r\n\t\t\t\tcase XmlNodeType.Text: return new DOMText((XmlText)xmlNode);\r\n\t\t\t\t\r\n\t\t\t\tcase XmlNodeType.XmlDeclaration:\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprotected override DObject CloneObjectInternal(DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tDOMException.Throw(ExceptionCode.InvalidState);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Internal dump routine\r\n\r\n\t\tprivate IEnumerable<KeyValuePair<VariableName, AttributedValue>> PropertyIteratorHelper()\r\n\t\t{\r\n\t\t\treturn base.PropertyIterator();\r\n\t\t}\r\n\r\n\t\tprotected override IEnumerable<KeyValuePair<VariableName, AttributedValue>> PropertyIterator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<VariableName, AttributedValue> pair in PropertyIteratorHelper())\r\n\t\t\t{\r\n\t\t\t\t// filter out \"linking\" properties to avoid an endless dump :)\r\n\t\t\t\tswitch (pair.Key.ToString())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"parentNode\":\r\n\t\t\t\t\tcase \"childNodes\":\r\n\t\t\t\t\tcase \"firstChild\":\r\n\t\t\t\t\tcase \"lastChild\":\r\n\t\t\t\t\tcase \"previousSibling\":\r\n\t\t\t\t\tcase \"nextSibling\":\r\n\t\t\t\t\tcase \"ownerDocument\":\r\n\t\t\t\t\tcase \"documentElement\": continue;\r\n\r\n\t\t\t\t\tdefault: yield return pair; break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Hierarchy\r\n\r\n\t\tprotected internal virtual void Associate(XmlDocument/*!*/ document)\r\n\t\t{ }\r\n\r\n\t\tprivate delegate XmlNode NodeAction(DOMNode/*!*/ newNode, DOMNode auxNode);\r\n\r\n\t\t/// <summary>\r\n\t\t/// Performs a child-adding action with error checks.\r\n\t\t/// </summary>\r\n\t\tprivate XmlNode CheckedChildOperation(DOMNode/*!*/ newNode, DOMNode auxNode, NodeAction/*!*/ action)\r\n\t\t{\r\n\t\t\tnewNode.Associate(XmlNode.OwnerDocument != null ? XmlNode.OwnerDocument : (XmlDocument)XmlNode);\r\n\r\n\t\t\t// check for readonly node\r\n\t\t\tif (XmlNode.IsReadOnly || (newNode.XmlNode.ParentNode != null && newNode.XmlNode.ParentNode.IsReadOnly))\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// check for owner document mismatch\r\n\t\t\tif (XmlNode.OwnerDocument != null ?\r\n\t\t\t\tXmlNode.OwnerDocument != newNode.XmlNode.OwnerDocument :\r\n\t\t\t\tXmlNode != newNode.XmlNode.OwnerDocument)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tXmlNode result;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult = action(newNode, auxNode);\r\n\t\t\t}\r\n\t\t\tcatch (InvalidOperationException)\r\n\t\t\t{\r\n\t\t\t\t// the current node is of a type that does not allow child nodes of the type of the newNode node\r\n\t\t\t\t// or the newNode is an ancestor of this node. \r\n\t\t\t\tDOMException.Throw(ExceptionCode.BadHierarchy);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcatch (ArgumentException)\r\n\t\t\t{\r\n\t\t\t\t// check for newNode == this which System.Xml reports as ArgumentException\r\n\t\t\t\tif (newNode.XmlNode == XmlNode) DOMException.Throw(ExceptionCode.BadHierarchy);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// the refNode is not a child of this node\r\n\t\t\t\t\tDOMException.Throw(ExceptionCode.NotFound);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a new child before a reference node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newNode\">The new node.</param>\r\n\t\t/// <param name=\"refNode\">The reference node. If not supplied, <paramref name=\"newNode\"/> is appended\r\n\t\t/// to the children.</param>\r\n\t\t/// <returns>The inserted node.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object insertBefore(DOMNode newNode, [Optional][Nullable] DOMNode refNode)\r\n\t\t{\r\n\t\t\tbool is_fragment;\r\n\t\t\tif (newNode is DOMDocumentFragment)\r\n\t\t\t{\r\n\t\t\t\tif (!newNode.IsAssociated || !newNode.XmlNode.HasChildNodes)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.DocumentFragmentEmpty);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tis_fragment = true;\r\n\t\t\t}\r\n\t\t\telse is_fragment = false;\r\n\r\n\t\t\tXmlNode result = CheckedChildOperation(newNode, refNode, delegate(DOMNode _newNode, DOMNode _refNode)\r\n\t\t\t{\r\n\t\t\t\treturn XmlNode.InsertBefore(_newNode.XmlNode, (_refNode == null ? null : _refNode.XmlNode));\r\n\t\t\t});\r\n\r\n\t\t\tif (result == null) return false;\r\n\t\t\tif (is_fragment) return Create(result);\r\n\t\t\telse return newNode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Replaces a child node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newNode\">The new node.</param>\r\n\t\t/// <param name=\"oldNode\">The old node.</param>\r\n\t\t/// <returns>The inserted node.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object replaceChild(DOMNode newNode, DOMNode oldNode)\r\n\t\t{\r\n\t\t\tXmlNode result = CheckedChildOperation(newNode, oldNode, delegate(DOMNode _newNode, DOMNode _oldNode)\r\n\t\t\t{\r\n\t\t\t\treturn XmlNode.ReplaceChild(_newNode.XmlNode, _oldNode.XmlNode);\r\n\t\t\t});\r\n\r\n\t\t\tif (result == null) return false;\r\n\t\t\tif (newNode is DOMDocumentFragment) return Create(result);\r\n\t\t\telse return newNode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a new child at the end of the children.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"newNode\">The node to add.</param>\r\n\t\t/// <returns>The node added.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object appendChild(DOMNode newNode)\r\n\t\t{\r\n\t\t\tbool is_fragment;\r\n\t\t\tif (newNode is DOMDocumentFragment)\r\n\t\t\t{\r\n\t\t\t\tif (!newNode.IsAssociated || !newNode.XmlNode.HasChildNodes)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.DocumentFragmentEmpty);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tis_fragment = true;\r\n\t\t\t}\r\n\t\t\telse is_fragment = false;\r\n\r\n\t\t\tXmlNode result = CheckedChildOperation(newNode, null, delegate(DOMNode _newNode, DOMNode _)\r\n\t\t\t{\r\n\t\t\t\treturn XmlNode.AppendChild(_newNode.XmlNode);\r\n\t\t\t});\r\n\r\n\t\t\tif (result == null) return false;\r\n\t\t\tif (is_fragment) return Create(result);\r\n\t\t\telse return newNode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a child from the list of children.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"oldNode\">The node to remove.</param>\r\n\t\t/// <returns>The removed node.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object removeChild(DOMNode oldNode)\r\n\t\t{\r\n\t\t\t// check for readonly node\r\n\t\t\tif (XmlNode.IsReadOnly)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.DomModificationNotAllowed);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tXmlNode.RemoveChild(oldNode.XmlNode);\r\n\t\t\t}\r\n\t\t\tcatch (ArgumentException)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.NotFound);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn oldNode;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if the node has children.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> if this node has children, <B>false</B> otherwise.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object hasChildNodes()\r\n\t\t{\r\n\t\t\treturn XmlNode.HasChildNodes;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if the node has attributes.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>True</B> if this node has attributes, <B>false</B> otherwise.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object hasAttributes()\r\n\t\t{\r\n\t\t\tXmlAttributeCollection attrs = XmlNode.Attributes;\r\n\t\t\treturn (attrs != null && attrs.Count > 0);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Namespaces\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the namespace prefix of the node based on the namespace URI.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <returns>The prefix of the namespace or <B>null</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object lookupPrefix(string namespaceUri)\r\n\t\t{\r\n\t\t\treturn XmlNode.GetPrefixOfNamespace(namespaceUri);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the namespace URI of the node based on the prefix.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"prefix\">The prefix.</param>\r\n\t\t/// <returns>The namespace URI or <B>null</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object lookupNamespaceUri(string prefix)\r\n\t\t{\r\n\t\t\treturn XmlNode.GetNamespaceOfPrefix(prefix);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether the given URI is the default namespace.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object isDefaultNamespace(string namespaceUri)\r\n\t\t{\r\n\t\t\tif (namespaceUri.Length > 0)\r\n\t\t\t{\r\n\t\t\t\treturn (XmlNode.GetPrefixOfNamespace(namespaceUri).Length == 0);\r\n\t\t\t}\r\n\t\t\telse return false;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Utilities\r\n\r\n\t\t/// <summary>\r\n\t\t/// Normalizes the node.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void normalize()\r\n\t\t{\r\n\t\t\tXmlNode.Normalize();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a copy of the node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"deep\">Indicates whether to copy all descendant nodes. This parameter is\r\n\t\t/// defaulted to <B>false</B>.</param>\r\n\t\t/// <returns>The cloned node.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object cloneNode([Optional] bool deep)\r\n\t\t{\r\n\t\t\tif (IsAssociated) return Create(XmlNode.CloneNode(deep));\r\n\t\t\telse return CloneObjectInternal(null, null, deep);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Indicates if two nodes are the same node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"anotherNode\">The other node.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object isSameNode(DOMNode anotherNode)\r\n\t\t{\r\n\t\t\treturn (XmlNode == anotherNode.XmlNode);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Checks if a feature is supported for the specified version.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"feature\">The feature to test.</param>\r\n\t\t/// <param name=\"version\">The version number of the <paramref name=\"feature\"/> to test.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object isSupported(string feature, string version)\r\n\t\t{\r\n\t\t\treturn XmlNode.Supports(feature, version);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Not implemented\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void getFeature(string feature, string version)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void getUserData(string key)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void setUserData(string key, object data, DOMUserDataHandler handler)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void compareDocumentPosition(DOMNode anotherNode)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Not implemented in PHP 5.1.6.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic void isEqualNode(DOMNode anotherNode)\r\n\t\t{\r\n\t\t\tPhpException.Throw(PhpError.Warning, Resources.NotYetImplemented);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/DomXPath.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Xml.XPath;\r\nusing System.Text;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\nusing System.Linq;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// DOM XPath implementation.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class DOMXPath\r\n\t{\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprotected internal XPathNavigator XPathNavigator;\r\n\t\tprotected internal XmlNamespaceManager XmlNamespaceManager;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <see cref=\"DOMDocument\"/> associated with this object.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object document\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{ return new DOMDocument((XmlDocument)XPathNavigator.UnderlyingObject); }\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic DOMXPath()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{ }\r\n\r\n\t\tinternal DOMXPath(XPathNavigator/*!*/ navigator)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.XPathNavigator = navigator;\r\n\t\t\tInitNamespaceManager(false);\r\n\t\t}\r\n\r\n\t\tprivate void InitNamespaceManager(bool isHtmlDocument)\r\n\t\t{\r\n            this.XmlNamespaceManager = new XmlNamespaceManager(XPathNavigator.NameTable);\r\n\r\n            if (isHtmlDocument)\r\n            {\r\n                string ns = XmlNamespaceManager.LookupNamespace(\"xmlns\");\r\n                if (!string.IsNullOrEmpty(ns))\r\n                {\r\n                }\r\n            }\r\n            else\r\n            {\r\n                XPathNodeIterator iterator = XPathNavigator.Select(\"//namespace::*[not(. = ../../namespace::*)]\");\r\n\r\n                while (iterator.MoveNext())\r\n                {\r\n                    XmlNamespaceManager.AddNamespace(iterator.Current.Name, iterator.Current.Value);\r\n                }\r\n            }\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic void __construct(DOMDocument document)\r\n\t\t{\r\n\t\t\tthis.XPathNavigator = document.XmlDocument.CreateNavigator();\r\n            InitNamespaceManager(document._isHtmlDocument);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region XPath\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registeres the given namespace with the collection of known namespaces.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"prefix\">The prefix to associate with the namespace being registered.</param>\r\n\t\t/// <param name=\"uri\">The namespace to register.</param>\r\n\t\t/// <returns><B>True</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object registerNamespace(string prefix, string uri)\r\n\t\t{\r\n\t\t\tXmlNamespaceManager.AddNamespace(prefix, uri);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Evaluates the given XPath expression.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expr\">The expression to evaluate.</param>\r\n\t\t/// <param name=\"context\">The context node for doing relative XPath queries. By default, the queries are\r\n\t\t/// relative to the root element.</param>\r\n\t\t/// <returns>The <see cref=\"DOMNodeList\"/> containg the result or <B>false</B> on error.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object query(string expr, [Optional] DOMNode context)\r\n\t\t{\r\n\t\t\tXPathNavigator navigator = GetNavigator(context);\r\n\t\t\tif (navigator == null) return false;\r\n\r\n\t\t\tXPathNodeIterator iterator;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\titerator = navigator.Select(expr, XmlNamespaceManager);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.SyntaxError, ex.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// create the resulting node list\r\n\t\t\treturn IteratorToList(iterator);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Evaluates the given XPath expression and returns a typed result if possible.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expr\">The expression to evaluate.</param>\r\n\t\t/// <param name=\"context\">The context node for doing relative XPath queries. By default, the queries are\r\n\t\t/// relative to the root element.</param>\r\n\t\t/// <returns>A typed result if possible or a <see cref=\"DOMNodeList\"/> containing all nodes matching the\r\n\t\t/// given <paramref name=\"expr\"/>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object evaluate(string expr, [Optional] DOMNode context)\r\n\t\t{\r\n\t\t\tXPathNavigator navigator = GetNavigator(context);\r\n\t\t\tif (navigator == null) return false;\r\n\r\n\t\t\tobject result;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tresult = navigator.Evaluate(expr, XmlNamespaceManager);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex)\r\n\t\t\t{\r\n\t\t\t\tDOMException.Throw(ExceptionCode.SyntaxError, ex.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// the result can be bool, double, string, or iterator\r\n\t\t\tXPathNodeIterator iterator = result as XPathNodeIterator;\r\n\t\t\tif (iterator != null) return IteratorToList(iterator);\r\n\t\t\telse return result;\r\n\t\t}\r\n\r\n\t\tprivate XPathNavigator GetNavigator(DOMNode context)\r\n\t\t{\r\n\t\t\tif (context == null) return XPathNavigator;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tXmlNode node = context.XmlNode;\r\n\r\n\t\t\t\tif (node.OwnerDocument != (XmlDocument)XPathNavigator.UnderlyingObject)\r\n\t\t\t\t{\r\n\t\t\t\t\tDOMException.Throw(ExceptionCode.WrongDocument);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn node.CreateNavigator();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate DOMNodeList IteratorToList(XPathNodeIterator iterator)\r\n\t\t{\r\n\t\t\tDOMNodeList list = new DOMNodeList();\r\n\t\t\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tIHasXmlNode has_node = iterator.Current as IHasXmlNode;\r\n\t\t\t\tif (has_node != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(has_node.GetNode());\r\n\t\t\t\t\tif (node != null) list.AppendNode(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/Extension.XmlDom.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{CCF4F53B-E0EF-47E5-A82B-B52EC6C521D4}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Xml</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.XmlDom</AssemblyName>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <SignAssembly>true</SignAssembly>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\..\\Solutions\\packages\\HtmlAgilityPack.1.4.9\\lib\\Net40\\HtmlAgilityPack.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"Dynamic\\XmlReader.dynamic.cs\" />\r\n    <Compile Include=\"XmlReader.cs\" />\r\n    <Compile Include=\"DomAttribute.cs\" />\r\n    <Compile Include=\"DomDocument.cs\" />\r\n    <Compile Include=\"DomElement.cs\" />\r\n    <Compile Include=\"DomEntity.cs\" />\r\n    <Compile Include=\"DomException.cs\" />\r\n    <Compile Include=\"DomCollections.cs\" />\r\n    <Compile Include=\"DomImplementation.cs\" />\r\n    <Compile Include=\"DomMiscClasses.cs\" />\r\n    <Compile Include=\"DomMiscNodes.cs\" />\r\n    <Compile Include=\"DomNode.cs\" />\r\n    <Compile Include=\"DomCharacterData.cs\" />\r\n    <Compile Include=\"DomXPath.cs\" />\r\n    <Compile Include=\"Dynamic\\DomAttribute.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomCharacterData.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomCollections.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomDocument.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomElement.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomEntity.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomException.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomImplementation.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomMiscClasses.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomMiscNodes.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomNode.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\DomXPath.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\SimpleXml.dynamic.cs\" />\r\n    <Compile Include=\"Dynamic\\XsltProcessor.dynamic.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"LibXml.cs\" />\r\n    <Compile Include=\"Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"SimpleXml.cs\" />\r\n    <Compile Include=\"XmlDom.cs\" />\r\n    <Compile Include=\"XsltProcessor.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Xml\\Extension.Xml.csproj\">\r\n      <Project>{8145f722-1b6c-4162-92dc-824dfdc3ed6a}</Project>\r\n      <Name>Extension.Xml</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Resources.resx\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.XmlDom.nuspec\" />\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <ItemGroup>\r\n    <DynamicClass Include=\"DomAttribute.cs\" />\r\n    <DynamicClass Include=\"DomCollections.cs\" />\r\n    <DynamicClass Include=\"DomDocument.cs\" />\r\n    <DynamicClass Include=\"DomElement.cs\" />\r\n    <DynamicClass Include=\"DomEntity.cs\" />\r\n    <DynamicClass Include=\"DomException.cs\" />\r\n    <DynamicClass Include=\"DomCharacterData.cs\" />\r\n    <DynamicClass Include=\"DomImplementation.cs\" />\r\n    <DynamicClass Include=\"DomMiscClasses.cs\" />\r\n    <DynamicClass Include=\"DomMiscNodes.cs\" />\r\n    <DynamicClass Include=\"DomNode.cs\" />\r\n    <DynamicClass Include=\"DomXPath.cs\" />\r\n    <DynamicClass Include=\"XsltProcessor.cs\" />\r\n    <DynamicClass Include=\"SimpleXml.cs\" />\r\n    <DynamicClass Include=\"XmlReader.cs\" />\r\n  </ItemGroup>\r\n  <Target Name=\"BeforeCompile\">\r\n    <Exec Command=\"attrib -R &quot;$(ProjectDir)Dynamic\\*.dynamic.cs&quot;\" Condition=\"'$(OS)' == 'Windows_NT'\" />\r\n    <Exec Command=\"&quot;$(ToolsDir)ClassDynamizer.exe&quot; &quot;$(ProjectDir)%(DynamicClass.Identity)&quot; &quot;/out:$(ProjectDir)Dynamic&quot;\" />\r\n  </Target>\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/Extension.XmlDom.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension XML DOM Document Object Model</tags>\n    <dependencies>\n      <dependency id=\"HtmlAgilityPack\" version=\"1.4.9\" />\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/XmlDom/LibXml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.ComponentModel;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n    #region LibXMLError\r\n    /// <summary>\r\n    /// Contains various information about errors thrown by libxml.\r\n    /// </summary>\r\n    [ImplementsType]\r\n    public class LibXMLError : PhpObject\r\n    {\r\n        #region Properties\r\n\r\n        // in PHP, it has runtime fields\r\n\r\n        #endregion\r\n\r\n        #region Constructor\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public LibXMLError(ScriptContext/*!*/context, bool newInstance)\r\n            : base(context, newInstance)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// For internal purposes only.\r\n        /// </summary>\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public LibXMLError(ScriptContext/*!*/context, DTypeDesc caller)\r\n            : base(context, caller)\r\n        {\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    #endregion\r\n\r\n    [ImplementsExtension(\"libxml\")]\r\n    public static class PhpLibXml\r\n    {\r\n        #region libxml constants\r\n\r\n        /// <summary>\r\n        /// Activate small nodes allocation optimization. This may speed up your application without needing to change the code.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_COMPACT\")]\r\n        public const int LIBXML_COMPACT = 65536;\r\n\r\n        /// <summary>\r\n        /// Default DTD attributes.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_DTDATTR\")]\r\n        public const int LIBXML_DTDATTR = 8;\r\n\r\n        /// <summary>\r\n        /// Load the external subset\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_DTDLOAD\")]\r\n        public const int LIBXML_DTDLOAD = 4;\r\n\r\n        /// <summary>\r\n        /// Validate with the DTD.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_DTDVALID\")]\r\n        public const int LIBXML_DTDVALID = 16;\r\n\r\n        /// <summary>\r\n        /// Remove blank nodes.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOBLANKS\")]\r\n        public const int LIBXML_NOBLANKS = 256;\r\n\r\n        /// <summary>\r\n        /// Merge CDATA as text nodes.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOCDATA\")]\r\n        public const int LIBXML_NOCDATA = 16384;\r\n\r\n        /// <summary>\r\n        /// Expand empty tags (e.g. &lt;br/&gt; to &lt;br&gt;&lt;/br&gt;).\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOEMPTYTAG\")]\r\n        public const int LIBXML_NOEMPTYTAG = 4;\r\n\r\n        /// <summary>\r\n        /// Substitute entities.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOENT\")]\r\n        public const int LIBXML_NOENT = 2;\r\n\r\n        /// <summary>\r\n        /// Suppress error reports.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOERROR\")]\r\n        public const int LIBXML_NOERROR = 32;\r\n\r\n        /// <summary>\r\n        /// Disable network access when loading documents.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NONET\")]\r\n        public const int LIBXML_NONET = 2048;\r\n\r\n        /// <summary>\r\n        /// Suppress warning reports.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOWARNING\")]\r\n        public const int LIBXML_NOWARNING = 64;\r\n\r\n        /// <summary>\r\n        /// Drop the XML declaration when saving a document.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NOXMLDECL\")]\r\n        public const int LIBXML_NOXMLDECL = 2;\r\n\r\n        /// <summary>\r\n        /// Remove redundant namespaces declarations.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_NSCLEAN\")]\r\n        public const int LIBXML_NSCLEAN = 8192;\r\n\r\n        /// <summary>\r\n        /// Sets XML_PARSE_HUGE flag, which relaxes any hardcoded limit from the parser.\r\n        /// This affects limits like maximum depth of a document or the entity recursion, as well as limits of the size of text nodes.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_PARSEHUGE\")]\r\n        public const int LIBXML_PARSEHUGE = 524288;\r\n\r\n        /// <summary>\r\n        /// Implement XInclude substitution.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_XINCLUDE\")]\r\n        public const int LIBXML_XINCLUDE = 1024;\r\n\r\n        /// <summary>\r\n        /// A recoverable error.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_ERR_ERROR\")]\r\n        public const int LIBXML_ERR_ERROR = 2;\r\n\r\n        /// <summary>\r\n        /// A fatal error.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_ERR_FATAL\")]\r\n        public const int LIBXML_ERR_FATAL = 3;\r\n\r\n        /// <summary>\r\n        /// No errors.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_ERR_NONE\")]\r\n        public const int LIBXML_ERR_NONE = 0;\r\n\r\n        /// <summary>\r\n        /// A simple warning.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_ERR_WARNING\")]\r\n        public const int LIBXML_ERR_WARNING = 1;\r\n\r\n        /// <summary>\r\n        /// libxml version.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_VERSION\")]\r\n        public const int LIBXML_VERSION = -1;\r\n\r\n        /// <summary>\r\n        /// libxml version like 2.6.5 or 2.6.17.\r\n        /// </summary>\r\n        [ImplementsConstant(\"LIBXML_DOTTED_VERSION\")]\r\n        public const string LIBXML_DOTTED_VERSION = \"\";\r\n\r\n        #endregion\r\n\r\n        #region Nested class: LibXMLError\r\n\r\n        /// <summary>\r\n        /// Represents internal XML error.\r\n        /// </summary>\r\n        public class XmlError\r\n        {\r\n            public readonly int level, code, line, column;\r\n            public readonly string message, file;\r\n\r\n            public string LevelString\r\n            {\r\n                get\r\n                {\r\n                    switch (this.level)\r\n                    {\r\n                        case LIBXML_ERR_NONE: return \"notice\";\r\n                        case LIBXML_ERR_WARNING: return \"warning\";\r\n                        case LIBXML_ERR_ERROR: return \"error\";\r\n                        case LIBXML_ERR_FATAL: return \"fatal error\";\r\n                        default:\r\n                            return null;\r\n                    }\r\n                }\r\n            }\r\n\r\n            public XmlError(int level, int code, int line, int column, string message, string file)\r\n            {\r\n                this.level = level;\r\n                this.code = code;\r\n                this.line = line;\r\n                this.column = column;\r\n                this.message = message;\r\n                this.file = file;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Returns string representation of the error.\r\n            /// </summary>\r\n            public override string ToString()\r\n            {\r\n                if (this.file != null)\r\n                    return string.Format(\"LibXml {4} ({0}): {1} in {2}, line: {3}\", this.code, this.message, this.file, this.line, this.LevelString);\r\n                else\r\n                    return string.Format(\"LibXml {3} ({0}): {1} in Entity, line: {2}\", this.code, this.message, this.line, this.LevelString);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Creates PHP <see cref=\"stdClass\"/> with properties from current <see cref=\"XmlError\"/> instance.\r\n            /// </summary>\r\n            /// <param name=\"context\">Current <see cref=\"ScriptContext\"/>.</param>\r\n            /// <returns>An instance of <see cref=\"stdClass\"/> with properties level, code, column, message, file, line.</returns>\r\n            internal PhpObject/*!*/GetPhpErrorObject(ScriptContext/*!*/context)\r\n            {\r\n                return new LibXMLError(context, true)\r\n                {\r\n                    RuntimeFields = new PhpArray(6)\r\n                    {\r\n                        {\"level\", this.level},\r\n                        {\"code\", this.code},\r\n                        {\"column\", this.column},\r\n                        {\"message\", this.message},\r\n                        {\"file\", this.file},\r\n                        {\"line\", this.line}\r\n                    }\r\n                };\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields\r\n\r\n        [ThreadStatic]\r\n        private static List<XmlError> error_list;\r\n\r\n        [ThreadStatic]\r\n        private static Action<XmlError> error_handler;\r\n\r\n        #endregion\r\n\r\n        #region Initialization\r\n\r\n        static PhpLibXml()\r\n        {\r\n            // restores libxml at the request end,\r\n            // clears error list and handlers:\r\n            RequestContext.RequestEnd += () =>\r\n                {\r\n                    error_list = null;\r\n                    error_handler = null;\r\n                };\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IssueXmlError\r\n\r\n        /// <summary>\r\n        /// Reports given <see cref=\"XmlError\"/> using internal error handler or forwards the error to common error handler.\r\n        /// </summary>\r\n        /// <param name=\"err\">Error to report;</param>\r\n        public static void IssueXmlError(XmlError err)\r\n        {\r\n            if (err == null)\r\n                return;\r\n\r\n            if (error_handler != null)\r\n            {\r\n                error_handler(err);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, err.ToString());\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region libxml\r\n\r\n        [ImplementsFunction(\"libxml_clear_errors\")]\r\n        public static void ClearErrors()\r\n        {\r\n            error_list = null;\r\n        }\r\n\r\n        [ImplementsFunction(\"libxml_disable_entity_loader\")]\r\n        public static bool DisableEntityLoader()\r\n        {\r\n            return DisableEntityLoader(true);\r\n        }\r\n\r\n        [ImplementsFunction(\"libxml_disable_entity_loader\")]\r\n        public static bool DisableEntityLoader(bool disable)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        [ImplementsFunction(\"libxml_get_errors\")]\r\n        public static PhpArray/*!*/GetErrors(ScriptContext/*!*/context)\r\n        {\r\n            if (error_list == null)\r\n                return new PhpArray();\r\n\r\n            return new PhpArray(error_list.Select(x => x.GetPhpErrorObject(context)));\r\n        }\r\n\r\n        [ImplementsFunction(\"libxml_get_last_error\")]\r\n        [return: CastToFalse]\r\n        public static PhpObject GetLastError(ScriptContext/*!*/context)\r\n        {\r\n            if (error_list == null || error_list.Count == 0)\r\n                return null;\r\n\r\n            return error_list[error_list.Count - 1].GetPhpErrorObject(context);\r\n        }\r\n\r\n        [ImplementsFunction(\"libxml_set_streams_context\")]\r\n        public static void SetStreamContexts(PhpResource streams_context)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Disable libxml errors and allow user to fetch error information as needed.\r\n        /// </summary>\r\n        /// <returns>This function returns the previous value of use_errors.</returns>\r\n        [ImplementsFunction(\"libxml_use_internal_errors\")]\r\n        public static bool UseInternalErrors()\r\n        {\r\n            return UseInternalErrors(false);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Disable libxml errors and allow user to fetch error information as needed.\r\n        /// </summary>\r\n        /// <param name=\"use_errors\">Enable (TRUE) user error handling or disable (FALSE) user error handling. Disabling will also clear any existing libxml errors.</param>\r\n        /// <returns>This function returns the previous value of <paramref name=\"use_errors\"/>.</returns>\r\n        [ImplementsFunction(\"libxml_use_internal_errors\")]\r\n        public static bool UseInternalErrors(bool use_errors)\r\n        {\r\n            bool previousvalue = error_handler != null;\r\n\r\n            if (use_errors)\r\n            {\r\n                error_handler = (err) =>\r\n                    {\r\n                        if (error_list == null)\r\n                            error_list = new List<XmlError>();\r\n\r\n                        error_list.Add(err);\r\n                    };\r\n                //error_list = error_list;// keep error_list as it is\r\n            }\r\n            else\r\n            {\r\n                error_handler = null;   // outputs xml errors\r\n                error_list = null;\r\n            }\r\n\r\n            return previousvalue;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n\tpublic sealed class XmlDomLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal static XmlDomLibraryDescriptor Singleton { get { return singleton; } }\r\n\t\tprivate static XmlDomLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { SimpleXmlExtensionName, DomExtensionName, XslExtensionName }; }\r\n        //}\r\n\r\n        //internal const string SimpleXmlExtensionName = \"SimpleXML\";\r\n        //internal const string DomExtensionName = \"dom\";\r\n        //internal const string XslExtensionName = \"xsl\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the XmlDom library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\treturn new ConfigContextBase(null, null);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.1\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library.Xml {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Xml.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Document fragment is empty.\r\n        /// </summary>\r\n        internal static string DocumentFragmentEmpty {\r\n            get {\r\n                return ResourceManager.GetString(\"DocumentFragmentEmpty\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Inuse Attribute Error.\r\n        /// </summary>\r\n        internal static string ErrorAttributeInUse {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorAttributeInUse\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Hierarchy Request Error.\r\n        /// </summary>\r\n        internal static string ErrorBadHierarchy {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorBadHierarchy\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No Data Allowed Error.\r\n        /// </summary>\r\n        internal static string ErrorDataNotAllowed {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorDataNotAllowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No Modification Allowed Error.\r\n        /// </summary>\r\n        internal static string ErrorDomModificationNotAllowed {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorDomModificationNotAllowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Index Size Error.\r\n        /// </summary>\r\n        internal static string ErrorIndexOutOfBounds {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorIndexOutOfBounds\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid Access Error.\r\n        /// </summary>\r\n        internal static string ErrorInvalidAccess {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorInvalidAccess\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid Character Error.\r\n        /// </summary>\r\n        internal static string ErrorInvalidCharacter {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorInvalidCharacter\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid State Error.\r\n        /// </summary>\r\n        internal static string ErrorInvalidState {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorInvalidState\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid Modification Error.\r\n        /// </summary>\r\n        internal static string ErrorModificationNotAllowed {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorModificationNotAllowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Namespace Error.\r\n        /// </summary>\r\n        internal static string ErrorNamespaceError {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorNamespaceError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not Found Error.\r\n        /// </summary>\r\n        internal static string ErrorNotFound {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorNotFound\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not Supported Error.\r\n        /// </summary>\r\n        internal static string ErrorNotSupported {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorNotSupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to DOM String Size Error.\r\n        /// </summary>\r\n        internal static string ErrorStringTooLong {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorStringTooLong\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Syntax Error.\r\n        /// </summary>\r\n        internal static string ErrorSyntaxError {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorSyntaxError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Validation Error.\r\n        /// </summary>\r\n        internal static string ErrorValidationError {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorValidationError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Wrong Document Error.\r\n        /// </summary>\r\n        internal static string ErrorWrongDocument {\r\n            get {\r\n                return ResourceManager.GetString(\"ErrorWrongDocument\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EXSLT support requires the Mvp.Xml library version 2.0 (assembly version 2.0.2158.1055) available at http://www.xmlmvp.org/. Insert Mvp.Xml.dll to GAC in order to enable EXSLT support..\r\n        /// </summary>\r\n        internal static string ExsltSupportMissing {\r\n            get {\r\n                return ResourceManager.GetString(\"ExsltSupportMissing\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not allowed to call handler &apos;{0}()&apos;.\r\n        /// </summary>\r\n        internal static string HandlerNotAllowed {\r\n            get {\r\n                return ResourceManager.GetString(\"HandlerNotAllowed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid node type.\r\n        /// </summary>\r\n        internal static string InvalidNodeType {\r\n            get {\r\n                return ResourceManager.GetString(\"InvalidNodeType\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid array key (must be string).\r\n        /// </summary>\r\n        internal static string InvalidParameterKey {\r\n            get {\r\n                return ResourceManager.GetString(\"InvalidParameterKey\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid state error.\r\n        /// </summary>\r\n        internal static string InvalidStateError {\r\n            get {\r\n                return ResourceManager.GetString(\"InvalidStateError\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Not yet implemented.\r\n        /// </summary>\r\n        internal static string NotYetImplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"NotYetImplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Post-load DTD schema validation is not supported.\r\n        /// </summary>\r\n        internal static string PostLoadDtdUnsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"PostLoadDtdUnsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to RELAX NG schema validation is not supported.\r\n        /// </summary>\r\n        internal static string RelaxNGUnsupported {\r\n            get {\r\n                return ResourceManager.GetString(\"RelaxNGUnsupported\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cannot assign to an array of nodes (duplicate subnodes of name &apos;{0}&apos; detected).\r\n        /// </summary>\r\n        internal static string SimpleXmlAssignmentToDuplicateNodes {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlAssignmentToDuplicateNodes\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The imported node must be associated with an XML document.\r\n        /// </summary>\r\n        internal static string SimpleXmlImportNotAssociated {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlImportNotAssociated\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Class &apos;{0}&apos; is not derived from SimpleXMLElement..\r\n        /// </summary>\r\n        internal static string SimpleXmlInvalidClassName {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlInvalidClassName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Invalid node type. Only instances of DOMElement and DOMDocument (contaning the root element) can be imported.\r\n        /// </summary>\r\n        internal static string SimpleXmlInvalidNodeToImport {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlInvalidNodeToImport\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cooperation with the SimpleXML extension is not implemented.\r\n        /// </summary>\r\n        internal static string SimpleXmlNotImplemented {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlNotImplemented\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to It is not possible to assign complex types to nodes.\r\n        /// </summary>\r\n        internal static string SimpleXmlUnsupportedWriteConversion {\r\n            get {\r\n                return ResourceManager.GetString(\"SimpleXmlUnsupportedWriteConversion\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"DocumentFragmentEmpty\" xml:space=\"preserve\">\r\n    <value>Document fragment is empty</value>\r\n  </data>\r\n  <data name=\"ErrorAttributeInUse\" xml:space=\"preserve\">\r\n    <value>Inuse Attribute Error</value>\r\n  </data>\r\n  <data name=\"ErrorBadHierarchy\" xml:space=\"preserve\">\r\n    <value>Hierarchy Request Error</value>\r\n  </data>\r\n  <data name=\"ErrorDataNotAllowed\" xml:space=\"preserve\">\r\n    <value>No Data Allowed Error</value>\r\n  </data>\r\n  <data name=\"ErrorDomModificationNotAllowed\" xml:space=\"preserve\">\r\n    <value>No Modification Allowed Error</value>\r\n  </data>\r\n  <data name=\"ErrorIndexOutOfBounds\" xml:space=\"preserve\">\r\n    <value>Index Size Error</value>\r\n  </data>\r\n  <data name=\"ErrorInvalidAccess\" xml:space=\"preserve\">\r\n    <value>Invalid Access Error</value>\r\n  </data>\r\n  <data name=\"ErrorInvalidCharacter\" xml:space=\"preserve\">\r\n    <value>Invalid Character Error</value>\r\n  </data>\r\n  <data name=\"ErrorInvalidState\" xml:space=\"preserve\">\r\n    <value>Invalid State Error</value>\r\n  </data>\r\n  <data name=\"ErrorModificationNotAllowed\" xml:space=\"preserve\">\r\n    <value>Invalid Modification Error</value>\r\n  </data>\r\n  <data name=\"ErrorNamespaceError\" xml:space=\"preserve\">\r\n    <value>Namespace Error</value>\r\n  </data>\r\n  <data name=\"ErrorNotFound\" xml:space=\"preserve\">\r\n    <value>Not Found Error</value>\r\n  </data>\r\n  <data name=\"ErrorNotSupported\" xml:space=\"preserve\">\r\n    <value>Not Supported Error</value>\r\n  </data>\r\n  <data name=\"ErrorStringTooLong\" xml:space=\"preserve\">\r\n    <value>DOM String Size Error</value>\r\n  </data>\r\n  <data name=\"ErrorSyntaxError\" xml:space=\"preserve\">\r\n    <value>Syntax Error</value>\r\n  </data>\r\n  <data name=\"ErrorValidationError\" xml:space=\"preserve\">\r\n    <value>Validation Error</value>\r\n  </data>\r\n  <data name=\"ErrorWrongDocument\" xml:space=\"preserve\">\r\n    <value>Wrong Document Error</value>\r\n  </data>\r\n  <data name=\"ExsltSupportMissing\" xml:space=\"preserve\">\r\n    <value>EXSLT support requires the Mvp.Xml library version 2.0 (assembly version 2.0.2158.1055) available at http://www.xmlmvp.org/. Insert Mvp.Xml.dll to GAC in order to enable EXSLT support.</value>\r\n  </data>\r\n  <data name=\"HandlerNotAllowed\" xml:space=\"preserve\">\r\n    <value>Not allowed to call handler '{0}()'</value>\r\n  </data>\r\n  <data name=\"InvalidNodeType\" xml:space=\"preserve\">\r\n    <value>Invalid node type</value>\r\n  </data>\r\n  <data name=\"InvalidParameterKey\" xml:space=\"preserve\">\r\n    <value>Invalid array key (must be string)</value>\r\n  </data>\r\n  <data name=\"InvalidStateError\" xml:space=\"preserve\">\r\n    <value>Invalid state error</value>\r\n  </data>\r\n  <data name=\"NotYetImplemented\" xml:space=\"preserve\">\r\n    <value>Not yet implemented</value>\r\n  </data>\r\n  <data name=\"PostLoadDtdUnsupported\" xml:space=\"preserve\">\r\n    <value>Post-load DTD schema validation is not supported</value>\r\n  </data>\r\n  <data name=\"RelaxNGUnsupported\" xml:space=\"preserve\">\r\n    <value>RELAX NG schema validation is not supported</value>\r\n  </data>\r\n  <data name=\"SimpleXmlAssignmentToDuplicateNodes\" xml:space=\"preserve\">\r\n    <value>Cannot assign to an array of nodes (duplicate subnodes of name '{0}' detected)</value>\r\n  </data>\r\n  <data name=\"SimpleXmlImportNotAssociated\" xml:space=\"preserve\">\r\n    <value>The imported node must be associated with an XML document</value>\r\n  </data>\r\n  <data name=\"SimpleXmlInvalidClassName\" xml:space=\"preserve\">\r\n    <value>Class '{0}' is not derived from SimpleXMLElement.</value>\r\n  </data>\r\n  <data name=\"SimpleXmlInvalidNodeToImport\" xml:space=\"preserve\">\r\n    <value>Invalid node type. Only instances of DOMElement and DOMDocument (contaning the root element) can be imported</value>\r\n  </data>\r\n  <data name=\"SimpleXmlNotImplemented\" xml:space=\"preserve\">\r\n    <value>Cooperation with the SimpleXML extension is not implemented</value>\r\n  </data>\r\n  <data name=\"SimpleXmlUnsupportedWriteConversion\" xml:space=\"preserve\">\r\n    <value>It is not possible to assign complex types to nodes</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Extensions/XmlDom/SimpleXml.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Xml.XPath;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// Contains implementation of SimpleXML functions.\r\n\t/// </summary>\r\n\tpublic static class SimpleXml\r\n\t{\r\n\t\t#region simplexml_load_file\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads an XML file into an object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"fileName\">The file name.</param>\r\n\t\t/// <param name=\"className\">The name of the class whose instance should be returned (must extend\r\n\t\t/// <see cref=\"SimpleXMLElement\"/>).</param>\r\n\t\t/// <param name=\"options\">Additional parameters (unsupported).</param>\r\n\t\t/// <returns>An instance of <see cref=\"SimpleXMLElement\"/> or of the class specified by\r\n\t\t/// <paramref name=\"className\"/>, or <B>false</B> on error.</returns>\r\n\t\t[ImplementsFunction(\"simplexml_load_file\")]\r\n\t\tpublic static object LoadFile(string fileName, string className, int options)\r\n\t\t{\r\n\t\t\tXmlDocument doc = new XmlDocument();\r\n\t\t\tdoc.PreserveWhitespace = true;\r\n\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"rt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tdoc.Load(stream.RawStream);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (IOException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            return SimpleXMLElement.Create(className, doc.DocumentElement);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"simplexml_load_file\")]\r\n\t\tpublic static object LoadFile(string fileName, string className)\r\n\t\t{\r\n\t\t\treturn LoadFile(fileName, className, 0);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"simplexml_load_file\")]\r\n\t\tpublic static object LoadFile(string fileName)\r\n\t\t{\r\n\t\t\treturn LoadFile(fileName, null, 0);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region simplexml_load_string\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads a string of XML into an object.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"data\">The XML string.</param>\r\n\t\t/// <param name=\"className\">The name of the class whose instance should be returned (must extend\r\n\t\t/// <see cref=\"SimpleXMLElement\"/>).</param>\r\n\t\t/// <param name=\"options\">Additional parameters (unsupported).</param>\r\n\t\t/// <returns>An instance of <see cref=\"SimpleXMLElement\"/> or of the class specified by\r\n\t\t/// <paramref name=\"className\"/>, or <B>false</B> on error.</returns>\r\n\t\t[ImplementsFunction(\"simplexml_load_string\")]\r\n\t\tpublic static object LoadString(string data, string className, int options)\r\n\t\t{\r\n\t\t\tXmlDocument doc = new XmlDocument();\r\n\t\t\tdoc.PreserveWhitespace = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tdoc.LoadXml(data);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcatch (IOException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n            return SimpleXMLElement.Create(className, doc.DocumentElement);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"simplexml_load_string\")]\r\n\t\tpublic static object LoadString(string data, string className)\r\n\t\t{\r\n\t\t\treturn LoadString(data, className, 0);\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"simplexml_load_string\")]\r\n\t\tpublic static object LoadString(string data)\r\n\t\t{\r\n\t\t\treturn LoadString(data, null, 0);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region simplexml_import_dom\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a <see cref=\"SimpleXMLElement\"/> object to a <see cref=\"DOMElement\"/>.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"domNode\">A <see cref=\"DOMNode\"/>.</param>\r\n\t\t/// <param name=\"className\">The name of the class whose instance should be returned (must extend\r\n\t\t/// <see cref=\"SimpleXMLElement\"/>).</param>\r\n\t\t/// <returns>An instance of <see cref=\"SimpleXMLElement\"/> or of the class specified by\r\n\t\t/// <paramref name=\"className\"/>, or <B>false</B> on error.</returns>\r\n\t\t[ImplementsFunction(\"simplexml_import_dom\")]\r\n\t\tpublic static DObject ImportDom(DObject domNode, string className)\r\n\t\t{\r\n\t\t\tDOMNode node = domNode as DOMNode;\r\n\t\t\tif (node == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidImplicitCast(node, \"DOMNode\", \"domNode\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.IsAssociated)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.SimpleXmlImportNotAssociated);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tXmlNode xml_node = node.XmlNode;\r\n\r\n\t\t\t// we can import only elements (root elements if the passed node is a document)\r\n\t\t\tswitch (xml_node.NodeType)\r\n\t\t\t{\r\n\t\t\t\tcase XmlNodeType.Document:\r\n\t\t\t\t{\r\n\t\t\t\t\txml_node = xml_node.OwnerDocument.DocumentElement;\r\n\t\t\t\t\tif (xml_node != null) goto case XmlNodeType.Element; else goto default;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase XmlNodeType.Element:\r\n\t\t\t\t{\r\n\t\t\t\t\treturn SimpleXMLElement.Create(className, (XmlElement)xml_node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.SimpleXmlInvalidNodeToImport);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t[ImplementsFunction(\"simplexml_import_dom\")]\r\n\t\tpublic static DObject ImportDom(DObject node)\r\n\t\t{\r\n\t\t\treturn ImportDom(node, null);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// The one and only class comprising the SimpleXML extension.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class SimpleXMLElement : SPL.Traversable, SPL.ArrayAccess, SPL.Countable, IEnumerable<KeyValuePair<object, object>>\r\n\t{\r\n\t\t#region IterationType\r\n\r\n\t\t/// <summary>\r\n\t\t/// Specifies mostly the iteration (<c>foreach</c>) behavior of a <see cref=\"SimpleXMLElement\"/> instance.\r\n\t\t/// </summary>\r\n\t\tinternal enum IterationType\r\n\t\t{\r\n\t\t\t/// <summary>\r\n\t\t\t/// The instance represents a nonexistent element.\r\n\t\t\t/// </summary>\r\n\t\t\tNone,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The instance represents an attribute.\r\n\t\t\t/// </summary>\r\n\t\t\tAttribute,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The instance represents the attribute list of an element.\r\n\t\t\t/// </summary>\r\n\t\t\tAttributeList,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The instance represents an element and iteration will include its siblings.\r\n\t\t\t/// </summary>\r\n\t\t\tElement,\r\n\r\n\t\t\t/// <summary>\r\n\t\t\t/// The instance represents an element and iteration will include its child elements.\r\n\t\t\t/// </summary>\r\n\t\t\tChildElements,\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region IterationNamespace\r\n\r\n        internal class IterationNamespace\r\n        {\r\n            /// <summary>\r\n            /// The namespace prefix. If it is not null, the prefix is used.\r\n            /// </summary>\r\n            public string namespacePrefix { get; private set; }\r\n\r\n            /// <summary>\r\n            /// The namespace of included elements/attributes. (Namespace of prefix if prefix is used)\r\n            /// This value is always not null valid namespace (or empty string).\r\n            /// </summary>\r\n            public string namespaceUri { get; private set; }\r\n\r\n            private IterationNamespace(string prefix, string namespaceUri)\r\n            {\r\n                this.namespacePrefix = prefix;\r\n                this.namespaceUri = namespaceUri;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Create namespace iteration type by prefix.\r\n            /// </summary>\r\n            /// <param name=\"prefix\"></param>\r\n            /// <param name=\"relatedNode\"></param>\r\n            /// <returns></returns>\r\n            public static IterationNamespace CreateWithPrefix(string prefix, XmlNode relatedNode)\r\n            {\r\n                if (prefix == null) prefix = string.Empty;  // is using prefix, it cannot be null\r\n\r\n                return new IterationNamespace(prefix, (relatedNode != null) ? relatedNode.GetNamespaceOfPrefix(prefix) : string.Empty);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Create namespace iteration type by prefix.\r\n            /// </summary>\r\n            /// <param name=\"relatedNode\"></param>\r\n            /// <returns></returns>\r\n            public static IterationNamespace CreateWithPrefix(XmlNode/*!*/relatedNode)\r\n            {\r\n                return new IterationNamespace(relatedNode.Prefix, relatedNode.NamespaceURI);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Create namespace iteration type by full namespace URI. Attributes with default namespace (with empty prefix) will not be included.\r\n            /// </summary>\r\n            /// <param name=\"namespaceUri\"></param>\r\n            /// <returns></returns>\r\n            public static IterationNamespace CreateWithNamespace(string namespaceUri)\r\n            {\r\n                if (namespaceUri == null) namespaceUri = string.Empty;  // namespaceUri is never null in .NET\r\n\r\n                return new IterationNamespace(null, namespaceUri);  // do not use prefix, use the whole namespace (different behavior)\r\n            }\r\n\r\n            /// <summary>\r\n            /// Determine if the given XML node has the namespace.\r\n            /// </summary>\r\n            /// <param name=\"node\"></param>\r\n            /// <returns></returns>\r\n            public bool IsIn(XmlNode/*!*/node)\r\n            {\r\n                Debug.Assert(node != null, \"Argument node cannot be null.\");\r\n\r\n                if (namespacePrefix != null)\r\n                    return node.Prefix == namespacePrefix;\r\n                else\r\n                    return node.NamespaceURI == namespaceUri;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Get the node[prefix:name] or node[name, ns] according to the namespace iteration type.\r\n            /// </summary>\r\n            /// <param name=\"node\"></param>\r\n            /// <param name=\"name\"></param>\r\n            /// <returns></returns>\r\n            public XmlElement GetFirstChildIn(XmlNode/*!*/node, string/*!*/name)\r\n            {\r\n                Debug.Assert(node != null, \"Argument node cannot be null.\");\r\n                Debug.Assert(name != null, \"Argument name cannot be null.\");\r\n\r\n                if (namespacePrefix != null)\r\n                    return node[(namespacePrefix.Length == 0) ? (name) : (namespacePrefix + \":\" + name)];\r\n                else\r\n                    return node[name, namespaceUri];\r\n            }\r\n\r\n            public XmlAttribute GetAttributeIn(XmlAttributeCollection/*!*/attributes, string/*!*/name)\r\n            {\r\n                Debug.Assert(attributes != null, \"Argument attributes cannot be null.\");\r\n                Debug.Assert(name != null, \"Argument name cannot be null.\");\r\n\r\n                if (namespacePrefix == null)\r\n                    return attributes[name, namespaceUri];\r\n                else // using prefix !\r\n                    return attributes[(namespacePrefix.Length == 0) ? (name) : (namespacePrefix + \":\" + name)]; // prefix:name\r\n            }\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Fields and Properties\r\n        /// <summary>\r\n        /// Name of a class, which will be used when initializing children. Class which extends SimpleXmlElement HAS to be used. \r\n        /// Non-null value means, that this instance of<see cref=\"SimpleXMLElement\"/> was initialized with specified className.\r\n        /// </summary>\r\n        private string className;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Non-<B>null</B> except for construction (between ctor and <see cref=\"__construct(string,int,bool)\"/>\r\n\t\t/// or <see cref=\"XmlElement\"/> setter invocation).\r\n\t\t/// </summary>\r\n\t\tprivate XmlElement _element;\r\n\r\n        internal XmlElement XmlElement\r\n        {\r\n            get\r\n            {\r\n                return this._element;\r\n            }\r\n            set\r\n            {\r\n                this._element = value;\r\n                //this.namespaceUri = this._element.GetNamespaceOfPrefix(String.Empty);\r\n                this.iterationNamespace = IterationNamespace.CreateWithPrefix(this._element);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Lazily created namespace manager used for XPath queries.\r\n\t\t/// </summary>\r\n\t\tprivate XmlNamespaceManager _namespaceManager;\r\n\t\tprivate XmlNamespaceManager namespaceManager\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (_namespaceManager == null)\r\n\t\t\t\t{\r\n\t\t\t\t\t_namespaceManager = new XmlNamespaceManager(XmlElement.OwnerDocument.NameTable);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// initialize the manager with prefixes/URIs from the document\r\n\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> pair in GetNodeNamespaces(XmlElement, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t_namespaceManager.AddNamespace(pair.Key.String, (string)pair.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn _namespaceManager;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The attribute (if this instance represents an individual attribute).\r\n\t\t/// </summary>\r\n\t\tprivate XmlAttribute XmlAttribute;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Specifies iteration behavior of this instance (what it actually represents).\r\n\t\t/// </summary>\r\n\t\tprivate IterationType iterationType;\r\n\r\n        /// <summary>\r\n\t\t/// The prefix or namespace URI of the elements/attributes that should be iterated and dumped.\r\n\t\t/// </summary>\r\n        private IterationNamespace/*!*/ iterationNamespace;\r\n\r\n\t\t/// <summary>\r\n\t\t/// A list of names of elements representing the path in the document that should be added\r\n\t\t/// when a field or item is written to this instance.\r\n\t\t/// </summary>\r\n\t\t/// <remarks>\r\n\t\t/// This field supports <c>$doc->elem1->elem2->elem3 = \"value\"</c>, which creates <c>elem1</c>,\r\n\t\t/// <c>elem2</c>, and <c>elem3</c> if they do not already exist. Becomes non-<B>null</B> when\r\n\t\t/// an unknown element is read.\r\n\t\t/// </remarks>\r\n\t\tprivate List<string> intermediateElements;\r\n\r\n\t\tprivate static readonly DTypeDesc _typeDesc = DTypeDesc.Create(typeof(SimpleXMLElement));\r\n\r\n\t\tprivate static readonly VariableName textPropertyName = new VariableName(\"0\");\r\n\t\tprivate static readonly VariableName attributesPropertyName = new VariableName(\"@attributes\");\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\tpublic SimpleXMLElement()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tthis.iterationType = IterationType.ChildElements;\r\n            this.iterationNamespace = IterationNamespace.CreateWithPrefix(string.Empty, null);\r\n            this.className = null;\r\n\t\t}\r\n\r\n\t\tinternal SimpleXMLElement(XmlElement/*!*/ xmlElement, IterationType iterationType, IterationNamespace/*!*/iterationNamespace)\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tDebug.Assert(xmlElement != null && iterationNamespace != null);\r\n\r\n\t\t\tthis.XmlElement = xmlElement;\r\n\t\t\tthis.iterationType = iterationType;\r\n\t\t\tthis.iterationNamespace = iterationNamespace;\r\n\t\t}\r\n\r\n\t\tinternal SimpleXMLElement(XmlElement/*!*/ xmlElement, IterationType iterationType)\r\n\t\t\t: this(xmlElement, iterationType, IterationNamespace.CreateWithPrefix(string.Empty, xmlElement)/*xmlElement.GetNamespaceOfPrefix(String.Empty)*/)\r\n\t\t{ }\r\n\r\n\t\tinternal SimpleXMLElement(XmlElement/*!*/ xmlElement)\r\n            : this(xmlElement, IterationType.ChildElements, IterationNamespace.CreateWithPrefix(string.Empty, xmlElement)/*xmlElement.GetNamespaceOfPrefix(String.Empty)*/)\r\n\t\t{ }\r\n\r\n        internal SimpleXMLElement(XmlAttribute/*!*/ xmlAttribute, IterationNamespace/*!*/iterationNamespace)\r\n\t\t\t: this(xmlAttribute.OwnerElement, IterationType.Attribute, iterationNamespace)\r\n\t\t{\r\n\t\t\tthis.XmlAttribute = xmlAttribute;\r\n\t\t}\r\n\r\n\t\tinternal SimpleXMLElement(XmlAttribute/*!*/ xmlAttribute)\r\n            : this(xmlAttribute.OwnerElement, IterationType.Attribute, IterationNamespace.CreateWithPrefix(string.Empty, xmlAttribute)/*xmlAttribute.GetNamespaceOfPrefix(String.Empty)*/)\r\n\t\t{\r\n\t\t\tthis.XmlAttribute = xmlAttribute;\r\n\t\t}\r\n\r\n\t\t[PhpVisible, PhpFinal]\r\n\t\tpublic void __construct(string data, [Optional] int options, [Optional] bool dataIsUrl)\r\n\t\t{\r\n\t\t\tXmlDocument doc = new XmlDocument();\r\n\t\t\tdoc.PreserveWhitespace = true;\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (dataIsUrl)\r\n\t\t\t\t{\r\n\t\t\t\t\tusing (PhpStream stream = PhpStream.Open(data, \"rt\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (stream != null) doc.Load(stream.RawStream);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse doc.LoadXml(data);\r\n\t\t\t}\r\n\t\t\tcatch (XmlException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t}\r\n\r\n\t\t\tif (doc.DocumentElement == null) doc.AppendChild(doc.CreateElement(\"empty\"));\r\n\t\t\tthis.XmlElement = doc.DocumentElement;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n        /// </summary>\r\n        /// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n        /// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n        internal static SimpleXMLElement Create(string className)\r\n        {\r\n            if (className == null) return new SimpleXMLElement();\r\n\r\n            ScriptContext context = ScriptContext.CurrentContext;\r\n\r\n            // try to resolve the className\r\n            DTypeDesc type = context.ResolveType(className, null, UnknownTypeDesc.Singleton, null, ResolveTypeFlags.ThrowErrors | ResolveTypeFlags.UseAutoload);\r\n            if (type == null) return null;\r\n\r\n            // we will not allow className which is not derived from SimpleXMLElement\r\n            if (!type.IsSubclassOf(_typeDesc))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(Resources.SimpleXmlInvalidClassName, className));\r\n                return null;\r\n            }\r\n\r\n            SimpleXMLElement instance = (SimpleXMLElement)type.New(context);\r\n            instance.className = className;\r\n\r\n            return instance;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n        /// </summary>\r\n        /// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n        /// <param name=\"xmlElement\">The <see cref=\"XmlElement\"/> to wrap.</param>\r\n        /// <param name=\"iterationType\">Iteration behavior of new instance.</param>\r\n        /// <param name=\"iterationNamespace\">The namespace URI of the elements/attributes that should be iterated and dumped.</param>\r\n        /// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n        internal static SimpleXMLElement Create(string className, XmlElement/*!*/ xmlElement, IterationType iterationType, IterationNamespace/*!*/iterationNamespace)\r\n        {\r\n            if (className == null) return new SimpleXMLElement(xmlElement, iterationType, iterationNamespace);\r\n\r\n            SimpleXMLElement instance = Create(className);\r\n            instance.XmlElement = xmlElement;\r\n            instance.iterationType = iterationType;\r\n            instance.iterationNamespace = iterationNamespace;\r\n\r\n            return instance;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n        /// </summary>\r\n        /// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n        /// <param name=\"xmlElement\">The <see cref=\"XmlElement\"/> to wrap.</param>\r\n        /// <param name=\"iterationType\">Iteration behavior of new instance.</param>\r\n        /// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n        internal static SimpleXMLElement Create(string className, XmlElement/*!*/ xmlElement, IterationType iterationType)\r\n        {\r\n            if (className == null) return new SimpleXMLElement(xmlElement, iterationType);\r\n\r\n            SimpleXMLElement instance = Create(className);\r\n            instance.XmlElement = xmlElement;\r\n            instance.iterationType = iterationType;\r\n\r\n            return instance;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"xmlElement\">The <see cref=\"XmlElement\"/> to wrap.</param>\r\n\t\t/// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n\t\t/// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n\t\tinternal static SimpleXMLElement Create(string className, XmlElement/*!*/ xmlElement)\r\n\t\t{\r\n\t\t\tif (className == null) return new SimpleXMLElement(xmlElement);\r\n\r\n\t\t\tSimpleXMLElement instance = Create(className);\r\n\t\t\tinstance.XmlElement = xmlElement;\r\n\r\n\t\t\treturn instance;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n        /// </summary>\r\n        /// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n        /// <param name=\"xmlAttribute\">The <see cref=\"XmlElement\"/> to wrap.</param>\r\n        /// <param name=\"iterationNamespace\">The namespace URI of the elements/attributes that should be iterated and dumped.</param>\r\n        /// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n        internal static SimpleXMLElement Create(string className, XmlAttribute/*!*/ xmlAttribute, IterationNamespace/*!*/iterationNamespace)\r\n        {\r\n            if (className == null) return new SimpleXMLElement(xmlAttribute, iterationNamespace);\r\n\r\n            SimpleXMLElement instance = Create(className);\r\n            instance.XmlElement = xmlAttribute.OwnerElement;\r\n            instance.iterationType = IterationType.Attribute;\r\n            instance.iterationNamespace = iterationNamespace;\r\n            instance.XmlAttribute = xmlAttribute;\r\n\r\n            return instance;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new <see cref=\"SimpleXMLElement\"/> or a derived class.\r\n        /// </summary>\r\n        /// <param name=\"className\">The name of the class to create or <B>null</B>.</param>\r\n        /// <param name=\"xmlAttribute\">The <see cref=\"XmlElement\"/> to wrap.</param>\r\n        /// <returns>A new <see cref=\"SimpleXMLElement\"/> or a derived class.</returns>\r\n        internal static SimpleXMLElement Create(string className, XmlAttribute/*!*/ xmlAttribute)\r\n        {\r\n            if (className == null) return new SimpleXMLElement(xmlAttribute);\r\n\r\n            SimpleXMLElement instance = Create(className);\r\n            instance.XmlElement = xmlAttribute.OwnerElement;\r\n            instance.iterationType = IterationType.Attribute;\r\n            instance.XmlAttribute = xmlAttribute;\r\n            \r\n            return instance;\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Internal overrides: Conversions, Dump, and Cloning\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal to-<see cref=\"PhpBytes\"/> conversion.\r\n\t\t/// </summary>\r\n\t\tpublic override PhpBytes ToPhpBytes()\r\n\t\t{\r\n\t\t\treturn new PhpBytes(ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal to-<see cref=\"string\"/> conversion.\r\n\t\t/// </summary>\r\n\t\tpublic override string ToString(bool throwOnError, out bool success)\r\n\t\t{\r\n            success = true;\r\n\r\n            if (XmlAttribute != null) return XmlAttribute.Value;\r\n\r\n            // concatenate text nodes that are immediate children of this element\r\n            StringBuilder sb = new StringBuilder();\r\n\r\n            foreach (XmlNode child in XmlElement.ChildNodes)\r\n            {\r\n                string text = GetNodeText(child);\r\n                if (text != null) sb.Append(text);\r\n            }\r\n\r\n            return sb.ToString();\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// String representation of the XML element.\r\n        /// </summary>\r\n        /// <returns>XML element content.</returns>\r\n        public override string ToString()\r\n        {\r\n            bool success;\r\n            return ToString(false, out success);\r\n        }\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// Internal to-<see cref=\"int\"/> conversion.\r\n\t\t/// </summary>\r\n\t\tpublic override int ToInteger()\r\n\t\t{\r\n            return PHP.Core.Convert.StringToInteger(ToString());\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Internal to-<see cref=\"long\"/> conversion.\r\n        /// </summary>\r\n        public override long ToLongInteger()\r\n        {\r\n            return PHP.Core.Convert.StringToLongInteger(ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Internal to-<see cref=\"double\"/> conversion.\r\n        /// </summary>\r\n        public override double ToDouble()\r\n        {\r\n            return PHP.Core.Convert.StringToDouble(ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Internal to-<see cref=\"bool\"/> conversion.\r\n        /// </summary>\r\n        public override bool ToBoolean()\r\n        {\r\n            switch (this.iterationType)\r\n            {\r\n                case IterationType.Attribute:\r\n                    return true;\r\n\r\n                #region modified from this.GetEnumerator()\r\n\r\n                case IterationType.Element:\r\n                    {\r\n                        // find at least one sibling:\r\n                        for (XmlNode sibling = XmlElement; sibling != null; sibling = sibling.NextSibling)\r\n                            if (sibling.NodeType == XmlNodeType.Element && sibling.LocalName.Equals(XmlElement.LocalName, StringComparison.Ordinal) && iterationNamespace.IsIn(sibling))\r\n                                return true;\r\n                        return false;\r\n                    }\r\n\r\n                case IterationType.ChildElements:\r\n                    {\r\n                        // find at least one child element:\r\n                        foreach (XmlNode child in XmlElement)\r\n                            if (child.NodeType == XmlNodeType.Element && iterationNamespace.IsIn(child))\r\n                                return true;\r\n                        return false;\r\n                    }\r\n\r\n                case IterationType.AttributeList:\r\n                    {\r\n                        // find at least one attribute\r\n                        foreach (XmlAttribute attr in XmlElement.Attributes)\r\n                            if (!attr.Name.Equals(\"xmlns\", StringComparison.Ordinal) && iterationNamespace.IsIn(attr))\r\n                                return true;\r\n                        return false;\r\n                    }\r\n\r\n                #endregion\r\n\r\n                default:\r\n                    // return true iff the instance has at least one property\r\n                    return this.GetEnumerator().MoveNext();\r\n            }\r\n        }\r\n\r\n\r\n\t\t/// <summary>\r\n\t\t/// Internal dump enumeration.\r\n\t\t/// </summary>\r\n\t\tprotected override IEnumerable<KeyValuePair<VariableName, AttributedValue>> PropertyIterator()\r\n\t\t{\r\n\t\t\tswitch (iterationType)\r\n\t\t\t{\r\n\t\t\t\tcase IterationType.None: yield break;\r\n\t\t\t\tcase IterationType.Attribute:\r\n\t\t\t\t{\r\n\t\t\t\t\tyield return new KeyValuePair<VariableName, AttributedValue>\r\n\t\t\t\t\t\t(textPropertyName, new AttributedValue(XmlAttribute.Value));\r\n\t\t\t\t\tyield break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tOrderedHashtable<string> properties = new OrderedHashtable<string>(XmlElement.ChildNodes.Count);\r\n\t\t\tStringBuilder text = null;\r\n\r\n\t\t\tforeach (XmlNode child in XmlElement.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (properties.Count == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring text_data = GetNodeText(child);\r\n\t\t\t\t\tif (text_data != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (text == null) text = new StringBuilder(text_data);\r\n\t\t\t\t\t\telse text.Append(text_data);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (child.NodeType == XmlNodeType.Element)\r\n\t\t\t\t{\r\n                    if ((iterationType == IterationType.ChildElements || iterationType == IterationType.Element) &&\r\n                        iterationNamespace.IsIn(child))\r\n                    {\r\n                        text = null;\r\n                        object child_value = GetChildElementValue(className, (XmlElement)child);\r\n\r\n                        OrderedHashtable<string>.Element element = properties.GetElement(child.LocalName);\r\n                        if (element == null)\r\n                        {\r\n                            // the first element of this name\r\n                            properties.Add(child.LocalName, child_value);\r\n                        }\r\n                        else\r\n                        {\r\n                            // a next element of this name -> create/add to array\r\n                            PhpArray array = element.Value as PhpArray;\r\n                            if (array == null)\r\n                            {\r\n                                array = new PhpArray(2);\r\n                                array.Add(element.Value);\r\n                            }\r\n                            array.Add(child_value);\r\n\r\n                            element.Value = array;\r\n                        }\r\n                    }\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// yield return attributes (if present)\r\n\t\t\tXmlAttributeCollection attributes = XmlElement.Attributes;\r\n\t\t\tif (attributes != null && attributes.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tPhpArray attr_array = new PhpArray(0, attributes.Count);\r\n\t\t\t\tforeach (XmlAttribute attribute in attributes)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iterationNamespace.IsIn(attribute) && attribute.Name != \"xmlns\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattr_array.Add(attribute.LocalName, attribute.Value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (attr_array.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tyield return new KeyValuePair<VariableName, AttributedValue>\r\n\t\t\t\t\t\t(attributesPropertyName, new AttributedValue(attr_array));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// yield return the inner text\r\n\t\t\tif (text != null)\r\n\t\t\t{\r\n\t\t\t\tyield return new KeyValuePair<VariableName, AttributedValue>\r\n\t\t\t\t\t(textPropertyName, new AttributedValue(text.ToString()));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// yield return all child elements\r\n\t\t\t\tforeach (KeyValuePair<string, object> pair in properties)\r\n\t\t\t\t{\r\n\t\t\t\t\tyield return new KeyValuePair<VariableName, AttributedValue>\r\n\t\t\t\t\t\t(new VariableName(pair.Key), new AttributedValue(pair.Value));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Invoked when the instance is being cloned.\r\n\t\t/// </summary>\r\n\t\tprotected override DObject CloneObjectInternal(DTypeDesc caller, ScriptContext context, bool deepCopyFields)\r\n\t\t{\r\n\t\t\tSimpleXMLElement clone;\r\n\t\t\tif (iterationType == IterationType.Attribute)\r\n\t\t\t{\r\n\t\t\t\tclone = Create(className, XmlAttribute, iterationNamespace);\r\n\t\t\t}\r\n            else clone = Create(className, XmlElement, iterationType, iterationNamespace);\r\n\r\n\t\t\tif (intermediateElements != null) clone.intermediateElements = new List<string>(intermediateElements);\r\n\t\t\tclone._namespaceManager = _namespaceManager;\r\n\r\n\t\t\treturn clone;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Internal overrides: Property access\r\n\r\n\t\t/// <summary>\r\n\t\t/// Property reading (i.e. child element getter).\r\n\t\t/// </summary>\r\n\t\tprotected override object PropertyReadHandler(string name, DTypeDesc caller, out bool handled)\r\n\t\t{\r\n\t\t\thandled = true;\r\n\r\n            XmlElement child = iterationNamespace.GetFirstChildIn(XmlElement, name);// XmlElement[name, namespaceUri];\r\n\r\n            if (child != null)\r\n            {\r\n                return Create(className, child, IterationType.Element, iterationNamespace /*operating on the current namespace $element->children('namespace ...')->link*/);\r\n            }\r\n            else\r\n            {\r\n                SimpleXMLElement elem = Create(className, XmlElement, IterationType.None);\r\n\r\n                if (intermediateElements != null)\r\n                {\r\n                    elem.intermediateElements = new List<string>(intermediateElements);\r\n                }\r\n                else\r\n                {\r\n                    elem.intermediateElements = new List<string>();\r\n                }\r\n\r\n                elem.intermediateElements.Add(name);\r\n\r\n                return elem;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Property writing (i.e. child element setter).\r\n\t\t/// </summary>\r\n\t\tprotected override bool PropertyWriteHandler(object name, object value, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tstring name_str = name as string;\r\n\t\t\tif (name_str == null) return false;\r\n\r\n\t\t\tBuildUpIntermediateElements();\r\n\r\n\t\t\tXmlElement child = null;\r\n\r\n\t\t\t// try to find the child element of the given local name & namespace URI\r\n\t\t\tforeach (XmlNode node in XmlElement.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element &&\r\n\t\t\t\t\tnode.LocalName == name_str &&\r\n\t\t\t\t\titerationNamespace.IsIn(node)/*node.NamespaceURI == namespaceUri*/)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (child != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// duplicate!\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning,\r\n\t\t\t\t\t\t\tString.Format(Resources.SimpleXmlAssignmentToDuplicateNodes, name_str));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse child = (XmlElement)node;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (child == null)\r\n\t\t\t{\r\n\t\t\t\tchild = XmlElement.OwnerDocument.CreateElement(name_str, iterationNamespace.namespaceUri);\r\n\t\t\t\tXmlElement.AppendChild(child);\r\n\t\t\t}\r\n\r\n\t\t\t// check value type\r\n\t\t\tif (value != null && Type.GetTypeCode(value.GetType()) == TypeCode.Object)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.SimpleXmlUnsupportedWriteConversion);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tchild.InnerText = Core.Convert.ObjectToString(value);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Property unsetting (i.e. child element remover).\r\n\t\t/// </summary>\r\n\t\tprotected override bool PropertyUnsetHandler(string name, DTypeDesc caller)\r\n\t\t{\r\n\t\t\tList<XmlNode> to_remove = new List<XmlNode>();\r\n\r\n\t\t\t// remove all child elements of the given local name & namespace URI\r\n\t\t\tforeach (XmlNode node in XmlElement.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element &&\r\n\t\t\t\t\tnode.LocalName == name &&\r\n\t\t\t\t\titerationNamespace.IsIn(node)/*node.NamespaceURI == namespaceUri*/)\r\n\t\t\t\t{\r\n\t\t\t\t\tto_remove.Add(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (to_remove.Count == 0) return false;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tforeach (XmlNode node in to_remove)\r\n\t\t\t\t{\r\n\t\t\t\t\tXmlElement.RemoveChild(node);\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Property isset testing (i.e. child element existence test).\r\n\t\t/// </summary>\r\n\t\tpublic override object PropertyIssetHandler(string name, DTypeDesc caller, out bool handled)\r\n\t\t{\r\n\t\t\thandled = true;\r\n\r\n            XmlElement child = iterationNamespace.GetFirstChildIn(XmlElement, name);// XmlElement[name, namespaceUri];\r\n\r\n            if (child != null) return Create(className, child);\r\n\t\t\telse return null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region IPhpComparable CompareTo\r\n\r\n        public override int CompareTo(object obj, IComparer comparer)\r\n        {\r\n            Debug.Assert(comparer != null, \"Invalid argument\");\r\n\r\n            string strobj;\r\n            if ((strobj = obj as string) != null)\r\n            {\r\n                switch (iterationType)\r\n                {\r\n                    case IterationType.Attribute:\r\n                        return PhpComparer.CompareString(XmlAttribute.Value, strobj);\r\n                    case IterationType.Element:\r\n                    case IterationType.ChildElements:\r\n                        return PhpComparer.CompareString(GetPhpInnerText(XmlElement), strobj);\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return base.CompareTo(obj, comparer);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IPhpConvertible ToPhpArray\r\n\r\n        /// <summary>\r\n        /// Get inner text, child elements only (not recursive).\r\n        /// </summary>\r\n        /// <param name=\"child\"></param>\r\n        /// <returns></returns>\r\n        private string GetPhpInnerText(XmlNode child)\r\n        {\r\n            string NodeValue = null;\r\n\r\n            foreach (XmlNode x in child.ChildNodes)\r\n                if (x.NodeType == XmlNodeType.Text)\r\n                    NodeValue = NodeValue + x.InnerText;\r\n\r\n            return NodeValue;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns given child node as a SimpleXMLElement, or as a simple string.\r\n        /// It depends on its child nodes. (Because of PHP; node is represented as a string, if it has a child node of type Text)\r\n        /// </summary>\r\n        /// <param name=\"child\"></param>\r\n        /// <returns></returns>\r\n        private object GetPhpChildElement(XmlNode child)\r\n        {\r\n            if (child == null || child.NodeType != XmlNodeType.Element || !iterationNamespace.IsIn(child)/*child.NamespaceURI != namespaceUri*/)\r\n                return null;\r\n\r\n            // check if the node contains Text node, return only the string\r\n            string NodeValue = GetPhpInnerText(child);\r\n\r\n            if (NodeValue != null)\r\n                return NodeValue;\r\n\r\n            // otherwise\r\n            return Create(className, (XmlElement)child);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides conversion of SimpleXMLElement to array.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public override PhpArray ToPhpArray()\r\n        {\r\n            PhpArray array = new PhpArray();\r\n\r\n            if (XmlAttribute != null)\r\n            {\r\n                array.AddToEnd(XmlAttribute.Value);\r\n            }\r\n            else\r\n            {\r\n                foreach (XmlNode child in XmlElement)\r\n                {\r\n                    object childElement = GetPhpChildElement(child);\r\n\r\n                    if (childElement != null)\r\n                    {\r\n                        if (array.ContainsKey(child.LocalName))\r\n                        {\r\n                            object item = array[child.LocalName];\r\n                            PhpArray arrayitem = item as PhpArray;\r\n\r\n                            if (arrayitem == null)\r\n                            {\r\n                                arrayitem = new PhpArray(2);\r\n                                arrayitem.Add(item);\r\n                                arrayitem.Add(childElement);\r\n                                array[child.LocalName] = arrayitem;\r\n                            }\r\n                            else\r\n                            {\r\n                                arrayitem.Add(childElement);\r\n                            }\r\n                        }\r\n                        else\r\n                            array.Add(child.LocalName, childElement);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return array;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Operations\r\n\r\n        /// <summary>\r\n\t\t/// Return a well-formed XML string based on this <see cref=\"SimpleXMLElement\"/>.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic object asXML([Optional] string fileName)\r\n\t\t{\r\n\t\t\t// determine output encoding\r\n\t\t\tEncoding encoding = XmlDom.GetNodeEncoding(XmlElement);\r\n\r\n\t\t\tif (fileName == null)\r\n\t\t\t{\r\n\t\t\t\t// return the XML string\r\n\t\t\t\tusing (MemoryStream stream = new MemoryStream())\r\n\t\t\t\t{\r\n\t\t\t\t\t// use a XML writer and set its Formatting property to Formatting.Indented\r\n\t\t\t\t\tusing (XmlTextWriter writer = new XmlTextWriter(stream, encoding))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//writer.Formatting = Formatting.Indented;\r\n\t\t\t\t\t\tif (XmlElement.ParentNode is XmlDocument) XmlElement.ParentNode.WriteTo(writer);\r\n\t\t\t\t\t\telse XmlElement.WriteTo(writer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn new PhpBytes(stream.ToArray());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// write XML to the file\r\n\t\t\t\tusing (PhpStream stream = PhpStream.Open(fileName, \"wt\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tusing (XmlTextWriter writer = new XmlTextWriter(stream.RawStream, encoding))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//writer.Formatting = Formatting.Indented;\r\n\t\t\t\t\t\t\tif (XmlElement.ParentNode is XmlDocument) XmlElement.ParentNode.WriteTo(writer);\r\n\t\t\t\t\t\t\telse XmlElement.WriteTo(writer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs an XPath query on the XML data.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"path\">The XPath query string.</param>\r\n\t\t/// <returns>A <see cref=\"PhpArray\"/> of <see cref=\"SimpleXMLElement\"/>s or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object xpath(string path)\r\n\t\t{\r\n\t\t\tif (iterationType != IterationType.ChildElements && iterationType != IterationType.Element) return false;\r\n\r\n\t\t\tXPathNavigator navigator = XmlElement.CreateNavigator();\r\n\t\t\tXPathNodeIterator iterator;\r\n\r\n\t\t\t// execute the query\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\titerator = navigator.Select(path, namespaceManager);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tPhpArray result = new PhpArray();\r\n\r\n\t\t\t// add the returned nodes to the resulting array\r\n\t\t\twhile (iterator.MoveNext())\r\n\t\t\t{\r\n\t\t\t\tXmlNode node = iterator.Current.UnderlyingObject as XmlNode;\r\n\t\t\t\tif (node != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (node.NodeType)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase XmlNodeType.Element:\r\n\t\t\t\t\t\t{\r\n                            result.Add(Create(className, (XmlElement)node));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcase XmlNodeType.Attribute:\r\n\t\t\t\t\t\t{\r\n                            result.Add(Create(className, (XmlAttribute)node));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tcase XmlNodeType.CDATA:\r\n\t\t\t\t\t\tcase XmlNodeType.SignificantWhitespace:\r\n\t\t\t\t\t\tcase XmlNodeType.Text:\r\n\t\t\t\t\t\tcase XmlNodeType.Whitespace:\r\n\t\t\t\t\t\t{\r\n                            result.Add(Create(className, (XmlElement)node.ParentNode));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a prefix/ns context for the next XPath query.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"prefix\">The namespace prefix.</param>\r\n\t\t/// <param name=\"namespaceUri\">The namespace URI.</param>\r\n\t\t/// <returns><B>True</B> on success, <B>false</B> on error.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic bool registerXPathNamespace(string prefix, string namespaceUri)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tnamespaceManager.AddNamespace(prefix, namespaceUri);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Identifies the element's attributes.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ns\">Namespace URI or prefix of the attributes to identify.</param>\r\n\t\t/// <param name=\"isPrefix\">If <B>true</B> <paramref name=\"ns\"/> denotes a prefix, if <B>false</B> it\r\n\t\t/// is a namespace URI.</param>\r\n\t\t/// <returns>A new <see cref=\"SimpleXMLElement\"/> wrapping the same element but enumerating and\r\n\t\t/// dumping only the matching attributes.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic SimpleXMLElement attributes([Optional] string ns, [Optional] bool isPrefix)\r\n\t\t{\r\n\t\t\tif (iterationType != IterationType.ChildElements && iterationType != IterationType.Element) return null;\r\n\r\n\t\t\t/*if (isPrefix)\r\n\t\t\t{\r\n\t\t\t\tns = XmlElement.GetNamespaceOfPrefix(ns);\r\n\t\t\t}*/\r\n\r\n            return Create(className, XmlElement, IterationType.AttributeList, (ns == null) ? iterationNamespace : (isPrefix ? IterationNamespace.CreateWithPrefix(ns, XmlElement) : IterationNamespace.CreateWithNamespace(ns)));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Identifies the element's child elements.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ns\">Namespace URI or prefix of the elements to identify.</param>\r\n\t\t/// <param name=\"isPrefix\">If <B>true</B> <paramref name=\"ns\"/> denotes a prefix, if <B>false</B> it\r\n\t\t/// is a namespace URI.</param>\r\n\t\t/// <returns>A new <see cref=\"SimpleXMLElement\"/> wrapping the same element but enumerating and\r\n\t\t/// dumping only the matching elements.</returns>\r\n\t\t[PhpVisible]\r\n        public SimpleXMLElement children([Optional] string ns, [Optional] bool isPrefix)\r\n        {\r\n            if (iterationType != IterationType.ChildElements && iterationType != IterationType.Element) return null;\r\n\r\n            /*if (isPrefix)\r\n            {\r\n                ns = XmlElement.GetNamespaceOfPrefix(ns);\r\n            }*/\r\n\r\n            return Create(className, XmlElement, IterationType.ChildElements, (ns == null) ? iterationNamespace : (isPrefix ? IterationNamespace.CreateWithPrefix(ns, XmlElement) : IterationNamespace.CreateWithNamespace(ns)));\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns namespaces used by children of this node.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"recursive\">If <B>true</B> returns namespaces used by all children recursively.</param>\r\n\t\t/// <returns>An <see cref=\"PhpArray\"/> keyed by prefix with values being namespace URIs.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic PhpArray getNamespaces([Optional] bool recursive)\r\n\t\t{\r\n\t\t\treturn GetNodeNamespaces(XmlElement, recursive);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns namespaces used by the document.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"recursive\">If <B>true</B> returns namespaces used by all nodes recursively.</param>\r\n\t\t/// <returns>An <see cref=\"PhpArray\"/> keyed by prefix with values being namespace URIs.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic PhpArray getDocNamespaces([Optional] bool recursive)\r\n\t\t{\r\n\t\t\treturn GetNodeNamespaces(XmlElement.OwnerDocument, recursive);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the name of the XML element.\r\n\t\t/// </summary>\r\n\t\t[PhpVisible]\r\n\t\tpublic string getName()\r\n\t\t{\r\n\t\t\treturn (XmlAttribute != null ? XmlAttribute.LocalName : XmlElement.LocalName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds a child element to this XML element.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"qualifiedName\">The qualified name of the element to add.</param>\r\n\t\t/// <param name=\"value\">The optional element value.</param>\r\n\t\t/// <param name=\"namespaceUri\">The optional element namespace URI.</param>\r\n\t\t/// <returns>The <see cref=\"SimpleXMLElement\"/> of the child.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic SimpleXMLElement addChild(string qualifiedName, [Optional] string value, [Optional] string namespaceUri)\r\n\t\t{\r\n\t\t\tXmlElement child;\r\n\t\t\ttry\r\n\t\t\t{\r\n                if (namespaceUri == null) namespaceUri = iterationNamespace.namespaceUri;// this.namespaceUri;\r\n\t\t\t\tchild = XmlElement.OwnerDocument.CreateElement(qualifiedName, namespaceUri);\r\n\t\t\t\t\r\n\t\t\t\tif (value != null) child.InnerText = value;\r\n\t\t\t\t\r\n\t\t\t\tXmlElement.AppendChild(child);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n            return Create(className, child);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an attribute to this XML element.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"qualifiedName\">The qualified name of the attribute to add.</param>\r\n\t\t/// <param name=\"value\">The attribute value.</param>\r\n\t\t/// <param name=\"namespaceUri\">The optional attribute namespace URI.</param>\r\n\t\t[PhpVisible]\r\n\t\tpublic void addAttribute(string qualifiedName, string value, [Optional] string namespaceUri)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n                if (namespaceUri == null) namespaceUri = iterationNamespace.namespaceUri;// this.namespaceUri;\r\n\t\t\t\tXmlAttribute attr = XmlElement.OwnerDocument.CreateAttribute(qualifiedName, namespaceUri);\r\n\t\t\t\t\r\n\t\t\t\tattr.Value = value;\r\n\r\n\t\t\t\tXmlElement.Attributes.Append(attr);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Helper methods\r\n\r\n\t\t/// <summary>\r\n\t\t/// Wraps a node or returns its inner text if it is an element containing nothing but text.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetChildElementValue(string className, XmlElement xmlElement)\r\n\t\t{\r\n\t\t\t// determine whether all children are text-like and concat them\r\n\t\t\tStringBuilder text = null;\r\n\r\n\t\t\tforeach (XmlNode child in xmlElement.ChildNodes)\r\n\t\t\t{\r\n\t\t\t\tstring child_text = GetNodeText(child);\r\n\t\t\t\tif (child_text != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (text == null) text = new StringBuilder(child_text);\r\n\t\t\t\t\telse text.Append(child_text);\r\n\t\t\t\t}\r\n                else return Create(className, xmlElement);\r\n\t\t\t}\r\n\r\n            return (text == null ? (object)Create(className, xmlElement) : text.ToString());\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the text data if the supplied node is treated as &quot;text&quot;.\r\n\t\t/// </summary>\r\n\t\tprivate static string GetNodeText(XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (node.NodeType)\r\n\t\t\t{\r\n\t\t\t\tcase XmlNodeType.EntityReference: return \"&\" + node.Name + \";\";\r\n\r\n\t\t\t\tcase XmlNodeType.CDATA:\r\n\t\t\t\tcase XmlNodeType.SignificantWhitespace:\r\n\t\t\t\tcase XmlNodeType.Text:\r\n\t\t\t\tcase XmlNodeType.Whitespace: return node.Value;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n        /// <summary>\r\n\t\t/// Returns an array of namespaces used by children of the given node (recursively).\r\n\t\t/// </summary>\r\n        private static PhpArray GetNodeNamespaces(XmlNode xmlNode, bool recursive)\r\n        {\r\n            PhpArray result = new PhpArray();\r\n\r\n            XPathNavigator navigator = xmlNode.CreateNavigator();\r\n            XPathNodeIterator iterator = navigator.Select(recursive ? \"//namespace::*\" : \"/*/namespace::*\");\r\n\r\n            string default_ns = null;\r\n\r\n            while (iterator.MoveNext())\r\n            {\r\n                string prefix = iterator.Current.Name;\r\n                if (prefix != \"xml\")\r\n                {\r\n                    if (prefix.Length == 0)\r\n                    {\r\n                        // do not add the default namespace into the array yet, should be placed at the beginning once (see later)\r\n                        default_ns = iterator.Current.Value;\r\n                    }\r\n                    else\r\n                    {\r\n                        // there may be duplicates\r\n                        result[prefix] = iterator.Current.Value;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // the default ns should be at the beginning of the array\r\n            if (default_ns != null)\r\n                result.Prepend(String.Empty, default_ns);\r\n\r\n            return result;\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <paramref name=\"index\"/>th sibling with the same local name and namespace URI or <B>null</B>.\r\n\t\t/// </summary>\r\n\t\tprivate XmlElement GetSiblingForIndex(int index)\r\n\t\t{\r\n\t\t\tif (index <= 0) return XmlElement;\r\n\r\n\t\t\t// getting index-th element of this name\r\n\t\t\tXmlNode node = XmlElement;\r\n\t\t\twhile ((node = node.NextSibling) != null)\r\n\t\t\t{\r\n\t\t\t\tif (node.NodeType == XmlNodeType.Element &&\r\n\t\t\t\t\tnode.LocalName == XmlElement.LocalName &&\r\n\t\t\t\t\tnode.NamespaceURI == XmlElement.NamespaceURI) index--;\r\n\r\n\t\t\t\tif (index == 0) return (XmlElement)node;\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns the <param name=\"index\"/>th attribute with the current namespace URI or<B>null</B>.\r\n\t\t/// </summary>\r\n\t\tprivate XmlAttribute GetAttributeForIndex(int index)\r\n\t\t{\r\n\t\t\tforeach (XmlAttribute attr in XmlElement.Attributes)\r\n\t\t\t{\r\n\t\t\t\tif (iterationNamespace.IsIn(attr))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (index == 0) return attr;\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates elements stored in <see cref=\"intermediateElements\"/> when it turns out that\r\n\t\t/// there will be a write.\r\n\t\t/// </summary>\r\n\t\t/// <remarks><seealso cref=\"intermediateElements\"/></remarks>\r\n\t\tprivate void BuildUpIntermediateElements()\r\n\t\t{\r\n\t\t\tif (intermediateElements != null)\r\n\t\t\t{\r\n\t\t\t\tXmlElement element = XmlElement;\r\n\t\t\t\t\r\n\t\t\t\t// create all missing elements on the path\r\n\t\t\t\tforeach (string element_name in intermediateElements)\r\n\t\t\t\t{\r\n                    XmlElement subelement = iterationNamespace.GetFirstChildIn(element, element_name);// element[element_name, namespaceUri];\r\n\t\t\t\t\tif (subelement == null)\r\n\t\t\t\t\t{\r\n                        subelement = element.OwnerDocument.CreateElement(element_name, iterationNamespace.namespaceUri/*this.namespaceUri*/);\r\n\t\t\t\t\t\telement.AppendChild(subelement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telement = subelement;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tXmlElement = element;\r\n\t\t\t\titerationType = IterationType.Element;\r\n\r\n\t\t\t\tintermediateElements = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region IEnumerable<KeyValuePair<object,object>> Members\r\n\r\n        public new IEnumerator<KeyValuePair<object, object>> GetEnumerator()\r\n\t\t{\r\n\t\t\tswitch (iterationType)\r\n\t\t\t{\r\n\t\t\t\tcase IterationType.Element:\r\n\t\t\t\t{\r\n\t\t\t\t\t// yield return siblings\r\n\t\t\t\t\tfor (XmlNode sibling = XmlElement; sibling != null; sibling = sibling.NextSibling)\r\n\t\t\t\t\t{\r\n                        if (sibling.NodeType == XmlNodeType.Element && sibling.LocalName.Equals(XmlElement.LocalName, StringComparison.Ordinal) && iterationNamespace.IsIn(sibling) /*sibling.NamespaceURI == namespaceUri*/)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyield return new KeyValuePair<object, object>\r\n                                (sibling.LocalName, Create(className, (XmlElement)sibling, IterationType.ChildElements, iterationNamespace /* preserve namespaceUri */));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase IterationType.ChildElements:\r\n\t\t\t\t{\r\n\t\t\t\t\t// yield return child elements\r\n\t\t\t\t\tforeach (XmlNode child in XmlElement)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (child.NodeType == XmlNodeType.Element && iterationNamespace.IsIn(child) /*child.NamespaceURI == namespaceUri*/)\r\n\t\t\t\t\t\t{   \r\n                            yield return new KeyValuePair<object, object>\r\n                                (child.LocalName, Create(className, (XmlElement)child));\r\n\t\t\t\t\t\t}\r\n                        /*object childElement = GetPhpChildElement(child);\r\n                        if (childElement != null)\r\n                            yield return new KeyValuePair<object, object>\r\n                                (child.LocalName, childElement);\r\n                         */\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcase IterationType.AttributeList:\r\n\t\t\t\t{\r\n\t\t\t\t\t// yield return attributes\r\n\t\t\t\t\tforeach (XmlAttribute attr in XmlElement.Attributes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!attr.Name.Equals(\"xmlns\", StringComparison.Ordinal) && iterationNamespace.IsIn(attr)/*attr.NamespaceURI == namespaceUri*/)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tyield return new KeyValuePair<object, object>\r\n                                (attr.LocalName, Create(className, attr));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region IEnumerable Members\r\n\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\tforeach (KeyValuePair<object, object> pair in this)\r\n\t\t\t{\r\n\t\t\t\tyield return new DictionaryEntry(pair.Key, pair.Value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region SPL.ArrayAccess Members\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object offsetGet(object index)\r\n\t\t{\r\n\t\t\tIntStringKey key;\r\n\t\t\tif (!Core.Convert.ObjectToArrayKey(index, out key)) return null;\r\n\r\n\t\t\tif (key.IsInteger)\r\n\t\t\t{\r\n\t\t\t\tswitch (iterationType)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase IterationType.AttributeList:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// return the index-th attribute\r\n\t\t\t\t\t\tXmlAttribute attr = GetAttributeForIndex(key.Integer);\r\n                        return (attr != null ? Create(className, attr) : null);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase IterationType.ChildElements:\r\n\t\t\t\t\tcase IterationType.Element:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// returning the index-th sibling of the same name\r\n\t\t\t\t\t\tXmlElement element = GetSiblingForIndex(key.Integer);\r\n                        return (element != null ? Create(className, element) : null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (iterationType == IterationType.AttributeList ||\r\n\t\t\t\t\titerationType == IterationType.ChildElements ||\r\n\t\t\t\t\titerationType == IterationType.Element)\r\n\t\t\t\t{\r\n\t\t\t\t\t// getting an attribute\r\n                    XmlAttribute attr = iterationNamespace.GetAttributeIn(XmlElement.Attributes, key.String);// XmlElement.Attributes[key.String, namespaceUri];\r\n\t\t\t\t\treturn (attr != null ? Create(className, attr, iterationNamespace) : null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object offsetSet(object index, object value)\r\n\t\t{\r\n\t\t\tIntStringKey key;\r\n\t\t\tif (!Core.Convert.ObjectToArrayKey(index, out key)) return null;\r\n\r\n\t\t\tBuildUpIntermediateElements();\r\n\r\n\t\t\tif (iterationType == IterationType.AttributeList ||\r\n\t\t\t\titerationType == IterationType.ChildElements ||\r\n\t\t\t\titerationType == IterationType.Element)\r\n\t\t\t{\r\n\t\t\t\tif (value != null && Type.GetTypeCode(value.GetType()) == TypeCode.Object)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.SimpleXmlUnsupportedWriteConversion);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tstring value_str = Core.Convert.ObjectToString(value);\r\n\r\n\t\t\t\t\tif (key.IsInteger)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (iterationType == IterationType.AttributeList)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// setting value of the index-th attribute\r\n\t\t\t\t\t\t\tXmlAttribute attr = GetAttributeForIndex(key.Integer);\r\n\t\t\t\t\t\t\tif (attr != null) attr.Value = value_str;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// setting value of the index-th sibling of the same name\r\n\t\t\t\t\t\t\tXmlElement element = GetSiblingForIndex(key.Integer);\r\n\r\n\t\t\t\t\t\t\tif (element == null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\telement = XmlElement.OwnerDocument.CreateElement(XmlElement.LocalName, iterationNamespace.namespaceUri);\r\n\t\t\t\t\t\t\t\tXmlElement.ParentNode.AppendChild(element);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\telement.InnerText = value_str;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// setting an attribute\r\n                        XmlAttribute attr = iterationNamespace.GetAttributeIn(XmlElement.Attributes, key.String);// XmlElement.Attributes[key.String, namespaceUri];\r\n\r\n\t\t\t\t\t\tif (attr == null)\r\n\t\t\t\t\t\t{\r\n                            attr = XmlElement.Attributes.Append(XmlElement.OwnerDocument.CreateAttribute(key.String, iterationNamespace.namespaceUri));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tattr.Value = value_str;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object offsetUnset(object index)\r\n\t\t{\r\n\t\t\tIntStringKey key;\r\n\t\t\tif (!Core.Convert.ObjectToArrayKey(index, out key)) return null;\r\n\r\n\t\t\tif (iterationType == IterationType.AttributeList ||\r\n\t\t\t\titerationType == IterationType.ChildElements ||\r\n\t\t\t\titerationType == IterationType.Element)\r\n\t\t\t{\r\n\t\t\t\tif (key.IsInteger)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iterationType == IterationType.AttributeList)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// removing the index-th attribute\r\n\t\t\t\t\t\tXmlAttribute attr = GetAttributeForIndex(key.Integer);\r\n\t\t\t\t\t\tif (attr != null) XmlElement.Attributes.Remove(attr);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// removing the index-th sibling of the same name\r\n\t\t\t\t\t\tXmlElement element = GetSiblingForIndex(key.Integer);\r\n\t\t\t\t\t\tif (element != null) XmlElement.ParentNode.RemoveChild(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// removing an attribute\r\n                    XmlAttribute attr = iterationNamespace.GetAttributeIn(XmlElement.Attributes, key.String);// XmlElement.Attributes[key.String, namespaceUri];\r\n\t\t\t\t\tif (attr != null)\r\n                        XmlElement.Attributes.Remove(attr);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t[PhpVisible]\r\n\t\tpublic object offsetExists(object index)\r\n\t\t{\r\n\t\t\tIntStringKey key;\r\n\t\t\tif (!Core.Convert.ObjectToArrayKey(index, out key)) return null;\r\n\r\n\t\t\tif (iterationType == IterationType.AttributeList ||\r\n\t\t\t\titerationType == IterationType.ChildElements ||\r\n\t\t\t\titerationType == IterationType.Element)\r\n\t\t\t{\r\n\t\t\t\tif (key.IsInteger)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (iterationType == IterationType.AttributeList)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// testing the index-th attribute\r\n\t\t\t\t\t\treturn (GetAttributeForIndex(key.Integer) != null);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// testing the index-th sibling of the same name\r\n\t\t\t\t\t\treturn (GetSiblingForIndex(key.Integer) != null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// testing an attribute\r\n                    return iterationNamespace.GetAttributeIn(XmlElement.Attributes, key.String) != null;// (XmlElement.Attributes[key.String, namespaceUri] != null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        #region SPL.Countable\r\n\r\n        /// <summary>\r\n        /// Count childs in the element.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [PhpVisible]\r\n        public object count()\r\n        {\r\n            int _count = 0;\r\n\r\n            foreach (KeyValuePair<object,object> x in this)\r\n                ++_count;\r\n\r\n            return _count;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/XmlDom.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.Text;\r\nusing System.Globalization;\r\nusing System.Collections.Generic;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t#region Constants\r\n\r\n\t/// <summary>\r\n\t/// Enumerates possible DOM node types.\r\n\t/// </summary>\r\n\tpublic enum NodeType\r\n\t{\r\n\t\t[ImplementsConstant(\"XML_ELEMENT_NODE\")]\r\n\t\tElement = 1,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_NODE\")]\r\n\t\tAttribute = 2,\r\n\r\n\t\t[ImplementsConstant(\"XML_TEXT_NODE\")]\r\n\t\tText = 3,\r\n\r\n\t\t[ImplementsConstant(\"XML_CDATA_SECTION_NODE\")]\r\n\t\tCharacterDataSection = 4,\r\n\r\n\t\t[ImplementsConstant(\"XML_ENTITY_REF_NODE\")]\r\n\t\tEntityReference = 5,\r\n\r\n\t\t[ImplementsConstant(\"XML_ENTITY_NODE\")]\r\n\t\tEntity = 6,\r\n\r\n\t\t[ImplementsConstant(\"XML_PI_NODE\")]\r\n\t\tProcessingInstruction = 7,\r\n\r\n\t\t[ImplementsConstant(\"XML_COMMENT_NODE\")]\r\n\t\tComment = 8,\r\n\r\n\t\t[ImplementsConstant(\"XML_DOCUMENT_NODE\")]\r\n\t\tDocument = 9,\r\n\r\n\t\t[ImplementsConstant(\"XML_DOCUMENT_TYPE_NODE\")]\r\n\t\tDocumentType = 10,\r\n\r\n\t\t[ImplementsConstant(\"XML_DOCUMENT_FRAG_NODE\")]\r\n\t\tDocumentFragment = 11,\r\n\r\n\t\t[ImplementsConstant(\"XML_NOTATION_NODE\")]\r\n\t\tNotation = 12,\r\n\r\n\t\t[ImplementsConstant(\"XML_HTML_DOCUMENT_NODE\")]\r\n\t\tHtmlDocument = 13,\r\n\r\n\t\t[ImplementsConstant(\"XML_DTD_NODE\")]\r\n\t\tDtd = 14,\r\n\r\n\t\t[ImplementsConstant(\"XML_ELEMENT_DECL_NODE\")]\r\n\t\tElementDecl = 15,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_DECL_NODE\")]\r\n\t\tAttributeDecl = 16,\r\n\r\n\t\t[ImplementsConstant(\"XML_ENTITY_DECL_NODE\")]\r\n\t\tEntityDecl = 17,\r\n\r\n\t\t[ImplementsConstant(\"XML_NAMESPACE_DECL_NODE\")]\r\n\t\tNamespaceDecl = 18,\r\n\r\n\t\t[ImplementsConstant(\"XML_LOCAL_NAMESPACE\")]\r\n\t\tLocalNamespace = 18\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Enumerates who-knows-what. (TODO)\r\n\t/// </summary>\r\n\tpublic enum AttributeType\r\n\t{\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_CDATA\")]\r\n\t\tCharacterData = 1,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_ID\")]\r\n\t\tId = 2,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_IDREF\")]\r\n\t\tIdReference = 3,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_IDREFS\")]\r\n\t\tIdReferences = 4,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_ENTITY\")]\r\n\t\tEntity = 5,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_NMTOKEN\")]\r\n\t\tToken = 7,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_NMTOKENS\")]\r\n\t\tTokens = 8,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_ENUMERATION\")]\r\n\t\tEnumeration = 9,\r\n\r\n\t\t[ImplementsConstant(\"XML_ATTRIBUTE_NOTATION\")]\r\n\t\tNotation = 10\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\tpublic interface IXmlDomNode\r\n\t{\r\n\t\tXmlNode UnderlyingObject { get; }\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implements constants and functions.\r\n\t/// </summary>\r\n\tpublic static class XmlDom\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Converts a <see cref=\"SimpleXMLElement\"/> object to a <see cref=\"DOMElement\"/>.\r\n\t\t/// </summary>\r\n\t\t[ImplementsFunction(\"dom_import_simplexml\")]\r\n\t\tpublic static DObject ImportSimpleXml(DObject node)\r\n\t\t{\r\n\t\t\tSimpleXMLElement sxe_node = node as SimpleXMLElement;\r\n\t\t\tif (sxe_node == null)\r\n\t\t\t{\r\n\t\t\t\tPhpException.InvalidImplicitCast(node, \"SimpleXMLElement\", \"node\");\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn (DObject)DOMNode.Create(sxe_node.XmlElement);\r\n\t\t}\r\n\r\n\t\t#region Utilities\r\n\r\n\t\tinternal static void ParseQualifiedName(string qualifiedName, out string prefix, out string localName)\r\n\t\t{\r\n\t\t\tif (qualifiedName == null)\r\n\t\t\t{\r\n\t\t\t\tprefix = null;\r\n\t\t\t\tlocalName = null;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint index = qualifiedName.IndexOf(':');\r\n\t\t\t\tif (index >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tprefix = qualifiedName.Substring(0, index);\r\n\t\t\t\t\tlocalName = qualifiedName.Substring(index + 1);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tprefix = String.Empty;\r\n\t\t\t\t\tlocalName = qualifiedName;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static Encoding/*!*/ GetNodeEncoding(XmlNode xmlNode)\r\n\t\t{\r\n\t\t\tXmlDocument xml_document = xmlNode.OwnerDocument;\r\n\t\t\tif (xml_document == null) xml_document = (XmlDocument)xmlNode;\r\n\r\n\t\t\tEncoding encoding;\r\n\r\n\t\t\tXmlDeclaration decl = xml_document.FirstChild as XmlDeclaration;\r\n\t\t\tif (decl != null && !String.IsNullOrEmpty(decl.Encoding))\r\n\t\t\t{\r\n\t\t\t\tencoding = Encoding.GetEncoding(decl.Encoding);\r\n\t\t\t}\r\n\t\t\telse encoding = Configuration.Application.Globalization.PageEncoding;\r\n\r\n\t\t\t// no BOM for UTF-8 please!\r\n\t\t\tif (encoding is UTF8Encoding) return new UTF8Encoding(false);\r\n\t\t\telse return encoding;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/XmlReader.cs",
    "content": "/*\n\n Copyright (c) 2013 Ashod Nakashian.\n\n The use and distribution terms for this software are contained in the file named License.txt, \n which can be found in the root of the Phalanger distribution. By using this software \n in any fashion, you are agreeing to be bound by the terms of this license.\n \n You must not remove this notice from this software.\n\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Xml;\nusing PHP.Core;\n\nnamespace PHP.Library.Xml\n{\n    /// <summary>\n    /// DOM node.\n    /// </summary>\n    [ImplementsType]\n    public partial class XMLReader\n    {\n        #region XmlReader node types\n\n        public const int NONE = 0;\n        public const int ELEMENT = 1;\n        public const int ATTRIBUTE = 2;\n        public const int TEXT = 3;\n        public const int CDATA = 4;\n        public const int ENTITY_REF = 5;\n        public const int ENTITY = 6;\n        public const int PI = 7;\n        public const int COMMENT = 8;\n        public const int DOC = 9;\n        public const int DOC_TYPE = 10;\n        public const int DOC_FRAGMENT = 11;\n        public const int NOTATION = 12;\n        public const int WHITESPACE = 13;\n        public const int SIGNIFICANT_WHITESPACE = 14;\n        public const int END_ELEMENT = 15;\n        public const int END_ENTITY = 16;\n        public const int XML_DECLARATION = 17;\n        public const int LOADDTD = 1;\n        public const int DEFAULTATTRS = 2;\n        public const int VALIDATE = 3;\n        public const int SUBST_ENTITIES = 4;\n\n        #endregion\n\n        #region Properties\n\n        /// <summary>\n        /// The number of attributes on the node.\n        /// </summary>\n        [PhpVisible]\n        public object attributeCount\n        {\n            get { return getAttributeCount(); }\n        }\n\n        /// <summary>\n        /// The base URI of the node.\n        /// </summary>\n        [PhpVisible]\n        public object baseURI\n        {\n            get { return Active ? _reader.BaseURI : \"\"; }\n        }\n\n        /// <summary>\n        /// Depth of the node in the tree, starting at 0.\n        /// </summary>\n        [PhpVisible]\n        public object depth\n        {\n            get { return Active ? _reader.Depth : 0; }\n        }\n\n        /// <summary>\n        /// Indicates if node has attributes.\n        /// </summary>\n        [PhpVisible]\n        public object hasAttributes\n        {\n            get { return Active && _reader.HasAttributes; }\n        }\n\n        /// <summary>\n        /// Indicates if node has a text value.\n        /// </summary>\n        [PhpVisible]\n        public object hasValue\n        {\n            get { return Active && _reader.HasValue; }\n        }\n\n        /// <summary>\n        /// Indicates if attribute is defaulted from DTD.\n        /// </summary>\n        [PhpVisible]\n        public object isDefault\n        {\n            get { return Active && _reader.IsDefault; }\n        }\n\n        /// <summary>\n        /// Indicates if node is an empty element tag.\n        /// </summary>\n        [PhpVisible]\n        public object isEmptyElement\n        {\n            get { return Active && _reader.IsEmptyElement; }\n        }\n\n        /// <summary>\n        /// The local name of the node.\n        /// </summary>\n        [PhpVisible]\n        public object localName\n        {\n            get { return Active ? _reader.LocalName : \"\"; }\n        }\n\n        /// <summary>\n        /// The qualified name of the node.\n        /// </summary>\n        [PhpVisible]\n        public object name\n        {\n            get\n            {\n                return !Active ? \"\" :\n                    (!string.IsNullOrEmpty(_reader.Name) ? _reader.Name : getNodeTypeName());\n            }\n        }\n\n        /// <summary>\n        /// The URI of the namespace associated with the node.\n        /// </summary>\n        [PhpVisible]\n        public object namespaceURI\n        {\n            get { return Active ? _reader.NamespaceURI : \"\"; }\n        }\n\n        /// <summary>\n        /// The node type for the node.\n        /// </summary>\n        [PhpVisible]\n        public object nodeType\n        {\n            get { return Active ? (int)_reader.NodeType : 0; }\n        }\n\n        /// <summary>\n        /// The prefix of the namespace associated with the node.\n        /// </summary>\n        [PhpVisible]\n        public object prefix\n        {\n            get { return Active ? _reader.Prefix : \"\"; }\n        }\n\n        /// <summary>\n        /// The text value of the node.\n        /// </summary>\n        [PhpVisible]\n        public object value\n        {\n            get { return Active ? _reader.Value : \"\"; }\n        }\n\n        /// <summary>\n        /// The xml:lang scope which the node resides.\n        /// </summary>\n        [PhpVisible]\n        public object xmlLang\n        {\n            get { return Active ? _reader.XmlLang : \"\"; }\n        }\n\n        #endregion\n\n        #region Methods\n        \n        [PhpVisible]\n        public bool close()\n        {\n            if (_reader != null)\n            {\n                try\n                {\n                    XmlReader old = _reader;\n                    _reader = null;\n                    old.Close();\n                }\n                catch (Exception)\n                {\n                }\n            }\n\n            return true;\n        }\n\n        [PhpVisible]\n        public object expand([Optional] DOMNode basenode)\n        {\n            return false;\n        }\n\n        [PhpVisible]\n        public string getAttribute(string name)\n        {\n            return (Active && _reader.NodeType == XmlNodeType.Element) ? _reader.GetAttribute(name) : \"\";\n        }\n\n        [PhpVisible]\n        public string getAttributeNo(int index)\n        {\n            return (Active && _reader.NodeType == XmlNodeType.Element) ? _reader.GetAttribute(index) : \"\";\n        }\n\n        [PhpVisible]\n        public string getAttributeNs(string localName, string namespaceURI)\n        {\n            return (Active && _reader.NodeType == XmlNodeType.Element) ? _reader.GetAttribute(localName, namespaceURI) : \"\";\n        }\n\n        [PhpVisible]\n        public bool getParserProperty(int property)\n        {\n            bool oldValue;\n            return _parserProperties.TryGetValue(property, out oldValue) && oldValue;\n        }\n\n        [PhpVisible]\n        public bool isValid()\n        {\n            //TODO: This function is for schema validation.\n            return _reader != null && _reader.ReadState != ReadState.Error;\n        }\n\n        [PhpVisible]\n        public bool lookupNamespace(string prefix)\n        {\n            return Active && _reader.LookupNamespace(prefix) != null;\n        }\n\n        [PhpVisible]\n        public bool moveToAttribute(string name)\n        {\n            return _reader.MoveToAttribute(name);\n        }\n\n        [PhpVisible]\n        public bool moveToAttributeNo(int index)\n        {\n            if (!Active || index < 0 || index >= getAttributeCount())\n            {\n                return false;\n            }\n\n            moveToElement();\n            moveToFirstAttribute();\n            int j = 0;\n            while (j < index)\n            {\n                _reader.MoveToNextAttribute();\n                ++j;\n            }\n\n            return j < index;\n        }\n\n        [PhpVisible]\n        public bool moveToAttributeNs(string localName, string namespaceURI)\n        {\n            return Active && _reader.MoveToAttribute(localName, namespaceURI);\n        }\n\n        [PhpVisible]\n        public bool moveToElement()\n        {\n            return Active && _reader.MoveToElement();\n        }\n\n        [PhpVisible]\n        public bool moveToFirstAttribute()\n        {\n            return Active && _reader.MoveToFirstAttribute();\n        }\n\n        [PhpVisible]\n        public bool moveToNextAttribute()\n        {\n            return Active && _reader.MoveToNextAttribute();\n        }\n\n        [PhpVisible]\n        public bool next([Optional] string localname)\n        {\n            _reader.Skip();\n            if (string.IsNullOrEmpty(localname))\n            {\n                return !_reader.EOF;\n            }\n\n            while (_reader.LocalName != localname && !_reader.EOF)\n            {\n                _reader.Skip();\n            }\n\n            return _reader.LocalName == localname && !_reader.EOF;\n        }\n\n        [PhpVisible]\n        public bool open(string URI, [Optional] [Nullable] string encoding, [Optional] int options)\n        {\n            if (string.IsNullOrWhiteSpace(URI))\n            {\n                //TODO: Get current file and line.\n                Console.WriteLine(\"Warning: XMLReader::open(): Empty string supplied as input in %s on line %d\");\n                return false;\n            }\n\n            _source = URI;\n            _uriSource = true;\n            _encoding = encoding;\n            _options = options;\n            return createReader();\n        }\n\n        [PhpVisible]\n        public bool read()\n        {\n            try\n            {\n                if (_reader == null ||\n                    _reader.ReadState == ReadState.Error ||\n                    _reader.ReadState == ReadState.EndOfFile ||\n                    _reader.ReadState == ReadState.Closed)\n                {\n                    return false;\n                }\n\n                if (_reader.ReadState == ReadState.Interactive)\n                {\n                    // Shouldn't Read() return false on Error?\n                    return _reader.Read() &&\n                           _reader.ReadState != ReadState.Error;\n                }\n\n                // Initial state.\n                while (_reader.NodeType != XmlNodeType.Element &&\n                       _reader.ReadState != ReadState.Error)\n                {\n                    if (!_reader.Read())\n                    {\n                        return false;\n                    }\n                }\n\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Console.Write(ex.ToString());\n                return false;\n            }\n        }\n\n        [PhpVisible]\n        public string readInnerXML()\n        {\n            return Active ? _reader.ReadInnerXml() : \"\";\n        }\n\n        [PhpVisible]\n        public string readOuterXML()\n        {\n            return Active ? _reader.ReadOuterXml() : \"\";\n        }\n\n        [PhpVisible]\n        public string readString()\n        {\n            return Active ? _reader.ReadString() : \"\";\n        }\n\n        [PhpVisible]\n        public bool setParserProperty(int property, bool newValue)\n        {\n            if (_reader == null || _reader.ReadState != ReadState.Initial)\n            {\n                return false;\n            }\n\n            bool oldValue;\n            if (!_parserProperties.TryGetValue(property, out oldValue) ||\n                oldValue != newValue)\n            {\n                _parserProperties[property] = newValue;\n                return createReader();\n            }\n\n            return true;\n        }\n\n        [PhpVisible]\n        public bool setRelaxNGSchema(string filename)\n        {\n            if (_reader == null)\n            {\n                return false;\n            }\n\n            if (string.IsNullOrWhiteSpace(filename) || _reader.ReadState != ReadState.Initial)\n            {\n                //TODO: Get current file and line.\n                Console.Write(\"Warning: XMLReader::setRelaxNGSchema(): Schema data source is required in %s on line %d\");\n                return false;\n            }\n\n            return true;\n        }\n\n        [PhpVisible]\n        public bool setRelaxNGSchemaSource(string source)\n        {\n            if (_reader == null)\n            {\n                return false;\n            }\n\n            if (string.IsNullOrWhiteSpace(source) || _reader.ReadState != ReadState.Initial)\n            {\n                //TODO: Get current file and line.\n                Console.Write(\"Warning: XMLReader::setRelaxNGSchemaSource(): Schema data source is required in %s on line %d\");\n                return false;\n            }\n\n            return true;\n        }\n\n        [PhpVisible]\n        public bool setSchema(string filename)\n        {\n            if (_reader == null)\n            {\n                return false;\n            }\n\n            if (string.IsNullOrWhiteSpace(filename) || _reader.ReadState != ReadState.Initial)\n            {\n                //TODO: Get current file and line.\n                Console.Write(\"Warning: XMLReader::setSchema(): Schema data source is required in %s on line %d\");\n                return false;\n            }\n\n            return true;\n        }\n\n        [PhpVisible]\n        public bool xml(string source, [Optional] [Nullable] string encoding, [Optional] int options)\n        {\n            if (string.IsNullOrWhiteSpace(source))\n            {\n                //TODO: Get current file and line.\n                Console.Write(\"Warning: XMLReader::XML(): Empty string supplied as input in %s on line %d\");\n                return false;\n            }\n\n            _source = source;\n            _uriSource = false;\n            _encoding = encoding;\n            _options = options;\n            return createReader();\n        }\n\n        #endregion\n\n        #region Implementation\n\n        protected bool Active\n        {\n            get { return _reader != null && _reader.ReadState == ReadState.Interactive; }\n        }\n\n        protected int getAttributeCount()\n        {\n            return _reader != null ? _reader.AttributeCount : 0;\n        }\n\n        /// <summary>\n        /// HTML-encoded paths are converted into unix path. Probably .Net trying to assume we're a web-server.\n        /// Original URI from PHP: file:///Z%3A%5CPhalanger%5CTesting%5CTests%5CXml%5CxmlReader/dtdexample.dtd\n        /// Uri.ToString(): file:///Z:/Phalanger/Testing/Tests/Xml/xmlReader/dtdexample.dtd \n        /// Uri.LocalPath: /Z:/Phalanger/Testing/Tests/Xml/xmlReader/dtdexample.dtd\n        /// As a workaround, we simply load Uri.ToString() into a new Uri (so the resulting LocalPath is correct).\n        /// Result: Z:\\Phalanger\\Testing\\Tests\\Xml\\xmlReader\\dtdexample.dtd\n        /// </summary>\n        class FileUriResolver : XmlUrlResolver\n        {\n            public override bool SupportsType(Uri absoluteUri, Type type)\n            {\n                absoluteUri = new Uri(absoluteUri.ToString());\n                return base.SupportsType(absoluteUri, type);\n            }\n\n            public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)\n            {\n                absoluteUri = new Uri(absoluteUri.ToString());\n                return base.GetEntity(absoluteUri, role, ofObjectToReturn);\n            }\n        }\n\n        private XmlReaderSettings createSettings()\n        {\n            var settings = new XmlReaderSettings();\n\n            settings.CloseInput = true;\n            settings.ConformanceLevel = ConformanceLevel.Auto;\n            settings.ValidationType = getParserProperty(VALIDATE) ? ValidationType.DTD : ValidationType.None;\n            settings.DtdProcessing = getParserProperty(LOADDTD) ? DtdProcessing.Parse : DtdProcessing.Ignore;\n            settings.XmlResolver = new FileUriResolver();\n\n            return settings;\n        }\n\n        private bool createReader()\n        {\n            close();\n            try\n            {\n                var settings = createSettings();\n                _reader = _uriSource ? XmlReader.Create(_source, settings) : XmlReader.Create(new StringReader(_source), settings);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Console.Write(\"Error: \" + ex.ToString());\n                close();\n            }\n\n            return false;\n        }\n\n        private string getNodeTypeName()\n        {\n            if (_reader == null)\n            {\n                return \"\";\n            }\n\n            switch ((int)_reader.NodeType)\n            {\n                case NONE:\n                    return \"#none\";\n                case ELEMENT:\n                    return \"#element\";\n                case ATTRIBUTE:\n                    return \"#attribute\";\n                case TEXT:\n                    return \"#text\";\n                case CDATA:\n                    return \"#cdata\";\n                case ENTITY_REF:\n                    return \"#entityref\";\n                case ENTITY:\n                    return \"#entity\";\n                case PI:\n                    return \"#pi\";\n                case COMMENT:\n                    return \"#comment\";\n                case DOC:\n                    return \"#doc\";\n                case DOC_TYPE:\n                    return \"#doctype\";\n                case DOC_FRAGMENT:\n                    return \"#docfragment\";\n                case NOTATION:\n                    return \"#notation\";\n                case WHITESPACE:\n                    return \"\";\n                case SIGNIFICANT_WHITESPACE:\n                    return \"\";\n                case END_ELEMENT:\n                    return \"#endelement\";\n                case END_ENTITY:\n                    return \"#endentity\";\n                case XML_DECLARATION:\n                    return \"#xmldeclaration\";\n            }\n\n            return \"\";\n        }\n\n        #endregion\n\n        #region Representation\n\n        private XmlReader _reader;\n\n        private readonly Dictionary<int, bool> _parserProperties = new Dictionary<int, bool>(4);\n        private string _source;\n        private string _encoding;\n        private int _options;\n        private bool _uriSource;\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/XmlDom/XsltProcessor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2006 Ladislav Prosek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing System.Xml.Xsl;\r\nusing System.Xml.XPath;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing System.ComponentModel;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\n\r\nnamespace PHP.Library.Xml\r\n{\r\n\t/// <summary>\r\n\t/// Enumerates the clone behavior. (Where is this supposed to be used?)\r\n\t/// </summary>\r\n\tpublic enum CloneType\r\n\t{\r\n\t\t[ImplementsConstant(\"XSL_CLONE_AUTO\")]\r\n\t\tAuto = 0,\r\n\r\n\t\t[ImplementsConstant(\"XSL_CLONE_NEVER\")]\r\n\t\tNever = 1,\r\n\r\n\t\t[ImplementsConstant(\"XSL_CLONE_ALWAYS\")]\r\n\t\tAlways = -1\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Implements the XSLT processor.\r\n\t/// </summary>\r\n\t[ImplementsType]\r\n\tpublic partial class XSLTProcessor\r\n\t{\r\n\t\t#region Delegates\r\n\r\n\t\tprivate delegate void LoadDelegate(IXPathNavigable stylesheet);\r\n\t\tprivate delegate XmlWriterSettings GetOutputSettingsDelegate();\r\n\t\tprivate delegate void TransformToWriterDelegate(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results);\r\n\t\tprivate delegate void TransformToStreamDelegate(IXPathNavigable input, XsltArgumentList arguments, Stream results);\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Fields and Properties\r\n\r\n\t\tprivate LoadDelegate Load;\r\n\t\tprivate GetOutputSettingsDelegate GetOutputSettings;\r\n\t\tprivate TransformToWriterDelegate TransformToWriter;\r\n\t\tprivate TransformToStreamDelegate TransformToStream;\r\n\r\n\t\tprivate XsltArgumentList xsltArgumentList;\r\n\t\tprivate XsltUserFunctionHandler xsltUserFunctionHandler;\r\n\r\n\t\tprivate const string PhpNameSpaceUri = \"http://php.net/xsl\";\r\n\r\n\t\tprivate static bool mvpXmlAvailable;\r\n\t\tprivate static Type mvpXmlType;\r\n\r\n\t\tprivate static MethodInfo getOutputSettingsMethodFW;\r\n\t\tprivate static MethodInfo loadMethodMvp;\r\n\t\tprivate static MethodInfo getOutputSettingsMethodMvp;\r\n\t\tprivate static MethodInfo transformToWriterMethodMvp;\r\n\t\tprivate static MethodInfo transformToStreamMethodMvp;\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Construction\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether Mvp.Xml is available and reflects the MvpXslTransform type.\r\n\t\t/// </summary>\r\n\t\tstatic XSLTProcessor()\r\n\t\t{\r\n\t\t\tgetOutputSettingsMethodFW = typeof(XslCompiledTransform).GetProperty(\"OutputSettings\").GetGetMethod();\r\n\r\n\t\t\t// try to load the Mvp.Xml assembly\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tAssembly mvp_xml_assembly = Assembly.Load(\"Mvp.Xml, Version=2.0.2158.1055, Culture=neutral, PublicKeyToken=dd92544dc05f5671\");\r\n\t\t\t\tmvpXmlType = mvp_xml_assembly.GetType(\"Mvp.Xml.Exslt.ExsltTransform\");\r\n\r\n\t\t\t\tif (mvpXmlType != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tloadMethodMvp = mvpXmlType.GetMethod(\"Load\", new Type[] { typeof(IXPathNavigable) });\r\n\t\t\t\t\tgetOutputSettingsMethodMvp = mvpXmlType.GetProperty(\"OutputSettings\").GetGetMethod();\r\n\t\t\t\t\ttransformToWriterMethodMvp = mvpXmlType.GetMethod(\"Transform\", new Type[] { typeof(IXPathNavigable), typeof(XsltArgumentList), typeof(XmlWriter) });\r\n\t\t\t\t\ttransformToStreamMethodMvp = mvpXmlType.GetMethod(\"Transform\", new Type[] { typeof(IXPathNavigable), typeof(XsltArgumentList), typeof(Stream) });\r\n\r\n\t\t\t\t\tmvpXmlAvailable =\r\n\t\t\t\t\t\t(loadMethodMvp != null &&\r\n\t\t\t\t\t\tgetOutputSettingsMethodMvp != null &&\r\n\t\t\t\t\t\ttransformToWriterMethodMvp != null &&\r\n\t\t\t\t\t\ttransformToStreamMethodMvp != null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (Exception)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic XSLTProcessor()\r\n\t\t\t: base(ScriptContext.CurrentContext, true)\r\n\t\t{\r\n\t\t\tif (mvpXmlAvailable)\r\n\t\t\t{\r\n\t\t\t\tobject transform = Activator.CreateInstance(mvpXmlType);\r\n\r\n\t\t\t\tLoad = (LoadDelegate)Delegate.CreateDelegate(typeof(LoadDelegate), transform, loadMethodMvp);\r\n\t\t\t\tGetOutputSettings = (GetOutputSettingsDelegate)Delegate.CreateDelegate(typeof(GetOutputSettingsDelegate),\r\n\t\t\t\t\ttransform, getOutputSettingsMethodMvp);\r\n\r\n\t\t\t\tTransformToWriter = (TransformToWriterDelegate)Delegate.CreateDelegate(typeof(TransformToWriterDelegate),\r\n\t\t\t\t\ttransform, transformToWriterMethodMvp);\r\n\t\t\t\tTransformToStream = (TransformToStreamDelegate)Delegate.CreateDelegate(typeof(TransformToStreamDelegate),\r\n\t\t\t\t\ttransform, transformToStreamMethodMvp);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Mvp.Xml not available -> falling back to XslCompiledTransform\r\n\t\t\t\tXslCompiledTransform transform = new XslCompiledTransform();\r\n\r\n\t\t\t\tLoad = new LoadDelegate(transform.Load);\r\n\t\t\t\tGetOutputSettings = (GetOutputSettingsDelegate)\r\n\t\t\t\t\tDelegate.CreateDelegate(typeof(GetOutputSettingsDelegate), transform, getOutputSettingsMethodFW);\r\n\r\n\t\t\t\tTransformToWriter = new TransformToWriterDelegate(transform.Transform);\r\n\t\t\t\tTransformToStream = new TransformToStreamDelegate(transform.Transform);\r\n\t\t\t}\r\n\r\n\t\t\tthis.xsltArgumentList = new XsltArgumentList();\r\n\t\t}\r\n\r\n\t\tpublic override bool ToBoolean()\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Transformation\r\n\r\n\t\t/// <summary>\r\n\t\t/// Import a stylesheet.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doc\">The imported style sheet passed as a <see cref=\"DOMDocument\"/> object.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object importStylesheet(DOMDocument doc)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tLoad(doc.XmlDocument);\r\n\t\t\t}\r\n\t\t\tcatch (XsltException e)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Transforms the source node to a <see cref=\"DOMDocument\"/> applying the stylesheet given by the\r\n\t\t/// <see cref=\"importStylesheet(DOMDocument)\"/> method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"node\">The node to be transformed.</param>\r\n\t\t/// <returns>The resulting <see cref=\"DOMDocument\"/> or <B>false</B> on error.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object transformToDoc(IXmlDomNode node)\r\n\t\t{\r\n\t\t\tXmlDocument doc = new XmlDocument();\r\n\t\t\tdoc.PreserveWhitespace = true;\r\n\r\n\t\t\tusing (MemoryStream stream = new MemoryStream())\r\n\t\t\t{\r\n\t\t\t\tXmlWriterSettings settings = GetOutputSettings();\r\n\t\t\t\tif (settings.Encoding is UTF8Encoding)\r\n\t\t\t\t{\r\n\t\t\t\t\t// no BOM in UTF-8 please!\r\n\t\t\t\t\tsettings = settings.Clone();\r\n\t\t\t\t\tsettings.Encoding = new UTF8Encoding(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tusing (XmlWriter writer = XmlWriter.Create(stream, settings))\r\n\t\t\t\t{\r\n\t\t\t\t\t// transform the document\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTransformToWriter(node.UnderlyingObject, xsltArgumentList, writer);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (XsltException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (e.InnerException != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// ScriptDiedException etc.\r\n\t\t\t\t\t\t\tthrow e.InnerException;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (InvalidOperationException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstream.Seek(0, SeekOrigin.Begin);\r\n\r\n\t\t\t\t// build the resulting XML document\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tdoc.Load(stream);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XmlException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn new DOMDocument(doc);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Transforms the source node to an URI applying the stylesheet given by the\r\n\t\t/// <see cref=\"importStylesheet(DOMDocument)\"/> method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doc\">The document to transform.</param>\r\n\t\t/// <param name=\"uri\">The destination URI.</param>\r\n\t\t/// <returns>Returns the number of bytes written or <B>false</B> if an error occurred.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object transformToUri(DOMDocument doc, string uri)\r\n\t\t{\r\n\t\t\tusing (PhpStream stream = PhpStream.Open(uri, \"wt\"))\r\n\t\t\t{\r\n\t\t\t\tif (stream == null) return false;\r\n\r\n\t\t\t\t// transform the document\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tTransformToStream(doc.XmlNode, xsltArgumentList, stream.RawStream);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (XsltException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (e.InnerException != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// ScriptDiedException etc.\r\n\t\t\t\t\t\tthrow e.InnerException;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (InvalidOperationException e)\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO:\r\n\t\t\t\treturn (stream.RawStream.CanSeek ? stream.RawStream.Position : 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Transforms the source node to a string applying the stylesheet given by the\r\n\t\t/// <see cref=\"importStylesheet(DOMDocument)\"/> method.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"doc\">The document to transform.</param>\r\n\t\t/// <returns>The result of the transformation as a string or FALSE on error.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object transformToXml(DOMDocument doc)\r\n\t\t{\r\n\t\t\t// writing to a StringWriter would result in forcing UTF-16 encoding\r\n\t\t\tusing (MemoryStream stream = new MemoryStream())\r\n\t\t\t{\r\n\t\t\t\tXmlWriterSettings settings = GetOutputSettings();\r\n\t\t\t\tif (settings.Encoding is UTF8Encoding)\r\n\t\t\t\t{\r\n\t\t\t\t\t// no BOM in UTF-8 please!\r\n\t\t\t\t\tsettings = settings.Clone();\r\n\t\t\t\t\tsettings.Encoding = new UTF8Encoding(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tusing (XmlWriter writer = XmlWriter.Create(stream, settings))\r\n\t\t\t\t{\r\n\t\t\t\t\t// transform the document\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTransformToWriter(doc.XmlNode, xsltArgumentList, writer);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (XsltException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (e.InnerException != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// ScriptDiedException etc.\r\n\t\t\t\t\t\t\tthrow e.InnerException;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch (InvalidOperationException e)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, e.Message);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn new PhpBytes(stream.ToArray());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t///  Sets value for a parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ns\">The namespace URI of the XSLT parameter.</param>\r\n\t\t/// <param name=\"name\">The local name of the XSLT parameter or an array of name =&gt; option pairs.</param>\r\n\t\t/// <param name=\"value\">The new value of the XSLT parameter.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object setParameter(string ns, object name, [Optional] string value)\r\n\t\t{\r\n\t\t\tPhpArray array = name as PhpArray;\r\n\t\t\tif (array != null)\r\n\t\t\t{\r\n\t\t\t\t// set all name => value pairs contained in the array\r\n\t\t\t\tforeach (KeyValuePair<IntStringKey, object> pair in array)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!pair.Key.IsString)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tPhpException.Throw(PhpError.Warning, Resources.InvalidParameterKey);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (xsltArgumentList.GetParam(pair.Key.String, ns) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\txsltArgumentList.RemoveParam(pair.Key.String, ns);\r\n\t\t\t\t\t}\r\n\t\t\t\t\txsltArgumentList.AddParam(pair.Key.String, ns, XsltConvertor.PhpToDotNet(pair.Value));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstring name_str = PHP.Core.Convert.ObjectToString(name);\r\n\r\n\t\t\t\tif (xsltArgumentList.GetParam(name_str, ns) != null) xsltArgumentList.RemoveParam(name_str, ns);\r\n\t\t\t\txsltArgumentList.AddParam(name_str, ns, XsltConvertor.PhpToDotNet(value));\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets value of a parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ns\">The namespace URI of the XSLT parameter.</param>\r\n\t\t/// <param name=\"name\">The local name of the XSLT parameter.</param>\r\n\t\t/// <returns>The value of the parameter or NULL if it's not set.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object getParameter(string ns, string name)\r\n\t\t{\r\n\t\t\treturn XsltConvertor.DotNetToPhp(xsltArgumentList.GetParam(name, ns));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Removes a parameter.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"ns\">The namespace URI of the XSLT parameter.</param>\r\n\t\t/// <param name=\"name\">The local name of the XSLT parameter.</param>\r\n\t\t/// <returns><B>True</B> or <B>false</B>.</returns>\r\n\t\t[PhpVisible]\r\n\t\tpublic object removeParameter(string ns, string name)\r\n\t\t{\r\n\t\t\treturn (xsltArgumentList.RemoveParam(name, ns) != null);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determine if this extension has EXSLT support.\r\n\t\t/// </summary>\r\n\t\t/// <returns><B>False</B>.</returns>\r\n\t\t/// <remarks>\r\n\t\t/// A EXSLT implementation for the .NET XSL can be found here\r\n\t\t/// <A href=\"http://mvp-xml.sourceforge.net/exslt/\">http://mvp-xml.sourceforge.net/exslt/</A>.</remarks>\r\n\t\t[PhpVisible]\r\n\t\tpublic object hasExsltSupport()\r\n\t\t{\r\n\t\t\tif (!mvpXmlAvailable)\r\n\t\t\t{\r\n\t\t\t\tPhpException.Throw(PhpError.Notice, Resources.ExsltSupportMissing);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Enables the ability to use PHP functions as XSLT functions.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"restrict\">A string or array denoting function(s) to be made callable.</param>\r\n\t\t[PhpVisible]\r\n\t\tpublic void registerPHPFunctions([Optional] object restrict)\r\n\t\t{\r\n\t\t\tif (xsltUserFunctionHandler == null)\r\n\t\t\t{\r\n\t\t\t\txsltUserFunctionHandler = new XsltUserFunctionHandler();\r\n\t\t\t\txsltArgumentList.AddExtensionObject(PhpNameSpaceUri, xsltUserFunctionHandler);\r\n\t\t\t}\r\n\r\n\t\t\tif (restrict == null) xsltUserFunctionHandler.RegisterAllFunctions();\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// check for string argument\r\n\t\t\t\tstring func_name = PhpVariable.AsString(restrict);\r\n\t\t\t\tif (func_name != null) xsltUserFunctionHandler.RegisterFunction(func_name);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// check for array argument\r\n\t\t\t\t\tPhpArray func_names = restrict as PhpArray;\r\n\t\t\t\t\tif (func_names != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (KeyValuePair<IntStringKey, object> pair in func_names)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\txsltUserFunctionHandler.RegisterFunction(PHP.Core.Convert.ObjectToString(pair.Key.Object));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse xsltUserFunctionHandler.RegisterAllFunctions();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Provides conversion routines between .NET and PHP representation of W3C data types.\r\n\t/// </summary>\r\n\tinternal static class XsltConvertor\r\n\t{\r\n\t\t#region Conversions\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a W3C .NET object to the corresponding W3C PHP object.\r\n\t\t/// </summary>\r\n\t\tpublic static object DotNetToPhp(object arg)\r\n\t\t{\r\n\t\t\t// Result Tree Fragment (XSLT) / Node (XPath)\r\n\t\t\tXPathNavigator nav = arg as XPathNavigator;\r\n\t\t\tif (nav != null) return DOMNode.Create(nav.UnderlyingObject as XmlNode);\r\n\r\n\t\t\t// Node Set (XPath) - XPathNavigator[]\r\n\t\t\tXPathNavigator[] navs = arg as XPathNavigator[];\r\n\t\t\tif (navs != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray array = new PhpArray(navs.Length, 0);\r\n\r\n\t\t\t\tfor (int i = 0; i < navs.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(navs[i].UnderlyingObject as XmlNode);\r\n\t\t\t\t\tif (node != null) array.Add(node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn array;\r\n\t\t\t}\r\n\r\n\t\t\t// Node Set (XPath) - XPathNodeIterator\r\n\t\t\tXPathNodeIterator iter = arg as XPathNodeIterator;\r\n\t\t\tif (iter != null)\r\n\t\t\t{\r\n\t\t\t\tPhpArray array = new PhpArray();\r\n\r\n\t\t\t\tforeach (XPathNavigator navigator in iter)\r\n\t\t\t\t{\r\n\t\t\t\t\tIXmlDomNode node = DOMNode.Create(navigator.UnderlyingObject as XmlNode);\r\n\t\t\t\t\tif (node != null) array.Add(node);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn array;\r\n\t\t\t}\r\n\r\n\t\t\t// Number (XPath), Boolean (XPath), String (XPath)\r\n\t\t\treturn arg;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a W3C PHP object to the corresponding W3C .NET object.\r\n\t\t/// </summary>\r\n\t\tpublic static object/*!*/ PhpToDotNet(object arg)\r\n\t\t{\r\n\t\t\tif (arg == null) return String.Empty;\r\n\r\n\t\t\t// Node* (XPath)\r\n\t\t\tIXmlDomNode node = arg as IXmlDomNode;\r\n\t\t\tif (node != null) return node.UnderlyingObject.CreateNavigator();\r\n\r\n\t\t\t// Node Set (XPath), Result Tree Fragment (XSLT)\r\n\t\t\tDOMNodeList list = arg as DOMNodeList;\r\n\t\t\tif (list != null)\r\n\t\t\t{\r\n\t\t\t\tXPathNavigator[] navs = new XPathNavigator[list.length];\r\n\r\n\t\t\t\tint i = 0;\r\n                foreach (var pair in (IEnumerable<KeyValuePair<object, object>>)list)\r\n\t\t\t\t{\r\n\t\t\t\t\tnavs[i++] = ((IXmlDomNode)pair.Value).UnderlyingObject.CreateNavigator();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn navs;\r\n\t\t\t}\r\n\r\n\t\t\t// any other object\r\n\t\t\tIPhpVariable var = arg as IPhpVariable;\r\n\t\t\tif (var != null) return var.ToString();\r\n\r\n\t\t\t// String (XPath), Boolean (XPath), Number (XPath)\r\n\t\t\treturn arg;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Converts a W3C PHP object to a corresponding string.\r\n\t\t/// </summary>\r\n\t\tpublic static string/*!*/ PhpToString(object arg)\r\n\t\t{\r\n\t\t\t// Node* (XPath)\r\n\t\t\tIXmlDomNode node = arg as IXmlDomNode;\r\n\t\t\tif (node != null) return node.UnderlyingObject.Value;\r\n\r\n\t\t\t// Node Set (XPath), Result Tree Fragment (XSLT)\r\n\t\t\tDOMNodeList list = arg as DOMNodeList;\r\n\t\t\tif (list != null)\r\n\t\t\t{\r\n\t\t\t\tif (list.length == 0) return String.Empty;\r\n\t\t\t\treturn list.item(0).UnderlyingObject.Value;\r\n\t\t\t}\r\n\r\n\t\t\t// any other object\r\n\t\t\treturn PHP.Core.Convert.ObjectToString(arg);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n\r\n\t/// <summary>\r\n\t/// Handles PHP function invocations via <code>php:function</code> and <code>php:functionString</code>.\r\n\t/// </summary>\r\n\tinternal sealed class XsltUserFunctionHandler\r\n\t{\r\n\t\t#region Fields\r\n\r\n\t\tprivate bool allFunctionsRegistered;\r\n\t\tprivate Dictionary<string, PhpCallback> registeredFunctions = new Dictionary<string, PhpCallback>();\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Function registration\r\n\r\n\t\tinternal void RegisterAllFunctions()\r\n\t\t{\r\n\t\t\tallFunctionsRegistered = true;\r\n\t\t}\r\n\r\n\t\tinternal void RegisterFunction(string functionName)\r\n\t\t{\r\n\t\t\tif (!registeredFunctions.ContainsKey(functionName))\r\n\t\t\t{\r\n\t\t\t\tregisteredFunctions.Add(functionName, null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Function invocation\r\n\r\n\t\tprivate object InvokeFunction(string name, params object[] args)\r\n\t\t{\r\n\t\t\treturn XsltConvertor.PhpToDotNet(InvokeFunctionCore(name, args));\r\n\t\t}\r\n\r\n\t\tprivate string InvokeFunctionString(string name, params object[] args)\r\n\t\t{\r\n\t\t\treturn XsltConvertor.PhpToString(InvokeFunctionCore(name, args));\r\n\t\t}\r\n\r\n\t\tprivate object InvokeFunctionCore(string name, params object[] args)\r\n\t\t{\r\n\t\t\t// check whether this function is allowed to be called\r\n\t\t\tPhpCallback callback;\r\n\t\t\tif (allFunctionsRegistered)\r\n\t\t\t{\r\n\t\t\t\tregisteredFunctions.TryGetValue(name, out callback);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (registeredFunctions.TryGetValue(name, out callback))\r\n\t\t\t\t{\r\n\t\t\t\t\tPhpException.Throw(PhpError.Warning, String.Format(Resources.HandlerNotAllowed, name));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// if the callback does not already exists, create it\r\n\t\t\tif (callback == null)\r\n\t\t\t{\r\n\t\t\t\t// parse name\r\n\t\t\t\tint index = name.IndexOf(\"::\");\r\n\t\t\t\tswitch (index)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase -1: callback = new PhpCallback(name); break;\r\n\t\t\t\t\tcase 0: callback = new PhpCallback(name.Substring(2)); break;\r\n\t\t\t\t\tdefault: callback = new PhpCallback(name.Substring(0, index), name.Substring(index + 2)); break;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!callback.Bind()) return null;\r\n\r\n\t\t\t\tregisteredFunctions[name] = callback;\r\n\t\t\t}\r\n\r\n\t\t\t// convert arguments\r\n\t\t\tfor (int i = 0; i < args.Length; i++) args[i] = XsltConvertor.DotNetToPhp(args[i]);\r\n\r\n\t\t\t// invoke!\r\n\t\t\treturn callback.Invoke(args);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region function (exposed to XSL)\r\n\r\n\t\tpublic object function(string name)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18,\r\n\t\t\tobject arg19)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);\r\n\t\t}\r\n\r\n\t\tpublic object function(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18,\r\n\t\t\tobject arg19, object arg20)\r\n\t\t{\r\n\t\t\treturn InvokeFunction(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region functionString (exposed to XSL)\r\n\r\n\t\tpublic object functionString(string name)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18,\r\n\t\t\tobject arg19)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);\r\n\t\t}\r\n\r\n\t\tpublic object functionString(string name, object arg1, object arg2, object arg3, object arg4,\r\n\t\t\tobject arg5, object arg6, object arg7, object arg8, object arg9, object arg10, object arg11,\r\n\t\t\tobject arg12, object arg13, object arg14, object arg15, object arg16, object arg17, object arg18,\r\n\t\t\tobject arg19, object arg20)\r\n\t\t{\r\n\t\t\treturn InvokeFunctionString(name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,\r\n\t\t\t\targ12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/XmlDom/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"HtmlAgilityPack\" version=\"1.4.9\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "Source/Extensions/XmlDom/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetXmlDom\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/XmlDom/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetXmlDom\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/Zip/Extension.Zip.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{EC3E5E89-7125-448F-BCBA-5F1FF8474B60}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>PHP.Library.Zip</RootNamespace>\r\n    <AssemblyName>PhpNet.Extension.Zip</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <SignAssembly>true</SignAssembly>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL\">\r\n      <HintPath>..\\..\\..\\Solutions\\packages\\SharpZipLib.0.86.0\\lib\\20\\ICSharpCode.SharpZipLib.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"FileHandleDataSource.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"StringDataSource.cs\" />\r\n    <Compile Include=\"ZipArchive.Const.cs\" />\r\n    <Compile Include=\"ZipConfiguration.cs\" />\r\n    <Compile Include=\"ZipGlobalConfig.cs\" />\r\n    <Compile Include=\"ZipLibraryDescriptor.cs\" />\r\n    <Compile Include=\"ZipArchive.cs\" />\r\n    <Compile Include=\"ZipLocalConfig.cs\" />\r\n    <Compile Include=\"ZipStatic.cs\" />\r\n    <Compile Include=\"ZipStreamWrapper.cs\" />\r\n    <None Include=\"..\\Extensions.snk\">\r\n      <Link>Extensions.snk</Link>\r\n    </None>\r\n    <None Include=\"Extension.Zip.nuspec\" />\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{D515E8F4-357C-4CAF-87C1-97D64C5F865A}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Zip/Extension.Zip.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension ZIP Compression Decompression</tags>\n    <dependencies>\n      <dependency id=\"SharpZipLib\" version=\"0.86.0\" />\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Zip/FileHandleDataSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing ICSharpCode.SharpZipLib.Zip;\nusing System.IO;\nusing PHP.Core;\n\nnamespace PHP.Library.Zip\n{\n    internal sealed class FileHandleDataSource : IStaticDataSource\n    {\n        private readonly PhpStream handle;\n        private readonly int flength;\n\n        private readonly MemoryStream m_ms;\n\n        public FileHandleDataSource(PhpStream handle, int flength)\n        {\n            this.handle = handle;\n            this.flength = flength;\n\n            //TODO : Replace memorystream with a better reading/seeking class\n            PhpBytes data;\n\n            if (flength > 0)\n            {\n                data = handle.ReadBytes(flength);\n            }\n            else\n            {\r\n                data = handle.ReadBinaryContents(-1);\n            }\n            this.m_ms = new MemoryStream(data.ReadonlyData);\n        }\n\n        public Stream GetSource()\n        {\n            return this.m_ms;\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing PHP.Core;\n\n[assembly: AssemblyTitle(\"Phalanger PDO\")]\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - Zip\")]\n\n[assembly: PhpLibrary(typeof(PHP.Library.Zip.ZipLibraryDescriptor), \"Zip\", new string[] { \"zip\" })]"
  },
  {
    "path": "Source/Extensions/Zip/StringDataSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing ICSharpCode.SharpZipLib.Zip;\nusing System.IO;\nusing PHP.Core;\n\nnamespace PHP.Library.Zip\n{\n    internal sealed class StringDataSource : IStaticDataSource\n    {\n        private readonly Stream m_src;\n\n        internal StringDataSource(object source)\n        {\n            this.m_src = new MemoryStream(PhpStream.AsBinary(source).ReadonlyData);\n        }\n\n        public Stream GetSource()\n        {\n            return this.m_src;\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipArchive.Const.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Zip\n{\n    partial class ZipArchive\n    {\n        [ImplementsConstant(\"CREATE\")]\n        public const int CREATE = 1;\n        [ImplementsConstant(\"OVERWRITE\")]\n        public const int OVERWRITE = 2;\n        [ImplementsConstant(\"EXCL\")]\n        public const int EXCL = 4;\n        [ImplementsConstant(\"CHECKCONS\")]\n        public const int CHECKCONS = 8;\n        [ImplementsConstant(\"FL_NOCASE\")]\n        public const int FL_NOCASE = 16;\n        [ImplementsConstant(\"FL_NODIR\")]\n        public const int FL_NODIR = 32;\n        [ImplementsConstant(\"FL_COMPRESSED\")]\n        public const int FL_COMPRESSED = 64;\n        [ImplementsConstant(\"FL_UNCHANGED\")]\n        public const int FL_UNCHANGED = 128;\n        [ImplementsConstant(\"CM_DEFAULT\")]\n        public const int CM_DEFAULT = 0;\n        [ImplementsConstant(\"CM_STORE\")]\n        public const int CM_STORE = 1;\n        [ImplementsConstant(\"CM_SHRINK\")]\n        public const int CM_SHRINK = 2;\n        [ImplementsConstant(\"CM_REDUCE_1\")]\n        public const int CM_REDUCE_1 = 3;\n        [ImplementsConstant(\"CM_REDUCE_2\")]\n        public const int CM_REDUCE_2 = 4;\n        [ImplementsConstant(\"CM_REDUCE_3\")]\n        public const int CM_REDUCE_3 = 5;\n        [ImplementsConstant(\"CM_REDUCE_4\")]\n        public const int CM_REDUCE_4 = 6;\n        [ImplementsConstant(\"CM_IMPLODE\")]\n        public const int CM_IMPLODE = 7;\n        [ImplementsConstant(\"CM_DEFLATE\")]\n        public const int CM_DEFLATE = 8;\n        [ImplementsConstant(\"CM_DEFLATE64\")]\n        public const int CM_DEFLATE64 = 9;\n        [ImplementsConstant(\"CM_PKWARE_IMPLODE\")]\n        public const int CM_PKWARE_IMPLODE = 10;\n        [ImplementsConstant(\"CRCREATEEATE\")]\n        public const int CM_BZIP2 = 11;\n\n        [ImplementsConstant(\"ER_CLOSE\")]\n        public const int ER_CLOSE = 3;  /* S Closing zip archive failed */\n        [ImplementsConstant(\"ER_SEEK\")]\n        public const int ER_SEEK = 4;  /* S Seek error */\n        [ImplementsConstant(\"ER_READ\")]\n        public const int ER_READ = 5;  /* S Read error */\n        [ImplementsConstant(\"ER_WRITE\")]\n        public const int ER_WRITE = 6;  /* S Write error */\n        [ImplementsConstant(\"ER_CRC\")]\n        public const int ER_CRC = 7;  /* N CRC error */\n        [ImplementsConstant(\"ER_ZIPCLOSED\")]\n        public const int ER_ZIPCLOSED = 8;  /* N Containing zip archive was closed */\n        [ImplementsConstant(\"ER_NOENT\")]\n        public const int ER_NOENT = 9;  /* N No such file */\n        [ImplementsConstant(\"ER_EXISTS\")]\n        public const int ER_EXISTS = 10;  /* N File already exists */\n        [ImplementsConstant(\"ER_OPEN\")]\n        public const int ER_OPEN = 11;  /* S Can't open file */\n        [ImplementsConstant(\"ER_TMPOPEN\")]\n        public const int ER_TMPOPEN = 12;  /* S Failure to create temporary file */\n        [ImplementsConstant(\"ER_ZLIB\")]\n        public const int ER_ZLIB = 13;  /* Z Zlib error */\n        [ImplementsConstant(\"ER_MEMORY\")]\n        public const int ER_MEMORY = 14;  /* N Malloc failure */\n        [ImplementsConstant(\"ER_CHANGED\")]\n        public const int ER_CHANGED = 15;  /* N Entry has been changed */\n        [ImplementsConstant(\"ER_COMPNOTSUPP\")]\n        public const int ER_COMPNOTSUPP = 16;  /* N Compression method not supported */\n        [ImplementsConstant(\"ER_EOF\")]\n        public const int ER_EOF = 17;  /* N Premature EOF */\n        [ImplementsConstant(\"ER_INVAL\")]\n        public const int ER_INVAL = 18;  /* N Invalid argument */\n        [ImplementsConstant(\"ER_NOZIP\")]\n        public const int ER_NOZIP = 19;  /* N Not a zip archive */\n        [ImplementsConstant(\"ER_INTERNAL\")]\n        public const int ER_INTERNAL = 20;  /* N Internal error */\n        [ImplementsConstant(\"ER_INCONS\")]\n        public const int ER_INCONS = 21;  /* N Zip archive inconsistent */\n        [ImplementsConstant(\"ER_REMOVE\")]\n        public const int ER_REMOVE = 22;  /* S Can't remove file */\n        [ImplementsConstant(\"ER_DELETED\")]\n        public const int ER_DELETED = 23;  /* N Entry has been deleted */\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipArchive.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.ComponentModel;\nusing ICSharpCode.SharpZipLib;\nusing ICSharpCode.SharpZipLib.Zip;\nusing System.IO;\nusing ICSharpCode.SharpZipLib.Core;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Zip\n{\n    [ImplementsType]\n    public partial class ZipArchive : PhpObject\n    {\n        /// <summary>\n        /// Real zip archive\n        /// </summary>\n        private ZipFile m_zip;\n\n        #region Constructor\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public ZipArchive(ScriptContext/*!*/context, bool newInstance)\n            : base(context, newInstance)\n        { }\n\n        /// <summary>\n        /// For internal purposes only.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public ZipArchive(ScriptContext/*!*/context, PHP.Core.Reflection.DTypeDesc caller)\n            : base(context, caller)\n        { }\n\n        public object __construct(ScriptContext context)\n        {\n            return null;\n        }\n\n        public static object __construct(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).__construct(stack.Context);\n        }\n        #endregion\n\n        #region Properties\n        public int status { get { throw new NotImplementedException(); } }\n        public int statusSys { get { throw new NotImplementedException(); } }\n        public int numFiles { get { throw new NotImplementedException(); } }\n        public string filename { get { throw new NotImplementedException(); } }\n        public string comment { get { throw new NotImplementedException(); } }\n        #endregion\n\n        #region addEmptyDir\n        [ImplementsMethod, PhpVisible]\n        public object addEmptyDir(ScriptContext context, object dirname)\n        {\n            string directoryName = Core.Convert.ObjectToString(dirname);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                this.m_zip.AddDirectory(directoryName);\n                this.m_zip.CommitUpdate();\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"ZipArchive::addEmptyDir\", ex.Message);\n                this.m_zip.AbortUpdate();\n                return false;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object addEmptyDir(object instance, PhpStack stack)\n        {\n            object dirname = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).addEmptyDir(stack.Context, dirname);\n        }\n        #endregion\n\n        #region addFile\n        [ImplementsMethod, PhpVisible]\n        public object addFile(ScriptContext context, object filename)\n        {\n            return this.addFile(context, filename, null, 0, 0);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object addFile(ScriptContext context, object filename, object localname)\n        {\n            return this.addFile(context, filename, localname, 0, 0);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object addFile(ScriptContext context, object filename, object localname, object start)\n        {\n            return this.addFile(context, filename, localname, start, 0);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object addFile(ScriptContext context, object filename, object localname, object start, object length)\n        {\n            string fpath = Core.Convert.ObjectToString(filename);\n            string flocal = Core.Convert.ObjectToString(localname);\n            int fstart = Core.Convert.ObjectToInteger(start);\n            int flength = Core.Convert.ObjectToInteger(length);\n\n            try\n            {\n                using (PhpStream handle = PhpStream.Open(fpath, \"r\", StreamOpenOptions.Empty))\n                {\n                    if (fstart > 0)\n                    {\n                        PhpFile.Seek(handle, fstart);\n                    }\n\n                    FileHandleDataSource src = new FileHandleDataSource(handle, flength);\n                    this.m_zip.BeginUpdate();\n                    this.m_zip.Add(src, flocal);\n                    this.m_zip.CommitUpdate();\n                    return true;\n                }\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"ZipArchive::addFile\", ex.Message);\n                return false;\n            }\n        }\n\n        public static object addFile(object instance, PhpStack stack)\n        {\n            object filename = stack.PeekValue(1);\n            object localname = stack.PeekValueOptional(2);\n            object start = stack.PeekValueOptional(3);\n            object length = stack.PeekValueOptional(4);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).addFile(stack.Context, filename, localname, start, length);\n        }\n        #endregion\n\n        #region addFromString\n        [ImplementsMethod, PhpVisible]\n        public object addFromString(ScriptContext context, object localname, object contents)\n        {\n            string name = PHP.Core.Convert.ObjectToString(localname);\n\n            this.m_zip.BeginUpdate();\n            try\n            {\n                StringDataSource src = new StringDataSource(contents);\n                this.m_zip.Add(src, name);\n                this.m_zip.CommitUpdate();\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"ZipArchive::addFromString\", ex.Message);\n                return false;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object addFromString(object instance, PhpStack stack)\n        {\n            object localname = stack.PeekValue(1);\n            object contents = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).addFromString(stack.Context, localname, contents);\n        }\n        #endregion\n\n        #region close\n        [ImplementsMethod, PhpVisible]\n        public object close(ScriptContext context)\n        {\n            this.m_zip.Close();\n            this.m_zip = null;\n            return true;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object close(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).close(stack.Context);\n        }\n        #endregion\n\n        #region deleteIndex\n        [ImplementsMethod, PhpVisible]\n        public object deleteIndex(ScriptContext context, object index)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                ZipEntry entry = this.m_zip[idx];\n                this.m_zip.Delete(entry);\n                this.m_zip.CommitUpdate();\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"ZipArchive::deleteIndex\", ex.Message);\n                this.m_zip.AbortUpdate();\n                return false;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object deleteIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).deleteIndex(stack.Context, index);\n        }\n        #endregion\n\n        #region deleteName\n        [ImplementsMethod, PhpVisible]\n        public object deleteName(ScriptContext context, object name)\n        {\n            string fname = Core.Convert.ObjectToString(name);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                ZipEntry entry = this.m_zip.GetEntry(fname);\n                this.m_zip.Delete(entry);\n                this.m_zip.CommitUpdate();\n                return true;\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"ZipArchive::deleteName\", ex.Message);\n                this.m_zip.AbortUpdate();\n                return false;\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object deleteName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).deleteName(stack.Context, name);\n        }\n        #endregion\n\n        #region extractTo\n        [ImplementsMethod, PhpVisible]\n        public object extractTo(ScriptContext context, object destination)\n        {\n            return this.extractTo(context, destination, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object extractTo(ScriptContext context, object destination, object entries)\n        {\n            string dest = Core.Convert.ObjectToString(destination);\n            if (!System.IO.Directory.Exists(dest))\n            {\n                System.IO.Directory.CreateDirectory(dest);\n            }\n\n            if (entries == null)\n            {\n                //extract all\n                for (int i = 0; i < this.m_zip.Count; i++)\n                {\n                    this.Extract(this.m_zip[i], dest);\n                }\n                return true;\n            }\n            if (entries is PhpArray)\n            {\n                PhpArray arr = (PhpArray)entries;\n                foreach (var key in arr.Keys)\n                {\n                    string name = Core.Convert.ObjectToString(arr[key]);\n                    var entry = this.m_zip.GetEntry(name);\n                    this.Extract(entry, dest);\n                }\n                return true;\n            }\n            string singleName = Core.Convert.ObjectToString(entries);\n            ZipEntry singleEntry = this.m_zip.GetEntry(singleName);\n            this.Extract(singleEntry, dest);\n            return true;\n        }\n\n        private void Extract(ZipEntry entry, string dest)\n        {\n            string entryFileName = entry.Name;\n            string fullZipToPath = Path.Combine(dest, entryFileName);\n            string directoryName = Path.GetDirectoryName(fullZipToPath);\n            if (directoryName.Length > 0)\n            {\n                System.IO.Directory.CreateDirectory(directoryName);\n            }\n\n            using (var zis = this.m_zip.GetInputStream(entry))\n            {\n                byte[] buffer = new byte[4096];\n                using (FileStream fs = File.Create(fullZipToPath, buffer.Length))\n                {\n                    StreamUtils.Copy(zis, fs, buffer);\n                }\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object extractTo(object instance, PhpStack stack)\n        {\n            object destination = stack.PeekValue(1);\n            object entries = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).extractTo(stack.Context, destination, entries);\n        }\n        #endregion\n\n        #region getArchiveComment\n        [ImplementsMethod, PhpVisible]\n        public object getArchiveComment(ScriptContext context)\n        {\n            return this.getArchiveComment(context, (object)null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getArchiveComment(ScriptContext context, object flags)\n        {\n            return this.m_zip.ZipFileComment;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getArchiveComment(object instance, PhpStack stack)\n        {\n            object flags = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getArchiveComment(stack.Context, flags);\n        }\n        #endregion\n\n        //string getCommentIndex ( int $index [, int $flags ] )\n        #region getCommentIndex\n        [ImplementsMethod, PhpVisible]\n        public object getCommentIndex(ScriptContext context, object index)\n        {\n            return this.getCommentIndex(context, index, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getCommentIndex(ScriptContext context, object index, object flags)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            return this.m_zip[idx].Comment;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getCommentIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getCommentIndex(stack.Context, index, flags);\n        }\n        #endregion\n\n        //string getCommentName ( string $name [, int $flags ] )\n        #region getCommentName\n        [ImplementsMethod, PhpVisible]\n        public object getCommentName(ScriptContext context, object name)\n        {\n            return this.getCommentName(context, name, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getCommentName(ScriptContext context, object name, object flags)\n        {\n            string n = Core.Convert.ObjectToString(name);\n            return this.m_zip.GetEntry(n).Comment;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getCommentName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getCommentName(stack.Context, name, flags);\n        }\n        #endregion\n\n        //mixed getFromIndex ( int $index [, int $length = 0 [, int $flags ]] )\n        #region getFromIndex\n        [ImplementsMethod, PhpVisible]\n        public object getFromIndex(ScriptContext context, object index)\n        {\n            return this.getFromIndex(context, index, 0, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getFromIndex(ScriptContext context, object index, object length)\n        {\n            return this.getFromIndex(context, index, length, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getFromIndex(ScriptContext context, object index, object length, object flags)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            long len = Core.Convert.ObjectToLongInteger(length);\n\n            ZipEntry entry = this.m_zip[idx];\n            if (len <= 0)\n            {\n                len = -1;\n            }\n            return this.getFrom(entry, len);\n        }\n\n        private byte[] getFrom(ZipEntry entry, long len)\n        {\n            using (System.IO.MemoryStream ms = new MemoryStream())\n            {\n                using (var zis = this.m_zip.GetInputStream(entry))\n                {\n                    byte[] buffer = new byte[4096];\n                    StreamUtils.Copy(zis, ms, buffer, DummyProgressHandler, TimeSpan.FromDays(1), this, string.Empty, len);\n                }\n                return ms.ToArray();\n            }\n        }\n\n        private static void DummyProgressHandler(object sender, ProgressEventArgs e)\n        {\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getFromIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object length = stack.PeekValueOptional(2);\n            object flags = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getFromIndex(stack.Context, index, length, flags);\n        }\n        #endregion\n\n        //mixed getFromName ( string $name [, int $length = 0 [, int $flags ]] )\n        #region getFromName\n        [ImplementsMethod, PhpVisible]\n        public object getFromName(ScriptContext context, object name)\n        {\n            return this.getFromName(context, name, 0, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getFromName(ScriptContext context, object name, object length)\n        {\n            return this.getFromName(context, name, length, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getFromName(ScriptContext context, object name, object length, object flags)\n        {\n            string n = Core.Convert.ObjectToString(name);\n            long len = Core.Convert.ObjectToLongInteger(length);\n            ZipEntry entry = this.m_zip.GetEntry(n);\n            return this.getFrom(entry, len);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getFromName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object length = stack.PeekValueOptional(2);\n            object flags = stack.PeekValueOptional(3);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getFromName(stack.Context, name, length, flags);\n        }\n        #endregion\n\n        //string getNameIndex ( int $index [, int $flags ] )\n        #region getNameIndex\n        [ImplementsMethod, PhpVisible]\n        public object getNameIndex(ScriptContext context, object index)\n        {\n            return this.getNameIndex(context, index, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object getNameIndex(ScriptContext context, object index, object flags)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            return this.m_zip[idx].Name;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getNameIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getNameIndex(stack.Context, index, flags);\n        }\n        #endregion\n\n        //string getStatusString ( void )\n        #region getStatusString\n        [ImplementsMethod, PhpVisible]\n        public object getStatusString(ScriptContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getStatusString(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getStatusString(stack.Context);\n        }\n        #endregion\n\n        //resource getStream ( string $name )\n        #region getStream\n        [ImplementsMethod, PhpVisible]\n        public object getStream(ScriptContext context, object name)\n        {\n            throw new NotImplementedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object getStream(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).getStream(stack.Context, name);\n        }\n        #endregion\n\n        //mixed locateName ( string $name [, int $flags ] )\n        #region locateName\n        [ImplementsMethod, PhpVisible]\n        public object locateName(ScriptContext context, object name)\n        {\n            return this.locateName(context, name, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object locateName(ScriptContext context, object name, object flags)\n        {\n            string n = Core.Convert.ObjectToString(name);\n            //TODO : handle flags\n            return this.m_zip.FindEntry(n, true);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object locateName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).locateName(stack.Context, name, flags);\n        }\n        #endregion\n\n        //mixed open ( string $filename [, int $flags ] )\n        #region open\n        [ImplementsMethod, PhpVisible]\n        public object open(ScriptContext context, object filename)\n        {\n            return this.open(context, filename, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object open(ScriptContext context, object filename, object flags)\n        {\n            string name = Core.Convert.ObjectToString(filename);\n            this.m_zip = new ZipFile(name);\n            return true;\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object open(object instance, PhpStack stack)\n        {\n            object filename = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).open(stack.Context, filename, flags);\n        }\n        #endregion\n\n        //bool renameIndex ( int $index , string $newname )\n        #region renameIndex\n        [ImplementsMethod, PhpVisible]\n        public object renameIndex(ScriptContext context, object index, object newname)\n        {\n            throw new NotImplementedException();\n\n            //int idx = Core.Convert.ObjectToInteger(index);\n            //string name = Core.Convert.ObjectToString(newname);\n\n            //this.m_zip.BeginUpdate();\n            //try\n            //{\n            //    this.m_zip[idx].Name = name;\n            //}\n            //finally\n            //{\n            //    this.m_zip.CommitUpdate();\n            //}\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object renameIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object newname = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).renameIndex(stack.Context, index, newname);\n        }\n        #endregion\n\n        //bool renameName ( string $name , string $newname )\n        #region renameName\n        [ImplementsMethod, PhpVisible]\n        public object renameName(ScriptContext context, object name, object newname)\n        {\n            throw new NotImplementedException();\n\n            //string idxName = Core.Convert.ObjectToString(name);\n            //string name = Core.Convert.ObjectToString(newname);\n\n            //this.m_zip.BeginUpdate();\n            //try\n            //{\n            // ZipEntry entry = this.m_zip.GetEntry(idxName);\n            //    this.m_zip[idx].Name = name;\n            //}\n            //finally\n            //{\n            //    this.m_zip.CommitUpdate();\n            //}\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object renameName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object newname = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).renameName(stack.Context, name, newname);\n        }\n        #endregion\n\n        //mixed setArchiveComment ( string $comment )\n        #region setArchiveComment\n        [ImplementsMethod, PhpVisible]\n        public object setArchiveComment(ScriptContext context, object comment)\n        {\n            string c = Core.Convert.ObjectToString(comment);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                this.m_zip.SetComment(c);\n                return true;\n            }\n            finally\n            {\n                this.m_zip.CommitUpdate();\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setArchiveComment(object instance, PhpStack stack)\n        {\n            object comment = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).setArchiveComment(stack.Context, comment);\n        }\n        #endregion\n\n        //mixed setCommentIndex ( int $index , string $comment )\n        #region setCommentIndex\n        [ImplementsMethod, PhpVisible]\n        public object setCommentIndex(ScriptContext context, object index, object comment)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            string c = Core.Convert.ObjectToString(comment);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                ZipEntry entry = this.m_zip[idx];\n                entry.Comment = c;\n                return true;\n            }\n            finally\n            {\n                this.m_zip.CommitUpdate();\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setCommentIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object comment = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).setCommentIndex(stack.Context, index, comment);\n        }\n        #endregion\n\n        //mixed setCommentName ( string $name , string $comment )\n        #region setCommentName\n        [ImplementsMethod, PhpVisible]\n        public object setCommentName(ScriptContext context, object name, object comment)\n        {\n            string idxName = Core.Convert.ObjectToString(name);\n            string c = Core.Convert.ObjectToString(comment);\n            this.m_zip.BeginUpdate();\n            try\n            {\n                ZipEntry entry = this.m_zip.GetEntry(idxName);\n                entry.Comment = c;\n                return true;\n            }\n            finally\n            {\n                this.m_zip.CommitUpdate();\n            }\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object setCommentName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object comment = stack.PeekValue(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).setCommentName(stack.Context, name, comment);\n        }\n        #endregion\n\n        //mixed statIndex ( int $index [, int $flags ] )\n        #region statIndex\n        [ImplementsMethod, PhpVisible]\n        public object statIndex(ScriptContext context, object index)\n        {\n            return this.statIndex(context, index, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object statIndex(ScriptContext context, object index, object flags)\n        {\n            int idx = Core.Convert.ObjectToInteger(index);\n            ZipEntry entry = this.m_zip[idx];\n            return this.stat(entry);\n        }\n\n        private PhpArray stat(ZipEntry entry)\n        {\n            PhpArray arr = new PhpArray();\n            arr.Add(\"name\", entry.Name);\n            arr.Add(\"index\", entry.ZipFileIndex);\n            arr.Add(\"size\", entry.Size);\n            //arr.Add(\"comp_method\", (int)entry.CompressionMethod);\n            arr.Add(\"crc\", entry.Crc);\n            return arr;\n\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object statIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).statIndex(stack.Context, index, flags);\n        }\n        #endregion\n\n        //mixed statName ( name $name [, int $flags ] )\n        #region statName\n        [ImplementsMethod, PhpVisible]\n        public object statName(ScriptContext context, object name)\n        {\n            return this.statName(context, name, null);\n        }\n\n        [ImplementsMethod, PhpVisible]\n        public object statName(ScriptContext context, object name, object flags)\n        {\n            string idx = Core.Convert.ObjectToString(name);\n            ZipEntry entry = this.m_zip.GetEntry(idx);\n            return this.stat(entry);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object statName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            object flags = stack.PeekValueOptional(2);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).statName(stack.Context, name, flags);\n        }\n        #endregion\n\n        //mixed unchangeAll ( void )\n        #region unchangeAll\n        [ImplementsMethod, PhpVisible]\n        public object unchangeAll(ScriptContext context)\n        {\n            throw new NotSupportedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object unchangeAll(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).unchangeAll(stack.Context);\n        }\n        #endregion\n\n        //mixed unchangeArchive ( void )\n        #region unchangeArchive\n        [ImplementsMethod, PhpVisible]\n        public object unchangeArchive(ScriptContext context)\n        {\n            throw new NotSupportedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object unchangeArchive(object instance, PhpStack stack)\n        {\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).unchangeArchive(stack.Context);\n        }\n        #endregion\n\n        //mixed unchangeIndex ( int $index )\n        #region unchangeIndex\n        [ImplementsMethod, PhpVisible]\n        public object unchangeIndex(ScriptContext context, object index)\n        {\n            throw new NotSupportedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object unchangeIndex(object instance, PhpStack stack)\n        {\n            object index = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).unchangeIndex(stack.Context, index);\n        }\n        #endregion\n\n        //mixed unchangeName ( string $name )\n        #region unchangeName\n        [ImplementsMethod, PhpVisible]\n        public object unchangeName(ScriptContext context, object name)\n        {\n            throw new NotSupportedException();\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public static object unchangeName(object instance, PhpStack stack)\n        {\n            object name = stack.PeekValue(1);\n            stack.RemoveFrame();\n            return ((ZipArchive)instance).unchangeName(stack.Context, name);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\nusing System.Collections;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Zip\n{\n    public sealed class ZipConfiguration\n    {\n        private ZipConfiguration() { }\n\n        #region Legacy Configuration\n\n        /// <summary>\n        /// Gets, sets, or restores a value of a legacy configuration option.\n        /// </summary>\n        private static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\n        {\n            ZipLocalConfig local = (ZipLocalConfig)config.GetLibraryConfig(ZipLibraryDescriptor.Singleton);\n            ZipLocalConfig @default = DefaultLocal;\n            ZipGlobalConfig global = Global;\n\n            //switch (option)\n            //{\n            //    // local:\n\n            //    // global:\n\n            //}\n\n            Debug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\n            return null;\n        }\n\n        /// <summary>\n        /// Writes Zip legacy options and their values to XML text stream.\n        /// Skips options whose values are the same as default values of Phalanger.\n        /// </summary>\n        /// <param name=\"writer\">XML writer.</param>\n        /// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\n        /// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\n        public static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\n        {\n            if (writer == null)\n                throw new ArgumentNullException(\"writer\");\n            if (options == null)\n                throw new ArgumentNullException(\"options\");\n\n            ZipLocalConfig local = new ZipLocalConfig();\n            ZipGlobalConfig global = new ZipGlobalConfig();\n            PhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\n\n            ow.StartSection(\"Zip\");\n\n            // local:\n\n            // global:\n\n            ow.WriteEnd();\n        }\n\n        /// <summary>\n        /// Registers legacy ini-options.\n        /// </summary>\n        internal static void RegisterLegacyOptions()\n        {\n            //const string s = ZipLibraryDescriptor.ExtensionName;\n            //GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\n\n            //// local:\n\n            //// global:\n        }\n\n        #endregion\n\n        #region Configuration Getters\n\n        /// <summary>\n        /// Gets the library configuration associated with the current script context.\n        /// </summary>\n        public static ZipLocalConfig Local\n        {\n            get\n            {\n                return (ZipLocalConfig)Configuration.Local.GetLibraryConfig(ZipLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the default library configuration.\n        /// </summary>\n        public static ZipLocalConfig DefaultLocal\n        {\n            get\n            {\n                return (ZipLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(ZipLibraryDescriptor.Singleton);\n            }\n        }\n\n        /// <summary>\n        /// Gets the global library configuration.\n        /// </summary>\n        public static ZipGlobalConfig Global\n        {\n            get\n            {\n                return (ZipGlobalConfig)Configuration.Global.GetLibraryConfig(ZipLibraryDescriptor.Singleton);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipGlobalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Zip\n{\n    [Serializable]\n    public sealed class ZipGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal ZipGlobalConfig() { }\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (ZipGlobalConfig)this.MemberwiseClone();\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipLibraryDescriptor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Zip\n{\n    public sealed class ZipLibraryDescriptor : PhpLibraryDescriptor\n    {\n        /// <summary>\n        /// Stores one and only instance of the class that is created when the assembly is loaded.\n        /// </summary>\n        internal static ZipLibraryDescriptor Singleton { get { return singleton; } }\n        private static ZipLibraryDescriptor singleton;\n\n        internal const string ExtensionName = \"Zip\";\n\n        /// <summary>\n        /// Called by the Core after the library is loaded.\n        /// </summary>\n        protected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\n        {\n            base.Loaded(assemblyAttribute, configStore);\n            singleton = this;\n            ZipConfiguration.RegisterLegacyOptions();\n\n            StreamWrapper.RegisterSystemWrapper(new ZipStreamWrapper());\n        }\n\n        /// <summary>\n        /// Parses a configuration section belonging to the MySql library. \n        /// </summary>\n        /// <param name=\"result\">A configuration context.</param>\n        /// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\n        /// <param name=\"section\">A XML node containing the configuration or its part.</param>\n        /// <returns>Updated configuration context.</returns>\n        protected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\n        {\n            // parses XML tree:\n            ConfigUtils.ParseNameValueList(section, context, (ZipLocalConfig)result.Local, (ZipGlobalConfig)result.Global);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Creates empty library configuration context.\n        /// </summary>\n        /// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\n        protected override ConfigContextBase CreateConfigContext()\n        {\n            return new ConfigContextBase(new ZipLocalConfig(), new ZipGlobalConfig());\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipLocalConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.Xml;\n\nnamespace PHP.Library.Zip\n{\n    [Serializable]\n    public sealed class ZipLocalConfig : IPhpConfiguration, IPhpConfigurationSection\n    {\n        internal ZipLocalConfig()\n        {\n        }\n\n        //public int AssocCase = 0;\n\n        /// <summary>\n        /// Creates a deep copy of the configuration record.\n        /// </summary>\n        /// <returns>The copy.</returns>\n        public IPhpConfiguration DeepCopy()\n        {\n            return (ZipLocalConfig)this.MemberwiseClone();\n        }\n\n        /// <summary>\n        /// Parses XML configuration file.\n        /// </summary>\n        public bool Parse(string name, string value, XmlNode node)\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipStatic.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\n\nnamespace PHP.Library.Zip\n{\n    public static class ZipStatic\n    {\n        [ImplementsFunction(\"zip_close\")]\n        public static void zip_close(object zip)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_close\")]\n        public static bool zip_entry_close(object zip_entry)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_compressedsize\")]\n        public static int zip_entry_compressedsize(object zip_entry)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_compressionmethod\")]\n        public static string zip_entry_compressionmethod(object zip_entry)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_filesize\")]\n        public static int zip_entry_filesize(object zip_entry)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_name\")]\n        public static string zip_entry_name(object zip_entry)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_open\")]\n        public static bool zip_entry_open(object zip, object zip_entry)\n        {\n            return zip_entry_open(zip, zip_entry, null);\n        }\n\n        [ImplementsFunction(\"zip_entry_open\")]\n        public static bool zip_entry_open(object zip, object zip_entry, string mode)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_entry_read\")]\n        public static string zip_entry_read(object zip_entry)\n        {\n            return zip_entry_read(zip_entry, 0);\n        }\n\n        [ImplementsFunction(\"zip_entry_read\")]\n        public static string zip_entry_read(object zip_entry, int length)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_open\")]\n        public static object zip_open(string filename)\n        {\n            throw new NotImplementedException();\n        }\n\n        [ImplementsFunction(\"zip_read\")]\n        public static object zip_read(object zip)\n        {\n            throw new NotImplementedException();\n        }\n\n        #region const\n        [ImplementsConstant(\"ZIP_ER_OK\")]\n        public const int ZIP_ER_OK = 0;  /* N No error */\n        [ImplementsConstant(\"ZIP_ER_MULTIDISK\")]\n        public const int ZIP_ER_MULTIDISK = 1;  /* N Multi-disk zip archives not supported */\n        [ImplementsConstant(\"ZIP_ER_RENAME\")]\n        public const int ZIP_ER_RENAME = 2;  /* S Renaming temporary file failed */\n        [ImplementsConstant(\"ZIP_ER_CLOSE\")]\n        public const int ZIP_ER_CLOSE = 3;  /* S Closing zip archive failed */\n        [ImplementsConstant(\"ZIP_ER_SEEK\")]\n        public const int ZIP_ER_SEEK = 4;  /* S Seek error */\n        [ImplementsConstant(\"ZIP_ER_READ\")]\n        public const int ZIP_ER_READ = 5;  /* S Read error */\n        [ImplementsConstant(\"ZIP_ER_WRITE\")]\n        public const int ZIP_ER_WRITE = 6;  /* S Write error */\n        [ImplementsConstant(\"ZIP_ER_CRC\")]\n        public const int ZIP_ER_CRC = 7;  /* N CRC error */\n        [ImplementsConstant(\"ZIP_ER_ZIPCLOSED\")]\n        public const int ZIP_ER_ZIPCLOSED = 8;  /* N Containing zip archive was closed */\n        [ImplementsConstant(\"ZIP_ER_NOENT\")]\n        public const int ZIP_ER_NOENT = 9;  /* N No such file */\n        [ImplementsConstant(\"ZIP_ER_EXISTS\")]\n        public const int ZIP_ER_EXISTS = 10;  /* N File already exists */\n        [ImplementsConstant(\"ZIP_ER_OPEN\")]\n        public const int ZIP_ER_OPEN = 11;  /* S Can't open file */\n        [ImplementsConstant(\"ZIP_ER_TMPOPEN\")]\n        public const int ZIP_ER_TMPOPEN = 12;  /* S Failure to create temporary file */\n        [ImplementsConstant(\"ZIP_ER_ZLIB\")]\n        public const int ZIP_ER_ZLIB = 13;  /* Z Zlib error */\n        [ImplementsConstant(\"ZIP_ER_MEMORY\")]\n        public const int ZIP_ER_MEMORY = 14;  /* N Malloc failure */\n        [ImplementsConstant(\"ZIP_ER_CHANGED\")]\n        public const int ZIP_ER_CHANGED = 15;  /* N Entry has been changed */\n        [ImplementsConstant(\"ZIP_ER_COMPNOTSUPP\")]\n        public const int ZIP_ER_COMPNOTSUPP = 16;  /* N Compression method not supported */\n        [ImplementsConstant(\"ZIP_ER_EOF\")]\n        public const int ZIP_ER_EOF = 17;  /* N Premature EOF */\n        [ImplementsConstant(\"ZIP_ER_INVAL\")]\n        public const int ZIP_ER_INVAL = 18;  /* N Invalid argument */\n        [ImplementsConstant(\"ZIP_ER_NOZIP\")]\n        public const int ZIP_ER_NOZIP = 19;  /* N Not a zip archive */\n        [ImplementsConstant(\"ZIP_ER_INTERNAL\")]\n        public const int ZIP_ER_INTERNAL = 20;  /* N Internal error */\n        [ImplementsConstant(\"ZIP_ER_INCONS\")]\n        public const int ZIP_ER_INCONS = 21;  /* N Zip archive inconsistent */\n        [ImplementsConstant(\"ZIP_ER_REMOVE\")]\n        public const int ZIP_ER_REMOVE = 22;  /* S Can't remove file */\n        [ImplementsConstant(\"ZIP_ER_DELETED\")]\n        public const int ZIP_ER_DELETED = 23;  /* N Entry has been deleted */\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/ZipStreamWrapper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing PHP.Core;\nusing System.IO;\nusing ICSharpCode.SharpZipLib.Zip;\r\nusing System.Diagnostics;\n\nnamespace PHP.Library.Zip\n{\n    public sealed class ZipStreamWrapper : StreamWrapper\n    {\n        public const string scheme = \"zip\";\n\n        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\n        {\n            //From filestreamwrapper\n            Debug.Assert(path != null);\n            //Debug.Assert(PhpPath.IsLocalFile(path));\n\n            // Get the File.Open modes from the mode string\n            FileMode fileMode;\n            FileAccess fileAccess;\n            StreamAccessOptions ao;\n\n            if (!ParseMode(mode, options, out fileMode, out fileAccess, out ao)) return null;\n\n            string[] arr = path.Split('#');\n            string archive = arr[0];\n            string entry = arr[1];\n\n            // Open the native stream\n            ZipFile zip = null;\n            try\n            {\n                // stream = File.Open(path, fileMode, fileAccess, FileShare.ReadWrite);\n                zip = new ZipFile(File.Open(archive, FileMode.Open, FileAccess.Read, FileShare.Read));\n            }\n            catch (FileNotFoundException)\n            {\n                // Note: There may still be an URL in the path here.\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_not_exists\",\n                    FileSystemUtils.StripPassword(path)));\n\n                return null;\n            }\n            catch (IOException e)\n            {\n                if ((ao & StreamAccessOptions.Exclusive) > 0)\n                {\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_exists\",\n                        FileSystemUtils.StripPassword(path)));\n                }\n                else\n                {\n                    PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_io_error\",\n                        FileSystemUtils.StripPassword(path), PhpException.ToErrorMessage(e.Message)));\n                }\n                return null;\n            }\n            catch (UnauthorizedAccessException)\n            {\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_access_denied\",\n                    FileSystemUtils.StripPassword(path)));\n                return null;\n            }\n            catch (Exception)\n            {\n                PhpException.Throw(PhpError.Warning, CoreResources.GetString(\"stream_file_invalid\",\n                    FileSystemUtils.StripPassword(path)));\n                return null;\n            }\n\n            if ((ao & StreamAccessOptions.SeekEnd) > 0)\n            {\n                throw new NotSupportedException();\n            }\n\n            if ((ao & StreamAccessOptions.Temporary) > 0)\n            {\n                // Set the file attributes to Temporary too.\n                throw new NotSupportedException();\n            }\n\n            if (zip == null)\n            {\n                return null;\n            }\n            ZipEntry zEntry = zip.GetEntry(entry);\n            if (zEntry == null)\n            {\n                return null;\n            }\n            Stream s = zip.GetInputStream(zEntry);\n            return new NativeStream(s, this, ao, path, context);\n        }\n\n        public override string Label { get { return \"zipfile\"; } }\n        public override string Scheme { get { return scheme; } }\n\n        public override bool IsUrl\n        {\n            get { throw new NotImplementedException(); }\n        }\n    }\n}\n"
  },
  {
    "path": "Source/Extensions/Zip/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"SharpZipLib\" version=\"0.86.0\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "Source/Extensions/Zip/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetZip\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Zip/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetZip\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing PHP.Core;\r\n\r\n[assembly: AssemblyTitle(\"Phalanger Zlib\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - Zlib\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Zlib.ZlibLibraryDescriptor), \"zlib\", new string[] { \"zlib\" })]"
  },
  {
    "path": "Source/Extensions/Zlib/BinaryChunkQueue.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n    /// <summary>\r\n    /// Queue of binary chunks that can be pushed to and popped from.\r\n    /// </summary>\r\n    internal class BinaryChunkQueue\r\n    {\r\n        /// <summary>\r\n        /// Internal representation of chunk.\r\n        /// </summary>\r\n        private class Chunk\r\n        {\r\n            /// <summary>\r\n            /// Byte array.\r\n            /// </summary>\r\n            public byte[] Bytes { get; private set; }\r\n\r\n            /// <summary>\r\n            /// Starting offset.\r\n            /// </summary>\r\n            public int Offset { get; private set; }\r\n\r\n            /// <summary>\r\n            /// Length of the chunk.\r\n            /// </summary>\r\n            public int Length { get; private set; }\r\n\r\n            /// <summary>\r\n            /// Initializes new binary chunk.\r\n            /// </summary>\r\n            /// <param name=\"chunk\">Non-null reference to byte array.</param>\r\n            /// <param name=\"offset\">Starting offset in the chunk.</param>\r\n            /// <param name=\"length\">Length of the valid area in the chunk.</param>\r\n            public Chunk(byte[] chunk, int offset, int length)\r\n            {\r\n                Bytes = chunk;\r\n                Offset = offset;\r\n                Length = length;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Available bytes within the binary chunk queue.\r\n        /// </summary>\r\n        private int _availableBytes;\r\n\r\n        /// <summary>\r\n        /// List of chunks.\r\n        /// </summary>\r\n        private LinkedList<Chunk> _chunks;\r\n\r\n        /// <summary>\r\n        /// Position within the first chunk, if possible (otherwise -1).\r\n        /// </summary>\r\n        private int _position;\r\n\r\n        /// <summary>\r\n        /// Gets total available bytes within the queue.\r\n        /// </summary>\r\n        public int AvailableBytes { get { return _availableBytes; } }\r\n\r\n        /// <summary>\r\n        /// Pushes new chunk into the queue.\r\n        /// </summary>\r\n        /// <param name=\"chunk\">Byte array.</param>\r\n        public void Push(byte[] chunk)\r\n        {\r\n            EnqueueByteBlock(chunk, 0, chunk.Length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pushes new chunk into the queue.\r\n        /// </summary>\r\n        /// <param name=\"chunk\">Byte array.</param>\r\n        /// <param name=\"offset\">Offset of the valid area of the chunk.</param>\r\n        /// <param name=\"length\">Length of valid area of the chunk.</param>\r\n        public void EnqueueByteBlock(byte[] chunk, int offset, int length)\r\n        {\r\n            Debug.Assert(chunk != null);\r\n            Debug.Assert(offset >= 0 && offset < chunk.Length);\r\n            Debug.Assert(length > 0 && offset + length <= chunk.Length);\r\n\r\n            Chunk newChunk = new Chunk(chunk, offset, length);\r\n\r\n            _chunks.AddLast(newChunk);\r\n            _availableBytes += length;\r\n\r\n            if (_position == -1)\r\n            {\r\n                Debug.Assert(_chunks.First.Value == newChunk);\r\n                _position = newChunk.Offset;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pushes new chunk into the beginning of the queue.\r\n        /// </summary>\r\n        /// <param name=\"chunk\">Byte array.</param>\r\n        /// <param name=\"offset\">Offset of the valid area of the chunk.</param>\r\n        /// <param name=\"length\">Length of valid area of the chunk.</param>\r\n        public void PushByteBlock(byte[] chunk, int offset, int length)\r\n        {\r\n            Debug.Assert(chunk != null);\r\n            Debug.Assert(offset >= 0 && offset < chunk.Length);\r\n            Debug.Assert(length > 0 && offset + length <= chunk.Length);\r\n\r\n            if (_chunks.First != null && _position != _chunks.First.Value.Offset)\r\n            {\r\n                //change the first chunk if needed\r\n                Chunk old = _chunks.First.Value;\r\n                Chunk replacement = new Chunk(old.Bytes, _position, old.Length - (_position - old.Offset));\r\n                _chunks.RemoveFirst();\r\n                _chunks.AddFirst(replacement);\r\n            }\r\n\r\n            Chunk newChunk = new Chunk(chunk, offset, length);\r\n\r\n            _chunks.AddFirst(newChunk);\r\n            _availableBytes += length;\r\n            _position = newChunk.Offset;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pops a single byte from the queue, removing it in the process.\r\n        /// </summary>\r\n        /// <returns>Next byte value if there was any present, otherwise null.</returns>\r\n        public byte? DequeueByte()\r\n        {\r\n            if (_chunks.First == null)\r\n            {\r\n                Debug.Assert(_position == -1);\r\n                return null;\r\n            }\r\n            else\r\n            {\r\n                Chunk current = _chunks.First.Value;\r\n\r\n                Debug.Assert(_position >= current.Offset);\r\n                Debug.Assert(_position < current.Offset + current.Length);\r\n                Debug.Assert(_availableBytes > 0);\r\n\r\n                byte ret = current.Bytes[_position];\r\n\r\n                _position++;\r\n                _availableBytes--;\r\n\r\n                if (_position >= current.Offset + current.Length)\r\n                {\r\n                    // move to the next chunk and remove the first\r\n                    _chunks.RemoveFirst();\r\n\r\n                    if (_chunks.First == null)\r\n                    {\r\n                        _position = -1;\r\n                    }\r\n                    else\r\n                    {\r\n                        _position = _chunks.First.Value.Offset;\r\n                    }\r\n                }\r\n\r\n                return ret;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Peeks a single byte from the queue.\r\n        /// </summary>\r\n        /// <returns>Next byte value if there was any present, otherwise null.</returns>\r\n        public byte? PeekByte()\r\n        {\r\n            if (_chunks.First == null)\r\n            {\r\n                Debug.Assert(_position == -1);\r\n                return null;\r\n            }\r\n            else\r\n            {\r\n                Chunk current = _chunks.First.Value;\r\n\r\n                Debug.Assert(_position >= current.Offset);\r\n                Debug.Assert(_position < current.Offset + current.Length);\r\n\r\n                return current.Bytes[_position];\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pops a byte block from the queue, removing it in the process.\r\n        /// </summary>\r\n        /// <param name=\"length\">Requested length of the block.</param>\r\n        /// <returns>Block of bytes of requested length if available, otherwise null.</returns>\r\n        public byte[] DequeueByteBlock(int length)\r\n        {\r\n            // non-negative length\r\n            Debug.Assert(length >= 0);\r\n\r\n            if (length == 0)\r\n            {\r\n                // fast branch for requested zero length\r\n                return new byte[0];\r\n            }\r\n            else if (_availableBytes < length)\r\n            {\r\n                // block of that length is not available\r\n                return null;\r\n            }\r\n            else if (_position == 0 && _chunks.First != null && _chunks.First.Value.Offset == 0 && _chunks.First.Value.Length == length)\r\n            {\r\n                // fast track for getting the whole first block without copying\r\n                byte[] ret = _chunks.First.Value.Bytes;\r\n\r\n                // remove the first block\r\n                _chunks.RemoveFirst();\r\n\r\n                //update available bytes\r\n                _availableBytes -= length;\r\n\r\n                //update position;\r\n                if (_chunks.First == null)\r\n                {\r\n                    _position = -1;\r\n                }\r\n                else\r\n                {\r\n                    _position = _chunks.First.Value.Offset;\r\n                }\r\n\r\n                return ret;\r\n            }\r\n            else\r\n            {\r\n                byte[] block = new byte[length];\r\n                int offset = 0;\r\n\r\n                while (offset < length)\r\n                {\r\n                    // there should always be chunk available\r\n                    Debug.Assert(_chunks.First != null);\r\n\r\n                    Chunk record = _chunks.First.Value;\r\n                    int remainingLength = record.Offset + record.Length - _position;\r\n                    int copyLength = length - offset < remainingLength ? length - offset : remainingLength;\r\n\r\n                    // position should be inside valid area of the chunk and not past the end\r\n                    Debug.Assert(_position >= record.Offset && _position < record.Offset + record.Length);\r\n                    // available bytes should be higher than chunk's remaining bytes\r\n                    Debug.Assert(_availableBytes >= remainingLength);\r\n                    // length to copy should be positive and not higher than block's remaining bytes\r\n                    Debug.Assert(copyLength > 0 && copyLength <= remainingLength);\r\n\r\n                    // perform the operation\r\n                    Buffer.BlockCopy(\r\n                        record.Bytes,\r\n                        _position,\r\n                        block,\r\n                        offset,\r\n                        copyLength);\r\n\r\n                    // update offset and available bytes\r\n                    offset += copyLength;\r\n                    _availableBytes -= copyLength;\r\n\r\n                    Debug.Assert(offset <= length);\r\n\r\n                    if (copyLength < remainingLength)\r\n                    {\r\n                        // update the position within the current block\r\n                        _position += copyLength;\r\n\r\n                        // this should be always the last iteration\r\n                        Debug.Assert(offset == length);\r\n                    }\r\n                    else\r\n                    {\r\n                        // the chunk is finished - remove it\r\n                        _chunks.RemoveFirst();\r\n\r\n                        if (_chunks.First != null)\r\n                        {\r\n                            // there is successor to this chunk\r\n                            _position = _chunks.First.Value.Offset;\r\n                        }\r\n                        else\r\n                        {\r\n                            // there is no successor to this chunk\r\n                            _position = -1;\r\n\r\n                            // this should be always the last iteration\r\n                            Debug.Assert(offset == length);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return block;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Skips the given count of bytes in the queue.\r\n        /// </summary>\r\n        /// <param name=\"length\">Number of bytes to skip.</param>\r\n        /// <returns>True if the given count of bytes was available, otherwise false.</returns>\r\n        public bool SkipByteBlock(int length)\r\n        {\r\n            Debug.Assert(length >= 0);\r\n\r\n            if (length == 0)\r\n            {\r\n                return true;\r\n            }\r\n            else if (_availableBytes < length)\r\n            {\r\n                // cannot advance that much\r\n                return false;\r\n            }\r\n            else\r\n            {\r\n                int alreadySkipped = 0;\r\n\r\n                while (alreadySkipped < length)\r\n                {\r\n                    // there should always be chunk available\r\n                    Debug.Assert(_chunks.First != null);\r\n\r\n                    Chunk chunk = _chunks.First.Value;\r\n                    int remainingLength = chunk.Offset + chunk.Length - _position;\r\n                    int advanceLength = length - alreadySkipped < remainingLength ? length - alreadySkipped : remainingLength;\r\n\r\n                    // position should be inside valid area of the chunk and not past the end\r\n                    Debug.Assert(_position >= chunk.Offset && _position < chunk.Offset + chunk.Length);\r\n                    // available bytes should be higher than chunk's remaining bytes\r\n                    Debug.Assert(_availableBytes >= remainingLength);\r\n                    // count to skip should be positive and not higher than chunk's remaining bytes\r\n                    Debug.Assert(advanceLength > 0 && advanceLength <= remainingLength);\r\n\r\n\r\n                    // update skipped count and available bytes\r\n                    alreadySkipped += advanceLength;\r\n                    _availableBytes -= advanceLength;\r\n\r\n                    Debug.Assert(alreadySkipped <= length);\r\n\r\n                    if (advanceLength < remainingLength)\r\n                    {\r\n                        // update the position within the current block\r\n                        _position += advanceLength;\r\n\r\n                        // this should be always the last iteration\r\n                        Debug.Assert(alreadySkipped == length);\r\n                    }\r\n                    else\r\n                    {\r\n                        // the chunk is finished - remove it\r\n                        _chunks.RemoveFirst();\r\n\r\n                        if (_chunks.First != null)\r\n                        {\r\n                            // there is successor to this chunk\r\n                            _position = _chunks.First.Value.Offset;\r\n                        }\r\n                        else\r\n                        {\r\n                            // there is no successor to this chunk\r\n                            _position = -1;\r\n\r\n                            // this should be always the last iteration\r\n                            Debug.Assert(alreadySkipped == length);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes new instance of the class.\r\n        /// </summary>\r\n        public BinaryChunkQueue()\r\n        {\r\n            _chunks = new LinkedList<Chunk>();\r\n            _availableBytes = 0;\r\n            _position = -1;\r\n        }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n    /// Script independent Zlib configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class ZlibLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n        internal ZlibLocalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (ZlibLocalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script dependent MSSQL configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class ZlibGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal ZlibGlobalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\"></param>\r\n\t\t/// <param name=\"value\"></param>\r\n\t\t/// <param name=\"node\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (ZlibGlobalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n    /// Zlib extension configuration.\r\n\t/// </summary>\r\n    public static class ZlibConfiguration\r\n\t{\r\n\t\t#region Legacy Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n            ZlibLocalConfig local = (ZlibLocalConfig)config.GetLibraryConfig(ZlibLibraryDescriptor.Singleton);\r\n            ZlibLocalConfig @default = DefaultLocal;\r\n            ZlibGlobalConfig global = Global;\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n                //// local:\r\n\r\n                //case \"mssql.connect_timeout\":\r\n                //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n                //case \"mssql.timeout\":\r\n                //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n                //case \"mssql.batchsize\":\r\n                //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n                // global:  \r\n\r\n                case \"zlib.output_compression\":\r\n                Debug.Assert(action == IniAction.Get, \"Setting zlib.output_compression is not currently implemented.\");\r\n                return false;\r\n\r\n                case \"zlib.output_compression_level\":\r\n                Debug.Assert(action == IniAction.Get, \"Setting zlib.output_compression_level is not currently implemented.\");\r\n                return -1;\r\n\r\n                case \"zlib.output_handler\":\r\n                Debug.Assert(action == IniAction.Get, \"Setting zlib.output_handler is not currently implemented.\");\r\n                return \"\";\r\n\t\t\t}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is not currently supported.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes MySql legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n            ZlibLocalConfig local = new ZlibLocalConfig();\r\n\t\t\tZlibGlobalConfig global = new ZlibGlobalConfig();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            ow.StartSection(\"zlib\");\r\n\r\n            //ow.WriteOption(\"zlib.output_compression\", \"OutputCompression\", \"Off\", \"Off\");\r\n            //ow.WriteOption(\"zlib.output_compression_level\", \"OutputCompression\", -1, -1);\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\tconst string s = ZlibLibraryDescriptor.ExtensionName;\r\n\t\t\tGetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            IniOptions.Register(\"zlib.output_compression\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            IniOptions.Register(\"zlib.output_compression_level\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            IniOptions.Register(\"zlib.output_handler\", IniFlags.Supported | IniFlags.Global, d, s);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n        public static ZlibLocalConfig Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (ZlibLocalConfig)Configuration.Local.GetLibraryConfig(ZlibLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n        public static ZlibLocalConfig DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (ZlibLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(ZlibLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the global library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static ZlibGlobalConfig Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (ZlibGlobalConfig)Configuration.Global.GetLibraryConfig(ZlibLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n        public static ZlibLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n            return (ZlibLocalConfig)context.Config.GetLibraryConfig(ZlibLibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/Extension.Zlib.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{630C04B5-0B38-4883-981E-2F094982D49D}</ProjectGuid>\r\n    <AssemblyName>PhpNet.Extension.Zlib</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Zlib</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n    <Reference Include=\"zlib.net, Version=1.0.3.0, Culture=neutral, PublicKeyToken=47d7877cb3620160\">\r\n      <HintPath>..\\..\\..\\Solutions\\packages\\zlib.net.1.0.4.0\\lib\\zlib.net.dll</HintPath>\r\n      <Private>True</Private>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"BinaryChunkQueue.cs\" />\r\n    <Compile Include=\"Configuration.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LibraryDescriptor.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"PhpZlib.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ZlibFilter.cs\" />\r\n    <Compile Include=\"ZlibFilterFactory.cs\" />\r\n    <Compile Include=\"ZlibStreamWrapper.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.Zlib.nuspec\" />\r\n    <None Include=\"packages.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/Extension.Zlib.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger Extension ZLib Compression Decompression</tags>\n    <dependencies>\n      <dependency id=\"zlib.net\" version=\"1.0.4.0\" />\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/Zlib/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n\tpublic sealed class ZlibLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal static ZlibLibraryDescriptor Singleton { get { return singleton; } }\r\n\t\tprivate static ZlibLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtensionName }; }\r\n        //}\r\n        internal const string ExtensionName = \"zlib\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\r\n            PhpFilter.AddSystemFilter(new ZlibFilterFactory());\r\n\r\n            StreamWrapper.SystemStreamWrappers.Add(ZlibStreamWrapper.scheme, new ZlibStreamWrapper());\r\n\r\n\t\t\tZlibConfiguration.RegisterLegacyOptions();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the MSSQL library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (ZlibLocalConfig)result.Local, (ZlibGlobalConfig)result.Global);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n            return new ConfigContextBase(new ZlibLocalConfig(), new ZlibGlobalConfig());\r\n\t\t}\r\n\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/Extensions/Zlib/PhpZlib.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2011 DEVSENSE s.r.o.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.Data.SqlClient;\r\n\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\n\r\nusing zlib;\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n    [Serializable]\r\n    public class PhpZlibResource : PhpResource\r\n    {\r\n        public PhpZlibResource()\r\n            :base(\"zlib\") // TODO\r\n        { }\r\n    }\r\n\r\n\t/// <summary>\r\n    /// Implements PHP functions provided by multi-byte-string extension.\r\n\t/// </summary>\r\n    public static class Zlib\r\n\t{\r\n        /// <summary>\r\n        /// Zlib force* constants.\r\n        /// </summary>\r\n        public enum ForceConstants\r\n        {\r\n            [ImplementsConstant(\"FORCE_GZIP\")]\r\n            FORCE_GZIP = 1,\r\n\r\n            [ImplementsConstant(\"FORCE_DEFLATE\")]\r\n            FORCE_DEFLATE = 2,\r\n        }\r\n\r\n        internal static readonly byte[] GZIP_HEADER = new byte[] { 0x1f, 0x8b};\r\n        internal const byte GZIP_HEADER_EXTRAFIELD = 4;\r\n        internal const byte GZIP_HEADER_FILENAME = 8;\r\n        internal const byte GZIP_HEADER_COMMENT = 16;\r\n        internal const byte GZIP_HEADER_CRC = 2;\r\n        internal const byte Z_DEFLATED = 8;\r\n        internal const byte GZIP_HEADER_RESERVED_FLAGS = 0xe0;\r\n        internal const byte OS_CODE = 0x03;\r\n        internal const int MAX_WBITS = 15;\r\n        internal const int PHP_ZLIB_MODIFIER = 100;\r\n\r\n        internal const int GZIP_HEADER_LENGTH = 10;\r\n        internal const int GZIP_FOOTER_LENGTH = 8;\r\n\r\n\t\tinternal static string z_error = \"\";\n\n        internal static string zError(int status)\r\n        {\r\n            return z_error;\n        }\r\n\r\n        #region gzclose, gzopen\r\n\r\n        /// <summary>\r\n        /// Closes the given gz-file pointer.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure.</returns>\r\n        [ImplementsFunction(\"gzclose\")]\r\n        public static bool GzClose(PhpResource zp)\r\n        {\r\n            return PhpFile.Close(zp);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Opens a gzip (.gz) file for reading or writing. \r\n        /// </summary> \r\n        /// <param name=\"filename\">The file name.</param>\r\n        /// <param name=\"mode\">\r\n        ///     As in fopen() (rb or wb) but can also include a compression level (wb9) or a strategy: f for filtered data as\r\n        ///     in wb6f, h for Huffman only compression as in wb1h.\r\n        /// </param>\r\n        /// <returns>\r\n        ///     <para>Returns a file pointer to the file opened, after that, everything you read from this file descriptor will be \r\n        ///     transparently decompressed and what you write gets compressed.</para>\r\n        ///     <para>If the open fails, the function returns FALSE.</para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzopen\")]\r\n        public static PhpResource GzOpen(string filename, string mode)\r\n        {\r\n            return GzOpen(filename, mode, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Opens a gzip (.gz) file for reading or writing.\r\n        /// </summary>\r\n        /// <param name=\"filename\">The file name.</param>\r\n        /// <param name=\"mode\">\r\n        ///     As in fopen() (rb or wb) but can also include a compression level (wb9) or a strategy: f for filtered data as\r\n        ///     in wb6f, h for Huffman only compression as in wb1h.\r\n        /// </param>\r\n        /// <param name=\"use_include_path\">\r\n        ///     You can set this optional parameter to 1, if you want to search for the file in the include_path too.\r\n        /// </param>\r\n        /// <returns>\r\n        ///     <para>Returns a file pointer to the file opened, after that, everything you read from this file descriptor will be \r\n        ///     transparently decompressed and what you write gets compressed.</para>\r\n        ///     <para>If the open fails, the function returns FALSE.</para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzopen\")]\r\n        public static PhpResource GzOpen(string filename, string mode, int use_include_path)\r\n        {\r\n            return new ZlibStreamWrapper().Open(\r\n                ref filename,\r\n                mode,\r\n                use_include_path == 1 ? StreamOpenOptions.UseIncludePath : StreamOpenOptions.Empty,\r\n                null);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzcompress, gzuncompress\r\n\r\n        /// <summary>\r\n        /// This function compresses the given string using the ZLIB data format.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to compress.</param>\r\n        /// <returns>The compressed string or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzcompress\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzCompress(PhpBytes data)\r\n        {\r\n            return GzCompress(data, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function compress the given string using the ZLIB data format.\r\n        /// </summary> \r\n        /// <param name=\"data\">The data to compress.</param>\r\n        /// <param name=\"level\">The level of compression. Can be given as 0 for no compression up to 9 for maximum compression.</param>\r\n        /// <returns>The compressed string or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzcompress\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzCompress(PhpBytes data, int level)\r\n        {\r\n            if ((level < -1) || (level > 9)) {\r\n\t\t        PhpException.Throw(PhpError.Warning, String.Format(\"compression level ({0}) must be within -1..9\", level));\r\n\t\t        return null;\r\n\t        }\r\n\r\n            int length_bound = data.Length + (data.Length / PHP_ZLIB_MODIFIER) + 15 + 1;\r\n\r\n            byte[] output;\r\n\r\n            try\r\n            {\r\n                output = new byte[length_bound];\r\n            }\r\n            catch (OutOfMemoryException)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            int status;\r\n\r\n            status = ZlibCompress(ref output, data.ReadonlyData, level);\r\n\r\n            if (status == zlibConst.Z_OK)\r\n            {\r\n                return new PhpBytes(output);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function uncompress a compressed string.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data compressed by gzcompress().</param>\r\n        /// <returns>\r\n        ///     <para>\r\n        ///         The original uncompressed data or FALSE on error.\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         The function will return an error if the uncompressed data is more than 32768 times the length of the compressed\r\n        ///         input data or more than the optional parameter length.\r\n        ///     </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzuncompress\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzUncompress(PhpBytes data)\r\n        {\r\n            return GzUncompress(data, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function uncompress a compressed string.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data compressed by gzcompress().</param>\r\n        /// <param name=\"length\">The maximum length of data to decode.</param>\r\n        /// <returns>\r\n        ///     <para>\r\n        ///         The original uncompressed data or FALSE on error.\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         The function will return an error if the uncompressed data is more than 32768 times the length of the compressed\r\n        ///         input data or more than the optional parameter length.\r\n        ///     </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzuncompress\")]\r\n        [return:CastToFalse]\r\n        public static PhpBytes GzUncompress(PhpBytes data, int length)\r\n        {\r\n            if (length   < 0)\r\n            {\r\n\t\t        PhpException.Throw(PhpError.Warning, String.Format(\"length {0} must be greater or equal zero\", length));\r\n                return null;\r\n\t        }\r\n\r\n            int ilength;\r\n            int factor = 1, maxfactor = 16;\r\n            byte[] output;\r\n            int status;\r\n\r\n            do\r\n            {\r\n                ilength = length != 0 ? length : (data.Length * (1 << factor++));\r\n\r\n                try\r\n                {\r\n                    output = new byte[ilength];\r\n                }\r\n                catch (OutOfMemoryException)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                status = ZlibUncompress(ref output, data.ReadonlyData);\r\n            }\r\n            while ((status == zlibConst.Z_BUF_ERROR) && (length == 0) && (factor < maxfactor));\r\n\r\n            if (status == zlibConst.Z_OK)\r\n            {\r\n                return new PhpBytes(output);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reimplements function from zlib (compress2) that is not present in ZLIB.NET.\r\n        /// </summary>\r\n        /// <param name=\"dest\">Destination array of bytes. May be trimmed if necessary.</param>\r\n        /// <param name=\"source\">Source array of bytes.</param>\r\n        /// <param name=\"level\">Level of compression.</param>\r\n        /// <returns>Zlib status code.</returns>\r\n        private static int ZlibCompress(ref byte[] dest, byte[] source, int level)\r\n        {\r\n            ZStream stream = new ZStream();\r\n            int err;\r\n\r\n            stream.next_in = source;\r\n            stream.avail_in = source.Length;\r\n            stream.next_out = dest;\r\n            stream.avail_out = dest.Length;\r\n\r\n            err = stream.deflateInit(level);\r\n            if (err != zlibConst.Z_OK) return err;\r\n\r\n            err = stream.deflate(zlibConst.Z_FINISH);\r\n            if (err != zlibConst.Z_STREAM_END)\r\n            {\r\n                stream.deflateEnd();\r\n                return err == zlibConst.Z_OK ? zlibConst.Z_BUF_ERROR : err;\r\n            }\r\n\r\n            if (stream.total_out != dest.Length)\r\n            {\r\n                byte[] output = new byte[stream.total_out];\r\n                Buffer.BlockCopy(stream.next_out, 0, output, 0, (int)stream.total_out);\r\n                dest = output;\r\n            }\r\n\r\n            return stream.deflateEnd();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reimplements function from zlib (uncompress) that is not present in ZLIB.NET.\r\n        /// </summary>\r\n        /// <param name=\"dest\">Destination array of bytes. May be trimmed if necessary.</param>\r\n        /// <param name=\"source\">Source array of bytes.</param>\r\n        /// <returns>Zlib status code.</returns>\r\n        private static int ZlibUncompress(ref byte[] dest, byte[] source)\r\n        {\r\n            ZStream stream = new ZStream();\r\n            int err;\r\n\r\n            stream.next_in = source;\r\n            stream.avail_in = source.Length;\r\n            stream.next_out = dest;\r\n            stream.avail_out = dest.Length;\r\n\r\n            err = stream.inflateInit();\r\n            if (err != zlibConst.Z_OK) return err;\r\n\r\n            err = stream.inflate(zlibConst.Z_FINISH);\r\n            if (err != zlibConst.Z_STREAM_END)\r\n            {\r\n                stream.inflateEnd();\r\n                return err == zlibConst.Z_OK ? zlibConst.Z_BUF_ERROR : err;\r\n            }\r\n\r\n            if (stream.total_out != dest.Length)\r\n            {\r\n                byte[] output = new byte[stream.total_out];\r\n                Buffer.BlockCopy(stream.next_out, 0, output, 0, (int)stream.total_out);\r\n                dest = output;\r\n            }\r\n\r\n            return stream.inflateEnd();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzdeflate, gzinflate\r\n\r\n        /// <summary>\r\n        /// This function compress the given string using the DEFLATE data format.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to deflate.</param>\r\n        /// <returns>The deflated string or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzdeflate\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzDeflate(PhpBytes data)\r\n        {\r\n            return GzDeflate(data, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function compress the given string using the DEFLATE data format.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to deflate.</param>\r\n        /// <param name=\"level\">\r\n        ///     The level of compression. Can be given as 0 for no compression up to 9 for maximum compression.\r\n        ///     If not given, the default compression level will be the default compression level of the zlib library.\r\n        /// </param>\r\n        /// <returns>The deflated string or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzdeflate\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzDeflate(PhpBytes data, int level)\r\n        {\r\n            if ((level < -1) || (level > 9))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(\"compression level ({0}) must be within -1..9\", level));\r\n                return null;\r\n            }\r\n\r\n            ZStream zs = new ZStream();\r\n\r\n            zs.next_in = data.ReadonlyData;\r\n            zs.avail_in = data.Length;\r\n\r\n            // heuristic for max data length\r\n            zs.avail_out = data.Length + data.Length / PHP_ZLIB_MODIFIER + 15 + 1;\r\n            zs.next_out = new byte[zs.avail_out];\r\n\r\n            // -15 omits the header (undocumented feature of zlib)\r\n            int status = zs.deflateInit(level, -MAX_WBITS);\r\n\r\n            if (status == zlibConst.Z_OK)\r\n            {\r\n                status = zs.deflate(zlibConst.Z_FINISH);\r\n                if (status != zlibConst.Z_STREAM_END)\r\n                {\r\n                    zs.deflateEnd();\r\n                    if (status == zlibConst.Z_OK)\r\n                    {\r\n                        status = zlibConst.Z_BUF_ERROR;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    status = zs.deflateEnd();\r\n                }\r\n            }\r\n\r\n            if (status == zlibConst.Z_OK)\r\n            {\r\n                byte[] result = new byte[zs.total_out];\r\n                Buffer.BlockCopy(zs.next_out, 0, result, 0, (int)zs.total_out);\r\n                return new PhpBytes(result);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function inflate a deflated string.\r\n        /// </summary> \r\n        /// <param name=\"data\">The data compressed by gzdeflate().</param>\r\n        /// <returns>\r\n        ///     <para>\r\n        ///         The original uncompressed data or FALSE on error.\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         The function will return an error if the uncompressed data is more than 32768 times the length of \r\n        ///         the compressed input data or more than the optional parameter length.\r\n        ///     </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzinflate\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzInflate(PhpBytes data)\r\n        {\r\n            return GzInflate(data, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function inflate a deflated string.\r\n        /// </summary> \r\n        /// <param name=\"data\">The data compressed by gzdeflate().</param>\r\n        /// <param name=\"length\">The maximum length of data to decode.</param>\r\n        /// <returns>\r\n        ///     <para>\r\n        ///         The original uncompressed data or FALSE on error.\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         The function will return an error if the uncompressed data is more than 32768 times the length of \r\n        ///         the compressed input data or more than the optional parameter length.\r\n        ///     </para>\r\n        /// </returns>\r\n        [ImplementsFunction(\"gzinflate\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzInflate(PhpBytes data, long length)\r\n        {\r\n            uint factor=1, maxfactor=16;\r\n\t        long ilength;\r\n\r\n            ZStream zs = new ZStream();\r\n\r\n            zs.avail_in = data.Length;\r\n            zs.next_in = data.ReadonlyData;\r\n            zs.total_out = 0;\r\n\r\n            // -15 omits the header (undocumented feature of zlib)\r\n            int status = zs.inflateInit(-15);\r\n\r\n            if (status != zlibConst.Z_OK)\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n\r\n            do\r\n            {\r\n                ilength = length != 0 ? length : data.Length * (1 << (int)(factor++));\r\n\r\n                try\r\n                {\r\n                    byte[] newOutput = new byte[ilength];\r\n\r\n                    if (zs.next_out != null)\r\n                    {\r\n                        Buffer.BlockCopy(zs.next_out, 0, newOutput, 0, zs.next_out.Length);\r\n                    }\r\n\r\n                    zs.next_out = newOutput;\r\n                }\r\n                catch (OutOfMemoryException)\r\n                {\r\n                    zs.inflateEnd();\r\n                    return null;\r\n                }\r\n\r\n                zs.next_out_index = (int)zs.total_out;\r\n                zs.avail_out = unchecked((int)(ilength - zs.total_out));\r\n                status = zs.inflate(zlibConst.Z_NO_FLUSH);\r\n            }\r\n            while ((status == zlibConst.Z_BUF_ERROR || (status == zlibConst.Z_OK && (zs.avail_in != 0 || zs.avail_out == 0))) && length == 0 && factor < maxfactor);\r\n\r\n            zs.inflateEnd();\r\n\r\n            if ((length != 0 && status == zlibConst.Z_OK) || factor >= maxfactor)\r\n            {\r\n                status = zlibConst.Z_MEM_ERROR;\r\n            }\r\n\r\n            if (status == zlibConst.Z_STREAM_END || status == zlibConst.Z_OK)\r\n            {\r\n                byte[] result = new byte[zs.total_out];\r\n                Buffer.BlockCopy(zs.next_out, 0, result, 0, (int)zs.total_out);\r\n                return new PhpBytes(result);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzdecode, gzencode\r\n\r\n        /// <summary>\r\n        /// This function returns a decoded version of the input data.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to decode, encoded by gzencode().</param>\r\n        /// <returns>The decoded string, or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzdecode\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzDecode(PhpBytes data)\r\n        {\r\n            return GzDecode(data, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function returns a decoded version of the input data.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to decode, encoded by gzencode().</param>\r\n        /// <param name=\"length\">The maximum length of data to decode.</param>\r\n        /// <returns>The decoded string, or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzdecode\", FunctionImplOptions.NotSupported)]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzDecode(PhpBytes data, int length)\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function returns a compressed version of the input data compatible with the output of the gzip program.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to encode.</param>\r\n        /// <returns>The encoded string, or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzencode\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzEncode(PhpBytes data)\r\n        {\r\n            return GzEncode(data, -1, (int)ForceConstants.FORCE_GZIP);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function returns a compressed version of the input data compatible with the output of the gzip program.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to encode.</param>\r\n        /// <param name=\"level\">\r\n        ///     The level of compression. Can be given as 0 for no compression up to 9 for maximum compression. If not \r\n        ///     given, the default compression level will be the default compression level of the zlib library.\r\n        /// </param>\r\n        /// <returns>The encoded string, or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzencode\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzEncode(PhpBytes data, int level)\r\n        {\r\n            return GzEncode(data, level, (int)ForceConstants.FORCE_GZIP);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function returns a compressed version of the input data compatible with the output of the gzip program.\r\n        /// </summary>\r\n        /// <param name=\"data\">The data to encode.</param>\r\n        /// <param name=\"level\">\r\n        ///     The level of compression. Can be given as 0 for no compression up to 9 for maximum compression. If not \r\n        ///     given, the default compression level will be the default compression level of the zlib library.\r\n        /// </param>\r\n        /// <param name=\"encoding_mode\">\r\n        ///     <para>The encoding mode. Can be FORCE_GZIP (the default) or FORCE_DEFLATE.</para>\r\n        ///     <para>\r\n        ///         If you use FORCE_DEFLATE, you get a standard zlib deflated string (inclusive zlib headers) after \r\n        ///         the gzip file header but without the trailing crc32 checksum.\r\n        ///     </para>\r\n        /// </param>\r\n        /// <returns>The encoded string, or FALSE if an error occurred.</returns>\r\n        [ImplementsFunction(\"gzencode\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes GzEncode(PhpBytes data, int level, int encoding_mode)\r\n        {\r\n            if ((level < -1) || (level > 9))\r\n            {\r\n                PhpException.Throw(PhpError.Warning, String.Format(\"compression level ({0}) must be within -1..9\", level));\r\n                return null;\r\n            }\r\n\r\n            ZStream zs = new ZStream();\r\n            int status = zlibConst.Z_OK;\r\n\r\n            zs.next_in = data.ReadonlyData;\r\n            zs.avail_in = data.Length;\r\n\r\n            // heuristic for max data length\r\n            zs.avail_out = data.Length + data.Length / Zlib.PHP_ZLIB_MODIFIER + 15 + 1;\r\n            zs.next_out = new byte[zs.avail_out];\r\n\r\n            switch (encoding_mode)\r\n            {\r\n                case (int)ForceConstants.FORCE_GZIP:\r\n                    if ((status = zs.deflateInit(level, -MAX_WBITS)) != zlibConst.Z_OK) \r\n                    {\r\n                        PhpException.Throw(PhpError.Warning, zError(status));\r\n                        return null;\r\n\t\t\t        }\r\n                    break;\r\n                case (int)ForceConstants.FORCE_DEFLATE:\r\n                    if ((status = zs.deflateInit(level)) != zlibConst.Z_OK)\r\n                    {\r\n                        PhpException.Throw(PhpError.Warning, zError(status));\r\n                        return null;\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            status = zs.deflate(zlibConst.Z_FINISH);\r\n\r\n            if (status != zlibConst.Z_STREAM_END)\r\n            {\r\n                zs.deflateEnd();\r\n\r\n                if (status == zlibConst.Z_OK)\r\n                {\r\n                    status = zlibConst.Z_STREAM_ERROR;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                status = zs.deflateEnd();\r\n            }\r\n\r\n\t\t\tz_error = zs.msg;\n\n            if (status == zlibConst.Z_OK)\r\n            {\r\n                long output_length = zs.total_out + (encoding_mode == (int)ForceConstants.FORCE_GZIP ? GZIP_HEADER_LENGTH + GZIP_FOOTER_LENGTH : GZIP_HEADER_LENGTH);\r\n                long output_offset = GZIP_HEADER_LENGTH;\r\n\r\n                byte[] output = new byte[output_length];\r\n                Buffer.BlockCopy(zs.next_out, 0, output, (int)output_offset, (int)zs.total_out);\r\n\r\n                // fill the header\r\n                output[0] = GZIP_HEADER[0];\r\n                output[1] = GZIP_HEADER[1];\r\n                output[2] = Z_DEFLATED; // zlib constant (private in ZLIB.NET)\r\n                output[3] = 0; // reserved flag bits (this function puts invalid flags in here)\r\n                // 4-8 represent time and are set to zero\r\n                output[9] = OS_CODE; // php constant\r\n\r\n                if (encoding_mode == (int)ForceConstants.FORCE_GZIP)\r\n                {\r\n                    var crc_algo = new PHP.Library.CRC32();\r\n                    byte[] crc = crc_algo.ComputeHash(data.ReadonlyData, 0, data.Length);\r\n                    crc_algo.Dispose();\r\n\r\n                    output[output_length - 8] = crc[0];\r\n                    output[output_length - 7] = crc[1];\r\n                    output[output_length - 6] = crc[2];\r\n                    output[output_length - 5] = crc[3];\r\n                    output[output_length - 4] = (byte)(zs.total_in & 0xFF);\r\n                    output[output_length - 3] = (byte)((zs.total_in >> 8) & 0xFF);\r\n                    output[output_length - 2] = (byte)((zs.total_in >> 16) & 0xFF);\r\n                    output[output_length - 1] = (byte)((zs.total_in >> 24) & 0xFF);\r\n                }\r\n\r\n                return new PhpBytes(output);\r\n            }\r\n            else\r\n            {\r\n                PhpException.Throw(PhpError.Warning, zError(status));\r\n                return null;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzeof, gzrewind, gzseek, gztell\r\n\r\n        /// <summary>\r\n        /// Tests the given GZ file pointer for EOF.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>Returns TRUE if the gz-file pointer is at EOF or an error occurs; otherwise returns FALSE.</returns>\r\n        [ImplementsFunction(\"gzeof\")]\r\n        public static bool GzEof(PhpResource zp)\r\n        {\r\n            return PhpFile.Eof(zp);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the file position indicator of the given gz-file pointer to the beginning of the file stream.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>Returns TRUE on success or FALSE on failure.</returns>\r\n        [ImplementsFunction(\"gzrewind\", FunctionImplOptions.NotSupported)]\r\n        public static bool GzRewind(PhpResource zp)\r\n        {\r\n            return PhpFile.Rewind(zp);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     <para>\r\n        ///         Sets the file position indicator for the given file pointer to the given offset byte into the file stream. Equivalent\r\n        ///         to calling (in C) gzseek(zp, offset, SEEK_SET).\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for \r\n        ///         writing, only forward seeks are supported; gzseek() then compresses a sequence of zeroes up to the new starting position. \r\n        ///     </para>\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"offset\">The seeked offset.</param>\r\n        /// <returns>Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.</returns>\r\n        [ImplementsFunction(\"gzseek\", FunctionImplOptions.NotSupported)]\r\n        public static int GzSeek(PhpResource zp, int offset)\r\n        {\r\n            return GzSeek(zp, offset, (int)SeekOptions.Set);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     <para>\r\n        ///         Sets the file position indicator for the given file pointer to the given offset byte into the file stream. Equivalent\r\n        ///         to calling (in C) gzseek(zp, offset, SEEK_SET).\r\n        ///     </para>\r\n        ///     <para>\r\n        ///         If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for \r\n        ///         writing, only forward seeks are supported; gzseek() then compresses a sequence of zeroes up to the new starting position. \r\n        ///     </para>\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"offset\">The seeked offset.</param>\r\n        /// <param name=\"whence\">\r\n        ///     whence values are: SEEK_SET (relative to origin), SEEK_CUR (relative to current position).\r\n        /// </param>\r\n        /// <returns>Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.</returns>\r\n        [ImplementsFunction(\"gzseek\", FunctionImplOptions.NotSupported)]\r\n        public static int GzSeek(PhpResource zp, int offset, int whence)\r\n        {\r\n            return PhpFile.Seek(zp, offset, whence);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the position of the given file pointer; i.e., its offset into the uncompressed file stream.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>The position of the file pointer or FALSE if an error occurs.</returns>\r\n        [ImplementsFunction(\"gztell\", FunctionImplOptions.NotSupported)]\r\n        public static object GzTell(PhpResource zp)\r\n        {\r\n            return PhpFile.Tell(zp);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzfile\r\n\r\n\r\n\r\n        /// <summary>\r\n        /// This function is identical to readgzfile(), except that it returns the file in an array.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current script context, passed automatically by the caller.</param>\r\n        /// <param name=\"filename\">The file name.</param>\r\n        /// <returns>An array containing the file, one line per cell.</returns>\r\n        [ImplementsFunction(\"gzfile\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray GzFile(ScriptContext context, string filename)\r\n        {\r\n            return GzFile(context, filename, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function is identical to readgzfile(), except that it returns the file in an array.\r\n        /// </summary>\r\n        /// <param name=\"context\">Current script context, passed automatically by the caller.</param>\r\n        /// <param name=\"filename\">The file name.</param>\r\n        /// <param name=\"use_include_path\">\r\n        ///     You can set this optional parameter to 1, if you want to search for the file in the include_path too.\r\n        /// </param>\r\n        /// <returns>An array containing the file, one line per cell.</returns>\r\n        [ImplementsFunction(\"gzfile\")]\r\n        [return: CastToFalse]\r\n        public static PhpArray GzFile(ScriptContext context, string filename, int use_include_path)\r\n        {\r\n            PhpStream fs = (PhpStream)GzOpen(filename, \"r\", use_include_path);\r\n\r\n            if (fs == null) return null;\r\n\r\n            PhpArray returnValue = new PhpArray();\r\n            int blockLength = 8192;\r\n\r\n            while (!fs.Eof)\r\n            {\r\n                string value = PhpStream.AsText(fs.ReadData(blockLength, true));\r\n\r\n                returnValue.Add(Core.Convert.Quote(value, context));\r\n            }\r\n\r\n            return returnValue;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzgetc, gzgets, gzgetss\r\n\r\n        /// <summary>\r\n        /// Returns a string containing a single (uncompressed) character read from the given gz-file pointer.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>The uncompressed character or FALSE on EOF (unlike gzeof()).</returns>\r\n        [ImplementsFunction(\"gzgetc\")]\r\n        [return:CastToFalse]\r\n        public static object GzGetChar(PhpResource zp)\r\n        {\r\n            return PhpFile.ReadChar(zp);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a (uncompressed) string of up to length - 1 bytes read from the given file pointer. Reading ends when length - 1 bytes \r\n        /// have been read, on a newline, or on EOF (whichever comes first). \r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"length\">The length of data to get.</param>\r\n        /// <returns>The uncompressed string, or FALSE on error.</returns>\r\n        [ImplementsFunction(\"gzgets\")]\r\n        [return: CastToFalse]\r\n        public static object GzGetString(PhpResource zp, int length)\r\n        {\r\n            return PhpFile.ReadLine(zp, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Identical to gzgets(), except that gzgetss() attempts to strip any HTML and PHP tags from the text it reads.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"length\">The length of data to get.</param>\r\n        /// <returns>The uncompressed and striped string, or FALSE on error.</returns>\r\n        [ImplementsFunction(\"gzgetss\")]\r\n        [return: CastToFalse]\r\n        public static object GzGetStringStripped(PhpResource zp, int length)\r\n        {\r\n            return GzGetStringStripped(zp, length, PhpBytes.Empty);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Identical to gzgets(), except that gzgetss() attempts to strip any HTML and PHP tags from the text it reads.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"length\">The length of data to get.</param>\r\n        /// <param name=\"allowable_tags\">You can use this optional parameter to specify tags which should not be stripped.</param>\r\n        /// <returns>The uncompressed and striped string, or FALSE on error.</returns>\r\n        [ImplementsFunction(\"gzgetss\")]\r\n        [return: CastToFalse]\r\n        public static object GzGetStringStripped(PhpResource zp, int length, PhpBytes allowable_tags)\r\n        {\r\n            return PhpFile.ReadLineStripTags(zp, length, allowable_tags.ToString());\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzpassthru, gzputs\r\n\r\n        /// <summary>\r\n        /// Reads to EOF on the given gz-file pointer from the current position and writes the (uncompressed) results to standard output.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <returns>The number of uncompressed characters read from gz and passed through to the input, or FALSE on error.</returns>\r\n        [ImplementsFunction(\"gzpassthru\")]\r\n        public static int GzPassthru(PhpResource zp)\r\n        {\r\n            return PhpFile.PassThrough(zp);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function is an alias of gzwrite(), which writes the contents of string to the given gz-file.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"str\">The string to write.</param>\r\n        /// <returns>Returns the number of (uncompressed) bytes written to the given gz-file stream.</returns>\r\n        [ImplementsFunction(\"gzputs\")]\r\n        public static int GzPutString(PhpResource zp, PhpBytes str)\r\n        {\r\n            return GzPutString(zp, str, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function is an alias of gzwrite(), which writes the contents of string to the given gz-file.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"str\">The string to write.</param>\r\n        /// <param name=\"length\">\r\n        ///     The number of uncompressed bytes to write. If supplied, writing will stop after length (uncompressed) bytes have been \r\n        ///     written or the end of string is reached, whichever comes first.\r\n        /// </param>\r\n        /// <returns>Returns the number of (uncompressed) bytes written to the given gz-file stream.</returns>\r\n        [ImplementsFunction(\"gzputs\")]\r\n        public static int GzPutString(PhpResource zp, PhpBytes str, int length)\r\n        {\r\n            return GzWrite(zp, str, length);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region gzread, gzwrite\r\n\r\n        /// <summary>\r\n        /// Reads up to length bytes from the given gz-file pointer. Reading stops when length (uncompressed) bytes \r\n        /// have been read or EOF is reached, whichever comes first.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"length\">The number of bytes to read.</param>\r\n        /// <returns>The data that have been read.</returns>\r\n        [ImplementsFunction(\"gzread\")]\r\n        public static object GzRead(PhpResource zp, int length)\r\n        {\r\n            return PhpFile.Read(zp, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the contents of string to the given gz-file.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"str\">The string to write.</param>\r\n        /// <returns>Returns the number of (uncompressed) bytes written to the given gz-file stream.</returns>\r\n        [ImplementsFunction(\"gzwrite\")]\r\n        public static int GzWrite(PhpResource zp, PhpBytes str)\r\n        {\r\n            return GzWrite(zp, str, -1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the contents of string to the given gz-file.\r\n        /// </summary>\r\n        /// <param name=\"zp\">The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().</param>\r\n        /// <param name=\"str\">The string to write.</param>\r\n        /// <param name=\"length\">\r\n        ///     The number of uncompressed bytes to write. If supplied, writing will stop after length (uncompressed) bytes have been \r\n        ///     written or the end of string is reached, whichever comes first.\r\n        /// </param>\r\n        /// <returns>Returns the number of (uncompressed) bytes written to the given gz-file stream.</returns>\r\n        [ImplementsFunction(\"gzwrite\")]\r\n        public static int GzWrite(PhpResource zp, PhpBytes str, int length)\r\n        {\r\n            return PhpFile.Write(zp, str, length);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region readgzfile\r\n\r\n        /// <summary>\r\n        /// Reads a file, decompresses it and writes it to standard output.\r\n        /// </summary> \r\n        /// <param name=\"filename\">\r\n        ///     The file name. This file will be opened from the filesystem and its contents written to standard output.\r\n        /// </param>\r\n        /// <returns>\r\n        ///     Returns the number of (uncompressed) bytes read from the file. If an error occurs, FALSE is returned and \r\n        ///     unless the function was called as @readgzfile, an error message is printed.\r\n        /// </returns>\r\n        [ImplementsFunction(\"readgzfile\")]\r\n        public static int ReadGzFile(string filename)\r\n        {\r\n            return ReadGzFile(filename, 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a file, decompresses it and writes it to standard output.\r\n        /// </summary> \r\n        /// <param name=\"filename\">\r\n        ///     The file name. This file will be opened from the filesystem and its contents written to standard output.\r\n        /// </param>\r\n        /// <param name=\"use_include_path\">\r\n        ///     You can set this optional parameter to 1, if you want to search for the file in the include_path too.\r\n        /// </param>\r\n        /// <returns>\r\n        ///     Returns the number of (uncompressed) bytes read from the file. If an error occurs, FALSE is returned and \r\n        ///     unless the function was called as @readgzfile, an error message is printed.\r\n        /// </returns>\r\n        [ImplementsFunction(\"readgzfile\")]\r\n        public static int ReadGzFile(string filename, int use_include_path)\r\n        {\r\n            PhpStream fs = (PhpStream)GzOpen(filename, \"r\", use_include_path);\r\n\r\n            return PhpStreams.Copy(fs, InputOutputStreamWrapper.ScriptOutput);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region zlib_get_coding_type\r\n\r\n        /// <summary>\r\n        /// Returns the coding type used for output compression.\r\n        /// </summary>\r\n        /// <returns>Possible return values are gzip, deflate, or FALSE.</returns>\r\n        [ImplementsFunction(\"zlib_get_coding_type\", FunctionImplOptions.NotSupported)]\r\n        public static PhpBytes ZlibGetCodingType()\r\n        {\r\n            PhpException.FunctionNotSupported(PhpError.Warning);\r\n            return null;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/Zlib/ZlibFilter.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\nusing zlib;\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n    /// <summary>\r\n    /// Mode of DeflateFilter.\r\n    /// </summary>\r\n    public enum DeflateFilterMode\r\n    {\r\n        /// <summary>\r\n        /// Normal compression.\r\n        /// </summary>\r\n        Normal,\r\n\r\n        /// <summary>\r\n        /// Filter-only compression.\r\n        /// </summary>\r\n        Filter,\r\n\r\n        /// <summary>\r\n        /// Huffman-only compression.\r\n        /// </summary>\r\n        Huffman\r\n    }\r\n\r\n    /// <summary>\r\n    /// Base for zlib filters. Contains generic algorithm for reading and writing into zlib stream.\r\n    /// </summary>\r\n    public abstract class ZlibFilter : PhpFilter\r\n    {\r\n        /// <summary>\r\n        /// State of the filter.\r\n        /// </summary>\r\n        private enum ZlibState\r\n        {\r\n            NotStarted,\r\n            Data,\r\n            Finished,\r\n            Failed\r\n        }\r\n\r\n        protected ZStream _stream;\r\n        private ZlibState _state;\r\n\r\n        /// <summary>\r\n        /// Performs the generic zlib stream filter operation.\r\n        /// </summary>\r\n        /// <param name=\"input\">Input chunk of bytes.</param>\r\n        /// <param name=\"inputOffset\">Current position within the chunk.</param>\r\n        /// <param name=\"closing\">Value indicating whether the stream will be closed.</param>\r\n        /// <returns>Array of available bytes (even empty one). Null on non-critical error.</returns>\r\n        protected byte[] FilterInner(byte[] input, ref int inputOffset, bool closing)\r\n        {\r\n            if (_state == ZlibState.Finished)\r\n            {\r\n                //if stream already ended, throw an error\r\n                PhpException.Throw(PhpError.Warning, \"using zlib stream that is already finished\");\r\n                return null;\r\n            }\r\n\r\n            if (_state == ZlibState.Failed)\r\n            {\r\n                //if stream already ended, throw an error\r\n                PhpException.Throw(PhpError.Warning, \"using zlib stream that failed\");\r\n                return null;\r\n            }\r\n\r\n            List<Tuple<byte[], int>> subchunks = null;\r\n            int status = zlibConst.Z_OK;\r\n\r\n            // initialize if necessary\r\n            if (_state == ZlibState.NotStarted)\r\n            {\r\n                _stream = new ZStream();\r\n\r\n                // init algorithm\r\n                status = InitZlibOperation(_stream);\r\n\r\n                // check for error\r\n                if (status != zlibConst.Z_OK)\r\n                {\r\n                    _state = ZlibState.Failed;\r\n                    PhpException.Throw(PhpError.Error, Zlib.zError(status));\r\n                    return null;\r\n                }\r\n\r\n                _state = ZlibState.Data;\r\n            }\r\n\r\n            if (_state == ZlibState.Data)\r\n            {\r\n                // input chunk\r\n                _stream.next_in = input;\r\n                _stream.next_in_index = inputOffset;\r\n                _stream.avail_in = input.Length - inputOffset;\r\n\r\n                long initial_total_out = _stream.total_out;\r\n                long initial_total_in = _stream.total_in;\r\n\r\n                int nextBufferSize = 8;\r\n                int bufferSizeMax = 65536;\r\n\r\n                // do while operation does some progress\r\n                do\r\n                {\r\n                    _stream.next_out = new byte[nextBufferSize];\r\n                    _stream.next_out_index = 0;\r\n                    _stream.avail_out = _stream.next_out.Length;\r\n\r\n                    if (nextBufferSize < bufferSizeMax)\r\n                    {\r\n                        nextBufferSize *= 2;\r\n                    }\r\n\r\n                    long previous_total_out = _stream.total_out;\r\n\r\n                    status = PerformZlibOperation(_stream, GetFlushFlags(closing));\r\n\r\n                    if (_stream.total_out - previous_total_out > 0)\r\n                    {\r\n                        // if the list was not initialize, do so\r\n                        if (subchunks == null)\r\n                            subchunks = new List<Tuple<byte[], int>>();\r\n\r\n                        // add the subchunk to the list only when it contains some data\r\n                        subchunks.Add(new Tuple<byte[], int>(_stream.next_out, (int)(_stream.total_out - previous_total_out)));\r\n                    }\r\n                }\r\n                // we continue only when progress was made and there is input available\r\n                while ((status == zlibConst.Z_OK || status == zlibConst.Z_BUF_ERROR) && (_stream.avail_in > 0 || (_stream.avail_in == 0 && _stream.avail_out == 0)));\r\n\r\n                // if the last op wasn't the end of stream (this happens only with Z_FINISH) or general success, return error\r\n                if (status != zlibConst.Z_STREAM_END && status != zlibConst.Z_OK)\r\n                {\r\n                    _state = ZlibState.Failed;\r\n                    PhpException.Throw(PhpError.Warning, Zlib.zError(status));\r\n                    return null;\r\n                }\r\n\r\n                // end the algorithm if requested\r\n                if (closing || status == zlibConst.Z_STREAM_END)\r\n                {\r\n                    _state = ZlibState.Finished;\r\n\r\n                    status = EndZlibOperation(_stream);\r\n\r\n                    if (status != zlibConst.Z_OK)\r\n                    {\r\n                        _state = ZlibState.Failed;\r\n                        PhpException.Throw(PhpError.Warning, Zlib.zError(status));\r\n                        return null;\r\n                    }\r\n                }\r\n\r\n                inputOffset = _stream.next_in_index;\r\n\r\n                // if the chunk ended or everything is OK, connect the subchunks and return\r\n                if (subchunks != null && subchunks.Count > 0)\r\n                {\r\n                    byte[] result = new byte[_stream.total_out - initial_total_out];\r\n                    long resultPos = 0;\r\n\r\n                    for (int i = 0; i < subchunks.Count; i++)\r\n                    {\r\n                        Buffer.BlockCopy(\r\n                            subchunks[i].Item1,\r\n                            0,\r\n                            result,\r\n                            (int)resultPos,\r\n                            (int)Math.Min(subchunks[i].Item2, _stream.total_out - resultPos));\r\n\r\n                        resultPos += subchunks[i].Item2;\r\n                    }\r\n\r\n                    return result;\r\n                }\r\n                else\r\n                {\r\n                    return new byte[0];\r\n                }                \r\n            }\r\n\r\n            Debug.Fail(null);\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets flush flags to be used with zlib operation.\r\n        /// </summary>\r\n        /// <param name=\"closing\">Value indicating whether the stream will be closed.</param>\r\n        /// <returns>Zlib flags.</returns>\r\n        protected abstract int GetFlushFlags(bool closing);\r\n\r\n        /// <summary>\r\n        /// Ends the Zlib operation.\r\n        /// </summary>\r\n        /// <param name=\"zs\">Zlib stream.</param>\r\n        /// <returns>Zlib status.</returns>\r\n        protected abstract int EndZlibOperation(ZStream zs);\r\n\r\n        /// <summary>\r\n        /// Performs the Zlib operation.\r\n        /// </summary>\r\n        /// <param name=\"zs\">Zlib stream.</param>\r\n        /// <param name=\"flush\">Flush flags.</param>\r\n        /// <returns>Zlib status.</returns>\r\n        protected abstract int PerformZlibOperation(ZStream zs, int flush);\r\n\r\n        /// <summary>\r\n        /// Initializes the Zlib operation.\r\n        /// </summary>\r\n        /// <param name=\"zs\">Zlib stream.</param>\r\n        /// <returns>Zlib status.</returns>\r\n        protected abstract int InitZlibOperation(ZStream zs);\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the class.\r\n        /// </summary>\r\n        public ZlibFilter()\r\n            : base(null)\r\n        {\r\n            _state = ZlibState.NotStarted;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Filter for deflate algorithm without any header or trailer. Filter mode is not currently supported.\r\n    /// </summary>\r\n    public class DeflateFilter : ZlibFilter\r\n    {\r\n        int _level;\r\n        DeflateFilterMode _mode;\r\n\r\n        public DeflateFilter(int level, DeflateFilterMode mode)\r\n            : base()\r\n        {\r\n            _level = level;\r\n            _mode = mode;\r\n        }\r\n\r\n        protected override int GetFlushFlags(bool closing)\r\n        {\r\n            return closing ? zlibConst.Z_FINISH : zlibConst.Z_NO_FLUSH;\r\n        }\r\n\r\n        protected override int InitZlibOperation(ZStream zs)\r\n        {\r\n            // -MAX_WBITS stands for absense of Zlib header and trailer (needed for GZIP compression and decompression)\r\n            return zs.deflateInit(_level, -Zlib.MAX_WBITS);\r\n        }\r\n\r\n        protected override int PerformZlibOperation(ZStream zs, int flush)\r\n        {\r\n            return zs.deflate(flush);\r\n        }\r\n\r\n        protected override int EndZlibOperation(ZStream zs)\r\n        {\r\n            return zs.deflateEnd();\r\n        }\r\n\r\n        public override object Filter(object input, bool closing)\r\n        {\r\n            PhpBytes bInput = Core.Convert.ObjectToPhpBytes(input);\r\n\r\n            if (bInput != null)\r\n            {\r\n                int offset = 0;\r\n                return new PhpBytes(FilterInner(bInput.ReadonlyData, ref offset, closing));\r\n            }\r\n            else\r\n            {\r\n                Debug.Fail(\"DeflateFilter expects chunks to be convertible to PhpBytes.\");\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Filter for inflate algorithm without any header or trailer.\r\n    /// </summary>\r\n    public class InflateFilter : ZlibFilter\r\n    {\r\n        public InflateFilter()\r\n            : base()\r\n        {\r\n        }\r\n\r\n        protected override int GetFlushFlags(bool closing)\r\n        {\r\n            return closing ? zlibConst.Z_FINISH : zlibConst.Z_NO_FLUSH;\r\n        }\r\n\r\n        protected override int InitZlibOperation(ZStream zs)\r\n        {\r\n            // -MAX_WBITS stands for absense of Zlib header and trailer (needed for GZIP compression and decompression)\r\n            return zs.inflateInit(-Zlib.MAX_WBITS);\r\n        }\r\n\r\n        protected override int PerformZlibOperation(ZStream zs, int flush)\r\n        {\r\n            return zs.inflate(flush);\r\n        }\r\n\r\n        protected override int EndZlibOperation(ZStream zs)\r\n        {\r\n            return zs.inflateEnd();\r\n        }\r\n\r\n        public override object Filter(object input, bool closing)\r\n        {\r\n            PhpBytes bInput = Core.Convert.ObjectToPhpBytes(input);\r\n\r\n            if (bInput != null)\r\n            {\r\n                int offset = 0;\r\n                return new PhpBytes(FilterInner(bInput.ReadonlyData, ref offset, closing));\r\n            }\r\n            else\r\n            {\r\n                Debug.Fail(\"InflateFilter expects chunks to be convertible to PhpBytes.\");\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Gzip compression filter.\r\n    /// </summary>\r\n    public sealed class GzipCompresionFilter : DeflateFilter\r\n    {\r\n        private enum CompressionState\r\n        {\r\n            Header,\r\n            Data,\r\n            Finished,\r\n            Failed\r\n        }\r\n\r\n        PhpHash.HashPhpResource.CRC32B _crc;\r\n        CompressionState _state;\r\n\r\n        public GzipCompresionFilter(int level, DeflateFilterMode mode)\r\n            : base(level, mode)\r\n        {\r\n            _crc = new PhpHash.HashPhpResource.CRC32B();\r\n            _state = CompressionState.Header;\r\n        }\r\n\r\n        public override object Filter(object input, bool closing)\r\n        {\r\n            PhpBytes bInput = Core.Convert.ObjectToPhpBytes(input);\r\n\r\n            if (bInput != null)\r\n            {\r\n                if (_state == CompressionState.Failed)\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, \"using filter in failed state\");\r\n                    return null;\r\n                }\r\n\r\n                if (_state == CompressionState.Finished)\r\n                {\r\n                    PhpException.Throw(PhpError.Warning, \"using filter in finished state\");\r\n                    return null;\r\n                }\r\n\r\n                byte[] header = null;\r\n                byte[] footer = null;\r\n\r\n                if (_state == CompressionState.Header)\r\n                {\r\n                    header = new byte[Zlib.GZIP_HEADER_LENGTH];\r\n                    header[0] = Zlib.GZIP_HEADER[0];\r\n                    header[1] = Zlib.GZIP_HEADER[1];\r\n                    header[2] = Zlib.Z_DEFLATED;\r\n                    header[3] = 0;\r\n                    // 3-8 represent time and are set to zero\r\n                    header[9] = Zlib.OS_CODE;\r\n\r\n                    _crc.Init();\r\n\r\n                    _state = CompressionState.Data;\r\n                }\r\n\r\n                int outputOffset = 0;\r\n                byte[] output;\r\n\r\n                try\r\n                {\r\n                    output = FilterInner(bInput.ReadonlyData, ref outputOffset, closing);\r\n                }\r\n                catch\r\n                {\r\n                    _state = CompressionState.Failed;\r\n                    throw;\r\n                }\r\n\r\n                if (output == null)\r\n                {\r\n                    _state = CompressionState.Failed;\r\n                    return null;\r\n                }\r\n\r\n                // input should be read to the end\r\n                Debug.Assert(outputOffset == bInput.Length);\r\n\r\n                _crc.Update(bInput.ReadonlyData);\r\n\r\n                if (closing)\r\n                {\r\n                    byte[] crcBytes = _crc.Final();\r\n\r\n                    footer = new byte[Zlib.GZIP_FOOTER_LENGTH];\r\n\r\n                    // well this implementation simply has the hash inverted compared to C implementation\r\n                    footer[0] = crcBytes[3];\r\n                    footer[1] = crcBytes[2];\r\n                    footer[2] = crcBytes[1];\r\n                    footer[3] = crcBytes[0];\r\n\r\n                    footer[4] = (byte)(_stream.total_in & 0xFF);\r\n                    footer[5] = (byte)((_stream.total_in >> 8) & 0xFF);\r\n                    footer[6] = (byte)((_stream.total_in >> 16) & 0xFF);\r\n                    footer[7] = (byte)((_stream.total_in >> 24) & 0xFF);\r\n\r\n                    _state = CompressionState.Finished;\r\n                }\r\n\r\n                if (header != null || footer != null)\r\n                {\r\n                    int offset = 0;\r\n                    byte[] appended = new byte[(header != null ? header.Length : 0) + output.Length + (footer != null ? footer.Length : 0)];\r\n\r\n                    if (header != null)\r\n                    {\r\n                        Buffer.BlockCopy(header, 0, appended, 0, header.Length);\r\n                        offset += header.Length;\r\n                    }\r\n\r\n                    if (output != null && output.Length > 0)\r\n                    {\r\n                        Buffer.BlockCopy(output, 0, appended, offset, output.Length);\r\n                        offset += output.Length;\r\n                    }\r\n\r\n                    if (footer != null)\r\n                    {                        \r\n                        Buffer.BlockCopy(footer, 0, appended, offset, footer.Length);\r\n                    }\r\n\r\n                    return new PhpBytes(appended);\r\n                }\r\n                else\r\n                {\r\n                    return new PhpBytes(output);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Debug.Fail(\"GzipCompresionFilter expects chunks to be of type PhpBytes.\");\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Filter for gzip uncompression algorithm.\r\n    /// </summary>\r\n    public sealed class GzipUncompressionFilter : InflateFilter\r\n    {\r\n        private enum UncompressionState\r\n        {\r\n            Header,\r\n            HeaderExtraField,\r\n            HeaderFilename,\r\n            HeaderComment,\r\n            HeaderCRC,\r\n            Data,\r\n            Trailer,\r\n            PostTrailer,\r\n            Passthrough,\r\n            Failed,\r\n            Finished\r\n        }\r\n\r\n        PhpHash.HashPhpResource.CRC32B _crc;\r\n        int? _headerFlags;\r\n        UncompressionState _state;\r\n        BinaryChunkQueue _chunkQueue;\r\n        int? _extraHeaderLength;\r\n\r\n        public GzipUncompressionFilter()\r\n            : base()\r\n        {\r\n            _crc = new PhpHash.HashPhpResource.CRC32B();\r\n            _state = UncompressionState.Header;\r\n            _chunkQueue = new BinaryChunkQueue();\r\n        }\r\n\r\n        public override object Filter(object input, bool closing)\r\n        {\r\n            // TODO: not the most efficient method - after the filters are upgraded to bucket lists, update this\r\n\r\n            PhpBytes bInput = Core.Convert.ObjectToPhpBytes(input);\r\n\r\n            if (bInput != null)\r\n            {\r\n                if (_state == UncompressionState.Failed)\r\n                {\r\n                    // failed filter should not get any more calls\r\n                    PhpException.Throw(PhpError.Warning, \"using filter in failed state\");\r\n                    return null;\r\n                }\r\n\r\n                if (_state == UncompressionState.PostTrailer)\r\n                {\r\n                    // post trailer - ignore everything\r\n                    if (closing)\r\n                    {\r\n                        _state = UncompressionState.Finished;\r\n                    }\r\n\r\n                    return new PhpBytes();\r\n                }\r\n\r\n                if (_state == UncompressionState.Finished)\r\n                {\r\n                    // finished filter should not get any more data\r\n                    PhpException.Throw(PhpError.Warning, \"using filter in finished state\");\r\n                    return null;\r\n                }\r\n\r\n                if (_state == UncompressionState.Passthrough)\r\n                {\r\n                    // this is not gzip data format - pass the data through\r\n                    return new PhpBytes(bInput);\r\n                }\r\n\r\n                // enqueue the block\r\n                _chunkQueue.EnqueueByteBlock(bInput.ReadonlyData, 0, bInput.Length);\r\n\r\n                if (_state == UncompressionState.Header)\r\n                {\r\n                    #region Header handling\r\n                    //beginning of the stream\r\n                    byte[] beginning = _chunkQueue.DequeueByteBlock(Zlib.GZIP_HEADER_LENGTH);\r\n\r\n                    if (beginning == null && !closing)\r\n                    {\r\n                        // we do not have enough data, but we know there would be more data ahead\r\n                        return new PhpBytes();\r\n                    }\r\n                    else\r\n                    {\r\n                        //check the header format\r\n                        if (beginning.Length >= 2 && beginning[0] == Zlib.GZIP_HEADER[0] && beginning[1] == Zlib.GZIP_HEADER[1])\r\n                        {\r\n                            //header magic bytes are OK\r\n                            if (beginning.Length < Zlib.GZIP_HEADER_LENGTH)\r\n                            {\r\n                                // header is too short -> this is an error\r\n                                PhpException.Throw(PhpError.Warning, \"unexpected end of file\");\r\n                                return null;\r\n                            }\r\n                            else\r\n                            {\r\n                                // check the rest of the header\r\n                                if (beginning[2] != Zlib.Z_DEFLATED)\r\n                                {\r\n                                    PhpException.Throw(PhpError.Warning, \"unknown compression method\");\r\n                                    return null;\r\n                                }\r\n\r\n                                if ((beginning[3] & Zlib.GZIP_HEADER_RESERVED_FLAGS) != 0)\r\n                                {\r\n                                    PhpException.Throw(PhpError.Warning, \"unknown header flags set\");\r\n                                    return null;\r\n                                }\r\n\r\n                                _headerFlags = beginning[3];\r\n\r\n                                //change the header state based on the header flags\r\n                                UpdateHeaderState();\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            // this is not a gzip format -> passthrough the data\r\n                            _state = UncompressionState.Passthrough;\r\n                            return new PhpBytes(beginning);\r\n                        }\r\n                    }\r\n                    #endregion\r\n                }\r\n\r\n                if (_state == UncompressionState.HeaderExtraField)\r\n                {\r\n                    #region Header Extra Field Handling\r\n                    if (_extraHeaderLength == null)\r\n                    {\r\n                        //length was not yet detected\r\n                        if (_chunkQueue.AvailableBytes < 2)\r\n                        {\r\n                            //wait for more input\r\n                            return new PhpBytes();\r\n                        }\r\n                        else\r\n                        {\r\n                            //assemble length\r\n                            _extraHeaderLength = _chunkQueue.DequeueByte();\r\n                            _extraHeaderLength &= (_chunkQueue.DequeueByte() << 8);\r\n                        }\r\n                    }\r\n\r\n                    if (_extraHeaderLength != null)\r\n                    {\r\n                        //length was already read\r\n                        if (_chunkQueue.AvailableBytes < _extraHeaderLength)\r\n                        {\r\n                            //wait for more input\r\n                            return new PhpBytes();\r\n                        }\r\n                        else\r\n                        {\r\n                            Debug.Assert(_extraHeaderLength.HasValue);\r\n\r\n                            //skip the extra header\r\n                            _chunkQueue.SkipByteBlock(_extraHeaderLength.Value);\r\n\r\n                            UpdateHeaderState();\r\n                        }\r\n                    }\r\n                    #endregion\r\n                }\r\n\r\n                if (_state == UncompressionState.HeaderFilename || _state == UncompressionState.HeaderComment)\r\n                {\r\n                    #region Header Filename and Comment Handling\r\n                    // filename or comment\r\n\r\n                    // cycle until input ends or zero character is encountered\r\n                    while (true)\r\n                    {\r\n                        byte? nextByte = _chunkQueue.DequeueByte();\r\n\r\n                        if (nextByte == null)\r\n                        {\r\n                            //wait for more input\r\n                            return new PhpBytes();\r\n                        }\r\n\r\n                        if (nextByte == 0)\r\n                        {\r\n                            // end the cycle\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    // go to the next state\r\n                    UpdateHeaderState();\r\n                    #endregion\r\n                }\r\n\r\n                if (_state == UncompressionState.HeaderCRC)\r\n                {\r\n                    #region CRC Handling\r\n                    // header CRC\r\n\r\n                    if (_chunkQueue.AvailableBytes < 2)\r\n                    {\r\n                        //wait for more input\r\n                        return new PhpBytes();\r\n                    }\r\n                    else\r\n                    {\r\n                        //skip the CRC\r\n                        _chunkQueue.DequeueByte();\r\n                        _chunkQueue.DequeueByte();\r\n\r\n                        UpdateHeaderState();\r\n                    }\r\n                    #endregion\r\n                }\r\n\r\n                //filled by data handling and sometimes returned by trailer handling\r\n                byte[] output = null;\r\n\r\n                if (_state == UncompressionState.Data)\r\n                {\r\n                    #region Deflated Data Handling\r\n\r\n                    //get all available bytes\r\n                    byte[] inputBytes = _chunkQueue.DequeueByteBlock(_chunkQueue.AvailableBytes);\r\n                    int inputOffset = 0;\r\n\r\n                    // perform the inner operation\r\n                    try\r\n                    {\r\n                        output = FilterInner(inputBytes, ref inputOffset, closing);\r\n                    }\r\n                    catch\r\n                    {\r\n                        // exception was thrown\r\n                        _state = UncompressionState.Failed;\r\n                        throw;\r\n                    }\r\n\r\n                    if (output == null)\r\n                    {\r\n                        // error happened and exception was not thrown\r\n                        _state = UncompressionState.Failed;\r\n                        return null;\r\n                    }\r\n\r\n                    // update the hash algorithm\r\n                    _crc.Update(output);\r\n\r\n                    if (inputOffset != inputBytes.Length)\r\n                    {\r\n                        // push the rest of the data into the chunk queue\r\n                        _chunkQueue.PushByteBlock(inputBytes, inputOffset, inputBytes.Length - inputOffset);\r\n\r\n                        // end of deflated block reached\r\n                        _state = UncompressionState.Trailer;\r\n\r\n                        // pass through to Trailer handling\r\n                    }\r\n                    else\r\n                    {\r\n                        //normal decompressed block - return it\r\n                        return new PhpBytes(output);\r\n                    }\r\n\r\n                    #endregion\r\n                }\r\n\r\n                if (_state == UncompressionState.Trailer)\r\n                {\r\n                    #region Trailer Handling\r\n                    // the deflate block has already ended, we are processing trailer\r\n                    if (closing || _chunkQueue.AvailableBytes >= Zlib.GZIP_FOOTER_LENGTH)\r\n                    {\r\n                        byte[] trailer;\r\n\r\n                        trailer = _chunkQueue.DequeueByteBlock(_chunkQueue.AvailableBytes);\r\n\r\n                        if (trailer.Length >= Zlib.GZIP_FOOTER_LENGTH)\r\n                        {\r\n                            byte[] crc = _crc.Final();\r\n\r\n                            if (crc[3] != trailer[0] || crc[2] != trailer[1] || crc[1] != trailer[2] || crc[0] != trailer[3])\r\n                            {\r\n                                _state = UncompressionState.Failed;\r\n                                PhpException.Throw(PhpError.Warning, \"incorrect data check\");\r\n                                return null;\r\n                            }\r\n\r\n                            if (BitConverter.ToInt32(trailer, 4) != _stream.total_out)\r\n                            {\r\n                                _state = UncompressionState.Failed;\r\n                                PhpException.Throw(PhpError.Warning, \"incorrect length check\");\r\n                                return null;\r\n                            }\r\n\r\n                            _state = closing ? UncompressionState.Finished : UncompressionState.PostTrailer;\r\n\r\n                            // everything is fine, return the output if available\r\n                            return output != null ? new PhpBytes(output) : new PhpBytes();\r\n                        }\r\n                        else\r\n                        {\r\n                            _state = UncompressionState.Failed;\r\n                            PhpException.Throw(PhpError.Warning, \"unexpected end of file\");\r\n                            return null;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        //stream is not closing yet - return the remaining output, otherwise empty\r\n                        return output != null ? new PhpBytes(output) : new PhpBytes();\r\n                    }\r\n                    #endregion\r\n                }\r\n\r\n                //this should not happen\r\n                Debug.Fail(null);\r\n                return null;\r\n            }\r\n            else\r\n            {\r\n                Debug.Fail(\"GzipUncompressionFilter expects chunks to be convertible to PhpBytes.\");\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Changes state based on header flags. Is called by header-handling states only.\r\n        /// </summary>\r\n        private void UpdateHeaderState()\r\n        {\r\n            switch (_state)\r\n            {\r\n                case UncompressionState.Header:\r\n                    if (HeaderFlag(Zlib.GZIP_HEADER_EXTRAFIELD))\r\n                        _state = UncompressionState.HeaderExtraField;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_FILENAME))\r\n                        _state = UncompressionState.HeaderFilename;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_COMMENT))\r\n                        _state = UncompressionState.HeaderComment;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_CRC))\r\n                        _state = UncompressionState.HeaderCRC;\r\n                    else\r\n                        _state = UncompressionState.Data;\r\n                    break;\r\n                case UncompressionState.HeaderExtraField:\r\n                    if (HeaderFlag(Zlib.GZIP_HEADER_FILENAME))\r\n                        _state = UncompressionState.HeaderFilename;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_COMMENT))\r\n                        _state = UncompressionState.HeaderComment;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_CRC))\r\n                        _state = UncompressionState.HeaderCRC;\r\n                    else\r\n                        _state = UncompressionState.Data;\r\n                    break;\r\n                case UncompressionState.HeaderFilename:\r\n                    if (HeaderFlag(Zlib.GZIP_HEADER_COMMENT))\r\n                        _state = UncompressionState.HeaderComment;\r\n                    else if (HeaderFlag(Zlib.GZIP_HEADER_CRC))\r\n                        _state = UncompressionState.HeaderCRC;\r\n                    else\r\n                        _state = UncompressionState.Data;\r\n                    break;\r\n                case UncompressionState.HeaderComment:\r\n                    if (HeaderFlag(Zlib.GZIP_HEADER_CRC))\r\n                        _state = UncompressionState.HeaderCRC;\r\n                    else\r\n                        _state = UncompressionState.Data;\r\n                    break;\r\n                case UncompressionState.HeaderCRC:\r\n                    _state = UncompressionState.Data;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if a header flag is present.\r\n        /// </summary>\r\n        /// <param name=\"flag\">Flag.</param>\r\n        /// <returns>True if the header flag is valid, otherwise false.</returns>\r\n        private bool HeaderFlag(byte flag)\r\n        {\r\n            return (_headerFlags & flag) != 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/ZlibFilterFactory.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n    public class ZlibFilterFactory : IFilterFactory\r\n    {\r\n        public bool GetImplementedFilter(string name, bool instantiate, out PhpFilter instance, object parameters)\r\n        {\r\n            instance = null;\r\n\r\n            switch (name)\r\n            {\r\n                case \"zlib.deflate\":\r\n                    if (instantiate) instance = new DeflateFilter(-1, DeflateFilterMode.Normal);\r\n                    return true;\r\n                case \"zlib.inflate\":\r\n                    if (instantiate) instance = new InflateFilter();\r\n                    return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public string[] GetImplementedFilterNames()\r\n        {\r\n            return new string[] { \"zlib.deflate\", \"zlib.inflate\" };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/ZlibStreamWrapper.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Zlib\r\n{\r\n    public class ZlibStreamWrapper : StreamWrapper\r\n    {\r\n        public const string scheme = \"compress.zlib\";\r\n\r\n        public override bool IsUrl\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override string Label\r\n        {\r\n            get { return \"ZLIB\"; }\r\n        }\r\n\r\n        public override string Scheme\r\n        {\r\n            get { return scheme; }\r\n        }\r\n\r\n        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)\r\n        {\r\n            int level = -1;\r\n            DeflateFilterMode deflateMode = DeflateFilterMode.Normal;\r\n\r\n            #region Parse mode options\r\n            // PHP just looks whether there are mode flags in the mode string (skip the first character)\r\n            // last flag is the valid one\r\n\r\n            for (int i = 1; i < mode.Length; i++)\r\n            {\r\n                if (Char.IsDigit(mode[i]))\r\n                {\r\n                    level = mode[i] - '0';\r\n                }\r\n                else if (mode[i] == 'f')\r\n                {\r\n                    deflateMode = DeflateFilterMode.Filter;\r\n                }\r\n                else if (mode[i] == 'h')\r\n                {\r\n                    deflateMode = DeflateFilterMode.Huffman;\r\n                }\r\n            }\r\n\r\n            #endregion\r\n\r\n            #region Path correction\r\n\r\n            if (path.StartsWith(\"compress.zlib://\"))\r\n            {\r\n                path = path.Substring(16);\r\n            }\r\n            else if (path.StartsWith(\"zlib:\"))\r\n            {\r\n                path = path.Substring(5);\r\n            }\r\n\r\n            #endregion\r\n\r\n            PhpStream stream = PhpStream.Open(path, mode, options);\r\n\r\n            if (stream != null && stream.CanRead)\r\n            {\r\n                stream.AddFilter(new GzipUncompressionFilter(), FilterChainOptions.Read);\r\n            }\r\n\r\n            if (stream != null && stream.CanWrite)\r\n            {\r\n                stream.AddFilter(new GzipCompresionFilter(level, deflateMode), FilterChainOptions.Write);\r\n            }\r\n\r\n            return stream;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/Zlib/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"zlib.net\" version=\"1.0.4.0\" targetFramework=\"net40\" />\n</packages>"
  },
  {
    "path": "Source/Extensions/Zlib/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetZlib\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/Zlib/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetZlib\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Extensions/iconv/AssemblyInfo.cs",
    "content": "﻿/*\r\n\r\n Copyright (c) 2012 Jakub Misek\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing PHP.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Phalanger Iconv\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - Iconv\")]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"E19A61F5-A199-4EBB-9F1F-7CF832B20099\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Iconv.IconvLibraryDescriptor), \"iconv\", new string[] { \"iconv\" })]\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Configuration.cs",
    "content": "using System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n    /// Script independent Iconv configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class IconvLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n        internal IconvLocalConfig() { }\r\n\r\n        public string InputEncoding = \"ISO-8859-1\";\r\n        public string InternalEncoding = \"ISO-8859-1\";\r\n        public string OutputEncoding = \"ISO-8859-1\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (IconvLocalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n                case \"iconv.input_encoding\":    // legacy option name\r\n                case \"InputEncoding\":\r\n                    InputEncoding = value;\r\n                    break;\r\n                case \"iconv.internal_encoding\": // legacy option name\r\n                case \"InternalEncoding\":\r\n                    InternalEncoding = value;\r\n                    break;\r\n                case \"iconv.output_encoding\":   // legacy option name\r\n                case \"OutputEncoding\":\r\n                    OutputEncoding = value;\r\n                    break;\r\n\r\n                default:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n    /// Script dependent Iconv configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class IconvGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal IconvGlobalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\"></param>\r\n\t\t/// <param name=\"value\"></param>\r\n\t\t/// <param name=\"node\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (IconvGlobalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n    /// Iconv extension configuration.\r\n\t/// </summary>\r\n    public static class IconvConfiguration\r\n\t{\r\n\t\t#region Legacy Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n            IconvLocalConfig local = (IconvLocalConfig)config.GetLibraryConfig(IconvLibraryDescriptor.Singleton);\r\n            IconvLocalConfig @default = DefaultLocal;\r\n            IconvGlobalConfig global = Global;\r\n\r\n            //[iconv]\r\n            //;iconv.input_encoding = ISO-8859-1\r\n            //;iconv.internal_encoding = ISO-8859-1\r\n            //;iconv.output_encoding = ISO-8859-1\r\n\r\n\t\t\tswitch (option)\r\n\t\t\t{\r\n                //// local:\r\n\r\n                case \"iconv.input_encoding\":\r\n                    return PhpIni.GSR(ref local.InputEncoding, @default.InputEncoding, value, action);\r\n\r\n                case \"iconv.internal_encoding\":\r\n                    return PhpIni.GSR(ref local.InternalEncoding, @default.InternalEncoding, value, action);\r\n\r\n                case \"iconv.output_encoding\":\r\n                    return PhpIni.GSR(ref local.OutputEncoding, @default.OutputEncoding, value, action);\r\n\r\n            }\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n        /// Writes Iconv legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToIconv(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n            var local = new IconvLocalConfig();\r\n\t\t\tvar global = new IconvGlobalConfig();\r\n\t\t\tvar ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            ow.StartSection(\"iconv\");\r\n\r\n            // local:\r\n            ow.WriteOption(\"iconv.input_encoding\", \"InputEncoding\", \"ISO-8859-1\", local.InputEncoding);\r\n            ow.WriteOption(\"iconv.internal_encoding\", \"InternalEncoding\", \"ISO-8859-1\", local.InternalEncoding);\r\n            ow.WriteOption(\"iconv.output_encoding\", \"OutputEncoding\", \"ISO-8859-1\", local.OutputEncoding);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\tconst string s = \"iconv\";\r\n\t\t\tGetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            IniOptions.Register(\"iconv.input_encoding\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            IniOptions.Register(\"iconv.internal_encoding\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            IniOptions.Register(\"iconv.output_encoding\", IniFlags.Supported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n        public static IconvLocalConfig Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (IconvLocalConfig)Configuration.Local.GetLibraryConfig(IconvLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n        public static IconvLocalConfig DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (IconvLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(IconvLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the global library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static IconvGlobalConfig Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n                return (IconvGlobalConfig)Configuration.Global.GetLibraryConfig(IconvLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n        public static IconvLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n            return (IconvLocalConfig)context.Config.GetLibraryConfig(IconvLibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Extension.iconv.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{5E1DFCA3-11ED-491D-8EC0-7923ECC9CC03}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <AssemblyName>PhpNet.Extension.Iconv</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Iconv</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"Configuration.cs\" />\r\n    <Compile Include=\"StopEncoderFallback.cs\" />\r\n    <Compile Include=\"IgnoreEncoderFallback.cs\" />\r\n    <Compile Include=\"LibraryDescriptor.cs\" />\r\n    <Compile Include=\"PhpNetIconv.cs\" />\r\n    <Compile Include=\"Strings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Strings.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"TranslitEncoderFallback.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\mbstring\\Extension.mbstring.csproj\">\r\n      <Project>{533EA853-45F3-483D-8C89-CF686249CC5E}</Project>\r\n      <Name>Extension.mbstring</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Strings.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Strings.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.iconv.nuspec\" />\r\n    <None Include=\"Resources\\translit.def\" />\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Extension.iconv.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger Extension iconv text transliteration conversion</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/iconv/IgnoreEncoderFallback.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n    internal class IgnoreEncoderFallback : EncoderFallback\r\n    {\r\n\r\n\r\n        public override EncoderFallbackBuffer CreateFallbackBuffer()\r\n        {\r\n            return new IgnoreEncoderFallbackBuffer(this);\r\n        }\r\n\r\n        public override int MaxCharCount\r\n        {\r\n            get { return 0; }\r\n        }\r\n\r\n\r\n    }\r\n\r\n    internal class IgnoreEncoderFallbackBuffer : EncoderFallbackBuffer\r\n    {\r\n        public IgnoreEncoderFallbackBuffer(IgnoreEncoderFallback fallback)\r\n        {\r\n\r\n        }\r\n\r\n        public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public override bool Fallback(char charUnknown, int index)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public override char GetNextChar()\r\n        {\r\n            return '\\0';\r\n        }\r\n\r\n        public override bool MovePrevious()\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public override int Remaining\r\n        {\r\n            get { return 0; }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/LibraryDescriptor.cs",
    "content": "using System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n    public sealed class IconvLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n        internal static IconvLibraryDescriptor Singleton { get { return singleton; } }\r\n        private static IconvLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtensionName }; }\r\n        //}\r\n        //internal const string ExtensionName = \"zlib\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\r\n            IconvConfiguration.RegisterLegacyOptions();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the MSSQL library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n            ConfigUtils.ParseNameValueList(section, context, (IconvLocalConfig)result.Local, (IconvGlobalConfig)result.Global);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n            return new ConfigContextBase(new IconvLocalConfig(), new IconvGlobalConfig());\r\n\t\t}\r\n\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/Extensions/iconv/PhpNetIconv.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n\r\n    public static class PhpNetIconv\r\n    {\r\n        #region Constants\r\n\r\n        /// <summary>\r\n        /// The implementation name\r\n        /// </summary>\r\n        [ImplementsConstant(\"ICONV_IMPL\")]\r\n        public const string Implementation = \"Phalanger Iconv\";\r\n\r\n        /// <summary>\r\n        /// The implementation version\r\n        /// </summary>\r\n        [ImplementsConstant(\"ICONV_VERSION\")]\r\n        public const string Version = \"\";    // TODO: current version, somehow automatically from AssemblyVersion\r\n\r\n        public enum DecodeMode : int\r\n        {\r\n            None = 0,\r\n\r\n            [ImplementsConstant(\"ICONV_MIME_DECODE_STRICT\")]\r\n            Strict = 1,\r\n\r\n            [ImplementsConstant(\"ICONV_MIME_DECODE_CONTINUE_ON_ERROR\")]\r\n            ContinueOnError = 2,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Helper functions\r\n\r\n        /// <summary>\r\n        /// An optional string that can be appended to the output encoding name. Causes transliteration of characters that cannot be converted to the output encoding.\r\n        /// </summary>\r\n        private const string TranslitEncOption = \"//TRANSLIT\";\r\n\r\n        /// <summary>\r\n        /// An optional string that can be appended to the output encoding name (before <see cref=\"TranslitEncOption\"/> if both are specified). Causes ignoring of characters that cannot be converted to the output encoding.\r\n        /// </summary>\r\n        private const string IgnoreEncOption = \"//IGNORE\";\r\n\r\n        /// <summary>\r\n        /// Remove optional encoding options such as <see cref=\"TranslitEncOption\"/> or <see cref=\"IgnoreEncOption\"/>.\r\n        /// </summary>\r\n        /// <param name=\"encoding\">Original output encoding stirng.</param>\r\n        /// <param name=\"transliterate\">Is set to <c>true</c> if <see cref=\"TranslitEncOption\"/> was specified.</param>\r\n        /// <param name=\"discard_ilseq\">Is set to <c>true</c> if <see cref=\"IgnoreEncOption\"/> was specified.</param>\r\n        /// <returns><paramref name=\"encoding\"/> without optional options.</returns>\r\n        private static string ParseOutputEncoding(string/*!*/encoding, out bool transliterate, out bool discard_ilseq)\r\n        {\r\n            Debug.Assert(encoding != null);\r\n\r\n            if (encoding.EndsWith(TranslitEncOption, StringComparison.Ordinal))\r\n            {\r\n                encoding = encoding.Substring(0, encoding.Length - TranslitEncOption.Length);\r\n                transliterate = true;\r\n            }\r\n            else\r\n                transliterate = false;\r\n\r\n            if (encoding.EndsWith(IgnoreEncOption, StringComparison.Ordinal))\r\n            {\r\n                encoding = encoding.Substring(0, encoding.Length - IgnoreEncOption.Length);\r\n                discard_ilseq = true;\r\n            }\r\n            else\r\n                discard_ilseq = false;\r\n\r\n            //\r\n            return encoding;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Try to find <see cref=\"Encoding\"/> by its PHP name.\r\n        /// </summary>\r\n        /// <param name=\"encoding\">Encoding name.</param>\r\n        /// <returns><see cref=\"Encoding\"/> instance or <c>null</c> if nothing was found.</returns>\r\n        private static Encoding ResolveEncoding(string encoding)\r\n        {\r\n            return PHP.Library.Strings.MultiByteString.GetEncoding(encoding);\r\n        }\r\n\r\n        #endregion\r\n\r\n        //iconv_get_encoding — Retrieve internal configuration variables of iconv extension\r\n        [ImplementsFunction(\"iconv_get_encoding\")]\r\n        public static object iconv_get_encoding()\r\n        {\r\n            return GetIconvEncodingAll();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve internal configuration variables of iconv extension.\r\n        /// </summary>\r\n        /// <param name=\"type\">\r\n        /// The value of the optional type can be:\r\n        /// - all\r\n        /// - input_encoding\r\n        /// - output_encoding\r\n        /// - internal_encoding\r\n        /// </param>\r\n        /// <returns>Returns the current value of the internal configuration variable if successful or <c>false</c> on failure.\r\n        /// If <paramref name=\"type\"/> is omitted or set to <c>all</c>, iconv_get_encoding() returns an array that stores all these variables.</returns>\r\n        [ImplementsFunction(\"iconv_get_encoding\")]\r\n        public static object iconv_get_encoding(string type /*= \"all\"*/)\r\n        {\r\n            if (type.EqualsOrdinalIgnoreCase(\"all\"))\r\n                return GetIconvEncodingAll();\r\n\r\n            // \r\n            var local = IconvConfiguration.Local;\r\n            \r\n            if (type.EqualsOrdinalIgnoreCase(\"input_encoding\"))\r\n                return local.InputEncoding;\r\n\r\n            if (type.EqualsOrdinalIgnoreCase(\"output_encoding\"))\r\n                return local.OutputEncoding;\r\n\r\n            if (type.EqualsOrdinalIgnoreCase(\"internal_encoding\"))\r\n                return local.InternalEncoding;\r\n            \r\n            return false;\r\n        }\r\n\r\n        private static PhpArray/*!*/GetIconvEncodingAll()\r\n        {\r\n            var local = IconvConfiguration.Local;\r\n\r\n            var ret = new PhpArray(3);\r\n            ret.Add(\"input_encoding\", local.InputEncoding);\r\n            ret.Add(\"output_encoding\", local.OutputEncoding);\r\n            ret.Add(\"internal_encoding\", local.InternalEncoding);\r\n            return ret;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set current setting for character encoding conversion.\r\n        /// </summary>\r\n        /// <param name=\"type\">The value of type can be any one of these:\r\n        /// - input_encoding\r\n        /// - output_encoding\r\n        /// - internal_encoding\r\n        /// </param>\r\n        /// <param name=\"charset\">The character set.</param>\r\n        /// <returns>Returns <c>TRUE</c> on success or <c>FALSE</c> on failure.</returns>\r\n        [ImplementsFunction(\"iconv_set_encoding\")]\r\n        public static object iconv_set_encoding(string type, string charset)\r\n        {\r\n            var encoding = ResolveEncoding(charset);\r\n            if (encoding == null)\r\n            {\r\n                PhpException.InvalidArgument(\"charset\");    // TODO: PHP error message\r\n                return false;\r\n            }\r\n\r\n            // \r\n            var local = IconvConfiguration.Local;\r\n\r\n            if (type.EqualsOrdinalIgnoreCase(\"input_encoding\"))\r\n            {\r\n                local.InputEncoding = charset;\r\n            }\r\n            else if (type.EqualsOrdinalIgnoreCase(\"output_encoding\"))\r\n            {\r\n                local.OutputEncoding = charset;\r\n            }\r\n            else if (type.EqualsOrdinalIgnoreCase(\"internal_encoding\"))\r\n            {\r\n                local.InternalEncoding = charset;\r\n            }\r\n            else\r\n            {\r\n                PhpException.InvalidArgument(\"type\");\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        //iconv_mime_decode_headers — Decodes multiple MIME header fields at once\r\n        //iconv_mime_decode — Decodes a MIME header field\r\n        //iconv_mime_encode — Composes a MIME header field\r\n        \r\n        /// <summary>\r\n        /// Returns the character count of string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string.</param>\r\n        /// <returns>Returns the character count of str, as an integer.</returns>\r\n        [ImplementsFunction(\"iconv_strlen\")]\r\n        public static int iconv_strlen(object str)\r\n        {\r\n            return iconv_strlen(str, IconvConfiguration.Local.InternalEncoding);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the character count of string.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string.</param>\r\n        /// <param name=\"charset\">If charset parameter is omitted, <paramref name=\"str\"/> is assumed to be encoded in iconv.internal_encoding.</param>\r\n        /// <returns>Returns the character count of str, as an integer.</returns>\r\n        [ImplementsFunction(\"iconv_strlen\")]\r\n        public static int iconv_strlen(object str, string charset/*=iconv.internal_encoding*/)\r\n        {\r\n            if (str == null)\r\n                return 0;\r\n\r\n            if (str.GetType() == typeof(string))\r\n                return ((string)str).Length;\r\n\r\n            if (str.GetType() == typeof(PhpBytes))\r\n            {\r\n                var bytes = (PhpBytes)str;\r\n                if (bytes.Length == 0)\r\n                    return 0;\r\n\r\n                var encoding = ResolveEncoding(charset);\r\n                if (encoding == null) throw new NotSupportedException(\"charset not supported\"); // TODO: PHP friendly warning\r\n\r\n                return encoding.GetCharCount(bytes.ReadonlyData);\r\n            }\r\n\r\n            //\r\n            var strstr = Core.Convert.ObjectToString(str);\r\n            return (strstr != null) ? strstr.Length : 0;\r\n        }\r\n\r\n        [ImplementsFunction(\"iconv_strpos\")]\r\n        [return: CastToFalse]\r\n        public static int iconv_strpos(object haystack, object needle)\r\n        {\r\n            return iconv_strpos(haystack, needle, 0);\r\n        }\r\n\r\n        [ImplementsFunction(\"iconv_strpos\")]\r\n        [return: CastToFalse]\r\n        public static int iconv_strpos(object haystack, object needle, int offset /*= 0*/)\r\n        {\r\n            return iconv_strpos(haystack, needle, offset, IconvConfiguration.Local.InternalEncoding);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds position of first occurrence of a needle within a haystack.\r\n        /// In contrast to strpos(), the return value of iconv_strpos() is the number of characters that appear before the needle, rather than the offset in bytes to the position where the needle has been found. The characters are counted on the basis of the specified character set charset.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The entire string.</param>\r\n        /// <param name=\"needle\">The searched substring.</param>\r\n        /// <param name=\"offset\">The optional offset parameter specifies the position from which the search should be performed.</param>\r\n        /// <param name=\"charset\">If charset parameter is omitted, string are assumed to be encoded in iconv.internal_encoding.</param>\r\n        /// <returns>Returns the numeric position of the first occurrence of needle in haystack. If needle is not found, iconv_strpos() will return FALSE.</returns>\r\n        [ImplementsFunction(\"iconv_strpos\")]\r\n        [return: CastToFalse]\r\n        public static int iconv_strpos(object haystack, object needle, int offset /*= 0*/, string charset /*= ini_get(\"iconv.internal_encoding\")*/)\r\n        {   \r\n            if (haystack == null || needle == null)\r\n                return -1;\r\n\r\n            var encoding = ResolveEncoding(charset);\r\n            string haystackstr = (haystack.GetType() == typeof(PhpBytes)) ? encoding.GetString(((PhpBytes)haystack).ReadonlyData) : Core.Convert.ObjectToString(haystack);\r\n            string needlestr = (needle.GetType() == typeof(PhpBytes)) ? encoding.GetString(((PhpBytes)needle).ReadonlyData) : Core.Convert.ObjectToString(needle);\r\n\r\n            return PHP.Library.PhpStrings.Strpos(haystackstr, needlestr, offset);\r\n        }\r\n\r\n        [ImplementsFunction(\"iconv_strrpos\")]\r\n        [return: CastToFalse]\r\n        public static int iconv_strrpos(object haystack, object needle)\r\n        {\r\n            return iconv_strrpos(haystack, needle, IconvConfiguration.Local.InternalEncoding);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds the last occurrence of a needle within a haystack.\r\n        /// In contrast to strrpos(), the return value of iconv_strrpos() is the number of characters that appear before the needle, rather than the offset in bytes to the position where the needle has been found. The characters are counted on the basis of the specified character set charset.\r\n        /// </summary>\r\n        /// <param name=\"haystack\">The entire string.</param>\r\n        /// <param name=\"needle\">The searched substring.</param>\r\n        /// <param name=\"charset\">If charset parameter is omitted, string are assumed to be encoded in iconv.internal_encoding.</param>\r\n        /// <returns>Returns the numeric position of the last occurrence of needle in haystack. If needle is not found, iconv_strpos() will return FALSE.</returns>\r\n        [ImplementsFunction(\"iconv_strrpos\")]\r\n        [return: CastToFalse]\r\n        public static int iconv_strrpos(object haystack, object needle, string charset /*= ini_get(\"iconv.internal_encoding\")*/)\r\n        {\r\n            if (haystack == null || needle == null)\r\n                return -1;\r\n\r\n            var encoding = ResolveEncoding(charset);\r\n            string haystackstr = (haystack.GetType() == typeof(PhpBytes)) ? encoding.GetString(((PhpBytes)haystack).ReadonlyData) : Core.Convert.ObjectToString(haystack);\r\n            string needlestr = (needle.GetType() == typeof(PhpBytes)) ? encoding.GetString(((PhpBytes)needle).ReadonlyData) : Core.Convert.ObjectToString(needle);\r\n\r\n            return PHP.Library.PhpStrings.Strrpos(haystackstr, needlestr);\r\n        }\r\n\r\n        [ImplementsFunction(\"iconv_substr\")]\r\n        public static object iconv_substr(object/*string*/str, int offset)\r\n        {\r\n            return iconv_substr(str, offset, int.MaxValue);\r\n        }\r\n\r\n        [ImplementsFunction(\"iconv_substr\")]\r\n        public static object iconv_substr(object/*string*/str, int offset, int length /*= iconv_strlen($str, $charset)*/)\r\n        {\r\n            return iconv_substr(str, offset, length, IconvConfiguration.Local.InternalEncoding);\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Cuts a portion of <paramref name=\"str\"/> specified by the <paramref name=\"offset\"/> and <paramref name=\"length\"/> parameters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The original string.</param>\r\n        /// <param name=\"offset\">If offset is non-negative, iconv_substr() cuts the portion out of str beginning at offset'th character, counting from zero.\r\n        /// If offset is negative, iconv_substr() cuts out the portion beginning at the position, offset characters away from the end of str.</param>\r\n        /// <param name=\"length\">If length is given and is positive, the return value will contain at most length characters of the portion that begins at offset (depending on the length of string).\r\n        /// If negative length is passed, iconv_substr() cuts the portion out of str from the offset'th character up to the character that is length characters away from the end of the string. In case offset is also negative, the start position is calculated beforehand according to the rule explained above.</param>\r\n        /// <param name=\"charset\">If charset parameter is omitted, string are assumed to be encoded in iconv.internal_encoding.\r\n        /// Note that offset and length parameters are always deemed to represent offsets that are calculated on the basis of the character set determined by charset, whilst the counterpart substr() always takes these for byte offsets.</param>\r\n        /// <returns>Returns the portion of str specified by the offset and length parameters.\r\n        /// If str is shorter than offset characters long, FALSE will be returned.</returns>\r\n        [ImplementsFunction(\"iconv_substr\")]\r\n        public static object iconv_substr(object/*string*/str, int offset, int length /*= iconv_strlen($str, $charset)*/ , string charset /*= ini_get(\"iconv.internal_encoding\")*/)\r\n        {\r\n            if (str == null)\r\n                return false;\r\n\r\n            if (str.GetType() == typeof(PhpBytes))\r\n            {\r\n                var bytes = (PhpBytes)str;\r\n                if (bytes.Length == 0)\r\n                    return string.Empty;\r\n\r\n                var encoding = ResolveEncoding(charset);\r\n                if (encoding == null) throw new NotSupportedException(\"charset not supported\"); // TODO: PHP friendly warning\r\n\r\n                return PHP.Library.PhpStrings.Substring(encoding.GetString(bytes.ReadonlyData), offset, length);\r\n            }\r\n\r\n            return PHP.Library.PhpStrings.Substring(Core.Convert.ObjectToString(str), offset, length);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs a character set conversion on the string str from in_charset to out_charset.\r\n        /// </summary>\r\n        /// <param name=\"in_charset\">The input charset.</param>\r\n        /// <param name=\"out_charset\">The output charset.\r\n        /// \r\n        /// If you append the string //TRANSLIT to out_charset transliteration is activated.\r\n        /// This means that when a character can't be represented in the target charset,\r\n        /// it can be approximated through one or several similarly looking characters.\r\n        /// \r\n        /// If you append the string //IGNORE, characters that cannot be represented in the target\r\n        /// charset are silently discarded. Otherwise, <paramref name=\"str\"/> is cut from the first\r\n        /// illegal character and an E_NOTICE is generated.</param>\r\n        /// <param name=\"str\"></param>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"iconv\")]\r\n        [return: CastToFalse]\r\n        public static PhpBytes iconv(string in_charset, string out_charset, object str)\r\n        {\r\n            // check args\r\n            if (str == null)\r\n            {\r\n                PhpException.ArgumentNull(\"str\");\r\n                return null;\r\n            }\r\n            if (out_charset == null)\r\n            {\r\n                PhpException.ArgumentNull(\"out_charset\");\r\n                return null;\r\n            }\r\n\r\n            // resolve out_charset\r\n            bool transliterate, discard_ilseq;\r\n            out_charset = ParseOutputEncoding(out_charset, out transliterate, out discard_ilseq);\r\n            var out_encoding = ResolveEncoding(out_charset);\r\n            if (out_encoding == null)\r\n            {\r\n                PhpException.Throw(PhpError.Notice, string.Format(Strings.wrong_charset, out_charset, in_charset, out_charset));\r\n                return null;\r\n            }\r\n\r\n            // out_encoding.Clone() ensures it is NOT readOnly\r\n            // then set EncoderFallback to catch handle unconvertable characters\r\n\r\n            out_encoding = (Encoding)out_encoding.Clone();\r\n\r\n            var out_result = new EncoderResult();\r\n\r\n            if (transliterate)\r\n                out_encoding.EncoderFallback = new TranslitEncoderFallback();   // transliterate unknown characters\r\n            else if (discard_ilseq)\r\n                out_encoding.EncoderFallback = new IgnoreEncoderFallback();    // ignore character and continue\r\n            else\r\n                out_encoding.EncoderFallback = new StopEncoderFallback(out_result);    // throw notice and discard all remaining characters\r\n\r\n            try\r\n            {\r\n                //\r\n                if (str.GetType() == typeof(PhpBytes))\r\n                {\r\n                    // resolve in_charset\r\n                    if (in_charset == null)\r\n                    {\r\n                        PhpException.ArgumentNull(\"in_charset\");\r\n                        return null;\r\n                    }\r\n                    var in_encoding = ResolveEncoding(in_charset);\r\n                    if (in_encoding == null)\r\n                    {\r\n                        PhpException.Throw(PhpError.Notice, string.Format(Strings.wrong_charset, in_charset, in_charset, out_charset));\r\n                        return null;\r\n                    }\r\n\r\n                    // TODO: in_encoding.Clone() ensures it is NOT readOnly, then set DecoderFallback to catch invalid byte sequences\r\n\r\n                    // convert <in_charset> to <out_charset>\r\n                    return new PhpBytes(out_encoding.GetBytes(in_encoding.GetString(((PhpBytes)str).ReadonlyData)));\r\n                }\r\n\r\n                if (str.GetType() == typeof(string) || (str = Core.Convert.ObjectToString(str)) != null)\r\n                {\r\n                    // convert UTF16 to <out_charset>\r\n                    return new PhpBytes(out_encoding.GetBytes((string)str));\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                if (out_result.firstFallbackCharIndex >= 0)\r\n                {\r\n                    // Notice: iconv(): Detected an illegal character in input string\r\n                    PHP.Core.PhpException.Throw(Core.PhpError.Notice, Strings.illegal_character);\r\n                }\r\n            }\r\n            \r\n            return null;\r\n        }\r\n\r\n        //ob_iconv_handler — Convert character encoding as output buffer handler\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Resources/translit.def",
    "content": "# Copyright (C) 1999-2003 Free Software Foundation, Inc.\n# This file is part of the GNU LIBICONV Library.\n#\n# The GNU LIBICONV Library is free software; you can redistribute it\n# and/or modify it under the terms of the GNU Library General Public\n# License as published by the Free Software Foundation; either version 2\n# of the License, or (at your option) any later version.\n#\n# The GNU LIBICONV Library is distributed in the hope that it will be\n# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n# Library General Public License for more details.\n#\n# You should have received a copy of the GNU Library General Public\n# License along with the GNU LIBICONV Library; see the file COPYING.LIB.\n# If not, write to the Free Software Foundation, Inc., 59 Temple Place -\n# Suite 330, Boston, MA 02111-1307, USA.\n#\n#\n# Definition of transliteration from Unicode to poorer character sets.\n#\n# This covers all of Markus Kuhn's TARGET1.\n#\n# The second column gives the transliteration. It is enclosed between tabs!\n#\n00A0\t \t# NO-BREAK SPACE\n00A1\t!\t# INVERTED EXCLAMATION MARK\n00A2\tc\t# CENT SIGN\n00A3\tlb\t# POUND SIGN\n00A4\t\t# CURRENCY SIGN\n00A5\tyen\t# YEN SIGN\n00A6\t|\t# BROKEN BAR\n00A7\tSS\t# SECTION SIGN\n00A8\t\"\t# DIAERESIS\n00A9\t(c)\t# COPYRIGHT SIGN\n00AA\ta\t# FEMININE ORDINAL INDICATOR\n00AB\t<<\t# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00AC\tnot\t# NOT SIGN\n00AD\t-\t# SOFT HYPHEN\n00AE\t(R)\t# REGISTERED SIGN\n00AF\t\t# MACRON\n00B0\t^0\t# DEGREE SIGN\n00B1\t+/-\t# PLUS-MINUS SIGN\n00B2\t^2\t# SUPERSCRIPT TWO\n00B3\t^3\t# SUPERSCRIPT THREE\n00B4\t'\t# ACUTE ACCENT\n00B5\tu\t# MICRO SIGN\n00B6\tP\t# PILCROW SIGN\n00B7\t.\t# MIDDLE DOT\n00B8\t,\t# CEDILLA\n00B9\t^1\t# SUPERSCRIPT ONE\n00BA\to\t# MASCULINE ORDINAL INDICATOR\n00BB\t>>\t# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BC\t 1⁄4 \t# VULGAR FRACTION ONE QUARTER\n00BD\t 1⁄2 \t# VULGAR FRACTION ONE HALF\n00BE\t 3⁄4 \t# VULGAR FRACTION THREE QUARTERS\n00BF\t?\t# INVERTED QUESTION MARK\n00C0\t`A\t# LATIN CAPITAL LETTER A WITH GRAVE\n00C1\t´A\t# LATIN CAPITAL LETTER A WITH ACUTE\n00C2\t^A\t# LATIN CAPITAL LETTER A WITH CIRCUMFLEX\n00C3\t~A\t# LATIN CAPITAL LETTER A WITH TILDE\n00C4\t\"A\t# LATIN CAPITAL LETTER A WITH DIAERESIS\n00C5\tA\t# LATIN CAPITAL LETTER A WITH RING ABOVE\n00C6\tAE\t# LATIN CAPITAL LETTER AE\n00C7\tC\t# LATIN CAPITAL LETTER C WITH CEDILLA\n00C8\t`E\t# LATIN CAPITAL LETTER E WITH GRAVE\n00C9\t´E\t# LATIN CAPITAL LETTER E WITH ACUTE\n00CA\t^E\t# LATIN CAPITAL LETTER E WITH CIRCUMFLEX\n00CB\t\"E\t# LATIN CAPITAL LETTER E WITH DIAERESIS\n00CC\t`I\t# LATIN CAPITAL LETTER I WITH GRAVE\n00CD\t´I\t# LATIN CAPITAL LETTER I WITH ACUTE\n00CE\t^I\t# LATIN CAPITAL LETTER I WITH CIRCUMFLEX\n00CF\t\"I\t# LATIN CAPITAL LETTER I WITH DIAERESIS\n00D0\tD\t# LATIN CAPITAL LETTER ETH\n00D1\t~N\t# LATIN CAPITAL LETTER N WITH TILDE\n00D2\t`O\t# LATIN CAPITAL LETTER O WITH GRAVE\n00D3\t´O\t# LATIN CAPITAL LETTER O WITH ACUTE\n00D4\t^O\t# LATIN CAPITAL LETTER O WITH CIRCUMFLEX\n00D5\t~O\t# LATIN CAPITAL LETTER O WITH TILDE\n00D6\t\"O\t# LATIN CAPITAL LETTER O WITH DIAERESIS\n00D7\tx\t# MULTIPLICATION SIGN\n00D8\tO\t# LATIN CAPITAL LETTER O WITH STROKE\n00D9\t`U\t# LATIN CAPITAL LETTER U WITH GRAVE\n00DA\t´U\t# LATIN CAPITAL LETTER U WITH ACUTE\n00DB\t^U\t# LATIN CAPITAL LETTER U WITH CIRCUMFLEX\n00DC\t\"U\t# LATIN CAPITAL LETTER U WITH DIAERESIS\n00DD\t´Y\t# LATIN CAPITAL LETTER Y WITH ACUTE\n00DE\tTh\t# LATIN CAPITAL LETTER THORN\n00DF\tss\t# LATIN SMALL LETTER SHARP S\n00E0\t`a\t# LATIN SMALL LETTER A WITH GRAVE\n00E1\t´a\t# LATIN SMALL LETTER A WITH ACUTE\n00E2\t^a\t# LATIN SMALL LETTER A WITH CIRCUMFLEX\n00E3\t~a\t# LATIN SMALL LETTER A WITH TILDE\n00E4\t\"a\t# LATIN SMALL LETTER A WITH DIAERESIS\n00E5\ta\t# LATIN SMALL LETTER A WITH RING ABOVE\n00E6\tae\t# LATIN SMALL LETTER AE\n00E7\tc\t# LATIN SMALL LETTER C WITH CEDILLA\n00E8\t`e\t# LATIN SMALL LETTER E WITH GRAVE\n00E9\t´e\t# LATIN SMALL LETTER E WITH ACUTE\n00EA\t^e\t# LATIN SMALL LETTER E WITH CIRCUMFLEX\n00EB\t\"e\t# LATIN SMALL LETTER E WITH DIAERESIS\n00EC\t`i\t# LATIN SMALL LETTER I WITH GRAVE\n00ED\t´i\t# LATIN SMALL LETTER I WITH ACUTE\n00EE\t^i\t# LATIN SMALL LETTER I WITH CIRCUMFLEX\n00EF\t\"i\t# LATIN SMALL LETTER I WITH DIAERESIS\n00F0\td\t# LATIN SMALL LETTER ETH\n00F1\t~n\t# LATIN SMALL LETTER N WITH TILDE\n00F2\t`o\t# LATIN SMALL LETTER O WITH GRAVE\n00F3\t´o\t# LATIN SMALL LETTER O WITH ACUTE\n00F4\t^o\t# LATIN SMALL LETTER O WITH CIRCUMFLEX\n00F5\t~o\t# LATIN SMALL LETTER O WITH TILDE\n00F6\t\"o\t# LATIN SMALL LETTER O WITH DIAERESIS\n00F7\t:\t# DIVISION SIGN\n00F8\to\t# LATIN SMALL LETTER O WITH STROKE\n00F9\t`u\t# LATIN SMALL LETTER U WITH GRAVE\n00FA\t´u\t# LATIN SMALL LETTER U WITH ACUTE\n00FB\t^u\t# LATIN SMALL LETTER U WITH CIRCUMFLEX\n00FC\t\"u\t# LATIN SMALL LETTER U WITH DIAERESIS\n00FD\t´y\t# LATIN SMALL LETTER Y WITH ACUTE\n00FE\tth\t# LATIN SMALL LETTER THORN\n00FF\t\"y\t# LATIN SMALL LETTER Y WITH DIAERESIS\n0100\tA\t# LATIN CAPITAL LETTER A WITH MACRON\n0101\ta\t# LATIN SMALL LETTER A WITH MACRON\n0102\tA\t# LATIN CAPITAL LETTER A WITH BREVE\n0103\ta\t# LATIN SMALL LETTER A WITH BREVE\n0104\tA\t# LATIN CAPITAL LETTER A WITH OGONEK\n0105\ta\t# LATIN SMALL LETTER A WITH OGONEK\n0106\t´C\t# LATIN CAPITAL LETTER C WITH ACUTE\n0107\t´c\t# LATIN SMALL LETTER C WITH ACUTE\n0108\t^C\t# LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n0109\t^c\t# LATIN SMALL LETTER C WITH CIRCUMFLEX\n010A\tC\t# LATIN CAPITAL LETTER C WITH DOT ABOVE\n010B\tc\t# LATIN SMALL LETTER C WITH DOT ABOVE\n010C\tC\t# LATIN CAPITAL LETTER C WITH CARON\n010D\tc\t# LATIN SMALL LETTER C WITH CARON\n010E\tD\t# LATIN CAPITAL LETTER D WITH CARON\n010F\td\t# LATIN SMALL LETTER D WITH CARON\n0110\tD\t# LATIN CAPITAL LETTER D WITH STROKE\n0111\td\t# LATIN SMALL LETTER D WITH STROKE\n0112\tE\t# LATIN CAPITAL LETTER E WITH MACRON\n0113\te\t# LATIN SMALL LETTER E WITH MACRON\n0114\tE\t# LATIN CAPITAL LETTER E WITH BREVE\n0115\te\t# LATIN SMALL LETTER E WITH BREVE\n0116\tE\t# LATIN CAPITAL LETTER E WITH DOT ABOVE\n0117\te\t# LATIN SMALL LETTER E WITH DOT ABOVE\n0118\tE\t# LATIN CAPITAL LETTER E WITH OGONEK\n0119\te\t# LATIN SMALL LETTER E WITH OGONEK\n011A\tE\t# LATIN CAPITAL LETTER E WITH CARON\n011B\te\t# LATIN SMALL LETTER E WITH CARON\n011C\t^G\t# LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011D\t^g\t# LATIN SMALL LETTER G WITH CIRCUMFLEX\n011E\tG\t# LATIN CAPITAL LETTER G WITH BREVE\n011F\tg\t# LATIN SMALL LETTER G WITH BREVE\n0120\tG\t# LATIN CAPITAL LETTER G WITH DOT ABOVE\n0121\tg\t# LATIN SMALL LETTER G WITH DOT ABOVE\n0122\tG\t# LATIN CAPITAL LETTER G WITH CEDILLA\n0123\tg\t# LATIN SMALL LETTER G WITH CEDILLA\n0124\t^H\t# LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0125\t^h\t# LATIN SMALL LETTER H WITH CIRCUMFLEX\n0126\tH\t# LATIN CAPITAL LETTER H WITH STROKE\n0127\th\t# LATIN SMALL LETTER H WITH STROKE\n0128\t~I\t# LATIN CAPITAL LETTER I WITH TILDE\n0129\t~i\t# LATIN SMALL LETTER I WITH TILDE\n012A\tI\t# LATIN CAPITAL LETTER I WITH MACRON\n012B\ti\t# LATIN SMALL LETTER I WITH MACRON\n012C\tI\t# LATIN CAPITAL LETTER I WITH BREVE\n012D\ti\t# LATIN SMALL LETTER I WITH BREVE\n012E\tI\t# LATIN CAPITAL LETTER I WITH OGONEK\n012F\ti\t# LATIN SMALL LETTER I WITH OGONEK\n0130\tI\t# LATIN CAPITAL LETTER I WITH DOT ABOVE\n0131\ti\t# LATIN SMALL LETTER DOTLESS I\n0132\tIJ\t# LATIN CAPITAL LIGATURE IJ\n0133\tij\t# LATIN SMALL LIGATURE IJ\n0134\t^J\t# LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0135\t^j\t# LATIN SMALL LETTER J WITH CIRCUMFLEX\n0136\tK\t# LATIN CAPITAL LETTER K WITH CEDILLA\n0137\tk\t# LATIN SMALL LETTER K WITH CEDILLA\n0138\t\t# LATIN SMALL LETTER KRA\n0139\tL\t# LATIN CAPITAL LETTER L WITH ACUTE\n013A\tl\t# LATIN SMALL LETTER L WITH ACUTE\n013B\tL\t# LATIN CAPITAL LETTER L WITH CEDILLA\n013C\tl\t# LATIN SMALL LETTER L WITH CEDILLA\n013D\tL\t# LATIN CAPITAL LETTER L WITH CARON\n013E\tl\t# LATIN SMALL LETTER L WITH CARON\n013F\tL\t# LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0140\tl\t# LATIN SMALL LETTER L WITH MIDDLE DOT\n0141\tL\t# LATIN CAPITAL LETTER L WITH STROKE\n0142\tl\t# LATIN SMALL LETTER L WITH STROKE\n0143\t´N\t# LATIN CAPITAL LETTER N WITH ACUTE\n0144\t´n\t# LATIN SMALL LETTER N WITH ACUTE\n0145\tN\t# LATIN CAPITAL LETTER N WITH CEDILLA\n0146\tn\t# LATIN SMALL LETTER N WITH CEDILLA\n0147\tN\t# LATIN CAPITAL LETTER N WITH CARON\n0148\tn\t# LATIN SMALL LETTER N WITH CARON\n0149\t'n\t# LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014A\t\t# LATIN CAPITAL LETTER ENG\n014B\t\t# LATIN SMALL LETTER ENG\n014C\tO\t# LATIN CAPITAL LETTER O WITH MACRON\n014D\to\t# LATIN SMALL LETTER O WITH MACRON\n014E\tO\t# LATIN CAPITAL LETTER O WITH BREVE\n014F\to\t# LATIN SMALL LETTER O WITH BREVE\n0150\t\"O\t# LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0151\t\"o\t# LATIN SMALL LETTER O WITH DOUBLE ACUTE\n0152\tOE\t# LATIN CAPITAL LIGATURE OE\n0153\toe\t# LATIN SMALL LIGATURE OE\n0154\t´R\t# LATIN CAPITAL LETTER R WITH ACUTE\n0155\t´r\t# LATIN SMALL LETTER R WITH ACUTE\n0156\tR\t# LATIN CAPITAL LETTER R WITH CEDILLA\n0157\tr\t# LATIN SMALL LETTER R WITH CEDILLA\n0158\tR\t# LATIN CAPITAL LETTER R WITH CARON\n0159\tr\t# LATIN SMALL LETTER R WITH CARON\n015A\t´S\t# LATIN CAPITAL LETTER S WITH ACUTE\n015B\t´s\t# LATIN SMALL LETTER S WITH ACUTE\n015C\t^S\t# LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015D\t^s\t# LATIN SMALL LETTER S WITH CIRCUMFLEX\n015E\tS\t# LATIN CAPITAL LETTER S WITH CEDILLA\n015F\ts\t# LATIN SMALL LETTER S WITH CEDILLA\n0160\tS\t# LATIN CAPITAL LETTER S WITH CARON\n0161\ts\t# LATIN SMALL LETTER S WITH CARON\n0162\tT\t# LATIN CAPITAL LETTER T WITH CEDILLA\n0163\tt\t# LATIN SMALL LETTER T WITH CEDILLA\n0164\tT\t# LATIN CAPITAL LETTER T WITH CARON\n0165\tt\t# LATIN SMALL LETTER T WITH CARON\n0166\tT\t# LATIN CAPITAL LETTER T WITH STROKE\n0167\tt\t# LATIN SMALL LETTER T WITH STROKE\n0168\t~U\t# LATIN CAPITAL LETTER U WITH TILDE\n0169\t~u\t# LATIN SMALL LETTER U WITH TILDE\n016A\tU\t# LATIN CAPITAL LETTER U WITH MACRON\n016B\tu\t# LATIN SMALL LETTER U WITH MACRON\n016C\tU\t# LATIN CAPITAL LETTER U WITH BREVE\n016D\tu\t# LATIN SMALL LETTER U WITH BREVE\n016E\tU\t# LATIN CAPITAL LETTER U WITH RING ABOVE\n016F\tu\t# LATIN SMALL LETTER U WITH RING ABOVE\n0170\t\"U\t# LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0171\t\"u\t# LATIN SMALL LETTER U WITH DOUBLE ACUTE\n0172\tU\t# LATIN CAPITAL LETTER U WITH OGONEK\n0173\tu\t# LATIN SMALL LETTER U WITH OGONEK\n0174\t^W\t# LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0175\t^w\t# LATIN SMALL LETTER W WITH CIRCUMFLEX\n0176\t^Y\t# LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0177\t^y\t# LATIN SMALL LETTER Y WITH CIRCUMFLEX\n0178\t\"Y\t# LATIN CAPITAL LETTER Y WITH DIAERESIS\n0179\t´Z\t# LATIN CAPITAL LETTER Z WITH ACUTE\n017A\t´z\t# LATIN SMALL LETTER Z WITH ACUTE\n017B\tZ\t# LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017C\tz\t# LATIN SMALL LETTER Z WITH DOT ABOVE\n017D\tZ\t# LATIN CAPITAL LETTER Z WITH CARON\n017E\tz\t# LATIN SMALL LETTER Z WITH CARON\n017F\ts\t# LATIN SMALL LETTER LONG S\n018F\t\t# LATIN CAPITAL LETTER SCHWA\n0192\tf\t# LATIN SMALL LETTER F WITH HOOK\n01C4\tDŽ\t# LATIN CAPITAL LETTER DZ WITH CARON\n01C5\tDž\t# LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n01C6\tdž\t# LATIN SMALL LETTER DZ WITH CARON\n01C7\tLJ\t# LATIN CAPITAL LETTER LJ\n01C8\tLj\t# LATIN CAPITAL LETTER L WITH SMALL LETTER J\n01C9\tlj\t# LATIN SMALL LETTER LJ\n01CA\tNJ\t# LATIN CAPITAL LETTER NJ\n01CB\tNj\t# LATIN CAPITAL LETTER N WITH SMALL LETTER J\n01CC\tnj\t# LATIN SMALL LETTER NJ\n01F1\tDZ\t# LATIN CAPITAL LETTER DZ\n01F2\tDz\t# LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n01F3\tdz\t# LATIN SMALL LETTER DZ\n0218\tS\t# LATIN CAPITAL LETTER S WITH COMMA BELOW\n0219\ts\t# LATIN SMALL LETTER S WITH COMMA BELOW\n021A\tT\t# LATIN CAPITAL LETTER T WITH COMMA BELOW\n021B\tt\t# LATIN SMALL LETTER T WITH COMMA BELOW\n0259\t\t# LATIN SMALL LETTER SCHWA\n02B9\t′\t# MODIFIER LETTER PRIME\n02BA\t″\t# MODIFIER LETTER DOUBLE PRIME\n02BB\t‘\t# MODIFIER LETTER TURNED COMMA\n02BC\t’\t# MODIFIER LETTER APOSTROPHE\n02BD\t‛\t# MODIFIER LETTER REVERSED COMMA\n02C6\t^\t# MODIFIER LETTER CIRCUMFLEX ACCENT\n02C7\t\t# CARON\n02C8\t'\t# MODIFIER LETTER VERTICAL LINE\n02C9\t¯\t# MODIFIER LETTER MACRON\n02CA\t´\t# MODIFIER LETTER ACUTE ACCENT\n02CB\t`\t# MODIFIER LETTER GRAVE ACCENT\n02CD\t_\t# MODIFIER LETTER LOW MACRON\n02D8\t\t# BREVE\n02D9\t\t# DOT ABOVE\n02DA\t\t# RING ABOVE\n02DB\t\t# OGONEK\n02DC\t~\t# SMALL TILDE\n02DD\t\"\t# DOUBLE ACUTE ACCENT\n0374\t\t# GREEK NUMERAL SIGN\n0375\t\t# GREEK LOWER NUMERAL SIGN\n037A\t\t# GREEK YPOGEGRAMMENI\n037E\t\t# GREEK QUESTION MARK\n0384\t\t# GREEK TONOS\n0385\t\t# GREEK DIALYTIKA TONOS\n0386\t\t# GREEK CAPITAL LETTER ALPHA WITH TONOS\n0387\t\t# GREEK ANO TELEIA\n0388\t\t# GREEK CAPITAL LETTER EPSILON WITH TONOS\n0389\t\t# GREEK CAPITAL LETTER ETA WITH TONOS\n038A\t\t# GREEK CAPITAL LETTER IOTA WITH TONOS\n038C\t\t# GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E\t\t# GREEK CAPITAL LETTER UPSILON WITH TONOS\n038F\t\t# GREEK CAPITAL LETTER OMEGA WITH TONOS\n0390\t\t# GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n0391\t\t# GREEK CAPITAL LETTER ALPHA\n0392\t\t# GREEK CAPITAL LETTER BETA\n0393\t\t# GREEK CAPITAL LETTER GAMMA\n0394\t\t# GREEK CAPITAL LETTER DELTA\n0395\t\t# GREEK CAPITAL LETTER EPSILON\n0396\t\t# GREEK CAPITAL LETTER ZETA\n0397\t\t# GREEK CAPITAL LETTER ETA\n0398\t\t# GREEK CAPITAL LETTER THETA\n0399\t\t# GREEK CAPITAL LETTER IOTA\n039A\t\t# GREEK CAPITAL LETTER KAPPA\n039B\t\t# GREEK CAPITAL LETTER LAMDA\n039C\t\t# GREEK CAPITAL LETTER MU\n039D\t\t# GREEK CAPITAL LETTER NU\n039E\t\t# GREEK CAPITAL LETTER XI\n039F\t\t# GREEK CAPITAL LETTER OMICRON\n03A0\t\t# GREEK CAPITAL LETTER PI\n03A1\t\t# GREEK CAPITAL LETTER RHO\n03A3\t\t# GREEK CAPITAL LETTER SIGMA\n03A4\t\t# GREEK CAPITAL LETTER TAU\n03A5\t\t# GREEK CAPITAL LETTER UPSILON\n03A6\t\t# GREEK CAPITAL LETTER PHI\n03A7\t\t# GREEK CAPITAL LETTER CHI\n03A8\t\t# GREEK CAPITAL LETTER PSI\n03A9\t\t# GREEK CAPITAL LETTER OMEGA\n03AA\t\t# GREEK CAPITAL LETTER IOTA WITH DIALYTIKA\n03AB\t\t# GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03AC\t\t# GREEK SMALL LETTER ALPHA WITH TONOS\n03AD\t\t# GREEK SMALL LETTER EPSILON WITH TONOS\n03AE\t\t# GREEK SMALL LETTER ETA WITH TONOS\n03AF\t\t# GREEK SMALL LETTER IOTA WITH TONOS\n03B0\t\t# GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS\n03B1\t\t# GREEK SMALL LETTER ALPHA\n03B2\t\t# GREEK SMALL LETTER BETA\n03B3\t\t# GREEK SMALL LETTER GAMMA\n03B4\t\t# GREEK SMALL LETTER DELTA\n03B5\t\t# GREEK SMALL LETTER EPSILON\n03B6\t\t# GREEK SMALL LETTER ZETA\n03B7\t\t# GREEK SMALL LETTER ETA\n03B8\t\t# GREEK SMALL LETTER THETA\n03B9\t\t# GREEK SMALL LETTER IOTA\n03BA\t\t# GREEK SMALL LETTER KAPPA\n03BB\t\t# GREEK SMALL LETTER LAMDA\n03BC\t\t# GREEK SMALL LETTER MU\n03BD\t\t# GREEK SMALL LETTER NU\n03BE\t\t# GREEK SMALL LETTER XI\n03BF\t\t# GREEK SMALL LETTER OMICRON\n03C0\t\t# GREEK SMALL LETTER PI\n03C1\t\t# GREEK SMALL LETTER RHO\n03C2\t\t# GREEK SMALL LETTER FINAL SIGMA\n03C3\t\t# GREEK SMALL LETTER SIGMA\n03C4\t\t# GREEK SMALL LETTER TAU\n03C5\t\t# GREEK SMALL LETTER UPSILON\n03C6\t\t# GREEK SMALL LETTER PHI\n03C7\t\t# GREEK SMALL LETTER CHI\n03C8\t\t# GREEK SMALL LETTER PSI\n03C9\t\t# GREEK SMALL LETTER OMEGA\n03CA\t\t# GREEK SMALL LETTER IOTA WITH DIALYTIKA\n03CB\t\t# GREEK SMALL LETTER UPSILON WITH DIALYTIKA\n03CC\t\t# GREEK SMALL LETTER OMICRON WITH TONOS\n03CD\t\t# GREEK SMALL LETTER UPSILON WITH TONOS\n03CE\t\t# GREEK SMALL LETTER OMEGA WITH TONOS\n03D0\tβ\t# GREEK BETA SYMBOL\n03D1\tθ\t# GREEK THETA SYMBOL\n03D2\tΥ\t# GREEK UPSILON WITH HOOK SYMBOL\n03D5\tφ\t# GREEK PHI SYMBOL\n03D6\tπ\t# GREEK PI SYMBOL\n03F0\tκ\t# GREEK KAPPA SYMBOL\n03F1\tρ\t# GREEK RHO SYMBOL\n03F2\tς\t# GREEK LUNATE SIGMA SYMBOL\n03F4\tΘ\t# GREEK CAPITAL THETA SYMBOL\n03F5\tε\t# GREEK LUNATE EPSILON SYMBOL\n03F9\tΣ\t# GREEK CAPITAL LUNATE SIGMA SYMBOL\n0401\t\t# CYRILLIC CAPITAL LETTER IO\n0402\t\t# CYRILLIC CAPITAL LETTER DJE\n0403\t\t# CYRILLIC CAPITAL LETTER GJE\n0404\t\t# CYRILLIC CAPITAL LETTER UKRAINIAN IE\n0405\t\t# CYRILLIC CAPITAL LETTER DZE\n0406\t\t# CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I\n0407\t\t# CYRILLIC CAPITAL LETTER YI\n0408\t\t# CYRILLIC CAPITAL LETTER JE\n0409\t\t# CYRILLIC CAPITAL LETTER LJE\n040A\t\t# CYRILLIC CAPITAL LETTER NJE\n040B\t\t# CYRILLIC CAPITAL LETTER TSHE\n040C\t\t# CYRILLIC CAPITAL LETTER KJE\n040E\t\t# CYRILLIC CAPITAL LETTER SHORT U\n040F\t\t# CYRILLIC CAPITAL LETTER DZHE\n0410\t\t# CYRILLIC CAPITAL LETTER A\n0411\t\t# CYRILLIC CAPITAL LETTER BE\n0412\t\t# CYRILLIC CAPITAL LETTER VE\n0413\t\t# CYRILLIC CAPITAL LETTER GHE\n0414\t\t# CYRILLIC CAPITAL LETTER DE\n0415\t\t# CYRILLIC CAPITAL LETTER IE\n0416\t\t# CYRILLIC CAPITAL LETTER ZHE\n0417\t\t# CYRILLIC CAPITAL LETTER ZE\n0418\t\t# CYRILLIC CAPITAL LETTER I\n0419\t\t# CYRILLIC CAPITAL LETTER SHORT I\n041A\t\t# CYRILLIC CAPITAL LETTER KA\n041B\t\t# CYRILLIC CAPITAL LETTER EL\n041C\t\t# CYRILLIC CAPITAL LETTER EM\n041D\t\t# CYRILLIC CAPITAL LETTER EN\n041E\t\t# CYRILLIC CAPITAL LETTER O\n041F\t\t# CYRILLIC CAPITAL LETTER PE\n0420\t\t# CYRILLIC CAPITAL LETTER ER\n0421\t\t# CYRILLIC CAPITAL LETTER ES\n0422\t\t# CYRILLIC CAPITAL LETTER TE\n0423\t\t# CYRILLIC CAPITAL LETTER U\n0424\t\t# CYRILLIC CAPITAL LETTER EF\n0425\t\t# CYRILLIC CAPITAL LETTER HA\n0426\t\t# CYRILLIC CAPITAL LETTER TSE\n0427\t\t# CYRILLIC CAPITAL LETTER CHE\n0428\t\t# CYRILLIC CAPITAL LETTER SHA\n0429\t\t# CYRILLIC CAPITAL LETTER SHCHA\n042A\t\t# CYRILLIC CAPITAL LETTER HARD SIGN\n042B\t\t# CYRILLIC CAPITAL LETTER YERU\n042C\t\t# CYRILLIC CAPITAL LETTER SOFT SIGN\n042D\t\t# CYRILLIC CAPITAL LETTER E\n042E\t\t# CYRILLIC CAPITAL LETTER YU\n042F\t\t# CYRILLIC CAPITAL LETTER YA\n0430\t\t# CYRILLIC SMALL LETTER A\n0431\t\t# CYRILLIC SMALL LETTER BE\n0432\t\t# CYRILLIC SMALL LETTER VE\n0433\t\t# CYRILLIC SMALL LETTER GHE\n0434\t\t# CYRILLIC SMALL LETTER DE\n0435\t\t# CYRILLIC SMALL LETTER IE\n0436\t\t# CYRILLIC SMALL LETTER ZHE\n0437\t\t# CYRILLIC SMALL LETTER ZE\n0438\t\t# CYRILLIC SMALL LETTER I\n0439\t\t# CYRILLIC SMALL LETTER SHORT I\n043A\t\t# CYRILLIC SMALL LETTER KA\n043B\t\t# CYRILLIC SMALL LETTER EL\n043C\t\t# CYRILLIC SMALL LETTER EM\n043D\t\t# CYRILLIC SMALL LETTER EN\n043E\t\t# CYRILLIC SMALL LETTER O\n043F\t\t# CYRILLIC SMALL LETTER PE\n0440\t\t# CYRILLIC SMALL LETTER ER\n0441\t\t# CYRILLIC SMALL LETTER ES\n0442\t\t# CYRILLIC SMALL LETTER TE\n0443\t\t# CYRILLIC SMALL LETTER U\n0444\t\t# CYRILLIC SMALL LETTER EF\n0445\t\t# CYRILLIC SMALL LETTER HA\n0446\t\t# CYRILLIC SMALL LETTER TSE\n0447\t\t# CYRILLIC SMALL LETTER CHE\n0448\t\t# CYRILLIC SMALL LETTER SHA\n0449\t\t# CYRILLIC SMALL LETTER SHCHA\n044A\t\t# CYRILLIC SMALL LETTER HARD SIGN\n044B\t\t# CYRILLIC SMALL LETTER YERU\n044C\t\t# CYRILLIC SMALL LETTER SOFT SIGN\n044D\t\t# CYRILLIC SMALL LETTER E\n044E\t\t# CYRILLIC SMALL LETTER YU\n044F\t\t# CYRILLIC SMALL LETTER YA\n0451\t\t# CYRILLIC SMALL LETTER IO\n0452\t\t# CYRILLIC SMALL LETTER DJE\n0453\t\t# CYRILLIC SMALL LETTER GJE\n0454\t\t# CYRILLIC SMALL LETTER UKRAINIAN IE\n0455\t\t# CYRILLIC SMALL LETTER DZE\n0456\t\t# CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n0457\t\t# CYRILLIC SMALL LETTER YI\n0458\t\t# CYRILLIC SMALL LETTER JE\n0459\t\t# CYRILLIC SMALL LETTER LJE\n045A\t\t# CYRILLIC SMALL LETTER NJE\n045B\t\t# CYRILLIC SMALL LETTER TSHE\n045C\t\t# CYRILLIC SMALL LETTER KJE\n045E\t\t# CYRILLIC SMALL LETTER SHORT U\n045F\t\t# CYRILLIC SMALL LETTER DZHE\n0490\t\t# CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0491\t\t# CYRILLIC SMALL LETTER GHE WITH UPTURN\n0587\tեւ\t# ARMENIAN SMALL LIGATURE ECH YIWN\n05D0\t\t# HEBREW LETTER ALEF\n05D1\t\t# HEBREW LETTER BET\n05D2\t\t# HEBREW LETTER GIMEL\n05D3\t\t# HEBREW LETTER DALET\n05D4\t\t# HEBREW LETTER HE\n05D5\t\t# HEBREW LETTER VAV\n05D6\t\t# HEBREW LETTER ZAYIN\n05D7\t\t# HEBREW LETTER HET\n05D8\t\t# HEBREW LETTER TET\n05D9\t\t# HEBREW LETTER YOD\n05DA\t\t# HEBREW LETTER FINAL KAF\n05DB\t\t# HEBREW LETTER KAF\n05DC\t\t# HEBREW LETTER LAMED\n05DD\t\t# HEBREW LETTER FINAL MEM\n05DE\t\t# HEBREW LETTER MEM\n05DF\t\t# HEBREW LETTER FINAL NUN\n05E0\t\t# HEBREW LETTER NUN\n05E1\t\t# HEBREW LETTER SAMEKH\n05E2\t\t# HEBREW LETTER AYIN\n05E3\t\t# HEBREW LETTER FINAL PE\n05E4\t\t# HEBREW LETTER PE\n05E5\t\t# HEBREW LETTER FINAL TSADI\n05E6\t\t# HEBREW LETTER TSADI\n05E7\t\t# HEBREW LETTER QOF\n05E8\t\t# HEBREW LETTER RESH\n05E9\t\t# HEBREW LETTER SHIN\n05EA\t\t# HEBREW LETTER TAV\n05F0\tוו\t# HEBREW LIGATURE YIDDISH DOUBLE VAV\n05F1\tוי\t# HEBREW LIGATURE YIDDISH VAV YOD\n05F2\tיי\t# HEBREW LIGATURE YIDDISH DOUBLE YOD\n0675\tاٴ\t# ARABIC LETTER HIGH HAMZA ALEF\n0676\tوٴ\t# ARABIC LETTER HIGH HAMZA WAW\n0677\tۇٴ\t# ARABIC LETTER U WITH HAMZA ABOVE\n0678\tيٴ\t# ARABIC LETTER HIGH HAMZA YEH\n0E33\tํา\t# THAI CHARACTER SARA AM\n0EB3\tໍາ\t# LAO VOWEL SIGN AM\n0EDC\tຫນ\t# LAO HO NO\n0EDD\tຫມ\t# LAO HO MO\n0F77\tྲཱྀ\t# TIBETAN VOWEL SIGN VOCALIC RR\n0F79\tླཱྀ\t# TIBETAN VOWEL SIGN VOCALIC LL\n1E02\tB\t# LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E03\tb\t# LATIN SMALL LETTER B WITH DOT ABOVE\n1E0A\tD\t# LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0B\td\t# LATIN SMALL LETTER D WITH DOT ABOVE\n1E1E\tF\t# LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E1F\tf\t# LATIN SMALL LETTER F WITH DOT ABOVE\n1E40\tM\t# LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E41\tm\t# LATIN SMALL LETTER M WITH DOT ABOVE\n1E56\tP\t# LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E57\tp\t# LATIN SMALL LETTER P WITH DOT ABOVE\n1E60\tS\t# LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E61\ts\t# LATIN SMALL LETTER S WITH DOT ABOVE\n1E6A\tT\t# LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6B\tt\t# LATIN SMALL LETTER T WITH DOT ABOVE\n1E80\t`W\t# LATIN CAPITAL LETTER W WITH GRAVE\n1E81\t`w\t# LATIN SMALL LETTER W WITH GRAVE\n1E82\t´W\t# LATIN CAPITAL LETTER W WITH ACUTE\n1E83\t´w\t# LATIN SMALL LETTER W WITH ACUTE\n1E84\t\"W\t# LATIN CAPITAL LETTER W WITH DIAERESIS\n1E85\t\"w\t# LATIN SMALL LETTER W WITH DIAERESIS\n1E9A\taʾ\t# LATIN SMALL LETTER A WITH RIGHT HALF RING\n1EF2\t`Y\t# LATIN CAPITAL LETTER Y WITH GRAVE\n1EF3\t`y\t# LATIN SMALL LETTER Y WITH GRAVE\n2002\t \t# EN SPACE\n2003\t \t# EM SPACE\n2004\t \t# THREE-PER-EM SPACE\n2005\t \t# FOUR-PER-EM SPACE\n2006\t \t# SIX-PER-EM SPACE\n2008\t \t# PUNCTUATION SPACE\n2009\t \t# THIN SPACE\n200A\t \t# HAIR SPACE\n2010\t-\t# HYPHEN\n2011\t-\t# NON-BREAKING HYPHEN\n2012\t-\t# FIGURE DASH\n2013\t-\t# EN DASH\n2014\t-\t# EM DASH\n2015\t-\t# HORIZONTAL BAR\n2016\t\t# DOUBLE VERTICAL LINE\n2017\t\t# DOUBLE LOW LINE\n2018\t'\t# LEFT SINGLE QUOTATION MARK\n2019\t'\t# RIGHT SINGLE QUOTATION MARK\n201A\t,\t# SINGLE LOW-9 QUOTATION MARK\n201B\t'\t# SINGLE HIGH-REVERSED-9 QUOTATION MARK\n201C\t\"\t# LEFT DOUBLE QUOTATION MARK\n201D\t\"\t# RIGHT DOUBLE QUOTATION MARK\n201E\t\"\t# DOUBLE LOW-9 QUOTATION MARK\n201F\t\"\t# DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2020\t+\t# DAGGER\n2021\t\t# DOUBLE DAGGER\n2022\to\t# BULLET\n2024\t.\t# ONE DOT LEADER\n2025\t..\t# TWO DOT LEADER\n2026\t...\t# HORIZONTAL ELLIPSIS\n2030\to/oo\t# PER MILLE SIGN\n2032\t´\t# PRIME\n2033\t´´\t# DOUBLE PRIME\n2034\t´´´\t# TRIPLE PRIME\n2036\t‵‵\t# REVERSED DOUBLE PRIME\n2037\t‵‵‵\t# REVERSED TRIPLE PRIME\n2039\t<\t# SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A\t>\t# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n203C\t!!\t# DOUBLE EXCLAMATION MARK\n203E\t\t# OVERLINE\n2044\t/\t# FRACTION SLASH\n2047\t??\t# DOUBLE QUESTION MARK\n2048\t?!\t# QUESTION EXCLAMATION MARK\n2049\t!?\t# EXCLAMATION QUESTION MARK\n2057\t´´´´\t# QUADRUPLE PRIME\n20A8\tRs\t# RUPEE SIGN\n20AB\tĐồng\t# DONG SIGN\n20AC\tEUR\t# EURO SIGN\n2100\ta/c\t# ACCOUNT OF\n2101\ta/s\t# ADDRESSED TO THE SUBJECT\n2102\tC\t# DOUBLE-STRUCK CAPITAL C\n2103\t°C\t# DEGREE CELSIUS\n2105\tc/o\t# CARE OF\n2106\tc/u\t# CADA UNA\n2107\tƐ\t# EULER CONSTANT\n2109\t°F\t# DEGREE FAHRENHEIT\n210A\tg\t# SCRIPT SMALL G\n210B\tH\t# SCRIPT CAPITAL H\n210C\tH\t# BLACK-LETTER CAPITAL H\n210D\tH\t# DOUBLE-STRUCK CAPITAL H\n210E\th\t# PLANCK CONSTANT\n210F\tħ\t# PLANCK CONSTANT OVER TWO PI\n2110\tI\t# SCRIPT CAPITAL I\n2111\tI\t# BLACK-LETTER CAPITAL I\n2112\tL\t# SCRIPT CAPITAL L\n2113\tl\t# SCRIPT SMALL L\n2115\tN\t# DOUBLE-STRUCK CAPITAL N\n2116\tNo\t# NUMERO SIGN\n2119\tP\t# DOUBLE-STRUCK CAPITAL P\n211A\tQ\t# DOUBLE-STRUCK CAPITAL Q\n211B\tR\t# SCRIPT CAPITAL R\n211C\tR\t# BLACK-LETTER CAPITAL R\n211D\tR\t# DOUBLE-STRUCK CAPITAL R\n2121\tTEL\t# TELEPHONE SIGN\n2122\tTM\t# TRADE MARK SIGN\n2124\tZ\t# DOUBLE-STRUCK CAPITAL Z\n2126\tOhm\t# OHM SIGN\n2128\tZ\t# BLACK-LETTER CAPITAL Z\n212C\tB\t# SCRIPT CAPITAL B\n212D\tC\t# BLACK-LETTER CAPITAL C\n212E\te\t# ESTIMATED SYMBOL\n212F\te\t# SCRIPT SMALL E\n2130\tE\t# SCRIPT CAPITAL E\n2131\tF\t# SCRIPT CAPITAL F\n2133\tM\t# SCRIPT CAPITAL M\n2134\to\t# SCRIPT SMALL O\n2135\tא\t# ALEF SYMBOL\n2136\tב\t# BET SYMBOL\n2137\tג\t# GIMEL SYMBOL\n2138\tד\t# DALET SYMBOL\n2139\ti\t# INFORMATION SOURCE\n213B\tFAX\t# FACSIMILE SIGN\n213D\tγ\t# DOUBLE-STRUCK SMALL GAMMA\n213E\tΓ\t# DOUBLE-STRUCK CAPITAL GAMMA\n213F\tΠ\t# DOUBLE-STRUCK CAPITAL PI\n2140\t∑\t# DOUBLE-STRUCK N-ARY SUMMATION\n2145\tD\t# DOUBLE-STRUCK ITALIC CAPITAL D\n2146\td\t# DOUBLE-STRUCK ITALIC SMALL D\n2147\te\t# DOUBLE-STRUCK ITALIC SMALL E\n2148\ti\t# DOUBLE-STRUCK ITALIC SMALL I\n2149\tj\t# DOUBLE-STRUCK ITALIC SMALL J\n2153\t 1⁄3 \t# VULGAR FRACTION ONE THIRD\n2154\t 2⁄3 \t# VULGAR FRACTION TWO THIRDS\n2155\t 1⁄5 \t# VULGAR FRACTION ONE FIFTH\n2156\t 2⁄5 \t# VULGAR FRACTION TWO FIFTHS\n2157\t 3⁄5 \t# VULGAR FRACTION THREE FIFTHS\n2158\t 4⁄5 \t# VULGAR FRACTION FOUR FIFTHS\n2159\t 1⁄6 \t# VULGAR FRACTION ONE SIXTH\n215A\t 5⁄6 \t# VULGAR FRACTION FIVE SIXTHS\n215B\t 1⁄8 \t# VULGAR FRACTION ONE EIGHTH\n215C\t 3⁄8 \t# VULGAR FRACTION THREE EIGHTHS\n215D\t 5⁄8 \t# VULGAR FRACTION FIVE EIGHTHS\n215E\t 7⁄8 \t# VULGAR FRACTION SEVEN EIGHTHS\n215F\t 1⁄\t# FRACTION NUMERATOR ONE\n2160\tI\t# ROMAN NUMERAL ONE\n2161\tII\t# ROMAN NUMERAL TWO\n2162\tIII\t# ROMAN NUMERAL THREE\n2163\tIV\t# ROMAN NUMERAL FOUR\n2164\tV\t# ROMAN NUMERAL FIVE\n2165\tVI\t# ROMAN NUMERAL SIX\n2166\tVII\t# ROMAN NUMERAL SEVEN\n2167\tVIII\t# ROMAN NUMERAL EIGHT\n2168\tIX\t# ROMAN NUMERAL NINE\n2169\tX\t# ROMAN NUMERAL TEN\n216A\tXI\t# ROMAN NUMERAL ELEVEN\n216B\tXII\t# ROMAN NUMERAL TWELVE\n216C\tL\t# ROMAN NUMERAL FIFTY\n216D\tC\t# ROMAN NUMERAL ONE HUNDRED\n216E\tD\t# ROMAN NUMERAL FIVE HUNDRED\n216F\tM\t# ROMAN NUMERAL ONE THOUSAND\n2170\ti\t# SMALL ROMAN NUMERAL ONE\n2171\tii\t# SMALL ROMAN NUMERAL TWO\n2172\tiii\t# SMALL ROMAN NUMERAL THREE\n2173\tiv\t# SMALL ROMAN NUMERAL FOUR\n2174\tv\t# SMALL ROMAN NUMERAL FIVE\n2175\tvi\t# SMALL ROMAN NUMERAL SIX\n2176\tvii\t# SMALL ROMAN NUMERAL SEVEN\n2177\tviii\t# SMALL ROMAN NUMERAL EIGHT\n2178\tix\t# SMALL ROMAN NUMERAL NINE\n2179\tx\t# SMALL ROMAN NUMERAL TEN\n217A\txi\t# SMALL ROMAN NUMERAL ELEVEN\n217B\txii\t# SMALL ROMAN NUMERAL TWELVE\n217C\tl\t# SMALL ROMAN NUMERAL FIFTY\n217D\tc\t# SMALL ROMAN NUMERAL ONE HUNDRED\n217E\td\t# SMALL ROMAN NUMERAL FIVE HUNDRED\n217F\tm\t# SMALL ROMAN NUMERAL ONE THOUSAND\n2190\t<-\t# LEFTWARDS ARROW\n2191\t^\t# UPWARDS ARROW\n2192\t->\t# RIGHTWARDS ARROW\n2193\tV\t# DOWNWARDS ARROW\n2194\t<->\t# LEFT RIGHT ARROW\n21D0\t<=\t# LEFTWARDS DOUBLE ARROW\n21D2\t=>\t# RIGHTWARDS DOUBLE ARROW\n21D4\t<=>\t# LEFT RIGHT DOUBLE ARROW\n2212\t-\t# MINUS SIGN\n2215\t/\t# DIVISION SLASH\n2216\t\\\t# SET MINUS\n2217\t*\t# ASTERISK OPERATOR\n2219\t•\t# BULLET OPERATOR\n2223\t|\t# DIVIDES\n222C\t∫∫\t# DOUBLE INTEGRAL\n222D\t∫∫∫\t# TRIPLE INTEGRAL\n222F\t∮∮\t# SURFACE INTEGRAL\n2230\t∮∮∮\t# VOLUME INTEGRAL\n2236\t:\t# RATIO\n223C\t~\t# TILDE OPERATOR\n2260\t/=\t# NOT EQUAL TO\n2264\t<=\t# LESS-THAN OR EQUAL TO\n2265\t>=\t# GREATER-THAN OR EQUAL TO\n226A\t<<\t# MUCH LESS-THAN\n226B\t>>\t# MUCH GREATER-THAN\n22C5\t·\t# DOT OPERATOR\n22D8\t<<<\t# VERY MUCH LESS-THAN\n22D9\t>>>\t# VERY MUCH GREATER-THAN\n22EF\t···\t# MIDLINE HORIZONTAL ELLIPSIS\n2400\t[NUL]\t# SYMBOL FOR NULL\n2401\t[SOH]\t# SYMBOL FOR START OF HEADING\n2402\t[STX]\t# SYMBOL FOR START OF TEXT\n2403\t[ETX]\t# SYMBOL FOR END OF TEXT\n2404\t[EOT]\t# SYMBOL FOR END OF TRANSMISSION\n2405\t[ENQ]\t# SYMBOL FOR ENQUIRY\n2406\t[ACK]\t# SYMBOL FOR ACKNOWLEDGE\n2407\t[BEL]\t# SYMBOL FOR BELL\n2408\t[BS]\t# SYMBOL FOR BACKSPACE\n2409\t[HT]\t# SYMBOL FOR HORIZONTAL TABULATION\n240A\t[LF]\t# SYMBOL FOR LINE FEED\n240B\t[VT]\t# SYMBOL FOR VERTICAL TABULATION\n240C\t[FF]\t# SYMBOL FOR FORM FEED\n240D\t[CR]\t# SYMBOL FOR CARRIAGE RETURN\n240E\t[SO]\t# SYMBOL FOR SHIFT OUT\n240F\t[SI]\t# SYMBOL FOR SHIFT IN\n2410\t[DLE]\t# SYMBOL FOR DATA LINK ESCAPE\n2411\t[DC1]\t# SYMBOL FOR DEVICE CONTROL ONE\n2412\t[DC2]\t# SYMBOL FOR DEVICE CONTROL TWO\n2413\t[DC3]\t# SYMBOL FOR DEVICE CONTROL THREE\n2414\t[DC4]\t# SYMBOL FOR DEVICE CONTROL FOUR\n2415\t[NAK]\t# SYMBOL FOR NEGATIVE ACKNOWLEDGE\n2416\t[SYN]\t# SYMBOL FOR SYNCHRONOUS IDLE\n2417\t[ETB]\t# SYMBOL FOR END OF TRANSMISSION BLOCK\n2418\t[CAN]\t# SYMBOL FOR CANCEL\n2419\t[EM]\t# SYMBOL FOR END OF MEDIUM\n241A\t[SUB]\t# SYMBOL FOR SUBSTITUTE\n241B\t[ESC]\t# SYMBOL FOR ESCAPE\n241C\t[FS]\t# SYMBOL FOR FILE SEPARATOR\n241D\t[GS]\t# SYMBOL FOR GROUP SEPARATOR\n241E\t[RS]\t# SYMBOL FOR RECORD SEPARATOR\n241F\t[US]\t# SYMBOL FOR UNIT SEPARATOR\n2420\t[SP]\t# SYMBOL FOR SPACE\n2421\t[DEL]\t# SYMBOL FOR DELETE\n2424\t[NL]\t# SYMBOL FOR NEWLINE\n2460\t(1)\t# CIRCLED DIGIT ONE\n2461\t(2)\t# CIRCLED DIGIT TWO\n2462\t(3)\t# CIRCLED DIGIT THREE\n2463\t(4)\t# CIRCLED DIGIT FOUR\n2464\t(5)\t# CIRCLED DIGIT FIVE\n2465\t(6)\t# CIRCLED DIGIT SIX\n2466\t(7)\t# CIRCLED DIGIT SEVEN\n2467\t(8)\t# CIRCLED DIGIT EIGHT\n2468\t(9)\t# CIRCLED DIGIT NINE\n2469\t(10)\t# CIRCLED NUMBER TEN\n246A\t(11)\t# CIRCLED NUMBER ELEVEN\n246B\t(12)\t# CIRCLED NUMBER TWELVE\n246C\t(13)\t# CIRCLED NUMBER THIRTEEN\n246D\t(14)\t# CIRCLED NUMBER FOURTEEN\n246E\t(15)\t# CIRCLED NUMBER FIFTEEN\n246F\t(16)\t# CIRCLED NUMBER SIXTEEN\n2470\t(17)\t# CIRCLED NUMBER SEVENTEEN\n2471\t(18)\t# CIRCLED NUMBER EIGHTEEN\n2472\t(19)\t# CIRCLED NUMBER NINETEEN\n2473\t(20)\t# CIRCLED NUMBER TWENTY\n2474\t(1)\t# PARENTHESIZED DIGIT ONE\n2475\t(2)\t# PARENTHESIZED DIGIT TWO\n2476\t(3)\t# PARENTHESIZED DIGIT THREE\n2477\t(4)\t# PARENTHESIZED DIGIT FOUR\n2478\t(5)\t# PARENTHESIZED DIGIT FIVE\n2479\t(6)\t# PARENTHESIZED DIGIT SIX\n247A\t(7)\t# PARENTHESIZED DIGIT SEVEN\n247B\t(8)\t# PARENTHESIZED DIGIT EIGHT\n247C\t(9)\t# PARENTHESIZED DIGIT NINE\n247D\t(10)\t# PARENTHESIZED NUMBER TEN\n247E\t(11)\t# PARENTHESIZED NUMBER ELEVEN\n247F\t(12)\t# PARENTHESIZED NUMBER TWELVE\n2480\t(13)\t# PARENTHESIZED NUMBER THIRTEEN\n2481\t(14)\t# PARENTHESIZED NUMBER FOURTEEN\n2482\t(15)\t# PARENTHESIZED NUMBER FIFTEEN\n2483\t(16)\t# PARENTHESIZED NUMBER SIXTEEN\n2484\t(17)\t# PARENTHESIZED NUMBER SEVENTEEN\n2485\t(18)\t# PARENTHESIZED NUMBER EIGHTEEN\n2486\t(19)\t# PARENTHESIZED NUMBER NINETEEN\n2487\t(20)\t# PARENTHESIZED NUMBER TWENTY\n2488\t1.\t# DIGIT ONE FULL STOP\n2489\t2.\t# DIGIT TWO FULL STOP\n248A\t3.\t# DIGIT THREE FULL STOP\n248B\t4.\t# DIGIT FOUR FULL STOP\n248C\t5.\t# DIGIT FIVE FULL STOP\n248D\t6.\t# DIGIT SIX FULL STOP\n248E\t7.\t# DIGIT SEVEN FULL STOP\n248F\t8.\t# DIGIT EIGHT FULL STOP\n2490\t9.\t# DIGIT NINE FULL STOP\n2491\t10.\t# NUMBER TEN FULL STOP\n2492\t11.\t# NUMBER ELEVEN FULL STOP\n2493\t12.\t# NUMBER TWELVE FULL STOP\n2494\t13.\t# NUMBER THIRTEEN FULL STOP\n2495\t14.\t# NUMBER FOURTEEN FULL STOP\n2496\t15.\t# NUMBER FIFTEEN FULL STOP\n2497\t16.\t# NUMBER SIXTEEN FULL STOP\n2498\t17.\t# NUMBER SEVENTEEN FULL STOP\n2499\t18.\t# NUMBER EIGHTEEN FULL STOP\n249A\t19.\t# NUMBER NINETEEN FULL STOP\n249B\t20.\t# NUMBER TWENTY FULL STOP\n249C\t(a)\t# PARENTHESIZED LATIN SMALL LETTER A\n249D\t(b)\t# PARENTHESIZED LATIN SMALL LETTER B\n249E\t(c)\t# PARENTHESIZED LATIN SMALL LETTER C\n249F\t(d)\t# PARENTHESIZED LATIN SMALL LETTER D\n24A0\t(e)\t# PARENTHESIZED LATIN SMALL LETTER E\n24A1\t(f)\t# PARENTHESIZED LATIN SMALL LETTER F\n24A2\t(g)\t# PARENTHESIZED LATIN SMALL LETTER G\n24A3\t(h)\t# PARENTHESIZED LATIN SMALL LETTER H\n24A4\t(i)\t# PARENTHESIZED LATIN SMALL LETTER I\n24A5\t(j)\t# PARENTHESIZED LATIN SMALL LETTER J\n24A6\t(k)\t# PARENTHESIZED LATIN SMALL LETTER K\n24A7\t(l)\t# PARENTHESIZED LATIN SMALL LETTER L\n24A8\t(m)\t# PARENTHESIZED LATIN SMALL LETTER M\n24A9\t(n)\t# PARENTHESIZED LATIN SMALL LETTER N\n24AA\t(o)\t# PARENTHESIZED LATIN SMALL LETTER O\n24AB\t(p)\t# PARENTHESIZED LATIN SMALL LETTER P\n24AC\t(q)\t# PARENTHESIZED LATIN SMALL LETTER Q\n24AD\t(r)\t# PARENTHESIZED LATIN SMALL LETTER R\n24AE\t(s)\t# PARENTHESIZED LATIN SMALL LETTER S\n24AF\t(t)\t# PARENTHESIZED LATIN SMALL LETTER T\n24B0\t(u)\t# PARENTHESIZED LATIN SMALL LETTER U\n24B1\t(v)\t# PARENTHESIZED LATIN SMALL LETTER V\n24B2\t(w)\t# PARENTHESIZED LATIN SMALL LETTER W\n24B3\t(x)\t# PARENTHESIZED LATIN SMALL LETTER X\n24B4\t(y)\t# PARENTHESIZED LATIN SMALL LETTER Y\n24B5\t(z)\t# PARENTHESIZED LATIN SMALL LETTER Z\n24B6\t(A)\t# CIRCLED LATIN CAPITAL LETTER A\n24B7\t(B)\t# CIRCLED LATIN CAPITAL LETTER B\n24B8\t(C)\t# CIRCLED LATIN CAPITAL LETTER C\n24B9\t(D)\t# CIRCLED LATIN CAPITAL LETTER D\n24BA\t(E)\t# CIRCLED LATIN CAPITAL LETTER E\n24BB\t(F)\t# CIRCLED LATIN CAPITAL LETTER F\n24BC\t(G)\t# CIRCLED LATIN CAPITAL LETTER G\n24BD\t(H)\t# CIRCLED LATIN CAPITAL LETTER H\n24BE\t(I)\t# CIRCLED LATIN CAPITAL LETTER I\n24BF\t(J)\t# CIRCLED LATIN CAPITAL LETTER J\n24C0\t(K)\t# CIRCLED LATIN CAPITAL LETTER K\n24C1\t(L)\t# CIRCLED LATIN CAPITAL LETTER L\n24C2\t(M)\t# CIRCLED LATIN CAPITAL LETTER M\n24C3\t(N)\t# CIRCLED LATIN CAPITAL LETTER N\n24C4\t(O)\t# CIRCLED LATIN CAPITAL LETTER O\n24C5\t(P)\t# CIRCLED LATIN CAPITAL LETTER P\n24C6\t(Q)\t# CIRCLED LATIN CAPITAL LETTER Q\n24C7\t(R)\t# CIRCLED LATIN CAPITAL LETTER R\n24C8\t(S)\t# CIRCLED LATIN CAPITAL LETTER S\n24C9\t(T)\t# CIRCLED LATIN CAPITAL LETTER T\n24CA\t(U)\t# CIRCLED LATIN CAPITAL LETTER U\n24CB\t(V)\t# CIRCLED LATIN CAPITAL LETTER V\n24CC\t(W)\t# CIRCLED LATIN CAPITAL LETTER W\n24CD\t(X)\t# CIRCLED LATIN CAPITAL LETTER X\n24CE\t(Y)\t# CIRCLED LATIN CAPITAL LETTER Y\n24CF\t(Z)\t# CIRCLED LATIN CAPITAL LETTER Z\n24D0\t(a)\t# CIRCLED LATIN SMALL LETTER A\n24D1\t(b)\t# CIRCLED LATIN SMALL LETTER B\n24D2\t(c)\t# CIRCLED LATIN SMALL LETTER C\n24D3\t(d)\t# CIRCLED LATIN SMALL LETTER D\n24D4\t(e)\t# CIRCLED LATIN SMALL LETTER E\n24D5\t(f)\t# CIRCLED LATIN SMALL LETTER F\n24D6\t(g)\t# CIRCLED LATIN SMALL LETTER G\n24D7\t(h)\t# CIRCLED LATIN SMALL LETTER H\n24D8\t(i)\t# CIRCLED LATIN SMALL LETTER I\n24D9\t(j)\t# CIRCLED LATIN SMALL LETTER J\n24DA\t(k)\t# CIRCLED LATIN SMALL LETTER K\n24DB\t(l)\t# CIRCLED LATIN SMALL LETTER L\n24DC\t(m)\t# CIRCLED LATIN SMALL LETTER M\n24DD\t(n)\t# CIRCLED LATIN SMALL LETTER N\n24DE\t(o)\t# CIRCLED LATIN SMALL LETTER O\n24DF\t(p)\t# CIRCLED LATIN SMALL LETTER P\n24E0\t(q)\t# CIRCLED LATIN SMALL LETTER Q\n24E1\t(r)\t# CIRCLED LATIN SMALL LETTER R\n24E2\t(s)\t# CIRCLED LATIN SMALL LETTER S\n24E3\t(t)\t# CIRCLED LATIN SMALL LETTER T\n24E4\t(u)\t# CIRCLED LATIN SMALL LETTER U\n24E5\t(v)\t# CIRCLED LATIN SMALL LETTER V\n24E6\t(w)\t# CIRCLED LATIN SMALL LETTER W\n24E7\t(x)\t# CIRCLED LATIN SMALL LETTER X\n24E8\t(y)\t# CIRCLED LATIN SMALL LETTER Y\n24E9\t(z)\t# CIRCLED LATIN SMALL LETTER Z\n24EA\t(0)\t# CIRCLED DIGIT ZERO\n2500\t-\t# BOX DRAWINGS LIGHT HORIZONTAL\n2502\t|\t# BOX DRAWINGS LIGHT VERTICAL\n250C\t+\t# BOX DRAWINGS LIGHT DOWN AND RIGHT\n2510\t+\t# BOX DRAWINGS LIGHT DOWN AND LEFT\n2514\t+\t# BOX DRAWINGS LIGHT UP AND RIGHT\n2518\t+\t# BOX DRAWINGS LIGHT UP AND LEFT\n251C\t+\t# BOX DRAWINGS LIGHT VERTICAL AND RIGHT\n2524\t+\t# BOX DRAWINGS LIGHT VERTICAL AND LEFT\n252C\t+\t# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL\n2534\t+\t# BOX DRAWINGS LIGHT UP AND HORIZONTAL\n253C\t+\t# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL\n2592\t\t# MEDIUM SHADE\n25AE\t\t# BLACK VERTICAL RECTANGLE\n25C6\t\t# BLACK DIAMOND\n25E6\to\t# WHITE BULLET\n266A\t\t# EIGHTH NOTE\n2A0C\t∫∫∫∫\t# QUADRUPLE INTEGRAL OPERATOR\n2A74\t::=\t# DOUBLE COLON EQUAL\n2A75\t==\t# TWO CONSECUTIVE EQUALS SIGNS\n2A76\t===\t# THREE CONSECUTIVE EQUALS SIGNS\n2E9F\t母\t# CJK RADICAL MOTHER\n2EF3\t龟\t# CJK RADICAL C-SIMPLIFIED TURTLE\n2F00\t一\t# KANGXI RADICAL ONE\n2F01\t丨\t# KANGXI RADICAL LINE\n2F02\t丶\t# KANGXI RADICAL DOT\n2F03\t丿\t# KANGXI RADICAL SLASH\n2F04\t乙\t# KANGXI RADICAL SECOND\n2F05\t亅\t# KANGXI RADICAL HOOK\n2F06\t二\t# KANGXI RADICAL TWO\n2F07\t亠\t# KANGXI RADICAL LID\n2F08\t人\t# KANGXI RADICAL MAN\n2F09\t儿\t# KANGXI RADICAL LEGS\n2F0A\t入\t# KANGXI RADICAL ENTER\n2F0B\t八\t# KANGXI RADICAL EIGHT\n2F0C\t冂\t# KANGXI RADICAL DOWN BOX\n2F0D\t冖\t# KANGXI RADICAL COVER\n2F0E\t冫\t# KANGXI RADICAL ICE\n2F0F\t几\t# KANGXI RADICAL TABLE\n2F10\t凵\t# KANGXI RADICAL OPEN BOX\n2F11\t刀\t# KANGXI RADICAL KNIFE\n2F12\t力\t# KANGXI RADICAL POWER\n2F13\t勹\t# KANGXI RADICAL WRAP\n2F14\t匕\t# KANGXI RADICAL SPOON\n2F15\t匚\t# KANGXI RADICAL RIGHT OPEN BOX\n2F16\t匸\t# KANGXI RADICAL HIDING ENCLOSURE\n2F17\t十\t# KANGXI RADICAL TEN\n2F18\t卜\t# KANGXI RADICAL DIVINATION\n2F19\t卩\t# KANGXI RADICAL SEAL\n2F1A\t厂\t# KANGXI RADICAL CLIFF\n2F1B\t厶\t# KANGXI RADICAL PRIVATE\n2F1C\t又\t# KANGXI RADICAL AGAIN\n2F1D\t口\t# KANGXI RADICAL MOUTH\n2F1E\t囗\t# KANGXI RADICAL ENCLOSURE\n2F1F\t土\t# KANGXI RADICAL EARTH\n2F20\t士\t# KANGXI RADICAL SCHOLAR\n2F21\t夂\t# KANGXI RADICAL GO\n2F22\t夊\t# KANGXI RADICAL GO SLOWLY\n2F23\t夕\t# KANGXI RADICAL EVENING\n2F24\t大\t# KANGXI RADICAL BIG\n2F25\t女\t# KANGXI RADICAL WOMAN\n2F26\t子\t# KANGXI RADICAL CHILD\n2F27\t宀\t# KANGXI RADICAL ROOF\n2F28\t寸\t# KANGXI RADICAL INCH\n2F29\t小\t# KANGXI RADICAL SMALL\n2F2A\t尢\t# KANGXI RADICAL LAME\n2F2B\t尸\t# KANGXI RADICAL CORPSE\n2F2C\t屮\t# KANGXI RADICAL SPROUT\n2F2D\t山\t# KANGXI RADICAL MOUNTAIN\n2F2E\t巛\t# KANGXI RADICAL RIVER\n2F2F\t工\t# KANGXI RADICAL WORK\n2F30\t己\t# KANGXI RADICAL ONESELF\n2F31\t巾\t# KANGXI RADICAL TURBAN\n2F32\t干\t# KANGXI RADICAL DRY\n2F33\t幺\t# KANGXI RADICAL SHORT THREAD\n2F34\t广\t# KANGXI RADICAL DOTTED CLIFF\n2F35\t廴\t# KANGXI RADICAL LONG STRIDE\n2F36\t廾\t# KANGXI RADICAL TWO HANDS\n2F37\t弋\t# KANGXI RADICAL SHOOT\n2F38\t弓\t# KANGXI RADICAL BOW\n2F39\t彐\t# KANGXI RADICAL SNOUT\n2F3A\t彡\t# KANGXI RADICAL BRISTLE\n2F3B\t彳\t# KANGXI RADICAL STEP\n2F3C\t心\t# KANGXI RADICAL HEART\n2F3D\t戈\t# KANGXI RADICAL HALBERD\n2F3E\t戶\t# KANGXI RADICAL DOOR\n2F3F\t手\t# KANGXI RADICAL HAND\n2F40\t支\t# KANGXI RADICAL BRANCH\n2F41\t攴\t# KANGXI RADICAL RAP\n2F42\t文\t# KANGXI RADICAL SCRIPT\n2F43\t斗\t# KANGXI RADICAL DIPPER\n2F44\t斤\t# KANGXI RADICAL AXE\n2F45\t方\t# KANGXI RADICAL SQUARE\n2F46\t无\t# KANGXI RADICAL NOT\n2F47\t日\t# KANGXI RADICAL SUN\n2F48\t曰\t# KANGXI RADICAL SAY\n2F49\t月\t# KANGXI RADICAL MOON\n2F4A\t木\t# KANGXI RADICAL TREE\n2F4B\t欠\t# KANGXI RADICAL LACK\n2F4C\t止\t# KANGXI RADICAL STOP\n2F4D\t歹\t# KANGXI RADICAL DEATH\n2F4E\t殳\t# KANGXI RADICAL WEAPON\n2F4F\t毋\t# KANGXI RADICAL DO NOT\n2F50\t比\t# KANGXI RADICAL COMPARE\n2F51\t毛\t# KANGXI RADICAL FUR\n2F52\t氏\t# KANGXI RADICAL CLAN\n2F53\t气\t# KANGXI RADICAL STEAM\n2F54\t水\t# KANGXI RADICAL WATER\n2F55\t火\t# KANGXI RADICAL FIRE\n2F56\t爪\t# KANGXI RADICAL CLAW\n2F57\t父\t# KANGXI RADICAL FATHER\n2F58\t爻\t# KANGXI RADICAL DOUBLE X\n2F59\t爿\t# KANGXI RADICAL HALF TREE TRUNK\n2F5A\t片\t# KANGXI RADICAL SLICE\n2F5B\t牙\t# KANGXI RADICAL FANG\n2F5C\t牛\t# KANGXI RADICAL COW\n2F5D\t犬\t# KANGXI RADICAL DOG\n2F5E\t玄\t# KANGXI RADICAL PROFOUND\n2F5F\t玉\t# KANGXI RADICAL JADE\n2F60\t瓜\t# KANGXI RADICAL MELON\n2F61\t瓦\t# KANGXI RADICAL TILE\n2F62\t甘\t# KANGXI RADICAL SWEET\n2F63\t生\t# KANGXI RADICAL LIFE\n2F64\t用\t# KANGXI RADICAL USE\n2F65\t田\t# KANGXI RADICAL FIELD\n2F66\t疋\t# KANGXI RADICAL BOLT OF CLOTH\n2F67\t疒\t# KANGXI RADICAL SICKNESS\n2F68\t癶\t# KANGXI RADICAL DOTTED TENT\n2F69\t白\t# KANGXI RADICAL WHITE\n2F6A\t皮\t# KANGXI RADICAL SKIN\n2F6B\t皿\t# KANGXI RADICAL DISH\n2F6C\t目\t# KANGXI RADICAL EYE\n2F6D\t矛\t# KANGXI RADICAL SPEAR\n2F6E\t矢\t# KANGXI RADICAL ARROW\n2F6F\t石\t# KANGXI RADICAL STONE\n2F70\t示\t# KANGXI RADICAL SPIRIT\n2F71\t禸\t# KANGXI RADICAL TRACK\n2F72\t禾\t# KANGXI RADICAL GRAIN\n2F73\t穴\t# KANGXI RADICAL CAVE\n2F74\t立\t# KANGXI RADICAL STAND\n2F75\t竹\t# KANGXI RADICAL BAMBOO\n2F76\t米\t# KANGXI RADICAL RICE\n2F77\t糸\t# KANGXI RADICAL SILK\n2F78\t缶\t# KANGXI RADICAL JAR\n2F79\t网\t# KANGXI RADICAL NET\n2F7A\t羊\t# KANGXI RADICAL SHEEP\n2F7B\t羽\t# KANGXI RADICAL FEATHER\n2F7C\t老\t# KANGXI RADICAL OLD\n2F7D\t而\t# KANGXI RADICAL AND\n2F7E\t耒\t# KANGXI RADICAL PLOW\n2F7F\t耳\t# KANGXI RADICAL EAR\n2F80\t聿\t# KANGXI RADICAL BRUSH\n2F81\t肉\t# KANGXI RADICAL MEAT\n2F82\t臣\t# KANGXI RADICAL MINISTER\n2F83\t自\t# KANGXI RADICAL SELF\n2F84\t至\t# KANGXI RADICAL ARRIVE\n2F85\t臼\t# KANGXI RADICAL MORTAR\n2F86\t舌\t# KANGXI RADICAL TONGUE\n2F87\t舛\t# KANGXI RADICAL OPPOSE\n2F88\t舟\t# KANGXI RADICAL BOAT\n2F89\t艮\t# KANGXI RADICAL STOPPING\n2F8A\t色\t# KANGXI RADICAL COLOR\n2F8B\t艸\t# KANGXI RADICAL GRASS\n2F8C\t虍\t# KANGXI RADICAL TIGER\n2F8D\t虫\t# KANGXI RADICAL INSECT\n2F8E\t血\t# KANGXI RADICAL BLOOD\n2F8F\t行\t# KANGXI RADICAL WALK ENCLOSURE\n2F90\t衣\t# KANGXI RADICAL CLOTHES\n2F91\t襾\t# KANGXI RADICAL WEST\n2F92\t見\t# KANGXI RADICAL SEE\n2F93\t角\t# KANGXI RADICAL HORN\n2F94\t言\t# KANGXI RADICAL SPEECH\n2F95\t谷\t# KANGXI RADICAL VALLEY\n2F96\t豆\t# KANGXI RADICAL BEAN\n2F97\t豕\t# KANGXI RADICAL PIG\n2F98\t豸\t# KANGXI RADICAL BADGER\n2F99\t貝\t# KANGXI RADICAL SHELL\n2F9A\t赤\t# KANGXI RADICAL RED\n2F9B\t走\t# KANGXI RADICAL RUN\n2F9C\t足\t# KANGXI RADICAL FOOT\n2F9D\t身\t# KANGXI RADICAL BODY\n2F9E\t車\t# KANGXI RADICAL CART\n2F9F\t辛\t# KANGXI RADICAL BITTER\n2FA0\t辰\t# KANGXI RADICAL MORNING\n2FA1\t辵\t# KANGXI RADICAL WALK\n2FA2\t邑\t# KANGXI RADICAL CITY\n2FA3\t酉\t# KANGXI RADICAL WINE\n2FA4\t釆\t# KANGXI RADICAL DISTINGUISH\n2FA5\t里\t# KANGXI RADICAL VILLAGE\n2FA6\t金\t# KANGXI RADICAL GOLD\n2FA7\t長\t# KANGXI RADICAL LONG\n2FA8\t門\t# KANGXI RADICAL GATE\n2FA9\t阜\t# KANGXI RADICAL MOUND\n2FAA\t隶\t# KANGXI RADICAL SLAVE\n2FAB\t隹\t# KANGXI RADICAL SHORT TAILED BIRD\n2FAC\t雨\t# KANGXI RADICAL RAIN\n2FAD\t靑\t# KANGXI RADICAL BLUE\n2FAE\t非\t# KANGXI RADICAL WRONG\n2FAF\t面\t# KANGXI RADICAL FACE\n2FB0\t革\t# KANGXI RADICAL LEATHER\n2FB1\t韋\t# KANGXI RADICAL TANNED LEATHER\n2FB2\t韭\t# KANGXI RADICAL LEEK\n2FB3\t音\t# KANGXI RADICAL SOUND\n2FB4\t頁\t# KANGXI RADICAL LEAF\n2FB5\t風\t# KANGXI RADICAL WIND\n2FB6\t飛\t# KANGXI RADICAL FLY\n2FB7\t食\t# KANGXI RADICAL EAT\n2FB8\t首\t# KANGXI RADICAL HEAD\n2FB9\t香\t# KANGXI RADICAL FRAGRANT\n2FBA\t馬\t# KANGXI RADICAL HORSE\n2FBB\t骨\t# KANGXI RADICAL BONE\n2FBC\t高\t# KANGXI RADICAL TALL\n2FBD\t髟\t# KANGXI RADICAL HAIR\n2FBE\t鬥\t# KANGXI RADICAL FIGHT\n2FBF\t鬯\t# KANGXI RADICAL SACRIFICIAL WINE\n2FC0\t鬲\t# KANGXI RADICAL CAULDRON\n2FC1\t鬼\t# KANGXI RADICAL GHOST\n2FC2\t魚\t# KANGXI RADICAL FISH\n2FC3\t鳥\t# KANGXI RADICAL BIRD\n2FC4\t鹵\t# KANGXI RADICAL SALT\n2FC5\t鹿\t# KANGXI RADICAL DEER\n2FC6\t麥\t# KANGXI RADICAL WHEAT\n2FC7\t麻\t# KANGXI RADICAL HEMP\n2FC8\t黃\t# KANGXI RADICAL YELLOW\n2FC9\t黍\t# KANGXI RADICAL MILLET\n2FCA\t黑\t# KANGXI RADICAL BLACK\n2FCB\t黹\t# KANGXI RADICAL EMBROIDERY\n2FCC\t黽\t# KANGXI RADICAL FROG\n2FCD\t鼎\t# KANGXI RADICAL TRIPOD\n2FCE\t鼓\t# KANGXI RADICAL DRUM\n2FCF\t鼠\t# KANGXI RADICAL RAT\n2FD0\t鼻\t# KANGXI RADICAL NOSE\n2FD1\t齊\t# KANGXI RADICAL EVEN\n2FD2\t齒\t# KANGXI RADICAL TOOTH\n2FD3\t龍\t# KANGXI RADICAL DRAGON\n2FD4\t龜\t# KANGXI RADICAL TURTLE\n2FD5\t龠\t# KANGXI RADICAL FLUTE\n3000\t \t# IDEOGRAPHIC SPACE\n3036\t〒\t# CIRCLED POSTAL MARK\n3038\t十\t# HANGZHOU NUMERAL TEN\n3039\t卄\t# HANGZHOU NUMERAL TWENTY\n303A\t卅\t# HANGZHOU NUMERAL THIRTY\n3041\tあ\t# HIRAGANA LETTER SMALL A\n3043\tい\t# HIRAGANA LETTER SMALL I\n3045\tう\t# HIRAGANA LETTER SMALL U\n3047\tえ\t# HIRAGANA LETTER SMALL E\n3049\tお\t# HIRAGANA LETTER SMALL O\n3063\tつ\t# HIRAGANA LETTER SMALL TU\n3083\tや\t# HIRAGANA LETTER SMALL YA\n3085\tゆ\t# HIRAGANA LETTER SMALL YU\n3087\tよ\t# HIRAGANA LETTER SMALL YO\n308E\tわ\t# HIRAGANA LETTER SMALL WA\n3095\tか\t# HIRAGANA LETTER SMALL KA\n3096\tけ\t# HIRAGANA LETTER SMALL KE\n309B\t ゙\t# KATAKANA-HIRAGANA VOICED SOUND MARK\n309C\t ゚\t# KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n30A0\t=\t# KATAKANA-HIRAGANA DOUBLE HYPHEN\n30A1\tア\t# KATAKANA LETTER SMALL A\n30A3\tイ\t# KATAKANA LETTER SMALL I\n30A5\tウ\t# KATAKANA LETTER SMALL U\n30A7\tエ\t# KATAKANA LETTER SMALL E\n30A9\tオ\t# KATAKANA LETTER SMALL O\n30C3\tツ\t# KATAKANA LETTER SMALL TU\n30E3\tヤ\t# KATAKANA LETTER SMALL YA\n30E5\tユ\t# KATAKANA LETTER SMALL YU\n30E7\tヨ\t# KATAKANA LETTER SMALL YO\n30EE\tワ\t# KATAKANA LETTER SMALL WA\n30F5\tカ\t# KATAKANA LETTER SMALL KA\n30F6\tケ\t# KATAKANA LETTER SMALL KE\n3131\tᄀ\t# HANGUL LETTER KIYEOK\n3132\tᄁ\t# HANGUL LETTER SSANGKIYEOK\n3133\tᆪ\t# HANGUL LETTER KIYEOK-SIOS\n3134\tᄂ\t# HANGUL LETTER NIEUN\n3135\tᆬ\t# HANGUL LETTER NIEUN-CIEUC\n3136\tᆭ\t# HANGUL LETTER NIEUN-HIEUH\n3137\tᄃ\t# HANGUL LETTER TIKEUT\n3138\tᄄ\t# HANGUL LETTER SSANGTIKEUT\n3139\tᄅ\t# HANGUL LETTER RIEUL\n313A\tᆰ\t# HANGUL LETTER RIEUL-KIYEOK\n313B\tᆱ\t# HANGUL LETTER RIEUL-MIEUM\n313C\tᆲ\t# HANGUL LETTER RIEUL-PIEUP\n313D\tᆳ\t# HANGUL LETTER RIEUL-SIOS\n313E\tᆴ\t# HANGUL LETTER RIEUL-THIEUTH\n313F\tᆵ\t# HANGUL LETTER RIEUL-PHIEUPH\n3140\tᄚ\t# HANGUL LETTER RIEUL-HIEUH\n3141\tᄆ\t# HANGUL LETTER MIEUM\n3142\tᄇ\t# HANGUL LETTER PIEUP\n3143\tᄈ\t# HANGUL LETTER SSANGPIEUP\n3144\tᄡ\t# HANGUL LETTER PIEUP-SIOS\n3145\tᄉ\t# HANGUL LETTER SIOS\n3146\tᄊ\t# HANGUL LETTER SSANGSIOS\n3147\tᄋ\t# HANGUL LETTER IEUNG\n3148\tᄌ\t# HANGUL LETTER CIEUC\n3149\tᄍ\t# HANGUL LETTER SSANGCIEUC\n314A\tᄎ\t# HANGUL LETTER CHIEUCH\n314B\tᄏ\t# HANGUL LETTER KHIEUKH\n314C\tᄐ\t# HANGUL LETTER THIEUTH\n314D\tᄑ\t# HANGUL LETTER PHIEUPH\n314E\tᄒ\t# HANGUL LETTER HIEUH\n314F\tᅡ\t# HANGUL LETTER A\n3150\tᅢ\t# HANGUL LETTER AE\n3151\tᅣ\t# HANGUL LETTER YA\n3152\tᅤ\t# HANGUL LETTER YAE\n3153\tᅥ\t# HANGUL LETTER EO\n3154\tᅦ\t# HANGUL LETTER E\n3155\tᅧ\t# HANGUL LETTER YEO\n3156\tᅨ\t# HANGUL LETTER YE\n3157\tᅩ\t# HANGUL LETTER O\n3158\tᅪ\t# HANGUL LETTER WA\n3159\tᅫ\t# HANGUL LETTER WAE\n315A\tᅬ\t# HANGUL LETTER OE\n315B\tᅭ\t# HANGUL LETTER YO\n315C\tᅮ\t# HANGUL LETTER U\n315D\tᅯ\t# HANGUL LETTER WEO\n315E\tᅰ\t# HANGUL LETTER WE\n315F\tᅱ\t# HANGUL LETTER WI\n3160\tᅲ\t# HANGUL LETTER YU\n3161\tᅳ\t# HANGUL LETTER EU\n3162\tᅴ\t# HANGUL LETTER YI\n3163\tᅵ\t# HANGUL LETTER I\n3164\tᅠ\t# HANGUL FILLER\n3165\tᄔ\t# HANGUL LETTER SSANGNIEUN\n3166\tᄕ\t# HANGUL LETTER NIEUN-TIKEUT\n3167\tᇇ\t# HANGUL LETTER NIEUN-SIOS\n3168\tᇈ\t# HANGUL LETTER NIEUN-PANSIOS\n3169\tᇌ\t# HANGUL LETTER RIEUL-KIYEOK-SIOS\n316A\tᇎ\t# HANGUL LETTER RIEUL-TIKEUT\n316B\tᇓ\t# HANGUL LETTER RIEUL-PIEUP-SIOS\n316C\tᇗ\t# HANGUL LETTER RIEUL-PANSIOS\n316D\tᇙ\t# HANGUL LETTER RIEUL-YEORINHIEUH\n316E\tᄜ\t# HANGUL LETTER MIEUM-PIEUP\n316F\tᇝ\t# HANGUL LETTER MIEUM-SIOS\n3170\tᇟ\t# HANGUL LETTER MIEUM-PANSIOS\n3171\tᄝ\t# HANGUL LETTER KAPYEOUNMIEUM\n3172\tᄞ\t# HANGUL LETTER PIEUP-KIYEOK\n3173\tᄠ\t# HANGUL LETTER PIEUP-TIKEUT\n3174\tᄢ\t# HANGUL LETTER PIEUP-SIOS-KIYEOK\n3175\tᄣ\t# HANGUL LETTER PIEUP-SIOS-TIKEUT\n3176\tᄧ\t# HANGUL LETTER PIEUP-CIEUC\n3177\tᄩ\t# HANGUL LETTER PIEUP-THIEUTH\n3178\tᄫ\t# HANGUL LETTER KAPYEOUNPIEUP\n3179\tᄬ\t# HANGUL LETTER KAPYEOUNSSANGPIEUP\n317A\tᄭ\t# HANGUL LETTER SIOS-KIYEOK\n317B\tᄮ\t# HANGUL LETTER SIOS-NIEUN\n317C\tᄯ\t# HANGUL LETTER SIOS-TIKEUT\n317D\tᄲ\t# HANGUL LETTER SIOS-PIEUP\n317E\tᄶ\t# HANGUL LETTER SIOS-CIEUC\n317F\tᅀ\t# HANGUL LETTER PANSIOS\n3180\tᅇ\t# HANGUL LETTER SSANGIEUNG\n3181\tᅌ\t# HANGUL LETTER YESIEUNG\n3182\tᇱ\t# HANGUL LETTER YESIEUNG-SIOS\n3183\tᇲ\t# HANGUL LETTER YESIEUNG-PANSIOS\n3184\tᅗ\t# HANGUL LETTER KAPYEOUNPHIEUPH\n3185\tᅘ\t# HANGUL LETTER SSANGHIEUH\n3186\tᅙ\t# HANGUL LETTER YEORINHIEUH\n3187\tᆄ\t# HANGUL LETTER YO-YA\n3188\tᆅ\t# HANGUL LETTER YO-YAE\n3189\tᆈ\t# HANGUL LETTER YO-I\n318A\tᆑ\t# HANGUL LETTER YU-YEO\n318B\tᆒ\t# HANGUL LETTER YU-YE\n318C\tᆔ\t# HANGUL LETTER YU-I\n318D\tᆞ\t# HANGUL LETTER ARAEA\n318E\tᆡ\t# HANGUL LETTER ARAEAE\n31F0\tク\t# KATAKANA LETTER SMALL KU\n31F1\tシ\t# KATAKANA LETTER SMALL SI\n31F2\tス\t# KATAKANA LETTER SMALL SU\n31F3\tト\t# KATAKANA LETTER SMALL TO\n31F4\tヌ\t# KATAKANA LETTER SMALL NU\n31F5\tハ\t# KATAKANA LETTER SMALL HA\n31F6\tヒ\t# KATAKANA LETTER SMALL HI\n31F7\tフ\t# KATAKANA LETTER SMALL HU\n31F8\tヘ\t# KATAKANA LETTER SMALL HE\n31F9\tホ\t# KATAKANA LETTER SMALL HO\n31FA\tム\t# KATAKANA LETTER SMALL MU\n31FB\tラ\t# KATAKANA LETTER SMALL RA\n31FC\tリ\t# KATAKANA LETTER SMALL RI\n31FD\tル\t# KATAKANA LETTER SMALL RU\n31FE\tレ\t# KATAKANA LETTER SMALL RE\n31FF\tロ\t# KATAKANA LETTER SMALL RO\n3200\t(ᄀ)\t# PARENTHESIZED HANGUL KIYEOK\n3201\t(ᄂ)\t# PARENTHESIZED HANGUL NIEUN\n3202\t(ᄃ)\t# PARENTHESIZED HANGUL TIKEUT\n3203\t(ᄅ)\t# PARENTHESIZED HANGUL RIEUL\n3204\t(ᄆ)\t# PARENTHESIZED HANGUL MIEUM\n3205\t(ᄇ)\t# PARENTHESIZED HANGUL PIEUP\n3206\t(ᄉ)\t# PARENTHESIZED HANGUL SIOS\n3207\t(ᄋ)\t# PARENTHESIZED HANGUL IEUNG\n3208\t(ᄌ)\t# PARENTHESIZED HANGUL CIEUC\n3209\t(ᄎ)\t# PARENTHESIZED HANGUL CHIEUCH\n320A\t(ᄏ)\t# PARENTHESIZED HANGUL KHIEUKH\n320B\t(ᄐ)\t# PARENTHESIZED HANGUL THIEUTH\n320C\t(ᄑ)\t# PARENTHESIZED HANGUL PHIEUPH\n320D\t(ᄒ)\t# PARENTHESIZED HANGUL HIEUH\n320E\t(가)\t# PARENTHESIZED HANGUL KIYEOK A\n320F\t(나)\t# PARENTHESIZED HANGUL NIEUN A\n3210\t(다)\t# PARENTHESIZED HANGUL TIKEUT A\n3211\t(라)\t# PARENTHESIZED HANGUL RIEUL A\n3212\t(마)\t# PARENTHESIZED HANGUL MIEUM A\n3213\t(바)\t# PARENTHESIZED HANGUL PIEUP A\n3214\t(사)\t# PARENTHESIZED HANGUL SIOS A\n3215\t(아)\t# PARENTHESIZED HANGUL IEUNG A\n3216\t(자)\t# PARENTHESIZED HANGUL CIEUC A\n3217\t(차)\t# PARENTHESIZED HANGUL CHIEUCH A\n3218\t(카)\t# PARENTHESIZED HANGUL KHIEUKH A\n3219\t(타)\t# PARENTHESIZED HANGUL THIEUTH A\n321A\t(파)\t# PARENTHESIZED HANGUL PHIEUPH A\n321B\t(하)\t# PARENTHESIZED HANGUL HIEUH A\n321C\t(주)\t# PARENTHESIZED HANGUL CIEUC U\n321D\t(오전)\t# PARENTHESIZED KOREAN CHARACTER OJEON\n321E\t(오후)\t# PARENTHESIZED KOREAN CHARACTER O HU\n3220\t(一)\t# PARENTHESIZED IDEOGRAPH ONE\n3221\t(二)\t# PARENTHESIZED IDEOGRAPH TWO\n3222\t(三)\t# PARENTHESIZED IDEOGRAPH THREE\n3223\t(四)\t# PARENTHESIZED IDEOGRAPH FOUR\n3224\t(五)\t# PARENTHESIZED IDEOGRAPH FIVE\n3225\t(六)\t# PARENTHESIZED IDEOGRAPH SIX\n3226\t(七)\t# PARENTHESIZED IDEOGRAPH SEVEN\n3227\t(八)\t# PARENTHESIZED IDEOGRAPH EIGHT\n3228\t(九)\t# PARENTHESIZED IDEOGRAPH NINE\n3229\t(十)\t# PARENTHESIZED IDEOGRAPH TEN\n322A\t(月)\t# PARENTHESIZED IDEOGRAPH MOON\n322B\t(火)\t# PARENTHESIZED IDEOGRAPH FIRE\n322C\t(水)\t# PARENTHESIZED IDEOGRAPH WATER\n322D\t(木)\t# PARENTHESIZED IDEOGRAPH WOOD\n322E\t(金)\t# PARENTHESIZED IDEOGRAPH METAL\n322F\t(土)\t# PARENTHESIZED IDEOGRAPH EARTH\n3230\t(日)\t# PARENTHESIZED IDEOGRAPH SUN\n3231\t(株)\t# PARENTHESIZED IDEOGRAPH STOCK\n3232\t(有)\t# PARENTHESIZED IDEOGRAPH HAVE\n3233\t(社)\t# PARENTHESIZED IDEOGRAPH SOCIETY\n3234\t(名)\t# PARENTHESIZED IDEOGRAPH NAME\n3235\t(特)\t# PARENTHESIZED IDEOGRAPH SPECIAL\n3236\t(財)\t# PARENTHESIZED IDEOGRAPH FINANCIAL\n3237\t(祝)\t# PARENTHESIZED IDEOGRAPH CONGRATULATION\n3238\t(労)\t# PARENTHESIZED IDEOGRAPH LABOR\n3239\t(代)\t# PARENTHESIZED IDEOGRAPH REPRESENT\n323A\t(呼)\t# PARENTHESIZED IDEOGRAPH CALL\n323B\t(学)\t# PARENTHESIZED IDEOGRAPH STUDY\n323C\t(監)\t# PARENTHESIZED IDEOGRAPH SUPERVISE\n323D\t(企)\t# PARENTHESIZED IDEOGRAPH ENTERPRISE\n323E\t(資)\t# PARENTHESIZED IDEOGRAPH RESOURCE\n323F\t(協)\t# PARENTHESIZED IDEOGRAPH ALLIANCE\n3240\t(祭)\t# PARENTHESIZED IDEOGRAPH FESTIVAL\n3241\t(休)\t# PARENTHESIZED IDEOGRAPH REST\n3242\t(自)\t# PARENTHESIZED IDEOGRAPH SELF\n3243\t(至)\t# PARENTHESIZED IDEOGRAPH REACH\n3250\tPTE\t# PARTNERSHIP SIGN\n3251\t(21)\t# CIRCLED NUMBER TWENTY ONE\n3252\t(22)\t# CIRCLED NUMBER TWENTY TWO\n3253\t(23)\t# CIRCLED NUMBER TWENTY THREE\n3254\t(24)\t# CIRCLED NUMBER TWENTY FOUR\n3255\t(25)\t# CIRCLED NUMBER TWENTY FIVE\n3256\t(26)\t# CIRCLED NUMBER TWENTY SIX\n3257\t(27)\t# CIRCLED NUMBER TWENTY SEVEN\n3258\t(28)\t# CIRCLED NUMBER TWENTY EIGHT\n3259\t(29)\t# CIRCLED NUMBER TWENTY NINE\n325A\t(30)\t# CIRCLED NUMBER THIRTY\n325B\t(31)\t# CIRCLED NUMBER THIRTY ONE\n325C\t(32)\t# CIRCLED NUMBER THIRTY TWO\n325D\t(33)\t# CIRCLED NUMBER THIRTY THREE\n325E\t(34)\t# CIRCLED NUMBER THIRTY FOUR\n325F\t(35)\t# CIRCLED NUMBER THIRTY FIVE\n3260\t(ᄀ)\t# CIRCLED HANGUL KIYEOK\n3261\t(ᄂ)\t# CIRCLED HANGUL NIEUN\n3262\t(ᄃ)\t# CIRCLED HANGUL TIKEUT\n3263\t(ᄅ)\t# CIRCLED HANGUL RIEUL\n3264\t(ᄆ)\t# CIRCLED HANGUL MIEUM\n3265\t(ᄇ)\t# CIRCLED HANGUL PIEUP\n3266\t(ᄉ)\t# CIRCLED HANGUL SIOS\n3267\t(ᄋ)\t# CIRCLED HANGUL IEUNG\n3268\t(ᄌ)\t# CIRCLED HANGUL CIEUC\n3269\t(ᄎ)\t# CIRCLED HANGUL CHIEUCH\n326A\t(ᄏ)\t# CIRCLED HANGUL KHIEUKH\n326B\t(ᄐ)\t# CIRCLED HANGUL THIEUTH\n326C\t(ᄑ)\t# CIRCLED HANGUL PHIEUPH\n326D\t(ᄒ)\t# CIRCLED HANGUL HIEUH\n326E\t(가)\t# CIRCLED HANGUL KIYEOK A\n326F\t(나)\t# CIRCLED HANGUL NIEUN A\n3270\t(다)\t# CIRCLED HANGUL TIKEUT A\n3271\t(라)\t# CIRCLED HANGUL RIEUL A\n3272\t(마)\t# CIRCLED HANGUL MIEUM A\n3273\t(바)\t# CIRCLED HANGUL PIEUP A\n3274\t(사)\t# CIRCLED HANGUL SIOS A\n3275\t(아)\t# CIRCLED HANGUL IEUNG A\n3276\t(자)\t# CIRCLED HANGUL CIEUC A\n3277\t(차)\t# CIRCLED HANGUL CHIEUCH A\n3278\t(카)\t# CIRCLED HANGUL KHIEUKH A\n3279\t(타)\t# CIRCLED HANGUL THIEUTH A\n327A\t(파)\t# CIRCLED HANGUL PHIEUPH A\n327B\t(하)\t# CIRCLED HANGUL HIEUH A\n327C\t(참고)\t# CIRCLED KOREAN CHARACTER CHAMKO\n327D\t(주의)\t# CIRCLED KOREAN CHARACTER JUEUI\n3280\t(一)\t# CIRCLED IDEOGRAPH ONE\n3281\t(二)\t# CIRCLED IDEOGRAPH TWO\n3282\t(三)\t# CIRCLED IDEOGRAPH THREE\n3283\t(四)\t# CIRCLED IDEOGRAPH FOUR\n3284\t(五)\t# CIRCLED IDEOGRAPH FIVE\n3285\t(六)\t# CIRCLED IDEOGRAPH SIX\n3286\t(七)\t# CIRCLED IDEOGRAPH SEVEN\n3287\t(八)\t# CIRCLED IDEOGRAPH EIGHT\n3288\t(九)\t# CIRCLED IDEOGRAPH NINE\n3289\t(十)\t# CIRCLED IDEOGRAPH TEN\n328A\t(月)\t# CIRCLED IDEOGRAPH MOON\n328B\t(火)\t# CIRCLED IDEOGRAPH FIRE\n328C\t(水)\t# CIRCLED IDEOGRAPH WATER\n328D\t(木)\t# CIRCLED IDEOGRAPH WOOD\n328E\t(金)\t# CIRCLED IDEOGRAPH METAL\n328F\t(土)\t# CIRCLED IDEOGRAPH EARTH\n3290\t(日)\t# CIRCLED IDEOGRAPH SUN\n3291\t(株)\t# CIRCLED IDEOGRAPH STOCK\n3292\t(有)\t# CIRCLED IDEOGRAPH HAVE\n3293\t(社)\t# CIRCLED IDEOGRAPH SOCIETY\n3294\t(名)\t# CIRCLED IDEOGRAPH NAME\n3295\t(特)\t# CIRCLED IDEOGRAPH SPECIAL\n3296\t(財)\t# CIRCLED IDEOGRAPH FINANCIAL\n3297\t(祝)\t# CIRCLED IDEOGRAPH CONGRATULATION\n3298\t(労)\t# CIRCLED IDEOGRAPH LABOR\n3299\t(秘)\t# CIRCLED IDEOGRAPH SECRET\n329A\t(男)\t# CIRCLED IDEOGRAPH MALE\n329B\t(女)\t# CIRCLED IDEOGRAPH FEMALE\n329C\t(適)\t# CIRCLED IDEOGRAPH SUITABLE\n329D\t(優)\t# CIRCLED IDEOGRAPH EXCELLENT\n329E\t(印)\t# CIRCLED IDEOGRAPH PRINT\n329F\t(注)\t# CIRCLED IDEOGRAPH ATTENTION\n32A0\t(項)\t# CIRCLED IDEOGRAPH ITEM\n32A1\t(休)\t# CIRCLED IDEOGRAPH REST\n32A2\t(写)\t# CIRCLED IDEOGRAPH COPY\n32A3\t(正)\t# CIRCLED IDEOGRAPH CORRECT\n32A4\t(上)\t# CIRCLED IDEOGRAPH HIGH\n32A5\t(中)\t# CIRCLED IDEOGRAPH CENTRE\n32A6\t(下)\t# CIRCLED IDEOGRAPH LOW\n32A7\t(左)\t# CIRCLED IDEOGRAPH LEFT\n32A8\t(右)\t# CIRCLED IDEOGRAPH RIGHT\n32A9\t(医)\t# CIRCLED IDEOGRAPH MEDICINE\n32AA\t(宗)\t# CIRCLED IDEOGRAPH RELIGION\n32AB\t(学)\t# CIRCLED IDEOGRAPH STUDY\n32AC\t(監)\t# CIRCLED IDEOGRAPH SUPERVISE\n32AD\t(企)\t# CIRCLED IDEOGRAPH ENTERPRISE\n32AE\t(資)\t# CIRCLED IDEOGRAPH RESOURCE\n32AF\t(協)\t# CIRCLED IDEOGRAPH ALLIANCE\n32B0\t(夜)\t# CIRCLED IDEOGRAPH NIGHT\n32B1\t(36)\t# CIRCLED NUMBER THIRTY SIX\n32B2\t(37)\t# CIRCLED NUMBER THIRTY SEVEN\n32B3\t(38)\t# CIRCLED NUMBER THIRTY EIGHT\n32B4\t(39)\t# CIRCLED NUMBER THIRTY NINE\n32B5\t(40)\t# CIRCLED NUMBER FORTY\n32B6\t(41)\t# CIRCLED NUMBER FORTY ONE\n32B7\t(42)\t# CIRCLED NUMBER FORTY TWO\n32B8\t(43)\t# CIRCLED NUMBER FORTY THREE\n32B9\t(44)\t# CIRCLED NUMBER FORTY FOUR\n32BA\t(45)\t# CIRCLED NUMBER FORTY FIVE\n32BB\t(46)\t# CIRCLED NUMBER FORTY SIX\n32BC\t(47)\t# CIRCLED NUMBER FORTY SEVEN\n32BD\t(48)\t# CIRCLED NUMBER FORTY EIGHT\n32BE\t(49)\t# CIRCLED NUMBER FORTY NINE\n32BF\t(50)\t# CIRCLED NUMBER FIFTY\n32C0\t1月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY\n32C1\t2月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY\n32C2\t3月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH\n32C3\t4月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL\n32C4\t5月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY\n32C5\t6月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE\n32C6\t7月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY\n32C7\t8月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST\n32C8\t9月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER\n32C9\t10月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER\n32CA\t11月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER\n32CB\t12月\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER\n32CC\tHg\t# SQUARE HG\n32CD\terg\t# SQUARE ERG\n32CE\teV\t# SQUARE EV\n32CF\tLTD\t# LIMITED LIABILITY SIGN\n32D0\t(ア)\t# CIRCLED KATAKANA A\n32D1\t(イ)\t# CIRCLED KATAKANA I\n32D2\t(ウ)\t# CIRCLED KATAKANA U\n32D3\t(エ)\t# CIRCLED KATAKANA E\n32D4\t(オ)\t# CIRCLED KATAKANA O\n32D5\t(カ)\t# CIRCLED KATAKANA KA\n32D6\t(キ)\t# CIRCLED KATAKANA KI\n32D7\t(ク)\t# CIRCLED KATAKANA KU\n32D8\t(ケ)\t# CIRCLED KATAKANA KE\n32D9\t(コ)\t# CIRCLED KATAKANA KO\n32DA\t(サ)\t# CIRCLED KATAKANA SA\n32DB\t(シ)\t# CIRCLED KATAKANA SI\n32DC\t(ス)\t# CIRCLED KATAKANA SU\n32DD\t(セ)\t# CIRCLED KATAKANA SE\n32DE\t(ソ)\t# CIRCLED KATAKANA SO\n32DF\t(タ)\t# CIRCLED KATAKANA TA\n32E0\t(チ)\t# CIRCLED KATAKANA TI\n32E1\t(ツ)\t# CIRCLED KATAKANA TU\n32E2\t(テ)\t# CIRCLED KATAKANA TE\n32E3\t(ト)\t# CIRCLED KATAKANA TO\n32E4\t(ナ)\t# CIRCLED KATAKANA NA\n32E5\t(ニ)\t# CIRCLED KATAKANA NI\n32E6\t(ヌ)\t# CIRCLED KATAKANA NU\n32E7\t(ネ)\t# CIRCLED KATAKANA NE\n32E8\t(ノ)\t# CIRCLED KATAKANA NO\n32E9\t(ハ)\t# CIRCLED KATAKANA HA\n32EA\t(ヒ)\t# CIRCLED KATAKANA HI\n32EB\t(フ)\t# CIRCLED KATAKANA HU\n32EC\t(ヘ)\t# CIRCLED KATAKANA HE\n32ED\t(ホ)\t# CIRCLED KATAKANA HO\n32EE\t(マ)\t# CIRCLED KATAKANA MA\n32EF\t(ミ)\t# CIRCLED KATAKANA MI\n32F0\t(ム)\t# CIRCLED KATAKANA MU\n32F1\t(メ)\t# CIRCLED KATAKANA ME\n32F2\t(モ)\t# CIRCLED KATAKANA MO\n32F3\t(ヤ)\t# CIRCLED KATAKANA YA\n32F4\t(ユ)\t# CIRCLED KATAKANA YU\n32F5\t(ヨ)\t# CIRCLED KATAKANA YO\n32F6\t(ラ)\t# CIRCLED KATAKANA RA\n32F7\t(リ)\t# CIRCLED KATAKANA RI\n32F8\t(ル)\t# CIRCLED KATAKANA RU\n32F9\t(レ)\t# CIRCLED KATAKANA RE\n32FA\t(ロ)\t# CIRCLED KATAKANA RO\n32FB\t(ワ)\t# CIRCLED KATAKANA WA\n32FC\t(ヰ)\t# CIRCLED KATAKANA WI\n32FD\t(ヱ)\t# CIRCLED KATAKANA WE\n32FE\t(ヲ)\t# CIRCLED KATAKANA WO\n3300\tアパート\t# SQUARE APAATO\n3301\tアルファ\t# SQUARE ARUHUA\n3302\tアンペア\t# SQUARE ANPEA\n3303\tアール\t# SQUARE AARU\n3304\tイニング\t# SQUARE ININGU\n3305\tインチ\t# SQUARE INTI\n3306\tウォン\t# SQUARE UON\n3307\tエスクード\t# SQUARE ESUKUUDO\n3308\tエーカー\t# SQUARE EEKAA\n3309\tオンス\t# SQUARE ONSU\n330A\tオーム\t# SQUARE OOMU\n330B\tカイリ\t# SQUARE KAIRI\n330C\tカラット\t# SQUARE KARATTO\n330D\tカロリー\t# SQUARE KARORII\n330E\tガロン\t# SQUARE GARON\n330F\tガンマ\t# SQUARE GANMA\n3310\tギガ\t# SQUARE GIGA\n3311\tギニー\t# SQUARE GINII\n3312\tキュリー\t# SQUARE KYURII\n3313\tギルダー\t# SQUARE GIRUDAA\n3314\tキロ\t# SQUARE KIRO\n3315\tキログラム\t# SQUARE KIROGURAMU\n3316\tキロメートル\t# SQUARE KIROMEETORU\n3317\tキロワット\t# SQUARE KIROWATTO\n3318\tグラム\t# SQUARE GURAMU\n3319\tグラムトン\t# SQUARE GURAMUTON\n331A\tクルゼイロ\t# SQUARE KURUZEIRO\n331B\tクローネ\t# SQUARE KUROONE\n331C\tケース\t# SQUARE KEESU\n331D\tコルナ\t# SQUARE KORUNA\n331E\tコーポ\t# SQUARE KOOPO\n331F\tサイクル\t# SQUARE SAIKURU\n3320\tサンチーム\t# SQUARE SANTIIMU\n3321\tシリング\t# SQUARE SIRINGU\n3322\tセンチ\t# SQUARE SENTI\n3323\tセント\t# SQUARE SENTO\n3324\tダース\t# SQUARE DAASU\n3325\tデシ\t# SQUARE DESI\n3326\tドル\t# SQUARE DORU\n3327\tトン\t# SQUARE TON\n3328\tナノ\t# SQUARE NANO\n3329\tノット\t# SQUARE NOTTO\n332A\tハイツ\t# SQUARE HAITU\n332B\tパーセント\t# SQUARE PAASENTO\n332C\tパーツ\t# SQUARE PAATU\n332D\tバーレル\t# SQUARE BAARERU\n332E\tピアストル\t# SQUARE PIASUTORU\n332F\tピクル\t# SQUARE PIKURU\n3330\tピコ\t# SQUARE PIKO\n3331\tビル\t# SQUARE BIRU\n3332\tファラッド\t# SQUARE HUARADDO\n3333\tフィート\t# SQUARE HUIITO\n3334\tブッシェル\t# SQUARE BUSSYERU\n3335\tフラン\t# SQUARE HURAN\n3336\tヘクタール\t# SQUARE HEKUTAARU\n3337\tペソ\t# SQUARE PESO\n3338\tペニヒ\t# SQUARE PENIHI\n3339\tヘルツ\t# SQUARE HERUTU\n333A\tペンス\t# SQUARE PENSU\n333B\tページ\t# SQUARE PEEZI\n333C\tベータ\t# SQUARE BEETA\n333D\tポイント\t# SQUARE POINTO\n333E\tボルト\t# SQUARE BORUTO\n333F\tホン\t# SQUARE HON\n3340\tポンド\t# SQUARE PONDO\n3341\tホール\t# SQUARE HOORU\n3342\tホーン\t# SQUARE HOON\n3343\tマイクロ\t# SQUARE MAIKURO\n3344\tマイル\t# SQUARE MAIRU\n3345\tマッハ\t# SQUARE MAHHA\n3346\tマルク\t# SQUARE MARUKU\n3347\tマンション\t# SQUARE MANSYON\n3348\tミクロン\t# SQUARE MIKURON\n3349\tミリ\t# SQUARE MIRI\n334A\tミリバール\t# SQUARE MIRIBAARU\n334B\tメガ\t# SQUARE MEGA\n334C\tメガトン\t# SQUARE MEGATON\n334D\tメートル\t# SQUARE MEETORU\n334E\tヤード\t# SQUARE YAADO\n334F\tヤール\t# SQUARE YAARU\n3350\tユアン\t# SQUARE YUAN\n3351\tリットル\t# SQUARE RITTORU\n3352\tリラ\t# SQUARE RIRA\n3353\tルピー\t# SQUARE RUPII\n3354\tルーブル\t# SQUARE RUUBURU\n3355\tレム\t# SQUARE REMU\n3356\tレントゲン\t# SQUARE RENTOGEN\n3357\tワット\t# SQUARE WATTO\n3358\t0点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO\n3359\t1点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE\n335A\t2点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO\n335B\t3点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE\n335C\t4点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR\n335D\t5点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE\n335E\t6点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX\n335F\t7点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN\n3360\t8点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT\n3361\t9点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE\n3362\t10点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN\n3363\t11点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN\n3364\t12点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE\n3365\t13点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN\n3366\t14点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN\n3367\t15点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN\n3368\t16点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN\n3369\t17点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN\n336A\t18点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN\n336B\t19点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN\n336C\t20点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY\n336D\t21点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE\n336E\t22点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO\n336F\t23点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE\n3370\t24点\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR\n3371\thPa\t# SQUARE HPA\n3372\tda\t# SQUARE DA\n3373\tAU\t# SQUARE AU\n3374\tbar\t# SQUARE BAR\n3375\toV\t# SQUARE OV\n3376\tpc\t# SQUARE PC\n3377\tdm\t# SQUARE DM\n3378\tdm^2\t# SQUARE DM SQUARED\n3379\tdm^3\t# SQUARE DM CUBED\n337A\tIU\t# SQUARE IU\n337B\t平成\t# SQUARE ERA NAME HEISEI\n337C\t昭和\t# SQUARE ERA NAME SYOUWA\n337D\t大正\t# SQUARE ERA NAME TAISYOU\n337E\t明治\t# SQUARE ERA NAME MEIZI\n337F\t株式会社\t# SQUARE CORPORATION\n3380\tpA\t# SQUARE PA AMPS\n3381\tnA\t# SQUARE NA\n3382\tμA\t# SQUARE MU A\n3383\tmA\t# SQUARE MA\n3384\tkA\t# SQUARE KA\n3385\tKB\t# SQUARE KB\n3386\tMB\t# SQUARE MB\n3387\tGB\t# SQUARE GB\n3388\tcal\t# SQUARE CAL\n3389\tkcal\t# SQUARE KCAL\n338A\tpF\t# SQUARE PF\n338B\tnF\t# SQUARE NF\n338C\tμF\t# SQUARE MU F\n338D\tμg\t# SQUARE MU G\n338E\tmg\t# SQUARE MG\n338F\tkg\t# SQUARE KG\n3390\tHz\t# SQUARE HZ\n3391\tkHz\t# SQUARE KHZ\n3392\tMHz\t# SQUARE MHZ\n3393\tGHz\t# SQUARE GHZ\n3394\tTHz\t# SQUARE THZ\n3395\tμl\t# SQUARE MU L\n3396\tml\t# SQUARE ML\n3397\tdl\t# SQUARE DL\n3398\tkl\t# SQUARE KL\n3399\tfm\t# SQUARE FM\n339A\tnm\t# SQUARE NM\n339B\tμm\t# SQUARE MU M\n339C\tmm\t# SQUARE MM\n339D\tcm\t# SQUARE CM\n339E\tkm\t# SQUARE KM\n339F\tmm^2\t# SQUARE MM SQUARED\n33A0\tcm^2\t# SQUARE CM SQUARED\n33A1\tm^2\t# SQUARE M SQUARED\n33A2\tkm^2\t# SQUARE KM SQUARED\n33A3\tmm^3\t# SQUARE MM CUBED\n33A4\tcm^3\t# SQUARE CM CUBED\n33A5\tm^3\t# SQUARE M CUBED\n33A6\tkm^3\t# SQUARE KM CUBED\n33A7\tm/s\t# SQUARE M OVER S\n33A8\tm/s^2\t# SQUARE M OVER S SQUARED\n33A9\tPa\t# SQUARE PA\n33AA\tkPa\t# SQUARE KPA\n33AB\tMPa\t# SQUARE MPA\n33AC\tGPa\t# SQUARE GPA\n33AD\trad\t# SQUARE RAD\n33AE\trad/s\t# SQUARE RAD OVER S\n33AF\trad/s^2\t# SQUARE RAD OVER S SQUARED\n33B0\tps\t# SQUARE PS\n33B1\tns\t# SQUARE NS\n33B2\tμs\t# SQUARE MU S\n33B3\tms\t# SQUARE MS\n33B4\tpV\t# SQUARE PV\n33B5\tnV\t# SQUARE NV\n33B6\tμV\t# SQUARE MU V\n33B7\tmV\t# SQUARE MV\n33B8\tkV\t# SQUARE KV\n33B9\tMV\t# SQUARE MV MEGA\n33BA\tpW\t# SQUARE PW\n33BB\tnW\t# SQUARE NW\n33BC\tμW\t# SQUARE MU W\n33BD\tmW\t# SQUARE MW\n33BE\tkW\t# SQUARE KW\n33BF\tMW\t# SQUARE MW MEGA\n33C0\tkΩ\t# SQUARE K OHM\n33C1\tMΩ\t# SQUARE M OHM\n33C2\ta.m.\t# SQUARE AM\n33C3\tBq\t# SQUARE BQ\n33C4\tcc\t# SQUARE CC\n33C5\tcd\t# SQUARE CD\n33C6\tC/kg\t# SQUARE C OVER KG\n33C7\tCo.\t# SQUARE CO\n33C8\tdB\t# SQUARE DB\n33C9\tGy\t# SQUARE GY\n33CA\tha\t# SQUARE HA\n33CB\tHP\t# SQUARE HP\n33CC\tin\t# SQUARE IN\n33CD\tKK\t# SQUARE KK\n33CE\tKM\t# SQUARE KM CAPITAL\n33CF\tkt\t# SQUARE KT\n33D0\tlm\t# SQUARE LM\n33D1\tln\t# SQUARE LN\n33D2\tlog\t# SQUARE LOG\n33D3\tlx\t# SQUARE LX\n33D4\tmb\t# SQUARE MB SMALL\n33D5\tmil\t# SQUARE MIL\n33D6\tmol\t# SQUARE MOL\n33D7\tPH\t# SQUARE PH\n33D8\tp.m.\t# SQUARE PM\n33D9\tPPM\t# SQUARE PPM\n33DA\tPR\t# SQUARE PR\n33DB\tsr\t# SQUARE SR\n33DC\tSv\t# SQUARE SV\n33DD\tWb\t# SQUARE WB\n33DE\tV/m\t# SQUARE V OVER M\n33DF\tA/m\t# SQUARE A OVER M\n33FF\tgal\t# SQUARE GAL\n33E0\t1日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE\n33E1\t2日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO\n33E2\t3日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE\n33E3\t4日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR\n33E4\t5日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE\n33E5\t6日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX\n33E6\t7日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN\n33E7\t8日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT\n33E8\t9日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE\n33E9\t10日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN\n33EA\t11日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN\n33EB\t12日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE\n33EC\t13日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN\n33ED\t14日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN\n33EE\t15日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN\n33EF\t16日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN\n33F0\t17日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN\n33F1\t18日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN\n33F2\t19日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN\n33F3\t20日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY\n33F4\t21日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE\n33F5\t22日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO\n33F6\t23日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE\n33F7\t24日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR\n33F8\t25日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE\n33F9\t26日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX\n33FA\t27日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN\n33FB\t28日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT\n33FC\t29日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE\n33FD\t30日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY\n33FE\t31日\t# IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE\nF900\t豈\t# CJK COMPATIBILITY IDEOGRAPH-F900\nF901\t更\t# CJK COMPATIBILITY IDEOGRAPH-F901\nF902\t車\t# CJK COMPATIBILITY IDEOGRAPH-F902\nF903\t賈\t# CJK COMPATIBILITY IDEOGRAPH-F903\nF904\t滑\t# CJK COMPATIBILITY IDEOGRAPH-F904\nF905\t串\t# CJK COMPATIBILITY IDEOGRAPH-F905\nF906\t句\t# CJK COMPATIBILITY IDEOGRAPH-F906\nF907\t龜\t# CJK COMPATIBILITY IDEOGRAPH-F907\nF908\t龜\t# CJK COMPATIBILITY IDEOGRAPH-F908\nF909\t契\t# CJK COMPATIBILITY IDEOGRAPH-F909\nF90A\t金\t# CJK COMPATIBILITY IDEOGRAPH-F90A\nF90B\t喇\t# CJK COMPATIBILITY IDEOGRAPH-F90B\nF90C\t奈\t# CJK COMPATIBILITY IDEOGRAPH-F90C\nF90D\t懶\t# CJK COMPATIBILITY IDEOGRAPH-F90D\nF90E\t癩\t# CJK COMPATIBILITY IDEOGRAPH-F90E\nF90F\t羅\t# CJK COMPATIBILITY IDEOGRAPH-F90F\nF910\t蘿\t# CJK COMPATIBILITY IDEOGRAPH-F910\nF911\t螺\t# CJK COMPATIBILITY IDEOGRAPH-F911\nF912\t裸\t# CJK COMPATIBILITY IDEOGRAPH-F912\nF913\t邏\t# CJK COMPATIBILITY IDEOGRAPH-F913\nF914\t樂\t# CJK COMPATIBILITY IDEOGRAPH-F914\nF915\t洛\t# CJK COMPATIBILITY IDEOGRAPH-F915\nF916\t烙\t# CJK COMPATIBILITY IDEOGRAPH-F916\nF917\t珞\t# CJK COMPATIBILITY IDEOGRAPH-F917\nF918\t落\t# CJK COMPATIBILITY IDEOGRAPH-F918\nF919\t酪\t# CJK COMPATIBILITY IDEOGRAPH-F919\nF91A\t駱\t# CJK COMPATIBILITY IDEOGRAPH-F91A\nF91B\t亂\t# CJK COMPATIBILITY IDEOGRAPH-F91B\nF91C\t卵\t# CJK COMPATIBILITY IDEOGRAPH-F91C\nF91D\t欄\t# CJK COMPATIBILITY IDEOGRAPH-F91D\nF91E\t爛\t# CJK COMPATIBILITY IDEOGRAPH-F91E\nF91F\t蘭\t# CJK COMPATIBILITY IDEOGRAPH-F91F\nF920\t鸞\t# CJK COMPATIBILITY IDEOGRAPH-F920\nF921\t嵐\t# CJK COMPATIBILITY IDEOGRAPH-F921\nF922\t濫\t# CJK COMPATIBILITY IDEOGRAPH-F922\nF923\t藍\t# CJK COMPATIBILITY IDEOGRAPH-F923\nF924\t襤\t# CJK COMPATIBILITY IDEOGRAPH-F924\nF925\t拉\t# CJK COMPATIBILITY IDEOGRAPH-F925\nF926\t臘\t# CJK COMPATIBILITY IDEOGRAPH-F926\nF927\t蠟\t# CJK COMPATIBILITY IDEOGRAPH-F927\nF928\t廊\t# CJK COMPATIBILITY IDEOGRAPH-F928\nF929\t朗\t# CJK COMPATIBILITY IDEOGRAPH-F929\nF92A\t浪\t# CJK COMPATIBILITY IDEOGRAPH-F92A\nF92B\t狼\t# CJK COMPATIBILITY IDEOGRAPH-F92B\nF92C\t郎\t# CJK COMPATIBILITY IDEOGRAPH-F92C\nF92D\t來\t# CJK COMPATIBILITY IDEOGRAPH-F92D\nF92E\t冷\t# CJK COMPATIBILITY IDEOGRAPH-F92E\nF92F\t勞\t# CJK COMPATIBILITY IDEOGRAPH-F92F\nF930\t擄\t# CJK COMPATIBILITY IDEOGRAPH-F930\nF931\t櫓\t# CJK COMPATIBILITY IDEOGRAPH-F931\nF932\t爐\t# CJK COMPATIBILITY IDEOGRAPH-F932\nF933\t盧\t# CJK COMPATIBILITY IDEOGRAPH-F933\nF934\t老\t# CJK COMPATIBILITY IDEOGRAPH-F934\nF935\t蘆\t# CJK COMPATIBILITY IDEOGRAPH-F935\nF936\t虜\t# CJK COMPATIBILITY IDEOGRAPH-F936\nF937\t路\t# CJK COMPATIBILITY IDEOGRAPH-F937\nF938\t露\t# CJK COMPATIBILITY IDEOGRAPH-F938\nF939\t魯\t# CJK COMPATIBILITY IDEOGRAPH-F939\nF93A\t鷺\t# CJK COMPATIBILITY IDEOGRAPH-F93A\nF93B\t碌\t# CJK COMPATIBILITY IDEOGRAPH-F93B\nF93C\t祿\t# CJK COMPATIBILITY IDEOGRAPH-F93C\nF93D\t綠\t# CJK COMPATIBILITY IDEOGRAPH-F93D\nF93E\t菉\t# CJK COMPATIBILITY IDEOGRAPH-F93E\nF93F\t錄\t# CJK COMPATIBILITY IDEOGRAPH-F93F\nF940\t鹿\t# CJK COMPATIBILITY IDEOGRAPH-F940\nF941\t論\t# CJK COMPATIBILITY IDEOGRAPH-F941\nF942\t壟\t# CJK COMPATIBILITY IDEOGRAPH-F942\nF943\t弄\t# CJK COMPATIBILITY IDEOGRAPH-F943\nF944\t籠\t# CJK COMPATIBILITY IDEOGRAPH-F944\nF945\t聾\t# CJK COMPATIBILITY IDEOGRAPH-F945\nF946\t牢\t# CJK COMPATIBILITY IDEOGRAPH-F946\nF947\t磊\t# CJK COMPATIBILITY IDEOGRAPH-F947\nF948\t賂\t# CJK COMPATIBILITY IDEOGRAPH-F948\nF949\t雷\t# CJK COMPATIBILITY IDEOGRAPH-F949\nF94A\t壘\t# CJK COMPATIBILITY IDEOGRAPH-F94A\nF94B\t屢\t# CJK COMPATIBILITY IDEOGRAPH-F94B\nF94C\t樓\t# CJK COMPATIBILITY IDEOGRAPH-F94C\nF94D\t淚\t# CJK COMPATIBILITY IDEOGRAPH-F94D\nF94E\t漏\t# CJK COMPATIBILITY IDEOGRAPH-F94E\nF94F\t累\t# CJK COMPATIBILITY IDEOGRAPH-F94F\nF950\t縷\t# CJK COMPATIBILITY IDEOGRAPH-F950\nF951\t陋\t# CJK COMPATIBILITY IDEOGRAPH-F951\nF952\t勒\t# CJK COMPATIBILITY IDEOGRAPH-F952\nF953\t肋\t# CJK COMPATIBILITY IDEOGRAPH-F953\nF954\t凜\t# CJK COMPATIBILITY IDEOGRAPH-F954\nF955\t凌\t# CJK COMPATIBILITY IDEOGRAPH-F955\nF956\t稜\t# CJK COMPATIBILITY IDEOGRAPH-F956\nF957\t綾\t# CJK COMPATIBILITY IDEOGRAPH-F957\nF958\t菱\t# CJK COMPATIBILITY IDEOGRAPH-F958\nF959\t陵\t# CJK COMPATIBILITY IDEOGRAPH-F959\nF95A\t讀\t# CJK COMPATIBILITY IDEOGRAPH-F95A\nF95B\t拏\t# CJK COMPATIBILITY IDEOGRAPH-F95B\nF95C\t樂\t# CJK COMPATIBILITY IDEOGRAPH-F95C\nF95D\t諾\t# CJK COMPATIBILITY IDEOGRAPH-F95D\nF95E\t丹\t# CJK COMPATIBILITY IDEOGRAPH-F95E\nF95F\t寧\t# CJK COMPATIBILITY IDEOGRAPH-F95F\nF960\t怒\t# CJK COMPATIBILITY IDEOGRAPH-F960\nF961\t率\t# CJK COMPATIBILITY IDEOGRAPH-F961\nF962\t異\t# CJK COMPATIBILITY IDEOGRAPH-F962\nF963\t北\t# CJK COMPATIBILITY IDEOGRAPH-F963\nF964\t磻\t# CJK COMPATIBILITY IDEOGRAPH-F964\nF965\t便\t# CJK COMPATIBILITY IDEOGRAPH-F965\nF966\t復\t# CJK COMPATIBILITY IDEOGRAPH-F966\nF967\t不\t# CJK COMPATIBILITY IDEOGRAPH-F967\nF968\t泌\t# CJK COMPATIBILITY IDEOGRAPH-F968\nF969\t數\t# CJK COMPATIBILITY IDEOGRAPH-F969\nF96A\t索\t# CJK COMPATIBILITY IDEOGRAPH-F96A\nF96B\t參\t# CJK COMPATIBILITY IDEOGRAPH-F96B\nF96C\t塞\t# CJK COMPATIBILITY IDEOGRAPH-F96C\nF96D\t省\t# CJK COMPATIBILITY IDEOGRAPH-F96D\nF96E\t葉\t# CJK COMPATIBILITY IDEOGRAPH-F96E\nF96F\t說\t# CJK COMPATIBILITY IDEOGRAPH-F96F\nF970\t殺\t# CJK COMPATIBILITY IDEOGRAPH-F970\nF971\t辰\t# CJK COMPATIBILITY IDEOGRAPH-F971\nF972\t沈\t# CJK COMPATIBILITY IDEOGRAPH-F972\nF973\t拾\t# CJK COMPATIBILITY IDEOGRAPH-F973\nF974\t若\t# CJK COMPATIBILITY IDEOGRAPH-F974\nF975\t掠\t# CJK COMPATIBILITY IDEOGRAPH-F975\nF976\t略\t# CJK COMPATIBILITY IDEOGRAPH-F976\nF977\t亮\t# CJK COMPATIBILITY IDEOGRAPH-F977\nF978\t兩\t# CJK COMPATIBILITY IDEOGRAPH-F978\nF979\t凉\t# CJK COMPATIBILITY IDEOGRAPH-F979\nF97A\t梁\t# CJK COMPATIBILITY IDEOGRAPH-F97A\nF97B\t糧\t# CJK COMPATIBILITY IDEOGRAPH-F97B\nF97C\t良\t# CJK COMPATIBILITY IDEOGRAPH-F97C\nF97D\t諒\t# CJK COMPATIBILITY IDEOGRAPH-F97D\nF97E\t量\t# CJK COMPATIBILITY IDEOGRAPH-F97E\nF97F\t勵\t# CJK COMPATIBILITY IDEOGRAPH-F97F\nF980\t呂\t# CJK COMPATIBILITY IDEOGRAPH-F980\nF981\t女\t# CJK COMPATIBILITY IDEOGRAPH-F981\nF982\t廬\t# CJK COMPATIBILITY IDEOGRAPH-F982\nF983\t旅\t# CJK COMPATIBILITY IDEOGRAPH-F983\nF984\t濾\t# CJK COMPATIBILITY IDEOGRAPH-F984\nF985\t礪\t# CJK COMPATIBILITY IDEOGRAPH-F985\nF986\t閭\t# CJK COMPATIBILITY IDEOGRAPH-F986\nF987\t驪\t# CJK COMPATIBILITY IDEOGRAPH-F987\nF988\t麗\t# CJK COMPATIBILITY IDEOGRAPH-F988\nF989\t黎\t# CJK COMPATIBILITY IDEOGRAPH-F989\nF98A\t力\t# CJK COMPATIBILITY IDEOGRAPH-F98A\nF98B\t曆\t# CJK COMPATIBILITY IDEOGRAPH-F98B\nF98C\t歷\t# CJK COMPATIBILITY IDEOGRAPH-F98C\nF98D\t轢\t# CJK COMPATIBILITY IDEOGRAPH-F98D\nF98E\t年\t# CJK COMPATIBILITY IDEOGRAPH-F98E\nF98F\t憐\t# CJK COMPATIBILITY IDEOGRAPH-F98F\nF990\t戀\t# CJK COMPATIBILITY IDEOGRAPH-F990\nF991\t撚\t# CJK COMPATIBILITY IDEOGRAPH-F991\nF992\t漣\t# CJK COMPATIBILITY IDEOGRAPH-F992\nF993\t煉\t# CJK COMPATIBILITY IDEOGRAPH-F993\nF994\t璉\t# CJK COMPATIBILITY IDEOGRAPH-F994\nF995\t秊\t# CJK COMPATIBILITY IDEOGRAPH-F995\nF996\t練\t# CJK COMPATIBILITY IDEOGRAPH-F996\nF997\t聯\t# CJK COMPATIBILITY IDEOGRAPH-F997\nF998\t輦\t# CJK COMPATIBILITY IDEOGRAPH-F998\nF999\t蓮\t# CJK COMPATIBILITY IDEOGRAPH-F999\nF99A\t連\t# CJK COMPATIBILITY IDEOGRAPH-F99A\nF99B\t鍊\t# CJK COMPATIBILITY IDEOGRAPH-F99B\nF99C\t列\t# CJK COMPATIBILITY IDEOGRAPH-F99C\nF99D\t劣\t# CJK COMPATIBILITY IDEOGRAPH-F99D\nF99E\t咽\t# CJK COMPATIBILITY IDEOGRAPH-F99E\nF99F\t烈\t# CJK COMPATIBILITY IDEOGRAPH-F99F\nF9A0\t裂\t# CJK COMPATIBILITY IDEOGRAPH-F9A0\nF9A1\t說\t# CJK COMPATIBILITY IDEOGRAPH-F9A1\nF9A2\t廉\t# CJK COMPATIBILITY IDEOGRAPH-F9A2\nF9A3\t念\t# CJK COMPATIBILITY IDEOGRAPH-F9A3\nF9A4\t捻\t# CJK COMPATIBILITY IDEOGRAPH-F9A4\nF9A5\t殮\t# CJK COMPATIBILITY IDEOGRAPH-F9A5\nF9A6\t簾\t# CJK COMPATIBILITY IDEOGRAPH-F9A6\nF9A7\t獵\t# CJK COMPATIBILITY IDEOGRAPH-F9A7\nF9A8\t令\t# CJK COMPATIBILITY IDEOGRAPH-F9A8\nF9A9\t囹\t# CJK COMPATIBILITY IDEOGRAPH-F9A9\nF9AA\t寧\t# CJK COMPATIBILITY IDEOGRAPH-F9AA\nF9AB\t嶺\t# CJK COMPATIBILITY IDEOGRAPH-F9AB\nF9AC\t怜\t# CJK COMPATIBILITY IDEOGRAPH-F9AC\nF9AD\t玲\t# CJK COMPATIBILITY IDEOGRAPH-F9AD\nF9AE\t瑩\t# CJK COMPATIBILITY IDEOGRAPH-F9AE\nF9AF\t羚\t# CJK COMPATIBILITY IDEOGRAPH-F9AF\nF9B0\t聆\t# CJK COMPATIBILITY IDEOGRAPH-F9B0\nF9B1\t鈴\t# CJK COMPATIBILITY IDEOGRAPH-F9B1\nF9B2\t零\t# CJK COMPATIBILITY IDEOGRAPH-F9B2\nF9B3\t靈\t# CJK COMPATIBILITY IDEOGRAPH-F9B3\nF9B4\t領\t# CJK COMPATIBILITY IDEOGRAPH-F9B4\nF9B5\t例\t# CJK COMPATIBILITY IDEOGRAPH-F9B5\nF9B6\t禮\t# CJK COMPATIBILITY IDEOGRAPH-F9B6\nF9B7\t醴\t# CJK COMPATIBILITY IDEOGRAPH-F9B7\nF9B8\t隸\t# CJK COMPATIBILITY IDEOGRAPH-F9B8\nF9B9\t惡\t# CJK COMPATIBILITY IDEOGRAPH-F9B9\nF9BA\t了\t# CJK COMPATIBILITY IDEOGRAPH-F9BA\nF9BB\t僚\t# CJK COMPATIBILITY IDEOGRAPH-F9BB\nF9BC\t寮\t# CJK COMPATIBILITY IDEOGRAPH-F9BC\nF9BD\t尿\t# CJK COMPATIBILITY IDEOGRAPH-F9BD\nF9BE\t料\t# CJK COMPATIBILITY IDEOGRAPH-F9BE\nF9BF\t樂\t# CJK COMPATIBILITY IDEOGRAPH-F9BF\nF9C0\t燎\t# CJK COMPATIBILITY IDEOGRAPH-F9C0\nF9C1\t療\t# CJK COMPATIBILITY IDEOGRAPH-F9C1\nF9C2\t蓼\t# CJK COMPATIBILITY IDEOGRAPH-F9C2\nF9C3\t遼\t# CJK COMPATIBILITY IDEOGRAPH-F9C3\nF9C4\t龍\t# CJK COMPATIBILITY IDEOGRAPH-F9C4\nF9C5\t暈\t# CJK COMPATIBILITY IDEOGRAPH-F9C5\nF9C6\t阮\t# CJK COMPATIBILITY IDEOGRAPH-F9C6\nF9C7\t劉\t# CJK COMPATIBILITY IDEOGRAPH-F9C7\nF9C8\t杻\t# CJK COMPATIBILITY IDEOGRAPH-F9C8\nF9C9\t柳\t# CJK COMPATIBILITY IDEOGRAPH-F9C9\nF9CA\t流\t# CJK COMPATIBILITY IDEOGRAPH-F9CA\nF9CB\t溜\t# CJK COMPATIBILITY IDEOGRAPH-F9CB\nF9CC\t琉\t# CJK COMPATIBILITY IDEOGRAPH-F9CC\nF9CD\t留\t# CJK COMPATIBILITY IDEOGRAPH-F9CD\nF9CE\t硫\t# CJK COMPATIBILITY IDEOGRAPH-F9CE\nF9CF\t紐\t# CJK COMPATIBILITY IDEOGRAPH-F9CF\nF9D0\t類\t# CJK COMPATIBILITY IDEOGRAPH-F9D0\nF9D1\t六\t# CJK COMPATIBILITY IDEOGRAPH-F9D1\nF9D2\t戮\t# CJK COMPATIBILITY IDEOGRAPH-F9D2\nF9D3\t陸\t# CJK COMPATIBILITY IDEOGRAPH-F9D3\nF9D4\t倫\t# CJK COMPATIBILITY IDEOGRAPH-F9D4\nF9D5\t崙\t# CJK COMPATIBILITY IDEOGRAPH-F9D5\nF9D6\t淪\t# CJK COMPATIBILITY IDEOGRAPH-F9D6\nF9D7\t輪\t# CJK COMPATIBILITY IDEOGRAPH-F9D7\nF9D8\t律\t# CJK COMPATIBILITY IDEOGRAPH-F9D8\nF9D9\t慄\t# CJK COMPATIBILITY IDEOGRAPH-F9D9\nF9DA\t栗\t# CJK COMPATIBILITY IDEOGRAPH-F9DA\nF9DB\t率\t# CJK COMPATIBILITY IDEOGRAPH-F9DB\nF9DC\t隆\t# CJK COMPATIBILITY IDEOGRAPH-F9DC\nF9DD\t利\t# CJK COMPATIBILITY IDEOGRAPH-F9DD\nF9DE\t吏\t# CJK COMPATIBILITY IDEOGRAPH-F9DE\nF9DF\t履\t# CJK COMPATIBILITY IDEOGRAPH-F9DF\nF9E0\t易\t# CJK COMPATIBILITY IDEOGRAPH-F9E0\nF9E1\t李\t# CJK COMPATIBILITY IDEOGRAPH-F9E1\nF9E2\t梨\t# CJK COMPATIBILITY IDEOGRAPH-F9E2\nF9E3\t泥\t# CJK COMPATIBILITY IDEOGRAPH-F9E3\nF9E4\t理\t# CJK COMPATIBILITY IDEOGRAPH-F9E4\nF9E5\t痢\t# CJK COMPATIBILITY IDEOGRAPH-F9E5\nF9E6\t罹\t# CJK COMPATIBILITY IDEOGRAPH-F9E6\nF9E7\t裏\t# CJK COMPATIBILITY IDEOGRAPH-F9E7\nF9E8\t裡\t# CJK COMPATIBILITY IDEOGRAPH-F9E8\nF9E9\t里\t# CJK COMPATIBILITY IDEOGRAPH-F9E9\nF9EA\t離\t# CJK COMPATIBILITY IDEOGRAPH-F9EA\nF9EB\t匿\t# CJK COMPATIBILITY IDEOGRAPH-F9EB\nF9EC\t溺\t# CJK COMPATIBILITY IDEOGRAPH-F9EC\nF9ED\t吝\t# CJK COMPATIBILITY IDEOGRAPH-F9ED\nF9EE\t燐\t# CJK COMPATIBILITY IDEOGRAPH-F9EE\nF9EF\t璘\t# CJK COMPATIBILITY IDEOGRAPH-F9EF\nF9F0\t藺\t# CJK COMPATIBILITY IDEOGRAPH-F9F0\nF9F1\t隣\t# CJK COMPATIBILITY IDEOGRAPH-F9F1\nF9F2\t鱗\t# CJK COMPATIBILITY IDEOGRAPH-F9F2\nF9F3\t麟\t# CJK COMPATIBILITY IDEOGRAPH-F9F3\nF9F4\t林\t# CJK COMPATIBILITY IDEOGRAPH-F9F4\nF9F5\t淋\t# CJK COMPATIBILITY IDEOGRAPH-F9F5\nF9F6\t臨\t# CJK COMPATIBILITY IDEOGRAPH-F9F6\nF9F7\t立\t# CJK COMPATIBILITY IDEOGRAPH-F9F7\nF9F8\t笠\t# CJK COMPATIBILITY IDEOGRAPH-F9F8\nF9F9\t粒\t# CJK COMPATIBILITY IDEOGRAPH-F9F9\nF9FA\t狀\t# CJK COMPATIBILITY IDEOGRAPH-F9FA\nF9FB\t炙\t# CJK COMPATIBILITY IDEOGRAPH-F9FB\nF9FC\t識\t# CJK COMPATIBILITY IDEOGRAPH-F9FC\nF9FD\t什\t# CJK COMPATIBILITY IDEOGRAPH-F9FD\nF9FE\t茶\t# CJK COMPATIBILITY IDEOGRAPH-F9FE\nF9FF\t刺\t# CJK COMPATIBILITY IDEOGRAPH-F9FF\nFA00\t切\t# CJK COMPATIBILITY IDEOGRAPH-FA00\nFA01\t度\t# CJK COMPATIBILITY IDEOGRAPH-FA01\nFA02\t拓\t# CJK COMPATIBILITY IDEOGRAPH-FA02\nFA03\t糖\t# CJK COMPATIBILITY IDEOGRAPH-FA03\nFA04\t宅\t# CJK COMPATIBILITY IDEOGRAPH-FA04\nFA05\t洞\t# CJK COMPATIBILITY IDEOGRAPH-FA05\nFA06\t暴\t# CJK COMPATIBILITY IDEOGRAPH-FA06\nFA07\t輻\t# CJK COMPATIBILITY IDEOGRAPH-FA07\nFA08\t行\t# CJK COMPATIBILITY IDEOGRAPH-FA08\nFA09\t降\t# CJK COMPATIBILITY IDEOGRAPH-FA09\nFA0A\t見\t# CJK COMPATIBILITY IDEOGRAPH-FA0A\nFA0B\t廓\t# CJK COMPATIBILITY IDEOGRAPH-FA0B\nFA0C\t兀\t# CJK COMPATIBILITY IDEOGRAPH-FA0C\nFA0D\t嗀\t# CJK COMPATIBILITY IDEOGRAPH-FA0D\nFA10\t塚\t# CJK COMPATIBILITY IDEOGRAPH-FA10\nFA12\t晴\t# CJK COMPATIBILITY IDEOGRAPH-FA12\nFA15\t凞\t# CJK COMPATIBILITY IDEOGRAPH-FA15\nFA16\t猪\t# CJK COMPATIBILITY IDEOGRAPH-FA16\nFA17\t益\t# CJK COMPATIBILITY IDEOGRAPH-FA17\nFA18\t礼\t# CJK COMPATIBILITY IDEOGRAPH-FA18\nFA19\t神\t# CJK COMPATIBILITY IDEOGRAPH-FA19\nFA1A\t祥\t# CJK COMPATIBILITY IDEOGRAPH-FA1A\nFA1B\t福\t# CJK COMPATIBILITY IDEOGRAPH-FA1B\nFA1C\t靖\t# CJK COMPATIBILITY IDEOGRAPH-FA1C\nFA1D\t精\t# CJK COMPATIBILITY IDEOGRAPH-FA1D\nFA1E\t羽\t# CJK COMPATIBILITY IDEOGRAPH-FA1E\nFA20\t蘒\t# CJK COMPATIBILITY IDEOGRAPH-FA20\nFA22\t諸\t# CJK COMPATIBILITY IDEOGRAPH-FA22\nFA25\t逸\t# CJK COMPATIBILITY IDEOGRAPH-FA25\nFA26\t都\t# CJK COMPATIBILITY IDEOGRAPH-FA26\nFA2A\t飯\t# CJK COMPATIBILITY IDEOGRAPH-FA2A\nFA2B\t飼\t# CJK COMPATIBILITY IDEOGRAPH-FA2B\nFA2C\t館\t# CJK COMPATIBILITY IDEOGRAPH-FA2C\nFA2D\t鶴\t# CJK COMPATIBILITY IDEOGRAPH-FA2D\nFA30\t侮\t# CJK COMPATIBILITY IDEOGRAPH-FA30\nFA31\t僧\t# CJK COMPATIBILITY IDEOGRAPH-FA31\nFA32\t免\t# CJK COMPATIBILITY IDEOGRAPH-FA32\nFA33\t勉\t# CJK COMPATIBILITY IDEOGRAPH-FA33\nFA34\t勤\t# CJK COMPATIBILITY IDEOGRAPH-FA34\nFA35\t卑\t# CJK COMPATIBILITY IDEOGRAPH-FA35\nFA36\t喝\t# CJK COMPATIBILITY IDEOGRAPH-FA36\nFA37\t嘆\t# CJK COMPATIBILITY IDEOGRAPH-FA37\nFA38\t器\t# CJK COMPATIBILITY IDEOGRAPH-FA38\nFA39\t塀\t# CJK COMPATIBILITY IDEOGRAPH-FA39\nFA3A\t墨\t# CJK COMPATIBILITY IDEOGRAPH-FA3A\nFA3B\t層\t# CJK COMPATIBILITY IDEOGRAPH-FA3B\nFA3C\t屮\t# CJK COMPATIBILITY IDEOGRAPH-FA3C\nFA3D\t悔\t# CJK COMPATIBILITY IDEOGRAPH-FA3D\nFA3E\t慨\t# CJK COMPATIBILITY IDEOGRAPH-FA3E\nFA3F\t憎\t# CJK COMPATIBILITY IDEOGRAPH-FA3F\nFA40\t懲\t# CJK COMPATIBILITY IDEOGRAPH-FA40\nFA41\t敏\t# CJK COMPATIBILITY IDEOGRAPH-FA41\nFA42\t既\t# CJK COMPATIBILITY IDEOGRAPH-FA42\nFA43\t暑\t# CJK COMPATIBILITY IDEOGRAPH-FA43\nFA44\t梅\t# CJK COMPATIBILITY IDEOGRAPH-FA44\nFA45\t海\t# CJK COMPATIBILITY IDEOGRAPH-FA45\nFA46\t渚\t# CJK COMPATIBILITY IDEOGRAPH-FA46\nFA47\t漢\t# CJK COMPATIBILITY IDEOGRAPH-FA47\nFA48\t煮\t# CJK COMPATIBILITY IDEOGRAPH-FA48\nFA49\t爫\t# CJK COMPATIBILITY IDEOGRAPH-FA49\nFA4A\t琢\t# CJK COMPATIBILITY IDEOGRAPH-FA4A\nFA4B\t碑\t# CJK COMPATIBILITY IDEOGRAPH-FA4B\nFA4C\t社\t# CJK COMPATIBILITY IDEOGRAPH-FA4C\nFA4D\t祉\t# CJK COMPATIBILITY IDEOGRAPH-FA4D\nFA4E\t祈\t# CJK COMPATIBILITY IDEOGRAPH-FA4E\nFA4F\t祐\t# CJK COMPATIBILITY IDEOGRAPH-FA4F\nFA50\t祖\t# CJK COMPATIBILITY IDEOGRAPH-FA50\nFA51\t祝\t# CJK COMPATIBILITY IDEOGRAPH-FA51\nFA52\t禍\t# CJK COMPATIBILITY IDEOGRAPH-FA52\nFA53\t禎\t# CJK COMPATIBILITY IDEOGRAPH-FA53\nFA54\t穀\t# CJK COMPATIBILITY IDEOGRAPH-FA54\nFA55\t突\t# CJK COMPATIBILITY IDEOGRAPH-FA55\nFA56\t節\t# CJK COMPATIBILITY IDEOGRAPH-FA56\nFA57\t練\t# CJK COMPATIBILITY IDEOGRAPH-FA57\nFA58\t縉\t# CJK COMPATIBILITY IDEOGRAPH-FA58\nFA59\t繁\t# CJK COMPATIBILITY IDEOGRAPH-FA59\nFA5A\t署\t# CJK COMPATIBILITY IDEOGRAPH-FA5A\nFA5B\t者\t# CJK COMPATIBILITY IDEOGRAPH-FA5B\nFA5C\t臭\t# CJK COMPATIBILITY IDEOGRAPH-FA5C\nFA5D\t艹\t# CJK COMPATIBILITY IDEOGRAPH-FA5D\nFA5E\t艹\t# CJK COMPATIBILITY IDEOGRAPH-FA5E\nFA5F\t著\t# CJK COMPATIBILITY IDEOGRAPH-FA5F\nFA60\t褐\t# CJK COMPATIBILITY IDEOGRAPH-FA60\nFA61\t視\t# CJK COMPATIBILITY IDEOGRAPH-FA61\nFA62\t謁\t# CJK COMPATIBILITY IDEOGRAPH-FA62\nFA63\t謹\t# CJK COMPATIBILITY IDEOGRAPH-FA63\nFA64\t賓\t# CJK COMPATIBILITY IDEOGRAPH-FA64\nFA65\t贈\t# CJK COMPATIBILITY IDEOGRAPH-FA65\nFA66\t辶\t# CJK COMPATIBILITY IDEOGRAPH-FA66\nFA67\t逸\t# CJK COMPATIBILITY IDEOGRAPH-FA67\nFA68\t難\t# CJK COMPATIBILITY IDEOGRAPH-FA68\nFA69\t響\t# CJK COMPATIBILITY IDEOGRAPH-FA69\nFA6A\t頻\t# CJK COMPATIBILITY IDEOGRAPH-FA6A\nFB00\tff\t# LATIN SMALL LIGATURE FF\nFB01\tfi\t# LATIN SMALL LIGATURE FI\nFB02\tfl\t# LATIN SMALL LIGATURE FL\nFB03\tffi\t# LATIN SMALL LIGATURE FFI\nFB04\tffl\t# LATIN SMALL LIGATURE FFL\nFB05\tſt\t# LATIN SMALL LIGATURE LONG S T\nFB06\tst\t# LATIN SMALL LIGATURE ST\nFB13\tմն\t# ARMENIAN SMALL LIGATURE MEN NOW\nFB14\tմե\t# ARMENIAN SMALL LIGATURE MEN ECH\nFB15\tմի\t# ARMENIAN SMALL LIGATURE MEN INI\nFB16\tվն\t# ARMENIAN SMALL LIGATURE VEW NOW\nFB17\tմխ\t# ARMENIAN SMALL LIGATURE MEN XEH\nFB20\tע\t# HEBREW LETTER ALTERNATIVE AYIN\nFB21\tא\t# HEBREW LETTER WIDE ALEF\nFB22\tד\t# HEBREW LETTER WIDE DALET\nFB23\tה\t# HEBREW LETTER WIDE HE\nFB24\tכ\t# HEBREW LETTER WIDE KAF\nFB25\tל\t# HEBREW LETTER WIDE LAMED\nFB26\tם\t# HEBREW LETTER WIDE FINAL MEM\nFB27\tר\t# HEBREW LETTER WIDE RESH\nFB28\tת\t# HEBREW LETTER WIDE TAV\nFB29\t+\t# HEBREW LETTER ALTERNATIVE PLUS SIGN\nFB4F\tאל\t# HEBREW LIGATURE ALEF LAMED\nFE49\t‾\t# DASHED OVERLINE\nFE4A\t‾\t# CENTRELINE OVERLINE\nFE4B\t‾\t# WAVY OVERLINE\nFE4C\t‾\t# DOUBLE WAVY OVERLINE\nFE4D\t_\t# DASHED LOW LINE\nFE4E\t_\t# CENTRELINE LOW LINE\nFE4F\t_\t# WAVY LOW LINE\nFE50\t,\t# SMALL COMMA\nFE51\t、\t# SMALL IDEOGRAPHIC COMMA\nFE52\t.\t# SMALL FULL STOP\nFE54\t;\t# SMALL SEMICOLON\nFE55\t:\t# SMALL COLON\nFE56\t?\t# SMALL QUESTION MARK\nFE57\t!\t# SMALL EXCLAMATION MARK\nFE58\t—\t# SMALL EM DASH\nFE59\t(\t# SMALL LEFT PARENTHESIS\nFE5A\t)\t# SMALL RIGHT PARENTHESIS\nFE5B\t{\t# SMALL LEFT CURLY BRACKET\nFE5C\t}\t# SMALL RIGHT CURLY BRACKET\nFE5D\t〔\t# SMALL LEFT TORTOISE SHELL BRACKET\nFE5E\t〕\t# SMALL RIGHT TORTOISE SHELL BRACKET\nFE5F\t#\t# SMALL NUMBER SIGN\nFE60\t&\t# SMALL AMPERSAND\nFE61\t*\t# SMALL ASTERISK\nFE62\t+\t# SMALL PLUS SIGN\nFE63\t-\t# SMALL HYPHEN-MINUS\nFE64\t<\t# SMALL LESS-THAN SIGN\nFE65\t>\t# SMALL GREATER-THAN SIGN\nFE66\t=\t# SMALL EQUALS SIGN\nFE68\t\\\t# SMALL REVERSE SOLIDUS\nFE69\t$\t# SMALL DOLLAR SIGN\nFE6A\t%\t# SMALL PERCENT SIGN\nFE6B\t@\t# SMALL COMMERCIAL AT\nFF01\t!\t# FULLWIDTH EXCLAMATION MARK\nFF02\t\"\t# FULLWIDTH QUOTATION MARK\nFF03\t#\t# FULLWIDTH NUMBER SIGN\nFF04\t$\t# FULLWIDTH DOLLAR SIGN\nFF05\t%\t# FULLWIDTH PERCENT SIGN\nFF06\t&\t# FULLWIDTH AMPERSAND\nFF07\t'\t# FULLWIDTH APOSTROPHE\nFF08\t(\t# FULLWIDTH LEFT PARENTHESIS\nFF09\t)\t# FULLWIDTH RIGHT PARENTHESIS\nFF0A\t*\t# FULLWIDTH ASTERISK\nFF0B\t+\t# FULLWIDTH PLUS SIGN\nFF0C\t,\t# FULLWIDTH COMMA\nFF0D\t-\t# FULLWIDTH HYPHEN-MINUS\nFF0E\t.\t# FULLWIDTH FULL STOP\nFF0F\t/\t# FULLWIDTH SOLIDUS\nFF10\t0\t# FULLWIDTH DIGIT ZERO\nFF11\t1\t# FULLWIDTH DIGIT ONE\nFF12\t2\t# FULLWIDTH DIGIT TWO\nFF13\t3\t# FULLWIDTH DIGIT THREE\nFF14\t4\t# FULLWIDTH DIGIT FOUR\nFF15\t5\t# FULLWIDTH DIGIT FIVE\nFF16\t6\t# FULLWIDTH DIGIT SIX\nFF17\t7\t# FULLWIDTH DIGIT SEVEN\nFF18\t8\t# FULLWIDTH DIGIT EIGHT\nFF19\t9\t# FULLWIDTH DIGIT NINE\nFF1A\t:\t# FULLWIDTH COLON\nFF1B\t;\t# FULLWIDTH SEMICOLON\nFF1C\t<\t# FULLWIDTH LESS-THAN SIGN\nFF1D\t=\t# FULLWIDTH EQUALS SIGN\nFF1E\t>\t# FULLWIDTH GREATER-THAN SIGN\nFF1F\t?\t# FULLWIDTH QUESTION MARK\nFF20\t@\t# FULLWIDTH COMMERCIAL AT\nFF21\tA\t# FULLWIDTH LATIN CAPITAL LETTER A\nFF22\tB\t# FULLWIDTH LATIN CAPITAL LETTER B\nFF23\tC\t# FULLWIDTH LATIN CAPITAL LETTER C\nFF24\tD\t# FULLWIDTH LATIN CAPITAL LETTER D\nFF25\tE\t# FULLWIDTH LATIN CAPITAL LETTER E\nFF26\tF\t# FULLWIDTH LATIN CAPITAL LETTER F\nFF27\tG\t# FULLWIDTH LATIN CAPITAL LETTER G\nFF28\tH\t# FULLWIDTH LATIN CAPITAL LETTER H\nFF29\tI\t# FULLWIDTH LATIN CAPITAL LETTER I\nFF2A\tJ\t# FULLWIDTH LATIN CAPITAL LETTER J\nFF2B\tK\t# FULLWIDTH LATIN CAPITAL LETTER K\nFF2C\tL\t# FULLWIDTH LATIN CAPITAL LETTER L\nFF2D\tM\t# FULLWIDTH LATIN CAPITAL LETTER M\nFF2E\tN\t# FULLWIDTH LATIN CAPITAL LETTER N\nFF2F\tO\t# FULLWIDTH LATIN CAPITAL LETTER O\nFF30\tP\t# FULLWIDTH LATIN CAPITAL LETTER P\nFF31\tQ\t# FULLWIDTH LATIN CAPITAL LETTER Q\nFF32\tR\t# FULLWIDTH LATIN CAPITAL LETTER R\nFF33\tS\t# FULLWIDTH LATIN CAPITAL LETTER S\nFF34\tT\t# FULLWIDTH LATIN CAPITAL LETTER T\nFF35\tU\t# FULLWIDTH LATIN CAPITAL LETTER U\nFF36\tV\t# FULLWIDTH LATIN CAPITAL LETTER V\nFF37\tW\t# FULLWIDTH LATIN CAPITAL LETTER W\nFF38\tX\t# FULLWIDTH LATIN CAPITAL LETTER X\nFF39\tY\t# FULLWIDTH LATIN CAPITAL LETTER Y\nFF3A\tZ\t# FULLWIDTH LATIN CAPITAL LETTER Z\nFF3B\t[\t# FULLWIDTH LEFT SQUARE BRACKET\nFF3C\t\\\t# FULLWIDTH REVERSE SOLIDUS\nFF3D\t]\t# FULLWIDTH RIGHT SQUARE BRACKET\nFF3E\t^\t# FULLWIDTH CIRCUMFLEX ACCENT\nFF3F\t_\t# FULLWIDTH LOW LINE\nFF40\t`\t# FULLWIDTH GRAVE ACCENT\nFF41\ta\t# FULLWIDTH LATIN SMALL LETTER A\nFF42\tb\t# FULLWIDTH LATIN SMALL LETTER B\nFF43\tc\t# FULLWIDTH LATIN SMALL LETTER C\nFF44\td\t# FULLWIDTH LATIN SMALL LETTER D\nFF45\te\t# FULLWIDTH LATIN SMALL LETTER E\nFF46\tf\t# FULLWIDTH LATIN SMALL LETTER F\nFF47\tg\t# FULLWIDTH LATIN SMALL LETTER G\nFF48\th\t# FULLWIDTH LATIN SMALL LETTER H\nFF49\ti\t# FULLWIDTH LATIN SMALL LETTER I\nFF4A\tj\t# FULLWIDTH LATIN SMALL LETTER J\nFF4B\tk\t# FULLWIDTH LATIN SMALL LETTER K\nFF4C\tl\t# FULLWIDTH LATIN SMALL LETTER L\nFF4D\tm\t# FULLWIDTH LATIN SMALL LETTER M\nFF4E\tn\t# FULLWIDTH LATIN SMALL LETTER N\nFF4F\to\t# FULLWIDTH LATIN SMALL LETTER O\nFF50\tp\t# FULLWIDTH LATIN SMALL LETTER P\nFF51\tq\t# FULLWIDTH LATIN SMALL LETTER Q\nFF52\tr\t# FULLWIDTH LATIN SMALL LETTER R\nFF53\ts\t# FULLWIDTH LATIN SMALL LETTER S\nFF54\tt\t# FULLWIDTH LATIN SMALL LETTER T\nFF55\tu\t# FULLWIDTH LATIN SMALL LETTER U\nFF56\tv\t# FULLWIDTH LATIN SMALL LETTER V\nFF57\tw\t# FULLWIDTH LATIN SMALL LETTER W\nFF58\tx\t# FULLWIDTH LATIN SMALL LETTER X\nFF59\ty\t# FULLWIDTH LATIN SMALL LETTER Y\nFF5A\tz\t# FULLWIDTH LATIN SMALL LETTER Z\nFF5B\t{\t# FULLWIDTH LEFT CURLY BRACKET\nFF5C\t|\t# FULLWIDTH VERTICAL LINE\nFF5D\t}\t# FULLWIDTH RIGHT CURLY BRACKET\nFF5E\t~\t# FULLWIDTH TILDE\nFF5F\t⦅\t# FULLWIDTH LEFT WHITE PARENTHESIS\nFF60\t⦆\t# FULLWIDTH RIGHT WHITE PARENTHESIS\nFF61\t。\t# HALFWIDTH IDEOGRAPHIC FULL STOP\nFF62\t「\t# HALFWIDTH LEFT CORNER BRACKET\nFF63\t」\t# HALFWIDTH RIGHT CORNER BRACKET\nFF64\t、\t# HALFWIDTH IDEOGRAPHIC COMMA\nFF65\t・\t# HALFWIDTH KATAKANA MIDDLE DOT\nFF66\tヲ\t# HALFWIDTH KATAKANA LETTER WO\nFF67\tァ\t# HALFWIDTH KATAKANA LETTER SMALL A\nFF68\tィ\t# HALFWIDTH KATAKANA LETTER SMALL I\nFF69\tゥ\t# HALFWIDTH KATAKANA LETTER SMALL U\nFF6A\tェ\t# HALFWIDTH KATAKANA LETTER SMALL E\nFF6B\tォ\t# HALFWIDTH KATAKANA LETTER SMALL O\nFF6C\tャ\t# HALFWIDTH KATAKANA LETTER SMALL YA\nFF6D\tュ\t# HALFWIDTH KATAKANA LETTER SMALL YU\nFF6E\tョ\t# HALFWIDTH KATAKANA LETTER SMALL YO\nFF6F\tッ\t# HALFWIDTH KATAKANA LETTER SMALL TU\nFF70\tー\t# HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71\tア\t# HALFWIDTH KATAKANA LETTER A\nFF72\tイ\t# HALFWIDTH KATAKANA LETTER I\nFF73\tウ\t# HALFWIDTH KATAKANA LETTER U\nFF74\tエ\t# HALFWIDTH KATAKANA LETTER E\nFF75\tオ\t# HALFWIDTH KATAKANA LETTER O\nFF76\tカ\t# HALFWIDTH KATAKANA LETTER KA\nFF77\tキ\t# HALFWIDTH KATAKANA LETTER KI\nFF78\tク\t# HALFWIDTH KATAKANA LETTER KU\nFF79\tケ\t# HALFWIDTH KATAKANA LETTER KE\nFF7A\tコ\t# HALFWIDTH KATAKANA LETTER KO\nFF7B\tサ\t# HALFWIDTH KATAKANA LETTER SA\nFF7C\tシ\t# HALFWIDTH KATAKANA LETTER SI\nFF7D\tス\t# HALFWIDTH KATAKANA LETTER SU\nFF7E\tセ\t# HALFWIDTH KATAKANA LETTER SE\nFF7F\tソ\t# HALFWIDTH KATAKANA LETTER SO\nFF80\tタ\t# HALFWIDTH KATAKANA LETTER TA\nFF81\tチ\t# HALFWIDTH KATAKANA LETTER TI\nFF82\tツ\t# HALFWIDTH KATAKANA LETTER TU\nFF83\tテ\t# HALFWIDTH KATAKANA LETTER TE\nFF84\tト\t# HALFWIDTH KATAKANA LETTER TO\nFF85\tナ\t# HALFWIDTH KATAKANA LETTER NA\nFF86\tニ\t# HALFWIDTH KATAKANA LETTER NI\nFF87\tヌ\t# HALFWIDTH KATAKANA LETTER NU\nFF88\tネ\t# HALFWIDTH KATAKANA LETTER NE\nFF89\tノ\t# HALFWIDTH KATAKANA LETTER NO\nFF8A\tハ\t# HALFWIDTH KATAKANA LETTER HA\nFF8B\tヒ\t# HALFWIDTH KATAKANA LETTER HI\nFF8C\tフ\t# HALFWIDTH KATAKANA LETTER HU\nFF8D\tヘ\t# HALFWIDTH KATAKANA LETTER HE\nFF8E\tホ\t# HALFWIDTH KATAKANA LETTER HO\nFF8F\tマ\t# HALFWIDTH KATAKANA LETTER MA\nFF90\tミ\t# HALFWIDTH KATAKANA LETTER MI\nFF91\tム\t# HALFWIDTH KATAKANA LETTER MU\nFF92\tメ\t# HALFWIDTH KATAKANA LETTER ME\nFF93\tモ\t# HALFWIDTH KATAKANA LETTER MO\nFF94\tヤ\t# HALFWIDTH KATAKANA LETTER YA\nFF95\tユ\t# HALFWIDTH KATAKANA LETTER YU\nFF96\tヨ\t# HALFWIDTH KATAKANA LETTER YO\nFF97\tラ\t# HALFWIDTH KATAKANA LETTER RA\nFF98\tリ\t# HALFWIDTH KATAKANA LETTER RI\nFF99\tル\t# HALFWIDTH KATAKANA LETTER RU\nFF9A\tレ\t# HALFWIDTH KATAKANA LETTER RE\nFF9B\tロ\t# HALFWIDTH KATAKANA LETTER RO\nFF9C\tワ\t# HALFWIDTH KATAKANA LETTER WA\nFF9D\tン\t# HALFWIDTH KATAKANA LETTER N\nFF9E\t゙\t# HALFWIDTH KATAKANA VOICED SOUND MARK\nFF9F\t゚\t# HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0\tㅤ\t# HALFWIDTH HANGUL FILLER\nFFA1\tㄱ\t# HALFWIDTH HANGUL LETTER KIYEOK\nFFA2\tㄲ\t# HALFWIDTH HANGUL LETTER SSANGKIYEOK\nFFA3\tㄳ\t# HALFWIDTH HANGUL LETTER KIYEOK-SIOS\nFFA4\tㄴ\t# HALFWIDTH HANGUL LETTER NIEUN\nFFA5\tㄵ\t# HALFWIDTH HANGUL LETTER NIEUN-CIEUC\nFFA6\tㄶ\t# HALFWIDTH HANGUL LETTER NIEUN-HIEUH\nFFA7\tㄷ\t# HALFWIDTH HANGUL LETTER TIKEUT\nFFA8\tㄸ\t# HALFWIDTH HANGUL LETTER SSANGTIKEUT\nFFA9\tㄹ\t# HALFWIDTH HANGUL LETTER RIEUL\nFFAA\tㄺ\t# HALFWIDTH HANGUL LETTER RIEUL-KIYEOK\nFFAB\tㄻ\t# HALFWIDTH HANGUL LETTER RIEUL-MIEUM\nFFAC\tㄼ\t# HALFWIDTH HANGUL LETTER RIEUL-PIEUP\nFFAD\tㄽ\t# HALFWIDTH HANGUL LETTER RIEUL-SIOS\nFFAE\tㄾ\t# HALFWIDTH HANGUL LETTER RIEUL-THIEUTH\nFFAF\tㄿ\t# HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH\nFFB0\tㅀ\t# HALFWIDTH HANGUL LETTER RIEUL-HIEUH\nFFB1\tㅁ\t# HALFWIDTH HANGUL LETTER MIEUM\nFFB2\tㅂ\t# HALFWIDTH HANGUL LETTER PIEUP\nFFB3\tㅃ\t# HALFWIDTH HANGUL LETTER SSANGPIEUP\nFFB4\tㅄ\t# HALFWIDTH HANGUL LETTER PIEUP-SIOS\nFFB5\tㅅ\t# HALFWIDTH HANGUL LETTER SIOS\nFFB6\tㅆ\t# HALFWIDTH HANGUL LETTER SSANGSIOS\nFFB7\tㅇ\t# HALFWIDTH HANGUL LETTER IEUNG\nFFB8\tㅈ\t# HALFWIDTH HANGUL LETTER CIEUC\nFFB9\tㅉ\t# HALFWIDTH HANGUL LETTER SSANGCIEUC\nFFBA\tㅊ\t# HALFWIDTH HANGUL LETTER CHIEUCH\nFFBB\tㅋ\t# HALFWIDTH HANGUL LETTER KHIEUKH\nFFBC\tㅌ\t# HALFWIDTH HANGUL LETTER THIEUTH\nFFBD\tㅍ\t# HALFWIDTH HANGUL LETTER PHIEUPH\nFFBE\tㅎ\t# HALFWIDTH HANGUL LETTER HIEUH\nFFC2\tㅏ\t# HALFWIDTH HANGUL LETTER A\nFFC3\tㅐ\t# HALFWIDTH HANGUL LETTER AE\nFFC4\tㅑ\t# HALFWIDTH HANGUL LETTER YA\nFFC5\tㅒ\t# HALFWIDTH HANGUL LETTER YAE\nFFC6\tㅓ\t# HALFWIDTH HANGUL LETTER EO\nFFC7\tㅔ\t# HALFWIDTH HANGUL LETTER E\nFFCA\tㅕ\t# HALFWIDTH HANGUL LETTER YEO\nFFCB\tㅖ\t# HALFWIDTH HANGUL LETTER YE\nFFCC\tㅗ\t# HALFWIDTH HANGUL LETTER O\nFFCD\tㅘ\t# HALFWIDTH HANGUL LETTER WA\nFFCE\tㅙ\t# HALFWIDTH HANGUL LETTER WAE\nFFCF\tㅚ\t# HALFWIDTH HANGUL LETTER OE\nFFD2\tㅛ\t# HALFWIDTH HANGUL LETTER YO\nFFD3\tㅜ\t# HALFWIDTH HANGUL LETTER U\nFFD4\tㅝ\t# HALFWIDTH HANGUL LETTER WEO\nFFD5\tㅞ\t# HALFWIDTH HANGUL LETTER WE\nFFD6\tㅟ\t# HALFWIDTH HANGUL LETTER WI\nFFD7\tㅠ\t# HALFWIDTH HANGUL LETTER YU\nFFDA\tㅡ\t# HALFWIDTH HANGUL LETTER EU\nFFDB\tㅢ\t# HALFWIDTH HANGUL LETTER YI\nFFDC\tㅣ\t# HALFWIDTH HANGUL LETTER I\nFFE0\t¢\t# FULLWIDTH CENT SIGN\nFFE1\t£\t# FULLWIDTH POUND SIGN\nFFE2\t¬\t# FULLWIDTH NOT SIGN\nFFE3\t¯\t# FULLWIDTH MACRON\nFFE4\t¦\t# FULLWIDTH BROKEN BAR\nFFE5\t¥\t# FULLWIDTH YEN SIGN\nFFE6\t₩\t# FULLWIDTH WON SIGN\nFFE8\t│\t# HALFWIDTH FORMS LIGHT VERTICAL\nFFE9\t←\t# HALFWIDTH LEFTWARDS ARROW\nFFEA\t↑\t# HALFWIDTH UPWARDS ARROW\nFFEB\t→\t# HALFWIDTH RIGHTWARDS ARROW\nFFEC\t↓\t# HALFWIDTH DOWNWARDS ARROW\nFFED\t■\t# HALFWIDTH BLACK SQUARE\nFFEE\t○\t# HALFWIDTH WHITE CIRCLE\n1D400\tA\t# MATHEMATICAL BOLD CAPITAL A\n1D401\tB\t# MATHEMATICAL BOLD CAPITAL B\n1D402\tC\t# MATHEMATICAL BOLD CAPITAL C\n1D403\tD\t# MATHEMATICAL BOLD CAPITAL D\n1D404\tE\t# MATHEMATICAL BOLD CAPITAL E\n1D405\tF\t# MATHEMATICAL BOLD CAPITAL F\n1D406\tG\t# MATHEMATICAL BOLD CAPITAL G\n1D407\tH\t# MATHEMATICAL BOLD CAPITAL H\n1D408\tI\t# MATHEMATICAL BOLD CAPITAL I\n1D409\tJ\t# MATHEMATICAL BOLD CAPITAL J\n1D40A\tK\t# MATHEMATICAL BOLD CAPITAL K\n1D40B\tL\t# MATHEMATICAL BOLD CAPITAL L\n1D40C\tM\t# MATHEMATICAL BOLD CAPITAL M\n1D40D\tN\t# MATHEMATICAL BOLD CAPITAL N\n1D40E\tO\t# MATHEMATICAL BOLD CAPITAL O\n1D40F\tP\t# MATHEMATICAL BOLD CAPITAL P\n1D410\tQ\t# MATHEMATICAL BOLD CAPITAL Q\n1D411\tR\t# MATHEMATICAL BOLD CAPITAL R\n1D412\tS\t# MATHEMATICAL BOLD CAPITAL S\n1D413\tT\t# MATHEMATICAL BOLD CAPITAL T\n1D414\tU\t# MATHEMATICAL BOLD CAPITAL U\n1D415\tV\t# MATHEMATICAL BOLD CAPITAL V\n1D416\tW\t# MATHEMATICAL BOLD CAPITAL W\n1D417\tX\t# MATHEMATICAL BOLD CAPITAL X\n1D418\tY\t# MATHEMATICAL BOLD CAPITAL Y\n1D419\tZ\t# MATHEMATICAL BOLD CAPITAL Z\n1D41A\ta\t# MATHEMATICAL BOLD SMALL A\n1D41B\tb\t# MATHEMATICAL BOLD SMALL B\n1D41C\tc\t# MATHEMATICAL BOLD SMALL C\n1D41D\td\t# MATHEMATICAL BOLD SMALL D\n1D41E\te\t# MATHEMATICAL BOLD SMALL E\n1D41F\tf\t# MATHEMATICAL BOLD SMALL F\n1D420\tg\t# MATHEMATICAL BOLD SMALL G\n1D421\th\t# MATHEMATICAL BOLD SMALL H\n1D422\ti\t# MATHEMATICAL BOLD SMALL I\n1D423\tj\t# MATHEMATICAL BOLD SMALL J\n1D424\tk\t# MATHEMATICAL BOLD SMALL K\n1D425\tl\t# MATHEMATICAL BOLD SMALL L\n1D426\tm\t# MATHEMATICAL BOLD SMALL M\n1D427\tn\t# MATHEMATICAL BOLD SMALL N\n1D428\to\t# MATHEMATICAL BOLD SMALL O\n1D429\tp\t# MATHEMATICAL BOLD SMALL P\n1D42A\tq\t# MATHEMATICAL BOLD SMALL Q\n1D42B\tr\t# MATHEMATICAL BOLD SMALL R\n1D42C\ts\t# MATHEMATICAL BOLD SMALL S\n1D42D\tt\t# MATHEMATICAL BOLD SMALL T\n1D42E\tu\t# MATHEMATICAL BOLD SMALL U\n1D42F\tv\t# MATHEMATICAL BOLD SMALL V\n1D430\tw\t# MATHEMATICAL BOLD SMALL W\n1D431\tx\t# MATHEMATICAL BOLD SMALL X\n1D432\ty\t# MATHEMATICAL BOLD SMALL Y\n1D433\tz\t# MATHEMATICAL BOLD SMALL Z\n1D434\tA\t# MATHEMATICAL ITALIC CAPITAL A\n1D435\tB\t# MATHEMATICAL ITALIC CAPITAL B\n1D436\tC\t# MATHEMATICAL ITALIC CAPITAL C\n1D437\tD\t# MATHEMATICAL ITALIC CAPITAL D\n1D438\tE\t# MATHEMATICAL ITALIC CAPITAL E\n1D439\tF\t# MATHEMATICAL ITALIC CAPITAL F\n1D43A\tG\t# MATHEMATICAL ITALIC CAPITAL G\n1D43B\tH\t# MATHEMATICAL ITALIC CAPITAL H\n1D43C\tI\t# MATHEMATICAL ITALIC CAPITAL I\n1D43D\tJ\t# MATHEMATICAL ITALIC CAPITAL J\n1D43E\tK\t# MATHEMATICAL ITALIC CAPITAL K\n1D43F\tL\t# MATHEMATICAL ITALIC CAPITAL L\n1D440\tM\t# MATHEMATICAL ITALIC CAPITAL M\n1D441\tN\t# MATHEMATICAL ITALIC CAPITAL N\n1D442\tO\t# MATHEMATICAL ITALIC CAPITAL O\n1D443\tP\t# MATHEMATICAL ITALIC CAPITAL P\n1D444\tQ\t# MATHEMATICAL ITALIC CAPITAL Q\n1D445\tR\t# MATHEMATICAL ITALIC CAPITAL R\n1D446\tS\t# MATHEMATICAL ITALIC CAPITAL S\n1D447\tT\t# MATHEMATICAL ITALIC CAPITAL T\n1D448\tU\t# MATHEMATICAL ITALIC CAPITAL U\n1D449\tV\t# MATHEMATICAL ITALIC CAPITAL V\n1D44A\tW\t# MATHEMATICAL ITALIC CAPITAL W\n1D44B\tX\t# MATHEMATICAL ITALIC CAPITAL X\n1D44C\tY\t# MATHEMATICAL ITALIC CAPITAL Y\n1D44D\tZ\t# MATHEMATICAL ITALIC CAPITAL Z\n1D44E\ta\t# MATHEMATICAL ITALIC SMALL A\n1D44F\tb\t# MATHEMATICAL ITALIC SMALL B\n1D450\tc\t# MATHEMATICAL ITALIC SMALL C\n1D451\td\t# MATHEMATICAL ITALIC SMALL D\n1D452\te\t# MATHEMATICAL ITALIC SMALL E\n1D453\tf\t# MATHEMATICAL ITALIC SMALL F\n1D454\tg\t# MATHEMATICAL ITALIC SMALL G\n1D456\ti\t# MATHEMATICAL ITALIC SMALL I\n1D457\tj\t# MATHEMATICAL ITALIC SMALL J\n1D458\tk\t# MATHEMATICAL ITALIC SMALL K\n1D459\tl\t# MATHEMATICAL ITALIC SMALL L\n1D45A\tm\t# MATHEMATICAL ITALIC SMALL M\n1D45B\tn\t# MATHEMATICAL ITALIC SMALL N\n1D45C\to\t# MATHEMATICAL ITALIC SMALL O\n1D45D\tp\t# MATHEMATICAL ITALIC SMALL P\n1D45E\tq\t# MATHEMATICAL ITALIC SMALL Q\n1D45F\tr\t# MATHEMATICAL ITALIC SMALL R\n1D460\ts\t# MATHEMATICAL ITALIC SMALL S\n1D461\tt\t# MATHEMATICAL ITALIC SMALL T\n1D462\tu\t# MATHEMATICAL ITALIC SMALL U\n1D463\tv\t# MATHEMATICAL ITALIC SMALL V\n1D464\tw\t# MATHEMATICAL ITALIC SMALL W\n1D465\tx\t# MATHEMATICAL ITALIC SMALL X\n1D466\ty\t# MATHEMATICAL ITALIC SMALL Y\n1D467\tz\t# MATHEMATICAL ITALIC SMALL Z\n1D468\tA\t# MATHEMATICAL BOLD ITALIC CAPITAL A\n1D469\tB\t# MATHEMATICAL BOLD ITALIC CAPITAL B\n1D46A\tC\t# MATHEMATICAL BOLD ITALIC CAPITAL C\n1D46B\tD\t# MATHEMATICAL BOLD ITALIC CAPITAL D\n1D46C\tE\t# MATHEMATICAL BOLD ITALIC CAPITAL E\n1D46D\tF\t# MATHEMATICAL BOLD ITALIC CAPITAL F\n1D46E\tG\t# MATHEMATICAL BOLD ITALIC CAPITAL G\n1D46F\tH\t# MATHEMATICAL BOLD ITALIC CAPITAL H\n1D470\tI\t# MATHEMATICAL BOLD ITALIC CAPITAL I\n1D471\tJ\t# MATHEMATICAL BOLD ITALIC CAPITAL J\n1D472\tK\t# MATHEMATICAL BOLD ITALIC CAPITAL K\n1D473\tL\t# MATHEMATICAL BOLD ITALIC CAPITAL L\n1D474\tM\t# MATHEMATICAL BOLD ITALIC CAPITAL M\n1D475\tN\t# MATHEMATICAL BOLD ITALIC CAPITAL N\n1D476\tO\t# MATHEMATICAL BOLD ITALIC CAPITAL O\n1D477\tP\t# MATHEMATICAL BOLD ITALIC CAPITAL P\n1D478\tQ\t# MATHEMATICAL BOLD ITALIC CAPITAL Q\n1D479\tR\t# MATHEMATICAL BOLD ITALIC CAPITAL R\n1D47A\tS\t# MATHEMATICAL BOLD ITALIC CAPITAL S\n1D47B\tT\t# MATHEMATICAL BOLD ITALIC CAPITAL T\n1D47C\tU\t# MATHEMATICAL BOLD ITALIC CAPITAL U\n1D47D\tV\t# MATHEMATICAL BOLD ITALIC CAPITAL V\n1D47E\tW\t# MATHEMATICAL BOLD ITALIC CAPITAL W\n1D47F\tX\t# MATHEMATICAL BOLD ITALIC CAPITAL X\n1D480\tY\t# MATHEMATICAL BOLD ITALIC CAPITAL Y\n1D481\tZ\t# MATHEMATICAL BOLD ITALIC CAPITAL Z\n1D482\ta\t# MATHEMATICAL BOLD ITALIC SMALL A\n1D483\tb\t# MATHEMATICAL BOLD ITALIC SMALL B\n1D484\tc\t# MATHEMATICAL BOLD ITALIC SMALL C\n1D485\td\t# MATHEMATICAL BOLD ITALIC SMALL D\n1D486\te\t# MATHEMATICAL BOLD ITALIC SMALL E\n1D487\tf\t# MATHEMATICAL BOLD ITALIC SMALL F\n1D488\tg\t# MATHEMATICAL BOLD ITALIC SMALL G\n1D489\th\t# MATHEMATICAL BOLD ITALIC SMALL H\n1D48A\ti\t# MATHEMATICAL BOLD ITALIC SMALL I\n1D48B\tj\t# MATHEMATICAL BOLD ITALIC SMALL J\n1D48C\tk\t# MATHEMATICAL BOLD ITALIC SMALL K\n1D48D\tl\t# MATHEMATICAL BOLD ITALIC SMALL L\n1D48E\tm\t# MATHEMATICAL BOLD ITALIC SMALL M\n1D48F\tn\t# MATHEMATICAL BOLD ITALIC SMALL N\n1D490\to\t# MATHEMATICAL BOLD ITALIC SMALL O\n1D491\tp\t# MATHEMATICAL BOLD ITALIC SMALL P\n1D492\tq\t# MATHEMATICAL BOLD ITALIC SMALL Q\n1D493\tr\t# MATHEMATICAL BOLD ITALIC SMALL R\n1D494\ts\t# MATHEMATICAL BOLD ITALIC SMALL S\n1D495\tt\t# MATHEMATICAL BOLD ITALIC SMALL T\n1D496\tu\t# MATHEMATICAL BOLD ITALIC SMALL U\n1D497\tv\t# MATHEMATICAL BOLD ITALIC SMALL V\n1D498\tw\t# MATHEMATICAL BOLD ITALIC SMALL W\n1D499\tx\t# MATHEMATICAL BOLD ITALIC SMALL X\n1D49A\ty\t# MATHEMATICAL BOLD ITALIC SMALL Y\n1D49B\tz\t# MATHEMATICAL BOLD ITALIC SMALL Z\n1D49C\tA\t# MATHEMATICAL SCRIPT CAPITAL A\n1D49E\tC\t# MATHEMATICAL SCRIPT CAPITAL C\n1D49F\tD\t# MATHEMATICAL SCRIPT CAPITAL D\n1D4A2\tG\t# MATHEMATICAL SCRIPT CAPITAL G\n1D4A5\tJ\t# MATHEMATICAL SCRIPT CAPITAL J\n1D4A6\tK\t# MATHEMATICAL SCRIPT CAPITAL K\n1D4A9\tN\t# MATHEMATICAL SCRIPT CAPITAL N\n1D4AA\tO\t# MATHEMATICAL SCRIPT CAPITAL O\n1D4AB\tP\t# MATHEMATICAL SCRIPT CAPITAL P\n1D4AC\tQ\t# MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE\tS\t# MATHEMATICAL SCRIPT CAPITAL S\n1D4AF\tT\t# MATHEMATICAL SCRIPT CAPITAL T\n1D4B0\tU\t# MATHEMATICAL SCRIPT CAPITAL U\n1D4B1\tV\t# MATHEMATICAL SCRIPT CAPITAL V\n1D4B2\tW\t# MATHEMATICAL SCRIPT CAPITAL W\n1D4B3\tX\t# MATHEMATICAL SCRIPT CAPITAL X\n1D4B4\tY\t# MATHEMATICAL SCRIPT CAPITAL Y\n1D4B5\tZ\t# MATHEMATICAL SCRIPT CAPITAL Z\n1D4B6\ta\t# MATHEMATICAL SCRIPT SMALL A\n1D4B7\tb\t# MATHEMATICAL SCRIPT SMALL B\n1D4B8\tc\t# MATHEMATICAL SCRIPT SMALL C\n1D4B9\td\t# MATHEMATICAL SCRIPT SMALL D\n1D4BB\tf\t# MATHEMATICAL SCRIPT SMALL F\n1D4BD\th\t# MATHEMATICAL SCRIPT SMALL H\n1D4BE\ti\t# MATHEMATICAL SCRIPT SMALL I\n1D4BF\tj\t# MATHEMATICAL SCRIPT SMALL J\n1D4C0\tk\t# MATHEMATICAL SCRIPT SMALL K\n1D4C1\tl\t# MATHEMATICAL SCRIPT SMALL L\n1D4C2\tm\t# MATHEMATICAL SCRIPT SMALL M\n1D4C3\tn\t# MATHEMATICAL SCRIPT SMALL N\n1D4C5\tp\t# MATHEMATICAL SCRIPT SMALL P\n1D4C6\tq\t# MATHEMATICAL SCRIPT SMALL Q\n1D4C7\tr\t# MATHEMATICAL SCRIPT SMALL R\n1D4C8\ts\t# MATHEMATICAL SCRIPT SMALL S\n1D4C9\tt\t# MATHEMATICAL SCRIPT SMALL T\n1D4CA\tu\t# MATHEMATICAL SCRIPT SMALL U\n1D4CB\tv\t# MATHEMATICAL SCRIPT SMALL V\n1D4CC\tw\t# MATHEMATICAL SCRIPT SMALL W\n1D4CD\tx\t# MATHEMATICAL SCRIPT SMALL X\n1D4CE\ty\t# MATHEMATICAL SCRIPT SMALL Y\n1D4CF\tz\t# MATHEMATICAL SCRIPT SMALL Z\n1D4D0\tA\t# MATHEMATICAL BOLD SCRIPT CAPITAL A\n1D4D1\tB\t# MATHEMATICAL BOLD SCRIPT CAPITAL B\n1D4D2\tC\t# MATHEMATICAL BOLD SCRIPT CAPITAL C\n1D4D3\tD\t# MATHEMATICAL BOLD SCRIPT CAPITAL D\n1D4D4\tE\t# MATHEMATICAL BOLD SCRIPT CAPITAL E\n1D4D5\tF\t# MATHEMATICAL BOLD SCRIPT CAPITAL F\n1D4D6\tG\t# MATHEMATICAL BOLD SCRIPT CAPITAL G\n1D4D7\tH\t# MATHEMATICAL BOLD SCRIPT CAPITAL H\n1D4D8\tI\t# MATHEMATICAL BOLD SCRIPT CAPITAL I\n1D4D9\tJ\t# MATHEMATICAL BOLD SCRIPT CAPITAL J\n1D4DA\tK\t# MATHEMATICAL BOLD SCRIPT CAPITAL K\n1D4DB\tL\t# MATHEMATICAL BOLD SCRIPT CAPITAL L\n1D4DC\tM\t# MATHEMATICAL BOLD SCRIPT CAPITAL M\n1D4DD\tN\t# MATHEMATICAL BOLD SCRIPT CAPITAL N\n1D4DE\tO\t# MATHEMATICAL BOLD SCRIPT CAPITAL O\n1D4DF\tP\t# MATHEMATICAL BOLD SCRIPT CAPITAL P\n1D4E0\tQ\t# MATHEMATICAL BOLD SCRIPT CAPITAL Q\n1D4E1\tR\t# MATHEMATICAL BOLD SCRIPT CAPITAL R\n1D4E2\tS\t# MATHEMATICAL BOLD SCRIPT CAPITAL S\n1D4E3\tT\t# MATHEMATICAL BOLD SCRIPT CAPITAL T\n1D4E4\tU\t# MATHEMATICAL BOLD SCRIPT CAPITAL U\n1D4E5\tV\t# MATHEMATICAL BOLD SCRIPT CAPITAL V\n1D4E6\tW\t# MATHEMATICAL BOLD SCRIPT CAPITAL W\n1D4E7\tX\t# MATHEMATICAL BOLD SCRIPT CAPITAL X\n1D4E8\tY\t# MATHEMATICAL BOLD SCRIPT CAPITAL Y\n1D4E9\tZ\t# MATHEMATICAL BOLD SCRIPT CAPITAL Z\n1D4EA\ta\t# MATHEMATICAL BOLD SCRIPT SMALL A\n1D4EB\tb\t# MATHEMATICAL BOLD SCRIPT SMALL B\n1D4EC\tc\t# MATHEMATICAL BOLD SCRIPT SMALL C\n1D4ED\td\t# MATHEMATICAL BOLD SCRIPT SMALL D\n1D4EE\te\t# MATHEMATICAL BOLD SCRIPT SMALL E\n1D4EF\tf\t# MATHEMATICAL BOLD SCRIPT SMALL F\n1D4F0\tg\t# MATHEMATICAL BOLD SCRIPT SMALL G\n1D4F1\th\t# MATHEMATICAL BOLD SCRIPT SMALL H\n1D4F2\ti\t# MATHEMATICAL BOLD SCRIPT SMALL I\n1D4F3\tj\t# MATHEMATICAL BOLD SCRIPT SMALL J\n1D4F4\tk\t# MATHEMATICAL BOLD SCRIPT SMALL K\n1D4F5\tl\t# MATHEMATICAL BOLD SCRIPT SMALL L\n1D4F6\tm\t# MATHEMATICAL BOLD SCRIPT SMALL M\n1D4F7\tn\t# MATHEMATICAL BOLD SCRIPT SMALL N\n1D4F8\to\t# MATHEMATICAL BOLD SCRIPT SMALL O\n1D4F9\tp\t# MATHEMATICAL BOLD SCRIPT SMALL P\n1D4FA\tq\t# MATHEMATICAL BOLD SCRIPT SMALL Q\n1D4FB\tr\t# MATHEMATICAL BOLD SCRIPT SMALL R\n1D4FC\ts\t# MATHEMATICAL BOLD SCRIPT SMALL S\n1D4FD\tt\t# MATHEMATICAL BOLD SCRIPT SMALL T\n1D4FE\tu\t# MATHEMATICAL BOLD SCRIPT SMALL U\n1D4FF\tv\t# MATHEMATICAL BOLD SCRIPT SMALL V\n1D500\tw\t# MATHEMATICAL BOLD SCRIPT SMALL W\n1D501\tx\t# MATHEMATICAL BOLD SCRIPT SMALL X\n1D502\ty\t# MATHEMATICAL BOLD SCRIPT SMALL Y\n1D503\tz\t# MATHEMATICAL BOLD SCRIPT SMALL Z\n1D504\tA\t# MATHEMATICAL FRAKTUR CAPITAL A\n1D505\tB\t# MATHEMATICAL FRAKTUR CAPITAL B\n1D507\tD\t# MATHEMATICAL FRAKTUR CAPITAL D\n1D508\tE\t# MATHEMATICAL FRAKTUR CAPITAL E\n1D509\tF\t# MATHEMATICAL FRAKTUR CAPITAL F\n1D50A\tG\t# MATHEMATICAL FRAKTUR CAPITAL G\n1D50D\tJ\t# MATHEMATICAL FRAKTUR CAPITAL J\n1D50E\tK\t# MATHEMATICAL FRAKTUR CAPITAL K\n1D50F\tL\t# MATHEMATICAL FRAKTUR CAPITAL L\n1D510\tM\t# MATHEMATICAL FRAKTUR CAPITAL M\n1D511\tN\t# MATHEMATICAL FRAKTUR CAPITAL N\n1D512\tO\t# MATHEMATICAL FRAKTUR CAPITAL O\n1D513\tP\t# MATHEMATICAL FRAKTUR CAPITAL P\n1D514\tQ\t# MATHEMATICAL FRAKTUR CAPITAL Q\n1D516\tS\t# MATHEMATICAL FRAKTUR CAPITAL S\n1D517\tT\t# MATHEMATICAL FRAKTUR CAPITAL T\n1D518\tU\t# MATHEMATICAL FRAKTUR CAPITAL U\n1D519\tV\t# MATHEMATICAL FRAKTUR CAPITAL V\n1D51A\tW\t# MATHEMATICAL FRAKTUR CAPITAL W\n1D51B\tX\t# MATHEMATICAL FRAKTUR CAPITAL X\n1D51C\tY\t# MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E\ta\t# MATHEMATICAL FRAKTUR SMALL A\n1D51F\tb\t# MATHEMATICAL FRAKTUR SMALL B\n1D520\tc\t# MATHEMATICAL FRAKTUR SMALL C\n1D521\td\t# MATHEMATICAL FRAKTUR SMALL D\n1D522\te\t# MATHEMATICAL FRAKTUR SMALL E\n1D523\tf\t# MATHEMATICAL FRAKTUR SMALL F\n1D524\tg\t# MATHEMATICAL FRAKTUR SMALL G\n1D525\th\t# MATHEMATICAL FRAKTUR SMALL H\n1D526\ti\t# MATHEMATICAL FRAKTUR SMALL I\n1D527\tj\t# MATHEMATICAL FRAKTUR SMALL J\n1D528\tk\t# MATHEMATICAL FRAKTUR SMALL K\n1D529\tl\t# MATHEMATICAL FRAKTUR SMALL L\n1D52A\tm\t# MATHEMATICAL FRAKTUR SMALL M\n1D52B\tn\t# MATHEMATICAL FRAKTUR SMALL N\n1D52C\to\t# MATHEMATICAL FRAKTUR SMALL O\n1D52D\tp\t# MATHEMATICAL FRAKTUR SMALL P\n1D52E\tq\t# MATHEMATICAL FRAKTUR SMALL Q\n1D52F\tr\t# MATHEMATICAL FRAKTUR SMALL R\n1D530\ts\t# MATHEMATICAL FRAKTUR SMALL S\n1D531\tt\t# MATHEMATICAL FRAKTUR SMALL T\n1D532\tu\t# MATHEMATICAL FRAKTUR SMALL U\n1D533\tv\t# MATHEMATICAL FRAKTUR SMALL V\n1D534\tw\t# MATHEMATICAL FRAKTUR SMALL W\n1D535\tx\t# MATHEMATICAL FRAKTUR SMALL X\n1D536\ty\t# MATHEMATICAL FRAKTUR SMALL Y\n1D537\tz\t# MATHEMATICAL FRAKTUR SMALL Z\n1D538\tA\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL A\n1D539\tB\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B\tD\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL D\n1D53C\tE\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL E\n1D53D\tF\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL F\n1D53E\tG\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540\tI\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL I\n1D541\tJ\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL J\n1D542\tK\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL K\n1D543\tL\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL L\n1D544\tM\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546\tO\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A\tS\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL S\n1D54B\tT\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL T\n1D54C\tU\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL U\n1D54D\tV\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL V\n1D54E\tW\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL W\n1D54F\tX\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL X\n1D550\tY\t# MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552\ta\t# MATHEMATICAL DOUBLE-STRUCK SMALL A\n1D553\tb\t# MATHEMATICAL DOUBLE-STRUCK SMALL B\n1D554\tc\t# MATHEMATICAL DOUBLE-STRUCK SMALL C\n1D555\td\t# MATHEMATICAL DOUBLE-STRUCK SMALL D\n1D556\te\t# MATHEMATICAL DOUBLE-STRUCK SMALL E\n1D557\tf\t# MATHEMATICAL DOUBLE-STRUCK SMALL F\n1D558\tg\t# MATHEMATICAL DOUBLE-STRUCK SMALL G\n1D559\th\t# MATHEMATICAL DOUBLE-STRUCK SMALL H\n1D55A\ti\t# MATHEMATICAL DOUBLE-STRUCK SMALL I\n1D55B\tj\t# MATHEMATICAL DOUBLE-STRUCK SMALL J\n1D55C\tk\t# MATHEMATICAL DOUBLE-STRUCK SMALL K\n1D55D\tl\t# MATHEMATICAL DOUBLE-STRUCK SMALL L\n1D55E\tm\t# MATHEMATICAL DOUBLE-STRUCK SMALL M\n1D55F\tn\t# MATHEMATICAL DOUBLE-STRUCK SMALL N\n1D560\to\t# MATHEMATICAL DOUBLE-STRUCK SMALL O\n1D561\tp\t# MATHEMATICAL DOUBLE-STRUCK SMALL P\n1D562\tq\t# MATHEMATICAL DOUBLE-STRUCK SMALL Q\n1D563\tr\t# MATHEMATICAL DOUBLE-STRUCK SMALL R\n1D564\ts\t# MATHEMATICAL DOUBLE-STRUCK SMALL S\n1D565\tt\t# MATHEMATICAL DOUBLE-STRUCK SMALL T\n1D566\tu\t# MATHEMATICAL DOUBLE-STRUCK SMALL U\n1D567\tv\t# MATHEMATICAL DOUBLE-STRUCK SMALL V\n1D568\tw\t# MATHEMATICAL DOUBLE-STRUCK SMALL W\n1D569\tx\t# MATHEMATICAL DOUBLE-STRUCK SMALL X\n1D56A\ty\t# MATHEMATICAL DOUBLE-STRUCK SMALL Y\n1D56B\tz\t# MATHEMATICAL DOUBLE-STRUCK SMALL Z\n1D56C\tA\t# MATHEMATICAL BOLD FRAKTUR CAPITAL A\n1D56D\tB\t# MATHEMATICAL BOLD FRAKTUR CAPITAL B\n1D56E\tC\t# MATHEMATICAL BOLD FRAKTUR CAPITAL C\n1D56F\tD\t# MATHEMATICAL BOLD FRAKTUR CAPITAL D\n1D570\tE\t# MATHEMATICAL BOLD FRAKTUR CAPITAL E\n1D571\tF\t# MATHEMATICAL BOLD FRAKTUR CAPITAL F\n1D572\tG\t# MATHEMATICAL BOLD FRAKTUR CAPITAL G\n1D573\tH\t# MATHEMATICAL BOLD FRAKTUR CAPITAL H\n1D574\tI\t# MATHEMATICAL BOLD FRAKTUR CAPITAL I\n1D575\tJ\t# MATHEMATICAL BOLD FRAKTUR CAPITAL J\n1D576\tK\t# MATHEMATICAL BOLD FRAKTUR CAPITAL K\n1D577\tL\t# MATHEMATICAL BOLD FRAKTUR CAPITAL L\n1D578\tM\t# MATHEMATICAL BOLD FRAKTUR CAPITAL M\n1D579\tN\t# MATHEMATICAL BOLD FRAKTUR CAPITAL N\n1D57A\tO\t# MATHEMATICAL BOLD FRAKTUR CAPITAL O\n1D57B\tP\t# MATHEMATICAL BOLD FRAKTUR CAPITAL P\n1D57C\tQ\t# MATHEMATICAL BOLD FRAKTUR CAPITAL Q\n1D57D\tR\t# MATHEMATICAL BOLD FRAKTUR CAPITAL R\n1D57E\tS\t# MATHEMATICAL BOLD FRAKTUR CAPITAL S\n1D57F\tT\t# MATHEMATICAL BOLD FRAKTUR CAPITAL T\n1D580\tU\t# MATHEMATICAL BOLD FRAKTUR CAPITAL U\n1D581\tV\t# MATHEMATICAL BOLD FRAKTUR CAPITAL V\n1D582\tW\t# MATHEMATICAL BOLD FRAKTUR CAPITAL W\n1D583\tX\t# MATHEMATICAL BOLD FRAKTUR CAPITAL X\n1D584\tY\t# MATHEMATICAL BOLD FRAKTUR CAPITAL Y\n1D585\tZ\t# MATHEMATICAL BOLD FRAKTUR CAPITAL Z\n1D586\ta\t# MATHEMATICAL BOLD FRAKTUR SMALL A\n1D587\tb\t# MATHEMATICAL BOLD FRAKTUR SMALL B\n1D588\tc\t# MATHEMATICAL BOLD FRAKTUR SMALL C\n1D589\td\t# MATHEMATICAL BOLD FRAKTUR SMALL D\n1D58A\te\t# MATHEMATICAL BOLD FRAKTUR SMALL E\n1D58B\tf\t# MATHEMATICAL BOLD FRAKTUR SMALL F\n1D58C\tg\t# MATHEMATICAL BOLD FRAKTUR SMALL G\n1D58D\th\t# MATHEMATICAL BOLD FRAKTUR SMALL H\n1D58E\ti\t# MATHEMATICAL BOLD FRAKTUR SMALL I\n1D58F\tj\t# MATHEMATICAL BOLD FRAKTUR SMALL J\n1D590\tk\t# MATHEMATICAL BOLD FRAKTUR SMALL K\n1D591\tl\t# MATHEMATICAL BOLD FRAKTUR SMALL L\n1D592\tm\t# MATHEMATICAL BOLD FRAKTUR SMALL M\n1D593\tn\t# MATHEMATICAL BOLD FRAKTUR SMALL N\n1D594\to\t# MATHEMATICAL BOLD FRAKTUR SMALL O\n1D595\tp\t# MATHEMATICAL BOLD FRAKTUR SMALL P\n1D596\tq\t# MATHEMATICAL BOLD FRAKTUR SMALL Q\n1D597\tr\t# MATHEMATICAL BOLD FRAKTUR SMALL R\n1D598\ts\t# MATHEMATICAL BOLD FRAKTUR SMALL S\n1D599\tt\t# MATHEMATICAL BOLD FRAKTUR SMALL T\n1D59A\tu\t# MATHEMATICAL BOLD FRAKTUR SMALL U\n1D59B\tv\t# MATHEMATICAL BOLD FRAKTUR SMALL V\n1D59C\tw\t# MATHEMATICAL BOLD FRAKTUR SMALL W\n1D59D\tx\t# MATHEMATICAL BOLD FRAKTUR SMALL X\n1D59E\ty\t# MATHEMATICAL BOLD FRAKTUR SMALL Y\n1D59F\tz\t# MATHEMATICAL BOLD FRAKTUR SMALL Z\n1D5A0\tA\t# MATHEMATICAL SANS-SERIF CAPITAL A\n1D5A1\tB\t# MATHEMATICAL SANS-SERIF CAPITAL B\n1D5A2\tC\t# MATHEMATICAL SANS-SERIF CAPITAL C\n1D5A3\tD\t# MATHEMATICAL SANS-SERIF CAPITAL D\n1D5A4\tE\t# MATHEMATICAL SANS-SERIF CAPITAL E\n1D5A5\tF\t# MATHEMATICAL SANS-SERIF CAPITAL F\n1D5A6\tG\t# MATHEMATICAL SANS-SERIF CAPITAL G\n1D5A7\tH\t# MATHEMATICAL SANS-SERIF CAPITAL H\n1D5A8\tI\t# MATHEMATICAL SANS-SERIF CAPITAL I\n1D5A9\tJ\t# MATHEMATICAL SANS-SERIF CAPITAL J\n1D5AA\tK\t# MATHEMATICAL SANS-SERIF CAPITAL K\n1D5AB\tL\t# MATHEMATICAL SANS-SERIF CAPITAL L\n1D5AC\tM\t# MATHEMATICAL SANS-SERIF CAPITAL M\n1D5AD\tN\t# MATHEMATICAL SANS-SERIF CAPITAL N\n1D5AE\tO\t# MATHEMATICAL SANS-SERIF CAPITAL O\n1D5AF\tP\t# MATHEMATICAL SANS-SERIF CAPITAL P\n1D5B0\tQ\t# MATHEMATICAL SANS-SERIF CAPITAL Q\n1D5B1\tR\t# MATHEMATICAL SANS-SERIF CAPITAL R\n1D5B2\tS\t# MATHEMATICAL SANS-SERIF CAPITAL S\n1D5B3\tT\t# MATHEMATICAL SANS-SERIF CAPITAL T\n1D5B4\tU\t# MATHEMATICAL SANS-SERIF CAPITAL U\n1D5B5\tV\t# MATHEMATICAL SANS-SERIF CAPITAL V\n1D5B6\tW\t# MATHEMATICAL SANS-SERIF CAPITAL W\n1D5B7\tX\t# MATHEMATICAL SANS-SERIF CAPITAL X\n1D5B8\tY\t# MATHEMATICAL SANS-SERIF CAPITAL Y\n1D5B9\tZ\t# MATHEMATICAL SANS-SERIF CAPITAL Z\n1D5BA\ta\t# MATHEMATICAL SANS-SERIF SMALL A\n1D5BB\tb\t# MATHEMATICAL SANS-SERIF SMALL B\n1D5BC\tc\t# MATHEMATICAL SANS-SERIF SMALL C\n1D5BD\td\t# MATHEMATICAL SANS-SERIF SMALL D\n1D5BE\te\t# MATHEMATICAL SANS-SERIF SMALL E\n1D5BF\tf\t# MATHEMATICAL SANS-SERIF SMALL F\n1D5C0\tg\t# MATHEMATICAL SANS-SERIF SMALL G\n1D5C1\th\t# MATHEMATICAL SANS-SERIF SMALL H\n1D5C2\ti\t# MATHEMATICAL SANS-SERIF SMALL I\n1D5C3\tj\t# MATHEMATICAL SANS-SERIF SMALL J\n1D5C4\tk\t# MATHEMATICAL SANS-SERIF SMALL K\n1D5C5\tl\t# MATHEMATICAL SANS-SERIF SMALL L\n1D5C6\tm\t# MATHEMATICAL SANS-SERIF SMALL M\n1D5C7\tn\t# MATHEMATICAL SANS-SERIF SMALL N\n1D5C8\to\t# MATHEMATICAL SANS-SERIF SMALL O\n1D5C9\tp\t# MATHEMATICAL SANS-SERIF SMALL P\n1D5CA\tq\t# MATHEMATICAL SANS-SERIF SMALL Q\n1D5CB\tr\t# MATHEMATICAL SANS-SERIF SMALL R\n1D5CC\ts\t# MATHEMATICAL SANS-SERIF SMALL S\n1D5CD\tt\t# MATHEMATICAL SANS-SERIF SMALL T\n1D5CE\tu\t# MATHEMATICAL SANS-SERIF SMALL U\n1D5CF\tv\t# MATHEMATICAL SANS-SERIF SMALL V\n1D5D0\tw\t# MATHEMATICAL SANS-SERIF SMALL W\n1D5D1\tx\t# MATHEMATICAL SANS-SERIF SMALL X\n1D5D2\ty\t# MATHEMATICAL SANS-SERIF SMALL Y\n1D5D3\tz\t# MATHEMATICAL SANS-SERIF SMALL Z\n1D5D4\tA\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL A\n1D5D5\tB\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL B\n1D5D6\tC\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL C\n1D5D7\tD\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL D\n1D5D8\tE\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL E\n1D5D9\tF\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL F\n1D5DA\tG\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL G\n1D5DB\tH\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL H\n1D5DC\tI\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL I\n1D5DD\tJ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL J\n1D5DE\tK\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL K\n1D5DF\tL\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL L\n1D5E0\tM\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL M\n1D5E1\tN\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL N\n1D5E2\tO\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL O\n1D5E3\tP\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL P\n1D5E4\tQ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL Q\n1D5E5\tR\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL R\n1D5E6\tS\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL S\n1D5E7\tT\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL T\n1D5E8\tU\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL U\n1D5E9\tV\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL V\n1D5EA\tW\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL W\n1D5EB\tX\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL X\n1D5EC\tY\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL Y\n1D5ED\tZ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL Z\n1D5EE\ta\t# MATHEMATICAL SANS-SERIF BOLD SMALL A\n1D5EF\tb\t# MATHEMATICAL SANS-SERIF BOLD SMALL B\n1D5F0\tc\t# MATHEMATICAL SANS-SERIF BOLD SMALL C\n1D5F1\td\t# MATHEMATICAL SANS-SERIF BOLD SMALL D\n1D5F2\te\t# MATHEMATICAL SANS-SERIF BOLD SMALL E\n1D5F3\tf\t# MATHEMATICAL SANS-SERIF BOLD SMALL F\n1D5F4\tg\t# MATHEMATICAL SANS-SERIF BOLD SMALL G\n1D5F5\th\t# MATHEMATICAL SANS-SERIF BOLD SMALL H\n1D5F6\ti\t# MATHEMATICAL SANS-SERIF BOLD SMALL I\n1D5F7\tj\t# MATHEMATICAL SANS-SERIF BOLD SMALL J\n1D5F8\tk\t# MATHEMATICAL SANS-SERIF BOLD SMALL K\n1D5F9\tl\t# MATHEMATICAL SANS-SERIF BOLD SMALL L\n1D5FA\tm\t# MATHEMATICAL SANS-SERIF BOLD SMALL M\n1D5FB\tn\t# MATHEMATICAL SANS-SERIF BOLD SMALL N\n1D5FC\to\t# MATHEMATICAL SANS-SERIF BOLD SMALL O\n1D5FD\tp\t# MATHEMATICAL SANS-SERIF BOLD SMALL P\n1D5FE\tq\t# MATHEMATICAL SANS-SERIF BOLD SMALL Q\n1D5FF\tr\t# MATHEMATICAL SANS-SERIF BOLD SMALL R\n1D600\ts\t# MATHEMATICAL SANS-SERIF BOLD SMALL S\n1D601\tt\t# MATHEMATICAL SANS-SERIF BOLD SMALL T\n1D602\tu\t# MATHEMATICAL SANS-SERIF BOLD SMALL U\n1D603\tv\t# MATHEMATICAL SANS-SERIF BOLD SMALL V\n1D604\tw\t# MATHEMATICAL SANS-SERIF BOLD SMALL W\n1D605\tx\t# MATHEMATICAL SANS-SERIF BOLD SMALL X\n1D606\ty\t# MATHEMATICAL SANS-SERIF BOLD SMALL Y\n1D607\tz\t# MATHEMATICAL SANS-SERIF BOLD SMALL Z\n1D608\tA\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL A\n1D609\tB\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL B\n1D60A\tC\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL C\n1D60B\tD\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL D\n1D60C\tE\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL E\n1D60D\tF\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL F\n1D60E\tG\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL G\n1D60F\tH\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL H\n1D610\tI\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL I\n1D611\tJ\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL J\n1D612\tK\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL K\n1D613\tL\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL L\n1D614\tM\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL M\n1D615\tN\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL N\n1D616\tO\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL O\n1D617\tP\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL P\n1D618\tQ\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q\n1D619\tR\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL R\n1D61A\tS\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL S\n1D61B\tT\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL T\n1D61C\tU\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL U\n1D61D\tV\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL V\n1D61E\tW\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL W\n1D61F\tX\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL X\n1D620\tY\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y\n1D621\tZ\t# MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z\n1D622\ta\t# MATHEMATICAL SANS-SERIF ITALIC SMALL A\n1D623\tb\t# MATHEMATICAL SANS-SERIF ITALIC SMALL B\n1D624\tc\t# MATHEMATICAL SANS-SERIF ITALIC SMALL C\n1D625\td\t# MATHEMATICAL SANS-SERIF ITALIC SMALL D\n1D626\te\t# MATHEMATICAL SANS-SERIF ITALIC SMALL E\n1D627\tf\t# MATHEMATICAL SANS-SERIF ITALIC SMALL F\n1D628\tg\t# MATHEMATICAL SANS-SERIF ITALIC SMALL G\n1D629\th\t# MATHEMATICAL SANS-SERIF ITALIC SMALL H\n1D62A\ti\t# MATHEMATICAL SANS-SERIF ITALIC SMALL I\n1D62B\tj\t# MATHEMATICAL SANS-SERIF ITALIC SMALL J\n1D62C\tk\t# MATHEMATICAL SANS-SERIF ITALIC SMALL K\n1D62D\tl\t# MATHEMATICAL SANS-SERIF ITALIC SMALL L\n1D62E\tm\t# MATHEMATICAL SANS-SERIF ITALIC SMALL M\n1D62F\tn\t# MATHEMATICAL SANS-SERIF ITALIC SMALL N\n1D630\to\t# MATHEMATICAL SANS-SERIF ITALIC SMALL O\n1D631\tp\t# MATHEMATICAL SANS-SERIF ITALIC SMALL P\n1D632\tq\t# MATHEMATICAL SANS-SERIF ITALIC SMALL Q\n1D633\tr\t# MATHEMATICAL SANS-SERIF ITALIC SMALL R\n1D634\ts\t# MATHEMATICAL SANS-SERIF ITALIC SMALL S\n1D635\tt\t# MATHEMATICAL SANS-SERIF ITALIC SMALL T\n1D636\tu\t# MATHEMATICAL SANS-SERIF ITALIC SMALL U\n1D637\tv\t# MATHEMATICAL SANS-SERIF ITALIC SMALL V\n1D638\tw\t# MATHEMATICAL SANS-SERIF ITALIC SMALL W\n1D639\tx\t# MATHEMATICAL SANS-SERIF ITALIC SMALL X\n1D63A\ty\t# MATHEMATICAL SANS-SERIF ITALIC SMALL Y\n1D63B\tz\t# MATHEMATICAL SANS-SERIF ITALIC SMALL Z\n1D63C\tA\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A\n1D63D\tB\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B\n1D63E\tC\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C\n1D63F\tD\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D\n1D640\tE\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E\n1D641\tF\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F\n1D642\tG\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G\n1D643\tH\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H\n1D644\tI\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I\n1D645\tJ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J\n1D646\tK\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K\n1D647\tL\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L\n1D648\tM\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M\n1D649\tN\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N\n1D64A\tO\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O\n1D64B\tP\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P\n1D64C\tQ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q\n1D64D\tR\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R\n1D64E\tS\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S\n1D64F\tT\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T\n1D650\tU\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U\n1D651\tV\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V\n1D652\tW\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W\n1D653\tX\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X\n1D654\tY\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y\n1D655\tZ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z\n1D656\ta\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A\n1D657\tb\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B\n1D658\tc\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C\n1D659\td\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D\n1D65A\te\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E\n1D65B\tf\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F\n1D65C\tg\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G\n1D65D\th\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H\n1D65E\ti\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I\n1D65F\tj\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J\n1D660\tk\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K\n1D661\tl\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L\n1D662\tm\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M\n1D663\tn\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N\n1D664\to\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O\n1D665\tp\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P\n1D666\tq\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q\n1D667\tr\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R\n1D668\ts\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S\n1D669\tt\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T\n1D66A\tu\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U\n1D66B\tv\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V\n1D66C\tw\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W\n1D66D\tx\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X\n1D66E\ty\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y\n1D66F\tz\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z\n1D670\tA\t# MATHEMATICAL MONOSPACE CAPITAL A\n1D671\tB\t# MATHEMATICAL MONOSPACE CAPITAL B\n1D672\tC\t# MATHEMATICAL MONOSPACE CAPITAL C\n1D673\tD\t# MATHEMATICAL MONOSPACE CAPITAL D\n1D674\tE\t# MATHEMATICAL MONOSPACE CAPITAL E\n1D675\tF\t# MATHEMATICAL MONOSPACE CAPITAL F\n1D676\tG\t# MATHEMATICAL MONOSPACE CAPITAL G\n1D677\tH\t# MATHEMATICAL MONOSPACE CAPITAL H\n1D678\tI\t# MATHEMATICAL MONOSPACE CAPITAL I\n1D679\tJ\t# MATHEMATICAL MONOSPACE CAPITAL J\n1D67A\tK\t# MATHEMATICAL MONOSPACE CAPITAL K\n1D67B\tL\t# MATHEMATICAL MONOSPACE CAPITAL L\n1D67C\tM\t# MATHEMATICAL MONOSPACE CAPITAL M\n1D67D\tN\t# MATHEMATICAL MONOSPACE CAPITAL N\n1D67E\tO\t# MATHEMATICAL MONOSPACE CAPITAL O\n1D67F\tP\t# MATHEMATICAL MONOSPACE CAPITAL P\n1D680\tQ\t# MATHEMATICAL MONOSPACE CAPITAL Q\n1D681\tR\t# MATHEMATICAL MONOSPACE CAPITAL R\n1D682\tS\t# MATHEMATICAL MONOSPACE CAPITAL S\n1D683\tT\t# MATHEMATICAL MONOSPACE CAPITAL T\n1D684\tU\t# MATHEMATICAL MONOSPACE CAPITAL U\n1D685\tV\t# MATHEMATICAL MONOSPACE CAPITAL V\n1D686\tW\t# MATHEMATICAL MONOSPACE CAPITAL W\n1D687\tX\t# MATHEMATICAL MONOSPACE CAPITAL X\n1D688\tY\t# MATHEMATICAL MONOSPACE CAPITAL Y\n1D689\tZ\t# MATHEMATICAL MONOSPACE CAPITAL Z\n1D68A\ta\t# MATHEMATICAL MONOSPACE SMALL A\n1D68B\tb\t# MATHEMATICAL MONOSPACE SMALL B\n1D68C\tc\t# MATHEMATICAL MONOSPACE SMALL C\n1D68D\td\t# MATHEMATICAL MONOSPACE SMALL D\n1D68E\te\t# MATHEMATICAL MONOSPACE SMALL E\n1D68F\tf\t# MATHEMATICAL MONOSPACE SMALL F\n1D690\tg\t# MATHEMATICAL MONOSPACE SMALL G\n1D691\th\t# MATHEMATICAL MONOSPACE SMALL H\n1D692\ti\t# MATHEMATICAL MONOSPACE SMALL I\n1D693\tj\t# MATHEMATICAL MONOSPACE SMALL J\n1D694\tk\t# MATHEMATICAL MONOSPACE SMALL K\n1D695\tl\t# MATHEMATICAL MONOSPACE SMALL L\n1D696\tm\t# MATHEMATICAL MONOSPACE SMALL M\n1D697\tn\t# MATHEMATICAL MONOSPACE SMALL N\n1D698\to\t# MATHEMATICAL MONOSPACE SMALL O\n1D699\tp\t# MATHEMATICAL MONOSPACE SMALL P\n1D69A\tq\t# MATHEMATICAL MONOSPACE SMALL Q\n1D69B\tr\t# MATHEMATICAL MONOSPACE SMALL R\n1D69C\ts\t# MATHEMATICAL MONOSPACE SMALL S\n1D69D\tt\t# MATHEMATICAL MONOSPACE SMALL T\n1D69E\tu\t# MATHEMATICAL MONOSPACE SMALL U\n1D69F\tv\t# MATHEMATICAL MONOSPACE SMALL V\n1D6A0\tw\t# MATHEMATICAL MONOSPACE SMALL W\n1D6A1\tx\t# MATHEMATICAL MONOSPACE SMALL X\n1D6A2\ty\t# MATHEMATICAL MONOSPACE SMALL Y\n1D6A3\tz\t# MATHEMATICAL MONOSPACE SMALL Z\n1D6A8\tΑ\t# MATHEMATICAL BOLD CAPITAL ALPHA\n1D6A9\tΒ\t# MATHEMATICAL BOLD CAPITAL BETA\n1D6AA\tΓ\t# MATHEMATICAL BOLD CAPITAL GAMMA\n1D6AB\tΔ\t# MATHEMATICAL BOLD CAPITAL DELTA\n1D6AC\tΕ\t# MATHEMATICAL BOLD CAPITAL EPSILON\n1D6AD\tΖ\t# MATHEMATICAL BOLD CAPITAL ZETA\n1D6AE\tΗ\t# MATHEMATICAL BOLD CAPITAL ETA\n1D6AF\tΘ\t# MATHEMATICAL BOLD CAPITAL THETA\n1D6B0\tΙ\t# MATHEMATICAL BOLD CAPITAL IOTA\n1D6B1\tΚ\t# MATHEMATICAL BOLD CAPITAL KAPPA\n1D6B2\tΛ\t# MATHEMATICAL BOLD CAPITAL LAMDA\n1D6B3\tΜ\t# MATHEMATICAL BOLD CAPITAL MU\n1D6B4\tΝ\t# MATHEMATICAL BOLD CAPITAL NU\n1D6B5\tΞ\t# MATHEMATICAL BOLD CAPITAL XI\n1D6B6\tΟ\t# MATHEMATICAL BOLD CAPITAL OMICRON\n1D6B7\tΠ\t# MATHEMATICAL BOLD CAPITAL PI\n1D6B8\tΡ\t# MATHEMATICAL BOLD CAPITAL RHO\n1D6B9\tϴ\t# MATHEMATICAL BOLD CAPITAL THETA SYMBOL\n1D6BA\tΣ\t# MATHEMATICAL BOLD CAPITAL SIGMA\n1D6BB\tΤ\t# MATHEMATICAL BOLD CAPITAL TAU\n1D6BC\tΥ\t# MATHEMATICAL BOLD CAPITAL UPSILON\n1D6BD\tΦ\t# MATHEMATICAL BOLD CAPITAL PHI\n1D6BE\tΧ\t# MATHEMATICAL BOLD CAPITAL CHI\n1D6BF\tΨ\t# MATHEMATICAL BOLD CAPITAL PSI\n1D6C0\tΩ\t# MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C1\t∇\t# MATHEMATICAL BOLD NABLA\n1D6C2\tα\t# MATHEMATICAL BOLD SMALL ALPHA\n1D6C3\tβ\t# MATHEMATICAL BOLD SMALL BETA\n1D6C4\tγ\t# MATHEMATICAL BOLD SMALL GAMMA\n1D6C5\tδ\t# MATHEMATICAL BOLD SMALL DELTA\n1D6C6\tε\t# MATHEMATICAL BOLD SMALL EPSILON\n1D6C7\tζ\t# MATHEMATICAL BOLD SMALL ZETA\n1D6C8\tη\t# MATHEMATICAL BOLD SMALL ETA\n1D6C9\tθ\t# MATHEMATICAL BOLD SMALL THETA\n1D6CA\tι\t# MATHEMATICAL BOLD SMALL IOTA\n1D6CB\tκ\t# MATHEMATICAL BOLD SMALL KAPPA\n1D6CC\tλ\t# MATHEMATICAL BOLD SMALL LAMDA\n1D6CD\tμ\t# MATHEMATICAL BOLD SMALL MU\n1D6CE\tν\t# MATHEMATICAL BOLD SMALL NU\n1D6CF\tξ\t# MATHEMATICAL BOLD SMALL XI\n1D6D0\tο\t# MATHEMATICAL BOLD SMALL OMICRON\n1D6D1\tπ\t# MATHEMATICAL BOLD SMALL PI\n1D6D2\tρ\t# MATHEMATICAL BOLD SMALL RHO\n1D6D3\tς\t# MATHEMATICAL BOLD SMALL FINAL SIGMA\n1D6D4\tσ\t# MATHEMATICAL BOLD SMALL SIGMA\n1D6D5\tτ\t# MATHEMATICAL BOLD SMALL TAU\n1D6D6\tυ\t# MATHEMATICAL BOLD SMALL UPSILON\n1D6D7\tφ\t# MATHEMATICAL BOLD SMALL PHI\n1D6D8\tχ\t# MATHEMATICAL BOLD SMALL CHI\n1D6D9\tψ\t# MATHEMATICAL BOLD SMALL PSI\n1D6DA\tω\t# MATHEMATICAL BOLD SMALL OMEGA\n1D6DB\t∂\t# MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6DC\tϵ\t# MATHEMATICAL BOLD EPSILON SYMBOL\n1D6DD\tϑ\t# MATHEMATICAL BOLD THETA SYMBOL\n1D6DE\tϰ\t# MATHEMATICAL BOLD KAPPA SYMBOL\n1D6DF\tϕ\t# MATHEMATICAL BOLD PHI SYMBOL\n1D6E0\tϱ\t# MATHEMATICAL BOLD RHO SYMBOL\n1D6E1\tϖ\t# MATHEMATICAL BOLD PI SYMBOL\n1D6E2\tΑ\t# MATHEMATICAL ITALIC CAPITAL ALPHA\n1D6E3\tΒ\t# MATHEMATICAL ITALIC CAPITAL BETA\n1D6E4\tΓ\t# MATHEMATICAL ITALIC CAPITAL GAMMA\n1D6E5\tΔ\t# MATHEMATICAL ITALIC CAPITAL DELTA\n1D6E6\tΕ\t# MATHEMATICAL ITALIC CAPITAL EPSILON\n1D6E7\tΖ\t# MATHEMATICAL ITALIC CAPITAL ZETA\n1D6E8\tΗ\t# MATHEMATICAL ITALIC CAPITAL ETA\n1D6E9\tΘ\t# MATHEMATICAL ITALIC CAPITAL THETA\n1D6EA\tΙ\t# MATHEMATICAL ITALIC CAPITAL IOTA\n1D6EB\tΚ\t# MATHEMATICAL ITALIC CAPITAL KAPPA\n1D6EC\tΛ\t# MATHEMATICAL ITALIC CAPITAL LAMDA\n1D6ED\tΜ\t# MATHEMATICAL ITALIC CAPITAL MU\n1D6EE\tΝ\t# MATHEMATICAL ITALIC CAPITAL NU\n1D6EF\tΞ\t# MATHEMATICAL ITALIC CAPITAL XI\n1D6F0\tΟ\t# MATHEMATICAL ITALIC CAPITAL OMICRON\n1D6F1\tΠ\t# MATHEMATICAL ITALIC CAPITAL PI\n1D6F2\tΡ\t# MATHEMATICAL ITALIC CAPITAL RHO\n1D6F3\tϴ\t# MATHEMATICAL ITALIC CAPITAL THETA SYMBOL\n1D6F4\tΣ\t# MATHEMATICAL ITALIC CAPITAL SIGMA\n1D6F5\tΤ\t# MATHEMATICAL ITALIC CAPITAL TAU\n1D6F6\tΥ\t# MATHEMATICAL ITALIC CAPITAL UPSILON\n1D6F7\tΦ\t# MATHEMATICAL ITALIC CAPITAL PHI\n1D6F8\tΧ\t# MATHEMATICAL ITALIC CAPITAL CHI\n1D6F9\tΨ\t# MATHEMATICAL ITALIC CAPITAL PSI\n1D6FA\tΩ\t# MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FB\t∇\t# MATHEMATICAL ITALIC NABLA\n1D6FC\tα\t# MATHEMATICAL ITALIC SMALL ALPHA\n1D6FD\tβ\t# MATHEMATICAL ITALIC SMALL BETA\n1D6FE\tγ\t# MATHEMATICAL ITALIC SMALL GAMMA\n1D6FF\tδ\t# MATHEMATICAL ITALIC SMALL DELTA\n1D700\tε\t# MATHEMATICAL ITALIC SMALL EPSILON\n1D701\tζ\t# MATHEMATICAL ITALIC SMALL ZETA\n1D702\tη\t# MATHEMATICAL ITALIC SMALL ETA\n1D703\tθ\t# MATHEMATICAL ITALIC SMALL THETA\n1D704\tι\t# MATHEMATICAL ITALIC SMALL IOTA\n1D705\tκ\t# MATHEMATICAL ITALIC SMALL KAPPA\n1D706\tλ\t# MATHEMATICAL ITALIC SMALL LAMDA\n1D707\tμ\t# MATHEMATICAL ITALIC SMALL MU\n1D708\tν\t# MATHEMATICAL ITALIC SMALL NU\n1D709\tξ\t# MATHEMATICAL ITALIC SMALL XI\n1D70A\tο\t# MATHEMATICAL ITALIC SMALL OMICRON\n1D70B\tπ\t# MATHEMATICAL ITALIC SMALL PI\n1D70C\tρ\t# MATHEMATICAL ITALIC SMALL RHO\n1D70D\tς\t# MATHEMATICAL ITALIC SMALL FINAL SIGMA\n1D70E\tσ\t# MATHEMATICAL ITALIC SMALL SIGMA\n1D70F\tτ\t# MATHEMATICAL ITALIC SMALL TAU\n1D710\tυ\t# MATHEMATICAL ITALIC SMALL UPSILON\n1D711\tφ\t# MATHEMATICAL ITALIC SMALL PHI\n1D712\tχ\t# MATHEMATICAL ITALIC SMALL CHI\n1D713\tψ\t# MATHEMATICAL ITALIC SMALL PSI\n1D714\tω\t# MATHEMATICAL ITALIC SMALL OMEGA\n1D715\t∂\t# MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D716\tϵ\t# MATHEMATICAL ITALIC EPSILON SYMBOL\n1D717\tϑ\t# MATHEMATICAL ITALIC THETA SYMBOL\n1D718\tϰ\t# MATHEMATICAL ITALIC KAPPA SYMBOL\n1D719\tϕ\t# MATHEMATICAL ITALIC PHI SYMBOL\n1D71A\tϱ\t# MATHEMATICAL ITALIC RHO SYMBOL\n1D71B\tϖ\t# MATHEMATICAL ITALIC PI SYMBOL\n1D71C\tΑ\t# MATHEMATICAL BOLD ITALIC CAPITAL ALPHA\n1D71D\tΒ\t# MATHEMATICAL BOLD ITALIC CAPITAL BETA\n1D71E\tΓ\t# MATHEMATICAL BOLD ITALIC CAPITAL GAMMA\n1D71F\tΔ\t# MATHEMATICAL BOLD ITALIC CAPITAL DELTA\n1D720\tΕ\t# MATHEMATICAL BOLD ITALIC CAPITAL EPSILON\n1D721\tΖ\t# MATHEMATICAL BOLD ITALIC CAPITAL ZETA\n1D722\tΗ\t# MATHEMATICAL BOLD ITALIC CAPITAL ETA\n1D723\tΘ\t# MATHEMATICAL BOLD ITALIC CAPITAL THETA\n1D724\tΙ\t# MATHEMATICAL BOLD ITALIC CAPITAL IOTA\n1D725\tΚ\t# MATHEMATICAL BOLD ITALIC CAPITAL KAPPA\n1D726\tΛ\t# MATHEMATICAL BOLD ITALIC CAPITAL LAMDA\n1D727\tΜ\t# MATHEMATICAL BOLD ITALIC CAPITAL MU\n1D728\tΝ\t# MATHEMATICAL BOLD ITALIC CAPITAL NU\n1D729\tΞ\t# MATHEMATICAL BOLD ITALIC CAPITAL XI\n1D72A\tΟ\t# MATHEMATICAL BOLD ITALIC CAPITAL OMICRON\n1D72B\tΠ\t# MATHEMATICAL BOLD ITALIC CAPITAL PI\n1D72C\tΡ\t# MATHEMATICAL BOLD ITALIC CAPITAL RHO\n1D72D\tϴ\t# MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL\n1D72E\tΣ\t# MATHEMATICAL BOLD ITALIC CAPITAL SIGMA\n1D72F\tΤ\t# MATHEMATICAL BOLD ITALIC CAPITAL TAU\n1D730\tΥ\t# MATHEMATICAL BOLD ITALIC CAPITAL UPSILON\n1D731\tΦ\t# MATHEMATICAL BOLD ITALIC CAPITAL PHI\n1D732\tΧ\t# MATHEMATICAL BOLD ITALIC CAPITAL CHI\n1D733\tΨ\t# MATHEMATICAL BOLD ITALIC CAPITAL PSI\n1D734\tΩ\t# MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D735\t∇\t# MATHEMATICAL BOLD ITALIC NABLA\n1D736\tα\t# MATHEMATICAL BOLD ITALIC SMALL ALPHA\n1D737\tβ\t# MATHEMATICAL BOLD ITALIC SMALL BETA\n1D738\tγ\t# MATHEMATICAL BOLD ITALIC SMALL GAMMA\n1D739\tδ\t# MATHEMATICAL BOLD ITALIC SMALL DELTA\n1D73A\tε\t# MATHEMATICAL BOLD ITALIC SMALL EPSILON\n1D73B\tζ\t# MATHEMATICAL BOLD ITALIC SMALL ZETA\n1D73C\tη\t# MATHEMATICAL BOLD ITALIC SMALL ETA\n1D73D\tθ\t# MATHEMATICAL BOLD ITALIC SMALL THETA\n1D73E\tι\t# MATHEMATICAL BOLD ITALIC SMALL IOTA\n1D73F\tκ\t# MATHEMATICAL BOLD ITALIC SMALL KAPPA\n1D740\tλ\t# MATHEMATICAL BOLD ITALIC SMALL LAMDA\n1D741\tμ\t# MATHEMATICAL BOLD ITALIC SMALL MU\n1D742\tν\t# MATHEMATICAL BOLD ITALIC SMALL NU\n1D743\tξ\t# MATHEMATICAL BOLD ITALIC SMALL XI\n1D744\tο\t# MATHEMATICAL BOLD ITALIC SMALL OMICRON\n1D745\tπ\t# MATHEMATICAL BOLD ITALIC SMALL PI\n1D746\tρ\t# MATHEMATICAL BOLD ITALIC SMALL RHO\n1D747\tς\t# MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA\n1D748\tσ\t# MATHEMATICAL BOLD ITALIC SMALL SIGMA\n1D749\tτ\t# MATHEMATICAL BOLD ITALIC SMALL TAU\n1D74A\tυ\t# MATHEMATICAL BOLD ITALIC SMALL UPSILON\n1D74B\tφ\t# MATHEMATICAL BOLD ITALIC SMALL PHI\n1D74C\tχ\t# MATHEMATICAL BOLD ITALIC SMALL CHI\n1D74D\tψ\t# MATHEMATICAL BOLD ITALIC SMALL PSI\n1D74E\tω\t# MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D74F\t∂\t# MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D750\tϵ\t# MATHEMATICAL BOLD ITALIC EPSILON SYMBOL\n1D751\tϑ\t# MATHEMATICAL BOLD ITALIC THETA SYMBOL\n1D752\tϰ\t# MATHEMATICAL BOLD ITALIC KAPPA SYMBOL\n1D753\tϕ\t# MATHEMATICAL BOLD ITALIC PHI SYMBOL\n1D754\tϱ\t# MATHEMATICAL BOLD ITALIC RHO SYMBOL\n1D755\tϖ\t# MATHEMATICAL BOLD ITALIC PI SYMBOL\n1D756\tΑ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA\n1D757\tΒ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA\n1D758\tΓ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA\n1D759\tΔ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA\n1D75A\tΕ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON\n1D75B\tΖ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA\n1D75C\tΗ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA\n1D75D\tΘ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA\n1D75E\tΙ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA\n1D75F\tΚ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA\n1D760\tΛ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA\n1D761\tΜ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL MU\n1D762\tΝ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL NU\n1D763\tΞ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL XI\n1D764\tΟ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON\n1D765\tΠ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL PI\n1D766\tΡ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO\n1D767\tϴ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL\n1D768\tΣ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA\n1D769\tΤ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU\n1D76A\tΥ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON\n1D76B\tΦ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI\n1D76C\tΧ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI\n1D76D\tΨ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI\n1D76E\tΩ\t# MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D76F\t∇\t# MATHEMATICAL SANS-SERIF BOLD NABLA\n1D770\tα\t# MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA\n1D771\tβ\t# MATHEMATICAL SANS-SERIF BOLD SMALL BETA\n1D772\tγ\t# MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA\n1D773\tδ\t# MATHEMATICAL SANS-SERIF BOLD SMALL DELTA\n1D774\tε\t# MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON\n1D775\tζ\t# MATHEMATICAL SANS-SERIF BOLD SMALL ZETA\n1D776\tη\t# MATHEMATICAL SANS-SERIF BOLD SMALL ETA\n1D777\tθ\t# MATHEMATICAL SANS-SERIF BOLD SMALL THETA\n1D778\tι\t# MATHEMATICAL SANS-SERIF BOLD SMALL IOTA\n1D779\tκ\t# MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA\n1D77A\tλ\t# MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA\n1D77B\tμ\t# MATHEMATICAL SANS-SERIF BOLD SMALL MU\n1D77C\tν\t# MATHEMATICAL SANS-SERIF BOLD SMALL NU\n1D77D\tξ\t# MATHEMATICAL SANS-SERIF BOLD SMALL XI\n1D77E\tο\t# MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON\n1D77F\tπ\t# MATHEMATICAL SANS-SERIF BOLD SMALL PI\n1D780\tρ\t# MATHEMATICAL SANS-SERIF BOLD SMALL RHO\n1D781\tς\t# MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA\n1D782\tσ\t# MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA\n1D783\tτ\t# MATHEMATICAL SANS-SERIF BOLD SMALL TAU\n1D784\tυ\t# MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON\n1D785\tφ\t# MATHEMATICAL SANS-SERIF BOLD SMALL PHI\n1D786\tχ\t# MATHEMATICAL SANS-SERIF BOLD SMALL CHI\n1D787\tψ\t# MATHEMATICAL SANS-SERIF BOLD SMALL PSI\n1D788\tω\t# MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D789\t∂\t# MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D78A\tϵ\t# MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL\n1D78B\tϑ\t# MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL\n1D78C\tϰ\t# MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL\n1D78D\tϕ\t# MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL\n1D78E\tϱ\t# MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL\n1D78F\tϖ\t# MATHEMATICAL SANS-SERIF BOLD PI SYMBOL\n1D790\tΑ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA\n1D791\tΒ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA\n1D792\tΓ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA\n1D793\tΔ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA\n1D794\tΕ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON\n1D795\tΖ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA\n1D796\tΗ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA\n1D797\tΘ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA\n1D798\tΙ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA\n1D799\tΚ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA\n1D79A\tΛ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA\n1D79B\tΜ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU\n1D79C\tΝ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU\n1D79D\tΞ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI\n1D79E\tΟ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON\n1D79F\tΠ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI\n1D7A0\tΡ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO\n1D7A1\tϴ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL\n1D7A2\tΣ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA\n1D7A3\tΤ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU\n1D7A4\tΥ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON\n1D7A5\tΦ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI\n1D7A6\tΧ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI\n1D7A7\tΨ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI\n1D7A8\tΩ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7A9\t∇\t# MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7AA\tα\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA\n1D7AB\tβ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA\n1D7AC\tγ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA\n1D7AD\tδ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA\n1D7AE\tε\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON\n1D7AF\tζ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA\n1D7B0\tη\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA\n1D7B1\tθ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA\n1D7B2\tι\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA\n1D7B3\tκ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA\n1D7B4\tλ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA\n1D7B5\tμ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU\n1D7B6\tν\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU\n1D7B7\tξ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI\n1D7B8\tο\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON\n1D7B9\tπ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI\n1D7BA\tρ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO\n1D7BB\tς\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA\n1D7BC\tσ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA\n1D7BD\tτ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU\n1D7BE\tυ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON\n1D7BF\tφ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI\n1D7C0\tχ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI\n1D7C1\tψ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI\n1D7C2\tω\t# MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C3\t∂\t# MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1D7C4\tϵ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL\n1D7C5\tϑ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL\n1D7C6\tϰ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL\n1D7C7\tϕ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL\n1D7C8\tϱ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL\n1D7C9\tϖ\t# MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL\n1D7CE\t0\t# MATHEMATICAL BOLD DIGIT ZERO\n1D7CF\t1\t# MATHEMATICAL BOLD DIGIT ONE\n1D7D0\t2\t# MATHEMATICAL BOLD DIGIT TWO\n1D7D1\t3\t# MATHEMATICAL BOLD DIGIT THREE\n1D7D2\t4\t# MATHEMATICAL BOLD DIGIT FOUR\n1D7D3\t5\t# MATHEMATICAL BOLD DIGIT FIVE\n1D7D4\t6\t# MATHEMATICAL BOLD DIGIT SIX\n1D7D5\t7\t# MATHEMATICAL BOLD DIGIT SEVEN\n1D7D6\t8\t# MATHEMATICAL BOLD DIGIT EIGHT\n1D7D7\t9\t# MATHEMATICAL BOLD DIGIT NINE\n1D7D8\t0\t# MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO\n1D7D9\t1\t# MATHEMATICAL DOUBLE-STRUCK DIGIT ONE\n1D7DA\t2\t# MATHEMATICAL DOUBLE-STRUCK DIGIT TWO\n1D7DB\t3\t# MATHEMATICAL DOUBLE-STRUCK DIGIT THREE\n1D7DC\t4\t# MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR\n1D7DD\t5\t# MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE\n1D7DE\t6\t# MATHEMATICAL DOUBLE-STRUCK DIGIT SIX\n1D7DF\t7\t# MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN\n1D7E0\t8\t# MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT\n1D7E1\t9\t# MATHEMATICAL DOUBLE-STRUCK DIGIT NINE\n1D7E2\t0\t# MATHEMATICAL SANS-SERIF DIGIT ZERO\n1D7E3\t1\t# MATHEMATICAL SANS-SERIF DIGIT ONE\n1D7E4\t2\t# MATHEMATICAL SANS-SERIF DIGIT TWO\n1D7E5\t3\t# MATHEMATICAL SANS-SERIF DIGIT THREE\n1D7E6\t4\t# MATHEMATICAL SANS-SERIF DIGIT FOUR\n1D7E7\t5\t# MATHEMATICAL SANS-SERIF DIGIT FIVE\n1D7E8\t6\t# MATHEMATICAL SANS-SERIF DIGIT SIX\n1D7E9\t7\t# MATHEMATICAL SANS-SERIF DIGIT SEVEN\n1D7EA\t8\t# MATHEMATICAL SANS-SERIF DIGIT EIGHT\n1D7EB\t9\t# MATHEMATICAL SANS-SERIF DIGIT NINE\n1D7EC\t0\t# MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO\n1D7ED\t1\t# MATHEMATICAL SANS-SERIF BOLD DIGIT ONE\n1D7EE\t2\t# MATHEMATICAL SANS-SERIF BOLD DIGIT TWO\n1D7EF\t3\t# MATHEMATICAL SANS-SERIF BOLD DIGIT THREE\n1D7F0\t4\t# MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR\n1D7F1\t5\t# MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE\n1D7F2\t6\t# MATHEMATICAL SANS-SERIF BOLD DIGIT SIX\n1D7F3\t7\t# MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN\n1D7F4\t8\t# MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT\n1D7F5\t9\t# MATHEMATICAL SANS-SERIF BOLD DIGIT NINE\n1D7F6\t0\t# MATHEMATICAL MONOSPACE DIGIT ZERO\n1D7F7\t1\t# MATHEMATICAL MONOSPACE DIGIT ONE\n1D7F8\t2\t# MATHEMATICAL MONOSPACE DIGIT TWO\n1D7F9\t3\t# MATHEMATICAL MONOSPACE DIGIT THREE\n1D7FA\t4\t# MATHEMATICAL MONOSPACE DIGIT FOUR\n1D7FB\t5\t# MATHEMATICAL MONOSPACE DIGIT FIVE\n1D7FC\t6\t# MATHEMATICAL MONOSPACE DIGIT SIX\n1D7FD\t7\t# MATHEMATICAL MONOSPACE DIGIT SEVEN\n1D7FE\t8\t# MATHEMATICAL MONOSPACE DIGIT EIGHT\n1D7FF\t9\t# MATHEMATICAL MONOSPACE DIGIT NINE\n2F800\t丽\t# CJK COMPATIBILITY IDEOGRAPH-2F800\n2F801\t丸\t# CJK COMPATIBILITY IDEOGRAPH-2F801\n2F802\t乁\t# CJK COMPATIBILITY IDEOGRAPH-2F802\n2F803\t𠄢\t# CJK COMPATIBILITY IDEOGRAPH-2F803\n2F804\t你\t# CJK COMPATIBILITY IDEOGRAPH-2F804\n2F805\t侮\t# CJK COMPATIBILITY IDEOGRAPH-2F805\n2F806\t侻\t# CJK COMPATIBILITY IDEOGRAPH-2F806\n2F807\t倂\t# CJK COMPATIBILITY IDEOGRAPH-2F807\n2F808\t偺\t# CJK COMPATIBILITY IDEOGRAPH-2F808\n2F809\t備\t# CJK COMPATIBILITY IDEOGRAPH-2F809\n2F80A\t僧\t# CJK COMPATIBILITY IDEOGRAPH-2F80A\n2F80B\t像\t# CJK COMPATIBILITY IDEOGRAPH-2F80B\n2F80C\t㒞\t# CJK COMPATIBILITY IDEOGRAPH-2F80C\n2F80D\t𠘺\t# CJK COMPATIBILITY IDEOGRAPH-2F80D\n2F80E\t免\t# CJK COMPATIBILITY IDEOGRAPH-2F80E\n2F80F\t兔\t# CJK COMPATIBILITY IDEOGRAPH-2F80F\n2F810\t兤\t# CJK COMPATIBILITY IDEOGRAPH-2F810\n2F811\t具\t# CJK COMPATIBILITY IDEOGRAPH-2F811\n2F812\t𠔜\t# CJK COMPATIBILITY IDEOGRAPH-2F812\n2F813\t㒹\t# CJK COMPATIBILITY IDEOGRAPH-2F813\n2F814\t內\t# CJK COMPATIBILITY IDEOGRAPH-2F814\n2F815\t再\t# CJK COMPATIBILITY IDEOGRAPH-2F815\n2F816\t𠕋\t# CJK COMPATIBILITY IDEOGRAPH-2F816\n2F817\t冗\t# CJK COMPATIBILITY IDEOGRAPH-2F817\n2F818\t冤\t# CJK COMPATIBILITY IDEOGRAPH-2F818\n2F819\t仌\t# CJK COMPATIBILITY IDEOGRAPH-2F819\n2F81A\t冬\t# CJK COMPATIBILITY IDEOGRAPH-2F81A\n2F81B\t况\t# CJK COMPATIBILITY IDEOGRAPH-2F81B\n2F81C\t𩇟\t# CJK COMPATIBILITY IDEOGRAPH-2F81C\n2F81D\t凵\t# CJK COMPATIBILITY IDEOGRAPH-2F81D\n2F81E\t刃\t# CJK COMPATIBILITY IDEOGRAPH-2F81E\n2F81F\t㓟\t# CJK COMPATIBILITY IDEOGRAPH-2F81F\n2F820\t刻\t# CJK COMPATIBILITY IDEOGRAPH-2F820\n2F821\t剆\t# CJK COMPATIBILITY IDEOGRAPH-2F821\n2F822\t割\t# CJK COMPATIBILITY IDEOGRAPH-2F822\n2F823\t剷\t# CJK COMPATIBILITY IDEOGRAPH-2F823\n2F824\t㔕\t# CJK COMPATIBILITY IDEOGRAPH-2F824\n2F825\t勇\t# CJK COMPATIBILITY IDEOGRAPH-2F825\n2F826\t勉\t# CJK COMPATIBILITY IDEOGRAPH-2F826\n2F827\t勤\t# CJK COMPATIBILITY IDEOGRAPH-2F827\n2F828\t勺\t# CJK COMPATIBILITY IDEOGRAPH-2F828\n2F829\t包\t# CJK COMPATIBILITY IDEOGRAPH-2F829\n2F82A\t匆\t# CJK COMPATIBILITY IDEOGRAPH-2F82A\n2F82B\t北\t# CJK COMPATIBILITY IDEOGRAPH-2F82B\n2F82C\t卉\t# CJK COMPATIBILITY IDEOGRAPH-2F82C\n2F82D\t卑\t# CJK COMPATIBILITY IDEOGRAPH-2F82D\n2F82E\t博\t# CJK COMPATIBILITY IDEOGRAPH-2F82E\n2F82F\t即\t# CJK COMPATIBILITY IDEOGRAPH-2F82F\n2F830\t卽\t# CJK COMPATIBILITY IDEOGRAPH-2F830\n2F831\t卿\t# CJK COMPATIBILITY IDEOGRAPH-2F831\n2F832\t卿\t# CJK COMPATIBILITY IDEOGRAPH-2F832\n2F833\t卿\t# CJK COMPATIBILITY IDEOGRAPH-2F833\n2F834\t𠨬\t# CJK COMPATIBILITY IDEOGRAPH-2F834\n2F835\t灰\t# CJK COMPATIBILITY IDEOGRAPH-2F835\n2F836\t及\t# CJK COMPATIBILITY IDEOGRAPH-2F836\n2F837\t叟\t# CJK COMPATIBILITY IDEOGRAPH-2F837\n2F838\t𠭣\t# CJK COMPATIBILITY IDEOGRAPH-2F838\n2F839\t叫\t# CJK COMPATIBILITY IDEOGRAPH-2F839\n2F83A\t叱\t# CJK COMPATIBILITY IDEOGRAPH-2F83A\n2F83B\t吆\t# CJK COMPATIBILITY IDEOGRAPH-2F83B\n2F83C\t咞\t# CJK COMPATIBILITY IDEOGRAPH-2F83C\n2F83D\t吸\t# CJK COMPATIBILITY IDEOGRAPH-2F83D\n2F83E\t呈\t# CJK COMPATIBILITY IDEOGRAPH-2F83E\n2F83F\t周\t# CJK COMPATIBILITY IDEOGRAPH-2F83F\n2F840\t咢\t# CJK COMPATIBILITY IDEOGRAPH-2F840\n2F841\t哶\t# CJK COMPATIBILITY IDEOGRAPH-2F841\n2F842\t唐\t# CJK COMPATIBILITY IDEOGRAPH-2F842\n2F843\t啓\t# CJK COMPATIBILITY IDEOGRAPH-2F843\n2F844\t啣\t# CJK COMPATIBILITY IDEOGRAPH-2F844\n2F845\t善\t# CJK COMPATIBILITY IDEOGRAPH-2F845\n2F846\t善\t# CJK COMPATIBILITY IDEOGRAPH-2F846\n2F847\t喙\t# CJK COMPATIBILITY IDEOGRAPH-2F847\n2F848\t喫\t# CJK COMPATIBILITY IDEOGRAPH-2F848\n2F849\t喳\t# CJK COMPATIBILITY IDEOGRAPH-2F849\n2F84A\t嗂\t# CJK COMPATIBILITY IDEOGRAPH-2F84A\n2F84B\t圖\t# CJK COMPATIBILITY IDEOGRAPH-2F84B\n2F84C\t嘆\t# CJK COMPATIBILITY IDEOGRAPH-2F84C\n2F84D\t圗\t# CJK COMPATIBILITY IDEOGRAPH-2F84D\n2F84E\t噑\t# CJK COMPATIBILITY IDEOGRAPH-2F84E\n2F84F\t噴\t# CJK COMPATIBILITY IDEOGRAPH-2F84F\n2F850\t切\t# CJK COMPATIBILITY IDEOGRAPH-2F850\n2F851\t壮\t# CJK COMPATIBILITY IDEOGRAPH-2F851\n2F852\t城\t# CJK COMPATIBILITY IDEOGRAPH-2F852\n2F853\t埴\t# CJK COMPATIBILITY IDEOGRAPH-2F853\n2F854\t堍\t# CJK COMPATIBILITY IDEOGRAPH-2F854\n2F855\t型\t# CJK COMPATIBILITY IDEOGRAPH-2F855\n2F856\t堲\t# CJK COMPATIBILITY IDEOGRAPH-2F856\n2F857\t報\t# CJK COMPATIBILITY IDEOGRAPH-2F857\n2F858\t墬\t# CJK COMPATIBILITY IDEOGRAPH-2F858\n2F859\t𡓤\t# CJK COMPATIBILITY IDEOGRAPH-2F859\n2F85A\t売\t# CJK COMPATIBILITY IDEOGRAPH-2F85A\n2F85B\t壷\t# CJK COMPATIBILITY IDEOGRAPH-2F85B\n2F85C\t夆\t# CJK COMPATIBILITY IDEOGRAPH-2F85C\n2F85D\t多\t# CJK COMPATIBILITY IDEOGRAPH-2F85D\n2F85E\t夢\t# CJK COMPATIBILITY IDEOGRAPH-2F85E\n2F85F\t奢\t# CJK COMPATIBILITY IDEOGRAPH-2F85F\n2F860\t𡚨\t# CJK COMPATIBILITY IDEOGRAPH-2F860\n2F861\t𡛪\t# CJK COMPATIBILITY IDEOGRAPH-2F861\n2F862\t姬\t# CJK COMPATIBILITY IDEOGRAPH-2F862\n2F863\t娛\t# CJK COMPATIBILITY IDEOGRAPH-2F863\n2F864\t娧\t# CJK COMPATIBILITY IDEOGRAPH-2F864\n2F865\t姘\t# CJK COMPATIBILITY IDEOGRAPH-2F865\n2F866\t婦\t# CJK COMPATIBILITY IDEOGRAPH-2F866\n2F867\t㛮\t# CJK COMPATIBILITY IDEOGRAPH-2F867\n2F868\t㛼\t# CJK COMPATIBILITY IDEOGRAPH-2F868\n2F869\t嬈\t# CJK COMPATIBILITY IDEOGRAPH-2F869\n2F86A\t嬾\t# CJK COMPATIBILITY IDEOGRAPH-2F86A\n2F86B\t嬾\t# CJK COMPATIBILITY IDEOGRAPH-2F86B\n2F86C\t𡧈\t# CJK COMPATIBILITY IDEOGRAPH-2F86C\n2F86D\t寃\t# CJK COMPATIBILITY IDEOGRAPH-2F86D\n2F86E\t寘\t# CJK COMPATIBILITY IDEOGRAPH-2F86E\n2F86F\t寧\t# CJK COMPATIBILITY IDEOGRAPH-2F86F\n2F870\t寳\t# CJK COMPATIBILITY IDEOGRAPH-2F870\n2F871\t𡬘\t# CJK COMPATIBILITY IDEOGRAPH-2F871\n2F872\t寿\t# CJK COMPATIBILITY IDEOGRAPH-2F872\n2F873\t将\t# CJK COMPATIBILITY IDEOGRAPH-2F873\n2F874\t当\t# CJK COMPATIBILITY IDEOGRAPH-2F874\n2F875\t尢\t# CJK COMPATIBILITY IDEOGRAPH-2F875\n2F876\t㞁\t# CJK COMPATIBILITY IDEOGRAPH-2F876\n2F877\t屠\t# CJK COMPATIBILITY IDEOGRAPH-2F877\n2F878\t屮\t# CJK COMPATIBILITY IDEOGRAPH-2F878\n2F879\t峀\t# CJK COMPATIBILITY IDEOGRAPH-2F879\n2F87A\t岍\t# CJK COMPATIBILITY IDEOGRAPH-2F87A\n2F87B\t𡷤\t# CJK COMPATIBILITY IDEOGRAPH-2F87B\n2F87C\t嵃\t# CJK COMPATIBILITY IDEOGRAPH-2F87C\n2F87D\t𡷦\t# CJK COMPATIBILITY IDEOGRAPH-2F87D\n2F87E\t嵮\t# CJK COMPATIBILITY IDEOGRAPH-2F87E\n2F87F\t嵫\t# CJK COMPATIBILITY IDEOGRAPH-2F87F\n2F880\t嵼\t# CJK COMPATIBILITY IDEOGRAPH-2F880\n2F881\t巡\t# CJK COMPATIBILITY IDEOGRAPH-2F881\n2F882\t巢\t# CJK COMPATIBILITY IDEOGRAPH-2F882\n2F883\t㠯\t# CJK COMPATIBILITY IDEOGRAPH-2F883\n2F884\t巽\t# CJK COMPATIBILITY IDEOGRAPH-2F884\n2F885\t帨\t# CJK COMPATIBILITY IDEOGRAPH-2F885\n2F886\t帽\t# CJK COMPATIBILITY IDEOGRAPH-2F886\n2F887\t幩\t# CJK COMPATIBILITY IDEOGRAPH-2F887\n2F888\t㡢\t# CJK COMPATIBILITY IDEOGRAPH-2F888\n2F889\t𢆃\t# CJK COMPATIBILITY IDEOGRAPH-2F889\n2F88A\t㡼\t# CJK COMPATIBILITY IDEOGRAPH-2F88A\n2F88B\t庰\t# CJK COMPATIBILITY IDEOGRAPH-2F88B\n2F88C\t庳\t# CJK COMPATIBILITY IDEOGRAPH-2F88C\n2F88D\t庶\t# CJK COMPATIBILITY IDEOGRAPH-2F88D\n2F88E\t廊\t# CJK COMPATIBILITY IDEOGRAPH-2F88E\n2F88F\t𪎒\t# CJK COMPATIBILITY IDEOGRAPH-2F88F\n2F890\t廾\t# CJK COMPATIBILITY IDEOGRAPH-2F890\n2F891\t𢌱\t# CJK COMPATIBILITY IDEOGRAPH-2F891\n2F892\t𢌱\t# CJK COMPATIBILITY IDEOGRAPH-2F892\n2F893\t舁\t# CJK COMPATIBILITY IDEOGRAPH-2F893\n2F894\t弢\t# CJK COMPATIBILITY IDEOGRAPH-2F894\n2F895\t弢\t# CJK COMPATIBILITY IDEOGRAPH-2F895\n2F896\t㣇\t# CJK COMPATIBILITY IDEOGRAPH-2F896\n2F897\t𣊸\t# CJK COMPATIBILITY IDEOGRAPH-2F897\n2F898\t𦇚\t# CJK COMPATIBILITY IDEOGRAPH-2F898\n2F899\t形\t# CJK COMPATIBILITY IDEOGRAPH-2F899\n2F89A\t彫\t# CJK COMPATIBILITY IDEOGRAPH-2F89A\n2F89B\t㣣\t# CJK COMPATIBILITY IDEOGRAPH-2F89B\n2F89C\t徚\t# CJK COMPATIBILITY IDEOGRAPH-2F89C\n2F89D\t忍\t# CJK COMPATIBILITY IDEOGRAPH-2F89D\n2F89E\t志\t# CJK COMPATIBILITY IDEOGRAPH-2F89E\n2F89F\t忹\t# CJK COMPATIBILITY IDEOGRAPH-2F89F\n2F8A0\t悁\t# CJK COMPATIBILITY IDEOGRAPH-2F8A0\n2F8A1\t㤺\t# CJK COMPATIBILITY IDEOGRAPH-2F8A1\n2F8A2\t㤜\t# CJK COMPATIBILITY IDEOGRAPH-2F8A2\n2F8A3\t悔\t# CJK COMPATIBILITY IDEOGRAPH-2F8A3\n2F8A4\t𢛔\t# CJK COMPATIBILITY IDEOGRAPH-2F8A4\n2F8A5\t惇\t# CJK COMPATIBILITY IDEOGRAPH-2F8A5\n2F8A6\t慈\t# CJK COMPATIBILITY IDEOGRAPH-2F8A6\n2F8A7\t慌\t# CJK COMPATIBILITY IDEOGRAPH-2F8A7\n2F8A8\t慎\t# CJK COMPATIBILITY IDEOGRAPH-2F8A8\n2F8A9\t慌\t# CJK COMPATIBILITY IDEOGRAPH-2F8A9\n2F8AA\t慺\t# CJK COMPATIBILITY IDEOGRAPH-2F8AA\n2F8AB\t憎\t# CJK COMPATIBILITY IDEOGRAPH-2F8AB\n2F8AC\t憲\t# CJK COMPATIBILITY IDEOGRAPH-2F8AC\n2F8AD\t憤\t# CJK COMPATIBILITY IDEOGRAPH-2F8AD\n2F8AE\t憯\t# CJK COMPATIBILITY IDEOGRAPH-2F8AE\n2F8AF\t懞\t# CJK COMPATIBILITY IDEOGRAPH-2F8AF\n2F8B0\t懲\t# CJK COMPATIBILITY IDEOGRAPH-2F8B0\n2F8B1\t懶\t# CJK COMPATIBILITY IDEOGRAPH-2F8B1\n2F8B2\t成\t# CJK COMPATIBILITY IDEOGRAPH-2F8B2\n2F8B3\t戛\t# CJK COMPATIBILITY IDEOGRAPH-2F8B3\n2F8B4\t扝\t# CJK COMPATIBILITY IDEOGRAPH-2F8B4\n2F8B5\t抱\t# CJK COMPATIBILITY IDEOGRAPH-2F8B5\n2F8B6\t拔\t# CJK COMPATIBILITY IDEOGRAPH-2F8B6\n2F8B7\t捐\t# CJK COMPATIBILITY IDEOGRAPH-2F8B7\n2F8B8\t𢬌\t# CJK COMPATIBILITY IDEOGRAPH-2F8B8\n2F8B9\t挽\t# CJK COMPATIBILITY IDEOGRAPH-2F8B9\n2F8BA\t拼\t# CJK COMPATIBILITY IDEOGRAPH-2F8BA\n2F8BB\t捨\t# CJK COMPATIBILITY IDEOGRAPH-2F8BB\n2F8BC\t掃\t# CJK COMPATIBILITY IDEOGRAPH-2F8BC\n2F8BD\t揤\t# CJK COMPATIBILITY IDEOGRAPH-2F8BD\n2F8BE\t𢯱\t# CJK COMPATIBILITY IDEOGRAPH-2F8BE\n2F8BF\t搢\t# CJK COMPATIBILITY IDEOGRAPH-2F8BF\n2F8C0\t揅\t# CJK COMPATIBILITY IDEOGRAPH-2F8C0\n2F8C1\t掩\t# CJK COMPATIBILITY IDEOGRAPH-2F8C1\n2F8C2\t㨮\t# CJK COMPATIBILITY IDEOGRAPH-2F8C2\n2F8C3\t摩\t# CJK COMPATIBILITY IDEOGRAPH-2F8C3\n2F8C4\t摾\t# CJK COMPATIBILITY IDEOGRAPH-2F8C4\n2F8C5\t撝\t# CJK COMPATIBILITY IDEOGRAPH-2F8C5\n2F8C6\t摷\t# CJK COMPATIBILITY IDEOGRAPH-2F8C6\n2F8C7\t㩬\t# CJK COMPATIBILITY IDEOGRAPH-2F8C7\n2F8C8\t敏\t# CJK COMPATIBILITY IDEOGRAPH-2F8C8\n2F8C9\t敬\t# CJK COMPATIBILITY IDEOGRAPH-2F8C9\n2F8CA\t𣀊\t# CJK COMPATIBILITY IDEOGRAPH-2F8CA\n2F8CB\t旣\t# CJK COMPATIBILITY IDEOGRAPH-2F8CB\n2F8CC\t書\t# CJK COMPATIBILITY IDEOGRAPH-2F8CC\n2F8CD\t晉\t# CJK COMPATIBILITY IDEOGRAPH-2F8CD\n2F8CE\t㬙\t# CJK COMPATIBILITY IDEOGRAPH-2F8CE\n2F8CF\t暑\t# CJK COMPATIBILITY IDEOGRAPH-2F8CF\n2F8D0\t㬈\t# CJK COMPATIBILITY IDEOGRAPH-2F8D0\n2F8D1\t㫤\t# CJK COMPATIBILITY IDEOGRAPH-2F8D1\n2F8D2\t冒\t# CJK COMPATIBILITY IDEOGRAPH-2F8D2\n2F8D3\t冕\t# CJK COMPATIBILITY IDEOGRAPH-2F8D3\n2F8D4\t最\t# CJK COMPATIBILITY IDEOGRAPH-2F8D4\n2F8D5\t暜\t# CJK COMPATIBILITY IDEOGRAPH-2F8D5\n2F8D6\t肭\t# CJK COMPATIBILITY IDEOGRAPH-2F8D6\n2F8D7\t䏙\t# CJK COMPATIBILITY IDEOGRAPH-2F8D7\n2F8D8\t朗\t# CJK COMPATIBILITY IDEOGRAPH-2F8D8\n2F8D9\t望\t# CJK COMPATIBILITY IDEOGRAPH-2F8D9\n2F8DA\t朡\t# CJK COMPATIBILITY IDEOGRAPH-2F8DA\n2F8DB\t杞\t# CJK COMPATIBILITY IDEOGRAPH-2F8DB\n2F8DC\t杓\t# CJK COMPATIBILITY IDEOGRAPH-2F8DC\n2F8DD\t𣏃\t# CJK COMPATIBILITY IDEOGRAPH-2F8DD\n2F8DE\t㭉\t# CJK COMPATIBILITY IDEOGRAPH-2F8DE\n2F8DF\t柺\t# CJK COMPATIBILITY IDEOGRAPH-2F8DF\n2F8E0\t枅\t# CJK COMPATIBILITY IDEOGRAPH-2F8E0\n2F8E1\t桒\t# CJK COMPATIBILITY IDEOGRAPH-2F8E1\n2F8E2\t梅\t# CJK COMPATIBILITY IDEOGRAPH-2F8E2\n2F8E3\t𣑭\t# CJK COMPATIBILITY IDEOGRAPH-2F8E3\n2F8E4\t梎\t# CJK COMPATIBILITY IDEOGRAPH-2F8E4\n2F8E5\t栟\t# CJK COMPATIBILITY IDEOGRAPH-2F8E5\n2F8E6\t椔\t# CJK COMPATIBILITY IDEOGRAPH-2F8E6\n2F8E7\t㮝\t# CJK COMPATIBILITY IDEOGRAPH-2F8E7\n2F8E8\t楂\t# CJK COMPATIBILITY IDEOGRAPH-2F8E8\n2F8E9\t榣\t# CJK COMPATIBILITY IDEOGRAPH-2F8E9\n2F8EA\t槪\t# CJK COMPATIBILITY IDEOGRAPH-2F8EA\n2F8EB\t檨\t# CJK COMPATIBILITY IDEOGRAPH-2F8EB\n2F8EC\t𣚣\t# CJK COMPATIBILITY IDEOGRAPH-2F8EC\n2F8ED\t櫛\t# CJK COMPATIBILITY IDEOGRAPH-2F8ED\n2F8EE\t㰘\t# CJK COMPATIBILITY IDEOGRAPH-2F8EE\n2F8EF\t次\t# CJK COMPATIBILITY IDEOGRAPH-2F8EF\n2F8F0\t𣢧\t# CJK COMPATIBILITY IDEOGRAPH-2F8F0\n2F8F1\t歔\t# CJK COMPATIBILITY IDEOGRAPH-2F8F1\n2F8F2\t㱎\t# CJK COMPATIBILITY IDEOGRAPH-2F8F2\n2F8F3\t歲\t# CJK COMPATIBILITY IDEOGRAPH-2F8F3\n2F8F4\t殟\t# CJK COMPATIBILITY IDEOGRAPH-2F8F4\n2F8F5\t殺\t# CJK COMPATIBILITY IDEOGRAPH-2F8F5\n2F8F6\t殻\t# CJK COMPATIBILITY IDEOGRAPH-2F8F6\n2F8F7\t𣪍\t# CJK COMPATIBILITY IDEOGRAPH-2F8F7\n2F8F8\t𡴋\t# CJK COMPATIBILITY IDEOGRAPH-2F8F8\n2F8F9\t𣫺\t# CJK COMPATIBILITY IDEOGRAPH-2F8F9\n2F8FA\t汎\t# CJK COMPATIBILITY IDEOGRAPH-2F8FA\n2F8FB\t𣲼\t# CJK COMPATIBILITY IDEOGRAPH-2F8FB\n2F8FC\t沿\t# CJK COMPATIBILITY IDEOGRAPH-2F8FC\n2F8FD\t泍\t# CJK COMPATIBILITY IDEOGRAPH-2F8FD\n2F8FE\t汧\t# CJK COMPATIBILITY IDEOGRAPH-2F8FE\n2F8FF\t洖\t# CJK COMPATIBILITY IDEOGRAPH-2F8FF\n2F900\t派\t# CJK COMPATIBILITY IDEOGRAPH-2F900\n2F901\t海\t# CJK COMPATIBILITY IDEOGRAPH-2F901\n2F902\t流\t# CJK COMPATIBILITY IDEOGRAPH-2F902\n2F903\t浩\t# CJK COMPATIBILITY IDEOGRAPH-2F903\n2F904\t浸\t# CJK COMPATIBILITY IDEOGRAPH-2F904\n2F905\t涅\t# CJK COMPATIBILITY IDEOGRAPH-2F905\n2F906\t𣴞\t# CJK COMPATIBILITY IDEOGRAPH-2F906\n2F907\t洴\t# CJK COMPATIBILITY IDEOGRAPH-2F907\n2F908\t港\t# CJK COMPATIBILITY IDEOGRAPH-2F908\n2F909\t湮\t# CJK COMPATIBILITY IDEOGRAPH-2F909\n2F90A\t㴳\t# CJK COMPATIBILITY IDEOGRAPH-2F90A\n2F90B\t滋\t# CJK COMPATIBILITY IDEOGRAPH-2F90B\n2F90C\t滇\t# CJK COMPATIBILITY IDEOGRAPH-2F90C\n2F90D\t𣻑\t# CJK COMPATIBILITY IDEOGRAPH-2F90D\n2F90E\t淹\t# CJK COMPATIBILITY IDEOGRAPH-2F90E\n2F90F\t潮\t# CJK COMPATIBILITY IDEOGRAPH-2F90F\n2F910\t𣽞\t# CJK COMPATIBILITY IDEOGRAPH-2F910\n2F911\t𣾎\t# CJK COMPATIBILITY IDEOGRAPH-2F911\n2F912\t濆\t# CJK COMPATIBILITY IDEOGRAPH-2F912\n2F913\t瀹\t# CJK COMPATIBILITY IDEOGRAPH-2F913\n2F914\t瀞\t# CJK COMPATIBILITY IDEOGRAPH-2F914\n2F915\t瀛\t# CJK COMPATIBILITY IDEOGRAPH-2F915\n2F916\t㶖\t# CJK COMPATIBILITY IDEOGRAPH-2F916\n2F917\t灊\t# CJK COMPATIBILITY IDEOGRAPH-2F917\n2F918\t災\t# CJK COMPATIBILITY IDEOGRAPH-2F918\n2F919\t灷\t# CJK COMPATIBILITY IDEOGRAPH-2F919\n2F91A\t炭\t# CJK COMPATIBILITY IDEOGRAPH-2F91A\n2F91B\t𠔥\t# CJK COMPATIBILITY IDEOGRAPH-2F91B\n2F91C\t煅\t# CJK COMPATIBILITY IDEOGRAPH-2F91C\n2F91D\t𤉣\t# CJK COMPATIBILITY IDEOGRAPH-2F91D\n2F91E\t熜\t# CJK COMPATIBILITY IDEOGRAPH-2F91E\n2F91F\t𤎫\t# CJK COMPATIBILITY IDEOGRAPH-2F91F\n2F920\t爨\t# CJK COMPATIBILITY IDEOGRAPH-2F920\n2F921\t爵\t# CJK COMPATIBILITY IDEOGRAPH-2F921\n2F922\t牐\t# CJK COMPATIBILITY IDEOGRAPH-2F922\n2F923\t𤘈\t# CJK COMPATIBILITY IDEOGRAPH-2F923\n2F924\t犀\t# CJK COMPATIBILITY IDEOGRAPH-2F924\n2F925\t犕\t# CJK COMPATIBILITY IDEOGRAPH-2F925\n2F926\t𤜵\t# CJK COMPATIBILITY IDEOGRAPH-2F926\n2F927\t𤠔\t# CJK COMPATIBILITY IDEOGRAPH-2F927\n2F928\t獺\t# CJK COMPATIBILITY IDEOGRAPH-2F928\n2F929\t王\t# CJK COMPATIBILITY IDEOGRAPH-2F929\n2F92A\t㺬\t# CJK COMPATIBILITY IDEOGRAPH-2F92A\n2F92B\t玥\t# CJK COMPATIBILITY IDEOGRAPH-2F92B\n2F92C\t㺸\t# CJK COMPATIBILITY IDEOGRAPH-2F92C\n2F92D\t㺸\t# CJK COMPATIBILITY IDEOGRAPH-2F92D\n2F92E\t瑇\t# CJK COMPATIBILITY IDEOGRAPH-2F92E\n2F92F\t瑜\t# CJK COMPATIBILITY IDEOGRAPH-2F92F\n2F930\t瑱\t# CJK COMPATIBILITY IDEOGRAPH-2F930\n2F931\t璅\t# CJK COMPATIBILITY IDEOGRAPH-2F931\n2F932\t瓊\t# CJK COMPATIBILITY IDEOGRAPH-2F932\n2F933\t㼛\t# CJK COMPATIBILITY IDEOGRAPH-2F933\n2F934\t甤\t# CJK COMPATIBILITY IDEOGRAPH-2F934\n2F935\t𤰶\t# CJK COMPATIBILITY IDEOGRAPH-2F935\n2F936\t甾\t# CJK COMPATIBILITY IDEOGRAPH-2F936\n2F937\t𤲒\t# CJK COMPATIBILITY IDEOGRAPH-2F937\n2F938\t異\t# CJK COMPATIBILITY IDEOGRAPH-2F938\n2F939\t𢆟\t# CJK COMPATIBILITY IDEOGRAPH-2F939\n2F93A\t瘐\t# CJK COMPATIBILITY IDEOGRAPH-2F93A\n2F93B\t𤾡\t# CJK COMPATIBILITY IDEOGRAPH-2F93B\n2F93C\t𤾸\t# CJK COMPATIBILITY IDEOGRAPH-2F93C\n2F93D\t𥁄\t# CJK COMPATIBILITY IDEOGRAPH-2F93D\n2F93E\t㿼\t# CJK COMPATIBILITY IDEOGRAPH-2F93E\n2F93F\t䀈\t# CJK COMPATIBILITY IDEOGRAPH-2F93F\n2F940\t直\t# CJK COMPATIBILITY IDEOGRAPH-2F940\n2F941\t𥃳\t# CJK COMPATIBILITY IDEOGRAPH-2F941\n2F942\t𥃲\t# CJK COMPATIBILITY IDEOGRAPH-2F942\n2F943\t𥄙\t# CJK COMPATIBILITY IDEOGRAPH-2F943\n2F944\t𥄳\t# CJK COMPATIBILITY IDEOGRAPH-2F944\n2F945\t眞\t# CJK COMPATIBILITY IDEOGRAPH-2F945\n2F946\t真\t# CJK COMPATIBILITY IDEOGRAPH-2F946\n2F947\t真\t# CJK COMPATIBILITY IDEOGRAPH-2F947\n2F948\t睊\t# CJK COMPATIBILITY IDEOGRAPH-2F948\n2F949\t䀹\t# CJK COMPATIBILITY IDEOGRAPH-2F949\n2F94A\t瞋\t# CJK COMPATIBILITY IDEOGRAPH-2F94A\n2F94B\t䁆\t# CJK COMPATIBILITY IDEOGRAPH-2F94B\n2F94C\t䂖\t# CJK COMPATIBILITY IDEOGRAPH-2F94C\n2F94D\t𥐝\t# CJK COMPATIBILITY IDEOGRAPH-2F94D\n2F94E\t硎\t# CJK COMPATIBILITY IDEOGRAPH-2F94E\n2F94F\t碌\t# CJK COMPATIBILITY IDEOGRAPH-2F94F\n2F950\t磌\t# CJK COMPATIBILITY IDEOGRAPH-2F950\n2F951\t䃣\t# CJK COMPATIBILITY IDEOGRAPH-2F951\n2F952\t𥘦\t# CJK COMPATIBILITY IDEOGRAPH-2F952\n2F953\t祖\t# CJK COMPATIBILITY IDEOGRAPH-2F953\n2F954\t𥚚\t# CJK COMPATIBILITY IDEOGRAPH-2F954\n2F955\t𥛅\t# CJK COMPATIBILITY IDEOGRAPH-2F955\n2F956\t福\t# CJK COMPATIBILITY IDEOGRAPH-2F956\n2F957\t秫\t# CJK COMPATIBILITY IDEOGRAPH-2F957\n2F958\t䄯\t# CJK COMPATIBILITY IDEOGRAPH-2F958\n2F959\t穀\t# CJK COMPATIBILITY IDEOGRAPH-2F959\n2F95A\t穊\t# CJK COMPATIBILITY IDEOGRAPH-2F95A\n2F95B\t穏\t# CJK COMPATIBILITY IDEOGRAPH-2F95B\n2F95C\t𥥼\t# CJK COMPATIBILITY IDEOGRAPH-2F95C\n2F95D\t𥪧\t# CJK COMPATIBILITY IDEOGRAPH-2F95D\n2F95E\t𥪧\t# CJK COMPATIBILITY IDEOGRAPH-2F95E\n2F95F\t竮\t# CJK COMPATIBILITY IDEOGRAPH-2F95F\n2F960\t䈂\t# CJK COMPATIBILITY IDEOGRAPH-2F960\n2F961\t𥮫\t# CJK COMPATIBILITY IDEOGRAPH-2F961\n2F962\t篆\t# CJK COMPATIBILITY IDEOGRAPH-2F962\n2F963\t築\t# CJK COMPATIBILITY IDEOGRAPH-2F963\n2F964\t䈧\t# CJK COMPATIBILITY IDEOGRAPH-2F964\n2F965\t𥲀\t# CJK COMPATIBILITY IDEOGRAPH-2F965\n2F966\t糒\t# CJK COMPATIBILITY IDEOGRAPH-2F966\n2F967\t䊠\t# CJK COMPATIBILITY IDEOGRAPH-2F967\n2F968\t糨\t# CJK COMPATIBILITY IDEOGRAPH-2F968\n2F969\t糣\t# CJK COMPATIBILITY IDEOGRAPH-2F969\n2F96A\t紀\t# CJK COMPATIBILITY IDEOGRAPH-2F96A\n2F96B\t𥾆\t# CJK COMPATIBILITY IDEOGRAPH-2F96B\n2F96C\t絣\t# CJK COMPATIBILITY IDEOGRAPH-2F96C\n2F96D\t䌁\t# CJK COMPATIBILITY IDEOGRAPH-2F96D\n2F96E\t緇\t# CJK COMPATIBILITY IDEOGRAPH-2F96E\n2F96F\t縂\t# CJK COMPATIBILITY IDEOGRAPH-2F96F\n2F970\t繅\t# CJK COMPATIBILITY IDEOGRAPH-2F970\n2F971\t䌴\t# CJK COMPATIBILITY IDEOGRAPH-2F971\n2F972\t𦈨\t# CJK COMPATIBILITY IDEOGRAPH-2F972\n2F973\t𦉇\t# CJK COMPATIBILITY IDEOGRAPH-2F973\n2F974\t䍙\t# CJK COMPATIBILITY IDEOGRAPH-2F974\n2F975\t𦋙\t# CJK COMPATIBILITY IDEOGRAPH-2F975\n2F976\t罺\t# CJK COMPATIBILITY IDEOGRAPH-2F976\n2F977\t𦌾\t# CJK COMPATIBILITY IDEOGRAPH-2F977\n2F978\t羕\t# CJK COMPATIBILITY IDEOGRAPH-2F978\n2F979\t翺\t# CJK COMPATIBILITY IDEOGRAPH-2F979\n2F97A\t者\t# CJK COMPATIBILITY IDEOGRAPH-2F97A\n2F97B\t𦓚\t# CJK COMPATIBILITY IDEOGRAPH-2F97B\n2F97C\t𦔣\t# CJK COMPATIBILITY IDEOGRAPH-2F97C\n2F97D\t聠\t# CJK COMPATIBILITY IDEOGRAPH-2F97D\n2F97E\t𦖨\t# CJK COMPATIBILITY IDEOGRAPH-2F97E\n2F97F\t聰\t# CJK COMPATIBILITY IDEOGRAPH-2F97F\n2F980\t𣍟\t# CJK COMPATIBILITY IDEOGRAPH-2F980\n2F981\t䏕\t# CJK COMPATIBILITY IDEOGRAPH-2F981\n2F982\t育\t# CJK COMPATIBILITY IDEOGRAPH-2F982\n2F983\t脃\t# CJK COMPATIBILITY IDEOGRAPH-2F983\n2F984\t䐋\t# CJK COMPATIBILITY IDEOGRAPH-2F984\n2F985\t脾\t# CJK COMPATIBILITY IDEOGRAPH-2F985\n2F986\t媵\t# CJK COMPATIBILITY IDEOGRAPH-2F986\n2F987\t𦞧\t# CJK COMPATIBILITY IDEOGRAPH-2F987\n2F988\t𦞵\t# CJK COMPATIBILITY IDEOGRAPH-2F988\n2F989\t𣎓\t# CJK COMPATIBILITY IDEOGRAPH-2F989\n2F98A\t𣎜\t# CJK COMPATIBILITY IDEOGRAPH-2F98A\n2F98B\t舁\t# CJK COMPATIBILITY IDEOGRAPH-2F98B\n2F98C\t舄\t# CJK COMPATIBILITY IDEOGRAPH-2F98C\n2F98D\t辞\t# CJK COMPATIBILITY IDEOGRAPH-2F98D\n2F98E\t䑫\t# CJK COMPATIBILITY IDEOGRAPH-2F98E\n2F98F\t芑\t# CJK COMPATIBILITY IDEOGRAPH-2F98F\n2F990\t芋\t# CJK COMPATIBILITY IDEOGRAPH-2F990\n2F991\t芝\t# CJK COMPATIBILITY IDEOGRAPH-2F991\n2F992\t劳\t# CJK COMPATIBILITY IDEOGRAPH-2F992\n2F993\t花\t# CJK COMPATIBILITY IDEOGRAPH-2F993\n2F994\t芳\t# CJK COMPATIBILITY IDEOGRAPH-2F994\n2F995\t芽\t# CJK COMPATIBILITY IDEOGRAPH-2F995\n2F996\t苦\t# CJK COMPATIBILITY IDEOGRAPH-2F996\n2F997\t𦬼\t# CJK COMPATIBILITY IDEOGRAPH-2F997\n2F998\t若\t# CJK COMPATIBILITY IDEOGRAPH-2F998\n2F999\t茝\t# CJK COMPATIBILITY IDEOGRAPH-2F999\n2F99A\t荣\t# CJK COMPATIBILITY IDEOGRAPH-2F99A\n2F99B\t莭\t# CJK COMPATIBILITY IDEOGRAPH-2F99B\n2F99C\t茣\t# CJK COMPATIBILITY IDEOGRAPH-2F99C\n2F99D\t莽\t# CJK COMPATIBILITY IDEOGRAPH-2F99D\n2F99E\t菧\t# CJK COMPATIBILITY IDEOGRAPH-2F99E\n2F99F\t著\t# CJK COMPATIBILITY IDEOGRAPH-2F99F\n2F9A0\t荓\t# CJK COMPATIBILITY IDEOGRAPH-2F9A0\n2F9A1\t菊\t# CJK COMPATIBILITY IDEOGRAPH-2F9A1\n2F9A2\t菌\t# CJK COMPATIBILITY IDEOGRAPH-2F9A2\n2F9A3\t菜\t# CJK COMPATIBILITY IDEOGRAPH-2F9A3\n2F9A4\t𦰶\t# CJK COMPATIBILITY IDEOGRAPH-2F9A4\n2F9A5\t𦵫\t# CJK COMPATIBILITY IDEOGRAPH-2F9A5\n2F9A6\t𦳕\t# CJK COMPATIBILITY IDEOGRAPH-2F9A6\n2F9A7\t䔫\t# CJK COMPATIBILITY IDEOGRAPH-2F9A7\n2F9A8\t蓱\t# CJK COMPATIBILITY IDEOGRAPH-2F9A8\n2F9A9\t蓳\t# CJK COMPATIBILITY IDEOGRAPH-2F9A9\n2F9AA\t蔖\t# CJK COMPATIBILITY IDEOGRAPH-2F9AA\n2F9AB\t𧏊\t# CJK COMPATIBILITY IDEOGRAPH-2F9AB\n2F9AC\t蕤\t# CJK COMPATIBILITY IDEOGRAPH-2F9AC\n2F9AD\t𦼬\t# CJK COMPATIBILITY IDEOGRAPH-2F9AD\n2F9AE\t䕝\t# CJK COMPATIBILITY IDEOGRAPH-2F9AE\n2F9AF\t䕡\t# CJK COMPATIBILITY IDEOGRAPH-2F9AF\n2F9B0\t𦾱\t# CJK COMPATIBILITY IDEOGRAPH-2F9B0\n2F9B1\t𧃒\t# CJK COMPATIBILITY IDEOGRAPH-2F9B1\n2F9B2\t䕫\t# CJK COMPATIBILITY IDEOGRAPH-2F9B2\n2F9B3\t虐\t# CJK COMPATIBILITY IDEOGRAPH-2F9B3\n2F9B4\t虜\t# CJK COMPATIBILITY IDEOGRAPH-2F9B4\n2F9B5\t虧\t# CJK COMPATIBILITY IDEOGRAPH-2F9B5\n2F9B6\t虩\t# CJK COMPATIBILITY IDEOGRAPH-2F9B6\n2F9B7\t蚩\t# CJK COMPATIBILITY IDEOGRAPH-2F9B7\n2F9B8\t蚈\t# CJK COMPATIBILITY IDEOGRAPH-2F9B8\n2F9B9\t蜎\t# CJK COMPATIBILITY IDEOGRAPH-2F9B9\n2F9BA\t蛢\t# CJK COMPATIBILITY IDEOGRAPH-2F9BA\n2F9BB\t蝹\t# CJK COMPATIBILITY IDEOGRAPH-2F9BB\n2F9BC\t蜨\t# CJK COMPATIBILITY IDEOGRAPH-2F9BC\n2F9BD\t蝫\t# CJK COMPATIBILITY IDEOGRAPH-2F9BD\n2F9BE\t螆\t# CJK COMPATIBILITY IDEOGRAPH-2F9BE\n2F9BF\t䗗\t# CJK COMPATIBILITY IDEOGRAPH-2F9BF\n2F9C0\t蟡\t# CJK COMPATIBILITY IDEOGRAPH-2F9C0\n2F9C1\t蠁\t# CJK COMPATIBILITY IDEOGRAPH-2F9C1\n2F9C2\t䗹\t# CJK COMPATIBILITY IDEOGRAPH-2F9C2\n2F9C3\t衠\t# CJK COMPATIBILITY IDEOGRAPH-2F9C3\n2F9C4\t衣\t# CJK COMPATIBILITY IDEOGRAPH-2F9C4\n2F9C5\t𧙧\t# CJK COMPATIBILITY IDEOGRAPH-2F9C5\n2F9C6\t裗\t# CJK COMPATIBILITY IDEOGRAPH-2F9C6\n2F9C7\t裞\t# CJK COMPATIBILITY IDEOGRAPH-2F9C7\n2F9C8\t䘵\t# CJK COMPATIBILITY IDEOGRAPH-2F9C8\n2F9C9\t裺\t# CJK COMPATIBILITY IDEOGRAPH-2F9C9\n2F9CA\t㒻\t# CJK COMPATIBILITY IDEOGRAPH-2F9CA\n2F9CB\t𧢮\t# CJK COMPATIBILITY IDEOGRAPH-2F9CB\n2F9CC\t𧥦\t# CJK COMPATIBILITY IDEOGRAPH-2F9CC\n2F9CD\t䚾\t# CJK COMPATIBILITY IDEOGRAPH-2F9CD\n2F9CE\t䛇\t# CJK COMPATIBILITY IDEOGRAPH-2F9CE\n2F9CF\t誠\t# CJK COMPATIBILITY IDEOGRAPH-2F9CF\n2F9D0\t諭\t# CJK COMPATIBILITY IDEOGRAPH-2F9D0\n2F9D1\t變\t# CJK COMPATIBILITY IDEOGRAPH-2F9D1\n2F9D2\t豕\t# CJK COMPATIBILITY IDEOGRAPH-2F9D2\n2F9D3\t𧲨\t# CJK COMPATIBILITY IDEOGRAPH-2F9D3\n2F9D4\t貫\t# CJK COMPATIBILITY IDEOGRAPH-2F9D4\n2F9D5\t賁\t# CJK COMPATIBILITY IDEOGRAPH-2F9D5\n2F9D6\t贛\t# CJK COMPATIBILITY IDEOGRAPH-2F9D6\n2F9D7\t起\t# CJK COMPATIBILITY IDEOGRAPH-2F9D7\n2F9D8\t𧼯\t# CJK COMPATIBILITY IDEOGRAPH-2F9D8\n2F9D9\t𠠄\t# CJK COMPATIBILITY IDEOGRAPH-2F9D9\n2F9DA\t跋\t# CJK COMPATIBILITY IDEOGRAPH-2F9DA\n2F9DB\t趼\t# CJK COMPATIBILITY IDEOGRAPH-2F9DB\n2F9DC\t跰\t# CJK COMPATIBILITY IDEOGRAPH-2F9DC\n2F9DD\t𠣞\t# CJK COMPATIBILITY IDEOGRAPH-2F9DD\n2F9DE\t軔\t# CJK COMPATIBILITY IDEOGRAPH-2F9DE\n2F9DF\t輸\t# CJK COMPATIBILITY IDEOGRAPH-2F9DF\n2F9E0\t𨗒\t# CJK COMPATIBILITY IDEOGRAPH-2F9E0\n2F9E1\t𨗭\t# CJK COMPATIBILITY IDEOGRAPH-2F9E1\n2F9E2\t邔\t# CJK COMPATIBILITY IDEOGRAPH-2F9E2\n2F9E3\t郱\t# CJK COMPATIBILITY IDEOGRAPH-2F9E3\n2F9E4\t鄑\t# CJK COMPATIBILITY IDEOGRAPH-2F9E4\n2F9E5\t𨜮\t# CJK COMPATIBILITY IDEOGRAPH-2F9E5\n2F9E6\t鄛\t# CJK COMPATIBILITY IDEOGRAPH-2F9E6\n2F9E7\t鈸\t# CJK COMPATIBILITY IDEOGRAPH-2F9E7\n2F9E8\t鋗\t# CJK COMPATIBILITY IDEOGRAPH-2F9E8\n2F9E9\t鋘\t# CJK COMPATIBILITY IDEOGRAPH-2F9E9\n2F9EA\t鉼\t# CJK COMPATIBILITY IDEOGRAPH-2F9EA\n2F9EB\t鏹\t# CJK COMPATIBILITY IDEOGRAPH-2F9EB\n2F9EC\t鐕\t# CJK COMPATIBILITY IDEOGRAPH-2F9EC\n2F9ED\t𨯺\t# CJK COMPATIBILITY IDEOGRAPH-2F9ED\n2F9EE\t開\t# CJK COMPATIBILITY IDEOGRAPH-2F9EE\n2F9EF\t䦕\t# CJK COMPATIBILITY IDEOGRAPH-2F9EF\n2F9F0\t閷\t# CJK COMPATIBILITY IDEOGRAPH-2F9F0\n2F9F1\t𨵷\t# CJK COMPATIBILITY IDEOGRAPH-2F9F1\n2F9F2\t䧦\t# CJK COMPATIBILITY IDEOGRAPH-2F9F2\n2F9F3\t雃\t# CJK COMPATIBILITY IDEOGRAPH-2F9F3\n2F9F4\t嶲\t# CJK COMPATIBILITY IDEOGRAPH-2F9F4\n2F9F5\t霣\t# CJK COMPATIBILITY IDEOGRAPH-2F9F5\n2F9F6\t𩅅\t# CJK COMPATIBILITY IDEOGRAPH-2F9F6\n2F9F7\t𩈚\t# CJK COMPATIBILITY IDEOGRAPH-2F9F7\n2F9F8\t䩮\t# CJK COMPATIBILITY IDEOGRAPH-2F9F8\n2F9F9\t䩶\t# CJK COMPATIBILITY IDEOGRAPH-2F9F9\n2F9FA\t韠\t# CJK COMPATIBILITY IDEOGRAPH-2F9FA\n2F9FB\t𩐊\t# CJK COMPATIBILITY IDEOGRAPH-2F9FB\n2F9FC\t䪲\t# CJK COMPATIBILITY IDEOGRAPH-2F9FC\n2F9FD\t𩒖\t# CJK COMPATIBILITY IDEOGRAPH-2F9FD\n2F9FE\t頋\t# CJK COMPATIBILITY IDEOGRAPH-2F9FE\n2F9FF\t頋\t# CJK COMPATIBILITY IDEOGRAPH-2F9FF\n2FA00\t頩\t# CJK COMPATIBILITY IDEOGRAPH-2FA00\n2FA01\t𩖶\t# CJK COMPATIBILITY IDEOGRAPH-2FA01\n2FA02\t飢\t# CJK COMPATIBILITY IDEOGRAPH-2FA02\n2FA03\t䬳\t# CJK COMPATIBILITY IDEOGRAPH-2FA03\n2FA04\t餩\t# CJK COMPATIBILITY IDEOGRAPH-2FA04\n2FA05\t馧\t# CJK COMPATIBILITY IDEOGRAPH-2FA05\n2FA06\t駂\t# CJK COMPATIBILITY IDEOGRAPH-2FA06\n2FA07\t駾\t# CJK COMPATIBILITY IDEOGRAPH-2FA07\n2FA08\t䯎\t# CJK COMPATIBILITY IDEOGRAPH-2FA08\n2FA09\t𩬰\t# CJK COMPATIBILITY IDEOGRAPH-2FA09\n2FA0A\t鬒\t# CJK COMPATIBILITY IDEOGRAPH-2FA0A\n2FA0B\t鱀\t# CJK COMPATIBILITY IDEOGRAPH-2FA0B\n2FA0C\t鳽\t# CJK COMPATIBILITY IDEOGRAPH-2FA0C\n2FA0D\t䳎\t# CJK COMPATIBILITY IDEOGRAPH-2FA0D\n2FA0E\t䳭\t# CJK COMPATIBILITY IDEOGRAPH-2FA0E\n2FA0F\t鵧\t# CJK COMPATIBILITY IDEOGRAPH-2FA0F\n2FA10\t𪃎\t# CJK COMPATIBILITY IDEOGRAPH-2FA10\n2FA11\t䳸\t# CJK COMPATIBILITY IDEOGRAPH-2FA11\n2FA12\t𪄅\t# CJK COMPATIBILITY IDEOGRAPH-2FA12\n2FA13\t𪈎\t# CJK COMPATIBILITY IDEOGRAPH-2FA13\n2FA14\t𪊑\t# CJK COMPATIBILITY IDEOGRAPH-2FA14\n2FA15\t麻\t# CJK COMPATIBILITY IDEOGRAPH-2FA15\n2FA16\t䵖\t# CJK COMPATIBILITY IDEOGRAPH-2FA16\n2FA17\t黹\t# CJK COMPATIBILITY IDEOGRAPH-2FA17\n2FA18\t黾\t# CJK COMPATIBILITY IDEOGRAPH-2FA18\n2FA19\t鼅\t# CJK COMPATIBILITY IDEOGRAPH-2FA19\n2FA1A\t鼏\t# CJK COMPATIBILITY IDEOGRAPH-2FA1A\n2FA1B\t鼖\t# CJK COMPATIBILITY IDEOGRAPH-2FA1B\n2FA1C\t鼻\t# CJK COMPATIBILITY IDEOGRAPH-2FA1C\n2FA1D\t𪘀\t# CJK COMPATIBILITY IDEOGRAPH-2FA1D\n"
  },
  {
    "path": "Source/Extensions/iconv/StopEncoderFallback.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n    internal class EncoderResult\r\n    {\r\n        public int firstFallbackCharIndex = -1;\r\n    }\r\n\r\n    internal class StopEncoderFallback : EncoderFallback\r\n    {\r\n        internal EncoderResult result;\r\n        public StopEncoderFallback(EncoderResult result)\r\n        {\r\n            this.result = result;\r\n        }\r\n\r\n        public override EncoderFallbackBuffer CreateFallbackBuffer()\r\n        {\r\n            return new StopEncoderFallbackBuffer(this);\r\n        }\r\n\r\n        public override int MaxCharCount\r\n        {\r\n            get { return 0; }\r\n        }\r\n\r\n\r\n    }\r\n\r\n    internal class StopEncoderFallbackBuffer : EncoderFallbackBuffer\r\n    {\r\n        private EncoderResult/*!*/result;\r\n\r\n        public StopEncoderFallbackBuffer(StopEncoderFallback fallback)\r\n        {\r\n            this.result = fallback.result ?? new EncoderResult();\r\n        }\r\n\r\n        public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)\r\n        {\r\n            return Fallback(charUnknownHigh, index);\r\n        }\r\n\r\n        public override bool Fallback(char charUnknown, int index)\r\n        {\r\n            if (result.firstFallbackCharIndex < 0)\r\n            {\r\n                // TODO: Stop encoding the remaining characters\r\n                result.firstFallbackCharIndex = index;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        public override char GetNextChar()\r\n        {\r\n            return '\\0';\r\n        }\r\n\r\n        public override bool MovePrevious()\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public override int Remaining\r\n        {\r\n            get { return 0; }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.239\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.Library.Iconv {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Strings {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Strings() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.Library.Iconv.Strings\", typeof(Strings).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Detected an illegal character in input string.\r\n        /// </summary>\r\n        internal static string illegal_character {\r\n            get {\r\n                return ResourceManager.GetString(\"illegal_character\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to # Copyright (C) 1999-2003 Free Software Foundation, Inc.\n        ///# This file is part of the GNU LIBICONV Library.\n        ///#\n        ///# The GNU LIBICONV Library is free software; you can redistribute it\n        ///# and/or modify it under the terms of the GNU Library General Public\n        ///# License as published by the Free Software Foundation; either version 2\n        ///# of the License, or (at your option) any later version.\n        ///#\n        ///# The GNU LIBICONV Library is distributed in the hope that it will be\n        ///# useful, but WITHOUT ANY WARRANTY; without even the implied war [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string translit {\r\n            get {\r\n                return ResourceManager.GetString(\"translit\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Wrong charset &apos;{0}&apos;, conversion from &apos;{1}&apos; to &apos;{2}&apos; is not allowed.\r\n        /// </summary>\r\n        internal static string wrong_charset {\r\n            get {\r\n                return ResourceManager.GetString(\"wrong_charset\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"illegal_character\" xml:space=\"preserve\">\r\n    <value>Detected an illegal character in input string</value>\r\n  </data>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"translit\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>Resources\\translit.def;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250</value>\r\n  </data>\r\n  <data name=\"wrong_charset\" xml:space=\"preserve\">\r\n    <value>Wrong charset '{0}', conversion from '{1}' to '{2}' is not allowed</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/Extensions/iconv/TranslitEncoderFallback.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Iconv\r\n{\r\n    internal class TranslitEncoderFallback : EncoderFallback\r\n    {\r\n\r\n\r\n        public override EncoderFallbackBuffer CreateFallbackBuffer()\r\n        {\r\n            return new TranslitEncoderFallbackBuffer(this);\r\n        }\r\n\r\n        public override int MaxCharCount\r\n        {\r\n            get { return TranslitEncoderFallbackBuffer.transliterationsMaxCharCount; }\r\n        }\r\n\r\n        \r\n    }\r\n\r\n    internal class TranslitEncoderFallbackBuffer : EncoderFallbackBuffer\r\n    {\r\n        /// <summary>\r\n        /// String that will be returned as the replacement for the fallbacked character.\r\n        /// </summary>\r\n        private string currentReplacement = null;\r\n\r\n        /// <summary>\r\n        /// Index in the <see cref=\"currentReplacement\"/>.\r\n        /// </summary>\r\n        private int currentReplacementIndex;\r\n\r\n        private bool IsIndexValid(int index)\r\n        {\r\n            return (currentReplacement != null && index >= 0 && index < currentReplacement.Length);\r\n        }\r\n\r\n        private static Dictionary<char, string>/*!!*/transliterations;\r\n        internal static int transliterationsMaxCharCount;\r\n\r\n        static TranslitEncoderFallbackBuffer()\r\n        {\r\n            transliterations = new Dictionary<char, string>(3900);\r\n\r\n            // initialize the transliterations table:\r\n\r\n            // load \"translit.def\" file content:\r\n            using (var translit = new System.IO.StringReader(Strings.translit))\r\n            {\r\n                string line;\r\n                while ((line = translit.ReadLine()) != null)\r\n                {\r\n                    // remove comments:\r\n                    int cut_from = line.IndexOf('#');\r\n                    if (cut_from >= 0) line = line.Remove(cut_from);\r\n\r\n                    // skip empty lines:\r\n                    if (line.Length == 0) continue;\r\n\r\n                    //\r\n                    string[] parts = line.Split('\\t');  // HEX\\tTRANSLIT\\t\r\n                    Debug.Assert(parts != null && parts.Length == 3);\r\n\r\n                    int charNumber = int.Parse(parts[0], System.Globalization.NumberStyles.HexNumber);\r\n                    string str = parts[1];\r\n\r\n                    if (transliterationsMaxCharCount < str.Length)\r\n                        transliterationsMaxCharCount = str.Length;\r\n\r\n                    transliterations[(char)charNumber] = str;\r\n                }\r\n            }\r\n        }\r\n\r\n        public TranslitEncoderFallbackBuffer(TranslitEncoderFallback fallback)\r\n        {\r\n\r\n        }\r\n\r\n        public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public override bool Fallback(char charUnknown, int index)\r\n        {\r\n            if (transliterations.TryGetValue(charUnknown, out currentReplacement))\r\n            {\r\n                currentReplacementIndex = -1;\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        public override char GetNextChar()\r\n        {\r\n            ++currentReplacementIndex;\r\n\r\n            if (IsIndexValid(currentReplacementIndex))\r\n                return currentReplacement[currentReplacementIndex];\r\n            else\r\n                return '\\0';\r\n        }\r\n\r\n        public override bool MovePrevious()\r\n        {\r\n            if (currentReplacementIndex >= 0 && currentReplacement != null)\r\n            {\r\n                currentReplacementIndex--;\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public override int Remaining\r\n        {\r\n            get { return IsIndexValid(currentReplacementIndex + 1) ? (currentReplacement.Length - currentReplacementIndex - 1) : 0; }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/iconv/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetIconv\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/iconv/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet>\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetIconv\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/mbstring/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing PHP.Core;\r\n\r\n[assembly: AssemblyTitle(\"Phalanger mbstring\")]\r\n[assembly: AssemblyDescription(\"Phalanger Managed Extension - mbstring\")]\r\n\r\n[assembly: PhpLibrary(typeof(PHP.Library.Strings.MbstringLibraryDescriptor), \"mbstring\", new string[] { \"mbstring\" })]\r\n"
  },
  {
    "path": "Source/Extensions/mbstring/Configuration.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Web;\r\nusing System.Xml;\r\nusing System.Collections;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Library.Strings\r\n{\r\n\t#region Local Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script independent mbstring configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class MbstringLocalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal MbstringLocalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (MbstringLocalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t#region Global Configuration\r\n\r\n\t/// <summary>\r\n\t/// Script dependent MSSQL configuration.\r\n\t/// </summary>\r\n\t[Serializable]\r\n\tpublic sealed class MbstringGlobalConfig : IPhpConfiguration, IPhpConfigurationSection\r\n\t{\r\n\t\tinternal MbstringGlobalConfig() { }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Loads configuration from XML.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"name\"></param>\r\n\t\t/// <param name=\"value\"></param>\r\n\t\t/// <param name=\"node\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tpublic bool Parse(string name, string value, XmlNode node)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\t\tdefault:\r\n\t\t\t\t    return false;\r\n\t\t\t}\r\n\t\t\t//return true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a deep copy of the configuration record.\r\n\t\t/// </summary>\r\n\t\t/// <returns>The copy.</returns>\r\n\t\tpublic IPhpConfiguration DeepCopy()\r\n\t\t{\r\n            return (MbstringGlobalConfig)this.MemberwiseClone();\r\n\t\t}\r\n\t}\r\n\r\n\t#endregion\r\n\r\n\t/// <summary>\r\n\t/// mbstring extension configuration.\r\n\t/// </summary>\r\n    public static class MbstringConfiguration\r\n\t{\r\n\t\t#region Legacy Configuration\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets, sets, or restores a value of a legacy configuration option.\r\n\t\t/// </summary>\r\n\t\tprivate static object GetSetRestore(LocalConfiguration config, string option, object value, IniAction action)\r\n\t\t{\r\n            MbstringLocalConfig local = (MbstringLocalConfig)config.GetLibraryConfig(MbstringLibraryDescriptor.Singleton);\r\n            MbstringLocalConfig @default = DefaultLocal;\r\n            MbstringGlobalConfig global = Global;\r\n\r\n\t\t\t//switch (option)\r\n\t\t\t//{\r\n                //// local:\r\n\r\n                //case \"mssql.connect_timeout\":\r\n                //return PhpIni.GSR(ref local.ConnectTimeout, @default.ConnectTimeout, value, action);\r\n\r\n                //case \"mssql.timeout\":\r\n                //return PhpIni.GSR(ref local.Timeout, @default.Timeout, value, action);\r\n\r\n                //case \"mssql.batchsize\":\r\n                //return PhpIni.GSR(ref local.BatchSize, @default.BatchSize, value, action);\r\n\r\n                //// global:  \r\n\r\n                //case \"mssql.max_links\":\r\n                //Debug.Assert(action == IniAction.Get);\r\n                //return PhpIni.GSR(ref global.MaxConnections, 0, null, action);\r\n\r\n                //case \"mssql.secure_connection\":\r\n                //Debug.Assert(action == IniAction.Get);\r\n                //return PhpIni.GSR(ref global.NTAuthentication, false, null, action);\r\n\t\t\t//}\r\n\r\n\t\t\tDebug.Fail(\"Option '\" + option + \"' is supported but not implemented.\");\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes MySql legacy options and their values to XML text stream.\r\n\t\t/// Skips options whose values are the same as default values of Phalanger.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"writer\">XML writer.</param>\r\n\t\t/// <param name=\"options\">A hashtable containing PHP names and option values. Consumed options are removed from the table.</param>\r\n\t\t/// <param name=\"writePhpNames\">Whether to add \"phpName\" attribute to option nodes.</param>\r\n\t\tpublic static void LegacyOptionsToXml(XmlTextWriter writer, Hashtable options, bool writePhpNames) // GENERICS:<string,string>\r\n\t\t{\r\n\t\t\tif (writer == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"writer\");\r\n\t\t\tif (options == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"options\");\r\n\r\n\t\t\tMbstringLocalConfig local = new MbstringLocalConfig();\r\n\t\t\tMbstringGlobalConfig global = new MbstringGlobalConfig();\r\n\t\t\tPhpIniXmlWriter ow = new PhpIniXmlWriter(writer, options, writePhpNames);\r\n\r\n            ow.StartSection(\"mbstring\");\r\n\r\n            //// local:\r\n            //ow.WriteOption(\"mssql.connect_timeout\", \"ConnectTimeout\", 5, local.ConnectTimeout);\r\n            //ow.WriteOption(\"mssql.timeout\", \"Timeout\", 60, local.Timeout);\r\n            //ow.WriteOption(\"mssql.batchsize\", \"BatchSize\", 0, local.BatchSize);\r\n\r\n            //// global:\r\n            //ow.WriteOption(\"mssql.max_links\", \"MaxConnections\", -1, global.MaxConnections);\r\n            //ow.WriteOption(\"mssql.secure_connection\", \"NTAuthentication\", false, global.NTAuthentication);\r\n\r\n\t\t\tow.WriteEnd();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Registers legacy ini-options.\r\n\t\t/// </summary>\r\n\t\tinternal static void RegisterLegacyOptions()\r\n\t\t{\r\n\t\t\t//const string s = MbstringLibraryDescriptor.ExtensionName;\r\n\t\t\t//GetSetRestoreDelegate d = new GetSetRestoreDelegate(GetSetRestore);\r\n\r\n            //// global:\r\n            //IniOptions.Register(\"mssql.max_links\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.secure_connection\", IniFlags.Supported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.allow_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n            //IniOptions.Register(\"mssql.max_persistent\", IniFlags.Unsupported | IniFlags.Global, d, s);\r\n\r\n            //// local:\r\n            //IniOptions.Register(\"mssql.connect_timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.timeout\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.batchsize\", IniFlags.Supported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_error_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.min_message_severity\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.compatability_mode\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textsize\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.textlimit\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.datetimeconvert\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n            //IniOptions.Register(\"mssql.max_procs\", IniFlags.Unsupported | IniFlags.Local, d, s);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Configuration Getters\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the library configuration associated with the current script context.\r\n\t\t/// </summary>\r\n\t\tpublic static MbstringLocalConfig Local\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MbstringLocalConfig)Configuration.Local.GetLibraryConfig(MbstringLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the default library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static MbstringLocalConfig DefaultLocal\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MbstringLocalConfig)Configuration.DefaultLocal.GetLibraryConfig(MbstringLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets the global library configuration.\r\n\t\t/// </summary>\r\n\t\tpublic static MbstringGlobalConfig Global\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn (MbstringGlobalConfig)Configuration.Global.GetLibraryConfig(MbstringLibraryDescriptor.Singleton);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Gets local configuration associated with a specified script context.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"context\">Scritp context.</param>\r\n\t\t/// <returns>Local library configuration.</returns>\r\n\t\tpublic static MbstringLocalConfig GetLocal(ScriptContext/*!*/ context)\r\n\t\t{\r\n\t\t\tif (context == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"context\");\r\n\r\n\t\t\treturn (MbstringLocalConfig)context.Config.GetLibraryConfig(MbstringLibraryDescriptor.Singleton);\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/Extensions/mbstring/Extension.mbstring.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <Import Project=\"..\\..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{533EA853-45F3-483D-8C89-CF686249CC5E}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <AssemblyName>PhpNet.Extension.Mbstring</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>..\\Extensions.snk</AssemblyOriginatorKeyFile>\r\n    <SignAssembly>true</SignAssembly>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.Library.Strings</RootNamespace>\r\n    <SignAssembly>true</SignAssembly>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\">\r\n      <Name>System.Web</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Configuration.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LibraryDescriptor.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"MbString.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\ClassLibrary\\ClassLibrary.csproj\">\r\n      <Project>{d515e8f4-357c-4caf-87c1-97d64c5f865a}</Project>\r\n      <Name>ClassLibrary</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\..\\Core\\Core.csproj\">\r\n      <Project>{9a2867a2-981c-4b5a-a1c5-eaccc80b5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"web.config.install.xdt\" />\r\n    <Content Include=\"web.config.uninstall.xdt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Extension.mbstring.nuspec\" />\r\n  </ItemGroup>\r\n  <Import Project=\"..\\..\\Build\\Common.Build.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "Source/Extensions/mbstring/Extension.mbstring.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger Extension multibyte multi-byte mbstring string text</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Extensions/mbstring/LibraryDescriptor.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.Xml;\r\nusing System.IO;\r\nusing System.Configuration;\r\n\r\nusing PHP.Core;\r\n\r\nnamespace PHP.Library.Strings\r\n{\r\n\t/// <summary>\r\n\t/// Describes the class library assembly content and configuration.\r\n\t/// </summary>\r\n\tpublic sealed class MbstringLibraryDescriptor : PhpLibraryDescriptor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Stores one and only instance of the class that is created when the assembly is loaded.\r\n\t\t/// </summary>\r\n\t\tinternal static MbstringLibraryDescriptor Singleton { get { return singleton; } }\r\n\t\tprivate static MbstringLibraryDescriptor singleton;\r\n\r\n        ///// <summary>\r\n        ///// Gets a list of implemented extensions.\r\n        ///// </summary>\r\n        //public override string[] ImplementedExtensions\r\n        //{\r\n        //    get { return new string[] { ExtensionName }; }\r\n        //}\r\n        //internal const string ExtensionName = \"mbstring\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Called by the Core after the library is loaded.\r\n\t\t/// </summary>\r\n\t\tprotected override void Loaded(PhpLibraryAttribute assemblyAttribute, LibraryConfigStore configStore)\r\n\t\t{\r\n\t\t\tbase.Loaded(assemblyAttribute, configStore);\r\n\t\t\tsingleton = this;\r\n\t\t\tMbstringConfiguration.RegisterLegacyOptions();\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Parses a configuration section belonging to the MSSQL library. \r\n\t\t/// </summary>\r\n\t\t/// <param name=\"result\">A configuration context.</param>\r\n\t\t/// <param name=\"context\">The context of the configuration created by Phalanger Core.</param>\r\n\t\t/// <param name=\"section\">A XML node containing the configuration or its part.</param>\r\n\t\t/// <returns>Updated configuration context.</returns>\r\n\t\tprotected override ConfigContextBase ParseConfig(ConfigContextBase result, PhpConfigurationContext context, XmlNode section)\r\n\t\t{\r\n\t\t\t// parses XML tree:\r\n\t\t\tConfigUtils.ParseNameValueList(section, context, (MbstringLocalConfig)result.Local, (MbstringGlobalConfig)result.Global);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates empty library configuration context.\r\n\t\t/// </summary>\r\n\t\t/// <returns>An initialized configuration context. Should not be a <B>null</B> reference.</returns>\r\n\t\tprotected override ConfigContextBase CreateConfigContext()\r\n\t\t{\r\n\t\t\treturn new ConfigContextBase(new MbstringLocalConfig(), new MbstringGlobalConfig());\r\n\t\t}\r\n\r\n\t}\r\n}  \r\n"
  },
  {
    "path": "Source/Extensions/mbstring/MbString.cs",
    "content": "/*\r\n\r\n Copyright (c) 2005-2006 Tomas Matousek and Martin Maly.  \r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/*\r\nnot implemented yet:\r\n\r\n# mb_ check_ encoding\r\n# mb_ convert_ case\r\n# mb_ convert_ encoding\r\n# mb_ convert_ kana\r\n# mb_ convert_ variables\r\n# mb_ decode_ mimeheader\r\n# mb_ decode_ numericentity\r\n# mb_ detect_ encoding\r\n# mb_ detect_ order\r\n# mb_ encode_ mimeheader\r\n# mb_ encode_ numericentity\r\n# mb_ encoding_ aliases\r\n# mb_ ereg_ match\r\n# mb_ ereg_ replace\r\n# mb_ ereg_ search_ getpos\r\n# mb_ ereg_ search_ getregs\r\n# mb_ ereg_ search_ init\r\n# mb_ ereg_ search_ pos\r\n# mb_ ereg_ search_ regs\r\n# mb_ ereg_ search_ setpos\r\n# mb_ ereg_ search\r\n# mb_ ereg\r\n# mb_ eregi_ replace\r\n# mb_ eregi\r\n# mb_ get_ info\r\n# mb_ http_ input\r\n# mb_ http_ output\r\n# mb_ output_ handler\r\n \r\n */\r\n\r\nusing System;\r\nusing System.Data;\r\nusing System.Collections;\r\nusing System.Text;\r\nusing System.Data.SqlClient;\r\n\r\nusing PHP.Core;\r\nusing System.Collections.Generic;\r\n\r\nnamespace PHP.Library.Strings\r\n{\r\n\t/// <summary>\r\n    /// Implements PHP functions provided by multi-byte-string extension.\r\n\t/// </summary>\r\n\tpublic static class MultiByteString\r\n\t{\r\n        #region Constants\r\n        \r\n        [Flags]\r\n        public enum OverloadConstants\r\n        {\r\n            [ImplementsConstant(\"MB_OVERLOAD_MAIL\")]\r\n            MB_OVERLOAD_MAIL = 1,\r\n\r\n            [ImplementsConstant(\"MB_OVERLOAD_STRING\")]\r\n            MB_OVERLOAD_STRING = 2,\r\n\r\n            [ImplementsConstant(\"MB_OVERLOAD_REGEX\")]\r\n            MB_OVERLOAD_REGEX = 4,\r\n        }\r\n\r\n        [Flags]\r\n        public enum CaseConstants\r\n        {\r\n            [ImplementsConstant(\"MB_CASE_UPPER\")]\r\n            MB_CASE_UPPER = 0,\r\n\r\n            [ImplementsConstant(\"MB_CASE_LOWER\")]\r\n            MB_CASE_LOWER = 1,\r\n\r\n            [ImplementsConstant(\"MB_CASE_TITLE\")]\r\n            MB_CASE_TITLE = 2,\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Encodings\r\n\r\n        private static Dictionary<string, Encoding> _encodings = null;\r\n        public static Dictionary<string, Encoding>/*!*/Encodings\r\n        {\r\n            get\r\n            {\r\n                if (_encodings == null)\r\n                {\r\n                    Dictionary<string, Encoding> enc = new Dictionary<string, Encoding>(180, StringComparer.OrdinalIgnoreCase);\r\n\r\n                    // encoding names used in PHP\r\n\r\n                    //enc[\"pass\"] = Encoding.Default; // TODO: \"pass\" encoding\r\n                    enc[\"auto\"] = Configuration.Application.Globalization.PageEncoding;\r\n                    enc[\"wchar\"] = Encoding.Unicode;\r\n                    //byte2be\r\n                    //byte2le\r\n                    //byte4be\r\n                    //byte4le\r\n                    //BASE64\r\n                    //UUENCODE\r\n                    //HTML-ENTITIES\r\n                    //Quoted-Printable\r\n                    //7bit\r\n                    //8bit\r\n                    //UCS-4\r\n                    //UCS-4BE\r\n                    //UCS-4LE\r\n                    //UCS-2\r\n                    //UCS-2BE\r\n                    //UCS-2LE\r\n                    //UTF-32\r\n                    //UTF-32BE\r\n                    //UTF-32LE\r\n                    //UTF-16\r\n                    //UTF-16BE\r\n                    enc[\"UTF-16LE\"] = Encoding.Unicode; // alias UTF-16\r\n                    //UTF-8\r\n                    //UTF-7\r\n                    //UTF7-IMAP\r\n                    enc[\"ASCII\"] = Encoding.ASCII;  // alias us-ascii\r\n                    //EUC-JP\r\n                    //SJIS\r\n                    //eucJP-win\r\n                    //SJIS-win\r\n                    //CP51932\r\n                    //JIS\r\n                    //ISO-2022-JP\r\n                    //ISO-2022-JP-MS\r\n                    //Windows-1252\r\n                    //Windows-1254\r\n                    //ISO-8859-1\r\n                    //ISO-8859-2\r\n                    //ISO-8859-3\r\n                    //ISO-8859-4\r\n                    //ISO-8859-5\r\n                    //ISO-8859-6\r\n                    //ISO-8859-7\r\n                    //ISO-8859-8\r\n                    //ISO-8859-9\r\n                    //ISO-8859-10\r\n                    //ISO-8859-13\r\n                    //ISO-8859-14\r\n                    //ISO-8859-15\r\n                    //ISO-8859-16\r\n                    //EUC-CN\r\n                    //CP936\r\n                    //HZ\r\n                    //EUC-TW\r\n                    //BIG-5\r\n                    //EUC-KR\r\n                    //UHC\r\n                    //ISO-2022-KR\r\n                    //Windows-1251\r\n                    //CP866\r\n                    //KOI8-R\r\n                    //KOI8-U\r\n                    //ArmSCII-8\r\n                    //CP850\r\n\r\n                    // .NET encodings\r\n                    foreach (var encoding in Encoding.GetEncodings())\r\n                        enc[encoding.Name] = encoding.GetEncoding();\r\n\r\n                    _encodings = enc;\r\n                }\r\n\r\n                return _encodings;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get encoding based on the PHP name. Can return null is such encoding is not defined.\r\n        /// </summary>\r\n        /// <param name=\"encodingName\"></param>\r\n        /// <returns></returns>\r\n        public static Encoding GetEncoding(string encodingName)\r\n        {\r\n            Encoding encoding;\r\n            if (!Encodings.TryGetValue(encodingName, out encoding))\r\n                return null;\r\n\r\n            return encoding;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Object conversion using specified encoding\r\n\r\n        private delegate Encoding getEncoding();\r\n\r\n        /// <summary>\r\n        /// Converts PhpBytes using specified encoding. If any other object is provided, encoding is not performed.\r\n        /// </summary>\r\n        /// <param name=\"str\"></param>\r\n        /// <param name=\"encodingGetter\"></param>\r\n        /// <returns></returns>\r\n        private static string ObjectToString(object str, getEncoding encodingGetter)\r\n        {\r\n            if (str is PhpBytes)\r\n            {\r\n                PhpBytes bytes = (PhpBytes)str;\r\n                Encoding encoding = encodingGetter();\r\n                if (encoding == null)\r\n                    return null;\r\n\r\n                return encoding.GetString(bytes.ReadonlyData, 0, bytes.Length);\r\n            }\r\n            else\r\n            {\r\n                // .NET String should be always UTF-16, given encoding is irrelevant\r\n                return PHP.Core.Convert.ObjectToString(str);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_internal_encoding, mb_preferred_mime_name\r\n\r\n        /// <summary>\r\n        /// Multi Byte String Internal Encoding.\r\n        /// </summary>\r\n        public static Encoding/*!*/InternalEncoding\r\n        {\r\n            get\r\n            {\r\n                return _internalEncoding ?? Configuration.Application.Globalization.PageEncoding;\r\n            }\r\n            private set\r\n            {\r\n                _internalEncoding = value;\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// Multi Byte String Internal Encoding IANA name.\r\n        /// </summary>\r\n        public static string InternalEncodingName\r\n        {\r\n            get\r\n            {\r\n                return InternalEncoding.WebName;\r\n            }\r\n        }\r\n        [ThreadStatic]\r\n        private static Encoding _internalEncoding = null;\r\n\r\n        /// <summary>\r\n        /// Get encoding used by default in the extension.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"mb_internal_encoding\")]\r\n        public static string GetInternalEncoding()\r\n        {\r\n            return InternalEncoding.WebName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set the encoding used by the extension.\r\n        /// </summary>\r\n        /// <param name=\"encodingName\"></param>\r\n        /// <returns>True is encoding was set, otherwise false.</returns>\r\n        [ImplementsFunction(\"mb_internal_encoding\")]\r\n        public static bool SetInternalEncoding(string encodingName)\r\n        {\r\n            Encoding enc = GetEncoding(encodingName);\r\n\r\n            if (enc != null)\r\n            {\r\n                InternalEncoding = enc;\r\n\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get a MIME charset string for a specific encoding. \r\n        /// </summary>\r\n        /// <param name=\"encoding_name\">The encoding being checked. Its WebName or PHP/Phalanger name.</param>\r\n        /// <returns>The MIME charset string for given character encoding.</returns>\r\n        [ImplementsFunction(\"mb_preferred_mime_name\")]\r\n        public static string GetPreferredMimeName(string encoding_name)\r\n        {\r\n            Encoding encoding;\r\n\r\n            if (\r\n                (encoding = Encoding.GetEncoding(encoding_name)) == null && // .NET encodings (by their WebName)\r\n                (encoding = GetEncoding(encoding_name)) == null //try PHP internal encodings too (by PHP/Phalanger name)\r\n                )\r\n            {\r\n                PhpException.ArgumentValueNotSupported(\"encoding_name\", encoding);\r\n                return null;\r\n            }\r\n\r\n            return encoding.BodyName;   // it seems to return right MIME\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_regex_encoding, mb_regex_set_options\r\n\r\n        /// <summary>\r\n        /// Multi Byte String Internal Encoding.\r\n        /// </summary>\r\n        public static Encoding/*!*/RegexEncoding\r\n        {\r\n            get\r\n            {\r\n                return _regexEncoding ?? Configuration.Application.Globalization.PageEncoding;\r\n            }\r\n            private set\r\n            {\r\n                _regexEncoding = value;\r\n            }\r\n        }\r\n        /// <summary>\r\n        /// Multi Byte String regex Encoding IANA name.\r\n        /// </summary>\r\n        public static string RegexEncodingName\r\n        {\r\n            get\r\n            {\r\n                return RegexEncoding.WebName;\r\n            }\r\n        }\r\n        [ThreadStatic]\r\n        private static Encoding _regexEncoding = null;\r\n\r\n        /// <summary>\r\n        /// Get encoding used by regex in the extension.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"mb_regex_encoding\")]\r\n        public static string GetRegexEncoding()\r\n        {\r\n            return RegexEncoding.WebName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set the encoding used by the extension in regex functions.\r\n        /// </summary>\r\n        /// <param name=\"encodingName\"></param>\r\n        /// <returns>True is encoding was set, otherwise false.</returns>\r\n        [ImplementsFunction(\"mb_regex_encoding\")]\r\n        public static bool SetRegexEncoding(string encodingName)\r\n        {\r\n            Encoding enc = GetEncoding(encodingName);\r\n\r\n            if (enc != null)\r\n            {\r\n                RegexEncoding = enc;\r\n\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                return false;\r\n            }\r\n\r\n        }\r\n\r\n        #region regex options\r\n\r\n        [Flags]\r\n        private enum RegexOptions\r\n        {\r\n            None = 0,\r\n\r\n            /// <summary>\r\n            /// i\r\n            /// </summary>\r\n            AmbiguityMatch = 1,\r\n\r\n            /// <summary>\r\n            /// x\r\n            /// </summary>\r\n            ExtendedPatternForm = 2,\r\n\r\n            /// <summary>\r\n            /// m\r\n            /// </summary>\r\n            DotMatchesNewLine = 4,\r\n\r\n            /// <summary>\r\n            /// s\r\n            /// </summary>\r\n            ConvertMatchBeginEnd = 8,\r\n\r\n            /// <summary>\r\n            /// l\r\n            /// </summary>\r\n            FindLongestMatch = 16,\r\n\r\n            /// <summary>\r\n            /// n\r\n            /// </summary>\r\n            IgnoreEmptyMatch = 32,\r\n\r\n            /// <summary>\r\n            /// e\r\n            /// </summary>\r\n            EvalResultingCode = 64,\r\n        }\r\n\r\n        private enum RegexSyntaxModes\r\n        {\r\n            /// <summary>\r\n            /// d\r\n            /// </summary>\r\n            POSIXExtendedRegex,\r\n        }\r\n\r\n        [ThreadStatic]\r\n        private static RegexOptions _regexOptions = RegexOptions.DotMatchesNewLine | RegexOptions.ConvertMatchBeginEnd;\r\n\r\n        [ThreadStatic]\r\n        private static RegexSyntaxModes _regexSyntaxMode = RegexSyntaxModes.POSIXExtendedRegex;\r\n\r\n        /// <summary>\r\n        /// Determines if given combination of options is enabled.\r\n        /// </summary>\r\n        /// <param name=\"opt\">Option or mask of options to test.</param>\r\n        /// <returns>True if given option mask is enabled.</returns>\r\n        private static bool OptionEnabled(RegexOptions opt)\r\n        {\r\n            return (_regexOptions & opt) != 0;\r\n        }\r\n        /// <summary>\r\n        /// Determines if given syntax mode is set.\r\n        /// </summary>\r\n        /// <param name=\"opt\">Syntax mode to test.</param>\r\n        /// <returns>True if given syntax mode is enabled.</returns>\r\n        private static bool OptionEnabled(RegexSyntaxModes opt)\r\n        {\r\n            return (_regexSyntaxMode == opt);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Get currently set regex options.\r\n        /// </summary>\r\n        /// <returns>Option string.</returns>\r\n        [ImplementsFunction(\"mb_regex_set_options\")]\r\n        public static string GetRegexOptions()\r\n        {\r\n            string optionString = string.Empty;\r\n\r\n            if (OptionEnabled(RegexOptions.AmbiguityMatch)) optionString += 'i';\r\n            if (OptionEnabled(RegexOptions.ExtendedPatternForm)) optionString += 'x';\r\n            if (OptionEnabled(RegexOptions.DotMatchesNewLine)) optionString += 'm';\r\n            if (OptionEnabled(RegexOptions.ConvertMatchBeginEnd)) optionString += 's';\r\n            if (OptionEnabled(RegexOptions.FindLongestMatch)) optionString += 'l';\r\n            if (OptionEnabled(RegexOptions.IgnoreEmptyMatch)) optionString += 'n';\r\n            if (OptionEnabled(RegexOptions.EvalResultingCode)) optionString += 'e';\r\n\r\n            if (OptionEnabled(RegexSyntaxModes.POSIXExtendedRegex)) optionString += 'd';\r\n            else\r\n                throw new NotImplementedException(\"syntax mode not catch by mb_regex_set_options()!\");\r\n\r\n            return optionString;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set new regex options.\r\n        /// </summary>\r\n        /// <param name=\"options\">Option string.</param>\r\n        /// <returns>New option string.</returns>\r\n        /// <remarks>\r\n        /// Regex options:\r\n        /// Option  Meaning\r\n        /// i \t    Ambiguity match on\r\n        /// x \t    Enables extended pattern form\r\n        /// m \t    '.' matches with newlines\r\n        /// s \t    '^' -> '\\A', '$' -> '\\Z'\r\n        /// p \t    Same as both the m and s options\r\n        /// l \t    Finds longest matches\r\n        /// n \t    Ignores empty matches\r\n        /// e \t    eval() resulting code\r\n        /// \r\n        /// Regex syntax modes:\r\n        /// Mode \tMeaning\r\n        /// j \t    (not supported) Java (Sun java.util.regex)\r\n        /// u \t    (not supported) GNU regex\r\n        /// g \t    (not supported) grep\r\n        /// c \t    (not supported) Emacs\r\n        /// r \t    (not supported) Ruby\r\n        /// z \t    (not supported) Perl\r\n        /// b \t    (not supported) POSIX Basic regex\r\n        /// d \t    POSIX Extended regex\r\n        /// </remarks>\r\n        [ImplementsFunction(\"mb_regex_set_options\")]\r\n        public static string SetRegexOptions(string options)\r\n        {\r\n            RegexOptions newRegexOptions = RegexOptions.None;\r\n            RegexSyntaxModes newRegexSyntaxModes = RegexSyntaxModes.POSIXExtendedRegex;\r\n\r\n            foreach (char c in options)\r\n            {\r\n                switch (c)\r\n                {\r\n                    case 'i':\r\n                        newRegexOptions |= RegexOptions.AmbiguityMatch;\r\n                        break;\r\n                    case 'x':\r\n                        newRegexOptions |= RegexOptions.ExtendedPatternForm;\r\n                        break;\r\n                    case 'm':\r\n                        newRegexOptions |= RegexOptions.DotMatchesNewLine;\r\n                        break;\r\n                    case 's':\r\n                        newRegexOptions |= RegexOptions.ConvertMatchBeginEnd;\r\n                        break;\r\n                    case 'p':\r\n                        newRegexOptions |= RegexOptions.DotMatchesNewLine | RegexOptions.ConvertMatchBeginEnd;\r\n                        break;\r\n                    case 'l':\r\n                        newRegexOptions |= RegexOptions.FindLongestMatch;\r\n                        break;\r\n                    case 'n':\r\n                        newRegexOptions |= RegexOptions.IgnoreEmptyMatch;\r\n                        break;\r\n                    case 'e':\r\n                        newRegexOptions |= RegexOptions.EvalResultingCode;\r\n                        break;\r\n\r\n                    case 'd':\r\n                        newRegexSyntaxModes = RegexSyntaxModes.POSIXExtendedRegex;\r\n                        break;\r\n\r\n                    default:\r\n                        PhpException.ArgumentValueNotSupported(\"options\", c);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            //\r\n            _regexOptions = newRegexOptions;\r\n            _regexSyntaxMode = newRegexSyntaxModes;\r\n\r\n            return GetRegexOptions();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_substr, mb_strcut\r\n\r\n        #region mb_substr implementation\r\n\r\n        [ImplementsFunction(\"mb_substr\")]\r\n        [return: CastToFalse]\r\n        public static string SubString(object str, int start)\r\n        {\r\n            return SubString(str, start, -1, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_substr\")]\r\n        [return: CastToFalse]\r\n        public static string SubString(object str, int start, int length)\r\n        {\r\n            return SubString(str, start, length, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_substr\")]\r\n        [return:CastToFalse]\r\n        public static string SubString(object str, int start, int length, string encoding)\r\n        {\r\n            return SubString(str, start, length, () => GetEncoding(encoding));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strcut (in PHP it behaves differently, but in .NET it is an alias for mb_substr)\r\n\r\n        [ImplementsFunction(\"mb_strcut\")]\r\n        [return: CastToFalse]\r\n        public static string CutString(object str, int start)\r\n        {\r\n            return SubString(str, start, -1, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strcut\")]\r\n        [return: CastToFalse]\r\n        public static string CutString(object str, int start, int length)\r\n        {\r\n            return SubString(str, start, length, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strcut\")]\r\n        [return: CastToFalse]\r\n        public static string CutString(object str, int start, int length, string encoding)\r\n        {\r\n            return SubString(str, start, length, () => GetEncoding(encoding));\r\n        }\r\n\r\n        #endregion\r\n\r\n        private static string SubString(object str, int start, int length, getEncoding encodingGetter)\r\n        {\r\n            // get the Unicode representation of the string\r\n            string ustr = ObjectToString(str, encodingGetter);\r\n\r\n            if (ustr == null)\r\n                return null;\r\n\r\n            // start counting from the end of the string\r\n            if (start < 0)\r\n                start = ustr.Length + start;    // can result in negative start again -> invalid\r\n\r\n            if (length == -1)\r\n                length = ustr.Length;\r\n\r\n            // check boundaries\r\n            if (start >= ustr.Length || length < 0 || start < 0)\r\n                return null;\r\n\r\n            if (length == 0)\r\n                return string.Empty;\r\n\r\n            // return the substring\r\n            return (start + length > ustr.Length) ? ustr.Substring(start) : ustr.Substring(start, length);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_substr_count\r\n\r\n        [ImplementsFunction(\"mb_substr_count\")]\r\n        public static int SubStringCount(string haystack  , string needle )\r\n        {\r\n            return SubStringCount(haystack, needle, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_substr_count\")]\r\n        public static int SubStringCount(string haystack, string needle, string encoding)\r\n        {\r\n            return SubStringCount(haystack, needle, () => GetEncoding(encoding));\r\n        }\r\n\r\n        private static int SubStringCount(string haystack, string needle, getEncoding encodingGetter)\r\n        {\r\n            string uhaystack = ObjectToString(haystack, encodingGetter);\r\n            string uneedle = ObjectToString(needle, encodingGetter);\r\n\r\n            if (uhaystack == null || uneedle == null)\r\n                return 0;\r\n\r\n            return PhpStrings.SubstringCount(uhaystack, uneedle);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_substitute_character\r\n\r\n        [ImplementsFunction(\"mb_substitute_character\")]\r\n        public static object GetSubstituteCharacter()\r\n        {\r\n            PhpException.FunctionNotSupported();\r\n            return false;\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_substitute_character\")]\r\n        public static object SetSubstituteCharacter(object substrchar)\r\n        {\r\n            PhpException.FunctionNotSupported();\r\n            return \"none\";\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strwidth, mb_strimwidth\r\n\r\n        /// <summary>\r\n        /// Determines the char width.\r\n        /// </summary>\r\n        /// <param name=\"c\">Character.</param>\r\n        /// <returns>The width of the character.</returns>\r\n        private static int CharWidth(char c)\r\n        {\r\n            //Chars  \t            Width\r\n            //U+0000 - U+0019 \t0\r\n            //U+0020 - U+1FFF \t1\r\n            //U+2000 - U+FF60 \t2\r\n            //U+FF61 - U+FF9F \t1\r\n            //U+FFA0 - \t        2\r\n\r\n            if (c <= 0x0019) return 0;\r\n            else if (c <= 0x1fff) return 1;\r\n            else if (c <= 0xff60) return 2;\r\n            else if (c <= 0xff9f) return 1;\r\n            else return 2;\r\n        }\r\n\r\n        private static int StringWidth(string str)\r\n        {\r\n            if (str == null)\r\n                return 0;\r\n\r\n            int width = 0;\r\n\r\n            foreach (char c in str)\r\n                width += CharWidth(c);\r\n\r\n            return width;\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"str\"></param>\r\n        /// <param name=\"width\">Characters remaining.</param>\r\n        /// <returns></returns>\r\n        private static string StringTrimByWidth(string/*!*/str, ref int width)\r\n        {\r\n            if (str == null)\r\n                return null;\r\n\r\n            int i = 0;\r\n\r\n            foreach (char c in str)\r\n            {\r\n                int w = CharWidth(c);\r\n\r\n                if (w < width)\r\n                {\r\n                    ++i;\r\n                    width -= w;\r\n                }\r\n                else if (w == width)\r\n                {\r\n                    ++i;\r\n                    width = 0;\r\n                    break;\r\n                }\r\n                else\r\n                    break;\r\n            }\r\n\r\n            return (i < str.Length) ? str.Remove(i) : str;\r\n        }\r\n\r\n        #region mb_strwidth implementation\r\n\r\n        [ImplementsFunction(\"mb_strwidth\")]\r\n        public static int StringWidth(object str)\r\n        {\r\n            return StringWidth(str, () => InternalEncoding);\r\n        }\r\n\r\n        /// <summary>\r\n        /// The string width. Not the string length.\r\n        ///  Multi-byte characters are usually twice the width of single byte characters.\r\n        /// </summary>\r\n        /// <param name=\"str\">The string being decoded. </param>\r\n        /// <param name=\"encoding\">The encoding parameter is the character encoding in case of PhpBytes is used. If it is omitted, the internal character encoding value will be used.</param>\r\n        /// <returns>The width of string str.</returns>\r\n        /// <remarks>\r\n        /// Chars \t            Width\r\n        /// U+0000 - U+0019 \t0\r\n        /// U+0020 - U+1FFF \t1\r\n        /// U+2000 - U+FF60 \t2\r\n        /// U+FF61 - U+FF9F \t1\r\n        /// U+FFA0 - \t        2\r\n        /// </remarks>\r\n        [ImplementsFunction(\"mb_strwidth\")]\r\n        public static int StringWidth(object str, string encoding)\r\n        {\r\n            return StringWidth(str, () =>GetEncoding(encoding));\r\n        }\r\n\r\n        private static int StringWidth(object str, getEncoding encodingGetter)\r\n        {\r\n            return StringWidth(ObjectToString(str, encodingGetter));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strimwidth implementation\r\n\r\n        [ImplementsFunction(\"mb_strimwidth\")]\r\n        public static string STrimWidth(object str, int start, int width)\r\n        {\r\n            return StringTrimByWidth(str, start, width, null, () => InternalEncoding);\r\n        }\r\n        [ImplementsFunction(\"mb_strimwidth\")]\r\n        public static string STrimWidth(object str, int start, int width, string trimmarker)\r\n        {\r\n            return StringTrimByWidth(str, start, width, trimmarker, () => InternalEncoding);\r\n        }\r\n        [ImplementsFunction(\"mb_strimwidth\")]\r\n        public static string STrimWidth(object str, int start, int width, string trimmarker, string encoding)\r\n        {\r\n            return StringTrimByWidth(str, start, width, trimmarker, () => GetEncoding(encoding));\r\n        }\r\n\r\n        private static string StringTrimByWidth(object str, int start, int width, string trimmarker, getEncoding encodingGetter)\r\n        {\r\n            string ustr = ObjectToString(str, encodingGetter);\r\n            \r\n            if (start >= ustr.Length)\r\n                return string.Empty;\r\n\r\n            ustr = ustr.Substring(start);\r\n            int ustrWidth = StringWidth(ustr);\r\n\r\n            if (ustrWidth <= width)\r\n                return ustr;\r\n\r\n            // trim the string\r\n            int trimmarkerWidth = StringWidth(trimmarker);\r\n\r\n            width -= trimmarkerWidth;\r\n            string trimmedStr = StringTrimByWidth(ustr, ref width);\r\n            width += trimmarkerWidth;\r\n            string trimmedTrimMarker = StringTrimByWidth(trimmarker, ref width);\r\n\r\n            //\r\n            return trimmedStr + trimmedTrimMarker;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region mb_strtoupper, mb_strtolower\r\n\r\n        [ImplementsFunction(\"mb_strtoupper\")]\r\n        public static string StrToUpper(object str)\r\n        {\r\n            return StrToUpper(str, () => InternalEncoding);\r\n        }\r\n        [ImplementsFunction(\"mb_strtoupper\")]\r\n        public static string StrToUpper(object str, string encoding)\r\n        {\r\n            return StrToUpper(str, () => GetEncoding(encoding));\r\n        }\r\n        private static string StrToUpper(object str, getEncoding encodingGetter)\r\n        {\r\n            string ustr = ObjectToString(str, encodingGetter);\r\n            return ustr.ToUpperInvariant();\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strtolower\")]\r\n        public static string StrToLower(object str)\r\n        {\r\n            return StrToLower(str, () => InternalEncoding);\r\n        }\r\n        [ImplementsFunction(\"mb_strtolower\")]\r\n        public static string StrToLower(object str, string encoding)\r\n        {\r\n            return StrToLower(str, () => GetEncoding(encoding));\r\n        }\r\n        private static string StrToLower(object str, getEncoding encodingGetter)\r\n        {\r\n            string ustr = ObjectToString(str, encodingGetter);\r\n            return ustr.ToLowerInvariant();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strstr, mb_stristr\r\n\r\n        [ImplementsFunction(\"mb_strstr\")]\r\n        [return:CastToFalse]\r\n        public static string StrStr(object haystack, object needle)\r\n        {\r\n            return StrStr(haystack, needle, false, () => InternalEncoding, false);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strstr\")]\r\n        [return: CastToFalse]\r\n        public static string StrStr(object haystack, object needle, bool part/*=FALSE*/)\r\n        {\r\n            return StrStr(haystack, needle, part, () => InternalEncoding, false);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strstr\")]\r\n        [return: CastToFalse]\r\n        public static string StrStr(object haystack, object needle, bool part/*=FALSE*/, string encoding)\r\n        {\r\n            return StrStr(haystack, needle, part, () => GetEncoding(encoding), false);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_stristr\")]\r\n        [return: CastToFalse]\r\n        public static string StriStr(object haystack, object needle)\r\n        {\r\n            return StrStr(haystack, needle, false, () => InternalEncoding, true);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_stristr\")]\r\n        [return: CastToFalse]\r\n        public static string StriStr(object haystack, object needle, bool part/*=FALSE*/)\r\n        {\r\n            return StrStr(haystack, needle, part, () => InternalEncoding, true);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_stristr\")]\r\n        [return: CastToFalse]\r\n        public static string StriStr(object haystack, object needle, bool part/*=FALSE*/, string encoding)\r\n        {\r\n            return StrStr(haystack, needle, part, () => GetEncoding(encoding), true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// mb_strstr() finds the first occurrence of needle in haystack  and returns the portion of haystack. If needle is not found, it returns FALSE. \r\n        /// </summary>\r\n        /// <param name=\"haystack\">The string from which to get the first occurrence of needle</param>\r\n        /// <param name=\"needle\">The string to find in haystack</param>\r\n        /// <param name=\"part\">Determines which portion of haystack  this function returns. If set to TRUE, it returns all of haystack  from the beginning to the first occurrence of needle. If set to FALSE, it returns all of haystack  from the first occurrence of needle to the end.</param>\r\n        /// <param name=\"encodingGetter\">Character encoding name to use. If it is omitted, internal character encoding is used. </param>\r\n        /// <param name=\"ignoreCase\">Case insensitive.</param>\r\n        /// <returns>Returns the portion of haystack, or FALSE (-1) if needle is not found.</returns>\r\n        private static string StrStr(object haystack, object needle, bool part/* = false*/  , getEncoding encodingGetter, bool ignoreCase)\r\n        {\r\n            string uhaystack = ObjectToString(haystack, encodingGetter);\r\n            string uneedle = ObjectToString(needle, encodingGetter);\r\n\r\n            if (uhaystack == null || uneedle == null)   // never happen\r\n                return null;\r\n\r\n            if (uneedle == String.Empty)\r\n            {\r\n                PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                return null;\r\n            }\r\n\r\n            int index = (ignoreCase) ? uhaystack.ToLower().IndexOf(uneedle.ToLower()) : uhaystack.IndexOf(uneedle);\r\n            return (index == -1) ? null : (part ? uhaystack.Substring(0, index) : uhaystack.Substring(index));\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strpos, mb_stripos, mb_strrpos, mb_strripos\r\n\r\n        #region mb_strpos stub\r\n\r\n        [ImplementsFunction(\"mb_strpos\")]\r\n        [return: CastToFalse]\r\n        public static int Strpos(object haystack, object needle)\r\n        {\r\n            return Strpos(haystack, needle, 0, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strpos\")]\r\n        [return: CastToFalse]\r\n        public static int Strpos(object haystack, object needle, int offset)\r\n        {\r\n            return Strpos(haystack, needle, offset, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strpos\")]\r\n        [return:CastToFalse]\r\n        public static int Strpos(object haystack, object needle, int offset, string encoding)\r\n        {\r\n            return Strpos(haystack, needle, offset, () => GetEncoding(encoding), false);\r\n        }\r\n\r\n        #endregion\r\n        #region mb_stripos stub\r\n\r\n        [ImplementsFunction(\"mb_stripos\")]\r\n        [return: CastToFalse]\r\n        public static int Stripos(object haystack, object needle)\r\n        {\r\n            return Strpos(haystack, needle, 0, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_stripos\")]\r\n        [return: CastToFalse]\r\n        public static int Stripos(object haystack, object needle, int offset)\r\n        {\r\n            return Strpos(haystack, needle, offset, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_stripos\")]\r\n        [return: CastToFalse]\r\n        public static int Stripos(object haystack, object needle, int offset, string encoding)\r\n        {\r\n            return Strpos(haystack, needle, offset, () => GetEncoding(encoding), true);\r\n        }\r\n\r\n        #endregion\r\n        #region mb_strrpos stub\r\n\r\n        [ImplementsFunction(\"mb_strrpos\")]\r\n        [return: CastToFalse]\r\n        public static int Strrpos(object haystack, object needle)\r\n        {\r\n            return Strrpos(haystack, needle, 0, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strrpos\")]\r\n        [return: CastToFalse]\r\n        public static int Strrpos(object haystack, object needle, int offset)\r\n        {\r\n            return Strrpos(haystack, needle, offset, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strrpos\")]\r\n        [return: CastToFalse]\r\n        public static int Strrpos(object haystack, object needle, int offset, string encoding)\r\n        {\r\n            return Strrpos(haystack, needle, offset, () => GetEncoding(encoding), false);\r\n        }\r\n\r\n        #endregion\r\n        #region mb_strripos stub\r\n\r\n        [ImplementsFunction(\"mb_strripos\")]\r\n        [return: CastToFalse]\r\n        public static int Strripos(object haystack, object needle)\r\n        {\r\n            return Strrpos(haystack, needle, 0, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_strripos\")]\r\n        [return: CastToFalse]\r\n        public static int Strripos(object haystack, object needle, int offset)\r\n        {\r\n            return Strrpos(haystack, needle, offset, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_strripos\")]\r\n        [return: CastToFalse]\r\n        public static int Strripos(object haystack, object needle, int offset, string encoding)\r\n        {\r\n            return Strrpos(haystack, needle, offset, () => GetEncoding(encoding), true);\r\n        }\r\n\r\n        #endregion\r\n\r\n        /// <summary>\r\n        /// Implementation of <c>mb_str[i]pos</c> functions.\r\n        /// </summary>\r\n        private static int Strpos(object haystack, object needle, int offset, getEncoding encodingGetter, bool ignoreCase)\r\n        {\r\n            string uhaystack = ObjectToString(haystack, encodingGetter);\r\n            string uneedle = ObjectToString(needle, encodingGetter);\r\n\r\n            if (uhaystack == null || uneedle == null)\r\n                return -1;\r\n\r\n            if (offset < 0 || offset >= uhaystack.Length)\r\n            {\r\n                if (offset != uhaystack.Length)\r\n                    PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"arg:out_of_bounds\"));\r\n                return -1;\r\n            }\r\n\r\n                if (uneedle == String.Empty)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return -1;\r\n                }\r\n\r\n            if (ignoreCase)\r\n                return uhaystack.ToLower().IndexOf(uneedle.ToLower(), offset);\r\n            else\r\n                return uhaystack.IndexOf(uneedle, offset);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Implementation of <c>mb_strr[i]pos</c> functions.\r\n        /// </summary>\r\n        private static int Strrpos(object haystack, object needle, int offset, getEncoding encodingGetter, bool ignoreCase)\r\n        {\r\n            string uhaystack = ObjectToString(haystack, encodingGetter);\r\n            string uneedle = ObjectToString(needle, encodingGetter);\r\n\r\n            if (uhaystack == null || uneedle == null)\r\n                return -1;\r\n\r\n            int end = uhaystack.Length - 1;\r\n            if (offset > end || offset < -end - 1)\r\n            {\r\n                PhpException.InvalidArgument(\"offset\", LibResources.GetString(\"arg:out_of_bounds\"));\r\n                return -1;\r\n            }\r\n\r\n            if (offset < 0)\r\n            {\r\n                end += uneedle.Length + offset;\r\n                offset = 0;\r\n            }\r\n\r\n                if (uneedle.Length == 0)\r\n                {\r\n                    PhpException.InvalidArgument(\"needle\", LibResources.GetString(\"arg:empty\"));\r\n                    return -1;\r\n                }\r\n\r\n                if (ignoreCase)\r\n                    return uhaystack.ToLower().LastIndexOf(uneedle.ToLower(), end, end - offset + 1);\r\n                else\r\n                    return uhaystack.LastIndexOf(uneedle, end, end - offset + 1);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strlen\r\n\r\n        [ImplementsFunction(\"mb_strlen\")]\r\n        public static int StrLen(object str)\r\n        {\r\n            return StrLen(str, () => InternalEncoding);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_strlen\")]\r\n        public static int StrLen(object str, string encoding)\r\n        {\r\n            return StrLen(str, ()=>GetEncoding(encoding));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Counts characters in a Unicode string or multi-byte string in PhpBytes.\r\n        /// </summary>\r\n        /// <param name=\"str\">String or PhpBytes to use.</param>\r\n        /// <param name=\"encodingGetter\">Encoding used to encode PhpBytes</param>\r\n        /// <returns>Number of unicode characters in given object.</returns>\r\n        private static int StrLen(object str, getEncoding encodingGetter)\r\n        {\r\n            if (str == null)\r\n                return 0;\r\n\r\n            if (str.GetType() == typeof(string))\r\n            {\r\n                return ((string)str).Length;\r\n            }\r\n            else if (str.GetType() == typeof(PhpBytes))\r\n            {\r\n                Encoding encoding = encodingGetter();\r\n                if (encoding == null)\r\n                    throw new NotImplementedException();\r\n\r\n                return encoding.GetCharCount(((PhpBytes)str).ReadonlyData);\r\n            }\r\n            else\r\n            {\r\n                return (ObjectToString(str, encodingGetter) ?? string.Empty).Length;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_strrchr, mb_strrichr\r\n\r\n        #region mb_strrchr stub\r\n        [ImplementsFunction(\"mb_strrchr\")]\r\n        [return: CastToFalse]\r\n        public static string StrrChr(object haystack, object needle)\r\n        {\r\n            return StrrChr(haystack, needle, false, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strrchr\")]\r\n        [return: CastToFalse]\r\n        public static string StrrChr(object haystack, object needle, bool part/*=false*/)\r\n        {\r\n            return StrrChr(haystack, needle, part, () => InternalEncoding, false);\r\n        }\r\n        [ImplementsFunction(\"mb_strrchr\")]\r\n        [return:CastToFalse]\r\n        public static string StrrChr(object haystack, object needle, bool part/*=false*/, string encoding)\r\n        {\r\n            return StrrChr(haystack, needle, part, () => GetEncoding(encoding), false);\r\n        }\r\n        #endregion\r\n        #region mb_strrichr stub\r\n        [ImplementsFunction(\"mb_strrichr\")]\r\n        [return: CastToFalse]\r\n        public static string StrriChr(object haystack, object needle)\r\n        {\r\n            return StrrChr(haystack, needle, false, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_strrichr\")]\r\n        [return: CastToFalse]\r\n        public static string StrriChr(object haystack, object needle, bool part/*=false*/)\r\n        {\r\n            return StrrChr(haystack, needle, part, () => InternalEncoding, true);\r\n        }\r\n        [ImplementsFunction(\"mb_strrichr\")]\r\n        [return: CastToFalse]\r\n        public static string StrriChr(object haystack, object needle, bool part/*=false*/, string encoding)\r\n        {\r\n            return StrrChr(haystack, needle, part, () => GetEncoding(encoding), true);\r\n        }\r\n        #endregion\r\n\r\n        private static string StrrChr(object haystack, object needle, bool beforeNeedle/*=false*/, getEncoding encodingGetter, bool ignoreCase)\r\n        {\r\n            string uhaystack = ObjectToString(haystack, encodingGetter);\r\n            char cneedle;\r\n            {\r\n                string uneedle;\r\n\r\n                if (needle is string) uneedle = (string)needle;\r\n                else if (needle is PhpString) uneedle = ((IPhpConvertible)needle).ToString();\r\n                else if (needle is PhpBytes)\r\n                {\r\n                    Encoding encoding = encodingGetter();\r\n                    if (encoding == null)\r\n                        return null;\r\n\r\n                    PhpBytes bytes = (PhpBytes)needle;\r\n                    uneedle = encoding.GetString(bytes.ReadonlyData, 0, bytes.Length);\r\n                }\r\n                else\r\n                {   // needle as a character number\r\n                    Encoding encoding = encodingGetter();\r\n                    if (encoding == null)\r\n                        return null;\r\n\r\n                    uneedle = encoding.GetString(new byte[] { unchecked((byte)Core.Convert.ObjectToInteger(needle)) }, 0, 1);\r\n                }\r\n\r\n                if (string.IsNullOrEmpty(uneedle))\r\n                    return null;\r\n\r\n                cneedle = uneedle[0];\r\n            }\r\n\r\n            int index = (ignoreCase) ? uhaystack.ToLower().LastIndexOf(char.ToLower(cneedle)) : uhaystack.LastIndexOf(cneedle);\r\n            if (index < 0)\r\n                return null;\r\n\r\n            return (beforeNeedle) ? uhaystack.Remove(index) : uhaystack.Substring(index);\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_split\r\n\r\n        [ImplementsFunction(\"mb_split\")]\r\n        public static PhpArray Split(object pattern, object str)\r\n        {\r\n            return Split(pattern,str,-1);\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_split\")]\r\n        public static PhpArray Split(object pattern, object str, int limit /*= -1*/)\r\n        {\r\n            return Library.PosixRegExp.DoSplit(\r\n                ObjectToString(pattern, ()=>RegexEncoding),\r\n                ObjectToString(str, ()=>RegexEncoding),\r\n                limit,\r\n                limit != -1,\r\n                false);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region mb_language, mb_send_mail\r\n\r\n        /*/// <summary>\r\n        /// Multi Byte String language used by mail functions.\r\n        /// </summary>\r\n        public static string MailLanguage\r\n        {\r\n            get\r\n            {\r\n                return _mailLanguage ?? \"uni\";\r\n            }\r\n            set\r\n            {\r\n                _mailLanguage = value;  // TODO: check the value\r\n            }\r\n\r\n        }\r\n        [ThreadStatic]\r\n        private static string _mailLanguage = null;*/\r\n\r\n        /// <summary>\r\n        /// Get language used by mail functions.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        [ImplementsFunction(\"mb_language\")]\r\n        public static string GetMailLanguage()\r\n        {\r\n            return \"uni\";//MailLanguage;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Set the language used by mail functions.\r\n        /// </summary>\r\n        /// <param name=\"language\"></param>\r\n        /// <returns>True if language was set, otherwise false.</returns>\r\n        [ImplementsFunction(\"mb_language\")]\r\n        public static bool SetMailLanguage(string language)\r\n        {\r\n            PhpException.FunctionNotSupported();\r\n            return false;\r\n            //try\r\n            //{\r\n            //    MailLanguage = language;\r\n            //    return true;\r\n            //}\r\n            //catch\r\n            //{\r\n            //    return false;\r\n            //}\r\n        }\r\n\r\n        #region mb_send_mail(), TODO: use mb_language\r\n\r\n        [ImplementsFunction(\"mb_send_mail\")]\r\n        public static bool SendMail(string to, string subject, string message )\r\n        {\r\n            return PHP.Library.Mailer.Mail(to, subject, message);\r\n        }\r\n        [ImplementsFunction(\"mb_send_mail\")]\r\n        public static bool SendMail(string to, string subject, string message, string additional_headers /*= NULL*/ )\r\n        {\r\n            return PHP.Library.Mailer.Mail(to, subject, message, additional_headers);\r\n        }\r\n        [ImplementsFunction(\"mb_send_mail\")]\r\n        public static bool SendMail( string to, string subject, string message  , string additional_headers /*= NULL*/, string additional_parameter /*= NULL*/ )\r\n        {\r\n            return PHP.Library.Mailer.Mail(to, subject, message, additional_headers, additional_parameter);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region mb_parse_str\r\n\r\n        [ImplementsFunction(\"mb_parse_str\")]\r\n        public static bool ParseStr(string encoded_string, PhpReference array)\r\n        {\r\n            try\r\n            {\r\n                PhpArray result = new PhpArray();\r\n\r\n                foreach (var x in ParseUrlEncodedGetParameters(encoded_string))\r\n                    result.Add(x.Key, x.Value);\r\n                \r\n                array.Value = result;\r\n\r\n                return true;\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        [ImplementsFunction(\"mb_parse_str\")]\r\n        public static bool ParseStr(string encoded_string)\r\n        {\r\n            try\r\n            {\r\n                PhpArray result = ScriptContext.CurrentContext.GlobalVariables;\r\n\r\n                foreach (var x in ParseUrlEncodedGetParameters(encoded_string))\r\n                    result.Add(x.Key, x.Value);\r\n                \r\n                return true;\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Decodes URL encoded string and parses GET parameters.\r\n        /// </summary>\r\n        /// <param name=\"getParams\">URL encoded GET parameters string.</param>\r\n        /// <returns>Enumerator of decoded and parsed GET parameters as pairs of (name, value).</returns>\r\n        private static IEnumerable<KeyValuePair<string,string>> ParseUrlEncodedGetParameters(string getParams)\r\n        {\r\n            foreach (var str in System.Web.HttpUtility.UrlDecode(getParams).Split(new char[]{'&'}))\r\n            {\r\n                if (str.Length == 0)\r\n                    continue;\r\n\r\n                int eqPos = str.IndexOf('=');\r\n\r\n                if (eqPos > 0)\r\n                {\r\n                    // name = value\r\n                    yield return new KeyValuePair<string, string>(str.Substring(0, eqPos), str.Substring(eqPos + 1));\r\n                }\r\n                else if (eqPos == 0)\r\n                {\r\n                    // ignore, no variable name\r\n                }\r\n                else\r\n                {\r\n                    // just variable name\r\n                    yield return new KeyValuePair<string, string>(str, null);\r\n                }\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "Source/Extensions/mbstring/web.config.install.xdt",
    "content": "<?xml version=\"1.0\"?>\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n\t<phpNet xdt:Transform=\"InsertIfMissing\" />\n\t<phpNet>\n\t\t<classLibrary xdt:Transform=\"InsertIfMissing\" />\n\t\t<classLibrary>\n\t\t\t<add assembly=\"PhpNetMbstring\" xdt:Transform=\"InsertIfMissing\" xdt:Locator=\"Match(assembly)\" />\n\t\t</classLibrary>\n\t</phpNet>\n</configuration>\n"
  },
  {
    "path": "Source/Extensions/mbstring/web.config.uninstall.xdt",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"PhpNetMbstring\" xdt:Transform=\"Remove\" xdt:Locator=\"Match(assembly)\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/AppendIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\n//NOT TESTED OR MODIFIED YET\r\n\r\nclass AppendIterator implements OuterIterator\r\n{\r\n    private $iterators;\r\n\r\n    function __construct()\r\n    {\r\n        $this->iterators = new ArrayIterator();\r\n    }\r\n\r\n    function append(Iterator $it)\r\n    {\r\n        $this->iterators->append($it);\r\n    }\r\n\r\n    function getInnerIterator()\r\n    {\r\n        return $this->iterators->current();\r\n    }\r\n\r\n    function rewind()\r\n    {\r\n        $this->iterators->rewind();\r\n        if ($this->iterators->valid())\r\n        {\r\n            $this->getInnerIterator()->rewind();\r\n        }\r\n    }\r\n\r\n    function valid()\r\n    {\r\n        return $this->iterators->valid() && $this->getInnerIterator()->valid();\r\n    }\r\n\r\n    function current()\r\n    {\r\n        /* Using $this->valid() would be exactly the same; it would omit\r\n         * the access to a non valid element in the inner iterator. Since\r\n         * the user didn't respect the valid() return value false this\r\n         * must be intended hence we go on. */\r\n        return $this->iterators->valid() ? $this->getInnerIterator()->current() : NULL;\r\n    }\r\n\r\n    function key()\r\n    {\r\n        return $this->iterators->valid() ? $this->getInnerIterator()->key() : NULL;\r\n    }\r\n\r\n    function next()\r\n    {\r\n        if (!$this->iterators->valid())\r\n        {\r\n            return; /* done all */\r\n        }\r\n        $this->getInnerIterator()->next();\r\n        if ($this->getInnerIterator()->valid())\r\n        {\r\n            return; /* found valid element in current inner iterator */\r\n        }\r\n        $this->iterators->next();\r\n        while ($this->iterators->valid())\r\n        {\r\n            $this->getInnerIterator()->rewind();\r\n            if ($this->getInnerIterator()->valid())\r\n            {\r\n                return; /* found element as first elemet in another iterator */\r\n            }\r\n            $this->iterators->next();\r\n        }\r\n    }\r\n\r\n    function __call($func, $params)\r\n    {\r\n        return call_user_func_array(array($this->getInnerIterator(), $func), $params);\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/ArrayIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass ArrayIterator implements SeekableIterator, ArrayAccess, Countable {\r\n        \r\n        const STD_PROP_LIST = 1;\r\n        const ARRAY_AS_PROPS = 2;\r\n\r\n\r\n\tprivate $array = array();\r\n\t\t\r\n\r\n  \tpublic function __construct($array = null) {\r\n  \t \tif(is_null($array)) {\r\n  \t \t  $this->array = array();\r\n  \t \t} else {\r\n\t\t  $this->array = $array;\r\n\t\t}\r\n\t\t  \r\n\t}\r\n\r\n\r\n\tfunction offsetExists($index) \r\n\t{\r\n\t}\r\n\r\n\r\n\r\n\tfunction offsetGet($index)\r\n\t{\r\n\t}\r\n\r\n\r\n\tfunction offsetSet($index, $newval) {\r\n\t}\r\n\r\n\t\r\n\tfunction offsetUnset($index) {\r\n\t}\r\n\r\n\t\r\n\tfunction append($value) {\r\n\t}\r\n\r\n\t\r\n\tfunction getArrayCopy() {\r\n\t  return $this->array();\r\n\t}\r\n\r\n\t\r\n\tfunction seek($position)\r\n\t{\r\n\t}\r\n\r\n\t\r\n\tfunction count() {\r\n\t  return count($this->array);\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t// iterator:\r\n\tfunction next()\r\n\t{\r\n\t}\r\n\t\r\n\tfunction key()\r\n\t{\r\n\t}\r\n\t\r\n\tfunction current()\r\n\t{\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t}\r\n\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/ArrayObject.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass ArrayObject implements IteratorAggregate, ArrayAccess, Countable {\r\n\r\n\tconst ARRAY_AS_PROPS = 0x00000002;\r\n\tconst STD_PROP_LIST = 0x00000001;\r\n        \r\n        private $array;\r\n        private $type = \"array\";\r\n        private $originalObject;\r\n        private $flags;\r\n        \r\n        private $iterator_class = \"ArrayIterator\";\r\n\r\n\t/** Construct a new array iterator from anything that has a hash table.\r\n\t * That is any Array or Object.\r\n\t *\r\n\t * @param $array the array to use.\r\n\t */\r\n\tfunction __construct($array, $flags = 0, $iterator_class = \"ArrayIterator\") {\r\n\t  $this->flags = $flags;\r\n\t  $this->iterator_class = $iterator_class;\r\n\t\r\n\t  \r\n\t  if(is_object($array)) {\r\n\t    $this->array = (array)$array;\r\n\t    $this->type = \"object\";\r\n\t    //Maybe its needed for further operations...\r\n\t    $this->originalObject = $array;\r\n\t  } else {\r\n\t    $this->array = $array;\r\n\t  }\r\n\r\n\t}\r\n\r\n\r\n\t/** @return the iterator which is an ArrayIterator object connected to\r\n\t * this object.\r\n\t */\r\n\tfunction getIterator() {\r\n\t  return new $this->iterator_class($this->array);\r\n\t}\r\n\r\n\r\n\t/** @param $index offset to inspect\r\n\t * @return whetehr offset $index esists\r\n\t */\t\r\n\tfunction offsetExists($index) {\r\n\t  return isset($this->array[$index]);\r\n\t}\r\n\r\n\r\n\t/** @param $index offset to return value for\r\n\t * @return value at offset $index\r\n\t */\t\r\n\tfunction offsetGet($index) {\r\n\t  if($this->offsetExists($index)) {\r\n            return $this->array[$index];\r\n\t  }\r\n\t}\r\n\r\n\t/** @param $index index to set\r\n\t * @param $newval new value to store at offset $index\r\n\t */\t\r\n\tfunction offsetSet($index, $newval) {\r\n\t  $this->array[$index] = $newval;\r\n\t}\r\n\r\n\t/** @param $index offset to unset\r\n\t */\t\r\n\tfunction offsetUnset($index) {\r\n\t  unset($this->array[$index]);\r\n\t}\r\n\r\n\t/** @param $value is appended as last element\r\n\t * @warning this method cannot be called when the ArrayObject refers to \r\n\t *          an object.\r\n\t */\t\r\n\tfunction append($value) {\r\n\t  if($this->type == \"object\") {\r\n\t    trigger_error(\"Have to emulate behavior of PHP ArrayObject. Original data was an object so use ArrayObject::offsetSet instead of ArrayObject::append().\", E_USER_ERROR);\r\n\t  } else {\r\n\t    $this->array[] = $value;\r\n\t  }\r\n\t}\r\n\r\n\t/** @return a \\b copy of the array\r\n\t * @note when the ArrayObject refers to an object then this method \r\n\t *       returns an array of the public properties.\r\n\t */\t\r\n\tfunction getArrayCopy() {\r\n\t  return $this->array;\r\n\t}\r\n\r\n\t/** @return the number of elements in the array or the number of public\r\n\t * properties in the object.\r\n\t */\r\n\tfunction count() {\r\n\t  return count($this->array());\r\n\t}\r\n\t\r\n\t\r\n\tfunction setIteratorClass($iterator_class) {\r\n\t  $this->iterator_class = $iterator_class;\r\n\t}\r\n\r\n\r\n\tfunction getIteratorClass() {\r\n\t  return $this->iterator_class;\r\n\t}\r\n\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/BadFunctionCallException.php",
    "content": "<?php\r\n\r\nclass BadFunctionCallException extends LogicException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/BadMethodCallException.php",
    "content": "<?php\r\n\r\nclass BadMethodCallException extends BadFunctionCallException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/CachingIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass CachingIterator implements OuterIterator\r\n{\r\n    const CALL_TOSTRING        = 0x00000001;\r\n    const CATCH_GET_CHILD      = 0x00000002;\r\n    const TOSTRING_USE_KEY     = 0x00000010;\r\n    const TOSTRING_USE_CURRENT = 0x00000020;\r\n\r\n    private $it;\r\n    private $current;\r\n    private $key;\r\n    private $valid;\r\n    private $strValue;\r\n\r\n    function __construct(Iterator $it, $flags = self::CALL_TOSTRING)\r\n    {\r\n        //Fixed some CIT_* constants to use class constants\r\n        if ((($flags & self::CALL_TOSTRING) && ($flags & (self::TOSTRING_USE_KEY|self::TOSTRING_USE_CURRENT)))\r\n        || (($flags & (self::TOSTRING_USE_KEY|self::TOSTRING_USE_CURRENT)) == (self::TOSTRING_USE_KEY|self::TOSTRING_USE_CURRENT)))\r\n        {\r\n            throw new InvalidArgumentException('Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT');\r\n        }\r\n        $this->it = $it;\r\n        $this->flags = $flags & (0x0000FFFF);\r\n        $this->next();\r\n    }\r\n\r\n    function rewind()\r\n    {\r\n        $this->it->rewind();\r\n        $this->next();\r\n    }\r\n    \r\n    function next()\r\n    {\r\n        if ($this->valid = $this->it->valid()) {\r\n            $this->current = $this->it->current();\r\n            $this->key = $this->it->key();\r\n            if ($this->flags & self::CALL_TOSTRING) {\r\n                if (is_object($this->current)) {\r\n                    $this->strValue = $this->current->__toString();\r\n                } else {\r\n                    $this->strValue = (string)$this->current;\r\n                }\r\n            }\r\n        } else {\r\n            $this->current = NULL;\r\n            $this->key = NULL;\r\n            $this->strValue = NULL;\r\n        }\r\n        $this->it->next();\r\n    }\r\n    \r\n    function valid()\r\n    {\r\n        return $this->valid;\r\n    }\r\n\r\n    function hasNext()\r\n    {\r\n        return $this->it->valid();\r\n    }\r\n    \r\n    function current()\r\n    {\r\n        return $this->current;\r\n    }\r\n\r\n    function key()\r\n    {\r\n        return $this->key;\r\n    }\r\n\r\n    function __call($func, $params)\r\n    {\r\n        return call_user_func_array(array($this->it, $func), $params);\r\n    }\r\n    \r\n    function __toString()\r\n    {\r\n        if ($this->flags & self::TOSTRING_USE_KEY)\r\n        {\r\n            return $this->key;\r\n        }\r\n        else if ($this->flags & self::TOSTRING_USE_CURRENT)\r\n        {\r\n            return $this->current;\r\n        }\r\n        if (!$this->flags & self::CALL_TOSTRING)\r\n        {\r\n            throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');\r\n        }\r\n        return $this->strValue;\r\n    }\r\n    \r\n    function getInnerIterator()\r\n    {\r\n        return $this->it;\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/Countable.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface Countable {\r\n  function count();\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/DirectoryIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass DirectoryIterator extends SplFileInfo implements Iterator {\r\n    \r\n    protected $entry = NULL;\r\n    protected $dirObject;\r\n    protected $path;\r\n\r\n    function __construct($path) {\r\n      if(!file_exists($path)) {\r\n      \tthrow new RuntimeException(\"Path $path not found\");\r\n      }\r\n      parent::__construct($path);\r\n    \r\n      $this->path = $path;\r\n    \r\n      $this->dirObject = dir($path);\r\n      $this->next();\r\n    }\r\n\r\n    function rewind() {\r\n      $this->dirObject->rewind();\r\n    }\r\n    \r\n\r\n    function valid() {\r\n      \r\n      if(is_null($this->entry)) {\r\n      \t$this->next();\r\n      }\r\n   \r\n      if($this->entry) {\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n\r\n\r\n    function key() {\r\n      return NULL;\r\n    }\r\n\r\n\r\n    function current() {\r\n      return $this->entry;\r\n    }\r\n\r\n\r\n    function next() {\r\n      $this->entry = $this->dirObject->read();\r\n      if($this->entry) {\r\n      \tparent::__construct($this->entry);        \r\n      }\r\n    }\r\n\r\n\r\n    function isDot() {\r\n      if($this->entry == \".\" || $this->entry == \"..\") {\r\n      \treturn true;\r\n      }\r\n      return false;\r\n    } \r\n\r\n\r\n    function __toString() {\r\n      return (string)$this->entry;\r\n    }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/DomainException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass DomainException extends LogicException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/EmptyIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass EmptyIterator implements Iterator {\r\n \t\r\n     function rewind() {\r\n         // nothing to do\r\n     }\r\n \r\n     function valid() {\r\n         return false;\r\n     }\r\n \r\n     function current() {\r\n         throw new Exception('Accessing the value of an EmptyIterator');\r\n     }\r\n \r\n     function key() {\r\n         throw new Exception('Accessing the key of an EmptyIterator');\r\n     }\r\n \r\n     function next() {\r\n         // nothing to do\r\n     }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/FilterIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nabstract class FilterIterator implements OuterIterator\r\n{\r\n    private $it;\r\n\r\n    function __construct(Iterator $it) {\r\n        $this->it = $it;\r\n    }\r\n\r\n    function rewind() { \r\n        $this->it->rewind();\r\n        $this->fetch();\r\n    }\r\n\r\n    abstract function accept();\r\n\r\n    protected function fetch() {\r\n        while ($this->it->valid()) {\r\n            if ($this->accept()) {\r\n                return;\r\n            }\r\n            $this->it->next();\r\n        };\r\n    }\r\n\r\n    function next() {\r\n        $this->it->next();\r\n        $this->fetch();\r\n    }\r\n    \r\n    function valid() {\r\n        return $this->it->valid();\r\n    }\r\n    \r\n    function key() {\r\n        return $this->it->key();\r\n    }\r\n    \r\n    function current() {\r\n        return $this->it->current();\r\n    }\r\n    \r\n    protected function __clone() {\r\n        // disallow clone \r\n    }\r\n\r\n    function getInnerIterator()\r\n    {\r\n        return $this->it;\r\n    }\r\n\r\n    function __call($func, $params)\r\n    {\r\n        return call_user_func_array(array($this->it, $func), $params);\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/InfiniteIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass InfiniteIterator extends IteratorIterator {\r\n\r\n  function next() {\r\n    $this->getInnerIterator()->next();\r\n    if(!$this->getInnerIterator()->valid()) {\r\n      $this->getInnerIterator()->rewind();\r\n    }\r\n  }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/InvalidArgumentException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass InvalidArgumentException extends LogicException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/IteratorIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass IteratorIterator implements OuterIterator {\r\n\t\r\n  private $iterator;\r\n\r\n  function __construct($iterator, $classname = null) {\r\n    if($iterator instanceof IteratorAggregate) {\r\n      $iterator = $iterator->getIterator();\r\n    }\r\n    \r\n    if($iterator instanceof Iterator) {\r\n      $this->iterator = $iterator;\r\n    } else {\r\n      throw new Exception(\"Classes that only implement Traversable can be wrapped only after converting class IteratorIterator into c code\");\r\n    }\r\n  }\r\n\r\n  function getInnerIterator() {\r\n    return $this->iterator;\r\n  }\r\n\r\n  function valid() {\r\n    return $this->iterator->valid();\r\n  }\r\n\r\n  function key() {\r\n    return $this->iterator->key();\r\n  }\r\n\r\n  function current() {\r\n    return $this->iterator->current();\r\n  }\r\n\r\n  function next() {\r\n    return $this->iterator->next();\r\n  }\r\n\r\n  function rewind() {\r\n    return $this->iterator->rewind();\r\n  }\r\n\r\n  function __call($func, $params) {\r\n    return call_user_func_array(array($this->it, $func), $params);\r\n  }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/LengthException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass LengthException extends LogicException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/LimitIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass LimitIterator implements OuterIterator {\r\n    \r\n    private $it;\r\n    private $offset;\r\n    private $count;\r\n    private $pos;\r\n\r\n    function __construct(Iterator $it, $offset = 0, $count = -1)\r\n    {\r\n        if ($offset < 0) {\r\n            throw new Exception('Parameter offset must be > 0');\r\n        }\r\n        if ($count < 0 && $count != -1) {\r\n            throw new Exception('Parameter count must either be -1 or a value greater than or equal to 0');\r\n        }\r\n        $this->it     = $it;\r\n        $this->offset = $offset;\r\n        $this->count  = $count;\r\n        $this->pos    = 0;\r\n    }\r\n    \r\n    function seek($position) {\r\n        if ($position < $this->offset) {\r\n            throw new Exception('Cannot seek to '.$position.' which is below offset '.$this->offset);\r\n        }\r\n        if ($position > $this->offset + $this->count && $this->count != -1) {\r\n            throw new Exception('Cannot seek to '.$position.' which is behind offset '.$this->offset.' plus count '.$this->count);\r\n        }\r\n        if ($this->it instanceof SeekableIterator) {\r\n            $this->it->seek($position);\r\n            $this->pos = $position;\r\n        } else {\r\n            while($this->pos < $position && $this->it->valid()) {\r\n                $this->next();\r\n            }\r\n        }\r\n    }\r\n\r\n    function rewind()\r\n    {\r\n        $this->it->rewind();\r\n        $this->pos = 0;\r\n        $this->seek($this->offset);\r\n    }\r\n    \r\n    function valid() {\r\n        return ($this->count == -1 || $this->pos < $this->offset + $this->count)\r\n             && $this->it->valid();\r\n    }\r\n    \r\n    function key() {\r\n        return $this->it->key();\r\n    }\r\n\r\n    function current() {\r\n        return $this->it->current();\r\n    }\r\n\r\n    function next() {\r\n        $this->it->next();\r\n        $this->pos++;\r\n    }\r\n\r\n    function getPosition() {\r\n        return $this->pos;\r\n    }\r\n\r\n    function getInnerIterator() {\r\n        return $this->it;\r\n    }\r\n\r\n    function __call($func, $params) {\r\n        return call_user_func_array(array($this->it, $func), $params);\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/LogicException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass LogicException extends Exception{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/NorewindIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass NoRewindIterator extends IteratorIterator {\r\n    function rewind() {\r\n        // nothing to do\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/OutOfBoundsException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass OutOfBoundsException extends RuntimeException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/OutOfRangeException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass OutOfRangeException extends LogicException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/OuterIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface OuterIterator extends Iterator {\r\n\r\n  function getInnerIterator();\r\n\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/OverflowException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass OverflowException extends RuntimeException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/ParentIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass ParentIterator extends RecursiveFilterIterator\r\n{\r\n    function __construct(RecursiveIterator $it)\r\n    {\r\n        parent::__construct($it);\r\n    }\r\n    \r\n    function accept()\r\n    {\r\n        return $this->it->hasChildren();\r\n    }\r\n\r\n    function getChildren()\r\n    {\r\n     return new ParentIterator($this->it->getChildren());\r\n  }\r\n}\r\n \r\n?>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/RangeException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass RangeException extends RuntimeException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveArrayIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator {\r\n\r\n  private $ref;\r\n\r\n  function hasChildren() {\r\n    return is_array($this->current());\r\n  }\r\n\r\n  function getChildren() {\r\n    if($this->current() instanceof self) {\r\n      return $this->current();\r\n    }\r\n\r\n    if(empty($this->ref)) {\r\n      //TODO:\r\n      //$this->ref = new ReflectionClass($this);\r\n    }\r\n\r\n    //return $this->ref->newInstance($this->current());\r\n    return new RecursiveArrayIterator($this->current());\r\n  }\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveCachingIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass RecursiveCachingIterator extends CachingIterator implements RecursiveIterator\r\n{\r\n    private $hasChildren;\r\n    private $getChildren;\r\n    private $ref;\r\n\r\n    function __construct(RecursiveIterator $it, $flags = self::CALL_TOSTRING)\r\n    {\r\n        parent::__construct($it, $flags);\r\n    }\r\n\r\n    function rewind()\r\n    {\r\n       $this->hasChildren = false;\r\n       $this->getChildren = NULL;\r\n       parent::rewind();\r\n    }\r\n\r\n    function next()\r\n    {\r\n        if ($this->hasChildren = $this->it->hasChildren())\r\n        {\r\n            try\r\n            {\r\n                $child = $this->it->getChildren();\r\n                if (!$this->ref)\r\n                {\r\n                  //TODO:\r\n                  //  $this->ref = new ReflectionClass($this);\r\n                }\r\n                //$this->getChildren = $ref->newInstance($child, $this->flags);\r\n            }\r\n            catch(Exception $e)\r\n            {\r\n                if (!$this->flags & self::CATCH_GET_CHILD)\r\n                {\r\n                    throw $e;\r\n                }\r\n                $this->hasChildren = false;\r\n                $this->getChildren = NULL;\r\n            }\r\n        } else\r\n        {\r\n            $this->getChildren = NULL;\r\n        }\r\n        parent::next();\r\n    }\r\n    \r\n    function hasChildren()\r\n    {\r\n        return $this->hasChildren;\r\n    }\r\n\r\n    function getChildren()\r\n    {\r\n        return $this->getChildren;\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveDirectoryIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass RecursiveDirectoryIterator extends DirectoryIterator implements RecursiveIterator {\r\n\r\n  const CURRENT_AS_FILEINFO =  0x00000010; /* make RecursiveDirectoryTree::current() return SplFileInfo */\r\n  const KEY_AS_FILENAME     =  0x00000020; /* make RecursiveDirectoryTree::key() return getFilename() */\r\n  const NEW_CURRENT_AND_KEY =  0x00000030; /* CURRENT_AS_FILEINFO + KEY_AS_FILENAME */\r\n\r\n  protected $flags;\r\n\r\n  function __construct($path, $flags = 0) {\r\n\r\n    parent::__construct($path);\r\n    $this->flags = $flags;\r\n  }\r\n\r\n/*\r\n  function key() {\r\n\r\n  }\r\n*/\r\n\r\n  function current() {\r\n    return $this->path.\"/\".$this->entry;\r\n  }\r\n\r\n\r\n  function hasChildren() {\r\n    if($this->current() == \".\" || $this->current() == \"..\") {\r\n      return false;\r\n    }\r\n    return is_dir($this->current);\r\n  }\r\n\r\n\r\n  function getChildren() {\r\n  \r\n  }\r\n\r\n\r\n  function getSubPath() {\r\n  \t\r\n  }\r\n\r\n  function getSubPathname() {\r\n  \t\r\n  }\r\n\r\n  function getSubPathInfo($class_name = NULL) {\r\n\r\n    if(is_null($class_name)) {\t\r\n      return new SplFileInfo($this->entry);\r\n    }\r\n\r\n    return new $class_name($this->entry);\r\n\r\n  }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveFilterIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nabstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator\r\n{\r\n\r\n    private $ref;\r\n\r\n    function __construct(RecursiveIterator $it)\r\n    {\r\n        parent::__construct($it);\r\n    }\r\n    \r\n    function hasChildren()\r\n    {\r\n        return $this->getInnerIterator()->hasChildren();\r\n    }\r\n\r\n\r\n\r\n    function getChildren()\r\n    {\r\n/* Reflection is missing\r\n        if(empty($this->ref))\r\n        {\r\n            $this->ref = new ReflectionClass($this);\r\n        }\r\n        return $this->ref->newInstance($this->getInnerIterator()->getChildren());\r\n*/\r\n    }\r\n\r\n\r\n}\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface RecursiveIterator extends Iterator {\r\n\r\n  public function getChildren();\r\n  public function hasChildren();\r\n  \r\n}\r\n\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RecursiveIteratorIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass RecursiveIteratorIterator implements OuterIterator\r\n{\r\n    const LEAVES_ONLY       = 0;\r\n    const SELF_FIRST        = 1;\r\n    const CHILD_FIRST       = 2;\r\n\r\n    const CATCH_GET_CHILD   = 0x00000002;\r\n\r\n    private $ait   = array();\r\n    private $level = 0;\r\n    private $mode  = self::LEAVES_ONLY;\r\n    private $flags = 0;\r\n    private $max_depth = -1;\r\n\r\n    function __construct(RecursiveIterator $it, $mode = self::LEAVES_ONLY, $flags = 0)\r\n    {\r\n        $this->ait[0] = $it;\r\n        $this->mode   = $mode;\r\n        $this->flags  = $flags;\r\n    }\r\n\r\n    function rewind()\r\n    {\r\n        while ($this->level) {\r\n            unset($this->ait[$this->level--]);\r\n            $this->endChildren();\r\n        }\r\n        $this->ait[0]->rewind();\r\n        $this->ait[0]->recursed = false;\r\n        $this->callNextElement(true);\r\n    }\r\n    \r\n    function valid()\r\n    {\r\n        $level = $this->level;\r\n        while ($level >= 0) {\r\n            $it = $this->ait[$level];\r\n            if ($it->valid()) {\r\n                return true;\r\n            }\r\n            $level--;\r\n            $this->endChildren();\r\n        }\r\n        return false;\r\n    }\r\n    \r\n    function key()\r\n    {\r\n        $it = $this->ait[$this->level];\r\n        return $it->key();\r\n    }\r\n    \r\n    function current()\r\n    {\r\n        $it = $this->ait[$this->level];\r\n        return $it->current();\r\n    }\r\n    \r\n    function next()\r\n    {\r\n        while ($this->level >= 0) {\r\n            $it = $this->ait[$this->level];\r\n            if ($it->valid()) {\r\n                if (!$it->recursed && $this->callHasChildren()) {\r\n                    if ($this->max_depth == -1 || $this->max_depth > $this->level) {\r\n                        $it->recursed = true;\r\n                        try\r\n                        {\r\n                            $sub = $this->callGetChildren();\r\n                        }\r\n                        catch (Exception $e)\r\n                        {\r\n                            if (!($this->flags & self::CATCH_GET_CHILD))\r\n                            {\r\n                                throw $e;\r\n                            }\r\n                            $it->next();\r\n                            continue;\r\n                        }\r\n                        $sub->recursed = false;\r\n                        $sub->rewind();\r\n                        if ($sub->valid()) {\r\n                            $this->ait[++$this->level] = $sub;\r\n                            if (!$sub instanceof RecursiveIterator) {\r\n                                throw new Exception(get_class($sub).'::getChildren() must return an object that implements RecursiveIterator');\r\n                            }\r\n                            $this->beginChildren();\r\n                            return;\r\n                        }\r\n                        unset($sub);\r\n                    }\r\n                    else\r\n                    {\r\n                        /* do not recurse because of depth restriction */\r\n                        if ($this->flages & self::LEAVES_ONLY)\r\n                        {\r\n                            $it->next();\r\n                            continue;\r\n                        }\r\n                        else\r\n                        {\r\n                            return; // we want the parent\r\n                        }\r\n                    }\r\n                    $it->next();\r\n                    $it->recursed = false;\r\n                    if ($it->valid()) {\r\n                        return;\r\n                    }\r\n                    $it->recursed = false;\r\n                }\r\n            }\r\n            else if ($this->level > 0) {\r\n                unset($this->ait[$this->level--]);\r\n                $it = $this->ait[$this->level];\r\n                $this->endChildren();\r\n                $this->callNextElement(false);\r\n            }\r\n        }\r\n        $this->callNextElement(true);\r\n    }\r\n\r\n    function getSubIterator($level = NULL)\r\n    {\r\n        if (is_null($level)) {\r\n            $level = $this->level;\r\n        }\r\n        return @$this->ait[$level];\r\n    }\r\n\r\n    function getInnerIterator()\r\n    {\r\n        return $this->it;\r\n    }\r\n\r\n    function getDepth()\r\n    {\r\n        return $this->level;\r\n    }\r\n\r\n    function callHasChildren()\r\n    {\r\n        return $this->ait[$this->level]->hasChildren();\r\n    }\r\n\r\n    function callGetChildren()\r\n    {\r\n        return $this->ait[$this->level]->getChildren();\r\n    }\r\n\r\n    function beginChildren()\r\n    {\r\n    }\r\n    \r\n    function endChildren()\r\n    {\r\n    }\r\n\r\n    private function callNextElement($after_move)\r\n    {\r\n        if ($this->valid())\r\n        {\r\n            if ($after_move)\r\n            {\r\n                if(($this->mode == self::SELF_FIRST && $this->callHasChildren() || $this->mode == self::LEAVES_ONLY)) {\r\n                  $this->nextElement();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                $this->nextElement();\r\n            }\r\n        }\r\n    }\r\n    \r\n    function nextElement() {\r\n    \r\n    }\r\n\r\n    function setMaxDepth($max_depth = -1)\r\n    {\r\n        $max_depth = (int)$max_depth;\r\n        if ($max_depth < -1) {\r\n            throw new OutOfRangeException('Parameter max_depth must be >= -1');\r\n        }\r\n        $this->max_depth = $max_depth;\r\n    }\r\n    \r\n    function getMaxDepth()\r\n    {\r\n        return $this->max_depth == -1 ? false : $this->max_depth;\r\n    }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/RuntimeException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass RuntimeException extends Exception{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SPL.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nfunction spl_autoload($class_name, $file_extensions = NULL) {}\r\n\r\n \r\nfunction spl_autoload_call($class_name) {}\r\n\r\n \r\nfunction spl_autoload_extensions($file_extensions) {}\r\n\r\n \r\nfunction spl_autoload_functions() {}\r\n\r\n \r\nfunction spl_autoload_register($autoload_function = \"spl_autoload\", $throw = true) {}\r\n\r\n\r\nfunction spl_autoload_unregister($autoload_function = \"spl_autoload\") {}\r\n\r\n\r\nfunction spl_classes() {\r\n\r\n  return array(\r\n      \"AppendIterator\" => \"AppendIterator\",\r\n      \"ArrayIterator\" => \"ArrayIterator\",\r\n      \"ArrayObject\" => \"ArrayObject\",\r\n      \"BadFunctionCallException\" => \"BadFunctionCallException\",\r\n      \"BadMethodCallException\" => \"BadMethodCallException\",\r\n      \"CachingIterator\" => \"CachingIterator\",\r\n      \"Countable\" => \"Countable\",\r\n      \"DirectoryIterator\" => \"DirectoryIterator\",\r\n      \"DomainException\" => \"DomainException\",\r\n      \"EmptyIterator\" => \"EmptyIterator\",\r\n      \"FilterIterator\" => \"FilterIterator\",\r\n      \"InfiniteIterator\" => \"InfiniteIterator\",\r\n      \"InvalidArgumentException\" => \"InvalidArgumentException\",\r\n      \"IteratorIterator\" => \"IteratorIterator\",\r\n      \"LengthException\" => \"LengthException\",\r\n      \"LimitIterator\" => \"LimitIterator\",\r\n      \"LogicException\" => \"LogicException\",\r\n      \"NoRewindIterator\" => \"NoRewindIterator\",\r\n      \"OuterIterator\" => \"OuterIterator\",\r\n      \"OutOfBoundsException\" => \"OutOfBoundsException\",\r\n      \"OutOfRangeException\" => \"OutOfRangeException\",\r\n      \"OverflowException\" => \"OverflowException\",\r\n      \"ParentIterator\" => \"ParentIterator\",\r\n      \"RangeException\" => \"RangeException\",\r\n      \"RecursiveArrayIterator\" => \"RecursiveArrayIterator\",\r\n      \"RecursiveCachingIterator\" => \"RecursiveCachingIterator\",\r\n      \"RecursiveDirectoryIterator\" => \"RecursiveDirectoryIterator\",\r\n      \"RecursiveFilterIterator\" => \"RecursiveFilterIterator\",\r\n      \"RecursiveIterator\" => \"RecursiveIterator\",\r\n      \"RecursiveIteratorIterator\" => \"RecursiveIteratorIterator\",\r\n      \"RuntimeException\" => \"RuntimeException\",\r\n      \"SeekableIterator\" => \"SeekableIterator\",\r\n//      \"SimpleXMLIterator\" => \"SimpleXMLIterator\",\r\n      \"SplFileInfo\" => \"SplFileInfo\",\r\n      \"SplFileObject\" => \"SplFileObject\",\r\n      \"SplObjectStorage\" => \"SplObjectStorage\",\r\n      \"SplObserver\" => \"SplObserver\",\r\n      \"SplSubject\" => \"SplSubject\",\r\n//      \"SplTempFileObject\" => \"SplTempFileObject\",\r\n      \"UnderflowException\" => \"UnderflowException\",\r\n      \"UnexpectedValueException\" => \"UnexpectedValueException\"\r\n  );\r\n}\r\n\r\n \r\nfunction iterator_count(Traversable $it) {}\r\n\r\n \r\nfunction iterator_to_array(Traversable $it) {}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SPL.phpproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>SPL</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{811ec666-2c08-4739-ad11-0af772b892e6}</ProjectGuid>\r\n    <CompilationMode>Pure</CompilationMode>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>SPL</RootNamespace>\r\n    <AssemblyName>SPL</AssemblyName>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccProvider>SAK</SccProvider>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <TargetKind>dll</TargetKind>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <TargetKind>dll</TargetKind>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\2.0\\Phalanger.targets\" />\r\n  <ItemGroup>\r\n    <Compile Include=\"AppendIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ArrayIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ArrayObject.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"BadFunctionCallException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"BadMethodCallException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"CachingIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Countable.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"DirectoryIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"DomainException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"EmptyIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"FilterIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"InfiniteIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"InvalidArgumentException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"IteratorIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LengthException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LimitIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LogicException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"NorewindIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"OuterIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"OutOfBoundsException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"OutOfRangeException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"OverflowException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ParentIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RangeException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveArrayIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveCachingIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveDirectoryIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveFilterIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RecursiveIteratorIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"RuntimeException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SeekableIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SimpleXMLIterator.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SPL.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplFileInfo.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplFileObject.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplObjectStorage.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplObserver.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplSubject.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"SplTempFileObject.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"UnderFlowException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"UnexpectedValueException.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Source/Libraries/SPL/SPL.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 9.00\r\n# Visual Studio 2005\r\nProject(\"{1EA040D2-53F6-4409-9FA4-7C60E868BB52}\") = \"SPL\", \"SPL.phpproj\", \"{811EC666-2C08-4739-AD11-0AF772B892E6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(TeamFoundationVersionControl) = preSolution\r\n\t\tSccNumberOfProjects = 2\r\n\t\tSccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}\r\n\t\tSccTeamFoundationServer = https://tfs01.codeplex.com/\r\n\t\tSccLocalPath0 = .\r\n\t\tSccProjectUniqueName1 = SPL.phpproj\r\n\t\tSccLocalPath1 = .\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{811EC666-2C08-4739-AD11-0AF772B892E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{811EC666-2C08-4739-AD11-0AF772B892E6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{811EC666-2C08-4739-AD11-0AF772B892E6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{811EC666-2C08-4739-AD11-0AF772B892E6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Source/Libraries/SPL/SPL.vssscc",
    "content": "﻿\"\"\r\n{\r\n\"FILE_VERSION\" = \"9237\"\r\n\"ENLISTMENT_CHOICE\" = \"NEVER\"\r\n\"PROJECT_FILE_RELATIVE_PATH\" = \"\"\r\n\"NUMBER_OF_EXCLUDED_FILES\" = \"0\"\r\n\"ORIGINAL_PROJECT_FILE_PATH\" = \"\"\r\n\"NUMBER_OF_NESTED_PROJECTS\" = \"0\"\r\n\"SOURCE_CONTROL_SETTINGS_PROVIDER\" = \"PROJECT\"\r\n}\r\n"
  },
  {
    "path": "Source/Libraries/SPL/SeekableIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface SeekableIterator extends Iterator {\r\n\r\n  public function seek($index);\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SimpleXMLIterator.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\n/* \r\nclass SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator, Countable\r\n{\r\n    function hasChildren() {}\r\n\r\n    function getChildren() {}   \r\n\r\n    function count() {}\r\n\r\n    function rewind() {}\r\n    \r\n    function valid() {}\r\n    \r\n    function current() {}\r\n    \r\n    function key() {}\r\n    \r\n    function next() {}\r\n}\r\n*/\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SplFileInfo.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass SplFileInfo {\r\n  \r\n  protected $fname = \"\";\r\n  protected $pathInfo = array();\r\n  \r\n  function __construct($file_name) {\r\n    $this->fname = $file_name;\r\n    $this->pathInfo = pathinfo($this->fname);\r\n  }\r\n\r\n  function getPath() {\r\n    return $this->pathInfo['dirname'];\r\n  } \r\n\r\n  function getFilename() {\r\n    return $this->pathInfo['basename'];\r\n  } \r\n\r\n  function getFileInfo($class_name = NULL) {\r\n    \t\r\n  }\r\n\r\n  function getPathname() {\r\n    return $this->pathInfo['dirname'].\"/\".$this->pathInfo['basename'];  \r\n  }\r\n\r\n  function getPathInfo($class_name = NULL) {\r\n    \r\n  }\r\n\r\n  function getPerms() {\r\n    return fileperms($this->fname);\r\n  }\r\n    \r\n  function getInode() {\r\n   \treturn fileinode($this->fname);\r\n  }\r\n\r\n  function getSize() {\r\n    return filesize($this->fname);\t\r\n  }\r\n\r\n  function getOwner() {\r\n    return fileowner($this->fname);\r\n  }\r\n\r\n  function getGroup() {\r\n    return filegroup($this->fname);\r\n  }\r\n\r\n  function getATime() {\r\n    return fileatime($this->fname);\r\n  }\r\n\r\n  function getMTime() {\r\n    return filemtime($this->fname); \t\r\n  }\r\n\r\n  function getCTime() {\r\n    return filectime($this->fname);\r\n  }\r\n\r\n  function getType() {\r\n    \t\r\n  }\r\n\r\n  function isWritable() {\r\n  \treturn is_writable($this->fname);\r\n  }\r\n\r\n  function isReadable() {\r\n  \treturn is_readable($this->fname);\r\n  }\r\n\r\n  function isExecutable() {\r\n  \treturn is_executable($this->fname);\r\n  }\r\n\r\n  function isFile() {\r\n    return is_dir($this->fname);\r\n  }\r\n\r\n  function isDir() {\r\n    return is_dir($this->fname);\t\r\n  }\r\n\r\n  function isLink() {\r\n    return is_link($this->fname);\r\n  }\r\n\r\n  function __toString() {\r\n    return $this->getPathname();     \r\n  }\r\n\r\n  function openFile($mode = 'r', $use_include_path = false, $context = NULL) { \r\n    \r\n  }\r\n\r\n  function setFileClass($class_name = \"SplFileObject\") {\r\n  \t    \r\n  }\r\n\r\n  function setInfoClass($class_name = \"SplFileInfo\") {\r\n  \t    \r\n  }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SplFileObject.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\n/** @ingroup SPL\r\n * @brief   Object representation for any stream\r\n * @author  Marcus Boerger\r\n * @version 1.0\r\n * @since PHP 5.1\r\n */\r\nclass SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator\r\n{\r\n\tprivate $fp;\r\n\tprivate $fname;\r\n\tprivate $line     = NULL;\r\n\tprivate $lnum     = 0;\r\n\tprivate $max_len  = 0;\r\n\tprivate $flags    = 0;\r\n\t\r\n\t/**\r\n\t * Constructs a new file object\r\n\t * \r\n\t * @param $file_name         The name of the stream to open\r\n\t * @param $open_mode         The file open mode\r\n\t * @param $use_include_path  Whether to search in include paths\r\n\t * @param $context           A stream context\r\n\t * @throw RuntimeException   If file cannot be opened (e.g. insufficient \r\n\t *                           access rights).\r\n\t */\r\n\tfunction __construct($file_name, $open_mode = 'r', $use_include_path = false, $context = NULL)\r\n\t{\r\n\t\tif(is_null($context)) {\r\n\t\t\t$this->fp = fopen($file_name, $open_mode, $use_include_path);\r\n\t\t} else {\r\n\t\t\t$this->fp = fopen($file_name, $open_mode, $use_include_path, $context);\r\n\t\t}\r\n\r\n\t\tif (!$this->fp) {\r\n\t\t\tthrow new RuntimeException(\"Cannot open file $file_name\");\r\n\t\t}\r\n\t\t\r\n\t\tparent::__construct($file_name);\r\n\r\n\t\t$this->fname = $file_name;\r\n\t}\r\n\t\r\n\t/**\r\n\t * @return the filename as specified in the constructor\r\n\t */\r\n\tfunction getFilename()\r\n\t{\r\n\t\treturn $this->fname;\r\n\t}\r\n\r\n\t/**\r\n\t * @return whether the end of the stream is reached\r\n\t */\r\n\tfunction eof()\r\n\t{\r\n\t\treturn feof($this->fp);\r\n\t}\r\n\r\n\t/** increase current line number\r\n\t * @return next line from stream\r\n\t */\r\n\tfunction fgets()\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\t$this->lnum++;\r\n\t\t$buf = fgets($this->fp, $this->max_len);\r\n\t\t\r\n\t\treturn $buf;\r\n\t}\r\n\r\n\t/**\r\n\t * @param delimiter  character used as field separator\r\n\t * @param enclosure  end of \r\n\t * @return array containing read data\r\n\t */\r\n\tfunction fgetcsv($delimiter = ';', $enclosure = '')\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\t$this->lnum++;\r\n\t\treturn fgetcsv($this->fp, $this->max_len, $delimiter, $enclosure); \r\n\t}\r\n\r\n\t/**\r\n\t * @param operation lock operation (LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB)\r\n\t * @retval $wouldblock  whether the operation would block\r\n\t */\r\n\tfunction flock($operation, &$wouldblock)\r\n\t{\r\n\t\treturn flock($this->fp, $operation, $wouldblock);\r\n\t}\r\n\r\n\t/**\r\n\t * Flush current data\r\n\t * @return success or failure\r\n\t */\r\n\tfunction fflush()\r\n\t{\r\n\t\treturn fflush($this->fp);\r\n\t}\r\n\r\n\t/**\r\n\t * @return current file position\r\n\t */\r\n\tfunction ftell()\r\n\t{\r\n\t\treturn ftell($this->fp);\r\n\t}\r\n\r\n\t/**\r\n\t * @param pos new file position\r\n\t * @param whence seek method (SEEK_SET, SEEK_CUR, SEEK_END)\r\n\t * @return Upon success, returns 0; otherwise, returns -1. Note that \r\n\t *         seeking past EOF is not considered an error.\r\n\t */\r\n\tfunction fseek($pos, $whence = SEEK_SET)\r\n\t{\r\n\t\treturn fseek($this->fp, $pos, $whence);\r\n\t}\r\n\r\n\t/**\r\n\t * @return next char from file\r\n\t * @note a new line character does not increase $this->lnum\r\n\t */\r\n\tfunction fgetc()\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\t$c = fgetc($this->fp);\r\n\t\tif($c == '\\n') {\r\n\t\t  $this->lnum++;\r\n\t\t}\r\n\t}\r\n\r\n\t/** Read and return remaining part of stream\r\n\t * @return size of remaining part passed through\r\n\t */\r\n\tfunction fpassthru()\r\n\t{\r\n\t\treturn fpassthru($this->fp);\r\n\t}\r\n\r\n\t/** Get a line from the file and strip HTML tags\r\n\t * @param $allowable_tags tags to keep in the string\r\n\t */\r\n\tfunction fgetss($allowable_tags = NULL)\r\n\t{\r\n\t\treturn fgetss($this->fp, $allowable_tags);\r\n\t}\r\n\r\n\t/** Scan the next line\r\n\t * @param $format string specifying format to parse\r\n\t */\t\r\n\tfunction fscanf($format /* , ... */)\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\t$this->lnum++;\r\n\t\treturn fscanf($this->fp, $format /* , ... */);\r\n\t}\r\n\r\n\t/**\r\n\t * @param $str to write\r\n\t * @param $length maximum line length to write\r\n\t */\r\n\tfunction fwrite($str, $length = NULL)\r\n\t{\r\n\t\treturn fwrite($this->fp, $length);\r\n\t}\r\n\r\n\t/**\r\n\t * @return array of file stat information\r\n\t */\r\n\tfunction fstat()\r\n\t{\r\n\t\treturn fstat($this->fp);\r\n\t}\r\n\r\n\t/**\r\n\t * @param $size new size to truncate file to\r\n\t */\r\n\tfunction ftruncate($size)\r\n\t{\r\n\t\treturn ftruncate($this->fp, $size);\r\n\t}\r\n\r\n\t/**\r\n\t * @param $flags new flag set\r\n\t */\r\n\tfunction setFlags($flags)\r\n\t{\r\n\t\t$this->flags = $flags;\r\n\t}\r\n\r\n\t/**\r\n\t *  @return current set of flags\r\n\t */\r\n\tfunction getFlags()\r\n\t{\r\n\t\treturn $this->flags;\r\n\t}\r\n\r\n\t/**\r\n\t * @param $max_len set the maximum line length read\r\n\t */\r\n\tfunction setMaxLineLen($max_len)\r\n\t{\r\n\t\t$this->max_len = $max_len;\r\n\t}\r\n\r\n\t/**\r\n\t * @return current setting for max line\r\n\t */\r\n\tfunction getMaxLineLen()\r\n\t{\r\n\t\treturn $this->max_len;\r\n\t}\r\n\r\n\t/**\r\n\t * @return false\r\n\t */\r\n\tfunction hasChildren()\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @return false\r\n\t */\r\n\tfunction getChildren()\r\n\t{\r\n\t\treturn NULL;\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidate current line buffer and set line number to 0.\r\n\t */\r\n\tfunction rewind()\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\t$this->lnum = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return whether more data can be read\r\n\t */\r\n\tfunction valid()\r\n\t{\r\n\t\treturn !$this->eof();\r\n\t}\r\n\t\r\n\t/**\r\n\t * @note Fill current line buffer if not done yet.\r\n\t * @return line buffer \r\n\t */\t\r\n \tfunction current()\r\n\t{\r\n\t\r\n\t \tif(is_null($this->line)) {\r\n\t \t\t$this->line = $this->getCurrentLine();\r\n\t\t}\r\n\t\t\r\n\t\treturn $this->line;\r\n\t}\r\n\r\n\t/**\r\n\t * @return line number \r\n\t * @note fgetc() will increase the line number when reaing a new line char.\r\n\t *       This has the effect key() called on a read a new line will already\r\n\t *       return the increased line number.\r\n\t * @note Line counting works as long as you only read the file and do not\r\n\t *       use fseek().\r\n\t */\t\r\n\tfunction key()\r\n\t{\r\n\t\treturn $this->lnum;\r\n\t}\r\n\r\n\t/** Invalidate current line buffer.\r\n\t */\t\r\n\tfunction next()\r\n\t{\r\n\t\t$this->freeLine();\r\n\t}\r\n\r\n\t/**\r\n\t * @return next line read from file and increase the line counter\r\n\t */\r\n\tprivate function readLine()\r\n\t{\r\n\t\tif($this->eof())\r\n\t\t{\r\n\t\t\t$this->freeLine();\r\n\t\t\tthrow new RuntimeException(\"Cannot read from file \" . $this->fname);\r\n\t\t}\r\n\t\tif ($this->line) {\r\n\t\t\t$this->lnum++;\r\n\t\t}\r\n\t\t$this->freeLine();\r\n\t\t$this->line = fgets($this->fp, $this->max_len);\r\n\t\treturn $this->line;\r\n\t}\r\n\r\n\t/**\r\n\t * Free the current line buffer and increment the line counter\r\n\t */\r\n\tprivate function freeLine()\r\n\t{\r\n\t\tif($this->line) {\r\n\t\t\t$this->line = NULL;\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * @note If you DO overload this function key() and current() will increment\r\n\t *       $this->lnum automatically. If not then function reaLine() will do\r\n\t *       that for you.\r\n\t */ \r\n\tfunction getCurrentLine()\r\n\t{\r\n\t\t$this->freeLine();\r\n\t\tif($this->eof())\r\n\t\t{\r\n\t\t\tthrow new RuntimeException(\"Cannot read from file \" . $this->fname);\r\n\t\t}\r\n\t\treturn $this->readLine();\r\n\t}\r\n\r\n\t/**\r\n\t * @return current line\r\n\t */\r\n\tfunction __toString()\r\n\t{\r\n\t\treturn (string)$this->current();\r\n\t}\r\n\r\n\t/**\r\n\t * @param $line_pos Seek to this line\r\n\t */\t\r\n\tfunction seek($line_pos)\r\n\t{\r\n\t\t$this->rewind();\r\n\t\twhile($this->lnum < $line_pos && !$this->eof())\r\n\t\t{\r\n\t\t\t$this->getCurrentLine();\r\n\t\t}\r\n\t}\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Source/Libraries/SPL/SplObjectStorage.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass SplObjectStorage implements Iterator, Countable {\r\n\r\n  private $storage = array();\r\n  private $index = 0;\r\n\r\n  function rewind() {\r\n    rewind($this->storage);\r\n  }\r\n  \r\n  function valid() {\r\n    return key($this->storage) !== false;\r\n  }\r\n  \r\n  function key() {\r\n    return $this->index;\r\n  }\r\n  \r\n  function current() {\r\n    return current($this->storage);\r\n  }\r\n\r\n  function next() {\r\n    next($this->storage);\r\n    $this->index++;\r\n  }\r\n\r\n  function count() {\r\n    return count($this->storage);\r\n  }\r\n\r\n  function contains($obj) {\r\n    if(is_object($obj)) {\r\n      foreach($this->storage as $object) {\r\n        if($object === $obj) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  function attach($obj) {\r\n    if(is_object($obj) && !$this->contains($obj)) {\r\n      $this->storage[] = $obj;\r\n    }\r\n  }\r\n\r\n  function detach($obj) {\r\n    if(is_object($obj)) {\r\n      foreach($this->storage as $idx => $object) {\r\n        if($object === $obj) {\r\n          unset($this->storage[$idx]);\r\n          $this->rewind();\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SplObserver.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface SplObserver {\r\n\r\n  function update(SplSubject $subject);\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SplSubject.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\ninterface SplSubject {\r\n\r\n  function attach(SplObserver $observer);\r\n  function detach(SplObserver $observer);\r\n  function notify();\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/SplTempFileObject.php",
    "content": "<?php\r\n\r\n/*\r\nCopyright (c) 2006 Daniel Henning. Based on PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n*/\r\n\r\nclass SplTempFileObject {\r\n\r\n\r\n\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/UnderFlowException.php",
    "content": "<?php\r\n\r\nclass UnderflowException extends RuntimeException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/UnexpectedValueException.php",
    "content": "<?php\r\n\r\n/*\r\nCopied from PHP 5 implementation (http://www.php.net/~helly/php/ext/spl/).\r\n\r\nThe use and distribution terms for this software are contained in the file\r\nnamed License.txt,\r\nwhich can be found in the root of the Phalanger distribution. By using this\r\nsoftware\r\nin any fashion, you are agreeing to be bound by the terms of this license.\r\nYou must not remove this notice from this software.\r\n\r\n*/\r\n\r\nclass UnexpectedValueException extends RuntimeException{\r\n}\r\n\r\n?>"
  },
  {
    "path": "Source/Libraries/SPL/build-release.cmd",
    "content": "..\\..\\..\\Deployment\\bin\\phpc /target:dll /pure /debug- /recurse:. /ext:php\r\npause"
  },
  {
    "path": "Source/Libraries/SPL/build.cmd",
    "content": "..\\..\\..\\Deployment\\Debug\\phpc /target:dll /pure /recurse:. /ext:php\r\npause"
  },
  {
    "path": "Source/MkDynamic/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n[assembly: AssemblyTitle(\"Dynamic Wrapper Generator\")]\r\n[assembly: AssemblyDescription(\"The Phalanger Class Library Dynamic Wrapper Generator\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"Copyright 2005-2010 Tomas Matousek\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n[assembly: AssemblyVersion(\"4.0.0.0\")]\r\n"
  },
  {
    "path": "Source/MkDynamic/Main.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing PHP.Core.Emit;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Dynamic library wrapper generator.\r\n\t/// </summary>\r\n\tclass DynamicLibraryWrapperGenerator\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Writes PHP.NET dynamic wrapper logo on console.\r\n\t\t/// </summary>\r\n\t\tstatic void Logo()\r\n\t\t{\r\n\t\t\tVersion php_net = Assembly.GetExecutingAssembly().GetName().Version;\r\n\r\n\t\t\tConsole.WriteLine(\"The Phalanger Class Library Dynamic Wrapper Generator v{0}.{1}\", php_net.Major, php_net.Minor);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Displays a help.\r\n\t\t/// </summary>\r\n\t\tprivate static void ShowHelp()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Usage: mkdynamic [-dynamic] <assembly file path> [<target directory>]\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t\tConsole.WriteLine(\"Generates a dynamic wrapper of a specified Class Library assembly to the target \"+\r\n\t\t\t\t\"directory or to the current dynamic directory if not specified.\\n\\n\"+\r\n\t\t\t\t\"Use the '-dynamic' switch to dynamically resolve 'ImplementsFunctionAttribute' used to annotate\"+\r\n\t\t\t\t\" the library from a file 'PhpNetCore.dll' in the current directory.\");\r\n\t\t}\r\n\r\n\t\tstatic string assemblyName;\r\n\t\tstatic string directory;\r\n\t\tstatic bool resolve = false;\r\n\r\n\t\tstatic bool ProcessArguments(string[] args)\r\n\t\t{\r\n\t\t\tint index = 0;\r\n\t\t\tif (args[0] == \"-dynamic\")\r\n\t\t\t{\r\n\t\t\t\tresolve = true;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\r\n\t\t\tif (args.Length < 1 || args.Length > 3 || args[0] != \"-dynamic\")\r\n\t\t\t{\r\n\t\t\t\tShowHelp();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// the name of the library file:\r\n\t\t\tassemblyName = args[index];\r\n\r\n\t\t\t// the target directory:\r\n\t\t\tif (args.Length == index + 2)\r\n\t\t\t\tdirectory = args[index + 1];\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The entry point.\r\n\t\t/// </summary>\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tEnvironment.ExitCode = 1;\r\n\r\n\t\t\tLogo();\r\n\r\n\t\t\tif (!ProcessArguments(args)) return;\r\n\r\n\t\t\tType attr = null;\r\n\t\t\tif (resolve)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tAssembly coreAsm = Assembly.LoadFrom(\"PhpNetCore.dll\");\r\n\t\t\t\t\tattr = coreAsm.GetType(\"PHP.Core.ImplementsFunctionAttribute\");\r\n\t\t\t\t}\r\n\t\t\t\tcatch(Exception e)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"Dynamic resolution of the 'ImplementsFunctionAttribute' failed: \", e.Message);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tAssembly assembly;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tassembly = Assembly.LoadFrom(assemblyName);\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Error occured while loading assembly: {0}\", e.Message);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstring dynamic_assembly_path;\r\n\t\t\ttry\r\n\t\t\t{\r\n                dynamic_assembly_path = LibraryBuilder.CreateDynamicWrapper(attr, assembly, directory, Reflection.PhpLibraryModule.DynamicWrapperFileName(assembly, 0));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Error occured while generating wrapper: {0}\", e.Message);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tConsole.WriteLine(\"The dynamic wrapper '{0}' has been generated.\", Path.GetFullPath(dynamic_assembly_path));\r\n\t\t\tEnvironment.ExitCode = 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/MkDynamic/MkDynamic.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{1FBEBAD2-F7C5-4F75-965C-45098F5A0A48}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>\r\n    </ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>MkDynamic</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>MkDynamic</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Name>Core</Name>\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Main.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent></PreBuildEvent>\r\n    <PostBuildEvent></PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>\n"
  },
  {
    "path": "Source/MkDynamic/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\r\n"
  },
  {
    "path": "Source/Phalanger.CompilerTask/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 DEVSENSE.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n[assembly: AssemblyTitle(\"Phalanger Compiler Task\")]\r\n[assembly: AssemblyDescription(\"Phalanger MSBuild Compiler Task\")]"
  },
  {
    "path": "Source/Phalanger.CompilerTask/CompilerErrorSink.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 DEVSENSE.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nusing Microsoft.Build.Utilities;\r\nusing PHP.Core;\r\n\r\nnamespace PHP.VisualStudio.PhalangerTasks\r\n{\r\n\tclass CompilerErrorSink : ErrorSink\r\n\t{\r\n\t\tprivate TaskLoggingHelper logger;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructor for the error sink\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"logger\">This parameter should be the logger for the task being executed</param>\r\n\t\tpublic CompilerErrorSink(TaskLoggingHelper/*!*/ logger)\r\n\t\t{\r\n\t\t\tif (logger == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"logger\");\r\n\r\n\t\t\tthis.logger = logger;\r\n\t\t}\r\n\r\n\t\tprivate static string ErrorIdToCode(int id)\r\n\t\t{\r\n\t\t\treturn (id >= 0) ? String.Format(\"PHP{0:d4}\", id) : \"\";\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Log Errors/Warnings/Messages when the compiler reports them.\r\n\t\t/// </summary>\r\n\t\tprotected override bool Add(int id, string/*!*/ message, ErrorSeverity severity, int group, string fullPath, ErrorPosition pos)\r\n\t\t{\r\n\t\t\tstring code = ErrorIdToCode(id);\r\n\t\t\tswitch (severity.Value)\r\n\t\t\t{\r\n                case ErrorSeverity.Values.FatalError:\r\n\t\t\t\tcase ErrorSeverity.Values.Error:\r\n                case ErrorSeverity.Values.WarningAsError:\r\n                    logger.LogError(severity.Value.ToString(), code, \"\", fullPath, pos.FirstLine, pos.FirstColumn, pos.LastLine, pos.LastColumn, message);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase ErrorSeverity.Values.Warning:\r\n                    logger.LogWarning(severity.Value.ToString(), code, \"\", fullPath, pos.FirstLine, pos.FirstColumn, pos.LastLine, pos.LastColumn, message);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "Source/Phalanger.CompilerTask/Phalanger.CompilerTask.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\r\n  <PropertyGroup>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{68B54816-884B-48A1-949C-DBBDE2A5C412}</ProjectGuid>\r\n    <ProjectTypeGuids>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <AssemblyName>PhpNet.VisualStudio.PhalangerTasks</AssemblyName>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>PHP.VisualStudio.PhalangerTasks</RootNamespace>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.Build.Framework, Version=4.0.0.0\" />\r\n    <Reference Include=\"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.XML\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n    </Compile>\r\n    <Compile Include=\"CompilerErrorSink.cs\" />\r\n    <Compile Include=\"PhalangerCompilerTask.cs\">\r\n    </Compile>\r\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <AppDesigner Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Phalanger.CompilerTask.nuspec\" />\r\n    <None Include=\"Phalanger.targets\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\r\n  <ProjectExtensions>\r\n    <VisualStudio>\r\n    </VisualStudio>\r\n  </ProjectExtensions>\r\n  <!--The following is used for deploying the task and target to Program Files\\MSBuild\\...-->\r\n  <PropertyGroup>\r\n    <DeployDestination>$(MSBuildExtensionsPath)\\Phalanger\\4.0\\</DeployDestination>\r\n  </PropertyGroup>\r\n  <Target Name=\"AfterBuild\" Condition=\" '$(Configuration)' == 'ReleaseGAC' \">\r\n    <Message Text=\"Deploying...\" />\r\n    <MakeDir Directories=\"$(DeployDestination)\" Condition=\"!Exists($(DeployDestination))\" />\r\n    <CreateItem Include=\"$(OutputPath)\\$(TargetName).*\" AdditionalMetadata=\"Visible=false\">\r\n      <Output TaskParameter=\"Include\" ItemName=\"DeployToMSBuild\" />\r\n    </CreateItem>\r\n    <Copy SourceFiles=\"%(DeployToMSBuild.Identity)\" DestinationFolder=\"$(DeployDestination)\" SkipUnchangedFiles=\"true\" />\r\n  </Target>\r\n  <ItemGroup>\r\n    <DeployToMSBuild Include=\"Phalanger.targets\">\r\n      <Visible>false</Visible>\r\n    </DeployToMSBuild>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\r\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\r\n      <Name>PhpNet.Core.Parsers</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>PhpNet.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "Source/Phalanger.CompilerTask/Phalanger.CompilerTask.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n  \t<licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n  \t<projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n  \t<iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n  \t<requireLicenseAcceptance>false</requireLicenseAcceptance>\n  \t<releaseNotes>Bug fixes and performance improvements</releaseNotes>\n  \t<copyright>Copyright 2015</copyright>\n  \t<tags>PHP Phalanger</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Phalanger.CompilerTask/Phalanger.targets",
    "content": "<!--\r\n Copyright (c) 2011 DEVSENSE.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n-->\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n\r\n  <!-- Add properties required for WPF -->\r\n  <PropertyGroup>\r\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildExtensionsPath)\\Phalanger\\4.0\\Phalanger.targets</MSBuildAllProjects>\r\n    <DefaultLanguageSourceExtension>.php</DefaultLanguageSourceExtension>\r\n    <Language>Phalanger</Language>\r\n  </PropertyGroup>\r\n\r\n  <!--Import the standards targets-->\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.Common.targets\" />\r\n\r\n  <!--Reference the assembly where our tasks are defined-->\r\n  <UsingTask TaskName=\"PHP.VisualStudio.PhalangerTasks.PhalangerCompilerTask\" AssemblyFile=\"PHP.VisualStudio.PhalangerTasks.dll\" />\r\n  <UsingTask TaskName=\"CreateCSharpManifestResourceName\" AssemblyFile=\"$(MSBuildToolsPath)\\Microsoft.Build.Tasks.v4.0.dll\"/>\r\n\r\n  <!--Compile target (this is the target that calls the compiler task)-->\r\n  <Target Name=\"PhalangerCompilerTarget\"\r\n          Inputs=\"@(Compile);@(ReferencePath);@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile);@(Content)\"\r\n          Outputs=\"@(IntermediateAssembly)\">\r\n    <Message Text=\"Building: @(IntermediateAssembly)\" />\r\n      <PhalangerCompilerTask\r\n        SourceRoot=\"$(MSBuildProjectDirectory)\"\r\n        SourceFiles=\"@(Compile)\"\r\n        ContentFiles=\"@(Content)\"\r\n        ReferencedAssemblies=\"@(Reference)\"\r\n        ReferencedProjects=\"@(ProjectReference)\"\r\n        References=\"@(ReferencePath)\"\r\n        Debug=\"$(IncludeDebugInformation)\"\r\n        StartupObject=\"$(StartupObject)\"\r\n        OutputType=\"$(OutputType)\"\r\n        OutputAssembly=\"@(IntermediateAssembly)\"\r\n        CompilationMode=\"$(CompilationMode)\"\r\n        ApplicationIcon=\"$(ApplicationIcon)\"\r\n        LanguageFeatures=\"$(LanguageFeatures)\"\r\n        DisabledWarnings=\"$(DisabledWarnings)\"\r\n        KeyFile=\"$(KeyFile)\"\r\n        TreatWarningsAsErrors=\"$(TreatWarningsAsErrors)\"\r\n        ResourceFiles=\"@(ManifestResourceWithNoCulture);@(ManifestNonResxWithNoCultureOnDisk);@(CompiledLicenseFile)\"\r\n      />\r\n  </Target>\r\n\r\n  <!--This is an override of CoreCompile to have our PhalangerCompilerTarget be called at compile time-->\r\n  <Target\r\n      Name=\"CoreCompile\"\r\n      Inputs=\"@(Compile);\r\n              @(ReferencePath)\"\r\n      Outputs=\"@(IntermediateAssembly)\" \r\n      DependsOnTargets=\"$(CoreCompileDependsOn);PhalangerCompilerTarget\"\r\n    >\r\n  </Target>\r\n\r\n  <!--\r\n    The CreateManifestResourceNames target create the manifest resource names from the .RESX\r\n    files.\r\n\r\n        [IN]\r\n        @(ResxWithNoCulture) - The names the non-culture .RESX files.\r\n        @(ResxWithCulture) - The names the culture .RESX files.\r\n        @(NonResxWithNoCulture) - The names of the non-culture non-RESX files (like bitmaps, etc).\r\n        @(NonResxWithCulture) - The names of the culture non-RESX files (like bitmaps, etc).\r\n\r\n        [OUT]\r\n        @(ManifestResourceWithNoCultureName) - The corresponding manifest resource name (.RESOURCE)\r\n        @(ManifestResourceWithCultureName) - The corresponding manifest resource name (.RESOURCE)\r\n        @(ManifestNonResxWithNoCulture) - The corresponding manifest resource name.\r\n        @(ManifestNonResxWithCulture) - The corresponding manifest resource name.\r\n\r\n    For Phalanger applications the transformation is like:\r\n\r\n        Resources1.resx => RootNamespace.Resources1 => Build into main assembly\r\n        SubFolder\\Resources1.resx => RootNamespace.SubFolder.Resources1 => Build into main assembly\r\n        Resources1.fr.resx => RootNamespace.Resources1.fr => Build into satellite assembly\r\n        Resources1.notaculture.resx => RootNamespace.Resources1.notaculture => Build into main assembly\r\n\r\n    For other project systems, this transformation may be different.\r\n    -->\r\n  <PropertyGroup>\r\n    <CreateManifestResourceNamesDependsOn></CreateManifestResourceNamesDependsOn>\r\n  </PropertyGroup>\r\n  <Target\r\n      Name=\"CreateManifestResourceNames\"\r\n      Condition=\"'@(ResxWithNoCulture)@(ResxWithCulture)@(NonResxWithNoCulture)@(NonResxWithCulture)'!=''\"\r\n      DependsOnTargets=\"$(CreateManifestResourceNamesDependsOn)\"\r\n        >\r\n\r\n    <!-- Create the target resource names for non-culture resx files. -->\r\n    <CreateCSharpManifestResourceName Condition=\"'@(ResxWithNoCulture)'!=''\"\r\n          ResourceFiles=\"@(ResxWithNoCulture)\"\r\n          RootNamespace=\"$(RootNamespace)\">\r\n\r\n      <Output TaskParameter=\"ManifestResourceNames\" ItemName=\"ManifestResourceWithNoCultureName\"/>\r\n\r\n    </CreateCSharpManifestResourceName>\r\n\r\n    <!-- Create the target resource names for culture resx files. -->\r\n    <CreateCSharpManifestResourceName Condition=\"'@(ResxWithCulture)'!=''\"\r\n          ResourceFiles=\"@(ResxWithCulture)\"\r\n          RootNamespace=\"$(RootNamespace)\">\r\n\r\n      <Output TaskParameter=\"ManifestResourceNames\" ItemName=\"ManifestResourceWithCultureName\"/>\r\n\r\n    </CreateCSharpManifestResourceName>\r\n\r\n    <!-- Create the target resource names for non-culture non-resx files. -->\r\n    <CreateCSharpManifestResourceName Condition=\"'@(NonResxWithNoCulture)'!=''\"\r\n          ResourceFiles=\"@(NonResxWithNoCulture)\"\r\n          RootNamespace=\"$(RootNamespace)\">\r\n\r\n      <Output TaskParameter=\"ManifestResourceNames\" ItemName=\"ManifestNonResxWithNoCulture\"/>\r\n\r\n    </CreateCSharpManifestResourceName>\r\n\r\n    <!-- Create the target resource names for culture non-resx files. -->\r\n    <CreateCSharpManifestResourceName Condition=\"'@(NonResxWithCulture)'!=''\"\r\n          ResourceFiles=\"@(NonResxWithCulture)\"\r\n          RootNamespace=\"$(RootNamespace)\">\r\n\r\n      <Output TaskParameter=\"ManifestResourceNames\" ItemName=\"ManifestNonResxWithCulture\"/>\r\n\r\n    </CreateCSharpManifestResourceName>\r\n  </Target>\r\n\r\n</Project>"
  },
  {
    "path": "Source/Phalanger.CompilerTask/PhalangerCompilerTask.cs",
    "content": "/*\r\n\r\n Copyright (c) 2011 DEVSENSE.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Reflection;\r\nusing Microsoft.Build.Utilities;\r\nusing Microsoft.Build.Framework;\r\nusing System.Diagnostics;\r\n\r\nusing PHP.Core;\r\nusing System.Threading;\r\n\r\nnamespace PHP.VisualStudio.PhalangerTasks\r\n{\r\n\tpublic class PhalangerCompilerTask : Task\r\n\t{\r\n\t\t#region Constructors\r\n\r\n\t\t/// <summary>\r\n\t\t/// Constructor. This is the constructor that will be used\r\n\t\t/// when the task run.\r\n\t\t/// </summary>\r\n\t\tpublic PhalangerCompilerTask()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Public Properties\r\n\r\n\t\t[Required()]\r\n\t\tpublic string SourceRoot { get { return sourceRoot; } set { sourceRoot = value; } }\r\n\t\tprivate string sourceRoot;\r\n\r\n\t\t[Required()]\r\n\t\tpublic string[] SourceFiles { get { return sourceFiles; } set { sourceFiles = value; } }\r\n\t\tprivate string[] sourceFiles;\r\n\r\n\t\t[Required()]\r\n\t\tpublic string OutputType { get { return outputType; } set { outputType = value; } }\r\n\t\tprivate string outputType;\r\n\r\n\t\t[Required()]\r\n\t\tpublic string OutputAssembly { get { return outputAssembly; } set { outputAssembly = value; } }\r\n\t\tprivate string outputAssembly;\r\n\r\n        /// <summary>\r\n        /// Files referenced by the compiled task.\r\n        /// </summary>\r\n\t\tpublic ITaskItem[] ReferencedAssemblies { get { return referencedAssemblies; } set { referencedAssemblies = value; } }\r\n\t\tprivate ITaskItem[] referencedAssemblies;\r\n\r\n        /// <summary>\r\n        /// Projects referenced by the compiled task.\r\n        /// </summary>\r\n        public ITaskItem[] ReferencedProjects { get { return referencedProjects; } set { referencedProjects = value; } }\r\n        private ITaskItem[] referencedProjects;\r\n\r\n        /// <summary>\r\n        /// Resolved references (assemblies file name) of the compiled task. (contains project and file references together)\r\n        /// </summary>\r\n        public ITaskItem[] References { get { return references; } set { references = value; } }\r\n        private ITaskItem[] references;\r\n\r\n\t\tpublic string[] ContentFiles { get { return contentFiles; } set { contentFiles = value; } }\r\n\t\tprivate string[] contentFiles;\r\n\r\n\t\tpublic bool Debug { get { return debug; } set { debug = value; } }\r\n\t\tprivate bool debug;\r\n\r\n        public bool TreatWarningsAsErrors { get; set; }\r\n\r\n\t\tpublic string CompilationMode { get { return compilationMode; } set { compilationMode = value; } }\r\n\t\tprivate string compilationMode;\r\n\r\n\t\tpublic string StartupObject { get { return startupObject; } set { startupObject = value; } }\r\n\t\tprivate string startupObject;\r\n\r\n\t\tpublic string ApplicationIcon { get { return applicationIcon; } set { applicationIcon = value; } }\r\n\t\tprivate string applicationIcon;\r\n\r\n\t\tpublic string LanguageFeatures { get { return languageFeatures; } set { languageFeatures = value; } }\r\n\t\tprivate string languageFeatures;\r\n\r\n\t\tpublic string DisabledWarnings { get { return disabledWarnings; } set { disabledWarnings = value; } }\r\n\t\tprivate string disabledWarnings;\r\n\r\n        public string KeyFile { get { return keyFile; } set { keyFile = value; } }\r\n        private string keyFile;\r\n\r\n\t\tpublic string SomeTestingProperty { get { return someTestingProperty; } set { someTestingProperty = value; } }\r\n\t\tprivate string someTestingProperty;\r\n\r\n        /// <summary>Contains value of the <see cref=\"ResourceFiles\"/> property</summary>\r\n        private ITaskItem[] resourceFiles = new ITaskItem[0];\r\n        /// <summary>\r\n        /// List of resource files\r\n        /// </summary>\r\n        public ITaskItem[] ResourceFiles {\r\n            get { return resourceFiles; }\r\n            set {\r\n                if(value != null) {\r\n                    resourceFiles = value;\r\n                } else {\r\n                    resourceFiles = new ITaskItem[0];\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n\t\t#endregion\r\n\r\n\t\tpublic override bool Execute()\r\n\t\t{\r\n\t\t\tLog.LogMessage(MessageImportance.Normal, \"Phalanger Compilation Task\");\r\n\r\n\t\t\tCompilationParameters ps = new CompilationParameters();\r\n\r\n\t\t\t// source root (project directory by default):\r\n\t\t\tps.SourceRoot = new FullPath(sourceRoot);\r\n\r\n\t\t\t// target type:\r\n\t\t\tstring assembly_extension;\r\n            switch (outputType.ToLowerInvariant())\r\n\t\t\t{\r\n\t\t\t\tcase \"dll\":\r\n\t\t\t\tcase \"library\":\r\n\t\t\t\t\tps.Target = ApplicationCompiler.Targets.Dll;\r\n\t\t\t\t\tassembly_extension = \".dll\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"exe\":\r\n\t\t\t\tcase \"console\":\r\n\t\t\t\t\tps.Target = ApplicationCompiler.Targets.Console;\r\n\t\t\t\t\tassembly_extension = \".exe\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"winexe\":\r\n\t\t\t\tcase \"winapp\":\r\n\t\t\t\t\tps.Target = ApplicationCompiler.Targets.WinApp;\r\n\t\t\t\t\tassembly_extension = \".exe\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"webapp\":\r\n                    ps.Target = ApplicationCompiler.Targets.Web;\r\n                    assembly_extension = \".dll\";\r\n\t\t\t\t\t// TODO: precompile option\r\n\t\t\t\t\treturn true;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tLog.LogError(\"Invalid output type: '{0}'.\", outputType);\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (Path.GetExtension(outputAssembly) != assembly_extension)\r\n\t\t\t{\r\n\t\t\t\tLog.LogError(\"Output assembly extension doesn't match project type.\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (contentFiles != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (string file in contentFiles)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (String.Compare(Path.GetExtension(file), \".config\", true) == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tps.ConfigPaths.Add(new FullPath(file, ps.SourceRoot));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// debug symbols:\r\n\t\t\tps.Debuggable = this.Debug;\r\n\r\n            // compilation of executables in debug mode from VisualStudio/MSBuild will produce 32bit assembly to EE working properly\r\n            ps.Force32Bit = this.Debug && assembly_extension.EqualsOrdinalIgnoreCase(\".exe\");\r\n\r\n\t\t\t// language features:\r\n\t\t\tps.Pure = ApplicationCompiler.IsPureUnit(compilationMode);\r\n\r\n\t\t\tif (!String.IsNullOrEmpty(languageFeatures))\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tps.LanguageFeatures = (Core.LanguageFeatures)Enum.Parse(typeof(Core.LanguageFeatures),\r\n\t\t\t\t\t\tlanguageFeatures, true);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n\t\t\t\t\tLog.LogError(\"Invalid language features.\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tps.LanguageFeatures = (ps.Pure) ? Core.LanguageFeatures.PureModeDefault : Core.LanguageFeatures.Default;\r\n\t\t\t}\r\n\r\n\t\t\t// source paths:\r\n\t\t\tGetSourcePaths(ps.SourceRoot, ps.SourcePaths);\r\n\r\n\t\t\t// directories (TODO) \r\n\t\t\t// ps.SourceDirs\r\n\t\t\t// extensions (TODO) \r\n\t\t\t// ps.FileExtensions = null;\r\n\r\n\t\t\tif (ps.SourcePaths.Count == 0 && ps.SourceDirs.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tLog.LogError(\"No source files to compile.\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// out path:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tDirectory.CreateDirectory(Path.GetDirectoryName(outputAssembly));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tLog.LogErrorFromException(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tps.OutPath = new FullPath(outputAssembly);\r\n\r\n\t\t\t// doc path (TODO):\r\n\t\t\tps.DocPath = FullPath.Empty;\r\n\r\n\t\t\t// startup file/class:\r\n\t\t\tps.StartupFile = FullPath.Empty;\r\n\t\t\t// TODO: string startup_class = null;\r\n\r\n\t\t\tif (ps.Target == ApplicationCompiler.Targets.Console || ps.Target == ApplicationCompiler.Targets.WinApp)\r\n\t\t\t{\r\n\t\t\t\tif (ps.Pure)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!String.IsNullOrEmpty(startupObject))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// TODO: startup_class = startupObject;\r\n\r\n\t\t\t\t\t\tLog.LogWarning(\"Startup class is ignored -- the feature is not supported yet.\");\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// TODO: startup_class = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (String.IsNullOrEmpty(startupObject))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (ps.SourcePaths.Count > 1)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLog.LogError(\"The startup file must be specified in the project property pages.\");\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tps.StartupFile = new FullPath(ps.SourcePaths[0], ps.SourceRoot);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tps.StartupFile = new FullPath(startupObject, ps.SourceRoot);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (Exception e)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLog.LogErrorFromException(e);\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// startup file is not in the list of compiled files:\r\n\t\t\t\t\t\tif (ps.SourcePaths.IndexOf(ps.StartupFile) == -1)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLog.LogError(\"The startup file specified in the property pages must be included in the project.\");\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// icon:\r\n\t\t\tps.Icon = null;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (applicationIcon != null)\r\n\t\t\t\t\tps.Icon = new Win32IconResource(new FullPath(applicationIcon, ps.SourceRoot));\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tLog.LogErrorFromException(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// strong name, version (TODO):\r\n            try\r\n            {\r\n                ps.Version = new Version(1, 0, 0, 0);\r\n                ps.Key = null;\r\n                if (!string.IsNullOrEmpty(keyFile))\r\n                {\r\n                    using (FileStream file = new FileStream(new FullPath(keyFile, ps.SourceRoot), FileMode.Open, FileAccess.Read))\r\n                        ps.Key = new StrongNameKeyPair(file);\r\n                }\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                Log.LogErrorFromException(e);\r\n                return false;\r\n            }\r\n            \r\n            //Resources\r\n            foreach(ITaskItem resource in this.ResourceFiles) {\r\n                bool publicVisibility = true;\r\n                string access = resource.GetMetadata(\"Access\");\r\n                if(String.CompareOrdinal(\"Private\", access) == 0)\r\n                    publicVisibility = false;\r\n                string filename = resource.ItemSpec;\r\n                string logicalName = resource.GetMetadata(\"LogicalName\");\r\n                if(String.IsNullOrEmpty(logicalName))\r\n                    logicalName = Path.GetFileName(resource.ItemSpec);\r\n                ps.Resources.Add(new ResourceFileReference(filename,logicalName,publicVisibility));\r\n            }\r\n\r\n\t\t\t// referenced assemblies:\r\n\r\n\t\t\t//if (referencedAssemblies != null)\r\n            if (references != null)\r\n\t\t\t{\r\n                foreach (ITaskItem assemblyReference in references/*referencedAssemblies*/)\r\n                {\r\n                    // script library root:\r\n                    var scriptLibraryRoot = assemblyReference.GetMetadata(\"MSARoot\");\r\n\r\n                    if (scriptLibraryRoot != null)\r\n                        scriptLibraryRoot = scriptLibraryRoot.Trim();\r\n\r\n                    if (string.IsNullOrEmpty(scriptLibraryRoot))\r\n                        scriptLibraryRoot = null;\r\n\r\n                    // add the reference to CompilationParameters:\r\n                    ps.References.Add(new CompilationParameters.ReferenceItem()\r\n                    {\r\n                        Reference = assemblyReference.ItemSpec,\r\n                        LibraryRoot = scriptLibraryRoot\r\n                    });\r\n                }\r\n\t\t\t}\r\n\r\n\t\t\t// errors, warnings:\r\n\t\t\tErrorSink sink = new CompilerErrorSink(this.Log);\r\n\r\n\t\t\tif (!String.IsNullOrEmpty(disabledWarnings))\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tps.DisableWarningNumbers = ConfigUtils.ParseIntegerList(disabledWarnings, ',', 1, 10000, null);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n\t\t\t\t\tLog.LogError(\"Invalid list of disabled warnings.\");\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tps.DisableWarningNumbers = ArrayUtils.EmptyIntegers;\r\n\t\t\t}\r\n\r\n            ps.EnableWarnings |= WarningGroups.DeferredToRuntime;   // enable deferred to runtime warnings\r\n            \r\n            ps.TreatWarningsAsErrors = this.TreatWarningsAsErrors;\r\n\r\n            // compile\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\t//ApplicationCompiler.CompileInSeparateDomain(sink, ps);\r\n\t\t\t\tRemoteCompile(ref sink, ps);\r\n\t\t\t}\r\n\t\t\tcatch (InvalidSourceException e)\r\n\t\t\t{\r\n\t\t\t\te.Report(sink);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tsink.AddInternalError(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn !sink.AnyError;\r\n\t\t}\r\n\r\n\t\tpublic void RemoteCompile(ref ErrorSink/*!*/ errorSink, CompilationParameters/*!*/ ps)\r\n\t\t{\r\n\t\t\tlock (buildMutex) // TODO: do we need thread-safety (if yes, there is a better way)?\r\n\t\t\t{\r\n\t\t\t\t//if (++buildCounter % 10 == 0) // TODO: is it possible to estimate size of memory allocated by the domain?\r\n\t\t\t\t//{\r\n\t\t\t\t//  // if a referenced assembly gets updated then we should reload the domain as well\r\n\t\t\t\t//  AppDomain.Unload(remoteCompiler.Domain);\r\n\t\t\t\t//  remoteCompiler = null;\r\n\t\t\t\t//}\r\n\r\n                if (remoteCompiler != null)\r\n                    AppDomain.Unload(remoteCompiler.Domain);\r\n\r\n\t\t\t\tremoteCompiler = ApplicationCompiler.CreateRemoteCompiler();\r\n\r\n\t\t\t\tremoteCompiler.RemoteCompile(ref errorSink, ps);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static ApplicationCompiler/*!*/ remoteCompiler;\r\n\t\t//private static int buildCounter = 0;\r\n\t\tprivate static object/*!*/ buildMutex = new object();\r\n\r\n\t\tprivate void LogAllExceptions(Exception e)\r\n\t\t{\r\n\t\t\twhile (e != null)\r\n\t\t\t{\r\n\t\t\t\tLog.LogErrorFromException(e);\r\n\t\t\t\te = e.InnerException;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void GetSourcePaths(FullPath sourceRoot, List<FullPath>/*!*/ result)\r\n\t\t{\r\n\t\t\tSystem.Diagnostics.Debug.Assert(sourceFiles != null);\r\n\r\n\t\t\tresult.Capacity = result.Count + sourceFiles.Length;\r\n\r\n\t\t\tforeach (string file in sourceFiles)\r\n\t\t\t{\r\n\t\t\t\tresult.Add(new FullPath(file, sourceRoot));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "Source/Phalanger.CompilerTask/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.1\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace PHP.VisualStudio.PhalangerTasks.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"PHP.VisualStudio.PhalangerTasks.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to TargetType {0} is not valid. Valid values are: Exe, WinExe, Library..\r\n        /// </summary>\r\n        internal static string InvalidTargetType {\r\n            get {\r\n                return ResourceManager.GetString(\"InvalidTargetType\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Source/Phalanger.CompilerTask/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"InvalidTargetType\" xml:space=\"preserve\">\r\n    <value>TargetType {0} is not valid. Valid values are: Exe, WinExe, Library.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Source/PhpNetCompiler/AssemblyInfo.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n[assembly: AssemblyTitle(\"The PHP Language Compiler\")]\r\n[assembly: AssemblyDescription(\"The PHP Language Compiler\")]\r\n"
  },
  {
    "path": "Source/PhpNetCompiler/Main.cs",
    "content": "/*\r\n\r\n Copyright (c) 2004-2006 Tomas Matousek.\r\n\r\n The use and distribution terms for this software are contained in the file named License.txt, \r\n which can be found in the root of the Phalanger distribution. By using this software \r\n in any fashion, you are agreeing to be bound by the terms of this license.\r\n \r\n You must not remove this notice from this software.\r\n\r\n*/\r\n\r\nusing System;\r\nusing System.IO;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Reflection.Emit;\r\nusing System.Configuration;\r\nusing System.Reflection;\r\nusing System.Threading;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\n\r\nusing PHP.Core;\r\nusing PHP.Core.Reflection;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Core\r\n{\r\n\t/// <summary>\r\n\t/// Command line compiler.\r\n\t/// </summary>\r\n\tpublic sealed class PhpNetCompiler\r\n\t{\r\n\t\tprivate TextWriter/*!*/ output;\r\n\t\tprivate TextWriter/*!*/ errors;\r\n\r\n\t\tprivate CommandLineParser/*!*/ commandLineParser = new CommandLineParser();\r\n\r\n\t\t#region Helpers\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes Phalanger logo on output.\r\n\t\t/// </summary>\r\n\t\tprivate void ShowLogo()\r\n\t\t{\r\n\t\t\tVersion php_net = Assembly.GetExecutingAssembly().GetName().Version;\r\n\t\t\tVersion runtime = Environment.Version;\r\n\r\n\t\t\toutput.WriteLine(\"Phalanger - the PHP Language Compiler - version {0}.{1}\", php_net.Major, php_net.Minor);\r\n\t\t\toutput.WriteLine(\"for Microsoft (R) .NET Framework version {0}.{1}\", runtime.Major, runtime.Minor);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Displays a help.\r\n\t\t/// </summary>\r\n\t\tprivate void ShowHelp()\r\n\t\t{\r\n\t\t\toutput.WriteLine(\"Usage:\");\r\n\r\n\t\t\tforeach (KeyValuePair<string, string> option in CommandLineParser.GetSupportedOptions())\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(\"{0}\\n{1}\\n\", option.Key, option.Value);\r\n\t\t\t}\r\n\r\n\t\t\toutput.WriteLine();\r\n\t\t\toutput.WriteLine(CoreResources.GetString(\"phpc_other_args\"));\r\n\t\t\toutput.WriteLine();\r\n\t\t}\r\n\r\n\t\tprivate void DumpArguments(List<string>/*!*/ args)\r\n\t\t{\r\n\t\t\tif (commandLineParser.Verbose && args.Count > 0)\r\n\t\t\t{\r\n\t\t\t\toutput.WriteLine(CoreResources.GetString(\"Arguments\") + \":\");\r\n\t\t\t\tfor (int i = 0; i < args.Count; i++) output.WriteLine(args[i]);\r\n\t\t\t\toutput.WriteLine();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void DumpLoadedLibraries()\r\n\t\t{\r\n\t\t\toutput.WriteLine(CoreResources.GetString(\"loaded_libraries\") + \":\");\r\n\r\n\t\t\tforeach (DAssembly assembly in ApplicationContext.Default.GetLoadedAssemblies())\r\n\t\t\t\toutput.WriteLine(assembly.DisplayName);\r\n\r\n\t\t\toutput.WriteLine();\r\n\t\t}\r\n\t\t\r\n\t\t#endregion\r\n\r\n        #region Handling assembly load\r\n\r\n        /// <summary>\r\n        /// Name and file path to the specified assembly.\r\n        /// </summary>\r\n        private struct AssemblyInfo\r\n        {\r\n            public AssemblyName Name;\r\n            public string Path;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add AssemblyResolve handler that handles loading of assemblies in specified directory by their FullName.\r\n        /// </summary>\r\n        /// <param name=\"directoryName\">The directory to load assemblies by their FullName from.</param>\r\n        private void HandleAssemblies(string directoryName)\r\n        {\r\n            if (!Directory.Exists(directoryName))\r\n                return;\r\n\r\n            var files = Directory.GetFiles(directoryName, \"*.dll\", SearchOption.TopDirectoryOnly);\r\n            var assembliesInDirectory = new List<AssemblyInfo>(files.Length);\r\n\r\n            foreach (string file in files)\r\n            {\r\n                try\r\n                {\r\n                    assembliesInDirectory.Add(new AssemblyInfo()\r\n                    {\r\n                        Name = AssemblyName.GetAssemblyName(file),\r\n                        Path = file\r\n                    });\r\n                }\r\n                catch\r\n                {\r\n\r\n                }\r\n            }\r\n\r\n            //set domain AssemblyResolve to lookup assemblies found in directoryName\r\n            if (assembliesInDirectory.Count > 0)\r\n                AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(\r\n                    delegate(object o, ResolveEventArgs ea)\r\n                    {\r\n                        AssemblyName name = new AssemblyName(ea.Name);\r\n\r\n                        foreach (var assembly in assembliesInDirectory)\r\n                        {\r\n                            if (AssemblyName.ReferenceMatchesDefinition(assembly.Name, name))\r\n                                return Assembly.LoadFile(assembly.Path);\r\n                        }\r\n\r\n                        return null;\r\n                    }\r\n                );\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Main\r\n\r\n        /// <summary>\r\n\t\t/// Runs the compiler with specified options.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">Command line arguments.</param>\r\n\t\t/// <returns>Whether the compilation was successful.</returns>\r\n\t\tpublic bool Compile(List<string>/*!*/ args)\r\n\t\t{\r\n\t\t\tif (args == null)\r\n\t\t\t\tthrow new ArgumentNullException(\"args\");\r\n\t\t\t\r\n\t\t\tTextErrorSink errorSink = null;\r\n\r\n\t\t\t// processes arguments:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tcommandLineParser.Parse(args);\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tif (commandLineParser.Quiet)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput = errors = TextWriter.Null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (commandLineParser.RedirectErrors)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput = errors = Console.Out;\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput = Console.Out;\t\r\n\t\t\t\t\t\terrors = Console.Error;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\terrorSink = new TextErrorSink(errors);\r\n\r\n\t\t\t\t\tShowLogo();\r\n\r\n\t\t\t\t\tif (commandLineParser.ShowHelp)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tShowHelp();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\t\r\n\t\t\t\t\t\tDumpArguments(args);\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (InvalidCommandLineArgumentException e)\r\n\t\t\t{\r\n\t\t\t\te.Report(errorSink);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (commandLineParser.ShowHelp)\r\n\t\t\t\treturn true;\r\n            \r\n            // allow loading of all assemblies in /Bin directory by their FullName\r\n            HandleAssemblies(Path.Combine(commandLineParser.Parameters.SourceRoot, \"Bin\"));            \r\n\t\t\t\r\n            //\r\n\t\t\tApplicationContext.DefineDefaultContext(false, true, false);\r\n\t\t\tApplicationContext app_context = ApplicationContext.Default;\r\n\r\n\t\t\tCompilerConfiguration compiler_config;\r\n\r\n\t\t\t// loads entire configuration:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (commandLineParser.Parameters.ConfigPaths.Count == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\t// Add config files for known targets\r\n\t\t\t\t\tswitch (commandLineParser.Parameters.Target)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase ApplicationCompiler.Targets.Web:\r\n\t\t\t\t\t\t\tif (File.Exists(\"web.config\"))\r\n\t\t\t\t\t\t\t\tcommandLineParser.Parameters.ConfigPaths.Add(new FullPath(\"web.config\"));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase ApplicationCompiler.Targets.WinApp:\r\n\t\t\t\t\t\t\tif (File.Exists(\"app.config\"))\r\n\t\t\t\t\t\t\t\tcommandLineParser.Parameters.ConfigPaths.Add(new FullPath(\"app.config\"));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcompiler_config = ApplicationCompiler.LoadConfiguration(app_context, \r\n\t\t\t\t\tcommandLineParser.Parameters.ConfigPaths, output);\r\n\t\t\t\t\t\r\n\t\t\t\tcommandLineParser.Parameters.ApplyToConfiguration(compiler_config);\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException e)\r\n\t\t\t{\r\n\t\t\t\tif (commandLineParser.Verbose)\r\n\t\t\t\t{\r\n\t\t\t\t\toutput.WriteLine(CoreResources.GetString(\"reading_configuration\") + \":\");\r\n\t\t\t\t\toutput.WriteLine();\r\n\r\n\t\t\t\t\tif (!String.IsNullOrEmpty(e.Filename)) // Mono puts here null\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toutput.WriteLine(FileSystemUtils.ReadFileLine(e.Filename, e.Line).Trim());\r\n\t\t\t\t\t\toutput.WriteLine();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\terrorSink.AddConfigurationError(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// load referenced assemblies:\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tapp_context.AssemblyLoader.Load(commandLineParser.Parameters.References);\r\n\t\t\t\t}\r\n\t\t\t\tfinally\r\n\t\t\t\t{\r\n\t\t\t\t\tif (commandLineParser.Verbose)\r\n\t\t\t\t\t\tDumpLoadedLibraries();\r\n\t\t\t\t}\t\r\n\t\t\t}\r\n\t\t\tcatch (ConfigurationErrorsException e)\r\n\t\t\t{\r\n\t\t\t\terrorSink.AddConfigurationError(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\toutput.WriteLine(CoreResources.GetString(\"performing_compilation\") + \" ...\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tCommandLineParser p = commandLineParser;\r\n\t\t\t\tStatistics.DrawGraph = p.DrawInclusionGraph;\r\n\r\n\t\t\t\terrorSink.DisabledGroups = compiler_config.Compiler.DisabledWarnings;\r\n\t\t\t\terrorSink.DisabledWarnings = compiler_config.Compiler.DisabledWarningNumbers;\r\n                errorSink.TreatWarningsAsErrors = compiler_config.Compiler.TreatWarningsAsErrors;\r\n\t\t\t\r\n\t\t\t\t// initializes log:\r\n\t\t\t\tDebugUtils.ConsoleInitialize(Path.GetDirectoryName(p.Parameters.OutPath));\r\n\r\n                new ApplicationCompiler().Compile(app_context, compiler_config, errorSink, p.Parameters);\r\n\t\t\t}\r\n\t\t\tcatch (InvalidSourceException e)\r\n\t\t\t{\r\n\t\t\t\te.Report(errorSink);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\terrorSink.AddInternalError(e);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n            var errorscount = errorSink.ErrorCount + errorSink.FatalErrorCount;\r\n            var warningcount = errorSink.WarningCount + errorSink.WarningAsErrorCount;\r\n            \r\n            output.WriteLine();\r\n            output.WriteLine(\"Build complete -- {0} error{1}, {2} warning{3}.\",\r\n                errorscount, (errorscount == 1) ? \"\" : \"s\",\r\n                warningcount, (warningcount == 1) ? \"\" : \"s\");\r\n\r\n\t\t\treturn !errorSink.AnyError;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tpublic static int Main(string[] args)\r\n\t\t{\r\n\t\t\treturn new PhpNetCompiler().Compile(new List<string>(args)) ? 0 : 1;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Source/PhpNetCompiler/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup>\t<runtime>\r\n\t\t<assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\r\n\t\t</assemblyBinding>\r\n\t</runtime>\r\n</configuration>\r\n"
  },
  {
    "path": "Source/PhpNetCompiler/phpc.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\n  <Import Project=\"..\\Build\\Common.Build.settings\" />\n  <PropertyGroup>\n    <ProjectType>Local</ProjectType>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{79B2B824-23B8-45C3-ADE4-5BC8D593FC3F}</ProjectGuid>\n    <ApplicationIcon>\n    </ApplicationIcon>\n    <AssemblyName>phpc</AssemblyName>\n    <DelaySign>false</DelaySign>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>PhpNet.Compiler</RootNamespace>\n    <SccProjectName>SAK</SccProjectName>\n    <SccLocalPath>SAK</SccLocalPath>\n    <SccAuxPath>SAK</SccAuxPath>\n    <SccProvider>SAK</SccProvider>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <UseApplicationTrust>false</UseApplicationTrust>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\">\n      <Name>System</Name>\n    </Reference>\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Xml\">\n      <Name>System.XML</Name>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Main.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\n      <Visible>False</Visible>\n      <ProductName>Windows Installer 3.1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"phpc.nuspec\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Core.Parsers\\Core.Parsers.csproj\">\n      <Project>{581f1486-5062-459e-bae6-a41886584f81}</Project>\n      <Name>Core.Parsers</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\n      <Name>Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"..\\Build\\Common.Build.targets\" />\n</Project>\n"
  },
  {
    "path": "Source/PhpNetCompiler/phpc.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$description$</title>\n    <description>$description$</description>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>https://raw.githubusercontent.com/DEVSENSE/Phalanger/master/LICENSE.txt</licenseUrl>\n    <projectUrl>https://github.com/DEVSENSE/Phalanger</projectUrl>\n    <iconUrl>http://download-codeplex.sec.s-msft.com/Download?ProjectName=Phalanger&amp;DownloadId=240061</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <releaseNotes>Bug fixes and performance improvements</releaseNotes>\n    <copyright>Copyright 2015</copyright>\n    <tags>PHP Phalanger utility compiler commandline</tags>\n  </metadata>\n</package>\n"
  },
  {
    "path": "Source/Readme.txt",
    "content": "This directory contains Phalanger source files.\r\n\r\nBuilding Phalanger without VS integration\r\n-----------------------------------------\r\n\r\n1. Open Visual Studio with administration rights ( or turn off UAC )\r\n2. Open Phalanger (Orcas).sln\r\n3.  Build solution as:\r\n     - Debug ... find the result in $/Deployment/Debug\r\n     - Release ... find the result in $/Deployment/bin\r\n4. Add configuration lines from $/Deployment/machine.config (Follow comentaries in this file!) \r\n   into C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\CONFIG\\machine.config file. \r\n   \r\n   (when Phalanger runs on Windows x64)\r\n   into C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\CONFIG\\machine.config file. \r\n   \r\n\r\n\r\n\r\nTo enable debugging of compiler phpc in Visual Studio\r\n-----------------------------------------\r\n\r\n1. Set start up project to phpc \r\n2. Select phpc and open it's properties\r\n3. Select Debug and fill into command line arguments:\r\n    /target:exe test.php\r\n4. Set the working directory to the location of your \"test.php\"\r\n5. F5 to run Phalanger with debugging\r\n\r\n\r\n\r\nTo enable tests\r\n---------------\r\n\r\n1. Open project $/Tools/PhpNetTester/PhpNetTester.csproj\r\n2. If you don't have F# extension for visual studio you will see error:\r\n\r\n$\\Tools\\SilverlightSecurityverifie\r\nr\\SilverlightSecurityverifier.fsharpp cannot be opened because its\r\nproject type (Ash arpp) is not supported by this version of visual Studio.\r\nTo open it, please use a version that supports this type of project.\r\n\r\nIf you don't want to test Phalanger Silverlight it doesn't matter, click OK.\r\n\r\n3. Batch Build PhpNetTester project\r\n4. If you want to use your PHP, make sure php.ini has \r\n     short_open_tag = on\r\n     display_errors = on\r\n5. Alter $/Tests/run_v2.cmd so it has correct path en /php: argument to php.exe file\r\n6. Run $/Tests/run_v2.cmd file\r\n"
  },
  {
    "path": "Testing/Benchmarks/Micro/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib, Version=4.0.0.0\" />\r\n      <!-- add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" / -->\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Micro/go.bat",
    "content": "..\\..\\..\\Deployment\\Bin\\phpc /debug- /config:App.config test_env.php\r\n..\\..\\..\\Tools\\peverify bin\\test_env.exe\r\nbin\\test_env.exe ..\\results.csv\r\n\r\n\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\corflags.exe\" /32BIT+ bin\\test_env.exe\r\nbin\\test_env.exe ..\\results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/Micro/go_php.bat",
    "content": "..\\..\\..\\Tools\\PHP\\php.exe test_env.php results.csv\r\n..\\..\\..\\Tools\\PHP5.4\\php.exe test_env.php results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/Micro/test.php",
    "content": "<?php\r\n\r\n    // timing functions\r\n\trequire_once '..\\timing.php';\r\n\r\n    // tests:\r\n\r\n\tclass X\r\n\t{\r\n\t}\r\n\r\n\tclass Y\r\n\t{\r\n\t\tfunction __construct()\r\n\t\t{ }\r\n\t}\r\n\r\n\tclass Z\r\n\t{\r\n\t\tstatic $a;\r\n\t\tvar $b;\r\n\t\t\r\n\t\tstatic function m()\r\n\t\t{ }\r\n\t\t\r\n\t\tfunction n()\r\n\t\t{ }\r\n\t}\r\n\t\r\n\tclass A1\r\n\t{\r\n\t\tvar $v1;\r\n\t\t\r\n\t\tfunction f1()\r\n\t\t{ }\r\n\t}\r\n\t\r\n\tclass A2 extends A1\r\n\t{\r\n\t\tvar $v2;\r\n\t\t\r\n\t\tfunction f2()\r\n\t\t{ }\r\n\t}\r\n\t\r\n\tclass A3 extends A2\r\n\t{\r\n\t\tvar $v3;\r\n\t\t\r\n\t\tfunction f3()\r\n\t\t{ }\r\n\t}\r\n\t\r\n\teval('class DynamicClass{}');\r\n\t\r\n\tclass Start\r\n\t{\r\n\t\tconst LOOP_COUNT = 10000000;\r\n\t\r\n\t\tstatic function Main()\r\n\t\t{\r\n\t\t\tfor ($k = 1; $k <= 3; $k++)\r\n\t\t\t{\r\n\t\t\t\techo \"Benchmark #$k\\n\";\r\n\t\t\t\techo \"============\\n\";\r\n\t\t\t\r\n\t\t\t\tself::EmptyLoop();\r\n\t\t\t\t\r\n\t\t\t\tself::UnoptimalizedLoop();\r\n\t\t\t\tself::StaticFields();\r\n\t\t\t\tself::InstanceFields();\r\n\t\t\t\t\r\n\t\t\t\tself::StaticMethods();\r\n\t\t\t\tself::InstanceMethods1();\r\n\t\t\t\tself::InstanceMethods2();\r\n\t\t\t\t\r\n\t\t\t\tself::FieldInheritance();\r\n\t\t\t\tself::MethodInheritance();\r\n\t\t\t\t\r\n\t\t\t\tself::Operators();\r\n\t\t\t\tself::Arrays();\r\n\t\t\t\t\r\n\t\t\t\tself::Instantiation();\r\n\t\t\t}\r\n            \r\n            Timing::OutputResults();\r\n\t\t}\r\n\r\n        static function EmptyLoop()\r\n        {\r\n            for ($j = 0; $j < 3; $j++)\r\n\t\t\t{\r\n\t\t\t\tTiming::Start(\"Empty loop\");\r\n\t\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) { }\r\n\t\t\t\tTiming::Stop();\r\n\t\t\t}\r\n        }\r\n\r\n\t\tstatic function UnoptimalizedLoop()\r\n\t\t{\r\n\t\t\tTiming::Start(\"Empty unoptimalized loop\");\r\n\t\t\t$i = 'i2';\r\n\t\t\tfor(${$i} = 0; ${$i} < self::LOOP_COUNT; ${$i} ++){}\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function StaticFields()\r\n\t\t{\r\n\t\t\tTiming::Start(\"Static field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = Z::$a;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\tTiming::Start(\"Static field direct write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) Z::$a = $_x;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = \"a\";\r\n\t\t\tTiming::Start(\"Static field indirect read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = Z::$$_y;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = \"a\";\r\n\t\t\tTiming::Start(\"Static field indirect write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) Z::$$_y = $_x;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function InstanceFields()\r\n\t\t{\r\n\t\t\t$_y = new Z;\r\n\t\t\tTiming::Start(\"Instance field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->b;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\tTiming::Start(\"Instance field direct write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->b = $_x;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_z = \"b\";\r\n\t\t\tTiming::Start(\"Instance field indirect read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->$_z;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_z = \"b\";\r\n\t\t\tTiming::Start(\"Instance field indirect write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->$_z = $_x;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_y->c = NULL;\r\n\t\t\tTiming::Start(\"Undeclared instance field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->c;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_y->c = NULL;\r\n\t\t\tTiming::Start(\"Undeclared instance field direct write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->c = $_x;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_z = \"c\";\r\n\t\t\t$_y->c = NULL;\r\n\t\t\tTiming::Start(\"Undeclared instance field indirect read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->$_z;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_z = \"c\";\r\n\t\t\t$_y->c = NULL;\r\n\t\t\tTiming::Start(\"Undeclared instance field indirect write\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->$_z = $_x;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function StaticMethods()\r\n\t\t{\r\n\t\t\tTiming::Start(\"Static method direct invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) Z::m();\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = \"m\";\r\n\t\t\tTiming::Start(\"Static method indirect invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) Z::$_y();\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function InstanceMethods1()\r\n\t\t{\r\n\t\t\t$_y = new Z;\r\n\t\t\tTiming::Start(\"Instance method direct invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->n();\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function InstanceMethods2()\r\n\t\t{\r\n\t\t\t$_y = new Z;\r\n\t\t\t$_z = \"n\";\r\n\t\t\tTiming::Start(\"Instance method indirect invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y->$_z();\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function FieldInheritance()\r\n\t\t{\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Declared instance field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->v3;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Inherited instance field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->v2;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Inherited (two levels) instance field direct read\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->v1;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function MethodInheritance()\r\n\t\t{\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Declared instance method direct invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->f3();\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Inherited instance method direct invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->f2();\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = new A3;\r\n\t\t\tTiming::Start(\"Inherited (two levels) instance method direct invocation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y->f1();\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function Operators()\r\n\t\t{\r\n\t\t\t$_x = 0;\r\n\t\t\tTiming::Start(\"Variable increment\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x++;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = \"ahoj\";\r\n\t\t\t$_z = \"babi\";\r\n\t\t\tTiming::Start(\"String concatenation\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y . $_z;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function Arrays()\r\n\t\t{\r\n\t\t\t$_y = array(123 => \"hujer\", \"abcd\" => \"hujer\");\r\n\t\t\tTiming::Start(\"Array item direct read (int key)\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y[123];\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = array(123 => \"hujer\", \"abcd\" => \"hujer\");\r\n\t\t\tTiming::Start(\"Array item direct write (int key)\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y[123] = $_x;\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = array(123 => \"hujer\", \"abcd\" => \"hujer\");\r\n\t\t\tTiming::Start(\"Array item direct read (string key)\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = $_y[\"abcd\"];\r\n\t\t\tTiming::Stop();\r\n\r\n\t\t\t$_y = array(123 => \"hujer\", \"abcd\" => \"hujer\");\r\n\t\t\tTiming::Start(\"Array item direct write (string key)\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_y[\"abcd\"] = $_x;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\r\n\t\tstatic function Instantiation()\r\n\t\t{\r\n\t\t\tTiming::Start(\"Instantiate - no ctor\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = new X;\r\n\t\t\tTiming::Stop();\r\n\t\t\t\r\n\t\t\tTiming::Start(\"Instantiate - empty ctor\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = new Y;\r\n\t\t\tTiming::Stop();\r\n\t\t\t\r\n\t\t\tTiming::Start(\"Instantiate - dynamic new\");\r\n\t\t\tfor ($i = 0; $i < self::LOOP_COUNT; $i++) $_x = new DynamicClass;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Micro/test_env.php",
    "content": "<?php\r\n\tinclude \"test.php\";\t\r\n\r\n\tStart::Main();\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib, Version=4.0.0.0\" />\r\n      <!-- add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" / -->\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/binary-trees.php",
    "content": "<?php \r\n/* The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n\r\n   contributed by Peter Baltruschat\r\n   modified by Levi Cameron\r\n*/\r\n\r\nfinal class BinaryTreesTest\r\n{\r\n\r\n\tstatic function bottomUpTree($item, $depth)\r\n\t{\r\n\t   if (!$depth) return array(null,null,$item);\r\n\t   $item2 = $item + $item;\r\n\t   $depth--;\r\n\t   return array(\r\n\t\t  self::bottomUpTree($item2-1,$depth),\r\n\t\t  self::bottomUpTree($item2,$depth),\r\n\t\t  $item);\r\n\t}\r\n\r\n\tstatic function itemCheck($treeNode) { \r\n\t   return $treeNode[2]\r\n\t\t  + ($treeNode[0][0] === null ? self::itemCheck($treeNode[0]) : $treeNode[0][2])\r\n\t\t  - ($treeNode[1][0] === null ? self::itemCheck($treeNode[1]) : $treeNode[1][2]);\r\n\t}\r\n\r\n\tstatic function binaryTrees($n)\r\n\t{\r\n\t\t$minDepth = 4;\r\n\r\n\t\t$maxDepth = max($minDepth + 2, $n);\r\n\t\t$stretchDepth = $maxDepth + 1;\r\n\r\n\t\t$stretchTree = self::bottomUpTree(0, $stretchDepth);\r\n\t\t//printf(\"stretch tree of depth %d\\t check: %d\\n\", $stretchDepth, self::itemCheck($stretchTree));\r\n\t\tunset($stretchTree);\r\n\r\n\t\t$longLivedTree = self::bottomUpTree(0, $maxDepth);\r\n\r\n\t\t$iterations = 1 << ($maxDepth);\r\n\t\tdo\r\n\t\t{\r\n\t\t   $check = 0;\r\n\t\t   for($i = 1; $i <= $iterations; ++$i)\r\n\t\t   {\r\n\t\t\t  $t = self::bottomUpTree($i, $minDepth);\r\n\t\t\t  $check += self::itemCheck($t);\r\n\t\t\t  unset($t);\r\n\t\t\t  $t = self::bottomUpTree(-$i, $minDepth);\r\n\t\t\t  $check += self::itemCheck($t);\r\n\t\t\t  unset($t);\r\n\t\t   }\r\n\t\t   \r\n\t\t   //printf(\"%d\\t trees of depth %d\\t check: %d\\n\", $iterations<<1, $minDepth, $check);\r\n\t\t   \r\n\t\t   $minDepth += 2;\r\n\t\t   $iterations >>= 2;\r\n\t\t}\r\n\t\twhile($minDepth <= $maxDepth);\r\n\r\n\t\t//printf(\"long lived tree of depth %d\\t check: %d\\n\", $maxDepth, self::itemCheck($longLivedTree));\r\n\t}\r\n\t\r\n\t\r\n\tstatic function main()\r\n\t{\r\n\t\tTiming::Start(\"BinaryTrees\");\r\n\t\tself::binaryTrees(15);\r\n\t\tTiming::Stop();\t\t\r\n\t}\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/fannkuch.php",
    "content": "<?php /* The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n   \r\n   contributed by Isaac Gouy, transliterated from Mike Pall's Lua program \r\n*/\r\n\r\n\r\nfinal class FannkuchTest\r\n{\r\n\tstatic function Fannkuch($n){\r\n\t   $p = $q = $s = array(); \r\n\t   $sign = 1; $maxflips = $sum = 0; $m = $n-1;\r\n\t   for ($i=0; $i<$n; $i++){ $p[$i] = $i; $q[$i] = $i; $s[$i] = $i; }      \r\n\t   do {\r\n\t\t  // Copy and flip.\r\n\t\t  $q0 = $p[0];                                          // Cache 0th element.\r\n\t\t  if ($q0 != 0){\r\n\t\t\t for($i=1; $i<$n; $i++) $q[$i] = $p[$i];            // Work on a copy.\r\n\t\t\t $flips = 1;\r\n\t\t\t do { \r\n\t\t\t\t$qq = $q[$q0]; \r\n\t\t\t\tif ($qq == 0){                                  // ... until 0th element is 0.\r\n\t\t\t\t   $sum += $sign*$flips;\r\n\t\t\t   if ($flips > $maxflips) $maxflips = $flips;  // New maximum?\r\n\t\t\t\t   break; \r\n\t\t\t\t} \r\n\t\t\t$q[$q0] = $q0; \r\n\t\t\tif ($q0 >= 3){\r\n\t\t\t   $i = 1; $j = $q0 - 1;\r\n\t\t\t\t   do { $t = $q[$i]; $q[$i] = $q[$j]; $q[$j] = $t; $i++; $j--; } while ($i < $j); \r\n\t\t\t\t}\r\n\t\t\t$q0 = $qq; $flips++;\r\n\t\t\t } while (true); \r\n\t\t  }\r\n\t\t  // Permute.\r\n\t\t  if ($sign == 1){\r\n\t\t\t $t = $p[1]; $p[1] = $p[0]; $p[0] = $t; $sign = -1; // Rotate 0<-1.\r\n\t\t  } else { \r\n\t\t\t $t = $p[1]; $p[1] = $p[2]; $p[2] = $t; $sign = 1;  // Rotate 0<-1 and 0<-1<-2.\r\n\t\t\t for($i=2; $i<$n; $i++){ \r\n\t\t\t$sx = $s[$i];\r\n\t\t\tif ($sx != 0){ $s[$i] = $sx-1; break; }\r\n\t\t\tif ($i == $m) return array($sum,$maxflips);     // Out of permutations.\r\n\t\t\t$s[$i] = $i;\r\n\t\t\t// Rotate 0<-...<-i+1.\r\n\t\t\t$t = $p[0]; for($j=0; $j<=$i; $j++){ $p[$j] = $p[$j+1]; } $p[$i+1] = $t;\r\n\t\t\t }\r\n\t\t  }\r\n\t   } while (true);\r\n\t}\r\n\r\n\tstatic function main()\r\n\t{\r\n\t\tTiming::Start(\"Fannkuch\");\r\n\t\t$n = 10;\r\n\t\tlist($checksum,$pf) = self::Fannkuch($n);\r\n\t\t//printf(\"%d\\nPfannkuchen(%d) = %d\\n\", $checksum, $n, $pf);\r\n\t\tTiming::Stop();\r\n\t}\r\n\r\n\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/fasta.php",
    "content": "<?php\r\n/* The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n\r\n   contributed by Wing-Chung Leung\r\n   modified by Isaac Gouy\r\n   modified by anon\r\n */\r\n\r\nob_implicit_flush(1);\r\nob_start(NULL, 4096);\r\n\r\n$last = 42.0;\r\nfunction gen_random(&$last, &$randoms, $max = 1.0, $ia = 3877.0, $ic = 29573.0, $im = 139968.0) {\r\n   foreach($randoms as &$r) {\r\n      $r = $max * ($last = ($last * $ia + $ic) % $im) / $im;\r\n   }\r\n}\r\n\r\n/* Weighted selection from alphabet */\r\n\r\nfunction makeCumulative(&$genelist) {\r\n   $cumul = 0.0;\r\n   foreach($genelist as $k=>&$v) {\r\n      $cumul = $v += $cumul;\r\n   }\r\n}\r\n\r\n\r\n/* Generate and write FASTA format */\r\n\r\nfunction makeRandomFasta(&$genelist, $n) {\r\n   $width = 60;\r\n   $lines = (int) ($n / $width);\r\n   $pick = str_repeat('?', $width).\"\\n\";\r\n   $randoms = array_fill(0, $width, 0.0);\r\n   global $last;\r\n\r\n   // full lines\r\n   for ($i = 0; $i < $lines; ++$i) {\r\n      gen_random($last, $randoms);\r\n      $j = 0;\r\n      foreach ($randoms as $r) {\r\n         foreach($genelist as $k=>$v) {\r\n            if ($r < $v) {\r\n               break;\r\n            }\r\n         }\r\n         $pick[$j++] = $k;\r\n      }\r\n      echo $pick;\r\n   }\r\n\r\n   // last, partial line\r\n   $w = $n % $width;\r\n   if ($w !== 0) {\r\n      $randoms = array_fill(0, $w, 0.0);\r\n      gen_random($last, $randoms);\r\n      $j = 0;\r\n      foreach ($randoms as $r) {\r\n         foreach($genelist as $k=>$v) {\r\n            if ($r < $v) {\r\n               break;\r\n            }\r\n         }\r\n         $pick[$j++] = $k;\r\n      }\r\n      $pick[$w] = \"\\n\";\r\n      echo substr($pick, 0, $w+1);\r\n   }\r\n\r\n}\r\n\r\n\r\nfunction makeRepeatFasta($s, $n) {\r\n   $i = 0; $sLength = strlen($s); $lineLength = 60;\r\n   while ($n > 0) {\r\n      if ($n < $lineLength) $lineLength = $n;\r\n      if ($i + $lineLength < $sLength){\r\n         print(substr($s,$i,$lineLength)); print(\"\\n\");\r\n         $i += $lineLength;\r\n      } else {\r\n         print(substr($s,$i));\r\n         $i = $lineLength - ($sLength - $i);\r\n         print(substr($s,0,$i)); print(\"\\n\");\r\n      }\r\n      $n -= $lineLength;\r\n   }\r\n}\r\n\r\n\r\n/* Main -- define alphabets, make 3 fragments */\r\n\r\n$iub=array(\r\n   'a' => 0.27,\r\n   'c' => 0.12,\r\n   'g' => 0.12,\r\n   't' => 0.27,\r\n\r\n   'B' => 0.02,\r\n   'D' => 0.02,\r\n   'H' => 0.02,\r\n   'K' => 0.02,\r\n   'M' => 0.02,\r\n   'N' => 0.02,\r\n   'R' => 0.02,\r\n   'S' => 0.02,\r\n   'V' => 0.02,\r\n   'W' => 0.02,\r\n   'Y' => 0.02\r\n);\r\n\r\n$homosapiens = array(\r\n   'a' => 0.3029549426680,\r\n   'c' => 0.1979883004921,\r\n   'g' => 0.1975473066391,\r\n   't' => 0.3015094502008\r\n);\r\n\r\n$alu =\r\n   'GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG' .\r\n   'GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA' .\r\n   'CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT' .\r\n   'ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA' .\r\n   'GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG' .\r\n   'AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC' .\r\n   'AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA';\r\n\r\n$n = 1000;\r\n\r\nif ($_SERVER['argc'] > 1) $n = $_SERVER['argv'][1];\r\n\r\nmakeCumulative($iub);\r\nmakeCumulative($homosapiens);\r\n\r\necho \">ONE Homo sapiens alu\\n\";\r\nmakeRepeatFasta($alu, $n*2);\r\n\r\necho \">TWO IUB ambiguity codes\\n\";\r\nmakeRandomFasta($iub, $n*3);\r\n\r\necho \">THREE Homo sapiens frequency\\n\";\r\nmakeRandomFasta($homosapiens, $n*5);\r\n\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/go.bat",
    "content": "..\\..\\..\\Deployment\\Bin\\phpc /debug- /config:App.config test_env.php\r\n..\\..\\..\\Tools\\peverify bin\\test_env.exe\r\nbin\\test_env.exe results.csv\r\n\r\n\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\corflags.exe\" /32BIT+ bin\\test_env.exe\r\nbin\\test_env.exe results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/go_php.bat",
    "content": "..\\..\\..\\Tools\\PHP\\php.exe test_env.php results.csv\r\n..\\..\\..\\Tools\\PHP5.4\\php.exe test_env.php results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/k-nucleotide.php",
    "content": "<?php\r\n/* The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n\r\n   contributed by Damien Bonvillain\r\n   modified by anon\r\n   fixed by Isaac Gouy\r\n */\r\n\r\nob_implicit_flush(1);\r\nob_start(NULL, 4096);\r\n\r\n$sequence = read_sequence('THREE');\r\n\r\nfclose(STDIN);\r\n\r\n// sequence read, let's write some stats\r\nwrite_freq($sequence, 1);\r\nwrite_freq($sequence, 2);\r\nwrite_count($sequence, 'GGT');\r\nwrite_count($sequence, 'GGTA');\r\nwrite_count($sequence, 'GGTATT');\r\nwrite_count($sequence, 'GGTATTTTAATT');\r\nwrite_count($sequence, 'GGTATTTTAATTTATAGT');\r\n\r\n/* functions definitions follow */\r\n\r\nfunction read_sequence($id) {\r\n   $id = '>' . $id;\r\n   $ln_id = strlen($id);\r\n   $fd = STDIN;\r\n   // reach sequence three\r\n   $line = '';\r\n   while($line !== '' || !feof($fd)) {\r\n      $line = stream_get_line($fd, 100, \"\\n\");\r\n      if($line[0] == '>' && strncmp($line, $id, $ln_id) === 0) {\r\n         break;\r\n      }\r\n   }\r\n   if(feof($fd)) {\r\n      // sequence not found\r\n      exit(-1);\r\n   }\r\n   // next, read the content of the sequence\r\n   $sequence = '';\r\n   while($line !== '' || !feof($fd)) {\r\n      $line = stream_get_line($fd, 100, \"\\n\");\r\n      if (!isset($line[0])) continue;\r\n      $c = $line[0];\r\n      if ($c === ';') continue;\r\n      if ($c === '>') break;\r\n      // append the uppercase sequence fragment,\r\n      // must get rid of the CR/LF or whatever if present\r\n      $sequence .= $line;\r\n   }\r\n   return strtoupper($sequence);\r\n}\r\n\r\nfunction write_freq($sequence, $key_length) {\r\n   $map = generate_frequencies($sequence, $key_length);\r\n   uasort($map, 'freq_name_comparator');\r\n   foreach($map as $key => $val) {\r\n      printf (\"%s %.3f\\n\", $key, $val);\r\n   }\r\n   echo \"\\n\";\r\n}\r\n\r\nfunction write_count($sequence, $key) {\r\n   $map = generate_frequencies($sequence, strlen($key), false);\r\n   if (isset($map[$key])) $value = $map[$key];\r\n   else $value = 0;\r\n   printf (\"%d\\t%s\\n\", $value, $key);\r\n}\r\n\r\n/**\r\n * Returns a map (key, count or freq(default))\r\n */\r\nfunction generate_frequencies($sequence, $key_length, $compute_freq = true) {\r\n   $result = array();\r\n   $total = strlen($sequence) - $key_length;\r\n   $i = $total;\r\n   if ($key_length === 1) { \r\n      do {\r\n         $key = $sequence[$i--];\r\n         if (isset($result[$key])) ++$result[$key];\r\n         else $result[$key] = 1;\r\n      } while ($i);\r\n   } else {\r\n      do {\r\n         $key = substr($sequence, $i--, $key_length);\r\n         if(isset($result[$key])) ++$result[$key];\r\n         else $result[$key] = 1;\r\n      } while ($i);\r\n   }\r\n   if($compute_freq) {\r\n      foreach($result as $k => $v) {\r\n         $result[$k] = $v * 100 / $total;\r\n      }\r\n   }\r\n   return $result;\r\n}\r\n\r\n\r\nfunction freq_name_comparator($a, $b) {\r\n   if ($a == $b) return 0;\r\n   return  ($a < $b) ? 1 : -1;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/mandelbrot.php",
    "content": "<?php\r\n/* The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n   contributed by Thomas GODART (based on Greg Buchholz's C program) \r\n   modified by anon\r\n*/\r\n\r\nclass MandelbrotTest\r\n{\r\n    static function mandelbrot($h)\r\n    {\r\n        /*ob_implicit_flush(1);\r\n        ob_start(NULL, 4096);\r\n        */\r\n\r\n        //$h = ($argc == 2) ? ((int)$argv[1]) : 600;\r\n        $w = $h;\r\n\r\n        //printf (\"P4\\n%d %d\\n\", $w, $h);\r\n\r\n        $bit_num = 128;\r\n        $byte_acc = 0;\r\n\r\n        $yfac = 2.0 / $h;\r\n        $xfac = 2.0 / $w;\r\n\r\n        for ($y = 0 ; $y < $h ; ++$y)\r\n        {\r\n           $result = array('c*');\r\n\r\n           $Ci = $y * $yfac - 1.0;\r\n\r\n           for ($x = 0 ; $x < $w ; ++$x)\r\n           {\r\n              $Zr = 0; $Zi = 0; $Tr = 0; $Ti = 0.0;\r\n\r\n              $Cr = $x * $xfac - 1.5;\r\n\r\n              do {\r\n                 for ($i = 0 ; $i < 50 ; ++$i)\r\n                 {\r\n                    $Zi = 2.0 * $Zr * $Zi + $Ci;\r\n                    $Zr = $Tr - $Ti + $Cr;\r\n                    $Tr = $Zr * $Zr;\r\n                    if (($Tr+($Ti = $Zi * $Zi)) > 4.0) break 2;\r\n                 }\r\n                 $byte_acc += $bit_num;\r\n              } while (FALSE);\r\n\r\n              if ($bit_num === 1) {\r\n                 $result[] = $byte_acc;\r\n                 $bit_num = 128;\r\n                 $byte_acc = 0;\r\n              } else {\r\n                 $bit_num >>= 1;\r\n              }\r\n           }\r\n           if ($bit_num !== 128) {\r\n              $result[] = $byte_acc;\r\n              $bit_num = 128;\r\n              $byte_acc = 0;\r\n           }\r\n           /*echo*/ call_user_func_array('pack', $result);\r\n        }\r\n    }\r\n\r\n    static function main()\r\n    {\r\n        Timing::Start(\"Mandelbrot\");\r\n\t\tself::mandelbrot(600);\r\n\t\tTiming::Stop();\t\t\r\n    }\r\n\r\n}"
  },
  {
    "path": "Testing/Benchmarks/Shootout/nbody.php",
    "content": "<?php\r\n/* The Computer Language Benchmarks Game\r\nhttp://shootout.alioth.debian.org/\r\n\r\ncontributed by anon\r\nmodified by Sergey Khripunov\r\n*/\r\n\r\nfinal class NBodyTest\r\n{\r\n\r\n\tstatic function energy(&$b) {\r\n\t   $e = 0.0;\r\n\t   for ($i=0,$m=sizeof($b);$i<$m;$i++) {\r\n\t\t   $b1=$b[$i]; \r\n\t\t   $e = $e + $b1[6]*0.5*($b1[3]*$b1[3]+$b1[4]*$b1[4]+$b1[5]*$b1[5]);\r\n\t\t   for ($j=$i+1; $j<$m; $j++) {\r\n\t\t      $b2=$b[$j];\r\n\t\t      $dx=$b1[0]-$b2[0]; $dy=$b1[1]-$b2[1]; $dz=$b1[2]-$b2[2];\r\n\t\t      $e = $e - ($b1[6]*$b2[6])/sqrt($dx*$dx + $dy*$dy + $dz*$dz);\r\n\t\t   }\r\n\t   }\r\n\t   return $e;\r\n\t}\r\n\r\n\tstatic function n_body($n)\r\n\t{\r\n\t\t$pi=3.141592653589793;\r\n\t\t$solar_mass=4*$pi*$pi;\r\n\t\t$days_per_year=365.24;\r\n\r\n\t\t$bodies = array(array(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, $solar_mass), //Sun\r\n\t\t\t\tarray(4.84143144246472090E+00, // Jupiter\r\n\t\t\t\t\t  -1.16032004402742839E+00,\r\n\t\t\t\t\t  -1.03622044471123109E-01,\r\n\t\t\t\t\t  1.66007664274403694E-03 * $days_per_year,\r\n\t\t\t\t\t  7.69901118419740425E-03 * $days_per_year,\r\n\t\t\t\t\t  -6.90460016972063023E-05 * $days_per_year,\r\n\t\t\t\t\t  9.54791938424326609E-04 * $solar_mass),\r\n\t\t\t\tarray(8.34336671824457987E+00, // Saturn\r\n\t\t\t\t\t  4.12479856412430479E+00,\r\n\t\t\t\t\t  -4.03523417114321381E-01,\r\n\t\t\t\t\t  -2.76742510726862411E-03 * $days_per_year,\r\n\t\t\t\t\t  4.99852801234917238E-03 * $days_per_year,\r\n\t\t\t\t\t  2.30417297573763929E-05 * $days_per_year,\r\n\t\t\t\t\t  2.85885980666130812E-04 * $solar_mass),\r\n\t\t\t\tarray(1.28943695621391310E+01, // Uranus\r\n\t\t\t\t\t  -1.51111514016986312E+01,\r\n\t\t\t\t\t  -2.23307578892655734E-01,\r\n\t\t\t\t\t  2.96460137564761618E-03 * $days_per_year,\r\n\t\t\t\t\t  2.37847173959480950E-03 * $days_per_year,\r\n\t\t\t\t\t  -2.96589568540237556E-05 * $days_per_year,\r\n\t\t\t\t\t  4.36624404335156298E-05 * $solar_mass),\r\n\t\t\t\tarray(1.53796971148509165E+01, // Neptune\r\n\t\t\t\t\t  -2.59193146099879641E+01,\r\n\t\t\t\t\t  1.79258772950371181E-01,\r\n\t\t\t\t\t  2.68067772490389322E-03 * $days_per_year,\r\n\t\t\t\t\t  1.62824170038242295E-03 * $days_per_year,\r\n\t\t\t\t\t  -9.51592254519715870E-05 * $days_per_year,\r\n\t\t\t\t\t  5.15138902046611451E-05 * $solar_mass));\r\n\r\n\t\t// offset_momentum\r\n\t\t$px=$py=$pz=0.0;\r\n\t\tforeach ($bodies as &$e) {\r\n\t\t\t$px+=$e[3]*$e[6]; \r\n\t\t\t$py+=$e[4]*$e[6]; \r\n\t\t\t$pz+=$e[5]*$e[6];\r\n\t\t} \r\n\t\t$bodies[0][3]=-$px/$solar_mass;\r\n\t\t$bodies[0][4]=-$py/$solar_mass;\r\n\t\t$bodies[0][5]=-$pz/$solar_mass;\r\n\r\n\t\t$pairs = array();\r\n\t\tfor ($i=0,$m=count($bodies); $i<$m; $i++) \r\n\t\t   for ($j=$i+1; $j<$m; $j++) \r\n\t\t\t  $pairs[] = array(&$bodies[$i], &$bodies[$j]);\r\n\r\n\t\t//$n = $argv[1];\r\n\r\n\t\t/*printf(\"%0.9f\\n\", */self::energy($bodies)/*)*/;\r\n\r\n\t\t$i=0; \r\n\t\tdo {\r\n\r\n\t\t\tforeach ($pairs as &$p) {\r\n\t\t\t    $a=&$p[0]; $b=&$p[1];\r\n\t\t\t    $dx=$a[0]-$b[0]; $dy=$a[1]-$b[1]; $dz=$a[2]-$b[2];\r\n\r\n\t\t\t    $dist = sqrt($dx*$dx + $dy*$dy + $dz*$dz);\r\n\t\t\t    $mag = 0.01/($dist*$dist*$dist);\r\n\t\t\t    $mag_a = $a[6]*$mag;\r\n\t\t\t    $mag_b = $b[6]*$mag;\r\n\t\t\t\r\n\t\t\t    $a[3]-=$dx*$mag_b; $a[4]-=$dy*$mag_b; $a[5]-=$dz*$mag_b;\r\n\t\t\t    $b[3]+=$dx*$mag_a; $b[4]+=$dy*$mag_a; $b[5]+=$dz*$mag_a;\r\n\t\t\t} \r\n\r\n\t\t\tforeach ($bodies as &$b) {\r\n\t\t\t\t$b[0]+=$b[3]*0.01; $b[1]+=$b[4]*0.01; $b[2]+=$b[5]*0.01;\r\n\t\t\t} \r\n\r\n\t\t} while(++$i<$n);\r\n\r\n\t\t/*printf(\"%0.9f\\n\", */self::energy($bodies)/*)*/;\t\r\n\t}\r\n\t\r\n\tstatic function main()\r\n\t{\r\n\t\tTiming::Start(\"NBody\");\r\n\t\tself::n_body(1000000);\r\n\t\tTiming::Stop();\t\t\r\n\t}\r\n\r\n}\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/pidigits.php",
    "content": "<?php /* The Great Computer Language Shootout\r\n   http://shootout.alioth.debian.org/\r\n\r\n   contributed by Peter Baltruschat\r\n*/\r\nfunction Transformation_Compose($tr, $a)\r\n{\r\n   return array(\r\n      gmp_mul($tr[0], $a[0]),\r\n      gmp_add(gmp_mul($tr[0], $a[1]), gmp_mul($tr[1], $a[3])),\r\n      gmp_add(gmp_mul($tr[2], $a[0]), gmp_mul($tr[3], $a[2])),\r\n      gmp_add(gmp_mul($tr[2], $a[1]), gmp_mul($tr[3], $a[3]))\r\n   );\r\n}\r\nfunction Transformation_Compose2($y, $a)\r\n{\r\n   return array(\r\n      gmp_mul(10, $a[0]),\r\n      gmp_add(gmp_mul(10, $a[1]), gmp_mul(gmp_mul(-10, $y), $a[3])),\r\n      $a[2],\r\n      $a[3]\r\n   );\r\n}\r\nfunction Transformation_Extract($tr, $j)\r\n{\r\n   return gmp_div_q(\r\n      gmp_add(gmp_mul($tr[0], $j), $tr[1]),\r\n      gmp_add(gmp_mul($tr[2], $j), $tr[3])\r\n   );\r\n}\r\nfunction Transformation_Next(&$tr)\r\n{\r\n   $tr[3] = (++$tr[0]<<1) + 1;\r\n   $tr[1] = $tr[3]<<1;\r\n   $tr[2] = 0;\r\n   return $tr;\r\n}\r\nfunction Pidigit_Next(&$pd, $times)\r\n{\r\n   $digits = '';\r\n   $z = $pd[0];\r\n   do\r\n   {\r\n      $y = Transformation_Extract($z, 3);\r\n      do\r\n      {\r\n         $z = Transformation_Compose($z, Transformation_Next($pd[1]));\r\n         $y = Transformation_Extract($z, 3);\r\n      }\r\n      while(0 != gmp_cmp(Transformation_Extract($z, 4), $y));\r\n      $z = Transformation_Compose2($y, $z);\r\n      $digits .= gmp_strval($y);\r\n   }\r\n   while(--$times);\r\n   $pd[0] = $z;\r\n   return $digits;\r\n}\r\n\r\nclass PidigitsTest\r\n{\r\n    private static function pidigits($n)\r\n    {\r\n    //$n = (int) $argv[1];\r\n        $i = 0;\r\n        $pidigit = array(array(1, 0, 0, 1), array(0, 0, 0, 0));\r\n\r\n        while($n)\r\n        {\r\n           if($n < 10)\r\n           {\r\n              printf(\"%s%s\\t:%d\\n\", Pidigit_Next($pidigit, $n), str_repeat(' ', 10 - $n), $i + $n);\r\n              break;\r\n           }\r\n           else\r\n           {\r\n              printf(\"%s\\t:%d\\n\", Pidigit_Next($pidigit, 10), $i += 10);\r\n           }\r\n           $n -= 10;\r\n        }\r\n    }\r\n\r\n    static function main()\r\n    {\r\n        Timing::Start(\"NBody\");\r\n\t\tself::pidigits(1000);\r\n\t\tTiming::Stop();\t\r\n    }\r\n\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/regex-dna.php",
    "content": "<?php\r\n#\r\n# The Computer Language Benchmarks Game\r\n# http://shootout.alioth.debian.org/\r\n#\r\n# contributed by Danny Sauer\r\n# modified by Josh Goldfoot\r\n# modified by Sergey Khripunov\r\n\r\n# regexp matches\r\n\r\n#ini_set(\"memory_limit\",\"40M\");\r\n\r\n$variants = array(\r\n    'agggtaaa|tttaccct',\r\n    '[cgt]gggtaaa|tttaccc[acg]',\r\n    'a[act]ggtaaa|tttacc[agt]t',\r\n    'ag[act]gtaaa|tttac[agt]ct',\r\n    'agg[act]taaa|ttta[agt]cct',\r\n    'aggg[acg]aaa|ttt[cgt]ccct',\r\n    'agggt[cgt]aa|tt[acg]accct',\r\n    'agggta[cgt]a|t[acg]taccct',\r\n    'agggtaa[cgt]|[acg]ttaccct',\r\n);\r\n\r\n# IUB replacement parallel arrays\r\n$IUB = array(); $IUBnew = array();\r\n$IUB[]='/B/S';     $IUBnew[]='(c|g|t)';\r\n$IUB[]='/D/S';     $IUBnew[]='(a|g|t)';\r\n$IUB[]='/H/S';     $IUBnew[]='(a|c|t)';\r\n$IUB[]='/K/S';     $IUBnew[]='(g|t)';\r\n$IUB[]='/M/S';     $IUBnew[]='(a|c)';\r\n$IUB[]='/N/S';     $IUBnew[]='(a|c|g|t)';\r\n$IUB[]='/R/S';     $IUBnew[]='(a|g)';\r\n$IUB[]='/S/S';     $IUBnew[]='(c|g)';\r\n$IUB[]='/V/S';     $IUBnew[]='(a|c|g)';\r\n$IUB[]='/W/S';     $IUBnew[]='(a|t)';\r\n$IUB[]='/Y/S';     $IUBnew[]='(c|t)';\r\n\r\n# sequence descriptions start with > and comments start with ;\r\n#my $stuffToRemove = '^[>;].*$|[\\r\\n]';\r\n$stuffToRemove = '^>.*$|\\n'; # no comments, *nix-format test file...\r\n\r\n# read in file\r\n$contents = file_get_contents('php://stdin');\r\n$initialLength = strlen($contents);\r\n\r\n# remove things\r\n$contents = preg_replace(\"/$stuffToRemove/mS\", '', $contents);\r\n$codeLength = strlen($contents);\r\n\r\n# do regexp counts\r\nforeach ($variants as &$regex){\r\n    print $regex . ' ' . preg_match_all('/'.$regex.'/iS', $contents, $discard). \"\\n\";\r\n}\r\n\r\n# do replacements\r\n$contents = preg_replace($IUB, $IUBnew, $contents);\r\n\r\nprint \"\\n\" .\r\n      $initialLength . \"\\n\" .\r\n      $codeLength . \"\\n\" .\r\n      strlen($contents) . \"\\n\" ;\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/reverse-complement.php",
    "content": "<?php\r\n#\r\n# TheComputer Language Benchmarks Game\r\n# http://shootout.alioth.debian.org/\r\n#\r\n# reverse complement in PHP\r\n# contributed by Danny Sauer\r\n# modified by anon\r\n\r\nob_implicit_flush(1);\r\nob_start(NULL, 4096);\r\n\r\n$str = '';\r\n$seq = '';\r\n\r\n# read in the file, a line at a time\r\n$stdin = STDIN;\r\nwhile( $str !== '' || !feof($stdin) ) {\r\n    $str = stream_get_line($stdin, 100, \"\\n\");\r\n    if( isset($str[0]) && $str[0] === '>' ){\r\n        # if we're on a comment line, print the previous seq and move on\r\n        print_seq($seq);\r\n        echo $str, \"\\n\";\r\n    }else{\r\n        # otherwise, just append to the sequence\r\n        $seq .= $str;\r\n    }\r\n}\r\nprint_seq($seq);\r\n\r\nexit;\r\n\r\n# print the sequence out, if it exists\r\nfunction print_seq(&$seq){\r\n    if ( $seq !== '' ) {\r\n        echo chunk_split( strrev( strtr($seq, 'ACBDGHKMNSRUTWVYacbdghkmnsrutwvy', 'TGVHCDMKNSYAAWBRTGVHCDMKNSYAAWBR') ),\r\n\t\t60, \"\\n\");\r\n    }\r\n    $seq = '';\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/spectral-norm.php",
    "content": "<? \r\n/* \r\n   The Computer Language Benchmarks Game\r\n   http://shootout.alioth.debian.org/\r\n\r\n   contributed by Isaac Gouy\r\n   multicore by anon\r\n */\r\n\r\n\r\nfunction A(&$i, &$j){\r\n   return 1.0 / ( ( ( ($i+$j) * ($i+$j+1) ) >> 1 ) + $i + 1 );\r\n}\r\n\r\nfunction Av(&$n,&$v,&$start,&$end){\r\n   global $_tpl;\r\n   $Av = $_tpl;\r\n   for ($i = $start; $i < $end; ++$i) {\r\n      $sum = 0.0;\r\n      foreach($v as $j=>$v_j) {\r\n         $sum += A($i,$j) * $v_j;\r\n      }\r\n      $Av[$i] = $sum;\r\n   }\r\n   return $Av;\r\n}\r\n\r\nfunction Atv(&$n,&$v,&$start,&$end){\r\n   global $_tpl;\r\n   $Atv = $_tpl;\r\n   for($i = $start; $i < $end; ++$i) {\r\n      $sum = 0.0;\r\n      foreach($v as $j=>$v_j) {\r\n         $sum += A($j,$i) * $v_j;\r\n      }\r\n      $Atv[$i] = $sum;\r\n   }\r\n   return $Atv;\r\n}\r\n\r\nfunction AtAv(&$n,&$v,&$start,&$end,&$sync){\r\n\r\n   $tmp = Av($n, $v, $start, $end);\r\n   if ($sync) sync($tmp);\r\n\r\n   $tmp = Atv($n, $tmp, $start, $end);\r\n   if ($sync) sync($tmp);\r\n\r\n   return $tmp;\r\n}\r\n\r\nfunction sync(&$tmp) {\r\n\r\n   global $parent,$chunk_data_size,$total_data_size,$pipe,$pipes;\r\n\r\n   if (!$parent) {\r\n      array_unshift($tmp, 'd*');\r\n      $data = call_user_func_array('pack', $tmp);\r\n      safe_write($pipe, $data);\r\n      $tmp = array_merge(array(), unpack('d*', safe_read($pipe, $total_data_size)));\r\n   } else {\r\n      $tmps = array(array('d*'));\r\n      foreach($pipes as $pipe) {\r\n         $tmps[] = unpack('d*', safe_read($pipe, $chunk_data_size));\r\n      }\r\n      $tmps[] = &$tmp;\r\n      $tmp = call_user_func_array('array_merge', $tmps);\r\n\r\n      $data = call_user_func_array('pack', $tmp);\r\n      foreach($pipes as $pipe) {\r\n         safe_write($pipe, $data);\r\n      }\r\n      array_shift($tmp);\r\n   }\r\n}\r\n\r\nfunction safe_write($fd, $data) {\r\n   $len = strlen($data);\r\n   do {\r\n      $w = fwrite($fd, $data);\r\n      $len -= $w;\r\n   } while($len && ($data = substr($data, $w)) !== FALSE);\r\n}\r\nfunction safe_read($fd, $len) {\r\n   $data = '';\r\n   while ($len > 0) {\r\n      $d = fread($fd, $len);\r\n      $len -= strlen($d);\r\n      $data .= $d;\r\n   }\r\n   return $data;\r\n}\r\nfunction pipe() {\r\n   return stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);\r\n}\r\n\r\nclass SpectralNormTest\r\n{\r\n\r\n    private static function spectralnorm($n)\r\n    {\r\n\r\n        //$n = (int) (($argc == 2) ? $argv[1] : 1);\r\n\r\n        $procs = 1;\r\n        if (file_exists('/proc/cpuinfo')) {\r\n           $procs = preg_match_all('/^processor\\s/m', file_get_contents('/proc/cpuinfo'), $discard);\r\n        }\r\n\r\n        if ($n < $procs) {\r\n           $procs = 1;\r\n        }\r\n\r\n        $chunk_size = (int) ($n / $procs);\r\n        $double_size = strlen(pack('d', 0.0));\r\n        $chunk_data_size = $double_size * $chunk_size;\r\n        $total_data_size = $double_size * $n;\r\n\r\n        $pipes = array();\r\n        $parent = FALSE;\r\n        for($i = 0; $i < $procs; ++$i) {\r\n           $range_begin = $i * $chunk_size;\r\n           if ($i < ($procs - 1)) {\r\n              $pipe = pipe();\r\n              $pipes[] = $pipe[0];\r\n              $pipe = $pipe[1];\r\n              $range_end = $range_begin + $chunk_size;\r\n              $pid = pcntl_fork();\r\n              if ($pid === -1) {\r\n                 die('could not fork');\r\n              } else if ($pid) {\r\n                 continue;\r\n              }\r\n              break;\r\n           } else {\r\n              $range_end = $n;\r\n              $parent = TRUE;\r\n           }\r\n        }\r\n\r\n        $u = array_fill(0, $n, 1.0);\r\n        $_tpl = array_fill($range_begin, $range_end - $range_begin, 0.0);\r\n        $sync = $procs > 0;\r\n\r\n        for ($i=0; $i<10; $i++){\r\n           $v = AtAv($n,$u,$range_begin,$range_end,$sync);\r\n           $u = AtAv($n,$v,$range_begin,$range_end,$sync);\r\n        }\r\n\r\n        if (!$parent) {\r\n           exit(0);\r\n        }\r\n\r\n        $childs = $procs - 1;\r\n        while ($childs--) {\r\n           pcntl_wait($s);\r\n        }\r\n\r\n        $vBv = 0.0;\r\n        $vv = 0.0;\r\n        $i = 0;\r\n        foreach($v as $val) {\r\n           $vBv += $u[$i]*$val;\r\n           $vv += $val*$val;\r\n           ++$i;\r\n        }\r\n        printf(\"%0.9f\\n\", sqrt($vBv/$vv));\r\n    }\r\n\r\n    public static function main()\r\n    {\r\n        Timing::Start(\"Spectral Norm\");\r\n\t\tself::spectralnorm(1);\r\n        Timing::Stop();\t        \r\n    }\r\n}"
  },
  {
    "path": "Testing/Benchmarks/Shootout/test.php",
    "content": "<?php\r\n\r\n    include '..\\timing.php';\r\n\r\n\tinclude \"nbody.php\";\r\n\tinclude \"fannkuch.php\";\r\n\tinclude \"binary-trees.php\";\r\n    include \"mandelbrot.php\";\r\n    //include \"pidigits.php\";\r\n    //include \"spectral-norm.php\";\r\n\r\n\tclass Start\r\n\t{\r\n\t\tconst LOOP_COUNT = 10000000;\r\n\t\r\n\t\tstatic function Main()\r\n\t\t{\r\n\t\t\tfor ($k = 1; $k <= 3; $k++)\r\n\t\t\t{\r\n\t\t\t\techo \"Benchmark #$k\\n\";\r\n\t\t\t\techo \"============\\n\";\r\n\t\t\t\r\n\t\t\t\tNBodyTest::main();\r\n\t\t\t\t//FannkuchTest::main();\r\n\t\t\t\t//BinaryTreesTest::main();\r\n\t\t\t\t//MandelbrotTest::main();\r\n                //PidigitsTest::main(); // requires GMP\r\n                //SpectralNormTest::main(); // some streams\r\n\t\t\t}\r\n\r\n            Timing::OutputResults();\r\n\t\t}\r\n        \r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/Shootout/test_env.php",
    "content": "<?php\r\n\tinclude \"test.php\";\t\r\n\r\n\tStart::Main();\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/regex/dotnet/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"RegExTest\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Microsoft\")]\r\n[assembly: AssemblyProduct(\"RegExTest\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"2c40dd41-100a-4d77-a9b9-6b4f6f61a567\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Testing/Benchmarks/regex/dotnet/RETest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\n\r\npublic class regtest\r\n{\r\n    /*\r\n     * Copyright (c) 2005, Damien Mascord <tusker@tusker.org> All rights reserved.\r\n     * \r\n     * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following\r\n     * conditions are met:\r\n     * \r\n     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r\n     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following\r\n     * disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the <ORGANIZATION>\r\n     * nor the names of its contributors may be used to endorse or promote products derived from this software without specific\r\n     * prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\r\n     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\n     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r\n     * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r\n     * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n     * \r\n     */\r\n\r\n    private static readonly String[] _re = {\"^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)\", // URL match\r\n        \"(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)\", // URL match without starting ^\r\n        \"usd [+-]?[0-9]+.[0-9,0-9]\", // Canonical US dollar amount\r\n        \"\\\\b(\\\\w+)(\\\\s+\\\\1)+\\\\b\", // Duplicate words\r\n        \"\\\\{(\\\\d+):(([^}](?!-} ))*)\", // this is meant to match against the \"some more text and ...\" but it causes ORO Matcher\r\n    \t\t\t\t\t\t\t\t  // to fail, so we won't include this by default... it is also WAY too slow to test\r\n                                      // we will test large string 10 times\r\n    };\r\n\r\n    private static readonly String[] _str = {\r\n        \"http://www.linux.com/\",\r\n        \"http://www.thelinuxshow.com/main.php3\",\r\n        \"usd 1234.00\",\r\n        \"he said she said he said no\",\r\n        \"same same same\",\r\n        \"{1:\\n\" + \"this is some more text - and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more\\n\"\r\n            + \"this is some more text and some more and some more and even more at the end\\n\" + \"-}\\n\", // very large bit of text...\r\n\r\n    };\r\n\r\n    private static bool[,] expectedMatch = new bool[_re.Length,_str.Length];\r\n\r\n    static regtest()\r\n    {\r\n        expectedMatch[0,0] = true;\r\n        expectedMatch[0,1] = true;\r\n        expectedMatch[0,2] = false;\r\n        expectedMatch[0,3] = false;\r\n        expectedMatch[0,4] = false;\r\n        expectedMatch[0,5] = false;\r\n        expectedMatch[1,0] = true;\r\n        expectedMatch[1,1] = true;\r\n        expectedMatch[1,2] = false;\r\n        expectedMatch[1,3] = false;\r\n        expectedMatch[1,4] = false;\r\n        expectedMatch[1,5] = false;\r\n        expectedMatch[2,0] = false;\r\n        expectedMatch[2,1] = false;\r\n        expectedMatch[2,2] = true;\r\n        expectedMatch[2,3] = false;\r\n        expectedMatch[2,4] = false;\r\n        expectedMatch[2,5] = false;\r\n        expectedMatch[3,0] = false;\r\n        expectedMatch[3,1] = false;\r\n        expectedMatch[3,2] = false;\r\n        expectedMatch[3,3] = false;\r\n        expectedMatch[3,4] = true;\r\n        expectedMatch[3,5] = false;\r\n        expectedMatch[4,0] = false;\r\n        expectedMatch[4,1] = false;\r\n        expectedMatch[4,2] = false;\r\n        expectedMatch[4,3] = false;\r\n        expectedMatch[4,4] = false;\r\n        expectedMatch[4,5] = false;\r\n    }\r\n\r\n    private static bool debug = false;\r\n    private static bool html = true;\r\n\r\n    private readonly static int ITERATIONS = 10000;\r\n\r\n    public static void Main(string[] args)\r\n    {\r\n        long total = 0;\r\n        //try\r\n        //{\r\n            // org.apache.regexp.* test\r\n            if (debug) Console.WriteLine(\"Testing .NET regexp...\");\r\n            long[, ,] timeTaken = new long[_re.Length, ITERATIONS, _str.Length];\r\n            bool[,] matches = new bool[_re.Length, _str.Length];\r\n            var startTime = DateTime.UtcNow;\r\n            for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            {\r\n                if (debug)\r\n                {\r\n                    Console.Write(\"New regnum \" + regnum + \"...\\n\");\r\n                }\r\n                try\r\n                {\r\n                    Regex regexpr = new Regex(_re[regnum]);\r\n                    int testedAgainstLargeString = 0;\r\n                    for (int itter = 0; itter < ITERATIONS; itter++)\r\n                    {\r\n                        for (int strnum = 0; strnum < _str.Length; strnum++)\r\n                        {\r\n                            if (debug && (itter % 1000) == 0)\r\n                            {\r\n                                Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n                            }\r\n\r\n                            if (debug && (itter % 1000) == 0)\r\n                            {\r\n                                Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n                            }\r\n\r\n                            // only test the big one 10 iterations only per regex\r\n                            if (testedAgainstLargeString > 10 && strnum == 5)\r\n                            {\r\n                                break;\r\n                            }\r\n\r\n                            var iterStarTime = DateTime.UtcNow;\r\n                            bool b = regexpr.IsMatch(_str[strnum]);\r\n                            matches[regnum, strnum] = (b == expectedMatch[regnum, strnum]);\r\n                            timeTaken[regnum, itter, strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            total += timeTaken[regnum, itter, strnum];\r\n                            // count how many times we test against the large string on this regex\r\n                            if (strnum == 5)\r\n                            {\r\n                                testedAgainstLargeString++;\r\n                            }\r\n\r\n                            if (debug && (itter % 1000) == 0)\r\n                            {\r\n                                Console.Write(b);\r\n                            }\r\n\r\n                            if (debug && (itter % 1000) == 0)\r\n                            {\r\n                                Console.Write(\" took \" + timeTaken[regnum, itter, strnum] + \"ms\" + \"\\n\");\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    if (debug)\r\n                    {\r\n                        Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n                    }\r\n                }\r\n            }\r\n            var endTime = DateTime.UtcNow;\r\n            printResult(\".NET regexp\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n\r\n            Console.WriteLine(\"<b>\"+ total + \"</b>\");\r\n\r\n\r\n            //// org.apache.regexp.* test\r\n            //if (debug) Console.WriteLine(\"Testing org.apache.regexp.RE...\");\r\n            //long[,,] timeTaken = new long[_re.Length,ITERATIONS,_str.Length];\r\n            //bool[,] matches = new bool[_re.Length,_str.Length];\r\n            //var startTime =  DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    if (debug)\r\n            //    {\r\n            //        Console.Write(\"New regnum \" + regnum + \"...\\n\");\r\n            //    }\r\n            //    try\r\n            //    {\r\n            //        org.apache.regexp.RE regexpr = new org.apache.regexp.RE(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = regexpr.match(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds.TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //var endTime = DateTime.UtcNow;\r\n            //printResult(\"org.apache.regexp.RE\", timeTaken, (long)(long)(endTime - startTime).TotalMilliseconds.TotalMilliseconds, matches, html);\r\n            //// ----------------------//\r\n\r\n            //Console.WriteLine(\"Testing com.stevesoft.pat.Regex...\");\r\n\t\t\t\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        com.stevesoft.pat.Regex regexpr = new com.stevesoft.pat.Regex(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = regexpr.search(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"com.stevesoft.pat.Regex\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            //// ----------------------//\r\n            \r\n            //Console.WriteLine(\"Testing com.ibm.regex.RegularExpression...\");\r\n\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    com.ibm.regex.RegularExpression regexpr = new com.ibm.regex.RegularExpression(_re[regnum]);\r\n            //    int testedAgainstLargeString = 0;\r\n            //    for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //    {\r\n            //        for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //        {\r\n            //            if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //            bool b = regexpr.matches(_str[strnum]);\r\n            //            matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //            timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"com.ibm.regex.RegularExpression\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n            //// ----------------------//\r\n\r\n            //Console.WriteLine(\"Testing kmy.regex.util.Regex...\");\r\n\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        kmy.regex.util.Regex regexpr = kmy.regex.util.Regex.createRegex(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = regexpr.matches(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception th)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \" failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"kmy.regex.util.Regex\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            //// ----------------------//\r\n            //// jdk 1.4 version\r\n            \r\n            //Console.WriteLine(\"Testing java.util.regex.Pattern...\");\r\n\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        java.util.regex.Pattern regexpr = java.util.regex.Pattern.compile(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                java.util.regex.Matcher m = regexpr.matcher(_str[strnum]);\r\n            //                bool b = m.find();\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"java.util.regex.Pattern\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            //// ----------------------//\r\n\r\n            //Console.WriteLine(\"Testing jregex.Pattern...\");\r\n\r\n            //// jregex.Pattern version\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        jregex.Pattern regexpr = new jregex.Pattern(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                jregex.Matcher m = regexpr.matcher(_str[strnum]);\r\n            //                bool b = m.matches();\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"jregex.Pattern\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n\r\n            //// ----------------------//\r\n            //Console.WriteLine(\"Testing org.apache.oro.text.regex.Perl5Matcher...\");\r\n            //// org.apache.oro.text.regex.Perl5Matcher version\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        org.apache.oro.text.regex.Perl5Compiler perl5Compiler = new org.apache.oro.text.regex.Perl5Compiler();\r\n            //        org.apache.oro.text.regex.Perl5Matcher perl5Matcher = new org.apache.oro.text.regex.Perl5Matcher();\r\n            //        org.apache.oro.text.regex.Pattern regexpr = perl5Compiler.compile(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = perl5Matcher.matches(_str[strnum], regexpr);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"org.apache.oro.text.regex.Perl5Matcher\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n\r\n            //// ----------------------//\r\n            //Console.WriteLine(\"Testing RegularExpression.RE...\");\r\n            //// RegularExpression.RE version\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        RegularExpression.RE regexpr = new RegularExpression.RE(_re[regnum], true);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = regexpr.matches(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"RegularExpression.RE\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n           \r\n            //// ----------------------//\r\n            //Console.WriteLine(\"Testing gnu.rex.Rex...\");\r\n            //// gnu.rex.Rex version\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        gnu.rex.Rex.config_GroupBraces(\"(\", \")\"); \r\n            //        gnu.rex.Rex.config_Alternative(\"|\"); \r\n            //        gnu.rex.Rex regexpr = gnu.rex.Rex.build(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = regexpr.match(_str[strnum].toCharArray(),0,0).length() > 0;\r\n                            \r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"gnu.rex.Rex\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n\r\n            //// ----------------------//\r\n            //// dk.brics.automaton.RegExp version [fails on URL tests]\r\n            \r\n            //Console.WriteLine(\"Testing dk.brics.automaton.RegExp...\");\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        dk.brics.automaton.RegExp regexpr = new dk.brics.automaton.RegExp(_re[regnum]);\r\n            //        dk.brics.automaton.Automaton auto = regexpr.toAutomaton();\r\n            //        dk.brics.automaton.RunAutomaton runauto = new dk.brics.automaton.RunAutomaton(auto, true);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = runauto.run(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"dk.brics.automaton.RegExp\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            //// ----------------------//\r\n            //// ----------------------//\r\n            //// com.karneim.util.collection.regex.Pattern version\r\n            \r\n            //Console.WriteLine(\"Testing com.karneim.util.collection.regex.Pattern...\");\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        com.karneim.util.collection.regex.Pattern p = new com.karneim.util.collection.regex.Pattern(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = p.contains(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n\r\n            //printResult(\"com.karneim.util.collection.regex.Pattern\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n            //// ----------------------//\r\n            //// ----------------------//\r\n            //// org.apache.xerces.impl.xpath.regex.RegularExpression version\r\n            \r\n            //Console.WriteLine(\"Testing org.apache.xerces.impl.xpath.regex.RegularExpression...\");\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        org.apache.xerces.impl.xpath.regex.RegularExpression p = new org.apache.xerces.impl.xpath.regex.RegularExpression(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = p.matches(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n\r\n            //printResult(\"org.apache.xerces.impl.xpath.regex.RegularExpression\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n            //// ----------------------//\r\n            //// ----------------------//\r\n            //// monq.jfa.Regexp version\r\n            //Console.WriteLine(\"Testing monq.jfa.Regexp...\");\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        monq.jfa.Regexp p = new monq.jfa.Regexp(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = p.matches(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n\r\n            //printResult(\"monq.jfa.Regexp\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n            \r\n            //// ----------------------//\r\n            //// ----------------------//\r\n            //// com.ibm.icu.text.UnicodeSet version\r\n            \r\n            //Console.WriteLine(\"Testing com.ibm.icu.text.UnicodeSet...\");\r\n            \r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    try\r\n            //    {\r\n            //        com.ibm.icu.text.UnicodeSet p = new com.ibm.icu.text.UnicodeSet(_re[regnum]);\r\n            //        int testedAgainstLargeString = 0;\r\n            //        for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //        {\r\n            //            for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //            {\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //                bool b = p.containsAll(_str[strnum]);\r\n            //                matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //                timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //    }\r\n            //    catch (Exception e)\r\n            //    {\r\n            //        if (debug)\r\n            //        {\r\n            //            Console.WriteLine(_re[regnum] + \"  failed badly\");\r\n            //        }\r\n            //    }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n\r\n            //printResult(\"com.ibm.icu.text.UnicodeSet\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            //// -----gnu.regexp.RE-----//\r\n\r\n            //Console.WriteLine(\"Testing gnu.regexp.RE...\");\r\n\r\n            //startTime = DateTime.UtcNow;\r\n            //for (int regnum = 0; regnum < _re.Length; regnum++)\r\n            //{\r\n            //    gnu.regexp.RE regexpr = new gnu.regexp.RE(_re[regnum]);\r\n            //    int testedAgainstLargeString = 0;\r\n            //    for (int itter = 0; itter < ITERATIONS; itter++)\r\n            //    {\r\n                    \r\n            //        for (int strnum = 0; strnum < _str.Length; strnum++)\r\n            //        {\r\n            //            if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(_re[regnum] + \" against \" + _str[strnum] + \":\");\r\n            //                }\r\n                            \r\n            //                // only test the big one 10 iterations only per regex\r\n            //                if (testedAgainstLargeString > 10 && strnum == 5)\r\n            //                {\r\n            //                    break;\r\n            //                }\r\n\t\t\t\t\t\t\t\r\n            //                var iterStarTime = DateTime.UtcNow;\r\n            //            bool b = regexpr.isMatch(_str[strnum]);\r\n            //            matches[regnum,strnum] = (b == expectedMatch[regnum,strnum]);\r\n            //            timeTaken[regnum,itter,strnum] = (long)(DateTime.UtcNow - iterStarTime).TotalMilliseconds;\r\n                            \r\n            //                // count how many times we test against the large string on this regex\r\n            //                if (strnum == 5)\r\n            //                {\r\n            //                    testedAgainstLargeString++;\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(b);\r\n            //                }\r\n                            \r\n            //                if (debug && (itter % 1000) == 0)\r\n            //                {\r\n            //                    Console.Write(\" took \" + timeTaken[regnum,itter,strnum] + \"ms\" + \"\\n\");\r\n            //                }\r\n            //            }\r\n            //        }\r\n            //}\r\n            //endTime = DateTime.UtcNow;\r\n            //printResult(\"gnu.regexp.RE\", timeTaken, (long)(endTime - startTime).TotalMilliseconds, matches, html);\r\n            \r\n        //}\r\n        //catch (Exception e)//just throw the exception\r\n        //{\r\n        //    e.printStackTrace();\r\n        //}\r\n    }\r\n\r\n    private static void printResult(string regexName, long[,,] matrix, long totalTime, bool[,] matches, bool html)\r\n    {\r\n        // timeTaken[regnum,itter,strnum]\r\n        if (html)\r\n        {\r\n            Console.WriteLine(\"<table>\");\r\n            Console.WriteLine(\"<tr><th colspan=\\\"3\\\"><h2>Regular expression library:</h2></th><td colspan=\\\"3\\\"><h2>\" + regexName\r\n                + \"</h2></td></tr>\");\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"------------------------------------------\");\r\n            Console.WriteLine(\"Regular expression library: \" + regexName + \"\\n\");\r\n        }\r\n        for (int re = 0; re < _re.Length; re++)\r\n        {\r\n            if (html)\r\n            {\r\n                Console.WriteLine(\"<tr><th>RE:</th><td colspan=\\\"5\\\">\" + _re[re] + \"</td></tr>\");\r\n                Console.WriteLine(\"<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\");\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine(\"RE: \" + _re[re]);\r\n                Console.WriteLine(\"  MS\\tMAX\\tAVG\\tMIN\\tDEV\\tINPUT\\tMATCH\");\r\n            }\r\n            for (int str = 0; str < _str.Length; str++)\r\n            {\r\n                long total = 0;\r\n                long sumOfSq = 0;\r\n                long min = long.MaxValue;\r\n                long max = long.MinValue;\r\n                for (int i = 0; i < ITERATIONS; i++)\r\n                {\r\n                    long elapsed = matrix[re,i,str];\r\n                    total += elapsed;\r\n                    sumOfSq += elapsed * elapsed;\r\n                    if (elapsed < min)\r\n                    {\r\n                        min = elapsed;\r\n                    }\r\n                    if (elapsed > max)\r\n                    {\r\n                        max = elapsed;\r\n                    }\r\n                }\r\n                // calc std dev\r\n                long stdDev = (long) Math.Sqrt((sumOfSq - ((total * total) / ITERATIONS)) / (ITERATIONS - 1));\r\n\r\n                if (html)\r\n                {\r\n                    Console.WriteLine(\"<tr><td>\" + total + \"</td><td>\" + max + \"</td><td>\" + (double) total / ITERATIONS\r\n                        + \"</td><td>\" + min + \"</td><td>\" + stdDev + \"</td><td>\" + _str[str] + \"</td><td>\" + matches[re,str]\r\n                        + \"</td></tr>\");\r\n                }\r\n                else\r\n                {\r\n                    Console.WriteLine(\"  \" + total + \"\\t\" + max + \"\\t\" + (double) total / ITERATIONS + \"\\t\" + min + \"\\t\" + stdDev\r\n                        + \"\\t'\" + _str[str] + \"\\t'\" + matches[re,str] + \"'\");\r\n                }\r\n            }\r\n        }\r\n        if (html)\r\n        {\r\n            Console.WriteLine(\"<tr><th colspan=\\\"3\\\"><h2>Total time taken:</h2></th><td colspan=\\\"3\\\"><h2>\" + totalTime\r\n                + \"</h2></td></tr>\");\r\n            Console.WriteLine(\"</table>\");\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"Total time taken: \" + totalTime);\r\n            Console.WriteLine(\"------------------------------------------\");\r\n        }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "Testing/Benchmarks/regex/dotnet/RegExTest.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>RegExTest</RootNamespace>\r\n    <AssemblyName>RegExTest</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"RETest.cs\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Testing/Benchmarks/regex/dotnet/RegExTest.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RegExTest\", \"RegExTest.csproj\", \"{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{F15AF245-80C3-40DA-8BD9-F07E907DA7C0}.Release|x86.Build.0 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Testing/Benchmarks/regex/java/compile.bat",
    "content": "@echo off\nset JAVA_HOME=\"C:\\Program Files\\Java\\jdk1.7.0\"\n\n%JAVA_HOME%\\bin\\javac -classpath jrexx-1.1.1.jar;automaton.jar;jregex1.2_01.jar;gnu-regexp-1.1.4.jar;patbinfree153.jar;jakarta-regexp-1.5.jar;jakarta-oro-2.0.8.jar;jint.jar;icu4j-4_8_1_1.jar;monq-1.1.1.jar regtest.java\n%JAVA_HOME%\\bin\\java -classpath .;jrexx-1.1.1.jar;automaton.jar;jregex1.2_01.jar;gnu-regexp-1.1.4.jar;patbinfree153.jar;jakarta-regexp-1.5.jar;jakarta-oro-2.0.8.jar;jint.jar;icu4j-4_8_1_1.jar;monq-1.1.1.jar regtest > res.html\n"
  },
  {
    "path": "Testing/Benchmarks/regex/java/regtest.java",
    "content": "public class regtest\n{\n    /*\n     * Copyright (c) 2005, Damien Mascord <tusker@tusker.org> All rights reserved.\n     * \n     * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following\n     * conditions are met:\n     * \n     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following\n     * disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the <ORGANIZATION>\n     * nor the names of its contributors may be used to endorse or promote products derived from this software without specific\n     * prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\n     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n     * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n     * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n     * \n     */\n\n    private static final String[] _re = {\"^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)\", // URL match\n        \"(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)\", // URL match without starting ^\n        \"usd [+-]?[0-9]+.[0-9][0-9]\", // Canonical US dollar amount\n        \"\\\\b(\\\\w+)(\\\\s+\\\\1)+\\\\b\", // Duplicate words\n        \"\\\\{(\\\\d+):(([^}](?!-} ))*)\", // this is meant to match against the \"some more text and ...\" but it causes ORO Matcher\n    \t\t\t\t\t\t\t\t  // to fail, so we won't include this by default... it is also WAY too slow to test\n                                      // we will test large string 10 times\n    };\n\n    private static final String[] _str = {\n        \"http://www.linux.com/\",\n        \"http://www.thelinuxshow.com/main.php3\",\n        \"usd 1234.00\",\n        \"he said she said he said no\",\n        \"same same same\",\n        \"{1:\\n\" + \"this is some more text - and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more\\n\"\n            + \"this is some more text and some more and some more and even more at the end\\n\" + \"-}\\n\", // very large bit of text...\n\n    };\n\n    private static boolean[][] expectedMatch = new boolean[_re.length][_str.length];\n\n    static\n    {\n        expectedMatch[0][0] = true;\n        expectedMatch[0][1] = true;\n        expectedMatch[0][2] = false;\n        expectedMatch[0][3] = false;\n        expectedMatch[0][4] = false;\n        expectedMatch[0][5] = false;\n        expectedMatch[1][0] = true;\n        expectedMatch[1][1] = true;\n        expectedMatch[1][2] = false;\n        expectedMatch[1][3] = false;\n        expectedMatch[1][4] = false;\n        expectedMatch[1][5] = false;\n        expectedMatch[2][0] = false;\n        expectedMatch[2][1] = false;\n        expectedMatch[2][2] = true;\n        expectedMatch[2][3] = false;\n        expectedMatch[2][4] = false;\n        expectedMatch[2][5] = false;\n        expectedMatch[3][0] = false;\n        expectedMatch[3][1] = false;\n        expectedMatch[3][2] = false;\n        expectedMatch[3][3] = false;\n        expectedMatch[3][4] = true;\n        expectedMatch[3][5] = false;\n        expectedMatch[4][0] = false;\n        expectedMatch[4][1] = false;\n        expectedMatch[4][2] = false;\n        expectedMatch[4][3] = false;\n        expectedMatch[4][4] = false;\n        expectedMatch[4][5] = false;\n    }\n\n    private static boolean debug = false;\n    private static boolean html = true;\n\n    private final static int ITERATIONS = 10000;\n\n    public static final void main(String[] args)\n    {\n        try\n        {\n            // org.apache.regexp.* test\n            if (debug) System.out.println(\"Testing org.apache.regexp.RE...\");\n            long[][][] timeTaken = new long[_re.length][ITERATIONS][_str.length];\n            boolean[][] matches = new boolean[_re.length][_str.length];\n            long startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n\t\t\t\tif (debug)\n\t\t\t\t{\n\t\t\t\t\tSystem.out.print(\"New regnum \" + regnum + \"...\\n\");\n\t\t\t\t}\n                try\n                {\n                    org.apache.regexp.RE regexpr = new org.apache.regexp.RE(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = regexpr.match(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            long endTime = System.currentTimeMillis();\n            printResult(\"org.apache.regexp.RE\", timeTaken, (endTime - startTime), matches, html);\n            // ----------------------//\n\n\t\t\tSystem.out.println(\"Testing com.stevesoft.pat.Regex...\");\n\t\t\t\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n\t\t\t\ttry\n                {\n\t\t\t\t\tcom.stevesoft.pat.Regex regexpr = new com.stevesoft.pat.Regex(_re[regnum]);\n\t\t\t\t\tint testedAgainstLargeString = 0;\n\t\t\t\t\tfor (int itter = 0; itter < ITERATIONS; itter++)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (int strnum = 0; strnum < _str.length; strnum++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n\t\t\t\t\t\t\tboolean b = regexpr.search(_str[strnum]);\n\t\t\t\t\t\t\tmatches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n\t\t\t\t\t\t\ttimeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"com.stevesoft.pat.Regex\", timeTaken, (endTime - startTime), matches, html);\n            // ----------------------//\n            \n            // System.out.println(\"Testing com.ibm.regex.RegularExpression...\");\n\n            // startTime = System.currentTimeMillis();\n            // for (int regnum = 0; regnum < _re.length; regnum++)\n            // {\n                // com.ibm.regex.RegularExpression regexpr = new com.ibm.regex.RegularExpression(_re[regnum]);\n                // int testedAgainstLargeString = 0;\n                // for (int itter = 0; itter < ITERATIONS; itter++)\n                // {\n                    // for (int strnum = 0; strnum < _str.length; strnum++)\n                    // {\n\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            // }\n                            \n                            // // only test the big one 10 iterations only per regex\n                            // if (testedAgainstLargeString > 10 && strnum == 5)\n                            // {\n                                // break;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// long iterStarTime = System.currentTimeMillis();\n                        // boolean b = regexpr.matches(_str[strnum]);\n                        // matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                        // timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // // count how many times we test against the large string on this regex\n                            // if (strnum == 5)\n                            // {\n\t\t\t\t\t\t\t\t// testedAgainstLargeString++;\n\t\t\t\t\t\t\t// }\n                            \n                            // if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(b);\n                            // }\n                            \n                            // if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t// }\n                        // }\n                    // }\n            // }\n            // endTime = System.currentTimeMillis();\n            // printResult(\"com.ibm.regex.RegularExpression\", timeTaken, (endTime - startTime), matches, html);\n            \n            // ----------------------//\n\n\t\t\tSystem.out.println(\"Testing kmy.regex.util.Regex...\");\n\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    kmy.regex.util.Regex regexpr = kmy.regex.util.Regex.createRegex(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = regexpr.matches(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable th)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \" failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"kmy.regex.util.Regex\", timeTaken, (endTime - startTime), matches, html);\n            // ----------------------//\n            // jdk 1.4 version\n            \n            System.out.println(\"Testing java.util.regex.Pattern...\");\n\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    java.util.regex.Pattern regexpr = java.util.regex.Pattern.compile(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            java.util.regex.Matcher m = regexpr.matcher(_str[strnum]);\n                            boolean b = m.find();\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"java.util.regex.Pattern\", timeTaken, (endTime - startTime), matches, html);\n            // ----------------------//\n\n\t\t\tSystem.out.println(\"Testing jregex.Pattern...\");\n\n            // jregex.Pattern version\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    jregex.Pattern regexpr = new jregex.Pattern(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            jregex.Matcher m = regexpr.matcher(_str[strnum]);\n                            boolean b = m.matches();\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"jregex.Pattern\", timeTaken, (endTime - startTime), matches, html);\n\n            // ----------------------//\n\t\t\tSystem.out.println(\"Testing org.apache.oro.text.regex.Perl5Matcher...\");\n            // org.apache.oro.text.regex.Perl5Matcher version\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    org.apache.oro.text.regex.Perl5Compiler perl5Compiler = new org.apache.oro.text.regex.Perl5Compiler();\n                    org.apache.oro.text.regex.Perl5Matcher perl5Matcher = new org.apache.oro.text.regex.Perl5Matcher();\n                    org.apache.oro.text.regex.Pattern regexpr = perl5Compiler.compile(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = perl5Matcher.matches(_str[strnum], regexpr);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"org.apache.oro.text.regex.Perl5Matcher\", timeTaken, (endTime - startTime), matches, html);\n\n            // ----------------------//\n\t\t\t// System.out.println(\"Testing RegularExpression.RE...\");\n            // // RegularExpression.RE version\n            \n            // startTime = System.currentTimeMillis();\n            // for (int regnum = 0; regnum < _re.length; regnum++)\n            // {\n                // try\n                // {\n                    // RegularExpression.RE regexpr = new RegularExpression.RE(_re[regnum], true);\n                    // int testedAgainstLargeString = 0;\n                    // for (int itter = 0; itter < ITERATIONS; itter++)\n                    // {\n                        // for (int strnum = 0; strnum < _str.length; strnum++)\n                        // {\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            // }\n                            \n                            // // only test the big one 10 iterations only per regex\n                            // if (testedAgainstLargeString > 10 && strnum == 5)\n                            // {\n                                // break;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// long iterStarTime = System.currentTimeMillis();\n                            // boolean b = regexpr.matches(_str[strnum]);\n                            // matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            // timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // // count how many times we test against the large string on this regex\n                            // if (strnum == 5)\n                            // {\n\t\t\t\t\t\t\t\t// testedAgainstLargeString++;\n\t\t\t\t\t\t\t// }\n                            \n                            // if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(b);\n                            // }\n                            \n                            // if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t// }\n                        // }\n                    // }\n                // }\n                // catch (Throwable e)\n                // {\n                    // if (debug)\n                    // {\n                        // System.out.println(_re[regnum] + \"  failed badly\");\n                    // }\n                // }\n            // }\n            // endTime = System.currentTimeMillis();\n            // printResult(\"RegularExpression.RE\", timeTaken, (endTime - startTime), matches, html);\n            \n           \n            // ----------------------//\n            // System.out.println(\"Testing gnu.rex.Rex...\");\n            // // gnu.rex.Rex version\n            \n            // startTime = System.currentTimeMillis();\n            // for (int regnum = 0; regnum < _re.length; regnum++)\n            // {\n                // try\n                // {\n                    // gnu.rex.Rex.config_GroupBraces(\"(\", \")\"); \n                    // gnu.rex.Rex.config_Alternative(\"|\"); \n                    // gnu.rex.Rex regexpr = gnu.rex.Rex.build(_re[regnum]);\n                    // int testedAgainstLargeString = 0;\n                    // for (int itter = 0; itter < ITERATIONS; itter++)\n                    // {\n                        // for (int strnum = 0; strnum < _str.length; strnum++)\n                        // {\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            // }\n                            \n                            // // only test the big one 10 iterations only per regex\n                            // if (testedAgainstLargeString > 10 && strnum == 5)\n                            // {\n                                // break;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// long iterStarTime = System.currentTimeMillis();\n                            // boolean b = regexpr.match(_str[strnum].toCharArray(),0,0).length() > 0;\n                            \n                            // matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            // timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // // count how many times we test against the large string on this regex\n                            // if (strnum == 5)\n                            // {\n\t\t\t\t\t\t\t\t// testedAgainstLargeString++;\n\t\t\t\t\t\t\t// }\n                            \n                            // if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(b);\n                            // }\n                            \n                            // if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t// }\n                        // }\n                    // }\n                // }\n                // catch (Throwable e)\n                // {\n                    // if (debug)\n                    // {\n                        // System.out.println(_re[regnum] + \"  failed badly\");\n                    // }\n                // }\n            // }\n            // endTime = System.currentTimeMillis();\n            // printResult(\"gnu.rex.Rex\", timeTaken, (endTime - startTime), matches, html);\n            \n\n            // ----------------------//\n            // dk.brics.automaton.RegExp version [fails on URL tests]\n            \n            System.out.println(\"Testing dk.brics.automaton.RegExp...\");\n            \n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    dk.brics.automaton.RegExp regexpr = new dk.brics.automaton.RegExp(_re[regnum]);\n                    dk.brics.automaton.Automaton auto = regexpr.toAutomaton();\n                    dk.brics.automaton.RunAutomaton runauto = new dk.brics.automaton.RunAutomaton(auto, true);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = runauto.run(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"dk.brics.automaton.RegExp\", timeTaken, (endTime - startTime), matches, html);\n            // ----------------------//\n            // ----------------------//\n            // com.karneim.util.collection.regex.Pattern version\n            \n            System.out.println(\"Testing com.karneim.util.collection.regex.Pattern...\");\n            \n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    com.karneim.util.collection.regex.Pattern p = new com.karneim.util.collection.regex.Pattern(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = p.contains(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n\n            printResult(\"com.karneim.util.collection.regex.Pattern\", timeTaken, (endTime - startTime), matches, html);\n            \n            // ----------------------//\n            // ----------------------//\n            // org.apache.xerces.impl.xpath.regex.RegularExpression version\n            \n            // System.out.println(\"Testing org.apache.xerces.impl.xpath.regex.RegularExpression...\");\n            \n            // startTime = System.currentTimeMillis();\n            // for (int regnum = 0; regnum < _re.length; regnum++)\n            // {\n                // try\n                // {\n                    // org.apache.xerces.impl.xpath.regex.RegularExpression p = new org.apache.xerces.impl.xpath.regex.RegularExpression(_re[regnum]);\n                    // int testedAgainstLargeString = 0;\n                    // for (int itter = 0; itter < ITERATIONS; itter++)\n                    // {\n                        // for (int strnum = 0; strnum < _str.length; strnum++)\n                        // {\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            // }\n                            \n                            // // only test the big one 10 iterations only per regex\n                            // if (testedAgainstLargeString > 10 && strnum == 5)\n                            // {\n                                // break;\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// long iterStarTime = System.currentTimeMillis();\n                            // boolean b = p.matches(_str[strnum]);\n                            // matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            // timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // // count how many times we test against the large string on this regex\n                            // if (strnum == 5)\n                            // {\n\t\t\t\t\t\t\t\t// testedAgainstLargeString++;\n\t\t\t\t\t\t\t// }\n                            \n                            // if (debug && (itter % 1000) == 0)\n                            // {\n                                // System.out.print(b);\n                            // }\n                            \n                            // if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t// {\n\t\t\t\t\t\t\t\t// System.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t// }\n                        // }\n                    // }\n                // }\n                // catch (Throwable e)\n                // {\n                    // if (debug)\n                    // {\n                        // System.out.println(_re[regnum] + \"  failed badly\");\n                    // }\n                // }\n            // }\n            // endTime = System.currentTimeMillis();\n\n            // printResult(\"org.apache.xerces.impl.xpath.regex.RegularExpression\", timeTaken, (endTime - startTime), matches, html);\n            \n            // ----------------------//\n            // ----------------------//\n            // monq.jfa.Regexp version\n            System.out.println(\"Testing monq.jfa.Regexp...\");\n            \n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    monq.jfa.Regexp p = new monq.jfa.Regexp(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = p.matches(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n\n            printResult(\"monq.jfa.Regexp\", timeTaken, (endTime - startTime), matches, html);\n \n            \n            \n\t\t\t// ----------------------//\n            // ----------------------//\n            // com.ibm.icu.text.UnicodeSet version\n            \n\t\t\tSystem.out.println(\"Testing com.ibm.icu.text.UnicodeSet...\");\n            \n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                try\n                {\n                    com.ibm.icu.text.UnicodeSet p = new com.ibm.icu.text.UnicodeSet(_re[regnum]);\n                    int testedAgainstLargeString = 0;\n                    for (int itter = 0; itter < ITERATIONS; itter++)\n                    {\n                        for (int strnum = 0; strnum < _str.length; strnum++)\n                        {\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                            boolean b = p.containsAll(_str[strnum]);\n                            matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                            timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n                }\n                catch (Throwable e)\n                {\n                    if (debug)\n                    {\n                        System.out.println(_re[regnum] + \"  failed badly\");\n                    }\n                }\n            }\n            endTime = System.currentTimeMillis();\n\n            printResult(\"com.ibm.icu.text.UnicodeSet\", timeTaken, (endTime - startTime), matches, html);            // -----gnu.regexp.RE-----//\n\n\t\t\tSystem.out.println(\"Testing gnu.regexp.RE...\");\n\n            startTime = System.currentTimeMillis();\n            for (int regnum = 0; regnum < _re.length; regnum++)\n            {\n                gnu.regexp.RE regexpr = new gnu.regexp.RE(_re[regnum]);\n                int testedAgainstLargeString = 0;\n                for (int itter = 0; itter < ITERATIONS; itter++)\n                {\n                    \n                    for (int strnum = 0; strnum < _str.length; strnum++)\n                    {\n\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\"Iteration/regex number/string number \" + itter + \"/\" + regnum + \"/\" + strnum + \"... \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(_re[regnum] + \" against \" + _str[strnum] + \":\");\n                            }\n                            \n                            // only test the big one 10 iterations only per regex\n                            if (testedAgainstLargeString > 10 && strnum == 5)\n                            {\n                                break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tlong iterStarTime = System.currentTimeMillis();\n                        boolean b = regexpr.isMatch(_str[strnum]);\n                        matches[regnum][strnum] = (b == expectedMatch[regnum][strnum]);\n                        timeTaken[regnum][itter][strnum] = (System.currentTimeMillis() - iterStarTime);\n                            \n                            // count how many times we test against the large string on this regex\n                            if (strnum == 5)\n                            {\n\t\t\t\t\t\t\t\ttestedAgainstLargeString++;\n\t\t\t\t\t\t\t}\n                            \n                            if (debug && (itter % 1000) == 0)\n                            {\n                                System.out.print(b);\n                            }\n                            \n                            if (debug && (itter % 1000) == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSystem.out.print(\" took \" + timeTaken[regnum][itter][strnum] + \"ms\" + \"\\n\");\n\t\t\t\t\t\t\t}\n                        }\n                    }\n            }\n            endTime = System.currentTimeMillis();\n            printResult(\"gnu.regexp.RE\", timeTaken, (endTime - startTime), matches, html);\n            \n        }\n        catch (Exception e)\n        {\n            e.printStackTrace();\n        }\n    }\n\n    private static final void printResult(String regexName, long[][][] matrix, long totalTime, boolean[][] matches, boolean html)\n    {\n        // timeTaken[regnum][itter][strnum]\n        if (html)\n        {\n            System.out.println(\"<table>\");\n            System.out.println(\"<tr><th colspan=\\\"3\\\"><h2>Regular expression library:</h2></th><td colspan=\\\"3\\\"><h2>\" + regexName\n                + \"</h2></td></tr>\");\n        }\n        else\n        {\n            System.out.println(\"------------------------------------------\");\n            System.out.println(\"Regular expression library: \" + regexName + \"\\n\");\n        }\n        for (int re = 0; re < _re.length; re++)\n        {\n            if (html)\n            {\n                System.out.println(\"<tr><th>RE:</th><td colspan=\\\"5\\\">\" + _re[re] + \"</td></tr>\");\n                System.out\n                    .println(\"<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\");\n            }\n            else\n            {\n                System.out.println(\"RE: \" + _re[re]);\n                System.out.println(\"  MS\\tMAX\\tAVG\\tMIN\\tDEV\\tINPUT\\tMATCH\");\n            }\n            for (int str = 0; str < _str.length; str++)\n            {\n                long total = 0;\n                long sumOfSq = 0;\n                long min = Long.MAX_VALUE;\n                long max = Long.MIN_VALUE;\n                for (int i = 0; i < ITERATIONS; i++)\n                {\n                    long elapsed = matrix[re][i][str];\n                    total += elapsed;\n                    sumOfSq += elapsed * elapsed;\n                    if (elapsed < min)\n                    {\n                        min = elapsed;\n                    }\n                    if (elapsed > max)\n                    {\n                        max = elapsed;\n                    }\n                }\n                // calc std dev\n                long stdDev = (long) java.lang.Math.sqrt((sumOfSq - ((total * total) / ITERATIONS)) / (ITERATIONS - 1));\n\n                if (html)\n                {\n                    System.out.println(\"<tr><td>\" + total + \"</td><td>\" + max + \"</td><td>\" + (double) total / ITERATIONS\n                        + \"</td><td>\" + min + \"</td><td>\" + stdDev + \"</td><td>\" + _str[str] + \"</td><td>\" + matches[re][str]\n                        + \"</td></tr>\");\n                }\n                else\n                {\n                    System.out.println(\"  \" + total + \"\\t\" + max + \"\\t\" + (double) total / ITERATIONS + \"\\t\" + min + \"\\t\" + stdDev\n                        + \"\\t'\" + _str[str] + \"\\t'\" + matches[re][str] + \"'\");\n                }\n            }\n        }\n        if (html)\n        {\n            System.out.println(\"<tr><th colspan=\\\"3\\\"><h2>Total time taken:</h2></th><td colspan=\\\"3\\\"><h2>\" + totalTime\n                + \"</h2></td></tr>\");\n            System.out.println(\"</table>\");\n        }\n        else\n        {\n            System.out.println(\"Total time taken: \" + totalTime);\n            System.out.println(\"------------------------------------------\");\n        }\n    }\n\n}\n"
  },
  {
    "path": "Testing/Benchmarks/regex/java/res.html",
    "content": "<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>org.apache.regexp.RE</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>34</td><td>13</td><td>0.0034</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>27</td><td>1</td><td>0.0027</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>36</td><td>2</td><td>0.0036</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>90</td><td>2</td><td>0.009</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>44</td><td>1</td><td>0.0044</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>62</td><td>15</td><td>0.0062</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>14</td><td>1</td><td>0.0014</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>21</td><td>1</td><td>0.0021</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>205</td><td>1</td><td>0.0205</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>943</td><td>1</td><td>0.0943</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>291</td><td>1</td><td>0.0291</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>11045</td><td>1088</td><td>1.1045</td><td>0</td><td>33</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>7</td><td>1</td><td>7.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>17</td><td>1</td><td>0.0017</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>7</td><td>1</td><td>7.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>6</td><td>1</td><td>6.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>89</td><td>5</td><td>0.0089</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>42</td><td>1</td><td>0.0042</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>84</td><td>4</td><td>0.0084</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>15</td><td>1</td><td>0.0015</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>15</td><td>4</td><td>0.0015</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>false</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>13173</h2></td></tr>\r\n</table>\r\nTesting com.stevesoft.pat.Regex...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>com.stevesoft.pat.Regex</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>27</td><td>1</td><td>0.0027</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>40</td><td>1</td><td>0.004</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>69</td><td>5</td><td>0.0069</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>126</td><td>7</td><td>0.0126</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>78</td><td>9</td><td>0.0078</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>16</td><td>1</td><td>0.0016</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>18</td><td>1</td><td>0.0018</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>254</td><td>1</td><td>0.0254</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>1259</td><td>1</td><td>0.1259</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>380</td><td>1</td><td>0.038</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>12549</td><td>1222</td><td>1.2549</td><td>0</td><td>37</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>11</td><td>1</td><td>0.0011</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>12</td><td>1</td><td>0.0012</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>66</td><td>1</td><td>0.0066</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>93</td><td>1</td><td>0.0093</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>70</td><td>1</td><td>0.007</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>15</td><td>1</td><td>0.0015</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>45</td><td>8</td><td>0.0045</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>false</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>15288</h2></td></tr>\r\n</table>\r\nTesting kmy.regex.util.Regex...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>kmy.regex.util.Regex</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>6</td><td>1</td><td>6.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>18</td><td>1</td><td>0.0018</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>53</td><td>1</td><td>0.0053</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>167</td><td>18</td><td>0.0167</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>77</td><td>1</td><td>0.0077</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>12</td><td>2</td><td>0.0012</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>18</td><td>1</td><td>0.0018</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>54</td><td>1</td><td>0.0054</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>124</td><td>4</td><td>0.0124</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>75</td><td>1</td><td>0.0075</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>13</td><td>1</td><td>0.0013</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>44</td><td>29</td><td>0.0044</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>7</td><td>1</td><td>7.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>33</td><td>1</td><td>0.0033</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>34</td><td>1</td><td>0.0034</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>27</td><td>1</td><td>0.0027</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>29</td><td>1</td><td>0.0029</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>64</td><td>1</td><td>0.0064</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>6</td><td>2</td><td>6.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>73</td><td>8</td><td>0.0073</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>false</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>1138</h2></td></tr>\r\n</table>\r\nTesting java.util.regex.Pattern...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>java.util.regex.Pattern</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>17</td><td>1</td><td>0.0017</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>21</td><td>3</td><td>0.0021</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>21</td><td>1</td><td>0.0021</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>65</td><td>8</td><td>0.0065</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>37</td><td>2</td><td>0.0037</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>15</td><td>1</td><td>0.0015</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>104</td><td>1</td><td>0.0104</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>487</td><td>1</td><td>0.0487</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>127</td><td>1</td><td>0.0127</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>4889</td><td>498</td><td>0.4889</td><td>0</td><td>14</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>12</td><td>8</td><td>0.0012</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>16</td><td>2</td><td>0.0016</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>17</td><td>1</td><td>0.0017</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>16</td><td>1</td><td>0.0016</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>26</td><td>1</td><td>0.0026</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>16</td><td>1</td><td>0.0016</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>50</td><td>19</td><td>0.005</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>7</td><td>2</td><td>7.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>12</td><td>1</td><td>0.0012</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>12</td><td>6</td><td>0.0012</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>false</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>6048</h2></td></tr>\r\n</table>\r\nTesting jregex.Pattern...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>jregex.Pattern</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>37</td><td>6</td><td>0.0037</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>32</td><td>1</td><td>0.0032</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>76</td><td>19</td><td>0.0076</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>182</td><td>29</td><td>0.0182</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>61</td><td>2</td><td>0.0061</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>10</td><td>1</td><td>0.001</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>23</td><td>1</td><td>0.0023</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>59</td><td>1</td><td>0.0059</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>28</td><td>1</td><td>0.0028</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>10</td><td>1</td><td>0.001</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>37</td><td>1</td><td>0.0037</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>39</td><td>1</td><td>0.0039</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>36</td><td>1</td><td>0.0036</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>36</td><td>9</td><td>0.0036</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>36</td><td>4</td><td>0.0036</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>849</h2></td></tr>\r\n</table>\r\nTesting org.apache.oro.text.regex.Perl5Matcher...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>org.apache.oro.text.regex.Perl5Matcher</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>55</td><td>8</td><td>0.0055</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>39</td><td>1</td><td>0.0039</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>108</td><td>10</td><td>0.0108</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>250</td><td>25</td><td>0.025</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>134</td><td>1</td><td>0.0134</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>17</td><td>1</td><td>0.0017</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>27</td><td>1</td><td>0.0027</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>66</td><td>1</td><td>0.0066</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>134</td><td>1</td><td>0.0134</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>84</td><td>1</td><td>0.0084</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>10</td><td>1</td><td>0.001</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>10</td><td>1</td><td>0.001</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>13</td><td>1</td><td>0.0013</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>14</td><td>1</td><td>0.0014</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>9</td><td>1</td><td>9.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>15</td><td>1</td><td>0.0015</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>11</td><td>2</td><td>0.0011</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>1032</h2></td></tr>\r\n</table>\r\nTesting dk.brics.automaton.RegExp...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>dk.brics.automaton.RegExp</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>false</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>false</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>5</td><td>1</td><td>5.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>185</h2></td></tr>\r\n</table>\r\nTesting com.karneim.util.collection.regex.Pattern...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>com.karneim.util.collection.regex.Pattern</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>false</td></tr>\r\n<tr><td>8</td><td>2</td><td>8.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>false</td></tr>\r\n<tr><td>4</td><td>2</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>10</td><td>7</td><td>0.001</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>9</td><td>6</td><td>9.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>12</td><td>1</td><td>0.0012</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>10</td><td>2</td><td>0.001</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>6</td><td>1</td><td>6.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>11</td><td>1</td><td>0.0011</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>203</h2></td></tr>\r\n</table>\r\nTesting monq.jfa.Regexp...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>monq.jfa.Regexp</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>false</td></tr>\r\n<tr><td>8</td><td>2</td><td>8.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>false</td></tr>\r\n<tr><td>4</td><td>2</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>10</td><td>7</td><td>0.001</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>9</td><td>6</td><td>9.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>54</td><td>2</td><td>0.0054</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>23</td><td>1</td><td>0.0023</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>32</td><td>1</td><td>0.0032</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>21</td><td>1</td><td>0.0021</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>32</td><td>1</td><td>0.0032</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>28</td><td>1</td><td>0.0028</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>24</td><td>1</td><td>0.0024</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>22</td><td>1</td><td>0.0022</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>25</td><td>1</td><td>0.0025</td><td>0</td><td>0</td><td>same same same</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>352</h2></td></tr>\r\n</table>\r\nTesting com.ibm.icu.text.UnicodeSet...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>com.ibm.icu.text.UnicodeSet</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>3</td><td>1</td><td>3.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>false</td></tr>\r\n<tr><td>8</td><td>2</td><td>8.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>false</td></tr>\r\n<tr><td>4</td><td>2</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>10</td><td>7</td><td>0.001</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>9</td><td>6</td><td>9.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>54</td><td>2</td><td>0.0054</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>35</td><td>1</td><td>0.0035</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>23</td><td>1</td><td>0.0023</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>32</td><td>1</td><td>0.0032</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>21</td><td>1</td><td>0.0021</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>32</td><td>1</td><td>0.0032</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>28</td><td>1</td><td>0.0028</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>24</td><td>1</td><td>0.0024</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>22</td><td>1</td><td>0.0022</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>25</td><td>1</td><td>0.0025</td><td>0</td><td>0</td><td>same same same</td><td>false</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>87</h2></td></tr>\r\n</table>\r\nTesting gnu.regexp.RE...\r\n<table>\r\n<tr><th colspan=\"3\"><h2>Regular expression library:</h2></th><td colspan=\"3\"><h2>gnu.regexp.RE</h2></td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>126</td><td>6</td><td>0.0126</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>220</td><td>23</td><td>0.022</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>113</td><td>2</td><td>0.0113</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>242</td><td>8</td><td>0.0242</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>132</td><td>1</td><td>0.0132</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>110</td><td>1</td><td>0.011</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>154</td><td>1</td><td>0.0154</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>85</td><td>1</td><td>0.0085</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>214</td><td>1</td><td>0.0214</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>113</td><td>1</td><td>0.0113</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">usd [+-]?[0-9]+.[0-9][0-9]</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>56</td><td>11</td><td>0.0056</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>4</td><td>1</td><td>4.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\b(\\w+)(\\s+\\1)+\\b</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>18</td><td>1</td><td>0.0018</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>20</td><td>1</td><td>0.002</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>20</td><td>1</td><td>0.002</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>14</td><td>2</td><td>0.0014</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>34</td><td>1</td><td>0.0034</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>0</td><td>0</td><td>0.0</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th>RE:</th><td colspan=\"5\">\\{(\\d+):(([^}](?!-} ))*)</td></tr>\r\n<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\r\n<tr><td>8</td><td>8</td><td>8.0E-4</td><td>0</td><td>0</td><td>http://www.linux.com/</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>http://www.thelinuxshow.com/main.php3</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>usd 1234.00</td><td>true</td></tr>\r\n<tr><td>1</td><td>1</td><td>1.0E-4</td><td>0</td><td>0</td><td>he said she said he said no</td><td>true</td></tr>\r\n<tr><td>2</td><td>1</td><td>2.0E-4</td><td>0</td><td>0</td><td>same same same</td><td>true</td></tr>\r\n<tr><td>17</td><td>4</td><td>0.0017</td><td>0</td><td>0</td><td>{1:\nthis is some more text - and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more\nthis is some more text and some more and some more and even more at the end\n-}\n</td><td>true</td></tr>\r\n<tr><th colspan=\"3\"><h2>Total time taken:</h2></th><td colspan=\"3\"><h2>1745</h2></td></tr>\r\n</table>\r\n"
  },
  {
    "path": "Testing/Benchmarks/regex/php/index.php",
    "content": "<?php\r\n\r\n    /*\r\n     * Copyright (c) 2005, Damien Mascord <tusker@tusker.org> All rights reserved.\r\n     * \r\n     * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following\r\n     * conditions are met:\r\n     * \r\n     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\r\n     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following\r\n     * disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the <ORGANIZATION>\r\n     * nor the names of its contributors may be used to endorse or promote products derived from this software without specific\r\n     * prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\r\n     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\n     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r\n     * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r\n     * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n     * \r\n     */\r\n\r\n\r\n\r\n    $re = array(\"#^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)#\", // URL match\r\n        \"#(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)#\", // URL match without starting ^\r\n        \"#usd [+-]?[0-9]+.[0-9,0-9]#\", // Canonical US dollar amount\r\n        \"#\\b(\\w+)(\\s+\\1)+\\b#\", // Duplicate words\r\n        \"#\\{(\\d+):(([^}](?!-} ))*)#\" // this is meant to match against the \"some more text and ...\" but it causes ORO Matcher\r\n    \t\t\t\t\t\t\t\t  // to fail, so we won't include this by default... it is also WAY too slow to test\r\n                                      // we will test large string 10 times\r\n    );\r\n\r\n\t $str = array(\r\n        \"http://www.linux.com/\",\r\n        \"http://www.thelinuxshow.com/main.php3\",\r\n        \"usd 1234.00\",\r\n        \"he said she said he said no\",\r\n        \"same same same\",\r\n        \"{1:\\n\" . \"this is some more text - and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more\\n\"\r\n            . \"this is some more text and some more and some more and even more at the end\\n\" . \"-}\\n\" // very large bit of text...\r\n\t\t);\r\n\t\t\r\n\t\t\r\n    $expectedMatch[0][0] = true;\r\n    $expectedMatch[0][1] = true;\r\n    $expectedMatch[0][2] = false;\r\n    $expectedMatch[0][3] = false;\r\n    $expectedMatch[0][4] = false;\r\n    $expectedMatch[0][5] = false;\r\n    $expectedMatch[1][0] = true;\r\n    $expectedMatch[1][1] = true;\r\n    $expectedMatch[1][2] = false;\r\n    $expectedMatch[1][3] = false;\r\n    $expectedMatch[1][4] = false;\r\n    $expectedMatch[1][5] = false;\r\n    $expectedMatch[2][0] = false;\r\n    $expectedMatch[2][1] = false;\r\n    $expectedMatch[2][2] = true;\r\n    $expectedMatch[2][3] = false;\r\n    $expectedMatch[2][4] = false;\r\n    $expectedMatch[2][5] = false;\r\n    $expectedMatch[3][0] = false;\r\n    $expectedMatch[3][1] = false;\r\n    $expectedMatch[3][2] = false;\r\n    $expectedMatch[3][3] = false;\r\n    $expectedMatch[3][4] = true;\r\n    $expectedMatch[3][5] = false;\r\n    $expectedMatch[4][0] = false;\r\n    $expectedMatch[4][1] = false;\r\n    $expectedMatch[4][2] = false;\r\n    $expectedMatch[4][3] = false;\r\n    $expectedMatch[4][4] = false;\r\n    $expectedMatch[4][5] = false;\r\n\r\n    define(\"debug\", false);\r\n\tdefine(\"html\", true);\r\n    define(\"ITERATIONS\", 10000);\r\n\r\n\r\n  \r\n    // org.apache.regexp.* test\r\n    if (debug) echo(\"Testing QUERUCS...\");\r\n\r\n    $startTime = microtime(true);\r\n    for ($regnum = 0; $regnum < count($re); $regnum++)\r\n    {\r\n        if (debug)\r\n        {\r\n            echo(\"New regnum \" . $regnum . \"...\\n\");\r\n        }\r\n\r\n\t\t$testedAgainstLargeString = 0;\r\n\t\tfor ($itter = 0; $itter < ITERATIONS; $itter++)\r\n\t\t{\r\n\t\t\tfor ($strnum = 0; $strnum < count($str); $strnum++)\r\n\t\t\t{\r\n\t\t\t\tif (debug && ($itter % 1000) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\techo(\"Iteration/regex number/string number \" . $itter . \"/\" . $regnum . \"/\" . $strnum . \"... \");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (debug && ($itter % 1000) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\techo($re[$regnum] . \" against \" . $str[$strnum] . \":\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// only test the big one 10 iterations only per regex\r\n\t\t\t\tif ($testedAgainstLargeString > 10 && $strnum == 5)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$iterStarTime = microtime(true);\r\n\t\t\t\t$b = preg_match($re[$regnum], $str[$strnum]);\r\n\t\t\t\t$matches[$regnum][ $strnum] = ($b == $expectedMatch[$regnum][ $strnum]);\r\n\t\t\t\t$timeTaken[$regnum][ $itter][ $strnum] = (microtime(true) - $iterStarTime)*1000;\r\n\t\t\t\t\r\n\t\t\t\t// count how many times we test against the large string on this regex\r\n\t\t\t\tif ($strnum == 5)\r\n\t\t\t\t{\r\n\t\t\t\t\t$testedAgainstLargeString++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (debug && ($itter % 1000) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\techo($b);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (debug && ($itter % 1000) == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\techo(\" took \" . $timeTaken[$regnum][ $itter][ $strnum] . \"ms\" . \"\\n\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n    }\r\n    $endTime = microtime(true);\r\n    printResult(\"QUERUCS\", $timeTaken, ($endTime - $startTime) * 1000, $matches);\r\n\r\n\t\r\n\tfunction printResult($regexName, &$matrix, $totalTime, $matches)\r\n    {\r\n\t\tglobal $re,$str;\r\n\t\t\r\n        // timeTaken[regnum,itter,strnum]\r\n        if (html)\r\n        {\r\n            echo(\"<table>\");\r\n            echo(\"<tr><th colspan=\\\"3\\\"><h2>Regular expression library:</h2></th><td colspan=\\\"3\\\"><h2>\" . $regexName\r\n                . \"</h2></td></tr>\");\r\n        }\r\n        else\r\n        {\r\n            echo(\"------------------------------------------\");\r\n            echo(\"Regular expression library: \" . $regexName . \"\\n\");\r\n        }\r\n        for ($ire = 0; $ire <count($re); $ire++)\r\n        {\r\n            if (html)\r\n            {\r\n                echo(\"<tr><th>RE:</th><td colspan=\\\"5\\\">\" . $re[$ire] . \"</td></tr>\");\r\n                echo(\"<tr><th>MS</th><th>MAX</th><th>AVG</th><th>MIN</th><th>DEV</th><th>INPUT</th><th>MATCH</th></tr>\");\r\n            }\r\n            else\r\n            {\r\n                echo(\"RE: \" . $re[$ire]);\r\n                echo(\"  MS\\tMAX\\tAVG\\tMIN\\tDEV\\tINPUT\\tMATCH\");\r\n            }\r\n            for ($istr = 0; $istr < count($str); $istr++)\r\n            {\r\n                $total = 0;\r\n                $sumOfSq = 0;\r\n                $min = PHP_INT_MAX;\r\n                $max = 1-PHP_INT_MAX;\r\n                for ($i = 0; $i < ITERATIONS; $i++)\r\n                {\r\n                    $elapsed = @$matrix[$ire][$i][$istr];\r\n                    $total += $elapsed;\r\n                    $sumOfSq += $elapsed * $elapsed;\r\n                    if ($elapsed < $min)\r\n                    {\r\n                        $min = $elapsed;\r\n                    }\r\n                    if ($elapsed > $max)\r\n                    {\r\n                        $max = $elapsed;\r\n                    }\r\n                }\r\n                // calc std dev\r\n                $stdDev = sqrt(($sumOfSq - (($total * $total) / ITERATIONS)) / (ITERATIONS - 1));\r\n\r\n                if (html)\r\n                {\r\n                    echo(\"<tr><td>\" . $total . \"</td><td>\" . $max . \"</td><td>\" . $total / ITERATIONS\r\n                        . \"</td><td>\" . $min . \"</td><td>\" . $stdDev . \"</td><td>\" . $str[$istr] . \"</td><td>\" . $matches[$ire][$istr]\r\n                        . \"</td></tr>\");\r\n                }\r\n                else\r\n                {\r\n                    echo(\"  \" . $total . \"\\t\" . $max . \"\\t\" . $total / ITERATIONS . \"\\t\" . $min . \"\\t\" . $stdDev\r\n                        . \"\\t'\" . $str[$istr] . \"\\t'\" . $matches[$ire][$istr] . \"'\");\r\n                }\r\n            }\r\n        }\r\n        if (html)\r\n        {\r\n            echo(\"<tr><th colspan=\\\"3\\\"><h2>Total time taken:</h2></th><td colspan=\\\"3\\\"><h2>\" . $totalTime\r\n                . \"</h2></td></tr>\");\r\n            echo(\"</table>\");\r\n        }\r\n        else\r\n        {\r\n            echo(\"Total time taken: \" . $totalTime);\r\n            echo(\"------------------------------------------\");\r\n        }\r\n    }\r\n\t\r\n\r\n?>"
  },
  {
    "path": "Testing/Benchmarks/roadsend/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib, Version=4.0.0.0\" />\r\n      <!-- add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" / -->\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Benchmarks/roadsend/go.bat",
    "content": "..\\..\\..\\Deployment\\Bin\\phpc /debug- /config:App.config test_env.php\r\n..\\..\\..\\Tools\\peverify bin\\test_env.exe\r\nbin\\test_env.exe results.csv\r\n\r\n\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\corflags.exe\" /32BIT+ bin\\test_env.exe\r\nbin\\test_env.exe results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/roadsend/go_php.bat",
    "content": "..\\..\\..\\Tools\\PHP\\php.exe test_env.php results.csv\r\n..\\..\\..\\Tools\\PHP5.4\\php.exe test_env.php results.csv\r\n\r\npause\r\n"
  },
  {
    "path": "Testing/Benchmarks/roadsend/readme.txt",
    "content": "http://www.roadsend.com/home/index.php?pageID=benchmarks"
  },
  {
    "path": "Testing/Benchmarks/roadsend/test.php",
    "content": "<?\r\n\t// timing\r\n\trequire_once '..\\timing.php';\r\n\r\n\t// tests:\r\n\t\r\n\tfunction Ack($m, $n){\r\n\t  if($m == 0) return $n + 1;\r\n\t  if($n == 0) return Ack($m-1, 1);\r\n\t  return Ack($m - 1, Ack($m, ($n - 1)));\r\n\t}\r\n\t\r\n\tfunction ary($n) {\r\n\t  for ($i=0; $i<$n; $i++) {\r\n\t\t  $X[$i] = $i;\r\n\t  }\r\n\t  for ($i=$n-1; $i>=0; $i--) {\r\n\t\t  $Y[$i] = $X[$i];\r\n\t  }\r\n\t  $last = $n-1;\r\n\t  /*print \"$Y[$last]\\n\";*/\r\n\t}\r\n\t\r\n\tfunction ary2($n) {\r\n\t  for ($i=0; $i<$n;) {\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t  \r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t\t  $X[$i] = $i; ++$i;\r\n\t  }\r\n\t  for ($i=$n-1; $i>=0; $i--) {\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t  \r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t\t  $Y[$i] = $X[$i]; --$i;\r\n\t  }\r\n\t  $last = $n-1;\r\n\t  /*print \"$Y[$last]\\n\";*/\r\n\t}\r\n\t\r\n\tfunction ary3($n) {\r\n\t  for ($i=0; $i<$n; $i++) {\r\n\t\t  $X[$i] = $i + 1;\r\n\t\t  $Y[$i] = 0;\r\n\t  }\r\n\t  for ($k=0; $k<1000; $k++) {\r\n\t\t  for ($i=$n-1; $i>=0; $i--) {\r\n\t\t\t $Y[$i] += $X[$i];\r\n\t\t  }\r\n\t  }\r\n\t  $last = $n-1;\r\n\t  /*print \"$Y[0] $Y[$last]\\n\";*/\r\n\t}\r\n\t\r\n\tfunction fibo($n){\r\n\t\treturn(($n < 2) ? 1 : fibo($n - 2) + fibo($n - 1));\r\n\t}\r\n\t\r\n\tfunction stak($x1, $y1, $z1) {\r\n\t  global $x, $y, $z;\r\n\r\n\t  $x = $x1;\r\n\t  $y = $y1;\r\n\t  $z = $z1;\r\n\t  return stak_aux();\r\n\t}\r\n\tfunction stak_aux() {\r\n\t  global $x, $y, $z;\r\n\r\n\t  if ( !($y < $x)) {\r\n\t\treturn $z;\r\n\t  } else {\r\n\t\t//no LET :(\r\n\t\t$savedx = $x;\r\n\t\t$savedy = $y;\r\n\t\t$savedz = $z;\r\n\t\t$x = $savedx - 1;\r\n\t\t$newx = stak_aux();\r\n\t\t\r\n\t\t$x = $savedy - 1;\r\n\t\t$y = $savedz;\r\n\t\t$z = $savedx;\r\n\t\t$newy = stak_aux();\r\n\r\n\t\t$x = $savedz - 1;\r\n\t\t$y = $savedx;\r\n\t\t$z = $savedy;\r\n\t\t$newz = stak_aux();\r\n\t\t\r\n\t\t$x = $newx;\r\n\t\t$y = $newy;\r\n\t\t$z = $newz;\r\n\t\treturn stak_aux();\r\n\t  }\r\n\t}\r\n\tfunction tak($x, $y, $z) {\r\n\t  if ( !($y < $x)) {\r\n\t\treturn $z;\r\n\t  } else {\r\n\t\treturn tak( tak($x - 1, $y, $z),\r\n\t\t\ttak($y - 1, $z, $x),\r\n\t\t\ttak($z - 1, $x, $y));\r\n\t  }\r\n\t}\r\n\t\r\n\tfunction hash2($n) {\r\n\t\tfor ($i = 0; $i < 1000; $i++) {\r\n\t\t\t$hash1[\"foo_$i\"] = $hash2[\"foo_$i\"] = $i;\r\n\t\t}\r\n\t\tfor ($i = $n; $i > 0; $i--) {\r\n\t\t\tforeach($hash1 as $key => $value) $hash2[$key] += $value;\r\n\t\t}\r\n\t\t$h = \"$hash1[foo_1] $hash1[foo_999] $hash2[foo_1] $hash2[foo_999]\";\r\n\t}\r\n\t\r\n\tclass Random {\r\n\t\tconst IM = 139968;\r\n\t\tconst IA = 3877;\r\n\t\tconst IC = 29573;\r\n\t\r\n\t\tstatic $LAST = 42;\r\n\r\n\t\tstatic function gen_random ($n) {\r\n\t\t\treturn( ($n * (Random::$LAST = (Random::$LAST * Random::IA + Random::IC) % Random::IM)) / Random::IM );\r\n\t\t}\t\t\r\n\t}\r\n\t\r\n\tfunction heapsort ($n, &$ra) {\r\n\t\t$l = ($n >> 1) + 1;\r\n\t\t$ir = $n;\r\n\r\n\t\twhile (1) {\r\n\t\t\tif ($l > 1) {\r\n\t\t\t\t$rra = $ra[--$l];\r\n\t\t\t} else {\r\n\t\t\t\t$rra = $ra[$ir];\r\n\t\t\t\t$ra[$ir] = $ra[1];\r\n\t\t\t\tif (--$ir == 1) {\r\n\t\t\t\t$ra[1] = $rra;\r\n\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$i = $l;\r\n\t\t\t$j = $l << 1;\r\n\t\t\twhile ($j <= $ir) {\r\n\t\t\t\tif (($j < $ir) && ($ra[$j] < $ra[$j+1])) {\r\n\t\t\t\t$j++;\r\n\t\t\t\t}\r\n\t\t\t\tif ($rra < $ra[$j]) {\r\n\t\t\t\t$ra[$i] = $ra[$j];\r\n\t\t\t\t$j += ($i = $j);\r\n\t\t\t\t} else {\r\n\t\t\t\t$j = $ir + 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$ra[$i] = $rra;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction numtest() {\r\n\t\t$j = 0;\r\n\t\tfor ($i = 0; $i < 1000000; $i++) {\r\n\t\t\t$j += $i * 2;\r\n\t\t}\r\n\t\t$x = \"$j, $i\\n\";\r\n\t}\r\n\t\r\n\tclass smallobject {\r\n\r\n\t\tvar $avar = 'hello';\r\n\r\n\t\tfunction smallobject() {\r\n\t\t\treturn \"some hairy constructor\\n\";\r\n\t\t}\r\n\t\t\r\n\t\tfunction afunc() {\r\n\t\t\treturn $this->avar;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tclass largeobject {\r\n\r\n\t\tvar $var1 = 'some string';\r\n\t\tvar $var2 = 'some string';\r\n\t\tvar $var3 = 'some string';\r\n\t\tvar $var4 = 'some string';\r\n\t\tvar $var5 = 'some string';\r\n\t\tvar $var6 = 'some string';\r\n\t\tvar $var7 = 'some string';\r\n\t\tvar $var8 = 'some string';\r\n\t\tvar $var9 = 'some string';\r\n\t\tvar $var10 = 'some string';\r\n\t\tvar $var11 = 'some string';\r\n\t\tvar $var12 = 'some string';\r\n\t\tvar $var13 = 'some string';\r\n\t\tvar $var14 = 'some string';\r\n\t\tvar $var15 = 'some string';\r\n\t\tvar $var16 = 'some string';\r\n\t\tvar $var17 = 'some string';\r\n\t\tvar $var18 = 'some string';\r\n\t\tvar $var19 = 'some string';\r\n\t\tvar $var20 = 'some string';\r\n\t\tvar $var21 = 'some string';\r\n\t\tvar $var22 = 'some string';\r\n\t\tvar $var23 = 'some string';\r\n\t\tvar $var24 = 'some string';\r\n\t\tvar $var25 = 'some string';\r\n\t\tvar $var26 = 'some string';\r\n\t\tvar $var27 = 'some string';\r\n\t\tvar $var28 = 'some string';\r\n\t\tvar $var29 = 'some string';\r\n\t\tvar $var30 = 'some string';\r\n\t\tvar $var31 = 'some string';\r\n\t\tvar $var32 = 'some string';\r\n\t\tvar $var33 = 'some string';\r\n\t\tvar $var34 = 'some string';\r\n\t\tvar $var35 = 'some string';\r\n\t\tvar $var36 = 'some string';\r\n\t\tvar $var37 = 'some string';\r\n\t\tvar $var38 = 'some string';\r\n\t\tvar $var39 = 'some string';\r\n\t\tvar $var40 = 'some string';\r\n\r\n\t\tfunction largeobject() {\r\n\t\t\treturn \"some hairy constructor\\n\";\r\n\t\t}\r\n\t\t\r\n\t\tfunction afunc11($a) {        \r\n\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc12($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc13($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc14($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc15($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc16($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc17($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc18($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc19($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc20($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\r\n\t\tfunction afunc21($a) {        \r\n\t\t\t\t\treturn \"a function\\n\";\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tfunction sieve($n) {\r\n\t  $count = 0;\r\n\t  while ($n-- > 0) {\r\n\t\t$count = 0;\r\n\t\t$flags = range (0,8192);\r\n\t\tfor ($i=2; $i<8193; $i++) {\r\n\t\t  if ($flags[$i] > 0) {\r\n\t\tfor ($k=$i+$i; $k <= 8192; $k+=$i) {\r\n\t\t  $flags[$k] = 0;\r\n\t\t}\r\n\t\t$count++;\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n\t  //print \"Count: $count\\n\";\r\n\t}\r\n\r\n\tfunction mystrcat($n) {\r\n\t  $str = \"\";\r\n\t  while ($n-- > 0) {\r\n\t\t$str .= \"hello\\n\";\r\n\t\t$str = $str . \"goodbye\" . \"hello\\n\";\r\n\t  }\r\n\t  $len = strlen($str);\r\n\t  //print \"$len\\n\";\r\n\t}\r\n\t\r\n\tfunction nestedloop($n) {\r\n\t\t$x = 0;\r\n\t\tfor ($a=0; $a<$n; $a++)\r\n\t\t  for ($b=0; $b<$n; $b++)\r\n\t\t\tfor ($f=0; $f<$n; $f++)\r\n\t\t\t  $x++;\r\n\t\t//print \"$x\\n\";\r\n\t}\r\n\t\r\n\tclass Start\r\n\t{\r\n\t\tstatic function Main()\r\n\t\t{\r\n\t\t\tfor ($k = 1; $k <= 3; $k++)\r\n\t\t\t{\r\n\t\t\t\techo \"Benchmark #$k\\n\";\r\n\t\t\t\techo \"============\\n\";\r\n\t\t\t\t\r\n\t\t\t\tself::ackermann();\r\n\t\t\t\tself::ary();\r\n\t\t\t\tself::fibo();\r\n\t\t\t\tself::stak();\r\n\t\t\t\tself::hash2();\r\n\t\t\t\tself::heapsort();\r\n\t\t\t\tself::numtest();\r\n\t\t\t\tself::objects();\r\n\t\t\t\tself::random();\r\n\t\t\t\tself::sieve();\r\n\t\t\t\tself::mystrcat();\r\n\t\t\t\tself::nestedloop();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tTiming::OutputResults();\r\n\t\t}\r\n\r\n\t\tstatic function ackermann() {\r\n\t\t\tTiming::Start(\"ackermann.php\");\r\n\t\t\t/*print \"Ack(3,7): \" .*/ Ack(3,7) /*. \"\\n\"*/;\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function ary() {\r\n\t\t\tTiming::Start(\"ary.php\");\r\n\t\t\tary(100000);\r\n\t\t\tTiming::Stop();\r\n\t\t\t\r\n\t\t\tTiming::Start(\"ary2.php\");\r\n\t\t\tary2(100000);\r\n\t\t\tTiming::Stop();\r\n\t\t\t\r\n\t\t\tTiming::Start(\"ary3.php\");\r\n\t\t\tary3(1000);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function fibo() {\r\n\t\t\tTiming::Start(\"fibo.php\");\r\n\t\t\tfibo(30);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function stak() {\r\n\t\t\tTiming::Start(\"gabriel-stak.php\");\r\n\t\t\tstak(18, 12, 6);\r\n\t\t\tTiming::Stop();\r\n\t\t\t\r\n\t\t\tTiming::Start(\"gabriel-tak.php\");\r\n\t\t\ttak(18, 12, 6);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function hash2() {\r\n\t\t\tTiming::Start(\"hash2.php\");\r\n\t\t\thash2(1000);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function heapsort() {\r\n\t\t\t$N = /*($argc == 2) ? $argv[1] : */10000;\r\n\t\t\tfor ($i=1; $i<=$N; $i++)\r\n\t\t\t\t$ary[$i] = Random::gen_random(1);\r\n\t\t\t\r\n\t\t\tTiming::Start(\"heapsort.php\");\r\n\t\t\theapsort($N,$ary);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function numtest() {\r\n\t\t\tTiming::Start(\"numtest.php\");\r\n\t\t\tnumtest();\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function objects() {\r\n\t\t\t$numObjs=5000;\r\n\r\n\t\t\tTiming::Start(\"objects.php\");\r\n\t\t\t\r\n\t\t\t// creation of objects\r\n\t\t\tfor ($i=0; $i<$numObjs; $i++) {\r\n\t\t\t\t$large[$i] = new largeobject();\r\n\t\t\t\t$large[$i]->small[$i] = new smallobject(); \r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// calling methods\r\n\t\t\tfor ($i=0; $i<$numObjs; $i++) {\r\n\t\t\t\t$large[$i]->afunc11('hi');\r\n\t\t\t\t$large[$i]->afunc12('hi');\r\n\t\t\t\t$large[$i]->afunc13('hi');\r\n\t\t\t\t$large[$i]->afunc14('hi');\r\n\t\t\t\t$large[$i]->afunc15('hi');\r\n\t\t\t\t$large[$i]->afunc16('hi');\r\n\t\t\t\t$large[$i]->afunc17('hi');\r\n\t\t\t\t$large[$i]->afunc18('hi');\r\n\t\t\t\t$large[$i]->afunc19('hi');\r\n\t\t\t\t$large[$i]->afunc20('hi');\r\n\t\t\t\t$large[$i]->afunc21('hi');\r\n\t\t\t}\r\n\r\n\t\t\t// property access\r\n\t\t\tfor ($i=0; $i<$numObjs; $i++) {\r\n\t\t\t\tfor ($t=1; $t<=40; $t++) {\r\n\t\t\t\t\t$somevar = 'var'.$t;\r\n\t\t\t\t\t$a = $large[$i]->$somevar;\r\n\t\t\t\t\t$b = $large[$i]->small[$i]->avar;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function random() {\r\n\t\t\t$N = 1000000;\r\n\t\t\t\r\n\t\t\tTiming::Start(\"random.php\");\r\n\t\t\twhile ($N--) {\r\n\t\t\t\tRandom::gen_random(100.0);\r\n\t\t\t}\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function sieve() {\r\n\t\t\tTiming::Start(\"sieve.php\");\r\n\t\t\tsieve(18);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function mystrcat() {\r\n\t\t\r\n\t\t\t$a[] = 'zot';\r\n\t\t\t$a[] = 'zotzot';\r\n\t\t\t$a[] = 'zotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzotzotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzotzotzotzotzot';\r\n\t\t\t$a[] = 'zotzotzotzotzotzotzotzotzot';\r\n\t\t\r\n\t\t\t$b = NULL;\r\n\t\t\t\r\n\t\t\tTiming::Start(\"mystrcat.php\");\r\n\r\n\t\t\tmystrcat(10000);\r\n\t\t\t\r\n\t\t\tfor ($i=0; $i<1000; $i++) {\r\n\t\t\t\tforeach ($a as $val) {\r\n\t\t\t\t\t$b .= $val;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function nestedloop() {\r\n\t\t\tTiming::Start(\"nestedloop.php\");\r\n\t\t\tnestedloop(100);\r\n\t\t\tTiming::Stop();\r\n\t\t}\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/roadsend/test_env.php",
    "content": "<?\r\n\tinclude \"test.php\";\t\r\n\r\n\tStart::Main();\r\n?>\r\n"
  },
  {
    "path": "Testing/Benchmarks/timing.php",
    "content": "<?php\r\n\r\n\tclass Timing\r\n\t{\r\n\t\tprivate static $start;\r\n\t\tprivate static $descr;\r\n        private static $results = array();\r\n\t\t\r\n        private static $configurationName;\r\n        private static function ConfigurationName()\r\n        {\r\n            if (empty(self::$configurationName)) {\r\n                if (defined(\"PHALANGER\")) {\r\n                    @date_default_timezone_set('UTC');\r\n                    self::$configurationName = \"Phalanger/\" . (System\\Environment::$Is64BitProcess ? \"x64\" : \"x86\");\r\n                    self::$configurationName .= \"/\" . date(\"Ymd\");    // TODO: changeset number (.rev.build)\r\n                } else {\r\n                    self::$configurationName = \"PHP \" . PHP_VERSION;\r\n                }\r\n                //self::$configurationName .= strtoupper(php_uname('n'));\r\n            }\r\n            return self::$configurationName;\r\n        }\r\n        \r\n\r\n\t\tprivate static function GetTicks()\r\n\t\t{\r\n\t\t\treturn microtime(true);\r\n\t\t}\r\n\r\n        static function Start($descr)\r\n\t\t{\r\n\t\t\tself::$descr = $descr;\r\n\t\t\tself::$start = self::GetTicks();\r\n\r\n            echo $descr . \";\";\r\n\t\t}\r\n\t\t\r\n\t\tstatic function Stop()\r\n\t\t{\r\n\t\t\t$time = self::GetTicks() - self::$start;\r\n\r\n            // update results for this test\r\n            $testresult = @self::$results[self::$descr] ?: array();\r\n            if (empty($testresult))\r\n            {\r\n\t\t\t    $testresult['descr'] = self::$descr;\r\n                $testresult['time'] = $time;\r\n            }\r\n            else\r\n            {\r\n                $testresult['time'] = min($time, $testresult['time']);\r\n            }\r\n\r\n            //\r\n\t\t\techo \" \" . $time . \"\\n\";\r\n\r\n            // update results\r\n            self::$results[self::$descr] = $testresult;\t\r\n\t\t}\r\n\r\n        static function OutputResults()\r\n        {\r\n            $argv = $GLOBALS['argv'];\r\n            if (count($argv) > 1)\r\n            {\r\n                $fname = $argv[1];\r\n\r\n                // Test;        configuration1; configuration2; ...\r\n                // <descr>;     <time1>;        <time2>;        ...\r\n                // <descr>;     <time1>;        <time2>;        ...\r\n                // <descr>;     <time1>;        <time2>;        ...\r\n                \r\n                // merge with results already in the CSV file:\r\n                $header = array(\"Test\");\r\n                $table = array();\r\n                \r\n                $first = true;\r\n                if (($f = @fopen($fname, \"r\")) !== FALSE) {\r\n                    while (($data = fgetcsv($f, 0, \";\")) !== FALSE) {\r\n                        if ($first) { // this is header\r\n                            $header = $data;\r\n                            $first = false;\r\n                        }\r\n                        else\r\n                            $table[] = $data;\r\n                    }\r\n                    fclose($f);\r\n                }\r\n                \r\n                // find current configuration within $header, or add it\r\n                $column = array_search(self::ConfigurationName(), $header);\r\n                if (!$column) {\r\n                    // add column since current configuration is not listed yet\r\n                    $column = count($header);\r\n                    $header[] = self::ConfigurationName();\r\n                }\r\n\r\n                // update $table:\r\n                foreach (self::$results as $result) {\r\n                    // find test line:\r\n                    for ($line = 0; $line < count($table); $line ++)\r\n                        if ($table[$line][0] == $result['descr'])\r\n                            break;\r\n                    if ($line == count($table))\r\n                        $table[] = array($result['descr']);\r\n\r\n                    // update test time for current configuration:\r\n                    $oldtime = (double)@$table[$line][$column];\r\n                    $time = (double)$result['time'];\r\n                    if ($oldtime <= 0.0 || $oldtime > $time)\r\n                        $table[$line][$column] = $time;\r\n                }\r\n\r\n                // output results\r\n                $f = fopen($fname, \"w\");\r\n                // write header\r\n                fwrite($f, implode(\";\", $header) . \"\\n\");\r\n                // write table\r\n                foreach ($table as $row)\r\n                {\r\n                    //fwrite($f, implode(\";\", $row));\r\n                    for ($i = 0; $i < count($header); $i++) {\r\n                        if ($i > 0) fwrite( $f, \";\");\r\n                        fwrite($f, @$row[$i]);\r\n                    }\r\n                    fwrite($f, \"\\n\");\r\n                }\r\n\r\n                fclose($f);\r\n            }\r\n        }\r\n\t}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/CodeDOMTest (Orcas).vbproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>9.0.21022</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{97E448C9-A04D-462F-8B42-C892A10FC8E1}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <StartupObject>PHP.Core.CodeDom.Test.Test</StartupObject>\r\n    <RootNamespace>PHP.Core.CodeDom.Test</RootNamespace>\r\n    <AssemblyName>CodeDOMTest</AssemblyName>\r\n    <MyType>Console</MyType>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <OldToolsVersion>2.0</OldToolsVersion>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r\n    <PublishUrl>http://localhost/CodeDOMTest/</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Web</InstallFrom>\r\n    <UpdateEnabled>true</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <IsWebBootstrapper>true</IsWebBootstrapper>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <DefineDebug>true</DefineDebug>\r\n    <DefineTrace>true</DefineTrace>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DocumentationFile>CodeDOMTest.xml</DocumentationFile>\r\n    <NoWarn>42020,42021,42022</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <DefineDebug>false</DefineDebug>\r\n    <DefineTrace>true</DefineTrace>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DocumentationFile>CodeDOMTest.xml</DocumentationFile>\r\n    <NoWarn>42020,42021,42022</NoWarn>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"CppCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\PublicAssemblies\\CppCodeProvider.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"FSharp.Compiler.CodeDom, Version=1.9.2.9, Culture=neutral, PublicKeyToken=a19089b1c74d0809, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\FSharp-1.9.2.9\\bin\\FSharp.Compiler.CodeDom.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"IronPython, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\Microsoft Visual Studio 2008 SDK\\VisualStudioIntegration\\Common\\Assemblies\\IronPython.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.JScript\" />\r\n    <Reference Include=\"Microsoft.VisualC.VSCodeProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"MsilCodeProvider, Version=0.0.0.0, Culture=neutral, PublicKeyToken=bea7318addcc7030, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Tools\\MSIL Code Provider\\MsilCodeProvider.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\">\r\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Deployment\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Windows.Forms\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"VJSharpCodeProvider\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Import Include=\"Microsoft.VisualBasic\" />\r\n    <Import Include=\"System\" />\r\n    <Import Include=\"System.Collections\" />\r\n    <Import Include=\"System.Collections.Generic\" />\r\n    <Import Include=\"System.Data\" />\r\n    <Import Include=\"System.Diagnostics\" />\r\n    <Import Include=\"System.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Module1.vb\" />\r\n    <Compile Include=\"My Project\\AssemblyInfo.vb\" />\r\n    <Compile Include=\"My Project\\Application.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Application.myapp</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"My Project\\Resources.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"My Project\\Settings.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Settings.settings</DependentUpon>\r\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"My Project\\Resources.resx\">\r\n      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.vb</LastGenOutput>\r\n      <CustomToolNamespace>My.Resources</CustomToolNamespace>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"My Project\\Application.myapp\">\r\n      <Generator>MyApplicationCodeGenerator</Generator>\r\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\r\n    </None>\r\n    <None Include=\"My Project\\Settings.settings\">\r\n      <Generator>SettingsSingleFileGenerator</Generator>\r\n      <CustomToolNamespace>My</CustomToolNamespace>\r\n      <LastGenOutput>Settings.Designer.vb</LastGenOutput>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Test.php\">\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Resources\\Help.txt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\..\\Core\\Core %28Orcas%29.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core %28Orcas%29</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.VisualBasic.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/CodeDOMTest.vbproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{97E448C9-A04D-462F-8B42-C892A10FC8E1}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <StartupObject>PHP.Core.CodeDom.Test.Test</StartupObject>\r\n    <RootNamespace>PHP.Core.CodeDom.Test</RootNamespace>\r\n    <AssemblyName>CodeDOMTest</AssemblyName>\r\n    <MyType>Console</MyType>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <DefineDebug>true</DefineDebug>\r\n    <DefineTrace>true</DefineTrace>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DocumentationFile>CodeDOMTest.xml</DocumentationFile>\r\n    <NoWarn>42020,42021,42022</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <DefineDebug>false</DefineDebug>\r\n    <DefineTrace>true</DefineTrace>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DocumentationFile>CodeDOMTest.xml</DocumentationFile>\r\n    <NoWarn>42020,42021,42022</NoWarn>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"CppCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"FSharp.Compiler.CodeDom, Version=1.9.2.9, Culture=neutral, PublicKeyToken=a19089b1c74d0809, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Program Files\\FSharp-1.9.2.9\\bin\\FSharp.Compiler.CodeDom.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"IronPython, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"Microsoft.JScript\" />\r\n    <Reference Include=\"Microsoft.VisualC.VSCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\r\n    <Reference Include=\"MsilCodeProvider, Version=0.0.0.0, Culture=neutral, PublicKeyToken=bea7318addcc7030, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\..\\..\\..\\..\\..\\..\\..\\Tools\\MSIL Code Provider\\MsilCodeProvider.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Deployment\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Windows.Forms\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"VJSharpCodeProvider\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Import Include=\"Microsoft.VisualBasic\" />\r\n    <Import Include=\"System\" />\r\n    <Import Include=\"System.Collections\" />\r\n    <Import Include=\"System.Collections.Generic\" />\r\n    <Import Include=\"System.Data\" />\r\n    <Import Include=\"System.Diagnostics\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Module1.vb\" />\r\n    <Compile Include=\"My Project\\AssemblyInfo.vb\" />\r\n    <Compile Include=\"My Project\\Application.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Application.myapp</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"My Project\\Resources.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"My Project\\Settings.Designer.vb\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Settings.settings</DependentUpon>\r\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"My Project\\Resources.resx\">\r\n      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.vb</LastGenOutput>\r\n      <CustomToolNamespace>My.Resources</CustomToolNamespace>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"My Project\\Application.myapp\">\r\n      <Generator>MyApplicationCodeGenerator</Generator>\r\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\r\n    </None>\r\n    <None Include=\"My Project\\Settings.settings\">\r\n      <Generator>SettingsSingleFileGenerator</Generator>\r\n      <CustomToolNamespace>My</CustomToolNamespace>\r\n      <LastGenOutput>Settings.Designer.vb</LastGenOutput>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\..\\Core\\Core.csproj\">\r\n      <Project>{9A2867A2-981C-4B5A-A1C5-EACCC80B5148}</Project>\r\n      <Name>Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Test.php\">\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Resources\\Help.txt\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.VisualBasic.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/Module1.vb",
    "content": "' This project is here in order to test PHP CodeDOM implementation.\r\n' This project will be deleted after implementation of PHP CodeDOM will be finished and tested.\r\n\r\nImports System.CodeDom, System.CodeDom.Compiler\r\nImports PHP.Core.CodeDom\r\n\r\nModule Test\r\n    ''' <summary>Path of parsed file</summary>\r\n    Private file$ = \"Test.php\"\r\n    ''' <summary>Parser</summary>\r\n    Private cu As CodeCompileUnit\r\n    ''' <summary>PHP provider</summary>\r\n    Private ProviderPHP As CodeDomProvider = New PhpCodeProvider\r\n\r\n    ''' <summary>Program needs the file 'Test.php' in its directory (if -i is not used)</summary>\r\n    ''' <remarks>\r\n    ''' Command line can be\r\n    ''' <list type=\"table\">\r\n    ''' <item><term>'?'</term><description>Ask for language</description></item>\r\n    ''' <item><term>'??'</term><description>Ask for languages in loop</description></item>\r\n    ''' <item><term>empty</term><description>PHP</description></item>\r\n    ''' <item><term>Language [Option]</term><description>Language name and optional option (options only for C++ and F#)</description></item>\r\n    ''' <item><term>'-?' or '-h' or '/?' or '/h'</term><description>help</description></item>\r\n    ''' </list>\r\n    ''' Use -? or see Resources\\Help.txt for more\r\n    ''' </remarks>\r\n    Sub Main()\r\n\r\n        Console.Title = \"Phalanger CodeDOM parser test\"\r\n        If My.Application.CommandLineArgs.Count > 0 AndAlso New List(Of String)(New String() {\"-h\", \"-?\", \"/h\", \"/?\"}).Contains(My.Application.CommandLineArgs(0)) Then\r\n            Console.WriteLine(My.Resources.Help)\r\n            If My.Application.CommandLineArgs.Count > 0 AndAlso ( _\r\n                    My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1) = \"wait\" OrElse _\r\n                    My.Application.CommandLineArgs(0).StartsWith(\"?\")) Then _\r\n                Console.ReadKey()\r\n            Return\r\n        End If\r\n        If My.Application.CommandLineArgs.Count >= 2 AndAlso My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 2).StartsWith(\"-i\") AndAlso My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1) = \"wait\" Then\r\n            file = My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 2).Substring(2)\r\n        ElseIf My.Application.CommandLineArgs.Count >= 1 AndAlso My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1).StartsWith(\"-i\") Then\r\n            file = My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1).Substring(2)\r\n        End If\r\n\r\n        If Not Parse() Then\r\n            If My.Application.CommandLineArgs.Count > 0 AndAlso ( _\r\n                    My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1) = \"wait\" OrElse _\r\n                    My.Application.CommandLineArgs(0).StartsWith(\"?\")) Then _\r\n                Console.ReadKey()\r\n            Environment.Exit(1)\r\n            End\r\n        End If\r\n\r\n        Do\r\n            'Reconstruct code back (optionally in different language)\r\n            Try\r\n                Dim tb As New Text.StringBuilder\r\n                Dim OldFore As ConsoleColor = Console.ForegroundColor\r\n                Dim OldBackground As ConsoleColor = Console.BackgroundColor\r\n                Try\r\n                    GetProvider().GenerateCodeFromCompileUnit(cu, New IO.StringWriter(tb), Nothing)\r\n                    Console.Write(tb.ToString)\r\n                Finally\r\n                    Console.ForegroundColor = OldFore\r\n                    Console.BackgroundColor = OldBackground\r\n                End Try\r\n            Catch ex As Exception\r\n                Console.WriteLine()\r\n                Console.WriteLine(\"There was an exception {0} when generating code: {1}\", ex.GetType.FullName, ex.Message)\r\n                Console.WriteLine(ex.StackTrace)\r\n                Console.WriteLine()\r\n            End Try\r\n            If My.Application.CommandLineArgs.Count > 0 AndAlso My.Application.CommandLineArgs(0) = \"??\" Then Console.WriteLine()\r\n        Loop While My.Application.CommandLineArgs.Count > 0 AndAlso My.Application.CommandLineArgs(0) = \"??\"\r\n        If My.Application.CommandLineArgs.Count > 0 AndAlso My.Application.CommandLineArgs(My.Application.CommandLineArgs.Count - 1) = \"wait\" Then Console.ReadKey()\r\n    End Sub\r\n    Private Function ParseAlternative() As Boolean\r\n        Static ParsedFile$\r\n        If ParsedFile Is Nothing Then ParsedFile = file\r\nAskForParser:\r\n        Console.WriteLine(\"Chose parser (py; otherwise php):\")\r\n        Dim ParserName As String = Console.ReadLine\r\n        Console.WriteLine(\"Type path to file to parse\")\r\n        Console.WriteLine(\"Or press enter to use {0}\", ParsedFile)\r\n        Console.WriteLine(\"Or type '?' to browse for file\")\r\n        Dim pFile As String = Console.ReadLine\r\n        If pFile = \"?\" Then\r\n            Dim dlg As New System.Windows.Forms.OpenFileDialog\r\n            dlg.FileName = ParsedFile\r\n            If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then GoTo AskForParser\r\n            ParsedFile = dlg.FileName\r\n        ElseIf pFile <> \"\" Then\r\n            ParsedFile = pFile\r\n        End If\r\n        Dim ParserProvider As CodeDomProvider\r\n        Select Case ParserName.ToLower\r\n            Case \"py\", \"python\", \"iron python\", \"ironpython\"\r\n                ParserProvider = New IronPython.CodeDom.PythonProvider\r\n            Case Else 'php\r\n                ParserProvider = ProviderPHP\r\n        End Select\r\n        Console.WriteLine(\"Parsing...\")\r\n        Try\r\n            Using r As IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(ParsedFile)\r\n                cu = ParserProvider.Parse(r)\r\n            End Using\r\n            Console.WriteLine(\" done\")\r\n        Catch ex As Exception\r\n            Console.WriteLine(\"Error {0} while parsing {1}\", ex.GetType.Name, file)\r\n            Console.WriteLine(ex.Message)\r\n            'Console.WriteLine(ex.StackTrace)\r\n            Return False\r\n        End Try\r\n        Return True\r\n    End Function\r\n    Private Function Parse() As Boolean\r\n        Console.Write(\"Parsing...\")\r\n        Try\r\n            Using r As IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(file)\r\n                cu = ProviderPHP.Parse(r)\r\n            End Using\r\n            Console.WriteLine(\" done\")\r\n        Catch ex As Exception\r\n            Console.WriteLine(\"Error {0} while parsing {1}\", ex.GetType.Name, file)\r\n            Console.WriteLine(ex.Message)\r\n            'Console.WriteLine(ex.StackTrace)\r\n            Return False\r\n        End Try\r\n        Return True\r\n    End Function\r\n    ''' <summary>Return <see cref=\"CodeDomProvider\"/> depending on command line</summary>\r\n    Private Function GetProvider() As CodeDomProvider\r\n        Dim C1$ = \"//\", C2$ = \"\"\r\n        GetProvider = Nothing\r\n        Dim Provider As Providers\r\n        Try\r\n            If My.Application.CommandLineArgs.Count = 0 Then\r\n                Provider = Providers.Pahalanger\r\n                Return New PhpCodeProvider\r\n            Else\r\n                Dim Arguments As List(Of String)\r\n                If My.Application.CommandLineArgs(0).StartsWith(\"?\") Then\r\nChose:              Console.WriteLine(\"Type language (vb, c#, c++, js, j#, msil, f#, py; otherwise php; empty for immediate exit)\")\r\n                    Console.WriteLine(\"Hold Shift to reload and reparse default input; CapsLock to change parser and input.\")\r\n                    Arguments = New List(Of String)\r\n                    Arguments.Add(Console.ReadLine())\r\n                    Dim Shift As Boolean = My.Computer.Keyboard.ShiftKeyDown\r\n                    Dim Caps As Boolean = My.Computer.Keyboard.CapsLock\r\n                    If Caps Then\r\n                        If Not ParseAlternative() Then GoTo Chose\r\n                    ElseIf Shift Then\r\n                        If Not Parse() Then GoTo Chose\r\n                    End If\r\n                    If Arguments(0) = \"\" Then Environment.Exit(0)\r\n                    Select Case Arguments(0)\r\n                        Case \"c++\", \"cpp\", \"vc\", \"vc++\", \"vcpp\", \"c\"\r\n                            Console.WriteLine(\"Type additional langaage features\")\r\n                            Console.WriteLine(vbTab & \"7\" & vbTab & GetType(Microsoft.VisualC.CppCodeProvider7).FullName)\r\n                            Console.WriteLine(vbTab & \"vs\" & vbTab & GetType(Microsoft.VisualC.VSCodeProvider).FullName)\r\n                            Console.WriteLine(vbTab & \"<other>\" & vbTab & GetType(Microsoft.VisualC.CppCodeProvider).FullName)\r\n                            Arguments.Add(Console.ReadLine())\r\n                        Case \"f#\", \"fs\"\r\n                            Console.WriteLine(\"Type additional language features\")\r\n                            Console.WriteLine(vbTab & \"asp\" & vbTab & GetType(Microsoft.FSharp.Compiler.CodeDom.FSharpAspNetCodeProvider).FullName)\r\n                            Console.WriteLine(vbTab & \"<other>\" & vbTab & GetType(Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider).FullName)\r\n                            Arguments.Add(Console.ReadLine())\r\n                    End Select\r\n                    Else\r\n                        Arguments = New List(Of String)(My.Application.CommandLineArgs)\r\n                    End If\r\n                    Select Case Arguments(0).ToLower\r\n                        Case \"vb\", \"visual basic\", \"basic\"\r\n                            'Standard part of .NET\r\n                            C1 = \"'\" : C2 = \"\"\r\n                            Provider = Providers.VisualBasic\r\n                            Return New Microsoft.VisualBasic.VBCodeProvider\r\n                        Case \"cs\", \"c#\"\r\n                            'Standard part of .NET\r\n                            Provider = Providers.CSharp\r\n                            Return New Microsoft.CSharp.CSharpCodeProvider\r\n                        Case \"py\", \"python\", \"ironpython\", \"iron python\"\r\n                            'Part of VS SDK\r\n                            C1 = \"#\" : C2 = \"\"\r\n                            Provider = Providers.IronPython\r\n                            Return New IronPython.CodeDom.PythonProvider\r\n                        Case \"c++\", \"cpp\", \"vc\", \"vc++\", \"vcpp\", \"c\"\r\n                            'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\PublicAssemblies\\Microsoft.VisualC.VSCodeProvider.dll\r\n                            'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\PublicAssemblies\\CppCodeProvider.dll\r\n                            Provider = Providers.CPP_CLI\r\n                            If Arguments.Count = 1 Then\r\n                                Return New Microsoft.VisualC.CppCodeProvider7\r\n                            Else\r\n                                Select Case Arguments(1).ToLower\r\n                                    Case \"7\" : Return New Microsoft.VisualC.CppCodeProvider7\r\n                                    Case \"vs\" : Return New Microsoft.VisualC.VSCodeProvider\r\n                                    Case Else : Return New Microsoft.VisualC.CppCodeProvider\r\n                                End Select\r\n                            End If\r\n                        Case \"jscript\", \"javascript\", \"java script\", \"js\"\r\n                            'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\Microsoft.JScript.dll\r\n                            Provider = Providers.JavaScript\r\n                            Return New Microsoft.JScript.JScriptCodeProvider\r\n                        Case \"j#\", \"jsl\"\r\n                            'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\VJSharpCodeProvider.dll\r\n                            Provider = Providers.JSharp\r\n                            Return New Microsoft.VJSharp.VJSharpCodeProvider\r\n                        Case \"msil\", \"cil\"\r\n                            'Can be downloaded from http://www.microsoft.com/downloads/details.aspx?familyid=7e979ed3-416b-43b6-993b-308a160831b6&displaylang=en\r\n                            Provider = Providers.MSIL\r\n                            Return New Microsoft.Msil.MsilCodeProvider\r\n                        Case \"f#\", \"fs\"\r\n                            'Can be downloaded from http://research.microsoft.com/fsharp\r\n                            C1 = \"(*\" : C2 = \"*)\"\r\n                            Provider = Providers.FSharp\r\n                            If Arguments.Count >= 2 AndAlso Arguments(1) = \"asp\" Then Return New Microsoft.FSharp.Compiler.CodeDom.FSharpAspNetCodeProvider\r\n                            Return New Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider\r\n                        Case Else\r\n                            Provider = Providers.Pahalanger\r\n                            Return New PhpCodeProvider\r\n                    End Select\r\n                End If\r\n        Finally\r\n            If My.Application.CommandLineArgs.Count > 0 AndAlso My.Application.CommandLineArgs(0) = \"??\" Then Console.WriteLine()\r\n            SetConsoleColor(Provider)\r\n            Console.WriteLine(\"{0}Using {1}{2}\", C1, CObj(GetProvider).GetType.FullName, C2)\r\n        End Try\r\n    End Function\r\n    ''' <summary>Changes color of console by langiage</summary>\r\n    ''' <param name=\"Provider\">Language</param>\r\n    Private Sub SetConsoleColor(ByVal Provider As Providers)\r\n        Console.BackgroundColor = ConsoleColor.White\r\n        Select Case Provider\r\n            Case Providers.CPP_CLI\r\n                Console.ForegroundColor = ConsoleColor.DarkMagenta\r\n                Console.Title = \"C++/CLI\"\r\n            Case Providers.CSharp\r\n                Console.ForegroundColor = ConsoleColor.DarkGreen\r\n                Console.Title = \"C#\"\r\n            Case Providers.FSharp\r\n                Console.ForegroundColor = ConsoleColor.DarkRed\r\n            Case Providers.IronPython\r\n                Console.Title = \"Iron Python\"\r\n                Console.ForegroundColor = ConsoleColor.DarkGray\r\n            Case Providers.JavaScript\r\n                Console.Title = \"Java Script\"\r\n                Console.ForegroundColor = ConsoleColor.DarkBlue\r\n            Case Providers.JSharp\r\n                Console.Title = \"J#\"\r\n                Console.ForegroundColor = ConsoleColor.Red\r\n            Case Providers.MSIL\r\n                Console.Title = \"MSIL (CIL)\"\r\n                Console.ForegroundColor = ConsoleColor.Black\r\n            Case Providers.Pahalanger\r\n                Console.Title = \"Phalanger\"\r\n                Console.ForegroundColor = ConsoleColor.DarkYellow\r\n            Case Providers.VisualBasic\r\n                Console.Title = \"Visual Basic\"\r\n                Console.ForegroundColor = ConsoleColor.Blue\r\n        End Select\r\n    End Sub\r\n    ''' <summary>Recognized language</summary>\r\n    Private Enum Providers\r\n        Pahalanger\r\n        VisualBasic\r\n        CSharp\r\n        CPP_CLI\r\n        JavaScript\r\n        IronPython\r\n        MSIL\r\n        FSharp\r\n        JSharp\r\n    End Enum\r\nEnd Module\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Application.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\r\n' <auto-generated>\r\n'     This code was generated by a tool.\r\n'     Runtime Version:2.0.50727.1433\r\n'\r\n'     Changes to this file may cause incorrect behavior and will be lost if\r\n'     the code is regenerated.\r\n' </auto-generated>\r\n'------------------------------------------------------------------------------\r\n\r\nOption Strict On\r\nOption Explicit On\r\n\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Application.myapp",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<MyApplicationData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <MySubMain>false</MySubMain>\r\n  <SingleInstance>false</SingleInstance>\r\n  <ShutdownMode>0</ShutdownMode>\r\n  <EnableVisualStyles>true</EnableVisualStyles>\r\n  <AuthenticationMode>0</AuthenticationMode>\r\n  <ApplicationType>2</ApplicationType>\r\n  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>\r\n</MyApplicationData>\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/AssemblyInfo.vb",
    "content": "﻿Imports System\r\nImports System.Reflection\r\nImports System.Runtime.InteropServices\r\n\r\n' General Information about an assembly is controlled through the following \r\n' set of attributes. Change these attribute values to modify the information\r\n' associated with an assembly.\r\n\r\n' Review the values of the assembly attributes\r\n\r\n<Assembly: AssemblyTitle(\"CodeDOMTest\")> \r\n<Assembly: AssemblyDescription(\"\")> \r\n<Assembly: AssemblyCompany(\"\")> \r\n<Assembly: AssemblyProduct(\"CodeDOMTest\")> \r\n<Assembly: AssemblyCopyright(\"Copyright ©  2007\")> \r\n<Assembly: AssemblyTrademark(\"\")> \r\n\r\n<Assembly: ComVisible(False)>\r\n\r\n'The following GUID is for the ID of the typelib if this project is exposed to COM\r\n<Assembly: Guid(\"109fe80b-93b3-42cf-af5b-788238f431a9\")> \r\n\r\n' Version information for an assembly consists of the following four values:\r\n'\r\n'      Major Version\r\n'      Minor Version \r\n'      Build Number\r\n'      Revision\r\n'\r\n' You can specify all the values or you can default the Build and Revision Numbers \r\n' by using the '*' as shown below:\r\n' <Assembly: AssemblyVersion(\"1.0.*\")> \r\n\r\n<Assembly: AssemblyVersion(\"1.0.0.0\")> \r\n<Assembly: AssemblyFileVersion(\"1.0.0.0\")> \r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Resources.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\r\n' <auto-generated>\r\n'     This code was generated by a tool.\r\n'     Runtime Version:2.0.50727.1433\r\n'\r\n'     Changes to this file may cause incorrect behavior and will be lost if\r\n'     the code is regenerated.\r\n' </auto-generated>\r\n'------------------------------------------------------------------------------\r\n\r\nOption Strict On\r\nOption Explicit On\r\n\r\nImports System\r\n\r\nNamespace My.Resources\r\n    \r\n    'This class was auto-generated by the StronglyTypedResourceBuilder\r\n    'class via a tool like ResGen or Visual Studio.\r\n    'To add or remove a member, edit your .ResX file then rerun ResGen\r\n    'with the /str option, or rebuild your VS project.\r\n    '''<summary>\r\n    '''  A strongly-typed resource class, for looking up localized strings, etc.\r\n    '''</summary>\r\n    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"2.0.0.0\"),  _\r\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\r\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\r\n     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _\r\n    Friend Module Resources\r\n        \r\n        Private resourceMan As Global.System.Resources.ResourceManager\r\n        \r\n        Private resourceCulture As Global.System.Globalization.CultureInfo\r\n        \r\n        '''<summary>\r\n        '''  Returns the cached ResourceManager instance used by this class.\r\n        '''</summary>\r\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\r\n        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager\r\n            Get\r\n                If Object.ReferenceEquals(resourceMan, Nothing) Then\r\n                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager(\"PHP.Core.CodeDom.Test.Resources\", GetType(Resources).Assembly)\r\n                    resourceMan = temp\r\n                End If\r\n                Return resourceMan\r\n            End Get\r\n        End Property\r\n        \r\n        '''<summary>\r\n        '''  Overrides the current thread's CurrentUICulture property for all\r\n        '''  resource lookups using this strongly typed resource class.\r\n        '''</summary>\r\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\r\n        Friend Property Culture() As Global.System.Globalization.CultureInfo\r\n            Get\r\n                Return resourceCulture\r\n            End Get\r\n            Set\r\n                resourceCulture = value\r\n            End Set\r\n        End Property\r\n        \r\n        '''<summary>\r\n        '''  Looks up a localized string similar to PHP code dom test utility\r\n        '''© Đonny 2007\r\n        '''Reads PHP source file, parses it and rewrites output\r\n        '''PHP source is read from file &apos;Test.php&apos; in working directory\r\n        '''\r\n        '''Command line options:\r\n        '''[-i] [&apos;wait&apos;] ... Output in PHP\r\n        '''&apos;?&apos; [-i] [&apos;wait&apos;] .................... Asks for language of output\r\n        '''&apos;??&apos; [-i] [&apos;wait&apos;] ................... Asks for language of output in loop\r\n        '''langauge [option] [-i] [&apos;wait&apos;] ...... Showns output in given languages with option\r\n        '''&apos;-h&apos;,&apos;-?&apos;,&apos;/h&apos;,&apos;/?&apos; [&apos;wait&apos;] ............. Shows this help\r\n        '''If last  [rest of string was truncated]&quot;;.\r\n        '''</summary>\r\n        Friend ReadOnly Property Help() As String\r\n            Get\r\n                Return ResourceManager.GetString(\"Help\", resourceCulture)\r\n            End Get\r\n        End Property\r\n    End Module\r\nEnd Namespace\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"Help\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>..\\Resources\\Help.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1250</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Settings.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\r\n' <auto-generated>\r\n'     This code was generated by a tool.\r\n'     Runtime Version:2.0.50727.1433\r\n'\r\n'     Changes to this file may cause incorrect behavior and will be lost if\r\n'     the code is regenerated.\r\n' </auto-generated>\r\n'------------------------------------------------------------------------------\r\n\r\nOption Strict On\r\nOption Explicit On\r\n\r\n\r\nNamespace My\r\n    \r\n    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\r\n     Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"9.0.0.0\"),  _\r\n     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\r\n    Partial Friend NotInheritable Class MySettings\r\n        Inherits Global.System.Configuration.ApplicationSettingsBase\r\n        \r\n        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings)\r\n        \r\n#Region \"My.Settings Auto-Save Functionality\"\r\n#If _MyType = \"WindowsForms\" Then\r\n    Private Shared addedHandler As Boolean\r\n\r\n    Private Shared addedHandlerLockObject As New Object\r\n\r\n    <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\r\n    Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)\r\n        If My.Application.SaveMySettingsOnExit Then\r\n            My.Settings.Save()\r\n        End If\r\n    End Sub\r\n#End If\r\n#End Region\r\n        \r\n        Public Shared ReadOnly Property [Default]() As MySettings\r\n            Get\r\n                \r\n#If _MyType = \"WindowsForms\" Then\r\n               If Not addedHandler Then\r\n                    SyncLock addedHandlerLockObject\r\n                        If Not addedHandler Then\r\n                            AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings\r\n                            addedHandler = True\r\n                        End If\r\n                    End SyncLock\r\n                End If\r\n#End If\r\n                Return defaultInstance\r\n            End Get\r\n        End Property\r\n    End Class\r\nEnd Namespace\r\n\r\nNamespace My\r\n    \r\n    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _\r\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\r\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _\r\n    Friend Module MySettingsProperty\r\n        \r\n        <Global.System.ComponentModel.Design.HelpKeywordAttribute(\"My.Settings\")>  _\r\n        Friend ReadOnly Property Settings() As Global.PHP.Core.CodeDom.Test.My.MySettings\r\n            Get\r\n                Return Global.PHP.Core.CodeDom.Test.My.MySettings.Default\r\n            End Get\r\n        End Property\r\n    End Module\r\nEnd Namespace\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/My Project/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\r\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" UseMySettingsClassName=\"true\">\r\n  <Profiles>\r\n    <Profile Name=\"(Default)\" />\r\n  </Profiles>\r\n  <Settings />\r\n</SettingsFile>\r\n"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/Resources/Help.txt",
    "content": "PHP code dom test utility\r\n onny 2007\r\nReads PHP source file, parses it and rewrites output\r\nPHP source is read from file 'Test.php' in working directory\r\n\r\nCommand line options:\r\n[-i] ['wait'] ... Output in PHP\r\n'?' [-i] ['wait'] .................... Asks for language of output\r\n'??' [-i] ['wait'] ................... Asks for language of output in loop\r\nlangauge [option] [-i] ['wait'] ...... Showns output in given languages with option\r\n'-h','-?','/h','/?' ['wait'] ............. Shows this help\r\nIf last command line argument is 'wait' than application waits key to be pressed before exit.\r\nLast (or pre-last if 'wait' used) argument can be '-i' immediatelly followed by path to file to load (instead of Test.php).\r\n\r\nLanguages and options (case insensitive):\r\n(Options are different providers for the same language)\r\n\r\nVisual Basic .... vb, visual basic, basic\r\nC# .............. cs, c#\r\nIronPython ...... py, python, ironpython, iron python\r\nC++/CLI ......... c++, cpp, vc, vc++, vcpp, c\r\n        7 ....... Microsoft.VisualC.CppCodeProvider7\r\n        vs ...... Microsoft.VisualC.VSCodeProvider\r\n        <other> . Microsoft.VisualC.CppCodeProvider\r\nJavaScript ..... jscript, javascript, java script, js\r\nJ# ............. j#, jsl\r\nCIL assembler ... msil, cil\r\nF# .............. f#, fs\r\n        asp ..... Microsoft.FSharp.Compiler.CodeDom.FSharpAspNetCodeProvider\r\n        <other> . Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider\r\nPhalanger ....... <other>"
  },
  {
    "path": "Testing/CodeDOM/CodeDOMTest/Test.php",
    "content": "<?\r\n    import namespace System:::Windows:::Forms;\r\n    import namespace System:::ComponentModel;\r\n    import namespace System:::Drawing;\r\n    import namespace WindowsApplication1;\r\n    \r\n    namespace WindowsApplication1 {\r\n        \r\n        [Export]\r\n        class Form1 extends System:::Windows:::Forms:::Form {\r\n            \r\n            private $button1;\r\n            \r\n            public function __construct()\r\n                : parent() {\r\n                $this->InitializeComponent();\r\n            }\r\n            \r\n            public function InitializeComponent() {\r\n                $this->button1 = new System:::Windows:::Forms:::Button();\r\n                $this->SuspendLayout();\r\n                // \r\n                // button1\r\n                // \r\n                $this->button1->Location = new System:::Drawing:::Point(212, 62);\r\n                $this->button1->Name = \"button1\";\r\n                $this->button1->Size = new System:::Drawing:::Size(75, 23);\r\n                $this->button1->TabIndex = 0;\r\n                $this->button1->Text = \"button1\";\r\n                $this->button1->UseVisualStyleBackColor = true;\r\n                // \r\n                // Form1\r\n                // \r\n                $this->ClientSize = new System:::Drawing:::Size(292, 273);\r\n                $this->Controls->Add($this->button1);\r\n                $this->Name = \"Form1\";\r\n                $this->Text = \"Form1\";\r\n                $this->ResumeLayout(false);\r\n            }\r\n        }\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Testing/PHPT/web/README..TXT",
    "content": "- Add this directory as an application into your IIS\r\n- Allow IIS worker process read/write permissions\r\n- Disable rapid fail protection in advanced settings of App Pool"
  },
  {
    "path": "Testing/PHPT/web/copy tests.bat",
    "content": "@echo off\r\n\r\nIF [%1]==[] GOTO NOARG\r\n\r\nMD %0\\..\\tests\r\nCD %0\\..\\tests\r\n\r\nxcopy \"%1\\tests\" \"tests\\\" /S /Y\r\nxcopy \"%1\\zend\\tests\" \"zend\\tests\\\" /S /Y\r\n\r\nFOR /F %%G IN ('\"dir %1\\ext\\ /A:D /B\"') DO XCOPY \"%1\\ext\\%%G\\tests\" \"ext\\%%G\\tests\\\" /S /Y\r\n\r\npause\r\nEXIT 1\r\n\r\n:NOARG\r\nECHO ERROR: Please drag and drop whole PHP source directory onto this BAT file.\r\nPAUSE\r\nEXIT -1"
  },
  {
    "path": "Testing/PHPT/web/index.php",
    "content": "<?\r\n    \r\n    define('FILE_BINARY',0);\r\n\r\n    function &list_test_dirs()\r\n    {\r\n        // build the array with directories (can contain subdirectories)\r\n        $tests_dir = array('tests/tests', 'tests/zend');    // default test directories\r\n\r\n        // add tests of loaded extensions into the list\r\n        foreach (get_loaded_extensions() as $ext)\r\n            $tests_dir[] = \"tests/ext/$ext\";\r\n\r\n        return $tests_dir;\r\n    }\r\n\r\n    function &list_test_files()\r\n    {\r\n        $test_files = array();\r\n        $filter = @$_GET['filter'];\r\n\r\n        // build list of (relative) directories containing .phpt files\r\n        $tests_dir = list_test_dirs();\r\n\r\n        for($i = 0; $i < count($tests_dir); ++$i)\r\n        {\r\n            $dir = $tests_dir[$i];\r\n            if (!is_dir($dir)) continue;\r\n\r\n\t        $o = opendir($dir) or die(\"cannot open directory: $dir\");\r\n\r\n\t        while (($name = readdir($o)) !== false)\r\n            {\r\n                // We're only interested in *.phpt files.\r\n\t\t        if (substr($name, -5) == '.phpt')\r\n                {\r\n                    $fullpath = \"{$dir}/{$name}\";\r\n                    if (!$filter || strpos($fullpath, $filter) !== FALSE)\r\n\t\t\t            $test_files[] = \"{$dir}/{$name}\";\r\n                }\r\n\r\n                // otherwise recursivelly process valid subdirs\r\n                else if ( !in_array($name, array('.', '..', 'CVS', '.svn')) && is_dir(\"{$dir}/{$name}\"))\r\n                    $tests_dir[] = \"{$dir}/{$name}\";\r\n\t        }\r\n\r\n\t        closedir($o);\r\n        }\r\n\r\n        return $test_files;\r\n    }\r\n\r\n    function emit_js_array(&$arr)\r\n    {\r\n        $first = true;\r\n        echo '[';\r\n        foreach ($arr as $item)\r\n        {\r\n            if ($first)$first = false;\r\n            else echo ',';\r\n\r\n            echo \"'$item'\";\r\n        }\r\n        echo ']';\r\n    }\r\n\r\n    // list all tests, and run them using AJAX\r\n    function run_all_tests()\r\n    {\r\n        // list .phpt files in specified directories\r\n        $test_files = &list_test_files();\r\n\r\n        // generate HTML that requests .phpt tests asynchronously and in parallel\r\n        ?>\r\n        <ul id='list'>\r\n        </ul>\r\n        <script type=\"text/javascript\">\r\n            files = <? emit_js_array( &$test_files ); ?>;\r\n        </script>\t\t\r\n        <?\r\n    }\r\n\r\n    if (isset($_GET['test']))\r\n    {   //\r\n        // run specified test\r\n        //\r\n        run_test($_GET['test'], $_GET['location']);\r\n    }\r\n    else\r\n    {\r\n    ?>\r\n    <html><head>\r\n        <title>PHPT Phalanger Tester</title>\r\n        <script type=\"text/javascript\" src=\"jquery-1.6.2.min.js\"></script>\r\n        <script type=\"text/javascript\" src=\"tests.js\"></script>\r\n        <style>\r\n            .state{display:none;}\r\n            .error{color:#f0f;}\r\n            .pass{color:#0f0;}\r\n            .fail{color:#f00;}\r\n            .skip{color:#888;}\r\n        </style>\r\n    </head><body>\r\n    <?\r\n        run_all_tests();\r\n    ?>\r\n    </body></html><?\r\n    }\r\n    \r\n\r\n//\r\n//  Run an individual test case.\r\n//\r\n\r\n// parse test file, return array of sections\r\nfunction &parse_file($file)\r\n{\r\n    if (!is_file($file))\r\n        error(\"$file does not exist\");\r\n\r\n    // parse the test $file\r\n\r\n    // Load the sections of the test file.\r\n\t$section_text = array('TEST' => '');\r\n\t$fp = fopen($file, \"rb\") or error(\"Cannot open test file: $file\");\r\n\r\n\tif (!feof($fp)) {\r\n\t\t$line = fgets($fp);\r\n\r\n\t\tif ($line === false) {\r\n\t\t\terror(\"cannot read test '$file'\");\r\n\t\t}\r\n\t} else {\r\n\t\terror(\"empty test '$file'\");\r\n\t}\r\n\tif (strncmp('--TEST--', $line, 8)) {\r\n\t\terror(\"tests '$file' must start with --TEST--\");\r\n\t}\r\n\r\n\t$section = 'TEST';\r\n\t$secfile = false;\r\n\t$secdone = false;\r\n\r\n\twhile (!feof($fp)) {\r\n\t\t$line = fgets($fp);\r\n\r\n\t\tif ($line === false)\r\n\t\t\tbreak;\r\n\r\n\t\t// Match the beginning of a section.\r\n\t\tif (preg_match(b'/^--([_A-Z]+)--/', $line, $r)) {\r\n\t\t\t$section = $r[1];\r\n\t\t\tsettype($section, 'string');\r\n\r\n\t\t\tif (isset($section_text[$section]))\r\n\t\t\t\terror(\"duplicated $section section\");\r\n\t\t\t\r\n\t\t\t$section_text[$section] = binary_section($section) ? b'' : '';\r\n\t\t\t$secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL';\r\n\t\t\t$secdone = false;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!binary_section($section)) {\r\n\t\t\t$line = (binary)$line;\r\n\t\t\tif ($line == false) {\r\n\t\t\t\terror(\"cannot read test '$file'\");\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add to the section text.\r\n\t\tif (!$secdone) {\r\n\t\t    if ($section == 'EXPECTF')\r\n\t\t    {\r\n\t\t        // modify Phalangers different error message format, \", column %d\" at the end.\r\n\t\t        if (StartsWith($line, 'Warning:') || StartsWith($line,'Notice:') || StartsWith($line,'Error:'))\r\n\t\t            $line = substr($line,0,7) . \"%s\\n\"; //', column %d.';\r\n\t\t    }\r\n\t\t\t$section_text[$section] .= $line;\r\n\t\t}\r\n\r\n\t\t// End of actual test?\r\n\t\tif ($secfile && preg_match(b'/^===DONE===\\s*$/', $line)) {\r\n\t\t\t$secdone = true;\r\n\t\t}\r\n\t}\r\n\r\n\t// the redirect section allows a set of tests to be reused outside of\r\n\t// a given test dir\r\n\tif (@count($section_text['REDIRECTTEST']) == 1) {\r\n\r\n\t\t//if ($IN_REDIRECT) {\r\n\t\t\t//$borked = true;\r\n\t\t\t//$bork_info = \"Can't redirect a test from within a redirected test\";\r\n\t\t//} else {\r\n\t\t\t//$borked = false;\r\n\t\t//}\r\n\t} else {\r\n\r\n\t\tif (@count($section_text['FILE']) + @count($section_text['FILEEOF']) + @count($section_text['FILE_EXTERNAL']) != 1) {\r\n\t\t\terror(\"missing section --FILE-- in '$file'\");\r\n\t\t}\r\n\r\n\t\tif (@count($section_text['FILEEOF']) == 1) {\r\n\t\t\t$section_text['FILE'] = preg_replace(b\"/[\\r\\n]+$/\", b'', $section_text['FILEEOF']);\r\n\t\t\tunset($section_text['FILEEOF']);\r\n\t\t}\r\n\r\n\t\tif (@count($section_text['FILE_EXTERNAL']) == 1) {\r\n\t\t\t// don't allow tests to retrieve files from anywhere but this subdirectory\r\n\t\t\t$section_text['FILE_EXTERNAL'] = dirname($file) . '/' . trim(str_replace('..', '', $section_text['FILE_EXTERNAL']));\r\n\r\n\t\t\tif (file_exists($section_text['FILE_EXTERNAL'])) {\r\n\t\t\t\t$section_text['FILE'] = _file_get_contents($section_text['FILE_EXTERNAL'], FILE_BINARY, null, &$dummyheaders);\r\n\t\t\t\tunset($section_text['FILE_EXTERNAL']);\r\n\t\t\t} else {\r\n\t\t\t\terror(\"could not load --FILE_EXTERNAL-- \" . dirname($file) . '/' . trim($section_text['FILE_EXTERNAL']) . \" in test '$file'\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ((@count($section_text['EXPECT']) + @count($section_text['EXPECTF']) + @count($section_text['EXPECTREGEX'])) != 1) {\r\n\t\t\terror(\"missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX-- in '$file'\");\r\n\t\t}\r\n\t}\r\n\tfclose($fp);\r\n\r\n    // return sections\r\n    return $section_text;\r\n}\r\n\r\nfunction _file_get_contents($path, $flags, $context, &$headers)\r\n{\r\n\t$result = file_get_contents($path, $flags, $context);\r\n\t$headers = @$http_response_header;\r\n\t\r\n\treturn $result;\r\n}\r\n\r\nfunction try_skip($file, $www, &$section_text)\r\n{\r\n    if (array_key_exists('SKIPIF', $section_text)) {\r\n\r\n        $skiphtml = \"<span class='skip'>SKIP</span>\";\r\n\r\n        $info = '';\r\n\t    $warn = false;\r\n\r\n\t\tif (trim($section_text['SKIPIF'])) {\r\n            $temp_skipif = replace_extension($file,'skipif.php');\r\n\t\t\tsave_text($temp_skipif, $section_text['SKIPIF']);\r\n\t\t\t\r\n            // Create a stream\r\n            $output = _file_get_contents( $www . $temp_skipif, false, null, &$dummyheaders );\r\n\t\t\t\r\n            if (!strncasecmp('skip', ltrim($output), 4)) {\r\n\r\n\t\t\t\tif (preg_match('/^\\s*skip\\s*(.+)\\s*/i', $output, $m)) {\r\n\t\t\t\t\tshow_result($skiphtml, $file, \", reason: $m[1]\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tshow_result($skiphtml, $file, '');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!strncasecmp('info', ltrim($output), 4)) {\r\n\t\t\t\tif (preg_match('/^\\s*info\\s*(.+)\\s*/i', $output, $m)) {\r\n\t\t\t\t\t$info = \" (info: $m[1])\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!strncasecmp('warn', ltrim($output), 4)) {\r\n\t\t\t\tif (preg_match('/^\\s*warn\\s*(.+)\\s*/i', $output, $m)) {\r\n\t\t\t\t\t$warn = true; /* only if there is a reason */\r\n\t\t\t\t\t$info = \" (warn: $m[1])\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction try_redirect($file, $www, &$section_text)\r\n{\r\n    if (@count($section_text['REDIRECTTEST']) == 1) {\r\n\t\terror(\"Redirect not supported yet in '$file'\");\r\n\t}\r\n}\r\n\r\nfunction try_clean($file, $www, &$section_text)\r\n{\r\n    if (array_key_exists('CLEAN', $section_text)) {\r\n\r\n\t\tif (trim($section_text['CLEAN'])) {\r\n            $cleanfile = replace_extension($file,'clean.php');\r\n\t\t\tsave_text($cleanfile, trim($section_text['CLEAN']));\r\n\r\n\t\t\t$clean_params = array();\r\n\t\t\t_file_get_contents($www . $cleanfile, false, null, &$dummyheaders);\r\n\t\t\t\r\n            @unlink($cleanfile);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction get_ini_code($ini_settings)\r\n{\r\n    if (count($ini_settings) == 0) return '';\r\n\r\n    $code = '';\r\n    foreach ($ini_settings as $key => $value)\r\n    {\r\n        $code .= \"@ini_set('$key', '$value');\";\r\n    }\r\n\r\n    return \"<?php $code ?>\";\r\n}\r\n\r\nfunction replace_extension($filename, $new_extension) {\r\n    return preg_replace('/\\..+$/', '.' . $new_extension, $filename);\r\n}\r\n\r\nfunction run_test($file,$www)\r\n{\r\n    // parse the test '$file'\r\n    $section_text = parse_file($file);\r\n\r\n    // setup environment\r\n    if (EndsWith( $www, '.php')) $www = dirname($www);\r\n    if (!EndsWith( $www, '/')) $www .= '/';\r\n    $phpfile = replace_extension($file,'php');\r\n    $tested = trim($section_text['TEST']);\r\n\r\n    $env = array('HTTP_CONTENT_ENCODING'=>'');\r\n\t$opts = array(\r\n\t    'http'=>array(\r\n            'method'=> \"GET\",\r\n            'header'=> ''\r\n        ));\r\n\r\n\tif (!empty($section_text['ENV'])) {\r\n\r\n\t\tforeach(explode(\"\\n\", trim($section_text['ENV'])) as $e) {\r\n\t\t\t$e = explode('=', trim($e), 2);\r\n\r\n\t\t\tif (!empty($e[0]) && isset($e[1])) {\r\n\t\t\t\t$env[$e[0]] = $e[1];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n    // Default ini settings\r\n\t$ini_settings = array(); // put additional INI settings here\r\n    // Any special ini settings, these may overwrite the test defaults...\r\n\tif (array_key_exists('INI', $section_text)) {\r\n\t\tif (strpos($section_text['INI'], '{PWD}') !== false) {\r\n\t\t\t$section_text['INI'] = str_replace('{PWD}', dirname(realpath($file)), $section_text['INI']);\r\n\t\t}\r\n\t\tsettings2array(preg_split( \"/[\\n\\r]+/\", $section_text['INI']), $ini_settings);\r\n\t}\r\n\r\n    // prepend custom ini settings\r\n    if (count($ini_settings) > 0)  $section_text['FILE'] = get_ini_code($ini_settings) .  $section_text['FILE'];\r\n\r\n    // skip this test ?\r\n    try_skip($file, $www, $section_text);\r\n    \r\n    // redirect test ?\r\n    try_redirect($file, $www, $section_text);\r\n\r\n    // request .php script\r\n    save_text($phpfile, $section_text['FILE']);\r\n\r\n\tif (array_key_exists('GET', $section_text))\r\n\t\t$query_string = trim($section_text['GET']);\r\n\telse\r\n\t\t$query_string = '';\r\n\t\r\n\t$env['QUERY_STRING']    = $query_string;\r\n\t\r\n\tif (array_key_exists('COOKIE', $section_text)) {\r\n\t\t$env['HTTP_COOKIE'] = trim($section_text['COOKIE']);\r\n\t\t$opts[\"http\"][\"header\"] .= \"Cookie: \" . $env['HTTP_COOKIE'] . \"\\r\\n\";\r\n\r\n\t} else {\r\n\t\t$env['HTTP_COOKIE'] = '';\r\n\t}\r\n\r\n\t$args = isset($section_text['ARGS']) ? ' -- ' . $section_text['ARGS'] : '';\r\n\r\n\tif (array_key_exists('POST_RAW', $section_text) && !empty($section_text['POST_RAW'])) {\r\n\r\n\t\t$post = trim($section_text['POST_RAW']);\r\n\t\t$raw_lines = explode(\"\\n\", $post);\r\n\r\n\t\t$request = '';\r\n\t\t$started = false;\r\n\r\n\t\tforeach ($raw_lines as $line) {\r\n\r\n\t\t\tif (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) {\r\n\t\t\t\t$env['CONTENT_TYPE'] = trim(str_replace(\"\\r\", '', $res[1]));\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif ($started) {\r\n\t\t\t\t$request .= \"\\n\";\r\n\t\t\t}\r\n\r\n\t\t\t$started = true;\r\n\t\t\t$request .= $line;\r\n\t\t}\r\n\r\n\t\t$env['CONTENT_LENGTH'] = strlen($request);\r\n\t\t$env['REQUEST_METHOD'] = 'POST';\r\n\t\t\r\n\t\t$opts[\"http\"][\"method\"] = \"POST\";\r\n\t\t$opts[\"http\"][\"header\"] .= \"Content-type: \" . $env['CONTENT_TYPE'] . \"\\r\\n\";\r\n\t\t$opts[\"http\"][\"content\"] = $request;\r\n\r\n\t\tif (empty($request))\r\n\t\t\terror(\"POST empty in '$file'\");\r\n\r\n\t} else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {\r\n\r\n\t\t$post = trim($section_text['POST']);\r\n\r\n\t\tif (array_key_exists('GZIP_POST', $section_text) && function_exists('gzencode')) {\r\n\t\t\t$post = gzencode($post, 9, FORCE_GZIP);\r\n\t\t\t$env['HTTP_CONTENT_ENCODING'] = 'gzip';\r\n\t\t} else if (array_key_exists('DEFLATE_POST', $section_text) && function_exists('gzcompress')) {\r\n\t\t\t$post = gzcompress($post, 9);\r\n\t\t\t$env['HTTP_CONTENT_ENCODING'] = 'deflate';\r\n\t\t}\r\n\r\n\t\t//save_text($tmp_post, $post);\r\n\t\t$content_length = strlen($post);\r\n\r\n\t\t$env['REQUEST_METHOD'] = 'POST';\r\n\t\t$env['CONTENT_TYPE']   = 'application/x-www-form-urlencoded';\r\n\t\t$env['CONTENT_LENGTH'] = $content_length;\r\n\r\n        $opts[\"http\"][\"method\"] = \"POST\";\r\n\t\t$opts[\"http\"][\"header\"] .= \"Content-type: \" . $env['CONTENT_TYPE'] . \"\\r\\n\";\r\n\t\t$opts[\"http\"][\"header\"] .= \"Content-encoding: \". $env['HTTP_CONTENT_ENCODING'] . \"\\r\\n\";\r\n\t\t$opts[\"http\"][\"header\"] .= \"Content-length: \". $content_length . \"\\r\\n\";\r\n\t\t$opts[\"http\"][\"content\"] = $post;\r\n\t} else {\r\n\r\n\t\t$env['REQUEST_METHOD'] = 'GET';\r\n\t\t$env['CONTENT_TYPE']   = '';\r\n\t\t$env['CONTENT_LENGTH'] = '';\r\n\t}\r\n\r\n    $context = stream_context_create($opts);\r\n\t$out = _file_get_contents($www . $phpfile, false, $context, &$headers);\r\n\t\r\n\tif ($out === FALSE) {\r\n\t\techo '<br/>';\r\n\t    error(\"See <a target='_blank' href='$phpfile'>$phpfile</a>, exception \");\r\n\t}\t\r\n\t\r\n    if ((StartsWith($out,\"\\r\\nCompileError\") || StartsWith($out,\"\\r\\nCompileWarning\")))\r\n        show_result(\"<span class='skip'>SKIP</span>\", $file, \", Script generates <b>CompileError</b> or <b>CompileWarning</b>, so it cannot be compared with PHP. <a href='$phpfile' target='_blank'>Try the script</a><pre>$out</pre>\");\r\n    \r\n    // perform clean\r\n    try_clean($file, $www, $section_text);\r\n\r\n    // compare .php response with expected output\r\n\r\n\t// Does the output match what is expected?\r\n\t$output = preg_replace(b\"/\\r\\n/\", b\"\\n\", trim($out));\r\n\t$output = str_replace(\"string[binary](\",\"string(\",$output);\r\n    \r\n\t$failed_headers = false;\r\n\tif (isset($section_text['EXPECTHEADERS'])) {\r\n\t\t$want = array();\r\n\t\t$wanted_headers = array();\r\n\t\t$lines = preg_split(b\"/[\\n\\r]+/\", (binary) $section_text['EXPECTHEADERS']);\r\n\r\n\t\tforeach($lines as $line) {\r\n\t\t\tif (strpos($line, b':') !== false) {\r\n\t\t\t\t$line = explode(b':', $line, 2);\r\n\t\t\t\t$want[trim($line[0])] = trim($line[1]);\r\n\t\t\t\t$wanted_headers[] = trim($line[0]) . b': ' . trim($line[1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$org_headers = $headers;\r\n\t\t$headers = array();\r\n\t\t$output_headers = array();\r\n\r\n\t\tforeach($want as $k => $v) {\r\n\r\n\t\t\tif (isset($org_headers[$k])) {\r\n\t\t\t\t$headers = $org_headers[$k];\r\n\t\t\t\t$output_headers[] = $k . b': ' . $org_headers[$k];\r\n\t\t\t}\r\n\r\n\t\t\tif (!isset($org_headers[$k]) || $org_headers[$k] != $v) {\r\n\t\t\t\t$failed_headers = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tksort($wanted_headers);\r\n\t\t$wanted_headers = join(b\"\\n\", $wanted_headers);\r\n\t\tksort($output_headers);\r\n\t\t$output_headers = join(b\"\\n\", $output_headers);\r\n\t}\r\n    \r\n\tif (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) {\r\n\r\n\t\tif (isset($section_text['EXPECTF'])) {\r\n\t\t\t$wanted = trim($section_text['EXPECTF']);\r\n\t\t} else {\r\n\t\t\t$wanted = trim($section_text['EXPECTREGEX']);\r\n\t\t}\r\n\r\n\t\t$wanted_re = preg_replace(b'/\\r\\n/', b\"\\n\", $wanted);\r\n\r\n\t\tif (isset($section_text['EXPECTF'])) {\r\n\r\n\t\t\t// do preg_quote, but miss out any %r delimited sections\r\n\t\t\t$temp = b\"\";\r\n\t\t\t$r = b\"%r\";\r\n\t\t\t$startOffset = 0;\r\n\t\t\t$length = strlen($wanted_re);\r\n\t\t\twhile($startOffset < $length) {\r\n\t\t\t\t$start = strpos($wanted_re, $r, $startOffset);\r\n\t\t\t\tif ($start !== false) {\r\n\t\t\t\t\t// we have found a start tag\r\n\t\t\t\t\t$end = strpos($wanted_re, $r, $start+2);\r\n\t\t\t\t\tif ($end === false) {\r\n\t\t\t\t\t\t// unbalanced tag, ignore it.\r\n\t\t\t\t\t\t$end = $start = $length;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// no more %r sections\r\n\t\t\t\t\t$start = $end = $length;\r\n\t\t\t\t}\r\n\t\t\t\t// quote a non re portion of the string\r\n\t\t\t\t$temp = $temp . preg_quote(substr($wanted_re, $startOffset, ($start - $startOffset)),  b'/');\r\n\t\t\t\t// add the re unquoted.\r\n\t\t\t\tif ($end > $start) {\r\n\t\t\t\t\t$temp = $temp . b'(' . substr($wanted_re, $start+2, ($end - $start-2)). b')';\r\n\t\t\t\t}\r\n\t\t\t\t$startOffset = $end + 2;\r\n\t\t\t}\r\n\t\t\t$wanted_re = $temp;\r\n\t\t\r\n\t\t\t$wanted_re = str_replace(\r\n\t\t\t\tarray(b'%binary_string_optional%'),\r\n\t\t\t\tversion_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'binary string',\r\n\t\t\t\t$wanted_re\r\n\t\t\t);\r\n\t\t\t$wanted_re = str_replace(\r\n\t\t\t\tarray(b'%unicode_string_optional%'),\r\n\t\t\t\tversion_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'Unicode string',\r\n\t\t\t\t$wanted_re\r\n\t\t\t);\r\n\t\t\t$wanted_re = str_replace(\r\n\t\t\t\tarray(b'%unicode\\|string%', b'%string\\|unicode%'),\r\n\t\t\t\tversion_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'string' : b'unicode',\r\n\t\t\t\t$wanted_re\r\n\t\t\t);\r\n\t\t\t$wanted_re = str_replace(\r\n\t\t\t\tarray(b'%u\\|b%', b'%b\\|u%'),\r\n\t\t\t\tversion_compare(PHP_VERSION, '6.0.0-dev') == -1 ? b'' : b'u',\r\n\t\t\t\t$wanted_re\r\n\t\t\t);\r\n\t\t\t// Stick to basics\r\n\t\t\t$wanted_re = str_replace(b'%e', b'\\\\' . '\\\\', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%s', b'[^\\r\\n]+', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%S', b'[^\\r\\n]*', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%a', b'.+', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%A', b'.*', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%w', b'\\s*', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%i', b'[+-]?\\d+', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%d', b'\\d+', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%x', b'[0-9a-fA-F]+', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%f', b'[+-]?\\.?\\d+\\.?\\d*(?:[Ee][+-]?\\d+)?', $wanted_re);\r\n\t\t\t$wanted_re = str_replace(b'%c', b'.', $wanted_re);\r\n\t\t\t// %f allows two points \"-.0.0\" but that is the best *simple* expression\r\n\t\t}\r\n/* DEBUG YOUR REGEX HERE\r\n\t\tvar_dump($wanted_re);\r\n\t\tprint(str_repeat('=', 80) . \"\\n\");\r\n\t\tvar_dump($output);\r\n*/\r\n\t\tif (preg_match(b\"/^$wanted_re\\$/s\", $output)) {\r\n\t\t\t@unlink($phpfile);\r\n\r\n            show_result(\"<span class='pass'>PASS</span>\", \"$file\", '');\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\t$wanted = (binary) trim($section_text['EXPECT']);\r\n\t\t$wanted = preg_replace(b'/\\r\\n/',b\"\\n\", $wanted);\r\n\t\t\r\n\t\t// compare and leave on success\r\n\t\tif (!strcmp($output, $wanted)) {\r\n\t\t\t@unlink($phpfile);\r\n\t\t\t\r\n            show_result(\"<span class='pass'>PASS</span>\", $file, '');\r\n\t\t}\r\n\r\n\t\t$wanted_re = null;\r\n\t}\r\n\r\n\t// Test failed so we need to report details.\r\n\tif ($failed_headers) {\r\n\t\t$passed = false;\r\n\t\t$wanted = (binary) $wanted_headers . b\"\\n--HEADERS--\\n\" . (binary) $wanted;\r\n\t\t$output = (binary) $output_headers . b\"\\n--HEADERS--\\n\" . (binary) $output;\r\n\r\n\t\tif (isset($wanted_re)) {\r\n\t\t\t$wanted_re = preg_quote($wanted_headers . \"\\n--HEADERS--\\n\", '/') . $wanted_re;\r\n\t\t}\r\n\t}\r\n\r\n\t/*if ($leaked) {\r\n\t\t$restype[] = 'LEAK';\r\n\t}\r\n\r\n\tif ($warn) {\r\n\t\t$restype[] = 'WARN';\r\n\t}\r\n\r\n\tif (!$passed) {\r\n\t    if (isset($section_text['XFAIL']))\r\n\t\t\t$restype[] = 'XFAIL';\r\n\t\telse\r\n\t\t\t$restype[] = 'FAIL';\r\n\t}*/\r\n\r\n\t// // if (!$passed)\r\n    {\r\n\r\n\t\t// write .exp\r\n\t\tif (file_put_contents($file . '.exp', (binary) $wanted, FILE_BINARY) === false) {\r\n\t\t\terror(\"Cannot create expected test output '$file.exp'\");\r\n\t\t}\r\n\r\n\t\t// write .out\r\n\t\tif (file_put_contents($file . '.out', (binary) $output, FILE_BINARY) === false) {\r\n\t\t\terror(\"Cannot create test output - '$file.out'\");\r\n\t\t}\r\n\r\n\t\t// write .diff\r\n\t\t$diff = generate_diff($wanted, $wanted_re, $output);\r\n\t\tif (file_put_contents($file.'.diff',\r\n         (binary) $diff, FILE_BINARY) === false) {\r\n\t\t\terror(\"Cannot create test diff - '$file.diff'\");\r\n\t\t}\r\n\r\n\t\t$resultid = \"result_\" . strlen($phpfile) . '_' . crc32($phpfile);\r\n\t\t$sourceid = \"source_\" . strlen($phpfile) . '_' . crc32($phpfile);\r\n\t\t\r\n        show_result(\r\n\t\t\t\"<span class='fail'>FAIL</span>\",\r\n\t\t\t$file,\r\n\t\t\t\", <a href='$phpfile' target='_blank'>Try the script</a>\" .\r\n\t\t\t\", <a href='#' onclick='$(\\\"#$sourceid\\\").slideToggle();return false;'>source</a>\" .\r\n\t\t\t\", <a href='#' onclick='$(\\\"#$resultid\\\").slideToggle();return false;'>details</a>\" .\r\n\t\t\t\"<div id='$sourceid' style='display:none;background:#eee;border:1px dashed #888;'><pre>\".htmlspecialchars(trim(_file_get_contents($file,false,null,&$dummyheaders))).\"</pre></div>\" .\r\n\t\t\t\"<div id='$resultid' style='display:none;'><table border='1'><tr><td><b>Output</b><br/><pre style='background:#fee;font-size:8px;'>\".htmlspecialchars($output).\"</pre></td><td><b>Expected</b><br/><pre  style='background:#efe;font-size:8px;'>\".htmlspecialchars($wanted).\"</pre></td></tr></table></div>\"\r\n\t\t\t);\r\n\t\t// write .sh\r\n\t\t//if (strpos($log_format, 'S') !== false && file_put_contents($sh_filename, b\"#!/bin/sh{$cmd}\", FILE_BINARY) === false) {\r\n\t\t\t//error(\"Cannot create test shell script - $sh_filename\");\r\n\t\t//}\r\n\t\t//chmod($sh_filename, 0755);\r\n\t}\r\n\r\n\t/*foreach ($restype as $type) {\r\n\t\t$PHP_FAILED_TESTS[$type.'ED'][] = array (\r\n\t\t\t'name'      => $file,\r\n\t\t\t'test_name' => (is_array($IN_REDIRECT) ? $IN_REDIRECT['via'] : '') . $tested . \" [$tested_file]\",\r\n\t\t\t'output'    => $output_filename,\r\n\t\t\t'diff'      => $diff_filename,\r\n\t\t\t'info'      => $info,\r\n\t\t);\r\n\t}*/\r\n\r\n\t\r\n}\r\n\r\nfunction save_text($filename, $text, $filename_copy = null)\r\n{\r\n\tif (file_put_contents($filename, (binary) $text, FILE_BINARY) === false) {\r\n\t\terror(\"Cannot open file '\" . $filename . \"' (save_text)\");\r\n\t}\r\n\r\n    if ($filename_copy && $filename_copy != $filename)\r\n\t\tsave_text($filename_copy, $text);\r\n}\r\n\r\nfunction comp_line($l1, $l2, $is_reg)\r\n{\r\n\tif ($is_reg) {\r\n\t\treturn preg_match(b'/^'. (binary) $l1 . b'$/s', (binary) $l2);\r\n\t} else {\r\n\t\treturn !strcmp((binary) $l1, (binary) $l2);\r\n\t}\r\n}\r\n\r\nfunction count_array_diff(&$ar1, &$ar2, $is_reg, &$w, $idx1, $idx2, $cnt1, $cnt2, $steps)\r\n{\r\n\t$equal = 0;\r\n\r\n\twhile ($idx1 < $cnt1 && $idx2 < $cnt2 && comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {\r\n\t\t$idx1++;\r\n\t\t$idx2++;\r\n\t\t$equal++;\r\n\t\t$steps--;\r\n\t}\r\n\tif (--$steps > 0) {\r\n\t\t$eq1 = 0;\r\n\t\t$st = $steps / 2;\r\n\r\n\t\tfor ($ofs1 = $idx1 + 1; $ofs1 < $cnt1 && $st-- > 0; $ofs1++) {\r\n\t\t\t$eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $ofs1, $idx2, $cnt1, $cnt2, $st);\r\n\r\n\t\t\tif ($eq > $eq1) {\r\n\t\t\t\t$eq1 = $eq;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$eq2 = 0;\r\n\t\t$st = $steps;\r\n\r\n\t\tfor ($ofs2 = $idx2 + 1; $ofs2 < $cnt2 && $st-- > 0; $ofs2++) {\r\n\t\t\t$eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $ofs2, $cnt1, $cnt2, $st);\r\n\t\t\tif ($eq > $eq2) {\r\n\t\t\t\t$eq2 = $eq;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ($eq1 > $eq2) {\r\n\t\t\t$equal += $eq1;\r\n\t\t} else if ($eq2 > 0) {\r\n\t\t\t$equal += $eq2;\r\n\t\t}\r\n\t}\r\n\r\n\treturn $equal;\r\n}\r\n\r\nfunction generate_array_diff(&$ar1, &$ar2, $is_reg, &$w)\r\n{\r\n\t$idx1 = 0; $ofs1 = 0; $cnt1 = @count($ar1);\r\n\t$idx2 = 0; $ofs2 = 0; $cnt2 = @count($ar2);\r\n\t$diff = array();\r\n\t$old1 = array();\r\n\t$old2 = array();\r\n\r\n\twhile ($idx1 < $cnt1 && $idx2 < $cnt2) {\r\n\r\n\t\tif (comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) {\r\n\t\t\t$idx1++;\r\n\t\t\t$idx2++;\r\n\t\t\tcontinue;\r\n\t\t} else {\r\n\r\n\t\t\t$c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1+1, $idx2, $cnt1, $cnt2, 10);\r\n\t\t\t$c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2+1, $cnt1,  $cnt2, 10);\r\n\r\n\t\t\tif ($c1 > $c2) {\r\n\t\t\t\t$old1[$idx1] = (binary) sprintf(\"%03d- \", $idx1+1) . $w[$idx1++];\r\n\t\t\t\t$last = 1;\r\n\t\t\t} else if ($c2 > 0) {\r\n\t\t\t\t$old2[$idx2] = (binary) sprintf(\"%03d+ \", $idx2+1) . $ar2[$idx2++];\r\n\t\t\t\t$last = 2;\r\n\t\t\t} else {\r\n\t\t\t\t$old1[$idx1] = (binary) sprintf(\"%03d- \", $idx1+1) . $w[$idx1++];\r\n\t\t\t\t$old2[$idx2] = (binary) sprintf(\"%03d+ \", $idx2+1) . $ar2[$idx2++];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treset($old1); $k1 = key($old1); $l1 = -2;\r\n\treset($old2); $k2 = key($old2); $l2 = -2;\r\n\r\n\twhile ($k1 !== null || $k2 !== null) {\r\n\r\n\t\tif ($k1 == $l1 + 1 || $k2 === null) {\r\n\t\t\t$l1 = $k1;\r\n\t\t\t$diff[] = current($old1);\r\n\t\t\t$k1 = next($old1) ? key($old1) : null;\r\n\t\t} else if ($k2 == $l2 + 1 || $k1 === null) {\r\n\t\t\t$l2 = $k2;\r\n\t\t\t$diff[] = current($old2);\r\n\t\t\t$k2 = next($old2) ? key($old2) : null;\r\n\t\t} else if ($k1 < $k2) {\r\n\t\t\t$l1 = $k1;\r\n\t\t\t$diff[] = current($old1);\r\n\t\t\t$k1 = next($old1) ? key($old1) : null;\r\n\t\t} else {\r\n\t\t\t$l2 = $k2;\r\n\t\t\t$diff[] = current($old2);\r\n\t\t\t$k2 = next($old2) ? key($old2) : null;\r\n\t\t}\r\n\t}\r\n\r\n\twhile ($idx1 < $cnt1) {\r\n\t\t$diff[] = (binary) sprintf(\"%03d- \", $idx1 + 1) . $w[$idx1++];\r\n\t}\r\n\r\n\twhile ($idx2 < $cnt2) {\r\n\t\t$diff[] = (binary) sprintf(\"%03d+ \", $idx2 + 1) . $ar2[$idx2++];\r\n\t}\r\n\r\n\treturn $diff;\r\n}\r\n\r\nfunction generate_diff($wanted, $wanted_re, $output)\r\n{\r\n\t$w = explode(b\"\\n\", $wanted);\r\n\t$o = explode(b\"\\n\", $output);\r\n\t$r = is_null($wanted_re) ? $w : explode(b\"\\n\", $wanted_re);\r\n\t$diff = generate_array_diff($r, $o, !is_null($wanted_re), $w);\r\n\r\n\treturn implode(b\"\\r\\n\", $diff);\r\n}\r\n\r\nfunction error($message)\r\n{\r\n\tdie(\"<b class='error'>ERROR:</b> {$message} in <a href='?test=\".$_GET['test'].\"&location=\".$_GET['location'].\"' target='_blank'>\".$_GET['test'].\"</a>\");\r\n}\r\n\r\nfunction show_result($state, $file, $text)\r\n{\r\n    $testurl = \"?test=\".$_GET['test'].\"&location=\".$_GET['location'].\"&displaystandalone=1\";\r\n\r\n\tif (isset($_GET['displaystandalone']))\r\n    \techo '<script type=\"text/javascript\" src=\"jquery-1.6.2.min.js\"></script>';\r\n    \t\r\n    echo \"<div class='state'>$state</div><b>$state:</b> <a href='$testurl' target='_blank'>\".$_GET['test'].\"</a>$text\";\r\n    exit(1);\r\n}\r\n\r\nfunction settings2array($settings, &$ini_settings)\r\n{\r\n\tforeach($settings as $setting) {\r\n\r\n\t\tif (strpos($setting, '=') !== false) {\r\n\t\t\t$setting = explode(\"=\", $setting, 2);\r\n\t\t\t$name = trim(strtolower($setting[0]));\r\n\t\t\t$value = trim($setting[1]);\r\n\r\n\t\t\tif ($name == 'extension') {\r\n\r\n\t\t\t\tif (!isset($ini_settings[$name])) {\r\n\t\t\t\t\t$ini_settings[$name] = array();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$ini_settings[$name][] = $value;\r\n\r\n\t\t\t} else {\r\n\t\t\t\t$ini_settings[$name] = $value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction settings2params(&$ini_settings)\r\n{\r\n\t$settings = '';\r\n\r\n\tforeach($ini_settings as $name => $value) {\r\n\r\n\t\tif (is_array($value)) {\r\n\t\t\tforeach($value as $val) {\r\n\t\t\t\t$val = addslashes($val);\r\n\t\t\t\t$settings .= \" -d \\\"$name=$val\\\"\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (substr(PHP_OS, 0, 3) == \"WIN\" && !empty($value) && $value{0} == '\"') {\r\n\t\t\t\t$len = strlen($value);\r\n\r\n\t\t\t\tif ($value{$len - 1} == '\"') {\r\n\t\t\t\t\t$value{0} = \"'\";\r\n\t\t\t\t\t$value{$len - 1} = \"'\";\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t$value = addslashes($value);\r\n\t\t\t}\r\n\r\n\t\t\t$settings .= \" -d \\\"$name=$value\\\"\";\r\n\t\t}\r\n\t}\r\n\r\n\t$ini_settings = $settings;\r\n}\r\n\r\nfunction binary_section($section)\r\n{\r\n\treturn /*PHP_MAJOR_VERSION < 6 || */\r\n\t\t(\r\n\t\t\t$section == 'FILE'\t\t\t||\r\n\t        $section == 'FILEEOF'\t\t||\r\n\t\t\t$section == 'EXPECT'\t\t||\r\n\t\t\t$section == 'EXPECTF'\t\t||\r\n\t\t\t$section == 'EXPECTREGEX'\t||\r\n\t\t\t$section == 'EXPECTHEADERS'\t||\r\n\t\t\t$section == 'SKIPIF'\t\t||\r\n\t\t\t$section == 'CLEAN'\r\n\t\t);\r\n}\r\n/**\r\n * StartsWith\r\n * Tests if a text starts with an given string.\r\n *\r\n * @param     string\r\n * @param     string\r\n * @return    bool\r\n */\r\nfunction StartsWith($Haystack, $Needle){\r\n    // Recommended version, using strpos\r\n    return strpos($Haystack, $Needle) === 0;\r\n}\r\nfunction EndsWith($Haystack,$Needle) {\r\n    $end = strlen($Haystack) - strlen($Needle);\r\n    return strpos($Haystack, $Needle, $end) == $end;\r\n}\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/PHPT/web/tests.js",
    "content": "﻿var files = [];\r\nvar files_requested = 0;\r\n\r\nvar pending_requests = 0;\r\nvar max_requests = 1;\r\n\r\nvar paused = true;\t// if true, no new tests are started\r\n\r\nfunction start_test() {\r\n    while (do_next_tests());\r\n\r\n    // try more tests after some time\r\n    if (files_requested < files.length)\r\n        setTimeout(\"start_test()\", 5000);\r\n    else {\r\n        $('#infotxt').text(\"PHPT: Done! \" + files.length + ' files tested.');\r\n        $('#list').after(\"<hr/><center><b>DONE</b></center>\");\r\n        $('#startbtn').unbind('click').css('color','#333');\r\n    }\r\n}\r\n\r\nfunction decreasePending() {\r\n    if (pending_requests > 0)\r\n        pending_requests--;\r\n\r\n    setTimeout(\"decreasePending()\", 30000);\r\n}\r\n\r\nfunction do_next_tests() {\r\n    if (pending_requests >= max_requests || files_requested >= files.length || paused)\r\n        return false;\r\n\r\n    pending_requests++;\r\n\r\n    var url = document.location.origin + document.location.pathname;\r\n\r\n    var jqxhr = $.get(url + '?location=' + escape(url) + '&test=' + escape(files[files_requested++]))\r\n      .success(function (data, textStatus) {\r\n          $('#list').append(\"<li>\" + data + \"</li>\");\r\n      })\r\n      .error(function (data) {\r\n          $('#list').append(\"<li style='color:#f00;'>Request Error</li>\");\r\n      })\r\n      .complete(function () {\r\n          pending_requests--;\r\n          do_next_tests();\r\n      });    \r\n\r\n    $('#infotxt').text(\"Progress: \" + files_requested + \"/\" + files.length);\r\n\r\n    return true;\r\n}\r\n\r\n// get query param value\r\nfunction gup( name )\r\n{\r\n  name = name.replace(/[\\[]/,\"\\\\\\[\").replace(/[\\]]/,\"\\\\\\]\");\r\n  var regexS = \"[\\\\?&]\"+name+\"=([^&#]*)\";\r\n  var regex = new RegExp( regexS );\r\n  var results = regex.exec( window.location.href );\r\n  if( results == null )\r\n    return \"\";\r\n  else\r\n    return results[1];\r\n}\r\n\r\n$().ready( function(){\r\n\r\n\t// time to time decrease pending requests, since they can timeout and not complete ?\r\n\tdecreasePending();\r\n\r\n\t// top bar with filters and buttons\r\n\tvar body = $('body');\r\n\tbody.css('margin-top',\"34px\");\r\n\tbody.prepend(\r\n\t'<div style=\"padding:4px;position:fixed;top:0;left:0;display:block;width:100%;background:#ccc;border-bottom:2px solid #888;\">' +\r\n\t\t'<a href=\"#\" id=\"startbtn\" style=\"text-decoration:none;padding:0 8px 0 8px;\">Start testing!</a> | ' +\r\n\t\t'Filter tests: <input id=\"filterval\" name=\"filter\" value=\"\" style=\"background:#eee;border:1px solid;\" /> | ' +\r\n\t\t'<span id=\"infotxt\"></a> | ' +\r\n\t'</div>');\r\n\t\r\n\t//\r\n\t$('#infotxt').text(files.length + \" tests to go\");\r\n\t$('#startbtn').click(function(){ \r\n\t\tpaused = !paused;\r\n\t\tif (!files_requested)\r\n\t\t\tstart_test();\r\n\t\t\r\n\t\t$(this).text(paused ? \"Continue\" : \"Pause\");\t\t\r\n\t\treturn false;\r\n\t});\r\n\t\r\n\tvar filter = $('#filterval');\r\n\tfilter.val(gup('filter'));\r\n\tfilter.keyup(function(e) {\r\n\t\tif(e.keyCode == 13) {\r\n\t\t\tpause = true;\r\n\t\t\tdocument.location = document.location.origin + document.location.pathname + '?filter=' + filter.val();\r\n\t\t}\r\n\t});\r\n} );\r\n"
  },
  {
    "path": "Testing/PHPT/web/web.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<configuration>\r\n\r\n  <system.webServer>\r\n    <handlers>\r\n      <add name=\"PhalangerHandler\" path=\"*.php\" verb=\"*\" type=\"PHP.Core.RequestHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" resourceType=\"Unspecified\" preCondition=\"integratedMode\" />\r\n    </handlers>\r\n        <defaultDocument>\r\n            <files>\r\n                <remove value=\"iisstart.htm\" />\r\n                <remove value=\"Default.asp\" />\r\n                <remove value=\"Default.htm\" />\r\n                <add value=\"index.php\" />\r\n            </files>\r\n        </defaultDocument>\r\n        <staticContent>\r\n            <mimeMap fileExtension=\".phpt\" mimeType=\"text/html\" />\r\n        </staticContent>\r\n  </system.webServer>\r\n  \r\n  <system.web>\r\n    <compilation debug=\"true\" targetFramework=\"4.0\">\r\n      <assemblies>\r\n        <add assembly=\"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089\" />\r\n      </assemblies>\r\n    </compilation>\r\n    <authentication mode=\"Windows\" />\r\n\t</system.web>\r\n\r\n  <system.codedom>\r\n    <compilers>\r\n      <!-- <compiler language=\"php;phalanger\" extension=\".php\" type=\"???, PhpNetCore\" /> -->\r\n      <compiler language=\"c#;cs;csharp\" extension=\".cs\" type=\"Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n        <providerOption name=\"CompilerVersion\" value=\"v4.0\" />\r\n      </compiler>\r\n      <compiler language=\"vb;vbs;visualbasic;vbscript\" extension=\".vb\" compilerOptions=\"/optioninfer+\" type=\"Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n        <providerOption name=\"CompilerVersion\" value=\"v4.0\" />\r\n      </compiler>\r\n    </compilers>\r\n  </system.codedom>\r\n\r\n  <phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<!--add assembly=\"php_gettext.mng, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"gettext\" /-->\r\n\t\t</classLibrary>\r\n    <error-control>\r\n      <set name=\"HtmlMessages\" value=\"false\" phpName=\"html_errors\" />\r\n    </error-control>\r\n\t</phpNet>\r\n  \r\n</configuration>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/Phalanger.inc",
    "content": "<?\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__call_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nclass Caller {\r\n\tpublic $x = array(1, 2, 3);\r\n\t\r\n\tfunction __call($m, $a) {\r\n\t\techo \"Method $m called:\\n\";\r\n\t\t__var_dump($a);\r\n\t\treturn $this->x;\r\n\t}\r\n}\r\n\r\n$foo = new Caller();\r\n$a = $foo->test(1, '2', 3.4, true);\r\n__var_dump($a);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__call_002.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n\tfunction __call() {\r\n\t}\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\nFatal error: Method Test::__call() must take exactly 2 arguments in %s__call_002.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set__get_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass setter {\r\n\tpublic $n;\r\n\tpublic $x = array('a' => 1, 'b' => 2, 'c' => 3);\r\n\r\n\tfunction __get($nm) {\r\n\t\techo \"Getting [$nm]\\n\";\r\n\r\n\t\tif (isset($this->x[$nm])) {\r\n\t\t\t$r = $this->x[$nm];\r\n\t\t\techo \"Returning: $r\\n\";\r\n\t\t\treturn $r;\r\n\t\t} \r\n\t\telse {\r\n\t\t\techo \"Nothing!\\n\";\r\n\t\t}\r\n\t}\r\n\r\n\tfunction __set($nm, $val) {\r\n\t\techo \"Setting [$nm] to $val\\n\";\r\n                    \r\n\t\tif (isset($this->x[$nm])) {\r\n\t\t\t$this->x[$nm] = $val;\r\n\t\t\techo \"OK!\\n\";\r\n\t\t} \r\n\t\telse {\r\n\t\t\techo \"Not OK!\\n\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\n$foo = new Setter();\r\n\r\n// this doesn't go through __set()... should it?\r\n$foo->n = 1;\r\n\r\n// the rest are fine...\r\n$foo->a = 100;\r\n$foo->a++;\r\n$foo->z++;\r\n__var_dump($foo);\r\n        \r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set__get_002.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass Test {\r\n\tfunction __get($x,$y) {\r\n\t}\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\nFatal error: Method Test::__get() must take exactly 1 argument in %s__set__get_002.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set__get_003.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass Test {\r\n\tfunction __set() {\r\n\t}\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set__get_004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test {\r\n\tprotected $x;\r\n\r\n\tfunction __get($name) {\r\n\t\tif (isset($this->x[$name])) {\r\n\t\t\treturn $this->x[$name];\r\n\t\t} \r\n\t\telse\r\n\t\t{\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction __set($name, $val) {\r\n\t\t$this->x[$name] = $val;\r\n\t}\r\n}\r\n\r\n$foo = new Test();\r\n$bar = new Test();\r\n$bar->baz = \"Check\";\r\n\r\n$foo->bar = $bar;\r\n\r\n__var_dump($bar->baz);\r\n__var_dump($foo->bar->baz);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set__get_005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test\r\n{\r\n\tprotected $x;\r\n\r\n\tfunction __get($name) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tif (isset($this->x[$name])) {\r\n\t\t\treturn $this->x[$name];\r\n\t\t} \r\n\t\telse\r\n\t\t{\r\n\t\t\treturn NULL;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction __set($name, $val) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->x[$name] = $val;\r\n\t}\r\n}\r\n\r\nclass AutoGen\r\n{\r\n\tprotected $x;\r\n\r\n\tfunction __get($name) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tif (!isset($this->x[$name])) {\r\n\t\t\t$this->x[$name] = new Test();\r\n\t\t}\r\n\t\treturn $this->x[$name];\r\n\t}\r\n\r\n\tfunction __set($name, $val) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->x[$name] = $val;\r\n\t}\r\n}\r\n\r\n$foo = new AutoGen();\r\n$foo->bar->baz = \"Check\";\r\n\r\n__var_dump($foo->bar);\r\n__var_dump($foo->bar->baz);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/__set_data_corrupt.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$f = 'c=\"foo\"';\r\nclass foo {\r\n        const foobar=1;\r\n        public $pp = array('t'=>null);\r\n                                                                                                                                                            \r\n        function bar() {\r\n                echo $this->t ='f';\r\n        }\r\n        function __get($prop)\r\n        {\r\n                return $this->pp[$prop];\r\n        }\r\n        function __set($prop, $val)\r\n        {\r\n                echo \"__set\";\r\n                $this->pp[$prop] = '';\r\n        }\r\n}\r\n$f = new foo;\r\n$f->bar();\r\n?>\r\n--EXPECT--\r\n__setf\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nabstract class fail {\r\n\tabstract function show();\r\n}\r\n\r\nclass pass extends fail {\r\n\tfunction show() {\r\n\t\techo \"Call to function show()\\n\";\r\n\t}\r\n\tfunction error() {\r\n\t\tparent::show();\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n$t->show();\r\n$t->error();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nCall to function show()\r\n\r\nFatal error: Cannot call abstract method fail::show() in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_class.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nabstract class fail {\r\n\tabstract function show();\r\n}\r\n\r\nclass pass extends fail {\r\n\tfunction show() {\r\n\t\techo \"Call to function show()\\n\";\r\n\t}\r\n}\r\n\r\n$t2 = new pass();\r\n$t2->show();\r\n\r\n$t = new fail();\r\n$t->show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nCall to function show()\r\n\r\nFatal error: Cannot instantiate abstract class fail in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_derived.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass base {\r\n}\r\n\r\nclass derived extends base {\r\n\tabstract function show();\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal 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\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_final.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass fail {\r\n\tabstract final function show();\r\n}\r\n\r\necho \"Done\\n\"; // Shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot use the final modifier on an abstract class member in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_inherit.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nabstract class pass {\r\n\tabstract function show();\r\n}\r\n\r\nabstract class fail extends pass {\r\n}\r\n\r\n$t = new fail();\r\n$t = new pass();\r\n\r\necho \"Done\\n\"; // Shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot instantiate abstract class fail in %s on line %d \r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_not_declared.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass fail {\r\n\tabstract function show();\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_redeclare.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(0);\r\nclass pass {\r\n\tfunction show() {\r\n\t\techo \"Call to function show()\\n\";\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tabstract function show();\r\n}\r\n\r\necho \"Done\\n\"; // Shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/abstract_static.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(0);\r\nabstract class fail {\r\n\tabstract static function show();\r\n}\r\n\r\nclass pass extends fail {\r\n\tstatic function show() {\r\n\t\techo \"Call to function show()\\n\";\r\n\t}\r\n}\r\n\r\npass::show();\r\nfail::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nclass object implements ArrayAccess {\r\n\r\n\tpublic $a = array('1st', 1, 2=>'3rd', '4th'=>4);\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn array_key_exists($index, $this->a);\r\n\t}\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn $this->a[$index];\r\n\t}\r\n\tfunction offsetSet($index, $newval) {\r\n\t\techo __METHOD__ . \"($index,$newval)\\n\";\r\n\t\treturn $this->a[$index] = $newval;\r\n\t}\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tunset($this->a[$index]);\r\n\t}\r\n}\r\n\r\n$obj = new Object;\r\n\r\n__var_dump($obj->a);\r\n\r\necho \"===EMPTY===\\n\";\r\n__var_dump(empty($obj[0]));\r\n__var_dump(empty($obj[1]));\r\n__var_dump(empty($obj[2]));\r\n__var_dump(empty($obj['4th']));\r\n__var_dump(empty($obj['5th']));\r\n__var_dump(empty($obj[6]));\r\n\r\necho \"===isset===\\n\";\r\n__var_dump(isset($obj[0]));\r\n__var_dump(isset($obj[1]));\r\n__var_dump(isset($obj[2]));\r\n__var_dump(isset($obj['4th']));\r\n__var_dump(isset($obj['5th']));\r\n__var_dump(isset($obj[6]));\r\n\r\necho \"===offsetGet===\\n\";\r\n__var_dump($obj[0]);\r\n__var_dump($obj[1]);\r\n__var_dump($obj[2]);\r\n__var_dump($obj['4th']);\r\n@__var_dump($obj['5th']);\r\n@__var_dump($obj[6]);\r\n\r\necho \"===offsetSet===\\n\";\r\necho \"WRITE 1\\n\";\r\n$obj[1] = 'Changed 1';\r\n__var_dump($obj[1]);\r\necho \"WRITE 2\\n\";\r\n$obj['4th'] = 'Changed 4th';\r\n__var_dump($obj['4th']);\r\necho \"WRITE 3\\n\";\r\n$obj['5th'] = 'Added 5th';\r\n__var_dump($obj['5th']);\r\necho \"WRITE 4\\n\";\r\n$obj[6] = 'Added 6';\r\n__var_dump($obj[6]);\r\n\r\n__var_dump($obj[0]);\r\n__var_dump($obj[2]);\r\n\r\n$x = $obj[6] = 'changed 6';\r\n__var_dump($obj[6]);\r\n__var_dump($x);\r\n\r\necho \"===unset===\\n\";\r\n__var_dump($obj->a);\r\nunset($obj[2]);\r\nunset($obj['4th']);\r\nunset($obj[7]);\r\nunset($obj['8th']);\r\n__var_dump($obj->a);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nclass object implements ArrayAccess {\r\n\r\n\tpublic $a = array('1st', 1, 2=>'3rd', '4th'=>4);\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn array_key_exists($index, $this->a);\r\n\t}\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn $this->a[$index];\r\n\t}\r\n\tfunction offsetSet($index, $newval) {\r\n\t\techo __METHOD__ . \"($index,$newval)\\n\";\r\n\t\t/*return*/ $this->a[$index] = $newval;\r\n\t}\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tunset($this->a[$index]);\r\n\t}\r\n}\r\n\r\n$obj = new Object;\r\n\r\n__var_dump($obj->a);\r\n\r\necho \"===EMPTY===\\n\";\r\n__var_dump(empty($obj[0]));\r\n__var_dump(empty($obj[1]));\r\n__var_dump(empty($obj[2]));\r\n__var_dump(empty($obj['4th']));\r\n__var_dump(empty($obj['5th']));\r\n__var_dump(empty($obj[6]));\r\n\r\necho \"===isset===\\n\";\r\n__var_dump(isset($obj[0]));\r\n__var_dump(isset($obj[1]));\r\n__var_dump(isset($obj[2]));\r\n__var_dump(isset($obj['4th']));\r\n__var_dump(isset($obj['5th']));\r\n__var_dump(isset($obj[6]));\r\n\r\necho \"===offsetGet===\\n\";\r\n__var_dump($obj[0]);\r\n__var_dump($obj[1]);\r\n__var_dump($obj[2]);\r\n__var_dump($obj['4th']);\r\n@__var_dump($obj['5th']);\r\n@__var_dump($obj[6]);\r\n\r\necho \"===offsetSet===\\n\";\r\necho \"WRITE 1\\n\";\r\n$obj[1] = 'Changed 1';\r\n__var_dump($obj[1]);\r\necho \"WRITE 2\\n\";\r\n$obj['4th'] = 'Changed 4th';\r\n__var_dump($obj['4th']);\r\necho \"WRITE 3\\n\";\r\n$obj['5th'] = 'Added 5th';\r\n__var_dump($obj['5th']);\r\necho \"WRITE 4\\n\";\r\n$obj[6] = 'Added 6';\r\n__var_dump($obj[6]);\r\n\r\n__var_dump($obj[0]);\r\n__var_dump($obj[2]);\r\n\r\n$x = $obj[6] = 'changed 6';\r\n__var_dump($obj[6]);\r\n__var_dump($x);\r\n\r\necho \"===unset===\\n\";\r\n__var_dump($obj->a);\r\nunset($obj[2]);\r\nunset($obj['4th']);\r\nunset($obj[7]);\r\nunset($obj['8th']);\r\n__var_dump($obj->a);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_003.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nclass object implements ArrayAccess {\r\n\r\n\tpublic $a = array('1st', 1, 2=>'3rd', '4th'=>4);\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn array_key_exists($index, $this->a);\r\n\t}\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tswitch($index) {\r\n\t\tcase 1:\r\n\t\t\t$a = 'foo';\r\n\t\t\treturn $a . 'Bar';\r\n\t\tcase 2:\r\n\t\t\tstatic $a=1;\r\n\t\t\treturn $a;\r\n\t\t}\r\n\t\treturn $this->a[$index];\r\n\t}\r\n\tfunction offsetSet($index, $newval) {\r\n\t\techo __METHOD__ . \"($index,$newval)\\n\";\r\n\t\tif ($index==3) {\r\n\t\t\t$this->cnt = $newval;\r\n\t\t}\r\n\t\treturn $this->a[$index] = $newval;\r\n\t}\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tunset($this->a[$index]);\r\n\t}\r\n}\r\n\r\n$obj = new Object;\r\n\r\n__var_dump($obj[1]);\r\n__var_dump($obj[2]);\r\n// PHP fatal error: $obj[2]++;\r\n__var_dump($obj[2]);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_004.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nclass object implements ArrayAccess {\r\n\r\n\tpublic $a = array('1st', 1, 2=>'3rd', '4th'=>4);\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\treturn array_key_exists($index, $this->a);\r\n\t}\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tswitch($index) {\r\n\t\tcase 1:\r\n\t\t\t$a = 'foo';\r\n\t\t\treturn $a . 'Bar';\r\n\t\tcase 2:\r\n\t\t\tstatic $a=1;\r\n\t\t\treturn $a;\r\n\t\t}\r\n\t\treturn $this->a[$index];\r\n\t}\r\n\tfunction offsetSet($index, $newval) {\r\n\t\techo __METHOD__ . \"($index,$newval)\\n\";\r\n\t\tif ($index==3) {\r\n\t\t\t$this->cnt = $newval;\r\n\t\t}\r\n\t\treturn $this->a[$index] = $newval;\r\n\t}\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($index)\\n\";\r\n\t\tunset($this->a[$index]);\r\n\t}\r\n}\r\n\r\n$obj = new Object;\r\n\r\n__var_dump($obj[1]);\r\n__var_dump($obj[2]);\r\n// PHP fatal error: $obj[2]++;\r\n__var_dump($obj[2]);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_005.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\n\r\nclass Peoples implements ArrayAccess {\r\n\tpublic $person;\r\n\t\r\n\tfunction __construct() {\r\n\t\t$this->person = array(array('name'=>'Joe'));\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\treturn array_key_exists($this->person, $index);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\treturn $this->person[$index];\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\t$this->person[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\tunset($this->person[$index]);\r\n\t}\r\n}\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] = $people->person[0]['name'] . 'Foo';\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] .= 'Bar';\r\n__var_dump($people->person[0]['name']);\r\n\r\necho \"---ArrayOverloading---\\n\";\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n// PHP disability: __var_dump($people->person[0]['name'] . 'Foo'); // impossible to assign this since we don't return references here\r\n$x = $people[0]; // creates a copy\r\n// PHP disability: $x['name'] .= 'Foo';\r\n$people[0] = $x;\r\n__var_dump($people[0]);\r\n// PHP disability: $people[0]['name'] = 'JoeFoo';\r\n__var_dump($people[0]['name']);\r\n// PHP disability: $people[0]['name'] = 'JoeFooBar';\r\n__var_dump($people[0]['name']);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_006.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\n\r\nclass OverloadedArray implements ArrayAccess {\r\n\tpublic $realArray;\r\n\t\r\n\tfunction __construct() {\r\n\t\t$this->realArray = array(1,2,3);\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\treturn array_key_exists($this->realArray, $index);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\treturn $this->realArray[$index];\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\t$this->realArray[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\tunset($this->realArray[$index]);\r\n\t}\r\n}\r\n\r\n$a = new OverloadedArray;\r\n$a[1] += 10;\r\n__var_dump($a[1]);\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_007.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nclass OverloadedArray implements ArrayAccess {\r\n\tpublic $realArray;\r\n\t\r\n\tfunction __construct() {\r\n\t\t$this->realArray = array();\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\treturn array_key_exists($this->realArray, $index);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\treturn $this->realArray[$index];\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\tif (is_null($index)) {\r\n\t\t\t$this->realArray[] = $value;\r\n\t\t} else {\r\n\t\t\t$this->realArray[$index] = $value;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\tunset($this->realArray[$index]);\r\n\t}\r\n\r\n\tfunction dump() {\r\n\t\t__var_dump($this->realArray);\r\n\t}\r\n}\r\n\r\n$a = new OverloadedArray;\r\n$a[] = 1;\r\n$a[1] = 2;\r\n$a[2] = 3;\r\n$a[] = 4;\r\n$a->dump();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_008.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\n\r\nclass Peoples implements ArrayAccess {\r\n\tpublic $person;\r\n\t\r\n\tfunction __construct() {\r\n\t\t$this->person = array(array('name'=>'Foo'));\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\treturn array_key_exists($this->person, $index);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\treturn $this->person[$index];\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\t$this->person[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\tunset($this->person[$index]);\r\n\t}\r\n}\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] .= 'Baz';\r\n__var_dump($people->person[0]['name']);\r\n\r\necho \"===ArrayOverloading===\\n\";\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people[0]['name']);\r\n// PHP disability: $people[0]['name'] = 'FooBar';\r\n__var_dump($people[0]['name']);\r\n// PHP disability: $people[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people[0]['name']);\r\n// PHP disability: $people[0]['name'] .= 'Baz';\r\n__var_dump($people[0]['name']);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_009.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\n\r\n// NOTE: This will become part of SPL\r\n\r\ninterface ArrayProxyAccess extends ArrayAccess\r\n{\r\n\tfunction proxyGet($element);\r\n\tfunction proxySet($element, $index, $value);\r\n\tfunction proxyUnset($element, $index);\r\n}\r\n\r\nclass ArrayProxy implements ArrayAccess\r\n{\r\n\tprivate $object;\r\n\tprivate $element;\r\n\t\r\n\tfunction __construct(ArrayProxyAccess $object, $element)\r\n\t{\r\n\t\techo __METHOD__ . \"($element)\\n\";\r\n\t\tif (!$object->offsetExists($element))\r\n\t\t{\r\n\t\t\t$object[$element] = array();\r\n\t\t}\r\n\t\t$this->object = $object;\r\n\t\t$this->element = $element;\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\treturn array_key_exists($index, $this->object->proxyGet($this->element));\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\t$tmp = $this->object->proxyGet($this->element);\r\n\t\treturn isset($tmp[$index]) ? $tmp[$index] : NULL;\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\techo __METHOD__ . \"($this->element, $index, $value)\\n\";\r\n\t\t$this->object->proxySet($this->element, $index, $value);\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\t$this->object->proxyUnset($this->element, $index);\r\n\t}\r\n}\r\n\r\nclass Peoples implements ArrayProxyAccess\r\n{\r\n\tpublic $person;\r\n\t\r\n\tfunction __construct()\r\n\t{\r\n\t\t$this->person = array(array('name'=>'Foo'));\r\n\t}\r\n\r\n\tfunction offsetExists($index)\r\n\t{\r\n\t\treturn array_key_exists($index, $this->person);\r\n\t}\r\n\r\n\tfunction offsetGet($index)\r\n\t{\r\n\t\treturn new ArrayProxy($this, $index);\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value)\r\n\t{\r\n\t\t$this->person[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index)\r\n\t{\r\n\t\tunset($this->person[$index]);\r\n\t}\r\n\r\n\tfunction proxyGet($element)\r\n\t{\r\n\t\treturn $this->person[$element];\r\n\t}\r\n\r\n\tfunction proxySet($element, $index, $value)\r\n\t{\r\n\t\t$this->person[$element][$index] = $value;\r\n\t}\r\n\t\r\n\tfunction proxyUnset($element, $index)\r\n\t{\r\n\t\tunset($this->person[$element][$index]);\r\n\t}\r\n}\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] .= 'Baz';\r\n__var_dump($people->person[0]['name']);\r\n\r\necho \"===ArrayOverloading===\\n\";\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'FooBar';\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people[0]['name']);\r\n// Phalanger calls one more constructor here: $people[0]['name'] .= 'Baz';\r\n__var_dump($people[0]['name']);\r\nunset($people[0]['name']);\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'BlaBla';\r\n__var_dump($people[0]['name']);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_010.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n// NOTE: This will become part of SPL\r\n\r\nclass ArrayReferenceProxy implements ArrayAccess\r\n{\r\n\tprivate $object;\r\n\tprivate $element;\r\n\t\r\n\tfunction __construct(ArrayAccess $object, array &$element)\r\n\t{\r\n\t\techo __METHOD__ . \"(array)\\n\";\r\n\t\t$this->object = $object;\r\n\t\t$this->element = &$element;\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"(\".gettype($this->element).\", $index)\\n\";\r\n\t\treturn array_key_exists($index, $this->element);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"(\".gettype($this->element).\", $index)\\n\";\r\n\t\treturn isset($this->element[$index]) ? $this->element[$index] : NULL;\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\techo __METHOD__ . \"(\".gettype($this->element).\", $index, $value)\\n\";\r\n\t\t$this->element[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"(\".gettype($this->element).\", $index)\\n\";\r\n\t\tunset($this->element[$index]);\r\n\t}\r\n}\r\n\r\nclass Peoples implements ArrayAccess\r\n{\r\n\tpublic $person;\r\n\t\r\n\tfunction __construct()\r\n\t{\r\n\t\t$this->person = array(array('name'=>'Foo'));\r\n\t}\r\n\r\n\tfunction offsetExists($index)\r\n\t{\r\n\t\treturn array_key_exists($index, $this->person);\r\n\t}\r\n\r\n\tfunction offsetGet($index)\r\n\t{\r\n\t\treturn new ArrayReferenceProxy($this, $this->person[$index]);\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value)\r\n\t{\r\n\t\t$this->person[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index)\r\n\t{\r\n\t\tunset($this->person[$index]);\r\n\t}\r\n}\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] .= 'Baz';\r\n__var_dump($people->person[0]['name']);\r\n\r\necho \"===ArrayOverloading===\\n\";\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'FooBar';\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people[0]['name']);\r\n// Phalanger invokes one more ctor: $people[0]['name'] .= 'Baz';\r\n__var_dump($people[0]['name']);\r\nunset($people[0]['name']);\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'BlaBla';\r\n__var_dump($people[0]['name']);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_011.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nrequire('Phalanger.inc');\r\n\r\n// NOTE: This will become part of SPL\r\n\r\nclass ArrayAccessReferenceProxy implements ArrayAccess\r\n{\r\n\tprivate $object;\r\n\tprivate $oarray;\r\n\tprivate $element;\r\n\t\r\n\tfunction __construct(ArrayAccess $object, array &$array, $element)\r\n\t{\r\n\t\techo __METHOD__ . \"($element)\\n\";\r\n\t\t$this->object = $object;\r\n\t\t$this->oarray = &$array;\r\n\t\t$this->element = $element;\r\n\t}\r\n\r\n\tfunction offsetExists($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\treturn array_key_exists($index, $this->oarray[$this->element]);\r\n\t}\r\n\r\n\tfunction offsetGet($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\treturn isset($this->oarray[$this->element][$index]) ? $this->oarray[$this->element][$index] : NULL;\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value) {\r\n\t\techo __METHOD__ . \"($this->element, $index, $value)\\n\";\r\n\t\t$this->oarray[$this->element][$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index) {\r\n\t\techo __METHOD__ . \"($this->element, $index)\\n\";\r\n\t\tunset($this->oarray[$this->element][$index]);\r\n\t}\r\n}\r\n\r\nclass Peoples implements ArrayAccess\r\n{\r\n\tpublic $person;\r\n\t\r\n\tfunction __construct()\r\n\t{\r\n\t\t$this->person = array(array('name'=>'Foo'));\r\n\t}\r\n\r\n\tfunction offsetExists($index)\r\n\t{\r\n\t\treturn array_key_exists($index, $this->person);\r\n\t}\r\n\r\n\tfunction offsetGet($index)\r\n\t{\r\n\t\tif (is_array($this->person[$index]))\r\n\t\t{\r\n\t\t\treturn new ArrayAccessReferenceProxy($this, $this->person, $index);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn $this->person[$index];\r\n\t\t}\r\n\t}\r\n\r\n\tfunction offsetSet($index, $value)\r\n\t{\r\n\t\t$this->person[$index] = $value;\r\n\t}\r\n\r\n\tfunction offsetUnset($index)\r\n\t{\r\n\t\tunset($this->person[$index]);\r\n\t}\r\n}\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people->person[0]['name']);\r\n$people->person[0]['name'] .= 'Baz';\r\n__var_dump($people->person[0]['name']);\r\n\r\necho \"===ArrayOverloading===\\n\";\r\n\r\n$people = new Peoples;\r\n\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'FooBar';\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = $people->person[0]['name'] . 'Bar';\r\n__var_dump($people[0]['name']);\r\n// Phalanger calls one more constructor here: $people[0]['name'] .= 'Baz';\r\n__var_dump($people[0]['name']);\r\nunset($people[0]['name']);\r\n__var_dump($people[0]);\r\n__var_dump($people[0]['name']);\r\n$people[0]['name'] = 'BlaBla';\r\n__var_dump($people[0]['name']);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_012.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nclass ArrayAccessImpl implements ArrayAccess {\r\n\tprivate $data = array();\r\n\r\n\tpublic function offsetUnset($index) {}\r\n\r\n\tpublic function offsetSet($index, $value) {\r\n\t\t$this->data[$index] = $value;\r\n\t}\r\n\r\n\tpublic function offsetGet($index) {\r\n\t\treturn $this->data[$index];\r\n\t}\r\n\r\n\tpublic function offsetExists($index) {\r\n\t\treturn isset($this->data[$index]);\r\n\t}\r\n}\r\n\r\n$data = new ArrayAccessImpl();\r\n$test = 'some data';\r\n$data['element'] = NULL; // prevent notice\r\n$data['element'] = &$test;\r\n  \r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/array_access_013.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nclass Test implements ArrayAccess\r\n{\r\n        public function offsetExists($offset)      { throw new Exception(__METHOD__); return false; }\r\n        public function offsetGet($offset)         { throw new Exception(__METHOD__); return $offset; }\r\n        public function offsetSet($offset, $data ) { throw new Exception(__METHOD__); }\r\n        public function offsetUnset($offset)       { throw new Exception(__METHOD__); }\r\n}\r\n\r\n$t = new Test;\r\n\r\ntry\r\n{\r\n\techo isset($t[0]);\r\n}\r\ncatch(Exception $e)\r\n{\r\n    echo \"Caught in \" . $e->getMessage() . \"()\\n\";\r\n}\r\n\r\ntry\r\n{\r\n\techo $t[0];\r\n}\r\ncatch(Exception $e)\r\n{\r\n    echo \"Caught in \" . $e->getMessage() . \"()\\n\";\r\n}\r\n\r\ntry\r\n{\r\n\t$t[0] = 1;\r\n}\r\ncatch(Exception $e)\r\n{\r\n    echo \"Caught in \" . $e->getMessage() . \"()\\n\";\r\n}\r\n\r\ntry\r\n{\r\n\tunset($t[0]);\r\n}\r\ncatch(Exception $e)\r\n{\r\n    echo \"Caught in \" . $e->getMessage() . \"()\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/assign_op_property_001.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\r\nclass Test {\r\n\tprivate $real_a = 2;\r\n\t\r\n\tfunction __set($property, $value) {\r\n\t  if ($property = \"a\") {\r\n\t    $this->real_a = $value;\r\n\t  }\r\n\t}\r\n\r\n\tfunction __get($property) {\r\n\t  if ($property = \"a\") {\r\n\t    return $this->real_a;\r\n\t  }\r\n\t}\r\n}\r\n\r\n$obj = new Test;\r\necho ($obj->a),\"\\n\";\r\n$obj->a += 2;\r\necho ($obj->a),\"\\n\";\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . $class_name . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(class_exists('autoload_root'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . $class_name . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(get_class_methods('autoload_root'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . $class_name . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(class_exists('autoload_derived'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_004.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\t__var_dump(class_exists($class_name));\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . $class_name . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(class_exists('autoload_derived'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\t__var_dump(class_exists($class_name, false));\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . $class_name . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(class_exists('autoload_derived', false));\r\n__var_dump(class_exists('autoload_derived', false));\r\n\r\nclass Test\r\n{\r\n    function __destruct() {\r\n        echo __METHOD__ . \"\\n\";\r\n        $o = new autoload_derived;\r\n        __var_dump($o);\r\n    }\r\n}\r\n\r\n$o = new Test;\r\nunset($o);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninclude('Phalanger.inc');\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\teval(file_get_contents(dirname(__FILE__) . '/' . strtolower($class_name) . '.p5c'));\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n__var_dump(interface_exists('autoload_interface', false));\r\n__var_dump(class_exists('autoload_implements', false));\r\n\r\n$o = new Autoload_Implements;\r\n__var_dump($o);\r\n__var_dump($o instanceof autoload_interface);\r\nunset($o);\r\n\r\n__var_dump(interface_exists('autoload_interface', false));\r\n__var_dump(class_exists('autoload_implements', false));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_derived.p5c",
    "content": "class autoload_derived extends autoload_root {\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_implements.p5c",
    "content": "class autoload_implements implements autoload_interface {\r\n\tfunction testFunction()\r\n\t{\r\n\t\treturn true;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_interface.p5c",
    "content": "interface autoload_interface {\r\n\tfunction testFunction();\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/autoload_root.p5c",
    "content": "class autoload_root {\r\n\tfunction testFunction()\r\n\t{\r\n\t\treturn true;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug23951.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\ndefine('FOO1', 1);\r\ndefine('FOO2', 2);\r\n\r\nclass A {\r\n    \r\n    public $a_var = array(FOO1=>'foo1_value', FOO2=>'foo2_value');\r\n    \r\n}\r\n\r\nclass B extends A {\r\n \r\n    public $b_var = 'foo';   \r\n            \r\n}\r\n\r\n$a = new A;\r\n$b = new B;\r\n\r\n__var_dump($a);\r\n__var_dump($b->a_var);\r\n__var_dump($b->b_var);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug24399.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass dooh {\r\n    public $blah;\r\n}\r\n$d = new dooh;\r\n__var_dump(is_subclass_of($d, 'dooh'));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug24445.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test { }\r\n__var_dump(get_parent_class('Test'));\r\n$t = new Test;\r\n__var_dump(get_parent_class($t));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug26737.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nclass foo\r\n{\r\n\tprivate $private = 'private';\r\n\tprotected $protected = 'protected';\r\n\tpublic $public = 'public';\r\n\r\n\tpublic function __sleep()\r\n\t{\r\n\t\treturn array('private', 'protected', 'public', 'no_such');\r\n\t}\r\n}\r\n$foo = new foo();\r\n$data = @serialize($foo);\r\necho (str_replace(\"\\0\", '\\0', $data));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug27468.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  error_reporting(0);\r\n\r\nclass foo {\r\n\tfunction __destruct() {\r\n\t\tforeach ($this->x as $x);\r\n\t}\r\n}\r\nnew foo();\r\necho 'OK';\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug27504.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  error_reporting(0);\r\n\r\n\tclass foo {\r\n\t\tfunction __construct () {\r\n\t\t\t$this->bar('1');\r\n\t\t}\r\n\t\tprivate function bar ( $param ) {\r\n\t\t\techo 'Called function foo:bar('.$param.')'.\"\\n\";\r\n\t\t}\r\n\t}\r\n\r\n\t$foo = new foo();\r\n\r\n\tcall_user_func_array( array( $foo , 'bar' ) , array( '2' ) );\r\n\r\n\t$foo->bar('3');\r\n\t\r\n\techo \"NR\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/bug29446.php.error",
    "content": "--TEST--\r\nBug #29446 (ZE allows multiple declarations of the same class constant)\r\n--FILE--\r\n<?php\r\n\r\nclass testClass {\r\n  const TEST_CONST = 'test';\r\n  const TEST_CONST = 'test1';\r\n  \r\n  function testClass() {\r\n    echo self::TEST_CONST;\r\n  }\r\n}\r\n\r\n$test = new testClass;\r\n\r\n?>\r\n--EXPECTF--\r\nFatal error: Cannot redefine class constant testClass::TEST_CONST in %s on line 5"
  },
  {
    "path": "Testing/Tests/@PHP/classes/class_abstract.php.error",
    "content": "--TEST--\r\nZE2 An abstract class cannot be instanciated\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nabstract class base {\r\n\tfunction show() {\r\n\t\techo \"base\\n\";\r\n\t}\r\n}\r\n\r\nclass derived extends base {\r\n}\r\n\r\n$t = new derived();\r\n$t->show();\r\n\r\n$t = new base();\r\n$t->show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nbase\r\n\r\nFatal error: Cannot instantiate abstract class base in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/class_example.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n/* pretty nifty object oriented code! */\r\n\r\nclass user {\r\n  public $first_name,$family_name,$address,$phone_num;\r\n  function display()\r\n  {\r\n    echo \"User information\\n\";\r\n    echo \"----------------\\n\\n\";\r\n    echo \"First name:\\t  \".$this->first_name.\"\\n\";\r\n    echo \"Family name:\\t  \".$this->family_name.\"\\n\";\r\n    echo \"Address:\\t  \".$this->address.\"\\n\";\r\n    echo \"Phone:\\t\\t  \".$this->phone_num.\"\\n\";\r\n    echo \"\\n\\n\";\r\n  }\r\n  function initialize($first_name,$family_name,$address,$phone_num)\r\n  {\r\n    $this->first_name = $first_name;\r\n    $this->family_name = $family_name;\r\n    $this->address = $address;\r\n    $this->phone_num = $phone_num;\r\n  }\r\n};\r\n\r\n\r\nfunction test($u)\r\n{  /* one can pass classes as arguments */\r\n  $u->display();\r\n  $t = $u;\r\n  $t->address = \"New address...\";\r\n  return $t;  /* and also return them as return values */\r\n}\r\n\r\n$user1 = new user;\r\n$user2 = new user;\r\n\r\n$user1->initialize(\"Zeev\",\"Suraski\",\"Ben Gourion 3, Kiryat Bialik, Israel\",\"+972-4-8713139\");\r\n$user2->initialize(\"Andi\",\"Gutmans\",\"Haifa, Israel\",\"+972-4-8231621\");\r\n$user1->display();\r\n$user2->display();\r\n\r\n$tmp = test($user2);\r\n$tmp->display();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/class_final.php.error",
    "content": "--TEST--\r\nZE2 A final class cannot be inherited\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nfinal class base {\r\n\tfunction show() {\r\n\t\techo \"base\\n\";\r\n\t}\r\n}\r\n\r\n$t = new base();\r\n\r\nclass derived extends base {\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Class derived may not inherit from final class (base) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/class_stdclass.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$obj = new stdClass;\r\n\r\necho get_class($obj).\"\\n\";\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass test {\r\n\tpublic $p1 = 1;\r\n\tpublic $p2 = 2;\r\n\tpublic $p3;\r\n};\r\n\r\n$obj = new test;\r\n$obj->p2 = 'A';\r\n$obj->p3 = 'B';\r\n$copy = clone $obj;\r\n$copy->p3 = 'C';\r\necho \"object\\n\";\r\n__var_dump($obj);\r\necho \"Clown\\n\";\r\n__var_dump($copy);\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nclass test {\r\n\tpublic $p1 = 1;\r\n\tpublic $p2 = 2;\r\n\tpublic $p3;\r\n\tpublic function __clone() {\r\n\t}\r\n};\r\n\r\n$obj = new test;\r\n$obj->p2 = 'A';\r\n$obj->p3 = 'B';\r\n$copy = clone $obj;\r\n$copy->p3 = 'C';\r\necho \"object\\n\";\r\n__var_dump($obj);\r\necho \"Clown\\n\";\r\n__var_dump($copy);\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nclass base {\r\n\tprotected $p1 = 'base:1';\r\n\tpublic $p2 = 'base:2';\r\n\tpublic $p3 = 'base:3';\r\n\tpublic $p4 = 'base:4';\r\n\tpublic $p5 = 'base:5';\r\n\tprivate $p6 = 'base:6';\r\n\tpublic function __clone() {\r\n\t}\r\n};\r\n\r\nclass test extends base {\r\n\tpublic $p1 = 'test:1';\r\n\tpublic $p3 = 'test:3';\r\n\tpublic $p4 = 'test:4';\r\n\tpublic $p5 = 'test:5';\r\n\tpublic function __clone() {\r\n\t\t$this->p5 = 'clone:5';\r\n\t}\r\n}\r\n\r\n$obj = new test;\r\n$obj->p4 = 'A';\r\n$copy = clone $obj;\r\necho \"object\\n\";\r\n__var_dump($obj);\r\necho \"Clown\\n\";\r\n__var_dump($copy);\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nabstract class base {\r\n  public $a = 'base';\r\n\r\n  // disallow cloning\r\n  private function __clone() {}\r\n}\r\n\r\nclass test extends base {\r\n  public $b = 'test';\r\n\r\n  // reenable cloning\r\n  public function __clone() {}\r\n\r\n  public function show() {\r\n\t__var_dump($this);\r\n  }\r\n}\r\n\r\necho \"Original\\n\";\r\n$o1 = new test;\r\n$o1->a = array(1,2);\r\n$o1->b = array(3,4);\r\n$o1->show();\r\n\r\necho \"Clone\\n\";\r\n$o2 = clone $o1;\r\n$o2->show();\r\n\r\necho \"Modify\\n\";\r\n$o2->a = 5;\r\n$o2->b = 6;\r\n$o2->show();\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_005.php.error",
    "content": "--TEST--\r\nZE2 object cloning, 5\r\n--FILE--\r\n<?php\r\nabstract class base {\r\n  public $a = 'base';\r\n\r\n  // disallow cloning once forever\r\n  final private function __clone() {}\r\n}\r\n\r\nclass test extends base {\r\n  // reenabling should fail\r\n  public function __clone() {}\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\nFatal error: Cannot override final method base::__clone() in %sclone_005.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/clone_006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass MyCloneable {\r\n\tstatic $id = 0;\r\n\r\n\tfunction MyCloneable() {\r\n\t\t$this->id = self::$id++;\r\n\t}\r\n\r\n\tfunction __clone() {\r\n\t\t$this->address = \"New York\";\r\n\t\t$this->id = self::$id++;\r\n\t}\r\n}\r\n\r\n$original = new MyCloneable();\r\n\r\n$original->name = \"Hello\";\r\n$original->address = \"Tel-Aviv\";\r\n\r\necho $original->id . \"\\n\";\r\n\r\n$clone = clone $original;\r\n\r\necho $clone->id . \"\\n\";\r\necho $clone->name . \"\\n\";\r\necho $clone->address . \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/constants_scope_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass ErrorCodes {\r\n\tconst FATAL = \"Fatal error\\n\";\r\n\tconst WARNING = \"Warning\\n\";\r\n\tconst INFO = \"Informational message\\n\";\r\n\r\n\tstatic function print_fatal_error_codes() {\r\n\t\techo @(\"FATAL = \" . FATAL . \"\\n\");\r\n\t\techo \"self::FATAL = \" . self::FATAL;\r\n    }\r\n}\r\n\r\nclass ErrorCodesDerived extends ErrorCodes {\r\n\tconst FATAL = \"Worst error\\n\";\r\n\tstatic function print_fatal_error_codes() {\r\n\t\techo \"self::FATAL = \" . self::FATAL;\r\n\t\techo \"parent::FATAL = \" . parent::FATAL;\r\n    }\r\n}\r\n\r\n/* Call the static function and move into the ErrorCodes scope */\r\nErrorCodes::print_fatal_error_codes();\r\nErrorCodesDerived::print_fatal_error_codes();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/ctor_dtor.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass early {\r\n\tfunction early() {\r\n\t\techo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t}\r\n\tfunction __destruct() {\r\n\t\t// Phalanger non-deterministic: echo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t}\r\n}\r\n\r\nclass late {\r\n\tfunction __construct() {\r\n\t\techo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t}\r\n\tfunction __destruct() {\r\n\t\t// Phalanger non-deterministic: echo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t}\r\n}\r\n\r\n$t = new early();\r\n$t->early();\r\nunset($t);\r\n$t = new late();\r\n//unset($t); delay to end of script\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/ctor_dtor_inheritance.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n// This test checks for:\r\n// - inherited constructors/destructors are not called automatically\r\n// - base classes know about derived properties in constructor/destructor\r\n// - base class constructors/destructors know the instanciated class name\r\n\r\nclass base {\r\n\tpublic $name;\r\n\r\n\tfunction __construct() {\r\n\t\techo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t\t$this->name = 'base';\r\n\t\t__var_dump($this);\r\n\t}\r\n\t\r\n\tfunction __destruct() {\r\n\t\t// Phalanger ND: echo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t\t//__var_dump($this);\r\n\t}\r\n}\r\n\r\nclass derived extends base {\r\n\tpublic $other;\r\n\r\n\tfunction __construct() {\r\n\t\t$this->name = 'init';\r\n\t\t$this->other = 'other';\r\n\t\t__var_dump($this);\r\n\t\tparent::__construct();\r\n\t\techo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t\t$this->name = 'derived';\r\n\t\t__var_dump($this);\r\n\t}\r\n\r\n\tfunction __destruct() {\r\n\t\tparent::__destruct();\r\n\t\t// Phalanger ND: echo __CLASS__ . \"::\" . __FUNCTION__ . \"\\n\";\r\n\t\t// Phalanger ND: __var_dump($this);\r\n\t}\r\n}\r\n\r\necho \"Testing class base\\n\";\r\n$t = new base();\r\nunset($t);\r\necho \"Testing class derived\\n\";\r\n$t = new derived();\r\nunset($t);\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/ctor_failure.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test\r\n{\r\n    function __construct($msg) {\r\n        echo __METHOD__ . \"($msg)\\n\";\r\n        throw new Exception($msg);\r\n    }\r\n    \r\n    function __destruct() {\r\n        echo __METHOD__ . \"\\n\";\r\n    }\r\n}\r\n\r\ntry\r\n{\r\n    $o = new Test('Hello');\r\n    unset($o);\r\n}\r\ncatch (Exception $e)\r\n{\r\n    echo 'Caught ' . get_class($e) . '(' . $e->getMessage() . \")\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/ctor_name_clash.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass base {\r\n  function base() {\r\n    echo __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n  }\r\n}\r\n\r\nclass derived extends base {\r\n  function base() {\r\n    echo __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n  }\r\n}\r\n\r\n$obj = new derived();\r\n$obj->base();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/dereferencing_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Name {\r\n\tfunction Name($_name) {\r\n\t\t$this->name = $_name;\r\n\t}\r\n\r\n\tfunction display() {\r\n\t\techo $this->name . \"\\n\";\r\n\t}\r\n}\r\n\r\nclass Person {\r\n\tprivate $name;\r\n\r\n\tfunction person($_name, $_address) {\r\n\t\t$this->name = new Name($_name);\r\n\t}\r\n\r\n\tfunction getName() {\r\n\t\treturn $this->name;\r\n\t}\r\n}\r\n\r\n$person = new Person(\"John\", \"New York\");\r\n$person->getName()->display();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_and_echo.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test\r\n{\r\n    function __construct() {\r\n        echo __METHOD__ . \"\\n\";\r\n    }\r\n    \r\n    function __destruct() {\r\n        echo __METHOD__ . \"\\n\";\r\n    }\r\n}\r\n\r\n$o = new Test;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_and_exceptions.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass FailClass\r\n{\r\n\tpublic $fatal;\r\n\r\n\tfunction __destruct()\r\n\t{\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tthrow new exception(\"FailClass\");\r\n\t\techo \"Done: \" . __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\ntry\r\n{\r\n\t$a = new FailClass;\r\n\tunset($a);\r\n}\r\ncatch(Exception $e)\r\n{\r\n\techo \"Caught: \" . $e->getMessage() . \"\\n\";\r\n}\r\n\r\nclass FatalException extends Exception\r\n{\r\n\tfunction __construct($what)\r\n\t{\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$o = new FailClass;\r\n\t\tunset($o);\r\n\t\techo \"Done: \" . __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\ntry\r\n{\r\n\tthrow new FatalException(\"Damn\");\r\n}\r\ncatch(Exception $e)\r\n{\r\n\techo \"Caught Exception: \" . $e->getMessage() . \"\\n\";\r\n}\r\ncatch(FatalException $e)\r\n{\r\n\techo \"Caught FatalException: \" . $e->getMessage() . \"\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_and_globals.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$test_cnt = 0;\r\n$test_num = 0;\r\n\r\nfunction Show() {\r\n  global $test_cnt;\r\n  echo \"Count: $test_cnt\\n\";\r\n}\r\n\r\nclass counter {\r\n  protected $id;\r\n\r\n  public function __construct() {\r\n    global $test_cnt, $test_num;\r\n    $test_cnt++;\r\n    $this->id = $test_num++;\r\n  }\r\n\r\n  public function Show() {\r\n    echo 'Id: '.$this->id.\"\\n\";\r\n  }\r\n\r\n  // try protected here\r\n  public function __destruct() {\r\n    global $test_cnt;\r\n    $test_cnt--;\r\n  }\r\n  \r\n  static public function destroy(&$obj) {\r\n  \t$obj = NULL;\r\n  \t}\r\n}\r\nShow();\r\n$obj1 = new counter;\r\n$obj1->Show();\r\nShow();\r\n$obj2 = new counter;\r\n$obj2->Show();\r\nShow();\r\ncounter::destroy($obj1);\r\nShow();\r\n// or uncomment this line and it works\r\n//counter::destroy($obj2);\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_and_references.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass test1 {public $x;};\r\nclass test2 {public $x;};\r\nclass test3 {public $x;};\r\nclass test4 {public $x;};\r\n\r\n$o1 = new test1;\r\n$o2 = new test2;\r\n$o3 = new test3;\r\n$o4 = new test4;\r\n\r\n$o3->x = &$o4;\r\n\r\n$r1 = &$o1;\r\n\r\nclass once {}\r\n\r\n$o = new once;\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_inheritance.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nclass base {\r\n   function __construct() {\r\n      echo __METHOD__ . \"\\n\";\r\n   }\r\n   \r\n   function __destruct() {\r\n      // Phalanger: not deterministic echo __METHOD__ . \"\\n\";\r\n   }\r\n}\r\n\r\nclass derived extends base {\r\n}\r\n\r\n$obj = new derived;\r\n\r\nunset($obj);\r\n\r\necho 'Done';\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_visibility_001.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  error_reporting(0);\r\n\r\nclass Base {\r\n\tprivate function __destruct() {\r\n    \techo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\nclass Derived extends Base {\r\n}\r\n\r\n$obj = new Derived;\r\n\r\nunset($obj);\r\n\r\necho \"NR\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_visibility_002.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\r\nclass Base {\r\n\tprivate function __destruct() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\nclass Derived extends Base {\r\n}\r\n\r\n@$obj = new Derived;\r\n\r\necho \"Warning\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/destructor_visibility_003.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\r\nclass Base {\r\n\tprivate function __destruct() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\nclass Derived extends Base {\r\n\tpublic function __destruct() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\n$obj = new Derived;\r\n\r\nunset($obj); // Derived::__destruct is being called not Base::__destruct\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Circle {\r\n\tfunction draw() {\r\n\t\techo \"Circle\\n\";\r\n\t}\r\n}\r\n\r\nclass Square {\r\n\tfunction draw() {\r\n\t\techo \"Square\\n\";\r\n\t}\r\n}\r\n\r\nfunction ShapeFactoryMethod($shape) {\r\n\tswitch ($shape) {\r\n\t\tcase \"Circle\":\r\n\t\t\treturn new Circle();\r\n\t\tcase \"Square\":\r\n\t\t\treturn new Square();\r\n\t}\r\n}\r\n\r\nShapeFactoryMethod(\"Circle\")->draw();\r\nShapeFactoryMethod(\"Square\")->draw();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nclass test {\r\n  protected $x;\r\n\r\n  static private $test = NULL;\r\n  static private $cnt = 0;\r\n\r\n  static function factory($x) {\r\n    if (test::$test) {\r\n      return test::$test;\r\n    } else {\r\n      test::$test = new test($x);\r\n      return test::$test;\r\n    }\r\n  }\r\n\r\n  protected function __construct($x) {\r\n    test::$cnt++;\r\n    $this->x = $x;\r\n  }\r\n\r\n  static function destroy() {\r\n    test::$test = NULL;\r\n  }\r\n\r\n  protected function __destruct() {\r\n  \ttest::$cnt--;\r\n  }\r\n\r\n  public function get() {\r\n    return $this->x;\r\n  }\r\n\r\n  static public function getX() {\r\n    if (test::$test) {\r\n      return test::$test->x;\r\n    } else {\r\n      return NULL;\r\n    }\r\n  }\r\n  \r\n  static public function count() {\r\n    return test::$cnt;\r\n  }\r\n}\r\n\r\necho \"Access static members\\n\";\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n\r\necho \"Create x and y\\n\";\r\n$x = test::factory(1);\r\n$y = test::factory(2);\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n__var_dump($x->get());\r\n__var_dump($y->get());\r\n\r\necho \"Destruct x\\n\";\r\n$x = NULL;\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n__var_dump($y->get());\r\n\r\necho \"Destruct y\\n\";\r\n$y = NULL;\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n\r\necho \"Destruct static\\n\";\r\ntest::destroy();\r\n__var_dump(test::getX());\r\n\r\n//commented out as it relies on deterministic destruction:\r\n//__var_dump(test::count());\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nclass test {\r\n  protected $x;\r\n\r\n  static private $test = NULL;\r\n  static private $cnt = 0;\r\n\r\n  static function factory($x) {\r\n    if (test::$test) {\r\n      return test::$test;\r\n    } else {\r\n      test::$test = new test($x);\r\n      return test::$test;\r\n    }\r\n  }\r\n\r\n  protected function __construct($x) {\r\n    test::$cnt++;\r\n    $this->x = $x;\r\n  }\r\n\r\n  static function destroy() {\r\n    test::$test = NULL;\r\n  }\r\n\r\n  protected function __destruct() {\r\n  \ttest::$cnt--;\r\n  }\r\n\r\n  public function get() {\r\n    return $this->x;\r\n  }\r\n\r\n  static public function getX() {\r\n    if (test::$test) {\r\n      return test::$test->x;\r\n    } else {\r\n      return NULL;\r\n    }\r\n  }\r\n  \r\n  static public function count() {\r\n    return test::$cnt;\r\n  }\r\n}\r\n\r\necho \"Access static members\\n\";\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n\r\necho \"Create x and y\\n\";\r\n$x = test::factory(1);\r\n$y = test::factory(2);\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n__var_dump($x->get());\r\n__var_dump($y->get());\r\n\r\necho \"Destruct x\\n\";\r\n$x = NULL;\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n__var_dump($y->get());\r\n\r\necho \"Destruct y\\n\";\r\n$y = NULL;\r\n__var_dump(test::getX());\r\n__var_dump(test::count());\r\n\r\n//echo \"Destruct static\\n\";\r\n//test::destroy();\r\n//__var_dump(test::getX());\r\n//__var_dump(test::count());\r\n\r\necho \"Done\\n\";\r\n\r\nerror_reporting(0);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_003.php.error",
    "content": "--TEST--\r\nZE2 factory and singleton, test 3\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\nclass test {\r\n\r\n  protected function __construct($x) {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n\r\necho \"Done\\n\";\r\n?>\r\n--EXPECTF--\r\nFatal error: Call to protected test::__construct() from context '' %sfactory_and_singleton_003.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_004.php.error",
    "content": "--TEST--\r\nZE2 factory and singleton, test 4\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\nclass test {\r\n\r\n  private function __construct($x) {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n\r\necho \"Done\\n\";\r\n?>\r\n--EXPECTF--\r\nFatal error: Call to private test::__construct() from context '' %sfactory_and_singleton_004.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_005.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  protected function __destruct() {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n$obj = NULL;\r\n\r\necho \"Done\\n\";\r\n?>\r\n--EXPECTF--\r\nFatal error: Call to protected test::__destruct() from context '' in %sfactory_and_singleton_005.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_006.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  private function __destruct() {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n$obj = NULL;\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_007.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  protected function __clone() {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n$clone = clone $obj;\r\n$obj = NULL;\r\n\r\necho \"Done\\n\";\r\n?>\r\n--EXPECTF--\r\nFatal error: Call to protected test::__clone() from context '' %sfactory_and_singleton_007.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_008.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  private function __clone() {\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n$clone = clone $obj;\r\n$obj = NULL;\r\n\r\necho \"Done\\n\";\r\n?>\r\n--EXPECTF--\r\nFatal error: Call to private test::__clone() from context '' %sfactory_and_singleton_008.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_009.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  protected function __destruct() {\r\n  \techo __METHOD__ . \"\\n\";\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n\r\n?>\r\n===DONE===\r\n--EXPECTF--\r\n===DONE===\r\n\r\nWarning: Call to protected test::__destruct() from context '' during shutdown ignored in Unknown on line 0\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/factory_and_singleton_010.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test {\r\n\r\n  private function __destruct() {\r\n  \techo __METHOD__ . \"\\n\";\r\n  }\r\n}\r\n\r\n$obj = new test;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/final.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass first {\r\n\tfunction show() {\r\n\t\techo \"Call to function first::show()\\n\";\r\n\t}\r\n}\r\n\r\n$t = new first();\r\n$t->show();\r\n\r\nclass second extends first {\r\n\tfinal function show() {\r\n\t\techo \"Call to function second::show()\\n\";\r\n\t}\r\n}\r\n\r\n$t2 = new second();\r\n$t2->show();\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/final_abstract.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass fail {\r\n\tfinal abstract function show();\r\n}\r\n\r\necho \"Done\\n\"; // Shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot use the final modifier on an abstract class member in %s\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/final_ctor1.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Base\r\n{\r\n\tpublic final function __construct()\r\n\t{\r\n\t}\r\n}\r\n\r\nclass Works extends Base\r\n{\r\n}\r\n\r\nclass Extended extends Base\r\n{\r\n\tpublic function Extended()\r\n\t{\r\n\t}\r\n}\r\n\r\nReflectionClass::export('Extended');\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot override final Base::__construct() with Extended::Extended() in %sfinal_ctor1.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/final_ctor2.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Base\r\n{\r\n\tpublic final function Base()\r\n\t{\r\n\t}\r\n}\r\n\r\nclass Works extends Base\r\n{\r\n}\r\n\r\nclass Extended extends Base\r\n{\r\n\tpublic function __construct()\r\n\t{\r\n\t}\r\n}\r\n\r\nReflectionClass::export('Extended');\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot override final Base::Base() with Extended::__construct() in %sfinal_ctor2.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/final_redeclare.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass pass {\r\n\tfinal function show() {\r\n\t\techo \"Call to function pass::show()\\n\";\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n\r\nclass fail extends pass {\r\n\tfunction show() {\r\n\t\techo \"Call to function fail::show()\\n\";\r\n\t}\r\n}\r\n\r\necho \"Done\\n\"; // Shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Cannot override final method pass::show() in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/incdec_property_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test {\r\n\tprivate $real_a = 2;\r\n\t\r\n\tfunction __set($property, $value) {\r\n\t  if ($property = \"a\") {\r\n\t    $this->real_a = $value;\r\n\t  }\r\n\t}\r\n\r\n\tfunction __get($property) {\r\n\t  if ($property = \"a\") {\r\n\t    return $this->real_a;\r\n\t  }\r\n\t}\r\n}\r\n\r\n$obj = new Test;\r\n__var_dump($obj->a);\r\n$obj->a++;\r\n__var_dump($obj->a);\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/incdec_property_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test {\r\n\tprivate $real_a = 2;\r\n\t\r\n\tfunction __set($property, $value) {\r\n\t  if ($property = \"a\") {\r\n\t    $this->real_a = $value;\r\n\t  }\r\n\t}\r\n\r\n\tfunction __get($property) {\r\n\t  if ($property = \"a\") {\r\n\t    return $this->real_a;\r\n\t  }\r\n\t}\r\n}\r\n\r\n$obj = new Test;\r\n__var_dump($obj->a);\r\n$t1 = $obj->a++;\r\n__var_dump($obj->a);\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/incdec_property_003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test {\r\n\tprivate $real_a = 2;\r\n\t\r\n\tfunction __set($property, $value) {\r\n\t  if ($property = \"a\") {\r\n\t    $this->real_a = $value;\r\n\t  }\r\n\t}\r\n\r\n\tfunction __get($property) {\r\n\t  if ($property = \"a\") {\r\n\t    return $this->real_a;\r\n\t  }\r\n\t}\r\n}\r\n\r\n$obj = new Test;\r\n__var_dump($obj->a);\r\n++$obj->a;\r\n__var_dump($obj->a);\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/incdec_property_004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Test {\r\n\tprivate $real_a = 2;\r\n\t\r\n\tfunction __set($property, $value) {\r\n\t  if ($property = \"a\") {\r\n\t    $this->real_a = $value;\r\n\t  }\r\n\t}\r\n\r\n\tfunction __get($property) {\r\n\t  if ($property = \"a\") {\r\n\t    return $this->real_a;\r\n\t  }\r\n\t}\r\n}\r\n\r\n$obj = new Test;\r\n__var_dump($obj->a);\r\n$t1 = ++$obj->a;\r\n__var_dump($obj->a);\r\necho \"---Done---\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/inheritance.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n/* Inheritance test.  Pretty nifty if I do say so myself! */\r\n\r\nclass foo {\r\n  public $a;\r\n  public $b;\r\n  function display() {\r\n  \techo \"This is class foo\\n\";\r\n    echo \"a = \".$this->a.\"\\n\";\r\n    echo \"b = \".$this->b.\"\\n\";\r\n  }\r\n  function mul() {\r\n    return $this->a*$this->b;\r\n  }\r\n};\r\n\r\nclass bar extends foo {\r\n  public $c;\r\n  function display() {  /* alternative display function for class bar */\r\n    echo \"This is class bar\\n\";\r\n    echo \"a = \".$this->a.\"\\n\";\r\n    echo \"b = \".$this->b.\"\\n\";\r\n    echo \"c = \".$this->c.\"\\n\";\r\n  }\r\n};\r\n\r\n\r\n$foo1 = new foo;\r\n$foo1->a = 2;\r\n$foo1->b = 5;\r\n$foo1->display();\r\necho $foo1->mul().\"\\n\";\r\n\r\necho \"-----\\n\";\r\n\r\n$bar1 = new bar;\r\n$bar1->a = 4;\r\n$bar1->b = 3;\r\n$bar1->c = 12;\r\n$bar1->display();\r\necho $bar1->mul().\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/inheritance_002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Base_php4 {\r\n  function Base_php4() {\r\n    __var_dump('Base constructor');\r\n  }\r\n}\r\n\r\nclass Child_php4 extends Base_php4 {\r\n  function Child_php4() {\r\n    __var_dump('Child constructor');\r\n    parent::Base_php4();\r\n  }\r\n}\r\n\r\nclass Base_php5 {\r\n  function __construct() {\r\n    __var_dump('Base constructor');\r\n  }\r\n  }\r\n\r\nclass Child_php5 extends Base_php5 {\r\n  function __construct() {\r\n    __var_dump('Child constructor');\r\n    parent::__construct();\r\n  }\r\n  }\r\n\r\nclass Child_mx1 extends Base_php4 {\r\n  function __construct() {\r\n    __var_dump('Child constructor');\r\n    parent::Base_php4();\r\n  }\r\n}\r\n\r\nclass Child_mx2 extends Base_php5 {\r\n  function Child_mx2() {\r\n    __var_dump('Child constructor');\r\n    parent::__construct();\r\n  }\r\n}\r\n\r\necho \"### PHP 4 style\\n\";\r\n$c4= new Child_php4();\r\n\r\necho \"### PHP 5 style\\n\";\r\n$c5= new Child_php5();\r\n\r\necho \"### Mixed style 1\\n\";\r\n$cm= new Child_mx1();\r\n\r\necho \"### Mixed style 2\\n\";\r\n$cm= new Child_mx2();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_and_extends.php.error",
    "content": "--TEST--\r\nZE2 a class cannot extend an interface \r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface Test\r\n{\r\n\tfunction show();\r\n}\r\n\r\nclass Tester extends Test\r\n{\r\n\tfunction show() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\n$o = new Tester;\r\n$o->show();\r\n\r\n?>\r\n===DONE===\r\n--EXPECTF--\r\nFatal error: Class Tester cannot extend from interface Test in %sinterface_and_extends.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_class.php.error",
    "content": "--TEST--\r\nZE2 A class can only implement interfaces\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\nclass base {\r\n}\r\n\t\r\nclass derived implements base {\r\n}\r\n?>\r\n--EXPECTF--\r\nFatal error: derived cannot implement base - it is not an interface in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_construct.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(4095);\r\n\r\ninterface test {\r\n\t// originally:\r\n\t// (will not work in PHP 5.2 anyway)\r\n\t//public function __construct($foo);\r\n\t\r\n\t// changed to:\r\n\tpublic function __construct();\r\n}\r\n\r\nclass foo implements test {\r\n\tpublic function __construct() {\r\n\t\techo \"foo\\n\";\r\n\t}\r\n}\r\n\r\n$foo = new foo;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_doubled.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninterface if_a {\r\n\tfunction f_a();\r\n}\r\n\t\r\ninterface if_b {\r\n\tfunction f_b();\r\n}\r\n\r\ninterface if_c extends if_a, if_b {\r\n\tfunction f_c();\r\n}\r\n\r\ninterface if_d extends if_a, if_b {\r\n\tfunction f_d();\r\n}\r\n\r\ninterface if_e {\r\n\tfunction f_d();\r\n}\r\n\r\ninterface if_f extends /*if_e,*/ if_a, if_b, if_c, if_d /*, if_e*/ {\r\n}\r\n\r\nclass base {\r\n\tfunction test($class) {\r\n\t\techo \"is_a(\" . get_class($this) . \", $class) \". (($this instanceof $class) ? \"yes\\n\" : \"no\\n\");\r\n\t}\r\n}\r\n\r\necho \"class_a\\n\";\r\n\r\nclass class_a extends base implements if_a {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_a();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_b\\n\";\r\n\r\nclass class_b extends base implements if_a, if_b {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_b();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_c\\n\";\r\n\r\nclass class_c extends base implements if_c {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_c();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_d\\n\";\r\n\r\nclass class_d extends base implements if_d{\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_d();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_e\\n\";\r\n\r\nclass class_e extends base implements if_a, if_b, if_c, if_d {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_e();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_f\\n\";\r\n\r\nclass class_f extends base implements if_e {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_f();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\necho \"class_g\\n\";\r\n\r\nclass class_g extends base implements if_f {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n\tfunction f_c() {}\r\n\tfunction f_d() {}\r\n\tfunction f_e() {}\r\n}\r\n\r\n$t = new class_g();\r\necho $t->test('if_a');\r\necho $t->test('if_b');\r\necho $t->test('if_c');\r\necho $t->test('if_d');\r\necho $t->test('if_e');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_implemented.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninterface if_a {\r\n\tfunction f_a();\r\n}\r\n\t\r\ninterface if_b extends if_a {\r\n\tfunction f_b();\r\n}\r\n\r\nclass base {\r\n\tfunction _is_a($sub) {\r\n\t\techo 'is_a('.get_class($this).', '.$sub.') = '.(($this instanceof $sub) ? 'yes' : 'no').\"\\n\";\r\n\t}\r\n\tfunction test() {\r\n\t\techo $this->_is_a('base');\r\n\t\techo $this->_is_a('derived_a');\r\n\t\techo $this->_is_a('derived_b');\r\n\t\techo $this->_is_a('derived_c');\r\n\t\techo $this->_is_a('derived_d');\r\n\t\techo $this->_is_a('if_a');\r\n\t\techo $this->_is_a('if_b');\r\n\t\techo \"\\n\";\r\n\t}\r\n}\r\n\r\nclass derived_a extends base implements if_a {\r\n\tfunction f_a() {}\r\n}\r\n\r\nclass derived_b extends base implements if_a, if_b {\r\n\tfunction f_a() {}\r\n\tfunction f_b() {}\r\n}\r\n\r\nclass derived_c extends derived_a implements if_b {\r\n\tfunction f_b() {}\r\n}\r\n\r\nclass derived_d extends derived_c {\r\n}\r\n\r\n$t = new base();\r\n$t->test();\r\n\r\n$t = new derived_a();\r\n$t->test();\r\n\r\n$t = new derived_b();\r\n$t->test();\r\n\r\n$t = new derived_c();\r\n$t->test();\r\n\r\n$t = new derived_d();\r\n$t->test();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_instantiate.php.error",
    "content": "--TEST--\r\nZE2 An interface cannot be instantiated\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface if_a {\r\n\tfunction f_a();\r\n}\r\n\t\r\n$t = new if_a();\r\n\r\n?>\r\n--EXPECTF--\r\nFatal error: Cannot instantiate interface if_a in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_member.php.error",
    "content": "--TEST--\r\nZE2 An interface cannot have properties\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface if_a {\r\n\tpublic $member;\r\n}\r\n?>\r\n--EXPECTF--\r\nFatal error: Interfaces may not include member variables in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_method.php.error",
    "content": "--TEST--\r\nZE2 An interface method must be abstract\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface if_a {\r\n\tfunction err() {};\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Interface function if_a::err() cannot contain body %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_method_final.php.error",
    "content": "--TEST--\r\nZE2 An interface method cannot be final\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nclass if_a {\r\n\tabstract final function err();\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot use the final modifier on an abstract class member in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_method_private.php.error",
    "content": "--TEST--\r\nZE2 An interface method cannot be private\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface if_a {\r\n\tabstract private function err();\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Access type for interface method if_a::err() must be omitted in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_must_be_implemented.php.error",
    "content": "--TEST--\r\nZE2 An interface must be implemented\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface if_a {\r\n\tfunction f_a();\r\n}\r\n\t\r\nclass derived_a implements if_a {\r\n}\r\n\r\n?>\r\n--EXPECTF--\r\nFatal 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\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_optional_arg.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(4095);\r\n\r\ninterface test {\r\n\tpublic function bar();\r\n}\r\n\r\nclass foo implements test {\r\n\r\n\tpublic function bar($foo = NULL) {\r\n\t\techo \"foo\\n\";\r\n\t}\r\n}\r\n\r\n$foo = new foo;\r\n$foo->bar();\r\n\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interface_optional_arg.removed.phpt.kb",
    "content": "--TEST--\r\nZE2 An interface method allows additional default arguments\r\n--FILE--\r\n<?php\r\n\r\ninterface test {\r\n\tpublic function bar();\r\n}\r\n\r\nclass foo implements test {\r\n\r\n\tpublic function bar($foo = NULL) {\r\n\t\techo \"foo\\n\";\r\n\t}\r\n}\r\n\r\n$foo = new foo;\r\n$foo->bar();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interfaces_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninterface Throwable {\r\n\tpublic function getMessage();\r\n}\r\n\r\nclass Exception_foo implements Throwable {\r\n\tpublic $foo = \"foo\";\r\n\r\n\tpublic function getMessage() {\r\n\t\treturn $this->foo;\r\n\t}\r\n}\r\n\r\n$foo = new Exception_foo;\r\necho $foo->getMessage() . \"\\n\";\r\n\r\n?>\r\n\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interfaces_002.php.error",
    "content": "--TEST--\r\nZE2 interface with an unimplemented method\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\ninterface Throwable {\r\n\tpublic function getMessage();\r\n\tpublic function getErrno();\r\n}\r\n\r\nclass Exception_foo implements Throwable {\r\n\tpublic $foo = \"foo\";\r\n\r\n\tpublic function getMessage() {\r\n\t\treturn $this->foo;\r\n\t}\r\n}\r\n\r\n// this should die -- Exception class must be abstract...\r\n$foo = new Exception_foo;\r\necho \"Message: \" . $foo->getMessage() . \"\\n\";\r\n\r\n?>\r\n===DONE===\r\n--EXPECTF--\r\n\r\nFatal 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\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/interfaces_003.php.error",
    "content": "--TEST--\r\nZE2 interface and __construct\r\n--FILE--\r\n<?php\r\n\r\nclass MyObject {}\r\n\r\ninterface MyInterface\r\n{\r\n\tpublic function __construct(Object $o);\r\n}\r\n\r\nclass MyTestClass implements MyInterface\r\n{\r\n\tpublic function __construct(Object $o)\r\n\t{\r\n\t}\r\n}\r\n\r\n$obj = new MyTestClass;\r\n\r\nclass MyTestFail\r\n{\r\n\tpublic function __construct()\r\n\t{\r\n\t}\r\n}\r\n\r\n?>\r\n===DONE===\r\n--EXPECTF--\r\n\r\nFatal error: Argument 1 passed to MyTestClass::__construct() must be an object of class Object, called in %sinterfaces_003.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_001.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nclass c_iter implements Iterator {\r\n\r\n\tprivate $obj;\r\n\tprivate $num = 0;\r\n\r\n\tfunction __construct($obj) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num = 0;\r\n\t\t$this->obj = $obj;\r\n\t}\r\n\tfunction rewind() {\r\n\t}\r\n\tfunction valid() {\r\n\t\t$more = $this->num < $this->obj->max;\r\n\t\techo __METHOD__ . ' = ' .($more ? 'true' : 'false') . \"\\n\";\r\n\t\treturn $more;\r\n\t}\r\n\tfunction current() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn $this->num;\r\n\t}\r\n\tfunction next() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num++;\r\n\t}\r\n\tfunction key() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tswitch($this->num) {\r\n\t\t\tcase 0: return \"1st\";\r\n\t\t\tcase 1: return \"2nd\";\r\n\t\t\tcase 2: return \"3rd\";\r\n\t\t\tdefault: return \"???\";\r\n\t\t}\r\n\t}\r\n}\r\n\t\r\nclass c implements IteratorAggregate {\r\n\r\n\tpublic $max = 3;\r\n\r\n\tfunction getIterator() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn new c_iter($this);\r\n\t}\r\n}\r\n\r\necho \"===Array===\\n\";\r\n\r\n$a = array(0,1,2);\r\nforeach($a as $v) {\r\n\techo \"array:$v\\n\";\r\n}\r\n\r\necho \"===Manual===\\n\";\r\n$t = new c();\r\nfor ($iter = $t->getIterator(); $iter->valid(); $iter->next()) {\r\n\techo $iter->current() . \"\\n\";\r\n}\r\n\r\necho \"===foreach/std===\\n\";\r\nforeach($t as $v) {\r\n\techo \"object:$v\\n\";\r\n}\r\n\r\necho \"===foreach/rec===\\n\";\r\nforeach($t as $v) {\r\n\tforeach($t as $w) {\r\n\t\techo \"double:$v:$w\\n\";\r\n\t}\r\n}\r\n\r\necho \"===foreach/key===\\n\";\r\nforeach($t as $i => $v) {\r\n\techo \"object:$i=>$v\\n\";\r\n}\r\n\r\necho \"Done\\n\";\r\nexit(0);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_002.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nclass c_iter implements Iterator {\r\n\r\n\tprivate $obj;\r\n\tprivate $num = 0;\r\n\r\n\tfunction __construct($obj) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->obj = $obj;\r\n\t}\r\n\tfunction rewind() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num = 0;\r\n\t}\r\n\tfunction valid() {\r\n\t\t$more = $this->num < $this->obj->max;\r\n\t\techo __METHOD__ . ' = ' .($more ? 'true' : 'false') . \"\\n\";\r\n\t\treturn $more;\r\n\t}\r\n\tfunction current() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn $this->num;\r\n\t}\r\n\tfunction next() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num++;\r\n\t}\r\n\tfunction key() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tswitch($this->num) {\r\n\t\t\tcase 0: return \"1st\";\r\n\t\t\tcase 1: return \"2nd\";\r\n\t\t\tcase 2: return \"3rd\";\r\n\t\t\tdefault: return \"???\";\r\n\t\t}\r\n\t}\r\n\tfunction __destruct() {\r\n\t\t// destructor calls are non-deterministic in Phalanger: echo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\t\r\nclass c implements IteratorAggregate {\r\n\r\n\tpublic $max = 3;\r\n\r\n\tfunction getIterator() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn new c_iter($this);\r\n\t}\r\n\tfunction __destruct() {\r\n\t\t// destructor calls are non-deterministic in Phalanger: echo __METHOD__ . \"\\n\";\r\n\t}\r\n}\r\n\r\n$t = new c();\r\n\r\nforeach($t as $k => $v) {\r\n\tforeach($t as $w) {\r\n\t\techo \"double:$v:$w\\n\";\r\n\t\tbreak;\r\n\t}\r\n}\r\n\r\nunset($t);\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_003.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nclass c_iter implements Iterator {\r\n\r\n\tprivate $obj;\r\n\tprivate $num = 0;\r\n\r\n\tfunction __construct($obj) {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->obj = $obj;\r\n\t}\r\n\tfunction rewind() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t}\r\n\tfunction valid() {\r\n\t\t$more = $this->num < $this->obj->max;\r\n\t\techo __METHOD__ . ' = ' .($more ? 'true' : 'false') . \"\\n\";\r\n\t\treturn $more;\r\n\t}\r\n\tfunction current() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn $this->num;\r\n\t}\r\n\tfunction next() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num++;\r\n\t}\r\n\tfunction key() {\r\n\t\treturn $this->num;\r\n\t}\r\n}\r\n\t\r\nclass c implements IteratorAggregate {\r\n\r\n\tpublic $max = 4;\r\n\r\n\tfunction getIterator() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn new c_iter($this);\r\n\t}\r\n}\r\n\r\n$t = new c();\r\n\r\nforeach($t as $v) {\r\n\tif ($v == 0) {\r\n\t\techo \"continue outer\\n\";\r\n\t\tcontinue;\r\n\t}\r\n\tforeach($t as $w) {\r\n\t\tif ($w == 1) {\r\n\t\t\techo \"continue inner\\n\";\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ($w == 2) {\r\n\t\t\techo \"break inner\\n\";\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\techo \"double:$v:$w\\n\";\r\n\t}\r\n\tif ($v == 2) {\r\n\t\techo \"break outer\\n\";\r\n\t\tbreak;\r\n\t}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_004.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho \"1st try\\n\";\r\n\r\nclass c1 {}\r\n\r\n$obj = new c1();\r\n\r\nforeach($obj as $w) {\r\n\techo \"object:$w\\n\";\r\n}\r\n\r\necho \"2nd try\\n\";\r\n\r\nclass c2 {\r\n\r\n\tpublic $max = 3;\r\n\tpublic $num = 0;\r\n\r\n\tfunction current() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn $this->num;\r\n\t}\r\n\tfunction next() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\t$this->num++;\r\n\t}\r\n\tfunction valid() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\treturn $this->num < $this->max;\r\n\t}\r\n\tfunction key() {\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tswitch($this->num) {\r\n\t\t\tcase 0: return \"1st\";\r\n\t\t\tcase 1: return \"2nd\";\r\n\t\t\tcase 2: return \"3rd\";\r\n\t\t\tdefault: return \"???\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\n$obj = new c2();\r\n\r\nforeach($obj as $v => $w) {\r\n\techo \"object:$v=>$w\\n\";\r\n}\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_005.php.error",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nclass test implements Traversable {\r\n}\r\n\r\n$obj = new test;\r\n\r\nforeach($obj as $v);\r\n\r\nprint \"Done\\n\";\r\n/* the error doesn't show the filename but 'Unknown' */\r\n?>\r\n--EXPECTF--\r\nFatal error: Class test must implement interface Traversable as part of either Iterator or IteratorAggregate in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass ai implements Iterator {\r\n\r\n\tprivate $array;\r\n\r\n\tfunction __construct() {\r\n\t\t$this->array = array('foo', 'bar', 'baz');\r\n\t}\r\n\r\n\tfunction rewind() {\r\n\t\treset($this->array);\r\n\t\t$this->next();\r\n\t}\r\n\r\n\tfunction valid() {\r\n\t\treturn $this->key !== NULL;\r\n\t}\r\n\r\n\tfunction key() {\r\n\t\treturn $this->key;\r\n\t}\r\n\r\n\tfunction current() {\r\n\t\treturn $this->current;\r\n\t}\r\n\r\n\tfunction next() {\r\n\t\tlist($this->key, $this->current) = each($this->array);\r\n//\t\tlist($key, $current) = each($this->array);\r\n//\t\t$this->key = $key;\r\n//\t\t$this->current = $current;\r\n\t}\r\n}\r\n\r\nclass a implements IteratorAggregate {\r\n\r\n\tpublic function getIterator() {\r\n\t\treturn new ai();\r\n\t}\r\n}\r\n\r\n$array = new a();\r\n\r\nforeach ($array as $property => $value) {\r\n\tprint \"$property: $value\\n\";    \r\n}\r\n\r\n#$array = $array->getIterator();\r\n#$array->rewind();\r\n#$array->valid();\r\n#var_dump($array->key());\r\n#var_dump($array->current());\r\necho \"===2nd===\\n\";\r\n\r\n$array = new ai();\r\n\r\nforeach ($array as $property => $value) {\r\n\tprint \"$property: $value\\n\";    \r\n}\r\n\r\necho \"===3rd===\\n\";\r\n\r\nforeach ($array as $property => $value) {\r\n\tprint \"$property: $value\\n\";    \r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/iterators_007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass Test implements Iterator\r\n{\r\n\tpublic $arr = array(1, 2, 3);\r\n\tpublic $x = 0;\r\n\t\r\n\tpublic function rewind()    { if ($this->x == 0) throw new Exception(__METHOD__); reset($this->arr); }\r\n\tpublic function current()   { if ($this->x == 1) throw new Exception(__METHOD__); return current($this->arr); }\r\n\tpublic function key()       { if ($this->x == 2) throw new Exception(__METHOD__); return key($this->arr); }\r\n\tpublic function next()      { if ($this->x == 3) throw new Exception(__METHOD__); next($this->arr); }\r\n\tpublic function valid()     { if ($this->x == 4) throw new Exception(__METHOD__); return (key($this->arr) !== NULL); }\r\n}\r\n\r\n$t = new Test();\r\n\r\nwhile($t->x < 5)\r\n{\r\n\ttry\r\n\t{\r\n\t    foreach($t as $k => $v)\r\n\t    {\r\n\t        echo \"Current\\n\";\r\n\t    }\r\n\t}\r\n\tcatch(Exception $e)\r\n\t{\r\n\t    echo \"Caught in \" . $e->getMessage() . \"()\\n\";\r\n\t}\r\n\t$t->x++;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/object_reference_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo {\r\n\tpublic $name;\r\n    \r\n\tfunction Foo() {\r\n\t\t$this->name = \"I'm Foo!\\n\";\r\n\t}\r\n}\r\n\r\n$foo = new Foo;\r\necho $foo->name;\r\n$bar = $foo;\r\n$bar->name = \"I'm Bar!\\n\";\r\n\r\n// In ZE1, we would expect \"I'm Foo!\"\r\necho $foo->name;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\nclass pass {\r\n\tprivate static function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\npass::do_show();\r\npass::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_002.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate static function show() {\r\n\t\techo \"Call pass::show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\npass::do_show();\r\n\r\nclass fail {\r\n\tpublic static function show() {\r\n\t\techo \"Call fail::show()\\n\";\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nfail::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_003.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\nclass pass {\r\n\tprivate static function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tprotected static function good() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tstatic function ok() {\r\n\t\tpass::good();\r\n\t}\r\n\r\n\tstatic function not_ok() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nfail::ok();\r\nfail::not_ok(); // calling a private function\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_003b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tprotected function good() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tpublic function ok() {\r\n\t\t$this->good();\r\n\t}\r\n\r\n\tpublic function not_ok() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\n$t = new fail();\r\n$t->ok();\r\n$t->not_ok(); // calling a private function\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_004.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate static function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tstatic function do_show() {\r\n\t\tfail::show();\r\n\t}\r\n}\r\n\r\npass::do_show();\r\nfail::do_show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_004b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic function do_show() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tfunction do_show() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n$t->do_show();\r\n\r\n$t2 = new fail();\r\n$t2->do_show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_005.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate static function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tstatic function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\npass::do_show();\r\nfail::do_show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_005b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprivate function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic function do_show() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tfunction do_show() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n$t->do_show();\r\n\r\n$t2 = new fail();\r\n$t2->do_show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass first {\r\n\tprivate static function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tfirst::show();\r\n\t}\r\n}\r\n\r\nfirst::do_show();\r\n\r\nclass second extends first { \r\n}\r\n\r\nsecond::do_show();\r\n\r\nclass third extends second {\r\n}\r\n\r\nthird::do_show();\r\n\r\nclass fail extends third {\r\n\tstatic function show() {  // cannot be redeclared\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_006b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass first {\r\n\tprivate function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n\r\n\tpublic function do_show() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\n$t1 = new first();\r\n$t1->do_show();\r\n\r\nclass second extends first { \r\n}\r\n\r\n//$t2 = new second();\r\n//$t2->do_show();\r\n\r\nclass third extends second {\r\n\tprivate function show() {\r\n\t\techo \"Call show()\\n\";\r\n\t}\r\n}\r\n\r\n$t3 = new third();\r\n$t3->do_show();\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n\r\nclass Bar {\r\n\tpublic static function pub() {\r\n\t\tBar::priv();\r\n\t}\r\n\tprivate static function priv()\t{\r\n\t\techo \"Bar::priv()\\n\";\r\n\t}\r\n}\r\nclass Foo extends Bar {\r\n\tpublic static function priv()\t{ \r\n\t\techo \"Foo::priv()\\n\";\r\n\t}\r\n}\r\n\r\nFoo::pub();\r\nFoo::priv();\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_007b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n\r\nclass Bar {\r\n\tpublic function pub() {\r\n\t\t$this->priv();\r\n\t}\r\n\tprivate function priv()\t{\r\n\t\techo \"Bar::priv()\\n\";\r\n\t}\r\n}\r\nclass Foo extends Bar {\r\n\tpublic function priv()\t{ \r\n\t\techo \"Foo::priv()\\n\";\r\n\t}\r\n}\r\n\r\n$obj = new Foo();\r\n$obj->pub();\r\n$obj->priv();\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_members.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nclass base\r\n{\r\n  private $member;\r\n\r\n  function __construct()\r\n  {\r\n  \techo __METHOD__ . \"(begin)\\n\";\r\n    $this->member = 'base::member';\r\n    $this->test();\r\n  \techo __METHOD__ . \"(end)\\n\";\r\n  }\r\n\r\n  function test()\r\n  {\r\n  \techo __METHOD__ . \"\\n\";\r\n    __var_dump($this);\r\n  }\r\n}\r\n\r\nclass derived extends base\r\n{\r\n  public $member = 'derived::member (default)';\r\n\r\n  function __construct()\r\n  {\r\n  \techo __METHOD__ . \"(begin)\\n\";\r\n  \tparent::__construct();\r\n  \tparent::test();\r\n  \t$this->test();\r\n    $this->member = 'derived::member';\r\n  \techo __METHOD__ . \"(end)\\n\";\r\n  }\r\n\r\n  function test()\r\n  {\r\n  \tparent::test();\r\n  \techo __METHOD__ . \"\\n\";\r\n    __var_dump($this);\r\n  }\r\n}\r\n\r\n$t = new derived;\r\n$t->test();\r\nunset($t);\r\n\r\necho \"Done\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/private_redeclare.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\nclass base {\r\n\tprivate function show() {\r\n\t\techo \"base\\n\";\r\n\t}\r\n\tfunction test() {\r\n\t\t$this->show();\r\n\t}\r\n}\r\n\r\n$t = new base();\r\n$t->test();\r\n\r\nclass derived extends base {\r\n\tfunction show() {\r\n\t\techo \"derived\\n\";\r\n\t}\r\n\tfunction test() {\r\n\t\techo \"test\\n\";\r\n\t\t$this->show();\r\n\t\tparent::test();\r\n\t\tparent::show();\r\n\t}\r\n}\r\n\r\n$t = new derived();\r\n$t->test();\r\n\r\necho \"Not reached\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/protected_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprotected static function fail() {\r\n\t\techo \"Call fail()\\n\";\r\n\t}\r\n\r\n\tpublic static function good() {\r\n\t\tpass::fail();\r\n\t}\r\n}\r\n\r\npass::good();\r\npass::fail();// must fail because we are calling from outside of class pass\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/protected_001b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\n\r\nclass pass {\r\n\tprotected function fail() {\r\n\t\techo \"Call fail()\\n\";\r\n\t}\r\n\r\n\tpublic function good() {\r\n\t\t$this->fail();\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n$t->good();\r\n$t->fail();// must fail because we are calling from outside of class pass\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/protected_002.php",
    "content": "[expect ct-error]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(0);\r\nclass pass {\r\n\tprotected static function show() {\r\n\t\techo \"Call pass::show()\\n\";\r\n\t}\r\n\r\n\tpublic static function do_show() {\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\npass::do_show();\r\n\r\nclass fail {\r\n\tpublic static function show() {\r\n\t\techo \"Call fail::show()\\n\";\r\n\t\tpass::show();\r\n\t}\r\n}\r\n\r\nfail::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/serialize_001.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\nclass Test implements Serializable\r\n{\r\n\tpublic $data;\r\n\r\n\tfunction __construct($data)\r\n\t{\r\n\t\techo __METHOD__ . \"($data)\\n\";\r\n\t\t$this->data = $data;\r\n\t}\r\n\r\n\tfunction serialize()\r\n\t{\r\n\t\techo __METHOD__ . \"({$this->data})\\n\";\r\n\t\treturn $this->data;\r\n\t}\r\n\r\n\tfunction unserialize($serialized)\r\n\t{\r\n\t\techo __METHOD__ . \"($serialized)\\n\";\r\n\t\t$this->data = $serialized;\r\n\t\t__var_dump($this);\r\n\t}\r\n}\r\n\r\n$tests = array('String', NULL, 42, false);\r\n\r\nforeach($tests as $data)\r\n{\r\n\ttry\r\n\t{\r\n\t\techo \"==========\\n\";\r\n\t\t__var_dump($data);\r\n\t\t$ser = serialize(new Test($data));\r\n\t\t__var_dump(unserialize($ser));\r\n\t}\r\n\tcatch(Exception $e)\r\n\t{\r\n\t\techo 'Exception: ' . gettype($e) . \"\\n\";\r\n\t}\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/singleton_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Counter {\r\n\tprivate $counter = 0;\r\n\r\n\tfunction increment_and_print() {\r\n\t\techo ++$this->counter;\r\n\t\techo \"\\n\";\r\n    }\r\n}\r\n\r\n\r\nclass SingletonCounter {\r\n\tprivate static $m_instance = NULL;\r\n\r\n\tstatic function Instance() {\r\n\t\tif (self::$m_instance == NULL) {\r\n\t\t\tself::$m_instance = new Counter();\r\n\t\t}\r\n\t\treturn self::$m_instance;\r\n\t}\r\n}\r\n\r\nSingletonCounter::Instance()->increment_and_print();\r\nSingletonCounter::Instance()->increment_and_print();\r\nSingletonCounter::Instance()->increment_and_print();\r\n\r\n?>\r\n--EXPECT--\r\n1\r\n2\r\n3\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/static_mix_1.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass pass {\r\n\tstatic function show() {\r\n\t\techo \"Call to function pass::show()\\n\";\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tfunction show() {\r\n\t\techo \"Call to function fail::show()\\n\";\r\n\t}\r\n}\r\n\r\npass::show();\r\nfail::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>                                                            \r\n--EXPECTF--\r\nFatal error: Cannot make static method pass::show() non static in class fail in %s on line %d"
  },
  {
    "path": "Testing/Tests/@PHP/classes/static_mix_2.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass pass {\r\n\tfunction show() {\r\n\t\techo \"Call to function pass::show()\\n\";\r\n\t}\r\n}\r\n\r\nclass fail extends pass {\r\n\tstatic function show() {\r\n\t\techo \"Call to function fail::show()\\n\";\r\n\t}\r\n}\r\n\r\n$t = new pass();\r\n$t->show();\r\nfail::show();\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Cannot make non static method pass::show() static in class fail in %s on line %d"
  },
  {
    "path": "Testing/Tests/@PHP/classes/static_properties_001.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\nclass test {\r\n\tstatic public $ar = array();\r\n}\r\n\r\n__var_dump(test::$ar);\r\n\r\ntest::$ar[] = 1;\r\n\r\n__var_dump(test::$ar);\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/static_this.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n\r\nclass TestClass\r\n{\r\n\tfunction __construct()\r\n\t{\r\n\t\tself::Test1();\r\n\t\t$this->Test1();\r\n\t}\r\n\r\n\tstatic function Test1()\r\n\t{\r\n\t\t__var_dump($this);\r\n\t}\r\n\r\n\tstatic function Test2($this)\r\n\t{\r\n\t\t__var_dump($this);\r\n\t}\r\n}\r\n\r\n$obj = new TestClass;\r\nTestClass::Test2(new stdClass);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/tostring.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\nclass test1 {\r\n}\r\n\r\nclass test2 {\r\n    function __toString() {\r\n    \techo __METHOD__ . \"()\\n\";\r\n        return \"Converted\\n\";\r\n    }\r\n}\r\n\r\necho \"====test1====\\n\";\r\n$o = new test1;\r\n__var_dump($o);\r\n__var_dump(substr_compare(@(string)$o, \"object\", 0, 5, true));\r\n__var_dump($o);\r\n\r\necho \"====test2====\\n\";\r\n$o = new test2;\r\n__var_dump($o);\r\nprint $o;\r\n__var_dump($o);\r\necho \"====test3====\\n\";\r\necho $o;\r\n\r\necho \"====test4====\\n\";\r\necho \"string:\".$o;\r\n\r\necho \"====test5====\\n\";\r\necho 1 . $o;\r\n\r\necho \"====test6====\\n\";\r\necho $o.$o;\r\n\r\necho \"====test7====\\n\";\r\n$ar = array();\r\n$ar[$o->__toString()] = \"ERROR\";\r\necho $ar[$o];\r\n\r\necho \"====test8====\\n\";\r\n@__var_dump(trim($o));\r\n__var_dump(trim((string)$o));\r\n\r\necho \"====test9====\\n\";\r\necho sprintf(\"%s\", $o);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/type_hinting_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(0);\r\ninterface Foo {\r\n\tfunction a(Foo $foo);\r\n}\r\n\r\ninterface Bar {\r\n\tfunction b(Bar $bar);\r\n}\r\n\r\nclass FooBar implements Foo, Bar {\r\n\tfunction a(Foo $foo) {\r\n\t\t// ...\r\n\t}\r\n\r\n\tfunction b(Bar $bar) {\r\n\t\t// ...\r\n\t}\r\n}\r\n\r\nclass Blort {\r\n}\r\n\r\n$a = new FooBar;\r\n$b = new Blort;\r\n\r\n$a->a($b);\r\n$a->b($b);\r\n\r\necho \"Not reached\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/type_hinting_002.php.error",
    "content": "--TEST--\r\nZE2 class type hinting non existing class\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nclass Foo {\r\n\tfunction a(NonExisting $foo) {}\r\n}\r\n\r\n$o = new Foo;\r\n$o->a($o);\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Class 'NonExisting' not found in %stype_hinting_002.php on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/type_hinting_003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nerror_reporting(0);\r\nclass Test\r\n{\r\n\tstatic function f1(array $ar)\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\t__var_dump($ar);\r\n\t}\r\n\r\n\tstatic function f2(array $ar = NULL)\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\t__var_dump($ar);\r\n\t}\r\n\r\n\tstatic function f3(array $ar = array())\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\t__var_dump($ar);\r\n\t}\r\n\r\n\tstatic function f4(array $ar = array(25))\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\t__var_dump($ar);\r\n\t}\r\n}\r\n\r\nTest::f1(array(42));\r\nTest::f2(NULL);\r\nTest::f2();\r\nTest::f3();\r\nTest::f4();\r\nTest::f1(1);\r\n\r\necho \"Not reached\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_000a.php.error",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprotected function f0() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_000b.php.error",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprivate function f0() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f0() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_000c.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tfunction f0() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_001a.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprotected function f1() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_001b.php.error",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprivate function f1() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f1() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_001c.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tfunction f1() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_002a.php.error",
    "content": "--TEST--\r\nZE2 A redeclared method must have the same or higher visibility\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprotected function f2() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_002b.php.error",
    "content": "--TEST--\r\nZE2 A redeclared method must have the same or higher visibility\r\n--SKIPIF--\r\n<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>\r\n--FILE--\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprivate function f2() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f2() must be public (as in class same) in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_002c.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tfunction f2() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_003a.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tpublic function f3() {}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_003b.php.error",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprivate function f3() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n--EXPECTF--\r\nFatal error: Access level to fail::f3() must be protected (as in class same) or weaker in %s on line %d\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_003c.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tfunction f3() {}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_004a.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tpublic function f4() {}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_004b.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tprotected function f4() {}\r\n}\r\n\r\necho \"Done\\n\"; // shouldn't be displayed\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_004c.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass father {\r\n\tfunction f0() {}\r\n\tfunction f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass same extends father {\r\n\r\n\t// overload fn with same visibility\r\n\tfunction f0() {}\r\n\tpublic function f1() {}\r\n\tpublic function f2() {}\r\n\tprotected function f3() {}\r\n\tprivate function f4() {}\r\n}\r\n\r\nclass fail extends same {\r\n\tfunction f4() {}\r\n}\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/classes/visibility_005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass base\r\n{\r\n\tpublic $a=1;\r\n\tprotected $b=2;\r\n\tprivate $c=3;\r\n\r\n\tfunction f()\r\n\t{\r\n\t\tforeach($this as $k=>$v) {\r\n\t\t\techo \"$k=>$v\\n\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\nclass derived extends base\r\n{\r\n}\r\n\r\n$o = new base;\r\n$o->d = 4;\r\necho \"===base::function===\\n\";\r\n$o->f();\r\necho \"===base,foreach===\\n\";\r\nforeach($o as $k=>$v) {\r\n\techo \"$k=>$v\\n\";\r\n}\r\n\r\n/* PHP bug:\r\n$o = new derived;\r\n$o->d = 4;\r\necho \"===derived::function===\\n\";\r\n$o->f();\r\necho \"===derived,foreach===\\n\";\r\nforeach($o as $k=>$v) {\r\n\techo \"$k=>$v\\n\";\r\n}\r\n*/\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/002.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nif (!@putenv(\"TZ=EST5\") || getenv(\"TZ\") != 'EST5') \r\n\tdie(\"skip unable to change TZ enviroment variable\\n\");\r\n\r\n\t$dates = array (\r\n\t\t\"1999-10-13\",\r\n\t\t\"Oct 13  1999\",\r\n\t\t\"2000-01-19\",\r\n\t\t\"Jan 19  2000\",\r\n\t\t\"2001-12-21\",\r\n\t\t\"Dec 21  2001\",\r\n\t\t\"2001-12-21 12:16\",\r\n\t\t\"Dec 21 2001 12:16\",\r\n\t\t\"Dec 21  12:16\",\r\n\t    \"2001-10-22 21:19:58\",\r\n\t    \"2001-10-22 21:19:58-02\",\r\n\t    \"2001-10-22 21:19:58-0213\",\r\n\t    \"2001-10-22 21:19:58+02\",\r\n    \t\"2001-10-22 21:19:58+0213\",\r\n\t\t\"2001-10-22T21:20:58-03:40\",\r\n\t\t\"2001-10-22T211958-2\",\r\n\t\t\"20011022T211958+0213\",\r\n\t\t\"20011022T21:20+0215\",\r\n\t\t\"1997W011\",\r\n\t\t\"2004W101T05:00+0\",\r\n\t);\r\n\r\n\techo \"*** GMT0\\n\";\r\n\tputenv (\"TZ=GMT0\");\r\n\tforeach ($dates as $date) {\r\n\t    echo date (\"Y-m-d H:i:s\\n\", strtotime ($date));\r\n\t}\r\n\r\n\techo \"*** US/Eastern\\n\";\r\n\tputenv(\"TZ=US/Eastern\");\r\n\tif( date(\"T\") == \"GMT\" ) {\r\n\t\t// POSIX style\r\n\t\tputenv (\"TZ=EST5EDT4,M4.1.0,M10.5.0\");\r\n\t}\r\n\r\n\tforeach ($dates as $date) {\r\n\t    echo date (\"Y-m-d H:i:s\\n\", strtotime ($date));\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug13142.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nif (!@putenv(\"TZ=US/Eastern\") || getenv(\"TZ\") != 'US/Eastern')\r\n\tdie(\"skip unable to change TZ enviroment variable\\n\");\r\n\r\nputenv(\"TZ=US/Eastern\");\r\nif (date('T') == 'GMT') {\r\n\tputenv(\"TZ=EST5EDT4,M4.1.0,M10.5.0\");\r\n}\r\necho date(\"r\\n\", strtotime(\"Sep 04 16:39:45 2001\"));\r\necho date(\"r\\n\", strtotime(\"Sep 04 2001 16:39:45\"));\t\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug14561.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=GMT\");\r\necho strtotime(\"19:30 Dec 17 2005\"), \"\\n\";\r\necho strtotime(\"Dec 17 19:30 2005\"), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug17988.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=GMT\");\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728 GMT\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728 MET\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728 MEST\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728 EDT\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728-00\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728+00\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728-04\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728+04\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728-0300\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728+0300\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728-0330\")).\"\\n\";\r\necho gmdate('Y-m-d H:i:s', strtotime(\"2002-06-25 14:18:48.543728+0330\")).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug20382-1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=Europe/Amsterdam\");\r\n\t$tStamp = mktime (17, 17, 17, 10, 27, 2004);\r\n\techo \"tStamp=\". date(\"l Y-m-d H:i:s T\", $tStamp). \"\\n\";\r\n\t\r\n\t$strtotime_timestamp = strtotime (\"Monday\", $tStamp);\r\n\techo \"result=\". date(\"l Y-m-d H:i:s T\", $strtotime_timestamp). \"\\n\";\r\n\techo \"wanted=Monday 2004-11-01 00:00:00 CET\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug20382-2.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$tests = array(\r\n\tarray(\"Europe/Andorra\",     17, 17, 17, 1, 24764, 1970),\r\n\tarray(\"Asia/Dubai\",         17, 17, 17, 1, 1, 1970),\r\n\tarray(\"Asia/Kabul\",         17, 17, 17, 1, 1, 1970),\r\n\tarray(\"America/Antigua\",    17, 17, 17, 1, 1, 1970),\r\n\tarray(\"America/Anguilla\",   17, 17, 17, 1, 1, 1970),\r\n\tarray(\"Europe/Tirane\",      17, 17, 17, 1, 4849, 1970),\r\n\tarray(\"Asia/Yerevan\",       17, 17, 17, 1, 24764, 1970),\r\n\tarray(\"America/Curacao\",    17, 17, 17, 1, 1, 1970),\r\n\tarray(\"Africa/Luanda\",      17, 17, 17, 1, 1, 1970),\r\n\tarray(\"Antarctica/McMurdo\", 17, 17, 17, 1, 24743, 1970),\r\n\tarray(\"Australia/Adelaide\", 17, 17, 17, 1, 1, 1971),\r\n\tarray(\"Australia/Darwin\",   17, 17, 17, 1, 88, 1971),\r\n\tarray(\"Australia/Perth\",    17, 17, 17, 1, 1, 1971),\r\n\tarray(\"America/Aruba\",      17, 17, 17, 1, 88, 1971),\r\n\tarray(\"Asia/Baku\",          17, 17, 17, 1, 1, 1971),\r\n\tarray(\"Europe/Sarajevo\",    17, 17, 17, 1, 1, 1971),\r\n\tarray(\"America/Barbados\",   17, 17, 17, 1, 1, 1971),\r\n\tarray(\"Asia/Dacca\",         17, 17, 17, 1, 1, 1971),\r\n\tarray(\"Europe/Brussels\",    17, 17, 17, 1, 1, 1971),\r\n\tarray(\"Africa/Ouagadougou\", 17, 17, 17, 1, 88, 1971),\r\n\tarray(\"Europe/Tirane\",      17, 17, 17, 1, 4849, 1970),\r\n\tarray(\"America/Buenos_Aires\", 17, 17, 17, 1, 1734, 1970),\r\n\tarray(\"America/Rosario\",    17, 17, 17, 1, 1734, 1970),\r\n\tarray(\"Europe/Vienna\",      17, 17, 17, 1, 3743, 1970),\r\n\tarray(\"Asia/Baku\",          17, 17, 17, 1, 9490, 1970),\r\n);\r\n\r\nforeach ($tests as $test) {\r\n\tputenv(\"TZ={$test[0]}\");\r\n\tprint \"{$test[0]}\\n\";\r\n\tarray_shift($test);\r\n\t$timestamp = call_user_func_array('mktime', $test);\r\n\r\n\tprint \"ts     = \". date(\"l Y-m-d H:i:s T\", $timestamp). \"\\n\";\r\n\t$strtotime_tstamp = strtotime(\"first monday\", $timestamp);\r\n\tprint \"result = \".date(\"l Y-m-d H:i:s T\", $strtotime_tstamp).\"\\n\";\r\n\tprint \"wanted = Monday            00:00:00\\n\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug21399.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=GMT\");\r\n\techo gmdate(\"Y-m-d H:i:s\", strtotime(\"20050620091407 GMT\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug21966.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=Europe/London\");\r\n\r\necho '27/3/04 = ' . strval(mktime(0,0,0,3,27,2004)) . \"\\n\";   // 1080345600\r\necho '28/3/04 = ' . strval(mktime(0,0,0,3,28,2004)) . \"\\n\";   // -3662  - should be 108043200\r\necho '28/3/04 = ' . strval(mktime(2,0,0,3,28,2004)) . \"\\n\";   // 1080435600\r\necho '29/3/04 = ' . strval(mktime(0,0,0,3,29,2004)) . \"\\n\";   // 1080514800\r\necho '30/3/04 = ' . strval(mktime(0,0,0,3,30,2004)) . \"\\n\";   // 1080601200\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug26090.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=America/New_York\");\r\n$t = '2003-10-28 10:20:30-0800';\r\necho date('Y-m-d H:i:s T', strtotime($t)) . \"\\n\";\r\n\r\n$t = '2003-10-28 10:20:30-08:00';\r\necho date('Y-m-d H:i:s T', strtotime($t)) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug26198.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tdate_default_timezone_set(\"GMT\");\r\n\techo gmdate(\"F Y (Y-m-d H:i:s T)\\n\", strtotime(\"Oct 2001\"));\r\n\techo gmdate(\"M Y (Y-m-d H:i:s T)\\n\", strtotime(\"2001 Oct\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug26317.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nif (!@putenv(\"TZ=GMT0\") || getenv(\"TZ\") != 'GMT0') {\r\n\tdie(\"skip unable to change TZ enviroment variable\\n\");\r\n}\r\n    putenv(\"TZ=GMT0\");\r\n\techo date(\"Y-m-d H:i:s\\n\", strtotime(\"2003-11-19 16:20:42 Z\"));\r\n\techo date(\"Y-m-d H:i:s\\n\", strtotime(\"2003-11-19 09:20:42 T\"));\r\n\techo date(\"Y-m-d H:i:s\\n\", strtotime(\"2003-11-19 19:20:42 C\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug26320.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nif (!@putenv(\"TZ=GMT0\") || getenv(\"TZ\") != 'GMT0') {\r\n\tdie(\"skip unable to change TZ enviroment variable\\n\");\r\n}\r\n    putenv(\"TZ=GMT0\");\r\n\techo date(\"Y-m-d H:i:s\\n\", strtotime(\"2003-11-19T12:30:42\"));\r\n\techo date(\"Y-m-d H:i:s\\n\", strtotime(\"2003-11-19T12:30:42Z\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug26694.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=GMT\");\r\n\techo gmdate(\"Y-m-d H:i:s\", strtotime(\"Sun, 21 Dec 2003 20:38:33 +0000 GMT\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug27719.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php /* $Id: bug27719.php.kb,v 1.1 2006/02/18 14:33:28 matot0am Exp $ */\r\n\tputenv(\"TZ=EST\");  // No DST\r\n\t$a = mktime(0, 0, 0, 4, 4, 2004, 0);\r\n\t$b = mktime(0, 0, 0, 4, 4, 2004, 1);\r\n\t$c = mktime(0, 0, 0, 4, 4, 2004, -1);\r\n\techo \"$a \".date(\"m/d/y h:i:s\\n\",$a);\r\n\t//echo \"$b \".date(\"m/d/y h:i:s\\n\",$b);\r\n\techo \"$c \".date(\"m/d/y h:i:s\\n\",$c);\r\n\techo \"\\n\";\r\n\tputenv(\"TZ=EST5EDT\");  // DST not in effect\r\n\t$a = mktime(0, 0, 0, 2, 4, 2004, 0);\r\n\t$b = mktime(0, 0, 0, 2, 4, 2004, 1);\r\n\t$c = mktime(0, 0, 0, 2, 4, 2004, -1);\r\n\techo \"$a \".date(\"m/d/y h:i:s\\n\",$a);\r\n\techo \"$b \".date(\"m/d/y h:i:s\\n\",$b);\r\n\techo \"$c \".date(\"m/d/y h:i:s\\n\",$c);\r\n\techo \"\\n\";\r\n\tputenv(\"TZ=EST5EDT\");  // Just before DST changeover\r\n\t$a = mktime(0, 0, 0, 4, 4, 2004, 0);\r\n\t$b = mktime(0, 0, 0, 4, 4, 2004, 1);\r\n\t$c = mktime(0, 0, 0, 4, 4, 2004, -1);\r\n\techo \"$a \".date(\"m/d/y h:i:s\\n\",$a);\r\n\techo \"$b \".date(\"m/d/y h:i:s\\n\",$b);\r\n\techo \"$c \".date(\"m/d/y h:i:s\\n\",$c);\r\n\techo \"\\n\";\r\n\tputenv(\"TZ=EST5EDT\");  // Just after DST changeover\r\n\t$a = mktime(3, 0, 0, 4, 4, 2004, 0);\r\n\t$b = mktime(3, 0, 0, 4, 4, 2004, 1);\r\n\t$c = mktime(3, 0, 0, 4, 4, 2004, -1);\r\n\techo \"$a \".date(\"m/d/y h:i:s\\n\",$a);\r\n\techo \"$b \".date(\"m/d/y h:i:s\\n\",$b);\r\n\techo \"$c \".date(\"m/d/y h:i:s\\n\",$c);\r\n\techo \"\\n\";\r\n\tputenv(\"TZ=EST5EDT\");  // DST in effect\r\n\t$a = mktime(0, 0, 0, 6, 4, 2004, 0);\r\n\t$b = mktime(0, 0, 0, 6, 4, 2004, 1);\r\n\t$c = mktime(0, 0, 0, 6, 4, 2004, -1);\r\n\techo \"$a \".date(\"m/d/y h:i:s\\n\",$a);\r\n\techo \"$b \".date(\"m/d/y h:i:s\\n\",$b);\r\n\techo \"$c \".date(\"m/d/y h:i:s\\n\",$c);\r\n\techo \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug27780.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$timezones = array (\r\n\t\"America/Chicago\", \"Europe/Amsterdam\", \"Asia/Jerusalem\",\r\n\t\"Asia/Singapore\", \"America/Sao_Paulo\"\r\n);\r\n\r\n$timestrings = array (\r\n\t\"2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds\",\r\n\t\"2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds\",\r\n\t\"2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds\",\r\n\t\"2004-04-07 00:00:00 -21 days\",\r\n\t\"2004-04-07 00:00:00 11 days ago\",\r\n\t\"2004-04-07 00:00:00 -10 day +2 hours\",\r\n\t\"2004-04-07 00:00:00 -1 day\",\r\n\t\"2004-04-07 00:00:00\",\r\n\t\"2004-04-07 00:00:00 +1 hour\",\r\n\t\"2004-04-07 00:00:00 +2 hour\",\r\n\t\"2004-04-07 00:00:00 +1 day\",\r\n\t\"2004-04-07 00:00:00 1 day\",\r\n\t\"2004-04-07 00:00:00 +21 days\",\r\n);\r\n\r\nforeach ($timezones as $timezone) {\r\n\tputenv(\"TZ=$timezone\");\r\n\techo $timezone, \"\\n\";\r\n\r\n\tforeach ($timestrings as $timestring) {\r\n\t\t$time = strtotime($timestring);\r\n\r\n\t\techo $time, strftime(\" [%Y-%m-%d %H:%M:%S %Z]\", $time), \" [$timestring]\\n\";\r\n\t}\r\n\r\n\techo \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug28024.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=Europe/Berlin\");\r\n\techo strtotime(\"17:00 2004-01-01\"), \"\\n\";\r\n\techo date(\"Y-m-d H:i:s T\", strtotime(\"17:00 2004-01-01\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug28088.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=GMT\");\r\n\r\necho \"The following line rightly shows the correct date time:\\n\";\r\necho gmdate(\"m/d/y Hi\", strtotime(\"04/04/04 2345\")), \"\\n\";\r\n\r\necho \"But the following line fails to show the correct date time:\\n\";\r\necho gmdate(\"m/d/y Hi\", strtotime(\"04/04/04 0045\")).\"\\r\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug28599.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"Europe/Amsterdam\");\r\nprint gmdate(\"d-m-Y H:i:s\", strtotime(\"+30 minutes\", 1100535573));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug29150.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=GMT\");\r\n\techo gmdate(\"Y-m-d H:i:s\", strtotime(\"20 VI. 2005\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug29585.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\necho gmdate(\"Y-m-d H:i:s\", strtotime(\"2004W30\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug29595.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\n$from_postgres = '2004-08-09 14:48:27.304809+10';\r\n\r\necho strtotime($from_postgres);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug30096.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho \"no dst --> dst\\n\";\r\n$ts = -1;\r\ngm_date_check(01,00,00,03,27,2005);\r\ngm_date_check(02,00,00,03,27,2005);\r\ngm_date_check(03,00,00,03,27,2005);\r\ngm_date_check(04,00,00,03,27,2005);\r\n\r\necho \"\\ndst --> no dst\\n\";\r\n$ts = -1;\r\ngm_date_check(01,00,00,10,30,2005);\r\ngm_date_check(02,00,00,10,30,2005);\r\ngm_date_check(03,00,00,10,30,2005);\r\ngm_date_check(04,00,00,10,30,2005);\r\n\r\nfunction gm_date_check($hour, $minute, $second, $month, $day, $year) {\r\n\tglobal $ts, $tsold;\r\n\r\n\techo \"gmmktime($hour,$minute,$second,$month,$day,$year): \";\r\n\t\r\n\t$tsold = $ts;\r\n\t$ts = gmmktime($hour, $minute, $second, $month, $day, $year);\r\n\r\n\techo $ts, \" | gmdate('r', $ts):\", gmdate('r', $ts);\r\n\tif ($tsold > 0) {\r\n\t\techo \" | Diff: \" . ($ts - $tsold);\r\n\t}\r\n\techo \"\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug30532.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=America/New_York\");\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 EDT +1 hour')).\"\\n\";\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 EDT +2 hours')).\"\\n\";\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 EDT +3 hours')).\"\\n\";\r\n\r\necho \"\\n\";\r\n\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 +1 hour')).\"\\n\";\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 +2 hours')).\"\\n\";\r\necho date('Y-m-d H:i:s T', strtotime('2004-10-31 +3 hours')).\"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug32086.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=America/Sao_Paulo\");\r\necho $g = strtotime(\"2004-11-01\"), \"\\n\";\r\necho $i = strtotime(\"2004-11-01 +1 day\"), \"\\n\";\r\necho $j = strtotime(\"+1 day\", $g), \"\\n\";\r\necho $k = strtotime(\"2004-11-02\"), \"\\n\";\r\necho $l = strtotime(\"2004-11-03\"), \"\\n\";\r\necho date(\"Y-m-d H:i:s T\\n\", $g);\r\necho date(\"Y-m-d H:i:s T\\n\", $i);\r\necho date(\"Y-m-d H:i:s T\\n\", $j);\r\necho date(\"Y-m-d H:i:s T\\n\", $k);\r\necho date(\"Y-m-d H:i:s T\\n\", $l);\r\n\r\necho $g = strtotime(\"2005-02-19\"), \"\\n\";\r\necho $i = strtotime(\"2005-02-19 +1 day\"), \"\\n\";\r\necho $j = strtotime(\"+1 day\", $g), \"\\n\";\r\necho $k = strtotime(\"2005-02-20\"), \"\\n\";\r\necho $l = strtotime(\"2005-02-21\"), \"\\n\";\r\necho date(\"Y-m-d H:i:s T\\n\", $g);\r\necho date(\"Y-m-d H:i:s T\\n\", $i);\r\necho date(\"Y-m-d H:i:s T\\n\", $j);\r\necho date(\"Y-m-d H:i:s T\\n\", $k);\r\necho date(\"Y-m-d H:i:s T\\n\", $l);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug32270.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=America/Los_Angeles\");\r\n\r\necho date(\"m/d/Y H:i:s T\", -2145888000).\"\\n\";\r\n\r\necho strtotime(\"Jan 1 1902\").\"\\n\";\r\n\r\necho date(\"m/d/Y H:i:s T\", -631123200).\"\\n\";\r\n\r\necho strtotime(\"Jan 1 1950\").\"\\n\";\r\n\r\necho date(\"m/d/Y H:i:s T\", 946713600).\"\\n\";\r\n\r\necho strtotime(\"Jan 1 2000\").\"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug32555.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=US/Eastern\");\r\n\r\n$stamp = 1112427000;\r\nprint strftime('%c %Z',strtotime('now',$stamp)) .\"\\n\";\r\nprint strftime('%c %Z',strtotime('tomorrow',$stamp)) .\"\\n\";\r\nprint strftime('%c %Z',strtotime('+1 day',$stamp)) .\"\\n\";\r\nprint strftime('%c %Z',strtotime('+2 day',$stamp)) .\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug32588.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=America/New_York\");\r\n\r\necho date('D Y/m/d/H:i:s', strtotime('last saturday', 1112703348)). \"\\n\";\r\necho date('D Y/m/d/H:i:s', strtotime(\"last sunday\", 1112703348)). \"\\n\";\r\necho date('D Y/m/d/H:i:s', strtotime('last monday', 1112703348)). \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33056.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\necho strtotime('20050518t090000Z').\"\\n\";\r\necho strtotime('20050518t091234Z').\"\\n\";\r\necho strtotime('20050518t191234Z').\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33414-1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nprint \"TZ=America/Mendoza - wrong day.\\n\";\r\nputenv(\"TZ=America/Mendoza\");\r\n$tStamp = mktime (17, 17, 17, 1, 8327, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday              00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Catamarca - wrong day.\\n\";\r\nputenv(\"TZ=America/Catamarca\");\r\n$tStamp = mktime (17, 17, 17, 1, 7599, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday              00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Cordoba - wrong day.\\n\";\r\nputenv(\"TZ=America/Cordoba\");\r\n$tStamp = mktime (17, 17, 17, 1, 7599, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday              00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Rosario - wrong day.\\n\";\r\nputenv(\"TZ=America/Rosario\");\r\n$tStamp = mktime (17, 17, 17, 1, 7958, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday           00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Europe/Vienna - wrong day - giving unexpected results, at\r\nleast on my system :-)\\n\";\r\nputenv(\"TZ=Europe/Vienna\");\r\n$tStamp = mktime (17, 17, 17, 1, 3746, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday             00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Baku - wrong day.\\n\";\r\nputenv(\"TZ=Asia/Baku\");\r\n$tStamp = mktime (17, 17, 17, 1, 8299, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday              00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Noronha - wrong day.\\n\";\r\nputenv(\"TZ=America/Noronha\");\r\n$tStamp = mktime (17, 17, 17, 1, 10866, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Friday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Friday              00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Havana - wrong day.\\n\";\r\nputenv(\"TZ=America/Havana\");\r\n$tStamp = mktime (17, 17, 17, 1, 12720, 1970);  \r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday             00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Europe/Tallinn - wrong day.\\n\";\r\nputenv(\"TZ=Europe/Tallinn\");   \r\n$tStamp = mktime (17, 17, 17, 1, 11777, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Saturday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Saturday          00:00:00\\n\\n\";  \r\n\r\nprint \"TZ=Asia/Jerusalem - wrong day.\\n\";     \r\nputenv(\"TZ=Asia/Jerusalem\");\r\n$tStamp = mktime (17, 17, 17, 1, 13056, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday             00:00:00\\n\\n\";         \r\n\r\nprint \"TZ=Europe/Vilnius - wrong day.\\n\";\r\nputenv(\"TZ=Europe/Vilnius\");\r\n$tStamp = mktime (17, 17, 17, 1, 12140, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Friday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Friday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Kwajalein - wrong day.\\n\";\r\nputenv(\"TZ=Pacific/Kwajalein\");\r\n$tStamp = mktime (17, 17, 17, 1, 8626, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Friday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Friday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Ulan_Bator - wrong day.\\n\";\r\nputenv(\"TZ=Asia/Ulan_Bator\");\r\n$tStamp = mktime (17, 17, 17, 1, 11588, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Saturday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Saturday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Cancun - wrong day.\\n\";\r\nputenv(\"TZ=America/Cancun\");\r\n$tStamp = mktime (17, 17, 17, 1, 11785, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Mexico_City - wrong day.\\n\";\r\nputenv(\"TZ=America/Mexico_City\");\r\n$tStamp = mktime (17, 17, 17, 1, 11781, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Mazatlan - wrong day.\\n\";\r\nputenv(\"TZ=America/Mazatlan\");\r\n$tStamp = mktime (17, 17, 17, 1, 11780, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Chihuahua - wrong day.\\n\";\r\nputenv(\"TZ=America/Chihuahua\");\r\n$tStamp = mktime (17, 17, 17, 1, 11782, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Kuala_Lumpur - wrong day.\\n\";     \r\nputenv(\"TZ=Asia/Kuala_Lumpur\");\r\n$tStamp = mktime (17, 17, 17, 1, 4380, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";            \r\n\r\nprint \"TZ=Pacific/Chatham - wrong day.\\n\";       \r\nputenv(\"TZ=Pacific/Chatham\");  \r\n$tStamp = mktime (17, 17, 17, 1, 1762, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";            \r\n\r\nprint \"TZ=America/Lima - wrong day.\\n\";        \r\nputenv(\"TZ=America/Lima\");   \r\n$tStamp = mktime (17, 17, 17, 1, 5839, 1970); \r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:00:00\\n\\n\";          \r\n\r\nprint \"TZ=Asia/Karachi - wrong day.\\n\";\r\nputenv(\"TZ=Asia/Karachi\");\r\n$tStamp = mktime (17, 17, 17, 1, 11783, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Friday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Friday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Asuncion - wrong day.\\n\";\r\nputenv(\"TZ=America/Asuncion\");\r\n$tStamp = mktime (17, 17, 17, 1, 11746, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Singapore - wrong day.\\n\";\r\nputenv(\"TZ=Asia/Singapore\");\r\n$tStamp = mktime (17, 17, 17, 1, 4383, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday             00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Montevideo - wrong day.\\n\";\r\nputenv(\"TZ=America/Montevideo\");\r\n$tStamp = mktime (17, 17, 17, 1, 12678, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday             00:00:00\\n\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33414-2.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nprint \"TZ=Pacific/Rarotonga - wrong day.\\n\";\r\nputenv(\"TZ=Pacific/Rarotonga\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);       \r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\"; \r\n\r\nprint \"TZ=Atlantic/South_Georgia - wrong day.\\n\";\r\nputenv(\"TZ=Atlantic/South_Georgia\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Port-au-Prince - wrong day.\\n\";\r\nputenv(\"TZ=America/Port-au-Prince\");\r\n$tStamp = mktime (17, 17, 17, 1, 12871, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Enderbury - wrong day, off by 2 days.\\n\";\r\nputenv(\"TZ=Pacific/Enderbury\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Kiritimati - wrong day, off by 2 days.\\n\";\r\nputenv(\"TZ=Pacific/Kiritimati\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);                 \r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Managua - wrong day.\\n\";     \r\nputenv(\"TZ=America/Managua\");\r\n$tStamp = mktime (17, 17, 17, 1, 12879, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";     \r\n\r\nprint \"TZ=Pacific/Pitcairn - wrong day.\\n\";\r\nputenv(\"TZ=Pacific/Pitcairn\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Fakaofo - wrong day.\\n\";\r\nputenv(\"TZ=Pacific/Fakaofo\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Saturday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Saturday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Johnston - wrong day.\\n\";\r\nputenv(\"TZ=Pacific/Johnston\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Friday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Friday            00:00:00\\n\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33415-1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nprint \"TZ=America/Jujuy  - Is it OK for this to be 2 AM, rather than 1\r\nAM as per most DST transitions?\\n\";\r\nputenv(\"TZ=America/Jujuy\");\r\n$tStamp = mktime (17, 17, 17, 1, 7593, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Tbilisi - Is it OK for this to be 2 AM?\\n\";\r\nputenv(\"TZ=Asia/Tbilisi\");\r\n$tStamp = mktime (17, 17, 17, 1, 12863, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            00:00:00\\n\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33415-2.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nprint \"TZ=Africa/Bujumbura - *Note*: Unexpected, as does not appear to\r\nhave a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Africa/Bujumbura\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Thimbu - Is it OK for this to be 0:30 AM? yes\\n\";\r\nputenv(\"TZ=Asia/Thimbu\");\r\n$tStamp = mktime (17, 17, 17, 1, 6476, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:30:00\\n\\n\";\r\n\r\nprint \"TZ=Indian/Cocos - Is it OK for this to be 6:30 AM? Note: does not\r\nappear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Indian/Cocos\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Africa/Lubumbashi - Is it OK for this to be 2 AM? Note: does\r\nnot appear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Africa/Lubumbashi\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Saturday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Saturday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Kashgar - Is it OK for this to be 3 AM? yes\\n\";\r\nputenv(\"TZ=Asia/Kashgar\");\r\n$tStamp = mktime (17, 17, 17, 1, 3767, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            03:00:00\\n\\n\";\r\n\r\nprint \"TZ=Indian/Christmas - Is it OK for this to be 7 AM?  Note: does\r\nnot appear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Indian/Christmas\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Santo_Domingo - Is it OK for this to be 0:30 AM? yes\\n\";\r\nputenv(\"TZ=America/Santo_Domingo\");\r\n$tStamp = mktime (17, 17, 17, 1, 291, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            00:30:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Truk - Is it OK for this to be 10 AM?  Note: does not\r\nappear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Truk\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Ponape - Is it OK for this to be 11 AM?  Note: does\r\nnot appear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Ponape\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Scoresbysund - Is it OK for this to be 2 AM? yes\\n\";\r\nputenv(\"TZ=America/Scoresbysund\");\r\n$tStamp = mktime (17, 17, 17, 1, 4099, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            02:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Guyana - Is it OK for this to be 0:45 AM? yes\\n\";\r\nputenv(\"TZ=America/Guyana\");\r\n$tStamp = mktime (17, 17, 17, 1, 2031, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:45:00\\n\\n\";\r\n\r\nprint \"TZ=Asia/Tehran - Is it OK for this to be 0:30 AM? yes\\n\";\r\nputenv(\"TZ=Asia/Tehran\");\r\n$tStamp = mktime (17, 17, 17, 1, 2855, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:30:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Tarawa - Is it OK for this to be Midday? Note: does\r\nnot appear to have a DST or timezone transition.\\n\";     \r\nputenv(\"TZ=Pacific/Tarawa\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Africa/Monrovia - Is it OK for this to be 00:44:30 AM? yes\\n\";\r\nputenv(\"TZ=Africa/Monrovia\");\r\n$tStamp = mktime (17, 17, 17, 1, 845, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:44:30\\n\\n\";\r\n\r\nprint \"TZ=Asia/Katmandu - Is it OK for this to 0:15 AM?. yes\\n\";\r\nputenv(\"TZ=Asia/Katmandu\");\r\n$tStamp = mktime (17, 17, 17, 1, 5838, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:15:00\\n\\n\";         \r\n\r\nprint \"TZ=Pacific/Nauru - Is it OK for this to be 0:30? yes\\n\";\r\nputenv(\"TZ=Pacific/Nauru\");\r\n$tStamp = mktime (17, 17, 17, 1, 3401, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:30:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Niue - Is it OK for this to be 0:30 AM? yes\\n\";\r\nputenv(\"TZ=Pacific/Niue\");\r\n$tStamp = mktime (17, 17, 17, 1, 3189, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Sunday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Sunday            00:30:00\\n\\n\";            \r\n\r\nprint \"TZ=Pacific/Port_Moresby - Is it OK for this to be 10 AM? No DST\r\nor timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Port_Moresby\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);   \r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp); \r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            00:00:00\\n\\n\";          \r\n\r\nprint \"TZ=America/Miquelon - Is it OK for this to be 1 AM ? yes\\n\";\r\nputenv(\"TZ=America/Miquelon\");\r\n$tStamp = mktime (17, 17, 17, 1, 3767, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Thursday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Thursday            01:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Palau - Is it OK for this to be 9 AM? No DST or\r\ntimezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Palau\");   \r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);   \r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Saturday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Saturday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Funafuti - Is it OK for this to be midday?  Note: does\r\nnot appear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Funafuti\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Wednesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Wednesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Wake - Is it OK for this to be midday?  Note: does not\r\nappear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Wake\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=Pacific/Wallis - Is it OK for this to be midday?  Note: does\r\nnot appear to have a DST or timezone transition.\\n\";\r\nputenv(\"TZ=Pacific/Wallis\");\r\n$tStamp = mktime (17, 17, 17, 1, 1, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Tuesday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Tuesday            00:00:00\\n\\n\";\r\n\r\nprint \"TZ=America/Paramaribo - Is it OK for this to be 0:30 AM? yes\\n\";\r\nputenv(\"TZ=America/Paramaribo\");\r\n$tStamp = mktime (17, 17, 17, 1, 5381, 1970);\r\nprint \"tStamp=\". date(\"l Y-m-d H:i:s T I\", $tStamp). \"\\n\";\r\n$strtotime_tstamp = strtotime(\"next Monday\", $tStamp);\r\nprint \"result=\".date(\"l Y-m-d H:i:s T I\", $strtotime_tstamp).\"\\n\";\r\nprint \"wanted=Monday            00:30:00\\n\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33452.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\necho date('Y-W', strtotime('2005-1-1')), \"\\n\";\r\necho date('o-W', strtotime('2005-1-1')), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33532.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv(\"TZ=\");\r\nsetlocale(LC_ALL, 'C');\r\nerror_reporting(0);\r\nprint \"TZ has NOT been set\\n\";\r\nprint \"Should strftime==datestr? Strftime seems to assume GMT tStamp.\\n\";\r\n$input = \"10:00:00 AM July 1 2005\";\r\nprint \"input    \" . $input . \"\\n\";\r\n$tStamp = strtotime($input);\r\nprint \"strftime \" . strftime(\"%r %B%e %Y %Z %z\", $tStamp) . \"\\n\";\r\nprint \"datestr  \" . date (\"H:i:s A F j Y T\", $tStamp) . \"\\n\";\r\n\r\nprint \"\\nSetting TZ\\n\";\r\nputenv(\"TZ=Australia/Sydney\");\r\n$input = \"10:00:00 AM July 1 2005\";\r\nprint \"input    \" . $input . \"\\n\";\r\n$tStamp = strtotime($input);\r\nprint \"strftime \" . strftime(\"%r %B%e %Y %Z %z\", $tStamp) . \"\\n\";\r\nprint \"datestr  \" . date (\"H:i:s A F j Y T\", $tStamp) . \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33536.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"GMT\");\r\necho (strtotime(\"monkey\")),\"\\n\";\r\nprint date(\"Y-m-d\", strtotime(\"monkey\")) .\"\\n\";\r\nprint date(\"Y-m-d\", false) .\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33562.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\necho \"[\", date(\"\"), \"]\\n\";\r\necho \"done\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33563.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\n$strCurrDate = date('Y-m-d H:i:s',strtotime('2005-06-30 21:04:23'));\r\n$strMonAfter = date('Y-m-d H:i:s',strtotime('+1 month',strtotime($strCurrDate)));\r\n\r\necho \"strCurrDate:$strCurrDate strMonAfter:$strMonAfter\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33578.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tdate_default_timezone_set(\"UTC\");\r\n\techo date('m/d', strtotime('Oct 11')), \"\\n\";\r\n\techo date('m/d', strtotime('11 Oct')), \"\\n\";\r\n\techo date('m/d/Y', strtotime('11 Oct 2005')), \"\\n\";\r\n\techo date('m/d', strtotime('Oct11')), \"\\n\";\r\n\techo date('m/d', strtotime('11Oct')), \"\\n\";\r\n\techo date('m/d/Y', strtotime('11Oct 2005')), \"\\n\";\r\n\techo date('m/d/Y', strtotime('11Oct2005')), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33869.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tdate_default_timezone_set(\"UTC\");\r\n\t$tm = strtotime(\"2005-01-01 01:01:01\");\r\n\techo date(DATE_ISO8601, strtotime('+5days', $tm));\r\n\techo \"\\n\";\r\n\techo date(DATE_ISO8601, strtotime('+1month', $tm));\r\n\techo \"\\n\";\r\n\techo date(DATE_ISO8601, strtotime('+1year', $tm));\r\n\techo \"\\n\";\r\n\techo date(DATE_ISO8601, strtotime('+5 days', $tm));\r\n\techo \"\\n\";\r\n\techo date(DATE_ISO8601, strtotime('+1 month', $tm));\r\n\techo \"\\n\";\r\n\techo date(DATE_ISO8601, strtotime('+1 year', $tm));\r\n\techo \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug33957.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"UTC\");\r\n\r\nfor ($i = 14; $i <= 31; $i++) {\r\n\techo \"1992-12-$i  \", date(\"W\", strtotime(\"1992-12-$i\")), \"\\n\";\r\n}\r\nfor ($i = 1; $i <= 8; $i++) {\r\n\techo \"1993-01-$i  \", date(\"W\", strtotime(\"1993-01-$i\")), \"\\n\";\r\n}\r\necho \"----\\n\";\r\necho \"             \";\r\nforeach (range(1992, 2019) as $year) {\r\n\techo \"$year     \";\r\n}\r\necho \"\\n\";\r\n\r\nfor ($i = 14; $i <= 31; $i++) {\r\n\techo \"   (12-$i) \";\r\n\tforeach (range(1992, 2019) as $year) {\r\n\t\techo sprintf(\" %02d-\", date(\"W\", strtotime(\"$year-12-$i\")));\r\n\t\techo sprintf(\"%04d \", date(\"o\", strtotime(\"$year-12-$i\")));\r\n\t}\r\n\techo \"\\n\";\r\n}\r\nfor ($i = 1; $i <= 18; $i++) {\r\n\tprintf(\"+1 (01-%02d) \", $i);\r\n\tforeach (range(1993, 2020) as $year) {\r\n\t\techo sprintf(\" %02d-\", date(\"W\", strtotime(\"$year-1-$i\")));\r\n\t\techo sprintf(\"%04d \", date(\"o\", strtotime(\"$year-1-$i\")));\r\n\t}\r\n\techo \"\\n\";\r\n}\r\necho \"----\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug34087.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"UTC\");\r\necho \"Y/m/d: \", strtotime(\"2005/8/12\"), \"\\n\";\r\necho \"Y-m-d: \", strtotime(\"2005-8-12\"), \"\\n\";\r\n\r\necho date(DATE_ISO8601, strtotime(\"2005/1/2\")), \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"2005/01/02\")), \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"2005/01/2\")), \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"2005/1/02\")), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug34304.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"UTC\");\r\necho date('o\\-\\WW\\-N', strtotime('2 January 2005')), \"\\n\";\r\necho date('o\\-\\WW\\-N', strtotime('9 January 2005')), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug34676.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n$tests = array(\r\n\t'noon', 'midnight'\r\n);\r\n\r\nforeach ($tests as $test) {\r\n\t$t = strtotime(\"2005-12-22 \". $test);\r\n\tprintf(\"%-10s => %s\\n\", $test, date(DATE_ISO8601, $t));\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug34771.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n$tests = array(\r\n\t'12am', '1am', '1pm',\r\n\t'12a.m.', '1a.m.', '1p.m.',\r\n\t'12:00am', '1:00am', '1:00pm',\r\n\t'12:00a.m.', '1:00a.m.', '1:00p.m.'\r\n);\r\n\r\nforeach ($tests as $test) {\r\n\t$t = strtotime(\"2005-12-22 \". $test);\r\n\tprintf(\"%-10s => %s\\n\", $test, date(DATE_ISO8601, $t));\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35143.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n__var_dump(date_default_timezone_get());\r\n$a = gettimeofday();\r\nunset($a[\"sec\"]);\r\nunset($a[\"usec\"]);\r\n__var_dump($a);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35218.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\ndate_default_timezone_set(\"UTC\");\r\n$date = 'Sun, 13 Nov 2005 22:56:10 -0800 (PST)';\r\n$date_fixed = 'Sun, 13 Nov 2005 22:56:10 -0800';\r\n\r\n__var_dump(strtotime($date));\r\n__var_dump(strtotime($date_fixed));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35414.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime(\"Sat 26th Nov 2005 18:18\")) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"26th Nov\", 1134340285)) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"Dec. 4th, 2005\")) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"December 4th, 2005\")) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35422.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime(\"July 1, 2000 00:00:00 UTC\")) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"July 1, 2000 00:00:00 GMT\")) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35425.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nputenv('TZ=America/Montreal');\r\n\r\n$time = mktime(1,1,1,1,1,2005);\r\nforeach (array('B','d','h','H','i','I','L','m','s','t','U','w','W','y','Y','z','Z') as $v) {\r\n\t__var_dump(idate($v, $time));\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35456.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n$t = 1133216119;\r\n\r\necho date(DATE_ISO8601, strtotime(\"+ 1 day\", $t)) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"+ 1 month\", $t)) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"+ 1 week\", $t)) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35499.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime(\"11/20/2005 8:00 AM \\r\\n\")) . \"\\n\";\r\necho date(DATE_ISO8601, strtotime(\"  11/20/2005 8:00 AM \\r\\n\")) . \"\\n\";\r\n__var_dump(strtotime(\" a \"));\r\n__var_dump(strtotime(\" \\n \"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35624.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n$days = array(\"monday\",\"mon\",\"tuesday\",\"tue\",\"wednesday\",\"wed\",\"thursday\",\"thu\",\"friday\",\"fri\",\"saturday\",\"sat\",\"sunday\",\"sun\");\r\n\r\nforeach ($days as $day) {\r\n\techo date(\"D\", strtotime($day));\r\n\techo date(\"D\", strtotime(ucfirst($day)));\r\n\techo \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35630.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime('5 january 2006+3day+1day')) . \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35699.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime('1964-06-06')), \"\\n\";\r\necho date(DATE_ISO8601, strtotime('1963-06-06')), \"\\n\";\r\necho date(DATE_ISO8601, strtotime('1964-01-06')), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35705.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime('2000-10-10T10:12:30.000')) . \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35885.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\n$ts = date(DATE_ISO8601, strtotime('NOW'));\r\n$ts2 = date(DATE_ISO8601, time());\r\n\r\necho ($ts == $ts2) ? \"T\" : \"F\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/bug35887.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n\r\necho date(DATE_ISO8601, strtotime('2006-1-6T0:0:0-8:0')) . \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$tmp = \"cr\";\r\nputenv (\"TZ=GMT0\");\r\n\r\nfor($a = 0;$a < strlen($tmp); $a++){\r\n\techo $tmp[$a], ': ', date($tmp[$a], 1043324459).\"\\n\";\r\n}\r\n\r\nputenv (\"TZ=MET\");\r\n\r\nfor($a = 0;$a < strlen($tmp); $a++){\r\n\techo $tmp[$a], ': ', date($tmp[$a], 1043324459).\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_create-1.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nif (!function_exists('date_create')) die(\"SKIP\");\r\n\r\ndate_default_timezone_set('Europe/Oslo');\r\n$tz1 = timezone_open(\"GMT\");\r\n$tz2 = timezone_open(\"Europe/London\");\r\n$tz3 = timezone_open(\"America/Los_Angeles\");\r\n$d = array();\r\n$d[] = date_create(\"2005-07-14 22:30:41\");\r\n$d[] = date_create(\"2005-07-14 22:30:41 GMT\");\r\n$d[] = date_create(\"2005-07-14 22:30:41 CET\");\r\n$d[] = date_create(\"2005-07-14 22:30:41 CEST\");\r\n$d[] = date_create(\"2005-07-14 22:30:41 Europe/Oslo\");\r\n$d[] = date_create(\"2005-07-14 22:30:41 America/Los_Angeles\");\r\n\r\n$d[] = date_create(\"2005-07-14 22:30:41\", $tz1);\r\n$d[] = date_create(\"2005-07-14 22:30:41\", $tz2);\r\n$d[] = date_create(\"2005-07-14 22:30:41\", $tz3);\r\n\r\n$d[] = date_create(\"2005-07-14 22:30:41 GMT\", $tz1);\r\n$d[] = date_create(\"2005-07-14 22:30:41 GMT\", $tz2);\r\n$d[] = date_create(\"2005-07-14 22:30:41 GMT\", $tz3);\r\n\r\n$d[] = date_create(\"2005-07-14 22:30:41 Europe/Oslo\", $tz1);\r\n$d[] = date_create(\"2005-07-14 22:30:41 America/Los_Angeles\", $tz2);\r\n\r\nforeach($d as $date) {\r\n\techo $date->format(DateTime::ISO8601), \"\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_create-2.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n  if (!function_exists('date_create')) die(\"SKIP\");\r\n\r\ndate_default_timezone_set(\"GMT\");\r\n$d = date_create(\"2005-07-18 22:10:00 +0400\");\r\necho $d->format(DateTime::RFC822), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_default_timezone_get-1.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ=');\r\n\techo @date_default_timezone_get(), \"\\n\";\r\n\techo @date('e'), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_default_timezone_get-2.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ=');\r\n\techo @date_default_timezone_get(), \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_default_timezone_get-3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ=Europe/Rome');\r\n\techo date_default_timezone_get(), \"\\n\";\r\n\r\n\tdate_default_timezone_set(\"America/Chicago\");\r\n\techo date_default_timezone_get(), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_default_timezone_set-1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv(\"TZ=\");\r\n\t$date1 = @strtotime(\"2005-01-12 08:00:00\");\r\n\t$date2 = @strtotime(\"2005-07-12 08:00:00\");\r\n\tdate_default_timezone_set(\"America/Indiana/Knox\");\r\n\t$date3 = strtotime(\"2005-01-12 08:00:00\");\r\n\t$date4 = strtotime(\"2005-07-12 08:00:00\");\r\n\r\n\techo date_default_timezone_get(), \"\\n\";\r\n\techo date(DATE_ISO8601, $date1), \"\\n\";\r\n\techo date(DATE_ISO8601, $date2), \"\\n\";\r\n\techo date(DATE_ISO8601, $date3), \"\\n\";\r\n\techo date(DATE_ISO8601, $date4), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_modify-1.php",
    "content": "[expectf]\r\nThu, 19 Aug 93 23:59:59 -1200\r\nSat, 21 Aug 93 00:00:00 +1200\r\nSun, 27 Mar 05 01:59:59 +0100\r\nSun, 27 Mar 05 03:00:00 +0200\r\nSun, 30 Oct 05 01:59:59 +0200\r\nSun, 30 Oct 05 03:00:00 +0100\r\n[file]\r\n<?php \r\n  if (!function_exists('date_create')) die(\"SKIP\");\r\n\r\n// .Net 4 seems to be unaware that Kwajalein clocks\r\n// skipped Aug 20 as they went ahead by 24 hours.\r\n// Also, the timezone on Aug 19 is -12, not +12\r\n// as it changed from KWAT (UTC-12) to MHT (UTC+12).\r\n// http://www.timeanddate.com/worldclock/clockchange.html?n=2243&year=1993\r\ndate_default_timezone_set(\"Pacific/Kwajalein\");\r\n$ts = date_create(\"Thu Aug 19 1993 23:59:59\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n$ts->modify(\"+1 second\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n\r\ndate_default_timezone_set(\"Europe/Amsterdam\");\r\n$ts = date_create(\"Sun Mar 27 01:59:59 2005\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n$ts->modify(\"+1 second\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n\r\n$ts = date_create(\"Sun Oct 30 01:59:59 2005\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n$ts->modify(\"+ 1 hour 1 second\");\r\necho date_format($ts, DateTime::RFC822), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_modify-2.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n  if (!function_exists('date_create')) die(\"SKIP\");\r\n  \r\ndate_default_timezone_set(\"GMT\");\r\n$d = date_create(\"2005-07-18 22:10:00 +0400\");\r\necho date_format($d, DateTime::RFC822), \"\\n\";\r\ndate_modify($d, \"+1 hour\");\r\necho date_format($d, DateTime::RFC822), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/date_modify-3.phpt",
    "content": "--TEST--\nDateTime: Skip invalid date/time.\n--SKIPIF--\n<?php if (!function_exists('date_create')) die('skip');?>\n--FILE--\n<?php \ndate_default_timezone_set(\"Europe/Amsterdam\");\n$ts = date_create(\"Sun Mar 27 01:59:59 2005\");\necho date_format($ts, DateTime::RFC822), \"\\n\";\n$ts->modify(\"+1 second\");\necho date_format($ts, DateTime::RFC822), \"\\n\";\n?>\n===DONE===\n--EXPECTF--\nSun, 27 Mar 05 01:59:59 +0100\nSun, 27 Mar 05 03:00:00 +0200\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/default-timezone-1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ='); // clean TZ so that it doesn't bypass the ini option\r\n\tini_set(\"date.timezone\",\"Europe/Prague\");\t\r\n\techo strtotime(\"2005-06-18 22:15:44\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/default-timezone-2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ='); // clean TZ so that it doesn't bypass the ini option\r\n\tini_set(\"date.timezone\",\"US/Hawaii\");\r\n\techo strtotime(\"2005-06-18 22:15:44\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/format-negative-timestamp.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"GMT\");\r\n\r\n$i = 5;\r\n$max = getrandmax();\r\n$max_2 = $max / 2;\r\n\r\nwhile($i--) {\r\n\t$new_tm = rand(1, $max);\r\n\tif ($new_tm > $max_2)\r\n\t\t$new_tm *= -1;\r\n\r\n\tif (strtotime(\"@$new_tm\") != $new_tm) {\r\n\t\techo \"Error when parsing: @$new_tm\\n\";\r\n\t}\r\n}\r\n\r\necho \"done!\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/mktime-1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n  date_default_timezone_set(\"Europe/Amsterdam\");\r\n  # MacOS/X libc implementation doesn't treat out-of-range values\r\n  # the same way other unices do (Bug# 10686) so some extra code\r\n  # was added to datetime.c to take care of this \r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 3,  0, 2000)) .\"\\n\";\r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 3, -1, 2000)) .\"\\n\";\r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 2, 29, 2000)) .\"\\n\";\r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 3,  0, 2001)) .\"\\n\";\r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 2, 29, 2001)) .\"\\n\";\r\n\techo date(\"Y-m-d\", mktime( 12, 0, 0, 0,  0, 2000)) .\"\\n\";\r\n\r\n  putenv(\"TZ=Europe/London\");\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,3,+90,2000,-1)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,3,+90,2000,0)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,3,+90,2000,1)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-90,2000,-1)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-90,2000,0)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-90,2000,1)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-1,2000,-1)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-1,2000,0)).\"\\n\";\r\n  echo date(\"Y-m-d H:i:s\", mktime(12,0,0,5,-1,2000,1)).\"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/mktime-2.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$timezones = array(\r\n    'GMT0',\r\n    'Europe/London'\r\n);\r\n\r\nforeach($timezones as $timezone)\r\n{\r\n    putenv('TZ='.$timezone);\r\n\r\n    /* status of daylight saving time unknown */\r\n    __var_dump(mktime(0, 0, 0, 1, 1, 2002));\r\n    /* status of daylight saving time unknown */\r\n    __var_dump(mktime(0, 0, 0, 1, 1, 2002, -1));\r\n    /* daylight saving time is not in effect */\r\n    __var_dump(mktime(0, 0, 0, 1, 1, 2002, 0));\r\n    /* daylight saving time is in effect */\r\n    __var_dump(mktime(0, 0, 0, 1, 1, 2002, 1));\r\n\r\n    /* status of daylight saving time unknown */\r\n    __var_dump(mktime(0, 0, 0, 7, 1, 2002));\r\n    /* status of daylight saving time unknown */\r\n    __var_dump(mktime(0, 0, 0, 7, 1, 2002, -1));\r\n    /* daylight saving time is not in effect */\r\n    __var_dump(mktime(0, 0, 0, 7, 1, 2002, 0));\r\n    /* daylight saving time is in effect */\r\n    __var_dump(mktime(0, 0, 0, 7, 1, 2002, 1));\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/date/mktime-3.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$tzs = array(\"America/Toronto\", \"Europe/Oslo\");\r\n$years = array(0, 69, 70, 71, 99, 100, 105, 1900, 1901, 1902, 1999, 2000, 2001);\r\n\r\nforeach ($tzs as $tz) {\r\n\techo $tz, \"\\n\";\r\n\tdate_default_timezone_set($tz);\r\n\tforeach ($years as $year) {\r\n\t\tprintf(\"Y: %4d - \", $year);\r\n\t\t$ret = mktime(1, 1, 1, 1, 1, $year);\r\n\t\tif ($ret == FALSE) {\r\n\t\t\techo \"out of range\\n\";\r\n\t\t} else {\r\n\t\t\techo date(\"F \".DATE_ISO8601, $ret), \"\\n\";\r\n\t\t}\r\n\t}\r\n\techo \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/strtotime.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ndate_default_timezone_set('Europe/Oslo');\r\n$d = array();\r\n$d[] = strtotime(\"2005-07-14 22:30:41\");\r\n$d[] = strtotime(\"2005-07-14 22:30:41 GMT\");\r\n\r\nforeach($d as $date) {\r\n\techo date(DATE_ISO8601, $date), \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/date/timezone-configuration.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tputenv('TZ=Europe/Oslo');\r\n\techo strtotime(\"2005-06-18 22:15:44\"), \"\\n\";\r\n\r\n\tputenv('TZ=Europe/London');\r\n\techo strtotime(\"2005-06-18 22:15:44\"), \"\\n\";\r\n\r\n\tdate_default_timezone_set('Europe/Oslo');\r\n\techo strtotime(\"2005-06-18 22:15:44\"), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/a.inc",
    "content": "<?\r\necho $a;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/function_foo.inc",
    "content": "<?\r\nfunction foo($x)\r\n{\r\n\techo $x;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/noreturn.inc",
    "content": "<?php\r\n\r\n$var = 'PHP';\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/return.inc",
    "content": "<?php\r\n\r\n$var = 'PHP';\r\n\r\nreturn $var;\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test001.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfor ($i = 0; $i < 2; $i++)\r\n{\r\n\tif ($i) { \r\n?>\r\nThis is true.\r\n<?php \r\n\t} else { \r\n?>\r\nThis is false.\r\n<?php\r\n\t}\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test002.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php echo \"This is a test\" ?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test003.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n    echo \"This is a test\"; // This is a one-line c++ style comment\r\n    /* This is a multi line comment\r\n       yet another line of comment */\r\n    echo \"This is yet another test\";\r\n    echo \"One Final Test\"; # This is shell-style style comment\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test004.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<? ?>\r\nThis is an <?php # echo \"simple\";?> example.\r\nThe header above will say 'This is an example'.\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test005.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\n /* \r\n    echo \"This is a test\"; /* This comment will cause a problem */\r\n */\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$bool = TRUE;   // a bool\r\n$str  = \"foo\";  // a string\r\n$int  = 12;     // an integer\r\n\r\necho gettype($bool); // prints out \"bool\"\r\necho gettype($str);  // prints out \"string\"\r\n\r\n// If this is an integer, increment it by four\r\nif (is_int($int)) {\r\n    $int += 4;\r\n}\r\necho $int;\r\n\r\n// If $bool is a string, print it out\r\n// (does not print out anything)\r\nif (is_string($bool)) {\r\n    echo \"string: $bool\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test007.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$action = \"show_version\";\r\n$show_separators = true;\r\n\r\n// == is an operator which test\r\n// equality and returns a bool\r\nif ($action == \"show_version\") {\r\n    echo \"The version is 1.23\";\r\n}\r\n\r\n// this is not necessary...\r\nif ($show_separators == TRUE) {\r\n    echo \"separator\\n\";\r\n}\r\n\r\n// ...because you can simply type\r\nif ($show_separators) {\r\n    echo \"separator\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test008.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho gettype((bool) \"\");        // bool(false)\r\nvar_dump((bool) \"\");\r\necho \"\\n\";\r\n\r\necho gettype((bool) 1);         // bool(true)\r\nvar_dump((bool) 1);\r\necho \"\\n\";\r\n\r\necho gettype((bool) -2);        // bool(true)\r\nvar_dump((bool) -2);\r\necho \"\\n\";\r\n\r\necho gettype((bool) \"foo\");     // bool(true)\r\nvar_dump((bool) \"foo\");\r\necho \"\\n\";\r\n\r\necho gettype ((bool) 2.3e5);     // bool(true)\r\nvar_dump((bool) 2.3e5);\r\necho \"\\n\";\r\n\r\necho gettype((bool) array(12)); // bool(true)\r\nvar_dump((bool) array(12));\r\necho \"\\n\";\r\n\r\necho gettype((bool) array());   // bool(false)\r\nvar_dump((bool) array());\r\necho \"\\n\";\r\n\r\necho gettype((bool) \"false\");   // bool(true)\r\nvar_dump((bool) \"false\");\r\necho \"\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test009.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1234; // decimal number\r\necho $a.\" \";\r\n\r\n$a = -123; // a negative number\r\necho $a.\" \";\r\n\r\n$a = 0123; // octal number (equivalent to 83 decimal)\r\necho $a.\" \";\r\n\r\n$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)\r\necho $a.\" \";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test010.php",
    "content": "[expect]\r\ninteger(2147483647)\r\nint64(2147483648)\r\nint64(2147483648)\r\nint64(50000000000)\r\n[file]\r\n<?php\r\n$large_number =  2147483647;\r\nvar_dump($large_number);\r\n// output: int(2147483647)\r\n\r\n$large_number =  2147483648;\r\nvar_dump($large_number);\r\n// output: float(2147483648)\r\n\r\n// this goes also for hexadecimal specified integers:\r\nvar_dump( 0x80000000 );\r\n// output: float(2147483648)\r\n\r\n$million = 1000000;\r\n$large_number =  50000 * $million;\r\nvar_dump($large_number);\r\n// output: float(50000000000)\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test011.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\necho gettype(25/7);         // float(3.5714285714286) \r\necho gettype((int) (25/7)); // int(3)\r\necho gettype(round(25/7));  // float(4) \r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test012.php.notest",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// Never cast an unknown fraction to integer, as this can sometimes lead to unexpected results.\r\necho (int) ( (0.1+0.7) * 10 ); // echoes 7!\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test013.php",
    "content": "[expect exact] 1.234 1200 7E-10\r\n\r\n[file]\r\n<?php\r\n$a = 1.234; \r\necho $a.\" \";\r\n\r\n$b = 1.2e3; \r\necho $b.\" \";\r\n\r\n$c = 7E-10;\r\necho \"$c \";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test014.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\necho 'this is a simple string';\r\n\r\necho 'You can also have embedded newlines in \r\nstrings this way as it is\r\nokay to do';\r\n\r\n// Outputs: Arnold once said: \"I'll be back\"\r\necho 'Arnold once said: \"I\\'ll be back\"';\r\n\r\n// Outputs: You deleted C:\\*.*?\r\necho 'You deleted C:\\\\*.*?';\r\n\r\n// Outputs: You deleted C:\\*.*?\r\necho 'You deleted C:\\*.*?';\r\n\r\n// Outputs: This will not expand: \\n a newline\r\necho 'This will not expand: \\n a newline';\r\n\r\n// Outputs: Variables do not $expand $either\r\necho 'Variables do not $expand $either';\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test015.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$str = <<<EOD\r\nExample of string\r\nspanning multiple lines\r\nusing heredoc syntax.\r\nEOD;\r\n\r\n/* More complex example, with variables. */\r\nclass foo\r\n{\r\n    var $foo;\r\n    var $bar;\r\n\r\n    function foo()\r\n    {\r\n        $this->foo = 'Foo';\r\n        $this->bar = array('Bar1', 'Bar2', 'Bar3');\r\n    }\r\n}\r\n\r\n$foo = new foo();\r\n$name = 'MyName';\r\n\r\necho <<<EOT\r\nMy name is \"$name\". I am printing some $foo->foo.\r\nNow, I am printing some {$foo->bar[1]}.\r\nThis should print a capital 'A': \\x41\r\nEOT;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test016.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n\t$beer = 'Heineken';\r\n\techo \"$beer's taste is great\\n\"; // works, \"'\" is an invalid character for varnames\r\n\techo \"He drank some $beers\\n\";   // won't work, 's' is a valid character for varnames\r\n\techo \"He drank some ${beer}s\\n\"; // works\r\n\techo \"He drank some {$beer}s\\n\"; // works\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test017.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\n// These examples are specific to using arrays inside of strings.\r\n// When outside of a string, always quote your array string keys \r\n// and do not use {braces} when outside of strings either.\r\n\r\n// Let's show all errors\r\nerror_reporting(E_ALL);\r\n\r\n$fruits = array('strawberry' => 'red', 'banana' => 'yellow');\r\n\r\n// Works but note that this works differently outside string-quotes\r\necho \"A banana is $fruits[banana].\";\r\n\r\n// Works\r\necho \"A banana is {$fruits['banana']}.\";\r\n\r\n// Works but PHP looks for a constant named banana first\r\n// as described below.\r\necho \"A banana is {$fruits[banana]}.\";\r\n\r\n// Won't work, use braces.  This results in a parse error.\r\necho \"A banana is $fruits['banana'].\";\r\n\r\n// Works\r\necho \"A banana is \" . $fruits['banana'] . \".\";\r\n\r\n// Works\r\necho \"This square is $square->width meters broad.\";\r\n\r\n// Won't work. For a solution, see the complex syntax.\r\necho \"This square is $square->width00 centimeters broad.\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test018.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// Let's show all errors\r\nerror_reporting(E_ERROR);\r\n\r\nclass CSquare { public $width; }\r\n$square = new CSquare();\r\n$arr = array( 4 => array(3 => \"ahoj\"), \"foo\" => array(3 => \"nazdar\"));\r\n$great = 'fantastic';\r\n$name = \"great\";\r\n\r\nclass C { public $values; }\r\n$obj = new C();\r\n$obj->values = array(3 => $square);\r\n\r\n// Won't work, outputs: This is { fantastic}\r\necho \"This is { $great}\";\r\n\r\n// Works, outputs: This is fantastic\r\necho \"This is {$great}\";\r\necho \"This is ${great}\";\r\n\r\n// Works\r\necho \"This square is {$square->width}00 centimeters broad.\"; \r\n\r\n// Works\r\necho \"This works: {$arr[4][3]}\";\r\n\r\n// This is wrong for the same reason as $foo[bar] is wrong \r\n// outside a string.  In other words, it will still work but\r\n// because PHP first looks for a constant named foo, it will\r\n// throw an error of level E_NOTICE (undefined constant).\r\n// echo \"This is wrong: {$arr[foo][3]}\"; \r\n\r\n// Works.  When using multi-dimensional arrays, always use\r\n// braces around arrays when inside of strings\r\necho \"This works: {$arr['foo'][3]}\";\r\n\r\n// Works.\r\necho \"This works: \" . $arr['foo'][3];\r\n\r\necho \"You can even write {$obj->values[3]->width}\";\r\n\r\necho \"This is the value of the var named $name: {${$name}}\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test019.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// Get the first character of a string\r\n$str = 'This is a test.';\r\n$first = $str{0};\r\necho \"$first \";\r\n\r\n// Get the third character of a string\r\n$third = $str{2};\r\necho \"$third \";\r\n\r\n// Get the last character of a string.\r\n$str = 'This is still a test.';\r\n$last = $str{strlen($str)-1}; \r\necho \"$last \";\r\n\r\n// Modify the last character of a string\r\n$str = 'Look at the sea';\r\n$str{strlen($str)-1} = 'e';\r\necho \"$str \";\r\n          \r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test020.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$foo = 1 + \"10.5\";                // $foo is float (11.5)\r\nvar_dump($foo);\r\n\r\n$foo = 1 + \"-1.3e3\";              // $foo is float (-1299)\r\nvar_dump($foo);\r\n\r\n$foo = 1 + \"bob-1.3e3\";           // $foo is integer (1)\r\nvar_dump($foo);\r\n\r\n$foo = 1 + \"bob3\";                // $foo is integer (1)\r\nvar_dump($foo);\r\n\r\n$foo = 1 + \"10 Small Pigs\";       // $foo is integer (11)\r\nvar_dump($foo);\r\n\r\n$foo = 4 + \"10.2 Little Piggies\"; // $foo is float (14.2)\r\nvar_dump($foo);\r\n\r\n$foo = \"10.0 pigs \" + 1;          // $foo is float (11)\r\nvar_dump($foo);\r\n\r\n$foo = \"10.0 pigs \" + 1.0;        // $foo is float (11)     \r\nvar_dump($foo);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test021.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array(\"foo\" => \"bar\", 12 => true);\r\n\r\necho $arr[\"foo\"]; // bar\r\necho $arr[12];    // 1\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test022.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array(\"somearray\" => array(6 => 5, 13 => 9, \"a\" => 42));\r\n\r\necho $arr[\"somearray\"][6];    // 5\r\necho $arr[\"somearray\"][13];   // 9\r\necho $arr[\"somearray\"][\"a\"];  // 42\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test023.php",
    "content": "[expect] true true true true\r\n[expect] Notice\r\n[expect] Notice\r\n[expect] true\r\n\r\n[file]\r\n<?php\r\n// This array is the same as ...\r\n$x = array(5 => 43, 32, 56, \"b\" => 12);\r\n\r\n// ...this array\r\n$y = array(5 => 43, 6 => 32, 7 => 56, \"b\" => 12);\r\n\r\necho $x[5] == $y[5] ? \"true \" : \"false \";\r\necho $x[6] == $y[6] ? \"true \" : \"false \";\r\necho $x[7] == $y[7] ? \"true \" : \"false \";\r\necho $x[\"b\"] == $y[\"b\"] ? \"true \" : \"false \";\r\necho $x[\"non existing key\"] == $y[\"non existing key\"] ? \"true \" : \"false \";\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test024.php",
    "content": "[expect] 1256\r\n[expect] Notice\r\n[expect] Notice\r\n[expect] Notice\r\n\r\n[file]\r\n<?php\r\n$arr = array(5 => 1, 12 => 2);\r\n\r\n$arr[] = 56;    // This is the same as $arr[13] = 56;\r\n                // at this point of the script\r\n\r\n$arr[\"x\"] = 42; // This adds a new element to\r\n                // the array with key \"x\"\r\n\r\necho $arr[5];\r\necho $arr[12];\r\necho $arr[13];\r\necho $arr[14];\r\n\r\n                \r\nunset($arr[5]); // This removes the element from the array\r\n\r\necho $arr[5];\r\n\r\nunset($arr);    // This deletes the whole array\r\n\r\necho $arr;\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test025.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// Create a simple array.\r\n$array = array(1, 2, 3, 4, 5);\r\nprint_r($array);\r\n\r\n// Now delete every item, but leave the array itself intact:\r\nforeach ($array as $i => $value) {\r\n    unset($array[$i]);\r\n}\r\nprint_r($array);\r\n\r\n// Append an item (note that the new key is 5, instead of 0 as you\r\n// might expect).\r\n$array[] = 6;\r\nprint_r($array);\r\n\r\n// Re-index:\r\n$array = array_values($array);\r\n$array[] = 7;\r\nprint_r($array);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test026.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = array(1 => 'one', 2 => 'two', 3 => 'three');\r\nunset($a[2]);\r\n/* will produce an array that would have been defined as\r\n   $a = array(1 => 'one', 3 => 'three');\r\n   and NOT\r\n   $a = array(1 => 'one', 2 =>'three');\r\n*/\r\nprint_r($a);\r\n\r\n$b = array_values($a);\r\n// Now $b is array(0 => 'one', 1 =>'three')\r\nprint_r($b);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test027.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\nfunction f($code,$message)\r\n{\r\n  echo \"ERROR: $code\\n\";\r\n}\r\n\r\nerror_reporting(E_ALL);\r\nset_error_handler(\"f\");\r\n\r\n$array = array(1, 2);\r\n$count = count($array);\r\nfor ($i = 0; $i < $count; $i++) {\r\n    echo \"\\nChecking $i: \\n\";\r\n    \r\n    echo \"Bad: \";\r\n    echo $array['$i'];\r\n    echo \"\\n\";\r\n    \r\n    echo \"Good: \";\r\n    echo $array[$i];\r\n    echo \"\\n\";\r\n    \r\n    echo \"Bad: \";\r\n    echo \"{$array['$i']}\";\r\n    echo \"\\n\";\r\n    \r\n    echo \"Good: \";\r\n    echo \"{$array[$i]}\";\r\n    echo \"\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test028.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\n// Let's show all errors\r\nerror_reporting(E_ALL);\r\n\r\n$arr = array('fruit' => 'apple', 'veggie' => 'carrot');\r\n\r\n// Correct\r\nprint $arr['fruit'];  // apple\r\nprint $arr['veggie']; // carrot\r\n\r\n// Incorrect.  This works but also throws a PHP error of\r\n// level E_NOTICE because of an undefined constant named fruit\r\n// \r\n// Notice: Use of undefined constant fruit - assumed 'fruit' in...\r\nprint $arr[fruit];    // apple\r\n\r\n// Let's define a constant to demonstrate what's going on.  We\r\n// will assign value 'veggie' to a constant named fruit.\r\ndefine('fruit', 'veggie');\r\n\r\n// Notice the difference now\r\nprint $arr['fruit'];  // apple\r\nprint $arr[fruit];    // carrot\r\n\r\n// The following is okay as it's inside a string.  Constants are not\r\n// looked for within strings so no E_NOTICE error here\r\nprint \"Hello $arr[fruit]\";      // Hello apple\r\n\r\n// With one exception, braces surrounding arrays within strings\r\n// allows constants to be looked for\r\nprint \"Hello {$arr[fruit]}\";    // Hello carrot\r\nprint \"Hello {$arr['fruit']}\";  // Hello apple\r\n\r\n// This will not work, results in a parse error such as:\r\n// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'\r\n// This of course applies to using autoglobals in strings as well\r\nprint \"Hello $arr['fruit']\";\r\nprint \"Hello $_GET['foo']\";\r\n\r\n// Concatenation is another option\r\nprint \"Hello \" . $arr['fruit']; // Hello apple\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test029.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$bar = 1;\r\n$arr[somefunc($bar)] = 'auky';\r\n\r\necho $arr[somefunc($bar)];\r\n\r\nfunction somefunc($a)\r\n{\r\n\treturn $a.\"func\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test030.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$error_descriptions[E_ERROR]   = \"A fatal error has occured\";\r\n$error_descriptions[E_WARNING] = \"PHP issued a warning\";\r\n$error_descriptions[E_NOTICE]  = \"This is just an informal notice\";\r\n\r\nforeach ($error_descriptions as $i)\r\n{\r\n\techo \"$i \";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test031.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// this\r\n$a = array( 'color' => 'red',\r\n            'taste' => 'sweet',\r\n            'shape' => 'round',\r\n            'name'  => 'apple',\r\n                       4        // key will be 0\r\n          );\r\nprint_r($a);\r\n\r\n// is completely equivalent with\r\n$a['color'] = 'red';\r\n$a['taste'] = 'sweet';\r\n$a['shape'] = 'round';\r\n$a['name']  = 'apple';\r\n$a[]        = 4;        // key will be 0\r\nprint_r($a);\r\n\r\n$b[] = 'a';\r\n$b[] = 'b';\r\n$b[] = 'c';\r\n// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),\r\n// or simply array('a', 'b', 'c')\r\nprint_r($b);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test032.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// array as (property-)map\r\n$map = array( 'version'    => 4,\r\n              'OS'         => 'Linux',\r\n              'lang'       => 'english',\r\n              'short_tags' => true\r\n            );\r\nprint_r($map);\r\n            \r\n// strictly numerical keys\r\n$array = array( 7,\r\n                8,\r\n                0,\r\n                156,\r\n                -10\r\n              );\r\n// this is the same as array(0 => 7, 1 => 8, ...)\r\nprint_r($array);\r\n\r\n$switching = array(         10, // key = 0\r\n                    5    =>  6,\r\n                    3    =>  7, \r\n                    'a'  =>  4,\r\n                            11, // key = 6 (maximum of integer-indices was 5)\r\n                    '8'  =>  2, // key = 8 (integer!)\r\n                    '02' => 77, // key = '02'\r\n                    0    => 12  // the value 10 will be overwritten by 12\r\n                  );\r\nprint_r($switching);\r\n                  \r\n// empty array\r\n$empty = array();         \r\nprint_r($empty);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test033.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$colors = array('red', 'blue', 'green', 'yellow');\r\n\r\nforeach ($colors as $color) {\r\n    echo \"Do you like $color?\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test034.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$colors = array(\"blue\", \"red\");\r\n\r\nforeach ($colors as $key => $color) {\r\n    // won't work:\r\n    //$color = strtoupper($color);\r\n    \r\n    // works:\r\n    $colors[$key] = strtoupper($color);\r\n}\r\nprint_r($colors);\r\n?>\r\n\r\n<?php\r\nforeach ($colors as $key => $color) {\r\n    // won't work:\r\n    $color = strtoupper($color);\r\n    \r\n    // works:\r\n    //$colors[$key] = strtoupper($color);\r\n}\r\nprint_r($colors);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test035.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$firstquarter  = array(1 => 'January', 'February', 'March');\r\nprint_r($firstquarter);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test036.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// fill an array with all items from a directory\r\n$handle = opendir('c:\\\\');\r\nwhile (false !== ($file = readdir($handle))) {\r\n    $files[] = $file;\r\n}\r\nclosedir($handle); \r\n?>\r\n\r\n<?php\r\nsort($files);\r\nforeach ($files as $key => $value)\r\n{\r\n\techo \"[$key]: $value\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test037.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$fruits = array ( \"fruits\"  => array ( \"a\" => \"orange\",\r\n                                       \"b\" => \"banana\",\r\n                                       \"c\" => \"apple\"\r\n                                     ),\r\n                  \"numbers\" => array ( 1,\r\n                                       2,\r\n                                       3,\r\n                                       4,\r\n                                       5,\r\n                                       6\r\n                                     ),\r\n                  \"holes\"   => array (      \"first\",\r\n                                       5 => \"second\",\r\n                                            \"third\"\r\n                                     )\r\n                );\r\n\r\n// Some examples to address values in the array above \r\necho $fruits[\"holes\"][5];    // prints \"second\"\r\necho $fruits[\"fruits\"][\"a\"]; // prints \"orange\"\r\nunset($fruits[\"holes\"][0]);  // remove \"first\"\r\n\r\n// Create a new multi-dimensional array\r\n$juices[\"apple\"][\"green\"] = \"good\"; \r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test038.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr1 = array(2, 3);\r\n$arr2 = $arr1;\r\n$arr2[1] = 4; // $arr2 is changed,\r\n             // $arr1 is still array(2, 3)\r\necho \"{$arr1[1]} {$arr2[1]}\";\r\n             \r\n$arr3 = &$arr1;\r\n$arr3[] = 4; // now $arr1 and $arr3 are the same\r\n\r\necho \"{$arr1[2]} {$arr3[2]}\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test039.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass foo\r\n{\r\n    function do_foo()\r\n    {\r\n        echo \"Doing foo.\"; \r\n    }\r\n}\r\n\r\n$bar = new foo;\r\n$bar->do_foo();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test040.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$obj = (object) 'ciao';\r\necho $obj->scalar;  // outputs 'ciao'\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test041.php",
    "content": "[expect] hello world!\r\n[expect] call_user_func():\r\n[expect] should not be called statically\r\n[expect] Hello World!Hello World!\r\n\r\n[file]\r\n<?php \r\n\r\n// simple callback example\r\nfunction my_callback_function() {\r\n    echo 'hello world!';\r\n}\r\ncall_user_func('my_callback_function'); \r\n\r\n// method callback examples\r\nclass MyClass {\r\n    function myCallbackMethod() {\r\n        echo 'Hello World!';\r\n    }\r\n}\r\n\r\n// static class method call without instantiating an object\r\ncall_user_func(array('MyClass', 'myCallbackMethod')); \r\n\r\n// object method call\r\n$obj = new MyClass();\r\ncall_user_func(array(&$obj, 'myCallbackMethod'));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test042.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$foo = \"0\";  // $foo is string (ASCII 48)\r\nvar_dump($foo);\r\n\r\n$foo += 2;   // $foo is now an integer (2)\r\nvar_dump($foo);\r\n\r\n$foo = $foo + 1.3;  // $foo is now a float (3.3)\r\nvar_dump($foo);\r\n\r\n$foo = 5 + \"10 Little Piggies\"; // $foo is integer (15)\r\nvar_dump($foo);\r\n\r\n$foo = 5 + \"10 Small Pigs\";     // $foo is integer (15)\r\nvar_dump($foo);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test043.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a    = \"abc\"; // $a is a string\r\n$a{1} = \"f\";   // $a is now \"afc\"\r\n\r\necho $a;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test044.php",
    "content": "[expect exact]\r\nbool(true)\r\n\r\n[file]\r\n<?php\r\n$foo = 10;   // $foo is an integer\r\n$bar = (bool) $foo;   // $bar is a bool\r\n\r\nvar_dump($bar);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test045.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$foo = 10;            // $foo is an integer\r\n$str = \"$foo\";        // $str is a string\r\n$fst = (string) $foo; // $fst is also a string\r\n\r\n// This prints out that \"they are the same\"\r\nif ($fst === $str) {\r\n    echo \"they are the same\";\r\n} else {\r\n\t\techo \"they are NOT the same\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test046.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\n$var = \"Bob\";\r\n$Var = \"Joe\";\r\necho \"$var, $Var\";      // outputs \"Bob, Joe\"\r\n\r\n$4site = 'not yet';     // invalid; starts with a number\r\n$_4site = 'not yet';    // valid; starts with an underscore\r\n$tyte = 'mansikka';    // valid; '' is (Extended) ASCII 228.\r\n\r\necho \"$4site, $_4site, $tyte\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test047.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$foo = 'Bob';              // Assign the value 'Bob' to $foo\r\n$bar = &$foo;              // Reference $foo via $bar.\r\n$bar = \"My name is $bar\";  // Alter $bar...\r\necho $bar;\r\necho $foo;                 // $foo is altered too.\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test048.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\n$foo = 25;\r\n$bar = &$foo;      // This is a valid assignment.\r\n$bar = &(24 * 7);  // Invalid; references an unnamed expression.\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test049.php",
    "content": "[expect exact] 25\r\n\r\n[file]\r\n<?php\r\n\r\nfunction test()\r\n{\r\n   return 25;\r\n}\r\n\r\n$bar = &test();\r\necho $bar;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test050.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1;\r\ninclude \"a.inc\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test051.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1; /* global scope */ \r\n\r\nfunction Test()\r\n{ \r\n    $a = 2;\r\n    echo $a; /* reference to local scope variable */ \r\n} \r\n\r\nTest();\r\n\r\necho $a;\r\ninclude \"a.inc\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test052.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1;\r\n$b = 2;\r\n\r\nfunction Sum()\r\n{\r\n    global $a, $b;\r\n\r\n    $b = $a + $b;\r\n} \r\n\r\nSum();\r\necho $b;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test053.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1;\r\n$b = 2;\r\n\r\nfunction Sum()\r\n{\r\n    $GLOBALS[\"b\"] = $GLOBALS[\"a\"] + $GLOBALS[\"b\"];\r\n} \r\n\r\nSum();\r\necho $b;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test054.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\tfunction test_global()\r\n\t{\r\n\t\t// Most predefined variables aren't \"super\" and require \r\n\t\t// 'global' to be available to the functions local scope.\r\n\t\tglobal $HTTP_POST_VARS;\r\n\t    \r\n\t\techo $HTTP_POST_VARS['name'];\r\n\t    \r\n\t\t// Superglobals are available in any scope and do \r\n\t\t// not require 'global'. Superglobals are available \r\n\t\t// as of PHP 4.1.0\r\n\t\techo $_POST['name'];\r\n\t}\r\n\r\n\t$HTTP_POST_VARS['name'] = \"My name\";\r\n\ttest_global();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test055.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction Test ()\r\n{\r\n    $a = 0;\r\n    echo $a;\r\n    $a++;\r\n}\r\n\r\ntest();\r\ntest();\r\ntest();\r\ntest();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test056.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction Test()\r\n{\r\n    static $a = 0;\r\n    echo $a;\r\n    $a++;\r\n}\r\n\r\ntest();\r\ntest();\r\ntest();\r\ntest();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test057.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction Test()\r\n{\r\n    static $count = 0;\r\n\r\n    $count++;\r\n    echo $count;\r\n    if ($count < 10) {\r\n        Test ();\r\n    }\r\n    $count--;\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test058.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\nfunction foo(){\r\n    static $int = 0;          // correct \r\n    static $int = 1+2;        // wrong  (as it is an expression)\r\n//    static $int = sqrt(121);  // wrong  (as it is an expression too)\r\n\r\n    $int++;\r\n    echo $int;\r\n}\r\n\r\nfoo();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test059.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test_global_ref() {\r\n    global $obj;\r\n    $obj = &new stdclass;\r\n}\r\n\r\nfunction test_global_noref() {\r\n    global $obj;\r\n    $obj = new stdclass;\r\n}\r\n\r\ntest_global_ref();\r\nvar_dump($obj);\r\ntest_global_noref();\r\nvar_dump($obj);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test060.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction &get_instance_ref() {\r\n    static $obj;\r\n\r\n    echo \"Static object: \";\r\n    var_dump($obj);\r\n    if (!isset($obj)) {\r\n        // Assign a reference to the static variable\r\n        $obj = &new stdclass;\r\n    }\r\n    $obj->property++;\r\n    return $obj;\r\n}\r\n\r\nfunction get_instance_noref() {\r\n    static $obj;\r\n\r\n    echo \"Static object: \";\r\n    var_dump($obj);\r\n    if (!isset($obj)) {\r\n        // Assign the object to the static variable\r\n        $obj = new stdclass;\r\n    }\r\n    $obj->property++;\r\n    return $obj;\r\n}\r\n\r\nerror_reporting(E_ALL & ~E_NOTICE); // turn off notices\r\n\r\n$obj1 = get_instance_ref();\r\n$still_obj1 = get_instance_ref();\r\necho \"\\n\";\r\n$obj2 = get_instance_noref();\r\n$still_obj2 = get_instance_noref();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test061.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = \"hello\";\r\n?>\r\n\r\n\r\n<?php\r\n$$a = \"world\";\r\n?>\r\n\r\n\r\n<?php\r\necho \"$a ${$a}\";\r\n?>\r\n\r\n\r\n<?php\r\necho \"$a $hello\";\r\n?>\r\n \r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test062.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n// Valid constant names\r\ndefine(\"FOO\",     \"something\");\r\ndefine(\"FOO2\",    \"something else\");\r\ndefine(\"FOO_BAR\", \"something more\");\r\n\r\n// Invalid constant names\r\ndefine(\"2FOO\",    \"something\");\r\n\r\n// This is valid, but should be avoided:\r\n// PHP may one day provide a magical constant\r\n// that will break your script\r\ndefine(\"__FOO__\", \"something\"); \r\n\r\n\r\necho FOO;\r\necho FOO2;\r\necho FOO_BAR;\r\necho __FOO__;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test063.php",
    "content": "[expect php]\r\n\r\n[file]\r\n\r\n<?php\r\ndefine(\"CONSTANT\", \"Hello world.\");\r\necho CONSTANT; // outputs \"Hello world.\"\r\n//echo Constant; // outputs \"Constant\" and issues a notice.\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test064.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\nfunction foo()\r\n{\r\n  echo __FUNCTION__;\r\n}\r\n\r\nclass bar\r\n{\r\n  function f()\r\n  {\r\n    echo __CLASS__;\r\n    echo __METHOD__;\r\n  }\r\n}\r\n\r\nfoo();\r\n$a = new bar();\r\n$a->f();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test065.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$first = true;\r\n$second = 'second';\r\n$third = 'third';\r\n\r\necho $first ? $second : $third;\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test066.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction double($i)\r\n{\r\n    return $i*2;\r\n}\r\n$b = $a = 5;        /* assign the value five into the variable $a and $b */\r\necho \"$b, $a\";\r\n\r\n$c = $a++;          /* post-increment, assign original value of $a \r\n                       (5) to $c */\r\necho $c;\r\n\r\n$e = $d = ++$b;     /* pre-increment, assign the incremented value of \r\n                       $b (6) to $d and $e */\r\necho \"$e, $d\";\r\n\r\n/* at this point, both $d and $e are equal to 6 */\r\n\r\n$f = double($d++);  /* assign twice the value of $d before\r\n                       the increment, 2*6 = 12 to $f */\r\necho $f;\r\n\r\n$g = double(++$e);  /* assign twice the value of $e after\r\n                       the increment, 2*7 = 14 to $g */\r\necho $g;\r\n\r\n$h = $g += 10;      /* first, $g is incremented by 10 and ends with the \r\n                       value of 24. the value of the assignment (24) is \r\n                       then assigned into $h, and $h ends with the value \r\n                       of 24 as well. */\r\necho \"$h, $g\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test067.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.\r\n\r\necho \"$a $b\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test068.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$a = 3;\r\n$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;\r\necho $a;\r\n\r\n$b = \"Hello \";\r\n$b .= \"There!\"; // sets $b to \"Hello There!\", just like $b = $b . \"There!\";\r\necho $b;\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test069.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\necho bin2hex(12 ^ 9),\"\\n\"; // Outputs '5'\r\n\r\necho bin2hex(\"12\" ^ \"9\"),\"\\n\"; // Outputs the Backspace character (ascii 8)\r\n                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8\r\n\r\necho bin2hex(\"hallo\" ^ \"hello\"),\"\\n\"; // Outputs the ascii values #0 #4 #0 #0 #0\r\n                        // 'a' ^ 'e' = #4\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test070.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$cache = array();\r\n\r\n// this works for any expression, not just functions:\r\n$value = @$cache[$key]; \r\n// will not issue a notice if the index $key doesn't exist.\r\n\r\necho \"no warning\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test071.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$output = `echo ahoj`;\r\necho \"<pre>$output</pre>\";\r\n\r\n$output = `type non_existing_file`;\r\necho \"<pre>$output</pre>\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test072.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\necho \"Postincrement<br>\";\r\n$a = 5;\r\necho \"Should be 5: \" . $a++ . \"<br />\\n\";\r\necho \"Should be 6: \" . $a . \"<br />\\n\";\r\n\r\necho \"Preincrement<br>\";\r\n$a = 5;\r\necho \"Should be 6: \" . ++$a . \"<br />\\n\";\r\necho \"Should be 6: \" . $a . \"<br />\\n\";\r\n\r\necho \"Postdecrement<br>\";\r\n$a = 5;\r\necho \"Should be 5: \" . $a-- . \"<br />\\n\";\r\necho \"Should be 4: \" . $a . \"<br />\\n\";\r\n\r\necho \"Predecrement<br>\";\r\n$a = 5;\r\necho \"Should be 4: \" . --$a . \"<br />\\n\";\r\necho \"Should be 4: \" . $a . \"<br />\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test073.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i = 'W';\r\nfor($n=0; $n<6; $n++)\r\n  echo ++$i . \"\\n\";\r\n\r\n/*\r\n  Produces the output similar to the following:\r\n\r\nX\r\nY\r\nZ\r\nAA\r\nAB\r\nAC\r\n\r\n*/\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test074.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = \"Hello \";\r\n$b = $a . \"World!\"; // now $b contains \"Hello World!\"\r\necho $b;\r\n\r\n$a = \"Hello \";\r\n$a .= \"World!\";     // now $a contains \"Hello World!\"\r\necho $a;\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test075.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = array(\"a\" => \"apple\", \"b\" => \"banana\");\r\n$b = array(\"a\" => \"pear\", \"b\" => \"strawberry\", \"c\" => \"cherry\");\r\n\r\n$c = $a + $b; // Union of $a and $b\r\necho \"Union of \\$a and \\$b: \\n\";\r\nvar_dump($c);\r\n\r\n$c = $b + $a; // Union of $b and $a\r\necho \"Union of \\$b and \\$a: \\n\";\r\nvar_dump($c);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test076.php",
    "content": "[expect exact]\r\nbool(true)\r\nbool(false)\r\n\r\n[file]\r\n<?php\r\n$a = array(\"apple\", \"banana\");\r\n$b = array(1 => \"banana\", \"0\" => \"apple\");\r\n\r\nvar_dump($a == $b); // bool(true)\r\nvar_dump($a === $b); // bool(false)\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test077.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass A { }\r\nclass B { }\r\n\r\n$thing = new A;\r\n\r\nif ($thing instanceof A) {\r\n    echo 'A';\r\n}\r\nif ($thing instanceof B) {\r\n    echo 'B';\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test078.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1;\r\n$b = 2;\r\n\r\nif ($a > $b)\r\n    echo \"a is bigger than b\";\r\n\r\n$a = 3;\r\nif ($a > $b)\r\n    echo \"a is bigger than b\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test079.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 1;\r\n$b = 2;\r\n\r\nif ($a > $b) {\r\n    echo \"a is bigger than b\";\r\n} else {\r\n    echo \"a is NOT bigger than b\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test080.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 10;\r\n$b = 10;\r\n\r\nif ($a > $b) {\r\n    echo \"a is bigger than b\";\r\n} elseif ($a == $b) {\r\n    echo \"a is equal to b\";\r\n} else {\r\n    echo \"a is smaller than b\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test081.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$a = 5;\r\n?>\r\n\r\n<?php if ($a == 5): ?>\r\nA is equal to 5\r\n<?php endif; ?>\r\n\r\n<?php if ($a == 6): ?>\r\nA is equal to 5\r\n<?php endif; ?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test082.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$a = 7;\r\n\r\nif ($a == 5):\r\n    echo \"a equals 5\";\r\n    echo \"...\";\r\nelseif ($a == 6):\r\n    echo \"a equals 6\";\r\n    echo \"!!!\";\r\nelse:\r\n    echo \"a is neither 5 nor 6\";\r\nendif;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test083.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n/* example 1 */\r\n\r\n$i = 1;\r\nwhile ($i <= 10) {\r\n    echo $i++;  /* the printed value would be\r\n                    $i before the increment\r\n                    (post-increment) */\r\n}\r\n\r\n/* example 2 */\r\n\r\n$i = 1;\r\nwhile ($i <= 10):\r\n    echo $i;\r\n    $i++;\r\nendwhile;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test084.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i = 0;\r\ndo {\r\n    echo $i;\r\n} while ($i > 0);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test085.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$factor = 2;\r\n$minimum_limit = 10;\r\n\r\n$i = 4;\r\ndo {\r\n    if ($i < 5) {\r\n        echo \"i is not big enough\";\r\n        break;\r\n    }\r\n    $i *= $factor;\r\n    if ($i < $minimum_limit) {\r\n        break;\r\n    }\r\n   echo \"i is ok\";\r\n\r\n    /* process i */\r\n\r\n} while (0);\r\n?>\r\n\r\n<?php\r\n$i = 6;\r\ndo {\r\n    if ($i < 5) {\r\n        echo \"i is not big enough\";\r\n        break;\r\n    }\r\n    $i *= $factor;\r\n    if ($i < $minimum_limit) {\r\n        break;\r\n    }\r\n   echo \"i is ok\";\r\n\r\n    /* process i */\r\n\r\n} while (0);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test086.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n/* example 1 */\r\n\r\nfor ($i = 1; $i <= 10; $i++) {\r\n    echo $i;\r\n}\r\n\r\n/* example 2 */\r\n\r\nfor ($i = 1; ; $i++) {\r\n    if ($i > 10) {\r\n        break;\r\n    }\r\n    echo $i;\r\n}\r\n\r\n/* example 3 */\r\n\r\n$i = 1;\r\nfor (; ; ) {\r\n    if ($i > 10) {\r\n        break;\r\n    }\r\n    echo $i;\r\n    $i++;\r\n}\r\n\r\n/* example 4 */\r\n\r\nfor ($i = 1; $i <= 10; print $i, $i++);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test087.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array(\"one\", \"two\", \"three\");\r\nreset ($arr);\r\nwhile (list(, $value) = each ($arr)) {\r\n    echo \"Value: $value<br />\\n\";\r\n}\r\n\r\nforeach ($arr as $value) {\r\n    echo \"Value: $value<br />\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test088.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array(\"one\", \"two\", \"three\");\r\n\r\necho \"While - list, each\\n\";\r\nreset($arr);\r\nwhile (list($key, $value) = each ($arr)) {\r\n    echo \"Key: $key; Value: $value<br />\\n\";\r\n}\r\n\r\necho \"Foreach\\n\";\r\nforeach ($arr as $key => $value) {\r\n    echo \"Key: $key; Value: $value<br />\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test089.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n/* foreach example 1: value only */\r\n\r\n$a = array(1, 2, 3, 17);\r\n\r\nforeach ($a as $v) {\r\n   echo \"Current value of \\$a: $v.\\n\";\r\n}\r\n\r\n/* foreach example 2: value (with key printed for illustration) */\r\n\r\n$a = array(1, 2, 3, 17);\r\n\r\n$i = 0; /* for illustrative purposes only */\r\n\r\nforeach ($a as $v) {\r\n    echo \"\\$a[$i] => $v.\\n\";\r\n    $i++;\r\n}\r\n\r\n/* foreach example 3: key and value */\r\n\r\n$a = array(\r\n    \"one\" => 1,\r\n    \"two\" => 2,\r\n    \"three\" => 3,\r\n    \"seventeen\" => 17\r\n);\r\n\r\nforeach ($a as $k => $v) {\r\n    echo \"\\$a[$k] => $v.\\n\";\r\n}\r\n\r\n/* foreach example 4: multi-dimensional arrays */\r\n$a = array();\r\n$a[0][0] = \"a\";\r\n$a[0][1] = \"b\";\r\n$a[1][0] = \"y\";\r\n$a[1][1] = \"z\";\r\n\r\nforeach ($a as $v1) {\r\n    foreach ($v1 as $v2) {\r\n        echo \"$v2\\n\";\r\n    }\r\n}\r\n\r\n/* foreach example 5: dynamic arrays */\r\n\r\nforeach (array(1, 2, 3, 4, 5) as $v) {\r\n    echo \"$v\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test090.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array('one', 'two', 'three', 'four', 'stop', 'five');\r\nwhile (list (, $val) = each ($arr)) {\r\n    if ($val == 'stop') {\r\n        break;    /* You could also write 'break 1;' here. */\r\n    }\r\n    echo \"$val<br />\\n\";\r\n}\r\n\r\n/* Using the optional argument. */\r\n\r\n$i = 0;\r\nwhile (++$i) {\r\n    switch ($i) {\r\n    case 5:\r\n        echo \"At 5<br />\\n\";\r\n        break 1;  /* Exit only the switch. */\r\n    case 10:\r\n        echo \"At 10; quitting<br />\\n\";\r\n        break 2;  /* Exit the switch and the while. */\r\n    default:\r\n        break;\r\n    }\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test091.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$arr = array(1,5,8,45,54,32,7);\r\n\r\nwhile (list ($key, $value) = each ($arr)) {\r\n    if (!($key % 2)) { // skip odd members\r\n        continue;\r\n    }\r\n    print($value);\r\n}\r\n\r\n$i = 0;\r\nwhile ($i++ < 5) {\r\n    echo \"Outer\\n\";\r\n    while (1) {\r\n        echo \"&nbsp;&nbsp;Middle\\n\";\r\n        while (1) {\r\n            echo \"&nbsp;&nbsp;Inner\\n\";\r\n            continue 3;\r\n        }\r\n        echo \"This never gets output.\\n\";\r\n    }\r\n    echo \"Neither does this.\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test092.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n  for ($i = 0; $i < 5; ++$i) {\r\n      if ($i == 2)\r\n          continue\r\n      print \"$i\\n\";\r\n  }\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test093.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i = 1;\r\n\r\nif ($i == 0) {\r\n    echo \"i equals 0\";\r\n} elseif ($i == 1) {\r\n    echo \"i equals 1\";\r\n} elseif ($i == 2) {\r\n    echo \"i equals 2\";\r\n}\r\n\r\nswitch ($i) {\r\ncase 0:\r\n    echo \"i equals 0\";\r\n    break;\r\ncase 1:\r\n    echo \"i equals 1\";\r\n    break;\r\ncase 2:\r\n    echo \"i equals 2\";\r\n    break;\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test094.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i =1;\r\n\r\nswitch ($i) {\r\ncase 0:\r\n    echo \"i equals 0\";\r\ncase 1:\r\n    echo \"i equals 1\";\r\ncase 2:\r\n    echo \"i equals 2\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test095.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i = 5;\r\n\r\nswitch ($i) {\r\ncase 0:\r\n    echo \"i equals 0\";\r\n    break;\r\ncase 1:\r\n    echo \"i equals 1\";\r\n    break;\r\ncase 2:\r\n    echo \"i equals 2\";\r\n    break;\r\ndefault:\r\n    echo \"i is not equal to 0, 1 or 2\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test096.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$i = 4;\r\n\r\nswitch ($i):\r\ncase 0:\r\n    echo \"i equals 0\";\r\n    break;\r\ncase 1:\r\n    echo \"i equals 1\";\r\n    break;\r\ncase 2:\r\n    echo \"i equals 2\";\r\n    break;\r\ndefault:\r\n    echo \"i is not equal to 0, 1 or 2\";\r\nendswitch;\r\n?>\r\n\r\n<?php\r\n$i = 0;\r\n\r\nswitch ($i):\r\ncase 0:\r\n    echo \"i equals 0\";\r\n    break;\r\ncase 1:\r\n    echo \"i equals 1\";\r\n    break;\r\ncase 2:\r\n    echo \"i equals 2\";\r\n    break;\r\ndefault:\r\n    echo \"i is not equal to 0, 1 or 2\";\r\nendswitch;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test097.php",
    "content": "[expect ct-error] The 'declare' construct is not supported\r\n\r\n[file]\r\n<?php\r\ndeclare(ticks=1);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test098.php",
    "content": "[expect]\r\n\r\n[file]\r\n<?php\r\n\r\nrequire 'non-existing.php';\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test099.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$a = 1;\r\n$name = \"a.inc\";\r\n\r\nrequire 'a.inc';\r\nrequire $name;\r\nrequire ('a.inc');\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test100.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$x = 10;\r\n\r\nfunction foo()\r\n{\r\n    global $x;\r\n\r\n    include 'xyz.inc';\r\n\r\n    echo \"$x $y $z\";\r\n}\r\n\r\n\r\nfoo();                    // A green apple\r\necho \"$x\";   // A green\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test102.php",
    "content": "[expect exact] \r\n1 2 3\r\n\r\n[file]\r\n<?php\r\n\r\n// This is WRONG and will not work as desired.\r\nif (1)\r\n    include 'xyz.inc';\r\nelse\r\n    include 'xyz.inc';\r\n\r\n\r\n// This is CORRECT.\r\nif (0) {\r\n    include 'xyz.inc';\r\n} else {\r\n    include \"xyz.inc\";\r\n}\r\n\r\necho \"$x $y $z\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test103.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$foo = include 'return.inc';\r\n\r\necho $foo; // prints 'PHP'\r\n\r\n$bar = include 'noreturn.inc';\r\n\r\necho $bar; // prints 1\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test104.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nrequire_once(\"function_foo.inc\");\r\nrequire_once(\"function_foo.inc\");\r\n\r\nfoo(\"ahoj\");\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test105.php",
    "content": "[expect exact] ahoj\r\n\r\n[file]\r\n<?php\r\n// we have different behaviour here - we include only once.\r\nrequire_once(\"function_foo.inc\"); // this will include function_foo.inc\r\nrequire_once(\"FUNCtion_foo.inc\"); // PHP will include again on Windows!\r\n\r\nfoo(\"ahoj\");\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test107.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\ninclude_once(\"function_foo.inc\");\r\ninclude_once(\"function_foo.inc\");\r\n\r\nfoo(\"ahoj\");\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test108.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$makefoo = true;\r\n\r\n/* We can't call foo() from here \r\n   since it doesn't exist yet,\r\n   but we can call bar() */\r\n\r\nbar();\r\n\r\nif ($makefoo) {\r\n  function foo()\r\n  {\r\n    echo \"I don't exist until program execution reaches me.\\n\";\r\n  }\r\n}\r\n\r\n/* Now we can safely call foo()\r\n   since $makefoo evaluated to true */\r\n\r\nif ($makefoo) foo();\r\n\r\nfunction bar() \r\n{\r\n  echo \"I exist immediately upon program start.\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test109.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction foo() \r\n{\r\n  function bar() \r\n  {\r\n    echo \"I don't exist until foo() is called.\\n\";\r\n  }\r\n}\r\n\r\n/* We can't call bar() yet\r\n   since it doesn't exist. */\r\n\r\nfoo();\r\n\r\n/* Now we can call bar(),\r\n   foo()'s processesing has\r\n   made it accessible. */\r\n\r\nbar();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test110.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$input = array(1,2);\r\n\r\nfunction takes_array($input)\r\n{\r\n    echo \"$input[0] + $input[1] = \", $input[0]+$input[1];\r\n    echo '$input[0] + $input[1] = ', $input[0]+$input[1];\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test111.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction add_some_extra(&$string)\r\n{\r\n    $string .= 'and something extra.';\r\n}\r\n\r\n$str = 'This is a string, ';\r\nadd_some_extra($str);\r\necho $str;    // outputs 'This is a string, and something extra.'\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test112.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction makecoffee($type = \"cappuccino\")\r\n{\r\n    return \"Making a cup of $type.\\n\";\r\n}\r\necho makecoffee();\r\necho makecoffee(\"espresso\");\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test113.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction makecoffee($types = array(\"cappuccino\"), $coffeeMaker = NULL)\r\n{\r\n    $device = is_null($coffeeMaker) ? \"hands\" : $coffeeMaker;\r\n    return \"Making a cup of \".join(\", \", $types).\" with $device.\\n\";\r\n}\r\necho makecoffee();\r\necho makecoffee(array(\"cappuccino\", \"lavazza\"), \"teapot\");\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test114.php",
    "content": "[expect] Warning:\r\n[expect] Missing argument #2\r\n[expect]\r\nMaking a bowl of raspberry .\r\n\r\n[file]\r\n<?php\r\nfunction makeyogurt($type = \"acidophilus\", $flavour)\r\n{\r\n    return \"Making a bowl of $type $flavour.\\n\";\r\n}\r\n \r\necho makeyogurt(\"raspberry\");   // won't work as expected\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test115.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction makeyogurt($flavour, $type = \"acidophilus\")\r\n{\r\n    return \"Making a bowl of $type $flavour.\\n\";\r\n}\r\n \r\necho makeyogurt(\"raspberry\");   // works as expected\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test116.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction square($num)\r\n{\r\n    return $num * $num;\r\n}\r\necho square(4);   // outputs '16'.\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test117.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction small_numbers()\r\n{\r\n    return array (0, 1, 2);\r\n}\r\nlist ($zero, $one, $two) = small_numbers();\r\necho \"$zero, $one, $two\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test118.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction &returns_reference()\r\n{\r\n    $someref = \"ahoj\";\r\n    return $someref;\r\n}\r\n\r\n$newref =& returns_reference();\r\necho $newref;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test119.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass c\r\n{\r\nvar $x;\r\nfunction c($y)\r\n{\r\n\t$x = $y;\r\n}\r\n\r\nfunction foo()\r\n{\r\n\techo $this->x;\r\n}\r\n}\r\n\r\n$a = new c(2);\r\n$a->foo();\r\n\r\nfunction &returns_reference(&$x)\r\n{\r\n    $x->foo();\r\n    $x->x = 5;\r\n    return $x;\r\n}\r\n\r\n$newref =& returns_reference($a);\r\n$newref->foo();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test120.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction foo() {\r\n    echo \"In foo()<br />\\n\";\r\n}\r\n\r\nfunction bar($arg = '')\r\n{\r\n    echo \"In bar(); argument was '$arg'.<br />\\n\";\r\n}\r\n\r\n// This is a wrapper function around echo\r\nfunction echoit($string)\r\n{\r\n    echo $string;\r\n}\r\n\r\n$func = 'foo';\r\n$func();        // This calls foo()\r\n\r\n$func = 'bar';\r\n$func('test');  // This calls bar()\r\n\r\n$func = 'echoit';\r\n$func('test');  // This calls echoit()\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test121.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass Foo\r\n{\r\n    function Variable()\r\n    {\r\n        $name = 'Bar';\r\n        $this->$name(); // This calls the Bar() method\r\n    }\r\n    \r\n    function Bar()\r\n    {\r\n        echo \"This is Bar\";\r\n    }\r\n}\r\n\r\n$foo = new Foo();\r\n$funcname = \"Variable\";\r\n$foo->$funcname();  // This calls $foo->Variable()\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test122.php",
    "content": "[expect] Notice:\r\n[expect] Undefined offset (1)\r\n[expect] 1\r\n\r\n[file]\r\n<?php\r\nclass Cart {\r\n    var $items;  // Items in our shopping cart\r\n   \r\n    // Add $num articles of $artnr to the cart\r\n \r\n    function add_item($artnr, $num) {\r\n        $this->items[$artnr] += $num;\r\n    }\r\n   \r\n    // Take $num articles of $artnr out of the cart\r\n \r\n    function remove_item($artnr, $num) {\r\n        if ($this->items[$artnr] > $num) {\r\n            $this->items[$artnr] -= $num;\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }   \r\n    }\r\n}\r\n\r\n$c = new Cart();\r\n$c->add_item(1, 5);\r\n$b = $c->remove_item(1, 6);\r\necho $b;\r\n\r\n$b = $c->remove_item(1,4);\r\necho $b;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test123.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\nclass test {\r\n?>\r\n<?php\r\n    function test() {\r\n        print 'OK';\r\n    }\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test124.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass Cart {\r\n    var $items;  // Items in our shopping cart\r\n   \r\n    // Add $num articles of $artnr to the cart\r\n \r\n    function add_item($artnr, $num) {\r\n        $this->items[$artnr] += $num;\r\n    }\r\n   \r\n    // Take $num articles of $artnr out of the cart\r\n \r\n    function remove_item($artnr, $num) {\r\n        if ($this->items[$artnr] > $num) {\r\n            $this->items[$artnr] -= $num;\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }   \r\n    }\r\n}\r\n\r\n\r\n?>\r\n\r\n<?php\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n$cart = new Cart;\r\n$cart->add_item(\"10\", 1);\r\n\r\n$another_cart = new Cart;\r\n$another_cart->add_item(\"0815\", 3);\r\n?>\r\n\r\n<?php\r\n// correct, single $\r\n$cart->items = array(\"10\" => 2); \r\nvar_dump($cart->items);\r\n\r\n// invalid, because $cart->$items becomes $cart->\"\"\r\n//$cart->$items = array(\"10\" => 1);\r\n\r\n// correct, but may or may not be what was intended:\r\n// $cart->$myvar becomes $cart->items\r\n$myvar = 'items';\r\n$cart->$myvar = array(\"10\" => 1);  \r\nvar_dump($cart->items);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test125.php",
    "content": "[expect] kris\r\n[expect] Notice\r\n[expect] Undefined offset (10)\r\n\r\n[file]\r\n<?php\r\nclass Cart {\r\n    var $items;  // Items in our shopping cart\r\n   \r\n    // Add $num articles of $artnr to the cart\r\n \r\n    function add_item($artnr, $num) {\r\n        $this->items[$artnr] += $num;\r\n    }\r\n   \r\n    // Take $num articles of $artnr out of the cart\r\n \r\n    function remove_item($artnr, $num) {\r\n        if ($this->items[$artnr] > $num) {\r\n            $this->items[$artnr] -= $num;\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }   \r\n    }\r\n}\r\n\r\n\r\n?>\r\n<?php\r\nclass Named_Cart extends Cart {\r\n    var $owner;\r\n  \r\n    function set_owner ($name) {\r\n        $this->owner = $name;\r\n    }\r\n}\r\n?>\r\n<?php\r\n$ncart = new Named_Cart;    // Create a named cart\r\n$ncart->set_owner(\"kris\");  // Name that cart\r\nprint $ncart->owner;        // print the cart owners name\r\n$ncart->add_item(\"10\", 1);  // (inherited functionality from cart)\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test126.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass A\r\n{\r\n    function A()\r\n    {\r\n        echo \"I am the constructor of A.<br />\\n\";\r\n    }\r\n\r\n    function B()\r\n    {\r\n        echo \"I am a regular function named B in class A.<br />\\n\";\r\n        echo \"I am not a constructor in A.<br />\\n\";\r\n    }\r\n}\r\n\r\nclass B extends A\r\n{\r\n    function C()\r\n    {\r\n        echo \"I am a regular function.<br />\\n\";\r\n    }\r\n}\r\n\r\n// This will call A() as a constructor.\r\n$b = new B;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test127.php",
    "content": "[expect] I am the original function A::example().\r\n[expect] I am the redefined function B::example().\r\n[expect] I am the original function A::example().\r\n\r\n[file]\r\n<?php\r\nclass A {\r\n    function example() {\r\n        echo \"I am the original function A::example().\\n\";\r\n    }\r\n}\r\n\r\nclass B extends A {\r\n    function example() {\r\n        echo \"I am the redefined function B::example().\\n\";\r\n        A::example();\r\n    }\r\n}\r\n\r\nerror_reporting(E_ALL); // turn off strict messages\r\n\r\n// there is no object of class A.\r\n// this will print\r\n//   I am the original function A::example().<br />\r\nA::example();\r\n\r\n// create an object of class B.\r\n$b = new B;\r\n\r\n// this will print \r\n//   I am the redefined function B::example().<br />\r\n//   I am the original function A::example().<br />\r\n$b->example();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test128.php",
    "content": "[expect] I am B::example() and provide additional functionality.\r\n[expect] I am A::example() and provide basic functionality.\r\n\r\n[file]\r\n<?php\r\nclass A {\r\n    function example() {\r\n        echo \"I am A::example() and provide basic functionality.<br />\\n\";\r\n    }\r\n}\r\n\r\nclass B extends A {\r\n    function example() {\r\n        echo \"I am B::example() and provide additional functionality.<br />\\n\";\r\n        parent::example();\r\n    }\r\n}\r\n\r\n$b = new B;\r\n\r\n// This will call B::example(), which will in turn call A::example().\r\n$b->example();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test129.php",
    "content": "[expect] 1\r\n\r\n[file]\r\n<?php\r\n  \r\n  class A {\r\n      var $one = 1;\r\n    \r\n      function show_one() {\r\n          echo $this->one;\r\n      }\r\n  }\r\n  \r\n\r\n  \r\n  $a = new A;\r\n  $s = serialize($a);\r\n  // store $s somewhere where page2.php can find it.\r\n  $fp = fopen(\"store\", \"w\");\r\n  fwrite($fp, $s);\r\n  fclose($fp);\r\n\r\n\r\n  $s = implode(\"\", @file(\"store\"));\r\n  $a = unserialize($s);\r\n\r\n  // now use the function show_one() of the $a object.  \r\n  $a->show_one();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test130.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass Foo {\r\n    function Foo($name) {\r\n        // create a reference inside the global array $globalref\r\n        global $globalref;\r\n        $globalref[] = &$this;\r\n        // set name to passed value\r\n        $this->setName($name);\r\n        // and put it out\r\n        $this->echoName();\r\n    }\r\n\r\n    function echoName() {\r\n        echo \"<br />\", $this->name;\r\n    }\r\n \r\n    function setName($name) {\r\n        $this->name = $name;\r\n    }\r\n}\r\n?>\r\n<?php\r\n$bar1 = new Foo('set in constructor');\r\n$bar1->echoName();\r\n$globalref[0]->echoName();\r\n\r\n/* output:\r\nset in constructor\r\nset in constructor\r\nset in constructor */\r\n\r\n$bar2 =& new Foo('set in constructor');\r\n$bar2->echoName();\r\n$globalref[1]->echoName();\r\n\r\n/* output:\r\nset in constructor\r\nset in constructor\r\nset in constructor */\r\n?>\r\n<?php\r\n// now we will change the name. what do you expect?\r\n// you could expect that both $bar1 and $globalref[0] change their names...\r\n$bar1->setName('set from outside');\r\n\r\n// as mentioned before this is not the case.\r\n$bar1->echoName();\r\n$globalref[0]->echoName();\r\n\r\n/* output:\r\nset from outside\r\nset in constructor */\r\n\r\n// let us see what is different with $bar2 and $globalref[1]\r\n$bar2->setName('set from outside');\r\n\r\n// luckily they are not only equal, they are the same variable\r\n// thus $bar2->name and $globalref[1]->name are the same too\r\n$bar2->echoName();\r\n$globalref[1]->echoName();\r\n\r\n/* output:\r\nset from outside\r\nset from outside */\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test131.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass A {\r\n    function A($i) {\r\n        $this->value = $i;\r\n        // try to figure out why we do not need a reference here\r\n        $this->b = new B($this);\r\n    }\r\n\r\n    function createRef() {\r\n        $this->c = new B($this);\r\n    }\r\n\r\n    function echoValue() {\r\n        echo \"<br />\",\"class \",get_class($this),': ',$this->value;\r\n    }\r\n}\r\n\r\n\r\nclass B {\r\n    function B(&$a) {\r\n        $this->a = &$a;\r\n    }\r\n\r\n    function echoValue() {\r\n        echo \"<br />\",\"class \",get_class($this),': ',$this->a->value;\r\n    }\r\n}\r\n\r\n// try to understand why using a simple copy here would yield\r\n// in an undesired result in the *-marked line\r\n$a =& new A(10);\r\n$a->createRef();\r\n\r\n$a->echoValue();\r\n$a->b->echoValue();\r\n$a->c->echoValue();\r\n\r\n$a->value = 11;\r\n\r\n$a->echoValue();\r\n$a->b->echoValue(); // *\r\n$a->c->echoValue();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test132.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction bool2str($bool) {\r\n    if ($bool === false) {\r\n            return 'FALSE';\r\n    } else {\r\n            return 'TRUE';\r\n    }\r\n}\r\n\r\nfunction compareObjects(&$o1, &$o2) {\r\n    echo 'o1 == o2 : '.bool2str($o1 == $o2).\"\\n\";\r\n    echo 'o1 != o2 : '.bool2str($o1 != $o2).\"\\n\";\r\n    echo 'o1 === o2 : '.bool2str($o1 === $o2).\"\\n\";\r\n    echo 'o1 !== o2 : '.bool2str($o1 !== $o2).\"\\n\";\r\n}\r\n\r\nclass Flag {\r\n    var $flag;\r\n\r\n    function Flag($flag=true) {\r\n            $this->flag = $flag;\r\n    }\r\n}\r\n\r\nclass SwitchableFlag extends Flag {\r\n\r\n    function turnOn() {\r\n        $this->flag = true;\r\n    }\r\n\r\n    function turnOff() {\r\n        $this->flag = false;\r\n    }\r\n}\r\n\r\n$o = new Flag();\r\n$p = new Flag(false);\r\n$q = new Flag();\r\n\r\n$r = new SwitchableFlag();\r\n\r\necho \"Compare instances created with the same parameters\\n\";\r\ncompareObjects($o, $q);\r\n\r\necho \"\\nCompare instances created with different parameters\\n\";\r\ncompareObjects($o, $p);\r\n\r\necho \"\\nCompare an instance of a parent class with one from a subclass\\n\";\r\ncompareObjects($o, $r);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test133.php",
    "content": "[expect]\r\nComposite objects u(o,p) and v(q,p)\r\no1 == o2 : TRUE\r\no1 != o2 : FALSE\r\no1 === o2 : FALSE\r\no1 !== o2 : TRUE\r\n\r\nu(o,p) and w(q)\r\no1 == o2 : FALSE\r\no1 != o2 : TRUE\r\no1 === o2 : FALSE\r\no1 !== o2 : TRUE\r\n\r\n[file]\r\n<?php\r\nfunction bool2str($bool) {\r\n    if ($bool === false) {\r\n            return 'FALSE';\r\n    } else {\r\n            return 'TRUE';\r\n    }\r\n}\r\n\r\nfunction compareObjects(&$o1, &$o2) {\r\n    echo 'o1 == o2 : '.bool2str($o1 == $o2).\"\\n\";\r\n    echo 'o1 != o2 : '.bool2str($o1 != $o2).\"\\n\";\r\n    echo 'o1 === o2 : '.bool2str($o1 === $o2).\"\\n\";\r\n    echo 'o1 !== o2 : '.bool2str($o1 !== $o2).\"\\n\";\r\n}\r\n\r\nclass FlagSet {\r\n    var $set;\r\n\r\n    function FlagSet($flagArr = array()) {\r\n        $this->set = $flagArr;\r\n    }\r\n\r\n    function addFlag($name, $flag) {\r\n        $this->set[$name] = $flag;\r\n    }\r\n\r\n    function removeFlag($name) {\r\n        if (array_key_exists($name, $this->set)) {\r\n            unset($this->set[$name]);\r\n        }\r\n    }\r\n}\r\n\r\n$o = $p = $q = null;\r\n\r\n$u = new FlagSet();\r\n$u->addFlag('flag1', $o);\r\n$u->addFlag('flag2', $p);\r\n$v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p));\r\n$w = new FlagSet(array('flag1'=>$q));\r\n\r\necho \"\\nComposite objects u(o,p) and v(q,p)\\n\";\r\ncompareObjects($u, $v);\r\n\r\necho \"\\nu(o,p) and w(q)\\n\";\r\ncompareObjects($u, $w);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test134.php",
    "content": "[expect] In BaseClass constructor\r\n[expect] In BaseClass constructor\r\n[expect] In SubClass constructor\r\n\r\n[file]\r\n<?php\r\nclass BaseClass {\r\n    function __construct() {\r\n        print \"In BaseClass constructor\\n\";\r\n    }\r\n}\r\n\r\nclass SubClass extends BaseClass {\r\n    function __construct() {\r\n        parent::__construct();\r\n        print \"In SubClass constructor\\n\";\r\n    }\r\n}\r\n\r\n$obj = new BaseClass();\r\n$obj = new SubClass();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test136.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n\r\nclass MyClass {\r\n   public    $public     = \"MyClass::public!\\n\";\r\n   protected $protected  = \"MyClass::Protected!\\n\";\r\n   protected $protected2 = \"MyClass::Protected2!\\n\";\r\n   private   $private    = \"MyClass::private!\\n\";\r\n\r\n   function printHello() {\r\n      print \"MyClass::printHello() \" . $this->private;\r\n      print \"MyClass::printHello() \" . $this->protected;\r\n      print \"MyClass::printHello() \" . $this->protected2;\r\n   }\r\n}\r\n\r\nclass MyClass2 extends MyClass {\r\n   protected $protected = \"MyClass2::protected!\\n\";\r\n\r\n   function printHello() {\r\n\r\n      MyClass::printHello();    \r\n\r\n      print \"MyClass2::printHello() \" . $this->public; \r\n      print \"MyClass2::printHello() \" . $this->protected; \r\n      print \"MyClass2::printHello() \" . $this->protected2;\r\n\r\n      /* Will result in a Fatal Error: */\r\n      //print \"MyClass2::printHello() \" . $this->private; /* Fatal Error */\r\n\r\n   }\r\n}\r\n\r\n$obj = new MyClass();\r\n\r\nprint \"Main:: \" . $obj->public;\r\n//print $obj->private; /* Fatal Error */\r\n//print $obj->protected;  /* Fatal Error */\r\n//print $obj->protected2;  /* Fatal Error */\r\n\r\n$obj->printHello(); /* Should print */\r\n\r\n$obj2 = new MyClass2();\r\nprint \"Main:: \" . $obj2->private; /* Undefined */ \r\n\r\n//print $obj2->protected;   /* Fatal Error */ \r\n//print $obj2->protected2;  /* Fatal Error */ \r\n\r\n$obj2->printHello();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test137.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nabstract class AbstractClass {\r\n   abstract public function test();\r\n}\r\n\r\nclass ImplementedClass extends AbstractClass {\r\n   public function test() {\r\n       echo \"ImplementedClass::test() called.\\n\";\r\n   }\r\n}\r\n\r\n$o = new ImplementedClass;\r\n$o->test();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test138.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nclass MyCloneable {\r\n   static $id = 0;\r\n\r\n   function MyCloneable() {\r\n       $this->id = self::$id++;\r\n   }\r\n\r\n   function __clone() {\r\n       $this->address = \"New York\";\r\n       $this->id = self::$id++;\r\n   }\r\n}\r\n\r\n$obj = new MyCloneable();\r\n\r\n$obj->name = \"Hello\";\r\n$obj->address = \"Tel-Aviv\";\r\n\r\nprint $obj->id . \"\\n\";\r\n\r\n$obj_cloned = clone $obj;\r\n\r\nprint $obj_cloned->id . \"\\n\";\r\nprint $obj_cloned->name . \"\\n\";\r\nprint $obj_cloned->address . \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test139.php",
    "content": "[expect]\r\nTwo instances of the same class\r\no1 == o2 : TRUE\r\no1 != o2 : FALSE\r\no1 === o2 : FALSE\r\no1 !== o2 : TRUE\r\n\r\n[expect]\r\nTwo references to the same instance\r\no1 == o2 : TRUE\r\no1 != o2 : FALSE\r\no1 === o2 : TRUE\r\no1 !== o2 : FALSE\r\n\r\n[expect]\r\nInstances of two different classes\r\no1 == o2 : FALSE\r\no1 != o2 : TRUE\r\no1 === o2 : FALSE\r\no1 !== o2 : TRUE\r\n\r\n[file]\r\n<?php\r\nfunction bool2str($bool) {\r\n    if ($bool === false) {\r\n            return 'FALSE';\r\n    } else {\r\n            return 'TRUE';\r\n    }\r\n}\r\n\r\nfunction compareObjects(&$o1, &$o2) {\r\n    echo 'o1 == o2 : '.bool2str($o1 == $o2).\"\\n\";\r\n    echo 'o1 != o2 : '.bool2str($o1 != $o2).\"\\n\";\r\n    echo 'o1 === o2 : '.bool2str($o1 === $o2).\"\\n\";\r\n    echo 'o1 !== o2 : '.bool2str($o1 !== $o2).\"\\n\";\r\n}\r\n\r\nclass Flag {\r\n    var $flag;\r\n\r\n    function Flag($flag=true) {\r\n            $this->flag = $flag;\r\n    }\r\n}\r\n\r\nclass OtherFlag {\r\n    var $flag;\r\n\r\n    function OtherFlag($flag=true) {\r\n            $this->flag = $flag;\r\n    }\r\n}\r\n\r\n$o = new Flag();\r\n$p = new Flag();\r\n$q = $o;\r\n$r = new OtherFlag();\r\n\r\necho \"Two instances of the same class\\n\";\r\ncompareObjects($o, $p);\r\n\r\necho \"\\nTwo references to the same instance\\n\";\r\ncompareObjects($o, $q);\r\n\r\necho \"\\nInstances of two different classes\\n\";\r\n@compareObjects($o, $r);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test148.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction foo (&$var)\r\n{\r\n    $var++;\r\n}\r\n\r\n$a=5;\r\nfoo ($a);\r\necho $a;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test149.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction foo (&$var)\r\n{\r\n    echo $var++;\r\n}\r\n\r\nfunction &bar()\r\n{\r\n    $a = 5;\r\n    return $a;\r\n}\r\nfoo(bar());\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test150.php",
    "content": "[expect exact] 6\r\n\r\n[file]\r\n<?php\r\nfunction foo (&$var)\r\n{\r\n    echo ++$var;\r\n}\r\n\r\nfunction bar() // Note the missing &\r\n{\r\n    $a = 5;\r\n    return $a;\r\n}\r\nfoo(bar());\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test151.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n\t$a = 1;\r\n\t$b =& $a;\r\n\tunset ($a);\r\n\r\n\techo $a.$b;\r\n\tif (isset($a)) echo \"A\";\r\n\tif (isset($b)) echo \"B\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test152.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$var = \"Bob\";\r\n$Var = \"Joe\";\r\necho \"$var, $Var\";      // outputs \"Bob, Joe\"\r\n\r\n$_4site = 'not yet';    // valid; starts with an underscore\r\n$tyte = 'mansikka';    // valid; '' is (Extended) ASCII 228.\r\n\r\necho \"$4site, $_4site, $tyte\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test153.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// Let's show all errors\r\nerror_reporting(E_ALL);\r\n\r\n$arr = array('fruit' => 'apple', 'veggie' => 'carrot');\r\n\r\n// Correct\r\nprint $arr['fruit'];  // apple\r\nprint $arr['veggie']; // carrot\r\n\r\n// Incorrect.  This works but also throws a PHP error of\r\n// level E_NOTICE because of an undefined constant named fruit\r\n// \r\n// Notice: Use of undefined constant fruit - assumed 'fruit' in...\r\n//print $arr[fruit];    // apple\r\n\r\n// Let's define a constant to demonstrate what's going on.  We\r\n// will assign value 'veggie' to a constant named fruit.\r\ndefine('fruit', 'veggie');\r\n\r\n// Notice the difference now\r\nprint $arr['fruit'];  // apple\r\nprint $arr[fruit];    // carrot\r\n\r\n// The following is okay as it's inside a string.  Constants are not\r\n// looked for within strings so no E_NOTICE error here\r\nprint \"Hello $arr[fruit]\";      // Hello apple\r\n\r\n// With one exception, braces surrounding arrays within strings\r\n// allows constants to be looked for\r\nprint \"Hello {$arr[fruit]}\";    // Hello carrot\r\nprint \"Hello {$arr['fruit']}\";  // Hello apple\r\n\r\n// This will not work, results in a parse error such as:\r\n// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'\r\n// This of course applies to using autoglobals in strings as well\r\n//print \"Hello $arr['fruit']\";\r\n//print \"Hello $_GET['foo']\";\r\n\r\n// Concatenation is another option\r\nprint \"Hello \" . $arr['fruit']; // Hello apple\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test154.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// These examples are specific to using arrays inside of strings.\r\n// When outside of a string, always quote your array string keys \r\n// and do not use {braces} when outside of strings either.\r\n\r\nerror_reporting(E_ERROR);\r\n\r\n$fruits = array('strawberry' => 'red', 'banana' => 'yellow');\r\n\r\n// Works but note that this works differently outside string-quotes\r\necho \"A banana is $fruits[banana].\";\r\n\r\n// Works\r\necho \"A banana is {$fruits['banana']}.\";\r\n\r\n// Works but PHP looks for a constant named banana first\r\n// as described below.\r\necho @\"A banana is {$fruits[banana]}.\";\r\n\r\n// Won't work, use braces.  This results in a parse error.\r\n//echo \"A banana is $fruits['banana'].\";\r\n\r\n// Works\r\necho \"A banana is \" . $fruits['banana'] . \".\";\r\n\r\n$square->width = 1;\r\n\r\n// Works\r\necho \"This square is $square->width meters broad.\";\r\n\r\n// Won't work. For a solution, see the complex syntax.\r\n//echo \"This square is $square->width00 centimeters broad.\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test155.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]<?php\r\nfunction foo(){\r\n    static $int = 0;          // correct \r\n//    static $int = 1+2;        // wrong  (as it is an expression)\r\n    static $int = sqrt(121);  // wrong  (as it is an expression too)\r\n\r\n    $int++;\r\n    echo $int;\r\n}\r\n\r\nfoo();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test156.php",
    "content": "[expect] Notice\r\n\r\n[file]\r\n<?php\r\ndefine(\"CONSTANT\", \"Hello world.\");\r\n//echo CONSTANT; // outputs \"Hello world.\"\r\necho Constant; // outputs \"Constant\" and issues a notice.\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/test158.php",
    "content": "[expect ct-error] Only variables can be passed by reference\r\n\r\n[file]\r\n<?php\r\nfunction foo (&$var)\r\n{\r\n    echo $var++;\r\n}\r\n\r\n\r\nfoo(5); // Constant, not variable\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/doc_examples/xyz.inc",
    "content": "<?\r\n\t$x = 1;\r\n\t$y = 2;\r\n\t$z = 3;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/001.php",
    "content": "--TEST--\r\nSimple If condition test\r\n--FILE--\r\n<?php $a=1; if($a>0) { echo \"Yes\"; } ?>\r\n--EXPECT--\r\nYes\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=1; \r\nwhile ($a<10) {\r\n\techo $a;\r\n\t$a++;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=1; \r\nswitch($a) {\r\n\tcase 0:\r\n\t\techo \"bad\";\t\r\n\t\tbreak;\r\n\tcase 1:\r\n\t\techo \"good\";\r\n\t\tbreak;\r\n\tdefault:\r\n\t\techo \"bad\";\r\n\t\tbreak;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=1; \r\nif($a==0) {\r\n\techo \"bad\";\r\n} else {\r\n\techo \"good\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=1; \r\n\r\nif($a==0) {\r\n\techo \"bad\";\r\n} elseif($a==3) {\r\n\techo \"bad\";\r\n} else {\r\n\techo \"good\";\r\n}\r\n?>\t"
  },
  {
    "path": "Testing/Tests/@PHP/lang/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=1;\r\n$b=2;\r\n\r\nif($a==0) {\r\n\techo \"bad\";\r\n} elseif($a==3) {\r\n\techo \"bad\";\r\n} else {\r\n\tif($b==1) {\r\n\t\techo \"bad\";\r\n\t} elseif($b==2) {\r\n\t\techo \"good\";\r\n\t} else {\r\n\t\techo \"bad\";\r\n\t}\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(0);\r\n$a = 10;\r\n\r\nfunction Test()\r\n{\r\n\tstatic $a=1;\r\n\tglobal $b;\r\n\t$c = 1;\r\n\t$b = 5;\r\n\techo \"$a $b \";\r\n\t$a++;\r\n\t$c++;\r\n\techo \"$a $c \";\r\n}\r\n\r\nTest();\t\r\necho \"$a $b $c \";\r\nTest();\t\r\necho \"$a $b $c \";\r\nTest();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/008.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction Test()\r\n{\r\n\tstatic $a=1;\r\n\techo \"$a \";\t\r\n\t$a++;\r\n\tif($a<10): Test(); endif;\r\n}\r\n\r\nTest();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/009.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test ($a,$b) {\r\n\techo $a+$b;\t\r\n}\r\ntest(1,2);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/010.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test ($b) {\r\n\t$b++;\r\n\treturn($b);\r\n}\r\n$a = test(1);\r\necho $a;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/011.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nfunction F()\r\n{\r\n\t$a = \"Hello \";\r\n\treturn($a);\r\n}\r\n\r\nfunction G()\r\n{\r\n  static $myvar = 4;\r\n  \r\n  echo \"$myvar \";\r\n  echo F();\r\n  echo \"$myvar\";\r\n}\r\n\r\nG();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/012.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nfunction F () { \r\n\tif(1) {\r\n\t\treturn(\"Hello\");\r\n\t}\r\n}\r\n\r\n$i=0;\r\nwhile ($i<2) {\r\n\techo F();\r\n\t$i++;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/013.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nerror_reporting(0);\r\n$a=\"echo \\\"Hello\\\";\";\r\neval($a);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/014.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nfunction F ($a) { \r\n\teval($a);\r\n}\r\n\r\nerror_reporting(0);\r\nF(\"echo \\\"Hello\\\";\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/015.inc",
    "content": "<?php \t\r\n\techo \"Hello\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/015.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude \"015.inc\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/016.inc",
    "content": "<?php \r\nfunction MyFunc ($a) {\r\n\techo $a;\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/016.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\ninclude \"016.inc\";\r\nMyFunc(\"Hello\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/017.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = 1;\r\nfunction Test ($a) {\r\n\tif ($a<3) {\r\n\t\treturn(3);\r\n\t}\r\n}\r\n\r\nif ($a < Test($a)) {\r\n\techo \"$a\\n\";\r\n\t$a++;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/018.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nerror_reporting(0);\r\n\r\n$message = \"echo \\\"hey\\n\\\";\";\r\n\r\nfor ($i=0; $i<10; $i++) {\r\n  eval($message);\r\n  echo $i.\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/019.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nerror_reporting(0);\r\n\r\neval(\"function test() { echo \\\"hey, this is a function inside an eval()!\\\\n\\\"; }\");\r\n\r\n$i=0;\r\nwhile ($i<10) {\r\n  eval(\"echo \\\"hey, this is a regular echo'd eval()\\\\n\\\";\");\r\n  test();\r\n  $i++;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/020.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\n$i=\"abc\";\r\n\r\nfor ($j=0; $j<10; $j++) {\r\nswitch (1) {\r\n  case 1:\r\n  \techo \"In branch 1\\n\";\r\n  \tswitch ($i) {\r\n  \t\tcase \"ab\":\r\n  \t\t\techo \"This doesn't work... :(\\n\";\r\n  \t\t\tbreak;\r\n  \t\tcase \"abcd\":\r\n  \t\t\techo \"This works!\\n\";\r\n  \t\t\tbreak;\r\n  \t\tcase \"blah\":\r\n  \t\t\techo \"Hmmm, no worki\\n\";\r\n  \t\t\tbreak;\r\n  \t\tdefault:\r\n  \t\t\techo \"Inner default...\\n\";\r\n  \t}\r\n  \tfor ($blah=0; $blah<200; $blah++) {\r\n  \t  if ($blah==100) {\r\n  \t    echo \"blah=$blah\\n\";\r\n  \t  }\r\n  \t}\r\n  \tbreak;\r\n  case 2:\r\n  \techo \"In branch 2\\n\";\r\n  \tbreak;\r\n  case $i:\r\n  \techo \"In branch \\$i\\n\";\r\n  \tbreak;\r\n  case 4:\r\n  \techo \"In branch 4\\n\";\r\n  \tbreak;\r\n  default:\r\n  \techo \"Hi, I'm default\\n\";\r\n  \tbreak;\r\n }\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/021.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nfor ($i=0; $i<=5; $i++)\r\n{\r\n  echo \"i=$i\\n\";\r\n  \r\n  switch($i) {\r\n    case 0:\r\n      echo \"In branch 0\\n\";\r\n      break;\r\n    case 1:\r\n      echo \"In branch 1\\n\";\r\n      break;\r\n    case 2:\r\n      echo \"In branch 2\\n\";\r\n      break;\r\n    case 3:\r\n      echo \"In branch 3\\n\";\r\n      break 2;\r\n    case 4:\r\n      echo \"In branch 4\\n\";\r\n      break;\r\n    default:\r\n      echo \"In default\\n\";\r\n      break;\r\n  }\r\n}\r\necho \"hi\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/022.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nfunction switchtest ($i, $j)\r\n{\r\n\tswitch ($i) {\r\n\t\tcase 0:\r\n\t\t\t\tswitch($j) {\r\n\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\techo \"zero\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 1: \r\n\t\t\t\t\t\techo \"one\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\techo $j;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\t\techo \"Default taken\\n\";\r\n\t}\r\n}\r\nfor ($i=0; $i<3; $i++) {\r\n  for ($k=0; $k<10; $k++) {\r\n    switchtest (0,$k);\r\n  }\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/023-1.inc",
    "content": "<html>\r\n<head>\r\n<?php\r\n/* the point of this file is to intensively test various aspects of\r\n * the parser.  right now, each test focuses in one aspect only\r\n * (e.g. variable aliasing, arithemtic operator, various control\r\n * structures), while trying to combine code from other parts of the\r\n * parser as well.\r\n */\r\n?>\r\n\r\n*** Testing assignments and variable aliasing: ***<br>\r\n<?php \r\n  /* This test tests assignments to variables using other variables as variable-names */\r\n  $a = \"b\"; \r\n  $$a = \"test\"; \r\n  $$$a = \"blah\"; \r\n  ${$$$a}[\"associative arrays work too\"] = \"this is nifty\";\r\n?>\r\nThis should read \"blah\": <?php echo \"$test<br>\\n\"; ?>\r\nThis should read \"this is nifty\": <?php echo $blah[$test=\"associative arrays work too\"].\"<br>\\n\"; ?>\r\n*************************************************<br>\r\n\r\n*** Testing integer operators ***<br>\r\n<?php \r\n  /* test just about any operator possible on $i and $j (ints) */\r\n  $i = 5;\r\n  $j = 3;\r\n?>\r\nCorrect result - 8:  <?php echo $i+$j; ?><br>\r\nCorrect result - 8:  <?php echo $i+$j; ?><br>\r\nCorrect result - 2:  <?php echo $i-$j; ?><br>\r\nCorrect result - -2:  <?php echo $j-$i; ?><br>\r\nCorrect result - 15:  <?php echo $i*$j; ?><br>\r\nCorrect result - 15:  <?php echo $j*$i; ?><br>\r\nCorrect result - 2:  <?php echo $i%$j; ?><br>\r\nCorrect result - 3:  <?php echo $j%$i; ?><br>\r\n*********************************<br>\r\n\r\n*** Testing real operators ***<br>\r\n<?php \r\n  /* test just about any operator possible on $i and $j (floats) */\r\n  $i = 5.0;\r\n  $j = 3.0;\r\n?>\r\nCorrect result - 8:  <?php echo $i+$j; ?><br>\r\nCorrect result - 8:  <?php echo $i+$j; ?><br>\r\nCorrect result - 2:  <?php echo $i-$j; ?><br>\r\nCorrect result - -2:  <?php echo $j-$i; ?><br>\r\nCorrect result - 15:  <?php echo $i*$j; ?><br>\r\nCorrect result - 15:  <?php echo $j*$i; ?><br>\r\nCorrect result - 2:  <?php echo $i%$j; ?><br>\r\nCorrect result - 3:  <?php echo $j%$i; ?><br>\r\n*********************************<br>\r\n\r\n*** Testing if/elseif/else control ***<br>\r\n\r\n<?php \r\n/* sick if/elseif/else test by Andi :) */\r\n$a = 5;\r\nif ($a == \"4\") {\r\n\techo \"This \".\" does \".\"  not \".\" work<br>\\n\";\r\n} elseif ($a == \"5\") {\r\n\techo \"This \".\" works<br>\\n\";\r\n\t$a = 6;\r\n\tif (\"andi\" == ($test = \"andi\")) {\r\n\t\techo \"this_still_works<br>\\n\";\r\n\t} elseif (1) {\r\n\t\techo \"should_not_print<br>\\n\";\r\n\t} else {\r\n    \t\techo \"should_not_print<br>\\n\";\r\n  \t}\r\n        if (44 == 43) {\r\n\t\techo \"should_not_print<br>\\n\";\r\n\t} else {\r\n\t\techo \"should_print<br>\\n\";\r\n\t}\r\n} elseif ($a == 6) {\r\n  \techo \"this \".\"broken<br>\\n\";\r\n  \tif (0) {\r\n\t\techo \"this_should_not_print<br>\\n\";\r\n  \t} else {\r\n\t\techo \"TestingDanglingElse_This_Should_not_print<br>\\n\";\r\n  \t}\r\n} else {\r\n\techo \"This \".\"does \".\" not\".\" work<br>\\n\";\r\n}\r\n?>\r\n\r\n\r\n*** Seriously nested if's test ***<br>\r\n** spelling correction by kluzz **\r\n<?php \r\n/* yet another sick if/elseif/else test by Zeev */\r\n$i=$j=0;\r\necho \"Only two lines of text should follow:<br>\\n\";\r\nif (0) { /* this code is not supposed to be executed */\r\n  echo \"hmm, this shouldn't be displayed #1<br>\\n\";\r\n  $j++;\r\n  if (1) {\r\n    $i \r\n+=\r\n $j;\r\n    if (0) {\r\n      $j = ++$i;\r\n      if (1) {\r\n        $j *= $i;\r\n        echo \"damn, this shouldn't be displayed<br>\\n\";\r\n      } else {\r\n        $j /= $i;\r\n        ++$j;\r\n        echo \"this shouldn't be displayed either<br>\\n\";\r\n      }\r\n    } elseif (1) {\r\n      $i++; $j++;\r\n      echo \"this isn't supposed to be displayed<br>\\n\";\r\n    }\r\n  } elseif (0) {\r\n    $i++;\r\n    echo \"this definitely shouldn't be displayed<br>\\n\";\r\n  } else {\r\n    --$j;\r\n    echo \"and this too shouldn't be displayed<br>\\n\";\r\n    while ($j>0) {\r\n      $j--;\r\n    }\r\n  }\r\n} elseif (2-2) {  /* as long as 2-2==0, this isn't supposed to be executed either */\r\n  $i = ++$j;\r\n  echo \"hmm, this shouldn't be displayed #2<br>\\n\";\r\n  if (1) { \r\n    $j = ++$i;\r\n    if (0) {\r\n      $j = $i*2+$j*($i++);\r\n      if (1) {\r\n        $i++;\r\n        echo \"damn, this shouldn't be displayed<br>\\n\";\r\n      } else {\r\n        $j++;\r\n        echo \"this shouldn't be displayed either<br>\\n\";\r\n      }\r\n    } else if (1) {\r\n      ++$j;\r\n      echo \"this isn't supposed to be displayed<br>\\n\";\r\n    }\r\n  } elseif (0) {\r\n    $j++;\r\n    echo \"this definitely shouldn't be displayed<br>\\n\";\r\n  } else {\r\n    $i++;\r\n    echo \"and this too shouldn't be displayed<br>\\n\";\r\n  }\r\n} else {\r\n  $j=$i++;  /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */\r\n  echo \"this should be displayed. should be:  \\$i=1, \\$j=0.  is:  \\$i=$i, \\$j=$j<br>\\n\";\r\n  if (1) {\r\n    $j += ++$i;  /* ++$i --> $i==2,  $j += 2 --> $j==2 */\r\n    if (0) {\r\n      $j += 40;\r\n      if (1) {\r\n        $i += 50;\r\n        echo \"damn, this shouldn't be displayed<br>\\n\";\r\n      } else {\r\n        $j += 20;\r\n        echo \"this shouldn't be displayed either<br>\\n\";\r\n      }\r\n    } else if (1) {\r\n      $j *= $i;  /* $j *= 2  --> $j == 4 */\r\n      echo \"this is supposed to be displayed. should be:  \\$i=2, \\$j=4.  is:  \\$i=$i, \\$j=$j<br>\\n\";\r\n      echo \"3 loop iterations should follow:<br>\\n\";\r\n      while ($i<=$j) {\r\n        echo $i++.\" $j<br>\\n\";\r\n      }\r\n    }\r\n  } elseif (0) {\r\n    echo \"this definitely shouldn't be displayed<br>\\n\";\r\n  } else {\r\n    echo \"and this too shouldn't be displayed<br>\\n\";\r\n  }\r\n  echo \"**********************************<br>\\n\";\r\n}\r\n?>\r\n\r\n*** C-style else-if's ***<br>\r\n<?php \r\n  /* looks like without we even tried, C-style else-if structure works fine! */\r\n  if ($a=0) {\r\n    echo \"This shouldn't be displayed<br>\\n\";\r\n  } else if ($a++) {\r\n    echo \"This shouldn't be displayed either<br>\\n\";\r\n  } else if (--$a) {\r\n    echo \"No, this neither<br>\\n\";\r\n  } else if (++$a) {\r\n    echo \"This should be displayed<br>\\n\";\r\n  } else {\r\n    echo \"This shouldn't be displayed at all<br>\\n\";\r\n  }\r\n?>\r\n*************************<br>\r\n\r\n*** WHILE tests ***<br>\r\n<?php \r\n$i=0;\r\n$j=20;\r\nwhile ($i<(2*$j)) {\r\n  if ($i>$j) {\r\n    echo \"$i is greater than $j<br>\\n\";\r\n  } else if ($i==$j) {\r\n    echo \"$i equals $j<br>\\n\";\r\n  } else {\r\n    echo \"$i is smaller than $j<br>\\n\";\r\n  }\r\n  $i++;\r\n}\r\n?>\r\n*******************<br>\r\n\r\n\r\n*** Nested WHILEs ***<br>\r\n<?php \r\n$arr_len=3;\r\n\r\n$i=0;\r\nwhile ($i<$arr_len) {\r\n  $j=0;\r\n  while ($j<$arr_len) {\r\n    $k=0;\r\n    while ($k<$arr_len) {\r\n      ${\"test$i$j\"}[$k] = $i+$j+$k;\r\n      $k++;\r\n    }\r\n    $j++;\r\n  }\r\n  $i++;\r\n}\r\n\r\necho \"Each array variable should be equal to the sum of its indices:<br>\\n\";\r\n\r\n$i=0;\r\nwhile ($i<$arr_len) {\r\n  $j=0;\r\n  while ($j<$arr_len) {\r\n    $k=0;\r\n    while ($k<$arr_len) {\r\n      echo \"\\${test$i$j}[$k] = \".${\"test$i$j\"}[$k].\"<br>\\n\";\r\n      $k++;\r\n    }\r\n    $j++;\r\n  }\r\n  $i++;\r\n}\r\n?>\r\n*********************<br>\r\n\r\n*** hash test... ***<br>\r\n<?php \r\n/*\r\n$i=0;\r\n\r\nwhile ($i<10000) {\r\n  $arr[$i]=$i;\r\n  $i++;\r\n}\r\n\r\n$i=0;\r\nwhile ($i<10000) {\r\n  echo $arr[$i++].\"<br>\\n\";\r\n}\r\n*/\r\necho \"commented out...\";\r\n?>\r\n\r\n**************************<br>\r\n\r\n*** Hash resizing test ***<br>\r\n<?php \r\n$i = 10;\r\n$a = 'b';\r\nwhile ($i > 0) {\r\n\t$a = $a . 'a';\r\n\techo \"$a<br>\\n\";\r\n\t$resize[$a] = $i;\r\n\t$i--;\r\n}\r\n$i = 10;\r\n$a = 'b';\r\nwhile ($i > 0) {\r\n\t$a = $a . 'a';\r\n\techo \"$a<br>\\n\";\r\n\techo $resize[$a].\"<br>\\n\";\r\n\t$i--;\r\n}\r\n?>\r\n**************************<br>\r\n\r\n\r\n*** break/continue test ***<br>\r\n<?php \r\n$i=0;\r\n\r\necho \"\\$i should go from 0 to 2<br>\\n\";\r\nwhile ($i<5) {\r\n  if ($i>2) {\r\n    break;\r\n  }\r\n  $j=0;\r\n  echo \"\\$j should go from 3 to 4, and \\$q should go from 3 to 4<br>\\n\";\r\n  while ($j<5) {\r\n    if ($j<=2) {\r\n      $j++;\r\n      continue;\r\n    }\r\n    echo \"  \\$j=$j<br>\\n\";\r\n    for ($q=0; $q<=10; $q++) {\r\n      if ($q<3) {\r\n        continue;\r\n      }\r\n      if ($q>4) {\r\n        break;\r\n      }\r\n      echo \"    \\$q=$q<br>\\n\";\r\n    }\r\n    $j++;\r\n  }\r\n  $j=0;\r\n  echo \"\\$j should go from 0 to 2<br>\\n\";\r\n  while ($j<5) {\r\n    if ($j>2) {\r\n      $k=0;\r\n      echo \"\\$k should go from 0 to 2<br>\\n\";\r\n      while ($k<5) {\r\n        if ($k>2) {\r\n          break 2;\r\n        }\r\n        echo \"    \\$k=$k<br>\\n\";\r\n        $k++;\r\n      }\r\n    }\r\n    echo \"  \\$j=$j<br>\\n\";\r\n    $j++;\r\n  }\r\n  echo \"\\$i=$i<br>\\n\";\r\n  $i++;\r\n}\r\n?>\r\n***********************<br>\r\n\r\n*** Nested file include test ***<br>\r\n<?php include(\"023-2.inc\"); ?>\r\n********************************<br>\r\n\r\n<?php \r\n{\r\n  echo \"Tests completed.<br>\\n\";  # testing some PHP style comment...\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/023-2.inc",
    "content": "<html>\r\nThis is Finish.phtml.  This file is supposed to be included \r\nfrom regression_test.phtml.  This is normal HTML.\r\n<?php echo \"and this is PHP code, 2+2=\".(2+2).\"\"; ?>\r\n\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/023.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\ninclude(\"023-1.inc\");\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n$wedding_timestamp = mktime(20,0,0,8,31,1997);\r\n$time_left=$wedding_timestamp-time();\r\n\r\nif ($time_left>0) {\r\n  $days = $time_left/(24*3600);\r\n  $time_left -= $days*24*3600;\r\n  $hours = $time_left/3600;\r\n  $time_left -= $hours*3600;\r\n  $minutes = $time_left/60;\r\n  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\";\r\n  echo \"Her hashed wedding date is $wedding_date.\\n\";\r\n} else {\r\n  echo \"Limor Ullmann is now Limor Baruch :I\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/024.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nfor ($jdk=0; $jdk<50; $jdk++) {\r\n?><html>\r\n<head>\r\n<?php /* the point of this file is to intensively test various aspects of the parser.\r\n    * right now, each test focuses in one aspect only (e.g. variable aliasing, arithemtic operator,\r\n    * various control structures), while trying to combine code from other parts of the parser as well.\r\n    */\r\n?>\r\n*** Testing assignments and variable aliasing: ***\r\n<?php \r\n  /* This test tests assignments to variables using other variables as variable-names */\r\n  $a = \"b\"; \r\n  $$a = \"test\"; \r\n  $$$a = \"blah\"; \r\n  ${$$$a}[\"associative arrays work too\"] = \"this is nifty\";\r\n?>\r\nThis should read \"blah\": <?php echo \"$test\\n\"; ?>\r\nThis should read \"this is nifty\": <?php echo $blah[$test=\"associative arrays work too\"].\"\\n\"; ?>\r\n*************************************************\r\n\r\n*** Testing integer operators ***\r\n<?php \r\n  /* test just about any operator possible on $i and $j (ints) */\r\n  $i = 5;\r\n  $j = 3;\r\n?>\r\nCorrect result - 8:  <?php echo $i+$j; ?>\r\n\r\nCorrect result - 8:  <?php echo $i+$j; ?>\r\n\r\nCorrect result - 2:  <?php echo $i-$j; ?>\r\n\r\nCorrect result - -2:  <?php echo $j-$i; ?>\r\n\r\nCorrect result - 15:  <?php echo $i*$j; ?>\r\n\r\nCorrect result - 15:  <?php echo $j*$i; ?>\r\n\r\nCorrect result - 2:  <?php echo $i%$j; ?>\r\n\r\nCorrect result - 3:  <?php echo $j%$i; ?>\r\n\r\n*********************************\r\n\r\n*** Testing real operators ***\r\n<?php \r\n  /* test just about any operator possible on $i and $j (floats) */\r\n  $i = 5.0;\r\n  $j = 3.0;\r\n?>\r\nCorrect result - 8:  <?php echo $i+$j; ?>\r\n\r\nCorrect result - 8:  <?php echo $i+$j; ?>\r\n\r\nCorrect result - 2:  <?php echo $i-$j; ?>\r\n\r\nCorrect result - -2:  <?php echo $j-$i; ?>\r\n\r\nCorrect result - 15:  <?php echo $i*$j; ?>\r\n\r\nCorrect result - 15:  <?php echo $j*$i; ?>\r\n\r\nCorrect result - 2:  <?php echo $i%$j; ?>\r\n\r\nCorrect result - 3:  <?php echo $j%$i; ?>\r\n\r\n*********************************\r\n\r\n*** Testing if/elseif/else control ***\r\n\r\n<?php \r\n/* sick if/elseif/else test by Andi :) */\r\n$a = 5;\r\nif ($a == \"4\") {\r\n\techo \"This \".\" does \".\"  not \".\" work\\n\";\r\n} elseif ($a == \"5\") {\r\n\techo \"This \".\" works\\n\";\r\n\t$a = 6;\r\n\tif (\"andi\" == ($test = \"andi\")) {\r\n\t\techo \"this_still_works\\n\";\r\n\t} elseif (1) {\r\n\t\techo \"should_not_print\\n\";\r\n\t} else {\r\n    \t\techo \"should_not_print\\n\";\r\n  \t}\r\n        if (44 == 43) {\r\n\t\techo \"should_not_print\\n\";\r\n\t} else {\r\n\t\techo \"should_print\\n\";\r\n\t}\r\n} elseif ($a == 6) {\r\n  \techo \"this \".\"broken\\n\";\r\n  \tif (0) {\r\n\t\techo \"this_should_not_print\\n\";\r\n  \t} else {\r\n\t\techo \"TestingDanglingElse_This_Should_not_print\\n\";\r\n  \t}\r\n} else {\r\n\techo \"This \".\"does \".\" not\".\" work\\n\";\r\n}\r\n?>\r\n\r\n\r\n*** Seriously nested if's test ***\r\n** spelling correction by kluzz **\r\n<?php \r\n/* yet another sick if/elseif/else test by Zeev */\r\n$i=$j=0;\r\necho \"Only two lines of text should follow:\\n\";\r\nif (0) { /* this code is not supposed to be executed */\r\n  echo \"hmm, this shouldn't be displayed #1\\n\";\r\n  $j++;\r\n  if (1) {\r\n    $i += $j;\r\n    if (0) {\r\n      $j = ++$i;\r\n      if (1) {\r\n        $j *= $i;\r\n        echo \"damn, this shouldn't be displayed\\n\";\r\n      } else {\r\n        $j /= $i;\r\n        ++$j;\r\n        echo \"this shouldn't be displayed either\\n\";\r\n      }\r\n    } elseif (1) {\r\n      $i++; $j++;\r\n      echo \"this isn't supposed to be displayed\\n\";\r\n    }\r\n  } elseif (0) {\r\n    $i++;\r\n    echo \"this definitely shouldn't be displayed\\n\";\r\n  } else {\r\n    --$j;\r\n    echo \"and this too shouldn't be displayed\\n\";\r\n    while ($j>0) {\r\n      $j--;\r\n    }\r\n  }\r\n} elseif (2-2) {  /* as long as 2-2==0, this isn't supposed to be executed either */\r\n  $i = ++$j;\r\n  echo \"hmm, this shouldn't be displayed #2\\n\";\r\n  if (1) { \r\n    $j = ++$i;\r\n    if (0) {\r\n      $j = $i*2+$j*($i++);\r\n      if (1) {\r\n        $i++;\r\n        echo \"damn, this shouldn't be displayed\\n\";\r\n      } else {\r\n        $j++;\r\n        echo \"this shouldn't be displayed either\\n\";\r\n      }\r\n    } else if (1) {\r\n      ++$j;\r\n      echo \"this isn't supposed to be displayed\\n\";\r\n    }\r\n  } elseif (0) {\r\n    $j++;\r\n    echo \"this definitely shouldn't be displayed\\n\";\r\n  } else {\r\n    $i++;\r\n    echo \"and this too shouldn't be displayed\\n\";\r\n  }\r\n} else {\r\n  $j=$i++;  /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */\r\n  echo \"this should be displayed. should be:  \\$i=1, \\$j=0.  is:  \\$i=$i, \\$j=$j\\n\";\r\n  if (1) {\r\n    $j += ++$i;  /* ++$i --> $i==2,  $j += 2 --> $j==2 */\r\n    if (0) {\r\n      $j += 40;\r\n      if (1) {\r\n        $i += 50;\r\n        echo \"damn, this shouldn't be displayed\\n\";\r\n      } else {\r\n        $j += 20;\r\n        echo \"this shouldn't be displayed either\\n\";\r\n      }\r\n    } else if (1) {\r\n      $j *= $i;  /* $j *= 2  --> $j == 4 */\r\n      echo \"this is supposed to be displayed. should be:  \\$i=2, \\$j=4.  is:  \\$i=$i, \\$j=$j\\n\";\r\n      echo \"3 loop iterations should follow:\\n\";\r\n      while ($i<=$j) {\r\n        echo $i++.\" $j\\n\";\r\n      }\r\n    }\r\n  } elseif (0) {\r\n    echo \"this definitely shouldn't be displayed\\n\";\r\n  } else {\r\n    echo \"and this too shouldn't be displayed\\n\";\r\n  }\r\n  echo \"**********************************\\n\";\r\n}\r\n?>\r\n\r\n*** C-style else-if's ***\r\n<?php \r\n  /* looks like without we even tried, C-style else-if structure works fine! */\r\n  if ($a=0) {\r\n    echo \"This shouldn't be displayed\\n\";\r\n  } else if ($a++) {\r\n    echo \"This shouldn't be displayed either\\n\";\r\n  } else if (--$a) {\r\n    echo \"No, this neither\\n\";\r\n  } else if (++$a) {\r\n    echo \"This should be displayed\\n\";\r\n  } else {\r\n    echo \"This shouldn't be displayed at all\\n\";\r\n  }\r\n?>\r\n*************************\r\n\r\n*** WHILE tests ***\r\n<?php \r\n$i=0;\r\n$j=20;\r\nwhile ($i<(2*$j)) {\r\n  if ($i>$j) {\r\n    echo \"$i is greater than $j\\n\";\r\n  } else if ($i==$j) {\r\n    echo \"$i equals $j\\n\";\r\n  } else {\r\n    echo \"$i is smaller than $j\\n\";\r\n  }\r\n  $i++;\r\n}\r\n?>\r\n*******************\r\n\r\n\r\n*** Nested WHILEs ***\r\n<?php \r\n$arr_len=3;\r\n\r\n$i=0;\r\nwhile ($i<$arr_len) {\r\n  $j=0;\r\n  while ($j<$arr_len) {\r\n    $k=0;\r\n    while ($k<$arr_len) {\r\n      ${\"test$i$j\"}[$k] = $i+$j+$k;\r\n      $k++;\r\n    }\r\n    $j++;\r\n  }\r\n  $i++;\r\n}\r\n\r\necho \"Each array variable should be equal to the sum of its indices:\\n\";\r\n\r\n$i=0;\r\nwhile ($i<$arr_len) {\r\n  $j=0;\r\n  while ($j<$arr_len) {\r\n    $k=0;\r\n    while ($k<$arr_len) {\r\n      echo \"\\${test$i$j}[$k] = \".${\"test$i$j\"}[$k].\"\\n\";\r\n      $k++;\r\n    }\r\n    $j++;\r\n  }\r\n  $i++;\r\n}\r\n?>\r\n*********************\r\n\r\n*** hash test... ***\r\n<?php \r\n/*\r\n$i=0;\r\n\r\nwhile ($i<10000) {\r\n  $arr[$i]=$i;\r\n  $i++;\r\n}\r\n\r\n$i=0;\r\nwhile ($i<10000) {\r\n  echo $arr[$i++].\"\\n\";\r\n}\r\n*/\r\necho \"commented out...\";\r\n?>\r\n\r\n**************************\r\n\r\n*** Hash resizing test ***\r\n<?php \r\n$i = 10;\r\n$a = \"b\";\r\nwhile ($i > 0) {\r\n\t$a = $a . \"a\";\r\n\techo \"$a\\n\";\r\n\t$resize[$a] = $i;\r\n\t$i--;\r\n}\r\n$i = 10;\r\n$a = \"b\";\r\nwhile ($i > 0) {\r\n\t$a = $a . \"a\";\r\n\techo \"$a\\n\";\r\n\techo $resize[$a].\"\\n\";\r\n\t$i--;\r\n}\r\n?>\r\n**************************\r\n\r\n\r\n*** break/continue test ***\r\n<?php \r\n$i=0;\r\n\r\necho \"\\$i should go from 0 to 2\\n\";\r\nwhile ($i<5) {\r\n  if ($i>2) {\r\n    break;\r\n  }\r\n  $j=0;\r\n  echo \"\\$j should go from 3 to 4, and \\$q should go from 3 to 4\\n\";\r\n  while ($j<5) {\r\n    if ($j<=2) {\r\n      $j++;\r\n      continue;\r\n    }\r\n    echo \"  \\$j=$j\\n\";\r\n    for ($q=0; $q<=10; $q++) {\r\n      if ($q<3) {\r\n        continue;\r\n      }\r\n      if ($q>4) {\r\n        break;\r\n      }\r\n      echo \"    \\$q=$q\\n\";\r\n    }\r\n    $j++;\r\n  }\r\n  $j=0;\r\n  echo \"\\$j should go from 0 to 2\\n\";\r\n  while ($j<5) {\r\n    if ($j>2) {\r\n      $k=0;\r\n      echo \"\\$k should go from 0 to 2\\n\";\r\n      while ($k<5) {\r\n        if ($k>2) {\r\n          break 2;\r\n        }\r\n        echo \"    \\$k=$k\\n\";\r\n        $k++;\r\n      }\r\n    }\r\n    echo \"  \\$j=$j\\n\";\r\n    $j++;\r\n  }\r\n  echo \"\\$i=$i\\n\";\r\n  $i++;\r\n}\r\n?>\r\n***********************\r\n\r\n*** Nested file include test ***\r\n<?php include(\"023-2.inc\"); ?>\r\n********************************\r\n\r\n<?php \r\n{\r\n  echo \"Tests completed.\\n\";  # testing some PHP style comment...\r\n}\r\n\r\n} \r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/025.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nfunction RekTest ($nr) {\r\n\techo \" $nr \";\r\n\t$j=$nr+1;\r\n\twhile ($j < 10) {\r\n\t  echo \" a \";\r\n\t  RekTest($j);\r\n\t  $j++;\r\n\t  echo \" b $j \";\r\n\t}\r\n\techo \"\\n\";\r\n}\r\n\r\nRekTest(0);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/026.php",
    "content": "[expect php]\r\n[file]\r\n<?php echo \"\\\"\\t\\\\'\" . '\\n\\\\\\'a\\\\\\b\\\\' ?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/027.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$i=3;\r\ndo {\r\n\techo $i;\r\n\t$i--;\r\n} while($i>0);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/028.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(1023);\r\n\r\nfunction print_stuff($stuff)\r\n{\r\n\tprint $stuff;\r\n}\r\n\r\n\r\nfunction still_working()\r\n{\r\n\treturn \"I'm still alive\";\r\n}\r\n\r\nfunction dafna()\r\n{\r\n\tstatic $foo = 0;\r\n\t\r\n\tprint \"Dafna!\\n\";\r\n\tprint call_user_func(\"still_working\").\"\\n\";\r\n\t$foo++;\r\n\treturn (string) $foo;\r\n}\r\n\r\n\r\nclass dafna_class {\r\n\tfunction dafna_class() {\r\n\t\t$this->myname = \"Dafna\";\r\n\t}\r\n\tfunction GetMyName() {\r\n\t\treturn $this->myname;\r\n\t}\r\n\tfunction SetMyName($name) {\r\n\t\t$this->myname = $name;\r\n\t}\r\n};\r\n\r\nfor ($i=0; $i<200; $i++):\r\n\tprint \"$i\\n\";\r\n\tcall_user_func(\"dafna\");\r\n\tcall_user_func(\"print_stuff\",\"Hey there!!\\n\");\r\n\tprint \"$i\\n\";\r\nendfor;\r\n\r\n\r\n$dafna = new dafna_class();\r\n\r\nprint $name=call_user_func(array(&$dafna,\"GetMyName\"));\r\nprint \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/030.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass foo {\r\n\tfunction foo($name) {\r\n     \t$GLOBALS['List']= &$this;\r\n     \t$this->Name = $name;\r\n\t\t$GLOBALS['List']->echoName();\r\n\t}\r\n\r\n\tfunction echoName() {\r\n     \t$GLOBALS['names'][]=$this->Name;\r\n\t}\r\n}\r\n\r\nfunction &foo2(&$foo) {\r\n\treturn $foo;\r\n}\r\n\r\n\r\n$bar1 =new foo('constructor');\r\n$bar1->Name = 'outside';\r\n$bar1->echoName();\r\n$List->echoName();\r\n\r\n$bar1 =& foo2(new foo('constructor'));\r\n$bar1->Name = 'outside';\r\n$bar1->echoName();\r\n\r\n$List->echoName();\r\n\r\nprint ($names==array('constructor','outside','outside','constructor','outside','outside')) ? 'success':'failure';\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/031.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// reported by php.net@alienbill.com\r\n$arrayOuter = array(\"key1\",\"key2\");\r\n$arrayInner = array(\"0\",\"1\");\r\n\r\nprint \"Correct - with inner loop reset.\\n\";\r\n\r\nwhile(list(,$o) = each($arrayOuter)){\r\n\treset($arrayInner);\r\n\twhile(list(,$i) = each($arrayInner)){\r\n\t    \tprint \"inloop $i for $o\\n\";\r\n\t}\r\n}\r\nreset($arrayOuter);\r\nreset($arrayInner);\r\n\r\nprint \"What happens without inner loop reset.\\n\";\r\n\r\nwhile(list(,$o) = each($arrayOuter)){\r\n\twhile(list(,$i) = each($arrayInner)){\r\n\t\tprint \"inloop $i for $o\\n\";\r\n\t}\r\n}\r\nreset($arrayOuter);\r\nreset($arrayInner);\r\n\r\nprint \"What happens without inner loop reset but copy.\\n\";\r\n\r\n// NOTE: we have here different behaviour to php\r\n// we do not reset internal array pointer if the array is assigned.\r\n\r\nwhile(list(,$o) = each($arrayOuter)){\r\n\t$placeholder = $arrayInner;\r\n\twhile(list(,$i) = each($arrayInner)){\r\n\t\tprint \"inloop $i for $o\\n\";\r\n\t}\r\n}\r\nreset($arrayOuter);\r\nreset($arrayInner);\r\n\r\nprint \"What happens with inner loop reset over copy.\\n\";\r\n\r\nwhile(list(,$o) = each($arrayOuter)){\r\n\t$placeholder = $arrayInner;\r\n\twhile(list(,$i) = each($placeholder)){\r\n\t\tprint \"inloop $i for $o\\n\";\r\n\t}\r\n}\r\nreset($arrayOuter);\r\nreset($arrayInner);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/032.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass A {\r\n\tfunction foo() {}\r\n}\r\n\r\nclass B extends A {\r\n\tfunction foo() {}\r\n}\r\n\r\nclass C extends B {\r\n\tfunction foo() {}\r\n}\r\n\r\nclass D extends A {\r\n}\r\n\r\nclass F extends D {\r\n\tfunction foo() {}\r\n}\r\n\r\n// Following class definition should fail, but cannot test\r\n/*\r\nclass X {\r\n\tfunction foo() {}\r\n\tfunction foo() {}\r\n}\r\n*/\r\n\r\necho \"OK\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/036.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass par {\r\n\tprivate $id = \"foo\";\r\n\r\n\tfunction displayMe()\r\n\t{\r\n\t\tprint $this->id;\r\n\t}\r\n};\r\n\r\nclass chld extends par {\r\n\tpublic $id = \"bar\";\r\n\tfunction displayHim()\r\n\t{\r\n\t\tparent::displayMe();\r\n\t}\r\n};\r\n\r\n\r\n$obj = new chld();\r\n$obj->displayHim();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/037.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass par {\r\n\tprivate $id=\"foo\";\r\n\r\n\tfunction displayMe()\r\n\t{\r\n\t\t$this->displayChild();\r\n\t}\r\n};\r\n\r\nclass chld extends par {\r\n\tprivate $id = \"bar\";\r\n\r\n\tfunction displayChild()\r\n\t{\r\n\t\tprint $this->id;\r\n\t}\r\n};\r\n\r\n\r\n$obj = new chld();\r\n$obj->displayMe();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/038.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass MyException extends Exception\r\n{\r\n\tfunction __construct($errstr, $errno=0, $errfile='', $errline='')\r\n\t{\r\n\t\tparent::__construct($errstr, $errno);\r\n\t\t$this->file = $errfile;\r\n\t\t$this->line = $errline;\r\n\t}\r\n}\r\n\r\nfunction Error2Exception($errno, $errstr, $errfile, $errline)\r\n{\r\n\tthrow new MyException($errstr, $errno);//, $errfile, $errline);\r\n}\r\n\r\n$err_msg = 'no exception';\r\nset_error_handler('Error2Exception');\r\n\r\ntry\r\n{\r\n\t$con = fopen(\"/tmp/a_file_that_does_not_exist\",'r');\r\n}\r\ncatch (Exception $e)\r\n{\r\n\t$trace = $e->getTrace();\r\n\techo ($trace[0]['function']),\"\\n\";\r\n\techo ($trace[1]['function']),\"\\n\";\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/039.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninterface Catchable\r\n{\r\n}\r\n\r\nclass MyException extends Exception implements Catchable\r\n{\r\n\tfunction __construct($errstr, $errno, $errfile, $errline)\r\n\t{\r\n\t\tparent::__construct($errstr, $errno);\r\n\t\t$this->file = $errfile;\r\n\t\t$this->line = $errline;\r\n\t}\r\n}\r\n\r\nfunction Error2Exception($errno, $errstr, $errfile, $errline)\r\n{\r\n\tthrow new MyException($errstr, $errno, $errfile, $errline);\r\n}\r\n\r\n$err_msg = 'no exception';\r\nset_error_handler('Error2Exception');\r\n\r\ntry\r\n{\r\n\t$con = fopen('/tmp/a_file_that_does_not_exist','r');\r\n}\r\ncatch (Catchable $e)\r\n{\r\n\techo \"Catchable\\n\";\r\n}\r\ncatch (Exception $e)\r\n{\r\n\techo \"Exception\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/040.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = array(0,1);\r\n$b[0]=2;\r\nforeach($a as $b[0]) {\r\n  echo $b[0].\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bison1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\necho \"blah-$foo\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug17115.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$func = create_function('','\r\n\tstatic $foo = 0;\r\n\treturn $foo++;\r\n');\r\necho ($func()),\"\\n\";\r\necho ($func()),\"\\n\";\r\necho ($func()),\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug18872.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass FooBar {   \r\n\tconst BIFF = 3;   \r\n}   \r\n   \r\nfunction foo($biff = FooBar::BIFF) {   \r\n\techo $biff . \"\\n\";   \r\n}   \r\n   \r\nfoo();   \r\nfoo();   \r\n?>   "
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug19566.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo {}\r\n$result = get_declared_classes();\r\necho (array_search('foo', $result));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug19943.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\terror_reporting(0);\r\n\r\n\t$ar = array();\r\n\tfor ($count = 0; $count < 10; $count++) {\r\n\t\t$ar[$count]        = \"$count\";\r\n\t\t$ar[$count]['idx'] = \"$count\";\r\n\t}\r\n\r\n\tfor ($count = 0; $count < 10; $count++) {\r\n\t\techo $ar[$count].\" -- \".$ar[$count]['idx'].\"\\n\";\r\n\t}\r\n\t$a = \"0123456789\";\r\n\t$a[9] = $a[0];\r\n\techo ($a);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug20175.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(E_ALL);\r\n\r\n/* Part 1:\r\n * Storing the result of a function in a static variable.\r\n * foo_global() increments global variable $foo_count whenever it is executed.\r\n * When foo_static() is called it checks for the static variable $foo_value\r\n * being initialised. In case initialisation is necessary foo_global() will be\r\n * called. Since that must happen only once the return value should be equal.\r\n */\r\n$foo_count = 0;\r\n\r\nfunction foo_global() {\r\n\tglobal $foo_count;\r\n\techo \"foo_global()\\n\";\r\n\treturn 'foo:' . ++$foo_count;\r\n}\r\n\r\nfunction foo_static() {\r\n\tstatic $foo_value;\r\n\techo \"foo_static()\\n\";\r\n\tif (!isset($foo_value)) {\r\n\t\t$foo_value = foo_global();\r\n\t}\r\n\treturn $foo_value;\r\n}\r\n\r\n/* Part 2:\r\n * Storing a reference to the result of a function in a static variable.\r\n * Same as Part 1 but:\r\n * The return statment transports a copy of the value to return. In other \r\n * words the return value of bar_global() is a temporary variable only valid\r\n * after the function call bar_global() is done in current local scope.\r\n */\r\n$bar_count = 0;\r\n\r\nfunction bar_global() {\r\n\tglobal $bar_count;\r\n\techo \"bar_global()\\n\";\r\n\treturn 'bar:' . ++$bar_count;\r\n}\r\n\r\nfunction bar_static() {\r\n\tstatic $bar_value;\r\n\techo \"bar_static()\\n\";\r\n\tif (!isset($bar_value)) {\r\n\t\t$bar_value = &bar_global();\r\n\t}\r\n\treturn $bar_value;\r\n}\r\n\r\n/* Part 3: TO BE DISCUSSED\r\n *\r\n * Storing a reference to the result of a function in a static variable.\r\n * Same as Part 2 but wow_global() returns a reference so $wow_value\r\n * should store a reference to $wow_global. Therefor $wow_value is already\r\n * initialised in second call to wow_static() and hence shouldn't call\r\n * wow_global() again.\r\n */ /*\r\n$wow_count = 0;\r\n$wow_name = '';\r\n\r\nfunction &wow_global() {\r\n\tglobal $wow_count, $wow_name;\r\n\techo \"wow_global()\\n\";\r\n\t$wow_name = 'wow:' . ++$wow_count;\r\n\treturn $wow_name;\r\n}\r\n\r\nfunction wow_static() {\r\n\tstatic $wow_value;\r\n\techo \"wow_static()\\n\";\r\n\tif (!isset($wow_value)) {\r\n\t\t$wow_value = &wow_global();\r\n\t}\r\n\treturn $wow_value;\r\n}*/\r\n\r\n/* Part 4:\r\n * Storing a reference to a new instance (that's where the name of the  test\r\n * comes from). First there is the global counter $oop_global again which \r\n * counts the calls to the constructor of oop_class and hence counts the \r\n * creation of oop_class instances.\r\n * The class oop_test uses a static reference to a oop_class instance.\r\n * When another oop_test instance is created it must reuse the statically\r\n * stored reference oop_value. This way oop_class gets some singleton behavior\r\n * since it will be created only once for all insatnces of oop_test.\r\n */\r\n$oop_global = 0;\r\nclass oop_class {\r\n\tvar $oop_name;\r\n\t\r\n\tfunction oop_class() {\r\n\t\tglobal $oop_global;\r\n\t\techo \"oop_class()\\n\";\r\n\t\t$this->oop_name = 'oop:' . ++$oop_global;\r\n\t}\r\n}\r\n\r\nclass oop_test {\r\n\tstatic $oop_value;\r\n\t\r\n\tfunction oop_test() {\r\n\t\techo \"oop_test()\\n\";\r\n\t}\r\n\t\r\n\tfunction oop_static() {\r\n\t\techo \"oop_static()\\n\";\r\n\t\tif (!isset(self::$oop_value)) {\r\n\t\t\tself::$oop_value = & new oop_class;\r\n\t\t}\r\n\t\techo self::$oop_value->oop_name;\r\n\t}\r\n}\r\n\r\nprint foo_static().\"\\n\";\r\nprint foo_static().\"\\n\";\r\nprint bar_static().\"\\n\";\r\nprint bar_static().\"\\n\";\r\n//print wow_static().\"\\n\";\r\n//print wow_static().\"\\n\";\r\necho \"wow_static()\r\nwow_global()\r\nwow:1\r\nwow_static()\r\nwow:1\r\n\";\r\n$oop_tester = new oop_test;\r\nprint $oop_tester->oop_static().\"\\n\";\r\nprint $oop_tester->oop_static().\"\\n\";\r\n$oop_tester = new oop_test; // repeated.\r\nprint $oop_tester->oop_static().\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21094.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass test {\r\n\tfunction hdlr($errno, $errstr, $errfile, $errline) {\r\n\t\tprintf(\"[%d] errstr: %s, errfile: %s, errline: %d\\n\", $errno, $errstr, $errfile, $errline, $errstr);\r\n\t}\r\n}\t\r\n\r\nset_error_handler(array(new test(), \"hdlr\"));\r\n\r\ntrigger_error(\"test\");\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21600.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$tmp = array();\r\n$tmp['foo'] = \"test\";\r\n$tmp['foo'] = &bar($tmp['foo']);\r\n__var_dump($tmp);\r\n\r\nunset($tmp);\r\n\r\n$tmp = array();\r\n$tmp['foo'] = \"test\";\r\n$tmp['foo'] = &fubar($tmp['foo']);\r\n__var_dump($tmp);\r\n\r\nfunction bar($text){\r\n  return $text;\r\n}\r\n\r\nfunction fubar($text){\r\n  $text = &$text;\r\n  return $text;\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21669.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n\tfunction say_hello() {\r\n\t\techo \"Hello world\";\r\n\t}\r\n}\r\n\r\nclass Factory {\r\n\tpublic $name = \"Test\";\r\n\tfunction create() {\r\n\t\t$obj = new $this->name; /* Parse error */\r\n\t\treturn $obj;\r\n\t}\r\n}\r\n$factory = new Factory;\r\n$test = $factory->create();\r\n$test->say_hello();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21820.php.notest",
    "content": "--TEST--\r\nBug #21820 (\"$arr['foo']\" generates bogus E_NOTICE, should be E_PARSE)\r\n--FILE--\r\n<?php\r\n\r\nerror_reporting(E_ALL);\r\n\r\n$arr = array('foo' => 'bar');\r\necho \"$arr['foo']\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21849.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo {\r\n\tconst bar = \"fubar\\n\";\r\n\t\r\n\tfunction foo($arg = self::bar) {\r\n\t\techo $arg;\r\n\t}\r\n}\r\n\r\nnew foo();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug21961.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n\r\nclass man\r\n{\r\n\tpublic $name, $bars;\r\n\tfunction man()\r\n\t{\r\n\t\t$this->name = 'Mr. X';\r\n\t\t$this->bars = array();\r\n\t}\r\n\r\n\tfunction getdrunk($where)\r\n\t{\r\n\t\t$this->bars[] = new bar($where);\r\n\t}\r\n\r\n\tfunction getName()\r\n\t{\r\n\t\treturn $this->name;\r\n\t}\r\n}\r\n\r\nclass bar extends man\r\n{\r\n\tpublic $name;\r\n\r\n\tfunction bar($w)\r\n\t{\r\n\t\t$this->name = $w;\r\n\t}\r\n\r\n\tfunction getName()\r\n\t{\r\n\t\treturn $this->name;\r\n\t}\r\n\r\n\tfunction whosdrunk()\r\n\t{\r\n\t\t$who = get_parent_class($this);\r\n\t\tif($who == NULL)\r\n\t\t{\r\n\t\t\treturn 'nobody';\r\n\t\t}\r\n\t\treturn eval(\"return \".$who.'::getName();');\r\n\t}\r\n}\r\n\r\n$x = new man;\r\n$x->getdrunk('The old Tavern');\r\n__var_dump($x->bars[0]->whosdrunk());\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug22231.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nerror_reporting(0);\r\n\r\nclass foo {\r\n    public $fubar = 'fubar';\r\n}\r\n\r\nfunction &foo(){\r\n    $GLOBALS['foo'] = &new foo();\r\n    return $GLOBALS['foo'];\r\n}\r\n$bar = &foo();\r\n__var_dump($bar);\r\n__var_dump($bar->fubar);\r\nunset($bar);\r\n$bar = &foo();\r\n__var_dump($bar->fubar);\r\n\r\n$foo = &foo();\r\n__var_dump($foo);\r\n__var_dump($foo->fubar);\r\nunset($foo);\r\n$foo = &foo();\r\n__var_dump($foo->fubar);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug22367.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nerror_reporting(0);\r\n\r\nclass foo\r\n{\r\n\tpublic $test = array(0, 1, 2, 3, 4); \r\n\r\n\tfunction a($arg) {\r\n\t\t__var_dump(array_key_exists($arg, $this->test));\r\n\t\treturn $this->test[$arg];\r\n\t}\r\n\r\n\tfunction b() {\r\n\t\t@$this->c();\r\n\r\n\t\t$zero = $this->test[0];\r\n\t\t$one = $this->test[1];\r\n\t\t$two = $this->test[2];\r\n\t\t$three = $this->test[3];\r\n\t\t$four = $this->test[4];\r\n\t\treturn array($zero, $one, $two, $three, $four);\r\n\t}\r\n\r\n\tfunction c() {\r\n\t\treturn $this->a($this->d());\r\n\t}\r\n\r\n\tfunction d() {}\r\n}\r\n\r\nclass bar extends foo\r\n{\r\n\tpublic $i = 0;\r\n\tpublic $idx;\r\n\r\n\tfunction bar($idx) {\r\n\t\t$this->idx = $idx;\r\n\t}\r\n\r\n\tfunction &a($arg){\r\n\t\treturn parent::a($arg);\r\n\t}\r\n\tfunction d(){\r\n\t\treturn $this->idx;\r\n\t}\r\n}\r\n\r\n$a = new bar(5);\r\n__var_dump($a->idx);\r\n$a->c();\r\n$b = $a->b();\r\n__var_dump($b);\r\n__var_dump($a->test);\r\n\r\n$a = new bar(2);\r\n__var_dump($a->idx);\r\n@$a->c();\r\n$b = $a->b();\r\n__var_dump($b);\r\n__var_dump($a->test);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug22510.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nerror_reporting(0);\r\n\r\nclass foo \r\n{\r\n\tpublic $list = array();\r\n\r\n\tfunction finalize() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\t$cl = &$this->list;\r\n\t}\r\n\r\n\tfunction &method1() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\treturn @$this->foo;\r\n\t}\r\n\r\n\tfunction &method2() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\treturn $this->foo;\r\n\t}\r\n\r\n\tfunction method3() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\treturn @$this->foo;\r\n\t}\r\n}\r\n\r\nclass bar \r\n{\r\n\tfunction run1() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\t$this->instance = new foo();\r\n\t\t$this->instance->method1($this);\r\n\t\t$this->instance->method1($this);\r\n\t}\r\n\r\n\tfunction run2() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\t$this->instance = new foo();\r\n\t\t$this->instance->method2($this);\r\n\t\t$this->instance->method2($this);\r\n\t}\r\n\r\n\tfunction run3() {\r\n\t\tprint __CLASS__.\"::\".__FUNCTION__.\"\\n\";\r\n\t\t$this->instance = new foo();\r\n\t\t$this->instance->method3($this);\r\n\t\t$this->instance->method3($this);\r\n\t}\r\n}\r\n\r\nfunction ouch(&$bar) {\r\n\tprint __FUNCTION__.\"\\n\";\r\n\t@$a = $a;\r\n\t$bar->run1();\r\n}\r\n\r\nfunction ok1(&$bar) {\r\n\tprint __FUNCTION__.\"\\n\";\r\n\t$bar->run1();\r\n}\r\n\r\nfunction ok2(&$bar) {\r\n\tprint __FUNCTION__.\"\\n\";\r\n\t@$a = $a; \r\n\t$bar->run2();\r\n}\r\n\r\nfunction ok3(&$bar) {\r\n\tprint __FUNCTION__.\"\\n\";\r\n\t@$a = $a;\r\n\t$bar->run3();\r\n}\r\n\r\n$bar = &new bar();\r\nok1($bar);\r\n$bar->instance->finalize();\r\nprint \"done!\\n\";\r\nok2($bar);\r\n$bar->instance->finalize();\r\nprint \"done!\\n\";\r\nok3($bar);\r\n$bar->instance->finalize();\r\nprint \"done!\\n\";\r\nouch($bar);\r\n$bar->instance->finalize();\r\nprint \"I'm alive!\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug22592.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nerror_reporting(0);\r\n$i = 4;\r\n$s = \"string\";\r\n\r\n$result = \"* *-*\";\r\n__var_dump($result);\r\n$result[6] = '*';\r\n__var_dump($result);\r\n$result[1] = $i;\r\n__var_dump($result);\r\n$result[3] = $s;\r\n__var_dump($result);\r\n$result[7] = 0;\r\n__var_dump($result);\r\n$a = $result[1] = $result[3] = '-';\r\n__var_dump($result);\r\n$b = $result[3] = $result[5] = $s;\r\n__var_dump($result);\r\n$c = $result[0] = $result[2] = $result[4] = $i;\r\n__var_dump($result);\r\n$d = $result[6] = $result[8] = 5;\r\n__var_dump($result);\r\n$e = $result[1] = $result[6];\r\n__var_dump($result);\r\n__var_dump($a, $b, $c, $d, $e);\r\n$result[-1] = 'a';\r\n__var_dump($result);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug22690.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$foo = create_function('$s', 'return strtoupper($s);');\r\n\tob_start($foo);\r\n\techo $foo(\"bar\\n\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23279.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nob_start();\r\nset_exception_handler('redirect_on_error');\r\necho \"Hello World\\n\";\r\nthrow new Exception;\r\n\r\nfunction redirect_on_error($e) {\r\n    ob_end_clean();\r\n    echo \"Goodbye Cruel World\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23384.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\ndefine('TEN', 10);\r\nclass Foo {\r\n    const HUN = 100;\r\n    function test($x = Foo::HUN) {\r\n        static $arr2 = array(TEN => 'ten');\r\n        static $arr = array(Foo::HUN => 'ten');\r\n\r\n        __var_dump($arr);\r\n        __var_dump($arr2);\r\n        __var_dump($x);\r\n    }\r\n}\r\n\r\n@Foo::test();   \r\necho Foo::HUN.\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23489.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n  function Test() {\r\n    ob_start(\r\n      array(\r\n        $this, 'transform'\r\n      )\r\n    );\r\n  }\r\n\r\n  function transform($buffer) {\r\n    return 'success';\r\n  }\r\n}\r\n\r\n$t = new Test;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23524.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n  echo \"Begin\\n\";\r\n  define(\"THE_CONST\",123);\r\n  function f($a=array(THE_CONST=>THE_CONST)) {\r\n    __var_dump($a);\r\n  }\r\n  f();\r\n  f();\r\n  f();\r\n  echo \"Done\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23584.php.notest",
    "content": "--TEST--\r\nBug #23584 (error line numbers off by one when using #!php)\r\n--FILE--\r\n#!php\r\n<?php\r\n\r\nerror_reporting(E_ALL);\r\n\r\necho $foo;\r\n\r\n?>\r\n--EXPECTREGEX--\r\nNotice: Undefined variable:.*foo in .* on line 6\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23624.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n    $arr = array ('one', 'two', 'three');\r\n    __var_dump(current($arr));\r\n    foreach($arr as $key => $value);\r\n    __var_dump(current($arr));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug23922.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  class foo\r\n  {\r\n    public $foo = 1;\r\n\r\n    function as_string()\r\n    { assert('$this->foo == 1'); }\r\n\r\n    function as_expr()\r\n    { assert($this->foo == 1); }\r\n  }\r\n\r\n  $foo = new foo();\r\n  $foo->as_expr();\r\n  $foo->as_string();\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24054.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ndefine('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);\r\ndefine('LONG_MIN', -LONG_MAX - 1);\r\nprintf(\"%d,%d,%d,%d\\n\",is_int(LONG_MIN  ),is_int(LONG_MAX  ),\r\n\t\t\t\t\t   is_int(LONG_MIN-1),is_int(LONG_MAX+1));\r\n\r\n\t$i = LONG_MAX;\r\n\r\n\t$j = $i * 1001;\r\n\t$i *= 1001;\r\n\r\necho $i === $j;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24396.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n$arr = array('a' => 1, 'b' => 2, 'c' => 3);\r\n\r\nforeach($arr as $k=>$v)  {\r\n    global $$k; // comment this out and it works in PHP 5 too..\r\n               \r\n    echo \"($k => $v)\\n\";\r\n                       \r\n    $$k = $v;          \r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24403.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass a\r\n{\r\n\tpublic $a = array();\r\n\r\n\tfunction a()\r\n\t{\r\n\t\techo preg_replace(\r\n\t\t\t\t'!\\{\\s*([a-z0-9_]+)\\s*\\}!sie',\r\n\t\t\t\t\"(in_array('\\\\1',\\$this->a) ? '\\'.\\$p[\\'\\\\1\\'].\\'' :\r\n'\\'.\\$r[\\'\\\\1\\'].\\'')\",\r\n\t\t\t\t\"{a} b {c}\");\r\n\t}\r\n}\r\nnew a();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24436.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass test {\r\n\tfunction __construct() {\r\n\t\tif (empty($this->test[0][0])) { print \"test1\";}\r\n\t\tif (!isset($this->test[0][0])) { print \"test2\";}\r\n\t}\r\n}\r\n\r\n$test1 = new test();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24499.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass Id {\r\n        private $id=\"priv\";\r\n\r\n        public function tester($obj)\r\n        {\r\n\t        \t$obj->id = \"bar\";\r\n        }\r\n}\r\n\r\n$id = new Id();\r\n@$obj->foo = \"bar\";\r\n$id->tester($obj);\r\n__var_dump($obj);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24573.php.notest",
    "content": "--TEST--\r\nBug #24573 (debug_backtrace() crashes if $this is set to null)\r\n--FILE--\r\n<?php\r\n\r\nclass Foo {\r\n  function Bar() {\r\n    $__this = $this;\r\n    $this = null;\r\n    debug_backtrace();\r\n    $this = $__this;\r\n  }\r\n}\r\n\r\n$f = new Foo;\r\n\r\n$f->Bar();\r\n\r\necho \"OK\\n\";\r\n\r\n?>\r\n--EXPECTF--\r\n\r\nFatal error: Cannot re-assign $this in %s on line %d"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24640.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nfunction test($v)\r\n{\r\n\t//echo var_export($v, true) . \"\\n\";\r\n\t__var_dump($v);\r\n\techo \"$v\\n\";\r\n\t//print_r($v);\r\n\techo \"\\n------\\n\";\r\n}\r\n\r\ntest(1.7e+300);\r\ntest(1.7e-300);\r\ntest(1.7e+79);\r\ntest(1.7e-79);\r\ntest(1.7e+80);\r\ntest(1.7e-80);\r\ntest(1.7e+81);\r\ntest(1.7e-81);\r\ntest(1.7e+319);\r\ntest(1.7e-319);\r\ntest(1.7e+320);\r\ntest(1.7e-320);\r\ntest(1.7e+321);\r\ntest(1.7e-321);\r\ntest(1.7e+324);\r\ntest(1.7e-324);\r\ntest(1.7e+1000);\r\ntest(1.7e-1000);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24652.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n  /* This works */\r\n  $f = array('7' => 0);\r\n  __var_dump($f);\r\n  __var_dump(array_key_exists(7, $f));\r\n  __var_dump(array_key_exists('7', $f));\r\n\r\n  print \"----------\\n\";\r\n  /* This doesn't */\r\n  $f = array_flip(array('7'));\r\n  __var_dump($f);\r\n  __var_dump(array_key_exists(7, $f));\r\n  __var_dump(array_key_exists('7', $f));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24658.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nerror_reporting(0);\r\n\r\nclass foo {}\r\nfunction no_typehint($a) {\r\n\t__var_dump($a);\r\n}\r\nfunction typehint(foo $a) {\r\n\t__var_dump($a);\r\n}\r\nfunction no_typehint_ref(&$a) {\r\n\t__var_dump($a);\r\n}\r\nfunction typehint_ref(foo &$a) {\r\n\t__var_dump($a);\r\n}\r\n$v = new foo();\r\n$a = array(new foo(), 1, 2);\r\nno_typehint($v);\r\ntypehint($v);\r\nno_typehint_ref($v);\r\ntypehint_ref($v);\r\necho \"===no_typehint===\\n\";\r\narray_walk($a, 'no_typehint');\r\necho \"===no_typehint_ref===\\n\";\r\narray_walk($a, 'no_typehint_ref');\r\necho \"===typehint===\\n\";\r\narray_walk($a, 'typehint');\r\necho \"===typehint_ref===\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24783.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting(E_ALL);\r\n\t$arr = array (\"foo\\0bar\" => \"foo\\0bar\");\r\n\tforeach ($arr as $key => $val) {\r\n\t\techo strlen($key), ': ';\r\n\t\techo urlencode($key), ' => ', urlencode($val), \"\\n\";\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24908.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass test { \r\n\tfunction __construct() {\r\n\t\tif (count($_SERVER)) echo \"O\";\r\n\t}\r\n\tfunction __destruct() {\r\n\t\tif (count($_SERVER)) echo \"K\\n\";\r\n\t}\r\n}\r\n$test = new test();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24926.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nerror_reporting (E_ALL);\r\n\r\nclass foo {\r\n\r\n    public $functions = array();\r\n    \r\n    function foo()\r\n    {\r\n        $function = create_function('', 'return \"FOO\\n\";');\r\n        print($function());\r\n        \r\n        $this->functions['test'] = $function;\r\n        print($this->functions['test']());    // werkt al niet meer\r\n    \r\n    }\r\n}\r\n\r\n$a = new foo ();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug24951.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction test($s, $mode)\r\n{\r\n\treturn (($mode & PHP_OUTPUT_HANDLER_START)?\"[\":\"\") . $s . (($mode & PHP_OUTPUT_HANDLER_END)?\"]\\n\":\"\");\r\n}\r\nfunction t1()\r\n{\r\n\tob_start(\"test\");\r\n\techo \"Hello from t1 1 \";\r\n        echo \"Hello from t1 2 \";\r\n        ob_end_flush();\r\n}\r\nfunction t2()\r\n{\r\n\tob_start(\"test\");\r\n\techo \"Hello from t2 1 \";\r\n        ob_flush();\r\n        echo \"Hello from t2 2 \";\r\n        ob_end_flush();\r\n}\r\nfunction t3()\r\n{\r\n\tob_start(\"test\");\r\n        echo \"Hello from t3 1 \";\r\n        ob_clean();\r\n        echo \"Hello from t3 2 \";\r\n        ob_end_flush();\r\n}\r\n\r\nt1(); echo \"\\n\";\r\nt2(); echo \"\\n\"; \r\nt3(); echo \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug25145.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n__var_dump($_REQUEST);\r\necho \"Done\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug25547.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nfunction handler($errno, $errstr, $errfile, $errline, $context)\r\n{\r\n\techo __FUNCTION__ . \"\\n\";\r\n}\r\n\r\nset_error_handler('handler');\r\n\r\nfunction foo($x) {\r\n\treturn \"foo\";\r\n}\r\n\r\n$output = array();\r\n++$output[foo(\"bar\")];\r\n\r\n__var_dump($output);\r\n\r\necho \"Done\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug25652.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tfunction testfunc ($var) {\r\n\t\techo \"testfunc $var\\n\";\r\n\t}\r\n\t\r\n\tclass foo {\r\n\t\tpublic $arr = array('testfunc');\r\n\t\tfunction bar () {\r\n\t\t\t$this->arr[0]('testvalue');\r\n\t\t}\r\n\t}\r\n\t\r\n\t$a = new foo ();\r\n\t$a->bar ();\r\n\t\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug25922.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction my_error_handler($error, $errmsg='', $errfile='', $errline=0, $errcontext='')\r\n{\r\n\techo \"error\";\r\n\t$errcontext = '';\r\n}\r\n                                                                                        \r\nset_error_handler('my_error_handler');\r\n\r\nfunction test()\r\n{\r\n\techo \"Undefined index here: '\";\r\n\techo $data['HTTP_HEADER'];\r\n\techo \"'\\n\";\r\n}\r\ntest();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug26182.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n\r\nclass A {\r\n    function NotAConstructor ()\r\n    {\r\n        if (isset($this->x)) {\r\n            //just for demo\r\n        }\r\n    }\r\n}\r\n\r\n$t = new A ();\r\n\r\n__var_dump($t);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug26696.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$str = 'asdd/?';\r\n$len = strlen($str);\r\nfor ($i = 0; $i < $len; $i++) {\r\n\tswitch ($str[$i]) {\r\n\t\tcase '?':\r\n\t\t\techo \"OK\\n\";\r\n\t\t\tbreak;\r\n\t}\r\n}\r\n\r\n$str = '*';\r\nswitch ($str[0]) { \r\n\tcase '*';\r\n\t\techo \"OK\\n\";\r\n\t\tbreak;\r\n\tdefault:\r\n\t\techo 'Default RAN!';\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug26866.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass bar {\r\n\tfunction get_name() {\r\n\t\treturn 'bar';\r\n\t}\r\n}\r\nclass foo {\r\n\tfunction __get($sName) {\r\n\t\tthrow new Exception('Exception!');\r\n\t\treturn new bar();\r\n\t}\r\n}\r\n$foo = new foo();\r\ntry {\r\n\techo $foo->bar->get_name();\r\n}\r\ncatch (Exception $E) {\r\n\techo \"Exception raised!\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug26869.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  include('Phalanger.inc');\r\n\tdefine(\"A\", \"1\");\r\n\tstatic $a=array(A => 1);\r\n\t__var_dump($a);\r\n\t__var_dump(isset($a[A]));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug27354.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  include('Phalanger.inc');\r\n\t__var_dump(-2147483647 % -1);\r\n\t__var_dump(-2147483649 % -1);\r\n\t__var_dump(-2147483648 % -1);\r\n\t__var_dump(-2147483648 % -2);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug27439.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nerror_reporting(0);\r\nclass test_props {\r\n\tpublic $a = 1;\r\n\tpublic $b = 2;\r\n\tpublic $c = 3;\r\n}\r\n\r\nclass test {\r\n\tpublic $array = array(1,2,3);\r\n\tpublic $string = \"string\";\r\n\r\n\tpublic function __construct() {\r\n\t\t$this->object = new test_props;\r\n\t}\r\n\r\n\tpublic function getArray() {\r\n\t\treturn $this->array;\r\n\t}\r\n\r\n\tpublic function getString() {\r\n\t\treturn $this->string;\r\n\t}\r\n\r\n\tpublic function case1() {\r\n\t\tforeach ($this->array as $foo) {\r\n\t\t\techo $foo;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic function case2() {\r\n\t\tforeach ($this->foobar as $foo);\r\n\t}\r\n\r\n\tpublic function case3() {\r\n\t\tforeach ($this->string as $foo);\r\n\t}\r\n\r\n\tpublic function case4() {\r\n\t\tforeach ($this->getArray() as $foo);\r\n\t}\r\n\r\n\tpublic function case5() {\r\n\t\tforeach ($this->getString() as $foo);\r\n\t}\r\n\r\n\tpublic function case6() {\r\n\t\tforeach ($this->object as $foo) {\r\n\t\t\techo $foo;\r\n\t\t}\r\n\t}\r\n}\r\n$test = new test();\r\n$test->case1();\r\n$test->case2();\r\n$test->case3();\r\n$test->case4();\r\n$test->case5();\r\n$test->case6();\r\necho \"\\n\";\r\necho \"===DONE===\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug27443.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho gettype(defined('test'));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug27535.php",
    "content": "[expect php]\r\n[file]\r\n<?                                                                                                                                \r\nclass Class1\r\n{\r\n\tpublic $_Class2_obj;\r\n}\r\n\r\nclass Class2\r\n{\r\n\tpublic $storage = '';\r\n\r\n\tfunction Class2()\r\n\t{\r\n\t\t$this->storage = new Class1();\r\n\r\n\t\t$this->storage->_Class2_obj = $this;\r\n\t}\r\n}\r\n\r\n$foo = new Class2();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug28213.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nclass FooBar { static function error() { echo \"error\"; exit(); } }\r\nset_error_handler(array('FooBar', 'error'));\r\ninclude('foobar.php');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug28800.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$strings = array('into', 'info', 'inf', 'infinity', 'infin', 'inflammable');\r\n\tforeach ($strings as $v) {\r\n\t\techo ($v+0).\"\\n\";\r\n\t}\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug29566.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nerror_reporting(0);\r\n$var=\"This is a string\";\r\n\r\n$dummy=\"\";\r\nunset($dummy);\r\n\r\nforeach($var['nosuchkey'] as $v) {\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug29893.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$base = 50;\r\n@$base[$base] -= 0; \r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug29944.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$a = 1;\r\n$b = \"1\";\r\nswitch ($a) {\r\n\tcase 1:\r\n\t\tfunction foo($bar) {\r\n\t\t\tif (preg_match('/\\d/', $bar)) return true;\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\techo foo($b);\r\n}\t\t\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug30578.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nerror_reporting(E_ALL);\r\n\r\nclass Example\r\n{\r\n    function __construct()\r\n    {\r\n        ob_start();\r\n        echo \"This should be displayed last.\\n\";\r\n    }\r\n\r\n    function __destruct()\r\n    {\r\n        $buffered_data = ob_get_contents();\r\n        ob_end_clean();\r\n\r\n        echo \"This should be displayed first.\\n\";\r\n        echo \"Buffered data: $buffered_data\";\r\n    }\r\n}\r\n\r\n$obj = new Example;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug30638.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n # try to activate a german locale\r\nif (setlocale(LC_NUMERIC, \"de_DE\", \"de\", \"german\", \"ge\") === FALSE) {\r\n\tdie(\"skip\");\r\n}\r\n# activate the german locale\r\nsetlocale(LC_NUMERIC, \"de_DE\", \"de\", \"german\", \"ge\");\r\n\r\n$lc = localeconv();\r\nprintf(\"decimal_point: %s\\n\", $lc['decimal_point']);\r\nprintf(\"thousands_sep: %s\\n\", $lc['thousands_sep']);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug30726.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho (int) is_float('-.1' * 2), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug30862.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\ninclude('Phalanger.inc');\r\nclass T {\r\n\tstatic $a = array(false=>\"false\", true=>\"true\");\r\n}\r\n__var_dump(T::$a);\r\n\r\ndefine(\"X\",0);\r\ndefine(\"Y\",1);\r\nclass T2 {\r\n\tstatic $a = array(X=>\"false\", Y=>\"true\");\r\n}\r\n__var_dump(T2::$a);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug32828.php.kb",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ntry\r\n{\r\n  function output_handler($buffer)\r\n  {\r\n\t  throw new Exception;\r\n  }\r\n\r\n  ob_start('output_handler');\r\n\r\n  ob_end_clean();\r\n}\r\ncatch(Exception $e)\r\n{\r\n  echo \"E\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug32924.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\ninclude_once('inc.inc');\r\nrequire_once('inc.inc');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug35176.php.notest",
    "content": "--TEST--\r\nBug #35176 (include()/require()/*_once() produce wrong error messages about main())\r\n--INI--\r\nhtml_errors=1\r\nerror_reporting=4095\r\n--FILE--\r\n<?php\r\nrequire_once('nonexisiting.php');\r\n?>\r\n--EXPECTF--\r\n<br />\r\n<b>Warning</b>:  require_once(nonexisiting.php) [<a href='function.require-once.html'>function.require-once.html</a>]: failed to open stream: No such file or directory in <b>%sbug35176.php</b> on line <b>2</b><br />\r\n<br />\r\n<b>Fatal error</b>:  require_once() [<a href='function.require.html'>function.require.html</a>]: Failed opening required 'nonexisiting.php' (%s) in <b>%sbug35176.php</b> on line <b>2</b><br />\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug35382.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\neval(\"echo 'Hello'; // comment\");\r\necho \" World\";\r\n//last line comment\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/bug7515.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nerror_reporting(E_ALL);\r\nclass obj {\r\n\tfunction method() {}\r\n}\r\n\r\n$o->root=new obj();\r\n\r\nob_start();\r\n__var_dump($o);\r\n$x=ob_get_contents();\r\nob_end_clean();\r\n\r\n$o->root->method();\r\n\r\nob_start();\r\n__var_dump($o);\r\n$y=ob_get_contents();\r\nob_end_clean();\r\nif ($x == $y) {\r\n    print \"success\";\r\n} else {\r\n    print \"failure\r\nx=$x\r\ny=$y\r\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/each_binary_safety.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(E_ALL);\r\n$arr = array (\"foo\\0bar\" => \"foo\\0bar\");\r\nwhile (list($key, $val) = each($arr)) {\r\n\techo strlen($key), ': ';\r\n\techo urlencode($key), ' => ', urlencode($val), \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/error_2_exception_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass MyException extends Exception {\r\n\tfunction MyException($_errno, $_errmsg) {\r\n\t\t$this->errno = $_errno;\r\n\t\t$this->errmsg = $_errmsg;\r\n\t}\r\n\r\n\tfunction getErrno() {\r\n\t\treturn $this->errno;\r\n\t}\r\n    \r\n\tfunction getErrmsg() {\r\n\t\treturn $this->errmsg;\r\n\t}\r\n}\r\n\r\nfunction ErrorsToExceptions($errno, $errmsg) {\r\n\tthrow new MyException($errno, $errmsg);\r\n}\r\n\r\nset_error_handler(\"ErrorsToExceptions\");\r\n\r\n// make sure it isn't catching exceptions that weren't\r\n// thrown...\r\n\r\ntry {\r\n} catch (MyException $exception) {\r\n\techo \"There was an exception: \" . $exception->getErrno() . \", '\" . $exception->getErrmsg() . \"'\\n\";\r\n}\r\n\r\ntry {\r\n\ttrigger_error(\"I will become an exception\", E_USER_ERROR);\r\n} catch (MyException $exception) {\r\n\techo \"There was an exception: \" . $exception->getErrno() . \", '\" . $exception->getErrmsg() . \"'\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/foreach_with_object_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass Test {\r\n   public $a = array(1,2,3,4,5); // removed, crash too\r\n   function c() {\r\n      return new Test();\r\n   }\r\n\r\n}\r\n$obj = new Test();\r\nforeach ($obj->c()->a as $value) {\r\n    print \"$value\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/foreach_with_references_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$arr = array(1 => \"one\", 2 => \"two\", 3 => \"three\");\r\n\r\nforeach($arr as $key => $val) {\r\n\t$val = $key;\r\n}\r\n\r\nforeach($arr as $key => $val) echo \"$key => $val\\n\";\r\n\r\nforeach($arr as $key => &$val) {\r\n\t$val = $key;\r\n}\r\n\r\nforeach($arr as $key => $val) echo \"$key => $val\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/lang/inc.inc",
    "content": "<?php\r\necho \"Included!\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/lang/type_hints_001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\nclass Foo {\r\n}\r\n\r\nclass Bar {\r\n}\r\n\r\nfunction type_hint_foo(Foo $a) {\r\necho \"!!!\";\r\n}\r\n\r\n$foo = new Foo;\r\n$bar = new Bar;\r\n\r\nerror_reporting(0);\r\ntype_hint_foo($foo);\r\ntype_hint_foo($bar);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/new/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/new/phpt2php.cmd",
    "content": "rename *.phpt *.php\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nrequire('data.inc');\r\n/*\r\n** Create sample arrays\r\n** Test alpha, numeric (decimal, hex, octal) and special data\r\n**\r\n**\r\n*/\r\n\r\n/* Helper function to build testing arrays */\r\nfunction make_nested_array ($depth, $breadth, $function = NULL, $args = array ()) {\r\n    for ($x = 0; $x < $breadth; ++$x) {\r\n        if (NULL === $function) {\r\n            $array = array (0);\r\n        } else {\r\n            $array = array (call_user_func_array ($function, $args));\r\n        }\r\n        for ($y = 1; $y < $depth; ++$y) {\r\n            $array[0] = array ($array[0]);\r\n        }\r\n        $temp[$x] = $array;\r\n    }\r\n    return $temp;\r\n}\r\n\r\n/* Nested array */\r\n$data2 = make_nested_array (3, 3);\r\n$data = array_merge($data, $data2);\r\n\r\n__var_dump ($data);\r\n\r\nfunction echo_kv ($value, $key) {\r\n    __var_dump ($key);\r\n    __var_dump ($value);\r\n}\r\n\r\necho \" -- Testing array_walk() -- \\n\";\r\narray_walk ($data, 'echo_kv');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/002.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nrequire('data.inc');\r\n\r\nerror_reporting(0);\r\n\r\nfunction test_sort ($sort_function, $data) {\r\n    echo \"\\n -- Testing $sort_function() -- \\n\";\r\n\techo \"No second argument:\\n\";\r\n    $sort_function ($data);\r\n    __var_dump ($data);\r\n\techo \"Using SORT_REGULAR:\\n\";\r\n    $sort_function ($data, SORT_REGULAR);\r\n    __var_dump ($data);\r\n\techo \"Using SORT_NUMERIC:\\n\";\r\n    $sort_function ($data, SORT_NUMERIC);\r\n    __var_dump ($data);\r\n\techo \"Using SORT_STRING\\n\";\r\n    $sort_function ($data, SORT_STRING);\r\n    __var_dump ($data);\r\n}\r\n\r\necho \"Unsorted data:\\n\";\r\n__var_dump ($data);\r\nforeach (array ('arsort', 'asort', 'krsort', 'ksort', 'rsort', 'sort') as $test_function) {\r\n    test_sort ($test_function, $data);\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nrequire('data.inc');\r\n\r\nfunction cmp ($a, $b) {\r\n    is_array ($a)\r\n        and $a = array_sum ($a);\r\n    is_array ($b)\r\n        and $b = array_sum ($b);\r\n    return strcmp ($a, $b);\r\n}\r\n\r\necho \" -- Testing uasort() -- \\n\";\r\nuasort ($data, 'cmp');\r\n__var_dump ($data);\r\n\r\n\r\necho \"\\n -- Testing uksort() -- \\n\";\r\nuksort ($data, 'cmp');\r\n__var_dump ($data);\r\n\r\necho \"\\n -- Testing usort() -- \\n\";\r\nusort ($data, 'cmp');\r\n__var_dump ($data);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$data = array(\r\n\t'Test1',\r\n\t'teST2'=>0,\r\n\t5=>'test2',\r\n\t'abc'=>'test10',\r\n\t'test21'\r\n);\r\n\r\n__var_dump($data);\r\n\r\nnatsort($data);\r\n__var_dump($data);\r\n\r\nnatcasesort($data);\r\n__var_dump($data);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\narray_shift($GLOBALS);\r\n\r\n$a = array(\"foo\", \"bar\", \"fubar\");\r\n$b = array(\"3\" => \"foo\", \"4\" => \"bar\", \"5\" => \"fubar\");\r\n$c = array(\"a\" => \"foo\", \"b\" => \"bar\", \"c\" => \"fubar\");\r\n\r\n/* simple array */\r\necho array_shift($a), \"\\n\";\r\n__var_dump($a);\r\n\r\n/* numerical assoc indices */\r\necho array_shift($b), \"\\n\";\r\n__var_dump($b);\r\n\r\n/* assoc indices */\r\necho array_shift($c), \"\\n\";\r\n__var_dump($c);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/006.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\narray_pop($GLOBALS);\r\n\r\n$a = array(\"foo\", \"bar\", \"fubar\");\r\n$b = array(\"3\" => \"foo\", \"4\" => \"bar\", \"5\" => \"fubar\");\r\n$c = array(\"a\" => \"foo\", \"b\" => \"bar\", \"c\" => \"fubar\");\r\n\r\n/* simple array */\r\necho array_pop($a), \"\\n\";\r\narray_push($a, \"foobar\");\r\n__var_dump($a);\r\n\r\n/* numerical assoc indices */\r\necho array_pop($b), \"\\n\";\r\n__var_dump($b);\r\n\r\n/* assoc indices */\r\necho array_pop($c), \"\\n\";\r\n__var_dump($c);\r\n\r\n\r\n// additional test by Phalanger:\r\n$a = array(\"a\",\"b\",100 => \"x\",200 => \"c\");\r\narray_pop($a);\r\n$a[] = \"1\";\r\narray_pop($a);\r\n$a[] = \"2\";\r\n__var_dump($a);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/007.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$a = array(1,\"big\"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);\r\n$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);\r\n$c = array(-1,1);\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '$c='.__var_dump($c,TRUE).\";\\n\";\r\n__var_dump(array_diff($a,$b,$c));\r\n__var_dump(array_diff_assoc($a,$b,$c));\r\n$a = array(\r\n'a'=>2,\r\n'b'=>'some',\r\n'c'=>'done',\r\n'z'=>'foo',\r\n'f'=>5,\r\n'fan'=>'fen',\r\n7=>18,\r\n9=>25,\r\n11=>42,\r\n12=>42,\r\n45=>42,\r\n73=>'foo',\r\n95=>'some',\r\n'som3'=>'some',\r\n'want'=>'wanna');\r\n$b = array(\r\n'a'=>7,\r\n7=>18,\r\n9=>13,\r\n11=>42,\r\n45=>46,\r\n'som3'=>'some',\r\n'foo'=>'some',\r\n'goo'=>'foo',\r\n'f'=>5,\r\n'z'=>'equal'\r\n);\r\n$c = array(\r\n73=>'foo',\r\n95=>'some');\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '$c='.__var_dump($c,TRUE).\";\\n\";\r\necho \"Results:\\n\\n\";\r\n__var_dump(array_diff($a,$b,$c));\r\n__var_dump(array_diff_assoc($a,$b,$c));\r\n\r\necho \"-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-\\n\";\r\nerror_reporting(E_ALL);\r\nclass cr {\r\n\tprivate $priv_member;\r\n\tpublic  $public_member;\r\n\tfunction cr($val) {\r\n\t\t$this->priv_member = $val;\r\n\t\t$this->public_member = $val;\r\n\t}\r\n\tstatic function comp_func_cr($a, $b) {\r\n\t\tif ($a->priv_member === $b->priv_member) return 0;\r\n\t\treturn ($a->priv_member > $b->priv_member)? 1:-1;\r\n\t}\r\n}\r\n\r\nfunction comp_func($a, $b) {\r\n\tif ($a === $b) return 0;\r\n\treturn ($a > $b)? 1:-1;\r\n\r\n}\r\n\r\nfunction comp_func_cr($a, $b) {\r\n\tif ($a->public_member === $b->public_member) return 0;\r\n\treturn ($a->public_member > $b->public_member)? 1:-1;\r\n}\r\n\r\n\r\n/*\r\n$a = array(1,\"big\"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);\r\n$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);\r\n$c = array(-1,1);\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '$c='.__var_dump($c,TRUE).\";\\n\";\r\n__var_dump(array_diff($a,$b,$c));\r\n__var_dump(array_diff_assoc($a,$b,$c));\r\n__var_dump(array_udiff($a, $b, $c, \"comp_func\"));\r\n__var_dump(array_diff_uassoc($a,$b,$c, \"comp_func\"));\r\n*/\r\n\r\n/*\r\n $a = array(new cr(9),new cr(12),new cr(23),new cr(4),new cr(-15),);\r\n $b = array(new cr(9),new cr(22),new cr( 3),new cr(4),new cr(-15),);\r\n __var_dump(array_udiff($a, $b, \"comp_func_cr\"));\r\n*/\r\n$a = array(\"0.1\" => new cr(9), \"0.5\" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);\r\n$b = array(\"0.2\" => new cr(9), \"0.5\" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),);\r\n\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '__var_dump(array_udiff_uassoc($a, $b, \"comp_func_cr\", \"comp_func\"));'.\"\\n\";\r\n__var_dump(array_udiff_uassoc($a, $b, \"comp_func_cr\", \"comp_func\"));\r\n\r\n\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '__var_dump(array_udiff_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), \"comp_func\"));'.\"\\n\";\r\n__var_dump(array_udiff_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), \"comp_func\"));\r\n\r\n\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '__var_dump(array_diff_assoc($a, $b));'.\"\\n\";\r\n__var_dump(@array_diff_assoc($a, $b));\r\n\r\n\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '__var_dump(array_udiff($a, $b, \"comp_func_cr\"));'.\"\\n\";\r\n__var_dump(array_udiff($a, $b, \"comp_func_cr\"));\r\n\r\n\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '__var_dump(array_udiff_assoc($a, $b, \"comp_func_cr\"));'.\"\\n\";\r\n__var_dump(array_udiff_assoc($a, $b, \"comp_func_cr\"));\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/008.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n//-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=- TEST 1 -=-=-=-=-\r\n$a = array(1,\"big\"=>2,2,6,3,5,3,3,454,'some_string',3,3,3,3,3,3,3,3,17);\r\n$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);\r\n$c = array(-1,2,1,15,25,17);\r\necho str_repeat(\"-=\",10).\" TEST 1 \".str_repeat(\"-=\",20).\"\\n\";\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '$c='.__var_dump($c,TRUE).\";\\n\";\r\n\r\necho 'array_intersect($a,$b,$c);'.\"\\n\";\r\n__var_dump(array_intersect($a,$b,$c));\r\n\r\necho 'array_intersect_assoc($a,$b,$c);'.\"\\n\";\r\n__var_dump(array_intersect_assoc($a,$b,$c));\r\n\r\necho 'array_intersect($a,$b);'.\"\\n\";\r\n__var_dump(array_intersect($a,$b));\r\n\r\necho 'array_intersect_assoc($a,$b);'.\"\\n\";\r\n__var_dump(array_intersect_assoc($a,$b));\r\n\r\n//-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=- TEST 2 -=-=-=-=-=-\r\n$a = array(\r\n'a'=>2,\r\n'b'=>'some',\r\n'c'=>'done',\r\n'z'=>'foo',\r\n'f'=>5,\r\n'fan'=>'fen',\r\n'bad'=>'bed',\r\n'gate'=>'web',\r\n7=>18,\r\n9=>25,\r\n11=>42,\r\n12=>42,\r\n45=>42,\r\n73=>'foo',\r\n95=>'some',\r\n'som3'=>'some',\r\n'want'=>'wanna');\r\n\r\n\r\n$b = array(\r\n'a'=>7,\r\n7=>18,\r\n9=>13,\r\n11=>42,\r\n45=>46,\r\n'som3'=>'some',\r\n'foo'=>'some',\r\n'goo'=>'foo',\r\n'f'=>5,\r\n'z'=>'equal',\r\n'gate'=>'web'\r\n);\r\n$c = array(\r\n'gate'=>'web',\r\n73=>'foo',\r\n95=>'some'\r\n);\r\n\r\necho str_repeat(\"-=\",10).\" TEST 2 \".str_repeat(\"-=\",20).\"\\n\";\r\necho '$a='.__var_dump($a,TRUE).\";\\n\";\r\necho '$b='.__var_dump($b,TRUE).\";\\n\";\r\necho '$c='.__var_dump($c,TRUE).\";\\n\";\r\necho \"\\n\\nResults:\\n\\n\";\r\n\r\necho 'array_intersect($a,$b,$c);'.\"\\n\";\r\n__var_dump(array_intersect($a,$b,$c));\r\n\r\necho 'array_intersect_assoc($a,$b,$c);'.\"\\n\";\r\n__var_dump(array_intersect_assoc($a,$b,$c));\r\n\r\necho 'array_intersect($a,$b);'.\"\\n\";\r\n__var_dump(array_intersect($a,$b));\r\n\r\necho 'array_intersect_assoc($a,$b);'.\"\\n\";\r\n__var_dump(array_intersect_assoc($a,$b));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_change_key_case.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n$arrays = array (\r\n\tarray (),\r\n\tarray (0),\r\n\tarray (1),\r\n\tarray (-1),\r\n\tarray (0, 2, 3, 4, 5),\r\n\tarray (1, 2, 3, 4, 5),\r\n\tarray (\"\" => 1),\r\n\tarray (\"a\" => 1),\r\n\tarray (\"Z\" => 1),\r\n\tarray (\"one\" => 1),\r\n\tarray (\"ONE\" => 1),\r\n\tarray (\"OnE\" => 1),\r\n\tarray (\"oNe\" => 1),\r\n\tarray (\"one\" => 1, \"two\" => 2),\r\n\tarray (\"ONE\" => 1, \"two\" => 2),\r\n\tarray (\"OnE\" => 1, \"two\" => 2),\r\n\tarray (\"oNe\" => 1, \"two\" => 2),\r\n\tarray (\"one\" => 1, \"TWO\" => 2),\r\n\tarray (\"ONE\" => 1, \"TWO\" => 2),\r\n\tarray (\"OnE\" => 1, \"TWO\" => 2),\r\n\tarray (\"oNe\" => 1, \"TWO\" => 2),\r\n\tarray (\"one\" => 1, \"TwO\" => 2),\r\n\tarray (\"ONE\" => 1, \"TwO\" => 2),\r\n\tarray (\"OnE\" => 1, \"TwO\" => 2),\r\n\tarray (\"oNe\" => 1, \"TwO\" => 2),\r\n\tarray (\"one\" => 1, \"tWo\" => 2),\r\n\tarray (\"ONE\" => 1, \"tWo\" => 2),\r\n\tarray (\"OnE\" => 1, \"tWo\" => 2),\r\n\tarray (\"oNe\" => 1, \"tWo\" => 2),\r\n\tarray (\"one\" => 1, 2),\r\n\tarray (\"ONE\" => 1, 2),\r\n\tarray (\"OnE\" => 1, 2),\r\n\tarray (\"oNe\" => 1, 2),\r\n\tarray (\"ONE\" => 1, \"TWO\" => 2, \"THREE\" => 3, \"FOUR\" => \"four\"),\r\n\tarray (\"one\" => 1, \"two\" => 2, \"three\" => 3, \"four\" => \"FOUR\"),\r\n\tarray (\"ONE\" => 1, \"TWO\" => 2, \"three\" => 3, \"four\" => \"FOUR\"),\r\n\tarray (\"one\" => 1, \"two\" => 2, \"THREE\" => 3, \"FOUR\" => \"four\")\r\n);\r\n\r\nforeach ($arrays as $item) {\r\n\t__var_dump(array_change_key_case($item));\r\n\t__var_dump(array_change_key_case($item, CASE_UPPER));\r\n\t__var_dump(array_change_key_case($item, CASE_LOWER));\r\n\techo \"\\n\";\r\n}\r\necho \"end\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_chunk.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$arrays = array (\r\n\tarray (),\r\n\tarray (0),\r\n\tarray (1),\r\n\tarray (-1),\r\n\tarray (0, 2),\r\n\tarray (1, 2, 3),\r\n\r\n\tarray (1 => 0),\r\n\tarray (2 => 1),\r\n\tarray (3 => -1),\r\n\r\n\tarray (1 => 0, 2 => 2),\r\n\tarray (1 => 1, 2 => 2, 3 => 3),\r\n\tarray (0 => 0, 3 => 2),\r\n\tarray (1 => 1, 5 => 2, 8 => 3),\r\n\r\n\tarray (1, 2),\r\n\tarray (0, 1, 2),\r\n\tarray (1, 2, 3),\r\n\tarray (0, 1, 2, 3),\r\n\tarray (1, 2, 3, 4),\r\n\tarray (0, 1, 2, 3, 4),\r\n\tarray (1, 2, 3, 4, 5, 6, 7, 8, 9, 10),\r\n\tarray (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10),\r\n\r\n\tarray (\"a\" => 1),\r\n\tarray (\"b\" => 1, \"c\" => 2),\r\n\tarray (\"p\" => 1, \"q\" => 2, \"r\" => 3, \"s\" => 4, \"u\" => 5, \"v\" => 6),\r\n\r\n\tarray (\"a\" => \"A\"),\r\n\tarray (\"p\" => \"A\", \"q\" => \"B\", \"r\" => \"C\", \"s\" => \"D\", \"u\" => \"E\", \"v\" => \"F\"),\r\n);\r\n\r\nforeach ($arrays as $item) {\r\n\techo \"===========================================\\n\";\r\n\t__var_dump ($item);\r\n\techo \"-------------------------------------------\\n\";\r\n\tfor ($i = 0; $i < (sizeof($item) + 1); $i++) {\r\n\t\techo \"[$i]\\n\";\r\n\t\t__var_dump (@array_chunk ($item, $i));\r\n\t\t__var_dump (@array_chunk ($item, $i, TRUE));\r\n\t\t__var_dump (@array_chunk ($item, $i, FALSE));\r\n\t\techo \"\\n\";\r\n\t}\r\n\techo \"\\n\";\r\n}\r\necho \"end\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_count_values.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$arrays = array (\r\n\tarray (),\r\n\tarray (0),\r\n\tarray (1),\r\n\tarray (-1),\r\n\tarray (0, 0),\r\n\tarray (0, 1),\r\n\tarray (1, 1),\r\n\tarray (1, \"hello\", 1, \"world\", \"hello\"),\r\n\tarray (\"hello\", \"world\", \"hello\"),\r\n\tarray (\"\", \"world\", \"\", \"hello\", \"world\", \"hello\", \"hello\", \"world\", \"hello\"),\r\n\tarray (0, array (1, \"hello\", 1, \"world\", \"hello\")),\r\n\tarray (1, array (1, \"hello\", 1, \"world\", \"hello\"), array (1, \"hello\", 1, \"world\", \"hello\"), array (1, \"hello\", 1, \"world\", \"hello\")),\r\n);\r\n\r\nforeach ($arrays as $item) {\r\n\tvar_dump (@array_count_values ($item));\r\n\techo \"\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_diff_1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n//-=-=-=-=-\r\n$a = array();\r\n$b = 3;\r\n$c = array(5);\r\n@array_diff($a, $b, $c);\r\n//-=-=-=-=-=-\r\necho \"OK!\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_diff_key.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = array(1, 6, 2, -20, 15, 1200, -2500);\r\n$b = array(0, 7, 2, -20, 11, 1100, -2500);\r\n$c = array(0, 6, 2, -20, 19, 1000, -2500);\r\n$d = array(3, 8,-2, -20, 14,  900, -2600);\r\n$a_f = array_flip($a);\r\n$b_f = array_flip($b);\r\n$c_f = array_flip($c);\r\n$d_f = array_flip($d);\r\n$i = 1;\r\n/* give nicer values */\r\nforeach ($a_f as $k=> &$a_f_el) { $a_f_el =$k*2;}\r\nforeach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;}\r\nforeach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;}\r\nforeach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;}\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 1\r\nvar_dump(array_diff_key($a_f, $b_f));// keys -> 1, 6, 15, 1200\r\nvar_dump(array_diff_ukey($a_f, $b_f, \"comp_func\"));// 1, 6, 15, 1200\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 2\r\nvar_dump(array_diff_key($a_f, $c_f));// keys -> 1, 15, 1200\r\nvar_dump(array_diff_ukey($a_f, $c_f, \"comp_func\"));// 1, 15, 1200\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 3\r\nvar_dump(array_diff_key($a_f, $d_f));// 1, 6, 2, 15, 1200, -2500\r\nvar_dump(array_diff_ukey($a_f, $d_f, \"comp_func\"));// 1, 6, 2, 15, 1200, -2500\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 4\r\nvar_dump(array_diff_key($a_f, $b_f, $c_f));// 1, 15, 1200\r\nvar_dump(array_diff_ukey($a_f, $b_f, $c_f, \"comp_func\"));// 1, 15, 1200\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 5\r\nvar_dump(array_diff_key($a_f, $b_f, $d_f));// 1, 6, 15, 1200\r\nvar_dump(array_diff_ukey($a_f, $b_f, $d_f, \"comp_func\"));// 1, 6, 15, 1200\r\n\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 6\r\nvar_dump(array_diff_key($a_f, $b_f, $c_f, $d_f));// 1, 15, 1200\r\nvar_dump(array_diff_ukey($a_f, $b_f, $c_f, $d_f, \"comp_func\"));//1, 15, 1200\r\n\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 7\r\nvar_dump(array_diff_key($b_f, $c_f));// 7, 11, 1100\r\nvar_dump(array_diff_ukey($b_f, $c_f, \"comp_func\"));//7, 11, 1100\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 8\r\nvar_dump(array_diff_key($b_f, $d_f));//0, 7, 2, 11, 1100, -2500\r\nvar_dump(array_diff_ukey($b_f, $d_f, \"comp_func\"));//0, 7, 2, 11, 1100, -2500\r\n\r\n\r\necho \"------ Test $i --------\\n\";$i++;// 9\r\nvar_dump(array_diff_key($b_f, $c_f, $d_f));// 7, 11, 1100\r\nvar_dump(array_diff_ukey($b_f, $c_f,  $d_f, \"comp_func\"));// 7, 11, 1000\r\n\r\nfunction comp_func($a, $b) {\r\n        if ($a === $b) return 0;\r\n        return ($a > $b)? 1:-1;\r\n\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_intersect_1.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nerror_reporting(E_ALL);\r\nclass cr {\r\n\tprivate $priv_member;\r\n\tpublic  $public_member;\r\n\tfunction cr($val) {\r\n\t\t$this->priv_member = $val;\r\n\t\t$this->public_member = $val;\r\n\t}\r\n\tstatic function comp_func_cr($a, $b) {\r\n\t\tif ($a->priv_member === $b->priv_member) return 0;\r\n\t\treturn ($a->priv_member > $b->priv_member)? 1:-1;\r\n\t}\r\n}\r\n\r\nfunction comp_func($a, $b) {\r\n\tif ($a === $b) return 0;\r\n\treturn ($a > $b)? 1:-1;\r\n\r\n}\r\n\r\nfunction comp_func_cr($a, $b) {\r\n\tif ($a->public_member === $b->public_member) return 0;\r\n\treturn ($a->public_member > $b->public_member)? 1:-1;\r\n}\r\n\r\n$a = array(\"0.1\" => new cr(9), \"0.5\" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);\r\n$b = array(\"0.2\" => new cr(9), \"0.5\" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),);\r\n\r\n/* array_intersect() */\r\necho \"begin ------------ array_intersect() ----------------------------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_intersect($a, $b);'.\"\\n\";\r\n__var_dump(@array_intersect($a, $b));\r\necho \"end   ------------ array_intersect() ----------------------------\\n\";\r\n\r\n/* array_uintersect() */\r\necho \"begin ------------ array_uintersect() ---------------------------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_uintersect($a, $b, \"comp_func_cr\"));'.\"\\n\";\r\n__var_dump(array_uintersect($a, $b, \"comp_func_cr\"));\r\necho \"end   ------------ array_uintersect() ---------------------------\\n\";\r\n\r\n/* array_intersect_assoc() */\r\necho \"begin ------------ array_intersect_assoc() ----------------------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_intersect_assoc($a, $b));'.\"\\n\";\r\n__var_dump(@array_intersect_assoc($a, $b));\r\necho \"end   ------------ array_intersect_assoc() ----------------------\\n\";\r\n\r\n/* array_uintersect_assoc() */\r\necho \"begin ------------ array_uintersect_assoc() ---------------------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_uintersect_assoc($a, $b, \"comp_func_cr\"));'.\"\\n\";\r\n__var_dump(array_uintersect_assoc($a, $b, \"comp_func_cr\"));\r\necho \"end   ------------ array_uintersect_assoc() ---------------------\\n\";\r\n\r\n/* array_intersect_uassoc() */\r\necho \"begin ------------ array_intersect_uassoc() ---------------------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_intersect_uassoc($a, $b, \"comp_func\"));'.\"\\n\";\r\n__var_dump(@array_intersect_uassoc($a, $b, \"comp_func\"));\r\necho \"end   ------------ array_intersect_uassoc() ---------------------\\n\";\r\n\r\n/* array_uintersect_uassoc() - with ordinary function */\r\necho \"begin ------------ array_uintersect_uassoc() with ordinary func -\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_uintersect_uassoc($a, $b, \"comp_func_cr\", \"comp_func\"));'.\"\\n\";\r\n__var_dump(array_uintersect_uassoc($a, $b, \"comp_func_cr\", \"comp_func\"));\r\necho \"end   ------------ array_uintersect_uassoc() with ordinary func -\\n\";\r\n\r\n/* array_uintersect_uassoc() - by method call */\r\necho \"begin ------------ array_uintersect_uassoc() with method --------\\n\";\r\necho '$a='.var_export($a,TRUE).\";\\n\";\r\necho '$b='.var_export($b,TRUE).\";\\n\";\r\necho '__var_dump(array_uintersect_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), \"comp_func\"));'.\"\\n\";\r\n__var_dump(array_uintersect_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), \"comp_func\"));\r\necho \"end   ------------ array_uintersect_uassoc() with method --------\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_intersect_key.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$a = array(1, 6, 2, -20, 15, 1200, -2500);\r\n$b = array(0, 7, 2, -20, 11, 1100, -2500);\r\n$c = array(0, 6, 2, -20, 19, 1000, -2500);\r\n$d = array(3, 8,-2, -20, 14,  900, -2600);\r\n\r\n$a_f = array_flip($a);\r\n$b_f = array_flip($b);\r\n$c_f = array_flip($c);\r\n$d_f = array_flip($d);\r\n\r\n/* give nicer values */\r\nforeach ($a_f as $k=> &$a_f_el) { $a_f_el =$k*2;}\r\nforeach ($b_f as $k=> &$b_f_el) { $b_f_el =$k*2;}\r\nforeach ($c_f as $k=> &$c_f_el) { $c_f_el =$k*2;}\r\nforeach ($d_f as $k=> &$d_f_el) { $d_f_el =$k*2;}\r\n\r\n__var_dump(array_intersect_key($a_f, $b_f));// keys -> 2, -20, -2500\r\n__var_dump(array_intersect_ukey($a_f, $b_f, \"comp_func\"));// 2, 20, -2500\r\n__var_dump(array_intersect_key($a_f, $c_f));// keys -> 6, 2, -20, -2500\r\n__var_dump(array_intersect_ukey($a_f, $c_f, \"comp_func\"));// 6, 2, -20, -2500\r\n__var_dump(array_intersect_key($a_f, $d_f));// -20\r\n__var_dump(array_intersect_ukey($a_f, $d_f, \"comp_func\"));// -20\r\n\r\n__var_dump(array_intersect_key($a_f, $b_f, $c_f));// 2, -20, -2500\r\n__var_dump(array_intersect_ukey($a_f, $b_f, $c_f, \"comp_func\"));// 2, -20, -2500\r\n__var_dump(array_intersect_key($a_f, $b_f, $d_f));// -20\r\n__var_dump(array_intersect_ukey($a_f, $b_f, $d_f, \"comp_func\"));// -20\r\n\r\n__var_dump(array_intersect_key($a_f, $b_f, $c_f, $d_f));// -20\r\n__var_dump(array_intersect_ukey($a_f, $b_f, $c_f, $d_f, \"comp_func\"));//-20\r\n\r\n\r\n__var_dump(array_intersect_key($b_f, $c_f));// 0, 2, -20, -2500\r\n__var_dump(array_intersect_ukey($b_f, $c_f, \"comp_func\"));//0, 2, -20, 2500\r\n\r\n__var_dump(array_intersect_key($b_f, $d_f));// -20\r\n__var_dump(array_intersect_ukey($b_f, $d_f, \"comp_func\"));// -20\r\n\r\n__var_dump(array_intersect_key($b_f, $c_f, $d_f));// -20\r\n__var_dump(array_intersect_ukey($b_f, $c_f,  $d_f, \"comp_func\"));// -20\r\n\r\n\r\necho \"----- Now testing array_intersect() ------- \\n\";\r\n__var_dump(array_intersect($a, $b_f));\r\n__var_dump(array_uintersect($a, $b, \"comp_func\"));\r\n__var_dump(array_intersect($a, $b, $c));\r\n__var_dump(array_uintersect($a, $b, $c, \"comp_func\"));\r\n__var_dump(array_intersect($a, $b, $c, $d));\r\n__var_dump(array_uintersect($a, $b, $c, $d, \"comp_func\"));\r\n\r\n///////////////////////////////////////////////////////////////////////\r\nfunction comp_func($a, $b) {\r\n        if ($a === $b) return 0;\r\n        return ($a > $b)? 1:-1;\r\n\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_sum.php",
    "content": "[expect]\r\ninteger(500500)\r\nint64(5000050000)\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$i = 0;\r\nwhile ($i++ < 1000) {\r\n\t$a[] = $i;\r\n\t$b[] = (string)$i;\r\n}\r\n$s1 = array_sum($a);\r\n$s2 = array_sum($b);\r\n__var_dump($s1, $s2);\r\n\r\n$j = 0;\r\nwhile ($j++ < 100000) {\r\n\t$c[] = $j;\r\n\t$d[] = (string) $j;\r\n}\r\n$s3 = array_sum($c);\r\n$s4 = array_sum($d);\r\n__var_dump($s3, $s4);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/array_walk_recursive.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nfunction foo($value) {\r\n\techo $value . \" foo\\n\";\r\n}\r\n\r\nfunction bar($value) {\r\n\techo $value . \" bar\\n\";\r\n}\r\n\r\n$arr = array (1,2,3);\r\n__var_dump (array_walk_recursive ($arr, 'foo'));\r\n__var_dump (array_walk_recursive ($arr, 'bar'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug12776.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction test($val,$key)\r\n{\r\n\tglobal $globalArray;\r\n\t$globalArray[]=$key; // this will end up crashing\r\n\t$globalArray[]=(string)$key; // this will end up OK\r\n\tprint \"val: $val; key: $key\\n\"; flush();\r\n}\r\n\r\n$arr=array('k'=>'v');\r\narray_walk($arr,'test');\r\n\r\nprint \"First value: \".$globalArray[0];\r\n\r\nprint \"\\nDone\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug14580.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$arr = array (\"foo\\0bar\" => \"foo\\0bar\");\r\n\t$key = key($arr);\r\n\techo strlen($key), ': ';\r\n\techo urlencode($key), \"\\n\";\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug20381.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = array(\r\n\t'a1' => 1,\r\n\t'a2' => array( 1, 2, 3 ),\r\n\t'a3' => array(\r\n\t\t'a' => array( 10, 20, 30 ),\r\n\t\t'b' => 'b'\r\n\t\t)\r\n\t);\r\n$b = array( 'a1' => 2,\r\n\t'a2' => array( 3, 4, 5 ),\r\n\t'a3' => array(\r\n\t\t'c' => 'cc',\r\n\t\t'a' => array( 10, 40 )\r\n\t\t)\r\n\t);\r\n\r\nvar_dump($a);\r\n$r = array_merge_recursive( $a, $b );\r\nvar_dump($a,$b,$r);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug20865.php",
    "content": "[expect]\r\nbool(true)\r\n[file]\r\n<?php\r\n\t$ta = array(1, 2, 3);\r\n\t$ta[NULL] = \"Null Value\";\r\n\r\n\tvar_dump(array_key_exists(NULL, $ta));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug21182.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = \"20\"; $b = \"30\";\r\necho \"a1: $a\\n\";\r\n$result = range($a, $b);\r\necho \"a2: $a : type : \" . gettype($a) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug21918.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n\r\necho \"==Mixed==\\n\";\r\n$a = array(-1=>'a', '-2'=>'b', 3=>'c', '4'=>'d', 5=>'e', '6001'=>'f', '07'=>'g');\r\n\r\nforeach($a as $k => $v) {\r\n\t__var_dump($k);\r\n\t__var_dump($v);\r\n}\r\n\r\necho \"==Normal==\\n\";\r\n$b = array();\r\n$b[] = 'a';\r\n\r\nforeach($b as $k => $v) {\r\n\t__var_dump($k);\r\n\t__var_dump($v);\r\n}\r\n\r\necho \"==Negative==\\n\";\r\n$c = array('-2' => 'a');\r\n\r\nforeach($c as $k => $v) {\r\n\t__var_dump($k);\r\n\t__var_dump($v);\r\n}\r\n\r\necho \"==Done==\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug21998.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n$a = array(\"a\", \"b\", \"c\");\r\n\r\n__var_dump(key($a));\r\n__var_dump(array_pop($a));\r\n__var_dump(key($a));      \r\n__var_dump(array_pop($a));\r\n__var_dump(key($a));      \r\n__var_dump(array_pop($a));\r\n__var_dump(key($a));      \r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug22088.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n\r\n$a = array('a', 'b', 'c');\r\n$last = array_shift ($a);\r\n$a[] = 'a';\r\n__var_dump($a);\r\n\r\n$a = array('a' => 1, 'b' => 2, 'c' => 3);\r\n$last = array_shift ($a);\r\n$a[] = 'a';\r\n__var_dump($a);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug22463.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction a($ary) {\r\n\treturn (is_array($ary) ? array_reduce($ary, 'cb', 0) : 1);\r\n}\r\n\r\nfunction cb($v, $elem) {\r\n\treturn $v + a($elem); \r\n}\r\n\r\n$ary = array(\r\n\tarray(\r\n\t\tarray(\r\n\t\t\tarray(\r\n\t\t\t\tarray(\r\n\t\t\t\t\tarray(0, 1, 2, 3, 4)\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t)\r\n\t)\r\n);\r\n\r\necho a($ary);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug23581.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n__var_dump(\r\n  array_map(\r\n    NULL,\r\n    array(1,2,3),\r\n    array(4,5,6),\r\n    array(7,8,9)\r\n  )\r\n);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug23788.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$numeric = 123;\r\n$bool = true;\r\n$foo = array(&$numeric, &$bool);\r\nvar_dump($foo);\r\nstr_replace(\"abc\", \"def\", $foo);\r\nvar_dump($foo);\r\n?>\r\n\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug24198.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$c = array('a' => 'aa','b' => 'bb'); \r\n\r\nvar_dump(array_merge_recursive($c, $c)); \r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug24220.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n\t__var_dump(range(\"2003\", \"2004\"));\r\n\t__var_dump(range(\"a\", \"z\"));\r\n\t__var_dump(range(\"1\", \"10\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug24766.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n\r\nerror_reporting(E_ALL);\r\n\r\n$a = unpack('C2', \"\\0224V\");\r\n$b = array(1 => 18, 2 => 52);\r\n$k = array_keys($a);\r\n$l = array_keys($b);\r\n$i=$k[0];\r\n__var_dump($a[$i]);\r\n$i=$l[0];\r\n__var_dump($b[$i]);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug24897.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$a = array(1 => 2);\r\nshuffle($a);\r\n__var_dump($a);\r\n\r\n$a = array(1 => 2);\r\narray_multisort($a);\r\n__var_dump($a);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug24980.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n/* test #1: numeric data */\r\nfunction add_up($running_total, $current_value)\r\n{\r\n\techo \"running_total is \".(int)$running_total.\", current_value is {$current_value}\\n\";\r\n\t$running_total += $current_value * $current_value;\r\n\treturn $running_total;\r\n}\r\n                        \r\n$numbers = array (2,3,5,7);\r\n$total = array_reduce($numbers, 'add_up');\r\nprint \"Total is $total\\n\";\r\n\r\n/* test #2: string data */\r\n$a = array(\"a\", \"b\", \"c\");\r\nfunction foo ($a, $b)\r\n{\r\n\treturn $a . $b;\r\n}\r\n__var_dump(array_reduce($a, \"foo\"));\r\n                        \r\n/* test #3: basic test (used to leak memory) */\r\nfunction rsum($v, $w)\r\n{\r\n\t$v += $w;\r\n\treturn $v;\r\n}\r\nfunction rmul($v, $w)\r\n{\r\n\t$v *= $w;\r\n\treturn $v;\r\n}\r\n$a = array(1, 2, 3, 4, 5);\r\n$x = array();\r\n$b = array_reduce($a, \"rsum\");\r\n$c = array_reduce($a, \"rmul\", 10);\r\n$d = array_reduce($x, \"rsum\", 1);\r\n\r\n__var_dump($b, $c, $d);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug25359.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n\r\nfunction does_not_work()\r\n{\r\n    global $data; // Remove this line to make array_multisort() work\r\n\r\n    $data = array('first', 'fifth', 'second', 'forth', 'third');\r\n    $sort = array(1, 5, 2, 4, 3);\r\n    array_multisort($sort, $data);\r\n\r\n    __var_dump($data);\r\n}\r\n\r\ndoes_not_work();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug25708.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nfunction foo($ref, $alt) {\r\n\tunset($GLOBALS['a']);\r\n\tunset($GLOBALS['b']);\r\n\t$GLOBALS['a'] = 1;\r\n\t$GLOBALS['b'] = 2;\r\n\r\n\t$org_a = $GLOBALS['a'];\r\n\t$org_b = $GLOBALS['b'];\r\n\r\n\tif ($ref) {\r\n\t\tglobal $a, $b;\r\n\t} else {\r\n\t\t/* zval temp_var(NULL); // refcount = 1\r\n\t\t * a = temp_var[x] // refcount = 2\r\n\t\t */\r\n\t\t$a = NULL;\r\n\t\t$b = NULL;\r\n\t}\r\n\r\n\techo \"--\\n\";\r\n\tif ($alt) {\r\n\t\t$a = &$GLOBALS['a'];\r\n\t\t$b = &$GLOBALS['b'];\r\n\t} else {\r\n\t\textract($GLOBALS, EXTR_REFS);\r\n\t}\r\n\techo \"--\\n\";\r\n\t$a = &$GLOBALS['a'];\r\n\t$b = &$GLOBALS['b'];\r\n\techo \"--\\n\";\r\n\t$GLOBALS['b'] = 3;\r\n\techo \"--\\n\";\r\n\t$a = 4;\r\n\techo \"--\\n\";\r\n\t$c = $b;\r\n\techo \"--\\n\";\r\n\t$b = 'x';\r\n\techo \"--\\n\";\r\n\techo \"----\";\r\n\tif ($ref) echo 'r';\r\n\tif ($alt) echo 'a';\r\n\techo \"\\n\";\r\n}\r\n\r\n$a = 'ok';\r\n$b = 'ok';\r\n$_a = $a;\r\n$_b = $b;\r\n\r\nfoo(false, true);\r\nfoo(true, true);\r\nfoo(false, false);\r\nfoo(true, false);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug25758.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\t$a = array (\"quote'\" => array(\"quote'\"));\r\n\techo __var_dump($a, true);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug26458.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$test = array(\"A\\x00B\" => \"Hello world\");\r\n__var_dump($test);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug28739.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nclass p {\r\n   public $x;\r\n   function __construct($x){$this->x=$x;}\r\n}\r\nfunction a(&$a, &$b){__var_dump(__FUNCTION__);return $a->x - $b->x;}\r\nfunction b(&$a, &$b){__var_dump(__FUNCTION__);return $a->x - $b->x;}\r\n\r\n$p1 = array(new p(2), new p(1), new p(0));\r\n$p2 = array(new p(0), new p(2), new p(3));\r\n\r\nuasort($p1, 'a');\r\n__var_dump($p1);\r\necho \"Now diffing:\\n\";\r\n__var_dump(array_udiff($p1,$p2, 'b'));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug28974.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a = $b = $c = array(0,1,2,3,4,5);\r\nprint_r($a);\r\n// this is ok:\r\nprint_r(array_slice($a,2,2147483645));\r\n\r\n// this is wrong:\r\nprint_r(array_slice($a,2,2147483646));\r\necho 'print_r(array_splice($a,2,1));'.\"\\n\";\r\nprint_r(array_splice($a,2,1));\r\necho \"\\$a is :\";\r\nprint_r($a);\r\necho 'print_r(array_splice($b,2,2147483645));'.\"\\n\";\r\nprint_r(array_splice($b,2,2147483645));\r\necho \"\\$b is :\";\r\nprint_r($b);\r\n\r\n// this is wrong:\r\necho 'print_r(array_splice($c,2,2147483646));'.\"\\n\";\r\nprint_r(array_splice($c,2,2147483646));\r\necho \"\\$c is :\";\r\nprint_r($c);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug29253.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$zz = $GLOBALS;\r\n$gg = 'afad';\r\n__var_dump(array_diff_assoc($GLOBALS, $zz));\r\n__var_dump($gg);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug29493.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nfunction t1()\r\n{\r\n\t$a = array('foo' => 'aaa');\r\n\t// refcount($a) = 1\r\n\t// refcount($a['foo']) = 1\r\n\t$b = $a;\r\n\t// refcount($a) = 2\r\n\t// refcount($a['foo']) = 1\r\n\t$b['foo'] = 'bbb';\r\n\t// refcount($a) = 1\r\n\t// refcount($a['foo']) = 1\r\n\r\n\t__var_dump($a, $b);\r\n\r\n\textract($a, EXTR_REFS);\r\n\r\n\t$foo = 'noo';\r\n\r\n\t__var_dump($a, $b);\r\n}\r\n\r\nfunction t2()\r\n{\r\n\t$a = array('foo' => 'aaa');\r\n\t// refcount($a) = 1\r\n\t// refcount($a['foo']) = 1\r\n\t$b = &$a;\r\n\t// refcount($a) = 2\r\n\t// is_ref($a) = true\r\n\t// refcount($a['foo']) = 1\r\n\t$b['foo'] = 'bbb';\r\n\t// refcount($a) = 2\r\n\t// refcount($a['foo']) = 1\r\n\r\n\t__var_dump($a, $b);\r\n\r\n\textract($a, EXTR_REFS);\r\n\r\n\t$foo = 'noo';\r\n\r\n\t__var_dump($a, $b);\r\n}\r\n\r\nfunction t3()\r\n{\r\n\t$a = array('foo' => 'aaa');\r\n\t// refcount($a) = 1\r\n\t// refcount($a['foo']) = 1\r\n\t$b = &$a;\r\n\t// refcount($a) = 2\r\n\t// is_ref($a) = true\r\n\t// refcount($a['foo']) = 1\r\n\tunset($b);\r\n\t// refcount($a) = 1\r\n\t// is_ref($a) = true\r\n\t// refcount($a['foo']) = 1\r\n\r\n\t__var_dump($a);\r\n\r\n\textract($a, EXTR_REFS);\r\n\r\n\t$foo = 'noo';\r\n\r\n\t__var_dump($a);\r\n}\r\n\r\nt1();\r\nt2();\r\nt3();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug30266.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass testc\r\n{\r\n\tpublic $b = \"c\";\r\n\r\n\tfunction crash($val)\r\n\t{\r\n\t\t$this->b = $val;\r\n\t\tthrow new Exception(\"Error\");\r\n\t}\r\n}\r\n\r\n$fruits = array (\"d\"=>\"lemon\", \"a\"=>\"orange\", \"b\"=>\"banana\", \"c\"=>\"apple\");\r\n\r\n$myobj = new testc();\r\n\r\nfunction test($item2, $key, $userd)\r\n{\r\n\t$userd->crash($item2);\r\n}\r\n\r\ntry\r\n{\r\n\tarray_walk($fruits, 'test', $myobj);\r\n}\r\ncatch(Exception $e)\r\n{\r\n\techo \"Caught: \" . $e->getMessage() . \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug30833.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$foo = array('abc', '0000');\r\n__var_dump($foo);\r\n\r\n$count = array_count_values( $foo );\r\n__var_dump($count);\r\n\r\n__var_dump($foo);\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug31158.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nfunction __(){\r\n  $GLOBALS['a'] = \"bug\\n\";\r\n  array_splice($GLOBALS,0,count($GLOBALS));\r\n  /* All global variables including $GLOBALS are removed */\r\n  @__var_dump($GLOBALS['a']);\r\n}\r\n__();\r\necho \"ok\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug31213.php",
    "content": "[expects]\r\ninteger(1)\r\ninteger(1)\r\ninteger(1)\r\ninteger(2)\r\ninteger(2)\r\ninteger(2)\r\narray\r\n{\r\n  ['_a'] => &integer(2)\r\n  ['_b'] => &integer(2)\r\n}\r\ninteger(1)\r\ninteger(1)\r\ninteger(1)\r\ninteger(2)\r\ninteger(2)\r\ninteger(2)\r\narray\r\n{\r\n  ['_a'] => &integer(2)\r\n  ['_b'] => &integer(2)\r\n}\r\n[file]\r\n<?php\r\nfunction test($use_extract) {\r\n\t$a = 1;\r\n\t$b = 1;\r\n\r\n\t$arr = array(\r\n\t\t'_a' => $a,\r\n\t\t'_b' => &$b\r\n\t);\r\n\r\n\tvar_dump($a, $b);\r\n\r\n\tif ($use_extract) {\r\n\t\textract($arr, EXTR_REFS);\r\n\t} else {\r\n\t\t$_a = &$arr['_a'];\r\n\t\t$_b = &$arr['_b'];\r\n\t}\r\n\r\n\t$_a++;\r\n\t$_b++;\r\n\r\n\tvar_dump($a, $b, $_a, $_b, $arr);\r\n}\r\n\r\ntest(false);\r\ntest(true);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug32021.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$foo = range('', 'z');\r\n__var_dump($foo);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug33382.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$array = array(1,2,3,4,5);\r\n\r\nsort($array);\r\n\r\n__var_dump(array_reverse($array));\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug33940.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nfunction ref_map(&$item) {\r\n    if(!is_array($item)) {\r\n        $item = 1;\r\n        return 2;\r\n    } else {\r\n        $ret = array_map('ref_map', &$item);\r\n        return $ret;\r\n    }\r\n}\r\n\r\n$a = array(array(0), 0);\r\n$ret = array_map('ref_map', $a);\r\necho 'Array: '; __var_dump($a);\r\necho 'Return: '; __var_dump($ret);\r\n$a = array(array(0), 0);\r\n$ret = array_map('ref_map', &$a);\r\necho 'Array: '; __var_dump($a);\r\necho 'Return: '; __var_dump($ret);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug33989.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$a=\"a\";\r\nextract($GLOBALS, EXTR_REFS);\r\necho \"ok\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug34227.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nclass C\r\n{\r\n  function m1()\r\n  {\r\n    $this->m2();\r\n  }\r\n\r\n  function m2()\r\n  {\r\n    $this->m3();\r\n  }\r\n\r\n  function m3()\r\n  {\r\n    $this->m4();\r\n  }\r\n\r\n  function m4()\r\n  {\r\n    $this->m5();\r\n  }\r\n\r\n  function m5()\r\n  {\r\n    $this->m6();\r\n  }\r\n\r\n  function m6()\r\n  {\r\n    $this->m7();\r\n  }\r\n\r\n  function m7()\r\n  {\r\n    $this->m8();\r\n  }\r\n\r\n  function m8()\r\n  {\r\n    $this->m9();\r\n  }\r\n\r\n  function m9()\r\n  {\r\n    $this->m10();\r\n  }\r\n\r\n  function m10()\r\n  {\r\n    $this->m11(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\r\n  }\r\n\r\n  function m11($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10)\r\n  {\r\n    $arr = explode('a', 'b');\r\n  }\r\n}\r\n\r\nfunction f($str)\r\n{\r\n  $obj = new C;\r\n  $obj->m1();\r\n  return TRUE;\r\n}\r\n\r\nfunction p5($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $a10, $a11, $a12)\r\n{\r\n  $ret = array_filter(array(0), 'f');\r\n}\r\n\r\nfunction p4()\r\n{\r\n  p5(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);\r\n}\r\n\r\nfunction p3()\r\n{\r\n  p4();\r\n}\r\n\r\nfunction p2()\r\n{\r\n  p3();\r\n}\r\n\r\nfunction p1()\r\n{\r\n  p2();\r\n}\r\n\r\np1();\r\necho \"ok\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug34982.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n$ar = array(\r\n    'element 1',\r\n    array('subelement1')\r\n    );\r\n\r\nfunc($ar);\r\n__var_dump($ar);\r\n\r\nfunction func($a) {\r\n  array_walk_recursive($a, 'apply');\r\n  __var_dump($a);\r\n}\r\n\r\nfunction apply(&$input, $key) {\r\n  $input = 'changed';\r\n}\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug35014.php",
    "content": "[expect]\r\ninteger(0)\r\ninteger(0)\r\ninteger(3)\r\ninteger(9)\r\ndouble(1.0000000000)\r\nint64(9999999800000001)\r\nint64(8589934590)\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$tests = array(\r\n\tarray(),\r\n\tarray(0),\r\n\tarray(3),\r\n\tarray(3, 3),\r\n\tarray(0.5, 2),\r\n\tarray(99999999, 99999999),\r\n\tarray(2,sprintf(\"%u\", -1)),\r\n);\r\n\r\nforeach ($tests as $v) {\r\n\t__var_dump(array_product($v));\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug35022.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n$state = array(\"one\" => 1, \"two\" => 2, \"three\" => 3);\r\nfunction foo( &$state ) {\r\n    $contentDict = end( $state );\r\n    for ( $contentDict = end( $state ); $contentDict !== false; $contentDict = prev( $state ) ) {\r\n\techo key($state) . \" => \" . current($state) . \"\\n\";\r\n    }\r\n}\r\nfoo($state);\r\nreset($state);\r\n__var_dump( key($state), current($state) );\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/bug35821.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Element\r\n{\r\n\tpublic function ThrowException ()\r\n\t{\r\n\t\tthrow new Exception();\r\n\t}\r\n\r\n\tpublic static function CallBack(Element $elem)\r\n\t{\r\n\t\t$elem->ThrowException();\r\n\t}\r\n}\r\n\r\n$arr = array(new Element(), new Element(), new Element());\r\n\r\ntry\r\n{\r\n  @array_map(array('Element', 'CallBack'), $arr);\r\n}\r\ncatch (Exception $e)\r\n{\r\n}  \r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/count_recursive.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nprint \"Testing NULL...\\n\";\r\n$arr = NULL;\r\nprint \"COUNT_NORMAL: should be 0, is \".count($arr, COUNT_NORMAL).\"\\n\";\r\nprint \"COUNT_RECURSIVE: should be 0, is \".count($arr, COUNT_RECURSIVE).\"\\n\";\r\n\r\nprint \"Testing arrays...\\n\";\r\n$arr = array(1, array(3, 4, array(6, array(8))));\r\nprint \"COUNT_NORMAL: should be 2, is \".count($arr, COUNT_NORMAL).\"\\n\";\r\nprint \"COUNT_RECURSIVE: should be 8, is \".count($arr, COUNT_RECURSIVE).\"\\n\";\r\n\r\nprint \"Testing hashes...\\n\";\r\n$arr = array(\"a\" => 1, \"b\" => 2, array(\"c\" => 3, array(\"d\" => 5)));\r\nprint \"COUNT_NORMAL: should be 3, is \".count($arr, COUNT_NORMAL).\"\\n\";\r\nprint \"COUNT_RECURSIVE: should be 6, is \".count($arr, COUNT_RECURSIVE).\"\\n\";\r\n\r\nprint \"Testing strings...\\n\";\r\nprint \"COUNT_NORMAL: should be 1, is \".count(\"string\", COUNT_NORMAL).\"\\n\";\r\nprint \"COUNT_RECURSIVE: should be 1, is \".count(\"string\", COUNT_RECURSIVE).\"\\n\";\r\n\r\nprint \"Testing various types with no second argument.\\n\";\r\nprint \"COUNT_NORMAL: should be 1, is \".count(\"string\").\"\\n\";\r\nprint \"COUNT_NORMAL: should be 2, is \".count(array(\"a\", array(\"b\"))).\"\\n\";\r\n\r\n$arr = array('a'=>array(NULL, NULL, NULL), 1=>array(NULL=>1, 1=>NULL),\r\n\tarray(array(array(array(array(NULL))))));\r\nprint \"Testing really cool arrays ;)\\n\";\r\nprint \"COUNT_NORMAL: should be 3, is \".count($arr, COUNT_NORMAL).\"\\n\";\r\nprint \"COUNT_RECURSIVE: should be 13, is \".count($arr, COUNT_RECURSIVE).\"\\n\";\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/data.inc",
    "content": "<?php\r\n$tmp = pow(2,24);\r\n$data = array( \r\n\t'PHP',\r\n\t17=>'PHP: Hypertext Preprocessor',\r\n\t5=>'Test',\r\n\t'test'=>27,\r\n\t1000=>'test',\r\n\t\"-1000\"=>array('banana', 'orange'),\r\n\t'monkey',\r\n\t$tmp=>-1/3\r\n);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/locale_sort.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nif (\"fr_FR\" != setlocale(LC_CTYPE, \"fr_FR\")) {\r\n  die(\"skip setlocale() failed\\n\");\r\n}\r\nsetlocale(LC_ALL, 'fr_FR');\r\n$table = array(\"AB\" => \"Alberta\",\r\n\"BC\" => \"Colombie-Britannique\",\r\n\"MB\" => \"Manitoba\",\r\n\"NB\" => \"Nouveau-Brunswick\",\r\n\"NL\" => \"Terre-Neuve-et-Labrador\",\r\n\"NS\" => \"Nouvelle-cosse\",\r\n\"ON\" => \"Ontario\",\r\n\"PE\" => \"le-du-Prince-douard\",\r\n\"QC\" => \"Qubec\",\r\n\"SK\" => \"Saskatchewan\",\r\n\"NT\" => \"Territoires du Nord-Ouest\",\r\n\"NU\" => \"Nunavut\",\r\n\"YT\" => \"Territoire du Yukon\");\r\nasort($table, SORT_LOCALE_STRING);\r\n__var_dump($table);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/array/range.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n__var_dump(range(1, 100));\r\n__var_dump(range(100, 1));\r\n\r\n__var_dump(range(\"1\", \"100\"));\r\n__var_dump(range(\"100\", \"1\"));\r\n\r\n__var_dump(range(\"a\", \"z\"));\r\n__var_dump(range(\"z\", \"a\"));\r\n__var_dump(range(\"q\", \"q\"));\r\n\r\n__var_dump(range(5, 5));\r\n\r\n__var_dump(range(5.1, 10.1));\r\n__var_dump(range(10.1, 5.1));\r\n\r\n__var_dump(range(\"5.1\", \"10.1\"));\r\n__var_dump(range(\"10.1\", \"5.1\"));\r\n\r\n__var_dump(range(1, 5, 0.1));\r\n__var_dump(range(5, 1, 0.1));\r\n\r\n__var_dump(range(1, 5, \"0.1\"));\r\n__var_dump(range(\"1\", \"5\", 0.1));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/assert/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/assert/assert.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction a($file,$line,$myev)\r\n{ \r\n\techo \"assertion failed $line,\\\"$myev\\\"\\n\";\r\n}\r\n\r\nclass a\r\n{\r\n\tfunction _assert($file,$line,$myev)\r\n\t{\r\n\t\techo \"class assertion failed $line,\\\"$myev\\\"\\n\";\r\n\t}\r\n}\r\n\r\nerror_reporting(E_ALL);\r\nassert_options(ASSERT_ACTIVE,1);\r\nassert_options(ASSERT_QUIET_EVAL,1);\r\nassert_options(ASSERT_WARNING,0);\r\n\r\n$a = 0;\r\n\r\nassert_options(ASSERT_CALLBACK,\"a\");\r\nassert('$a != 0');\r\n\r\nassert_options(ASSERT_CALLBACK,array(\"a\",\"_assert\"));\r\nassert('$a != 0');\r\n\r\n$obj = new a();\r\nassert_options(ASSERT_CALLBACK,array(&$obj,\"_assert\"));\r\nassert('$a != 0');\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\n$agent = sprintf(\"%.5s\", \"James Bond, 007\");\r\n\r\necho(\"sprintf string truncate test:   \");\r\nif ($agent == \"James\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho(\"sprintf padding and align test: \");\r\n$test = sprintf(\"abc%04d %-20s%c\", 20, \"fisketur\", 33);\r\nif ($test == \"abc0020 fisketur            !\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho(\"sprintf octal and hex test:     \");\r\n$test = sprintf(\"%4o %4x %4X %0\".\"8x\", 128, 1024, 49151, 3457925);\r\nif ($test == \" 200  400 BFFF 0034c385\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho(\"sprintf octal binary test:      \");\r\n$test = sprintf(\"%b\", 3457925);\r\nif ($test == \"1101001100001110000101\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho(\"sprintf float test:             \");\r\n$test = sprintf(\"%0\".\"06.2f\", 10000/3.0);\r\nif ($test == \"003333.33\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho sprintf(\"%.2f\\n\", \"99.00\");\r\necho sprintf(\"%.2f\\n\", 99.00);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n  echo bin2hex(quoted_printable_decode(\"=FAwow-factor=C1=d0=D5=DD=C5=CE=CE=D9=C5=0A=\\r\\n=20=D4=cf=D2=C7=CF=D7=D9=C5=\\r\\n=20=\\r\\n=D0=\\r\\n=D2=CF=C5=CB=D4=D9\")); \r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nfunction test_me($title,$expect,$text1,$text2,$cost1=0,$cost2=0,$cost3=0) {\r\n\r\n  if($cost1==0) \r\n\t  $result=levenshtein($text1,$text2);\r\n\telse\r\n    $result=levenshtein($text1,$text2,$cost1,$cost2,$cost3);\r\n\r\n\tif($result==$expect) return 0;\r\n\r\n\techo \"$title: result is $result instead of $expect \";\r\n\techo \"for '$text1'/'$text2' \";\r\n\tif($cost1) echo \"($cost1:$cost2:$cost3)\";\r\n\techo \"\\n\";\r\n\t\r\n\treturn 1;\t\t\r\n}\r\n\r\n$n=0;\r\n\r\n$n += test_me(\"equal\"      , 0, \"12345\", \"12345\");\r\n$n += test_me(\"1st empty\"  , 3,      \"\",   \"xzy\");\r\n$n += test_me(\"2nd empty\"  , 3,   \"xzy\",      \"\");\r\n$n += test_me(\"both empty\" , 0,      \"\",      \"\");\r\n$n += test_me(\"1 char\"     , 1,     \"1\",     \"2\");\r\n$n += test_me(\"2 char swap\", 2,    \"12\",    \"21\");\r\n\r\n$n += test_me(\"inexpensive delete\",  2, \"2121\",   \"11\", 2, 1, 1);\r\n$n += test_me(\"expensive delete\"  , 10, \"2121\",   \"11\", 2, 1, 5);\r\n$n += test_me(\"inexpensive insert\",  2,   \"11\", \"2121\", 1, 1, 1);\r\n$n += test_me(\"expensive insert\"  , 10,   \"11\", \"2121\", 5, 1, 1);\r\n\r\n$n += test_me(\"expensive replace\"     , 3, \"111\", \"121\", 2, 3, 2);\r\n$n += test_me(\"very expensive replace\", 4, \"111\", \"121\", 2, 9, 2);\r\n\r\n$n += test_me(\"bug #7368\", 2,     \"13458\",    \"12345\");\r\n$n += test_me(\"bug #7368\", 2,      \"1345\",     \"1234\");\r\n\r\n$n += test_me(\"bug #6562\", 1,    \"debugg\",    \"debug\");\r\n$n += test_me(\"bug #6562\", 1,    \"ddebug\",    \"debug\");\r\n$n += test_me(\"bug #6562\", 2,   \"debbbug\",    \"debug\");\r\n$n += test_me(\"bug #6562\", 1, \"debugging\", \"debuging\");\r\n\r\n$n += test_me(\"bug #16473\", 2, \"a\", \"bc\");\r\n$n += test_me(\"bug #16473\", 2, \"xa\", \"xbc\");\r\n$n += test_me(\"bug #16473\", 2, \"xax\", \"xbcx\");\r\n$n += test_me(\"bug #16473\", 2, \"ax\", \"bcx\");\r\n\r\n\r\necho ($n==0)?\"all passed\\n\":\"$n failed\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/004.data",
    "content": "name\tvalue\tcomment\r\ntrue\t1\tboolean true\r\nfalse\t0\tboolean false\r\nempty\t\tnothing\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nchdir(dirname(__FILE__));\r\n$fp=fopen(\"004.data\",\"r\");\r\nwhile($a=fgetcsv($fp,100,\"\\t\")) {\r\n\techo join(\",\",$a).\"\\n\";\r\n}\r\nfclose($fp);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass foo {}\r\nvar_dump (is_scalar (TRUE));\r\nvar_dump (is_scalar (1));\r\nvar_dump (is_scalar (1.0));\r\nvar_dump (is_scalar (\"Hi!\"));\r\nvar_dump (is_scalar (NULL));\r\nvar_dump (is_scalar (array ()));\r\nvar_dump (is_scalar (new foo()));\r\nvar_dump (is_scalar (opendir('.')));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php  \r\necho bin2hex(quoted_printable_decode(\"=FAwow-factor=C1=d0=D5=DD=C5=CE=CE=D9=C5=0A=\\n=20=D4=cf=D2=C7=CF=D7=D9=C5=\\n=20=\\n=D0=\\n=D2=CF=C5=CB=D4=D9\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test($str) {\r\n\t$res = md5(base64_decode(base64_encode($str))).\"\\n\";\r\n\treturn $res;\r\n} \r\necho test(\"\");\r\necho test(\"a\");\r\necho test(\"abc\");\r\necho test(\"message digest\");\r\necho test(\"abcdefghijklmnopqrstuvwxyz\");\r\necho test(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\r\necho test(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/008.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n// this checks f,g,G conversion for snprintf/spprintf\r\n__var_dump(array(ini_get('precision'),.012,-.012,.12,-.12,1.2,-1.2,12.,-12.,0.000123,.0000123,123456789012.0,1234567890123.0,12345678901234567890.0));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/009.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test($str) {\r\n\t$res = sha1($str).\"\\n\";\r\n\treturn $res;\r\n} \r\necho test(\"\");\r\necho test(\"a\");\r\necho test(\"abc\");\r\necho test(\"message digest\");\r\necho test(\"abcdefghijklmnopqrstuvwxyz\");\r\necho test(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\r\necho test(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug25038.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction bar($x='no argument')\r\n{\r\n    throw new Exception(\"This is an exception from bar({$x}).\");\r\n}\r\ntry\r\n{\r\n\tbar('first try');\r\n}\r\ncatch (Exception $e)\r\n{\r\n\tprint $e->getMessage().\"\\n\";\r\n}\r\ntry\r\n{\r\n\tcall_user_func('bar','second try');\r\n}\r\ncatch (Exception $e)\r\n{\r\n\tprint $e->getMessage().\"\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug27678.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nnumber_format(1e80, 0, '', ' ');\r\nnumber_format(1e300, 0, '', ' ');\r\nnumber_format(1e320, 0, '', ' ');\r\nnumber_format(1e1000, 0, '', ' ');\r\n\r\necho \"Done\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug29038.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nfunction f1() {\r\n  $c = extract(array(\"\" => 1),EXTR_PREFIX_SAME,\"prefix\");\r\n  echo \"Extracted:\";\r\n  __var_dump($c);\r\n  __var_dump(get_defined_vars());\r\n}\r\nfunction f2() {\r\n  $a = 1;\r\n  $c = extract(array(\"a\" => 1),EXTR_PREFIX_SAME,\"prefix\");\r\n  echo \"Extracted:\";\r\n  __var_dump($c);\r\n  __var_dump(get_defined_vars());\r\n}\r\nfunction f3() {\r\n  $a = 1;\r\n  $c = extract(array(\"a\" => 1),EXTR_PREFIX_ALL,\"prefix\");\r\n  echo \"Extracted:\";\r\n  __var_dump($c);\r\n  __var_dump(get_defined_vars());\r\n}\r\nfunction f4() {\r\n  $c = extract(array(\"\" => 1),EXTR_PREFIX_ALL,\"prefix\");\r\n  echo \"Extracted:\";\r\n  __var_dump($c);\r\n  __var_dump(get_defined_vars());\r\n}\r\nfunction f5() {\r\n  $c = extract(array(\"111\" => 1),EXTR_PREFIX_ALL,\"prefix\");\r\n  echo \"Extracted:\";\r\n  __var_dump($c);\r\n  __var_dump(get_defined_vars());\r\n}\r\n\r\nf1();\r\nf2();\r\nf3();\r\nf4();\r\nf5();\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug31190.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass test {\r\n     function throwException() { throw new Exception(\"Hello World!\\n\"); \r\n} }\r\n\r\n$array = array(new test(), 'throwException');\r\ntry {\r\n     call_user_func($array, 1, 2);\r\n} catch (Exception $e) {\r\n     echo $e->getMessage();\r\n}\r\n\r\ntry {\r\n     call_user_func_array($array, array(1, 2));\r\n} catch (Exception $e) {\r\n     echo $e->getMessage();\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug32647.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction foo()\r\n{\r\n  echo \"foo!\\n\";\r\n}\r\n\r\nclass bar\r\n{\r\n\tfunction barfoo ()\r\n\t{ echo \"bar!\\n\"; }\r\n}\r\n\r\nerror_reporting(0);\r\n\r\nunset($obj);\r\nregister_shutdown_function(array($obj,\"\"));            // Invalid\r\nregister_shutdown_function(array($obj,\"some string\")); // Invalid\r\nregister_shutdown_function(array(0,\"\"));               // Invalid\r\n//register_shutdown_function(array('bar','foo'));        // Invalid\r\nregister_shutdown_function(array(0,\"some string\"));    // Invalid\r\n//register_shutdown_function('bar');                     // Invalid\r\nregister_shutdown_function('foo');                     // Valid\r\nregister_shutdown_function(array('bar','barfoo'));     // Valid\r\n\r\n$obj = new bar;\r\n\r\n//register_shutdown_function(array($obj,'foobar'));      // Invalid\r\nregister_shutdown_function(array($obj,'barfoo'));      // Valid\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/bug35229.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass test2 {\r\n  static function use_stack() {\r\n    echo \"OK\\n\";\r\n  }\r\n}\r\n\r\nfunction __autoload($class)\r\n{\r\n\teval('class test1 extends test2 {}');\r\n\r\n\ttest1::use_stack(\r\n    1,2,3,4,5,6,7,8,9,10,\r\n    11,12,13,14,15,16,17,18,19,20,\r\n    21,22,23,24,25,26,27,28,29,30\r\n  );\r\n}\r\n\r\ncall_user_func(array('test1', 'use_stack'),\r\n  1,2,3,4,5,6,7,8,9,10,\r\n  11,12,13,14,15,16,17,18,19,20,\r\n  21,22,23,24,25,26,27,28,29,30\r\n);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/getopt.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n__var_dump(getopt(\"d:m:j:vht\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/highlight_heredoc.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$str = '\r\n$x=<<<DD\r\njhdsjkfhjdsh\r\nDD\r\n.\"\";\r\n$a=<<<DDDD\r\njhdsjkfhjdsh\r\nDDDD;\r\n';\r\nhighlight_string($str);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/is_resource.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\t$f = fopen(__FILE__, 'r');\r\n\tfclose($f);\r\n\t__var_dump(is_resource($f));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/proc_open.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n\r\n$ds = array(\r\n\t\t0 => array(\"pipe\", \"r\"),\r\n\t\t1 => array(\"pipe\", \"w\"),\r\n\t\t2 => array(\"pipe\", \"w\")\r\n\t\t);\r\n\r\n$cat = proc_open(\r\n\t\t\"/bin/cat\",\r\n\t\t$ds,\r\n\t\t$pipes\r\n\t\t);\r\n\r\nproc_close($cat);\r\n\r\necho \"I didn't segfault!\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/general_functions/sunfuncts.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nputenv (\"TZ=Asia/Jerusalem\");\r\n\r\nfor($a=1;$a<=12;$a++){\r\n\t__var_dump( date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2));\r\n\t__var_dump( date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2));\r\n\t__var_dump( date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2));\r\n\t\r\n\t__var_dump( date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2));\r\n\t__var_dump( date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2));\r\n\t__var_dump( date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2));\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/abs.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\ndefine('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);\r\ndefine('LONG_MIN', -LONG_MAX - 1);\r\nprintf(\"%d,%d,%d,%d\\n\",is_int(LONG_MIN  ),is_int(LONG_MAX  ),\r\n\t\t\t\t\t   is_int(LONG_MIN-1),is_int(LONG_MAX+1));\r\n\r\n$tests = <<<TESTS\r\n 1   === abs(-1)\r\n 1.5 === abs(-1.5)\r\n 1   === abs(\"-1\")\r\n 1.5 === abs(\"-1.5\")\r\n-LONG_MIN+1 === abs(LONG_MIN-1)\r\n-LONG_MIN   === abs(LONG_MIN)\r\n-(LONG_MIN+1) === abs(LONG_MIN+1)\r\nTESTS;\r\n\r\ninclude('quicktester.inc');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug21523.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho number_format(-2000, 2768);\r\necho \"OK\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug24142.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$v = 0.005;\r\nfor ($i = 1; $i < 10; $i++) {\r\n\techo \"round({$v}, 2) -> \".round($v, 2).\"\\n\";\r\n\t$v += 0.01;\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug25665.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\nvar_dump(acos(1.01));\r\nvar_dump(log(0));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug25694.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho \"round 0.045 = \" . round(0.045, 2) . \"\\n\";\r\necho \"number format 0.045 = \" . number_format(0.045, 2) . \"\\n\\n\";\r\necho \"round 0.055 = \" . round(0.055, 2) . \"\\n\";\r\necho \"number format 0.055 = \" . number_format(0.055, 2) . \"\\n\\n\";\r\necho \"round 5.045 = \" . round(5.045, 2) . \"\\n\";\r\necho \"number format 5.045 = \" . number_format(5.045, 2) . \"\\n\\n\";\r\necho \"round 5.055 = \" . round(5.055, 2) . \"\\n\";\r\necho \"number format 5.055 = \" . number_format(5.055, 2) . \"\\n\\n\";\r\necho \"round 3.025 = \" . round(3.025, 2) . \"\\n\";\r\necho \"number format 3.025 = \" . number_format(3.025, 2) . \"\\n\\n\";\r\necho \"round 4.025 = \" . round(4.025, 2) . \"\\n\";\r\necho \"number format 4.025 = \" . number_format(4.025, 2) . \"\\n\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug27646.php",
    "content": "\r\n[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\n$f=-INF;\r\n__var_dump($f);\r\n__var_dump(serialize($f));\r\n__var_dump(unserialize(serialize($f)));\r\n\r\n$f=INF;\r\n__var_dump($f);\r\n__var_dump(serialize($f));\r\n__var_dump(unserialize(serialize($f)));\r\n\r\n$f=NAN;\r\n__var_dump($f);\r\n__var_dump(serialize($f));\r\n__var_dump(unserialize(serialize($f)));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug28228.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho number_format(1234.5678, 4, '', '') . \"\\n\";\r\necho number_format(1234.5678, 4, NULL, ',') . \"\\n\";\r\necho number_format(1234.5678, 4, 0, ',') . \"\\n\";\r\necho number_format(1234.5678, 4);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug30069.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho \".1\" * \"2\";\r\necho \"\\n\";\r\necho \"-.1\" * \"2\";\r\necho \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/bug30695.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\tfunction toUTF8( $char_code )\r\n    {\r\n        switch ( $char_code )\r\n        {\r\n            case 0:\r\n                $char = chr( 0 );\r\n            case !($char_code & 0xffffff80): // 7 bit\r\n                $char = chr( $char_code );\r\n                break;\r\n            case !($char_code & 0xfffff800): // 11 bit\r\n                $char = ( chr(0xc0 | (($char_code >> 6) & 0x1f)) .\r\n                          chr(0x80 | ($char_code & 0x3f)) );\r\n                break;\r\n            case !($char_code & 0xffff0000): // 16 bit\r\n                $char = ( chr(0xe0 | (($char_code >> 12) & 0x0f)) .\r\n                          chr(0x80 | (($char_code >> 6) & 0x3f)) .\r\n                          chr(0x80 | ($char_code & 0x3f)) );\r\n                break;\r\n            case !($char_code & 0xffe00000): // 21 bit\r\n                $char = ( chr(0xf0 | (($char_code >> 18) & 0x07)) .\r\n                          chr(0x80 | (($char_code >> 12) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 6) & 0x3f)) .\r\n                          chr(0x80 | ($char_code & 0x3f)) );\r\n                break;\r\n            case !($char_code & 0xfc000000): // 26 bit\r\n                $char = ( chr(0xf8 | (($char_code >> 24) & 0x03)) .\r\n                          chr(0x80 | (($char_code >> 18) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 12) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 6) & 0x3f)) .\r\n                          chr(0x80 | ($char_code & 0x3f)) );\r\n            default: // 31 bit\r\n                $char = ( chr(0xfc | (($char_code >> 30) & 0x01)) .\r\n                          chr(0x80 | (($char_code >> 24) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 18) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 12) & 0x3f)) .\r\n                          chr(0x80 | (($char_code >> 6) & 0x3f)) .\r\n                          chr(0x80 | ($char_code & 0x3f)) );\r\n        }\r\n        return $char;\r\n    }\r\n\r\n\r\n\techo bin2hex(toUTF8(65)),\"\\n\";\r\n\techo bin2hex(toUTF8(233)),\"\\n\";\r\n\techo bin2hex(toUTF8(1252)), \"\\n\";\r\n\techo bin2hex(toUTF8(20095)), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/floorceil.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n    $a = ceil (-0);   $b = ceil (-1);\t$c = ceil (-1.5); \r\n    $d = ceil (-1.8); $e = ceil (-2.7);\r\n    __var_dump ($a, $b, $c, $d, $e);\r\n    \r\n    $a = ceil (0);   $b = ceil (0.5); $c = ceil (1);\r\n    $d = ceil (1.5); $e = ceil (1.8); $f = ceil (2.7);\r\n    __var_dump ($a, $b, $c, $d, $e, $f);\r\n    \r\n    $a = floor (-0);   $b = floor (-0.5); $c = floor (-1);\r\n    $d = floor (-1.5); $e = floor (-1.8); $f = floor (-2.7);\r\n    __var_dump ($a, $b, $c, $d, $e, $f);\r\n    \r\n    $a = floor (0);   $b = floor (0.5); $c = floor (1);\r\n    $d = floor (1.5); $e = floor (1.8); $f = floor (2.7);\r\n    __var_dump ($a, $b, $c, $d, $e, $f);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/hexdec.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho(hexdec(\"012345\")), \"\\n\";\r\necho(hexdec(\"12345\")), \"\\n\";\r\necho(hexdec(\"q12345\")), \"\\n\";\r\necho(hexdec(\"12345+?!\")), \"\\n\";\r\necho(hexdec(\"12345q\")), \"\\n\";\r\necho((float)hexdec(\"1234500001\")), \"\\n\";\r\necho((float)hexdec(\"17fffffff\")), \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/log.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfor ($x = 0, $count= 0; $x < 200; $x++) {\r\n    $x2 = (int) exp(log($x));\r\n    // e ^ log(x) should be close in range to x\r\n    if (($x2 < ($x + 2)) && ($x2 > ($x - 2))) { \r\n        $count++; \r\n    } else {\r\n        print \"$x : $x2\\n\";\r\n    }\r\n}\r\nprint $count . \"\\n\";\r\n\r\n// Now test the base form of log\r\nfor ($base = 2; $base < 11; $base++) {\r\n    for ($x = 0, $count= 0; $x < 50; $x++) {\r\n        $x2 = (int) pow($base, log($x, $base));\r\n        // base ^ log(x) should be close in range to x\r\n        if (($x2 < ($x + 2)) && ($x2 > ($x - 2))) { \r\n            $count++; \r\n        } else {\r\n             print \"base $base: $x : $x2\\n\";\r\n        }\r\n    }\r\n    print $count . \"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/pow.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\ndefine('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);\r\ndefine('LONG_MIN', -LONG_MAX - 1);\r\nprintf(\"%d,%d,%d,%d\\n\",is_int(LONG_MIN  ),is_int(LONG_MAX  ),\r\n\t\t\t\t\t   is_int(LONG_MIN-1),is_int(LONG_MAX+1));\r\n\r\n$tests = <<<TESTS\r\n 0.25 === pow(-2,-2)\r\n-0.5  === pow(-2,-1)\r\n 1    === pow(-2, 0)\r\n-2    === pow(-2, 1)\r\n 4    === pow(-2, 2)\r\n 1.0  === pow(-1,-2)\r\n-1.0  === pow(-1,-1)\r\n 1    === pow(-1, 0)\r\n-1    === pow(-1, 1)\r\n 1    === pow(-1, 2)\r\n TRUE === is_infinite(pow(0,-2))\r\n TRUE === is_infinite(pow(0,-1))\r\n 1    === pow( 0, 0)\r\n 0    === pow( 0, 1)\r\n 0    === pow( 0, 2)\r\n 1.0  === pow( 1,-2)\r\n 1.0  === pow( 1,-1)\r\n 1    === pow( 1, 0)\r\n 1    === pow( 1, 1)\r\n 1    === pow( 1, 2)\r\n 0.25 === pow( 2,-2)\r\n 0.5  === pow( 2,-1)\r\n 1    === pow( 2, 0)\r\n 2    === pow( 2, 1)\r\n 4    === pow( 2, 2)\r\n 0.25 === pow(-2,-2.0)\r\n-0.5  === pow(-2,-1.0)\r\n 1.0  === pow(-2, 0.0)\r\n-2.0  === pow(-2, 1.0)\r\n 4.0  === pow(-2, 2.0)\r\n 1.0  === pow(-1,-2.0)\r\n-1.0  === pow(-1,-1.0)\r\n 1.0  === pow(-1, 0.0)\r\n-1.0  === pow(-1, 1.0)\r\n 1.0  === pow(-1, 2.0)\r\n TRUE === is_infinite(pow(0,-2.0))\r\n TRUE === is_infinite(pow(0,-1.0))\r\n 1.0  === pow( 0, 0.0)\r\n 0.0  === pow( 0, 1.0)\r\n 0.0  === pow( 0, 2.0)\r\n 1.0  === pow( 1,-2.0)\r\n 1.0  === pow( 1,-1.0)\r\n 1.0  === pow( 1, 0.0)\r\n 1.0  === pow( 1, 1.0)\r\n 1.0  === pow( 1, 2.0)\r\n 0.25 === pow( 2,-2.0)\r\n 0.5  === pow( 2,-1.0)\r\n 1.0  === pow( 2, 0.0)\r\n 2.0  === pow( 2, 1.0)\r\n 4.0  === pow( 2, 2.0)\r\n 2147483648 === pow(2,31)\r\n-2147483648 ~== pow(-2,31)\r\n 1000000000 === pow(10,9)\r\n 100000000  === pow(-10,8)\r\n 1    === pow(-1,1443279822)\r\n-1    === pow(-1,1443279821)\r\nsqrt(2) ~== pow(2,1/2)\r\n 0.25 === pow(-2.0,-2.0)\r\n-0.5  === pow(-2.0,-1.0)\r\n 1.0  === pow(-2.0, 0.0)\r\n-2.0  === pow(-2.0, 1.0)\r\n 4.0  === pow(-2.0, 2.0)\r\n 1.0  === pow(-1.0,-2.0)\r\n-1.0  === pow(-1.0,-1.0)\r\n 1.0  === pow(-1.0, 0.0)\r\n-1.0  === pow(-1.0, 1.0)\r\n 1.0  === pow(-1.0, 2.0)\r\n TRUE === is_infinite(pow(0.0,-2.0))\r\n TRUE === is_infinite(pow(0.0,-1.0))\r\n 1.0  === pow( 0.0, 0.0)\r\n 0.0  === pow( 0.0, 1.0)\r\n 0.0  === pow( 0.0, 2.0)\r\n 1.0  === pow( 1.0,-2.0)\r\n 1.0  === pow( 1.0,-1.0)\r\n 1.0  === pow( 1.0, 0.0)\r\n 1.0  === pow( 1.0, 1.0)\r\n 1.0  === pow( 1.0, 2.0)\r\n 0.25 === pow( 2.0,-2.0)\r\n 0.5  === pow( 2.0,-1.0)\r\n 1.0  === pow( 2.0, 0.0)\r\n 2.0  === pow( 2.0, 1.0)\r\n 4.0  === pow( 2.0, 2.0)\r\n 0.25 === pow(-2.0,-2)\r\n-0.5  === pow(-2.0,-1)\r\n 1.0  === pow(-2.0, 0)\r\n-2.0  === pow(-2.0, 1)\r\n 4.0  === pow(-2.0, 2)\r\n 1.0  === pow(-1.0,-2)\r\n-1.0  === pow(-1.0,-1)\r\n 1.0  === pow(-1.0, 0)\r\n-1.0  === pow(-1.0, 1)\r\n 1.0  === pow(-1.0, 2)\r\n TRUE === is_infinite(pow( 0.0,-2))\r\n TRUE === is_infinite(pow( 0.0,-1))\r\n 1.0  === pow( 0.0, 0)\r\n 0.0  === pow( 0.0, 1)\r\n 0.0  === pow( 0.0, 2)\r\n 1.0  === pow( 1.0,-2)\r\n 1.0  === pow( 1.0,-1)\r\n 1.0  === pow( 1.0, 0)\r\n 1.0  === pow( 1.0, 1)\r\n 1.0  === pow( 1.0, 2)\r\n 0.25 === pow( 2.0,-2)\r\n 0.5  === pow( 2.0,-1)\r\n 1.0  === pow( 2.0, 0)\r\n 2.0  === pow( 2.0, 1)\r\n 4.0  === pow( 2.0, 2)\r\n 2.0  === pow(   4, 0.5)\r\n 2.0  === pow( 4.0, 0.5)\r\n 3.0  === pow(  27, 1/3)\r\n 3.0  === pow(27.0, 1/3)\r\n 0.5  === pow(   4, -0.5)\r\n 0.5  === pow( 4.0, -0.5)\r\nLONG_MAX-1 === pow(LONG_MAX-1,1)\r\nLONG_MIN+1 === pow(LONG_MIN+1,1)\r\n(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2)\r\n(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2)\r\n(float)(LONG_MAX-1) === pow(LONG_MAX-1,1.0)\r\n(float)(LONG_MIN+1) === pow(LONG_MIN+1,1.0)\r\n(LONG_MAX-1)*(LONG_MAX-1) ~== pow(LONG_MAX-1,2.0)\r\n(LONG_MIN+1)*(LONG_MIN+1) ~== pow(LONG_MIN+1,2.0)\r\nLONG_MAX === pow(LONG_MAX,1)\r\nLONG_MIN === pow(LONG_MIN,1)\r\nLONG_MAX*LONG_MAX ~== pow(LONG_MAX,2)\r\nLONG_MIN*LONG_MIN ~== pow(LONG_MIN,2)\r\n(float)LONG_MAX === pow(LONG_MAX,1.0)\r\n(float)LONG_MIN === pow(LONG_MIN,1.0)\r\nLONG_MAX*LONG_MAX ~== pow(LONG_MAX,2.0)\r\nLONG_MIN*LONG_MIN ~== pow(LONG_MIN,2.0)\r\nTESTS;\r\n\r\n include('quicktester.inc');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/quicktester.inc",
    "content": "<?php\r\n /*\r\n  Helper for simple tests to check return-value. Usage:\r\n\r\n  $tests = <<<TESTS\r\n   expected_return_value === expression\r\n   2                     === 1+1\r\n   4                     === 2*2\r\n   FALSE                 === @ fopen('non_existent_file')\r\nTESTS;\r\n  include( 'tests/quicktester.inc' );\r\n\r\n  Expect: OK\r\n\r\n  Remember to NOT put a trailing ; after a line!\r\n\r\n */\r\ninclude('Phalanger.inc');\r\nerror_reporting(E_ALL);  \r\n$tests = explode(\"\\n\",$tests);\r\n$success = TRUE;\r\nforeach ($tests as $n=>$test)\r\n{\r\n\t// ignore empty lines\r\n\tif (!$test) continue;\r\n\r\n\t// warn for trailing ;\r\n\tif (substr(trim($test), -1, 1) === ';') {\r\n\t\techo \"WARNING: trailing ';' found in test \".($n+1).\"\\n\";\r\n\t\texit;\r\n\t}\r\n\r\n\t// try for operators\r\n\t$operators = array('===', '~==');\r\n\t$operator = NULL;\r\n\tforeach ($operators as $a_operator) {\r\n\t\tif (strpos($test, $a_operator)!== FALSE) {\r\n\t\t\t$operator = $a_operator;\r\n\t\t\tlist($left,$right) = explode($operator, $test);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tif (!$operator) {\r\n\t\techo \"WARNING: unknown operator in '$test' (1)\\n\";\r\n\t\texit;\r\n\t}\r\n\r\n\t$left  = eval(\"return ($left );\");\r\n\t$right = eval(\"return ($right);\");\r\n\tswitch (@$operator) {\r\n\t\tcase '===': // exact match\r\n\t\t\t$result = $left === $right;\r\n\t\t\tbreak;\r\n\t\tcase '~==': // may differ after 12th significant number\r\n\t\t\tif (   !is_float($left ) && !is_long($left ) && !is_int($left )\t// test long and int, because it is not the same type in Phalanger \r\n\t\t\t\t|| !is_float($right) && !is_long($right) && !is_int($right)) {\r\n\t\t\t\t$result = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t$result = abs(($left-$right) / $left) < 1e-12;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\techo \"WARNING: unknown operator in '$test' (2)\\n\";\r\n\t\t\texit;\r\n\t}\r\n\r\n\t$success = $success && $result;\r\n\tif (!$result) {\r\n\t\techo \"\\nAssert failed:\\n\";\r\n\t\techo \"$test\\n\";\r\n\t\techo \"Left:  \";__var_dump($left );\r\n\t\techo \"Right: \";__var_dump($right);\r\n\t}\r\n}\r\nif ($success) echo \"OK\";\r\n\t\t \r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/math/round.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\ndefine('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF);\r\ndefine('LONG_MIN', -LONG_MAX - 1);\r\nprintf(\"%d,%d,%d,%d\\n\",is_int(LONG_MIN  ),is_int(LONG_MAX  ),\r\n\t\t\t\t\t   is_int(LONG_MIN-1),is_int(LONG_MAX+1));\r\n\r\n$tests = <<<TESTS\r\n-1 ~== ceil(-1.5)\r\n 2 ~== ceil( 1.5)\r\n-2 ~== floor(-1.5)\r\n 1 ~== floor(1.5)\r\n LONG_MIN   ~== ceil(LONG_MIN - 0.5)\r\n LONG_MIN+1 ~== ceil(LONG_MIN + 0.5)\r\n LONG_MIN-1 ~== round(LONG_MIN - 0.6)\r\n LONG_MIN   ~== round(LONG_MIN - 0.4)\r\n LONG_MIN   ~== round(LONG_MIN + 0.4)\r\n LONG_MIN+1 ~== round(LONG_MIN + 0.6)\r\n LONG_MIN-1 ~== floor(LONG_MIN - 0.5)\r\n LONG_MIN   ~== floor(LONG_MIN + 0.5)\r\n LONG_MAX   ~== ceil(LONG_MAX - 0.5)\r\n LONG_MAX+1 ~== ceil(LONG_MAX + 0.5)\r\n LONG_MAX-1 ~== round(LONG_MAX - 0.6)\r\n LONG_MAX   ~== round(LONG_MAX - 0.4)\r\n LONG_MAX   ~== round(LONG_MAX + 0.4)\r\n LONG_MAX+1 ~== round(LONG_MAX + 0.6)\r\n LONG_MAX-1 ~== floor(LONG_MAX - 0.5)\r\n LONG_MAX   ~== floor(LONG_MAX + 0.5)\r\nTESTS;\r\n\r\ninclude('quicktester.inc');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/bug20134.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$fp = fsockopen(\"udp://localhost\", 65534, $errno, $errstr);\r\nif (!$fp) {\r\n\t/* UDP will never cause a connection error, as it is\r\n\t * a connection-LESS protocol */\r\n    echo \"ERROR: $errno - $errstr<br>\\n\";\r\n}\r\nelse {\r\n\t/* Likewise, writes will always appear to succeed */\r\n    $x = fwrite($fp,\"\\n\");\r\n\techo $x,\"\\n\";\r\n\t/* But reads should always fail */\r\n    $content = fread($fp, 40);\r\n\techo($content),\"\\n\";\r\n    fclose($fp);\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/tcp4loop.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$server = stream_socket_server('tcp://127.0.0.1:31337');\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_INET socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client('tcp://127.0.0.1:31337');\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_INET socket [client]');\r\n\t}\r\n\r\n\t/* Accept that connection */\r\n\t$socket = stream_socket_accept($server);\r\n\tif (!$socket) {\r\n\t\tdie('Unable to accept connection');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($socket, 10);\r\n\tvar_dump($data);\r\n\r\n\tfclose($client);\r\n\tfclose($socket);\r\n\tfclose($server);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/tcp6loop.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\t@stream_socket_client('tcp://[::1]:0', $errno);\r\n\tif ($errno != 111) die('skip IPv6 not supported.');\r\n\t\r\n\t/* Setup socket server */\r\n\t$server = stream_socket_server('tcp://[::1]:31337');\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_INET6 socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client('tcp://[::1]:31337');\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_INET6 socket [client]');\r\n\t}\r\n\r\n\t/* Accept that connection */\r\n\t$socket = stream_socket_accept($server);\r\n\tif (!$socket) {\r\n\t\tdie('Unable to accept connection');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($socket, 10);\r\n\techo ($data);\r\n\r\n\tfclose($client);\r\n\tfclose($socket);\r\n\tfclose($server);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/udgloop.php.notest",
    "content": "--TEST--\r\nStreams Based Unix Domain Datagram Loopback test\r\n--SKIPIF--\r\n<?php # vim:ft=php:\r\n\tif (array_search(\"udg\",stream_get_transports()) === false)\r\n\t\tdie('SKIP No support for UNIX domain sockets.'); \r\n?>\r\n--FILE--\r\n<?php\r\n\t$uniqid = uniqid();\r\n\tif (file_exists(\"/tmp/$uniqid.sock\"))\r\n\t\tdie('Temporary socket /tmp/$uniqid.sock already exists.');\r\n\r\n\t/* Setup socket server */\r\n\t$server = stream_socket_server(\"udg:///tmp/$uniqid.sock\", $errno, $errstr, STREAM_SERVER_BIND);\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_UNIX socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client(\"udg:///tmp/$uniqid.sock\");\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_UNIX socket [client]');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($server, 10);\r\n\tvar_dump($data);\r\n\r\n\tfclose($client);\r\n\tfclose($server);\r\n\tunlink(\"/tmp/$uniqid.sock\");\r\n?>\r\n--EXPECT--\r\nstring(10) \"ABCdef123\r\n\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/udp4loop.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t/* Setup socket server */\r\n\t$server = stream_socket_server('udp://127.0.0.1:31338', $errno, $errstr, STREAM_SERVER_BIND);\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_INET socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client('udp://127.0.0.1:31338');\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_INET socket [client]');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($server, 10);\r\n\techo $data;\r\n\r\n\tfclose($client);\r\n\tfclose($server);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/udp6loop.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\t@stream_socket_client('tcp://[::1]:0', $errno);\r\n\tif ($errno != 111) die('skip IPv6 not supported.');\r\n\t\r\n\t$server = stream_socket_server('udp://[::1]:31337', $errno, $errstr, STREAM_SERVER_BIND);\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_INET6 socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client('udp://[::1]:31337');\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_INET6 socket [client]');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($server, 10);\r\n\techo ($data);\r\n\r\n\tfclose($client);\r\n\tfclose($server);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/network/unixloop.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tif (array_search(\"unix\",stream_get_transports()) === false)\r\n\t\tdie('SKIP No support for UNIX domain sockets.'); \r\n\t\r\n\t$uniqid = uniqid();\r\n\tif (file_exists(\"/tmp/$uniqid.sock\"))\r\n\t\tdie('Temporary socket already exists.');\r\n\r\n\t/* Setup socket server */\r\n\t$server = stream_socket_server(\"unix:///tmp/$uniqid.sock\");\r\n\tif (!$server) {\r\n\t\tdie('Unable to create AF_UNIX socket [server]');\r\n\t}\r\n\r\n\t/* Connect to it */\r\n\t$client = stream_socket_client(\"unix:///tmp/$uniqid.sock\");\r\n\tif (!$client) {\r\n\t\tdie('Unable to create AF_UNIX socket [client]');\r\n\t}\r\n\r\n\t/* Accept that connection */\r\n\t$socket = stream_socket_accept($server);\r\n\tif (!$socket) {\r\n\t\tdie('Unable to accept connection');\r\n\t}\r\n\r\n\tfwrite($client, \"ABCdef123\\n\");\r\n\r\n\t$data = fread($socket, 10);\r\n\tvar_dump($data);\r\n\r\n\tfclose($client);\r\n\tfclose($socket);\r\n\tfclose($server);\r\n\tunlink(\"/tmp/$uniqid.sock\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc123\";\r\n  echo ereg_replace(\"123\",\"def\",$a)?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc123\";\r\n  echo ereg_replace(\"123\",\"\",$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"\\\\'test\";\r\n  echo ereg_replace(\"\\\\\\\\'\",\"'\",$a)\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"This is a nice and simple string\";\r\n  if (ereg(\".*nice and simple.*\",$a)) {\r\n    echo \"ok\\n\";\r\n  }\r\n  if (!ereg(\".*doesn't exist.*\",$a)) {\r\n    echo \"ok\\n\";\r\n  }\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"This is a nice and simple string\";\r\n  echo ereg(\".*(is).*(is).*\",$a,$registers);\r\n  echo \"\\n\";\r\n  echo $registers[0];\r\n  echo \"\\n\";\r\n  echo $registers[1];\r\n  echo \"\\n\";\r\n  echo $registers[2];\r\n  echo \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"This is a nice and simple string\";\r\n  echo ereg_replace(\"^This\",\"That\",$a);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/007.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\t$a=\"abcd\";\r\n\t$b=ereg_replace(\"abcd\",\"\",$a);\r\n\techo \"strlen(\\$b)=\".strlen($b);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/008.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\techo ereg_replace(\"([a-z]*)([-=+|]*)([0-9]+)\",\"\\\\3 \\\\1 \\\\2\\n\",\"abc+-|=123\");\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/009.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$a=split(\"[[:space:]]\",\"this is\ta\\ntest\");\r\n\techo count($a) . \"\\n\";\r\n\tfor ($i = 0; $i < count($a); $i++) {\r\n          echo $a[$i] . \"\\n\";\r\n        }\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/010.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc122222222223\";\r\n  echo ereg_replace(\"1(2*)3\",\"\\\\1def\\\\1\",$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/011.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc123\";\r\n  echo ereg_replace(\"123\",\"def\\\\0ghi\",$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/012.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc123\";\r\n  echo ereg_replace(\"123\",'def\\1ghi',$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/013.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"abc123\";\r\n  echo ereg_replace(\"123\",\"def\\\\g\\\\\\\\hi\\\\\",$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/014.php",
    "content": "[expect php]\r\n[file]\r\n<?php $a=\"a\\\\2bxc\";\r\n  echo ereg_replace(\"a(.*)b(.*)c\",\"\\\\1\",$a)?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/015.php",
    "content": "[expect php]\r\n[file]\r\n<?php echo ereg_replace(\"^\",\"z\",\"abc123\")?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/016.php",
    "content": "[expect php]\r\n[file]\r\n<?php echo ereg_replace('\\?',\"abc\",\"?123?\")?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/reg/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nclass t\r\n{\r\n\tfunction t()\r\n\t{\r\n\t\t$this->a = \"hallo\";\r\n\t}\r\n}\r\n\r\nclass s\r\n{\r\n\tpublic $a;\r\n\tpublic $b;\r\n\tpublic $c;\r\n\r\n\tfunction s()\r\n\t{\r\n\t\t$this->a = \"hallo\";\r\n\t\t$this->b = \"php\";\r\n\t\t$this->c = \"world\";\r\n\t\t$this->d = \"!\";\r\n\t}\r\n\r\n\tfunction __sleep()\r\n\t{\r\n\t\techo \"__sleep called\\n\";\r\n\t\treturn array(\"a\",\"c\");\r\n\t}\r\n\r\n\tfunction __wakeup()\r\n\t{\r\n\t\techo \"__wakeup called\\n\";\r\n\t}\r\n}\r\n\r\n\r\necho serialize(NULL).\"\\n\";\r\necho serialize((bool) true).\"\\n\";\r\necho serialize((bool) false).\"\\n\";\r\necho serialize(1).\"\\n\";\r\necho serialize(0).\"\\n\";\r\necho serialize(-1).\"\\n\";\r\necho serialize(2147483647).\"\\n\";\r\necho serialize(-2147483647).\"\\n\";\r\n// bug? too many decimals: echo serialize(1.123456789).\"\\n\";\r\necho serialize(1.0).\"\\n\";\r\necho serialize(0.0).\"\\n\";\r\necho serialize(-1.0).\"\\n\";\r\n// bug? too many decimals:echo serialize(-1.123456789).\"\\n\";\r\necho serialize(\"hallo\").\"\\n\";\r\necho serialize(array(1,/*bug?: 1.1,*/\"hallo\",NULL,true,array())).\"\\n\";\r\n\r\n$t = new t();\r\n$data = serialize($t);\r\necho \"$data\\n\";\r\n$t = unserialize($data);\r\n__var_dump($t);\r\n\r\n$t = new s();\r\n$data = serialize($t);\r\necho \"$data\\n\";\r\n$t = unserialize($data);\r\n__var_dump($t);\r\n\r\n$a = array(\"a\" => \"test\");\r\n$a[ \"b\" ] = &$a[ \"a\" ];\r\n__var_dump($a);\r\n$data = serialize($a);\r\necho \"$data\\n\";\r\n$a = unserialize($data);\r\n__var_dump($a);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n__var_dump(unserialize('b:0;'));\r\n__var_dump(unserialize('b:1;'));\r\n__var_dump(unserialize('i:823;'));\r\n__var_dump(unserialize('s:0:\"\";'));\r\n__var_dump(unserialize('s:3:\"foo\";'));\r\n__var_dump(unserialize('a:1:{i:0;s:2:\"12\";}'));\r\n__var_dump(unserialize('a:2:{i:0;a:0:{}i:1;a:0:{}}'));\r\n__var_dump(unserialize('a:3:{i:0;s:3:\"foo\";i:1;s:3:\"bar\";i:2;s:3:\"baz\";}'));\r\n__var_dump(unserialize('O:8:\"stdClass\":0:{}'));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nforeach(array(1e2, 5.2e25, /*bug?: 85.29e-23,*/ 9e-9) AS $value) {\r\n\techo ($ser = serialize($value)).\"\\n\";\r\n\t__var_dump(unserialize($ser));\r\n\techo \"\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nerror_reporting (E_ALL);\r\n$a      = array(4);\r\n$str    = serialize($a);\r\nprint('Serialized array: '.$str.\"\\n\");\r\n$b      = unserialize($str);\r\nprint('Unserialized array: ');\r\n__var_dump($b);\r\nprint(\"\\n\");\r\n$str    = serialize(array(4.5));\r\nprint('Serialized array: '.$str.\"\\n\");\r\n$b      = unserialize($str);\r\nprint('Unserialized array: ')   ;\r\n__var_dump($b);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\ninclude('Autoload.inc');\r\n\r\n\r\nfunction unserializer($class_name)\r\n{\r\n\techo __METHOD__ . \"($class_name)\\n\";\r\n\tswitch($class_name)\r\n\t{\r\n\tcase 'TestNAOld':\r\n\t\teval(\"class TestNAOld extends TestOld {}\");\r\n\t\tbreak;\r\n\tcase 'TestNANew':\r\n\t\teval(\"class TestNANew extends TestNew {}\");\r\n\t\tbreak;\r\n\tcase 'TestNANew2':\r\n\t\teval(\"class TestNANew2 extends TestNew {}\");\r\n\t\tbreak;\r\n\tdefault:\r\n\t\techo \"Try __autoload()\\n\";\r\n\t\t__autoload($class_name);\r\n\t\tbreak;\r\n\t}\r\n}\r\n\r\nini_set('unserialize_callback_func', 'unserializer');\r\n\r\nclass TestOld\r\n{\r\n\tfunction serialize()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n\t\r\n\tfunction unserialize($serialized)\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n\t\r\n\tfunction __wakeup()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n\t\r\n\tfunction __sleep()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\treturn array();\r\n\t}\r\n}\r\n\r\nclass TestNew implements Serializable\r\n{\r\n\tprotected static $check = 0;\r\n\r\n\tfunction serialize()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t\tswitch(++self::$check)\r\n\t\t{\r\n\t\tcase 1:\r\n\t\t\treturn NULL;\r\n\t\tcase 2:\r\n\t\t\treturn \"2\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction unserialize($serialized)\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n\t\r\n\tfunction __wakeup()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n\t\r\n\tfunction __sleep()\r\n\t{\r\n\t\techo __METHOD__ . \"()\\n\";\r\n\t}\r\n}\r\n\r\necho \"===O1===\\n\";\r\n__var_dump($ser = serialize(new TestOld));\r\n__var_dump(unserialize($ser));\r\n\r\necho \"===N1===\\n\";\r\n__var_dump($ser = serialize(new TestNew));\r\n__var_dump(unserialize($ser));\r\n\r\necho \"===N2===\\n\";\r\n__var_dump($ser = serialize(new TestNew));\r\n__var_dump(unserialize($ser));\r\n\r\necho \"===NAOld===\\n\";\r\n__var_dump(unserialize('O:9:\"TestNAOld\":0:{}'));\r\n\r\necho \"===NANew===\\n\";\r\n__var_dump(unserialize('O:9:\"TestNANew\":0:{}'));\r\n\r\necho \"===NANew2===\\n\";\r\n__var_dump(unserialize('C:10:\"TestNANew2\":0:{}'));\r\n\r\necho \"===AutoOld===\\n\";\r\n__var_dump(unserialize('O:19:\"autoload_implements\":0:{}'));\r\n\r\n// Now we have __autoload(), that will be called before the old style header.\r\n// If the old style handler also fails to register the class then the object\r\n// becomes an incomplete class instance.\r\n\r\necho \"===AutoNA===\\n\";\r\n__var_dump(@unserialize('O:22:\"autoload_not_available\":0:{}'));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\t$ = array('' => '');\r\n\r\n\tclass  \r\n\t{\r\n\t\tpublic $ = '';\r\n\t}\r\n  \r\n    $foo = new ();\r\n  \r\n\t__var_dump(serialize($foo));\r\n\t__var_dump(unserialize(serialize($foo)));\r\n\t__var_dump(serialize($));\r\n\t__var_dump(unserialize(serialize($)));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/Autoload.inc",
    "content": "<?\r\n\r\nfunction __autoload($class_name)\r\n{\r\n\tswitch($class_name)\r\n\t{\r\n\t\tcase \"autoload_implements\":\r\n\t\t\tclass autoload_implements implements autoload_interface \r\n\t\t\t{\r\n\t\t\t\tfunction testFunction()\r\n\t\t\t\t{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\tcase \"autoload_interface\":\t\r\n\t\t\tinterface autoload_interface \r\n\t\t\t{\r\n\t\t\t\tfunction testFunction();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\techo __FUNCTION__ . '(' . $class_name . \")\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug14293.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n\r\nclass t\r\n{\r\n\tfunction t()\r\n\t{\r\n\t\t$this->a = 'hello';\r\n\t}\r\n\r\n\tfunction __sleep()\r\n\t{\r\n\t\techo \"__sleep called\\n\";\r\n\t\treturn array('a','b');\r\n\t}\t\r\n}\r\n\r\n$t = new t();\r\n$data = serialize($t);\r\necho \"$data\\n\";\r\n$t = unserialize($data);\r\n__var_dump($t);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug21957.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nclass test\r\n{\r\n\tpublic $a, $b;\r\n\r\n\tfunction test()\r\n\t{\r\n\t\t$this->a = 7;\r\n\t\t$this->b = 2;\r\n\t}\r\n\r\n\tfunction __sleep()\r\n\t{\r\n\t\t$this->b = 0;\r\n\t}\r\n}\r\n\r\n$t['one'] = 'ABC';\r\n$t['two'] = new test();\r\n\r\n__var_dump($t);\r\n\r\n$s =  @serialize($t);\r\necho $s . \"\\n\";\r\n\r\n__var_dump(unserialize($s));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug23298.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\t$foo = 1.428571428571428647642857142;\r\n\t$bar = unserialize(serialize($foo));\r\n\t__var_dump(($foo === $bar));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug24063.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$v = 1;\r\nfor ($i = 1; $i < 10; $i++) {\r\n\t$v /= 10;\r\n\techo \"{$v} \".unserialize(serialize($v)).\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug25378.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\nerror_reporting(0);\r\n__var_dump(unserialize(\"s:-1:\\\"\\\";\"));\r\n__var_dump(unserialize(\"i:823\"));\r\n__var_dump(unserialize(\"O:8:\\\"stdClass :0:{}\"));\r\n__var_dump(unserialize(\"O:8:\\\"stdClass\\\"+0:{}\"));\r\n__var_dump(unserialize(\"O:1000:\\\"stdClass\\\":0:{}\"));\r\n__var_dump(unserialize(\"a:2:{i:0;s:2:\\\"12\\\":\"));\r\n__var_dump(unserialize(\"a:2:{i:0;s:2:\\\"12\\\";i:1;s:3000:\\\"123\"));\r\n__var_dump(unserialize(\"a:2:{i:0;s:2:\\\"12\\\"+i:1;s:3:\\\"123\\\";}\"));\r\n__var_dump(unserialize(\"a:2:{i:0;s:2:\\\"12\\\";i:1;s:3:\\\"123\\\";\"));\r\n__var_dump(unserialize(\"s:3000:\\\"123\\\";\"));\r\n__var_dump(unserialize(\"s:3000:\\\"123\"));\r\n__var_dump(unserialize(\"s:3:\\\"123;\"));\r\n__var_dump(unserialize(\"s:0:\\\"123\\\";\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug26762.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\nini_set('unserialize_callback_func','check');\r\n\r\nfunction check($name) {\r\n\t__var_dump($name);\r\n\tthrow new exception;\r\n}\r\n\r\ntry {\r\n\t@unserialize('O:3:\"FOO\":0:{}');\r\n}\r\ncatch (Exception $e) {\r\n\t/* ignore */\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug27469.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$str = 'O:9:\"TestClass\":0:{}';\r\n$obj = unserialize($str);\r\n__var_dump($obj);\r\necho serialize($obj).\"\\n\";\r\n__var_dump($obj);\r\necho serialize($obj).\"\\n\";\r\n__var_dump($obj);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug28325.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass a {\r\n\tpublic $b;\r\n}\r\nclass b {\r\n\tpublic $c;\r\n}\r\nclass c {\r\n\tpublic $d;\r\n}\r\n$a = new a();\r\n$a->b = new b();\r\n$a->b->c = new c();\r\n$a->b->c->d = $a;\r\n$s = serialize($a);\r\necho $s === serialize(unserialize($s)) ? \"OK\" : \"FAILED\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug30234.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\ninclude('Autoload.inc');\r\n//error_reporting(0);\r\n\r\n__var_dump(interface_exists('autoload_interface', false));\r\n__var_dump(class_exists('autoload_implements', false));\r\n\r\n$o = unserialize('O:19:\"Autoload_Implements\":0:{}');\r\n\r\n__var_dump($o);\r\n__var_dump($o instanceof autoload_interface);\r\nunset($o);\r\n\r\n__var_dump(interface_exists('autoload_interface', false));\r\n__var_dump(class_exists('autoload_implements', false));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug31402.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n\r\nclass TestX {\r\n  var $i;\r\n\r\n  function __construct($i) {\r\n    $this->i = $i;\r\n  }\r\n}\r\n\r\nclass TestY {\r\n  var $A = array();\r\n  var $B;\r\n\r\n  function __construct() {\r\n    $this->A[1] = new TestX(1);\r\n    $this->A[2] = & new TestX(2);\r\n    $this->A[3] = & $this->A[2];\r\n    $this->B = $this->A[1];\r\n  }\r\n}\r\n\r\n$before = new TestY();\r\n$ser = serialize($before);\r\n$after = unserialize($ser);\r\n\r\n__var_dump($before, $after);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/serialize/bug31442.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho unserialize(serialize(2147483648));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/004.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction stats($f, $a) {\r\n    $times = 90000;\r\n    print \"$f\\n\";\r\n    ksort($a);\r\n    foreach($a as $k => $v)\r\n        print \"$k: $v: \" . sprintf('%0.3f', $v / $times) . \"\\n\";\r\n}\r\n$a = array();\r\n$times = 90000;\r\nfor ($i = 0; $i < $times; $i++) {\r\n    $p = range(1,4);\r\n    shuffle($p);\r\n    $s = join('', $p);\r\n    if (empty($a[$s])) $a[$s] = 0; \r\n    $a[$s]++;\r\n}\r\n\r\nstats('shuffle', $a);\r\n$a = array();\r\n$times = 90000;\r\nfor ($i = 0; $i < $times; $i++) {\r\n    $p = '1234';\r\n    $s = str_shuffle($p);\r\n    if (empty($a[$s])) $a[$s] = 0;\r\n    $a[$s]++;\r\n}\r\n\r\nstats('str_shuffle', $a);\r\n?>\r\n--EXPECTREGEX--\r\nshuffle\r\n1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\nstr_shuffle\r\n1234: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1243: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1324: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1342: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1423: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n1432: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2134: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2143: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2314: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2341: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2413: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n2431: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3124: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3142: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3214: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3241: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3412: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n3421: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4123: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4132: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4213: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4231: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4312: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n4321: 3[0-9][0-9][0-9]: 0.0[3-4][0-9]\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/add-and-stripcslashes.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho addcslashes(\"\", \"\").\"\\n\";\r\necho addcslashes(\"\", \"burp\").\"\\n\";\r\necho addcslashes(\"kaboemkara!\", \"\").\"\\n\";\r\necho addcslashes(\"foobarbaz\", 'bar').\"\\n\";\r\necho addcslashes('foo[ ]', 'A..z').\"\\n\";\r\necho @addcslashes(\"zoo['.']\", 'z..A').\"\\n\";\r\necho addcslashes('abcdefghijklmnopqrstuvwxyz', \"a\\145..\\160z\").\"\\n\";\r\necho \"\\n\\r\" == stripcslashes('\\n\\r'),\"\\n\";\r\necho stripcslashes('\\065\\x64').\"\\n\";\r\necho stripcslashes('').\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/add-and-stripslashes.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$input = '';\r\nfor($i=0; $i<512; $i++) {\r\n\t$input .= chr($i%256);\r\n}\r\n\r\necho \"Normal: \";\r\nini_set('magic_quotes_sybase', 0);\r\nif($input === stripslashes(addslashes($input))) {\r\n\techo \"OK\\n\";\r\n} else {\r\n\techo \"FAILED\\n\";\r\n}\r\n\r\necho \"Sybase: \";\r\nini_set('magic_quotes_sybase', 1);\r\nif($input === stripslashes(addslashes($input))) {\r\n\techo \"OK\\n\";\r\n} else {\r\n\techo \"FAILED\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/basename.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  include('Phalanger.inc');\r\n  \r\n\t// simple checks\r\n\t__var_dump(basename(\"bar\"));\r\n\t__var_dump(basename(\"/foo/bar\"));\r\n\t__var_dump(basename(\"/bar\"));\r\n\r\n\t// simple checks with trailing slashes\r\n\t__var_dump(basename(\"bar/\"));\r\n\t__var_dump(basename(\"/foo/bar/\"));\r\n\t__var_dump(basename(\"/bar/\"));\r\n\r\n\t// suffix removal checks\r\n\t__var_dump(basename(\"bar.gz\", \".gz\"));\r\n\t__var_dump(basename(\"/foo/bar.gz\", \".gz\"));\r\n\t__var_dump(basename(\"/bar.gz\", \".gz\"));\r\n\r\n\t// suffix removal checks with trailing slashes\r\n\t__var_dump(basename(\"bar.gz/\", \".gz\"));\r\n\t__var_dump(basename(\"/foo/bar.gz/\", \".gz\"));\r\n\t__var_dump(basename(\"/bar.gz/\", \".gz\"));\r\n\r\n\t// suffix removal checks\r\n\t__var_dump(basename(\"/.gz\", \".gz\"));\r\n\t__var_dump(basename(\"/foo/.gz\", \".gz\"));\r\n\t__var_dump(basename(\"/.gz\", \".gz\"));\r\n\r\n\t// binary safe?\r\n\t__var_dump(basename(\"foo\".chr(0).\"bar\"));\r\n\t__var_dump(basename(\"foo\".chr(0).\"bar.gz\", \".gz\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bin2hex.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$s = '';\r\nfor($i=0; $i<256; $i++) {\r\n\t$s .= chr($i);\r\n}\r\necho bin2hex($s).\"\\n\";\r\necho bin2hex(\"abc\").\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug20108.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\t$a = \"boo\";\r\n\t$z = sprintf(\"%580.58s\\n\", $a);\r\n\t__var_dump($z);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug20169.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$delimiter = \"|\";\r\n\r\n\techo \"delimiter: $delimiter\\n\";\r\n\timplode($delimiter, array(\"foo\", \"bar\"));\r\n\techo \"delimiter: $delimiter\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug20261.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n $first = \"boo\";\r\n $second = $first;\r\n $rot = \"\";\r\n\r\n echo \"1: \".$first.\"\\n\";\r\n echo \"2: \".$second.\"\\n\";\r\n echo \"3: \".$rot.\"\\n\";\r\n\r\n $rot = str_rot13($second);\r\n\r\n echo \"1: \".$first.\"\\n\";\r\n echo \"2: \".$second.\"\\n\";\r\n echo \"3: \".$rot.\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug20927.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n$string\t\t= str_repeat(\"1234567890 X \", 10);\r\n$break\t\t= str_repeat(\"a-very-long-break-string-to-clobber-the-heap\", 8);\r\n$linelength\t= 10;\r\n\r\necho \"Length of original string:  \".strlen($string).\"\\n\";\r\necho \"Length of break string:     \".strlen($break).\"\\n\";\r\n\r\n__var_dump(wordwrap($string, $linelength, $break, 1));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug20934.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\nif (!function_exists(\"utf8_encode\") || !function_exists(\"utf8_decode\")) {\r\n\tdie(\"SKIP Neither utf8_encode() nor utf8_decode() are available\");\r\n}\r\n\r\n$str = utf8_encode(\"\\xe0\\xe1\");\r\n__var_dump(bin2hex(utf8_decode($str)));\r\n__var_dump(bin2hex(utf8_decode(htmlspecialchars($str, ENT_COMPAT, \"UTF-8\"))));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug21338.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\t__var_dump(html_entity_decode(NULL));\r\n\t__var_dump(html_entity_decode(\"\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug21453.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n$test = \"\r\n<table>\r\n\t<tr><td>first cell before < first cell after</td></tr>\r\n\t<tr><td>second cell before < second cell after</td></tr>\r\n</table>\";\r\n\r\n\t__var_dump(strip_tags($test));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug21730.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n$foo = \"ABC = DEF\";\r\n$fmt = \"%s = %s %n\";\r\n$res_a = array();\r\n\r\n/* $res_a[2] is supposed to be a integer value that\r\n * represents the number of characters consumed so far\r\n */\r\nsscanf($foo, $fmt, $res_a[0], $res_a[1], $res_a[2]);\r\n\r\n$res_b = sscanf($foo, $fmt);\r\n\r\n__var_dump($res_a);\r\n__var_dump($res_b);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug21744.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$test = <<< HERE\r\n<a href=\"test?test\\\\!!!test\">test</a>\r\n<!-- test -->\r\nHERE;\r\n\r\nprint strip_tags($test, '');\r\nprint strip_tags($test, '<a>');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22008.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$html = <<< HERE\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n<html>\r\n<head>\r\n<title>test</title>\r\n</head>\r\n<body>\r\n<b>PHP!</b>\r\n</body>\r\n</html>\r\n\r\nHERE;\r\n\r\necho trim(strip_tags($html, '<b>')).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22187.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\t__var_dump(number_format(0.0001, 1));\r\n\t__var_dump(number_format(0.0001, 0));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22207.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\tprintf(\"%10.5e\\n\", 1.1); \r\n\t__var_dump(sprintf(\"%10.5e\\n\", 1.1));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22224.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass foo {\r\n}\r\n\r\n\r\n$a = new foo();\r\n\t\t\t    \r\n$arr = array(0=>&$a, 1=>&$a);\r\n@implode(\",\",$arr);\r\n__var_dump($arr)\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22227.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nprintf(\"%-3.3s\", \"abcdef\");\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug22904.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nini_set(\"magic_quotes_sybase\",\"on\");\r\ntest();\r\nini_set(\"magic_quotes_sybase\",\"off\");\r\ntest();\r\n\r\nfunction test(){\r\n\t$buf = 'g\\g\"\\0g'.\"'\";\r\n\t$slashed = addslashes($buf);\r\n\techo \"$buf\\n\";\r\n\techo \"$slashed\\n\";\r\n\techo stripslashes($slashed.\"\\n\");\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug23650.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$str = <<< HERE\r\n1:<!-- abc -  -->\r\n2:<!doctype -- >\r\n3:\r\n4:<abc - def>\r\n5:abc - def\r\n6:</abc>\r\n\r\nHERE;\r\n\r\necho strip_tags($str);\r\necho strip_tags($str, '<abc>');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug23894.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$a = -12.3456;\r\n$test = sprintf(\"%04d\", $a);\r\n__var_dump($test, bin2hex($test));\r\n$test = sprintf(\"% 13u\", $a);\r\n__var_dump($test, bin2hex($test));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug24098.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\t__var_dump(pathinfo(\"/dsds.asa\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug24208.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$a = $b = $c = \"oops\";\r\nparse_str(\"a=1&b=2&c=3\");\r\n__var_dump($a, $b, $c);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug24281.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$string = \"He had had to have had it\";\r\n$newstring = str_replace(\"had\", \"foo\", $string, $count);\r\nprint \"$count changes were made.\\n\";\r\n$count = \"foo\";\r\n$newstring = str_replace(\"had\", \"foo\", $string, $count);\r\nprint \"$count changes were made.\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug24312.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$data = str_repeat(\"a\", 100);\r\nfor ($i = 0xF0; $i < 0xFF + 1; $i++) {\r\n\t$enc = chunk_split(base64_encode($data), 10, chr($i));\r\n\t__var_dump(base64_decode($enc));\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug25671.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  $arr = array(\r\n\t\"This is string one.\",\r\n\t\"This is string two.\",\r\n\tarray(\r\n\t\t\"This is another string.\",\r\n\t\t\"This is a last string.\"),\r\n\t\"This is a last string.\");\r\n\r\n  echo serialize(str_replace(\"string\", \"strung\", $arr)) . \"\\n\";\r\n  echo serialize(str_replace(\"string\", \"strung\", $arr)) . \"\\n\";\r\n  echo serialize(str_replace(\" \", \"\", $arr)) . \"\\n\";\r\n  echo serialize(str_replace(\" \", \"\", $arr)) . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug25707.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n__var_dump(html_entity_decode(\"&amp;lt;\", ENT_COMPAT, 'ISO-8859-1'));\r\n__var_dump(html_entity_decode(\"&amp;#38;\", ENT_COMPAT, 'ISO-8859-1'));\r\n__var_dump(html_entity_decode(\"&amp;#38;lt;\", ENT_COMPAT, 'ISO-8859-1'));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug26817.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nclass test { \r\n\tprotected $foo;\r\n\tprivate $bar;\r\n\tpublic $test;\r\n\r\n\tfunction foo()\r\n\t{\r\n\t\t$this->bar = 'meuh';\r\n\t\t$this->foo = 'lala';\r\n\t\t$this->test = 'test';\r\n\r\n\t\t__var_dump(http_build_query($this));\r\n\t}\r\n}\r\n\r\n$obj = new test();\r\n$obj->foo();\r\n__var_dump(http_build_query($obj));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug26819.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n$a = array();\r\n__var_dump(http_build_query($a));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug26878.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tprintf('Int: %1$d and as string: %1$s', 'some string');\r\n\techo \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug26973.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nprintf(\"%+05d\\n\", 200);\r\nprintf(\"%+05d\\n\", -200);\r\nprintf(\"%+05f\\n\", 200);\r\nprintf(\"%+05f\\n\", -200);\r\nprintf(\"%+05u\\n\", 200);\r\nprintf(\"%+05u\\n\", -200);\r\necho \"---\\n\";\r\nprintf(\"%05d\\n\", 200);\r\nprintf(\"%05d\\n\", -200);\r\nprintf(\"%05f\\n\", 200);\r\nprintf(\"%05f\\n\", -200);\r\nprintf(\"%05u\\n\", 200);\r\nprintf(\"%05u\\n\", -200);\r\n\r\n// added by Phalanger:\r\nprintf(\"%+d\\n\", 0);\r\nprintf(\"%-d\\n\", 0);\r\nprintf(\"%+d\\n\", 200);\r\nprintf(\"%+d\\n\", -200);\r\nprintf(\"%+f\\n\", 200);\r\nprintf(\"%+f\\n\", -200);\r\nprintf(\"%+u\\n\", 200);\r\nprintf(\"%+u\\n\", -200);\r\nprintf(\"%-d\\n\", 200);\r\nprintf(\"%-d\\n\", -200);\r\nprintf(\"%-f\\n\", 200);\r\nprintf(\"%-f\\n\", -200);\r\nprintf(\"%-u\\n\", 200);\r\nprintf(\"%-u\\n\", -200);\r\necho \"---\\n\";\r\nprintf(\"%-b\\n\", -200);\r\nprintf(\"%+b\\n\", -200);\r\nprintf(\"%-o\\n\", -200);\r\nprintf(\"%+o\\n\", -200);\r\necho \"---\\n\";\r\nprintf(\"%+5d\\n\", 200);\r\nprintf(\"%+5d\\n\", -200);\r\nprintf(\"%+05d\\n\", 200);\r\nprintf(\"%+05d\\n\", -200);\r\nprintf(\"%+'r10d\\n\", -200);\r\nprintf(\"%+'\\n5d\\n\", -200);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug27276.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$replacement = str_repeat(\"x\", 12444);\r\n$string = str_repeat(\"x\", 9432);\r\n$key =    \"{BLURPS}\";\r\n\r\nstr_replace($key, $replacement, $string);\r\n\r\necho \"Alive!\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug27278.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\nfunction foo ($a)\r\n{\r\n\t$a=sprintf(\"%02d\",$a);\r\n\t__var_dump($a);\r\n}\r\n\r\n$x=\"02\";\r\n__var_dump($x);\r\nfoo($x);\r\n__var_dump($x);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug27295.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$strings = array(\"foo = bar\", \"bar = foo\");\r\nforeach( $strings as $string )\r\n{\r\n\tsscanf( $string, \"%s = %[^[]]\", $var, $val );\r\n\techo \"$var = $val\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug27457.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$test = \"Dot in brackets [.]\\n\";\r\n\techo $test;\r\n\t$test = strtr($test, array('.' => '0'));\r\n\techo $test;\r\n\t$test = strtr($test, array('0' => '.'));\r\n\techo $test;\r\n\t$test = strtr($test, '.', '0');\r\n\techo $test;\r\n\t$test = strtr($test, '0', '.');\r\n\techo $test;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug27675.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho str_ireplace('/*<B>', '<B>', '/*<b> I am a comment</b>*/');\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug28386.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$text = \"Some text\";\r\n$string = \"$text $text $text $text\";\r\necho wordwrap($string, 9);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/bug33076.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$value = str_ireplace(\"t\", \"bz\", \"Text\");\r\n\r\necho $value,\"\\n\";\r\n\r\necho \"Done\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/chr_ord.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho \"Testing ord() & chr()...\";\r\nfor($i=0; $i<256; $i++) echo !ord(chr($i)) == $i;\r\necho \" done\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/chunk_split.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho chunk_split('abc', 1, '-').\"\\n\";\r\necho chunk_split('foooooooooooooooo', 5).\"\\n\";\r\necho chunk_split(str_repeat('X', 2*76)).\"\\n\";\r\necho chunk_split(\"test\", 10, \"|end\") . \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/count_chars.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$s = \"het leven is net erwtensoep - je kunt er geen touw aan vastknopen\";\r\nfor($i=0; $i<3; $i++) {\r\n\techo implode(\"\", count_chars($s, $i)).\"\\n\";\r\n}\r\necho $a = count_chars($s, 3), \"\\n\";\r\necho (int) strlen(count_chars($s, 4)) == 256-strlen($a),\"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/crc32.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$input = array(\"foo\", \"bar\", \"baz\", \"grldsajkopallkjasd\");\r\nforeach($input AS $i) {\r\n\tprintf(\"%u\\n\", crc32($i));\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/crypt.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$str = 'rasmuslerdorf';\r\n$salt1 = 'rl';\r\n$res_1 = 'rl.3StKT.4T8M';\r\n$salt2 = '_J9..rasm';\r\n$res_2 = '_J9..rasmBYk8r9AiWNc';\r\n$salt3 = '$1$rasmusle$';\r\n$res_3 = '$1$rasmusle$rISCgZzpwk3UhDidwXvin0';\r\n$salt4 = '$2a$07$rasmuslerd............';\r\n$res_4 = '$2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra';\r\n\r\necho (CRYPT_STD_DES)  ? ((crypt($str, $salt1) === $res_1) ? 'STD' : 'STD - ERROR') : 'STD', \"\\n\";\r\necho (CRYPT_EXT_DES)  ? ((crypt($str, $salt2) === $res_2) ? 'EXT' : 'EXT - ERROR') : 'EXT', \"\\n\";\r\necho (CRYPT_MD5)      ? ((crypt($str, $salt3) === $res_3) ? 'MD5' : 'MD5 - ERROR') : 'MD5', \"\\n\";\r\necho (CRYPT_BLOWFISH) ? ((crypt($str, $salt4) === $res_4) ? 'BLO' : 'BLO - ERROR') : 'BLO', \"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/explode.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n/* From http://bugs.php.net/19865 */\r\necho md5(__var_dump(explode(\"\\1\", \"a\". chr(1). \"b\". chr(0). \"d\" . chr(1) . \"f\" . chr(1). \"1\" . chr(1) . \"d\"), TRUE));\r\necho \"\\n\";\r\n__var_dump(@explode(\"\", \"\"));\r\n__var_dump(@explode(\"\", NULL));\r\n__var_dump(@explode(NULL, \"\"));\r\n__var_dump(@explode(\"a\", \"\"));\r\n__var_dump(@explode(\"a\", \"a\"));\r\n__var_dump(@explode(\"a\", NULL));\r\n__var_dump(@explode(NULL, a));\r\n__var_dump(@explode(\"abc\", \"acb\"));\r\n__var_dump(@explode(\"somestring\", \"otherstring\"));\r\n__var_dump(@explode(\"a\", \"aaaaaa\"));\r\n__var_dump(@explode(\"==\", str_repeat(\"-=\".ord(0).\"=-\", 10)));\r\n__var_dump(@explode(\"=\", str_repeat(\"-=\".ord(0).\"=-\", 10)));\r\n//////////////////////////////////////\r\n__var_dump(explode(\":\",\"a lazy dog:jumps:over:\",-1));\r\n__var_dump(explode(\":\",\"a lazy dog:jumps:over\", -1));\r\n__var_dump(explode(\":\",\"a lazy dog:jumps:over\", -2));\r\n__var_dump(explode(\":\",\"a lazy dog:jumps:over:\",-4));\r\n__var_dump(explode(\":\",\"a lazy dog:jumps:over:\",-40000000000000));\r\n__var_dump(explode(\":^:\",\"a lazy dog:^:jumps::over:^:\",-1));\r\n__var_dump(explode(\":^:\",\"a lazy dog:^:jumps::over:^:\",-2));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities.php.notest",
    "content": "--TEST--\r\nHTML entities\r\n--INI--\r\noutput_handler=\r\n--FILE--\r\n<?php \r\nsetlocale (LC_CTYPE, \"C\");\r\n$sc_encoded = htmlspecialchars (\"<>\\\"&\\n\");\r\necho $sc_encoded;\r\n$ent_encoded = htmlentities (\"<>\\\"&\\n\");\r\necho $ent_encoded;\r\necho html_entity_decode($sc_encoded);\r\necho html_entity_decode($ent_encoded);\r\n?>\r\n--EXPECT--\r\n&lt;&gt;&quot;&amp;\r\n&lt;&gt;&quot;&amp;&aring;&Auml;\r\n<>\"&\r\n<>\"&\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities01.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 1 (cp1252)\r\n--INI--\r\noutput_handler=\r\nmbstring.internal_encoding=pass\r\n--FILE--\r\n<?php\r\n\t__var_dump(htmlentities(\"\\x82\\x86\\x99\\x9f\", ENT_QUOTES, 'cp1252'));\r\n\t__var_dump(htmlentities(\"\\x80\\xa2\\xa3\\xa4\\xa5\", ENT_QUOTES, 'cp1252'));\r\n?>\r\n--EXPECT--\r\nstring(28) \"&sbquo;&dagger;&trade;&Yuml;\"\r\nstring(32) \"&euro;&cent;&pound;&curren;&yen;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities02.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 2 (setlocale / fr_FR.ISO-8859-15) \r\n--SKIPIF--\r\n<?php\r\n$result = (bool)setlocale(LC_CTYPE, \"fr_FR.ISO-8859-15\", \"fr_FR.ISO8859-15\");\r\nif (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) {\r\n\tdie(\"skip setlocale() failed\\n\");\r\n}\r\necho \"warn possibly braindead libc\\n\";\r\n?>\r\n--INI--\r\noutput_handler=\r\ndefault_charset=\r\nmbstring.internal_encoding=none\r\n--FILE--\r\n<?php\r\n\tsetlocale( LC_CTYPE, \"fr_FR.ISO-8859-15\", \"fr_FR.ISO8859-15\" );\r\n\t__var_dump(htmlentities(\"\\xbc\\xbd\\xbe\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nstring(20) \"&OElig;&oelig;&Yuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities03.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 3 (setlocale / de_DE.ISO-8859-1)\r\n--SKIPIF--\r\n<?php\r\n$result = (bool)setlocale(LC_CTYPE, \"de_DE.ISO-8859-1\", \"de_DE.ISO8859-1\");\r\nif (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) {\r\n\tdie(\"skip setlocale() failed\\n\");\r\n}\r\n?>\r\n--INI--\r\noutput_handler=\r\ndefault_charset=\r\nmbstring.internal_encoding=none\r\n--FILE--\r\n<?php\r\n\tsetlocale( LC_CTYPE, \"de_DE.ISO-8859-1\", \"de_DE.ISO8859-1\");\r\n\t__var_dump(htmlentities(\"\\xe4\\xf6\\xfc\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nstring(18) \"&auml;&ouml;&uuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities04.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 4 (setlocale / ja_JP.EUC-JP)\r\n--SKIPIF--\r\n<?php\r\n$result = (bool)setlocale(LC_CTYPE, \"ja_JP.EUC-JP\", \"ja_JP.eucJP\");\r\nif (!$result || preg_match('/EUC[^a-zA-Z]*JP/i', setlocale(LC_CTYPE, 0)) == 0) {\r\n\tdie(\"skip setlocale() failed\\n\");\r\n}\r\n?>\r\n--INI--\r\noutput_handler=\r\ndefault_charset=\r\nmbstring.internal_encoding=none\r\n--FILE--\r\n<?php\r\n\tsetlocale( LC_CTYPE, \"ja_JP.EUC-JP\", \"ja_JP.eucJP\" );\r\n\t__var_dump(htmlentities(\"\\xa1\\xa2\\xa1\\xa3\\xa1\\xa4\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nstring(6) \"\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities05.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 5 (mbstring / cp1252)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\tmb_internal_encoding('cp1252');\r\n\t$php_errormsg = NULL;\r\n\t@htmlentities(\"\\x82\\x86\\x99\\x9f\", ENT_QUOTES, '');\r\n\tif ($php_errormsg) {\r\n\t\tdie(\"skip cp1252 chracter set is not supported on this platform.\\n\");\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\n\tmb_internal_encoding('cp1252');\r\n\tprint mb_internal_encoding().\"\\n\";\r\n\t__var_dump(htmlentities(\"\\x82\\x86\\x99\\x9f\", ENT_QUOTES, ''));\r\n\t__var_dump(htmlentities(\"\\x80\\xa2\\xa3\\xa4\\xa5\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nWindows-1252\r\nstring(28) \"&sbquo;&dagger;&trade;&Yuml;\"\r\nstring(32) \"&euro;&cent;&pound;&curren;&yen;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities06.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 6 (mbstring / ISO-8859-15)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\t@mb_internal_encoding('ISO-8859-15');\r\n\t@htmlentities(\"\\xbc\\xbd\\xbe\", ENT_QUOTES, '');\r\n\tif (@$php_errormsg) {\r\n\t\tdie(\"skip ISO-8859-15 chracter set is not supported on this platform.\\n\");\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\n\tmb_internal_encoding('ISO-8859-15');\r\n\tprint mb_internal_encoding().\"\\n\";\r\n\t__var_dump(htmlentities(\"\\xbc\\xbd\\xbe\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nISO-8859-15\r\nstring(20) \"&OElig;&oelig;&Yuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities07.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 7 (mbstring / ISO-8859-1)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\tmb_internal_encoding('ISO-8859-1');\r\n\t$php_errormsg = NULL;\r\n\t@htmlentities(\"\\xe4\\xf6\\xfc\", ENT_QUOTES, '');\r\n\tif ($php_errormsg) {\r\n\t\tdie(\"skip ISO-8859-1 chracter set is not supported on this platform.\\n\");\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\n\tmb_internal_encoding('ISO-8859-1');\r\n\tprint mb_internal_encoding().\"\\n\";\r\n\t__var_dump(htmlentities(\"\\xe4\\xf6\\xfc\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nISO-8859-1\r\nstring(18) \"&auml;&ouml;&uuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities08.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 8 (mbstring / EUC-JP)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\tmb_internal_encoding('EUC-JP');\r\n\t$php_errormsg = NULL;\r\n\t@htmlentities(\"\\xa1\\xa2\\xa1\\xa3\\xa1\\xa4\", ENT_QUOTES, '');\r\n\tif ($php_errormsg) {\r\n\t\tdie(\"skip EUC-JP chracter set is not supported on this platform.\\n\");\t\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\n\tmb_internal_encoding('EUC-JP');\r\n\tprint mb_internal_encoding().\"\\n\";\r\n\t__var_dump(htmlentities(\"\\xa1\\xa2\\xa1\\xa3\\xa1\\xa4\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nEUC-JP\r\nstring(6) \"\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities09.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 9 (mbstring / Shift_JIS)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\tmb_internal_encoding('Shift_JIS');\r\n\t$php_errormsg = NULL;\r\n\t@htmlentities(\"\\x81\\x41\\x81\\x42\\x81\\x43\", ENT_QUOTES, '');\r\n\tif ($php_errormsg) {\r\n\t\tdie(\"skip Shift_JIS chracter set is not supported on this platform.\\n\");\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\n\tmb_internal_encoding('Shift_JIS');\r\n\tprint mb_internal_encoding().\"\\n\";\r\n\t__var_dump(htmlentities(\"\\x81\\x41\\x81\\x42\\x81\\x43\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nSJIS\r\nstring(6) \"ABC\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities10.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 10 (default_charset / cp1252)\r\n--INI--\r\noutput_handler=\r\nmbstring.internal_encoding=pass\r\ndefault_charset=cp1252\r\n--FILE--\r\n<?php\r\n\tprint ini_get('default_charset').\"\\n\";\r\n\t__var_dump(htmlentities(\"\\x82\\x86\\x99\\x9f\", ENT_QUOTES, ''));\r\n\t__var_dump(htmlentities(\"\\x80\\xa2\\xa3\\xa4\\xa5\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\ncp1252\r\nstring(28) \"&sbquo;&dagger;&trade;&Yuml;\"\r\nstring(32) \"&euro;&cent;&pound;&curren;&yen;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities11.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 11 (default_charset / ISO-8859-15)\r\n--INI--\r\noutput_handler=\r\nmbstring.internal_encoding=pass\r\ndefault_charset=ISO-8859-15\r\n--FILE--\r\n<?php\r\n\tprint ini_get('default_charset').\"\\n\";\r\n\t__var_dump(htmlentities(\"\\xbc\\xbd\\xbe\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nISO-8859-15\r\nstring(20) \"&OElig;&oelig;&Yuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities12.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 12 (default_charset / ISO-8859-1)\r\n--INI--\r\noutput_handler=\r\nmbstring.internal_encoding=pass\r\ndefault_charset=ISO-8859-1\r\n--FILE--\r\n<?php\r\n\tprint ini_get('default_charset').\"\\n\";\r\n\t__var_dump(htmlentities(\"\\xe4\\xf6\\xfc\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nISO-8859-1\r\nstring(18) \"&auml;&ouml;&uuml;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities13.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\tprint ini_get('default_charset').\"\\n\";\r\n\t__var_dump(bin2hex(htmlentities(\"\\xa1\\xa2\\xa1\\xa3\\xa1\\xa4\", ENT_QUOTES, '')));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities14.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 14 (default_charset / Shift_JIS)\r\n--INI--\r\noutput_handler=\r\nmbstring.internal_encoding=pass\r\ndefault_charset=Shift_JIS\r\n--FILE--\r\n<?php\r\n\tprint ini_get('default_charset').\"\\n\";\r\n\t__var_dump(htmlentities(\"\\x81\\x41\\x81\\x42\\x81\\x43\", ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nShift_JIS\r\nstring(6) \"ABC\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities15.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n\r\n$result = (bool)setlocale(LC_CTYPE, \"ru_RU.koi8r\");\r\nif (!$result || preg_match('/koi8/i', setlocale(LC_CTYPE, 0)) == 0) {\r\n\tdie(\"skip setlocale() failed\\n\");\r\n}\r\nsetlocale(LC_CTYPE, \"ru_RU.koi8r\");\r\n$str = \"\";\r\n__var_dump($str, htmlentities($str, ENT_QUOTES, ''));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities16.php.notest",
    "content": "--TEST--\r\nhtmlentities() test 16 (mbstring / cp1251)\r\n--INI--\r\noutput_handler=\r\n--SKIPIF--\r\n<?php\r\n\textension_loaded(\"mbstring\") or die(\"skip mbstring not available\\n\");\r\n\tif (!@mb_internal_encoding('cp1251') ||\r\n\t\t@htmlentities(\"\\x88\\xa9\\xd2\\xcf\\xd3\\xcb\\xcf\\xdb\\xce\\xd9\\xca\", ENT_QUOTES, '') == '') {\r\n\t\tdie(\"skip cp1251 character set is not available in this build.\\n\");\r\n\t}\r\n?>\r\n--FILE--\r\n<?php\r\nmb_internal_encoding('cp1251');\r\n$str = \"\\x88\\xa9\\xf0\\xee\\xf1\\xea\\xee\\xf8\\xed\\xfb\\xe9\";\r\n__var_dump($str, htmlentities($str, ENT_QUOTES, ''));\r\n?>\r\n--EXPECT--\r\nstring(11) \"\"\r\nstring(75) \"&euro;&copy;&#1088;&#1086;&#1089;&#1082;&#1086;&#1096;&#1085;&#1099;&#1081;\"\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/htmlentities17.php.notest",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('Phalanger.inc');\r\n$tests = array(\r\n\tarray(8768, '&wreath;', \"e28980\"),\r\n\tarray(8853, '&oplus;',  \"e28a95\"),\r\n\tarray(8855, '&otimes;', \"e28a97\"),\r\n\tarray(8869, '&perp;',   \"e28aa5\"),\r\n\tarray(8901, '&sdot;',   \"e28b85\"),\r\n\tarray(8968, '&lceil;',  \"e28c88\"),\r\n\tarray(8969, '&rceil;',  \"e28c89\"),\r\n\tarray(8970, '&lfloor;', \"e28c8a\"),\r\n\tarray(8971, '&rfloor;', \"e28c8b\"),\r\n\tarray(9001, '&lang;',   \"e28ca9\"),\r\n\tarray(9002, '&rang;',   \"e28caa\")\r\n);\r\n\r\nforeach ($tests as $test) {\r\n\t__var_dump(htmlentities(pack('H*', $test[2]), ENT_QUOTES, 'UTF-8'));\r\n}\r\n\r\nforeach ($tests as $test) {\r\n\tlist(,$result) = unpack('H6', html_entity_decode($test[1], ENT_QUOTES, 'UTF-8'));\r\n\t__var_dump($result);\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/http_build_query.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\n$array = array(\"foo\"=>\"bar\",\"baz\"=>1,\"test\"=>\"a ' \\\" \", \"abc\");\r\n__var_dump(http_build_query($array));\r\n__var_dump(http_build_query($array, 'foo'));\r\n__var_dump(http_build_query($array, 'foo', ';'));\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/implode.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho implode(array()).\"\\n\";\r\necho implode('nothing', array()).\"\\n\";\r\necho implode(array('foo', 'bar', 'baz')).\"\\n\";\r\necho implode(':', array('foo', 'bar', 'baz')).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/md5.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho md5(\"\").\"\\n\";\r\necho md5(\"a\").\"\\n\";\r\necho md5(\"abc\").\"\\n\";\r\necho md5(\"message digest\").\"\\n\";\r\necho md5(\"abcdefghijklmnopqrstuvwxyz\").\"\\n\";\r\necho md5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\").\"\\n\";\r\necho md5(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\").\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/md5raw.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho bin2hex(md5(\"\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"a\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"abc\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"message digest\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"abcdefghijklmnopqrstuvwxyz\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", TRUE)).\"\\n\";\r\necho bin2hex(md5(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\", TRUE)).\"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/nl2br.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\t__var_dump(nl2br(\"test\"));\r\n\t__var_dump(nl2br(\"\"));\r\n\t__var_dump(nl2br(NULL));\r\n\t__var_dump(nl2br(\"\\r\\n\"));\r\n\t__var_dump(nl2br(\"\\n\"));\r\n\t__var_dump(nl2br(\"\\r\"));\r\n\t__var_dump(nl2br(\"\\n\\r\"));\r\n\t\r\n\t__var_dump(nl2br(\"\\n\\r\\r\\n\\r\\r\\r\\r\"));\r\n\t__var_dump(nl2br(\"\\n\\r\\n\\n\\r\\n\\r\\r\\n\\r\\n\"));\r\n\t__var_dump(nl2br(\"\\n\\r\\n\\n\\n\\n\\r\\r\\r\\r\\n\\r\"));\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/quicktester.inc",
    "content": "<?php\r\n /*\r\n  Helper for simple tests to check return-value. Usage:\r\n\r\n  $tests = <<<TESTS\r\n   expected_return_value === expression\r\n   2                     === 1+1\r\n   4                     === 2*2\r\n   FALSE                 === @ fopen('non_existent_file')\r\nTESTS;\r\n  include( 'tests/quicktester.inc' );\r\n\r\n  Expect: OK\r\n\r\n  Remember to NOT put a trailing ; after a line!\r\n\r\n */\r\ninclude('Phalanger.inc');\r\nerror_reporting(E_ALL);  \r\n$tests = explode(\"\\n\",$tests);\r\n$success = TRUE;\r\nforeach ($tests as $n=>$test)\r\n{\r\n\t// ignore empty lines\r\n\tif (!$test) continue;\r\n\r\n\t// warn for trailing ;\r\n\tif (substr(trim($test), -1, 1) === ';') {\r\n\t\techo \"WARNING: trailing ';' found in test \".($n+1).\"\\n\";\r\n\t\texit;\r\n\t}\r\n\r\n\t// try for operators\r\n\t$operators = array('===', '~==');\r\n\t$operator = NULL;\r\n\tforeach ($operators as $a_operator) {\r\n\t\tif (strpos($test, $a_operator)!== FALSE) {\r\n\t\t\t$operator = $a_operator;\r\n\t\t\tlist($left,$right) = explode($operator, $test);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tif (!$operator) {\r\n\t\techo \"WARNING: unknown operator in '$test' (1)\\n\";\r\n\t\texit;\r\n\t}\r\n\r\n\t$left  = eval(\"return ($left );\");\r\n\t$right = eval(\"return ($right);\");\r\n\tswitch (@$operator) {\r\n\t\tcase '===': // exact match\r\n\t\t\t$result = $left === $right;\r\n\t\t\tbreak;\r\n\t\tcase '~==': // may differ after 12th significant number\r\n\t\t\tif (   !is_float($left ) && !is_int($left )\r\n\t\t\t\t|| !is_float($right) && !is_int($right)) {\r\n\t\t\t\t$result = FALSE;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t$result = abs(($left-$right) / $left) < 1e-12;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\techo \"WARNING: unknown operator in '$test' (2)\\n\";\r\n\t\t\texit;\r\n\t}\r\n\r\n\t$success = $success && $result;\r\n\tif (!$result) {\r\n\t\techo \"\\nAssert failed:\\n\";\r\n\t\techo \"$test\\n\";\r\n\t\techo \"Left:  \";__var_dump($left );\r\n\t\techo \"Right: \";__var_dump($right);\r\n\t}\r\n}\r\nif ($success) echo \"OK\";\r\n\t\t \r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/sha1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho sha1(\"abc\").\"\\n\";\r\necho sha1(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\").\"\\n\";\r\necho sha1(\"a\").\"\\n\";\r\necho sha1(\"0123456701234567012345670123456701234567012345670123456701234567\").\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/sha1raw.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  echo bin2hex(sha1(\"abc\", TRUE)).\"\\n\";\r\necho bin2hex(sha1(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\", TRUE)).\"\\n\";\r\necho bin2hex(sha1(\"a\", TRUE)).\"\\n\";\r\necho bin2hex(sha1(\"0123456701234567012345670123456701234567012345670123456701234567\", TRUE)).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/sprintf_f.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n__var_dump(sprintf(\"%3.2f\", 1.2));\r\n__var_dump(sprintf(\"%-3.2f\", 1.2));\r\n__var_dump(sprintf(\"%03.2f\", 1.2));\r\n__var_dump(sprintf(\"%-03.2f\", 1.2));\r\necho \"\\n\";\r\n__var_dump(sprintf(\"%5.2f\", 3.4));\r\n__var_dump(sprintf(\"%-5.2f\", 3.4));\r\n__var_dump(sprintf(\"%05.2f\", 3.4));\r\n__var_dump(sprintf(\"%-05.2f\", 3.4));\r\necho \"\\n\";\r\n__var_dump(sprintf(\"%7.2f\", -5.6));\r\n__var_dump(sprintf(\"%-7.2f\", -5.6));\r\n__var_dump(sprintf(\"%07.2f\", -5.6));\r\n__var_dump(sprintf(\"%-07.2f\", -5.6));\r\necho \"\\n\";\r\n__var_dump(sprintf(\"%3.4f\", 1.2345678));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/str_repeat.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$input = array('a', 'foo', 'barbazbax');\r\nforeach($input AS $i) {\r\n\tfor($n=0; $n<5; $n++) {\r\n\t\techo str_repeat($i, $n).\"\\n\";\r\n\t}\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/str_shuffle.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n  \r\n$s = '123';\r\nstr_shuffle($s);\r\n__var_dump($s);\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/str_word_count.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\nerror_reporting(0);\r\n$str = \"Hello friend, you're\\r\\nlooking          good today!\";\r\n$b =& $str;       \r\n__var_dump(str_word_count($str, 1));\r\n__var_dump(str_word_count($str, 2));\r\n__var_dump(str_word_count($str));\r\n__var_dump(str_word_count($str, 3)); \r\n__var_dump(str_word_count($str, 123));\r\n__var_dump(str_word_count($str, -1));\r\n__var_dump(str_word_count($str, 99999999999999999));\r\n// invalid input: __var_dump(str_word_count($str, array()));\r\n// invalid input: __var_dump(str_word_count($str, $b));\r\n__var_dump($str);\r\n\r\n$str2 = \"F0o B4r 1s bar foo\";\r\n__var_dump(str_word_count($str2, NULL, \"04\"));\r\n__var_dump(str_word_count($str2, NULL, \"01\"));\r\n__var_dump(str_word_count($str2, NULL, \"014\"));\r\n// invalid input: __var_dump(str_word_count($str2, NULL, array()));\r\n// invalid input: __var_dump(str_word_count($str2, NULL, new stdClass));\r\n__var_dump(str_word_count($str2, NULL, \"\"));\r\n__var_dump(str_word_count($str2, 1, \"04\"));\r\n__var_dump(str_word_count($str2, 1, \"01\"));\r\n__var_dump(str_word_count($str2, 1, \"014\"));\r\n// invalid input: __var_dump(str_word_count($str2, 1, array()));\r\n// invalid input: __var_dump(str_word_count($str2, 1, new stdClass));\r\n__var_dump(str_word_count($str2, 1, \"\"));\r\n__var_dump(str_word_count($str2, 2, \"04\"));\r\n__var_dump(str_word_count($str2, 2, \"01\"));\r\n__var_dump(str_word_count($str2, 2, \"014\"));\r\n// invalid input: __var_dump(str_word_count($str2, 2, array()));\r\n// invalid input: __var_dump(str_word_count($str2, 2, new stdClass));\r\n__var_dump(str_word_count($str2, 2, \"\"));\r\n__var_dump(str_word_count(\"foo'0 bar-0var\", 2, \"0\"));\r\n__var_dump(str_word_count(\"'foo'\", 2));\r\n__var_dump(str_word_count(\"'foo'\", 2, \"'\"));\r\n__var_dump(str_word_count(\"-foo-\", 2));\r\n__var_dump(str_word_count(\"-foo-\", 2, \"-\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strcspn.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n$a = \"22222222aaaa bbb1111 cccc\";\r\n$b = \"1234\";\r\n__var_dump($a);\r\n__var_dump($b);\r\n__var_dump(strcspn($a,$b));\r\n__var_dump(strcspn($a,$b,9));\r\n__var_dump(strcspn($a,$b,9,6));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strings001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n/* Do not change this test it is a README.TESTING example. */\r\n$s = \"alabala nica\".chr(0).\"turska panica\";\r\n__var_dump(strstr($s, \"nic\"));\r\n__var_dump(strrchr($s,\" nic\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strip_tags.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\techo strip_tags('NEAT <? cool < blah ?> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('NEAT <? cool > blah ?> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('NEAT <!-- cool < blah --> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('NEAT <!-- cool > blah --> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('NEAT <? echo \\\"\\\\\\\"\\\"?> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('NEAT <? echo \\'\\\\\\'\\'?> STUFF');\r\n\techo \"\\n\";\r\n\techo strip_tags('TESTS ?!!?!?!!!?!!');\r\n\techo \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strpos.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\t__var_dump(strpos(\"test string\", \"test\"));\r\n\t__var_dump(strpos(\"test string\", \"string\"));\r\n\t__var_dump(strpos(\"test string\", \"strin\"));\r\n\t__var_dump(strpos(\"test string\", \"t s\"));\r\n\t__var_dump(strpos(\"test string\", \"g\"));\r\n\t__var_dump(strpos(\"te\".chr(0).\"st\", chr(0)));\r\n\t__var_dump(strpos(\"tEst\", \"test\"));\r\n\t__var_dump(strpos(\"teSt\", \"test\"));\r\n\t__var_dump(@strpos(\"\", \"\"));\r\n\t__var_dump(@strpos(\"a\", \"\"));\r\n\t__var_dump(@strpos(\"\", \"a\"));\r\n\t__var_dump(@strpos(\"\\\\\\\\a\", \"\\\\a\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strrev.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\t$i = 0;\r\n\t$str = '';\r\n\r\n\twhile ($i<256) {\r\n\t\t$str .= chr($i++);\r\n\t}\r\n\t\r\n\t__var_dump(md5(strrev($str)));\r\n\t__var_dump(strrev(NULL));\r\n\t__var_dump(strrev(\"\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strripos.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\t__var_dump(strripos(\"test test string\", \"test\"));\r\n\t__var_dump(strripos(\"test string sTring\", \"string\"));\r\n\t__var_dump(strripos(\"test strip string strand\", \"str\"));\r\n\t__var_dump(strripos(\"I am what I am and that's all what I am\", \"am\", -3));\r\n\t__var_dump(strripos(\"test string\", \"g\"));\r\n\t__var_dump(strripos(\"te\".chr(0).\"st\", chr(0)));\r\n\t__var_dump(strripos(\"tEst\", \"test\"));\r\n\t__var_dump(strripos(\"teSt\", \"test\"));\r\n\t__var_dump(@strripos(\"foo\", \"f\", 1));\r\n\t__var_dump(@strripos(\"\", \"\"));\r\n\t__var_dump(@strripos(\"a\", \"\"));\r\n\t__var_dump(@strripos(\"\", \"a\"));\r\n\t__var_dump(@strripos(\"\\\\\\\\a\", \"\\\\a\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strrpos.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\t__var_dump(strrpos(\"test test string\", \"test\"));\r\n\t__var_dump(strrpos(\"test string sTring\", \"string\"));\r\n\t__var_dump(strrpos(\"test strip string strand\", \"str\"));\r\n\t__var_dump(strrpos(\"I am what I am and that's all what I am\", \"am\", -3));\r\n\t__var_dump(strrpos(\"test string\", \"g\"));\r\n\t__var_dump(strrpos(\"te\".chr(0).\"st\", chr(0)));\r\n\t__var_dump(strrpos(\"tEst\", \"test\"));\r\n\t__var_dump(strrpos(\"teSt\", \"test\"));\r\n\t__var_dump(@strrpos(\"foo\", \"f\", 1));\r\n\t__var_dump(@strrpos(\"\", \"\"));\r\n\t__var_dump(@strrpos(\"a\", \"\"));\r\n\t__var_dump(@strrpos(\"\", \"a\"));\r\n\t__var_dump(@strrpos(\"\\\\\\\\a\", \"\\\\a\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strspn.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n$a = \"22222222aaaa bbb1111 cccc\";\r\n$b = \"1234\";\r\n__var_dump($a);\r\n__var_dump($b);\r\n__var_dump(strspn($a,$b));\r\n__var_dump(strspn($a,$b,2));\r\n__var_dump(strspn($a,$b,2,3));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strstr.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\r\n\t__var_dump(strstr(\"test string\", \"test\"));\r\n\t__var_dump(strstr(\"test string\", \"string\"));\r\n\t__var_dump(strstr(\"test string\", \"strin\"));\r\n\t__var_dump(strstr(\"test string\", \"t s\"));\r\n\t__var_dump(strstr(\"test string\", \"g\"));\r\n\t__var_dump(md5(strstr(\"te\".chr(0).\"st\", chr(0))));\r\n\t__var_dump(strstr(\"tEst\", \"test\"));\r\n\t__var_dump(strstr(\"teSt\", \"test\"));\r\n\t__var_dump(@strstr(\"\", \"\"));\r\n\t__var_dump(@strstr(\"a\", \"\"));\r\n\t__var_dump(@strstr(\"\", \"a\"));\r\n\t__var_dump(md5(@strstr(\"\\\\\\\\a\\\\\", \"\\\\a\")));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strtoupper.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n  if (!setlocale(LC_CTYPE, \"de_DE\", \"de\", \"german\", \"ge\", \"de_DE.ISO8859-1\", \"ISO8859-1\")) {\r\n        die(\"skip locale needed for this test is not supported on this platform\"); }\r\n\r\n$chars = \"\";\r\n// Not sure which is most portable. BSD's answer to\r\n// this one. A small array based on PHP_OS should\r\n// cover a majority of systems and makes the problem\r\n// of locales transparent for the end user.\r\nsetlocale(LC_CTYPE, \"de_DE\", \"de\", \"german\", \"ge\", \"de_DE.ISO8859-1\", \"ISO8859-1\");\r\necho bin2hex(strtoupper($chars)).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strtr.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\r\n/* Do not change this test it is a README.TESTING example. */\r\n$trans = array(\"hello\"=>\"hi\", \"hi\"=>\"hello\", \"a\"=>\"A\", \"world\"=>\"planet\");\r\n__var_dump(strtr(\"# hi all, I said hello world! #\", $trans));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/strval.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\r\n$foo = 'bar';\r\n__var_dump(strval($foo));\r\ndefine('FOO', 'BAR');\r\n__var_dump(strval(FOO));\r\n__var_dump(strval('foobar'));\r\n__var_dump(strval(1));\r\n__var_dump(strval(1.1));\r\n__var_dump(strval(true));\r\n__var_dump(strval(false));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/substr_count.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n\t// invalid input: __var_dump(@substr_count(\"\", \"\"));\r\n\t// invalid input: __var_dump(@substr_count(\"a\", \"\"));\r\n\t__var_dump(@substr_count(\"\", \"a\"));\r\n\t__var_dump(@substr_count(\"\", \"a\"));\r\n\t__var_dump(@substr_count(\"\", chr(0)));\r\n\t\r\n\t$a = str_repeat(\"abcacba\", 100);\r\n\t__var_dump(@substr_count($a, \"bca\"));\r\n\t\r\n\t$a = str_repeat(\"abcacbabca\", 100);\r\n\t__var_dump(@substr_count($a, \"bca\"));\r\n\r\n\t__var_dump(substr_count($a, \"bca\", 200));\r\n\t__var_dump(substr_count($a, \"bca\", 200, 50));\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/substr_replace.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  require('Phalanger.inc');\r\n$str = \"try this\";\r\n$repl = \"bala \";\r\n$start = 2;\r\necho \"\\n\";\r\n\r\n\r\necho \"substr_replace('$str', '$repl', $start)\\n\";\r\n__var_dump(substr_replace($str, $repl, $start));\r\necho \"\\n\";\r\n\r\n$len = 3;\r\necho \"substr_replace('$str', '$repl', $start, $len)\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len));\r\necho \"\\n\";\r\n\r\n$len = 0;\r\necho \"substr_replace('$str', '$repl', $start, $len)\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len));\r\necho \"\\n\";\r\n\r\n$len = -2;\r\necho \"substr_replace('$str', '$repl', $start, $len)\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len));\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = \"try this\";\r\n$repl = array(\"bala \");\r\n$start = 4;\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\"\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\"\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = array(\"bala \");\r\n$start = array(4);\r\n$len = array(3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\"\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$len = array(3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$len = array(0);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$len = array(-2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\", \".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = \"bala \";\r\n$start = 4;\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = 4;\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = 4;\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = 4;\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = 4;\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = 4;\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = 4;\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = \"bala \";\r\n$start = array(4);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4);\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4);\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4);\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4);\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = 3;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = 0;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = -2;\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(0);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(0);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(-2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(-2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(3,2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(3,2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(3,2);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(0,0);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(0,0);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = array(\"bala \");\r\n$start = array(4,2);\r\n$len = array(-2,-3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\necho \"\\n\";\r\n\r\n\r\n$str = array(\"ala portokala\", \"try this\");\r\n$repl = \"bala \";\r\n$start = array(4,2);\r\n$len = array(-2,-3);\r\necho str_replace(\"\\n\",\"\",\"substr_replace(\".__var_dump($str,1).\", \".__var_dump($repl,1).\",\".__var_dump($start,1).\", \".__var_dump($len,1).\")\").\"\\n\";\r\n__var_dump(substr_replace($str, $repl, $start, $len)).\"\\n\";\r\necho \"\\n\";\r\n\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/trim.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n// Unicode treatment of intervals\r\n\r\n$tests = <<<TESTS\r\n'ABC' ===  trim('ABC')\r\n'ABC' === ltrim('ABC')\r\n'ABC' === rtrim('ABC')\r\n'ABC' ===  trim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\")\r\n\"ABC \\\\0\\\\t\\\\n\" === ltrim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\")\r\n\" \\\\0\\\\t\\\\nABC\" === rtrim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\")\r\n\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\" ===  trim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\",'')\r\n\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\" === ltrim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\",'')\r\n\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\" === rtrim(\" \\\\0\\\\t\\\\nABC \\\\0\\\\t\\\\n\",'')\r\n\"ABC\\\\x50\\\\xC1\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x51..\\\\xC0\")\r\n\"ABC\\\\x50\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x51..\\\\xC1\")\r\n\"ABC\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x50..\\\\xC1\")\r\n\"ABC\\\\x50\\\\xC1\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x51..\\\\xC0\")\r\n\"ABC\\\\x50\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x51..\\\\xC1\")\r\n\"ABC\" === trim(\"ABC\\\\x50\\\\xC1\\\\x60\\\\x90\",\"\\\\x50..\\\\xC1\")\r\nTESTS;\r\n\r\ninclude('quicktester.inc');\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/url_t.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n$sample_urls = array (\r\n//'64.246.30.37:80/',\r\n//'http://:hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n//'http://secret@hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n//'http://secret:hid:out@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n//'file:/path/to/file',\r\n\r\n'',\r\n'64.246.30.37',\r\n'http://64.246.30.37',\r\n'http://64.246.30.37/',\r\n'64.246.30.37/',\r\n'php.net',\r\n'php.net/',\r\n'http://php.net',\r\n'http://php.net/',\r\n'www.php.net',\r\n'www.php.net/',\r\n'http://www.php.net',\r\n'http://www.php.net/',\r\n'www.php.net:80',\r\n'http://www.php.net:80',\r\n'http://www.php.net:80/',\r\n'http://www.php.net/index.php',\r\n'www.php.net/?',\r\n'www.php.net:80/?',\r\n'http://www.php.net/?',\r\n'http://www.php.net:80/?',\r\n'http://www.php.net:80/index.php',\r\n'http://www.php.net:80/foo/bar/index.php',\r\n'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php',\r\n'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php?lots=1&of=2&parameters=3&too=4&here=5',\r\n'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/',\r\n'http://www.php.net:80/this/is/a/very/deep/directory/structure/and/file.php',\r\n'http://www.php.net:80/this/../a/../deep/directory',\r\n'http://www.php.net:80/this/../a/../deep/directory/',\r\n'http://www.php.net:80/this/is/a/very/deep/directory/../file.php',\r\n'http://www.php.net:80/index.php',\r\n'http://www.php.net:80/index.php?',\r\n'http://www.php.net:80/#foo',\r\n'http://www.php.net:80/?#',\r\n'http://www.php.net:80/?test=1',\r\n'http://www.php.net/?test=1&',\r\n'http://www.php.net:80/?&',\r\n'http://www.php.net:80/index.php?test=1&',\r\n'http://www.php.net/index.php?&',\r\n'http://www.php.net:80/index.php?foo&',\r\n'http://www.php.net/index.php?&foo',\r\n'http://www.php.net:80/index.php?test=1&test2=char&test3=mixesCI',\r\n'www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n'http://secret@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n'http://secret:@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n'http://secret:hideout@www.php.net/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n'http://secret:hid:out@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123',\r\n'nntp://news.php.net',\r\n'ftp://ftp.gnu.org/gnu/glic/glibc.tar.gz',\r\n'zlib:http://foo@bar',\r\n'zlib:filename.txt',\r\n'zlib:/path/to/my/file/file.txt',\r\n'foo://foo@bar',\r\n'mailto:me@mydomain.com',\r\n'/foo.php?a=b&c=d',\r\n'foo.php?a=b&c=d',\r\n'http://user:passwd@www.example.com:8080?bar=1&boom=0',\r\n'file:///path/to/file',\r\n'file://path/to/file',\r\n'http://1.2.3.4:/abc.asp?a=1&b=2',\r\n'http://foo.com#bar',\r\n'scheme:',\r\n'foo+bar://baz@bang/bla',\r\n\r\n);\r\n\r\n    foreach ($sample_urls as $url) {\r\n        __var_dump($url);\r\n        __var_dump(@parse_url($url));\r\n    }\r\n\r\n    $url = 'http://secret:hideout@www.php.net:80/index.php?test=1&test2=char&test3=mixesCI#some_page_ref123';\r\n    foreach (array(PHP_URL_SCHEME,PHP_URL_HOST,PHP_URL_PORT,PHP_URL_USER,PHP_URL_PASS,PHP_URL_PATH,PHP_URL_QUERY,PHP_URL_FRAGMENT) as $v) {\r\n\t__var_dump(parse_url($url, $v));\r\n    }\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/strings/wordwrap.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n$tests = <<<TESTS\r\n\"12345 12345 12345 12345\" === wordwrap(\"12345 12345 12345 12345\")\r\n\"12345 12345\\\\n1234567890\\\\n1234567890\" === wordwrap(\"12345 12345 1234567890 1234567890\",12)\r\n\"12345\\\\n12345\\\\n12345\\\\n12345\" === wordwrap(\"12345 12345 12345 12345\",0)\r\n\"12345ab12345ab12345ab12345\" === wordwrap(\"12345 12345 12345 12345\",0,\"ab\")\r\n\"12345 12345ab1234567890ab1234567890\" === wordwrap(\"12345 12345 1234567890 1234567890\",12,\"ab\")\r\n\"123ab123ab123\" === wordwrap(\"123ab123ab123\", 3, \"ab\")\r\n\"123ab123ab123\" === wordwrap(\"123ab123ab123\", 5, \"ab\")\r\n\"123ab 123ab123\" === wordwrap(\"123  123ab123\", 3, \"ab\")\r\n\"123ab123ab123\" === wordwrap(\"123 123ab123\", 5, \"ab\")\r\n\"123 123ab123\" === wordwrap(\"123 123 123\", 10, \"ab\")\r\n\r\n\"123ab123ab123\" === wordwrap(\"123ab123ab123\", 3, \"ab\", 1)\r\n\"123ab123ab123\" === wordwrap(\"123ab123ab123\", 5, \"ab\", 1)\r\n\"123ab 12ab3ab123\" === wordwrap(\"123  123ab123\", 3, \"ab\", 1)\r\n\"123 ab123ab123\" === wordwrap(\"123  123ab123\", 5, \"ab\", 1)\r\n\"123  123ab 123\" === wordwrap(\"123  123  123\", 8, \"ab\", 1)\r\n\"123 ab12345 ab123\" === wordwrap(\"123  12345  123\", 8, \"ab\", 1)\r\n\"1ab2ab3ab4\" === wordwrap(\"1234\", 1, \"ab\", 1)\r\n\r\n\"12345|12345|67890\" === wordwrap(\"12345 1234567890\", 5, \"|\", 1)\r\n\r\n\"123|==1234567890|==123\" === wordwrap(\"123 1234567890 123\", 10, \"|==\", 1)\r\n\r\nTESTS;\r\n\r\ninclude('quicktester.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/time/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\tif (!function_exists('microtime'))  die('skip microtime() not available'); \r\n\t\r\n$passed = 0;\r\n$failed = 0;\r\n$last_m = 0;\r\n$last_t = 0;\r\n$result = '';\r\n\r\nset_time_limit(0);\r\n\r\nfor ($i=1;$i<=100000;$i++) {\r\n\tlist($micro,$time)=explode(\" \",microtime());\r\n\tif ($time > $last_t || ($time == $last_t && $micro >= $last_m)) {\r\n\t\t$passed++;\r\n\t} else if ($failed++ <=10) {\r\n\t\t$result .= sprintf('%06d', $i).\": $time $micro < $last_t $last_m\\n\";\r\n\t}\r\n\t$last_m = $micro;\r\n\t$last_t = $time;\r\n}\r\necho \"Passed: $passed\\n\";\r\necho \"Failed: $failed\\n\";\r\necho $result;\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/time/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/standard/time/idate.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nputenv (\"TZ=GMT0\");\r\n\r\n$tmp = \"UYzymndjHGhgistwLBIW\";\r\nfor($a = 0;$a < strlen($tmp); $a++){\r\n\techo $tmp[$a], ': ', idate($tmp[$a], 1043324459).\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/strings/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nerror_reporting(0);\r\n\r\necho \"Testing strtok: \";\r\n\r\n$str = \"testing 1/2\\\\3\";\r\n$tok1 = strtok($str, \" \");\r\n$tok2 = strtok(\"/\");\r\n$tok3 = strtok(\"\\\\\");\r\n$tok4 = strtok(\".\");\r\nif ($tok1 != \"testing\") {\r\n\techo(\"failed 1\\n\");\r\n} elseif ($tok2 != \"1\") {\r\n\techo(\"failed 2\\n\");\r\n} elseif ($tok3 != \"2\") {\r\n\techo(\"failed 3\\n\");\r\n} elseif ($tok4 != \"3\") {\r\n\techo(\"failed 4\\n\");\r\n} else {\r\n\techo(\"passed\\n\");\r\n}\r\n\r\necho \"Testing strstr: \";\r\n$test = \"This is a test\";\r\n$found1 = strstr($test, 32);\r\n$found2 = strstr($test, \"a \");\r\nif ($found1 != \" is a test\") {\r\n\techo(\"failed 1\\n\");\r\n} elseif ($found2 != \"a test\") {\r\n\techo(\"failed 2\\n\");\r\n} else {\r\n\techo(\"passed\\n\");\r\n}\r\n\r\necho \"Testing strrchr: \";\r\n$test = \"fola fola blakken\";\r\n$found1 = strrchr($test, \"b\");\r\n$found2 = strrchr($test, 102);\r\nif ($found1 != \"blakken\") {\r\n\techo(\"failed 1\\n\");\r\n} elseif ($found2 != \"fola blakken\") {\r\n\techo(\"failed 2\\n\");\r\n}\r\nelse {\r\n\techo(\"passed\\n\");\r\n}\r\n\r\necho \"Testing strtoupper: \";\r\n$test = \"abCdEfg\";\r\n$upper = strtoupper($test);\r\nif ($upper == \"ABCDEFG\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing strtolower: \";\r\n$test = \"ABcDeFG\";\r\n$lower = strtolower($test);\r\nif ($lower == \"abcdefg\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing substr: \";\r\n$tests = $ok = 0;\r\n$string = \"string12345\";\r\n$tests++; if (substr($string, 2, 10) == \"ring12345\") { $ok++; }\r\n$tests++; if (substr($string, 4, 7) == \"ng12345\") { $ok++; }\r\n$tests++; if (substr($string, 4) == \"ng12345\") { $ok++; }\r\n$tests++; if (substr($string, 10, 2) == \"5\") { $ok++; }\r\n$tests++; if (substr($string, 6, 0) == \"\") { $ok++; }\r\n$tests++; if (substr($string, -2, 2) == \"45\") { $ok++; }\r\n$tests++; if (substr($string, 1, -1) == \"tring1234\") { $ok++; }\r\n$tests++; if (substr($string, -1, -2) == \"\") { $ok++; }\r\n$tests++; if (substr($string, -3, -2) == \"3\") { $ok++; }\r\n\r\nif ($tests == $ok) {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\n$raw = ' !\"#$%&\\'()*+,-./0123456789:;<=>?'\r\n     . '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_'\r\n     . '`abcdefghijklmnopqrstuvwxyz{|}~'\r\n     . \"\\0\";\r\n\r\necho \"Testing rawurlencode: \";\r\n$encoded = rawurlencode($raw);\r\n$correct = '%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F'\r\n         . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_'\r\n         . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E'\r\n         . '%00';\r\nif (rawurldecode($encoded) == $raw) {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing rawurldecode: \";\r\n$decoded = rawurldecode($correct);\r\nif ($decoded == $raw) {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing urlencode: \";\r\n$encoded = urlencode($raw);\r\n$correct = '+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F'\r\n         . '%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_'\r\n         . '%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E'\r\n         . '%00';\r\nif (urldecode($encoded) == $raw) { // comparing the converted value does not work (casing, etc.)\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing urldecode: \";\r\n$decoded = urldecode($correct);\r\nif ($decoded == $raw) {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing quotemeta: \";\r\n$raw = \"a.\\\\+*?\" . chr(91) . \"^\" . chr(93) . \"b\\$c\";\r\n$quoted = quotemeta($raw);\r\nif ($quoted == \"a\\\\.\\\\\\\\\\\\+\\\\*\\\\?\\\\[\\\\^\\\\]b\\\\\\$c\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing ufirst: \";\r\n$str = \"fahrvergnuegen\";\r\n$uc = ucfirst($str);\r\nif ($uc == \"Fahrvergnuegen\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing strtr: \";\r\n$str = \"test abcdefgh\";\r\n$tr = strtr($str, \"def\", \"456\");\r\nif ($tr == \"t5st abc456gh\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing addslashes: \";\r\n$str = \"\\\"\\\\'\";\r\n$as = addslashes($str);\r\nif ($as == \"\\\\\\\"\\\\\\\\\\\\'\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\necho \"Testing stripslashes: \";\r\n$str = \"\\$\\\\'\";\r\n$ss = stripslashes($str);\r\nif ($ss == \"\\$'\") {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\n\r\necho \"Testing uniqid: \";\r\n$str = \"prefix\";\r\n$ui1 = uniqid($str);\r\n$ui2 = uniqid($str);\r\n\r\n$len = strncasecmp(PHP_OS, 'CYGWIN', 6) ? 19 : 29;\r\n\r\nif (strlen($ui1) == strlen($ui2) && strlen($ui1) == $len && $ui1 != $ui2) {\r\n\techo(\"passed\\n\");\r\n} else {\r\n\techo(\"failed!\\n\");\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/strings/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nerror_reporting(0);\r\n\r\n$fp = fopen(\"php://stdout\", \"w\") or die(\"Arrggsgg!!\");\r\n$x = fprintf($fp, \"fprintf test 1:%.5s\", \"abcdefghij\");\r\necho \"\\n\";\r\necho ($x),\"\\n\";\r\n\r\nprintf(\"printf test 1:%s\\n\", \"simple string\");\r\nprintf(\"printf test 2:%d\\n\", 42);\r\nprintf(\"printf test 3:%f\\n\", 10.0/3);\r\nprintf(\"printf test 4:%.10f\\n\", 10.0/3);\r\nprintf(\"printf test 5:%-10.2f\\n\", 2.5);\r\nprintf(\"printf test 6:%-010.2f\\n\", 2.5);\r\nprintf(\"printf test 7:%010.2f\\n\", 2.5);\r\nprintf(\"printf test 8:<%20s>\\n\", \"foo\");\r\nprintf(\"printf test 9:<%-20s>\\n\", \"bar\");\r\nprintf(\"printf test 10: 123456789012345\\n\");\r\nprintf(\"printf test 10:<%15s>\\n\", \"hyesterettsjustitiarius\");\r\nprintf(\"printf test 11: 123456789012345678901234567890\\n\");\r\nprintf(\"printf test 11:<%30s>\\n\", \"hyesterettsjustitiarius\");\r\nprintf(\"printf test 12:%5.2f\\n\", -12.34);\r\nprintf(\"printf test 13:%5d\\n\", -12);\r\nprintf(\"printf test 14:%c\\n\", 64);\r\nprintf(\"printf test 15:%b\\n\", 170);\r\nprintf(\"printf test 16:%x\\n\", 170);\r\nprintf(\"printf test 17:%X\\n\", 170);\r\nprintf(\"printf test 18:%16b\\n\", 170);\r\nprintf(\"printf test 19:%16x\\n\", 170);\r\nprintf(\"printf test 20:%16X\\n\", 170);\r\nprintf(\"printf test 21:%016b\\n\", 170);\r\nprintf(\"printf test 22:%016x\\n\", 170);\r\nprintf(\"printf test 23:%016X\\n\", 170);\r\nprintf(\"printf test 24:%.5s\\n\", \"abcdefghij\");\r\nprintf(\"printf test 25:%-2s\\n\", \"gazonk\");\r\nprintf(\"printf test 26:%2\\$d %1\\$d\\n\", 1, 2);\r\nprintf(\"printf test 27:%3\\$d %d %d\\n\", 1, 2, 3);\r\nprintf(\"printf test 28:%2\\$02d %1\\$2d\\n\", 1, 2);\r\nprintf(\"printf test 29:%2\\$-2d %1\\$2d\\n\", 1, 2);\r\nprint(\"printf test 30:\"); printf(\"%0\\$s\", 1); print(\"x\\n\");\r\nvprintf(\"vprintf test 1:%2\\$-2d %1\\$2d\\n\", array(1, 2));\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/strings/004.php.notest",
    "content": "--TEST--\r\nhighlight_string() buffering\r\n--INI--\r\nhighlight.string=#DD0000\r\nhighlight.comment=#FF9900\r\nhighlight.keyword=#007700\r\nhighlight.bg=#FFFFFF\r\nhighlight.default=#0000BB\r\nhighlight.html=#000000\r\n--FILE--\r\n<?php \r\n$var = highlight_string(\"<br /><?php echo \\\"foo\\\"; ?><br />\");\r\n$var = highlight_string(\"<br /><?php echo \\\"bar\\\"; ?><br />\", TRUE);\r\necho \"\\n[$var]\\n\";\r\n?>\r\n--EXPECT--\r\n<code><span style=\"color: #000000\">\r\n&lt;br&nbsp;/&gt;<span style=\"color: #0000BB\">&lt;?php&nbsp;</span><span style=\"color: #007700\">echo&nbsp;</span><span style=\"color: #DD0000\">\"foo\"</span><span style=\"color: #007700\">;&nbsp;</span><span style=\"color: #0000BB\">?&gt;</span>&lt;br&nbsp;/&gt;</span>\r\n</code>\r\n[<code><span style=\"color: #000000\">\r\n&lt;br&nbsp;/&gt;<span style=\"color: #0000BB\">&lt;?php&nbsp;</span><span style=\"color: #007700\">echo&nbsp;</span><span style=\"color: #DD0000\">\"bar\"</span><span style=\"color: #007700\">;&nbsp;</span><span style=\"color: #0000BB\">?&gt;</span>&lt;br&nbsp;/&gt;</span>\r\n</code>]\r\n"
  },
  {
    "path": "Testing/Tests/@PHP/strings/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/strings/bug22592.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$wrong = $correct = 'abcdef';\r\n\r\n$t = $x[] = 'x';\r\n\r\necho($correct),\"\\n\";\r\necho($wrong),\"\\n\";\r\n\r\n$correct[1] = '*';\r\n$correct[3] = '*';\r\n$correct[5] = '*';\r\n\r\n// This produces the \r\n$wrong[1] = $wrong[3] = $wrong[5] = '*';\r\n\r\necho ($correct),\"\\n\";\r\necho ($wrong),\"\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/@PHP/strings/bug26703.php.notest",
    "content": "--TEST--\r\nBug #26703 (Certain characters inside strings incorrectly treated as keywords)\r\n--INI--\r\nhighlight.string=#DD0000\r\nhighlight.comment=#FF9900\r\nhighlight.keyword=#007700\r\nhighlight.bg=#FFFFFF\r\nhighlight.default=#0000BB\r\nhighlight.html=#000000\r\n--FILE--\r\n<?php\r\n\thighlight_string('<?php echo \"foo[] $a \\n\"; ?>');\r\n?>\r\n--EXPECT--\r\n<code><span style=\"color: #000000\">\r\n<span style=\"color: #0000BB\">&lt;?php&nbsp;</span><span style=\"color: #007700\">echo&nbsp;</span><span style=\"color: #DD0000\">\"foo[]&nbsp;$a&nbsp;\\n\"</span><span style=\"color: #007700\">;&nbsp;</span><span style=\"color: #0000BB\">?&gt;</span>\r\n</span>\r\n</code>\r\n"
  },
  {
    "path": "Testing/Tests/Arrays/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$a = array(1=>\"foo\", \"foo\"=>\"bar\");\r\necho $a[\"foo\"].\" \".$a[1];\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_diff_intersect.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  $array1 = array(\"a\" => \"green\", \"red\", \"red\", \"blue\", \"blue\", \"blue\"); \r\n  $array2 = array(\"b\" => \"green\", \"yellow\", \"q\" => \"red\", \"red\", \"blue\", \"blue\"); \r\n  $array3 = array(\"b\" => \"green\", \"yellow\", \"yellow\",\"blue\", \"blue\",\"r\" => \"blue\", \"blue\",\"blue\", \"blue\"); \r\n  $array4 = array(\"b\" => \"green\", \"yellow\", \"red\", \"hello\", \"blue\"); \r\n  print_r(array_diff($array1, $array2, $array3, $array4)); \r\n  print_r(array_intersect($array1, $array2, $array3, $array4)); \r\n  print_r(array_diff($array4, $array3, $array2, $array1)); \r\n  print_r(array_intersect($array4, $array3, $array2, $array1)); \r\n  print_r(array_diff_assoc($array1, $array2, $array3, $array4)); \r\n  print_r(array_intersect_assoc($array1, $array2, $array3, $array4)); \r\n  print_r(array_diff_assoc($array4, $array3, $array2, $array1)); \r\n  print_r(array_intersect_assoc($array4, $array3, $array2, $array1)); \r\n  \r\n\r\n  $a = array(1,2,3);\r\n  print_r(array_intersect($a, $a, $a)); \r\n  print_r(array_diff($a, $a, $a)); \r\n\r\n  $array1 = array(1,2,3);\r\n  $array2 = array(1,1,1,1,1);\r\n  $array3 = array(2,2,2,2,2);\r\n  print_r(array_diff($array1, $array2, $array3));  \r\n  print_r(array_intersect($array1, $array2, $array3));  \r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Arrays/array_diff_intersect2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  function key_compare_func($a, $b) \r\n  {\r\n    if ($a === $b) {\r\n        return 0;\r\n    }\r\n    return ($a > $b)? 1:-1;\r\n  }\r\n\r\n  class cr \r\n  {\r\n    private $priv_member;\r\n    function cr($val) \r\n    {\r\n        $this->priv_member = $val;\r\n    }\r\n     \r\n    function comp_func_cr($a, $b) \r\n    {\r\n        if ($a->priv_member === $b->priv_member) return 0;\r\n        return ($a->priv_member > $b->priv_member)? 1:-1;\r\n    }\r\n   \r\n    function comp_func_key($a, $b) \r\n    {\r\n        if ($a === $b) return 0;\r\n        return ($a > $b)? 1:-1;\r\n    }    \r\n  }\r\n  $a = array(\"0.1\" => new cr(9), \"0.5\" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);\r\n  $b = array(\"0.2\" => new cr(9), \"0.5\" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);\r\n  $array1 = array(\"a\" => \"green\", \"b\" => \"brown\", \"c\" => \"blue\", \"red\");\r\n  $array2 = array(\"a\" => \"green\", \"yellow\", \"red\");\r\n\r\n  print_r(array_udiff($a, $b, array(\"cr\", \"comp_func_cr\")));\r\n  print_r(array_udiff_assoc($a, $b, array(\"cr\", \"comp_func_cr\")));\r\n  print_r(array_udiff_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), array(\"cr\", \"comp_func_key\")));\r\n  print_r(array_diff_uassoc($array1, $array2, \"key_compare_func\"));\r\n  print(\"------------------------------------\\n\");\r\n  print_r(array_uintersect($a, $b, array(\"cr\", \"comp_func_cr\")));\r\n  print_r(array_uintersect_assoc($a, $b, array(\"cr\", \"comp_func_cr\")));\r\n  print_r(array_uintersect_uassoc($a, $b, array(\"cr\", \"comp_func_cr\"), array(\"cr\", \"comp_func_key\")));\r\n  print_r(array_intersect_uassoc($array1, $array2, \"key_compare_func\"));\r\n  \r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_diff_intersect3.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction key_compare_func($key1, $key2)\r\n{\r\n   if ($key1 == $key2)\r\n       return 0;\r\n   else if ($key1 > $key2)\r\n       return 1;\r\n   else\r\n       return -1;\r\n}\r\n\r\n$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);\r\n$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'  => 8);\r\nvar_dump(array_diff_key($array1, $array2));\r\n\r\n$array1 = array(1 => 2,2 => 3);\r\n$array2 = array(\"02\" => 10);\r\nvar_dump(array_diff_key($array1, $array2));\r\n\r\n$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);\r\n$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'  => 8);\r\n\r\nvar_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));\r\n\r\n$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);\r\n$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'  => 8);\r\n\r\nvar_dump(array_intersect_key($array1, $array2));\r\n\r\n$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);\r\n$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'  => 8);\r\n\r\nvar_dump(array_intersect_ukey($array1, $array2, 'key_compare_func'));\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_filter false entries #22016.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tvar_dump( array_filter( array(1,TRUE,2,FALSE,3,0,\"test\") ) );\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_instantiated.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n$x = array();\r\n\r\nif ($x) \r\n\techo \"x instantied, \";\r\nelse\r\n\techo \"x empty, \";\r\n\t\r\n$y = array(1);\r\n\r\nif ($y) \r\n\techo \"y instantied\";\r\nelse\r\n\techo \"y empty\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_map.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  function f($x,$y,&$z)\r\n  {\r\n    $result = \"$x $y $z\";\r\n    $z = 'x';\r\n    return $result;\r\n  }\r\n\r\n  function g($x)\r\n  {\r\n    return $x+1;\r\n  }\r\n  \r\n  $a = array(1,2,3);\r\n  $b = array('A','B','C');\r\n  $c = array(0,0);\r\n  $d = array('A' => 1,10 => 2);\r\n  \r\n  print_r(array_map(null,$a,$b,$c));\r\n  print_r(array_map(\"f\",$a,$b,$c));\r\n  print_r(array_map(\"g\",$d));\r\n\r\n  print_r($a);\r\n  print_r($b);\r\n  print_r($c);\r\n  print_r($d);\r\n?>  "
  },
  {
    "path": "Testing/Tests/Arrays/array_merge_recursive.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$ar1 = array(\"color\" => array(\"favorite\" => \"red\"), 1 => array(1,2,3), \"q\" => null);\r\n$ar2 = array(10, \"color\" => array(\"favorite\" => \"green\", \"blue\"), 1 => array(4,5,6), \"q\" => null);\r\n$ar3 = array(\"q\" => \"x\");\r\nprint_r(array_merge_recursive($ar1, $ar2, $ar3));\r\n\r\n$x = array(1,2,3);\r\n$ar1 = array(\"a\" => &$x);\r\n$ar2 = array(\"a\" => \"e\");\r\n$a = array_merge_recursive($ar1, $ar2);\r\nprint_r($a);\r\n$x = \"hello!\";\r\nprint_r($a);\r\n\r\n$x = 1;\r\n$ar1 = array(\"a\" => &$x);\r\n$ar2 = array(\"b\" => 2);\r\nprint_r($a = array_merge_recursive($ar1, $ar2));\r\n$x = \"xxx\";\r\nprint_r($a);\r\n\r\n$ar1 = array(\"a\" => &$ar1);\r\n$ar2 = array(\"a\" => array(1,2,3));\r\nprint_r(array_merge_recursive($ar1, $ar2));\r\n\r\n$ar1 = array(\"a\" => array(\"b\" => 1,\"c\" => 1));\r\n$ar2 = array(\"a\" => array(\"d\" => 2,\"b\" => 1));\r\n$ar3 = array(\"a\" => array(\"d\" => 3));\r\nprint_r(array_merge_recursive($ar1, $ar2, $ar3));\r\n\r\n$x = null;\r\n$ar1 = array(\"a\" => &$x);\r\n$ar2 = array(\"a\" => null);\r\nprint_r($a = array_merge_recursive($ar1, $ar2));\r\n$x = \"bye\";\r\nprint_r($a);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_op.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$x = array();\r\n$y = array(1);\r\n\r\n\r\nvar_dump(!$x);\r\nvar_dump(!$y);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_reduce1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction &t(&$a, &$b)\r\n{\r\n  static $o = 1;\r\n  \r\n  $a[$b] = $o;\r\n  $b = $o;\r\n  \r\n  $o++;\r\n  \r\n  return $a;\r\n}\r\n\r\n$array0 = array(\"a\", \"b\", \"c\", \"d\", \"e\"); \r\n$array1 = array();\r\nprint_r(array_reduce($array0,\"t\",$array1)); \r\nprint_r($array0);\r\nprint_r($array1);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_reduce2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction rsum($v, $w) { \r\n   $v += $w; \r\n   return $v; \r\n} \r\n\r\nfunction rmul($v, $w) { \r\n   $v *= $w; \r\n   return $v; \r\n} \r\n\r\n$a = array(1, 2, 3, 4, 5); \r\n$x = array(); \r\n$b = array_reduce($a, \"rsum\"); \r\n$c = array_reduce($a, \"rmul\", 10); \r\n$d = array_reduce($x, \"rsum\", 1); \r\nvar_dump($a,$b,$c,$d);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_slice.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$input = array(1 => \"a\", \"X\" => \"b\", 2 => \"c\", \"Y\" => \"d\", 3 => \"e\");\r\n\r\nprint_r(array_slice($input, 2));\r\nprint_r(array_slice($input, -2, 1));\r\nprint_r(array_slice($input, 0, 3));\r\nprint_r(array_slice($input, 2, -1));\r\nprint_r(array_slice($input, 2, -1, true));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Arrays/array_splice.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$input = array(\"red\", \"green\", \"blue\", \"yellow\");\r\narray_splice($input, 2);\r\n// $input is now array(\"red\", \"green\")\r\n\r\n$input = array(\"red\", \"green\", \"blue\", \"yellow\");\r\narray_splice($input, 1, -1);\r\n// $input is now array(\"red\", \"yellow\")\r\n\r\n$input = array(\"red\", \"green\", \"blue\", \"yellow\");\r\narray_splice($input, 1, count($input), \"orange\");\r\n// $input is now array(\"red\", \"orange\")\r\n\r\n$input = array(\"red\", \"green\", \"blue\", \"yellow\");\r\narray_splice($input, -1, 1, array(\"black\", \"maroon\"));\r\n// $input is now array(\"red\", \"green\",\r\n//          \"blue\", \"black\", \"maroon\")\r\n\r\n$input = array(\"red\", \"green\", \"blue\", \"yellow\");\r\narray_splice($input, 3, 0, \"purple\");\r\nvar_dump($input); // $input is now array(\"red\", \"green\", \"blue\", \"purple\", \"yellow\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_sumprod.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$a = array(1,2,3,\"1fghfhf\",\"5e-1\",.8,\"-0x10\"); \r\n$b = array(1,2,3); \r\n$c = array(1,2,PHP_INT_MAX,PHP_INT_MAX); \r\n\r\nvar_dump(array_sum($a),array_product($a));\r\nvar_dump(array_sum($b),array_product($b));\r\nvar_dump(array_sum($c),array_product($c));\r\n\r\nvar_dump(\"0x10\" == 16);\r\nvar_dump(\"-0x10\" == -16);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Arrays/array_unique.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  \r\n  function test(&$a)\r\n  {\r\n    $arr = array( 4,3,4,3,2,1,2,1,4,3,2,1 );\r\n    $arr[] = &$a;\r\n    $arr[] = $a;\r\n    var_dump($arr);\r\n\r\n    // check whether values are preserved in the same order\r\n    // without duplicities\r\n    // preserving the first unique entry\r\n    var_dump(array_unique($arr));\r\n  }\r\n\r\n  $x = 5;\r\n  test($x);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_unset_add.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// test1\r\necho \"test1 (PassedByCopy):\\n\";\r\n\r\nfunction test1($x)\r\n{\r\n\t$x[] = 4;\t\r\n\tvar_dump($x);\t\r\n\treturn $x;\r\n}\r\n\r\n$x = array();\r\n$x[0] = 1;\r\n$x[1] = 2;\r\n$x[2] = 3;\r\nunset( $x[2] );\r\n$x = test1($x);\r\n$x[] = 5;\r\nvar_dump($x);\r\n\r\n// test2\r\necho \"\\n\\ntest2 (ReturnedByCopy):\\n\";\r\n\r\nfunction test2()\r\n{\r\n\t$x = array(1,2,3);\r\n\tunset($x[2]);\r\n\tvar_dump($x);\r\n\treturn $x;\r\n}\r\n\r\n$x = test2($x);\r\n$x[] = 4;\r\nvar_dump($x);\r\n\r\n// test3\r\necho \"\\n\\ntest3 (Assigned):\\n\";\r\n\r\n$x = array();\r\n$x[0] = 1;\r\n$x[1] = 2;\r\n$x[2] = 3;\r\nunset( $x[2] );\r\n$y = $x;\r\n$y[] = 5;\r\nvar_dump($y);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_unshift.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  $queue = array(\"orange\", \"banana\"); \r\n  array_unshift($queue, \"apple\", \"raspberry\"); \r\n  var_dump($queue);\r\n  \r\n  $queue = array(\"a\" => 1, 4 => 2, \"b\" => 4, 3 => 1); \r\n  array_unshift($queue, \"apple\", 1, \"raspberry\"); \r\n  var_dump($queue);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_walk.php",
    "content": "[expect]\r\nBefore ...:\r\nd. lemon\r\na. orange\r\nb. banana\r\nc. apple\r\n... and after:\r\nd. fruit: lemon\r\na. fruit: orange\r\nb. fruit: banana\r\nc. fruit: apple\r\n[file]\r\n<?\r\n  $fruits = array(\"d\" => \"lemon\", \"a\" => \"orange\", \"b\" => \"banana\", \"c\" => \"apple\"); \r\n\r\n  function test_alter(&$item1, $key, $prefix) \r\n  { \r\n    $item1 = \"$prefix: $item1\"; \r\n  } \r\n\r\n  function test_print($item2, $key) \r\n  { \r\n    echo \"$key. $item2\\n\"; \r\n  } \r\n\r\n  echo \"Before ...:\\n\"; \r\n  array_walk($fruits, 'test_print'); \r\n\r\n  array_walk($fruits, 'test_alter', 'fruit'); \r\n  echo \"... and after:\\n\"; \r\n\r\n  array_walk($fruits, 'test_print'); \r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/array_walk_recursive.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  $sweet = array('a' => 'apple', 'b' => 'banana');\r\n  $fruits = array('sweet' => $sweet, 'x' =>& $sweet, 'sour' => 'lemon');\r\n\r\n  function test_print($item, $key) \r\n  {\r\n    echo \"$key holds $item\\n\";\r\n  }\r\n\r\n  array_walk_recursive($fruits, 'test_print');\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/convert_array_key.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\n    // test conversion of string to array key (string or integer):\r\n\r\n\t$response = array(\r\n        \"1608630144506594e510521\" => 0,\r\n        \"123\" => 0,\r\n        \"1b\" => 0,\r\n        \"0123\" => 0,\r\n        \"0\" => 0,\r\n        \"000\" => 0,\r\n        \"\" => 0,\r\n        \"-\" => 0,\r\n        \"-0\" => 0,\r\n        \"-0123\" => 0,\r\n        \"123456789\" => 0,\r\n        \"1234567890\" => 0,\r\n        \"12345678901\" => 0,\r\n        \"-1234567890\" => 0);\r\n    \r\n    foreach ($response as $k => $v)\r\n        var_dump($k);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/foreach_aliased.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction test()\r\n{\r\n\t$arr = array(0,1,2,3);\r\n\t$first = true;\t\r\n\t\r\n\tforeach ($arr as &$a)\r\n\t{\r\n\t\tif ($first)\r\n\t\t{\r\n\t\t\t$first = false;\r\n\t\t\tunset($arr[0]);\r\n\t\t\tunset($arr[3]);\r\n\t\t\t$arr[] = 4;\r\n\t\t}\r\n\t\tvar_dump( $a );\r\n\t}\r\n}\r\ntest();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed foreach enumeration:\";\r\n    foreach ($x as $k => $v)\r\n    {\r\n        if (!is_array($v))\r\n            echo \"$k => $v\\n\";\r\n\r\n        unset($x[4]);\r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x)\r\n{\r\n    echo \"array enumeration using current(), next(), reset(), end():\";\r\n\r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo \"- $val\\n\";\r\n        next($x);\r\n    }\r\n\r\n    echo \"first: \" . reset($x);\r\n    echo \"end: \" . end($x);\r\n\r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    $x['10'] = 10;\r\n    $x['a'] = 'a';\r\n    $x['b'] = 'b';\r\n    $x['c'] = 'c';\r\n\r\n    $x = foo($x);\r\n    $x = bar($x);\r\n\r\n    return $x;\r\n}\r\n\r\nvar_dump( test( array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ) ) );\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed foreach enumeration:\";\r\n    foreach ($x as $k => $v)\r\n    {\r\n        if (!is_array($v))\r\n            echo \"$k => $v\\n\";\r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x)\r\n{\r\n    echo \"array enumeration using current(), next(), reset(), end():\";\r\n\r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo \"- $val\\n\";\r\n        next($x);\r\n    }\r\n\r\n    $x[] = \"end\";// ensure the end is not array, and perform lazy copy\r\n\r\n    echo \"first: \" . reset($x);\r\n    echo \"end: \" . end($x);\r\n\r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    $x = foo($x);\r\n    $x = bar($x);\r\n\r\n    return $x;\r\n}\r\n\r\nvar_dump( test( array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) ) ) );\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed aliased foreach enumeration:\";\r\n    foreach ($x as &$v)\r\n    {\r\n        if (!is_array($v))\r\n        {\r\n            echo \"- $v\\n\";\r\n            $v = \"dummy$v\";\r\n        }        \r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x)\r\n{\r\n    echo \"array enumeration using current(), next(), reset(), end():\";\r\n\r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo \"- $val\\n\";\r\n        next($x);\r\n    }\r\n\r\n    $x[] = \"end\";// ensure the end is not array, and perform lazy copy\r\n\r\n    echo \"first: \" . reset($x);\r\n    echo \"end: \" . end($x);\r\n\r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    $x = foo($x);\r\n    $x = bar($x);\r\n\r\n    return $x;\r\n}\r\n\r\n$arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) );\r\ntest( $arr );\r\nvar_dump( $arr );\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed aliased foreach enumeration:\";\r\n    foreach ($x as &$v)\r\n    {\r\n        if (!is_array($v))\r\n        {\r\n            echo \"- $v\\n\";\r\n        }        \r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x)\r\n{\r\n    echo \"array enumeration using current(), next(), reset(), end():\";\r\n\r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo \"- $val\\n\";\r\n        else\r\n        {\r\n            bar(foo($val));            \r\n        }\r\n\r\n        next($x);\r\n    }\r\n\r\n    $x[] = \"end\";// ensure the end is not array, and perform lazy copy\r\n\r\n    echo \"first: \" . reset($x);\r\n    echo \"end: \" . end($x);\r\n\r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    return bar($x);\r\n}\r\n\r\n$arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) );\r\nvar_dump( test( $arr ) );\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed foreach enumeration:\\n\";\r\n    foreach ($x as $k => $v)\r\n    {\r\n        if (!is_array($v))\r\n        {\r\n            echo \"$k => $v\\n\";\r\n        }        \r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x)\r\n{\r\n    echo \"array enumeration using current(), next(), reset(), end():\\n\";\r\n    \r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo key($x) .\": $val\\n\";\r\n        else\r\n        {\r\n            bar(foo($val));\r\n        }\r\n\r\n        unset($x[key($x)]);  // lazy copy\r\n\r\n        next($x);\r\n    }\r\n\r\n    $x[] = \"end\";// ensure the end is not array, and perform lazy copy\r\n\r\n    echo \"first: \" . reset($x) . \"\\n\";\r\n    echo \"end: \" . end($x) . \"\\n\";\r\n\r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    return bar($x);\r\n}\r\n\r\n$arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) );\r\nvar_dump( test( $arr ) );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/lazy_copy/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// causes lazy copy:\r\nfunction foo($x)\r\n{\r\n    echo \"keyed foreach enumeration:\\n\";\r\n    foreach ($x as $k => $v)\r\n    {\r\n        if (!is_array($v))\r\n        {\r\n            echo \"$k => $v\\n\";\r\n        }        \r\n    }\r\n\r\n    return $x;\r\n}\r\n\r\nfunction bar($x, $prefix)\r\n{\r\n    echo \"array enumeration using current(), prev(), reset(), end():\\n\";\r\n    \r\n    $first = reset($x);\r\n    $end = end($x);\r\n\r\n    echo \"$prefix first: \" . $first . \"\\n\";\r\n    echo \"$prefix end: \" . (is_array($end) ? \"{array}\" : $end) . \"\\n\";\r\n\r\n    while ($val = current($x))\r\n    {\r\n        if (!is_array($val))\r\n            echo $prefix . key($x) .\": $val\\n\";\r\n        else\r\n        {\r\n            bar($val, $prefix . \"    \");\r\n        }\r\n\r\n        if (key($x) % 2 == 0)\r\n            unset($x[key($x)]);  // lazy copy\r\n\r\n        prev($x);\r\n    }\r\n\r\n    $x[] = \"end\";\r\n\r\n    \r\n    return $x;\r\n}\r\n\r\nfunction test($x)\r\n{\r\n    return bar($x, null);\r\n}\r\n\r\n$arr = array( 1,2,3, array( 4,5,6, array( 7,8,9 ) ) );\r\nvar_dump( test( $arr ) );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/multisort.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$a = array(\r\n  array(8,8,8,2,2,2),\r\n  array(1,2,8,7,7,4),\r\n  array(2,4,6,1,8,0),\r\n  array(1,4,7,8,1,0),\r\n  array(1,2,10,20,12,11));\r\n\r\nvar_dump(array_multisort($a[4],SORT_STRING,SORT_DESC,$a[0],SORT_DESC,$a[1],SORT_DESC,$a[2],$a[3],SORT_DESC));\r\nprint_r($a);\r\n\r\n$a = array(array(\"10\", 100, 100, \"a\"), array(1, 3, \"2\", 1)); \r\narray_multisort($a[0], SORT_ASC, SORT_STRING, \r\n               $a[1], SORT_NUMERIC, SORT_DESC); \r\nprint_r($a);               \r\n               \r\n$a1 = array(\"10\", 100, 100, \"a\"); \r\n$a2 = array(1, 3, \"2\", 1); \r\narray_multisort($a1, $a2);                \r\n\r\nprint_r($a1);\r\nprint_r($a2);  \r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/multisort_empty.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\t$tagValues = array();\r\n\t$tagSortOrders = array();\r\n\t$sortedTags = array();\r\n\t\t\r\n\t// order by sortOrder, then tag value\r\n\tarray_multisort($tagSortOrders, SORT_NUMERIC, $tagValues, SORT_ASC, $sortedTags);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/nonarray access #22019.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$a = \"string\";\r\n\t$b = array(\"zero\", \"one\", \"two\", \"three\");\r\n\t$c = 123;\r\n\r\n\techo $a[2] . \"\\n\";\r\n\techo $b[2] . \"\\n\";\r\n\techo $c[2] . \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/optimizations.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n\t$a = array(\"a\" => \"b\", \"0\" => \"c\", \"10\" => 4, 5 => 8);\r\n\t$s = \"hello\";\r\n\t\r\n\t$a[1] = 3;\r\n\t$a[\"x\"] = 4;\r\n\t$a[\"0\"] = 5;\r\n\t$s[1] = 'a';\r\n\t$s[\"2g\"] = 'b';\r\n\t$s[\"g\"] = 'c';\r\n\t\r\n\techo $a[1], \"\\n\", $a[\"x\"], \"\\n\", $a[\"0\"], \"\\n\", $s[1], \"\\n\", $s[\"2g\"], \"\\n\", $s[\"g\"], \"\\n\";\r\n\techo strtolower($a), \"\\n\", $s, \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/recursion.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction f1()\r\n{\r\n  $ar1 = array(\"a\" => &$ar1);\r\n  $ar2 = array(\"a\" => array(1,2,3));\r\n  $ar3 = array_merge_recursive($ar1, $ar2);\r\n  \r\n  $ar3[] = \"w\";\r\n  $ar3[\"a\"][] = \"x\";\r\n  $ar3[\"a\"][\"a\"][] = \"y\";\r\n  $ar3[\"a\"][\"a\"][\"a\"][] = \"z\";\r\n  \r\n  var_dump($ar3);\r\n}\r\n\r\nfunction f2()\r\n{\r\n  $a = array(\"a\" => &$a);\r\n  $b = array_change_key_case($a,CASE_UPPER);\r\n  $a[] = \"z\";\r\n  var_dump($b);\r\n}\r\n\r\nfunction f3()\r\n{\r\n  $a = array(\"a\" => &$a);\r\n  sort($a);\r\n  $a[] = \"z\";\r\n  var_dump($a);\r\n}\r\n\r\nfunction f4()\r\n{\r\n  $x = array(1,2,3);\r\n  $a = array(\"a\" =>& $x);\r\n  \r\n  $c = array_merge_recursive($a,$a);\r\n  \r\n  var_dump($c);\r\n}\r\n\r\nfunction f5()\r\n{\r\n  $a = array(\"a\" => array(1,2,3));\r\n  \r\n  $c = array_merge_recursive($a,$a);\r\n  \r\n  var_dump($c);\r\n}\r\n\r\nfunction f6()\r\n{\r\n  $x = \"xx\";\r\n  $y =& $x;\r\n  $a = array(\"a\" =>& $x);\r\n  $b = array(\"a\" => 2);\r\n  \r\n  $c = array_merge_recursive($a,$b);\r\n  \r\n  var_dump($c);\r\n}\r\n\r\nfunction f7()\r\n{\r\n  $a = array(\"a\" => &$a);\r\n  $b = array(\"a\" => &$b);\r\n  \r\n  @$x = array_merge_recursive($a,$b);\r\n  \r\n  var_dump($x);\r\n}\r\n\r\nfor($i=1;$i<=7;$i++)\r\n{\r\n  $f = \"f$i\";\r\n  echo \"$f:\\n\";\r\n  $f();\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/sort.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nsetlocale(LC_COLLATE,\"cs-CZ\");\r\n$sorts = array(\"sort\",\"ksort\",\"asort\",\"rsort\");\r\n$types = array(SORT_REGULAR => \"regular\",SORT_NUMERIC => \"numeric\",SORT_STRING => \"string\",SORT_LOCALE_STRING => \"locale\");\r\n$array = array(\"x\" => 8,\"z\" => 1,\"2b\" => 1,\"x10\",\"10a\" => 0,\"10x\",\"20x\",\"x2\",\"0x10\",\"ach0\",\"add1\");\r\n\r\nfor ($i=0;$i<count($sorts);$i++)\r\n{\r\n  foreach($types as $type => $type_name)\r\n  {\r\n    echo \"\\n{$sorts[$i]} $type_name:\\n\";\r\n    $x = $array;\r\n    $sorts[$i]($x,$type);\r\n    print_r($x);\r\n  }  \r\n}\r\n\r\necho \"\\nnatsort:\\n\";\r\n$x = $array;\r\nnatsort($x);\r\nprint_r($x);\r\n?>"
  },
  {
    "path": "Testing/Tests/Arrays/usort.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction my_cmp($a,$b)\r\n{\r\n  static $i = 0;\r\n  \r\n  echo \"$i\\n\";\r\n  $i++;\r\n  return $a==$b ? 0 : ($a < $b ? +1 : -1);\r\n}\r\n\r\n$array = array(1,2,3,4,5,6,7,8,9,10);\r\n\r\nusort($array,\"my_cmp\");\r\n\r\nprint_r($array);\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/class_incompletepart.php",
    "content": "[expect php]\r\n[file]\r\n\n<?php\r\nfunction foo()\r\n{\r\n\treturn FALSE;\r\n}\r\nif (foo()) \n\r\n{\r\n\tclass A extends B {\r\n\t\tfunction test() { echo \"eh\"; }\r\n\t} \r\n}\r\n\nelse\r\n\n{\r\n\tclass A {\r\n\t\tfunction test() { echo \"ok\"; }\r\n\t} \r\n}\r\n\r\n\n$a = \nnew A;\r\n$a->test();\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/division-by-zero.php",
    "content": "[expect ct-warning]\r\nPHP0150: Division by zero\r\n[expect ct-warning]\r\nPHP0150: Division by zero\r\n[expect ct-warning]\r\nPHP0150: Division by zero\r\n[expect ct-warning]\r\nPHP0150: Division by zero\r\n[expect php]\r\n\r\n[file]\r\n<?php\r\n\t$a = 0;\r\n\t$b = 1;\r\n\r\n\techo \"DIVISION\\n\";\r\n\t$r = $b/0;\r\n\tvar_dump($r);\r\n\t$r = 1/0;\r\n\tvar_dump($r);\r\n\t$r = $b/$a;\r\n\tvar_dump($r);\r\n\t$r = 1/$a;\r\n\tvar_dump($r);\r\n\t\r\n\techo \"MODULO\\n\";\r\n\t$r = $b%0;\r\n\tvar_dump($r);\r\n\t$r = 1%0;\r\n\tvar_dump($r);\r\n\t$r = $b%$a;\r\n\tvar_dump($r);\r\n\t$r = 1%$a;\r\n\tvar_dump($r);\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/function-in-unknown-class.php",
    "content": "[expect exact]\r\ntest 1\r\ntest 2\r\n\n[file]\n<?php\n\nif (1==1) {\n\tclass b {\n\t}\n}\n\n// function 'foo' inside incomplete class 'unk1'\nclass unk1 extends b {\n  function run() {\n\t\tfunction foo1() { echo \"test 1\\n\"; }\n\t}\n}\n\n// class 'a' inside incomplete class 'unk2'\n// can't compile 'a' and its methods\nclass unk2 extends b {\n  function run() {\n\t\tclass a {\n\t\t\t\tfunction run() {\n\t\t\t\t\tfunction foo2() { echo \"test 2\\n\"; }\n\t\t\t\t}\n\t\t}\n\t}\n}\n\n$s = new unk1;\n$s->run();\nfoo1();\n\n$s = new unk2;\n$s->run();\n$a = new a;\n$a->run();\nfoo2(); \n?>"
  },
  {
    "path": "Testing/Tests/Bugs/if_if.php",
    "content": "[expect exact]\r\nok\r\n[file]\r\n<?php\r\n\r\n\t$x = 0;\r\n\tif (!$x)\r\n\t\tif (true)\r\n\t\t{\r\n\t\t\techo 'ok';\r\n\t\t}\r\n\t\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/is_a_null_value.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tfunction foo($a)\r\n\t{\r\n\t\techo (is_a($a, \"zzz\"));\r\n\t}\r\n\t\r\n\tfoo(null);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/obj_instantiated.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo{\r\n\r\n}\r\n\r\nclass Bar{\r\n\tvar $x = 1;\r\n}\r\n\r\n$x = new Foo();\r\n\r\nif ($x) \r\n\techo \"x instantied, \";\r\nelse\r\n\techo \"x empty, \";\r\n\t\r\n$y = new Bar();\r\n\r\nif ($y) \r\n\techo \"y instantied\";\r\nelse\r\n\techo \"y empty\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-named-groups.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n  $text = \"<H2 some='stuff'>hej hola</H2>\";\r\n  $matches = null;\r\n  $numMatches = preg_match_all('/<H(?P<level>[1-6])(?P<attrib>.*?'.'>)(?P<header>.*?)<\\/H[1-6] *>/i', $text, $matches);\r\n\t\r\n\techo \"FIRST\\n\";\r\n\techo $matches['header'][0];\r\n\r\n  $text = \"<H2 some='stuff'>hej hola</H2>\";\r\n  $matches = null;\r\n  $numMatches = preg_match_all('/<H(?P<level>[1-6])(?P<attrib>.*?'.'>)(?P<header>.*?)<\\/H[1-6] *>/i', $text, $matches, PREG_SET_ORDER);\r\n\r\n\techo \"\\nSECOND\\n\";\r\n\techo $matches[0]['header'];\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-replace-advanced.php",
    "content": "[expect exact]\r\nok\r\n[file]\r\n<?php\r\n\t$match = \"\";\r\n\t$pattern = \"/(\\\\n {2,}[\\\\-\\\\*])|(\\\\n\\\\t{1,}[\\\\-\\\\*])|(\\\\n  (?![\\\\*\\\\-]))|(\\\\n\\\\t(?![\\\\*\\\\-]))|(~~NOTOC~~)|(~~NOCACHE~~)|([ \\\\t]*={2,}[^\\\\n]+={2,}[ \\\\t]*(?=\\\\n))|(\\\\n\\\\^)|(\\\\n\\\\|)|(\\\\*\\\\*(?=.*\\\\*\\\\*))|(\\\\/\\\\/(?=[^\\\\x00]*[^:]\\\\/\\\\/))|(__(?=.*__))|(\\\\x27\\\\x27(?=.*\\\\x27\\\\x27))|(<sub>(?=.*<\\\\/sub>))|(<sup>(?=.*<\\\\/sup>))|(<del>(?=.*<\\\\/del>))|(\\\\x5C{2}(?=\\\\s))|(\\\\x28\\\\x28(?=.*\\\\x29\\\\x29))|(~~INFO:\\\\w+~~)|(\\\\n[ \\\\t]*-{4,}[ \\\\t]*(?=\\\\n))|(<nowiki>(?=.*<\\\\/nowiki>))|(%%(?=.*%%))|(<php>(?=.*<\\\\/php>))|(<html>(?=.*<\\\\/html>))|(<code(?=.*<\\\\/code>))|(<file>(?=.*<\\\\/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\";\r\n\r\n\t$test = \"\\n**This** is my //new// wiki!\\n\";\r\n  preg_match($pattern, $test, $match);\r\n  echo $match[0] == \"\\n\"?\"ok\":\"error\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-replace-range.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  echo preg_replace(\"|[^a-c-e]|i\", \"\", \"abcde\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-replace.php",
    "content": "[expect exact]\r\n3_ 4_ 2_\r\n[file]\r\n\n<?php\r\n  echo preg_replace(\"#\\_+#\",\"_\",\"3___ 4____ 2__\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-this-dynamic.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// Currently fails, because eval information isn't caputred while calling\r\n\r\nclass a\r\n{\r\n\tfunction foo($p, $p2)\r\n\t{\r\n\t\techo $p2.\": \".$p.\"\\n\";\r\n\t}\r\n\t\r\n\tfunction a()\r\n\t{\r\n\t\t// tests whether local variables and $this are captured correctly (in dynamic invoke)\r\n\t\t$z=\"foo\";\r\n\t\t$fn = 'preg_replace';\r\n\t\t$fn('!([a-z]+)!sie',\"\\$this->foo('\\\\1',\\$z)\",\"ahoj lidi rozkladame\");\r\n\t}\r\n}\r\nnew a();\r\n\r\n// One more test - now using dynamic invoke\r\n$x = 'bbb';\r\n$fn = 'preg_replace';\r\necho $fn('!([a-z]+)!sie',\"'\\\\1'.\\$x\",\"zz zz zz\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-this-dynamic2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// Currently fails, because $this reference is not caputred\r\n\r\nclass a\r\n{\r\n\tfunction foo($p, $p2)\r\n\t{\r\n\t\techo $p2.\": \".$p.\"\\n\";\r\n\t}\r\n\t\r\n\tfunction a()\r\n\t{\r\n\t\t// the first call causes compiler to capture eval info\r\n\t\t$z=\"foo\";\r\n\t\tpreg_replace('!([a-z]+)!sie',\"\\$this->foo('\\\\1',\\$z)\",\"ahoj lidi rozkladame\");\r\n\t\t\r\n\t\t// but this reference isn't captured :-(\r\n\t\t$fn = 'preg_replace';\r\n\t\t$fn('!([a-z]+)!sie',\"\\$this->foo('\\\\1',\\$z)\",\"ahoj lidi rozkladame\");\r\n\t}\r\n}\r\nnew a();\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-this.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass a\r\n{\r\n\tfunction foo($p, $p2)\r\n\t{\r\n\t\techo $p2.\": \".$p.\"\\n\";\r\n\t}\r\n\t\r\n\tfunction a()\r\n\t{\r\n\t\t// tests whether local variables and $this are captured correctly\r\n\t\t$z=\"foo\";\r\n\t\tpreg_replace('!([a-z]+)!sie',\"\\$this->foo('\\\\1',\\$z)\",\"ahoj lidi rozkladame\");\r\n\t}\r\n}\r\nnew a();\r\n\r\n// test whether similar thing works in global context\r\n$x = 'aaa';\r\necho preg_replace('!([a-z]+)!sie',\"'\\\\1'.\\$x\",\"zz zz zz\");\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-ungreedy-bugs.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t\r\n\techo \"Test 1:\\n\";\r\n\t$expr = '#^(ab)?$#U';\r\n\t$matches = null;\r\n\t$ok = preg_match($expr, \"abab\", $matches, PREG_OFFSET_CAPTURE);\r\n\techo (count($matches) == 0)?\"ok\":\"error\";\r\n\r\n\techo \"\\nTest 2:\\n\";\r\n\t$expr = '#^z(a*)?z$#U';\r\n\t$matches = null;\r\n\t$ok = preg_match($expr, \"zaaaz\", $matches, PREG_OFFSET_CAPTURE);\r\n\techo ($matches[0][0] == \"zaaaz\")?\"ok\":\"error\";\r\n\techo \"\\n\";\r\n\techo ($matches[1][0] == \"aaa\")?\"ok\":\"error\";\r\n\t\r\n\techo \"\\nTest 3:\\n\";\r\n\t$expr = \"#^a$#Am\";\r\n\t$matches = null;\r\n\t$ok = preg_match($expr, \"a\\na\", $matches, PREG_OFFSET_CAPTURE);\r\n\techo ($matches[0][0] == \"a\")?\"ok\":\"error\";\r\n\t$ok = preg_match($expr, \"c\\na\", $matches, PREG_OFFSET_CAPTURE);\r\n\techo \"\\n\";\r\n\techo (count($matches) == 0)?\"ok\":\"error\";\r\n\r\n\t\r\n\techo \"\\nTest 4:\\n\";\r\n\t$expr = '#^(?:(?:\\ *(?<= |^)\\.(\\([^\\n\\)]+\\)|\\[[^\\n\\]]+\\]|\\{[^\\n\\}]+\\}|(?:<>|>|=|<))(\\([^\\n\\)]+\\)|\\[[^\\n\\]]+\\]|\\{[^\\n\\}]+\\}|(?:<>|>|=|<))??(\\([^\\n\\)]+\\)|\\[[^\\n\\]]+\\]|\\{[^\\n\\}]+\\}|(?:<>|>|=|<))??(\\([^\\n\\)]+\\)|\\[[^\\n\\]]+\\]|\\{[^\\n\\}]+\\}|(?:<>|>|=|<))??)\\n)?(\\*|\\-|\\+|\\d+\\.\\ |\\d+\\)|[IVX]+\\.\\ |[IVX]+\\)|[a-z]\\)|[A-Z]\\))(\\n?)\\ +\\S.*$#mUm';\r\n\t$matches = null;\r\n\t$ok = preg_match($expr, \"- a\\nb\\n- c\", $matches, PREG_OFFSET_CAPTURE, 4);\r\n\techo ($matches[0][0] == \"- c\")?\"ok\":\"error\";\r\n\techo \"\\n\";\r\n\techo ($matches[5][0] == \"-\")?\"ok\":\"error\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/preg-unkn.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\techo preg_quote(\".\",'1');\r\n?>"
  },
  {
    "path": "Testing/Tests/Bugs/trigger_error line number #2787.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\r\n\r\n    trigger_error(\"This function triggers error.\");\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/CLR/BaseTypes.php",
    "content": "[expect errors]\r\nerror PHP1021\r\nwarning PHP0020\r\nerror PHP1022\r\nerror PHP1022\r\nerror PHP1020\r\nwarning PHP0020\r\nwarning PHP0020\r\nerror PHP1081\r\nwarning PHP0020\r\nerror PHP1081\r\nerror PHP1021\r\nerror PHP1022\r\nerror PHP1020\r\nerror PHP1092\r\nerror PHP1092\r\nerror PHP1092\r\n[file]\r\n<?\r\n\tinterface I { }\r\n\tinterface J { }\r\n\tclass C { }\r\n\tclass D { }\r\n\tinterface K<:T:> { }\r\n\tclass E<:T:> { }\r\n\t\r\n\tinterface I1 extends I {}\r\n\tinterface I2 extends C {} \r\n\tinterface I3 extends U {} \r\n\tclass E1 extends D {} \r\n\tclass E2 extends I {}\r\n\tclass E3 extends I implements I,D,J { }\r\n\tclass E4 extends D implements I,J { }\r\n\tclass E5 extends U { }\r\n\tclass E6 extends D implements U { }\r\n\t\r\n\tinterface K2<:T:> extends I<:T:> { }\r\n\tinterface K3<:T:> extends K<:T:> { }\r\n\tinterface K4 extends K2<:I<:U:>:> { }\r\n\t\r\n\tinterface K5 extends E<:int:> { }\r\n\tclass F extends K<:E<:int:>:> implements E<:int:> { }\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/CLR/ClrEvent.php",
    "content": "[clr]\r\n[expect exact]\r\nWorks!\r\nDONE\r\n[file]\r\n<?php\r\n\r\nclass Handler\r\n{\r\n    function DoWork()\r\n    {\r\n        echo \"Works!\\n\";\r\n    }\r\n}\r\n\r\nfunction test()\r\n{\r\n    $bw = new \\System\\ComponentModel\\BackgroundWorker;\r\n    $handler = new Handler;\r\n\r\n    $bw->DoWork->Add( new \\System\\ComponentModel\\DoWorkEventHandler( array($handler, \"DoWork\") ) );\r\n    $bw->RunWorkerAsync();\r\n\r\n    while ($bw->IsBusy)\r\n    {\r\n        \\System\\Threading\\Thread::Sleep(100);\r\n    }\r\n}\r\n\r\ntest();\r\n\r\necho \"DONE\"\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/ConditionalDecls.php",
    "content": "[pure]\r\n[expect exact]\r\nT2::f\r\ng2\r\n[file]\r\n<?\r\n\tclass P\r\n\t{\r\n\t\tpublic static function Main()\r\n\t\t{\r\n\t\t\tif ($x)\r\n\t\t\t{\r\n\t\t\t\tfunction g() { echo \"g1\\n\"; }\r\n\t\t\t\tclass T { function f() { echo \"T1::f\\n\"; } }\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfunction g() { echo \"g2\\n\"; }\r\n\t\t\t\tclass T { function f() { echo \"T2::f\\n\"; } }\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t$t = new T;\r\n\t\t\t$t->f();\r\n\t\t\tg();\r\n\t\t}\r\n\t}\t\t\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/ConditionalDecls2.php",
    "content": "[pure]\r\n[expect exact]\r\nobject(T<:C:>)(0) {\r\n}\r\n[file]\r\n<?\r\n\tclass Program\r\n\t{\r\n\t\tpublic static function Main()\r\n\t\t{\r\n\t\t\tclass C { }\r\n\t\t\tclass T<:Q = C:> { function f(Q $x) { echo \"T\\n\"; } }\r\n\t\t\t\r\n\t\t\t$t = new T;\r\n\t\t\tvar_dump($t);\r\n\t\t}\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance1.php",
    "content": "[expect error]\r\nerror PHP2031\r\n[file]\r\n<?\r\n\t// circular:\r\n\tinterface I1 extends I2, I3, I4 { }\r\n\tinterface I2 { }\r\n\tinterface I3 { }\r\n\tinterface I4 extends I2, I1 { }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance2.php",
    "content": "[expect error]\r\nerror PHP2031\r\n[file]\r\n<?\r\n\t// circular:\r\n\tinterface J1<:T:> extends J2, J3<:T:>, J4 { }\r\n\tinterface J2 { }\r\n\tinterface J3<:T:> { }\r\n\tinterface J4 extends J2, J1<:int:> { }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance3.php",
    "content": "[expect error]\r\nerror PHP2031\r\n[file]\r\n<?\r\n\t// circular:\r\n\tinterface J5<:T:> extends J5<:T:> { }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance4.php",
    "content": "[expect error]\r\nerror PHP2031\r\n[file]\r\n<?\r\n\t// ok:\r\n\tinterface J1<:T:> { }\r\n\tinterface J2 { }\r\n\tinterface J7<:T:> { }\r\n\tinterface J6<:T:> extends J7<:J6<:int:>:> { }\r\n\tinterface J8<:T:> extends J1<:J6<:J2:>:> { }\r\n\t\r\n\t// ok, but there is a bug in CLR:\r\n\tinterface J<:T:> extends J7<:J<:J<:T:>:>:> { }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance5.php",
    "content": "[expect]\r\n[file]\r\n<?\r\n\t// everything ok:\r\n\t\r\n\tabstract class CC { abstract function mm(); }\r\n\tclass DD extends CC { function Mm() {} } \r\n\t\r\n\tinterface II0 { function mm(); }\r\n\tinterface II1 { function Mm(); }\r\n\t\r\n\tclass CCC implements II0, II1 { function MM(){} }\r\n\t\r\n\tinterface I0 { function mm(); }\r\n\tinterface I1 extends I0 { }\r\n\tinterface I2 { function Mm(); }\r\n\tinterface I3 { function mM(); }\r\n\r\n\tabstract class A implements I1 { function MM() { }  }\r\n\tabstract class B extends A implements I2 { }\r\n\tabstract class C extends B implements I3 { }\r\n\tclass D extends C { function mm() { } }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance6.php",
    "content": "[expect]\r\n[file]\r\n<?\r\n\t// everything ok:\r\n\t\r\n\tabstract class CC<:T:> { abstract function mm(); }\r\n\tclass DD<:T:> extends CC<:T:> { function Mm() {} } \r\n\t\r\n\tinterface II0<:T:> { function mm(); }\r\n\tinterface II1<:T:> { function Mm(); }\r\n\t\r\n\tclass CCC<:T:> implements II0<:T:>, II1<:T:> { function MM(){} }\r\n\t\r\n\tinterface I0<:T:> { function mm(); }\r\n\tinterface I1<:T:> extends I0<:int:>, I0<:string:> { }\r\n\tinterface I2<:T:> { function Mm(); }\r\n\tinterface I3<:T:> { function mM(); }\r\n\r\n\tabstract class A<:T:> implements I1<:T:> { function MM() { }  }\r\n\tabstract class B<:T:> extends A<:T:> implements I2<:T:> { }\r\n\tabstract class C<:T:> extends B<:T:> implements I3<:T:> { }\r\n\tclass D<:T:> extends C<:T:> { function mm() { } }\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance7.php",
    "content": "[expect]\r\n[file]\r\n<?\r\n\t// everything ok:\r\n\t\r\n\tinterface I1\r\n\t{\r\n\t\tfunction f();\r\n\t}\r\n\r\n\tinterface I2 extends I1\r\n\t{\r\n\t\tfunction f();\r\n\t}\r\n\r\n\tinterface I3 extends I1, I2\r\n\t{\r\n\t\tfunction f();\r\n\t}\r\n\t\r\n\tclass C implements I3\r\n\t{\r\n\t\tfunction f() {}\r\n\t}\r\n\t\r\n\tinterface J1\r\n\t{\r\n\t\tfunction f();\r\n\t}\r\n\t\r\n\tinterface J2 extends J1\r\n\t{ \r\n\t\r\n\t}\r\n\r\n\tclass X implements J2, I3, I1, I2\r\n\t{\r\n\t\tpublic function F() { }\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance8.php",
    "content": "[expect]\r\n[file]\r\n<?\r\n\t// everything ok:\r\n\t\r\n\tinterface I extends J, K\r\n\t{\r\n\t\tfunction ff();\r\n\t\tfunction gg();\r\n\t}\r\n\t\r\n\tinterface J { } \r\n\tinterface K { }\r\n\t\t\r\n\tabstract class X implements I\r\n\t{\r\n\t\tfunction FF() { }\r\n\t}\r\n\t\r\n\tclass Y\textends X implements I\r\n\t{\r\n\t\tfunction gG() {}\r\n\t}\r\n\t\r\n\tclass V\r\n\t{\r\n\t\tfunction fF() { }\r\n\t}\r\n\t\r\n\tclass U extends V\r\n\t{\r\n\t\tfunction Gg() { }\r\n\t}\r\n\t\r\n\tclass Z\textends U implements I\r\n\t{\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Inheritance9.php",
    "content": "[expect error]\r\nerror PHP1018\r\n[file]\r\n<?\r\n\tclass C\r\n\t{\r\n\t\tprivate function f()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\t\r\n\tinterface I\r\n\t{\r\n\t\tfunction f();\r\n\t}\r\n\t\r\n\tclass D extends C implements I\r\n\t{\r\n\t\t// f is not implemented here\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/Lambdas.php",
    "content": "[expect errors]\r\nwarning PHP0020\r\nwarning PHP0020\r\n[file]\r\n<?\r\n\tclass C { }\r\n\r\n\t[AttributeUsage(AttributeTargets::All, $AllowMultiple => true, $Inherited => false)]\r\n\tclass MyAttribute extends System:::Attribute\r\n\t{\r\n\t\tprivate $a, $b;\r\n\t\tpublic $c;\r\n\t\t\r\n\t\tpublic function __construct($a, $b)\r\n\t\t{\r\n\t\t\t$this->a = $a;\r\n\t\t\t$this->b = $b;\r\n\t\t}\r\n\t}\t\r\n\t\r\n\t[My(1,2)]\r\n\tclass P\r\n\t{\r\n\t\tpublic static function Main()\r\n\t\t{\r\n\t\t\tcreate_function('$x','return $x + 1;');\r\n\t\t\tcreate_function('int $x','return $x + 1;');\r\n\t\t\tcreate_function('bool &$x','return $x + 1;');\r\n\t\t\tcreate_function('C &$x','return $x + 1;');\r\n\t\t\tcreate_function('U &$x','return $x + 1;');\r\n\t\t\tcreate_function('[My(1,2)]U &$x','return $x + 1;');\r\n\t\t\tcreate_function('$nested','return $nested . create_function(\\'$z\\',\\'return $z + 1;\\');');\r\n\t\t}\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/NameResolving.php",
    "content": "[pure]\r\n[expect exact]\r\nbool(true)\r\nbool(true)\r\nobject(Directory)(2) {\r\n  [\"handle\"]=>\r\n  NULL\r\n  [\"path\"]=>\r\n  NULL\r\n}\r\n[file]\r\n<?\r\n\timport namespace System;\r\n\t\r\n\tnamespace N\r\n\t{\r\n\t\tclass Beth { } \r\n\t}\r\n\t\r\n\tnamespace\r\n\t{\r\n\t\tuse N\\Beth;\r\n\t\tuse System\\Collections\\Generic\\Dictionary;\r\n\t\t\r\n\t\tclass Program\r\n\t\t{\r\n\t\t\tpublic static function Main()\r\n\t\t\t{\r\n\t\t\t\tvar_dump(new \\N\\Beth instanceof Beth);\r\n\t\t\t\tvar_dump(new Dictionary() instanceof Dictionary);\r\n\t\t\t\tvar_dump(new Directory);\r\n\t\t\t}\r\n\t\t}\r\n\t}\t\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/foreach.php",
    "content": "[pure]\r\n[expect exact]\r\n1, 2, 3, 4, 5, OK\r\n[file]\r\n<?php\r\n\r\nuse System\\Collections\\Generic as G;\r\n\r\nclass P\r\n{\r\n\tstatic function CreateList<:T:>($vals)\r\n\t{\r\n\t\t$ret = new i'System\\Collections\\Generic\\List'<:T:>;\r\n\t\tforeach($vals as $v)\r\n\t\t\t$ret->Add($v);\r\n\t\treturn $ret;\t\t\r\n\t}\r\n\r\n\tpublic static function Main()\r\n\t{\r\n\t\t$l = self::CreateList<:\\System\\Int32:>(array(1,2,3,4,5));\r\n\r\n\t\t// This causes Common Langauge Runtime \r\n\t\t// TODO: (J) keyed enumeration of non-keyed collection // foreach($l as $key => $value) echo \"$value, \";\r\n\t\tforeach($l as $value) echo \"$value, \";\r\n\r\n\t\techo \"OK\";\r\n\t}\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/CLR/handle_enum.php",
    "content": "[clr]\r\n[expect exact]\r\nint(2)\r\nDONE\r\n[file]\r\n<?\r\n\tfunction foo()\r\n\t{\r\n\t\t$x = new \\System\\DateTime(2011,8,16);\r\n\t\t$y = $x->DayOfWeek;\r\n\t\tvar_dump($y);\r\n\t}\r\n\tfoo();\r\n\techo 'DONE';\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/CLR/indexers1.php",
    "content": "[clr]\r\n[expect exact]\r\nOK\r\n[file]\r\n<?\r\n\tfunction Read($hashtable) {\r\n\t\t$h = $hashtable[\"key\"];\t// $h has to be wrapped into ClrObject!\r\n\t\t$m = $h[\"message\"];\t\t// GetItem operator checks if $h is empty => any non-PHP object causes an exception\r\n\t}\r\n\r\n\tfunction test() {\r\n\t\t\r\n\t\t$x = new System\\Collections\\Hashtable();\r\n\t\t$y = new System\\Collections\\Hashtable();\r\n\r\n\t\t$x->Add(\"key\", $y);\r\n\t\t$y->Add(\"message\", $y);\r\n\t\t\r\n\t\tRead($x);\r\n\t}\r\n\ttest();\r\n?>OK"
  },
  {
    "path": "Testing/Tests/CLR/serialize clr.php",
    "content": "[clr]\r\n[expect exact]\r\nOK\r\n[file]\r\n<?\r\n\tfunction foo()\r\n\t{\r\n\t\t$x = System\\DateTime::$UtcNow;\r\n\t\t$s = serialize($x);\r\n\t\t//var_dump($s);\r\n\t\t$t = unserialize($s);\r\n\t\t//var_dump($t);\r\n\t}\r\n\r\n\tfoo();\r\n\t\r\n\techo \"OK\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/6B.inc",
    "content": "<?\r\n  echo \"6B.inc\\n\";\r\n  function f() {}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/6C.inc",
    "content": "<?\r\n  echo \"6C.inc\\n\";  \r\n  include_once(\"6B.inc\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/a03.inc",
    "content": "<?\r\ninclude_once \"b03.inc\";\r\ninclude_once \"c03.inc\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b01.inc",
    "content": "<?\r\n\tinclude_once(\"c01.inc\");\r\n\tclass b { }\r\n\tnew c;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b02.inc",
    "content": "<?\r\ninclude_once \"t02.php\";\r\ninclude_once \"c02.inc\";\r\nfunction b() { echo 'b'; }\r\nc();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b03.inc",
    "content": "<?\r\ninclude_once \"a03.inc\";\r\ninclude_once \"c03.inc\";\r\nfunction b() { echo 'b'; }\r\nc();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b04.inc",
    "content": "<?\r\ninclude_once \"t04.phpt\";\r\ninclude_once \"c04.inc\";\r\nfunction b() { echo 'b'; }\r\nc();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b05.inc",
    "content": "<?\r\ninclude \"c05.inc\";\r\nfunction b() { echo 'b'; }\r\nc();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/b06.inc",
    "content": "<?\r\ninclude_once \"d06.inc\";\r\ninclude_once \"c06.inc\";\r\nfunction b() { echo 'b'; }\r\nc();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c01.inc",
    "content": "<?\r\n\tinclude_once(\"b01.inc\");\r\n\tclass c { }\r\n\tnew b;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c02.inc",
    "content": "<?\r\ninclude_once \"t02.php\";\r\ninclude_once \"b02.inc\";\r\nfunction c() { echo 'c'; }\r\nb();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c03.inc",
    "content": "<?\r\ninclude_once \"a03.inc\";\r\ninclude_once \"b03.inc\";\r\nfunction c() { echo 'c'; }\r\nb();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c04.inc",
    "content": "<?\r\ninclude_once \"t04.phpt\";\r\ninclude_once \"b04.inc\";\r\nfunction c() { echo 'c'; }\r\nb();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c05.inc",
    "content": "<?\r\ninclude_once \"t05.phpt\";\r\nfunction c() { echo 'c'; }\r\nb(); \r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/c06.inc",
    "content": "<?\r\ninclude_once \"b06.inc\";\r\ninclude_once \"d06.inc\";\r\ninclude_once \"e06.inc\";\r\nfunction c() { echo 'c'; }\r\nb();\r\nd();\r\ne();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/d06.inc",
    "content": "<?\r\ninclude_once \"b06.inc\";\r\ninclude_once \"e06.inc\";\r\nfunction d() { echo 'd'; }\r\ne();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/e06.inc",
    "content": "<?\r\ninclude_once \"b06.inc\";\r\ninclude_once \"d06.inc\";\r\ninclude_once \"c06.inc\";\r\nfunction e() { echo 'e'; }\r\nb();\r\nd();\r\nc();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t01.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude_once(\"b01.inc\");\r\ninclude_once(\"c01.inc\");\r\nnew b;\r\nnew c;\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t02.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?\r\nerror_reporting(0);\r\n\r\ninclude \"b02.inc\";\r\ninclude \"c02.inc\";\r\nb();\r\nc();\r\n\r\necho \"Done.\"; // never gets here\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t03.php",
    "content": "[expect] bcbc\r\n\r\n[file]\r\n\r\n<?\r\ninclude \"a03.inc\";\r\nb();\r\nc();\r\n\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t04.php",
    "content": "[expec] bcbc\r\n\r\n[file]\r\n\r\n<?\r\ninclude_once \"b04.inc\";\r\ninclude_once \"c04.inc\";\r\nb();\r\nc();\r\n\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t05.php",
    "content": "[expect] bcbc\r\n\r\n[file]\r\n<?\r\ninclude \"b05.inc\";\r\nb();\r\nc();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t06.php.notest",
    "content": "[expect] bdebdcec\r\n[expect ct-error] redeclares function d\r\n\r\n[file]\r\n<?\r\ninclude \"b06.inc\";\r\ninclude \"d06.inc\";\r\nb();\r\nc();\r\nd();\r\ne();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t07.php.notest",
    "content": "[expect] bdebdcec\r\n[expect ct-error] redeclares function d\r\n\r\n[file]\r\n<?\r\ninclude_once \"b06.inc\";\r\ninclude \"d06.inc\";\r\nb();\r\nc();\r\nd();\r\ne();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Cycles/t08.php",
    "content": "[expect] bdebdcecbcde\r\n\r\n\r\n[file]\r\n<?\r\ninclude_once \"b06.inc\";\r\ninclude_once \"d06.inc\";\r\nb();\r\nc();\r\nd();\r\ne();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/Phalanger.inc",
    "content": "<?\r\n\r\nfunction __var_dump($x)\r\n{\r\n  __var_dump_rec(\"\", $x);\r\n}\r\n\r\nfunction __var_dump_rec($indent, $x)\r\n{\r\n  if (is_array($x) || is_object($x))\r\n  {\r\n    echo $indent,\"array\\n\";\r\n    echo \"$indent{\\n\";\r\n    \r\n    foreach ($x as $k => $v)\r\n    {\r\n      echo \"$indent  \";\r\n      if (is_string($k)) echo \"'$k'\"; else echo \"$k\";\r\n      echo \" => \";\r\n      \r\n      if (is_array($v) || is_object($v))\r\n      {\r\n        echo \"\\n\";\r\n        __var_dump_rec(\"$indent  \", $v);\r\n      }  \r\n      else\r\n      {\r\n        __var_dump_rec(\"\", $v);\r\n      }  \r\n    }\r\n    \r\n    echo \"$indent}\\n\";\r\n  }\r\n  else if (is_string($x))\r\n    echo \"{$indent}'$x'\\n\";\r\n  else if (is_null($x))\r\n    echo \"{$indent}NULL\\n\"; \r\n  else if (is_bool($x))\r\n    echo $x ? \"{$indent}TRUE\\n\" : \"{$indent}FALSE\\n\"; \r\n  else if (is_resource($x))\r\n    echo \"{$indent}resource '\".get_resource_type($x).\"'\\n\";\r\n  else if (is_double($x))\r\n    printf(\"{$indent}%.10f\\n\",$x); else\r\n    echo \"{$indent}$x\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/b.inc",
    "content": "<?\r\n\r\nclass B\r\n{\r\n\tpublic $x;\r\n\r\n\tfunction foo()\r\n\t{\r\n\t\techo $this->x;\r\n\t}\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/f.inc",
    "content": "<?\r\nfunction f()\r\n{\r\n\techo \"ahoj\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/function.inc",
    "content": "<?\r\n\r\nfunction f()\r\n{\r\n\techo \"ahoj\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include2.php",
    "content": "[expect exact] ahoj\r\n\r\n[file]\r\n<?\r\ninclude \"b.inc\";\r\n\r\nclass C extends B\r\n{\r\n}\r\n\r\n$x = new B;\r\n$x->x = \"ahoj\";\r\n\r\n$x->foo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include3.php",
    "content": "[expect exact] ahoj\r\n\r\n[file]\r\n<?\r\ninclude \"f.inc\";\r\n\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include6.php",
    "content": "[expect php]\r\n\r\n[additional scripts]\r\n6C.inc\r\n\r\n[file]\r\n<?\r\n  echo \"6A.php\\n\";\r\n  include_once(\"6B.inc\");\r\n  $x = \"6C.inc\";\r\n  include($x);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include_test.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\t$x = 0;\r\n\tif ($x == 0)\r\n\t{\r\n\t\tinclude \"include_test_a.inc\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\t// just to have include_test_b.inc in the assembly (does it spoil the test?)\r\n\t\tinclude \"include_test_b.inc\";\r\n\t}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include_test_a.inc",
    "content": "<?php\r\n\tfunction f()\r\n\t{\r\n\t\t$x = \"include_test_b.inc\";\r\n\t\tinclude $x;\r\n\t}\r\n\tf();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/include_test_b.inc",
    "content": "<?\r\n\techo \"include_test_b.inc included\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/script.php",
    "content": "[expect exact] ahoj\r\n[file]\r\n<?\r\n\r\n\trequire_once \"function.inc\";\r\n\r\n\tinclude \"script2.inc\";\r\n\r\nf();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Inclusions/script2.inc",
    "content": "<?\r\n\trequire_once \"function.inc\";\r\n\t$a = \"ahoj\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/const1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tconst A = 2;\r\n\t\tconst a = 3;\r\n\t\tconst B = 4;\r\n\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tconst A = 5;\r\n\t\t\tconst a = 6;\r\n\t\t}\r\n\t}\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tconst A = 7;\r\n\t}\r\n\r\n\tnamespace\r\n\t{\r\n\t\techo A, a, \\X::A, X::a, A\\A;\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/constants1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tdefine(\"X\", \"1\");\r\n\t}\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tdefine(\"A\\X\", \"2\");\r\n\t\t\r\n\t\techo \\X;\r\n\t\techo X;\r\n\t}\r\n\t\r\n\tnamespace B\r\n\t{\r\n\t\techo X;\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/extends1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo()\r\n\t\t\t{\r\n\t\t\t\techo __METHOD__;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tclass X extends \\X\r\n\t\t{\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tX::foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/extends2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\t// dynamically created class, so anything what is extending \\X is incomplete and has to be deferred\r\n\t\teval('class X\r\n\t\t{\r\n\t\t\tstatic function foo()\r\n\t\t\t{\r\n\t\t\t\techo __METHOD__;\r\n\t\t\t}\r\n\t\t}');\r\n\t}\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tclass X extends \\X\r\n\t\t{\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tX::foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/function1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tfunction foo(){ echo __FUNCTION__; }\r\n\t\t\r\n\t\tfoo();\r\n\t}\t\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tfunction foo(){ echo __FUNCTION__; }\r\n\t\t\r\n\t\tfoo();\r\n\t}\r\n\t\r\n\tnamespace B\r\n\t{\r\n\t\tfoo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/function2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tfunction foo(){ echo __FUNCTION__; }\r\n\t}\t\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tfunction foo(){ echo __FUNCTION__; }\r\n\t\t\r\n\t\t\\foo();\r\n\t}\r\n\t\r\n\tnamespace B\r\n\t{\r\n\t\tfoo();\r\n\t\t\\A\\foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/namespace1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace N\r\n\t{\r\n\t\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo()\r\n\t\t\t{\r\n\t\t\t\techo __NAMESPACE__;\r\n\t\t\t}\r\n\t\t} \r\n\t}\r\n\tnamespace\r\n\t{\r\n\t\tN\\X::foo();\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/simple_syntax1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace N;\r\n\r\n    echo __NAMESPACE__;\r\n\t\r\n\tnamespace M;\r\n\r\n    echo __NAMESPACE__;\r\n\t\r\n\tnamespace N\\M;\r\n\r\n    echo __NAMESPACE__;\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/use1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tuse A as X;\r\n\r\n\t\tclass A\r\n\t\t{\r\n\t\t\tstatic function foo()\r\n\t\t\t{\r\n\t\t\t\techo __METHOD__;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tX::foo();\r\n\t}\r\n\r\n\tnamespace B\r\n\t{\r\n\t\tuse A as X;\r\n\t\tX::foo();\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/use2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace\r\n\t{\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo(){ echo __METHOD__; }\r\n\t\t}\r\n\t\t\r\n\t\tX::foo();\r\n\t\t\\A\\X::foo();\r\n\t\t\\B\\X::foo();\r\n\t}\t\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo(){ echo __METHOD__; }\r\n\t\t}\r\n\t\t\r\n\t\tX::foo();\r\n\t\t\\A\\X::foo();\r\n\t\t\\B\\X::foo();\r\n\t}\r\n\t\r\n\tnamespace B\r\n\t{\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo(){ echo __METHOD__; }\r\n\t\t}\r\n\t\t\r\n\t\tX::foo();\r\n\t\t\\A\\X::foo();\r\n\t\t\\B\\X::foo();\r\n\t\t\r\n\t\tuse A\\X as M;\r\n\t\tM::foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/use3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tuse A as F;\r\n\r\n\t\tclass X\r\n\t\t{\r\n\t\t\tstatic function foo()\r\n\t\t\t{\r\n\t\t\t\t$x = new F\\X;\r\n\t\t\t\t$x->bar();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfunction bar()\r\n\t\t\t{\r\n\t\t\t\techo __METHOD__;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tX::foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Namespaces/use4.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tnamespace A\r\n\t{\r\n\t\tclass X{ static function foo(){echo __METHOD__;} }\r\n\t\tclass Y{ static function foo(){echo __METHOD__;} }\r\n\t\t\r\n\t\teval('use A\\Y as X; X::foo();');\r\n\t\tX::foo();\r\n\t}\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/_class_.php",
    "content": "[EXPECT]\r\n\r\n[FILE]\r\n<?\r\n  class A\r\n  {\r\n    function f()\r\n    {\r\n      function g()\r\n      {\r\n        echo __CLASS__;\r\n      }\r\n      g();\r\n    }\r\n  }\r\n\r\n  $a = new A;\r\n  $a->f();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/_function_.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?\r\n  function f()\r\n  {\r\n    class A\r\n    {\r\n      var $a = __FUNCTION__;\r\n      \r\n      function g()\r\n      {\r\n        echo $this->a;\r\n        echo __FUNCTION__;\r\n      }\r\n    } \r\n    \r\n    $a = new A;\r\n    $a->g();\r\n  }\r\n\r\n  f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/parent.php",
    "content": "[EXPECT php]\r\n\r\n[FILE]\r\n<?\r\n  class A\r\n  {\r\n    function f(){ echo \"f\";}\r\n  }\r\n\r\n  class B extends A\r\n  {\r\n    function f()\r\n    {\r\n      parent::f();\r\n    }\r\n  }\r\n  \r\n  $b = new B;\r\n  $b->f();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/parent2.php",
    "content": "[EXPECT]\r\n\r\n[FILE]\r\n<?php\r\n  class testbase\r\n{\r\nfunction DoSomething($option)\r\n{\r\n}\r\n}\r\nclass testclassa extends testbase\r\n{\r\nfunction DoSomething($option)\r\n{\r\ntestbase::DoSomething($option); \r\nparent::DoSomething($option); \r\nswitch($option)\r\n{\r\ncase 1:\r\n{\r\ntestbase::DoSomething($option); \r\nparent::DoSomething($option); \r\nbreak;\r\n}\r\n}\r\n}\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/self.php",
    "content": "[EXPECT php]\r\n\r\n[FILE]\r\n<?php\r\n  class A\r\n  {\r\n    function f(){ echo f;}\r\n  }\r\n\r\n  class B extends A\r\n  {\r\n    function g()\r\n    {\r\n     echo \"g\";\r\n    }\r\n    \r\n    function f()\r\n    {\r\n      self::g();\r\n    }\r\n  }\r\n  \r\n  $b = new B;\r\n  $b->f();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t01.php",
    "content": "[EXPECT] B\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    class B\r\n    {\r\n      static function g() { echo __CLASS__; }\r\n    }\r\n    B::g();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t02.php",
    "content": "[EXPECT] g\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    class B\r\n    {\r\n      static function g() { echo __METHOD__; }\r\n    }\r\n    B::g();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t03.php",
    "content": "[EXPECT] g\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    class B\r\n    {\r\n      static function g() { echo __FUNCTION__; }\r\n    }\r\n    B::g();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t04.php",
    "content": "[EXPECT] B\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      class B\r\n      {\r\n        static function g() { echo __CLASS__; }\r\n      }\r\n      B::g();\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t05.php",
    "content": "[EXPECT] g\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      class B\r\n      {\r\n        static function g() { echo __METHOD__; }\r\n      }\r\n      B::g();\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t06.php",
    "content": "[EXPECT] g\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      class B\r\n      {\r\n        static function g() { echo __FUNCTION__; }\r\n      }\r\n      B::g();\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t07.php",
    "content": "[EXPECT]\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      class B\r\n      {\r\n        \r\n      }\r\n      echo __CLASS__;\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t08.php",
    "content": "[EXPECT] v\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      echo __METHOD__;\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t09.php",
    "content": "[EXPECT] v\r\n\r\n[FILE]\r\n<?\r\nclass A\r\n{\r\n  static function f()\r\n  {\r\n    function v()\r\n    {\r\n      class B\r\n      {\r\n        \r\n      }\r\n      echo __FUNCTION__;\r\n    }\r\n    \r\n    v();\r\n  }\r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t10.php",
    "content": "[expect] f\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n  echo __METHOD__;\r\n}\r\nf();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/PseudoConst/t11.php",
    "content": "[expect] g\r\n[file]\r\n<?\r\n  function f($a)\r\n  {\r\n    echo $a;\r\n  }\r\n  \r\n  function g()\r\n  {\r\n    f(__FUNCTION__);\r\n  }\r\n  \r\n  g();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/References/array_argument.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$myobjects = array(1,array(2,3));\r\n\r\nfunction foo(&$hovno){ }\r\n \r\nfoo($myobjects[1]);\r\n\r\n$checkpoint = $myobjects;\r\n\r\n$myobjects[1][0] = 7;\r\n\r\necho \"x: \";\r\nvar_dump($myobjects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/array_local.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$myobjects = array(1,array(2,3));\r\n\r\nfunction foo() {\r\nglobal $myobjects;\r\n$o = & $myobjects[1];\r\n}\r\n\r\nfoo();\r\n\r\n$checkpoint = $myobjects;\r\n\r\n$myobjects[1][0] = 7;\r\n\r\necho \"x: \";\r\nvar_dump($myobjects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/array_ret_argument.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$myobjects = array(1,array(2,3));\r\n\r\nfunction & foo(&$hovno){ return $hovno;}\r\n \r\n$o = foo($myobjects[1]);\r\n\r\n$checkpoint = $myobjects;\r\n$myobjects[1][0] = 7;\r\n\r\necho \"x: \";\r\nvar_dump($myobjects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/array_ret_argument2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$myobjects = array(1,array(2,3));\r\n\r\nfunction & foo(&$hovno){ return $hovno;}\r\n \r\n$o = & foo($myobjects[1]);\r\n\r\n$checkpoint = $myobjects;\r\n$myobjects[1][0] = 7;\r\n\r\necho \"x: \";\r\nvar_dump($myobjects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/deepcopy.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$globalobjects = '';\r\n\r\nfunction mymain()\r\n{\r\n\tglobal $globalobjects;\r\n\t\r\n\t$myobjects = array(1,array(2,3));\r\n\t\r\n\t$o = & $myobjects[1];//creates reference\r\n\r\n\t//xdebug_debug_zval('myobjects');\r\n\t\r\n\t$globalobjects = $myobjects;// deep copy, ref_count of the reference is increased\r\n\t\r\n\techo \"<br/>\";\r\n\t\r\n\t//xdebug_debug_zval('myobjects');\r\n\t\techo \"<br/>\";\r\n\t\r\n\t//eval('echo \"ahoj\";');\r\n\r\n\t$myobjects[1] = 7;\t\r\n}\r\n\r\n function foo(&$hovno)\r\n {\r\n\r\n }\r\n\r\nmymain();\r\n\r\n\t//reference in array shouldn't act as a reference any more\r\n\techo \"globalobjects: \";\r\n\tvar_dump($globalobjects);\r\n\r\n \r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/explicitclear.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Y\r\n{\r\n\tvar $objects;\r\n\t\r\n\tfunction __construct(){\r\n\t  print \"Construyendo Y\\n\";\r\n\t  $this->objects = 7;\r\n\t}\r\n\t\r\n   function __destruct() {\r\n       print \"Destruyendo Y\\n\";\r\n   }\r\n}\r\n\r\nclass X {\r\n\r\nvar $inner_stuff;\r\n\r\nvar $objects = 'Init Value';\r\n\r\n\tfunction __construct(){\r\n\t $this->inner_stuff[] = new Y();\r\n\t}\r\n\r\n\tfunction foo() \r\n\t{\r\n\t\techo \"1\";\r\n\t\t$this->inner_stuff[0]->objects  = & $this->objects;\r\n\t\t\r\n\t\techo \"2\";\r\n\t\t$this->inner_stuff[0] = 23;// the reference is lost\r\n\t\r\n\t\techo \"3\";\t\r\n\t\t//deep copy occurs without reference - so deep copy copies everything\r\n\t\t$checkpoint = (array)$this;\r\n\t\t\r\n\t\t//since $this->object isn't longer referenced $chekpoint should be affected by this change\r\n\t\t$this->objects = 54;\r\n\t\t\r\n\t\tvar_dump($this);\r\n\t\tvar_dump($checkpoint);\r\n\t\t\r\n\t\t\r\n\t}\r\n\r\n}\r\n\r\n$x = new X();\r\n\r\necho \"call foo\";\r\n\r\n$x->foo();\r\n\r\n$checkpoint = (array)$x;\r\n\r\n$x->objects = 1004;\r\n\r\necho \"x: \";\r\nvar_dump($x);\r\necho \"<br/>checkpoint \";\r\nvar_dump($checkpoint);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/field_argument.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X {\r\n var $objects = 8;\r\n}\r\n\r\nfunction foo(&$neco) { \r\n}\r\n\r\n$x = new X();\r\nfoo($x->objects);\r\n//$o = & $x->objects;\r\n\r\n$checkpoint = (array)$x;\r\n\r\n$x->objects = 7;\r\n\r\necho \"x: \";\r\nvar_dump($x->objects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/field_local.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X {\r\nvar $objects = 7;\r\n\r\nfunction __construct() {\r\n$o = & $this->objects;\r\n}\r\n}\r\n\r\n$x = new X();\r\n$checkpoint = (array)$x;\r\n$x->objects = 25;\r\n\r\necho \"x: \";\r\nvar_dump($x);\r\necho \"<br/>checkpoint \";\r\nvar_dump($checkpoint);\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/ref_arrayitem.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$myobjects = array(1,array(2,3));\r\n\r\nfunction foo() {\r\n\tglobal $myobjects;\r\n\t$id = 2;\r\n\t$localarray[$id] = & $myobjects[1];\r\n}\r\n\r\nfoo();\r\n\r\n$checkpoint = $myobjects;\r\n\r\n$myobjects[1][0] = 7;\r\n\r\necho \"x: \";\r\nvar_dump($myobjects);\r\necho '<br/><br/>checkpoint ';\r\nvar_dump($checkpoint);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/References/ref_reasign.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X {\r\nvar $objects = 7;\r\n\r\nvar $objects2 = 22;\r\n\r\n\tfunction foo() \r\n\t{\r\n\t\t$o = & $this->objects;\r\n\t\t\r\n\t\t$o = & $this->objects2;\r\n\t\t//reference to $this->objects should be death now\r\n\t\t//reference to $this->objects2 is created\r\n\t\t\r\n\t\t$checkpoint = (array)$this;\r\n\t\t\r\n\t\t$this->objects = 54;\r\n\t\t$this->objects2 = 222;\r\n\t\t\r\n\t\tvar_dump($this);\r\n\t\tvar_dump($checkpoint);\r\n\t\t\r\n\t\t// it's necesary to close $o and copied reference in $checkpoint\r\n\t\t\r\n\t}\r\n\r\n}\r\n\r\n$x = new X();\r\n\r\n$x->foo();\r\n\r\n$checkpoint = (array)$x;\r\n\r\n$x->objects = 1004;\r\n$x->objects2 = 777;\r\n\r\necho \"x: \";\r\nvar_dump($x);\r\necho \"<br/>checkpoint \";\r\nvar_dump($checkpoint);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unreachable/t10.php.notest",
    "content": "[expect ct-warning] Unreachable code\r\n\r\n[file]\r\n\r\n<?\r\n$a = 2;\r\nexit;\r\n\r\nswitch($a)\r\n{\r\n\tcase 1: function f() { echo 1; }\r\n\tcase 2: function f() { echo 2; }\r\n}\r\n\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unreachable/t11.php.notest",
    "content": "[expect ct-warning] Unreachable code\r\n[file]\r\n<?\r\n$a = 2;\r\nswitch($a)\r\n{\r\n\tcase 1: function f() { echo 1; }\r\n\tcase 2:  if($a) break; function f() { echo 2; }\r\n}\r\n\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unreachable/t12.php.notest",
    "content": "[expect ct-warning] Unreachable code\r\n\r\n[file]\r\n<?\r\n$a = 2;\r\nswitch($a)\r\n{\r\n\tcase 1: function f() { echo 1; }\r\n\tcase 2:  if(false);\r\n\t\t function f() { echo 2; }\r\n}\r\n\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unreachable/t13.php",
    "content": "[ecpect ct-warning] unreachabl code\r\n[expect] undefined\r\n\r\n[file]\r\n<?\r\nwhile(0)\r\n{\r\n\tfunction f() {echo 2;}\r\n}\r\n\r\nf();\r\n\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/__unset.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass magicmethod\r\n{\r\n\tfunction __unset($variablename)\r\n\t{\r\n\t\techo \"Variable '\".$variablename.\"' not Set and Cannot be UnSet\";\r\n\t}\r\n}\r\n$a = new magicmethod();\r\nunset($a->name);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/calluserfunc.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$x = 10;\r\ncall_user_func('unset', $x);\r\nvar_dump($x);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/issetref2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n\tpublic $x = 'Init';\r\n\t\r\n\tfunction doBug() {\r\n\t\techo \"doBug:\\n\";\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t// Destroy reference (shouldn't touch $x)\r\n\t\tunset($ref);\r\n\r\n\t\tvar_dump(isset($ref));\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this);\r\n\t\t//die(); \r\n\t}\r\n\t\r\n\tfunction ithastowork() {\r\n\t\techo \"ithastowork:\\n\";\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t// Destroys x, but the values still exists and it's pointed by ref\r\n\t\tunset($this->x);\r\n\r\n\t\tvar_dump(isset($this->x));\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this);\r\n\t\tprint_r($ref);\r\n\t\t//die(); \r\n\t}\r\n}\r\n\r\nfunction alsoBug()\r\n{\t\r\n\tglobal $test;\r\n\techo \"\\nalsobug:\\n\";\r\n\t// Reference to field x\r\n\t$ref = &$test->x;\r\n\r\n\t// Destroy reference (shouldn't touch $x)\r\n\tunset($ref);\r\n\r\n\tvar_dump(isset($ref));\r\n\t\r\n\t// Returns $arr[1] destroyed\r\n\tprint_r($test);\r\n\t//die(); \r\n\r\n}\r\n\r\n// Reproduce BUG\r\n\r\n$test = new Test();\r\n$test->doBug();\r\n\r\n$test->x = 'Init';\r\n\r\n$test->ithastowork();\r\n\r\n$test->x = 'Init';\r\n\r\nalsoBug();\r\n\r\n\r\n$test->x = 'Init';\r\n\r\n//this works\r\necho \"this works:\\n\";\r\n\r\n// Reference to field x\r\n$ref = &$test->x;\r\n\r\n// Destroy reference (shouldn't touch $x)\r\nunset($ref);\r\n\r\nvar_dump(isset($ref));\r\n\r\n// Returns $arr[1] destroyed\r\nprint_r($test);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetglobal.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction destruir_foo() \r\n{\r\n    global $foo;\r\n    unset($foo);\r\n}\r\n\r\n$foo = 'bar';\r\ndestruir_foo();\r\necho $foo;\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetglobal2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction foo() \r\n{\r\n    unset($GLOBALS['bar']);\r\n}\r\n\r\n$bar = \"something\";\r\nfoo();\r\necho $bar;\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetindirect.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X{\r\n\r\nvar $x = 'Init';\r\n\r\n\tfunction optimizedLocals() {\r\n\t\techo \"optimizedLocals:\\n\";\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t$indirectref = 'ref';\r\n\t\t\r\n\t\t// Destroys x, but the values still exists and it's pointed by ref\r\n\t\tunset($$indirectref);\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this);\r\n\t\t//die(); \r\n\t}\r\n\r\n}\r\n\r\n$x = new X();\r\n$x->optimizedLocals();\r\nprint_r($x);\r\n\r\n$x->x = 'Init';\r\n\r\n//this works\r\n\r\necho \"this works:\\n\";\r\n// Reference to field x\r\n$ref = &$x->x;\r\n\r\n$indirectref = 'ref';\r\n\r\n// Destroys x, but the values still exists and it's pointed by ref\r\nunset($$indirectref);\r\n\r\n// Returns $arr[1] destroyed\r\nprint_r($x);\r\n//die(); \r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetproblem.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// Initial array with initial values\r\nclass Test {\r\n\tpublic $arr = array(1 => 'InitialValue');\r\n\r\n\tfunction doBug() {\r\n\t\t// Reference to element '1'\r\n\t\t$ref = &$this->arr[1];\r\n\r\n\t\t// Destroy reference (shouldn't touch $arr[1])\r\n\t\tunset($ref);\r\n\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this->arr);\r\n\t\t//die(); \r\n\t}\r\n}\r\n\r\n// Reproduce BUG\r\n\r\n$test = new Test();\r\n$test->doBug();\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetref.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction foo(&$bar) \r\n{\r\n    unset($bar);\r\n    $bar = \"blah\";\r\n}\r\n\r\n$bar = 'something';\r\necho \"$bar\\n\";\r\n\r\nfoo($bar);\r\necho \"$bar\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetref2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n\tpublic $x = 'Init';\r\n\t\r\n\tfunction doBug() {\r\n\t\techo \"doBug:\\n\";\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t// Destroy reference (shouldn't touch $x)\r\n\t\tunset($ref);\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this);\r\n\t\t//die(); \r\n\t}\r\n\t\r\n\tfunction ithastowork() {\r\n\t\techo \"ithastowork:\\n\";\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t// Destroys x, but the values still exists and it's pointed by ref\r\n\t\tunset($this->x);\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($this);\r\n\t\tprint_r($ref);\r\n\t\t//die(); \r\n\t}\r\n}\r\n\r\nfunction alsoBug()\r\n{\t\r\n\tglobal $test;\r\n\techo \"\\nalsobug:\\n\";\r\n\t// Reference to field x\r\n\t$ref = &$test->x;\r\n\r\n\t// Destroy reference (shouldn't touch $x)\r\n\tunset($ref);\r\n\t\r\n\t// Returns $arr[1] destroyed\r\n\tprint_r($test);\r\n\t//die(); \r\n\r\n}\r\n\r\n// Reproduce BUG\r\n\r\n$test = new Test();\r\n$test->doBug();\r\n\r\n$test->x = 'Init';\r\n\r\n$test->ithastowork();\r\n\r\n$test->x = 'Init';\r\n\r\nalsoBug();\r\n\r\n\r\n$test->x = 'Init';\r\n\r\n//this works\r\necho \"this works:\\n\";\r\n\r\n// Reference to field x\r\n$ref = &$test->x;\r\n\r\n// Destroy reference (shouldn't touch $x)\r\nunset($ref);\r\n\r\n// Returns $arr[1] destroyed\r\nprint_r($test);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/Unset/unsetref3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Test {\r\n\tpublic $x = 'Init';\r\n\t\r\n\tfunction ithastowork() {\r\n\t\t// Reference to field x\r\n\t\t$ref = &$this->x;\r\n\r\n\t\t// Destroys x, but the values still exists and it's pointed by ref\r\n\t\tunset($this->x);\r\n\t\t\r\n\t\t// Returns $arr[1] destroyed\r\n\t\tprint_r($ref);\r\n\t\t//die(); \r\n\t}\r\n}\r\n\r\n// Reproduce BUG\r\n\r\n$test = new Test();\r\n$test->ithastowork();\r\n\r\n$test->x = 'Init';\r\n\r\n\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/__call.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nclass X\r\n{\r\n    public static function __callStatic($name, $args)\r\n    {\r\n        echo \"__callStatic\\n\";\r\n        var_dump($name, $args);\r\n        return $name;\r\n    }\r\n\r\n    public function __call($name, $args)\r\n    {\r\n        echo \"__call\\n\";\r\n        var_dump($name, $args);        \r\n        return $name;\r\n    }\r\n\r\n    public function bar2($arg)\r\n    {\r\n        echo (\"bar2\".$arg);\r\n    }\r\n\r\n    public function bar()\r\n    {\r\n        return $this->bar3(\"hello\",1,2,3,4,5,6,7,8,9) . $this->bar2(\"xxx\");\r\n    }\r\n}\r\n\r\nif (true)\r\n{   // incomplete class decl\r\n    class Y extends X\r\n    {\r\n        public static function fooex($a)\r\n        {\r\n            echo \"fooex($a)/\" . parent::bar3(5,5,5) . X::bar4(6,6,6);   // should not be called statically\r\n        }\r\n\r\n        public function yoo($a)\r\n        {\r\n            return parent::bar3(1,1,1);// call it through __call, not __callStatic\r\n        }\r\n    }\r\n}\r\n\r\nclass Z extends Y\r\n{\r\n    public function zoo2()\r\n    {\r\n        return \"zoo2/\" . $this->nonexistingzoo(8,8,8);\r\n    }\r\n\r\n    public function zoo()\r\n    {\r\n        return $this->bar() . $this->zoo2() . X::nonexisting1(3);\r\n    }\r\n}\r\n\r\n// calling static methods resolved in compile time\r\necho X::nonexistingfoo(1,2,3);\r\necho call_user_func_array ( array(\"X\",\"nonexisting2\"), array(10,20,30) );\r\n\r\necho Y::nonexistingfoo(1,2,3);\r\necho Y::nonexistingfoo2(4);\r\necho call_user_func_array ( array(\"Y\",\"nonexisting3\"), array(\"a\",'b','c') );\r\n\r\necho Z::nonexistingstatic();\r\n\r\n// calling instance methods\r\n$x = new X();\r\necho $x->bar();\r\necho $x->non_existing_func(1,2,3);\r\necho call_user_func( array($x,\"foo\"), 5,6,7 );\r\n\r\n$y = new Y();\r\necho $y->bar();\r\necho $y->nonexisting4(9,8,7);\r\necho call_user_func( array($y,\"bar\"), 4,5,6);\r\necho call_user_func( array($y,\"nonexisting5\"), 333,666,999 );\r\n\r\n$z = new Z();\r\necho $z->zoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/abstracts.php",
    "content": "[expect]\r\nOK\r\n[file]\r\n<?\r\n\tclass A\r\n\t{\r\n\t}\r\n\t\r\n\tinterface I\r\n\t{\r\n\t\tfunction f(A $a, $b);\r\n\t\tstatic function g(A $a, $b);\r\n\t}\r\n\t\r\n\tclass C implements I\r\n\t{\r\n\t\tfunction f(A $a, $b) { }\r\n\t\tstatic function g(A $a, $b) { }\r\n\t}\r\n\t\r\n\tabstract class D implements I\r\n\t{\r\n\t\tabstract function f(A $a, $b);\r\n\t\tabstract static function g(A $a, $b);\r\n\t}\r\n\t\r\n\techo \"OK\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/aliased assign add.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n    function foo(&$x)\r\n    {\r\n        $x ++;\r\n\r\n        return 2;\r\n    }\r\n\r\n    $x = 0;\r\n\r\n    echo \"+=\\n\";\r\n    for ($i = 0; $i < 10; $i++)\r\n    {\r\n        echo \"$x,\";\r\n\t    $x += foo($x);\r\n        echo \"$x\\n\";\r\n    }\r\n\r\n    echo \"-=\\n\";\r\n    for ($i = 0; $i < 10; $i++)\r\n    {\r\n        echo \"$x,\";\r\n\t    $x -= foo($x);\r\n        echo \"$x\\n\";\r\n    }\r\n\r\n    echo \"*=\\n\";\r\n    for ($i = 0; $i < 10; $i++)\r\n    {\r\n        echo \"$x,\";\r\n\t    $x *= foo($x);\r\n        echo \"$x\\n\";\r\n    }\r\n\r\n    echo \"/=\\n\";\r\n    for ($i = 0; $i < 10; $i++)\r\n    {\r\n        echo \"$x,\";\r\n\t    $x /= foo($x);\r\n        echo \"$x\\n\";\r\n    }\r\n\r\n    echo \"&=\\n\";\r\n    for ($i = 0; $i < 10; $i++)\r\n    {\r\n        echo \"$x,\";\r\n\t    $x &= foo($x);\r\n        echo \"$x\\n\";\r\n    }\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/assign_in_call.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\tinclude('Phalanger.inc');\r\n\r\n\tfunction f(&$x)\r\n\t{\r\n\techo \"f($x)\\n\";\r\n\t$x = 10;\r\n\t}\r\n\tfunction g1()\r\n\t{\r\n\t$a = 1;\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($a = 'x');\r\n\tu($a = 'x');\r\n\r\n\t__var_dump($a,$b,$c);\r\n\t}\r\n\tfunction g2()\r\n\t{\r\n\t$a = \"b\";\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($$a = $b = 'x');\r\n\tu($$a = $b = 'x');\r\n\r\n\t__var_dump($a,$b,$c);\r\n\t}\r\n\tfunction g3()\r\n\t{\r\n\t$a = \"b\";\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($$a = $b = 'x');\r\n\tu($$a = $b = 'x');\r\n\r\n\t__var_dump($a,$b,$c);\r\n\t}\r\n\r\n\tfunction g4()\r\n\t{\r\n\t$a = \"b\";\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($$a = $b = 'x');\r\n\tu($$a = $b = 'x');\r\n\r\n\t__var_dump($a,$b,$c);\r\n\teval(\";\");\r\n\t}\r\n\tfunction g5()\r\n\t{\r\n\t$a = 1;\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($a[1][2] = $b = 'x');\r\n\tu($a[1][2] = $b = 'x');\r\n\r\n\t__var_dump($a,$b,$c);\r\n\t}\r\n\tfunction g6()\r\n\t{\r\n\t$a = 1;\r\n\t$b = 2;\r\n\t$c = 3;\r\n\r\n\tf($a = $b =& $c);\r\n\tu($a = $b =& $c);\r\n\r\n\t__var_dump($a,$b,$c);\r\n\t}\r\n\tfunction g7()\r\n\t{\r\n\t$a = 1;\r\n\t$b = 2;\r\n\t  \r\n\tf($a = $a =& $b);\r\n\tu($a = $a =& $b);\r\n\t  \r\n\t__var_dump($a,$b);\r\n\t}\r\n\tfunction g8()\r\n\t{\r\n\tclass A { static $x; }\r\n\t \r\n\tf($x->x[1][2]->a[1][2] = 1);\r\n\tf(A::$x[1] = 1);\r\n\tf(A::$x = 1);\r\n\t  \r\n\tu($x->x[1][2]->a[1][2] = 1);\r\n\tu(A::$x[1] = 1);\r\n\tu(A::$x = 1);\r\n\t}\r\n\tclass X\r\n\t{\r\n\tprivate $q = 0;\r\n\t  \r\n\tfunction __get($field)\r\n\t{\r\n\t\techo \"__get($field) = $this->q\\n\";\r\n\t\treturn $this->q;\r\n\t}\r\n\t  \r\n\tfunction __set($field,$value)\r\n\t{\r\n\t\techo \"__set($field,$value)\\n\";\r\n\t\t$this->q = $value;\r\n\t}\r\n\t}\r\n\r\n\tfunction g9()\r\n\t{\r\n\t$x = new X;\r\n\techo \"known:\\n\";\r\n\tf($x->p += 1);\r\n\techo \"unknown:\\n\";\r\n\tu($x->p += 2);\r\n\t}\r\n\r\n\tfunction g10()\r\n\t{\r\n\t$x = false;\r\n\tif ($x)\r\n\t{\r\n\t\tu($x[1][2]->f()->a[3][4][5]);\r\n\t\tu($x[1][2]->f()->a[3][4][5]+=$x[1][0]->f($a[]=$a[1])->a[3][4][5] *= $f->a->a->a->a);\r\n\t\tu($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);\r\n\t}  \r\n\t}\r\n\r\n\t$x = true;\r\n\tif ($x) { function u($x) { echo \"u($x)\\n\"; } }\r\n\r\n\tfor($i=1;$i<=10;$i++)\r\n\t{\r\n\techo \"\\ng$i:\\n\";\r\n\t$g = \"g$i\";\r\n\t@$g();\r\n\t}\r\n\r\n\techo \"Done.\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/assignments.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nerror_reporting(0);\r\n\r\nfunction h(&$x) { $x = 10; }\r\neval('function unknown($x) {  }');\r\n\r\n$a = 1;\r\n$b = 3;\r\n$c = 5;\r\n$d = 6;\r\n$e = 7;\r\necho \"---1\";\r\n$a -= $b *= $c /= $d %= $e += 1;\r\necho \"---1\";\r\n\r\nvar_dump($a,$b,$c,$d,$e);\r\n\r\necho \"---2\";\r\n$a = $b = $c += $d = $e;\r\necho \"---2\";\r\n\r\nvar_dump($a,$b,$c,$d,$e);\r\n\r\nunset($a,$b,$c,$d,$e);\r\n\r\necho \"---3\";\r\n$a[$c = ${$e = $f = $g}]->h[$z->l]->u->v = $b[$c = ${$e = $f = $g}]->h[$z->l]->u->v;\r\necho \"---3\";\r\n\r\necho \"---4\";\r\nunknown($a = $b = $c);\r\necho \"---4\";\r\n\r\necho \"---5\";\r\n$a[][][] = $b[][][] = $c[1][2][3] = array(1,2,3);\r\necho \"---5\";\r\n\r\nvar_dump($a,$b,$c);\r\n\r\n$z = array(1,2,3);\r\n\r\necho \"---6\";\r\n$u = $v = $w =& $z;\r\necho \"---6\";\r\n\r\n$u[] = \"u\";\r\n$v[] = \"v\";\r\n$w[] = \"w\";\r\n$z[] = \"z\";\r\nvar_dump($u,$v,$w,$z);\r\n\r\necho \"---7\";\r\nh($aa[][][][] =& $bb[][][][]);\r\necho \"---7\";\r\n\r\nvar_dump($aa,$bb);\r\n\r\necho \"---8\";\r\nunknown($a =& $b,$x);\r\necho \"---8\";\r\n\r\n$a[$c =& ${$e = $f =& $g}]->h[$z->l]->u->v =& $b[$c =& ${$e = $f = $g}]->h[$z->l]->u->v;\r\n\r\n$c =& ${$e =& $g};\r\n\r\n$x =& $a[][][];\r\n\r\nh($a[][][]);\r\n\r\nh($a);\r\nh($a[]);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/auto_globals_001.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\t$GLOBALS[\"x\"] = 56;\r\n\techo $GLOBALS[\"x\"];\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/auto_globals_002.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$a = array(1=>\"hello\", \"two\"=>\"world\");\r\n$GLOBALS[\"b\"] = $a;\r\necho $GLOBALS[\"b\"][1].\" \".$GLOBALS[\"b\"][\"two\"];\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/auto_globals_003.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\t// Set variable and read it via $GLOBALS\r\n\t$a = 5;\r\n\techo $GLOBALS[\"a\"].\"<br>\";\r\n\t// Take reference of $GLOBALS\r\n\t$a = array(1=>\"hello\", \"two\"=>\"world\");\r\n\t$b =& $GLOBALS;\r\n\techo $b[\"a\"][1].\" \".$b[\"a\"][\"two\"].\"<br>\";\r\n\t// Set $GLOBALS\r\n\t$GLOBALS[\"a\"] = \"Set via GLOBALS\".\"<br>\";\r\n\techo $a;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/break_in_global_code.php",
    "content": "[expect ct-error] Cannot break/continue 1 level(s)\r\n\r\n[file]\r\n<?\r\nfunction f() { echo 1; }; break;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/chain_ending_by_string_index.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n$a = array(\"\");\r\n$a[0][0] = \"f\";\r\n\r\nvar_dump($a);\r\n\r\n$a = array(\"bubu\");\r\n@$a[0][0] = \"xyz\";\r\n\r\nvar_dump($a);\r\n\r\nclass C { public $f; }\r\n\r\n$c = new C;\r\n$c->f = \"kuku\";\r\n$c->f[2] = \"x\";\r\n\r\nvar_dump($c);\r\n\r\nclass B { static $f; }\r\n\r\nB::$f = \"hello\";\r\nB::$f[3] = \"x\";\r\nvar_dump(B::$f);\r\n\r\neval('class A { static $f; }');\r\n\r\nA::$f = \"hello\";\r\nA::$f[3] = \"x\";\r\nvar_dump(A::$f);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/chaining_test.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\tclass Class1\r\n\t{\r\n\t\tpublic static $x;\r\n\t\tpublic static $y;\r\n\t};\r\n\t\r\n\tClass1::$x->a->b->c[0][1][2]->x[\"A\"]->y[\"B\"]->z[\"C\"] = \"Hujer\";\r\n\tClass1::$y->a->b->c[0][1][2]->x[\"A\"]->y[\"B\"]->z[\"C\"] =& Class1::$x->a->b->c;\r\n\t\r\n\techo Class1::$y->a->b->c[0][1][2]->x[\"A\"]->y[\"B\"]->z[\"C\"][0][1][2]->x[\"A\"]->y[\"B\"]->z[\"C\"];\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/class_consts.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\tdefine('A', 123);\t// constant's value unknown at compile time\r\n\t\r\n\techo \"Global deferred constant:\\n\";\t\r\n\tvar_dump( A );\t// through Operator\r\n\t\r\n\tclass X\r\n\t{\r\n\t\tconst A = A;\r\n\t}\r\n\t\r\n\techo \"Known class deferred constant:\\n\";\r\n\tvar_dump( X::A );\t// Operator GetConstantValue\r\n\tvar_dump( constant('X::A') );\t// class library function accessing defined constants\r\n\t\r\n\tif (true)\r\n\t{\r\n\t\tclass Y\r\n\t\t{\r\n\t\t\tconst A = A;\r\n\t\t}\r\n\t}\r\n\t\r\n\techo \"Unknown class deferred constant:\\n\";\r\n\tvar_dump( Y::A );\t// Operator GetConstantValue\r\n\t\r\n\t\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/closures_001.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction test()\r\n{\r\n    $a = 1;\r\n    $b = 2;\r\n\r\n    $x = function($p, $q, $r = 123) use ($a, &$b)\r\n    {\r\n        echo $a, $b++, $p, $q;\r\n        echo __FUNCTION__;\r\n    };\r\n    $x(1,2);\r\n    $x(1,2);\r\n    \r\n    var_dump($x);\r\n}\r\ntest();"
  },
  {
    "path": "Testing/Tests/Compiler/continue_in_global_code.php",
    "content": "[expect ct-error] Cannot break/continue 1 level(s)\r\n\r\n[file]\r\n<?\r\nfunction f() { echo 1; }; continue;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/deep_copy.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n/*\r\n  Checks whether self-referencing arrays are correctly deeply-copied.\r\n*/\r\n\r\n$a = array(&$a);\r\n$b = $a;\r\n\r\nvar_dump($a,$b);\r\n\r\n$a[1] = 1;\r\n\r\nvar_dump($a,$b);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/deep_copy_refbox.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\tinclude('Phalanger.inc');\r\n\r\n\t/*\r\n\t  \r\n\tChecks whether return values are deeply copied if they are passed further by reference and\r\n\treference boxing takes place. \r\n\t  \r\n\t*/\r\n\tclass A\r\n\t{\r\n\t\tpublic static function f()\r\n\t\t{\r\n\t\tglobal $z;\r\n\t\t$x =& $z;\r\n\t\treturn $x;\r\n\t\t}\r\n\r\n\t\tpublic function g()\r\n\t\t{\r\n\t\tglobal $z;\r\n\t\t$x =& $z;\r\n\t\treturn $x;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction f()\r\n\t{\r\n\t\tglobal $z;\r\n\t\t$x =& $z;\r\n\t\treturn $x;\r\n\t}\r\n\r\n\tfunction g(&$x)\r\n\t{\r\n\t\t$x[] = 1;\r\n\t}\r\n\r\n\t$z = array(1);\r\n\t$a = new A;\r\n\r\n\tg(f());\r\n\t__var_dump($z);\r\n\r\n\tg(A::f());\r\n\t__var_dump($z);\r\n\r\n\t$g = \"g\";\r\n\t$g(A::f());\r\n\t__var_dump($z);\r\n\r\n\tg($a->g());\r\n\t__var_dump($z);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/expr_init.php",
    "content": "[expect ct-error] Syntax error\r\n\r\n[file]\r\n<?php\r\nfunction foo(){\r\n    static $int = 0;          // correct \r\n    static $int = 1+2;        // wrong  (as it is an expression)\r\n//    static $int = sqrt(121);  // wrong  (as it is an expression too)\r\n\r\n    $int++;\r\n    echo $int;\r\n}\r\n\r\nfoo();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/for_loop.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n// tests expression lists in the loop:\r\n\r\nfor ($i = 0, $j = 10; $i < 2, $j > 2; $i++, $j--)\r\n{\r\n  echo $i,\".\",$j,\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/foreach1.php",
    "content": "[expect exact]\r\nx => array(3)\r\n{\r\n  [0] => integer(1)\r\n  [1] => integer(2)\r\n  [2] => integer(3)\r\n}\r\n[file]\r\n<?\r\n\r\n//\r\n// Tests whether PhpArray's foreach enumerator correctly \r\n// dereferences and deeply copies values.\r\n//\r\n\r\n$x = array(1,2,3);\r\n$a = array(\"x\" => &$x);\r\nforeach ($a as $k => $v)\r\n{\r\n  $x[1] = 10;\r\n  echo \"$k => \";\r\n  var_dump($v);\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/foreach_arrays.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$a = array(1,2,3);\r\nforeach ($a as $v)\r\n{\r\n  echo \"$v\\n\";\r\n}\r\n\r\nforeach ($a as $k => $v)\r\n{\r\n  echo \"$k-$v\\n\";\r\n}\r\n\r\n$i = 10;\r\nforeach ($a as $k =>& $v)\r\n{\r\n  echo \"$k-$v\\n\";\r\n  $v = $i++;\r\n}\r\nvar_dump($a);\r\n\r\n$a = array(0,1,2,3,4,5);\r\n$i = 0;\r\nforeach ($a as $k =>& $v)\r\n{\r\n  $v+=100;\r\n\r\n  if ($i++==0)\r\n  {\r\n    $a[] = 4;\r\n    $a[1] = 1;\r\n    unset($a[3]);\r\n  }\r\n}\r\nvar_dump($a);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/func_get_args.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo\r\n{\r\n\tfunction bar()\r\n\t{\r\n\t\t$args = func_get_args();\r\n\t\t\r\n\t\tforeach($args as $arg)\r\n\t\t{\r\n\t\t\techo $arg;\r\n\t\t}\t\t\r\n\t\t\r\n\t}\r\n}\r\n\r\n$x = new foo();\r\n$x->bar('ahoj',13);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/function_002.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n\tglobal $z;\r\n\r\n\techo $z;\r\n}\r\n\r\n$z = \"Set in global code\";\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/function_003.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\nfunction f(&$par)\r\n{\r\n\t$par = \"Set in f() function\";\r\n}\r\n\r\nf($a);\r\nvar_dump($a);\r\n\r\nclass A\r\n{\r\n\tpublic $a;\r\n}\t\r\n\r\nclass B\r\n{\r\n\tfunction f(&$par)\r\n\t{\r\n\t\t$par = \"Set in B->f() method\";\t\r\n\t}\t\r\n}\r\n\r\n$o = new A();\r\n$o->a = new B();\r\n$r =& $o->a->f($a);\r\n__var_dump($o, $r, $a);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/function_004.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\nfunction f(&$par)\r\n{\r\n\t$par = \"Set in f() function\";\r\n}\r\n\r\nf($a);\r\nvar_dump($a);\r\n\r\nclass A\r\n{\r\n\tpublic $a;\r\n}\t\r\n\r\nclass B\r\n{\r\n\tfunction f(&$par)\r\n\t{\r\n\t\t$par = \"Set in B->f() method.\\n\";\t\r\n\t\treturn \"ahoj\";\r\n\t}\t\r\n}\r\n\r\nclass C\r\n{\r\n\tfunction &f(&$par)\r\n\t{\r\n\t\techo \"Method C->f() return what it gets.\\n\";\r\n\t\treturn $par;\r\n\t}\t\r\n}\r\n\r\n$o = new A();\r\n$o->a = new B();\r\n$r =& $o->a->f($a);\r\n__var_dump($o, $r, $a);\r\n\r\n$o = new A();\r\n$o->a = new C();\r\n$a = \"Set via \\$a.\\n\";\r\n$r =& $o->a->f($a);\r\n__var_dump($o, $r, $a);\r\n$r = \"Set via \\$r\\n\";\r\n__var_dump($o, $r, $a);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/function_call.php",
    "content": "[expect exact]\r\nOK\r\n[file]\r\n<?\r\n/*\r\n\r\n  Checks whether args-aware routines returning by reference are called properly.\r\n\r\n*/\r\n\r\nclass A\r\n{\r\n    static function &g()\r\n    {\r\n      // make args-aware:\r\n      $x = func_get_args();\r\n      \r\n      return $x;\r\n    }\r\n\r\n    static function f()\r\n    {\r\n      $x = A::g(1,2);\r\n      $y =& A::g(1,2);\r\n    }\r\n}\r\n\r\nA::f();\r\necho \"OK\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/if_statement.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nf();\r\n\r\nfunction f()\r\n{\r\n\t$x = 0;\r\n\t$y = 1;\r\n\r\n\techo \"\\n-- 1 ---------------\\n\";\r\n\r\n\tif ($x) echo \"0\";\r\n\tif ($y) echo \"1\"; else echo \"2\";\r\n\tif (1) echo \"3\";\r\n\tif (1) echo \"4\"; else echo \"5\";\r\n\tif (0) echo \"6\";\r\n\tif (0) echo \"7\"; else echo \"8\";\r\n\r\n\techo \"\\n-- 2 ---------------\\n\";\r\n\r\n\tif ($x) echo \"9\"; elseif ($y) echo \"a\";\r\n\tif (0) echo \"b\"; elseif ($y) echo \"c\";\r\n\tif (1) echo \"d\"; elseif ($y) echo \"e\";\r\n\tif ($x) echo \"f\"; elseif (1) echo \"g\";\r\n\tif ($x) echo \"h\"; elseif (0) echo \"i\";\r\n\tif (1) echo \"j\"; elseif (0) echo \"k\";\r\n\tif (1) echo \"l\"; elseif (1) echo \"m\";\r\n\tif (0) echo \"n\"; elseif (1) echo \"o\";\r\n\tif (0) echo \"p\"; elseif (0) echo \"q\";\r\n\r\n\techo \"\\n-- 3 ---------------\\n\";\r\n\r\n\tif ($x) echo \"9\"; elseif ($y) echo \"a\"; else echo \"A\";\r\n\tif (0) echo \"b\"; elseif ($y) echo \"c\"; else echo \"B\";\r\n\tif (1) echo \"d\"; elseif ($y) echo \"e\"; else echo \"C\";\r\n\tif ($x) echo \"f\"; elseif (1) echo \"g\"; else echo \"D\";\r\n\tif ($x) echo \"h\"; elseif (0) echo \"i\"; else echo \"E\";\r\n\tif (1) echo \"j\"; elseif (0) echo \"k\"; else echo \"F\";\r\n\tif (1) echo \"l\"; elseif (1) echo \"m\"; else echo \"G\";\r\n\tif (0) echo \"n\"; elseif (1) echo \"o\"; else echo \"H\";\r\n\tif (0) echo \"p\"; elseif (0) echo \"q\"; else echo \"I\";\r\n\r\n\techo \"\\n-- 4 ---------------\\n\";\r\n\r\n\tif ($x) echo \"9\"; elseif ($y) echo \"a\"; elseif (0) echo \"a\"; else echo \"A\";\r\n\tif (0) echo \"b\";  elseif ($y) echo \"c\"; elseif (1) echo \"c\"; else echo \"B\";\r\n\tif (1) echo \"d\";  elseif ($y) echo \"e\"; elseif (0) echo \"e\"; else echo \"C\";\r\n\tif ($x) echo \"f\"; elseif (1)  echo \"g\"; elseif (1) echo \"g\"; else echo \"D\";\r\n\tif ($x) echo \"h\"; elseif (0)  echo \"i\"; elseif (0) echo \"i\"; else echo \"E\";\r\n\tif (1) echo \"j\";  elseif (0)  echo \"k\"; elseif ($y)  echo \"k\"; else echo \"F\";\r\n\tif (1) echo \"l\";  elseif (1)  echo \"m\"; elseif ($x)  echo \"m\"; else echo \"G\";\r\n\tif (0) echo \"n\";  elseif (1)  echo \"o\"; elseif ($y)  echo \"o\"; else echo \"H\";\r\n\tif (0) echo \"p\";  elseif (0)  echo \"q\"; elseif ($x)  echo \"q\"; else echo \"I\";\r\n\t\r\n\techo \"\\n-- 5 ---------------\\n\";\r\n\r\n\tif (0) echo \"J\"; elseif (0) echo \"K\"; elseif (1) echo \"L\"; elseif (1) echo \"M\";\r\n}\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_001.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\t$x = \"a\";\r\n\t$$x = 56;\r\n\techo $$x.\" \".$a;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_002.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$a = array(1=>\"hello\", \"two\"=>\"world\");\r\n$b = \"b\";\r\n$$b = $a;\r\necho $b[1].\" \".$b[\"two\"];\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_003.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\t// Set variable and read it via indirect access\r\n\t$a = \"a\";\r\n\techo $$a.\"<br>\";\r\n\t// Take reference of $GLOBALS\r\n\t$a = array(1=>\"hello\", \"two\"=>\"world\");\r\n\t$b = \"c\";\r\n\t$$b =& $a;\r\n\techo $c[1].\" \".$c[\"two\"].\"<br>\";\r\n\t// Set $$a\r\n\t$a = \"b\";\r\n\t$$a = \"Set via indirect variable\";\r\n\techo $b;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_004.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n\t$x = \"a\";\r\n\t$$x = 56;\r\n\techo $$x.\" \".$a;\r\n}\r\nf();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_005.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n\t$a = array(1=>\"hello\", \"two\"=>\"world\");\r\n\t$b = \"b\";\r\n\t$$b = $a;\r\n\techo $b[1].\" \".$b[\"two\"];\r\n} \r\nf();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_007.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$a = \"b\";\r\n$$a = \"Stored via indirect variable.\";\r\necho $$a.\" \".$b;\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/indirect_global.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\n$c  = \"a\";\r\n$$c = 3;\r\necho $a;\r\n\r\n$c  = \"a\";\r\n$a = 5;\r\necho \" \".$$c;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/inheritance.php",
    "content": "[expect] ahoj \r\n\r\n[file]\r\n<?php\r\n\r\neval('class A { function f() { echo \"ahoj\"; } }');\r\n\r\nclass B extends A { }\r\n\r\nB::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/inheritance2.php",
    "content": "[expect] hey!\r\n\r\n[file]\r\n<?\r\neval ('class InEval { function f() { echo \"hey!\"; } }');\r\n\r\nclass A extends InEval\r\n{\r\n}\r\n\r\nclass B extends A\r\n{\r\n}\r\n\r\nclass C extends B\r\n{\r\n}\r\n\r\nclass D extends C\r\n{\r\n\tfunction f()\r\n\t{\r\n\t\treturn parent::f();\r\n\t}\r\n}\r\n\r\nD::f();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/isset_unset_001.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction sp()\r\n{\r\n\treturn \" <br>\\n\";\r\n}\r\n\r\n\r\nfunction f()\r\n{\r\n\techo \"Testing x (object) in optimized function: \";\r\n\techo isset($x).sp();\r\n\t$x = 5;\r\n\techo isset($x).sp();\r\n\tunset($x);\r\n\techo isset($x).sp();\r\n}\r\n\r\nfunction g()\r\n{\r\n\t// no notice that $y is undefined is displayed, this is an optimized function\r\n\r\n\techo \"Testing x (PhpReference) in optimized function: \";\r\n\techo isset($x).sp();\r\n\t$x = 5;\r\n\techo isset($x).sp();\r\n\tunset($x);\r\n\techo isset($x).sp();\r\n\t$$y =& $x;\r\n}\r\n\r\nfunction h()\r\n{\r\n\techo 'Testing $$x (created at runtime) in optimized function: ';\r\n\t$x = \"y\";\r\n\techo isset($$x).sp();\r\n\t$$x = 5;\r\n\techo isset($$x).sp();\r\n\tunset($$x);\r\n}\r\n\r\necho \"Testing x in global code: \";\r\necho isset($x).sp();\r\n$x = 5;\r\necho isset($x).sp();\r\nunset($x);\r\necho isset($x).sp();\r\n\r\nf();\r\ng();\r\nh();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Compiler/list #26681.php",
    "content": "[expect php]\r\n[file]\n<?php\n\n$p = array();\n\n$x = (list( $p[\"first\"], list( list($a), $b ), ) = array( 1, array(array(2),3),\"text\" ));\n\nvar_dump($x, $p, $a, $b);\n\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/new_array_item_assignadd.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction foo($value)\r\n{\r\n\techo \"($value) \";\r\n\treturn $value;\r\n}\r\n\r\nfunction test($value)\r\n{\r\n\techo \"\\nAssignAdd - $value:\\n\";\r\n\t\r\n\t$arr = array();\r\n\t\r\n\t$arr[] .= $value;\r\n\t$arr[] += $value;\r\n\t$arr[] -= $value;\r\n\t$arr[] *= foo($value);\r\n\t$arr[] /= foo($value);\r\n\t$arr[] &= foo($value);\r\n\t// ...\r\n\t\r\n\tvar_dump($arr);\r\n}\r\n\r\ntest(123);\r\ntest(\"hello\");\r\ntest(\"456\");\r\ntest(-789);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/null_hints.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nclass A \r\n{\r\n}\r\n\r\nfunction f(A $a = null)\r\n{\r\n  var_dump($a);\r\n}\r\n\r\nfunction g(A $a)\r\n{\r\n  var_dump($a);\r\n}\r\n\r\nfunction h(array $a = null)\r\n{\r\n  var_dump($a);\r\n}\r\n\r\nfunction r(A &$a = null)\r\n{\r\n  var_dump($a);\r\n}\r\n\r\nfunction s(A &$a)\r\n{\r\n  var_dump($a);\r\n}\r\n  \r\nf();  \r\nf(null);  \r\nh();  \r\nh(null);  \r\nr();  \r\nr($x = null); \r\n$f = \"f\";\r\n$f();\r\n$f(null);\r\n$r = \"r\";\r\n$r();\r\n$r($x = null);\r\n//g();     // error\r\n//g(null); // error\r\n//s();     // error\r\n//s($x = null); // error\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/public_abstract_member.php",
    "content": "[expect exact]\n\n[file]\n<?php\n// \"abstract public\" is fine, but not \"public abstract\".\nabstract class KlassName1 {\n\tpublic abstract function member();\n}\n\nabstract class KlassName2 {\n\tabstract public function member();\n}\n\nabstract class KlassName3 {\n\tabstract function member();\n}\n"
  },
  {
    "path": "Testing/Tests/Compiler/pure_create_function.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\nfunction foo()\r\n{\r\n\t$x = create_function('$a, $b', 'echo $a. $b;');\r\n\t\r\n\t$x(\"a\", \"b\");\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/pure_function_exists.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\nfunction foo()\r\n{\r\n\r\n}\r\n\r\nvar_dump( function_exists(\"foo\") );\r\nvar_dump( function_exists(\"foo2\") );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/pure_math_str.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\nvar_dump( (int)(sin(\"1.0\") * 100) == 84 );\r\nvar_dump( (int)(log(10)*100) == 230 );\r\nvar_dump( substr(\"1.0\", 1, 1) );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/reference_semantics.php.kb",
    "content": "[expect exact]\r\n-----------------------------------------------\r\nfunction return\r\n-----------------------------------------------\r\nstring(3) \"foo\"\r\nfoo\r\nstring(3) \"foo\"\r\nfoo\r\nstring(3) \"foo\"\r\nfoo\r\n-----------------------------------------------\r\n-ok-\r\n-----------------------------------------------\r\nok\r\n[file]\r\n<?\r\n\r\n/* Tests changed semantics of references since PHP 5.1 */\r\n\r\necho \"-----------------------------------------------\\n\";\r\n\r\nfunction func() {\r\n    return 'function return';\r\n}\r\n\r\n$x = 'original value';\r\n$y =& $x;\r\n$y = &func();\r\necho $x;\r\n\r\necho \"\\n\";\r\necho \"-----------------------------------------------\\n\";\r\n\r\nfunction &f() \r\n{\r\n    $x = \"foo\";\r\n    var_dump($x);\r\n    print \"$x\\n\";\r\n    return($a);\r\n}\r\n\r\nfor ($i = 0; $i < 3; $i++) \r\n{\r\n    $h = &f();\r\n}\r\n\r\necho \"-----------------------------------------------\\n\";\r\n\r\n$arr = array('a1' => array('alfa' => 'ok'));\r\n$arr =& $arr['a1'];\r\necho '-'.$arr['alfa'].\"-\\n\";\r\n\r\necho \"-----------------------------------------------\\n\";\r\n\r\nfunction & foo() {\r\n    $var = 'ok';\r\n    return $var;\r\n}\r\n\r\nfunction & bar() {\r\n    return foo();\r\n}\r\n\r\n$a =& bar();\r\necho \"$a\\n\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/self.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nclass A {\r\n    public static function who() {\r\n        echo __CLASS__;\r\n    }\r\n    public static function test() {\r\n        self::who();\r\n    }\r\n}\r\n\r\nclass B extends A {\r\n    public static function who() {\r\n        echo __CLASS__;\r\n    }\r\n}\r\n\r\nB::test();\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/static_call.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nabstract class Bar\r\n{\r\n\r\n\tvar $color = \"yellow\";\r\n\r\n\tpublic function Foo()\r\n\t{\r\n\t\techo \"Foo\";\r\n\t\t//return $this->color;\r\n\t}\r\n}\r\n\r\nclass ChocolateBar extends Bar\r\n{\r\n\r\n\tpublic function Boo()\r\n\t{\r\n\t\techo self::Foo();//call to a non-static function statically from non-static function\r\n\t}\r\n\r\n\tpublic static function BooStatic()\r\n\t{\r\n\t\techo self::Foo();//call to a non-static function statically from static function\r\n\t}\r\n}\r\n\r\n$a = new ChocolateBar();\r\n\r\n$a->Boo();\r\n@ChocolateBar::BooStatic();\r\n\r\ncall_user_func(array($a,\"Foo\"));//callback to a non-static function non-staticaly\r\n@call_user_func(array(\"ChocolateBar\",\"Foo\"));//callback to a non-static function statically\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/switch.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction f($a)\r\n{\r\n  $cnd = false;\r\n  switch ($a)\r\n  {\r\n    default:\r\n      echo \"default\\n\";\r\n\r\n    case \"submit\":\r\n      echo \"submit\\n\";\r\n      if ($cnd)\r\n      {\r\n        echo \"if\\n\";\r\n      }\r\n\r\n    case \"edit\":\r\n      echo \"edit\\n\";\r\n      break;\r\n  }\r\n}\r\n\r\nf(\"submit\");\r\nf(\"edit\");\r\nf(\"x\");\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/ternary_ex.php",
    "content": "[expect exact]\r\narray(2)\r\n{\r\n  [1] => integer(1)\r\n  [0] => integer(0)\r\n}\r\narray(4)\r\n{\r\n  [0] => integer(1)\r\n  [1] => integer(2)\r\n  [2] => integer(3)\r\n  [3] => integer(4)\r\n}\r\narray(2)\r\n{\r\n  [1] => integer(1)\r\n  [2] => integer(2)\r\n}\r\ninteger(1)\r\n[file]\r\n<?\r\n$a = array(\r\n\r\nfunction_exists('key') ? 1:0 => function_exists('key') ? 1:0,\r\nfunction_exists('unknown') ? 1:0 => function_exists('unknown') ? 1:0\r\n\r\n);\r\n\r\n$b = array(1,2,3,4);\r\n\r\n$c = array(1=>1,2=>2);\r\n\r\n$d = $a ? 1 : 2;\r\n\r\nvar_dump($a,$b,$c,$d);\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/ternary_short.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction foo($x)\r\n{\r\n\techo \"'$x' \";\r\n\treturn $x;\r\n}\r\n\r\nvar_dump( foo(0) ?: foo(2) );\r\nvar_dump( foo(1) ?: foo(2) );\r\nvar_dump( true ?: false );\r\nvar_dump( false ?: true );\r\nvar_dump( false ?: false );\r\nvar_dump( true ?: true );\r\nvar_dump( 1 ?: 2 );\r\nvar_dump( 0 ?: 1 );\r\nvar_dump( foo(0) ?: foo(0) ?: foo(0) ?: foo(3) );\r\nvar_dump( foo(0) ?: 0 ?: foo(0) ?: foo(3) );\r\nvar_dump( foo(0) ?: foo(0) ?: foo(0) ?: 3 );\r\nvar_dump( 0 ?: 0 ?: 0 ?: foo(3) );\r\nvar_dump( 0 ?: 1 ?: foo(0) ?: foo(3) );\r\n\r\necho \"\\nDONE\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/this call.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nclass X\r\n{\r\n    public function __call($name, $args)\r\n    {\r\n        var_dump($name, $args);        \r\n\r\n        return 123;\r\n    }\r\n\r\n    protected function bar2($arg)\r\n    {\r\n        echo (\"bar2\".$arg);\r\n    }\r\n\r\n    public function bar()\r\n    {\r\n        return\r\n            $this->bar2(\"hello\",1,2,3,4,5,6,7,8,9) .\r\n            $this->bar2(\"hello\") .\r\n            $this->bar3(\"hello\",1,2,3,4,5,6,7,8,9);\r\n    }\r\n}\r\n\r\n$x = new X();\r\n$x->bar();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Compiler/typehint_check.php",
    "content": "[expect exact] \r\nahoj\r\nhello\r\n[file]\r\n<?\r\n\r\nclass Class1\r\n{\r\n\tpublic function print_hello()\r\n\t{\r\n\t\techo \"ahoj\\n\";\r\n\t}\r\n}\r\n\r\n\r\ninterface I\r\n{\r\n\tfunction foo(Class1 $x);\r\n}\r\n\r\n\r\nclass A implements I\r\n{\r\n\tpublic function foo(Class1 $z)\r\n\t{\r\n\t\t$z->print_hello();\r\n\t}\r\n}\r\n\r\n$x = new Class1;\r\n$a = new A;\r\n\r\n$a->foo($x);\r\n\r\nclass C implements J {}\r\ninterface J {}\r\n\r\nfunction f(array $a,array &$b, C $c, C &$d, J $j)\r\n{\r\n  echo \"hello\\n\";\r\n}\r\n\r\n$a = array();\r\nf(array(1,2,3),$a,new C,new C, new C);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/__call.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Output\r\n{\r\n    function __call($name, $params)\r\n    {\r\n        return true;\r\n    }\r\n}\r\n\r\nif (true)\r\n{\r\n    function bar($x)\r\n    {\r\n        return true;\r\n    }\r\n}\r\n\r\n$x = new Output;\r\nbar( $x->foo() );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/classContext.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass trida\r\n{\r\n    function add($x, $y)\r\n    {\r\n        return 4 + $x + $y;\r\n    }\r\n}\r\n\r\nfunction test($x,$arg1,$arg2)\r\n{\r\n\techo $x->add($arg1,$arg2).\"\\n\";//call site\r\n}\r\n\r\n// prepare test arguments\r\n\r\n$arr = array(13,4,5);\r\n$number = 7;\r\n$refnumber = &$number;\r\n\r\nclass x{var $bar = 10;}\r\n\r\n$x = new x();\r\n$trida = new trida();\r\n\r\n//global test\r\ntest($trida,10, 12);\r\ntest($trida,11.2, 12);\r\ntest($trida,\"text\", 12);\r\ntest($trida,$arr[1], 12);\r\ntest($trida,$x->bar, 12);\r\ntest($trida,$refnumber, 12);\r\n\r\necho \"---------\\n\";\r\n\r\n// function test\r\nfunction notglobal()\r\n{\r\n\tglobal $trida;\r\n\tglobal $x;\r\n\tglobal $arr;\r\n\tglobal $refnumber;\r\n\t\r\n\ttest($trida,10, 12);\r\n\ttest($trida,11.2, 12);\r\n\ttest($trida,\"text\", 12);\r\n\ttest($trida,$arr[1], 12);\r\n\ttest($trida,$x->bar, 12);\r\n\ttest($trida,$refnumber, 12);\r\n}\r\n\r\nnotglobal();\r\n\r\necho \"---------\\n\";\r\n\r\n//method test\r\nclass method_test\r\n{\r\n\tfunction m()\r\n\t{\r\n\t\tglobal $trida;\r\n\t\tglobal $x;\r\n\t\tglobal $arr;\r\n\t\tglobal $refnumber;\r\n\t\r\n\t\ttest($trida,10, 12);\r\n\t\ttest($trida,11.2, 12);\r\n\t\ttest($trida,\"text\", 12);\r\n\t\ttest($trida,$arr[1], 12);\r\n\t\ttest($trida,$x->bar, 12);\r\n\t\ttest($trida,$refnumber, 12);\r\n\t}\r\n}\r\n$m = new method_test();\r\n$m->m();\r\n\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/classContext1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo\r\n{\r\n\tfunction bar($a,$b)\r\n\t{\r\n\t\treturn  $a + $b;\r\n\t}\r\n}\r\n\r\n\r\n$a = 1;\r\n$b = 2;\r\n\r\n//global test\r\ninclude \"classcontext_include.inc\";\r\n\r\necho \"---------\\n\";\r\n\r\n// function test\r\nfunction notglobal()\r\n{\r\n\t$a = 3;\r\n\t$b = 4;\r\n\t\r\n\tinclude \"classcontext_include.inc\";\r\n}\r\n\r\nnotglobal();\r\n\r\necho \"---------\\n\";\r\n\r\n//method test\r\nclass method_test\r\n{\r\n\tfunction m()\r\n\t{\t\r\n\t\r\n\t\t$a = 6;\r\n\t\t$b = 7;\r\n\t\r\n\t\tinclude \"classcontext_include.inc\";\r\n\t}\r\n}\r\n\r\n$m = new method_test();\r\n$m->m();\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/classContext2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo\r\n{\r\n\tfunction bar($a,$b)\r\n\t{\r\n\t\treturn  $a + $b;\r\n\t}\r\n}\r\n\r\n$eval_code = '$x = new foo;echo $x->bar($a,$b);';\r\n\r\n$a = 1;\r\n$b = 2;\r\n\r\n//global test\r\neval($eval_code);\r\n\r\necho \"---------\\n\";\r\n\r\n// function test\r\nfunction notglobal()\r\n{\r\n\t$a = 3;\r\n\t$b = 4;\r\n\t\r\n\teval($eval_code);\r\n}\r\n\r\nnotglobal();\r\n\r\necho \"---------\\n\";\r\n\r\n//method test\r\nclass method_test\r\n{\r\n\tfunction m()\r\n\t{\t\r\n\t\r\n\t\t$a = 6;\r\n\t\t$b = 7;\r\n\t\r\n\t\teval($eval_code);\r\n\t}\r\n}\r\n\r\n$m = new method_test();\r\n$m->m();\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/classcontext_include.inc",
    "content": "<?php\r\n$x = new foo;\r\necho $x->bar($a,$b);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/hashtable.php",
    "content": "[clr]\r\n[Expect exact]\r\nhello worldSystem\\Object Object\r\n(\r\n)\r\n\r\n[file]\r\n<?php\r\nfunction test() {\r\n    \r\n    $x = new System\\Collections\\Hashtable();\r\n\t$y = new System\\object();\r\n\t\r\n    $x->Add(\"obj\", $y);\r\n    $x->Add(\"message\", \"hello world\");\r\n\t\r\n\tforeach ($x as $item)\r\n\t{\r\n\t\tprint_r($item);\r\n\t}\r\n}\r\n\r\ntest();\r\n\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/restrictions generics.php",
    "content": "[clr]\r\n[expect]\r\nA\r\nB\r\nC\r\nA\r\nB\r\nC\r\n[file]\r\n<?php\r\n\r\nclass A{}\r\nclass B{}\r\nclass C{}\r\n\r\nclass X\r\n{\r\n    function foo<:T:>()\r\n    {\r\n        echo get_class(new T) . \"\\n\";\r\n    }\r\n\t\r\n\tfunction bar<:T:>()\r\n\t{\r\n\t\t$this->foo<:T:>();\r\n\t}\r\n}\r\n\r\n$x = new X;\r\n\r\n$x->bar<:A:>();\r\n$x->bar<:B:>();\r\n$x->bar<:C:>();\r\n$x->bar<:A:>();\r\n$x->bar<:B:>();\r\n$x->bar<:C:>();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/restrictions.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass trida\r\n{\r\n    function add($x, $y)\r\n    {\r\n        return 4 + $x + $y;\r\n    }\r\n}\r\n\r\nfunction test($x,$arg1,$arg2)\r\n{\r\n\techo $x->add($arg1,$arg2).\"\\n\";//call site\r\n}\r\n\r\n// prepare test arguments\r\n\r\n$arr = array(13,4,5);\r\n$number = 7;\r\n$refnumber = &$number;\r\n\r\nclass x{var $bar = 10;}\r\n\r\n$x = new x();\r\n$trida = new trida();\r\n\r\n//global test\r\ntest($trida,10, 12);\r\ntest($trida,11.2, 12);\r\ntest($trida,\"text\", 12);\r\ntest($trida,$arr[1], 12);\r\ntest($trida,$x->bar, 12);\r\ntest($trida,$refnumber, 12);\r\n\r\necho \"---------\\n\";\r\n\r\n// function test\r\nfunction notglobal()\r\n{\r\n\tglobal $trida;\r\n\tglobal $x;\r\n\tglobal $arr;\r\n\tglobal $refnumber;\r\n\t\r\n\ttest($trida,10, 12);\r\n\ttest($trida,11.2, 12);\r\n\ttest($trida,\"text\", 12);\r\n\ttest($trida,$arr[1], 12);\r\n\ttest($trida,$x->bar, 12);\r\n\ttest($trida,$refnumber, 12);\r\n}\r\n\r\nnotglobal();\r\n\r\necho \"---------\\n\";\r\n\r\n//method test\r\nclass method_test\r\n{\r\n\tfunction m()\r\n\t{\r\n\t\tglobal $trida;\r\n\t\tglobal $x;\r\n\t\tglobal $arr;\r\n\t\tglobal $refnumber;\r\n\t\r\n\t\ttest($trida,10, 12);\r\n\t\ttest($trida,11.2, 12);\r\n\t\ttest($trida,\"text\", 12);\r\n\t\ttest($trida,$arr[1], 12);\r\n\t\ttest($trida,$x->bar, 12);\r\n\t\ttest($trida,$refnumber, 12);\r\n\t}\r\n}\r\n$m = new method_test();\r\n$m->m();\r\n\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DLR/targets.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass foo\r\n{\r\n\tfunction bar($a,$b)\r\n\t{\r\n\t\treturn  $a + $b;\r\n\t}\r\n}\r\n\r\n\r\nclass Utils\r\n{\r\n\tfunction test($x,$a,$b)\r\n\t{\r\n\t\treturn $x->bar($a,$b);\r\n\t}\r\n}\r\n\r\n$utils = new utils;\r\n\r\n\r\n$x = new foo();\r\n$arr = array(12,$x);\r\n$ref = &$x;\r\n\r\n$a = 7;\r\n$b = 8;\r\n\r\n//PhpRuntimeChain target\r\necho $utils->test($arr[1],$a,$b);\r\n\r\n//PhpReference target\r\necho $utils->test($ref,$a,$b);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/strftime.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n$year = 2000;\r\n$first_day = mktime(0,0,0,1,1,$year);\r\n$a = getdate($first_day);\r\n\r\n$i = 0;\r\nfor($day = -$a[\"wday\"]; $day<366*5; $day++, $i++)\r\n{\r\n  $d = mktime(0,0,0,1,$day,$year);\r\n\r\n  if ($i % 7 == 0)\r\n  {\r\n    echo \"\\n\",strftime(\"%U/%W \",$d);\r\n  }\r\n  echo strftime(\"%d \",$d);\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/strtotime1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"Europe/Prague\");\r\necho \" 1: \",strtotime(\"30 September 2000\"), \"\\n\";\r\necho \" 2: \",strtotime(\"30 September 2000 +1 day\"), \"\\n\";\r\necho \" 3: \",strtotime(\"30 September 2000 +1 week\"), \"\\n\";\r\necho \" 4: \",strtotime(\"30 September 2000 +1 week 2 days 4 hours 2 seconds\"), \"\\n\";\r\necho \" 5: \",strtotime(\"next Thursday\"), \"\\n\";\r\necho \" 6: \",strtotime(\"last Monday\"), \"\\n\";\r\necho \" 7: \",strtotime(\"2004-12-31\"), \"\\n\";\r\necho \" 8: \",strtotime(\"2005-04-15\"), \"\\n\";\r\necho \" 9: \",strtotime(\"last Wednesday\"), \"\\n\";\r\necho \"10: \",strtotime(\"04/05/2005\"), \"\\n\";\r\necho \"11: \",strtotime(\"1 September 2000 -1 week\"), \"\\n\";\r\necho \"12: \",strtotime(\"Thu, 31 Jul 2003 13:02:39 -0700\"), \"\\n\";\r\necho \"13: \",strtotime(\"today 00:00:00\"), \"\\n\";\r\necho \"14: \",strtotime(\"last Friday\"), \"\\n\";\r\necho \"15: \",strtotime(\"2004-12-01\"), \"\\n\";\r\necho \"16: \",strtotime(\"1 September 2000 - 1week\"), \"\\n\";\r\necho \"17: \",strtotime(\"1 September 2000 +10 seconds\"), \"\\n\";\r\necho \"18: \",strtotime(\"2004-04-04 02:00:00 GMT\"), \"\\n\";\r\necho \"19: \",strtotime(\"2004-04-04 01:59:59 UTC\"), \"\\n\";\r\necho \"20: \",strtotime(\"2004-06-13 09:20:00.0\"), \"\\n\";\r\necho \"21: \",strtotime(\"2004-04-04 02:00:00\"), \"\\n\";\r\necho \"22: \",strtotime(\"last sunday 12:00:00\"), \"\\n\";\r\necho \"23: \",strtotime(\"last sunday\"), \"\\n\";\r\necho \"24: \",strtotime(\"01-jan-70 01:00\"), \"\\n\";\r\necho \"25: \",strtotime(\"01-jan-70 02:00\"), \"\\n\";\r\necho \"26: \",strtotime(\"next Monday\", mktime(0,0,0,3,0, 2004));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/strtotime2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\necho @strtotime(\"1999-11-40\"), \"\\n\";\r\necho strtotime(\"\"), \"\\n\";\r\necho strtotime(\"01-JAN-70\"), \"\\n\";\r\n\r\n$str = 'Not Good';\r\nif (($timestamp = @strtotime($str)) === -1) {\r\n   echo \"The string ($str) is bogus\";\r\n} else {\r\n   echo \"$str == \" . date('l dS of F Y h:i:s A', $timestamp);\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/strtotime3.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n$futureString = \"+1 month\";\r\n$checkMonth = \"06\";\r\n$checkDay = 1;\r\n$year = \"2005\";\r\n$m = mktime(0, 0, 0, $checkMonth, $checkDay, $year);\r\n$futureTimeStamp = strtotime($futureString, $m);\r\n$futureDateArray = getdate($futureTimeStamp);\r\necho \"$futureString\\n$checkMonth\\n$checkDay\\n$year\\n$m\\n$futureTimeStamp\\n\";\r\necho \"{$futureDateArray[\"seconds\"]}\\n\";\r\necho \"{$futureDateArray[\"minutes\"]}\\n\";\r\necho \"{$futureDateArray[\"hours\"]}\\n\";\r\necho \"{$futureDateArray[\"mday\"]}\\n\";\r\necho \"{$futureDateArray[\"wday\"]}\\n\";\r\necho \"{$futureDateArray[\"mon\"]}\\n\";\r\necho \"{$futureDateArray[\"year\"]}\\n\";\r\necho \"{$futureDateArray[\"yday\"]}\\n\";\r\necho \"{$futureDateArray[\"weekday\"]}\\n\";\r\necho \"{$futureDateArray[\"month\"]}\\n\";\r\necho \"{$futureDateArray[0]}\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/DateTime/strtotime4.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n/*\r\n\r\n  Tests meridian spec.\r\n\r\n*/\r\nputenv(\"TZ=Europe/Prague\");\r\nforeach (array(null,\"am\",\"pm\") as $m)\r\n{\r\n  for($h=0;$h<=24;$h++)\r\n  {\r\n    @$ts = strtotime(\"$h:00:00$m 1/1/2005\");\r\n    echo \"$h$m: \",($ts!==false) ? date(\"H:i:s m/d/Y\",$ts) : \"error\",\"\\n\";\r\n  }  \r\n} \r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/strtotime5.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndate_default_timezone_set(\"UTC\");\r\necho strtotime(\"2000-10-10T10:12:30.000\"),\"\\n\";\r\n\r\necho strtotime('5 january 2006+3day+1day'),\"\\n\";\r\necho strtotime('5 january 2006+3day +1day'),\"\\n\";\r\necho strtotime('5 january 2006 +3 day +1 day'),\"\\n\";\r\necho strtotime('5 january 2006+3 day+1 month'),\"\\n\";\r\n\r\necho date('D', strtotime('monday')),\"\\n\";\r\necho date('D', strtotime('mon')),\"\\n\";\r\necho date('D', strtotime('tue')),\"\\n\";\r\necho date('D', strtotime('wed')),\"\\n\";\r\necho date('D', strtotime('thu')),\"\\n\";\r\necho date('D', strtotime('fri')),\"\\n\";\r\necho date('D', strtotime('sat')),\"\\n\";\r\necho date('D', strtotime('sun')),\"\\n\";\r\n\r\necho strtotime(\"11/20/2005 8:00 AM\\r\\n\"),\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/sunrise,sunset.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\nfor($a=1;$a<=12;$a++)\r\n{\r\n\tprintf(\"%d %s %8.5f\\n\",\r\n\t  date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2),\r\n\t  date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2),\r\n\t  date_sunrise(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2));\r\n\t\r\n\tprintf(\"%d %s %.5f\\n\",\r\n\t  date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_TIMESTAMP,31.76670,35.23330,90.83,2),\r\n\t  date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_STRING,31.76670,35.23330,90.83,2),\r\n\t  date_sunset(mktime(1,1,1,$a,1,2003),SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,2));\r\n}\r\n\r\nforeach (array(\"Europe/Prague\",\"Africa/Kampala\",\"US/Central\",\"Israel\",\"Europe/Rome\",\"UTC\") as $zone)\r\n{                    \r\n  date_default_timezone_set($zone);\r\n\r\n  $time = mktime(1,1,1,1,1,2003);\r\n  \r\n  echo \"idate(Z)=\",idate('Z', $time),\"\\n\";\r\n  $t = gettimeofday();\r\n  echo \"gettimeofday()['minuteswest']=\",$t[\"minuteswest\"],\"\\n\";\r\n  \r\n  printf(\"%.5f %.5f %.5f %.5f %.5f\\n\",\r\n\t  date_sunset($time,SUNFUNCS_RET_DOUBLE),\r\n\t  date_sunset($time,SUNFUNCS_RET_DOUBLE,31.76670),\r\n\t  date_sunset($time,SUNFUNCS_RET_DOUBLE,31.76670,35.23330),\r\n    date_sunset($time,SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83),\r\n    date_sunset($time,SUNFUNCS_RET_DOUBLE,31.76670,35.23330,90.83,0));\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/time.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nerror_reporting(E_ALL); // no E_STRICT\r\n\r\n$ltime = @localtime(1138476622, true);\r\necho mktime(0,0,0,0,0,$ltime['tm_year']),\"\\n\";\r\n\r\ndate_default_timezone_set(\"UTC\");\r\n$utc_time1 = strtotime('1964-01-01 00:00:00 UTC');\r\n$utc_time2 = strtotime('1963-12-31 00:00:00 UTC');\r\necho $utc_time1, ':', $utc_time2, \" - \", $utc_time1 - $utc_time2, \"\\n\";\r\necho date(DATE_ISO8601, $utc_time1), \"\\n\";\r\necho date(DATE_ISO8601, $utc_time2), \"\\n\";\r\n\r\necho date('Y-m-d', strtotime('1964-06-06')),\"\\n\";\r\necho date('Y-m-d', strtotime('1963-06-06')),\"\\n\";\r\necho date('Y-m-d', strtotime('1964-01-06')),\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/timezones.php.kb",
    "content": "[expect php]\r\n[file]\r\n<?\r\nerror_reporting(E_ALL);\r\n\r\n// SORTED BY C#:\r\n\r\n$all_zone_names = array(\r\n\"Africa/Abidjan\",\r\n\"Africa/Accra\",\r\n\"Africa/Addis_Ababa\",\r\n\"Africa/Algiers\",\r\n\"Africa/Asmera\",\r\n\"Africa/Bamako\",\r\n\"Africa/Bangui\",\r\n\"Africa/Banjul\",\r\n\"Africa/Bissau\",\r\n\"Africa/Blantyre\",\r\n\"Africa/Brazzaville\",\r\n\"Africa/Bujumbura\",\r\n\"Africa/Cairo\",\r\n\"Africa/Casablanca\",\r\n\"Africa/Ceuta\",\r\n\"Africa/Conakry\",\r\n\"Africa/Dakar\",\r\n\"Africa/Dar_es_Salaam\",\r\n\"Africa/Djibouti\",\r\n\"Africa/Douala\",\r\n\"Africa/El_Aaiun\",\r\n\"Africa/Freetown\",\r\n\"Africa/Gaborone\",\r\n\"Africa/Harare\",\r\n\"Africa/Johannesburg\",\r\n\"Africa/Kampala\",\r\n\"Africa/Khartoum\",\r\n\"Africa/Kigali\",\r\n\"Africa/Kinshasa\",\r\n\"Africa/Lagos\",\r\n\"Africa/Libreville\",\r\n\"Africa/Lome\",\r\n\"Africa/Luanda\",\r\n\"Africa/Lubumbashi\",\r\n\"Africa/Lusaka\",\r\n\"Africa/Malabo\",\r\n\"Africa/Maputo\",\r\n\"Africa/Maseru\",\r\n\"Africa/Mbabane\",\r\n\"Africa/Mogadishu\",\r\n\"Africa/Monrovia\",\r\n\"Africa/Nairobi\",\r\n\"Africa/Ndjamena\",\r\n\"Africa/Niamey\",\r\n\"Africa/Nouakchott\",\r\n\"Africa/Ouagadougou\",\r\n\"Africa/Porto-Novo\",\r\n\"Africa/Sao_Tome\",\r\n\"Africa/Timbuktu\",\r\n\"Africa/Tripoli\",\r\n\"Africa/Tunis\",\r\n\"Africa/Windhoek\",\r\n\"America/Adak\",\r\n\"America/Anchorage\",\r\n\"America/Anguilla\",\r\n\"America/Antigua\",\r\n\"America/Araguaina\",\r\n\"America/Argentina/Buenos_Aires\",\r\n\"America/Argentina/Catamarca\",\r\n\"America/Argentina/ComodRivadavia\",\r\n\"America/Argentina/Cordoba\",\r\n\"America/Argentina/Jujuy\",\r\n\"America/Argentina/La_Rioja\",\r\n\"America/Argentina/Mendoza\",\r\n\"America/Argentina/Rio_Gallegos\",\r\n\"America/Argentina/San_Juan\",\r\n\"America/Argentina/Tucuman\",\r\n\"America/Argentina/Ushuaia\",\r\n\"America/Aruba\",\r\n\"America/Asuncion\",\r\n\"America/Atka\",\r\n\"America/Bahia\",\r\n\"America/Barbados\",\r\n\"America/Belem\",\r\n\"America/Belize\",\r\n\"America/Boa_Vista\",\r\n\"America/Bogota\",\r\n\"America/Boise\",\r\n\"America/Buenos_Aires\",\r\n\"America/Cambridge_Bay\",\r\n\"America/Campo_Grande\",\r\n\"America/Cancun\",\r\n\"America/Caracas\",\r\n\"America/Catamarca\",\r\n\"America/Cayenne\",\r\n\"America/Cayman\",\r\n\"America/Chicago\",\r\n\"America/Chihuahua\",\r\n\"America/Coral_Harbour\",\r\n\"America/Cordoba\",\r\n\"America/Costa_Rica\",\r\n\"America/Cuiaba\",\r\n\"America/Curacao\",\r\n\"America/Danmarkshavn\",\r\n\"America/Dawson\",\r\n\"America/Dawson_Creek\",\r\n\"America/Denver\",\r\n\"America/Detroit\",\r\n\"America/Dominica\",\r\n\"America/Edmonton\",\r\n\"America/Eirunepe\",\r\n\"America/El_Salvador\",\r\n\"America/Ensenada\",\r\n\"America/Fort_Wayne\",\r\n\"America/Fortaleza\",\r\n\"America/Glace_Bay\",\r\n\"America/Godthab\",\r\n\"America/Goose_Bay\",\r\n\"America/Grand_Turk\",\r\n\"America/Grenada\",\r\n\"America/Guadeloupe\",\r\n\"America/Guatemala\",\r\n\"America/Guayaquil\",\r\n\"America/Guyana\",\r\n\"America/Halifax\",\r\n\"America/Havana\",\r\n\"America/Hermosillo\",\r\n\"America/Indiana/Indianapolis\",\r\n\"America/Indiana/Knox\",\r\n\"America/Indiana/Marengo\",\r\n\"America/Indiana/Vevay\",\r\n\"America/Indianapolis\",\r\n\"America/Inuvik\",\r\n\"America/Iqaluit\",\r\n\"America/Jamaica\",\r\n\"America/Jujuy\",\r\n\"America/Juneau\",\r\n\"America/Kentucky/Louisville\",\r\n\"America/Kentucky/Monticello\",\r\n\"America/Knox_IN\",\r\n\"America/La_Paz\",\r\n\"America/Lima\",\r\n\"America/Los_Angeles\",\r\n\"America/Louisville\",\r\n\"America/Maceio\",\r\n\"America/Managua\",\r\n\"America/Manaus\",\r\n\"America/Martinique\",\r\n\"America/Mazatlan\",\r\n\"America/Mendoza\",\r\n\"America/Menominee\",\r\n\"America/Merida\",\r\n\"America/Mexico_City\",\r\n\"America/Miquelon\",\r\n\"America/Monterrey\",\r\n\"America/Montevideo\",\r\n\"America/Montreal\",\r\n\"America/Montserrat\",\r\n\"America/Nassau\",\r\n\"America/New_York\",\r\n\"America/Nipigon\",\r\n\"America/Nome\",\r\n\"America/Noronha\",\r\n\"America/North_Dakota/Center\",\r\n\"America/Panama\",\r\n\"America/Pangnirtung\",\r\n\"America/Paramaribo\",\r\n\"America/Phoenix\",\r\n\"America/Port_of_Spain\",\r\n\"America/Port-au-Prince\",\r\n\"America/Porto_Acre\",\r\n\"America/Porto_Velho\",\r\n\"America/Puerto_Rico\",\r\n\"America/Rainy_River\",\r\n\"America/Rankin_Inlet\",\r\n\"America/Recife\",\r\n\"America/Regina\",\r\n\"America/Rio_Branco\",\r\n\"America/Rosario\",\r\n\"America/Santiago\",\r\n\"America/Santo_Domingo\",\r\n\"America/Sao_Paulo\",\r\n\"America/Scoresbysund\",\r\n\"America/Shiprock\",\r\n\"America/St_Johns\",\r\n\"America/St_Kitts\",\r\n\"America/St_Lucia\",\r\n\"America/St_Thomas\",\r\n\"America/St_Vincent\",\r\n\"America/Swift_Current\",\r\n\"America/Tegucigalpa\",\r\n\"America/Thule\",\r\n\"America/Thunder_Bay\",\r\n\"America/Tijuana\",\r\n\"America/Toronto\",\r\n\"America/Tortola\",\r\n\"America/Vancouver\",\r\n\"America/Virgin\",\r\n\"America/Whitehorse\",\r\n\"America/Winnipeg\",\r\n\"America/Yakutat\",\r\n\"America/Yellowknife\",\r\n\"Antarctica/Casey\",\r\n\"Antarctica/Davis\",\r\n\"Antarctica/DumontDUrville\",\r\n\"Antarctica/Mawson\",\r\n\"Antarctica/McMurdo\",\r\n\"Antarctica/Palmer\",\r\n\"Antarctica/Rothera\",\r\n\"Antarctica/South_Pole\",\r\n\"Antarctica/Syowa\",\r\n\"Antarctica/Vostok\",\r\n\"Arctic/Longyearbyen\",\r\n\"Asia/Aden\",\r\n\"Asia/Almaty\",\r\n\"Asia/Amman\",\r\n\"Asia/Anadyr\",\r\n\"Asia/Aqtau\",\r\n\"Asia/Aqtobe\",\r\n\"Asia/Ashgabat\",\r\n\"Asia/Ashkhabad\",\r\n\"Asia/Baghdad\",\r\n\"Asia/Bahrain\",\r\n\"Asia/Baku\",\r\n\"Asia/Bangkok\",\r\n\"Asia/Beirut\",\r\n\"Asia/Bishkek\",\r\n\"Asia/Brunei\",\r\n\"Asia/Calcutta\",\r\n\"Asia/Choibalsan\",\r\n\"Asia/Chongqing\",\r\n\"Asia/Chungking\",\r\n\"Asia/Colombo\",\r\n\"Asia/Dacca\",\r\n\"Asia/Damascus\",\r\n\"Asia/Dhaka\",\r\n\"Asia/Dili\",\r\n\"Asia/Dubai\",\r\n\"Asia/Dushanbe\",\r\n\"Asia/Gaza\",\r\n\"Asia/Harbin\",\r\n\"Asia/Hong_Kong\",\r\n\"Asia/Hovd\",\r\n\"Asia/Irkutsk\",\r\n\"Asia/Istanbul\",\r\n\"Asia/Jakarta\",\r\n\"Asia/Jayapura\",\r\n\"Asia/Jerusalem\",\r\n\"Asia/Kabul\",\r\n\"Asia/Kamchatka\",\r\n\"Asia/Karachi\",\r\n\"Asia/Kashgar\",\r\n\"Asia/Katmandu\",\r\n\"Asia/Krasnoyarsk\",\r\n\"Asia/Kuala_Lumpur\",\r\n\"Asia/Kuching\",\r\n\"Asia/Kuwait\",\r\n\"Asia/Macao\",\r\n\"Asia/Macau\",\r\n\"Asia/Magadan\",\r\n\"Asia/Makassar\",\r\n\"Asia/Manila\",\r\n\"Asia/Muscat\",\r\n\"Asia/Nicosia\",\r\n\"Asia/Novosibirsk\",\r\n\"Asia/Omsk\",\r\n\"Asia/Oral\",\r\n\"Asia/Phnom_Penh\",\r\n\"Asia/Pontianak\",\r\n\"Asia/Pyongyang\",\r\n\"Asia/Qatar\",\r\n\"Asia/Qyzylorda\",\r\n\"Asia/Rangoon\",\r\n\"Asia/Riyadh\",\r\n\"Asia/Saigon\",\r\n\"Asia/Sakhalin\",\r\n\"Asia/Samarkand\",\r\n\"Asia/Seoul\",\r\n\"Asia/Shanghai\",\r\n\"Asia/Singapore\",\r\n\"Asia/Taipei\",\r\n\"Asia/Tashkent\",\r\n\"Asia/Tbilisi\",\r\n\"Asia/Tehran\",\r\n\"Asia/Tel_Aviv\",\r\n\"Asia/Thimbu\",\r\n\"Asia/Thimphu\",\r\n\"Asia/Tokyo\",\r\n\"Asia/Ujung_Pandang\",\r\n\"Asia/Ulaanbaatar\",\r\n\"Asia/Ulan_Bator\",\r\n\"Asia/Urumqi\",\r\n\"Asia/Vientiane\",\r\n\"Asia/Vladivostok\",\r\n\"Asia/Yakutsk\",\r\n\"Asia/Yekaterinburg\",\r\n\"Asia/Yerevan\",\r\n\"Atlantic/Azores\",\r\n\"Atlantic/Azores\",\r\n\"Atlantic/Bermuda\",\r\n\"Atlantic/Bermuda\",\r\n\"Atlantic/Canary\",\r\n\"Atlantic/Canary\",\r\n\"Atlantic/Cape_Verde\",\r\n\"Atlantic/Cape_Verde\",\r\n\"Atlantic/Faeroe\",\r\n\"Atlantic/Faeroe\",\r\n\"Atlantic/Jan_Mayen\",\r\n\"Atlantic/Jan_Mayen\",\r\n\"Atlantic/Madeira\",\r\n\"Atlantic/Madeira\",\r\n\"Atlantic/Reykjavik\",\r\n\"Atlantic/Reykjavik\",\r\n\"Atlantic/South_Georgia\",\r\n\"Atlantic/South_Georgia\",\r\n\"Atlantic/St_Helena\",\r\n\"Atlantic/St_Helena\",\r\n\"Atlantic/Stanley\",\r\n\"Atlantic/Stanley\",\r\n\"Brazil/Acre\",\r\n\"Brazil/DeNoronha\",\r\n\"Brazil/East\",\r\n\"Brazil/West\",\r\n\"Canada/Atlantic\",\r\n\"Canada/Central\",\r\n\"Canada/Eastern\",\r\n\"Canada/East-Saskatchewan\",\r\n\"Canada/Mountain\",\r\n\"Canada/Newfoundland\",\r\n\"Canada/Pacific\",\r\n\"Canada/Saskatchewan\",\r\n\"Canada/Yukon\",\r\n\"CET\",\r\n\"Chile/Continental\",\r\n\"Chile/EasterIsland\",\r\n\"CST6CDT\",\r\n\"Cuba\",\r\n\"EET\",\r\n\"Egypt\",\r\n\"Eire\",\r\n\"EST\",\r\n\"EST5EDT\",\r\n\"Etc/GMT\",\r\n\"Etc/GMT+0\",\r\n\"Etc/GMT+1\",\r\n\"Etc/GMT+10\",\r\n\"Etc/GMT+11\",\r\n\"Etc/GMT+12\",\r\n\"Etc/GMT+2\",\r\n\"Etc/GMT+3\",\r\n\"Etc/GMT+4\",\r\n\"Etc/GMT+5\",\r\n\"Etc/GMT+6\",\r\n\"Etc/GMT+7\",\r\n\"Etc/GMT+8\",\r\n\"Etc/GMT+9\",\r\n\"Etc/GMT0\",\r\n\"Etc/GMT-0\",\r\n\"Etc/GMT-1\",\r\n\"Etc/GMT-10\",\r\n\"Etc/GMT-11\",\r\n\"Etc/GMT-12\",\r\n\"Etc/GMT-13\",\r\n\"Etc/GMT-14\",\r\n\"Etc/GMT-2\",\r\n\"Etc/GMT-3\",\r\n\"Etc/GMT-4\",\r\n\"Etc/GMT-5\",\r\n\"Etc/GMT-6\",\r\n\"Etc/GMT-7\",\r\n\"Etc/GMT-8\",\r\n\"Etc/GMT-9\",\r\n\"Etc/Greenwich\",\r\n\"Etc/UCT\",\r\n\"Etc/Universal\",\r\n\"Etc/UTC\",\r\n\"Etc/Zulu\",\r\n\"Europe/Amsterdam\",\r\n\"Europe/Andorra\",\r\n\"Europe/Athens\",\r\n\"Europe/Belfast\",\r\n\"Europe/Belgrade\",\r\n\"Europe/Berlin\",\r\n\"Europe/Bratislava\",\r\n\"Europe/Brussels\",\r\n\"Europe/Bucharest\",\r\n\"Europe/Budapest\",\r\n\"Europe/Chisinau\",\r\n\"Europe/Copenhagen\",\r\n\"Europe/Dublin\",\r\n\"Europe/Gibraltar\",\r\n\"Europe/Helsinki\",\r\n\"Europe/Istanbul\",\r\n\"Europe/Kaliningrad\",\r\n\"Europe/Kiev\",\r\n\"Europe/Lisbon\",\r\n\"Europe/Ljubljana\",\r\n\"Europe/London\",\r\n\"Europe/Luxembourg\",\r\n\"Europe/Madrid\",\r\n\"Europe/Malta\",\r\n\"Europe/Mariehamn\",\r\n\"Europe/Minsk\",\r\n\"Europe/Monaco\",\r\n\"Europe/Moscow\",\r\n\"Europe/Nicosia\",\r\n\"Europe/Oslo\",\r\n\"Europe/Paris\",\r\n\"Europe/Prague\",\r\n\"Europe/Riga\",\r\n\"Europe/Rome\",\r\n\"Europe/Samara\",\r\n\"Europe/San_Marino\",\r\n\"Europe/Sarajevo\",\r\n\"Europe/Simferopol\",\r\n\"Europe/Skopje\",\r\n\"Europe/Sofia\",\r\n\"Europe/Stockholm\",\r\n\"Europe/Tallinn\",\r\n\"Europe/Tirane\",\r\n\"Europe/Tiraspol\",\r\n\"Europe/Uzhgorod\",\r\n\"Europe/Vaduz\",\r\n\"Europe/Vatican\",\r\n\"Europe/Vienna\",\r\n\"Europe/Vilnius\",\r\n\"Europe/Warsaw\",\r\n\"Europe/Zagreb\",\r\n\"Europe/Zaporozhye\",\r\n\"Europe/Zurich\",\r\n\"Factory\",\r\n\"GB\",\r\n\"GB-Eire\",\r\n\"GMT\",\r\n\"GMT+0\",\r\n\"GMT0\",\r\n\"GMT-0\",\r\n\"Greenwich\",\r\n\"Hongkong\",\r\n\"HST\",\r\n\"Iceland\",\r\n\"Indian/Antananarivo\",\r\n\"Indian/Chagos\",\r\n\"Indian/Christmas\",\r\n\"Indian/Cocos\",\r\n\"Indian/Comoro\",\r\n\"Indian/Kerguelen\",\r\n\"Indian/Mahe\",\r\n\"Indian/Maldives\",\r\n\"Indian/Mauritius\",\r\n\"Indian/Mayotte\",\r\n\"Indian/Reunion\",\r\n\"Iran\",\r\n\"Israel\",\r\n\"Jamaica\",\r\n\"Japan\",\r\n\"Kwajalein\",\r\n\"Libya\",\r\n\"MET\",\r\n\"Mexico/BajaNorte\",\r\n\"Mexico/BajaSur\",\r\n\"Mexico/General\",\r\n\"MST\",\r\n\"MST7MDT\",\r\n\"Navajo\",\r\n\"NZ\",\r\n\"NZ-CHAT\",\r\n\"Pacific/Apia\",\r\n\"Pacific/Auckland\",\r\n\"Pacific/Chatham\",\r\n\"Pacific/Easter\",\r\n\"Pacific/Efate\",\r\n\"Pacific/Enderbury\",\r\n\"Pacific/Fakaofo\",\r\n\"Pacific/Fiji\",\r\n\"Pacific/Funafuti\",\r\n\"Pacific/Galapagos\",\r\n\"Pacific/Gambier\",\r\n\"Pacific/Guadalcanal\",\r\n\"Pacific/Guam\",\r\n\"Pacific/Honolulu\",\r\n\"Pacific/Johnston\",\r\n\"Pacific/Kiritimati\",\r\n\"Pacific/Kosrae\",\r\n\"Pacific/Kwajalein\",\r\n\"Pacific/Majuro\",\r\n\"Pacific/Marquesas\",\r\n\"Pacific/Midway\",\r\n\"Pacific/Nauru\",\r\n\"Pacific/Niue\",\r\n\"Pacific/Norfolk\",\r\n\"Pacific/Noumea\",\r\n\"Pacific/Pago_Pago\",\r\n\"Pacific/Palau\",\r\n\"Pacific/Pitcairn\",\r\n\"Pacific/Ponape\",\r\n\"Pacific/Port_Moresby\",\r\n\"Pacific/Rarotonga\",\r\n\"Pacific/Saipan\",\r\n\"Pacific/Samoa\",\r\n\"Pacific/Tahiti\",\r\n\"Pacific/Tarawa\",\r\n\"Pacific/Tongatapu\",\r\n\"Pacific/Truk\",\r\n\"Pacific/Wake\",\r\n\"Pacific/Wallis\",\r\n\"Pacific/Yap\",\r\n\"Poland\",\r\n\"Portugal\",\r\n\"PRC\",\r\n\"PST8PDT\",\r\n\"ROC\",\r\n\"ROK\",\r\n\"Singapore\",\r\n\"Turkey\",\r\n\"UCT\",\r\n\"Universal\",\r\n\"US/Alaska\",\r\n\"US/Aleutian\",\r\n\"US/Arizona\",\r\n\"US/Central\",\r\n\"US/Eastern\",\r\n\"US/East-Indiana\",\r\n\"US/Hawaii\",\r\n\"US/Indiana-Starke\",\r\n\"US/Michigan\",\r\n\"US/Mountain\",\r\n\"US/Pacific\",\r\n\"US/Pacific-New\",\r\n\"US/Samoa\",\r\n\"UTC\",\r\n\"WET\",\r\n\"W-SU\",\r\n\"Zulu\"\r\n);\r\n\r\n//\r\n// Calculates days when DST changes.\r\n//\r\nfunction get_daylight_changes()\r\n{\r\n  $last = $from_dst = $to_dst = -1;\r\n  for ($day=0;$day<=365;$day++)\r\n  {\r\n    $t = mktime(12,0,0,0,$day,2001);\r\n    \r\n    $dst = idate(\"I\",$t);\r\n    if ($last==0 && $dst==1) $from_dst = $t; else\r\n    if ($last==1 && $dst==0) $to_dst = $t;\r\n    $last = $dst;  \r\n  }\r\n  \r\n  if ($from_dst == $to_dst)\r\n  {\r\n    return \"-1, -1, -1, -1\"; \r\n  }\r\n  else\r\n  {\r\n    return sprintf(\"%2d, %2d, %2d, %2d\", \r\n      idate(\"m\",$from_dst), idate(\"d\",$from_dst),\r\n      idate(\"m\",$to_dst), idate(\"d\",$to_dst));\r\n  }    \r\n}\r\n\r\n$daylight_times = array();\r\n$zone_names = array();\r\n$minutes = array();\r\n$dst = array();\r\n$deltas = array();\r\n$minutes_to_name = array();\r\n\r\nforeach ($all_zone_names as $zone_name)\r\n{\r\n  date_default_timezone_set($zone_name);\r\n\r\n  $daylight_time = get_daylight_changes();\r\n  \r\n  if (isset($daylight_times[$daylight_time]))\r\n  {\r\n    $value = $daylight_times[$daylight_time];\r\n  }\r\n  else\r\n  {\r\n    $value = count($daylight_times) + 1;\r\n    $daylight_times[$daylight_time] = $value;\r\n  }\r\n  \r\n  $time_info = gettimeofday();\r\n\r\n  $m = -$time_info[\"minuteswest\"]/15;\r\n  \r\n  $zone_names[] = $zone_name;\r\n  $minutes[] = $m;\r\n  $dst[] = $value - 1;\r\n  //$deltas[] = $time_info[\"dsttime\"];\r\n  \r\n  if (!array_key_exists($m,$minutes_to_name))\r\n  {\r\n    $minutes_to_name[$m] = $zone_name;\r\n  }\r\n}\r\n\r\n// alphabetically sorted zone names:\r\necho \"#region Generated\\n\\n\";\r\necho \"zones = new string[]\\n\";\r\necho \"{\\n\";\r\nfor($i=0;$i<count($zone_names);$i++)\r\n{\r\n  echo '  \"',$zone_names[$i],'\",',\"\\n\";\r\n}\r\necho \"};\\n\\n\";\r\n\r\n// minutes and daylight info indices:\r\n\r\necho \"data = new sbyte[,]\\n\";\r\necho \"{\\n\";\r\nfor ($i=0;$i<count($zone_names);$i++)\r\n{\r\n  printf(\"  {%3d,%2d}, // %s\\n\",$minutes[$i],$dst[$i],$zone_names[$i]);\r\n}\r\necho \"};\\n\\n\";\r\n\r\n// daylight infos:\r\n\r\nasort($daylight_times); // sort by values which are indices\r\n\r\necho \"daylightChanges = new int[,] {\\n\";\r\n$i = 0;\r\nforeach ($daylight_times as $daylight_time => $value)\r\n{\r\n  echo \"  { $daylight_time }, // $i\\n\";\r\n  $i++;\r\n}\r\necho \"};\\n\\n\";\r\necho \"#endregion\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/DateTime/timezones1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndate_default_timezone_set(\"UTC\");\r\necho date(\"H:i:s m/d/Y\",$ts0 = strtotime(\"2000-10-10T10:12:30.000\")),\" = $ts0\\n\";\r\n$lt = localtime($ts0,true);\r\necho \"is_dst=\",$lt[\"tm_isdst\"],\"\\n\";\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\necho date(\"H:i:s m/d/Y\",$ts1 = strtotime(\"2000-10-10T10:12:30.000\")),\" = $ts1\\n\";\r\n$lt = localtime($ts1,true);\r\necho \"is_dst=\",$lt[\"tm_isdst\"],\"\\n\";\r\n\r\necho \"\\n\";\r\necho $ts0 - $ts1,\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/basename.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nfunction _basename($cmd)\r\n{\r\n  global $path;\r\n\r\n  echo \"<p><code>$cmd</code><br />\\n\";\r\n  eval (\"print_r(\" . $cmd . \");\");\r\n  echo \"<br />\\n\";\r\n}\r\n\r\n$path = \"/home/httpd/html/index.php\";\r\necho basename($path);         \t\t// \"index.php\"\r\necho basename($path, \".php\") . \"\\n\";   \t// \"index\"\r\n\r\n$path = \"http://s.cc/path/html/index.php3\";\r\necho basename($path) . \"\\n\";           \t// \"index.php3\"\r\necho basename($path, \".php\") . \"\\n\";   \t// \"index.php3\"\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/basename2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nvar_dump(basename('C:\\x\\y\\z.php','.php'));\r\nvar_dump(basename('C:\\x\\y\\z.php/','.php'));\r\nvar_dump(basename('C:\\x\\y/','.php'));\r\nvar_dump(basename('C:\\x\\y/'));\r\nvar_dump(basename('/////'));\r\nvar_dump(basename('m/////','m'));\r\nvar_dump(basename('m/////','mm'));\r\nvar_dump(basename('a/b/c/d/e/////'));\r\nvar_dump(basename('/xab////','xab'));\r\nvar_dump(basename('/xab////','ab'));\r\nvar_dump(basename('/**////','*'));\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/chdir.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction dump($bool)\r\n{\r\n echo ($bool) ? \"TRUE\" : \"FALSE\";\r\n}\r\n\r\nfunction _chdir($p)\r\n{\r\n  echo \"<p><code>chdir($p)</code><br />\\n\";\r\n  dump(chdir($p));\r\n  echo getcwd() . \"<br />\\n\";\r\n}\r\n\r\n$dir = getcwd();\r\n_chdir('..');\r\n_chdir('/');\r\n_chdir($dir);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/csv.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction d($lineno,$line)\r\n{\r\n  foreach ($line as $idx => $field)\r\n  {\r\n    echo $lineno,\".\",$idx,\": '\",addcslashes($field,\"\\n\\t\\r\"),\"'\\n\";\r\n  }\r\n}\r\n\r\nfunction read_file($filename)\r\n{\r\n  echo \"--- $filename ---\\n\";\r\n\r\n  $fp = fopen($filename,\"rt\");\r\n  \r\n  if (!$fp) die(\"File not found!\");\r\n\r\n  $lineno = 0;\r\n  while (($line = fgetcsv($fp,1000,\";\",'\"')) !== false)\r\n    d($lineno++,$line);\r\n\r\n  fclose($fp);\r\n}\r\n\r\nchdir(dirname(__FILE__));\r\n\r\n//read_file(\"cvs.test1.csv\");\r\n//read_file(\"cvs.test2.csv\");\r\n\r\necho \"\\n--- write ---\\n\";\r\n\r\n$fp = fopen(\"out.csv\",\"wt\");\r\n\r\nif (!$fp) die(\"File not found!\");\r\n\r\necho \r\n  fputcsv($fp,array(\"hello\\nworld\",'aaa\"bbb\"ccc','blah blah;','none',\"tab\\ttab\",'space space'),';','\"'),\"\\n\",\r\n  fputcsv($fp,array(\"hh'ee\",\"ss\\\\nsadasdasd s\"),';','\"'),\"\\n\",\r\n  fputcsv($fp,array('\"\"\"\"\"\"\"\"\"\"','\"','','\"\"','xxx\"'),';','\"'),\"\\n\",\r\n  fputcsv($fp,array('x')),\"\\n\",\r\n  fputcsv($fp,array('x\\y')),\"\\n\";\r\n\r\nfclose($fp);\r\n\r\necho \"\\n--- read ---\\n\";\r\n\r\n$fp = fopen(\"out.csv\", \"rt\");\r\n\r\nif (!$fp) die(\"File not found!\");\r\n\r\nwhile (($line = fgets($fp))!==false)\r\n  echo addcslashes($line,\"\\n\\t\\r\"),\"\\n\";\r\n\r\nfclose($fp);\r\n\r\nunlink(\"out.csv\");\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/csv.test1.csv",
    "content": ";;;\r\n  \"as\"\"d\"\"ad\";a\"s\"dx\r\n\"hel\r\nlo\" \"w\r\norld\"; hhh\r\nada \"sadsas\r\n\" asddads; asda\r\n\"as sdasd\r\n\r\nx\r\n                        \r\nbbb;           ;   x   ;  \"f\"   ;g     \r\n\"heeee\r\nllll"
  },
  {
    "path": "Testing/Tests/FileSystem/csv.test2.csv",
    "content": ""
  },
  {
    "path": "Testing/Tests/FileSystem/date.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\n// Dates relative to: March 10th, 2001, 5:16:18 pm\r\n$dt = mktime(17, 16, 18, 3, 10, 2001) ; // [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])\r\n\r\n$res = array();\r\n$fmt = array_merge(range('a','z'), range('A','Z'));\r\nsort($fmt);\r\n\r\nforeach ($fmt as $s)\r\n{\r\n  // skips 'T' as it outputs different time zone name than Phalanger:\r\n  if ($s != 'T')\r\n    $res[] = \"$s --> {\" .date($s, $dt). \"}\";\r\n}\r\n\r\nD($res);\r\n\r\n?>  \r\n \r\n\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/date2.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\n// Dates relative to: Januray 1st, 2000, 01:01:01 am\r\n$dt = mktime(1, 1, 1, 1, 1, 2000) ; // [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])\r\n\r\nD(array(\r\n  date('F j, Y; [H:i:s] (H) \\h\\o\\u\\r\\s', $dt),\r\n  date('l', $dt), // Prints something like: Wednesday\r\n  date('l dS \\o\\f F Y h:i:s A', $dt), // Prints something like: Wednesday 15th of January 2003 05:51:38 AM\r\n  date(\"l \\\\t\\h\\\\e jS\", $dt), \r\ndate (\"F j, Y, g:i a\", $dt),                 // March 10, 2001, 5:16 pm\r\ndate (\"m.d.y\", $dt),                         // 03.10.01\r\ndate (\"j, n, Y\", $dt),                       // 10, 3, 2001\r\ndate (\"Ymd\", $dt),                           // 20010310\r\ndate ('h-i-s, j-m-y, it is w Day z ', $dt),  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01\r\ndate ('\\i\\t \\i\\s \\t\\h\\e jS \\d\\a\\y.', $dt),   // It is the 10th day.\r\ndate (\"D M j G:i:s \\\\M\\\\S\\\\T(!) Y\", $dt),               // Sat Mar 10 15:16:08 MST 2001\r\ndate ('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', $dt),     // 17:03:17 m is month\r\ndate (\"H:i:s\", $dt),                         // 17:16:17\r\n  date('', $dt)\r\n));\r\n\r\n\r\n?>  \r\n \r\n\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/date3.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\nD(array(\r\ndate (\"F j, Y, g:i a\", mktime(0, 0, 0, date(\"m\")  , date(\"d\")+1, date(\"Y\"))),\r\ndate (\"F j, Y, g:i a\", mktime(0, 0, 0, date(\"m\")-1, date(\"d\"),   date(\"Y\"))),\r\ndate (\"F j, Y, g:i a\", mktime(0, 0, 0, date(\"m\"),   date(\"d\"),   date(\"Y\")+1))\r\n));\r\n\r\n// Dates corresponding to: March 10th, 2001, 5:16:18 pm\r\n$dt = mktime(17, 16, 18, 3, 10, 2001) ; // [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])\r\n\r\nD(array(\r\n  date('F j, Y; [H:i:s] (H) \\h\\o\\u\\r\\s', $dt),\r\n  date('l', $dt), // Prints something like: Wednesday\r\n  date('l dS \\o\\f F Y h:i:s A', $dt), // Prints something like: Wednesday 15th of January 2003 05:51:38 AM\r\n  date(\"l \\\\t\\h\\\\e jS\", $dt), \r\ndate (\"F j, Y, g:i a\", $dt),                 // March 10, 2001, 5:16 pm\r\ndate (\"m.d.y\", $dt),                         // 03.10.01\r\ndate (\"j, n, Y\", $dt),                       // 10, 3, 2001\r\ndate (\"Ymd\", $dt),                           // 20010310\r\ndate ('h-i-s, j-m-y, it is w Day z ', $dt),  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01\r\ndate ('\\i\\t \\i\\s \\t\\h\\e jS \\d\\a\\y.', $dt),   // It is the 10th day.\r\ndate (\"D M j G:i:s \\\\M\\\\S\\\\T(!) Y\", $dt),               // Sat Mar 10 15:16:08 MST 2001\r\ndate ('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', $dt),     // 17:03:17 m is month\r\ndate (\"H:i:s\", $dt),                         // 17:16:17\r\n  date('', $dt)\r\n)) ;\r\n\r\n\r\n?>  \r\n \r\n\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/date_unix.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\n// Dates corresponding to: Januray 1st, 1970, 12:01:11 am\r\n$dt = mktime(1, 0, 11, 1, 1, 1970) ; // [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])\r\n\r\nD(array(\r\n  date('F j, Y; [H:i:s] (H) \\h\\o\\u\\r\\s', $dt),\r\n  date('l', $dt), // Prints something like: Wednesday\r\n  date('l dS \\o\\f F Y h:i:s A', $dt), // Prints something like: Wednesday 15th of January 2003 05:51:38 AM\r\n  date(\"l \\\\t\\h\\\\e jS\", $dt), \r\ndate (\"F j, Y, g:i a\", $dt),                 // March 10, 2001, 5:16 pm\r\ndate (\"m.d.y\", $dt),                         // 03.10.01\r\ndate (\"j, n, Y\", $dt),                       // 10, 3, 2001\r\ndate (\"Ymd\", $dt),                           // 20010310\r\ndate ('h-i-s, j-m-y, it is w Day z ', $dt),  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01\r\ndate ('\\i\\t \\i\\s \\t\\h\\e jS \\d\\a\\y.', $dt),   // It is the 10th day.\r\ndate (\"D M j G:i:s \\\\M\\\\S\\\\T(!) Y\", $dt),               // Sat Mar 10 15:16:08 MST 2001\r\ndate ('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', $dt),     // 17:03:17 m is month\r\ndate (\"H:i:s\", $dt),                         // 17:16:17\r\ngmdate (\"H:i:s\", $dt),                         // 17:16:17\r\n  date('U', $dt),\r\n  date('', $dt)\r\n)) ;\r\n\r\n\r\n?>  \r\n \r\n\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/dirname.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');     \r\n__var_dump(\r\n  dirname(\"C:\\\\\"),\r\n  dirname(\"C:/\"),\r\n  dirname(\"somedir/somefile\"),\r\n  dirname(\"/\"),\r\n  dirname(\"/dir\"),\r\n  dirname(\"/dir/\"),\r\n  dirname(\"/etc/passwd\"),\r\n  dirname(\"\\\\etc\\\\passwd\"),\r\n  dirname(\"c:\\\\temp\\\\file.tmp\"));\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/dirname2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndirname(null);\r\ndirname(\"\");\r\nvar_dump(dirname(\"c\"));\r\nvar_dump(dirname(\"c:\"));\r\nvar_dump(dirname(\"c:x\"));\r\nvar_dump(dirname(\"c:\\\\\"));\r\nvar_dump(dirname(\"c:\\\\///\"));\r\nvar_dump(dirname(\"c:/\"));\r\nvar_dump(dirname(\"c:\\\\x\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\y\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\y\\\\\"));\r\nvar_dump(dirname(\"c:\\\\x/y\\\\\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\y\\\\..\\\\\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\y\\\\.\\\\/\\\\..\\\\u\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\y\\\\.\\\\/\\\\..\\\\u\\\\\\\\\\\\\"));\r\nvar_dump(dirname(\"c:\\\\x\\\\%path%/y\\\\.\\\\*.*/\\\\..\\\\u\"));\r\nvar_dump(dirname(\"\\\\\")); \r\nvar_dump(dirname(\"/\")); \r\nvar_dump(dirname(\"a/\")); \r\nvar_dump(dirname(\"a/b\")); \r\nvar_dump(dirname(\"a/b/\")); \r\nvar_dump(dirname(\"a/b/c\")); \r\nvar_dump(dirname(\"a/b/c\\\\d\")); \r\nvar_dump(dirname(\"a/b\\\\c/d\")); \r\nvar_dump(dirname(\"a\\\\b\\\\c/d\")); \r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/disk_free_space.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n// write out size in GB, bytes could change between running test and php..\r\n$GB = 1024*1024*1024;\r\n\r\n// $df contains the number of bytes available on \"/\"\r\necho ((int)(disk_free_space(\"/\")/$GB)) . \" GB\\n\";\r\n\r\n// On Windows:\r\nforeach (range('C','F') as $drive)\r\n{\r\n  echo \"Drive $drive: \";\r\n  $sp = disk_free_space(\"$drive:\");\r\n  if ($sp === false) echo \"false\\n\";\r\n  else echo ((int)($sp/$GB)).\" GB\\n\";\r\n}\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/disk_total_space.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n// $df contains the number of bytes available on \"/\"\r\necho disk_total_space(\"/\") . \"\\n\";\r\n\r\n// On Windows:\r\necho disk_total_space(\"C:\") . \"\\n\";\r\necho disk_total_space(\"D:\") . \"\\n\";\r\n//echo disk_total_space(\"E:\") . \"\\n\";\r\n//echo disk_total_space(\"F:\") . \"\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/fgets.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n$handle = fopen(\"test.txt\", \"rt\");\r\nif ($handle)\r\n{\r\n  while (!feof($handle)) {\r\n    $buffer = fgets($handle, 4096);\r\n    echo htmlspecialchars($buffer);\r\n  }\r\n  fclose($handle);\r\n}\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/file.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude('fs.inc');\r\n\r\n// Get a file into an array.  In this example we'll go through HTTP to get \r\n// the HTML source of a URL.\r\nd( file('oneline.txt') );\r\nd( file('twoline.txt', FILE_IGNORE_NEW_LINES) );\r\nd( file('twoline.txt', FILE_SKIP_EMPTY_LINES) );\r\nd( file('twoline.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES) );\r\nd( file('noline.txt') );\r\n\r\n// Get a file into an array.  In this example we'll go through HTTP to get \r\n// the HTML source of a URL.\r\n$lines = file('test.txt');\r\n\r\n// Loop through our array, show HTML source as HTML source; and line numbers too.\r\n//foreach ($lines as $line_num => $line) {\r\n//    echo \"Line #<b>{$line_num}</b> : \" . htmlspecialchars($line) . \"<br />\\n\";\r\n//}\r\n$line_num = count($lines) - 1;\r\n$line = $lines[$line_num];\r\n    echo \"Line #<b>{$line_num}</b> : \" . htmlspecialchars($line) . \"<br />\\n\";\r\n\r\n// Another example, let's get a web page into a string.  See also file_get_contents().\r\n$html = implode('', file('oneline.txt'));\r\n\r\necho '['.str_replace(\"\\n\", \"{\\\\n}\\n\", htmlspecialchars($html)).']';\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/file_exists.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\necho file_exists('C:/') ? \"YES\" : \"NO\";\r\nprint(\"\\n\");\r\necho file_exists('someotherfile') ? \"YES\" : \"NO\";\r\nprint(\"\\n\");\r\n\r\necho print('ok');\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/file_get_contents.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$context = stream_context_create();\r\necho \"-------------------------\\n\";\r\necho file_get_contents(__FILE__),\"\\n\";\r\necho \"-------------------------\\n\";\r\necho file_get_contents(__FILE__,false,$context,1),\"\\n\";\r\necho \"-------------------------\\n\";\r\necho file_get_contents(__FILE__,false,$context,1,10),\"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/filesize.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n$filename = __FILE__;\r\necho $filename . ': ' . filesize($filename) . ' bytes';\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/fpassthru.php",
    "content": "[expect php]\r\n[file]\r\n<xmp>\r\n<?php\r\n\r\n$fr = fopen(__FILE__, \"rb\");\r\nfpassthru($fr);\r\nfclose($fr); \r\n\r\n?> \r\n</xmp>"
  },
  {
    "path": "Testing/Tests/FileSystem/fread.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n// get contents of a file into a string\r\necho \"[BIN]\";\r\n$filename = \"test.dat\";\r\n$handle = fopen($filename, \"rb\");\r\n$contents = fread($handle, filesize($filename));\r\nfclose($handle);\r\necho strlen($contents);\r\n?>  \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/fread1.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n// get contents of a file into a string\r\necho \"[TEXT]\";\r\n$filename = \"test.txt\";\r\n$handle = fopen($filename, \"rt\");\r\n$contents = fread($handle, filesize($filename));\r\nfclose($handle);\r\necho strlen($contents);\r\n?>  \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/fread2.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n$handle = fopen(\"test.dat\", \"rb\");\r\nif ($handle)\r\n{\r\n  $contents = '';\r\n  while (!feof($handle)) {\r\n    $contents .= fread($handle, 1024);\r\n  }\r\n  fclose($handle);\r\n  echo strlen($contents);\r\n}\r\n?>  \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/fs.inc",
    "content": "<?php\r\n\r\n// Changes directory to that of THIS include file.\r\nchdir(dirname(__FILE__));\r\n\r\nfunction printr($a, $indent = \"\")\r\n{\r\n  $nextindent = \"$indent  \";\r\n  $rv = \"[ARRAY\\n\";\r\n  foreach ($a as $k => $v) \r\n    $rv .= $nextindent . dump($k) . \" => \" . dump($v, $nextindent) . \"\\n\";\r\n  return \"$rv$indent]\";\r\n}\r\n\r\nfunction dump($a, $indent = \"\")\r\n{\r\n  if (!isset($a)) return \"[UNDEFINED]\";\r\n  else if (is_bool($a)) return ($a) ? \"[TRUE]\":\"[FALSE]\";\r\n  else if (is_float($a)) return sprintf(\"[DOUBLE (%01.6f)]\", $a);\r\n  else if (is_int($a)) return \"[INT ($a)]\";\r\n  else if (is_string($a)) return \"[STRING: \\\"$a\\\"]\";\r\n  else if (is_array($a)) return printr($a, $indent);\r\n  else return \"[??? ($a)]\";\r\n}\r\n\r\nfunction d($a)\r\n{\r\n  echo \"<pre>\" . dump($a) . \"</pre>\\n\";\r\n}\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/fseek.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\ninclude 'fs.inc';\r\n\r\n\r\n$fp = fopen('test.txt', 'rb');\r\n\r\n// read some data\r\n$data = fgets($fp, 4096);\r\necho \":\" . ftell($fp);\r\n\r\n// move back to the beginning of the file\r\n// same as rewind($fp);\r\nD(fseek($fp, 0));\r\necho \":\" . ftell($fp);\r\necho fgets($fp);\r\n\r\nD(fseek($fp, 123));\r\necho \":\" . ftell($fp);\r\necho fgets($fp);\r\n\r\nD(fseek($fp, 1234567));\r\necho \":\" . ftell($fp);\r\necho fgets($fp);\r\n\r\nfclose($fp);\r\n\r\n\r\n\r\n$fp = fopen('test.txt', 'rt');\r\n\r\n// read some data\r\n$data = fgets($fp, 4096);\r\necho \":\" . ftell($fp);\r\n\r\n// move back to the beginning of the file\r\n// same as rewind($fp);\r\n@fseek($fp, 0);\r\necho \":\" . ftell($fp);\r\n\r\n@fseek($fp, 123);\r\necho \":\" . ftell($fp);\r\n\r\n@fseek($fp, 1234567);\r\necho \":\" . ftell($fp);\r\n\r\nfclose($fp);\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/fsockopen.php",
    "content": "[expect php]\r\n[file]\r\n\r\nTCP\r\n\r\n<?php\r\n$fp = fsockopen(\"www.google.com\", 80, $errno, $errstr, 30);\r\nif (!$fp) {\r\n    echo \"$errstr ($errno)<br />\\n\";\r\n} else {\r\n    $out = \"GET / HTTP/1.1\\r\\n\";\r\n    $out .= \"Host: www.example.com\\r\\n\";\r\n    $out .= \"Connection: Close\\r\\n\\r\\n\";\r\n\r\n$len = 0;\r\n\r\n    fwrite($fp, $out);\r\n    while (!feof($fp)) {\r\n        $len += strlen(fgets($fp, 128));\r\n    }\r\n    fclose($fp);\r\n\r\necho \"READ: $len\\n\";\r\n}\r\n?>\r\n\r\nUDP\r\n\r\n<?php\r\n\r\n/* REM\r\n$fp = fsockopen(\"udp://127.0.0.1\", 13, $errno, $errstr);\r\nif (!$fp) {\r\n    echo \"ERROR: $errno - $errstr<br />\\n\";\r\n} else {\r\n    fwrite($fp, \"\\n\");\r\n    echo fread($fp, 26);\r\n    fclose($fp);\r\n}\r\n\r\n/**/\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/ftell.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<xmp>\r\n<?php\r\ninclude 'fs.inc';\r\n\r\n// opens a file and read some data\r\n$fp = fopen(\"test.txt\", \"rt\");\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\nfclose($fp);\r\n\r\necho \"\\n\\n\";\r\n\r\n// opens a file and read some data\r\n$fp = fopen(\"test.txt\", \"rb\");\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\necho ($data = fgets($fp));\r\necho \":\".ftell($fp);\r\n\r\nfclose($fp);\r\n\r\n?> \r\n</xmp>"
  },
  {
    "path": "Testing/Tests/FileSystem/glob_up_dirs.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\n\tforeach (glob('../*', GLOB_ONLYDIR) as $folder)\r\n\t{\r\n\t\tvar_dump($folder);\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/is_dir.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?\r\nvar_dump(is_dir('a_file.txt')) . \"\\n\";\r\nvar_dump(is_dir('bogus_dir/abc')) . \"\\n\";\r\n\r\nvar_dump(is_dir('..')); //one dir up\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/is_executable.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n$file = '/home/vincent/somefile.sh';\r\n\r\n// REM if (is_executable($file))  // on Windows from PHP 5.0\r\nif (false)\r\n{\r\n    echo $file.' is executable';\r\n} else {\r\n    echo $file.' is not executable';\r\n}\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/noline.txt",
    "content": "this is a file WITHOUT an \"end-of-line\""
  },
  {
    "path": "Testing/Tests/FileSystem/oneline.txt",
    "content": "this is a file with one EOLN\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/pathinfo.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction ds($s)\r\n{\r\n  return ($s === null) ? \"NULL\" : $s;\r\n}\r\n\r\nfunction d($x)\r\n{\r\n  echo @ds($x['dirname']),\";\",@ds($x['basename']),\";\",@ds($x['extension']),\"\\n\";\r\n}\r\n\r\nd(pathinfo(null));\r\nd(pathinfo(\"\"));\r\nd(pathinfo('C:\\x\\y\\z.php.info'));\r\nd(pathinfo('C:\\x\\y\\z.php.info..'));\r\nd(pathinfo('./.'));\r\nd(pathinfo('C:./.'));\r\nd(pathinfo('./'));\r\nd(pathinfo('C:\\x\\y\\z.php/'));\r\nd(pathinfo('C:\\x\\y/'));\r\nd(pathinfo('C:\\x\\y/'));\r\nd(pathinfo('/////'));\r\nd(pathinfo('m/////'));\r\nd(pathinfo('m/////'));\r\nd(pathinfo('a/b/c/d/e/////'));\r\nd(pathinfo('/xab////'));\r\nd(pathinfo('/xab////'));\r\nd(pathinfo('/**////'));\r\nd(pathinfo(\"c\"));\r\nd(pathinfo(\"c:\"));\r\nd(pathinfo(\"c:x\"));\r\nd(pathinfo(\"c:\\\\\"));\r\nd(pathinfo(\"c:\\\\///\"));\r\nd(pathinfo(\"c:/\"));\r\nd(pathinfo(\"c:\\\\x\"));\r\nd(pathinfo(\"c:\\\\x\\\\\"));\r\nd(pathinfo(\"c:\\\\x\\\\y.l\"));\r\nd(pathinfo(\"c:\\\\x\\\\y\\\\\"));\r\nd(pathinfo(\"c:\\\\x/y\\\\\"));\r\nd(pathinfo(\"c:\\\\x\\\\y\\\\..\\\\\"));\r\nd(pathinfo(\"c:\\\\x\\\\y\\\\.\\\\/\\\\..\\\\u\"));\r\nd(pathinfo(\"c:\\\\x\\\\y\\\\.\\\\/\\\\..\\\\u\\\\\\\\\\\\\"));\r\nd(pathinfo(\"c:\\\\x\\\\%path%/y\\\\.\\\\*.*/\\\\..\\\\u\"));\r\nd(pathinfo(\"\\\\\")); \r\nd(pathinfo(\"/\")); \r\nd(pathinfo(\"a/\")); \r\nd(pathinfo(\"a/b\")); \r\nd(pathinfo(\"a/b/\")); \r\nd(pathinfo(\"a/b/c\")); \r\nd(pathinfo(\"a/b/c\\\\d.\")); \r\nd(pathinfo(\"a/b\\\\c/d\")); \r\nd(pathinfo(\"a\\\\b\\\\c/d\")); \r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/popen.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n$handle = popen(\"dir C:\\\\ /s\", 'r');\r\necho fgets($handle);\r\necho fgets($handle);\r\necho \"exit=\",pclose($handle);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/readdir.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction folder($folder)\r\n{\r\n unset($rv);\r\n $handle = opendir($folder);\r\n while (false !== ($file = readdir($handle)))\r\n {\r\n  $rv[] = $file;\r\n }\r\n closedir($handle);\r\n sort($rv);\r\n return $rv;\r\n}\r\n \r\nfunction printme($a)\r\n{\r\nforeach ($a as $k => $v) echo \"[$k] => $v\\n\";\r\n}\r\n\r\nprintme(folder(\"C:\\\\\"));\r\nprintme(folder(\".\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/readfile.php",
    "content": "[expect php]\r\n[file]\r\n<xmp>\r\n<?php\r\nchdir(dirname(__FILE__));\r\ndefine('f', 'readfile.php');\r\n\r\nreadfile(f);\r\n\r\necho \"<hr>\";\r\n\r\nreadfile(f);\r\n\r\necho \"<hr>\";\r\n\r\n$fr = fopen(f, \"rb\");\r\nfpassthru($fr);\r\nfclose($fr); \r\n\r\n?> \r\n</xmp>"
  },
  {
    "path": "Testing/Tests/FileSystem/readline.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\ninclude \"fs.inc\";\r\n\r\n$handle = fopen(\"test.txt\", \"rt\");\r\nif ($handle)\r\n{\r\n  $i = 0;\r\n  $contents = '';\r\n  while (!feof($handle)) {\r\n\r\n\t// Note: Phalanger returns EOF one fgets sooner!\r\n\r\n    $len = fgets($handle, 1024);\r\n    $contents .= $len;\r\n    if ($len) print \"|\" . ftell($handle) . \"->\" . strlen($contents);\r\n    if ((++$i & 7) == 0) echo \"\\r\\n\";\r\n  }\r\n  fclose($handle);\r\n\r\n  print \"\\r\\n\" . strlen($contents);\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/realpath.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho realpath(\"C:\") . \"\\n\";\r\necho realpath(\"C:\\\\\") . \"\\n\";\r\necho realpath(\"C:/\") . \"\\n\";\r\necho strtoupper(realpath('C:\\windows\\explorer.exe')) . \"\\n\";\r\necho realpath('someotherfile') . \"\\n\";\r\necho realpath(\".\") . \"\\n\";\r\necho realpath(\".\\\\\") . \"\\n\";\r\necho realpath(\"./\") . \"\\n\";\r\necho realpath(\"http://www.google.com/\") . \"\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/rwseek.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n$f = fopen(\"rwseek.txt\", \"w+b\");\r\n\r\nfwrite($f, \"AAAA BBBB CCCC\");\r\nfseek($f, 5);\r\n$s = fread($f, 5);\r\nfseek($f, 0);\r\nfwrite($f, $s);\r\nfseek($f, 10);\r\n$s = fread($f, 5);\r\nfseek($f, 5);\r\nfwrite($f, $s);\r\nfseek($f, 0);\r\nfpassthru($f);\r\nfclose($f);\r\nunlink(\"rwseek.txt\");\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/scandir.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction printme($a)\r\n{\r\nforeach ($a as $k => $v) echo \"[$k] => $v\\n\";\r\n}\r\n\r\nprintme(scandir('.'));\r\nprintme(scandir('./'));\r\nprintme(scandir('.\\\\'));\r\nprintme(scandir('C:\\\\'));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/stat.php",
    "content": "[comment] We have different mtime and ctime sometimes... Not tested for output, just for compiling and running.\r\n\r\n[file]\r\n\r\n<pre>\r\n<?php\r\nfunction folder($folder)\r\n{\r\n unset($rv);\r\n $handle = opendir($folder);\r\n while (false !== ($file = readdir($handle)))\r\n {\r\n  $rv[] = $folder.$file;\r\n }\r\n closedir($handle);\r\n sort($rv);\r\n return $rv;\r\n}\r\n\r\n$statfields = array(\r\n\"dev\",\r\n\"ino\",\r\n//\"mode\",\t// Directory w sometimes not set - why?\r\n\"uid\",\r\n\"gid\",\r\n\"rdev\",\r\n\"size\",\r\n//\"atime\", \t// Minor difference - why?\r\n\"mtime\",\r\n\"ctime\",\r\n\"blksize\",\r\n\"blocks\"\r\n);\r\n\r\nfunction getstat($f)\r\n{\r\n  global $statfields; \r\n\r\n  $a = stat($f);\r\n  $rv = \"!!$f\";\r\n\r\n  foreach ($statfields as $key)\r\n    $rv .= \"\\n    $key => \" . $a[$key];\r\n\r\n//  $rv .= \"\\n    MODE => \" . decbin($a['mode']);\r\n\r\n  return $rv;\r\n} \r\n \r\nfunction printdir($a, $n)\r\n{\r\necho \"<hr><p>\" . realpath($n) . \"\\n\";\r\nforeach ($a as $k => $v) echo \"  [$k] => stat($v)\\n  (\" .getstat($v). \"\\n  )\\n\";\r\n}\r\n\r\nprintdir(folder(\"C:\\\\\"), \"C:\\\\\");\r\n//printdir(folder(\"./\"), \"./\");\r\n?>\r\n</pre>"
  },
  {
    "path": "Testing/Tests/FileSystem/stream_context_set_option.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nrequire(dirname(__FILE__).'/fs.inc');\r\n\r\n$opts = array(\r\n  'http'=>array(\r\n    'method'=>\"GET\",\r\n    'header'=>\"Accept-language: en\\r\\n\" . \r\n              \"Cookie: foo=bar\\r\\n\"\r\n  ),\r\n  'other'=>array(\r\n    'method'=>\"otherGET\",\r\n    'header'=>\"otherAccept-language: en\\r\\n\" . \r\n              \"otherCookie: foo=bar\\r\\n\"\r\n  ),\r\n  'file'=>array(\r\n    'method'=>\"otherGET\",\r\n    'header'=>\"otherAccept-language: en\\r\\n\" . \r\n              \"otherCookie: foo=bar\\r\\n\"\r\n  )\r\n);\r\n\r\n\r\n$c = stream_context_create($opts);\r\n//$fr = fopen('fs.inc', 'rb', 0, $c);\r\n$fr = @fopen('http://www.google.com/', 'rb', 0, $c);\r\nif ($fr === false) die('NO NETWORK CONNECTION!');\r\n\r\nstream_context_set_option($c, \"wrap\", \"op1\", \"DIRECT\");\r\nstream_context_set_option($fr, \"wrap\", \"op2\", \"VIA STREAM\");\r\nstream_context_set_option($c, \"http\", \"op1\", \"DIRECT\");\r\nstream_context_set_option($fr, \"http\", \"op2\", \"VIA STREAM\");\r\n\r\nd(stream_context_get_options($c));\r\nd(stream_context_get_options($fr));\r\n\r\n/* Note: in PHP only some wrappers accept the context; no filtering by wrapper name.\r\n$fr = fopen('fs.inc', 'rb', 0, $c);\r\n\r\nstream_context_set_option($fr, \"wrap\", \"op3\", \"VIA STREAM\");\r\nstream_context_set_option($fr, \"file\", \"op3\", \"VIA STREAM\");\r\n\r\nd(stream_context_get_options($fr));\r\n/**/\r\n\r\n// static include to compile fs.inc into assembly\r\nrequire_once('fs.inc');\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/stream_copy_to_stream.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\ninclude('fs.inc');\r\ndefine('f', 'readfile.php');\r\n\r\n\r\n$fr = fopen(f, \"rb\");\r\n$fw = fopen(\"php://stdout\", \"wb\");\r\necho \"Copied to STDOUT: \";\r\necho dump(stream_copy_to_stream($fr, $fw));\r\n//fclose($fw); // Note: this REALLY closes the output of PHP!!!\r\nfclose($fr); \r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/stream_copy_to_stream2.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nfunction localhost($r, $w)\r\n{\r\n echo \"<p>Read <b>$r</b>, Write <b>$w</b>\\n\";\r\n $fr = @fopen(\"http://www.google.com/\", $r);\r\n if ($fr === false) die('NO NETWORK CONNECTION!');\r\n\r\n $fw = fopen(\"stream_copy_to_stream_${r}_${w}.txt\", $w);\r\n echo \"\\n\\nCOPIED: <b>\" . stream_copy_to_stream($fr, $fw) . \"</b>\\n\";\r\n fclose($fr);\r\n fclose($fw);\r\n\r\n /*\r\n\r\n $f = fopen(\"stream_copy_to_stream_${r}_${w}.txt\", \"rb\");\r\n while (false !== ($c = fgetc($f)))\r\n {\r\n $c = (string)$c;\r\n //echo ord($c);\r\n   if ($c == \"\\n\") echo \"[\\\\n]\\n\";\r\n   else if ($c == \"\\r\") echo \"[\\\\r]\\r\";\r\n   else if ($c == \"<\") echo \"&lt;\";\r\n   else if ($c == \">\") echo \"&gt;\";\r\n   else echo $c;\r\n }\r\n fclose($f);\r\n\r\n */\r\n unlink(\"stream_copy_to_stream_${r}_${w}.txt\");\r\n}\r\n\r\n//localhost(\"rt\", \"wt\"); // Note: PHP ignores the read text mode\r\n//localhost(\"rt\", \"wb\"); // Note: PHP ignores the read text mode\r\nlocalhost(\"rb\", \"wb\");\r\nlocalhost(\"rb\", \"wt\");\r\n\r\n//fgets(STDIN);\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/summer.txt",
    "content": ""
  },
  {
    "path": "Testing/Tests/FileSystem/tar/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/tar/phalang.inc",
    "content": "<?\r\n\r\n/*\r\nThis file is for compatibility purposes.\r\n\r\nPhalanger version 2.0 has strings by default in unicode. In order to\r\nforce Phalanger to convert a string to bytes it's necessary to use\r\nto_binary($obj) phalanger's function. In PHP the function doesn't\r\nexist. In order not to throw fatal error Unknown function error in \r\nPHP follows to_Binary implementation in PHP.\r\n*/\r\n\r\nfunction defineBinaryFnc()\r\n{\r\nif (!PHALANGER)\r\n{\r\n\tfunction to_binary($obj)\r\n\t{\t\r\n\t\treturn $obj;\r\n\t}\r\n}\r\n}\r\n\r\n@defineBinaryFnc();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/tar/tar.class.inc",
    "content": "<?php\n/*\n=======================================================================\nName:\n\ttar Class\n\nAuthor:\n\tJosh Barger <joshb@npt.com>\n\nDescription:\n\tThis class reads and writes Tape-Archive (TAR) Files and Gzip\n\tcompressed TAR files, which are mainly used on UNIX systems.\n\tThis class works on both windows AND unix systems, and does\n\tNOT rely on external applications!! Woohoo!\n\nUsage:\n\tCopyright (C) 2002  Josh Barger\n\n\tThis library is free software; you can redistribute it and/or\n\tmodify it under the terms of the GNU Lesser General Public\n\tLicense as published by the Free Software Foundation; either\n\tversion 2.1 of the License, or (at your option) any later version.\n\n\tThis library is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n\tLesser General Public License for more details at:\n\t\thttp://www.gnu.org/copyleft/lesser.html\n\n\tIf you use this script in your application/website, please\n\tsend me an e-mail letting me know about it :)\n\nBugs:\n\tPlease report any bugs you might find to my e-mail address\n\tat joshb@npt.com.  If you have already created a fix/patch\n\tfor the bug, please do send it to me so I can incorporate it into my release.\n\nVersion History:\n\t1.0\t04/10/2002\t- InitialRelease\n\n\t2.0\t04/11/2002\t- Merged both tarReader and tarWriter\n\t\t\t\t  classes into one\n\t\t\t\t- Added support for gzipped tar files\n\t\t\t\t  Remember to name for .tar.gz or .tgz\n\t\t\t\t  if you use gzip compression!\n\t\t\t\t  :: THIS REQUIRES ZLIB EXTENSION ::\n\t\t\t\t- Added additional comments to\n\t\t\t\t  functions to help users\n\t\t\t\t- Added ability to remove files and\n\t\t\t\t  directories from archive\n\t2.1\t04/12/2002\t- Fixed serious bug in generating tar\n\t\t\t\t- Created another example file\n\t\t\t\t- Added check to make sure ZLIB is\n\t\t\t\t  installed before running GZIP\n\t\t\t\t  compression on TAR\n\t2.2\t05/07/2002\t- Added automatic detection of Gzipped\n\t\t\t\t  tar files (Thanks go to Jrgen Falch\n\t\t\t\t  for the idea)\n\t\t\t\t- Changed \"private\" functions to have\n\t\t\t\t  special function names beginning with\n\t\t\t\t  two underscores\n=======================================================================\n*/\n\ninclude 'phalang.inc';\n\n\n\nclass tar {\n\t// Unprocessed Archive Information\n\tvar $filename;\n\tvar $isGzipped;\n\tvar $tar_file;\n\n\t// Processed Archive Information\n\tvar $files;\n\tvar $directories;\n\tvar $numFiles;\n\tvar $numDirectories;\n\n\n\t// Class Constructor -- Does nothing...\n\tfunction tar() {\n\t\treturn true;\n\t}\n\n\n\t// Computes the unsigned Checksum of a file's header\n\t// to try to ensure valid file\n\t// PRIVATE ACCESS FUNCTION\n\tfunction __computeUnsignedChecksum($bytestring) {\n\t\tfor($i=0; $i<512; $i++)\n\t\t\t$unsigned_chksum += ord($bytestring[$i]);\n\t\tfor($i=0; $i<8; $i++)\n\t\t\t$unsigned_chksum -= ord($bytestring[148 + $i]);\n\t\t$unsigned_chksum += ord(\" \") * 8;\n\n\t\treturn $unsigned_chksum;\n\t}\n\n\n\t// Converts a NULL padded string to a non-NULL padded string\n\t// PRIVATE ACCESS FUNCTION\n\tfunction __parseNullPaddedString($string) {\n\t\t$position = strpos($string,chr(0));\n\t\treturn substr($string,0,$position);\n\t}\n\n\n\t// This function parses the current TAR file\n\t// PRIVATE ACCESS FUNCTION\n\tfunction __parseTar() {\n\t\t// Read Files from archive\n\t\t$tar_length = strlen($this->tar_file);\n\t\t$main_offset = 0;\n\t\twhile($main_offset < $tar_length) {\n\t\t\t// If we read a block of 512 nulls, we are at the end of the archive\n\t\t\tif(substr($this->tar_file,$main_offset,512) == str_repeat(chr(0),512))\n\t\t\t\tbreak;\n\n\t\t\t// Parse file name\n\t\t\t$file_name\t\t= $this->__parseNullPaddedString(substr($this->tar_file,$main_offset,100));\n\n\t\t\t// Parse the file mode\n\t\t\t$file_mode\t\t= substr($this->tar_file,$main_offset + 100,8);\n\n\t\t\t// Parse the file user ID\n\t\t\t$file_uid\t\t= octdec(substr($this->tar_file,$main_offset + 108,8));\n\n\t\t\t// Parse the file group ID\n\t\t\t$file_gid\t\t= octdec(substr($this->tar_file,$main_offset + 116,8));\n\n\t\t\t// Parse the file size\n\t\t\t$file_size\t\t= octdec(substr($this->tar_file,$main_offset + 124,12));\n\n\t\t\t// Parse the file update time - unix timestamp format\n\t\t\t$file_time\t\t= octdec(substr($this->tar_file,$main_offset + 136,12));\n\n\t\t\t// Parse Checksum\n\t\t\t$file_chksum\t\t= octdec(substr($this->tar_file,$main_offset + 148,6));\n\n\t\t\t// Parse user name\n\t\t\t$file_uname\t\t= $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 265,32));\n\n\t\t\t// Parse Group name\n\t\t\t$file_gname\t\t= $this->__parseNullPaddedString(substr($this->tar_file,$main_offset + 297,32));\n\n\t\t\t// Make sure our file is valid\n\t\t\tif($this->__computeUnsignedChecksum(substr($this->tar_file,$main_offset,512)) != $file_chksum)\n\t\t\t\treturn false;\n\n\t\t\t// Parse File Contents\n\t\t\t$file_contents\t\t= substr($this->tar_file,$main_offset + 512,$file_size);\n\n\t\t\t/*\t### Unused Header Information ###\n\t\t\t\t$activeFile[\"typeflag\"]\t\t= substr($this->tar_file,$main_offset + 156,1);\n\t\t\t\t$activeFile[\"linkname\"]\t\t= substr($this->tar_file,$main_offset + 157,100);\n\t\t\t\t$activeFile[\"magic\"]\t\t= substr($this->tar_file,$main_offset + 257,6);\n\t\t\t\t$activeFile[\"version\"]\t\t= substr($this->tar_file,$main_offset + 263,2);\n\t\t\t\t$activeFile[\"devmajor\"]\t\t= substr($this->tar_file,$main_offset + 329,8);\n\t\t\t\t$activeFile[\"devminor\"]\t\t= substr($this->tar_file,$main_offset + 337,8);\n\t\t\t\t$activeFile[\"prefix\"]\t\t= substr($this->tar_file,$main_offset + 345,155);\n\t\t\t\t$activeFile[\"endheader\"]\t= substr($this->tar_file,$main_offset + 500,12);\n\t\t\t*/\n\n\t\t\tif($file_size > 0) {\n\t\t\t\t// Increment number of files\n\t\t\t\t$this->numFiles++;\n\n\t\t\t\t// Create us a new file in our array\n\t\t\t\t$activeFile = &$this->files[];\n\n\t\t\t\t// Asign Values\n\t\t\t\t$activeFile[\"name\"]\t\t= $file_name;\n\t\t\t\t$activeFile[\"mode\"]\t\t= $file_mode;\n\t\t\t\t$activeFile[\"size\"]\t\t= $file_size;\n\t\t\t\t$activeFile[\"time\"]\t\t= $file_time;\n\t\t\t\t$activeFile[\"user_id\"]\t\t= $file_uid;\n\t\t\t\t$activeFile[\"group_id\"]\t\t= $file_gid;\n\t\t\t\t$activeFile[\"user_name\"]\t= $file_uname;\n\t\t\t\t$activeFile[\"group_name\"]\t= $file_gname;\n\t\t\t\t$activeFile[\"checksum\"]\t\t= $file_chksum;\n\t\t\t\t$activeFile[\"file\"]\t\t= $file_contents;\n\n\t\t\t} else {\n\t\t\t\t// Increment number of directories\n\t\t\t\t$this->numDirectories++;\n\n\t\t\t\t// Create a new directory in our array\n\t\t\t\t$activeDir = &$this->directories[];\n\n\t\t\t\t// Assign values\n\t\t\t\t$activeDir[\"name\"]\t\t= $file_name;\n\t\t\t\t$activeDir[\"mode\"]\t\t= $file_mode;\n\t\t\t\t$activeDir[\"time\"]\t\t= $file_time;\n\t\t\t\t$activeDir[\"user_id\"]\t\t= $file_uid;\n\t\t\t\t$activeDir[\"group_id\"]\t\t= $file_gid;\n\t\t\t\t$activeDir[\"user_name\"]\t\t= $file_uname;\n\t\t\t\t$activeDir[\"group_name\"]\t= $file_gname;\n\t\t\t\t$activeDir[\"checksum\"]\t\t= $file_chksum;\n\t\t\t}\n\n\t\t\t// Move our offset the number of blocks we have processed\n\t\t\t$main_offset += 512 + (ceil($file_size / 512) * 512);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\n\t// Read a non gzipped tar file in for processing\n\t// PRIVATE ACCESS FUNCTION\n\tfunction __readTar($filename='') {\n\t\t// Set the filename to load\n\t\tif(!$filename)\n\t\t\t$filename = $this->filename;\n\n\t\t// Read in the TAR file\n\t\t$fp = fopen($filename,\"rb\");\n\t\t$this->tar_file = fread($fp,filesize($filename));\n\t\tfclose($fp);\n\n\t\tif($this->tar_file[0] == chr(31) && $this->tar_file[1] == chr(139) && $this->tar_file[2] == chr(8)) {\n\t\t\tif(!function_exists(\"gzinflate\"))\n\t\t\t\treturn false;\n\n\t\t\t$this->isGzipped = TRUE;\n\n\t\t\t$this->tar_file = gzinflate(substr($this->tar_file,10,-4));\n\t\t}\n\n\t\t// Parse the TAR file\n\t\t$this->__parseTar();\n\n\t\treturn true;\n\t}\n\n\n\t// Generates a TAR file from the processed data\n\t// PRIVATE ACCESS FUNCTION\n\tfunction __generateTAR() {\n\t\t// Clear any data currently in $this->tar_file\t\n\t\tunset($this->tar_file);\n\n\t\t// Generate Records for each directory, if we have directories\n\t\tif($this->numDirectories > 0) {\n\t\t\tforeach($this->directories as $key => $information) {\n\t\t\t\tunset($header);\n\n\t\t\t\t// Generate tar header for this directory\n\t\t\t\t// Filename, Permissions, UID, GID, size, Time, checksum, typeflag, linkname, magic, version, user name, group name, devmajor, devminor, prefix, end\n\t\t\t\t$header .= str_pad($information[\"name\"],100,chr(0));\n\t\t\t\t$header .= str_pad(decoct($information[\"mode\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"user_id\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"group_id\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct(0),11,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"time\"]),11,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_repeat(\" \",8);\n\t\t\t\t$header .= \"5\";\n\t\t\t\t$header .= str_repeat(chr(0),100);\n\t\t\t\t$header .= str_pad(\"ustar\",6,chr(32));\n\t\t\t\t$header .= chr(32) . chr(0);\n\t\t\t\t$header .= str_pad(\"\",32,chr(0));\n\t\t\t\t$header .= str_pad(\"\",32,chr(0));\n\t\t\t\t$header .= str_repeat(chr(0),8);\n\t\t\t\t$header .= str_repeat(chr(0),8);\n\t\t\t\t$header .= str_repeat(chr(0),155);\n\t\t\t\t$header .= str_repeat(chr(0),12);\n\n\t\t\t\t$header = to_binary($header);\n\n\t\t\t\t// Compute header checksum\n\t\t\t\t$checksum = str_pad(decoct($this->__computeUnsignedChecksum($header)),6,\"0\",STR_PAD_LEFT);\n\t\t\t\tfor($i=0; $i<6; $i++) {\n\t\t\t\t\t$header[(148 + $i)] = substr($checksum,$i,1);\n\t\t\t\t}\n\t\t\t\t$header[154] = chr(0);\n\t\t\t\t$header[155] = chr(32);\n\n\t\t\t\t// Add new tar formatted data to tar file contents\n\t\t\t\t$this->tar_file .= $header;\n\t\t\t}\n\t\t}\n\n\t\t// Generate Records for each file, if we have files (We should...)\n\t\tif($this->numFiles > 0) {\n\t\t\tforeach($this->files as $key => $information) {\n\t\t\t\tunset($header);\n\n\t\t\t\t// Generate the TAR header for this file\n\t\t\t\t// Filename, Permissions, UID, GID, size, Time, checksum, typeflag, linkname, magic, version, user name, group name, devmajor, devminor, prefix, end\n\t\t\t\t$header .= str_pad($information[\"name\"],100,chr(0));\n\t\t\t\t$header .= str_pad(decoct($information[\"mode\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"user_id\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"group_id\"]),7,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"size\"]),11,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_pad(decoct($information[\"time\"]),11,\"0\",STR_PAD_LEFT) . chr(0);\n\t\t\t\t$header .= str_repeat(\" \",8);\n\t\t\t\t$header .= \"0\";\n\t\t\t\t$header .= str_repeat(chr(0),100);\n\t\t\t\t$header .= str_pad(\"ustar\",6,chr(32));\n\t\t\t\t$header .= chr(32) . chr(0);\n\t\t\t\t$header .= str_pad($information[\"user_name\"],32,chr(0));\t// How do I get a file's user name from PHP?\n\t\t\t\t$header .= str_pad($information[\"group_name\"],32,chr(0));\t// How do I get a file's group name from PHP?\n\t\t\t\t$header .= str_repeat(chr(0),8);\n\t\t\t\t$header .= str_repeat(chr(0),8);\n\t\t\t\t$header .= str_repeat(chr(0),155);\n\t\t\t\t$header .= str_repeat(chr(0),12);\n\n\t\t\t\t$header = ($header);\n\n\t\t\t\t// Compute header checksum\n\t\t\t\t$checksum = str_pad(decoct($this->__computeUnsignedChecksum($header)),6,\"0\",STR_PAD_LEFT);\n\t\t\t\tfor($i=0; $i<6; $i++) {\n\t\t\t\t\t$header[(148 + $i)] = substr($checksum,$i,1);\n\t\t\t\t}\n\t\t\t\t$header[154] = chr(0);\n\t\t\t\t$header[155] = chr(32);\n\n\t\t\t\t// Pad file contents to byte count divisible by 512\n\t\t\t\t$file_contents = str_pad($information[\"file\"],(ceil($information[\"size\"] / 512) * 512),chr(0));\n\n\t\t\t\t// Add new tar formatted data to tar file contents\n\t\t\t\t$this->tar_file .= $header . $file_contents;\n\t\t\t}\n\t\t}\n\n\t\t// Add 512 bytes of NULLs to designate EOF\n\t\t$this->tar_file .= str_repeat(chr(0),512);\n\n\t\treturn true;\n\t}\n\n\n\t// Open a TAR file\n\tfunction openTAR($filename) {\n\t\t// Clear any values from previous tar archives\n\t\tunset($this->filename);\n\t\tunset($this->isGzipped);\n\t\tunset($this->tar_file);\n\t\tunset($this->files);\n\t\tunset($this->directories);\n\t\tunset($this->numFiles);\n\t\tunset($this->numDirectories);\n\n\t\t// If the tar file doesn't exist...\n\t\tif(!file_exists($filename))\n\t\t\treturn false;\n\n\t\t$this->filename = $filename;\n\n\t\t// Parse this file\n\t\t$this->__readTar();\n\n\t\treturn true;\n\t}\n\n\n\t// Appends a tar file to the end of the currently opened tar file\n\tfunction appendTar($filename) {\n\t\t// If the tar file doesn't exist...\n\t\tif(!file_exists($filename))\n\t\t\treturn false;\n\n\t\t$this->__readTar($filename);\n\n\t\treturn true;\n\t}\n\n\n\t// Retrieves information about a file in the current tar archive\n\tfunction getFile($filename) {\n\t\tif($this->numFiles > 0) {\n\t\t\tforeach($this->files as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $filename)\n\t\t\t\t\treturn $information;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Retrieves information about a directory in the current tar archive\n\tfunction getDirectory($dirname) {\n\t\tif($this->numDirectories > 0) {\n\t\t\tforeach($this->directories as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $dirname)\n\t\t\t\t\treturn $information;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Check if this tar archive contains a specific file\n\tfunction containsFile($filename) {\n\t\tif($this->numFiles > 0) {\n\t\t\tforeach($this->files as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $filename)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Check if this tar archive contains a specific directory\n\tfunction containsDirectory($dirname) {\n\t\tif($this->numDirectories > 0) {\n\t\t\tforeach($this->directories as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $dirname)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Add a directory to this tar archive\n\tfunction addDirectory($dirname) {\n\t\tif(!file_exists($dirname))\n\t\t\treturn false;\n\n\t\t// Get directory information\n\t\t$file_information = stat($dirname);\n\n\t\t// Add directory to processed data\n\t\t$this->numDirectories++;\n\t\t$activeDir\t\t= &$this->directories[];\n\t\t$activeDir[\"name\"]\t= $dirname;\n\t\t$activeDir[\"mode\"]\t= $file_information[\"mode\"];\n\t\t$activeDir[\"time\"]\t= $file_information[\"time\"];\n\t\t$activeDir[\"user_id\"]\t= $file_information[\"uid\"];\n\t\t$activeDir[\"group_id\"]\t= $file_information[\"gid\"];\n\t\t$activeDir[\"checksum\"]\t= $checksum;\n\n\t\treturn true;\n\t}\n\n\n\t// Add a file to the tar archive\n\tfunction addFile($filename) {\n\t\t// Make sure the file we are adding exists!\n\t\tif(!file_exists($filename))\n\t\t\treturn false;\n\n\t\t// Make sure there are no other files in the archive that have this same filename\n\t\tif($this->containsFile($filename))\n\t\t\treturn false;\n\n\t\t// Get file information\n\t\t$file_information = stat($filename);\n\n\t\t// Read in the file's contents\n\t\t$fp = fopen($filename,\"rb\");\n\t\t$file_contents = fread($fp,filesize($filename));\n\t\tfclose($fp);\n\n\t\t// Add file to processed data\n\t\t$this->numFiles++;\n\t\t$activeFile\t\t\t= &$this->files[];\n\t\t$activeFile[\"name\"]\t\t= $filename;\n\t\t$activeFile[\"mode\"]\t\t= $file_information[\"mode\"];\n\t\t$activeFile[\"user_id\"]\t\t= $file_information[\"uid\"];\n\t\t$activeFile[\"group_id\"]\t\t= $file_information[\"gid\"];\n\t\t$activeFile[\"size\"]\t\t= $file_information[\"size\"];\n\t\t$activeFile[\"time\"]\t\t= $file_information[\"mtime\"];\n\t\t$activeFile[\"checksum\"]\t\t= $checksum;\n\t\t$activeFile[\"user_name\"]\t= \"\";\n\t\t$activeFile[\"group_name\"]\t= \"\";\n\t\t$activeFile[\"file\"]\t\t= $file_contents;\n\n\t\treturn true;\n\t}\n\n\n\t// Remove a file from the tar archive\n\tfunction removeFile($filename) {\n\t\tif($this->numFiles > 0) {\n\t\t\tforeach($this->files as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $filename) {\n\t\t\t\t\t$this->numFiles--;\n\t\t\t\t\tunset($this->files[$key]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Remove a directory from the tar archive\n\tfunction removeDirectory($dirname) {\n\t\tif($this->numDirectories > 0) {\n\t\t\tforeach($this->directories as $key => $information) {\n\t\t\t\tif($information[\"name\"] == $dirname) {\n\t\t\t\t\t$this->numDirectories--;\n\t\t\t\t\tunset($this->directories[$key]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\t// Write the currently loaded tar archive to disk\n\tfunction saveTar() {\n\t\tif(!$this->filename)\n\t\t\treturn false;\n\n\t\t// Write tar to current file using specified gzip compression\n\t\t$this->toTar($this->filename,$this->isGzipped);\n\n\t\treturn true;\n\t}\n\n\n\t// Saves tar archive to a different file than the current file\n\tfunction toTar($filename,$useGzip) {\n\t\tif(!$filename)\n\t\t\treturn false;\n\n\t\t// Encode processed files into TAR file format\n\t\t$this->__generateTar();\n\n\t\t// GZ Compress the data if we need to\n\t\tif($useGzip) {\n\t\t\t// Make sure we have gzip support\n\t\t\tif(!function_exists(\"gzencode\"))\n\t\t\t\treturn false;\n\n\t\t\t$file = gzencode($this->tar_file);\n\t\t} else {\n\t\t\t$file = $this->tar_file;\n\t\t}\n\n\t\t// Write the TAR file\n\t\t$fp = fopen($filename,\"wb\");\n\t\tfwrite($fp,$file);\n\t\tfclose($fp);\n\n\t\treturn true;\n\t}\n}\n\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/tar/tar_test.php",
    "content": "[expect php]\n[file]\n<?php\n\trequire_once('tar.class.inc');\n\n\t@main();\n\t\n\tfunction main()\n\t{\n\t\t$tar = new tar();\n\t\t$tar->addFile('./test.pdf');\n\t\t$tar->toTar('./test_create.tar', false);\n\n\t\t$tar1 = new tar();\n\t\t$opened = $tar1->openTAR('./test_create.tar');\n\t\tif ($opened)\n\t\t{\n\t\t\t$soubor = $tar1->getFile('./test.pdf');\n\t\t\techo $soubor[\"file\"];\n\t\t}\n\t\telse\n\t\t{\n\t\t\techo \"FAILED TO OPEN ARCHIVE\";\n\t\t}\n\t}\n?>"
  },
  {
    "path": "Testing/Tests/FileSystem/test.txt",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(100%) 1 succeeded, 0 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b>Expected test output</b></td><td valign=\"top\"><b>Real script output</b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"file://C:\\Project\\PHP.NET\\Source\\Testing\\PhpNetTester\\Tests\\Honza\\new\\stream_context_set_option.php\">C:\\Project\\PHP.NET\\Source\\Testing\\PhpNetTester\\Tests\\Honza\\new\\stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font>/td>\r\n</tr>\r\n<tr>\r\n<td class=\"succeeded\" valign=\"top\" rowspan=\"1\">Success</td><td class=\"succeeded\" valign=\"top\">No errors</td><td class=\"succeeded\" valign=\"top\">Success</td><td class=\"succeeded\" valign=\"top\"><pre><pre>[ARRAY\r\n  [STRING: \"http\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"GET\"]\r\n    [STRING: \"header\"] => [STRING: \"Accept-language: en\r\nCookie: foo=bar\r\n\"]\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n  [STRING: \"other\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"file\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"wrap\"] => [ARRAY\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n]</pre>\r\n<pre>[ARRAY\r\n  [STRING: \"http\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"GET\"]\r\n    [STRING: \"header\"] => [STRING: \"Accept-language: en\r\nCookie: foo=bar\r\n\"]\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n  [STRING: \"other\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"file\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"wrap\"] => [ARRAY\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n]</pre></pre></td><td class=\"succeeded\" valign=\"top\"><pre><pre>[ARRAY\r\n  [STRING: \"http\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"GET\"]\r\n    [STRING: \"header\"] => [STRING: \"Accept-language: en\r\nCookie: foo=bar\r\n\"]\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n  [STRING: \"other\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"file\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"wrap\"] => [ARRAY\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n]</pre>\r\n<pre>[ARRAY\r\n  [STRING: \"http\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"GET\"]\r\n    [STRING: \"header\"] => [STRING: \"Accept-language: en\r\nCookie: foo=bar\r\n\"]\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n  [STRING: \"other\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"file\"] => [ARRAY\r\n    [STRING: \"method\"] => [STRING: \"otherGET\"]\r\n    [STRING: \"header\"] => [STRING: \"otherAccept-language: en\r\notherCookie: foo=bar\r\n\"]\r\n  ]\r\n  [STRING: \"wrap\"] => [ARRAY\r\n    [STRING: \"op1\"] => [STRING: \"DIRECT\"]\r\n    [STRING: \"op2\"] => [STRING: \"VIA STREAM\"]\r\n  ]\r\n]</pre></pre></td></tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/testinc.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nrequire('fs.inc');\r\n\r\nd(false);\r\nd(null);\r\nd(M_PI);\r\nd(array(1,3,pi(),false,\"4\" => \"YES\", 10 => \"ten\", \"10\" => 'TEN', 333 => array(3,3,3)));\r\nd(\"044\"+0);\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/touch.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\ninclude 'fs.inc';\r\n$FileName = \"touch.txt\";\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\nif (touch($FileName)) {\r\n    echo \"'$FileName' modification time changed\";\r\n} else {\r\n    echo \"Sorry Could Not change modification time of $FileName\";\r\n}\r\n\r\ntouch(\"touch.txt\", mktime(05, 30, 30, 03, 28, 1982), mktime(17, 17, 17, 04, 17, 2004));\r\n\r\ntouch(\"winter.txt\", mktime(23, 59, 59, 12, 31, 2011));\r\ntouch(\"summer.txt\", mktime(03, 04, 05, 06, 07, 2008));\r\n\r\n\r\n$fmt = 'F j, Y; [H:i:s] (H\\h)';\r\n\r\nD(array(\r\n  date($fmt, $t = filectime(\"test.txt\")) . \" ctime test.txt ($t)\"\r\n  ,date($fmt, $t = filemtime(\"test.txt\")) . \" mtime test.txt ($t)\"\r\n\r\n  ,date($fmt, $t = filectime(\"touch.txt\")) . \" ctime touch.txt ($t)\"\r\n  ,date($fmt, $t = filemtime(\"touch.txt\")) . \" mtime touch.txt ($t)\"\r\n  ,date($fmt, $t = fileatime(\"touch.txt\")) . \" atime touch.txt ($t)\"\r\n\r\n  ,date($fmt, $t = filemtime(\"summer.txt\")) . \" mtime summer.txt ($t)\"\r\n  ,date($fmt, $t = filemtime(\"winter.txt\")) . \" mtime winter.txt ($t)\"\r\n));\r\n// Note: do not use 'atime' - is is not immutable\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/FileSystem/touch.txt",
    "content": ""
  },
  {
    "path": "Testing/Tests/FileSystem/twoline.txt",
    "content": "\r\nThis is a file with two EOLNs. First line is empty.\r\n"
  },
  {
    "path": "Testing/Tests/FileSystem/winter.txt",
    "content": ""
  },
  {
    "path": "Testing/Tests/FileSystem/zip/zip.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$zip = zip_open('./test.zip');\r\n\r\nif (is_resource($zip)) {\r\n  // consider zip file opened successfully\r\n  echo \"correct\";\r\n  zip_close($zip);\r\n}\r\nelse\r\n{\r\n\techo \"failed\";\r\n}\r\n\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/Math/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Math/abs.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho $abs = abs(-4.2); // $abs = 4.2; (double/float)\r\necho \"\\n\";\r\necho $abs2 = abs(5);   // $abs2 = 5; (integer)\r\necho \"\\n\";\r\necho $abs3 = abs(-5);  // $abs3 = 5; (integer)\r\necho \"\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/atan2.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n// Note: PHP.NET has a different double precision\r\n\r\necho round(atan2(-10, 20)*180/3.14).\" deg\\n\";  //1\r\necho round(atan2(-20, 10)*180/3.14).\" deg\\n\";\r\necho round(atan2(-20, -10)*180/3.14).\" deg\\n\";\r\necho round(atan2(-10, -20)*180/3.14).\" deg\\n\";\r\necho round(atan2(10, -20)*180/3.14).\" deg\\n\";\r\necho round(atan2(20, -10)*180/3.14).\" deg\\n\";\r\necho round(atan2(20, 10)*180/3.14).\" deg\\n\";\r\necho round(atan2(10, 20)*180/3.14).\" deg\\n\";  // 8\r\n\r\necho \"<hr>\\n\";\r\n\r\necho round(atan(-10 / 20)*180/3.14).\" deg\\n\";  //1\r\necho round(atan(-20 / 10)*180/3.14).\" deg\\n\";\r\necho round(atan(-20 / -10)*180/3.14).\" deg\\n\"; // t\r\necho round(atan(-10 / -20)*180/3.14).\" deg\\n\"; // t\r\necho round(atan(10 / -20)*180/3.14).\" deg\\n\";  // t\r\necho round(atan(20 / -10)*180/3.14).\" deg\\n\";  // t\r\necho round(atan(20 / 10)*180/3.14).\" deg\\n\";\r\necho round(atan(10 / 20)*180/3.14).\" deg\\n\";  // 8\r\n \r\n \r\n?> "
  },
  {
    "path": "Testing/Tests/Math/base_convert.php",
    "content": "[comment] 101000110111001100110100php\r\n[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n$hexadecimal = 'A37334';\r\necho base_convert($hexadecimal, 16, 2) . base_convert('25', 10, 36) . base_convert('1363',7,30);\r\n\r\n//var_dump(base_convert(null, 10, 10));\r\n//var_dump(base_convert(0, 0, 2));\r\n//echo base_convert(0, 10, 1);\r\n//echo base_convert(0, 10, 50);\r\n\r\necho \"~\".base_convert(-555, 10, 10);\r\necho \"~\".base_convert(false, 16, 2);\r\necho \"~\".@base_convert(array('Q',2,3), 36, 36);\r\necho \"~\".base_convert('%', 16, 2);\r\necho \"~\".base_convert('Aa', 20, 10);\r\necho \"~\".base_convert('Aa', 10, 20);\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/bindec.php",
    "content": "[expect php]\r\n[file]\r\n\r\n\r\n<?php\r\n\r\nfunction dump($n)\r\n{\r\n if (is_float($n)) echo \"double: \";\r\n else if (is_int($n)) echo \"Int: \";\r\n else echo \"???: \";\r\n echo $n;\r\n}\r\n\r\necho bindec('110011') . \"\\n\";\r\necho bindec('000110011') . \"\\n\";\r\n\r\necho bindec('111') . \"\\n\";\r\ndump( bindec(decbin(2147483647)) ); \r\necho \"\\n\";\r\ndump( bindec(decbin(2147483647+1)) ); \r\necho \"\\n\";\r\ndump( bindec(decbin(2147483647*2)) ); \r\necho \"\\n\";\r\ndump( bindec(decbin(2147483647*2+1)) ); \r\necho \"\\n\";\r\ndump( bindec(\"11111111111111111111111111111111\") ); \r\necho \"\\n\";\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/ceil.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho ceil(4.3);    // 5\r\necho ceil(9.999);  // 10\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/cos.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho cos(M_PI); // -1\r\necho \"\\n\";\r\necho round(cos(1.22) * 1000);\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/decbin.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<pre>\r\n<?php\r\n\r\nfunction dump($n)\r\n{\r\n $rv = \"\";\r\n if (is_float($n))  $rv .= \"double: \";\r\n else if (is_int($n))  $rv .= \"Int: \";\r\n else  $rv .= \"???: \";\r\n $rv .= $n;\r\n return $rv;\r\n}\r\n\r\n\r\necho \"[\". dump(2294967295) .\"]\\n\";\r\necho decbin(2294967295) . \"\\n\";\r\n\r\necho \"[\". dump(4294967295+1) .\"]\\n\";\r\necho decbin(4294967295+1) . \"\\n\";\r\n\r\necho \"[\". dump(4294967295*2) .\"]\\n\";\r\necho decbin(4294967295*2) . \"\\n\";\r\n\r\necho \"[\". dump(4294967295*2) .\"]\\n\";\r\necho decbin(4294967295*2) . \"\\n\";\r\n\r\necho \"[\". dump(4294967295*2+1) .\"]\\n\";\r\necho decbin(4294967295*2+1) . \"\\n\";\r\n\r\necho \"[\". dump(1000) .\".000.000.000]\\n\";\r\necho decbin(1000000000000) . \"\\n\";\r\n\r\necho \"<hr>(-1, -5435, 2.14, 0, 26)\\n\";\r\n\r\necho decbin(-1) . \"\\n\";\r\necho decbin(-5435) . \"\\n\";\r\necho decbin(2.14) . \"\\n\";\r\necho decbin(0) . \"\\n\";\r\necho decbin(26);\r\n\r\n?> \r\n</pre>"
  },
  {
    "path": "Testing/Tests/Math/dechex.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho dechex(10) . \"\\n\";\r\necho dechex(47);\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/decoct.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho decoct(15) . \"\\n\";\r\necho decoct(264);\r\n?>  "
  },
  {
    "path": "Testing/Tests/Math/deg2rad.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho round(deg2rad(45), 12); // 0.785398163397\r\necho \"\\n\";\r\nif(deg2rad(45) === M_PI_4) echo \"bool(true)\"; // bool(true)\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/exp.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho round(exp(0),7) . \"\\n\";\r\necho round(exp(1),7) . \"\\n\";\r\necho round(exp(12),7) . \"\\n\";\r\necho round(exp(5.7),7);\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/floor.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho floor(4.3);   // 4\r\necho floor(9.999); // 9\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/fmod.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho fmod(91.25, 2);\r\necho \"~\";\r\necho fmod(91.25, 2.04);\r\necho \"~\";\r\necho fmod(97.25, 10);\r\necho \"~\";\r\necho fmod(-97.25, 10);\r\necho \"~\";\r\necho fmod(97.25, -10);\r\necho \"~\";\r\necho is_nan(fmod(97.25, 0));\t// Note: PHP has different syntax of NaN\r\necho \"~\";\r\necho is_nan(fmod(-97.25, 0));\r\n\r\n$x = 5.7;\r\n$y = 1.3;\r\n$r = fmod($x, $y);\r\n// $r equals 0.5, because 4 * 1.3 + 0.5 = 5.7\r\necho \"$ mod $y = $r\\n\";\r\n\r\n$x = -5.7;\r\n$y = 1.3;\r\n$r = fmod($x, $y);\r\necho \"$ mod $y = $r\\n\";\r\n\r\n$x = -5.7;\r\n$y = -1.3;\r\n$r = fmod($x, $y);\r\necho \"$ mod $y = $r\\n\";\r\n\r\n$x = 5.7;\r\n$y = -1.3;\r\n$r = fmod($x, $y);\r\necho \"$ mod $y = $r\\n\";\r\n\r\n$x = 0;\r\n$y = 1.3;\r\n$r = fmod($x, $y);\r\necho \"$ mod $y = $r\\n\";\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/hexdec.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\nprint(hexdec(\"See\"));\r\nprint(hexdec(\"ee\"));\r\n// both print \"int(238)\"\r\n\r\nprint(hexdec(\"that\")); // print \"int(10)\"\r\nprint(hexdec(\"a0\")); // print \"int(160)\"\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/max.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho max(1, 3, 5, 6, 7);  // 7\r\necho \"\\n\";\r\necho max(array(2, 4, 5)); // 5\r\necho \"\\n\";\r\n\r\necho max(0, 'hello');     // 0\r\necho \"\\n\";\r\necho max('hello', 0);     // hello\r\necho \"\\n\";\r\necho max(-1, 'hello');    // hello\r\necho \"\\n\";\r\n\r\n\r\nfunction printme($a)\r\n{\r\nforeach ($a as $k => $v) echo \"[$k] => $v\\n\";\r\n}\r\n\r\n// With multiple arrays, max compares from left to right\r\n// so in our example: 2 == 2, but 4 < 5\r\n$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)\r\nprintme($val);\r\necho \"\\n\\n\";\r\n\r\n// If both an array and non-array are given, the array\r\n// is always returned as it's seen as the largest\r\n$val = max('string', array(2, 5, 7), 42);   // array(2, 5, 7)\r\nprintme($val);\r\necho \"\\n\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/min.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\necho min(2, 3, 1, 6, 7);  // 1\r\necho \"\\n\";\r\necho min(array(2, 4, 5)); // 2\r\necho \"\\n\";\r\n\r\necho min(0, 'hello');     // 0\r\necho \"\\n\";\r\necho min('hello', 0);     // hello\r\necho \"\\n\";\r\necho min('hello', -1);    // -1\r\necho \"\\n\";\r\n\r\n\r\nfunction printme($a)\r\n{\r\nforeach ($a as $k => $v) echo \"[$k] => $v\\n\";\r\n}\r\n\r\n// With multiple arrays, min compares from left to right\r\n// so in our example: 2 == 2, but 4 < 5\r\n$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)\r\nprintme($val);\r\necho \"\\n\\n\";\r\n\r\n// If both an array and non-array are given, the array\r\n// is never returned as it's considered the largest\r\necho $val = min('string', array(2, 5, 7), 42);   // string\r\necho \"\\n\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/modulo_warn.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n$a = 10; \r\n$b = 0;\r\n$c = ($a%$b);\r\n\r\necho \"Result:\";\r\nvar_dump($c);\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/octdec.php",
    "content": "[expect php]\r\n[file]\r\n\r\n\r\n<?php\r\n\r\necho octdec('27777777777') . \"\\n\";\r\necho octdec('17777777777') . \"\\n\";\r\necho octdec('77') . \"\\n\";\r\necho octdec(decoct(45));\r\n\r\n?>  \r\n \r\n\r\n"
  },
  {
    "path": "Testing/Tests/Math/pow.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\nfunction dump($n)\r\n{\r\n if (is_float($n)) echo \"double: \";\r\n else if (is_int($n)) echo \"Int: \";\r\n else echo \"???: \";\r\n echo round($n,5) . \"\\n\";\r\n}\r\n\r\ndump(pow(2, 8)); // int(256)\r\n//dump(pow(10, 12)); // double(1000000000000)\r\ndump(pow(15, 7));\r\n\r\ndump(pow(-1, 20)); // 1\r\ndump(pow(0, 0)); // 1\r\n\r\necho is_infinite(pow(0, -5.5)) ? \"INF\":\"NUMBER\"; // error\r\necho is_infinite(pow(0, 5.5)) ? \"INF\":\"NUMBER\"; // error\r\necho is_nan(pow(-1, 5.5)) ? \"NaN\":\"NUMBER\"; // error\r\n\r\ndump(pow(2, -5.5)); // 0.0221\r\ndump(pow(2, -5)); // 0.3125\r\n\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/rad2deg.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho rad2deg(M_PI_4); // 45\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/round.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho round(3.4);         // 3\r\necho \"\\n\";\r\necho round(3.5);         // 4\r\necho \"\\n\";\r\necho round(3.6);         // 4\r\necho \"\\n\";\r\necho round(3.6, 0);      // 4\r\necho \"\\n\";\r\necho round(1.95583, 2);  // 1.96\r\necho \"\\n\";\r\necho round(1241757, -3); // 1242000\r\necho \"\\n\";\r\necho round(5.045, 2);    // 5.05\r\necho \"\\n\";\r\necho round(5.055, 2);    // 5.06\r\necho \"\\n\";\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/sin.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// Precision depends on your precision directive\r\necho round(sin(deg2rad(60)), 6);  //  0.866025403 ...\r\necho \"\\n\";\r\necho round(sin(60), 6);           // -0.304810621 ...\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/sqrt.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n// Precision depends on your precision directive\r\necho round(sqrt(9), 6); \r\necho \"\\n\";\r\necho round(sqrt(10), 6); \r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/tan.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\necho round(tan(M_PI_2-1),5); // 1\r\necho \"\\n\";\r\necho substr(round(tan(M_PI_2),5), 0, 4) . \"...E...\"; // 1\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Math/uniqid.php",
    "content": "[expect] prefix1\r\n[expect] prefix2\r\n\r\n[file]\r\n\r\n\r\n<?php\r\n\r\n// no prefix\r\necho uniqid(\"\") . \";\";\r\n//echo uniqid() . \";\";\r\necho uniqid(\"prefix1\") . \";\";\r\necho uniqid(\"prefix2\", true) . \";\";\r\necho lcg_value();\r\n?> "
  },
  {
    "path": "Testing/Tests/Misc/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/calendar_extension.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho frenchtojd(-1,-1,-1), \"\\n\";\r\necho frenchtojd(0,0,0), \"\\n\";\r\necho frenchtojd(1,1,1), \"\\n\";\r\necho frenchtojd(14,31,15), \"\\n\";\r\necho easter_days(1999), \"\\n\";\r\necho easter_days(1492), \"\\n\";\r\necho easter_days(1913), \"\\n\";\r\n$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); \r\necho \"There are $num days in August 2003\\n\";\r\n$num = cal_days_in_month(CAL_GREGORIAN, 2, 2003); \r\necho \"There are $num days in February 2003\\n\";\r\n$num = cal_days_in_month(CAL_GREGORIAN, 2, 2004); \r\necho \"There are $num days in February 2004\\n\";\r\n$num = cal_days_in_month(CAL_GREGORIAN, 12, 2034); \r\necho \"There are $num days in December 2034\\n\";\r\necho cal_to_jd(CAL_GREGORIAN, 8, 26, 74), \"\\n\";\r\necho cal_to_jd(CAL_JULIAN, 8, 26, 74), \"\\n\";\r\necho cal_to_jd(CAL_JEWISH, 8, 26, 74), \"\\n\";\r\necho cal_to_jd(CAL_FRENCH, 8, 26, 74), \"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002))),\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002),true)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM_GERESH)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_ALAFIM_GERESH+CAL_JEWISH_ADD_ALAFIM)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,28,2002),true, CAL_JEWISH_ADD_GERESHAYIM)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM_GERESH)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM)).\"\\n\";\r\necho bin2hex(jdtojewish(gregoriantojd(10,8,2002),true, CAL_JEWISH_ADD_GERESHAYIM+CAL_JEWISH_ADD_ALAFIM+CAL_JEWISH_ADD_ALAFIM_GERESH)).\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/dir_read.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction foo()\r\n{\r\n\t$dir = dir(\".\");\r\n\twhile ( $file = $dir->read() !== FALSE) {\t// test for [CastToFalse] in Directory::read() method\r\n\t\techo \"$file\\n\";\r\n\t}\r\n\t$dir->close();\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/fgetcsv #27492.php",
    "content": "[expect php]\r\n[file]\r\n<?php\n\nfunction test($fname, $enclosure = '\"')\n{\n\techo \"\\n>> {$fname}, enclosure {$enclosure}\\n\\n\";\n\t$csvFile = fopen(dirname(__FILE__).\"/\".$fname, 'r');\n\tif ($csvFile !== false) {\n\t\twhile (($csvLine = fgetcsv($csvFile, 0, \",\",$enclosure)) !== false) {\n\t\t\tif ($csvLine == null)\treturn;\t// invalid stream handle\n\t\t\techo \"\\n\";\n\t\t\tforeach ($csvLine as $index => $value)\n\t\t\t\techo \"[{$index}] = \\\"{$value}\\\"\\n\";\n\t\t\t\n\t\t}\n\t}\n\tfclose($csvFile);\n}\n\ntest('test1.csv');\ntest('test2.csv');\ntest('test3.csv');\ntest('test4.csv');\ntest('test4.csv',\"'\");\n\n?>"
  },
  {
    "path": "Testing/Tests/Misc/hash functions #26667.php",
    "content": "[expect php]\r\n[file]\r\n<?php\n\nfunction test_hash($algo, $init)\n{\n\techo \"\\n$algo, incremental: \";\n\t$h = hash_init($algo);\r\n\tfor($i=0;$i<10;++$i) hash_update($h, '' . $init*2 + $i*17);\r\n\techo '(copying state) ';\r\n\t$h2 = hash_copy($h);\r\n\tfor($i=0;$i<10;++$i) hash_update($h, '' . $init*2 + $i*19);\r\n\tvar_dump(hash_final($h));\n\t\n\techo \"\\n$algo, from copied state: \";\n\tvar_dump(hash_final($h2));\n\t\n\techo \"\\n$algo, HMAC, incremental: \";\n\t$h = hash_init($algo, HASH_HMAC, 'HMAC key. It can be very long, but in this case it will be rehashed to fit the block size of the hashing algorithm...'.$init*147);\r\n\tfor($i=0;$i<10;++$i) hash_update($h, '' . $init*4 + $i*7);\r\n\t//echo '(copying state) ';\r\n\t//$h2 = hash_copy($h);// causes PHP crashes sometimes, reported as PHP Bug #52240\r\n\tfor($i=0;$i<10;++$i) hash_update($h, '' . $init*3 + $i*11);\r\n\tvar_dump(hash_final($h));\n\t\n\t//echo \"\\n$algo, HMAC, from copied state: \";\n\t//var_dump(hash_final($h2));// BUG IN PHP, HMAC key is not copied, but only referenced ... hash_final on $h clears the HMAC key in $h2 too...  reported as PHP Bug #52240\n\t\t\n\techo \"\\n$algo, at once, short data: \";\n\tvar_dump(hash($algo, 'some string to be hashed ... ' . $init * 123 . ' ...'));\n\t\n\techo \"\\n$algo, at once, HMAC: \";\n\tvar_dump(hash_hmac($algo, 'some string to be hashed ... ' . $init * 123 . ' ...', 'HMAC key. It can be very long, but in this case it will be rehashed to fit the block size of the hashing algorithm.'));\n}\n\n// fixed // http://bugs.php.net/bug.php?id=52240 // PHP Bug, see for future updates of this test\n\ntest_hash('adler32', 12345678);\ntest_hash('crc32', 2345678);\ntest_hash('crc32b', 345678);\ntest_hash('md2', 45678);\ntest_hash('md4', 5678);\ntest_hash('md5', 678);\ntest_hash('sha1', 111222);\r\ntest_hash('sha256', 64983042165);\n// add more tests as other hashing algorithms will be implemented\n\n?>"
  },
  {
    "path": "Testing/Tests/Misc/ini_parse.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\tfunction dump($a)\r\n\t{\r\n\t\tforeach ($a as $key => $val)\r\n\t\t{\r\n\t\t\techo \"$key => \";\r\n\t\t\tif (is_array($val))\r\n\t\t\t{\r\n\t\t\t\techo \"\\n\";\r\n\t\t\t\tforeach ($val as $key2 => $val2)\r\n\t\t\t\t{\r\n\t\t\t\t\techo \"  $key2 => $val2\\n\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse echo \"$val\\n\";\r\n\t\t}\r\n\t}\r\n\r\n\tdefine(\"USER_CONSTANT\", 123);\r\n\r\n\tchdir(dirname(__FILE__));\r\n\tdump(parse_ini_file(\"sample.ini\", false));\r\n\tdump(parse_ini_file(\"sample.ini\", true));\r\n\t\r\n\tdump(parse_ini_string(\"\r\n\t[sec1]\r\n\tx=1\r\n\ty=2\r\n\t[sec2]\r\n\tano=Yes\r\n\tne=No\r\n\t[sec3]\r\n\tmultiline=\\\"\r\n\t\tline1\r\n\t\tline2\r\n\t\tline3\\\"\r\n\t\",false))\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Misc/json #27838.php",
    "content": "﻿[expect php]\r\n[file]\r\n<?php\n\nfunction test($obj, $opt = 0)\r\n{\r\n\tvar_dump($obj);\r\n\techo \"\\n\".( $x = json_encode($obj, $opt) ) . \"\\n\";\r\n\tvar_dump( json_decode($x, true) );\r\n}\r\n\r\ntest(\"string value with several special characters \\\"<>&'\\\"\");\r\ntest(array(1,2,3,4,array(1,2,'x'=>'y')));\r\ntest(array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5));\r\n\r\n// examples from http://www.php.net/manual/en/function.json-encode.php\r\n\r\n$a = array('<foo>',\"'bar'\",'\"baz\"','&blong&');\r\n\r\necho \"Normal: \", json_encode($a), \"\\n\";\r\necho \"Tags: \",   json_encode($a,JSON_HEX_TAG), \"\\n\";\r\necho \"Apos: \",   json_encode($a,JSON_HEX_APOS), \"\\n\";\r\necho \"Quot: \",   json_encode($a,JSON_HEX_QUOT), \"\\n\";\r\necho \"Amp: \",    json_encode($a,JSON_HEX_AMP), \"\\n\";\r\necho \"All: \",    json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP), \"\\n\\n\";\r\n\r\n$b = array();\r\n\r\necho \"Empty array output as array: \", json_encode($b), \"\\n\";\r\necho \"Empty array output as object: \", json_encode($b, JSON_FORCE_OBJECT), \"\\n\\n\";\r\n\r\n$c = array(array(1,2,3));\r\n\r\necho \"Non-associative array output as array: \", json_encode($c), \"\\n\";\r\necho \"Non-associative array output as object: \", json_encode($c, JSON_FORCE_OBJECT), \"\\n\\n\";\r\n\n// TODO: unicode has to be tested\n\n?>"
  },
  {
    "path": "Testing/Tests/Misc/lexer.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction display_tokens($tokens)\r\n{\r\n  foreach ($tokens as $token)\r\n  { \r\n    if (is_array($token))\r\n    {\r\n      echo token_name($token[0]),\"\\n\";\r\n      echo $token[0],\" '\",htmlentities(addcslashes($token[1],\"\\n\\r\\t\")),\"'\\n\";\r\n    }\r\n    else\r\n    {\r\n      echo \"    '\",htmlentities($token),\"'\\n\";\r\n    }  \r\n  }\r\n}\r\n\r\n$code = '\r\n<? \r\n\r\nfinal class A \r\n{ \r\n  function __get($x) \r\n  { \r\n    $x = <<<EOOOOOOOOOOOOOOT\r\n         <<<hello\r\nEOOOOOOOOOOOOOOt;\r\nEOOOOOOOOOOOOOT;\r\nEOOOOOOOOOOOOOOT;\r\n\r\n    $$y = array (1,100000000000000,999999999999999999999999999999999,true,false);\r\n    ${\"x${${\"xxx\"}}x\"} = 1;\r\n    ${\"x${${\"x$x->$$$x0xx\"}}x\"} = 1;\r\n  } \r\n}\r\n\r\n?>';\r\n\r\ndisplay_tokens(token_get_all($code));\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/locale.php",
    "content": "[expect exact]\r\nstring(1) \"C\"\r\ndouble(1.54)\r\ndouble(Infinity)\r\n654564.145400\r\nSat Saturday Apr April\r\n--------------\r\nstring(19) \"Danish_Denmark.1252\"\r\ndouble(1.54)\r\ndouble(Infinity)\r\n654564,145400\r\nlo lordag apr april\r\n--------------\r\nstring(25) \"Czech_Czech Republic.1250\"\r\ndouble(1.54)\r\ndouble(Infinity)\r\n654564,145400\r\nso sobota IV duben\r\n--------------\r\n[file]\r\n<?\r\n  date_default_timezone_set(\"Europe/Prague\");\r\n  foreach (array(\"\",\"da-DK\",\"cs-CZ\") as $v)\r\n  {\r\n    var_dump(setlocale(LC_ALL,$v));\r\n    var_dump(1.54,INF);\r\n    printf(\"%f\\n\",654564.1454);\r\n    echo strftime(\"%a %A %b %B\",482194654),\"\\n\";\r\n    echo \"--------------\\n\";\r\n  } \r\n?>  \r\n"
  },
  {
    "path": "Testing/Tests/Misc/output2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nob_start();\r\n\r\necho \"hello\";\r\n\r\n$x = ob_get_contents();\r\n\r\nob_end_clean();\r\n\r\necho \"Content: $x\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/sample.ini",
    "content": "first=outofsection\r\n\r\n; comment\r\n  ; indented comment\r\n\r\n[section]\r\n  [indented section]\r\n\r\n[ section with whitespaces ]  \r\n\r\n[s1]\r\ncrash=NO\r\nbugs=NONE\r\n one runtime to rule them all = CLR\r\nano=yEs\r\n\r\nthread_count = 12\r\nerror_reporting = (E_ALL | E_NOTICE) & ~E_ERROR\r\nprecedence1 = 1 & 3 | 5\r\nprecedence2 = 5 | 3 & 1\r\nprecedence3 = (1 & 3) | 5\r\nprecedence4 = 1 & (3 | 5)\r\nprecedence5 = (5 | 3) & 1\r\nprecedence6 = 5 | (3 & 1)\r\n\r\n[s2]\r\nquoted1=\"a | b & c\"\r\nquoted2=\"hello\r\nworld\"\r\nquoted3=\"to be\r\nor not\r\nto be\"\r\n\r\n[s3]\r\nsystem = TRUE\r\nuser = USER_CONSTANT\r\nbad = NO_SUCH_CONSTANT\r\n\r\n[s4]\r\nneg = ~0\r\n"
  },
  {
    "path": "Testing/Tests/Misc/stack_trace.inc",
    "content": "<?\r\n\r\nfunction i()\r\n{\r\n  $x = \"j\";\r\n  $x();\r\n}\r\n\r\nfunction j()\r\n{\r\n  $a = debug_backtrace();\r\n  $b = array();\r\n  foreach ($a as $frame)\r\n  {\r\n    $frame[\"file\"] = substr($frame[\"file\"],strrpos($frame[\"file\"],\"\\\\\")+1);\r\n    $b[] = $frame;\r\n  }\r\n  print_r($b);\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/stack_trace.php",
    "content": "[expect]\r\narray\r\n(\r\n  [0] => array\r\n  (\r\n    [line] => 6\r\n    [column] => 3\r\n    [file] => stack_trace.inc\r\n    [function] => j\r\n  )\r\n  [1] => array\r\n  (\r\n    [line] => 4\r\n    [column] => 3\r\n    [file] => __input.txt inside eval (on line 11, column 1)\r\n    [function] => i\r\n  )\r\n  [2] => array\r\n  (\r\n    [line] => 4\r\n    [column] => 27\r\n    [file] => __input.txt\r\n    [function] => h\r\n  )\r\n  [3] => array\r\n  (\r\n    [line] => 4\r\n    [column] => 27\r\n    [file] => __input.txt\r\n    [function] => array_map\r\n  )\r\n  [4] => array\r\n  (\r\n    [line] => 18\r\n    [column] => 1\r\n    [file] => __input.txt\r\n    [function] => InlinedLambda\r\n  )\r\n  [5] => array\r\n  (\r\n    [line] => 18\r\n    [column] => 1\r\n    [file] => __input.txt\r\n    [function] => f\r\n  )\r\n)\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n  $g = create_function('','array_map(\"h\",array(1));');\r\n\r\n  $g();\r\n}\r\n\r\ninclude(\"stack_trace.inc\");\r\n\r\neval('\r\nfunction h()\r\n{\r\n  i();            // BUG: eval(i());\r\n}\r\n');\r\n\r\nf();\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/str_getcsv #26691.php",
    "content": "[expect php]\r\n[file]\r\n<?php\n\nfunction test($fname, $enclosure = '\"')\n{\n\techo \"\\n>> {$fname}, enclosure {$enclosure}\\n\\n\";\n\t$csvData = file_get_contents(dirname(__FILE__).\"/\".$fname);\n\t$csvLine = str_getcsv($csvData, \",\",$enclosure);\n\t\tforeach ($csvLine as $index => $value)\n\t\t\techo \"[{$index}] = \\\"{$value}\\\"\\n\";\n\t\t\t\n}\n\ntest('test1.csv');\ntest('test2.csv');\ntest('test3.csv');\ntest('test4.csv');\ntest('test4.csv',\"'\");\n\nvar_dump(str_getcsv(null));\nvar_dump(str_getcsv(\"\"));\nvar_dump(str_getcsv(\",\"));\n\n?>"
  },
  {
    "path": "Testing/Tests/Misc/test1.csv",
    "content": "a,b,c\n\"1\",\"2\",\"3\"\n\"1\",\"2\",\"3\""
  },
  {
    "path": "Testing/Tests/Misc/test2.csv",
    "content": "a, b ,c\n\"1\",\"2\",\"3\"\n\"1\",\"2\",\"3\"\n\n\"1\",\"2\",'3',\"four\",\"\\\"hello\\\"\",\"\\\\world\\\\\", \\\"bye\"\n\"super \"\"cool\"\" car\",\nsuper \"cool\" car \"\" x, y\"z\none, ,three, \"enclosed\"and not enclosed and \"enclosed\"\n,two,\"3\",\twith tab prefixed, \"\"x\n\"enclosed but not closed\n"
  },
  {
    "path": "Testing/Tests/Misc/test3.csv",
    "content": "\"multi line\nelement,here..\n..\",\"second\nmultiline\nelement\""
  },
  {
    "path": "Testing/Tests/Misc/test4.csv",
    "content": "\"1\",\"2\",\"3\"\r\n\"1\",'2',\\3\\"
  },
  {
    "path": "Testing/Tests/Misc/tokens.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$consts = get_defined_constants();\r\n$tokens = array();\r\nforeach ($consts as $name => $value)\r\n  if ($name[0] == \"T\" && $name[1] == \"_\")\r\n    $tokens[$name] = $value;\r\n    \r\nasort($tokens);    \r\nforeach ($tokens as $name => $value)\r\n  echo \"$name = $value,\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Misc/user_error_handlers.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  function h($errno, $errstr, $errfile, $errline)\r\n  {\r\n    echo \"ERROR h\\n\";\r\n  }\r\n  \r\n  function g($errno, $errstr, $errfile, $errline)\r\n  {\r\n    echo \"ERROR g\\n\";\r\n  }\r\n\r\n  function j($errno, $errstr, $errfile, $errline)\r\n  {\r\n    echo \"ERROR j\\n\";\r\n  }\r\n  \r\n  restore_error_handler();\r\n\tset_error_handler(\"h\");\r\n  set_error_handler(\"g\");\r\n  restore_error_handler();\r\n\tset_error_handler(\"h\");\r\n  set_error_handler(\"j\");\r\n  restore_error_handler();\r\n\tset_error_handler(\"h\");\r\n  restore_error_handler();\r\n\tset_error_handler(\"j\");\r\n  restore_error_handler();\r\n\techo set_error_handler(\"j\"),\"\\n\";\r\n\tarray_fill(-1,-1,-1);\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/__invoke.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nfunction foo($x)\r\n{\r\n    echo __FUNCTION__ . \"($x)\\n\";\r\n}\r\n\r\nclass A\r\n{\r\n    private function __invoke($x)\r\n    {\r\n        echo __METHOD__ . \"($x)\\n\";\r\n    }\r\n}\r\n\r\nclass B\r\n{\r\n    public function __invoke($x)\r\n    {\r\n        echo __METHOD__ . \"($x)\\n\";\r\n    }\r\n}\r\n\r\nclass C\r\n{\r\n    function __toString()\r\n    {\r\n        return \"foo\";\r\n    }\r\n}\r\n\r\nclass D\r\n{\r\n    function __toString()\r\n    {\r\n        return \"bar\";\r\n    }\r\n}\r\n\r\nclass E extends A\r\n{\r\n\t\r\n}\r\n\r\nforeach(array(\"A\",\"B\",\"C\",\"D\",\"E\") as $c)\r\n{\r\n    $obj = new $c;\r\n    $name = null;\r\n    \r\n\techo \"\\n{new $c}(123):\\n\";\r\n    if (is_callable($obj)) $obj(123);\r\n\telse echo \"-\";\r\n    \t\r\n    echo \"\\nis_callable(new $c):\\n\";\r\n    var_dump(is_callable($obj, true, $name));\r\n    var_dump($name);\r\n\r\n    var_dump(is_callable($obj, false, $name));\r\n    var_dump($name);\r\n        \r\n    echo \"\\nis_callable(array($c,'__invoke')):\\n\";\r\n    var_dump(is_callable(array($c,\"__invoke\"), true, $name));\r\n    var_dump($name);\r\n\r\n    var_dump(is_callable(array($c,\"__invoke\"), false, $name));\r\n    var_dump($name);\r\n\r\n    echo \"\\nis_callable(array($c,'something_non_existing')):\\n\";\r\n    var_dump(is_callable(array($c,\"something_non_existing\"),true,$name));\r\n    var_dump($name);\r\n\r\n    var_dump(is_callable(array($c,\"something_non_existing\"),false,$name));\r\n    var_dump($name);\r\n\r\n\tif ($c != 'C' && $c != 'D')\r\n\t{\r\n\t\techo \"\\narray_walk( array(1), new $c ):\\n\";\r\n\t\t$x = array(1);\r\n\t\tarray_walk( $x, $obj );\r\n\t}\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/__tostringbug.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X{}\r\n\r\n$b = new X;\r\n\r\n$x =\"<$b>\";\r\n \r\n\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/accessing property line number #26052.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\nclass foo\r\n{\r\n    function foo() {\r\n    }\r\n}\r\n\r\nclass TestClass {\r\n   static $id = 0;\r\n\r\n   function TestClass () {\r\n        $this->id = 10;\r\n\r\n\r\n\t$neco = new foo();\r\n\t$neco->jo = $this;\r\n\t$neco->jo->id = 4;\r\n\r\n\r\n\t$prom = \"id\";\r\n\t$this->$prom = 5;\r\n   }\r\n}\r\n\r\n$c = new TestClass ();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/conditional1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n\tif ($a == $b)\r\n\t{\r\n\tclass X\r\n\t{\r\n\tfunction X($a)\r\n\t{ echo 1; }\r\n\t}\r\n\t}\r\n\r\n\t$x = new X(1);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Objects/conditional2.php",
    "content": "[expect exact] AB\r\n\r\n[file]\r\n<?\r\nclass B \r\n{ \r\n  static function f() \r\n  { echo \"B\"; } \r\n}\r\n\r\nclass A extends B \r\n{ \r\n  static function f() \r\n  { \r\n    echo \"A\"; \r\n    eval('parent::f();'); \r\n  } \r\n}\r\n\r\nA::f();\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Objects/conditional_base_class.php",
    "content": "[expect]\r\nOK\r\n[file]\r\n<?\r\n$c = true;\r\n\r\nif ($c)\r\n{\r\n  class A { }\r\n  \r\n  class B extends A { }\r\n  \r\n  class C extends B { }  \r\n}\r\n\r\necho \"OK\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/constant_test.php",
    "content": "[expect exact] 3.14 2.71 3.14 2.71\r\n\r\n[file]\r\n<?\r\n\tinterface ILudolf\r\n\t{\r\n\t\tconst pi = 3.14;\r\n\t};\r\n\t\r\n\tinterface IEuler\r\n\t{\r\n\t\tconst e = 2.71;\r\n\t};\r\n\t\r\n\tclass Math implements ILudolf, IEuler\r\n\t{\r\n\t};\r\n\t\r\n\techo ILudolf::pi;\r\n\techo ' ';\r\n\techo IEuler::e;\r\n\techo ' ';\r\n\techo Math::pi;\r\n\techo ' ';\r\n\techo Math::e;\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/convobjtoany.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo{\r\n\r\n}\r\n\r\nclass Bar{\r\n\tvar $x = 1;\r\n}\r\n\r\n$x = new Foo();\r\n$y = new Bar();\r\n\r\n//bool\r\n\r\n\r\nif ($x) \r\n\techo \"x instantied, \";\r\nelse\r\n\techo \"x empty, \";\r\n\t\r\n\r\nif ($y) \r\n\techo \"y instantied\";\r\nelse\r\n\techo \"y empty\";\r\n\r\n\techo \"\\n\";\r\n\t\r\n//int\r\n var_dump( (int)$x);\r\n var_dump( (int)$y);\r\n \r\n\r\n\techo \"\\n\";\r\n//double\r\n\r\n var_dump( (double)$x);\r\n var_dump( (double)$y);\r\n\r\n\techo \"\\n\";\r\n\r\n//string at convobjtostr.php\r\n\r\n\t\r\n//array\r\n\r\n var_dump((array)$x);\r\n var_dump((array)$y);\r\n \r\n\techo \"\\n\";\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/convobjtostr.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo{\r\n\r\n}\r\n\r\nclass Bar{\r\n\tvar $x = 1;\r\n\t\r\n\tfunction __toString()\r\n\t{\r\n\t  return \"b\";\r\n\t}\r\n}\r\n//string\r\n\r\n var_dump((string)$x);\r\n var_dump((string)$y);\r\n \r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/evaled_parent.php",
    "content": "[expect] 1\r\n\r\n[file]\r\n<?\r\nif ($a == $b)\r\n{\r\nclass X\r\n{\r\nstatic function f($a)\r\n{ echo 1; }\r\n}\r\n}\r\n\r\nX::f(1);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Objects/field_inheritance1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tprivate $a = 0;\r\n\tprotected $b = 0;\r\n\tpublic $c = 0;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n\t\r\n\tfunction bar()\r\n\t{\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tprivate $a = 1;\r\n\t//private $b = 1;\r\n\t//private $c = 1;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n \r\n$x = new A;\r\n$x->foo();\r\n \r\n$x = new B;\r\n$x->foo();\r\n$x->bar();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/field_inheritance2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tprivate $a = 0;\r\n\tprotected $b = 0;\r\n\tpublic $c = 0;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n\t\r\n\tfunction bar()\r\n\t{\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tprotected $a = 1;\r\n\tprotected $b = 1;\r\n\t//private $c = 1;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n  \r\n$x = new A;\r\n$x->foo();\r\n\r\n$x = new B;\r\n$x->foo();\r\n$x->bar();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/field_inheritance3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tprivate $a = 0;\r\n\tprotected $b = 0;\r\n\tpublic $c = 0;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n\t\r\n\tfunction bar()\r\n\t{\r\n\t\techo __METHOD__ . \"\\n\";\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tpublic $a = 1;\r\n\tpublic $b = 1;\r\n\tpublic $c = 1;\r\n\t\r\n\tfunction foo()\r\n\t{\r\n\t\tvar_dump($this->a, $this->b, $this->c);\r\n\t}\r\n }\r\n  \r\n$x = new A;\r\n$x->foo();\r\n\r\n$x = new B;\r\n$x->foo();\r\n$x->bar();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/getter_setter_bug28444.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\t// always run against >= 5.0.4 because that is the version where\r\n\t// getter/setter behavior was somewhat changed\r\n\r\n\tclass Object {\r\n\t\tpublic $x;\r\n\t\tfunction __construct($x) {\r\n\t\t\t$this->x = $x;\r\n\t\t}\r\n\t}\r\n\r\n\tclass Overloaded {\r\n\t\tvar $props;\r\n\t\tfunction __construct($x) {\r\n\t\t\t$this->x = new Object($x);\r\n\t\t}\r\n\t\tfunction __get($prop) {\r\n\t\t\treturn $this->props[$prop];\r\n\t\t}\r\n\t\tfunction __set($prop, $val) {\r\n\t\t\t$this->props[$prop] = $val;\r\n\t\t}\r\n\t}\r\n\t$y = new Overloaded(2);\r\n\r\n\techo $y->x->x, \" \"; // Prints 2...\r\n\techo $y->x->x = 3; //Should print 3...\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Objects/instanceof.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction __autoload($class)\r\n{\r\n  echo \"AUTOLOAD $class\\n\";\r\n}\r\n\r\n$a = null;\r\n\r\necho is_subclass_of($a,\"B\") ? \"yes\" : \"no\",\"\\n\";\r\necho @($a instanceof A) ? \"yes\" : \"no\",\"\\n\";        // reports error\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/new_via_unknown_ctor.php",
    "content": "[expect]\r\nOK\r\n[file]\r\n<?\r\neval('class A { function A(&$x) { } }');\r\n\r\nclass B extends A { }\r\n\r\n$mh = 1;\r\nnew B($mh);\r\n\r\necho \"OK\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/object_creation_test.php",
    "content": "[expect] 2141\r\n\r\n[file]\r\n<?\r\n\tclass Class1\r\n\t{\r\n\t\tpublic function __construct()\r\n\t\t{\r\n\t\t\techo 2;\r\n\t\t}\r\n\t\t\r\n\t\tpublic function Class1()\r\n\t\t{\r\n\t\t\techo 3;\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tpublic function Class2()\r\n\t\t{\r\n\t\t\techo 4;\r\n\t\t}\r\n\r\n\t\tpublic function Class1()\r\n\t\t{\r\n\t\t\techo 5;\r\n\t\t}\r\n\t};\r\n\t\t\r\n\techo (new Class1() instanceof Class1);\r\n\techo (new Class2() instanceof Class1);\r\n//\techo (NULL instanceof HelloHowAreYouDoingMyNameIsSimon);\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/object_dump.php.skip",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tprivate $a = 0;\r\n\tprotected $b = 0;\r\n\tpublic $c = 0;\r\n\t\r\n\tprotected $f = 0;\r\n }\r\n\r\n class B extends A {\r\n \r\n\tpublic $a = 1;\r\n\tpublic $b = 1;\r\n\tpublic $c = 1;\r\n\t\r\n\tprivate $d = 1;\r\n\t\r\n\tprotected $e = 1;\r\n\t\r\n }\r\n  \r\n$x = new B;\r\nvar_dump($x);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/objop.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo{\r\n\r\n}\r\n\r\nclass Bar{\r\n\tvar $x = 1;\r\n}\r\n\r\n$x = new Foo();\r\n$y = new Bar();\r\n\r\nvar_dump(!$x);\r\nvar_dump(!$y);\r\n\r\nvar_dump(-$x);\r\nvar_dump(-$y);\r\n\r\nvar_dump(+$x);\r\nvar_dump(+$y);\r\n\r\n// Phalanger doesn't want to support this\r\n// var_dump($x++);\r\n// var_dump($y++);\r\n// var_dump(++$x);\r\n// var_dump(++$y);\r\n\r\n\r\nvar_dump( $x + 1);\r\nvar_dump( $y + 1);\r\n\r\nvar_dump( $x + 1.1);\r\nvar_dump( $y + 1.1);\r\n\r\nvar_dump( $x + $y);\r\n\r\n\r\n\r\nvar_dump( $x - 1);\r\nvar_dump( $y - 1);\r\n\r\nvar_dump( $x - 1.1);\r\nvar_dump( $y - 1.1);\r\n\r\nvar_dump( $x - $y);\r\n\r\nvar_dump( $x * 1);\r\nvar_dump( $y * 1);\r\n\r\nvar_dump( $x * 1.1);\r\nvar_dump( $y * 1.1);\r\n\r\nvar_dump( $x * $y);\r\n\r\n// var_dump( $x / 1);\r\n// var_dump( $y / 1);\r\n\r\n// var_dump( $x / 1.1);\r\n// var_dump( $y / 1.1);\r\n\r\n// var_dump( $x / $y);\r\n\r\n// var_dump( $x % 1);\r\n// var_dump( $y % 1);\r\n\r\n// var_dump( $x % 1.1);\r\n// var_dump( $y % 1.1);\r\n\r\n// var_dump( $x % $y);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/objopstr.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass Foo{\r\n\r\n}\r\n\r\nclass Bar{\r\n\tvar $x = 1;\r\n\t\r\n\tfunction __toString()\r\n\t{\r\n\t  return \"b\";\r\n\t}\r\n}\r\n\r\n$x = new Foo();\r\n$y = new Bar();\r\n\r\n\r\n var_dump( $x + \" - \");\r\n var_dump( $y + \" - \");\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/overrides #1285.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n\tinterface I\r\n\t{\r\n\t\tfunction foo($a);\t\t\r\n\t}\r\n\r\n\tfunction test(I $x)\r\n\t{\r\n\t\t$x->foo(0);\r\n\t\t$x->foo(0, 1);\r\n\t\t$x->foo(0, 1, 2);\r\n\t}\r\n\t\r\n\tclass A implements I\r\n\t{\r\n\t\tfunction FOO($a, $b = 'B')\r\n\t\t{\r\n\t\t\techo \"\\nA - \".$a.$b;\r\n\t\t}\r\n\t}\r\n\t\r\n\tclass B extends A\r\n\t{\r\n\t\tfunction Foo($a, $b = 'B', $c = 'C')\r\n\t\t{\r\n\t\t\techo \"\\nB - \".$a.$b.$c;\r\n\t\t}\r\n\t}\r\n\t\r\n\tclass X\r\n\t{\r\n\t\tfunction fOO($a, $b = 'B', $c = 'C')\r\n\t\t{\r\n\t\t\techo \"\\nX - \".$a.$b.$c;\r\n\t\t}\r\n\t}\r\n\t\r\n\tclass C extends X implements I\r\n\t{\r\n\t\r\n\t}\r\n\t\r\n\tclass D extends C\r\n\t{\r\n\t\tfunction fOO($a, $b = 'B', $c = 'C', $d = 'D')\r\n\t\t{\r\n\t\t\techo \"\\nD - \".$a.$b.$c.$d;\r\n\t\t}\r\n\t}\r\n\t\r\n\ttest(new A);\r\n\ttest(new B);\r\n\ttest(new C);\r\n\ttest(new D);\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_field_inheritance1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tstatic private $a = 0;\r\n\tstatic protected $b = 0;\r\n\tstatic public $c = 0;\r\n\t\r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tstatic private $a = 1;\r\n\t//static private $b = 1;\r\n\t//static private $c = 1;\t// err\r\n \r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n \r\nA::foo();\r\nB::foo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_field_inheritance2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tstatic private $a = 0;\r\n\tstatic protected $b = 0;\r\n\tstatic public $c = 0;\r\n\t\r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tstatic protected $a = 1;\r\n\tstatic protected $b = 1;\r\n\t//static protected $c = 1;\t// err\r\n \r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n \r\nA::foo();\r\nB::foo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_field_inheritance3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass A {\r\n\t\r\n\tstatic private $a = 0;\r\n\tstatic protected $b = 0;\r\n\tstatic public $c = 0;\r\n\t\r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n\r\n class B extends A {\r\n \r\n\tstatic public $a = 1;\r\n\tstatic public $b = 1;\r\n\tstatic public $c = 1;\r\n \r\n\tstatic function foo()\r\n\t{\r\n\t\tvar_dump( self::$a );\r\n\t\tvar_dump( self::$b );\r\n\t\tvar_dump( self::$c );\r\n\t}\r\n }\r\n \r\nA::foo();\r\nB::foo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_field_test.php",
    "content": "[expect exact] 131\r\n\r\n[file]\r\n<?\r\n\tclass Class1\r\n\t{\r\n\t\tpublic static $x = 1;\r\n\t\tprotected static $y = 2;\r\n\t\tprivate static $z = 3;\r\n\t\t\t\t\r\n\t\tpublic static function Foo1()\r\n\t\t{\r\n\t\t\techo self::$z;\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tpublic static $y;\r\n\t\tprivate static $z;\r\n\t};\r\n\t\t\r\n\techo Class2::$x;\r\n\tClass1::Foo1();\r\n\techo Class1::${\"x\"};\r\n\t//echo Class2::$y;\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_inheritence.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\ninterface IEatable\r\n{\r\n\tstatic function IsGood($what);\r\n}\r\n \r\nclass Apple implements IEatable\r\n{\r\n\r\n\tpublic static function IsGood($what, $optionalArg = null)\r\n\t{\r\n\r\n\t}\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_method_test.php",
    "content": "[expect exact] 1A2BA2BAC\r\n\r\n[file]\r\n<?\r\n\tinterface IFace\r\n\t{\r\n\t\tstatic function StaticFun();\r\n\t};\r\n\r\n\tclass Class1 implements IFace\r\n\t{\r\n\t\tprotected static function f()\r\n\t\t{\r\n\t\t\techo 'A';\r\n\t\t}\r\n\t\r\n\t\tpublic static function StaticFun()\r\n\t\t{\r\n\t\t\techo 1;\r\n\t\t\tself::f();\r\n\t\t}\r\n\t};\r\n\t\r\n\tclass Class2 extends Class1\r\n\t{\r\n\t\tprotected static function f()\r\n\t\t{\r\n\t\t\techo 'B';\r\n\t\t}\r\n\t\r\n\t\tpublic static function StaticFun()\r\n\t\t{\r\n\t\t\techo 2;\r\n\t\t\tself::f();\r\n\t\t\tparent::f();\r\n\t\t}\r\n\t};\r\n\r\n\tif (true)\r\n\t{\t\r\n\t\tclass Class3 extends Class2\r\n\t\t{\r\n\t\t\tpublic static function f()\r\n\t\t\t{\r\n\t\t\t\techo 'C';\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\t\r\n\tClass1::StaticFun();\r\n\tClass2::StaticFun();\r\n\tClass3::StaticFun();\r\n\tClass3::f();\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/static_object_vars.php",
    "content": "[expect exact]\r\narray(1) {\r\n  [\"y\"]=>\r\n  integer(2)\r\n}\r\narray(1) {\r\n  [\"y\"]=>\r\n  integer(2)\r\n}\r\narray(2) {\r\n  [\"y\"]=>\r\n  integer(2)\r\n  [\"x\"]=>\r\n  &integer(1)\r\n}\r\ny - 2\r\n[file]\r\n<?\r\n\r\nclass X\r\n{\r\n    static $x = 1;\r\n    var $y = 2;\r\n}\r\n$x = new X();\r\nvar_dump((array)$x);\r\nvar_dump(get_object_vars($x));\r\nvar_dump(get_class_vars(\"X\"));\r\n\r\nforeach ($x as $key => $value)\r\n echo \"$key - $value\\n\"\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/sys_class_const.php",
    "content": "[expect ct-error]\r\n\r\n[file]\r\n<?php\r\n\techo stdClass::huml;\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/Objects/this.php.error",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction f()\r\n{\r\n $this = 1;\r\n echo $this;\r\n $this->a = 1;\r\n echo $this->a;\r\n}\r\n\r\nclass A\r\n{\r\n\tvar $b;\r\n\tstatic function m()\r\n\t{\r\n\t\t$this = 1;\r\n\t\techo $this;\r\n\t\t$this->a = 1;\r\n\t\techo $this->a;\r\n\t\t$this->b = 1;\r\n\t\techo $this->b;\r\n\t}\r\n\t\r\n\tfunction n()\r\n\t{\r\n\t\t$this = 1;\r\n\t\techo $this;\r\n\t\t$this->a = 1;\r\n\t\techo $this->a;\r\n\t\t$this->b = 1;\r\n\t\techo $this->b;\r\n\t}\r\n}\r\n\r\n$this = 1;\r\n echo $this;\r\n $this->a = 1;\r\n echo $this->a; \r\n?>"
  },
  {
    "path": "Testing/Tests/Objects/this2.php",
    "content": "[exact php]\r\n[file]\r\n<?\r\n  include('Phalanger.inc');\r\n  class A\r\n  {\r\n    var $x;\r\n\r\n    function f()\r\n    {\r\n      $this->x->y = \"Master\";\r\n      $this->x[0] = \"Blaster\";\r\n      __var_dump($this);\r\n    }\r\n  }\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib\" />\r\n\t\t\t<add url=\"bin/CSharpLibrary.dll\" />\r\n\t\t\t<add url=\"bin/Lib.dll\" />\r\n\t\t\t<add url=\"bin/Test-il.dll\" />\r\n\t\t\t<add assembly=\"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n\t\t\t<!--<add assembly=\"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" /-->\r\n\t\t\t<add assembly=\"System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"PhpNetClassLibrary, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\" section=\"bcl\" />\r\n\t\t\t<add assembly=\"php_bcmath.mng, Version=2.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3\" section=\"bcmath\" />\r\n\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/AppLib.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib\" />\r\n\t\t\t<add assembly=\"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/CSharpLibrary.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{B466C784-9BC9-42DE-9C83-C962C9580402}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>CSharpLibrary</RootNamespace>\r\n    <AssemblyName>CSharpLibrary</AssemblyName>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Class1.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Class1.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace CS\r\n{\r\n\tpublic interface I1\r\n\t{\r\n\t\tvoid f1();\r\n\t}\r\n\r\n\tpublic interface I2 : I1\r\n\t{\r\n\t\tvoid f2();\r\n\t}\r\n\r\n\tpublic interface I3 : I1, I2\r\n\t{\r\n\t\tvoid f3();\r\n\t}\r\n\t\r\n\tpublic struct C\r\n\t{\r\n\t\tpublic C(int x)\r\n\t\t{\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tpublic struct D\r\n\t{\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/CustomAttributes.php",
    "content": "<?\r\n\timport namespace System:::Collections:::Generic;\r\n  import namespace System;\r\n  \r\n  [My(\"class\")]\r\n\tclass A<:[My(\"typeargX\")]X,Y:>\r\n\t{\r\n\t\tconst Hello = \"Hello\";\r\n\t\t\r\n\t\tfunction __construct()\r\n\t\t{\r\n\t\t\techo \"hello\";\t\r\n\t\t}\r\n\t\t\r\n\t\t[My(\"ftion\")]\r\n\t\tfunction [My(\"retval\")] &g<:U,[My(\"typeargV\")]V,W:>([Out,My(\"parameter\")] U &$x)\r\n\t\t{\r\n\t\t}\r\n\t\t\r\n\t\tfunction f<:A = System:::String,B = Y,C = int:>()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\t\r\n\t[AttributeUsage(AttributeTargets::All)]\r\n\tclass MyAttribute extends Attribute\r\n\t{\r\n\t\tfunction __construct($x)\r\n\t\t{\r\n\t\t} \r\n\t}\r\n\t\r\n\tclass Program\r\n\t{\r\n\t\tfunction Main()\r\n\t\t{\r\n\t\t}\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Evals1/Test1.php",
    "content": "<?\r\n\tinterface I\r\n\t{\r\n\t}\r\n\t\r\n\tclass C implements I\r\n\t{\r\n\t}\r\n\t\r\n\tclass Program\r\n\t{\r\n\t\tpublic static function Main()\r\n\t\t{\r\n\t\t\tob_start();\r\n\t\t\r\n\t\t\t$lib = new Library;\r\n\t\t\t$lib->f();\r\n\t\t\tvar_dump(new LibX);\r\n\r\n\t\t\t$x = 1;\r\n\r\n\t\t\tif ($x)\r\n\t\t\t{\r\n\t\t\t\tclass Q {} \r\n\t\t\t}\r\n\t\t\t\r\n\t\t\teval('\t\r\n\t\t\t\tclass P extends Q { }\r\n\t\t\t');\r\n\t\t\t\r\n\t\t\teval('\t\r\n\t\t\t\tclass A extends C { }\r\n\t\t\t\tclass D extends A { }\r\n\t\t\t\tclass E extends LibX { }\r\n\t\t\t');\r\n\t\t\t\r\n\t\t\tclass F extends P { }\r\n\t\t\t\r\n\t\t\tvar_dump(new Q, new P, new A, new D, new E, new F);\r\n   \t\t\r\n   \t\t$out = ob_get_contents();\r\n   \t\t\r\n   \t\tob_end_clean();\r\n   \t\t\r\n   \t\t$EXPECTED = \"object(LibX)(0) {\r\n}\r\nobject(Q)(0) {\r\n}\r\nobject(P)(0) {\r\n}\r\nobject(A)(0) {\r\n}\r\nobject(D)(0) {\r\n}\r\nobject(E)(0) {\r\n}\r\nobject(F)(0) {\r\n}\r\n\";\t\r\n   \t\techo $out == $EXPECTED ? \"OK\" : \"ERROR\", \"\\n\";\r\n\t\t}\r\n\t}\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Evals1/run.cmd",
    "content": "..\\..\\..\\..\\Deployment\\bin\\phpc /pure /target:exe Test1.php /r:bin/Lib.dll /nowarn:20,24 >NUL\r\npeverify bin\\Test1.exe /nologo\r\nbin\\Test1.exe\r\n\r\npause"
  },
  {
    "path": "Testing/Tests/PHP.NET/Exceptions/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n  <configSections>\r\n    <section name=\"phpNet\" type=\"PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71\" />\r\n  </configSections>\r\n\t<phpNet>\r\n\t\t<classLibrary>\r\n\t\t\t<add assembly=\"mscorlib\" />\r\n\t\t\t<add assembly=\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t\t<add assembly=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n\t\t</classLibrary>\r\n\t</phpNet>\r\n</configuration>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Exceptions/dynamic-stub-generator.php",
    "content": "<?\r\nimport namespace System;\r\nimport namespace System:::Windows:::Forms;\r\n\r\n$x = \"Ahojky\";\r\nConsole::WriteLine($x);\r\n\r\n$f = new Form();\r\nApplication::Run($f);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Exceptions/exceptions.php",
    "content": "<?\r\nimport namespace System;\r\nimport namespace System:::Windows:::Forms;\r\n\r\nif (1==1)\r\n{\r\n\tclass MyException extends Exception\r\n\t{\r\n\t\t // Redefine the exception so message isn't optional\r\n\t\t public function __construct($message, $code = 0) {\r\n\t\t\t\t // some code\r\n\t   \r\n\t\t\t\t // make sure everything is assigned properly\r\n\t\t\t\t parent::__construct($message, $code);\r\n\t\t }\r\n\r\n\t\t // custom string representation of object\r\n\t\t public function __toString() {\r\n\t\t\t\t return __CLASS__ . \": [{$this->code}]: {$this->message}\\n\";\r\n\t\t }\r\n\r\n\t\t public function customFunction() {\r\n\t\t\t\t echo \"A Custom function for this type of exception\\n\";\r\n\t\t }\r\n\t}\r\n}\r\n\r\ntry\r\n{\r\n\tthrow new MyException(\"My message.\");\r\n}\r\ncatch(Exception $e)\r\n{\r\n\techo \"PHP Exception: \".($e->getMessage());\r\n}\r\n\r\ntry\r\n{\r\n\tInt32::Parse(\"aa\");\r\n}\r\ncatch(System:::Exception $e)\r\n{\r\n\techo \"\\nCLR Exception: \".($e->Message);\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Exceptions/phalanger-exec.bat",
    "content": "..\\..\\..\\..\\Deployment\\bin\\phpc /lang:CLR exceptions.php\r\n@echo \"===PHALANGER===\"\r\n@bin\\exceptions.exe\r\n\r\npause"
  },
  {
    "path": "Testing/Tests/PHP.NET/Generics, New, InstanceOf.php",
    "content": "<?\r\n  import namespace System:::Collections:::Generic;\r\n  import namespace System;\r\n  \r\n  class B<:T = int:>\r\n  {\r\n  }\r\n  \r\n  class C<:A:>\r\n  {\r\n  }\r\n  \r\n  class Program\r\n\t{\r\n\t\tstatic function Main()\r\n\t\t{\r\n\t\t\tself::InstaceOfs<:string:>();\r\n\t\t}\r\n\t\t\r\n\t\tstatic function InstanceOfs<:T:>()\r\n\t\t{\r\n\t\t\techo \"---------\";\r\n\t\t\t\r\n\t\t\techo new int instanceof int;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T instanceof T;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T<:int:> instanceof T<:int:>;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new B<:T:> instanceof B<:T:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T<:T:> instanceof T<:T:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new C<:int:> instanceof C<:int:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new Unk instanceof Unk;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new Unk<:int, string, bool, double:> instanceof Unk<:int, string, bool, double:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new Unk1<:int, Unk2<:string:>:> instanceof Unk1<:int, Unk2<:string:>:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T<:Unk1:> instanceof T<:Unk1:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T<:int, T<:Unk:>:> instanceof T<:int, T<:Unk:>:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new T<:int, C<:Unk:>:> instanceof T<:int, C<:Unk:>:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\tif ($x)\r\n\t\t\t{\r\n\t\t\t\tclass D<:W:> {}\r\n\t\t\t}\r\n\t\t\telse if ($y)\r\n\t\t\t{\r\n\t\t\t\tclass D<:W1,W2:> { }\r\n\t\t\t}\t\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tclass D { }\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\techo new D instanceof D;\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new D<:int:> instanceof D<:int:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new D<:int, string:> instanceof D<:int, string:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new C<:C<:D:>:> instanceof C<:C<:D:>:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\t$t = \"int\";\r\n\r\n\t\t\techo new C<:$t:> instanceof C<:$t:>;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\t$t = \"C\";\r\n\t\t\t\r\n\t\t\techo new $t<:$t:> instanceof $t<:$t:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\t$t = \"C<:int, C<:int, string:>, D<:D:> :>\";\r\n\t\t\t\r\n\t\t\techo new $t instanceof $t;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\t$t = \"C<:int, C<:int, string:, D<:D:> :>\";\r\n\t\t\t\r\n\t\t\techo new $t instanceof $t;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\t$t = \"C<:int, C<::> :>\";\r\n\t\t\t\r\n\t\t\techo new $t instanceof $t;\r\n\t\t\t\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new B<:int:> instanceof B<:int:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\r\n\t\t\techo new B<:B:> instanceof B<:B:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\techo new B<:B<:string:>:> instanceof B<:B<:string:>:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\techo new Dictionary<:int, string:> instanceof Dictionary<:int, string:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\techo new Dictionary<:int:> instanceof Dictionary<:int:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\techo new Dictionary instanceof Dictionary;\t\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\t// Error: new IComparable; \r\n\t\t\techo $x instanceof IComparable;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\t// Error: new IComparable<:Dictionary:>;\r\n\t\t\techo $x instanceof IComparable<:Dictionary:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t\t\r\n\t\t\t// Error: echo  $x instanceof Dictionary<:int, int, int:>;\r\n\t\t\t// Syntax Error: $x = int<:int:>;\r\n\r\n\t\t\techo \"\\n---------\\n\";\r\n\t\t}\r\n\t}\t\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Gotos.php",
    "content": "class Program\r\n{\r\n\tpublic static function Main()\r\n\t{\r\n\t\t$x = 0;\r\n\t\t\r\n\t\tthere:\r\n\t\t\t\t\r\n\t\tgoto here;\r\n\t\r\n\t\techo \"blah\\n\";\r\n\t\t\r\n\t\there:\r\n\t\t\r\n\t\techo \"hujer\\n\";\r\n\t\t\r\n\t\tif ($x++ < 10) \r\n\t\t\tgoto there;\r\n\t}\r\n}\t"
  },
  {
    "path": "Testing/Tests/PHP.NET/Lib.php",
    "content": "<?\r\n\r\nclass Library\r\n{\r\n\tpublic function f()\r\n\t{\r\n\t\tif ($x)\r\n\t\t{\r\n\t\t\tclass LibX { }\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tclass LibX { } \r\n\t\t}\r\n\t}\t\t\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Lib.phpproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>\"Lib\"</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{8ef80175-c81a-4cea-bba1-30f845c20a4c}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>Library</RootNamespace>\r\n    <AssemblyName>Lib</AssemblyName>\r\n    <MainFile>Lib.php</MainFile>\r\n    <TargetPlatform>v2</TargetPlatform>\r\n    <CompilationMode>Standard</CompilationMode>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin</OutputPath>\r\n    <TargetKind>exe</TargetKind>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <TargetKind>exe</TargetKind>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Lib.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"AppLib.config\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup>\n<phpNet>\n  <scriptLibrary>\n    <add url=\"msa.dll\" />\n  </scriptLibrary>\n  <classLibrary>\n    <add assembly=\"PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb\" section=\"bcl\" />\n    <add assembly=\"PhpNetXmlDom, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"dom\" />\n    <add assembly=\"PhpNetPDO, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"pdo\" />\n    <add assembly=\"PhpNetPDOSQLite, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03\" section=\"sqlite\" />\n  </classLibrary>  \n</phpNet>\n</configuration>"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/Program.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\n\nnamespace UseMultiScriptAssembly\n{\n    using PHP.Core;\n\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            ScriptContext context = ScriptContext.InitApplication(ApplicationContext.Default, null, null, null);\n\n            var sb = new StringBuilder();\n            using (TextWriter tw = new StringWriter(sb))\n            {\n                context.Output = tw;\n                context.OutputStream = Console.OpenStandardOutput(); //TODO: Should also redirect binary output.\n\n                context.Include(\"main.php\", true);\n\n                var klass = (PhpObject)context.NewObject(\"Klass\", new object[] { \"yipppy\" });\n                var foo = new PhpCallback(klass, \"foo\");\n                foo.Invoke(null, new object[] { \"param\" });\n\n                tw.Close();\n            }\n\n            string output = sb.ToString();\n            const string EXPECTED = \"yipppyparam\";\n            if (output != EXPECTED)\n            {\n                Console.WriteLine(\"FAIL\");\n                Console.Write(\"Expected: \" + EXPECTED);\n                Console.Write(\"Got: \");\n                Console.WriteLine(output);\n            }\n            else\n            {\n                Console.WriteLine(\"PASS\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"UseMultiScriptAssembly\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"UseMultiScriptAssembly\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"adf6b806-47b6-46e9-ad84-d427d9063559\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/UseMultiScriptAssembly.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{263A6667-8005-462E-B11A-37B89D81721B}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>UseMultiScriptAssembly</RootNamespace>\n    <AssemblyName>UseMultiScriptAssembly</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <Private>False</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PreBuildEvent>cmd /c $(ProjectDir)msa\\build.cmd</PreBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/UseMultiScriptAssembly.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"UseMultiScriptAssembly\", \"UseMultiScriptAssembly.csproj\", \"{263A6667-8005-462E-B11A-37B89D81721B}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{263A6667-8005-462E-B11A-37B89D81721B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{263A6667-8005-462E-B11A-37B89D81721B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{263A6667-8005-462E-B11A-37B89D81721B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{263A6667-8005-462E-B11A-37B89D81721B}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/msa/Autoloader.php",
    "content": "<?\n\n/*\n\tAutoLoader is taken from MediaWiki codebase.\n*/\n\nglobal $wgAutoloadLocalClasses;\n\n$wgAutoloadLocalClasses = array(\n'Klass' => 'klass.php'\n);\n\nclass AutoLoader {\n\t/**\n\t * autoload - take a class name and attempt to load it\n\t *\n\t * @param $className String: name of class we're looking for.\n\t * @return bool Returning false is important on failure as\n\t * it allows Zend to try and look in other registered autoloaders\n\t * as well.\n\t */\n\tstatic function autoload( $className ) {\n\t\tglobal $wgAutoloadClasses, $wgAutoloadLocalClasses;\n\n\t\tif ( isset( $wgAutoloadLocalClasses[$className] ) ) {\n\t\t\t$filename = $wgAutoloadLocalClasses[$className];\n\t\t} elseif ( isset( $wgAutoloadClasses[$className] ) ) {\n\t\t\t$filename = $wgAutoloadClasses[$className];\n\t\t} else {\n\t\t\t# Try a different capitalisation\n\t\t\t# The case can sometimes be wrong when unserializing PHP 4 objects\n\t\t\t$filename = false;\n\t\t\t$lowerClass = strtolower( $className );\n\n\t\t\tforeach ( $wgAutoloadLocalClasses as $class2 => $file2 ) {\n\t\t\t\tif ( strtolower( $class2 ) == $lowerClass ) {\n\t\t\t\t\t$filename = $file2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !$filename ) {\n\t\t\t\techo \"Class {$className} not found; skipped loading\\n\";\n\t\t\t\t# Give up\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t# Make an absolute path, this improves performance by avoiding some stat calls\n\t\tif ( substr( $filename, 0, 1 ) != '/' && substr( $filename, 1, 1 ) != ':' ) {\n\t\t\t$filename = \"$filename\";\n\t\t}\n\n\t\trequire( $filename );\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Force a class to be run through the autoloader, helpful for things like\n\t * Sanitizer that have define()s outside of their class definition. Of course\n\t * this wouldn't be necessary if everything in MediaWiki was class-based. Sigh.\n\t *\n\t * @return Boolean Return the results of class_exists() so we know if we were successful\n\t */\n\tstatic function loadClass( $class ) {\n\t\treturn class_exists( $class );\n\t}\n}\n\nspl_autoload_register( array( 'AutoLoader', 'autoload' ) );\n\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/msa/Klass.php",
    "content": "<?php\n\nclass Klass\n{\n\tfunction __construct($param1 = false, $param2 = false)\n\t{\n\t\techo $param1;\n\t\techo $param2;\n\t}\n\t\n\tfunction foo($param1 = false, $param2 = false)\n\t{\n\t\techo $param1;\n\t\techo $param2;\n\t}\n}\n\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/msa/build.cmd",
    "content": "@rem ..\\..\\..\\..\\..\\Deployment\\Bin\\phpc /target:dll /lang:PHP5 /static+ /debug+ /root:%~dp0 /recurse:%~dp0 /out:../bin/msa.dll\ncd %~dp0\nphpc /target:dll /root:. /recurse:. /out:..\\bin\\msa.dll /lang:PHP5 /static+ /debug+"
  },
  {
    "path": "Testing/Tests/PHP.NET/MultiScriptAssembly/msa/main.php",
    "content": "<?php\n\nrequire_once(\"Autoloader.php\");\n\n// When a class is instantiated via Autoloader from php script,\n// it works fine and the args to the ctor are passed correctly.\n// However, when a class is instantiated from .Net using ScriptContext.NewObject,\n// the ctor params aren't passed to the class and seem to be lost.\n//$x = new Klass(\"Bazzinga\");\n//$x->foo(\"bar\");\n\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n\t<phpNet>\r\n    <classLibrary>\r\n      <add url=\"C:\\Tomas\\Projects\\Phalanger\\Source\\Tests\\PHP.NET\\NullableConversions\\CSharpNullableLib.dll\" />\r\n    </classLibrary>\r\n  </phpNet>\r\n</configuration>"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/CSharpNullableLib/CSharpNullableLib.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"3.5\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>9.0.21022</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{AADF6A75-2BAE-4EAE-8607-C243A378B977}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>CSharpNullableLib</RootNamespace>\r\n    <AssemblyName>CSharpNullableLib</AssemblyName>\r\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\">\r\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml.Linq\">\r\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"System.Data.DataSetExtensions\">\r\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Class1.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/CSharpNullableLib/Class1.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace CSharpNullableLib\r\n{\r\n\tpublic class NullableTests\r\n\t{\r\n\t\tpublic int? IntNull { get; set; }\r\n\t\tpublic double? DoubleNull { get; set; }\r\n\t\tpublic bool? BoolNull { get; set; }\r\n\r\n\t\tint? Wtf()\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tpublic void Print()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Int?    = {0}\", IntNull);\r\n\t\t\tConsole.WriteLine(\"Double? = {0}\", DoubleNull);\r\n\t\t\tConsole.WriteLine(\"Bool?   = {0}\", BoolNull);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/NullableConversions.phpproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>\"NullableConversions\"</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{a83c781c-f7cf-494a-a014-0d29b8ebf31b}</ProjectGuid>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>NullableConversions</AssemblyName>\r\n    <StartupObject>Program.php</StartupObject>\r\n    <RootNamespace>NullableConversions</RootNamespace>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.php\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.config\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\2.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/NullableConversions.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 10.00\r\n# Visual Studio 2008\r\nProject(\"{F0CD5B9D-43B4-49B3-95FA-7F4F8FAFA5C0}\") = \"NullableConversions\", \"NullableConversions.phpproj\", \"{A83C781C-F7CF-494A-A014-0D29B8EBF31B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"CSharpNullableLib\", \"CSharpNullableLib\\CSharpNullableLib.csproj\", \"{AADF6A75-2BAE-4EAE-8607-C243A378B977}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A83C781C-F7CF-494A-A014-0D29B8EBF31B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{AADF6A75-2BAE-4EAE-8607-C243A378B977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{AADF6A75-2BAE-4EAE-8607-C243A378B977}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{AADF6A75-2BAE-4EAE-8607-C243A378B977}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{AADF6A75-2BAE-4EAE-8607-C243A378B977}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/NullableConversions/Program.php",
    "content": "<?\r\n//import namespace ;\r\n\r\n$nl = new CSharpNullableLib:::NullableTests();\r\n\r\n$nl->IntNull = 10;\r\n$nl->DoubleNull = 3.14159265;\r\n$nl->BoolNull = true;\r\n$nl->Print();\r\n\r\n$nl->IntNull = $nl->DoubleNull;\r\n$nl->Print();\r\n\r\n$nl->DoubleNull = null;\r\n$nl->IntNull = $nl->DoubleNull;\r\n$nl->Print();\r\n\r\nfgets(STDIN);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Sample.phpproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Name>\"Sample\"</Name>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{e97d0d1a-eabb-4b50-aca5-bc61b74212ea}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>Program</RootNamespace>\r\n    <AssemblyName>Test1</AssemblyName>\r\n    <MainFile>Test1.php</MainFile>\r\n    <TargetPlatform>v2</TargetPlatform>\r\n    <CompilationMode>Standard</CompilationMode>\r\n    <StartupObject>Test1.php</StartupObject>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <IncludeDebugInformation>true</IncludeDebugInformation>\r\n    <OutputPath>bin</OutputPath>\r\n    <TargetKind>exe</TargetKind>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <IncludeDebugInformation>false</IncludeDebugInformation>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <TargetKind>exe</TargetKind>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Test1.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Test2.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Test3.php\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.config\">\r\n      <SubType>Content</SubType>\r\n    </Content>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Phalanger\\3.0\\Phalanger.targets\" />\r\n</Project>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Sample.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{1EA040D2-53F6-4409-9FA4-7C60E868BB52}\") = \"Sample\", \"Sample.phpproj\", \"{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"CSharpLibrary\", \"CSharpLibrary.csproj\", \"{B466C784-9BC9-42DE-9C83-C962C9580402}\"\r\nEndProject\r\nProject(\"{1EA040D2-53F6-4409-9FA4-7C60E868BB52}\") = \"Lib\", \"Lib.phpproj\", \"{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|.NET = Debug|.NET\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\r\n\t\tRelease|.NET = Release|.NET\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.ActiveCfg = Debug|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.Build.0 = Debug|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.ActiveCfg = Debug|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.Build.0 = Debug|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.ActiveCfg = Release|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.Build.0 = Release|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.ActiveCfg = Release|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.ActiveCfg = Release|.NET\r\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.Build.0 = Release|.NET\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|.NET.ActiveCfg = Debug|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|.NET.ActiveCfg = Release|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.ActiveCfg = Debug|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.Build.0 = Debug|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.ActiveCfg = Debug|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.ActiveCfg = Release|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.Build.0 = Release|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.ActiveCfg = Release|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.ActiveCfg = Release|.NET\r\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.Build.0 = Release|.NET\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Sample.vs2012.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}\") = \"Sample\", \"Sample.phpproj\", \"{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"CSharpLibrary\", \"CSharpLibrary.csproj\", \"{B466C784-9BC9-42DE-9C83-C962C9580402}\"\nEndProject\nProject(\"{7FB7D0AD-ABC6-4BF8-BB4D-B2C68B00F984}\") = \"Lib\", \"Lib.phpproj\", \"{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|.NET = Debug|.NET\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tRelease|.NET = Release|.NET\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|.NET.ActiveCfg = Debug|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|.NET.ActiveCfg = Release|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{E97D0D1A-EABB-4B50-ACA5-BC61B74212EA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|.NET.ActiveCfg = Debug|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|.NET.ActiveCfg = Release|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{B466C784-9BC9-42DE-9C83-C962C9580402}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|.NET.ActiveCfg = Debug|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|.NET.ActiveCfg = Release|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{8EF80175-C81A-4CEA-BBA1-30F845C20A4C}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Test.il",
    "content": ".assembly TestIL\r\n{ \r\n  .ver 2:0:0:0\r\n}\r\n\r\n.assembly extern mscorlib\r\n{\r\n  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) \r\n  .ver 2:0:0:0\r\n}\r\n\r\n.assembly extern System\r\n{\r\n  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) \r\n  .ver 2:0:0:0\r\n}\r\n\r\n.namespace IL\r\n{\r\n\r\n\t.class interface public abstract I\r\n\t{\r\n\t\t.method public newslot abstract virtual instance void f1() { }\r\n\t\t.method public newslot abstract virtual instance void f2() { }\r\n\t\t.method public newslot abstract virtual instance void g() { }\r\n\t}\r\n\r\n\t.class abstract public A implements IL.I\r\n\t{\r\n\t\t.method public specialname rtspecialname instance void .ctor()\r\n\t\t{\r\n\t\t\tldarg.0\r\n\t\t\tcall instance void [mscorlib]System.Object::.ctor()\r\n\t\t\tret\r\n\t\t}\r\n\t\t\r\n\t\t.method private virtual final instance void '_f'()\r\n\t\t{\r\n\t\t\t.override IL.I::f1\r\n\t\t\t.override IL.I::f2\r\n\t\t\tret\r\n\t\t}\r\n\t}\r\n\r\n\t.class abstract public B\r\n\t{\r\n\t\t.method public specialname rtspecialname instance void .ctor()\r\n\t\t{\r\n\t\t\tldarg.0\r\n\t\t\tcall instance void [mscorlib]System.Object::.ctor()\r\n\t\t\tret\r\n\t\t}\r\n\t\t\r\n\t\t.method public newslot abstract virtual instance void f() { }\r\n\t\t\r\n\t\t.method public newslot abstract virtual instance void g() { }\r\n\t}\r\n\t\r\n\t.class abstract public C extends IL.B\r\n\t{\r\n\t\t.method public specialname rtspecialname instance void .ctor()\r\n\t\t{\r\n\t\t\tldarg.0\r\n\t\t\tcall instance void IL.B::.ctor()\r\n\t\t\t\r\n\t\t\tret\r\n\t\t}\r\n\t\t\r\n\t\t.method private virtual final instance void h()\r\n\t\t{\r\n\t\t\t.override IL.B::f\r\n\t\t\t.override IL.B::g\r\n\t\t\t\r\n\t\t\tret\r\n\t\t}\r\n\t\t\r\n\t\t.method public newslot abstract virtual instance void i() { }\r\n\t\t\r\n\t}\r\n}"
  },
  {
    "path": "Testing/Tests/PHP.NET/Test1.php",
    "content": "<?\r\n/*\timport namespace System;\r\n\timport namespace System:::Reflection;\r\n\timport namespace System:::Collections:::Generic;\r\n\timport namespace System:::Web;\r\n\r\n/*\r\n\r\n#pragma file C:\\A\\B\\x.php\r\n#pragma line 500\r\n\r\nclass C extends C\r\n{\r\n}\r\n\r\n#pragma file Q:\\sadasd\r\n\r\n\r\nclass E extends U #pragma line 1000\r\n{\r\n}\r\n\r\n#pragma default line\r\n#pragma default file\r\n\r\nclass D extends U\r\n{\r\n}\r\n*/\r\n\r\n\r\n// TODO: error\r\n//interface I1 { function fF(); }\r\n//interface I2 extends I1 { function Ff(); }\r\n//class X implements I2 { function ff()  {} }\r\n\r\n// TODO: error\r\n\t//interface test \r\n\t//{\r\n\t\t//public function __construct($foo);\r\n\t//}\r\n//\r\n\t//class foo implements test \r\n\t//{\r\n\t\t//public function __construct() \r\n\t\t//{\r\n\t\t//}\r\n\t//}\r\n\r\n// TODO: error\r\n//class C\r\n//{\r\n\t//private function f() { }\r\n//}\r\n//\r\n//class D extends C\r\n//{\r\n\t//function f() { }\r\n//}\r\n\r\n/*\r\n\t\t\t\r\n/*\tclass MyPage extends System:::Web:::UI:::Page\r\n\t{\r\n\t\tprotected function FrameworkInitialize()\r\n\t\t{\r\n\t\t\tparent::FrameworkInitialize();\r\n\t\t}\r\n\t}\r\n*/\r\n\t/*class C<:X:>\r\n\t{\r\n\t\tconst X = Z;\r\n\t\t\r\n\t\tstatic function Q()\r\n\t\t{\r\n\t\t\t$x = \"Dictionary<:!X,List<:string:>:>\";\r\n\t\t\t$y = new $x;\r\n\t\t\t$y->Add(1, new i'List'<:string:>());\r\n\t\t\t\r\n\t\t}\r\n\t}*/\r\n\r\n\tclass Start\r\n\t{\r\n\t\tstatic function f<:T:>()\r\n\t\t{\r\n\t\t\tvar_dump(new System:::Collections:::Generic:::Dictionary<:string, T:>);\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\tclass Program\r\n\t{\r\n\t\tpublic static function Main()\r\n\t\t{\r\n\t\t\tfgets(STDIN);\r\n\t\t}\r\n\t}\r\n\t\r\n\techo \"Hello\";\r\n\tStart::f<:Program:>();\r\n\t\r\n\t$a=\"a\";\r\n\textract($GLOBALS, EXTR_REFS);\r\n\techo \"ok\\n\";\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/Test2.php",
    "content": "<?\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/Test3.php",
    "content": "<?\r\n\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/PHP.NET/__skip",
    "content": "<?\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/PHP.NET/build-lib.cmd",
    "content": "..\\..\\..\\Deployment\\Debug\\phpc /pure /target:dll /config:AppLib.config Lib.php\r\npause"
  },
  {
    "path": "Testing/Tests/PHP.NET/build.cmd",
    "content": "..\\..\\..\\Deployment\\Debug\\phpc.exe /pure /target:exe /config:App.config /r:bin/Lib.dll Test1.php\r\npause"
  },
  {
    "path": "Testing/Tests/PHP.NET/test-il.cmd",
    "content": "@ilasm /nologo /quiet /dll /output:bin\\Test-il.dll Test.il\r\n@peverify /nologo bin\\Test-il.dll\r\n@pause"
  },
  {
    "path": "Testing/Tests/Phalanger.inc",
    "content": "<?\r\n\r\nfunction __xml_norm($str)\r\n{\r\n\t$str = str_replace(array(\" /\", \"?><\", \"\\n\\n\", \"\\r\\n\\r\\n\"), array(\"/\", \"?>\\n<\", \"\\n\", \"\\r\\n\"), $str);\r\n\t\r\n\tif ($str[strlen($str) - 1] != \"\\n\") $str = $str . \"\\n\";\r\n\r\n\tif (function_exists(\"to_binary\")) return to_binary($str);\r\n\telse return $str;\r\n}\r\n\r\nfunction __var_dump($x)\r\n{\r\n  __var_dump_rec(\"\", $x);\r\n}\r\n\r\nfunction __var_dump_rec($indent, &$x)\r\n{\r\n  if (is_array($x) || is_object($x))\r\n  {\r\n    echo $indent, is_array($x) ? \"array\" : \"object\", \"\\n\";\r\n    echo \"$indent{\\n\";\r\n    \r\n    $a = array();\r\n    foreach ($x as $k => $_)\r\n      $a[] = $k;\r\n\r\n    if (is_object($x))\r\n      sort($a, SORT_STRING);\r\n\r\n    foreach ($a as $k)\r\n    {\r\n      $v = @(is_array($x) ? $x[$k] : $x->$k);\r\n      \r\n      echo \"$indent  \";\r\n      if (is_string($k)) echo \"'$k'\"; else echo \"$k\";\r\n      echo \" => \";\r\n      \r\n      if (is_array($v) || is_object($v))\r\n      {\r\n        echo \"\\n\";\r\n        __var_dump_rec(\"$indent  \", $v);\r\n      }  \r\n      else\r\n      {\r\n        __var_dump_rec(\"\", $v);\r\n      }  \r\n    }\r\n    \r\n    echo \"$indent}\\n\";\r\n  }\r\n  else if (is_string($x))\r\n    echo \"{$indent}'$x'\\n\";\r\n  else if (is_null($x))\r\n    echo \"{$indent}NULL\\n\"; \r\n  else if (is_bool($x))\r\n    echo $indent, ($x ? \"TRUE\" : \"FALSE\"), \"\\n\"; \r\n  else if (is_resource($x))\r\n    echo $indent, \"resource '\".get_resource_type($x).\"'\\n\";\r\n  else if (is_double($x))\r\n    printf(\"{$indent}double(%.10f)\\n\",$x);\r\n  else if (gettype($x)==\"object\")\r\n    echo $indent, \"object [invalid]\\n\"; else\r\n    echo $indent, gettype($x), \"($x)\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/001.phpt",
    "content": "--TEST--\nabusing preg_match()\n--FILE--\n<?php\n\n{\n\tvar_dump(preg_match('~\n\t\t(?P<date> \n\t\t(?P<year>(\\d{2})?\\d\\d) -\n\t\t(?P<month>(?:\\d\\d|[a-zA-Z]{2,3})) -\n\t\t(?P<day>[0-3]?\\d))\n\t~x', '2006-05-13', $m));\n\n\tvar_dump($m);\n}\n\n?>\n--EXPECT--\nint(1)\narray(10) {\n  [0]=>\n  string(10) \"2006-05-13\"\n  [\"date\"]=>\n  string(10) \"2006-05-13\"\n  [1]=>\n  string(10) \"2006-05-13\"\n  [\"year\"]=>\n  string(4) \"2006\"\n  [2]=>\n  string(4) \"2006\"\n  [3]=>\n  string(2) \"20\"\n  [\"month\"]=>\n  string(2) \"05\"\n  [4]=>\n  string(2) \"05\"\n  [\"day\"]=>\n  string(2) \"13\"\n  [5]=>\n  string(2) \"13\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/cache.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$subject = \"abcdef\";\r\n\r\n$pattern = '<def>';\r\nfor ($i = 0; $i < 5; $i++)\r\n{\r\n\tpreg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);\r\n\tif ($matches[0][0] == \"def\" && $matches[0][1] == 3)\r\n\t\techo \"OK\\n\";\r\n\telse\r\n\t\techo \"Fail.\\n\";\r\n}\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/grep1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$array = array(\"hello\", null, 12, 1.5, array(1.5, 3, \"foo\"), \"bar\", 58.54);\r\n\r\n// return all array elements containing floating point numbers\r\n$fl_array = preg_grep(\"/^(\\d+)?\\.\\d+$/\", $array);\r\n\r\nvar_dump($fl_array);\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/grep2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\n$food = array('apple', 'banana', 'squid', 'pear');\r\n$fruits = preg_grep(\"/squid/\", $food, PREG_GREP_INVERT);\r\necho \"Food  \"; print_r($food);\r\necho \"Fruit \"; print_r($fruits);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match1.php",
    "content": "[expect php]\r\n\r\n\r\n[file]\r\n<?php\r\n$subject = \"abcdef\";\r\n$pattern = '/^def/';\r\npreg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);\r\nprint_r($matches);\r\n\r\n$pattern = '<def>';\r\npreg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);\r\nprint_r($matches);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match10.php",
    "content": "[expect php]\r\n\r\n\r\n[file]\r\n<?php\r\nif (preg_match(\"/([0-9])(.*?)(\\\\1)/\", \"01231234\", $match))\r\n{\r\n   print_r($match);\r\n}\r\nelse\r\n   echo \"none\";\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match11.php.kb",
    "content": "[comment]\r\nThis test is failing because there is a bug in .NET Regex class in v1.1, version 2.0 is ok.\r\n[expect php]\r\n\r\n[file]\r\n<?\r\n\r\nfunction preg_addslashes ($foo)\r\n{\r\n   return preg_replace(\"/([^A-z0-9_-]|[\\\\\\[\\]])/\", \"\\\\\\\\\\\\1\", $foo);\r\n}\r\n\r\n$foo = \"([/com|et\\])\";\r\n$true = preg_match (\"/^\".preg_addslashes($foo).\"$/\", $foo);\r\n\r\n// without preg_addslashes you'd get an error and $true = false.\r\n\r\nif ($true)\r\n\techo \"true\";\r\nelse\r\n\techo \"false\";\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match2.php",
    "content": "[expect php]\r\n\r\n\r\n[file]\r\n<?php\r\n$subject = \"abcdef\";\r\n$pattern = '/^def/';\r\npreg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);\r\nprint_r($matches);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match3.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// The \"i\" after the pattern delimiter indicates a case-insensitive search\r\nif (preg_match(\"/php/i\", \"PHP is the web scripting language of choice.\")) {\r\n   echo \"A match was found.\";\r\n} else {\r\n   echo \"A match was not found.\";\r\n}\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match4.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n/* The \\b in the pattern indicates a word boundary, so only the distinct\r\n * word \"web\" is matched, and not a word partial like \"webbing\" or \"cobweb\" */\r\nif (preg_match(\"/\\bweb\\b/i\", \"PHP is the web scripting language of choice.\")) {\r\n   echo \"A match was found.\";\r\n} else {\r\n   echo \"A match was not found.\";\r\n}\r\n\r\nif (preg_match(\"/\\bweb\\b/i\", \"PHP is the website scripting language of choice.\")) {\r\n   echo \"A match was found.\";\r\n} else {\r\n   echo \"A match was not found.\";\r\n}\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match5.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// get host name from URL\r\npreg_match(\"/^(http:\\/\\/)?([^\\/]+)/i\",\r\n   \"http://www.php.net/index.html\", $matches);\r\n$host = $matches[2];\r\n\r\n// get last two segments of host name\r\npreg_match(\"/[^\\.\\/]+\\.[^\\.\\/]+$/\", $host, $matches);\r\necho \"domain name is: {$matches[0]}\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match6.php",
    "content": "[expect] 1\r\n[expect] 0\r\n[expect] 1\r\n[expect] 1\r\n\r\n[file]\r\n<?php\r\n\r\ndefine( \"REGEXP_PHONE\", \"/^(\\(|){1}[2-9][0-9]{2}(\\)|){1}([\\. -]|)[2-9][0-9]{2}([\\. -]|)[0-9]{4}$/\" ); \r\n\r\n$phone = \"(225) 548 8541\";\r\n$result = preg_match(REGEXP_PHONE, $phone);\r\nprint_r($result);\r\n\r\n$phone = \"(225) 5f8 8541\";\r\n$result = preg_match(REGEXP_PHONE, $phone);\r\nprint_r($result);\r\n\r\n$phone = \"225-548-8541\";\r\n$result = preg_match(REGEXP_PHONE, $phone);\r\nprint_r($result);\r\n\r\n$phone = \"(225-548 8541\";\r\n$result = preg_match(REGEXP_PHONE, $phone);\r\nprint_r($result);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match7.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\nfunction valid_ipv4($ip_addr)\r\n{\r\n       $num=\"([0-9]|^1?\\d\\d$|2[0-4]\\d|25[0-5])\";\r\n\r\n       if(preg_match(\"/$num\\.$num\\.$num\\.$num/\",$ip_addr,$matches))\r\n       {\r\n               return $matches[0];\r\n       } else {\r\n               return false;\r\n       }\r\n}\r\n\r\nvar_dump(valid_ipv4(\"241.25.16.22\"));\r\nvar_dump(valid_ipv4(\"256.41.15.11\"));\r\n\r\n?> \r\n\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match8.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$html_in = <<<table\r\n\r\n<table>\r\n\t<tr>\r\n\t\t<td>1</td>\r\n\t\t<td>2</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>3</td>\r\n\t\t<td>4</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>5</td>\r\n\t\t<td>6</td>\r\n\t</tr>\r\n</table>\r\n\r\ntable;\r\n\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\necho transpose($html_in);\r\n/****************************\r\n\r\nHTML Table Transpose Function\r\nConverts rows to columns and columns to rows in an HTML Table\r\nBy Darren Gates & Gary Beith, www.TUFaT.com\r\n\r\nExample of usage:\r\n\r\n$html_in = file_get_contents('some_table.html');\r\necho transpose($html_in);\r\n\r\n****************************/\r\n\r\nfunction transpose($html_in)\r\n{\r\n  $html_out = '';\r\n  $element = '';\r\n  $table_level = -1;\r\n  $row_index = -1;\r\n  $column_index = -1;\r\n  $row_max = -1;\r\n  $column_max = -1;\r\n  $row_attrs = array();\r\n  $cell_attrs = array();\r\n  $elements = array();\r\n\r\n  $tokens = preg_split(\r\n  '/(?is)(<\\/?(?:table|tr|th|td)(?:|\\s.*?)>)/', \r\n  $html_in, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);\r\n  foreach ($tokens as $token)\r\n  {\r\n    if (preg_match('/(?i)\\A<table[>\\s]/', $token))\r\n    {\r\n      $element .= $token;\r\n      $table_level++;\r\n    }\r\n    elseif (preg_match('/(?i)\\A<\\/table>/', $token)) \r\n    {\r\n      $element .= $token;\r\n      $table_level--;\r\n    }\r\n    elseif ($table_level > 0)  // token is within nested table\r\n    {\r\n      $element .= $token;  \r\n    }\r\n    elseif (preg_match('/(?i)\\A<tr[>\\s]/', $token)) \r\n    {\r\n      if (++$row_index == 0)\r\n      {\r\n        $html_out = $element; \r\n      }\r\n\r\n      preg_match_all('/(?i)\\s(align|bgcolor|char|charoff|valign)=([^>\\s]*)/', $token, $row_attrs, PREG_SET_ORDER);\r\n    }\r\n    elseif (preg_match('/(?i)\\A<\\/tr>/', $token)) \r\n    {\r\n      if ($column_index < 0)\r\n      {\r\n        $element = '';\r\n      }\r\n      else\r\n      {\r\n        $i_max = $row_index + $rowspan - 1;\r\n        if ($row_max < $i_max)\r\n        {\r\n          $row_max = $i_max;\r\n        }\r\n        \r\n        $j_max = $column_index + $colspan - 1;\r\n        if ($column_max < $j_max)\r\n        {\r\n          $column_max = $j_max;\r\n        }\r\n\r\n        for ($i = $row_index; $i <= $i_max; $i++)\r\n        {\r\n          for ($j = $column_index; $j <= $j_max; $j++)\r\n          {\r\n            $elements[$i][$j] = $element;\r\n            $element = ''; \r\n          }\r\n        }\r\n      }\r\n\r\n      $column_index = -1;\r\n    }\r\n    elseif (preg_match('/(?i)\\A<t[hd][>\\s]/', $token)) \r\n    {\r\n      if ($column_index >= 0)\r\n      {\r\n        $i_max = $row_index + $rowspan - 1;\r\n        if ($row_max < $i_max)\r\n        {\r\n          $row_max = $i_max;\r\n        }\r\n\r\n        $j_max = $column_index + $colspan - 1;\r\n        if ($column_max < $j_max)\r\n        {\r\n          $column_max = $j_max;\r\n        }\r\n\r\n        for ($i = $row_index; $i <= $i_max; $i++)\r\n        {\r\n          for ($j = $column_index; $j <= $j_max; $j++)\r\n          {\r\n            $elements[$i][$j] = $element;\r\n            $element = '';\r\n          }\r\n        }\r\n        \r\n        $column_index = $j_max;\r\n      }\r\n\r\n      while (isset($elements[$row_index][++$column_index]))\r\n      {\r\n        continue;\r\n      }\r\n\r\n      $colspan = 1;\r\n      $rowspan = 1;\r\n      $tag = substr($token, 0, -1);\r\n      preg_match_all('/(?is)\\s(colspan|rowspan)=(?:\"(.*?)\"|([^>\\s]*))/',$token, $cell_attrs, PREG_SET_ORDER);\r\n      \r\n      foreach ($cell_attrs as $cell_attr)\r\n      {\r\n\r\n        if (stristr($cell_attr[1], 'colspan') !== FALSE)\r\n        {\r\n          $colspan = (int)$cell_attr[2];\r\n          $tag = preg_replace('/(?i)(\\s)colspan=/','$1rrrspan=',$tag);\r\n        }\r\n        elseif (stristr($cell_attr[1], 'rowspan') !== FALSE)\r\n        {\r\n          $rowspan = (int)$cell_attr[2];\r\n          $tag = preg_replace('/(?i)(\\s)rowspan=/','$1cccspan=',$tag);\r\n        }\r\n      }\r\n\r\n      $tag = preg_replace('/(?i)(\\s)rrrspan=/','$1rowspan=',$tag);\r\n      $tag = preg_replace('/(?i)(\\s)cccspan=/','$1colspan=',$tag);\r\n\r\n      preg_match_all('/(?i)\\s(align|bgcolor|char|charoff|valign)=([^>\\s]*)/',$token, $cell_attrs, PREG_SET_ORDER); \r\n      foreach ($row_attrs as $row_attr)\r\n      {\r\n        foreach ($cell_attrs as $cell_attr)\r\n        {\r\n          if (stristr($cell_attr[1], $row_attr[1]) !== FALSE)\r\n          {\r\n            continue 2;\r\n          }\r\n        }\r\n\r\n        $tag .= $row_attr[0];\r\n      }\r\n\r\n      $tag .= '>';\r\n\r\n      $element = $tag;  // initialize th/td element to tag\r\n    }\r\n    else\r\n    {\r\n      $element .= $token;  // add token to current element\r\n    }\r\n  }\r\n\r\n  for ($i = 0; $i <= $column_max; $i++)\r\n  {\r\n    $html_out .= \"<tr>\\n\";\r\n\r\n    for ($j = 0; $j <= $row_max; $j++)\r\n    {\r\n      $html_out .= $elements[$j][$i];\r\n    }\r\n\r\n    $html_out .= \"</tr>\\n\";\r\n  }\r\n\r\n  $html_out .= $element; \r\n\r\n  return $html_out;\r\n}\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match9.php",
    "content": "[expect exact]\r\narray\r\n(\r\n  [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)\"\r\n  [1] => 209.6.145.47\r\n  [2] => -\r\n  [3] => -\r\n  [4] => 22/Nov/2003:19:02:30 -0500\r\n  [5] => GET\r\n  [6] => /dir/doc.htm\r\n  [7] => HTTP\r\n  [8] => 1.0\r\n  [9] => 200\r\n  [10] => 6776\r\n  [11] => \"http://search.yahoo.com/search?p=key+words=UTF-8\"\r\n  [12] => \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\"\r\n)\r\n\r\n[file]\r\n<?php\r\n\r\n$line_in = '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)\"';\r\n\r\nif (preg_match('!^([^ ]+) ([^ ]+) ([^ ]+) \\[([^\\]]+)\\] \"([^ ]+) ([^ ]+) ([^/]+)/([^\"]+)\" ([^ ]+) ([^ ]+) ([^ ]+) (.+)!',\r\n  $line_in,\r\n  $elements))\r\n{\r\n  print_r($elements);\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_all1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\npreg_match_all(\"|<[^>]+?>(.*?)</[^>]+?>|\", \r\n   \"<b>example: </b><div align=left>this is a test</div>\", \r\n   $out, PREG_PATTERN_ORDER);\r\necho $out[0][0] . \", \" . $out[0][1] . \"\\n\";\r\necho $out[1][0] . \", \" . $out[1][1] . \"\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_all2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\npreg_match_all(\"|<[^>]+?>(.*?)</[^>]+?>|\", \r\n   \"<b>example: </b><div align=\\\"left\\\">this is a test</div>\", \r\n   $out, PREG_SET_ORDER);\r\necho $out[0][0] . \", \" . $out[0][1] . \"\\n\";\r\necho $out[1][0] . \", \" . $out[1][1] . \"\\n\";\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_all3.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$x = preg_match_all(\"/\\(?  (\\d{3})?  \\)?  (?(1)  [\\-\\s] ) \\d{3}-\\d{4}/x\",\r\n               \"Call 555-1212 or 1-800-555-1212\", $phones);\r\nprint_r($x);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_all4.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// The \\\\2 is an example of backreferencing. This tells pcre that\r\n// it must match the second set of parentheses in the regular expression\r\n// itself, which would be the ([\\w]+) in this case. The extra backslash is \r\n// required because the string is in double quotes.\r\n$html = \"<b>bold text</b><a href=howdy.html>click me</a>\";\r\n\r\npreg_match_all(\"/(<([\\w]+)[^>]*>)(.*)(<\\/\\\\2>)/\", $html, $matches);\r\n\r\nfor ($i=0; $i< count($matches[0]); $i++) {\r\n  echo \"matched: \" . $matches[0][$i] . \"\\n\";\r\n  echo \"part 1: \" . $matches[1][$i] . \"\\n\";\r\n  echo \"part 2: \" . $matches[3][$i] . \"\\n\";\r\n  echo \"part 3: \" . $matches[4][$i] . \"\\n\\n\";\r\n}\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_dollar.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$p = '/([a-z]+)$/D';\r\n$s = \"more info\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/D';\r\n$s = \"more info\\n\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/D';\r\n$s = \"more info\\r\\n\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/D';\r\n$s = \"more info\\r\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\necho \"---------\\n\";\r\n\r\n$p = '/([a-z]+)$/';\r\n$s = \"more info\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/';\r\n$s = \"more info\\n\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/';\r\n$s = \"more info\\r\\n\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n\r\n$p = '/([a-z]+)$/';\r\n$s = \"more info\\r\";\r\npreg_match($p,$s,$m); var_dump(@$m[1]);\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/match_groups.php",
    "content": "[expect exact]\nArray\n(\n    [0] => alt=A smooth, rocket-shaped shark swims quickly through the water.\n    [0_img_left] =>\n    [1] =>\n    [0_img_right] =>\n    [2] =>\n    [0_img_center] =>\n    [3] =>\n    [1_img_center] =>\n    [4] =>\n    [0_img_none] =>\n    [5] =>\n    [0_img_baseline] =>\n    [6] =>\n    [0_img_sub] =>\n    [7] =>\n    [0_img_super] =>\n    [8] =>\n    [1_img_super] =>\n    [9] =>\n    [0_img_top] =>\n    [10] =>\n    [0_img_text_top] =>\n    [11] =>\n    [0_img_middle] =>\n    [12] =>\n    [0_img_bottom] =>\n    [13] =>\n    [0_img_text_bottom] =>\n    [14] =>\n    [0_img_thumbnail] =>\n    [15] =>\n    [1_img_thumbnail] =>\n    [16] =>\n    [0_img_manualthumb] =>\n    [17] =>\n    [18] =>\n    [1_img_manualthumb] =>\n    [19] =>\n    [20] =>\n    [0_img_framed] =>\n    [21] =>\n    [1_img_framed] =>\n    [22] =>\n    [2_img_framed] =>\n    [23] =>\n    [0_img_frameless] =>\n    [24] =>\n    [0_img_upright] =>\n    [25] =>\n    [1_img_upright] =>\n    [26] =>\n    [27] =>\n    [2_img_upright] =>\n    [28] =>\n    [29] =>\n    [0_img_border] =>\n    [30] =>\n    [0_img_link] =>\n    [31] =>\n    [32] =>\n    [0_img_alt] => alt=A smooth, rocket-shaped shark swims quickly through the water.\n    [33] => alt=A smooth, rocket-shaped shark swims quickly through the water.\n    [34] => A smooth, rocket-shaped shark swims quickly through the water.\n)\n[file]\n<?php\n\n$line_in = 'alt=A smooth, rocket-shaped shark swims quickly through the water.';\n\nif (preg_match('/^(?:(?P<0_img_left>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',\n  $line_in,\n  $elements))\n{\n  print_r($elements);\n}\n\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/overflow.php",
    "content": "[comment]\r\nThis code caused an overflow in converting ranges.\r\n\r\n[expect php]\r\n\r\n[file]\r\n<?\r\n\r\n$x = <<<EOT\r\n/\\(\\(([-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&-]+)(\\|[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&-]+)?(\\#[A-Za-z][-A-Za-z0-9_:.]*)?()\\)\\)/\r\nEOT;\r\n$y = \"kfkaj +j k453#$%^&kjakfjkaj|kfj\";\r\n\r\n  function process(&$matches)\r\n  {\r\n    return $matches[0];\r\n  }\r\n  \r\n  echo \"string(\\\"\".preg_replace_callback($x,'process',$y).\"\\\")\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/001.phpt",
    "content": "--TEST--\nabusing preg_match()\n--FILE--\n<?php\n\nforeach (array('2006-05-13', '06-12-12', 'data: \"12-Aug-87\"') as $s) {\n\tvar_dump(preg_match('~\n\t\t(?P<date> \n\t\t(?P<year>(\\d{2})?\\d\\d) -\n\t\t(?P<month>(?:\\d\\d|[a-zA-Z]{2,3})) -\n\t\t(?P<day>[0-3]?\\d))\n\t~x', $s, $m));\n\n\tvar_dump($m);\n}\n\n?>\n--EXPECT--\nint(1)\narray(10) {\n  [0]=>\n  string(10) \"2006-05-13\"\n  [\"date\"]=>\n  string(10) \"2006-05-13\"\n  [1]=>\n  string(10) \"2006-05-13\"\n  [\"year\"]=>\n  string(4) \"2006\"\n  [2]=>\n  string(4) \"2006\"\n  [3]=>\n  string(2) \"20\"\n  [\"month\"]=>\n  string(2) \"05\"\n  [4]=>\n  string(2) \"05\"\n  [\"day\"]=>\n  string(2) \"13\"\n  [5]=>\n  string(2) \"13\"\n}\nint(1)\narray(10) {\n  [0]=>\n  string(8) \"06-12-12\"\n  [\"date\"]=>\n  string(8) \"06-12-12\"\n  [1]=>\n  string(8) \"06-12-12\"\n  [\"year\"]=>\n  string(2) \"06\"\n  [2]=>\n  string(2) \"06\"\n  [3]=>\n  string(0) \"\"\n  [\"month\"]=>\n  string(2) \"12\"\n  [4]=>\n  string(2) \"12\"\n  [\"day\"]=>\n  string(2) \"12\"\n  [5]=>\n  string(2) \"12\"\n}\nint(1)\narray(10) {\n  [0]=>\n  string(8) \"12-Aug-8\"\n  [\"date\"]=>\n  string(8) \"12-Aug-8\"\n  [1]=>\n  string(8) \"12-Aug-8\"\n  [\"year\"]=>\n  string(2) \"12\"\n  [2]=>\n  string(2) \"12\"\n  [3]=>\n  string(0) \"\"\n  [\"month\"]=>\n  string(3) \"Aug\"\n  [4]=>\n  string(3) \"Aug\"\n  [\"day\"]=>\n  string(1) \"8\"\n  [5]=>\n  string(1) \"8\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/002.phpt",
    "content": "--TEST--\npreg_* with bogus vals\n--FILE--\n<?php\n\nvar_dump(preg_match());\nvar_dump(preg_match_all());\nvar_dump(preg_match_all('//', '', $dummy, 0xdead));\n\nvar_dump(preg_quote());\nvar_dump(preg_quote(''));\n\nvar_dump(preg_replace('/(.)/', '${1}${1', 'abc'));\nvar_dump(preg_replace('/.++\\d*+[/', 'for ($', 'abc'));\nvar_dump(preg_replace('/(.)/e', 'for ($', 'abc'));\n\n?>\n--EXPECTF--\n\nWarning: preg_match() expects at least 2 parameters, 0 given in %s002.php on line 3\nbool(false)\n\nWarning: preg_match_all() expects at least 2 parameters, 0 given in %s002.php on line 4\nbool(false)\n\nWarning: preg_match_all(): Invalid flags specified in %s002.php on line 5\nNULL\n\nWarning: preg_quote() expects at least 1 parameter, 0 given in %s002.php on line 7\nNULL\nstring(0) \"\"\nstring(12) \"a${1b${1c${1\"\n\nWarning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 8 in %s002.php on line 11\nNULL\n\nParse error: %s in %s002.php(12) : regexp code on line 1\n\nFatal error: preg_replace(): Failed evaluating code: \nfor ($ in %s002.php on line 12\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/003.phpt",
    "content": "--TEST--\nabusing preg_match_all()\n--FILE--\n<?php\n\nforeach (array(PREG_PATTERN_ORDER, PREG_SET_ORDER) as $flag) {\n\tvar_dump(preg_match_all('~\n\t\t(?P<date> \n\t\t(?P<year>(\\d{2})?\\d\\d) -\n\t\t(?P<month>(?:\\d\\d|[a-zA-Z]{2,3})) -\n\t\t(?P<day>[0-3]?\\d))\n\t\t~x',\n\t\t'2006-05-13 e outra data: \"12-Aug-37\"', $m, $flag));\n\n\tvar_dump($m);\n}\n?>\n--EXPECT--\nint(2)\narray(10) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(10) \"2006-05-13\"\n    [1]=>\n    string(9) \"12-Aug-37\"\n  }\n  [\"date\"]=>\n  array(2) {\n    [0]=>\n    string(10) \"2006-05-13\"\n    [1]=>\n    string(9) \"12-Aug-37\"\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(10) \"2006-05-13\"\n    [1]=>\n    string(9) \"12-Aug-37\"\n  }\n  [\"year\"]=>\n  array(2) {\n    [0]=>\n    string(4) \"2006\"\n    [1]=>\n    string(2) \"12\"\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(4) \"2006\"\n    [1]=>\n    string(2) \"12\"\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(2) \"20\"\n    [1]=>\n    string(0) \"\"\n  }\n  [\"month\"]=>\n  array(2) {\n    [0]=>\n    string(2) \"05\"\n    [1]=>\n    string(3) \"Aug\"\n  }\n  [4]=>\n  array(2) {\n    [0]=>\n    string(2) \"05\"\n    [1]=>\n    string(3) \"Aug\"\n  }\n  [\"day\"]=>\n  array(2) {\n    [0]=>\n    string(2) \"13\"\n    [1]=>\n    string(2) \"37\"\n  }\n  [5]=>\n  array(2) {\n    [0]=>\n    string(2) \"13\"\n    [1]=>\n    string(2) \"37\"\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(10) {\n    [0]=>\n    string(10) \"2006-05-13\"\n    [\"date\"]=>\n    string(10) \"2006-05-13\"\n    [1]=>\n    string(10) \"2006-05-13\"\n    [\"year\"]=>\n    string(4) \"2006\"\n    [2]=>\n    string(4) \"2006\"\n    [3]=>\n    string(2) \"20\"\n    [\"month\"]=>\n    string(2) \"05\"\n    [4]=>\n    string(2) \"05\"\n    [\"day\"]=>\n    string(2) \"13\"\n    [5]=>\n    string(2) \"13\"\n  }\n  [1]=>\n  array(10) {\n    [0]=>\n    string(9) \"12-Aug-37\"\n    [\"date\"]=>\n    string(9) \"12-Aug-37\"\n    [1]=>\n    string(9) \"12-Aug-37\"\n    [\"year\"]=>\n    string(2) \"12\"\n    [2]=>\n    string(2) \"12\"\n    [3]=>\n    string(0) \"\"\n    [\"month\"]=>\n    string(3) \"Aug\"\n    [4]=>\n    string(3) \"Aug\"\n    [\"day\"]=>\n    string(2) \"37\"\n    [5]=>\n    string(2) \"37\"\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/004.phpt",
    "content": "--TEST--\nabusing pcre\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/((?:(?:unsigned|struct)\\s+)?\\w+)(?:\\s*(\\*+)\\s+|\\s+(\\**))(\\w+(?:\\[\\s*\\w*\\s*\\])?)\\s*(?:(=)[^,;]+)?((?:\\s*,\\s*\\**\\s*\\w+(?:\\[\\s*\\w*\\s*\\])?\\s*(?:=[^,;]+)?)*)\\s*;/S', 'unsigned int xpto = 124; short a, b;', $m, PREG_SET_ORDER));\nvar_dump($m);\n\nvar_dump(preg_match_all('/(?:\\([^)]+\\))?(&?)([\\w>.()-]+(?:\\[\\w+\\])?)\\s*,?((?:\\)*\\s*=)?)/S', '&a, b, &c', $m, PREG_SET_ORDER));\nvar_dump($m);\n\nvar_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));\nvar_dump($m);\n\nvar_dump(preg_replace(array('@//.*@S', '@/\\*.*\\*/@SsUe'), array('', 'preg_replace(\"/[^\\r\\n]+/S\", \"\", \\'$0\\')'), \"hello\\n//x \\n/*\\ns\\n*/\"));\n\nvar_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));\n?>\n--EXPECT--\nint(2)\narray(2) {\n  [0]=>\n  array(7) {\n    [0]=>\n    string(24) \"unsigned int xpto = 124;\"\n    [1]=>\n    string(12) \"unsigned int\"\n    [2]=>\n    string(0) \"\"\n    [3]=>\n    string(0) \"\"\n    [4]=>\n    string(4) \"xpto\"\n    [5]=>\n    string(1) \"=\"\n    [6]=>\n    string(0) \"\"\n  }\n  [1]=>\n  array(7) {\n    [0]=>\n    string(11) \"short a, b;\"\n    [1]=>\n    string(5) \"short\"\n    [2]=>\n    string(0) \"\"\n    [3]=>\n    string(0) \"\"\n    [4]=>\n    string(1) \"a\"\n    [5]=>\n    string(0) \"\"\n    [6]=>\n    string(3) \", b\"\n  }\n}\nint(3)\narray(3) {\n  [0]=>\n  array(4) {\n    [0]=>\n    string(3) \"&a,\"\n    [1]=>\n    string(1) \"&\"\n    [2]=>\n    string(1) \"a\"\n    [3]=>\n    string(0) \"\"\n  }\n  [1]=>\n  array(4) {\n    [0]=>\n    string(2) \"b,\"\n    [1]=>\n    string(0) \"\"\n    [2]=>\n    string(1) \"b\"\n    [3]=>\n    string(0) \"\"\n  }\n  [2]=>\n  array(4) {\n    [0]=>\n    string(2) \"&c\"\n    [1]=>\n    string(1) \"&\"\n    [2]=>\n    string(1) \"c\"\n    [3]=>\n    string(0) \"\"\n  }\n}\nint(1)\narray(1) {\n  [0]=>\n  array(3) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(46) \"zend_parse_parameters( 0, \"addd|s/\", a, b, &c)\"\n      [1]=>\n      int(0)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(7) \"addd|s/\"\n      [1]=>\n      int(27)\n    }\n    [2]=>\n    array(2) {\n      [0]=>\n      string(9) \"a, b, &c)\"\n      [1]=>\n      int(37)\n    }\n  }\n}\nstring(9) \"hello\n\n\n\n\"\narray(3) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(13) \"s, preg_match\"\n    [1]=>\n    int(13)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(9) \"\n{\nlalala\"\n    [1]=>\n    int(27)\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/005.phpt",
    "content": "--TEST--\nabusing preg_match_all() #2\n--FILE--\n<?php\n// this file is not used in the cron job\n// use it to test the gcc regex with the sample data provided\n\n$sampledata = \"\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swfbitmap_init':\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:323: warning: assignment from incompatible pointer type\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swftextfield_setFont':\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:2597: warning: passing arg 2 of `SWFTextField_setFont' from incompatible pointer type\n/p2/var/php_gcov/PHP_4_4/ext/oci8/oci8.c:1027: warning: `oci_ping' defined but not used\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getpgid':\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:484: warning: implicit declaration of function `getpgid'\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getsid':\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:506: warning: implicit declaration of function `getsid'\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_read_files':\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:302: warning: implicit declaration of function `pread'\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_write_files':\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:340: warning: implicit declaration of function `pwrite'\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_get_option':\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1862: warning: unused variable `timeout'\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_set_option':\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1941: warning: unused variable `timeout'\n/p2/var/php_gcov/PHP_4_4/regex/regexec.c:19: warning: `nope' defined but not used\n/p2/var/php_gcov/PHP_4_4/ext/standard/exec.c:50: warning: `php_make_safe_mode_command' defined but not used\n/p2/var/php_gcov/PHP_4_4/ext/standard/image.c: In function `php_handle_jpc':\n/p2/var/php_gcov/PHP_4_4/ext/standard/image.c:604: warning: unused variable `dummy_int'\n/p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c: In function `php_gd_parse':\n/p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c:1138: warning: implicit declaration of function `php_gd_lex'\n/p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y: At top level:\n/p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y:864: warning: return type defaults to `int'\n/p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c: In function `zif_msg_receive':\n/p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c:318: warning: passing arg 2 of `php_var_unserialize' from incompatible pointer type\n/p2/var/php_gcov/PHP_4_4/ext/yp/yp.c: In function `zif_yp_err_string':\n/p2/var/php_gcov/PHP_4_4/ext/yp/yp.c:372: warning: assignment discards qualifiers from pointer target type\nZend/zend_language_scanner.c:5944: warning: `yy_fatal_error' defined but not used\nZend/zend_language_scanner.c:2627: warning: `yy_last_accepting_state' defined but not used\nZend/zend_language_scanner.c:2628: warning: `yy_last_accepting_cpos' defined but not used\nZend/zend_language_scanner.c:2634: warning: `yy_more_flag' defined but not used\nZend/zend_language_scanner.c:2635: warning: `yy_more_len' defined but not used\nZend/zend_language_scanner.c:5483: warning: `yyunput' defined but not used\nZend/zend_language_scanner.c:5929: warning: `yy_top_state' defined but not used\nconflicts: 2 shift/reduce\nZend/zend_ini_scanner.c:457: warning: `yy_last_accepting_state' defined but not used\nZend/zend_ini_scanner.c:458: warning: `yy_last_accepting_cpos' defined but not used\nZend/zend_ini_scanner.c:1361: warning: `yyunput' defined but not used\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c: In function `_safe_emalloc':\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 3)\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 4)\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 5)\n/p2/var/php_gcov/PHP_4_4/Zend/zend_ini.c:338: warning: `zend_ini_displayer_cb' defined but not used\next/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n/p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp'\next/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n/p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp'\next/ming/ming.o(.text+0xc115): In function `zim_swfmovie_namedAnchor':\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2207: undefined reference to `SWFMovie_namedAnchor'\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2209: undefined reference to `SWFMovie_xpto'\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2259: undefined reference to `SWFMovie_foo'\next/ming/ming.o(.text+0x851): In function `zif_ming_setSWFCompression':\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:154: undefined reference to `Ming_setSWFCompression'\n\";\n\n\t// Regular expression to select the error and warning information\n\t// tuned for gcc 3.4, 4.0 and 4.1\n\t$gcc_regex = '/^((.+)(\\(\\.text\\+0x[[:xdigit:]]+\\))?: In function [`\\'](\\w+)\\':\\s+)?'.\n\t\t'((?(1)(?(3)[^:\\n]+|\\2)|[^:\\n]+)):(\\d+): (?:(error|warning):\\s+)?(.+)'.\n\t\tstr_repeat('(?:\\s+\\5:(\\d+): (?:(error|warning):\\s+)?(.+))?', 99). // capture up to 100 errors\n\t\t'/mS';\n\n\nvar_dump(preg_match_all($gcc_regex, $sampledata, $m, PREG_SET_ORDER));\nprint_r($m);\n\n?>\n--EXPECT--\nint(24)\nArray\n(\n    [0] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swfbitmap_init':\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:323: warning: assignment from incompatible pointer type\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swfbitmap_init':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c\n            [3] => \n            [4] => zif_swfbitmap_init\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c\n            [6] => 323\n            [7] => warning\n            [8] => assignment from incompatible pointer type\n        )\n\n    [1] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swftextfield_setFont':\n/p2/var/php_gcov/PHP_4_4/ext/ming/ming.c:2597: warning: passing arg 2 of `SWFTextField_setFont' from incompatible pointer type\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c: In function `zif_swftextfield_setFont':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c\n            [3] => \n            [4] => zif_swftextfield_setFont\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/ming/ming.c\n            [6] => 2597\n            [7] => warning\n            [8] => passing arg 2 of `SWFTextField_setFont' from incompatible pointer type\n        )\n\n    [2] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/oci8/oci8.c:1027: warning: `oci_ping' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => /p2/var/php_gcov/PHP_4_4/ext/oci8/oci8.c\n            [6] => 1027\n            [7] => warning\n            [8] => `oci_ping' defined but not used\n        )\n\n    [3] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getpgid':\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:484: warning: implicit declaration of function `getpgid'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getpgid':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c\n            [3] => \n            [4] => zif_posix_getpgid\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c\n            [6] => 484\n            [7] => warning\n            [8] => implicit declaration of function `getpgid'\n        )\n\n    [4] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getsid':\n/p2/var/php_gcov/PHP_4_4/ext/posix/posix.c:506: warning: implicit declaration of function `getsid'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c: In function `zif_posix_getsid':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c\n            [3] => \n            [4] => zif_posix_getsid\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/posix/posix.c\n            [6] => 506\n            [7] => warning\n            [8] => implicit declaration of function `getsid'\n        )\n\n    [5] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_read_files':\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:302: warning: implicit declaration of function `pread'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_read_files':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c\n            [3] => \n            [4] => ps_read_files\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c\n            [6] => 302\n            [7] => warning\n            [8] => implicit declaration of function `pread'\n        )\n\n    [6] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_write_files':\n/p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c:340: warning: implicit declaration of function `pwrite'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c: In function `ps_write_files':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c\n            [3] => \n            [4] => ps_write_files\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/session/mod_files.c\n            [6] => 340\n            [7] => warning\n            [8] => implicit declaration of function `pwrite'\n        )\n\n    [7] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_get_option':\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1862: warning: unused variable `timeout'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_get_option':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c\n            [3] => \n            [4] => zif_socket_get_option\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c\n            [6] => 1862\n            [7] => warning\n            [8] => unused variable `timeout'\n        )\n\n    [8] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_set_option':\n/p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c:1941: warning: unused variable `timeout'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c: In function `zif_socket_set_option':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c\n            [3] => \n            [4] => zif_socket_set_option\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/sockets/sockets.c\n            [6] => 1941\n            [7] => warning\n            [8] => unused variable `timeout'\n        )\n\n    [9] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/regex/regexec.c:19: warning: `nope' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => /p2/var/php_gcov/PHP_4_4/regex/regexec.c\n            [6] => 19\n            [7] => warning\n            [8] => `nope' defined but not used\n        )\n\n    [10] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/exec.c:50: warning: `php_make_safe_mode_command' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/exec.c\n            [6] => 50\n            [7] => warning\n            [8] => `php_make_safe_mode_command' defined but not used\n        )\n\n    [11] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c: In function `php_handle_jpc':\n/p2/var/php_gcov/PHP_4_4/ext/standard/image.c:604: warning: unused variable `dummy_int'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c: In function `php_handle_jpc':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c\n            [3] => \n            [4] => php_handle_jpc\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/image.c\n            [6] => 604\n            [7] => warning\n            [8] => unused variable `dummy_int'\n        )\n\n    [12] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c: In function `php_gd_parse':\n/p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c:1138: warning: implicit declaration of function `php_gd_lex'\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c: In function `php_gd_parse':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c\n            [3] => \n            [4] => php_gd_parse\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.c\n            [6] => 1138\n            [7] => warning\n            [8] => implicit declaration of function `php_gd_lex'\n        )\n\n    [13] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y:864: warning: return type defaults to `int'\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => /p2/var/php_gcov/PHP_4_4/ext/standard/parsedate.y\n            [6] => 864\n            [7] => warning\n            [8] => return type defaults to `int'\n        )\n\n    [14] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c: In function `zif_msg_receive':\n/p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c:318: warning: passing arg 2 of `php_var_unserialize' from incompatible pointer type\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c: In function `zif_msg_receive':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c\n            [3] => \n            [4] => zif_msg_receive\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/sysvmsg/sysvmsg.c\n            [6] => 318\n            [7] => warning\n            [8] => passing arg 2 of `php_var_unserialize' from incompatible pointer type\n        )\n\n    [15] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c: In function `zif_yp_err_string':\n/p2/var/php_gcov/PHP_4_4/ext/yp/yp.c:372: warning: assignment discards qualifiers from pointer target type\n            [1] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c: In function `zif_yp_err_string':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c\n            [3] => \n            [4] => zif_yp_err_string\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/yp/yp.c\n            [6] => 372\n            [7] => warning\n            [8] => assignment discards qualifiers from pointer target type\n        )\n\n    [16] => Array\n        (\n            [0] => Zend/zend_language_scanner.c:5944: warning: `yy_fatal_error' defined but not used\nZend/zend_language_scanner.c:2627: warning: `yy_last_accepting_state' defined but not used\nZend/zend_language_scanner.c:2628: warning: `yy_last_accepting_cpos' defined but not used\nZend/zend_language_scanner.c:2634: warning: `yy_more_flag' defined but not used\nZend/zend_language_scanner.c:2635: warning: `yy_more_len' defined but not used\nZend/zend_language_scanner.c:5483: warning: `yyunput' defined but not used\nZend/zend_language_scanner.c:5929: warning: `yy_top_state' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => Zend/zend_language_scanner.c\n            [6] => 5944\n            [7] => warning\n            [8] => `yy_fatal_error' defined but not used\n            [9] => 2627\n            [10] => warning\n            [11] => `yy_last_accepting_state' defined but not used\n            [12] => 2628\n            [13] => warning\n            [14] => `yy_last_accepting_cpos' defined but not used\n            [15] => 2634\n            [16] => warning\n            [17] => `yy_more_flag' defined but not used\n            [18] => 2635\n            [19] => warning\n            [20] => `yy_more_len' defined but not used\n            [21] => 5483\n            [22] => warning\n            [23] => `yyunput' defined but not used\n            [24] => 5929\n            [25] => warning\n            [26] => `yy_top_state' defined but not used\n        )\n\n    [17] => Array\n        (\n            [0] => Zend/zend_ini_scanner.c:457: warning: `yy_last_accepting_state' defined but not used\nZend/zend_ini_scanner.c:458: warning: `yy_last_accepting_cpos' defined but not used\nZend/zend_ini_scanner.c:1361: warning: `yyunput' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => Zend/zend_ini_scanner.c\n            [6] => 457\n            [7] => warning\n            [8] => `yy_last_accepting_state' defined but not used\n            [9] => 458\n            [10] => warning\n            [11] => `yy_last_accepting_cpos' defined but not used\n            [12] => 1361\n            [13] => warning\n            [14] => `yyunput' defined but not used\n        )\n\n    [18] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c: In function `_safe_emalloc':\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 3)\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 4)\n/p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c:237: warning: long int format, size_t arg (arg 5)\n            [1] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c: In function `_safe_emalloc':\n\n            [2] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c\n            [3] => \n            [4] => _safe_emalloc\n            [5] => /p2/var/php_gcov/PHP_4_4/Zend/zend_alloc.c\n            [6] => 237\n            [7] => warning\n            [8] => long int format, size_t arg (arg 3)\n            [9] => 237\n            [10] => warning\n            [11] => long int format, size_t arg (arg 4)\n            [12] => 237\n            [13] => warning\n            [14] => long int format, size_t arg (arg 5)\n        )\n\n    [19] => Array\n        (\n            [0] => /p2/var/php_gcov/PHP_4_4/Zend/zend_ini.c:338: warning: `zend_ini_displayer_cb' defined but not used\n            [1] => \n            [2] => \n            [3] => \n            [4] => \n            [5] => /p2/var/php_gcov/PHP_4_4/Zend/zend_ini.c\n            [6] => 338\n            [7] => warning\n            [8] => `zend_ini_displayer_cb' defined but not used\n        )\n\n    [20] => Array\n        (\n            [0] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n/p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp'\n            [1] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n\n            [2] => ext/mysql/libmysql/my_tempnam.o\n            [3] => (.text+0x80)\n            [4] => my_tempnam\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c\n            [6] => 115\n            [7] => warning\n            [8] => the use of `tempnam' is dangerous, better use `mkstemp'\n        )\n\n    [21] => Array\n        (\n            [0] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n/p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c:115: warning: the use of `tempnam' is dangerous, better use `mkstemp'\n            [1] => ext/mysql/libmysql/my_tempnam.o(.text+0x80): In function `my_tempnam':\n\n            [2] => ext/mysql/libmysql/my_tempnam.o\n            [3] => (.text+0x80)\n            [4] => my_tempnam\n            [5] => /p2/var/php_gcov/PHP_4_4/ext/mysql/libmysql/my_tempnam.c\n            [6] => 115\n            [7] => warning\n            [8] => the use of `tempnam' is dangerous, better use `mkstemp'\n        )\n\n    [22] => Array\n        (\n            [0] => ext/ming/ming.o(.text+0xc115): In function `zim_swfmovie_namedAnchor':\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2207: undefined reference to `SWFMovie_namedAnchor'\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2209: undefined reference to `SWFMovie_xpto'\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:2259: undefined reference to `SWFMovie_foo'\n            [1] => ext/ming/ming.o(.text+0xc115): In function `zim_swfmovie_namedAnchor':\n\n            [2] => ext/ming/ming.o\n            [3] => (.text+0xc115)\n            [4] => zim_swfmovie_namedAnchor\n            [5] => /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c\n            [6] => 2207\n            [7] => \n            [8] => undefined reference to `SWFMovie_namedAnchor'\n            [9] => 2209\n            [10] => \n            [11] => undefined reference to `SWFMovie_xpto'\n            [12] => 2259\n            [13] => \n            [14] => undefined reference to `SWFMovie_foo'\n        )\n\n    [23] => Array\n        (\n            [0] => ext/ming/ming.o(.text+0x851): In function `zif_ming_setSWFCompression':\n/p2/var/php_gcov/PHP_5_2/ext/ming/ming.c:154: undefined reference to `Ming_setSWFCompression'\n            [1] => ext/ming/ming.o(.text+0x851): In function `zif_ming_setSWFCompression':\n\n            [2] => ext/ming/ming.o\n            [3] => (.text+0x851)\n            [4] => zif_ming_setSWFCompression\n            [5] => /p2/var/php_gcov/PHP_5_2/ext/ming/ming.c\n            [6] => 154\n            [7] => \n            [8] => undefined reference to `Ming_setSWFCompression'\n        )\n\n)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/006.phpt",
    "content": "--TEST--\npreg_replace() with array of failing regular expressions\n--INI--\npcre.backtrack_limit=100000\n--FILE--\n<?php\n\n$text = '[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]';\n$result = preg_replace(array('#\\[(right)\\](((?R)|[^[]+?|\\[)*)\\[/\\\\1\\]#siU', '#\\[(right)\\](((?R)|[^[]+?|\\[)*)\\[/\\\\1\\]#siU'), '', $text);\nvar_dump($text);\nvar_dump($result);\n\n$result = preg_replace('#\\[(right)\\](((?R)|[^[]+?|\\[)*)\\[/\\\\1\\]#siU', '', $text);\nvar_dump($text);\nvar_dump($result);\n\necho \"Done\\n\";\n?>\n--EXPECTF--\t\nstring(58) \"[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]\"\nNULL\nstring(58) \"[CODE]&lt;td align=&quot;$stylevar[right]&quot;&gt;[/CODE]\"\nNULL\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/007.phpt",
    "content": "--TEST--\npreg_replace_callback() with callback that modifies subject string\n--SKIPIF--\n<?php\nif (@preg_match('/./u', '') === false) {\n\tdie('skip no utf8 support in PCRE library');\n}\n?>\n--FILE--\n<?php\n\nfunction evil($x) {\n\tglobal $txt;\n\t$txt[3] = \"\\xFF\";\n\tvar_dump($x);\n\treturn $x[0];\n}\n\n$txt = \"ola123\";\nvar_dump(preg_replace_callback('#.#u', 'evil', $txt));\nvar_dump($txt);\nvar_dump(preg_last_error() == PREG_NO_ERROR);\n\nvar_dump(preg_replace_callback('#.#u', 'evil', $txt));\nvar_dump(preg_last_error() == PREG_BAD_UTF8_ERROR);\n\necho \"Done!\\n\";\n?>\n--EXPECT--\narray(1) {\n  [0]=>\n  string(1) \"o\"\n}\narray(1) {\n  [0]=>\n  string(1) \"l\"\n}\narray(1) {\n  [0]=>\n  string(1) \"a\"\n}\narray(1) {\n  [0]=>\n  string(1) \"1\"\n}\narray(1) {\n  [0]=>\n  string(1) \"2\"\n}\narray(1) {\n  [0]=>\n  string(1) \"3\"\n}\nstring(6) \"ola123\"\nstring(6) \"ola23\"\nbool(true)\nNULL\nbool(true)\nDone!\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/backtrack_limit.phpt",
    "content": "--TEST--\nBacktracking limit\n--SKIPIF--\n<?php\nif (@preg_match_all('/\\p{N}/', '0123456789', $dummy) === false) {\n\tdie(\"skip no support for \\p support PCRE library\");\n}\n?>\n--INI--\npcre.backtrack_limit=2\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/.*\\p{N}/', '0123456789', $dummy));\nvar_dump(preg_last_error() === PREG_BACKTRACK_LIMIT_ERROR);\n\nvar_dump(preg_match_all('/\\p{Nd}/', '0123456789', $dummy));\nvar_dump(preg_last_error() === PREG_NO_ERROR);\n\n?>\n--EXPECT--\nbool(false)\nbool(true)\nint(10)\nbool(true)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug20528.phpt",
    "content": "--TEST--\nBug #20528 (preg_split() drops characters (re-opens Bug #15413)) \n--FILE--\n<?php\n\t$data = '(#11/19/2002#)';\n\tvar_dump(preg_split('/\\b/', $data));\n?>\n--EXPECT--\narray(7) {\n  [0]=>\n  string(2) \"(#\"\n  [1]=>\n  string(2) \"11\"\n  [2]=>\n  string(1) \"/\"\n  [3]=>\n  string(2) \"19\"\n  [4]=>\n  string(1) \"/\"\n  [5]=>\n  string(4) \"2002\"\n  [6]=>\n  string(2) \"#)\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug21732.phpt",
    "content": "--TEST--\nBug #21732 (preg_replace() segfaults with invalid parameters)\n--INI--\nerror_reporting=0\n--FILE--\n<?php\nclass foo {\n\tfunction cb($param) {\n\t\tvar_dump($param);\n\t\treturn \"yes!\";\n\t}\n}\n\nvar_dump(preg_replace('', array(), ''));\nvar_dump(preg_replace_callback(\"/(ab)(cd)(e)/\", array(new foo(), \"cb\"), 'abcde'));\n?>\n--EXPECT--\nbool(false)\narray(4) {\n  [0]=>\n  string(5) \"abcde\"\n  [1]=>\n  string(2) \"ab\"\n  [2]=>\n  string(2) \"cd\"\n  [3]=>\n  string(1) \"e\"\n}\nstring(4) \"yes!\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug21758.phpt",
    "content": "--TEST--\nBug #21758 (preg_replace_callback() not working with class methods)\n--FILE--\n<?php\n  class Foo {\n    function foo() {\n      \n      $s = 'preg_replace() is broken';\n      \n      var_dump(preg_replace_callback(\n              '/broken/',\n              array(&$this, 'bar'),\n              $s\n           ));\n    }\n    \n    function bar() {\n      return 'working';\n    }\n    \n  } // of Foo\n\n  $o = new Foo;\n?>\n--EXPECT--\nstring(25) \"preg_replace() is working\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug26927.phpt",
    "content": "--TEST--\nBug #26927 (preg_quote() does not escape \\0) \n--FILE--\n<?php\n\t$str = \"a\\000b\";\n\t$str_quoted = preg_quote($str);\n\tvar_dump(preg_match(\"!{$str_quoted}!\", $str), $str_quoted);\n?>\n--EXPECT--\nint(1)\nstring(6) \"a\\000b\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug27011.phpt",
    "content": "--TEST--\nBug #27011 (segfault in preg_match_all())\n--FILE--\n<?php\n\nvar_dump(preg_match_all('|(\\w+)://([^\\s\"<]*[\\w+#?/&=])|', \"This is a text string\", $matches, PREG_SET_ORDER));\nvar_dump($matches);\n\n?>\n--EXPECT--\nint(0)\narray(0) {\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug27103.phpt",
    "content": "--TEST--\nBug #27103 (preg_split('//u') incorrectly splits UTF-8 strings into octets)\n--SKIPIF--\n<?php\nif (@preg_match('/./u', '') === false) {\n\tdie('skip no utf8 support in PCRE library');\n}\n?>\n--FILE--\n<?php\nfunction iter($ar)\n{\n\tforeach ($ar as $c) {\n\t\techo htmlentities($c, 0, \"UTF-8\"), \": \", strlen($c), \"\\n\";\n\t}\n}\n$teststr = \"\\xe2\\x82\\xac hi there\";\niter(preg_split('//u', $teststr, -1, PREG_SPLIT_NO_EMPTY));\npreg_match_all('/./u', $teststr, $matches);\niter($matches[0]);\n?>\n--EXPECT--\n&euro;: 3\n : 1\nh: 1\ni: 1\n : 1\nt: 1\nh: 1\ne: 1\nr: 1\ne: 1\n&euro;: 3\n : 1\nh: 1\ni: 1\n : 1\nt: 1\nh: 1\ne: 1\nr: 1\ne: 1\n\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug34790.phpt",
    "content": "--TEST--\nBug #34790 (preg_match_all(), named capturing groups, variable assignment/return => crash)\n--FILE--\n<?php\nfunction func1(){\n        $string = 'what the word and the other word the';\n        preg_match_all('/(?P<word>the)/', $string, $matches);\n        return $matches['word'];\n}\n$words = func1();\nvar_dump($words);\n?>\n--EXPECT--\narray(4) {\n  [0]=>\n  string(3) \"the\"\n  [1]=>\n  string(3) \"the\"\n  [2]=>\n  string(3) \"the\"\n  [3]=>\n  string(3) \"the\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug37800.phpt",
    "content": "--TEST--\nBug #37800 (preg_replace() limit parameter odd behaviour)\n--FILE--\n<?php\n$s_string = '1111111111';\n$s_search = '/1/';\n$s_replace = 'One ';\n$i_limit = 1;\n$i_count = 0;\n\n$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,\n$i_count);\necho \"Output = \" . var_export($s_output, True) . \"\\n\";\necho \"Count  = $i_count\\n\";\nvar_dump(preg_last_error() === PREG_NO_ERROR);\n\n$i_limit = strlen($s_string);\n$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,\n$i_count);\necho \"Output = \" . var_export($s_output, True) . \"\\n\";\necho \"Count  = $i_count\\n\";\nvar_dump(preg_last_error() === PREG_NO_ERROR);\n\n?>\n--EXPECT--\nOutput = 'One 111111111'\nCount  = 1\nbool(true)\nOutput = 'One One One One One One One One One One '\nCount  = 10\nbool(true)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug37911.phpt",
    "content": "--TEST--\nBug #37911 (preg_replace_callback ignores named groups)\n--FILE--\n<?php\n\nfunction callback($match)\n{\n\tvar_dump($match);\n\treturn $match[1].'/'.strlen($match['name']);\n}\n\nvar_dump(preg_replace_callback('|(?P<name>blub)|', 'callback', 'bla blub blah'));\n\nvar_dump(preg_match('|(?P<name>blub)|', 'bla blub blah', $m));\nvar_dump($m);\n\nvar_dump(preg_replace_callback('|(?P<1>blub)|', 'callback', 'bla blub blah'));\n\n?>\n--EXPECTF--\narray(3) {\n  [0]=>\n  string(4) \"blub\"\n  [\"name\"]=>\n  string(4) \"blub\"\n  [1]=>\n  string(4) \"blub\"\n}\nstring(15) \"bla blub/4 blah\"\nint(1)\narray(3) {\n  [0]=>\n  string(4) \"blub\"\n  [\"name\"]=>\n  string(4) \"blub\"\n  [1]=>\n  string(4) \"blub\"\n}\n\nWarning: preg_replace_callback(): Numeric named subpatterns are not allowed in %sbug37911.php on line 14\nNULL\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug38600.phpt",
    "content": "--TEST--\nBug #38600 (infinite loop in pcre with extended class)\n--FILE--\n<?php\n$foo = 'bla bla bla';\n\nvar_dump(preg_match('/(?<!\\w)(0x[\\p{N}]+[lL]?|[\\p{Nd}]+(e[\\p{Nd}]*)?[lLdDfF]?)(?!\\w)/', $foo, $m));\nvar_dump($m);\n\n?>\n--EXPECT--\nint(0)\narray(0) {\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug40195.phpt",
    "content": "--TEST--\nBug #40195 (pcre 6.7 regression)\n--FILE--\n<?php\n\nvar_dump(preg_match('@^(/([a-z]*))*$@', '//abcde', $m)); var_dump($m);\nvar_dump(preg_match('@^(/(?:[a-z]*))*$@', '//abcde', $m)); var_dump($m);\n\nvar_dump(preg_match('@^(/([a-z]+))+$@', '/a/abcde', $m)); var_dump($m);\nvar_dump(preg_match('@^(/(?:[a-z]+))+$@', '/a/abcde', $m)); var_dump($m);\n\n?>\n--EXPECT--\nint(1)\narray(3) {\n  [0]=>\n  string(7) \"//abcde\"\n  [1]=>\n  string(6) \"/abcde\"\n  [2]=>\n  string(5) \"abcde\"\n}\nint(1)\narray(2) {\n  [0]=>\n  string(7) \"//abcde\"\n  [1]=>\n  string(6) \"/abcde\"\n}\nint(1)\narray(3) {\n  [0]=>\n  string(8) \"/a/abcde\"\n  [1]=>\n  string(6) \"/abcde\"\n  [2]=>\n  string(5) \"abcde\"\n}\nint(1)\narray(2) {\n  [0]=>\n  string(8) \"/a/abcde\"\n  [1]=>\n  string(6) \"/abcde\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug40909.phpt",
    "content": "--TEST--\nBug #40909 (pcre 7.0 regression)\n--FILE--\n<?php\n            \n$pattern =\n\"/\\s([\\w_\\.\\/]+)(?:=([\\'\\\"]?(?:[\\w\\d\\s\\?=\\(\\)\\.,'_#\\/\\\\:;&-]|(?:\\\\\\\\\\\"|\\\\\\')?)+[\\'\\\"]?))?/\";\n$context = \"<simpletag an_attribute=\\\"simpleValueInside\\\">\";\n\n$match = array();\n\nif ($result =preg_match_all($pattern, $context, $match))\n{\n\nvar_dump($result);\nvar_dump($match);\n}\n\n?>\n--EXPECT--\nint(1)\narray(3) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(33) \" an_attribute=\"simpleValueInside\"\"\n  }\n  [1]=>\n  array(1) {\n    [0]=>\n    string(12) \"an_attribute\"\n  }\n  [2]=>\n  array(1) {\n    [0]=>\n    string(19) \"\"simpleValueInside\"\"\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug41050.phpt",
    "content": "--TEST--\nBug #41050 (pcre 7.0 regression)\n--FILE--\n<?php\n// by legolas558\n\n$regex = '/(insert|drop|create|select|delete|update)([^;\\']*('.\"('[^']*')+\".')?)*(;|$)/i';\n\n$sql = 'SELECT * FROM #__components';\n\nif (preg_match($regex,$sql, $m)) echo 'matched';\nelse echo 'not matched';\n\nprint_r($m);\n\n?>\n--EXPECT--\nmatchedArray\n(\n    [0] => SELECT * FROM #__components\n    [1] => SELECT\n    [2] => \n    [3] => \n    [4] => \n    [5] => \n)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug41148.phpt",
    "content": "--TEST--\nBug #41148 (pcre 7.0 regression)\n--FILE--\n<?php\n\n    $letexte=\"<br><br>\";\n    $ligne_horizontale = $puce = $debut_intertitre = $fin_intertitre = '';\n\n    $cherche1 = array(\n        /* 0 */     \"/\\n(----+|____+)/S\",\n        /* 1 */     \"/\\n-- */S\",\n        /* 2 */     \"/\\n- */S\",\n        /* 3 */     \"/\\n_ +/S\",\n        /* 4 */   \"/(^|[^{])[{][{][{]/S\",\n        /* 5 */   \"/[}][}][}]($|[^}])/S\",\n        /* 6 */     \"/(( *)\\n){2,}(<br[[:space:]]*\\/?\".\">)?/S\",\n        /* 7 */     \"/[{][{]/S\",\n        /* 8 */     \"/[}][}]/S\",\n        /* 9 */     \"/[{]/S\",\n        /* 10 */    \"/[}]/S\",\n        /* 11 */    \"/(<br[[:space:]]*\\/?\".\">){2,}/S\",\n        /* 12 */    \"/<p>([\\n]*(<br[[:space:]]*\\/?\".\">)*)*/S\",\n        /* 13 */    \"/<quote>/S\",\n        /* 14 */    \"/<\\/quote>/S\"\n    );\n    $remplace1 = array(\n        /* 0 */     \"\\n\\n$ligne_horizontale\\n\\n\",\n        /* 1 */     \"\\n<br />&mdash;&nbsp;\",\n        /* 2 */     \"\\n<br />$puce&nbsp;\",\n        /* 3 */     \"\\n<br />\",\n        /* 4 */     \"\\$1\\n\\n$debut_intertitre\",\n        /* 5 */     \"$fin_intertitre\\n\\n\\$1\",\n        /* 6 */     \"<p>\",\n        /* 7 */     \"<strong class=\\\"spip\\\">\",\n        /* 8 */     \"</strong>\",\n        /* 9 */     \"<i class=\\\"spip\\\">\",\n        /* 10 */    \"</i>\",\n        /* 11 */    \"<p>\",\n        /* 12 */    \"<p>\",\n        /* 13 */    \"<blockquote class=\\\"spip\\\"><p>\",\n        /* 14 */    \"</blockquote><p>\"\n    );\n    $letexte = preg_replace($cherche1, $remplace1, $letexte);\n    $letexte = preg_replace(\"@^ <br />@S\", \"\", $letexte);\n\n    print $letexte;\n\n?>\n--EXPECT--\n<p>\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug41638.phpt",
    "content": "--TEST--\nBug #41638 (pcre 7.0 regression)\n--FILE--\n<?php\n$str = \"repeater id='loopt' dataSrc=subject colums=2\";\n\npreg_match_all(\"/(['\\\"])((.*(\\\\\\\\\\\\1)*)*)\\\\1/sU\",$str,$str_instead);\nprint_r($str_instead);\n\n// these two are from Magnus Holmgren (extracted from a pcre-dev mailing list post)\npreg_match_all(\"/(['\\\"])((?:\\\\\\\\\\\\1|.)*)\\\\1/sU\", $str, $str_instead);\nprint_r($str_instead);\n\npreg_match_all(\"/(['\\\"])(.*)(?<!\\\\\\\\)\\\\1/sU\", $str, $str_instead);\nprint_r($str_instead);\n\n?>\n--EXPECT--\nArray\n(\n    [0] => Array\n        (\n            [0] => 'loopt'\n        )\n\n    [1] => Array\n        (\n            [0] => '\n        )\n\n    [2] => Array\n        (\n            [0] => loopt\n        )\n\n    [3] => Array\n        (\n            [0] => t\n        )\n\n    [4] => Array\n        (\n            [0] => \n        )\n\n)\nArray\n(\n    [0] => Array\n        (\n            [0] => 'loopt'\n        )\n\n    [1] => Array\n        (\n            [0] => '\n        )\n\n    [2] => Array\n        (\n            [0] => loopt\n        )\n\n)\nArray\n(\n    [0] => Array\n        (\n            [0] => 'loopt'\n        )\n\n    [1] => Array\n        (\n            [0] => '\n        )\n\n    [2] => Array\n        (\n            [0] => loopt\n        )\n\n)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug42298.phpt",
    "content": "--TEST--\nBug #42298 (pcre gives bogus results with /u)\n--FILE--\n<?php\n$str = \"A\\xc2\\xa3BC\";\npreg_match_all('/\\S\\S/u', $str, $m);\tvar_dump($m);\npreg_match_all('/\\S{2}/u', $str, $m);\tvar_dump($m);\n\n$str = \"A\\xe2\\x82\\xac \";\npreg_match_all('/\\W\\W/u', $str, $m);\tvar_dump($m);\npreg_match_all('/\\W{2}/u', $str, $m);\tvar_dump($m);\n\n?>\n--EXPECT--\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(3) \"A£\"\n    [1]=>\n    string(2) \"BC\"\n  }\n}\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(3) \"A£\"\n    [1]=>\n    string(2) \"BC\"\n  }\n}\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(4) \"€ \"\n  }\n}\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(4) \"€ \"\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug42737.phpt",
    "content": "--TEST--\nBug #42737 (preg_split('//u') triggers a E_NOTICE with newlines)\n--FILE--\n<?php\n\n$string = chr(13).chr(10);\n\n$array = preg_split('//u', $string, - 1, PREG_SPLIT_NO_EMPTY);\n\nvar_dump(array_map('ord', $array));\n\n?>\n--EXPECT--\narray(2) {\n  [0]=>\n  int(13)\n  [1]=>\n  int(10)\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug42945.phpt",
    "content": "--TEST--\nBug #42945 (preg_split() swallows part of the string)\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/\\b/', \"a'\", $m, PREG_OFFSET_CAPTURE));\nvar_dump($m);\n\nvar_dump(preg_split('/\\b/', \"a'\"));\nvar_dump(preg_split('/\\b/', \"a'\", -1, PREG_SPLIT_OFFSET_CAPTURE));\nvar_dump(preg_split('/\\b/', \"a'\", -1, PREG_SPLIT_NO_EMPTY));\nvar_dump(preg_split('/\\b/', \"a'\", -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_OFFSET_CAPTURE));\n\n?>\n--EXPECT--\nint(2)\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(0) \"\"\n      [1]=>\n      int(0)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(0) \"\"\n      [1]=>\n      int(1)\n    }\n  }\n}\narray(3) {\n  [0]=>\n  string(0) \"\"\n  [1]=>\n  string(1) \"a\"\n  [2]=>\n  string(1) \"'\"\n}\narray(3) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"'\"\n    [1]=>\n    int(1)\n  }\n}\narray(2) {\n  [0]=>\n  string(1) \"a\"\n  [1]=>\n  string(1) \"'\"\n}\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"'\"\n    [1]=>\n    int(1)\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug44191.phpt",
    "content": "--TEST--\nBug #44191 (preg_grep messes up array index)\n--FILE--\n<?php\n\n$array = range(1, 10);\n\npreg_grep('/asdf/', $array);\n\nwhile (list($x) = each($array)) {\n\tprint $x;\n}\n\n?>\n--EXPECT--\n0123456789\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug44214.phpt",
    "content": "--TEST--\nBug #44214 (crash with preg_replace_callback() and global variable)\n--FILE--\n<?php\n$string = 'aaa bbb ccc ddd eee ccc aaa bbb';\n\n$array = array();\n\nfunction myCallBack( $match ) {\n    global $array;\n    $array[] = $match;\n    return 'xxx';\n}\n\nvar_dump(preg_replace_callback( '`a+`', 'myCallBack', $string));\nvar_dump($array);\n?>\n--EXPECT--\nstring(31) \"xxx bbb ccc ddd eee ccc xxx bbb\"\narray(2) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(3) \"aaa\"\n  }\n  [1]=>\n  array(1) {\n    [0]=>\n    string(3) \"aaa\"\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug44214_2.phpt",
    "content": "--TEST--\nBug #44214-2 (crash with preg_replace_callback() and global variable)\n--FILE--\n<?php\n$string = 'aaa bbb ccc ddd eee ccc aaa bbb';\n\n$array = array();\n\nfunction myCallBack( $match ) {\n    global $array;\n    $array[] = $match[0];\n    return 'xxx';\n}\n\nvar_dump(preg_replace_callback( '`a+`', 'myCallBack', $string));\nvar_dump($array);\n?>\n--EXPECT--\nstring(31) \"xxx bbb ccc ddd eee ccc xxx bbb\"\narray(2) {\n  [0]=>\n  string(3) \"aaa\"\n  [1]=>\n  string(3) \"aaa\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug44925.phpt",
    "content": "--TEST--\nBug #44925 (preg_grep() modifies input array)\n--FILE--\n<?php\n$str1 = 'a';\n$str2 = 'b';\n\n$array=Array(\"1\",2,3,1.1,FALSE,NULL,Array(), $str1, &$str2);\n\nvar_dump($array);\n\nvar_dump(preg_grep('/do not match/',$array));\n\n$a = preg_grep('/./',$array);\nvar_dump($a);\n\n$str1 = 'x';\n$str2 = 'y';\n\nvar_dump($a); // check if array is still ok\n\nvar_dump($array);\n\n?>\n--EXPECTF--\narray(9) {\n  [0]=>\n  string(1) \"1\"\n  [1]=>\n  int(2)\n  [2]=>\n  int(3)\n  [3]=>\n  float(1.1)\n  [4]=>\n  bool(false)\n  [5]=>\n  NULL\n  [6]=>\n  array(0) {\n  }\n  [7]=>\n  string(1) \"a\"\n  [8]=>\n  &string(1) \"b\"\n}\n\nNotice: Array to string conversion in %sbug44925.php on line 9\narray(0) {\n}\n\nNotice: Array to string conversion in %sbug44925.php on line 11\narray(7) {\n  [0]=>\n  string(1) \"1\"\n  [1]=>\n  int(2)\n  [2]=>\n  int(3)\n  [3]=>\n  float(1.1)\n  [6]=>\n  array(0) {\n  }\n  [7]=>\n  string(1) \"a\"\n  [8]=>\n  &string(1) \"b\"\n}\narray(7) {\n  [0]=>\n  string(1) \"1\"\n  [1]=>\n  int(2)\n  [2]=>\n  int(3)\n  [3]=>\n  float(1.1)\n  [6]=>\n  array(0) {\n  }\n  [7]=>\n  string(1) \"a\"\n  [8]=>\n  &string(1) \"y\"\n}\narray(9) {\n  [0]=>\n  string(1) \"1\"\n  [1]=>\n  int(2)\n  [2]=>\n  int(3)\n  [3]=>\n  float(1.1)\n  [4]=>\n  bool(false)\n  [5]=>\n  NULL\n  [6]=>\n  array(0) {\n  }\n  [7]=>\n  string(1) \"a\"\n  [8]=>\n  &string(1) \"y\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug47229.phpt",
    "content": "--TEST--\nBug #47229 (preg_quote() doesn't escape -)\n--FILE--\n<?php\n\nvar_dump(preg_quote('-oh really?'));\n\n// make sure there's no regression in matching\npreg_match('/[a\\-c]+/', 'a---b', $m);\nvar_dump($m);\n\npreg_match('/[a\\-c]+/', 'a\\-', $m);\nvar_dump($m);\n\npreg_match(\"/a\\-{2,}/\", 'a----a', $m);\nvar_dump($m);\n\npreg_match(\"/a\\-{1,}/\", 'a\\----a', $m);\nvar_dump($m);\n\n?>\n--EXPECTF--\n%string|unicode%(13) \"\\-oh really\\?\"\narray(1) {\n  [0]=>\n  %string|unicode%(4) \"a---\"\n}\narray(1) {\n  [0]=>\n  %string|unicode%(1) \"a\"\n}\narray(1) {\n  [0]=>\n  %string|unicode%(5) \"a----\"\n}\narray(0) {\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug47662.phpt",
    "content": "--TEST--\nBug #47662 (support more than 127 named subpatterns)\n--FILE--\n<?php\n\n$regex = '@';\nfor($bar=0; $bar<1027; $bar++) {\n\t$regex .= '((?P<x'.$bar.'>))';\n}\n$regex .= 'fo+bar@';\n\nvar_dump(preg_match($regex, 'foobar'));\necho \"Done!\\n\";\n\n?>\n--EXPECT--\nint(1)\nDone!\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug52732.phpt",
    "content": "--TEST--\nBug #52732 (Docs say preg_match() returns FALSE on error, but it returns int(0))\n--INI--\npcre.backtrack_limit=1\n--FILE--\n<?php\n$ret = preg_match('/(?:\\D+|<\\d+>)*[!?]/', 'foobar foobar foobar');\n\nvar_dump($ret);\n\n?>\n--EXPECT--\nbool(false)"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug52971.phpt",
    "content": "--TEST--\nBug #52971 (PCRE-Meta-Characters not working with utf-8)\n--SKIPIF--\n<?php if ((double)PCRE_VERSION < 8.1) die('skip PCRE_VERSION >= 8.1 is required!'); ?>\n--FILE--\n<?php\n\n$message = 'Der ist ein Süßwasserpool Süsswasserpool ... verschiedene Wassersportmöglichkeiten bei ...';\n\n$pattern = '/\\bwasser/iu';\npreg_match_all($pattern, $message, $match, PREG_OFFSET_CAPTURE);\nvar_dump($match);\n\n$pattern = '/[^\\w]wasser/iu';\npreg_match_all($pattern, $message, $match, PREG_OFFSET_CAPTURE);\nvar_dump($match);\n\n?>\n--EXPECTF--\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(6) \"Wasser\"\n      [1]=>\n      int(61)\n    }\n  }\n}\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(7) \" Wasser\"\n      [1]=>\n      int(60)\n    }\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/bug63055.phpt",
    "content": "--TEST--\nBug #63055 (Segfault in zend_gc with SF2 testsuite)\n--FILE--\n<?php\n/* the default gc root size is 10,000 */\nfor ($i=0; $i<9998; $i++) {\n    $array = array();\n    $array[0] = &$array;\n    unset($array);\n}\n\n$matches = array(\"foo\" => \"bar\"); /* this bucket will trigger the segfault */\n$dummy   = array(\"dummy\");        /* used to trigger gc_collect_cycles */\n$dummy[1] = &$dummy;\n\n$matches[1] = &$matches;\n$matches[2] = $dummy;\n\npreg_match_all(\"/(\\d)+/\", \"foo123456bar\", $matches);\necho \"okey\";\n?>\n--EXPECTF--\nokey\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/cache_limit.phpt",
    "content": "--TEST--\nCompiled regex cache limit\n--FILE--\n<?php\ndefine('PREG_CACHE_SIZE', 4096+1);\n\n$re = '';\n$str = str_repeat('x', PREG_CACHE_SIZE);\n\nfor ($i=0; $i < PREG_CACHE_SIZE; ++$i) {\n\t$re .= '.';\n\tif (!preg_match(\"/$re/\", $str)) {\n\t\tdie('non match. error');\n\t}\n}\n\nvar_dump(preg_match('/./', $str));   // this one was already deleted from the cache\nvar_dump(preg_match(\"/$re/\", $str)); // but not this one\n\necho \"done\\n\";\n?>\n--EXPECT--\nint(1)\nint(1)\ndone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/delimiters.phpt",
    "content": "--TEST--\nDelimiters crash test\n--FILE--\n<?php\n\nvar_dump(preg_match('', ''));\nvar_dump(preg_match('      ', ''));\nvar_dump(preg_match('@@', ''));\nvar_dump(preg_match('12', ''));\nvar_dump(preg_match('<>', ''));\nvar_dump(preg_match('~a', ''));\nvar_dump(preg_match('@\\@\\@@', '@@'));\nvar_dump(preg_match('//z', '@@'));\nvar_dump(preg_match('{', ''));\n\n?>\n--EXPECTF--\nWarning: preg_match(): Empty regular expression in %sdelimiters.php on line 3\nbool(false)\n\nWarning: preg_match(): Empty regular expression in %sdelimiters.php on line 4\nbool(false)\nint(1)\n\nWarning: preg_match(): Delimiter must not be alphanumeric or backslash in %sdelimiters.php on line 6\nbool(false)\nint(1)\n\nWarning: preg_match(): No ending delimiter '~' found in %sdelimiters.php on line 8\nbool(false)\nint(1)\n\nWarning: preg_match(): Unknown modifier 'z' in %sdelimiters.php on line 10\nbool(false)\n\nWarning: preg_match(): No ending matching delimiter '}' found in %sdelimiters.php on line 11\nbool(false)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/dollar_endonly.phpt",
    "content": "--TEST--\nD (PCRE_DOLLAR_ENDONLY) modififer\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/^\\S+.+$/', \"aeiou\\n\", $m));\nvar_dump($m);\n\nvar_dump(preg_match_all('/^\\S+.+$/D', \"aeiou\\n\", $m));\nvar_dump($m);\n\nvar_dump(preg_match_all('/^\\S+\\s$/D', \"aeiou\\n\", $m));\nvar_dump($m);\n\n?>\n--EXPECT--\nint(1)\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(5) \"aeiou\"\n  }\n}\nint(0)\narray(1) {\n  [0]=>\n  array(0) {\n  }\n}\nint(1)\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(6) \"aeiou\n\"\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/grep.phpt",
    "content": "--TEST--\npreg_grep()\n--FILE--\n<?php\n$array = array('a', '1', 'q6', 'h20');\n\nvar_dump(preg_grep('/^(\\d|.\\d)$/', $array));\nvar_dump(preg_grep('/^(\\d|.\\d)$/', $array, PREG_GREP_INVERT));\n\n?>\n--EXPECT--\narray(2) {\n  [1]=>\n  string(1) \"1\"\n  [2]=>\n  string(2) \"q6\"\n}\narray(2) {\n  [0]=>\n  string(1) \"a\"\n  [3]=>\n  string(3) \"h20\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/grep2.phpt",
    "content": "--TEST--\npreg_grep() 2nd test\n--FILE--\n<?php\n\nvar_dump(preg_grep(1,array(),3,4));\nvar_dump(preg_grep(1, 2));\nvar_dump(preg_grep('/+/', array()));\n\n$array = array(5=>'a', 'x' => '1', 'xyz'=>'q6', 'h20');\n\nvar_dump(preg_grep('@^[a-z]+@', $array));\nvar_dump(preg_grep('@^[a-z]+@', $array, PREG_GREP_INVERT));\n\nini_set('pcre.recursion_limit', 1);\nvar_dump(preg_last_error() == PREG_NO_ERROR);\nvar_dump(preg_grep('@^[a-z]+@', $array));\nvar_dump(preg_last_error() == PREG_RECURSION_LIMIT_ERROR);\n\n?>\n--EXPECTF--\nWarning: preg_grep() expects at most 3 parameters, 4 given in %sgrep2.php on line 3\nNULL\n\nWarning: preg_grep() expects parameter 2 to be array, integer given in %sgrep2.php on line 4\nNULL\n\nWarning: preg_grep(): Compilation failed: nothing to repeat at offset 0 in %sgrep2.php on line 5\nbool(false)\narray(3) {\n  [5]=>\n  string(1) \"a\"\n  [\"xyz\"]=>\n  string(2) \"q6\"\n  [6]=>\n  string(3) \"h20\"\n}\narray(1) {\n  [\"x\"]=>\n  string(1) \"1\"\n}\nbool(true)\narray(0) {\n}\nbool(true)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/invalid_utf8.phpt",
    "content": "--TEST--\npreg_replace() and invalid UTF8\n--SKIPIF--\n<?php\nif (@preg_match('/./u', '') === false) {\n\tdie('skip no utf8 support in PCRE library');\n}\n?>\n--FILE--\n<?php\n\n$string = urldecode(\"search%e4\"); \n$result = preg_replace(\"#(&\\#x*)([0-9A-F]+);*#iu\",\"$1$2;\",$string); \nvar_dump($result); \nvar_dump(preg_last_error());\n\necho \"Done\\n\";\n?>\n--EXPECT--\t\nNULL\nint(4)\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/invalid_utf8_offset.phpt",
    "content": "--TEST--\npreg_replace() and invalid UTF8 offset\n--SKIPIF--\n<?php\nif (@preg_match('/./u', '') === false) {\n\tdie('skip no utf8 support in PCRE library');\n}\n?>\n--FILE--\n<?php\n\n$string = b\"\\xc3\\xa9 uma string utf8 bem formada\";\n\nvar_dump(preg_match(b'~.*~u', $string, $m, 0, 1));\nvar_dump($m);\nvar_dump(preg_last_error() == PREG_BAD_UTF8_OFFSET_ERROR);\n\nvar_dump(preg_match(b'~.*~u', $string, $m, 0, 2));\nvar_dump($m);\nvar_dump(preg_last_error() == PREG_NO_ERROR);\n\necho \"Done\\n\";\n?>\n--EXPECT--\nbool(false)\narray(0) {\n}\nbool(true)\nint(1)\narray(1) {\n  [0]=>\n  string(28) \" uma string utf8 bem formada\"\n}\nbool(true)\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/locales.phpt",
    "content": "--TEST--\nLocalized match\n--SKIPIF--\n<?php \n\nif (!function_exists('setlocale')) die('skip: setlocale() not available');\nif (!@setlocale(LC_ALL, 'pt_PT', 'pt', 'pt_PT.ISO8859-1', 'portuguese')) die('skip pt locale not available');\n\n?>\n--FILE--\n<?php\n\n// this tests if the cache is working correctly, as the char tables\n// must be rebuilt after the locale change\n\nsetlocale(LC_ALL, 'C', 'POSIX');\nvar_dump(preg_match('/^\\w{6}$/', 'a'));\n\nsetlocale(LC_ALL, 'pt_PT', 'pt', 'pt_PT.ISO8859-1', 'portuguese');\nvar_dump(preg_match('/^\\w{6}$/', 'a'));\n\nsetlocale(LC_ALL, 'C', 'POSIX');\nvar_dump(preg_match('/^\\w{6}$/', 'a'));\n\n?>\n--EXPECT--\nint(0)\nint(1)\nint(0)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/match_flags.phpt",
    "content": "--TEST--\npreg_match_all() flags\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/(.)x/', 'zxax', $match, PREG_PATTERN_ORDER));\nvar_dump($match);\n\nvar_dump(preg_match_all('/(.)x/', 'zxyx', $match, PREG_SET_ORDER));\nvar_dump($match);\n\nvar_dump(preg_match_all('/(.)x/', 'zxyx', $match, PREG_OFFSET_CAPTURE));\nvar_dump($match);\n\nvar_dump(preg_match_all('/(.)x/', 'zxyx', $match, PREG_SET_ORDER | PREG_OFFSET_CAPTURE));\nvar_dump($match);\n\n?>\n--EXPECT--\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(2) \"zx\"\n    [1]=>\n    string(2) \"ax\"\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"z\"\n    [1]=>\n    string(1) \"a\"\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(2) \"zx\"\n    [1]=>\n    string(1) \"z\"\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(2) \"yx\"\n    [1]=>\n    string(1) \"y\"\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(2) \"zx\"\n      [1]=>\n      int(0)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(2) \"yx\"\n      [1]=>\n      int(2)\n    }\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(1) \"z\"\n      [1]=>\n      int(0)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(1) \"y\"\n      [1]=>\n      int(2)\n    }\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(2) \"zx\"\n      [1]=>\n      int(0)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(1) \"z\"\n      [1]=>\n      int(0)\n    }\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(2) \"yx\"\n      [1]=>\n      int(2)\n    }\n    [1]=>\n    array(2) {\n      [0]=>\n      string(1) \"y\"\n      [1]=>\n      int(2)\n    }\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/match_flags2.phpt",
    "content": "--TEST--\npreg_match() flags\n--FILE--\n<?php\n\nvar_dump(preg_match('/x(.)/', 'fjszxax', $match, PREG_OFFSET_CAPTURE));\nvar_dump($match);\n\nvar_dump(preg_match('/(.)x/', 'fjszxax', $match, PREG_OFFSET_CAPTURE, 4));\nvar_dump($match);\n\nvar_dump(preg_match('/(?P<capt1>.)(x)(?P<letsmix>\\S+)/', 'fjszxax', $match, PREG_OFFSET_CAPTURE));\nvar_dump($match);\n\n?>\n--EXPECT--\nint(1)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(2) \"xa\"\n    [1]=>\n    int(4)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(5)\n  }\n}\nint(1)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(2) \"ax\"\n    [1]=>\n    int(5)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(5)\n  }\n}\nint(1)\narray(6) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(4) \"zxax\"\n    [1]=>\n    int(3)\n  }\n  [\"capt1\"]=>\n  array(2) {\n    [0]=>\n    string(1) \"z\"\n    [1]=>\n    int(3)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"z\"\n    [1]=>\n    int(3)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"x\"\n    [1]=>\n    int(4)\n  }\n  [\"letsmix\"]=>\n  array(2) {\n    [0]=>\n    string(2) \"ax\"\n    [1]=>\n    int(5)\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(2) \"ax\"\n    [1]=>\n    int(5)\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/match_flags3.phpt",
    "content": "--TEST--\npreg_match() flags 3\n--FILE--\n<?php\n\nvar_dump(preg_match('', '', $match, 0xfff));\n\nvar_dump(preg_match('/\\d+/', '123 456 789 012', $match, 0, -8));\nvar_dump($match);\n\nvar_dump(preg_match('/\\d+/', '123 456 789 012', $match, 0, -500));\nvar_dump($match);\n\nvar_dump(preg_match_all('/\\d+/', '123 456 789 012', $match, 0, -8));\nvar_dump($match);\n\nvar_dump(preg_match('/(?P<3>)/', ''));\n\n?>\n--EXPECTF--\n\nWarning: preg_match(): Empty regular expression in %smatch_flags3.php on line 3\nbool(false)\nint(1)\narray(1) {\n  [0]=>\n  string(3) \"789\"\n}\nint(1)\narray(1) {\n  [0]=>\n  string(3) \"123\"\n}\nint(2)\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(3) \"789\"\n    [1]=>\n    string(3) \"012\"\n  }\n}\n\nWarning: preg_match(): Numeric named subpatterns are not allowed in %smatch_flags3.php on line 14\nbool(false)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/multiline.phpt",
    "content": "--TEST--\nMulti-line match\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/^.{2,3}$/', \"aei\\nou\", $dummy));\nvar_dump(preg_match_all('/^.{2,3}$/', \"aei\\nou\\n\", $dummy));\nvar_dump(preg_match_all('/^.{2,3}$/m', \"aei\\nou\", $dummy));\nvar_dump(preg_match_all('/^.{2,3}$/m', \"aei\\nou\\n\", $dummy));\n\necho \"done\\n\";\n?>\n--EXPECT--\nint(0)\nint(0)\nint(2)\nint(2)\ndone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/null_bytes.phpt",
    "content": "--TEST--\nZero byte test\n--FILE--\n<?php\n\npreg_match(\"\\0//i\", \"\");\npreg_match(\"/\\0/i\", \"\");\npreg_match(\"//\\0i\", \"\");\npreg_match(\"//i\\0\", \"\");\npreg_match(\"/\\\\\\0/i\", \"\");\n\npreg_match(\"\\0[]i\", \"\");\npreg_match(\"[\\0]i\", \"\");\npreg_match(\"[]\\0i\", \"\");\npreg_match(\"[]i\\0\", \"\");\npreg_match(\"[\\\\\\0]i\", \"\");\n\npreg_replace(\"/foo/e\\0/i\", \"echo('Eek');\", \"\");\n\n?>\n--EXPECTF--\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 3\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 4\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 5\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 6\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 7\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 9\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 10\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 11\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 12\n\nWarning: preg_match(): Null byte in regex in %snull_bytes.php on line 13\n\nWarning: preg_replace(): Null byte in regex in %snull_bytes.php on line 15\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/pcre.constants.phpt",
    "content": "--TEST--\nTest for pre-defined pcre constants \n--FILE--\n<?php\n\necho \"PCRE constants test\\n\"; \n\necho \"PREG_PATTERN_ORDER= \", PREG_PATTERN_ORDER, \"\\n\";\necho \"PREG_OFFSET_CAPTURE= \", PREG_OFFSET_CAPTURE, \"\\n\";\necho \"PREG_SPLIT_NO_EMPTY= \", PREG_SPLIT_NO_EMPTY, \"\\n\"; \necho \"PREG_SPLIT_DELIM_CAPTURE= \", PREG_SPLIT_DELIM_CAPTURE, \"\\n\";\necho \"PREG_SPLIT_OFFSET_CAPTURE= \", PREG_SPLIT_OFFSET_CAPTURE, \"\\n\";\necho \"PREG_GREP_INVERT= \", PREG_GREP_INVERT, \"\\n\";\necho \"PREG_NO_ERROR= \", PREG_NO_ERROR, \"\\n\";\necho \"PREG_INTERNAL_ERROR= \", PREG_INTERNAL_ERROR, \"\\n\";\necho \"PREG_BACKTRACK_LIMIT_ERROR= \", PREG_BACKTRACK_LIMIT_ERROR, \"\\n\";\necho \"PREG_RECURSION_LIMIT_ERROR= \", PREG_RECURSION_LIMIT_ERROR, \"\\n\";\necho \"PREG_BAD_UTF8_ERROR= \", PREG_BAD_UTF8_ERROR, \"\\n\";\n\n?>\n===Done===\n--EXPECT--\nPCRE constants test\nPREG_PATTERN_ORDER= 1\nPREG_OFFSET_CAPTURE= 256\nPREG_SPLIT_NO_EMPTY= 1\nPREG_SPLIT_DELIM_CAPTURE= 2\nPREG_SPLIT_OFFSET_CAPTURE= 4\nPREG_GREP_INVERT= 1\nPREG_NO_ERROR= 0\nPREG_INTERNAL_ERROR= 1\nPREG_BACKTRACK_LIMIT_ERROR= 2\nPREG_RECURSION_LIMIT_ERROR= 3\nPREG_BAD_UTF8_ERROR= 4\n===Done==="
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/pcre_anchored.phpt",
    "content": "--TEST--\nA (PCRE_ANCHORED) modififer\n--SKIPIF--\n<?php\nif (@preg_match_all('/\\p{N}/', '0123456789', $dummy) === false) {\n\tdie(\"skip no support for \\p support PCRE library\");\n}\n?>\n--FILE--\n<?php\n\nvar_dump(preg_match('/\\PN+/', '123abc', $m));\nvar_dump($m);\n\nvar_dump(preg_match('/\\P{N}+/A', '123abc'));\nvar_dump(preg_match('/^\\P{N}+/', '123abc'));\nvar_dump(preg_match('/^\\P{N}+/A', '123abc'));\n\n?>\n--EXPECT--\nint(1)\narray(1) {\n  [0]=>\n  string(3) \"abc\"\n}\nint(0)\nint(0)\nint(0)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/pcre_count.phpt",
    "content": "--TEST--\npreg_replace() fifth parameter - count\n--FILE--\n<?php\n$regex = '/(([0-9a-z]+)-([0-9]+))-(([0-9]+)-([0-9]+))/';\n\n$string= '1-2-3-4 a-2-3-4 1-a-3-4 1-2-a-4 1-2-3-a a-a-a-a 4-3-2-1 100-200-300-400-500-600-700-800';\n$count = 0;\nvar_dump(preg_replace($regex, 'xxxx', $string, -1, $count));\nvar_dump($count);\n//////////////////////////////////////////////////////\n\n$regex = '/([a-z]+)/';\n\n$string= 'Here must only number like 42 and 13 appear';\nvar_dump(preg_replace($regex, 'xxxx', $string, -1, $count));\nvar_dump($count);\n\n////////////////////////////////////////////////////////\n$regex = '~((V(I|1)(4|A)GR(4|A))|(V(I|1)C(0|O)D(I|1)(N|\\/\\\\\\/)))~i';\n\n$string= 'Viagra V14GR4 Vicodin V1C0D1/\\/ v1c0d1/|/';\nvar_dump(preg_replace($regex, '...', $string, -1, $count));\nvar_dump($count);\n////////////////////////////////////////////////////////\n$regex = '~((V(I|1)(4|A)GR(4|A))|(V(I|1)C(0|O)D(I|1)(N|\\/\\\\\\/)))~i';\n$count = NULL;\n$string= 'Viagra V14GR4 Vicodin V1C0D1/\\/ v1c0d1/|/';\nvar_dump(preg_replace($regex, '...', $string, -1));\nvar_dump($count);\n?>\n--EXPECT--\nstring(56) \"xxxx xxxx 1-a-3-4 1-2-a-4 1-2-3-a a-a-a-a xxxx xxxx-xxxx\"\nint(5)\nstring(41) \"Hxxxx xxxx xxxx xxxx xxxx 42 xxxx 13 xxxx\"\nint(7)\nstring(25) \"... ... ... ... v1c0d1/|/\"\nint(4)\nstring(25) \"... ... ... ... v1c0d1/|/\"\nNULL\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/pcre_extended.phpt",
    "content": "--TEST--\nx (PCRE_EXTENDED) modififer\n--FILE--\n<?php\n\nvar_dump(preg_match('/a e i o u/', 'aeiou', $m));\nvar_dump($m);\n\nvar_dump(preg_match('/a e i o u/x', 'aeiou', $m));\nvar_dump($m);\n\nvar_dump(preg_match(\"/a e\\ni\\to\\ru/x\", 'aeiou', $m));\nvar_dump($m);\n\n?>\n--EXPECT--\nint(0)\narray(0) {\n}\nint(1)\narray(1) {\n  [0]=>\n  string(5) \"aeiou\"\n}\nint(1)\narray(1) {\n  [0]=>\n  string(5) \"aeiou\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/pcre_extra.phpt",
    "content": "--TEST--\nX (PCRE_EXTRA) modififer\n--FILE--\n<?php\n\nvar_dump(preg_match('/\\y/', '\\y'));\nvar_dump(preg_match('/\\y/X', '\\y'));\n\n?>\n--EXPECTF--\nint(1)\n\nWarning: preg_match(): Compilation failed: unrecognized character follows \\ at offset 1 in %spcre_extra.php on line 4\nbool(false)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_filter.phpt",
    "content": "--TEST--\npreg_filter()\n--FILE--\n<?php\n\n$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');\n$pattern = array('/\\d/', '/[a-z]/', '/[1a]/');\n$replace = array('A:$0', 'B:$0', 'C:$0');\n\nvar_dump(preg_filter($pattern, $replace, $subject));\n\n?>\n===DONE===\n--EXPECT--\narray(6) {\n  [0]=>\n  string(5) \"A:C:1\"\n  [1]=>\n  string(5) \"B:C:a\"\n  [2]=>\n  string(3) \"A:2\"\n  [3]=>\n  string(3) \"B:b\"\n  [4]=>\n  string(3) \"A:3\"\n  [7]=>\n  string(3) \"A:4\"\n}\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_grep_basic.phpt",
    "content": "--TEST--\nTest preg_grep() function : basic functionality \n--FILE--\n<?php\n/*\n* proto array preg_grep(string regex, array input [, int flags])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n$array = array('HTTP://WWW.EXAMPLE.COM', '/index.html', '/info/stat/', 'http://test.uk.com/index/html', '/display/dept.php');\nvar_dump($array);\nvar_dump(preg_grep('@^HTTP(.*?)\\w{2,}$@i', $array)); //finds a string starting with http (regardless of case) (matches two)\nvar_dump(preg_grep('@(/\\w+\\.*/*)+@', $array)); //finds / followed by one or more of a-z, A-Z and 0-9, followed by zero or more . followed by zero or more / all more than once. (matches all)\nvar_dump(preg_grep('@^http://[^w]{3}.*$@i', $array)); //finds http:// (at the beginning of a string) not followed by 3 characters that aren't w's then anything to the end of the sttring (matches one)\nvar_dump(preg_grep('@.*?\\.co\\.uk$@i', $array)); //finds any address ending in .co.uk (matches none)\nvar_dump(preg_grep('@^HTTP(.*?)\\w{2,}$@i', $array, PREG_GREP_INVERT)); //same as first example but the array created contains everything that is NOT matched but the regex (matches three)\n\n?>\n--EXPECT--\narray(5) {\n  [0]=>\n  string(22) \"HTTP://WWW.EXAMPLE.COM\"\n  [1]=>\n  string(11) \"/index.html\"\n  [2]=>\n  string(11) \"/info/stat/\"\n  [3]=>\n  string(29) \"http://test.uk.com/index/html\"\n  [4]=>\n  string(17) \"/display/dept.php\"\n}\narray(2) {\n  [0]=>\n  string(22) \"HTTP://WWW.EXAMPLE.COM\"\n  [3]=>\n  string(29) \"http://test.uk.com/index/html\"\n}\narray(5) {\n  [0]=>\n  string(22) \"HTTP://WWW.EXAMPLE.COM\"\n  [1]=>\n  string(11) \"/index.html\"\n  [2]=>\n  string(11) \"/info/stat/\"\n  [3]=>\n  string(29) \"http://test.uk.com/index/html\"\n  [4]=>\n  string(17) \"/display/dept.php\"\n}\narray(1) {\n  [3]=>\n  string(29) \"http://test.uk.com/index/html\"\n}\narray(0) {\n}\narray(3) {\n  [1]=>\n  string(11) \"/index.html\"\n  [2]=>\n  string(11) \"/info/stat/\"\n  [4]=>\n  string(17) \"/display/dept.php\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_grep_error.phpt",
    "content": "--TEST--\nTest preg_grep() function : error conditions - wrong numbers of parameters\n--FILE--\n<?php\n/*\n* proto array preg_grep(string regex, array input [, int flags])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_grep() : error conditions ***\\n\";\n// Zero arguments\necho \"\\n-- Testing preg_grep() function with Zero arguments --\\n\";\nvar_dump(preg_grep());\n//Test preg_grep with one more than the expected number of arguments\necho \"\\n-- Testing preg_grep() function with more than expected no. of arguments --\\n\";\n$regex = '/\\d/';\n$input = array(1, 2);\n$flags = 0;\n$extra_arg = 10;\nvar_dump(preg_grep($regex, $input, $flags, $extra_arg));\n// Testing preg_grep withone less than the expected number of arguments\necho \"\\n-- Testing preg_grep() function with less than expected no. of arguments --\\n\";\n$regex = 'string_val';\nvar_dump(preg_grep($regex));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_grep() : error conditions ***\n\n-- Testing preg_grep() function with Zero arguments --\n\nWarning: preg_grep() expects at least 2 parameters, 0 given in %spreg_grep_error.php on line %d\nNULL\n\n-- Testing preg_grep() function with more than expected no. of arguments --\n\nWarning: preg_grep() expects at most 3 parameters, 4 given in %spreg_grep_error.php on line %d\nNULL\n\n-- Testing preg_grep() function with less than expected no. of arguments --\n\nWarning: preg_grep() expects at least 2 parameters, 1 given in %spreg_grep_error.php on line %d\nNULL\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_grep_error1.phpt",
    "content": "--TEST--\nTest preg_grep() function : error conditions - bad regular expressions\n--FILE--\n<?php\n/*\n* proto array preg_grep(string regex, array input [, int flags])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_grep reacts to being passed bad regexes\n*/\necho \"*** Testing preg_grep() : error conditions ***\\n\";\n$values = array('abcdef', //Regex without delimeter\n'/[a-zA-Z]', //Regex without closing delimeter\n'[a-zA-Z]/', //Regex without opening delimeter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/', //Regex string\n);\n$array = array(123, 'abc', 'test');\nforeach($values as $value) {\n    print \"\\nArg value is $value\\n\";\n    var_dump(preg_grep($value, $array));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_grep($value, $array));\necho \"Done\"\n?>\n--EXPECTF--\n\n*** Testing preg_grep() : error conditions ***\n\nArg value is abcdef\n\nWarning: preg_grep(): Delimiter must not be alphanumeric or backslash in %spreg_grep_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]\n\nWarning: preg_grep(): No ending delimiter '/' found in %spreg_grep_error1.php on line %d\nbool(false)\n\nArg value is [a-zA-Z]/\n\nWarning: preg_grep(): Unknown modifier '/' in %spreg_grep_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_grep(): Unknown modifier 'F' in %spreg_grep_error1.php on line %d\nbool(false)\n\nArg value is Array\n\nWarning: preg_grep() expects parameter 1 to be string, array given in %spreg_grep_error1.php on line %d\nNULL\n\nArg value is /[a-zA-Z]/\narray(2) {\n  [1]=>\n  string(3) \"abc\"\n  [2]=>\n  string(4) \"test\"\n}\n\nWarning: preg_grep() expects parameter 1 to be string, object given in %spreg_grep_error1.php on line %d\nNULL\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_grep_error2.phpt",
    "content": "--TEST--\nTest preg_grep() function : error conditions - wrong arg types\n--FILE--\n<?php\n/*\n* proto array preg_grep(string regex, array input [, int flags])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_grep reacts to being passed the wrong type of input argument\n*/\necho \"*** Testing preg_grep() : error conditions ***\\n\";\n$regex = '/[a-zA-Z]/';\n$input = array('this is a string', array('this is', 'a subarray'),);\nforeach($input as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_grep($regex, $value));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_grep($regex, $value));\necho \"Done\";\n?>\n--EXPECTF--\n*** Testing preg_grep() : error conditions ***\n\nArg value is: this is a string\n\nWarning: preg_grep() expects parameter 2 to be array, string given in %spreg_grep_error2.php on line %d\nNULL\n\nArg value is: Array\narray(2) {\n  [0]=>\n  string(7) \"this is\"\n  [1]=>\n  string(10) \"a subarray\"\n}\n\nWarning: preg_grep() expects parameter 2 to be array, object given in %spreg_grep_error2.php on line %d\nNULL\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_last_error_error.phpt",
    "content": "--TEST--\nTest preg_grep() function : error conditions -  wrong numbers of parameters\n--FILE--\n<?php\n\n/* Prototype  : int preg_last_error  ( void  )\n * Description:  Returns the error code of the last PCRE regex execution\n * Source code: ext/pcre/php_pcre.c\n */\n\n/*\n * Pass an incorrect number of arguments to preg_last_error() to test behaviour\n */\n\necho \"*** Testing preg_last_error() : error conditions ***\\n\";\n\n// Test preg_last_error with one more than the expected number of arguments\necho \"\\n-- Testing preg_last_error() function with more than expected no. of arguments --\\n\";\n$extra_arg = 10;\nvar_dump( preg_last_error($extra_arg) );\n?>\n===Done===\n--EXPECTF--\n*** Testing preg_last_error() : error conditions ***\n\n-- Testing preg_last_error() function with more than expected no. of arguments --\n\nWarning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d\nNULL\n===Done==="
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_basic.phpt",
    "content": "--TEST--\nTest preg_match_all() function : basic functionality \n--FILE--\n<?php\n/*\n* proto int preg_match_all(string pattern, string subject, [array subpatterns [, int flags [, int offset]]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n$string = 'Hello, world! This is a test. This is another test. \\[4]. 34534 string.';\nvar_dump(preg_match_all('/[0-35-9]/', $string, $match1, PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER, -10)); //finds any digit that's not 4 10 digits from the end(1 match)\nvar_dump($match1);\nvar_dump(preg_match_all('/[tT]his is a(.*?)\\./', $string, $match2, PREG_SET_ORDER)); //finds \"This is a test.\" and \"This is another test.\" (non-greedy) (2 matches)\nvar_dump($match2);\nvar_dump(preg_match_all('@\\. \\\\\\(.*).@', $string, $match3, PREG_PATTERN_ORDER)); //finds \".\\ [...]\" and everything else to the end of the string. (greedy) (1 match)\nvar_dump($match3);\nvar_dump(preg_match_all('/\\d{2}$/', $string, $match4)); //tries to find 2 digits at the end of a string (0 matches)\nvar_dump($match4);\nvar_dump(preg_match_all('/(This is a ){2}(.*)\\stest/', $string, $match5)); //tries to find \"This is aThis is a [...] test\" (0 matches)\nvar_dump($match5);\n\n// Test not passing in a subpatterns array.\nvar_dump(preg_match_all('/test/', $string));\nvar_dump(preg_match_all('/this isn\\'t in the string/', $string));\nvar_dump(preg_match_all('/world/', $string));\nvar_dump(preg_match_all('/[0-9]/', $string));\n?>\n--EXPECTF--\nint(1)\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(1) \"3\"\n      [1]=>\n      int(61)\n    }\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(15) \"This is a test.\"\n    [1]=>\n    string(5) \" test\"\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(21) \"This is another test.\"\n    [1]=>\n    string(11) \"nother test\"\n  }\n}\nint(1)\narray(2) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(21) \". \\[4]. 34534 string.\"\n  }\n  [1]=>\n  array(1) {\n    [0]=>\n    string(17) \"[4]. 34534 string\"\n  }\n}\nint(0)\narray(1) {\n  [0]=>\n  array(0) {\n  }\n}\nint(0)\narray(3) {\n  [0]=>\n  array(0) {\n  }\n  [1]=>\n  array(0) {\n  }\n  [2]=>\n  array(0) {\n  }\n}\nint(2)\nint(0)\nint(1)\nint(6)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_edit_basic.phpt",
    "content": "--TEST--\nTest preg_match_all() function : basic functionality \n--FILE--\n<?php\n/* Prototype  : proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])\n * Description: Perform a Perl-style global regular expression match \n * Source code: ext/pcre/php_pcre.c\n * Alias to functions: \n*/\n\n$string = 'Hello, world! This is a test. This is another test. \\[4]. 34534 string.';\n\nvar_dump(preg_match_all('/[0-35-9]/', $string, $match1, PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER, -10));               \t//finds any digit that's not 4 10 digits from the end(1 match)\nvar_dump($match1);\n\nvar_dump(preg_match_all('/[tT]his is a(.*?)\\./', $string, $match2, PREG_SET_ORDER));    \t\t\t\t\t\t//finds \"This is a test.\" and \"This is another test.\" (non-greedy) (2 matches)\nvar_dump($match2);\n\nvar_dump(preg_match_all('@\\. \\\\\\(.*).@', $string, $match3, PREG_PATTERN_ORDER));            \t\t\t\t//finds \".\\ [...]\" and everything else to the end of the string. (greedy) (1 match)\nvar_dump($match3);\n\nvar_dump(preg_match_all('/\\d{2}$/', $string, $match4));\t\t\t\t\t\t\t\t\t\t//tries to find 2 digits at the end of a string (0 matches)\nvar_dump($match4);\n\nvar_dump(preg_match_all('/(This is a ){2}(.*)\\stest/', $string, $match5));\t\t\t\t\t\t\t//tries to find \"This is aThis is a [...] test\" (0 matches)\t\nvar_dump($match5);\n?>\n--EXPECTF--\nint(1)\narray(1) {\n  [0]=>\n  array(1) {\n    [0]=>\n    array(2) {\n      [0]=>\n      string(1) \"3\"\n      [1]=>\n      int(61)\n    }\n  }\n}\nint(2)\narray(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(15) \"This is a test.\"\n    [1]=>\n    string(5) \" test\"\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(21) \"This is another test.\"\n    [1]=>\n    string(11) \"nother test\"\n  }\n}\nint(1)\narray(2) {\n  [0]=>\n  array(1) {\n    [0]=>\n    string(21) \". \\[4]. 34534 string.\"\n  }\n  [1]=>\n  array(1) {\n    [0]=>\n    string(17) \"[4]. 34534 string\"\n  }\n}\nint(0)\narray(1) {\n  [0]=>\n  array(0) {\n  }\n}\nint(0)\narray(3) {\n  [0]=>\n  array(0) {\n  }\n  [1]=>\n  array(0) {\n  }\n  [2]=>\n  array(0) {\n  }\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_error.phpt",
    "content": "--TEST--\nTest preg_match_all() function : error conditions - incorrect number of parameters\n--FILE--\n<?php\n/*\n* proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_match_all() : error conditions ***\\n\";\n// Zero arguments\necho \"\\n-- Testing preg_match_all() function with Zero arguments --\\n\";\nvar_dump(preg_match_all());\n//Test preg_match_all with one more than the expected number of arguments\necho \"\\n-- Testing preg_match_all() function with more than expected no. of arguments --\\n\";\n$pattern = '/\\w/';\n$subject = 'string_val';\n$flags = PREG_OFFSET_CAPTURE;\n$offset = 10;\n$extra_arg = 10;\nvar_dump(preg_match_all($pattern, $subject, $matches, $flags, $offset, $extra_arg));\n// Testing preg_match_all withone less than the expected number of arguments\necho \"\\n-- Testing preg_match_all() function with less than expected no. of arguments --\\n\";\n$pattern = '/\\w/';\nvar_dump(preg_match_all($pattern));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_match_all() : error conditions ***\n\n-- Testing preg_match_all() function with Zero arguments --\n\nWarning: preg_match_all() expects at least 2 parameters, 0 given in %spreg_match_all_error.php on line %d\nbool(false)\n\n-- Testing preg_match_all() function with more than expected no. of arguments --\n\nWarning: preg_match_all() expects at most 5 parameters, 6 given in %spreg_match_all_error.php on line %d\nbool(false)\n\n-- Testing preg_match_all() function with less than expected no. of arguments --\n\nWarning: preg_match_all() expects at least 2 parameters, 1 given in %spreg_match_all_error.php on line %d\nbool(false)\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_error1.phpt",
    "content": "--TEST--\nTest preg_match_all() function : error conditions - bad regular expressions\n--FILE--\n<?php\n/*\n* proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_match_all reacts to being passed the wrong type of regex argument\n*/\necho \"*** Testing preg_match_all() : error conditions ***\\n\";\n$regex_array = array('abcdef', //Regex without delimeter\n'/[a-zA-Z]', //Regex without closing delimeter\n'[a-zA-Z]/', //Regex without opening delimeter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/', //Regex string\n);\n$subject = 'test';\nforeach($regex_array as $regex_value) {\n    print \"\\nArg value is $regex_value\\n\";\n    var_dump(preg_match_all($regex_value, $subject, $matches1));\n    var_dump($matches1);\n}\n$regex_value = new stdclass(); //Object\nvar_dump(preg_match_all($regex_value, $subject, $matches));\nvar_dump($matches);\n?>\n--EXPECTF--\n*** Testing preg_match_all() : error conditions ***\n\nArg value is abcdef\n\nWarning: preg_match_all(): Delimiter must not be alphanumeric or backslash in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n\nArg value is /[a-zA-Z]\n\nWarning: preg_match_all(): No ending delimiter '/' found in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n\nArg value is [a-zA-Z]/\n\nWarning: preg_match_all(): Unknown modifier '/' in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_match_all(): Unknown modifier 'F' in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n\nArg value is Array\n\nWarning: preg_match_all() expects parameter 1 to be string, array given in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n\nArg value is /[a-zA-Z]/\nint(4)\narray(1) {\n  [0]=>\n  array(4) {\n    [0]=>\n    string(1) \"t\"\n    [1]=>\n    string(1) \"e\"\n    [2]=>\n    string(1) \"s\"\n    [3]=>\n    string(1) \"t\"\n  }\n}\n\nWarning: preg_match_all() expects parameter 1 to be string, object given in %spreg_match_all_error1.php on line %d\nbool(false)\nNULL\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_error2.phpt",
    "content": "--TEST--\nTest preg_match_all() function : error conditions - wrong arg types\n--FILE--\n<?php\n/*\n* proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_match_all reacts to being passed the wrong type of input argument\n*/\necho \"*** Testing preg_match_all() : error conditions ***\\n\";\n$regex = '/[a-zA-Z]/';\n$value = new stdclass(); //Object\nvar_dump(preg_match_all($regex, $value, $matches));\nvar_dump($matches);\n$input = array(array('this is', 'a subarray'), 'test',);\nforeach($input as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_match_all($regex, $value, $matches));\n    var_dump($matches);\n}\necho \"Done\";\n?>\n--EXPECTF--\n*** Testing preg_match_all() : error conditions ***\n\nWarning: preg_match_all() expects parameter 2 to be string, object given in %spreg_match_all_error2.php on line %d\nbool(false)\nNULL\n\nArg value is: Array\n\nWarning: preg_match_all() expects parameter 2 to be string, array given in %spreg_match_all_error2.php on line %d\nbool(false)\nNULL\n\nArg value is: test\nint(4)\narray(1) {\n  [0]=>\n  array(4) {\n    [0]=>\n    string(1) \"t\"\n    [1]=>\n    string(1) \"e\"\n    [2]=>\n    string(1) \"s\"\n    [3]=>\n    string(1) \"t\"\n  }\n}\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_all_error3.phpt",
    "content": "--TEST--\nTest preg_match_all() function : error conditions  \n--FILE--\n<?php\n/*\n* proto int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n/*\n* Testing how preg_match_all reacts to being passed the wrong type of subpatterns array argument\n*/\necho \"*** Testing preg_match_all() : error conditions ***\\n\";\n$regex = '/[a-z]/';\n$subject = 'string';\nvar_dump(preg_match_all($regex, $subject, 'test'));\necho \"Done\";\n?>\n--EXPECTF--\n\nFatal error: Only variables can be passed by reference in %spreg_match_all_error3.php on line %d\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_basic.phpt",
    "content": "--TEST--\nTest preg_match() function : basic functionality \n--FILE--\n<?php\n/* \n *  proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Function is implemented in ext/pcre/php_pcre.c\n*/\n$string = 'Hello, world. [*], this is \\ a string';\nvar_dump(preg_match('/^[hH]ello,\\s/', $string, $match1)); //finds \"Hello, \"\nvar_dump($match1);\nvar_dump(preg_match('/l^o,\\s\\w{5}/', $string, $match2, PREG_OFFSET_CAPTURE)); // tries to find \"lo, world\" at start of string\nvar_dump($match2);\nvar_dump(preg_match('/\\[\\*\\],\\s(.*)/', $string, $match3)); //finds \"[*], this is \\ a string\";\nvar_dump($match3);\nvar_dump(preg_match('@\\w{4}\\s\\w{2}\\s\\\\\\(?:\\s.*)@', $string, $match4, PREG_OFFSET_CAPTURE, 14)); //finds \"this is \\ a string\" (with non-capturing parentheses)\nvar_dump($match4);\nvar_dump(preg_match('/hello world/', $string, $match5)); //tries to find \"hello world\" (should be Hello, world)\nvar_dump($match5);\n?>\n\n--EXPECTF--\n\nint(1)\narray(1) {\n  [0]=>\n  string(7) \"Hello, \"\n}\nint(0)\narray(0) {\n}\nint(1)\narray(2) {\n  [0]=>\n  string(23) \"[*], this is \\ a string\"\n  [1]=>\n  string(18) \"this is \\ a string\"\n}\nint(1)\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(18) \"this is \\ a string\"\n    [1]=>\n    int(19)\n  }\n}\nint(0)\narray(0) {\n}\n\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_basic_002.phpt",
    "content": "--TEST--\npreg_match() single line match with multi-line input\n--FILE--\n<?php\n/* Prototype  : int preg_match  ( string $pattern  , string $subject  [, array &$matches  [, int $flags  [, int $offset  ]]] )\n * Description: Perform a regular expression match\n * Source code: ext/pcre/php_pcre.c\n */\n \n$string = \"My\\nName\\nIs\\nStrange\";\npreg_match(\"/M(.*)/\", $string, $matches);\n\nvar_dump($matches);\n?>\n===Done===\n--EXPECTF--\narray(2) {\n  [0]=>\n  string(2) \"My\"\n  [1]=>\n  string(1) \"y\"\n}\n===Done==="
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_basic_edit.phpt",
    "content": "--TEST--\nTest preg_match() function : basic functionality \n--FILE--\n<?php\n/* Prototype  : proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Description: Perform a Perl-style regular expression match \n * Source code: ext/pcre/php_pcre.c\n * Alias to functions: \n*/\n\n\n$string = 'Hello, world. [*], this is \\ a string';\n\nvar_dump(preg_match('/^[hH]ello,\\s/', $string, $match1));\t\t\t\t\t\t\t//finds \"Hello, \"\nvar_dump($match1);\n\nvar_dump(preg_match('/l^o,\\s\\w{5}/', $string, $match2, PREG_OFFSET_CAPTURE));\t\t\t\t// tries to find \"lo, world\" at start of string\nvar_dump($match2);\n\nvar_dump(preg_match('/\\[\\*\\],\\s(.*)/', $string, $match3));\t\t\t\t\t\t\t//finds \"[*], this is \\ a string\";\nvar_dump($match3);\n\nvar_dump(preg_match('@\\w{4}\\s\\w{2}\\s\\\\\\(?:\\s.*)@', $string, $match4, PREG_OFFSET_CAPTURE, 14));\t//finds \"this is \\ a string\" (with non-capturing parentheses)\nvar_dump($match4);\n\nvar_dump(preg_match('/hello world/', $string, $match5));\t\t\t\t\t\t\t//tries to find \"hello world\" (should be Hello, world)\nvar_dump($match5);\n?>\n\n--EXPECTF--\n\nint(1)\narray(1) {\n  [0]=>\n  string(7) \"Hello, \"\n}\nint(0)\narray(0) {\n}\nint(1)\narray(2) {\n  [0]=>\n  string(23) \"[*], this is \\ a string\"\n  [1]=>\n  string(18) \"this is \\ a string\"\n}\nint(1)\narray(1) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(18) \"this is \\ a string\"\n    [1]=>\n    int(19)\n  }\n}\nint(0)\narray(0) {\n}\n\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_error.phpt",
    "content": "--TEST--\nTest preg_match() function : error conditions - wrong numbers of parameters\n--FILE--\n<?php\n/* \n *  proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_match() : error conditions ***\\n\";\n// Zero arguments\necho \"\\n-- Testing preg_match() function with Zero arguments --\\n\";\nvar_dump(preg_match());\n//Test preg_match with one more than the expected number of arguments\necho \"\\n-- Testing preg_match() function with more than expected no. of arguments --\\n\";\n$pattern = '/\\w/';\n$subject = 'string_val';\n$flags = PREG_OFFSET_CAPTURE;\n$offset = 10;\n$extra_arg = 10;\nvar_dump(preg_match($pattern, $subject, $matches, $flags, $offset, $extra_arg));\n// Testing preg_match withone less than the expected number of arguments\necho \"\\n-- Testing preg_match() function with less than expected no. of arguments --\\n\";\n$pattern = '/\\w/';\nvar_dump(preg_match($pattern));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_match() : error conditions ***\n\n-- Testing preg_match() function with Zero arguments --\n\nWarning: preg_match() expects at least 2 parameters, 0 given in %spreg_match_error.php on line %d\nbool(false)\n\n-- Testing preg_match() function with more than expected no. of arguments --\n\nWarning: preg_match() expects at most 5 parameters, 6 given in %spreg_match_error.php on line %d\nbool(false)\n\n-- Testing preg_match() function with less than expected no. of arguments --\n\nWarning: preg_match() expects at least 2 parameters, 1 given in %spreg_match_error.php on line %d\nbool(false)\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_error1.phpt",
    "content": "--TEST--\nTest preg_match() function : error conditions - bad regular expressions\n--FILE--\n<?php\n/* \n *  proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_match reacts to being passed the wrong type of regex argument\n*/\necho \"*** Testing preg_match() : error conditions ***\\n\";\n$regex_array = array('abcdef', //Regex without delimeter\n'/[a-zA-Z]', //Regex without closing delimeter\n'[a-zA-Z]/', //Regex without opening delimeter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/', //Regex string\n);\n$subject = 'this is a test';\nforeach($regex_array as $regex_value) {\n    print \"\\nArg value is $regex_value\\n\";\n    var_dump(preg_match($regex_value, $subject));\n}\n$regex_value = new stdclass(); //Object\nvar_dump(preg_match($regex_value, $subject));\n?>\n--EXPECTF--\n\n*** Testing preg_match() : error conditions ***\n\nArg value is abcdef\n\nWarning: preg_match(): Delimiter must not be alphanumeric or backslash in %spreg_match_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]\n\nWarning: preg_match(): No ending delimiter '/' found in %spreg_match_error1.php on line %d\nbool(false)\n\nArg value is [a-zA-Z]/\n\nWarning: preg_match(): Unknown modifier '/' in %spreg_match_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_match(): Unknown modifier 'F' in %spreg_match_error1.php on line %d\nbool(false)\n\nArg value is Array\n\nWarning: preg_match() expects parameter 1 to be string, array given in %spreg_match_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]/\nint(1)\n\nWarning: preg_match() expects parameter 1 to be string, object given in %spreg_match_error1.php on line %d\nbool(false)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_error2.phpt",
    "content": "--TEST--\nTest preg_match() function : error conditions - wrong arg types\n--FILE--\n<?php\n/* \n *  proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_match reacts to being passed the wrong type of subject argument\n*/\necho \"*** Testing preg_match() : error conditions ***\\n\";\n$regex = '/[a-zA-Z]/';\n$input = array('this is a string', array('this is', 'a subarray'),);\nforeach($input as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_match($regex, $value));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_match($regex, $value));\necho \"Done\";\n?>\n--EXPECTF--\n\n*** Testing preg_match() : error conditions ***\n\nArg value is: this is a string\nint(1)\n\nArg value is: Array\n\nWarning: preg_match() expects parameter 2 to be string, array given in %spreg_match_error2.php on line %d\nbool(false)\n\nWarning: preg_match() expects parameter 2 to be string, object given in %spreg_match_error2.php on line %d\nbool(false)\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_match_variation1.phpt",
    "content": "--TEST--\nTest preg_match() function : variation\n--FILE--\n<?php\n/* \n *  proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])\n * Function is implemented in ext/pcre/php_pcre.c\n*/\n\n//test passing in the same variable where 1 is by value, the other is a different\n//type and by reference so should be updated to the new type.\n$string = \"-1\";\npreg_match('/[\\-\\+]?[0-9\\.]*/', $string, $string);\nvar_dump($string);\n?>\n===Done===\n--EXPECT--\narray(1) {\n  [0]=>\n  string(2) \"-1\"\n}\n===Done===\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_quote_basic.phpt",
    "content": "--TEST--\nTest preg_quote() function : basic functionality \n--FILE--\n<?php\n/*\n* proto string preg_quote(string str [, string delim_char])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n$string_before = '/this *-has \\ metacharacters^ in $';\nprint \"\\$string_before looks like: $string_before\\n\"; //$string_before is printed as is written\n$string_after = preg_quote($string_before, '/');\nprint \"\\$string_after looks like: $string_after, with metacharacters and / (set as delimiter) escaped\\n\"; //$string_after is printed with metacharacters escaped.\n$string1 = 'testing - /this *-has \\ metacharacters^ in $ should   work';\nvar_dump(preg_match('/^[tT]\\w{6} - ' . preg_quote($string_before, '/') . ' [a-z]*\\s*work$/', $string1, $matches1));\nvar_dump($matches1);\n?>\n--EXPECT--\n\n$string_before looks like: /this *-has \\ metacharacters^ in $\n$string_after looks like: \\/this \\*\\-has \\\\ metacharacters\\^ in \\$, with metacharacters and / (set as delimiter) escaped\nint(1)\narray(1) {\n  [0]=>\n  string(58) \"testing - /this *-has \\ metacharacters^ in $ should   work\"\n}"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_quote_error.phpt",
    "content": "--TEST--\nTest preg_quote() function : error conditions  - wrong numbers of parameters \n--FILE--\n<?php\n/*\n* proto string preg_quote(string str [, string delim_char])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_quote() : error conditions ***\\n\";\n// Zero arguments\necho \"\\n-- Testing preg_quote() function with Zero arguments --\\n\";\nvar_dump(preg_quote());\n//Test preg_quote with one more than the expected number of arguments\necho \"\\n-- Testing preg_quote() function with more than expected no. of arguments --\\n\";\n$str = 'string_val';\n$delim_char = '/';\n$extra_arg = 10;\nvar_dump(preg_quote($str, $delim_char, $extra_arg));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_quote() : error conditions ***\n\n-- Testing preg_quote() function with Zero arguments --\n\nWarning: preg_quote() expects at least 1 parameter, 0 given in %spreg_quote_error.php on line %d\nNULL\n\n-- Testing preg_quote() function with more than expected no. of arguments --\n\nWarning: preg_quote() expects at most 2 parameters, 3 given in %spreg_quote_error.php on line %d\nNULL\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_quote_error1.phpt",
    "content": "--TEST--\nTest preg_quote() function : error conditions - wrong arg types\n--FILE--\n<?php\n/*\n* proto string preg_quote(string str [, string delim_char])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_quote reacts to being passed the wrong type of input argument\n*/\necho \"*** Testing preg_quote() : error conditions ***\\n\";\n$input = array('this is a string', array('this is', 'a subarray'),);\nforeach($input as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_quote($value));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_quote($value));\necho \"Done\";\n?>\n--EXPECTF--\n*** Testing preg_quote() : error conditions ***\n\nArg value is: this is a string\nstring(16) \"this is a string\"\n\nArg value is: Array\n\nWarning: preg_quote() expects parameter 1 to be string, array given in %spreg_quote_error1.php on line %d\nNULL\n\nWarning: preg_quote() expects parameter 1 to be string, object given in %spreg_quote_error1.php on line %d\nNULL\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace.phpt",
    "content": "--TEST--\npreg_replace()\n--FILE--\n<?php\n\nvar_dump(preg_replace('{{\\D+}}', 'x', '{abcd}'));\nvar_dump(preg_replace('{{\\D+}}', 'ddd', 'abcd'));\n\nvar_dump(preg_replace('/(ab)(c)(d)(e)(f)(g)(h)(i)(j)(k)/', 'a${1}2$103', 'zabcdefghijkl'));\n\nvar_dump(preg_replace_callback('//e', '', ''));\n\nvar_dump(preg_replace_callback('//e', 'strtolower', ''));\n\n?>\n--EXPECTF--\nstring(1) \"x\"\nstring(4) \"abcd\"\nstring(8) \"zaab2k3l\"\n\nWarning: preg_replace_callback(): Requires argument 2, '', to be a valid callback in %spreg_replace.php on line 8\nstring(0) \"\"\n\nWarning: preg_replace_callback(): Modifier /e cannot be used with replacement callback in %spreg_replace.php on line 10\nNULL\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace2.phpt",
    "content": "--TEST--\npreg_replace()\n--SKIPIF--\n<?php\nif (@preg_match('/./u', '') === false) {\n\tdie('skip no utf8 support in PCRE library');\n}\n?>\n--FILE--\n<?php\n\nvar_dump(preg_replace('', array(), ''));\n\nvar_dump(preg_replace(array('/\\da(.)/ui', '@..@'), '$1', '12Abc'));\nvar_dump(preg_replace(array('/\\da(.)/ui', '@(.)@'), '$1', array('x','a2aA', '1av2Ab')));\n\n\nvar_dump(preg_replace(array('/[\\w]+/'), array('$'), array('xyz', 'bdbd')));\nvar_dump(preg_replace(array('/\\s+/', '~[b-d]~'), array('$'), array('x y', 'bd bc')));\n\necho \"==done==\\n\";\n\n?>\n--EXPECTF--\nWarning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array in %spreg_replace2.php on line 3\nbool(false)\nstring(1) \"c\"\narray(3) {\n  [0]=>\n  string(1) \"x\"\n  [1]=>\n  string(2) \"aA\"\n  [2]=>\n  string(2) \"vb\"\n}\narray(2) {\n  [0]=>\n  string(1) \"$\"\n  [1]=>\n  string(1) \"$\"\n}\narray(2) {\n  [0]=>\n  string(3) \"x$y\"\n  [1]=>\n  string(1) \"$\"\n}\n==done==\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_basic.phpt",
    "content": "--TEST--\nTest preg_replace() function : basic functionality \n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n$string = '123456789 - Hello, world -           This is a string.';\nvar_dump($string);\nvar_dump(preg_replace('<- This is a string$>', '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.\nvar_dump(preg_replace('<[0-35-9]>', '4', $string)); //finds any number that's not 4 and replaces it with a 4 ('444444444')\nvar_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)\nvar_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\nvar_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')\n\n?>\n--EXPECT--\n\nstring(54) \"123456789 - Hello, world -           This is a string.\"\nstring(54) \"123456789 - Hello, world -           This is a string.\"\nstring(54) \"444444444 - Hello, world -           This is a string.\"\nstring(56) \"123456789 - Bonjour, world -           This is a string.\"\nstring(42) \"123456789. Hello, world. This is a string.\"\nstring(30) \"josmessa at uk dot ibm dot com\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback.phpt",
    "content": "--TEST--\npreg_replace_callback()\n--FILE--\n<?php\n$input = \"plain [indent] deep [indent] [abcd]deeper[/abcd] [/indent] deep [/indent] plain\"; \n\nfunction parseTagsRecursive($input)\n{\n    \n    $regex = '#\\[indent]((?:[^[]|\\[(?!/?indent])|(?R))+)\\[/indent]#';\n\n    if (is_array($input)) {\n        $input = '<div style=\"margin-left: 10px\">'.$input[1].'</div>';\n    }\n\n    return preg_replace_callback($regex, 'parseTagsRecursive', $input);\n}\n\n$output = parseTagsRecursive($input);\n\necho $output, \"\\n\";\n\n?>\n--EXPECT--\nplain <div style=\"margin-left: 10px\"> deep <div style=\"margin-left: 10px\"> [abcd]deeper[/abcd] </div> deep </div> plain\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback2.phpt",
    "content": "--TEST--\npreg_replace_callback() 2\n--FILE--\n<?php\n\nfunction f() {\n\tthrow new Exception();\n}\n\ntry {\nvar_dump(preg_replace_callback('/\\w/', 'f', 'z'));\n} catch(Exception $e) {}\n\nfunction g($x) {\n\treturn \"'$x[0]'\";\n}\n\nvar_dump(preg_replace_callback('@\\b\\w{1,2}\\b@', 'g', array('a b3 bcd', 'v' => 'aksfjk', 12 => 'aa bb')));\n\nvar_dump(preg_replace_callback('~\\A.~', 'g', array(array('xyz'))));\n\nvar_dump(preg_replace_callback('~\\A.~', create_function('$m', 'return strtolower($m[0]);'), 'ABC'));\n?>\n--EXPECTF--\narray(3) {\n  [0]=>\n  string(12) \"'a' 'b3' bcd\"\n  [\"v\"]=>\n  string(6) \"aksfjk\"\n  [12]=>\n  string(9) \"'aa' 'bb'\"\n}\n\nNotice: Array to string conversion in %spreg_replace_callback2.php on line 17\narray(1) {\n  [0]=>\n  string(7) \"'A'rray\"\n}\nstring(3) \"aBC\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback3.phpt",
    "content": "--TEST--\npreg_replace_callback() 3\n--FILE--\n<?php\n\nvar_dump(preg_replace_callback());\nvar_dump(preg_replace_callback(1));\nvar_dump(preg_replace_callback(1,2));\nvar_dump(preg_replace_callback(1,2,3));\nvar_dump(preg_replace_callback(1,2,3,4));\n$a = 5;\nvar_dump(preg_replace_callback(1,2,3,4,$a));\n$a = \"\";\nvar_dump(preg_replace_callback(\"\",\"\",\"\",\"\",$a));\n$a = array();\nvar_dump(preg_replace_callback($a,$a,$a,$a,$a));\n\necho \"Done\\n\";\n?>\n--EXPECTF--\t\nWarning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d\nNULL\n\nWarning: preg_replace_callback() expects at least 3 parameters, 1 given in %s on line %d\nNULL\n\nWarning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d\nNULL\n\nWarning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d\nint(3)\n\nWarning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d\nint(3)\n\nWarning: preg_replace_callback(): Requires argument 2, '2', to be a valid callback in %s on line %d\nint(3)\n\nWarning: preg_replace_callback() expects parameter 4 to be long, string given in %s on line %d\nNULL\n\nWarning: preg_replace_callback() expects parameter 4 to be long, array given in %s on line %d\nNULL\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_basic.phpt",
    "content": "--TEST--\nTest preg_replace_callback() function : basic functionality \n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n/*\n* Basic test for preg_replace_callback\n*/\n$replacement = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'); //array will have the default key values (0-9) and each value is the corresponding key written in words.\nfunction integer_word($matches) {\n    global $replacement;\n    return $replacement[$matches[0]]; //all examples will be looking for an integer value, if one is found it will be stored in $matches[0] which corresponds to a key in the $replacements array\n    \n}\n$subject1 = 'there are 7 words in this sentence.';\n$new_subject1 = preg_replace_callback('/\\d/', \"integer_word\", $subject1);\nprint \"$new_subject1 \\n\";\n$subject2 = '1 2 3 4 is now written in words';\n$new_subject2 = preg_replace_callback('/\\d/', \"integer_word\", $subject2, 3); //limits to three replacements\nprint \"$new_subject2 \\n\";\n$subject3 = 'there are no numbers in this string';\n$new_subject3 = preg_replace_callback('/\\d/', \"integer_word\", $subject3, 5, $count); //limites to five replacements and counts the number of replacements made ands stores in $count variable\nprint \"$new_subject3 \\n\";\nprint $count;\n?>\n--EXPECTF--\nthere are seven words in this sentence. \none two three 4 is now written in words \nthere are no numbers in this string \n0\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_error.phpt",
    "content": "--TEST--\nTest preg_replace_callback() function : error \n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"***Testing preg_replace_callback() : error conditions***\\n\";\n//Zero arguments\necho \"\\n-- Testing preg_replace_callback() function with Zero arguments --\\n\";\nvar_dump(preg_replace_callback());\n//Test preg_replace_callback() with one more than the expected number of arguments\necho \"\\n-- Testing preg_replace_callback() function with more than expected no. of arguments --\\n\";\n$replacement = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');\nfunction integer_word($matches) {\n    global $replacement;\n    return $replacement[$matches[0]];\n}\n$regex = '/\\d/';\n$subject = 'there are 7 words in this sentence.';\n$limit = 10;\n$extra_arg = 10;\nvar_dump(preg_replace_callback($regex, 'integer_word', $subject, $limit, $count, $extra_arg));\n//Testing preg_replace_callback() with one less than the expected number of arguments\necho \"\\n-- Testing preg_replace_callback() function with less than expected no. of arguments --\\n\";\n$regex = '/\\d/';\nvar_dump(preg_replace_callback($regex, 'integer word'));\necho \"Done\";\n?>\n--EXPECTF--\n***Testing preg_replace_callback() : error conditions***\n\n-- Testing preg_replace_callback() function with Zero arguments --\n\nWarning: preg_replace_callback() expects at least 3 parameters, 0 given in %s on line %d\nNULL\n\n-- Testing preg_replace_callback() function with more than expected no. of arguments --\n\nWarning: preg_replace_callback() expects at most 5 parameters, 6 given in %s on line %d\nNULL\n\n-- Testing preg_replace_callback() function with less than expected no. of arguments --\n\nWarning: preg_replace_callback() expects at least 3 parameters, 2 given in %s on line %d\nNULL\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_callback_error1.phpt",
    "content": "--TEST--\nTest preg_replace_callback() function : error \n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_replace_callback reacts to being passed the wrong type of regex argument\n*/\necho \"*** Testing preg_replace_callback() : error conditions ***\\n\";\n$regex_array = array('abcdef', //Regex without delimiters\n'/[a-zA-Z]', //Regex without closing delimiter\n'[a-zA-Z]/', //Regex without opening delimiter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/'); //Regex string\n$replacement = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');\nfunction integer_word($matches) {\n    global $replacement;\n    return $replacement[$matches[0]];\n}\n$subject = 'number 1.';\nforeach($regex_array as $regex_value) {\n    print \"\\nArg value is $regex_value\\n\";\n    var_dump(preg_replace_callback($regex_value, 'integer_word', $subject));\n}\n?>\n===Done===\n--EXPECTF--\n*** Testing preg_replace_callback() : error conditions ***\n\nArg value is abcdef\n\nWarning: preg_replace_callback(): Delimiter must not be alphanumeric or backslash in %s on line %d\nNULL\n\nArg value is /[a-zA-Z]\n\nWarning: preg_replace_callback(): No ending delimiter '/' found in %s on line %d\nNULL\n\nArg value is [a-zA-Z]/\n\nWarning: preg_replace_callback(): Unknown modifier '/' in %s on line %d\nNULL\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_replace_callback(): Unknown modifier 'F' in %s on line %d\nNULL\n\nArg value is Array\nstring(9) \"number 1.\"\n\nArg value is /[a-zA-Z]/\nstring(3) \" 1.\"\n===Done==="
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_edit_basic.phpt",
    "content": "--TEST--\nTest preg_replace() function : basic \n--FILE--\n<?php\n/* Prototype  : proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n * Description: Perform Perl-style regular expression replacement. \n * Source code: ext/pcre/php_pcre.c\n * Alias to functions: \n*/\n\n$string = '123456789 - Hello, world -           This is a string.';\nvar_dump($string);\n\nvar_dump(preg_replace('<- This is a string$>',\n                      'This shouldn\\'t work', $string));\t\t\t\t//tries to find '- This is a string' at the end of a string but can't so replaces nothing and prints the unchanged $string.\n\nvar_dump(preg_replace('<[0-35-9]>', \n                      '4', $string,               \t\t\t\t\t//finds any number that's not 4 and replaces it with a 4\n\t\t\t    '5', $count));\t\t\t\t\t\t\t//limits to 5 replacements returns 444444789\nvar_dump($count);\t\t\t\t\t\t\t\t\t\t\t//counts the number of replacements made (5)\n\n\nvar_dump(preg_replace('<\\b[hH]\\w{2,4}>',\n                      'Bonjour', $string));\t\t\t\t\t\t//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)\n\nvar_dump(preg_replace('<(\\w)\\s*-\\s*(\\w)>',\n                      '\\\\1. \\\\2', $string));\t\t\t\t\t\t//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\n\nvar_dump(preg_replace('<(^[a-z]\\w+)@(\\w+)\\.(\\w+)\\.([a-z]{2,}$)>', \n                      '\\\\1 at \\\\2 dot \\\\3 dot \\\\4', 'josmessa@uk.ibm.com'));\t//finds the e-mail address and replaces the @ and . with \"at\" and \"dot\" (uses backreferences) ('josmessa at uk dot ibm dot com')\n?>\n--EXPECTF--\nstring(54) \"123456789 - Hello, world -           This is a string.\"\nstring(54) \"123456789 - Hello, world -           This is a string.\"\nstring(54) \"444444789 - Hello, world -           This is a string.\"\nint(5)\nstring(56) \"123456789 - Bonjour, world -           This is a string.\"\nstring(42) \"123456789. Hello, world. This is a string.\"\nstring(30) \"josmessa at uk dot ibm dot com\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_error.phpt",
    "content": "--TEST--\nTest preg_replace() function : error - incorrect number of parameters\n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_replace() : error conditions ***\\n\";\n//Zero arguments\necho \"\\n-- Testing preg_replace() function with zero arguments --\\n\";\nvar_dump(preg_replace());\n//Test preg_replace() with one more than the expected number of arguments\necho \"\\n-- Testing preg_replace() function with more than expected no. of arguments --\\n\";\n$regex = '/\\w/';\n$replace = '1';\n$subject = 'string_val';\n$limit = 10;\n$extra_arg = 10;\nvar_dump(preg_replace($regex, $replace, $subject, $limit, $count, $extra_arg));\n//Testing preg_replace() with one less than the expected number of arguments\necho \"\\n-- Testing preg_replace() function with less than expected no. of arguments --\\n\";\n$regex = '/\\w/';\n$replace = '1';\nvar_dump(preg_replace($regex, $replace));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_replace() : error conditions ***\n\n-- Testing preg_replace() function with zero arguments --\n\nWarning: preg_replace() expects at least 3 parameters, 0 given in %s on line %d\nNULL\n\n-- Testing preg_replace() function with more than expected no. of arguments --\n\nWarning: preg_replace() expects at most 5 parameters, 6 given in %s on line %d\nNULL\n\n-- Testing preg_replace() function with less than expected no. of arguments --\n\nWarning: preg_replace() expects at least 3 parameters, 2 given in %s on line %d\nNULL\nDone\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_error1.phpt",
    "content": "--TEST--\nTest preg_replace() function : error - bad regular expressions\n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_replace reacts to being passed the wrong type of regex argument\n*/\necho \"*** Testing preg_replace() : error conditions***\\n\";\n$regex_array = array('abcdef', //Regex without delimeter\n'/[a-zA-Z]', //Regex without closing delimeter\n'[a-zA-Z]/', //Regex without opening delimeter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/', //Regex string\n);\n$replace = 1;\n$subject = 'a';\nforeach($regex_array as $regex_value) {\n    print \"\\nArg value is $regex_value\\n\";\n    var_dump(preg_replace($regex_value, $replace, $subject));\n}\n$regex_value = new stdclass(); //Object\nvar_dump(preg_replace($regex_value, $replace, $subject));\n?>\n--EXPECTF--\n*** Testing preg_replace() : error conditions***\n\nArg value is abcdef\n\nWarning: preg_replace(): Delimiter must not be alphanumeric or backslash in %spreg_replace_error1.php on line %d\nNULL\n\nArg value is /[a-zA-Z]\n\nWarning: preg_replace(): No ending delimiter '/' found in %spreg_replace_error1.php on line %d\nNULL\n\nArg value is [a-zA-Z]/\n\nWarning: preg_replace(): Unknown modifier '/' in %spreg_replace_error1.php on line %d\nNULL\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_replace(): Unknown modifier 'F' in %spreg_replace_error1.php on line %d\nNULL\n\nArg value is Array\nstring(1) \"a\"\n\nArg value is /[a-zA-Z]/\nstring(1) \"1\"\n\nCatchable fatal error: Object of class stdClass could not be converted to string in %spreg_replace_error1.php on line %d\n\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_error2.phpt",
    "content": "--TEST--\nTest preg_replace() function : error conditions - wrong arg types\n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_replace reacts to being passed the wrong type of replacement argument\n*/\necho \"*** Testing preg_replace() : error conditions ***\\n\";\n$regex = '/[a-zA-Z]/';\n$replace = array('this is a string', array('this is', 'a subarray'),);\n$subject = 'test';\nforeach($replace as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_replace($regex, $value, $subject));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_replace($regex, $value, $subject));\necho \"Done\";\n?>\n--EXPECTF--\n*** Testing preg_replace() : error conditions ***\n\nArg value is: this is a string\nstring(64) \"this is a stringthis is a stringthis is a stringthis is a string\"\n\nArg value is: Array\n\nWarning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array in %spreg_replace_error2.php on line %d\nbool(false)\n\nCatchable fatal error: Object of class stdClass could not be converted to string in %spreg_replace_error2.php on line %d\n\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_replace_variation1.phpt",
    "content": "--TEST--\nTest preg_replace() function : variation both arguments are arrays\n--FILE--\n<?php\n/*\n* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n/*\n* Testing preg_replace when the regex and the replacement are both arrays.\n*/\n$string = 'This is a string. It contains numbers (0-9) as well as parentheses and some other things!';\n$new_string = preg_replace(array('/\\b\\w{1}s/', '/(\\d{1})-(\\d{1})/', '/[\\(!\\)]/'), array('test', '$1 to $2', '*'), $string);\nprint $new_string;\n?>\n--EXPECTF--\nThis test a string. It contains numbers *0 to 9* test well test parentheses and some other things*\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_split_basic.phpt",
    "content": "--TEST--\nTest preg_split() function : basic functionality \n--FILE--\n<?php\n/*\n* proto array preg_split(string pattern, string subject [, int limit [, int flags]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\n$string = 'this is a_list: value1, Test__, string; Hello, world!_(parentheses)';\nvar_dump(preg_split('/[:,;\\(\\)]/', $string, -1, PREG_SPLIT_NO_EMPTY)); //parts of $string seperated by : , ; ( or ) are put into an array.\nvar_dump(preg_split('/:\\s*(\\w*,*\\s*)+;/', $string)); //all text between : and ; is removed\nvar_dump(preg_split('/(\\(|\\))/', $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)); //all text before (parentheses) is put into first element, ( into second, \"parentheses\" into third and ) into fourth.\nvar_dump(preg_split('/NAME/i', $string)); //tries to find NAME regardless of case in $string (can't split it so just returns how string as first element)\nvar_dump(preg_split('/\\w/', $string, -1, PREG_SPLIT_NO_EMPTY)); //every character (including whitespace) is put into an array element\n\n?>\n--EXPECT--\narray(7) {\n  [0]=>\n  string(14) \"this is a_list\"\n  [1]=>\n  string(7) \" value1\"\n  [2]=>\n  string(7) \" Test__\"\n  [3]=>\n  string(7) \" string\"\n  [4]=>\n  string(6) \" Hello\"\n  [5]=>\n  string(8) \" world!_\"\n  [6]=>\n  string(11) \"parentheses\"\n}\narray(2) {\n  [0]=>\n  string(14) \"this is a_list\"\n  [1]=>\n  string(28) \" Hello, world!_(parentheses)\"\n}\narray(4) {\n  [0]=>\n  string(54) \"this is a_list: value1, Test__, string; Hello, world!_\"\n  [1]=>\n  string(1) \"(\"\n  [2]=>\n  string(11) \"parentheses\"\n  [3]=>\n  string(1) \")\"\n}\narray(1) {\n  [0]=>\n  string(67) \"this is a_list: value1, Test__, string; Hello, world!_(parentheses)\"\n}\narray(10) {\n  [0]=>\n  string(1) \" \"\n  [1]=>\n  string(1) \" \"\n  [2]=>\n  string(2) \": \"\n  [3]=>\n  string(2) \", \"\n  [4]=>\n  string(2) \", \"\n  [5]=>\n  string(2) \"; \"\n  [6]=>\n  string(2) \", \"\n  [7]=>\n  string(1) \"!\"\n  [8]=>\n  string(1) \"(\"\n  [9]=>\n  string(1) \")\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_split_error.phpt",
    "content": "--TEST--\nTest preg_split() function : error conditions - incorrect number of parameters\n--FILE--\n<?php\n/*\n* proto array preg_split(string pattern, string subject [, int limit [, int flags]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\necho \"*** Testing preg_split() : error conditions ***\\n\";\n// Zero arguments\necho \"\\n-- Testing preg_split() function with Zero arguments --\\n\";\nvar_dump(preg_split());\n//Test preg_split with one more than the expected number of arguments\necho \"\\n-- Testing preg_split() function with more than expected no. of arguments --\\n\";\n$pattern = '/_/';\n$subject = 'string_val';\n$limit = 10;\n$flags = PREG_SPLIT_NO_EMPTY;\n$extra_arg = 10;\nvar_dump(preg_split($pattern, $subject, $limit, $flags, $extra_arg));\n// Testing preg_split withone less than the expected number of arguments\necho \"\\n-- Testing preg_split() function with less than expected no. of arguments --\\n\";\n$pattern = '/\\./';\nvar_dump(preg_split($pattern));\necho \"Done\"\n?>\n--EXPECTF--\n*** Testing preg_split() : error conditions ***\n\n-- Testing preg_split() function with Zero arguments --\n\nWarning: preg_split() expects at least 2 parameters, 0 given in %spreg_split_error.php on line %d\nbool(false)\n\n-- Testing preg_split() function with more than expected no. of arguments --\n\nWarning: preg_split() expects at most 4 parameters, 5 given in %spreg_split_error.php on line %d\nbool(false)\n\n-- Testing preg_split() function with less than expected no. of arguments --\n\nWarning: preg_split() expects at least 2 parameters, 1 given in %spreg_split_error.php on line %d\nbool(false)\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_split_error1.phpt",
    "content": "--TEST--\nTest preg_split() function : error conditions - bad regular expressions\n--FILE--\n<?php\n/*\n* proto array preg_split(string pattern, string subject [, int limit [, int flags]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_split reacts to being passed the wrong type of regex argument\n*/\necho \"*** Testing preg_split() : error conditions ***\\n\";\n$regex_array = array('abcdef', //Regex without delimiter\n'/[a-zA-Z]', //Regex without closing delimiter\n'[a-zA-Z]/', //Regex without opening delimiter\n'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes\n'[A-Z]', '[0-9]'), '/[a-zA-Z]/', //Regex string\n);\n$subject = '1 2 a 3 4 b 5 6';\nforeach($regex_array as $regex_value) {\n    print \"\\nArg value is $regex_value\\n\";\n    var_dump(preg_split($regex_value, $subject));\n}\n$regex_value = new stdclass(); //Object\nvar_dump(preg_split($regex_value, $subject));\n?>\n--EXPECTF--\n*** Testing preg_split() : error conditions ***\n\nArg value is abcdef\n\nWarning: preg_split(): Delimiter must not be alphanumeric or backslash in %spreg_split_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]\n\nWarning: preg_split(): No ending delimiter '/' found in %spreg_split_error1.php on line %d\nbool(false)\n\nArg value is [a-zA-Z]/\n\nWarning: preg_split(): Unknown modifier '/' in %spreg_split_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]/F\n\nWarning: preg_split(): Unknown modifier 'F' in %spreg_split_error1.php on line %d\nbool(false)\n\nArg value is Array\n\nWarning: preg_split() expects parameter 1 to be string, array given in %spreg_split_error1.php on line %d\nbool(false)\n\nArg value is /[a-zA-Z]/\narray(3) {\n  [0]=>\n  string(4) \"1 2 \"\n  [1]=>\n  string(5) \" 3 4 \"\n  [2]=>\n  string(4) \" 5 6\"\n}\n\nWarning: preg_split() expects parameter 1 to be string, object given in %spreg_split_error1.php on line %d\nbool(false)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/preg_split_error2.phpt",
    "content": "--TEST--\nTest preg_split() function : error conditions - wrong arg types\n--FILE--\n<?php\n/*\n* proto array preg_split(string pattern, string subject [, int limit [, int flags]])\n* Function is implemented in ext/pcre/php_pcre.c\n*/\nerror_reporting(E_ALL&~E_NOTICE);\n/*\n* Testing how preg_split reacts to being passed the wrong type of input argument\n*/\necho \"*** Testing preg_split() : error conditions ***\\n\";\n$regex = '/[a-zA-Z]/';\n$input = array(array('this is', 'a subarray'),);\nforeach($input as $value) {\n    print \"\\nArg value is: $value\\n\";\n    var_dump(preg_split($regex, $value));\n}\n$value = new stdclass(); //Object\nvar_dump(preg_split($regex, $value));\necho \"Done\";\n?>\n--EXPECTF--\n*** Testing preg_split() : error conditions ***\n\nArg value is: Array\n\nWarning: preg_split() expects parameter 2 to be string, array given in %spreg_split_error2.php on line %d\nbool(false)\n\nWarning: preg_split() expects parameter 2 to be string, object given in %spreg_split_error2.php on line %d\nbool(false)\nDone"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/recursion_limit.phpt",
    "content": "--TEST--\nPCRE Recursion limit\n--SKIPIF--\n<?php\nif (@preg_match_all('/\\p{N}/', '0123456789', $dummy) === false) {\n\tdie(\"skip no support for \\p support PCRE library\");\n}\n?>\n--INI--\npcre.recursion_limit=2\n--FILE--\n<?php\n\nvar_dump(preg_match_all('/\\p{Ll}(\\p{L}((\\p{Ll}\\p{Ll})))/', 'aeiou', $dummy));\nvar_dump(preg_last_error() === PREG_RECURSION_LIMIT_ERROR);\n\nvar_dump(preg_match_all('/\\p{Ll}\\p{L}\\p{Ll}\\p{Ll}/', 'aeiou', $dummy));\nvar_dump(preg_last_error() === PREG_NO_ERROR);\n\n?>\n--EXPECT--\nbool(false)\nbool(true)\nint(1)\nbool(true)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/skip.ini",
    "content": "[Locale checks]\nskip[]=skip_001.inc\ntest[]=locales.phpt\n\n[No utf8 support in PCRE library]\nskip[]=skip_002.inc\ntest[]=007.phpt\ntest[]=bug27103.phpt\ntest[]=invalid_utf8_offset.phpt\ntest[]=invalid_utf8.phpt\ntest[]=preg_replace2.phpt\n\n[No support for \\p support PCRE library]\nskip[]=skip_003.inc\ntest[]=backtrack_limit.phpt\ntest[]=pcre_anchored.phpt\ntest[]=recursion_limit.phpt\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/skip_001.inc",
    "content": "<?php \n\nif (!function_exists('setlocale')) {\n\tdie('skip: setlocale() not available');\n}\n\nif (!@setlocale(LC_ALL, 'pt_PT', 'pt', 'pt_PT.ISO8859-1', 'portuguese')) {\n\tdie('skip pt locale not available');\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/skip_002.inc",
    "content": "<?php\n\nif (@preg_match('/./u', '') === false) {\n\tdie('skip');\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/skip_003.inc",
    "content": "<?php\n\nif (@preg_match_all('/\\p{N}/', '0123456789', $dummy) === false) {\n\tdie('skip');\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/split.phpt",
    "content": "--TEST--\npreg_split()\n--FILE--\n<?php\n\nvar_dump(preg_split());\nvar_dump(preg_split('/*/', 'x'));\n\nvar_dump(preg_split('/[\\s, ]+/', 'x yy,zzz'));\nvar_dump(preg_split('/[\\s, ]+/', 'x yy,zzz', -1));\nvar_dump(preg_split('/[\\s, ]+/', 'x yy,zzz', 0));\nvar_dump(preg_split('/[\\s, ]+/', 'x yy,zzz', 1));\nvar_dump(preg_split('/[\\s, ]+/', 'x yy,zzz', 2));\n\nvar_dump(preg_split('/\\d*/', 'ab2c3u'));\nvar_dump(preg_split('/\\d*/', 'ab2c3u', -1, PREG_SPLIT_NO_EMPTY));\n\n?>\n--EXPECTF--\nWarning: preg_split() expects at least 2 parameters, 0 given in %ssplit.php on line 3\nbool(false)\n\nWarning: preg_split(): Compilation failed: nothing to repeat at offset 0 in %ssplit.php on line 4\nbool(false)\narray(3) {\n  [0]=>\n  string(1) \"x\"\n  [1]=>\n  string(2) \"yy\"\n  [2]=>\n  string(3) \"zzz\"\n}\narray(3) {\n  [0]=>\n  string(1) \"x\"\n  [1]=>\n  string(2) \"yy\"\n  [2]=>\n  string(3) \"zzz\"\n}\narray(3) {\n  [0]=>\n  string(1) \"x\"\n  [1]=>\n  string(2) \"yy\"\n  [2]=>\n  string(3) \"zzz\"\n}\narray(1) {\n  [0]=>\n  string(8) \"x yy,zzz\"\n}\narray(2) {\n  [0]=>\n  string(1) \"x\"\n  [1]=>\n  string(6) \"yy,zzz\"\n}\narray(8) {\n  [0]=>\n  string(0) \"\"\n  [1]=>\n  string(1) \"a\"\n  [2]=>\n  string(1) \"b\"\n  [3]=>\n  string(0) \"\"\n  [4]=>\n  string(1) \"c\"\n  [5]=>\n  string(0) \"\"\n  [6]=>\n  string(1) \"u\"\n  [7]=>\n  string(0) \"\"\n}\narray(4) {\n  [0]=>\n  string(1) \"a\"\n  [1]=>\n  string(1) \"b\"\n  [2]=>\n  string(1) \"c\"\n  [3]=>\n  string(1) \"u\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/split2.phpt",
    "content": "--TEST--\npreg_split() 2nd test\n--FILE--\n<?php\n\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_DELIM_CAPTURE));\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_OFFSET_CAPTURE));\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE));\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));;\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE));\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE));\n\n\nvar_dump(preg_last_error(1));\nini_set('pcre.recursion_limit', 1);\nvar_dump(preg_last_error() == PREG_NO_ERROR);\nvar_dump(preg_split('/(\\d*)/', 'ab2c3u'));\nvar_dump(preg_last_error() == PREG_RECURSION_LIMIT_ERROR);\n\n?>\n--EXPECTF--\narray(15) {\n  [0]=>\n  string(0) \"\"\n  [1]=>\n  string(0) \"\"\n  [2]=>\n  string(1) \"a\"\n  [3]=>\n  string(0) \"\"\n  [4]=>\n  string(1) \"b\"\n  [5]=>\n  string(1) \"2\"\n  [6]=>\n  string(0) \"\"\n  [7]=>\n  string(0) \"\"\n  [8]=>\n  string(1) \"c\"\n  [9]=>\n  string(1) \"3\"\n  [10]=>\n  string(0) \"\"\n  [11]=>\n  string(0) \"\"\n  [12]=>\n  string(1) \"u\"\n  [13]=>\n  string(0) \"\"\n  [14]=>\n  string(0) \"\"\n}\narray(8) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"b\"\n    [1]=>\n    int(1)\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(3)\n  }\n  [4]=>\n  array(2) {\n    [0]=>\n    string(1) \"c\"\n    [1]=>\n    int(3)\n  }\n  [5]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(5)\n  }\n  [6]=>\n  array(2) {\n    [0]=>\n    string(1) \"u\"\n    [1]=>\n    int(5)\n  }\n  [7]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(6)\n  }\n}\narray(6) {\n  [0]=>\n  string(1) \"a\"\n  [1]=>\n  string(1) \"b\"\n  [2]=>\n  string(1) \"2\"\n  [3]=>\n  string(1) \"c\"\n  [4]=>\n  string(1) \"3\"\n  [5]=>\n  string(1) \"u\"\n}\narray(4) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"b\"\n    [1]=>\n    int(1)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"c\"\n    [1]=>\n    int(3)\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(1) \"u\"\n    [1]=>\n    int(5)\n  }\n}\narray(15) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(0)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(1)\n  }\n  [4]=>\n  array(2) {\n    [0]=>\n    string(1) \"b\"\n    [1]=>\n    int(1)\n  }\n  [5]=>\n  array(2) {\n    [0]=>\n    string(1) \"2\"\n    [1]=>\n    int(2)\n  }\n  [6]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(3)\n  }\n  [7]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(3)\n  }\n  [8]=>\n  array(2) {\n    [0]=>\n    string(1) \"c\"\n    [1]=>\n    int(3)\n  }\n  [9]=>\n  array(2) {\n    [0]=>\n    string(1) \"3\"\n    [1]=>\n    int(4)\n  }\n  [10]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(5)\n  }\n  [11]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(5)\n  }\n  [12]=>\n  array(2) {\n    [0]=>\n    string(1) \"u\"\n    [1]=>\n    int(5)\n  }\n  [13]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(6)\n  }\n  [14]=>\n  array(2) {\n    [0]=>\n    string(0) \"\"\n    [1]=>\n    int(6)\n  }\n}\narray(6) {\n  [0]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    int(0)\n  }\n  [1]=>\n  array(2) {\n    [0]=>\n    string(1) \"b\"\n    [1]=>\n    int(1)\n  }\n  [2]=>\n  array(2) {\n    [0]=>\n    string(1) \"2\"\n    [1]=>\n    int(2)\n  }\n  [3]=>\n  array(2) {\n    [0]=>\n    string(1) \"c\"\n    [1]=>\n    int(3)\n  }\n  [4]=>\n  array(2) {\n    [0]=>\n    string(1) \"3\"\n    [1]=>\n    int(4)\n  }\n  [5]=>\n  array(2) {\n    [0]=>\n    string(1) \"u\"\n    [1]=>\n    int(5)\n  }\n}\n\nWarning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d\nNULL\nbool(true)\narray(1) {\n  [0]=>\n  string(6) \"ab2c3u\"\n}\nbool(true)\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/study.phpt",
    "content": "--TEST--\nStudy regex\n--FILE--\n<?php\n\nvar_dump(preg_match('/(?:(?:(?:(?:(?:(.))))))/  S', 'aeiou', $dump));\nvar_dump($dump[1]);\nvar_dump(preg_match('/(?:(?:(?:(?:(?:(.))))))/', 'aeiou', $dump));\nvar_dump($dump[1]);\n\nvar_dump(preg_match('/(?>..)((?:(?>.)|.|.|.|u))/S', 'aeiou', $dump));\nvar_dump($dump[1]);\n\n// try to trigger usual \"match known text\" optimization\nvar_dump(preg_match('/^aeiou$/S', 'aeiou', $dump));\nvar_dump($dump[0]);\nvar_dump(preg_match('/aeiou/S', 'aeiou', $dump));\nvar_dump($dump[0]);\n\n?>\n--EXPECT--\nint(1)\nstring(1) \"a\"\nint(1)\nstring(1) \"a\"\nint(1)\nstring(1) \"i\"\nint(1)\nstring(5) \"aeiou\"\nint(1)\nstring(5) \"aeiou\"\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/pcre/ungreedy.phpt",
    "content": "--TEST--\nU (PCRE_UNGREEDY) modififer\n--FILE--\n<?php\n\nvar_dump(preg_match('/<.*>/', '<aa> <bb> <cc>', $m));\nvar_dump($m);\n\nvar_dump(preg_match('/<.*>/U', '<aa> <bb> <cc>', $m));\nvar_dump($m);\n\nvar_dump(preg_match('/(?U)<.*>/', '<aa> <bb> <cc>', $m));\nvar_dump($m);\n\n?>\n--EXPECT--\nint(1)\narray(1) {\n  [0]=>\n  string(14) \"<aa> <bb> <cc>\"\n}\nint(1)\narray(1) {\n  [0]=>\n  string(4) \"<aa>\"\n}\nint(1)\narray(1) {\n  [0]=>\n  string(4) \"<aa>\"\n}\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/quote1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$keywords = \"$40 for a g3/400\";\r\n$keywords = preg_quote($keywords, \"/\");\r\necho $keywords; // returns \\$40 for a g3\\/400\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/quote2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// In this example, preg_quote($word) is used to keep the\r\n// asterisks from having special meaning to the regular\r\n// expression.\r\n\r\n$textbody = \"This book is *very* difficult to find.\";\r\n$word = \"*very*\";\r\n$textbody = preg_replace (\"/\" . preg_quote($word) . \"/\",\r\n                         \"<i>\" . $word . \"</i>\",\r\n                         $textbody);\r\necho ($textbody);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/quote3.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$phrase = 'a test'; // note the space\r\n$textbody = 'this is a test';\r\n\r\n// Does not match:\r\nif (preg_match('/' . preg_quote($phrase) . '$/x', $textbody))\r\n\techo \"YES\";\r\nelse\r\n\techo \"NO\";\r\n\r\nfunction preg_quote_white($a) {\r\n     $a = preg_quote($a);\r\n     $a = str_replace(' ', '\\ ', $a);\r\n     return $a;\r\n}\r\n\r\n// Does match:\r\nif (preg_match('/' . preg_quote_white($phrase) . '$/x', $textbody))\r\n\techo \"YES\";\r\nelse\r\n\techo \"NO\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$string = \"April 15, 2003\";\r\n$pattern = \"/(\\w+) (\\d+), (\\d+)/i\";\r\n$replacement = \"\\${1}1,\\$3\";\r\necho preg_replace($pattern, $replacement, $string);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$string = \"The quick brown fox jumped over the lazy dog.\";\r\n\r\n$patterns[0] = \"/quick/\";\r\n$patterns[1] = \"/brown/\";\r\n$patterns[2] = \"/fox/\";\r\n\r\n$replacements[2] = \"bear\";\r\n$replacements[1] = \"black\";\r\n$replacements[0] = \"slow\";\r\n\r\necho preg_replace($patterns, $replacements, $string);\r\n\r\n\r\nksort($patterns);\r\nksort($replacements);\r\n\r\necho preg_replace($patterns, $replacements, $string);\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace3.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$patterns = array (\"/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/\",\r\n                   \"/^\\s*{(\\w+)}\\s*=/\");\r\n$replace = array (\"\\\\3/\\\\4/\\\\1\\\\2\", \"$\\\\1 =\");\r\necho preg_replace($patterns, $replace, \"{startDate} = 1999-5-27\");\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace4.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$str = 'foo  o';\r\n$str = preg_replace('/\\s\\s+/', ' ', $str);\r\n\r\n// This will be 'foo o' now\r\necho $str;\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace5.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n// $document should contain an HTML document.\r\n// This will remove HTML tags, javascript sections\r\n// and white space. It will also convert some\r\n// common HTML entities to their text equivalent.\r\n\r\n$search = array (\"'<script[^>]*?>.*?</script>'si\",  // Strip out javascript\r\n                 \"'<[\\/\\!]*?[^<>]*?>'si\",          // Strip out HTML tags\r\n                 \"'([\\r\\n])[\\s]+'\",                // Strip out white space\r\n                 \"'&(quot|#34);'i\",                // Replace HTML entities\r\n                 \"'&(amp|#38);'i\",\r\n                 \"'&(lt|#60);'i\",\r\n                 \"'&(gt|#62);'i\",\r\n                 \"'&(nbsp|#160);'i\",\r\n                 \"'&(iexcl|#161);'i\",\r\n                 \"'&(cent|#162);'i\",\r\n                 \"'&(pound|#163);'i\",\r\n                 \"'&(copy|#169);'i\");\r\n\r\n$replace = array (\"\",\r\n                 \"\",\r\n                 \"\\\\1\",\r\n                 \"\\\"\",\r\n                 \"&\",\r\n                 \"<\",\r\n                 \">\",\r\n                 \" \",\r\n                 chr(161),\r\n                 chr(162),\r\n                 chr(163),\r\n                 chr(169));\r\n\r\n$document = \"<html><body><b>foo</b>&nbsp;&amp;<i>bar</i>&amp;</body></html>\";\r\n$text = preg_replace($search, $replace, $document);\r\necho $text;\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace6.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$text = \"Hello World. Today I visited http://www.google.com/ for the first time\";\r\n\r\n$text = preg_replace(\"/(http:\\/\\/(.*)\\/)[\\S]*/\", \"<a href=\\\\1>\\\\1</a> \", $text);\r\n\r\necho $text;\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace7.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n$pattern = array('/one/', '/two/');\r\n$replace = array('uno', 'dos');\r\n$subject = \"test one, one two, one two three\";\r\n\r\necho preg_replace($pattern, $replace, $subject, 1);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace8.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n$string = \"Don't split words\";\r\necho substr($string, 0, 10); // Returns \"Don't spli\"\r\n\r\n$pattern = \"/(^.{0,10})(\\W+.*$)/\"; \r\n$replacement = \"\\${1}\";\r\necho preg_replace($pattern, $replacement, $string); // Returns \"Don't\"\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace9.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n$string1 = \"<b>text</b>\";\r\n$string2 = \"<b>te\\nxt</b>\";\r\n\r\n// without the s\r\n#output: something new\r\necho preg_replace(\"/<b>.*<\\/b>/\", \"something new\", $string1);\r\n#output: <b>te\\nxt</b>\r\necho preg_replace(\"/<b>.*<\\/b>/\", \"something more new\", $string2);\r\n\r\n// with the s\r\n#output: something new\r\necho preg_replace(\"/<b>.*<\\/b>/s\", \"something new\", $string1);\r\n#output: something new\r\necho preg_replace(\"/<b>.*<\\/b>/s\", \"something more new\", $string2);\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace_callback1.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n  // this text was used in 2002\r\n  // we want to get this up to date for 2003\r\n  $text = \"April fools day is 04/01/2002\\n\";\r\n  $text.= \"Last christmas was 12/24/2001\\n\";\r\n\r\n  // the callback function\r\n  function next_year($matches) \r\n  {\r\n   // as usual: $matches[0] is the complete match\r\n   // $matches[1] the match for the first subpattern\r\n   // enclosed in '(...)' and so on\r\n   return $matches[1].($matches[2]+1);\r\n  }\r\n\r\n  echo preg_replace_callback(\r\n             \"|(\\d{2}/\\d{2}/)(\\d{4})|\",\r\n             \"next_year\",\r\n             $text);\r\n\r\n  // result is:\r\n  // April fools day is 04/01/2003\r\n  // Last christmas was 12/24/2002\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/replace_callback2.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\n\r\n// v v over simplified\r\nclass foo\r\n{\r\n  function parse()\r\n  {\r\n   $pattern = \"/<a(.*?)href\\s*=\\s*['|\\\"|\\s*](.*?)['|\\\"|>](.*?)>(.*?)<\\/a>/i\";\r\n   $string = \"<a class='whatever' href='http://foo.com' target='_blank'>foo</a>\";\r\n   print preg_replace_callback($pattern,array($this,'cb'),$string);\r\n  }\r\n\r\n  function cb($matches)\r\n  {\r\n   return \"<a\" . $matches[1] . \"href='http://someothersite.com/foo.php?page=\" . $matches[2] . \"'\" . $matches[3] . \">\" . $matches[4] . \"</a>\";\r\n  }\r\n\r\n}\r\n\r\n$bar = new foo();\r\n$bar->parse();\r\n\r\n/**\r\noutput is\r\n<a class='whatever' href='http://someothersite.com/foo.php?page=http%3A%2F%2Ffoo.com' target='_blank'>foo</a>\r\n*/\r\n\r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// split the phrase by any number of commas or space characters,\r\n// which include \" \", \\r, \\t, \\n and \\f\r\n$keywords = preg_split(\"/[\\s,]+/\", \"hypertext language, programming\");\r\n\r\nforeach ($keywords as $k)\r\n\techo \"$k,\";\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$str = 'string';\r\n$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);\r\nprint_r($chars);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$str = 'hypertext language programming';\r\n$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);\r\nvar_dump($chars);\r\n?> "
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split4.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$line = '10.0.0.2 - - [17/Mar/2003:18:03:08 +1100] \"GET /images/org_background.gif HTTP/1.0\" 200 2321 \"http://10.0.0.3/login.php\" \"Mozilla/5.0 Galeon/1.2.7 (X11; Linux i686; U;) Gecko/20021203\"'; \r\n\r\n$elements = preg_split('/^(\\S+) (\\S+) (\\S+) \\[([^\\]]+)\\] \"([^\"]+)\" (\\S+) (\\S+) \"([^\"]+)\" \"([^\"]+)\"/', $line,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); \r\n\r\nprint_r($elements); \r\n?> \r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split5.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nprint_r(preg_split('/ /', '1 2 3 4 5 6 7 8 9', 4));\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/split6.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''a''\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''b''\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''x''\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''a''a\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''b''a\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''x''a\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''a''b\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''b''b\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''x''b\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"''x''bababbbabbbbaaaaaa''''xxxaaaabbbabab  abba;;;a ba a aa   \", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)/i\", \"\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/(a)|a(b)c|(c)|(d)|(e)|(f)/i\", \"abc\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)|(c)|(d)|(e)|(f)/i\", \"abc\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)|(c)|(d)|(e)|(f)/i\", \"abce\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)|(c)|(d)|(e)|(f)/i\", \"abcef\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tvar_dump(preg_split( \"/(a)|(b)|(c)|(d)|(e)|(f)/i\", \"ace\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/(a)|(b)|(c)|(d)|(e)|(f)/i\", \" a b cdabd e bbb a d\", -1, PREG_SPLIT_DELIM_CAPTURE ));\r\n\t\r\n\tvar_dump(preg_split( \"/<(nowiki)|<(!--)/i\", \"'''<nowiki>something</nowiki>'''\", 2, PREG_SPLIT_DELIM_CAPTURE ));\r\n\tprint_r(preg_split(\"/<(nowiki)(\\\\s+[^>]*?|\\\\s*?)(\\/?>)|<(!--)/i\", \"'''<!-- something -->'''\", 2, PREG_SPLIT_DELIM_CAPTURE ));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/ungreedy.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n\r\npreg_match(\"/a*/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a*?/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a+/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a+?/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a?/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a??/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a{2,}/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a{2,}?/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a{2,3}/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\npreg_match(\"/a{2,3}?/U\", \"aaa\", $res);\r\necho $res[0].\"\\n\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/unsuccessful-preg_match_all.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\t$code = \"blah {BLAH} blah\";\r\necho \r\n\tpreg_match_all('#\\{(([a-z0-9\\-_]+?\\.)+?)([a-z0-9\\-_]+?)\\}#is', $code, $varrefs), \"\\n\",\r\n\tcount($varrefs), \"\\n\";\r\n\t\r\n$code = \"blah {BLAH.kvak} blah\";\r\necho \r\n\tpreg_match_all('#\\{(([a-z0-9\\-_]+?\\.)+?)([a-z0-9\\-_]+?)\\}#is', $code, $varrefs), \"\\n\",\r\n\tcount($varrefs), \"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Perl/withoutdelimiters.php",
    "content": "[exact php]\r\n[file]\r\n<?php\r\n\r\nrequire_once ('Phalanger.inc');\r\n\r\n$pattern = '((?i)rah)\\s+\\1';\r\n\r\npreg_match($pattern,\"RAH RAH\",$matches);\r\n__var_dump($matches);\r\n\r\npreg_match($pattern,\"rah RAH\",$matches);\r\n__var_dump($matches);\r\n\r\npreg_match($pattern,\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/backreferences.php",
    "content": "[exact php]\r\n[file]\r\n<?php\r\n\r\nrequire_once ('Phalanger.inc');\r\n\r\npreg_match('#((?i)rah)\\s+\\g{1}3#',\"rah rah3\",$matches);\r\n__var_dump($matches);\r\n\r\npreg_match('#((?i)rah)\\s+\\g{1}#',\"rah rah3\",$matches);\r\n__var_dump($matches);\r\n\r\npreg_match('#((?i)rah)\\s+\\g1#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\npreg_match('#((?i)rah)\\s+\\1#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/dolar_escape.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$vars=array(\"a\"=>\"A\",\"EUR\" => \"$\", \"0\"=>\"O\");\r\n$data = \"It will cost 1,000,000 EUR\";\r\n$patterns = array();\r\n$replacements = array();\r\nif(is_array($vars)){\r\nforeach ($vars as $key => $val) {\r\n$patterns[] = \"/(\" . strtoupper($key) . \")/i\";\r\n$replacements[] = str_replace('$', '\\$', $val);\r\n}\r\n}\r\n$result = preg_replace($patterns,$replacements,$data);\r\nvar_dump($result);\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/double_parentheses_group.php",
    "content": "[Expect php]\r\n[file]\r\n<?php\r\nfunction test() {\r\n    \r\n$pattern = '/((?P<embed>.*))/';\r\n\r\nif (preg_match($pattern,\"hello\", $res))\r\n\techo $res[\"embed\"];\r\n\r\n}\r\n\r\ntest();\r\n\r\n\t\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/ereg.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\ninclude \"Phalanger.inc\";\r\n\r\nerror_reporting(0);\r\n\r\n$a = array(\"a\" => 10);\r\n\r\n__var_dump(ereg(\"([A-Z]*) ([A-Z]*) ([A-Z]*\",\"ADSD  ADASD SD\",$a));\r\n__var_dump($a);\r\n\r\n__var_dump(ereg(\"([A-Z]*) ([A-Z]*) ([A-Z]*)\",\"ADSD  ADASD SD\",$a));\r\n__var_dump($a);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/escaped_unicode.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nif (preg_match (\"/^[a-zA-Z\\_0-9\\:\\/]+([a-zA-Z\\_0-9\\:\\.\\,\\(\\)\\[\\]\\\\-\\/\\s+]*)$/\", \"C:/inetpub/wwwroot/pic/zoom/animals/\"))\r\n\techo \"pica\";\r\nelse\r\n\techo \"nasrat\";\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/groupbug.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\t$yy_global_pattern = \"/^(\\\\{)|^(\\\\})|^([ \\n\\r\\t]+)|^(\\\"[^\\\"]*\\\"|'[^']*')|^(==)|^(!=)|^(<=)|^(>=)|^(\\\\|\\\\|)|^(&&)|^(OR)|^(AND)|^(\\\\$[a-zA-Z0-9_]+)|^([a-zA-Z0-9_]+)|^([;:,.[\\]()|^&+-\\/*=%!~$<>?@])|^([a-zA-Z]+)/\";\r\n\t$data = <<<EOF\r\n{\r\n\t\t//\r\n\t\tvar users = new Array();\r\n\t\tvar arrCount = 0;\r\n\t\tfor (i = 0; i < tform.elements.length; i++)\r\n\t\t{\r\n\t\t//\r\n\t\t\tvar element = tform.elements[i];\r\n\t\t\tif ((element.name != \"allbox\") && (element.type == \"checkbox\") && (element.checked == true))\r\n\t\t\t{\r\n\t\t\t\tusers[arrCount] = element.value;\r\n\t\t\t\tarrCount++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (arrCount == 0)\r\n\t\t{\r\n\t\t\talert(\"{vb:rawphrase no_users_selected}\");\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t//\r\n\t\t\tvar querystring = \"\";\r\n\t\t\tfor (i = 0; i < users.length; i++)\r\n\t\t\t{\r\n\t\t\t\tquerystring += \"&userid[]=\" + users[i];\r\n\t\t\t}\r\n\t\t\tif (opener && !opener.closed)\r\n\t\t\t{ // parent window is still open\r\n\t\t\t\topener.location=\"private.php?{vb:raw session.sessionurl}do=newpm\" + querystring;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{ // parent window has closed or went to a different URL.\r\n\t\t\t\twindow.open(getBaseUrl() + \"private.php?{vb:raw session.sessionurl}do=newpm\" + querystring, \"pm\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// -->\r\n\t</script>\r\n\t{vb:raw headinclude_bottom}\r\n</head>\r\n\r\n<body>\r\n\t<form action=\"private.php\" method=\"post\" target=\"_blank\" name=\"vbform\" id=\"contacts\" class=\"block\">\r\n\t\t<h2 class=\"blockhead\">{vb:rawphrase contacts}</h2>\r\n\t\t<div class=\"blockbody\">\r\n\t\t\t<h3 class=\"blocksubhead\"><strong>{vb:rawphrase online}</strong></h3>\r\n\t\t\t<ul class=\"posterlist\">\r\n\t\t\t\t{vb:raw onlineusers}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t\t\r\n\t\t<div class=\"blockbody\">\r\n\t\t\t<h3 class=\"blocksubhead\"><strong>{vb:rawphrase offline}</strong></h3>\r\n\t\t\t<ul class=\"posterlist\">\r\n\t\t\t\t{vb:raw offlineusers}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t\r\n\t\t<div class=\"blockfoot actionbuttons\">\r\n\t\t\t<div class=\"group\">\r\n\t\t\t\t<input type=\"button\" class=\"button\" value=\"{vb:rawphrase reload}\" onclick=\"window.location = 'misc.php?{vb:raw session.sessionurl}do=buddylist&amp;buddies={vb:raw buddies}';\" />\r\n\t\t\t\t<input type=\"button\" class=\"button\" value=\"{vb:rawphrase pm_users}\" onclick=\"pm(this.form);\" title=\"{vb:rawphrase send_private_message_to_selected_users}\" />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n\t\r\n\t<vb:if condition=\"\\$show['playsound']\">\r\n\t<embed src=\"YourAlertSound.wav\" hidden=\"True\" />\r\n\t</vb:if>\r\n\r\n</body>\r\n</html> \r\nEOF;\r\n\r\n\t$yymatches = array();\r\n\tpreg_match($yy_global_pattern, substr($data, 187), $yymatches);\r\n\r\n\tvar_dump( array_filter($yymatches, 'strlen') );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/namedbackref.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nrequire_once ('Phalanger.inc');\r\n\r\necho \"1</br>\\n\";\r\n\r\npreg_match('#(?<name>(?i)rah)\\s+(?P=name)#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"2</br>\\n\";\r\n\r\npreg_match('#(?<name>(?i)rah)\\s+\\k<name>#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"3</br>\\n\";\r\n\r\npreg_match('#(?<name>(?i)rah)\\s+\\k\\'name\\'#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"4</br>\\n\";\r\n\r\npreg_match('#(?<name>(?i)rah)\\s+\\k{name}#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"5</br>\\n\";\r\n\r\npreg_match('#(?<name>(?i)rah)\\s+\\g{name}#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/namedbackref2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nrequire_once ('Phalanger.inc');\r\n\r\necho \"1</br>\\n\";\r\n\r\npreg_match('#(?<2name>(?i)rah)\\s+(?P=2name)#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"2</br>\\n\";\r\n\r\npreg_match('#(?<2name>(?i)rah)\\s+\\k<2name>#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"3</br>\\n\";\r\n\r\npreg_match('#(?<2name>(?i)rah)\\s+\\k\\'2name\\'#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"4</br>\\n\";\r\n\r\npreg_match('#(?<2name>(?i)rah)\\s+\\k{2name}#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\necho\"</br>\\n</br>\\n\";\r\n\r\necho \"5</br>\\n\";\r\n\r\npreg_match('#(?<2name>(?i)rah)\\s+\\g{2name}#',\"rah rah\",$matches);\r\n__var_dump($matches);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/namedgroups.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nrequire_once ('Phalanger.inc');\r\n\r\npreg_match(\"/(?P<jmeno>hovno)/\",\"praseci hovno\",$matches, PREG_OFFSET_CAPTURE, 0);\r\n__var_dump($matches);\r\n\r\npreg_match(\"/(?'jmeno1'hovno)/\",\"praseci hovno\",$matches, PREG_OFFSET_CAPTURE, 0);\r\n__var_dump($matches);\r\n\r\npreg_match(\"/(?<jmeno2>hovno)/\",\"praseci hovno\",$matches, PREG_OFFSET_CAPTURE, 0);\r\n__var_dump($matches);\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/namedgroups1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n$flux = 'flux.transitions.bars3d\r\n\t\t flux.transitions.wrap';\r\n\r\npreg_match_all('/flux\\.transitions\\.([a-z0-9]+)/', $flux, $transitions);\r\n\r\nvar_dump($transitions);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/namedgroups2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n$flux = 'flux.transitions.bars3d\r\n\t\t flux.transitions.wrap';\r\n\r\npreg_match_all('/flux\\.transitions\\.(?<10>[a-z0-9]+)/', $flux, $transitions);\r\n\r\nvar_dump($transitions);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/nomatchall.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$regex = '/(?P<0_notoc>__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';\r\n\r\n\r\n$text = \"Do you want to clear all saved data that you have entered and restart the installation process?\";\r\n\r\necho \"PREG_PATTERN_ORDER: \\n\";\r\n$res = preg_match_all( $regex, $text, $matches, PREG_PATTERN_ORDER );\r\nvar_dump($matches);\r\n\r\necho \"\\n\\n PREG_SET_ORDER: \\n\";\r\n$res = preg_match_all( $regex, $text, $matches, PREG_SET_ORDER );\r\nvar_dump($matches);\r\n\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/preg_match_unmatched_groups.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction d($x)\r\n{\r\n  if (is_array($x))\r\n  {\r\n    echo \"array {\\n\";\r\n    foreach($x as $k => $v) \r\n    {\r\n      echo \"  $k => \"; \r\n      d($v);\r\n    }  \r\n    echo \"};\";\r\n  }\r\n  elseif (is_null($x))\r\n  {\r\n    echo \"NULL\";\r\n  }\r\n  else\r\n  {\r\n    echo \"'$x'\";\r\n  }\r\n  echo \"\\n\";\r\n}\r\n\r\nd(preg_match(\"/([a-z]+) ([a-z]*)[0-9]* ([a-z]+) ([a-z]+)?/\",\"aaa 555 bbb 555\",$m));\r\nd($m);\r\nd(preg_match(\"/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/\",\"aaa bbb\",$m));\r\nd($m);\r\nd(preg_match(\"/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/\",\"aaa bbb\",$m,PREG_OFFSET_CAPTURE));\r\nd($m);\r\nd(preg_match(\"/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/\",\"564564654\",$m));\r\nd($m);\r\nd(preg_match(\"/([a-z]*)( ([a-z]*)( ([a-z]*))?)?/\",\"654564654\",$m,PREG_OFFSET_CAPTURE));\r\nd($m);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/preg_replace_eval.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho preg_replace(\"/([a-z\\\"]+)([0-9]+)/e\", '\"$1\".\"$2\"', \"ab\\\"01300 as\\\"00da sd\\\"0asdsa das asd 11asd a1sd a\"),\"\\n\";\r\necho preg_replace(\"/([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])([a-z])/e\", \r\n  '\\'(${0},$$1,\\\\,\\l,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,${120})\\'', \"ab\\\"01300 as\\\"00da sd\\\"0aasdasdkjaskldjaklsdjalkdjdsa das asd 11asd a1sd a\");\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/RegEx/regexp-sql.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?\r\n#public static string (string,bool)\r\nfunction FormatSQL($SQL,$Highlight = true)\r\n{  \r\n  // indentation:\r\n  $SQL = str_replace(\"\\r\",\"\",$SQL);\r\n  $lines = explode(\"\\n\",$SQL);\r\n\r\n  $min = 10000;\r\n  for ($i=1;$i<count($lines);$i++)\r\n  { $dif = strlen($lines[$i]) - strlen(ltrim($lines[$i]));\r\n    if ($dif<$min) $min = $dif;\r\n  }\r\n  \r\n  if ($min>0)\r\n    for ($i=1;$i<count($lines);$i++)\r\n      $lines[$i] = substr($lines[$i],$min);\r\n  \r\n  $SQL = \"\\n\".implode(\"\\n\",$lines); \r\n\r\n  if (!$Highlight) return $SQL;\r\n  \r\n  //Highlighting:\r\n  $SqlKeywords = \r\n    // keywords:\r\n    \"SELECT|FROM|WHERE|UPDATE|SET|INSERT|INTO|CREATE|REPLACE|\".\r\n    \"VALUES|DROP|CASCADE|DELETE|\".\r\n    \"CALL|PROCEDURE|FUNCTION|TABLE|VIEW|PACKAGE|BODY|TRIGGER|SEQUENCE|\".\r\n    \"AND|OR|NOT|IN|ON|AS|IS|TO|EXISTS|ORDER|GROUP|HAVING|BY|\".\r\n    \"MOD|LIKE|NUMBER|VARCHAR|DATE|CHAR|CHARACTER|LONG|CONSTANT|BOOLEAN|\".\r\n    \"BEGIN|END|DECLARE|IF|THEN|ELSE|LOOP|FOR|NULL|CHECK|\".\r\n    \"PRIMARY|KEY|FOREIGN|REFERENCES|DETERMINISTIC|DEFFERABLE|\".\r\n    \"REF|CURSOR|OPEN|INSTEAD|OF|EACH|ROW|INTO|RETURN|UNION|\".\r\n    \"MINUS|ALL|SOME|ANY|GRANT|\".\r\n    \"ALTER|MODIFY|PARTITION|TABLESPACE|INITIALLY|DEFERRED|COMMENT|\".\r\n    \"FORCE|DEFAULT|IDENTIFIED|LANGUAGE|NAME|RETURNING|\".\r\n    \"TRUE|FALSE|EXIT|WHEN|BEFORE|AFTER|INDEX|CLUSTER|\".\r\n    \"EXCEPTION|OTHERS|AUTHID|CURRENT_USER|EXECUTE|IMMEDIATE|\".\r\n    \"TYPE|WHILE|NEXT|FIRST|ELSIF|BETWEEN|FOUND|SQL|ROWNUM|\".\r\n    \"NEW|OLD|CURRVAL|ACCESS|BFILE|TRANSACTION|BLOB|BULK|COLLECT|\".\r\n    \"CLOB|CLOSE|RAW|ROWID|NCLOB|NCHAR|UROWID|RECORD|VARRAY|VARCHAR2|\".\r\n    \"DEC|DECIMAL|DOUBLE|PRECISION|FLOAT|INTEGER|INT|NUMERIC|REAL|SMALLINT|\".\r\n    \"PLS_INTEGER|USING|ASC|DESC|ROWNUM\".\r\n    // functions:    \r\n    \"ABS|ACOS|ADD_MONTHS|ATAN|ATAN2|CEIL|COS|COSH|EXP|FLOOR|\".\r\n    \"LN|LOG|MOD|POWER|ROUND|SIGN|SIN|SINH|SQRT|TAN|TANH|\".\r\n    \"CHR|CONCAT|INITCAP|LOWER|LPAD|LTRIM|NLS_INITCAP|\".\r\n    \"NLS_LOWER|NLSSORT|NLS_UPPER|REPLACE|RPAD|RTRIM|SOUNDEX|\".\r\n    \"SUBSTR|SUBSTRB|TRANSLATE|TRIM|UPPER|ASCII|INSTR|\".\r\n    \"INSTRB|LENGTH|\".\r\n    \"LENGTHB|ADD_MONTHS|LAST_DAY|MONTHS_BETWEEN|\".\r\n    \"NEW_TIME|NEXT_DAY|\".\r\n    \"SYSDATE|TRUNC|CHARTOROWID|CONVERT|HEXTORAW|RAWTOHEX|ROWIDTOCHAR|\".\r\n    \"TO_CHAR|TO_DATE|\".\r\n    \"TO_LOB|TO_MULTI_BYTE|TO_NUMBER|TO_SINGLE_BYTE|BFILENAME|DUMP|EMPTY_BLOB|\".\r\n    \"EMPTY_CLOB|GREATEST|LEAST|\".\r\n    \"NLS_CHARSET_DECL_LEN|NLS_CHARSET_ID|NLS_CHARSET_NAME|NVL|SYS_CONTEXT|\".\r\n    \"SYS_GUID|UID|USER|USERENV|VSIZE|\".\r\n    \"DEREF|MAKE_REF|\".\r\n    \"REF|REFTOHEX|\".\r\n    \"VALUE|AVG|COUNT|GROUPING|\".\r\n    \"MAX|MIN|STDDEV|\".\r\n    \"SUM|VARIANCE\";\r\n  \r\n  $SQL = str_replace(\"/*\",\"<I>/*\",$SQL);\r\n  $SQL = str_replace(\"*/\",\"*/</I>\",$SQL);\r\n  $SQL = ereg_replace(\"([^A-Za-z0-9_])($SqlKeywords)([^A-Za-z0-9_])\",\"\\\\1<B>\\\\2</B>\\\\3\",$SQL);\r\n  $SQL = ereg_replace(\"([^>A-Za-z0-9_])($SqlKeywords)([^<A-Za-z0-9_])\",\"\\\\1<B>\\\\2</B>\\\\3\",$SQL);\r\n  $SQL = ereg_replace(\":(new|old)\",\":<B>\\\\1</B>\",$SQL);\r\n  $SQL = ereg_replace(\"--([^\\n]*)[\\n]\",\"<I>--\\\\1</I>\\n\",$SQL);\r\n  $SQL = ereg_replace(\"'([^']*)'\",\"<Q>'\\\\1'</Q>\",$SQL);\r\n  $SQL = ereg_replace(\"'([^']*)'\",\"<Q>'\\\\1'</Q>\",$SQL);\r\n  $SQL = ereg_replace(\"%(TYPE|ROWCOUNT|ROWTYPE|NOTFOUND)\",\"%<B>\\\\1</B>\",$SQL);\r\n  return $SQL;\r\n} \r\n\r\necho FormatSQL(\"SELECT * FROM MyTable WHERE x = 'hello'; /* comment */\");\r\n?>"
  },
  {
    "path": "Testing/Tests/RegEx/regexp_smiles.php",
    "content": "[expect php]\r\n\r\n[file]\r\n<?php\r\nfunction translate($x)\r\n{\r\n$x = reset($x);\r\nreturn \"($x)\";\r\n}\r\necho preg_replace_callback(\r\n'/(?:\\s|^);(?:-\\)|\\))|(?:\\s|^)\\:(?:\\||x|wink\\:|twisted\\:|smile\\:|shock\\:|sad\\:|roll\\:|razz\\:|oops\\:|o|neutral\\:|mrgreen\\:|mad\\:|lol\\:|idea\\:|grin\\:|evil\\:|eek\\:|cry\\:|cool\\:|arrow\\:|P|D|\\?\\?\\?\\:|\\?\\:|\\?|-\\||-x|-o|-P|-D|-\\?|-\\)|-\\(|\\)|\\(|\\!\\:)|(?:\\s|^)8(?:O|-O|-\\)|\\))(?:\\s|$)/m',\r\n'translate',\r\n'smilies :-) :-( :) :( :lol:');\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/SPL/AppendIterator1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$pizzas   = new ArrayIterator(array('Margarita', 'Siciliana', 'Hawaii'));\r\n$toppings = new ArrayIterator(array('Cheese', 'Anchovies', 'Olives', 'Pineapple', 'Ham'));\r\n\r\n$appendIterator = new AppendIterator;\r\n$appendIterator->append($pizzas);\r\n$appendIterator->append($toppings);\r\n\r\nforeach ($appendIterator as $key => $item) {\r\n    echo \"$key => $item\", PHP_EOL;\r\n}\r\n\r\n$appendIterator->append($toppings);\r\nwhile($appendIterator->valid())\r\n{\r\n    echo $appendIterator->key() . \" => \" . $appendIterator->current() . \"\\n\";\r\n    $appendIterator->next();\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/AppendIterator2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass X extends AppendIterator\r\n{\r\n\tfunction current()\r\n\t{\r\n\t\techo __METHOD__ . '; ';\r\n\t\treturn parent::current();\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t\techo __METHOD__ . '; ';\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tfunction key()\r\n\t{\r\n\t\techo __METHOD__ . '; ';\r\n\t\treturn parent::key();\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t\techo __METHOD__ . '; ';\r\n\t\treturn parent::rewind();\r\n\t}\r\n\t\r\n\tfunction next()\r\n\t{\r\n\t\techo __METHOD__ . '; ';\r\n\t\treturn parent::next();\r\n\t}\r\n}\r\nclass ArrIt extends ArrayIterator\r\n{\r\n\tfunction current()\r\n\t{\r\n\t\techo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::current();\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t\t//echo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tfunction key()\r\n\t{\r\n\t\techo __METHOD__ . count($this) . '; ';\r\n\t\treturn parent::key();\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t\techo __METHOD__ . count($this) .'; ';\r\n\t\treturn parent::rewind();\r\n\t}\r\n\t\r\n\tfunction next()\r\n\t{\r\n\t\techo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::next();\r\n\t}\r\n}\r\n\r\n\r\n$pizzas   = new ArrIt(array('Margarita', 'Siciliana', 'Hawaii'));\r\n$toppings = new ArrIt(array('Cheese', 'Anchovies', 'Olives', 'Pineapple', 'Ham'));\r\n\r\n$appendIterator = new X;\r\n$appendIterator->append($pizzas);\r\n$appendIterator->append($toppings);\r\n\r\nforeach ($appendIterator as $key => $item) {\r\n    echo \"$key => $item\", PHP_EOL;\r\n}\r\n\r\n$appendIterator->append($toppings);\r\nwhile($appendIterator->valid())\r\n{\r\n    echo $appendIterator->key() . \" => \" . $appendIterator->current() . \"\\n\";\r\n    $appendIterator->next();\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/ArrayAccess_offsetExists.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nclass ArrayClass implements ArrayAccess \r\n{\r\n    private $index;\r\n    public $x;\r\n    \r\n    function __construct($index)\r\n    {\r\n      $this->index = $index;\r\n      $this->x =& $GLOBALS[\"x\"];\r\n    } \r\n\r\n    function offsetGet($index) \r\n    {\r\n        echo \"{$this->index}: offsetGet($index)\\n\";\r\n        return new ArrayClass($this->index + 1);\r\n    }\r\n    \r\n    function offsetSet($index, $newval) \r\n    { \r\n      echo \"{$this->index}: offsetSet($index,$newval)\\n\";\r\n    }\r\n    \r\n    function offsetExists($index) \r\n    { \r\n      echo \"{$this->index}: offsetExists($index)\\n\";\r\n      return \"\";\r\n    }\r\n    \r\n    function offsetUnset($index)\r\n    {\r\n      echo \"{$this->index}: offsetUnset($index)\\n\";\r\n    }\r\n}\r\n\r\n$x = new ArrayClass(100);\r\n$obj = new ArrayClass(0);\r\n\r\nvar_dump(isset($obj));\r\nvar_dump(isset($obj[10][2]->x[1]->x[8][10][1]));\r\nvar_dump(isset($obj[1][2][3]));\r\nvar_dump(isset($obj[1]));\r\n\r\nvar_dump(empty($obj));\r\nvar_dump(empty($obj[10][2]->x[1]->x[8][10][1]));\r\nvar_dump(empty($obj[1][2][3]));\r\nvar_dump(empty($obj[1]));\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/ArrayIterator1.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction foo()\r\n{\r\n\t$x = new ArrayIterator( array(1,2,3, 'a' => '4', 'b' => 5) );\r\n\t$x[] = 6;\r\n\t\r\n\tforeach ($x as $key => $value)\r\n\t{\r\n\t\techo \"$key => $value\\n\";\r\n\t}\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/ArrayIterator2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nclass ArrayCallbackIterator extends ArrayIterator { \r\n  private $callback; \r\n  public function __construct($value, $callback) { \r\n    parent::__construct($value); \r\n    $this->callback = $callback; \r\n  }\r\n\r\n  public function current() { \r\n    $value = parent::current(); \r\n    return call_user_func($this->callback, $value); \r\n  }\r\n} \r\n\r\nfunction markinate($value)\r\n{\r\n\treturn \"[[$value]]\\n\";\r\n}\r\n\r\nfunction foo()\r\n{\r\n\t$it = new ArrayCallbackIterator(array(\"hello\", \"world\"), \"markinate\");\r\n\tforeach ($it as $markinated)\r\n\t\techo $markinated;\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/ArrayIterator3.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\n#test initial states\r\n\r\nclass ArrIt extends ArrayIterator\r\n{\r\n\tfunction current()\r\n\t{\r\n\t\techo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::current();\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t\t//echo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tfunction key()\r\n\t{\r\n\t\techo __METHOD__ . count($this) . '; ';\r\n\t\treturn parent::key();\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t\techo __METHOD__ . count($this) .'; ';\r\n\t\treturn parent::rewind();\r\n\t}\r\n\t\r\n\tfunction next()\r\n\t{\r\n\t\techo __METHOD__  . count($this). '; ';\r\n\t\treturn parent::next();\r\n\t}\r\n}\r\n\r\nfunction foo()\r\n{\r\n\t$a = new ArrIt(array('ka'=>'a', 'kb'=>'b'));\r\n\tvar_dump($a->valid());\r\n\tvar_dump($a->key());\r\n\tvar_dump($a->current());\r\n\t\r\n\t$a = new ArrIt(array('ka'=>'a', 'kb'=>'b'));\r\n\tvar_dump($a->key());\r\n\tvar_dump($a->valid());\r\n\tvar_dump($a->current());\r\n\t\r\n\t$a = new ArrIt(array('ka'=>'a', 'kb'=>'b'));\r\n\tvar_dump($a->current());\r\n\tvar_dump($a->valid());\r\n\tvar_dump($a->key());\r\n\t\r\n\t$a = new ArrIt(array('ka'=>'a', 'kb'=>'b'));\r\n\tvar_dump($a->current());\r\n\tvar_dump($a->key());\r\n\tvar_dump($a->valid());\r\n\t\r\n\t$a = new ArrIt(array('ka'=>'a', 'kb'=>'b'));\r\n\tvar_dump($a->next());\r\n\tvar_dump($a->current());\r\n\tvar_dump($a->valid());\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/Autoload_ctor.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction my_autoload($name)\r\n{\r\n\r\n\teval('\r\n\t\tclass ' . $name . '\r\n\t\t{\r\n\t\t\tfunction __construct($param){ echo $param; }\r\n\t\t\tfunction foo(){ echo \"foo\"; }\t\r\n\t\t}\r\n\t\t'\r\n\t);\r\n\r\n}\r\n\r\nspl_autoload_register( \"my_autoload\" );\r\n\r\n$x = new AnyClass( \"hello world\" );\r\n$x->foo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/Autoload_extends.inc",
    "content": "<?\r\n\r\nclass XXX extends AnyClass\r\n{\r\n\tfunction foo(){ echo \"foo\"; }\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/Autoload_extends.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction my_autoload($name)\r\n{\r\n\r\n\teval('\r\n\t\tclass ' . $name . '\r\n\t\t{\r\n\t\t\tfunction bar(){ echo \"bar\"; }\t\r\n\t\t}\r\n\t\t'\r\n\t);\r\n\r\n}\r\n\r\nspl_autoload_register( \"my_autoload\" );\r\n\r\n//\r\n// note\r\n// the class must be declared within an inclusion,\r\n// because class declaration is performed before any other code,\r\n// so in case it would be in the same file as spl_autoload_register,\r\n// it sould be performed before autoload initialization\r\n//\r\n// same in PHP\r\n//\r\ninclude \"Autoload_extends.inc\";\r\n\r\n$x = new XXX();\r\n$x->foo();\r\n$x->bar();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/FilterIterator.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// This iterator filters all values with less than 10 characters\r\nclass LengthFilterIterator extends FilterIterator {\r\n\r\n    public function accept() {\r\n        echo \"accept(\".parent::current().\"), \";\r\n\t\t// Only accept strings with a length of 10 and greater\r\n\t\treturn strlen(parent::current()) > 10;\r\n    }\r\n\t\r\n\tpublic function next()\r\n\t{\r\n\t\techo \"next(), \";\r\n\t\treturn parent::next();\r\n\t}\r\n\t\r\n\tpublic function valid()\r\n\t{\r\n\t\techo \"valid(), \";\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tpublic function rewind()\r\n\t{\r\n\t\techo \"rewind(), \";\r\n\t\treturn parent::rewind();\r\n\t}\r\n\r\n}\r\n\r\n$arrayIterator = new ArrayIterator(array('test1', 'more than 10 characters', 'another more than 10 characters', \"test2\", 'test3', 'someting longer than 10 chars'));\r\n$lengthFilter = new LengthFilterIterator($arrayIterator);\r\n\r\n$lengthFilter->rewind();\r\n\r\necho \"\\n\";\r\n\r\nforeach ($lengthFilter as $value) {\r\n    echo \"$value, \";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/RecursiveIteratorIterator1.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$arr = array(\r\n    'Zero',\r\n    'name'=>'Adil',\r\n    'address' => array(\r\n        'city'=>'Dubai',\r\n        'tel' => array(\r\n            'int' => 971,\r\n            'tel'=>12345487)),\r\n    '' => 'nothing');\r\n\r\n$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); \r\n\r\nforeach ($iterator as $k => $v)\r\n{\r\n    echo \"$k => $v\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/RecursiveIteratorIterator2.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nclass X extends RecursiveIteratorIterator\r\n{\r\n\tfunction beginIteration()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::beginIteration();\r\n\t}\r\n\tfunction endIteration()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::endIteration();\r\n\t}\r\n\t\r\n\tfunction beginChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::beginChildren();\r\n\t}\r\n\tfunction endChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::endChildren();\r\n\t}\r\n\r\n    function callHasChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::callHasChildren();\r\n\t}\r\n\tfunction callGetChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::callGetChildren();\r\n\t}\r\n\t\r\n\tfunction current()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::current();\r\n\t}\r\n\t\r\n\tfunction next()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::next();\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::rewind();\r\n\t}\r\n\t\r\n\tfunction nextElement()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::nextElement();\r\n\t}\r\n}\r\n\r\n\r\n$arr = array(\r\n    'Zero',\r\n    'name'=>'Adil',\r\n    'address' => array(\r\n        'city'=>'Dubai',\r\n        'tel' => array(\r\n            'int' => 971,\r\n            'tel'=>12345487)),\r\n    '' => 'nothing');\r\n\r\nvar_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::LEAVES_ONLY/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) );\r\nvar_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) );\r\nvar_dump( iterator_to_array(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/)) );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/RecursiveIteratorIterator3.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nclass X extends RecursiveIteratorIterator\r\n{\r\n\tfunction beginIteration()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::beginIteration();\r\n\t}\r\n\tfunction endIteration()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::endIteration();\r\n\t}\r\n\t\r\n\tfunction beginChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::beginChildren();\r\n\t}\r\n\tfunction endChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::endChildren();\r\n\t}\r\n\r\n    function callHasChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::callHasChildren();\r\n\t}\r\n\tfunction callGetChildren()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::callGetChildren();\r\n\t}\r\n\t\r\n\tfunction current()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::current();\r\n\t}\r\n\t\r\n\tfunction next()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::next();\r\n\t}\r\n\t\r\n\tfunction valid()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::valid();\r\n\t}\r\n\t\r\n\tfunction rewind()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::rewind();\r\n\t}\r\n\t\r\n\tfunction nextElement()\r\n\t{\r\n\t\techo __METHOD__ . \"; \";\r\n\t\treturn parent::nextElement();\r\n\t}\r\n}\r\n\r\n\r\n$arr = array(\r\n    'Zero',\r\n    'name'=>'Adil',\r\n    'address' => array(\r\n        'city'=>'Dubai',\r\n        'tel' => array(\r\n            'int' => 971,\r\n            'tel'=>12345487)),\r\n    '' => 'nothing');\r\n\r\nfunction iterate( $it, $depth )\r\n{\r\n\tif ($depth) $it->setMaxDepth($depth);\r\n\t\r\n\tforeach ($it as $k => $v)\r\n\t{\r\n\t\techo \"[$k];\\n\";\r\n\t}\r\n}\r\n\t\r\niterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::LEAVES_ONLY/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false);\r\niterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false);\r\niterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/),false);\r\niterate(new X(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::CHILD_FIRST/*, RecursiveIteratorIterator::CATCH_GET_CHILD*/), 1);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplFixedArray1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// Initialize the array with a fixed length\r\n$array = new SplFixedArray(5);\r\n\r\n$array[1] = 2;\r\n$array[4] = \"foo\";\r\n\r\nvar_dump($array[0]); // NULL\r\nvar_dump($array[1]); // int(2)\r\n\r\nvar_dump($array[\"4\"]); // string(3) \"foo\"\r\n\r\n// Increase the size of the array to 10\r\n$array->setSize(10);\r\n\r\n$array[9] = \"asdf\";\r\n\r\nvar_dump($array[false]);\r\nvar_dump($array[1.0]);\r\n\r\n// Shrink the array to a size of 2\r\n$array->setSize(2);\r\n\r\n// The following lines throw a RuntimeException: Index invalid or out of range\r\ntry {\r\n    var_dump($array[\"non-numeric\"]);\r\n} catch(RuntimeException $re) {\r\n    echo \"RuntimeException: \".$re->getMessage().\"\\n\";\r\n}\r\n\r\ntry {\r\n    var_dump($array[-1]);\r\n} catch(RuntimeException $re) {\r\n    echo \"RuntimeException: \".$re->getMessage().\"\\n\";\r\n}\r\n\r\ntry {\r\n    var_dump($array[5]);\r\n} catch(RuntimeException $re) {\r\n    echo \"RuntimeException: \".$re->getMessage().\"\\n\";\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplFixedArray2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// Initialize the array with a fixed length\r\n$array = new SplFixedArray(5);\r\n\r\n$array[1] = 2;\r\n$array[4] = \"foo\";\r\n$array->setSize(10);\r\n$array[9] = \"asdf\";\r\n\r\nforeach ($array as $k => $v)\r\n\techo \"$k: $v\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplObjectStorage1.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// As a map from objects to data\r\n$s = new SplObjectStorage();\r\n\r\n$o1 = new StdClass;\r\n$o2 = new StdClass;\r\n$o3 = new StdClass;\r\n\r\n$s[$o1] = \"data for object 1\";\r\n$s[$o2] = array(1,2,3);\r\n\r\nif (isset($s[$o2])) {\r\n    var_dump($s[$o2]);\r\n}\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplObjectStorage2.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// As an object set\r\n$s = new SplObjectStorage();\r\n\r\n$o1 = new StdClass;\r\n$o2 = new StdClass;\r\n$o3 = new StdClass;\r\n\r\n$s->attach($o1);\r\n$s->attach($o2);\r\n\r\nvar_dump($s->contains($o1));\r\nvar_dump($s->contains($o2));\r\nvar_dump($s->contains($o3));\r\n\r\n$s->detach($o2);\r\n\r\nvar_dump($s->contains($o1));\r\nvar_dump($s->contains($o2));\r\nvar_dump($s->contains($o3));\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplObjectStorage3.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// As a map from objects to data\r\n$s = new SplObjectStorage();\r\n\r\n$o1 = new StdClass;\r\n$o2 = new StdClass;\r\n$o3 = new StdClass;\r\n\r\n$s[$o1] = \"data for object 1\";\r\n$s[$o2] = \"two\";\r\n$s[$o3] = 3;\r\n\r\n$s->detach($o2);\r\n\r\n\r\nforeach ($s as $k => $v)\r\n{\r\n\tvar_dump( $k, $s->getInfo() );\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/SplObjectStorage4.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n// As a map from objects to data\r\n$s = new SplObjectStorage();\r\n\r\n$o1 = new StdClass;\r\n$o2 = new StdClass;\r\n$o3 = new StdClass;\r\n\r\n$s[$o1] = \"data for object 1\";\r\n$s[$o2] = \"two\";\r\n$s[$o3] = 3;\r\n\r\nvar_dump($s->key(), $s->valid());\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/exceptions.php",
    "content": "[expect exact]\r\nNULL\r\nstring(18) \"exception_handler1\"\r\nstring(18) \"exception_handler2\"\r\nstring(18) \"exception_handler1\"\r\nUncaught exception: hello world\r\n[file]\r\n<?\r\nfunction exception_handler1($exception)\r\n{\r\n  echo \"Uncaught exception: \" , $exception->getMessage(), \"\\n\";\r\n}\r\n\r\nfunction exception_handler2($exception)\r\n{\r\n  echo \"Uncaught exception: \" , $exception->getMessage(), \"\\n\";\r\n}\r\n\r\nfunction exception_handler3($exception)\r\n{\r\n  echo \"Uncaught exception: \" , $exception->getMessage(), \"\\n\";\r\n}\r\n\r\nvar_dump(set_exception_handler('exception_handler1'));\r\nvar_dump(set_exception_handler('exception_handler2'));\r\nvar_dump(set_exception_handler('exception_handler3'));\r\n\r\nrestore_exception_handler();\r\nrestore_exception_handler();\r\n\r\nvar_dump(set_exception_handler('exception_handler3'));\r\n\r\nclass E extends Exception\r\n{\r\n  function __toString()\r\n  {\r\n    return \"!!!\";\r\n  }\r\n}\r\n\r\nfunction f()\r\n{\r\n  throw new E(\"hello world\");\r\n}\r\n\r\nf();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/SPL/object_hash.php.skip",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\t//class X{}\r\n\r\n\tvar_dump( spl_object_hash( null ) );\r\n\tvar_dump( spl_object_hash( 0 ) );\r\n\tvar_dump( spl_object_hash( 123 ) );\r\n\tvar_dump( spl_object_hash( \"hello\" ) );\r\n\t\r\n\t// following cannot be compared with PHP: (use PHPT with regex as expected output)\r\n\t//var_dump( spl_object_hash( new X ) );\r\n\t//var_dump( spl_object_hash( new X ) );\r\n\t//var_dump( spl_object_hash( new X ) );\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/addcslashes.php",
    "content": "[comment]\r\n[expect php]\r\n[file]\r\n\r\n\r\n<?php\r\necho addcslashes('foo[ ]', 'A..z');\r\n// output:  \\f\\o\\o\\[ \\]\r\n?>\r\n\r\nIssues a Warning:\r\n// echo addcslashes(\"zoo['.']\", 'z..A');\r\n// output:  \\zoo['\\.']\r\n"
  },
  {
    "path": "Testing/Tests/Strings/addslashes.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n$x = '/* tooltips and access keys */\r\nta = new Object();\r\nta[\\'pt-userpage\\'] = new Array(\\'.\\',\\'My user page\\');\r\nta[\\'pt-anonuserpage\\'] = new Array(\\'.\\',\\'The user page for the ip you\\\\\\'re editing as\\');';\r\n\r\nini_set(\"magic_quotes_sybase\",0);\r\necho addslashes($x), \"\\n\\n\";\r\nini_set(\"magic_quotes_sybase\",1);\r\necho addslashes($x), \"\\n\\n\";\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/chunk_split.php",
    "content": "[comment]\r\n[expect php]\r\n[file]\r\n\r\n<?php\r\n$data = @file_get_contents(\"http://www.google.com/\");\r\nif ($data === false) die('NO NETWORK CONNECTION!');\r\n\r\n// format $data using RFC 2045 semantics\r\n$new_string = chunk_split(base64_encode($data));\r\n?> "
  },
  {
    "path": "Testing/Tests/Strings/compare_binary.php",
    "content": "[expect php]\r\n27390\r\n[file]\r\n<?php\r\n\r\n$arr = array((binary)\"26205\", (binary)\"27390\");\r\n\r\necho max($arr);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/concat.php",
    "content": "[expect exact]\r\nstring(2) \"ab\"\r\nstring(2) \"ab\"\r\nstring(2) \"ab\"\r\nstring(2) \"ab\"\r\nstring(2) \"ab\"\r\nstring(2) \"aB\"\r\nstring(2) \"Ab\"\r\nstring(2) \"AB\"\r\nstring(2) \"ab\"\r\nstring(2) \"a1\"\r\nstring(2) \"1b\"\r\nstring(2) \"11\"\r\nstring(2) \"ab\"\r\nstring[binary](2) \"aB\"\r\nstring[binary](2) \"Ab\"\r\nstring[binary](2) \"AB\"\r\n\r\n[file]\r\n<?\r\n  function f()\r\n  {\r\n    $a = \"a\";\r\n    $b = \"b\";\r\n    \r\n    var_dump(\"a\" . \"b\");\r\n    var_dump(\"a\" . $b);\r\n    var_dump($a . \"b\");\r\n    var_dump($a . $b);\r\n    \r\n    var_dump(\"a\" . \"b\");\r\n    var_dump(\"a\" . strtoupper(\"b\"));\r\n    var_dump(strtoupper(\"a\") . \"b\");\r\n    var_dump(strtoupper(\"a\") . strtoupper(\"b\"));\r\n    \r\n    var_dump(\"a\" . \"b\");\r\n    var_dump(\"a\" . count(\"a\"));\r\n    var_dump(count(\"a\") . \"b\");\r\n    var_dump(count(\"a\") . count(\"b\"));\r\n    \r\n    var_dump(\"a\" . \"b\");\r\n    var_dump(\"a\" . pack(\"c\",66));\r\n    var_dump(pack(\"c\",65) . \"b\");\r\n    var_dump(pack(\"c\",65) . pack(\"c\",66));\r\n  }\r\n\r\n  f();\r\n?>  "
  },
  {
    "path": "Testing/Tests/Strings/count_chars.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$data = \"Two Ts and one F.\";\r\n\r\n$result = count_chars($data, 0);\r\n\r\nfor ($i=0; $i < count($result); $i++) {\r\n   if ($result[$i] != 0)\r\n       echo \"There were $result[$i] instance(s) of \\\"\" , chr($i) , \"\\\" in the string.\\n\";\r\n}\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Strings/crc32.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$checksum = crc32(\"The quick brown fox jumped over the lazy dog.\");\r\nprintf(\"%u\\n\", $checksum);\r\n?>  "
  },
  {
    "path": "Testing/Tests/Strings/crypt.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$p = \"My1sTpassword\";\r\n$password = crypt($p); // let salt be generated\r\n\r\n# You should pass the entire results of crypt() as the salt for comparing a\r\n# password, to avoid problems when different hashing algorithms are used. (As\r\n# it says above, standard DES-based password hashing uses a 2-character salt,\r\n# but MD5-based hashing uses 12.)\r\n\r\nif (crypt($p, $password) == $password) {\r\n   echo \"Password verified!\";\r\n}\r\n\r\n?>  "
  },
  {
    "path": "Testing/Tests/Strings/crypt2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho \r\n  crc32(\"hello\"),\"\\n\";\r\n\r\necho \r\n  md5(\"hello\"),\"\\n\",\r\n  bin2hex(md5(\"hello\",true)),\"\\n\",\r\n  md5_file(__FILE__),\"\\n\";\r\n\r\necho \r\n  sha1(\"hello\"),\"\\n\",\r\n  bin2hex(sha1(\"hello\",true)),\"\\n\",\r\n  sha1_file(__FILE__),\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/echo.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\necho \"Hello World\";\r\n\r\necho \"This spans\r\nmultiple lines. The newlines will be \r\noutput as well\";\r\n\r\necho \"This spans\\nmultiple lines. The newlines will be\\noutput as well.\";\r\n\r\necho \"Escaping characters is done \\\"Like this\\\".\";\r\n\r\n// You can use variables inside of an echo statement\r\n$foo = \"foobar\";\r\n$bar = \"barbaz\";\r\n\r\necho \"foo is $foo\"; // foo is foobar\r\n\r\n// Using single quotes will print the variable name, not the value\r\necho 'foo is $foo'; // foo is $foo\r\n\r\n// If you are not using any other characters, you can just echo variables\r\necho $foo;          // foobar\r\necho $foo,$bar;     // foobarbarbaz\r\n\r\n// You can also use arrays\r\n$bar = array(\"value\" => \"foo\");\r\n\r\necho \"this is {$bar['value']} !\"; // this is foo !\r\n\r\n// Some people prefer passing multiple parameters to echo over concatenation.\r\necho 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10);\r\necho 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . \"\\n\";\r\n\r\n$variable = \"[VARIABLE]\";\r\necho <<<END\r\nThis uses the \"here document\" syntax to output\r\nmultiple lines with $variable interpolation. Note\r\nthat the here document terminator must appear on a\r\nline with just a semicolon. no extra whitespace!\r\nEND;\r\n\r\n$some_var = 1;\r\n// Because echo is not a function, following code is invalid. \r\n//REM ($some_var) ? echo 'true' : echo 'false';\r\n\r\n// However, the following examples will work:\r\n($some_var) ? print('true'): print('false'); // print is a function\r\necho $some_var ? 'true': 'false'; // changing the statement around\r\n?>\r\n\r\nSHORT TAG SYNTAX: <?=$some_var?>\r\n"
  },
  {
    "path": "Testing/Tests/Strings/explode.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n// Example 1\r\n$pizza  = \"piece1 piece2 piece3 piece4 piece5 piece6\";\r\n$pieces = explode(\" \", $pizza);\r\necho $pieces[0]; // piece1\r\necho $pieces[1]; // piece2\r\n\r\n// Example 2\r\n$data = \"foo:*:1023:1000::/home/foo:/bin/sh\";\r\nlist($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(\":\", $data);\r\necho $user; // foo\r\necho $pass; // *\r\n\r\n// Example 3\r\n$data = \"foo[SEP]*[SEP]1023[SEP]1000[SEP][SEP]/home/foo[SEP]/bin/sh\";\r\nlist($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(\"[SEP]\", $data);\r\necho $user; // foo\r\necho $pass; // *\r\n\r\n?> "
  },
  {
    "path": "Testing/Tests/Strings/get_html_translation_table.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n//printme(get_html_translation_table(HTML_ENTITIES));\r\n\r\necho \"<hr>\";\r\nprintme(get_html_translation_table(HTML_SPECIALCHARS));\r\necho \"<hr>\";\r\n\r\n$trans = get_html_translation_table(HTML_ENTITIES);\r\n$str = \"Hallo & <Frau> & Krmer\";\r\necho $encoded = strtr($str, $trans);\r\n\r\n\r\nfunction printme($a)\r\n{\r\nasort($a);\r\nforeach ($a as $k => $v) echo \"[$k] => $v\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/mb_strlen.php",
    "content": "[expect php]\n[file]\n<?php\n\n$str = 'test';\nprint 'mb_strlen(): '.mb_strlen($str).'<br />';\nprint 'strlen(): '.strlen($str).'<br />';\n\n\n?>"
  },
  {
    "path": "Testing/Tests/Strings/nl2br.php",
    "content": "[expect php]\r\n[file]\r\n{{\r\n<?\r\necho nl2br(\"\\n\\r\\r\\n\\n\\r\\n\\n\");\r\n?>\r\n}}"
  },
  {
    "path": "Testing/Tests/Strings/pack.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  echo bin2hex(pack(\"ccc\",-5,\"0001x\",\"-8\")),\"\\n\";\r\n\techo bin2hex(pack(\"cCsS\",1,1,1,1)),\"\\n\";\r\n\techo bin2hex(pack(\"nviI\",1,1,1,1)),\"\\n\";\r\n\techo bin2hex(pack(\"lLNV\",1,1,1,1)),\"\\n\";\r\n\techo bin2hex(pack(\"fd\",1,1)),\"\\n\";\r\n\t\r\n\techo bin2hex(pack(\"H*\",\"abcde\")),\"\\n\";\r\n\techo bin2hex(pack(\"h*\",\"abcde\")),\"\\n\";\r\n\techo bin2hex(pack(\"H*\",\"abcd\")),\"\\n\";\r\n\techo bin2hex(pack(\"h*\",\"abcd\")),\"\\n\";\r\n  echo bin2hex(pack(\"H3i\",\"181\",5)),\"\\n\";\r\n\r\n\techo bin2hex(pack(\"A*\",\"hello\")),\"\\n\";\r\n\techo bin2hex(pack(\"a2\",\"hello\")),\"\\n\";\r\n\techo bin2hex(pack(\"a10\",\"hello\")),\"\\n\";\r\n\techo bin2hex(pack(\"A10\",\"hello\")),\"\\n\";\r\n\t\r\n  echo bin2hex(pack(\"nvc*\", 0x1234, 0x5678, 65, 66)),\"\\n\"; \r\n  echo bin2hex(pack(\"x10X5x8x1X2x1X2\")),\"\\n\";\r\n\t\r\n\techo bin2hex(pack(\"@5s2c3\",\"+5e10\",\"007xasd\",\"-6\",\"49\",\".1\")),\"\\n\";\r\n\techo bin2hex(pack(\"@5f2c3\",\"+5e10\",\"007xasd\",\"-6\",\"49\",\".1\")),\"\\n\";\r\n\t\r\n\techo bin2hex(pack(\"a*\",\"\")),\"\\n\";\r\n\techo bin2hex(pack(\"a0\",\"xxx\")),\"\\n\";\r\n\t\r\n  list(,$unpacked) = unpack(\"s*\", pack(\"s*\", 123));\r\n  echo $unpacked,\"\\n\";\r\n\r\n  $b=unpack(\"H3/ias\",pack(\"H3i\",\"181\",5));\r\n  echo count($b),\"\\n\",$b[1],\"\\n\",$b[\"as\"],\"\\n\";\t\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/pos.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction f($x)\r\n{\r\n  $x = (($x===null) ? \"NULL\" : (($x===\"\") ? \"''\" : (($x===false) ? \"FALSE\" : $x)));\r\n  return \"$x\\n\";\r\n}\r\n\r\n$a = array(1,0,\"\",null,false,10);\r\n\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\necho f(next($a));\r\necho f(current($a));\r\necho f(key($a));\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/runtime-quotes.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction set($rt,$sb)\r\n{\r\n  ini_set(\"magic_quotes_runtime\", $rt);\r\n  ini_set(\"magic_quotes_sybase\", $sb);\r\n  echo \r\n    \"magic_quotes_runtime = \",(int)ini_get(\"magic_quotes_runtime\"),\", \",\r\n    \"magic_quotes_sybase = \",(int)ini_get(\"magic_quotes_runtime\"),\"\\n\";\r\n}\r\n\r\nfunction read_test($file)\r\n{\r\n  $fp = fopen($file,\"rt\");\r\n\r\n  $fread = fread($fp,10);\r\n  echo \"fread = ($fread)\\n\";\r\n\r\n  @rewind($fp);\r\n  \r\n  $fgets = fgets($fp);\r\n  echo \"fgets = ($fgets)\\n\";\r\n\r\n  fclose($fp);\r\n\r\n  $array = file($file);\r\n  echo \"file[0] = (\",$array[0],\")\\n\";\r\n}\r\n\r\nfunction write_test($file)\r\n{\r\n  $text = \"a\\\\'b\\\"\\\\\\\\c\";\r\n\r\n  $fp = fopen($file,\"wt\");\r\n\r\n  $fwrite = fwrite($fp,$text);\r\n  echo \"fwrite = ($fwrite)\\n\";\r\n\r\n  $fputs = fputs($fp,$text);\r\n  echo \"fputs = ($fputs)\\n\";\r\n\r\n  fclose($fp);\r\n}\r\n\r\nfunction test_exec($cmd)\r\n{\r\n  echo `$cmd`;\r\n  echo exec($cmd),\"\\n\";\r\n  echo shell_exec($cmd);\r\n  passthru($cmd);\r\n}\r\n\r\nchdir(dirname(__FILE__));\r\n\r\nset(1,1);\r\nread_test(\"runtime-quotes.txt\");\r\n\r\nset(1,1);\r\nwrite_test(\"runtime-quotes2.txt\");\r\n\r\nset(0,0);\r\nread_test(\"runtime-quotes.txt\");\r\n\r\nset(0,0);\r\nread_test(\"runtime-quotes2.txt\");\r\n\r\nset(1,1);\r\ntest_exec(\"echo e'e\"); \r\n\r\nset(0,0);\r\ntest_exec(\"echo e'e\"); \r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/runtime-quotes.txt",
    "content": "x'y\"z"
  },
  {
    "path": "Testing/Tests/Strings/runtime-quotes2.txt",
    "content": "a\\'b\"\\\\ca\\'b\"\\\\c"
  },
  {
    "path": "Testing/Tests/Strings/sprintf.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\ndate_default_timezone_set(\"Europe/Prague\");\r\n\r\n$isodate = sprintf(\"%04d-%02d-%02d\", date('Y'), date('m'), date('d'));\r\necho \"DATE: [$isodate]\\n\"\r\n\r\n?>  \r\n \r\nExample 2. sprintf(): formatting currency\r\n\r\n<?php\r\n$money1 = 68.75;\r\n$money2 = 54.35;\r\n$money = $money1 + $money2;\r\n echo $money . \"\\n\"; // will output \"123.1\";\r\n$formatted = sprintf(\"%01.2f\", $money);\r\n echo $formatted . \"\\n\"; // will output \"123.10\"\r\n?>  \r\n \r\n"
  },
  {
    "path": "Testing/Tests/Strings/sprintf2.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho sprintf(\"%e\\n\", 1.123456789);\r\necho sprintf(\"%.10e\\n\", 1.123456789);\r\necho sprintf(\"%.0e\\n\", 1.123456789);\r\necho sprintf(\"%.1e\\n\", 1.123456789);\r\necho sprintf(\"%5.1e\\n\", 1.123456789);\r\necho \"---\\n\";\r\necho sprintf(\"%f\\n\", 1.123456789);\r\necho sprintf(\"%.10f\\n\", 1.123456789);\r\necho sprintf(\"%.0f\\n\", 1.123456789);\r\necho sprintf(\"%.1f\\n\", 1.123456789);\r\necho sprintf(\"%5.1f\\n\", 1.123456789);\r\necho \"---\\n\";\r\necho sprintf(\"%e\\n\", 123.123456789);\r\necho sprintf(\"%.10e\\n\", 123.123456789);\r\necho sprintf(\"%.0e\\n\", 123.123456789);\r\necho sprintf(\"%.1e\\n\", 123.123456789);\r\necho sprintf(\"%5.1e\\n\", 123.123456789);\r\necho \"---\\n\";\r\necho sprintf(\"%12.10e\\n\", 1);\r\necho sprintf(\"%e\\n\", 111.234E-18);\r\necho sprintf(\"%e\\n\", 1.234E+18);\r\necho sprintf(\"%e\\n\", 9843243.12);\r\necho sprintf(\"%e\\n\", -9843243.12);\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/str_ireplace.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction da($a)\r\n{\r\n  foreach($a as $k => $v) echo \"$k => $v\\n\";\r\n}\r\n\r\necho str_replace(\"\",\"as\",\"asxas\"),\"\\n\";\r\n\r\n$a = array(\"aLEP\",\"be\",\"th\",\"mm\");\r\n$b = array(\"bet\",\"he\",\"he\");\r\n$c = array(\"aleph\",\"beth\",\"gimmel\");\r\nda(str_ireplace($a,$b,$c));\r\n\r\n\r\n$a = array(\"aLEP\",\"be\",\"th\",\"mm\");\r\n$b = array(\"bet\",\"he\",\"he\");\r\n$c = array(\"aleph\",\"beth\",\"gimmel\");\r\nda(str_replace($a,$b,$c));\r\n\r\nda(str_ireplace(array (\r\n                                   '*',\r\n                                   'SELECT ',\r\n                                   'UPDATE ',\r\n                                   'DELETE ',\r\n                                   'INSERT ',\r\n                                   'INTO',\r\n                                   'VALUES',\r\n                                   'FROM',\r\n                                   'LEFT',\r\n                                   'JOIN',\r\n                                   'WHERE',\r\n                                   'LIMIT',\r\n                                   'ORDER BY',\r\n                                   'AND',\r\n                                   'OR ',\r\n                                   'DESC',\r\n                                   'ASC',\r\n                                   'ON '\r\n                                 ),\r\n                           array (\r\n                                   \"<FONT COLOR='#FF6600'><B>*</B></FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>SELECT</B> </FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>UPDATE</B> </FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>DELETE</B> </FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>INSERT</B> </FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>INTO</B></FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>VALUES</B></FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>FROM</B></FONT>\",\r\n                                   \"<FONT COLOR='#00CC00'><B>LEFT</B></FONT>\",\r\n                                   \"<FONT COLOR='#00CC00'><B>JOIN</B></FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>WHERE</B></FONT>\",\r\n                                   \"<FONT COLOR='#AA0000'><B>LIMIT</B></FONT>\",\r\n                                   \"<FONT COLOR='#00AA00'><B>ORDER BY</B></FONT>\",\r\n                                   \"<FONT COLOR='#0000AA'><B>AND</B></FONT>\",\r\n                                   \"<FONT COLOR='#0000AA'><B>OR</B> </FONT>\",\r\n                                   \"<FONT COLOR='#0000AA'><B>DESC</B></FONT>\",\r\n                                   \"<FONT COLOR='#0000AA'><B>ASC</B></FONT>\",\r\n                                   \"<FONT COLOR='#00DD00'><B>ON</B> </FONT>\"\r\n                                 ),\r\n                           array(\r\n                            \"Select * from adsad where asdasdasda order by by order by limit 21 on asc descwhere\",\r\n                            \"select from upsdateinsertasc delete join axax\"),\r\n                            $count\r\n                         ));\r\necho $count,\"\\n\";\r\n\r\necho bin2hex(str_ireplace(\"\\r\\n\",\"-\",\"\\r\\nhell\\r\\n\\r\\n\\r\\no\\r\\nw\\r\\n\",$c1));\r\necho bin2hex(str_replace(\"\\r\\n\",\"-\",\"h\\r\\nel\\r\\nlow\\r\\r\\n\\r\\n\\n\",$c2));\r\necho $c1,\"-\",$c2;\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/str_replace.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction da($a)\r\n{\r\n  foreach($a as $k => $v) echo \"$k => $v\\n\";\r\n}\r\n\r\n// 8 combinations of possible str_replace arguments:\r\n\r\n$arr1 = array(\r\n\"a\" => \"hello\",\r\n\"b\" => \"world\",\r\n\"c\" => \"earth\",\r\n\"d\" => \"europe\",\r\n\"e\" => \"africa\",\r\n\"f\" => \"america\",\r\n\"g\" => \"asia\",\r\n\"h\" => \"eheheheheheijijijijijlololololo\",\r\n\"i\" => \"klpofklpofklpof\",\r\n\"j\" => \"www\",\r\n\"k\" => \"lo\",\r\n\"l\" => \"as\",\r\n\"m\" => \"ing\",\r\n\"n\" => \"y\",\r\n\"o\" => \"string\");\r\n\r\n$arr2 = array(\r\n\"h\" => \"eheheheheheijijijijijlololololo\",\r\n\"i\" => \"klpofklpofklpof\",\r\n\"j\" => \"www\",\r\n\"k\" => \"lo\",\r\n\"l\" => \"as\",\r\n\"m\" => \"ing\",\r\n\"n\" => \"y\");\r\n\r\n$str = \"hello, very long string with several substrings to be replaced or removed\";\r\n\r\necho str_replace(array(\"hello\", \"string\", \"very\", \"long\"), array(\"XXX\"), $str), \"\\n\";// replace only the first needle with XXX\r\necho str_replace(array(\"hello\", \"string\", \"very\", \"long\"), \"XXX\", $str), \"\\n\";  // replace all the needles with the same replacement\r\n\r\necho str_replace(\"\",\"eh, nothing will happen\",$str),\"\\n\";\r\necho str_replace(\"ing\",\"\",$str),\"\\n\";\r\n//echo str_replace(\"remo\",$arr1,$str),\"\\n\";\r\necho str_replace($arr2,$arr1,$str),\"\\n\";\r\necho str_replace($arr1,$arr2,$str),\"\\n\";\r\necho str_replace($arr1,\"some replacement\",$str),\"\\n\";\r\n\r\nda( str_replace(\"\",\"eh, nothing will happen\",$arr1) );\r\nda( str_replace(\"ing\",\"\",$arr2) );\r\n//da( str_replace(\"remo\",$arr1,$arr1) );\r\nda( str_replace($arr2,$arr1,$arr2) );\r\nda( str_replace($arr1,$arr2,$arr1) );\r\nda( str_replace($arr1,\"some replacement\",$arr2) );\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/str_word_count.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ninclude('Phalanger.inc');\r\n\r\n$str = \"Hello friend, you're looking          good today!\";\r\n\r\n$str2 = \"F0o B4r 1s bar foo\";\r\n\r\n$str3 = \"foo'0 bar-0var bar-xvar bar- var'\";\r\n\r\n__var_dump(str_word_count($str, 1));\r\n__var_dump(str_word_count($str, 2));\r\necho str_word_count($str),\"\\n\";\r\n\r\necho str_word_count($str2, NULL, \"04\"),\"\\n\";\r\necho str_word_count($str2, NULL, \"01\"),\"\\n\";\r\necho str_word_count($str2, NULL, \"014\"),\"\\n\";\r\necho str_word_count($str2, NULL, \"\"),\"\\n\";\r\n\r\necho \"-0-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 1, \"04\"));\r\n\r\necho \"-1-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 1, \"01\"));\r\n\r\necho \"-2-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 1, \"014\"));\r\n\r\necho \"-3-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 1, \"\"));\r\n\r\necho \"-4-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 2, \"04\"));\r\n\r\necho \"-5-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 2, \"01\"));\r\n\r\necho \"-6-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 2, \"014\"));\r\n\r\necho \"-7-\\n\";\r\n\r\n__var_dump(str_word_count($str2, 2, \"\"));\r\n\r\necho \"-8-\\n\";\r\n\r\n__var_dump(str_word_count($str3, 2, \"0\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/stripslashes.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<?php\r\n\r\n$x = \"bla\\\\\";\r\n\r\necho stripslashes($x);\r\n\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Strings/strtr.php",
    "content": "[expect php]\r\n[file]\r\n\r\n<pre>\r\n<?php\r\n$addr = \"this is some address.\\n\";\r\necho strtr($addr, \"aaimm\", \"AEIOU\");\r\n\r\n$trans = array(\"hello\" => \"hi\", \"hi\" => \"hello\");\r\necho strtr(\"hi all, I said hello\\n\", $trans);\r\n\r\n// hello all, I said hi\r\n\r\n$trans = array_flip(array(\"a\" => \"e\", \"b\" => \"e\"));\r\necho strtr(\"hi all, I said hello\\n\", $trans);\r\n\r\n$trans = array(\"a\" => 1, \"e\" => false, 1 => \"ONE\", 3.14 => round(M_PI,5));\r\necho strtr(\"12[3]45, hi all, I said hello\\n\", $trans);\r\n\r\n?>  \r\n</pre>\r\n \r\n"
  },
  {
    "path": "Testing/Tests/Strings/substr_operations.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nrequire('Phalanger.inc');\r\n\r\n\r\n$var = \"aaaaaaaa\";\r\n\r\n__var_dump(substr_replace($var, 'b', 0));\r\n__var_dump(substr_replace($var, 'b', 0, strlen($var)));\r\n__var_dump(substr_replace($var, 'b', 0, 0));\r\n__var_dump(substr_replace($var, 'b', 10, -1));\r\n__var_dump(substr_replace($var, 'b', -7, -1));\r\n__var_dump(substr_replace($var, 'b', 10, -1));\r\n\r\necho \"\\n\";\r\n\r\n__var_dump(substr_count($var, 'a', 0));\r\n__var_dump(substr_count($var, 'a', 0, strlen($var)));\r\n\r\n__var_dump(@substr_count($var, null, 0, 0));\r\n__var_dump(@substr_count($var, '', 0, 0));\r\n__var_dump(@substr_count($var, 'a', -1, -1));\r\n__var_dump(@substr_count($var, 'a', 3, 0));\r\n__var_dump(@substr_count($var, 'a', 10, -1));\r\n__var_dump(@substr_count($var, 'a', 6, 6));\r\n\r\necho \"\\n\";\r\n\r\n__var_dump(substr_replace(array(\"a\" => $var,10 => $var,\"b\" => null, \"\", \" \"), 'b', -10, 5));\r\n\r\necho \"\\n\";\r\n\r\n__var_dump(substr_compare(\"abcde\", \"bc\", 1, 2)); // 0\r\n__var_dump(substr_compare(\"abcde\", \"bcg\", 1, 2)); // 0\r\n__var_dump(substr_compare(\"abcde\", \"BC\", 1, 2, true)); // 0\r\n__var_dump(substr_compare(\"abcde\", \"bc\", 1, 3)); // 1\r\n__var_dump(substr_compare(\"abcde\", \"cd\", 1, 2)); // -1\r\n?>"
  },
  {
    "path": "Testing/Tests/Strings/wordwrap.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\necho(wordwrap(\"123  123ab123\", 3, \"|\")),\"\\n\";\r\necho(wordwrap(\"123   123ab123\", 3, \"|\")),\"\\n\";\r\necho(wordwrap(\"123    123ab123\", 3, \"|\")),\"\\n\";\r\necho(wordwrap(\"123     123ab123\", 3, \"|\")),\"\\n\";\r\necho(wordwrap(\"123      123ab123\", 3, \"|\")),\"\\n\";\r\n\r\necho(wordwrap(\"123  123ab123\", 3, \"|\", true)),\"\\n\";\r\necho(wordwrap(\"123   123ab123\", 3, \"|\", true)),\"\\n\";\r\necho(wordwrap(\"123    123ab123\", 3, \"|\", true)),\"\\n\";\r\necho(wordwrap(\"123     123ab123\", 3, \"|\", true)),\"\\n\";\r\necho(wordwrap(\"123      123ab123\", 3, \"|\", true)),\"\\n\";\r\n?>"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1419).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(88%) 800 succeeded, 108 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>boolstring16</pre></td><td><pre>booleanstring16</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>boolbool(false)\n\nboolbool(true)\n\nboolbool(true)\n\nboolbool(true)\n\nboolbool(true)\n\nboolbool(true)\n\nboolbool(false)\n\nboolbool(true)</pre></td><td><pre>booleanbool(false)\n\nbooleanbool(true)\n\nbooleanbool(true)\n\nbooleanbool(true)\n\nbooleanbool(true)\n\nbooleanbool(true)\n\nbooleanbool(false)\n\nbooleanbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(11.5)\ndouble(-1299)\ninteger(1)\ninteger(1)\ninteger(11)\ndouble(14.2)\ndouble(11)\ndouble(11)</pre></td><td><pre>float(11.5)\nfloat(-1299)\nint(1)\nint(1)\nint(11)\nfloat(14.2)\nfloat(11)\nfloat(11)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n  [3] =&gt; 4\n  [4] =&gt; 5\n)\narray [empty]\narray\n(\n  [5] =&gt; 6\n)\narray\n(\n  [0] =&gt; 6\n  [1] =&gt; 7\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; 4\n    [4] =&gt; 5\n)\nArray\n(\n)\nArray\n(\n    [5] =&gt; 6\n)\nArray\n(\n    [0] =&gt; 6\n    [1] =&gt; 7\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [color] =&gt; red\n  [taste] =&gt; sweet\n  [shape] =&gt; round\n  [name] =&gt; apple\n  [0] =&gt; 4\n)\narray\n(\n  [color] =&gt; red\n  [taste] =&gt; sweet\n  [shape] =&gt; round\n  [name] =&gt; apple\n  [0] =&gt; 4\n  [1] =&gt; 4\n)\narray\n(\n  [0] =&gt; a\n  [1] =&gt; b\n  [2] =&gt; c\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; red\n    [taste] =&gt; sweet\n    [shape] =&gt; round\n    [name] =&gt; apple\n    [0] =&gt; 4\n)\nArray\n(\n    [color] =&gt; red\n    [taste] =&gt; sweet\n    [shape] =&gt; round\n    [name] =&gt; apple\n    [0] =&gt; 4\n    [1] =&gt; 4\n)\nArray\n(\n    [0] =&gt; a\n    [1] =&gt; b\n    [2] =&gt; c\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [version] =&gt; 4\n  [OS] =&gt; Linux\n  [lang] =&gt; english\n  [short_tags] =&gt; 1\n)\narray\n(\n  [0] =&gt; 7\n  [1] =&gt; 8\n  [2] =&gt; 0\n  [3] =&gt; 156\n  [4] =&gt; -10\n)\narray\n(\n  [0] =&gt; 12\n  [5] =&gt; 6\n  [3] =&gt; 7\n  [a] =&gt; 4\n  [6] =&gt; 11\n  [8] =&gt; 2\n  [02] =&gt; 77\n)\narray [empty]</pre></td><td><pre>Array\n(\n    [version] =&gt; 4\n    [OS] =&gt; Linux\n    [lang] =&gt; english\n    [short_tags] =&gt; 1\n)\nArray\n(\n    [0] =&gt; 7\n    [1] =&gt; 8\n    [2] =&gt; 0\n    [3] =&gt; 156\n    [4] =&gt; -10\n)\nArray\n(\n    [0] =&gt; 12\n    [5] =&gt; 6\n    [3] =&gt; 7\n    [a] =&gt; 4\n    [6] =&gt; 11\n    [8] =&gt; 2\n    [02] =&gt; 77\n)\nArray\n(\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; BLUE\n  [1] =&gt; RED\n)\n\narray\n(\n  [0] =&gt; BLUE\n  [1] =&gt; RED\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; BLUE\n    [1] =&gt; RED\n)\n\nArray\n(\n    [0] =&gt; BLUE\n    [1] =&gt; RED\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [1] =&gt; January\n  [2] =&gt; February\n  [3] =&gt; March\n)</pre></td><td><pre>Array\n(\n    [1] =&gt; January\n    [2] =&gt; February\n    [3] =&gt; March\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;0&quot;\ninteger(2)\ndouble(3.3)\ninteger(15)\ninteger(15)</pre></td><td><pre>string(1) &quot;0&quot;\nint(2)\nfloat(3.3)\nint(15)\nint(15)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>NULL\nobject(stdClass)(0)\n{\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Static object: object(stdClass)(1)\n{\n  [&quot;property&quot;] =&gt; integer(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n  [2] =&gt; 2\n  [3] =&gt; 3\n  [4] =&gt; 4\n  [5] =&gt; 5\n)\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\nprint_r(array_splice($a,2,1));\narray\n(\n  [0] =&gt; 2\n)\n$a is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n  [2] =&gt; 3\n  [3] =&gt; 4\n  [4] =&gt; 5\n)\nprint_r(array_splice($b,2,2147483645));\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\n$b is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n)\nprint_r(array_splice($c,2,2147483646));\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\n$c is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n    [4] =&gt; 4\n    [5] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\nprint_r(array_splice($a,2,1));\nArray\n(\n    [0] =&gt; 2\n)\n$a is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 3\n    [3] =&gt; 4\n    [4] =&gt; 5\n)\nprint_r(array_splice($b,2,2147483645));\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\n$b is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n)\nprint_r(array_splice($c,2,2147483646));\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\n$c is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [a] =&gt; green\n  [2] =&gt; blue\n  [3] =&gt; blue\n  [4] =&gt; blue\n)\narray\n(\n  [2] =&gt; hello\n)\narray\n(\n  [b] =&gt; green\n  [3] =&gt; blue\n)\narray\n(\n  [a] =&gt; green\n  [0] =&gt; red\n)\narray\n(\n  [3] =&gt; blue\n)\narray\n(\n  [2] =&gt; hello\n)\narray\n(\n  [3] =&gt; blue\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n)\narray [empty]\narray\n(\n  [2] =&gt; 3\n)\narray [empty]</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [a] =&gt; green\n    [2] =&gt; blue\n    [3] =&gt; blue\n    [4] =&gt; blue\n)\nArray\n(\n    [2] =&gt; hello\n)\nArray\n(\n    [b] =&gt; green\n    [3] =&gt; blue\n)\nArray\n(\n    [a] =&gt; green\n    [0] =&gt; red\n)\nArray\n(\n    [3] =&gt; blue\n)\nArray\n(\n    [2] =&gt; hello\n)\nArray\n(\n    [3] =&gt; blue\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n)\nArray\n(\n    [2] =&gt; 3\n)\nArray\n(\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [b] =&gt; brown\n  [c] =&gt; blue\n  [0] =&gt; red\n)\n------------------------------------\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; A\n    [2] =&gt; 0\n  )\n  [1] =&gt; array\n  (\n    [0] =&gt; 2\n    [1] =&gt; B\n    [2] =&gt; 0\n  )\n  [2] =&gt; array\n  (\n    [0] =&gt; 3\n    [1] =&gt; C\n    [2] =&gt; \n  )\n)\narray\n(\n  [0] =&gt; 1 A 0\n  [1] =&gt; 2 B 0\n  [2] =&gt; 3 C \n)\narray\n(\n  [A] =&gt; 2\n  [10] =&gt; 3\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n)\narray\n(\n  [0] =&gt; A\n  [1] =&gt; B\n  [2] =&gt; C\n)\narray\n(\n  [0] =&gt; x\n  [1] =&gt; x\n)\narray\n(\n  [A] =&gt; 1\n  [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [color] =&gt; array\n  (\n    [favorite] =&gt; array\n    (\n      [0] =&gt; red\n      [1] =&gt; green\n    )\n    [0] =&gt; blue\n  )\n  [0] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n  )\n  [q] =&gt; array\n  (\n    [0] =&gt; x\n  )\n  [1] =&gt; 10\n  [2] =&gt; array\n  (\n    [0] =&gt; 4\n    [1] =&gt; 5\n    [2] =&gt; 6\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; e\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; e\n  )\n)\narray\n(\n  [a] =&gt; &amp;1\n  [b] =&gt; 2\n)\narray\n(\n  [a] =&gt; &amp;xxx\n  [b] =&gt; 2\n)\narray\n(\n  [a] =&gt; array\n  (\n    [a] =&gt; &amp;array\n    (\n      [a] =&gt; &amp;array [recursion]\n    )\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [b] =&gt; array\n    (\n      [0] =&gt; 1\n      [1] =&gt; 1\n    )\n    [c] =&gt; 1\n    [d] =&gt; array\n    (\n      [0] =&gt; 2\n      [1] =&gt; 3\n    )\n  )\n)\narray\n(\n  [a] =&gt; array [empty]\n)\narray\n(\n  [a] =&gt; array [empty]\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [a] =&gt; 1\n  [b] =&gt; 2\n  [c] =&gt; 3\n  [d] =&gt; 4\n  [e] =&gt; 5\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n  [3] =&gt; 4\n  [4] =&gt; 5\n)\narray [empty]</pre></td><td><pre>Array\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n    [c] =&gt; 3\n    [d] =&gt; 4\n    [e] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; 4\n    [4] =&gt; 5\n)\nArray\n(\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; c\n  [Y] =&gt; d\n  [1] =&gt; e\n)\narray\n(\n  [Y] =&gt; d\n)\narray\n(\n  [0] =&gt; a\n  [X] =&gt; b\n  [1] =&gt; c\n)\narray\n(\n  [0] =&gt; c\n  [Y] =&gt; d\n)\narray\n(\n  [2] =&gt; c\n  [Y] =&gt; d\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; c\n    [Y] =&gt; d\n    [1] =&gt; e\n)\nArray\n(\n    [Y] =&gt; d\n)\nArray\n(\n    [0] =&gt; a\n    [X] =&gt; b\n    [1] =&gt; c\n)\nArray\n(\n    [0] =&gt; c\n    [Y] =&gt; d\n)\nArray\n(\n    [2] =&gt; c\n    [Y] =&gt; d\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(-7.7)\ndouble(-38.4)\ninteger(6)\ninteger(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; 2\n    [1] =&gt; 8\n    [2] =&gt; 2\n    [3] =&gt; 2\n    [4] =&gt; 8\n    [5] =&gt; 8\n  )\n  [1] =&gt; array\n  (\n    [0] =&gt; 7\n    [1] =&gt; 2\n    [2] =&gt; 7\n    [3] =&gt; 4\n    [4] =&gt; 8\n    [5] =&gt; 1\n  )\n  [2] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 4\n    [2] =&gt; 8\n    [3] =&gt; 0\n    [4] =&gt; 6\n    [5] =&gt; 2\n  )\n  [3] =&gt; array\n  (\n    [0] =&gt; 8\n    [1] =&gt; 4\n    [2] =&gt; 1\n    [3] =&gt; 0\n    [4] =&gt; 7\n    [5] =&gt; 1\n  )\n  [4] =&gt; array\n  (\n    [0] =&gt; 20\n    [1] =&gt; 2\n    [2] =&gt; 12\n    [3] =&gt; 11\n    [4] =&gt; 10\n    [5] =&gt; 1\n  )\n)\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; 10\n    [1] =&gt; 100\n    [2] =&gt; 100\n    [3] =&gt; a\n  )\n  [1] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 3\n    [2] =&gt; 2\n    [3] =&gt; 1\n  )\n)\narray\n(\n  [0] =&gt; 10\n  [1] =&gt; a\n  [2] =&gt; 100\n  [3] =&gt; 100\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 1\n  [2] =&gt; 2\n  [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\narray\n(\n  [0] =&gt; 0x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [3] =&gt; ach0\n  [4] =&gt; add1\n  [5] =&gt; x10\n  [6] =&gt; 0\n  [7] =&gt; x2\n  [8] =&gt; 1\n  [9] =&gt; 1\n  [10] =&gt; 8\n)\n\nsort numeric:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 0\n  [2] =&gt; x2\n  [3] =&gt; ach0\n  [4] =&gt; add1\n  [5] =&gt; 1\n  [6] =&gt; 1\n  [7] =&gt; 8\n  [8] =&gt; 10x\n  [9] =&gt; 0x10\n  [10] =&gt; 20x\n)\n\nsort string:\narray\n(\n  [0] =&gt; 0\n  [1] =&gt; 0x10\n  [2] =&gt; 1\n  [3] =&gt; 1\n  [4] =&gt; 10x\n  [5] =&gt; 20x\n  [6] =&gt; 8\n  [7] =&gt; ach0\n  [8] =&gt; add1\n  [9] =&gt; x10\n  [10] =&gt; x2\n)\n\nsort locale:\narray\n(\n  [0] =&gt; 0\n  [1] =&gt; 0x10\n  [2] =&gt; 1\n  [3] =&gt; 1\n  [4] =&gt; 10x\n  [5] =&gt; 20x\n  [6] =&gt; 8\n  [7] =&gt; add1\n  [8] =&gt; ach0\n  [9] =&gt; x10\n  [10] =&gt; x2\n)\n\nksort regular:\narray\n(\n  [x] =&gt; 8\n  [z] =&gt; 1\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [10a] =&gt; 0\n  [2b] =&gt; 1\n)\n\nksort numeric:\narray\n(\n  [x] =&gt; 8\n  [z] =&gt; 1\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [2b] =&gt; 1\n  [2] =&gt; 20x\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [10a] =&gt; 0\n)\n\nksort string:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [10a] =&gt; 0\n  [2] =&gt; 20x\n  [2b] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [x] =&gt; 8\n  [z] =&gt; 1\n)\n\nksort locale:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [10a] =&gt; 0\n  [2] =&gt; 20x\n  [2b] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [x] =&gt; 8\n  [z] =&gt; 1\n)\n\nasort regular:\narray\n(\n  [4] =&gt; 0x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [0] =&gt; x10\n  [10a] =&gt; 0\n  [3] =&gt; x2\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n)\n\nasort numeric:\narray\n(\n  [0] =&gt; x10\n  [10a] =&gt; 0\n  [3] =&gt; x2\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n  [1] =&gt; 10x\n  [4] =&gt; 0x10\n  [2] =&gt; 20x\n)\n\nasort string:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [x] =&gt; 8\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [0] =&gt; x10\n  [3] =&gt; x2\n)\n\nasort locale:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [x] =&gt; 8\n  [6] =&gt; add1\n  [5] =&gt; ach0\n  [0] =&gt; x10\n  [3] =&gt; x2\n)\n\nrsort regular:\narray\n(\n  [0] =&gt; 8\n  [1] =&gt; 1\n  [2] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; x10\n  [5] =&gt; 0\n  [6] =&gt; add1\n  [7] =&gt; ach0\n  [8] =&gt; 20x\n  [9] =&gt; 10x\n  [10] =&gt; 0x10\n)\n\nrsort numeric:\narray\n(\n  [0] =&gt; 20x\n  [1] =&gt; 0x10\n  [2] =&gt; 10x\n  [3] =&gt; 8\n  [4] =&gt; 1\n  [5] =&gt; 1\n  [6] =&gt; x10\n  [7] =&gt; 0\n  [8] =&gt; x2\n  [9] =&gt; ach0\n  [10] =&gt; add1\n)\n\nrsort string:\narray\n(\n  [0] =&gt; x2\n  [1] =&gt; x10\n  [2] =&gt; add1\n  [3] =&gt; ach0\n  [4] =&gt; 8\n  [5] =&gt; 20x\n  [6] =&gt; 10x\n  [7] =&gt; 1\n  [8] =&gt; 1\n  [9] =&gt; 0x10\n  [10] =&gt; 0\n)\n\nrsort locale:\narray\n(\n  [0] =&gt; x2\n  [1] =&gt; x10\n  [2] =&gt; ach0\n  [3] =&gt; add1\n  [4] =&gt; 8\n  [5] =&gt; 20x\n  [6] =&gt; 10x\n  [7] =&gt; 1\n  [8] =&gt; 1\n  [9] =&gt; 0x10\n  [10] =&gt; 0\n)\n\nnatsort:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [3] =&gt; x2\n  [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\narray\n(\n  [0] =&gt; 10\n  [1] =&gt; 9\n  [2] =&gt; 8\n  [3] =&gt; 7\n  [4] =&gt; 6\n  [5] =&gt; 5\n  [6] =&gt; 4\n  [7] =&gt; 3\n  [8] =&gt; 2\n  [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>91 GB\nDrive C: 177 GB\nDrive D: 91 GB\nDrive E: 67 GB\nDrive F: \nWarning: disk_free_space(): The parameter is incorrect.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>91 GB\nDrive C: 177 GB\nDrive D: 91 GB\nDrive E: 67 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11606&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11606&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11606&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11645&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [line] =&gt; 6\n    [column] =&gt; 3\n    [file] =&gt; stack_trace.inc\n    [function] =&gt; j\n  )\n  [1] =&gt; array\n  (\n    [line] =&gt; 4\n    [column] =&gt; 3\n    [file] =&gt; __input.txt inside eval (on line 11, column 1)\n    [function] =&gt; i\n  )\n  [2] =&gt; array\n  (\n    [line] =&gt; 4\n    [column] =&gt; 27\n    [file] =&gt; __input.txt\n    [function] =&gt; h\n  )\n  [3] =&gt; array\n  (\n    [line] =&gt; 4\n    [column] =&gt; 27\n    [file] =&gt; __input.txt\n    [function] =&gt; array_map\n  )\n  [4] =&gt; array\n  (\n    [line] =&gt; 18\n    [column] =&gt; 1\n    [file] =&gt; __input.txt\n    [function] =&gt; InlinedLambda\n  )\n  [5] =&gt; array\n  (\n    [line] =&gt; 18\n    [column] =&gt; 1\n    [file] =&gt; __input.txt\n    [function] =&gt; f\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [line] =&gt; 6\n        [column] =&gt; 3\n        [file] =&gt; stack_trace.inc\n        [function] =&gt; j\n    )\n\n    [1] =&gt; Array\n    (\n        [line] =&gt; 6\n        [column] =&gt; 3\n        [file] =&gt; __input.txt\n        [function] =&gt; i\n    )\n\n    [2] =&gt; Array\n    (\n        [line] =&gt; 6\n        [column] =&gt; 3\n        [file] =&gt; __input.txt\n        [function] =&gt; array_map\n    )\n\n    [3] =&gt; Array\n    (\n        [line] =&gt; 18\n        [column] =&gt; 1\n        [file] =&gt; __input.txt\n        [function] =&gt; f\n    )\n\n    [4] =&gt; Array\n    (\n        [file] =&gt; \n        [function] =&gt; &lt;Main&gt;\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_TRY = 237,\nT_CATCH = 238,\nT_THROW = 239,\nT_INTERFACE = 240,\nT_IMPLEMENTS = 241,\nT_ABSTRACT = 242,\nT_FINAL = 243,\nT_PRIVATE = 244,\nT_PROTECTED = 245,\nT_PUBLIC = 246,\nT_BOOL_CAST = 286,\nT_INT_CAST = 289,\nT_DOUBLE_CAST = 295,\nT_STRING_CAST = 298,\nT_ARRAY_CAST = 301,\nT_OBJECT_CAST = 302,\nT_UNSET_CAST = 303,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1594).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 826 succeeded, 95 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.NullReferenceException: Object reference not set to an instance of an object.\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>72 GB\nDrive C: 184 GB\nDrive D: 72 GB\nDrive E: 183 GB\nDrive F: \nWarning: disk_free_space(): The parameter is incorrect.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>72 GB\nDrive C: 184 GB\nDrive D: 72 GB\nDrive E: 183 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11645&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11627&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11609&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11627&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1628).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 827 succeeded, 94 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>97 GB\nDrive C: 192 GB\nDrive D: 97 GB\nDrive E: 150 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>97 GB\nDrive C: 192 GB\nDrive D: 97 GB\nDrive E: 150 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1683).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(88%) 807 succeeded, 115 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>874 GB\nDrive C: 53 GB\nDrive D: 874 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>874 GB\nDrive C: 53 GB\nDrive D: 874 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28565&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28583&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28583&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28615&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>HERE</pre></td><td><pre>Error while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>name (value): p ( t1 X t2  xxx )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t1 )\n  parent: name (value): p ( t1 X t2  xxx )\n  previousSibling: NULL\n  nextSibling: name (value): b (X)\n\n  name (value): b (X)\n  parent: name (value): p ( t1 X t2  xxx )\n  previousSibling: name (value): #text ( t1 )\n  nextSibling: name (value): #text ( t2 )\n\n    name (value): #text (X)\n    parent: name (value): b (X)\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t2 )\n  parent: name (value): p ( t1 X t2  xxx )\n  previousSibling: name (value): b (X)\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): p ( t1 X t2  xxx )\n  previousSibling: name (value): #text ( t2 )\n  nextSibling: NULL\n\nAppend t1 to p:\n\nname (value): p (X t2  xxx  t1 )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): b (X)\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t2 )\n\n    name (value): #text (X)\n    parent: name (value): b (X)\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t2 )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): b (X)\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): #text ( t2 )\n  nextSibling: name (value): #text ( t1 )\n\n  name (value): #text ( t1 )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): #text ( xxx )\n  nextSibling: NULL\n\nt1 == ret: TRUE\n\ndiv:\n\nname (value): div ( t3  t4  xxx )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t3 )\n  parent: name (value): div ( t3  t4  xxx )\n  previousSibling: NULL\n  nextSibling: name (value): b ()\n\n  name (value): b ()\n  parent: name (value): div ( t3  t4  xxx )\n  previousSibling: name (value): #text ( t3 )\n  nextSibling: name (value): #text ( t4 )\n\n    name (value): X ()\n    parent: name (value): b ()\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t4 )\n  parent: name (value): div ( t3  t4  xxx )\n  previousSibling: name (value): b ()\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): div ( t3  t4  xxx )\n  previousSibling: name (value): #text ( t4 )\n  nextSibling: NULL\n\nInsert t4 before t3:\n\nname (value): div ( t4  t3  xxx )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t4 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t3 )\n\n  name (value): #text ( t3 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t4 )\n  nextSibling: name (value): b ()\n\n  name (value): b ()\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t3 )\n  nextSibling: name (value): #text ( xxx )\n\n    name (value): X ()\n    parent: name (value): b ()\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( xxx )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): b ()\n  nextSibling: NULL\n\n\np:\n\nname (value): p (X t2  xxx  t1 )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): b (X)\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t2 )\n\n    name (value): #text (X)\n    parent: name (value): b (X)\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t2 )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): b (X)\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): #text ( t2 )\n  nextSibling: name (value): #text ( t1 )\n\n  name (value): #text ( t1 )\n  parent: name (value): p (X t2  xxx  t1 )\n  previousSibling: name (value): #text ( xxx )\n  nextSibling: NULL\n\nFragment:\n\nname (value): #document-fragment ()\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t5 )\n  parent: name (value): #document-fragment ()\n  previousSibling: NULL\n  nextSibling: name (value): i ( frob )\n\n  name (value): i ( frob )\n  parent: name (value): #document-fragment ()\n  previousSibling: name (value): #text ( t5 )\n  nextSibling: name (value): #text ( t6 )\n\n    name (value): #text ( frob )\n    parent: name (value): i ( frob )\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t6 )\n  parent: name (value): #document-fragment ()\n  previousSibling: name (value): i ( frob )\n  nextSibling: NULL\n\nAppending fragment to p:\n\nname (value): p (X t2  xxx  t1  t5  frob  t6 )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): b (X)\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t2 )\n\n    name (value): #text (X)\n    parent: name (value): b (X)\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t2 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): b (X)\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t2 )\n  nextSibling: name (value): #text ( t1 )\n\n  name (value): #text ( t1 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( xxx )\n  nextSibling: name (value): #text ( t5 )\n\n  name (value): #text ( t5 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t1 )\n  nextSibling: name (value): i ( frob )\n\n  name (value): i ( frob )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t5 )\n  nextSibling: name (value): #text ( t6 )\n\n    name (value): #text ( frob )\n    parent: name (value): i ( frob )\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t6 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): i ( frob )\n  nextSibling: NULL\n\nFragment:\n\nname (value): #document-fragment ()\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\ndiv:\n\nname (value): div ( t4  t3  xxx )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t4 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t3 )\n\n  name (value): #text ( t3 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t4 )\n  nextSibling: name (value): b ()\n\n  name (value): b ()\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t3 )\n  nextSibling: name (value): #text ( xxx )\n\n    name (value): X ()\n    parent: name (value): b ()\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( xxx )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): b ()\n  nextSibling: NULL\n\nInserting fragment before t4\nError (2)\n\nname (value): div ( t4  t3  xxx )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): #text ( t4 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t3 )\n\n  name (value): #text ( t3 )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t4 )\n  nextSibling: name (value): b ()\n\n  name (value): b ()\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): #text ( t3 )\n  nextSibling: name (value): #text ( xxx )\n\n    name (value): X ()\n    parent: name (value): b ()\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( xxx )\n  parent: name (value): div ( t4  t3  xxx )\n  previousSibling: name (value): b ()\n  nextSibling: NULL\n\np:\n\nname (value): p (X t2  xxx  t1  t5  frob  t6 )\nparent: NULL\npreviousSibling: NULL\nnextSibling: NULL\n\n  name (value): b (X)\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: NULL\n  nextSibling: name (value): #text ( t2 )\n\n    name (value): #text (X)\n    parent: name (value): b (X)\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t2 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): b (X)\n  nextSibling: name (value): #text ( xxx )\n\n  name (value): #text ( xxx )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t2 )\n  nextSibling: name (value): #text ( t1 )\n\n  name (value): #text ( t1 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( xxx )\n  nextSibling: name (value): #text ( t5 )\n\n  name (value): #text ( t5 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t1 )\n  nextSibling: name (value): i ( frob )\n\n  name (value): i ( frob )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): #text ( t5 )\n  nextSibling: name (value): #text ( t6 )\n\n    name (value): #text ( frob )\n    parent: name (value): i ( frob )\n    previousSibling: NULL\n    nextSibling: NULL\n\n  name (value): #text ( t6 )\n  parent: name (value): p (X t2  xxx  t1  t5  frob  t6 )\n  previousSibling: name (value): i ( frob )\n  nextSibling: NULL</pre></td><td><pre>Error (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nAppend t1 to p:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nt1 == ret: TRUE\n\ndiv:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nInsert t4 before t3:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\n\np:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nFragment:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nAppending fragment to p:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nFragment:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\n\ndiv:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\nInserting fragment before t4\nError (2)\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)\n\np:\n\nError (8)\nError (8)\nname (value):  ()\nparent: Error (8)\nNULL\npreviousSibling: Error (8)\nNULL\nnextSibling: Error (8)\nNULL\nError (8)\nError (2)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;root&gt;\n  &lt;first/&gt;\n  &lt;newsecond/&gt;\n  &lt;newthird/&gt;\n  &lt;newfourth/&gt;\n&lt;/root&gt;\n&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;root&gt;\n  &lt;first/&gt;\n  &lt;second/&gt;\n  &lt;third/&gt;\n  &lt;fourth/&gt;\n&lt;/root&gt;\n&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;root&gt;\n  &lt;second/&gt;\n  &lt;third/&gt;\n  &lt;fourth/&gt;\n&lt;/root&gt;</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 15, column 1.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nstring(0) &quot;&quot;\n'attranew'\n'attrbnew'\n'attrc'</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 12, column 1.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(2)\nTRUE\nFALSE</pre></td><td><pre>Notice: Undefined property: DOMNodeList::$length in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 9, column 1.\nNULL\nFALSE\nFALSE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>root\nnodeType: 1\nchild\nnodeType: 1</pre></td><td><pre>Notice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 8, column 1.\n\n\nNotice: Undefined property: DOMDocument::$firstChild in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 9, column 1.\n\nWarning: 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.\n\nNotice: Undefined property: DOMElement::$nodeType in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 10, column 1.\nnodeType: \n\nNotice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 16, column 1.\n\n\nNotice: Undefined property: DOMDocument::$firstChild in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 17, column 1.\n\nWarning: 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.\n\nNotice: Undefined property: DOMElement::$nodeType in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 19, column 1.\nnodeType:</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;foo/&gt;</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 14, column 1.\n\nWarning: __clone method called on non-object in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 14, column 1.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'bar'\n'test1'\n'bar'\n'test2'\n'fubar:bar'\n'test3'\n'fubar:bar'\n'test4'\n'bar'\n'test1'\n'bar'\n'test2'\n'fubar:bar'\n'test3'\n'fubar:bar'\n'test4'\n'fubar:bar'\n'test3'\n'fubar:bar'\n'test4'\n'fubar:bar'\n'test3'\n'fubar:bar'\n'test4'</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 24, column 1.\n\nNotice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 17, column 3.\nNULL\n\nNotice: Undefined property: DOMElement::$childNodes in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.\n\nWarning: Invalid argument supplied for foreach statement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 16, column 11.\n\nNotice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 17, column 3.\nNULL\n\nNotice: Undefined property: DOMElement::$childNodes in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.\n\nWarning: Invalid argument supplied for foreach statement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 16, column 11.\n\nNotice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 17, column 3.\nNULL\n\nNotice: Undefined property: DOMElement::$childNodes in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.\n\nWarning: Invalid argument supplied for foreach statement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 16, column 11.\n\nNotice: Undefined property: DOMElement::$nodeName in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 17, column 3.\nNULL\n\nNotice: Undefined property: DOMElement::$childNodes in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.\n\nWarning: Invalid argument supplied for foreach statement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 16, column 11.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- Catch exception with try/catch\n3</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 5, column 1.\n--- Catch exception with try/catch\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;books&gt;\n &lt;book&gt;\n  &lt;title&gt;The Grapes of Wrath&lt;/title&gt;\n  &lt;author&gt;John Steinbeck&lt;/author&gt;\n &lt;/book&gt;\n &lt;book&gt;\n  &lt;title&gt;The Pearl&lt;/title&gt;\n  &lt;author&gt;John Steinbeck&lt;/author&gt;\n &lt;/book&gt;\n&lt;book&gt;&lt;title&gt;PHP de Luxe&lt;/title&gt;&lt;author&gt;Richard Samar, Christian Stocker&lt;/author&gt;&lt;/book&gt;&lt;/books&gt;</pre></td><td><pre>Notice: Undefined property: books::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 15, column 9.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Length: 1\nKey GIF: GIF (image/gif) (-)\n\nIndex 0: GIF (image/gif) (-)\n\nNULL\n\nLength: 3\nKey: 0 Name: myimage\nKey: 1 Name: rdf\nKey: 2 Name: test\n\nNULL\nNULL</pre></td><td><pre>Notice: Undefined property: DOMDocument::$doctype in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 34, column 1.\n\nNotice: 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.\n\nNotice: 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.\nLength: \n\nWarning: Invalid argument supplied for foreach statement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 42, column 10.\n\n\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>4</pre></td><td><pre>Notice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 15, column 1.\n\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 1: Transform To XML String\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 1: Transform To XML StringError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 2: Transform To HTML String\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br&gt; \na2 c2 &lt;br&gt; \nń3 b3 c3 &lt;br&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 2: Transform To HTML StringError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 3: Using Parameters\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;hello world\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 3: Using ParametersError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 4: Checking UTF8 Output\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \n├Ą3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 4: Checking UTF8 OutputError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 5: Checking Indent\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;\n  &lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;\n&lt;/html&gt;</pre></td><td><pre>Test 5: Checking IndentError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 6: Transform To Doc\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 6: Transform To DocError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 7: Transform To Uri\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 7: Transform To UriError while parsing the document</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n\nNotice: Undefined property: DOMAttr::$value in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 22, column 9.\n\nNotice: Undefined property: DOMAttr::$value in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 22, column 9.\n\nNotice: Undefined property: DOMDocument::$documentElement in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 33, column 11.\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; - secondArg\n - \nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 12: Using Associative Array of Parameters\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;barbar\ntest\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td><td><pre>Test 12: Using Associative Array of ParametersError while parsing the document</pre></td></tr></table></td></tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1797) (DLR GetProperty).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 815 succeeded, 95 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>745 GB\nDrive C: 31 GB\nDrive D: 745 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>745 GB\nDrive C: 31 GB\nDrive D: 745 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28590&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28572&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28572&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28572&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1810).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 816 succeeded, 94 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>738 GB\nDrive C: 37 GB\nDrive D: 738 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>738 GB\nDrive C: 37 GB\nDrive D: 738 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28640&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28658&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28658&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28640&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1833).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 821 succeeded, 105 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; '&#180;┐Ż'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(10,2): error PHP1021: Cannot extend 'C' because it is not an interface\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(13,2): error PHP1022: Cannot extend 'I' because it is not a class\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1022: Cannot extend 'I' because it is not a class\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1020: Cannot implement 'D' because it is not an interface\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(19,2): error PHP1081: Type 'I' cannot be used with generic type arguments\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(21,2): error PHP1081: Type 'I' cannot be used with generic type arguments\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(23,2): error PHP1021: Cannot extend 'E' because it is not an interface\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(24,2): error PHP1022: Cannot extend 'K' because it is not a class\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(24,2): error PHP1020: Cannot implement 'E' because it is not an interface\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T2::f\ng2</pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(T)(0)\n{\n}</pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,8): error PHP2014: Syntax error: unexpected token 'namespace'\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'I4' and 'I1'\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J4' and 'J1'\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving 'J5' and 'J5'\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type '&lt;__input.txt&gt;.J`1' from assembly 'Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class 'D' doesn't implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types 'AttributeUsage' and 'AttributeUsageAttribute' exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types 'MyAttribute' and 'MyAttributeAttribute' exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(2,12): error PHP2014: Syntax error: unexpected token 'N'\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>739 GB\nDrive C: 36 GB\nDrive D: 739 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>739 GB\nDrive C: 36 GB\nDrive D: 739 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30193&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30170&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30157&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30157&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace 'http://exslt.org/dates-and-times'..\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1870).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 832 succeeded, 102 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo[&#39;\\.&#39;]\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 3, column 1.\n\nkaboemkara!\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 5, column 1.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 6, column 1.\n\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 8, column 1.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1, 2, 3, 4, 5, OK</pre></td><td><pre>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.\n8, 5, , , , , , \nNotice: 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.\nSystem.Object, \nNotice: 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.\nSystem.Object, , , OK</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>int(2)\nDONE</pre></td><td><pre>int(5)\nDONE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nD:\\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()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::GetTypeInfoCount()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::_Attribute.GetTypeInfoCount()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::GetTypeInfo()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::_Attribute.GetTypeInfo()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::GetIDsOfNames()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::_Attribute.GetIDsOfNames()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::Invoke()\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,2): error PHP1018: Class &#39;MyAttribute&#39; doesn&#39;t implement abstract method System:::Attribute::_Attribute.Invoke()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2) {\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh&#39;ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>731 GB\nDrive C: 38 GB\nDrive D: 731 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>731 GB\nDrive C: 38 GB\nDrive D: 731 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28802&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28784&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28820&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;28784&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;,&#39;\n257\n257 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  &#39;0&#39; =&gt; true,\n  &#39;1&#39; =&gt; false,\n  &#39;2&#39; =&gt; 1,\n  &#39;3&#39; =&gt; 1.2,\n  &#39;4&#39; =&gt; NULL,\n  &#39;5&#39; =&gt; &#39;asdas&#39;,\n  &#39;6&#39; =&gt; array\n  (\n    &#39;0&#39; =&gt; 1\n  ),\n  &#39;7&#39; =&gt; class stdClass\n  {\n\n  },\n  &#39;8&#39; =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1891).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 835 succeeded, 101 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo[&#39;\\.&#39;]\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 3, column 1.\n\nkaboemkara!\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 5, column 1.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 6, column 1.\n\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 8, column 1.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh&#39;ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>692 GB\nDrive C: 38 GB\nDrive D: 692 GB\nDrive E: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>692 GB\nDrive C: 38 GB\nDrive D: 692 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29465&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29465&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29447&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29447&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;,&#39;\n257\n257 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  &#39;0&#39; =&gt; true,\n  &#39;1&#39; =&gt; false,\n  &#39;2&#39; =&gt; 1,\n  &#39;3&#39; =&gt; 1.2,\n  &#39;4&#39; =&gt; NULL,\n  &#39;5&#39; =&gt; &#39;asdas&#39;,\n  &#39;6&#39; =&gt; array\n  (\n    &#39;0&#39; =&gt; 1\n  ),\n  &#39;7&#39; =&gt; class stdClass\n  {\n\n  },\n  &#39;8&#39; =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1902).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 846 succeeded, 104 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo[&#39;\\.&#39;]\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 3, column 1.\n\nkaboemkara!\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 5, column 1.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 6, column 1.\n\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 8, column 1.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh&#39;ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>67 GB\nDrive C: 67 GB\nDrive D: \nWarning: disk_free_space(): The device is not ready.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The system cannot find the path specified.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>67 GB\nDrive C: 67 GB\nDrive D: false\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>127928365056\n127928365056\n\nWarning: disk_total_space(): The device is not ready.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8</pre></td><td><pre>127928365056\n127928365056</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30003&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30021&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30021&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30003&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>first =&gt; outofsection\ncrash =&gt; \nbugs =&gt; \nall =&gt; CLR\nano =&gt; 1\nthread_count =&gt; 12\nerror_reporting =&gt; 30718\nprecedence1 =&gt; 5\nprecedence2 =&gt; 1\nprecedence3 =&gt; 5\nprecedence4 =&gt; 1\nprecedence5 =&gt; 1\nprecedence6 =&gt; 5\nquoted1 =&gt; a | b &amp; c\nquoted2 =&gt; hello\nworld\nquoted3 =&gt; to be\nor not\nto be\nsystem =&gt; 1\nuser =&gt; 123\nbad =&gt; NO_SUCH_CONSTANT\nneg =&gt; -1\nfirst =&gt; outofsection\nsection =&gt; \nindented section =&gt; \n section with whitespaces  =&gt; \ns1 =&gt; \n  crash =&gt; \n  bugs =&gt; \n  all =&gt; CLR\n  ano =&gt; 1\n  thread_count =&gt; 12\n  error_reporting =&gt; 30718\n  precedence1 =&gt; 5\n  precedence2 =&gt; 1\n  precedence3 =&gt; 5\n  precedence4 =&gt; 1\n  precedence5 =&gt; 1\n  precedence6 =&gt; 5\ns2 =&gt; \n  quoted1 =&gt; a | b &amp; c\n  quoted2 =&gt; hello\nworld\n  quoted3 =&gt; to be\nor not\nto be\ns3 =&gt; \n  system =&gt; 1\n  user =&gt; 123\n  bad =&gt; NO_SUCH_CONSTANT\ns4 =&gt; \n  neg =&gt; -1\nx =&gt; 1\ny =&gt; 2\nano =&gt; 1\nne =&gt; \nmultiline =&gt; \n\t\tline1\n\t\tline2\n\t\tline3</pre></td><td><pre>first =&gt; \ncrash =&gt; \nbugs =&gt; \nall =&gt; \nano =&gt; 1\nthread_count =&gt; 12\nerror_reporting =&gt; 30718\nprecedence1 =&gt; 5\nprecedence2 =&gt; 1\nprecedence3 =&gt; 5\nprecedence4 =&gt; 1\nprecedence5 =&gt; 1\nprecedence6 =&gt; 5\nquoted1 =&gt; a | b &amp; c\nquoted2 =&gt; hello\nworld\nquoted3 =&gt; to be\nor not\nto be\nsystem =&gt; 1\nuser =&gt; 123\nbad =&gt; \nneg =&gt; -1\nfirst =&gt; \nsection =&gt; \nindented section =&gt; \n section with whitespaces  =&gt; \ns1 =&gt; \n  crash =&gt; \n  bugs =&gt; \n  all =&gt; \n  ano =&gt; 1\n  thread_count =&gt; 12\n  error_reporting =&gt; 30718\n  precedence1 =&gt; 5\n  precedence2 =&gt; 1\n  precedence3 =&gt; 5\n  precedence4 =&gt; 1\n  precedence5 =&gt; 1\n  precedence6 =&gt; 5\ns2 =&gt; \n  quoted1 =&gt; a | b &amp; c\n  quoted2 =&gt; hello\nworld\n  quoted3 =&gt; to be\nor not\nto be\ns3 =&gt; \n  system =&gt; 1\n  user =&gt; 123\n  bad =&gt; \ns4 =&gt; \n  neg =&gt; -1\nx =&gt; 1\ny =&gt; 2\nano =&gt; 1\nne =&gt; \nmultiline =&gt; \n\t\tline1\n\t\tline2\n\t\tline3</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;,&#39;\n257\n257 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  &#39;0&#39; =&gt; true,\n  &#39;1&#39; =&gt; false,\n  &#39;2&#39; =&gt; 1,\n  &#39;3&#39; =&gt; 1.2,\n  &#39;4&#39; =&gt; NULL,\n  &#39;5&#39; =&gt; &#39;asdas&#39;,\n  &#39;6&#39; =&gt; array\n  (\n    &#39;0&#39; =&gt; 1\n  ),\n  &#39;7&#39; =&gt; class stdClass\n  {\n\n  },\n  &#39;8&#39; =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (1949).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 846 succeeded, 106 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T</pre></td><td><pre>F</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo[&#39;\\.&#39;]\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 3, column 1.\n\nkaboemkara!\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 5, column 1.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 6, column 1.\n\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\standard\\strings\\__input.txt at expression on line 8, column 1.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ok</pre></td><td><pre>Notice: Use of undefined constant x - assumed &#39;x&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 4, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nC:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh&#39;ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.\n\n\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt at expression on line 52, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>70 GB\nDrive C: 70 GB\nDrive D: \nWarning: disk_free_space(): The device is not ready.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive E: \nWarning: disk_free_space(): The device is not ready.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The system cannot find the path specified.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>70 GB\nDrive C: 70 GB\nDrive D: false\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>127928365056\n127928365056\n\nWarning: disk_total_space(): The device is not ready.\n in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8</pre></td><td><pre>127928365056\n127928365056</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30057&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30085&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30103&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30093&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime test.txt (1303389797)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime test.txt (1303389797)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) ctime touch.txt (1303389797)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime touch.txt (1303389797)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) atime touch.txt (1303389797)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime summer.txt (1303389797)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;April 21, 2011; [14:43:17] (14h) mtime winter.txt (1303389797)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>first =&gt; outofsection\ncrash =&gt; \nbugs =&gt; \nall =&gt; CLR\nano =&gt; 1\nthread_count =&gt; 12\nerror_reporting =&gt; 30718\nprecedence1 =&gt; 5\nprecedence2 =&gt; 1\nprecedence3 =&gt; 5\nprecedence4 =&gt; 1\nprecedence5 =&gt; 1\nprecedence6 =&gt; 5\nquoted1 =&gt; a | b &amp; c\nquoted2 =&gt; hello\nworld\nquoted3 =&gt; to be\nor not\nto be\nsystem =&gt; 1\nuser =&gt; 123\nbad =&gt; NO_SUCH_CONSTANT\nneg =&gt; -1\nfirst =&gt; outofsection\nsection =&gt; \nindented section =&gt; \n section with whitespaces  =&gt; \ns1 =&gt; \n  crash =&gt; \n  bugs =&gt; \n  all =&gt; CLR\n  ano =&gt; 1\n  thread_count =&gt; 12\n  error_reporting =&gt; 30718\n  precedence1 =&gt; 5\n  precedence2 =&gt; 1\n  precedence3 =&gt; 5\n  precedence4 =&gt; 1\n  precedence5 =&gt; 1\n  precedence6 =&gt; 5\ns2 =&gt; \n  quoted1 =&gt; a | b &amp; c\n  quoted2 =&gt; hello\nworld\n  quoted3 =&gt; to be\nor not\nto be\ns3 =&gt; \n  system =&gt; 1\n  user =&gt; 123\n  bad =&gt; NO_SUCH_CONSTANT\ns4 =&gt; \n  neg =&gt; -1\nx =&gt; 1\ny =&gt; 2\nano =&gt; 1\nne =&gt; \nmultiline =&gt; \n\t\tline1\n\t\tline2\n\t\tline3</pre></td><td><pre>first =&gt; \ncrash =&gt; \nbugs =&gt; \nall =&gt; \nano =&gt; 1\nthread_count =&gt; 12\nerror_reporting =&gt; 30718\nprecedence1 =&gt; 5\nprecedence2 =&gt; 1\nprecedence3 =&gt; 5\nprecedence4 =&gt; 1\nprecedence5 =&gt; 1\nprecedence6 =&gt; 5\nquoted1 =&gt; a | b &amp; c\nquoted2 =&gt; hello\nworld\nquoted3 =&gt; to be\nor not\nto be\nsystem =&gt; 1\nuser =&gt; 123\nbad =&gt; \nneg =&gt; -1\nfirst =&gt; \nsection =&gt; \nindented section =&gt; \n section with whitespaces  =&gt; \ns1 =&gt; \n  crash =&gt; \n  bugs =&gt; \n  all =&gt; \n  ano =&gt; 1\n  thread_count =&gt; 12\n  error_reporting =&gt; 30718\n  precedence1 =&gt; 5\n  precedence2 =&gt; 1\n  precedence3 =&gt; 5\n  precedence4 =&gt; 1\n  precedence5 =&gt; 1\n  precedence6 =&gt; 5\ns2 =&gt; \n  quoted1 =&gt; a | b &amp; c\n  quoted2 =&gt; hello\nworld\n  quoted3 =&gt; to be\nor not\nto be\ns3 =&gt; \n  system =&gt; 1\n  user =&gt; 123\n  bad =&gt; \ns4 =&gt; \n  neg =&gt; -1\nx =&gt; 1\ny =&gt; 2\nano =&gt; 1\nne =&gt; \nmultiline =&gt; \n\t\tline1\n\t\tline2\n\t\tline3</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;,&#39;\n257\n257 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;\nWarning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 10, column 7.\n&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td><td><pre>Warning: addcslashes(): String containg Unicode characters greater than &#39;\\u0800&#39; are not supported in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo[&#39;.&#39;]&quot;, &#39;z..A&#39;);\n// output:  \\zoo[&#39;\\.&#39;]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  &#39;0&#39; =&gt; true,\n  &#39;1&#39; =&gt; false,\n  &#39;2&#39; =&gt; 1,\n  &#39;3&#39; =&gt; 1.2,\n  &#39;4&#39; =&gt; NULL,\n  &#39;5&#39; =&gt; &#39;asdas&#39;,\n  &#39;6&#39; =&gt; array\n  (\n    &#39;0&#39; =&gt; 1\n  ),\n  &#39;7&#39; =&gt; class stdClass\n  {\n\n  },\n  &#39;8&#39; =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in C:\\Users\\Jakub\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2034).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 847 succeeded, 99 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>test1 (PassedByCopy):\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(4)\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(4)\n  [3]=&gt;\n  int(5)\n}\n\n\ntest2 (ReturnedByCopy):\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n}\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [3]=&gt;\n  int(4)\n}\n\n\ntest3 (Assigned):\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(5)\n}</pre></td><td><pre>test1 (PassedByCopy):\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(4)\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(4)\n  [3]=&gt;\n  int(5)\n}\n\n\ntest2 (ReturnedByCopy):\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n}\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(4)\n}\n\n\ntest3 (Assigned):\narray(3) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(5)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>595 GB\nDrive C: 28 GB\nDrive D: 595 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>595 GB\nDrive C: 28 GB\nDrive D: 595 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29705&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29705&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29693&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29741&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(2) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(0) &quot;&quot;\n    [1]=&gt;\n    string(0) &quot;&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2035).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 849 succeeded, 97 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>596 GB\nDrive C: 28 GB\nDrive D: 596 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>596 GB\nDrive C: 28 GB\nDrive D: 596 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29705&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29705&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29729&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29732&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(2) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(0) &quot;&quot;\n    [1]=&gt;\n    string(0) &quot;&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2038).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 850 succeeded, 97 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(4,3): error PHP1120: Unknown custom attribute; neither of types &#39;AttributeUsage&#39; and &#39;AttributeUsageAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(17,3): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(27,22): error PHP1120: Unknown custom attribute; neither of types &#39;MyAttribute&#39; and &#39;MyAttributeAttribute&#39; exists\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 12, column 4.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>596 GB\nDrive C: 27 GB\nDrive D: 596 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>596 GB\nDrive C: 27 GB\nDrive D: 596 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29808&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29836&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29848&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29809&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/__invoke.php\">Objects/__invoke.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(2) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(0) &quot;&quot;\n    [1]=&gt;\n    string(0) &quot;&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2100).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 861 succeeded, 97 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,34): error PHP2014: Syntax error: unexpected token &#39;::&#39;\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(false)\nbool(true)\nobject(Directory)(2)\n{\n  [&quot;handle&quot;] =&gt; NULL\n  [&quot;path&quot;] =&gt; NULL\n}</pre></td><td><pre>bool(false)\n\nError: Class &#39;System\\Collections\\Dictionary&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt at expression on line 16, column 5.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/const1.php\">Compiler/Namespaces/const1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/constants1.php\">Compiler/Namespaces/constants1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends1.php\">Compiler/Namespaces/extends1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function1.php\">Compiler/Namespaces/function1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function2.php\">Compiler/Namespaces/function2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/namespace1.php\">Compiler/Namespaces/namespace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/simple_syntax1.php\">Compiler/Namespaces/simple_syntax1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use1.php\">Compiler/Namespaces/use1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use2.php\">Compiler/Namespaces/use2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use3.php\">Compiler/Namespaces/use3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>543 GB\nDrive C: 24 GB\nDrive D: 543 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>543 GB\nDrive C: 24 GB\nDrive D: 543 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29872&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29860&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29872&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;29848&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 287,\nT_INT_CAST = 290,\nT_DOUBLE_CAST = 296,\nT_STRING_CAST = 299,\nT_ARRAY_CAST = 302,\nT_OBJECT_CAST = 303,\nT_UNSET_CAST = 304,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/__invoke.php\">Objects/__invoke.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(2) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(0) &quot;&quot;\n    [1]=&gt;\n    string(0) &quot;&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/stripslashes.php\">Strings/stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2215).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 885 succeeded, 96 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_instantiated.php\">Arrays/array_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_op.php\">Arrays/array_op.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/obj_instantiated.php\">Bugs/obj_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,34): error PHP2014: Syntax error: unexpected token &#39;::&#39;\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/self.php\">Compiler/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/const1.php\">Compiler/Namespaces/const1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/constants1.php\">Compiler/Namespaces/constants1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends1.php\">Compiler/Namespaces/extends1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends2.php\">Compiler/Namespaces/extends2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function1.php\">Compiler/Namespaces/function1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function2.php\">Compiler/Namespaces/function2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/namespace1.php\">Compiler/Namespaces/namespace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/simple_syntax1.php\">Compiler/Namespaces/simple_syntax1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use1.php\">Compiler/Namespaces/use1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use2.php\">Compiler/Namespaces/use2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use3.php\">Compiler/Namespaces/use3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use4.php\">Compiler/Namespaces/use4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/__call.php\">DLR/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>355 GB\nDrive C: 19 GB\nDrive D: 355 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>355 GB\nDrive C: 19 GB\nDrive D: 355 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31295&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31271&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31283&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31271&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 288,\nT_INT_CAST = 291,\nT_DOUBLE_CAST = 297,\nT_STRING_CAST = 300,\nT_ARRAY_CAST = 303,\nT_OBJECT_CAST = 304,\nT_UNSET_CAST = 305,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtoany.php\">Objects/convobjtoany.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtostr.php\">Objects/convobjtostr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objop.php\">Objects/objop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objopstr.php\">Objects/objopstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/__invoke.php\">Objects/__invoke.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/groupbug.php\">RegEx/groupbug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref2.php\">RegEx/namedbackref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(3) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [&quot;10&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/nomatchall.php\">RegEx/nomatchall.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator1.php\">SPL/ArrayIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator2.php\">SPL/ArrayIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/FilterIterator.php\">SPL/FilterIterator.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray1.php\">SPL/SplFixedArray1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray2.php\">SPL/SplFixedArray2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage1.php\">SPL/SplObjectStorage1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage2.php\">SPL/SplObjectStorage2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage3.php\">SPL/SplObjectStorage3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage4.php\">SPL/SplObjectStorage4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/stripslashes.php\">Strings/stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2220).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 890 succeeded, 96 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nArray\n(\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [0.5] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 12\n        )\n\n    [0] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 23\n        )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\n\nStrict 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\nArray\n(\n    [0.1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 9\n        )\n\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\n\nStrict 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\n\nStrict 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\nArray\n(\n    [1] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; 4\n        )\n\n    [2] =&gt; cr Object\n        (\n            [priv_member:cr:private] =&gt; -15\n        )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_instantiated.php\">Arrays/array_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_op.php\">Arrays/array_op.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/obj_instantiated.php\">Bugs/obj_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,34): error PHP2014: Syntax error: unexpected token &#39;::&#39;\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/self.php\">Compiler/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/const1.php\">Compiler/Namespaces/const1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/constants1.php\">Compiler/Namespaces/constants1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends1.php\">Compiler/Namespaces/extends1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends2.php\">Compiler/Namespaces/extends2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function1.php\">Compiler/Namespaces/function1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function2.php\">Compiler/Namespaces/function2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/namespace1.php\">Compiler/Namespaces/namespace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/simple_syntax1.php\">Compiler/Namespaces/simple_syntax1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use1.php\">Compiler/Namespaces/use1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use2.php\">Compiler/Namespaces/use2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use3.php\">Compiler/Namespaces/use3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use4.php\">Compiler/Namespaces/use4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/__call.php\">DLR/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>316 GB\nDrive C: 20 GB\nDrive D: 316 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>316 GB\nDrive C: 20 GB\nDrive D: 316 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30818&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30814&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30814&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;30818&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 288,\nT_INT_CAST = 291,\nT_DOUBLE_CAST = 297,\nT_STRING_CAST = 300,\nT_ARRAY_CAST = 303,\nT_OBJECT_CAST = 304,\nT_UNSET_CAST = 305,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtoany.php\">Objects/convobjtoany.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtostr.php\">Objects/convobjtostr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objop.php\">Objects/objop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objopstr.php\">Objects/objopstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/__invoke.php\">Objects/__invoke.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/groupbug.php\">RegEx/groupbug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref2.php\">RegEx/namedbackref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(3) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [&quot;10&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/nomatchall.php\">RegEx/nomatchall.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/AppendIterator1.php\">SPL/AppendIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/AppendIterator2.php\">SPL/AppendIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator1.php\">SPL/ArrayIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator2.php\">SPL/ArrayIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/FilterIterator.php\">SPL/FilterIterator.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator1.php\">SPL/RecursiveIteratorIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator2.php\">SPL/RecursiveIteratorIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator3.php\">SPL/RecursiveIteratorIterator3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray1.php\">SPL/SplFixedArray1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray2.php\">SPL/SplFixedArray2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage1.php\">SPL/SplObjectStorage1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage2.php\">SPL/SplObjectStorage2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage3.php\">SPL/SplObjectStorage3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage4.php\">SPL/SplObjectStorage4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/stripslashes.php\">Strings/stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (2277).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(91%) 900 succeeded, 92 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class &#39;date&#39; not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)#64844482 (0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#21224086 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: &#39;error&#39;</pre></td><td><pre>Undefined index here: &#39;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n&#39;d:-INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n&#39;d:INF;&#39;\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n&#39;d:NAN;&#39;\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n&#39;d:-INF;&#39;\ndouble(-Infinity)\ndouble(Infinity)\n&#39;d:INF;&#39;\ndouble(Infinity)\ndouble(NaN)\n&#39;d:NAN;&#39;\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;&#180;┐Ż&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td><td><pre>&#39;O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\nobject\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}\n&#39;a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}&#39;\narray\n{\n  &#39;ďż˝&#39; =&gt; &#39;&#180;┐Ż&#39;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_instantiated.php\">Arrays/array_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; A\n            [2] =&gt; 0\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; B\n            [2] =&gt; 0\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 3\n            [1] =&gt; C\n            [2] =&gt; \n        )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n            [2] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array\n *RECURSION*\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; \n            [1] =&gt; \n        )\n\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n        (\n            [favorite] =&gt; Array\n                (\n                    [0] =&gt; red\n                    [1] =&gt; green\n                )\n\n            [0] =&gt; blue\n        )\n\n    [0] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n    [q] =&gt; Array\n        (\n            [0] =&gt; x\n        )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n        (\n            [0] =&gt; 4\n            [1] =&gt; 5\n            [2] =&gt; 6\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n            [3] =&gt; e\n        )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [a] =&gt; Array\n                (\n                    [a] =&gt; Array [recursion]\n\n\n                )\n\n            [0] =&gt; 1\n            [1] =&gt; 2\n            [2] =&gt; 3\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n            [b] =&gt; Array\n                (\n                    [0] =&gt; 1\n                    [1] =&gt; 1\n                )\n\n            [c] =&gt; 1\n            [d] =&gt; Array\n                (\n                    [0] =&gt; 2\n                    [1] =&gt; 3\n                )\n\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n        )\n\n)\nArray\n(\n    [a] =&gt; Array\n        (\n        )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_op.php\">Arrays/array_op.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>float(8.3)\nfloat(0)\nint(6)\nint(6)\nfloat(4294967297)\nfloat(9.2233720282648E+18)\nbool(true)\nbool(false)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unset_add.php\">Arrays/array_unset_add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; 8\n    [4] =&gt; 0x10\n    [5] =&gt; 10x\n    [6] =&gt; 20x\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; add1\n    [1] =&gt; x2\n    [2] =&gt; 0x10\n    [3] =&gt; ach0\n    [4] =&gt; 0\n    [5] =&gt; x10\n    [6] =&gt; 1\n    [7] =&gt; 1\n    [8] =&gt; 8\n    [9] =&gt; 10x\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort numeric:\nArray\n(\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [10a] =&gt; 0\n    [0] =&gt; x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 20x\n    [5] =&gt; 10x\n    [6] =&gt; 0x10\n    [7] =&gt; 8\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 0\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 10x\n    [2] =&gt; 8\n    [3] =&gt; 1\n    [4] =&gt; 1\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [7] =&gt; 0x10\n    [8] =&gt; x2\n    [9] =&gt; x10\n    [10] =&gt; 0\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [2b] =&gt; 1\n    [z] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/001.php\">Arrays/lazy_copy/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/002.php\">Arrays/lazy_copy/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/003.php\">Arrays/lazy_copy/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/004.php\">Arrays/lazy_copy/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/005.php\">Arrays/lazy_copy/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/lazy_copy/006.php\">Arrays/lazy_copy/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/if_if.php\">Bugs/if_if.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/obj_instantiated.php\">Bugs/obj_instantiated.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(ScriptContext context, DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 17\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/BaseTypes.php\">CLR/BaseTypes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ClrEvent.php\">CLR/ClrEvent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/ConditionalDecls.php\">CLR/ConditionalDecls.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/ConditionalDecls2.php\">CLR/ConditionalDecls2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(T&lt;:C:&gt;)(0) {\n}</pre></td><td><pre>object(T&lt;:C:&gt;)#39434786 (0) {\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/foreach.php\">CLR/foreach.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/handle_enum.php\">CLR/handle_enum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance1.php\">CLR/Inheritance1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;I4&#39; and &#39;I1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance2.php\">CLR/Inheritance2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J4&#39; and &#39;J1&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(6,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance3.php\">CLR/Inheritance3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): error PHP2031: Circular interface inheritance dependency involving &#39;J5&#39; and &#39;J5&#39;\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(3,2): (related location)\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance4.php\">CLR/Inheritance4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>error PHP2007: Internal error! \r\nPlease, report this bug via http://www.codeplex.com/WorkItem/List.aspx?ProjectName=Phalanger.\r\nAdditional information: \r\nCould not load type &#39;&lt;__input.txt&gt;.J`1&#39; from assembly &#39;Inheritance4_file, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&#39; because it has recursive generic definition.\r\n   at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)\r\n   at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()\r\n   at System.Reflection.Emit.TypeBuilder.CreateType()\r\n   at PHP.Core.Reflection.PhpType.Bake()\r\n   at PHP.Core.Reflection.ScriptCompilationUnit.Bake()\r\n   at PHP.Core.Reflection.InclusionGraphBuilder.EmitAllUnits(CodeGenerator codeGenerator)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.CompileScripts(IEnumerable`1 sourceFiles, String duckPath, String duckNamespace, CompilationContext context)\r\n   at PHP.Core.Emit.ScriptAssemblyBuilder.Build(IEnumerable`1 sourceFiles, CompilationContext context)\r\n   at PHP.Core.ApplicationCompiler.Compile(ApplicationContext applicationContext, CompilerConfiguration config, ErrorSink errorSink, CompilationParameters ps)\r\n\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance5.php\">CLR/Inheritance5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance6.php\">CLR/Inheritance6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance7.php\">CLR/Inheritance7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"CLR/Inheritance8.php\">CLR/Inheritance8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Inheritance9.php\">CLR/Inheritance9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(14,2): error PHP1018: Class &#39;D&#39; doesn&#39;t implement abstract method I::f()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/Lambdas.php\">CLR/Lambdas.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Phalanger misbehaviour while compiling [file] section</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Compile error</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\CLR\\__input.txt(5,34): error PHP2014: Syntax error: unexpected token &#39;::&#39;\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"CLR/NameResolving.php\">CLR/NameResolving.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nbool(true)\nobject(Directory)(2) {\n  [&quot;handle&quot;]=&gt;\n  NULL\n  [&quot;path&quot;]=&gt;\n  NULL\n}</pre></td><td><pre>bool(true)\nbool(true)\nobject(Directory)#40101120 (2) {\n  [&quot;handle&quot;]=&gt;\n  NULL\n  [&quot;path&quot;]=&gt;\n  NULL\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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.\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n&#39;x&#39;\n\ng2:\nf(x)\nu(x)\n&#39;b&#39;\n\ng3:\nf(x)\nu(x)\n&#39;b&#39;\n\ng4:\nf(x)\nu(x)\n&#39;b&#39;\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)#10923418 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) [recursion]\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) [recursion]\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/func_get_args.php\">Compiler/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/new_array_item_assignadd.php\">Compiler/new_array_item_assignadd.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/self.php\">Compiler/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_short.php\">Compiler/ternary_short.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/this%20call.php\">Compiler/this%20call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/__call.php\">Compiler/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/const1.php\">Compiler/Namespaces/const1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/constants1.php\">Compiler/Namespaces/constants1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends1.php\">Compiler/Namespaces/extends1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/extends2.php\">Compiler/Namespaces/extends2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function1.php\">Compiler/Namespaces/function1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/function2.php\">Compiler/Namespaces/function2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/namespace1.php\">Compiler/Namespaces/namespace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/simple_syntax1.php\">Compiler/Namespaces/simple_syntax1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use1.php\">Compiler/Namespaces/use1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use2.php\">Compiler/Namespaces/use2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use3.php\">Compiler/Namespaces/use3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Namespaces/use4.php\">Compiler/Namespaces/use4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_dir_.php\">Compiler/PseudoConst/_dir_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)#13256970 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)#13256970 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)#26987408 (1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)#46212239 (2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#46212239 (2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: call_user_func() expects parameter 1 to be a valid callback, function &#39;unset&#39; not found or invalid function name in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt on line 3\nint(10)</pre></td><td><pre>Error: call_user_func(): Call to undefined function: &#39;unset&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\Unset\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext.php\">DLR/classContext.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext1.php\">DLR/classContext1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/classContext2.php\">DLR/classContext2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions%20generics.php\">DLR/restrictions%20generics.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/restrictions.php\">DLR/restrictions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/targets.php\">DLR/targets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DLR/__call.php\">DLR/__call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>273 GB\nDrive C: 34 GB\nDrive D: 273 GB\nDrive E: \nWarning: disk_free_space(): The system cannot find the path specified.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>273 GB\nDrive C: 34 GB\nDrive D: 273 GB\nDrive E: false\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/glob_up_dirs.php\">FileSystem/glob_up_dirs.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(6) &quot;../DLR&quot;\nstring(11) &quot;../DateTime&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td><td><pre>string(7) &quot;../@PHP&quot;\nstring(9) &quot;../Arrays&quot;\nstring(7) &quot;../Bugs&quot;\nstring(6) &quot;../CLR&quot;\nstring(11) &quot;../Compiler&quot;\nstring(11) &quot;../DateTime&quot;\nstring(6) &quot;../DLR&quot;\nstring(13) &quot;../FileSystem&quot;\nstring(7) &quot;../Math&quot;\nstring(7) &quot;../Misc&quot;\nstring(10) &quot;../Objects&quot;\nstring(10) &quot;../PHP.NET&quot;\nstring(8) &quot;../RegEx&quot;\nstring(6) &quot;../SPL&quot;\nstring(10) &quot;../Strings&quot;\nstring(11) &quot;../TestLogs&quot;\nstring(12) &quot;../Variables&quot;\nstring(6) &quot;../Xml&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31090&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31090&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31090&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;31078&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: Bad file descriptor in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime test.txt (1304981421)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) ctime touch.txt (1304981421)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 10, 2011; [00:50:21] (00h) atime touch.txt (1304981421)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime test.txt (1304977821)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) ctime touch.txt (1304977821)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;May 9, 2011; [23:50:21] (23h) atime touch.txt (1304977821)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>correct</pre></td><td><pre>Error: Call to undefined function: &#39;zip_open&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\zip\\__input.txt at expression on line 3, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: &#39;frenchtojd&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/dir_read.php\">Misc/dir_read.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 &#39;\\r\\n&#39;\nT_OPEN_TAG\n368 &#39;&amp;lt;?&#39;\nT_WHITESPACE\n371 &#39; \\r\\n\\r\\n&#39;\nT_FINAL\n345 &#39;final&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_CLASS\n353 &#39;class&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;A&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\nT_FUNCTION\n334 &#39;function&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_STRING\n307 &#39;__get&#39;\n    &#39;(&#39;\nT_VARIABLE\n309 &#39;$x&#39;\n    &#39;)&#39;\nT_WHITESPACE\n371 &#39; \\r\\n  &#39;\n    &#39;{&#39;\nT_WHITESPACE\n371 &#39; \\r\\n    &#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_START_HEREDOC\n372 &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n&#39;\nT_END_HEREDOC\n373 &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n    &#39;\n    &#39;$&#39;\nT_VARIABLE\n309 &#39;$y&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_ARRAY\n360 &#39;array&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;(&#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;100000000000000&#39;\n    &#39;,&#39;\nT_DNUMBER\n306 &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;true&#39;\n    &#39;,&#39;\nT_STRING\n307 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\nT_CONSTANT_ENCAPSED_STRING\n315 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_DOLLAR_OPEN_CURLY_BRACES\n374 &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\nT_VARIABLE\n309 &#39;$x&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;-&amp;gt;$$&#39;\nT_VARIABLE\n309 &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\nT_ENCAPSED_AND_WHITESPACE\n314 &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; &#39;\n    &#39;=&#39;\nT_WHITESPACE\n371 &#39; &#39;\nT_LNUMBER\n305 &#39;1&#39;\n    &#39;;&#39;\nT_WHITESPACE\n371 &#39;\\r\\n  &#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39; \\r\\n&#39;\n    &#39;}&#39;\nT_WHITESPACE\n371 &#39;\\r\\n\\r\\n&#39;\nT_CLOSE_TAG\n370 &#39;?&amp;gt;&#39;</pre></td><td><pre>&#39;\n&#39;\n    &#39;&amp;lt;?&#39;\n    &#39; \n\n&#39;\n    &#39;final&#39;\n    &#39; &#39;\n    &#39;class&#39;\n    &#39; &#39;\n    &#39;A&#39;\n    &#39; \n&#39;\n    &#39;{&#39;\n    &#39; \n  &#39;\n    &#39;function&#39;\n    &#39; &#39;\n259\n259 &#39;__get&#39;\n    &#39;(&#39;\n    &#39;$x&#39;\n    &#39;)&#39;\n    &#39; \n  &#39;\n    &#39;{&#39;\n    &#39; \n    &#39;\n    &#39;$x&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n&#39;\n    &#39;         &amp;lt;&amp;lt;&amp;lt;&#39;\n    &#39;hello&#39;\n    &#39;\n&#39;\n    &#39;EOOOOOOOOOOOOOOt;\n&#39;\n    &#39;EOOOOOOOOOOOOOT;\n&#39;\n    &#39;EOOOOOOOOOOOOOOT&#39;\n    &#39;;&#39;\n    &#39;\n\n    &#39;\n    &#39;$&#39;\n    &#39;$y&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;array&#39;\n    &#39; &#39;\n    &#39;(&#39;\n    &#39;1&#39;\n    &#39;,&#39;\n    &#39;100000000000000&#39;\n    &#39;,&#39;\n    &#39;999999999999999999999999999999999&#39;\n    &#39;,&#39;\n256\n256 &#39;true&#39;\n    &#39;,&#39;\n257\n257 &#39;false&#39;\n    &#39;)&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n-29\n-29 &#39;&amp;quot;xxx&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n    &#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;${&#39;\n    &#39;$&#39;\n    &#39;{&#39;\n    &#39;&amp;quot;&#39;\n    &#39;x&#39;\n    &#39;$x&#39;\n    &#39;-&amp;gt;&#39;\n    &#39;$&#39;\n    &#39;$&#39;\n    &#39;$x0xx&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39;}&#39;\n    &#39;x&#39;\n    &#39;&amp;quot;&#39;\n    &#39;}&#39;\n    &#39; &#39;\n    &#39;=&#39;\n    &#39; &#39;\n    &#39;1&#39;\n    &#39;;&#39;\n    &#39;\n  &#39;\n    &#39;}&#39;\n    &#39; \n&#39;\n    &#39;}&#39;\n    &#39;\n\n&#39;\n    &#39;?&amp;gt;&#39;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 7\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(DTypeDesc caller, PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.CallInternal(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at PHP.Core.ScriptContext.CallVoid(Dictionary`2 localVariables, NamingContext namingContext, Object name, String fallbackName, DRoutineDesc&amp; routineHint, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 7\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject &lt;self&gt;, DTypeDesc &lt;includer&gt;, Boolean &lt;request&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_DIR = 220,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_GOTO = 237,\nT_TRY = 238,\nT_CATCH = 239,\nT_THROW = 240,\nT_INTERFACE = 241,\nT_IMPLEMENTS = 242,\nT_ABSTRACT = 243,\nT_FINAL = 244,\nT_PRIVATE = 245,\nT_PROTECTED = 246,\nT_PUBLIC = 247,\nT_BOOL_CAST = 288,\nT_INT_CAST = 291,\nT_DOUBLE_CAST = 297,\nT_STRING_CAST = 300,\nT_ARRAY_CAST = 303,\nT_OBJECT_CAST = 304,\nT_UNSET_CAST = 305,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtoany.php\">Objects/convobjtoany.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/convobjtostr.php\">Objects/convobjtostr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/field_inheritance1.php\">Objects/field_inheritance1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/field_inheritance2.php\">Objects/field_inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/field_inheritance3.php\">Objects/field_inheritance3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objop.php\">Objects/objop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/objopstr.php\">Objects/objopstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_inheritance1.php\">Objects/static_field_inheritance1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_inheritance2.php\">Objects/static_field_inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_inheritance3.php\">Objects/static_field_inheritance3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/__invoke.php\">Objects/__invoke.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/escaped_unicode.php\">RegEx/escaped_unicode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/groupbug.php\">RegEx/groupbug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref2.php\">RegEx/namedbackref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups1.php\">RegEx/namedgroups1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/namedgroups2.php\">RegEx/namedgroups2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: preg_match_all(): Numeric named subpatterns are not allowed in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\__input.txt on line 6\narray(0) {\n}</pre></td><td><pre>array(3) {\n  [0]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(23) &quot;flux.transitions.bars3d&quot;\n    [1]=&gt;\n    string(21) &quot;flux.transitions.wrap&quot;\n  }\n  [&quot;10&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(6) &quot;bars3d&quot;\n    [1]=&gt;\n    string(4) &quot;wrap&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/nomatchall.php\">RegEx/nomatchall.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Array to string conversion in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\RegEx\\Perl\\__input.txt on line 5\narray(2) {\n  [3]=&gt;\n  float(1.5)\n  [6]=&gt;\n  float(58.54)\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/AppendIterator1.php\">SPL/AppendIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/AppendIterator2.php\">SPL/AppendIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator1.php\">SPL/ArrayIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayIterator2.php\">SPL/ArrayIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/FilterIterator.php\">SPL/FilterIterator.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator1.php\">SPL/RecursiveIteratorIterator1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator2.php\">SPL/RecursiveIteratorIterator2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/RecursiveIteratorIterator3.php\">SPL/RecursiveIteratorIterator3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray1.php\">SPL/SplFixedArray1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplFixedArray2.php\">SPL/SplFixedArray2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage1.php\">SPL/SplObjectStorage1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage2.php\">SPL/SplObjectStorage2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage3.php\">SPL/SplObjectStorage3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/SplObjectStorage4.php\">SPL/SplObjectStorage4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>Error: Call to undefined function: &#39;mb_strlen&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt at expression on line 4, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x&#39;&#39;y&quot;z)\nfgets = (x&#39;&#39;y&quot;z)\nfile[0] = (x&#39;&#39;y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = (0)\n\nWarning: 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.\nfputs = (0)\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x&#39;y&quot;z)\nfgets = (x&#39;y&quot;z)\nfile[0] = (x&#39;y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\&#39;b&quot;\\\\ca\\)\nfgets = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nfile[0] = (a\\&#39;b&quot;\\\\ca\\&#39;b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne&#39;e\ne&#39;&#39;e\ne&#39;e\ne&#39;e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne&#39;e\ne&#39;e\ne&#39;e\ne&#39;e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/stripslashes.php\">Strings/stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/assign_copy.php\">Variables/assign_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/class_constants.php\">Variables/class_constants.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constants_defined.php\">Variables/constants_defined.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/extract%20refs.php\">Variables/extract%20refs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n  &#39;prefix_non_existent&#39; =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; integer(2)\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; &#39;hello&#39;\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;non_existent&#39; =&gt; integer(1)\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  &#39;&#39; =&gt; &#39;hello&#39;\n  &#39;0&#39; =&gt; NULL\n  &#39;000g&#39; =&gt; &#39;hello&#39;\n  &#39;a d&#39; =&gt; &#39;hello&#39;\n  &#39;ad&#39; =&gt; NULL\n  &#39;prefix_0&#39; =&gt; integer(1)\n  &#39;prefix_000g&#39; =&gt; integer(1)\n  &#39;prefix_ad&#39; =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#64844482 (0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; &#39;asdas&#39;,\n  6 =&gt; array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; class stdClass\n  {\n\n  },\n  8 =&gt; NULL,\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n}\narray\n{\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;xhtml&#39; =&gt; &#39;http://www.w3.org/TR/REC-html40&#39;\n  &#39;html&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n  &#39;baz&#39; =&gt; &#39;foobarbaz&#39;\n  &#39;foo&#39; =&gt; &#39;foobar&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n  &#39;&#39; =&gt; &#39;http://www.w3.org/1999/xhtml&#39;\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: Call to undefined function: &#39;xml_parser_create&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Xml\\__input.txt at expression on line 18, column 3.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: Cannot find a script or an extension object associated with namespace &#39;http://exslt.org/dates-and-times&#39;..\n\nWarning: Illegal string offset &#39;-1&#39; in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog (79002).htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 803 succeeded, 67 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>─Ć┼╝╦Łauky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '─Ć┼╝╦Ł' =&gt; '─Ć┼╝╦Ł'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '─Ć┼╝╦Ł' =&gt; '─Ć┼╝╦Ł'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h─Ć┼╝╦Łyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h─Ć┼╝╦Łyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot, Stream outputStream)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>102 GB\nDrive C: 214 GB\nDrive D: 102 GB\nDrive E: 178 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>102 GB\nDrive C: 214 GB\nDrive D: 102 GB\nDrive E: 178 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10484&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10466&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10502&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10520&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nl├Ş l├Şrdag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot, Stream outputStream)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł─Ć┼╝╦Ł3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring[binary](2) &quot;\\x41\\x62&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr─Ć┼╝╦Łmer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/1285%20overrides.php\">WorkItems/1285%20overrides.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26667%20hash.php\">WorkItems/26667%20hash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27838%20json.php\">WorkItems/27838%20json.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/29026%20echo%20concat.php\">WorkItems/29026%20echo%20concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-02-27.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(90%) 778 succeeded, 83 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\n&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside</pre></td><td><pre>&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\n&lt;br /&gt;class A: 10&lt;br /&gt;class B: 10&lt;br /&gt;class B: 10&lt;br /&gt;class A: 11&lt;br /&gt;class B: 11&lt;br /&gt;class B: 11</pre></td><td><pre>&lt;br /&gt;class A: 10&lt;br /&gt;class B: 10&lt;br /&gt;class B: 10&lt;br /&gt;class A: 11&lt;br /&gt;class B: 11&lt;br /&gt;class B: 11</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  'foo' =&gt; 'test'\n}\n\nStrict 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\narray\n{\n  'foo' =&gt; 'test'\n}</pre></td><td><pre>array\n{\n  'foo' =&gt; 'test'\n}\narray\n{\n  'foo' =&gt; 'test'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'</pre></td><td><pre>object\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\ninteger(5)\nFALSE\nFALSE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\ninteger(2)\nTRUE\nTRUE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}</pre></td><td><pre>integer(5)\nFALSE\nFALSE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\ninteger(2)\nTRUE\nTRUE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nok1\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\ndone!\nok2\nbar::run2\nfoo::method2\nfoo::method2\nfoo::finalize\ndone!\nok3\nbar::run3\nfoo::method3\nfoo::method3\nfoo::finalize\ndone!\nouch\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\nI'm alive!</pre></td><td><pre>ok1\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\ndone!\nok2\nbar::run2\nfoo::method2\nfoo::method2\nfoo::finalize\ndone!\nok3\nbar::run3\nfoo::method3\nfoo::method3\nfoo::finalize\ndone!\nouch\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\nI'm alive!</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nobject\n{\n  'A' =&gt; \n  array\n  {\n    1 =&gt; \n    object\n    {\n      'i' =&gt; integer(1)\n    }\n    2 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n    3 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n  }\n  'B' =&gt; \n  object\n  {\n    'i' =&gt; integer(1)\n  }\n}</pre></td><td><pre>object\n{\n  'A' =&gt; \n  array\n  {\n    1 =&gt; \n    object\n    {\n      'i' =&gt; integer(1)\n    }\n    2 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n    3 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n  }\n  'B' =&gt; \n  object\n  {\n    'i' =&gt; integer(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'dirname' =&gt; '\\'\n  'basename' =&gt; 'dsds.asa'\n  'extension' =&gt; 'asa'\n  'filename' =&gt; 'dsds'\n}</pre></td><td><pre>array\n{\n  'dirname' =&gt; '\\'\n  'basename' =&gt; 'dsds.asa'\n  'extension' =&gt; 'asa'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests2\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests2\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests2\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests2\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Hujer</pre></td><td><pre>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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\nHujer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(19) &quot;Set in f() function&quot;\n\nStrict Standards: Only variables should be assigned by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 26\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td><td><pre>string(19) &quot;Set in f() function&quot;\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(19) &quot;Set in f() function&quot;\n\nStrict Standards: Only variables should be assigned by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 36\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nMethod C-&gt;f() return what it gets.\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td><td><pre>string(19) &quot;Set in f() function&quot;\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nMethod C-&gt;f() return what it gets.\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>NULL\nNULL\nNULL\nNULL\nNULL\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 36\nNULL\nNULL\nNULL\nNULL\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 42\nNULL</pre></td><td><pre>NULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>129 GB\nDrive C: 211 GB\nDrive D: 129 GB\nDrive E: 379 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>129 GB\nDrive C: 211 GB\nDrive D: 129 GB\nDrive E: 379 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>TCP\n\nREAD: 8468\n\nUDP</pre></td><td><pre>TCP\n\nREAD: 8413\n\nUDP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8325&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8299&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8325&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8317&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre></pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo\nWorks\nWorks</pre></td><td><pre>foo\nWorks\nError</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'Joe'\ninteger(3)\ninteger(0)\n'John'\ninteger(3)\ninteger(1)\n'Jane'\ninteger(3)\ninteger(0)</pre></td><td><pre>'Joe'\ninteger(1)\ninteger(1)\n'John'\ninteger(1)\ninteger(1)\n'Jane'\ninteger(1)\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\__input.txt on line 14</pre></td><td><pre>HERE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(13) &quot;XsltProcessor&quot;</pre></td><td><pre>string(4) &quot;TeSt&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 1: Transform To XML String\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 1: Transform To XML String\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 2: Transform To HTML String\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 2: Transform To HTML String\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br&gt; \na2 c2 &lt;br&gt; \nń3 b3 c3 &lt;br&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 3: Using Parameters\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 3: Using Parameters\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;hello world\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 4: Checking UTF8 Output\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 4: Checking UTF8 Output\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \n├Ą3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 5: Checking Indent\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 5: Checking Indent\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;\n  &lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;\n&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 6: Transform To Doc\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 6: Transform To Doc\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 7: Transform To Uri\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\prepare.inc on line 14</pre></td><td><pre>Test 7: Transform To Uri\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;bar\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\__input.txt on line 8</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\__input.txt on line 12</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 12: Using Associative Array of Parameters\nFatal error: Class 'xsltprocessor' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Xml\\__input.txt on line 20</pre></td><td><pre>Test 12: Using Associative Array of Parameters\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;\n&lt;html&gt;&lt;body&gt;barbar\ntest\na1 b1 c1 &lt;br/&gt; \na2 c2 &lt;br/&gt; \nń3 b3 c3 &lt;br/&gt; \n&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></td></tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-05-01.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(88%) 761 succeeded, 101 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)\r\n   at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\classes\\__input.txt:line 21\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(2147483647)\nint64(2147483648)\nint64(2147483648)\nint64(50000000000)</pre></td><td><pre>integer(2147483647)\nint64(2147483648)\nint64(2147483648)\nint64(50000000000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(11.5)\ndouble(-1299)\ninteger(1)\ninteger(1)\ninteger(11)\ndouble(14.2)\ndouble(11)\ndouble(11)</pre></td><td><pre>double(11.5)\ndouble(-1299)\ninteger(1)\ninteger(1)\ninteger(11)\ndouble(14.2)\ndouble(11)\ndouble(11)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Static object: object(stdClass)(1)\n{\n  [&quot;property&quot;] =&gt; integer(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1)\n{\n  [&quot;property&quot;] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Union of $a and $b: \narray\n{\n  ['a'] =&gt; string(5) &quot;apple&quot;\n  ['b'] =&gt; string(6) &quot;banana&quot;\n  ['c'] =&gt; string(6) &quot;cherry&quot;\n}\nUnion of $b and $a: \narray\n{\n  ['a'] =&gt; string(4) &quot;pear&quot;\n  ['b'] =&gt; string(10) &quot;strawberry&quot;\n  ['c'] =&gt; string(6) &quot;cherry&quot;\n}</pre></td><td><pre>Union of $a and $b: \narray(3)\n{\n  ['a'] =&gt; string(5) &quot;apple&quot;\n  ['b'] =&gt; string(6) &quot;banana&quot;\n  ['c'] =&gt; string(6) &quot;cherry&quot;\n}\nUnion of $b and $a: \narray(3)\n{\n  ['a'] =&gt; string(4) &quot;pear&quot;\n  ['b'] =&gt; string(10) &quot;strawberry&quot;\n  ['c'] =&gt; string(6) &quot;cherry&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [10] =&gt; integer(2)\n}\narray\n{\n  [10] =&gt; integer(1)\n}</pre></td><td><pre>array(1)\n{\n  [10] =&gt; integer(2)\n}\narray(1)\n{\n  [10] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\n&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside</pre></td><td><pre>&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set in constructor&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside&lt;br /&gt;set from outside</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\n&lt;br /&gt;class A: 10&lt;br /&gt;class B: 10&lt;br /&gt;class B: 10&lt;br /&gt;class A: 11&lt;br /&gt;class B: 11&lt;br /&gt;class B: 11</pre></td><td><pre>&lt;br /&gt;class A: 10&lt;br /&gt;class B: 10&lt;br /&gt;class B: 10&lt;br /&gt;class A: 11&lt;br /&gt;class B: 11&lt;br /&gt;class B: 11</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  'foo' =&gt; 'test'\n}\n\nStrict 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\narray\n{\n  'foo' =&gt; 'test'\n}</pre></td><td><pre>array\n{\n  'foo' =&gt; 'test'\n}\narray\n{\n  'foo' =&gt; 'test'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'</pre></td><td><pre>object\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'\nobject\n{\n  'fubar' =&gt; 'fubar'\n}\n'fubar'\n'fubar'</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\ninteger(5)\nFALSE\nFALSE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\ninteger(2)\nTRUE\nTRUE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}</pre></td><td><pre>integer(5)\nFALSE\nFALSE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\ninteger(2)\nTRUE\nTRUE\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}\narray\n{\n  0 =&gt; integer(0)\n  1 =&gt; integer(1)\n  2 =&gt; integer(2)\n  3 =&gt; integer(3)\n  4 =&gt; integer(4)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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()\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nok1\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\ndone!\nok2\nbar::run2\nfoo::method2\nfoo::method2\nfoo::finalize\ndone!\nok3\nbar::run3\nfoo::method3\nfoo::method3\nfoo::finalize\ndone!\nouch\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\nI'm alive!</pre></td><td><pre>ok1\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\ndone!\nok2\nbar::run2\nfoo::method2\nfoo::method2\nfoo::finalize\ndone!\nok3\nbar::run3\nfoo::method3\nfoo::method3\nfoo::finalize\ndone!\nouch\nbar::run1\nfoo::method1\nfoo::method1\nfoo::finalize\nI'm alive!</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.Foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject&amp; self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)\r\n   at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\lang\\__input.txt:line 16\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) [empty]\n\narray\n{\n  [0] =&gt; integer(1)\n}\n\narray\n{\n  [1] =&gt; integer(1)\n}\n\narray\n{\n  [-1] =&gt; integer(1)\n}\n\narray\n{\n  [0] =&gt; integer(2)\n}\n\narray\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray\n{\n  [1] =&gt; integer(2)\n}\n\narray\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray\n{\n  [0] =&gt; integer(1)\n}\n\narray\n{\n  [1] =&gt; integer(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(500500)\nint64(5000050000)</pre></td><td><pre>integer(500500)\nint64(5000050000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  ['a1'] =&gt; integer(1)\n  ['a2'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n  }\n  ['a3'] =&gt; array\n  {\n    ['a'] =&gt; array\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n  }\n}\narray\n{\n  ['a1'] =&gt; integer(1)\n  ['a2'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n  }\n  ['a3'] =&gt; array\n  {\n    ['a'] =&gt; array\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n  }\n}\narray\n{\n  ['a1'] =&gt; integer(2)\n  ['a2'] =&gt; array\n  {\n    [0] =&gt; integer(3)\n    [1] =&gt; integer(4)\n    [2] =&gt; integer(5)\n  }\n  ['a3'] =&gt; array\n  {\n    ['c'] =&gt; string(2) &quot;cc&quot;\n    ['a'] =&gt; array\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(40)\n    }\n  }\n}\narray\n{\n  ['a1'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n  }\n  ['a2'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(3)\n    [4] =&gt; integer(4)\n    [5] =&gt; integer(5)\n  }\n  ['a3'] =&gt; array\n  {\n    ['a'] =&gt; array\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n      [3] =&gt; integer(10)\n      [4] =&gt; integer(40)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n    ['c'] =&gt; string(2) &quot;cc&quot;\n  }\n}</pre></td><td><pre>array(3)\n{\n  ['a1'] =&gt; integer(1)\n  ['a2'] =&gt; array(3)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n  }\n  ['a3'] =&gt; array(2)\n  {\n    ['a'] =&gt; array(3)\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n  }\n}\narray(3)\n{\n  ['a1'] =&gt; integer(1)\n  ['a2'] =&gt; array(3)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n  }\n  ['a3'] =&gt; array(2)\n  {\n    ['a'] =&gt; array(3)\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n  }\n}\narray(3)\n{\n  ['a1'] =&gt; integer(2)\n  ['a2'] =&gt; array(3)\n  {\n    [0] =&gt; integer(3)\n    [1] =&gt; integer(4)\n    [2] =&gt; integer(5)\n  }\n  ['a3'] =&gt; array(2)\n  {\n    ['c'] =&gt; string(2) &quot;cc&quot;\n    ['a'] =&gt; array(2)\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(40)\n    }\n  }\n}\narray(3)\n{\n  ['a1'] =&gt; array(2)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n  }\n  ['a2'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(3)\n    [4] =&gt; integer(4)\n    [5] =&gt; integer(5)\n  }\n  ['a3'] =&gt; array(3)\n  {\n    ['a'] =&gt; array(5)\n    {\n      [0] =&gt; integer(10)\n      [1] =&gt; integer(20)\n      [2] =&gt; integer(30)\n      [3] =&gt; integer(10)\n      [4] =&gt; integer(40)\n    }\n    ['b'] =&gt; string(1) &quot;b&quot;\n    ['c'] =&gt; string(2) &quot;cc&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [0] =&gt; &amp;integer(123)\n  [1] =&gt; &amp;bool(true)\n}\narray\n{\n  [0] =&gt; &amp;integer(123)\n  [1] =&gt; &amp;bool(true)\n}</pre></td><td><pre>array(2)\n{\n  [0] =&gt; &amp;integer(123)\n  [1] =&gt; &amp;bool(true)\n}\narray(2)\n{\n  [0] =&gt; &amp;integer(123)\n  [1] =&gt; &amp;bool(true)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  ['a'] =&gt; array\n  {\n    [0] =&gt; string(2) &quot;aa&quot;\n    [1] =&gt; string(2) &quot;aa&quot;\n  }\n  ['b'] =&gt; array\n  {\n    [0] =&gt; string(2) &quot;bb&quot;\n    [1] =&gt; string(2) &quot;bb&quot;\n  }\n}</pre></td><td><pre>array(2)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;aa&quot;\n    [1] =&gt; string(2) &quot;aa&quot;\n  }\n  ['b'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;bb&quot;\n    [1] =&gt; string(2) &quot;bb&quot;\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(0)\ninteger(0)\ninteger(3)\ninteger(9)\ndouble(1.0000000000)\nint64(9999999800000001)\nint64(8589934590)</pre></td><td><pre>integer(0)\ninteger(0)\ninteger(3)\ninteger(9)\ndouble(1.0000000000)\nint64(9999999800000001)\nint64(8589934590)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nobject\n{\n  'A' =&gt; \n  array\n  {\n    1 =&gt; \n    object\n    {\n      'i' =&gt; integer(1)\n    }\n    2 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n    3 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n  }\n  'B' =&gt; \n  object\n  {\n    'i' =&gt; integer(1)\n  }\n}</pre></td><td><pre>object\n{\n  'A' =&gt; \n  array\n  {\n    1 =&gt; \n    object\n    {\n      'i' =&gt; integer(1)\n    }\n    2 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n    3 =&gt; \n    object\n    {\n      'i' =&gt; integer(2)\n    }\n  }\n  'B' =&gt; \n  object\n  {\n    'i' =&gt; integer(1)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  ['red'] =&gt; integer(2)\n  ['purple'] =&gt; integer(4)\n}\narray\n{\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n}\narray\n{\n  ['red'] =&gt; integer(2)\n  ['purple'] =&gt; integer(4)\n}\narray\n{\n  ['blue'] =&gt; integer(1)\n  ['green'] =&gt; integer(3)\n}\narray\n{\n  ['blue'] =&gt; integer(1)\n  ['green'] =&gt; integer(3)\n}</pre></td><td><pre>array(2)\n{\n  ['red'] =&gt; integer(2)\n  ['purple'] =&gt; integer(4)\n}\narray(2)\n{\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n}\narray(2)\n{\n  ['red'] =&gt; integer(2)\n  ['purple'] =&gt; integer(4)\n}\narray(2)\n{\n  ['blue'] =&gt; integer(1)\n  ['green'] =&gt; integer(3)\n}\narray(2)\n{\n  ['blue'] =&gt; integer(1)\n  ['green'] =&gt; integer(3)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; integer(4)\n  [4] =&gt; integer(5)\n}\ninteger(15)\ninteger(1200)\ninteger(1)</pre></td><td><pre>array(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; integer(4)\n  [4] =&gt; integer(5)\n}\ninteger(15)\ninteger(1200)\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(-7.7)\ndouble(-38.4)\ninteger(6)\ninteger(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td><td><pre>double(-7.7)\ndouble(-38.4)\ninteger(6)\ninteger(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [0] =&gt; string(5) &quot;apple&quot;\n  [1] =&gt; string(9) &quot;raspberry&quot;\n  [2] =&gt; string(6) &quot;orange&quot;\n  [3] =&gt; string(6) &quot;banana&quot;\n}\narray\n{\n  [0] =&gt; string(5) &quot;apple&quot;\n  [1] =&gt; integer(1)\n  [2] =&gt; string(9) &quot;raspberry&quot;\n  ['a'] =&gt; integer(1)\n  [3] =&gt; integer(2)\n  ['b'] =&gt; integer(4)\n  [4] =&gt; integer(1)\n}</pre></td><td><pre>array(4)\n{\n  [0] =&gt; string(5) &quot;apple&quot;\n  [1] =&gt; string(9) &quot;raspberry&quot;\n  [2] =&gt; string(6) &quot;orange&quot;\n  [3] =&gt; string(6) &quot;banana&quot;\n}\narray(7)\n{\n  [0] =&gt; string(5) &quot;apple&quot;\n  [1] =&gt; integer(1)\n  [2] =&gt; string(9) &quot;raspberry&quot;\n  ['a'] =&gt; integer(1)\n  [3] =&gt; integer(2)\n  ['b'] =&gt; integer(4)\n  [4] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray\n{\n  ['a'] =&gt; array\n  {\n    ['a'] =&gt; &amp;array\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray\n{\n  ['A'] =&gt; &amp;array\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray\n{\n  ['a'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray\n{\n  ['a'] =&gt; array\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray\n{\n  ['a'] =&gt; array\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray\n{\n  ['a'] =&gt; &amp;array\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array\n{\n  [0] =&gt; array\n  {\n    [0] =&gt; array\n    {\n      [0] =&gt; array\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray\n{\n  [0] =&gt; array\n  {\n    [0] =&gt; array\n    {\n      [0] =&gt; array\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray\n{\n  [1] =&gt; array\n  {\n    [2] =&gt; array\n    {\n      [3] =&gt; array\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array\n{\n  [0] =&gt; array\n  {\n    [0] =&gt; array\n    {\n      [0] =&gt; array\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray\n{\n  [0] =&gt; array\n  {\n    [0] =&gt; array\n    {\n      [0] =&gt; array\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Hujer</pre></td><td><pre>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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\n\nStrict 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.\nHujer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x =&gt; array\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n}</pre></td><td><pre>x =&gt; array(3)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1\n2\n3\n0-1\n1-2\n2-3\n0-1\n1-2\n2-3\narray\n{\n  [0] =&gt; &amp;integer(10)\n  [1] =&gt; &amp;integer(11)\n  [2] =&gt; &amp;integer(12)\n}\narray\n{\n  [0] =&gt; &amp;integer(100)\n  [1] =&gt; &amp;integer(101)\n  [2] =&gt; &amp;integer(102)\n  [4] =&gt; &amp;integer(104)\n  [5] =&gt; &amp;integer(105)\n  [6] =&gt; integer(4)\n  [3] =&gt; &amp;integer(100)\n}</pre></td><td><pre>1\n2\n3\n0-1\n1-2\n2-3\n0-1\n1-2\n2-3\narray(3)\n{\n  [0] =&gt; &amp;integer(10)\n  [1] =&gt; &amp;integer(11)\n  [2] =&gt; &amp;integer(12)\n}\narray(7)\n{\n  [0] =&gt; &amp;integer(100)\n  [1] =&gt; &amp;integer(101)\n  [2] =&gt; &amp;integer(102)\n  [4] =&gt; &amp;integer(104)\n  [5] =&gt; &amp;integer(105)\n  [6] =&gt; integer(4)\n  [3] =&gt; &amp;integer(100)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(19) &quot;Set in f() function&quot;\n\nStrict Standards: Only variables should be assigned by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 26\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td><td><pre>string(19) &quot;Set in f() function&quot;\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(19) &quot;Set in f() function&quot;\n\nStrict Standards: Only variables should be assigned by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 36\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nMethod C-&gt;f() return what it gets.\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td><td><pre>string(19) &quot;Set in f() function&quot;\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nMethod C-&gt;f() return what it gets.\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}\nobject\n{\n  'a' =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>NULL\nNULL\nNULL\nNULL\nNULL\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 36\nNULL\nNULL\nNULL\nNULL\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 42\nNULL</pre></td><td><pre>NULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL\nNULL</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [1] =&gt; integer(1)\n  [0] =&gt; integer(0)\n}\narray\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; integer(4)\n}\narray\n{\n  [1] =&gt; integer(1)\n  [2] =&gt; integer(2)\n}\ninteger(1)</pre></td><td><pre>array(2)\n{\n  [1] =&gt; integer(1)\n  [0] =&gt; integer(0)\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; integer(4)\n}\narray(2)\n{\n  [1] =&gt; integer(1)\n  [2] =&gt; integer(2)\n}\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>121 GB\nDrive C: 218 GB\nDrive D: 121 GB\nDrive E: 184 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>121 GB\nDrive C: 218 GB\nDrive D: 121 GB\nDrive E: 184 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8775&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8763&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8775&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;8775&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray(5)\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [0] =&gt; integer(1)\n}\ninteger(1)</pre></td><td><pre>array(1)\n{\n  [0] =&gt; integer(1)\n}\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'Joe'\ninteger(3)\ninteger(0)\n'John'\ninteger(3)\ninteger(1)\n'Jane'\ninteger(3)\ninteger(0)</pre></td><td><pre>'Joe'\ninteger(1)\ninteger(1)\n'John'\ninteger(1)\ninteger(1)\n'Jane'\ninteger(1)\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-05-08.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 789 succeeded, 73 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)\r\n   at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\classes\\__input.txt:line 21\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.Foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject&amp; self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)\r\n   at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\lang\\__input.txt:line 16\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>129 GB\nDrive C: 218 GB\nDrive D: 129 GB\nDrive E: 194 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>129 GB\nDrive C: 218 GB\nDrive D: 129 GB\nDrive E: 194 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9917&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9935&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9917&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9917&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\nint(8)\nint(8)\n\nWarning: substr_count(): Length should be greater than 0 in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 15\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 17\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 18\nbool(false)\n\narray(5) {\n  [0]=&gt;\n  string(4) &quot;baaa&quot;\n  [1]=&gt;\n  string(4) &quot;baaa&quot;\n  [2]=&gt;\n  string(1) &quot;b&quot;\n  [3]=&gt;\n  string(1) &quot;b&quot;\n  [4]=&gt;\n  string(1) &quot;b&quot;\n}\n\nint(0)\nint(0)\nint(0)\nint(1)\nint(-1)</pre></td><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray(5)\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'Joe'\ninteger(3)\ninteger(0)\n'John'\ninteger(3)\ninteger(1)\n'Jane'\ninteger(3)\ninteger(0)</pre></td><td><pre>'Joe'\ninteger(1)\ninteger(1)\n'John'\ninteger(1)\ninteger(1)\n'Jane'\ninteger(1)\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-06-12.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 792 succeeded, 73 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)\r\n   at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\classes\\__input.txt:line 21\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.Foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject&amp; self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)\r\n   at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\lang\\__input.txt:line 16\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>127 GB\nDrive C: 217 GB\nDrive D: 127 GB\nDrive E: 155 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>127 GB\nDrive C: 217 GB\nDrive D: 127 GB\nDrive E: 155 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10513&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10499&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10504&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10512&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\nint(8)\nint(8)\n\nWarning: substr_count(): Length should be greater than 0 in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 15\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 17\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 18\nbool(false)\n\narray(5) {\n  [0]=&gt;\n  string(4) &quot;baaa&quot;\n  [1]=&gt;\n  string(4) &quot;baaa&quot;\n  [2]=&gt;\n  string(1) &quot;b&quot;\n  [3]=&gt;\n  string(1) &quot;b&quot;\n  [4]=&gt;\n  string(1) &quot;b&quot;\n}\n\nint(0)\nint(0)\nint(0)\nint(1)\nint(-1)</pre></td><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray(5)\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'Joe'\ninteger(3)\ninteger(0)\n'John'\ninteger(3)\ninteger(1)\n'Jane'\ninteger(3)\ninteger(0)</pre></td><td><pre>'Joe'\ninteger(1)\ninteger(1)\n'John'\ninteger(1)\ninteger(1)\n'Jane'\ninteger(1)\ninteger(1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/27377.php\">Xml/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-06-13.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 792 succeeded, 72 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object foobar = (int)1; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Reflection.DObject.InvokeMethod(String name, DTypeDesc caller, ScriptContext context)\r\n   at PHP.Core.Operators.InvokeMethod(Object x, String methodName, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\classes\\__input.txt:line 21\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; PHP.Core.Debug+AssertException: Assertion failed: Add      public static readonly object HUN = (int)100; instead of AddConstant usage.\r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AddConstant(String name, Object value)\r\n   at &lt;__input.txt&gt;.Foo.__PopulateTypeDesc(PhpTypeDesc )\r\n   --- End of inner exception stack trace ---\r\n   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n   at PHP.Core.Reflection.PhpTypeDesc.AutoPopulate()\r\n   at PHP.Core.Reflection.PhpTypeDesc.ReflectMethods()\r\n   at PHP.Core.Reflection.DTypeDesc.get_Methods()\r\n   at PHP.Core.Reflection.DTypeDesc.GetMember[N,T](GetMemberDictionary`2 dictionary, N name, DTypeDesc context, LookupFlags flags, T&amp; member)\r\n   at PHP.Core.Reflection.DTypeDesc.GetMethod(Name methodName, DTypeDesc context, DRoutineDesc&amp; method)\r\n   at PHP.Core.Operators.GetStaticMethodDesc(DTypeDesc requestedType, String methodName, DObject&amp; self, DTypeDesc caller, ScriptContext context, Boolean quiet, Boolean removeFrame)\r\n   at PHP.Core.Operators.InvokeStaticMethod(DTypeDesc type, Object methodName, DObject self, DTypeDesc caller, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\lang\\__input.txt:line 16\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>128 GB\nDrive C: 217 GB\nDrive D: 128 GB\nDrive E: 155 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>128 GB\nDrive C: 217 GB\nDrive D: 128 GB\nDrive E: 155 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10530&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10492&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10504&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10504&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\nint(8)\nint(8)\n\nWarning: substr_count(): Length should be greater than 0 in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 15\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 17\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 18\nbool(false)\n\narray(5) {\n  [0]=&gt;\n  string(4) &quot;baaa&quot;\n  [1]=&gt;\n  string(4) &quot;baaa&quot;\n  [2]=&gt;\n  string(1) &quot;b&quot;\n  [3]=&gt;\n  string(1) &quot;b&quot;\n  [4]=&gt;\n  string(1) &quot;b&quot;\n}\n\nint(0)\nint(0)\nint(0)\nint(1)\nint(-1)</pre></td><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray(5)\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-06-25.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 796 succeeded, 70 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.NullReferenceException: Object reference not set to an instance of an object.\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: 00:00:00 01/02/2005\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td><td><pre>0: 00:00:00 01/01/2005\n1: 01:00:00 01/01/2005\n2: 02:00:00 01/01/2005\n3: 03:00:00 01/01/2005\n4: 04:00:00 01/01/2005\n5: 05:00:00 01/01/2005\n6: 06:00:00 01/01/2005\n7: 07:00:00 01/01/2005\n8: 08:00:00 01/01/2005\n9: 09:00:00 01/01/2005\n10: 10:00:00 01/01/2005\n11: 11:00:00 01/01/2005\n12: 12:00:00 01/01/2005\n13: 13:00:00 01/01/2005\n14: 14:00:00 01/01/2005\n15: 15:00:00 01/01/2005\n16: 16:00:00 01/01/2005\n17: 17:00:00 01/01/2005\n18: 18:00:00 01/01/2005\n19: 19:00:00 01/01/2005\n20: 20:00:00 01/01/2005\n21: 21:00:00 01/01/2005\n22: 22:00:00 01/01/2005\n23: 23:00:00 01/01/2005\n24: error\n0am: error\n1am: 01:00:00 01/01/2005\n2am: 02:00:00 01/01/2005\n3am: 03:00:00 01/01/2005\n4am: 04:00:00 01/01/2005\n5am: 05:00:00 01/01/2005\n6am: 06:00:00 01/01/2005\n7am: 07:00:00 01/01/2005\n8am: 08:00:00 01/01/2005\n9am: 09:00:00 01/01/2005\n10am: 10:00:00 01/01/2005\n11am: 11:00:00 01/01/2005\n12am: 00:00:00 01/01/2005\n13am: error\n14am: error\n15am: error\n16am: error\n17am: error\n18am: error\n19am: error\n20am: error\n21am: error\n22am: error\n23am: error\n24am: error\n0pm: error\n1pm: 13:00:00 01/01/2005\n2pm: 14:00:00 01/01/2005\n3pm: 15:00:00 01/01/2005\n4pm: 16:00:00 01/01/2005\n5pm: 17:00:00 01/01/2005\n6pm: 18:00:00 01/01/2005\n7pm: 19:00:00 01/01/2005\n8pm: 20:00:00 01/01/2005\n9pm: 21:00:00 01/01/2005\n10pm: 22:00:00 01/01/2005\n11pm: 23:00:00 01/01/2005\n12pm: 12:00:00 01/01/2005\n13pm: error\n14pm: error\n15pm: error\n16pm: error\n17pm: error\n18pm: error\n19pm: error\n20pm: error\n21pm: error\n22pm: error\n23pm: error\n24pm: error</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>121 GB\nDrive C: 209 GB\nDrive D: 121 GB\nDrive E: 96 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>121 GB\nDrive C: 209 GB\nDrive D: 121 GB\nDrive E: 96 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10175&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10193&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10211&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10193&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\nint(8)\nint(8)\n\nWarning: substr_count(): Length should be greater than 0 in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 15\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 17\nbool(false)\n\nWarning: substr_count(): Offset value 10 exceeds string length in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Strings\\__input.txt on line 18\nbool(false)\n\narray(5) {\n  [0]=&gt;\n  string(4) &quot;baaa&quot;\n  [1]=&gt;\n  string(4) &quot;baaa&quot;\n  [2]=&gt;\n  string(1) &quot;b&quot;\n  [3]=&gt;\n  string(1) &quot;b&quot;\n  [4]=&gt;\n  string(1) &quot;b&quot;\n}\n\nint(0)\nint(0)\nint(0)\nint(1)\nint(-1)</pre></td><td><pre>string(1) &quot;b&quot;\nstring(1) &quot;b&quot;\nstring(9) &quot;baaaaaaaa&quot;\nstring(9) &quot;aaaaaaaab&quot;\nstring(3) &quot;aba&quot;\nstring(9) &quot;aaaaaaaab&quot;\n\ninteger(8)\ninteger(8)\ninteger(0)\ninteger(0)\ninteger(0)\n\narray(5)\n{\n  [0] =&gt; string(4) &quot;baaa&quot;\n  [1] =&gt; string(4) &quot;baaa&quot;\n  [2] =&gt; string(1) &quot;b&quot;\n  [3] =&gt; string(1) &quot;b&quot;\n  [4] =&gt; string(1) &quot;b&quot;\n}\n\ninteger(0)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(-1)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-07-10.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 801 succeeded, 68 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>119 GB\nDrive C: 216 GB\nDrive D: 119 GB\nDrive E: 197 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>119 GB\nDrive C: 216 GB\nDrive D: 119 GB\nDrive E: 197 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10120&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10120&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10102&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10102&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/1285%20overrides.php\">WorkItems/1285%20overrides.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26667%20hash.php\">WorkItems/26667%20hash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27838%20json.php\">WorkItems/27838%20json.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-07-11.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 801 succeeded, 68 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>119 GB\nDrive C: 216 GB\nDrive D: 119 GB\nDrive E: 196 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>119 GB\nDrive C: 216 GB\nDrive D: 119 GB\nDrive E: 196 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9897&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9915&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9915&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;9897&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/1285%20overrides.php\">WorkItems/1285%20overrides.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26667%20hash.php\">WorkItems/26667%20hash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27838%20json.php\">WorkItems/27838%20json.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-08-12.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 801 succeeded, 68 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.NullReferenceException: Object reference not set to an instance of an object.\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>118 GB\nDrive C: 202 GB\nDrive D: 118 GB\nDrive E: 306 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>118 GB\nDrive C: 202 GB\nDrive D: 118 GB\nDrive E: 306 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10125&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10121&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10161&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10125&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/1285%20overrides.php\">WorkItems/1285%20overrides.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26667%20hash.php\">WorkItems/26667%20hash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27838%20json.php\">WorkItems/27838%20json.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2010-10-01.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(92%) 802 succeeded, 68 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(0) {\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [-1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [0]=&gt;\n  int(2)\n}\n\narray(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(2)\n}\n\narray(3) {\n  [1]=&gt;\n  int(2)\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(2) {\n  [&quot;hello&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(1)\n}\n\narray(3) {\n  [&quot;&quot;]=&gt;\n  int(2)\n  [&quot;world&quot;]=&gt;\n  int(3)\n  [&quot;hello&quot;]=&gt;\n  int(4)\n}\n\narray(1) {\n  [0]=&gt;\n  int(1)\n}\n\narray(1) {\n  [1]=&gt;\n  int(1)\n}</pre></td><td><pre>array(0) [empty]\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [-1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [0] =&gt; integer(2)\n}\n\narray(2)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(2)\n}\n\narray(3)\n{\n  [1] =&gt; integer(2)\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(2)\n{\n  ['hello'] =&gt; integer(2)\n  ['world'] =&gt; integer(1)\n}\n\narray(3)\n{\n  [''] =&gt; integer(2)\n  ['world'] =&gt; integer(3)\n  ['hello'] =&gt; integer(4)\n}\n\narray(1)\n{\n  [0] =&gt; integer(1)\n}\n\narray(1)\n{\n  [1] =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 2 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 3 --------\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [2] =&gt; &amp;integer(4)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 4 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 5 --------\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(4)\n{\n  [1] =&gt; &amp;integer(2)\n  [6] =&gt; &amp;integer(12)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 6 --------\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\narray(3)\n{\n  [1] =&gt; &amp;integer(2)\n  [15] =&gt; &amp;integer(30)\n  [1200] =&gt; &amp;integer(2400)\n}\n------ Test 7 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\n------ Test 8 --------\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\narray(6)\n{\n  [0] =&gt; &amp;integer(0)\n  [7] =&gt; &amp;integer(14)\n  [2] =&gt; &amp;integer(4)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n  [-2500] =&gt; &amp;integer(-5000)\n}\n------ Test 9 --------\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}\narray(3)\n{\n  [7] =&gt; &amp;integer(14)\n  [11] =&gt; &amp;integer(22)\n  [1100] =&gt; &amp;integer(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: 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\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2)\n{\n  ['a'] =&gt; array(5)\n  {\n    ['a'] =&gt; &amp;array(3)\n    {\n      ['a'] =&gt; &amp;array(3) [recursion]\n      [0] =&gt; string(1) &quot;y&quot;\n      [1] =&gt; string(1) &quot;z&quot;\n    }\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; string(1) &quot;x&quot;\n  }\n  [0] =&gt; string(1) &quot;w&quot;\n}\nf2:\narray(1)\n{\n  ['A'] =&gt; &amp;array(2)\n  {\n    ['a'] =&gt; &amp;array(2) [recursion]\n    [0] =&gt; string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; string(1) &quot;z&quot;\n}\nf4:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf5:\narray(1)\n{\n  ['a'] =&gt; array(6)\n  {\n    [0] =&gt; integer(1)\n    [1] =&gt; integer(2)\n    [2] =&gt; integer(3)\n    [3] =&gt; integer(1)\n    [4] =&gt; integer(2)\n    [5] =&gt; integer(3)\n  }\n}\nf6:\narray(1)\n{\n  ['a'] =&gt; array(2)\n  {\n    [0] =&gt; string(2) &quot;xx&quot;\n    [1] =&gt; integer(2)\n  }\n}\nf7:\narray(1)\n{\n  ['a'] =&gt; &amp;array(1)\n  {\n    ['a'] =&gt; &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1double(-1.5)\ndouble(2.5)\ndouble(0.833333333333333)\ninteger(6)\ninteger(8)\n---2---2double(8.83333333333333)\ndouble(8.83333333333333)\ndouble(8.83333333333333)\ninteger(8)\ninteger(8)\n---3---3---4---4---5---5array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\narray(1)\n{\n  [1] =&gt; array(1)\n  {\n    [2] =&gt; array(1)\n    {\n      [3] =&gt; array(3)\n      {\n        [0] =&gt; integer(1)\n        [1] =&gt; integer(2)\n        [2] =&gt; integer(3)\n      }\n    }\n  }\n}\n---6---6array(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;u&quot;\n}\narray(4)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;v&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\narray(5)\n{\n  [0] =&gt; integer(1)\n  [1] =&gt; integer(2)\n  [2] =&gt; integer(3)\n  [3] =&gt; string(1) &quot;w&quot;\n  [4] =&gt; string(1) &quot;z&quot;\n}\n---7---7array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\narray(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; array(1)\n    {\n      [0] =&gt; array(1)\n      {\n        [0] =&gt; &amp;integer(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1)\n{\n  [0] =&gt; array(1)\n  {\n    [0] =&gt; string(1) &quot;f&quot;\n  }\n}\narray(1)\n{\n  [0] =&gt; string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1)\n{\n  [&quot;f&quot;] =&gt; string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}\narray(2)\n{\n  [0] =&gt; &amp;array(2) [recursion]\n  [1] =&gt; integer(1)\n}\narray(1)\n{\n  [0] =&gt; &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Notice: Undefined variable: a in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Compiler\\PseudoConst\\__input.txt on line 11\ng</pre></td><td><pre>g</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {000000}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;A --&gt; {PM}&quot;]\n  [INT (1)] =&gt; [STRING: &quot;B --&gt; {719}&quot;]\n  [INT (2)] =&gt; [STRING: &quot;C --&gt; {C}&quot;]\n  [INT (3)] =&gt; [STRING: &quot;D --&gt; {Sat}&quot;]\n  [INT (4)] =&gt; [STRING: &quot;E --&gt; {E}&quot;]\n  [INT (5)] =&gt; [STRING: &quot;F --&gt; {March}&quot;]\n  [INT (6)] =&gt; [STRING: &quot;G --&gt; {17}&quot;]\n  [INT (7)] =&gt; [STRING: &quot;H --&gt; {17}&quot;]\n  [INT (8)] =&gt; [STRING: &quot;I --&gt; {0}&quot;]\n  [INT (9)] =&gt; [STRING: &quot;J --&gt; {J}&quot;]\n  [INT (10)] =&gt; [STRING: &quot;K --&gt; {K}&quot;]\n  [INT (11)] =&gt; [STRING: &quot;L --&gt; {0}&quot;]\n  [INT (12)] =&gt; [STRING: &quot;M --&gt; {Mar}&quot;]\n  [INT (13)] =&gt; [STRING: &quot;N --&gt; {6}&quot;]\n  [INT (14)] =&gt; [STRING: &quot;O --&gt; {+0100}&quot;]\n  [INT (15)] =&gt; [STRING: &quot;P --&gt; {+01:00}&quot;]\n  [INT (16)] =&gt; [STRING: &quot;Q --&gt; {Q}&quot;]\n  [INT (17)] =&gt; [STRING: &quot;R --&gt; {R}&quot;]\n  [INT (18)] =&gt; [STRING: &quot;S --&gt; {th}&quot;]\n  [INT (19)] =&gt; [STRING: &quot;U --&gt; {984240978}&quot;]\n  [INT (20)] =&gt; [STRING: &quot;V --&gt; {V}&quot;]\n  [INT (21)] =&gt; [STRING: &quot;W --&gt; {10}&quot;]\n  [INT (22)] =&gt; [STRING: &quot;X --&gt; {X}&quot;]\n  [INT (23)] =&gt; [STRING: &quot;Y --&gt; {2001}&quot;]\n  [INT (24)] =&gt; [STRING: &quot;Z --&gt; {3600}&quot;]\n  [INT (25)] =&gt; [STRING: &quot;a --&gt; {pm}&quot;]\n  [INT (26)] =&gt; [STRING: &quot;b --&gt; {b}&quot;]\n  [INT (27)] =&gt; [STRING: &quot;c --&gt; {2001-03-10T17:16:18+01:00}&quot;]\n  [INT (28)] =&gt; [STRING: &quot;d --&gt; {10}&quot;]\n  [INT (29)] =&gt; [STRING: &quot;e --&gt; {Europe/Prague}&quot;]\n  [INT (30)] =&gt; [STRING: &quot;f --&gt; {f}&quot;]\n  [INT (31)] =&gt; [STRING: &quot;g --&gt; {5}&quot;]\n  [INT (32)] =&gt; [STRING: &quot;h --&gt; {05}&quot;]\n  [INT (33)] =&gt; [STRING: &quot;i --&gt; {16}&quot;]\n  [INT (34)] =&gt; [STRING: &quot;j --&gt; {10}&quot;]\n  [INT (35)] =&gt; [STRING: &quot;k --&gt; {k}&quot;]\n  [INT (36)] =&gt; [STRING: &quot;l --&gt; {Saturday}&quot;]\n  [INT (37)] =&gt; [STRING: &quot;m --&gt; {03}&quot;]\n  [INT (38)] =&gt; [STRING: &quot;n --&gt; {3}&quot;]\n  [INT (39)] =&gt; [STRING: &quot;o --&gt; {2001}&quot;]\n  [INT (40)] =&gt; [STRING: &quot;p --&gt; {p}&quot;]\n  [INT (41)] =&gt; [STRING: &quot;q --&gt; {q}&quot;]\n  [INT (42)] =&gt; [STRING: &quot;r --&gt; {Sat, 10 Mar 2001 17:16:18 +0100}&quot;]\n  [INT (43)] =&gt; [STRING: &quot;s --&gt; {18}&quot;]\n  [INT (44)] =&gt; [STRING: &quot;t --&gt; {31}&quot;]\n  [INT (45)] =&gt; [STRING: &quot;u --&gt; {u}&quot;]\n  [INT (46)] =&gt; [STRING: &quot;v --&gt; {v}&quot;]\n  [INT (47)] =&gt; [STRING: &quot;w --&gt; {6}&quot;]\n  [INT (48)] =&gt; [STRING: &quot;x --&gt; {x}&quot;]\n  [INT (49)] =&gt; [STRING: &quot;y --&gt; {01}&quot;]\n  [INT (50)] =&gt; [STRING: &quot;z --&gt; {68}&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>120 GB\nDrive C: 216 GB\nDrive D: 120 GB\nDrive E: 241 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>120 GB\nDrive C: 216 GB\nDrive D: 120 GB\nDrive E: 241 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td><td><pre>&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file with one EOLN\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;\n&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.\n&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;&quot;]\n  [INT (1)] =&gt; [STRING: &quot;This is a file with two EOLNs. First line is empty.&quot;]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;this is a file WITHOUT an &quot;end-of-line&quot;&quot;]\n]&lt;/pre&gt;\nLine #&lt;b&gt;130&lt;/b&gt; : &amp;lt;/html&amp;gt;\n&lt;br /&gt;\n[this is a file with one EOLN{\\n}\n]</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10982&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10976&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10951&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;10946&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime test.txt (1264331352)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime test.txt (1264331352)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) ctime touch.txt (1264331352)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime touch.txt (1264331352)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) atime touch.txt (1264331352)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime summer.txt (1264331352)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [12:09:12] (12h) mtime winter.txt (1264331352)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime test.txt (1264334952)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime test.txt (1264334952)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) ctime touch.txt (1264334952)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime touch.txt (1264334952)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) atime touch.txt (1264334952)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime summer.txt (1264334952)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;January 24, 2010; [13:09:12] (13h) mtime winter.txt (1264334952)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n258\n258 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n    'true'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 4\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;^1&gt;.&lt;Global&gt;.&lt;?1&gt;.Lambda_1(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 1\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall(Action routine, Object data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 220,\nT_DOC_COMMENT = 221,\nT_OPEN_TAG = 226,\nT_OPEN_TAG_WITH_ECHO = 227,\nT_CLOSE_TAG = 228,\nT_WHITESPACE = 229,\nT_START_HEREDOC = 230,\nT_END_HEREDOC = 231,\nT_DOLLAR_OPEN_CURLY_BRACES = 232,\nT_CURLY_OPEN = 233,\nT_DOUBLE_COLON = 234,\nT_PAAMAYIM_NEKUDOTAYIM = 234,\nT_TRY = 236,\nT_CATCH = 237,\nT_THROW = 238,\nT_INTERFACE = 239,\nT_IMPLEMENTS = 240,\nT_ABSTRACT = 241,\nT_FINAL = 242,\nT_PRIVATE = 243,\nT_PROTECTED = 244,\nT_PUBLIC = 245,\nT_BOOL_CAST = 285,\nT_INT_CAST = 288,\nT_DOUBLE_CAST = 294,\nT_STRING_CAST = 297,\nT_ARRAY_CAST = 299,\nT_OBJECT_CAST = 300,\nT_UNSET_CAST = 301,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2)\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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\n\nWarning: 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\nfwrite = ()\n\nWarning: 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\nfputs = ()\n\nWarning: 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\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>array\n(\n  [0] =&gt; 1\n  [1] =&gt; \n  [2] =&gt; 1\n  [3] =&gt; 1.2\n  [4] =&gt; \n  [5] =&gt; asdas\n  [6] =&gt; array\n  (\n    [0] =&gt; 1\n  )\n  [7] =&gt; stdClass object\n  (\n  )\n  [8] =&gt; resource id #4\n)\narray(9)\n{\n  [0] =&gt; bool(true)\n  [1] =&gt; bool(false)\n  [2] =&gt; integer(1)\n  [3] =&gt; double(1.2)\n  [4] =&gt; NULL\n  [5] =&gt; string(5) &quot;asdas&quot;\n  [6] =&gt; array(1)\n  {\n    [0] =&gt; integer(1)\n  }\n  [7] =&gt; object(stdClass)(0)\n  {\n  }\n  [8] =&gt; resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/1285%20overrides.php\">WorkItems/1285%20overrides.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22016.php\">WorkItems/22016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/22019.php\">WorkItems/22019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26052.php\">WorkItems/26052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26667%20hash.php\">WorkItems/26667%20hash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26681.php\">WorkItems/26681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/26691.php\">WorkItems/26691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27377.php\">WorkItems/27377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27492.php\">WorkItems/27492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/27838%20json.php\">WorkItems/27838%20json.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/2787.php\">WorkItems/2787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"WorkItems/29026%20echo%20concat.php\">WorkItems/29026%20echo%20concat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Documents\\Visual Studio 2008\\Projects\\Phalanger\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/TestLogs/TestLog 2011-04-05.htm",
    "content": "<html>\r\n<head>\r\n<title>PHP.NET Compiler test log</title>\r\n<style type=\"text/css\">\r\nBODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\r\nTABLE { border-collapse:collapse }\r\nTD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\r\nTR.status TD.succeeded { background-color: #CFC }\r\nTR.status TD.failed { background-color: #FCC }\r\nTD.succeeded { background-color: #EFE }\r\nTD.failed { background-color: #FEE }\r\nA.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\r\nA.failed:link, A.failed:visited { color:red; text-decoration: none; }\r\nTR.detail{visibility:hidden;position:absolute;\r\n</style>\r\n</head>\r\n<body>\r\n<h1>PHP.NET Compiler test log</h1>\r\n(89%) 813 succeeded, 99 failed <br>\r\n<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tr>\r\n<td valign=\"top\"><b>Test Result</b></td><td valign=\"top\"><b>Compiler error output</b></td><td valign=\"top\"><b>Expected test result</b></td><td valign=\"top\"><b></b></td><td valign=\"top\"><b></b></td><tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_001.php\">@PHP/classes/array_access_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_002.php\">@PHP/classes/array_access_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_003.php\">@PHP/classes/array_access_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_004.php\">@PHP/classes/array_access_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_005.php\">@PHP/classes/array_access_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_006.php\">@PHP/classes/array_access_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_007.php\">@PHP/classes/array_access_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_008.php\">@PHP/classes/array_access_008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_009.php\">@PHP/classes/array_access_009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_010.php\">@PHP/classes/array_access_010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_011.php\">@PHP/classes/array_access_011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/array_access_013.php\">@PHP/classes/array_access_013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/assign_op_property_001.php\">@PHP/classes/assign_op_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_001.php\">@PHP/classes/autoload_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_002.php\">@PHP/classes/autoload_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_003.php\">@PHP/classes/autoload_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_005.php\">@PHP/classes/autoload_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/autoload_006.php\">@PHP/classes/autoload_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug23951.php\">@PHP/classes/bug23951.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24399.php\">@PHP/classes/bug24399.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug24445.php\">@PHP/classes/bug24445.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug26737.php\">@PHP/classes/bug26737.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27468.php\">@PHP/classes/bug27468.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/bug27504.php\">@PHP/classes/bug27504.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_example.php\">@PHP/classes/class_example.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/class_stdclass.php\">@PHP/classes/class_stdclass.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_001.php\">@PHP/classes/clone_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_002.php\">@PHP/classes/clone_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_003.php\">@PHP/classes/clone_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_004.php\">@PHP/classes/clone_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/clone_006.php\">@PHP/classes/clone_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/constants_scope_001.php\">@PHP/classes/constants_scope_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor.php\">@PHP/classes/ctor_dtor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_dtor_inheritance.php\">@PHP/classes/ctor_dtor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/ctor_name_clash.php\">@PHP/classes/ctor_name_clash.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/dereferencing_001.php\">@PHP/classes/dereferencing_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_echo.php\">@PHP/classes/destructor_and_echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_and_references.php\">@PHP/classes/destructor_and_references.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_inheritance.php\">@PHP/classes/destructor_inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/destructor_visibility_003.php\">@PHP/classes/destructor_visibility_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_001.php\">@PHP/classes/factory_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_001.php\">@PHP/classes/factory_and_singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/factory_and_singleton_002.php\">@PHP/classes/factory_and_singleton_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/final.php\">@PHP/classes/final.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_001.php\">@PHP/classes/incdec_property_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_002.php\">@PHP/classes/incdec_property_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_003.php\">@PHP/classes/incdec_property_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/incdec_property_004.php\">@PHP/classes/incdec_property_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance.php\">@PHP/classes/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/inheritance_002.php\">@PHP/classes/inheritance_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interfaces_001.php\">@PHP/classes/interfaces_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_construct.php\">@PHP/classes/interface_construct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_doubled.php\">@PHP/classes/interface_doubled.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/interface_implemented.php\">@PHP/classes/interface_implemented.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_001.php\">@PHP/classes/iterators_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_002.php\">@PHP/classes/iterators_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_003.php\">@PHP/classes/iterators_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_004.php\">@PHP/classes/iterators_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_006.php\">@PHP/classes/iterators_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/iterators_007.php\">@PHP/classes/iterators_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/object_reference_001.php\">@PHP/classes/object_reference_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_001.php\">@PHP/classes/private_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_002.php\">@PHP/classes/private_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003.php\">@PHP/classes/private_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_003b.php\">@PHP/classes/private_003b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004.php\">@PHP/classes/private_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_004b.php\">@PHP/classes/private_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005.php\">@PHP/classes/private_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_005b.php\">@PHP/classes/private_005b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006.php\">@PHP/classes/private_006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_006b.php\">@PHP/classes/private_006b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007.php\">@PHP/classes/private_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_007b.php\">@PHP/classes/private_007b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_members.php\">@PHP/classes/private_members.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/private_redeclare.php\">@PHP/classes/private_redeclare.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001.php\">@PHP/classes/protected_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_001b.php\">@PHP/classes/protected_001b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/protected_002.php\">@PHP/classes/protected_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/serialize_001.php\">@PHP/classes/serialize_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/singleton_001.php\">@PHP/classes/singleton_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/static_properties_001.php\">@PHP/classes/static_properties_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_001.php\">@PHP/classes/type_hinting_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/type_hinting_003.php\">@PHP/classes/type_hinting_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_000c.php\">@PHP/classes/visibility_000c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_001c.php\">@PHP/classes/visibility_001c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_002c.php\">@PHP/classes/visibility_002c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003a.php\">@PHP/classes/visibility_003a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_003c.php\">@PHP/classes/visibility_003c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004a.php\">@PHP/classes/visibility_004a.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004b.php\">@PHP/classes/visibility_004b.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_004c.php\">@PHP/classes/visibility_004c.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/visibility_005.php\">@PHP/classes/visibility_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__call_001.php\">@PHP/classes/__call_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set_data_corrupt.php\">@PHP/classes/__set_data_corrupt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_001.php\">@PHP/classes/__set__get_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_004.php\">@PHP/classes/__set__get_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/classes/__set__get_005.php\">@PHP/classes/__set__get_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug17988.php\">@PHP/date/bug17988.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2002-06-25 12:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td><td><pre>2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 13:18:48\n2002-06-25 12:18:48\n2002-06-25 18:18:48\n2002-06-25 14:18:48\n2002-06-25 14:18:48\n2002-06-25 18:18:48\n2002-06-25 10:18:48\n2002-06-25 17:18:48\n2002-06-25 11:18:48\n2002-06-25 17:48:48\n2002-06-25 10:48:48</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26317.php\">@PHP/date/bug26317.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 17:20:42\n2003-11-19 17:20:42\n2003-11-19 17:20:42</pre></td><td><pre>2003-11-19 16:20:42\n2003-11-19 16:20:42\n2003-11-19 16:20:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug26320.php\">@PHP/date/bug26320.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2003-11-19 12:30:42\n2003-11-19 13:30:42</pre></td><td><pre>2003-11-19 12:30:42\n2003-11-19 12:30:42</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug28088.php\">@PHP/date/bug28088.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>The following line rightly shows the correct date time:\n04/04/04 2145\nBut the following line fails to show the correct date time:\n04/03/04 2245</pre></td><td><pre>The following line rightly shows the correct date time:\n04/04/04 2345\nBut the following line fails to show the correct date time:\n04/04/04 0045</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug28599.php\">@PHP/date/bug28599.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug29150.php\">@PHP/date/bug29150.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>2005-06-19 22:00:00</pre></td><td><pre>2005-06-20 00:00:00</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29585.php\">@PHP/date/bug29585.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug29595.php\">@PHP/date/bug29595.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33056.php\">@PHP/date/bug33056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33452.php\">@PHP/date/bug33452.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33562.php\">@PHP/date/bug33562.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33563.php\">@PHP/date/bug33563.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33578.php\">@PHP/date/bug33578.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug33869.php\">@PHP/date/bug33869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34676.php\">@PHP/date/bug34676.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug34771.php\">@PHP/date/bug34771.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35143.php\">@PHP/date/bug35143.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35414.php\">@PHP/date/bug35414.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35422.php\">@PHP/date/bug35422.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/bug35425.php\">@PHP/date/bug35425.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>integer(42)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104537661)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(3600)</pre></td><td><pre>integer(292)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(1)\ninteger(0)\ninteger(0)\ninteger(1)\ninteger(1)\ninteger(31)\ninteger(1104559261)\ninteger(6)\ninteger(53)\ninteger(5)\ninteger(2005)\ninteger(0)\ninteger(-18000)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35456.php\">@PHP/date/bug35456.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35624.php\">@PHP/date/bug35624.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35630.php\">@PHP/date/bug35630.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35699.php\">@PHP/date/bug35699.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35705.php\">@PHP/date/bug35705.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35885.php\">@PHP/date/bug35885.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/bug35887.php\">@PHP/date/bug35887.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date.php\">@PHP/date/date.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>c: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td><td><pre>c: 2003-01-23T12:20:59+00:00\nr: Thu, 23 Jan 2003 12:20:59 +0000\nc: 2003-01-23T13:20:59+01:00\nr: Thu, 23 Jan 2003 13:20:59 +0100</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-1.php\">@PHP/date/date_create-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 28</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_create-2.php\">@PHP/date/date_create-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_default_timezone_get-3.php\">@PHP/date/date_default_timezone_get-3.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Europe/Prague\nAmerica/Chicago</pre></td><td><pre>Europe/Rome\nAmerica/Chicago</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-1.php\">@PHP/date/date_modify-1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/date_modify-2.php\">@PHP/date/date_modify-2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Class 'date' not found in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\@PHP\\date\\__input.txt on line 6</pre></td><td><pre>SKIP</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-1.php\">@PHP/date/default-timezone-1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/default-timezone-2.php\">@PHP/date/default-timezone-2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/format-negative-timestamp.php\">@PHP/date/format-negative-timestamp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/date/strtotime.php\">@PHP/date/strtotime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/date/timezone-configuration.php\">@PHP/date/timezone-configuration.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>1119125744\n1119125744\n1119125744</pre></td><td><pre>1119125744\n1119129344\n1119125744</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test001.php\">@PHP/doc_examples/test001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test002.php\">@PHP/doc_examples/test002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test003.php\">@PHP/doc_examples/test003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test004.php\">@PHP/doc_examples/test004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test005.php\">@PHP/doc_examples/test005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test006.php\">@PHP/doc_examples/test006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test007.php\">@PHP/doc_examples/test007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test008.php\">@PHP/doc_examples/test008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test009.php\">@PHP/doc_examples/test009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test010.php\">@PHP/doc_examples/test010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test011.php\">@PHP/doc_examples/test011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test013.php\">@PHP/doc_examples/test013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test014.php\">@PHP/doc_examples/test014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test015.php\">@PHP/doc_examples/test015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test016.php\">@PHP/doc_examples/test016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test017.php\">@PHP/doc_examples/test017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test018.php\">@PHP/doc_examples/test018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test019.php\">@PHP/doc_examples/test019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test020.php\">@PHP/doc_examples/test020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test021.php\">@PHP/doc_examples/test021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test022.php\">@PHP/doc_examples/test022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test023.php\">@PHP/doc_examples/test023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test024.php\">@PHP/doc_examples/test024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test025.php\">@PHP/doc_examples/test025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test026.php\">@PHP/doc_examples/test026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test027.php\">@PHP/doc_examples/test027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test028.php\">@PHP/doc_examples/test028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test029.php\">@PHP/doc_examples/test029.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&#180;┐Żauky</pre></td><td><pre>ďż˝auky</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test030.php\">@PHP/doc_examples/test030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test031.php\">@PHP/doc_examples/test031.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test032.php\">@PHP/doc_examples/test032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test033.php\">@PHP/doc_examples/test033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test034.php\">@PHP/doc_examples/test034.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test035.php\">@PHP/doc_examples/test035.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test036.php\">@PHP/doc_examples/test036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test037.php\">@PHP/doc_examples/test037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test038.php\">@PHP/doc_examples/test038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test039.php\">@PHP/doc_examples/test039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test040.php\">@PHP/doc_examples/test040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test041.php\">@PHP/doc_examples/test041.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>call_user_func():</pre></td><td><pre>hello world!\nStrict 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.\nHello World!Hello World!</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test042.php\">@PHP/doc_examples/test042.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test043.php\">@PHP/doc_examples/test043.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test044.php\">@PHP/doc_examples/test044.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test045.php\">@PHP/doc_examples/test045.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test046.php\">@PHP/doc_examples/test046.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test047.php\">@PHP/doc_examples/test047.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test048.php\">@PHP/doc_examples/test048.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test049.php\">@PHP/doc_examples/test049.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test050.php\">@PHP/doc_examples/test050.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test051.php\">@PHP/doc_examples/test051.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test052.php\">@PHP/doc_examples/test052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test053.php\">@PHP/doc_examples/test053.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test054.php\">@PHP/doc_examples/test054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test055.php\">@PHP/doc_examples/test055.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test056.php\">@PHP/doc_examples/test056.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test057.php\">@PHP/doc_examples/test057.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test058.php\">@PHP/doc_examples/test058.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test059.php\">@PHP/doc_examples/test059.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nNULL\nobject(stdClass)#1 (0) {\n}</pre></td><td><pre>NULL\nobject(stdClass)(0) {\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/doc_examples/test060.php\">@PHP/doc_examples/test060.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nStatic object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)#3 (1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td><td><pre>Static object: NULL\nStatic object: NULL\n\nStatic object: NULL\nStatic object: object(stdClass)(1) {\n  [&quot;property&quot;]=&gt;\n  int(1)\n}</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test061.php\">@PHP/doc_examples/test061.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test062.php\">@PHP/doc_examples/test062.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test063.php\">@PHP/doc_examples/test063.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test064.php\">@PHP/doc_examples/test064.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test065.php\">@PHP/doc_examples/test065.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test066.php\">@PHP/doc_examples/test066.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test067.php\">@PHP/doc_examples/test067.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test068.php\">@PHP/doc_examples/test068.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test069.php\">@PHP/doc_examples/test069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test070.php\">@PHP/doc_examples/test070.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test071.php\">@PHP/doc_examples/test071.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test072.php\">@PHP/doc_examples/test072.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test073.php\">@PHP/doc_examples/test073.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test074.php\">@PHP/doc_examples/test074.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test075.php\">@PHP/doc_examples/test075.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test076.php\">@PHP/doc_examples/test076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test077.php\">@PHP/doc_examples/test077.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test078.php\">@PHP/doc_examples/test078.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test079.php\">@PHP/doc_examples/test079.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test080.php\">@PHP/doc_examples/test080.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test081.php\">@PHP/doc_examples/test081.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test082.php\">@PHP/doc_examples/test082.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test083.php\">@PHP/doc_examples/test083.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test084.php\">@PHP/doc_examples/test084.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test085.php\">@PHP/doc_examples/test085.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test086.php\">@PHP/doc_examples/test086.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test087.php\">@PHP/doc_examples/test087.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test088.php\">@PHP/doc_examples/test088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test089.php\">@PHP/doc_examples/test089.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test090.php\">@PHP/doc_examples/test090.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test091.php\">@PHP/doc_examples/test091.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test092.php\">@PHP/doc_examples/test092.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test093.php\">@PHP/doc_examples/test093.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test094.php\">@PHP/doc_examples/test094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test095.php\">@PHP/doc_examples/test095.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test096.php\">@PHP/doc_examples/test096.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test097.php\">@PHP/doc_examples/test097.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test098.php\">@PHP/doc_examples/test098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test099.php\">@PHP/doc_examples/test099.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test100.php\">@PHP/doc_examples/test100.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test102.php\">@PHP/doc_examples/test102.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test103.php\">@PHP/doc_examples/test103.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test104.php\">@PHP/doc_examples/test104.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test105.php\">@PHP/doc_examples/test105.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test107.php\">@PHP/doc_examples/test107.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test108.php\">@PHP/doc_examples/test108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test109.php\">@PHP/doc_examples/test109.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test110.php\">@PHP/doc_examples/test110.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test111.php\">@PHP/doc_examples/test111.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test112.php\">@PHP/doc_examples/test112.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test113.php\">@PHP/doc_examples/test113.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test114.php\">@PHP/doc_examples/test114.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test115.php\">@PHP/doc_examples/test115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test116.php\">@PHP/doc_examples/test116.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test117.php\">@PHP/doc_examples/test117.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test118.php\">@PHP/doc_examples/test118.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test119.php\">@PHP/doc_examples/test119.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test120.php\">@PHP/doc_examples/test120.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test121.php\">@PHP/doc_examples/test121.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test122.php\">@PHP/doc_examples/test122.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test123.php\">@PHP/doc_examples/test123.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test124.php\">@PHP/doc_examples/test124.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test125.php\">@PHP/doc_examples/test125.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test126.php\">@PHP/doc_examples/test126.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test127.php\">@PHP/doc_examples/test127.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test128.php\">@PHP/doc_examples/test128.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test129.php\">@PHP/doc_examples/test129.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test130.php\">@PHP/doc_examples/test130.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test131.php\">@PHP/doc_examples/test131.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test132.php\">@PHP/doc_examples/test132.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test133.php\">@PHP/doc_examples/test133.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test134.php\">@PHP/doc_examples/test134.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test136.php\">@PHP/doc_examples/test136.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test137.php\">@PHP/doc_examples/test137.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test138.php\">@PHP/doc_examples/test138.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test139.php\">@PHP/doc_examples/test139.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test148.php\">@PHP/doc_examples/test148.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test149.php\">@PHP/doc_examples/test149.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test150.php\">@PHP/doc_examples/test150.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test151.php\">@PHP/doc_examples/test151.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test152.php\">@PHP/doc_examples/test152.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test153.php\">@PHP/doc_examples/test153.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test154.php\">@PHP/doc_examples/test154.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test155.php\">@PHP/doc_examples/test155.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test156.php\">@PHP/doc_examples/test156.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/doc_examples/test158.php\">@PHP/doc_examples/test158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/001.php\">@PHP/lang/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/002.php\">@PHP/lang/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/003.php\">@PHP/lang/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/004.php\">@PHP/lang/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/005.php\">@PHP/lang/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/006.php\">@PHP/lang/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/007.php\">@PHP/lang/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/008.php\">@PHP/lang/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/009.php\">@PHP/lang/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/010.php\">@PHP/lang/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/011.php\">@PHP/lang/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/012.php\">@PHP/lang/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/013.php\">@PHP/lang/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/014.php\">@PHP/lang/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/015.php\">@PHP/lang/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/016.php\">@PHP/lang/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/017.php\">@PHP/lang/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/018.php\">@PHP/lang/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/019.php\">@PHP/lang/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/020.php\">@PHP/lang/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/021.php\">@PHP/lang/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/022.php\">@PHP/lang/022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/023.php\">@PHP/lang/023.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/024.php\">@PHP/lang/024.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/025.php\">@PHP/lang/025.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/026.php\">@PHP/lang/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/027.php\">@PHP/lang/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/028.php\">@PHP/lang/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/030.php\">@PHP/lang/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/032.php\">@PHP/lang/032.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/036.php\">@PHP/lang/036.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/037.php\">@PHP/lang/037.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/038.php\">@PHP/lang/038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/039.php\">@PHP/lang/039.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/040.php\">@PHP/lang/040.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bison1.php\">@PHP/lang/bison1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug17115.php\">@PHP/lang/bug17115.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug18872.php\">@PHP/lang/bug18872.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug19943.php\">@PHP/lang/bug19943.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug20175.php\">@PHP/lang/bug20175.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nfoo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar:1\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td><td><pre>foo_static()\nfoo_global()\nfoo:1\nfoo_static()\nfoo:1\nbar_static()\nbar_global()\nbar:1\nbar_static()\nbar_global()\nbar:2\nwow_static()\nwow_global()\nwow:1\nwow_static()\nwow:1\noop_test()\noop_static()\noop_class()\noop:1\noop_static()\noop:1\noop_test()\noop_static()\noop:1</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>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\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21094.php\">@PHP/lang/bug21094.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21600.php\">@PHP/lang/bug21600.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21669.php\">@PHP/lang/bug21669.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21849.php\">@PHP/lang/bug21849.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug21961.php\">@PHP/lang/bug21961.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22231.php\">@PHP/lang/bug22231.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22367.php\">@PHP/lang/bug22367.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22510.php\">@PHP/lang/bug22510.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22592.php\">@PHP/lang/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug22690.php\">@PHP/lang/bug22690.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23279.php\">@PHP/lang/bug23279.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23384.php\">@PHP/lang/bug23384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23489.php\">@PHP/lang/bug23489.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23524.php\">@PHP/lang/bug23524.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug23922.php\">@PHP/lang/bug23922.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24054.php\">@PHP/lang/bug24054.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24396.php\">@PHP/lang/bug24396.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24403.php\">@PHP/lang/bug24403.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24436.php\">@PHP/lang/bug24436.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24499.php\">@PHP/lang/bug24499.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug24640.php\">@PHP/lang/bug24640.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(1700000000000000089258092433847514422797596587883870563356951996370064178581143932836831337636761368874297554515902592900802289500112731978596146714137401870842258241575178866354311397451139753100927220499450359906637902366244989496126909662726242240784739940994096632824796638102733857671280980918272.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.7E-300\n\n------\ndouble(17000000000000001584208052028780237480128823455860622330108867175329927830437888.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.7E-79\n\n------\ndouble(169999999999999996096025832433329868941658043870400163508258284150340918121070592.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.7E-80\n\n------\ndouble(1700000000000000013616404158611892038375594280539217794530130541777964808366194688.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.7E-81\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6999810742106E-319\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.7000798873397E-320\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n1.6995858216939E-321\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(INF\u0000-INF\u0000\u0000)\nINF\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td><td><pre>double(1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+300\n\n------\ndouble(0.0000000000)\n1.70000000000003E-300\n\n------\ndouble(17000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+79\n\n------\ndouble(0.0000000000)\n1.70000000000001E-79\n\n------\ndouble(170000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+80\n\n------\ndouble(0.0000000000)\n1.70000000000001E-80\n\n------\ndouble(1700000000000000000000000000000000000000000000000000000000000000000000000000000000.0000000000)\n1.7E+81\n\n------\ndouble(0.0000000000)\n1.70000000000001E-81\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69998107421056E-319\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.70007988733973E-320\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n1.69464516523548E-321\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------\ndouble(Infinity)\nInfinity\n\n------\ndouble(0.0000000000)\n0\n\n------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24652.php\">@PHP/lang/bug24652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24658.php\">@PHP/lang/bug24658.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24783.php\">@PHP/lang/bug24783.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug24926.php\">@PHP/lang/bug24926.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25547.php\">@PHP/lang/bug25547.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug25652.php\">@PHP/lang/bug25652.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/lang/bug25922.php\">@PHP/lang/bug25922.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Undefined index here: 'error'</pre></td><td><pre>Undefined index here: ''</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26182.php\">@PHP/lang/bug26182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26696.php\">@PHP/lang/bug26696.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26866.php\">@PHP/lang/bug26866.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug26869.php\">@PHP/lang/bug26869.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27354.php\">@PHP/lang/bug27354.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27439.php\">@PHP/lang/bug27439.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug27535.php\">@PHP/lang/bug27535.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28213.php\">@PHP/lang/bug28213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug28800.php\">@PHP/lang/bug28800.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29566.php\">@PHP/lang/bug29566.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29893.php\">@PHP/lang/bug29893.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug29944.php\">@PHP/lang/bug29944.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30638.php\">@PHP/lang/bug30638.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30726.php\">@PHP/lang/bug30726.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug30862.php\">@PHP/lang/bug30862.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug32924.php\">@PHP/lang/bug32924.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug35382.php\">@PHP/lang/bug35382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/bug7515.php\">@PHP/lang/bug7515.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/each_binary_safety.php\">@PHP/lang/each_binary_safety.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/error_2_exception_001.php\">@PHP/lang/error_2_exception_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_object_001.php\">@PHP/lang/foreach_with_object_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/foreach_with_references_001.php\">@PHP/lang/foreach_with_references_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/lang/type_hints_001.php\">@PHP/lang/type_hints_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/001.php\">@PHP/standard/array/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/003.php\">@PHP/standard/array/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/004.php\">@PHP/standard/array/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/005.php\">@PHP/standard/array/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/008.php\">@PHP/standard/array/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_change_key_case.php\">@PHP/standard/array/array_change_key_case.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_chunk.php\">@PHP/standard/array/array_chunk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_count_values.php\">@PHP/standard/array/array_count_values.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_diff_1.php\">@PHP/standard/array/array_diff_1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/array_diff_key.php\">@PHP/standard/array/array_diff_key.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [2]=&gt;\n  int(4)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(4) {\n  [1]=&gt;\n  int(2)\n  [6]=&gt;\n  int(12)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\narray(3) {\n  [1]=&gt;\n  int(2)\n  [15]=&gt;\n  int(30)\n  [1200]=&gt;\n  int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  int(0)\n  [7]=&gt;\n  int(14)\n  [2]=&gt;\n  int(4)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}\narray(3) {\n  [7]=&gt;\n  int(14)\n  [11]=&gt;\n  int(22)\n  [1100]=&gt;\n  int(2200)\n}</pre></td><td><pre>------ Test 1 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 2 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 3 --------\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [2]=&gt;\n  &amp;int(4)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 4 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 5 --------\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(4) {\n  [1]=&gt;\n  &amp;int(2)\n  [6]=&gt;\n  &amp;int(12)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 6 --------\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\narray(3) {\n  [1]=&gt;\n  &amp;int(2)\n  [15]=&gt;\n  &amp;int(30)\n  [1200]=&gt;\n  &amp;int(2400)\n}\n------ Test 7 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\n------ Test 8 --------\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\narray(6) {\n  [0]=&gt;\n  &amp;int(0)\n  [7]=&gt;\n  &amp;int(14)\n  [2]=&gt;\n  &amp;int(4)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n  [-2500]=&gt;\n  &amp;int(-5000)\n}\n------ Test 9 --------\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}\narray(3) {\n  [7]=&gt;\n  &amp;int(14)\n  [11]=&gt;\n  &amp;int(22)\n  [1100]=&gt;\n  &amp;int(2200)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_intersect_key.php\">@PHP/standard/array/array_intersect_key.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_sum.php\">@PHP/standard/array/array_sum.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/array_walk_recursive.php\">@PHP/standard/array/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug12776.php\">@PHP/standard/array/bug12776.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug14580.php\">@PHP/standard/array/bug14580.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20381.php\">@PHP/standard/array/bug20381.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug20865.php\">@PHP/standard/array/bug20865.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21182.php\">@PHP/standard/array/bug21182.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21918.php\">@PHP/standard/array/bug21918.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug21998.php\">@PHP/standard/array/bug21998.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22088.php\">@PHP/standard/array/bug22088.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug22463.php\">@PHP/standard/array/bug22463.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23581.php\">@PHP/standard/array/bug23581.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug23788.php\">@PHP/standard/array/bug23788.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24198.php\">@PHP/standard/array/bug24198.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24220.php\">@PHP/standard/array/bug24220.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24766.php\">@PHP/standard/array/bug24766.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24897.php\">@PHP/standard/array/bug24897.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug24980.php\">@PHP/standard/array/bug24980.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25359.php\">@PHP/standard/array/bug25359.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25708.php\">@PHP/standard/array/bug25708.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug25758.php\">@PHP/standard/array/bug25758.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug26458.php\">@PHP/standard/array/bug26458.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/array/bug28974.php\">@PHP/standard/array/bug28974.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n  [2] =&gt; 2\n  [3] =&gt; 3\n  [4] =&gt; 4\n  [5] =&gt; 5\n)\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\nprint_r(array_splice($a,2,1));\narray\n(\n  [0] =&gt; 2\n)\n$a is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n  [2] =&gt; 3\n  [3] =&gt; 4\n  [4] =&gt; 5\n)\nprint_r(array_splice($b,2,2147483645));\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\n$b is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n)\nprint_r(array_splice($c,2,2147483646));\narray\n(\n  [0] =&gt; 2\n  [1] =&gt; 3\n  [2] =&gt; 4\n  [3] =&gt; 5\n)\n$c is :array\n(\n  [0] =&gt; 0\n  [1] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n    [4] =&gt; 4\n    [5] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\nprint_r(array_splice($a,2,1));\nArray\n(\n    [0] =&gt; 2\n)\n$a is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n    [2] =&gt; 3\n    [3] =&gt; 4\n    [4] =&gt; 5\n)\nprint_r(array_splice($b,2,2147483645));\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\n$b is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n)\nprint_r(array_splice($c,2,2147483646));\nArray\n(\n    [0] =&gt; 2\n    [1] =&gt; 3\n    [2] =&gt; 4\n    [3] =&gt; 5\n)\n$c is :Array\n(\n    [0] =&gt; 0\n    [1] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug29493.php\">@PHP/standard/array/bug29493.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30266.php\">@PHP/standard/array/bug30266.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug30833.php\">@PHP/standard/array/bug30833.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31158.php\">@PHP/standard/array/bug31158.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug31213.php\">@PHP/standard/array/bug31213.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug32021.php\">@PHP/standard/array/bug32021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33382.php\">@PHP/standard/array/bug33382.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug33989.php\">@PHP/standard/array/bug33989.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34227.php\">@PHP/standard/array/bug34227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug34982.php\">@PHP/standard/array/bug34982.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35014.php\">@PHP/standard/array/bug35014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35022.php\">@PHP/standard/array/bug35022.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/bug35821.php\">@PHP/standard/array/bug35821.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/count_recursive.php\">@PHP/standard/array/count_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/locale_sort.php\">@PHP/standard/array/locale_sort.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/array/range.php\">@PHP/standard/array/range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/assert/assert.php\">@PHP/standard/assert/assert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/001.php\">@PHP/standard/general_functions/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/002.php\">@PHP/standard/general_functions/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/003.php\">@PHP/standard/general_functions/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/004.php\">@PHP/standard/general_functions/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/005.php\">@PHP/standard/general_functions/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/006.php\">@PHP/standard/general_functions/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/007.php\">@PHP/standard/general_functions/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/009.php\">@PHP/standard/general_functions/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug25038.php\">@PHP/standard/general_functions/bug25038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug27678.php\">@PHP/standard/general_functions/bug27678.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug29038.php\">@PHP/standard/general_functions/bug29038.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug31190.php\">@PHP/standard/general_functions/bug31190.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug32647.php\">@PHP/standard/general_functions/bug32647.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/bug35229.php\">@PHP/standard/general_functions/bug35229.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/general_functions/is_resource.php\">@PHP/standard/general_functions/is_resource.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/abs.php\">@PHP/standard/math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug24142.php\">@PHP/standard/math/bug24142.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug25694.php\">@PHP/standard/math/bug25694.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/math/bug27646.php\">@PHP/standard/math/bug27646.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(INF\u0000-INF\u0000\u0000)\n'd:-INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(INF\u0000-INF\u0000\u0000)\n'd:INF;'\ndouble(INF\u0000-INF\u0000\u0000)\ndouble(NaN\u0000Infini)\n'd:NAN;'\ndouble(NaN\u0000Infini)</pre></td><td><pre>double(-Infinity)\n'd:-INF;'\ndouble(-Infinity)\ndouble(Infinity)\n'd:INF;'\ndouble(Infinity)\ndouble(NaN)\n'd:NAN;'\ndouble(NaN)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30069.php\">@PHP/standard/math/bug30069.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/bug30695.php\">@PHP/standard/math/bug30695.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/floorceil.php\">@PHP/standard/math/floorceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/hexdec.php\">@PHP/standard/math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/log.php\">@PHP/standard/math/log.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/pow.php\">@PHP/standard/math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/math/round.php\">@PHP/standard/math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/001.php\">@PHP/standard/reg/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/002.php\">@PHP/standard/reg/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/003.php\">@PHP/standard/reg/003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/004.php\">@PHP/standard/reg/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/005.php\">@PHP/standard/reg/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/006.php\">@PHP/standard/reg/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/007.php\">@PHP/standard/reg/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/008.php\">@PHP/standard/reg/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/009.php\">@PHP/standard/reg/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/010.php\">@PHP/standard/reg/010.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/011.php\">@PHP/standard/reg/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/012.php\">@PHP/standard/reg/012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/013.php\">@PHP/standard/reg/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/014.php\">@PHP/standard/reg/014.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/015.php\">@PHP/standard/reg/015.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/reg/016.php\">@PHP/standard/reg/016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/001.php\">@PHP/standard/serialize/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/002.php\">@PHP/standard/serialize/002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/003.php\">@PHP/standard/serialize/003.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>d:100;\ndouble(100.0000000000)\n\nd:51999999999999996980101120;\ndouble(51999999999999996980101120.0000000000)\n\nd:8.9999999999999995265585574287341141808127531476202420890331268310546875E-9;\ndouble(0.0000000090)</pre></td><td><pre>d:100;\ndouble(100.0000000000)\n\nd:5.2000000000000006E+25;\ndouble(52000000000000000000000000.0000000000)\n\nd:9.0000000000000045E-09;\ndouble(0.0000000090)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/004.php\">@PHP/standard/serialize/004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/005.php\">@PHP/standard/serialize/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/006.php\">@PHP/standard/serialize/006.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  '&#180;┐Ż' =&gt; '&#180;┐Ż'\n}</pre></td><td><pre>'O:3:&quot;&#180;┐Ż&quot;:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\nobject\n{\n  'ďż˝' =&gt; 'ďż˝'\n}\n'a:1:{s:3:&quot;&#180;┐Ż&quot;;s:3:&quot;&#180;┐Ż&quot;;}'\narray\n{\n  'ďż˝' =&gt; 'ďż˝'\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug14293.php\">@PHP/standard/serialize/bug14293.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug21957.php\">@PHP/standard/serialize/bug21957.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug23298.php\">@PHP/standard/serialize/bug23298.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug24063.php\">@PHP/standard/serialize/bug24063.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1.0E-5 1.0E-5\n1.0E-6 1.0E-6\n1.0E-7 1.0E-7\n1.0E-8 1.0E-8\n1.0E-9 1.0E-9</pre></td><td><pre>0.1 0.1\n0.01 0.01\n0.001 0.001\n0.0001 0.0001\n1E-05 1E-05\n1E-06 1E-06\n1E-07 1E-07\n1E-08 1E-08\n1E-09 1E-09</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug25378.php\">@PHP/standard/serialize/bug25378.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug26762.php\">@PHP/standard/serialize/bug26762.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug27469.php\">@PHP/standard/serialize/bug27469.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug28325.php\">@PHP/standard/serialize/bug28325.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/serialize/bug30234.php\">@PHP/standard/serialize/bug30234.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nFALSE</pre></td><td><pre>FALSE\nTRUE\n__autoload(Autoload_Implements)\nobject [invalid]\nFALSE\nFALSE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31402.php\">@PHP/standard/serialize/bug31402.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/serialize/bug31442.php\">@PHP/standard/serialize/bug31442.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/add-and-stripcslashes.php\">@PHP/standard/strings/add-and-stripcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>kaboemkara!\nfoo\\b\\a\\r\\b\\az\n\\f\\o\\o\\[ \\]\n\\zoo['\\.']\n\\abcd\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\pqrstuvwxy\\z\n1\n5d</pre></td><td><pre>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.\n\nkaboemkara!\n\nWarning: 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.\n\n\nWarning: 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.\n\n\n\nWarning: 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.\n\n1\n5d</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/add-and-stripslashes.php\">@PHP/standard/strings/add-and-stripslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/basename.php\">@PHP/standard/strings/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bin2hex.php\">@PHP/standard/strings/bin2hex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20108.php\">@PHP/standard/strings/bug20108.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20169.php\">@PHP/standard/strings/bug20169.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20261.php\">@PHP/standard/strings/bug20261.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug20927.php\">@PHP/standard/strings/bug20927.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21338.php\">@PHP/standard/strings/bug21338.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21453.php\">@PHP/standard/strings/bug21453.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21730.php\">@PHP/standard/strings/bug21730.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug21744.php\">@PHP/standard/strings/bug21744.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22008.php\">@PHP/standard/strings/bug22008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22187.php\">@PHP/standard/strings/bug22187.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/bug22224.php\">@PHP/standard/strings/bug22224.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>array\n{\n  0 =&gt; \n  object\n  {\n  }\n  1 =&gt; \n  object\n  {\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22227.php\">@PHP/standard/strings/bug22227.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug22904.php\">@PHP/standard/strings/bug22904.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23650.php\">@PHP/standard/strings/bug23650.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug23894.php\">@PHP/standard/strings/bug23894.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24098.php\">@PHP/standard/strings/bug24098.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24208.php\">@PHP/standard/strings/bug24208.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug24281.php\">@PHP/standard/strings/bug24281.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25671.php\">@PHP/standard/strings/bug25671.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug25707.php\">@PHP/standard/strings/bug25707.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26878.php\">@PHP/standard/strings/bug26878.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug26973.php\">@PHP/standard/strings/bug26973.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27276.php\">@PHP/standard/strings/bug27276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27278.php\">@PHP/standard/strings/bug27278.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27295.php\">@PHP/standard/strings/bug27295.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27457.php\">@PHP/standard/strings/bug27457.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug27675.php\">@PHP/standard/strings/bug27675.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug28386.php\">@PHP/standard/strings/bug28386.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/bug33076.php\">@PHP/standard/strings/bug33076.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chr_ord.php\">@PHP/standard/strings/chr_ord.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/chunk_split.php\">@PHP/standard/strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/count_chars.php\">@PHP/standard/strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/crc32.php\">@PHP/standard/strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/explode.php\">@PHP/standard/strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/implode.php\">@PHP/standard/strings/implode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5.php\">@PHP/standard/strings/md5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/md5raw.php\">@PHP/standard/strings/md5raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/nl2br.php\">@PHP/standard/strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1.php\">@PHP/standard/strings/sha1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sha1raw.php\">@PHP/standard/strings/sha1raw.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/sprintf_f.php\">@PHP/standard/strings/sprintf_f.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strcspn.php\">@PHP/standard/strings/strcspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strings001.php\">@PHP/standard/strings/strings001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strpos.php\">@PHP/standard/strings/strpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrev.php\">@PHP/standard/strings/strrev.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strripos.php\">@PHP/standard/strings/strripos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strrpos.php\">@PHP/standard/strings/strrpos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strspn.php\">@PHP/standard/strings/strspn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strstr.php\">@PHP/standard/strings/strstr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/strings/strtoupper.php\">@PHP/standard/strings/strtoupper.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>cfbfbdcfbfbdcfbfbd</pre></td><td><pre>cfafbdcfafbdcfafbd</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strtr.php\">@PHP/standard/strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/strval.php\">@PHP/standard/strings/strval.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_repeat.php\">@PHP/standard/strings/str_repeat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_shuffle.php\">@PHP/standard/strings/str_shuffle.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/str_word_count.php\">@PHP/standard/strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_count.php\">@PHP/standard/strings/substr_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/substr_replace.php\">@PHP/standard/strings/substr_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/strings/wordwrap.php\">@PHP/standard/strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/standard/time/001.php\">@PHP/standard/time/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/standard/time/idate.php\">@PHP/standard/time/idate.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 13\nG: 13\nh: 1\ng: 1\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td><td><pre>U: 1043324459\nY: 2003\nz: 22\ny: 3\nm: 1\nn: 1\nd: 23\nj: 23\nH: 12\nG: 12\nh: 12\ng: 12\ni: 20\ns: 59\nt: 31\nw: 4\nL: 0\nB: 556\nI: 0\nW: 4</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/001.php\">@PHP/strings/001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"@PHP/strings/002.php\">@PHP/strings/002.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    h&#180;┐Żyesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td><td><pre>fprintf test 1:abcde\n20\nprintf test 1:simple string\nprintf test 2:42\nprintf test 3:3.333333\nprintf test 4:3.3333333333\nprintf test 5:2.50      \nprintf test 6:2.50000000\nprintf test 7:0000002.50\nprintf test 8:&lt;                 foo&gt;\nprintf test 9:&lt;bar                 &gt;\nprintf test 10: 123456789012345\nprintf test 10:&lt;hďż˝yesterettsjustitiarius&gt;\nprintf test 11: 123456789012345678901234567890\nprintf test 11:&lt;    hďż˝yesterettsjustitiarius&gt;\nprintf test 12:-12.34\nprintf test 13:  -12\nprintf test 14:@\nprintf test 15:10101010\nprintf test 16:aa\nprintf test 17:AA\nprintf test 18:        10101010\nprintf test 19:              aa\nprintf test 20:              AA\nprintf test 21:0000000010101010\nprintf test 22:00000000000000aa\nprintf test 23:00000000000000AA\nprintf test 24:abcde\nprintf test 25:gazonk\nprintf test 26:2 1\nprintf test 27:3 1 2\nprintf test 28:02  1\nprintf test 29:2   1\nprintf test 30:x\nvprintf test 1:2   1</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"@PHP/strings/bug22592.php\">@PHP/strings/bug22592.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array1.php\">Arrays/array1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect.php\">Arrays/array_diff_intersect.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [a] =&gt; green\n  [2] =&gt; blue\n  [3] =&gt; blue\n  [4] =&gt; blue\n)\narray\n(\n  [2] =&gt; hello\n)\narray\n(\n  [b] =&gt; green\n  [3] =&gt; blue\n)\narray\n(\n  [a] =&gt; green\n  [0] =&gt; red\n)\narray\n(\n  [3] =&gt; blue\n)\narray\n(\n  [2] =&gt; hello\n)\narray\n(\n  [3] =&gt; blue\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n)\narray [empty]\narray\n(\n  [2] =&gt; 3\n)\narray [empty]</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [a] =&gt; green\n    [2] =&gt; blue\n    [3] =&gt; blue\n    [4] =&gt; blue\n)\nArray\n(\n    [2] =&gt; hello\n)\nArray\n(\n    [b] =&gt; green\n    [3] =&gt; blue\n)\nArray\n(\n    [a] =&gt; green\n    [0] =&gt; red\n)\nArray\n(\n    [3] =&gt; blue\n)\nArray\n(\n    [2] =&gt; hello\n)\nArray\n(\n    [3] =&gt; blue\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n)\nArray\n(\n    [2] =&gt; 3\n)\nArray\n(\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_diff_intersect2.php\">Arrays/array_diff_intersect2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [0.5] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 12\n  )\n  [0] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 23\n  )\n)\narray\n(\n  [b] =&gt; brown\n  [c] =&gt; blue\n  [0] =&gt; red\n)\n------------------------------------\narray\n(\n  [0.1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 9\n  )\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [1] =&gt; cr object\n  (\n    [priv_member:private] =&gt; 4\n  )\n  [2] =&gt; cr object\n  (\n    [priv_member:private] =&gt; -15\n  )\n)\narray\n(\n  [a] =&gt; green\n)</pre></td><td><pre>Array\n(\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [0.5] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 12\n    )\n\n    [0] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 23\n    )\n\n)\nArray\n(\n    [b] =&gt; brown\n    [c] =&gt; blue\n    [0] =&gt; red\n)\n------------------------------------\nArray\n(\n    [0.1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 9\n    )\n\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [1] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; 4\n    )\n\n    [2] =&gt; cr Object\n    (\n        [priv_member:private] =&gt; -15\n    )\n\n)\nArray\n(\n    [a] =&gt; green\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_diff_intersect3.php\">Arrays/array_diff_intersect3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_filter%20false%20entries%20%2322016.php\">Arrays/array_filter%20false%20entries%20%2322016.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_map.php\">Arrays/array_map.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; A\n    [2] =&gt; 0\n  )\n  [1] =&gt; array\n  (\n    [0] =&gt; 2\n    [1] =&gt; B\n    [2] =&gt; 0\n  )\n  [2] =&gt; array\n  (\n    [0] =&gt; 3\n    [1] =&gt; C\n    [2] =&gt; \n  )\n)\narray\n(\n  [0] =&gt; 1 A 0\n  [1] =&gt; 2 B 0\n  [2] =&gt; 3 C \n)\narray\n(\n  [A] =&gt; 2\n  [10] =&gt; 3\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n)\narray\n(\n  [0] =&gt; A\n  [1] =&gt; B\n  [2] =&gt; C\n)\narray\n(\n  [0] =&gt; x\n  [1] =&gt; x\n)\narray\n(\n  [A] =&gt; 1\n  [10] =&gt; 2\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; A\n        [2] =&gt; 0\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; B\n        [2] =&gt; 0\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 3\n        [1] =&gt; C\n        [2] =&gt; \n    )\n\n)\nArray\n(\n    [0] =&gt; 1 A 0\n    [1] =&gt; 2 B 0\n    [2] =&gt; 3 C \n)\nArray\n(\n    [A] =&gt; 2\n    [10] =&gt; 3\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n)\nArray\n(\n    [0] =&gt; A\n    [1] =&gt; B\n    [2] =&gt; C\n)\nArray\n(\n    [0] =&gt; x\n    [1] =&gt; x\n)\nArray\n(\n    [A] =&gt; 1\n    [10] =&gt; 2\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_merge_recursive.php\">Arrays/array_merge_recursive.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [color] =&gt; array\n  (\n    [favorite] =&gt; array\n    (\n      [0] =&gt; red\n      [1] =&gt; green\n    )\n    [0] =&gt; blue\n  )\n  [0] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n  )\n  [q] =&gt; array\n  (\n    [0] =&gt; x\n  )\n  [1] =&gt; 10\n  [2] =&gt; array\n  (\n    [0] =&gt; 4\n    [1] =&gt; 5\n    [2] =&gt; 6\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; e\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; e\n  )\n)\narray\n(\n  [a] =&gt; &amp;1\n  [b] =&gt; 2\n)\narray\n(\n  [a] =&gt; &amp;xxx\n  [b] =&gt; 2\n)\narray\n(\n  [a] =&gt; array\n  (\n    [a] =&gt; &amp;array\n    (\n      [a] =&gt; &amp;array [recursion]\n    )\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n  )\n)\narray\n(\n  [a] =&gt; array\n  (\n    [b] =&gt; array\n    (\n      [0] =&gt; 1\n      [1] =&gt; 1\n    )\n    [c] =&gt; 1\n    [d] =&gt; array\n    (\n      [0] =&gt; 2\n      [1] =&gt; 3\n    )\n  )\n)\narray\n(\n  [a] =&gt; array [empty]\n)\narray\n(\n  [a] =&gt; array [empty]\n)</pre></td><td><pre>Array\n(\n    [color] =&gt; Array\n    (\n        [favorite] =&gt; Array\n        (\n            [0] =&gt; red\n            [1] =&gt; green\n        )\n\n        [0] =&gt; blue\n    )\n\n    [0] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n    [q] =&gt; Array\n    (\n        [0] =&gt; x\n    )\n\n    [1] =&gt; 10\n    [2] =&gt; Array\n    (\n        [0] =&gt; 4\n        [1] =&gt; 5\n        [2] =&gt; 6\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n        [3] =&gt; e\n    )\n\n)\nArray\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; xxx\n    [b] =&gt; 2\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [a] =&gt; Array\n        (\n            [a] =&gt; Array [recursion]\n\n\n        )\n\n        [0] =&gt; 1\n        [1] =&gt; 2\n        [2] =&gt; 3\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n        [b] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 1\n        )\n\n        [c] =&gt; 1\n        [d] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 3\n        )\n\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)\nArray\n(\n    [a] =&gt; Array\n    (\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_reduce1.php\">Arrays/array_reduce1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [a] =&gt; 1\n  [b] =&gt; 2\n  [c] =&gt; 3\n  [d] =&gt; 4\n  [e] =&gt; 5\n)\narray\n(\n  [0] =&gt; 1\n  [1] =&gt; 2\n  [2] =&gt; 3\n  [3] =&gt; 4\n  [4] =&gt; 5\n)\narray [empty]</pre></td><td><pre>Array\n(\n    [a] =&gt; 1\n    [b] =&gt; 2\n    [c] =&gt; 3\n    [d] =&gt; 4\n    [e] =&gt; 5\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 2\n    [2] =&gt; 3\n    [3] =&gt; 4\n    [4] =&gt; 5\n)\nArray\n(\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_reduce2.php\">Arrays/array_reduce2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_slice.php\">Arrays/array_slice.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; c\n  [Y] =&gt; d\n  [1] =&gt; e\n)\narray\n(\n  [Y] =&gt; d\n)\narray\n(\n  [0] =&gt; a\n  [X] =&gt; b\n  [1] =&gt; c\n)\narray\n(\n  [0] =&gt; c\n  [Y] =&gt; d\n)\narray\n(\n  [2] =&gt; c\n  [Y] =&gt; d\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; c\n    [Y] =&gt; d\n    [1] =&gt; e\n)\nArray\n(\n    [Y] =&gt; d\n)\nArray\n(\n    [0] =&gt; a\n    [X] =&gt; b\n    [1] =&gt; c\n)\nArray\n(\n    [0] =&gt; c\n    [Y] =&gt; d\n)\nArray\n(\n    [2] =&gt; c\n    [Y] =&gt; d\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/array_sumprod.php\">Arrays/array_sumprod.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>double(-7.7)\ndouble(-38.4)\ninteger(6)\ninteger(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td><td><pre>float(-7.7)\nfloat(-38.4)\nint(6)\nint(6)\nint64(4294967297)\nint64(9223372028264841218)\nbool(true)\nbool(true)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_unshift.php\">Arrays/array_unshift.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk.php\">Arrays/array_walk.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/array_walk_recursive.php\">Arrays/array_walk_recursive.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/multisort.php\">Arrays/multisort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 2\n            [1] =&gt; 8\n            [2] =&gt; 2\n            [3] =&gt; 2\n            [4] =&gt; 8\n            [5] =&gt; 8\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 7\n            [1] =&gt; 2\n            [2] =&gt; 7\n            [3] =&gt; 4\n            [4] =&gt; 8\n            [5] =&gt; 1\n        )\n\n    [2] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 4\n            [2] =&gt; 8\n            [3] =&gt; 0\n            [4] =&gt; 6\n            [5] =&gt; 2\n        )\n\n    [3] =&gt; Array\n        (\n            [0] =&gt; 8\n            [1] =&gt; 4\n            [2] =&gt; 1\n            [3] =&gt; 0\n            [4] =&gt; 7\n            [5] =&gt; 1\n        )\n\n    [4] =&gt; Array\n        (\n            [0] =&gt; 20\n            [1] =&gt; 2\n            [2] =&gt; 12\n            [3] =&gt; 11\n            [4] =&gt; 10\n            [5] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; Array\n        (\n            [0] =&gt; 10\n            [1] =&gt; 100\n            [2] =&gt; 100\n            [3] =&gt; a\n        )\n\n    [1] =&gt; Array\n        (\n            [0] =&gt; 1\n            [1] =&gt; 3\n            [2] =&gt; 2\n            [3] =&gt; 1\n        )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td><td><pre>bool(true)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 2\n        [1] =&gt; 8\n        [2] =&gt; 2\n        [3] =&gt; 2\n        [4] =&gt; 8\n        [5] =&gt; 8\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 7\n        [1] =&gt; 2\n        [2] =&gt; 7\n        [3] =&gt; 4\n        [4] =&gt; 8\n        [5] =&gt; 1\n    )\n\n    [2] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 4\n        [2] =&gt; 8\n        [3] =&gt; 0\n        [4] =&gt; 6\n        [5] =&gt; 2\n    )\n\n    [3] =&gt; Array\n    (\n        [0] =&gt; 8\n        [1] =&gt; 4\n        [2] =&gt; 1\n        [3] =&gt; 0\n        [4] =&gt; 7\n        [5] =&gt; 1\n    )\n\n    [4] =&gt; Array\n    (\n        [0] =&gt; 20\n        [1] =&gt; 2\n        [2] =&gt; 12\n        [3] =&gt; 11\n        [4] =&gt; 10\n        [5] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; 10\n        [1] =&gt; 100\n        [2] =&gt; 100\n        [3] =&gt; a\n    )\n\n    [1] =&gt; Array\n    (\n        [0] =&gt; 1\n        [1] =&gt; 3\n        [2] =&gt; 2\n        [3] =&gt; 1\n    )\n\n)\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; a\n    [2] =&gt; 100\n    [3] =&gt; 100\n)\nArray\n(\n    [0] =&gt; 1\n    [1] =&gt; 1\n    [2] =&gt; 2\n    [3] =&gt; 3\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/multisort_empty.php\">Arrays/multisort_empty.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Arrays/nonarray%20access%20%2322019.php\">Arrays/nonarray%20access%20%2322019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/optimizations.php\">Arrays/optimizations.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>3\n4\n5\na\nb\nc\n\nWarning: strtolower() expects parameter 1 to be string, array given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 15\n\ncablo</pre></td><td><pre>3\n4\n5\na\nb\nc\narray\ncablo</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/recursion.php\">Arrays/recursion.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) {\n        [&quot;a&quot;]=&gt;\n        *RECURSION*\n        [0]=&gt;\n        string(1) &quot;y&quot;\n        [1]=&gt;\n        string(1) &quot;z&quot;\n      }\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) {\n      [&quot;a&quot;]=&gt;\n      *RECURSION*\n      [0]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [1]=&gt;\n    string(1) &quot;z&quot;\n  }\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\n\nWarning: array_merge_recursive(): recursion detected in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Arrays\\__input.txt on line 37\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(3) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(1) {\n    [&quot;a&quot;]=&gt;\n    array(1) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(1) {\n        [&quot;a&quot;]=&gt;\n        &amp;array(1) {\n          [&quot;a&quot;]=&gt;\n          *RECURSION*\n        }\n      }\n    }\n  }\n}</pre></td><td><pre>f1:\narray(2) {\n  [&quot;a&quot;]=&gt;\n  array(5) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(3) {\n      [&quot;a&quot;]=&gt;\n      &amp;array(3) [recursion]\n      [0]=&gt;\n      string(1) &quot;y&quot;\n      [1]=&gt;\n      string(1) &quot;z&quot;\n    }\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    string(1) &quot;x&quot;\n  }\n  [0]=&gt;\n  string(1) &quot;w&quot;\n}\nf2:\narray(1) {\n  [&quot;A&quot;]=&gt;\n  &amp;array(2) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(2) [recursion]\n    [0]=&gt;\n    string(1) &quot;z&quot;\n  }\n}\nf3:\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  string(1) &quot;z&quot;\n}\nf4:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf5:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(6) {\n    [0]=&gt;\n    int(1)\n    [1]=&gt;\n    int(2)\n    [2]=&gt;\n    int(3)\n    [3]=&gt;\n    int(1)\n    [4]=&gt;\n    int(2)\n    [5]=&gt;\n    int(3)\n  }\n}\nf6:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  array(2) {\n    [0]=&gt;\n    string(2) &quot;xx&quot;\n    [1]=&gt;\n    int(2)\n  }\n}\nf7:\narray(1) {\n  [&quot;a&quot;]=&gt;\n  &amp;array(1) {\n    [&quot;a&quot;]=&gt;\n    &amp;array(1) [recursion]\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/sort.php\">Arrays/sort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>sort regular:\narray\n(\n  [0] =&gt; 0x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [3] =&gt; ach0\n  [4] =&gt; add1\n  [5] =&gt; x10\n  [6] =&gt; 0\n  [7] =&gt; x2\n  [8] =&gt; 1\n  [9] =&gt; 1\n  [10] =&gt; 8\n)\n\nsort numeric:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 0\n  [2] =&gt; x2\n  [3] =&gt; ach0\n  [4] =&gt; add1\n  [5] =&gt; 1\n  [6] =&gt; 1\n  [7] =&gt; 8\n  [8] =&gt; 10x\n  [9] =&gt; 0x10\n  [10] =&gt; 20x\n)\n\nsort string:\narray\n(\n  [0] =&gt; 0\n  [1] =&gt; 0x10\n  [2] =&gt; 1\n  [3] =&gt; 1\n  [4] =&gt; 10x\n  [5] =&gt; 20x\n  [6] =&gt; 8\n  [7] =&gt; ach0\n  [8] =&gt; add1\n  [9] =&gt; x10\n  [10] =&gt; x2\n)\n\nsort locale:\narray\n(\n  [0] =&gt; 0\n  [1] =&gt; 0x10\n  [2] =&gt; 1\n  [3] =&gt; 1\n  [4] =&gt; 10x\n  [5] =&gt; 20x\n  [6] =&gt; 8\n  [7] =&gt; add1\n  [8] =&gt; ach0\n  [9] =&gt; x10\n  [10] =&gt; x2\n)\n\nksort regular:\narray\n(\n  [x] =&gt; 8\n  [z] =&gt; 1\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [10a] =&gt; 0\n  [2b] =&gt; 1\n)\n\nksort numeric:\narray\n(\n  [x] =&gt; 8\n  [z] =&gt; 1\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [2b] =&gt; 1\n  [2] =&gt; 20x\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [10a] =&gt; 0\n)\n\nksort string:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [10a] =&gt; 0\n  [2] =&gt; 20x\n  [2b] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [x] =&gt; 8\n  [z] =&gt; 1\n)\n\nksort locale:\narray\n(\n  [0] =&gt; x10\n  [1] =&gt; 10x\n  [10a] =&gt; 0\n  [2] =&gt; 20x\n  [2b] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; 0x10\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [x] =&gt; 8\n  [z] =&gt; 1\n)\n\nasort regular:\narray\n(\n  [4] =&gt; 0x10\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [0] =&gt; x10\n  [10a] =&gt; 0\n  [3] =&gt; x2\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n)\n\nasort numeric:\narray\n(\n  [0] =&gt; x10\n  [10a] =&gt; 0\n  [3] =&gt; x2\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n  [1] =&gt; 10x\n  [4] =&gt; 0x10\n  [2] =&gt; 20x\n)\n\nasort string:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [x] =&gt; 8\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [0] =&gt; x10\n  [3] =&gt; x2\n)\n\nasort locale:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [x] =&gt; 8\n  [6] =&gt; add1\n  [5] =&gt; ach0\n  [0] =&gt; x10\n  [3] =&gt; x2\n)\n\nrsort regular:\narray\n(\n  [0] =&gt; 8\n  [1] =&gt; 1\n  [2] =&gt; 1\n  [3] =&gt; x2\n  [4] =&gt; x10\n  [5] =&gt; 0\n  [6] =&gt; add1\n  [7] =&gt; ach0\n  [8] =&gt; 20x\n  [9] =&gt; 10x\n  [10] =&gt; 0x10\n)\n\nrsort numeric:\narray\n(\n  [0] =&gt; 20x\n  [1] =&gt; 0x10\n  [2] =&gt; 10x\n  [3] =&gt; 8\n  [4] =&gt; 1\n  [5] =&gt; 1\n  [6] =&gt; x10\n  [7] =&gt; 0\n  [8] =&gt; x2\n  [9] =&gt; ach0\n  [10] =&gt; add1\n)\n\nrsort string:\narray\n(\n  [0] =&gt; x2\n  [1] =&gt; x10\n  [2] =&gt; add1\n  [3] =&gt; ach0\n  [4] =&gt; 8\n  [5] =&gt; 20x\n  [6] =&gt; 10x\n  [7] =&gt; 1\n  [8] =&gt; 1\n  [9] =&gt; 0x10\n  [10] =&gt; 0\n)\n\nrsort locale:\narray\n(\n  [0] =&gt; x2\n  [1] =&gt; x10\n  [2] =&gt; ach0\n  [3] =&gt; add1\n  [4] =&gt; 8\n  [5] =&gt; 20x\n  [6] =&gt; 10x\n  [7] =&gt; 1\n  [8] =&gt; 1\n  [9] =&gt; 0x10\n  [10] =&gt; 0\n)\n\nnatsort:\narray\n(\n  [10a] =&gt; 0\n  [4] =&gt; 0x10\n  [z] =&gt; 1\n  [2b] =&gt; 1\n  [x] =&gt; 8\n  [1] =&gt; 10x\n  [2] =&gt; 20x\n  [5] =&gt; ach0\n  [6] =&gt; add1\n  [3] =&gt; x2\n  [0] =&gt; x10\n)</pre></td><td><pre>sort regular:\nArray\n(\n    [0] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; x10\n    [6] =&gt; 0\n    [7] =&gt; x2\n    [8] =&gt; 1\n    [9] =&gt; 1\n    [10] =&gt; 8\n)\n\nsort numeric:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 0\n    [2] =&gt; x2\n    [3] =&gt; ach0\n    [4] =&gt; add1\n    [5] =&gt; 1\n    [6] =&gt; 1\n    [7] =&gt; 8\n    [8] =&gt; 10x\n    [9] =&gt; 0x10\n    [10] =&gt; 20x\n)\n\nsort string:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; ach0\n    [8] =&gt; add1\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nsort locale:\nArray\n(\n    [0] =&gt; 0\n    [1] =&gt; 0x10\n    [2] =&gt; 1\n    [3] =&gt; 1\n    [4] =&gt; 10x\n    [5] =&gt; 20x\n    [6] =&gt; 8\n    [7] =&gt; add1\n    [8] =&gt; ach0\n    [9] =&gt; x10\n    [10] =&gt; x2\n)\n\nksort regular:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n    [2b] =&gt; 1\n)\n\nksort numeric:\nArray\n(\n    [x] =&gt; 8\n    [z] =&gt; 1\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [2b] =&gt; 1\n    [2] =&gt; 20x\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [10a] =&gt; 0\n)\n\nksort string:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nksort locale:\nArray\n(\n    [0] =&gt; x10\n    [1] =&gt; 10x\n    [10a] =&gt; 0\n    [2] =&gt; 20x\n    [2b] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; 0x10\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [x] =&gt; 8\n    [z] =&gt; 1\n)\n\nasort regular:\nArray\n(\n    [4] =&gt; 0x10\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n)\n\nasort numeric:\nArray\n(\n    [0] =&gt; x10\n    [10a] =&gt; 0\n    [3] =&gt; x2\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [4] =&gt; 0x10\n    [2] =&gt; 20x\n)\n\nasort string:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nasort locale:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [x] =&gt; 8\n    [6] =&gt; add1\n    [5] =&gt; ach0\n    [0] =&gt; x10\n    [3] =&gt; x2\n)\n\nrsort regular:\nArray\n(\n    [0] =&gt; 8\n    [1] =&gt; 1\n    [2] =&gt; 1\n    [3] =&gt; x2\n    [4] =&gt; x10\n    [5] =&gt; 0\n    [6] =&gt; add1\n    [7] =&gt; ach0\n    [8] =&gt; 20x\n    [9] =&gt; 10x\n    [10] =&gt; 0x10\n)\n\nrsort numeric:\nArray\n(\n    [0] =&gt; 20x\n    [1] =&gt; 0x10\n    [2] =&gt; 10x\n    [3] =&gt; 8\n    [4] =&gt; 1\n    [5] =&gt; 1\n    [6] =&gt; x10\n    [7] =&gt; 0\n    [8] =&gt; x2\n    [9] =&gt; ach0\n    [10] =&gt; add1\n)\n\nrsort string:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; add1\n    [3] =&gt; ach0\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nrsort locale:\nArray\n(\n    [0] =&gt; x2\n    [1] =&gt; x10\n    [2] =&gt; ach0\n    [3] =&gt; add1\n    [4] =&gt; 8\n    [5] =&gt; 20x\n    [6] =&gt; 10x\n    [7] =&gt; 1\n    [8] =&gt; 1\n    [9] =&gt; 0x10\n    [10] =&gt; 0\n)\n\nnatsort:\nArray\n(\n    [10a] =&gt; 0\n    [4] =&gt; 0x10\n    [z] =&gt; 1\n    [2b] =&gt; 1\n    [x] =&gt; 8\n    [1] =&gt; 10x\n    [2] =&gt; 20x\n    [5] =&gt; ach0\n    [6] =&gt; add1\n    [3] =&gt; x2\n    [0] =&gt; x10\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Arrays/usort.php\">Arrays/usort.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\narray\n(\n  [0] =&gt; 10\n  [1] =&gt; 9\n  [2] =&gt; 8\n  [3] =&gt; 7\n  [4] =&gt; 6\n  [5] =&gt; 5\n  [6] =&gt; 4\n  [7] =&gt; 3\n  [8] =&gt; 2\n  [9] =&gt; 1\n)</pre></td><td><pre>0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\nArray\n(\n    [0] =&gt; 10\n    [1] =&gt; 9\n    [2] =&gt; 8\n    [3] =&gt; 7\n    [4] =&gt; 6\n    [5] =&gt; 5\n    [6] =&gt; 4\n    [7] =&gt; 3\n    [8] =&gt; 2\n    [9] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/class_incompletepart.php\">Bugs/class_incompletepart.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/division-by-zero.php\">Bugs/division-by-zero.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"2\">Unexpected output</td><td class=\"failed\" valign=\"top\">See below</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>DIVISION\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 6\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 8\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 10\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 12\nbool(false)\nMODULO\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 16\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 18\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 20\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt on line 22\nbool(false)</pre></td><td><pre>DIVISION\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 10, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 12, column 2.\nbool(false)\nMODULO\nbool(false)\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 20, column 2.\nbool(false)\n\nWarning: Division by zero in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt at expression on line 22, column 2.\nbool(false)</pre></td></tr></table></td></tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" colspan=\"5\"><pre>D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(6,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(8,9): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(16,10): warning PHP0150: Division by zero\r\nD:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt(18,9): warning PHP0150: Division by zero\r\n</pre></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/function-in-unknown-class.php\">Bugs/function-in-unknown-class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/is_a_null_value.php\">Bugs/is_a_null_value.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-named-groups.php\">Bugs/preg-named-groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-advanced.php\">Bugs/preg-replace-advanced.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace-range.php\">Bugs/preg-replace-range.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-replace.php\">Bugs/preg-replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic.php\">Bugs/preg-this-dynamic.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; PHP.Core.Debug+AssertException: Assertion failed: \r\n   at PHP.Core.Debug.Fail(String message)\r\n   at PHP.Core.Debug.Assert(Boolean condition)\r\n   at PHP.Core.RelativePath.ParseCanonical(String relativePath)\r\n   at PHP.Core.Emit.TransientAssemblyBuilder.Build(String sourceCode, SourceCodeDescriptor descriptor, EvalKinds kind, CompilationContext context, ScriptContext scriptContext, DTypeDesc referringType, NamingContext namingContext, Boolean completeSource)\r\n   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)\r\n   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)\r\n   at PHP.Library.PerlRegExp.Evaluator.ReplaceCodeExecute(Match m)\r\n   at System.Text.RegularExpressions.RegexReplacement.Replace(MatchEvaluator evaluator, Regex regex, String input, Int32 count, Int32 startat)\r\n   at System.Text.RegularExpressions.Regex.Replace(String input, MatchEvaluator evaluator, Int32 count)\r\n   at PHP.Library.PerlRegExp.ReplaceInternal(DObject self, Dictionary`2 definedVariables, PerlRegExpConverter converter, PhpCallback callback, String str, Int32 limit, SourceCodeDescriptor sourceCodeDesc, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.SimpleReplace(DObject self, Dictionary`2 definedVariables, Object pattern, String replacement, PhpCallback callback, Object data, Int32 limit, SourceCodeDescriptor descriptor, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, PhpCallback callback, Object data, Int32 limit, Int32&amp; count)\r\n   at PHP.Library.PerlRegExp.Replace(DObject self, Dictionary`2 definedVariables, Object pattern, Object replacement, Object data)\r\n   at PHP.Dynamic.PhpNetClassLibrary.preg_replace(Object , PhpStack )\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.a.a(ScriptContext ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 16\r\n   at &lt;__input.txt&gt;.a.&lt;Mediator&gt;(ScriptContext )\r\n   at &lt;__input.txt&gt;.a.a(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Bugs\\__input.txt:line 19\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Bugs/preg-this-dynamic2.php\">Bugs/preg-this-dynamic2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\nfoo: ahoj\nfoo: lidi\nfoo: rozkladame</pre></td><td><pre>foo: ahoj\nfoo: lidi\nfoo: rozkladame\n\nNotice: Undefined variable: this.\n\nError: Call to a member function foo() on a non-object.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-this.php\">Bugs/preg-this.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-ungreedy-bugs.php\">Bugs/preg-ungreedy-bugs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/preg-unkn.php\">Bugs/preg-unkn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Bugs/trigger_error%20line%20number%20%232787.php\">Bugs/trigger_error%20line%20number%20%232787.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/abstracts.php\">Compiler/abstracts.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/aliased%20assign%20add.php\">Compiler/aliased%20assign%20add.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assignments.php\">Compiler/assignments.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.83333333333333)\nint(6)\nint(8)\n---2---2float(8.8333333333333)\nfloat(8.8333333333333)\nfloat(8.8333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td><td><pre>---1---1float(-1.5)\nfloat(2.5)\nfloat(0.833333333333333)\nint(6)\nint(8)\n---2---2float(8.83333333333333)\nfloat(8.83333333333333)\nfloat(8.83333333333333)\nint(8)\nint(8)\n---3---3---4---4---5---5array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\narray(1) {\n  [1]=&gt;\n  array(1) {\n    [2]=&gt;\n    array(1) {\n      [3]=&gt;\n      array(3) {\n        [0]=&gt;\n        int(1)\n        [1]=&gt;\n        int(2)\n        [2]=&gt;\n        int(3)\n      }\n    }\n  }\n}\n---6---6array(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;u&quot;\n}\narray(4) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;v&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\narray(5) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(2)\n  [2]=&gt;\n  int(3)\n  [3]=&gt;\n  string(1) &quot;w&quot;\n  [4]=&gt;\n  string(1) &quot;z&quot;\n}\n---7---7array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    array(1) {\n      [0]=&gt;\n      array(1) {\n        [0]=&gt;\n        &amp;int(10)\n      }\n    }\n  }\n}\n---8---8</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/assign_in_call.php\">Compiler/assign_in_call.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\nu(3)\n\ng10:\nDone.</pre></td><td><pre>g1:\nf(x)\nu(x)\n'x'\n\ng2:\nf(x)\nu(x)\n'b'\n\ng3:\nf(x)\nu(x)\n'b'\n\ng4:\nf(x)\nu(x)\n'b'\n\ng5:\nf()\nu()\ninteger(1)\n\ng6:\nf(3)\nu(3)\ninteger(3)\n\ng7:\nf(2)\nu(10)\ninteger(10)\n\ng8:\nf(1)\nf(1)\nf(1)\nu(1)\nu()\nu(1)\n\ng9:\nknown:\n__get(p) = 0\n__set(p,1)\n__get(p) = 1\nf(1)\nunknown:\n__get(p) = 1\n__set(p,3)\n__get(p) = 3\nu(3)\n\ng10:\nDone.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_001.php\">Compiler/auto_globals_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_002.php\">Compiler/auto_globals_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/auto_globals_003.php\">Compiler/auto_globals_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/break_in_global_code.php\">Compiler/break_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/chaining_test.php\">Compiler/chaining_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/chain_ending_by_string_index.php\">Compiler/chain_ending_by_string_index.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;xubu&quot;\n}\nobject(C)#1 (1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuxu&quot;\n}\nstring(5) &quot;helxo&quot;\nstring(5) &quot;helxo&quot;</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  array(1) {\n    [0]=&gt;\n    string(1) &quot;f&quot;\n  }\n}\narray(1) {\n  [0]=&gt;\n  string(4) &quot;bubu&quot;\n}\n\nWarning: 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.\nobject(C)(1) {\n  [&quot;f&quot;]=&gt;\n  string(4) &quot;kuku&quot;\n}\n\nWarning: 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.\nstring(5) &quot;hello&quot;\n\nWarning: 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.\nstring(5) &quot;hello&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/continue_in_global_code.php\">Compiler/continue_in_global_code.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy.php\">Compiler/deep_copy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) {\n    [0]=&gt;\n    &amp;array(1) {\n      [0]=&gt;\n      *RECURSION*\n    }\n  }\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    &amp;array(2) {\n      [0]=&gt;\n      *RECURSION*\n      [1]=&gt;\n      int(1)\n    }\n    [1]=&gt;\n    int(1)\n  }\n}</pre></td><td><pre>array(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}\narray(2) {\n  [0]=&gt;\n  &amp;array(2) [recursion]\n  [1]=&gt;\n  int(1)\n}\narray(1) {\n  [0]=&gt;\n  &amp;array(1) [recursion]\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/deep_copy_refbox.php\">Compiler/deep_copy_refbox.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Strict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 42\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 45\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 49\narray\n{\n  0 =&gt; integer(1)\n}\n\nStrict Standards: Only variables should be passed by reference in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 52\narray\n{\n  0 =&gt; integer(1)\n}</pre></td><td><pre>array\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}\narray\n{\n  0 =&gt; integer(1)\n  1 =&gt; integer(1)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/expr_init.php\">Compiler/expr_init.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach1.php\">Compiler/foreach1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/foreach_arrays.php\">Compiler/foreach_arrays.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/for_loop.php\">Compiler/for_loop.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_002.php\">Compiler/function_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_003.php\">Compiler/function_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_004.php\">Compiler/function_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/function_call.php\">Compiler/function_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/if_statement.php\">Compiler/if_statement.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_001.php\">Compiler/indirect_001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_002.php\">Compiler/indirect_002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_003.php\">Compiler/indirect_003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_004.php\">Compiler/indirect_004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_005.php\">Compiler/indirect_005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_007.php\">Compiler/indirect_007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/indirect_global.php\">Compiler/indirect_global.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance.php\">Compiler/inheritance.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/inheritance2.php\">Compiler/inheritance2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/isset_unset_001.php\">Compiler/isset_unset_001.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\n\nNotice: Undefined variable: y in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Compiler\\__input.txt on line 29\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td><td><pre>Testing x in global code:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (object) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting x (PhpReference) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;\n &lt;br&gt;\nTesting $$x (created at runtime) in optimized function:  &lt;br&gt;\n1 &lt;br&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/list%20%2326681.php\">Compiler/list%20%2326681.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/null_hints.php\">Compiler/null_hints.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_create_function.php\">Compiler/pure_create_function.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_function_exists.php\">Compiler/pure_function_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/pure_math_str.php\">Compiler/pure_math_str.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/static_call.php\">Compiler/static_call.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/switch.php\">Compiler/switch.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/ternary_ex.php\">Compiler/ternary_ex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/typehint_check.php\">Compiler/typehint_check.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include2.php\">Compiler/Inclusions/include2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include3.php\">Compiler/Inclusions/include3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include6.php\">Compiler/Inclusions/include6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/include_test.php\">Compiler/Inclusions/include_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/script.php\">Compiler/Inclusions/script.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t01.php\">Compiler/Inclusions/Cycles/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t02.php\">Compiler/Inclusions/Cycles/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t03.php\">Compiler/Inclusions/Cycles/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t04.php\">Compiler/Inclusions/Cycles/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t05.php\">Compiler/Inclusions/Cycles/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Inclusions/Cycles/t08.php\">Compiler/Inclusions/Cycles/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent.php\">Compiler/PseudoConst/parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/parent2.php\">Compiler/PseudoConst/parent2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/self.php\">Compiler/PseudoConst/self.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t01.php\">Compiler/PseudoConst/t01.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t02.php\">Compiler/PseudoConst/t02.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t03.php\">Compiler/PseudoConst/t03.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t04.php\">Compiler/PseudoConst/t04.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t05.php\">Compiler/PseudoConst/t05.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t06.php\">Compiler/PseudoConst/t06.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t07.php\">Compiler/PseudoConst/t07.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t08.php\">Compiler/PseudoConst/t08.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t09.php\">Compiler/PseudoConst/t09.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t10.php\">Compiler/PseudoConst/t10.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/t11.php\">Compiler/PseudoConst/t11.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_class_.php\">Compiler/PseudoConst/_class_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/PseudoConst/_function_.php\">Compiler/PseudoConst/_function_.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_argument.php\">Compiler/References/array_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_local.php\">Compiler/References/array_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/array_ret_argument.php\">Compiler/References/array_ret_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/References/array_ret_argument2.php\">Compiler/References/array_ret_argument2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/deepcopy.php\">Compiler/References/deepcopy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  int(7)\n}</pre></td><td><pre>&lt;br/&gt;&lt;br/&gt;globalobjects: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/explicitclear.php\">Compiler/References/explicitclear.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Construyendo Y\ncall foo12Destruyendo Y\n3object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  string(10) &quot;Init Value&quot;\n}\nx: object(X)#1 (2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  int(54)\n}</pre></td><td><pre>Construyendo Y\ncall foo123object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\narray(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n}\nx: object(X)(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;inner_stuff&quot;]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(23)\n  }\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n}\nDestruyendo Y</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_argument.php\">Compiler/References/field_argument.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(8)\n}</pre></td><td><pre>x: int(7)\n&lt;br/&gt;&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(7)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/field_local.php\">Compiler/References/field_local.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: object(X)#1 (1) {\n  [&quot;objects&quot;]=&gt;\n  int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n}</pre></td><td><pre>x: object(X)(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}\n&lt;br/&gt;checkpoint array(1) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(25)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_arrayitem.php\">Compiler/References/ref_arrayitem.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  array(2) {\n    [0]=&gt;\n    int(2)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td><td><pre>x: array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}\n&lt;br/&gt;&lt;br/&gt;checkpoint array(2) {\n  [0]=&gt;\n  int(1)\n  [1]=&gt;\n  &amp;array(2) {\n    [0]=&gt;\n    int(7)\n    [1]=&gt;\n    int(3)\n  }\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/References/ref_reasign.php\">Compiler/References/ref_reasign.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  int(7)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)#1 (2) {\n  [&quot;objects&quot;]=&gt;\n  int(1004)\n  [&quot;objects2&quot;]=&gt;\n  int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  int(54)\n  [&quot;objects2&quot;]=&gt;\n  int(222)\n}</pre></td><td><pre>object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\narray(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(54)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(222)\n}\nx: object(X)(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}\n&lt;br/&gt;checkpoint array(2) {\n  [&quot;objects&quot;]=&gt;\n  &amp;int(1004)\n  [&quot;objects2&quot;]=&gt;\n  &amp;int(777)\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unreachable/t13.php\">Compiler/Unreachable/t13.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Compiler/Unset/calluserfunc.php\">Compiler/Unset/calluserfunc.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>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\nint(10)</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/issetref2.php\">Compiler/Unset/issetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal.php\">Compiler/Unset/unsetglobal.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetglobal2.php\">Compiler/Unset/unsetglobal2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetindirect.php\">Compiler/Unset/unsetindirect.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetproblem.php\">Compiler/Unset/unsetproblem.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref.php\">Compiler/Unset/unsetref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref2.php\">Compiler/Unset/unsetref2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/unsetref3.php\">Compiler/Unset/unsetref3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Compiler/Unset/__unset.php\">Compiler/Unset/__unset.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strftime.php\">DateTime/strftime.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime1.php\">DateTime/strtotime1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime2.php\">DateTime/strtotime2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime3.php\">DateTime/strtotime3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime4.php\">DateTime/strtotime4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/strtotime5.php\">DateTime/strtotime5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"DateTime/time.php\">DateTime/time.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td><td><pre>1133305200\n-189388800:-189475200 - 86400\n1964-01-01T00:00:00+0000\n1963-12-31T00:00:00+0000\n1964-06-06\n1963-06-06\n1964-01-06</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"DateTime/timezones1.php\">DateTime/timezones1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename.php\">FileSystem/basename.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/basename2.php\">FileSystem/basename2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/chdir.php\">FileSystem/chdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/csv.php\">FileSystem/csv.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n&quot;hello\\n\nworld&quot;;&quot;aaa&quot;&quot;bbb&quot;&quot;ccc&quot;;&quot;blah blah;&quot;;none;&quot;tab\\ttab&quot;;&quot;space space&quot;\\n\nhh'ee;&quot;ss\\nsadasdasd s&quot;\\n\n&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;&quot;&quot;&quot;;;&quot;&quot;&quot;&quot;&quot;&quot;;&quot;xxx&quot;&quot;&quot;\\n\nx\\n\n&quot;x\\y&quot;\\n</pre></td><td><pre>--- write ---\n72\n24\n44\n2\n6\n\n--- read ---\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.\n\n\nWarning: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date.php\">FileSystem/date.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date2.php\">FileSystem/date2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date3.php\">FileSystem/date3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/date_unix.php\">FileSystem/date_unix.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname.php\">FileSystem/dirname.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/dirname2.php\">FileSystem/dirname2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/disk_free_space.php\">FileSystem/disk_free_space.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>78 GB\nDrive C: 177 GB\nDrive D: 78 GB\nDrive E: 64 GB\nDrive F: \nWarning: disk_free_space(): The device is not ready.\n in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\nfalse</pre></td><td><pre>78 GB\nDrive C: 177 GB\nDrive D: 78 GB\nDrive E: 64 GB\nDrive F: false</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/disk_total_space.php\">FileSystem/disk_total_space.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fgets.php\">FileSystem/fgets.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file.php\">FileSystem/file.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/filesize.php\">FileSystem/filesize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_exists.php\">FileSystem/file_exists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/file_get_contents.php\">FileSystem/file_get_contents.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fpassthru.php\">FileSystem/fpassthru.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread.php\">FileSystem/fread.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread1.php\">FileSystem/fread1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fread2.php\">FileSystem/fread2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fseek.php\">FileSystem/fseek.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/fsockopen.php\">FileSystem/fsockopen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/ftell.php\">FileSystem/ftell.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_dir.php\">FileSystem/is_dir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/is_executable.php\">FileSystem/is_executable.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/pathinfo.php\">FileSystem/pathinfo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/popen.php\">FileSystem/popen.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readdir.php\">FileSystem/readdir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readfile.php\">FileSystem/readfile.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/readline.php\">FileSystem/readline.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/realpath.php\">FileSystem/realpath.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/scandir.php\">FileSystem/scandir.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stat.php\">FileSystem/stat.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_context_set_option.php\">FileSystem/stream_context_set_option.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;\n&lt;pre&gt;[ARRAY\n  [STRING: &quot;http&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;GET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;Accept-language: en\nCookie: foo=bar\n&quot;]\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n  [STRING: &quot;other&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;file&quot;] =&gt; [ARRAY\n    [STRING: &quot;method&quot;] =&gt; [STRING: &quot;otherGET&quot;]\n    [STRING: &quot;header&quot;] =&gt; [STRING: &quot;otherAccept-language: en\notherCookie: foo=bar\n&quot;]\n  ]\n  [STRING: &quot;wrap&quot;] =&gt; [ARRAY\n    [STRING: &quot;op1&quot;] =&gt; [STRING: &quot;DIRECT&quot;]\n    [STRING: &quot;op2&quot;] =&gt; [STRING: &quot;VIA STREAM&quot;]\n  ]\n]&lt;/pre&gt;</pre></td><td><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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/stream_copy_to_stream.php\">FileSystem/stream_copy_to_stream.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/stream_copy_to_stream2.php\">FileSystem/stream_copy_to_stream2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11806&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11806&lt;/b&gt;</pre></td><td><pre>&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wb&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11806&lt;/b&gt;\n&lt;p&gt;Read &lt;b&gt;rb&lt;/b&gt;, Write &lt;b&gt;wt&lt;/b&gt;\n\n\nCOPIED: &lt;b&gt;11824&lt;/b&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/testinc.php\">FileSystem/testinc.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/touch.php\">FileSystem/touch.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Warning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 8\nSorry Could Not change modification time of touch.txt\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 14\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 16\n\nWarning: touch(): Utime failed: No such file or directory in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\FileSystem\\__input.txt on line 17\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime test.txt (1298454840)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime test.txt (1298149565)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) ctime touch.txt (1298454840)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime touch.txt (1298149565)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [10:54:00] (10h) atime touch.txt (1298454840)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime summer.txt (1298149565)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [22:06:05] (22h) mtime winter.txt (1298149565)&quot;]\n]&lt;/pre&gt;</pre></td><td><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.\nSorry Could Not change modification time of touch.txt\nWarning: 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.\n\nWarning: 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.\n\nWarning: 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.\n&lt;pre&gt;[ARRAY\n  [INT (0)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime test.txt (1298458440)&quot;]\n  [INT (1)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime test.txt (1298153165)&quot;]\n  [INT (2)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) ctime touch.txt (1298458440)&quot;]\n  [INT (3)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime touch.txt (1298153165)&quot;]\n  [INT (4)] =&gt; [STRING: &quot;February 23, 2011; [11:54:00] (11h) atime touch.txt (1298458440)&quot;]\n  [INT (5)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime summer.txt (1298153165)&quot;]\n  [INT (6)] =&gt; [STRING: &quot;February 19, 2011; [23:06:05] (23h) mtime winter.txt (1298153165)&quot;]\n]&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"FileSystem/tar/tar_test.php\">FileSystem/tar/tar_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"FileSystem/zip/zip.php\">FileSystem/zip/zip.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>failed</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/abs.php\">Math/abs.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/atan2.php\">Math/atan2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/base_convert.php\">Math/base_convert.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/bindec.php\">Math/bindec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/ceil.php\">Math/ceil.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/cos.php\">Math/cos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Math/decbin.php\">Math/decbin.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;pre&gt;\n[double: 2294967295]\n10001000110010100110101111111111\n[double: 4294967296]\n0\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934590]\n11111111111111111111111111111110\n[double: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td><td><pre>&lt;pre&gt;\n[???: 2294967295]\n10001000110010100110101111111111\n[???: 4294967296]\n0\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934590]\n11111111111111111111111111111110\n[???: 8589934591]\n11111111111111111111111111111111\n[Int: 1000.000.000.000]\n11010100101001010001000000000000\n&lt;hr&gt;(-1, -5435, 2.14, 0, 26)\n11111111111111111111111111111111\n11111111111111111110101011000101\n10\n0\n11010 \n&lt;/pre&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/dechex.php\">Math/dechex.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/decoct.php\">Math/decoct.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/deg2rad.php\">Math/deg2rad.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/exp.php\">Math/exp.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/floor.php\">Math/floor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/fmod.php\">Math/fmod.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/hexdec.php\">Math/hexdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/max.php\">Math/max.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/min.php\">Math/min.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/modulo_warn.php\">Math/modulo_warn.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/octdec.php\">Math/octdec.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/pow.php\">Math/pow.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/rad2deg.php\">Math/rad2deg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/round.php\">Math/round.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sin.php\">Math/sin.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/sqrt.php\">Math/sqrt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/tan.php\">Math/tan.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Math/uniqid.php\">Math/uniqid.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/calendar_extension.php\">Misc/calendar_extension.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n0\n2375840\n0\n14\n32\n2\nThere are 31 days in August 2003\nThere are 28 days in February 2003\nThere are 29 days in February 2004\nThere are 31 days in December 2034\n1748326\n1748324\n374867\n0\n322f32322f35373633\nebe120e7f9e5ef20e4faf9f1e2\nebe120e7f9e5ef20e427faf9f1e2\nebe120e7f9e5ef20e420e0ecf4e9ed20faf9f1e2\nebe120e7f9e5ef20e42720e0ecf4e9ed20faf9f1e2\neb22e120e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e4faf9f122e2\ne12720e7f9e5ef20e427faf9f122e2\ne12720e7f9e5ef20e420e0ecf4e9ed20faf9f122e2\ne12720e7f9e5ef20e42720e0ecf4e9ed20faf9f122e2</pre></td><td><pre>Error: Call to undefined function: 'frenchtojd' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt at expression on line 2, column 1.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/fgetcsv%20%2327492.php\">Misc/fgetcsv%20%2327492.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/hash%20functions%20%2326667.php\">Misc/hash%20functions%20%2326667.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/ini_parse.php\">Misc/ini_parse.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/json%20%2327838.php\">Misc/json%20%2327838.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/lexer.php\">Misc/lexer.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_INLINE_HTML\n311 '\\r\\n'\nT_OPEN_TAG\n368 '&amp;lt;?'\nT_WHITESPACE\n371 ' \\r\\n\\r\\n'\nT_FINAL\n345 'final'\nT_WHITESPACE\n371 ' '\nT_CLASS\n353 'class'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 'A'\nT_WHITESPACE\n371 ' \\r\\n'\n    '{'\nT_WHITESPACE\n371 ' \\r\\n  '\nT_FUNCTION\n334 'function'\nT_WHITESPACE\n371 ' '\nT_STRING\n307 '__get'\n    '('\nT_VARIABLE\n309 '$x'\n    ')'\nT_WHITESPACE\n371 ' \\r\\n  '\n    '{'\nT_WHITESPACE\n371 ' \\r\\n    '\nT_VARIABLE\n309 '$x'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_START_HEREDOC\n372 '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\\r\\n'\nT_ENCAPSED_AND_WHITESPACE\n314 '         &amp;lt;&amp;lt;&amp;lt;hello\\r\\nEOOOOOOOOOOOOOOt;\\r\\nEOOOOOOOOOOOOOT;\\r\\n'\nT_END_HEREDOC\n373 'EOOOOOOOOOOOOOOT'\n    ';'\nT_WHITESPACE\n371 '\\r\\n\\r\\n    '\n    '$'\nT_VARIABLE\n309 '$y'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_ARRAY\n360 'array'\nT_WHITESPACE\n371 ' '\n    '('\nT_LNUMBER\n305 '1'\n    ','\nT_DNUMBER\n306 '100000000000000'\n    ','\nT_DNUMBER\n306 '999999999999999999999999999999999'\n    ','\nT_STRING\n307 'true'\n    ','\nT_STRING\n307 'false'\n    ')'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\nT_CONSTANT_ENCAPSED_STRING\n315 '&amp;quot;xxx&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n    '\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_DOLLAR_OPEN_CURLY_BRACES\n374 '${'\n    '$'\n    '{'\n    '&amp;quot;'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\nT_VARIABLE\n309 '$x'\nT_ENCAPSED_AND_WHITESPACE\n314 '-&amp;gt;$$'\nT_VARIABLE\n309 '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\nT_ENCAPSED_AND_WHITESPACE\n314 'x'\n    '&amp;quot;'\n    '}'\nT_WHITESPACE\n371 ' '\n    '='\nT_WHITESPACE\n371 ' '\nT_LNUMBER\n305 '1'\n    ';'\nT_WHITESPACE\n371 '\\r\\n  '\n    '}'\nT_WHITESPACE\n371 ' \\r\\n'\n    '}'\nT_WHITESPACE\n371 '\\r\\n\\r\\n'\nT_CLOSE_TAG\n370 '?&amp;gt;'</pre></td><td><pre>'\n'\n    '&amp;lt;?'\n    ' \n\n'\n    'final'\n    ' '\n    'class'\n    ' '\n    'A'\n    ' \n'\n    '{'\n    ' \n  '\n    'function'\n    ' '\n259\n259 '\nWarning: 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.\n'\n    '('\n    '$x'\n    ')'\n    ' \n  '\n    '{'\n    ' \n    '\n    '$x'\n    ' '\n    '='\n    ' '\n    '&amp;lt;&amp;lt;&amp;lt;EOOOOOOOOOOOOOOT\n'\n    '         &amp;lt;&amp;lt;&amp;lt;'\n    'hello'\n    '\n'\n    'EOOOOOOOOOOOOOOt;\n'\n    'EOOOOOOOOOOOOOT;\n'\n    'EOOOOOOOOOOOOOOT'\n    ';'\n    '\n\n    '\n    '$'\n    '$y'\n    ' '\n    '='\n    ' '\n    'array'\n    ' '\n    '('\n    '1'\n    ','\n    '100000000000000'\n    ','\n    '999999999999999999999999999999999'\n    ','\n256\n256 '\nWarning: 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.\n'\n    ','\n257\n257 '\nWarning: 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.\n'\n    ')'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n-29\n-29 '\nWarning: 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.\n'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n    '\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '${'\n    '$'\n    '{'\n    '&amp;quot;'\n    'x'\n    '$x'\n    '-&amp;gt;'\n    '$'\n    '$'\n    '$x0xx'\n    '&amp;quot;'\n    '}'\n    '}'\n    'x'\n    '&amp;quot;'\n    '}'\n    ' '\n    '='\n    ' '\n    '1'\n    ';'\n    '\n  '\n    '}'\n    ' \n'\n    '}'\n    '\n\n'\n    '?&amp;gt;'</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/locale.php\">Misc/locale.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(1) &quot;C&quot;\ndouble(1.54)\ndouble(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\ndouble(1.54)\ndouble(Infinity)\n654564,145400\nso sobota IV duben\n--------------</pre></td><td><pre>string(1) &quot;C&quot;\nfloat(1.54)\nfloat(Infinity)\n654564.145400\nSat Saturday Apr April\n--------------\nstring(19) &quot;Danish_Denmark.1252&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nlo lordag apr april\n--------------\nstring(25) &quot;Czech_Czech Republic.1250&quot;\nfloat(1.54)\nfloat(Infinity)\n654564,145400\nso sobota 4 duben\n--------------</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/output2.php\">Misc/output2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url%20%2327377.php\">Misc/parse_url%20%2327377.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/parse_url_at_bug.php\">Misc/parse_url_at_bug.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/stack_trace.php\">Misc/stack_trace.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Script hung up</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre></pre></td><td><pre>\nUnhandled Exception: PHP.Core.PhpNetInternalException: Guarded call ---&gt; System.IndexOutOfRangeException: Index was outside the bounds of the array.\r\n   at PHP.Core.PhpStackFrame..ctor(ScriptContext context, StackFrame frame, FrameKinds kind)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, StackTrace clrTrace)\r\n   at PHP.Core.PhpStackTrace..ctor(ScriptContext context, Int32 skipFrames)\r\n   at PHP.Library.Errors.Backtrace()\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 11\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.j(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\stack_trace.inc:line 6\r\n   at &lt;stack_trace.inc&gt;.&lt;Script&gt;.i(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;^0&gt;.&lt;Global&gt;.&lt;?0&gt;.h(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 14\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack, DTypeDesc caller)\r\n   at PHP.Core.PhpCallback.InvokeInternal(Object[] args)\r\n   at PHP.Core.PhpCallback.Invoke(Object[] args)\r\n   at PHP.Library.PhpArrays.Map(PhpCallback map, PhpArray[] arrays)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 4\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Lambda&gt;(Object instance, PhpStack stack)\r\n   at PHP.Core.Reflection.DRoutineDesc.Invoke(DObject instance, PhpStack stack)\r\n   at PHP.Core.ScriptContext.Call(Dictionary`2 localVariables, NamingContext namingContext, Object name, ScriptContext context)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(ScriptContext &lt;context&gt;) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 6\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.f(Object instance, PhpStack stack)\r\n   at &lt;__input.txt&gt;.&lt;Script&gt;.&lt;Main&gt;(ScriptContext &lt;context&gt;, Dictionary`2 &lt;locals&gt;, DObject , DTypeDesc , Boolean ) in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Misc\\__input.txt:line 18\r\n   at PHP.Core.ScriptContext.GuardedMain(Object mainRoutine)\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   --- End of inner exception stack trace ---\r\n   at PHP.Core.ScriptContext.GuardedCall[TData,TResult](Converter`2 routine, TData data, Boolean allowUserExceptions)\r\n   at PHP.Core.ScriptContext.RunApplication(Delegate mainRoutine, String relativeSourcePath, String sourceRoot)\r\n   at &lt;Global&gt;.Run(String[] )\n</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/str_getcsv%20%2326691.php\">Misc/str_getcsv%20%2326691.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Misc/tokens.php\">Misc/tokens.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>T_REQUIRE_ONCE = 258,\nT_REQUIRE = 259,\nT_EVAL = 260,\nT_INCLUDE_ONCE = 261,\nT_INCLUDE = 262,\nT_LOGICAL_OR = 263,\nT_LOGICAL_XOR = 264,\nT_LOGICAL_AND = 265,\nT_PRINT = 266,\nT_SR_EQUAL = 267,\nT_SL_EQUAL = 268,\nT_XOR_EQUAL = 269,\nT_OR_EQUAL = 270,\nT_AND_EQUAL = 271,\nT_MOD_EQUAL = 272,\nT_CONCAT_EQUAL = 273,\nT_DIV_EQUAL = 274,\nT_MUL_EQUAL = 275,\nT_MINUS_EQUAL = 276,\nT_PLUS_EQUAL = 277,\nT_BOOLEAN_OR = 278,\nT_BOOLEAN_AND = 279,\nT_IS_NOT_IDENTICAL = 280,\nT_IS_IDENTICAL = 281,\nT_IS_NOT_EQUAL = 282,\nT_IS_EQUAL = 283,\nT_IS_GREATER_OR_EQUAL = 284,\nT_IS_SMALLER_OR_EQUAL = 285,\nT_SR = 286,\nT_SL = 287,\nT_INSTANCEOF = 288,\nT_UNSET_CAST = 289,\nT_BOOL_CAST = 290,\nT_OBJECT_CAST = 291,\nT_ARRAY_CAST = 292,\nT_STRING_CAST = 293,\nT_DOUBLE_CAST = 294,\nT_INT_CAST = 295,\nT_DEC = 296,\nT_INC = 297,\nT_CLONE = 298,\nT_NEW = 299,\nT_EXIT = 300,\nT_IF = 301,\nT_ELSEIF = 302,\nT_ELSE = 303,\nT_ENDIF = 304,\nT_LNUMBER = 305,\nT_DNUMBER = 306,\nT_STRING = 307,\nT_STRING_VARNAME = 308,\nT_VARIABLE = 309,\nT_NUM_STRING = 310,\nT_INLINE_HTML = 311,\nT_CHARACTER = 312,\nT_BAD_CHARACTER = 313,\nT_ENCAPSED_AND_WHITESPACE = 314,\nT_CONSTANT_ENCAPSED_STRING = 315,\nT_ECHO = 316,\nT_DO = 317,\nT_WHILE = 318,\nT_ENDWHILE = 319,\nT_FOR = 320,\nT_ENDFOR = 321,\nT_FOREACH = 322,\nT_ENDFOREACH = 323,\nT_DECLARE = 324,\nT_ENDDECLARE = 325,\nT_AS = 326,\nT_SWITCH = 327,\nT_ENDSWITCH = 328,\nT_CASE = 329,\nT_DEFAULT = 330,\nT_BREAK = 331,\nT_CONTINUE = 332,\nT_GOTO = 333,\nT_FUNCTION = 334,\nT_CONST = 335,\nT_RETURN = 336,\nT_TRY = 337,\nT_CATCH = 338,\nT_THROW = 339,\nT_USE = 340,\nT_GLOBAL = 341,\nT_PUBLIC = 342,\nT_PROTECTED = 343,\nT_PRIVATE = 344,\nT_FINAL = 345,\nT_ABSTRACT = 346,\nT_STATIC = 347,\nT_VAR = 348,\nT_UNSET = 349,\nT_ISSET = 350,\nT_EMPTY = 351,\nT_HALT_COMPILER = 352,\nT_CLASS = 353,\nT_INTERFACE = 354,\nT_EXTENDS = 355,\nT_IMPLEMENTS = 356,\nT_OBJECT_OPERATOR = 357,\nT_DOUBLE_ARROW = 358,\nT_LIST = 359,\nT_ARRAY = 360,\nT_CLASS_C = 361,\nT_METHOD_C = 362,\nT_FUNC_C = 363,\nT_LINE = 364,\nT_FILE = 365,\nT_COMMENT = 366,\nT_DOC_COMMENT = 367,\nT_OPEN_TAG = 368,\nT_OPEN_TAG_WITH_ECHO = 369,\nT_CLOSE_TAG = 370,\nT_WHITESPACE = 371,\nT_START_HEREDOC = 372,\nT_END_HEREDOC = 373,\nT_DOLLAR_OPEN_CURLY_BRACES = 374,\nT_CURLY_OPEN = 375,\nT_PAAMAYIM_NEKUDOTAYIM = 376,\nT_DOUBLE_COLON = 376,\nT_NAMESPACE = 377,\nT_NS_C = 378,\nT_DIR = 379,\nT_NS_SEPARATOR = 380,</pre></td><td><pre>T_INCLUDE = 129,\nT_INCLUDE_ONCE = 130,\nT_EVAL = 131,\nT_REQUIRE = 132,\nT_REQUIRE_ONCE = 133,\nT_LOGICAL_OR = 136,\nT_LOGICAL_XOR = 137,\nT_LOGICAL_AND = 138,\nT_PRINT = 139,\nT_PLUS_EQUAL = 140,\nT_MINUS_EQUAL = 141,\nT_MUL_EQUAL = 142,\nT_DIV_EQUAL = 143,\nT_CONCAT_EQUAL = 144,\nT_MOD_EQUAL = 145,\nT_AND_EQUAL = 146,\nT_OR_EQUAL = 147,\nT_XOR_EQUAL = 148,\nT_SL_EQUAL = 149,\nT_SR_EQUAL = 150,\nT_BOOLEAN_OR = 151,\nT_BOOLEAN_AND = 152,\nT_IS_EQUAL = 153,\nT_IS_NOT_EQUAL = 154,\nT_IS_IDENTICAL = 155,\nT_IS_NOT_IDENTICAL = 156,\nT_IS_SMALLER_OR_EQUAL = 157,\nT_IS_GREATER_OR_EQUAL = 158,\nT_SL = 159,\nT_SR = 160,\nT_INC = 161,\nT_DEC = 162,\nT_NEW = 164,\nT_INSTANCEOF = 165,\nT_CLONE = 167,\nT_LNUMBER = 168,\nT_DNUMBER = 170,\nT_STRING = 171,\nT_STRING_VARNAME = 172,\nT_VARIABLE = 173,\nT_NUM_STRING = 174,\nT_INLINE_HTML = 175,\nT_CHARACTER = 176,\nT_BAD_CHARACTER = 177,\nT_ENCAPSED_AND_WHITESPACE = 178,\nT_CONSTANT_ENCAPSED_STRING = 179,\nT_EXIT = 180,\nT_IF = 181,\nT_ELSEIF = 182,\nT_ELSE = 183,\nT_ENDIF = 184,\nT_ECHO = 185,\nT_DO = 186,\nT_WHILE = 187,\nT_ENDWHILE = 188,\nT_FOR = 189,\nT_ENDFOR = 190,\nT_FOREACH = 191,\nT_ENDFOREACH = 192,\nT_AS = 193,\nT_SWITCH = 194,\nT_ENDSWITCH = 195,\nT_CASE = 196,\nT_DEFAULT = 197,\nT_BREAK = 198,\nT_CONTINUE = 199,\nT_FUNCTION = 200,\nT_CONST = 201,\nT_RETURN = 202,\nT_GLOBAL = 203,\nT_STATIC = 204,\nT_VAR = 205,\nT_UNSET = 206,\nT_ISSET = 207,\nT_EMPTY = 208,\nT_CLASS = 209,\nT_EXTENDS = 210,\nT_OBJECT_OPERATOR = 211,\nT_DOUBLE_ARROW = 212,\nT_LIST = 213,\nT_ARRAY = 214,\nT_CLASS_C = 215,\nT_METHOD_C = 216,\nT_FUNC_C = 217,\nT_LINE = 218,\nT_FILE = 219,\nT_COMMENT = 221,\nT_DOC_COMMENT = 222,\nT_OPEN_TAG = 227,\nT_OPEN_TAG_WITH_ECHO = 228,\nT_CLOSE_TAG = 229,\nT_WHITESPACE = 230,\nT_START_HEREDOC = 231,\nT_END_HEREDOC = 232,\nT_DOLLAR_OPEN_CURLY_BRACES = 233,\nT_CURLY_OPEN = 234,\nT_DOUBLE_COLON = 235,\nT_PAAMAYIM_NEKUDOTAYIM = 235,\nT_TRY = 237,\nT_CATCH = 238,\nT_THROW = 239,\nT_INTERFACE = 240,\nT_IMPLEMENTS = 241,\nT_ABSTRACT = 242,\nT_FINAL = 243,\nT_PRIVATE = 244,\nT_PROTECTED = 245,\nT_PUBLIC = 246,\nT_BOOL_CAST = 286,\nT_INT_CAST = 289,\nT_DOUBLE_CAST = 295,\nT_STRING_CAST = 298,\nT_ARRAY_CAST = 301,\nT_OBJECT_CAST = 302,\nT_UNSET_CAST = 303,\nT_HALT_COMPILER = 351,</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Misc/user_error_handlers.php\">Misc/user_error_handlers.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/accessing%20property%20line%20number%20%2326052.php\">Objects/accessing%20property%20line%20number%20%2326052.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional1.php\">Objects/conditional1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional2.php\">Objects/conditional2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/conditional_base_class.php\">Objects/conditional_base_class.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/constant_test.php\">Objects/constant_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/evaled_parent.php\">Objects/evaled_parent.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/getter_setter_bug28444.php\">Objects/getter_setter_bug28444.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/instanceof.php\">Objects/instanceof.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/new_via_unknown_ctor.php\">Objects/new_via_unknown_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/object_creation_test.php\">Objects/object_creation_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/overrides%20%231285.php\">Objects/overrides%20%231285.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_field_test.php\">Objects/static_field_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_inheritence.php\">Objects/static_inheritence.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_method_test.php\">Objects/static_method_test.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/static_object_vars.php\">Objects/static_object_vars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/sys_class_const.php\">Objects/sys_class_const.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Objects/this2.php\">Objects/this2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/backreferences.php\">RegEx/backreferences.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/dolar_escape.php\">RegEx/dolar_escape.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/ereg.php\">RegEx/ereg.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedbackref.php\">RegEx/namedbackref.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/namedgroups.php\">RegEx/namedgroups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/preg_match_unmatched_groups.php\">RegEx/preg_match_unmatched_groups.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/preg_replace_eval.php\">RegEx/preg_replace_eval.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td><td><pre>ab&quot;01300 as&quot;00da sd&quot;0asdsa das asd 11asd a1sd a\nab&quot;01300 as&quot;00da sd&quot;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</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp-sql.php\">RegEx/regexp-sql.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/regexp_smiles.php\">RegEx/regexp_smiles.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/cache.php\">RegEx/Perl/cache.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep1.php\">RegEx/Perl/grep1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  [3] =&gt; string(3) &quot;1.5&quot;\n  [6] =&gt; string(5) &quot;58.54&quot;\n}</pre></td><td><pre>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.\narray(2) {\n  [3]=&gt;\n  string(3) &quot;1.5&quot;\n  [6]=&gt;\n  string(5) &quot;58.54&quot;\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/grep2.php\">RegEx/Perl/grep2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Food  array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [2] =&gt; squid\n  [3] =&gt; pear\n)\nFruit array\n(\n  [0] =&gt; apple\n  [1] =&gt; banana\n  [3] =&gt; pear\n)</pre></td><td><pre>Food  Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [2] =&gt; squid\n    [3] =&gt; pear\n)\nFruit Array\n(\n    [0] =&gt; apple\n    [1] =&gt; banana\n    [3] =&gt; pear\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match1.php\">RegEx/Perl/match1.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array [empty]\narray\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 3\n  )\n)</pre></td><td><pre>Array\n(\n)\nArray\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 3\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match10.php\">RegEx/Perl/match10.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 1231\n  [1] =&gt; 1\n  [2] =&gt; 23\n  [3] =&gt; 1\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1231\n    [1] =&gt; 1\n    [2] =&gt; 23\n    [3] =&gt; 1\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match2.php\">RegEx/Perl/match2.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; array\n  (\n    [0] =&gt; def\n    [1] =&gt; 0\n  )\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; Array\n    (\n        [0] =&gt; def\n        [1] =&gt; 0\n    )\n\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match3.php\">RegEx/Perl/match3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match4.php\">RegEx/Perl/match4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match5.php\">RegEx/Perl/match5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match6.php\">RegEx/Perl/match6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match7.php\">RegEx/Perl/match7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match8.php\">RegEx/Perl/match8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/match9.php\">RegEx/Perl/match9.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n(\n  [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n  [1] =&gt; 209.6.145.47\n  [2] =&gt; -\n  [3] =&gt; -\n  [4] =&gt; 22/Nov/2003:19:02:30 -0500\n  [5] =&gt; GET\n  [6] =&gt; /dir/doc.htm\n  [7] =&gt; HTTP\n  [8] =&gt; 1.0\n  [9] =&gt; 200\n  [10] =&gt; 6776\n  [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n  [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 209.6.145.47 - - [22/Nov/2003:19:02:30 -0500] &quot;GET /dir/doc.htm HTTP/1.0&quot; 200 6776 &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n    [1] =&gt; 209.6.145.47\n    [2] =&gt; -\n    [3] =&gt; -\n    [4] =&gt; 22/Nov/2003:19:02:30 -0500\n    [5] =&gt; GET\n    [6] =&gt; /dir/doc.htm\n    [7] =&gt; HTTP\n    [8] =&gt; 1.0\n    [9] =&gt; 200\n    [10] =&gt; 6776\n    [11] =&gt; &quot;http://search.yahoo.com/search?p=key+words=UTF-8&quot;\n    [12] =&gt; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)&quot;\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all1.php\">RegEx/Perl/match_all1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all2.php\">RegEx/Perl/match_all2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all3.php\">RegEx/Perl/match_all3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_all4.php\">RegEx/Perl/match_all4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/match_dollar.php\">RegEx/Perl/match_dollar.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/overflow.php\">RegEx/Perl/overflow.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(&quot;kfkaj +j k45&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż&#180;┐Ż3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td><td><pre>string(&quot;kfkaj +j k45ďż˝ďż˝ďż˝ďż˝ďż˝3#$%^&amp;kjakfjkaj|kfj&quot;)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote1.php\">RegEx/Perl/quote1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote2.php\">RegEx/Perl/quote2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/quote3.php\">RegEx/Perl/quote3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace1.php\">RegEx/Perl/replace1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace2.php\">RegEx/Perl/replace2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace3.php\">RegEx/Perl/replace3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace4.php\">RegEx/Perl/replace4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace5.php\">RegEx/Perl/replace5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace6.php\">RegEx/Perl/replace6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace7.php\">RegEx/Perl/replace7.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace8.php\">RegEx/Perl/replace8.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace9.php\">RegEx/Perl/replace9.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback1.php\">RegEx/Perl/replace_callback1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/replace_callback2.php\">RegEx/Perl/replace_callback2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split1.php\">RegEx/Perl/split1.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split2.php\">RegEx/Perl/split2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split3.php\">RegEx/Perl/split3.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split4.php\">RegEx/Perl/split4.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split5.php\">RegEx/Perl/split5.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/split6.php\">RegEx/Perl/split6.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/ungreedy.php\">RegEx/Perl/ungreedy.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>aaa\na\naaa\n\na\naa\naaa\naa\naaa</pre></td><td><pre>aaa\na\naaa\na\na\naa\naaa\naa\naaa</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"RegEx/Perl/unsuccessful-preg_match_all.php\">RegEx/Perl/unsuccessful-preg_match_all.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>0\n4\n1\n4</pre></td><td><pre>0\n4\n1\n7</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"RegEx/Perl/withoutdelimiters.php\">RegEx/Perl/withoutdelimiters.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/ArrayAccess_offsetExists.php\">SPL/ArrayAccess_offsetExists.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_ctor.php\">SPL/Autoload_ctor.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/Autoload_extends.php\">SPL/Autoload_extends.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"SPL/exceptions.php\">SPL/exceptions.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/addcslashes.php\">Strings/addcslashes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>\\f\\o\\o\\[ \\]\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td><td><pre>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.\n\nIssues a Warning:\n// echo addcslashes(&quot;zoo['.']&quot;, 'z..A');\n// output:  \\zoo['\\.']</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/addslashes.php\">Strings/addslashes.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/chunk_split.php\">Strings/chunk_split.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/concat.php\">Strings/concat.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring[binary](2) &quot;\\x41\\x42&quot;</pre></td><td><pre>string(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;aB&quot;\nstring(2) &quot;Ab&quot;\nstring(2) &quot;AB&quot;\nstring(2) &quot;ab&quot;\nstring(2) &quot;a1&quot;\nstring(2) &quot;1b&quot;\nstring(2) &quot;11&quot;\nstring(2) &quot;ab&quot;\nstring[binary](2) &quot;aB&quot;\nstring[binary](2) &quot;Ab&quot;\nstring[binary](2) &quot;AB&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/count_chars.php\">Strings/count_chars.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crc32.php\">Strings/crc32.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt.php\">Strings/crypt.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/crypt2.php\">Strings/crypt2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/echo.php\">Strings/echo.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/explode.php\">Strings/explode.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/get_html_translation_table.php\">Strings/get_html_translation_table.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;iuml;&amp;iquest;&amp;frac12;mer</pre></td><td><pre>&lt;hr&gt;[&amp;] =&gt; &amp;amp;\n[&gt;] =&gt; &amp;gt;\n[&lt;] =&gt; &amp;lt;\n[&quot;] =&gt; &amp;quot;\n&lt;hr&gt;Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Krďż˝mer</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/mb_strlen.php\">Strings/mb_strlen.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Fatal error: Call to undefined function mb_strlen() in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 4</pre></td><td><pre>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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/nl2br.php\">Strings/nl2br.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pack.php\">Strings/pack.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/pos.php\">Strings/pos.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Strings/runtime-quotes.php\">Strings/runtime-quotes.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: fopen(runtime-quotes2.txt): failed to open stream: Permission denied in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 33\n\nWarning: fwrite() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 35\nfwrite = ()\n\nWarning: fputs() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 38\nfputs = ()\n\nWarning: fclose() expects parameter 1 to be resource, boolean given in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Strings\\__input.txt on line 41\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td><td><pre>magic_quotes_runtime = 1, magic_quotes_sybase = 1\nfread = (x''y&quot;z)\nfgets = (x''y&quot;z)\nfile[0] = (x''y&quot;z)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\n\nWarning: 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.\n\nWarning: 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.\nfwrite = ()\n\nWarning: 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.\nfputs = ()\n\nWarning: 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.\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (x'y&quot;z)\nfgets = (x'y&quot;z)\nfile[0] = (x'y&quot;z)\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\nfread = (a\\'b&quot;\\\\ca\\)\nfgets = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nfile[0] = (a\\'b&quot;\\\\ca\\'b&quot;\\\\c)\nmagic_quotes_runtime = 1, magic_quotes_sybase = 1\ne'e\ne''e\ne'e\ne'e\nmagic_quotes_runtime = 0, magic_quotes_sybase = 0\ne'e\ne'e\ne'e\ne'e</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf.php\">Strings/sprintf.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/sprintf2.php\">Strings/sprintf2.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/strtr.php\">Strings/strtr.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_ireplace.php\">Strings/str_ireplace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_replace.php\">Strings/str_replace.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/str_word_count.php\">Strings/str_word_count.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/substr_operations.php\">Strings/substr_operations.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Strings/wordwrap.php\">Strings/wordwrap.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/advanced_serialize.php\">Variables/advanced_serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/arguments.php\">Variables/arguments.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/bitwise.php\">Variables/bitwise.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n0\n0\n5\n0\n5\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td><td><pre>string(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;08&quot;\nstring(2) &quot;31&quot;\nstring(4) &quot;3932&quot;\nstring(2) &quot;00&quot;\nstring(2) &quot;31&quot;\nstring(2) &quot;31&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(0) &quot;&quot;\nstring(10) &quot;7878787878&quot;\n0\n-9223372036854775808\n-9223372036854775808\n-9223372036854775803\n0\n-9223372036854775803\n40\n5\n45\nstring(48) &quot;000000000000000000000000000000000000000000000000&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(48) &quot;02486dbad60e4b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(14) &quot;31323331323331&quot;\nstring(2) &quot;30&quot;\nstring(14) &quot;31323331323331&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(2) &quot;30&quot;\nstring(16) &quot;3635343635343536&quot;\nstring(14) &quot;337a5e8be43d7a&quot;\nstring(14) &quot;00002130120201&quot;\nstring(48) &quot;337a7fbbf63f7b412fafef0548cc894270cbaf74177c2e42&quot;\nstring(16) &quot;347d598ce33a7e77&quot;\nstring(16) &quot;0200243214040100&quot;\nstring(48) &quot;367d7dbef73e7f772fafef0548cc894270cbaf74177c2e42&quot;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/comparisons.php\">Variables/comparisons.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/constant.php\">Variables/constant.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/extract.php\">Variables/extract.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(5)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; integer(2)\n  'non_existent' =&gt; integer(1)\n  'prefix_' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; 'hello'\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td><td><pre>EXTR_PREFIX_ALL\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_INVALID\ninteger(2)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_ad' =&gt; integer(2)\n  'prefix_non_existent' =&gt; integer(1)\n}\n&lt;hr&gt;EXTR_PREFIX_SAME\ninteger(4)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'non_existent' =&gt; integer(1)\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;EXTR_PREFIX_IF_EXISTS\ninteger(3)\narray\n{\n  '' =&gt; 'hello'\n  '0' =&gt; NULL\n  '000g' =&gt; 'hello'\n  'a d' =&gt; 'hello'\n  'ad' =&gt; NULL\n  'prefix_0' =&gt; integer(1)\n  'prefix_000g' =&gt; integer(1)\n  'prefix_ad' =&gt; integer(2)\n}\n&lt;hr&gt;</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/func_get_args.php\">Variables/func_get_args.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/is_number.php\">Variables/is_number.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/serialize.php\">Variables/serialize.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Variables/unserialize_objects.php\">Variables/unserialize_objects.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Variables/var_dumping.php\">Variables/var_dumping.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n        (\n            [0] =&gt; 1\n        )\n\n    [7] =&gt; stdClass Object\n        (\n        )\n\n    [8] =&gt; Resource id #1\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)#1 (0) {\n  }\n  [8]=&gt;\n  resource(1) of type (stream)\n}\narray (\n  0 =&gt; true,\n  1 =&gt; false,\n  2 =&gt; 1,\n  3 =&gt; 1.2,\n  4 =&gt; NULL,\n  5 =&gt; 'asdas',\n  6 =&gt; \n  array (\n    0 =&gt; 1,\n  ),\n  7 =&gt; \n  stdClass::__set_state(array(\n  )),\n  8 =&gt; NULL,\n)</pre></td><td><pre>Array\n(\n    [0] =&gt; 1\n    [1] =&gt; \n    [2] =&gt; 1\n    [3] =&gt; 1.2\n    [4] =&gt; \n    [5] =&gt; asdas\n    [6] =&gt; Array\n    (\n        [0] =&gt; 1\n    )\n\n    [7] =&gt; stdClass Object\n    (\n    )\n\n    [8] =&gt; resource id #4\n\n)\narray(9) {\n  [0]=&gt;\n  bool(true)\n  [1]=&gt;\n  bool(false)\n  [2]=&gt;\n  int(1)\n  [3]=&gt;\n  float(1.2)\n  [4]=&gt;\n  NULL\n  [5]=&gt;\n  string(5) &quot;asdas&quot;\n  [6]=&gt;\n  array(1) {\n    [0]=&gt;\n    int(1)\n  }\n  [7]=&gt;\n  object(stdClass)(0) {\n  }\n  [8]=&gt;\n  resource(4) of type (stream)\n}\narray\n(\n  '0' =&gt; true,\n  '1' =&gt; false,\n  '2' =&gt; 1,\n  '3' =&gt; 1.2,\n  '4' =&gt; NULL,\n  '5' =&gt; 'asdas',\n  '6' =&gt; array\n  (\n    '0' =&gt; 1\n  ),\n  '7' =&gt; class stdClass\n  {\n\n  },\n  '8' =&gt; NULL\n)</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/005.php\">Xml/005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/006.php\">Xml/006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/007.php\">Xml/007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/008.php\">Xml/008.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/009.php\">Xml/009.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/011.php\">Xml/011.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/013.php\">Xml/013.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/017.php\">Xml/017.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/018.php\">Xml/018.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/019.php\">Xml/019.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/020.php\">Xml/020.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/021.php\">Xml/021.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/025.php\">Xml/025.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n}\narray\n{\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'foo' =&gt; 'foobar'\n  'baz' =&gt; 'foobarbaz'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td><td><pre>array\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  'xhtml' =&gt; 'http://www.w3.org/TR/REC-html40'\n  'html' =&gt; 'http://www.w3.org/1999/xhtml'\n  'baz' =&gt; 'foobarbaz'\n  'foo' =&gt; 'foobar'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n  '' =&gt; 'http://www.w3.org/1999/xhtml'\n}\narray\n{\n}\narray\n{\n}</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/026.php\">Xml/026.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/027.php\">Xml/027.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/028.php\">Xml/028.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/029.php\">Xml/029.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/030.php\">Xml/030.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/032.php\">Xml/032.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>FALSE\nFALSE\nFALSE</pre></td><td><pre>TRUE\nTRUE\nTRUE</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/033.php\">Xml/033.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug26384.php\">Xml/bug26384.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28721.php\">Xml/bug28721.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug28817.php\">Xml/bug28817.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug32615.php\">Xml/bug32615.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug33853.php\">Xml/bug33853.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug34276.php\">Xml/bug34276.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug35342.php\">Xml/bug35342.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug36756.php\">Xml/bug36756.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/bug37277.php\">Xml/bug37277.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom002.php\">Xml/dom002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom003.php\">Xml/dom003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom006.php\">Xml/dom006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom007.php\">Xml/dom007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/dom_set_attr_node.php\">Xml/dom_set_attr_node.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xmlhandler.php\">Xml/xmlhandler.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;test begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;nocontent begins\n&lt;br/&gt;nocontent ends\n&lt;br/&gt;content begins\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;content ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;empty begins\n&lt;br/&gt;empty ends\n&lt;br/&gt;test ends\n&lt;br/&gt;Test ends\n&lt;br/&gt;\n&lt;br/&gt;</pre></td><td><pre>Test begins\n&lt;br/&gt;\n&lt;br/&gt;\nError: 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.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt001.php\">Xml/xslt001.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt002.php\">Xml/xslt002.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt003.php\">Xml/xslt003.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt004.php\">Xml/xslt004.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt005.php\">Xml/xslt005.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt006.php\">Xml/xslt006.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt007.php\">Xml/xslt007.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt010.php\">Xml/xslt010.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 10: EXSLT Support\n  \n  \n  Test Date : 0001-12-31Z\n    year                 : 1\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 3000-01-31\n    year                 : 3000\n    leap-year            : false\n    month-in-year        : 1\n    month-name           : January\n    month-abbreviation   : Jan\n    week-in-year         : 5\n    day-in-year          : 31\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 6\n    day-name             : Friday\n    day-abbreviation     : Fri\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 2000-02-29\n    year                 : 2000\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 3\n    day-name             : Tuesday\n    day-abbreviation     : Tue\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : 9990001-12-31Z\n    year                 : 9990001\n    leap-year            : false\n    month-in-year        : 12\n    month-name           : December\n    month-abbreviation   : Dec\n    week-in-year         : 1\n    day-in-year          : 365\n    day-in-month         : 31\n    day-of-week-in-month : 5\n    day-in-week          : 2\n    day-name             : Monday\n    day-abbreviation     : Mon\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN\n  \n  Test Date : -0004-02-29\n    year                 : -4\n    leap-year            : true\n    month-in-year        : 2\n    month-name           : February\n    month-abbreviation   : Feb\n    week-in-year         : 9\n    day-in-year          : 60\n    day-in-month         : 29\n    day-of-week-in-month : 5\n    day-in-week          : 1\n    day-name             : Sunday\n    day-abbreviation     : Sun\n    time                 : \n    hour-in-day          : NaN\n    minute-in-hour       : NaN\n    second-in-minute     : NaN</pre></td><td><pre>Test 10: EXSLT Support\nWarning: 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.\n\nWarning: Illegal string offset '-1' in D:\\Documents\\Projects\\Phalanger\\Main\\Testing\\Tests\\Phalanger.inc at expression on line 7, column 6.</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"failed\" colspan=\"5\"><a class=\"failed\" href=\"Xml/xslt011.php\">Xml/xslt011.php</a>: <font color=\"red\"><b>FAILED</b></font></td>\r\n</tr>\r\n<tr>\r\n<td class=\"failed\" valign=\"top\" rowspan=\"1\">Unexpected output</td><td class=\"failed\" valign=\"top\">No errors</td><td class=\"failed\" valign=\"top\">Success</td><td class=\"failed\" valign=\"top\" colspan=\"2\"><table><tr><td>Expected test output</td><td>Real script output</td></tr><tr><td><pre>Test 11: php:function Support\n\nWarning: 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\n&lt;?xml version=&quot;1.0&quot;?&gt;\nfoobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic</pre></td><td><pre>Test 11: php:function Support\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;foobar - secondArg\nfoobar - \nthis is from an external DomDocument\nfrom the Input Document\nstatic\nnot a DomNode object</pre></td></tr></table></td></tr>\r\n<tr class=\"status\">\r\n<td class=\"succeeded\" colspan=\"5\"><a class=\"succeeded\" href=\"Xml/xslt012.php\">Xml/xslt012.php</a>: <font color=\"green\"><b>SUCCEEDED</b></font></td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "Testing/Tests/Variables/Phalanger.inc",
    "content": "<?\r\n\r\nrequire('../Phalanger.inc');\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/advanced_serialize.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\terror_reporting(E_ALL & ~E_NOTICE);\r\n\r\n\t// note: test agains PHP >= 5.1 where Serializable was introduced\r\n\tclass C\r\n\t{\r\n\t\tvar $a = \"a\";\r\n\t\tvar $b = \"b\";\r\n\t\r\n\t\tfunction __sleep()\r\n\t\t{\r\n\t\t\techo \"__sleep\\n\";\r\n\t\t\treturn array(\"b\", \"are_you_kidding\");\r\n\t\t}\r\n\r\n\t\tfunction __wakeup()\r\n\t\t{\r\n\t\t\techo \"__wakeup\\n\";\r\n\t\t}\r\n\t}\r\n\t\r\n\tclass D implements Serializable\r\n\t{\r\n\t\tfunction serialize()\r\n\t\t{\r\n\t\t\techo \"serialize\\n\";\r\n\t\t\treturn \"coo-koo\";\r\n\t\t}\r\n\t\t\r\n\t\tfunction unserialize($x)\r\n\t\t{\r\n\t\t\techo \"unserialize\\n\";\r\n\t\t\techo \"$x\\n\";\r\n\t\t}\r\n\t}\r\n\r\n\t$x = new C;\r\n\t$x->a = \"new_a\";\r\n\t$x->b = \"new_b\";\r\n\t$y = serialize($x);\r\n\techo \"$y\\n\";\r\n\t$x = unserialize($y);\r\n\techo \"$x->a\\n\";\r\n\techo \"$x->b\\n\";\r\n\t\r\n\t$x = new D;\r\n\t$y = serialize($x);\r\n\t$x = unserialize($y);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Variables/arguments.php",
    "content": "[expect] \r\nNumber of arguments: 6<br>\r\nSecond argument is: 2<br>\r\nArgument 0 is: 1<br>\r\nArgument 1 is: 2<br>\r\nArgument 2 is: 3<br>\r\nArgument 3 is: 4<br>\r\nArgument 4 is: 5<br>\r\nArgument 5 is: 6<br>\r\n[file]\r\n<?\r\n  function A() \r\n  {\r\n    $numargs = func_num_args(); \r\n    echo \"Number of arguments: $numargs<br>\\n\"; \r\n    if ($numargs >= 2) \r\n    { \r\n      echo \"Second argument is: \" . func_get_arg (1) . \"<br>\\n\"; \r\n    } \r\n    $arg_list = func_get_args(); \r\n    \r\n    for ($i = 0; $i < $numargs; $i++) \r\n      echo \"Argument $i is: \" . $arg_list[$i] . \"<br>\\n\"; \r\n  }\r\n\r\n  A(1,2,3,4,5,6);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Variables/assign_copy.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\n\r\neval(\"\r\nfunction bar()\r\n{\r\n\treturn array(1 => 'x');\r\n}\r\n\");\r\n\r\nfunction foo()\r\n{\r\n    $a = $b = bar();\r\n    //$b = bar();\r\n    //$a = $b;\r\n\r\n    $a[1] = 'y';\r\n\tvar_dump($a != $b);\r\n}\r\n\r\nfoo();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/bitwise.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nvar_dump(bin2hex(\"12\" ^ \"9\"));\r\nvar_dump(bin2hex(\"12\" & \"9\"));\r\nvar_dump(bin2hex(\"12\" | \"9\"));\r\nvar_dump(bin2hex(\"9\" ^ \"12\"));\r\nvar_dump(bin2hex(\"9\" & \"12\"));\r\nvar_dump(bin2hex(\"9\" | \"12\"));\r\nvar_dump(bin2hex(\"1\" ^ \"1\"));\r\nvar_dump(bin2hex(\"1\" & \"1\"));\r\nvar_dump(bin2hex(\"1\" | \"1\"));\r\nvar_dump(bin2hex(\"\" ^ \"\"));\r\nvar_dump(bin2hex(\"\" & \"\"));\r\nvar_dump(bin2hex(\"\" | \"\"));\r\nvar_dump(bin2hex(\"xxxxx\" ^ \"\"));\r\nvar_dump(bin2hex(\"xxxxx\" & \"\"));\r\nvar_dump(bin2hex(\"xxxxx\" | \"\"));\r\nvar_dump(bin2hex(\"\" ^ \"\"));\r\nvar_dump(bin2hex(\"\" & \"\"));\r\nvar_dump(bin2hex(\"\" | \"\"));\r\nvar_dump(bin2hex(\"xxxxx\" & \"\"));\r\nvar_dump(bin2hex(\"xxxxx\" | \"\"));\r\n\r\necho\r\n  654878687987897897897897897 ^ 678784564654654654564564654654566564564,\"\\n\",\r\n  654878687987897897897897897 & 678784564654654654564564654654566564564,\"\\n\",\r\n  654878687987897897897897897 | 678784564654654654564564654654566564564,\"\\n\",\r\n  5 ^ 678784564654654654564564654654566564564,\"\\n\",\r\n  5 & 678784564654654654564564654654566564564,\"\\n\",\r\n  5 | 678784564654654654564564654654566564564,\"\\n\",\r\n  5 ^ 45,\"\\n\",\r\n  5 & 45,\"\\n\",\r\n  5 | 45,\"\\n\";\r\n\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) ^ pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) & pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) | pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(1231231 ^ pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(1231231 & pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(1231231 | pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) ^ 65465456));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) & 65465456));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) | 65465456));\r\nvar_dump(bin2hex(\"1231231\" ^ pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(\"1231231\" & pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(\"1231231\" | pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734)));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) ^ \"65465456\"));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) & \"65465456\"));\r\nvar_dump(bin2hex(pack(\"d*\",3546541.45646,3545646546421.897987,65465465431.89734) | \"65465456\"));\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/class_constants.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\n\tclass A\r\n\t{\r\n\t\tconst X = 'x1';\r\n\t\tconst Y = 'y1';\r\n\t\tconst Z = 'z1';\r\n\t}\r\n\r\n\tclass X extends A\r\n\t{\r\n\t\tconst A = '123';\r\n\t\tconst B = '456';\r\n\t\t\r\n\t\tstatic function test()\r\n\t\t{\r\n\t\t\tvar_dump(defined('A'));\r\n\t\t\tvar_dump(defined('B'));\r\n\t\t\tvar_dump(defined('self::A'));\r\n\t\t\tvar_dump(defined('self::B'));\r\n\t\t\tvar_dump(defined('self::C'));\r\n\t\t\tvar_dump(defined('self::X'));\r\n\t\t\tvar_dump(defined('self::Y'));\r\n\t\t\tvar_dump(defined('self::Z'));\r\n\t\t\t\r\n\t\t\tvar_dump(constant('A'));\r\n\t\t\tvar_dump(constant('B'));\r\n\t\t\tvar_dump(constant('C'));\r\n\t\t\tvar_dump(constant('X::A'));\r\n\t\t\tvar_dump(constant('X::B'));\r\n\t\t\t//var_dump(constant('X::C'));\r\n\t\t\tvar_dump(constant('self::X'));\r\n\t\t\tvar_dump(constant('self::Y'));\r\n\t\t\tvar_dump(constant('self::Z'));\r\n\t\t}\r\n\t}\r\n\t\r\n\tdefine('A', 'global A');\r\n\tdefine('B', 'global A');\r\n\tdefine('X::C', 'global X::C');\r\n\t\r\n\tvar_dump(defined('A'));\r\n\tvar_dump(defined('B'));\r\n\tvar_dump(defined('C'));\r\n\tvar_dump(defined('X::A'));\r\n\tvar_dump(defined('X::B'));\r\n\tvar_dump(defined('X::C'));\r\n\tX::test();\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/comparisons.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n  $op = array(\r\n    0.0,1.2,-8.7,\r\n    0,1,-5,\r\n    false,true,\r\n    \"\",\"0\",\"0.0\",\"0.1\",\"x\",\"y\",\".\",\r\n    null,\r\n    array(),array(0),array(1),array(1,2)\r\n  );\r\n  \r\n  $str = array(\r\n    '0.0','1.2','-8.7',\r\n    '0','1','-5',\r\n    'false','true',\r\n    '\"\"','\"0\"','\"0.0\"','\"0.1\"','\"x\"','\"y\"','\".\"',\r\n    'null',\r\n    'array()','array(0)','array(1)','array(1,2)'\r\n  );\r\n  \r\n  for($i=0;$i<count($op);$i++)\r\n  {\r\n    for($j=0;$j<count($op);$j++)\r\n    {\r\n      echo $str[$i];\r\n\r\n      $x = $op[$i];\r\n      $y = $op[$j];\r\n\r\n      echo ($x < $y) ? \" < \":\"\";\r\n      echo ($x == $y) ? \" = \":\"\";\r\n      echo ($x > $y) ? \" > \":\"\";\r\n    \r\n      echo $str[$j];\r\n\r\n      echo \"\\n\";  \r\n    }\r\n  } \r\n?>  "
  },
  {
    "path": "Testing/Tests/Variables/constant.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\ndefine(\"a\",3);\r\necho a.\" \".defined(\"a\").\" \".constant(\"a\");\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/constants_defined.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\neval('class A\r\n{\r\n\r\n}');\r\n\tvar_dump(constant('KONSTANTA')); // Warning: constant(): Couldn't find constant KONSTANTA\r\n\tvar_dump(KONSTANTA);\t\t\t\t// Notice: Use of undefined constant KONSTANTA - assumed 'KONSTANTA'\r\n\t//echo constant('A::X'); \t// Fatal error: Undefined class constant 'A::X'\r\n\t//echo A::X;\t\t\t\t// Fatal error: Undefined class constant 'X'\r\n\t//echo constant('X::A');\t// Fatal error: Class 'X' not found\r\n\t//echo X::A; \t\t\t\t// Fatal error: Class 'X' not found\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/extract refs.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\r\nfunction foo(&$x)\r\n{\r\n    extract(array(\"x\" => 123));\r\n}\r\n\r\n$x = 0;\r\n\r\nfoo($x);\r\n\r\necho $x;\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/extract.php",
    "content": "[expect php]\r\n[file]\r\n<?  \r\n\trequire('Phalanger.inc');\r\n  function extract_test($array,$type,$prefix)\r\n  {\r\n    ${\"a d\"} = \"hello\";\r\n    ${0} = \"hello\";\r\n    ${\"\"} = \"hello\";\r\n    $ad = null;\r\n    ${\"000g\"} = \"hello\";\r\n    $prefix_ad = \"hello\";\r\n      \r\n    __var_dump(extract($array,$type,$prefix));\r\n    unset($array,$type,$prefix);\r\n    $vars = get_defined_vars();\r\n    ksort($vars,SORT_STRING);\r\n    __var_dump($vars);\r\n  }\r\n\r\n  $a = array(12,\"a d\" => 1,\"ad\" => 1,\"0\" => 1,\"ad\" => 2,\"non_existent\" => 1, \"\" => 1,\"000g\" => 1);\r\n\r\n  echo \"EXTR_PREFIX_ALL\\n\";\r\n  extract_test($a,EXTR_PREFIX_ALL,\"prefix\");\r\n  echo \"<hr>\";\r\n  \r\n  echo \"EXTR_PREFIX_INVALID\\n\";\r\n  extract_test($a,EXTR_PREFIX_INVALID,\"prefix\");\r\n  echo \"<hr>\";\r\n  \r\n  echo \"EXTR_PREFIX_SAME\\n\";\r\n  extract_test($a,EXTR_PREFIX_SAME,\"prefix\");\r\n  echo \"<hr>\";\r\n  \r\n  echo \"EXTR_PREFIX_IF_EXISTS\\n\";\r\n  extract_test($a,EXTR_PREFIX_IF_EXISTS,\"prefix\");\r\n  echo \"<hr>\";\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/func_get_args.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n/*\r\n\r\n  Checks whether references are correctly dereferenced when calling args-aware function by name.\r\n \r\n*/\r\n\r\nfunction f($a)\r\n{\r\n  $args = func_get_args();\r\n  var_dump($args);\r\n  $args[0] = 4;\r\n}\r\n\r\nfunction g()\r\n{\r\n  $a = 1;\r\n  $f = \"f\";\r\n  $f($a);\r\n  var_dump($a);\r\n}\r\n\r\ng();\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/is_number.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nfunction test($x)\r\n{\r\n\techo is_numeric($x) ? \"1\":\"0\";\r\n}\r\n\r\nforeach (array(\"+\", \" \", \"2.\", \"2.e\", \"2.e+\", \"2.e+1\", \".e2\", \".\", \"1e\", \"-e2\") as $x)\r\n\ttest($x);\r\n\r\necho \"\\n\";\r\n$a = \"44e1c\";\r\necho (double)$a;\r\n?>"
  },
  {
    "path": "Testing/Tests/Variables/serialize.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\n\t$a = array(NULL, FALSE, TRUE, 0, 123456, \"\", \"Master Yoda\",\r\n\t\tarray(), array(1, 2, 3, \"\"), new stdClass());\r\n\t\t\r\n\techo serialize($a) . \"\\n\";\r\n\t\r\n\t$b = unserialize(serialize($a));\r\n\t\r\n\tif ($a == $b) echo \"OK1\\n\";\r\n\t\t\r\n\t$x = serialize(new stdClass);\r\n\t$x = str_replace(\"std\", \"XYZ\", $x);\r\n\t\r\n\t$y = unserialize($x);\r\n\tif ($y instanceOf __PHP_Incomplete_Class) echo \"OK2\\n\";\r\n\t\r\n\techo serialize($y);\r\n\r\n\r\n/*\t$b = array();\r\n\t$b[] =& $b;\t\r\n\t$a[] = $b;\r\n\t\r\n\t\r\n\t$b = array();\t\r\n\t$b[0] = 123;\r\n\t\r\n\tvar_dump($a);*/\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Variables/serialize_double.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction test()\r\n{\r\n  $double = 6.32;\r\n  $serialized = serialize($double);\r\n  $bad_double = unserialize($serialized);\r\n  $good_double = (double)\"6.32\";\r\n}\r\n\r\n// Run the test\r\ntest();"
  },
  {
    "path": "Testing/Tests/Variables/unserialize_objects.php",
    "content": "[expect php]\n[file]\n<?php\n\tclass MyClass {\n        public $pub;\n        protected $prot;\n        private $priv;\n        \n        function MyClass()\n        {\n            $this->pub = \"pub value\";\n            $this->prot = \"prot value\";\n            $this->priv = \"priv value\";\n        }\n        \n        function PrintMe()\n        {\n            echo \"\\$pub = \".$this->pub.\"<br />\";\n            echo \"\\$prot = \".$this->prot.\"<br />\";\n            echo \"\\$priv = \".$this->priv.\"<br />\";\n        }\n\t}\n\t\n    class MyDerivedClass extends MyClass {\n        public $pub_new;\n        protected $prot_new;\n        private $priv_new;\n        \n        function MyDerivedClass()\n        {\n            parent::__construct();\n            $this->pub_new = \"pub_new value\";\n            $this->prot_new = \"prot_new value\";\n            $this->priv_new = \"priv_new value\";\n        }\n        \n        function PrintMe()\n        {\n            parent::PrintMe();\n            echo \"\\$pub_new = \".$this->pub_new.\"<br />\";\n            echo \"\\$prot_new = \".$this->prot_new.\"<br />\";\n            echo \"\\$priv_new = \".$this->priv_new.\"<br />\";\n        }\n\t}\n\t\n\t$a = new MyDerivedClass();\n\n    $a->PrintMe();\n\t$data = serialize($a);\n\t\n\techo \"<br />\";\n\t\n\t$b = unserialize($data);\n\t$b->PrintMe();\n?>"
  },
  {
    "path": "Testing/Tests/Variables/var_dumping.php",
    "content": "[expect php]\r\n[file]\r\n<?\r\nprint_r(array(true,false,1,1.2,null,\"asdas\",array(1),new stdClass,STDIN));\r\nvar_dump(array(true,false,1,1.2,null,\"asdas\",array(1),new stdClass,STDIN));\r\nvar_export(array(true,false,1,1.2,null,\"asdas\",array(1),new stdClass,STDIN));\r\n?>"
  },
  {
    "path": "Testing/Tests/Xml/005.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$sxe = simplexml_load_string(<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n Plain text.\r\n <elem1 attr1='first'>\r\n  <!-- comment -->\r\n  <elem2>\r\n   Here we have some text data.\r\n   <elem3>\r\n    And here some more.\r\n    <elem4>\r\n     Wow once again.\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n</sxe>\r\nEOF\r\n);\r\n\r\n__var_dump(trim($sxe->elem1->elem2));\r\n__var_dump(trim($sxe->elem1->elem2->elem3));\r\n__var_dump(trim($sxe->elem1->elem2->elem3->elem4));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/006.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\n$sxe = simplexml_load_string(<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n Plain text.\r\n <elem1 attr1='first'>\r\n  Bla bla 1.\r\n  <elem2>\r\n   Here we have some text data.\r\n   <elem3>\r\n    And here some more.\r\n    <elem4>\r\n     Wow once again.\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n <elem11 attr2='second'>\r\n  Bla bla 2.\r\n  <elem111>\r\n   Foo Bar\r\n  </elem111>\r\n </elem11>\r\n</sxe>\r\nEOF\r\n);\r\n\r\nrequire('Phalanger.inc');\r\n\r\nforeach($sxe as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n\r\necho \"===CLONE===\\n\";\r\n\r\nforeach(clone $sxe as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n\r\necho \"===ELEMENT===\\n\";\r\n\r\nforeach($sxe->elem11 as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/007.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n <elem1 attr1='first'>\r\n  <elem2>\r\n   <elem3>\r\n    <elem4>\r\n     <?test processing instruction ?>\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n</sxe>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\necho \"===Property===\\n\";\r\n__var_dump($sxe->elem1);\r\necho \"===Array===\\n\";\r\n__var_dump($sxe['id']);\r\n__var_dump($sxe->elem1['attr1']);\r\necho \"===Set===\\n\";\r\n$sxe['id'] = \"Changed1\";\r\n__var_dump($sxe['id']);\r\n$sxe->elem1['attr1'] = 12;\r\n__var_dump($sxe->elem1['attr1']);\r\necho \"===Unset===\\n\";\r\nunset($sxe['id']);\r\n__var_dump($sxe['id']);\r\nunset($sxe->elem1['attr1']);\r\n__var_dump($sxe->elem1['attr1']);\r\necho \"===Misc.===\\n\";\r\n$a = 4;\r\n__var_dump($a);\r\n$dummy = $sxe->elem1[$a];\r\n__var_dump($a);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/008.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n <elem1 attr1='first'>\r\n  <elem2>\r\n   <elem3>\r\n    <elem4>\r\n     <?test processing instruction ?>\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n</sxe>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\n__var_dump($sxe->xpath(\"elem1/elem2/elem3/elem4\"));\r\n__var_dump(@$sxe->xpath(\"***\"));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/009.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$sxe = simplexml_load_string(<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n Plain text.\r\n <elem1 attr1='first'>\r\n  Bla bla 1.\r\n  <!-- comment -->\r\n  <elem2>\r\n   Here we have some text data.\r\n   <elem3>\r\n    And here some more.\r\n    <elem4>\r\n     Wow once again.\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n <elem11 attr2='second'>\r\n  Bla bla 2.\r\n </elem11>\r\n</sxe>\r\nEOF\r\n);\r\nforeach($sxe->children() as $name=>$val) {\r\n\t__var_dump($name);\r\n\t__var_dump(get_class($val));\r\n\t__var_dump(trim($val));\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/011.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n<foo>\r\n  <bar>bar</bar>\r\n  <baz>baz1</baz>\r\n  <baz>baz2</baz>\r\n</foo>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\necho \"===BAR===\\n\";\r\necho $sxe->bar;\r\necho \"\\n\";\r\n\r\necho \"===BAZ===\\n\";\r\necho $sxe->baz;\r\necho \"\\n\";\r\n\r\necho \"===BAZ0===\\n\";\r\necho $sxe->baz[0];\r\necho \"\\n\";\r\n\r\necho \"===BAZ1===\\n\";\r\nprint $sxe->baz[1];\r\necho \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/013.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n<foo>bar<baz/>bar</foo>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\n__var_dump((string)$sxe);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/017.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$xml =<<<EOF\r\n<people>\r\n   <person name=\"Joe\">\r\n     <child name=\"Ann\" />\r\n     <child name=\"Marray\" />\r\n   </person>\r\n   <person name=\"Boe\">\r\n     <child name=\"Joe\" />\r\n     <child name=\"Ann\" />\r\n   </person>\r\n</people>\r\nEOF;\r\n$xml1 =<<<EOF\r\n<people>\r\n   <person name=\"Joe\">\r\n     <child name=\"Ann\" />\r\n   </person>\r\n</people>\r\nEOF;\r\n\r\nfunction print_xml($xml) {\r\n  foreach($xml->children() as $person) {\r\n    echo \"person: \".$person['name'].\"\\n\";\r\n    foreach($person->children() as $child) {\r\n      echo \"  child: \".$child['name'].\"\\n\";\r\n    }\r\n  }\r\n}\r\n\r\nfunction print_xml2($xml) {\r\n  $persons = 2;\r\n  for ($i=0;$i<$persons;$i++) {\r\n    echo \"person: \".$xml->person[$i]['name'].\"\\n\";\r\n\t$children = 2;\r\n    for ($j=0;$j<$children;$j++) {\r\n      echo \"  child: \".$xml->person[$i]->child[$j]['name'].\"\\n\";\r\n    }\r\n  }\r\n}\r\n\r\nerror_reporting(E_ALL & ~E_NOTICE);\r\n\r\necho \"---11---\\n\";\r\nprint_xml(simplexml_load_string($xml));\r\necho \"---12---\\n\";\r\nprint_xml(simplexml_load_string($xml1));\r\necho \"---21---\\n\";\r\nprint_xml2(simplexml_load_string($xml));\r\necho \"---22---\\n\";\r\nprint_xml2(simplexml_load_string($xml1));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/018.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<people>\r\n   <person name=\"Joe\">\r\n     Text1\r\n     <child name=\"Ann\" />\r\n     Text2\r\n     <child name=\"Marray\" />\r\n     Text3\r\n   </person>\r\n   <person name=\"Boe\">\r\n     <child name=\"Joe\" />\r\n     <child name=\"Ann\" />\r\n   </person>\r\n</people>\r\nEOF;\r\n$xml1 =<<<EOF\r\n<people>\r\n   <person name=\"Joe\">\r\n     <child />\r\n   </person>\r\n</people>\r\nEOF;\r\n\r\nfunction traverse_xml($pad,$xml) {\r\n  foreach($xml->children() as $name => $node) {\r\n    echo $pad.\"<$name\";\r\n    foreach($node->attributes() as $attr => $value) {\r\n      echo \" $attr=\\\"$value\\\"\";\r\n    }\r\n    echo \">\\n\";\r\n    traverse_xml($pad.\"  \",$node);\r\n    echo $pad.\"</$name>\\n\";\r\n  }\r\n}\r\n\r\ntraverse_xml(\"\",simplexml_load_string($xml));\r\necho \"----------\\n\";\r\ntraverse_xml(\"\",simplexml_load_string($xml1));\r\necho \"---Done---\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/019.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$sxe = simplexml_load_string(<<<EOF\r\n<?xml version='1.0'?>\r\n<sxe id=\"elem1\">\r\n Plain text.\r\n <elem1 attr1='first'>\r\n  Bla bla 1.\r\n  <!-- comment -->\r\n  <elem2>\r\n   Here we have some text data.\r\n   <elem3>\r\n    And here some more.\r\n    <elem4>\r\n     Wow once again.\r\n    </elem4>\r\n   </elem3>\r\n  </elem2>\r\n </elem1>\r\n <elem11 attr2='second'>\r\n  Bla bla 2.\r\n  <elem111>\r\n   Foo Bar\r\n  </elem111>\r\n </elem11>\r\n</sxe>\r\nEOF\r\n);\r\n\r\nforeach($sxe->children() as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n\r\necho \"===CLONE===\\n\";\r\n\r\nforeach(clone $sxe->children() as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n\r\necho \"===ELEMENT===\\n\";\r\n\r\nforeach($sxe->elem11->children() as $name => $data) {\r\n\t__var_dump($name);\r\n\t__var_dump(trim($data));\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/020.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$doc = simplexml_load_string('<root><name attr=\"foo\">bar</name></root>');\r\nprint $doc->name[\"attr\"];\r\nprint \"\\n\";\r\nif ((string)$doc->name[\"attr\"] == \"foo\") {\r\n         print \"Works\\n\";\r\n} else {\r\n         print \"Error\\n\";\r\n}\r\nif ($doc->name[\"attr\"] == \"foo\") {\r\n         print \"Works\\n\";\r\n} else {\r\n         print \"Error\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/021.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$ok = 1;\r\n$doc = simplexml_load_string('<root><exists>foo</exists></root>');\r\nif(!isset($doc->exists)) {\r\n\t$ok *= 0;\r\n}\r\nif(isset($doc->doesnotexist)) {\r\n\t$ok *= 0;\r\n}\r\nif ($ok) {\r\n         print \"Works\\n\";\r\n} else {\r\n         print \"Error\\n\";\r\n}\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/025.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<?xml version='1.0'?>\r\n<xhtml:html xmlns:html='http://www.w3.org/1999/xhtml' xmlns:xhtml='http://www.w3.org/TR/REC-html40'>\r\n<xhtml:head><xhtml:title xmlns:xhtml='http://www.w3.org/TR/REC-html401'>bla</xhtml:title></xhtml:head>\r\n<xhtml:body html:title=\"b\">\r\n<html:h1>bla</html:h1>\r\n<foo:bar xmlns:foo='foobar' xmlns:baz='foobarbaz'/>\r\n</xhtml:body>\r\n</xhtml:html>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\n__var_dump($sxe->getNamespaces());\r\n__var_dump($sxe->getNamespaces(true));\r\n__var_dump($sxe->getDocNamespaces());\r\n__var_dump($sxe->getDocNamespaces(true));\r\n\r\n$xml =<<<EOF\r\n<?xml version='1.0'?>\r\n<html xmlns='http://www.w3.org/1999/xhtml'>\r\n<head><title xmlns='http://www.w3.org/TR/REC-html40'>bla</title></head>\r\n</html>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\n__var_dump($sxe->getNamespaces());\r\n__var_dump($sxe->getDocNamespaces());\r\n\r\n$xml =<<<EOF\r\n<?xml version='1.0'?>\r\n<root/>\r\nEOF;\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\n__var_dump($sxe->getNamespaces());\r\n__var_dump($sxe->getDocNamespaces());\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/026.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<people>\r\n  <person>Jane</person>\r\n</people>\r\nEOF;\r\n\r\nfunction traverse_xml($xml, $pad = '')\r\n{\r\n  $name = $xml->getName();\r\n  echo \"$pad<$name\";\r\n  foreach($xml->attributes() as $attr => $value)\r\n  {\r\n    echo \" $attr=\\\"$value\\\"\";\r\n  }\r\n  echo \">\" . trim($xml) . \"\\n\";\r\n  foreach($xml->children() as $node)\r\n  {\r\n    traverse_xml($node, $pad.'  ');\r\n  }\r\n  echo $pad.\"</$name>\\n\";\r\n}\r\n\r\n\r\n$people = simplexml_load_string($xml);\r\ntraverse_xml($people);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/027.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<people></people>\r\nEOF;\r\n\r\nfunction traverse_xml($xml, $pad = '')\r\n{\r\n  $name = $xml->getName();\r\n  echo \"$pad<$name\";\r\n  foreach($xml->attributes() as $attr => $value)\r\n  {\r\n    echo \" $attr=\\\"$value\\\"\";\r\n  }\r\n  echo \">\" . trim($xml) . \"\\n\";\r\n  foreach($xml->children() as $node)\r\n  {\r\n    traverse_xml($node, $pad.'  ');\r\n  }\r\n  echo $pad.\"</$name>\\n\";\r\n}\r\n\r\n\r\n$people = simplexml_load_string($xml);\r\ntraverse_xml($people);\r\n$people->person = 'Joe';\r\n$people->person['gender'] = 'male';\r\ntraverse_xml($people);\r\n$people->person = 'Jane';\r\ntraverse_xml($people);\r\n$people->person['gender'] = 'female';\r\n$people->person[1] = 'Joe';\r\n$people->person[1]['gender'] = 'male';\r\ntraverse_xml($people);\r\n@$people->person[3] = 'Minni-me';\r\n$people->person[2]['gender'] = 'male';\r\ntraverse_xml($people);\r\n//$people->person[3]['gender'] = 'error';\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/028.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<people></people>\r\nEOF;\r\n\r\nfunction traverse_xml($xml, $pad = '')\r\n{\r\n  $name = $xml->getName();\r\n  echo \"$pad<$name\";\r\n  foreach($xml->attributes() as $attr => $value)\r\n  {\r\n    echo \" $attr=\\\"$value\\\"\";\r\n  }\r\n  echo \">\" . trim($xml) . \"\\n\";\r\n  foreach($xml->children() as $node)\r\n  {\r\n    traverse_xml($node, $pad.'  ');\r\n  }\r\n  echo $pad.\"</$name>\\n\";\r\n}\r\n\r\n\r\n$people = simplexml_load_string($xml);\r\ntraverse_xml($people);\r\n$people->person['name'] = 'John';\r\ntraverse_xml($people);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/029.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<people>\r\n  <person name=\"Joe\"/>\r\n  <person name=\"John\">\r\n    <children>\r\n      <person name=\"Joe\"/>\r\n    </children>\r\n  </person>\r\n  <person name=\"Jane\"/>\r\n</people>\r\nEOF;\r\n\r\n$people = simplexml_load_string($xml);\r\n\r\nforeach($people as $person)\r\n{\r\n\t__var_dump((string)$person['name']);\r\n\t__var_dump(count($people));\r\n\t__var_dump(count($person));\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/030.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n$xml =<<<EOF\r\n<root s:att1=\"b\" att1=\"a\" \r\n      xmlns:s=\"urn::test\" xmlns:t=\"urn::test-t\">\r\n   <child1>test</child1>\r\n   <child1>test 2</child1>\r\n   <s:child3 />\r\n</root>\r\nEOF;\r\n\r\nrequire('Phalanger.inc');\r\n\r\n$sxe = simplexml_load_string($xml);\r\n\r\necho $sxe->child1[0].\"\\n\";\r\necho $sxe->child1[1].\"\\n\\n\";\r\n\r\n__var_dump(isset($sxe->child1[1]));\r\nunset($sxe->child1[1]);\r\n__var_dump(isset($sxe->child1[1]));\r\necho \"\\n\";\r\n\r\n$atts = $sxe->attributes(\"urn::test\");\r\n__var_dump(isset($atts[0]));\r\nunset($atts[0]);\r\n__var_dump(isset($atts[0]));\r\n__var_dump(isset($atts[TRUE]));\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/032.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<people>\r\n  <person name=\"Joe\"/>\r\n  <person name=\"John\">\r\n    <children>\r\n      <person name=\"Joe\"/>\r\n    </children>\r\n  </person>\r\n  <person name=\"Jane\"/>\r\n</people>\r\nEOF;\r\n\r\n$xml1 =<<<EOF\r\n<people>\r\n  <person name=\"John\">\r\n    <children>\r\n      <person name=\"Joe\"/>\r\n    </children>\r\n  </person>\r\n  <person name=\"Jane\"/>\r\n</people>\r\nEOF;\r\n\r\n\r\n$people = simplexml_load_string($xml);\r\n$people1 = simplexml_load_string($xml);\r\n$people2 = simplexml_load_string($xml1);\r\n\r\n__var_dump($people1 == $people);\r\n__var_dump($people2 == $people);\r\n__var_dump($people2 == $people1);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/033.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$xml =<<<EOF\r\n<people>\r\ntest\r\n  <person name=\"Joe\"/>\r\n  <person name=\"John\">\r\n    <children>\r\n      <person name=\"Joe\"/>\r\n    </children>\r\n  </person>\r\n  <person name=\"Jane\"/>\r\n</people>\r\nEOF;\r\n\r\n$foo = simplexml_load_string( \"<foo />\" );\r\n$people = simplexml_load_string($xml);\r\n\r\n__var_dump((bool)$foo);\r\n__var_dump((bool)$people);\r\n__var_dump((int)$foo);\r\n__var_dump((int)$people);\r\n__var_dump((double)$foo);\r\n__var_dump((double)$people);\r\n__var_dump(trim((string)$foo));\r\n__var_dump(trim((string)$people));\r\n//__var_dump((array)$foo);\r\n//__var_dump((array)$people);\r\n//__var_dump((object)$foo);\r\n//__var_dump((object)$people);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/Phalanger.inc",
    "content": "<?\r\nrequire('../Phalanger.inc');\r\n?>"
  },
  {
    "path": "Testing/Tests/Xml/area_list.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\r\n\r\n\t<xsl:output method=\"text\" encoding=\"UTF-8\"/>\r\n\r\n\t<xsl:key name=\"area\" match=\"ROW\" use=\"substring(translate(AREA_NAME, '&quot;', ''), 1, 1)\"/>\r\n<xsl:template match=\"*\">\r\n    HERE\r\n</xsl:template>\r\n</xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/area_name.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<AREA_NAME>\r\n <ROW>\r\n  <AREA_CODE>13</AREA_CODE>\r\n  <AREA_NAME>&quot;Автово&quot; м.</AREA_NAME>\r\n  <AREA_NAME_ENG>m.&quot;Avtovo&quot;</AREA_NAME_ENG>\r\n </ROW>\r\n</AREA_NAME>\r\n\r\n\r\n\r\n"
  },
  {
    "path": "Testing/Tests/Xml/book.xml",
    "content": "<?xml version=\"1.0\" ?>\r\n<books>\r\n <book>\r\n  <title>The Grapes of Wrath</title>\r\n  <author>John Steinbeck</author>\r\n </book>\r\n <book>\r\n  <title>The Pearl</title>\r\n  <author>John Steinbeck</author>\r\n </book>\r\n</books>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug26384.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$dom = new domDocument;\r\n$dom->load(dirname(__FILE__).\"/area_name.xml\");\r\nif(!$dom) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n$xsl = new domDocument;\r\n$xsl->load(dirname(__FILE__).\"/area_list.xsl\");\r\nif(!$xsl) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n$proc = new xsltprocessor;\r\n\r\nif($proc === false) {\r\n  echo \"Error while making xsltprocessor object\\n\";\r\n  exit;\r\n}\r\n\r\n$proc->importStylesheet($xsl);\r\nprint $proc->transformToXml($dom);\r\n\r\n//this segfaulted before\r\n// WTF? there's no sibling...\r\n//print $dom->documentElement->firstChild->nextSibling->nodeName;\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug28721.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nfunction print_node(DomNode $node) {\r\n  echo \"name (value): \" . $node->nodeName . \" (\" . $node->nodeValue . \")\\n\";\r\n}\r\n\r\nfunction print_node_r(DomNode $node) {\r\n  static $indent = \"\";\r\n  echo \"\\n\" . $indent;\r\n  print_node($node);\r\n\r\n  echo $indent . \"parent: \";\r\n  if ( $node->parentNode )\r\n    print_node($node->parentNode);\r\n  else\r\n    echo \"NULL\\n\";\r\n\r\n  echo $indent . \"previousSibling: \";\r\n  if ( $node->previousSibling )\r\n    print_node($node->previousSibling);\r\n  else\r\n    echo \"NULL\\n\";\r\n  \r\n  echo $indent . \"nextSibling: \";\r\n  if ( $node->nextSibling )\r\n    print_node($node->nextSibling);\r\n  else\r\n    echo \"NULL\\n\";\r\n\r\n  if ( !$node->hasChildNodes() )\r\n    return;\r\n  \r\n  foreach ($node->childNodes as $child) {\r\n\r\n    $old_indent  = $indent;\r\n    $indent .= \"  \";\r\n    print_node_r($child);\r\n    $indent = $old_indent;\r\n  }\r\n}\r\n\r\nfunction err_handler($errno, $errstr, $errfile, $errline) {\r\n//  echo \"Error ($errno) on line $errline: $errstr\\n\";\r\n  echo \"Error ($errno)\\n\";\r\n}\r\n\r\n// Record 'DocumentFragment is empty' warnings\r\nset_error_handler(\"err_handler\");\r\n\r\n$xml = new DomDocument();\r\n\r\n$p = $xml->createElement(\"p\");\r\n\r\n$p->appendChild($t1 = $xml->createTextNode(\" t1 \"));\r\n$p->appendChild($b = $xml->createElement(\"b\"));\r\n$b->appendChild($xml->createTextNode(\"X\"));\r\n$p->appendChild($t2 = $xml->createTextNode(\" t2 \"));\r\n$p->appendChild($xml->createTextNode(\" xxx \"));\r\n\r\nprint_node_r($p);\r\n\r\necho \"\\nAppend t1 to p:\\n\";\r\n$ret = $p->appendChild($t1);\r\n\r\nprint_node_r($p);\r\necho \"\\n\";\r\n\r\necho \"t1 == ret: \";\r\n__var_dump( $t1 === $ret );\r\n\r\n\r\n$d = $xml->createElement(\"div\");\r\n$d->appendChild($t3 = $xml->createTextNode(\" t3 \"));\r\n$d->appendChild($b = $xml->createElement(\"b\"));\r\n$b->appendChild($xml->createElement(\"X\"));\r\n$d->appendChild($t4 = $xml->createTextNode(\" t4 \"));\r\n$d->appendChild($xml->createTextNode(\" xxx \"));\r\n\r\necho \"\\ndiv:\\n\";\r\nprint_node_r($d);\r\n\r\necho \"\\nInsert t4 before t3:\\n\";\r\n\r\n$ret = $d->insertBefore($t4, $t3);\r\n\r\nprint_node_r($d);\r\necho \"\\n\";\r\n\r\n$frag = $xml->createDocumentFragment();\r\n\r\n$t5 = $frag->appendChild($xml->createTextNode(\" t5 \"));\r\n$frag->appendChild($i = $xml->createElement(\"i\"));\r\n$i->appendChild($xml->createTextNode(\" frob \"));\r\n$frag->appendChild($xml->createTextNOde(\" t6 \"));\r\n\r\necho \"\\np:\\n\";\r\nprint_node_r($p);\r\necho \"\\nFragment:\\n\";\r\nprint_node_r($frag);\r\n\r\necho \"\\nAppending fragment to p:\\n\";\r\n$p->appendChild($frag);\r\n\r\nprint_node_r($p);\r\necho \"\\nFragment:\\n\";\r\nprint_node_r($frag);\r\n\r\necho \"\\ndiv:\\n\";\r\nprint_node_r($d);\r\necho \"\\nInserting fragment before t4\\n\";\r\n$d->insertBefore($frag, $t4);\r\nprint_node_r($d);\r\n\r\necho \"\\np:\\n\";\r\nprint_node_r($p);\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug28817.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nclass z extends domDocument{\r\n\t/** variable can have name */\r\n\tpublic $p_array;\r\n\tpublic $p_variable;\r\n\r\n\tfunction __construct(){\r\n\t\t$this->p_array[] = 'bonus';\r\n\t\t$this->p_array[] = 'vir';\r\n\t\t$this->p_array[] = 'semper';\r\n\t\t$this->p_array[] = 'tiro';\r\n\r\n\t\t$this->p_variable = 'Cessante causa cessat effectus';\r\n\t}\t\r\n}\r\n\r\n$z=new z();\r\n__var_dump($z->p_array);\r\n__var_dump($z->p_variable);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug32615.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction __xml_norm($str)\r\n{\r\n\t$str = str_replace(\" /\", \"/\", $str);\r\n\tif ($str[strlen($str) - 1] != \"\\n\") return $str . \"\\n\";\r\n\telse return $str;\r\n}\r\n\r\n$dom = new DomDocument;\r\n$dom->formatOutput = true;\r\n\r\n$frag = $dom->createDocumentFragment();\r\n$frag->appendChild(new DOMElement('root'));\r\n$dom->appendChild($frag);\r\n$root = $dom->documentElement;\r\n\r\n$frag->appendChild(new DOMElement('first'));\r\n$root->appendChild($frag);\r\n\r\n$frag->appendChild(new DOMElement('second'));\r\n$root->appendChild($frag);\r\n\r\n$node = $dom->createElement('newfirst');\r\n$frag->appendChild($node);\r\n$root->replaceChild($frag, $root->firstChild);\r\n\r\nunset($frag);\r\n$frag = $dom->createDocumentFragment();\r\n\r\n$frag->appendChild(new DOMElement('newsecond'));\r\n$root->replaceChild($frag, $root->lastChild);\r\n\r\n$node = $frag->appendChild(new DOMElement('fourth'));\r\n$root->insertBefore($frag, NULL);\r\n\r\n$frag->appendChild(new DOMElement('third'));\r\n$node = $root->insertBefore($frag, $node);\r\n\r\n$frag->appendChild(new DOMElement('start'));\r\n$root->insertBefore($frag, $root->firstChild);\r\n\r\n$frag->appendChild(new DOMElement('newthird'));\r\n$root->replaceChild($frag, $node);\r\n\r\n$frag->appendChild(new DOMElement('newfourth'));\r\n$root->replaceChild($frag, $root->lastChild);\r\n\r\n$frag->appendChild(new DOMElement('first'));\r\n$root->replaceChild($frag, $root->firstChild->nextSibling);\r\n\r\n$root->removeChild($root->firstChild);\r\n\r\necho __xml_norm($dom->saveXML());\r\n\r\nwhile ($root->hasChildNodes()) {\r\n   $root->removeChild($root->firstChild);\r\n}\r\n\r\n$frag->appendChild(new DOMElement('first'));\r\n$root->insertBefore($frag, $root->firstChild);\r\n\r\n$node = $frag->appendChild(new DOMElement('fourth'));\r\n$root->appendChild($frag);\r\n\r\n$frag->appendChild(new DOMElement('second'));\r\n$frag->appendChild(new DOMElement('third'));\r\n$root->insertBefore($frag, $node);\r\n\r\necho __xml_norm($dom->saveXML());\r\n\r\n$frag = $dom->createDocumentFragment();\r\n$root = $dom->documentElement;\r\n$root->replaceChild($frag, $root->firstChild);\r\n\r\necho __xml_norm($dom->saveXML());\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug33853.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nfunction __autoload($className) {\r\n        var_dump($className);\r\n        exit();\r\n}\r\n\r\n$xsl = new DomDocument();\r\n$xsl->loadXML('<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n<xsl:stylesheet version=\"1.0\"\r\nxmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\nxmlns:php=\"http://php.net/xsl\">\r\n<xsl:template match=\"/\">\r\n<xsl:value-of select=\"php:function(\\'TeSt::dateLang\\')\" />\r\n</xsl:template>\r\n</xsl:stylesheet>');\r\n$inputdom = new DomDocument();\r\n$inputdom->loadXML('<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n<today></today>');\r\n\r\n$proc = new XsltProcessor();\r\n$proc->registerPhpFunctions();\r\n$xsl = $proc->importStylesheet($xsl);\r\n$newdom = $proc->transformToDoc($inputdom);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug34276.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$xml = <<<HERE\r\n<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n<foo xmlns=\"http://www.example.com/ns/foo\"\r\n     xmlns:fubar=\"http://www.example.com/ns/fubar\" attra=\"attra\" />\r\nHERE;\r\n\r\n$dom = new DOMDocument();\r\n$dom->loadXML($xml);\r\n$foo = $dom->documentElement;\r\nvar_dump($foo->hasAttributeNS('http://www.example.com/ns/foo', 'attra'));\r\nvar_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra'));\r\n\r\n$foo->setAttributeNS('http://www.example.com/ns/foo', 'attra', 'attranew');\r\n$foo->setAttributeNS('http://www.example.com/ns/fubar', 'attrb', 'attrbnew');\r\n$foo->setAttributeNS('http://www.example.com/ns/foo', 'attrc', 'attrc');\r\n\r\n__var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra'));\r\n__var_dump($foo->getAttributeNS('http://www.example.com/ns/fubar', 'attrb'));\r\n__var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attrc'));\r\n\r\n//print $dom->saveXML();\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug35342.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$dom = new DOMDocument();\r\n$dom->loadXML(\"<root><foo>foobar</foo><foo>foobar#2</foo></root>\");\r\n\r\n$nodelist = $dom->getElementsByTagName(\"foo\");\r\n\r\n__var_dump($nodelist->length);\r\n__var_dump(isset($nodelist->length));\r\n__var_dump(isset($nodelist->foo));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug36756.php",
    "content": "[expect]\r\nroot\r\nnodeType: 1\r\nchild\r\nnodeType: 1\r\n\r\n[file]\r\n<?php\r\n\r\n/* Node is preserved from removeChild */\r\n$dom = new DOMDocument();\r\n$dom->loadXML('<root><child/></root>');\r\n$xpath = new DOMXpath($dom);\r\n$node = $xpath->query('/root')->item(0);\r\necho $node->nodeName . \"\\n\";\r\n$dom->removeChild($GLOBALS['dom']->firstChild);\r\necho \"nodeType: \" . $node->nodeType . \"\\n\";\r\n\r\n/* Node gets destroyed during removeChild */\r\n$dom->loadXML('<root><child/></root>');\r\n$xpath = new DOMXpath($dom);\r\n$node = $xpath->query('//child')->item(0);\r\necho $node->nodeName . \"\\n\";\r\n$GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild);\r\n\r\necho \"nodeType: \" . $node->nodeType . \"\\n\";\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/bug37277.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nfunction __xml_norm($str)\r\n{\r\n\t$str = str_replace(\" /\", \"/\", $str);\r\n\tif ($str[strlen($str) - 1] != \"\\n\") return $str . \"\\n\";\r\n\telse return $str;\r\n}\r\n\r\n$dom1 = new DomDocument('1.0', 'UTF-8');\r\n\r\n$xml = '<foo />';\r\n$dom1->loadXml($xml);\r\n\r\n$node = clone $dom1->documentElement;\r\n\r\n$dom2 = new DomDocument('1.0', 'UTF-8');\r\n$dom2->appendChild($dom2->importNode($node->cloneNode(true), TRUE));\r\n\r\n$dom2->formatOutput = true;\r\necho __xml_norm($dom2->saveXML());\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/documentxpath.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n<!-- $Id: documentxpath.xsl,v 1.1 2003/10/27 15:12:20 chregu Exp $ -->\r\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" >\r\n    <xsl:output  method=\"xml\" encoding=\"iso-8859-1\" indent=\"no\"/>\r\n<xsl:template match=\"/\">\r\n\r\n<xsl:value-of select=\"document('compress.zlib://ext/xsl/tests/xslt.xsl.gz')/xsl:stylesheet/xsl:param/@name\"/>\r\n</xsl:template>\r\n    \r\n </xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/dom002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\n$xml = <<<HERE\r\n<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n<foo xmlns=\"http://www.example.com/ns/foo\"\r\n     xmlns:fubar=\"http://www.example.com/ns/fubar\">\r\n  <bar><test1 /></bar>\r\n  <bar><test2 /></bar>\r\n  <fubar:bar><test3 /></fubar:bar>\r\n  <fubar:bar><test4 /></fubar:bar>\r\n</foo>\r\nHERE;\r\n\r\nfunction dump($elems) {\r\n\tforeach ($elems as $elem) {\r\n\t\t__var_dump($elem->nodeName);\r\n\t\tdump($elem->childNodes);\r\n\t}\r\n}\r\n\r\n$dom = new DOMDocument();\r\n$dom->loadXML($xml);\r\n$doc = $dom->documentElement;\r\ndump($dom->getElementsByTagName('bar'));\r\ndump($doc->getElementsByTagName('bar'));\r\ndump($dom->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar'));\r\ndump($doc->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar'));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/dom003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$dom = new domdocument;\r\n$dom->load(dirname(__FILE__).\"/book.xml\");\r\n$rootNode = $dom->documentElement;\r\nprint \"--- Catch exception with try/catch\\n\";\r\ntry {\r\n    $rootNode->appendChild($rootNode);\r\n} catch (domexception $e) {\r\n    echo $e->getCode();\r\n}\r\n//print \"--- Don't catch exception with try/catch\\n\";\r\n//$rootNode->appendChild($rootNode);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/dom006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nClass books extends domDocument {\r\n    function addBook($title, $author) {\r\n        $titleElement = $this->createElement(\"title\");\r\n        $titleElement->appendChild($this->createTextNode($title));\r\n        $authorElement = $this->createElement(\"author\");\r\n        $authorElement->appendChild($this->createTextNode($author));\r\n\r\n        $bookElement = $this->createElement(\"book\");\r\n\r\n        $bookElement->appendChild($titleElement);\r\n        $bookElement->appendChild($authorElement);\r\n        $this->documentElement->appendChild($bookElement);\r\n    }\r\n   \r\n}\r\n\r\n$dom = new books;\r\n$dom->formatOutput = true;\r\n\r\n$dom->load(dirname(__FILE__).\"/book.xml\");\r\n$dom->addBook(\"PHP de Luxe\", \"Richard Samar, Christian Stocker\");\r\necho __xml_norm($dom->saveXML());\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/dom007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n$xml = <<< EOXML\r\n<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n<!DOCTYPE courses [\r\n<!ELEMENT courses (course+)>\r\n<!ELEMENT course (title, description, temp*)>\r\n<!ATTLIST course cid ID #REQUIRED>\r\n<!ELEMENT title (#PCDATA)>\r\n<!ELEMENT description (#PCDATA)>\r\n<!ELEMENT temp (#PCDATA)>\r\n<!ATTLIST temp vid ID #REQUIRED>\r\n<!ENTITY test 'http://www.hpl.hp.com/semweb/2003/query_tester#'>\r\n<!ENTITY rdf  'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>\r\n<!NOTATION GIF PUBLIC \"-\" \"image/gif\">\r\n<!ENTITY myimage PUBLIC \"-\" \"mypicture.gif\" NDATA GIF>\r\n]>\r\n<courses>\r\n   <course cid=\"c1\">\r\n      <title>Basic Languages</title>\r\n      <description>Introduction to Languages</description>\r\n   </course>\r\n   <course cid=\"c6\">\r\n      <title>French I</title>\r\n      <description>Introduction to French</description>\r\n      <temp vid=\"c7\">\r\n      </temp>\r\n   </course>\r\n</courses>\r\nEOXML;\r\n\r\n$dom = new DOMDocument();\r\n$dom->loadXML($xml);\r\n\r\n$dtd = $dom->doctype;\r\n\r\n/* Notation Tests */\r\n$nots = $dtd->notations;\r\n\r\n$length = $nots->length;\r\necho \"Length: \".$length.\"\\n\";\r\n\r\nforeach ($nots AS $key=>$node) {\r\n\techo \"Key $key: \".$node->nodeName.\" (\".$node->systemId.\") (\".$node->publicId.\")\\n\";\r\n}\r\nprint \"\\n\";\r\nfor($x=0; $x < $length; $x++) {\r\n\techo \"Index $x: \".$nots->item($x)->nodeName.\" (\".$nots->item($x)->systemId.\") (\".$nots->item($x)->publicId.\")\\n\";\r\n}\r\n\r\necho \"\\n\";\r\n$node = $nots->getNamedItem('xxx');\r\nvar_dump($node);\r\n\r\necho \"\\n\";\r\n\r\n/* Entity Decl Tests */\r\n$ents = $dtd->entities;\r\n$ents_ = array();\r\nforeach ($ents as $key=>$node)\r\n{\r\n\t$ents_[$key] = $node;\r\n}\r\n$ents = $ents_;\r\nusort($ents, \"sortfunc\");\r\n\r\nfunction sortfunc($a, $b)\r\n{\r\n\treturn strcmp($a->nodeName, $b->nodeName);\r\n}\r\n\r\n$length = $dtd->entities->length;\r\necho \"Length: \".$length.\"\\n\";\r\nforeach ($ents AS $key=>$node) {\r\n\techo \"Key: $key Name: \".$node->nodeName.\"\\n\";\r\n}\r\n\r\necho \"\\n\";\r\n\r\n$node = $dtd->entities->item(3);\r\nvar_dump($node);\r\n$node = $dtd->entities->getNamedItem('xxx');\r\nvar_dump($node);\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/dom_set_attr_node.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$xml = <<<HERE\r\n<?xml version=\"1.0\" ?>\r\n<root a=\"b\" />\r\nHERE;\r\n\r\n$xml2 = <<<HERE\r\n<?xml version=\"1.0\" ?>\r\n<doc2 />\r\nHERE;\r\n\r\n$dom = new DOMDocument();\r\n$dom->loadXML($xml);\r\n$root = $dom->documentElement;\r\n$attr = $root->getAttributeNode('a');\r\n\r\n$dom2 = new DOMDocument();\r\n$dom2->loadXML($xml2);\r\n$root2 = $dom2->documentElement;\r\ntry {\r\n   $root2->setAttributeNode($attr);\r\n} catch (domexception $e) {\r\n    echo $e->getCode();\r\n} \r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/exslt.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<page>\r\n  <!-- valid xs:date -->\r\n  <date date=\"0001-12-31Z\"/>\r\n  <date date=\"3000-01-31\"/>\r\n  <date date=\"2000-02-29\"/>\r\n  <date date=\"9990001-12-31Z\"/>\r\n  <date date=\"-0004-02-29\"/>\r\n</page>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/exslt.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n<xsl:stylesheet version=\"1.0\" \r\n                xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\n                xmlns:date=\"http://exslt.org/dates-and-times\"\r\n                extension-element-prefixes=\"date\">\r\n\r\n<xsl:output method=\"text\"/>\r\n\r\n<xsl:template match=\"date\">\r\n  Test Date : <xsl:value-of select=\"@date\"/>\r\n    <!-- dateTime, date, gYearMonth or gYear; else NaN -->\r\n    year                 : <xsl:value-of select=\"date:year(@date)\"/>\r\n    <!-- dateTime, date, gYearMonth or gYear; else NaN -->\r\n    leap-year            : <xsl:value-of select=\"date:leap-year(@date)\"/>\r\n    <!-- dateTime, date, gYearMonth, gMonth or gMonthDay; else NaN -->\r\n    month-in-year        : <xsl:value-of select=\"date:month-in-year(@date)\"/>\r\n    <!-- dateTime, date, gYearMonth or gMonth; else '' -->\r\n    month-name           : <xsl:value-of select=\"date:month-name(@date)\"/>\r\n    <!-- dateTime, date, gYearMonth or gMonth; else '' -->\r\n    month-abbreviation   : <xsl:value-of select=\"date:month-abbreviation(@date)\"/>\r\n    <!-- dateTime or date; else NaN -->\r\n    week-in-year         : <xsl:value-of select=\"date:week-in-year(@date)\"/>\r\n    <!-- dateTime, date; else NaN -->\r\n    day-in-year          : <xsl:value-of select=\"date:day-in-year(@date)\"/>\r\n    <!-- dateTime, date, gMonthDay or gDay; else NaN -->\r\n    day-in-month         : <xsl:value-of select=\"date:day-in-month(@date)\"/>\r\n    <!-- dateTime, date; else NaN -->\r\n    day-of-week-in-month : <xsl:value-of select=\"date:day-of-week-in-month(@date)\"/>\r\n    <!-- dateTime, date; else NaN -->\r\n    day-in-week          : <xsl:value-of select=\"date:day-in-week(@date)\"/>\r\n    <!-- dateTime or date; else NaN -->\r\n    day-name             : <xsl:value-of select=\"date:day-name(@date)\"/>\r\n    <!-- dateTime or date; else NaN -->\r\n    day-abbreviation     : <xsl:value-of select=\"date:day-abbreviation(@date)\"/>\r\n    <!-- dateTime or time;  else '' -->\r\n    time                 : <xsl:value-of select=\"date:time(@date)\"/>\r\n    <!-- dateTime or time;  else NaN -->\r\n    hour-in-day          : <xsl:value-of select=\"date:hour-in-day(@date)\"/>\r\n    <!-- dateTime or time;  else NaN -->\r\n    minute-in-hour       : <xsl:value-of select=\"date:minute-in-hour(@date)\"/>\r\n    <!-- dateTime or time;  else NaN -->\r\n    second-in-minute     : <xsl:value-of select=\"date:second-in-minute(@date)\"/>\r\n</xsl:template>\r\n\r\n</xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/html_save.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  $html_text = '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<HTML>\r\n<HEAD>\r\n<TITLE>Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002</TITLE>\r\n<meta http-equiv=\"Content-type\" content=\"text/html;charset=iso-8859-1\">\r\n<meta name=\"description\" content=\"Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002\">\r\n<meta name=\"keywords\" content=\"TDR102002 Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines\">\r\n<LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/styles/srh.css\">\r\n</HEAD>\r\n<BODY bgcolor=\"#ffffff\" text=\"#000000\">\r\n\r\n\r\n\r\n\r\n<table width=\"100%\"><tr><td><center><table width=\"95%\"><tr><td>\r\n\r\n<center>\r\n<table class=\"bannerback\">\r\n\t<tr>\r\n\t\t<td><a href=\"http://www.stormerhobbies.com/\"><img src=\"../banners/ranban.jpg\" alt=\"Stormer Hobbies.com\" width=985 height=100 border=0></a></td>\r\n\t\t<td><table>\r\n\t\t\t<tr><td><a href=\"https://twitter.com/#!/stormerhobbies\"><img src=\"../banners/twi.jpg\" alt=\"twitter\"></a></td></tr>\r\n\t\t\t<tr><td><a href=\"http://www.facebook.com/StormerHobbies\"><img src=\"../banners/fbi.jpg\" alt=\"twitter\"></a></td></tr>\r\n\t\t</table></td>\r\n\t</tr>\r\n</table>\r\n</center>\r\n\r\n\r\n<!--<center>\r\n<table class=\"bannerback\" width=\"100%\">\r\n\t<tr>\r\n\t\t<td align=\"center\"><a href=\"http://www.stormerhobbies.com/\"><img src=\"../banners/ranban.jpg\" alt=\"Stormer Hobbies.com\" width=985 height=100 border=0></a></td>\r\n\t</tr>\r\n</table>\r\n</center>\r\n-->\r\n\r\n<!--\r\n<center><table><tr><td>\r\n</td>\r\n<td>\r\n <table>\r\n  <tr>\r\n    <td width=\"15\" align=\"right\"><img border=\"0\" src=\"../images/padlock.gif\" alt=\"SSL Security\" width=\"12\" height=\"14\"></td>\r\n    <td align=\"center\">This site features Smart Shopping Carts and state of the art Secure Servers.</td>\r\n    <td width=\"15\"><img border=\"0\" src=\"../images/padlock.gif\" alt=\"SSL Security\" width=\"12\" height=\"14\"></td>\r\n  </tr>\r\n </table>\r\n</td>\r\n<td>\r\n</td>\r\n</tr>\r\n</table></center>\r\n-->\r\n<hr>\r\n<center><a\r\nhref=\"http://www.stormerhobbies.com\">Storefront</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>\r\n</center>\r\n<hr>\r\n<p>\r\n\r\n\r\n<table><tr>\r\n<td valign=\"top\" width=200>\r\n<b>Part Number: <font color=\"#0000ff\">TDR102002</font></b><br>\r\n<b>Manufacturer: Durango</b><br>\r\n<font size=\"+1\"><b>Price:</b></font><br>\r\n$549.99 - <i>Temporarily out of stock, on order</i><br>\r\n\r\n<p>\r\n\r\nDNX408 1/8 Off-road Buggy Kit for .21 Nitro engines\r\n<FORM METHOD=\"POST\" ACTION=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl\">\r\n\t<table border bgcolor=\"#dddddd\">\r\n\t\t<tr>\r\n\t\t\t<td>\r\n\t\t\t\t<center>\r\n\t\t\t\t\t<table>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td align=center>\r\n\t\t\t\t\t\t\t\t<font size=\"+1\" color=\"#000088\"><b>What would you like to do?</b></font><br>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<table width=\"100%\"border bgcolor=\"#aaaaaa\">\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"hidden\" NAME=\"pn\" VALUE=\"TDR102002\">\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"hidden\" NAME=\"src\" VALUE=\"ns\">\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"View Cart\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"Add to Cart\"><br>\r\n\t\t\t\t\t\t\t\t\t\t\t Quantity: <INPUT TYPE=\"text\" NAME=\"quantity\" VALUE=\"1\" SIZE=\"4\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"Check Out\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td align=center><font color=\"#000088\" size=\"+1\"><i>Temporarily out of stock, on order</i></font></td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t</center>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n</FORM>\r\n\r\n</td>\r\n<td>&nbsp;</td>\r\n<td>\r\n<center><img src=\"/pics/tdr102002.jpg\" alt=\"TDR102002 image\" title=\"TDR102002 image\"></center>\r\n</td>\r\n</tr></table>\r\n&nbsp;<br>\r\n\r\n<p>\r\n\r\n\r\n\r\n\r\n\r\n<font size=\"+1\"><b>Extended Product Information:</b></font><br>\r\nAs 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, \r\nso Team Durango have designed a car that is as strong as it is fast!\r\n<p>\r\nThe 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 \r\nDNX408 class-leading center of gravity, with almost all the hardware sunk down into it.\r\n<p>\r\nHard 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 \r\nminimal flex, the best bearing alignment, dirt shielding and super-easy removal of whole differential and CVD, just like the DEX410.\r\n<p>\r\nPTFE 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 \r\nabsorbers on the DNX408 are as smooth as possible giving you the best \\'feel\\' of your car as it soaks-up the roughest of tracks.\r\n<p>\r\nThe 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 \r\nengine alignment.\r\n<p>\r\nIn-board and out-board CVD joints front and rear, with rubber CVD boot protection, minimize debris problems in the race and maintenance between meetings.\r\n<p>\r\nThe fuel tank inlet complete with dirt guard - is center-mounted for easy pit-lane access.\r\n<p>\r\nThe 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 \r\nair flow over the rear wing; it also helps with heat management.\r\n<p>\r\nThe 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 \r\nthrough the body. The central engine and low bodyshell mean that all shock bodies are also in clean airflow.\r\n<p>\r\nThe 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 \r\nshock.\r\n<p>\r\nThe 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 \r\nstability, they help to protect the engine head in crashes.\r\n<p>\r\nThe 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 \r\nin the super-strong yet incredibly lightweight chassis.\r\n<p>\r\nThe steering is set at the same up-angle as the kickup to remove bump steer, while the Ackerman link moves under the front CVD.\r\n<p>\r\nThe 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 \r\nway out back which means more wheelies than down-force.\r\n<p>\r\n<b>Kit includes:</b><br>\r\nFull Rolling chassis with 3 shoe clutch set, clear body, black wing, and white dish rims.\r\n<p>\r\n<b>Kit Requires:</b><br>\r\n<li>Radio system with 2 high torque servos<br>\r\n<li>.21 size nitro race engine<br>\r\n<li>Tuned pipe and manifold to fit engine<br>\r\n<li>Tires<br>\r\n<li>Flat Receiver battery pack<br>\r\n<li>Glow igniter<br>\r\n<li>Fuel<br>\r\n<li>Misc. tools for assembly and paint for body<br>\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_2.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_3.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_4.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_5.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_6.jpg\">\r\n<p>\r\n\r\n\r\n\r\n\r\n<big></big><br>\r\n\r\n<p>\r\n\r\n\r\n\r\n<center>\r\n\r\n</center>\r\n<p>\r\n\r\n\r\n\r\n\r\n\r\n<center>\r\n<hr width=\"100%\">\r\n<table width=\"100%\">\r\n<tr>\r\n  <td class=\"linkbar\" align=\"center\"><a\r\n\thref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<!--<a\r\n\thref=\"http://www.stormerhobbies.com/links.shtml\">Links</a>&nbsp;|&nbsp;--><a\r\n\thref=\"http://www.stormerhobbies.com/site_customer_service.shtml\">Customer&nbsp;Service</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_about_us.shtml\">About&nbsp;us</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\n\thref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\n\thref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>&nbsp;|&nbsp;<a \r\n\thref=\"http://www.stormerhobbies.com/site_privacy.shtml\">Privacy&nbsp;Statement</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_terms.shtml\">Terms&nbsp;of&nbsp;Use</a></td>\r\n</tr>\r\n</table>\r\n\r\n<!--\r\n<a\r\nhref=\"http://www.stormerhobbies.com/\">Storefront</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>\r\n-->\r\n\r\n<table border=\"0\" cellspacing=\"1\" width=\"100%\">\r\n<tr>\r\n  <td width=\"100%\" bgcolor=\"#888888\" align=center>\r\n\t<font size=\"-1\">Copyright &copy;2000-2012 <b>Stormer Hobbies, Inc.</b> All Rights Reserved</font>\r\n  </td>\r\n</tr>\r\n</table>\r\n</center>\r\n\r\n\r\n\r\n</td></tr></table>\r\n</center>\r\n</td></tr></table>\r\n</BODY>\r\n</HTML>';\r\n\r\n  $html = new DOMDocument();\r\n\r\n  // Parse the HTML into an XML document. This parser is reasonably tolerant.\r\n  $html->loadHtml(str_replace('&nbsp;', ' ', $html_text));\r\n\r\n  $html->saveHtmlFile(\"html_save.html\");\r\n"
  },
  {
    "path": "Testing/Tests/Xml/html_xpath.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n  $html_text = '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n<HTML>\r\n<HEAD>\r\n<TITLE>Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002</TITLE>\r\n<meta http-equiv=\"Content-type\" content=\"text/html;charset=iso-8859-1\">\r\n<meta name=\"description\" content=\"Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines, TDR102002\">\r\n<meta name=\"keywords\" content=\"TDR102002 Durango DNX408 1/8 Off-road Buggy Kit for .21 Nitro engines\">\r\n<LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/styles/srh.css\">\r\n</HEAD>\r\n<BODY bgcolor=\"#ffffff\" text=\"#000000\">\r\n\r\n\r\n\r\n\r\n<table width=\"100%\"><tr><td><center><table width=\"95%\"><tr><td>\r\n\r\n<center>\r\n<table class=\"bannerback\">\r\n\t<tr>\r\n\t\t<td><a href=\"http://www.stormerhobbies.com/\"><img src=\"../banners/ranban.jpg\" alt=\"Stormer Hobbies.com\" width=985 height=100 border=0></a></td>\r\n\t\t<td><table>\r\n\t\t\t<tr><td><a href=\"https://twitter.com/#!/stormerhobbies\"><img src=\"../banners/twi.jpg\" alt=\"twitter\"></a></td></tr>\r\n\t\t\t<tr><td><a href=\"http://www.facebook.com/StormerHobbies\"><img src=\"../banners/fbi.jpg\" alt=\"twitter\"></a></td></tr>\r\n\t\t</table></td>\r\n\t</tr>\r\n</table>\r\n</center>\r\n\r\n\r\n<!--<center>\r\n<table class=\"bannerback\" width=\"100%\">\r\n\t<tr>\r\n\t\t<td align=\"center\"><a href=\"http://www.stormerhobbies.com/\"><img src=\"../banners/ranban.jpg\" alt=\"Stormer Hobbies.com\" width=985 height=100 border=0></a></td>\r\n\t</tr>\r\n</table>\r\n</center>\r\n-->\r\n\r\n<!--\r\n<center><table><tr><td>\r\n</td>\r\n<td>\r\n <table>\r\n  <tr>\r\n    <td width=\"15\" align=\"right\"><img border=\"0\" src=\"../images/padlock.gif\" alt=\"SSL Security\" width=\"12\" height=\"14\"></td>\r\n    <td align=\"center\">This site features Smart Shopping Carts and state of the art Secure Servers.</td>\r\n    <td width=\"15\"><img border=\"0\" src=\"../images/padlock.gif\" alt=\"SSL Security\" width=\"12\" height=\"14\"></td>\r\n  </tr>\r\n </table>\r\n</td>\r\n<td>\r\n</td>\r\n</tr>\r\n</table></center>\r\n-->\r\n<hr>\r\n<center><a\r\nhref=\"http://www.stormerhobbies.com\">Storefront</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>\r\n</center>\r\n<hr>\r\n<p>\r\n\r\n\r\n<table><tr>\r\n<td valign=\"top\" width=200>\r\n<b>Part Number: <font color=\"#0000ff\">TDR102002</font></b><br>\r\n<b>Manufacturer: Durango</b><br>\r\n<font size=\"+1\"><b>Price:</b></font><br>\r\n$549.99 - <i>Temporarily out of stock, on order</i><br>\r\n\r\n<p>\r\n\r\nDNX408 1/8 Off-road Buggy Kit for .21 Nitro engines\r\n<FORM METHOD=\"POST\" ACTION=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl\">\r\n\t<table border bgcolor=\"#dddddd\">\r\n\t\t<tr>\r\n\t\t\t<td>\r\n\t\t\t\t<center>\r\n\t\t\t\t\t<table>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td align=center>\r\n\t\t\t\t\t\t\t\t<font size=\"+1\" color=\"#000088\"><b>What would you like to do?</b></font><br>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<table width=\"100%\"border bgcolor=\"#aaaaaa\">\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"hidden\" NAME=\"pn\" VALUE=\"TDR102002\">\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"hidden\" NAME=\"src\" VALUE=\"ns\">\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"View Cart\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"Add to Cart\"><br>\r\n\t\t\t\t\t\t\t\t\t\t\t Quantity: <INPUT TYPE=\"text\" NAME=\"quantity\" VALUE=\"1\" SIZE=\"4\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td align=center valign=top>\r\n\t\t\t\t\t\t\t\t\t\t\t<INPUT TYPE=\"submit\" NAME=\"sub\" VALUE=\"Check Out\">\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</table>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td align=center><font color=\"#000088\" size=\"+1\"><i>Temporarily out of stock, on order</i></font></td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t</center>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n</FORM>\r\n\r\n</td>\r\n<td>&nbsp;</td>\r\n<td>\r\n<center><img src=\"/pics/tdr102002.jpg\" alt=\"TDR102002 image\" title=\"TDR102002 image\"></center>\r\n</td>\r\n</tr></table>\r\n&nbsp;<br>\r\n\r\n<p>\r\n\r\n\r\n\r\n\r\n\r\n<font size=\"+1\"><b>Extended Product Information:</b></font><br>\r\nAs 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, \r\nso Team Durango have designed a car that is as strong as it is fast!\r\n<p>\r\nThe 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 \r\nDNX408 class-leading center of gravity, with almost all the hardware sunk down into it.\r\n<p>\r\nHard 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 \r\nminimal flex, the best bearing alignment, dirt shielding and super-easy removal of whole differential and CVD, just like the DEX410.\r\n<p>\r\nPTFE 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 \r\nabsorbers on the DNX408 are as smooth as possible giving you the best \\'feel\\' of your car as it soaks-up the roughest of tracks.\r\n<p>\r\nThe 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 \r\nengine alignment.\r\n<p>\r\nIn-board and out-board CVD joints front and rear, with rubber CVD boot protection, minimize debris problems in the race and maintenance between meetings.\r\n<p>\r\nThe fuel tank inlet complete with dirt guard - is center-mounted for easy pit-lane access.\r\n<p>\r\nThe 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 \r\nair flow over the rear wing; it also helps with heat management.\r\n<p>\r\nThe 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 \r\nthrough the body. The central engine and low bodyshell mean that all shock bodies are also in clean airflow.\r\n<p>\r\nThe 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 \r\nshock.\r\n<p>\r\nThe 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 \r\nstability, they help to protect the engine head in crashes.\r\n<p>\r\nThe 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 \r\nin the super-strong yet incredibly lightweight chassis.\r\n<p>\r\nThe steering is set at the same up-angle as the kickup to remove bump steer, while the Ackerman link moves under the front CVD.\r\n<p>\r\nThe 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 \r\nway out back which means more wheelies than down-force.\r\n<p>\r\n<b>Kit includes:</b><br>\r\nFull Rolling chassis with 3 shoe clutch set, clear body, black wing, and white dish rims.\r\n<p>\r\n<b>Kit Requires:</b><br>\r\n<li>Radio system with 2 high torque servos<br>\r\n<li>.21 size nitro race engine<br>\r\n<li>Tuned pipe and manifold to fit engine<br>\r\n<li>Tires<br>\r\n<li>Flat Receiver battery pack<br>\r\n<li>Glow igniter<br>\r\n<li>Fuel<br>\r\n<li>Misc. tools for assembly and paint for body<br>\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_2.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_3.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_4.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_5.jpg\">\r\n<p>\r\n<img src=\"https://www.ssl-stormerhobbies.com/pics/tdr102002_6.jpg\">\r\n<p>\r\n\r\n\r\n\r\n\r\n<big></big><br>\r\n\r\n<p>\r\n\r\n\r\n\r\n<center>\r\n\r\n</center>\r\n<p>\r\n\r\n\r\n\r\n\r\n\r\n<center>\r\n<hr width=\"100%\">\r\n<table width=\"100%\">\r\n<tr>\r\n  <td class=\"linkbar\" align=\"center\"><a\r\n\thref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<!--<a\r\n\thref=\"http://www.stormerhobbies.com/links.shtml\">Links</a>&nbsp;|&nbsp;--><a\r\n\thref=\"http://www.stormerhobbies.com/site_customer_service.shtml\">Customer&nbsp;Service</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_about_us.shtml\">About&nbsp;us</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\n\thref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\n\thref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>&nbsp;|&nbsp;<a \r\n\thref=\"http://www.stormerhobbies.com/site_privacy.shtml\">Privacy&nbsp;Statement</a>&nbsp;|&nbsp;<a\r\n\thref=\"http://www.stormerhobbies.com/site_terms.shtml\">Terms&nbsp;of&nbsp;Use</a></td>\r\n</tr>\r\n</table>\r\n\r\n<!--\r\n<a\r\nhref=\"http://www.stormerhobbies.com/\">Storefront</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/cgi-bin/searchpn.pl?sthumb=on\">Search/Shop</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_order_info.shtml\">Contact&nbsp;Us</a>&nbsp;|&nbsp;<a\r\nhref=\"http://www.stormerhobbies.com/site_faqs.shtml\">FAQ\\'s</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/login.pl\">My&nbsp;Account</a>&nbsp;|&nbsp;<a\r\nhref=\"https://www.ssl-stormerhobbies.com/cgi-bin/cart.pl?sub=View Cart\">Shopping&nbsp;Cart</a>\r\n-->\r\n\r\n<table border=\"0\" cellspacing=\"1\" width=\"100%\">\r\n<tr>\r\n  <td width=\"100%\" bgcolor=\"#888888\" align=center>\r\n\t<font size=\"-1\">Copyright &copy;2000-2012 <b>Stormer Hobbies, Inc.</b> All Rights Reserved</font>\r\n  </td>\r\n</tr>\r\n</table>\r\n</center>\r\n\r\n\r\n\r\n</td></tr></table>\r\n</center>\r\n</td></tr></table>\r\n</BODY>\r\n</HTML>';\r\n\r\n  $html = new DOMDocument();\r\n\r\n  // Parse the HTML into an XML document. This parser is reasonably tolerant.\r\n  $html->loadHtml(str_replace('&nbsp;', ' ', $html_text));\r\n\r\n  // get a new XPath object rooted at the top of the HTML DOM\r\n  $xpath = new DOMXPath($html);\r\n\r\n  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) {\r\n    echo 'Table had unexpected format';\r\n  }\r\n  echo strtoupper(trim(html_entity_decode($content->item(0)->nodeValue))) . ':' . \r\n       trim(html_entity_decode($content->item(1)->nodeValue));\r\n"
  },
  {
    "path": "Testing/Tests/Xml/prepare.inc",
    "content": "<?php\r\n$dom = new domDocument;\r\n$dom->load(dirname(__FILE__).\"/xslt.xml\");\r\nif(!$dom) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n$xsl = new domDocument;\r\n$xsl->load(dirname(__FILE__).\"/xslt.xsl\");\r\nif($xsl === false) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n$proc = new xsltprocessor;\r\nif($proc === false) {\r\n  echo \"Error while making xsltprocessor object\\n\";\r\n  exit;\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/001.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, string data \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books></books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\n// Only go through\nwhile ($reader->read()) {\n\techo $reader->name.\"\\n\";\n}\n$xmlstring = '';\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n?>\n===DONE===\n--EXPECT EXACT--\nbooks\nbooks\n\nWarning: XMLReader::XML(): Empty string supplied as input in %s on line %d\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/002.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, file data \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n$filename = dirname(__FILE__) . '/_002.xml';\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books></books>';\nfile_put_contents($filename, $xmlstring);\n\n$reader = new XMLReader();\nif ($reader->open('')) exit();\n\n$reader = new XMLReader();\nif (!$reader->open($filename)) {\n\t$reader->close();\n\texit();\n}\n\n// Only go through\nwhile ($reader->read()) {\n\techo $reader->name.\"\\n\";\n}\n$reader->close();\nunlink($filename);\ntouch($filename);\n$reader = new XMLReader();\n$reader->open($filename);\n$reader->close();\nunlink($filename);\n\n?>\n===DONE===\n--EXPECT EXACT--\n\nWarning: XMLReader::open(): Empty string supplied as input in %s on line %d\nbooks\nbooks\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/003.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, attributes test \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n$filename = dirname(__FILE__) . '/_002.xml';\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\" idx=\"2\">book1</book></books>';\nfile_put_contents($filename, $xmlstring);\n\n$reader = new XMLReader();\nif (!$reader->open($filename)) {\n\texit();\n}\n\n// Only go through\nwhile ($reader->read()) {\n\tif ($reader->nodeType != XMLREADER::END_ELEMENT) {\n\t\tif ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) {\n\t\t\t$attr = $reader->moveToFirstAttribute();\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t\tif ($reader->getAttribute($reader->name) == $reader->value) {\n\t\t\t\techo \"1st attr (num) failed\\n\";\n\t\t\t}\n\n\n\t\t\t$attr = $reader->moveToNextAttribute();\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t\tif ($reader->getAttribute($reader->name) == $reader->value) {\n\t\t\t\techo \"2nd attr (idx) failed\\n\";\n\t\t\t}\n\n\t\t\t// Named attribute\n\t\t\t$attr = $reader->moveToAttribute('num');\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t\tif ($reader->getAttribute('num') == $reader->value) {\n\t\t\t\techo \"attr num failed\\n\";\n\t\t\t}\n\n\t\t\t$attr = $reader->moveToAttribute('idx');\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t\tif ($reader->getAttribute('idx') == $reader->value) {\n\t\t\t\techo \"attr idx failed\\n\";\n\t\t\t}\n\n\t\t\t// Numeric positions of attributes\n\t\t\t$attr = $reader->moveToAttributeNo(0);\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t\tif ($reader->getAttributeNo(0) == $reader->value) {\n\t\t\t\techo \"attr 0 failed\\n\";\n\t\t\t}\n\n\t\t\t$attr = $reader->moveToAttributeNo(1);\n\t\t\techo $reader->name . \": \";\n\t\t\techo $reader->value . \"\\n\";\n\n\t\t}\n\t}\n}\n$reader->close();\nunlink($filename);\n?>\n===DONE===\n--EXPECT EXACT--\nnum: 1\nidx: 2\nnum: 1\nidx: 2\nnum: 1\nidx: 2\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/004.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, attributes test \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n$filename = dirname(__FILE__) . '/_002.xml';\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\" idx=\"2\">book1</book></books>';\nfile_put_contents($filename, $xmlstring);\n\n$reader = new XMLReader();\nif (!$reader->open($filename)) {\n\texit();\n}\n\nwhile ($reader->read()) {\n\tif ($reader->nodeType != XMLREADER::END_ELEMENT) {\n\t\techo $reader->name.\"\\n\";\n\t\tif ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) {\n\t\t\t$attr = $reader->moveToFirstAttribute();\n\t\t\twhile ($attr) {\n\t\t\t\techo \"   Attribute Name: \".$reader->name.\"\\n\";\n\t\t\t\techo \"   Attribute Value: \".$reader->value.\"\\n\";\n\t\t\t\t$attr = $reader->moveToNextAttribute();\n\t\t\t}\n\t\t}\n\t}\n}\n$reader->close();\nunlink($filename);\n?>\n===DONE===\n--EXPEC EXACT--\nbooks\nbook\n   Attribute Name: num\n   Attribute Value: 1\n   Attribute Name: idx\n   Attribute Value: 2\n#text\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/005.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, parser property set/get \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books></books>';\n\n$reader = new XMLReader();\n\n$reader->XML($xmlstring);\n\n\n$a = $reader->setParserProperty(XMLReader::LOADDTD, false);\n$b = $reader->getParserProperty(XMLReader::LOADDTD);\n\nif (!$a && !$b) { \n\techo \"ok\\n\";\n}\n\n$a = $reader->setParserProperty(XMLReader::SUBST_ENTITIES, true);\n$b = $reader->getParserProperty(XMLReader::SUBST_ENTITIES);\n\nif ($a && $b) { \n\techo \"ok\\n\";\n}\n// Only go through\nwhile ($reader->read());\n$reader->close();\n?>\n===DONE===\n--EXPEC EXACT--\nok\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/006.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, moveToElement \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\"></book><test /></books>';\n\n$reader = new XMLReader();\n\n$reader->XML($xmlstring);\n\n// 2 read to get on the 2nd node \n$reader->read();\n$reader->read();\n\nif ($reader->nodeType != XMLREADER::END_ELEMENT) {\n\tif ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) {\n\t\t$attr = $reader->moveToFirstAttribute();\n\t\tif ($reader->moveToElement()) {\n\t\t\tif ($reader->name == 'book') {\n\t\t\t\techo \"ok\\n\";\n\t\t\t}\n\t\t}\n\t}\n}\n\n$reader->close();\n?>\n===DONE===\n--EXPEC EXACT--\nok\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/007.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, setRelaxNGSchema\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<TEI.2>hello</TEI.2>';\n$relaxngfile = dirname(__FILE__) . '/relaxNG.rng'; \n$file = dirname(__FILE__) . '/__007.xml';\nfile_put_contents($file, $xmlstring);\n\n$reader = new XMLReader();\n$reader->open($file);\n\nif ($reader->setRelaxNGSchema($relaxngfile)) {\n  while ($reader->read());\n}\nif ($reader->isValid()) {\n  print \"file relaxNG: ok\\n\";\n} else {\n  print \"file relaxNG: failed\\n\";\n}\n$reader->close();\nunlink($file);\n\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\nif ($reader->setRelaxNGSchema($relaxngfile)) {\n  while ($reader->read());\n}\nif ($reader->isValid()) {\n  print \"string relaxNG: ok\\n\";\n} else {\n  print \"string relaxNG: failed\\n\";\n}\n\n$reader->close();\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\nif ($reader->setRelaxNGSchema('')) {\n\techo 'failed';\n}\n$reader->close();\n?>\n===DONE===\n--EXPECT EXACT--\nfile relaxNG: ok\nstring relaxNG: ok\n\nWarning: XMLReader::setRelaxNGSchema(): Schema data source is required in %s on line %d\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/008.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, DTD \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE LIST SYSTEM \"dtdexample.dtd\">\n<LIST>\n<MOVIE ID=\"x200338360\">\n<TITLE>Move Title 1</TITLE>\n<ORGTITLE/><LOC>Location 1</LOC>\n<INFO/>\n</MOVIE>\n<MOVIE ID=\"m200338361\">\n<TITLE>Move Title 2</TITLE>\n<ORGTITLE/>\n<LOC>Location 2</LOC>\n<INFO/>\n</MOVIE>\n</LIST>';\n\n$dtdfile = rawurlencode(dirname(__FILE__)) . '/dtdexample.dtd'; \n$file = dirname(__FILE__) . '/__008.xml';\nfile_put_contents($file, $xmlstring);\n\n\n$reader = new XMLReader();\n$reader->open($file);\n$reader->setParserProperty(XMLREADER::LOADDTD, TRUE);\n$reader->setParserProperty(XMLREADER::VALIDATE, TRUE);\nwhile($reader->read());\nif ($reader->isValid()) {\n\techo \"file DTD: ok\\n\";\n}\n$reader->close();\nunlink($file);\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE LIST SYSTEM \"file:///' . $dtdfile. '\">\n<LIST>\n<MOVIE ID=\"x200338360\">\n<TITLE>Move Title 1</TITLE>\n<ORGTITLE/><LOC>Location 1</LOC>\n<INFO/>\n</MOVIE>\n<MOVIE ID=\"m200338361\">\n<TITLE>Move Title 2</TITLE>\n<ORGTITLE/>\n<LOC>Location 2</LOC>\n<INFO/>\n</MOVIE>\n</LIST>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\n$reader->setParserProperty(XMLREADER::LOADDTD, TRUE);\n$reader->setParserProperty(XMLREADER::VALIDATE, TRUE);\nwhile($reader->read());\nif ($reader->isValid()) {\n\techo \"string DTD: ok\\n\";\n}\n?>\n===DONE===\n--EXPECT EXACT--\nfile DTD: ok\nstring DTD: ok\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/009.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, next \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\"><test /></book><book num=\"2\" /></books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\n// Only go through\n$reader->read();\n$reader->read();\n\n$reader->next();\necho $reader->name;\necho \" \";\necho $reader->getAttribute('num');\necho \"\\n\";\n?>\n===DONE===\n--EXPECT EXACT--\nbook 2\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/010.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, next \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<prefix:books xmlns:prefix=\"uri\" isbn=\"\" prefix:isbn=\"12isbn\">book1</prefix:books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\n// Only go through\n$reader->read();\n$reader->read();\n\n$reader->next();\necho $reader->name;\necho \" \";\necho $reader->getAttributeNs('isbn', 'uri');\necho \"\\n\";\n?>\n===DONE===\n--EXPECT EXACT--\nprefix:books 12isbn\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/011.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, string data \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n$reader = new XMLReader();\nif (!method_exists($reader, 'readInnerXml')) print \"skip - readInnerXml method doesn't exist in XMLReader.\";\n?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book>test</book></books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n$reader->read();\necho $reader->readInnerXml();\necho \"\\n\";\n$reader->close();\n\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n$reader->read();\necho $reader->readOuterXml();\necho \"\\n\";\n$reader->close();\n?>\n===DONE===\n--EXPECT EXACT--\n<book>test</book>\n<books><book>test</book></books>\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/012.dtd",
    "content": "<!ELEMENT foo EMPTY>\n<!ATTLIST foo bar CDATA '' baz CDATA ''>\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/012.phpt",
    "content": "--TEST--\nXMLReader: accessing empty and non existing attributes \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring =<<<EOF\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<foo bar=\"\"/>\nEOF;\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n$reader->read();\nvar_dump($reader->getAttribute('bar'));\nvar_dump($reader->getAttribute('baz'));\n$reader->close();\n\n$xmlstring =<<<EOF\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE foo SYSTEM \"012.dtd\">\n<foo bar=\"\"/>\nEOF;\n\n$xmlstring = str_replace('012.dtd', dirname(__FILE__).'/012.dtd', $xmlstring);\nif (DIRECTORY_SEPARATOR == '\\\\') {\n\t$xmlstring = str_replace('\\\\',\"/\", $xmlstring);\n}\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);\nwhile($reader->read() && $reader->nodeType != XMLReader::ELEMENT);\nvar_dump($reader->getAttribute('bar'));\nvar_dump($reader->getAttribute('baz'));\n$reader->close();\n\necho \"\\nUsing URI:\\n\";\n$reader = new XMLReader();\n$file = dirname(__FILE__) . '/012.xml';\nif (DIRECTORY_SEPARATOR == '\\\\') {\n\t$file = str_replace('\\\\',\"/\", $file);\n}\n\n$reader->open($file);\n\n//$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);\nwhile($reader->read() && $reader->nodeType != XMLReader::ELEMENT);\nvar_dump($reader->getAttribute('bar'));\nvar_dump($reader->getAttribute('baz'));\n$reader->close();\n\n$reader = new XMLReader();\n$reader->open(dirname(__FILE__) . '/012.xml');\n$reader->setParserProperty(XMLReader::DEFAULTATTRS, true);\nwhile($reader->read() && $reader->nodeType != XMLReader::ELEMENT);\nvar_dump($reader->getAttribute('bar'));\nvar_dump($reader->getAttribute('baz'));\n$reader->close();\n\n?>\n===DONE===\n--EXPECT EXACT--\nstring(0) \"\"\nNULL\nstring(0) \"\"\nstring(0) \"\"\n\nUsing URI:\nstring(0) \"\"\nNULL\nstring(0) \"\"\nstring(0) \"\"\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/012.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE foo SYSTEM \"012.dtd\">\n<foo bar=\"\"/>\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/013.phpt",
    "content": "--TEST--\nXMLReader: Schema validation\n--SKIPIF--\n<?php if (!extension_loaded('xmlreader')) die('skip');?>\n<?php if (!method_exists('XMLReader','setSchema')) die('skip XMLReader::setSchema() not supported');?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xml =<<<EOF\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<items>\n  <item>123</item>\n  <item>456</item>\n</items>\nEOF;\n\n$reader = new XMLReader();\n$reader->XML($xml);\n$reader->setSchema(dirname(__FILE__) . '/013.xsd');\nwhile($reader->read()) {\n\tif ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'item') {\n\t\t$reader->read();\n\t\tvar_dump($reader->value);\n\t}\n}\n$reader->close();\n\n?>\n===FAIL===\n<?php\n\n$xml =<<<EOF\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<foo/>\nEOF;\n\n$reader = new XMLReader();\n$reader->XML($xml);\n$reader->setSchema(dirname(__FILE__) . '/013.xsd');\nwhile($reader->read() && $reader->nodeType != XMLReader::ELEMENT);\n$reader->close();\n\n?>\n===DONE===\n--EXPECTF--\nstring(3) \"123\"\nstring(3) \"456\"\n===FAIL===\n\nWarning: XMLReader::read(): Element 'foo': %s\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/013.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <xsd:element name=\"items\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element name=\"item\" type=\"xsd:integer\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n      </xsd:sequence>\n    </xsd:complexType>\n  </xsd:element>\n</xsd:schema>\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/Phalanger.inc",
    "content": "<?\nrequire('../Phalanger.inc');\n?>"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/bug36743.phpt",
    "content": "--TEST--\nBug #36743 (In a class extending XMLReader array properties are not writable)\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip\"; ?>\n--FILE--\n<?php\n\nclass Test extends XMLReader\n{\n    private $testArr = array();\n    public function __construct()\n    {\n        $this->testArr[] = 1;\n        var_dump($this->testArr);\n    }\n}\n\n$t = new test;\n\necho \"Done\\n\";\n?>\n--EXPECT EXACT--\t\narray(1) {\n  [0]=>\n  int(1)\n}\nDone\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/bug42139.phpt",
    "content": "--TEST--\nBug #42139 (XMLReader option constants are broken using XML())\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip\";\nif (LIBXML_VERSION < 20628) die(\"skip: libxml2 2.6.28+ required\");\n?>\n--FILE--\n<?php\n\n$xml = <<<XML\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE root [\n<!ELEMENT root ANY>\n<!ENTITY x \"y\">\n]>\n<root>&x;</root>\nXML;\n\n$reader = new XMLReader;\n$reader->XML( $xml, NULL, LIBXML_NOENT);\nwhile ( $reader->read() ) {\n  echo \"{$reader->nodeType}, {$reader->name}, {$reader->value}\\n\";\n}\n$reader->close();\n\n?>\n--EXPECT EXACT--\t\n10, root, \n1, root, \n3, #text, y\n15, root, \n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/dtdexample.dtd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!ELEMENT LIST (MOVIE+)>\n<!ELEMENT MOVIE (TITLE, ORGTITLE, LOC, INFO)>\n<!ATTLIST MOVIE ID ID #REQUIRED>\n<!ELEMENT TITLE (#PCDATA)>\n<!ELEMENT ORGTITLE (#PCDATA)>\n<!ELEMENT LOC (#PCDATA)>\n<!ELEMENT INFO (#PCDATA)>\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/expand.phpt",
    "content": "--TEST--\nXMLReader: Expand into existing DOM document\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip\";\nif (!extension_loaded(\"dom\")) print \"skip DOM extension required\";\n$reader = new XMLReader();\nif (!method_exists($reader, 'expand')) print \"skip\";\n?>\n--FILE--\n<?php \n\n$basexml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book>base book</book></books>';\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book>new book</book></books>';\n\n$dom = new DOMDocument();\n$dom->loadXML($basexml);\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\nwhile ($reader->read()) {\n    if ($reader->localName == \"book\") {\n        $node = $reader->expand($dom);\n        if ($node->ownerDocument) {\n            echo $node->ownerDocument->documentElement->firstChild->textContent . \"\\n\";\n        }\n        break;\n    }\n}\n$reader->close();\n?>\n===DONE===\n--EXPECT EXACT--\nbase book\n===DONE==="
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/inherit.phpt",
    "content": "--TEST--\nXMLReader: class inheritance\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \nclass XMLReader2 extends XMLReader {\n\n\t/**\n\t * @return bool|string\n\t */\n\tfunction nodeContents() {\n\t\tif( $this->isEmptyElement ) {\n\t\t\treturn \"\";\n\t\t}\n\t\t$buffer = \"\";\n\t\twhile( $this->read() ) {\n\t\t\tswitch( $this->nodeType ) {\n\t\t\tcase TEXT:\n\t\t\tcase XMLReader::SIGNIFICANT_WHITESPACE:\n\t\t\t\t$buffer .= $this->value;\n\t\t\t\tbreak;\n\t\t\tcase XmlReader::END_ELEMENT:\n\t\t\t\treturn $buffer;\n\t\t\t}\n\t\t}\n\t\treturn $this->close();\n\t}\n}\n?>\n===DONE===\n--EXPECTF--\n\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/init.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, initialization\n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\" idx=\"2\">book1</book></books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\necho $reader->name.\"\\n\";\necho $reader->nodeType.\"\\n\";\nwhile ($reader->read()) {\n\techo $reader->name.\"\\n\";\n}\n\n$reader->XML($xmlstring);\n$reader->read();\necho $reader->nodeType.\"\\n\";\necho $reader->name.\"\\n\";\n\n$reader->XML($xmlstring);\n$reader->read();\n$reader->read();\necho $reader->nodeType.\"\\n\";\necho $reader->name.\"\\n\";\n\n$filename = dirname(__FILE__) . '/_002.xml';\nfile_put_contents($filename, $xmlstring);\n$reader = new XMLReader();\nif (!$reader->open($filename)) {\n\texit();\n}\n$reader->read();\necho $reader->name.\"\\n\";\n\n$reader->close();\nunlink($filename);\n\n?>\n===DONE===\n--EXPECT EXACT--\n\n0\nbooks\nbook\n#text\nbook\nbooks\n1\nbooks\n1\nbook\nbooks\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/next.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, next \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<books><book num=\"1\"><test /></book><book num=\"2\" /></books>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\necho \"[\" . $reader->name . \"]\\n\";\n\n// Only go through\n$reader->read();\necho \"[\" . $reader->name . \"]\\n\";\n$reader->read();\necho \"[\" . $reader->name . \"]\\n\";\n\n$reader->next();\necho $reader->name;\necho \" \";\necho $reader->getAttribute('num');\necho \"\\n\";\n?>\n===DONE===\n--EXPECT EXACT--\n[]\n[books]\n[book]\nbook 2\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/read_name.phpt",
    "content": "--TEST--\nXMLReader: libxml2 XML Reader, string data \n--SKIPIF--\n<?php if (!extension_loaded(\"xmlreader\")) print \"skip - xmlreader extension not loaded.\"; ?>\n--FILE--\n<?php \n/* $Id$ */\n\n$xmlstring = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<LIST>\n<MOVIE ID=\"x200338360\">\n<TITLE>Move Title 1</TITLE>\n<ORGTITLE/><LOC>Location 1</LOC>\n<INFO/>\n</MOVIE>\n<MOVIE ID=\"m200338361\">\n<TITLE>Move Title 2</TITLE>\n<ORGTITLE/>\n<LOC>Location 2</LOC>\n<INFO/>\n</MOVIE>\n</LIST>';\n\n$reader = new XMLReader();\n$reader->XML($xmlstring);\n\n// Only go through\nwhile ($reader->read()) {\n\techo $reader->name.\"\\n\";\n}\n?>\n===DONE===\n--EXPECT EXACT--\nLIST\nLIST\n#text\nMOVIE\n#text\nTITLE\n#text\nTITLE\n#text\nORGTITLE\nLOC\n#text\nLOC\n#text\nINFO\n#text\nMOVIE\n#text\nMOVIE\n#text\nTITLE\n#text\nTITLE\n#text\nORGTITLE\n#text\nLOC\n#text\nLOC\n#text\nINFO\n#text\nMOVIE\n#text\nLIST\n===DONE===\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/relaxNG.rng",
    "content": "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\"\n datatypeLibrary=\"http://www.w3.org/2001/XMLSchema-datatypes\">\n\n<include href=\"relaxNG2.rng\">\n<define name=\"TEI.prose\"><ref name=\"INCLUDE\"/></define>\n</include>\n</grammar>\n\n\n\n"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/relaxNG2.rng",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\" xmlns:t=\"http://www.thaiopensource.com/ns/annotations\" xmlns:a=\"http://relaxng.org/ns/compatibility/annotations/1.0\" datatypeLibrary=\"http://www.w3.org/2001/XMLSchema-datatypes\">\n\n   <start>\n         <ref name=\"TEI.2\"/>\n   </start>\n   <define name=\"IGNORE\">\n      <notAllowed/>\n   </define>\n   <define name=\"INCLUDE\">\n      <empty/>\n   </define>\n\n\n  <include href=\"relaxNG3.rng\"/>\n\n   <define name=\"TEI.2\">\n      <element name=\"TEI.2\">\n         <text/>\n      </element>\n   </define>\n\n</grammar>"
  },
  {
    "path": "Testing/Tests/Xml/xmlReader/relaxNG3.rng",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<grammar xmlns=\"http://relaxng.org/ns/structure/1.0\" xmlns:t=\"http://www.thaiopensource.com/ns/annotations\" xmlns:a=\"http://relaxng.org/ns/compatibility/annotations/1.0\" datatypeLibrary=\"http://www.w3.org/2001/XMLSchema-datatypes\">\n\n   <define name=\"TEI.prose\" combine=\"interleave\">\n      <ref name=\"IGNORE\"/>\n   </define>\n\n</grammar>"
  },
  {
    "path": "Testing/Tests/Xml/xmlhandler.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\nclass xmltest\r\n{\r\n\r\n\tpublic function tagStart($parser, $name, array $attribs) {\r\n\t\techo $name.\" begins\\n<br/>\";\r\n\t}\r\n\r\n\tpublic function tagEnd($parser, $name) {\r\n\t\techo $name.\" ends\\n<br/>\";\r\n\t}\r\n\t\r\n\tfunction test()\r\n\t{\r\n\r\n\t\techo \"Test begins\\n<br/>\\n<br/>\";\r\n\t\t$parser = xml_parser_create();\r\n\t\txml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);\r\n\t\txml_set_element_handler($parser, array($this,'tagStart'), array($this,'tagEnd'));\r\n\r\n\t\t$data = '<test>\r\n\t\t\t<empty att=\"3\" />\r\n\t\t\t<nocontent></nocontent>\r\n\t\t\t<content>\r\n\t\t\t\t<empty/>\r\n\t\t\t\t<empty/>\r\n\t\t\t</content>\r\n\t\t\t<empty/>\r\n\t\t\t<empty att=\"5\" />\r\n\t\t</test>\r\n\t\t';\r\n\r\n\t\txml_parse($parser, $data);\r\n\t\t\r\n\t\techo \"Test ends\\n<br/>\\n<br/>\";\r\n\r\n\t}\r\n}\r\n\r\n$test = new xmltest();\r\n$test->test();\r\n\r\n?>\r\n\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt.xml",
    "content": "<?xml version='1.0'  encoding=\"iso-8859-1\" ?>\r\n<chapter language=\"en\">\r\n    <title language=\"en\">Title</title>\r\n    <para language=\"ge\">\r\n\r\n<!-- comment -->\r\n        <informaltable>\r\n            <tgroup cols=\"3\">\r\n                <tbody>\r\n                    <row>\r\n                        <entry>a1</entry>\r\n                        <entry morerows=\"1\">b1</entry>\r\n                        <entry>c1</entry>\r\n                    </row>\r\n                    <row>\r\n                        <entry>a2</entry>\r\n                        <entry>c2</entry>\r\n                    </row>\r\n                    <row>\r\n                        <entry>3</entry>\r\n                        <entry>b3</entry>\r\n                        <entry>c3</entry>\r\n                    </row>\r\n                </tbody>\r\n            </tgroup>\r\n        </informaltable>\r\n    </para>\r\n</chapter>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n<!-- $Id: xslt.xsl,v 1.2 2003/11/29 13:01:19 chregu Exp $ -->\r\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" >\r\n\r\n    <xsl:output  method=\"xml\" encoding=\"iso-8859-1\" indent=\"no\"/>\r\n    <xsl:param name=\"foo\" select=\"'bar'\"/>\r\n    <xsl:template match=\"/\">\r\n    <html>\r\n    <body>\r\n        <xsl:value-of select=\"$foo\"/><xsl:text>\r\n</xsl:text>\r\n        <xsl:apply-templates select=\"/chapter/para/informaltable/tgroup/tbody/row\"/>\r\n     </body>\r\n     </html>\r\n    </xsl:template>\r\n\r\n    <xsl:template match=\"row\">\r\n        <xsl:for-each select=\"entry\">\r\n            <xsl:value-of select=\".\"/>\r\n            <xsl:text> </xsl:text>\r\n        </xsl:for-each>\r\n       <br/> <xsl:text> \r\n</xsl:text>\r\n\r\n    </xsl:template>\r\n</xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt001.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\necho \"Test 1: Transform To XML String\";\r\ninclude(\"prepare.inc\");\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt002.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 2: Transform To HTML String\";\r\ninclude(\"prepare.inc\");\r\n// changing output method to html\r\n$xp = new domxpath($xsl);\r\n$res = $xp->query(\"/xsl:stylesheet/xsl:output/@method\");\r\nif ($res->length != 1) {\r\n    print \"No or more than one xsl:output/@method found\";\r\n    exit;\r\n}\r\n$res->item(0)->value = \"html\";\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt003.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 3: Using Parameters\";\r\ninclude(\"prepare.inc\");\r\n$proc->importStylesheet($xsl);\r\n$proc->setParameter( \"\", \"foo\",\"hello world\");\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt004.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 4: Checking UTF8 Output\";\r\ninclude(\"prepare.inc\");\r\n$xp = new domxpath($xsl);\r\n$res = $xp->query(\"/xsl:stylesheet/xsl:output/@encoding\");\r\nif ($res->length != 1) {\r\n    print \"No or more than one xsl:output/@encoding found\";\r\n    exit;\r\n}\r\n$res->item(0)->value = \"utf-8\";\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt005.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 5: Checking Indent\";\r\ninclude(\"prepare.inc\");\r\n$xp = new domxpath($xsl);\r\n$res = $xp->query(\"/xsl:stylesheet/xsl:output/@indent\");\r\nif ($res->length != 1) {\r\n    print \"No or more than one xsl:output/@indent found\";\r\n    exit;\r\n}\r\n$res->item(0)->value = \"yes\";\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt006.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 6: Transform To Doc\";\r\ninclude(\"prepare.inc\");\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\n$doc = $proc->transformToDoc($dom);\r\nprint __xml_norm($doc->saveXML());\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt007.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 7: Transform To Uri\";\r\ninclude(\"prepare.inc\");\r\n$proc->importStylesheet($xsl);\r\nprint \"\\n\";\r\n$doc = $proc->transformToUri($dom, \"file://\".dirname(__FILE__).\"/out.xml\");\r\nprint __xml_norm(file_get_contents(dirname(__FILE__).\"/out.xml\"));\r\nunlink(dirname(__FILE__).\"/out.xml\");\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt010.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 10: EXSLT Support\";\r\n\r\n$dom = new domDocument();\r\n  $dom->load(dirname(__FILE__).\"/exslt.xsl\");\r\n  $proc = new xsltprocessor;\r\n  $xsl = $proc->importStylesheet($dom);\r\n  \r\n  $xml = new DomDocument();\r\n  $xml->load(dirname(__FILE__).\"/exslt.xml\");\r\n  \r\n  print __xml_norm($proc->transformToXml($xml));\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt011.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\nprint \"Test 11: php:function Support\\n\";\r\n  Class foo {\r\n       function foo() {}\r\n       function __toString() { return \"not a DomNode object\";}\r\n  }\r\n\r\n$dom = new domDocument();\r\n  $dom->load(dirname(__FILE__).\"/xslt011.xsl\");\r\n  $proc = new xsltprocessor;\r\n  $xsl = $proc->importStylesheet($dom);\r\n  \r\n  $xml = new DomDocument();\r\n  $xml->load(dirname(__FILE__).\"/xslt011.xml\");\r\n  $proc->registerPHPFunctions();\r\n  print __xml_norm($proc->transformToXml($xml));\r\n \r\n  function foobar($id, $secondArg = \"\" ) {\r\n    if (is_array($id)) {\r\n        return $id[0]->value . \" - \" . $secondArg;\r\n    } else {\r\n        return $id . \" - \" . $secondArg;\r\n    }\r\n  }\r\n  function nodeSet($id = null) {\r\n      if ($id and is_array($id)) {\r\n          return $id[0];\r\n      } else {\r\n          $dom = new domdocument;\r\n          $dom->loadXML(\"<root>this is from an external DomDocument</root>\");\r\n          return $dom->documentElement;\r\n      }\r\n  }\r\n  function nonDomNode() {\r\n    return new foo();\r\n  }\r\n  \r\n  class aClass {\r\n    static function aStaticFunction($id) {\r\n        return $id;\r\n    }\r\n  }\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt011.xml",
    "content": "<doc id=\"foobar\">This is <i>from the Input Document</i></doc>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt011.xsl",
    "content": "<?xml version='1.0'?>\r\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\r\n  xmlns:php=\"http://php.net/xsl\"\r\n  version='1.0'>\r\n<xsl:template match=\"/\">\r\n<xsl:value-of select=\"php:functionString('foobar', /doc/@id, 'secondArg')\"/>\r\n<xsl:text>\r\n</xsl:text>\r\n<xsl:value-of select=\"php:function('foobar', /doc/@id)\"/>\r\n<xsl:text>\r\n</xsl:text>\r\n<xsl:value-of select=\"php:function('nodeSet')\"/>\r\n<xsl:text>\r\n</xsl:text>\r\n<xsl:value-of select=\"php:function('nodeSet',/doc)/i\"/>\r\n<xsl:text>\r\n</xsl:text>\r\n<xsl:value-of select=\"php:function('aClass::aStaticFunction','static')\"/>\r\n<xsl:text>\r\n</xsl:text>\r\n\r\n<xsl:value-of select=\"php:function('nonDomNode')\"/>\r\n</xsl:template>\r\n</xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt012.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\nrequire('Phalanger.inc');\r\n\r\necho \"Test 12: Using Associative Array of Parameters\";\r\n\r\n$dom = new domDocument;\r\n$dom->load(dirname(__FILE__).\"/xslt.xml\");\r\nif(!$dom) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n\r\n$xsl = new domDocument;\r\n$xsl->load(dirname(__FILE__).\"/xslt012.xsl\");\r\nif(!$xsl) {\r\n  echo \"Error while parsing the document\\n\";\r\n  exit;\r\n}\r\n\r\n$proc = new xsltprocessor;\r\nif($proc === false) {\r\n  echo \"Error while making xsltprocessor object\\n\";\r\n  exit;\r\n}\r\n\r\n\r\n$proc->importStylesheet($xsl);\r\n\r\n$parameters = Array(\r\n\t\t\t\t\t'foo' => 'barbar',\r\n\t\t\t\t\t'foo1' => 'test',\r\n\t\t\t\t\t);\r\n\r\n$proc->setParameter( \"\", $parameters);\r\n\r\nprint \"\\n\";\r\nprint __xml_norm($proc->transformToXml($dom));\r\nprint \"\\n\";\r\n?>\r\n"
  },
  {
    "path": "Testing/Tests/Xml/xslt012.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\r\n<!-- $Id: xslt012.xsl,v 1.1 2004/08/05 13:31:17 tony2001 Exp $ -->\r\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" >\r\n\r\n    <xsl:output  method=\"xml\" encoding=\"iso-8859-1\" indent=\"no\"/>\r\n    <xsl:param name=\"foo\" select=\"'bar'\"/>\r\n    <xsl:param name=\"foo1\" select=\"'bar1'\"/>\r\n    <xsl:template match=\"/\">\r\n    <html>\r\n    <body>\r\n        <xsl:value-of select=\"$foo\"/><xsl:text>\r\n</xsl:text>\r\n        <xsl:value-of select=\"$foo1\"/><xsl:text>\r\n</xsl:text>\r\n        <xsl:apply-templates select=\"/chapter/para/informaltable/tgroup/tbody/row\"/>\r\n     </body>\r\n     </html>\r\n    </xsl:template>\r\n\r\n    <xsl:template match=\"row\">\r\n        <xsl:for-each select=\"entry\">\r\n            <xsl:value-of select=\".\"/>\r\n            <xsl:text> </xsl:text>\r\n        </xsl:for-each>\r\n       <br/> <xsl:text> \r\n</xsl:text>\r\n\r\n    </xsl:template>\r\n</xsl:stylesheet>\r\n"
  },
  {
    "path": "Testing/Tests/ext/filter/filter_var.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\n// email validation and sanitization\r\n$email_addresses = array(\"info@devsense.com\", \"a@b!@#$%^&*[].com\", \"a@b.com\", \"a@456.com\", \"123@b.com\", null, \"\");\r\n\r\nforeach ($email_addresses as $email)\r\n{\r\n\techo \"FILTER_SANITIZE_EMAIL:\" . var_dump(filter_var($email, FILTER_SANITIZE_EMAIL)) . \"\\n\";\r\n\techo \"FILTER_VALIDATE_EMAIL:\" . var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)) . \"\\n\";\r\n}\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/ext/filter/run_v2.cmd",
    "content": "@echo off\r\n..\\..\\..\\..\\Tools\\PhpNetTester.exe /compiler:..\\..\\..\\..\\Deployment\\Debug\\phpc.exe /php:..\\..\\..\\..\\Tools\\PHP\\php.exe\r\ndel /s *.pdb *.exe EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv __input.txt Debug.log > nul\r\npause\r\n"
  },
  {
    "path": "Testing/Tests/ext/web/parse_url #27377.php",
    "content": "[expect php]\r\n[file]\n<?php\n\nvar_dump(parse_url('www.example.com/multimedia/item_list.php?something=1'));\nvar_dump(parse_url('www.example.com:12345/multimedia/item_list.php?is=1'));\nvar_dump(parse_url('www.example.com:98765/multimedia/item_list.php?pos=1'));\nvar_dump(parse_url('file://C:/windows/php.ini'));\nvar_dump(parse_url('mailto:info@example.com?subject=[test]'));\nvar_dump(parse_url('hxxp://domain.com?query#fragment'));\nvar_dump(parse_url('/include/file.php?xx=1'));\nvar_dump(parse_url('http://domain:123/path1/path2#fragment'));\nvar_dump(parse_url('something:/domain:123/path1/path2#fragment'));\nvar_dump(parse_url('/directory/multimedia/item_list.php?id=1#fragment'));\nvar_dump(parse_url('http://user:password@example.com/path1/path2/item_list.php?id=1$#position'));\nvar_dump(parse_url('https://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/dir/dir/dir/dir/file.aspx?param1#frag'));\n\n?>"
  },
  {
    "path": "Testing/Tests/ext/web/parse_url.php",
    "content": "[expect php]\r\n[file]\r\n<?php \r\n\r\nfunction test()\r\n{\r\n    $urls = array(\r\n        'http://subdomain.host.com/path?',\r\n        'http://subdomain.host.com/path?#arg1=1&q=arg2.com',\r\n        'http://www.somehost.com//',\r\n\t\t'http://www.somehost.com////',\r\n        'http:\\\\a.b.c\\d\\e\\f?x');\r\n    \r\n    foreach($urls as $url)\r\n    {\r\n        $url_parts = parse_url($url);\r\n        print_r($url_parts);\r\n    }    \r\n}\r\ntest();\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/ext/web/parse_url_at_bug.php",
    "content": "[expect php]\r\n[file]\r\n<?php\r\n\r\n$uri = \"http://deki.example.org/@api/deki/site/settings\";\r\n\r\n$parsed_uri = parse_url($uri);\r\n\r\nvar_dump($uri);\r\nvar_dump($parsed_uri);\r\n\r\n?>"
  },
  {
    "path": "Testing/Tests/run_v2.cmd",
    "content": "@echo off\r\n..\\..\\Tools\\PhpNetTester.exe /compiler:..\\..\\Deployment\\Bin\\phpc.exe /php:..\\..\\Tools\\PHP\\php.exe %*\r\n\r\n@pause\r\n@rem Deleting output and temporary files...\r\ndel /s *.pdb *.exe *.log EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv *.phpscript > nul\r\n"
  },
  {
    "path": "Testing/Tests/run_v2_mono.cmd",
    "content": "@echo off\r\n..\\..\\Tools\\PhpNetTester.exe \"/loader:\\Program Files\\Mono-1.1.17\\bin\\mono.exe\" /compiler:..\\..\\Deployment\\Bin\\phpc.exe /php:..\\..\\Tools\\PHP\\php.exe %*\r\n\r\n@pause\r\n@rem Deleting output and temporary files...\r\ndel /s *.pdb *.exe *.log EmittedNodes.csv LibraryCalls.csv UnknownCalls.csv *.phpscript > nul\r\n"
  },
  {
    "path": "Tools/ChainGen/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Tools/ChainGen/ChainGen.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{5C044685-AC6A-4A36-9C0B-BA205A0C6305}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>ChainGen</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>ChainGen</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.XML\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"MainClass.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Tools/ChainGen/MainClass.cs",
    "content": "using System;\r\nusing System.IO;\r\n\r\nnamespace ChainGen\r\n{\r\n\tclass MainClass\r\n\t{\r\n\t\tstatic void BeginFunction()\r\n\t\t{\r\n\t\t\tFunctionName = \"f\" + Guid.NewGuid().ToString().Replace('-', 'x');\r\n\t\t\tsw.WriteLine(\"function {0}()\", FunctionName);\r\n\t\t\tsw.WriteLine(\"{{\", FunctionName);\r\n\t\t\tsw.WriteLine(\"\\tglobal $x, $y;\");\r\n\t\t}\r\n\r\n\t\tstatic void EndFunction()\r\n\t\t{\r\n\t\t\tsw.WriteLine(\"}\");\r\n\t\t\tsw.WriteLine(\"{0}();\", FunctionName);\r\n\t\t\tsw.WriteLine();\r\n\t\t}\r\n\r\n\t\tstatic void TestChain(string chain)\r\n\t\t{\r\n\t\t\tif (ExpressionCounter == 0) BeginFunction();\r\n\r\n\t\t\tsw.WriteLine(\"\\t$_chain = \\'{0}\\';\", chain);\r\n\r\n\t\t\tif (chain.IndexOf(\"[]\") < 0)\r\n\t\t\t{\r\n\t\t\t\tsw.WriteLine(\"\\t$_var = {0};\", chain);\r\n\t\t\t\tsw.WriteLine(\"\\t$_var = A::{0};\", chain);\r\n\t\t\t\tsw.WriteLine(\"\\t_f({0});\", chain);\r\n\t\t\t}\r\n\r\n\t\t\tsw.WriteLine(\"\\t$_var =& {0};\", chain);\r\n\t\t\tif (chain.StartsWith(\"$\")) sw.WriteLine(\"\\t$_var =& A::{0};\", chain);\r\n\t\t\tsw.WriteLine(\"\\t_fr({0});\", chain);\r\n\t\t\tif (TEST_READ_UNKNOWN) sw.WriteLine(\"\\t_fu({0});\", chain);\r\n\r\n\t\t\tif (!chain.EndsWith(\")\"))\r\n\t\t\t{\r\n\t\t\t\tsw.WriteLine(\"\\t{0} = \\\"_literal\\\";\", chain);\r\n\t\t\t\tsw.WriteLine(\"\\t{0} = $_var;\", chain);\r\n\t\t\t\tsw.WriteLine(\"\\t{0} =& $_var;\", chain);\r\n\r\n\t\t\t\tint bb_index = chain.IndexOf(\"[]\");\r\n\t\t\t\tif (bb_index < 0 || bb_index == chain.Length - 2)\r\n\t\t\t\t{\r\n\t\t\t\t\tsw.WriteLine(\"\\t_fr({0} = 1);\", chain);\r\n\t\t\t\t\tif (TEST_READ_UNKNOWN) sw.WriteLine(\"\\t_fu({0} = 1);\", chain);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (chain.StartsWith(\"$\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tsw.WriteLine(\"\\tA::{0} = $_var;\", chain);\r\n\t\t\t\t\tsw.WriteLine(\"\\tA::{0} =& $_var;\", chain);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (bb_index < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsw.WriteLine(\"\\t_fr({0} += 1);\", chain);\r\n\t\t\t\t\tif (TEST_READ_UNKNOWN) sw.WriteLine(\"\\t_fu({0} += 1);\", chain);\r\n\r\n\t\t\t\t\tsw.WriteLine(\"\\tisset({0});\", chain);\r\n\t\t\t\t\tsw.WriteLine(\"\\tunset({0});\", chain);\r\n\r\n\t\t\t\t\tif (chain.StartsWith(\"$\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsw.WriteLine(\"\\tisset(A::{0});\", chain);\r\n\t\t\t\t\t\tsw.WriteLine(\"\\tunset(A::{0});\", chain);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tExpressionCounter++;\r\n\t\t\tif (ExpressionCounter >= CHAINS_PER_METHOD)\r\n\t\t\t{\r\n\t\t\t\tEndFunction();\r\n\t\t\t\tExpressionCounter = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstatic void BuildChain(string chain, bool rdlock)\r\n\t\t{\r\n\t\t\tint i1 = chain.IndexOf('#');\r\n\t\t\tint i2 = chain.IndexOf('#', i1 + 1);\r\n\r\n\t\t\tif (i1 >= 0 && i2 > i1)\r\n\t\t\t{\r\n\t\t\t\tint len = Int32.Parse(chain.Substring(i1 + 1, i2 - i1 - 1));\r\n\r\n\t\t\t\t// expand the non-terminal\r\n\t\t\t\tstring pre = chain.Substring(0, i1);\r\n\t\t\t\tstring suf = chain.Substring(i2 + 1);\r\n\r\n\t\t\t\tif (len <= 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tBuildChain(pre + \"$x\" + suf, rdlock);\r\n\t\t\t\t\tif (!rdlock) BuildChain(pre + \"$$y\" + suf, true);\r\n\r\n\t\t\t\t\t// avoid the illegal f()[]\r\n\t\t\t\t\tif (suf.Length == 0 || suf[0] != '[') BuildChain(pre + \"_f(0)\" + suf, rdlock);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#[0]\" + suf, rdlock);\r\n\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#->a\" + suf, rdlock);\r\n\t\t\t\t\tif (!rdlock) BuildChain(pre + \"#\" + (len - 1) + \"#->$x\" + suf, true);\r\n\t\t\t\t\tif (!rdlock) BuildChain(pre + \"#\" + (len - 1) + \"#[]\" + suf, true);\r\n\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#[#\" + (len - 2) + \"#]\" + suf, true);\r\n\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#->{#\" + (len - 2) + \"#}\" + suf, true);\r\n\r\n\t\t\t\t\t// avoid the illegal f()[]\r\n\t\t\t\t\tif (suf.Length == 0 || suf[0] != '[' && !rdlock)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#[0](#\" + (len - 2) + \"#)\" + suf, true);\r\n\t\t\t\t\t\tBuildChain(pre + \"#\" + (len - 1) + \"#->_f(#\" + (len - 2) + \"#)\" + suf, true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse TestChain(chain);\r\n\t\t}\r\n\r\n\t\tstatic StreamWriter sw;\r\n\r\n\t\tconst int MAX_CHAIN_LENGTH = 5;\r\n\t\tconst int CHAINS_PER_METHOD = 1;\r\n\t\tconst bool TEST_READ_UNKNOWN = true;\r\n\r\n\t\tstatic int ExpressionCounter = 0;\r\n\t\tstatic string FunctionName;\r\n\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tsw = new StreamWriter(\"chains.php\");\r\n\r\n\t\t\tsw.WriteLine(\"<?\");\r\n\t\t\tsw.WriteLine(\"function _f($_a) { }\");\r\n\t\t\tsw.WriteLine(\"function _fr(&$_a) { }\");\r\n\t\t\tsw.WriteLine(\"class A { static $x; function _f() { } };\");\r\n\r\n\t\t\tfor (int i = 1; i < MAX_CHAIN_LENGTH; i++)\r\n\t\t\t{\r\n\t\t\t\tBuildChain(\"#\" + i + \"#\", false);\r\n\t\t\t}\r\n\r\n\t\t\tif (ExpressionCounter > 0) EndFunction();\r\n\t\t\tsw.WriteLine(\"?>\");\r\n\r\n\t\t\tsw.Close();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/ChainGen/TestChains-dbg.cmd",
    "content": "..\\..\\Source\\PhpNetCompiler\\Bin\\Debug\\phpc bin\\debug\\chains.php /out:bin\\debug\\chains.exe\r\n..\\peverify bin\\debug\\chains.exe\r\npause\r\nbin\\debug\\chains.exe\r\npause"
  },
  {
    "path": "Tools/ChainGen/TestChains.cmd",
    "content": "..\\..\\Deployment\\Bin\\phpc bin\\debug\\chains.php /out:bin\\debug\\chains.exe\r\n..\\peverify bin\\debug\\chains.exe\r\npause\r\nbin\\debug\\chains.exe\r\npause"
  },
  {
    "path": "Tools/ClassDynamizer/ClassDynamizer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>ClassDynamizer</RootNamespace>\r\n    <AssemblyName>ClassDynamizer</AssemblyName>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"ICSharpCode.NRefactory, Version=2.0.0.707, Culture=neutral, PublicKeyToken=efe927acf176eea2, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath>..\\ICSharpCode.NRefactory.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Convertor.cs\" />\r\n    <Compile Include=\"Dynamizer.cs\" />\r\n    <Compile Include=\"Main.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Utility.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <PropertyGroup>\r\n    <PostBuildEvent>copy \"$(TargetPath)\" \"$(SolutionDir)\"\r\nexit /B 0\r\n</PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Tools/ClassDynamizer/Convertor.cs",
    "content": "using System;\r\nusing System.Text;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nusing ICSharpCode.NRefactory.Parser.AST;\r\n\r\nnamespace ClassDynamizer\r\n{\r\n\tstatic class Convertor\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Generates code that converts an object to the target type.\r\n\t\t/// </summary>\r\n\t\tpublic static Expression ConvertTo(string name, Expression value, TypeReference targetType,\r\n\t\t\tBlockStatement blockStatement, Statement failStmt, bool allowNull, bool isOptional, int seqNum)\r\n\t\t{\r\n\t\t\tif (Utility.IsType(targetType, \"System.Object\"))\r\n\t\t\t{\r\n\t\t\t\t// no conversion needed\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\r\n\t\t\tstring temp_local_name = String.Format(\"tmp{0}\", seqNum);\r\n\r\n\t\t\t// create the \"conversion failed\" block\r\n\t\t\tArrayList parameters = new ArrayList();\r\n\t\t\tparameters.Add(value);\r\n\t\t\tparameters.Add(new PrimitiveExpression(targetType.Type, targetType.Type));\r\n\t\t\tparameters.Add(new PrimitiveExpression(name, name));\r\n\r\n\t\t\t// the statements to execute when the cast failed\r\n\t\t\tBlockStatement fail_block = new BlockStatement();\r\n\t\t\tfail_block.AddChild(new StatementExpression(new InvocationExpression(new FieldReferenceExpression(\r\n\t\t\t\tnew TypeReferenceExpression(\"PhpException\"), \"InvalidImplicitCast\"),\r\n\t\t\t\tparameters)));\r\n\t\t\tfail_block.AddChild(failStmt);\r\n\r\n\t\t\t// try to determine whether the target type is a reference or value type\r\n\t\t\tType system_type = Type.GetType(targetType.SystemType);\r\n\t\t\tif (system_type != null && system_type.IsValueType)\r\n\t\t\t{\r\n\t\t\t\t// value type\r\n\t\t\t\tLocalVariableDeclaration temp_local;\r\n\r\n\t\t\t\tif (isOptional)\r\n\t\t\t\t{\r\n\t\t\t\t\ttemp_local = new LocalVariableDeclaration(targetType);\r\n\t\t\t\t\ttemp_local.Variables.Add(new VariableDeclaration(temp_local_name));\r\n\r\n\t\t\t\t\tblockStatement.AddChild(temp_local);\r\n\r\n\t\t\t\t\tBlockStatement new_block_stmt = new BlockStatement();\r\n\r\n\t\t\t\t\tIfElseStatement opt_stmt = new IfElseStatement(new BinaryOperatorExpression(\r\n\t\t\t\t\t\tvalue, BinaryOperatorType.InEquality, new FieldReferenceExpression(\r\n\t\t\t\t\t\tnew IdentifierExpression(\"Arg\"), \"Default\")), new_block_stmt,\r\n\t\t\t\t\t\tnew StatementExpression(new AssignmentExpression(new IdentifierExpression(temp_local_name),\r\n\t\t\t\t\t\tAssignmentOperatorType.Assign, new ObjectCreateExpression(targetType, new ArrayList()))));\r\n\r\n\t\t\t\t\tblockStatement.AddChild(opt_stmt);\r\n\t\t\t\t\tblockStatement = new_block_stmt;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tIfElseStatement if_stmt = new IfElseStatement(new UnaryOperatorExpression(\r\n\t\t\t\t\tnew ParenthesizedExpression(new BinaryOperatorExpression(value, BinaryOperatorType.TypeCheck,\r\n\t\t\t\t\tnew TypeReferenceExpression(targetType))), UnaryOperatorType.Not), fail_block);\r\n\r\n\t\t\t\tblockStatement.AddChild(if_stmt);\r\n\t\t\t\tif (isOptional)\r\n\t\t\t\t{\r\n\t\t\t\t\tblockStatement.AddChild(new StatementExpression(new AssignmentExpression(\r\n\t\t\t\t\t\tnew IdentifierExpression(temp_local_name), AssignmentOperatorType.Assign,\r\n\t\t\t\t\t\tnew CastExpression(targetType, value))));\r\n\r\n\t\t\t\t\treturn new IdentifierExpression(temp_local_name);\r\n\t\t\t\t}\r\n\t\t\t\telse return new CastExpression(targetType, value);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// probably a reference type\r\n\t\t\t\tLocalVariableDeclaration temp_local = new LocalVariableDeclaration(targetType);\r\n\t\t\t\tblockStatement.AddChild(temp_local);\r\n\r\n\t\t\t\tif (isOptional)\r\n\t\t\t\t{\r\n\t\t\t\t\t// first check for Arg.Default\r\n\t\t\t\t\ttemp_local.Variables.Add(\r\n\t\t\t\t\t\tnew VariableDeclaration(temp_local_name, new PrimitiveExpression(null, String.Empty)));\r\n\r\n\t\t\t\t\tBlockStatement new_block_stmt = new BlockStatement();\r\n\r\n\t\t\t\t\tIfElseStatement opt_stmt = new IfElseStatement(new BinaryOperatorExpression(\r\n\t\t\t\t\t\tvalue, BinaryOperatorType.InEquality, new FieldReferenceExpression(\r\n\t\t\t\t\t\tnew IdentifierExpression(\"Arg\"), \"Default\")), new_block_stmt);\r\n\r\n\t\t\t\t\tblockStatement.AddChild(opt_stmt);\r\n\t\t\t\t\tblockStatement = new_block_stmt;\r\n\r\n\t\t\t\t\t// then perform the as-cast\r\n\t\t\t\t\tblockStatement.AddChild(new StatementExpression(new AssignmentExpression(\r\n\t\t\t\t\t\tnew IdentifierExpression(temp_local_name), AssignmentOperatorType.Assign,\r\n\t\t\t\t\t\tCreateAsCastExpression(value, targetType))));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// perform the as-cast\r\n\t\t\t\t\ttemp_local.Variables.Add(\r\n\t\t\t\t\t\tnew VariableDeclaration(temp_local_name, CreateAsCastExpression(value, targetType)));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tIfElseStatement if_stmt = new IfElseStatement(new BinaryOperatorExpression(\r\n\t\t\t\t\tnew IdentifierExpression(temp_local_name), BinaryOperatorType.Equality,\r\n\t\t\t\t\tnew PrimitiveExpression(null, String.Empty)), fail_block);\r\n\r\n\t\t\t\tif (allowNull)\r\n\t\t\t\t{\r\n\t\t\t\t\t// throw only if the value is not of targetType and not null\r\n\t\t\t\t\tif_stmt.Condition = new BinaryOperatorExpression(if_stmt.Condition,\r\n\t\t\t\t\t\tBinaryOperatorType.LogicalAnd, new BinaryOperatorExpression(\r\n\t\t\t\t\t\tvalue, BinaryOperatorType.InEquality, new PrimitiveExpression(null, String.Empty)));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tblockStatement.AddChild(if_stmt);\r\n\t\t\t\t\r\n\t\t\t\treturn new IdentifierExpression(temp_local_name);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static Expression CreateAsCastExpression(Expression value, TypeReference targetType)\r\n\t\t{\r\n\t\t\tif (Utility.IsType(targetType, \"System.String\"))\r\n\t\t\t{\r\n\t\t\t\t// create special PhpVariable.AsString invocation expression\r\n\t\t\t\treturn new InvocationExpression(new FieldReferenceExpression(new IdentifierExpression(\"PhpVariable\"),\r\n\t\t\t\t\t\"AsString\"), new ArrayList(new object[] { value }));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treturn new BinaryOperatorExpression(\r\n\t\t\t\t\tvalue, BinaryOperatorType.AsCast, new TypeReferenceExpression(targetType));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/ClassDynamizer/Dynamizer.cs",
    "content": "using System;\r\nusing System.Text;\r\nusing ICSharpCode.NRefactory.Parser.AST;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\n\r\nnamespace ClassDynamizer\r\n{\r\n\tclass Dynamizer\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Dynamizes a given compile unit.\r\n\t\t/// </summary>\r\n\t\tpublic CompilationUnit Dynamize(CompilationUnit unit)\r\n\t\t{\r\n\t\t\tCompilationUnit out_unit = new CompilationUnit();\r\n\r\n\t\t\t// add Phalanger imports\r\n\t\t\tUtility.AddImport(unit, out_unit, \"PHP.Core\");\r\n\t\t\tUtility.AddImport(unit, out_unit, \"PHP.Core.Reflection\");\r\n\r\n\t\t\tforeach (INode node in unit.Children)\r\n\t\t\t{\r\n\t\t\t\t// add all original imports\r\n\t\t\t\tif (node is UsingDeclaration) out_unit.Children.Add(node);\r\n\r\n\t\t\t\t// process namespaces\r\n\t\t\t\tNamespaceDeclaration ns_decl = node as NamespaceDeclaration;\r\n\t\t\t\tif (ns_decl != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tNamespaceDeclaration out_ns_decl = new NamespaceDeclaration(ns_decl.Name);\r\n\t\t\t\t\tout_unit.Children.Add(out_ns_decl);\r\n\r\n\t\t\t\t\tforeach (INode subnode in ns_decl.Children)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTypeDeclaration type_decl = subnode as TypeDeclaration;\r\n\t\t\t\t\t\tif (type_decl != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype_decl = Dynamize(type_decl);\r\n\t\t\t\t\t\t\tif (type_decl != null) out_ns_decl.Children.Add(type_decl);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// as well as top-level types without namespaces\r\n\t\t\t\tTypeDeclaration bare_type_decl = node as TypeDeclaration;\r\n\t\t\t\tif (bare_type_decl != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tbare_type_decl = Dynamize(bare_type_decl);\r\n\t\t\t\t\tif (bare_type_decl != null) out_unit.Children.Add(bare_type_decl);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn out_unit;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Dynamizes a given type.\r\n\t\t/// </summary>\r\n\t\tprivate TypeDeclaration Dynamize(TypeDeclaration type)\r\n\t\t{\r\n\t\t\tif (!Utility.IsDecoratedByAttribute(type, \"PHP.Core.ImplementsType\")) return null;\r\n\r\n\t\t\tTypeDeclaration out_type = new TypeDeclaration(type.Modifier, new List<AttributeSection>());\r\n\t\t\tout_type.Name = type.Name;\r\n\r\n\t\t\tAddSerializibility(type, out_type);\r\n\t\t\tFixInheritance(type, out_type);\r\n\t\t\tDynamizeMembers(type, out_type);\r\n\r\n\t\t\treturn out_type;\r\n\t\t}\r\n\r\n\t\t#region Serializibility & Inheritance\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes sure that the PHP-visible type is serializable.\r\n\t\t/// </summary>\r\n\t\tprivate void AddSerializibility(TypeDeclaration type, TypeDeclaration outType)\r\n\t\t{\r\n\t\t\t// make the type serializable\r\n\t\t\tif (!Utility.IsDecoratedByAttribute(type, \"System.SerializableAttribute\"))\r\n\t\t\t{\r\n\t\t\t\tAttributeSection section = new AttributeSection();\r\n\t\t\t\tsection.Attributes.Add(new ICSharpCode.NRefactory.Parser.AST.Attribute(\"Serializable\", null, null));\r\n\t\t\t\toutType.Attributes.Add(section);\r\n\r\n\t\t\t\tConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, \r\n\t\t\t\t\t((type.Modifier & Modifier.Sealed) == Modifier.Sealed ? Modifier.Private : Modifier.Protected),\r\n\t\t\t\t\tnew List<ParameterDeclarationExpression>(), null);\r\n\r\n\t\t\t\tctor.Parameters.Add(\r\n\t\t\t\t\tnew ParameterDeclarationExpression(new TypeReference(\"System.Runtime.Serialization.SerializationInfo\"), \"info\"));\r\n\t\t\t\tctor.Parameters.Add(\r\n\t\t\t\t\tnew ParameterDeclarationExpression(new TypeReference(\"System.Runtime.Serialization.StreamingContext\"), \"context\"));\r\n\r\n\t\t\t\tctor.ConstructorInitializer = new ConstructorInitializer();\r\n\t\t\t\tctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.Base;\r\n\t\t\t\t\t\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression(\"info\"));\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression(\"context\"));\r\n\r\n\t\t\t\tctor.Body = new BlockStatement();\r\n\r\n\t\t\t\toutType.AddChild(ctor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes sure that the PHP-visible type derives from PhpObject and adds appropriate constructors.\r\n\t\t/// </summary>\r\n\t\tprivate void FixInheritance(TypeDeclaration type, TypeDeclaration outType)\r\n\t\t{\r\n\t\t\t// make the type inherit from PhpObject\r\n\t\t\tbool has_base = false;\r\n\r\n\t\t\tforeach (TypeReference base_type in type.BaseTypes)\r\n\t\t\t{\r\n\t\t\t\t// TODO: base this decision on an attribute?\r\n\t\t\t\tif (!base_type.Type.StartsWith(\"I\") && !base_type.Type.StartsWith(\"SPL.\"))\r\n\t\t\t\t{\r\n\t\t\t\t\thas_base = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!has_base) outType.BaseTypes.Add(new TypeReference(\"PhpObject\"));\r\n\r\n\t\t\t// add the necessary constructors\r\n\t\t\tbool has_short_ctor = false;\r\n\t\t\tbool has_long_ctor = false;\r\n\r\n\t\t\tBlockStatement default_ctor_body = null;\r\n\r\n\t\t\tforeach (INode member in type.Children)\r\n\t\t\t{\r\n\t\t\t\tConstructorDeclaration ctor = member as ConstructorDeclaration;\r\n\t\t\t\tif (ctor != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ctor.Parameters.Count == 2 && Utility.IsType(ctor.Parameters[0].TypeReference, \"PHP.Core.ScriptContext\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (Utility.IsType(ctor.Parameters[1].TypeReference, \"System.Boolean\")) has_short_ctor = true;\r\n\t\t\t\t\t\tif (Utility.IsType(ctor.Parameters[1].TypeReference, \"PHP.Core.Reflection.DTypeDesc\")) has_long_ctor = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (ctor.Parameters.Count == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdefault_ctor_body = ctor.Body;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!has_short_ctor)\r\n\t\t\t{\r\n\t\t\t\tConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, Modifier.Public,\r\n\t\t\t\t\tnew List<ParameterDeclarationExpression>(), null);\r\n\t\t\t\tctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"ScriptContext\"), \"context\"));\r\n\t\t\t\tctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"Boolean\"), \"newInstance\"));\r\n\r\n\t\t\t\tctor.ConstructorInitializer = new ConstructorInitializer();\r\n\t\t\t\tctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.Base;\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression(\"context\"));\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(new IdentifierExpression(\"newInstance\"));\r\n\r\n\t\t\t\tif (default_ctor_body == null) ctor.Body = new BlockStatement();\r\n\t\t\t\telse ctor.Body = default_ctor_body;\r\n\r\n\t\t\t\tUtility.MakeNonBrowsable(ctor);\r\n\t\t\t\toutType.AddChild(ctor);\r\n\t\t\t}\r\n\r\n\t\t\tif (!has_long_ctor)\r\n\t\t\t{\r\n\t\t\t\tConstructorDeclaration ctor = new ConstructorDeclaration(type.Name, Modifier.Public,\r\n\t\t\t\t\tnew List<ParameterDeclarationExpression>(), null);\r\n\t\t\t\tctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"ScriptContext\"), \"context\"));\r\n\t\t\t\tctor.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"DTypeDesc\"), \"caller\"));\r\n\r\n\t\t\t\tIdentifierExpression context_param = new IdentifierExpression(\"context\");\r\n\t\t\t\tIdentifierExpression caller_param = new IdentifierExpression(\"caller\");\r\n\r\n\t\t\t\tctor.ConstructorInitializer = new ConstructorInitializer();\r\n\t\t\t\tctor.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.This;\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(context_param);\r\n\t\t\t\tctor.ConstructorInitializer.Arguments.Add(new PrimitiveExpression(true, String.Empty));\r\n\r\n\t\t\t\tInvocationExpression invocation = new InvocationExpression(\r\n\t\t\t\t\t\tnew FieldReferenceExpression(new ThisReferenceExpression(), \"InvokeConstructor\"),\r\n\t\t\t\t\t\tnew ArrayList());\r\n\r\n\t\t\t\tinvocation.Arguments.Add(context_param);\r\n\t\t\t\tinvocation.Arguments.Add(caller_param);\r\n\r\n\t\t\t\tctor.Body = new BlockStatement();\r\n\t\t\t\tctor.Body.AddChild(new StatementExpression(invocation));\r\n\r\n\t\t\t\tUtility.MakeNonBrowsable(ctor);\r\n\t\t\t\toutType.AddChild(ctor);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds argfull and argless stubs for all PHP visible members.\r\n\t\t/// </summary>\r\n\t\tprivate void DynamizeMembers(TypeDeclaration type, TypeDeclaration outType)\r\n\t\t{\r\n\t\t\tList<Statement> populate_statements = new List<Statement>();\r\n\r\n\t\t\tforeach (INode member in type.Children)\r\n\t\t\t{\r\n\t\t\t\tAttributedNode node = member as AttributedNode;\r\n\t\t\t\tif (node != null && Utility.IsDecoratedByAttribute(node, \"PHP.Core.PhpVisibleAttribute\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tMethodDeclaration method_decl;\r\n\t\t\t\t\tPropertyDeclaration prop_decl;\r\n\r\n\t\t\t\t\tif ((method_decl = member as MethodDeclaration) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpopulate_statements.Add(DynamizeMethod(method_decl, outType));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ((prop_decl = member as PropertyDeclaration) != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpopulate_statements.Add(DynamizeProperty(prop_decl, outType));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse throw new InvalidOperationException(\"PhpVisible applied to invalid member\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// add the __PopulateTypeDesc method\r\n\t\t\tMethodDeclaration populator = new MethodDeclaration(\r\n\t\t\t\t\"__PopulateTypeDesc\",\r\n\t\t\t\tModifier.Private | Modifier.Static,\r\n\t\t\t\tnew TypeReference(\"void\", \"System.Void\"), new List<ParameterDeclarationExpression>(), null);\r\n\r\n\t\t\tpopulator.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"PhpTypeDesc\"), \"desc\"));\r\n\r\n\t\t\tpopulator.Body = new BlockStatement();\r\n\t\t\tforeach (Statement stmt in populate_statements)\r\n\t\t\t{\r\n\t\t\t\tif (stmt != null) populator.Body.AddChild(stmt);\r\n\t\t\t}\r\n\r\n\t\t\toutType.AddChild(populator);\r\n\t\t}\r\n\r\n\t\t#region Method dynamization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds stubs for a PhpVisible method.\r\n\t\t/// </summary>\r\n\t\tprivate Statement DynamizeMethod(MethodDeclaration method, TypeDeclaration outType)\r\n\t\t{\r\n\t\t\tbool has_this;\r\n\t\t\tMethodDeclaration argfull = CreateArgfull(method, false, out has_this);\r\n\r\n\t\t\tif (has_this)\r\n\t\t\t{\r\n\t\t\t\toutType.AddChild(argfull);\r\n\t\t\t\targfull = CreateArgfull(method, true, out has_this);\r\n\t\t\t}\r\n\t\t\toutType.AddChild(argfull);\r\n\r\n\t\t\tMethodDeclaration argless = CreateArgless(method);\r\n\t\t\toutType.AddChild(argless);\r\n\r\n\t\t\t// return an expression to be put to __PopulateTypeDesc\r\n\t\t\tArrayList parameters = new ArrayList();\r\n\t\t\tparameters.Add(new PrimitiveExpression(method.Name, method.Name));\r\n\t\t\tparameters.Add(Utility.ModifierToMemberAttributes(argfull.Modifier));\r\n\r\n\t\t\tArrayList del_params = new ArrayList();\r\n\t\t\tdel_params.Add(new FieldReferenceExpression(\r\n\t\t\t\tnew TypeReferenceExpression(((TypeDeclaration)method.Parent).Name),\r\n\t\t\t\tmethod.Name));\r\n\r\n\t\t\tparameters.Add(new ObjectCreateExpression(new TypeReference(\"RoutineDelegate\"), del_params));\r\n\r\n\t\t\treturn new StatementExpression(new InvocationExpression(\r\n\t\t\t\tnew FieldReferenceExpression(new IdentifierExpression(\"desc\"), \"AddMethod\"),\r\n\t\t\t\tparameters));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an argfull stub for the specified implementation method.\r\n\t\t/// </summary>\r\n\t\tprivate MethodDeclaration CreateArgfull(MethodDeclaration template, bool skipThisParams, out bool hasThisParams)\r\n\t\t{\r\n\t\t\thasThisParams = false;\r\n\r\n\t\t\tMethodDeclaration method = new MethodDeclaration(template.Name, template.Modifier,\r\n\t\t\t\tnew TypeReference(\"Object\"), new List<ParameterDeclarationExpression>(), new List<AttributeSection>());\r\n\r\n\t\t\tmethod.Body = new BlockStatement();\r\n\r\n\t\t\tExpression[] arguments = new Expression[template.Parameters.Count];\r\n\r\n\t\t\t// prepend a ScriptContext parameter and make all parameters Objects\r\n\t\t\t// (TODO: PhpReferences for ref parameters)\r\n\t\t\tmethod.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"ScriptContext\"), \"__context\"));\r\n\r\n\t\t\tint arg_counter = 0;\r\n\t\t\tforeach (ParameterDeclarationExpression param in template.Parameters)\r\n\t\t\t{\r\n\t\t\t\tParameterDeclarationExpression new_param =\r\n\t\t\t\t\tnew ParameterDeclarationExpression(new TypeReference(\"Object\"), param.ParameterName);\r\n\r\n\t\t\t\tbool optional = false;\r\n\r\n\t\t\t\tif (Utility.IsDecoratedByAttribute(param.Attributes, Utility.OptionalAttrType))\r\n\t\t\t\t{\r\n\t\t\t\t\tAttributeSection section = new AttributeSection();\r\n\t\t\t\t\tnew_param.Attributes.Add(section);\r\n\t\t\t\t\tsection.Attributes.Add(new ICSharpCode.NRefactory.Parser.AST.Attribute(Utility.OptionalAttrType, null, null));\r\n\r\n\t\t\t\t\toptional = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbool this_param = Utility.IsDecoratedByAttribute(param.Attributes, \"PHP.Core.ThisAttribute\");\r\n\t\t\t\tif (this_param) hasThisParams = true;\r\n\r\n\t\t\t\tif (this_param && skipThisParams)\r\n\t\t\t\t{\r\n\t\t\t\t\targuments[arg_counter++] = new PrimitiveExpression(null, String.Empty);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// generate conversion\r\n\t\t\t\t\targuments[arg_counter++] = Convertor.ConvertTo(\r\n\t\t\t\t\t\ttemplate.Name,\r\n\t\t\t\t\t\tnew IdentifierExpression(param.ParameterName),\r\n\t\t\t\t\t\tparam.TypeReference,\r\n\t\t\t\t\t\tmethod.Body,\r\n\t\t\t\t\t\tnew ReturnStatement(new PrimitiveExpression(null, String.Empty)),\r\n\t\t\t\t\t\tUtility.IsDecoratedByAttribute(param.Attributes, \"PHP.Core.NullableAttribute\") || this_param,\r\n\t\t\t\t\t\toptional,\r\n\t\t\t\t\t\targ_counter);\r\n\r\n\t\t\t\t\tmethod.Parameters.Add(new_param);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// invoke the template method\r\n\t\t\tInvocationExpression invocation = new InvocationExpression(new IdentifierExpression(template.Name),\r\n\t\t\t\tnew ArrayList(arguments));\r\n\r\n\t\t\tif (template.TypeReference.SystemType == \"System.Void\")\r\n\t\t\t{\r\n\t\t\t\tmethod.Body.AddChild(new StatementExpression(invocation));\r\n\t\t\t\tmethod.Body.AddChild(new ReturnStatement(new PrimitiveExpression(null, String.Empty)));\r\n\t\t\t}\r\n\t\t\telse method.Body.AddChild(new ReturnStatement(invocation));\r\n\r\n\t\t\tif (!hasThisParams || skipThisParams) Utility.MakeNonBrowsable(method);\r\n\t\t\treturn method;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates an argless stub for the specified implementation method.\r\n\t\t/// </summary>\r\n\t\tprivate MethodDeclaration CreateArgless(MethodDeclaration template)\r\n\t\t{\r\n\t\t\tMethodDeclaration method = new MethodDeclaration(template.Name, Modifier.Public | Modifier.Static,\r\n\t\t\t\tnew TypeReference(\"Object\"), new List<ParameterDeclarationExpression>(), new List<AttributeSection>());\r\n\r\n\t\t\tmethod.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"Object\"), \"instance\"));\r\n\t\t\tmethod.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"PhpStack\"), \"stack\"));\r\n\r\n\t\t\tmethod.Body = new BlockStatement();\r\n\r\n\t\t\t// stack.CalleeName = <template name>\r\n\t\t\tmethod.Body.AddChild(new StatementExpression(new AssignmentExpression(new FieldReferenceExpression(\r\n\t\t\t\tnew IdentifierExpression(\"stack\"), \"CalleeName\"), AssignmentOperatorType.Assign,\r\n\t\t\t\tnew PrimitiveExpression(template.Name, template.Name))));\r\n\r\n\t\t\t// peek arguments\r\n\t\t\tint arg_counter = 0, shift = 0;\r\n\t\t\tforeach (ParameterDeclarationExpression param in template.Parameters)\r\n\t\t\t{\r\n\t\t\t\targ_counter++;\r\n\r\n\t\t\t\tLocalVariableDeclaration arg_local = new LocalVariableDeclaration(new TypeReference(\"Object\"));\r\n\r\n\t\t\t\tExpression initializer;\r\n\t\t\t\tif (Utility.IsDecoratedByAttribute(param.Attributes, \"PHP.Core.ThisAttribute\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tinitializer = new IdentifierExpression(\"instance\");\r\n\t\t\t\t\tshift++;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tArrayList peek_params = new ArrayList();\r\n\t\t\t\t\tpeek_params.Add(new PrimitiveExpression(arg_counter - shift, String.Empty));\r\n\r\n\t\t\t\t\tif (Utility.IsDecoratedByAttribute(param.Attributes, Utility.OptionalAttrType))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinitializer = new InvocationExpression(new FieldReferenceExpression(\r\n\t\t\t\t\t\t\tnew IdentifierExpression(\"stack\"), \"PeekValueOptional\"), peek_params);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tinitializer = new InvocationExpression(new FieldReferenceExpression(\r\n\t\t\t\t\t\t\tnew IdentifierExpression(\"stack\"), \"PeekValue\"), peek_params);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\targ_local.Variables.Add(new VariableDeclaration(String.Format(\"arg{0}\", arg_counter), initializer));\r\n\t\t\t\tmethod.Body.AddChild(arg_local);\r\n\t\t\t}\r\n\r\n\t\t\t// stack.RemoveFrame()\r\n\t\t\tmethod.Body.AddChild(new StatementExpression(new InvocationExpression(new FieldReferenceExpression(\r\n\t\t\t\tnew IdentifierExpression(\"stack\"), \"RemoveFrame\"), new ArrayList())));\r\n\r\n\t\t\t// return [invoke argfull]\r\n\t\t\tArrayList argfull_params = new ArrayList();\r\n\t\t\targfull_params.Add(new FieldReferenceExpression(new IdentifierExpression(\"stack\"), \"Context\"));\r\n\t\t\tfor (int i = 0; i < template.Parameters.Count; i++)\r\n\t\t\t{\r\n\t\t\t\targfull_params.Add(new IdentifierExpression(String.Format(\"arg{0}\", i + 1)));\r\n\t\t\t}\r\n\r\n\t\t\tif ((template.Modifier & Modifier.Static) == Modifier.Static)\r\n\t\t\t{\r\n\t\t\t\tmethod.Body.AddChild(new ReturnStatement(new InvocationExpression(new IdentifierExpression(\r\n\t\t\t\t\ttemplate.Name), argfull_params)));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmethod.Body.AddChild(new ReturnStatement(new InvocationExpression(\r\n\t\t\t\t\tnew FieldReferenceExpression(new ParenthesizedExpression(\r\n\t\t\t\t\tnew CastExpression(new TypeReference(((TypeDeclaration)template.Parent).Name),\r\n\t\t\t\t\tnew IdentifierExpression(\"instance\"))), template.Name), argfull_params)));\r\n\t\t\t}\r\n\r\n\t\t\tUtility.MakeNonBrowsable(method);\r\n\t\t\treturn method;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t#region Property dynamization\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds stubs for a PhpVisible property.\r\n\t\t/// </summary>\r\n\t\tprivate Statement DynamizeProperty(PropertyDeclaration property, TypeDeclaration outType)\r\n\t\t{\r\n\t\t\tMethodDeclaration getter = null, setter = null;\r\n\r\n\t\t\tif (property.HasGetRegion)\r\n\t\t\t{\r\n\t\t\t\t// add the getter stub\r\n\t\t\t\tgetter = new MethodDeclaration(\r\n\t\t\t\t\t\"__get_\" + property.Name, Modifier.Private | Modifier.Static,\r\n\t\t\t\t\tnew TypeReference(\"Object\"),\r\n\t\t\t\t\tnew List<ParameterDeclarationExpression>(),\r\n\t\t\t\t\tnew List<AttributeSection>());\r\n\r\n\t\t\t\tgetter.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"Object\"), \"instance\"));\r\n\r\n\t\t\t\tgetter.Body = new BlockStatement();\r\n\t\t\t\tgetter.Body.AddChild(new ReturnStatement(new FieldReferenceExpression(new ParenthesizedExpression(\r\n\t\t\t\t\tnew CastExpression(new TypeReference(((TypeDeclaration)property.Parent).Name),\r\n\t\t\t\t\tnew IdentifierExpression(\"instance\"))), property.Name)));\r\n\r\n\t\t\t\toutType.AddChild(getter);\r\n\t\t\t}\r\n\r\n\t\t\tif (property.HasSetRegion)\r\n\t\t\t{\r\n\t\t\t\t// add the setter stub\r\n\t\t\t\tsetter = new MethodDeclaration(\r\n\t\t\t\t\t\"__set_\" + property.Name, Modifier.Private | Modifier.Static,\r\n\t\t\t\t\tnew TypeReference(\"void\", \"System.Void\"),\r\n\t\t\t\t\tnew List<ParameterDeclarationExpression>(),\r\n\t\t\t\t\tnew List<AttributeSection>());\r\n\r\n\t\t\t\tsetter.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"Object\"), \"instance\"));\r\n\t\t\t\tsetter.Parameters.Add(new ParameterDeclarationExpression(new TypeReference(\"Object\"), \"value\"));\r\n\r\n\t\t\t\tsetter.Body = new BlockStatement();\r\n\r\n\t\t\t\tExpression rhs = Convertor.ConvertTo(\r\n\t\t\t\t\tproperty.Name,\r\n\t\t\t\t\tnew IdentifierExpression(\"value\"),\r\n\t\t\t\t\tproperty.TypeReference,\r\n\t\t\t\t\tsetter.Body,\r\n\t\t\t\t\tnew ReturnStatement(NullExpression.Instance),\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\t1);\r\n\r\n\t\t\t\tsetter.Body.AddChild(new StatementExpression(new AssignmentExpression(\r\n\t\t\t\t\t(new FieldReferenceExpression(new ParenthesizedExpression(\r\n\t\t\t\t\tnew CastExpression(new TypeReference(((TypeDeclaration)property.Parent).Name),\r\n\t\t\t\t\tnew IdentifierExpression(\"instance\"))), property.Name)),\r\n\t\t\t\t\tAssignmentOperatorType.Assign, rhs)));\r\n\r\n\t\t\t\toutType.AddChild(setter);\r\n\t\t\t}\r\n\r\n\t\t\t// return an expression to be put to __PopulateTypeDesc\r\n\t\t\tArrayList parameters = new ArrayList();\r\n\t\t\tparameters.Add(new PrimitiveExpression(property.Name, property.Name));\r\n\t\t\tparameters.Add(Utility.ModifierToMemberAttributes(property.Modifier));\r\n\r\n\t\t\tif (getter != null)\r\n\t\t\t{\r\n\t\t\t\tArrayList del_params = new ArrayList();\r\n\t\t\t\tdel_params.Add(new FieldReferenceExpression(\r\n\t\t\t\t\tnew TypeReferenceExpression(((TypeDeclaration)property.Parent).Name),\r\n\t\t\t\t\tgetter.Name));\r\n\r\n\t\t\t\tparameters.Add(new ObjectCreateExpression(new TypeReference(\"GetterDelegate\"), del_params));\r\n\t\t\t}\r\n\t\t\telse parameters.Add(new PrimitiveExpression(null, String.Empty));\r\n\r\n\t\t\tif (setter != null)\r\n\t\t\t{\r\n\t\t\t\tArrayList del_params = new ArrayList();\r\n\t\t\t\tdel_params.Add(new FieldReferenceExpression(\r\n\t\t\t\t\tnew TypeReferenceExpression(((TypeDeclaration)property.Parent).Name),\r\n\t\t\t\t\tsetter.Name));\r\n\r\n\t\t\t\tparameters.Add(new ObjectCreateExpression(new TypeReference(\"SetterDelegate\"), del_params));\r\n\t\t\t}\r\n\t\t\telse parameters.Add(new PrimitiveExpression(null, String.Empty));\r\n\r\n\t\t\treturn new StatementExpression(new InvocationExpression(\r\n\t\t\t\tnew FieldReferenceExpression(new IdentifierExpression(\"desc\"), \"AddProperty\"),\r\n\t\t\t\tparameters));\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/ClassDynamizer/Main.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\n\r\nusing ICSharpCode.NRefactory.Parser;\r\nusing ICSharpCode.NRefactory.Parser.AST;\r\nusing ICSharpCode.NRefactory.PrettyPrinter;\r\n\r\nnamespace ClassDynamizer\r\n{\r\n\tclass Program\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Dynamizes a list of files.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"files\">The files to dynamize.</param>\r\n\t\t/// <param name=\"outDir\">The output directory or <B>null</B>.</param>\r\n\t\tstatic void DynamizeFiles(List<string> files, string outDir)\r\n\t\t{\r\n\t\t\tDynamizer dynamizer = new Dynamizer();\r\n\r\n\t\t\tforeach (string file in files)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Dynamizing types in '{0}'\", file);\r\n\r\n\t\t\t\tIParser parser;\r\n\t\t\t\tCompilationUnit unit;\r\n\r\n\t\t\t\tstring ext = Path.GetExtension(file).ToLower();\r\n\r\n\t\t\t\tusing (StreamReader sr = new StreamReader(file))\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch (ext)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \".cs\": parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, sr); break;\r\n\t\t\t\t\t\tcase \".vb\": parser = ParserFactory.CreateParser(SupportedLanguage.VBNet, sr); break;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tthrow new ArgumentException(\"Unknown language.\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tparser.ParseMethodBodies = true;\r\n\t\t\t\t\tparser.Parse();\r\n\r\n\t\t\t\t\tif (parser.Errors.count > 0)\r\n\t\t\t\t\t{\r\n                        throw new ArgumentException(\"Parse error: \" + parser.Errors.ErrorOutput);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tunit = parser.CompilationUnit;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tunit = dynamizer.Dynamize(unit);\r\n\r\n\t\t\t\tstring out_path = Path.ChangeExtension(file, \".dynamic\" + Path.GetExtension(file));\r\n\t\t\t\tif (outDir != null) out_path = Path.Combine(outDir, Path.GetFileName(out_path));\r\n\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tusing (StreamWriter sw = new StreamWriter(out_path))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tIOutputASTVisitor visitor;\r\n\t\t\t\t\t\tswitch (ext)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase \".cs\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"// ***\");\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"// Do not edit this file. It has been generated by the ClassDynamizer tool.\");\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"// ***\");\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"#pragma warning disable 0108\");\r\n\t\t\t\t\t\t\t\tvisitor = new CSharpOutputVisitor();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tcase \".vb\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"' ***\");\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"' Do not edit this file. It has been generated by the ClassDynamizer tool.\");\r\n\t\t\t\t\t\t\t\tsw.WriteLine(\"' ***\");\r\n\t\t\t\t\t\t\t\tvisitor = new VBNetOutputVisitor();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tthrow new ArgumentException(\"Unknown language.\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tunit.AcceptVisitor(visitor, DBNull.Value);\r\n\r\n\t\t\t\t\t\tsw.Write(visitor.Text);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (UnauthorizedAccessException)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"Could not write to '{0}'. Is the file checked out?\", out_path);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Phalanger class dynamizer v2.0\");\r\n\r\n\t\t\tif (args.Length == 0 || (args.Length == 1 && (args[0] == \"/?\" || args[0] == \"-?\")))\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"This tool performs source code dynamization. Types marked by [ImplementsType]\");\r\n\t\t\t\tConsole.WriteLine(\"are converted to fully dynamic types as produced by the Phalanger compiler.\");\r\n\t\t\t\tConsole.WriteLine(\"Only members marked by [PhpVisible] will be accessible from PHP.\");\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tConsole.WriteLine(\"Note: This tool has its limitations, see the XmlDom managed extension for\");\r\n\t\t\t\tConsole.WriteLine(\"      an example on how to write classes suitable for dynamization.\");\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tConsole.WriteLine(\"Usage: ClassDynamizer SourceFile [AnotherSourceFile ...] [/out:DestinationDirectory]\");\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tConsole.WriteLine(\"Language is detected automatically based on file extensions.\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tList<string> files = new List<string>();\r\n\t\t\t\tstring out_dir = null;\r\n\r\n\t\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring str = args[i];\r\n\t\t\t\t\tif (str.StartsWith(\"/out:\")) out_dir = str.Substring(5);\r\n\t\t\t\t\telse files.Add(str);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tDynamizeFiles(files, out_dir);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/ClassDynamizer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"ClassDynamizer\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"HOME USER\")]\r\n[assembly: AssemblyProduct(\"ClassDynamizer\")]\r\n[assembly: AssemblyCopyright(\"Copyright © HOME USER 2006\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"fe34f0c9-6381-4950-a390-4655c3ee801c\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Tools/ClassDynamizer/Utility.cs",
    "content": "using System;\r\nusing System.Text;\r\nusing System.Collections.Generic;\r\nusing ICSharpCode.NRefactory.Parser.AST;\r\n\r\nnamespace ClassDynamizer\r\n{\r\n\tstatic class Utility\r\n\t{\r\n\t\tpublic static string OptionalAttrType = \"System.Runtime.InteropServices.OptionalAttribute\";\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an attribute given by its full type name is contained in a attribute collections.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsDecoratedByAttribute(AttributedNode node, string attrTypeName)\r\n\t\t{\r\n\t\t\treturn IsDecoratedByAttribute(node.Attributes, attrTypeName);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether an attribute given by its full type name is contained in a attribute collections.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsDecoratedByAttribute(List<AttributeSection> attributes, string attrTypeName)\r\n\t\t{\r\n\t\t\tstring short_name = attrTypeName;\r\n\r\n\t\t\tint index = short_name.LastIndexOf('.');\r\n\t\t\tif (index > 0) short_name = short_name.Substring(index + 1);\r\n\r\n\t\t\tstring shortest_name = short_name;\r\n\t\t\tstring noattr_name = attrTypeName;\r\n\r\n\t\t\tif (shortest_name.EndsWith(\"Attribute\"))\r\n\t\t\t{\r\n\t\t\t\tshortest_name = shortest_name.Substring(0, shortest_name.Length - 9);\r\n\t\t\t\tnoattr_name = noattr_name.Substring(0, noattr_name.Length - 9);\r\n\t\t\t}\r\n\r\n\t\t\tforeach (AttributeSection section in attributes)\r\n\t\t\t{\r\n\t\t\t\tforeach (ICSharpCode.NRefactory.Parser.AST.Attribute attr in section.Attributes)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (attr.Name == attrTypeName ||\r\n\t\t\t\t\t\tattr.Name == noattr_name ||\r\n\t\t\t\t\t\tattr.Name == short_name ||\r\n\t\t\t\t\t\tattr.Name == shortest_name) return true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Determines whether a type given by its full name corresponds to a type reference.\r\n\t\t/// </summary>\r\n\t\tpublic static bool IsType(TypeReference type, string typeName)\r\n\t\t{\r\n\t\t\tif (type.SystemType == typeName) return true;\r\n\r\n\t\t\tint index = typeName.LastIndexOf('.');\r\n\t\t\treturn (index > 0 && type.SystemType == typeName.Substring(index + 1));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Makes the given node [EditorBrowsable(Never)].\r\n\t\t/// </summary>\r\n\t\tpublic static void MakeNonBrowsable(AttributedNode node)\r\n\t\t{\r\n\t\t\tAttributeSection section = new AttributeSection();\r\n\t\t\tICSharpCode.NRefactory.Parser.AST.Attribute attribute =\r\n\t\t\t\tnew ICSharpCode.NRefactory.Parser.AST.Attribute(\"System.ComponentModel.EditorBrowsable\",\r\n\t\t\t\tnew List<Expression>(), null);\r\n\r\n\t\t\tattribute.PositionalArguments.Add(new FieldReferenceExpression(new TypeReferenceExpression(\r\n\t\t\t\t\"System.ComponentModel.EditorBrowsableState\"), \"Never\"));\r\n\r\n\t\t\tsection.Attributes.Add(attribute);\r\n\t\t\tnode.Attributes.Add(section);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Transforms a member modifier into an expression evaluating to the corresponding\r\n\t\t/// Phalanger PhpMemberAttributes.\r\n\t\t/// </summary>\r\n\t\tpublic static Expression ModifierToMemberAttributes(Modifier modifier)\r\n\t\t{\r\n\t\t\tExpression result = NullExpression.Instance;\r\n\r\n\t\t\tif ((modifier & Modifier.Public) == Modifier.Public) OrFlag(ref result, \"PhpMemberAttributes\", \"Public\");\r\n\t\t\tif ((modifier & Modifier.Protected) == Modifier.Protected) OrFlag(ref result, \"PhpMemberAttributes\", \"Protected\");\r\n\t\t\tif ((modifier & Modifier.Private) == Modifier.Private) OrFlag(ref result, \"PhpMemberAttributes\", \"Private\");\r\n\r\n\t\t\tif ((modifier & Modifier.Static) == Modifier.Static) OrFlag(ref result, \"PhpMemberAttributes\", \"Static\");\r\n\t\t\tif ((modifier & Modifier.Abstract) == Modifier.Abstract) OrFlag(ref result, \"PhpMemberAttributes\", \"Abstract\");\r\n\t\t\tif ((modifier & Modifier.Sealed) == Modifier.Sealed) OrFlag(ref result, \"PhpMemberAttributes\", \"Final\");\r\n\r\n\t\t\tif (result.IsNull) OrFlag(ref result, \"PhpMemberAttributes\", \"None\");\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Ors flags.\r\n\t\t/// </summary>\r\n\t\tpublic static void OrFlag(ref Expression expr, string enumTypeName, string enumFieldName)\r\n\t\t{\r\n\t\t\tExpression field = new FieldReferenceExpression(new TypeReferenceExpression(enumTypeName), enumFieldName);\r\n\r\n\t\t\tif (expr.IsNull)\r\n\t\t\t{\r\n\t\t\t\texpr = field;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\texpr = new BinaryOperatorExpression(expr, BinaryOperatorType.BitwiseOr, field);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Adds an import (using) if it is not specified in another compile unit.\r\n\t\t/// </summary>\r\n\t\tpublic static void AddImport(CompilationUnit unit, CompilationUnit outUnit, string ns)\r\n\t\t{\r\n\t\t\tif (unit != null)\r\n\t\t\t{\r\n\t\t\t\tforeach (INode node in unit.Children)\r\n\t\t\t\t{\r\n\t\t\t\t\tUsingDeclaration decl = node as UsingDeclaration;\r\n\t\t\t\t\tif (decl != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tforeach (Using us in decl.Usings)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (us.Name == ns) return;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toutUnit.AddChild(new UsingDeclaration(ns));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Accept.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\npublic class Accept\r\n{\r\n\tprivate List<CodeBlock> codeBlocks;\r\n\tpublic List<CodeBlock> CodeBlocks\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn this.codeBlocks;\r\n\t\t}\r\n\t}\r\n\tpublic Accept(List<CodeBlock> codeBlocks)\r\n\t{\r\n\t\tthis.codeBlocks = codeBlocks;\r\n\t}\r\n\tpublic void Dump()\r\n\t{\r\n\t\tforeach (CodeBlock current in this.codeBlocks)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"line: \" + current.FirstLine + \":\");\r\n\t\t\tforeach (string current2 in current.Code)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(current2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/CodeBlock.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\npublic struct CodeBlock\r\n{\r\n\tprivate List<string> code;\r\n\tprivate int firstLine;\r\n\tprivate int lastLine;\r\n\tpublic List<string> Code\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn this.code;\r\n\t\t}\r\n\t}\r\n\tpublic int FirstLine\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn this.firstLine;\r\n\t\t}\r\n\t}\r\n\tpublic int LastLine\r\n\t{\r\n\t\tget\r\n\t\t{\r\n\t\t\treturn this.lastLine;\r\n\t\t}\r\n\t}\r\n\tpublic CodeBlock(List<string> code, int firstLine, int lastLine)\r\n\t{\r\n\t\tthis.code = code;\r\n\t\tthis.firstLine = firstLine;\r\n\t\tthis.lastLine = lastLine;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/CsLex.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{B238564F-595A-4449-9E7A-CC181AE6E966}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>CsLex</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <WarningLevel>4</WarningLevel>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Platform)' == 'AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Accept.cs\" />\r\n    <Compile Include=\"CodeBlock.cs\" />\r\n    <Compile Include=\"Error.cs\" />\r\n    <Compile Include=\"Errors.cs\" />\r\n    <Compile Include=\"Lex\\Alloc.cs\" />\r\n    <Compile Include=\"Lex\\Anchor.cs\" />\r\n    <Compile Include=\"Lex\\BitSet.cs\" />\r\n    <Compile Include=\"Lex\\Bunch.cs\" />\r\n    <Compile Include=\"Lex\\CharSet.cs\" />\r\n    <Compile Include=\"Lex\\Dfa.cs\" />\r\n    <Compile Include=\"Lex\\DTrans.cs\" />\r\n    <Compile Include=\"Lex\\Emit.cs\" />\r\n    <Compile Include=\"Lex\\Gen.cs\" />\r\n    <Compile Include=\"Lex\\Input.cs\" />\r\n    <Compile Include=\"Lex\\Lex.cs\" />\r\n    <Compile Include=\"Lex\\MakeNfa.cs\" />\r\n    <Compile Include=\"Lex\\Minimize.cs\" />\r\n    <Compile Include=\"Lex\\Nfa.cs\" />\r\n    <Compile Include=\"Lex\\Nfa2Dfa.cs\" />\r\n    <Compile Include=\"Lex\\NfaPair.cs\" />\r\n    <Compile Include=\"Lex\\SimplifyNfa.cs\" />\r\n    <Compile Include=\"Lex\\Spec.cs\" />\r\n    <Compile Include=\"Lex\\Tokens.cs\" />\r\n    <Compile Include=\"Lex\\Utility.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n</Project>"
  },
  {
    "path": "Tools/CsLex/Error.cs",
    "content": "using System;\r\npublic class Error\r\n{\r\n\tpublic static void impos(string message)\r\n\t{\r\n\t\tConsole.WriteLine(\"Lex Error: \" + message);\r\n\t}\r\n\tpublic static string GetErrorMessage(Errors error)\r\n\t{\r\n\t\tswitch (error)\r\n\t\t{\r\n\t\tcase Errors.BADEXPR:\r\n\t\t\treturn \"Malformed regular expression.\";\r\n\t\tcase Errors.PAREN:\r\n\t\t\treturn \"Missing close parenthesis.\";\r\n\t\tcase Errors.LENGTH:\r\n\t\t\treturn \"Too many regular expressions or expression too long.\";\r\n\t\tcase Errors.BRACKET:\r\n\t\t\treturn \"Missing [ in character class.\";\r\n\t\tcase Errors.BOL:\r\n\t\t\treturn \"^ must be at start of expression or after [.\";\r\n\t\tcase Errors.CLOSE:\r\n\t\t\treturn \"+ ? or * must follow an expression or subexpression.\";\r\n\t\tcase Errors.NEWLINE:\r\n\t\t\treturn \"Newline in quoted string.\";\r\n\t\tcase Errors.BADMAC:\r\n\t\t\treturn \"Missing } in macro expansion.\";\r\n\t\tcase Errors.NOMAC:\r\n\t\t\treturn \"Macro does not exist.\";\r\n\t\tcase Errors.MACDEPTH:\r\n\t\t\treturn \"Macro expansions nested too deeply.\";\r\n\t\tcase Errors.INIT:\r\n\t\t\treturn \"Lex has not been successfully initialized.\";\r\n\t\tcase Errors.EOF:\r\n\t\t\treturn \"Unexpected end-of-file found.\";\r\n\t\tcase Errors.DIRECT:\r\n\t\t\treturn \"Undefined or badly-formed Lex directive.\";\r\n\t\tcase Errors.INTERNAL:\r\n\t\t\treturn \"Internal Lex error.\";\r\n\t\tcase Errors.STATE:\r\n\t\t\treturn \"Unitialized state name.\";\r\n\t\tcase Errors.MACDEF:\r\n\t\t\treturn \"Badly formed macro definition.\";\r\n\t\tcase Errors.SYNTAX:\r\n\t\t\treturn \"Syntax error.\";\r\n\t\tcase Errors.BRACE:\r\n\t\t\treturn \"Missing brace at start of lexical action.\";\r\n\t\tcase Errors.DASH:\r\n\t\t\treturn \"Special character dash - in character class [...] must be preceded by start-of-range character.\";\r\n\t\tcase Errors.ZERO:\r\n\t\t\treturn \"Zero-length regular expression.\";\r\n\t\tcase Errors.InvalidCharClass:\r\n\t\t\treturn \"Invalid character class.\";\r\n\t\tcase Errors.DuplicatedMacro:\r\n\t\t\treturn \"Duplicated macro.\";\r\n\t\tdefault:\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\tpublic static void ParseError(Errors error, string file, int line)\r\n\t{\r\n\t\tError.ParseError(error, file, line, 1);\r\n\t}\r\n\tpublic static void ParseError(Errors error, string file, int line, int column)\r\n\t{\r\n\t\tthrow new ApplicationException(string.Format(\"{0}({1},{2}): error LEX{3:00}: Parse error. {4}\", new object[]\r\n\t\t{\r\n\t\t\tfile,\r\n\t\t\tline,\r\n\t\t\tcolumn,\r\n\t\t\t(int)error,\r\n\t\t\tError.GetErrorMessage(error)\r\n\t\t}));\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Errors.cs",
    "content": "using System;\r\npublic enum Errors\r\n{\r\n\tBADEXPR,\r\n\tPAREN,\r\n\tLENGTH,\r\n\tBRACKET,\r\n\tBOL,\r\n\tCLOSE,\r\n\tNEWLINE,\r\n\tBADMAC,\r\n\tNOMAC,\r\n\tMACDEPTH,\r\n\tINIT,\r\n\tEOF,\r\n\tDIRECT,\r\n\tINTERNAL,\r\n\tSTATE,\r\n\tMACDEF,\r\n\tSYNTAX,\r\n\tBRACE,\r\n\tDASH,\r\n\tZERO,\r\n\tInvalidCharClass,\r\n\tDuplicatedMacro\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Alloc.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic class Alloc\r\n\t{\r\n\t\tpublic static Dfa NewDfa(Spec spec)\r\n\t\t{\r\n\t\t\tDfa dfa = new Dfa(spec.dfa_states.Count);\r\n\t\t\tspec.dfa_states.Add(dfa);\r\n\t\t\treturn dfa;\r\n\t\t}\r\n\t\tpublic static NfaPair NewNfaPair()\r\n\t\t{\r\n\t\t\treturn new NfaPair();\r\n\t\t}\r\n\t\tpublic static Nfa NewNfa(Spec spec)\r\n\t\t{\r\n\t\t\tNfa nfa = new Nfa();\r\n\t\t\tspec.nfa_states.Add(nfa);\r\n\t\t\tnfa.Edge = '￼';\r\n\t\t\treturn nfa;\r\n\t\t}\r\n\t\tpublic static NfaPair NewNLPair(Spec spec)\r\n\t\t{\r\n\t\t\tNfaPair nfaPair = Alloc.NewNfaPair();\r\n\t\t\tnfaPair.end = Alloc.NewNfa(spec);\r\n\t\t\tnfaPair.start = Alloc.NewNfa(spec);\r\n\t\t\tNfa start = nfaPair.start;\r\n\t\t\tstart.Next = Alloc.NewNfa(spec);\r\n\t\t\tNfa next = start.Next;\r\n\t\t\tnext.Edge = '￾';\r\n\t\t\tnext.SetCharSet(new CharSet());\r\n\t\t\tnext.GetCharSet().add(10);\r\n\t\t\tnext.Next = nfaPair.end;\r\n\t\t\tstart.Sibling = Alloc.NewNfa(spec);\r\n\t\t\tNfa sibling = start.Sibling;\r\n\t\t\tsibling.Edge = '\\r';\r\n\t\t\tsibling.Next = Alloc.NewNfa(spec);\r\n\t\t\tNfa next2 = sibling.Next;\r\n\t\t\tnext2.Next = null;\r\n\t\t\tnext2.Sibling = Alloc.NewNfa(spec);\r\n\t\t\tnext2.Sibling.Edge = '\\n';\r\n\t\t\tnext2.Sibling.Next = nfaPair.end;\r\n\t\t\treturn nfaPair;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Anchor.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic class Anchor\r\n\t{\r\n\t\tpublic Accept accept;\r\n\t\tpublic int anchor;\r\n\t\tprivate Anchor()\r\n\t\t{\r\n\t\t\tthis.accept = null;\r\n\t\t\tthis.anchor = 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/BitSet.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nnamespace Lex\r\n{\r\n\tpublic sealed class BitSet : IComparable<BitSet>\r\n\t{\r\n\t\tprivate delegate ulong BinOp(ulong x, ulong y);\r\n\t\tprivate class BitSetEnum : IEnumerator<int>, IDisposable, IEnumerator\r\n\t\t{\r\n\t\t\tprivate int idx = -1;\r\n\t\t\tprivate int bit = 64;\r\n\t\t\tprivate BitSet p;\r\n\t\t\tpublic int Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn this.bit + (this.p.offs[this.idx] << 6);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tobject IEnumerator.Current\r\n\t\t\t{\r\n\t\t\t\tget\r\n\t\t\t\t{\r\n\t\t\t\t\treturn this.Current;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tpublic BitSetEnum(BitSet x)\r\n\t\t\t{\r\n\t\t\t\tthis.p = x;\r\n\t\t\t}\r\n\t\t\tpublic void Reset()\r\n\t\t\t{\r\n\t\t\t\tthis.idx = -1;\r\n\t\t\t\tthis.bit = 64;\r\n\t\t\t}\r\n\t\t\tpublic bool MoveNext()\r\n\t\t\t{\r\n\t\t\t\tthis.advance();\r\n\t\t\t\treturn this.idx < this.p.inuse;\r\n\t\t\t}\r\n\t\t\tprivate void advance()\r\n\t\t\t{\r\n\t\t\t\tint num = 64;\r\n\t\t\t\tif (this.idx < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.idx++;\r\n\t\t\t\t\tthis.bit = -1;\r\n\t\t\t\t}\r\n\t\t\t\twhile (this.idx < this.p.inuse)\r\n\t\t\t\t{\r\n\t\t\t\t\tulong num2 = this.p.bits[this.idx];\r\n\t\t\t\t\twhile (++this.bit < num)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tulong num3 = 1uL << this.bit;\r\n\t\t\t\t\t\tulong num4 = num2 & num3;\r\n\t\t\t\t\t\tif (num4 != 0uL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.idx++;\r\n\t\t\t\t\tthis.bit = -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tpublic void Dispose()\r\n\t\t\t{\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate const int LG_BITS = 6;\r\n\t\tprivate const int BITS = 64;\r\n\t\tprivate const int BITS_M1 = 63;\r\n\t\tprivate const uint prime = 1299827u;\r\n\t\tprivate int[] offs;\r\n\t\tprivate ulong[] bits;\r\n\t\tprivate int inuse;\r\n\t\tpublic int Count\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.GetLength();\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic BitSet()\r\n\t\t{\r\n\t\t\tthis.bits = new ulong[4];\r\n\t\t\tthis.offs = new int[4];\r\n\t\t\tthis.inuse = 0;\r\n\t\t}\r\n\t\tpublic BitSet(int nbits) : this()\r\n\t\t{\r\n\t\t}\r\n\t\tpublic BitSet(int nbits, bool val) : this()\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < nbits; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.Set(i, val);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic BitSet(BitSet set)\r\n\t\t{\r\n\t\t\tthis.bits = new ulong[set.bits.Length];\r\n\t\t\tthis.offs = new int[set.offs.Length];\r\n\t\t\tArray.Copy(set.bits, 0, this.bits, 0, set.bits.Length);\r\n\t\t\tArray.Copy(set.offs, 0, this.offs, 0, set.offs.Length);\r\n\t\t\tthis.inuse = set.inuse;\r\n\t\t}\r\n\t\tprivate void new_block(int i, int b)\r\n\t\t{\r\n\t\t\tif (this.inuse == this.bits.Length)\r\n\t\t\t{\r\n\t\t\t\tulong[] destinationArray = new ulong[this.inuse + 4];\r\n\t\t\t\tint[] destinationArray2 = new int[this.inuse + 4];\r\n\t\t\t\tArray.Copy(this.bits, 0, destinationArray, 0, this.inuse);\r\n\t\t\t\tArray.Copy(this.offs, 0, destinationArray2, 0, this.inuse);\r\n\t\t\t\tthis.bits = destinationArray;\r\n\t\t\t\tthis.offs = destinationArray2;\r\n\t\t\t}\r\n\t\t\tthis.insert_block(i, b);\r\n\t\t}\r\n\t\tprivate void insert_block(int i, int b)\r\n\t\t{\r\n\t\t\tArray.Copy(this.bits, i, this.bits, i + 1, this.inuse - i);\r\n\t\t\tArray.Copy(this.offs, i, this.offs, i + 1, this.inuse - i);\r\n\t\t\tthis.offs[i] = b;\r\n\t\t\tthis.bits[i] = 0uL;\r\n\t\t\tthis.inuse++;\r\n\t\t}\r\n\t\tprivate int BinarySearch(int[] x, int i, int m, int val)\r\n\t\t{\r\n\t\t\tint j = i;\r\n\t\t\tint num = m;\r\n\t\t\twhile (j < num)\r\n\t\t\t{\r\n\t\t\t\tint num2 = (j + num) / 2;\r\n\t\t\t\tif (val < x[num2])\r\n\t\t\t\t{\r\n\t\t\t\t\tnum = num2;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (val <= x[num2])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn num2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tj = num2 + 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -j;\r\n\t\t}\r\n\t\tpublic void Set(int bit, bool val)\r\n\t\t{\r\n\t\t\tint num = bit >> 6;\r\n\t\t\tint num2 = this.BinarySearch(this.offs, 0, this.inuse, num);\r\n\t\t\tif (num2 < 0)\r\n\t\t\t{\r\n\t\t\t\tnum2 = -num2;\r\n\t\t\t\tthis.new_block(num2, num);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (num2 >= this.inuse || this.offs[num2] != num)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.new_block(num2, num);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (val)\r\n\t\t\t{\r\n\t\t\t\tthis.bits[num2] |= 1uL << bit;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.bits[num2] &= ~(1uL << bit);\r\n\t\t}\r\n\t\tpublic void ClearAll()\r\n\t\t{\r\n\t\t\tthis.inuse = 0;\r\n\t\t}\r\n\t\tpublic bool Get(int bit)\r\n\t\t{\r\n\t\t\tint num = bit >> 6;\r\n\t\t\tint num2 = this.BinarySearch(this.offs, 0, this.inuse, num);\r\n\t\t\treturn num2 >= 0 && num2 < this.inuse && this.offs[num2] == num && 0uL != (this.bits[num2] & 1uL << bit);\r\n\t\t}\r\n\t\tpublic void And(BitSet set)\r\n\t\t{\r\n\t\t\tthis.binop(this, set, new BitSet.BinOp(BitSet.AND));\r\n\t\t}\r\n\t\tpublic void Or(BitSet set)\r\n\t\t{\r\n\t\t\tthis.binop(this, set, new BitSet.BinOp(BitSet.OR));\r\n\t\t}\r\n\t\tpublic void Xor(BitSet set)\r\n\t\t{\r\n\t\t\tthis.binop(this, set, new BitSet.BinOp(BitSet.XOR));\r\n\t\t}\r\n\t\tpublic static ulong AND(ulong x, ulong y)\r\n\t\t{\r\n\t\t\treturn x & y;\r\n\t\t}\r\n\t\tpublic static ulong OR(ulong x, ulong y)\r\n\t\t{\r\n\t\t\treturn x | y;\r\n\t\t}\r\n\t\tpublic static ulong XOR(ulong x, ulong y)\r\n\t\t{\r\n\t\t\treturn x ^ y;\r\n\t\t}\r\n\t\tprivate void binop(BitSet a, BitSet b, BitSet.BinOp op)\r\n\t\t{\r\n\t\t\tint num = a.inuse + b.inuse;\r\n\t\t\tulong[] array = new ulong[num];\r\n\t\t\tint[] array2 = new int[num];\r\n\t\t\tint num2 = 0;\r\n\t\t\tint num3 = a.bits.Length;\r\n\t\t\tint num4 = b.bits.Length;\r\n\t\t\tint num5 = 0;\r\n\t\t\tint num6 = 0;\r\n\t\t\twhile (num5 < num3 || num6 < num4)\r\n\t\t\t{\r\n\t\t\t\tulong num7;\r\n\t\t\t\tint num8;\r\n\t\t\t\tif (num5 < num3 && (num6 >= num4 || a.offs[num5] < b.offs[num6]))\r\n\t\t\t\t{\r\n\t\t\t\t\tnum7 = op(a.bits[num5], 0uL);\r\n\t\t\t\t\tnum8 = a.offs[num5];\r\n\t\t\t\t\tnum5++;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (num6 < num4 && (num5 >= num3 || a.offs[num5] > b.offs[num6]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnum7 = op(0uL, b.bits[num6]);\r\n\t\t\t\t\t\tnum8 = b.offs[num6];\r\n\t\t\t\t\t\tnum6++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnum7 = op(a.bits[num5], b.bits[num6]);\r\n\t\t\t\t\t\tnum8 = a.offs[num5];\r\n\t\t\t\t\t\tnum5++;\r\n\t\t\t\t\t\tnum6++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (num7 != 0uL)\r\n\t\t\t\t{\r\n\t\t\t\t\tarray[num2] = num7;\r\n\t\t\t\t\tarray2[num2] = num8;\r\n\t\t\t\t\tnum2++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (num2 > 0)\r\n\t\t\t{\r\n\t\t\t\ta.bits = new ulong[num2];\r\n\t\t\t\ta.offs = new int[num2];\r\n\t\t\t\ta.inuse = num2;\r\n\t\t\t\tArray.Copy(array, 0, a.bits, 0, num2);\r\n\t\t\t\tArray.Copy(array2, 0, a.offs, 0, num2);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.bits = new ulong[4];\r\n\t\t\tthis.offs = new int[4];\r\n\t\t\ta.inuse = 0;\r\n\t\t}\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\tulong num = 1299827uL;\r\n\t\t\tfor (int i = 0; i < this.inuse; i++)\r\n\t\t\t{\r\n\t\t\t\tnum ^= this.bits[i] * (ulong)((long)this.offs[i]);\r\n\t\t\t}\r\n\t\t\treturn (int)(num >> 32 ^ num);\r\n\t\t}\r\n\t\tpublic int GetLength()\r\n\t\t{\r\n\t\t\tif (this.inuse == 0)\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\treturn 1 + this.offs[this.inuse - 1] << 6;\r\n\t\t}\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\treturn obj != null && obj is BitSet && BitSet.Equals(this, (BitSet)obj);\r\n\t\t}\r\n\t\tpublic static bool Equals(BitSet a, BitSet b)\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\tint num2 = 0;\r\n\t\t\twhile (num < a.inuse || num2 < b.inuse)\r\n\t\t\t{\r\n\t\t\t\tif (num < a.inuse && (num2 >= b.inuse || a.offs[num] < b.offs[num2]))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (a.bits[num++] != 0uL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (num2 < b.inuse && (num >= a.inuse || a.offs[num] > b.offs[num2]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (b.bits[num2++] != 0uL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (a.bits[num++] != b.bits[num2++])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tpublic int CompareTo(BitSet a)\r\n\t\t{\r\n\t\t\tif (this.inuse < a.inuse)\r\n\t\t\t{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (this.inuse > a.inuse)\r\n\t\t\t{\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\tint num = 0;\r\n\t\t\tint num2 = 0;\r\n\t\t\twhile (num < this.inuse || num2 < a.inuse)\r\n\t\t\t{\r\n\t\t\t\tif (num < this.inuse && (num2 >= a.inuse || this.offs[num] < a.offs[num2]))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.bits[num++] != 0uL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (num2 < a.inuse && (num >= this.inuse || this.offs[num] > a.offs[num2]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (a.bits[num2++] != 0uL)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlong num3 = (long)(a.bits[num2++] - this.bits[num++]);\r\n\t\t\t\t\t\tif (num3 < 0L)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (num3 > 0L)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tpublic IEnumerator<int> GetEnumerator()\r\n\t\t{\r\n\t\t\treturn new BitSet.BitSetEnum(this);\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.Append('{');\r\n\t\t\tforeach (int current in this)\r\n\t\t\t{\r\n\t\t\t\tif (stringBuilder.Length > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tstringBuilder.Append(\", \");\r\n\t\t\t\t}\r\n\t\t\t\tstringBuilder.Append(current);\r\n\t\t\t}\r\n\t\t\tstringBuilder.Append('}');\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Bunch.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class Bunch\r\n\t{\r\n\t\tprivate class NfaComp : IComparer<Nfa>\r\n\t\t{\r\n\t\t\tpublic int Compare(Nfa a, Nfa b)\r\n\t\t\t{\r\n\t\t\t\treturn a.Label - b.Label;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate List<Nfa> nfa_set;\r\n\t\tprivate BitSet nfa_bit;\r\n\t\tprivate Accept accept;\r\n\t\tprivate int anchor;\r\n\t\tprivate int accept_index;\r\n\t\tpublic List<Nfa> GetNFASet()\r\n\t\t{\r\n\t\t\treturn this.nfa_set;\r\n\t\t}\r\n\t\tpublic void SetNFASet(List<Nfa> a)\r\n\t\t{\r\n\t\t\tthis.nfa_set = a;\r\n\t\t}\r\n\t\tpublic BitSet GetNFABit()\r\n\t\t{\r\n\t\t\treturn this.nfa_bit;\r\n\t\t}\r\n\t\tpublic void SetNFABit(BitSet b)\r\n\t\t{\r\n\t\t\tthis.nfa_bit = b;\r\n\t\t}\r\n\t\tpublic Accept GetAccept()\r\n\t\t{\r\n\t\t\treturn this.accept;\r\n\t\t}\r\n\t\tpublic void SetAccept(Accept a)\r\n\t\t{\r\n\t\t\tthis.accept = a;\r\n\t\t}\r\n\t\tpublic int GetAnchor()\r\n\t\t{\r\n\t\t\treturn this.anchor;\r\n\t\t}\r\n\t\tpublic void SetAnchor(int a)\r\n\t\t{\r\n\t\t\tthis.anchor = a;\r\n\t\t}\r\n\t\tpublic int GetIndex()\r\n\t\t{\r\n\t\t\treturn this.accept_index;\r\n\t\t}\r\n\t\tpublic void SetIndex(int i)\r\n\t\t{\r\n\t\t\tthis.accept_index = i;\r\n\t\t}\r\n\t\tpublic Bunch(List<Nfa> nfa_start_states)\r\n\t\t{\r\n\t\t\tint count = nfa_start_states.Count;\r\n\t\t\tthis.nfa_set = new List<Nfa>(nfa_start_states);\r\n\t\t\tthis.nfa_bit = new BitSet(count);\r\n\t\t\tthis.accept = null;\r\n\t\t\tthis.anchor = 0;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tint label = this.nfa_set[i].Label;\r\n\t\t\t\tthis.nfa_bit.Set(label, true);\r\n\t\t\t}\r\n\t\t\tthis.accept_index = 2147483647;\r\n\t\t}\r\n\t\tpublic void dump()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"[CBunch Dump Begin]\");\r\n\t\t\tif (this.nfa_set == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"nfa_set=null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tint count = this.nfa_set.Count;\r\n\t\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tobject obj = this.nfa_set[i];\r\n\t\t\t\t\tConsole.Write(\"i={0} elem=\", i);\r\n\t\t\t\t\tif (obj == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNfa nfa = (Nfa)obj;\r\n\t\t\t\t\t\tnfa.dump();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.nfa_bit == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"nfa_bit=null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"nfa_bit(\" + this.nfa_bit.GetLength().ToString() + \")=\");\r\n\t\t\t\tfor (int j = 0; j < this.nfa_bit.GetLength(); j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.nfa_bit.Get(j))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\"1\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\"0\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(\"\");\r\n\t\t\t}\r\n\t\t\tif (this.accept == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"accept=null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.accept.Dump();\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"anchor=\" + this.anchor.ToString());\r\n\t\t\tConsole.WriteLine(\"accept_index=\" + this.accept_index.ToString());\r\n\t\t}\r\n\t\tpublic bool IsEmpty()\r\n\t\t{\r\n\t\t\treturn this.nfa_set == null;\r\n\t\t}\r\n\t\tpublic void e_closure()\r\n\t\t{\r\n\t\t\tthis.accept = null;\r\n\t\t\tthis.anchor = 0;\r\n\t\t\tthis.accept_index = 2147483647;\r\n\t\t\tStack<Nfa> stack = new Stack<Nfa>();\r\n\t\t\tint count = this.nfa_set.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = this.nfa_set[i];\r\n\t\t\t\tstack.Push(nfa);\r\n\t\t\t}\r\n\t\t\twhile (stack.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tobject obj = stack.Pop();\r\n\t\t\t\tif (obj == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tNfa nfa = (Nfa)obj;\r\n\t\t\t\tif (nfa.GetAccept() != null && nfa.Label < this.accept_index)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.accept_index = nfa.Label;\r\n\t\t\t\t\tthis.accept = nfa.GetAccept();\r\n\t\t\t\t\tthis.anchor = nfa.GetAnchor();\r\n\t\t\t\t}\r\n\t\t\t\tif ('￼' == nfa.Edge)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (nfa.Next != null && !this.nfa_set.Contains(nfa.Next))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.nfa_bit.Set(nfa.Next.Label, true);\r\n\t\t\t\t\t\tthis.nfa_set.Add(nfa.Next);\r\n\t\t\t\t\t\tstack.Push(nfa.Next);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (nfa.Sibling != null && !this.nfa_set.Contains(nfa.Sibling))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.nfa_bit.Set(nfa.Sibling.Label, true);\r\n\t\t\t\t\t\tthis.nfa_set.Add(nfa.Sibling);\r\n\t\t\t\t\t\tstack.Push(nfa.Sibling);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.nfa_set != null)\r\n\t\t\t{\r\n\t\t\t\tthis.sort_states();\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic void sort_states()\r\n\t\t{\r\n\t\t\tthis.nfa_set.Sort(0, this.nfa_set.Count, null);\r\n\t\t}\r\n\t\tpublic void move(Dfa dfa, int b)\r\n\t\t{\r\n\t\t\tList<Nfa> nFASet = dfa.GetNFASet();\r\n\t\t\tthis.nfa_set = null;\r\n\t\t\tthis.nfa_bit = null;\r\n\t\t\tint count = nFASet.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = nFASet[i];\r\n\t\t\t\tif (b == (int)nfa.Edge || ('￾' == nfa.Edge && nfa.GetCharSet().contains(b)))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.nfa_set == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.nfa_set = new List<Nfa>();\r\n\t\t\t\t\t\tthis.nfa_bit = new BitSet();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.nfa_set.Add(nfa.Next);\r\n\t\t\t\t\tthis.nfa_bit.Set(nfa.Next.Label, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.nfa_set != null)\r\n\t\t\t{\r\n\t\t\t\tthis.sort_states();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/CharSet.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nnamespace Lex\r\n{\r\n\tpublic sealed class CharSet\r\n\t{\r\n\t\tprivate static BitSet lowerLetters;\r\n\t\tprivate static BitSet upperLetters;\r\n\t\tprivate static BitSet letters;\r\n\t\tprivate BitSet set;\r\n\t\tprivate bool compflag;\r\n\t\tstatic CharSet()\r\n\t\t{\r\n\t\t\tCharSet.lowerLetters = new BitSet();\r\n\t\t\tCharSet.upperLetters = new BitSet();\r\n\t\t\tCharSet.letters = new BitSet();\r\n\t\t\tfor (int i = 0; i <= 65535; i++)\r\n\t\t\t{\r\n\t\t\t\tswitch (char.GetUnicodeCategory((char)i))\r\n\t\t\t\t{\r\n\t\t\t\tcase UnicodeCategory.UppercaseLetter:\r\n\t\t\t\t\tCharSet.upperLetters.Set(i, true);\r\n\t\t\t\t\tCharSet.letters.Set(i, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase UnicodeCategory.LowercaseLetter:\r\n\t\t\t\t\tCharSet.lowerLetters.Set(i, true);\r\n\t\t\t\t\tCharSet.letters.Set(i, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase UnicodeCategory.TitlecaseLetter:\r\n\t\t\t\tcase UnicodeCategory.ModifierLetter:\r\n\t\t\t\tcase UnicodeCategory.OtherLetter:\r\n\t\t\t\t\tCharSet.letters.Set(i, true);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic bool AddClass(string name)\r\n\t\t{\r\n\t\t\tswitch (name)\r\n\t\t\t{\r\n\t\t\tcase \"lower\":\r\n\t\t\t\tthis.set.Or(CharSet.lowerLetters);\r\n\t\t\t\treturn true;\r\n\t\t\tcase \"upper\":\r\n\t\t\t\tthis.set.Or(CharSet.upperLetters);\r\n\t\t\t\treturn true;\r\n\t\t\tcase \"alpha\":\r\n\t\t\t\tthis.set.Or(CharSet.letters);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tpublic CharSet()\r\n\t\t{\r\n\t\t\tthis.set = new BitSet();\r\n\t\t\tthis.compflag = false;\r\n\t\t}\r\n\t\tpublic void complement()\r\n\t\t{\r\n\t\t\tthis.compflag = true;\r\n\t\t}\r\n\t\tpublic void add(int i)\r\n\t\t{\r\n\t\t\tthis.set.Set(i, true);\r\n\t\t}\r\n\t\tpublic void addncase(char c)\r\n\t\t{\r\n\t\t\tthis.add((int)c);\r\n\t\t\tthis.add((int)char.ToLower(c));\r\n\t\t\tthis.add((int)char.ToUpper(c));\r\n\t\t}\r\n\t\tpublic bool contains(int i)\r\n\t\t{\r\n\t\t\tbool flag = this.set.Get(i);\r\n\t\t\tif (this.compflag)\r\n\t\t\t{\r\n\t\t\t\treturn !flag;\r\n\t\t\t}\r\n\t\t\treturn flag;\r\n\t\t}\r\n\t\tpublic void mimic(CharSet s)\r\n\t\t{\r\n\t\t\tthis.compflag = s.compflag;\r\n\t\t\tthis.set = new BitSet(s.set);\r\n\t\t}\r\n\t\tpublic IEnumerator<int> GetEnumerator()\r\n\t\t{\r\n\t\t\treturn this.set.GetEnumerator();\r\n\t\t}\r\n\t\tpublic void map(CharSet old, char[] mapping)\r\n\t\t{\r\n\t\t\tthis.compflag = old.compflag;\r\n\t\t\tthis.set = new BitSet();\r\n\t\t\tforeach (int current in old)\r\n\t\t\t{\r\n\t\t\t\tif (current < mapping.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.set.Set((int)mapping[current], true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/DTrans.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic class DTrans\r\n\t{\r\n\t\tpublic const int F = -1;\r\n\t\tprivate int[] dtrans;\r\n\t\tprivate Accept accept;\r\n\t\tprivate int anchor;\r\n\t\tprivate int label;\r\n\t\tpublic int Label\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.label;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.label = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic int GetAnchor()\r\n\t\t{\r\n\t\t\treturn this.anchor;\r\n\t\t}\r\n\t\tpublic void SetAnchor(int i)\r\n\t\t{\r\n\t\t\tthis.anchor = i;\r\n\t\t}\r\n\t\tpublic Accept GetAccept()\r\n\t\t{\r\n\t\t\treturn this.accept;\r\n\t\t}\r\n\t\tpublic void SetAccept(Accept a)\r\n\t\t{\r\n\t\t\tthis.accept = a;\r\n\t\t}\r\n\t\tpublic void SetDTrans(int dest, int index)\r\n\t\t{\r\n\t\t\tthis.dtrans[dest] = index;\r\n\t\t}\r\n\t\tpublic int GetDTrans(int i)\r\n\t\t{\r\n\t\t\treturn this.dtrans[i];\r\n\t\t}\r\n\t\tpublic int GetDTransLength()\r\n\t\t{\r\n\t\t\treturn this.dtrans.Length;\r\n\t\t}\r\n\t\tpublic DTrans(Spec s, Dfa dfa)\r\n\t\t{\r\n\t\t\tthis.dtrans = new int[s.dtrans_ncols];\r\n\t\t\tthis.label = s.dtrans_list.Count;\r\n\t\t\tthis.accept = dfa.GetAccept();\r\n\t\t\tthis.anchor = dfa.GetAnchor();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Dfa.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class Dfa\r\n\t{\r\n\t\tprivate bool mark;\r\n\t\tprivate Accept accept;\r\n\t\tprivate int anchor;\r\n\t\tprivate List<Nfa> nfa_set;\r\n\t\tprivate BitSet nfa_bit;\r\n\t\tprivate int label;\r\n\t\tpublic int Label\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.label;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.label = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic List<Nfa> GetNFASet()\r\n\t\t{\r\n\t\t\treturn this.nfa_set;\r\n\t\t}\r\n\t\tpublic void SetNFASet(List<Nfa> a)\r\n\t\t{\r\n\t\t\tthis.nfa_set = a;\r\n\t\t}\r\n\t\tpublic BitSet GetNFABit()\r\n\t\t{\r\n\t\t\treturn this.nfa_bit;\r\n\t\t}\r\n\t\tpublic void SetNFABit(BitSet b)\r\n\t\t{\r\n\t\t\tthis.nfa_bit = b;\r\n\t\t}\r\n\t\tpublic Accept GetAccept()\r\n\t\t{\r\n\t\t\treturn this.accept;\r\n\t\t}\r\n\t\tpublic void SetAccept(Accept a)\r\n\t\t{\r\n\t\t\tthis.accept = a;\r\n\t\t}\r\n\t\tpublic int GetAnchor()\r\n\t\t{\r\n\t\t\treturn this.anchor;\r\n\t\t}\r\n\t\tpublic void SetAnchor(int a)\r\n\t\t{\r\n\t\t\tthis.anchor = a;\r\n\t\t}\r\n\t\tpublic Dfa(int l)\r\n\t\t{\r\n\t\t\tthis.mark = false;\r\n\t\t\tthis.accept = null;\r\n\t\t\tthis.anchor = 0;\r\n\t\t\tthis.nfa_set = null;\r\n\t\t\tthis.nfa_bit = null;\r\n\t\t\tthis.label = l;\r\n\t\t}\r\n\t\tpublic void dump()\r\n\t\t{\r\n\t\t}\r\n\t\tpublic bool IsMarked()\r\n\t\t{\r\n\t\t\treturn this.mark;\r\n\t\t}\r\n\t\tpublic void SetMarked()\r\n\t\t{\r\n\t\t\tthis.mark = true;\r\n\t\t}\r\n\t\tpublic void ClearMarked()\r\n\t\t{\r\n\t\t\tthis.mark = false;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Emit.cs",
    "content": "using System;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class Emit\r\n\t{\r\n\t\tprivate const int START = 1;\r\n\t\tprivate const int END = 2;\r\n\t\tprivate const int NONE = 4;\r\n\t\tprivate const bool EDBG = true;\r\n\t\tprivate const bool NOT_EDBG = false;\r\n\t\tprivate Spec spec;\r\n\t\tprivate IndentedTextWriter outstream;\r\n\t\tprivate string inputFilePath;\r\n\t\tpublic Emit()\r\n\t\t{\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t\tprivate void reset()\r\n\t\t{\r\n\t\t\tthis.spec = null;\r\n\t\t\tthis.outstream = null;\r\n\t\t}\r\n\t\tprivate void set(Spec spec, IndentedTextWriter outstream, string inputFilePath)\r\n\t\t{\r\n\t\t\tthis.spec = spec;\r\n\t\t\tthis.outstream = outstream;\r\n\t\t\tthis.inputFilePath = inputFilePath;\r\n\t\t}\r\n\t\tprivate void print_details()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"---------------------- Transition Table ----------------------\");\r\n\t\t\tfor (int i = 0; i < this.spec.row_map.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"State \" + i);\r\n\t\t\t\tAccept accept = this.spec.accept_list[i];\r\n\t\t\t\tif (accept == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\" [nonaccepting]\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(\" [accepting, \");\r\n\t\t\t\t\taccept.Dump();\r\n\t\t\t\t\tConsole.Write(\"]\");\r\n\t\t\t\t}\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[this.spec.row_map[i]];\r\n\t\t\t\tbool flag = false;\r\n\t\t\t\tint num = dTrans.GetDTrans(this.spec.col_map[0]);\r\n\t\t\t\tif (-1 != num)\r\n\t\t\t\t{\r\n\t\t\t\t\tflag = true;\r\n\t\t\t\t\tConsole.Write(\"\\tgoto \" + num.ToString() + \" on [\");\r\n\t\t\t\t}\r\n\t\t\t\tfor (int j = 1; j < this.spec.dtrans_ncols; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint dTrans2 = dTrans.GetDTrans(this.spec.col_map[j]);\r\n\t\t\t\t\tif (num == dTrans2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (-1 != num)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.Write((char)j);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnum = dTrans2;\r\n\t\t\t\t\t\tif (flag)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.WriteLine(\"]\");\r\n\t\t\t\t\t\t\tflag = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (-1 != num)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag = true;\r\n\t\t\t\t\t\t\tConsole.Write(\"\\tgoto \" + num.ToString() + \" on [\" + char.ToString((char)j));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (flag)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"]\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"---------------------- Transition Table ----------------------\");\r\n\t\t}\r\n\t\tpublic void Write(Spec spec, IndentedTextWriter o, string inputFilePath)\r\n\t\t{\r\n\t\t\tthis.set(spec, o, inputFilePath);\r\n\t\t\tthis.Header();\r\n\t\t\tthis.Construct();\r\n\t\t\tthis.Helpers();\r\n\t\t\tthis.Driver();\r\n\t\t\tthis.Footer();\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t\tprivate void Construct()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"[Flags]\");\r\n\t\t\tthis.outstream.WriteLine(\"private enum AcceptConditions : byte\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"NotAccept = 0,\");\r\n\t\t\tthis.outstream.WriteLine(\"AcceptOnStart = 1,\");\r\n\t\t\tthis.outstream.WriteLine(\"AcceptOnEnd = 2,\");\r\n\t\t\tthis.outstream.WriteLine(\"Accept = 4\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.CountColumns || this.spec.CountLines || this.spec.CountChars)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"public struct Position\");\r\n\t\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\tif (this.spec.CountChars)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"public int Char;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountLines)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"public int Line;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountColumns)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"public int Column;\");\r\n\t\t\t\t}\r\n\t\t\t\tList<string> list = new List<string>();\r\n\t\t\t\tif (this.spec.CountChars)\r\n\t\t\t\t{\r\n\t\t\t\t\tlist.Add(\"int ch\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountLines)\r\n\t\t\t\t{\r\n\t\t\t\t\tlist.Add(\"int line\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountColumns)\r\n\t\t\t\t{\r\n\t\t\t\t\tlist.Add(\"int column\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.WriteLine(\"public Position({0})\", string.Join(\", \", list.ToArray()));\r\n\t\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\tif (this.spec.CountChars)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"this.Char = ch;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountLines)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"this.Line = line;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountColumns)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"this.Column = column;\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"private const int NoState = -1;\");\r\n\t\t\tthis.outstream.WriteLine(\"private const char BOL = (char){0};\", (int)this.spec.BOL);\r\n\t\t\tthis.outstream.WriteLine(\"private const char EOF = (char){0};\", (int)this.spec.EOF);\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private {0} yyreturn;\", this.spec.TokenTypeName);\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"private {0} yylval;\", this.spec.SemanticValueType);\r\n\t\t\t}\r\n\t\t\tif (this.spec.integer_type || this.spec.yyeof)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"public const int YYEOF = -1;\");\r\n\t\t\t}\r\n\t\t\tthis.EmitUserCode(this.spec.ClassCode);\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private System.IO.TextReader reader;\");\r\n\t\t\tthis.outstream.WriteLine(\"private char[] buffer = new char[512];\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// whether the currently parsed token is being expanded (yymore has been called):\");\r\n\t\t\tthis.outstream.WriteLine(\"private bool expanding_token;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// offset in buffer where the currently parsed token starts:\");\r\n\t\t\tthis.outstream.WriteLine(\"private int token_start;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// offset in buffer where the currently parsed token chunk starts:\");\r\n\t\t\tthis.outstream.WriteLine(\"private int token_chunk_start;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// offset in buffer one char behind the currently parsed token (chunk) ending character:\");\r\n\t\t\tthis.outstream.WriteLine(\"private int token_end;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// offset of the lookahead character (number of characters parsed):\");\r\n\t\t\tthis.outstream.WriteLine(\"private int lookahead_index;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// number of characters read into the buffer:\");\r\n\t\t\tthis.outstream.WriteLine(\"private int chars_read;\");\r\n\t\t\tif (this.spec.CountColumns || this.spec.CountLines || this.spec.CountChars)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\tthis.outstream.WriteLine(\"// parsed token start position (wrt beginning of the stream):\");\r\n\t\t\t\tthis.outstream.WriteLine(\"protected Position token_start_pos;\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\tthis.outstream.WriteLine(\"// parsed token end position (wrt beginning of the stream):\");\r\n\t\t\t\tthis.outstream.WriteLine(\"protected Position token_end_pos;\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private bool yy_at_bol = false;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.VariantCount > 1)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"public int Variant { get { return variant; } set { variant = value; } }\");\r\n\t\t\t\tthis.outstream.WriteLine(\"private int variant = 0;\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"public LexicalStates CurrentLexicalState { get { return current_lexical_state; } set { current_lexical_state = value; } } \");\r\n\t\t\tthis.outstream.WriteLine(\"private LexicalStates current_lexical_state;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"public {0}(System.IO.TextReader reader)\", this.spec.LexerName);\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"Initialize(reader, LexicalStates.{0});\", this.spec.InitialState);\r\n\t\t\tthis.EmitUserCode(this.spec.CtorCode);\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState, bool atBol)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"this.expanding_token = false;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.token_start = 0;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.chars_read = 0;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.lookahead_index = 0;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.token_chunk_start = 0;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.token_end = 0;\");\r\n            this.outstream.WriteLine(\"this.token_end_pos = new Position(0);\");\r\n            this.outstream.WriteLine(\"this.reader = reader;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.yy_at_bol = atBol;\");\r\n\t\t\tthis.outstream.WriteLine(\"this.current_lexical_state = lexicalState;\");\r\n\t\t\tthis.EmitUserCode(this.spec.InitCode);\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"public void Initialize(System.IO.TextReader reader, LexicalStates lexicalState)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"Initialize(reader, lexicalState, false);\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.EmitAcceptMethods();\r\n\t\t}\r\n\t\tprivate void EmitUserCode(List<string> code)\r\n\t\t{\r\n\t\t\tforeach (string current in code)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(current);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void States()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private static int[] yy_state_dtrans = new int[]\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tfor (int i = 0; i < this.spec.state_dtrans.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.Write(\"  \");\r\n\t\t\t\tthis.outstream.Write(this.spec.state_dtrans[i]);\r\n\t\t\t\tif (i < this.spec.state_dtrans.Length - 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\",\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"};\");\r\n\t\t}\r\n\t\tprivate void Helpers()\r\n\t\t{\r\n\t\t\tif (this.spec.EofCode.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"private bool yy_eof_done = false;\");\r\n\t\t\t\tthis.outstream.WriteLine(\"private void yy_do_eof()\");\r\n\t\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\tthis.outstream.WriteLine(\"if (!yy_eof_done)\");\r\n\t\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\tthis.EmitUserCode(this.spec.EofCode);\r\n\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\t\tthis.outstream.WriteLine(\"yy_eof_done = true;\");\r\n\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"private void BEGIN(LexicalStates state)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"current_lexical_state = state;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private char Advance()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (lookahead_index >= chars_read)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (token_start > 0)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"// shift buffer left:\");\r\n\t\t\tthis.outstream.WriteLine(\"int length = chars_read - token_start;\");\r\n\t\t\tthis.outstream.WriteLine(\"System.Buffer.BlockCopy(buffer, token_start << 1, buffer, 0, length << 1);\");\r\n\t\t\tthis.outstream.WriteLine(\"token_end -= token_start;\");\r\n\t\t\tthis.outstream.WriteLine(\"token_chunk_start -= token_start;\");\r\n\t\t\tthis.outstream.WriteLine(\"token_start = 0;\");\r\n\t\t\tthis.outstream.WriteLine(\"chars_read = lookahead_index = length;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// populate the remaining bytes:\");\r\n\t\t\tthis.outstream.WriteLine(\"int count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\");\r\n\t\t\tthis.outstream.WriteLine(\"if (count <= 0) return EOF;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"chars_read += count;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"while (lookahead_index >= chars_read)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (lookahead_index >= buffer.Length)\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"buffer = ResizeBuffer(buffer);\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"int count = reader.Read(buffer, chars_read, buffer.Length - chars_read);\");\r\n\t\t\tthis.outstream.WriteLine(\"if (count <= 0) return EOF;\");\r\n\t\t\tthis.outstream.WriteLine(\"chars_read += count;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.CharMapMethod != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"return {0}(buffer[lookahead_index++]);\", this.spec.CharMapMethod);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"return buffer[lookahead_index++];\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private char[] ResizeBuffer(char[] buf)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"char[] result = new char[buf.Length << 1];\");\r\n\t\t\tthis.outstream.WriteLine(\"System.Buffer.BlockCopy(buf, 0, result, 0, buf.Length << 1);\");\r\n\t\t\tthis.outstream.WriteLine(\"return result;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.CountLines || this.spec.CountColumns || this.spec.CountChars)\r\n\t\t\t{\r\n                this.outstream.WriteLine(\"private void AdvanceEndPosition(int from, int to)\");\r\n                this.outstream.WriteLine(\"{\"); this.outstream.Indent++;\r\n                if (this.spec.CountColumns) this.outstream.WriteLine(\"int last_eoln = from - token_end_pos.Column;\");\r\n                if (this.spec.CountColumns || this.spec.CountLines)\r\n                {\r\n                    this.outstream.WriteLine(\"for (int i = from; i < to; i++)\");\r\n                    this.outstream.WriteLine(\"{\"); this.outstream.Indent++;\r\n                    this.outstream.WriteLine(\"char ch = buffer[i];\");\r\n                    this.outstream.WriteLine(\"// Line endings supported by Visual Studio:\");\r\n                    this.outstream.WriteLine(\"// CRLF:  Windows, U+000D + U+000A\");\r\n                    this.outstream.WriteLine(\"// LF:    Unix, U+000A\");\r\n                    this.outstream.WriteLine(\"// CR:    Mac, U+000D\");\r\n                    this.outstream.WriteLine(\"// LS:    Line Separator, U+2028\");\r\n                    this.outstream.WriteLine(\"// PS:    Paragraph Separator, U+2029\");\r\n                    this.outstream.WriteLine(\"if ((ch == '\\n') || // CRLF, LF\"); this.outstream.Indent++;\r\n                    this.outstream.WriteLine(\"(ch == '\\r' && ((i + 1 < buffer.Length) ? buffer[i + 1] : '\\0') != '\\n') ||    // CR, not CRLF\");\r\n                    this.outstream.WriteLine(\"(ch == (char)0x2028) || \");\r\n                    this.outstream.WriteLine(\"(ch == (char)0x2029)) {\");\r\n                    if (this.spec.CountLines) this.outstream.WriteLine(\"token_end_pos.Line++;\");\r\n                    if (this.spec.CountColumns) this.outstream.WriteLine(\"last_eoln = i;\");\r\n                    this.outstream.Indent--; this.outstream.WriteLine(\"}\");\r\n                    this.outstream.Indent--; this.outstream.WriteLine(\"}\");\r\n                }\r\n                this.outstream.WriteLine(\"token_end_pos.Char += to - from;\");\r\n                if (this.spec.CountColumns) this.outstream.WriteLine(\"token_end_pos.Column = to - last_eoln;\");\r\n                this.outstream.Indent--; this.outstream.WriteLine(\"}\");\r\n\t\t\t}\r\n            WriteCode(\r\n                @\"\r\nprotected static bool IsNewLineCharacter(char ch)\r\n{\r\n    return ch == '\\r' || ch == '\\n' || ch == (char)0x2028 || ch == (char)0x2029;\r\n}\r\n\");\r\n \t\t\tthis.outstream.WriteLine(\"private void TrimTokenEnd()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (token_end > token_chunk_start && buffer[token_end - 1] == '\\\\n')\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"token_end--;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"if (token_end > token_chunk_start && buffer[token_end - 1] == '\\\\r')\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"token_end--;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void MarkTokenChunkStart()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"token_chunk_start = lookahead_index;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void MarkTokenEnd()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"token_end = lookahead_index;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void MoveToTokenEnd()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"lookahead_index = token_end;\");\r\n\t\t\tthis.outstream.WriteLine(\"yy_at_bol = (token_end > token_chunk_start) && (buffer[token_end - 1] == '\\\\r' || buffer[token_end - 1] == '\\\\n');\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"public int TokenLength\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"get { return token_end - token_start; }\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"public int TokenChunkLength\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"get { return token_end - token_chunk_start; }\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void yymore()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (!expanding_token)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"token_start = token_chunk_start;\");\r\n\t\t\tthis.outstream.WriteLine(\"expanding_token = true;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void yyless(int count)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"lookahead_index = token_end = token_chunk_start + count;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.Version >= 2)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"private Stack<LexicalStates> stateStack = new Stack<LexicalStates>(20);\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"private Stack stateStack = new Stack(20);\");\r\n\t\t\t}\r\n\t\t\tstring arg = (this.spec.Version >= 2) ? \"\" : \"(LexicalStates)\";\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private void yy_push_state(LexicalStates state)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"stateStack.Push(current_lexical_state);\");\r\n\t\t\tthis.outstream.WriteLine(\"current_lexical_state = state;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private bool yy_pop_state()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (stateStack.Count == 0) return false;\");\r\n\t\t\tthis.outstream.WriteLine(\"current_lexical_state = {0}stateStack.Pop();\", arg);\r\n\t\t\tthis.outstream.WriteLine(\"return true;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"private LexicalStates yy_top_state()\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"return {0}stateStack.Peek();\", arg);\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void Header()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Write(\"{0} class {1}\", this.spec.ClassAttributes, this.spec.LexerName);\r\n\t\t\tif (this.spec.ImplementsName != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.Write(\" : \");\r\n\t\t\t\tthis.outstream.Write(this.spec.ImplementsName);\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"public enum LexicalStates\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tforeach (string current in this.spec.States.Keys)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"{0} = {1},\", current, this.spec.States[current]);\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitAcceptTable()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"private static AcceptConditions[] acceptCondition = new AcceptConditions[]\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tfor (int i = 0; i < this.spec.accept_list.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tAccept accept = this.spec.accept_list[i];\r\n\t\t\t\tif (accept != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tbool flag = (this.spec.anchor_array[i] & 1) != 0;\r\n\t\t\t\t\tbool flag2 = (this.spec.anchor_array[i] & 2) != 0;\r\n\t\t\t\t\tif (flag && flag2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.outstream.Write(\"AcceptConditions.AcceptOnStart | AcceptConditions.AcceptOnEnd\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (flag)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.outstream.Write(\"AcceptConditions.AcceptOnStart\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (flag2)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.outstream.Write(\"AcceptConditions.AcceptOnEnd\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.outstream.Write(\"AcceptConditions.Accept\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.Write(\"AcceptConditions.NotAccept\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Write(\", // \");\r\n\t\t\t\tthis.outstream.WriteLine(i);\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"};\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitTableCmap()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"private static int[] colMap = new int[]\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tfor (int i = 0; i < this.spec.ccls_map.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.Write(\", \");\r\n\t\t\t\t\tif (i % 16 == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Write(this.spec.col_map[(int)this.spec.ccls_map[i]]);\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"};\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitTableRmap()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"private static int[] rowMap = new int[]\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tfor (int i = 0; i < this.spec.row_map.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.Write(\", \");\r\n\t\t\t\t\tif (i % 16 == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Write(this.spec.row_map[i]);\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"};\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitTableNxt()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"private static int[,] nextState = new int[,]\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_list.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tif (i > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\",\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Write(\"{ \");\r\n\t\t\t\tfor (int j = 0; j < this.spec.dtrans_ncols; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (j > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.outstream.Write(\", \");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.outstream.Write(dTrans.GetDTrans(j));\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Write(\" }\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"};\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitTables()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"#region Tables\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.EmitAcceptTable();\r\n\t\t\tthis.EmitTableCmap();\r\n\t\t\tthis.EmitTableRmap();\r\n\t\t\tthis.EmitTableNxt();\r\n\t\t\tthis.States();\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"#endregion\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void EmitEofTest()\r\n\t\t{\r\n\t\t\tif (this.spec.EofCode.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"yy_do_eof();\");\r\n\t\t\t}\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"value = this.yylval;\");\r\n\t\t\t}\r\n\t\t\tif (this.spec.integer_type)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"return YYEOF;\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.spec.EofTokenName != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"return {0};\", this.spec.EofTokenName);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"return null;\");\r\n\t\t}\r\n\t\tprivate void Driver()\r\n\t\t{\r\n\t\t\tthis.EmitTables();\r\n\t\t\tstring arg = this.spec.integer_type ? \"int\" : this.spec.TokenTypeName;\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"public {0} {1}(out {2} value)\", arg, this.spec.FunctionName, this.spec.SemanticValueType);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"public {0} {1}()\", arg, this.spec.FunctionName);\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"int current_state = yy_state_dtrans[(int)current_lexical_state];\");\r\n\t\t\tthis.outstream.WriteLine(\"int last_accept_state = NoState;\");\r\n\t\t\tthis.outstream.WriteLine(\"bool is_initial_state = true;\");\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"yylval = new {0}();\", this.spec.SemanticValueType);\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"MarkTokenChunkStart();\");\r\n\t\t\tthis.outstream.WriteLine(\"token_start = token_chunk_start;\");\r\n\t\t\tthis.outstream.WriteLine(\"expanding_token = false;\");\r\n\t\t\tif (this.spec.CountChars || this.spec.CountLines || this.spec.CountColumns)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"AdvanceEndPosition((token_end > 0) ? token_end - 1 : 0, token_start);\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\tthis.outstream.WriteLine(\"// capture token start position:\");\r\n\t\t\t\tif (this.spec.CountChars)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"token_start_pos.Char = token_end_pos.Char;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountLines)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"token_start_pos.Line = token_end_pos.Line;\");\r\n\t\t\t\t}\r\n\t\t\t\tif (this.spec.CountColumns)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"token_start_pos.Column = token_end_pos.Column;\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"if (acceptCondition[current_state] != AcceptConditions.NotAccept)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"last_accept_state = current_state;\");\r\n\t\t\tthis.outstream.WriteLine(\"MarkTokenEnd();\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"while (true)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"char lookahead = (is_initial_state && yy_at_bol) ? BOL : Advance();\");\r\n\t\t\tthis.outstream.WriteLine(\"int next_state = nextState[rowMap[current_state], colMap[lookahead]];\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"if (lookahead == EOF && is_initial_state)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.EmitEofTest();\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine(\"if (next_state != -1)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"current_state = next_state;\");\r\n\t\t\tthis.outstream.WriteLine(\"is_initial_state = false;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"if (acceptCondition[current_state] != AcceptConditions.NotAccept)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"last_accept_state = current_state;\");\r\n\t\t\tthis.outstream.WriteLine(\"MarkTokenEnd();\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine(\"else\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if (last_accept_state == NoState)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"value = this.yylval;\");\r\n\t\t\t}\r\n\t\t\tif (this.spec.ErrorTokenName != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"return {0};\", this.spec.ErrorTokenName);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"throw new System.ApplicationException(\\\"Lexical Error: Unmatched Input.\\\");\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine(\"else\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"if ((acceptCondition[last_accept_state] & AcceptConditions.AcceptOnEnd) != 0)\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"TrimTokenEnd();\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"MoveToTokenEnd();\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"if (last_accept_state < 0)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"System.Diagnostics.Debug.Assert(last_accept_state >= {0});\", this.spec.accept_list.Count);\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine(\"else\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"bool accepted = false;\");\r\n\t\t\tif (this.spec.VariantCount > 1)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"switch (variant)\");\r\n\t\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\tfor (int i = 0; i < this.spec.VariantCount; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.outstream.WriteLine(\"case {0}: yyreturn = Accept{0}(last_accept_state, out accepted); break;\", i);\r\n\t\t\t\t}\r\n\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"yyreturn = Accept0(last_accept_state, out accepted);\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"if (accepted)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tif (this.spec.SemanticValueType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"value = yylval;\");\r\n\t\t\t}\r\n\t\t\tif (this.spec.CountChars || this.spec.CountLines || this.spec.CountColumns)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"AdvanceEndPosition(token_start, token_end - 1);\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine(\"return yyreturn;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"// token ignored:\");\r\n\t\t\tthis.outstream.WriteLine(\"is_initial_state = true;\");\r\n\t\t\tthis.outstream.WriteLine(\"current_state = yy_state_dtrans[(int)current_lexical_state];\");\r\n\t\t\tthis.outstream.WriteLine(\"last_accept_state = NoState;\");\r\n\t\t\tthis.outstream.WriteLine(\"MarkTokenChunkStart();\");\r\n\t\t\tthis.outstream.WriteLine(\"if (acceptCondition[current_state] != AcceptConditions.NotAccept)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"last_accept_state = current_state;\");\r\n\t\t\tthis.outstream.WriteLine(\"MarkTokenEnd();\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"} // end of \" + this.spec.FunctionName);\r\n\t\t}\r\n\t\tprivate void EmitAcceptMethods()\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine(\"#region Accept\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tif (this.spec.Version >= 2)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"#pragma warning disable 162\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t}\r\n\t\t\tfor (int i = 0; i < this.spec.VariantCount; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.EmitAcceptVariant(i);\r\n\t\t\t}\r\n\t\t\tif (this.spec.Version >= 2)\r\n\t\t\t{\r\n\t\t\t\tthis.outstream.WriteLine(\"#pragma warning restore 162\");\r\n\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t}\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"#endregion\");\r\n\t\t}\r\n\t\tprivate void EmitAcceptVariant(int variantIndex)\r\n\t\t{\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"{0} Accept{1}(int state,out bool accepted)\", this.spec.TokenTypeName, variantIndex);\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"accepted = true;\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.WriteLine(\"switch(state)\");\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tDictionary<int, int> dictionary = new Dictionary<int, int>();\r\n\t\t\tfor (int i = 0; i < this.spec.accept_list.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tif (this.spec.accept_list[i] != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tList<CodeBlock> codeBlocks = this.spec.accept_list[i].CodeBlocks;\r\n\t\t\t\t\tif (codeBlocks != null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tCodeBlock codeBlock = codeBlocks[Math.Min(variantIndex, codeBlocks.Count - 1)];\r\n\t\t\t\t\t\tint firstLine = codeBlock.FirstLine;\r\n\t\t\t\t\t\tif (dictionary.ContainsKey(firstLine))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.outstream.WriteLine(\"case {0}: goto case {1};\", i, dictionary[firstLine]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.outstream.WriteLine(\"case {0}:\", i);\r\n\t\t\t\t\t\t\tthis.outstream.Indent++;\r\n\t\t\t\t\t\t\tdictionary.Add(firstLine, i);\r\n\t\t\t\t\t\t\tthis.outstream.WriteLine(\"// #line {0}\", firstLine);\r\n\t\t\t\t\t\t\tthis.EmitUserCode(codeBlock.Code);\r\n\t\t\t\t\t\t\tif (this.spec.Version >= 2)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.outstream.WriteLine(\"break;\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.outstream.WriteLine();\r\n\t\t\t\t\t\t\tthis.outstream.Indent--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine(\"accepted = false;\");\r\n\t\t\tthis.outstream.WriteLine(\"return yyreturn;\");\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t}\r\n\t\tprivate void Footer()\r\n\t\t{\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t}\r\n        private void WriteCode(string/*!*/code)\r\n        {\r\n            var reader = new System.IO.StringReader(code);\r\n            string line;\r\n            while ((line = reader.ReadLine()) != null)\r\n            {\r\n                this.outstream.WriteLine(line);\r\n            }\r\n        }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Gen.cs",
    "content": "using System;\r\nusing System.CodeDom.Compiler;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nnamespace Lex\r\n{\r\n\tpublic sealed class Gen\r\n\t{\r\n\t\tprivate const bool ERROR = false;\r\n\t\tprivate const bool NOT_ERROR = true;\r\n\t\tprivate const int BUFFER_SIZE = 1024;\r\n\t\tprivate const int CLASS_CODE = 0;\r\n\t\tprivate const int INIT_CODE = 1;\r\n\t\tprivate const int EOF_CODE = 2;\r\n\t\tprivate const int EOF_VALUE_CODE = 3;\r\n\t\tprivate TextReader instream;\r\n\t\tprivate IndentedTextWriter outstream;\r\n\t\tprivate Input ibuf;\r\n\t\tprivate Spec spec;\r\n\t\tprivate bool init_flag;\r\n\t\tprivate MakeNfa makeNfa;\r\n\t\tprivate Nfa2Dfa nfa2dfa;\r\n\t\tprivate Minimize minimize;\r\n\t\tprivate Emit emit;\r\n\t\tprivate string usercode;\r\n\t\tprivate readonly string inputFilePath;\r\n\t\tprivate BitSet all_states;\r\n\t\tprivate bool advance_stop;\r\n\t\tpublic string InputFilePath\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.inputFilePath;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static Tokens CharToToken(char c)\r\n\t\t{\r\n\t\t\tif (c <= '?')\r\n\t\t\t{\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase '$':\r\n\t\t\t\tcase '(':\r\n\t\t\t\tcase ')':\r\n\t\t\t\tcase '*':\r\n\t\t\t\tcase '+':\r\n\t\t\t\tcase '-':\r\n\t\t\t\tcase '.':\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '%':\r\n\t\t\t\tcase '&':\r\n\t\t\t\tcase '\\'':\r\n\t\t\t\tcase ',':\r\n\t\t\t\t\treturn Tokens.LETTER;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (c != '?')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Tokens.LETTER;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase '[':\r\n\t\t\t\tcase ']':\r\n\t\t\t\tcase '^':\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '\\\\':\r\n\t\t\t\t\treturn Tokens.LETTER;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tswitch (c)\r\n\t\t\t\t\t{\r\n\t\t\t\t\tcase '{':\r\n\t\t\t\t\tcase '|':\r\n\t\t\t\t\tcase '}':\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn Tokens.LETTER;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn (Tokens)c;\r\n\t\t}\r\n\t\tpublic Gen(string filename, string outfile, int version)\r\n\t\t{\r\n\t\t\tthis.init_flag = false;\r\n\t\t\tthis.inputFilePath = Path.GetFullPath(filename);\r\n\t\t\tthis.instream = File.OpenText(this.inputFilePath);\r\n\t\t\tthis.outstream = new IndentedTextWriter(File.CreateText(outfile), \"\\t\");\r\n\t\t\tthis.outstream.Indent = 2;\r\n\t\t\tthis.ibuf = new Input(this.instream);\r\n\t\t\tthis.spec = new Spec();\r\n\t\t\tthis.spec.Version = version;\r\n\t\t\tthis.nfa2dfa = new Nfa2Dfa();\r\n\t\t\tthis.minimize = new Minimize();\r\n\t\t\tthis.makeNfa = new MakeNfa();\r\n\t\t\tthis.emit = new Emit();\r\n\t\t\tthis.init_flag = true;\r\n\t\t}\r\n\t\tpublic void Generate()\r\n\t\t{\r\n\t\t\tif (!this.init_flag)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.INIT, this.inputFilePath, 0);\r\n\t\t\t}\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Processing first section -- user code.\");\r\n\t\t\t}\r\n\t\t\tthis.userCode();\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Processing second section -- Lex declarations.\");\r\n\t\t\t}\r\n\t\t\tthis.userDeclare();\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Processing third section -- lexical rules.\");\r\n\t\t\t}\r\n\t\t\tthis.userRules();\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Outputting lexical analyzer code.\");\r\n\t\t\t}\r\n\t\t\tthis.outstream.Indent = 0;\r\n\t\t\tthis.outstream.WriteLine(\"namespace \" + this.spec.Namespace);\r\n\t\t\tthis.outstream.WriteLine(\"{\");\r\n\t\t\tthis.outstream.Indent++;\r\n\t\t\tthis.outstream.WriteLine(\"#region User Code\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Write(this.usercode);\r\n\t\t\tthis.outstream.WriteLine(\"#endregion\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.emit.Write(this.spec, this.outstream, this.inputFilePath);\r\n\t\t\tthis.outstream.Indent--;\r\n\t\t\tthis.outstream.WriteLine(\"}\");\r\n\t\t\tthis.outstream.WriteLine();\r\n\t\t\tthis.outstream.Close();\r\n\t\t}\r\n\t\tprivate void userCode()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tif (!this.init_flag)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.INIT, this.inputFilePath, 0);\r\n\t\t\t}\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, 0);\r\n\t\t\t}\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, 0);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.ibuf.line_read >= 2 && this.ibuf.line[0] == '%' && this.ibuf.line[1] == '%')\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tstringBuilder.Append(new string(this.ibuf.line, 0, this.ibuf.line_read));\r\n\t\t\t}\r\n\t\t\tthis.usercode = stringBuilder.ToString();\r\n\t\t\tthis.ibuf.line_index = this.ibuf.line_read;\r\n\t\t}\r\n\t\tprivate string getName(bool optional)\r\n\t\t{\r\n\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read && char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t{\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t}\r\n\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tif (optional)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\t}\r\n\t\t\t\tError.ParseError(Errors.DIRECT, this.inputFilePath, 0);\r\n\t\t\t}\r\n\t\t\tint num = this.ibuf.line_index;\r\n\t\t\twhile (num < this.ibuf.line_read && !Utility.IsNewline(this.ibuf.line[num]))\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t}\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder(num - this.ibuf.line_index);\r\n\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read && !Utility.IsNewline(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.Append(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t}\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t\tprivate void packCode(string st_dir, string end_dir, List<string> result, int code)\r\n\t\t{\r\n\t\t\tthis.ibuf.line_index = st_dir.Length;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tif (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tint num = this.ibuf.line_read - this.ibuf.line_index - 1;\r\n\t\t\t\t\tif (num >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (num > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tresult.Add(new string(this.ibuf.line, this.ibuf.line_index, num));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.ibuf.line_index = this.ibuf.line_read;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (Utility.Compare(this.ibuf.line, end_dir) == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.ibuf.line_index = end_dir.Length - 1;\r\n\t\t}\r\n\t\tprivate void userDeclare()\r\n\t\t{\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\twhile (!this.ibuf.GetLine())\r\n\t\t\t{\r\n\t\t\t\tif (this.ibuf.line_read >= 2 && this.ibuf.line[0] == '%' && this.ibuf.line[1] == '%')\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int i = 0; i < this.ibuf.line.Length - 2; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.ibuf.line[i] = this.ibuf.line[i + 2];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.ibuf.line_read = this.ibuf.line_read - 2;\r\n\t\t\t\t\tthis.ibuf.pushback_line = true;\r\n\t\t\t\t\tif (this.ibuf.line_read == 0 || this.ibuf.line[0] == '\\r' || this.ibuf.line[0] == '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.ibuf.pushback_line = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.ibuf.line_read != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.ibuf.line[0] == '%')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.ibuf.line_read <= 1)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tError.ParseError(Errors.DIRECT, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstring text = this.ibuf.ReadDirective();\r\n\t\t\t\t\t\t\tthis.ibuf.line_index = text.Length;\r\n\t\t\t\t\t\t\tstring key;\r\n                            if ((key = text) != null)\r\n                            {\r\n                                switch (key)\r\n                                {\r\n                                    case \"%{\":\r\n                                        this.packCode(text, \"%}\", this.spec.ClassCode, 0);\r\n                                        continue;\r\n                                    case \"%eof{\":\r\n                                        this.packCode(text, \"%eof}\", this.spec.EofCode, 2);\r\n                                        continue;\r\n                                    case \"%ctor{\":\r\n                                        this.packCode(text, \"%ctor}\", this.spec.CtorCode, 1);\r\n                                        continue;\r\n                                    case \"%init{\":\r\n                                        this.packCode(text, \"%init}\", this.spec.InitCode, 1);\r\n                                        continue;\r\n                                    case \"%char\":\r\n                                        this.spec.CountChars = true;\r\n                                        continue;\r\n                                    case \"%line\":\r\n                                        this.spec.CountLines = true;\r\n                                        continue;\r\n                                    case \"%column\":\r\n                                        this.spec.CountColumns = true;\r\n                                        continue;\r\n                                    case \"%class\":\r\n                                        this.spec.LexerName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%eofval\":\r\n                                        this.spec.EofTokenName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%errorval\":\r\n                                        this.spec.ErrorTokenName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%function\":\r\n                                        this.spec.FunctionName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%charmap\":\r\n                                        this.spec.CharMapMethod = this.getName(false);\r\n                                        continue;\r\n                                    case \"%full\":\r\n                                        this.spec.dtrans_ncols = 256;\r\n                                        continue;\r\n                                    case \"%unicode\":\r\n                                        this.spec.dtrans_ncols = 65536;\r\n                                        continue;\r\n                                    case \"%integer\":\r\n                                        this.spec.integer_type = true;\r\n                                        continue;\r\n                                    case \"%implements\":\r\n                                        this.spec.ImplementsName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%ignorecase\":\r\n                                        this.spec.IgnoreCase = true;\r\n                                        continue;\r\n                                    case \"%attributes\":\r\n                                        this.spec.ClassAttributes = this.getName(false);\r\n                                        continue;\r\n                                    case \"%x\":\r\n                                    case \"%s\":\r\n                                    case \"%state\":\r\n                                        this.saveStates();\r\n                                        continue;\r\n                                    case \"%type\":\r\n                                        this.spec.TokenTypeName = this.getName(false);\r\n                                        continue;\r\n                                    case \"%version\":\r\n                                        try\r\n                                        {\r\n                                            this.spec.Version = int.Parse(this.getName(false));\r\n                                            continue;\r\n                                        }\r\n                                        catch\r\n                                        {\r\n                                            Error.ParseError(Errors.DIRECT, this.inputFilePath, this.ibuf.line_number);\r\n                                            continue;\r\n                                        }\r\n                                    case \"%variants\":\r\n                                        break;\r\n                                    case \"%yyeof\":\r\n                                        this.spec.yyeof = true;\r\n                                        continue;\r\n                                    case \"%namespace\":\r\n                                        this.spec.Namespace = this.getName(false);\r\n                                        continue;\r\n                                    case \"%valuetype\":\r\n                                        this.spec.SemanticValueType = this.getName(false);\r\n                                        continue;\r\n                                    default:\r\n                                        goto IL_5ED;\r\n                                }\r\n                                try\r\n                                {\r\n                                    this.spec.VariantCount = int.Parse(this.getName(false));\r\n                                }\r\n                                catch\r\n                                {\r\n                                    Error.ParseError(Errors.DIRECT, this.inputFilePath, this.ibuf.line_number);\r\n                                }\r\n                                if (this.spec.VariantCount < 1)\r\n                                {\r\n                                    Error.ParseError(Errors.DIRECT, this.inputFilePath, this.ibuf.line_number);\r\n                                    continue;\r\n                                }\r\n                                continue;\r\n                            }\r\n\t\t\t\t\t\t\tIL_5ED:\r\n\t\t\t\t\t\t\tError.ParseError(Errors.DIRECT, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.ibuf.line_index = 0;\r\n\t\t\t\t\t\tthis.saveMacro();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void userRules()\r\n\t\t{\r\n\t\t\tif (!this.init_flag)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.INIT, this.inputFilePath, 0);\r\n\t\t\t}\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Creating NFA machine representation.\");\r\n\t\t\t}\r\n\t\t\tMakeNfa.Allocate_BOL_EOF(this.spec);\r\n\t\t\tMakeNfa.CreateMachine(this, this.spec, this.ibuf);\r\n\t\t\tSimplifyNfa.simplify(this.spec);\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Creating DFA transition table.\");\r\n\t\t\t}\r\n\t\t\tNfa2Dfa.MakeDFA(this.spec);\r\n\t\t\tif (this.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Minimizing DFA transition table.\");\r\n\t\t\t}\r\n\t\t\tthis.minimize.min_dfa(this.spec);\r\n\t\t}\r\n\t\tprivate void printccl(CharSet cset)\r\n\t\t{\r\n\t\t\tConsole.Write(\" [\");\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_ncols; i++)\r\n\t\t\t{\r\n\t\t\t\tif (cset.contains(i))\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(this.interp_int(i));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.Write(']');\r\n\t\t}\r\n\t\tprivate string plab(Nfa state)\r\n\t\t{\r\n\t\t\tif (state == null)\r\n\t\t\t{\r\n\t\t\t\treturn \"--\";\r\n\t\t\t}\r\n\t\t\treturn this.spec.nfa_states.IndexOf(state, 0, this.spec.nfa_states.Count).ToString();\r\n\t\t}\r\n\t\tprivate string interp_int(int i)\r\n\t\t{\r\n\t\t\tswitch (i)\r\n\t\t\t{\r\n\t\t\tcase 8:\r\n\t\t\t\treturn \"\\\\b\";\r\n\t\t\tcase 9:\r\n\t\t\t\treturn \"\\\\t\";\r\n\t\t\tcase 10:\r\n\t\t\t\treturn \"\\\\n\";\r\n\t\t\tcase 11:\r\n\t\t\t\tbreak;\r\n\t\t\tcase 12:\r\n\t\t\t\treturn \"\\\\f\";\r\n\t\t\tcase 13:\r\n\t\t\t\treturn \"\\\\r\";\r\n\t\t\tdefault:\r\n\t\t\t\tif (i == 32)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn \"\\\\ \";\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn char.ToString((char)i);\r\n\t\t}\r\n\t\tpublic void print_nfa()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"--------------------- NFA -----------------------\");\r\n\t\t\tfor (int i = 0; i < this.spec.nfa_states.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = this.spec.nfa_states[i];\r\n\t\t\t\tConsole.Write(\"Nfa state \" + this.plab(nfa) + \": \");\r\n\t\t\t\tif (nfa.Next == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(\"(TERMINAL)\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(\"--> \" + this.plab(nfa.Next));\r\n\t\t\t\t\tConsole.Write(\"--> \" + this.plab(nfa.Sibling));\r\n\t\t\t\t\tswitch (nfa.Edge)\r\n\t\t\t\t\t{\r\n\t\t\t\t\tcase '￼':\r\n\t\t\t\t\t\tConsole.Write(\" EPSILON \");\r\n\t\t\t\t\t\tgoto IL_E3;\r\n\t\t\t\t\tcase '￾':\r\n\t\t\t\t\t\tthis.printccl(nfa.GetCharSet());\r\n\t\t\t\t\t\tgoto IL_E3;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tConsole.Write(\" \" + this.interp_int((int)nfa.Edge));\r\n\t\t\t\t}\r\n\t\t\t\tIL_E3:\r\n\t\t\t\tif (i == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(\" (START STATE)\");\r\n\t\t\t\t}\r\n\t\t\t\tif (nfa.GetAccept() != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Write(\" accepting \" + (((nfa.GetAnchor() & 1) != 0) ? \"^\" : \"\") + \"<\");\r\n\t\t\t\t\tnfa.GetAccept().Dump();\r\n\t\t\t\t\tConsole.Write(\">\" + (((nfa.GetAnchor() & 2) != 0) ? \"$\" : \"\"));\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(\"\");\r\n\t\t\t}\r\n\t\t\tforeach (string current in this.spec.States.Keys)\r\n\t\t\t{\r\n\t\t\t\tint num = this.spec.States[current];\r\n\t\t\t\tint count = this.spec.state_rules[num].Count;\r\n\t\t\t\tfor (int j = 0; j < count; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tNfa nfa = this.spec.state_rules[num][j];\r\n\t\t\t\t\tConsole.Write(this.spec.nfa_states.IndexOf(nfa) + \" \");\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(\"\");\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"-------------------- NFA ----------------------\");\r\n\t\t}\r\n\t\tpublic BitSet GetStates()\r\n\t\t{\r\n\t\t\tBitSet bitSet = null;\r\n\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t{\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\twhile (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ('<' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t{\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\tbitSet = new BitSet();\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile (true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (!char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (',' != this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\t\t\twhile (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tgoto Block_6;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ('>' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgoto Block_9;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tint line_index = this.ibuf.line_index;\r\n\t\t\t\t\t\twhile (!char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]) && this.ibuf.line[this.ibuf.line_index] != ',' && this.ibuf.line[this.ibuf.line_index] != '>')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tint length = this.ibuf.line_index - line_index;\r\n\t\t\t\t\t\tstring text = new string(this.ibuf.line, line_index, length);\r\n\t\t\t\t\t\tif (!this.spec.States.ContainsKey(text))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.WriteLine(\"Uninitialized State Name: [\" + text + \"]\");\r\n\t\t\t\t\t\t\tError.ParseError(Errors.STATE, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tint bit = this.spec.States[text];\r\n\t\t\t\t\t\tbitSet.Set(bit, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\treturn bitSet;\r\n\t\t\t\tBlock_6:\r\n\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\treturn bitSet;\r\n\t\t\t\tBlock_9:\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\tif (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.advance_stop = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn bitSet;\r\n\t\t\t}\r\n\t\t\tif (this.all_states == null)\r\n\t\t\t{\r\n\t\t\t\tthis.all_states = new BitSet((bitSet != null) ? bitSet.Count : 0, true);\r\n\t\t\t}\r\n\t\t\tif (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tthis.advance_stop = true;\r\n\t\t\t}\r\n\t\t\treturn this.all_states;\r\n\t\t}\r\n\t\tprivate bool expandMacro()\r\n\t\t{\r\n\t\t\tint line_index = this.ibuf.line_index;\r\n\t\t\tint i = this.ibuf.line_index + 1;\r\n\t\t\tif (i >= this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tError.impos(\"Unfinished macro name\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tint num = i;\r\n\t\t\twhile (this.ibuf.line[i] != '}')\r\n\t\t\t{\r\n\t\t\t\ti++;\r\n\t\t\t\tif (i >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.impos(\"Unfinished macro name at line \" + this.ibuf.line_number);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint num2 = i - num;\r\n\t\t\tint num3 = i;\r\n\t\t\tif (num2 == 0)\r\n\t\t\t{\r\n\t\t\t\tError.impos(\"Nonexistent macro name\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tstring text = new string(this.ibuf.line, num, num2);\r\n\t\t\tstring text2;\r\n\t\t\tif (!this.spec.macros.TryGetValue(text, out text2))\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Error: Undefined macro \\\"\" + text + \"\\\".\");\r\n\t\t\t\tError.ParseError(Errors.NOMAC, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tchar[] array = new char[this.ibuf.line.Length];\r\n\t\t\tint j;\r\n\t\t\tfor (j = 0; j < line_index; j++)\r\n\t\t\t{\r\n\t\t\t\tarray[j] = this.ibuf.line[j];\r\n\t\t\t}\r\n\t\t\tif (j >= array.Length)\r\n\t\t\t{\r\n\t\t\t\tarray = Utility.doubleSize(array);\r\n\t\t\t}\r\n\t\t\tfor (int k = 0; k < text2.Length; k++)\r\n\t\t\t{\r\n\t\t\t\tarray[j] = text2[k];\r\n\t\t\t\tj++;\r\n\t\t\t\tif (j >= array.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tarray = Utility.doubleSize(array);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (j >= array.Length)\r\n\t\t\t{\r\n\t\t\t\tarray = Utility.doubleSize(array);\r\n\t\t\t}\r\n\t\t\tfor (i = num3 + 1; i < this.ibuf.line_read; i++)\r\n\t\t\t{\r\n\t\t\t\tarray[j] = this.ibuf.line[i];\r\n\t\t\t\tj++;\r\n\t\t\t\tif (j >= array.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tarray = Utility.doubleSize(array);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.ibuf.line = array;\r\n\t\t\tthis.ibuf.line_read = j;\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate void saveMacro()\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[num]))\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint num2 = num;\r\n\t\t\twhile (!char.IsWhiteSpace(this.ibuf.line[num]) && '=' != this.ibuf.line[num])\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint num3 = num - num2;\r\n\t\t\tif (num3 == 0)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[num]))\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ('=' == this.ibuf.line[num])\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[num]))\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint num4 = num;\r\n\t\t\tbool flag = false;\r\n\t\t\tbool flag2 = false;\r\n\t\t\tbool flag3 = false;\r\n\t\t\twhile (!char.IsWhiteSpace(this.ibuf.line[num]) || flag || flag2 || flag3)\r\n\t\t\t{\r\n\t\t\t\tif (!flag3 && !flag2 && this.ibuf.line[num] == '\"')\r\n\t\t\t\t{\r\n\t\t\t\t\tflag = !flag;\r\n\t\t\t\t}\r\n\t\t\t\tflag3 = (!flag3 && this.ibuf.line[num] == '\\\\');\r\n\t\t\t\tif (!flag3 && !flag)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ('[' == this.ibuf.line[num] && !flag2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflag2 = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (']' == this.ibuf.line[num] && flag2)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag2 = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnum++;\r\n\t\t\t\tif (num >= this.ibuf.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint num5 = num - num4;\r\n\t\t\tif (num5 == 0)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.MACDEF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\tstring key = new string(this.ibuf.line, num2, num3);\r\n\t\t\tstring value = \"(\" + new string(this.ibuf.line, num4, num5) + \")\";\r\n\t\t\tif (this.spec.macros.ContainsKey(key))\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.DuplicatedMacro, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t}\r\n\t\t\tthis.spec.macros.Add(key, value);\r\n\t\t}\r\n\t\tprivate void saveStates()\r\n\t\t{\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tint line_index = this.ibuf.line_index;\r\n\t\t\t\twhile (!char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]) && this.ibuf.line[this.ibuf.line_index] != ',')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tint length = this.ibuf.line_index - line_index;\r\n\t\t\t\tthis.spec.AddState(new string(this.ibuf.line, line_index, length));\r\n\t\t\t\tif (this.ibuf.line[this.ibuf.line_index] == ',')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\tif (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate char expandEscape()\r\n\t\t{\r\n\t\t\tchar c = char.ToLower(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\tchar c2;\r\n\t\t\tif (c <= 'f')\r\n\t\t\t{\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase 'a':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\a';\r\n\t\t\t\tcase 'b':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\b';\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (c == 'f')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\treturn '\\f';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (c == 'n')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\n';\r\n\t\t\t\t}\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase 'r':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\r';\r\n\t\t\t\tcase 't':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\t';\r\n\t\t\t\tcase 'v':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\treturn '\\v';\r\n\t\t\t\tcase 'x':\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\tc2 = '\\0';\r\n\t\t\t\t\tif (Utility.ishexdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc2 = Utility.hex2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (Utility.ishexdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc2 <<= 4;\r\n\t\t\t\t\t\tc2 |= Utility.hex2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (Utility.ishexdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tc2 <<= 4;\r\n\t\t\t\t\t\tc2 |= Utility.hex2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn c2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!Utility.isoctdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t{\r\n\t\t\t\tc2 = this.ibuf.line[this.ibuf.line_index];\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tc2 = Utility.oct2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\tif (Utility.isoctdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t{\r\n\t\t\t\t\tc2 <<= 3;\r\n\t\t\t\t\tc2 |= Utility.oct2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t}\r\n\t\t\t\tif (Utility.isoctdigit(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t{\r\n\t\t\t\t\tc2 <<= 3;\r\n\t\t\t\t\tc2 |= Utility.oct2bin(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn c2;\r\n\t\t}\r\n\t\tpublic Accept packAccept()\r\n\t\t{\r\n\t\t\twhile (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint i = 0;\r\n\t\t\tList<CodeBlock> list = new List<CodeBlock>(this.spec.VariantCount);\r\n\t\t\twhile (i < this.spec.VariantCount)\r\n\t\t\t{\r\n\t\t\t\twhile (char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\twhile (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (i <= 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tError.ParseError(Errors.EOF, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tgoto IL_3F6;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.ibuf.line[this.ibuf.line_index] != '{')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (i > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tError.ParseError(Errors.BRACE, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t\tStringBuilder stringBuilder = new StringBuilder(1024);\r\n\t\t\t\tList<string> list2 = new List<string>();\r\n\t\t\t\tint line_number = this.ibuf.line_number;\r\n\t\t\t\tint num = 0;\r\n\t\t\t\tbool flag4;\r\n\t\t\t\tbool flag3;\r\n\t\t\t\tbool flag2;\r\n\t\t\t\tbool flag = flag2 = (flag3 = (flag4 = false));\r\n\t\t\t\tbool flag6;\r\n\t\t\t\tbool flag5 = flag6 = false;\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.ibuf.line[this.ibuf.line_index] != '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstringBuilder.Append(this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlist2.Add(stringBuilder.ToString());\r\n\t\t\t\t\t\tstringBuilder.Length = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ((flag2 || flag) && flag6)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflag6 = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((flag2 || flag) && '\\\\' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag6 = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.ibuf.line[this.ibuf.line_index] == '\"' && !flag)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tflag2 = !flag2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (this.ibuf.line[this.ibuf.line_index] == '\\'' && !flag2)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tflag = !flag;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (flag4)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (flag5 && '/' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag5 = (flag4 = false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag5 = ('*' == this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!flag3)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag3 = (flag5 && '/' == this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\t\tflag4 = (flag5 && '*' == this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\t\tflag5 = ('/' == this.ibuf.line[this.ibuf.line_index]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!flag2 && !flag && !flag4 && !flag3)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ('{' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnum++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif ('}' == this.ibuf.line[this.ibuf.line_index])\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnum--;\r\n\t\t\t\t\t\t\t\tif (num == 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\twhile (this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflag5 = (flag3 = false);\r\n\t\t\t\t\t\tif (flag2 || flag)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tError.ParseError(Errors.NEWLINE, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t\tflag2 = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tgoto Block_31;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\tif (stringBuilder.Length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tlist2.Add(stringBuilder.ToString());\r\n\t\t\t\t}\r\n\t\t\t\tlist.Add(new CodeBlock(list2, line_number, this.ibuf.line_number));\r\n\t\t\t\ti++;\r\n\t\t\t\tcontinue;\r\n\t\t\t\tBlock_31:\r\n\t\t\t\tError.ParseError(Errors.SYNTAX, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tIL_3F6:\r\n\t\t\treturn new Accept(list);\r\n\t\t}\r\n\t\tpublic Tokens Advance()\r\n\t\t{\r\n\t\t\tthis.ActualAdvance();\r\n\t\t\treturn this.spec.current_token;\r\n\t\t}\r\n\t\tpublic void ActualAdvance()\r\n\t\t{\r\n\t\t\tif (this.ibuf.eof_reached)\r\n\t\t\t{\r\n\t\t\t\tthis.spec.current_token = Tokens.END_OF_INPUT;\r\n\t\t\t\tthis.spec.current_token_value = '\\0';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (Tokens.EOS == this.spec.current_token || this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tif (this.spec.in_quote)\r\n\t\t\t\t{\r\n\t\t\t\t\tError.ParseError(Errors.SYNTAX, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t}\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!this.advance_stop || this.ibuf.line_index >= this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.ibuf.GetLine())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.ibuf.line_index = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.advance_stop = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read && char.IsWhiteSpace(this.ibuf.line[this.ibuf.line_index]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tgoto IL_137;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.spec.current_token = Tokens.END_OF_INPUT;\r\n\t\t\t\tthis.spec.current_token_value = '\\0';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tIL_137:\r\n\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read)\r\n\t\t\t{\r\n\t\t\t\tchar c = this.ibuf.line[this.ibuf.line_index++];\r\n\t\t\t\tif (!this.spec.in_quote && !this.spec.in_ccl && c == '{')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ibuf.line_index--;\r\n\t\t\t\t\tthis.expandMacro();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (c == '\\\\')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.spec.current_token_value = this.expandEscape();\r\n\t\t\t\t\t\tthis.spec.current_token = Tokens.LETTER;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.spec.in_quote)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (c != '\"')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.spec.current_token_value = c;\r\n\t\t\t\t\t\t\tthis.spec.current_token = Tokens.LETTER;\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.spec.in_quote = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.spec.in_ccl)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.spec.current_token_value = c;\r\n\t\t\t\t\t\t\tchar c2 = c;\r\n\t\t\t\t\t\t\tif (c2 != '-')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tswitch (c2)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase '[':\r\n\t\t\t\t\t\t\t\t\tif (this.ibuf.line_index < this.ibuf.line_read && this.ibuf.line[this.ibuf.line_index] == ':')\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\t\t\t\t\tint line_index = this.ibuf.line_index;\r\n\t\t\t\t\t\t\t\t\t\twhile (this.ibuf.line_index < this.ibuf.line_read && this.ibuf.line[this.ibuf.line_index] != ':')\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.ibuf.line_index++;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (this.ibuf.line_index + 1 >= this.ibuf.line_read || this.ibuf.line[this.ibuf.line_index + 1] != ']')\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tError.ParseError(Errors.SYNTAX, this.inputFilePath, this.ibuf.line_number);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tthis.spec.class_name = new string(this.ibuf.line, line_index, this.ibuf.line_index - line_index);\r\n\t\t\t\t\t\t\t\t\t\tthis.spec.current_token = Tokens.CHAR_CLASS;\r\n\t\t\t\t\t\t\t\t\t\tthis.ibuf.line_index += 2;\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\tcase ']':\r\n\t\t\t\t\t\t\t\t\tthis.spec.current_token = Tokens.CCL_END;\r\n\t\t\t\t\t\t\t\t\tthis.spec.in_ccl = false;\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\tcase '^':\r\n\t\t\t\t\t\t\t\t\tthis.spec.current_token = Tokens.AT_BOL;\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.spec.current_token = Tokens.LETTER;\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.spec.current_token = Tokens.DASH;\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (c == '\"')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.spec.in_quote = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (char.IsWhiteSpace(c))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.spec.current_token = Tokens.EOS;\r\n\t\t\t\t\t\t\t\t\tthis.spec.current_token_value = '\\0';\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.spec.current_token_value = c;\r\n\t\t\t\t\t\t\t\tthis.spec.current_token = Gen.CharToToken(this.spec.current_token_value);\r\n\t\t\t\t\t\t\t\tif (this.spec.current_token == Tokens.CCL_START)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.spec.in_ccl = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.spec.current_token = Tokens.EOS;\r\n\t\t\tthis.spec.current_token_value = '\\0';\r\n\t\t}\r\n\t\tprivate void details()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"\\n\\t** Macros **\");\r\n\t\t\tforeach (string current in this.spec.macros.Keys)\r\n\t\t\t{\r\n\t\t\t\tstring text = this.spec.macros[current];\r\n\t\t\t\tConsole.WriteLine(string.Concat(new string[]\r\n\t\t\t\t{\r\n\t\t\t\t\t\"Macro name \\\"\",\r\n\t\t\t\t\tcurrent,\r\n\t\t\t\t\t\"\\\" has definition \\\"\",\r\n\t\t\t\t\ttext,\r\n\t\t\t\t\t\"\\\".\"\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"\\n\\t** States **\");\r\n\t\t\tforeach (string current2 in this.spec.States.Keys)\r\n\t\t\t{\r\n\t\t\t\tint num = this.spec.States[current2];\r\n\t\t\t\tConsole.WriteLine(string.Concat(new object[]\r\n\t\t\t\t{\r\n\t\t\t\t\t\"State \\\"\",\r\n\t\t\t\t\tcurrent2,\r\n\t\t\t\t\t\"\\\" has identifying index \",\r\n\t\t\t\t\tnum,\r\n\t\t\t\t\t\".\"\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tif (this.spec.dtrans_list != null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"\\n\\t** DFA transition table **\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void print_header()\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\tConsole.WriteLine(\"/*---------------------- DFA -----------------------\");\r\n\t\t\tforeach (string current in this.spec.States.Keys)\r\n\t\t\t{\r\n\t\t\t\tint num2 = this.spec.States[current];\r\n\t\t\t\tConsole.WriteLine(string.Concat(new object[]\r\n\t\t\t\t{\r\n\t\t\t\t\t\"State \\\"\",\r\n\t\t\t\t\tcurrent,\r\n\t\t\t\t\t\"\\\" has identifying index \",\r\n\t\t\t\t\tnum2,\r\n\t\t\t\t\t\".\"\r\n\t\t\t\t}));\r\n\t\t\t\tif (-1 != this.spec.state_dtrans[num2])\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"\\tStart index in transition table: \" + this.spec.state_dtrans[num2]);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"\\tNo associated transition states.\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_list.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tif (this.spec.accept_list == null && this.spec.anchor_array == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (dTrans.GetAccept() == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\" * State \" + i + \" [nonaccepting]\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\" * State \" + i + \" [accepting, \");\r\n\t\t\t\t\t\tdTrans.GetAccept().Dump();\r\n\t\t\t\t\t\tConsole.Write(\">]\");\r\n\t\t\t\t\t\tif (dTrans.GetAnchor() != 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.Write(\" Anchor: \" + (((dTrans.GetAnchor() & 1) != 0) ? \"start \" : \"\") + (((dTrans.GetAnchor() & 2) != 0) ? \"end \" : \"\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.spec.accept_list[i] == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\" * State \" + i + \" [nonaccepting]\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\" * State \" + i + \" [accepting, \");\r\n\t\t\t\t\t\tdTrans.GetAccept().Dump();\r\n\t\t\t\t\t\tConsole.Write(\">]\");\r\n\t\t\t\t\t\tif (this.spec.anchor_array[i] != 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.Write(\" Anchor: \" + (((this.spec.anchor_array[i] & 1) != 0) ? \"start \" : \"\") + (((this.spec.anchor_array[i] & 2) != 0) ? \"end \" : \"\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tint num3 = -1;\r\n\t\t\t\tfor (int j = 0; j < this.spec.dtrans_ncols; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (-1 != dTrans.GetDTrans(j))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (num3 != dTrans.GetDTrans(j))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.Write(\"\\n *    goto \" + dTrans.GetDTrans(j) + \" on \");\r\n\t\t\t\t\t\t\tnum = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstring text = this.interp_int(j);\r\n\t\t\t\t\t\tConsole.Write(text);\r\n\t\t\t\t\t\tnum += text.Length;\r\n\t\t\t\t\t\tif (56 < num)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tConsole.Write(\"\\n *             \");\r\n\t\t\t\t\t\t\tnum = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tnum3 = dTrans.GetDTrans(j);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(\"\");\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\" */\\n\");\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Input.cs",
    "content": "using System;\r\nusing System.IO;\r\nnamespace Lex\r\n{\r\n\tpublic class Input\r\n\t{\r\n\t\tprivate const int BUFFER_SIZE = 1024;\r\n\t\tprivate const bool EOF = true;\r\n\t\tprivate const bool NOT_EOF = false;\r\n\t\tprivate TextReader instream;\r\n\t\tpublic bool eof_reached;\r\n\t\tpublic bool pushback_line;\r\n\t\tpublic char[] line;\r\n\t\tpublic int line_read;\r\n\t\tpublic int line_index;\r\n\t\tpublic int line_number;\r\n\t\tpublic Input(TextReader ihandle)\r\n\t\t{\r\n\t\t\tthis.instream = ihandle;\r\n\t\t\tthis.line = new char[1024];\r\n\t\t\tthis.line_read = 0;\r\n\t\t\tthis.line_index = 0;\r\n\t\t\tthis.eof_reached = false;\r\n\t\t\tthis.line_number = 0;\r\n\t\t\tthis.pushback_line = false;\r\n\t\t}\r\n\t\tpublic bool GetLine()\r\n\t\t{\r\n\t\t\tif (this.eof_reached)\r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tif (this.pushback_line)\r\n\t\t\t{\r\n\t\t\t\tthis.pushback_line = false;\r\n\t\t\t\tint num = 0;\r\n\t\t\t\twhile (num < this.line_read && char.IsWhiteSpace(this.line[num]))\r\n\t\t\t\t{\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t}\r\n\t\t\t\tif (num < this.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.line_index = 0;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tstring text = this.instream.ReadLine();\r\n\t\t\t\tif (text == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\ttext += \"\\n\";\r\n\t\t\t\tthis.line = text.ToCharArray();\r\n\t\t\t\tthis.line_read = this.line.Length;\r\n\t\t\t\tthis.line_number++;\r\n\t\t\t\tint num = 0;\r\n\t\t\t\twhile (char.IsWhiteSpace(this.line[num]))\r\n\t\t\t\t{\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t\tif (num == this.line_read)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (num < this.line_read)\r\n\t\t\t\t{\r\n\t\t\t\t\tgoto Block_6;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.eof_reached = true;\r\n\t\t\tthis.line_index = 0;\r\n\t\t\treturn true;\r\n\t\t\tBlock_6:\r\n\t\t\tthis.line_index = 0;\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tpublic string ReadDirective()\r\n\t\t{\r\n\t\t\tint num = 1;\r\n\t\t\twhile (num < this.line_read && char.IsLetter(this.line[num]))\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t}\r\n\t\t\tif ((num < this.line_read && this.line[num] == '{') || this.line[num] == '}')\r\n\t\t\t{\r\n\t\t\t\tnum++;\r\n\t\t\t}\r\n\t\t\treturn new string(this.line, 0, num);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Lex.cs",
    "content": "using System;\r\nusing System.IO;\r\nnamespace Lex\r\n{\r\n\tpublic class Lex\r\n\t{\r\n\t\tpublic const int MAXBUF = 8192;\r\n\t\tpublic const int MAXSTR = 128;\r\n\t\tprivate static string currentOption;\r\n\t\tprivate static string currentValue;\r\n\t\tprivate static string inFile;\r\n\t\tprivate static string outFile;\r\n\t\tprivate static int version;\r\n\t\tpublic static bool ProcessArguments(string[] args)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring text = args[i];\r\n\t\t\t\tif (text[0] == '/')\r\n\t\t\t\t{\r\n\t\t\t\t\tint num = text.IndexOf(':');\r\n\t\t\t\t\tif (num >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLex.currentOption = text.Substring(1, num - 1).Trim();\r\n\t\t\t\t\t\tLex.currentValue = text.Substring(num + 1).Trim();\r\n\t\t\t\t\t\tstring a;\r\n\t\t\t\t\t\tif ((a = Lex.currentOption.ToLower()) != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (!(a == \"v\") && !(a == \"version\"))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (a == \"help\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tLex.DisplayHelp();\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (Lex.currentValue == \"1\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tLex.version = 1;\r\n\t\t\t\t\t\t\t\t\tgoto IL_13C;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (Lex.currentValue == \"2\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tLex.version = 2;\r\n\t\t\t\t\t\t\t\t\tgoto IL_13C;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthrow new ApplicationException(\"Invalid version number. Specify either '1' or '2'.\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthrow new ApplicationException(\"Unknown option.\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tLex.currentOption = text.Substring(1).Trim();\r\n\t\t\t\t\tLex.currentOption.ToLower();\r\n\t\t\t\t\tthrow new ApplicationException(\"Unknown option.\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (Lex.inFile == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLex.inFile = text;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (Lex.outFile != null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tLex.currentOption = text;\r\n\t\t\t\t\t\t\tthrow new ApplicationException(\"Invalid option.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tLex.outFile = text;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tIL_13C:;\r\n\t\t\t}\r\n\t\t\tif (Lex.outFile == null)\r\n\t\t\t{\r\n\t\t\t\tLex.outFile = Path.ChangeExtension(Lex.inFile, \".cs\");\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate static void DisplayHelp()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"lex <filename> [<outfile>] [<options>]\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t\tConsole.WriteLine(\"/help                   Displays this help.\");\r\n\t\t\tConsole.WriteLine(\"/v[ersion]:<version>    Version of C# to use for generated code.\");\r\n\t\t}\r\n\t\tpublic static void Main(string[] args)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tif (!Lex.ProcessArguments(args))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (ApplicationException ex)\r\n\t\t\t{\r\n\t\t\t\tif (Lex.currentOption != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"Option '{0}', value '{1}'.\", Lex.currentOption, Lex.currentValue);\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(ex.Message);\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tEnvironment.ExitCode = 1;\r\n\t\t\t}\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tGen gen = new Gen(Lex.inFile, Lex.outFile, Lex.version);\r\n\t\t\t\tgen.Generate();\r\n\t\t\t}\r\n\t\t\tcatch (ApplicationException ex2)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(ex2.Message);\r\n\t\t\t\tConsole.WriteLine();\r\n\t\t\t\tEnvironment.ExitCode = 1;\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex3)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(ex3.Message);\r\n\t\t\t\tConsole.WriteLine(ex3.StackTrace);\r\n\t\t\t\tEnvironment.ExitCode = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/MakeNfa.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class MakeNfa\r\n\t{\r\n\t\tprivate static Spec spec;\r\n\t\tprivate static Gen gen;\r\n\t\tprivate static Input input;\r\n\t\tpublic static void Allocate_BOL_EOF(Spec s)\r\n\t\t{\r\n\t\t\ts.BOL = (char)s.dtrans_ncols++;\r\n\t\t\ts.EOF = (char)s.dtrans_ncols++;\r\n\t\t}\r\n\t\tpublic static void CreateMachine(Gen cmg, Spec cms, Input cmi)\r\n\t\t{\r\n\t\t\tMakeNfa.spec = cms;\r\n\t\t\tMakeNfa.gen = cmg;\r\n\t\t\tMakeNfa.input = cmi;\r\n\t\t\tMakeNfa.spec.AddInitialState();\r\n\t\t\tint count = MakeNfa.spec.States.Count;\r\n\t\t\tMakeNfa.spec.state_rules = new List<Nfa>[count];\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.spec.state_rules[i] = new List<Nfa>();\r\n\t\t\t}\r\n\t\t\tMakeNfa.spec.nfa_start = MakeNfa.machine();\r\n\t\t\tcount = MakeNfa.spec.nfa_states.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = MakeNfa.spec.nfa_states[i];\r\n\t\t\t\tnfa.Label = i;\r\n\t\t\t}\r\n\t\t\tif (MakeNfa.spec.verbose)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"NFA comprised of \" + (MakeNfa.spec.nfa_states.Count + 1) + \" states.\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static void discardNfa(Nfa nfa)\r\n\t\t{\r\n\t\t\tMakeNfa.spec.nfa_states.Remove(nfa);\r\n\t\t}\r\n\t\tprivate static void ProcessStates(BitSet bset, Nfa current)\r\n\t\t{\r\n\t\t\tforeach (int current2 in bset)\r\n\t\t\t{\r\n\t\t\t\tList<Nfa> list = MakeNfa.spec.state_rules[current2];\r\n\t\t\t\tlist.Add(current);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static Nfa machine()\r\n\t\t{\r\n\t\t\tNfa nfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\tNfa nfa2 = nfa;\r\n\t\t\tBitSet states = MakeNfa.gen.GetStates();\r\n\t\t\tMakeNfa.spec.current_token = Tokens.EOS;\r\n\t\t\tMakeNfa.gen.Advance();\r\n\t\t\tif (Tokens.END_OF_INPUT != MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tnfa2.Next = MakeNfa.rule();\r\n\t\t\t\tMakeNfa.ProcessStates(states, nfa2.Next);\r\n\t\t\t}\r\n\t\t\twhile (Tokens.END_OF_INPUT != MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tstates = MakeNfa.gen.GetStates();\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\tif (Tokens.END_OF_INPUT == MakeNfa.spec.current_token)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tnfa2.Sibling = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tnfa2 = nfa2.Sibling;\r\n\t\t\t\tnfa2.Next = MakeNfa.rule();\r\n\t\t\t\tMakeNfa.ProcessStates(states, nfa2.Next);\r\n\t\t\t}\r\n\t\t\tnfa2.Sibling = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\tnfa2 = nfa2.Sibling;\r\n\t\t\tnfa2.Next = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\tNfa next = nfa2.Next;\r\n\t\t\tnext.Edge = '￾';\r\n\t\t\tnext.Next = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\tnext.SetCharSet(new CharSet());\r\n\t\t\tnext.GetCharSet().add((int)MakeNfa.spec.BOL);\r\n\t\t\tnext.GetCharSet().add((int)MakeNfa.spec.EOF);\r\n\t\t\tnext.Next.SetAccept(new Accept(null));\r\n\t\t\tfor (int i = 0; i < MakeNfa.spec.States.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tList<Nfa> list = MakeNfa.spec.state_rules[i];\r\n\t\t\t\tlist.Add(next);\r\n\t\t\t}\r\n\t\t\treturn nfa;\r\n\t\t}\r\n\t\tprivate static Nfa rule()\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\tNfaPair nfaPair = Alloc.NewNfaPair();\r\n\t\t\tNfa nfa;\r\n\t\t\tNfa end;\r\n\t\t\tif (MakeNfa.spec.current_token == Tokens.AT_BOL)\r\n\t\t\t{\r\n\t\t\t\tnum |= 1;\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\tMakeNfa.expr(nfaPair);\r\n\t\t\t\tnfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tnfa.Edge = MakeNfa.spec.BOL;\r\n\t\t\t\tnfa.Next = nfaPair.start;\r\n\t\t\t\tend = nfaPair.end;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.expr(nfaPair);\r\n\t\t\t\tnfa = nfaPair.start;\r\n\t\t\t\tend = nfaPair.end;\r\n\t\t\t}\r\n\t\t\tif (Tokens.AT_EOL == MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\tNfaPair nfaPair2 = Alloc.NewNLPair(MakeNfa.spec);\r\n\t\t\t\tend.Next = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tNfa next = end.Next;\r\n\t\t\t\tnext.Next = nfaPair2.start;\r\n\t\t\t\tnext.Sibling = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tnext.Sibling.Edge = MakeNfa.spec.EOF;\r\n\t\t\t\tnext.Sibling.Next = nfaPair2.end;\r\n\t\t\t\tend = nfaPair2.end;\r\n\t\t\t\tnum |= 2;\r\n\t\t\t}\r\n\t\t\tif (end == null)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.ZERO, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t}\r\n\t\t\tend.SetAccept(MakeNfa.gen.packAccept());\r\n\t\t\tend.SetAnchor(num);\r\n\t\t\treturn nfa;\r\n\t\t}\r\n\t\tprivate static void expr(NfaPair pair)\r\n\t\t{\r\n\t\t\tNfaPair nfaPair = Alloc.NewNfaPair();\r\n\t\t\tMakeNfa.cat_expr(pair);\r\n\t\t\twhile (Tokens.OR == MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\tMakeNfa.cat_expr(nfaPair);\r\n\t\t\t\tNfa nfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tnfa.Sibling = nfaPair.start;\r\n\t\t\t\tnfa.Next = pair.start;\r\n\t\t\t\tpair.start = nfa;\r\n\t\t\t\tnfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tpair.end.Next = nfa;\r\n\t\t\t\tnfaPair.end.Next = nfa;\r\n\t\t\t\tpair.end = nfa;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static void cat_expr(NfaPair pair)\r\n\t\t{\r\n\t\t\tNfaPair nfaPair = Alloc.NewNfaPair();\r\n\t\t\tif (MakeNfa.first_in_cat(MakeNfa.spec.current_token))\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.factor(pair);\r\n\t\t\t}\r\n\t\t\twhile (MakeNfa.first_in_cat(MakeNfa.spec.current_token))\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.factor(nfaPair);\r\n\t\t\t\tpair.end.mimic(nfaPair.start);\r\n\t\t\t\tMakeNfa.discardNfa(nfaPair.start);\r\n\t\t\t\tpair.end = nfaPair.end;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static bool first_in_cat(Tokens token)\r\n\t\t{\r\n\t\t\tif (token == Tokens.CLOSE_PAREN || token == Tokens.AT_EOL || token == Tokens.OR || token == Tokens.EOS)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (token == Tokens.CLOSURE || token == Tokens.PLUS_CLOSE || token == Tokens.OPTIONAL)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.CLOSE, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (token == Tokens.CCL_END)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.BRACKET, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (token == Tokens.AT_BOL)\r\n\t\t\t{\r\n\t\t\t\tError.ParseError(Errors.BOL, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate static void factor(NfaPair pair)\r\n\t\t{\r\n\t\t\tMakeNfa.term(pair);\r\n\t\t\tif (Tokens.CLOSURE == MakeNfa.spec.current_token || Tokens.PLUS_CLOSE == MakeNfa.spec.current_token || Tokens.OPTIONAL == MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tNfa nfa2 = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tnfa.Next = pair.start;\r\n\t\t\t\tpair.end.Next = nfa2;\r\n\t\t\t\tif (MakeNfa.spec.current_token == Tokens.CLOSURE || MakeNfa.spec.current_token == Tokens.OPTIONAL)\r\n\t\t\t\t{\r\n\t\t\t\t\tnfa.Sibling = nfa2;\r\n\t\t\t\t}\r\n\t\t\t\tif (MakeNfa.spec.current_token == Tokens.CLOSURE || MakeNfa.spec.current_token == Tokens.PLUS_CLOSE)\r\n\t\t\t\t{\r\n\t\t\t\t\tpair.end.Sibling = pair.start;\r\n\t\t\t\t}\r\n\t\t\t\tpair.start = nfa;\r\n\t\t\t\tpair.end = nfa2;\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static void term(NfaPair pair)\r\n\t\t{\r\n\t\t\tif (Tokens.OPEN_PAREN == MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\tMakeNfa.expr(pair);\r\n\t\t\t\tif (Tokens.CLOSE_PAREN == MakeNfa.spec.current_token)\r\n\t\t\t\t{\r\n\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tError.ParseError(Errors.SYNTAX, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tpair.start = nfa;\r\n\t\t\t\tnfa.Next = Alloc.NewNfa(MakeNfa.spec);\r\n\t\t\t\tpair.end = nfa.Next;\r\n\t\t\t\tbool flag = MakeNfa.spec.current_token == Tokens.LETTER && char.IsLetter(MakeNfa.spec.current_token_value);\r\n\t\t\t\tif (MakeNfa.spec.current_token != Tokens.ANY && MakeNfa.spec.current_token != Tokens.CCL_START && (!MakeNfa.spec.IgnoreCase || !flag))\r\n\t\t\t\t{\r\n\t\t\t\t\tnfa.Edge = MakeNfa.spec.current_token_value;\r\n\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tnfa.Edge = '￾';\r\n\t\t\t\tnfa.SetCharSet(new CharSet());\r\n\t\t\t\tCharSet charSet = nfa.GetCharSet();\r\n\t\t\t\tif (MakeNfa.spec.IgnoreCase && flag)\r\n\t\t\t\t{\r\n\t\t\t\t\tcharSet.addncase(MakeNfa.spec.current_token_value);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (MakeNfa.spec.current_token == Tokens.ANY)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcharSet.add(10);\r\n\t\t\t\t\t\tcharSet.add(13);\r\n\t\t\t\t\t\tcharSet.add((int)MakeNfa.spec.BOL);\r\n\t\t\t\t\t\tcharSet.add((int)MakeNfa.spec.EOF);\r\n\t\t\t\t\t\tcharSet.complement();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\t\tif (MakeNfa.spec.current_token == Tokens.CHAR_CLASS)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\t\t\tif (!charSet.AddClass(MakeNfa.spec.class_name.ToLower()))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tError.ParseError(Errors.InvalidCharClass, MakeNfa.gen.InputFilePath, MakeNfa.input.line_number);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (MakeNfa.spec.current_token == Tokens.AT_BOL)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\t\t\t\tcharSet.add((int)MakeNfa.spec.BOL);\r\n\t\t\t\t\t\t\t\tcharSet.add((int)MakeNfa.spec.EOF);\r\n\t\t\t\t\t\t\t\tcharSet.complement();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (MakeNfa.spec.current_token != Tokens.CCL_END)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tMakeNfa.dodash(charSet);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static void dodash(CharSet set)\r\n\t\t{\r\n\t\t\tint i = -1;\r\n\t\t\twhile (Tokens.EOS != MakeNfa.spec.current_token && Tokens.CCL_END != MakeNfa.spec.current_token)\r\n\t\t\t{\r\n\t\t\t\tif (Tokens.DASH == MakeNfa.spec.current_token && -1 != i)\r\n\t\t\t\t{\r\n\t\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t\t\tif (MakeNfa.spec.current_token == Tokens.CCL_END)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tset.add(45);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (i <= (int)MakeNfa.spec.current_token_value)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (MakeNfa.spec.IgnoreCase)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tset.addncase((char)i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tset.add(i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\ti = (int)MakeNfa.spec.current_token_value;\r\n\t\t\t\t\tif (MakeNfa.spec.IgnoreCase)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tset.addncase(MakeNfa.spec.current_token_value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tset.add((int)MakeNfa.spec.current_token_value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tMakeNfa.gen.Advance();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Minimize.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class Minimize\r\n\t{\r\n\t\tprivate Spec spec;\r\n\t\tprivate List<List<DTrans>> group;\r\n\t\tprivate int[] ingroup;\r\n\t\tpublic Minimize()\r\n\t\t{\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t\tprivate void reset()\r\n\t\t{\r\n\t\t\tthis.spec = null;\r\n\t\t\tthis.group = null;\r\n\t\t\tthis.ingroup = null;\r\n\t\t}\r\n\t\tprivate void set(Spec s)\r\n\t\t{\r\n\t\t\tthis.spec = s;\r\n\t\t\tthis.group = null;\r\n\t\t\tthis.ingroup = null;\r\n\t\t}\r\n\t\tpublic void min_dfa(Spec s)\r\n\t\t{\r\n\t\t\tthis.set(s);\r\n\t\t\tthis.minimize();\r\n\t\t\tthis.reduce();\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t\tprivate void col_copy(int dest, int src)\r\n\t\t{\r\n\t\t\tint count = this.spec.dtrans_list.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tdTrans.SetDTrans(dest, dTrans.GetDTrans(src));\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void row_copy(int dest, int src)\r\n\t\t{\r\n\t\t\tthis.spec.dtrans_list[dest] = this.spec.dtrans_list[src];\r\n\t\t}\r\n\t\tprivate bool col_equiv(int col1, int col2)\r\n\t\t{\r\n\t\t\tint count = this.spec.dtrans_list.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tif (dTrans.GetDTrans(col1) != dTrans.GetDTrans(col2))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate bool row_equiv(int row1, int row2)\r\n\t\t{\r\n\t\t\tDTrans dTrans = this.spec.dtrans_list[row1];\r\n\t\t\tDTrans dTrans2 = this.spec.dtrans_list[row2];\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_ncols; i++)\r\n\t\t\t{\r\n\t\t\t\tif (dTrans.GetDTrans(i) != dTrans2.GetDTrans(i))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate void reduce()\r\n\t\t{\r\n\t\t\tint count = this.spec.dtrans_list.Count;\r\n\t\t\tBitArray bitArray = new BitArray(count);\r\n\t\t\tthis.spec.anchor_array = new int[count];\r\n\t\t\tthis.spec.accept_list = new List<Accept>();\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tthis.spec.accept_list.Add(dTrans.GetAccept());\r\n\t\t\t\tthis.spec.anchor_array[i] = dTrans.GetAnchor();\r\n\t\t\t\tdTrans.SetAccept(null);\r\n\t\t\t}\r\n\t\t\tthis.spec.col_map = new int[this.spec.dtrans_ncols];\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_ncols; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.spec.col_map[i] = -1;\r\n\t\t\t}\r\n\t\t\tint num = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tint i;\r\n\t\t\t\tfor (i = 0; i < num; i++)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t\ti = num;\r\n\t\t\t\twhile (i < this.spec.dtrans_ncols && -1 != this.spec.col_map[i])\r\n\t\t\t\t{\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t\tif (i >= this.spec.dtrans_ncols)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (i >= bitArray.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tbitArray.Length = i + 1;\r\n\t\t\t\t}\r\n\t\t\t\tbitArray.Set(i, true);\r\n\t\t\t\tthis.spec.col_map[i] = num;\r\n\t\t\t\tfor (int j = i + 1; j < this.spec.dtrans_ncols; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (-1 == this.spec.col_map[j] && this.col_equiv(i, j))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.spec.col_map[j] = num;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnum++;\r\n\t\t\t}\r\n\t\t\tint num2 = 0;\r\n\t\t\tfor (int i = 0; i < this.spec.dtrans_ncols; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i >= bitArray.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tbitArray.Length = i + 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (bitArray.Get(i))\r\n\t\t\t\t{\r\n\t\t\t\t\tnum2++;\r\n\t\t\t\t\tbitArray.Set(i, false);\r\n\t\t\t\t\tint j = this.spec.col_map[i];\r\n\t\t\t\t\tif (j != i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.col_copy(j, i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.spec.dtrans_ncols = num;\r\n\t\t\tint count2 = this.spec.dtrans_list.Count;\r\n\t\t\tthis.spec.row_map = new int[count2];\r\n\t\t\tfor (int i = 0; i < count2; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.spec.row_map[i] = -1;\r\n\t\t\t}\r\n\t\t\tint num3 = 0;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tint i;\r\n\t\t\t\tfor (i = 0; i < num3; i++)\r\n\t\t\t\t{\r\n\t\t\t\t}\r\n\t\t\t\ti = num3;\r\n\t\t\t\twhile (i < count2 && -1 != this.spec.row_map[i])\r\n\t\t\t\t{\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t\tif (i >= count2)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tbitArray.Set(i, true);\r\n\t\t\t\tthis.spec.row_map[i] = num3;\r\n\t\t\t\tfor (int j = i + 1; j < count2; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (-1 == this.spec.row_map[j] && this.row_equiv(i, j))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.spec.row_map[j] = num3;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnum3++;\r\n\t\t\t}\r\n\t\t\tnum2 = 0;\r\n\t\t\tfor (int i = 0; i < count2; i++)\r\n\t\t\t{\r\n\t\t\t\tif (bitArray.Get(i))\r\n\t\t\t\t{\r\n\t\t\t\t\tnum2++;\r\n\t\t\t\t\tbitArray.Set(i, false);\r\n\t\t\t\t\tint j = this.spec.row_map[i];\r\n\t\t\t\t\tif (j != i)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.row_copy(j, i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.spec.dtrans_list.RemoveRange(num3, count - num3);\r\n\t\t}\r\n\t\tprivate void fix_dtrans()\r\n\t\t{\r\n\t\t\tList<DTrans> list = new List<DTrans>();\r\n\t\t\tint num = this.spec.state_dtrans.Length;\r\n\t\t\tfor (int i = 0; i < num; i++)\r\n\t\t\t{\r\n\t\t\t\tif (-1 != this.spec.state_dtrans[i])\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.spec.state_dtrans[i] = this.ingroup[this.spec.state_dtrans[i]];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tnum = this.group.Count;\r\n\t\t\tfor (int i = 0; i < num; i++)\r\n\t\t\t{\r\n\t\t\t\tList<DTrans> list2 = this.group[i];\r\n\t\t\t\tDTrans dTrans = list2[0];\r\n\t\t\t\tlist.Add(dTrans);\r\n\t\t\t\tfor (int j = 0; j < this.spec.dtrans_ncols; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (-1 != dTrans.GetDTrans(j))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdTrans.SetDTrans(j, this.ingroup[dTrans.GetDTrans(j)]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.group = null;\r\n\t\t\tthis.spec.dtrans_list = list;\r\n\t\t}\r\n\t\tprivate void minimize()\r\n\t\t{\r\n\t\t\tthis.init_groups();\r\n\t\t\tint num = this.group.Count;\r\n\t\t\tint num2 = num - 1;\r\n\t\t\twhile (num2 != num)\r\n\t\t\t{\r\n\t\t\t\tnum2 = num;\r\n\t\t\t\tfor (int i = 0; i < num; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tList<DTrans> list = this.group[i];\r\n\t\t\t\t\tint num3 = list.Count;\r\n\t\t\t\t\tif (num3 > 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tList<DTrans> list2 = new List<DTrans>();\r\n\t\t\t\t\t\tbool flag = false;\r\n\t\t\t\t\t\tDTrans dTrans = list[0];\r\n\t\t\t\t\t\tfor (int j = 1; j < num3; j++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDTrans dTrans2 = list[j];\r\n\t\t\t\t\t\t\tfor (int k = 0; k < this.spec.dtrans_ncols; k++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint dTrans3 = dTrans.GetDTrans(k);\r\n\t\t\t\t\t\t\t\tint dTrans4 = dTrans2.GetDTrans(k);\r\n\t\t\t\t\t\t\t\tif (dTrans3 != dTrans4 && (dTrans3 == -1 || dTrans4 == -1 || this.ingroup[dTrans4] != this.ingroup[dTrans3]))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tlist.RemoveAt(j);\r\n\t\t\t\t\t\t\t\t\tj--;\r\n\t\t\t\t\t\t\t\t\tnum3--;\r\n\t\t\t\t\t\t\t\t\tlist2.Add(dTrans2);\r\n\t\t\t\t\t\t\t\t\tif (!flag)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tflag = true;\r\n\t\t\t\t\t\t\t\t\t\tnum++;\r\n\t\t\t\t\t\t\t\t\t\tthis.group.Add(list2);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tthis.ingroup[dTrans2.Label] = this.group.Count - 1;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(this.group.Count + \" states after removal of redundant states.\");\r\n\t\t\tthis.fix_dtrans();\r\n\t\t}\r\n\t\tprivate void init_groups()\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\tthis.group = new List<List<DTrans>>();\r\n\t\t\tint count = this.spec.dtrans_list.Count;\r\n\t\t\tthis.ingroup = new int[count];\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tbool flag = false;\r\n\t\t\t\tDTrans dTrans = this.spec.dtrans_list[i];\r\n\t\t\t\tfor (int j = 0; j < num; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tList<DTrans> list = this.group[j];\r\n\t\t\t\t\tDTrans dTrans2 = list[0];\r\n\t\t\t\t\tfor (int k = 1; k < list.Count; k++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (dTrans2.GetAccept() == dTrans.GetAccept())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlist.Add(dTrans);\r\n\t\t\t\t\t\tthis.ingroup[i] = j;\r\n\t\t\t\t\t\tflag = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!flag)\r\n\t\t\t\t{\r\n\t\t\t\t\tList<DTrans> list2 = new List<DTrans>();\r\n\t\t\t\t\tlist2.Add(dTrans);\r\n\t\t\t\t\tthis.ingroup[i] = this.group.Count;\r\n\t\t\t\t\tthis.group.Add(list2);\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void pset(List<DTrans> dtrans_group)\r\n\t\t{\r\n\t\t\tint count = dtrans_group.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tDTrans dTrans = dtrans_group[i];\r\n\t\t\t\tConsole.Write(dTrans.Label + \" \");\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void pgroups()\r\n\t\t{\r\n\t\t\tint count = this.group.Count;\r\n\t\t\tfor (int i = 0; i < count; i++)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"\\tGroup \" + i + \" {\");\r\n\t\t\t\tthis.pset(this.group[i]);\r\n\t\t\t\tConsole.WriteLine(\"}\\n\");\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"\");\r\n\t\t\tint count2 = this.spec.dtrans_list.Count;\r\n\t\t\tfor (int j = 0; j < count2; j++)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(string.Concat(new object[]\r\n\t\t\t\t{\r\n\t\t\t\t\t\"\\tstate \",\r\n\t\t\t\t\tj,\r\n\t\t\t\t\t\" is in group \",\r\n\t\t\t\t\tthis.ingroup[j]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Nfa.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic class Nfa : IComparable\r\n\t{\r\n\t\tpublic const char CCL = '￾';\r\n\t\tpublic const char EMPTY = '�';\r\n\t\tpublic const char EPSILON = '￼';\r\n\t\tpublic const int NO_LABEL = -1;\r\n\t\tprivate char edge;\r\n\t\tprivate CharSet cset;\r\n\t\tprivate Nfa next;\r\n\t\tprivate Nfa sibling;\r\n\t\tprivate Accept accept;\r\n\t\tprivate int anchor;\r\n\t\tprivate int label;\r\n\t\tprivate BitSet states;\r\n\t\tpublic char Edge\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.edge;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.edge = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic Nfa Next\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.next;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.next = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic Nfa Sibling\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.sibling;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.sibling = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic int Label\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.label;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.label = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic CharSet GetCharSet()\r\n\t\t{\r\n\t\t\treturn this.cset;\r\n\t\t}\r\n\t\tpublic void SetCharSet(CharSet s)\r\n\t\t{\r\n\t\t\tthis.cset = s;\r\n\t\t}\r\n\t\tpublic Accept GetAccept()\r\n\t\t{\r\n\t\t\treturn this.accept;\r\n\t\t}\r\n\t\tpublic void SetAccept(Accept a)\r\n\t\t{\r\n\t\t\tthis.accept = a;\r\n\t\t}\r\n\t\tpublic int GetAnchor()\r\n\t\t{\r\n\t\t\treturn this.anchor;\r\n\t\t}\r\n\t\tpublic void SetAnchor(int i)\r\n\t\t{\r\n\t\t\tthis.anchor = i;\r\n\t\t}\r\n\t\tpublic BitSet GetStates()\r\n\t\t{\r\n\t\t\treturn this.states;\r\n\t\t}\r\n\t\tpublic void SetStates(BitSet b)\r\n\t\t{\r\n\t\t\tthis.states = b;\r\n\t\t}\r\n\t\tpublic Nfa()\r\n\t\t{\r\n\t\t\tthis.edge = '�';\r\n\t\t\tthis.cset = null;\r\n\t\t\tthis.next = null;\r\n\t\t\tthis.sibling = null;\r\n\t\t\tthis.accept = null;\r\n\t\t\tthis.anchor = 0;\r\n\t\t\tthis.label = -1;\r\n\t\t\tthis.states = null;\r\n\t\t}\r\n\t\tpublic void dump()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"[Nfa begin dump]\");\r\n\t\t\tConsole.WriteLine(\"label=\" + this.label);\r\n\t\t\tConsole.WriteLine(\"edge=\" + this.edge);\r\n\t\t\tConsole.Write(\"set=\");\r\n\t\t\tif (this.cset == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(this.cset);\r\n\t\t\t}\r\n\t\t\tConsole.Write(\"next=\");\r\n\t\t\tif (this.next == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(this.next);\r\n\t\t\t}\r\n\t\t\tConsole.Write(\"next2=\");\r\n\t\t\tif (this.sibling == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(this.sibling);\r\n\t\t\t}\r\n\t\t\tConsole.Write(\"accept=\");\r\n\t\t\tif (this.accept == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.accept.Dump();\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"anchor=\" + this.anchor);\r\n\t\t\tConsole.Write(\"states=\");\r\n\t\t\tif (this.states == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"null\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < this.states.GetLength(); i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (this.states.Get(i))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\"1\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tConsole.Write(\"0\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tConsole.WriteLine(\"\");\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"[Nfa end dump]\");\r\n\t\t}\r\n\t\tpublic void mimic(Nfa nfa)\r\n\t\t{\r\n\t\t\tthis.edge = nfa.edge;\r\n\t\t\tif (nfa.cset != null)\r\n\t\t\t{\r\n\t\t\t\tif (this.cset == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.cset = new CharSet();\r\n\t\t\t\t}\r\n\t\t\t\tthis.cset.mimic(nfa.cset);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.cset = null;\r\n\t\t\t}\r\n\t\t\tthis.next = nfa.next;\r\n\t\t\tthis.sibling = nfa.sibling;\r\n\t\t\tthis.accept = nfa.accept;\r\n\t\t\tthis.anchor = nfa.anchor;\r\n\t\t\tif (nfa.states != null)\r\n\t\t\t{\r\n\t\t\t\tthis.states = new BitSet(nfa.states);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.states = null;\r\n\t\t}\r\n\t\tpublic int CompareTo(object y)\r\n\t\t{\r\n\t\t\treturn this.label - ((Nfa)y).label;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Nfa2Dfa.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tinternal class Nfa2Dfa\r\n\t{\r\n\t\tprivate const int NOT_IN_DSTATES = -1;\r\n\t\tpublic static void MakeDFA(Spec s)\r\n\t\t{\r\n\t\t\tNfa2Dfa.make_dtrans(s);\r\n\t\t\tNfa2Dfa.free_nfa_states(s);\r\n\t\t\tNfa2Dfa.free_dfa_states(s);\r\n\t\t}\r\n\t\tprivate static void make_dtrans(Spec s)\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Working on DFA states.\");\r\n\t\t\ts.InitUnmarkedDFA();\r\n\t\t\tint num = s.state_rules.Length;\r\n\t\t\ts.state_dtrans = new int[num];\r\n\t\t\tfor (int i = 0; i < num; i++)\r\n\t\t\t{\r\n\t\t\t\tBunch bunch = new Bunch(s.state_rules[i]);\r\n\t\t\t\tbunch.e_closure();\r\n\t\t\t\tNfa2Dfa.add_to_dstates(s, bunch);\r\n\t\t\t\ts.state_dtrans[i] = s.dtrans_list.Count;\r\n\t\t\t\tDfa nextUnmarkedDFA;\r\n\t\t\t\twhile ((nextUnmarkedDFA = s.GetNextUnmarkedDFA()) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tnextUnmarkedDFA.SetMarked();\r\n\t\t\t\t\tDTrans dTrans = new DTrans(s, nextUnmarkedDFA);\r\n\t\t\t\t\tfor (int j = 0; j < s.dtrans_ncols; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbunch.move(nextUnmarkedDFA, j);\r\n\t\t\t\t\t\tif (!bunch.IsEmpty())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbunch.e_closure();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tint num2;\r\n\t\t\t\t\t\tif (bunch.IsEmpty())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnum2 = -1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnum2 = Nfa2Dfa.in_dstates(s, bunch);\r\n\t\t\t\t\t\t\tif (num2 == -1)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnum2 = Nfa2Dfa.add_to_dstates(s, bunch);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdTrans.SetDTrans(j, num2);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ts.dtrans_list.Add(dTrans);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tConsole.WriteLine(\"\");\r\n\t\t}\r\n\t\tprivate static void free_dfa_states(Spec s)\r\n\t\t{\r\n\t\t\ts.dfa_states = null;\r\n\t\t\ts.dfa_sets = null;\r\n\t\t}\r\n\t\tprivate static void free_nfa_states(Spec s)\r\n\t\t{\r\n\t\t\ts.nfa_states = null;\r\n\t\t\ts.nfa_start = null;\r\n\t\t\ts.state_rules = null;\r\n\t\t}\r\n\t\tprivate static int add_to_dstates(Spec s, Bunch bunch)\r\n\t\t{\r\n\t\t\tDfa dfa = Alloc.NewDfa(s);\r\n\t\t\tdfa.SetNFASet(new List<Nfa>(bunch.GetNFASet()));\r\n\t\t\tdfa.SetNFABit(new BitSet(bunch.GetNFABit()));\r\n\t\t\tdfa.SetAccept(bunch.GetAccept());\r\n\t\t\tdfa.SetAnchor(bunch.GetAnchor());\r\n\t\t\tdfa.ClearMarked();\r\n\t\t\ts.dfa_sets[dfa.GetNFABit()] = dfa;\r\n\t\t\treturn dfa.Label;\r\n\t\t}\r\n\t\tprivate static int in_dstates(Spec s, Bunch bunch)\r\n\t\t{\r\n\t\t\tDfa dfa;\r\n\t\t\tif (!s.dfa_sets.TryGetValue(bunch.GetNFABit(), out dfa))\r\n\t\t\t{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\treturn dfa.Label;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/NfaPair.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic class NfaPair\r\n\t{\r\n\t\tpublic Nfa start;\r\n\t\tpublic Nfa end;\r\n\t\tpublic NfaPair()\r\n\t\t{\r\n\t\t\tthis.start = null;\r\n\t\t\tthis.end = null;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/SimplifyNfa.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tinternal class SimplifyNfa\r\n\t{\r\n\t\tprivate static char[] ccls;\r\n\t\tprivate static int original_charset_size;\r\n\t\tprivate static int mapped_charset_size;\r\n\t\tinternal static void simplify(Spec spec)\r\n\t\t{\r\n\t\t\tSimplifyNfa.computeClasses(spec);\r\n\t\t\tfor (int i = 0; i < spec.nfa_states.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = spec.nfa_states[i];\r\n\t\t\t\tif (nfa.Edge != '�' && nfa.Edge != '￼')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (nfa.Edge == '￾')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tCharSet charSet = new CharSet();\r\n\t\t\t\t\t\tcharSet.map(nfa.GetCharSet(), SimplifyNfa.ccls);\r\n\t\t\t\t\t\tnfa.SetCharSet(charSet);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnfa.Edge = SimplifyNfa.ccls[(int)nfa.Edge];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tspec.ccls_map = SimplifyNfa.ccls;\r\n\t\t\tspec.dtrans_ncols = SimplifyNfa.mapped_charset_size;\r\n\t\t}\r\n\t\tprivate static void computeClasses(Spec spec)\r\n\t\t{\r\n\t\t\tSimplifyNfa.original_charset_size = spec.dtrans_ncols;\r\n\t\t\tSimplifyNfa.ccls = new char[SimplifyNfa.original_charset_size];\r\n\t\t\tchar c = '\\u0001';\r\n\t\t\tBitSet bitSet = new BitSet();\r\n\t\t\tBitSet bitSet2 = new BitSet();\r\n\t\t\tDictionary<char, char> dictionary = new Dictionary<char, char>();\r\n\t\t\tConsole.WriteLine(\"Working on character classes.\");\r\n\t\t\tfor (int i = 0; i < spec.nfa_states.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tNfa nfa = spec.nfa_states[i];\r\n\t\t\t\tif (nfa.Edge != '�' && nfa.Edge != '￼')\r\n\t\t\t\t{\r\n\t\t\t\t\tbitSet.ClearAll();\r\n\t\t\t\t\tbitSet2.ClearAll();\r\n\t\t\t\t\tfor (int j = 0; j < SimplifyNfa.ccls.Length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif ((int)nfa.Edge == j || (nfa.Edge == '￾' && nfa.GetCharSet().contains(j)))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbitSet.Set((int)SimplifyNfa.ccls[j], true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbitSet2.Set((int)SimplifyNfa.ccls[j], true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbitSet.And(bitSet2);\r\n\t\t\t\t\tif (bitSet.GetLength() != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdictionary.Clear();\r\n\t\t\t\t\t\tfor (int k = 0; k < SimplifyNfa.ccls.Length; k++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (bitSet.Get((int)SimplifyNfa.ccls[k]) && ((int)nfa.Edge == k || (nfa.Edge == '￾' && nfa.GetCharSet().contains(k))))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tchar c2 = SimplifyNfa.ccls[k];\r\n\t\t\t\t\t\t\t\tif (!dictionary.ContainsKey(c2))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tDictionary<char, char> arg_14F_0 = dictionary;\r\n\t\t\t\t\t\t\t\t\tchar arg_14F_1 = c2;\r\n\t\t\t\t\t\t\t\t\tchar expr_14A = c;\r\n\t\t\t\t\t\t\t\t\tc = (char)(expr_14A + '\\u0001');\r\n\t\t\t\t\t\t\t\t\targ_14F_0.Add(arg_14F_1, expr_14A);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tSimplifyNfa.ccls[k] = dictionary[c2];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tSimplifyNfa.mapped_charset_size = (int)c;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Spec.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace Lex\r\n{\r\n\tpublic class Spec\r\n\t{\r\n\t\tpublic const int NUM_PSEUDO = 2;\r\n\t\tpublic const int NONE = 0;\r\n\t\tpublic const int START = 1;\r\n\t\tpublic const int END = 2;\r\n\t\tprivate readonly Dictionary<string, int> states = new Dictionary<string, int>();\r\n\t\tpublic string InitialState = \"YYINITIAL\";\r\n\t\tpublic Dictionary<string, string> macros = new Dictionary<string, string>();\r\n\t\tpublic Nfa nfa_start;\r\n\t\tpublic List<Nfa> nfa_states = new List<Nfa>();\r\n\t\tpublic List<Nfa>[] state_rules;\r\n\t\tpublic int[] state_dtrans;\r\n\t\tpublic List<Dfa> dfa_states = new List<Dfa>();\r\n\t\tpublic Dictionary<BitSet, Dfa> dfa_sets = new Dictionary<BitSet, Dfa>();\r\n\t\tpublic List<Accept> accept_list;\r\n\t\tpublic int[] anchor_array;\r\n\t\tpublic List<DTrans> dtrans_list = new List<DTrans>();\r\n\t\tpublic int dtrans_ncols = 128;\r\n\t\tpublic int[] row_map;\r\n\t\tpublic int[] col_map;\r\n\t\tpublic char BOL;\r\n\t\tpublic char EOF;\r\n\t\tpublic char[] ccls_map;\r\n\t\tpublic Tokens current_token = Tokens.EOS;\r\n\t\tpublic char current_token_value;\r\n\t\tpublic string class_name;\r\n\t\tpublic bool in_quote;\r\n\t\tpublic bool in_ccl;\r\n\t\tpublic bool verbose;\r\n\t\tpublic bool integer_type;\r\n\t\tpublic bool yyeof;\r\n\t\tpublic bool CountChars;\r\n\t\tpublic bool CountLines;\r\n\t\tpublic bool CountColumns;\r\n\t\tpublic bool cup_compatible;\r\n\t\tpublic string ClassAttributes = \"public\";\r\n\t\tpublic bool IgnoreCase;\r\n\t\tpublic int Version = 2;\r\n\t\tpublic List<string> InitCode = new List<string>();\r\n\t\tpublic List<string> CtorCode = new List<string>();\r\n\t\tpublic List<string> ClassCode = new List<string>();\r\n\t\tpublic List<string> EofCode = new List<string>();\r\n\t\tpublic string EofTokenName;\r\n\t\tpublic string ErrorTokenName;\r\n\t\tpublic string LexerName = \"Yylex\";\r\n\t\tpublic string ImplementsName;\r\n\t\tpublic string FunctionName = \"yylex\";\r\n\t\tpublic string TokenTypeName = \"Yytoken\";\r\n\t\tpublic string Namespace = \"YyNameSpace\";\r\n\t\tpublic string SemanticValueType;\r\n\t\tpublic string CharMapMethod;\r\n\t\tpublic int VariantCount = 1;\r\n\t\tprivate int unmarked_dfa;\r\n\t\tpublic Dictionary<string, int> States\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.states;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic void InitUnmarkedDFA()\r\n\t\t{\r\n\t\t\tthis.unmarked_dfa = 0;\r\n\t\t}\r\n\t\tpublic void AddInitialState()\r\n\t\t{\r\n\t\t\tif (this.states.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tthis.states.Add(this.InitialState, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic void AddState(string name)\r\n\t\t{\r\n\t\t\tif (this.states.Count == 0)\r\n\t\t\t{\r\n\t\t\t\tthis.InitialState = name;\r\n\t\t\t}\r\n\t\t\tthis.states.Add(name, this.states.Count);\r\n\t\t}\r\n\t\tpublic Dfa GetNextUnmarkedDFA()\r\n\t\t{\r\n\t\t\twhile (this.unmarked_dfa < this.dfa_states.Count)\r\n\t\t\t{\r\n\t\t\t\tDfa dfa = this.dfa_states[this.unmarked_dfa];\r\n\t\t\t\tif (!dfa.IsMarked())\r\n\t\t\t\t{\r\n\t\t\t\t\treturn dfa;\r\n\t\t\t\t}\r\n\t\t\t\tthis.unmarked_dfa++;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Tokens.cs",
    "content": "using System;\r\nnamespace Lex\r\n{\r\n\tpublic enum Tokens\r\n\t{\r\n\t\tEOS = -1,\r\n\t\tEND_OF_INPUT = -2,\r\n\t\tLETTER = -3,\r\n\t\tCHAR_CLASS = -4,\r\n\t\tAT_EOL = 36,\r\n\t\tOPEN_PAREN = 40,\r\n\t\tCLOSE_PAREN,\r\n\t\tCLOSURE,\r\n\t\tPLUS_CLOSE,\r\n\t\tDASH = 45,\r\n\t\tANY,\r\n\t\tOPTIONAL = 63,\r\n\t\tCCL_START = 91,\r\n\t\tCCL_END = 93,\r\n\t\tAT_BOL,\r\n\t\tOPEN_CURLY = 123,\r\n\t\tOR,\r\n\t\tCLOSE_CURLY\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/Lex/Utility.cs",
    "content": "using System;\r\nusing System.Text;\r\nnamespace Lex\r\n{\r\n\tpublic class Utility\r\n\t{\r\n\t\tpublic const int INT_MAX = 2147483647;\r\n\t\tpublic static void enter(string descent, char lexeme, int token)\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.Append(\"Entering \");\r\n\t\t\tstringBuilder.Append(descent);\r\n\t\t\tstringBuilder.Append(\" [lexeme: '\");\r\n\t\t\tif (lexeme < ' ')\r\n\t\t\t{\r\n\t\t\t\tlexeme += '@';\r\n\t\t\t\tstringBuilder.Append(\"^\");\r\n\t\t\t}\r\n\t\t\tstringBuilder.Append(lexeme);\r\n\t\t\tstringBuilder.Append(\"'] [token: \");\r\n\t\t\tstringBuilder.Append(token);\r\n\t\t\tstringBuilder.Append(\"]\");\r\n\t\t\tConsole.WriteLine(stringBuilder.ToString());\r\n\t\t}\r\n\t\tpublic static void leave(string descent, char lexeme, int token)\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.Append(\"Leaving \");\r\n\t\t\tstringBuilder.Append(descent);\r\n\t\t\tstringBuilder.Append(\" [lexeme: '\");\r\n\t\t\tif (lexeme < ' ')\r\n\t\t\t{\r\n\t\t\t\tlexeme += '@';\r\n\t\t\t\tstringBuilder.Append(\"^\");\r\n\t\t\t}\r\n\t\t\tstringBuilder.Append(lexeme);\r\n\t\t\tstringBuilder.Append(\"'] [token: \");\r\n\t\t\tstringBuilder.Append(token);\r\n\t\t\tstringBuilder.Append(\"]\");\r\n\t\t\tConsole.WriteLine(stringBuilder.ToString());\r\n\t\t}\r\n\t\tpublic static void assert(bool expr)\r\n\t\t{\r\n\t\t\tif (!expr)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Assertion Failed\");\r\n\t\t\t\tthrow new ApplicationException(\"Assertion Failed.\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic static char[] doubleSize(char[] oldBuffer)\r\n\t\t{\r\n\t\t\tchar[] array = new char[2 * oldBuffer.Length];\r\n\t\t\tfor (int i = 0; i < oldBuffer.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tarray[i] = oldBuffer[i];\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tpublic static byte[] doubleSize(byte[] oldBuffer)\r\n\t\t{\r\n\t\t\tbyte[] array = new byte[2 * oldBuffer.Length];\r\n\t\t\tfor (int i = 0; i < oldBuffer.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tarray[i] = oldBuffer[i];\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tpublic static char hex2bin(char c)\r\n\t\t{\r\n\t\t\tif ('0' <= c && '9' >= c)\r\n\t\t\t{\r\n\t\t\t\treturn (char)(c - '0');\r\n\t\t\t}\r\n\t\t\tif ('a' <= c && 'f' >= c)\r\n\t\t\t{\r\n\t\t\t\treturn (char)(c - 'a' + '\\n');\r\n\t\t\t}\r\n\t\t\tif ('A' <= c && 'F' >= c)\r\n\t\t\t{\r\n\t\t\t\treturn (char)(c - 'A' + '\\n');\r\n\t\t\t}\r\n\t\t\tError.impos(\"Bad hexidecimal digit\" + char.ToString(c));\r\n\t\t\treturn '\\0';\r\n\t\t}\r\n\t\tpublic static bool ishexdigit(char c)\r\n\t\t{\r\n\t\t\treturn ('0' <= c && '9' >= c) || ('a' <= c && 'f' >= c) || ('A' <= c && 'F' >= c);\r\n\t\t}\r\n\t\tpublic static char oct2bin(char c)\r\n\t\t{\r\n\t\t\tif ('0' <= c && '7' >= c)\r\n\t\t\t{\r\n\t\t\t\treturn (char)(c - '0');\r\n\t\t\t}\r\n\t\t\tError.impos(\"Bad octal digit \" + char.ToString(c));\r\n\t\t\treturn '\\0';\r\n\t\t}\r\n\t\tpublic static bool isoctdigit(char c)\r\n\t\t{\r\n\t\t\treturn '0' <= c && '7' >= c;\r\n\t\t}\r\n\t\tpublic static bool IsNewline(char c)\r\n\t\t{\r\n\t\t\treturn '\\n' == c || '\\r' == c;\r\n\t\t}\r\n\t\tpublic static bool isalpha(char c)\r\n\t\t{\r\n\t\t\treturn ('a' <= c && 'z' >= c) || ('A' <= c && 'Z' >= c);\r\n\t\t}\r\n\t\tpublic static char toupper(char c)\r\n\t\t{\r\n\t\t\tif ('a' <= c && 'z' >= c)\r\n\t\t\t{\r\n\t\t\t\treturn (char)(c - 'a' + 'A');\r\n\t\t\t}\r\n\t\t\treturn c;\r\n\t\t}\r\n\t\tpublic static int bytencmp(byte[] a, int a_first, byte[] b, int b_first, int n)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < n; i++)\r\n\t\t\t{\r\n\t\t\t\tif (a[a_first + i] == 0 && b[b_first + i] == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\tif (a[a_first + i] < b[b_first + i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (a[a_first + i] > b[b_first + i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tpublic static int charncmp(char[] a, int a_first, char[] b, int b_first, int n)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < n; i++)\r\n\t\t\t{\r\n\t\t\t\tif (a[a_first + i] == '\\0' && b[b_first + i] == '\\0')\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\tif (a[a_first + i] < b[b_first + i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (a[a_first + i] > b[b_first + i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tpublic static int Compare(char[] c, string s)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < s.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tif (c[i] < s[i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (c[i] > s[i])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/CsLex/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\r\n"
  },
  {
    "path": "Tools/PEVerify.exe.config",
    "content": "<?xml version =\"1.0\"?>\r\n<configuration>\r\n    <startup useLegacyV2RuntimeActivationPolicy=\"true\">\r\n        <requiredRuntime safemode=\"true\" imageVersion=\"v4.0.30319\" version=\"v4.0.30319\"/>\r\n    </startup>\r\n</configuration>\r\n"
  },
  {
    "path": "Tools/PHP/php.ini",
    "content": "[PHP]\r\n\r\n;;;;;;;;;;;;;;;;;;;\r\n; About php.ini   ;\r\n;;;;;;;;;;;;;;;;;;;\r\n; PHP's initialization file, generally called php.ini, is responsible for\r\n; configuring many of the aspects of PHP's behavior.\r\n\r\n; PHP attempts to find and load this configuration from a number of locations.\r\n; The following is a summary of its search order:\r\n; 1. SAPI module specific location.\r\n; 2. The PHPRC environment variable. (As of PHP 5.2.0)\r\n; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0)\r\n; 4. Current working directory (except CLI)\r\n; 5. The web server's directory (for SAPI modules), or directory of PHP\r\n; (otherwise in Windows)\r\n; 6. The directory from the --with-config-file-path compile time option, or the\r\n; Windows directory (C:\\windows or C:\\winnt)\r\n; See the PHP docs for more specific information.\r\n; http://php.net/configuration.file\r\n\r\n; The syntax of the file is extremely simple.  Whitespace and Lines\r\n; beginning with a semicolon are silently ignored (as you probably guessed).\r\n; Section headers (e.g. [Foo]) are also silently ignored, even though\r\n; they might mean something in the future.\r\n\r\n; Directives following the section heading [PATH=/www/mysite] only\r\n; apply to PHP files in the /www/mysite directory.  Directives\r\n; following the section heading [HOST=www.example.com] only apply to\r\n; PHP files served from www.example.com.  Directives set in these\r\n; special sections cannot be overridden by user-defined INI files or\r\n; at runtime. Currently, [PATH=] and [HOST=] sections only work under\r\n; CGI/FastCGI.\r\n; http://php.net/ini.sections\r\n\r\n; Directives are specified using the following syntax:\r\n; directive = value\r\n; Directive names are *case sensitive* - foo=bar is different from FOO=bar.\r\n; Directives are variables used to configure PHP or PHP extensions.\r\n; There is no name validation.  If PHP can't find an expected\r\n; directive because it is not set or is mistyped, a default value will be used.\r\n\r\n; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one\r\n; of the INI constants (On, Off, True, False, Yes, No and None) or an expression\r\n; (e.g. E_ALL & ~E_NOTICE), a quoted string (\"bar\"), or a reference to a\r\n; previously set variable or directive (e.g. ${foo})\r\n\r\n; Expressions in the INI file are limited to bitwise operators and parentheses:\r\n; |  bitwise OR\r\n; ^  bitwise XOR\r\n; &  bitwise AND\r\n; ~  bitwise NOT\r\n; !  boolean NOT\r\n\r\n; Boolean flags can be turned on using the values 1, On, True or Yes.\r\n; They can be turned off using the values 0, Off, False or No.\r\n\r\n; An empty string can be denoted by simply not writing anything after the equal\r\n; sign, or by using the None keyword:\r\n\r\n;  foo =         ; sets foo to an empty string\r\n;  foo = None    ; sets foo to an empty string\r\n;  foo = \"None\"  ; sets foo to the string 'None'\r\n\r\n; If you use constants in your value, and these constants belong to a\r\n; dynamically loaded extension (either a PHP extension or a Zend extension),\r\n; you may only use these constants *after* the line that loads the extension.\r\n\r\n;;;;;;;;;;;;;;;;;;;\r\n; About this file ;\r\n;;;;;;;;;;;;;;;;;;;\r\n; PHP comes packaged with two INI files. One that is recommended to be used\r\n; in production environments and one that is recommended to be used in\r\n; development environments.\r\n\r\n; php.ini-production contains settings which hold security, performance and\r\n; best practices at its core. But please be aware, these settings may break\r\n; compatibility with older or less security conscience applications. We\r\n; recommending using the production ini in production and testing environments.\r\n\r\n; php.ini-development is very similar to its production variant, except it's\r\n; much more verbose when it comes to errors. We recommending using the\r\n; development version only in development environments as errors shown to\r\n; application users can inadvertently leak otherwise secure information.\r\n\r\n;;;;;;;;;;;;;;;;;;;\r\n; Quick Reference ;\r\n;;;;;;;;;;;;;;;;;;;\r\n; The following are all the settings which are different in either the production\r\n; or development versions of the INIs with respect to PHP's default behavior.\r\n; Please see the actual settings later in the document for more details as to why\r\n; we recommend these changes in PHP's behavior.\r\n\r\n; allow_call_time_pass_reference\r\n;   Default Value: On\r\n;   Development Value: Off\r\n;   Production Value: Off\r\n\r\n; display_errors\r\n;   Default Value: On\r\n;   Development Value: On\r\n;   Production Value: Off\r\n\r\n; display_startup_errors\r\n;   Default Value: Off\r\n;   Development Value: On\r\n;   Production Value: Off\r\n\r\n; error_reporting\r\n;   Default Value: E_ALL & ~E_NOTICE\r\n;   Development Value: E_ALL | E_STRICT\r\n;   Production Value: E_ALL & ~E_DEPRECATED\r\n\r\n; html_errors\r\n;   Default Value: On\r\n;   Development Value: On\r\n;   Production value: Off\r\n\r\n; log_errors\r\n;   Default Value: Off\r\n;   Development Value: On\r\n;   Production Value: On\r\n\r\n; magic_quotes_gpc\r\n;   Default Value: On\r\n;   Development Value: Off\r\n;   Production Value: Off\r\n\r\n; max_input_time\r\n;   Default Value: -1 (Unlimited)\r\n;   Development Value: 60 (60 seconds)\r\n;   Production Value: 60 (60 seconds)\r\n\r\n; output_buffering\r\n;   Default Value: Off\r\n;   Development Value: 4096\r\n;   Production Value: 4096\r\n\r\n; register_argc_argv\r\n;   Default Value: On\r\n;   Development Value: Off\r\n;   Production Value: Off\r\n\r\n; register_long_arrays\r\n;   Default Value: On\r\n;   Development Value: Off\r\n;   Production Value: Off\r\n\r\n; request_order\r\n;   Default Value: None\r\n;   Development Value: \"GP\"\r\n;   Production Value: \"GP\"\r\n\r\n; session.bug_compat_42\r\n;   Default Value: On\r\n;   Development Value: On\r\n;   Production Value: Off\r\n\r\n; session.bug_compat_warn\r\n;   Default Value: On\r\n;   Development Value: On\r\n;   Production Value: Off\r\n\r\n; session.gc_divisor\r\n;   Default Value: 100\r\n;   Development Value: 1000\r\n;   Production Value: 1000\r\n\r\n; session.hash_bits_per_character\r\n;   Default Value: 4\r\n;   Development Value: 5\r\n;   Production Value: 5\r\n\r\n; short_open_tag\r\n;   Default Value: On\r\n;   Development Value: Off\r\n;   Production Value: Off\r\n\r\n; track_errors\r\n;   Default Value: Off\r\n;   Development Value: On\r\n;   Production Value: Off\r\n\r\n; url_rewriter.tags\r\n;   Default Value: \"a=href,area=href,frame=src,form=,fieldset=\"\r\n;   Development Value: \"a=href,area=href,frame=src,input=src,form=fakeentry\"\r\n;   Production Value: \"a=href,area=href,frame=src,input=src,form=fakeentry\"\r\n\r\n; variables_order\r\n;   Default Value: \"EGPCS\"\r\n;   Development Value: \"GPCS\"\r\n;   Production Value: \"GPCS\"\r\n\r\n;;;;;;;;;;;;;;;;;;;;\r\n; php.ini Options  ;\r\n;;;;;;;;;;;;;;;;;;;;\r\n; Name for user-defined php.ini (.htaccess) files. Default is \".user.ini\"\r\n;user_ini.filename = \".user.ini\"\r\n\r\n; To disable this feature set this option to empty value\r\n;user_ini.filename =\r\n\r\n; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes)\r\n;user_ini.cache_ttl = 300\r\n\r\n;;;;;;;;;;;;;;;;;;;;\r\n; Language Options ;\r\n;;;;;;;;;;;;;;;;;;;;\r\n\r\n; Enable the PHP scripting language engine under Apache.\r\n; http://php.net/engine\r\nengine = On\r\n\r\n; This directive determines whether or not PHP will recognize code between\r\n; <? and ?> tags as PHP source which should be processed as such. It's been\r\n; recommended for several years that you not use the short tag \"short cut\" and\r\n; instead to use the full <?php and ?> tag combination. With the wide spread use\r\n; of XML and use of these tags by other languages, the server can become easily\r\n; confused and end up parsing the wrong code in the wrong context. But because\r\n; this short cut has been a feature for such a long time, it's currently still\r\n; supported for backwards compatibility, but we recommend you don't use them.\r\n; Default Value: On\r\n; Development Value: Off\r\n; Production Value: Off\r\n; http://php.net/short-open-tag\r\nshort_open_tag = On\r\n\r\n; Allow ASP-style <% %> tags.\r\n; http://php.net/asp-tags\r\nasp_tags = Off\r\n\r\n; The number of significant digits displayed in floating point numbers.\r\n; http://php.net/precision\r\nprecision = 14\r\n\r\n; Enforce year 2000 compliance (will cause problems with non-compliant browsers)\r\n; http://php.net/y2k-compliance\r\ny2k_compliance = On\r\n\r\n; Output buffering is a mechanism for controlling how much output data\r\n; (excluding headers and cookies) PHP should keep internally before pushing that\r\n; data to the client. If your application's output exceeds this setting, PHP\r\n; will send that data in chunks of roughly the size you specify.\r\n; Turning on this setting and managing its maximum buffer size can yield some\r\n; interesting side-effects depending on your application and web server.\r\n; You may be able to send headers and cookies after you've already sent output\r\n; through print or echo. You also may see performance benefits if your server is\r\n; emitting less packets due to buffered output versus PHP streaming the output\r\n; as it gets it. On production servers, 4096 bytes is a good setting for performance\r\n; reasons.\r\n; Note: Output buffering can also be controlled via Output Buffering Control\r\n;   functions.\r\n; Possible Values:\r\n;   On = Enabled and buffer is unlimited. (Use with caution)\r\n;   Off = Disabled\r\n;   Integer = Enables the buffer and sets its maximum size in bytes.\r\n; Note: This directive is hardcoded to Off for the CLI SAPI\r\n; Default Value: Off\r\n; Development Value: 4096\r\n; Production Value: 4096\r\n; http://php.net/output-buffering\r\noutput_buffering = 4096\r\n\r\n; You can redirect all of the output of your scripts to a function.  For\r\n; example, if you set output_handler to \"mb_output_handler\", character\r\n; encoding will be transparently converted to the specified encoding.\r\n; Setting any output handler automatically turns on output buffering.\r\n; Note: People who wrote portable scripts should not depend on this ini\r\n;   directive. Instead, explicitly set the output handler using ob_start().\r\n;   Using this ini directive may cause problems unless you know what script\r\n;   is doing.\r\n; Note: You cannot use both \"mb_output_handler\" with \"ob_iconv_handler\"\r\n;   and you cannot use both \"ob_gzhandler\" and \"zlib.output_compression\".\r\n; Note: output_handler must be empty if this is set 'On' !!!!\r\n;   Instead you must use zlib.output_handler.\r\n; http://php.net/output-handler\r\n;output_handler =\r\n\r\n; Transparent output compression using the zlib library\r\n; Valid values for this option are 'off', 'on', or a specific buffer size\r\n; to be used for compression (default is 4KB)\r\n; Note: Resulting chunk size may vary due to nature of compression. PHP\r\n;   outputs chunks that are few hundreds bytes each as a result of\r\n;   compression. If you prefer a larger chunk size for better\r\n;   performance, enable output_buffering in addition.\r\n; Note: You need to use zlib.output_handler instead of the standard\r\n;   output_handler, or otherwise the output will be corrupted.\r\n; http://php.net/zlib.output-compression\r\nzlib.output_compression = Off\r\n\r\n; http://php.net/zlib.output-compression-level\r\n;zlib.output_compression_level = -1\r\n\r\n; You cannot specify additional output handlers if zlib.output_compression\r\n; is activated here. This setting does the same as output_handler but in\r\n; a different order.\r\n; http://php.net/zlib.output-handler\r\n;zlib.output_handler =\r\n\r\n; Implicit flush tells PHP to tell the output layer to flush itself\r\n; automatically after every output block.  This is equivalent to calling the\r\n; PHP function flush() after each and every call to print() or echo() and each\r\n; and every HTML block.  Turning this option on has serious performance\r\n; implications and is generally recommended for debugging purposes only.\r\n; http://php.net/implicit-flush\r\n; Note: This directive is hardcoded to On for the CLI SAPI\r\nimplicit_flush = Off\r\n\r\n; The unserialize callback function will be called (with the undefined class'\r\n; name as parameter), if the unserializer finds an undefined class\r\n; which should be instantiated. A warning appears if the specified function is\r\n; not defined, or if the function doesn't include/implement the missing class.\r\n; So only set this entry, if you really want to implement such a\r\n; callback-function.\r\nunserialize_callback_func =\r\n\r\n; When floats & doubles are serialized store serialize_precision significant\r\n; digits after the floating point. The default value ensures that when floats\r\n; are decoded with unserialize, the data will remain the same.\r\nserialize_precision = 100\r\n\r\n; This directive allows you to enable and disable warnings which PHP will issue\r\n; if you pass a value by reference at function call time. Passing values by\r\n; reference at function call time is a deprecated feature which will be removed\r\n; from PHP at some point in the near future. The acceptable method for passing a\r\n; value by reference to a function is by declaring the reference in the functions\r\n; definition, not at call time. This directive does not disable this feature, it\r\n; only determines whether PHP will warn you about it or not. These warnings\r\n; should enabled in development environments only.\r\n; Default Value: On (Suppress warnings)\r\n; Development Value: Off (Issue warnings)\r\n; Production Value: Off (Issue warnings)\r\n; http://php.net/allow-call-time-pass-reference\r\nallow_call_time_pass_reference = Off\r\n\r\n; Safe Mode\r\n; http://php.net/safe-mode\r\nsafe_mode = Off\r\n\r\n; By default, Safe Mode does a UID compare check when\r\n; opening files. If you want to relax this to a GID compare,\r\n; then turn on safe_mode_gid.\r\n; http://php.net/safe-mode-gid\r\nsafe_mode_gid = Off\r\n\r\n; When safe_mode is on, UID/GID checks are bypassed when\r\n; including files from this directory and its subdirectories.\r\n; (directory must also be in include_path or full path must\r\n; be used when including)\r\n; http://php.net/safe-mode-include-dir\r\nsafe_mode_include_dir =\r\n\r\n; When safe_mode is on, only executables located in the safe_mode_exec_dir\r\n; will be allowed to be executed via the exec family of functions.\r\n; http://php.net/safe-mode-exec-dir\r\nsafe_mode_exec_dir =\r\n\r\n; Setting certain environment variables may be a potential security breach.\r\n; This directive contains a comma-delimited list of prefixes.  In Safe Mode,\r\n; the user may only alter environment variables whose names begin with the\r\n; prefixes supplied here.  By default, users will only be able to set\r\n; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).\r\n; Note:  If this directive is empty, PHP will let the user modify ANY\r\n;   environment variable!\r\n; http://php.net/safe-mode-allowed-env-vars\r\nsafe_mode_allowed_env_vars = PHP_\r\n\r\n; This directive contains a comma-delimited list of environment variables that\r\n; the end user won't be able to change using putenv().  These variables will be\r\n; protected even if safe_mode_allowed_env_vars is set to allow to change them.\r\n; http://php.net/safe-mode-protected-env-vars\r\nsafe_mode_protected_env_vars = LD_LIBRARY_PATH\r\n\r\n; open_basedir, if set, limits all file operations to the defined directory\r\n; and below.  This directive makes most sense if used in a per-directory\r\n; or per-virtualhost web server configuration file. This directive is\r\n; *NOT* affected by whether Safe Mode is turned On or Off.\r\n; http://php.net/open-basedir\r\n;open_basedir =\r\n\r\n; This directive allows you to disable certain functions for security reasons.\r\n; It receives a comma-delimited list of function names. This directive is\r\n; *NOT* affected by whether Safe Mode is turned On or Off.\r\n; http://php.net/disable-functions\r\ndisable_functions =\r\n\r\n; This directive allows you to disable certain classes for security reasons.\r\n; It receives a comma-delimited list of class names. This directive is\r\n; *NOT* affected by whether Safe Mode is turned On or Off.\r\n; http://php.net/disable-classes\r\ndisable_classes =\r\n\r\n; Colors for Syntax Highlighting mode.  Anything that's acceptable in\r\n; <span style=\"color: ???????\"> would work.\r\n; http://php.net/syntax-highlighting\r\n;highlight.string  = #DD0000\r\n;highlight.comment = #FF9900\r\n;highlight.keyword = #007700\r\n;highlight.bg      = #FFFFFF\r\n;highlight.default = #0000BB\r\n;highlight.html    = #000000\r\n\r\n; If enabled, the request will be allowed to complete even if the user aborts\r\n; the request. Consider enabling it if executing long requests, which may end up\r\n; being interrupted by the user or a browser timing out. PHP's default behavior\r\n; is to disable this feature.\r\n; http://php.net/ignore-user-abort\r\n;ignore_user_abort = On\r\n\r\n; Determines the size of the realpath cache to be used by PHP. This value should\r\n; be increased on systems where PHP opens many files to reflect the quantity of\r\n; the file operations performed.\r\n; http://php.net/realpath-cache-size\r\n;realpath_cache_size = 16k\r\n\r\n; Duration of time, in seconds for which to cache realpath information for a given\r\n; file or directory. For systems with rarely changing files, consider increasing this\r\n; value.\r\n; http://php.net/realpath-cache-ttl\r\n;realpath_cache_ttl = 120\r\n\r\n;;;;;;;;;;;;;;;;;\r\n; Miscellaneous ;\r\n;;;;;;;;;;;;;;;;;\r\n\r\n; Decides whether PHP may expose the fact that it is installed on the server\r\n; (e.g. by adding its signature to the Web server header).  It is no security\r\n; threat in any way, but it makes it possible to determine whether you use PHP\r\n; on your server or not.\r\n; http://php.net/expose-php\r\nexpose_php = On\r\n\r\n;;;;;;;;;;;;;;;;;;;\r\n; Resource Limits ;\r\n;;;;;;;;;;;;;;;;;;;\r\n\r\n; Maximum execution time of each script, in seconds\r\n; http://php.net/max-execution-time\r\n; Note: This directive is hardcoded to 0 for the CLI SAPI\r\nmax_execution_time = 30\r\n\r\n; Maximum amount of time each script may spend parsing request data. It's a good\r\n; idea to limit this time on productions servers in order to eliminate unexpectedly\r\n; long running scripts.\r\n; Note: This directive is hardcoded to -1 for the CLI SAPI\r\n; Default Value: -1 (Unlimited)\r\n; Development Value: 60 (60 seconds)\r\n; Production Value: 60 (60 seconds)\r\n; http://php.net/max-input-time\r\nmax_input_time = 60\r\n\r\n; Maximum input variable nesting level\r\n; http://php.net/max-input-nesting-level\r\n;max_input_nesting_level = 64\r\n\r\n; Maximum amount of memory a script may consume (128MB)\r\n; http://php.net/memory-limit\r\nmemory_limit = 128M\r\n\r\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r\n; Error handling and logging ;\r\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r\n\r\n; This directive informs PHP of which errors, warnings and notices you would like\r\n; it to take action for. The recommended way of setting values for this\r\n; directive is through the use of the error level constants and bitwise\r\n; operators. The error level constants are below here for convenience as well as\r\n; some common settings and their meanings.\r\n; By default, PHP is set to take action on all errors, notices and warnings EXCEPT\r\n; those related to E_NOTICE and E_STRICT, which together cover best practices and\r\n; recommended coding standards in PHP. For performance reasons, this is the\r\n; recommend error reporting setting. Your production server shouldn't be wasting\r\n; resources complaining about best practices and coding standards. That's what\r\n; development servers and development settings are for.\r\n; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This\r\n; means it pretty much reports everything which is exactly what you want during\r\n; development and early testing.\r\n;\r\n; Error Level Constants:\r\n; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 6.0.0)\r\n; E_ERROR           - fatal run-time errors\r\n; E_RECOVERABLE_ERROR  - almost fatal run-time errors\r\n; E_WARNING         - run-time warnings (non-fatal errors)\r\n; E_PARSE           - compile-time parse errors\r\n; E_NOTICE          - run-time notices (these are warnings which often result\r\n;                     from a bug in your code, but it's possible that it was\r\n;                     intentional (e.g., using an uninitialized variable and\r\n;                     relying on the fact it's automatically initialized to an\r\n;                     empty string)\r\n; E_STRICT          - run-time notices, enable to have PHP suggest changes\r\n;                     to your code which will ensure the best interoperability\r\n;                     and forward compatibility of your code\r\n; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup\r\n; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's\r\n;                     initial startup\r\n; E_COMPILE_ERROR   - fatal compile-time errors\r\n; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)\r\n; E_USER_ERROR      - user-generated error message\r\n; E_USER_WARNING    - user-generated warning message\r\n; E_USER_NOTICE     - user-generated notice message\r\n; E_DEPRECATED      - warn about code that will not work in future versions\r\n;                     of PHP\r\n; E_USER_DEPRECATED - user-generated deprecation warnings\r\n;\r\n; Common Values:\r\n;   E_ALL & ~E_NOTICE  (Show all errors, except for notices and coding standards warnings.)\r\n;   E_ALL & ~E_NOTICE | E_STRICT  (Show all errors, except for notices)\r\n;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)\r\n;   E_ALL | E_STRICT  (Show all errors, warnings and notices including coding standards.)\r\n; Default Value: E_ALL & ~E_NOTICE\r\n; Development Value: E_ALL | E_STRICT\r\n; Production Value: E_ALL & ~E_DEPRECATED\r\n; http://php.net/error-reporting\r\nerror_reporting = E_ALL | E_STRICT\r\n\r\n; This directive controls whether or not and where PHP will output errors,\r\n; notices and warnings too. Error output is very useful during development, but\r\n; it could be very dangerous in production environments. Depending on the code\r\n; which is triggering the error, sensitive information could potentially leak\r\n; out of your application such as database usernames and passwords or worse.\r\n; It's recommended that errors be logged on production servers rather than\r\n; having the errors sent to STDOUT.\r\n; Possible Values:\r\n;   Off = Do not display any errors\r\n;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)\r\n;   On or stdout = Display errors to STDOUT\r\n; Default Value: On\r\n; Development Value: On\r\n; Production Value: Off\r\n; http://php.net/display-errors\r\ndisplay_errors = On\r\n\r\n; The display of errors which occur during PHP's startup sequence are handled\r\n; separately from display_errors. PHP's default behavior is to suppress those\r\n; errors from clients. Turning the display of startup errors on can be useful in\r\n; debugging configuration problems. But, it's strongly recommended that you\r\n; leave this setting off on production servers.\r\n; Default Value: Off\r\n; Development Value: On\r\n; Production Value: Off\r\n; http://php.net/display-startup-errors\r\ndisplay_startup_errors = On\r\n\r\n; Besides displaying errors, PHP can also log errors to locations such as a\r\n; server-specific log, STDERR, or a location specified by the error_log\r\n; directive found below. While errors should not be displayed on productions\r\n; servers they should still be monitored and logging is a great way to do that.\r\n; Default Value: Off\r\n; Development Value: On\r\n; Production Value: On\r\n; http://php.net/log-errors\r\nlog_errors = On\r\n\r\n; Set maximum length of log_errors. In error_log information about the source is\r\n; added. The default is 1024 and 0 allows to not apply any maximum length at all.\r\n; http://php.net/log-errors-max-len\r\nlog_errors_max_len = 1024\r\n\r\n; Do not log repeated messages. Repeated errors must occur in same file on same\r\n; line unless ignore_repeated_source is set true.\r\n; http://php.net/ignore-repeated-errors\r\nignore_repeated_errors = Off\r\n\r\n; Ignore source of message when ignoring repeated messages. When this setting\r\n; is On you will not log errors with repeated messages from different files or\r\n; source lines.\r\n; http://php.net/ignore-repeated-source\r\nignore_repeated_source = Off\r\n\r\n; If this parameter is set to Off, then memory leaks will not be shown (on\r\n; stdout or in the log). This has only effect in a debug compile, and if\r\n; error reporting includes E_WARNING in the allowed list\r\n; http://php.net/report-memleaks\r\nreport_memleaks = On\r\n\r\n; This setting is on by default.\r\n;report_zend_debug = 0\r\n\r\n; Store the last error/warning message in $php_errormsg (boolean). Setting this value\r\n; to On can assist in debugging and is appropriate for development servers. It should\r\n; however be disabled on production servers.\r\n; Default Value: Off\r\n; Development Value: On\r\n; Production Value: Off\r\n; http://php.net/track-errors\r\ntrack_errors = On\r\n\r\n; Turn off normal error reporting and emit XML-RPC error XML\r\n; http://php.net/xmlrpc-errors\r\n;xmlrpc_errors = 0\r\n\r\n; An XML-RPC faultCode\r\n;xmlrpc_error_number = 0\r\n\r\n; When PHP displays or logs an error, it has the capability of inserting html\r\n; links to documentation related to that error. This directive controls whether\r\n; those HTML links appear in error messages or not. For performance and security\r\n; reasons, it's recommended you disable this on production servers.\r\n; Note: This directive is hardcoded to Off for the CLI SAPI\r\n; Default Value: On\r\n; Development Value: On\r\n; Production value: Off\r\n; http://php.net/html-errors\r\nhtml_errors = On\r\n\r\n; If html_errors is set On PHP produces clickable error messages that direct\r\n; to a page describing the error or function causing the error in detail.\r\n; You can download a copy of the PHP manual from http://php.net/docs\r\n; and change docref_root to the base URL of your local copy including the\r\n; leading '/'. You must also specify the file extension being used including\r\n; the dot. PHP's default behavior is to leave these settings empty.\r\n; Note: Never use this feature for production boxes.\r\n; http://php.net/docref-root\r\n; Examples\r\n;docref_root = \"/phpmanual/\"\r\n\r\n; http://php.net/docref-ext\r\n;docref_ext = .html\r\n\r\n; String to output before an error message. PHP's default behavior is to leave\r\n; this setting blank.\r\n; http://php.net/error-prepend-string\r\n; Example:\r\n;error_prepend_string = \"<font color=#ff0000>\"\r\n\r\n; String to output after an error message. PHP's default behavior is to leave\r\n; this setting blank.\r\n; http://php.net/error-append-string\r\n; Example:\r\n;error_append_string = \"</font>\"\r\n\r\n; Log errors to specified file. PHP's default behavior is to leave this value\r\n; empty.\r\n; http://php.net/error-log\r\n; Example:\r\n;error_log = php_errors.log\r\n; Log errors to syslog (Event Log on NT, not valid in Windows 95).\r\n;error_log = syslog\r\n\r\n;;;;;;;;;;;;;;;;;\r\n; Data Handling ;\r\n;;;;;;;;;;;;;;;;;\r\n\r\n; The separator used in PHP generated URLs to separate arguments.\r\n; PHP's default setting is \"&\".\r\n; http://php.net/arg-separator.output\r\n; Example:\r\n;arg_separator.output = \"&amp;\"\r\n\r\n; List of separator(s) used by PHP to parse input URLs into variables.\r\n; PHP's default setting is \"&\".\r\n; NOTE: Every character in this directive is considered as separator!\r\n; http://php.net/arg-separator.input\r\n; Example:\r\n;arg_separator.input = \";&\"\r\n\r\n; This directive determines which super global arrays are registered when PHP\r\n; starts up. If the register_globals directive is enabled, it also determines\r\n; what order variables are populated into the global space. G,P,C,E & S are\r\n; abbreviations for the following respective super globals: GET, POST, COOKIE,\r\n; ENV and SERVER. There is a performance penalty paid for the registration of\r\n; these arrays and because ENV is not as commonly used as the others, ENV is\r\n; is not recommended on productions servers. You can still get access to\r\n; the environment variables through getenv() should you need to.\r\n; Default Value: \"EGPCS\"\r\n; Development Value: \"GPCS\"\r\n; Production Value: \"GPCS\";\r\n; http://php.net/variables-order\r\nvariables_order = \"GPCS\"\r\n\r\n; This directive determines which super global data (G,P,C,E & S) should\r\n; be registered into the super global array REQUEST. If so, it also determines\r\n; the order in which that data is registered. The values for this directive are\r\n; specified in the same manner as the variables_order directive, EXCEPT one.\r\n; Leaving this value empty will cause PHP to use the value set in the\r\n; variables_order directive. It does not mean it will leave the super globals\r\n; array REQUEST empty.\r\n; Default Value: None\r\n; Development Value: \"GP\"\r\n; Production Value: \"GP\"\r\n; http://php.net/request-order\r\nrequest_order = \"GP\"\r\n\r\n; Whether or not to register the EGPCS variables as global variables.  You may\r\n; want to turn this off if you don't want to clutter your scripts' global scope\r\n; with user data.\r\n; You should do your best to write your scripts so that they do not require\r\n; register_globals to be on;  Using form variables as globals can easily lead\r\n; to possible security problems, if the code is not very well thought of.\r\n; http://php.net/register-globals\r\nregister_globals = Off\r\n\r\n; Determines whether the deprecated long $HTTP_*_VARS type predefined variables\r\n; are registered by PHP or not. As they are deprecated, we obviously don't\r\n; recommend you use them. They are on by default for compatibility reasons but\r\n; they are not recommended on production servers.\r\n; Default Value: On\r\n; Development Value: Off\r\n; Production Value: Off\r\n; http://php.net/register-long-arrays\r\nregister_long_arrays = Off\r\n\r\n; This directive determines whether PHP registers $argv & $argc each time it\r\n; runs. $argv contains an array of all the arguments passed to PHP when a script\r\n; is invoked. $argc contains an integer representing the number of arguments\r\n; that were passed when the script was invoked. These arrays are extremely\r\n; useful when running scripts from the command line. When this directive is\r\n; enabled, registering these variables consumes CPU cycles and memory each time\r\n; a script is executed. For performance reasons, this feature should be disabled\r\n; on production servers.\r\n; Note: This directive is hardcoded to On for the CLI SAPI\r\n; Default Value: On\r\n; Development Value: Off\r\n; Production Value: Off\r\n; http://php.net/register-argc-argv\r\nregister_argc_argv = Off\r\n\r\n; When enabled, the SERVER and ENV variables are created when they're first\r\n; used (Just In Time) instead of when the script starts. If these variables\r\n; are not used within a script, having this directive on will result in a\r\n; performance gain. The PHP directives register_globals, register_long_arrays,\r\n; and register_argc_argv must be disabled for this directive to have any affect.\r\n; http://php.net/auto-globals-jit\r\nauto_globals_jit = On\r\n\r\n; Maximum size of POST data that PHP will accept.\r\n; http://php.net/post-max-size\r\npost_max_size = 8M\r\n\r\n; Magic quotes are a preprocessing feature of PHP where PHP will attempt to\r\n; escape any character sequences in GET, POST, COOKIE and ENV data which might\r\n; otherwise corrupt data being placed in resources such as databases before\r\n; making that data available to you. Because of character encoding issues and\r\n; non-standard SQL implementations across many databases, it's not currently\r\n; possible for this feature to be 100% accurate. PHP's default behavior is to\r\n; enable the feature. We strongly recommend you use the escaping mechanisms\r\n; designed specifically for the database your using instead of relying on this\r\n; feature. Also note, this feature has been deprecated as of PHP 5.3.0 and is\r\n; scheduled for removal in PHP 6.\r\n; Default Value: On\r\n; Development Value: Off\r\n; Production Value: Off\r\n; http://php.net/magic-quotes-gpc\r\nmagic_quotes_gpc = Off\r\n\r\n; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.\r\n; http://php.net/magic-quotes-runtime\r\nmagic_quotes_runtime = Off\r\n\r\n; Use Sybase-style magic quotes (escape ' with '' instead of \\').\r\n; http://php.net/magic-quotes-sybase\r\nmagic_quotes_sybase = Off\r\n\r\n; Automatically add files before PHP document.\r\n; http://php.net/auto-prepend-file\r\nauto_prepend_file =\r\n\r\n; Automatically add files after PHP document.\r\n; http://php.net/auto-append-file\r\nauto_append_file =\r\n\r\n; By default, PHP will output a character encoding using\r\n; the Content-type: header.  To disable sending of the charset, simply\r\n; set it to be empty.\r\n;\r\n; PHP's built-in default is text/html\r\n; http://php.net/default-mimetype\r\ndefault_mimetype = \"text/html\"\r\n\r\n; PHP's default character set is set to empty.\r\n; http://php.net/default-charset\r\n;default_charset = \"iso-8859-1\"\r\n\r\n; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is\r\n; to disable this feature.\r\n; http://php.net/always-populate-raw-post-data\r\n;always_populate_raw_post_data = On\r\n\r\n;;;;;;;;;;;;;;;;;;;;;;;;;\r\n; Paths and Directories ;\r\n;;;;;;;;;;;;;;;;;;;;;;;;;\r\n\r\n; UNIX: \"/path1:/path2\"\r\n;include_path = \".:/php/includes\"\r\n;\r\n; Windows: \"\\path1;\\path2\"\r\n;include_path = \".;c:\\php\\includes\"\r\n;\r\n; PHP's default setting for include_path is \".;/path/to/php/pear\"\r\n; http://php.net/include-path\r\n\r\n; The root of the PHP pages, used only if nonempty.\r\n; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root\r\n; if you are running php as a CGI under any web server (other than IIS)\r\n; see documentation for security issues.  The alternate is to use the\r\n; cgi.force_redirect configuration below\r\n; http://php.net/doc-root\r\ndoc_root =\r\n\r\n; The directory under which PHP opens the script using /~username used only\r\n; if nonempty.\r\n; http://php.net/user-dir\r\nuser_dir =\r\n\r\n; Directory in which the loadable extensions (modules) reside.\r\n; http://php.net/extension-dir\r\n; extension_dir = \"./\"\r\n; On windows:\r\nextension_dir = \"ext\"\r\n\r\n; Whether or not to enable the dl() function.  The dl() function does NOT work\r\n; properly in multithreaded servers, such as IIS or Zeus, and is automatically\r\n; disabled on them.\r\n; http://php.net/enable-dl\r\nenable_dl = Off\r\n\r\n; cgi.force_redirect is necessary to provide security running PHP as a CGI under\r\n; most web servers.  Left undefined, PHP turns this on by default.  You can\r\n; turn it off here AT YOUR OWN RISK\r\n; **You CAN safely turn this off for IIS, in fact, you MUST.**\r\n; http://php.net/cgi.force-redirect\r\n;cgi.force_redirect = 1\r\n\r\n; if cgi.nph is enabled it will force cgi to always sent Status: 200 with\r\n; every request. PHP's default behavior is to disable this feature.\r\n;cgi.nph = 1\r\n\r\n; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape\r\n; (iPlanet) web servers, you MAY need to set an environment variable name that PHP\r\n; will look for to know it is OK to continue execution.  Setting this variable MAY\r\n; cause security issues, KNOW WHAT YOU ARE DOING FIRST.\r\n; http://php.net/cgi.redirect-status-env\r\n;cgi.redirect_status_env = ;\r\n\r\n; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's\r\n; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok\r\n; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting\r\n; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting\r\n; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts\r\n; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.\r\n; http://php.net/cgi.fix-pathinfo\r\n;cgi.fix_pathinfo=1\r\n\r\n; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate\r\n; security tokens of the calling client.  This allows IIS to define the\r\n; security context that the request runs under.  mod_fastcgi under Apache\r\n; does not currently support this feature (03/17/2002)\r\n; Set to 1 if running under IIS.  Default is zero.\r\n; http://php.net/fastcgi.impersonate\r\n;fastcgi.impersonate = 1;\r\n\r\n; Disable logging through FastCGI connection. PHP's default behavior is to enable\r\n; this feature.\r\n;fastcgi.logging = 0\r\n\r\n; cgi.rfc2616_headers configuration option tells PHP what type of headers to\r\n; use when sending HTTP response code. If it's set 0 PHP sends Status: header that\r\n; is supported by Apache. When this option is set to 1 PHP will send\r\n; RFC2616 compliant header.\r\n; Default is zero.\r\n; http://php.net/cgi.rfc2616-headers\r\n;cgi.rfc2616_headers = 0\r\n\r\n;;;;;;;;;;;;;;;;\r\n; File Uploads ;\r\n;;;;;;;;;;;;;;;;\r\n\r\n; Whether to allow HTTP file uploads.\r\n; http://php.net/file-uploads\r\nfile_uploads = On\r\n\r\n; Temporary directory for HTTP uploaded files (will use system default if not\r\n; specified).\r\n; http://php.net/upload-tmp-dir\r\n;upload_tmp_dir =\r\n\r\n; Maximum allowed size for uploaded files.\r\n; http://php.net/upload-max-filesize\r\nupload_max_filesize = 2M\r\n\r\n; Maximum number of files that can be uploaded via a single request\r\nmax_file_uploads = 20\r\n\r\n;;;;;;;;;;;;;;;;;;\r\n; Fopen wrappers ;\r\n;;;;;;;;;;;;;;;;;;\r\n\r\n; Whether to allow the treatment of URLs (like http:// or ftp://) as files.\r\n; http://php.net/allow-url-fopen\r\nallow_url_fopen = On\r\n\r\n; Whether to allow include/require to open URLs (like http:// or ftp://) as files.\r\n; http://php.net/allow-url-include\r\nallow_url_include = Off\r\n\r\n; Define the anonymous ftp password (your email address). PHP's default setting\r\n; for this is empty.\r\n; http://php.net/from\r\n;from=\"john@doe.com\"\r\n\r\n; Define the User-Agent string. PHP's default setting for this is empty.\r\n; http://php.net/user-agent\r\n;user_agent=\"PHP\"\r\n\r\n; Default timeout for socket based streams (seconds)\r\n; http://php.net/default-socket-timeout\r\ndefault_socket_timeout = 60\r\n\r\n; If your scripts have to deal with files from Macintosh systems,\r\n; or you are running on a Mac and need to deal with files from\r\n; unix or win32 systems, setting this flag will cause PHP to\r\n; automatically detect the EOL character in those files so that\r\n; fgets() and file() will work regardless of the source of the file.\r\n; http://php.net/auto-detect-line-endings\r\n;auto_detect_line_endings = Off\r\n\r\n;;;;;;;;;;;;;;;;;;;;;;\r\n; Dynamic Extensions ;\r\n;;;;;;;;;;;;;;;;;;;;;;\r\n\r\n; If you wish to have an extension loaded automatically, use the following\r\n; syntax:\r\n;\r\n;   extension=modulename.extension\r\n;\r\n; For example, on Windows:\r\n;\r\n;   extension=msql.dll\r\n;\r\n; ... or under UNIX:\r\n;\r\n;   extension=msql.so\r\n;\r\n; ... or with a path:\r\n;\r\n;   extension=/path/to/extension/msql.so\r\n;\r\n; If you only provide the name of the extension, PHP will look for it in its\r\n; default extension directory.\r\n;\r\n; Windows Extensions\r\n; Note that ODBC support is built in, so no dll is needed for it.\r\n; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)\r\n; extension folders as well as the separate PECL DLL download (PHP 5).\r\n; Be sure to appropriately set the extension_dir directive.\r\n;\r\n;extension=php_bz2.dll\r\n;extension=php_curl.dll\r\n;extension=php_dba.dll\r\n;extension=php_exif.dll\r\n;extension=php_fileinfo.dll\r\n;extension=php_gd2.dll\r\n;extension=php_gettext.dll\r\n;extension=php_gmp.dll\r\n;extension=php_intl.dll\r\n;extension=php_imap.dll\r\n;extension=php_interbase.dll\r\n;extension=php_ldap.dll\r\n;extension=php_mbstring.dll\r\n;extension=php_ming.dll\r\n;extension=php_mssql.dll\r\n;extension=php_mysql.dll\r\n;extension=php_mysqli.dll\r\n;extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client\r\n;extension=php_oci8_11g.dll  ; Use with Oracle 11g Instant Client\r\n;extension=php_openssl.dll\r\n;extension=php_pdo_firebird.dll\r\n;extension=php_pdo_mssql.dll\r\n;extension=php_pdo_mysql.dll\r\n;extension=php_pdo_oci.dll\r\n;extension=php_pdo_odbc.dll\r\n;extension=php_pdo_pgsql.dll\r\n;extension=php_pdo_sqlite.dll\r\n;extension=php_pgsql.dll\r\n;extension=php_phar.dll\r\n;extension=php_pspell.dll\r\n;extension=php_shmop.dll\r\n;extension=php_snmp.dll\r\n;extension=php_soap.dll\r\n;extension=php_sockets.dll\r\n;extension=php_sqlite.dll\r\n;extension=php_sqlite3.dll\r\n;extension=php_sybase_ct.dll\r\n;extension=php_tidy.dll\r\n;extension=php_xmlrpc.dll\r\nextension=php_xsl.dll\r\n;extension=php_zip.dll\r\n\r\n;;;;;;;;;;;;;;;;;;;\r\n; Module Settings ;\r\n;;;;;;;;;;;;;;;;;;;\r\n\r\n[Date]\r\n; Defines the default timezone used by the date functions\r\n; http://php.net/date.timezone\r\ndate.timezone = \"Europe/Prague\"\r\n\r\n; http://php.net/date.default-latitude\r\n;date.default_latitude = 31.7667\r\n\r\n; http://php.net/date.default-longitude\r\n;date.default_longitude = 35.2333\r\n\r\n; http://php.net/date.sunrise-zenith\r\n;date.sunrise_zenith = 90.583333\r\n\r\n; http://php.net/date.sunset-zenith\r\n;date.sunset_zenith = 90.583333\r\n\r\n[filter]\r\n; http://php.net/filter.default\r\n;filter.default = unsafe_raw\r\n\r\n; http://php.net/filter.default-flags\r\n;filter.default_flags =\r\n\r\n[iconv]\r\n;iconv.input_encoding = ISO-8859-1\r\n;iconv.internal_encoding = ISO-8859-1\r\n;iconv.output_encoding = ISO-8859-1\r\n\r\n[intl]\r\n;intl.default_locale =\r\n; This directive allows you to produce PHP errors when some error\r\n; happens within intl functions. The value is the level of the error produced.\r\n; Default is 0, which does not produce any errors.\r\n;intl.error_level = E_WARNING\r\n\r\n[sqlite]\r\n; http://php.net/sqlite.assoc-case\r\n;sqlite.assoc_case = 0\r\n\r\n[sqlite3]\r\n;sqlite3.extension_dir =\r\n\r\n[Pcre]\r\n;PCRE library backtracking limit.\r\n; http://php.net/pcre.backtrack-limit\r\n;pcre.backtrack_limit=100000\r\n\r\n;PCRE library recursion limit.\r\n;Please note that if you set this value to a high number you may consume all\r\n;the available process stack and eventually crash PHP (due to reaching the\r\n;stack size limit imposed by the Operating System).\r\n; http://php.net/pcre.recursion-limit\r\n;pcre.recursion_limit=100000\r\n\r\n[Pdo]\r\n; Whether to pool ODBC connections. Can be one of \"strict\", \"relaxed\" or \"off\"\r\n; http://php.net/pdo-odbc.connection-pooling\r\n;pdo_odbc.connection_pooling=strict\r\n\r\n;pdo_odbc.db2_instance_name\r\n\r\n[Pdo_mysql]\r\n; If mysqlnd is used: Number of cache slots for the internal result set cache\r\n; http://php.net/pdo_mysql.cache_size\r\npdo_mysql.cache_size = 2000\r\n\r\n; Default socket name for local MySQL connects.  If empty, uses the built-in\r\n; MySQL defaults.\r\n; http://php.net/pdo_mysql.default-socket\r\npdo_mysql.default_socket=\r\n\r\n[Phar]\r\n; http://php.net/phar.readonly\r\n;phar.readonly = On\r\n\r\n; http://php.net/phar.require-hash\r\n;phar.require_hash = On\r\n\r\n;phar.cache_list =\r\n\r\n[Syslog]\r\n; Whether or not to define the various syslog variables (e.g. $LOG_PID,\r\n; $LOG_CRON, etc.).  Turning it off is a good idea performance-wise.  In\r\n; runtime, you can define these variables by calling define_syslog_variables().\r\n; http://php.net/define-syslog-variables\r\ndefine_syslog_variables  = Off\r\n\r\n[mail function]\r\n; For Win32 only.\r\n; http://php.net/smtp\r\nSMTP = localhost\r\n; http://php.net/smtp-port\r\nsmtp_port = 25\r\n\r\n; For Win32 only.\r\n; http://php.net/sendmail-from\r\n;sendmail_from = me@example.com\r\n\r\n; For Unix only.  You may supply arguments as well (default: \"sendmail -t -i\").\r\n; http://php.net/sendmail-path\r\n;sendmail_path =\r\n\r\n; Force the addition of the specified parameters to be passed as extra parameters\r\n; to the sendmail binary. These parameters will always replace the value of\r\n; the 5th parameter to mail(), even in safe mode.\r\n;mail.force_extra_parameters =\r\n\r\n; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename\r\nmail.add_x_header = On\r\n\r\n; Log all mail() calls including the full path of the script, line #, to address and headers\r\n;mail.log =\r\n\r\n[SQL]\r\n; http://php.net/sql.safe-mode\r\nsql.safe_mode = Off\r\n\r\n[ODBC]\r\n; http://php.net/odbc.default-db\r\n;odbc.default_db    =  Not yet implemented\r\n\r\n; http://php.net/odbc.default-user\r\n;odbc.default_user  =  Not yet implemented\r\n\r\n; http://php.net/odbc.default-pw\r\n;odbc.default_pw    =  Not yet implemented\r\n\r\n; Controls the ODBC cursor model.\r\n; Default: SQL_CURSOR_STATIC (default).\r\n;odbc.default_cursortype\r\n\r\n; Allow or prevent persistent links.\r\n; http://php.net/odbc.allow-persistent\r\nodbc.allow_persistent = On\r\n\r\n; Check that a connection is still valid before reuse.\r\n; http://php.net/odbc.check-persistent\r\nodbc.check_persistent = On\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\n; http://php.net/odbc.max-persistent\r\nodbc.max_persistent = -1\r\n\r\n; Maximum number of links (persistent + non-persistent).  -1 means no limit.\r\n; http://php.net/odbc.max-links\r\nodbc.max_links = -1\r\n\r\n; Handling of LONG fields.  Returns number of bytes to variables.  0 means\r\n; passthru.\r\n; http://php.net/odbc.defaultlrl\r\nodbc.defaultlrl = 4096\r\n\r\n; Handling of binary data.  0 means passthru, 1 return as is, 2 convert to char.\r\n; See the documentation on odbc_binmode and odbc_longreadlen for an explanation\r\n; of odbc.defaultlrl and odbc.defaultbinmode\r\n; http://php.net/odbc.defaultbinmode\r\nodbc.defaultbinmode = 1\r\n\r\n;birdstep.max_links = -1\r\n\r\n[Interbase]\r\n; Allow or prevent persistent links.\r\nibase.allow_persistent = 1\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\nibase.max_persistent = -1\r\n\r\n; Maximum number of links (persistent + non-persistent).  -1 means no limit.\r\nibase.max_links = -1\r\n\r\n; Default database name for ibase_connect().\r\n;ibase.default_db =\r\n\r\n; Default username for ibase_connect().\r\n;ibase.default_user =\r\n\r\n; Default password for ibase_connect().\r\n;ibase.default_password =\r\n\r\n; Default charset for ibase_connect().\r\n;ibase.default_charset =\r\n\r\n; Default timestamp format.\r\nibase.timestampformat = \"%Y-%m-%d %H:%M:%S\"\r\n\r\n; Default date format.\r\nibase.dateformat = \"%Y-%m-%d\"\r\n\r\n; Default time format.\r\nibase.timeformat = \"%H:%M:%S\"\r\n\r\n[MySQL]\r\n; Allow accessing, from PHP's perspective, local files with LOAD DATA statements\r\n; http://php.net/mysql.allow_local_infile\r\nmysql.allow_local_infile = On\r\n\r\n; Allow or prevent persistent links.\r\n; http://php.net/mysql.allow-persistent\r\nmysql.allow_persistent = On\r\n\r\n; If mysqlnd is used: Number of cache slots for the internal result set cache\r\n; http://php.net/mysql.cache_size\r\nmysql.cache_size = 2000\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\n; http://php.net/mysql.max-persistent\r\nmysql.max_persistent = -1\r\n\r\n; Maximum number of links (persistent + non-persistent).  -1 means no limit.\r\n; http://php.net/mysql.max-links\r\nmysql.max_links = -1\r\n\r\n; Default port number for mysql_connect().  If unset, mysql_connect() will use\r\n; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the\r\n; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look\r\n; at MYSQL_PORT.\r\n; http://php.net/mysql.default-port\r\nmysql.default_port =\r\n\r\n; Default socket name for local MySQL connects.  If empty, uses the built-in\r\n; MySQL defaults.\r\n; http://php.net/mysql.default-socket\r\nmysql.default_socket =\r\n\r\n; Default host for mysql_connect() (doesn't apply in safe mode).\r\n; http://php.net/mysql.default-host\r\nmysql.default_host =\r\n\r\n; Default user for mysql_connect() (doesn't apply in safe mode).\r\n; http://php.net/mysql.default-user\r\nmysql.default_user =\r\n\r\n; Default password for mysql_connect() (doesn't apply in safe mode).\r\n; Note that this is generally a *bad* idea to store passwords in this file.\r\n; *Any* user with PHP access can run 'echo get_cfg_var(\"mysql.default_password\")\r\n; and reveal this password!  And of course, any users with read access to this\r\n; file will be able to reveal the password as well.\r\n; http://php.net/mysql.default-password\r\nmysql.default_password =\r\n\r\n; Maximum time (in seconds) for connect timeout. -1 means no limit\r\n; http://php.net/mysql.connect-timeout\r\nmysql.connect_timeout = 60\r\n\r\n; Trace mode. When trace_mode is active (=On), warnings for table/index scans and\r\n; SQL-Errors will be displayed.\r\n; http://php.net/mysql.trace-mode\r\nmysql.trace_mode = Off\r\n\r\n[MySQLi]\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\n; http://php.net/mysqli.max-persistent\r\nmysqli.max_persistent = -1\r\n\r\n; Maximum number of links.  -1 means no limit.\r\n; http://php.net/mysqli.max-links\r\nmysqli.max_links = -1\r\n\r\n; If mysqlnd is used: Number of cache slots for the internal result set cache\r\n; http://php.net/mysqli.cache_size\r\nmysqli.cache_size = 2000\r\n\r\n; Default port number for mysqli_connect().  If unset, mysqli_connect() will use\r\n; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the\r\n; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look\r\n; at MYSQL_PORT.\r\n; http://php.net/mysqli.default-port\r\nmysqli.default_port = 3306\r\n\r\n; Default socket name for local MySQL connects.  If empty, uses the built-in\r\n; MySQL defaults.\r\n; http://php.net/mysqli.default-socket\r\nmysqli.default_socket =\r\n\r\n; Default host for mysql_connect() (doesn't apply in safe mode).\r\n; http://php.net/mysqli.default-host\r\nmysqli.default_host =\r\n\r\n; Default user for mysql_connect() (doesn't apply in safe mode).\r\n; http://php.net/mysqli.default-user\r\nmysqli.default_user =\r\n\r\n; Default password for mysqli_connect() (doesn't apply in safe mode).\r\n; Note that this is generally a *bad* idea to store passwords in this file.\r\n; *Any* user with PHP access can run 'echo get_cfg_var(\"mysqli.default_pw\")\r\n; and reveal this password!  And of course, any users with read access to this\r\n; file will be able to reveal the password as well.\r\n; http://php.net/mysqli.default-pw\r\nmysqli.default_pw =\r\n\r\n; Allow or prevent reconnect\r\nmysqli.reconnect = Off\r\n\r\n[mysqlnd]\r\n; Enable / Disable collection of general statstics by mysqlnd which can be\r\n; used to tune and monitor MySQL operations.\r\n; http://php.net/mysqlnd.collect_statistics\r\nmysqlnd.collect_statistics = On\r\n\r\n; Enable / Disable collection of memory usage statstics by mysqlnd which can be\r\n; used to tune and monitor MySQL operations.\r\n; http://php.net/mysqlnd.collect_memory_statistics\r\nmysqlnd.collect_memory_statistics = On\r\n\r\n; Size of a pre-allocated buffer used when sending commands to MySQL in bytes.\r\n; http://php.net/mysqlnd.net_cmd_buffer_size\r\n;mysqlnd.net_cmd_buffer_size = 2048\r\n\r\n; Size of a pre-allocated buffer used for reading data sent by the server in\r\n; bytes.\r\n; http://php.net/mysqlnd.net_read_buffer_size\r\n;mysqlnd.net_read_buffer_size = 32768\r\n\r\n[OCI8]\r\n\r\n; Connection: Enables privileged connections using external\r\n; credentials (OCI_SYSOPER, OCI_SYSDBA)\r\n; http://php.net/oci8.privileged-connect\r\n;oci8.privileged_connect = Off\r\n\r\n; Connection: The maximum number of persistent OCI8 connections per\r\n; process. Using -1 means no limit.\r\n; http://php.net/oci8.max-persistent\r\n;oci8.max_persistent = -1\r\n\r\n; Connection: The maximum number of seconds a process is allowed to\r\n; maintain an idle persistent connection. Using -1 means idle\r\n; persistent connections will be maintained forever.\r\n; http://php.net/oci8.persistent-timeout\r\n;oci8.persistent_timeout = -1\r\n\r\n; Connection: The number of seconds that must pass before issuing a\r\n; ping during oci_pconnect() to check the connection validity. When\r\n; set to 0, each oci_pconnect() will cause a ping. Using -1 disables\r\n; pings completely.\r\n; http://php.net/oci8.ping-interval\r\n;oci8.ping_interval = 60\r\n\r\n; Connection: Set this to a user chosen connection class to be used\r\n; for all pooled server requests with Oracle 11g Database Resident\r\n; Connection Pooling (DRCP).  To use DRCP, this value should be set to\r\n; the same string for all web servers running the same application,\r\n; the database pool must be configured, and the connection string must\r\n; specify to use a pooled server.\r\n;oci8.connection_class =\r\n\r\n; High Availability: Using On lets PHP receive Fast Application\r\n; Notification (FAN) events generated when a database node fails. The\r\n; database must also be configured to post FAN events.\r\n;oci8.events = Off\r\n\r\n; Tuning: This option enables statement caching, and specifies how\r\n; many statements to cache. Using 0 disables statement caching.\r\n; http://php.net/oci8.statement-cache-size\r\n;oci8.statement_cache_size = 20\r\n\r\n; Tuning: Enables statement prefetching and sets the default number of\r\n; rows that will be fetched automatically after statement execution.\r\n; http://php.net/oci8.default-prefetch\r\n;oci8.default_prefetch = 100\r\n\r\n; Compatibility. Using On means oci_close() will not close\r\n; oci_connect() and oci_new_connect() connections.\r\n; http://php.net/oci8.old-oci-close-semantics\r\n;oci8.old_oci_close_semantics = Off\r\n\r\n[PostgresSQL]\r\n; Allow or prevent persistent links.\r\n; http://php.net/pgsql.allow-persistent\r\npgsql.allow_persistent = On\r\n\r\n; Detect broken persistent links always with pg_pconnect().\r\n; Auto reset feature requires a little overheads.\r\n; http://php.net/pgsql.auto-reset-persistent\r\npgsql.auto_reset_persistent = Off\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\n; http://php.net/pgsql.max-persistent\r\npgsql.max_persistent = -1\r\n\r\n; Maximum number of links (persistent+non persistent).  -1 means no limit.\r\n; http://php.net/pgsql.max-links\r\npgsql.max_links = -1\r\n\r\n; Ignore PostgreSQL backends Notice message or not.\r\n; Notice message logging require a little overheads.\r\n; http://php.net/pgsql.ignore-notice\r\npgsql.ignore_notice = 0\r\n\r\n; Log PostgreSQL backends Noitce message or not.\r\n; Unless pgsql.ignore_notice=0, module cannot log notice message.\r\n; http://php.net/pgsql.log-notice\r\npgsql.log_notice = 0\r\n\r\n[Sybase-CT]\r\n; Allow or prevent persistent links.\r\n; http://php.net/sybct.allow-persistent\r\nsybct.allow_persistent = On\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\n; http://php.net/sybct.max-persistent\r\nsybct.max_persistent = -1\r\n\r\n; Maximum number of links (persistent + non-persistent).  -1 means no limit.\r\n; http://php.net/sybct.max-links\r\nsybct.max_links = -1\r\n\r\n; Minimum server message severity to display.\r\n; http://php.net/sybct.min-server-severity\r\nsybct.min_server_severity = 10\r\n\r\n; Minimum client message severity to display.\r\n; http://php.net/sybct.min-client-severity\r\nsybct.min_client_severity = 10\r\n\r\n; Set per-context timeout\r\n; http://php.net/sybct.timeout\r\n;sybct.timeout=\r\n\r\n;sybct.packet_size\r\n\r\n; The maximum time in seconds to wait for a connection attempt to succeed before returning failure.\r\n; Default: one minute\r\n;sybct.login_timeout=\r\n\r\n; The name of the host you claim to be connecting from, for display by sp_who.\r\n; Default: none\r\n;sybct.hostname=\r\n\r\n; Allows you to define how often deadlocks are to be retried. -1 means \"forever\".\r\n; Default: 0\r\n;sybct.deadlock_retry_count=\r\n\r\n[bcmath]\r\n; Number of decimal digits for all bcmath functions.\r\n; http://php.net/bcmath.scale\r\nbcmath.scale = 0\r\n\r\n[browscap]\r\n; http://php.net/browscap\r\n;browscap = extra/browscap.ini\r\n\r\n[Session]\r\n; Handler used to store/retrieve data.\r\n; http://php.net/session.save-handler\r\nsession.save_handler = files\r\n\r\n; Argument passed to save_handler.  In the case of files, this is the path\r\n; where data files are stored. Note: Windows users have to change this\r\n; variable in order to use PHP's session functions.\r\n;\r\n; The path can be defined as:\r\n;\r\n;     session.save_path = \"N;/path\"\r\n;\r\n; where N is an integer.  Instead of storing all the session files in\r\n; /path, what this will do is use subdirectories N-levels deep, and\r\n; store the session data in those directories.  This is useful if you\r\n; or your OS have problems with lots of files in one directory, and is\r\n; a more efficient layout for servers that handle lots of sessions.\r\n;\r\n; NOTE 1: PHP will not create this directory structure automatically.\r\n;         You can use the script in the ext/session dir for that purpose.\r\n; NOTE 2: See the section on garbage collection below if you choose to\r\n;         use subdirectories for session storage\r\n;\r\n; The file storage module creates files using mode 600 by default.\r\n; You can change that by using\r\n;\r\n;     session.save_path = \"N;MODE;/path\"\r\n;\r\n; where MODE is the octal representation of the mode. Note that this\r\n; does not overwrite the process's umask.\r\n; http://php.net/session.save-path\r\n;session.save_path = \"/tmp\"\r\n\r\n; Whether to use cookies.\r\n; http://php.net/session.use-cookies\r\nsession.use_cookies = 1\r\n\r\n; http://php.net/session.cookie-secure\r\n;session.cookie_secure =\r\n\r\n; This option forces PHP to fetch and use a cookie for storing and maintaining\r\n; the session id. We encourage this operation as it's very helpful in combatting\r\n; session hijacking when not specifying and managing your own session id. It is\r\n; not the end all be all of session hijacking defense, but it's a good start.\r\n; http://php.net/session.use-only-cookies\r\nsession.use_only_cookies = 1\r\n\r\n; Name of the session (used as cookie name).\r\n; http://php.net/session.name\r\nsession.name = PHPSESSID\r\n\r\n; Initialize session on request startup.\r\n; http://php.net/session.auto-start\r\nsession.auto_start = 0\r\n\r\n; Lifetime in seconds of cookie or, if 0, until browser is restarted.\r\n; http://php.net/session.cookie-lifetime\r\nsession.cookie_lifetime = 0\r\n\r\n; The path for which the cookie is valid.\r\n; http://php.net/session.cookie-path\r\nsession.cookie_path = /\r\n\r\n; The domain for which the cookie is valid.\r\n; http://php.net/session.cookie-domain\r\nsession.cookie_domain =\r\n\r\n; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.\r\n; http://php.net/session.cookie-httponly\r\nsession.cookie_httponly =\r\n\r\n; Handler used to serialize data.  php is the standard serializer of PHP.\r\n; http://php.net/session.serialize-handler\r\nsession.serialize_handler = php\r\n\r\n; Defines the probability that the 'garbage collection' process is started\r\n; on every session initialization. The probability is calculated by using\r\n; gc_probability/gc_divisor. Where session.gc_probability is the numerator\r\n; and gc_divisor is the denominator in the equation. Setting this value to 1\r\n; when the session.gc_divisor value is 100 will give you approximately a 1% chance\r\n; the gc will run on any give request.\r\n; Default Value: 1\r\n; Development Value: 1\r\n; Production Value: 1\r\n; http://php.net/session.gc-probability\r\nsession.gc_probability = 1\r\n\r\n; Defines the probability that the 'garbage collection' process is started on every\r\n; session initialization. The probability is calculated by using the following equation:\r\n; gc_probability/gc_divisor. Where session.gc_probability is the numerator and\r\n; session.gc_divisor is the denominator in the equation. Setting this value to 1\r\n; when the session.gc_divisor value is 100 will give you approximately a 1% chance\r\n; the gc will run on any give request. Increasing this value to 1000 will give you\r\n; a 0.1% chance the gc will run on any give request. For high volume production servers,\r\n; this is a more efficient approach.\r\n; Default Value: 100\r\n; Development Value: 1000\r\n; Production Value: 1000\r\n; http://php.net/session.gc-divisor\r\nsession.gc_divisor = 1000\r\n\r\n; After this number of seconds, stored data will be seen as 'garbage' and\r\n; cleaned up by the garbage collection process.\r\n; http://php.net/session.gc-maxlifetime\r\nsession.gc_maxlifetime = 1440\r\n\r\n; NOTE: If you are using the subdirectory option for storing session files\r\n;       (see session.save_path above), then garbage collection does *not*\r\n;       happen automatically.  You will need to do your own garbage\r\n;       collection through a shell script, cron entry, or some other method.\r\n;       For example, the following script would is the equivalent of\r\n;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):\r\n;          cd /path/to/sessions; find -cmin +24 | xargs rm\r\n\r\n; PHP 4.2 and less have an undocumented feature/bug that allows you to\r\n; to initialize a session variable in the global scope, even when register_globals\r\n; is disabled.  PHP 4.3 and later will warn you, if this feature is used.\r\n; You can disable the feature and the warning separately. At this time,\r\n; the warning is only displayed, if bug_compat_42 is enabled. This feature\r\n; introduces some serious security problems if not handled correctly. It's\r\n; recommended that you do not use this feature on production servers. But you\r\n; should enable this on development servers and enable the warning as well. If you\r\n; do not enable the feature on development servers, you won't be warned when it's\r\n; used and debugging errors caused by this can be difficult to track down.\r\n; Default Value: On\r\n; Development Value: On\r\n; Production Value: Off\r\n; http://php.net/session.bug-compat-42\r\nsession.bug_compat_42 = On\r\n\r\n; This setting controls whether or not you are warned by PHP when initializing a\r\n; session value into the global space. session.bug_compat_42 must be enabled before\r\n; these warnings can be issued by PHP. See the directive above for more information.\r\n; Default Value: On\r\n; Development Value: On\r\n; Production Value: Off\r\n; http://php.net/session.bug-compat-warn\r\nsession.bug_compat_warn = On\r\n\r\n; Check HTTP Referer to invalidate externally stored URLs containing ids.\r\n; HTTP_REFERER has to contain this substring for the session to be\r\n; considered as valid.\r\n; http://php.net/session.referer-check\r\nsession.referer_check =\r\n\r\n; How many bytes to read from the file.\r\n; http://php.net/session.entropy-length\r\nsession.entropy_length = 0\r\n\r\n; Specified here to create the session id.\r\n; http://php.net/session.entropy-file\r\n;session.entropy_file = /dev/urandom\r\nsession.entropy_file =\r\n\r\n; http://php.net/session.entropy-length\r\n;session.entropy_length = 16\r\n\r\n; Set to {nocache,private,public,} to determine HTTP caching aspects\r\n; or leave this empty to avoid sending anti-caching headers.\r\n; http://php.net/session.cache-limiter\r\nsession.cache_limiter = nocache\r\n\r\n; Document expires after n minutes.\r\n; http://php.net/session.cache-expire\r\nsession.cache_expire = 180\r\n\r\n; trans sid support is disabled by default.\r\n; Use of trans sid may risk your users security.\r\n; Use this option with caution.\r\n; - User may send URL contains active session ID\r\n;   to other person via. email/irc/etc.\r\n; - URL that contains active session ID may be stored\r\n;   in publically accessible computer.\r\n; - User may access your site with the same session ID\r\n;   always using URL stored in browser's history or bookmarks.\r\n; http://php.net/session.use-trans-sid\r\nsession.use_trans_sid = 0\r\n\r\n; Select a hash function for use in generating session ids.\r\n; Possible Values\r\n;   0  (MD5 128 bits)\r\n;   1  (SHA-1 160 bits)\r\n; This option may also be set to the name of any hash function supported by\r\n; the hash extension. A list of available hashes is returned by the hash_alogs()\r\n; function.\r\n; http://php.net/session.hash-function\r\nsession.hash_function = 0\r\n\r\n; Define how many bits are stored in each character when converting\r\n; the binary hash data to something readable.\r\n; Possible values:\r\n;   4  (4 bits: 0-9, a-f)\r\n;   5  (5 bits: 0-9, a-v)\r\n;   6  (6 bits: 0-9, a-z, A-Z, \"-\", \",\")\r\n; Default Value: 4\r\n; Development Value: 5\r\n; Production Value: 5\r\n; http://php.net/session.hash-bits-per-character\r\nsession.hash_bits_per_character = 5\r\n\r\n; The URL rewriter will look for URLs in a defined set of HTML tags.\r\n; form/fieldset are special; if you include them here, the rewriter will\r\n; add a hidden <input> field with the info which is otherwise appended\r\n; to URLs.  If you want XHTML conformity, remove the form entry.\r\n; Note that all valid entries require a \"=\", even if no value follows.\r\n; Default Value: \"a=href,area=href,frame=src,form=,fieldset=\"\r\n; Development Value: \"a=href,area=href,frame=src,input=src,form=fakeentry\"\r\n; Production Value: \"a=href,area=href,frame=src,input=src,form=fakeentry\"\r\n; http://php.net/url-rewriter.tags\r\nurl_rewriter.tags = \"a=href,area=href,frame=src,input=src,form=fakeentry\"\r\n\r\n[MSSQL]\r\n; Allow or prevent persistent links.\r\nmssql.allow_persistent = On\r\n\r\n; Maximum number of persistent links.  -1 means no limit.\r\nmssql.max_persistent = -1\r\n\r\n; Maximum number of links (persistent+non persistent).  -1 means no limit.\r\nmssql.max_links = -1\r\n\r\n; Minimum error severity to display.\r\nmssql.min_error_severity = 10\r\n\r\n; Minimum message severity to display.\r\nmssql.min_message_severity = 10\r\n\r\n; Compatibility mode with old versions of PHP 3.0.\r\nmssql.compatability_mode = Off\r\n\r\n; Connect timeout\r\n;mssql.connect_timeout = 5\r\n\r\n; Query timeout\r\n;mssql.timeout = 60\r\n\r\n; Valid range 0 - 2147483647.  Default = 4096.\r\n;mssql.textlimit = 4096\r\n\r\n; Valid range 0 - 2147483647.  Default = 4096.\r\n;mssql.textsize = 4096\r\n\r\n; Limits the number of records in each batch.  0 = all records in one batch.\r\n;mssql.batchsize = 0\r\n\r\n; Specify how datetime and datetim4 columns are returned\r\n; On => Returns data converted to SQL server settings\r\n; Off => Returns values as YYYY-MM-DD hh:mm:ss\r\n;mssql.datetimeconvert = On\r\n\r\n; Use NT authentication when connecting to the server\r\nmssql.secure_connection = Off\r\n\r\n; Specify max number of processes. -1 = library default\r\n; msdlib defaults to 25\r\n; FreeTDS defaults to 4096\r\n;mssql.max_procs = -1\r\n\r\n; Specify client character set.\r\n; If empty or not set the client charset from freetds.comf is used\r\n; This is only used when compiled with FreeTDS\r\n;mssql.charset = \"ISO-8859-1\"\r\n\r\n[Assertion]\r\n; Assert(expr); active by default.\r\n; http://php.net/assert.active\r\n;assert.active = On\r\n\r\n; Issue a PHP warning for each failed assertion.\r\n; http://php.net/assert.warning\r\n;assert.warning = On\r\n\r\n; Don't bail out by default.\r\n; http://php.net/assert.bail\r\n;assert.bail = Off\r\n\r\n; User-function to be called if an assertion fails.\r\n; http://php.net/assert.callback\r\n;assert.callback = 0\r\n\r\n; Eval the expression with current error_reporting().  Set to true if you want\r\n; error_reporting(0) around the eval().\r\n; http://php.net/assert.quiet-eval\r\n;assert.quiet_eval = 0\r\n\r\n[COM]\r\n; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs\r\n; http://php.net/com.typelib-file\r\n;com.typelib_file =\r\n\r\n; allow Distributed-COM calls\r\n; http://php.net/com.allow-dcom\r\n;com.allow_dcom = true\r\n\r\n; autoregister constants of a components typlib on com_load()\r\n; http://php.net/com.autoregister-typelib\r\n;com.autoregister_typelib = true\r\n\r\n; register constants casesensitive\r\n; http://php.net/com.autoregister-casesensitive\r\n;com.autoregister_casesensitive = false\r\n\r\n; show warnings on duplicate constant registrations\r\n; http://php.net/com.autoregister-verbose\r\n;com.autoregister_verbose = true\r\n\r\n; The default character set code-page to use when passing strings to and from COM objects.\r\n; Default: system ANSI code page\r\n;com.code_page=\r\n\r\n[mbstring]\r\n; language for internal character representation.\r\n; http://php.net/mbstring.language\r\n;mbstring.language = Japanese\r\n\r\n; internal/script encoding.\r\n; Some encoding cannot work as internal encoding.\r\n; (e.g. SJIS, BIG5, ISO-2022-*)\r\n; http://php.net/mbstring.internal-encoding\r\n;mbstring.internal_encoding = EUC-JP\r\n\r\n; http input encoding.\r\n; http://php.net/mbstring.http-input\r\n;mbstring.http_input = auto\r\n\r\n; http output encoding. mb_output_handler must be\r\n; registered as output buffer to function\r\n; http://php.net/mbstring.http-output\r\n;mbstring.http_output = SJIS\r\n\r\n; enable automatic encoding translation according to\r\n; mbstring.internal_encoding setting. Input chars are\r\n; converted to internal encoding by setting this to On.\r\n; Note: Do _not_ use automatic encoding translation for\r\n;       portable libs/applications.\r\n; http://php.net/mbstring.encoding-translation\r\n;mbstring.encoding_translation = Off\r\n\r\n; automatic encoding detection order.\r\n; auto means\r\n; http://php.net/mbstring.detect-order\r\n;mbstring.detect_order = auto\r\n\r\n; substitute_character used when character cannot be converted\r\n; one from another\r\n; http://php.net/mbstring.substitute-character\r\n;mbstring.substitute_character = none;\r\n\r\n; overload(replace) single byte functions by mbstring functions.\r\n; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),\r\n; etc. Possible values are 0,1,2,4 or combination of them.\r\n; For example, 7 for overload everything.\r\n; 0: No overload\r\n; 1: Overload mail() function\r\n; 2: Overload str*() functions\r\n; 4: Overload ereg*() functions\r\n; http://php.net/mbstring.func-overload\r\n;mbstring.func_overload = 0\r\n\r\n; enable strict encoding detection.\r\n;mbstring.strict_detection = Off\r\n\r\n; This directive specifies the regex pattern of content types for which mb_output_handler()\r\n; is activated.\r\n; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\\+xml)\r\n;mbstring.http_output_conv_mimetype=\r\n\r\n; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte\r\n; Default: \"\"\r\n;mbstring.script_encoding=\r\n\r\n[gd]\r\n; Tell the jpeg decode to ignore warnings and try to create\r\n; a gd image. The warning will then be displayed as notices\r\n; disabled by default\r\n; http://php.net/gd.jpeg-ignore-warning\r\n;gd.jpeg_ignore_warning = 0\r\n\r\n[exif]\r\n; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.\r\n; With mbstring support this will automatically be converted into the encoding\r\n; given by corresponding encode setting. When empty mbstring.internal_encoding\r\n; is used. For the decode settings you can distinguish between motorola and\r\n; intel byte order. A decode setting cannot be empty.\r\n; http://php.net/exif.encode-unicode\r\n;exif.encode_unicode = ISO-8859-15\r\n\r\n; http://php.net/exif.decode-unicode-motorola\r\n;exif.decode_unicode_motorola = UCS-2BE\r\n\r\n; http://php.net/exif.decode-unicode-intel\r\n;exif.decode_unicode_intel    = UCS-2LE\r\n\r\n; http://php.net/exif.encode-jis\r\n;exif.encode_jis =\r\n\r\n; http://php.net/exif.decode-jis-motorola\r\n;exif.decode_jis_motorola = JIS\r\n\r\n; http://php.net/exif.decode-jis-intel\r\n;exif.decode_jis_intel    = JIS\r\n\r\n[Tidy]\r\n; The path to a default tidy configuration file to use when using tidy\r\n; http://php.net/tidy.default-config\r\n;tidy.default_config = /usr/local/lib/php/default.tcfg\r\n\r\n; Should tidy clean and repair output automatically?\r\n; WARNING: Do not use this option if you are generating non-html content\r\n; such as dynamic images\r\n; http://php.net/tidy.clean-output\r\ntidy.clean_output = Off\r\n\r\n[soap]\r\n; Enables or disables WSDL caching feature.\r\n; http://php.net/soap.wsdl-cache-enabled\r\nsoap.wsdl_cache_enabled=1\r\n\r\n; Sets the directory name where SOAP extension will put cache files.\r\n; http://php.net/soap.wsdl-cache-dir\r\nsoap.wsdl_cache_dir=\"/tmp\"\r\n\r\n; (time to live) Sets the number of second while cached file will be used\r\n; instead of original one.\r\n; http://php.net/soap.wsdl-cache-ttl\r\nsoap.wsdl_cache_ttl=86400\r\n\r\n; Sets the size of the cache limit. (Max. number of WSDL files to cache)\r\nsoap.wsdl_cache_limit = 5\r\n\r\n[sysvshm]\r\n; A default size of the shared memory segment\r\n;sysvshm.init_mem = 10000\r\n\r\n[ldap]\r\n; Sets the maximum number of open links or -1 for unlimited.\r\nldap.max_links = -1\r\n\r\n[mcrypt]\r\n; For more information about mcrypt settings see http://php.net/mcrypt-module-open\r\n\r\n; Directory where to load mcrypt algorithms\r\n; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)\r\n;mcrypt.algorithms_dir=\r\n\r\n; Directory where to load mcrypt modes\r\n; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)\r\n;mcrypt.modes_dir=\r\n\r\n[dba]\r\n;dba.default_handler=\r\n\r\n; Local Variables:\r\n; tab-width: 4\r\n; End:\r\n"
  },
  {
    "path": "Tools/PhpNetTester/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\t\t\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Tools/PhpNetTester/Exceptions.cs",
    "content": "using System;\r\n\r\nnamespace PHP.Testing\r\n{\r\n\tpublic class TestException : Exception\r\n\t{\r\n\t\tpublic TestException(string message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n\tpublic class InvalidArgumentException : Exception\r\n\t{\r\n\t\tpublic InvalidArgumentException(string message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n\r\n}"
  },
  {
    "path": "Tools/PhpNetTester/Main.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Diagnostics;\r\n\r\nnamespace PHP.Testing\r\n{\r\n\t/// <summary>\r\n\t/// Summary description for Class1.\r\n\t/// </summary>\r\n\tclass PhpNetTester\r\n\t{\r\n\t\tprivate static TestsCollection testsCollection;\r\n        private static readonly List<string> testDirsAndFiles = new List<string>();\r\n\t\tprivate static string outputDir;\r\n\t\tprivate static string compiler;\r\n\t\tprivate static string loader;\r\n\t\tprivate static string php;\r\n\t\tprivate static bool fullLog = false;\r\n\t\tprivate static bool verbose = false;\r\n\t\tprivate static bool clean = false;\r\n\t\tprivate static bool compileOnly = false;\r\n\t\tprivate static bool benchmarks = false;\r\n\t\tprivate static int numberOfBenchmarkRuns = 1;\r\n        private static int maxThreads = 1;\r\n        private static TestsCollection.ConcurrencyLevel concurrencyLevel = TestsCollection.ConcurrencyLevel.SkipIf;\r\n\r\n\t\tpublic static int BenchmarkWarmup { get { return benchmarkWarmup; } }\r\n\t\tprivate static int benchmarkWarmup = 1;\r\n\r\n\t\t#region Command Line\r\n\r\n\t\tprivate static void ShowHelp()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Usage:\");\r\n\t\t\tConsole.WriteLine(\"  /compiler:<absolute or relative path to Phalanger (phpc.exe)>\");\r\n\t\t\tConsole.WriteLine(\"                - set to phpc.exe in current directory if not specified\");\r\n\t\t\tConsole.WriteLine(\"  /php:<absolute or relative path to PHP executable file>\");\r\n\t\t\tConsole.WriteLine(\"                - set to php.exe in current directory if not specified\");\r\n\t\t\tConsole.WriteLine(\"  /loader:<absolute or relative path to a .NET executable loader>\");\r\n\t\t\tConsole.WriteLine(\"                - useful for testing on Mono (loader = mono.exe)\");\r\n\t\t\tConsole.WriteLine(\"                - .NET executables are run directly if the option is not specified\");\r\n\t\t\tConsole.WriteLine(\"  /log:full|short\");\r\n\t\t\tConsole.WriteLine(\"                - default is short\");\r\n\t\t\tConsole.WriteLine(\"  /out:<absolute or relative path to directory where should be log created>\");\r\n\t\t\tConsole.WriteLine(\"                - default is current directory\");\r\n\t\t\tConsole.WriteLine(\"  /verbose      - writes much more information to console while testing\");\r\n\t\t\tConsole.WriteLine(\"  /clean        - deletes all files created during the test\");\r\n\t\t\tConsole.WriteLine(\"  /compileonly  - test only compilation, do not run compiled scripts\");\r\n            Console.WriteLine(\"  /benchmark:<runs>[/<warmup>] - run benchmarks\");\r\n            Console.WriteLine(\"  /j[:max-threads] - execute in parallel (may affect benchmarks)\");\r\n            Console.WriteLine(\"  /p:<none|folder|compile|skipif|full> - concurrency level:\");\r\n            Console.WriteLine(\"      none - Everything sequential. Disables /j option.\");\r\n            Console.WriteLine(\"      folder - Tests in separate folders executed concurrently.\");\r\n            Console.WriteLine(\"      compile - Only compiled concurrently in same folder.\");\r\n            Console.WriteLine(\"      skipif - SkipIf tests executed concurrently in same folder.\");\r\n            Console.WriteLine(\"      full - All possible operations done concurrently.\");\r\n            Console.WriteLine(\"  arguments <absolute or relative directory paths where are directories to test>\");\r\n\t\t\tConsole.WriteLine(\"         or <absolute or relative paths to test files>\");\r\n\t\t\tConsole.WriteLine(\"                - current directory if no argument is specified\");\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Processes command line arguments.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"args\">The command line arguments.</param>\r\n\t\t/// <returns>Whether to run compilation.</returns>\r\n\t\tprivate static bool ProcessArguments(string[] args)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tDebug.Assert(args[i].Length > 0);\r\n\r\n\t\t\t\t// option:\r\n\t\t\t\tif (args[i][0] == '/')\r\n\t\t\t\t{\r\n\t\t\t\t\tint colon = args[i].IndexOf(':');\r\n\r\n\t\t\t\t\tif (colon >= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// option having format \"/name:value\"\r\n\t\t\t\t\t\tstring name = args[i].Substring(1, colon - 1).Trim();\r\n\t\t\t\t\t\tstring value = args[i].Substring(colon + 1).Trim();\r\n\r\n\t\t\t\t\t\tswitch (name)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase \"compiler\":\r\n\t\t\t\t\t\t\tif (compiler != null)\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Option {0} specified twice.\", name));\r\n\t\t\t\t\t\t\tcompiler = Path.GetFullPath(value);\r\n\t\t\t\t\t\t\tif (!File.Exists(compiler))\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Compiler {0} not found.\", compiler));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"loader\":\r\n\t\t\t\t\t\t\tif (loader != null)\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Option {0} specified twice.\", name));\r\n\t\t\t\t\t\t\tloader = Path.GetFullPath(value);\r\n\t\t\t\t\t\t\tif (!File.Exists(loader))\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Compiler {0} not found.\", loader));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"out\":\r\n\t\t\t\t\t\t\tif (outputDir != null)\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Option {0} specified twice.\", name));\r\n\t\t\t\t\t\t\toutputDir = Path.GetFullPath(value);\r\n\t\t\t\t\t\t\tif (!Directory.Exists(outputDir))\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Output directory {0} not found.\", outputDir));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"php\":\r\n\t\t\t\t\t\t\tif (php != null)\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Option {0} specified twice.\", name));\r\n\t\t\t\t\t\t\tphp = Path.GetFullPath(value);\r\n\t\t\t\t\t\t\tif (!File.Exists(php))\r\n\t\t\t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"PHP (original) executable file {0} not found.\", php));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"log\":\r\n\t\t\t\t\t\t\t    if (value == \"full\")\r\n\t\t\t\t\t\t\t\t    fullLog = true;\r\n\t\t\t\t\t\t\t    else if (value == \"short\")\r\n\t\t\t\t\t\t\t\t    fullLog = false;\r\n\t\t\t\t\t\t\t    else\r\n\t\t\t\t\t\t\t\t    throw new InvalidArgumentException(String.Format(\"Illegal /log:{0} option.\", value));\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"benchmark\":\r\n\t\t\t\t\t\t\tif (benchmarks)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t    throw new InvalidArgumentException(\"/benchmark option specified twice\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tbenchmarks = true;\r\n\t\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint slash = value.IndexOf('/');\r\n\t\t\t\t\t\t\t\tif (slash < 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tnumberOfBenchmarkRuns = Int32.Parse(value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tnumberOfBenchmarkRuns = Int32.Parse(value.Substring(0, slash));\r\n\t\t\t\t\t\t\t\t\tbenchmarkWarmup = Int32.Parse(value.Substring(slash + 1));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcatch (Exception)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow new TestException(\"Error /benchmark value.\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n                            case \"j\":\r\n                                maxThreads = Math.Max(Int32.Parse(value), 1);\r\n                            break;\r\n\r\n                            case \"p\":\r\n                                switch (value)\r\n                                {\r\n                                    case \"none\":\r\n                                        maxThreads = 1;\r\n                                        concurrencyLevel = TestsCollection.ConcurrencyLevel.None;\r\n                                        break;\r\n                                    case \"folder\":\r\n                                        concurrencyLevel = TestsCollection.ConcurrencyLevel.Folder;\r\n                                        break;\r\n                                    case \"compile\":\r\n                                        concurrencyLevel = TestsCollection.ConcurrencyLevel.Compile;\r\n                                        break;\r\n                                    case \"skipif\":\r\n                                        concurrencyLevel = TestsCollection.ConcurrencyLevel.SkipIf;\r\n                                        break;\r\n                                    case \"full\":\r\n                                        concurrencyLevel = TestsCollection.ConcurrencyLevel.Full;\r\n                                        break;\r\n                                    default:\r\n                                        throw new InvalidArgumentException(\r\n                                            String.Format(\r\n                                                \"Invalid value for conncurrency-level [{0}] in option [{1}].\", value, name));\r\n                                }\r\n                                \r\n                            break;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t    throw new InvalidArgumentException(String.Format(\"Invalid option {0}.\", name));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\t// option without ':'\r\n\t\t\t\t\t\tstring name = args[i].Substring(1).Trim();\r\n                        switch (name)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase \"verbose\":\r\n\t\t\t\t\t\t\t    verbose = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"clean\":\r\n    \t\t\t\t\t\t\tclean = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"compileonly\":\r\n    \t\t\t\t\t\t\tcompileOnly = true;\r\n\t\t\t\t\t\t\tbreak;\r\n                            case \"j\":\r\n                                maxThreads = Environment.ProcessorCount;\r\n                            break;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t    \t\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"Invalid option {0}.\", args[i]));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{ // arguments\r\n\t\t\t\t\ttestDirsAndFiles.Add(args[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n            if (maxThreads <= 1)\r\n            {\r\n                concurrencyLevel = TestsCollection.ConcurrencyLevel.None;\r\n            }\r\n            else\r\n            if (concurrencyLevel == TestsCollection.ConcurrencyLevel.None)\r\n            {\r\n                maxThreads = 1;\r\n            }\r\n\r\n\t\t\t// default values\r\n\t\t\tif (testDirsAndFiles.Count == 0)\r\n\t\t\t{\r\n\t\t\t    testDirsAndFiles.Add(Directory.GetCurrentDirectory());\r\n\t\t\t}\r\n\r\n\t\t\tif (compiler == null)\r\n\t\t\t{\r\n\t\t\t    compiler = Path.Combine(Directory.GetCurrentDirectory(), \"phpc.exe\");\r\n\t\t\t}\r\n\r\n\t\t\tif (php == null)\r\n\t\t\t{\r\n\t\t\t    php = Path.Combine(Directory.GetCurrentDirectory(), \"php.exe\");\r\n\t\t\t}\r\n\r\n\t\t\tif (outputDir == null)\r\n\t\t\t{\r\n\t\t\t    outputDir = Directory.GetCurrentDirectory();\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic int Main(string[] args)\r\n\t\t{\r\n\t\t    var sw = Stopwatch.StartNew();\r\n\t\t\tbool testingStarted = false;\r\n\t\t\tConsole.WriteLine(\"Starting tests...\");\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tProcessArguments(args);\r\n\r\n\t\t\t\ttestsCollection = new TestsCollection(testDirsAndFiles, verbose, clean, compileOnly,\r\n\t\t\t\t\t                                  benchmarks, numberOfBenchmarkRuns, concurrencyLevel, maxThreads);\r\n\t\t\t\ttestsCollection.LoadTests();\r\n\r\n\t\t\t\ttestingStarted = true;\r\n\t\t\t\treturn testsCollection.RunTests(loader, compiler, php);\r\n\t\t\t}\r\n\t\t\tcatch (InvalidArgumentException e)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(e.Message);\r\n\t\t\t\tShowHelp();\r\n\t\t\t\tConsole.ReadLine();\r\n\t\t\t}\r\n\t\t\tcatch (TestException e)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Testing failed: \" + e.Message);\r\n\t\t\t\tConsole.ReadLine();\r\n\t\t\t}\r\n\t\t\tcatch (Exception e)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"Unexpected error: \");\r\n\t\t\t\tConsole.WriteLine(e.Message);\r\n\t\t\t\tConsole.ReadLine();\r\n\t\t\t}\r\n\t\t\tfinally\r\n\t\t\t{\r\n\t\t\t\tif (testingStarted)\r\n\t\t\t\t{\r\n\t\t\t\t    testsCollection.WriteLog(Path.Combine(outputDir, \"TestLog.htm\"), fullLog);\r\n\t\t            Console.WriteLine();\r\n                    Console.WriteLine(\"Done. \" + testsCollection.GetStatusMessage());\r\n                    Console.WriteLine(\"Time: \" + sw.Elapsed);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/PhpNetTester/PhpNetTester.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{A0551766-9A49-46FD-817E-EF3181AAB0F2}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>PhpNetTester</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>PhpNetTester</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>..\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Data\">\r\n      <Name>System.Data</Name>\r\n    </Reference>\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\">\r\n      <Name>System.XML</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Exceptions.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Main.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Test.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"TestsCollection.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Utils.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Tools/PhpNetTester/Test.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Web;\r\nusing System.Text;\r\nusing System.Diagnostics;\r\nusing System.Collections;\r\nusing System.Text.RegularExpressions;\r\nusing System.Linq;\r\n\r\nnamespace PHP.Testing\r\n{\r\n\tpublic enum TestResult\r\n\t{\r\n\t\tSuccees, CtError, Skipped,\r\n\t\tUnexpectedOutput, PhpcMisbehaviourScript, CannotCompileExpect, ScriptHangUp, ExpectHangUp, PhpcHangUp,\r\n\t\tPhpHangUp, PhpMisbehaviour, PhpNotFound, ExpectedWarningNotDisplayed\r\n\t}\r\n\r\n\tpublic enum Directive\r\n\t{\r\n\t\tNone, Expect, ExpectCtError, ExpectCtWarning, ExpectPhp, ExpectExact, File, Config, Comment,\r\n        SkipIf, NumberOfRuns, AdditionalScripts, Pure, Clr\r\n\t}\r\n\r\n\tpublic class Test\r\n\t{\r\n\t    private readonly Action<string> log;\r\n\t    private readonly string sourcePath;\r\n\t    private readonly string sourcePathRelative;\r\n        private List<string> script;\r\n        private List<string> comment;\r\n        private List<string> skipIf;\r\n\r\n\t\tprivate TestResult expectedTestResult = TestResult.Succees;\r\n        private List<List<string>> expect;\r\n        private List<string> expectExact;\r\n        private List<string> configuration;\r\n        private List<string> expectCtError;\r\n        private List<List<string>> expectCtWarning;\r\n        private List<string> additionalScripts;\r\n\r\n\t    private bool isPure;\r\n        private bool isClr;\r\n\r\n        public TestResult RealTestResult { get { return realTestResult; } }\r\n\t\tprivate TestResult realTestResult = TestResult.Skipped;\r\n\t\tprivate string compilerErrorOutput;\r\n\t\tprivate string compilerStdOutput;\r\n\t\tprivate string scriptOutput;\r\n\t\tprivate bool expectPhp = false;\r\n\t    private bool expectF = false;   // Loose validation.\r\n        private bool expectRegex = false;   // Loose validation.\r\n        private bool skipped = false;\r\n\r\n\t\tprivate string expectWhereFailed = null;\r\n\r\n\t\tprivate bool verbose;\r\n\t\tprivate bool clean;\r\n\t\tprivate bool compileOnly;\r\n\r\n\t\tprivate bool benchmarks;\r\n\t\tprivate double compilationTime = 0;\r\n\t\tprivate double runningTime = 0;\r\n\t\tprivate double phpTime = 0;\r\n\t\tprivate int numberOfRuns = 0;\r\n\r\n        private const string PHP_FILENAME_SUFIX = \"__tmp.phpscript\";\r\n\t    private const int TIMEOUT_MS = 30000;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates new test according to file specified.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"sourcePath\">Full path with source file to test.</param>\r\n\t\t/// <param name=\"verbose\"><c>True</c> if detail information should be printed to console.</param>\r\n\t\t/// <param name=\"clean\"><B>True</B>if created files should be deleted.</param>\r\n\t\t/// <param name=\"compileOnly\"><B>True</B> if only compilation should be performed.</param>\r\n\t\tpublic Test(string sourcePath, bool verbose, bool clean, bool compileOnly,\r\n\t\t\t        bool benchmarks, int defaultNumberOfRuns, Action<string> logger)\r\n\t\t{\r\n            this.sourcePath = Path.GetFullPath(sourcePath);\r\n            Uri currentDir = new Uri(Directory.GetCurrentDirectory() + \"\\\\\");\r\n            this.sourcePathRelative = currentDir.MakeRelativeUri(new Uri(this.sourcePath)).ToString();\r\n\r\n            this.verbose = verbose;\r\n\t\t\tthis.clean = clean;\r\n\t\t\tthis.compileOnly = compileOnly;\r\n            this.expect = new List<List<string>>();\r\n            this.expectCtWarning = new List<List<string>>();\r\n\t\t\tthis.benchmarks = benchmarks;\r\n\t\t\tthis.numberOfRuns = defaultNumberOfRuns;\r\n\t\t    this.log = logger ?? Console.WriteLine;\r\n\r\n\t\t    // overwrites numberOfRuns if there is specified\r\n\t\t\tReadFile();\r\n\r\n\t\t\tif (numberOfRuns < 1 || !benchmarks)\r\n\t\t\t{\r\n\t\t\t    numberOfRuns = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void ReadFile()\r\n\t\t{\r\n\t\t    var directive = Directive.None;\r\n\t\t\tvar block = new List<string>();\r\n\r\n\t\t\tusing (var sr = new StreamReader(sourcePath))\r\n\t\t\t{\r\n\t\t\t    string line;\r\n\t\t\t    while ((line = sr.ReadLine()) != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tDirective d;\r\n\t\t\t\t\tif ((d = StringToDirective(ref line)) != Directive.None)\r\n\t\t\t\t\t{\r\n                        // next directive\r\n\t\t\t\t\t\tif (block.Count > 0 || Utils.CanBeEmptyDirective(directive))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSaveBlock(block, directive);\r\n\t\t\t\t\t\t\tblock = new List<string>(); // reference is stored, we cannot just call Clear()\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdirective = d;\r\n\t\t\t\t\t\tif (line != null && line.Trim().Length > 0) // after directive is some text\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t    block.Add(line);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n                        // still current directive\r\n\t\t\t\t\t\tblock.Add(line);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// finish\r\n\t\t\t\tif (block.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t    SaveBlock(block, directive);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// check if we have all required test parts\r\n\t\t\tif (script == null)\r\n\t\t\t{\r\n\t\t\t    throw new TestException(String.Format(\"Test {0} has no [file] section\", this.sourcePath));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns <see cref=\"Directive\"/> that is at the beginning of <paramref name=\"str\"/> and in <c>str</c>\r\n\t\t/// leaves remaining characters.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"str\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate Directive StringToDirective(ref string str)\r\n\t\t{\r\n            // Skip the DONE directive of phpt.\r\n            if (MatchDirective(ref str, \"===done===\"))\r\n\t\t    {\r\n                return Directive.None;\r\n\t\t    }\r\n\r\n            if (MatchDirective(ref str, \"--expect--\", \"[expect]\"))\r\n            {\r\n\t\t\t\treturn Directive.Expect;\r\n\t\t\t}\r\n\r\n            // In phpt EXPECTF and EXPECTREGEX are used to allow looser validation.\r\n            if (MatchDirective(ref str, \"--expectf--\", \"[expectf]\"))\r\n            {\r\n                expectF = true;\r\n                return Directive.Expect;\r\n            }\r\n\r\n            // In phpt EXPECTF and EXPECTREGEX are used to allow looser validation.\r\n            if (MatchDirective(ref str, \"--expectregex--\", \"[expectregex]\"))\r\n            {\r\n                expectRegex = true;\r\n                return Directive.Expect;\r\n            }\r\n\r\n            if (MatchDirective(ref str, \"--expect ct-error--\", \"[expect ct-error]\", \"--expect errors--\", \"[expect errors]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.ExpectCtError;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--expect ct-warning--\", \"[expect ct-warning]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.ExpectCtWarning;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--file--\", \"[file]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.File;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--expect php--\", \"[expect php]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.ExpectPhp;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--expect exact--\", \"[expect exact]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.ExpectExact;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--config--\", \"[config]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.Config;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--comment--\", \"[comment]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.Comment;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--test--\", \"[test]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.Comment;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--skipif--\", \"[skipif]\"))\r\n            {\r\n                return Directive.SkipIf;\r\n            }\r\n\r\n            if (MatchDirective(ref str, \"--runs--\", \"[runs]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.NumberOfRuns;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"--additional scripts--\", \"[additional scripts]\"))\r\n\t\t\t{\r\n\t\t\t\treturn Directive.AdditionalScripts;\r\n\t\t\t}\r\n\r\n            if (MatchDirective(ref str, \"[pure]\"))\r\n            {\r\n                return Directive.Pure;\r\n            }\r\n\r\n            if (MatchDirective(ref str, \"[clr]\"))\r\n            {\r\n                return Directive.Clr;\r\n            }\r\n\r\n\t\t\treturn Directive.None;\r\n\t\t}\r\n\r\n\t    private static bool MatchDirective(ref string str, params string[] directiveNames)\r\n\t    {\r\n\t        foreach (var directiveName in directiveNames)\r\n\t        {\r\n                if (str.StartsWith(directiveName, StringComparison.InvariantCultureIgnoreCase))\r\n                {\r\n                    str = str.Substring(directiveName.Length);\r\n                    return true;\r\n                }\r\n\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n\t    private void SaveBlock(List<string> block, Directive directive)\r\n\t\t{\r\n            if (block == null || block.Count == 0 || directive == Directive.None)\r\n            {\r\n                return;\r\n            }\r\n\r\n            switch (directive)\r\n            {\r\n                case Directive.Expect:\r\n                    this.expect.Add(block);\r\n                    break;\r\n\r\n                case Directive.ExpectCtError:\r\n                    if (this.expectCtError != null)\r\n                        throw new TestException(String.Format(\"{0}: [expect ct-error] redefinition\", this.sourcePath));\r\n                    this.expectedTestResult = TestResult.CtError;\r\n                    this.expectCtError = block;\r\n                    break;\r\n\r\n                case Directive.ExpectCtWarning:\r\n                    this.expectCtWarning.Add(block);\r\n                    break;\r\n\r\n                case Directive.ExpectExact:\r\n                    if (this.expectExact != null)\r\n                        throw new TestException(String.Format(\"{0}: [expect exact] redefinition\", this.sourcePath));\r\n                    this.expectExact = block;\r\n                    break;\r\n\r\n                case Directive.ExpectPhp:\r\n                    if (expectPhp)\r\n                        throw new TestException(String.Format(\"{0}: [expect php] specified twice\", this.sourcePath));\r\n                    expectPhp = true;\r\n                    break;\r\n\r\n                case Directive.Config:\r\n                    if (configuration != null)\r\n                        throw new TestException(String.Format(\"{0}: [configuration] specified twice\", this.sourcePath));\r\n                    configuration = block;\r\n                    break;\r\n\r\n                case Directive.File:\r\n                    if (this.script != null)\r\n                        throw new TestException(String.Format(\"{0}: [script] redefinition\", this.sourcePath));\r\n                    this.script = block;\r\n                    break;\r\n\r\n                case Directive.Comment:\r\n                    if (this.comment != null)\r\n                        throw new TestException(String.Format(\"{0}: [test] redefinition\", this.sourcePath));\r\n                    this.comment = block;\r\n                    break;\r\n\r\n                case Directive.SkipIf:\r\n                    if (this.skipIf != null)\r\n                        throw new TestException(String.Format(\"{0}: [skipif] redefinition\", this.sourcePath));\r\n                    this.skipIf = block;\r\n                    break;\r\n\r\n                case Directive.NumberOfRuns:\r\n                    if (this.numberOfRuns > 0)\r\n                    {\r\n                        throw new TestException(String.Format(\"{0}: [runs] redefinition\", sourcePath));\r\n                    }\r\n\r\n                    if (!Int32.TryParse(Utils.ListToString(block), out numberOfRuns))\r\n                    {\r\n                        throw new TestException(String.Format(\"{0}: [runs] invalid value\", sourcePath));  \r\n                    }\r\n\r\n                    break;\r\n\r\n                case Directive.AdditionalScripts:\r\n                    if (this.additionalScripts != null)\r\n                        throw new TestException(String.Format(\"{0}: [additional scripts] redefinition\", this.sourcePath));\r\n                    this.additionalScripts = block;\r\n                    break;\r\n\r\n                case Directive.Pure:\r\n                    this.isPure = true;\r\n                    break;\r\n                case Directive.Clr:\r\n                    this.isClr = true;\r\n                    break;\r\n            }\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs the test. (Script compilation and execution.)\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"loaderPath\">Full path to the exe loader or <B>null</B>.</param>\r\n\t\t/// <param name=\"compilerPath\">A full path to the Phalanger.</param>\r\n\t\t/// <param name=\"phpPath\">A full path to PHP (original) executable file.</param>\r\n\t\tpublic void Run(string loaderPath, string compilerPath, string phpPath)\r\n\t\t{\r\n\t\t\tstring compiled_script_path = Path.Combine(Path.GetDirectoryName(sourcePath), String.Concat(Path.GetFileNameWithoutExtension(sourcePath), \"_file\", \".exe\"));\r\n\t\t\tstring compiled_expect_path = Path.Combine(Path.GetDirectoryName(sourcePath), String.Concat(Path.GetFileNameWithoutExtension(sourcePath), \"_expect\", \".exe\"));\r\n\t\t\tstring expect_output;\r\n\r\n            if (comment != null)\r\n            {\r\n                string name = Utils.ListToString(comment).Trim();\r\n                if (name.Length > 0)\r\n                {\r\n                    log(\"[\" + name + \"] \");\r\n                }\r\n            }\r\n\r\n            // First, if we have a SkipIf block, execute it.\r\n            if (!compileOnly && skipIf != null && skipIf.Count > 0)\r\n            {\r\n                bool realVerbose = verbose;\r\n                verbose = false;\r\n                int realNumberOfRuns = numberOfRuns;\r\n                numberOfRuns = 1;\r\n\r\n                // compile and run script\r\n                if (!Compile(loaderPath, compilerPath, skipIf, compiled_script_path, false))\r\n                {\r\n                    // Compile sets realTestResult for compiling script\r\n                    return;\r\n                }\r\n\r\n                if (!RunCompiledScript(loaderPath, compiled_script_path, out scriptOutput, true))\r\n                {\r\n                    realTestResult = TestResult.ScriptHangUp;\r\n                    if (clean) File.Delete(compiled_script_path);\r\n                    return;\r\n                }\r\n                if (clean) File.Delete(compiled_script_path);\r\n\r\n                if (scriptOutput.IndexOf(\"skip\", StringComparison.InvariantCultureIgnoreCase) >= 0)\r\n                {\r\n                    // Skipped test.\r\n                    skipped = true;\r\n                    return;\r\n                }\r\n\r\n                verbose = realVerbose;\r\n                numberOfRuns = realNumberOfRuns;\r\n            }\r\n\r\n\t\t\t// assume success\r\n\t\t\trealTestResult = TestResult.Succees;\r\n\r\n\t\t\t// compile and run script\r\n\t\t\tif (!Compile(loaderPath, compilerPath, script, compiled_script_path, false))\r\n\t\t\t{\r\n\t\t\t\t// Compile sets realTestResult for compiling script\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// stop if we should only compile\r\n\t\t\tif (compileOnly) return;\r\n\r\n\t\t\tif (!RunCompiledScript(loaderPath, compiled_script_path, out scriptOutput, true))\r\n\t\t\t{\r\n\t\t\t\trealTestResult = TestResult.ScriptHangUp;\r\n\t\t\t\tif (clean) File.Delete(compiled_script_path);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (clean) File.Delete(compiled_script_path);\r\n\r\n\t\t\t// compile and run expect exact section\r\n\t\t\tif (expectExact != null)\r\n\t\t\t{\r\n\t\t\t\texpect_output = Utils.OutputWithoutCompiling(expectExact);\r\n\t\t\t\tif (expect_output == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!Compile(loaderPath, compilerPath, expectExact, compiled_expect_path, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trealTestResult = TestResult.CannotCompileExpect;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!RunCompiledScript(loaderPath, compiled_expect_path, out expect_output))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trealTestResult = TestResult.ExpectHangUp;\r\n\t\t\t\t\t\tif (clean) File.Delete(compiled_expect_path);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (clean) File.Delete(compiled_expect_path);\r\n\t\t\t\t}\r\n\t\t\t\tif (!CompareOutputsExact(expect_output, scriptOutput, true))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (verbose) log(String.Format(\"Unexpected output, expected exact: {0}{1}\", expect_output, Environment.NewLine));\r\n\t\t\t\t\trealTestResult = TestResult.UnexpectedOutput;\r\n\t\t\t\t\texpectWhereFailed = expect_output;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tstring script_output_cutted = scriptOutput;\r\n\t\t\t// compile and run all expect sections\r\n\t\t\tforeach (List<string> e in expect)\r\n\t\t\t{\r\n\t\t\t\texpect_output = Utils.OutputWithoutCompiling(e);\r\n\t\t\t\tif (expect_output == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!Compile(loaderPath, compilerPath, e, compiled_expect_path, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trealTestResult = TestResult.CannotCompileExpect;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!RunCompiledScript(loaderPath, compiled_expect_path, out expect_output))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trealTestResult = TestResult.ExpectHangUp;\r\n\t\t\t\t\t\tif (clean) File.Delete(compiled_expect_path);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (clean) File.Delete(compiled_expect_path);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!CompareOutputsSubstring(expect_output, ref script_output_cutted, true))\r\n\t\t\t\t{\r\n\t\t\t\t\tif (verbose) log(String.Format(\"Unexpected output, expected: {0}{1}\", expect_output, Environment.NewLine));\r\n\t\t\t\t\trealTestResult = TestResult.UnexpectedOutput;\r\n\t\t\t\t\texpectWhereFailed = expect_output;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// run php for expect php\r\n\t\t\tif (expectPhp || benchmarks)\r\n\t\t\t{\r\n\t\t\t\tstring php_output;\r\n\t\t\t\tif (!RunPhp(phpPath, script, out php_output))\r\n\t\t\t\t{\r\n\t\t\t\t\trealTestResult = TestResult.PhpHangUp;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!benchmarks)\r\n\t\t\t\t{\r\n\t\t\t\t\texpectWhereFailed = php_output;\r\n\r\n\t\t\t\t\tif (!CompareOutputsExact(php_output, scriptOutput, true))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (verbose) log(String.Format(\"Unexpected output, expected: {0}{1}\", php_output, Environment.NewLine));\r\n\t\t\t\t\t\trealTestResult = TestResult.UnexpectedOutput;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Compiles script and creates exe file with the same name next to the source script.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"compilerPath\">Full path to phpc.exe</param>\r\n\t\t/// <returns><c>True</c> if the script has been compiled succesfuly, <c>false</c> otherwise.</returns>\r\n\t\tprivate bool Compile(string loaderPath, string compilerPath, IEnumerable<string> scriptLines, string output, bool isExpect)\r\n\t\t{\r\n\t\t    string scriptFilename = Path.GetFileNameWithoutExtension(sourcePath) + PHP_FILENAME_SUFIX;\r\n\t\t\tstring scriptPath = Path.Combine(Path.GetDirectoryName(sourcePath), scriptFilename);\r\n            Utils.DumpToFile(scriptLines, scriptPath);\r\n\r\n\t\t\tstring rootDir = Path.GetDirectoryName(sourcePath);\r\n\r\n            var sb = new StringBuilder(256);\r\n            sb.Append(isPure ? \"/pure+ \" : \"\");\r\n            sb.Append(isClr ? \"/lang:clr \" : \"\");\r\n            sb.Append(isPure || isClr ? \"/r:mscorlib /r:\\\"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\\\" \" : \"\");\r\n            sb.Append(\"/dw:CompilerStrict /static+ /target:exe /out:\\\"\").Append(output).Append(\"\\\" \");\r\n            sb.Append(\"/root:. /entrypoint:\\\"\").Append(scriptFilename).Append(\"\\\" \\\"\").Append(scriptFilename).Append(\"\\\"\");\r\n\r\n\t\t\t// put additional scripts to command line\r\n\t\t\tif (additionalScripts != null)\r\n\t\t\t{ \r\n                // relative to /root: - we do not need to put whole path\r\n\t\t\t\tforeach (var s in additionalScripts)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring arg = s.Trim();\r\n\t\t\t\t\tif (arg.Length > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t    sb.Append(\" \\\"\").Append(s).Append(\"\\\"\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t    string arguments = sb.ToString();\r\n            Process compiler = new Process();\r\n            if (loaderPath != null)\r\n\t\t\t\tcompiler.StartInfo = new ProcessStartInfo(loaderPath, String.Format(\"\\\"{0}\\\" {1}\", compilerPath, arguments));\r\n\t\t\telse\r\n\t\t\t\tcompiler.StartInfo = new ProcessStartInfo(compilerPath, arguments);\r\n\r\n\t\t\tcompiler.StartInfo.UseShellExecute = false;\r\n            compiler.StartInfo.WorkingDirectory = rootDir;\r\n\t\t\tcompiler.StartInfo.RedirectStandardError = true;\r\n\t\t\tcompiler.StartInfo.RedirectStandardOutput = true;\r\n\t\t\tcompiler.StartInfo.RedirectStandardInput = true;\r\n\t\t\tif (verbose) log(string.Format(\"Running phpc compiler with options: {0}{1}\", compiler.StartInfo.Arguments, Environment.NewLine));\r\n\r\n\t\t\tcompiler.Start();\r\n\r\n\t\t\t// compiler waits for enter key after work\r\n\t\t\tcompiler.StandardInput.WriteLine();\r\n\r\n\t\t\tcompilerErrorOutput = compiler.StandardError.ReadToEnd();\r\n\t\t\tif (!compiler.WaitForExit(TIMEOUT_MS))\r\n\t\t\t{\r\n\t\t\t\tcompiler.Kill();\r\n\t\t\t\trealTestResult = TestResult.PhpcHangUp;\r\n\t\t\t\tif (verbose) log(\"Compiler hung up.\" + Environment.NewLine);\r\n\t\t\t\tif (clean) File.Delete(scriptPath);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (!isExpect) this.compilationTime = compiler.ExitTime.Subtract(compiler.StartTime).TotalMilliseconds;\r\n\t\t\tif (clean) File.Delete(scriptPath);\r\n\r\n\t\t\tif (verbose && compilerErrorOutput.Length > 0) log(string.Format(\"phpc error output: {0}{1}\", compilerErrorOutput, Environment.NewLine));\r\n\t\t\tcompilerStdOutput = compiler.StandardOutput.ReadToEnd();\r\n\t\t\tif (verbose && compilerStdOutput.Length > 0) log(string.Format(\"phpc std output: {0}{1}\", compilerStdOutput, Environment.NewLine));\r\n\r\n\t\t\tif (compiler.ExitCode != 0)\r\n\t\t\t{\r\n                if (verbose) log(string.Format(\"Compiler exited with code: {0}{1}\", compiler.ExitCode, Environment.NewLine));\r\n\r\n\t\t\t\t// do we expect error?\r\n\t\t\t\tif (!isExpect && expectCtError != null)\r\n\t\t\t\t{\r\n                    var errors = compilerErrorOutput.Split(new char[]{'\\n'}, StringSplitOptions.RemoveEmptyEntries);\r\n\r\n                    int found = errors.Count(errorline => expectCtError.Any(errorline.Contains));\r\n\t\t\t\t    if (found == errors.Length || expectCtError.Count == 0/*just expecting some ct errors*/)\r\n                    {\r\n                        realTestResult = TestResult.CtError;\r\n                        return false;\r\n                    }\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealTestResult = TestResult.PhpcMisbehaviourScript;\r\n                if (verbose) log(string.Format(\"Test result: {0}{1}\", Utils.ResultToString(realTestResult), Environment.NewLine));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!isExpect && expectCtWarning.Count > 0)\r\n\t\t\t{\r\n\t\t\t\tstring comp_output = compilerErrorOutput;\r\n\t\t\t\tforeach (List<string> warn in expectCtWarning)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!(CompareOutputsSubstring(\"warning\", ref comp_output, true) && CompareOutputsSubstring(Utils.ListToString(warn), ref comp_output, true)))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trealTestResult = TestResult.ExpectedWarningNotDisplayed;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// succesfuly compiled\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tprivate bool RunCompiledScript(string loaderPath, string scriptPath, out string output)\r\n\t\t{\r\n\t\t\treturn RunCompiledScript(loaderPath, scriptPath, out output, false);\r\n\t\t}\r\n\r\n\t\tprivate bool RunCompiledScript(string loaderPath, string scriptPath, out string output, bool mainScript)\r\n\t\t{\r\n\t\t\t// save configuration if any\r\n\t\t\tif (configuration != null)\r\n\t\t\t{\r\n                using (var sw = new StreamWriter(String.Concat(scriptPath, \".config\")))\r\n\t\t\t\t{\r\n\t\t\t\t\tsw.WriteLine(\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\" ?>\");\r\n\t\t\t\t\tsw.WriteLine(\"<configuration>\");\r\n\r\n\t\t\t\t\tforeach (string s in configuration)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t    sw.WriteLine(s);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsw.WriteLine(\"</configuration>\");\r\n\t\t\t\t\tsw.Close();\r\n\t\t\t\t}\r\n            }\r\n\r\n\t\t\t// run script\r\n\t\t    bool res = false;\r\n            using (var script = new Process())\r\n            {\r\n                script.StartInfo = loaderPath != null\r\n                                    ? new ProcessStartInfo(loaderPath, \"\\\"\" + scriptPath + \"\\\"\")\r\n                                    : new ProcessStartInfo(scriptPath);\r\n\r\n                script.StartInfo.UseShellExecute = false;\r\n                script.StartInfo.RedirectStandardOutput = true;\r\n                script.StartInfo.ErrorDialog = false;\r\n                script.StartInfo.CreateNoWindow = true;\r\n                script.StartInfo.RedirectStandardError = true;\r\n                script.StartInfo.WorkingDirectory = Path.GetDirectoryName(scriptPath);\r\n                script.EnableRaisingEvents = false;\r\n\r\n                if (verbose)\r\n                {\r\n                    log(String.Format(\"Starting {0}...{1}\", scriptPath, Environment.NewLine));\r\n                }\r\n\r\n                res = RunTestProcess(scriptPath, out output, mainScript, script);\r\n            }\r\n\r\n\t\t    if (verbose)\r\n\t\t    {\r\n\t\t        log(string.Format(\"Script output: {0}{1}\", output, Environment.NewLine));\r\n\t\t    }\r\n\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\t    private bool RunTestProcess(string scriptPath, out string output, bool mainScript, Process script)\r\n\t    {\r\n\t        bool res = false;\r\n\t        output = null;\r\n            var sb = new StringBuilder(1024);\r\n\t        using (var outputWaitHandle = new AutoResetEvent(false))\r\n\t        {\r\n\t            using (var errorWaitHandle = new AutoResetEvent(false))\r\n\t            {\r\n\t                script.OutputDataReceived += (sender, e) =>\r\n\t                                                    {\r\n\t                                                        if (e.Data == null)\r\n\t                                                        {\r\n\t                                                            outputWaitHandle.Set();\r\n\t                                                        }\r\n\t                                                        else\r\n\t                                                        {\r\n\t                                                            sb.AppendLine(e.Data);\r\n\t                                                        }\r\n\t                                                    };\r\n\t                script.ErrorDataReceived += (sender, e) =>\r\n\t                                                {\r\n\t                                                    if (e.Data == null)\r\n\t                                                    {\r\n\t                                                        errorWaitHandle.Set();\r\n\t                                                    }\r\n\t                                                    else\r\n\t                                                    {\r\n\t                                                        sb.AppendLine(e.Data);\r\n\t                                                    }\r\n\t                                                };\r\n                    for (int i = 0; i < numberOfRuns; i++)\r\n                    {\r\n                        sb.Clear();\r\n\r\n                        script.Start();\r\n                        script.BeginOutputReadLine();\r\n                        script.BeginErrorReadLine();\r\n\r\n\t                    if (script.WaitForExit(TIMEOUT_MS) &&\r\n\t                        outputWaitHandle.WaitOne(TIMEOUT_MS) &&\r\n\t                        errorWaitHandle.WaitOne(TIMEOUT_MS))\r\n\t                    {\r\n                            script.CancelErrorRead();\r\n                            script.CancelOutputRead();\r\n\t                        output = sb.ToString();\r\n\t                        if (script.ExitCode != 0)\r\n\t                        {\r\n\t                            if (verbose)\r\n\t                            {\r\n\t                                log(string.Format(\"Script {0} did not exit properly.{1}\", scriptPath, Environment.NewLine));\r\n\t                            }\r\n\r\n\t                            break;\r\n\t                        }\r\n\r\n\t                        res = true;\r\n\t                    }\r\n\t                    else\r\n\t                    {\r\n\t                        // Timed out.\r\n                            script.Kill();\r\n                            script.CancelErrorRead();\r\n                            script.CancelOutputRead();\r\n                            output = sb.ToString();\r\n\t                        if (verbose)\r\n\t                        {\r\n\t                            log(string.Format(\"Script {0} hung up.{1}\", scriptPath, Environment.NewLine));\r\n\t                        }\r\n\r\n\t                        break;\r\n\t                    }\r\n\r\n\t                    if (!mainScript)\r\n\t                    {\r\n\t                        break;\r\n\t                    }\r\n\r\n\t                    if (i >= PhpNetTester.BenchmarkWarmup)\r\n\t                    {\r\n                            runningTime += script.ExitTime.Subtract(script.StartTime).TotalMilliseconds;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\r\n\t        return res;\r\n\t    }\r\n\r\n\t    private bool RunPhp(string phpPath, IEnumerable<string> scriptLines, out string output)\r\n\t\t{\r\n\t\t\toutput = null;\r\n\r\n            string scriptFilename = Path.GetFileNameWithoutExtension(sourcePath) + PHP_FILENAME_SUFIX;\r\n            string scriptPath = Path.Combine(Path.GetDirectoryName(sourcePath), scriptFilename);\r\n            Utils.DumpToFile(scriptLines, scriptPath);\r\n\r\n\t\t\tif (!File.Exists(phpPath))\r\n\t\t\t{\r\n\t\t\t\trealTestResult = TestResult.PhpNotFound;\r\n\t\t\t\tif (verbose) log(Utils.ResultToString(realTestResult) + Environment.NewLine);\r\n\t\t\t\tif (clean) File.Delete(scriptPath);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n            // use our custom php.ini, don't use the global one if any\r\n            string phpIniPath = new Uri(new Uri(phpPath), \"php.ini\").LocalPath;\r\n\r\n            //TODO: Refactor and reuse the improved process execution code.\r\n\t\t\tProcess php = new Process();\r\n            php.StartInfo = new ProcessStartInfo(phpPath, String.Concat(\"-c \\\"\", phpIniPath, \"\\\" \\\"\", scriptPath, \"\\\"\"));\r\n\t\t\tphp.StartInfo.UseShellExecute = false;\r\n\t\t\tphp.StartInfo.RedirectStandardOutput = true;\r\n            php.StartInfo.RedirectStandardError = true;\r\n            php.StartInfo.WorkingDirectory = Path.GetDirectoryName(scriptPath);\r\n\r\n\t\t\tfor (int i = 0; i < numberOfRuns; i++)\r\n\t\t\t{\r\n\t\t\t\tphp.Start();\r\n\r\n\t\t\t\toutput = Utils.RemoveCR(php.StandardOutput.ReadToEnd().Trim());\r\n\t\t\t\tif (!php.WaitForExit(TIMEOUT_MS))\r\n\t\t\t\t{\r\n\t\t\t\t\tphp.Kill();\r\n\t\t\t\t\trealTestResult = TestResult.PhpHangUp;\r\n\t\t\t\t\tif (verbose) log(Utils.ResultToString(realTestResult) + Environment.NewLine);\r\n\t\t\t\t\tif (clean) File.Delete(scriptPath);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (i >= PhpNetTester.BenchmarkWarmup)\r\n\t\t\t\t{\r\n\t\t\t\t    this.phpTime += php.ExitTime.Subtract(php.StartTime).TotalMilliseconds;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tphp.Dispose();\r\n\t\t\tif (clean) File.Delete(scriptPath);\r\n\r\n\t\t\tif (verbose) log(\"Php output: \" + output + Environment.NewLine);\r\n\t\t\treturn true;\r\n        }\r\n\r\n\t    #region Comparing outputs (expected (PHP) and real (Phalanger))\r\n\r\n        /// <summary>\r\n        /// called on every match\r\n        /// </summary>\r\n        /// <param name=\"match\"></param>\r\n        /// <returns>only values in colections are used</returns>\r\n        internal string CompareModifier(Match match)\r\n        {\r\n            string str = null;\r\n            foreach (Group gr in match.Groups)\r\n            {\r\n                if (gr != match)\r\n                {\r\n                    str += gr.Value;\r\n                }\r\n            }\r\n\r\n            return str;\r\n        }\r\n\r\n        internal void ModifyOutput(ref string real_str, ref string exp_str)\r\n        {\r\n            // ignore known Phalanger differences\r\n\r\n            // modify real_str, exp_str\r\n\r\n            // at expression on line NUM, column NUM. => on line NUM\r\n            Regex reColumn = new Regex(@\"(\\son\\sline\\s[0-9]+),\\scolumn [0-9]+\\.\");\r\n            real_str = reColumn.Replace(real_str, CompareModifier);\r\n\r\n            // array(NUM)\\n*\\s*{ => array(NUM){\r\n            Regex reArray = new Regex(@\"(array\\([0-9]+\\))\\n*\\s*({)\", RegexOptions.Multiline);\r\n            real_str = reArray.Replace(real_str, CompareModifier);\r\n            exp_str = reArray.Replace(exp_str, CompareModifier);\r\n\r\n            // integer(NUM) => int(NUM)\r\n            Regex reInt = new Regex(@\"(int)eger(\\([0-9]+\\))\");\r\n            real_str = reInt.Replace(real_str, CompareModifier);\r\n            exp_str = reInt.Replace(exp_str, CompareModifier);\r\n\r\n            // [ID]\\s*=>\\n?\\s*TYPE     remove whitespaces\r\n            Regex reAss = new Regex(@\"(\\[)([^\\]]+)(\\])\\s*(\\=\\>)\\n?\\s+([^\\n]+)\", RegexOptions.Multiline);\r\n            real_str = reAss.Replace(real_str, CompareModifier);\r\n            exp_str = reAss.Replace(exp_str, CompareModifier);\r\n\r\n            // ['ID']=>TYPE   remove ''\r\n            reAss = new Regex(@\"(\\[)[\\'\\\" + '\"' + @\"]([^\\]]+)[\\'\\\" + '\"' + @\"](\\]\\=\\>[^\\n]+)\", RegexOptions.Multiline);\r\n            real_str = reAss.Replace(real_str, CompareModifier);\r\n            exp_str = reAss.Replace(exp_str, CompareModifier);\r\n\r\n            // Deprecated: .*          remove\r\n            Regex reDepr = new Regex(@\"\\n?Deprecated\\:[^\\n]+\\n\", RegexOptions.Multiline);\r\n            real_str = reDepr.Replace(real_str, CompareModifier);\r\n            exp_str = reDepr.Replace(exp_str, CompareModifier);\r\n\r\n            // Strict Standards: .*     remove\r\n            reDepr = new Regex(@\"\\n?Strict\\sStandards\\:[^\\n]+\\n\", RegexOptions.Multiline);\r\n            real_str = reDepr.Replace(real_str, CompareModifier);\r\n            exp_str = reDepr.Replace(exp_str, CompareModifier);\r\n         }\r\n\r\n        /// <summary>\r\n\t\t/// Compares two script outputs.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expected\"><seealso cref=\"String\"/> or <seealso cref=\"ArrayList\"/> of <seealso cref=\"String\"/>s.</param>\r\n\t\t/// <param name=\"real\"><seealso cref=\"String\"/> or <seealso cref=\"ArrayList\"/> of <seealso cref=\"String\"/>s.</param>\r\n\t\t/// <param name=\"substring\"><c>True</c> if for success is sufficient that <paramref name=\"expected\"/>\r\n\t\t/// is substring of <paramref name=\"real\"/>.</param>\r\n\t\t/// <returns><c>True</c> if outputs are same.</returns>\r\n\t\tprivate bool CompareOutputsExact(string expected, string real, bool ignoreKnownPhalangerDifferences)\r\n\t\t{\r\n            expected = expected.Trim().Replace(\"\\n\\r\", \"\\n\").Replace(\"\\r\\n\", \"\\n\");\r\n            real = real.Trim().Replace(\"\\n\\r\", \"\\n\").Replace(\"\\r\\n\", \"\\n\");\r\n\r\n            if (expected == real)\r\n            {\r\n                return true;\r\n            }\r\n\r\n            if (!ignoreKnownPhalangerDifferences && !expectF && !expectRegex)\r\n            {\r\n                DebugCompareOutput(expected, real);\r\n                return false;\r\n            }\r\n\r\n            // Here we need to do a fuzzy match.\r\n            ModifyOutput(ref real, ref expected);\r\n\r\n            //FIXME: Add scanf and regex parsing.\r\n            // For now, just do a fuzzy comparison.\r\n            expected = Utils.RemoveWhitespace(expected);\r\n            real = Utils.RemoveWhitespace(real);\r\n            return (expected == real);\r\n\t\t}\r\n\r\n\t    private bool CompareOutputsSubstring(string expected, ref string real, bool ignoreKnownPhalangerDifferences)\r\n\t\t{\r\n            return CompareOutputsSubstring(expected, ref real, false, ignoreKnownPhalangerDifferences);\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for <paramref name=\"expected\"/> in <paramref name=\"real\"/>. If not found returns <B>false</B>,\r\n\t\t/// otherwise <B>true</B> and <paramref name=\"real\"/> is changed to substring remaining after the match.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"expected\"></param>\r\n\t\t/// <param name=\"real\"></param>\r\n\t\t/// <param name=\"noCase\"></param>\r\n\t\t/// <returns></returns>\r\n\t\tprivate bool CompareOutputsSubstring(string expected, ref string real, bool noCase, bool ignoreKnownPhalangerDifferences)\r\n\t\t{\r\n            Debug.Assert(expected != null);\r\n            Debug.Assert(real != null);\r\n\r\n            expected = expected.Trim().Replace(\"\\n\\r\", \"\\n\").Replace(\"\\r\\n\", \"\\n\");\r\n            real = real.Trim().Replace(\"\\n\\r\", \"\\n\").Replace(\"\\r\\n\", \"\\n\");\r\n\r\n            if (ignoreKnownPhalangerDifferences)\r\n            {\r\n                ModifyOutput(ref real, ref expected);\r\n            }\r\n\r\n\t\t\tif (noCase)\r\n\t\t\t{\r\n\t\t\t    real = real.ToLower();\r\n\t\t\t}\r\n\r\n            //FIXME: Add scanf and regex parsing.\r\n            // For now, just do a fuzzy comparison.\r\n            if (expectF || expectRegex)\r\n            {\r\n                expected = Utils.RemoveWhitespace(expected);\r\n                real = Utils.RemoveWhitespace(real);\r\n            }\r\n\r\n            if (expected.Length == 0)\r\n            {\r\n                return real.Length == 0;\r\n            }\r\n\r\n            int index = real.IndexOf(expected);\r\n\t\t\tif (index < 0)\r\n\t\t\t{\r\n\t\t\t    DebugCompareOutput(expected, real);\r\n                \r\n\t\t\t    // not a substring\r\n                return false;\r\n\t\t\t}\r\n\r\n\t\t    real = real.Substring(index + expected.Length);\r\n\t\t\treturn true;\r\n        }\r\n\r\n        [Conditional(\"DEBUG\")]\r\n        private void DebugCompareOutput(string expected, string real)\r\n\t    {\r\n\t        if (verbose)\r\n\t        {\r\n\t            string e = Utils.RemoveWhitespace(expected).ToLowerInvariant();\r\n\t            string r = Utils.RemoveWhitespace(real).ToLowerInvariant();\r\n\t            ModifyOutput(ref r, ref e);\r\n\t            if (r.IndexOf(e, StringComparison.Ordinal) >= 0)\r\n\t            {\r\n                    log(string.Format(\"Output has superficial differences from expected.{0}Got: {1}{0}Expected: {2}{0}\", Environment.NewLine, r, e));\r\n\t            }\r\n\t        }\r\n\t    }\r\n\r\n\t    #endregion\r\n\r\n        /// <summary>\r\n\t\t/// Writes one row of html table for this test.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"tw\"><see cref=\"TextWriter\"/> where to write output.</param>\r\n\t\t/// <param name=\"fullLog\">True if detail info is written also if test succeeded.</param>\r\n        /// <param name=\"testIndex\">The test unique identifier (for the purposes of HTML generation).</param>\r\n\t\tpublic void WriteTableRow(TextWriter tw, bool fullLog, int testIndex)\r\n\t\t{\r\n            bool displayDetails = (!Succeeded || Skipped || fullLog || benchmarks);\r\n\r\n            string detailsRowId = \"details\" + testIndex;\r\n\r\n\t\t\tstring classAttr = String.Concat(\" class=\\\"\", Succeeded ? \"succeeded\" : (Skipped ? \"skipped\" : \"failed\"), \"\\\"\");\r\n\t\t\ttw.WriteLine(\"<tr class=\\\"status\\\">\");\r\n\t\t\ttw.WriteLine(String.Concat(\"<td\", classAttr, \" colspan=\\\"5\\\">\",\r\n                                        \"<a\", classAttr, \" href=\\\"\", SourcePathRelative, \"\\\">\", SourcePathRelative,\r\n                                        \"</a>: <font color=\\\"\", Succeeded ? \"green\" : (Skipped ? \"blue\" : \"red\"), \"\\\"><b>\",\r\n                                        Succeeded ? \"SUCCEEDED\" : (Skipped ? \"SKIPPED\" : \"FAILED\"), \"</b></font>\",\r\n                                        \"</td>\"));\r\n\t\t\ttw.WriteLine(\"</tr>\");\r\n\r\n\t\t\tif (displayDetails)\r\n\t\t\t{\t// write details\r\n\r\n\t\t\t\tbool compileErrors = compilerErrorOutput.Length > 0;\r\n\r\n                tw.WriteLine(\"<tr>\");\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(Utils.ResultToString(this.realTestResult), classAttr, \"rowspan\", compileErrors ? 2 : 1));\r\n\t\t\t\tif (benchmarks)\r\n\t\t\t\t{\r\n\t\t\t\t\ttw.Write(Utils.MakeTColumn(compilationTime.ToString()));\r\n\t\t\t\t\ttw.Write(Utils.MakeTColumn(runningTime.ToString()));\r\n\t\t\t\t\ttw.Write(Utils.MakeTColumn(phpTime.ToString()));\r\n\t\t\t\t\ttw.Write(Utils.MakeTColumn(numberOfRuns.ToString() + \"/\" + PhpNetTester.BenchmarkWarmup));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n                {\r\n                    string exp_str = expectWhereFailed;\r\n                    string real_str = this.scriptOutput;\r\n\r\n                    //HighlightDifferences(ref exp_str, ref real_str);\r\n\r\n                    string expectedOutputHtml = String.Concat(\"<pre>\", HttpUtility.HtmlEncode(exp_str), \"</pre>\");\r\n                    string realOutputHtml = String.Concat(\"<pre>\", HttpUtility.HtmlEncode(real_str), \"</pre>\");\r\n\r\n                    tw.Write(Utils.MakeTColumn(compileErrors ? \"See below\" : \"No errors\", classAttr));\r\n                    tw.Write(Utils.MakeTColumn(Utils.ResultToString(expectedTestResult), classAttr));\r\n\r\n\r\n\r\n                    tw.Write(Utils.MakeTColumn(\r\n                        \"<table>\"+\r\n                        \"<tr><td>Expected test output</td><td>Real script output</td></tr>\"+\r\n                        \"<tr><td>\"+expectedOutputHtml+\"</td><td>\"+realOutputHtml+\"</td></tr>\"+\r\n                        \"</table>\",\r\n                        classAttr, \"colspan\", 2));\r\n                    //tw.Write(Utils.MakeTColumn(expectedOutputHtml, classAttr));\r\n                    //tw.Write(Utils.MakeTColumn(realOutputHtml, classAttr));\r\n\t\t\t\t}\r\n\t\t\t\ttw.WriteLine(\"</tr>\");\r\n\r\n               \tif (compileErrors)\r\n\t\t\t\t{\r\n\t\t\t\t\ttw.WriteLine(\"<tr>\");\r\n\t\t\t\t\ttw.Write(Utils.MakeTColumn(String.Concat(\"<pre>\", HttpUtility.HtmlEncode(compilerErrorOutput), \"</pre>\"), classAttr, \"colspan\", 5));\r\n\t\t\t\t\ttw.WriteLine(\"</tr>\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Returns true if the test succeded.\r\n\t\t/// </summary>\r\n\t\tpublic bool Succeeded\r\n\t\t{\r\n\t\t\tget { return realTestResult == expectedTestResult; }\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Returns true if the test skipped.\r\n        /// </summary>\r\n        public bool Skipped\r\n        {\r\n            get { return skipped; }\r\n        }\r\n\r\n\t    public string SourcePathRelative\r\n\t    {\r\n\t        get { return sourcePathRelative; }\r\n\t    }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/PhpNetTester/TestsCollection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace PHP.Testing\r\n{\r\n\tpublic class TestsCollection\r\n\t{\r\n        public enum ConcurrencyLevel\r\n        {\r\n            None,           //< Everything sequential.\r\n            Folder,         //< Tests in separate folders executed concurrently.\r\n            Compile,        //< Only compiled concurrently in same folder.\r\n            SkipIf,         //< SkipIf tests executed concurrently in same folder.\r\n            Full            //< All possible operations done concurrently.\r\n        }\r\n\r\n\t\tprivate List<Test> tests;\r\n\t\tprivate List<string> testDirsAndFiles;\r\n\r\n\t\tprivate bool verbose;\r\n\t\tprivate bool clean;\r\n\t\tprivate bool compileOnly;\r\n\t\tprivate bool benchmarks;\r\n\t\tprivate int defaultNumberOfRuns;\r\n        private int maxThreads = 1;\r\n        private ConcurrencyLevel concurrencyLevel = ConcurrencyLevel.None;\r\n        private readonly Action<string> log;\r\n\t    private readonly object logLock = new object();\r\n\r\n\t\tpublic TestsCollection(List<string> testDirsAndFiles, bool verbose, bool clean, bool compileOnly,\r\n                               bool benchmarks, int defaultNumberOfRuns, ConcurrencyLevel concurrencyLevel, int maxThreads)\r\n\t\t{\r\n\t\t\tthis.tests = new List<Test>();\r\n\t\t\tthis.testDirsAndFiles = testDirsAndFiles;\r\n\t\t\tthis.verbose = verbose;\r\n\t\t\tthis.clean = clean;\r\n\t\t\tthis.compileOnly = compileOnly;\r\n\t\t\tthis.benchmarks = benchmarks;\r\n\t\t\tthis.defaultNumberOfRuns = defaultNumberOfRuns;\r\n\t\t    this.concurrencyLevel = concurrencyLevel;\r\n\t\t    this.maxThreads = maxThreads;\r\n            if (this.maxThreads > 1)\r\n            {\r\n                log = SyncedLog;\r\n            }\r\n\t\t}\r\n\r\n\t    private void LoadTestsFromDirectory(string dir)\r\n\t\t{\r\n\t\t\tif (Directory.GetFiles(dir, \"__skip\").Length > 0)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Skipping directory {0}\", dir);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// tests are files with extension php or phpt\r\n\t\t\tforeach (string file in Directory.GetFiles(dir, \"*.php\"))\r\n\t\t\t{\r\n\t\t\t    LoadTestFile(file);\r\n\t\t\t}\r\n\r\n\t\t\t// and process all subdirectories\r\n\t\t\tforeach (string subdir in Directory.GetDirectories(dir))\r\n\t\t\t{\r\n\t\t\t    LoadTestsFromDirectory(subdir);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Searches for tests in all sub folders containing \"test\" string\r\n\t\t/// </summary>\r\n\t\tpublic void LoadTests()\r\n\t\t{\r\n\t\t\tforeach (string path in testDirsAndFiles)\r\n\t\t\t{\r\n\t\t\t\tif (Directory.Exists(path))\r\n\t\t\t\t{\t// is directory\r\n\t\t\t\t\tLoadTestsFromDirectory(path);\r\n\t\t\t\t}\r\n\t\t\t\telse if (File.Exists(path))\r\n\t\t\t\t{\t//is file\r\n\t\t\t\t\tLoadTestFile(path);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{ // is not directory or file\r\n\t\t\t\t\tthrow new InvalidArgumentException(String.Format(\"File or directory {0} does not exist.\", path));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate void LoadTestFile(string file)\r\n\t\t{\r\n\t\t\ttests.Add(new Test(file, verbose, clean, compileOnly, benchmarks, defaultNumberOfRuns, log));\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Runs all tests\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"loader\">Full path to exe loader or <B>null</B>.</param>\r\n\t\t/// <param name=\"compiler\">Full path to PHP.NET Compiler</param>\r\n\t\t/// <param name=\"php\">Full path to PHP (original) executable file.</param>\r\n\t\t/// <returns>Number of tests that failed.</returns>\r\n\t\tpublic int RunTests(string loader, string compiler, string php)\r\n\t\t{\r\n\t\t    switch (concurrencyLevel)\r\n\t\t    {\r\n                case ConcurrencyLevel.None:\r\n                case ConcurrencyLevel.Full:\r\n\t\t            return RunTestsDefault(loader, compiler, php);\r\n\r\n                case ConcurrencyLevel.Folder:\r\n                case ConcurrencyLevel.Compile:\r\n                case ConcurrencyLevel.SkipIf:\r\n\t\t            break;\r\n\t\t    }\r\n\r\n\t\t    int failedCount = 0;\r\n\t\t\tforeach (Test t in tests)\r\n\t\t\t{\r\n\t\t\t\tConsole.Write(\"Running {0}.. \", t.SourcePathRelative);\r\n                \r\n                t.Run(loader, compiler, php);\r\n\t\t\t\tif (!t.Skipped && !t.Succeeded)\r\n\t\t\t\t{\r\n\t\t\t\t    ++failedCount;\r\n\t\t\t\t}\r\n\r\n                Console.WriteLine(t.Succeeded ? \"Pass\" : (t.Skipped ? \"Skipped\" : \"Failed\"));\r\n\t\t\t}\r\n\r\n\t\t\treturn failedCount;\r\n\t\t}\r\n\r\n        /// <summary>\r\n        /// Runs all tests\r\n        /// </summary>\r\n        /// <param name=\"loader\">Full path to exe loader or <B>null</B>.</param>\r\n        /// <param name=\"compiler\">Full path to PHP.NET Compiler</param>\r\n        /// <param name=\"php\">Full path to PHP (original) executable file.</param>\r\n        /// <returns>Number of tests that failed.</returns>\r\n        public int RunTestsDefault(string loader, string compiler, string php)\r\n        {\r\n            int failedCount = 0;\r\n            Parallel.ForEach(tests, new ParallelOptions { MaxDegreeOfParallelism = maxThreads },\r\n                             test =>\r\n                                 {\r\n                                     Console.Write(\"Running {0}.. \", test.SourcePathRelative);\r\n\r\n                                     test.Run(loader, compiler, php);\r\n                                     if (!test.Skipped && !test.Succeeded)\r\n                                     {\r\n                                         Interlocked.Increment(ref failedCount);\r\n                                     }\r\n\r\n                                     Console.WriteLine(test.Succeeded ? \"Pass\" : (test.Skipped ? \"Skipped\" : \"Failed\"));\r\n                                 });\r\n\r\n            return failedCount;\r\n        }\r\n\r\n        private void SyncedLog(string msg)\r\n        {\r\n            lock (logLock)\r\n            {\r\n                Console.Write(msg);\r\n            }\r\n        }\r\n\r\n\t\t/// <summary>\r\n\t\t/// Writes html log into file specified.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"file\">File where to write log. If the file exist, is overwritten.</param>\r\n\t\t/// <param name=\"fullLog\">True if detail info is written also if test succeeded.</param>\r\n\t\tpublic void WriteLog(string file, bool fullLog)\r\n\t\t{\r\n\t\t\tusing (var sw = new StreamWriter(file))\r\n\t\t\t{\r\n\t\t\t\tsw.WriteLine(\"<html>\");\r\n\t\t\t\tsw.WriteLine(\"<head>\");\r\n\t\t\t\tsw.WriteLine(\"<title>PHP.NET Compiler test log</title>\");\r\n\t\t\t\tsw.WriteLine(\"<style type=\\\"text/css\\\">\");\r\n\t\t\t\tsw.WriteLine(\"BODY { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }\");\r\n\r\n\t\t\t\tsw.WriteLine(\"TABLE { border-collapse:collapse }\");\r\n\t\t\t\tsw.WriteLine(\"TD { FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; border: 1px solid DimGray; }\");\r\n\t\t\t\tsw.WriteLine(\"TR.status TD.succeeded { background-color: #CFC }\");\r\n                sw.WriteLine(\"TR.status TD.skipped { background-color: #CCF }\");\r\n\t\t\t\tsw.WriteLine(\"TR.status TD.failed { background-color: #FCC }\");\r\n\t\t\t\tsw.WriteLine(\"TD.succeeded { background-color: #EFE }\");\r\n                sw.WriteLine(\"TD.skipped { background-color: #EEF }\");\r\n                sw.WriteLine(\"TD.failed { background-color: #FEE }\");\r\n\r\n                sw.WriteLine(\"A.succeeded:link, A.succeeded:visited { color:green; text-decoration: none; }\");\r\n                sw.WriteLine(\"A.skipped:link, A.skipped:visited { color:blue; text-decoration: none; }\");\r\n                sw.WriteLine(\"A.failed:link, A.failed:visited { color:red; text-decoration: none; }\");\r\n                sw.WriteLine(\"TR.detail{visibility:hidden;position:absolute;\");\r\n\t\t\t\tsw.WriteLine(\"</style>\");\r\n                sw.WriteLine(\"</head>\");\r\n\t\t\t\tsw.WriteLine(\"<body>\");\r\n\r\n\t\t\t\tsw.WriteLine(\"<h1>PHP.NET Compiler test log</h1>\");\r\n\r\n                sw.WriteLine(GetStatusMessage() + \" <br />\");\r\n\r\n\t\t\t\tsw.WriteLine(\"<table width=\\\"100%\\\" border=\\\"1\\\" cellspacing=\\\"0\\\" cellpadding=\\\"3\\\">\");\r\n\t\t\t\tWriteTableHead(sw);\r\n\t\t\t    for (int testIndex = 0; testIndex < tests.Count; ++testIndex)\r\n\t\t\t    {\r\n\t\t\t        tests[testIndex].WriteTableRow(sw, fullLog, testIndex);\r\n\t\t\t    }\r\n\r\n\t\t\t    sw.WriteLine(\"</table>\");\r\n\t\t\t\tsw.WriteLine(\"</body>\");\r\n\t\t\t\tsw.WriteLine(\"</html>\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tpublic string GetStatusMessage()\r\n\t\t{\r\n            int succeeded = 0;\r\n            int skipped = 0;\r\n            int failed = 0;\r\n\t\t\tforeach (Test t in tests)\r\n\t\t\t{\r\n                if (t.Succeeded)\r\n                {\r\n                    ++succeeded;\r\n                }\r\n                else\r\n                if (t.Skipped)\r\n                {\r\n                    ++skipped;\r\n                }\r\n                else\r\n                {\r\n                    ++failed;\r\n                }\r\n\t\t\t}\r\n\r\n\t\t    int total = succeeded + skipped + failed;\r\n\t\t\treturn string.Format(\"({0}%) {1} succeeded, {2} skipped, {3} failed ({4} total test{5})\",\r\n                                 Math.Round(succeeded * 100.0 / total), succeeded, skipped, failed, total, total > 1 ? \"s\" : \"\");\r\n\t\t}\r\n\r\n\t\tprivate void WriteTableHead(TextWriter tw)\r\n\t\t{\r\n\t\t\ttw.WriteLine(\"<tr>\");\r\n\r\n\t\t\ttw.Write(Utils.MakeTColumn(\"Test Result\", true));\r\n\r\n\t\t\tif (benchmarks)\r\n\t\t\t{\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"Compilation time\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"Running time\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"PHP time\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"No. of runs\", true));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"Compiler error output\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(\"Expected test result\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(/*\"Expected test output\"*/\"\", true));\r\n\t\t\t\ttw.Write(Utils.MakeTColumn(/*\"Real script output\"*/\"\", true));\r\n\t\t\t}\r\n\t\t\ttw.WriteLine(\"<tr>\");\r\n\t\t}\r\n\r\n\t}\r\n}"
  },
  {
    "path": "Tools/PhpNetTester/Utils.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace PHP.Testing\r\n{\r\n\tpublic static class Utils\r\n\t{\r\n\t\tpublic static string MakeTColumn(string str)\r\n\t\t{\r\n\t\t\treturn MakeTColumn(str, false);\r\n\t\t}\r\n\r\n\t\tpublic static string MakeTColumn(string str, bool isHead)\r\n\t\t{\r\n\t\t\treturn String.Concat(\"<td valign=\\\"top\\\">\", isHead ? \"<b>\" : \"\", str, isHead ? \"</b>\" : \"\", \"</td>\");\r\n\t\t}\r\n\r\n\t\tpublic static string MakeTColumn(string str, string classAttr)\r\n\t\t{\r\n\t\t\treturn String.Concat(\"<td\", classAttr, \" valign=\\\"top\\\">\", str, \"</td>\");\r\n\t\t}\r\n\r\n\t\tpublic static string MakeTColumn(string str, string classAttr, string span, int count)\r\n\t\t{\r\n\t\t\treturn String.Concat(\"<td\", classAttr, \" valign=\\\"top\\\" \", span, \"=\\\"\", count, \"\\\">\", str, \"</td>\");\r\n\t\t}\r\n\r\n\t\tpublic static string NlToBr(string str)\r\n\t\t{\r\n\t\t    return String.IsNullOrWhiteSpace(str) ? \"&nbsp;\" : str.Replace(\"\\n\", \"<br />\");\r\n\t\t}\r\n\r\n\t    public static string ResultToString(TestResult result)\r\n\t\t{\r\n\t\t\tswitch (result)\r\n\t\t\t{\r\n\t\t\t\tcase TestResult.CtError: return \"Compile error\";\r\n\t\t\t\tcase TestResult.PhpcHangUp: return \"Phalanger hung up\";\r\n\t\t\t\tcase TestResult.PhpcMisbehaviourScript: return \"Phalanger misbehaviour while compiling [file] section\";\r\n\t\t\t\tcase TestResult.ScriptHangUp: return \"Script hung up\";\r\n                case TestResult.Succees: return \"Success\";\r\n                case TestResult.Skipped: return \"Skipped\";\r\n                case TestResult.UnexpectedOutput: return \"Unexpected output\";\r\n\t\t\t\tcase TestResult.PhpMisbehaviour: return \"PHP (original) misbehaviour.\";\r\n\t\t\t\tcase TestResult.PhpHangUp: return \"PHP (original) hung up\";\r\n\t\t\t\tcase TestResult.PhpNotFound: return \"[expect php] specified and PHP executable file not found\";\r\n\t\t\t\tcase TestResult.CannotCompileExpect: return \"Cannot compile expect section.\";\r\n\t\t\t\tcase TestResult.ExpectHangUp: return \"Expect section hung up.\";\r\n\t\t\t\tcase TestResult.ExpectedWarningNotDisplayed: return \"Expected warning not displayed.\";\r\n\t\t\t}\r\n\r\n\t\t\treturn \"unknown test result\";\r\n\t\t}\r\n\r\n\t\tpublic static string ListToString(List<string> list)\r\n\t\t{\r\n\t\t\treturn ListToString(list, '\\n');\r\n\t\t}\r\n\r\n        public static string ListToString(List<string> list, char separator)\r\n        {\r\n            return String.Join(separator.ToString(CultureInfo.InvariantCulture), list).Trim();\r\n\t\t}\r\n\r\n\t\tpublic static string RemoveCR(string str)\r\n\t\t{\r\n\t\t    return str.Replace(\"\\r\", String.Empty);\r\n\t\t}\r\n\r\n        public static bool CanBeEmptyDirective(Directive current_directive)\r\n        {\r\n            return\r\n                current_directive == Directive.Comment ||\r\n                current_directive == Directive.SkipIf ||\r\n                current_directive == Directive.ExpectPhp ||\r\n                current_directive == Directive.ExpectCtError ||\r\n                current_directive == Directive.ExpectCtWarning ||\r\n                current_directive == Directive.Pure ||\r\n                current_directive == Directive.Clr;\r\n        }\r\n\r\n\t\tpublic static string OutputWithoutCompiling(List<string> lines)\r\n\t\t{\r\n\t\t\tvar sb = new StringBuilder(lines.Count * 10);\r\n            foreach (string s in lines)\r\n\t\t\t{\r\n\t\t\t\t// there is php code, we must compile\r\n                //FIXME: This could be legitimate output.\r\n\t\t\t\tif (s.IndexOf(\"<?\") >= 0)\r\n\t\t\t\t{\r\n\t\t\t\t    return null;\r\n\t\t\t\t}\r\n\r\n                sb.Append(s);\r\n\t\t\t\tsb.Append('\\n');\r\n\t\t\t}\r\n\r\n\t\t\t// there is no php code, we can return output\r\n\t\t\treturn sb.ToString().Trim();\r\n\t\t}\r\n\r\n\t    public static void DumpToFile(IEnumerable<string> script, string path)\r\n\t    {\r\n\t        using (var sw = new StreamWriter(path))\r\n\t        {\r\n\t            foreach (var s in script)\r\n\t            {\r\n\t                sw.WriteLine(s);\r\n\t            }\r\n\r\n\t            sw.Close();\r\n\t        }\r\n\t    }\r\n\r\n\t    public static string RemoveWhitespace(string str)\r\n\t    {\r\n\t        var sb = new StringBuilder(str.Length);\r\n\t        foreach (var c in str.Where(c => !Char.IsWhiteSpace(c)))\r\n\t        {\r\n\t            sb.Append(c);\r\n\t        }\r\n\r\n\t        return sb.ToString();\r\n\t    }\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/PhpNetTester/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\r\n"
  },
  {
    "path": "Tools/Readme.txt",
    "content": "Tools in this directory are needed for compilation and generation of pieces of the source code and are referenced from C# and C++/CLI projects in pre/post build events.\r\nReflectionCacheGen utility generates parts of Core/Emit/ReflectionCache.cs source file\r\n"
  },
  {
    "path": "Tools/ReflectionCacheGen/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\n\r\n//\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n//\r\n[assembly: AssemblyTitle(\"\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n//\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n\r\n[assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n//\r\n// In order to sign your assembly you must specify a key to use. Refer to the \r\n// Microsoft .NET Framework documentation for more information on assembly signing.\r\n//\r\n// Use the attributes below to control which key is used for signing. \r\n//\r\n// Notes: \r\n//   (*) If no key is specified, the assembly is not signed.\r\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\r\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\r\n//       a key.\r\n//   (*) If the KeyFile and the KeyName values are both specified, the \r\n//       following processing occurs:\r\n//       (1) If the KeyName can be found in the CSP, that key is used.\r\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \r\n//           in the KeyFile is installed into the CSP and used.\r\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r\n//       When specifying the KeyFile, the location of the KeyFile should be\r\n//       relative to the project output directory which is\r\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\r\n//       located in the project directory, you would specify the AssemblyKeyFile \r\n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\r\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r\n//       documentation for more information on this.\r\n//\r\n[assembly: AssemblyDelaySign(false)]\r\n[assembly: AssemblyKeyFile(\"\")]\r\n[assembly: AssemblyKeyName(\"\")]\r\n"
  },
  {
    "path": "Tools/ReflectionCacheGen/Main.cs",
    "content": "using System;\r\nusing PHP.Core;\r\nusing PHP.Core.Emit;\r\nusing System.Reflection;\r\nusing System.Reflection.Emit;\r\n\r\nnamespace ReflectionCacheGen\r\n{\r\n\tclass RCG\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main(string[] args)\r\n\t\t{\r\n\t\t\tif (args.Length != 1 && args.Length != 2)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Usage: rcg <type name> [<binding flags>]\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tType type = typeof(PHP.Core.Operators).Assembly.GetType(args[0], false, true);\r\n\t\t\tif (type == null)\r\n\t\t\t{\r\n\t\t\t\tConsole.WriteLine(\"Type {0} not found in PhpNetCore assembly.\", args[0]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tBindingFlags flags;\r\n\t\t\tif (args.Length >= 2)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tflags = (BindingFlags)Enum.Parse(typeof(BindingFlags), args[1], true);\r\n\t\t\t\t}\r\n\t\t\t\tcatch (Exception)\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.WriteLine(\"Invalid binding flags {0}.\", args[1]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tflags = BindingFlags.Public | BindingFlags.Static;\r\n\t\t\t}\r\n\r\n\t\t\tPHP.Core.Emit.MethodsGenerator.Generate(type, flags);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/ReflectionCacheGen/ReflectionCacheGen.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"4.0\">\r\n  <PropertyGroup>\r\n    <ProjectType>Local</ProjectType>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{5A9756D5-34E6-4249-BED3-DDB3D87D3776}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ApplicationIcon>App.ico</ApplicationIcon>\r\n    <AssemblyKeyContainerName>\r\n    </AssemblyKeyContainerName>\r\n    <AssemblyName>rcg</AssemblyName>\r\n    <AssemblyOriginatorKeyFile>\r\n    </AssemblyOriginatorKeyFile>\r\n    <DefaultClientScript>JScript</DefaultClientScript>\r\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\r\n    <DelaySign>false</DelaySign>\r\n    <OutputType>Exe</OutputType>\r\n    <RootNamespace>ReflectionCacheGen</RootNamespace>\r\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r\n    <StartupObject>\r\n    </StartupObject>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <UpgradeBackupLocation>\r\n    </UpgradeBackupLocation>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <OldToolsVersion>3.5</OldToolsVersion>\r\n    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>false</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>full</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r\n    <BaseAddress>285212672</BaseAddress>\r\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r\n    <ConfigurationOverrideFile>\r\n    </ConfigurationOverrideFile>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <DocumentationFile>\r\n    </DocumentationFile>\r\n    <DebugSymbols>false</DebugSymbols>\r\n    <FileAlignment>4096</FileAlignment>\r\n    <NoStdLib>false</NoStdLib>\r\n    <NoWarn>\r\n    </NoWarn>\r\n    <Optimize>true</Optimize>\r\n    <RegisterForComInterop>false</RegisterForComInterop>\r\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <WarningLevel>4</WarningLevel>\r\n    <DebugType>none</DebugType>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"PhpNetCore\">\r\n      <Name>PhpNetCore</Name>\r\n      <HintPath>..\\..\\Source\\Core\\Bin\\Debug\\PhpNetCore.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\">\r\n      <Name>System</Name>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"App.ico\" />\r\n    <Compile Include=\"AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Main.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>Windows Installer 3.1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n    <PostBuildEvent>\r\n    </PostBuildEvent>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "Tools/Tools.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 2012\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ReflectionCacheGen\", \"ReflectionCacheGen\\ReflectionCacheGen.csproj\", \"{5A9756D5-34E6-4249-BED3-DDB3D87D3776}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ChainGen\", \"ChainGen\\ChainGen.csproj\", \"{5C044685-AC6A-4A36-9C0B-BA205A0C6305}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"PhpNetTester\", \"PhpNetTester\\PhpNetTester.csproj\", \"{A0551766-9A49-46FD-817E-EF3181AAB0F2}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ClassDynamizer\", \"ClassDynamizer\\ClassDynamizer.csproj\", \"{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"VersionReplacer\", \"VersionReplacer\\VersionReplacer.csproj\", \"{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"CsLex\", \"CsLex\\CsLex.csproj\", \"{B238564F-595A-4449-9E7A-CC181AE6E966}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"gppg\", \"gppg\\gppg.csproj\", \"{462853ED-74F8-49FD-AD69-B098B93357E7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(TeamFoundationVersionControl) = preSolution\r\n\t\tSccNumberOfProjects = 8\r\n\t\tSccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}\r\n\t\tSccTeamFoundationServer = https://team.corp.devsense.com:8443/tfs/projects\r\n\t\tSccLocalPath0 = .\r\n\t\tSccProjectUniqueName1 = ReflectionCacheGen\\\\ReflectionCacheGen.csproj\r\n\t\tSccProjectName1 = ReflectionCacheGen\r\n\t\tSccLocalPath1 = ReflectionCacheGen\r\n\t\tSccProjectUniqueName2 = ChainGen\\\\ChainGen.csproj\r\n\t\tSccProjectName2 = ChainGen\r\n\t\tSccLocalPath2 = ChainGen\r\n\t\tSccProjectUniqueName3 = PhpNetTester\\\\PhpNetTester.csproj\r\n\t\tSccProjectName3 = PhpNetTester\r\n\t\tSccLocalPath3 = PhpNetTester\r\n\t\tSccProjectUniqueName4 = ClassDynamizer\\\\ClassDynamizer.csproj\r\n\t\tSccProjectName4 = ClassDynamizer\r\n\t\tSccLocalPath4 = ClassDynamizer\r\n\t\tSccProjectUniqueName5 = VersionReplacer\\\\VersionReplacer.csproj\r\n\t\tSccProjectName5 = VersionReplacer\r\n\t\tSccLocalPath5 = VersionReplacer\r\n\t\tSccProjectUniqueName6 = CsLex\\\\CsLex.csproj\r\n\t\tSccProjectName6 = CsLex\r\n\t\tSccLocalPath6 = CsLex\r\n\t\tSccProjectUniqueName7 = gppg\\\\gppg.csproj\r\n\t\tSccProjectName7 = gppg\r\n\t\tSccLocalPath7 = gppg\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{5A9756D5-34E6-4249-BED3-DDB3D87D3776}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{5C044685-AC6A-4A36-9C0B-BA205A0C6305}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{A0551766-9A49-46FD-817E-EF3181AAB0F2}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{C066E66F-321F-45C6-BCE3-F09DAABA8E9F}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|Any CPU.ActiveCfg = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|Mixed Platforms.Build.0 = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|Win32.ActiveCfg = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|Any CPU.ActiveCfg = Release|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|Mixed Platforms.ActiveCfg = Release|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|Mixed Platforms.Build.0 = Release|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|Win32.ActiveCfg = Release|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}.Release|x86.Build.0 = Release|x86\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{B238564F-595A-4449-9E7A-CC181AE6E966}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|Win32.ActiveCfg = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|Win32.ActiveCfg = Release|Any CPU\r\n\t\t{462853ED-74F8-49FD-AD69-B098B93357E7}.Release|x86.ActiveCfg = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Tools/UpdateFileVersionFromChangeset.cmd",
    "content": "@echo off\n\nREM run this batch file with the path of your root folder as the first argument,\nREM or from within the root folder.\n\ncall \"%VS140COMNTOOLS%\\vsvars32.bat\"\n\nREM when the second argument is blank we will assume we're already in the project root.\nif %2==\"\" (goto :getversion)\nREM moving to the root specified in the first argument\ncd %1\nREM removing the first argument from the list\nSHIFT /1\n\n:getversion\nREM determining changeset number ...\ntf history . /r /noprompt /stopafter:1 /version:W > tf.output 2>nul\n\nif not [%ERRORLEVEL%]==[0] (goto :fail)\n\nSET CHANGESET=0\nFOR /F \"tokens=1 skip=2\" %%N IN (tf.output) DO @SET CHANGESET=%%N\ndel /F /Q tf.output\nif [%CHANGESET%]==[0] (goto :done)\n\n:start\nif %1==\"\" (goto :done)\n\"%0\\..\\VersionReplacer.exe\" %1 %CHANGESET%\nSHIFT /1\ngoto :start\n\n:done\nREM Done.\n\n:fail\nREM we hit an error running the tf program. exiting with a nice message\necho \"Oh dear, it seems your environment isn't set-up properly for teamfoundation.\"\n"
  },
  {
    "path": "Tools/UpdateFileVersionFromChangeset.sh",
    "content": "#!/bin/bash\n\n# determining changeset number (just the last git-tfs-id)\nCHANGESET=\"$(git log --grep \"git-tfs-id\" --max-count=1 | grep git-tfs-id | egrep -o '[[:digit:]]+$')\"\nwhile [ -n \"$1\" ] ; do\n\t\"$(dirname $0)/VersionReplacer.exe\" \"$1\" \"$CHANGESET\"\n\tshift\ndone"
  },
  {
    "path": "Tools/VersionReplacer/Program.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.IO;\r\nusing System.Text.RegularExpressions;\r\n\r\nnamespace VersionReplacer\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            var fname = args[0];\r\n            var changeset = args[1];\r\n            bool isvsix = fname.EndsWith(\".vsixmanifest\", StringComparison.InvariantCultureIgnoreCase);\r\n            bool iscs = fname.EndsWith(\".cs\", StringComparison.InvariantCultureIgnoreCase);\r\n\r\n            Console.WriteLine(\"Updating version info in '{0}'\", fname);\r\n\r\n            if (!isvsix && !iscs)\r\n                return;\r\n\r\n            MatchEvaluator versionChanger = (match) =>\r\n                {\r\n                    var line = match.Groups[0].Value;\r\n                    var old = match.Groups[1];\r\n                    return line.Remove(old.Index - match.Groups[0].Index) + changeset + line.Substring(old.Index - match.Groups[0].Index + old.Length);\r\n                };\r\n\r\n            var result = new StringBuilder();\r\n            bool changed = false;\r\n            foreach (var line in File.ReadAllLines(fname))\r\n            {\r\n                if (isvsix)\r\n                {\r\n                    if (line.Contains(\"<Version>\"))\r\n                    {\r\n                        var regex = new Regex(@\"<Version>[0-9]+\\.[0-9]+\\.(.+)</Version>\");\r\n                        var newline = (regex.Replace(line, versionChanger));\r\n                        result.AppendLine(newline);\r\n\r\n                        changed |= newline != line;\r\n                        continue;\r\n                    }\r\n                }\r\n                else if (iscs)\r\n                {\r\n                    if (line.Contains(\"public const string\"))\r\n                    {\r\n                        var newline = line;\r\n\r\n                        if (line.Contains(\"Version\"))\r\n                        {\r\n                            var regex = new Regex(@\"Version\\s+\\=\\s+\"\"[0-9]+\\.[0-9]+\\.(.+)\"\"\");\r\n                            newline = (regex.Replace(line, versionChanger));\r\n                            result.AppendLine(newline);\r\n                        }\r\n                        else if (line.Contains(\"ChangesetNumber\"))\r\n                        {\r\n                            var regex = new Regex(@\"ChangesetNumber\\s+\\=\\s+\"\"(.+)\"\"\");\r\n                            newline = (regex.Replace(line, versionChanger));\r\n                            result.AppendLine(newline);\r\n                        }\r\n\r\n                        changed |= (newline != line);\r\n                        continue;\r\n                    }\r\n\r\n                    if (line.Contains(\"[assembly: AssemblyFileVersion\"))\r\n                    {\r\n                        var regex = new Regex(@\"[assembly\\:\\s+AssemblyFileVersion\\(\"\"[0-9]+\\.[0-9]+\\.[0-9]+\\.(.+)\"\"\\)\");\r\n                        var newline = (regex.Replace(line, versionChanger));\r\n                        result.AppendLine(newline);\r\n\r\n                        changed |= newline != line;\r\n                        continue;\r\n                    }\r\n                }\r\n                \r\n                // copy the line to output:\r\n                result.AppendLine(line);\r\n            }\r\n\r\n            if (changed)\r\n            {\r\n                // do not modify the file if not necessary (causing project to rebuild)\r\n                File.SetAttributes(fname, FileAttributes.Normal);\r\n                File.WriteAllText(fname, result.ToString());\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Tools/VersionReplacer/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"VersionReplacer\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"VersionReplacer\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2012\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"5bec0486-d5ed-42e5-aefc-0cebf4a4b374\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "Tools/VersionReplacer/VersionReplacer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{0C213A39-E376-4C9B-8A7B-E5BC8AC71DAB}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>VersionReplacer</RootNamespace>\r\n    <AssemblyName>VersionReplacer</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PostBuildEvent>xcopy /Q /Y \"$(TargetPath)\" \"$(SolutionDir)\"</PostBuildEvent>\r\n  </PropertyGroup>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Tools/al.exe.config",
    "content": "<?xml version =\"1.0\"?>\r\n<configuration>\r\n    <startup useLegacyV2RuntimeActivationPolicy=\"true\">\r\n        <supportedRuntime version=\"v4.0.30319\"/>\r\n    </startup>\r\n</configuration>\r\n"
  },
  {
    "path": "Tools/gacutil.exe.config",
    "content": "<?xml version =\"1.0\"?>\r\n<configuration>\r\n    <startup useLegacyV2RuntimeActivationPolicy=\"true\">\r\n        <requiredRuntime safemode=\"true\" imageVersion=\"v4.0.30319\" version=\"v4.0.30319\"/>\r\n    </startup>\r\n</configuration>\r\n"
  },
  {
    "path": "Tools/gppg/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/CodeGenerator.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nnamespace gpcc\r\n{\r\n\tpublic class CodeGenerator\r\n\t{\r\n\t\tpublic Grammar grammar;\r\n\t\tprivate TextWriter output;\r\n\t\tpublic TextWriter Output\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.output;\r\n\t\t\t}\r\n\t\t\tset\r\n\t\t\t{\r\n\t\t\t\tthis.output = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic CodeGenerator(TextWriter output)\r\n\t\t{\r\n\t\t\tthis.output = output;\r\n\t\t}\r\n\t\tpublic void Generate(List<State> states, Grammar grammar)\r\n\t\t{\r\n\t\t\tthis.grammar = grammar;\r\n\t\t\tthis.GenerateCopyright();\r\n\t\t\tthis.GenerateUsingHeader();\r\n\t\t\tthis.output.WriteLine(grammar.headerCode);\r\n\t\t\tif (grammar.Namespace != null)\r\n\t\t\t{\r\n\t\t\t\tthis.output.WriteLine(\"namespace {0}\", grammar.Namespace);\r\n\t\t\t\tthis.output.WriteLine(\"{\");\r\n\t\t\t}\r\n\t\t\tthis.GenerateTokens(grammar.terminals);\r\n\t\t\tthis.GenerateClassHeader(grammar.ParserName);\r\n\t\t\tthis.InsertCode(grammar.prologCode);\r\n\t\t\tthis.GenerateInitializeMethod(grammar.ParserName, states, grammar.productions, grammar.nonTerminals);\r\n\t\t\tthis.GenerateActionMethod(grammar.productions);\r\n\t\t\tthis.GenerateToStringMethod();\r\n\t\t\tthis.InsertCode(grammar.epilogCode);\r\n\t\t\tthis.GenerateClassFooter();\r\n\t\t\tif (grammar.Namespace != null)\r\n\t\t\t{\r\n\t\t\t\tthis.output.WriteLine(\"}\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void GenerateCopyright()\r\n\t\t{\r\n\t\t\tthis.output.WriteLine(\"// This code was generated by the Gardens Point Parser Generator\");\r\n\t\t\tthis.output.WriteLine(\"// Copyright (c) Wayne Kelly, QUT 2005\");\r\n            this.output.WriteLine(\"// Copyright (c) DEVSENSE, 2012\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate void GenerateUsingHeader()\r\n\t\t{\r\n\t\t\tthis.output.WriteLine(\"using System;\");\r\n\t\t\tthis.output.WriteLine(\"using System.Text;\");\r\n\t\t\tthis.output.WriteLine(\"using System.Collections.Generic;\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate void GenerateTokens(Dictionary<string, Terminal> terminals)\r\n\t\t{\r\n\t\t\tthis.output.Write(\"{0} enum {1} {{\", this.grammar.Visibility, this.grammar.TokenName);\r\n\t\t\tbool flag = true;\r\n\t\t\tforeach (Terminal current in terminals.Values)\r\n\t\t\t{\r\n\t\t\t\tif (current.symbolic)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!flag)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.output.Write(\",\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.output.Write(\"{0}={1}\", current.ToString(), current.num);\r\n\t\t\t\t\tflag = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.output.WriteLine(\"};\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate string GenerateValueType()\r\n\t\t{\r\n\t\t\tif (this.grammar.unionType != null)\r\n\t\t\t{\r\n\t\t\t\tthis.output.WriteLine(\"{0} partial struct {1}\", this.grammar.Visibility, this.grammar.ValueTypeName);\r\n\t\t\t\tthis.InsertCode(this.grammar.unionType);\r\n\t\t\t\treturn this.grammar.ValueTypeName;\r\n\t\t\t}\r\n\t\t\treturn \"int\";\r\n\t\t}\r\n\t\tprivate void GenerateClassHeader(string name)\r\n\t\t{\r\n\t\t\tstring text = this.GenerateValueType();\r\n\t\t\tthis.output.WriteLine(\"{0} {1} partial class {2}: ShiftReduceParser<{3},{4}>\", new object[]\r\n\t\t\t{\r\n\t\t\t\tthis.grammar.Visibility,\r\n\t\t\t\tthis.grammar.Attributes,\r\n\t\t\t\tname,\r\n\t\t\t\ttext,\r\n\t\t\t\tthis.grammar.PositionType\r\n\t\t\t});\r\n\t\t\tthis.output.WriteLine(\"{\");\r\n\t\t}\r\n\t\tprivate void GenerateClassFooter()\r\n\t\t{\r\n\t\t\tthis.output.WriteLine(\"}\");\r\n\t\t}\r\n\t\tprivate void GenerateInitializeMethod(string className, List<State> states, List<Production> productions, Dictionary<string, NonTerminal> nonTerminals)\r\n\t\t{\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  protected override string[] NonTerminals { get { return nonTerminals; } }\");\r\n\t\t\tthis.output.WriteLine(\"  private static string[] nonTerminals;\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  protected override State[] States { get { return states; } }\");\r\n\t\t\tthis.output.WriteLine(\"  private static readonly State[] states;\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  protected override Rule[] Rules { get { return rules; } }\");\r\n\t\t\tthis.output.WriteLine(\"  private static readonly Rule[] rules;\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  #region Construction\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  static {0}()\", className);\r\n\t\t\tthis.output.WriteLine(\"  {\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.GenerateStates(states);\r\n\t\t\tthis.output.WriteLine();\r\n            this.output.WriteLine(\"    #region rules\");\r\n\t\t\tthis.output.WriteLine(\"    rules = new Rule[]\");\r\n            this.output.WriteLine(\"    {\");\r\n            this.output.WriteLine(\"    default(Rule),\");    // 0th rule\r\n            foreach (Production current in productions)\r\n\t\t\t\tthis.GenerateRule(current);\r\n            this.output.WriteLine(\"    };\");\r\n            this.output.WriteLine(\"    #endregion\");\r\n\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.Write(\"    nonTerminals = new string[] {\\\"\\\", \");\r\n\t\t\tint num = 37;\r\n\t\t\tforeach (NonTerminal current2 in nonTerminals.Values)\r\n\t\t\t{\r\n\t\t\t\tstring text = string.Format(\"\\\"{0}\\\", \", current2.ToString());\r\n\t\t\t\tnum += text.Length;\r\n\t\t\t\tthis.output.Write(text);\r\n\t\t\t\tif (num > 70)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.WriteLine();\r\n\t\t\t\t\tthis.output.Write(\"      \");\r\n\t\t\t\t\tnum = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.output.WriteLine(\"};\");\r\n\t\t\tthis.output.WriteLine(\"  }\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t\tthis.output.WriteLine(\"  #endregion\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate void GenerateStates(List<State> states)\r\n\t\t{\r\n            this.output.WriteLine(\"    #region states\");\r\n\t\t\tthis.output.WriteLine(\"    states = new State[]\");\r\n\t\t\tthis.output.WriteLine(\"    {\");\r\n\t\t\tfor (int i = 0; i < states.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tthis.output.Write(\"      new State({0}, \", i);\r\n\t\t\t\tint defaultAction = this.GetDefaultAction(states[i]);\r\n\t\t\t\tif (defaultAction != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.Write(defaultAction);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.Write(\"new int[] {\");\r\n\t\t\t\t\tbool flag = true;\r\n\t\t\t\t\tforeach (KeyValuePair<Terminal, ParserAction> current in states[i].parseTable)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!flag)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.output.Write(\",\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.output.Write(\"{0},{1}\", current.Key.num, current.Value.ToNum());\r\n\t\t\t\t\t\tflag = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.output.Write(\"}\");\r\n\t\t\t\t}\r\n\t\t\t\tif (states[i].nonTerminalTransitions.Count > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.Write(\", new int[] {\");\r\n\t\t\t\t\tbool flag2 = true;\r\n\t\t\t\t\tforeach (Transition current2 in states[i].nonTerminalTransitions.Values)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!flag2)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.output.Write(\",\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.output.Write(\"{0},{1}\", current2.A.num, current2.next.num);\r\n\t\t\t\t\t\tflag2 = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.output.Write(\"}\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.output.WriteLine(\"),\");\r\n\t\t\t}\r\n\t\t\tthis.output.WriteLine(\"    };\");\r\n            this.output.WriteLine(\"    #endregion\");\r\n\t\t}\r\n\t\tprivate int GetDefaultAction(State state)\r\n\t\t{\r\n\t\t\tIEnumerator<ParserAction> enumerator = state.parseTable.Values.GetEnumerator();\r\n\t\t\tenumerator.MoveNext();\r\n\t\t\tint num = enumerator.Current.ToNum();\r\n\t\t\tif (num > 0)\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tforeach (KeyValuePair<Terminal, ParserAction> current in state.parseTable)\r\n\t\t\t{\r\n\t\t\t\tif (current.Value.ToNum() != num)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn num;\r\n\t\t}\r\n\t\tprivate void GenerateRule(Production production)\r\n\t\t{\r\n            this.output.Write(\"    new Rule(\" + production.lhs.num + \", new int[]{\");\r\n\t\t\tbool flag = true;\r\n\t\t\tforeach (Symbol current in production.rhs)\r\n\t\t\t{\r\n\t\t\t\tif (!flag)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.Write(\",\");\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tflag = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.output.Write(\"{0}\", current.num);\r\n\t\t\t}\r\n\t\t\tthis.output.WriteLine(\"}),\");\r\n\t\t}\r\n\t\tprivate void GenerateActionMethod(List<Production> productions)\r\n\t\t{\r\n\t\t\tthis.output.WriteLine(\"  protected override void DoAction(int action)\");\r\n\t\t\tthis.output.WriteLine(\"  {\");\r\n\t\t\tthis.output.WriteLine(\"    switch (action)\");\r\n\t\t\tthis.output.WriteLine(\"    {\");\r\n\t\t\tforeach (Production current in productions)\r\n\t\t\t{\r\n\t\t\t\tif (current.semanticAction != null)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.output.WriteLine(\"      case {0}: // {1}\", current.num, current.ToString());\r\n\t\t\t\t\tcurrent.semanticAction.GenerateCode(this);\r\n\t\t\t\t\tthis.output.WriteLine(\"        return;\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.output.WriteLine(\"    }\");\r\n\t\t\tthis.output.WriteLine(\"  }\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate void GenerateToStringMethod()\r\n\t\t{\r\n\t\t\tthis.output.WriteLine(\"  protected override string TerminalToString(int terminal)\");\r\n\t\t\tthis.output.WriteLine(\"  {\");\r\n\t\t\tthis.output.WriteLine(\"    if (((Tokens)terminal).ToString() != terminal.ToString())\");\r\n\t\t\tthis.output.WriteLine(\"      return ((Tokens)terminal).ToString();\");\r\n\t\t\tthis.output.WriteLine(\"    else\");\r\n\t\t\tthis.output.WriteLine(\"      return CharToString((char)terminal);\");\r\n\t\t\tthis.output.WriteLine(\"  }\");\r\n\t\t\tthis.output.WriteLine();\r\n\t\t}\r\n\t\tprivate void InsertCode(string code)\r\n\t\t{\r\n\t\t\tif (code != null)\r\n\t\t\t{\r\n\t\t\t\tStringReader stringReader = new StringReader(code);\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tstring text = stringReader.ReadLine();\r\n\t\t\t\t\tif (text == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.output.WriteLine(\"{0}\", text);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/GPCG.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nnamespace gpcc\r\n{\r\n\tinternal class GPCG\r\n\t{\r\n\t\tpublic static bool LINES = true;\r\n\t\tpublic static bool REPORT = false;\r\n\t\tprivate static void Main(string[] args)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstring filename;\r\n\t\t\t\tstring text;\r\n\t\t\t\tstring log;\r\n\t\t\t\tif (GPCG.ProcessOptions(args, out filename, out text, out log))\r\n\t\t\t\t{\r\n\t\t\t\t\tusing (TextWriter textWriter = (text != null) ? File.CreateText(text) : Console.Out)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tParser parser = new Parser();\r\n\t\t\t\t\t\tGrammar grammar = parser.Parse(filename);\r\n\t\t\t\t\t\tLALRGenerator lALRGenerator = new LALRGenerator(grammar);\r\n\t\t\t\t\t\tList<State> states = lALRGenerator.BuildStates();\r\n\t\t\t\t\t\tlALRGenerator.ComputeLookAhead();\r\n\t\t\t\t\t\tlALRGenerator.BuildParseTable();\r\n\t\t\t\t\t\tif (GPCG.REPORT)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlALRGenerator.Report(log);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tCodeGenerator codeGenerator = new CodeGenerator(textWriter);\r\n\t\t\t\t\t\tcodeGenerator.Generate(states, grammar);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (Scanner.ParseException ex)\r\n\t\t\t{\r\n\t\t\t\tConsole.Error.WriteLine(\"Parse error (line {0}, column {1}): {2}\", ex.line, ex.column, ex.Message);\r\n\t\t\t}\r\n\t\t\tcatch (Exception ex2)\r\n\t\t\t{\r\n\t\t\t\tConsole.Error.WriteLine(\"Unexpected Error {0}\", ex2.Message);\r\n\t\t\t\tConsole.Error.WriteLine(\"Please report to w.kelly@qut.edu.au\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate static bool ProcessOptions(string[] args, out string src, out string dst, out string log)\r\n\t\t{\r\n\t\t\tsrc = null;\r\n\t\t\tdst = null;\r\n\t\t\tlog = null;\r\n\t\t\tfor (int i = 0; i < args.Length; i++)\r\n\t\t\t{\r\n\t\t\t\tstring text = args[i];\r\n\t\t\t\tif (text[0] == '-' || text[0] == '/')\r\n\t\t\t\t{\r\n\t\t\t\t\tstring key;\r\n\t\t\t\t\tif ((key = text.Substring(1)) != null)\r\n\t\t\t\t\t{\r\n                        switch (key)\r\n                        {\r\n                            case \"?\":\r\n                            case \"h\":\r\n                            case \"help\":\r\n\t\t\t\t\t\t\t    GPCG.DisplayHelp();\r\n\t\t\t\t\t\t\t\treturn false;\r\n\r\n                            case \"v\":\r\n                            case \"version\":\r\n                                GPCG.DisplayVersion();\r\n\t\t\t\t\t\t\t\treturn false;\r\n\r\n                            case \"l\":\r\n                            case \"no-lines\":\r\n                                GPCG.LINES = false;\r\n                                break;\r\n\r\n                            case \"r\":\r\n                            case \"report\":\r\n                                GPCG.REPORT = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n                            \r\n                            default:\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (src == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsrc = text;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (dst == null)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdst = text;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (log == null)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlog = text;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (src == null)\r\n\t\t\t{\r\n\t\t\t\tGPCG.DisplayHelp();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tprivate static void DisplayHelp()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Usage gppg [options] src_file [dst_file]\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t\tConsole.WriteLine(\"-help:       Display this help message\");\r\n\t\t\tConsole.WriteLine(\"-version:    Display version information\");\r\n\t\t\tConsole.WriteLine(\"-report:     Display LALR(1) parsing states\");\r\n\t\t\tConsole.WriteLine(\"-no-lines:   Suppress the generation of #line directives\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t}\r\n\t\tprivate static void DisplayVersion()\r\n\t\t{\r\n\t\t\tConsole.WriteLine(\"Gardens Point Parser Generator (gppg) beta 0.81 28/10/2005\");\r\n\t\t\tConsole.WriteLine(\"Written by Wayne Kelly\");\r\n\t\t\tConsole.WriteLine(\"w.kelly@qut.edu.au\");\r\n\t\t\tConsole.WriteLine(\"Queensland University of Technology\");\r\n\t\t\tConsole.WriteLine();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Grammar.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace gpcc\r\n{\r\n\tpublic class Grammar\r\n\t{\r\n\t\tpublic List<Production> productions = new List<Production>();\r\n\t\tpublic string unionType;\r\n\t\tpublic int NumActions;\r\n\t\tpublic string headerCode;\r\n\t\tpublic string prologCode;\r\n\t\tpublic string epilogCode;\r\n\t\tpublic NonTerminal startSymbol;\r\n\t\tpublic Production rootProduction;\r\n\t\tpublic Dictionary<string, NonTerminal> nonTerminals = new Dictionary<string, NonTerminal>();\r\n\t\tpublic Dictionary<string, Terminal> terminals = new Dictionary<string, Terminal>();\r\n\t\tpublic string Namespace;\r\n\t\tpublic string Visibility = \"public\";\r\n\t\tpublic string Attributes = \"\";\r\n\t\tpublic string ParserName = \"Parser\";\r\n\t\tpublic string TokenName = \"Tokens\";\r\n\t\tpublic string ValueTypeName = \"ValueType\";\r\n\t\tpublic string PositionType;\r\n\t\tpublic Grammar()\r\n\t\t{\r\n\t\t\tthis.LookupTerminal(GrammarToken.Symbol, \"ERROR\");\r\n\t\t\tthis.LookupTerminal(GrammarToken.Symbol, \"EOF\");\r\n\t\t}\r\n\t\tpublic Terminal LookupTerminal(GrammarToken token, string name)\r\n\t\t{\r\n\t\t\tif (!this.terminals.ContainsKey(name))\r\n\t\t\t{\r\n\t\t\t\tthis.terminals[name] = new Terminal(token == GrammarToken.Symbol, name);\r\n\t\t\t}\r\n\t\t\treturn this.terminals[name];\r\n\t\t}\r\n\t\tpublic NonTerminal LookupNonTerminal(string name)\r\n\t\t{\r\n\t\t\tif (!this.nonTerminals.ContainsKey(name))\r\n\t\t\t{\r\n\t\t\t\tthis.nonTerminals[name] = new NonTerminal(name);\r\n\t\t\t}\r\n\t\t\treturn this.nonTerminals[name];\r\n\t\t}\r\n\t\tpublic void AddProduction(Production production)\r\n\t\t{\r\n\t\t\tthis.productions.Add(production);\r\n\t\t\tproduction.num = this.productions.Count;\r\n\t\t}\r\n\t\tpublic void CreateSpecialProduction(NonTerminal root)\r\n\t\t{\r\n\t\t\tthis.rootProduction = new Production(this.LookupNonTerminal(\"$accept\"));\r\n\t\t\tthis.AddProduction(this.rootProduction);\r\n\t\t\tthis.rootProduction.rhs.Add(root);\r\n\t\t\tthis.rootProduction.rhs.Add(this.LookupTerminal(GrammarToken.Symbol, \"EOF\"));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/GrammarToken.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic enum GrammarToken\r\n\t{\r\n\t\tEof,\r\n\t\tSymbol,\r\n\t\tLiteral,\r\n\t\tAction,\r\n\t\tDivider,\r\n\t\tColon,\r\n\t\tSemiColon,\r\n\t\tEndOfSection,\r\n\t\tUnion,\r\n\t\tType,\r\n\t\tToken,\r\n\t\tLeft,\r\n\t\tRight,\r\n\t\tNonAssoc,\r\n\t\tPrelude,\r\n\t\tProlog,\r\n\t\tEpilog,\r\n\t\tKind,\r\n\t\tLeftCurly,\r\n\t\tRightCurly,\r\n\t\tPrec,\r\n\t\tStart,\r\n\t\tNamespace,\r\n\t\tVisibility,\r\n\t\tAttributes,\r\n\t\tParserName,\r\n\t\tGenerateTokens,\r\n\t\tTokenName,\r\n\t\tValueTypeName,\r\n\t\tPositionType\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/LALRGenerator.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace gpcc\r\n{\r\n\tpublic class LALRGenerator : LR0Generator\r\n\t{\r\n\t\tprivate Stack<Transition> S;\r\n\t\tpublic LALRGenerator(Grammar grammar) : base(grammar)\r\n\t\t{\r\n\t\t}\r\n\t\tpublic void ComputeLookAhead()\r\n\t\t{\r\n\t\t\tthis.ComputeDRs();\r\n\t\t\tthis.ComputeReads();\r\n\t\t\tthis.ComputeIncludes();\r\n\t\t\tthis.ComputeFollows();\r\n\t\t\tthis.ComputeLA();\r\n\t\t}\r\n\t\tprivate void ComputeDRs()\r\n\t\t{\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current2 in current.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent2.DR = current2.next.terminalTransitions;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void ComputeReads()\r\n\t\t{\r\n\t\t\tthis.S = new Stack<Transition>();\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current2 in current.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent2.N = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tforeach (State current3 in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current4 in current3.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current4.N == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.TraverseReads(current4, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void TraverseReads(Transition x, int k)\r\n\t\t{\r\n\t\t\tthis.S.Push(x);\r\n\t\t\tx.N = k;\r\n\t\t\tx.Read = new Set<Terminal>(x.DR);\r\n\t\t\tforeach (Transition current in x.next.nonTerminalTransitions.Values)\r\n\t\t\t{\r\n\t\t\t\tif (current.A.IsNullable())\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current.N == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.TraverseReads(current, k + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (current.N < x.N)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx.N = current.N;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tx.Read.AddRange(current.Read);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (x.N == k)\r\n\t\t\t{\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.S.Peek().N = 2147483647;\r\n\t\t\t\t\tthis.S.Peek().Read = new Set<Terminal>(x.Read);\r\n\t\t\t\t}\r\n\t\t\t\twhile (this.S.Pop() != x);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void ComputeIncludes()\r\n\t\t{\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current2 in current.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (Production current3 in current2.A.productions)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor (int i = current3.rhs.Count - 1; i >= 0; i--)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSymbol symbol = current3.rhs[i];\r\n\t\t\t\t\t\t\tif (symbol is NonTerminal)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tState state = this.PathTo(current, current3, i);\r\n\t\t\t\t\t\t\t\tstate.nonTerminalTransitions[(NonTerminal)symbol].includes.Add(current2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!symbol.IsNullable())\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate State PathTo(State q, Production prod, int prefix)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < prefix; i++)\r\n\t\t\t{\r\n\t\t\t\tSymbol key = prod.rhs[i];\r\n\t\t\t\tif (!q.Goto.ContainsKey(key))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tq = q.Goto[key];\r\n\t\t\t}\r\n\t\t\treturn q;\r\n\t\t}\r\n\t\tprivate void ComputeFollows()\r\n\t\t{\r\n\t\t\tthis.S = new Stack<Transition>();\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current2 in current.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent2.N = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tforeach (State current3 in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Transition current4 in current3.nonTerminalTransitions.Values)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current4.N == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.TraverseFollows(current4, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void TraverseFollows(Transition x, int k)\r\n\t\t{\r\n\t\t\tthis.S.Push(x);\r\n\t\t\tx.N = k;\r\n\t\t\tx.Follow = new Set<Terminal>(x.Read);\r\n\t\t\tforeach (Transition current in x.includes)\r\n\t\t\t{\r\n\t\t\t\tif (x != current)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current.N == 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.TraverseFollows(current, k + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (current.N < x.N)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tx.N = current.N;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tx.Follow.AddRange(current.Follow);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (x.N == k)\r\n\t\t\t{\r\n\t\t\t\tdo\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.S.Peek().N = 2147483647;\r\n\t\t\t\t\tthis.S.Peek().Follow = new Set<Terminal>(x.Follow);\r\n\t\t\t\t}\r\n\t\t\t\twhile (this.S.Pop() != x);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void ComputeLA()\r\n\t\t{\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (ProductionItem current2 in current.all_items)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current2.isReduction())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcurrent2.LA = new Set<Terminal>();\r\n\t\t\t\t\t\tforeach (State current3 in this.states)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.PathTo(current3, current2.production, current2.pos) == current)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tNonTerminal lhs = current2.production.lhs;\r\n\t\t\t\t\t\t\t\tif (current3.nonTerminalTransitions.ContainsKey(lhs))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tTransition transition = current3.nonTerminalTransitions[lhs];\r\n\t\t\t\t\t\t\t\t\tcurrent2.LA.AddRange(transition.Follow);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/LR0Generator.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nnamespace gpcc\r\n{\r\n\tpublic class LR0Generator\r\n\t{\r\n\t\tprotected List<State> states = new List<State>();\r\n\t\tprotected Grammar grammar;\r\n\t\tprivate Dictionary<Symbol, List<State>> accessedBy = new Dictionary<Symbol, List<State>>();\r\n\t\tpublic LR0Generator(Grammar grammar)\r\n\t\t{\r\n\t\t\tthis.grammar = grammar;\r\n\t\t}\r\n\t\tpublic List<State> BuildStates()\r\n\t\t{\r\n\t\t\tthis.ExpandState(this.grammar.rootProduction.lhs, new State(this.grammar.rootProduction));\r\n\t\t\treturn this.states;\r\n\t\t}\r\n\t\tprivate void ExpandState(Symbol sym, State newState)\r\n\t\t{\r\n\t\t\tnewState.accessedBy = sym;\r\n\t\t\tthis.states.Add(newState);\r\n\t\t\tif (!this.accessedBy.ContainsKey(sym))\r\n\t\t\t{\r\n\t\t\t\tthis.accessedBy[sym] = new List<State>();\r\n\t\t\t}\r\n\t\t\tthis.accessedBy[sym].Add(newState);\r\n\t\t\tnewState.AddClosure();\r\n\t\t\tthis.ComputeGoto(newState);\r\n\t\t}\r\n\t\tprivate void ComputeGoto(State state)\r\n\t\t{\r\n\t\t\tforeach (ProductionItem current in state.all_items)\r\n\t\t\t{\r\n\t\t\t\tif (!current.expanded && !current.isReduction())\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent.expanded = true;\r\n\t\t\t\t\tSymbol symbol = current.production.rhs[current.pos];\r\n\t\t\t\t\tList<ProductionItem> list = new List<ProductionItem>();\r\n\t\t\t\t\tlist.Add(new ProductionItem(current.production, current.pos + 1));\r\n\t\t\t\t\tforeach (ProductionItem current2 in state.all_items)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!current2.expanded && !current2.isReduction())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSymbol symbol2 = current2.production.rhs[current2.pos];\r\n\t\t\t\t\t\t\tif (symbol == symbol2)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcurrent2.expanded = true;\r\n\t\t\t\t\t\t\t\tlist.Add(new ProductionItem(current2.production, current2.pos + 1));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tState state2 = this.FindExistingState(symbol, list);\r\n\t\t\t\t\tif (state2 == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tState state3 = new State(list);\r\n\t\t\t\t\t\tstate.AddGoto(symbol, state3);\r\n\t\t\t\t\t\tthis.ExpandState(symbol, state3);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstate.AddGoto(symbol, state2);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate State FindExistingState(Symbol sym, List<ProductionItem> itemSet)\r\n\t\t{\r\n\t\t\tif (this.accessedBy.ContainsKey(sym))\r\n\t\t\t{\r\n\t\t\t\tforeach (State current in this.accessedBy[sym])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (ProductionItem.SameProductions(current.kernal_items, itemSet))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn current;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tpublic void BuildParseTable()\r\n\t\t{\r\n\t\t\tforeach (State current in this.states)\r\n\t\t\t{\r\n\t\t\t\tforeach (Terminal current2 in current.terminalTransitions)\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrent.parseTable[current2] = new Shift(current.Goto[current2]);\r\n\t\t\t\t}\r\n\t\t\t\tforeach (ProductionItem current3 in current.all_items)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current3.isReduction())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (current3.production == this.grammar.rootProduction)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tforeach (Terminal current4 in this.grammar.terminals.Values)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcurrent.parseTable[current4] = new Reduce(current3);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tforeach (Terminal current5 in current3.LA)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (current.parseTable.ContainsKey(current5))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tParserAction parserAction = current.parseTable[current5];\r\n\t\t\t\t\t\t\t\tif (parserAction is Reduce)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tConsole.Error.WriteLine(\"Reduce/Reduce conflict, state {0}: {1} vs {2} on {3}\", new object[]\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcurrent.num,\r\n\t\t\t\t\t\t\t\t\t\tcurrent3.production.num,\r\n\t\t\t\t\t\t\t\t\t\t((Reduce)parserAction).item.production.num,\r\n\t\t\t\t\t\t\t\t\t\tcurrent5\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tif (((Reduce)parserAction).item.production.num > current3.production.num)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcurrent.parseTable[current5] = new Reduce(current3);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (current3.production.prec != null && current5.prec != null)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif (current3.production.prec.prec > current5.prec.prec || (current3.production.prec.prec == current5.prec.prec && current3.production.prec.type == PrecType.left))\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcurrent.parseTable[current5] = new Reduce(current3);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tConsole.Error.WriteLine(\"Shift/Reduce conflict, state {0} on {1}\", current.num, current5);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcurrent.parseTable[current5] = new Reduce(current3);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic void Report(string log)\r\n\t\t{\r\n\t\t\tusing (TextWriter textWriter = (log != null) ? File.CreateText(log) : Console.Out)\r\n\t\t\t{\r\n\t\t\t\ttextWriter.WriteLine(\"Grammar\");\r\n\t\t\t\tNonTerminal nonTerminal = null;\r\n\t\t\t\tforeach (Production current in this.grammar.productions)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current.lhs != nonTerminal)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnonTerminal = current.lhs;\r\n\t\t\t\t\t\ttextWriter.WriteLine();\r\n\t\t\t\t\t\ttextWriter.Write(\"{0,5} {1}: \", current.num, nonTerminal);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttextWriter.Write(\"{0,5} {1}| \", current.num, new string(' ', nonTerminal.ToString().Length));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (int i = 0; i < current.rhs.Count - 1; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttextWriter.Write(\"{0} \", current.rhs[i].ToString());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (current.rhs.Count > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttextWriter.WriteLine(\"{0}\", current.rhs[current.rhs.Count - 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttextWriter.WriteLine(\"/* empty */\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttextWriter.WriteLine();\r\n\t\t\t\tforeach (State current2 in this.states)\r\n\t\t\t\t{\r\n\t\t\t\t\ttextWriter.WriteLine(current2.ToString());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/NonTerminal.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace gpcc\r\n{\r\n\tpublic class NonTerminal : Symbol\r\n\t{\r\n\t\tprivate static int count;\r\n\t\tprivate int n;\r\n\t\tpublic List<Production> productions = new List<Production>();\r\n\t\tprivate object isNullable;\r\n\t\tpublic override int num\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn -this.n;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic NonTerminal(string name) : base(name)\r\n\t\t{\r\n\t\t\tthis.n = ++NonTerminal.count;\r\n\t\t}\r\n\t\tpublic override bool IsNullable()\r\n\t\t{\r\n\t\t\tif (this.isNullable == null)\r\n\t\t\t{\r\n\t\t\t\tthis.isNullable = false;\r\n\t\t\t\tforeach (Production current in this.productions)\r\n\t\t\t\t{\r\n\t\t\t\t\tbool flag = true;\r\n\t\t\t\t\tforeach (Symbol current2 in current.rhs)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!current2.IsNullable())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tflag = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (flag)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.isNullable = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn (bool)this.isNullable;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Parser.cs",
    "content": "using System;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class Parser\r\n\t{\r\n\t\tprivate Grammar grammar;\r\n\t\tprivate int tokenStartLine;\r\n\t\tprivate int tokenStartColumn;\r\n\t\tprivate GrammarToken token;\r\n\t\tprivate Scanner scanner;\r\n\t\tpublic Grammar Parse(string filename)\r\n\t\t{\r\n\t\t\tthis.scanner = new Scanner(filename);\r\n\t\t\tthis.grammar = new Grammar();\r\n\t\t\tthis.Advance();\r\n\t\t\tthis.ParseHeader();\r\n\t\t\tthis.ParseDeclarations();\r\n\t\t\tthis.ParseProductions();\r\n\t\t\tthis.ParseEpilog();\r\n\t\t\treturn this.grammar;\r\n\t\t}\r\n\t\tprivate void ParseDeclarations()\r\n\t\t{\r\n\t\t\tint num = 0;\r\n\t\t\twhile (this.token != GrammarToken.EndOfSection && this.token != GrammarToken.Eof)\r\n\t\t\t{\r\n\t\t\t\tswitch (this.token)\r\n\t\t\t\t{\r\n\t\t\t\tcase GrammarToken.Union:\r\n\t\t\t\t\tthis.grammar.unionType = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Type:\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tstring kind = null;\r\n\t\t\t\t\tif (this.token == GrammarToken.Kind)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkind = this.scanner.yylval;\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (this.token == GrammarToken.Symbol)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tNonTerminal nonTerminal = this.grammar.LookupNonTerminal(this.scanner.yylval);\r\n\t\t\t\t\t\tnonTerminal.kind = kind;\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcase GrammarToken.Token:\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tstring kind2 = null;\r\n\t\t\t\t\tif (this.token == GrammarToken.Kind)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkind2 = this.scanner.yylval;\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile (this.token == GrammarToken.Symbol)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTerminal terminal = this.grammar.LookupTerminal(this.token, this.scanner.yylval);\r\n\t\t\t\t\t\tterminal.kind = kind2;\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcase GrammarToken.Left:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tnum += 10;\r\n\t\t\t\t\twhile (this.token == GrammarToken.Symbol || this.token == GrammarToken.Literal)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTerminal terminal2 = this.grammar.LookupTerminal(this.token, this.scanner.yylval);\r\n\t\t\t\t\t\tterminal2.prec = new Precedence(PrecType.left, num);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Right:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tnum += 10;\r\n\t\t\t\t\twhile (this.token == GrammarToken.Symbol || this.token == GrammarToken.Literal)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTerminal terminal3 = this.grammar.LookupTerminal(this.token, this.scanner.yylval);\r\n\t\t\t\t\t\tterminal3.prec = new Precedence(PrecType.right, num);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.NonAssoc:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tnum += 10;\r\n\t\t\t\t\twhile (this.token == GrammarToken.Symbol || this.token == GrammarToken.Literal)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tTerminal terminal4 = this.grammar.LookupTerminal(this.token, this.scanner.yylval);\r\n\t\t\t\t\t\tterminal4.prec = new Precedence(PrecType.nonassoc, num);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Prolog:\r\n\t\t\t\t{\r\n\t\t\t\t\tGrammar expr_7B = this.grammar;\r\n\t\t\t\t\texpr_7B.prologCode += this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcase GrammarToken.Start:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tif (this.token == GrammarToken.Symbol)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.grammar.startSymbol = this.grammar.LookupNonTerminal(this.scanner.yylval);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Namespace:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.Namespace = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\twhile (this.scanner.yylval == \".\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\tGrammar expr_2FF = this.grammar;\r\n\t\t\t\t\t\texpr_2FF.Namespace = expr_2FF.Namespace + \".\" + this.scanner.yylval;\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Visibility:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.Visibility = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.Attributes:\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tStringBuilder stringBuilder = new StringBuilder(this.scanner.yylval);\r\n\t\t\t\t\twhile (this.Advance() == GrammarToken.Symbol)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstringBuilder.Append(' ');\r\n\t\t\t\t\t\tstringBuilder.Append(this.scanner.yylval);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.grammar.Attributes = stringBuilder.ToString();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcase GrammarToken.ParserName:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.ParserName = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.TokenName:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.TokenName = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.ValueTypeName:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.ValueTypeName = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase GrammarToken.PositionType:\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.grammar.PositionType = this.scanner.yylval;\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tthis.scanner.ReportError(\"Unexpected token {0} in declaration section\", new object[]\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.token\r\n\t\t\t\t});\r\n\t\t\t\tthis.Advance();\r\n\t\t\t}\r\n\t\t\tthis.Advance();\r\n\t\t}\r\n\t\tprivate void ParseProductions()\r\n\t\t{\r\n\t\t\twhile (this.token != GrammarToken.EndOfSection && this.token != GrammarToken.Eof)\r\n\t\t\t{\r\n\t\t\t\twhile (this.token == GrammarToken.Symbol)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.ParseProduction();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.Advance();\r\n\t\t}\r\n\t\tprivate void ParseProduction()\r\n\t\t{\r\n\t\t\tNonTerminal nonTerminal = null;\r\n\t\t\tif (this.token == GrammarToken.Symbol)\r\n\t\t\t{\r\n\t\t\t\tnonTerminal = this.grammar.LookupNonTerminal(this.scanner.yylval);\r\n\t\t\t\tif (this.grammar.startSymbol == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.grammar.startSymbol = nonTerminal;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.grammar.productions.Count == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.grammar.CreateSpecialProduction(this.grammar.startSymbol);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.scanner.ReportError(\"lhs symbol expected\", new object[0]);\r\n\t\t\t}\r\n\t\t\tthis.Advance();\r\n\t\t\tif (this.token != GrammarToken.Colon)\r\n\t\t\t{\r\n\t\t\t\tthis.scanner.ReportError(\"Colon expected\", new object[0]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Advance();\r\n\t\t\t}\r\n\t\t\tthis.ParseRhs(nonTerminal);\r\n\t\t\twhile (this.token == GrammarToken.Divider)\r\n\t\t\t{\r\n\t\t\t\tthis.Advance();\r\n\t\t\t\tthis.ParseRhs(nonTerminal);\r\n\t\t\t}\r\n\t\t\tif (this.token != GrammarToken.SemiColon)\r\n\t\t\t{\r\n\t\t\t\tthis.scanner.ReportError(\"Semicolon expected\", new object[0]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.Advance();\r\n\t\t}\r\n\t\tprivate void ParseRhs(NonTerminal lhs)\r\n\t\t{\r\n\t\t\tProduction production = new Production(lhs);\r\n\t\t\tint num = 0;\r\n\t\t\twhile (this.token == GrammarToken.Symbol || this.token == GrammarToken.Literal || this.token == GrammarToken.Action || this.token == GrammarToken.Prec)\r\n\t\t\t{\r\n\t\t\t\tGrammarToken grammarToken = this.token;\r\n\t\t\t\tswitch (grammarToken)\r\n\t\t\t\t{\r\n\t\t\t\tcase GrammarToken.Symbol:\r\n\t\t\t\t\tif (this.grammar.terminals.ContainsKey(this.scanner.yylval))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tproduction.rhs.Add(this.grammar.terminals[this.scanner.yylval]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tproduction.rhs.Add(this.grammar.LookupNonTerminal(this.scanner.yylval));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase GrammarToken.Literal:\r\n\t\t\t\t\tproduction.rhs.Add(this.grammar.LookupTerminal(this.token, this.scanner.yylval));\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase GrammarToken.Action:\r\n\t\t\t\t{\r\n\t\t\t\t\tSemanticAction semanticAction = new SemanticAction(production, this.tokenStartLine, num, this.scanner.yylval);\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tif (this.token == GrammarToken.Divider || this.token == GrammarToken.SemiColon || this.token == GrammarToken.Prec)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tproduction.semanticAction = semanticAction;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tGrammar arg_1BA_0 = this.grammar;\r\n\t\t\t\t\t\tstring arg_1B5_0 = \"@\";\r\n\t\t\t\t\t\tint num2 = ++this.grammar.NumActions;\r\n\t\t\t\t\t\tNonTerminal nonTerminal = arg_1BA_0.LookupNonTerminal(arg_1B5_0 + num2.ToString());\r\n\t\t\t\t\t\tProduction production2 = new Production(nonTerminal);\r\n\t\t\t\t\t\tproduction2.semanticAction = semanticAction;\r\n\t\t\t\t\t\tthis.grammar.AddProduction(production2);\r\n\t\t\t\t\t\tproduction.rhs.Add(nonTerminal);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnum++;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (grammarToken == GrammarToken.Prec)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\tif (this.token == GrammarToken.Symbol)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tproduction.prec = this.grammar.LookupTerminal(this.token, this.scanner.yylval).prec;\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.scanner.ReportError(\"Expected symbol after %prec\", new object[0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.grammar.AddProduction(production);\r\n\t\t\tPrecedence.Calculate(production);\r\n\t\t}\r\n\t\tprivate void ParseHeader()\r\n\t\t{\r\n\t\t\tif (this.token == GrammarToken.Prelude)\r\n\t\t\t{\r\n\t\t\t\tthis.grammar.headerCode = this.scanner.yylval;\r\n\t\t\t\tthis.Advance();\r\n\t\t\t}\r\n\t\t\tif (this.token != GrammarToken.EndOfSection)\r\n\t\t\t{\r\n\t\t\t\tthis.scanner.ReportError(\"Expected next section\", new object[0]);\r\n\t\t\t}\r\n\t\t\tthis.Advance();\r\n\t\t}\r\n\t\tprivate void ParseEpilog()\r\n\t\t{\r\n\t\t\tthis.grammar.epilogCode = this.scanner.yylval;\r\n\t\t\tthis.Advance();\r\n\t\t\tif (this.token != GrammarToken.Eof)\r\n\t\t\t{\r\n\t\t\t\tthis.scanner.ReportError(\"Expected EOF\", new object[0]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate GrammarToken Advance()\r\n\t\t{\r\n\t\t\tthis.tokenStartLine = this.scanner.CurrentLine;\r\n\t\t\tthis.tokenStartColumn = this.scanner.CurrentColumn;\r\n\t\t\treturn this.token = this.scanner.Next();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/ParserAction.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic abstract class ParserAction\r\n\t{\r\n\t\tpublic abstract int ToNum();\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/PrecType.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic enum PrecType\r\n\t{\r\n\t\tleft,\r\n\t\tright,\r\n\t\tnonassoc\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Precedence.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic class Precedence\r\n\t{\r\n\t\tpublic PrecType type;\r\n\t\tpublic int prec;\r\n\t\tpublic Precedence(PrecType type, int prec)\r\n\t\t{\r\n\t\t\tthis.type = type;\r\n\t\t\tthis.prec = prec;\r\n\t\t}\r\n\t\tpublic static void Calculate(Production p)\r\n\t\t{\r\n\t\t\tif (p.prec == null)\r\n\t\t\t{\r\n\t\t\t\tfor (int i = p.rhs.Count - 1; i >= 0; i--)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (p.rhs[i] is Terminal)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tp.prec = ((Terminal)p.rhs[i]).prec;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Production.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class Production\r\n\t{\r\n\t\tpublic int num;\r\n\t\tpublic NonTerminal lhs;\r\n\t\tpublic List<Symbol> rhs = new List<Symbol>();\r\n\t\tpublic SemanticAction semanticAction;\r\n\t\tpublic Precedence prec;\r\n\t\tpublic Production(NonTerminal lhs)\r\n\t\t{\r\n\t\t\tthis.lhs = lhs;\r\n\t\t\tlhs.productions.Add(this);\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.AppendFormat(\"{0} -> \", this.lhs);\r\n\t\t\tforeach (Symbol current in this.rhs)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"{0} \", current);\r\n\t\t\t}\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/ProductionItem.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class ProductionItem\r\n\t{\r\n\t\tpublic Production production;\r\n\t\tpublic int pos;\r\n\t\tpublic bool expanded;\r\n\t\tpublic Set<Terminal> LA;\r\n\t\tpublic ProductionItem(Production production, int pos)\r\n\t\t{\r\n\t\t\tthis.production = production;\r\n\t\t\tthis.pos = pos;\r\n\t\t}\r\n\t\tpublic override bool Equals(object obj)\r\n\t\t{\r\n\t\t\tProductionItem productionItem = (ProductionItem)obj;\r\n\t\t\treturn productionItem.pos == this.pos && productionItem.production == this.production;\r\n\t\t}\r\n\t\tpublic override int GetHashCode()\r\n\t\t{\r\n\t\t\treturn this.production.GetHashCode() + this.pos;\r\n\t\t}\r\n\t\tpublic static bool SameProductions(List<ProductionItem> list1, List<ProductionItem> list2)\r\n\t\t{\r\n\t\t\tif (list1.Count != list2.Count)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tforeach (ProductionItem current in list1)\r\n\t\t\t{\r\n\t\t\t\tbool flag = false;\r\n\t\t\t\tforeach (ProductionItem current2 in list2)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (current.Equals(current2))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflag = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!flag)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tpublic bool isReduction()\r\n\t\t{\r\n\t\t\treturn this.pos == this.production.rhs.Count;\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.AppendFormat(\"{0} {1}: \", this.production.num, this.production.lhs);\r\n\t\t\tfor (int i = 0; i < this.production.rhs.Count; i++)\r\n\t\t\t{\r\n\t\t\t\tif (i == this.pos)\r\n\t\t\t\t{\r\n\t\t\t\t\tstringBuilder.Append(\". \");\r\n\t\t\t\t}\r\n\t\t\t\tstringBuilder.AppendFormat(\"{0} \", this.production.rhs[i]);\r\n\t\t\t}\r\n\t\t\tif (this.pos == this.production.rhs.Count)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.Append(\".\");\r\n\t\t\t}\r\n\t\t\tif (this.LA != null)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"\\t\\t{0}\", this.LA);\r\n\t\t\t}\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Reduce.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic class Reduce : ParserAction\r\n\t{\r\n\t\tpublic ProductionItem item;\r\n\t\tpublic Reduce(ProductionItem item)\r\n\t\t{\r\n\t\t\tthis.item = item;\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn string.Concat(new object[]\r\n\t\t\t{\r\n\t\t\t\t\"reduce using rule \",\r\n\t\t\t\tthis.item.production.num,\r\n\t\t\t\t\" (\",\r\n\t\t\t\tthis.item.production.lhs,\r\n\t\t\t\t\")\"\r\n\t\t\t});\r\n\t\t}\r\n\t\tpublic override int ToNum()\r\n\t\t{\r\n\t\t\treturn -this.item.production.num;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Scanner.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tinternal class Scanner\r\n\t{\r\n\t\tpublic class ParseException : Exception\r\n\t\t{\r\n\t\t\tpublic int line;\r\n\t\t\tpublic int column;\r\n\t\t\tpublic ParseException(int line, int column, string message) : base(message)\r\n\t\t\t{\r\n\t\t\t\tthis.line = line;\r\n\t\t\t\tthis.column = column;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic string yylval;\r\n\t\tprivate char next;\r\n\t\tprivate string line;\r\n\t\tprivate int section;\r\n\t\tprivate string filename;\r\n\t\tprivate int linenr;\r\n\t\tprivate int pos;\r\n\t\tprivate StreamReader reader;\r\n\t\tprivate StringBuilder builder;\r\n\t\tpublic int CurrentLine\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.linenr;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic int CurrentColumn\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\treturn this.pos;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic Scanner(string path)\r\n\t\t{\r\n\t\t\tthis.section = 0;\r\n\t\t\tthis.filename = path;\r\n\t\t\tthis.reader = new StreamReader(path);\r\n\t\t\tthis.builder = new StringBuilder();\r\n\t\t\tthis.pos = 0;\r\n\t\t\tthis.linenr = 0;\r\n\t\t\tthis.line = \"\";\r\n\t\t\tthis.Advance();\r\n\t\t}\r\n\t\tpublic GrammarToken Next()\r\n\t\t{\r\n\t\t\tthis.yylval = null;\r\n\t\t\tif (this.next == '\\0')\r\n\t\t\t{\r\n\t\t\t\treturn GrammarToken.Eof;\r\n\t\t\t}\r\n\t\t\tif (this.section == 3)\r\n\t\t\t{\r\n\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\tif (GPCG.LINES)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.builder.AppendFormat(\"#line {0} \\\"{1}\\\"\", this.linenr, this.filename);\r\n\t\t\t\t\tthis.builder.AppendLine();\r\n\t\t\t\t}\r\n\t\t\t\twhile (this.next != '\\0')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t}\r\n\t\t\t\tthis.yylval = this.builder.ToString();\r\n\t\t\t\treturn GrammarToken.Epilog;\r\n\t\t\t}\r\n\t\t\tif (this.pos == 0 && this.line.StartsWith(\"%%\"))\r\n\t\t\t{\r\n\t\t\t\tthis.Advance();\r\n\t\t\t\tthis.Advance();\r\n\t\t\t\tthis.section++;\r\n\t\t\t\treturn GrammarToken.EndOfSection;\r\n\t\t\t}\r\n\t\t\tif (this.section == 0)\r\n\t\t\t{\r\n\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\tif (GPCG.LINES)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.builder.AppendFormat(\"#line {0} \\\"{1}\\\"\", this.linenr, this.filename);\r\n\t\t\t\t\tthis.builder.AppendLine();\r\n\t\t\t\t}\r\n\t\t\t\twhile (this.next != '\\0' && !this.line.StartsWith(\"%%\"))\r\n\t\t\t\t{\r\n\t\t\t\t\twhile (this.next != '\\0' && this.next != '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.builder.AppendLine();\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.yylval = this.builder.ToString();\r\n\t\t\t\treturn GrammarToken.Prelude;\r\n\t\t\t}\r\n\t\t\tchar c = this.next;\r\n\t\t\tif (c <= '\\'')\r\n\t\t\t{\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase '\\t':\r\n\t\t\t\tcase '\\n':\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (c != ' ')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch (c)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\tcase '%':\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tif (this.next == '{')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\t\t\t\t\tif (GPCG.LINES)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.builder.AppendFormat(\"#line {0} \\\"{1}\\\"\", this.linenr, this.filename);\r\n\t\t\t\t\t\t\t\t\tthis.builder.AppendLine();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twhile (true)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (this.next == '%')\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t\t\tif (this.next == '}')\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tthis.yylval = this.builder.ToString();\r\n\t\t\t\t\t\t\t\treturn GrammarToken.Prolog;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (char.IsLetter(this.next))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\t\t\t\t\twhile (char.IsLetter(this.next))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstring text = this.builder.ToString();\r\n\t\t\t\t\t\t\t\tstring key;\r\n\t\t\t\t\t\t\t\tswitch (key = text)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase \"union\":\r\n\t\t\t\t\t\t\t\t\tthis.yylval = this.ScanUnion();\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Union;\r\n\t\t\t\t\t\t\t\tcase \"prec\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Prec;\r\n\t\t\t\t\t\t\t\tcase \"token\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Token;\r\n\t\t\t\t\t\t\t\tcase \"type\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Type;\r\n\t\t\t\t\t\t\t\tcase \"nonassoc\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.NonAssoc;\r\n\t\t\t\t\t\t\t\tcase \"left\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Left;\r\n\t\t\t\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Right;\r\n\t\t\t\t\t\t\t\tcase \"start\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Start;\r\n\t\t\t\t\t\t\t\tcase \"namespace\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Namespace;\r\n\t\t\t\t\t\t\t\tcase \"visibility\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Visibility;\r\n\t\t\t\t\t\t\t\tcase \"attributes\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.Attributes;\r\n\t\t\t\t\t\t\t\tcase \"parsertype\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.ParserName;\r\n\t\t\t\t\t\t\t\tcase \"tokens\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.GenerateTokens;\r\n\t\t\t\t\t\t\t\tcase \"tokentype\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.TokenName;\r\n\t\t\t\t\t\t\t\tcase \"valuetype\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.ValueTypeName;\r\n\t\t\t\t\t\t\t\tcase \"positiontype\":\r\n\t\t\t\t\t\t\t\t\treturn GrammarToken.PositionType;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.ReportError(\"Unexpected keyword {0}\", new object[]\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttext\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\treturn this.Next();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.ReportError(\"Unexpected keyword {0}\", new object[]\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.next\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\treturn this.Next();\r\n\t\t\t\t\t\tcase '&':\r\n\t\t\t\t\t\t\tgoto IL_642;\r\n\t\t\t\t\t\tcase '\\'':\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tbool flag = this.next == '\\\\';\r\n\t\t\t\t\t\t\tif (flag)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.yylval = new string(this.Escape(flag, this.next), 1);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tif (this.next != '\\'')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.ReportError(\"Expected closing character quote\", new object[0]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn GrammarToken.Literal;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tgoto IL_642;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tthis.Advance();\r\n\t\t\t\treturn this.Next();\r\n\t\t\t}\r\n\t\t\tif (c != '/')\r\n\t\t\t{\r\n\t\t\t\tswitch (c)\r\n\t\t\t\t{\r\n\t\t\t\tcase ':':\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\treturn GrammarToken.Colon;\r\n\t\t\t\tcase ';':\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\treturn GrammarToken.SemiColon;\r\n\t\t\t\tcase '<':\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\t\twhile (this.next != '>' && this.next != '\\0')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\tthis.yylval = this.builder.ToString();\r\n\t\t\t\t\treturn GrammarToken.Kind;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tswitch (c)\r\n\t\t\t\t\t{\r\n\t\t\t\t\tcase '{':\r\n\t\t\t\t\t\tif (this.section == 1)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\treturn GrammarToken.LeftCurly;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.yylval = this.ScanCodeBlock();\r\n\t\t\t\t\t\treturn GrammarToken.Action;\r\n\t\t\t\t\tcase '|':\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\treturn GrammarToken.Divider;\r\n\t\t\t\t\tcase '}':\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\treturn GrammarToken.RightCurly;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.Advance();\r\n\t\t\t\tif (this.next == '/')\r\n\t\t\t\t{\r\n\t\t\t\t\twhile (this.next != '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.Next();\r\n\t\t\t\t}\r\n\t\t\t\tif (this.next == '*')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\twhile (true)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.next == '*')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tif (this.next == '/')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\treturn this.Next();\r\n\t\t\t\t}\r\n\t\t\t\tthis.ReportError(\"unexpected / character, not in comment\", new object[0]);\r\n\t\t\t\treturn this.Next();\r\n\t\t\t}\r\n\t\t\tIL_642:\r\n\t\t\tif (char.IsLetter(this.next))\r\n\t\t\t{\r\n\t\t\t\tthis.builder.Length = 0;\r\n\t\t\t\twhile (char.IsLetterOrDigit(this.next) || this.next == '_' || this.next == '.')\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\tthis.Advance();\r\n\t\t\t\t}\r\n\t\t\t\tthis.yylval = this.builder.ToString();\r\n\t\t\t\treturn GrammarToken.Symbol;\r\n\t\t\t}\r\n\t\t\tthis.ReportError(\"Unexpected character '{0}'\", new object[]\r\n\t\t\t{\r\n\t\t\t\tthis.next\r\n\t\t\t});\r\n\t\t\tthis.Advance();\r\n\t\t\treturn this.Next();\r\n\t\t}\r\n\t\tprivate void Advance()\r\n\t\t{\r\n\t\t\tif (this.pos + 1 < this.line.Length)\r\n\t\t\t{\r\n\t\t\t\tthis.pos++;\r\n\t\t\t\tthis.next = this.line[this.pos];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.reader.EndOfStream)\r\n\t\t\t{\r\n\t\t\t\tthis.next = '\\0';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.line = this.reader.ReadLine() + \"\\n\";\r\n\t\t\tthis.linenr++;\r\n\t\t\tthis.pos = 0;\r\n\t\t\tthis.next = this.line[this.pos];\r\n\t\t}\r\n\t\tprivate string ScanCodeBlock()\r\n\t\t{\r\n\t\t\tthis.builder.Length = 0;\r\n\t\t\tif (GPCG.LINES)\r\n\t\t\t{\r\n\t\t\t\tthis.builder.AppendFormat(\"#line {0} \\\"{1}\\\"\\n\", this.linenr, this.filename);\r\n\t\t\t\tthis.builder.Append(\"\\t\\t\\t\");\r\n\t\t\t}\r\n\t\t\tthis.builder.Append(this.next);\r\n\t\t\tthis.Advance();\r\n\t\t\tint num = 1;\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tchar c = this.next;\r\n\t\t\t\tif (c <= '\\'')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (c != '\"')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (c == '\\'')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\twhile (this.next != '\\0' && this.next != '\\'')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (this.next == '\\\\')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\twhile (this.next != '\\0' && this.next != '\"')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.next == '\\\\')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (c != '/')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (c != '@')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tswitch (c)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase '{':\r\n\t\t\t\t\t\t\t\tnum++;\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tcase '}':\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tif (--num == 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tgoto Block_8;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tif (this.next != '\"')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\twhile (this.next != '\\0' && this.next != '\"')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\tif (this.next == '/')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile (this.next != '\\0')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (this.next == '\\n')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (this.next != '*')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\twhile (true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.next == '\\0' || this.next == '*')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (this.next == '\\0' || this.next == '/')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (this.next != '\\0')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\t\t\t\tthis.Advance();\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.builder.Append(this.next);\r\n\t\t\t\tthis.Advance();\r\n\t\t\t}\r\n\t\t\tBlock_8:\r\n\t\t\treturn this.builder.ToString();\r\n\t\t}\r\n\t\tprivate string ScanUnion()\r\n\t\t{\r\n\t\t\twhile (this.next != '{')\r\n\t\t\t{\r\n\t\t\t\tthis.Advance();\r\n\t\t\t}\r\n\t\t\treturn this.ScanCodeBlock();\r\n\t\t}\r\n\t\tprivate char Escape(bool backslash, char ch)\r\n\t\t{\r\n\t\t\tif (!backslash)\r\n\t\t\t{\r\n\t\t\t\treturn ch;\r\n\t\t\t}\r\n\t\t\tif (ch <= 'b')\r\n\t\t\t{\r\n\t\t\t\tif (ch == '\\'')\r\n\t\t\t\t{\r\n\t\t\t\t\treturn '\\'';\r\n\t\t\t\t}\r\n\t\t\t\tif (ch == '0')\r\n\t\t\t\t{\r\n\t\t\t\t\treturn '\\0';\r\n\t\t\t\t}\r\n\t\t\t\tswitch (ch)\r\n\t\t\t\t{\r\n\t\t\t\tcase 'a':\r\n\t\t\t\t\treturn '\\a';\r\n\t\t\t\tcase 'b':\r\n\t\t\t\t\treturn '\\b';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (ch == 'f')\r\n\t\t\t\t{\r\n\t\t\t\t\treturn '\\f';\r\n\t\t\t\t}\r\n\t\t\t\tif (ch == 'n')\r\n\t\t\t\t{\r\n\t\t\t\t\treturn '\\n';\r\n\t\t\t\t}\r\n\t\t\t\tswitch (ch)\r\n\t\t\t\t{\r\n\t\t\t\tcase 'r':\r\n\t\t\t\t\treturn '\\r';\r\n\t\t\t\tcase 't':\r\n\t\t\t\t\treturn '\\t';\r\n\t\t\t\tcase 'v':\r\n\t\t\t\t\treturn '\\v';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.ReportError(\"Unexpected escape character '\\\\{0}'\", new object[]\r\n\t\t\t{\r\n\t\t\t\tch\r\n\t\t\t});\r\n\t\t\treturn ch;\r\n\t\t}\r\n\t\tpublic void ReportError(string format, params object[] args)\r\n\t\t{\r\n\t\t\tthrow new Scanner.ParseException(this.linenr, this.pos, string.Format(format, args));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/SemanticAction.cs",
    "content": "using System;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class SemanticAction\r\n\t{\r\n\t\tprivate Production production;\r\n\t\tprivate int startLine;\r\n\t\tprivate int pos;\r\n\t\tprivate string commands;\r\n\t\tpublic SemanticAction(Production production, int startLine, int pos, string commands)\r\n\t\t{\r\n\t\t\tthis.production = production;\r\n\t\t\tthis.pos = pos;\r\n\t\t\tthis.startLine = startLine;\r\n\t\t\tthis.commands = commands;\r\n\t\t}\r\n\t\tpublic void GenerateCode(CodeGenerator codeGenerator)\r\n\t\t{\r\n\t\t\tint i = 0;\r\n\t\t\tint num = this.startLine;\r\n\t\t\twhile (i < this.commands.Length)\r\n\t\t\t{\r\n\t\t\t\tchar c = this.commands[i];\r\n\t\t\t\tif (c <= '$')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (c == '\\n')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnum++;\r\n\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tswitch (c)\r\n\t\t\t\t\t{\r\n\t\t\t\t\tcase '\"':\r\n\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\twhile (i < this.commands.Length && this.commands[i] != '\"')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.commands[i] == '\\\\')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tcase '$':\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\tstring kind = this.ParseKind(codeGenerator, num, ref i);\r\n\t\t\t\t\t\tthis.ParseItemReference(codeGenerator, \"yyval\", kind, num, ref i);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif (c != '\\'')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (c != '/')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (c == '@')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (i + 1 >= this.commands.Length || this.commands[i + 1] != '\"')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\t\t\tthis.ParseItemReference(codeGenerator, \"yypos\", \"\", num, ref i);\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\twhile (i < this.commands.Length && this.commands[i] != '\"')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\tif (this.commands[i] == '/')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\twhile (i < this.commands.Length && this.commands[i] != '\\n')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif (this.commands[i] != '*')\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\twhile (true)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif (i >= this.commands.Length || this.commands[i] == '*')\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (i >= this.commands.Length || this.commands[i] == '/')\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\twhile (i < this.commands.Length && this.commands[i] != '\\'')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (this.commands[i] == '\\\\')\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.Output(codeGenerator, i++);\r\n\t\t\t}\r\n\t\t\tcodeGenerator.Output.WriteLine();\r\n\t\t}\r\n\t\tprivate string ParseKind(CodeGenerator codeGenerator, int line, ref int i)\r\n\t\t{\r\n\t\t\tif (this.commands[i] == '<')\r\n\t\t\t{\r\n\t\t\t\ti++;\r\n\t\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\t\twhile (i < this.commands.Length && this.commands[i] != '>')\r\n\t\t\t\t{\r\n\t\t\t\t\tstringBuilder.Append(this.commands[i]);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t\tif (i < this.commands.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\ti++;\r\n\t\t\t\t\treturn stringBuilder.ToString();\r\n\t\t\t\t}\r\n\t\t\t\tConsole.Error.WriteLine(\"Expected '>' at ({0}:{1})\", line, i);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tprivate void ParseItemReference(CodeGenerator codeGenerator, string item, string kind, int line, ref int i)\r\n\t\t{\r\n\t\t\tif (this.commands[i] == '$')\r\n\t\t\t{\r\n\t\t\t\ti++;\r\n\t\t\t\tif (kind == null)\r\n\t\t\t\t{\r\n\t\t\t\t\tkind = this.production.lhs.kind;\r\n\t\t\t\t}\r\n\t\t\t\tcodeGenerator.Output.Write(item);\r\n\t\t\t\tif (!string.IsNullOrEmpty(kind))\r\n\t\t\t\t{\r\n\t\t\t\t\tcodeGenerator.Output.Write(\".{0}\", kind);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif (char.IsDigit(this.commands[i]))\r\n\t\t\t\t{\r\n\t\t\t\t\tint num = (int)(this.commands[i] - '0');\r\n\t\t\t\t\ti++;\r\n\t\t\t\t\twhile (i < this.commands.Length && this.commands[i] >= '0' && this.commands[i] <= '9')\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnum = 10 * num + (int)this.commands[i] - 48;\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (num <= 0 || num > this.production.rhs.Count)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Scanner.ParseException(line, this.pos, string.Format(\"Invalid production token number {0}.\", num));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (kind == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkind = this.production.rhs[num - 1].kind;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcodeGenerator.Output.Write(\"value_stack.array[value_stack.top-{0}].{1}\", this.pos - num + 1, item);\r\n\t\t\t\t\tif (!string.IsNullOrEmpty(kind))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcodeGenerator.Output.Write(\".{0}\", kind);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tConsole.Error.WriteLine(\"Unexpected '$' at ({0}:{1})\", line, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void Output(CodeGenerator codeGenerator, int i)\r\n\t\t{\r\n\t\t\tif (this.commands[i] == '\\n')\r\n\t\t\t{\r\n\t\t\t\tcodeGenerator.Output.WriteLine();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcodeGenerator.Output.Write(this.commands[i]);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Set.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class Set<T> : IEnumerable<T>, IEnumerable\r\n\t{\r\n\t\tprivate Dictionary<T, bool> elements = new Dictionary<T, bool>();\r\n\t\tpublic Set()\r\n\t\t{\r\n\t\t}\r\n\t\tpublic Set(Set<T> items)\r\n\t\t{\r\n\t\t\tthis.AddRange(items);\r\n\t\t}\r\n\t\tpublic void Add(T item)\r\n\t\t{\r\n\t\t\tthis.elements[item] = true;\r\n\t\t}\r\n\t\tpublic void AddRange(Set<T> items)\r\n\t\t{\r\n\t\t\tforeach (T current in items)\r\n\t\t\t{\r\n\t\t\t\tthis.Add(current);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic IEnumerator<T> GetEnumerator()\r\n\t\t{\r\n\t\t\treturn this.elements.Keys.GetEnumerator();\r\n\t\t}\r\n\t\tIEnumerator IEnumerable.GetEnumerator()\r\n\t\t{\r\n\t\t\tthrow new Exception(\"The method or operation is not implemented.\");\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.Append(\"[\");\r\n\t\t\tforeach (T current in this.elements.Keys)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"{0}, \", current);\r\n\t\t\t}\r\n\t\t\tstringBuilder.Append(\"]\");\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Shift.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic class Shift : ParserAction\r\n\t{\r\n\t\tpublic State next;\r\n\t\tpublic Shift(State next)\r\n\t\t{\r\n\t\t\tthis.next = next;\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn \"shift, and go to state \" + this.next.num;\r\n\t\t}\r\n\t\tpublic override int ToNum()\r\n\t\t{\r\n\t\t\treturn this.next.num;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/State.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nnamespace gpcc\r\n{\r\n\tpublic class State\r\n\t{\r\n\t\tprivate static int TotalStates;\r\n\t\tpublic int num;\r\n\t\tpublic Symbol accessedBy;\r\n\t\tpublic List<ProductionItem> kernal_items = new List<ProductionItem>();\r\n\t\tpublic List<ProductionItem> all_items = new List<ProductionItem>();\r\n\t\tpublic Dictionary<Symbol, State> Goto = new Dictionary<Symbol, State>();\r\n\t\tpublic Set<Terminal> terminalTransitions = new Set<Terminal>();\r\n\t\tpublic Dictionary<NonTerminal, Transition> nonTerminalTransitions = new Dictionary<NonTerminal, Transition>();\r\n\t\tpublic Dictionary<Terminal, ParserAction> parseTable = new Dictionary<Terminal, ParserAction>();\r\n\t\tpublic State(Production production)\r\n\t\t{\r\n\t\t\tthis.num = State.TotalStates++;\r\n\t\t\tthis.AddKernal(production, 0);\r\n\t\t}\r\n\t\tpublic State(List<ProductionItem> itemSet)\r\n\t\t{\r\n\t\t\tthis.num = State.TotalStates++;\r\n\t\t\tthis.kernal_items.AddRange(itemSet);\r\n\t\t\tthis.all_items.AddRange(itemSet);\r\n\t\t}\r\n\t\tpublic void AddClosure()\r\n\t\t{\r\n\t\t\tforeach (ProductionItem current in this.kernal_items)\r\n\t\t\t{\r\n\t\t\t\tthis.AddClosure(current);\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void AddClosure(ProductionItem item)\r\n\t\t{\r\n\t\t\tif (item.pos < item.production.rhs.Count)\r\n\t\t\t{\r\n\t\t\t\tSymbol symbol = item.production.rhs[item.pos];\r\n\t\t\t\tif (symbol is NonTerminal)\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (Production current in ((NonTerminal)symbol).productions)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.AddNonKernal(current);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tprivate void AddKernal(Production production, int pos)\r\n\t\t{\r\n\t\t\tProductionItem item = new ProductionItem(production, pos);\r\n\t\t\tthis.kernal_items.Add(item);\r\n\t\t\tthis.all_items.Add(item);\r\n\t\t}\r\n\t\tprivate void AddNonKernal(Production production)\r\n\t\t{\r\n\t\t\tProductionItem item = new ProductionItem(production, 0);\r\n\t\t\tif (!this.all_items.Contains(item))\r\n\t\t\t{\r\n\t\t\t\tthis.all_items.Add(item);\r\n\t\t\t\tthis.AddClosure(item);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic void AddGoto(Symbol s, State next)\r\n\t\t{\r\n\t\t\tthis.Goto[s] = next;\r\n\t\t\tif (s is Terminal)\r\n\t\t\t{\r\n\t\t\t\tthis.terminalTransitions.Add((Terminal)s);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.nonTerminalTransitions.Add((NonTerminal)s, new Transition(this, (NonTerminal)s, next));\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\tStringBuilder stringBuilder = new StringBuilder();\r\n\t\t\tstringBuilder.AppendFormat(\"State {0}\", this.num);\r\n\t\t\tstringBuilder.AppendLine();\r\n\t\t\tstringBuilder.AppendLine();\r\n\t\t\tforeach (ProductionItem current in this.kernal_items)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"    {0}\", current);\r\n\t\t\t\tstringBuilder.AppendLine();\r\n\t\t\t}\r\n\t\t\tstringBuilder.AppendLine();\r\n\t\t\tforeach (KeyValuePair<Terminal, ParserAction> current2 in this.parseTable)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"    {0,-14} {1}\", current2.Key, current2.Value);\r\n\t\t\t\tstringBuilder.AppendLine();\r\n\t\t\t}\r\n\t\t\tstringBuilder.AppendLine();\r\n\t\t\tforeach (KeyValuePair<NonTerminal, Transition> current3 in this.nonTerminalTransitions)\r\n\t\t\t{\r\n\t\t\t\tstringBuilder.AppendFormat(\"    {0,-14} go to state {1}\", current3.Key, this.Goto[current3.Key].num);\r\n\t\t\t\tstringBuilder.AppendLine();\r\n\t\t\t}\r\n\t\t\tstringBuilder.AppendLine();\r\n\t\t\treturn stringBuilder.ToString();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Symbol.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic abstract class Symbol\r\n\t{\r\n\t\tprivate string name;\r\n\t\tpublic string kind;\r\n\t\tpublic abstract int num\r\n\t\t{\r\n\t\t\tget;\r\n\t\t}\r\n\t\tpublic Symbol(string name)\r\n\t\t{\r\n\t\t\tthis.name = name;\r\n\t\t}\r\n\t\tpublic override string ToString()\r\n\t\t{\r\n\t\t\treturn this.name;\r\n\t\t}\r\n\t\tpublic abstract bool IsNullable();\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Terminal.cs",
    "content": "using System;\r\nnamespace gpcc\r\n{\r\n\tpublic class Terminal : Symbol\r\n\t{\r\n\t\tprivate static int count;\r\n\t\tprivate static int max;\r\n\t\tpublic Precedence prec;\r\n\t\tprivate int n;\r\n\t\tpublic bool symbolic;\r\n\t\tpublic override int num\r\n\t\t{\r\n\t\t\tget\r\n\t\t\t{\r\n\t\t\t\tif (this.symbolic)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Terminal.max + this.n;\r\n\t\t\t\t}\r\n\t\t\t\treturn this.n;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic Terminal(bool symbolic, string name) : base(symbolic ? name : (\"'\" + name.Replace(\"\\n\", \"\\\\n\") + \"'\"))\r\n\t\t{\r\n\t\t\tthis.symbolic = symbolic;\r\n\t\t\tif (symbolic)\r\n\t\t\t{\r\n\t\t\t\tthis.n = ++Terminal.count;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.n = (int)name[0];\r\n\t\t\tif (this.n > Terminal.max)\r\n\t\t\t{\r\n\t\t\t\tTerminal.max = this.n;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpublic override bool IsNullable()\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gpcc/Transition.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nnamespace gpcc\r\n{\r\n\tpublic class Transition\r\n\t{\r\n\t\tpublic int N;\r\n\t\tpublic State p;\r\n\t\tpublic NonTerminal A;\r\n\t\tpublic State next;\r\n\t\tpublic Set<Terminal> DR;\r\n\t\tpublic List<Transition> includes = new List<Transition>();\r\n\t\tpublic Set<Terminal> Read;\r\n\t\tpublic Set<Terminal> Follow;\r\n\t\tpublic Transition(State p, NonTerminal A, State next)\r\n\t\t{\r\n\t\t\tthis.p = p;\r\n\t\t\tthis.A = A;\r\n\t\t\tthis.next = next;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "Tools/gppg/gppg.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{462853ED-74F8-49FD-AD69-B098B93357E7}</ProjectGuid>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <OutputType>Exe</OutputType>\r\n    <AssemblyName>gppg</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <WarningLevel>4</WarningLevel>\r\n    <SccProjectName>SAK</SccProjectName>\r\n    <SccLocalPath>SAK</SccLocalPath>\r\n    <SccAuxPath>SAK</SccAuxPath>\r\n    <SccProvider>SAK</SccProvider>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Platform)' == 'AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"gpcc\\CodeGenerator.cs\" />\r\n    <Compile Include=\"gpcc\\GPCG.cs\" />\r\n    <Compile Include=\"gpcc\\Grammar.cs\" />\r\n    <Compile Include=\"gpcc\\GrammarToken.cs\" />\r\n    <Compile Include=\"gpcc\\LALRGenerator.cs\" />\r\n    <Compile Include=\"gpcc\\LR0Generator.cs\" />\r\n    <Compile Include=\"gpcc\\NonTerminal.cs\" />\r\n    <Compile Include=\"gpcc\\Parser.cs\" />\r\n    <Compile Include=\"gpcc\\ParserAction.cs\" />\r\n    <Compile Include=\"gpcc\\Precedence.cs\" />\r\n    <Compile Include=\"gpcc\\PrecType.cs\" />\r\n    <Compile Include=\"gpcc\\Production.cs\" />\r\n    <Compile Include=\"gpcc\\ProductionItem.cs\" />\r\n    <Compile Include=\"gpcc\\Reduce.cs\" />\r\n    <Compile Include=\"gpcc\\Scanner.cs\" />\r\n    <Compile Include=\"gpcc\\SemanticAction.cs\" />\r\n    <Compile Include=\"gpcc\\Set.cs\" />\r\n    <Compile Include=\"gpcc\\Shift.cs\" />\r\n    <Compile Include=\"gpcc\\State.cs\" />\r\n    <Compile Include=\"gpcc\\Symbol.cs\" />\r\n    <Compile Include=\"gpcc\\Terminal.cs\" />\r\n    <Compile Include=\"gpcc\\Transition.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n</Project>"
  },
  {
    "path": "docs/CNAME",
    "content": "v4.php-compiler.net"
  },
  {
    "path": "docs/_config.yml",
    "content": "theme: jekyll-theme-midnight"
  },
  {
    "path": "docs/blog/announcing-wpdotnet.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Miloslav Beno, 02/27/2012\n\nPhalanger was capable of compiling WordPress for quite a long time, but this support was always targeted at developer audience. Experienced developers could compile WordPress and run it on their servers. However, we noticed that the combination is interesting not only to developers, but also to end users. Some of WordPress users want to run it on .NET or on Mono. Mainly for performance reasons, but some of them also because they already have other stuff running on .NET. The problem was it is quite a tough job to install Phalanger, configure, compile… don’t mentioning that on shared hosting it can be a problem to install anything.\n\n![Right Now](rightnow.png)\n\nSo today we’re happy to announce WP.NET (wpdotnet.com) – A package of WordPress with embedded Phalanger. One package gives watson s hong kong online store you WordPress for both .NET 4.0 and for Mono (2.10.8 and higher), with no installation hassles. If you have ASP.NET hosting it’s easy to deploy and when a new Phalanger is available, you can update it from administration section, just easily as WordPress update.\n\nWP.NET is fully managed ASP.NET application. It does not contain any native code, so it’s possible to run it 64bit on Windows. The same package also works on Linux using Mono with version greater than 2.10.8.\n\nMain advanteges are that WP.NET justin bieber photo sexe is faster than WordPress running on normal PHP and it’s also extendable with .NET languages. Which makes it great CMS that anyone can extend and it doesn’t matter what language he chose to use. The tutorial on how it’s possible to extend it with C# is going to be published withtin few days.\n\nSome of the PHP plugins or more advanced functionality can require some more PHP extensions that are not included in package as it’s released today.\n\nWe are aware of it and there will be available package with most important managed extensions.\n\nIn the future we also plan to get WP.NET available via the Web Platform Installer.\n\nYou can find the package on its new home page wpdotnet.com and its sources on its GitHub repository https://github.com/DEVSENSE/WpDotNet. Feel free to check it or improve it ;-) .\n"
  },
  {
    "path": "docs/blog/dynamic-keyword-and-php-objects.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 10/06/2011\n\nWe’ve already demonstrated, how to use PHP scripts from within a .NET application using Phalanger. For reference you can take a look at PHP as a scripting language for C# article or Standard mode interoperability tutorial. In this way we can take an existing PHP web or a library, load them into C# context and reuse their functions, classes, constants or global variables. In addition we can even define new functions and classes in C# and inject them into PHP, so the code in PHP seamlessly uses these declarations as they would be declared in PHP too.\n\nEDIT: Phalanger 3.0 removes all the limitations mentioned below.\n\nIn this post I would like to show you, how to easily reuse objects defined in PHP code from C# environment – by using “dynamic” keyword introduced in C# 4. Since Phalanger translates PHP classes into general .NET types, the usage is very intuitive. However there is one catch …\n\nFor this demo, I have prepared ASP.NET application, that loads PHP scripts. First it loads a PHP script into C# context:\n\n```php\ncontext.Include(\"script.php\", false);\n```\n\nThis “runs” script.php, and as a result context contains all the PHP declarations. At this point, you can e.g. take a look on context.DeclaredTypes, and list declared PHP types.\n\nNow we can instantiate a PHP type, and take advantage of the dynamic keyword. Following statement instantiates a PHP class “X”, and passes its reference into a C# dynamic variable:\n\n```php\ndynamic x = context.NewObject(\"X\");\n```\n\nThen we can call methods on X class as we are used to. C# compiler automatically implements polymorphic inline cache (the same as we used in Phalanger compiler earlier) in run time, to determine what method should be called and to cache the call, so repetitious calls are executed faster.\n\n```php\nvar result = x.bar(context, 11);\n```\n\nYou can notice the additional first argument here which is the only catch you should keep in mind. Phalanger requires the current context to be passed as the first argument in every method call. It is used later internally, mostly to enhance runtime performance.\n\nEDIT: Phalanger 3.0 does not require the context to be passed.\n\n# Limitations (Phalanger 2.1)\n\nSince this is the fastest way how to call PHP methods from C# context, several internal conversions between PHP and .NET world are skipped. It means you should only pass PHP/Phalanger compatible types as an argument: int, long, bool, string, PHP.Core.PhpBytes, PHP.Core.PhpArray and PHP.Core.Reflection.DObject (base class for all PHP objects, so any other PHP class instance is allowed).\n\n# Conclusion\n\nIn this post I have demonstrated how to take advantage of the “dynamic” keyword in C# so you can intuitively use your PHP objects in C# application. Please download attached ASP.NET demo to see it working. In addition to that, Phalanger allows many other ways of interoperability, e.g. the strongly typed Duck Typing.\n"
  },
  {
    "path": "docs/blog/improved-wordpress-performance-with-phalanger.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 05/09/2011\n\n**Update: Latest benchmarks are depicted on Benchmarks page.**\n\nOne of the reasons why you may be interested in using Phalanger is that you need to run your PHP applications faster. Phalanger is a PHP language compiler for .NET. It is almost fully compatible with PHP, and it also adds several useful extensions. It makes it easy to integrate PHP applications with .NET or ASP.NET and it adds better compile time checking, but we’ll write about these in some other article.\n\nFor many people, the most interesting aspect of Phalanger is that it can be used to improve the performance of your existing PHP applications. We recently spent some time tuning the Phalanger performance and our recent check-ins implement several important optimizations. This article shows that Phalanger is more efficient than standard PHP interpreter and is comparable to the fastest solutions using e.g. WinCache extension.\n\nA few days ago we published a tutorial explaining how to run WordPress on .NET 4.0 using Phalanger. In fact, we’re using this solution for many of our personal web sites, both as a demonstration and because it runs fast and it is very easy to deploy. When using WordPress, we use the latest (automatically updated) version, running as a native ASP.NET applications, with some plugins written in C#. The performance is comparable with other highly-optimized PHP solutions.\n\n# Settings\n\nThere are many possible settings in Phalanger, mostly you don’t need to care about them. But if you would like a nice .NET assembly as a result and you care about every 1/10 percents, look on optimizing Phalanger. In the following test we configured Phalanger a little, so that the compiler can do the best possible job when compiling WordPress. We configured inclusion mappings so that the compiler can resolve all source files. This gave us about 4% performance improvement (which is great!), but we did not touch the PHP source code at all!\n\nAlso we used managed MySQL extension. There is a lot of data being copied from the database to the web application, and Phalanger calling .NET extensions from PHP is really fast in Phalanger. This way, the data access is as efficient as if the code was written in C#.\n\nIn practice, you can optimize WordPress using plugins that cache the output HTML. These plugins work well with Phalanger. They improve the page response time a lot, but we are not using them here. The aim of the test is to measure the raw performance when running PHP code. On our web sites, we don’t use caching plugins for a different reason – it is easier to simply turn on the automatic output caching in ASP.NET :-) .\n\n# Benchmarks\n\nWe tested three different approaches on Windows: classic PHP 5.3.5 via FastCGI, PHP 5.3.5 via FastCGI with WinCache 1.1 extension and latest Phalanger 2.1 from May 2011. The WinCache extension caches the parsed opcode, accesses to file system and some other things. There are more similar extensions, but on the average all of them give 3 times better performance compared to classic PHP configuration.\n\nTo get some numbers, we used Visual Studio 2010 and its Load Test project; starting with 5 users up to 250 users at the same time. The users were continuously requesting the pages of a WordPress 3.1.2 site with only a few articles in it. Note that this doesn’t correspond to actual 250 human users, because the test runner requests the web site in a loop without waiting (and reading the article). The tests depicted below were run on Core 2 Duo, 2.4 GHz, 2MB cache, 4GB DDR3 RAM with Windows 7 Professional and IIS 7.5. The machine was a typical business notebook. A server machine would likely give a better performance, but the comparison would look similar.\n\n![bench](Screen%20Shot%202017-02-12%20at%2021.21.16.png)\n\nAs you can see, Phalanger can be easily used as a PHP accelerator. In addition to that, it provides easy access to all the .NET features. Just to note, the tests were run on a development version of Phalanger, and we’re still able to increase the performance every few weeks.\n\nConclusion\n\nIn conclusion Phalanger has comparable performance with the fastest optimized PHP cached solutions. We also tested some other accelerators and the results were roughly the same.\n\nStill, there are several parts of Phalanger that can be optimized and will be optimized in future. We expect this can give results better by additional tens of percents. The future enhancements include implementing more managed extensions, to avoid of using native reputable on line pharmacies PHP ones (that are unsafe and 32 bit only), and also more advanced compile time analysis.\n\nFollow this web site for more information. In some future post we will take a look at a micro-benchmarking Phalanger and at the performance of other open-source PHP projects.\n"
  },
  {
    "path": "docs/blog/index.md",
    "content": "**Archive**:\nThese blog posts about Phalanger date back to 2011-2014. For updated articles on the new PHP compiler to .NET - Peachpie - please see the [project website](http://peachpie.io).\n\n- [Announcing WPDotNet](announcing-wpdotnet) (By Miloslav Beno, 02/27/2012)  \n- [Dynamic Keyword and PHP Objects](dynamic-keyword-and-php-objects) (By Jakub Misek, 10/06/2011) \n- [Installation Free Phalanger Web](installation-free-phalanger-web) (By Jakub Misek, 06/11/2011) \n- [.NET Interoperability Overview of Phalanger](net-interoperability-overview-of-phalanger) (By Miloslav Beno, 12/10/2012) \n- [Passing .NET Delegates into PHP](passing-net-delegates-into-php) (By Jakub Misek, 12/10/2011) \n- [Phalanger 3.0, March 2013](phalanger-3-march-2013) (By Jakub Misek, 03/06/2013) \n- [Phalanger 3.0](phalanger-3) (By Jakub Misek, 11/22/2011) \n- [Phalanger Riding Mono](phalanger-riding-mono) (By Jakub Misek, 01/17/2012) \n- [Phalanger Takes Advantage of DLR](phalanger-takes-advantage-of-dlr) (By Miloslav Beno, 08/01/2011) \n- [Phalanger + WordPress](phalanger-wordpress) (By Jakub Misek, 03/26/2011) \n- [Phalanger 4.0](phalanger4) (By Jakub Misek, 04/07/2014) \n- [PHP as a Scripting Language for C#](php-as-a-scripting-language-for-csharp) (By Jakub Misek, 06/27/2011) \n- [PHP Global.asax and Ouptut Caching](php-global-asax-and-output-caching) (By Jakub Misek, 12/03/2011) \n- [Using C# from AppCode in PHP Scripts](using-csharp-from-appcode-in-php-scripts) (By Jakub Misek, 12/05/2011) \n- [WordPress on .NET 4.0](wordpress-on-dotnet40) (By Miloslav Beno, 04/19/2011) \n- [WordPress on .NET with SQL Server is PossImpible Using Phalanger](wordpress-on-net-with-sql-server-is-possimpible-using-phalanger-3) (By Marc Mezzacca, 01/23/2012) \n- [Writing Compiled PHP Extensions in PHP](writing-compiled-php-extensions-in-php) (By Jakub Misek, 02/07/2012) \n"
  },
  {
    "path": "docs/blog/installation-free-phalanger-web.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 06/11/2011\n\nA few people asked how to run their web site on top of Phalanger without a need of installing Phalanger. This seems to be useful idea, since you may not be allowed to (or you just don’t want to) install any additional software on a target machine. Since Phalanger works like standard ASP.NET request handler and uses a little of standard .NET configurations, it is possible. And the new version of Phalanger (June 2011) makes it even easier to configure.\n\nThe solution I found allows users to run their PHP/Phalanger code on an ASP.NET/IIS 7 hosting without a need of installing an additional software. It only requires a few prerequisites required by the Phalanger runtime that should be installed already. At first you need to have .NET 4 (full) installed. And secondly Visual C++ 2010 runtime.\n\n# Making Phalanger app portable\n\nIn short we are going to take an output of the Phalanger installation and merge it with local configuration. Normally you have all the Phalanger assemblies installed in Global Assembly Cache, and the default configuration in your global machine.config file (see %windir%\\Microsoft.NET\\Framework\\v4.0.30319\\Config\\ directory).\n\nFollowing configuration can be applied e.g. on WordPress web we’ve built earlier. But it will work on any other Phalanger web or application. Just adjust the list of extensions you are using.\n\nAll the files can be obtained from the Phalanger source repository, or you can just extract the installation package.\n\n# Assemblies\n\nThe web application requires several assemblies. They have to be just copied into the /Bin sub-folder of your web application, so they can be loaded by the ASP.NET application. By default copy following assemblies: PhpNetCore.IL.dll, PhpNetCore.dll, PhpNetClassLibrary.dll and PhpNetXmlDom.dll.\n\nIn addition to assemblies above, you will probably need some native PHP extensions (extensions not implemented as managed yet). In case of WordPress, you want to add mbstring, image, zlib and xml extensions at least. To add an extension, copy some files from the Phalanger distribution; copy managed wrapper of the extension from the /Wrappers folder, copy php4ts.dll and php5ts.dll and copy also folder Extensions. Note you can delete php_*.dll files representing extensions you are not going to use.\n\n![pic](standalone-wordpress-bin-folderpng.png)\n\nThe tree above shows the content of my Bin folder placed within my WordPress web root directory. It contains all the necessary files to allow us using WordPress on .NET 4 without a need of installing Phalanger on target machine.\n\n# Dynamic stubs\n\nPhalanger needs to generate some assemblies to be used in some dynamic stuff cases. You must only provide him some directory with write access privileges. You can create a folder called “Dynamic” in the root of your application for example.\n\n# Web.Config\n\nTo make the application portable, just add some basic configuration into your web.config file. This configuration is normally added automatically by the Phalanger installer into your machine.config, so it is applied on any other config file on the machine. Without installing Phalanger, you must set-up this basic configuration locally.\n\nFirst add the <configSection> containing definition of <phpNet> configuration itself as follows:\n\n```php\n<configSections>\n<section name=&amp;quot;phpNet&amp;quot; type=&amp;quot;PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=2.1.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71&amp;quot; //>\n</configSections>\n```\n\nThen define locations of your binaries. Define where your native PHP extensions are, where to generate dynamic stubs etc. You can place following configuration into your staff products generic <phpNet> configuration element:\n\n```php\n<paths>\n<set name=&amp;quot;DynamicWrappers&amp;quot; value=&amp;quot;.\\Dynamic&amp;quot;/>\n<set name=&amp;quot;Libraries&amp;quot; value=&amp;quot;.\\Bin&amp;quot;/>\n<set name=&amp;quot;ExtWrappers&amp;quot; value=&amp;quot;.\\Bin&amp;quot;/>\n<set name=&amp;quot;ExtNatives&amp;quot; value=&amp;quot;.\\Bin\\Extensions&amp;quot;/>\n</paths>\n```\n\nI should note, the relative paths above work only since June 2011 version of Phalanger. In earlier versions of Phalanger you have to provide absolute paths.\n\n# Conclusion/Notes\n\nThis seems to be useful way how to use Phalanger since lot of people just don’t want to install additional software on their machines. You don’t have to install Phalanger, and still you will be able to run PHP or Phalanger web site on standard ASP.NET web server.\n\nThe code samples above extends the configuration provided in our WordPress on .NET 4 post, so it assumes you already have configured a few things.\n\nThe similar process can be applied when you want monthly drug canada to make Phalanger console or WinForm application portable. The assemblies just have to be copied into the application folder itself, not the Bin sub-folder.\n"
  },
  {
    "path": "docs/blog/net-interoperability-overview-of-phalanger.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Miloslav Beno, 12/10/2012\n\nThe main goal of Phalanger is to provide fast and easy means for PHP and .NET languages to interoperate with each other. When using Phalanger, PHP becomes a .NET language, but it’s still a dynamic language. That means that, in order to communicate with strongly typed languages as C#, we need more sofisticated architecture. This comes with DLR (Dynamic Language Runtime) and dynamic keyword in C#.\n\nSo far we had only few choices how to allow C# and PHP to communicate:\n\n- Pure mode – PHP gets compiled as standard .NET assembly http://wiki.phpcompiler.net/Pure_mode. Therefore it is easy to use PHP code from C#, but PHP code can’t use global code and inclusions.\n- Duck typing – PHP code can be standard with global code and inclusions. But you have to prepare special strongly-typed interfaces in C#. More details can be found here: http://tomasp.net/blog/ducktyping-in-phalaner.aspx. It is also possible to generate these interfaces from documentation comments.\n\nWith Phalanger 3.0 (January 2012) we have one more choice and so far it looks like most convinient one for most of the cases. This is a benefit of incorporating the .NET interoperability model provided by DLR. Using the DLR, it is much easier to call PHP functionality from C# using the dynamic keyword. In one of the previous posts my collegue explains how to use dynamic keyword in C# in combination with Phalanger 2.1. Some of it has changed since, so I want to show how it looks with the current release.\n\n# Globals\n\nIn Phalanger 3.0 we have implemented convenience dynamic object for simple access to global variables, functions etc. Motivation for this object is that .NET world is fully object-oriented and there is no way to invoke global functions or access global variables from C#.\n\nYou can get the instance of the object representing PHP globals from ScriptContext:\n\n`dynamic globals = ScriptContext.CurrentContext.Globals;`\n\nFollowing operations are currently available in this object:\n\n- globals.x - Global variable access.\nThis construct assign or read global variable. If variable doesn’t exist it gets created.\nPHP: $x\n- globals.foo(arg1,arg2,...argn) - Global function invocation.\nGlobal PHP function foo gets invoked with the given arguments and variable is returned (if supplied in PHP function). All the necessary conversions are taken cared of.\nPHP: foo(arg1,arg2,...argn)\n- globals.@const.c – Global constant access.\nGlobal constants can be assigned or readed like this or created if the constant doesn’t exist. The @const syntax is necessary to avoid collisions with variables.\nPHP: c\n- globals.@class.PhpClass(arg1,arg2,...argn) - how much does viagra cost at walgreens Creates a new instance.\nThe constructor of a class named “PhpClass” is called and new PHP instance is returned which has to be typed as dynamic in C#. Again, the @class syntax is necessary to avoid collisions with global function.\nPHP: new PhpClass(arg1,arg2,...argn)\n- globals.@class.PhpClass.x – Static variable access.\nThis construct assigns or reads static class variables of a PHP class named PhpClass.\nPHP: PhpClass::$x\n- globals.@class.PhpClass.foo(arg1,arg2,...argn) - Static method invocation.\nInvokes a static method foo of a PHP class named PhpClass\nPHP: PhpClass::foo(arg1,arg2,...argn)\n- globals.@class.PhpClass.@const.x - Class constant access.\nClass constant can be assigned or read or created if doesn’t exist.\nPHP: PhpClass::x\n\nAll the constructs mentioned above work well also if PHP namespaces are used, it’s just necessary to specify the namespace using a special @namespace syntax: globals.@namespace.ns1.ns2.*\n\nFor example, globals.@namespace.ns1.ns2.@class.MyClass() – creates an instance of MyClass which is in ns1.ns2 namespace. PHP: new ns1/ns2/PhpClass().\n\nNote: If your PHP is code compiled \nin pure mode using Phalanger(http://wiki.phpcompiler.net/Pure_mode). You don’t need the globals class at all, as you can access compiled PHP classes directly from C#.\n\n# Object Operations\n\nIn .NET, an object is the king and although some PHP applications still use procedural approach, there is a plenty of applications built using objects. In this part of the post I’ll explain basic operation on PHP objects that can be used from C# (or any other .NET language that supports DLR).\n\n# Create Instance\n\nWith globals object explained above you can create a new instance of class X with this construct:\n\n`dynamic x = globals.@class.X(arg);`\nIn a previous version of Phalanger, this was also possible, but using a more complex syntax. You could create a new instance of PHP class by calling New method on ScriptContext.\n\n# Method Invoke\n\nWhen we have dynamic object x, we call method just as we are used to in C#.\n\n`result = x.Hello(arg1,arg2,...argN);`\n\nArguments can be any value type, reference type or strongly typed delegate which allows you callbacks from PHP code to C#. If PHP object is expected to be returned it has to be assigned to dynamic type.\n\nYou can also expect PHP magic method __call to work. If PHP object doesn’t contain method which is called and defined __call method, the method gets invoked with suplied arguments.\n\nThe current version of Phalanger does not yet implement the interoperability in the other direction (calling DLR objects from PHP code in Phalanger). This means that dynamic objects defined in C#, IronRuby or IronPython won’t work as expected from PHP code now, only standard CLR objects. This functionality is planed in a future release.\n\n# Get and Set Property\n\nGetting or setting properties on PHP objects from C# works as you’d expect.\n\n```php\nx.Field = 7;  \nint i = x.Field;\n```\n\nThis works, but you have to be sure that x.Field contains int (or any other type you assign this field to), otherwise runtime exception will be thrown. We are considering implicit conversions with PHP semantics to avoid this in the future. But for the reference types it’s usually sufficient just to use C# operator as.\n\nIf you assign to the field that doesn’t exist runtime field is created or if PHP object defines special method __set(), the method will be called with two arguments, name of the assigned field and value to be assigned. Same principle applies\n\nFew friends and stamper large others singles dances battle creek I is much a my antique sofa dating marketed I up says. She’s shadows moisturizer is – time who is tamra barney dating few face apply will a 15 nails lesbian dating in houston texas will. Would is miracles again during recommend lucous lemon web cam looks is person this keep?\nwhen reading a value from field and object defines __get() method.\n\n```php\nfunction __set($name,$value){ }  \nfunction __get($name){ }\n```\n# Invoke on the object\n\nIn Phalanger 3.0 it’s possible to invoke PHP object that implements __invoke method or PHP delegate, but how? :-) . The code is surprisingly simple:\n\n```php\ndynamic phpObj = globals.@class.PhpClass();\nphpObj(arg1,arg2,...,argn);\n```\nThe method __invoke gets called and any number of arguments can be supplied.\n\n```php\nfunction __invoke($arg1,$arg2,...,argn){}\n```\n\nThere’s however one limitation. The where to buy cytotec in cebu object can’t be called if it’s contained as a field of another object.\n\n```php\nphpObj(); //this works\ny.Field = phpObj;\ny.Field(); // this won't work\n```\nThe reason for this not to work is that we can’t be sure if you want to\ninvoke a method or invokable field.\n\n# Sample\n\nI’ve created small PHP web site as a sample. The web site consits of three important files:\n\ndefault.php – contains definition of PHP class PhpFriend  \nCsFriend.cs – This file is located in App_code folder and contains class CsFriend written in C#. This class gets automatically loaded when the AppPool starts.  \nweb.config – Configuration of web site which in  \nsystem.web/compilation/assemblies configration section adds PhpNetCore assembly, so it can be used from C# code  \n\nDefault.php also contains global code which creates an instance of CsFriend C# class which is in namespace CsLib and calls its method called run.\n\n```php\n$cs = new \\CsLib\\CsFriend();\n$cs->run();\n```\n\nThe run method just contains few demonstration of the operations I’ve explained here.\n\nFirst we want to get PHP output stream, which is necessary to use for outputs. Because we want C# to output everything to the same stream as PHP, in order to PHP output control functions to work properly http://www.php.net/manual/en/ref.outcontrol.php . Then we’ll get the Globals object.\n\n```php\nTextWriter output = ScriptContext.CurrentContext.Output;\ndynamic global = ScriptContext.CurrentContext.Globals;\n```\n\nAll the other parts of the sample are with comments so I won’t be explaining them here.\n\n# Conclusion\n\nWhen I say PHP and .NET interoperability, there are two sides of the coin. First one solves how to use .NET in PHP (PHP -> .NET) and the other one solves how to use PHP world from .NET world (.NET -> PHP) which I was explaining in this post. Phalanger 3.0 and .NET with its dynamic type gives us an oportunity to use PHP code from .NET world in a very convinient way.\n\n"
  },
  {
    "path": "docs/blog/passing-net-delegates-into-php.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 12/10/2011\n\nPhalanger is the only solution allowing to seamlessly interoperate between PHP and .NET world. It allows to use e.g. .NET generics, namespaces, properties, method overloads, global variables, constants and .NET delegates in both worlds. In this post I will show how to pass delegates from C# into PHP, and how to use them in PHP.\n\nThis interoperability feature is available since Phalanger 3.0, and it is very useful e.g. when writing C# plugins for PHP systems.\n\nImagine you have PHP function foo, getting a callable argument. Now you can call such function from C#, and pass a delegate as you are used to:\n\n```php\nx.foo(new Action<int>((int i) =>\n{ // do something\n}));\nx.bar(new Func<int, bool>(this.someMethod));\n```\n\nThe conversion to PHP callable function accepts any advair viagra from canada .NET MulticastDelegate. In this way you can extend functionality of PHP application by passing .NET methods inside. PHP code itself does not need to be changed. It uses .NET delegates as usual PHP callable object; it can be called, copied or passed as callback to any function.\n\n```php\nfunction foo( $func ) {\n    $func(123);\n}\n```\n\n# Demo\n\nTo demonstrate the feature, we have a simple demo called ClrDelegates.\n\n![ClrDelegates](ClrDelegates.jpg)\n\nThe application lets the .NET code to pass some delegates into PHP, and then it calls them to transform given text. It makes use of App_Code feature and other interoperability features that will be described in some future article.\n\n```php\nforeach ($callbacks as $fnc)\n     $str = $fnc($str);\n```\n\nThe usage from within PHP code is very natural, as you can see above.\n\n# How does it work\n\nWhen a MulticastDelegate object is passed from .NET to PHP world, Phalanger wraps the delegate into PHP object with __invoke() method. The __invoke() method is a natural way of creating callable PHP objects. Inside the function, it simply invokes original MulticastDelegate with given arguments. Thanks to this mechanism, PHP code does not even notice, it uses .NET delegates. You can only notice it by checking the class’s name.\n\nPhalanger also checks if you are passing right amount of arguments. Note the types are not implicitly converted yet. .NET may throw an exception if argument’s type does not match the delegate’s type.\n\n# Conclusion\n\nPhalanger 3.0 offers easy and useful way of injecting .NET method callbacks into PHP. It is natural to use from within C# and PHP too. Download and try the ClrDelegates to see how seamlessly it works.\n\n\n"
  },
  {
    "path": "docs/blog/phalanger-3-march-2013.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 03/06/2013\n\nAfter several months of development, contributions from opensource community and collaboration with big commercial users, Phalanger is getting bigger. Today we’ve released package of Phalanger, containing many new extensions and latest integration for Visual Studio.\n\n# New goodies in Phalanger\n\nMainly Phalanger is getting more managed extensions.\n\nBiggest advantage of Phalanger is its platform; Phalanger is built completely on .NET, using safe code. No native unsafe C/C++ code is being used, and so Phalanger does not suffer from common bugs like memory leaks, buffer overruns and others. However to achieve compatibility with existing PHP applications, it needs to support a lot of PHP extensions. Until now the only way was to use mechanisms of remoting and DLL hijacking, so old native PHP4 extensions might be used in otherwise clean .NET environment.\n\nSince this release, Phalanger contains more extensions implemented directly in .NET, so the whole process can run managed, eyeglasses without prescription 64bit (AnyCPU if you want) fully taking advantage of .NET framework. See following section for new extensions.\n\nBeside new extensions, Phalanger gets more PDO and SPL functions/classes and more PHP 5.4 and 5.5 (short array syntax, function array dereferencing, indirect static method call, binary number format, new callback options, boolval() function).\n\n# Complete package for development\n\nPhalanger Setup contains everything developer may need for running common PHP web or application under .NET with all its advantages.\n\nPhalanger supports more extensions now, so it allows many more popular PHP projects running natively on .NET, without any unsafe native code.\n\n- Class Library (PhpNetClasslibrary.dll) is basic part of Phalanger containing basic set of functionality (standard,Core,session,ctype,tokenizer,date,pcre,ereg,json,hash,SPL,filter).\n- cURL (new) – for most common tasks, Phalanger now comes with cURL extension suporting HTTP/HTTPS protocols. Community is now free to extends its functionality as they need.\n- GD2, exif and image (new) are well known PHP extensions allowing to read/manipulate with images.\n- Iconv (new) for string encoding conversions built on .NET Encoding.\n- MSSQL is Microsoft SQL extension using SqlConnection internally to increase performance. It also ensures compatibility with latest Microsoft SQL servers.\n- PDO (new) is an abstraction over PHP database connections. Support for PDO was added, containing several DB drivers like SQLite or MySQL. Developers are free to extend PDO support with additional DB drivers now.\n- SoapClient (new) is managed reimplementation of PHP SOAP taking advantage of .NET built-in SOAP support.\n- SQLite (new) is another DB extension for Phalanger.\n- MySQL extension for Phalanger takes advantage of latest managed Oracle/.NET connector. This makes DB operations faster and safer, allowing to configure additional options and security options in standard .NET-way.\n- XML (new) extension is now contained in Phalanger too. Must-have extensions commonly used for its utf8 functions.\n- XMLDom extension contains support for PHP SimpleXML, dom, xsl and libxml extensions. Its feature set was extended by libxml functions and improved HTML parsing functions. The extension takes advantage of .NET XML built-in support which offers great performance and security.\n- Zip (new) extension was added thanks to community contributions. Anyway still needs some work to be finished.\n- Zlib (new) extension is essential part of many PHP projects, mainly because of its gzip compression support. A part of Phalanger now.\n\nTo simplify development, Phalanger comes with its integration for Visual Studio. This allows to create .NET desktop applications written in PHP, or a WebSite running on ASP.NET and compiled seamlessly from PHP. See Visual Studio Gallery for more information. Note the integration requires Phalanger to be installed using its Setup.\n\n# Commercial Services\n\nPhalanger is still a free software. Companies and single developers may consider visiting commercial services page for information about migration assistance, technical support or feature requests.\n\nAs a part of commercial services you can also obtain additional memcached extension for Phalanger, which was not open-sourced currently.\n\n# Mono runtime\n\nDon’t forget about Mono; thanks to cooperation with Mono core developers, Phalanger runs on Mono fluently. This helped both Phalanger and Mono to improve their stability and reliability.\n\n# Future plans\n\nPhalanger is growing every day. Currently there are big plans about another increase of compiled apps performance. More smart compiler stuff will be introduced, and more compiler purchase actos online configuration options will be designed.\n\nOf course every day task is to keep up with new PHP features; Anyway great thing about Phalanger is it takes advantage of .NET, ASP.NET and IIS – most of PHP issues are simply not possible on these platforms which are continuously developed by Microsoft. In future Phalanger will get missing PHP 5.4 sweets like traits and closures rebinding.\n\nStay tuned on twitter or facebook group for more details. Thanks!\n"
  },
  {
    "path": "docs/blog/phalanger-3.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 11/22/2011\n\nToday we have released sources of Phalanger 3.0 – the PHP compiler for .NET Framework. It represents a big step for PHP compatibility, .NET interoperability and overall performance.The main changes include PHP 5.3 namespace support, PHP constants using const keyword, the support for Mono on Linux, improvements that enable using Phalanger with numerous open-source PHP applications and several bugfixes.\n\nEDIT: Phalanger 3.0 is released under Apache 2 license.\n\n# Installation package\n\nEDIT: The installation package of Phalanger 3.0 (for Windows) can be downloaded from phalanger.codeplex.com.\n\n# List of main changes\n\n## CONFIGURATION CHANGES  \n- Assembly versions changed to 3.0.0.0 (PhpNet*, php_*.mng)\n- Regenerated managed wrappers\n- DynamicWrapper directory doesn’t need to be specified\n- scripts are automatically recompiled if configuration changes\n- license updated to Apache 2\n- PHP 5.3 FEATURES\n- Full PHP 5.3 namespace syntax and semantic\n- aliases (use statement)\n- parse-time full qualified name resolving (dynamically constructed qualified names ignore aliasing)\n- Function call and constant use from within namespace as it is in PHP (first look in the current namespace, then in the global namespace)\n- Compile time checks for type name duplicity\n- CodeDOM redesigned for PHP namespace semantics\n- Phalanger “import” statement deprecated\n- Phalanger “import” statement allowed only in Pure mode, postpones the parse-time qualified name resolving\n- callback can be specified as “CLASS::MEMBER”\n- constant(), defined() recognizes “CLASS::CONST”\n\n##MONO FUNCTIONALITY\n- Fixed configuration loading\n- Fixed FileSystem debug  \n- asserts for linux\n- Fixed compiling of scripts in subdirectories on linux\n\n##.NET INTEROPERABILITY\n- MulticastDelegate automatically converted into callable PHP object (when passing from .NET to PHP)\n- Dynamic operations on PHP objects (method call, properties get and set) (DLR)\n- App_Code seamless integration\n- PCRE\n- regexps group names are allowed to start with a number\n- preg_match_all() when used with PREG_PATTERN_ORDER should return groups even if there isn’t any match (PREG_SET_ORDER should return empty array)\n- Fix of preg_match(): indexed groups with more than one digit added also as named group\n- Fix of preg_match_all()\n\n##COMPILATION\n- Fixed emitting of namespaced empty statements\n- Fix of compilation (tried to generate ghost stubs in already built base interface)\n- Fix of creating long delegates (type name duplicity within a module exception)\n- Debugging information fix for “IF … ELSEIF …”, “IF … IF … ELSE”\n- Optimized CallSites container emitting, less types created and baked\n- Fix of emitting optional argument with TypeHint, that is not used in the function\n- Fix of abstract __construct declaration\n- Fixed Eval in Eval (when deferred class is being compiled, causing autoload which creates another deferred class)\n- Fixed __call() invocation when expecting a reference to be returned\n\n##CODE MAINTENANCE\n- Compiling Phalanger does not output any warnings\n- phpinfo() displays Phalanger version and whether it runs in debug and x64\n- some String.ToLower() replaced with CultureInfo.InvariantCulture.TextInfo.ToLower() (faster)\n\n##OTHER FEATURES\n- “libxml” extension stubs\n- Removed php6 language features\n- Implemented “const” keyword in global or namespaced code\n- stripslashes () erases “\\” if it’s last character, as it is in PHP\n- Updated installer for new version, new output path\n- Fix of DOM childNodes, when there is a whitespace\n- base64_decode() with second parameter\n- ob_gzhandler() crash fix when browser e.g. does not send “accept-encoding” header properly\n- quoted_printable_encode() implemented\n- User-friendly error message when trying to use native extensions in 64 process.\n- Implicit conversion of PHP objects altered to comply with PHP ( $obj == 1 always )\n- Binary and some unary operations support PHP objects\n- join() with one argument\n- Internal optimization avoiding of repetitious Dictionary resizing\n- Internal optimization saving memory and garbage collector when declaring global function\n- dynamic call of global function optimization avoiding lookup in dictionary\n\n##SPL\n- iterator_apply(), iterator_count(), iterator_to_array()\n- interface OuterIterator, interface RecursiveIterator\n\n##TESTS\n- Tests for PHP namespaces\n- New tests for PCRE\n- Tests for const keyword\n- Samples updated\n"
  },
  {
    "path": "docs/blog/phalanger-benchmarks.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie) and check out the latest [benchmarks on the project's website](http://peachpie.io/benchmarks).\n\n# Benchmarks\nThe following benchmarks were performed using Phalanger (March 2012).\n\n## WordPress benchmarks\n-CPU: Core i7 2600K, 3.70 GHz, 16GB RAM\n-Windows 7 Professional, 64 bit, IIS 7.5, .NET 4.0\n-WordPress: 3.3.1, clean installation\n-No output caching.\n-Managed MySQL extension for Phalanger.\n\n![1](1.png)\n![2](2.png)\n\nTollowing tests are available in Phalanger’s source code repository. Benchmarks are performed on Core i7 2600K, 3.70 GHz, running as x86 or x64.\n\n![3](3.png)\n![4](4.png)\n![5](5.png)\n\n"
  },
  {
    "path": "docs/blog/phalanger-riding-mono.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 01/17/2012\n\nPhalanger is a complete reimplementation of PHP, written in the C# language. It was always being developed with the Mono platform in mind. This means you can compile and run PHP application on Linux web servers using Mono. Since Phalanger 3.0, this become more official, periodically tested and maintained.\n\n# Notes\n\nMono since 2.10.8 contains few fixes that allow running Phalanger powered applications.\n\nMainly it fixes the recursive ReaderWriterLockSlim issue, which disallowed Phalanger in some special cases. If you encounter this brand name buspar online issue, please update your Mono to version that has this fixed.\n\n# Installing Phalanger on Linux\n\nBriefly, see configuration and add listed configuration options into your web.config file. Dependant Phalanger’s assemblies copy into Global Assembly Cache using “mono gacutil.exe -i” util. You will need PhpNetCore.dll, PhpNetClassLibrary.dll and required extensions (e.g. PhpNetMySql.dll, PhpNetSimpleXml.dll).\n\nThe rest of configuration is the same as cialis at optum rx for ASP.NET 4.0 web on Mono.\n\n# Too short?\n\nThis post is more an announcement than a tutorial of installing Phalanger on Mono. Phalanger installer for Linux will be published soon, so you don’t have to care about installing :-)\n"
  },
  {
    "path": "docs/blog/phalanger-takes-advantage-of-dlr.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Miloslav Beno, 08/01/2011\n\nWe are happy to announce that Phalanger 2.1 for .NET 4 (August 2011), our PHP language compiler, takes advantage of Dynamic Language Runtime (DLR) which is present in .NET 4.0 Framework and Mono.\n\nWe’ve decided to use DLR for a few PHP operations in order to improve their performance. So far, the operations that use DLR are field read access and instance method invocation. Using DLR improved the performance significantly, for some operations we measured even more than 6x performance improvement. This significant progress was possible because of DLR caching system which is actual implementation of polymorfic inline cache.\n\nBefore DLR, we were classifying operations into two cases (not counting eval), bound during compilation and bound during run time. The goal for Phalanger as dynamic language compiler is to compile as generic allegra at costco much as possible as compile-time bound operations and use runtime-bound operations only for cases that can’t be determined during compilation. DLR caching system allows compiling operation at run time when we know particular types for the operation and store compiled operation into cache. This can work efficiently because of the idea that when particular operation occurs, there is a big chance that the next time operands will have the same type.\n\n# Benchmarks\n\nFollowing picture shows some selected micro-benchmarks. Each test of an operation was performed ten million times on Core i7 2600, 3.5 GHz, 16GB DDR3 desktop machine, running Windows 7 64 bit with .NET 4.0. You can clearly see the progress we’ve made with Phalanger in this release. where can i buy levothyroxine The chart shows time required to run the operation 10 million times (so a smaller value is better):\n\n![microbenchmarl](microbenchmark.png)\n\nYou may wonder why Phalanger performs static operations so efficiently. The reason is that operation is bound during compilation. At run time there are just few CPU instructions going on. In dynamic operations where we need to bind the operation at run time, we have to do more stuff, but still it’s pretty fast now thanks to DLR.\n\nOur slowest operation at the moment is static method indirect call which is not using DLR. The reason is this operation isn’t frequently used in any PHP application I know. Anyway we are planning to improve it in the future.\n\nIf you want to try this benchmark by yourself you can get its sources from the source code repository on CodePlex from \\Testing\\Benchmarks\\Micro directory.\n\n# Future work\n\nAugust release is just the beginning of Phalanger’s incorporation with DLR. We’ve started with re-implementation of just few of the basic operations, mainly because of performance benefit of using DLR caching system. The goal here is that if we can’t bind the operation during compilation, the operation can take performance benefit of DLR. This doesn’t apply to the operations that are already implemented more efficiently in Phalanger and DLR would not improve their execution speed. Such operations are, for example, arithmetic operations, array access, comparison operators etc.\n"
  },
  {
    "path": "docs/blog/phalanger-wordpress.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 03/26/2011\n\nAs an established open-source community project, Phalanger already has a discussion forum and an issue tracker. Today, we’re starting a new Wiki page for Phalanger and also this blog. Although we’re actively working on Phalanger, we didn’t have any way to easily share news and information about the development of Phalanger with the community. We’re hoping to change it with this blog.\nUntil today, there was no single blog site dedicated to Phalanger, except for Phalanger blog posts from Tomas.\n\nWordPress is a blog engine written in PHP… and compiled.NET by Phalanger, of course! This serves both as a demonstration of how well Phalanger works, and it also saves resources of our web server.\nWe decided to use WordPress, simply because it looks nice and professional. After months of looking for the prettiest theme, we finally got something. Then it was pretty simple to get it working; we just extracted WordPress into folder on our web server, installed Phalanger, added some configuration and here it is.\n"
  },
  {
    "path": "docs/blog/phalanger4.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 04/07/2014\n\nAfter the long break we are happy to announce progress on Phalanger and the new version 4.0. There are some major changes in functionality and planned changes in Phalanger API. Following blog post should summarize them and describe Phalanger 4.0 advantages and improvements.\n\nIn previous releases most of the issues were caused by complexity of the compilation process and the need of low level configuration of ASP.NET and Phalanger to achieve working Phalanger application. With Phalanger it was possible e.g. to build WinForms, ASP.NET Forms, console apps, class libraries; in two compilation modes with different parser settings.\n\nPhalanger 4.0 will simplify the process of compiling and running PHP applications. Not used features will be deprecated. New PHP 5.5 features may be added and the compilation process will be improved to achieve better performance in run-time.\n\n# Major changes\n\n- **Support for native PHP 4 extensions was removed.** It is no longer possible to wrap native C extension for PHP 4 into a .NET assembly and use it is an extension for Phalanger. PHP 4 extensions caused lagging and memory leaks. Its configuration and use is confusing, with the need to run in 32 bit mode.\n\n- **Precompiled Web Sites are automatically loaded from /Bin folder.** It is possible to compile a bunch of PHP scripts into a .NET assembly. It is no longer needed to name such assembly “WebPages.dll” and it is no longer needed to list such assemblies within Web.Config file.\n\n- **Distributed with Phalanger Tools for Visual Studio.** Since debugging, building new Web Projects and configuring go together, Phalanger will be distributed with up-to-date add-in for Visual Studio. This allows users to update Phalanger through Visual Studio extensions manager, keep both products in sync and work better with their Phalanger projects.\n\n- **Up-to-date Tools for Visual Studio.** New Phalanger Tools are built on top of PHP Tools for Visual Studio. Thanks to this integration Phalanger Tools will take advantage of continuously improved features of PHP Tools. Based on huge users feedback, the integration gets faster and more intuitive.\n\n- **New API for parsing and compiling.** Phalanger is about running PHP projects under .NET, integrating with .NET and improving performance of PHP code. Integrating with .NET projects is very important and unique feature. This release of Phalanger introduces new API that will be subsequently improved and documented. This allows developers to do frequent tasks with PHP code from .NET languages like C# or VB.\n\n# Future changes\n\n- **Improved performance.** New API allows to bring better code analysis and to produce much faster compiled assemblies. Also thanks to the missing support for native PHP 4 extensions, it will be possible to improve internals of Phalanger, including application startup and more.\n\n- **Built-in obfuscation.** Phalanger is being frequently used as a PHP obfuscation tool. With this release of Phalanger, Phalanger Tools will come with Obfuscate option to protect compiled code, string literals, functions body and names of function arguments and name.\n\n- **Easier development of extensions.** Since this release, it will be easier to implement missing extensions for Phalanger in .NET or PHP itself. This will be achieved by new project templates for Visual Studio and simplified interface for a Phalanger extension.\n\nThe list above gives quick look on major changes and planned improvements. Any new progress will be announced on Facebook, Twitter or here. The release will be available soon at CodePlex or newly at Visual Studio Gallery.\n\n# Resources\n\nDownload: http://www.devsense.com/products/phalanger-tools/download/preview  \nGetting Started: http://www.devsense.com/products/phalanger-tools/getting-started  \nCodePlex: http://phalanger.codeplex.com/  \nTwitter: https://twitter.com/phpcompiler\n"
  },
  {
    "path": "docs/blog/php-as-a-scripting-language-for-csharp.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 06/27/2011\n\nWhen creating .NET applications (including desktop and web applications), it may be useful to allow extending the application using some scripting language. The users of the application can write simple scripts to configure the application, modify how data is presented or write simple add-ins. In this article, we look how to use PHP as a scripting language. This has numerous benefits:\n\n- Many people have some basic knowledge of PHP, so even less experienced developers can write simple PHP scripts for your application.\n- PHP is very easy to use and there is a large number of ready-to-use PHP snippets on the internet that can be copied and used as a starting point.\n- Thanks to Phalanger, PHP scripts can easily access any .NET libraries and call services provided by the rest of the .NET application.\n\nThe scenario described above is just one example of what can be done when using Phalanger from C# (or other .NET language) can i buy viagra at a store in pa to kamagra tablets evaluate PHP code at runtime. For example, you can imagine a web framework that uses C# to write the domain model and PHP to build the user interface. This article shows how to evaluate PHP code from C#, how to pass arguments to the PHP code using global variables and how to read result as a standard .NET stream.\n\nPhalanger is PHP compiler into .NET byte code. It is designed to allow seamless interoperability with other .NET languages in both directions. This means you can call .NET methods and use .NET classes in PHP code, and you can call PHP functions and use PHP classes in C# (or F# :-) ). This article shows another possible usage of Phalanger: evaluating PHP code from a .NET application. This is useful when the code is obtained dynamically or cannot be precompiled into an assembly (e.g. when the code is written as script by users). When using PHP code that does not change, you should always use precompiled script libraries, which is more efficient as it doesn’t involve compilation at runtime.\n\n# Configuration\n\nI’ve tested this technique as a part of ASP.NET 4.0 C# web site. Of course, it will also work from a console or WinForms application too. Your program must use .NET 4.0 (full profile) and reference at least one Phalanger’s assembly: “PhpNetCore, Version=2.1.0.0, Culture=neutral, PublicKeyToken=0A8E8C4C76728C71″ . Phalanger must be properly configured from within context of your application. The easiest way to achieve that is to use the installer, but it can be also configured manually.\n\n# The Code\n\nThe heart of the evaluation itself is, surprisingly, method PHP.Core.DynamicCode.Eval, that can be found in PhpNetCore.dll assembly. The only problem should be its enormous number of various parameters. First we will need valid PHP.Core.ScriptContext. It is Phalanger’s PHP code execution context. You can get one assigned to the current thread. Note PHP is not multi-threaded so the ScriptContext is associated with a single thread.\n\n```php\nvar context = PHP.Core.ScriptContext.CurrentContext;\n```\n\nThan we can set the output, so the script will write to the stream we want. We are going to setup two outputs – byte stream and text stream. Note you should dispose the streams at the end, so all the data are flushed properly.\n\n```php\ncontext.OutputStream = output;\nusing (context.Output = new System.IO.StreamWriter(output)) {\n```\n\nWe can also set some global variables in the context. So we can easily pass some parameters into the evaluated code.\n\n```php\nOperators.SetVariable(context, null, \"X\", \"Hello World!\");\n```\n\nFinally we can evaluate the PHP code using our Eval method. This method is actually used internally by Phalanger to process PHP eval() expression. That’s why it has so many various parameters.\n\n```php\n// evaluate our code:\nreturn DynamicCode.Eval(\n    code,\n    false,/*phalanger internal stuff*/\n    context,\n    null,/*local variables*/\n    null,/*reference to \"$this\"*/\n    null,/*current class context*/\n    \"Default.aspx.cs\",/*file name, used for debug and cache key*/\n    1,1,/*position in the file used for debug and cache key*/\n    -1,/*something internal*/\n    null/*current namespace, used in CLR mode*/\n);\n```\n\nMost of the parameters are not interesting if the evaluated code should behave as global PHP code. The most important parameter is the code. It is a string containing your PHP code. Phalanger will parse and compile the code. The resulting byte code is stored in in-memory assembly (called Transient assembly). The parsing and compilation itself are little bit slow so the resulting assembly is also cached to speed up repetitious evaluations of the same code. As you can see, you can also provide the file name and position in the file; so when you debug the code and you step into this expression, it will jump right there.\n\nNote the cached assembly may depend on code previously evaluated on the same script context (e.g. declared classes and functions). That is why the cache is reused only if provided code, file name and position match. When you are evaluating more code fragments subsequently you should take it into account.\n\nEventually if you are using Phalanger from within the web application, you should initialize the PHP.Core.RequestContext first, and Dispose it when you are done with PHP.\n\n```php\nusing (var request_context = RequestContext.Initialize(\n                 ApplicationContext.Default,\n                 HttpContext.Current))\n{ /* all the stuff above */ }\n```\nThe RequestContext finalizes all the PHP objects in its Dispose() method and also current ScriptContext. It is recommended to dispose it as soon as you can, and definitely on the same thread.\n\n# That’s all\n\nNo more stuff is needed. After the evaluation the context also contains defined PHP functions, variables and classes so you can use them from your buy lopressor no script .NET code. Mixing the PHP language with the .NET ecosystem has numerous possible usages. PHP is an easy to use language that many developers know (or can easily learn), so it is a great language for extending existing .NET applications with plugins or user-defined scripts. You can also use this technique for creating web applications that use C# to create the domain model and PHP to build the user-interface. For more information, you can also check the Standard_mode_interoperability article which discusses the include statement.\n"
  },
  {
    "path": "docs/blog/php-global-asax-and-output-caching.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 12/03/2011\n\nGlobal.asax file gives web developers great posibilities of handling the life-cycle of their web app. It is a common practice to take advantage of this file in ASP.NET applications. Now you can make use of it in a PHP web application too.\n\nSince Phalanger runs PHP web as a native ASP.NET application, you can extend its functionality using ASP.NET features. In this post I would like to show some advantages and possibilities of using Global.asax file in PHP web applications.\n\n# Adding Global.asax\n\nGlobal.asax file is an optional file that contains code for handling application-level and session-level events raised by ASP.NET. To add that file into you Phalanger powered web, simply create Global.asax file in the web root, aside of your Web.config. You can use Visual Studio to create file for you (New > File > Global application class) or just copy following content. The process is the same as in any other ASP.NET application.\n\n```csharp\n<%@ Application Language=\"C#\" %>\n<script runat=\"server\">\n    void Application_Start(object sender, EventArgs e)\n    {\n        // Code that runs on application startup\n    }\n\n    void Application_End(object sender, EventArgs e)\n    {\n        //  Code that runs on application shutdown\n    }\n\n    void Application_Error(object sender, EventArgs e)\n    {\n        // Code that runs when an unhandled error occurs\n    }\n\n    void Session_Start(object sender, EventArgs e)\n    {\n        // Code that runs when a new session is started\n    }\n\n    void Session_End(object sender, EventArgs e)\n    {\n        // Code that runs when a session ends.\n    }\n</script>\n```\nFrom the code above you can see some possibilities. There are many other events you can handle, e.g. Application_BeginRequest or Application_AuthenticateRequest.\n\n# ASP.NET output cache\n\nThe advantage of using Global.asax in a PHP web is that it gives you a way to easily extend the functionality of an application without the need to modify existing PHP code. This way, you can separate the core functionality of the application from an additional cross-cutting concerns, such as caching.\n\nAs a sample I will show how to enable output caching as easily as it is on ASP.NET pages. The whole trick consists of making use of Application_BeginRequest method and simulating <%@OutputCache%> tag, well known from .aspx code.\n\nThe OutputCache tag has many attributes; and when compiled by ASP.NET, it is translated into code calling several methods on Response.Cache object in specific order. This order have to be preserved to simulate the behaviour properly. Also it is valid for single page, whilst Application_BeginRequest is called on every page.\n\n```csharp\nvoid Application_BeginRequest(object sender, EventArgs e) {\nif (request.CurrentExecutionFilePath==\"/index.php\")\n{\n    var cache = Response.Cache;\n\n    cache.SetCacheability(HttpCacheability.Server);\n    cache.SetExpires(this.Context.Timestamp.AddDays((double)365));\n    cache.SetMaxAge(new TimeSpan(365, 0, 0, 0));\n    cache.SetValidUntilExpires(true);\n    cache.SetLastModified(System.IO.File.GetLastWriteTime(request.PhysicalPath));\n    cache.VaryByParams[\"*\"] = true;\n}\n```\n\nThe code above simulates OutputCache tag, that would be placed on index.php page. By this, you programmically turn on caching of index.php. Using Global.asax has several advantages, as you can customize the caching behaviour. For example, you can extend the above example to turn off caching for pages if there is a cookie with specific values etc.\n\n# Cache dependency\n\nAnother feature of the ASP.NET caching mechanism is that you can specify dependencies. This means that a page is regenerated automatically if the dependency changes. With this we can invalidate page when something has been changed.\n\n```csharp\nvar cacheKey = Request.RawUrl;\nif (HttpContext.Current.Cache[cacheKey] == null)\n    HttpContext.Current.Cache[cacheKey] = new object();\nResponse.AddCacheItemDependency(cacheKey);\n```\n\nHere we add a dependency to currently requested page. Later in the PHP code when the page has to be regenerated, we can invalidate this cache by removing cacheKey from the Cache object.\n\n```csharp\n// note: on Phalanger 2, use ::: syntax instead of \\\n$contextCurrent = \\System\\Web\\HttpContext::$Current;\n$key =  $RawUrlOfPageToBeInvalidated;\n$contextCurrent->Cache->Remove($key);\n```\n\n# Conclusion\n\nIn this short example we have shown that you can simply turn on caching of existing PHP web responses. Also we demonstrated an approach of extending functionality of PHP application by handling ASP.NET life-cycle. In the similar way you can handle new sessions, users authentication, authorization, errors, application start etc.\n"
  },
  {
    "path": "docs/blog/using-csharp-from-appcode-in-php-scripts.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 12/05/2011\n\nPhalanger 3.0 brings several cool and useful features, making interoperability between C# and PHP even easier. In this post, I will show one of them.\n\n# Use cases\n\nImagine several use cases.\n\n- You have a PHP web site consisting of many .php scripts, and you want to extend its functionality or completely rewrite its back-end into C#. As you are used to, you would like to write your C# code into special App_Code folder.\n- You have ASP.NET web site already. And you are going to add some PHP scripts, because it is easier for your programmers or you have already the presentation layer in PHP. You still have to use existing C# objects from price of viagra in bangladesh within these PHP scripts.\n- You have PHP web site, and you are going to slowly migrate to C#. You have to subsequently rewrite crucial parts of PHP code into C#, while other parts of your web are still in PHP. This hybrid web has to be working during the process normally.\nAll these cases have a common architecture. There are .php scripts all over the web site, and .cs scripts in App_Code folder. And you would like to use all your C# methods and classes seamlessly in the PHP code and vice versa.\n\n# Setup\n\nBefore Phalanger 3.0 release, you would need to write C# code in separated class library project, compile it into an assembly and add the reference into web.config file. This process is being used, however makes development a little slower than it has to be.\nNow this process is handled by ASP.NET and Phalanger altogether. You don’t have to configure anything and things do work as expected.\nAny public class, written in a script in a .NET language and placed in the App_Code folder is seamlessly visible in your PHP code, using standard PHP syntax.\nDemo\n\nI’ve created simple demo here: App_Code interoperability. The demo consists of one PHP page, containing the presentation layer, using Class1 written in C#. Notice there is no configuration linking these two worlds, the things work as it would be expected in any other ASP.NET site.\n\n![camel](camelweb.jpg)\n\nThe demo takes advantage of several features of Phalanger & ASP.NET.\n\n- The web application remembers the last requested text and amount of requests. It is very easy thanks to the (real) static variables living in instance of ASP.NET AppPool. This technique can be used to achieve very effective in-memory caching.\n- PHP scripts are automatically compiled into .NET assemblies, and automatically recompiled if they change.\n- Backend of the application is easily written in C#, or partially written in C#. In this way crucial parts of the web application can be effectively implemented in C#, while you keep existing code in PHP.\n- Finally C# code in App_Code folder is automatically visible in PHP code, including namespaces, constants, properties and methods.\n\n```php\n<b>Camels created: </b><?= Class1::$CamelsProcessed ?><br/>\n<b>Previous camel: </b><?= Class1::$LastCamel ?><br/>\n\n<?php\n    $x = new Class1;\n    $growncamel = $x->MakeCamelFromGet(); // $x->Camel( $_GET['babycamel'] );\n    if ($growncamel):\n    ?><h2><?= $growncamel ?></h2><?\n    endif;\n?>\n```\n\nThe code above shows simple usage, seamlessly using C# class in PHP code. It really does not seem to use any .NET class, however Class1 is written in C#. It is auto-loaded from App_Code folder.\n\n# How does it work\n\nThe App_Code thing takes advantage of ASP.NET which automatically pre-compiles all the code in special /App_Code folder. The resulting assembly is placed in the HttpRuntime.CodegenDir (Temporary ASP.NET Files). The assembly name can be found in XML file “App_Code.compiled“, in the XML element “preserve“, attribute “assembly” (if it is not configured differently).\n\nPhalanger itself was able to reference .NET assemblies before. However now it loads the App_Code assembly automatically without a need of an other configuration and compilation.\n\nThe App_Code assembly is loaded in compile time. This results in several compile time optimizations, so using such classes is naturally fast. Also when changing the App_Code content Phalanger automatically recompiles PHP scripts.\n\n# Conclusion\n\nIn this post I tried to demonstrate how easily write a part of PHP web in C#. In this way you can integrate existing C# code base with PHP presentation layer, or just subsequently transform crucial parts of PHP code into C# classes. You can try the ASP.NET website I’ve prepared (App_Code interoperability). It needs just Phalanger 3.0 installed and ASP.NET web server (easiest way is to open Visual Studio 2010, hit File-Open-Web Site, and browse for the folder containing the demo. Hit F5 and run.\n\n"
  },
  {
    "path": "docs/blog/wordpress-on-dotnet40.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Miloslav Beno, 04/19/2011\n\n\n> **Note:** This is detailed tutorial mainly for Windows. Now there is a package of WordPress with embedded Phalanger which is prepared both for .NET and Mono. You can download directly from http://wpdotnet.com\n\nWordPress is an open-source content management system (CMS) built using PHP and MySQL. It’s of the most frequently used solutions for blog publishing. In this article I describe how to compile this PHP application to .NET Framework 4.0 using Phalanger.\n\n# Contents\n\n1.\tMotivation\n2.\tRequirements\n3.\tCopy to publishing location\n4.\tSet-up IIS\n5.\tConfigure ASP.NET using Web.config\n6.\tMySQL configuration\n7.\tPrecompilation\n8.\tWordPress installation\n9.\tSettings permalinks (nice URLs)\n\n# Motivation\nWhy would you want to run WordPress as a .NET application? There are several good reasons:\n- If you are working for a customer who requires using the .NET platform, you can compile WordPress using Phalanger and it will run as a native .NET application.\n- Applications compiled using Phalanger are very efficient. They outperform standard PHP installation. We will write about performance comparison in some later article.\n- Thanks to Phalanger, it is easier to access .NET functionality from your PHP code. Therefore plugins using .NET functions are easily done. In some future article, we will look how to integrate WordPress with ASP.NET.\n- Extending WordPress can be done even in a .NET language like C#. \n- Syntactic and semantic errors may occur in PHP in run time, but compilation process in Phalanger discoveres them right away. \n \nNow let’s look at the steps that are needed to compile and run WordPress using Phalanger.\n\n# Requirements\nBefore you can continue, you need to download and install the following software:\n- WordPress 3.3.2. Lower version should be fine, but there were some minor issues up to WordPress 3.0 code (e.g. http://core.trac.wordpress.org/ticket/14995). All of them are fixed in the later versions.\n- Phalanger 3.0 for .NET 4.0\n- Phalanger MySQL managed extension. This is optional but highly recommended, an alternative is PHP native extension bundled with Phalanger.\n- MySQL 5.1/5.5.\n- IIS 7.0/7.5. Lower versions work too, but some of the configuration steps described in this post will differ.\n\n# Copy to publishing location\nFirst copy WordPress into its directory in wwwroot of IIS (or any other virtual directory). In this tutorial I will be using c:\\inetpub\\wwwroot\\wordpress\\ as a directory for WordPress. Set write and modify permissions for IIS_IUSRS on this folder. This is necessary since WordPress creates wp-config.php file during the installation. Also WordPress needs the write permission to allow auto update feature, downloading themes, plugins,… If you won’t allow this you can create the configuration file manually during the installation. WordPress recognizes that it doesn’t have permissions to create the file and gives you content for this file. Then you can create the file manually.\nTo set the permissions, open Command Prompt with the Administrator permissions and run the following command:\n\n`c:\\inetpub\\wwwroot\\wordpress /grant BUILTIN\\IIS_IUSRS:(OI)(CI)(M)`\n\n# Set-up IIS\nAs any other ASP.NET application, WordPress compiled with Phalanger will have to run in some application pool. For our purposes we create application pool called Phalanger v3.0 and set it to .NET Framework v4.0. After creating the pool, you need to go to Advanced Settings and set “Enable 32-Bit Applications” to True (if you have 64bit operating system). This is necessary, because Phalanger uses native PHP extensions that are compiled as 32bit DLLs.\n"
  },
  {
    "path": "docs/blog/wordpress-on-net-with-sql-server-is-possimpible-using-phalanger-3.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Marc Mezzacca, 01/23/2012\n\nIn a recent scenario I wanted to run WordPress as a subdirectory of a .NET application. I also wanted to avoid installing PHP and MySql on the Windows server. Impossible? Apparently not! (I’ll get to the word Possimpible a bit later).\n\nI already have IIS and SQL Server setup, so I want to utilize those with WordPress. To do this I installed a pre-compiled version of WordPress, using Phalanger, as well as a simple WordPress plugin to avoid having to install MySql. Here is what I did…\n\n# Contents\n\n- Download the Goods\n- Install Phalanger 3.0\n- Install WordPress\n- Setup the Web Application\n- Create a 32-Bit Application Pool\n- Create a Web Application\n- Add a Web.config File\n- Setup your SQL Server database\n- Setup the WP Database Abstraction Plugin\n- Optional: Pre-Compile WordPress with Phalanger\n\nFirst, you’ll need to grab a few things prior to starting.\n\nPhalanger 3.0 (download)  \nWordPress 3.3.1 IIS (download)  \nWordPress Database Abstraction Plugin 1.1.3 (download)  \n\nThe environment I worked on was IIS 7/7.5 with SQL Server 2008 Express and .NET 4.0 on Windows 2008. You should have a similar combination of software installed if you expect it to work properly after following this tutorial. I also used SQL Server Management Studio Express to make things a bit easier for creating the database. If you don’t have it, you can grab it here.\n\nNOTE: This post is heavily based on Miloslav’s previous post for Installing WordPress on .NET 4.0, however I’m using SQL Server instead of MySql and a newer version of Phalanger.\n\n# Install Phalanger 3.0\n\nExtract the contents of the download and run the Setup Wizard to install Phalanger by following the on-screen instructions. Should be simple enough!\n\nNOTE: You can skip this step if you wish to do a standalone deployment or don’t have access to the server, as written in the Installation Free Phalanger article previously by Jakub. Be sure that you have the Microsoft Visual C++ 2010 SP1 x86 Redistributable installed or it will throw an error about php4ts.dll not being found!\n\n# Install WordPress\n\nExtract WordPress to a directory of your choosing within IIS.\n\nNOTE: I downloaded the IIS version of WordPress, although I’m not certain it matters.\n\nIn this tutorial I already have an ASP.NET 4.0 Web Application running in a directory (cfv2). I am going to install WordPress as a separate Web Application, but as a sub-directory that lives within this website. There are a couple ways to do this, but in this case I am installing it in a physical subfolder of the existing .NET web application. I created the directory at:\n\n`c:\\inetpub\\wwwroot\\cfv2\\wpblog\\`  \n\nNOTE: You can use wwwroot of IIS or any other virtual directory.\n\nNext, set write and modify permissions for IIS_IUSRS on this folder. This is necessary since WordPress creates wp-config.php file during the installation. Also, WordPress needs the write permission to allow auto update feature, downloading themes, plugins, etc.\n\nTo set the permissions, open Command Prompt with the Administrator permissions and run the cuantas pastillas cytotec para abortar following command:\n\n`icacls c:\\inetpub\\wwwroot\\cfv2\\wpblog /grant BUILTIN\\IIS_IUSRS:(OI)(CI)(M)`\n\nNOTE: If you don’t want to allow this you can create the configuration file manually during the installation. WordPress recognizes that it doesn’t have permissions to create the file and gives you content for this file. Then you can create the file manually.\n\nSetup the Web Application\n\nI’ve created the physical subdirectory (wpblog), but now I need to buy viagra in dubai set it up as a Web Application in IIS. There are a couple steps here that may differ for you depending on your setup.\n\nCREATE A 32-BIT APPLICATION POOL  \nFor the open source version of Phalanger to work properly you’ll need an Application Pool that is 32-Bit enabled. So here I will create a new Application Pool that will run in 32-Bit Mode. In IIS go to the Application Pools area under your server. Right click and do “Add New Application Pool…” I called mine WordPress. Select .NET 4.0 or above and click OK.\n\n![1](clip_image002.jpg)\n\nNext, check the list of Application Pools that should appear on the right. Select the newly created one and right click and select “Advanced Settings” option. Change “Enable 32-Bit Applications” from False to True.\n\n![2](clip_image004_thumb.jpg)\n\nCREATE A WEB APPLICATION  \nIn IIS right click and select the “Add Application”, then set the Physical Path to the wpblog directory. I’m going to call it “blog” so eventually it will look like http://mysite/blog/\n\n![3](clip_image006_thumb.gif)\n\nNext select the previously created Application Pool (called WordPress as mentioned in the previous step)\n\n![4](clip_image008_thumb.gif)\n\nADD A WEB.CONFIG FILE  \nConfigure ASP.NET using Web.config. The web.config file will reside in the root of the wordpress directory (in this case wpblog). Here is an example web.config file that uses Phalanger 3.0 references.\n\nView the sample web.config file.\n\nAlternatively, view the sample web.config file for standalone installations including URL rewrites for pretty permalinks.\n\nMore information about configurations can be found here in the wiki.\n\n# Setup your SQL Server database\n\nCreate a new empty SQL Server database for the WordPress stuff to reside. Optionally, you can skip this if you have already created one or are planning on using an existing database.\n\n![4](clip_image010_thumb.gif)\n\nBe sure to setup a user with high enough privileges to create the tables.\n\n![5](clip_image012_thumb.gif)\n\n#Setup the WP Database Abstraction Plugin\n\nNow we’ll need to follow theDB Abstraction plugin instructions.\n\nUpload wp-db-abstraction.php and the wp-db-abstraction directory to wp-content/mu-plugins. This should be parallel to your regular plugins directory. If the mu-plugins directory does not exist, you must create it.\n\n![6](clip_image014_thumb.gif)\n\nMove the db.php file from inside the wp-db-abstraction directory to wp-content/db.php\n\nSetup and install the plugin by going your wordpress url (eg. http://localhost/blog/) with the subdirectory /wp-content/mu-plugins/wp-db-abstraction/setup-config.php appended to generate your wp-config.php file.\n\n![7](clip_image016_thumb.gif)\n\nFollow the on-screen instructions from the point on…\n\n# That is it. Now just follow the normal WordPress setup and you’re home!\n\nNOTE: After installation, see Miloslav’s article for information about setting up permalinks by modifying your web.config file.\n\n# Optional: Pre-Compile WordPress with Phalanger\n\nPhalanger can compile the source code to a .NET assembly for improved performance. This is suggested!\n\nNOTE: It is not necessary to precompile the web page; single scripts will be compiled during first requests subsequently. However it is recommended to precompile the application to make sure the application is error free and to lower response time during first request.\n\nTo do this, create a build.bat file in the wordpress directory with something similar to the following content:\n\n`@echo off\n\"C:\\Program Files (x86)\\Phalanger 3.0\\Bin\\phpc\" /target:web /root:. /recurse:. /out:Bin /static+ /debug-`\n\nThis batch file runs the Phalanger compiler to perform the pre-compilation. Detailed documentation for each of phpc option can be found here.\n\n![8](clip_image018_thumb.gif)\n\n# Error during Build? Here is a quick fix!\n\nIt will likely give you an error when you attempt to build (although this may be fixed in the future), so you have to make a slight modification to the WP Abstraction Plugin. I encountered an error with the Data Abstraction plugin at line 562 of the pdo.php:\n\n![9](clip_image020_thumb.jpg)\n\nIt seems to choke on the “break;” line in the pdo.php since it is not in a loop. Modify it to “return;”, save the file, and then it should compile OK.\n\nAfter it compiles successfully, the Bin folder should have a WebPages.dll file inside. If you are doing a standalone install, you’ll need to drop all the necessary Phalanger DLLs in the Bin as well.\n\n# Concluding Thoughts\n\nThis is a real-world walk-through from notes as I set it up for my own purposes. There are numerous variations you can take along the way to set it up in your own environment and this post should only be used as a guideline. Definitely spend time testing it out in a local or sandbox environment before putting it into production.\n\nI would highly suggest using the pre-compiled version versus non-compiled as it seems to offer some speed benefits. I tried both — the non-compiled version seemed to intermittently take long periods to load pages and sometimes would even timeout (load a blank page).\n\nFor high-level production environments, Devsense offers a Managed Extensions Pack for a fee, which provides increased speed, security and the ability to run in 64-Bit mode.\n\nI’m a big advocate of using open-source .NET stuff, and also giving back. If you use the open-source version of Phalanger, please be sure to contribute by donating to the project.\n\nThat’s all! See, I told you WordPress on .NET with SQL Server is possible. In fact, it’s Possimpible (finally see the reference here). Still a skeptic? Check it out live at http://couponfollow.com/blog/ and be amazed! Well it needs some UI theme updates… and some content… but hey, it is working.\n\n## About the Guest Author\n\nMarc Mezzacca is a .NET Programmer, entrepreneur, and founder of NextGen Shopping, a company dedicated to creating innovative shopping mashups. Marc’s latest venture is a social-media based coupon code website called CouponFollow that utilizes the Twitter API.\n"
  },
  {
    "path": "docs/blog/writing-compiled-php-extensions-in-php.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [the Peachpie repository](https://github.com/iolevel/peachpie)\n\nBy Jakub Misek, 02/07/2012\n\nPHP offers a lot of various extensions which add additional library functions, classes, constants and other constructs. Common extensions include for example php_mysql and php_iconv. capoten on line no presciption Since extensions are implemented in C language, the performance is great. It also allows programmers to use other native libraries that are not available in PHP. However there is one big disadvantage; writing such extensions is not easy. C code is harder to maintain, it requires learning lower-level language and it is easier to make mistakes that lead to program failures that are hard to handle.\n\nWriting custom extensions is mostly done by companies requiring high performance code. Most of the normal libraries are written in PHP as a bunch of standard PHP scripts containing functions and classes. Users then include these libraries as normal, and the result is very similar. Writing libraries in PHP is much easier then writing extensions in C language, but it has significant performance costs. Also the author has to expose the source code of their library, which is not always desirable (I know, there is a obfuscation; but also deobfuscation).\n\n# Phalanger approach\n\nWith Phalanger (the PHP compiler for .NET) developers can simply compile their PHP libraries as they are into a DLL file. Taking advantage of pure mode, the resulting compiled assembly can be used both from PHP scripts running on Phalanger or from any other .NET language.\n\n# Extension advantages\n\nSo there are three approaches of extending PHP scripts with your library functionality. Every approach has some advantages. As you can see, Phalanger offers best of both worlds. You can:\n\n- Write a bunch of PHP scripts as a “library”. Any PHP programmer is able to write such library. However library has to be processed and loaded every time it is used. Also you don’t have an access to native libraries written in other languages.\n- Implement PHP extension in C language. This requires better knowledge of PHP internals and C language. The prize for that effort is maximum performance. Also you can take advantage of other libraries written in C/C++.\n- Implement Phalanger extension in PHP langage. When you take your PHP library and compile it using Phalanger, the result is DLL working as any other extension. You are using simple PHP syntax, but you have access to all the .NET libraries including your own. The extension is fast, compiled, and loaded only once. Moreover Phalanger compiler optimizes usage of such extension more than usage of a bunch of PHP scripts.\n\n# An example\n\nThe extension has to be compiled in pure mode. It has only one (logical) limitation – you are not allowed to write a global code. You can only declare global functions, global classes or global constants. Also there are no inclusions; all the source files are processed together, as one big script containing everything (the order of scripts is not important since there is no global code).\n\nImagine you need simple extension with one function. Something you cannot do efficiently in PHP :) , such as calling a .NET method. Sure you can call it directly from Phalanger-compiled PHP code without using an extension, but this is just for the demonstration:\n\n```php\n<?php\nfunction getextension($fname) {\nreturn System\\IO\\Path::GetExtension($fname);\n}\n// Expose domperidone without script constant or a class as follows:\n// const MY_CONST = 123;\n// class MY_CLASS{};\n?>\n```\n\nThe code can be compiled by the following command or from Visual Studio:\n\n`phpc.exe /target:dll /pure+ /out:myex.dll /r:mscorlib ex.php`\n\nThe command references .NET library “mscorlib” where the System.IO.Path class is defined and compiles the “ex.php” script. Resulting assembly “myex.dll” can be used as any other Phalanger extension by adding following into the configuration:\n\n`<add url='myex.dll' />`\n\nThats all. Functions, classes and constants defined in the extension will be available in the PHP code. The extension can be distributed compiled, so the source code is safe. Since it is loaded as an extension, the performance is not degraded; and it does not matter how big your extension is.\n\n# Summary\n\nThis article is, of course, just a simple demonstration, but it shows a very powerful approach for extending PHP with extensions when using Phalanger. The approach described in this article has a number of applications – when porting applications from PHP to Phalanger, you can use it to reimplement a C extension that you’re using, so that you don’t have to change a single line of your program. You can also use it to wrap .NET functionality in a PHP-friendly way. Finally, the technique can be also used to re-implement standard PHP extensions that are not yet available in Phalanger (although, all major extensions are already available).\n\nComplete example with sample usages is available at discussion forum. See PHP extension in PHP. Note you can use Phalanger Tools for Visual Studio if you don’t like command line :-)\n"
  },
  {
    "path": "docs/index.md",
    "content": "- [Blog](blog)\n- [Benchmarks](phalanger-benchmarks)\n"
  },
  {
    "path": "docs/phalanger-benchmarks.md",
    "content": "> **Note:** There is a new, modern PHP compiler to .NET entitled Peachpie, which is being developed at the moment. Please see [here](www.github.com/iolevel/peachpie) for the project repository and check out the latest [benchmarks on the project's website](http://peachpie.io/benchmarks).\n\n# Benchmarks\nThe following benchmarks were performed using Phalanger (March 2012).\n\n## WordPress benchmarks\n-CPU: Core i7 2600K, 3.70 GHz, 16GB RAM  \n-Windows 7 Professional, 64 bit, IIS 7.5, .NET 4.0  \n-WordPress: 3.3.1, clean installation  \n-No output caching.  \n-Managed MySQL extension for Phalanger.  \n\n![1](blog/1.png)\n![2](blog/2.png)\n\nTollowing tests are available in Phalanger’s source code repository. Benchmarks are performed on Core i7 2600K, 3.70 GHz, running as x86 or x64.\n\n![3](blog/3.png)\n![4](blog/4.png)\n![5](blog/5.png)\n\n"
  }
]